summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2015-01-22 00:29:39 +0100
committerMichael Biebl <biebl@debian.org>2015-01-22 00:29:39 +0100
commit2c032d8f1c6292c1338a615e6ec40252889ba85c (patch)
tree1f77182220b2b0264288ba4a476ab47e5bc48716
parent33491bc4279481db8ae47213e34a6d695a0e8830 (diff)
Imported Upstream version 1.0.0upstream/1.0.0
-rw-r--r--Makefile.am26
-rw-r--r--Makefile.in290
-rw-r--r--NEWS51
-rwxr-xr-xautogen.sh7
-rwxr-xr-xbuild-aux/config.guess313
-rwxr-xr-xbuild-aux/config.sub56
-rw-r--r--callouts/Makefile.am46
-rw-r--r--callouts/Makefile.in84
-rw-r--r--callouts/nm-avahi-autoipd-action.c150
-rw-r--r--callouts/nm-dispatcher-api.h10
-rw-r--r--callouts/nm-dispatcher-utils.c448
-rw-r--r--callouts/nm-dispatcher-utils.h24
-rw-r--r--callouts/nm-dispatcher.c262
-rw-r--r--callouts/nm-dispatcher.xml4
-rw-r--r--callouts/tests/Makefile.am17
-rw-r--r--callouts/tests/Makefile.in154
-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.c374
-rw-r--r--cli/Makefile.am2
-rw-r--r--cli/completion/Makefile.am2
-rw-r--r--cli/src/Makefile.am40
-rw-r--r--clients/Makefile.am21
-rw-r--r--clients/Makefile.in (renamed from test/Makefile.in)294
-rw-r--r--clients/cli/Makefile.am72
-rw-r--r--clients/cli/Makefile.in862
-rw-r--r--clients/cli/agent.c252
-rw-r--r--clients/cli/agent.h (renamed from src/settings/nm-settings-error.c)22
-rw-r--r--clients/cli/common.c (renamed from cli/src/common.c)690
-rw-r--r--clients/cli/common.h (renamed from cli/src/common.h)43
-rw-r--r--clients/cli/connections.c (renamed from cli/src/connections.c)3062
-rw-r--r--clients/cli/connections.h (renamed from cli/src/connections.h)0
-rw-r--r--clients/cli/devices.c (renamed from cli/src/devices.c)1089
-rw-r--r--clients/cli/devices.h (renamed from cli/src/devices.h)0
-rw-r--r--clients/cli/general.c (renamed from cli/src/network-manager.c)264
-rw-r--r--clients/cli/general.h (renamed from cli/src/network-manager.h)8
-rw-r--r--clients/cli/nmcli-completion (renamed from cli/completion/nmcli)77
-rw-r--r--clients/cli/nmcli.c (renamed from cli/src/nmcli.c)256
-rw-r--r--clients/cli/nmcli.h (renamed from cli/src/nmcli.h)32
-rw-r--r--clients/cli/polkit-agent.c166
-rw-r--r--clients/cli/polkit-agent.h (renamed from src/settings/plugins/ifnet/errors.c)23
-rw-r--r--clients/cli/settings-docs.c388
-rw-r--r--clients/cli/settings-docs.xsl86
-rw-r--r--clients/cli/settings.c (renamed from cli/src/settings.c)1512
-rw-r--r--clients/cli/settings.h (renamed from cli/src/settings.h)33
-rw-r--r--clients/cli/utils.c (renamed from cli/src/utils.c)79
-rw-r--r--clients/cli/utils.h (renamed from cli/src/utils.h)5
-rw-r--r--clients/common/nm-polkit-listener.c415
-rw-r--r--clients/common/nm-polkit-listener.h104
-rw-r--r--clients/common/nm-secret-agent-simple.c695
-rw-r--r--clients/common/nm-secret-agent-simple.h62
-rw-r--r--clients/nm-online.c (renamed from test/nm-online.c)89
-rw-r--r--clients/tui/Makefile.am (renamed from tui/Makefile.am)34
-rw-r--r--clients/tui/Makefile.in (renamed from tui/Makefile.in)123
-rw-r--r--clients/tui/newt/Makefile.am (renamed from tui/newt/Makefile.am)1
-rw-r--r--clients/tui/newt/Makefile.in (renamed from tui/newt/Makefile.in)13
-rw-r--r--clients/tui/newt/nmt-newt-button-box.c (renamed from tui/newt/nmt-newt-button-box.c)13
-rw-r--r--clients/tui/newt/nmt-newt-button-box.h (renamed from tui/newt/nmt-newt-button-box.h)0
-rw-r--r--clients/tui/newt/nmt-newt-button.c (renamed from tui/newt/nmt-newt-button.c)11
-rw-r--r--clients/tui/newt/nmt-newt-button.h (renamed from tui/newt/nmt-newt-button.h)0
-rw-r--r--clients/tui/newt/nmt-newt-checkbox.c (renamed from tui/newt/nmt-newt-checkbox.c)22
-rw-r--r--clients/tui/newt/nmt-newt-checkbox.h (renamed from tui/newt/nmt-newt-checkbox.h)0
-rw-r--r--clients/tui/newt/nmt-newt-component.c (renamed from tui/newt/nmt-newt-component.c)20
-rw-r--r--clients/tui/newt/nmt-newt-component.h (renamed from tui/newt/nmt-newt-component.h)0
-rw-r--r--clients/tui/newt/nmt-newt-container.c (renamed from tui/newt/nmt-newt-container.c)0
-rw-r--r--clients/tui/newt/nmt-newt-container.h (renamed from tui/newt/nmt-newt-container.h)0
-rw-r--r--clients/tui/newt/nmt-newt-entry-numeric.c (renamed from tui/newt/nmt-newt-entry-numeric.c)26
-rw-r--r--clients/tui/newt/nmt-newt-entry-numeric.h (renamed from tui/newt/nmt-newt-entry-numeric.h)0
-rw-r--r--clients/tui/newt/nmt-newt-entry.c (renamed from tui/newt/nmt-newt-entry.c)46
-rw-r--r--clients/tui/newt/nmt-newt-entry.h (renamed from tui/newt/nmt-newt-entry.h)0
-rw-r--r--clients/tui/newt/nmt-newt-form.c (renamed from tui/newt/nmt-newt-form.c)132
-rw-r--r--clients/tui/newt/nmt-newt-form.h (renamed from tui/newt/nmt-newt-form.h)0
-rw-r--r--clients/tui/newt/nmt-newt-grid.c (renamed from tui/newt/nmt-newt-grid.c)0
-rw-r--r--clients/tui/newt/nmt-newt-grid.h (renamed from tui/newt/nmt-newt-grid.h)0
-rw-r--r--clients/tui/newt/nmt-newt-hacks.c (renamed from tui/newt/nmt-newt-hacks.c)0
-rw-r--r--clients/tui/newt/nmt-newt-hacks.h (renamed from tui/newt/nmt-newt-hacks.h)0
-rw-r--r--clients/tui/newt/nmt-newt-label.c (renamed from tui/newt/nmt-newt-label.c)33
-rw-r--r--clients/tui/newt/nmt-newt-label.h (renamed from tui/newt/nmt-newt-label.h)0
-rw-r--r--clients/tui/newt/nmt-newt-listbox.c (renamed from tui/newt/nmt-newt-listbox.c)57
-rw-r--r--clients/tui/newt/nmt-newt-listbox.h (renamed from tui/newt/nmt-newt-listbox.h)0
-rw-r--r--clients/tui/newt/nmt-newt-popup.c (renamed from tui/newt/nmt-newt-popup.c)41
-rw-r--r--clients/tui/newt/nmt-newt-popup.h (renamed from tui/newt/nmt-newt-popup.h)0
-rw-r--r--clients/tui/newt/nmt-newt-section.c (renamed from tui/newt/nmt-newt-section.c)85
-rw-r--r--clients/tui/newt/nmt-newt-section.h (renamed from tui/newt/nmt-newt-section.h)2
-rw-r--r--clients/tui/newt/nmt-newt-separator.c (renamed from tui/newt/nmt-newt-separator.c)0
-rw-r--r--clients/tui/newt/nmt-newt-separator.h (renamed from tui/newt/nmt-newt-separator.h)0
-rw-r--r--clients/tui/newt/nmt-newt-stack.c (renamed from tui/newt/nmt-newt-stack.c)22
-rw-r--r--clients/tui/newt/nmt-newt-stack.h (renamed from tui/newt/nmt-newt-stack.h)0
-rw-r--r--clients/tui/newt/nmt-newt-textbox.c (renamed from tui/newt/nmt-newt-textbox.c)37
-rw-r--r--clients/tui/newt/nmt-newt-textbox.h (renamed from tui/newt/nmt-newt-textbox.h)0
-rw-r--r--clients/tui/newt/nmt-newt-toggle-button.c (renamed from tui/newt/nmt-newt-toggle-button.c)33
-rw-r--r--clients/tui/newt/nmt-newt-toggle-button.h (renamed from tui/newt/nmt-newt-toggle-button.h)0
-rw-r--r--clients/tui/newt/nmt-newt-types.h (renamed from tui/newt/nmt-newt-types.h)0
-rw-r--r--clients/tui/newt/nmt-newt-utils.c (renamed from tui/newt/nmt-newt-utils.c)1
-rw-r--r--clients/tui/newt/nmt-newt-utils.h (renamed from tui/newt/nmt-newt-utils.h)0
-rw-r--r--clients/tui/newt/nmt-newt-widget.c (renamed from tui/newt/nmt-newt-widget.c)44
-rw-r--r--clients/tui/newt/nmt-newt-widget.h (renamed from tui/newt/nmt-newt-widget.h)0
-rw-r--r--clients/tui/newt/nmt-newt.h (renamed from tui/newt/nmt-newt.h)0
-rw-r--r--clients/tui/nm-editor-bindings.c1101
-rw-r--r--clients/tui/nm-editor-bindings.h (renamed from tui/nm-editor-bindings.h)47
-rw-r--r--clients/tui/nm-editor-utils.c (renamed from tui/nm-editor-utils.c)45
-rw-r--r--clients/tui/nm-editor-utils.h (renamed from tui/nm-editor-utils.h)9
-rw-r--r--clients/tui/nmt-address-list.c (renamed from tui/nmt-address-list.c)27
-rw-r--r--clients/tui/nmt-address-list.h (renamed from tui/nmt-address-list.h)0
-rw-r--r--clients/tui/nmt-connect-connection-list.c (renamed from tui/nmt-connect-connection-list.c)133
-rw-r--r--clients/tui/nmt-connect-connection-list.h (renamed from tui/nmt-connect-connection-list.h)0
-rw-r--r--clients/tui/nmt-device-entry.c (renamed from tui/nmt-device-entry.c)126
-rw-r--r--clients/tui/nmt-device-entry.h (renamed from tui/nmt-device-entry.h)9
-rw-r--r--clients/tui/nmt-edit-connection-list.c (renamed from tui/nmt-edit-connection-list.c)124
-rw-r--r--clients/tui/nmt-edit-connection-list.h (renamed from tui/nmt-edit-connection-list.h)4
-rw-r--r--clients/tui/nmt-editor-grid.c (renamed from tui/nmt-page-grid.c)219
-rw-r--r--clients/tui/nmt-editor-grid.h (renamed from tui/nmt-page-grid.h)38
-rw-r--r--clients/tui/nmt-editor-page-device.c131
-rw-r--r--clients/tui/nmt-editor-page-device.h50
-rw-r--r--clients/tui/nmt-editor-page.c (renamed from tui/nmt-editor-page.c)100
-rw-r--r--clients/tui/nmt-editor-page.h (renamed from tui/nmt-editor-page.h)19
-rw-r--r--clients/tui/nmt-editor-section.c282
-rw-r--r--clients/tui/nmt-editor-section.h56
-rw-r--r--clients/tui/nmt-editor.c520
-rw-r--r--clients/tui/nmt-editor.h (renamed from tui/nmt-editor.h)2
-rw-r--r--clients/tui/nmt-ip-entry.c (renamed from tui/nmt-ip-entry.c)39
-rw-r--r--clients/tui/nmt-ip-entry.h (renamed from tui/nmt-ip-entry.h)0
-rw-r--r--clients/tui/nmt-mac-entry.c (renamed from tui/nmt-mac-entry.c)43
-rw-r--r--clients/tui/nmt-mac-entry.h (renamed from tui/nmt-mac-entry.h)5
-rw-r--r--clients/tui/nmt-mtu-entry.c (renamed from tui/nmt-mtu-entry.c)11
-rw-r--r--clients/tui/nmt-mtu-entry.h (renamed from tui/nmt-mtu-entry.h)0
-rw-r--r--clients/tui/nmt-page-bond.c (renamed from tui/nmt-page-bond.c)51
-rw-r--r--clients/tui/nmt-page-bond.h (renamed from tui/nmt-page-bond.h)8
-rw-r--r--clients/tui/nmt-page-bridge-port.c (renamed from tui/nmt-page-bridge-port.c)17
-rw-r--r--clients/tui/nmt-page-bridge-port.h (renamed from tui/nmt-page-bridge-port.h)2
-rw-r--r--clients/tui/nmt-page-bridge.c (renamed from tui/nmt-page-bridge.c)37
-rw-r--r--clients/tui/nmt-page-bridge.h (renamed from tui/nmt-page-bridge.h)8
-rw-r--r--clients/tui/nmt-page-dsl.c141
-rw-r--r--clients/tui/nmt-page-dsl.h50
-rw-r--r--clients/tui/nmt-page-ethernet.c (renamed from tui/nmt-page-ethernet.c)20
-rw-r--r--clients/tui/nmt-page-ethernet.h (renamed from tui/nmt-page-ethernet.h)8
-rw-r--r--clients/tui/nmt-page-infiniband.c (renamed from tui/nmt-page-infiniband.c)19
-rw-r--r--clients/tui/nmt-page-infiniband.h (renamed from tui/nmt-page-infiniband.h)8
-rw-r--r--clients/tui/nmt-page-ip4.c (renamed from tui/nmt-page-ip4.c)89
-rw-r--r--clients/tui/nmt-page-ip4.h (renamed from tui/nmt-page-ip4.h)4
-rw-r--r--clients/tui/nmt-page-ip6.c (renamed from tui/nmt-page-ip6.c)87
-rw-r--r--clients/tui/nmt-page-ip6.h (renamed from tui/nmt-page-ip6.h)4
-rw-r--r--clients/tui/nmt-page-ppp.c288
-rw-r--r--clients/tui/nmt-page-ppp.h49
-rw-r--r--clients/tui/nmt-page-team-port.c (renamed from tui/nmt-page-team-port.c)10
-rw-r--r--clients/tui/nmt-page-team-port.h (renamed from tui/nmt-page-team-port.h)4
-rw-r--r--clients/tui/nmt-page-team.c (renamed from tui/nmt-page-team.c)16
-rw-r--r--clients/tui/nmt-page-team.h (renamed from tui/nmt-page-team.h)8
-rw-r--r--clients/tui/nmt-page-vlan.c (renamed from tui/nmt-page-vlan.c)33
-rw-r--r--clients/tui/nmt-page-vlan.h (renamed from tui/nmt-page-vlan.h)8
-rw-r--r--clients/tui/nmt-page-wifi.c (renamed from tui/nmt-page-wifi.c)89
-rw-r--r--clients/tui/nmt-page-wifi.h (renamed from tui/nmt-page-wifi.h)8
-rw-r--r--clients/tui/nmt-password-dialog.c (renamed from tui/nmt-password-dialog.c)56
-rw-r--r--clients/tui/nmt-password-dialog.h (renamed from tui/nmt-password-dialog.h)0
-rw-r--r--clients/tui/nmt-password-fields.c (renamed from tui/nmt-password-fields.c)61
-rw-r--r--clients/tui/nmt-password-fields.h (renamed from tui/nmt-password-fields.h)0
-rw-r--r--clients/tui/nmt-route-editor.c (renamed from tui/nmt-route-editor.c)49
-rw-r--r--clients/tui/nmt-route-editor.h (renamed from tui/nmt-route-editor.h)2
-rw-r--r--clients/tui/nmt-route-entry.c (renamed from tui/nmt-route-entry.c)122
-rw-r--r--clients/tui/nmt-route-entry.h (renamed from tui/nmt-route-entry.h)0
-rw-r--r--clients/tui/nmt-route-table.c (renamed from tui/nmt-route-table.c)203
-rw-r--r--clients/tui/nmt-route-table.h (renamed from tui/nmt-route-table.h)0
-rw-r--r--clients/tui/nmt-slave-list.c (renamed from tui/nmt-slave-list.c)40
-rw-r--r--clients/tui/nmt-slave-list.h (renamed from tui/nmt-slave-list.h)0
-rw-r--r--clients/tui/nmt-utils.c (renamed from tui/nmt-utils.c)0
-rw-r--r--clients/tui/nmt-utils.h (renamed from tui/nmt-utils.h)0
-rw-r--r--clients/tui/nmt-widget-list.c (renamed from tui/nmt-widget-list.c)55
-rw-r--r--clients/tui/nmt-widget-list.h (renamed from tui/nmt-widget-list.h)0
-rw-r--r--clients/tui/nmtui-connect.c (renamed from tui/nmtui-connect.c)100
-rw-r--r--clients/tui/nmtui-connect.h (renamed from tui/nmtui-connect.h)0
-rw-r--r--clients/tui/nmtui-edit.c (renamed from tui/nmtui-edit.c)188
-rw-r--r--clients/tui/nmtui-edit.h (renamed from tui/nmtui-edit.h)0
-rw-r--r--clients/tui/nmtui-hostname.c (renamed from tui/nmtui-hostname.c)16
-rw-r--r--clients/tui/nmtui-hostname.h (renamed from tui/nmtui-hostname.h)0
-rw-r--r--clients/tui/nmtui.c (renamed from tui/nmtui.c)33
-rw-r--r--clients/tui/nmtui.h (renamed from tui/nmtui.h)4
-rw-r--r--config.h.in40
-rwxr-xr-xconfigure1067
-rw-r--r--configure.ac247
-rw-r--r--data/Makefile.in6
-rw-r--r--data/NetworkManager.service.in1
-rw-r--r--docs/Makefile.am2
-rw-r--r--docs/Makefile.in8
-rw-r--r--docs/api/Makefile.am36
-rw-r--r--docs/api/Makefile.in31
-rw-r--r--docs/api/html/index.html2
-rw-r--r--docs/api/html/ref-migrating.html6
-rw-r--r--docs/api/html/ref-settings.html1561
-rw-r--r--docs/api/html/spec.html140
-rw-r--r--docs/api/network-manager-docs.xml12
-rw-r--r--docs/api/settings-spec.xml2110
-rw-r--r--docs/api/settings-spec.xsl49
-rw-r--r--docs/api/spec.html140
-rw-r--r--docs/api/version.xml2
-rw-r--r--docs/libnm-glib/Makefile.am23
-rw-r--r--docs/libnm-glib/Makefile.in29
-rw-r--r--docs/libnm-glib/html/NMAccessPoint.html20
-rw-r--r--docs/libnm-glib/html/NMActiveConnection.html16
-rw-r--r--docs/libnm-glib/html/NMClient.html81
-rw-r--r--docs/libnm-glib/html/NMDevice.html123
-rw-r--r--docs/libnm-glib/html/NMDeviceBond.html2
-rw-r--r--docs/libnm-glib/html/NMDeviceBridge.html2
-rw-r--r--docs/libnm-glib/html/NMDeviceBt.html8
-rw-r--r--docs/libnm-glib/html/NMDeviceModem.html8
-rw-r--r--docs/libnm-glib/html/NMDeviceTeam.html2
-rw-r--r--docs/libnm-glib/html/NMDeviceVlan.html44
-rw-r--r--docs/libnm-glib/html/NMDeviceWifi.html10
-rw-r--r--docs/libnm-glib/html/NMDeviceWimax.html2
-rw-r--r--docs/libnm-glib/html/NMIP4Config.html4
-rw-r--r--docs/libnm-glib/html/NMIP6Config.html4
-rw-r--r--docs/libnm-glib/html/NMObject.html4
-rw-r--r--docs/libnm-glib/html/NMRemoteConnection.html10
-rw-r--r--docs/libnm-glib/html/NMRemoteSettings.html42
-rw-r--r--docs/libnm-glib/html/NMSecretAgent.html10
-rw-r--r--docs/libnm-glib/html/NMWimaxNsp.html13
-rw-r--r--docs/libnm-glib/html/api-index-full.html24
-rw-r--r--docs/libnm-glib/html/index.html2
-rw-r--r--docs/libnm-glib/html/index.sgml8
-rw-r--r--docs/libnm-glib/html/libnm-glib-nm-vpn-plugin-utils.html6
-rw-r--r--docs/libnm-glib/html/libnm-glib.devhelp28
-rw-r--r--docs/libnm-glib/libnm-glib-sections.txt7
-rw-r--r--docs/libnm-glib/tmpl/nm-device-vlan.sgml21
-rw-r--r--docs/libnm-glib/tmpl/nm-device.sgml31
-rw-r--r--docs/libnm-glib/version.xml2
-rw-r--r--docs/libnm-util/Makefile.am4
-rw-r--r--docs/libnm-util/Makefile.in10
-rw-r--r--docs/libnm-util/html/NMConnection.html116
-rw-r--r--docs/libnm-util/html/NMSetting.html42
-rw-r--r--docs/libnm-util/html/NMSetting8021x.html32
-rw-r--r--docs/libnm-util/html/NMSettingBluetooth.html3
-rw-r--r--docs/libnm-util/html/NMSettingBond.html9
-rw-r--r--docs/libnm-util/html/NMSettingConnection.html3
-rw-r--r--docs/libnm-util/html/NMSettingIP4Config.html68
-rw-r--r--docs/libnm-util/html/NMSettingIP6Config.html59
-rw-r--r--docs/libnm-util/html/NMSettingVPN.html44
-rw-r--r--docs/libnm-util/html/NMSettingWireless.html22
-rw-r--r--docs/libnm-util/html/annotation-glossary.html5
-rw-r--r--docs/libnm-util/html/api-index-full.html544
-rw-r--r--docs/libnm-util/html/ch01.html6
-rw-r--r--docs/libnm-util/html/index.html8
-rw-r--r--docs/libnm-util/html/index.sgml322
-rw-r--r--docs/libnm-util/html/libnm-util-NetworkManager.html1635
-rw-r--r--docs/libnm-util/html/libnm-util-NetworkManagerVPN.html861
-rw-r--r--docs/libnm-util/html/libnm-util-nm-utils.html205
-rw-r--r--docs/libnm-util/html/libnm-util.devhelp2315
-rw-r--r--docs/libnm-util/html/object-tree.html4
-rw-r--r--docs/libnm-util/libnm-util-docs.sgml2
-rw-r--r--docs/libnm-util/libnm-util-sections.txt136
-rw-r--r--docs/libnm-util/tmpl/NetworkManager.sgml535
-rw-r--r--docs/libnm-util/tmpl/NetworkManagerVPN.sgml484
-rw-r--r--docs/libnm-util/tmpl/nm-connection.sgml29
-rw-r--r--docs/libnm-util/tmpl/nm-setting-bond.sgml7
-rw-r--r--docs/libnm-util/tmpl/nm-setting-ip4-config.sgml26
-rw-r--r--docs/libnm-util/tmpl/nm-setting-ip6-config.sgml21
-rw-r--r--docs/libnm-util/tmpl/nm-setting-vpn.sgml21
-rw-r--r--docs/libnm-util/tmpl/nm-setting.sgml4
-rw-r--r--docs/libnm-util/tmpl/nm-utils.sgml25
-rw-r--r--docs/libnm-util/version.xml2
-rw-r--r--docs/libnm/Makefile.am94
-rw-r--r--docs/libnm/Makefile.in (renamed from cli/completion/Makefile.in)474
-rw-r--r--docs/libnm/html/NMAccessPoint.html613
-rw-r--r--docs/libnm/html/NMActiveConnection.html816
-rw-r--r--docs/libnm/html/NMClient.html3059
-rw-r--r--docs/libnm/html/NMDevice.html1858
-rw-r--r--docs/libnm/html/NMDeviceAdsl.html147
-rw-r--r--docs/libnm/html/NMDeviceBond.html243
-rw-r--r--docs/libnm/html/NMDeviceBridge.html243
-rw-r--r--docs/libnm/html/NMDeviceBt.html237
-rw-r--r--docs/libnm/html/NMDeviceEthernet.html286
-rw-r--r--docs/libnm/html/NMDeviceGeneric.html167
-rw-r--r--docs/libnm/html/NMDeviceInfiniband.html193
-rw-r--r--docs/libnm/html/NMDeviceModem.html202
-rw-r--r--docs/libnm/html/NMDeviceOlpcMesh.html239
-rw-r--r--docs/libnm/html/NMDeviceTeam.html243
-rw-r--r--docs/libnm/html/NMDeviceVlan.html278
-rw-r--r--docs/libnm/html/NMDeviceWifi.html668
-rw-r--r--docs/libnm/html/NMDeviceWimax.html597
-rw-r--r--docs/libnm/html/NMDhcpConfig.html232
-rw-r--r--docs/libnm/html/NMIPConfig.html473
-rw-r--r--docs/libnm/html/NMObject.html188
-rw-r--r--docs/libnm/html/NMRemoteConnection.html761
-rw-r--r--docs/libnm/html/NMSecretAgentOld.html911
-rw-r--r--docs/libnm/html/NMSetting.html932
-rw-r--r--docs/libnm/html/NMSetting8021x.html3251
-rw-r--r--docs/libnm/html/NMSettingAdsl.html463
-rw-r--r--docs/libnm/html/NMSettingBluetooth.html244
-rw-r--r--docs/libnm/html/NMSettingBond.html573
-rw-r--r--docs/libnm/html/NMSettingBridge.html426
-rw-r--r--docs/libnm/html/NMSettingBridgePort.html257
-rw-r--r--docs/libnm/html/NMSettingCdma.html297
-rw-r--r--docs/libnm/html/NMSettingConnection.html1246
-rw-r--r--docs/libnm/html/NMSettingDcb.html1140
-rw-r--r--docs/libnm/html/NMSettingGeneric.html119
-rw-r--r--docs/libnm/html/NMSettingGsm.html521
-rw-r--r--docs/libnm/html/NMSettingIP4Config.html251
-rw-r--r--docs/libnm/html/NMSettingIP6Config.html316
-rw-r--r--docs/libnm/html/NMSettingIPConfig.html2580
-rw-r--r--docs/libnm/html/NMSettingInfiniband.html391
-rw-r--r--docs/libnm/html/NMSettingOlpcMesh.html213
-rw-r--r--docs/libnm/html/NMSettingPpp.html905
-rw-r--r--docs/libnm/html/NMSettingPppoe.html297
-rw-r--r--docs/libnm/html/NMSettingSerial.html381
-rw-r--r--docs/libnm/html/NMSettingTeam.html168
-rw-r--r--docs/libnm/html/NMSettingTeamPort.html168
-rw-r--r--docs/libnm/html/NMSettingVlan.html727
-rw-r--r--docs/libnm/html/NMSettingVpn.html682
-rw-r--r--docs/libnm/html/NMSettingWimax.html217
-rw-r--r--docs/libnm/html/NMSettingWired.html1015
-rw-r--r--docs/libnm/html/NMSettingWireless.html1053
-rw-r--r--docs/libnm/html/NMSettingWirelessSecurity.html1450
-rw-r--r--docs/libnm/html/NMSimpleConnection.html175
-rw-r--r--docs/libnm/html/NMVpnConnection.html233
-rw-r--r--docs/libnm/html/NMWimaxNsp.html357
-rw-r--r--docs/libnm/html/annotation-glossary.html77
-rw-r--r--docs/libnm/html/api-index-full.html7247
-rw-r--r--docs/libnm/html/ch02.html47
-rw-r--r--docs/libnm/html/ch03.html126
-rw-r--r--docs/libnm/html/ch04.html95
-rw-r--r--docs/libnm/html/ch05.html38
-rw-r--r--docs/libnm/html/ch06.html38
-rw-r--r--docs/libnm/html/home.pngbin0 -> 654 bytes
-rw-r--r--docs/libnm/html/index.html259
-rw-r--r--docs/libnm/html/index.sgml2622
-rw-r--r--docs/libnm/html/left.pngbin0 -> 459 bytes
-rw-r--r--docs/libnm/html/libnm-NMConnection.html1868
-rw-r--r--docs/libnm/html/libnm-NMVpnEditorPlugin.html382
-rw-r--r--docs/libnm/html/libnm-nm-dbus-interface.html1806
-rw-r--r--docs/libnm/html/libnm-nm-errors.html844
-rw-r--r--docs/libnm/html/libnm-nm-utils.html2042
-rw-r--r--docs/libnm/html/libnm-nm-version.html249
-rw-r--r--docs/libnm/html/libnm-nm-vpn-dbus-interface.html882
-rw-r--r--docs/libnm/html/libnm.devhelp22207
-rw-r--r--docs/libnm/html/libnm.pngbin0 -> 82140 bytes
-rw-r--r--docs/libnm/html/object-tree.html136
-rw-r--r--docs/libnm/html/ref-overview.html48
-rw-r--r--docs/libnm/html/right.pngbin0 -> 472 bytes
-rw-r--r--docs/libnm/html/style.css266
-rw-r--r--docs/libnm/html/up.pngbin0 -> 406 bytes
-rw-r--r--docs/libnm/libnm-docs.xml161
-rw-r--r--docs/libnm/libnm-overrides.txt0
-rw-r--r--docs/libnm/libnm-sections.txt2285
-rw-r--r--docs/libnm/libnm.pngbin0 -> 82140 bytes
-rw-r--r--docs/libnm/libnm.types103
-rw-r--r--docs/libnm/tmpl/libnm-unused.sgml0
-rw-r--r--docs/libnm/tmpl/nm-access-point.sgml258
-rw-r--r--docs/libnm/tmpl/nm-active-connection.sgml352
-rw-r--r--docs/libnm/tmpl/nm-client.sgml952
-rw-r--r--docs/libnm/tmpl/nm-connection.sgml573
-rw-r--r--docs/libnm/tmpl/nm-core-enum-types.sgml24
-rw-r--r--docs/libnm/tmpl/nm-dbus-interface.sgml548
-rw-r--r--docs/libnm/tmpl/nm-device-adsl.sgml58
-rw-r--r--docs/libnm/tmpl/nm-device-bond.sgml100
-rw-r--r--docs/libnm/tmpl/nm-device-bridge.sgml100
-rw-r--r--docs/libnm/tmpl/nm-device-bt.sgml100
-rw-r--r--docs/libnm/tmpl/nm-device-ethernet.sgml121
-rw-r--r--docs/libnm/tmpl/nm-device-generic.sgml70
-rw-r--r--docs/libnm/tmpl/nm-device-infiniband.sgml79
-rw-r--r--docs/libnm/tmpl/nm-device-modem.sgml79
-rw-r--r--docs/libnm/tmpl/nm-device-olpc-mesh.sgml100
-rw-r--r--docs/libnm/tmpl/nm-device-team.sgml100
-rw-r--r--docs/libnm/tmpl/nm-device-vlan.sgml121
-rw-r--r--docs/libnm/tmpl/nm-device-wifi.sgml245
-rw-r--r--docs/libnm/tmpl/nm-device-wimax.sgml233
-rw-r--r--docs/libnm/tmpl/nm-device.sgml696
-rw-r--r--docs/libnm/tmpl/nm-dhcp-config.sgml89
-rw-r--r--docs/libnm/tmpl/nm-enum-types.sgml24
-rw-r--r--docs/libnm/tmpl/nm-errors.sgml263
-rw-r--r--docs/libnm/tmpl/nm-ip-config.sgml205
-rw-r--r--docs/libnm/tmpl/nm-object.sgml77
-rw-r--r--docs/libnm/tmpl/nm-remote-connection.sgml229
-rw-r--r--docs/libnm/tmpl/nm-secret-agent-old.sgml234
-rw-r--r--docs/libnm/tmpl/nm-setting-8021x.sgml1091
-rw-r--r--docs/libnm/tmpl/nm-setting-adsl.sgml235
-rw-r--r--docs/libnm/tmpl/nm-setting-bluetooth.sgml109
-rw-r--r--docs/libnm/tmpl/nm-setting-bond.sgml251
-rw-r--r--docs/libnm/tmpl/nm-setting-bridge-port.sgml116
-rw-r--r--docs/libnm/tmpl/nm-setting-bridge.sgml200
-rw-r--r--docs/libnm/tmpl/nm-setting-cdma.sgml137
-rw-r--r--docs/libnm/tmpl/nm-setting-connection.sgml473
-rw-r--r--docs/libnm/tmpl/nm-setting-dcb.sgml458
-rw-r--r--docs/libnm/tmpl/nm-setting-generic.sgml53
-rw-r--r--docs/libnm/tmpl/nm-setting-gsm.sgml242
-rw-r--r--docs/libnm/tmpl/nm-setting-infiniband.sgml167
-rw-r--r--docs/libnm/tmpl/nm-setting-ip-config.sgml872
-rw-r--r--docs/libnm/tmpl/nm-setting-ip4-config.sgml109
-rw-r--r--docs/libnm/tmpl/nm-setting-ip6-config.sgml126
-rw-r--r--docs/libnm/tmpl/nm-setting-olpc-mesh.sgml116
-rw-r--r--docs/libnm/tmpl/nm-setting-ppp.sgml431
-rw-r--r--docs/libnm/tmpl/nm-setting-pppoe.sgml137
-rw-r--r--docs/libnm/tmpl/nm-setting-serial.sgml167
-rw-r--r--docs/libnm/tmpl/nm-setting-team-port.sgml74
-rw-r--r--docs/libnm/tmpl/nm-setting-team.sgml74
-rw-r--r--docs/libnm/tmpl/nm-setting-vlan.sgml245
-rw-r--r--docs/libnm/tmpl/nm-setting-vpn.sgml248
-rw-r--r--docs/libnm/tmpl/nm-setting-wimax.sgml95
-rw-r--r--docs/libnm/tmpl/nm-setting-wired.sgml392
-rw-r--r--docs/libnm/tmpl/nm-setting-wireless-security.sgml545
-rw-r--r--docs/libnm/tmpl/nm-setting-wireless.sgml437
-rw-r--r--docs/libnm/tmpl/nm-setting.sgml252
-rw-r--r--docs/libnm/tmpl/nm-simple-connection.sgml65
-rw-r--r--docs/libnm/tmpl/nm-utils.sgml578
-rw-r--r--docs/libnm/tmpl/nm-version.sgml158
-rw-r--r--docs/libnm/tmpl/nm-vpn-connection.sgml89
-rw-r--r--docs/libnm/tmpl/nm-vpn-dbus-interface.sgml484
-rw-r--r--docs/libnm/tmpl/nm-vpn-editor-plugin.sgml169
-rw-r--r--docs/libnm/tmpl/nm-wimax-nsp.sgml130
-rw-r--r--docs/libnm/version.xml1
-rw-r--r--docs/libnm/version.xml.in1
-rw-r--r--examples/C/Makefile.in6
-rw-r--r--examples/C/glib/Makefile.am96
-rw-r--r--examples/C/glib/Makefile.in282
-rw-r--r--examples/C/glib/add-connection-dbus-glib.c126
-rw-r--r--examples/C/glib/add-connection-gdbus.c150
-rw-r--r--examples/C/glib/add-connection-libnm.c (renamed from examples/C/glib/add-connection-libnm-glib.c)84
-rw-r--r--examples/C/glib/get-active-connections-dbus-glib.c223
-rw-r--r--examples/C/glib/get-active-connections-gdbus.c274
-rw-r--r--examples/C/glib/get-ap-info-libnm.c (renamed from examples/C/glib/get-ap-info-libnm-glib.c)52
-rw-r--r--examples/C/glib/list-connections-dbus-glib.c91
-rw-r--r--examples/C/glib/list-connections-gdbus.c90
-rw-r--r--examples/C/glib/list-connections-libnm-glib.c178
-rw-r--r--examples/C/glib/list-connections-libnm.c101
-rw-r--r--examples/C/glib/monitor-nm-running-dbus-glib.c127
-rw-r--r--examples/C/glib/monitor-nm-running-gdbus.c (renamed from examples/C/glib/monitor-nm-running-GDBus.c)7
-rw-r--r--examples/C/glib/monitor-nm-state-gdbus.c (renamed from examples/C/glib/monitor-nm-state-GDBus.c)16
-rw-r--r--examples/C/qt/Makefile.am4
-rw-r--r--examples/C/qt/Makefile.in10
-rw-r--r--examples/C/qt/add-connection-wired.cpp4
-rw-r--r--examples/C/qt/change-ipv4-addresses.cpp12
-rw-r--r--examples/C/qt/list-connections.cpp4
-rw-r--r--examples/Makefile.in6
-rw-r--r--examples/dispatcher/Makefile.in6
-rw-r--r--examples/python/Makefile.in6
-rw-r--r--examples/python/dbus/Makefile.am1
-rw-r--r--examples/python/dbus/Makefile.in7
-rwxr-xr-xexamples/python/dbus/add-connection-compat.py66
-rwxr-xr-xexamples/python/dbus/add-connection.py24
-rwxr-xr-xexamples/python/dbus/is-wwan-default.py58
-rwxr-xr-xexamples/python/dbus/update-ip4-method.py33
-rw-r--r--examples/python/gi/Makefile.in6
-rwxr-xr-xexamples/python/gi/add_connection.py52
-rwxr-xr-xexamples/python/gi/device-state-ip4config.py4
-rwxr-xr-xexamples/python/gi/firewall-zone.py30
-rwxr-xr-xexamples/python/gi/get-active-connections.py4
-rwxr-xr-xexamples/python/gi/get_ips.py90
-rwxr-xr-xexamples/python/gi/list-connections.py34
-rwxr-xr-xexamples/python/gi/show-wifi-networks.py36
-rwxr-xr-xexamples/python/gi/update-ip4-method.py91
-rw-r--r--examples/ruby/Makefile.in6
-rwxr-xr-xexamples/ruby/add-connection.rb7
-rw-r--r--examples/shell/Makefile.in6
-rw-r--r--include/Makefile.am14
-rw-r--r--include/Makefile.in185
-rw-r--r--include/gsystem-local-alloc.h (renamed from libgsystem/gsystem-local-alloc.h)19
-rw-r--r--include/nm-dbus-glib-types.h18
-rw-r--r--include/nm-glib-compat.h125
-rw-r--r--include/nm-gvaluearray-compat.h11
-rw-r--r--include/nm-test-utils.h465
-rw-r--r--include/nm-utils-internal.h103
-rw-r--r--introspection/Makefile.am131
-rw-r--r--introspection/Makefile.in363
-rw-r--r--introspection/nm-device-ethernet.xml1
-rw-r--r--introspection/nm-device-vlan.xml6
-rw-r--r--introspection/nm-device-wifi.xml2
-rw-r--r--introspection/nm-device.xml12
-rw-r--r--introspection/nm-ip4-config.xml40
-rw-r--r--introspection/nm-ip6-config.xml31
-rw-r--r--introspection/nm-manager.xml31
-rw-r--r--introspection/nm-ppp-manager.xml7
-rw-r--r--introspection/nm-settings-connection.xml8
-rw-r--r--introspection/nm-vpn-connection.xml2
-rw-r--r--introspection/nm-vpn-plugin.xml44
-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-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-core/Makefile.am48
-rw-r--r--libnm-core/Makefile.in1350
-rw-r--r--libnm-core/Makefile.libnm-core91
-rw-r--r--libnm-core/crypto.c816
-rw-r--r--libnm-core/crypto.h133
-rw-r--r--libnm-core/crypto_gnutls.c454
-rw-r--r--libnm-core/crypto_nss.c526
-rw-r--r--libnm-core/nm-connection-private.h35
-rw-r--r--libnm-core/nm-connection.c2077
-rw-r--r--libnm-core/nm-connection.h219
-rw-r--r--libnm-core/nm-core-enum-types.c1031
-rw-r--r--libnm-core/nm-core-enum-types.h97
-rw-r--r--libnm-core/nm-core-internal.h135
-rw-r--r--libnm-core/nm-core-types.h60
-rw-r--r--libnm-core/nm-dbus-interface.h611
-rw-r--r--libnm-core/nm-errors.c90
-rw-r--r--libnm-core/nm-errors.h319
-rw-r--r--libnm-core/nm-property-compare.c122
-rw-r--r--libnm-core/nm-property-compare.h30
-rw-r--r--libnm-core/nm-setting-8021x.c3864
-rw-r--r--libnm-core/nm-setting-8021x.h278
-rw-r--r--libnm-core/nm-setting-adsl.c448
-rw-r--r--libnm-core/nm-setting-adsl.h81
-rw-r--r--libnm-core/nm-setting-bluetooth.c285
-rw-r--r--libnm-core/nm-setting-bluetooth.h81
-rw-r--r--libnm-core/nm-setting-bond.c760
-rw-r--r--libnm-core/nm-setting-bond.h98
-rw-r--r--libnm-core/nm-setting-bridge-port.c321
-rw-r--r--libnm-core/nm-setting-bridge-port.h69
-rw-r--r--libnm-core/nm-setting-bridge.c540
-rw-r--r--libnm-core/nm-setting-bridge.h81
-rw-r--r--libnm-core/nm-setting-cdma.c336
-rw-r--r--libnm-core/nm-setting-cdma.h69
-rw-r--r--libnm-core/nm-setting-connection.c1569
-rw-r--r--libnm-core/nm-setting-connection.h125
-rw-r--r--libnm-core/nm-setting-dcb.c1280
-rw-r--r--libnm-core/nm-setting-dcb.h164
-rw-r--r--libnm-core/nm-setting-generic.c73
-rw-r--r--libnm-core/nm-setting-generic.h59
-rw-r--r--libnm-core/nm-setting-gsm.c616
-rw-r--r--libnm-core/nm-setting-gsm.h80
-rw-r--r--libnm-core/nm-setting-infiniband.c522
-rw-r--r--libnm-core/nm-setting-infiniband.h72
-rw-r--r--libnm-core/nm-setting-ip-config.c2363
-rw-r--r--libnm-core/nm-setting-ip-config.h221
-rw-r--r--libnm-core/nm-setting-ip4-config.c695
-rw-r--r--libnm-core/nm-setting-ip4-config.h108
-rw-r--r--libnm-core/nm-setting-ip6-config.c610
-rw-r--r--libnm-core/nm-setting-ip6-config.h136
-rw-r--r--libnm-core/nm-setting-olpc-mesh.c268
-rw-r--r--libnm-core/nm-setting-olpc-mesh.h67
-rw-r--r--libnm-core/nm-setting-ppp.c803
-rw-r--r--libnm-core/nm-setting-ppp.h97
-rw-r--r--libnm-core/nm-setting-pppoe.c322
-rw-r--r--libnm-core/nm-setting-pppoe.h69
-rw-r--r--libnm-core/nm-setting-private.h158
-rw-r--r--libnm-core/nm-setting-serial.c351
-rw-r--r--libnm-core/nm-setting-serial.h85
-rw-r--r--libnm-core/nm-setting-team-port.c192
-rw-r--r--libnm-core/nm-setting-team-port.h62
-rw-r--r--libnm-core/nm-setting-team.c186
-rw-r--r--libnm-core/nm-setting-team.h62
-rw-r--r--libnm-core/nm-setting-vlan.c822
-rw-r--r--libnm-core/nm-setting-vlan.h134
-rw-r--r--libnm-core/nm-setting-vpn.c913
-rw-r--r--libnm-core/nm-setting-vpn.h102
-rw-r--r--libnm-core/nm-setting-wimax.c245
-rw-r--r--libnm-core/nm-setting-wimax.h64
-rw-r--r--libnm-core/nm-setting-wired.c1103
-rw-r--r--libnm-core/nm-setting-wired.h109
-rw-r--r--libnm-core/nm-setting-wireless-security.c1704
-rw-r--r--libnm-core/nm-setting-wireless-security.h147
-rw-r--r--libnm-core/nm-setting-wireless.c1335
-rw-r--r--libnm-core/nm-setting-wireless.h138
-rw-r--r--libnm-core/nm-setting.c1818
-rw-r--r--libnm-core/nm-setting.h282
-rw-r--r--libnm-core/nm-simple-connection.c123
-rw-r--r--libnm-core/nm-simple-connection.h61
-rw-r--r--libnm-core/nm-utils-private.h51
-rw-r--r--libnm-core/nm-utils.c3215
-rw-r--r--libnm-core/nm-utils.h190
-rw-r--r--libnm-core/nm-version.h (renamed from include/nm-version.h)39
-rw-r--r--libnm-core/nm-version.h.in (renamed from include/nm-version.h.in)33
-rw-r--r--libnm-core/nm-vpn-dbus-interface.h307
-rw-r--r--libnm-core/tests/Makefile.am56
-rw-r--r--libnm-core/tests/Makefile.in959
-rw-r--r--libnm-core/tests/certs/ca-no-ending-newline.pem (renamed from libnm-util/tests/certs/ca-no-ending-newline.pem)0
-rw-r--r--libnm-core/tests/certs/pkcs8-decrypted.der (renamed from libnm-util/tests/certs/pkcs8-decrypted.der)bin1194 -> 1194 bytes
-rw-r--r--libnm-core/tests/certs/pkcs8-enc-key.pem (renamed from libnm-util/tests/certs/pkcs8-enc-key.pem)0
-rw-r--r--libnm-core/tests/certs/pkcs8-noenc-key.pem (renamed from libnm-util/tests/certs/pkcs8-noenc-key.pem)0
-rw-r--r--libnm-core/tests/certs/test-aes-key.pem (renamed from libnm-util/tests/certs/test-aes-key.pem)0
-rw-r--r--libnm-core/tests/certs/test-cert.p12 (renamed from libnm-util/tests/certs/test-cert.p12)bin4092 -> 4092 bytes
-rw-r--r--libnm-core/tests/certs/test-key-only-decrypted.der (renamed from libnm-util/tests/certs/test-key-only-decrypted.der)bin1192 -> 1192 bytes
-rw-r--r--libnm-core/tests/certs/test-key-only-decrypted.pem27
-rw-r--r--libnm-core/tests/certs/test-key-only.pem (renamed from libnm-util/tests/certs/test-key-only.pem)0
-rw-r--r--libnm-core/tests/certs/test2-cert.p12 (renamed from libnm-util/tests/certs/test2-cert.p12)bin4136 -> 4136 bytes
-rw-r--r--libnm-core/tests/certs/test2_ca_cert.pem (renamed from libnm-util/tests/certs/test2_ca_cert.pem)0
-rw-r--r--libnm-core/tests/certs/test2_key_and_cert.pem (renamed from libnm-util/tests/certs/test2_key_and_cert.pem)0
-rw-r--r--libnm-core/tests/certs/test_ca_cert.der (renamed from libnm-util/tests/certs/test_ca_cert.der)bin1162 -> 1162 bytes
-rw-r--r--libnm-core/tests/certs/test_ca_cert.pem (renamed from libnm-util/tests/certs/test_ca_cert.pem)0
-rw-r--r--libnm-core/tests/certs/test_key_and_cert.pem (renamed from libnm-util/tests/certs/test_key_and_cert.pem)0
-rw-r--r--libnm-core/tests/test-compare.c248
-rw-r--r--libnm-core/tests/test-crypto.c501
-rw-r--r--libnm-core/tests/test-general.c3961
-rw-r--r--libnm-core/tests/test-secrets.c766
-rw-r--r--libnm-core/tests/test-setting-8021x.c458
-rw-r--r--libnm-core/tests/test-setting-dcb.c326
-rw-r--r--libnm-core/tests/test-settings-defaults.c133
-rw-r--r--libnm-glib/Makefile.am27
-rw-r--r--libnm-glib/Makefile.in339
-rw-r--r--libnm-glib/libnm-glib-test.c2
-rw-r--r--libnm-glib/libnm-glib.ver3
-rw-r--r--libnm-glib/libnm_glib.c2
-rw-r--r--libnm-glib/nm-access-point.c103
-rw-r--r--libnm-glib/nm-access-point.h6
-rw-r--r--libnm-glib/nm-active-connection.c145
-rw-r--r--libnm-glib/nm-active-connection.h6
-rw-r--r--libnm-glib/nm-client.c282
-rw-r--r--libnm-glib/nm-client.h6
-rw-r--r--libnm-glib/nm-dbus-helpers-private.h4
-rw-r--r--libnm-glib/nm-dbus-helpers.c15
-rw-r--r--libnm-glib/nm-device-adsl.c11
-rw-r--r--libnm-glib/nm-device-adsl.h4
-rw-r--r--libnm-glib/nm-device-bond.c44
-rw-r--r--libnm-glib/nm-device-bond.h4
-rw-r--r--libnm-glib/nm-device-bridge.c30
-rw-r--r--libnm-glib/nm-device-bridge.h4
-rw-r--r--libnm-glib/nm-device-bt.c31
-rw-r--r--libnm-glib/nm-device-bt.h6
-rw-r--r--libnm-glib/nm-device-ethernet.c52
-rw-r--r--libnm-glib/nm-device-ethernet.h6
-rw-r--r--libnm-glib/nm-device-generic.c19
-rw-r--r--libnm-glib/nm-device-generic.h2
-rw-r--r--libnm-glib/nm-device-infiniband.c36
-rw-r--r--libnm-glib/nm-device-infiniband.h4
-rw-r--r--libnm-glib/nm-device-modem.c38
-rw-r--r--libnm-glib/nm-device-modem.h6
-rw-r--r--libnm-glib/nm-device-olpc-mesh.c38
-rw-r--r--libnm-glib/nm-device-olpc-mesh.h5
-rw-r--r--libnm-glib/nm-device-private.h4
-rw-r--r--libnm-glib/nm-device-team.c44
-rw-r--r--libnm-glib/nm-device-team.h4
-rw-r--r--libnm-glib/nm-device-vlan.c74
-rw-r--r--libnm-glib/nm-device-vlan.h7
-rw-r--r--libnm-glib/nm-device-wifi.c100
-rw-r--r--libnm-glib/nm-device-wifi.h6
-rw-r--r--libnm-glib/nm-device-wimax.c105
-rw-r--r--libnm-glib/nm-device-wimax.h10
-rw-r--r--libnm-glib/nm-device.c313
-rw-r--r--libnm-glib/nm-device.h21
-rw-r--r--libnm-glib/nm-dhcp4-config.c24
-rw-r--r--libnm-glib/nm-dhcp4-config.h6
-rw-r--r--libnm-glib/nm-dhcp6-config.c24
-rw-r--r--libnm-glib/nm-dhcp6-config.h6
-rw-r--r--libnm-glib/nm-ip4-config.c64
-rw-r--r--libnm-glib/nm-ip4-config.h6
-rw-r--r--libnm-glib/nm-ip6-config.c67
-rw-r--r--libnm-glib/nm-ip6-config.h6
-rw-r--r--libnm-glib/nm-object-cache.c33
-rw-r--r--libnm-glib/nm-object-cache.h6
-rw-r--r--libnm-glib/nm-object-private.h8
-rw-r--r--libnm-glib/nm-object.c76
-rw-r--r--libnm-glib/nm-object.h6
-rw-r--r--libnm-glib/nm-remote-connection-private.h5
-rw-r--r--libnm-glib/nm-remote-connection.c67
-rw-r--r--libnm-glib/nm-remote-connection.h7
-rw-r--r--libnm-glib/nm-remote-settings.c117
-rw-r--r--libnm-glib/nm-remote-settings.h6
-rw-r--r--libnm-glib/nm-secret-agent.c66
-rw-r--r--libnm-glib/nm-secret-agent.h6
-rw-r--r--libnm-glib/nm-types-private.h10
-rw-r--r--libnm-glib/nm-types.c13
-rw-r--r--libnm-glib/nm-types.h4
-rw-r--r--libnm-glib/nm-vpn-connection.c58
-rw-r--r--libnm-glib/nm-vpn-connection.h6
-rw-r--r--libnm-glib/nm-vpn-plugin-ui-interface.c74
-rw-r--r--libnm-glib/nm-vpn-plugin-ui-interface.h6
-rw-r--r--libnm-glib/nm-vpn-plugin-utils.c4
-rw-r--r--libnm-glib/nm-vpn-plugin-utils.h2
-rw-r--r--libnm-glib/nm-vpn-plugin.c48
-rw-r--r--libnm-glib/nm-vpn-plugin.h6
-rw-r--r--libnm-glib/nm-wimax-nsp.c40
-rw-r--r--libnm-glib/nm-wimax-nsp.h15
-rw-r--r--libnm-glib/tests/Makefile.am30
-rw-r--r--libnm-glib/tests/Makefile.in167
-rw-r--r--libnm-glib/tests/common.c121
-rw-r--r--libnm-glib/tests/common.h31
-rwxr-xr-xlibnm-glib/tests/libnm-glib-test-launch.sh9
-rw-r--r--libnm-glib/tests/test-nm-client.c499
-rw-r--r--libnm-glib/tests/test-remote-settings-client.c212
-rwxr-xr-xlibnm-glib/tests/test-remote-settings-service.py150
-rw-r--r--libnm-util/Makefile.am20
-rw-r--r--libnm-util/Makefile.in74
-rw-r--r--libnm-util/NetworkManager.h (renamed from include/NetworkManager.h)239
-rw-r--r--libnm-util/NetworkManagerVPN.h (renamed from include/NetworkManagerVPN.h)149
-rw-r--r--libnm-util/crypto.c35
-rw-r--r--libnm-util/crypto.h4
-rw-r--r--libnm-util/crypto_gnutls.c25
-rw-r--r--libnm-util/crypto_nss.c10
-rw-r--r--libnm-util/libnm-util.ver5
-rw-r--r--libnm-util/nm-connection.c471
-rw-r--r--libnm-util/nm-connection.h27
-rw-r--r--libnm-util/nm-param-spec-specialized.c37
-rw-r--r--libnm-util/nm-param-spec-specialized.h15
-rw-r--r--libnm-util/nm-setting-8021x.c540
-rw-r--r--libnm-util/nm-setting-8021x.h9
-rw-r--r--libnm-util/nm-setting-adsl.c89
-rw-r--r--libnm-util/nm-setting-adsl.h6
-rw-r--r--libnm-util/nm-setting-bluetooth.c42
-rw-r--r--libnm-util/nm-setting-bluetooth.h8
-rw-r--r--libnm-util/nm-setting-bond.c75
-rw-r--r--libnm-util/nm-setting-bond.h5
-rw-r--r--libnm-util/nm-setting-bridge-port.c45
-rw-r--r--libnm-util/nm-setting-bridge-port.h4
-rw-r--r--libnm-util/nm-setting-bridge.c153
-rw-r--r--libnm-util/nm-setting-bridge.h4
-rw-r--r--libnm-util/nm-setting-cdma.c57
-rw-r--r--libnm-util/nm-setting-cdma.h7
-rw-r--r--libnm-util/nm-setting-connection.c312
-rw-r--r--libnm-util/nm-setting-connection.h9
-rw-r--r--libnm-util/nm-setting-dcb.c165
-rw-r--r--libnm-util/nm-setting-dcb.h4
-rw-r--r--libnm-util/nm-setting-gsm.c152
-rw-r--r--libnm-util/nm-setting-gsm.h7
-rw-r--r--libnm-util/nm-setting-infiniband.c95
-rw-r--r--libnm-util/nm-setting-ip4-config.c391
-rw-r--r--libnm-util/nm-setting-ip4-config.h11
-rw-r--r--libnm-util/nm-setting-ip6-config.c246
-rw-r--r--libnm-util/nm-setting-ip6-config.h11
-rw-r--r--libnm-util/nm-setting-olpc-mesh.c47
-rw-r--r--libnm-util/nm-setting-olpc-mesh.h11
-rw-r--r--libnm-util/nm-setting-ppp.c230
-rw-r--r--libnm-util/nm-setting-ppp.h7
-rw-r--r--libnm-util/nm-setting-pppoe.c58
-rw-r--r--libnm-util/nm-setting-pppoe.h7
-rw-r--r--libnm-util/nm-setting-private.h40
-rw-r--r--libnm-util/nm-setting-serial.c70
-rw-r--r--libnm-util/nm-setting-serial.h7
-rw-r--r--libnm-util/nm-setting-team-port.c20
-rw-r--r--libnm-util/nm-setting-team-port.h4
-rw-r--r--libnm-util/nm-setting-team.c54
-rw-r--r--libnm-util/nm-setting-team.h4
-rw-r--r--libnm-util/nm-setting-vlan.c123
-rw-r--r--libnm-util/nm-setting-vlan.h4
-rw-r--r--libnm-util/nm-setting-vpn.c123
-rw-r--r--libnm-util/nm-setting-vpn.h9
-rw-r--r--libnm-util/nm-setting-wimax.c34
-rw-r--r--libnm-util/nm-setting-wimax.h2
-rw-r--r--libnm-util/nm-setting-wired.c152
-rw-r--r--libnm-util/nm-setting-wired.h7
-rw-r--r--libnm-util/nm-setting-wireless-security.c239
-rw-r--r--libnm-util/nm-setting-wireless-security.h7
-rw-r--r--libnm-util/nm-setting-wireless.c198
-rw-r--r--libnm-util/nm-setting-wireless.h11
-rw-r--r--libnm-util/nm-setting.c306
-rw-r--r--libnm-util/nm-setting.h34
-rw-r--r--libnm-util/nm-utils-enum-types.c5
-rw-r--r--libnm-util/nm-utils-enum-types.h101
-rw-r--r--libnm-util/nm-utils-private.h37
-rw-r--r--libnm-util/nm-utils.c279
-rw-r--r--libnm-util/nm-utils.h24
-rw-r--r--libnm-util/nm-value-transforms.c23
-rw-r--r--libnm-util/nm-version.h.in123
-rw-r--r--libnm-util/tests/Makefile.am81
-rw-r--r--libnm-util/tests/Makefile.in290
-rw-r--r--libnm-util/tests/certs/Makefile.am25
-rw-r--r--libnm-util/tests/certs/Makefile.in597
-rw-r--r--libnm-util/tests/test-crypto.c178
-rw-r--r--libnm-util/tests/test-general.c379
-rw-r--r--libnm-util/tests/test-libnm-linking.c48
-rw-r--r--libnm-util/tests/test-secrets.c6
-rw-r--r--libnm-util/tests/test-setting-8021x.c67
-rw-r--r--libnm-util/tests/test-setting-dcb.c4
-rw-r--r--libnm-util/tests/test-settings-defaults.c4
-rw-r--r--libnm/Makefile.am224
-rw-r--r--libnm/Makefile.in1349
-rw-r--r--libnm/NetworkManager.h89
-rwxr-xr-xlibnm/generate-plugin-docs.pl198
-rwxr-xr-xlibnm/generate-setting-docs.py235
-rw-r--r--libnm/libnm.pc.in13
-rw-r--r--libnm/libnm.ver846
-rw-r--r--libnm/nm-access-point.c598
-rw-r--r--libnm/nm-access-point.h85
-rw-r--r--libnm/nm-active-connection.c714
-rw-r--r--libnm/nm-active-connection.h87
-rw-r--r--libnm/nm-client.c2238
-rw-r--r--libnm/nm-client.h341
-rw-r--r--libnm/nm-dbus-helpers.c405
-rw-r--r--libnm/nm-dbus-helpers.h78
-rw-r--r--libnm/nm-device-adsl.c159
-rw-r--r--libnm/nm-device-adsl.h58
-rw-r--r--libnm/nm-device-bond.c271
-rw-r--r--libnm/nm-device-bond.h62
-rw-r--r--libnm/nm-device-bridge.c271
-rw-r--r--libnm/nm-device-bridge.h62
-rw-r--r--libnm/nm-device-bt.c305
-rw-r--r--libnm/nm-device-bt.h65
-rw-r--r--libnm/nm-device-ethernet.c317
-rw-r--r--libnm/nm-device-ethernet.h65
-rw-r--r--libnm/nm-device-generic.c214
-rw-r--r--libnm/nm-device-generic.h59
-rw-r--r--libnm/nm-device-infiniband.c236
-rw-r--r--libnm/nm-device-infiniband.h60
-rw-r--r--libnm/nm-device-modem.c254
-rw-r--r--libnm/nm-device-modem.h61
-rw-r--r--libnm/nm-device-olpc-mesh.c261
-rw-r--r--libnm/nm-device-olpc-mesh.h62
-rw-r--r--libnm/nm-device-private.h26
-rw-r--r--libnm/nm-device-team.c271
-rw-r--r--libnm/nm-device-team.h62
-rw-r--r--libnm/nm-device-vlan.c305
-rw-r--r--libnm/nm-device-vlan.h64
-rw-r--r--libnm/nm-device-wifi.c837
-rw-r--r--libnm/nm-device-wifi.h91
-rw-r--r--libnm/nm-device-wimax.c678
-rw-r--r--libnm/nm-device-wimax.h81
-rw-r--r--libnm/nm-device.c2232
-rw-r--r--libnm/nm-device.h161
-rw-r--r--libnm/nm-dhcp-config.c222
-rw-r--r--libnm/nm-dhcp-config.h62
-rw-r--r--libnm/nm-dhcp4-config.c39
-rw-r--r--libnm/nm-dhcp4-config.h49
-rw-r--r--libnm/nm-dhcp6-config.c39
-rw-r--r--libnm/nm-dhcp6-config.h49
-rw-r--r--libnm/nm-enum-types.c152
-rw-r--r--libnm/nm-enum-types.h28
-rw-r--r--libnm/nm-ifcfg-rh-docs.xml263
-rw-r--r--libnm/nm-ip-config.c502
-rw-r--r--libnm/nm-ip-config.h73
-rw-r--r--libnm/nm-ip4-config.c39
-rw-r--r--libnm/nm-ip4-config.h51
-rw-r--r--libnm/nm-ip6-config.c39
-rw-r--r--libnm/nm-ip6-config.h51
-rw-r--r--libnm/nm-keyfile-docs.xml96
-rw-r--r--libnm/nm-manager.c1730
-rw-r--r--libnm/nm-manager.h170
-rw-r--r--libnm/nm-object-cache.c90
-rw-r--r--libnm/nm-object-cache.h37
-rw-r--r--libnm/nm-object-private.h83
-rw-r--r--libnm/nm-object.c1761
-rw-r--r--libnm/nm-object.h70
-rw-r--r--libnm/nm-property-docs.xml296
-rw-r--r--libnm/nm-remote-connection-private.h33
-rw-r--r--libnm/nm-remote-connection.c857
-rw-r--r--libnm/nm-remote-connection.h114
-rw-r--r--libnm/nm-remote-settings.c832
-rw-r--r--libnm/nm-remote-settings.h127
-rw-r--r--libnm/nm-secret-agent-old.c1366
-rw-r--r--libnm/nm-secret-agent-old.h238
-rw-r--r--libnm/nm-setting-docs-overrides.xml141
-rw-r--r--libnm/nm-setting-docs.xml305
-rw-r--r--libnm/nm-types.h53
-rw-r--r--libnm/nm-vpn-connection.c233
-rw-r--r--libnm/nm-vpn-connection.h67
-rw-r--r--libnm/nm-vpn-editor-plugin.c181
-rw-r--r--libnm/nm-vpn-editor-plugin.h189
-rw-r--r--libnm/nm-vpn-plugin-old.c1206
-rw-r--r--libnm/nm-vpn-plugin-old.h136
-rw-r--r--libnm/nm-wimax-nsp.c290
-rw-r--r--libnm/nm-wimax-nsp.h85
-rw-r--r--libnm/tests/Makefile.am41
-rw-r--r--libnm/tests/Makefile.in918
-rw-r--r--libnm/tests/common.c187
-rw-r--r--libnm/tests/common.h37
-rwxr-xr-xlibnm/tests/libnm-test-launch.sh9
-rw-r--r--libnm/tests/test-nm-client.c1193
-rw-r--r--libnm/tests/test-remote-settings-client.c547
-rw-r--r--libnm/tests/test-secret-agent.c655
-rw-r--r--m4/ax_lib_readline.m415
-rw-r--r--m4/compiler_warnings.m433
-rw-r--r--man/Makefile.am88
-rw-r--r--man/Makefile.in126
-rw-r--r--man/NetworkManager.817
-rw-r--r--man/NetworkManager.conf.546
-rw-r--r--man/NetworkManager.conf.xml.in560
-rw-r--r--man/nm-settings-ifcfg-rh.52325
-rw-r--r--man/nm-settings-ifcfg-rh.xml335
-rw-r--r--man/nm-settings-ifcfg-rh.xsl405
-rw-r--r--man/nm-settings-keyfile.5698
-rw-r--r--man/nm-settings-keyfile.xml233
-rw-r--r--man/nm-settings-keyfile.xsl308
-rw-r--r--man/nm-settings.51631
-rw-r--r--man/nm-settings.xml343
-rw-r--r--man/nm-settings.xsl162
-rw-r--r--man/nmcli-examples.543
-rw-r--r--man/nmcli.1.in96
-rw-r--r--man/nmtui.1.in66
-rw-r--r--po/POTFILES.in148
-rw-r--r--po/POTFILES.skip3
-rw-r--r--po/as.po5599
-rw-r--r--po/bn_IN.po7734
-rw-r--r--po/de.po4897
-rw-r--r--po/el.po7292
-rw-r--r--po/en_GB.po4
-rw-r--r--po/eo.po2
-rw-r--r--po/es.po6758
-rw-r--r--po/fr.po6806
-rw-r--r--po/gl.po4
-rw-r--r--po/hi.po6197
-rw-r--r--po/id.po4
-rw-r--r--po/ja.po4380
-rw-r--r--po/kn.po6363
-rw-r--r--po/ko.po6515
-rw-r--r--po/ml.po6048
-rw-r--r--po/mr.po5875
-rw-r--r--po/pa.po6542
-rw-r--r--po/pl.po1024
-rw-r--r--po/ru.po6211
-rw-r--r--po/sl.po4
-rw-r--r--po/sv.po8304
-rw-r--r--po/ta.po7476
-rw-r--r--po/te.po6279
-rw-r--r--po/tr.po8445
-rw-r--r--po/uk.po6216
-rw-r--r--po/zh_CN.po6544
-rw-r--r--po/zh_TW.po6511
-rw-r--r--policy/Makefile.in6
-rw-r--r--policy/org.freedesktop.NetworkManager.policy.in.in1
-rw-r--r--src/Makefile.am308
-rw-r--r--src/Makefile.in1265
-rw-r--r--src/NetworkManagerUtils.c1580
-rw-r--r--src/NetworkManagerUtils.h136
-rw-r--r--src/config/nm-config-device.c82
-rw-r--r--src/config/nm-config-device.h47
-rw-r--r--src/config/tests/nm-test-device.c101
-rw-r--r--src/devices/adsl/Makefile.am11
-rw-r--r--src/devices/adsl/Makefile.in17
-rw-r--r--src/devices/adsl/exports.ver1
-rw-r--r--src/devices/adsl/nm-atm-manager.c34
-rw-r--r--src/devices/adsl/nm-atm-manager.h6
-rw-r--r--src/devices/adsl/nm-device-adsl.c129
-rw-r--r--src/devices/adsl/nm-device-adsl.h4
-rw-r--r--src/devices/bluetooth/Makefile.am26
-rw-r--r--src/devices/bluetooth/Makefile.in92
-rw-r--r--src/devices/bluetooth/exports.ver1
-rw-r--r--src/devices/bluetooth/nm-bluez-common.h4
-rw-r--r--src/devices/bluetooth/nm-bluez-device.c285
-rw-r--r--src/devices/bluetooth/nm-bluez-device.h11
-rw-r--r--src/devices/bluetooth/nm-bluez-manager.c35
-rw-r--r--src/devices/bluetooth/nm-bluez-manager.h6
-rw-r--r--src/devices/bluetooth/nm-bluez4-adapter.c20
-rw-r--r--src/devices/bluetooth/nm-bluez4-adapter.h6
-rw-r--r--src/devices/bluetooth/nm-bluez4-manager.c2
-rw-r--r--src/devices/bluetooth/nm-bluez4-manager.h6
-rw-r--r--src/devices/bluetooth/nm-bluez5-dun.c410
-rw-r--r--src/devices/bluetooth/nm-bluez5-dun.h46
-rw-r--r--src/devices/bluetooth/nm-bluez5-manager.c4
-rw-r--r--src/devices/bluetooth/nm-bluez5-manager.h6
-rw-r--r--src/devices/bluetooth/nm-bt-enum-types.c3
-rw-r--r--src/devices/bluetooth/nm-bt-error.c (renamed from src/settings/plugins/ifnet/errors.h)19
-rw-r--r--src/devices/bluetooth/nm-bt-error.h35
-rw-r--r--src/devices/bluetooth/nm-device-bt.c262
-rw-r--r--src/devices/bluetooth/nm-device-bt.h12
-rw-r--r--src/devices/nm-device-bond.c227
-rw-r--r--src/devices/nm-device-bond.h24
-rw-r--r--src/devices/nm-device-bridge.c288
-rw-r--r--src/devices/nm-device-bridge.h26
-rw-r--r--src/devices/nm-device-ethernet-utils.c (renamed from src/settings/nm-settings-utils.c)25
-rw-r--r--src/devices/nm-device-ethernet-utils.h (renamed from src/settings/nm-settings-utils.h)8
-rw-r--r--src/devices/nm-device-ethernet.c523
-rw-r--r--src/devices/nm-device-ethernet.h25
-rw-r--r--src/devices/nm-device-factory.c52
-rw-r--r--src/devices/nm-device-factory.h125
-rw-r--r--src/devices/nm-device-generic.c24
-rw-r--r--src/devices/nm-device-generic.h11
-rw-r--r--src/devices/nm-device-gre.c117
-rw-r--r--src/devices/nm-device-gre.h16
-rw-r--r--src/devices/nm-device-infiniband.c231
-rw-r--r--src/devices/nm-device-infiniband.h25
-rw-r--r--src/devices/nm-device-logging.h46
-rw-r--r--src/devices/nm-device-macvlan.c64
-rw-r--r--src/devices/nm-device-macvlan.h16
-rw-r--r--src/devices/nm-device-private.h23
-rw-r--r--src/devices/nm-device-tun.c109
-rw-r--r--src/devices/nm-device-tun.h16
-rw-r--r--src/devices/nm-device-veth.c49
-rw-r--r--src/devices/nm-device-veth.h16
-rw-r--r--src/devices/nm-device-vlan.c333
-rw-r--r--src/devices/nm-device-vlan.h22
-rw-r--r--src/devices/nm-device-vxlan.c155
-rw-r--r--src/devices/nm-device-vxlan.h16
-rw-r--r--src/devices/nm-device.c4392
-rw-r--r--src/devices/nm-device.h92
-rw-r--r--src/devices/team/Makefile.am68
-rw-r--r--src/devices/team/Makefile.in (renamed from cli/src/Makefile.in)294
-rw-r--r--src/devices/team/exports.ver6
-rw-r--r--src/devices/team/nm-device-team-glue.h (renamed from src/nm-device-team-glue.h)0
-rw-r--r--src/devices/team/nm-device-team.c (renamed from src/devices/nm-device-team.c)435
-rw-r--r--src/devices/team/nm-device-team.h (renamed from src/devices/nm-device-team.h)14
-rw-r--r--src/devices/team/nm-team-enum-types.c12
-rw-r--r--src/devices/team/nm-team-enum-types.h17
-rw-r--r--src/devices/team/nm-team-factory.c93
-rw-r--r--src/devices/team/nm-team-factory.h (renamed from src/settings/plugins/ifcfg-rh/errors.c)26
-rw-r--r--src/devices/wifi/Makefile.am12
-rw-r--r--src/devices/wifi/Makefile.in18
-rw-r--r--src/devices/wifi/exports.ver1
-rw-r--r--src/devices/wifi/nm-device-olpc-mesh.c127
-rw-r--r--src/devices/wifi/nm-device-olpc-mesh.h12
-rw-r--r--src/devices/wifi/nm-device-wifi.c931
-rw-r--r--src/devices/wifi/nm-device-wifi.h16
-rw-r--r--src/devices/wifi/nm-wifi-ap-utils.c316
-rw-r--r--src/devices/wifi/nm-wifi-ap-utils.h9
-rw-r--r--src/devices/wifi/nm-wifi-ap.c211
-rw-r--r--src/devices/wifi/nm-wifi-ap.h76
-rw-r--r--src/devices/wifi/nm-wifi-enum-types.c44
-rw-r--r--src/devices/wifi/nm-wifi-enum-types.h4
-rw-r--r--src/devices/wifi/nm-wifi-factory.c18
-rw-r--r--src/devices/wifi/tests/Makefile.am9
-rw-r--r--src/devices/wifi/tests/Makefile.in15
-rw-r--r--src/devices/wifi/tests/test-wifi-ap-utils.c231
-rw-r--r--src/devices/wimax/Makefile.am12
-rw-r--r--src/devices/wimax/Makefile.in18
-rw-r--r--src/devices/wimax/exports.ver1
-rw-r--r--src/devices/wimax/iwmxsdk.c10
-rw-r--r--src/devices/wimax/iwmxsdk.h9
-rw-r--r--src/devices/wimax/nm-device-wimax.c132
-rw-r--r--src/devices/wimax/nm-device-wimax.h13
-rw-r--r--src/devices/wimax/nm-wimax-factory.c18
-rw-r--r--src/devices/wimax/nm-wimax-nsp.c33
-rw-r--r--src/devices/wimax/nm-wimax-nsp.h4
-rw-r--r--src/devices/wimax/nm-wimax-types.h4
-rw-r--r--src/devices/wimax/nm-wimax-util.c3
-rw-r--r--src/devices/wimax/nm-wimax-util.h9
-rw-r--r--src/devices/wwan/Makefile.am19
-rw-r--r--src/devices/wwan/Makefile.in46
-rw-r--r--src/devices/wwan/README45
-rw-r--r--src/devices/wwan/exports.ver1
-rw-r--r--src/devices/wwan/nm-device-modem.c207
-rw-r--r--src/devices/wwan/nm-device-modem.h6
-rw-r--r--src/devices/wwan/nm-modem-broadband.c283
-rw-r--r--src/devices/wwan/nm-modem-broadband.h7
-rw-r--r--src/devices/wwan/nm-modem-enum-types.c34
-rw-r--r--src/devices/wwan/nm-modem-enum-types.h6
-rw-r--r--src/devices/wwan/nm-modem-manager.c460
-rw-r--r--src/devices/wwan/nm-modem-manager.h6
-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.c482
-rw-r--r--src/devices/wwan/nm-modem.h74
-rw-r--r--src/devices/wwan/nm-wwan-factory.c28
-rw-r--r--src/devices/wwan/nm-wwan-factory.h6
-rw-r--r--src/devices/wwan/wwan-exports.ver2
-rw-r--r--src/dhcp-manager/Makefile.am6
-rw-r--r--src/dhcp-manager/Makefile.in12
-rw-r--r--src/dhcp-manager/nm-dhcp-client.c1524
-rw-r--r--src/dhcp-manager/nm-dhcp-client.h162
-rw-r--r--src/dhcp-manager/nm-dhcp-dhclient-utils.c152
-rw-r--r--src/dhcp-manager/nm-dhcp-dhclient-utils.h15
-rw-r--r--src/dhcp-manager/nm-dhcp-dhclient.c228
-rw-r--r--src/dhcp-manager/nm-dhcp-dhclient.h26
-rw-r--r--src/dhcp-manager/nm-dhcp-dhcpcd.c131
-rw-r--r--src/dhcp-manager/nm-dhcp-dhcpcd.h22
-rw-r--r--src/dhcp-manager/nm-dhcp-helper.c327
-rw-r--r--src/dhcp-manager/nm-dhcp-listener.c290
-rw-r--r--src/dhcp-manager/nm-dhcp-listener.h39
-rw-r--r--src/dhcp-manager/nm-dhcp-manager.c607
-rw-r--r--src/dhcp-manager/nm-dhcp-manager.h68
-rw-r--r--src/dhcp-manager/nm-dhcp-systemd.c849
-rw-r--r--src/dhcp-manager/nm-dhcp-systemd.h45
-rw-r--r--src/dhcp-manager/nm-dhcp-utils.c732
-rw-r--r--src/dhcp-manager/nm-dhcp-utils.h41
-rw-r--r--src/dhcp-manager/systemd-dhcp/nm-sd-adapt.c209
-rw-r--r--src/dhcp-manager/systemd-dhcp/nm-sd-adapt.h109
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-internal.h76
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-lease-internal.h87
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-network.c241
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-option.c257
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-packet.c204
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-protocol.h141
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-internal.h81
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-lease-internal.h64
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-network.c198
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-option.c323
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-protocol.h141
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/libsystemd-network/network-internal.c484
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/libsystemd-network/network-internal.h78
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp-client.c1726
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp-lease.c865
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp6-client.c1242
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp6-lease.c223
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/shared/async.h27
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/shared/fileio.c817
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/shared/fileio.h45
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/shared/in-addr-util.c294
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/shared/in-addr-util.h49
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/shared/list.h138
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/shared/macro.h413
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/shared/refcnt.h34
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/shared/siphash24.c137
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/shared/siphash24.h6
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/shared/socket-util.h118
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/shared/sparse-endian.h88
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/shared/strv.c616
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/shared/strv.h137
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/shared/time-util.c1003
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/shared/time-util.h111
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/shared/unaligned.h66
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/shared/utf8.c314
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/shared/utf8.h42
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/shared/util.c7350
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/shared/util.h1038
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/systemd/_sd-common.h78
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/systemd/sd-dhcp-client.h75
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/systemd/sd-dhcp-lease.h54
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/systemd/sd-dhcp6-client.h66
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/systemd/sd-dhcp6-lease.h42
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/systemd/sd-event.h135
-rw-r--r--src/dhcp-manager/systemd-dhcp/src/systemd/sd-id128.h113
-rw-r--r--src/dhcp-manager/tests/Makefile.am28
-rw-r--r--src/dhcp-manager/tests/Makefile.in77
-rw-r--r--src/dhcp-manager/tests/test-dhcp-dhclient.c158
-rw-r--r--src/dhcp-manager/tests/test-dhcp-utils.c723
-rw-r--r--src/dns-manager/nm-dns-dnsmasq.c33
-rw-r--r--src/dns-manager/nm-dns-dnsmasq.h6
-rw-r--r--src/dns-manager/nm-dns-manager.c74
-rw-r--r--src/dns-manager/nm-dns-manager.h17
-rw-r--r--src/dns-manager/nm-dns-plugin.c43
-rw-r--r--src/dns-manager/nm-dns-plugin.h6
-rw-r--r--src/dns-manager/nm-dns-unbound.c2
-rw-r--r--src/dns-manager/nm-dns-unbound.h6
-rw-r--r--src/dns-manager/nm-dns-utils.c3
-rw-r--r--src/dns-manager/nm-dns-utils.h4
-rw-r--r--src/dnsmasq-manager/nm-dnsmasq-manager.c95
-rw-r--r--src/dnsmasq-manager/nm-dnsmasq-manager.h11
-rw-r--r--src/dnsmasq-manager/nm-dnsmasq-utils.c3
-rw-r--r--src/dnsmasq-manager/nm-dnsmasq-utils.h6
-rw-r--r--src/dnsmasq-manager/tests/Makefile.am6
-rw-r--r--src/dnsmasq-manager/tests/Makefile.in12
-rw-r--r--src/dnsmasq-manager/tests/test-dnsmasq-utils.c2
-rw-r--r--src/logging/nm-logging.h142
-rw-r--r--src/main-utils.c279
-rw-r--r--src/main-utils.h (renamed from include/nm-settings-flags.h)32
-rw-r--r--src/main.c265
-rw-r--r--src/nm-activation-request.c9
-rw-r--r--src/nm-activation-request.h14
-rw-r--r--src/nm-active-connection.c345
-rw-r--r--src/nm-active-connection.h18
-rw-r--r--src/nm-auth-manager.c657
-rw-r--r--src/nm-auth-manager.h78
-rw-r--r--src/nm-auth-subject.c416
-rw-r--r--src/nm-auth-subject.h55
-rw-r--r--src/nm-auth-utils.c (renamed from src/nm-manager-auth.c)330
-rw-r--r--src/nm-auth-utils.h (renamed from src/nm-manager-auth.h)33
-rw-r--r--src/nm-config.c (renamed from src/config/nm-config.c)131
-rw-r--r--src/nm-config.h (renamed from src/config/nm-config.h)18
-rw-r--r--src/nm-connection-provider.c2
-rw-r--r--src/nm-connection-provider.h10
-rw-r--r--src/nm-connectivity.c30
-rw-r--r--src/nm-connectivity.h13
-rw-r--r--src/nm-dbus-manager.c23
-rw-r--r--src/nm-dbus-manager.h6
-rw-r--r--src/nm-dcb.c56
-rw-r--r--src/nm-dcb.h30
-rw-r--r--src/nm-default-route-manager.c1365
-rw-r--r--src/nm-default-route-manager.h74
-rw-r--r--src/nm-device-glue.h5
-rw-r--r--src/nm-device-vlan-glue.h2
-rw-r--r--src/nm-dhcp4-config.c41
-rw-r--r--src/nm-dhcp4-config.h32
-rw-r--r--src/nm-dhcp6-config.c41
-rw-r--r--src/nm-dhcp6-config.h32
-rw-r--r--src/nm-dispatcher.c21
-rw-r--r--src/nm-dispatcher.h10
-rw-r--r--src/nm-enum-types.c533
-rw-r--r--src/nm-enum-types.h55
-rw-r--r--src/nm-firewall-manager.c (renamed from src/firewall-manager/nm-firewall-manager.c)170
-rw-r--r--src/nm-firewall-manager.h (renamed from src/firewall-manager/nm-firewall-manager.h)30
-rw-r--r--src/nm-iface-helper.c538
-rw-r--r--src/nm-ip4-config-glue.h2
-rw-r--r--src/nm-ip4-config.c440
-rw-r--r--src/nm-ip4-config.h30
-rw-r--r--src/nm-ip6-config-glue.h2
-rw-r--r--src/nm-ip6-config.c394
-rw-r--r--src/nm-ip6-config.h26
-rw-r--r--src/nm-logging.c (renamed from src/logging/nm-logging.c)143
-rw-r--r--src/nm-logging.h159
-rw-r--r--src/nm-manager-glue.h2
-rw-r--r--src/nm-manager.c988
-rw-r--r--src/nm-manager.h97
-rw-r--r--src/nm-policy.c634
-rw-r--r--src/nm-policy.h13
-rw-r--r--src/nm-posix-signals.c (renamed from src/posix-signals/nm-posix-signals.c)0
-rw-r--r--src/nm-posix-signals.h (renamed from src/posix-signals/nm-posix-signals.h)6
-rw-r--r--src/nm-ppp-manager-glue.h7
-rw-r--r--src/nm-properties-changed-signal.c2
-rw-r--r--src/nm-rfkill-manager.c2
-rw-r--r--src/nm-rfkill-manager.h10
-rw-r--r--src/nm-session-monitor-ck.c46
-rw-r--r--src/nm-session-monitor-null.c1
-rw-r--r--src/nm-session-monitor-systemd.c1
-rw-r--r--src/nm-session-monitor.h9
-rw-r--r--src/nm-session-utils.c23
-rw-r--r--src/nm-session-utils.h15
-rw-r--r--src/nm-settings-connection-glue.h7
-rw-r--r--src/nm-sleep-monitor-systemd.c56
-rw-r--r--src/nm-sleep-monitor-upower.c1
-rw-r--r--src/nm-sleep-monitor.h9
-rw-r--r--src/nm-types.h94
-rw-r--r--src/platform/Makefile.in6
-rw-r--r--src/platform/nm-fake-platform.c108
-rw-r--r--src/platform/nm-fake-platform.h6
-rw-r--r--src/platform/nm-linux-platform.c623
-rw-r--r--src/platform/nm-linux-platform.h6
-rw-r--r--src/platform/nm-platform.c293
-rw-r--r--src/platform/nm-platform.h201
-rw-r--r--src/platform/tests/Makefile.am9
-rw-r--r--src/platform/tests/Makefile.in16
-rw-r--r--src/platform/tests/dump.c6
-rw-r--r--src/platform/tests/monitor.c2
-rw-r--r--src/platform/tests/platform.c28
-rw-r--r--src/platform/tests/test-address.c8
-rw-r--r--src/platform/tests/test-cleanup.c24
-rw-r--r--src/platform/tests/test-common.c2
-rw-r--r--src/platform/tests/test-link.c13
-rw-r--r--src/platform/tests/test-route.c48
-rw-r--r--src/platform/wifi/wifi-utils-nl80211.c59
-rw-r--r--src/platform/wifi/wifi-utils-nl80211.h8
-rw-r--r--src/platform/wifi/wifi-utils-private.h12
-rw-r--r--src/platform/wifi/wifi-utils-wext.c19
-rw-r--r--src/platform/wifi/wifi-utils-wext.h6
-rw-r--r--src/platform/wifi/wifi-utils.c23
-rw-r--r--src/platform/wifi/wifi-utils.h16
-rw-r--r--src/ppp-manager/Makefile.am10
-rw-r--r--src/ppp-manager/Makefile.in20
-rw-r--r--src/ppp-manager/nm-ppp-manager.c293
-rw-r--r--src/ppp-manager/nm-ppp-manager.h17
-rw-r--r--src/ppp-manager/nm-ppp-status.h6
-rw-r--r--src/ppp-manager/nm-pppd-plugin.c264
-rw-r--r--src/ppp-manager/nm-pppd-plugin.h19
-rw-r--r--src/rdisc/Makefile.in6
-rw-r--r--src/rdisc/nm-fake-rdisc.c2
-rw-r--r--src/rdisc/nm-fake-rdisc.h6
-rw-r--r--src/rdisc/nm-lndp-rdisc.c150
-rw-r--r--src/rdisc/nm-lndp-rdisc.h6
-rw-r--r--src/rdisc/nm-rdisc.c23
-rw-r--r--src/rdisc/nm-rdisc.h16
-rw-r--r--src/rdisc/tests/Makefile.am14
-rw-r--r--src/rdisc/tests/Makefile.in24
-rw-r--r--src/rdisc/tests/rdisc.c5
-rw-r--r--src/settings/nm-agent-manager.c120
-rw-r--r--src/settings/nm-agent-manager.h27
-rw-r--r--src/settings/nm-inotify-helper.c2
-rw-r--r--src/settings/nm-secret-agent.c47
-rw-r--r--src/settings/nm-secret-agent.h26
-rw-r--r--src/settings/nm-settings-connection.c644
-rw-r--r--src/settings/nm-settings-connection.h59
-rw-r--r--src/settings/nm-settings-error.h53
-rw-r--r--src/settings/nm-settings.c272
-rw-r--r--src/settings/nm-settings.h9
-rw-r--r--src/settings/nm-system-config-interface.c45
-rw-r--r--src/settings/nm-system-config-interface.h6
-rw-r--r--src/settings/plugins/Makefile.am4
-rw-r--r--src/settings/plugins/Makefile.in19
-rw-r--r--src/settings/plugins/example/Makefile.am15
-rw-r--r--src/settings/plugins/example/Makefile.in30
-rw-r--r--src/settings/plugins/example/common.h11
-rw-r--r--src/settings/plugins/example/errors.c40
-rw-r--r--src/settings/plugins/example/nm-example-connection.c13
-rw-r--r--src/settings/plugins/example/nm-example-connection.h6
-rw-r--r--src/settings/plugins/example/plugin.c13
-rw-r--r--src/settings/plugins/example/reader.c5
-rw-r--r--src/settings/plugins/example/writer.c3
-rw-r--r--src/settings/plugins/ibft/Makefile.am38
-rw-r--r--src/settings/plugins/ibft/Makefile.in (renamed from cli/Makefile.in)249
-rw-r--r--src/settings/plugins/ibft/nm-ibft-connection.c66
-rw-r--r--src/settings/plugins/ibft/nm-ibft-connection.h50
-rw-r--r--src/settings/plugins/ibft/plugin.c210
-rw-r--r--src/settings/plugins/ibft/plugin.h47
-rw-r--r--src/settings/plugins/ibft/reader.c558
-rw-r--r--src/settings/plugins/ibft/reader.h (renamed from src/settings/plugins/keyfile/errors.c)23
-rw-r--r--src/settings/plugins/ibft/tests/Makefile.am49
-rw-r--r--src/settings/plugins/ibft/tests/Makefile.in (renamed from src/settings/tests/Makefile.in)109
-rwxr-xr-xsrc/settings/plugins/ibft/tests/iscsiadm-test-bad-dns1 (renamed from src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-bad-dns1)2
-rwxr-xr-xsrc/settings/plugins/ibft/tests/iscsiadm-test-bad-dns2 (renamed from src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-bad-dns2)2
-rwxr-xr-xsrc/settings/plugins/ibft/tests/iscsiadm-test-bad-entry (renamed from src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-bad-entry)17
-rwxr-xr-xsrc/settings/plugins/ibft/tests/iscsiadm-test-bad-gateway (renamed from src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-bad-gateway)6
-rwxr-xr-xsrc/settings/plugins/ibft/tests/iscsiadm-test-bad-ipaddr (renamed from src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-bad-ipaddr)6
-rwxr-xr-xsrc/settings/plugins/ibft/tests/iscsiadm-test-bad-record (renamed from src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-bad-record)2
-rwxr-xr-xsrc/settings/plugins/ibft/tests/iscsiadm-test-dhcp (renamed from src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-dhcp)4
-rwxr-xr-xsrc/settings/plugins/ibft/tests/iscsiadm-test-static (renamed from src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-static)4
-rwxr-xr-xsrc/settings/plugins/ibft/tests/iscsiadm-test-vlan19
-rw-r--r--src/settings/plugins/ibft/tests/test-ibft.c292
-rw-r--r--src/settings/plugins/ifcfg-rh/Makefile.am18
-rw-r--r--src/settings/plugins/ifcfg-rh/Makefile.in35
-rw-r--r--src/settings/plugins/ifcfg-rh/common.h4
-rw-r--r--src/settings/plugins/ifcfg-rh/nm-ifcfg-connection.c78
-rw-r--r--src/settings/plugins/ifcfg-rh/nm-ifcfg-connection.h8
-rw-r--r--src/settings/plugins/ifcfg-rh/plugin.c30
-rw-r--r--src/settings/plugins/ifcfg-rh/reader.c1461
-rw-r--r--src/settings/plugins/ifcfg-rh/reader.h1
-rw-r--r--src/settings/plugins/ifcfg-rh/shvar.c45
-rw-r--r--src/settings/plugins/ifcfg-rh/shvar.h2
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/Makefile.am27
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/Makefile.in60
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.am10
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.in16
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-ibft10
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-ibft-dhcp4
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-ibft-static4
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-misc-variables3
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-vlan-trailing-spaces11
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wifi-band-a13
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wifi-band-a-channel-mismatch9
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wifi-band-bg-channel-mismatch9
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wifi-open1
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh-utils.c2
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c3977
-rw-r--r--src/settings/plugins/ifcfg-rh/utils.c7
-rw-r--r--src/settings/plugins/ifcfg-rh/writer.c562
-rw-r--r--src/settings/plugins/ifcfg-suse/Makefile.am13
-rw-r--r--src/settings/plugins/ifcfg-suse/Makefile.in24
-rw-r--r--src/settings/plugins/ifcfg-suse/plugin.c16
-rw-r--r--src/settings/plugins/ifcfg-suse/plugin.h2
-rw-r--r--src/settings/plugins/ifnet/Makefile.am27
-rw-r--r--src/settings/plugins/ifnet/Makefile.in46
-rw-r--r--src/settings/plugins/ifnet/connection_parser.c710
-rw-r--r--src/settings/plugins/ifnet/net_parser.c2
-rw-r--r--src/settings/plugins/ifnet/net_utils.c229
-rw-r--r--src/settings/plugins/ifnet/net_utils.h22
-rw-r--r--src/settings/plugins/ifnet/nm-ifnet-connection.c5
-rw-r--r--src/settings/plugins/ifnet/nm-ifnet-connection.h4
-rw-r--r--src/settings/plugins/ifnet/plugin.c4
-rw-r--r--src/settings/plugins/ifnet/tests/Makefile.am18
-rw-r--r--src/settings/plugins/ifnet/tests/Makefile.in53
-rw-r--r--src/settings/plugins/ifnet/tests/test_all.c68
-rw-r--r--src/settings/plugins/ifnet/wpa_parser.c4
-rw-r--r--src/settings/plugins/ifupdown/Makefile.am21
-rw-r--r--src/settings/plugins/ifupdown/Makefile.in36
-rw-r--r--src/settings/plugins/ifupdown/interface_parser.c1
-rw-r--r--src/settings/plugins/ifupdown/nm-ifupdown-connection.c12
-rw-r--r--src/settings/plugins/ifupdown/nm-ifupdown-connection.h6
-rw-r--r--src/settings/plugins/ifupdown/parser.c157
-rw-r--r--src/settings/plugins/ifupdown/plugin.c24
-rw-r--r--src/settings/plugins/ifupdown/plugin.h2
-rw-r--r--src/settings/plugins/ifupdown/tests/Makefile.am19
-rw-r--r--src/settings/plugins/ifupdown/tests/Makefile.in39
-rw-r--r--src/settings/plugins/ifupdown/tests/test-ifupdown.c215
-rw-r--r--src/settings/plugins/keyfile/Makefile.am17
-rw-r--r--src/settings/plugins/keyfile/Makefile.in35
-rw-r--r--src/settings/plugins/keyfile/common.h3
-rw-r--r--src/settings/plugins/keyfile/nm-keyfile-connection.c14
-rw-r--r--src/settings/plugins/keyfile/nm-keyfile-connection.h6
-rw-r--r--src/settings/plugins/keyfile/plugin.c18
-rw-r--r--src/settings/plugins/keyfile/plugin.h2
-rw-r--r--src/settings/plugins/keyfile/reader.c619
-rw-r--r--src/settings/plugins/keyfile/tests/Makefile.am12
-rw-r--r--src/settings/plugins/keyfile/tests/Makefile.in39
-rw-r--r--src/settings/plugins/keyfile/tests/keyfiles/ATT_Data_Connect_BT1
-rw-r--r--src/settings/plugins/keyfile/tests/keyfiles/ATT_Data_Connect_Plain1
-rw-r--r--src/settings/plugins/keyfile/tests/keyfiles/Makefile.am11
-rw-r--r--src/settings/plugins/keyfile/tests/keyfiles/Makefile.in17
-rw-r--r--src/settings/plugins/keyfile/tests/keyfiles/Test_Enum_Property8
-rw-r--r--src/settings/plugins/keyfile/tests/keyfiles/Test_Flags_Property11
-rw-r--r--src/settings/plugins/keyfile/tests/keyfiles/Test_Missing_ID_UUID9
-rw-r--r--src/settings/plugins/keyfile/tests/keyfiles/Test_minimal_12
-rw-r--r--src/settings/plugins/keyfile/tests/keyfiles/Test_minimal_21
-rw-r--r--src/settings/plugins/keyfile/tests/keyfiles/Test_minimal_slave_14
-rw-r--r--src/settings/plugins/keyfile/tests/keyfiles/Test_minimal_slave_27
-rw-r--r--src/settings/plugins/keyfile/tests/keyfiles/Test_minimal_slave_34
-rw-r--r--src/settings/plugins/keyfile/tests/keyfiles/Test_minimal_slave_44
-rw-r--r--src/settings/plugins/keyfile/tests/test-keyfile.c1276
-rw-r--r--src/settings/plugins/keyfile/utils.c3
-rw-r--r--src/settings/plugins/keyfile/utils.h1
-rw-r--r--src/settings/plugins/keyfile/writer.c515
-rw-r--r--src/settings/tests/Makefile.am23
-rw-r--r--src/supplicant-manager/nm-call-store.c10
-rw-r--r--src/supplicant-manager/nm-call-store.h6
-rw-r--r--src/supplicant-manager/nm-supplicant-config.c115
-rw-r--r--src/supplicant-manager/nm-supplicant-config.h4
-rw-r--r--src/supplicant-manager/nm-supplicant-interface.c20
-rw-r--r--src/supplicant-manager/nm-supplicant-interface.h5
-rw-r--r--src/supplicant-manager/nm-supplicant-manager.c14
-rw-r--r--src/supplicant-manager/nm-supplicant-manager.h6
-rw-r--r--src/supplicant-manager/nm-supplicant-settings-verify.c4
-rw-r--r--src/supplicant-manager/nm-supplicant-settings-verify.h6
-rw-r--r--src/supplicant-manager/nm-supplicant-types.h4
-rw-r--r--src/supplicant-manager/tests/Makefile.am6
-rw-r--r--src/supplicant-manager/tests/Makefile.in12
-rw-r--r--src/supplicant-manager/tests/test-supplicant-config.c77
-rw-r--r--src/tests/Makefile.am69
-rw-r--r--src/tests/Makefile.in304
-rw-r--r--src/tests/config/Makefile.am (renamed from src/config/tests/Makefile.am)11
-rw-r--r--src/tests/config/Makefile.in (renamed from src/config/tests/Makefile.in)23
-rw-r--r--src/tests/config/NetworkManager.conf (renamed from src/config/tests/NetworkManager.conf)0
-rw-r--r--src/tests/config/bad.conf (renamed from src/config/tests/bad.conf)0
-rw-r--r--src/tests/config/conf.d/00-overrides.conf (renamed from src/config/tests/conf.d/00-overrides.conf)0
-rw-r--r--src/tests/config/conf.d/10-more.conf (renamed from src/config/tests/conf.d/10-more.conf)0
-rw-r--r--src/tests/config/conf.d/90-last.conf (renamed from src/config/tests/conf.d/90-last.conf)0
-rw-r--r--src/tests/config/nm-test-device.c99
-rw-r--r--src/tests/config/nm-test-device.h (renamed from src/config/tests/nm-test-device.h)14
-rw-r--r--src/tests/config/test-config.c (renamed from src/config/tests/test-config.c)25
-rw-r--r--src/tests/test-dcb.c2
-rw-r--r--src/tests/test-dhcp-options.c937
-rw-r--r--src/tests/test-general-with-expect.c349
-rw-r--r--src/tests/test-general.c357
-rw-r--r--src/tests/test-ip4-config.c49
-rw-r--r--src/tests/test-ip6-config.c87
-rw-r--r--src/tests/test-resolvconf-capture.c5
-rw-r--r--src/tests/test-wired-defname.c (renamed from src/settings/tests/test-wired-defname.c)65
-rw-r--r--src/vpn-manager/nm-vpn-connection.c550
-rw-r--r--src/vpn-manager/nm-vpn-connection.h77
-rw-r--r--src/vpn-manager/nm-vpn-manager.c79
-rw-r--r--src/vpn-manager/nm-vpn-manager.h42
-rw-r--r--src/vpn-manager/nm-vpn-service.c92
-rw-r--r--src/vpn-manager/nm-vpn-service.h28
-rw-r--r--test/Makefile.am39
-rw-r--r--test/libnm-glib-test.c113
-rw-r--r--tools/Makefile.am29
-rw-r--r--tools/Makefile.in224
-rwxr-xr-xtools/check-exports.sh57
-rwxr-xr-xtools/debug-helper.py61
-rw-r--r--tools/generate-settings-spec.c457
-rwxr-xr-xtools/run-test-valgrind.sh26
-rwxr-xr-xtools/test-networkmanager-service.py (renamed from libnm-glib/tests/test-fake-nm.py)416
-rwxr-xr-xtools/test-sudo-wrapper.sh29
-rw-r--r--tui/nm-editor-bindings.c1676
-rw-r--r--tui/nmt-editor.c330
-rw-r--r--tui/nmt-page-device.c151
-rw-r--r--tui/nmt-page-device.h51
-rw-r--r--tui/nmt-page-main.c327
-rw-r--r--tui/nmt-page-main.h51
-rw-r--r--tui/nmt-secret-agent.c646
-rw-r--r--tui/nmt-secret-agent.h57
-rw-r--r--vapi/Makefile.in10
-rw-r--r--vapi/Makefile.vapigen4
-rw-r--r--vapi/NMClient-1.0.metadata4
1418 files changed, 341279 insertions, 87670 deletions
diff --git a/Makefile.am b/Makefile.am
index b41bfa90f..18bb6c68c 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -3,17 +3,17 @@ include $(GLIB_MAKEFILE)
SUBDIRS = \
. \
include \
+ introspection \
+ libnm-core \
+ libnm \
libnm-util \
libnm-glib \
- introspection \
src \
callouts \
- cli \
- tui \
+ clients \
tools \
policy \
data \
- test \
po \
docs \
man \
@@ -44,6 +44,16 @@ DISTCHECK_CONFIGURE_FLAGS = \
--enable-ifupdown \
--enable-ifnet
+if BUILD_SETTING_DOCS
+dist-check-setting-docs:
+else
+dist-check-setting-docs:
+ @echo "*** gobject-introspection and pygobject are needed to run 'make dist'. ***"
+ @false
+endif
+
+dist: dist-check-setting-docs
+
DISTCLEANFILES = intltool-extract intltool-merge intltool-update
pkgconfigdir = $(libdir)/pkgconfig
@@ -54,12 +64,6 @@ ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
CLEANFILES = cscope.in.out cscope.out cscope.po.out
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
+ cscope -b -q -R -Iinclude -ssrc -slibnm-core -slibnm -slibnm-glib -slibnm-util -sclients;
.PHONY: cscope
diff --git a/Makefile.in b/Makefile.in
index fbbc632b8..fb24b2e8c 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -14,24 +14,6 @@
@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 = \
@@ -96,10 +78,11 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-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 \
+subdir = .
+DIST_COMMON = 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 \
@@ -107,11 +90,10 @@ DIST_COMMON = $(srcdir)/libgsystem/Makefile-libgsystem.am INSTALL NEWS \
$(top_srcdir)/initscript/Arch/networkmanager.in \
$(top_srcdir)/initscript/Mandriva/networkmanager.in \
$(top_srcdir)/initscript/linexa/networkmanager.in \
- $(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 \
+ $(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/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 \
@@ -119,7 +101,6 @@ DIST_COMMON = $(srcdir)/libgsystem/Makefile-libgsystem.am INSTALL NEWS \
$(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/ax_lib_readline.m4 \
$(top_srcdir)/m4/compiler_warnings.m4 \
@@ -147,24 +128,6 @@ CONFIG_CLEAN_FILES = initscript/RedHat/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
@@ -177,30 +140,8 @@ 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@
-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)
+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 \
@@ -324,6 +265,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -447,6 +390,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -466,6 +410,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -492,7 +437,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -574,27 +519,33 @@ with_valgrind = @with_valgrind@
SUBDIRS = \
. \
include \
+ introspection \
+ libnm-core \
+ libnm \
libnm-util \
libnm-glib \
- introspection \
src \
callouts \
- cli \
- tui \
+ clients \
tools \
policy \
data \
- test \
po \
docs \
man \
examples \
vapi
-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
+EXTRA_DIST = \
+ CONTRIBUTING \
+ NetworkManager.pc.in \
+ intltool-extract.in \
+ intltool-merge.in \
+ intltool-update.in \
+ Makefile.glib \
+ autogen.sh \
+ valgrind.suppressions
+
DISTCHECK_CONFIGURE_FLAGS = \
--enable-tests=yes \
--with-valgrind=no \
@@ -612,41 +563,13 @@ 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 $(srcdir)/libgsystem/Makefile-libgsystem.am $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -669,7 +592,6 @@ 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
@@ -711,104 +633,6 @@ 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
@@ -1124,7 +948,7 @@ distcleancheck: distclean
exit 1; } >&2
check-am: all-am
check: check-recursive
-all-am: Makefile $(LTLIBRARIES) $(DATA) config.h
+all-am: Makefile $(DATA) config.h
installdirs: installdirs-recursive
installdirs-am:
for dir in "$(DESTDIR)$(pkgconfigdir)"; do \
@@ -1164,15 +988,13 @@ maintainer-clean-generic:
@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
- mostlyclean-am
+clean-am: clean-generic clean-libtool mostlyclean-am
distclean: distclean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
- -rm -rf ./$(DEPDIR)
-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
- distclean-hdr distclean-libtool distclean-tags
+distclean-am: clean-am distclean-generic distclean-hdr \
+ distclean-libtool distclean-tags
dvi: dvi-recursive
@@ -1217,14 +1039,12 @@ 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-compile mostlyclean-generic \
- mostlyclean-libtool
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
pdf: pdf-recursive
@@ -1240,28 +1060,34 @@ 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 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
+ 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
include $(GLIB_MAKEFILE)
@GNOME_CODE_COVERAGE_RULES@
+@BUILD_SETTING_DOCS_TRUE@dist-check-setting-docs:
+@BUILD_SETTING_DOCS_FALSE@dist-check-setting-docs:
+@BUILD_SETTING_DOCS_FALSE@ @echo "*** gobject-introspection and pygobject are needed to run 'make dist'. ***"
+@BUILD_SETTING_DOCS_FALSE@ @false
+
+dist: dist-check-setting-docs
+
cscope:
- cscope -b -q -R -Iinclude -ssrc -slibnm-glib -slibnm-util -scli/src;
+ cscope -b -q -R -Iinclude -ssrc -slibnm-core -slibnm -slibnm-glib -slibnm-util -sclients;
.PHONY: cscope
diff --git a/NEWS b/NEWS
index 6de295203..2de014ebf 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,51 @@
+===============================================
+NetworkManager-1.0
+Overview of changes since NetworkManager-0.9.10
+===============================================
+
+This is a new stable release of NetworkManager. Notable changes include:
+
+* A new 'libnm' GObject-based client library to replace libnm-util/libnm-glib
+ - IP address, IP route, hardware address, and other properties are now
+ represented as strings
+ - Based on GIO's GDBus bindings instead of dbus-glib
+ - Uses modern GObject APIs including GAsyncResult and GVariant
+ - For more information see https://wiki.gnome.org/Projects/NetworkManager/libnm
+* Devices and VPN connections now have individual default routes. Priorities
+ are handled through configurable route metrics.
+* nmcli now supports password requests and PolicyKit authorizations
+* A faster, lighter-weight (though less capable) internal DHCP client has been
+ added and may be selected with the "dhcp=internal" option. It supports
+ fewer DHCP options and does not yet support DHCPv6.
+* A new 'configure-and-quit=yes' option has been added for environments with
+ less dynamic network configuration
+* When running on 3.17 and later kernels, NetworkManager handles IPv6LL address
+ assignment to ensure that IPv6 connectivity is not enabled until
+ intentionally configured by the user
+* NetworkManager no longer causes the nl80211 kernel module to be loaded on
+ systems with no Wi-Fi devices
+* Bluetooth DUN support now works with Bluez 5.x
+* VPN connections can now persist across link changes and suspend/resume if
+ their VPN plugin supports this feature
+* A new 'ibft' settings plugin has been added to support firmware-based
+ iBFT/iSCSI configurations. This functionality has been moved to 'ibft'
+ from the 'ifcfg-rh' plugin.
+* IPv6 router advertisement MTUs are now respected
+* NetworkManager no longer requires polkit libraries at runtime when Polkit
+ support is enabled, and Polkit can be disabled at build time too
+* Automatically created connections are now deleted when their device goes away
+* 'nmcli dev connect' now attemts to create a connection if none exists
+* Manually configured static IPv6 configuration is kept even if SLAAC fails
+* Manpages for the 'keyfile' and 'ifcfg-rh' plugins now describe their
+ configuration syntax and available options
+* WWAN connections now support IPv6 if the modem and provider support IPv6
+* Software devices (bridge, bond, team, etc) can now be deleted from the D-Bus
+ API or with nmcli
+* The manpages, documentation, and API annotations have received many cleanups
+* Externally created virtual interfaces are no longer managed by NetworkManager
+ until they are set "up" or activated via nmcli
+
+
==============================================
NetworkManager-0.9.10
Overview of changes since NetworkManager-0.9.8
@@ -52,8 +100,7 @@ This is a new stable release of NetworkManager. Notable changes include:
* 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
diff --git a/autogen.sh b/autogen.sh
index 1b56207af..141bcf120 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -22,13 +22,6 @@ PKG_NAME=NetworkManager
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
diff --git a/build-aux/config.guess b/build-aux/config.guess
index 1804e9fcd..1f5c50c0d 100755
--- a/build-aux/config.guess
+++ b/build-aux/config.guess
@@ -1,10 +1,8 @@
#! /bin/sh
# Attempt to guess a canonical system name.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-# 2011, 2012, 2013 Free Software Foundation, Inc.
+# Copyright 1992-2014 Free Software Foundation, Inc.
-timestamp='2012-12-29'
+timestamp='2014-03-23'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -26,7 +24,7 @@ timestamp='2012-12-29'
# program. This Exception is an additional permission under section 7
# of the GNU General Public License, version 3 ("GPLv3").
#
-# Originally written by Per Bothner.
+# Originally written by Per Bothner.
#
# You can get the latest version of this script from:
# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
@@ -52,9 +50,7 @@ version="\
GNU config.guess ($timestamp)
Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
-2012, 2013 Free Software Foundation, Inc.
+Copyright 1992-2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -136,6 +132,27 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+case "${UNAME_SYSTEM}" in
+Linux|GNU|GNU/*)
+ # If the system lacks a compiler, then just pick glibc.
+ # We could probably try harder.
+ LIBC=gnu
+
+ eval $set_cc_for_build
+ cat <<-EOF > $dummy.c
+ #include <features.h>
+ #if defined(__UCLIBC__)
+ LIBC=uclibc
+ #elif defined(__dietlibc__)
+ LIBC=dietlibc
+ #else
+ LIBC=gnu
+ #endif
+ EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
+ ;;
+esac
+
# Note: order is significant - the case branches are not exclusive.
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
@@ -809,7 +826,7 @@ EOF
*:MINGW*:*)
echo ${UNAME_MACHINE}-pc-mingw32
exit ;;
- i*:MSYS*:*)
+ *:MSYS*:*)
echo ${UNAME_MACHINE}-pc-msys
exit ;;
i*:windows32*:*)
@@ -857,21 +874,21 @@ EOF
exit ;;
*:GNU:*:*)
# the GNU system
- echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
exit ;;
*:GNU/*:*:*)
# other systems with GNU libc and userland
- echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
exit ;;
i*86:Minix:*:*)
echo ${UNAME_MACHINE}-pc-minix
exit ;;
aarch64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
aarch64_be:Linux:*:*)
UNAME_MACHINE=aarch64_be
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
alpha:Linux:*:*)
case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
@@ -884,59 +901,54 @@ EOF
EV68*) UNAME_MACHINE=alphaev68 ;;
esac
objdump --private-headers /bin/sh | grep -q ld.so.1
- if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
- echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+ if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ arc:Linux:*:* | arceb:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
arm*:Linux:*:*)
eval $set_cc_for_build
if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ARM_EABI__
then
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
else
if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ARM_PCS_VFP
then
- echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
else
- echo ${UNAME_MACHINE}-unknown-linux-gnueabihf
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
fi
fi
exit ;;
avr32*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
cris:Linux:*:*)
- echo ${UNAME_MACHINE}-axis-linux-gnu
+ echo ${UNAME_MACHINE}-axis-linux-${LIBC}
exit ;;
crisv32:Linux:*:*)
- echo ${UNAME_MACHINE}-axis-linux-gnu
+ echo ${UNAME_MACHINE}-axis-linux-${LIBC}
exit ;;
frv:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
hexagon:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
i*86:Linux:*:*)
- LIBC=gnu
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #ifdef __dietlibc__
- LIBC=dietlibc
- #endif
-EOF
- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
- echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+ echo ${UNAME_MACHINE}-pc-linux-${LIBC}
exit ;;
ia64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
m32r*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
m68*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
mips:Linux:*:* | mips64:Linux:*:*)
eval $set_cc_for_build
@@ -955,54 +967,63 @@ EOF
#endif
EOF
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
- test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
;;
- or32:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ openrisc*:Linux:*:*)
+ echo or1k-unknown-linux-${LIBC}
+ exit ;;
+ or32:Linux:*:* | or1k*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
padre:Linux:*:*)
- echo sparc-unknown-linux-gnu
+ echo sparc-unknown-linux-${LIBC}
exit ;;
parisc64:Linux:*:* | hppa64:Linux:*:*)
- echo hppa64-unknown-linux-gnu
+ echo hppa64-unknown-linux-${LIBC}
exit ;;
parisc:Linux:*:* | hppa:Linux:*:*)
# Look for CPU level
case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
- PA7*) echo hppa1.1-unknown-linux-gnu ;;
- PA8*) echo hppa2.0-unknown-linux-gnu ;;
- *) echo hppa-unknown-linux-gnu ;;
+ PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
+ PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
+ *) echo hppa-unknown-linux-${LIBC} ;;
esac
exit ;;
ppc64:Linux:*:*)
- echo powerpc64-unknown-linux-gnu
+ echo powerpc64-unknown-linux-${LIBC}
exit ;;
ppc:Linux:*:*)
- echo powerpc-unknown-linux-gnu
+ echo powerpc-unknown-linux-${LIBC}
+ exit ;;
+ ppc64le:Linux:*:*)
+ echo powerpc64le-unknown-linux-${LIBC}
+ exit ;;
+ ppcle:Linux:*:*)
+ echo powerpcle-unknown-linux-${LIBC}
exit ;;
s390:Linux:*:* | s390x:Linux:*:*)
- echo ${UNAME_MACHINE}-ibm-linux
+ echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
exit ;;
sh64*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
sh*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
sparc:Linux:*:* | sparc64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
tile*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
vax:Linux:*:*)
- echo ${UNAME_MACHINE}-dec-linux-gnu
+ echo ${UNAME_MACHINE}-dec-linux-${LIBC}
exit ;;
x86_64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
xtensa*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
i*86:DYNIX/ptx:4*:*)
# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
@@ -1235,19 +1256,31 @@ EOF
exit ;;
*:Darwin:*:*)
UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
- case $UNAME_PROCESSOR in
- i386)
- eval $set_cc_for_build
- if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
- if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
- (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
- grep IS_64BIT_ARCH >/dev/null
- then
- UNAME_PROCESSOR="x86_64"
- fi
- fi ;;
- unknown) UNAME_PROCESSOR=powerpc ;;
- esac
+ eval $set_cc_for_build
+ if test "$UNAME_PROCESSOR" = unknown ; then
+ UNAME_PROCESSOR=powerpc
+ fi
+ if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
+ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ case $UNAME_PROCESSOR in
+ i386) UNAME_PROCESSOR=x86_64 ;;
+ powerpc) UNAME_PROCESSOR=powerpc64 ;;
+ esac
+ fi
+ fi
+ elif test "$UNAME_PROCESSOR" = i386 ; then
+ # Avoid executing cc on OS X 10.9, as it ships with a stub
+ # that puts up a graphical alert prompting to install
+ # developer tools. Any system running Mac OS X 10.7 or
+ # later (Darwin 11 and later) is required to have a 64-bit
+ # processor. This is not true of the ARM version of Darwin
+ # that Apple uses in portable devices.
+ UNAME_PROCESSOR=x86_64
+ fi
echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
exit ;;
*:procnto*:*:* | *:QNX:[0123456789]*:*)
@@ -1338,154 +1371,6 @@ EOF
exit ;;
esac
-eval $set_cc_for_build
-cat >$dummy.c <<EOF
-#ifdef _SEQUENT_
-# include <sys/types.h>
-# include <sys/utsname.h>
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
- /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
- I don't know.... */
- printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
- printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
- "4"
-#else
- ""
-#endif
- ); exit (0);
-#endif
-#endif
-
-#if defined (__arm) && defined (__acorn) && defined (__unix)
- printf ("arm-acorn-riscix\n"); exit (0);
-#endif
-
-#if defined (hp300) && !defined (hpux)
- printf ("m68k-hp-bsd\n"); exit (0);
-#endif
-
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
-#define __ARCHITECTURE__ "m68k"
-#endif
- int version;
- version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
- if (version < 4)
- printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
- else
- printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
- exit (0);
-#endif
-
-#if defined (MULTIMAX) || defined (n16)
-#if defined (UMAXV)
- printf ("ns32k-encore-sysv\n"); exit (0);
-#else
-#if defined (CMU)
- printf ("ns32k-encore-mach\n"); exit (0);
-#else
- printf ("ns32k-encore-bsd\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (__386BSD__)
- printf ("i386-pc-bsd\n"); exit (0);
-#endif
-
-#if defined (sequent)
-#if defined (i386)
- printf ("i386-sequent-dynix\n"); exit (0);
-#endif
-#if defined (ns32000)
- printf ("ns32k-sequent-dynix\n"); exit (0);
-#endif
-#endif
-
-#if defined (_SEQUENT_)
- struct utsname un;
-
- uname(&un);
-
- if (strncmp(un.version, "V2", 2) == 0) {
- printf ("i386-sequent-ptx2\n"); exit (0);
- }
- if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
- printf ("i386-sequent-ptx1\n"); exit (0);
- }
- printf ("i386-sequent-ptx\n"); exit (0);
-
-#endif
-
-#if defined (vax)
-# if !defined (ultrix)
-# include <sys/param.h>
-# if defined (BSD)
-# if BSD == 43
- printf ("vax-dec-bsd4.3\n"); exit (0);
-# else
-# if BSD == 199006
- printf ("vax-dec-bsd4.3reno\n"); exit (0);
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# endif
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# else
- printf ("vax-dec-ultrix\n"); exit (0);
-# endif
-#endif
-
-#if defined (alliant) && defined (i860)
- printf ("i860-alliant-bsd\n"); exit (0);
-#endif
-
- exit (1);
-}
-EOF
-
-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
- { echo "$SYSTEM_NAME"; exit; }
-
-# Apollos put the system type in the environment.
-
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
-
-# Convex versions that predate uname can use getsysinfo(1)
-
-if [ -x /usr/convex/getsysinfo ]
-then
- case `getsysinfo -f cpu_type` in
- c1*)
- echo c1-convex-bsd
- exit ;;
- c2*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit ;;
- c34*)
- echo c34-convex-bsd
- exit ;;
- c38*)
- echo c38-convex-bsd
- exit ;;
- c4*)
- echo c4-convex-bsd
- exit ;;
- esac
-fi
-
cat >&2 <<EOF
$0: unable to guess system type
diff --git a/build-aux/config.sub b/build-aux/config.sub
index 52f04bcd7..66c507436 100755
--- a/build-aux/config.sub
+++ b/build-aux/config.sub
@@ -1,10 +1,8 @@
#! /bin/sh
# Configuration validation subroutine script.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-# 2011, 2012, 2013 Free Software Foundation, Inc.
+# Copyright 1992-2014 Free Software Foundation, Inc.
-timestamp='2012-12-29'
+timestamp='2014-07-28'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -70,9 +68,7 @@ Report bugs and patches to <config-patches@gnu.org>."
version="\
GNU config.sub ($timestamp)
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
-2012, 2013 Free Software Foundation, Inc.
+Copyright 1992-2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -256,12 +252,12 @@ case $basic_machine in
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
| am33_2.0 \
- | arc \
+ | arc | arceb \
| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
| avr | avr32 \
| be32 | be64 \
| bfin \
- | c4x | clipper \
+ | c4x | c8051 | clipper \
| d10v | d30v | dlx | dsp16xx \
| epiphany \
| fido | fr30 | frv \
@@ -269,6 +265,7 @@ case $basic_machine in
| hexagon \
| i370 | i860 | i960 | ia64 \
| ip2k | iq2000 \
+ | k1om \
| le32 | le64 \
| lm32 \
| m32c | m32r | m32rle | m68000 | m68k | m88k \
@@ -286,20 +283,22 @@ case $basic_machine in
| mips64vr5900 | mips64vr5900el \
| mipsisa32 | mipsisa32el \
| mipsisa32r2 | mipsisa32r2el \
+ | mipsisa32r6 | mipsisa32r6el \
| mipsisa64 | mipsisa64el \
| mipsisa64r2 | mipsisa64r2el \
+ | mipsisa64r6 | mipsisa64r6el \
| mipsisa64sb1 | mipsisa64sb1el \
| mipsisa64sr71k | mipsisa64sr71kel \
+ | mipsr5900 | mipsr5900el \
| mipstx39 | mipstx39el \
| mn10200 | mn10300 \
| moxie \
| mt \
| msp430 \
| nds32 | nds32le | nds32be \
- | nios | nios2 \
+ | nios | nios2 | nios2eb | nios2el \
| ns16k | ns32k \
- | open8 \
- | or32 \
+ | open8 | or1k | or1knd | or32 \
| pdp10 | pdp11 | pj | pjl \
| powerpc | powerpc64 | powerpc64le | powerpcle \
| pyramid \
@@ -327,7 +326,7 @@ case $basic_machine in
c6x)
basic_machine=tic6x-unknown
;;
- m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
+ m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
basic_machine=$basic_machine-unknown
os=-none
;;
@@ -369,13 +368,13 @@ case $basic_machine in
| aarch64-* | aarch64_be-* \
| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
- | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
| avr-* | avr32-* \
| be32-* | be64-* \
| bfin-* | bs2000-* \
| c[123]* | c30-* | [cjt]90-* | c4x-* \
- | clipper-* | craynv-* | cydra-* \
+ | c8051-* | clipper-* | craynv-* | cydra-* \
| d10v-* | d30v-* | dlx-* \
| elxsi-* \
| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
@@ -384,6 +383,7 @@ case $basic_machine in
| hexagon-* \
| i*86-* | i860-* | i960-* | ia64-* \
| ip2k-* | iq2000-* \
+ | k1om-* \
| le32-* | le64-* \
| lm32-* \
| m32c-* | m32r-* | m32rle-* \
@@ -403,18 +403,22 @@ case $basic_machine in
| mips64vr5900-* | mips64vr5900el-* \
| mipsisa32-* | mipsisa32el-* \
| mipsisa32r2-* | mipsisa32r2el-* \
+ | mipsisa32r6-* | mipsisa32r6el-* \
| mipsisa64-* | mipsisa64el-* \
| mipsisa64r2-* | mipsisa64r2el-* \
+ | mipsisa64r6-* | mipsisa64r6el-* \
| mipsisa64sb1-* | mipsisa64sb1el-* \
| mipsisa64sr71k-* | mipsisa64sr71kel-* \
+ | mipsr5900-* | mipsr5900el-* \
| mipstx39-* | mipstx39el-* \
| mmix-* \
| mt-* \
| msp430-* \
| nds32-* | nds32le-* | nds32be-* \
- | nios-* | nios2-* \
+ | nios-* | nios2-* | nios2eb-* | nios2el-* \
| none-* | np1-* | ns16k-* | ns32k-* \
| open8-* \
+ | or1k*-* \
| orion-* \
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
@@ -796,7 +800,7 @@ case $basic_machine in
os=-mingw64
;;
mingw32)
- basic_machine=i386-pc
+ basic_machine=i686-pc
os=-mingw32
;;
mingw32ce)
@@ -824,6 +828,10 @@ case $basic_machine in
basic_machine=powerpc-unknown
os=-morphos
;;
+ moxiebox)
+ basic_machine=moxie-unknown
+ os=-moxiebox
+ ;;
msdos)
basic_machine=i386-pc
os=-msdos
@@ -832,7 +840,7 @@ case $basic_machine in
basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
;;
msys)
- basic_machine=i386-pc
+ basic_machine=i686-pc
os=-msys
;;
mvs)
@@ -1354,7 +1362,7 @@ case $os in
-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
| -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
- | -sym* | -kopensolaris* \
+ | -sym* | -kopensolaris* | -plan9* \
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
| -aos* | -aros* \
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
@@ -1369,14 +1377,14 @@ case $os in
| -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
| -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
| -linux-newlib* | -linux-musl* | -linux-uclibc* \
- | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
| -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
| -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
| -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
| -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
- | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
+ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*)
# Remember, each alternative MUST END IN *, to match a version number.
;;
-qnx*)
@@ -1500,9 +1508,6 @@ case $os in
-aros*)
os=-aros
;;
- -kaos*)
- os=-kaos
- ;;
-zvmoe)
os=-zvmoe
;;
@@ -1551,6 +1556,9 @@ case $basic_machine in
c4x-* | tic4x-*)
os=-coff
;;
+ c8051-*)
+ os=-elf
+ ;;
hexagon-*)
os=-elf
;;
diff --git a/callouts/Makefile.am b/callouts/Makefile.am
index a8c9026fe..f682579e9 100644
--- a/callouts/Makefile.am
+++ b/callouts/Makefile.am
@@ -2,11 +2,11 @@ SUBDIRS = . tests
AM_CPPFLAGS = \
-I${top_srcdir}/include \
- -I${top_builddir}/include \
- -I${top_srcdir}/libnm-util \
- -I${top_builddir}/libnm-util \
+ -I${top_srcdir}/libnm-core \
+ -I${top_builddir}/libnm-core \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS) \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
-DNMCONFDIR=\"$(nmconfdir)\" \
-DSYSCONFDIR=\"$(sysconfdir)\" \
@@ -45,12 +45,31 @@ nm_dispatcher_SOURCES = \
nm-dispatcher-utils.h
nm_dispatcher_LDADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(DBUS_LIBS) \
+ $(top_builddir)/libnm/libnm.la \
+ libnmdbus-dispatcher.la \
$(GLIB_LIBS)
-nm-dispatcher-glue.h: nm-dispatcher.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_dispatcher --mode=glib-server --output=$@ $<
+# See note about gdbus-codegen in introspection/Makefile.am
+
+noinst_LTLIBRARIES += libnmdbus-dispatcher.la
+
+nodist_libnmdbus_dispatcher_la_SOURCES = \
+ nmdbus-dispatcher.c \
+ nmdbus-dispatcher.h
+
+libnmdbus_dispatcher_la_CPPFLAGS = $(filter-out -DGLIB_VERSION_MAX_ALLOWED%,$(AM_CPPFLAGS))
+
+nmdbus-dispatcher.h: nm-dispatcher.xml
+ $(AM_V_GEN) gdbus-codegen \
+ --generate-c-code $(basename $@) \
+ --c-namespace NMDBus \
+ --interface-prefix org.freedesktop \
+ $<
+
+nmdbus-dispatcher.c: nmdbus-dispatcher.h
+ @true
+
+BUILT_SOURCES = nmdbus-dispatcher.h nmdbus-dispatcher.c
###########################################
# dispatcher envp
@@ -64,13 +83,14 @@ libtest_dispatcher_envp_la_CPPFLAGS = \
$(AM_CPPFLAGS)
libtest_dispatcher_envp_la_LIBADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(GLIB_LIBS) \
- $(DBUS_LIBS)
+ $(top_builddir)/libnm/libnm.la \
+ $(GLIB_LIBS)
-udevrulesdir = $(UDEV_BASE_DIR)/rules.d
+if WITH_UDEV_DIR
+udevrulesdir = $(UDEV_DIR)/rules.d
udevrules_DATA = 77-nm-olpc-mesh.rules
+endif
dbusactivationdir = $(datadir)/dbus-1/system-services
dbusactivation_in_files = org.freedesktop.nm_dispatcher.service.in
@@ -91,9 +111,7 @@ install-data-hook:
$(mkinstalldirs) -m 0755 $(DESTDIR)$(dispatcherdir)/pre-down.d
$(mkinstalldirs) -m 0755 $(DESTDIR)$(dispatcherdir)/pre-up.d
-BUILT_SOURCES = nm-dispatcher-glue.h
-
-CLEANFILES = $(BUILT_SOURCES) $(dbusactivation_DATA)
+CLEANFILES = $(nodist_libnmdbus_dispatcher_la_SOURCES) $(dbusactivation_DATA)
EXTRA_DIST = \
$(dbusservice_DATA) \
diff --git a/callouts/Makefile.in b/callouts/Makefile.in
index 06abda447..83151fcc0 100644
--- a/callouts/Makefile.in
+++ b/callouts/Makefile.in
@@ -106,18 +106,22 @@ CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
LTLIBRARIES = $(noinst_LTLIBRARIES)
+libnmdbus_dispatcher_la_LIBADD =
+nodist_libnmdbus_dispatcher_la_OBJECTS = \
+ libnmdbus_dispatcher_la-nmdbus-dispatcher.lo
+libnmdbus_dispatcher_la_OBJECTS = \
+ $(nodist_libnmdbus_dispatcher_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__DEPENDENCIES_1 =
libtest_dispatcher_envp_la_DEPENDENCIES = \
- $(top_builddir)/libnm-util/libnm-util.la $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1)
+ $(top_builddir)/libnm/libnm.la $(am__DEPENDENCIES_1)
am_libtest_dispatcher_envp_la_OBJECTS = \
libtest_dispatcher_envp_la-nm-dispatcher-utils.lo
libtest_dispatcher_envp_la_OBJECTS = \
$(am_libtest_dispatcher_envp_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__installdirs = "$(DESTDIR)$(libexecdir)" \
"$(DESTDIR)$(dbusactivationdir)" "$(DESTDIR)$(dbusservicedir)" \
"$(DESTDIR)$(udevrulesdir)"
@@ -131,8 +135,8 @@ nm_avahi_autoipd_action_DEPENDENCIES = $(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)
+nm_dispatcher_DEPENDENCIES = $(top_builddir)/libnm/libnm.la \
+ libnmdbus-dispatcher.la $(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
@@ -167,7 +171,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 = $(libtest_dispatcher_envp_la_SOURCES) \
+SOURCES = $(nodist_libnmdbus_dispatcher_la_SOURCES) \
+ $(libtest_dispatcher_envp_la_SOURCES) \
$(nm_avahi_autoipd_action_SOURCES) $(nm_dispatcher_SOURCES)
DIST_SOURCES = $(libtest_dispatcher_envp_la_SOURCES) \
$(nm_avahi_autoipd_action_SOURCES) $(nm_dispatcher_SOURCES)
@@ -275,6 +280,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -398,6 +405,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -417,6 +425,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -443,7 +452,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -525,11 +534,11 @@ 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_srcdir}/libnm-core \
+ -I${top_builddir}/libnm-core \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS) \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
-DNMCONFDIR=\"$(nmconfdir)\" \
-DSYSCONFDIR=\"$(sysconfdir)\" \
@@ -539,9 +548,10 @@ AM_CPPFLAGS = \
###########################################
# Test libraries
###########################################
-noinst_LTLIBRARIES = \
- libtest-dispatcher-envp.la
+# See note about gdbus-codegen in introspection/Makefile.am
+noinst_LTLIBRARIES = libtest-dispatcher-envp.la \
+ libnmdbus-dispatcher.la
dbusservicedir = $(DBUS_SYS_DIR)
dbusservice_DATA = \
nm-dispatcher.conf \
@@ -561,10 +571,16 @@ nm_dispatcher_SOURCES = \
nm-dispatcher-utils.h
nm_dispatcher_LDADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(DBUS_LIBS) \
+ $(top_builddir)/libnm/libnm.la \
+ libnmdbus-dispatcher.la \
$(GLIB_LIBS)
+nodist_libnmdbus_dispatcher_la_SOURCES = \
+ nmdbus-dispatcher.c \
+ nmdbus-dispatcher.h
+
+libnmdbus_dispatcher_la_CPPFLAGS = $(filter-out -DGLIB_VERSION_MAX_ALLOWED%,$(AM_CPPFLAGS))
+BUILT_SOURCES = nmdbus-dispatcher.h nmdbus-dispatcher.c
###########################################
# dispatcher envp
@@ -577,12 +593,11 @@ libtest_dispatcher_envp_la_CPPFLAGS = \
$(AM_CPPFLAGS)
libtest_dispatcher_envp_la_LIBADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(GLIB_LIBS) \
- $(DBUS_LIBS)
+ $(top_builddir)/libnm/libnm.la \
+ $(GLIB_LIBS)
-udevrulesdir = $(UDEV_BASE_DIR)/rules.d
-udevrules_DATA = 77-nm-olpc-mesh.rules
+@WITH_UDEV_DIR_TRUE@udevrulesdir = $(UDEV_DIR)/rules.d
+@WITH_UDEV_DIR_TRUE@udevrules_DATA = 77-nm-olpc-mesh.rules
dbusactivationdir = $(datadir)/dbus-1/system-services
dbusactivation_in_files = org.freedesktop.nm_dispatcher.service.in
dbusactivation_DATA = $(dbusactivation_in_files:.service.in=.service)
@@ -593,8 +608,7 @@ edit = @sed \
-e 's|@libexecdir[@]|$(libexecdir)|g'
dispatcherdir = $(sysconfdir)/NetworkManager/dispatcher.d
-BUILT_SOURCES = nm-dispatcher-glue.h
-CLEANFILES = $(BUILT_SOURCES) $(dbusactivation_DATA)
+CLEANFILES = $(nodist_libnmdbus_dispatcher_la_SOURCES) $(dbusactivation_DATA)
EXTRA_DIST = \
$(dbusservice_DATA) \
$(udevrules_DATA) \
@@ -648,6 +662,9 @@ clean-noinstLTLIBRARIES:
rm -f $${locs}; \
}
+libnmdbus-dispatcher.la: $(libnmdbus_dispatcher_la_OBJECTS) $(libnmdbus_dispatcher_la_DEPENDENCIES) $(EXTRA_libnmdbus_dispatcher_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libnmdbus_dispatcher_la_OBJECTS) $(libnmdbus_dispatcher_la_LIBADD) $(LIBS)
+
libtest-dispatcher-envp.la: $(libtest_dispatcher_envp_la_OBJECTS) $(libtest_dispatcher_envp_la_DEPENDENCIES) $(EXTRA_libtest_dispatcher_envp_la_DEPENDENCIES)
$(AM_V_CCLD)$(LINK) $(libtest_dispatcher_envp_la_OBJECTS) $(libtest_dispatcher_envp_la_LIBADD) $(LIBS)
install-libexecPROGRAMS: $(libexec_PROGRAMS)
@@ -714,6 +731,7 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnmdbus_dispatcher_la-nmdbus-dispatcher.Plo@am__quote@
@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.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-dispatcher-utils.Po@am__quote@
@@ -740,6 +758,13 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+libnmdbus_dispatcher_la-nmdbus-dispatcher.lo: nmdbus-dispatcher.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnmdbus_dispatcher_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libnmdbus_dispatcher_la-nmdbus-dispatcher.lo -MD -MP -MF $(DEPDIR)/libnmdbus_dispatcher_la-nmdbus-dispatcher.Tpo -c -o libnmdbus_dispatcher_la-nmdbus-dispatcher.lo `test -f 'nmdbus-dispatcher.c' || echo '$(srcdir)/'`nmdbus-dispatcher.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnmdbus_dispatcher_la-nmdbus-dispatcher.Tpo $(DEPDIR)/libnmdbus_dispatcher_la-nmdbus-dispatcher.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nmdbus-dispatcher.c' object='libnmdbus_dispatcher_la-nmdbus-dispatcher.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) $(libnmdbus_dispatcher_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libnmdbus_dispatcher_la-nmdbus-dispatcher.lo `test -f 'nmdbus-dispatcher.c' || echo '$(srcdir)/'`nmdbus-dispatcher.c
+
libtest_dispatcher_envp_la-nm-dispatcher-utils.lo: nm-dispatcher-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_dispatcher_envp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtest_dispatcher_envp_la-nm-dispatcher-utils.lo -MD -MP -MF $(DEPDIR)/libtest_dispatcher_envp_la-nm-dispatcher-utils.Tpo -c -o libtest_dispatcher_envp_la-nm-dispatcher-utils.lo `test -f 'nm-dispatcher-utils.c' || echo '$(srcdir)/'`nm-dispatcher-utils.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtest_dispatcher_envp_la-nm-dispatcher-utils.Tpo $(DEPDIR)/libtest_dispatcher_envp_la-nm-dispatcher-utils.Plo
@@ -1109,8 +1134,15 @@ uninstall-am: uninstall-dbusactivationDATA uninstall-dbusserviceDATA \
uninstall-libexecPROGRAMS uninstall-udevrulesDATA
-nm-dispatcher-glue.h: nm-dispatcher.xml
- $(AM_V_GEN) dbus-binding-tool --prefix=nm_dispatcher --mode=glib-server --output=$@ $<
+nmdbus-dispatcher.h: nm-dispatcher.xml
+ $(AM_V_GEN) gdbus-codegen \
+ --generate-c-code $(basename $@) \
+ --c-namespace NMDBus \
+ --interface-prefix org.freedesktop \
+ $<
+
+nmdbus-dispatcher.c: nmdbus-dispatcher.h
+ @true
%.service: %.service.in
$(edit) $< >$@
diff --git a/callouts/nm-avahi-autoipd-action.c b/callouts/nm-avahi-autoipd-action.c
index f84eed712..b28dae5d2 100644
--- a/callouts/nm-avahi-autoipd-action.c
+++ b/callouts/nm-avahi-autoipd-action.c
@@ -15,87 +15,50 @@
* 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 2008, 2014 Red Hat, Inc.
*/
-#include <stdio.h>
-#include <unistd.h>
+#include "config.h"
+
#include <stdlib.h>
#include <string.h>
-#include <glib.h>
-#include <dbus/dbus.h>
-#include <dbus/dbus-glib-lowlevel.h>
-#include <dbus/dbus-glib.h>
+#include <gio/gio.h>
-#define NM_AVAHI_AUTOIPD_DBUS_SERVICE "org.freedesktop.nm_avahi_autoipd"
-#define NM_AVAHI_AUTOIPD_DBUS_IFACE "org.freedesktop.nm_avahi_autoipd"
+#define NM_AVAHI_AUTOIPD_DBUS_SERVICE "org.freedesktop.nm_avahi_autoipd"
+#define NM_AVAHI_AUTOIPD_DBUS_INTERFACE "org.freedesktop.nm_avahi_autoipd"
-static DBusConnection *
-dbus_init (void)
+static void
+on_name_acquired (GDBusConnection *connection,
+ const gchar *name,
+ gpointer loop)
{
- DBusConnection * connection;
- DBusError error;
- int ret;
-
- dbus_connection_set_change_sigpipe (TRUE);
-
- dbus_error_init (&error);
- connection = dbus_bus_get (DBUS_BUS_SYSTEM, &error);
- if (dbus_error_is_set (&error)) {
- fprintf (stderr, "Error: could not get the system bus. Make sure "
- "the message bus daemon is running! Message: (%s) %s\n",
- error.name,
- error.message);
- goto error;
- }
-
- dbus_connection_set_exit_on_disconnect (connection, FALSE);
-
- dbus_error_init (&error);
- ret = dbus_bus_request_name (connection,
- NM_AVAHI_AUTOIPD_DBUS_SERVICE,
- DBUS_NAME_FLAG_DO_NOT_QUEUE,
- &error);
- if (dbus_error_is_set (&error)) {
- fprintf (stderr, "Error: Could not acquire the NM DHCP client service. "
- "Message: (%s) %s\n",
- error.name,
- error.message);
- goto error;
- }
-
- if (ret != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) {
- fprintf (stderr, "Error: Could not acquire the NM DHCP client service "
- "as it is already taken. Return: %d\n",
- ret);
- goto error;
- }
-
- return connection;
+ g_main_loop_quit (loop);
+}
-error:
- if (dbus_error_is_set (&error))
- dbus_error_free (&error);
- if (connection)
- dbus_connection_unref (connection);
- return NULL;
+static void
+on_name_lost (GDBusConnection *connection,
+ const gchar *name,
+ gpointer user_data)
+{
+ g_printerr ("Error: Could not acquire the NM autoipd service.");
+ exit (1);
}
int
main (int argc, char *argv[])
{
- DBusConnection *connection;
- DBusMessage *message;
- dbus_bool_t result;
+ GDBusConnection *connection;
char *event, *iface, *address;
+ GMainLoop *loop;
+ GError *error = NULL;
#if !GLIB_CHECK_VERSION (2, 35, 0)
g_type_init ();
#endif
if (argc != 4) {
- fprintf (stderr, "Error: expected 3 arguments (event, interface, address).\n");
+ g_printerr ("Error: expected 3 arguments (event, interface, address).\n");
exit (1);
}
@@ -104,41 +67,60 @@ main (int argc, char *argv[])
address = argv[3] ? argv[3] : "";
if (!event || !iface || !strlen (event) || !strlen (iface)) {
- fprintf (stderr, "Error: unexpected arguments received from avahi-autoipd.\n");
+ g_printerr ("Error: unexpected arguments received from avahi-autoipd.\n");
exit (1);
}
/* Get a connection to the system bus */
- connection = dbus_init ();
- if (connection == NULL)
- exit (1);
+ connection = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error);
+ if (error) {
+ char *remote_error = g_dbus_error_get_remote_error (error);
- message = dbus_message_new_signal ("/", NM_AVAHI_AUTOIPD_DBUS_IFACE, "Event");
- if (message == NULL) {
- fprintf (stderr, "Error: not enough memory to send autoip Event signal.\n");
- exit (1);
+ g_dbus_error_strip_remote_error (error);
+ g_printerr ("Error: could not get the system bus. Make sure "
+ "the message bus daemon is running! Message: (%s) %s\n",
+ remote_error, error->message);
+ g_free (remote_error);
+ g_error_free (error);
+ return 1;
}
- if (!dbus_message_append_args (message,
- DBUS_TYPE_STRING, &event,
- DBUS_TYPE_STRING, &iface,
- DBUS_TYPE_STRING, &address,
- DBUS_TYPE_INVALID)) {
- fprintf (stderr, "Error: failed to construct autoip Event signal.\n");
- exit (1);
+ /* Acquire the bus name */
+ loop = g_main_loop_new (NULL, FALSE);
+ g_bus_own_name_on_connection (connection,
+ NM_AVAHI_AUTOIPD_DBUS_SERVICE,
+ 0,
+ on_name_acquired,
+ on_name_lost,
+ loop, NULL);
+ g_main_loop_run (loop);
+ g_main_loop_unref (loop);
+
+ /* Send the signal */
+ if (!g_dbus_connection_emit_signal (connection,
+ NULL,
+ "/",
+ NM_AVAHI_AUTOIPD_DBUS_INTERFACE,
+ "Event",
+ g_variant_new ("(sss)",
+ event,
+ iface,
+ address),
+ &error)) {
+ g_dbus_error_strip_remote_error (error);
+ g_printerr ("Error: Could not send autoipd Event signal: %s\n", error->message);
+ g_error_free (error);
+ return 1;
}
- /* queue the message */
- result = dbus_connection_send (connection, message, NULL);
- if (!result) {
- fprintf (stderr, "Error: could not send send autoip Event signal.\n");
- exit (1);
+ if (!g_dbus_connection_flush_sync (connection, NULL, &error)) {
+ g_dbus_error_strip_remote_error (error);
+ g_printerr ("Error: Could not flush D-Bus connection: %s\n", error->message);
+ g_error_free (error);
+ return 1;
}
- dbus_message_unref (message);
-
- /* Send out the message */
- dbus_connection_flush (connection);
+ g_object_unref (connection);
return 0;
}
diff --git a/callouts/nm-dispatcher-api.h b/callouts/nm-dispatcher-api.h
index 03e40f775..df1bced45 100644
--- a/callouts/nm-dispatcher-api.h
+++ b/callouts/nm-dispatcher-api.h
@@ -18,19 +18,17 @@
* Copyright (C) 2008 - 2012 Red Hat, Inc.
*/
-#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 */
+/* dbus-glib types for dispatcher call return value (used by src/nm-dispatcher.c) */
#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))
-#define NM_DISPATCHER_DBUS_SERVICE "org.freedesktop.nm_dispatcher"
-#define NM_DISPATCHER_DBUS_IFACE "org.freedesktop.nm_dispatcher"
-#define NM_DISPATCHER_DBUS_PATH "/org/freedesktop/nm_dispatcher"
+#define NM_DISPATCHER_DBUS_SERVICE "org.freedesktop.nm_dispatcher"
+#define NM_DISPATCHER_DBUS_INTERFACE "org.freedesktop.nm_dispatcher"
+#define NM_DISPATCHER_DBUS_PATH "/org/freedesktop/nm_dispatcher"
#define NMD_CONNECTION_PROPS_PATH "path"
diff --git a/callouts/nm-dispatcher-utils.c b/callouts/nm-dispatcher-utils.c
index b1d11daf3..99616c1a1 100644
--- a/callouts/nm-dispatcher-utils.c
+++ b/callouts/nm-dispatcher-utils.c
@@ -18,13 +18,13 @@
* Copyright (C) 2008 - 2011 Red Hat, Inc.
*/
-#include <config.h>
+#include "config.h"
+
#include <string.h>
#include <glib-object.h>
-#include <NetworkManager.h>
-#include <nm-dbus-glib-types.h>
+#include <nm-dbus-interface.h>
#include <nm-connection.h>
#include <nm-setting-ip4-config.h>
#include <nm-setting-ip6-config.h>
@@ -53,51 +53,62 @@ construct_basic_items (GSList *list,
return list;
}
+static GSList *_list_append_val_strv (GSList *items, char **values, const char *format, ...) G_GNUC_PRINTF(3, 4);
+
+static GSList *
+_list_append_val_strv (GSList *items, char **values, const char *format, ...)
+{
+ if (!values)
+ g_return_val_if_reached (items);
+
+ /* Only add an item if the list of @values is not empty */
+ if (values[0]) {
+ va_list args;
+ guint i;
+ GString *str = g_string_new (NULL);
+
+ va_start (args, format);
+ g_string_append_vprintf (str, format, args);
+ va_end (args);
+
+ g_string_append (str, values[0]);
+ for (i = 1; values[i]; i++) {
+ g_string_append_c (str, ' ');
+ g_string_append (str, values[i]);
+ }
+ items = g_slist_prepend (items, g_string_free (str, FALSE));
+ }
+
+ /* we take ownership of the values array and free it. */
+ g_strfreev (values);
+ return items;
+}
+
static GSList *
add_domains (GSList *items,
- GHashTable *hash,
+ GVariant *dict,
const char *prefix,
const char four_or_six)
{
- GValue *val;
- char **domains = NULL;
- GString *tmp;
- guint i;
+ GVariant *val;
/* Search domains */
- val = g_hash_table_lookup (hash, "domains");
- if (!val)
- return items;
-
- g_return_val_if_fail (G_VALUE_HOLDS (val, G_TYPE_STRV), items);
-
- domains = (char **) g_value_get_boxed (val);
- if (!domains || !domains[0])
- return items;
-
- tmp = g_string_new (NULL);
- g_string_append_printf (tmp, "%sIP%c_DOMAINS=", prefix, four_or_six);
- for (i = 0; domains[i]; i++) {
- if (i > 0)
- g_string_append_c (tmp, ' ');
- g_string_append (tmp, domains[i]);
+ val = g_variant_lookup_value (dict, "domains", G_VARIANT_TYPE_STRING_ARRAY);
+ if (val) {
+ items = _list_append_val_strv (items, g_variant_dup_strv (val, NULL),
+ "%sIP%c_DOMAINS=", prefix, four_or_six);
+ g_variant_unref (val);
}
- items = g_slist_prepend (items, tmp->str);
- g_string_free (tmp, FALSE);
-
return items;
}
static GSList *
-construct_ip4_items (GSList *items, GHashTable *ip4_config, const char *prefix)
+construct_ip4_items (GSList *items, GVariant *ip4_config, const char *prefix)
{
- GSList *addresses = NULL, *routes = NULL, *iter;
- GArray *dns = NULL, *wins = NULL;
- guint32 num, i;
- GString *tmp;
- GValue *val;
- char str_addr[INET_ADDRSTRLEN];
- char str_gw[INET_ADDRSTRLEN];
+ GPtrArray *addresses, *routes;
+ char *gateway;
+ GVariant *val;
+ int i;
if (ip4_config == NULL)
return items;
@@ -106,114 +117,97 @@ construct_ip4_items (GSList *items, GHashTable *ip4_config, const char *prefix)
prefix = "";
/* IP addresses */
- val = g_hash_table_lookup (ip4_config, "addresses");
- if (val)
- addresses = nm_utils_ip4_addresses_from_gvalue (val);
-
- for (iter = addresses, num = 0; iter; iter = g_slist_next (iter)) {
- NMIP4Address *addr = (NMIP4Address *) iter->data;
- guint32 ip_prefix = nm_ip4_address_get_prefix (addr);
- char *addrtmp;
+ val = g_variant_lookup_value (ip4_config, "addresses", G_VARIANT_TYPE ("aau"));
+ if (val) {
+ addresses = nm_utils_ip4_addresses_from_variant (val, &gateway);
+ if (!gateway)
+ gateway = g_strdup ("0.0.0.0");
+
+ for (i = 0; i < addresses->len; i++) {
+ NMIPAddress *addr = addresses->pdata[i];
+ char *addrtmp;
+
+ addrtmp = g_strdup_printf ("%sIP4_ADDRESS_%d=%s/%d %s", prefix, i,
+ nm_ip_address_get_address (addr),
+ nm_ip_address_get_prefix (addr),
+ gateway);
+ items = g_slist_prepend (items, addrtmp);
+ }
+ if (addresses->len)
+ items = g_slist_prepend (items, g_strdup_printf ("%sIP4_NUM_ADDRESSES=%d", prefix, addresses->len));
- nm_utils_inet4_ntop (nm_ip4_address_get_address (addr), str_addr);
- nm_utils_inet4_ntop (nm_ip4_address_get_gateway (addr), str_gw);
+ /* Write gateway to a separate variable, too. */
+ items = g_slist_prepend (items, g_strdup_printf ("%sIP4_GATEWAY=%s", prefix, gateway));
- addrtmp = g_strdup_printf ("%sIP4_ADDRESS_%d=%s/%d %s", prefix, num++, str_addr, ip_prefix, str_gw);
- items = g_slist_prepend (items, addrtmp);
+ g_ptr_array_unref (addresses);
+ g_free (gateway);
+ g_variant_unref (val);
}
- if (num)
- items = g_slist_prepend (items, g_strdup_printf ("%sIP4_NUM_ADDRESSES=%d", prefix, num));
- if (addresses)
- g_slist_free_full (addresses, (GDestroyNotify) nm_ip4_address_unref);
/* DNS servers */
- val = g_hash_table_lookup (ip4_config, "nameservers");
- if (val && G_VALUE_HOLDS (val, DBUS_TYPE_G_UINT_ARRAY))
- dns = (GArray *) g_value_get_boxed (val);
-
- if (dns && (dns->len > 0)) {
- gboolean first = TRUE;
-
- tmp = g_string_new (NULL);
- g_string_append_printf (tmp, "%sIP4_NAMESERVERS=", prefix);
- for (i = 0; i < dns->len; i++) {
- 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);
+ val = g_variant_lookup_value (ip4_config, "nameservers", G_VARIANT_TYPE ("au"));
+ if (val) {
+ items = _list_append_val_strv (items, nm_utils_ip4_dns_from_variant (val),
+ "%sIP4_NAMESERVERS=", prefix);
+ g_variant_unref (val);
}
/* Search domains */
items = add_domains (items, ip4_config, prefix, '4');
/* WINS servers */
- val = g_hash_table_lookup (ip4_config, "wins-servers");
- if (val && G_VALUE_HOLDS (val, DBUS_TYPE_G_UINT_ARRAY))
- wins = (GArray *) g_value_get_boxed (val);
-
- if (wins && wins->len) {
- gboolean first = TRUE;
-
- tmp = g_string_new (NULL);
- g_string_append_printf (tmp, "%sIP4_WINS_SERVERS=", prefix);
- for (i = 0; i < wins->len; i++) {
- 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);
+ val = g_variant_lookup_value (ip4_config, "wins-servers", G_VARIANT_TYPE ("au"));
+ if (val) {
+ items = _list_append_val_strv (items, nm_utils_ip4_dns_from_variant (val),
+ "%sIP4_WINS_SERVERS=", prefix);
+ g_variant_unref (val);
}
/* Static routes */
- val = g_hash_table_lookup (ip4_config, "routes");
- if (val)
- routes = nm_utils_ip4_routes_from_gvalue (val);
-
- for (iter = routes, num = 0; iter; iter = g_slist_next (iter)) {
- NMIP4Route *route = (NMIP4Route *) iter->data;
- guint32 ip_prefix = nm_ip4_route_get_prefix (route);
- guint32 metric = nm_ip4_route_get_metric (route);
- char *routetmp;
-
- 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);
-
- 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_free_full (routes, (GDestroyNotify) nm_ip4_route_unref);
+ val = g_variant_lookup_value (ip4_config, "routes", G_VARIANT_TYPE ("aau"));
+ if (val) {
+ routes = nm_utils_ip4_routes_from_variant (val);
+
+ for (i = 0; i < routes->len; i++) {
+ NMIPRoute *route = routes->pdata[i];
+ const char *next_hop;
+ char *routetmp;
+
+ next_hop = nm_ip_route_get_next_hop (route);
+ if (!next_hop)
+ next_hop = "0.0.0.0";
+
+ routetmp = g_strdup_printf ("%sIP4_ROUTE_%d=%s/%d %s %u", prefix, i,
+ nm_ip_route_get_dest (route),
+ nm_ip_route_get_prefix (route),
+ next_hop,
+ (guint32) MAX (0, nm_ip_route_get_metric (route)));
+ items = g_slist_prepend (items, routetmp);
+ }
+ items = g_slist_prepend (items, g_strdup_printf ("%sIP4_NUM_ROUTES=%d", prefix, routes->len));
+ g_ptr_array_unref (routes);
+ g_variant_unref (val);
+ } else
+ items = g_slist_prepend (items, g_strdup_printf ("%sIP4_NUM_ROUTES=0", prefix));
return items;
}
static GSList *
-construct_device_dhcp4_items (GSList *items, GHashTable *dhcp4_config)
+construct_device_dhcp4_items (GSList *items, GVariant *dhcp4_config)
{
- GHashTableIter iter;
+ GVariantIter iter;
const char *key, *tmp;
- GValue *val;
+ GVariant *val;
char *ucased;
if (dhcp4_config == NULL)
return items;
- g_hash_table_iter_init (&iter, dhcp4_config);
- while (g_hash_table_iter_next (&iter, (gpointer) &key, (gpointer) &val)) {
+ g_variant_iter_init (&iter, dhcp4_config);
+ while (g_variant_iter_next (&iter, "{&sv}", &key, &val)) {
ucased = g_ascii_strup (key, -1);
- tmp = g_value_get_string (val);
+ tmp = g_variant_get_string (val, NULL);
items = g_slist_prepend (items, g_strdup_printf ("DHCP4_%s=%s", ucased, tmp));
g_free (ucased);
}
@@ -221,14 +215,12 @@ construct_device_dhcp4_items (GSList *items, GHashTable *dhcp4_config)
}
static GSList *
-construct_ip6_items (GSList *items, GHashTable *ip6_config, const char *prefix)
+construct_ip6_items (GSList *items, GVariant *ip6_config, const char *prefix)
{
- GSList *addresses = NULL, *routes = NULL, *dns = NULL, *iter;
- guint32 num;
- GString *tmp;
- GValue *val;
- char str_addr[INET6_ADDRSTRLEN];
- char str_gw[INET6_ADDRSTRLEN];
+ GPtrArray *addresses, *routes;
+ char *gateway = NULL;
+ GVariant *val;
+ int i;
if (ip6_config == NULL)
return items;
@@ -237,93 +229,89 @@ construct_ip6_items (GSList *items, GHashTable *ip6_config, const char *prefix)
prefix = "";
/* IP addresses */
- val = g_hash_table_lookup (ip6_config, "addresses");
- if (val)
- addresses = nm_utils_ip6_addresses_from_gvalue (val);
-
- for (iter = addresses, num = 0; iter; iter = g_slist_next (iter)) {
- NMIP6Address *addr = (NMIP6Address *) iter->data;
- guint32 ip_prefix = nm_ip6_address_get_prefix (addr);
- char *addrtmp;
+ val = g_variant_lookup_value (ip6_config, "addresses", G_VARIANT_TYPE ("a(ayuay)"));
+ if (val) {
+ addresses = nm_utils_ip6_addresses_from_variant (val, &gateway);
+ if (!gateway)
+ gateway = g_strdup ("::");
+
+ for (i = 0; i < addresses->len; i++) {
+ NMIPAddress *addr = addresses->pdata[i];
+ char *addrtmp;
+
+ addrtmp = g_strdup_printf ("%sIP6_ADDRESS_%d=%s/%d %s", prefix, i,
+ nm_ip_address_get_address (addr),
+ nm_ip_address_get_prefix (addr),
+ gateway);
+ items = g_slist_prepend (items, addrtmp);
+ }
+ if (addresses->len)
+ items = g_slist_prepend (items, g_strdup_printf ("%sIP6_NUM_ADDRESSES=%d", prefix, addresses->len));
- nm_utils_inet6_ntop (nm_ip6_address_get_address (addr), str_addr);
- nm_utils_inet6_ntop (nm_ip6_address_get_gateway (addr), str_gw);
+ /* Write gateway to a separate variable, too. */
+ items = g_slist_prepend (items, g_strdup_printf ("%sIP6_GATEWAY=%s", prefix, gateway));
- addrtmp = g_strdup_printf ("%sIP6_ADDRESS_%d=%s/%d %s", prefix, num++, str_addr, ip_prefix, str_gw);
- items = g_slist_prepend (items, addrtmp);
+ g_ptr_array_unref (addresses);
+ g_free (gateway);
+ g_variant_unref (val);
}
- if (num)
- items = g_slist_prepend (items, g_strdup_printf ("%sIP6_NUM_ADDRESSES=%d", prefix, num));
- if (addresses)
- g_slist_free_full (addresses, (GDestroyNotify) nm_ip6_address_unref);
/* DNS servers */
- val = g_hash_table_lookup (ip6_config, "nameservers");
- if (val)
- 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;
-
- 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);
+ val = g_variant_lookup_value (ip6_config, "nameservers", G_VARIANT_TYPE ("aay"));
+ if (val) {
+ items = _list_append_val_strv (items, nm_utils_ip6_dns_from_variant (val),
+ "%sIP6_NAMESERVERS=", prefix);
+ g_variant_unref (val);
}
/* Search domains */
items = add_domains (items, ip6_config, prefix, '6');
/* Static routes */
- val = g_hash_table_lookup (ip6_config, "routes");
- if (val)
- routes = nm_utils_ip6_routes_from_gvalue (val);
-
- for (iter = routes, num = 0; iter; iter = g_slist_next (iter)) {
- NMIP6Route *route = (NMIP6Route *) iter->data;
- guint32 ip_prefix = nm_ip6_route_get_prefix (route);
- guint32 metric = nm_ip6_route_get_metric (route);
- char *routetmp;
-
- 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);
-
- 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);
+ val = g_variant_lookup_value (ip6_config, "routes", G_VARIANT_TYPE ("a(ayuayu)"));
+ if (val) {
+ routes = nm_utils_ip6_routes_from_variant (val);
+
+ for (i = 0; i < routes->len; i++) {
+ NMIPRoute *route = routes->pdata[i];
+ const char *next_hop;
+ char *routetmp;
+
+ next_hop = nm_ip_route_get_next_hop (route);
+ if (!next_hop)
+ next_hop = "::";
+
+ routetmp = g_strdup_printf ("%sIP6_ROUTE_%d=%s/%d %s %u", prefix, i,
+ nm_ip_route_get_dest (route),
+ nm_ip_route_get_prefix (route),
+ next_hop,
+ (guint32) MAX (0, nm_ip_route_get_metric (route)));
+ items = g_slist_prepend (items, routetmp);
+ }
+ if (routes->len)
+ items = g_slist_prepend (items, g_strdup_printf ("%sIP6_NUM_ROUTES=%d", prefix, routes->len));
+ g_ptr_array_unref (routes);
+ g_variant_unref (val);
}
- if (num)
- items = g_slist_prepend (items, g_strdup_printf ("%sIP6_NUM_ROUTES=%d", prefix, num));
- if (routes)
- g_slist_free_full (routes, (GDestroyNotify) nm_ip6_route_unref);
return items;
}
static GSList *
-construct_device_dhcp6_items (GSList *items, GHashTable *dhcp6_config)
+construct_device_dhcp6_items (GSList *items, GVariant *dhcp6_config)
{
- GHashTableIter iter;
+ GVariantIter iter;
const char *key, *tmp;
- GValue *val;
+ GVariant *val;
char *ucased;
if (dhcp6_config == NULL)
return items;
- g_hash_table_iter_init (&iter, dhcp6_config);
- while (g_hash_table_iter_next (&iter, (gpointer) &key, (gpointer) &val)) {
+ g_variant_iter_init (&iter, dhcp6_config);
+ while (g_variant_iter_next (&iter, "{&sv}", &key, &val)) {
ucased = g_ascii_strup (key, -1);
- tmp = g_value_get_string (val);
+ tmp = g_variant_get_string (val, NULL);
items = g_slist_prepend (items, g_strdup_printf ("DHCP6_%s=%s", ucased, tmp));
g_free (ucased);
}
@@ -332,26 +320,26 @@ construct_device_dhcp6_items (GSList *items, GHashTable *dhcp6_config)
char **
nm_dispatcher_utils_construct_envp (const char *action,
- GHashTable *connection_hash,
- GHashTable *connection_props,
- GHashTable *device_props,
- GHashTable *device_ip4_props,
- GHashTable *device_ip6_props,
- GHashTable *device_dhcp4_props,
- GHashTable *device_dhcp6_props,
+ GVariant *connection_dict,
+ GVariant *connection_props,
+ GVariant *device_props,
+ GVariant *device_ip4_props,
+ GVariant *device_ip6_props,
+ GVariant *device_dhcp4_props,
+ GVariant *device_dhcp6_props,
const char *vpn_ip_iface,
- GHashTable *vpn_ip4_props,
- GHashTable *vpn_ip6_props,
+ GVariant *vpn_ip4_props,
+ GVariant *vpn_ip6_props,
char **out_iface)
{
const char *iface = NULL, *ip_iface = NULL;
const char *uuid = NULL, *id = NULL, *path;
NMDeviceState dev_state = NM_DEVICE_STATE_UNKNOWN;
- GValue *value;
+ GVariant *value;
char **envp = NULL, *path_item;
GSList *items = NULL, *iter;
guint i;
- GHashTable *con_setting_hash;
+ GVariant *con_setting;
g_return_val_if_fail (action != NULL, NULL);
g_return_val_if_fail (out_iface != NULL, NULL);
@@ -367,69 +355,67 @@ nm_dispatcher_utils_construct_envp (const char *action,
if (vpn_ip_iface && !strlen (vpn_ip_iface))
vpn_ip_iface = NULL;
- con_setting_hash = g_hash_table_lookup (connection_hash, NM_SETTING_CONNECTION_SETTING_NAME);
- if (!con_setting_hash) {
- g_warning ("Failed to read connection setting");
- return NULL;
- }
-
- value = g_hash_table_lookup (con_setting_hash, NM_SETTING_CONNECTION_UUID);
- if (!value || !G_VALUE_HOLDS (value, G_TYPE_STRING)) {
- g_warning ("Connection hash did not contain the UUID");
- return NULL;
- }
- uuid = g_value_get_string (value);
-
- value = g_hash_table_lookup (con_setting_hash, NM_SETTING_CONNECTION_ID);
- if (!value || !G_VALUE_HOLDS (value, G_TYPE_STRING)) {
- g_warning ("Connection hash did not contain the ID");
- return NULL;
- }
- id = g_value_get_string (value);
-
/* interface name */
- value = g_hash_table_lookup (device_props, NMD_DEVICE_PROPS_INTERFACE);
- if (!value || !G_VALUE_HOLDS_STRING (value)) {
+ if (!g_variant_lookup (device_props, NMD_DEVICE_PROPS_INTERFACE, "&s", &iface)) {
g_warning ("Missing or invalid required value " NMD_DEVICE_PROPS_INTERFACE "!");
return NULL;
}
- iface = g_value_get_string (value);
- if (iface && !strlen (iface))
+ if (!*iface)
iface = NULL;
/* IP interface name */
- value = g_hash_table_lookup (device_props, NMD_DEVICE_PROPS_IP_INTERFACE);
+ value = g_variant_lookup_value (device_props, NMD_DEVICE_PROPS_IP_INTERFACE, NULL);
if (value) {
- if (!G_VALUE_HOLDS_STRING (value)) {
- g_warning ("Invalid required value " NMD_DEVICE_PROPS_IP_INTERFACE "!");
+ if (!g_variant_is_of_type (value, G_VARIANT_TYPE_STRING)) {
+ g_warning ("Invalid value " NMD_DEVICE_PROPS_IP_INTERFACE "!");
return NULL;
}
- ip_iface = g_value_get_string (value);
+ g_variant_unref (value);
+ g_variant_lookup (device_props, NMD_DEVICE_PROPS_IP_INTERFACE, "&s", &ip_iface);
}
/* Device type */
- value = g_hash_table_lookup (device_props, NMD_DEVICE_PROPS_TYPE);
- if (!value || !G_VALUE_HOLDS_UINT (value)) {
+ if (!g_variant_lookup (device_props, NMD_DEVICE_PROPS_TYPE, "u", NULL)) {
g_warning ("Missing or invalid required value " NMD_DEVICE_PROPS_TYPE "!");
return NULL;
}
/* Device state */
- value = g_hash_table_lookup (device_props, NMD_DEVICE_PROPS_STATE);
- if (!value || !G_VALUE_HOLDS_UINT (value)) {
+ value = g_variant_lookup_value (device_props, NMD_DEVICE_PROPS_STATE, G_VARIANT_TYPE_UINT32);
+ if (!value) {
g_warning ("Missing or invalid required value " NMD_DEVICE_PROPS_STATE "!");
return NULL;
}
- dev_state = g_value_get_uint (value);
+ dev_state = g_variant_get_uint32 (value);
+ g_variant_unref (value);
/* device itself */
- value = g_hash_table_lookup (device_props, NMD_DEVICE_PROPS_PATH);
- if (!value || (G_VALUE_TYPE (value) != DBUS_TYPE_G_OBJECT_PATH)) {
+ if (!g_variant_lookup (device_props, NMD_DEVICE_PROPS_PATH, "o", NULL)) {
g_warning ("Missing or invalid required value " NMD_DEVICE_PROPS_PATH "!");
return NULL;
}
+ /* UUID and ID */
+ con_setting = g_variant_lookup_value (connection_dict, NM_SETTING_CONNECTION_SETTING_NAME, NM_VARIANT_TYPE_SETTING);
+ if (!con_setting) {
+ g_warning ("Failed to read connection setting");
+ return NULL;
+ }
+
+ if (!g_variant_lookup (con_setting, NM_SETTING_CONNECTION_UUID, "&s", &uuid)) {
+ g_warning ("Connection hash did not contain the UUID");
+ g_variant_unref (con_setting);
+ return NULL;
+ }
+
+ if (!g_variant_lookup (con_setting, NM_SETTING_CONNECTION_ID, "&s", &id)) {
+ g_warning ("Connection hash did not contain the ID");
+ g_variant_unref (con_setting);
+ return NULL;
+ }
+
items = construct_basic_items (items, uuid, id, iface, ip_iface);
+ g_variant_unref (con_setting);
/* Device it's aren't valid if the device isn't activated */
if (iface && (dev_state == NM_DEVICE_STATE_ACTIVATED)) {
diff --git a/callouts/nm-dispatcher-utils.h b/callouts/nm-dispatcher-utils.h
index 33202e0eb..665a0d4ea 100644
--- a/callouts/nm-dispatcher-utils.h
+++ b/callouts/nm-dispatcher-utils.h
@@ -18,24 +18,24 @@
* Copyright (C) 2008 - 2011 Red Hat, Inc.
*/
-#ifndef NM_DISPATCHER_UTILS_H
-#define NM_DISPATCHER_UTILS_H
+#ifndef __NETWORKMANAGER_DISPATCHER_UTILS_H__
+#define __NETWORKMANAGER_DISPATCHER_UTILS_H__
#include <glib.h>
char **
nm_dispatcher_utils_construct_envp (const char *action,
- GHashTable *connection_hash,
- GHashTable *connection_props,
- GHashTable *device_props,
- GHashTable *device_ip4_props,
- GHashTable *device_ip6_props,
- GHashTable *device_dhcp4_props,
- GHashTable *device_dhcp6_props,
+ GVariant *connection_dict,
+ GVariant *connection_props,
+ GVariant *device_props,
+ GVariant *device_ip4_props,
+ GVariant *device_ip6_props,
+ GVariant *device_dhcp4_props,
+ GVariant *device_dhcp6_props,
const char *vpn_ip_iface,
- GHashTable *vpn_ip4_props,
- GHashTable *vpn_ip6_props,
+ GVariant *vpn_ip4_props,
+ GVariant *vpn_ip6_props,
char **out_iface);
-#endif /* NM_DISPATCHER_UTILS_H */
+#endif /* __NETWORKMANAGER_DISPATCHER_UTILS_H__ */
diff --git a/callouts/nm-dispatcher.c b/callouts/nm-dispatcher.c
index 733af511f..0cd2531dd 100644
--- a/callouts/nm-dispatcher.c
+++ b/callouts/nm-dispatcher.c
@@ -18,6 +18,8 @@
* Copyright (C) 2008 - 2012 Red Hat, Inc.
*/
+#include "config.h"
+
#include <syslog.h>
#include <stdio.h>
#include <unistd.h>
@@ -32,17 +34,18 @@
#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-api.h"
#include "nm-dispatcher-utils.h"
#include "nm-glib-compat.h"
+#include "nmdbus-dispatcher.h"
+
static GMainLoop *loop = NULL;
static gboolean debug = FALSE;
+static gboolean persist = FALSE;
+static guint quit_id;
typedef struct Request Request;
@@ -50,10 +53,10 @@ typedef struct {
GObject parent;
/* Private data */
+ NMDBusDispatcher *dbus_dispatcher;
+
Request *current_request;
GQueue *pending_requests;
- guint quit_id;
- gboolean persist;
} Handler;
typedef struct {
@@ -68,28 +71,30 @@ GType handler_get_type (void);
G_DEFINE_TYPE(Handler, handler, G_TYPE_OBJECT)
-static void
-impl_dispatch (Handler *h,
- const char *action,
- GHashTable *connection_hash,
- GHashTable *connection_props,
- GHashTable *device_props,
- GHashTable *device_ip4_props,
- GHashTable *device_ip6_props,
- GHashTable *device_dhcp4_props,
- GHashTable *device_dhcp6_props,
+static gboolean
+handle_action (NMDBusDispatcher *dbus_dispatcher,
+ GDBusMethodInvocation *context,
+ const char *str_action,
+ GVariant *connection_dict,
+ GVariant *connection_props,
+ GVariant *device_props,
+ GVariant *device_ip4_props,
+ GVariant *device_ip6_props,
+ GVariant *device_dhcp4_props,
+ GVariant *device_dhcp6_props,
const char *vpn_ip_iface,
- GHashTable *vpn_ip4_props,
- GHashTable *vpn_ip6_props,
+ GVariant *vpn_ip4_props,
+ GVariant *vpn_ip6_props,
gboolean request_debug,
- DBusGMethodInvocation *context);
-
-#include "nm-dispatcher-glue.h"
-
+ gpointer user_data);
static void
handler_init (Handler *h)
{
+ h->pending_requests = g_queue_new ();
+ h->dbus_dispatcher = nmdbus_dispatcher_skeleton_new ();
+ g_signal_connect (h->dbus_dispatcher, "handle-action",
+ G_CALLBACK (handle_action), h);
}
static void
@@ -111,7 +116,7 @@ typedef struct {
struct Request {
Handler *handler;
- DBusGMethodInvocation *context;
+ GDBusMethodInvocation *context;
char *action;
char *iface;
char **envp;
@@ -152,20 +157,20 @@ quit_timeout_cb (gpointer user_data)
}
static void
-quit_timeout_cancel (Handler *h)
+quit_timeout_cancel (void)
{
- if (h->quit_id) {
- g_source_remove (h->quit_id);
- h->quit_id = 0;
+ if (quit_id) {
+ g_source_remove (quit_id);
+ quit_id = 0;
}
}
static void
-quit_timeout_reschedule (Handler *h)
+quit_timeout_reschedule (void)
{
- quit_timeout_cancel (h);
- if (!h->persist)
- h->quit_id = g_timeout_add_seconds (10, quit_timeout_cb, NULL);
+ quit_timeout_cancel ();
+ if (!persist)
+ quit_id = g_timeout_add_seconds (10, quit_timeout_cb, NULL);
}
static void
@@ -191,7 +196,7 @@ next_request (Handler *h)
}
h->current_request = NULL;
- quit_timeout_reschedule (h);
+ quit_timeout_reschedule ();
}
static gboolean
@@ -199,8 +204,8 @@ next_script (gpointer user_data)
{
Request *request = user_data;
Handler *h = request->handler;
- GPtrArray *results;
- GValueArray *item;
+ GVariantBuilder results;
+ GVariant *ret;
guint i;
request->idx++;
@@ -210,36 +215,18 @@ next_script (gpointer user_data)
}
/* All done */
- results = g_ptr_array_new_full (request->scripts->len, (GDestroyNotify) g_value_array_free);
+ g_variant_builder_init (&results, G_VARIANT_TYPE ("a(sus)"));
for (i = 0; i < request->scripts->len; i++) {
ScriptInfo *script = g_ptr_array_index (request->scripts, i);
- GValue elt = G_VALUE_INIT;
-
- item = g_value_array_new (3);
-
- /* Script path */
- g_value_init (&elt, G_TYPE_STRING);
- g_value_set_string (&elt, script->script);
- g_value_array_append (item, &elt);
- g_value_unset (&elt);
-
- /* Result */
- g_value_init (&elt, G_TYPE_UINT);
- g_value_set_uint (&elt, script->result);
- g_value_array_append (item, &elt);
- g_value_unset (&elt);
- /* Error */
- g_value_init (&elt, G_TYPE_STRING);
- g_value_set_string (&elt, script->error ? script->error : "");
- g_value_array_append (item, &elt);
- g_value_unset (&elt);
-
- g_ptr_array_add (results, item);
+ g_variant_builder_add (&results, "(sus)",
+ script->script,
+ script->result,
+ script->error ? script->error : "");
}
- dbus_g_method_return (request->context, results);
- g_ptr_array_unref (results);
+ ret = g_variant_new ("(a(sus))", &results);
+ g_dbus_method_invocation_return_value (request->context, ret);
if (request->debug) {
if (request->iface)
@@ -309,7 +296,7 @@ script_timeout_cb (gpointer user_data)
if (kill (script->pid, 0) == 0)
kill (script->pid, SIGKILL);
- waitpid (script->pid, NULL, 0);
+ (void) waitpid (script->pid, NULL, 0);
script->error = g_strdup_printf ("Script '%s' timed out.", script->script);
script->result = DISPATCH_RESULT_TIMEOUT;
@@ -470,22 +457,24 @@ find_scripts (const char *str_action)
return sorted;
}
-static void
-impl_dispatch (Handler *h,
+static gboolean
+handle_action (NMDBusDispatcher *dbus_dispatcher,
+ GDBusMethodInvocation *context,
const char *str_action,
- GHashTable *connection_hash,
- GHashTable *connection_props,
- GHashTable *device_props,
- GHashTable *device_ip4_props,
- GHashTable *device_ip6_props,
- GHashTable *device_dhcp4_props,
- GHashTable *device_dhcp6_props,
+ GVariant *connection_dict,
+ GVariant *connection_props,
+ GVariant *device_props,
+ GVariant *device_ip4_props,
+ GVariant *device_ip6_props,
+ GVariant *device_dhcp4_props,
+ GVariant *device_dhcp6_props,
const char *vpn_ip_iface,
- GHashTable *vpn_ip4_props,
- GHashTable *vpn_ip6_props,
+ GVariant *vpn_ip4_props,
+ GVariant *vpn_ip6_props,
gboolean request_debug,
- DBusGMethodInvocation *context)
+ gpointer user_data)
{
+ Handler *h = user_data;
GSList *sorted_scripts = NULL;
GSList *iter;
Request *request;
@@ -495,11 +484,14 @@ impl_dispatch (Handler *h,
sorted_scripts = find_scripts (str_action);
if (!sorted_scripts) {
- dbus_g_method_return (context, g_ptr_array_new ());
- return;
+ GVariant *results;
+
+ results = g_variant_new_array (G_VARIANT_TYPE ("(sus)"), NULL, 0);
+ g_dbus_method_invocation_return_value (context, g_variant_new ("(@a(sus))", results));
+ return TRUE;
}
- quit_timeout_cancel (h);
+ quit_timeout_cancel ();
request = g_malloc0 (sizeof (*request));
request->handler = h;
@@ -508,7 +500,7 @@ impl_dispatch (Handler *h,
request->action = g_strdup (str_action);
request->envp = nm_dispatcher_utils_construct_envp (str_action,
- connection_hash,
+ connection_dict,
connection_props,
device_props,
device_ip4_props,
@@ -543,76 +535,35 @@ impl_dispatch (Handler *h,
g_queue_push_tail (h->pending_requests, request);
else
start_request (request);
+
+ return TRUE;
}
+static gboolean ever_acquired_name = FALSE;
+
static void
-destroy_cb (DBusGProxy *proxy, gpointer user_data)
+on_name_acquired (GDBusConnection *connection,
+ const char *name,
+ gpointer user_data)
{
- g_warning ("Disconnected from the system bus, exiting.");
- g_main_loop_quit (loop);
+ ever_acquired_name = TRUE;
}
-static DBusGConnection *
-dbus_init (void)
+static void
+on_name_lost (GDBusConnection *connection,
+ const char *name,
+ gpointer user_data)
{
- GError *error = NULL;
- DBusGConnection *bus;
- DBusConnection *connection;
- DBusGProxy *proxy;
- int result;
-
- dbus_connection_set_change_sigpipe (TRUE);
-
- bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
- if (!bus) {
- g_warning ("Could not get the system bus. Make sure "
- "the message bus daemon is running! Message: %s",
- error->message);
- g_error_free (error);
- return NULL;
- }
-
- /* Clean up nicely if we get kicked off the bus */
- connection = dbus_g_connection_get_connection (bus);
- dbus_connection_set_exit_on_disconnect (connection, FALSE);
-
- proxy = dbus_g_proxy_new_for_name (bus,
- "org.freedesktop.DBus",
- "/org/freedesktop/DBus",
- "org.freedesktop.DBus");
- if (!proxy) {
- g_warning ("Could not create the DBus proxy!");
- goto error;
- }
-
- g_signal_connect (proxy, "destroy", G_CALLBACK (destroy_cb), NULL);
-
- if (!dbus_g_proxy_call (proxy, "RequestName", &error,
- G_TYPE_STRING, NM_DISPATCHER_DBUS_SERVICE,
- G_TYPE_UINT, DBUS_NAME_FLAG_DO_NOT_QUEUE,
- G_TYPE_INVALID,
- G_TYPE_UINT, &result,
- G_TYPE_INVALID)) {
- g_warning ("Could not acquire the " NM_DISPATCHER_DBUS_SERVICE " service.\n"
- " Message: '%s'", error->message);
- g_error_free (error);
- goto error;
- }
-
- if (result != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) {
- g_warning ("Could not acquire the " NM_DISPATCHER_DBUS_SERVICE " service "
- "as it is already taken. Result: %d",
- result);
- goto error;
+ if (!connection) {
+ g_warning ("Could not get the system bus. Make sure the message bus daemon is running!");
+ exit (1);
+ } else if (!ever_acquired_name) {
+ g_warning ("Could not acquire the " NM_DISPATCHER_DBUS_SERVICE " service.");
+ exit (1);
+ } else {
+ g_message ("Lost the " NM_DISPATCHER_DBUS_SERVICE " name. Exiting");
+ exit (0);
}
-
- return bus;
-
-error:
- if (proxy)
- g_object_unref (proxy);
- dbus_g_connection_unref (bus);
- return NULL;
}
static void
@@ -681,8 +632,7 @@ main (int argc, char **argv)
{
GOptionContext *opt_ctx;
GError *error = NULL;
- gboolean persist = FALSE;
- DBusGConnection *bus;
+ GDBusConnection *bus;
Handler *handler;
GOptionEntry entries[] = {
@@ -715,31 +665,41 @@ main (int argc, char **argv)
loop = g_main_loop_new (NULL, FALSE);
- bus = dbus_init ();
- if (!bus)
+ bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error);
+ if (!bus) {
+ g_warning ("Could not get the system bus (%s). Make sure the message bus daemon is running!",
+ error->message);
+ g_error_free (error);
return 1;
+ }
handler = g_object_new (HANDLER_TYPE, NULL);
- if (!handler)
+ g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (handler->dbus_dispatcher),
+ bus,
+ NM_DISPATCHER_DBUS_PATH,
+ &error);
+ if (error) {
+ g_warning ("Could not export Dispatcher D-Bus interface: %s", error->message);
+ g_error_free (error);
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,
- NM_DISPATCHER_DBUS_PATH,
- G_OBJECT (handler));
+ g_bus_own_name_on_connection (bus,
+ NM_DISPATCHER_DBUS_SERVICE,
+ G_BUS_NAME_OWNER_FLAGS_NONE,
+ on_name_acquired,
+ on_name_lost,
+ NULL, NULL);
+ g_object_unref (bus);
if (!persist)
- handler->quit_id = g_timeout_add_seconds (10, quit_timeout_cb, NULL);
+ quit_id = g_timeout_add_seconds (10, quit_timeout_cb, NULL);
g_main_loop_run (loop);
g_queue_free (handler->pending_requests);
g_object_unref (handler);
- dbus_g_connection_unref (bus);
-
if (!debug)
logging_shutdown ();
diff --git a/callouts/nm-dispatcher.xml b/callouts/nm-dispatcher.xml
index 1ae138b35..b2c4a21ae 100644
--- a/callouts/nm-dispatcher.xml
+++ b/callouts/nm-dispatcher.xml
@@ -2,15 +2,13 @@
<node name="/" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
<interface name="org.freedesktop.nm_dispatcher">
+ <annotation name="org.gtk.GDBus.C.Name" value="Dispatcher"/>
<method name="Action">
<tp:docstring>
INTERNAL; not public API. Perform an action.
</tp:docstring>
- <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_dispatch"/>
- <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
-
<arg name="action" type="s" direction="in">
<tp:docstring>
The action being performed.
diff --git a/callouts/tests/Makefile.am b/callouts/tests/Makefile.am
index de4b5f529..f8fd82b7e 100644
--- a/callouts/tests/Makefile.am
+++ b/callouts/tests/Makefile.am
@@ -2,11 +2,13 @@ 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)/libnm-core \
+ -I$(top_builddir)/libnm-core \
-I$(top_srcdir)/callouts \
+ -I$(top_builddir)/callouts \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ -DSRCDIR=\"$(abs_srcdir)\" \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS)
@@ -19,20 +21,19 @@ test_dispatcher_envp_SOURCES = \
test-dispatcher-envp.c
test_dispatcher_envp_LDADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
+ $(top_builddir)/libnm/libnm.la \
$(top_builddir)/callouts/libtest-dispatcher-envp.la \
$(GLIB_LIBS) \
$(DBUS_LIBS)
###########################################
-check-local: test-dispatcher-envp
- $(abs_builddir)/test-dispatcher-envp $(abs_srcdir)
+TESTS = test-dispatcher-envp
+
+endif
EXTRA_DIST= \
dispatcher-old-down \
dispatcher-old-up \
dispatcher-old-vpn-down \
dispatcher-old-vpn-up
-
-endif
diff --git a/callouts/tests/Makefile.in b/callouts/tests/Makefile.in
index 25255b59e..5372e3528 100644
--- a/callouts/tests/Makefile.in
+++ b/callouts/tests/Makefile.in
@@ -79,6 +79,7 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
@ENABLE_TESTS_TRUE@noinst_PROGRAMS = test-dispatcher-envp$(EXEEXT)
+@ENABLE_TESTS_TRUE@TESTS = test-dispatcher-envp$(EXEEXT)
subdir = callouts/tests
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
@@ -109,7 +110,7 @@ am__test_dispatcher_envp_SOURCES_DIST = test-dispatcher-envp.c
test_dispatcher_envp_OBJECTS = $(am_test_dispatcher_envp_OBJECTS)
am__DEPENDENCIES_1 =
@ENABLE_TESTS_TRUE@test_dispatcher_envp_DEPENDENCIES = \
-@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-util/libnm-util.la \
+@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm/libnm.la \
@ENABLE_TESTS_TRUE@ $(top_builddir)/callouts/libtest-dispatcher-envp.la \
@ENABLE_TESTS_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
AM_V_lt = $(am__v_lt_@AM_V@)
@@ -176,6 +177,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@
@@ -186,6 +209,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -309,6 +334,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -328,6 +354,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -354,7 +381,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -435,11 +462,13 @@ 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-core \
+@ENABLE_TESTS_TRUE@ -I$(top_builddir)/libnm-core \
@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/callouts \
+@ENABLE_TESTS_TRUE@ -I$(top_builddir)/callouts \
+@ENABLE_TESTS_TRUE@ -DNETWORKMANAGER_COMPILATION \
@ENABLE_TESTS_TRUE@ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+@ENABLE_TESTS_TRUE@ -DSRCDIR=\"$(abs_srcdir)\" \
@ENABLE_TESTS_TRUE@ $(GLIB_CFLAGS) \
@ENABLE_TESTS_TRUE@ $(DBUS_CFLAGS)
@@ -449,16 +478,16 @@ with_valgrind = @with_valgrind@
@ENABLE_TESTS_TRUE@ test-dispatcher-envp.c
@ENABLE_TESTS_TRUE@test_dispatcher_envp_LDADD = \
-@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-util/libnm-util.la \
+@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm/libnm.la \
@ENABLE_TESTS_TRUE@ $(top_builddir)/callouts/libtest-dispatcher-envp.la \
@ENABLE_TESTS_TRUE@ $(GLIB_LIBS) \
@ENABLE_TESTS_TRUE@ $(DBUS_LIBS)
-@ENABLE_TESTS_TRUE@EXTRA_DIST = \
-@ENABLE_TESTS_TRUE@ dispatcher-old-down \
-@ENABLE_TESTS_TRUE@ dispatcher-old-up \
-@ENABLE_TESTS_TRUE@ dispatcher-old-vpn-down \
-@ENABLE_TESTS_TRUE@ dispatcher-old-vpn-up
+EXTRA_DIST = \
+ dispatcher-old-down \
+ dispatcher-old-up \
+ dispatcher-old-vpn-down \
+ dispatcher-old-vpn-up
all: all-am
@@ -595,6 +624,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'`; \
@@ -625,9 +747,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:
@@ -734,7 +855,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 \
@@ -749,11 +870,6 @@ uninstall-am:
tags tags-am uninstall uninstall-am
-###########################################
-
-@ENABLE_TESTS_TRUE@check-local: test-dispatcher-envp
-@ENABLE_TESTS_TRUE@ $(abs_builddir)/test-dispatcher-envp $(abs_srcdir)
-
# 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/callouts/tests/dispatcher-old-up b/callouts/tests/dispatcher-old-up
index a35812eeb..53f35ace6 100644
--- a/callouts/tests/dispatcher-old-up
+++ b/callouts/tests/dispatcher-old-up
@@ -39,6 +39,7 @@ DEVICE_IP_IFACE=wlan0
IP4_ADDRESS_0=192.168.1.119/24 192.168.1.1
IP4_NUM_ADDRESSES=1
IP4_NAMESERVERS=68.87.77.134 68.87.72.134 192.168.1.1
+IP4_GATEWAY=192.168.1.1
IP4_DOMAINS=hsd1.mn.comcast.net.
IP4_NUM_ROUTES=0
DHCP4_NETBIOS_NAME_SERVERS=0.0.0.0
diff --git a/callouts/tests/dispatcher-old-vpn-down b/callouts/tests/dispatcher-old-vpn-down
index 4fab5e956..1f1cf2b64 100644
--- a/callouts/tests/dispatcher-old-vpn-down
+++ b/callouts/tests/dispatcher-old-vpn-down
@@ -39,6 +39,7 @@ DEVICE_IP_IFACE=tun0
IP4_ADDRESS_0=192.168.1.119/24 192.168.1.1
IP4_NUM_ADDRESSES=1
IP4_NAMESERVERS=68.87.77.134 68.87.72.134 192.168.1.1
+IP4_GATEWAY=192.168.1.1
IP4_DOMAINS=hsd1.mn.comcast.net.
IP4_NUM_ROUTES=0
DHCP4_NETBIOS_NAME_SERVERS=0.0.0.0
diff --git a/callouts/tests/dispatcher-old-vpn-up b/callouts/tests/dispatcher-old-vpn-up
index 3c350dbf0..7cda8a69a 100644
--- a/callouts/tests/dispatcher-old-vpn-up
+++ b/callouts/tests/dispatcher-old-vpn-up
@@ -39,6 +39,7 @@ DEVICE_IP_IFACE=tun0
IP4_ADDRESS_0=192.168.1.119/24 192.168.1.1
IP4_NUM_ADDRESSES=1
IP4_NAMESERVERS=68.87.77.134 68.87.72.134 192.168.1.1
+IP4_GATEWAY=192.168.1.1
IP4_DOMAINS=hsd1.mn.comcast.net.
IP4_NUM_ROUTES=0
DHCP4_NETBIOS_NAME_SERVERS=0.0.0.0
diff --git a/callouts/tests/test-dispatcher-envp.c b/callouts/tests/test-dispatcher-envp.c
index a91ae2b27..460174b23 100644
--- a/callouts/tests/test-dispatcher-envp.c
+++ b/callouts/tests/test-dispatcher-envp.c
@@ -18,117 +18,24 @@
*
*/
-#include <config.h>
+#include "config.h"
+
#include <arpa/inet.h>
#include <stdlib.h>
#include <string.h>
#include <glib.h>
#include <glib-object.h>
-#include "nm-connection.h"
-#include "nm-setting-connection.h"
+#include "nm-core-internal.h"
#include "nm-dispatcher-utils.h"
-#include "nm-dbus-glib-types.h"
#include "nm-dispatcher-api.h"
-#include "nm-utils.h"
/*******************************************/
-static void
-value_destroy (gpointer data)
-{
- GValue *value = (GValue *) data;
-
- g_value_unset (value);
- g_slice_free (GValue, value);
-}
-
-static GHashTable *
-value_hash_create (void)
-{
- return g_hash_table_new_full (g_str_hash, g_str_equal, g_free, value_destroy);
-}
-
-static void
-value_hash_add (GHashTable *hash,
- const char *key,
- GValue *value)
-{
- g_hash_table_insert (hash, g_strdup (key), value);
-}
-
-static void
-value_hash_add_string (GHashTable *hash,
- const char *key,
- const char *str)
-{
- GValue *value;
-
- value = g_slice_new0 (GValue);
- g_value_init (value, G_TYPE_STRING);
- g_value_set_string (value, str);
-
- value_hash_add (hash, key, value);
-}
-
-static void
-value_hash_add_object_path (GHashTable *hash,
- const char *key,
- const char *op)
-{
- GValue *value;
-
- value = g_slice_new0 (GValue);
- g_value_init (value, DBUS_TYPE_G_OBJECT_PATH);
- g_value_set_boxed (value, op);
-
- value_hash_add (hash, key, value);
-}
-
-static void
-value_hash_add_uint (GHashTable *hash,
- const char *key,
- guint32 val)
-{
- GValue *value;
-
- value = g_slice_new0 (GValue);
- g_value_init (value, G_TYPE_UINT);
- g_value_set_uint (value, val);
-
- value_hash_add (hash, key, value);
-}
-
-static void
-value_hash_add_strv (GHashTable *hash,
- const char *key,
- char **strv)
-{
- GValue *value;
-
- value = g_slice_new0 (GValue);
- g_value_init (value, G_TYPE_STRV);
- g_value_take_boxed (value, strv);
- value_hash_add (hash, key, value);
-}
-
-static void
-value_hash_add_uint_array (GHashTable *hash,
- const char *key,
- GArray *array)
-{
- GValue *value;
-
- value = g_slice_new0 (GValue);
- g_value_init (value, DBUS_TYPE_G_UINT_ARRAY);
- g_value_take_boxed (value, array);
- value_hash_add (hash, key, value);
-}
-
static gboolean
parse_main (GKeyFile *kf,
- GHashTable **out_con_hash,
- GHashTable **out_con_props,
+ GVariant **out_con_dict,
+ GVariant **out_con_props,
char **out_expected_iface,
char **out_action,
char **out_vpn_ip_iface,
@@ -137,6 +44,7 @@ parse_main (GKeyFile *kf,
char *uuid, *id;
NMConnection *connection;
NMSettingConnection *s_con;
+ GVariantBuilder props;
*out_expected_iface = g_key_file_get_string (kf, "main", "expected-iface", error);
if (*out_expected_iface == NULL)
@@ -155,7 +63,7 @@ parse_main (GKeyFile *kf,
if (id == NULL)
return FALSE;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
g_assert (connection);
s_con = (NMSettingConnection *) nm_setting_connection_new ();
g_assert (s_con);
@@ -167,57 +75,72 @@ parse_main (GKeyFile *kf,
g_free (id);
nm_connection_add_setting (connection, NM_SETTING (s_con));
- *out_con_hash = nm_connection_to_hash (connection, NM_SETTING_HASH_FLAG_ALL);
+ *out_con_dict = nm_connection_to_dbus (connection, NM_CONNECTION_SERIALIZE_ALL);
g_object_unref (connection);
- *out_con_props = value_hash_create ();
- value_hash_add_object_path (*out_con_props, "connection-path", "/org/freedesktop/NetworkManager/Connections/5");
+ g_variant_builder_init (&props, G_VARIANT_TYPE ("a{sv}"));
+ g_variant_builder_add (&props, "{sv}",
+ "connection-path",
+ g_variant_new_object_path ("/org/freedesktop/NetworkManager/Connections/5"));
+ *out_con_props = g_variant_builder_end (&props);
return TRUE;
}
static gboolean
-parse_device (GKeyFile *kf, GHashTable **out_device_props, GError **error)
+parse_device (GKeyFile *kf, GVariant **out_device_props, GError **error)
{
+ GVariantBuilder props;
char *tmp;
gint i;
- *out_device_props = value_hash_create ();
+ g_variant_builder_init (&props, G_VARIANT_TYPE ("a{sv}"));
i = g_key_file_get_integer (kf, "device", "state", error);
if (i == 0)
return FALSE;
- value_hash_add_uint (*out_device_props, NMD_DEVICE_PROPS_STATE, (guint) i);
+ g_variant_builder_add (&props, "{sv}",
+ NMD_DEVICE_PROPS_STATE,
+ g_variant_new_uint32 (i));
i = g_key_file_get_integer (kf, "device", "type", error);
if (i == 0)
return FALSE;
- value_hash_add_uint (*out_device_props, NMD_DEVICE_PROPS_TYPE, (guint) i);
+ g_variant_builder_add (&props, "{sv}",
+ NMD_DEVICE_PROPS_TYPE,
+ g_variant_new_uint32 (i));
tmp = g_key_file_get_string (kf, "device", "interface", error);
if (tmp == NULL)
return FALSE;
- value_hash_add_string (*out_device_props, NMD_DEVICE_PROPS_INTERFACE, tmp);
+ g_variant_builder_add (&props, "{sv}",
+ NMD_DEVICE_PROPS_INTERFACE,
+ g_variant_new_string (tmp));
g_free (tmp);
tmp = g_key_file_get_string (kf, "device", "ip-interface", error);
if (tmp == NULL)
return FALSE;
- value_hash_add_string (*out_device_props, NMD_DEVICE_PROPS_IP_INTERFACE, tmp);
+ g_variant_builder_add (&props, "{sv}",
+ NMD_DEVICE_PROPS_IP_INTERFACE,
+ g_variant_new_string (tmp));
g_free (tmp);
tmp = g_key_file_get_string (kf, "device", "path", error);
if (tmp == NULL)
return FALSE;
- value_hash_add_object_path (*out_device_props, NMD_DEVICE_PROPS_PATH, tmp);
+ g_variant_builder_add (&props, "{sv}",
+ NMD_DEVICE_PROPS_PATH,
+ g_variant_new_object_path (tmp));
g_free (tmp);
+ *out_device_props = g_variant_builder_end (&props);
return TRUE;
}
static gboolean
add_uint_array (GKeyFile *kf,
- GHashTable *props,
+ GVariantBuilder *props,
const char *section,
const char *key,
GError **error)
@@ -244,21 +167,26 @@ add_uint_array (GKeyFile *kf,
g_array_append_val (items, addr);
}
}
- value_hash_add_uint_array (props, key, items);
+ g_variant_builder_add (props, "{sv}", key,
+ g_variant_new_fixed_array (G_VARIANT_TYPE_UINT32,
+ items->data, items->len,
+ sizeof (guint32)));
+ g_array_unref (items);
}
g_strfreev (split);
return TRUE;
}
static gboolean
-parse_ip4 (GKeyFile *kf, GHashTable **out_props, const char *section, GError **error)
+parse_ip4 (GKeyFile *kf, GVariant **out_props, const char *section, GError **error)
{
+ GVariantBuilder props;
char *tmp;
char **split, **iter;
- GSList *list;
- GValue *val;
+ GPtrArray *addresses, *routes;
+ const char *gateway = NULL;
- *out_props = value_hash_create ();
+ g_variant_builder_init (&props, G_VARIANT_TYPE ("a{sv}"));
/* search domains */
/* Use char** for domains. (DBUS_TYPE_G_ARRAY_OF_STRING of NMIP4Config
@@ -273,14 +201,15 @@ parse_ip4 (GKeyFile *kf, GHashTable **out_props, const char *section, GError **e
if (g_strv_length (split) > 0) {
for (iter = split; iter && *iter; iter++)
g_strstrip (*iter);
- value_hash_add_strv (*out_props, "domains", split);
+ g_variant_builder_add (&props, "{sv}", "domains", g_variant_new_strv ((gpointer) split, -1));
+ g_strfreev (split);
}
/* nameservers */
- if (!add_uint_array (kf, *out_props, "ip4", "nameservers", error))
+ if (!add_uint_array (kf, &props, "ip4", "nameservers", error))
return FALSE;
/* wins-servers */
- if (!add_uint_array (kf, *out_props, "ip4", "wins-servers", error))
+ if (!add_uint_array (kf, &props, "ip4", "wins-servers", error))
return FALSE;
/* Addresses */
@@ -291,39 +220,37 @@ parse_ip4 (GKeyFile *kf, GHashTable **out_props, const char *section, GError **e
g_free (tmp);
if (g_strv_length (split) > 0) {
- list = NULL;
+ addresses = g_ptr_array_new_with_free_func ((GDestroyNotify) nm_ip_address_unref);
for (iter = split; iter && *iter; iter++) {
- NMIP4Address *addr;
- guint32 a;
- char *p;
+ NMIPAddress *addr;
+ char *ip, *prefix;
if (strlen (g_strstrip (*iter)) == 0)
continue;
- addr = nm_ip4_address_new ();
-
- p = strchr (*iter, '/');
- g_assert (p);
- *p++ = '\0';
-
- g_assert_cmpint (inet_pton (AF_INET, *iter, &a), ==, 1);
- nm_ip4_address_set_address (addr, a);
- nm_ip4_address_set_prefix (addr, (guint) atoi (p));
+ ip = *iter;
- p = strchr (p, ' ');
- g_assert (p);
- p++;
+ prefix = strchr (ip, '/');
+ g_assert (prefix);
+ *prefix++ = '\0';
- g_assert_cmpint (inet_pton (AF_INET, p, &a), ==, 1);
- nm_ip4_address_set_gateway (addr, a);
+ if (addresses->len == 0) {
+ gateway = strchr (prefix, ' ');
+ g_assert (gateway);
+ gateway++;
+ }
- list = g_slist_append (list, addr);
+ addr = nm_ip_address_new (AF_INET, ip, (guint) atoi (prefix), error);
+ if (!addr) {
+ g_ptr_array_unref (addresses);
+ return FALSE;
+ }
+ g_ptr_array_add (addresses, addr);
}
- val = g_slice_new0 (GValue);
- g_value_init (val, DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UINT);
- nm_utils_ip4_addresses_to_gvalue (list, val);
- value_hash_add (*out_props, "addresses", val);
+ g_variant_builder_add (&props, "{sv}", "addresses",
+ nm_utils_ip4_addresses_to_variant (addresses, gateway));
+ g_ptr_array_unref (addresses);
}
g_strfreev (split);
@@ -335,87 +262,88 @@ parse_ip4 (GKeyFile *kf, GHashTable **out_props, const char *section, GError **e
g_free (tmp);
if (g_strv_length (split) > 0) {
- list = NULL;
+ routes = g_ptr_array_new_with_free_func ((GDestroyNotify) nm_ip_route_unref);
for (iter = split; iter && *iter; iter++) {
- NMIP4Route *route;
- guint32 a;
- char *p;
+ NMIPRoute *route;
+ char *dest, *prefix, *next_hop, *metric;
if (strlen (g_strstrip (*iter)) == 0)
continue;
- route = nm_ip4_route_new ();
-
- p = strchr (*iter, '/');
- g_assert (p);
- *p++ = '\0';
-
- g_assert_cmpint (inet_pton (AF_INET, *iter, &a), ==, 1);
- nm_ip4_route_set_dest (route, a);
- nm_ip4_route_set_prefix (route, (guint) atoi (p));
-
- p = strchr (p, ' ');
- g_assert (p);
- p++;
-
- g_assert_cmpint (inet_pton (AF_INET, p, &a), ==, 1);
- nm_ip4_route_set_next_hop (route, a);
-
- p = strchr (p, ' ');
- g_assert (p);
- p++;
- nm_ip4_route_set_metric (route, (guint) atoi (p));
-
- list = g_slist_append (list, route);
+ dest = *iter;
+
+ prefix = strchr (dest, '/');
+ g_assert (prefix);
+ *prefix++ = '\0';
+
+ next_hop = strchr (prefix, ' ');
+ g_assert (next_hop);
+ next_hop++;
+
+ metric = strchr (next_hop, ' ');
+ g_assert (metric);
+ metric++;
+
+ route = nm_ip_route_new (AF_INET,
+ dest, (guint) atoi (prefix),
+ next_hop, (guint) atoi (metric),
+ error);
+ if (!route) {
+ g_ptr_array_unref (routes);
+ return FALSE;
+ }
+ g_ptr_array_add (routes, route);
}
- val = g_slice_new0 (GValue);
- g_value_init (val, DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UINT);
- nm_utils_ip4_routes_to_gvalue (list, val);
- value_hash_add (*out_props, "routes", val);
+ g_variant_builder_add (&props, "{sv}", "routes",
+ nm_utils_ip4_routes_to_variant (routes));
+ g_ptr_array_unref (routes);
}
g_strfreev (split);
}
+ *out_props = g_variant_builder_end (&props);
return TRUE;
}
static gboolean
parse_dhcp (GKeyFile *kf,
const char *group_name,
- GHashTable **out_props,
+ GVariant **out_props,
GError **error)
{
char **keys, **iter, *val;
+ GVariantBuilder props;
keys = g_key_file_get_keys (kf, group_name, NULL, error);
if (!keys)
return FALSE;
- *out_props = value_hash_create ();
+ g_variant_builder_init (&props, G_VARIANT_TYPE ("a{sv}"));
for (iter = keys; iter && *iter; iter++) {
val = g_key_file_get_string (kf, group_name, *iter, error);
if (!val)
return FALSE;
- value_hash_add_string (*out_props, *iter, val);
+ g_variant_builder_add (&props, "{sv}", *iter, g_variant_new_string (val));
g_free (val);
}
+ *out_props = g_variant_builder_end (&props);
return TRUE;
}
static gboolean
get_dispatcher_file (const char *file,
- GHashTable **out_con_hash,
- GHashTable **out_con_props,
- GHashTable **out_device_props,
- GHashTable **out_device_ip4_props,
- GHashTable **out_device_ip6_props,
- GHashTable **out_device_dhcp4_props,
- GHashTable **out_device_dhcp6_props,
+ GVariant **out_con_dict,
+ GVariant **out_con_props,
+ GVariant **out_device_props,
+ GVariant **out_device_ip4_props,
+ GVariant **out_device_ip6_props,
+ GVariant **out_device_dhcp4_props,
+ GVariant **out_device_dhcp6_props,
char **out_vpn_ip_iface,
- GHashTable **out_vpn_ip4_props,
- GHashTable **out_vpn_ip6_props,
+ GVariant **out_vpn_ip4_props,
+ GVariant **out_vpn_ip6_props,
char **out_expected_iface,
char **out_action,
GHashTable **out_env,
@@ -430,7 +358,7 @@ get_dispatcher_file (const char *file,
return FALSE;
if (!parse_main (kf,
- out_con_hash,
+ out_con_dict,
out_con_props,
out_expected_iface,
out_action,
@@ -480,18 +408,18 @@ out:
/*******************************************/
static void
-test_generic (const char *path, const char *file, const char *override_vpn_ip_iface)
+test_generic (const char *file, const char *override_vpn_ip_iface)
{
- GHashTable *con_hash = NULL;
- GHashTable *con_props = NULL;
- GHashTable *device_props = NULL;
- GHashTable *device_ip4_props = NULL;
- GHashTable *device_ip6_props = NULL;
- GHashTable *device_dhcp4_props = NULL;
- GHashTable *device_dhcp6_props = NULL;
+ GVariant *con_dict = NULL;
+ GVariant *con_props = NULL;
+ GVariant *device_props = NULL;
+ GVariant *device_ip4_props = NULL;
+ GVariant *device_ip6_props = NULL;
+ GVariant *device_dhcp4_props = NULL;
+ GVariant *device_dhcp6_props = NULL;
char *vpn_ip_iface = NULL;
- GHashTable *vpn_ip4_props = NULL;
- GHashTable *vpn_ip6_props = NULL;
+ GVariant *vpn_ip4_props = NULL;
+ GVariant *vpn_ip6_props = NULL;
char *expected_iface = NULL;
char *action = NULL;
char *out_iface = NULL;
@@ -502,9 +430,9 @@ test_generic (const char *path, const char *file, const char *override_vpn_ip_if
char **denv, **iter;
/* Read in the test file */
- p = g_strdup_printf ("%s/%s", path, file);
+ p = g_build_filename (SRCDIR, file, NULL);
success = get_dispatcher_file (p,
- &con_hash,
+ &con_dict,
&con_props,
&device_props,
&device_ip4_props,
@@ -524,7 +452,7 @@ test_generic (const char *path, const char *file, const char *override_vpn_ip_if
/* Get the environment from the dispatcher code */
denv = nm_dispatcher_utils_construct_envp (action,
- con_hash,
+ con_dict,
con_props,
device_props,
device_ip4_props,
@@ -581,57 +509,57 @@ test_generic (const char *path, const char *file, const char *override_vpn_ip_if
g_free (vpn_ip_iface);
g_free (expected_iface);
g_free (action);
- g_hash_table_destroy (con_hash);
- g_hash_table_destroy (con_props);
- g_hash_table_destroy (device_props);
+ g_variant_unref (con_dict);
+ g_variant_unref (con_props);
+ g_variant_unref (device_props);
if (device_ip4_props)
- g_hash_table_destroy (device_ip4_props);
+ g_variant_unref (device_ip4_props);
if (device_ip6_props)
- g_hash_table_destroy (device_ip6_props);
+ g_variant_unref (device_ip6_props);
if (device_dhcp4_props)
- g_hash_table_destroy (device_dhcp4_props);
+ g_variant_unref (device_dhcp4_props);
if (device_dhcp6_props)
- g_hash_table_destroy (device_dhcp6_props);
+ g_variant_unref (device_dhcp6_props);
if (vpn_ip4_props)
- g_hash_table_destroy (vpn_ip4_props);
+ g_variant_unref (vpn_ip4_props);
if (vpn_ip6_props)
- g_hash_table_destroy (vpn_ip6_props);
+ g_variant_unref (vpn_ip6_props);
g_hash_table_destroy (expected_env);
}
/*******************************************/
static void
-test_old_up (const char *path)
+test_old_up (void)
{
- test_generic (path, "dispatcher-old-up", NULL);
+ test_generic ("dispatcher-old-up", NULL);
}
static void
-test_old_down (const char *path)
+test_old_down (void)
{
- test_generic (path, "dispatcher-old-down", NULL);
+ test_generic ("dispatcher-old-down", NULL);
}
static void
-test_old_vpn_up (const char *path)
+test_old_vpn_up (void)
{
- test_generic (path, "dispatcher-old-vpn-up", NULL);
+ test_generic ("dispatcher-old-vpn-up", NULL);
}
static void
-test_old_vpn_down (const char *path)
+test_old_vpn_down (void)
{
- test_generic (path, "dispatcher-old-vpn-down", NULL);
+ test_generic ("dispatcher-old-vpn-down", NULL);
}
static void
-test_up_empty_vpn_iface (const char *path)
+test_up_empty_vpn_iface (void)
{
/* Test that an empty VPN iface variable, like is passed through D-Bus
* from NM, is ignored by the dispatcher environment construction code.
*/
- test_generic (path, "dispatcher-old-up", "");
+ test_generic ("dispatcher-old-up", "");
}
/*******************************************/
@@ -639,20 +567,18 @@ test_up_empty_vpn_iface (const char *path)
int
main (int argc, char **argv)
{
- g_assert (argc > 1);
-
g_test_init (&argc, &argv, NULL);
#if !GLIB_CHECK_VERSION (2, 35, 0)
g_type_init ();
#endif
- 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_add_func ("/dispatcher/old_up", test_old_up);
+ g_test_add_func ("/dispatcher/old_down", test_old_down);
+ g_test_add_func ("/dispatcher/old_vpn_up", test_old_vpn_up);
+ g_test_add_func ("/dispatcher/old_vpn_down", test_old_vpn_down);
- g_test_add_data_func ("/dispatcher/up_empty_vpn_iface", argv[1], (GTestDataFunc) test_up_empty_vpn_iface);
+ g_test_add_func ("/dispatcher/up_empty_vpn_iface", test_up_empty_vpn_iface);
return g_test_run ();
}
diff --git a/cli/Makefile.am b/cli/Makefile.am
deleted file mode 100644
index f436d46da..000000000
--- a/cli/Makefile.am
+++ /dev/null
@@ -1,2 +0,0 @@
-SUBDIRS = src completion
-
diff --git a/cli/completion/Makefile.am b/cli/completion/Makefile.am
deleted file mode 100644
index 9a250f070..000000000
--- a/cli/completion/Makefile.am
+++ /dev/null
@@ -1,2 +0,0 @@
-completiondir = $(datadir)/bash-completion/completions
-dist_completion_DATA = nmcli
diff --git a/cli/src/Makefile.am b/cli/src/Makefile.am
deleted file mode 100644
index e61c03689..000000000
--- a/cli/src/Makefile.am
+++ /dev/null
@@ -1,40 +0,0 @@
-bin_PROGRAMS = \
- nmcli
-
-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 \
- $(DBUS_CFLAGS) \
- $(GLIB_CFLAGS) \
- -DG_LOG_DOMAIN=\""nmcli"\" \
- -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
- -DNMCLI_LOCALEDIR=\"$(datadir)/locale\"
-
-nmcli_SOURCES = \
- common.c \
- common.h \
- connections.c \
- connections.h \
- devices.c \
- devices.h \
- network-manager.c \
- network-manager.h \
- settings.c \
- settings.h \
- nmcli.c \
- nmcli.h \
- utils.c \
- utils.h
-
-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/clients/Makefile.am b/clients/Makefile.am
new file mode 100644
index 000000000..dea8f9e33
--- /dev/null
+++ b/clients/Makefile.am
@@ -0,0 +1,21 @@
+SUBDIRS = cli tui
+
+AM_CPPFLAGS = \
+ -I${top_srcdir}/libnm-core \
+ -I${top_builddir}/libnm-core \
+ -I${top_srcdir}/libnm \
+ -I${top_builddir}/libnm \
+ $(GLIB_CFLAGS) \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ -DNMLOCALEDIR=\"$(datadir)/locale\"
+
+bin_PROGRAMS = nm-online
+
+nm_online_SOURCES = nm-online.c
+nm_online_CPPFLAGS = \
+ -DG_LOG_DOMAIN=\""nm-online"\" \
+ $(AM_CPPFLAGS)
+
+nm_online_LDADD = \
+ $(top_builddir)/libnm/libnm.la \
+ $(GLIB_LIBS)
diff --git a/test/Makefile.in b/clients/Makefile.in
index 174ca77f8..7abc21239 100644
--- a/test/Makefile.in
+++ b/clients/Makefile.in
@@ -79,8 +79,7 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
bin_PROGRAMS = nm-online$(EXEEXT)
-noinst_PROGRAMS = libnm-glib-test$(EXEEXT)
-subdir = test
+subdir = clients
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -104,28 +103,16 @@ CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
am__installdirs = "$(DESTDIR)$(bindir)"
-PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS)
-am_libnm_glib_test_OBJECTS = \
- libnm_glib_test-libnm-glib-test.$(OBJEXT)
-libnm_glib_test_OBJECTS = $(am_libnm_glib_test_OBJECTS)
+PROGRAMS = $(bin_PROGRAMS)
+am_nm_online_OBJECTS = nm_online-nm-online.$(OBJEXT)
+nm_online_OBJECTS = $(am_nm_online_OBJECTS)
am__DEPENDENCIES_1 =
-libnm_glib_test_DEPENDENCIES = \
- $(top_builddir)/libnm-glib/libnm-glib.la \
- $(top_builddir)/libnm-util/libnm-util.la $(am__DEPENDENCIES_1) \
+nm_online_DEPENDENCIES = $(top_builddir)/libnm/libnm.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
am__v_lt_1 =
-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-nm-online.$(OBJEXT)
-nm_online_OBJECTS = $(am_nm_online_OBJECTS)
-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@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -160,13 +147,29 @@ 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)
-DIST_SOURCES = $(libnm_glib_test_SOURCES) $(nm_online_SOURCES)
+SOURCES = $(nm_online_SOURCES)
+DIST_SOURCES = $(nm_online_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
@@ -186,7 +189,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@
@@ -196,6 +225,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -319,6 +350,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -338,6 +370,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -364,7 +397,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -443,18 +476,14 @@ with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
with_valgrind = @with_valgrind@
+SUBDIRS = cli tui
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_builddir}/include \
- $(DBUS_CFLAGS) \
+ -I${top_srcdir}/libnm-core \
+ -I${top_builddir}/libnm-core \
+ -I${top_srcdir}/libnm \
+ -I${top_builddir}/libnm \
$(GLIB_CFLAGS) \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
- -DBINDIR=\"$(bindir)\" \
- -DDATADIR=\"$(datadir)\" \
-DNMLOCALEDIR=\"$(datadir)/locale\"
nm_online_SOURCES = nm-online.c
@@ -463,23 +492,10 @@ nm_online_CPPFLAGS = \
$(AM_CPPFLAGS)
nm_online_LDADD = \
- $(top_builddir)/libnm-glib/libnm-glib.la \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(DBUS_LIBS) \
- $(GLIB_LIBS)
-
-libnm_glib_test_SOURCES = libnm-glib-test.c
-libnm_glib_test_CFLAGS = \
- -Wno-deprecated-declarations \
- -Wno-deprecated
-
-libnm_glib_test_LDADD = \
- $(top_builddir)/libnm-glib/libnm-glib.la \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(DBUS_LIBS) \
+ $(top_builddir)/libnm/libnm.la \
$(GLIB_LIBS)
-all: all-am
+all: all-recursive
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
@@ -492,9 +508,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu clients/Makefile'; \
$(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu test/Makefile
+ $(AUTOMAKE) --gnu clients/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
@@ -563,19 +579,6 @@ clean-binPROGRAMS:
echo " rm -f" $$list; \
rm -f $$list
-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-glib-test$(EXEEXT): $(libnm_glib_test_OBJECTS) $(libnm_glib_test_DEPENDENCIES) $(EXTRA_libnm_glib_test_DEPENDENCIES)
- @rm -f libnm-glib-test$(EXEEXT)
- $(AM_V_CCLD)$(libnm_glib_test_LINK) $(libnm_glib_test_OBJECTS) $(libnm_glib_test_LDADD) $(LIBS)
-
nm-online$(EXEEXT): $(nm_online_OBJECTS) $(nm_online_DEPENDENCIES) $(EXTRA_nm_online_DEPENDENCIES)
@rm -f nm-online$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(nm_online_OBJECTS) $(nm_online_LDADD) $(LIBS)
@@ -586,7 +589,6 @@ mostlyclean-compile:
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-nm-online.Po@am__quote@
.c.o:
@@ -610,20 +612,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_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
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libnm-glib-test.c' object='libnm_glib_test-libnm-glib-test.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) $(libnm_glib_test_CFLAGS) $(CFLAGS) -c -o libnm_glib_test-libnm-glib-test.o `test -f 'libnm-glib-test.c' || echo '$(srcdir)/'`libnm-glib-test.c
-
-libnm_glib_test-libnm-glib-test.obj: 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.obj -MD -MP -MF $(DEPDIR)/libnm_glib_test-libnm-glib-test.Tpo -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`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test-libnm-glib-test.Tpo $(DEPDIR)/libnm_glib_test-libnm-glib-test.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libnm-glib-test.c' object='libnm_glib_test-libnm-glib-test.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) $(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
@@ -644,14 +632,61 @@ mostlyclean-libtool:
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 \
@@ -664,7 +699,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)
@@ -677,7 +712,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)'; \
@@ -726,22 +761,48 @@ 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 $(PROGRAMS)
-installdirs:
+installdirs: installdirs-recursive
+installdirs-am:
for dir in "$(DESTDIR)$(bindir)"; 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: 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)" \
@@ -763,93 +824,92 @@ 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-binPROGRAMS clean-generic clean-libtool \
- clean-noinstPROGRAMS mostlyclean-am
+clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
-distclean: distclean-am
+distclean: distclean-recursive
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile 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-binPROGRAMS
-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 -rf ./$(DEPDIR)
-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
-pdf: pdf-am
+pdf: pdf-recursive
pdf-am:
-ps: ps-am
+ps: ps-recursive
ps-am:
uninstall-am: uninstall-binPROGRAMS
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
- clean-binPROGRAMS 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-binPROGRAMS 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 uninstall-binPROGRAMS
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+ 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-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
# Tell versions [3.59,3.63) of GNU make to not export all variables.
diff --git a/clients/cli/Makefile.am b/clients/cli/Makefile.am
new file mode 100644
index 000000000..75c00a998
--- /dev/null
+++ b/clients/cli/Makefile.am
@@ -0,0 +1,72 @@
+bin_PROGRAMS = \
+ nmcli
+
+AM_CPPFLAGS = \
+ -I${top_srcdir} \
+ -I${top_builddir} \
+ -I${top_srcdir}/include \
+ -I${top_srcdir}/libnm-core \
+ -I${top_builddir}/libnm-core \
+ -I${top_srcdir}/libnm \
+ -I${top_builddir}/libnm \
+ -I${top_srcdir}/clients/common \
+ $(GLIB_CFLAGS) \
+ -DG_LOG_DOMAIN=\""nmcli"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ -DNMCLI_LOCALEDIR=\"$(datadir)/locale\"
+
+nmcli_SOURCES = \
+ agent.c \
+ agent.h \
+ common.c \
+ common.h \
+ connections.c \
+ connections.h \
+ devices.c \
+ devices.h \
+ general.c \
+ general.h \
+ settings.c \
+ settings.h \
+ nmcli.c \
+ nmcli.h \
+ utils.c \
+ utils.h \
+ polkit-agent.c \
+ polkit-agent.h \
+ \
+ $(srcdir)/../common/nm-secret-agent-simple.c \
+ $(srcdir)/../common/nm-secret-agent-simple.h \
+ $(NULL)
+
+nmcli_LDADD = \
+ $(GLIB_LIBS) \
+ $(READLINE_LIBS) \
+ $(top_builddir)/libnm/libnm.la
+
+if WITH_POLKIT_AGENT
+AM_CPPFLAGS += $(POLKIT_CFLAGS)
+nmcli_SOURCES += $(srcdir)/../common/nm-polkit-listener.c $(srcdir)/../common/nm-polkit-listener.h
+nmcli_LDADD += $(POLKIT_LIBS)
+endif
+
+if BUILD_SETTING_DOCS
+settings-docs.c: settings-docs.xsl $(top_builddir)/libnm/nm-property-docs.xml
+ $(AM_V_GEN) xsltproc --output $@ $^
+
+BUILT_SOURCES = settings-docs.c
+CLEANFILES = settings-docs.c
+endif
+
+EXTRA_DIST = settings-docs.c settings-docs.xsl
+
+completiondir = $(datadir)/bash-completion/completions
+
+install-data-hook:
+ $(mkinstalldirs) $(DESTDIR)$(completiondir)
+ $(INSTALL_DATA) $(srcdir)/nmcli-completion $(DESTDIR)$(completiondir)/nmcli
+
+uninstall-hook:
+ rm -f $(DESTDIR)$(completiondir)/nmcli
+
+EXTRA_DIST += nmcli-completion
diff --git a/clients/cli/Makefile.in b/clients/cli/Makefile.in
new file mode 100644
index 000000000..871b95253
--- /dev/null
+++ b/clients/cli/Makefile.in
@@ -0,0 +1,862 @@
+# 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@
+bin_PROGRAMS = nmcli$(EXEEXT)
+@WITH_POLKIT_AGENT_TRUE@am__append_1 = $(POLKIT_CFLAGS)
+@WITH_POLKIT_AGENT_TRUE@am__append_2 = $(srcdir)/../common/nm-polkit-listener.c $(srcdir)/../common/nm-polkit-listener.h
+@WITH_POLKIT_AGENT_TRUE@am__append_3 = $(POLKIT_LIBS)
+subdir = clients/cli
+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 =
+am__installdirs = "$(DESTDIR)$(bindir)"
+PROGRAMS = $(bin_PROGRAMS)
+am__nmcli_SOURCES_DIST = agent.c agent.h common.c common.h \
+ connections.c connections.h devices.c devices.h general.c \
+ general.h settings.c settings.h nmcli.c nmcli.h utils.c \
+ utils.h polkit-agent.c polkit-agent.h \
+ $(srcdir)/../common/nm-secret-agent-simple.c \
+ $(srcdir)/../common/nm-secret-agent-simple.h \
+ $(srcdir)/../common/nm-polkit-listener.c \
+ $(srcdir)/../common/nm-polkit-listener.h
+@WITH_POLKIT_AGENT_TRUE@am__objects_1 = nm-polkit-listener.$(OBJEXT)
+am_nmcli_OBJECTS = agent.$(OBJEXT) common.$(OBJEXT) \
+ connections.$(OBJEXT) devices.$(OBJEXT) general.$(OBJEXT) \
+ settings.$(OBJEXT) nmcli.$(OBJEXT) utils.$(OBJEXT) \
+ polkit-agent.$(OBJEXT) nm-secret-agent-simple.$(OBJEXT) \
+ $(am__objects_1)
+nmcli_OBJECTS = $(am_nmcli_OBJECTS)
+am__DEPENDENCIES_1 =
+@WITH_POLKIT_AGENT_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)
+nmcli_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/libnm/libnm.la $(am__DEPENDENCIES_2)
+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 = $(nmcli_SOURCES)
+DIST_SOURCES = $(am__nmcli_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@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
+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_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
+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@
+PERL = @PERL@
+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_DIR = @UDEV_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_builddir} \
+ -I${top_srcdir}/include -I${top_srcdir}/libnm-core \
+ -I${top_builddir}/libnm-core -I${top_srcdir}/libnm \
+ -I${top_builddir}/libnm -I${top_srcdir}/clients/common \
+ $(GLIB_CFLAGS) -DG_LOG_DOMAIN=\""nmcli"\" \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ -DNMCLI_LOCALEDIR=\"$(datadir)/locale\" $(am__append_1)
+nmcli_SOURCES = agent.c agent.h common.c common.h connections.c \
+ connections.h devices.c devices.h general.c general.h \
+ settings.c settings.h nmcli.c nmcli.h utils.c utils.h \
+ polkit-agent.c polkit-agent.h \
+ $(srcdir)/../common/nm-secret-agent-simple.c \
+ $(srcdir)/../common/nm-secret-agent-simple.h $(NULL) \
+ $(am__append_2)
+nmcli_LDADD = $(GLIB_LIBS) $(READLINE_LIBS) \
+ $(top_builddir)/libnm/libnm.la $(am__append_3)
+@BUILD_SETTING_DOCS_TRUE@BUILT_SOURCES = settings-docs.c
+@BUILD_SETTING_DOCS_TRUE@CLEANFILES = settings-docs.c
+EXTRA_DIST = settings-docs.c settings-docs.xsl nmcli-completion
+completiondir = $(datadir)/bash-completion/completions
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) 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 clients/cli/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu clients/cli/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):
+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
+
+nmcli$(EXEEXT): $(nmcli_OBJECTS) $(nmcli_DEPENDENCIES) $(EXTRA_nmcli_DEPENDENCIES)
+ @rm -f nmcli$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(nmcli_OBJECTS) $(nmcli_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/agent.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)/general.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-polkit-listener.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-secret-agent-simple.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmcli.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/polkit-agent.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 $@ $<
+@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-secret-agent-simple.o: $(srcdir)/../common/nm-secret-agent-simple.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-secret-agent-simple.o -MD -MP -MF $(DEPDIR)/nm-secret-agent-simple.Tpo -c -o nm-secret-agent-simple.o `test -f '$(srcdir)/../common/nm-secret-agent-simple.c' || echo '$(srcdir)/'`$(srcdir)/../common/nm-secret-agent-simple.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-secret-agent-simple.Tpo $(DEPDIR)/nm-secret-agent-simple.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(srcdir)/../common/nm-secret-agent-simple.c' object='nm-secret-agent-simple.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-secret-agent-simple.o `test -f '$(srcdir)/../common/nm-secret-agent-simple.c' || echo '$(srcdir)/'`$(srcdir)/../common/nm-secret-agent-simple.c
+
+nm-secret-agent-simple.obj: $(srcdir)/../common/nm-secret-agent-simple.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-secret-agent-simple.obj -MD -MP -MF $(DEPDIR)/nm-secret-agent-simple.Tpo -c -o nm-secret-agent-simple.obj `if test -f '$(srcdir)/../common/nm-secret-agent-simple.c'; then $(CYGPATH_W) '$(srcdir)/../common/nm-secret-agent-simple.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../common/nm-secret-agent-simple.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-secret-agent-simple.Tpo $(DEPDIR)/nm-secret-agent-simple.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(srcdir)/../common/nm-secret-agent-simple.c' object='nm-secret-agent-simple.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-secret-agent-simple.obj `if test -f '$(srcdir)/../common/nm-secret-agent-simple.c'; then $(CYGPATH_W) '$(srcdir)/../common/nm-secret-agent-simple.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../common/nm-secret-agent-simple.c'; fi`
+
+nm-polkit-listener.o: $(srcdir)/../common/nm-polkit-listener.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-polkit-listener.o -MD -MP -MF $(DEPDIR)/nm-polkit-listener.Tpo -c -o nm-polkit-listener.o `test -f '$(srcdir)/../common/nm-polkit-listener.c' || echo '$(srcdir)/'`$(srcdir)/../common/nm-polkit-listener.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-polkit-listener.Tpo $(DEPDIR)/nm-polkit-listener.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(srcdir)/../common/nm-polkit-listener.c' object='nm-polkit-listener.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-polkit-listener.o `test -f '$(srcdir)/../common/nm-polkit-listener.c' || echo '$(srcdir)/'`$(srcdir)/../common/nm-polkit-listener.c
+
+nm-polkit-listener.obj: $(srcdir)/../common/nm-polkit-listener.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-polkit-listener.obj -MD -MP -MF $(DEPDIR)/nm-polkit-listener.Tpo -c -o nm-polkit-listener.obj `if test -f '$(srcdir)/../common/nm-polkit-listener.c'; then $(CYGPATH_W) '$(srcdir)/../common/nm-polkit-listener.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../common/nm-polkit-listener.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-polkit-listener.Tpo $(DEPDIR)/nm-polkit-listener.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(srcdir)/../common/nm-polkit-listener.c' object='nm-polkit-listener.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-polkit-listener.obj `if test -f '$(srcdir)/../common/nm-polkit-listener.c'; then $(CYGPATH_W) '$(srcdir)/../common/nm-polkit-listener.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../common/nm-polkit-listener.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
+
+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: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+ for dir in "$(DESTDIR)$(bindir)"; 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
+
+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:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+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."
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool 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:
+ @$(NORMAL_INSTALL)
+ $(MAKE) $(AM_MAKEFLAGS) install-data-hook
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+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: uninstall-binPROGRAMS
+ @$(NORMAL_INSTALL)
+ $(MAKE) $(AM_MAKEFLAGS) uninstall-hook
+.MAKE: all check install install-am install-data-am install-strip \
+ uninstall-am
+
+.PHONY: CTAGS GTAGS TAGS all all-am check 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-data-hook 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 \
+ uninstall-binPROGRAMS uninstall-hook
+
+
+@BUILD_SETTING_DOCS_TRUE@settings-docs.c: settings-docs.xsl $(top_builddir)/libnm/nm-property-docs.xml
+@BUILD_SETTING_DOCS_TRUE@ $(AM_V_GEN) xsltproc --output $@ $^
+
+install-data-hook:
+ $(mkinstalldirs) $(DESTDIR)$(completiondir)
+ $(INSTALL_DATA) $(srcdir)/nmcli-completion $(DESTDIR)$(completiondir)/nmcli
+
+uninstall-hook:
+ rm -f $(DESTDIR)$(completiondir)/nmcli
+
+# 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/clients/cli/agent.c b/clients/cli/agent.c
new file mode 100644
index 000000000..1695ed596
--- /dev/null
+++ b/clients/cli/agent.c
@@ -0,0 +1,252 @@
+/*
+ * nmcli - command-line tool for controlling NetworkManager
+ * Functions for running NM secret agent.
+ *
+ * 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 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"
+#include "nm-secret-agent-simple.h"
+#include "polkit-agent.h"
+#include "agent.h"
+
+static void
+usage (void)
+{
+ g_printerr (_("Usage: nmcli agent { COMMAND | help }\n\n"
+ "COMMAND := { secret | polkit | all }\n\n"
+ ));
+}
+
+static void
+usage_agent_secret (void)
+{
+ g_printerr (_("Usage: nmcli agent secret { help }\n"
+ "\n"
+ "Runs nmcli as NetworkManager secret agent. When NetworkManager requires\n"
+ "a password it asks registered agents for it. This command keeps nmcli running\n"
+ "and if a password is required asks the user for it.\n\n"));
+}
+
+static void
+usage_agent_polkit (void)
+{
+ g_printerr (_("Usage: nmcli agent polkit { help }\n"
+ "\n"
+ "Registers nmcli as a polkit action for the user session.\n"
+ "When a polkit daemon requires an authorization, nmcli asks the user and gives\n"
+ "the response back to polkit.\n\n"));
+}
+
+static void
+usage_agent_all (void)
+{
+ g_printerr (_("Usage: nmcli agent all { help }\n"
+ "\n"
+ "Runs nmcli as both NetworkManager secret and a polkit agent.\n\n"));
+}
+
+/* for pre-filling a string to readline prompt */
+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 gboolean
+get_secrets_from_user (const char *request_id,
+ const char *title,
+ const char *msg,
+ GPtrArray *secrets)
+{
+ int i;
+
+ for (i = 0; i < secrets->len; i++) {
+ NMSecretAgentSimpleSecret *secret = secrets->pdata[i];
+ char *pwd = NULL;
+
+ /* Ask user for the password */
+ g_print ("%s\n", msg);
+ if (secret->value) {
+ /* Prefill the password if we have it. */
+ rl_startup_hook = set_deftext;
+ pre_input_deftext = g_strdup (secret->value);
+ }
+ pwd = nmc_readline ("%s (%s): ", secret->name, secret->prop_name);
+
+ /* No password provided, cancel the secrets. */
+ if (!pwd)
+ return FALSE;
+ g_free (secret->value);
+ secret->value = pwd;
+ }
+ return TRUE;
+}
+
+static void
+secrets_requested (NMSecretAgentSimple *agent,
+ const char *request_id,
+ const char *title,
+ const char *msg,
+ GPtrArray *secrets,
+ gpointer user_data)
+{
+ NmCli *nmc = (NmCli *) user_data;
+ gboolean success = FALSE;
+
+ if (nmc->print_output == NMC_PRINT_PRETTY)
+ nmc_terminal_erase_line ();
+
+ success = get_secrets_from_user (request_id, title, msg, secrets);
+ if (success)
+ nm_secret_agent_simple_response (agent, request_id, secrets);
+ else
+ nm_secret_agent_simple_response (agent, request_id, NULL);
+}
+
+
+static NMCResultCode
+do_agent_secret (NmCli *nmc, int argc, char **argv)
+{
+ /* Create secret agent */
+ nmc->secret_agent = nm_secret_agent_simple_new ("nmcli-agent");
+ if (nmc->secret_agent) {
+ /* We keep running */
+ nmc->should_wait = TRUE;
+
+ nm_secret_agent_simple_enable (NM_SECRET_AGENT_SIMPLE (nmc->secret_agent), NULL);
+ g_signal_connect (nmc->secret_agent, "request-secrets", G_CALLBACK (secrets_requested), nmc);
+ g_print (_("nmcli successfully registered as a NetworkManager's secret agent.\n"));
+ } else {
+ g_string_printf (nmc->return_text, _("Error: secret agent initialization failed"));
+ nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
+ }
+
+ return nmc->return_value;
+}
+
+static NMCResultCode
+do_agent_polkit (NmCli *nmc, int argc, char **argv)
+{
+ GError *error = NULL;
+
+ /* Initialize polkit agent */
+ if (!nmc_polkit_agent_init (nmc, TRUE, &error)) {
+ g_dbus_error_strip_remote_error (error);
+ g_string_printf (nmc->return_text, _("Error: polkit agent initialization failed: %s"),
+ error->message);
+ nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
+ g_error_free (error);
+ } else {
+ /* We keep running */
+ nmc->should_wait = TRUE;
+
+ g_print (_("nmcli successfully registered as a polkit agent.\n"));
+ }
+
+ return nmc->return_value;
+}
+
+static NMCResultCode
+do_agent_all (NmCli *nmc, int argc, char **argv)
+{
+ NMCResultCode secret_res;
+
+ /* Run both secret and polkit agent */
+ secret_res = do_agent_secret (nmc, argc, argv);
+ if (secret_res != NMC_RESULT_SUCCESS)
+ g_printerr ("%s\n", nmc->return_text->str);
+
+ nmc->return_value = do_agent_polkit (nmc, argc, argv);
+
+ if (nmc->return_value == NMC_RESULT_SUCCESS && secret_res != NMC_RESULT_SUCCESS)
+ nmc->return_value = secret_res;
+
+ return nmc->return_value;
+}
+
+NMCResultCode
+do_agent (NmCli *nmc, int argc, char **argv)
+{
+ /* Get NMClient object */
+ nmc->get_client (nmc);
+
+ /* Check whether NetworkManager is running */
+ if (!nm_client_get_nm_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;
+ }
+ /* Compare NM and nmcli versions */
+ if (!nmc_versions_match (nmc))
+ return nmc->return_value;
+
+ if (argc == 0) {
+ nmc->return_value = do_agent_all (nmc, 0, NULL);
+ }
+
+ if (argc > 0) {
+ if (nmc_arg_is_help (*argv)) {
+ usage ();
+ goto usage_exit;
+ } else if (matches (*argv, "secret") == 0) {
+ if (nmc_arg_is_help (*(argv+1))) {
+ usage_agent_secret ();
+ goto usage_exit;
+ }
+ nmc->return_value = do_agent_secret (nmc, argc-1, argv+1);
+ } else if (matches (*argv, "polkit") == 0) {
+ if (nmc_arg_is_help (*(argv+1))) {
+ usage_agent_polkit ();
+ goto usage_exit;
+ }
+ nmc->return_value = do_agent_polkit (nmc, argc-1, argv+1);
+ } else if (matches (*argv, "all") == 0) {
+ if (nmc_arg_is_help (*(argv+1))) {
+ usage_agent_all ();
+ goto usage_exit;
+ }
+ nmc->return_value = do_agent_all (nmc, argc-1, argv+1);
+ } else {
+ usage ();
+ g_string_printf (nmc->return_text, _("Error: 'agent' command '%s' is not valid."), *argv);
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ }
+ }
+
+usage_exit:
+ return nmc->return_value;
+}
diff --git a/src/settings/nm-settings-error.c b/clients/cli/agent.h
index fd4eca364..70ea0d9b2 100644
--- a/src/settings/nm-settings-error.c
+++ b/clients/cli/agent.h
@@ -1,5 +1,6 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager system settings service
+/*
+ * nmcli - command-line tool for controlling NetworkManager
+ * Functions for running NM secret agent.
*
* 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,19 +16,14 @@
* 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 Novell, Inc.
- * Copyright (C) 2008 - 2011 Red Hat, Inc.
+ * Copyright 2014 Red Hat, Inc.
*/
-#include "nm-settings-error.h"
+#ifndef __NMC_AGENT_H__
+#define __NMC_AGENT_H__
-GQuark
-nm_settings_error_quark (void)
-{
- static GQuark ret = 0;
+#include "nmcli.h"
- if (ret == 0)
- ret = g_quark_from_static_string ("nm-settings-error");
+NMCResultCode do_agent (NmCli *nmc, int argc, char **argv);
- return ret;
-}
+#endif /* __NMC_AGENT_H__ */
diff --git a/cli/src/common.c b/clients/cli/common.c
index e6712a8d6..6b13f7f80 100644
--- a/cli/src/common.c
+++ b/clients/cli/common.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 2012 - 2014 Red Hat, Inc.
+ * Copyright 2012 - 2014 Red Hat, Inc.
*/
#include "config.h"
@@ -30,6 +30,8 @@
#include <readline/readline.h>
#include <readline/history.h>
+#include "nm-glib-compat.h"
+
#include "common.h"
#include "utils.h"
@@ -37,13 +39,14 @@
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 */
+ {"GATEWAY", N_("GATEWAY"), 0}, /* 2 */
+ {"ROUTE", N_("ROUTE"), 68}, /* 3 */
+ {"DNS", N_("DNS"), 35}, /* 4 */
+ {"DOMAIN", N_("DOMAIN"), 35}, /* 5 */
+ {"WINS", N_("WINS"), 20}, /* 6 */
{NULL, NULL, 0}
};
-#define NMC_FIELDS_IP4_CONFIG_ALL "GROUP,ADDRESS,ROUTE,DNS,DOMAIN,WINS"
+#define NMC_FIELDS_IP4_CONFIG_ALL "GROUP,ADDRESS,GATEWAY,ROUTE,DNS,DOMAIN,WINS"
/* Available fields for DHCPv4 group */
NmcOutputField nmc_fields_dhcp4_config[] = {
@@ -57,12 +60,13 @@ NmcOutputField nmc_fields_dhcp4_config[] = {
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 */
+ {"GATEWAY", N_("GATEWAY"), 0}, /* 2 */
+ {"ROUTE", N_("ROUTE"), 95}, /* 3 */
+ {"DNS", N_("DNS"), 60}, /* 4 */
+ {"DOMAIN", N_("DOMAIN"), 35}, /* 5 */
{NULL, NULL, 0}
};
-#define NMC_FIELDS_IP6_CONFIG_ALL "GROUP,ADDRESS,ROUTE,DNS,DOMAIN"
+#define NMC_FIELDS_IP6_CONFIG_ALL "GROUP,ADDRESS,GATEWAY,ROUTE,DNS,DOMAIN"
/* Available fields for DHCPv6 group */
NmcOutputField nmc_fields_dhcp6_config[] = {
@@ -74,14 +78,12 @@ NmcOutputField nmc_fields_dhcp6_config[] = {
gboolean
-print_ip4_config (NMIP4Config *cfg4,
+print_ip4_config (NMIPConfig *cfg4,
NmCli *nmc,
const char *group_prefix,
const char *one_field)
{
- GSList *list, *iter;
- const GArray *array;
- const GPtrArray *ptr_array;
+ GPtrArray *ptr_array;
char **addr_arr = NULL;
char **route_arr = NULL;
char **dns_arr = NULL;
@@ -102,80 +104,58 @@ print_ip4_config (NMIP4Config *cfg4,
g_ptr_array_add (nmc->output_data, arr);
/* addresses */
- list = (GSList *) nm_ip4_config_get_addresses (cfg4);
- addr_arr = g_new (char *, g_slist_length (list) + 1);
- for (iter = list; iter; iter = g_slist_next (iter)) {
- NMIP4Address *addr = (NMIP4Address *) iter->data;
- guint32 prefix;
- char *ip_str, *gw_str;
-
- ip_str = nmc_ip4_address_as_string (nm_ip4_address_get_address (addr), NULL);
- prefix = nm_ip4_address_get_prefix (addr);
- gw_str = nmc_ip4_address_as_string (nm_ip4_address_get_gateway (addr), NULL);
-
- addr_arr[i++] = g_strdup_printf ("ip = %s/%u, gw = %s", ip_str, prefix, gw_str);
- g_free (ip_str);
- g_free (gw_str);
+ ptr_array = nm_ip_config_get_addresses (cfg4);
+ if (ptr_array) {
+ addr_arr = g_new (char *, ptr_array->len + 1);
+ for (i = 0; i < ptr_array->len; i++) {
+ NMIPAddress *addr = (NMIPAddress *) g_ptr_array_index (ptr_array, i);
+
+ addr_arr[i] = g_strdup_printf ("%s/%u",
+ nm_ip_address_get_address (addr),
+ nm_ip_address_get_prefix (addr));
+ }
+ addr_arr[i] = NULL;
}
- addr_arr[i] = NULL;
/* routes */
- list = (GSList *) nm_ip4_config_get_routes (cfg4);
- route_arr = g_new (char *, g_slist_length (list) + 1);
- i = 0;
- for (iter = list; iter; iter = g_slist_next (iter)) {
- NMIP4Route *route = (NMIP4Route *) iter->data;
- guint32 prefix, metric;
- char *dest_str, *nexthop_str;
-
- dest_str = nmc_ip4_address_as_string (nm_ip4_route_get_dest (route), NULL);
- nexthop_str = nmc_ip4_address_as_string (nm_ip4_route_get_next_hop (route), NULL);
- prefix = nm_ip4_route_get_prefix (route);
- metric = nm_ip4_route_get_metric (route);
-
- route_arr[i++] = g_strdup_printf ("dst = %s/%u, nh = %s, mt = %u", dest_str, prefix, nexthop_str, metric);
- g_free (dest_str);
- g_free (nexthop_str);
+ ptr_array = nm_ip_config_get_routes (cfg4);
+ if (ptr_array) {
+ route_arr = g_new (char *, ptr_array->len + 1);
+ for (i = 0; i < ptr_array->len; i++) {
+ NMIPRoute *route = (NMIPRoute *) g_ptr_array_index (ptr_array, i);
+ const char *next_hop;
+
+ next_hop = nm_ip_route_get_next_hop (route);
+ if (!next_hop)
+ next_hop = "0.0.0.0";
+
+ route_arr[i] = g_strdup_printf ("dst = %s/%u, nh = %s%c mt = %u",
+ nm_ip_route_get_dest (route),
+ nm_ip_route_get_prefix (route),
+ next_hop,
+ nm_ip_route_get_metric (route) == -1 ? '\0' : ',',
+ (guint32) nm_ip_route_get_metric (route));
+ }
+ route_arr[i] = NULL;
}
- route_arr[i] = NULL;
/* DNS */
- array = nm_ip4_config_get_nameservers (cfg4);
- if (array) {
- dns_arr = g_new (char *, array->len + 1);
- for (i = 0; i < array->len; i++)
- dns_arr[i] = nmc_ip4_address_as_string (g_array_index (array, guint32, i), NULL);
-
- dns_arr[i] = NULL;
- }
+ dns_arr = g_strdupv ((char **) nm_ip_config_get_nameservers (cfg4));
/* domains */
- ptr_array = nm_ip4_config_get_domains (cfg4);
- if (ptr_array) {
- domain_arr = g_new (char *, ptr_array->len + 1);
- for (i = 0; i < ptr_array->len; i++)
- domain_arr[i] = g_strdup (g_ptr_array_index (ptr_array, i));
-
- domain_arr[i] = NULL;
- }
+ domain_arr = g_strdupv ((char **) nm_ip_config_get_domains (cfg4));
/* WINS */
- array = nm_ip4_config_get_wins_servers (cfg4);
- if (array) {
- wins_arr = g_new (char *, array->len + 1);
- for (i = 0; i < array->len; i++)
- wins_arr[i] = nmc_ip4_address_as_string (g_array_index (array, guint32, i), NULL);
-
- wins_arr[i] = NULL;
- }
+ wins_arr = g_strdupv ((char **) nm_ip_config_get_wins_servers (cfg4));
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);
+ set_val_strc (arr, 2, nm_ip_config_get_gateway (cfg4));
+ set_val_arr (arr, 3, route_arr);
+ set_val_arr (arr, 4, dns_arr);
+ set_val_arr (arr, 5, domain_arr);
+ set_val_arr (arr, 6, wins_arr);
g_ptr_array_add (nmc->output_data, arr);
print_data (nmc); /* Print all data */
@@ -187,13 +167,12 @@ print_ip4_config (NMIP4Config *cfg4,
}
gboolean
-print_ip6_config (NMIP6Config *cfg6,
+print_ip6_config (NMIPConfig *cfg6,
NmCli *nmc,
const char *group_prefix,
const char *one_field)
{
- GSList *list, *iter;
- const GPtrArray *ptr_array;
+ GPtrArray *ptr_array;
char **addr_arr = NULL;
char **route_arr = NULL;
char **dns_arr = NULL;
@@ -213,68 +192,54 @@ print_ip6_config (NMIP6Config *cfg6,
g_ptr_array_add (nmc->output_data, arr);
/* addresses */
- list = (GSList *) nm_ip6_config_get_addresses (cfg6);
- addr_arr = g_new (char *, g_slist_length (list) + 1);
- for (iter = list; iter; iter = g_slist_next (iter)) {
- NMIP6Address *addr = (NMIP6Address *) iter->data;
- guint32 prefix;
- char *ip_str, *gw_str;
-
- ip_str = nmc_ip6_address_as_string (nm_ip6_address_get_address (addr), NULL);
- prefix = nm_ip6_address_get_prefix (addr);
- gw_str = nmc_ip6_address_as_string (nm_ip6_address_get_gateway (addr), NULL);
-
- addr_arr[i++] = g_strdup_printf ("ip = %s/%u, gw = %s", ip_str, prefix, gw_str);
- g_free (ip_str);
- g_free (gw_str);
+ ptr_array = nm_ip_config_get_addresses (cfg6);
+ if (ptr_array) {
+ addr_arr = g_new (char *, ptr_array->len + 1);
+ for (i = 0; i < ptr_array->len; i++) {
+ NMIPAddress *addr = (NMIPAddress *) g_ptr_array_index (ptr_array, i);
+
+ addr_arr[i] = g_strdup_printf ("%s/%u",
+ nm_ip_address_get_address (addr),
+ nm_ip_address_get_prefix (addr));
+ }
+ addr_arr[i] = NULL;
}
- addr_arr[i] = NULL;
/* routes */
- list = (GSList *) nm_ip6_config_get_routes (cfg6);
- route_arr = g_new (char *, g_slist_length (list) + 1);
- i = 0;
- for (iter = list; iter; iter = g_slist_next (iter)) {
- NMIP6Route *route = (NMIP6Route *) iter->data;
- guint32 prefix, metric;
- char *dest_str, *nexthop_str;
-
- dest_str = nmc_ip6_address_as_string (nm_ip6_route_get_dest (route), NULL);
- nexthop_str = nmc_ip6_address_as_string (nm_ip6_route_get_next_hop (route), NULL);
- prefix = nm_ip6_route_get_prefix (route);
- metric = nm_ip6_route_get_metric (route);
-
- route_arr[i++] = g_strdup_printf ("dst = %s/%u, nh = %s, mt = %u", dest_str, prefix, nexthop_str, metric);
- g_free (dest_str);
- g_free (nexthop_str);
+ ptr_array = nm_ip_config_get_routes (cfg6);
+ if (ptr_array) {
+ route_arr = g_new (char *, ptr_array->len + 1);
+ for (i = 0; i < ptr_array->len; i++) {
+ NMIPRoute *route = (NMIPRoute *) g_ptr_array_index (ptr_array, i);
+ const char *next_hop;
+
+ next_hop = nm_ip_route_get_next_hop (route);
+ if (!next_hop)
+ next_hop = "::";
+
+ route_arr[i] = g_strdup_printf ("dst = %s/%u, nh = %s%c mt = %u",
+ nm_ip_route_get_dest (route),
+ nm_ip_route_get_prefix (route),
+ next_hop,
+ nm_ip_route_get_metric (route) == -1 ? '\0' : ',',
+ (guint32) nm_ip_route_get_metric (route));
+ }
+ route_arr[i] = NULL;
}
- route_arr[i] = NULL;
/* DNS */
- list = (GSList *) nm_ip6_config_get_nameservers (cfg6);
- dns_arr = g_new (char *, g_slist_length (list) + 1);
- i = 0;
- for (iter = list; iter; iter = g_slist_next (iter))
- dns_arr[i++] = nmc_ip6_address_as_string (iter->data, NULL);
-
- dns_arr[i] = NULL;
+ dns_arr = g_strdupv ((char **) nm_ip_config_get_nameservers (cfg6));
/* domains */
- ptr_array = nm_ip6_config_get_domains (cfg6);
- if (ptr_array) {
- domain_arr = g_new (char *, ptr_array->len + 1);
- for (i = 0; i < ptr_array->len; i++)
- domain_arr[i] = g_strdup (g_ptr_array_index (ptr_array, i));
-
- domain_arr[i] = NULL;
- }
+ domain_arr = g_strdupv ((char **) nm_ip_config_get_domains (cfg6));
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_strc (arr, 2, nm_ip_config_get_gateway (cfg6));
+ set_val_arr (arr, 3, route_arr);
+ set_val_arr (arr, 4, dns_arr);
+ set_val_arr (arr, 5, domain_arr);
g_ptr_array_add (nmc->output_data, arr);
print_data (nmc); /* Print all data */
@@ -286,7 +251,7 @@ print_ip6_config (NMIP6Config *cfg6,
}
gboolean
-print_dhcp4_config (NMDHCP4Config *dhcp4,
+print_dhcp4_config (NMDhcpConfig *dhcp4,
NmCli *nmc,
const char *group_prefix,
const char *one_field)
@@ -298,7 +263,7 @@ print_dhcp4_config (NMDHCP4Config *dhcp4,
if (dhcp4 == NULL)
return FALSE;
- table = nm_dhcp4_config_get_options (dhcp4);
+ table = nm_dhcp_config_get_options (dhcp4);
if (table) {
GHashTableIter table_iter;
gpointer key, value;
@@ -334,7 +299,7 @@ print_dhcp4_config (NMDHCP4Config *dhcp4,
}
gboolean
-print_dhcp6_config (NMDHCP6Config *dhcp6,
+print_dhcp6_config (NMDhcpConfig *dhcp6,
NmCli *nmc,
const char *group_prefix,
const char *one_field)
@@ -346,7 +311,7 @@ print_dhcp6_config (NMDHCP6Config *dhcp6,
if (dhcp6 == NULL)
return FALSE;
- table = nm_dhcp6_config_get_options (dhcp6);
+ table = nm_dhcp_config_get_options (dhcp6);
if (table) {
GHashTableIter table_iter;
gpointer key, value;
@@ -382,71 +347,19 @@ print_dhcp6_config (NMDHCP6Config *dhcp6,
}
/*
- * 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)
+ * Parse IP address from string to NMIPAddress stucture.
+ * ip_str is the IP address in the form address/prefix
*/
-NMIP6Address *
-nmc_parse_and_build_ip6_address (const char *ip_str, const char *gw_str, GError **error)
+NMIPAddress *
+nmc_parse_and_build_address (int family, const char *ip_str, GError **error)
{
- NMIP6Address *addr = NULL;
- struct in6_addr ip_addr, gw_addr;
+ int max_prefix = (family == AF_INET) ? 32 : 128;
+ NMIPAddress *addr = NULL;
+ const char *ip;
char *tmp;
char *plen;
long int prefix;
+ GError *local = NULL;
g_return_val_if_fail (ip_str != NULL, NULL);
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
@@ -456,105 +369,71 @@ nmc_parse_and_build_ip6_address (const char *ip_str, const char *gw_str, GError
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;
- }
+ ip = tmp;
- prefix = 128;
+ prefix = max_prefix;
if (plen) {
- if (!nmc_string_to_int (plen, TRUE, 1, 128, &prefix)) {
+ if (!nmc_string_to_int (plen, TRUE, 1, max_prefix, &prefix)) {
g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
- _("invalid prefix '%s'; <1-128> allowed"), plen);
+ _("invalid prefix '%s'; <1-%d> allowed"), plen, max_prefix);
goto finish;
}
}
- if (inet_pton (AF_INET6, gw_str ? gw_str : "::", &gw_addr) < 1) {
+ addr = nm_ip_address_new (family, ip, (guint32) prefix, &local);
+ if (!addr) {
g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
- _("invalid gateway '%s'"), gw_str);
- goto finish;
+ _("invalid IP address: %s"), local->message);
+ g_clear_error (&local);
}
- 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:
+ * nmc_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.
+ * Parse route from strings and return an #NMIPRoute
*
* 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)
+NMIPRoute *
+nmc_parse_and_build_route (int family,
+ const char *first,
+ const char *second,
+ const char *third,
+ GError **error)
{
- int max_prefix;
- char *tmp, *plen;
+ int max_prefix = (family == AF_INET) ? 32 : 128;
+ char *dest = NULL, *plen = NULL;
+ const char *next_hop = NULL;
+ const char *canon_dest;
+ long int prefix = max_prefix, metric = -1;
+ NMIPRoute *route = NULL;
gboolean success = FALSE;
+ GError *local = NULL;
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 */
+ dest = g_strdup (first);
+ plen = strchr (dest, '/'); /* 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)) {
+ if (!nmc_string_to_int (plen, TRUE, 1, max_prefix, &prefix)) {
g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
_("invalid prefix '%s'; <1-%d> allowed"),
plen, max_prefix);
@@ -563,113 +442,49 @@ _parse_and_build_route (int family,
}
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);
+ if (third || nm_utils_ipaddr_valid (family, second))
+ next_hop = second;
+ else {
+ /* 'second' can be a metric */
+ if (!nmc_string_to_int (second, TRUE, 0, G_MAXUINT32, &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;
- } 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)) {
+ if (!nmc_string_to_int (third, TRUE, 0, G_MAXUINT32, &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))) {
+ route = nm_ip_route_new (family, dest, prefix, next_hop, metric, &local);
+ if (!route) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("invalid route: %s"), local->message);
+ g_clear_error (&local);
+ goto finish;
+ }
+
+ /* We don't accept default routes as NetworkManager handles it
+ * itself. But we have to check this after @route has normalized the
+ * dest string.
+ */
+ canon_dest = nm_ip_route_get_dest (route);
+ if (!strcmp (canon_dest, "0.0.0.0") || !strcmp (canon_dest, "::")) {
g_set_error_literal (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
_("default route cannot be added (NetworkManager handles it by itself)"));
+ g_clear_pointer (&route, nm_ip_route_unref);
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);
- }
+ g_free (dest);
return route;
}
@@ -897,7 +712,7 @@ nmc_device_reason_to_string (NMDeviceStateReason reason)
}
-/* Max priority values from libnm-util/nm-setting-vlan.c */
+/* Max priority values from libnm-core/nm-setting-vlan.c */
#define MAX_SKB_PRIO G_MAXUINT32
#define MAX_8021P_PRIO 7 /* Max 802.1p priority */
@@ -1024,7 +839,7 @@ nmc_team_check_config (const char *config, char **out_config, GError **error)
/*
* nmc_find_connection:
- * @list: list of NMConnections to search in
+ * @connections: array 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
@@ -1039,21 +854,20 @@ nmc_team_check_config (const char *config, char **out_config, GError **error)
* Returns: found connection, or %NULL
*/
NMConnection *
-nmc_find_connection (GSList *list,
+nmc_find_connection (const GPtrArray *connections,
const char *filter_type,
const char *filter_val,
- GSList **start)
+ int *start)
{
NMConnection *connection;
NMConnection *found = NULL;
- GSList *iterator;
+ int i;
const char *id;
const char *uuid;
const char *path, *path_num;
- iterator = (start && *start) ? *start : list;
- while (iterator) {
- connection = NM_CONNECTION (iterator->data);
+ for (i = start ? *start : 0; i < connections->len; i++) {
+ connection = NM_CONNECTION (connections->pdata[i]);
id = nm_connection_get_id (connection);
uuid = nm_connection_get_uuid (connection);
@@ -1074,20 +888,105 @@ nmc_find_connection (GSList *list,
if (!start)
return connection;
if (found) {
- *start = iterator;
+ *start = i;
return found;
}
found = connection;
}
-
- iterator = g_slist_next (iterator);
}
if (start)
- *start = NULL;
+ *start = 0;
return found;
}
+static gboolean
+get_secrets_from_user (const char *request_id,
+ const char *title,
+ const char *msg,
+ gboolean ask,
+ GHashTable *pwds_hash,
+ GPtrArray *secrets)
+{
+ int i;
+
+ for (i = 0; i < secrets->len; i++) {
+ NMSecretAgentSimpleSecret *secret = secrets->pdata[i];
+ char *pwd = NULL;
+
+ /* First try to find the password in provided passwords file,
+ * then ask user. */
+ if (pwds_hash && (pwd = g_hash_table_lookup (pwds_hash, secret->prop_name))) {
+ pwd = g_strdup (pwd);
+ } else {
+ g_print ("%s\n", msg);
+ if (ask) {
+ if (secret->value) {
+ /* Prefill the password if we have it. */
+ rl_startup_hook = nmc_rl_set_deftext;
+ nmc_rl_pre_input_deftext = g_strdup (secret->value);
+ }
+ pwd = nmc_readline ("%s (%s): ", secret->name, secret->prop_name);
+ if (!pwd)
+ pwd = g_strdup ("");
+ } else {
+ g_printerr (_("Warning: password for '%s' not given in 'passwd-file' "
+ "and nmcli cannot ask without '--ask' option.\n"),
+ secret->prop_name);
+ }
+ }
+ /* No password provided, cancel the secrets. */
+ if (!pwd)
+ return FALSE;
+ g_free (secret->value);
+ secret->value = pwd;
+ }
+ return TRUE;
+}
+
+/**
+ * nmc_secrets_requested:
+ * @agent: the #NMSecretAgentSimple
+ * @request_id: request ID, to eventually pass to
+ * nm_secret_agent_simple_response()
+ * @title: a title for the password request
+ * @msg: a prompt message for the password request
+ * @secrets: (element-type #NMSecretAgentSimpleSecret): array of secrets
+ * being requested.
+ * @user_data: user data passed to the function
+ *
+ * This function is used as a callback for "request-secrets" signal of
+ * NMSecretAgentSimpleSecret.
+*/
+void
+nmc_secrets_requested (NMSecretAgentSimple *agent,
+ const char *request_id,
+ const char *title,
+ const char *msg,
+ GPtrArray *secrets,
+ gpointer user_data)
+{
+ NmCli *nmc = (NmCli *) user_data;
+ gboolean success = FALSE;
+
+ if (nmc->print_output == NMC_PRINT_PRETTY)
+ nmc_terminal_erase_line ();
+
+ success = get_secrets_from_user (request_id, title, msg, nmc->in_editor || nmc->ask,
+ nmc->pwds_hash, secrets);
+ if (success)
+ nm_secret_agent_simple_response (agent, request_id, secrets);
+ else {
+ /* Unregister our secret agent on failure, so that another agent
+ * may be tried */
+ if (nmc->secret_agent) {
+ nm_secret_agent_old_unregister (nmc->secret_agent, NULL, NULL);
+ g_clear_object (&nmc->secret_agent);
+ }
+ }
+}
+
+
/**
* nmc_cleanup_readline:
*
@@ -1101,6 +1000,32 @@ nmc_cleanup_readline (void)
rl_cleanup_after_signal ();
}
+
+static gboolean nmcli_in_readline = FALSE;
+static pthread_mutex_t readline_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+gboolean
+nmc_get_in_readline (void)
+{
+ gboolean in_readline;
+
+ pthread_mutex_lock (&readline_mutex);
+ in_readline = nmcli_in_readline;
+ pthread_mutex_unlock (&readline_mutex);
+ return in_readline;
+}
+
+void
+nmc_set_in_readline (gboolean in_readline)
+{
+ pthread_mutex_lock (&readline_mutex);
+ nmcli_in_readline = in_readline;
+ pthread_mutex_unlock (&readline_mutex);
+}
+
+/* Global variable defined in nmcli.c */
+extern NmCli nm_cli;
+
/**
* nmc_readline:
* @prompt_fmt: prompt to print (telling user what to enter). It is standard
@@ -1108,6 +1033,9 @@ nmc_cleanup_readline (void)
* @...: a list of arguments according to the @prompt_fmt format string
*
* Wrapper around libreadline's readline() function.
+ * If user pressed Ctrl-C, readline() is called again (if not in editor and
+ * line is empty, nmcli will quit).
+ * If user pressed Ctrl-D on empty line, nmcli will quit.
*
* Returns: the user provided string. In case the user entered empty string,
* this function returns NULL.
@@ -1122,17 +1050,52 @@ nmc_readline (const char *prompt_fmt, ...)
prompt = g_strdup_vprintf (prompt_fmt, args);
va_end (args);
+readline_mark:
+ /* We are in readline -> Ctrl-C should not quit nmcli */
+ nmc_set_in_readline (TRUE);
str = readline (prompt);
- /* Return NULL, not empty string */
- if (str && *str == '\0') {
- g_free (str);
- str = NULL;
- }
+ /* We are outside readline -> Ctrl-C should quit nmcli */
+ nmc_set_in_readline (FALSE);
+ /* Add string to the history */
if (str && *str)
add_history (str);
+ /*-- React on Ctrl-C and Ctrl-D --*/
+ /* We quit on Ctrl-D when line is empty */
+ if (str == NULL) {
+ /* Send SIGQUIT to itself */
+ nmc_set_sigquit_internal ();
+ kill (getpid (), SIGQUIT);
+ /* Sleep in this thread so that we don't do anything else until exit */
+ for (;;)
+ sleep (3);
+ }
+ /* Ctrl-C */
+ if (nmc_seen_sigint ()) {
+ nmc_clear_sigint ();
+ if (nm_cli.in_editor || *str) {
+ /* In editor, or the line is not empty */
+ /* Call readline again to get new prompt (repeat) */
+ g_free (str);
+ goto readline_mark;
+ } else {
+ /* Not in editor and line is empty */
+ /* Send SIGQUIT to itself */
+ nmc_set_sigquit_internal ();
+ kill (getpid (), SIGQUIT);
+ /* Sleep in this thread so that we don't do anything else until exit */
+ for (;;)
+ sleep (3);
+ }
+ }
g_free (prompt);
+
+ /* Return NULL, not empty string */
+ if (str && *str == '\0') {
+ g_free (str);
+ str = NULL;
+ }
return str;
}
@@ -1166,3 +1129,18 @@ nmc_rl_gen_func_basic (const char *text, int state, const char **words)
return NULL;
}
+/* for pre-filling a string to readline prompt */
+char *nmc_rl_pre_input_deftext;
+
+int
+nmc_rl_set_deftext (void)
+{
+ if (nmc_rl_pre_input_deftext && rl_startup_hook) {
+ rl_insert_text (nmc_rl_pre_input_deftext);
+ g_free (nmc_rl_pre_input_deftext);
+ nmc_rl_pre_input_deftext = NULL;
+ rl_startup_hook = NULL;
+ }
+ return 0;
+}
+
diff --git a/cli/src/common.h b/clients/cli/common.h
index 228375b97..8bb043f4d 100644
--- a/cli/src/common.h
+++ b/clients/cli/common.h
@@ -16,32 +16,22 @@
* 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 - 2014 Red Hat, Inc.
+ * Copyright 2012 - 2014 Red Hat, Inc.
*/
#ifndef NMC_COMMON_H
#define NMC_COMMON_H
-#include <glib.h>
-
-#include <nm-ip4-config.h>
-#include <nm-ip6-config.h>
-#include <nm-dhcp4-config.h>
-#include <nm-dhcp6-config.h>
-#include <nm-device.h>
-
#include "nmcli.h"
+#include "nm-secret-agent-simple.h"
-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);
+gboolean print_ip4_config (NMIPConfig *cfg4, NmCli *nmc, const char *group_prefix, const char *one_field);
+gboolean print_ip6_config (NMIPConfig *cfg6, NmCli *nmc, const char *group_prefix, const char *one_field);
+gboolean print_dhcp4_config (NMDhcpConfig *dhcp4, NmCli *nmc, const char *group_prefix, const char *one_field);
+gboolean print_dhcp6_config (NMDhcpConfig *dhcp6, NmCli *nmc, const char *group_prefix, const char *one_field);
-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);
+NMIPAddress *nmc_parse_and_build_address (int family, const char *ip_str, GError **error);
+NMIPRoute *nmc_parse_and_build_route (int family, 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);
@@ -54,13 +44,26 @@ nmc_vlan_parse_priority_maps (const char *priority_map,
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,
+NMConnection *nmc_find_connection (const GPtrArray *connections,
const char *filter_type,
const char *filter_val,
- GSList **start);
+ int *start);
+
+void nmc_secrets_requested (NMSecretAgentSimple *agent,
+ const char *request_id,
+ const char *title,
+ const char *msg,
+ GPtrArray *secrets,
+ gpointer user_data);
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);
+gboolean nmc_get_in_readline (void);
+void nmc_set_in_readline (gboolean in_readline);
+
+/* for pre-filling a string to readline prompt */
+extern char *nmc_rl_pre_input_deftext;
+int nmc_rl_set_deftext (void);
#endif /* NMC_COMMON_H */
diff --git a/cli/src/connections.c b/clients/cli/connections.c
index d17f7f126..5de9cc9d1 100644
--- a/cli/src/connections.c
+++ b/clients/cli/connections.c
@@ -14,15 +14,13 @@
* 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 - 2014 Red Hat, Inc.
+ * Copyright 2010 - 2014 Red Hat, Inc.
*/
#include "config.h"
#include <glib.h>
#include <glib/gi18n.h>
-#include <dbus/dbus.h>
-#include <dbus/dbus-glib.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
@@ -33,32 +31,12 @@
#include <readline/readline.h>
#include <readline/history.h>
-#include <nm-client.h>
-#include <nm-device-ethernet.h>
-#include <nm-device-adsl.h>
-#include <nm-device-wifi.h>
-#if WITH_WIMAX
-#include <nm-device-wimax.h>
-#endif
-#include <nm-device-modem.h>
-#include <nm-device-bt.h>
-#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>
-#include <nm-vpn-connection.h>
-#include <nm-utils.h>
-
#include "utils.h"
#include "common.h"
#include "settings.h"
#include "connections.h"
-
-/* Activation timeout waiting for bond/team/bridge slaves (in seconds) */
-#define SLAVES_UP_TIMEOUT 10
+#include "nm-secret-agent-simple.h"
+#include "polkit-agent.h"
/* define some prompts for connection editor */
#define EDITOR_PROMPT_SETTING _("Setting name? ")
@@ -85,15 +63,16 @@ static NmcOutputField nmc_fields_con_show[] = {
{"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 */
+ {"AUTOCONNECT-PRIORITY", N_("AUTOCONNECT-PRIORITY"), 10}, /* 6 */
+ {"READONLY", N_("READONLY"), 10}, /* 7 */
+ {"DBUS-PATH", N_("DBUS-PATH"), 42}, /* 8 */
+ {"ACTIVE", N_("ACTIVE"), 10}, /* 9 */
+ {"DEVICE", N_("DEVICE"), 10}, /* 10 */
+ {"STATE", N_("STATE"), 12}, /* 11 */
+ {"ACTIVE-PATH", N_("ACTIVE-PATH"), 51}, /* 12 */
{NULL, NULL, 0}
};
-#define NMC_FIELDS_CON_SHOW_ALL "NAME,UUID,TYPE,TIMESTAMP,TIMESTAMP-REAL,AUTOCONNECT,READONLY,DBUS-PATH,"\
+#define NMC_FIELDS_CON_SHOW_ALL "NAME,UUID,TYPE,TIMESTAMP,TIMESTAMP-REAL,AUTOCONNECT,AUTOCONNECT-PRIORITY,READONLY,DBUS-PATH,"\
"ACTIVE,DEVICE,STATE,ACTIVE-PATH"
#define NMC_FIELDS_CON_SHOW_COMMON "NAME,UUID,TYPE,DEVICE"
@@ -247,16 +226,9 @@ static NmcOutputField nmc_fields_con_active_details_groups[] = {
#define CON_SHOW_DETAIL_GROUP_PROFILE "profile"
#define CON_SHOW_DETAIL_GROUP_ACTIVE "active"
-typedef struct {
- NmCli *nmc;
- int argc;
- char **argv;
-} ArgsInfo;
-
/* glib main loop variable - defined in nmcli.c */
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 */
@@ -276,248 +248,254 @@ static char *gen_connection_types (const char *text, int state);
static void
usage (void)
{
- fprintf (stderr,
- _("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"
+ g_printerr (_("Usage: nmcli connection { COMMAND | help }\n\n"
+ "COMMAND := { show | up | down | add | modify | edit | delete | reload | load }\n\n"
+ " show [--active] [[--show-secrets] [id | uuid | path | apath] <ID>] ...\n\n"
#if WITH_WIMAX
- " up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n\n"
+ " up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>] [passwd-file <file with passwords>]\n\n"
#else
- " up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>]\n\n"
+ " up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [passwd-file <file with passwords>]\n\n"
#endif
- " 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"));
+ " 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"));
}
static void
usage_connection_show (void)
{
- 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"));
+ g_printerr (_("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] [--show-secrets] [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. --show-secrets option will reveal associated secrets as well.\n"));
}
static void
usage_connection_up (void)
{
- 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"));
+ g_printerr (_("Usage: nmcli connection up { ARGUMENTS | help }\n"
+ "\n"
+ "ARGUMENTS := [id | uuid | path] <ID> [ifname <ifname>] [ap <BSSID>] [nsp <name>] [passwd-file <file with passwords>]\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>] [passwd-file <file with passwords>]\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"
+ "passwd-file - file with password(s) required to activate the connection\n\n"));
}
static void
usage_connection_down (void)
{
- 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"));
+ g_printerr (_("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 void
usage_connection_add (void)
{
- 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"));
+ g_printerr (_("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"
+ " [mode infrastructure|ap|adhoc]\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"
+ " [lacp-rate slow (0) | fast (1)]\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"));
}
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"));
+ g_printerr (_("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 void
usage_connection_edit (void)
{
- 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"));
+ g_printerr (_("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"));
}
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"));
+ g_printerr (_("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"));
}
static void
usage_connection_reload (void)
{
- fprintf (stderr,
- _("Usage: nmcli connection reload { help }\n"
- "\n"
- "Reload all connection files from disk.\n\n"));
+ g_printerr (_("Usage: nmcli connection reload { help }\n"
+ "\n"
+ "Reload all connection files from disk.\n\n"));
}
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"));
-}
-
-
-/* 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
-};
+ g_printerr (_("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"));
+}
+
+static gboolean
+usage_connection_second_level (const char *cmd)
+{
+ gboolean ret = TRUE;
+
+ if (matches (cmd, "show") == 0)
+ usage_connection_show ();
+ else if (matches (cmd, "up") == 0)
+ usage_connection_up ();
+ else if (matches (cmd, "down") == 0)
+ usage_connection_down ();
+ else if (matches (cmd, "add") == 0)
+ usage_connection_add ();
+ else if (matches (cmd, "modify") == 0)
+ usage_connection_modify ();
+ else if (matches (cmd, "edit") == 0)
+ usage_connection_edit ();
+ else if (matches (cmd, "delete") == 0)
+ usage_connection_delete ();
+ else if (matches (cmd, "reload") == 0)
+ usage_connection_reload ();
+ else if (matches (cmd, "load") == 0)
+ usage_connection_load ();
+ else
+ ret = FALSE;
+ return ret;
+}
/* quit main loop */
static void
@@ -567,7 +545,7 @@ active_connection_state_to_string (NMActiveConnectionState state)
}
static const char *
-vpn_connection_state_to_string (NMVPNConnectionState state)
+vpn_connection_state_to_string (NMVpnConnectionState state)
{
switch (state) {
case NM_VPN_CONNECTION_STATE_PREPARE:
@@ -603,7 +581,7 @@ get_ac_device_string (NMActiveConnection *active)
/* 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++) {
+ for (i = 0; i < devices->len; i++) {
NMDevice *device = g_ptr_array_index (devices, i);
const char *dev_iface = nm_device_get_iface (device);
@@ -621,16 +599,19 @@ get_ac_device_string (NMActiveConnection *active)
static NMActiveConnection *
get_ac_for_connection (const GPtrArray *active_cons, NMConnection *connection)
{
- const char *con_path;
+ const char *con_path, *ac_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++) {
+ for (i = 0; i < active_cons->len; i++) {
NMActiveConnection *candidate = g_ptr_array_index (active_cons, i);
+ NMRemoteConnection *con;
- if (!g_strcmp0 (nm_active_connection_get_connection (candidate), con_path)) {
+ con = nm_active_connection_get_connection (candidate);
+ ac_con_path = con ? nm_connection_get_path (NM_CONNECTION (con)) : NULL;
+ if (!g_strcmp0 (ac_con_path, con_path)) {
ac = candidate;
break;
}
@@ -638,26 +619,30 @@ get_ac_for_connection (const GPtrArray *active_cons, NMConnection *connection)
return ac;
}
-static NMConnection *
-get_connection_for_active (const GSList *con_list, NMActiveConnection *active)
+/* Put secrets into local connection. */
+static void
+update_secrets_in_connection (NMRemoteConnection *remote, NMConnection *local)
{
- const GSList *iter;
- const char *path;
-
- path = nm_active_connection_get_connection (active);
- g_return_val_if_fail (path != NULL, NULL);
-
- for (iter = con_list; iter; iter = g_slist_next (iter)) {
- NMConnection *candidate = NM_CONNECTION (iter->data);
+ GVariant *secrets;
+ int i;
+ GError *error = NULL;
- if (strcmp (nm_connection_get_path (candidate), path) == 0)
- return candidate;
+ for (i = 0; nmc_fields_settings_names[i].name; i++) {
+ secrets = nm_remote_connection_get_secrets (remote, nmc_fields_settings_names[i].name, NULL, NULL);
+ if (secrets) {
+ if (!nm_connection_update_secrets (local, NULL, secrets, &error) && error) {
+ g_printerr (_("Error updating secrets for %s: %s\n"),
+ nmc_fields_settings_names[i].name,
+ error->message);
+ g_clear_error (&error);
+ }
+ g_variant_unref (secrets);
+ }
}
- return NULL;
}
static gboolean
-nmc_connection_profile_details (NMConnection *connection, NmCli *nmc)
+nmc_connection_profile_details (NMConnection *connection, NmCli *nmc, gboolean secrets)
{
GError *error = NULL;
GArray *print_settings_array;
@@ -700,7 +685,7 @@ nmc_connection_profile_details (NMConnection *connection, NmCli *nmc)
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 */
+ g_print ("\n"); /* Empty line */
was_output = FALSE;
@@ -709,7 +694,7 @@ nmc_connection_profile_details (NMConnection *connection, NmCli *nmc)
setting = nm_connection_get_setting_by_name (connection, nmc_fields_settings_names[section_idx].name);
if (setting) {
- setting_details (setting, nmc, prop_name);
+ setting_details (setting, nmc, prop_name, secrets);
was_output = TRUE;
continue;
}
@@ -724,7 +709,7 @@ nmc_connection_profile_details (NMConnection *connection, NmCli *nmc)
static NMActiveConnection *
find_active_connection (const GPtrArray *active_cons,
- const GSList *cons,
+ const GPtrArray *cons,
const char *filter_type,
const char *filter_val,
int *idx)
@@ -734,21 +719,21 @@ find_active_connection (const GPtrArray *active_cons,
const char *path, *a_path, *path_num, *a_path_num;
const char *id;
const char *uuid;
- NMConnection *con;
+ NMRemoteConnection *con;
NMActiveConnection *found = NULL;
- for (i = start; active_cons && (i < active_cons->len); i++) {
+ for (i = start; 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));
+ con = nm_active_connection_get_connection (candidate);
+
+ id = nm_active_connection_get_id (candidate);
uuid = nm_active_connection_get_uuid (candidate);
+ path = con ? nm_connection_get_path (NM_CONNECTION (con)) : NULL;
path_num = path ? strrchr (path, '/') + 1 : NULL;
+ a_path = nm_object_get_path (NM_OBJECT (candidate));
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
@@ -787,6 +772,7 @@ fill_output_connection (gpointer data, gpointer user_data, gboolean active_only)
time_t timestamp_real;
char *timestamp_str;
char *timestamp_real_str = "";
+ char *prio_str;
NmcOutputField *arr;
NMActiveConnection *ac = NULL;
const char *ac_path = NULL;
@@ -814,6 +800,7 @@ fill_output_connection (gpointer data, gpointer user_data, gboolean active_only)
timestamp_real_str = g_malloc0 (64);
strftime (timestamp_real_str, 64, "%c", localtime (&timestamp_real));
}
+ prio_str = g_strdup_printf ("%u", nm_setting_connection_get_autoconnect_priority (s_con));
arr = nmc_dup_fields_array (nmc_fields_con_show,
sizeof (nmc_fields_con_show),
@@ -824,12 +811,45 @@ fill_output_connection (gpointer data, gpointer user_data, gboolean active_only)
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);
+ set_val_str (arr, 6, prio_str);
+ set_val_strc (arr, 7, nm_setting_connection_get_read_only (s_con) ? _("yes") : _("no"));
+ set_val_strc (arr, 8, nm_connection_get_path (connection));
+ set_val_strc (arr, 9, ac ? _("yes") : _("no"));
+ set_val_str (arr, 10, ac_dev);
+ set_val_strc (arr, 11, ac_state);
+ set_val_strc (arr, 12, ac_path);
+
+ g_ptr_array_add (nmc->output_data, arr);
+}
+
+static void
+fill_output_connection_for_invisible (NMActiveConnection *ac, NmCli *nmc)
+{
+ NmcOutputField *arr;
+ const char *ac_path = NULL;
+ const char *ac_state = NULL;
+ char *ac_dev = NULL;
+
+ 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);
+
+ arr = nmc_dup_fields_array (nmc_fields_con_show,
+ sizeof (nmc_fields_con_show),
+ 0);
+ set_val_strc (arr, 0, nm_active_connection_get_id (ac));
+ set_val_strc (arr, 1, nm_active_connection_get_uuid (ac));
+ set_val_strc (arr, 2, nm_active_connection_get_connection_type (ac));
+ set_val_strc (arr, 3, NULL);
+ set_val_strc (arr, 4, NULL);
+ set_val_strc (arr, 5, NULL);
+ set_val_strc (arr, 6, NULL);
+ set_val_strc (arr, 7, NULL);
+ set_val_strc (arr, 8, NULL);
+ set_val_strc (arr, 9, _("yes"));
+ set_val_str (arr, 10, ac_dev);
+ set_val_strc (arr, 11, ac_state);
+ set_val_strc (arr, 12, ac_path);
g_ptr_array_add (nmc->output_data, arr);
}
@@ -840,25 +860,33 @@ fill_output_active_connection (NMActiveConnection *active,
gboolean with_group,
guint32 o_flags)
{
- GSList *iter;
- const char *active_path;
+ NMRemoteConnection *con;
NMSettingConnection *s_con;
const GPtrArray *devices;
GString *dev_str;
NMActiveConnectionState state;
+ NMDevice *master;
+ const char *con_path = NULL, *con_zone = NULL;
int i;
- 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);
+ con = nm_active_connection_get_connection (active);
+ if (con) {
+ con_path = nm_connection_get_path (NM_CONNECTION (con));
+ s_con = nm_connection_get_setting_connection (NM_CONNECTION (con));
+ g_assert (s_con != NULL);
+ con_zone = nm_setting_connection_get_zone (s_con);
+ }
+
state = nm_active_connection_get_state (active);
+ master = nm_active_connection_get_master (active);
/* 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++) {
+ for (i = 0; i < devices->len; i++) {
NMDevice *device = g_ptr_array_index (devices, i);
const char *dev_iface = nm_device_get_iface (device);
@@ -881,38 +909,52 @@ fill_output_active_connection (NMActiveConnection *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, 1-idx_start, nm_active_connection_get_id (active));
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, 7-idx_start, nm_active_connection_get_specific_object_path (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));
+ set_val_strc (arr, 10-idx_start, con_path);
+ set_val_strc (arr, 11-idx_start, con_zone);
+ set_val_strc (arr, 12-idx_start, master ? nm_object_get_path (NM_OBJECT (master)) : NULL);
- for (iter = con_list; iter; iter = g_slist_next (iter)) {
- NMConnection *connection = (NMConnection *) iter->data;
- const char *con_path = nm_connection_get_path (connection);
+ g_ptr_array_add (nmc->output_data, arr);
- if (!strcmp (active_path, con_path)) {
- /* This connection is active */
- s_con = nm_connection_get_setting_connection (connection);
- g_assert (s_con != NULL);
+ g_string_free (dev_str, FALSE);
+}
- /* Fill field values that depend on NMConnection */
- 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));
+static void
+fill_output_for_all_invisible (NmCli *nmc)
+{
+ const GPtrArray *acons;
+ int a, c;
- break;
+ g_return_if_fail (nmc != NULL);
+
+ acons = nm_client_get_active_connections (nmc->client);
+ for (a = 0; a < acons->len; a++) {
+ gboolean found = FALSE;
+ NMActiveConnection *acon = g_ptr_array_index (acons, a);
+ const char *a_uuid = nm_active_connection_get_uuid (acon);
+
+ for (c = 0; c < nmc->connections->len; c++) {
+ NMConnection *con = g_ptr_array_index (nmc->connections, c);
+ const char *c_uuid = nm_connection_get_uuid (con);
+
+ if (strcmp (a_uuid, c_uuid) == 0) {
+ found = TRUE;
+ break;
+ }
}
- }
- g_ptr_array_add (nmc->output_data, arr);
- g_string_free (dev_str, FALSE);
+ /* Active connection is not in connections list */
+ if (!found)
+ fill_output_connection_for_invisible (acon, nmc);
+ }
}
typedef struct {
@@ -1051,7 +1093,7 @@ nmc_active_connection_details (NMActiveConnection *acon, NmCli *nmc)
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 */
+ g_print ("\n"); /* Empty line */
was_output = FALSE;
@@ -1079,7 +1121,7 @@ nmc_active_connection_details (NMActiveConnection *acon, NmCli *nmc)
/* 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);
+ NMIPConfig *cfg4 = nm_active_connection_get_ip4_config (acon);
b1 = print_ip4_config (cfg4, nmc, "IP4", group_fld);
was_output = was_output || b1;
@@ -1088,7 +1130,7 @@ nmc_active_connection_details (NMActiveConnection *acon, NmCli *nmc)
/* 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);
+ NMDhcpConfig *dhcp4 = nm_active_connection_get_dhcp4_config (acon);
b1 = print_dhcp4_config (dhcp4, nmc, "DHCP4", group_fld);
was_output = was_output || b1;
@@ -1097,7 +1139,7 @@ nmc_active_connection_details (NMActiveConnection *acon, NmCli *nmc)
/* 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);
+ NMIPConfig *cfg6 = nm_active_connection_get_ip6_config (acon);
b1 = print_ip6_config (cfg6, nmc, "IP6", group_fld);
was_output = was_output || b1;
@@ -1106,7 +1148,7 @@ nmc_active_connection_details (NMActiveConnection *acon, NmCli *nmc)
/* 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);
+ NMDhcpConfig *dhcp6 = nm_active_connection_get_dhcp6_config (acon);
b1 = print_dhcp6_config (dhcp6, nmc, "DHCP6", group_fld);
was_output = was_output || b1;
@@ -1117,14 +1159,15 @@ nmc_active_connection_details (NMActiveConnection *acon, NmCli *nmc)
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;
- NMVPNConnectionState vpn_state;
- char *type_str, *banner_str, *vpn_state_str;
+ NMSettingVpn *s_vpn;
+ NMVpnConnectionState vpn_state;
+ char *type_str, *banner_str = NULL, *vpn_state_str;
+ const char *banner;
const char *username = NULL;
char **vpn_data_array = NULL;
guint32 items_num;
- con = get_connection_for_active (nmc->system_connections, acon);
+ con = NM_CONNECTION (nm_active_connection_get_connection (acon));
s_con = nm_connection_get_setting_connection (con);
g_assert (s_con != NULL);
@@ -1152,7 +1195,9 @@ nmc_active_connection_details (NMActiveConnection *acon, NmCli *nmc)
}
type_str = get_vpn_connection_type (con);
- banner_str = g_strescape (nm_vpn_connection_get_banner (NM_VPN_CONNECTION (acon)), "");
+ banner = nm_vpn_connection_get_banner (NM_VPN_CONNECTION (acon));
+ if (banner)
+ banner_str = g_strescape (banner, "");
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));
@@ -1296,19 +1341,13 @@ split_required_fields_for_con_show (const char *input,
}
static NMCResultCode
-do_connections_show (NmCli *nmc, gboolean active_only, int argc, char **argv)
+do_connections_show (NmCli *nmc, gboolean active_only, gboolean show_secrets,
+ int argc, char **argv)
{
GError *err = NULL;
char *profile_flds = NULL, *active_flds = NULL;
nmc->should_wait = FALSE;
- 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) {
char *fields_str;
@@ -1316,7 +1355,7 @@ do_connections_show (NmCli *nmc, gboolean active_only, int argc, char **argv)
char *fields_common = NMC_FIELDS_CON_SHOW_COMMON;
NmcOutputField *tmpl, *arr;
size_t tmpl_len;
- GSList *iter;
+ int i;
if (!nmc->required_fields || strcasecmp (nmc->required_fields, "common") == 0)
fields_str = fields_common;
@@ -1341,16 +1380,18 @@ do_connections_show (NmCli *nmc, gboolean active_only, int argc, char **argv)
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);
+ for (i = 0; i < nmc->connections->len; i++) {
+ NMConnection *con = NM_CONNECTION (nmc->connections->pdata[i]);
fill_output_connection (con, nmc, active_only);
}
+ /* Some active connections may not be in connection list, show them here. */
+ fill_output_for_all_invisible (nmc);
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;
+ int pos = 0;
/* multiline mode is default for 'connection show <ID>' */
if (!nmc->mode_specified)
@@ -1363,6 +1404,7 @@ do_connections_show (NmCli *nmc, gboolean active_only, int argc, char **argv)
nmc->required_fields = NULL;
while (argc > 0) {
+ gboolean res;
NMConnection *con;
NMActiveConnection *acon = NULL;
const char *selector = NULL;
@@ -1380,54 +1422,61 @@ do_connections_show (NmCli *nmc, gboolean active_only, int argc, char **argv)
}
/* Find connection by id, uuid, path or apath */
- con = nmc_find_connection (nmc->system_connections, selector, *argv, &pos);
+ con = nmc_find_connection (nmc->connections, selector, *argv, &pos);
if (!con) {
- acon = find_active_connection (active_cons, nmc->system_connections, selector, *argv, NULL);
+ acon = find_active_connection (active_cons, nmc->connections, selector, *argv, NULL);
if (acon)
- con = get_connection_for_active (nmc->system_connections, acon);
+ con = NM_CONNECTION (nm_active_connection_get_connection (acon));
+ }
+
+ if (!con && !acon) {
+ g_string_printf (nmc->return_text, _("Error: %s - no such connection profile."), *argv);
+ nmc->return_value = NMC_RESULT_ERROR_NOT_FOUND;
+ goto finish;
}
- /* Print connection details */
- if (con) {
- gboolean res;
+ /* Print connection details:
+ * Usually we have both static and active connection.
+ * But when a connection is private to a user, another user
+ * may see only the active connection.
+ */
- /* Filter only active connections */
- if (!acon)
- acon = get_ac_for_connection (active_cons, con);
- if (active_only && !acon) {
- next_arg (&argc, &argv);
- continue;
- }
+ /* Filter only active connections */
+ if (!acon)
+ acon = get_ac_for_connection (active_cons, con);
+ if (active_only && !acon) {
+ next_arg (&argc, &argv);
+ continue;
+ }
- /* Show an empty line between connections */
- if (new_line)
- printf ("\n");
+ /* Show an empty line between connections */
+ if (new_line)
+ g_print ("\n");
- /* Show profile configuration */
- if (without_fields || profile_flds) {
+ /* Show profile configuration */
+ if (without_fields || profile_flds) {
+ if (con) {
nmc->required_fields = profile_flds;
- res = nmc_connection_profile_details (con, nmc);
+ if (show_secrets)
+ update_secrets_in_connection (NM_REMOTE_CONNECTION (con), con);
+ res = nmc_connection_profile_details (con, nmc, show_secrets);
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;
- }
+ /* 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: %s - no such connection profile."), *argv);
- nmc->return_value = NMC_RESULT_ERROR_NOT_FOUND;
- goto finish;
}
+ new_line = TRUE;
/* Take next argument.
* But for pos != NULL we have more connections of the same name,
@@ -1463,12 +1512,12 @@ get_default_active_connection (NmCli *nmc, NMDevice **device)
g_return_val_if_fail (*device == NULL, NULL);
connections = nm_client_get_active_connections (nmc->client);
- for (i = 0; connections && (i < connections->len); i++) {
+ for (i = 0; i < connections->len; i++) {
NMActiveConnection *candidate = g_ptr_array_index (connections, i);
const GPtrArray *devices;
devices = nm_active_connection_get_devices (candidate);
- if (!devices || !devices->len)
+ if (!devices->len)
continue;
if (nm_active_connection_get_default (candidate)) {
@@ -1554,7 +1603,7 @@ find_device_for_connection (NmCli *nmc,
NMDevice *found_device = NULL;
const GPtrArray *devices = nm_client_get_devices (nmc->client);
- for (i = 0; devices && (i < devices->len) && !found_device; i++) {
+ for (i = 0; i < devices->len && !found_device; i++) {
NMDevice *dev = g_ptr_array_index (devices, i);
if (iface) {
@@ -1574,7 +1623,7 @@ find_device_for_connection (NmCli *nmc,
const GPtrArray *aps = nm_device_wifi_get_access_points (NM_DEVICE_WIFI (dev));
found_device = NULL; /* Mark as not found; set to the device again later, only if AP matches */
- for (j = 0; aps && (j < aps->len); j++) {
+ for (j = 0; j < aps->len; j++) {
NMAccessPoint *candidate_ap = g_ptr_array_index (aps, j);
const char *candidate_bssid = nm_access_point_get_bssid (candidate_ap);
@@ -1595,7 +1644,7 @@ find_device_for_connection (NmCli *nmc,
const GPtrArray *nsps = nm_device_wimax_get_nsps (NM_DEVICE_WIMAX (dev));
found_device = NULL; /* Mark as not found; set to the device again later, only if NSP matches */
- for (j = 0; nsps && (j < nsps->len); j++) {
+ for (j = 0; j < nsps->len; j++) {
NMWimaxNsp *candidate_nsp = g_ptr_array_index (nsps, j);
const char *candidate_name = nm_wimax_nsp_get_name (candidate_nsp);
@@ -1625,7 +1674,7 @@ find_device_for_connection (NmCli *nmc,
}
static const char *
-vpn_connection_state_reason_to_string (NMVPNConnectionStateReason reason)
+vpn_connection_state_reason_to_string (NMVpnConnectionStateReason reason)
{
switch (reason) {
case NM_VPN_CONNECTION_STATE_REASON_UNKNOWN:
@@ -1658,6 +1707,39 @@ vpn_connection_state_reason_to_string (NMVPNConnectionStateReason reason)
}
static void
+device_state_cb (NMDevice *device, GParamSpec *pspec, gpointer user_data)
+{
+ NmCli *nmc = (NmCli *) user_data;
+ NMActiveConnection *active;
+ NMDeviceState state;
+ NMActiveConnectionState ac_state;
+
+ active = nm_device_get_active_connection (device);
+ state = nm_device_get_state (device);
+
+ ac_state = active ? nm_active_connection_get_state (active) : NM_ACTIVE_CONNECTION_STATE_UNKNOWN;
+
+ if (ac_state == NM_ACTIVE_CONNECTION_STATE_ACTIVATED) {
+ if (nmc->print_output == NMC_PRINT_PRETTY)
+ nmc_terminal_erase_line ();
+ g_print (_("Connection successfully activated (D-Bus active path: %s)\n"),
+ nm_object_get_path (NM_OBJECT (active)));
+ quit ();
+ } else if ( ac_state == NM_ACTIVE_CONNECTION_STATE_ACTIVATING
+ && state == NM_DEVICE_STATE_IP_CONFIG) {
+ if (nmc->print_output == NMC_PRINT_PRETTY)
+ nmc_terminal_erase_line ();
+ g_print (_("Connection successfully activated (master waiting for slaves) (D-Bus active path: %s)\n"),
+ nm_object_get_path (NM_OBJECT (active)));
+ quit ();
+ } else if (active && ac_state != NM_ACTIVE_CONNECTION_STATE_ACTIVATING) {
+ g_string_printf (nmc->return_text, _("Error: Connection activation failed."));
+ nmc->return_value = NMC_RESULT_ERROR_CON_ACTIVATION;
+ quit ();
+ }
+}
+
+static void
active_connection_state_cb (NMActiveConnection *active, GParamSpec *pspec, gpointer user_data)
{
NmCli *nmc = (NmCli *) user_data;
@@ -1668,21 +1750,47 @@ active_connection_state_cb (NMActiveConnection *active, GParamSpec *pspec, gpoin
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)));
+ g_print (_("Connection successfully activated (D-Bus active path: %s)\n"),
+ nm_object_get_path (NM_OBJECT (active)));
+ g_object_unref (active);
quit ();
- } else if ( state == NM_ACTIVE_CONNECTION_STATE_DEACTIVATED
- || state == NM_ACTIVE_CONNECTION_STATE_UNKNOWN) {
+ } else if (state == NM_ACTIVE_CONNECTION_STATE_DEACTIVATED) {
g_string_printf (nmc->return_text, _("Error: Connection activation failed."));
nmc->return_value = NMC_RESULT_ERROR_CON_ACTIVATION;
+ g_object_unref (active);
quit ();
+ } else if (state == NM_ACTIVE_CONNECTION_STATE_ACTIVATING) {
+ /* activating master connection does not automatically activate any slaves, so their
+ * active connection state will not progress beyond ACTIVATING state.
+ * Monitor the device instead. */
+ const GPtrArray *devices;
+ NMDevice *device;
+
+ if (nmc->secret_agent) {
+ NMRemoteConnection *connection = nm_active_connection_get_connection (active);
+
+ nm_secret_agent_simple_enable (NM_SECRET_AGENT_SIMPLE (nmc->secret_agent),
+ nm_connection_get_path (NM_CONNECTION (connection)));
+ }
+
+ devices = nm_active_connection_get_devices (active);
+ device = devices->len ? g_ptr_array_index (devices, 0) : NULL;
+ if ( device
+ && ( NM_IS_DEVICE_BOND (device)
+ || NM_IS_DEVICE_TEAM (device)
+ || NM_IS_DEVICE_BRIDGE (device))) {
+ g_signal_handlers_disconnect_by_func (active, G_CALLBACK (active_connection_state_cb), nmc);
+ g_signal_connect (device, "notify::" NM_DEVICE_STATE, G_CALLBACK (device_state_cb), nmc);
+
+ device_state_cb (device, NULL, nmc);
+ }
}
}
static void
-vpn_connection_state_cb (NMVPNConnection *vpn,
- NMVPNConnectionState state,
- NMVPNConnectionStateReason reason,
+vpn_connection_state_cb (NMVpnConnection *vpn,
+ NMVpnConnectionState state,
+ NMVpnConnectionStateReason reason,
gpointer user_data)
{
NmCli *nmc = (NmCli *) user_data;
@@ -1698,8 +1806,9 @@ vpn_connection_state_cb (NMVPNConnection *vpn,
case NM_VPN_CONNECTION_STATE_ACTIVATED:
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)));
+ g_print (_("VPN connection successfully activated (D-Bus active path: %s)\n"),
+ nm_object_get_path (NM_OBJECT (vpn)));
+ g_object_unref (vpn);
quit ();
break;
@@ -1708,6 +1817,7 @@ vpn_connection_state_cb (NMVPNConnection *vpn,
g_string_printf (nmc->return_text, _("Error: Connection activation failed: %s."),
vpn_connection_state_reason_to_string (reason));
nmc->return_value = NMC_RESULT_ERROR_CON_ACTIVATION;
+ g_object_unref (vpn);
quit ();
break;
@@ -1752,7 +1862,7 @@ progress_device_cb (gpointer user_data)
static gboolean
progress_vpn_cb (gpointer user_data)
{
- NMVPNConnection *vpn = (NMVPNConnection *) user_data;
+ NMVpnConnection *vpn = (NMVpnConnection *) user_data;
const char *str;
str = NM_IS_VPN_CONNECTION (vpn) ?
@@ -1769,46 +1879,23 @@ 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)
+activate_connection_cb (GObject *client, GAsyncResult *result, gpointer user_data)
{
ActivateConnectionInfo *info = (ActivateConnectionInfo *) user_data;
NmCli *nmc = info->nmc;
NMDevice *device = info->device;
+ NMActiveConnection *active;
NMActiveConnectionState state;
const GPtrArray *ac_devs;
+ GError *error = NULL;
+
+ active = nm_client_activate_connection_finish (NM_CLIENT (client), result, &error);
if (error) {
- g_string_printf (nmc->return_text, _("Error: Connection activation failed: %s"), error->message);
+ g_string_printf (nmc->return_text, _("Error: Connection activation failed: %s"),
+ error->message);
+ g_error_free (error);
nmc->return_value = NMC_RESULT_ERROR_CON_ACTIVATION;
quit ();
} else {
@@ -1816,7 +1903,7 @@ activate_connection_cb (NMClient *client, NMActiveConnection *active, GError *er
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;
+ info->device = device = ac_devs->len > 0 ? g_ptr_array_index (ac_devs, 0) : NULL;
}
if (nmc->nowait_flag || state == NM_ACTIVE_CONNECTION_STATE_ACTIVATED) {
@@ -1824,9 +1911,10 @@ activate_connection_cb (NMClient *client, NMActiveConnection *active, GError *er
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)));
+ g_print (_("Connection successfully activated (D-Bus active path: %s)\n"),
+ nm_object_get_path (NM_OBJECT (active)));
}
+ g_object_unref (active);
quit ();
} else {
if (NM_IS_VPN_CONNECTION (active)) {
@@ -1841,6 +1929,7 @@ activate_connection_cb (NMClient *client, NMActiveConnection *active, GError *er
}
} else {
g_signal_connect (active, "notify::state", G_CALLBACK (active_connection_state_cb), nmc);
+ active_connection_state_cb (active, NULL, nmc);
/* Start progress indication showing device states */
if (nmc->print_output == NMC_PRINT_PRETTY) {
@@ -1852,53 +1941,109 @@ 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);
}
-/* 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.
+/**
+ * parse_passwords:
+ * @passwd_file: file with passwords to parse
+ * @error: location to store error, or %NULL
+ *
+ * Parse passwords given in @passwd_file and insert them into a hash table.
+ * Example of @passwd_file contents:
+ * wifi.psk:tajne heslo
+ * 802-1x.password:krakonos
+ * 802-11-wireless-security:leap-password:my leap password
+ *
+ * Returns: hash table with parsed passwords, or %NULL on an error
*/
-static gboolean
-is_connection_virtual (NMConnection *connection)
+static GHashTable *
+parse_passwords (const char *passwd_file, GError **error)
{
- 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);
+ GHashTable *pwds_hash;
+ char *contents = NULL;
+ gsize len = 0;
+ GError *local_err = NULL;
+ char **lines, **iter;
+ char *pwd_spec, *pwd, *prop;
+ const char *setting;
- if (p_key != -1 && parent)
- return TRUE;
+ pwds_hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+
+ if (!passwd_file)
+ return pwds_hash;
+
+ /* Read the passwords file */
+ if (!g_file_get_contents (passwd_file, &contents, &len, &local_err)) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("failed to read passwd-file '%s': %s"),
+ passwd_file, local_err->message);
+ g_error_free (local_err);
+ g_hash_table_destroy (pwds_hash);
+ return NULL;
}
- return FALSE;
+
+ lines = nmc_strsplit_set (contents, "\r\n", -1);
+ for (iter = lines; *iter; iter++) {
+ pwd = strchr (*iter, ':');
+ if (!pwd) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("missing colon in 'password' entry '%s'"), *iter);
+ goto failure;
+ }
+ *(pwd++) = '\0';
+
+ prop = strchr (*iter, '.');
+ if (!prop) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("missing dot in 'password' entry '%s'"), *iter);
+ goto failure;
+ }
+ *(prop++) = '\0';
+
+ setting = *iter;
+ while (g_ascii_isspace (*setting))
+ setting++;
+ /* Accept wifi-sec or wifi instead of cumbersome '802-11-wireless-security' */
+ if (!strcmp (setting, "wifi-sec") || !strcmp (setting, "wifi"))
+ setting = NM_SETTING_WIRELESS_SECURITY_SETTING_NAME;
+ if (nm_setting_lookup_type (setting) == G_TYPE_INVALID) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("invalid setting name in 'password' entry '%s'"), setting);
+ goto failure;
+ }
+
+ pwd_spec = g_strdup_printf ("%s.%s", setting, prop);
+ g_hash_table_insert (pwds_hash, pwd_spec, g_strdup (pwd));
+ }
+ g_strfreev (lines);
+ g_free (contents);
+ return pwds_hash;
+
+failure:
+ g_strfreev (lines);
+ g_free (contents);
+ g_hash_table_destroy (pwds_hash);
+ return NULL;
}
+
+
static gboolean
nmc_activate_connection (NmCli *nmc,
NMConnection *connection,
const char *ifname,
const char *ap,
const char *nsp,
- NMClientActivateFn callback,
+ const char *pwds,
+ GAsyncReadyCallback callback,
GError **error)
{
ActivateConnectionInfo *info;
+
+ GHashTable *pwds_hash;
NMDevice *device = NULL;
const char *spec_object = NULL;
gboolean device_found;
@@ -1911,12 +2056,13 @@ nmc_activate_connection (NmCli *nmc,
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)) {
+ if (!device_found && !nm_connection_is_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;
}
+ g_clear_error (&local);
} else if (ifname) {
device = nm_client_get_device_by_iface (nmc->client, ifname);
if (!device) {
@@ -1930,16 +2076,37 @@ nmc_activate_connection (NmCli *nmc,
return FALSE;
}
+ /* Parse passwords given in passwords file */
+ pwds_hash = parse_passwords (pwds, &local);
+ if (local) {
+ g_propagate_error (error, local);
+ return FALSE;
+ }
+ if (nmc->pwds_hash)
+ g_hash_table_destroy (nmc->pwds_hash);
+ nmc->pwds_hash = pwds_hash;
+
+ /* Create secret agent */
+ nmc->secret_agent = nm_secret_agent_simple_new ("nmcli-connect");
+ if (nmc->secret_agent) {
+ g_signal_connect (nmc->secret_agent, "request-secrets", G_CALLBACK (nmc_secrets_requested), nmc);
+ if (connection) {
+ nm_secret_agent_simple_enable (NM_SECRET_AGENT_SIMPLE (nmc->secret_agent),
+ nm_object_get_path (NM_OBJECT (connection)));
+ }
+ }
+
info = g_malloc0 (sizeof (ActivateConnectionInfo));
info->nmc = nmc;
info->device = device;
- nm_client_activate_connection (nmc->client,
- connection,
- device,
- spec_object,
- callback,
- info);
+ nm_client_activate_connection_async (nmc->client,
+ connection,
+ device,
+ spec_object,
+ NULL,
+ callback,
+ info);
return TRUE;
}
@@ -1950,6 +2117,7 @@ do_connection_up (NmCli *nmc, int argc, char **argv)
const char *ifname = NULL;
const char *ap = NULL;
const char *nsp = NULL;
+ const char *pwds = NULL;
GError *error = NULL;
const char *selector = NULL;
const char *name = NULL;
@@ -1984,8 +2152,14 @@ do_connection_up (NmCli *nmc, int argc, char **argv)
next_arg (&argc, &argv);
}
- if (name)
- connection = nmc_find_connection (nmc->system_connections, selector, name, NULL);
+ if (name) {
+ connection = nmc_find_connection (nmc->connections, selector, name, NULL);
+ if (!connection) {
+ g_string_printf (nmc->return_text, _("Error: Connection '%s' does not exist."), name);
+ nmc->return_value = NMC_RESULT_ERROR_NOT_FOUND;
+ goto error;
+ }
+ }
while (argc > 0) {
if (strcmp (*argv, "ifname") == 0) {
@@ -2017,23 +2191,23 @@ do_connection_up (NmCli *nmc, int argc, char **argv)
nsp = *argv;
}
#endif
- else {
- fprintf (stderr, _("Unknown parameter: %s\n"), *argv);
+ else if (strcmp (*argv, "passwd-file") == 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;
+ }
+
+ pwds = *argv;
+ }
+ else {
+ g_printerr (_("Unknown parameter: %s\n"), *argv);
}
argc--;
argv++;
}
- /* 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;
- }
-
/* 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.
@@ -2041,7 +2215,7 @@ do_connection_up (NmCli *nmc, int argc, char **argv)
nmc->nowait_flag = (nmc->timeout == 0);
nmc->should_wait = TRUE;
- if (!nmc_activate_connection (nmc, connection, ifname, ap, nsp, activate_connection_cb, &error)) {
+ if (!nmc_activate_connection (nmc, connection, ifname, ap, nsp, pwds, 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;
@@ -2061,11 +2235,80 @@ error:
return nmc->return_value;
}
+typedef struct {
+ NmCli *nmc;
+ GSList *queue;
+ guint timeout_id;
+} DeactivateConnectionInfo;
+
+static void deactivate_connection_info_finish (DeactivateConnectionInfo *info,
+ NMActiveConnection *active);
+
+static gboolean
+down_timeout_cb (gpointer user_data)
+{
+ DeactivateConnectionInfo *info = user_data;
+
+ timeout_cb (info->nmc);
+ deactivate_connection_info_finish (info, NULL);
+ return G_SOURCE_REMOVE;
+}
+
+static void
+down_active_connection_state_cb (NMActiveConnection *active,
+ GParamSpec *pspec,
+ DeactivateConnectionInfo *info)
+{
+ if (nm_active_connection_get_state (active) < NM_ACTIVE_CONNECTION_STATE_DEACTIVATED)
+ return;
+
+ if (info->nmc->print_output == NMC_PRINT_PRETTY)
+ nmc_terminal_erase_line ();
+ g_print (_("Connection '%s' successfully deactivated (D-Bus active path: %s)\n"),
+ nm_active_connection_get_id (active), nm_object_get_path (NM_OBJECT (active)));
+
+ deactivate_connection_info_finish (info, active);
+}
+
+static void
+destroy_queue_element (gpointer data)
+{
+ g_signal_handlers_disconnect_matched (data, G_SIGNAL_MATCH_FUNC, 0, 0, 0,
+ down_active_connection_state_cb, NULL);
+ g_object_unref (data);
+}
+
+static void
+deactivate_connection_info_finish (DeactivateConnectionInfo *info,
+ NMActiveConnection *active)
+{
+ if (active) {
+ info->queue = g_slist_remove (info->queue, active);
+ g_signal_handlers_disconnect_by_func (active,
+ down_active_connection_state_cb,
+ info);
+ g_object_unref (active);
+ } else {
+ g_slist_free_full (info->queue, destroy_queue_element);
+ info->queue = NULL;
+ }
+
+ if (info->queue)
+ return;
+
+ if (info->timeout_id)
+ g_source_remove (info->timeout_id);
+ g_slice_free (DeactivateConnectionInfo, info);
+ quit ();
+}
+
static NMCResultCode
do_connection_down (NmCli *nmc, int argc, char **argv)
{
NMActiveConnection *active;
+ DeactivateConnectionInfo *info = NULL;
const GPtrArray *active_cons;
+ GSList *queue = NULL, *iter;
char *line = NULL;
char **arg_arr = NULL;
char **arg_ptr = argv;
@@ -2085,14 +2328,8 @@ do_connection_down (NmCli *nmc, int argc, char **argv)
}
}
- /* 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->timeout == -1)
+ nmc->timeout = 10;
/* Get active connections */
active_cons = nm_client_get_active_connections (nmc->client);
@@ -2112,26 +2349,53 @@ do_connection_down (NmCli *nmc, int argc, char **argv)
}
}
- 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);
+ active = find_active_connection (active_cons, nmc->connections, selector, *arg_ptr, &idx);
+ if (active)
+ queue = g_slist_prepend (queue, active);
+ else {
+ g_printerr (_("Error: '%s' is not an active connection.\n"), *arg_ptr);
+ g_string_printf (nmc->return_text, _("Error: not all active connections found."));
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);
+ if (!queue) {
+ g_string_printf (nmc->return_text, _("Error: no active connection provided."));
+ nmc->return_value = NMC_RESULT_ERROR_NOT_FOUND;
+ goto error;
+ }
+
+ queue = g_slist_reverse (queue);
+
+ if (nmc->timeout > 0) {
+ nmc->should_wait = TRUE;
+
+ info = g_slice_new0 (DeactivateConnectionInfo);
+ info->nmc = nmc;
+ info->timeout_id = g_timeout_add_seconds (nmc->timeout, down_timeout_cb, info);
+ }
+
+ for (iter = queue; iter; iter = g_slist_next (iter)) {
+ active = iter->data;
+
+ if (info) {
+ info->queue = g_slist_prepend (info->queue, g_object_ref (active));
+ g_signal_connect (active,
+ "notify::" NM_ACTIVE_CONNECTION_STATE,
+ G_CALLBACK (down_active_connection_state_cb),
+ info);
+ }
+
+ /* Now deactivate the connection */
+ nm_client_deactivate_connection (nmc->client, active, NULL, NULL);
+ }
error:
- nmc->should_wait = FALSE;
g_strfreev (arg_arr);
+ g_slist_free (queue);
return nmc->return_value;
}
@@ -2203,17 +2467,6 @@ static const NameItem nmc_cdma_settings [] = {
{ 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 },
@@ -2231,7 +2484,7 @@ static const NameItem nmc_adsl_settings [] = {
};
/* PPPoE is a base connection type from historical reasons.
- * See libnm-util/nm-setting.c:_nm_setting_is_base_type()
+ * See libnm-core/nm-setting.c:_nm_setting_is_base_type()
*/
static const NameItem nmc_pppoe_settings [] = {
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
@@ -2495,32 +2748,23 @@ is_setting_mandatory (NMConnection *connection, NMSetting *setting)
/*----------------------------------------------------------------------------*/
static gboolean
-check_and_convert_mac (const char *mac,
- GByteArray **mac_array,
- int type,
- const char *keyword,
- GError **error)
+check_mac (const char *mac,
+ int type,
+ const char *keyword,
+ GError **error)
{
- GByteArray *local_mac_array = NULL;
- g_return_val_if_fail (mac_array == NULL || *mac_array == NULL, FALSE);
+ g_return_val_if_fail (type == ARPHRD_ETHER || type == ARPHRD_INFINIBAND, FALSE);
if (!mac)
return TRUE;
- local_mac_array = nm_utils_hwaddr_atoba (mac, type);
- if (!local_mac_array) {
+ if (!nm_utils_hwaddr_valid (mac, nm_utils_hwaddr_len (type))) {
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;
}
@@ -2529,6 +2773,9 @@ check_and_convert_mtu (const char *mtu, guint32 *mtu_int, GError **error)
{
unsigned long local_mtu_int;
+ if (mtu_int)
+ *mtu_int = 0;
+
if (!mtu)
return TRUE;
@@ -2579,29 +2826,66 @@ check_infiniband_p_key (const char *p_key, guint32 *p_key_int, GError **error)
return TRUE;
}
-/* Checks InfiniBand mode.
- * It accepts shortcuts and normalizes them ('mode' argument is modified on success).
+/**
+ * check_valid_enumeration:
+ * @str: string to check against string array @strings
+ * @strings: string array to check @str againt
+ * @what: what parameter @str belongs to (used in error message)
+ * @what_desc: longer description of @what parameter (used in error message)
+ * @error: location to store an error, or %NULL
+ *
+ * Check whether @str is one of the string of @strings array. It accepts
+ * shortcuts and normalizes them (@str argument is modified on success).
+ *
+ * Returns: %TRUE on success, %FALSE on failure
*/
static gboolean
-check_infiniband_mode (char **mode, GError **error)
+check_valid_enumeration (char **str,
+ const char *strings[],
+ const char *what,
+ const char *what_desc,
+ GError **error)
{
char *tmp;
- const char *checked_mode;
- const char *modes[] = { "datagram", "connected", NULL };
+ const char *checked_str;
- if (!mode || !*mode)
+ if (!str || !*str)
return TRUE;
- tmp = g_strstrip (g_strdup (*mode));
- checked_mode = nmc_string_is_valid (tmp, modes, NULL);
+ tmp = g_strstrip (g_strdup (*str));
+ checked_str = nmc_string_is_valid (tmp, strings, NULL);
g_free (tmp);
- if (checked_mode) {
- g_free (*mode);
- *mode = g_strdup (checked_mode);
- } else
+ if (checked_str) {
+ g_free (*str);
+ *str = g_strdup (checked_str);
+ } else {
+ char *options;
+
+ options = nmc_util_strv_for_display (strings);
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;
+ _("Error: '%s': '%s' is not a valid %s %s."),
+ what, *str, what_desc, options);
+ g_free (options);
+ }
+ return !!checked_str;
+}
+
+/* Checks Wi-Fi mode. */
+static gboolean
+check_wifi_mode (char **mode, GError **error)
+{
+ const char *modes[] = { "infrastructure", "ap", "adhoc", NULL };
+
+ return check_valid_enumeration (mode, modes, "mode", _("Wi-Fi mode"), error);
+}
+
+/* Checks InfiniBand mode. */
+static gboolean
+check_infiniband_mode (char **mode, GError **error)
+{
+ const char *modes[] = { "datagram", "connected", NULL };
+
+ return check_valid_enumeration (mode, modes, "mode", _("InfiniBand transport mode"), error);
}
static gboolean
@@ -2648,9 +2932,9 @@ check_and_convert_vlan_prio_maps (const char *prio_map,
}
static gboolean
-add_ip4_address_to_connection (NMIP4Address *ip4addr, NMConnection *connection)
+add_ip4_address_to_connection (NMIPAddress *ip4addr, NMConnection *connection)
{
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
gboolean ret;
if (!ip4addr)
@@ -2658,22 +2942,22 @@ add_ip4_address_to_connection (NMIP4Address *ip4addr, NMConnection *connection)
s_ip4 = nm_connection_get_setting_ip4_config (connection);
if (!s_ip4) {
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) 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_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
NULL);
}
- ret = nm_setting_ip4_config_add_address (s_ip4, ip4addr);
- nm_ip4_address_unref (ip4addr);
+ ret = nm_setting_ip_config_add_address (s_ip4, ip4addr);
+ nm_ip_address_unref (ip4addr);
return ret;
}
static gboolean
-add_ip6_address_to_connection (NMIP6Address *ip6addr, NMConnection *connection)
+add_ip6_address_to_connection (NMIPAddress *ip6addr, NMConnection *connection)
{
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip6;
gboolean ret;
if (!ip6addr)
@@ -2681,48 +2965,38 @@ add_ip6_address_to_connection (NMIP6Address *ip6addr, NMConnection *connection)
s_ip6 = nm_connection_get_setting_ip6_config (connection);
if (!s_ip6) {
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) 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,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_MANUAL,
NULL);
}
- ret = nm_setting_ip6_config_add_address (s_ip6, ip6addr);
- nm_ip6_address_unref (ip6addr);
+ ret = nm_setting_ip_config_add_address (s_ip6, ip6addr);
+ nm_ip_address_unref (ip6addr);
return ret;
}
static char *
-unique_master_iface_ifname (GSList *list,
- const char *type,
- const char *ifname_property,
+unique_master_iface_ifname (const GPtrArray *connections,
const char *try_name)
{
NMConnection *connection;
- NMSetting *setting;
char *new_name;
unsigned int num = 1;
- GSList *iterator = list;
- char *ifname_val = NULL;
+ int i = 0;
+ const char *ifname = 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) {
+ while (i < connections->len) {
+ connection = NM_CONNECTION (connections->pdata[i]);
+ ifname = nm_connection_get_interface_name (connection);
+ if (g_strcmp0 (new_name, ifname) == 0) {
g_free (new_name);
new_name = g_strdup_printf ("%s%d", try_name, num++);
- iterator = list;
+ i = 0;
} else
- iterator = g_slist_next (iterator);
- g_free (ifname_val);
+ i++;
}
return new_name;
}
@@ -2736,7 +3010,7 @@ _strip_master_prefix (const char *master, const char *(**func)(NMConnection *))
if (g_str_has_prefix (master, "ifname/")) {
master = master + strlen ("ifname/");
if (func)
- *func = nm_connection_get_virtual_iface_name;
+ *func = nm_connection_get_interface_name;
} else if (g_str_has_prefix (master, "uuid/")) {
master = master + strlen ("uuid/");
if (func)
@@ -2761,14 +3035,14 @@ _strip_master_prefix (const char *master, const char *(**func)(NMConnection *))
* Returns: identifier of master connection if found, %NULL otherwise
*/
static const char *
-verify_master_for_slave (GSList *connections,
+verify_master_for_slave (const GPtrArray *connections,
const char *master,
const char *type)
{
NMConnection *connection;
NMSettingConnection *s_con;
const char *con_type, *id, *uuid, *ifname;
- GSList *iterator = connections;
+ int i;
const char *found_by_id = NULL;
const char *out_master = NULL;
const char *(*func) (NMConnection *) = NULL;
@@ -2777,15 +3051,13 @@ verify_master_for_slave (GSList *connections,
return NULL;
master = _strip_master_prefix (master, &func);
- while (iterator) {
- connection = NM_CONNECTION (iterator->data);
+ for (i = 0; i < connections->len; i++) {
+ connection = NM_CONNECTION (connections->pdata[i]);
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);
+ if (g_strcmp0 (con_type, type) != 0)
continue;
- }
if (func) {
/* There was a prefix; only compare to that type. */
if (g_strcmp0 (master, func (connection)) == 0) {
@@ -2798,7 +3070,7 @@ verify_master_for_slave (GSList *connections,
} else {
id = nm_connection_get_id (connection);
uuid = nm_connection_get_uuid (connection);
- ifname = nm_connection_get_virtual_iface_name (connection);
+ ifname = nm_connection_get_interface_name (connection);
if ( g_strcmp0 (master, uuid) == 0
|| g_strcmp0 (master, ifname) == 0) {
out_master = master;
@@ -2807,8 +3079,6 @@ verify_master_for_slave (GSList *connections,
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;
}
@@ -2885,9 +3155,9 @@ want_provide_opt_args (const char *type, int num)
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);
+ g_print (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));
@@ -2903,10 +3173,9 @@ do_questionnaire_ethernet (gboolean ethernet, char **mtu, char **mac, char **clo
{
gboolean once_more;
GError *error = NULL;
- const char *type = ethernet ? _("ethernet") : _("Wi-Fi");
/* Ask for optional arguments */
- if (!want_provide_opt_args (type, 3))
+ if (ethernet && !want_provide_opt_args (_("ethernet"), 3))
return;
if (!*mtu) {
@@ -2914,7 +3183,7 @@ do_questionnaire_ethernet (gboolean ethernet, char **mtu, char **mac, char **clo
*mtu = nmc_readline (_("MTU [auto]: "));
once_more = !check_and_convert_mtu (*mtu, NULL, &error);
if (once_more) {
- printf ("%s\n", error->message);
+ g_print ("%s\n", error->message);
g_clear_error (&error);
g_free (*mtu);
}
@@ -2923,9 +3192,9 @@ do_questionnaire_ethernet (gboolean ethernet, char **mtu, char **mac, char **clo
if (!*mac) {
do {
*mac = nmc_readline (_("MAC [none]: "));
- once_more = !check_and_convert_mac (*mac, NULL, ARPHRD_ETHER, "mac", &error);
+ once_more = !check_mac (*mac, ARPHRD_ETHER, "mac", &error);
if (once_more) {
- printf ("%s\n", error->message);
+ g_print ("%s\n", error->message);
g_clear_error (&error);
g_free (*mac);
}
@@ -2934,9 +3203,9 @@ do_questionnaire_ethernet (gboolean ethernet, char **mtu, char **mac, char **clo
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);
+ once_more = !check_mac (*cloned_mac, ARPHRD_ETHER, "cloned-mac", &error);
if (once_more) {
- printf ("%s\n", error->message);
+ g_print ("%s\n", error->message);
g_clear_error (&error);
g_free (*cloned_mac);
}
@@ -2962,7 +3231,7 @@ do_questionnaire_infiniband (char **mtu, char **mac, char **mode, char **parent,
*mtu = nmc_readline (_("MTU [auto]: "));
once_more = !check_and_convert_mtu (*mtu, NULL, &error);
if (once_more) {
- printf ("%s\n", error->message);
+ g_print ("%s\n", error->message);
g_clear_error (&error);
g_free (*mtu);
}
@@ -2971,9 +3240,9 @@ do_questionnaire_infiniband (char **mtu, char **mac, char **mode, char **parent,
if (!*mac) {
do {
*mac = nmc_readline (_("MAC [none]: "));
- once_more = !check_and_convert_mac (*mac, NULL, ARPHRD_INFINIBAND, "mac", &error);
+ once_more = !check_mac (*mac, ARPHRD_INFINIBAND, "mac", &error);
if (once_more) {
- printf ("%s\n", error->message);
+ g_print ("%s\n", error->message);
g_clear_error (&error);
g_free (*mac);
}
@@ -2986,7 +3255,7 @@ do_questionnaire_infiniband (char **mtu, char **mac, char **mode, char **parent,
*mode = g_strdup ("datagram");
once_more = !check_infiniband_mode (mode, &error);
if (once_more) {
- printf ("%s\n", error->message);
+ g_print ("%s\n", error->message);
g_clear_error (&error);
g_free (*mode);
}
@@ -2997,7 +3266,7 @@ do_questionnaire_infiniband (char **mtu, char **mac, char **mode, char **parent,
*parent = nmc_readline (_("Parent interface [none]: "));
once_more = !check_infiniband_parent (*parent, &error);
if (once_more) {
- printf ("%s\n", error->message);
+ g_print ("%s\n", error->message);
g_clear_error (&error);
g_free (*parent);
}
@@ -3008,24 +3277,49 @@ do_questionnaire_infiniband (char **mtu, char **mac, char **mode, char **parent,
*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_print ("%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"));
+ g_print (_("Error: 'p-key' is mandatory when 'parent' is specified.\n"));
}
} while (once_more);
}
}
+#define WORD_INFRA "infrastructure"
+#define WORD_AP "ap"
+#define WORD_ADHOC "adhoc"
+#define PROMPT_WIFI_MODE "(" WORD_INFRA "/" WORD_AP "/" WORD_ADHOC ") [" WORD_INFRA "]: "
static void
-do_questionnaire_wifi (char **mtu, char **mac, char **cloned_mac)
+do_questionnaire_wifi (char **mtu, char **mac, char **cloned_mac, char **mode)
{
- /* At present, the optional Wi-Fi arguments are the same as for ethernet. */
- return do_questionnaire_ethernet (FALSE, mtu, mac, cloned_mac);
+ gboolean once_more;
+ GError *error = NULL;
+
+ /* Ask for optional arguments */
+ if (!want_provide_opt_args (_("Wi-Fi"), 4))
+ return;
+
+ /* Most optional Wi-Fi arguments are the same as for ethernet. */
+ do_questionnaire_ethernet (FALSE, mtu, mac, cloned_mac);
+
+ if (!*mode) {
+ do {
+ *mode = nmc_readline (_("Mode %s"), PROMPT_WIFI_MODE);
+ if (!*mode)
+ *mode = g_strdup ("infrastructure");
+ once_more = !check_wifi_mode (mode, &error);
+ if (once_more) {
+ g_print ("%s\n", error->message);
+ g_clear_error (&error);
+ g_free (*mode);
+ }
+ } while (once_more);
+ }
}
static void
@@ -3041,9 +3335,9 @@ do_questionnaire_wimax (char **mac)
if (!*mac) {
do {
*mac = nmc_readline (_("MAC [none]: "));
- once_more = !check_and_convert_mac (*mac, NULL, ARPHRD_ETHER, "mac", &error);
+ once_more = !check_mac (*mac, ARPHRD_ETHER, "mac", &error);
if (once_more) {
- printf ("%s\n", error->message);
+ g_print ("%s\n", error->message);
g_clear_error (&error);
g_free (*mac);
}
@@ -3071,7 +3365,7 @@ do_questionnaire_pppoe (char **password, char **service, char **mtu, char **mac)
*mtu = nmc_readline (_("MTU [auto]: "));
once_more = !check_and_convert_mtu (*mtu, NULL, &error);
if (once_more) {
- printf ("%s\n", error->message);
+ g_print ("%s\n", error->message);
g_clear_error (&error);
g_free (*mtu);
}
@@ -3080,9 +3374,9 @@ do_questionnaire_pppoe (char **password, char **service, char **mtu, char **mac)
if (!*mac) {
do {
*mac = nmc_readline (_("MAC [none]: "));
- once_more = !check_and_convert_mac (*mac, NULL, ARPHRD_ETHER, "mac", &error);
+ once_more = !check_mac (*mac, ARPHRD_ETHER, "mac", &error);
if (once_more) {
- printf ("%s\n", error->message);
+ g_print ("%s\n", error->message);
g_clear_error (&error);
g_free (*mac);
}
@@ -3126,7 +3420,7 @@ do_questionnaire_bluetooth (char **bt_type)
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_print (_("Error: 'bt-type': '%s' is not a valid bluetooth type.\n"), *bt_type);
g_free (*bt_type);
}
} while (once_more);
@@ -3150,7 +3444,7 @@ do_questionnaire_vlan (char **mtu, char **flags, char **ingress, char **egress)
*mtu = nmc_readline (_("MTU [auto]: "));
once_more = !check_and_convert_mtu (*mtu, NULL, &error);
if (once_more) {
- printf ("%s\n", error->message);
+ g_print ("%s\n", error->message);
g_clear_error (&error);
g_free (*mtu);
}
@@ -3161,7 +3455,7 @@ do_questionnaire_vlan (char **mtu, char **flags, char **ingress, char **egress)
*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_print ("%s\n", error->message);
g_clear_error (&error);
g_free (*flags);
}
@@ -3172,7 +3466,7 @@ do_questionnaire_vlan (char **mtu, char **flags, char **ingress, char **egress)
*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_print ("%s\n", error->message);
g_clear_error (&error);
g_free (*ingress);
}
@@ -3183,7 +3477,7 @@ do_questionnaire_vlan (char **mtu, char **flags, char **ingress, char **egress)
*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_print ("%s\n", error->message);
g_clear_error (&error);
g_free (*egress);
}
@@ -3198,7 +3492,8 @@ do_questionnaire_vlan (char **mtu, char **flags, char **ingress, char **egress)
static void
do_questionnaire_bond (char **mode, char **primary, char **miimon,
char **downdelay, char **updelay,
- char **arpinterval, char **arpiptarget)
+ char **arpinterval, char **arpiptarget,
+ char **lacp_rate)
{
char *monitor_mode;
unsigned long tmp;
@@ -3220,7 +3515,7 @@ do_questionnaire_bond (char **mode, char **primary, char **miimon,
if (mode_tmp) {
*mode = g_strdup (mode_tmp);
} else {
- printf ("%s\n", error->message);
+ g_print ("%s\n", error->message);
g_clear_error (&error);
}
} while (!mode_tmp);
@@ -3231,8 +3526,8 @@ do_questionnaire_bond (char **mode, char **primary, char **miimon,
*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_print (_("Error: 'primary': '%s' is not a valid interface name.\n"),
+ *primary);
g_free (*primary);
}
} while (once_more);
@@ -3245,8 +3540,8 @@ do_questionnaire_bond (char **mode, char **primary, char **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_print (_("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);
@@ -3257,8 +3552,8 @@ do_questionnaire_bond (char **mode, char **primary, char **miimon,
*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_print (_("Error: 'miimon': '%s' is not a valid number <0-%u>.\n"),
+ *miimon, G_MAXUINT32);
g_free (*miimon);
}
} while (once_more);
@@ -3268,8 +3563,8 @@ do_questionnaire_bond (char **mode, char **primary, char **miimon,
*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_print (_("Error: 'downdelay': '%s' is not a valid number <0-%u>.\n"),
+ *downdelay, G_MAXUINT32);
g_free (*downdelay);
}
} while (once_more);
@@ -3279,8 +3574,8 @@ do_questionnaire_bond (char **mode, char **primary, char **miimon,
*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_print (_("Error: 'updelay': '%s' is not a valid number <0-%u>.\n"),
+ *updelay, G_MAXUINT32);
g_free (*updelay);
}
} while (once_more);
@@ -3291,8 +3586,8 @@ do_questionnaire_bond (char **mode, char **primary, char **miimon,
*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_print (_("Error: 'arp-interval': '%s' is not a valid number <0-%u>.\n"),
+ *arpinterval, G_MAXUINT32);
g_free (*arpinterval);
}
} while (once_more);
@@ -3303,6 +3598,22 @@ do_questionnaire_bond (char **mode, char **primary, char **miimon,
}
}
+ if ( !*lacp_rate
+ && (g_strcmp0 (*mode, "802.3ad") == 0 || g_strcmp0 (*mode, "4") == 0)) {
+ do {
+ *lacp_rate = nmc_readline (_("LACP rate ('slow' or 'fast') [slow]: "));
+ once_more = *lacp_rate && (strcmp (*lacp_rate, "slow") &&
+ strcmp (*lacp_rate, "0") &&
+ strcmp (*lacp_rate, "fast") &&
+ strcmp (*lacp_rate, "1"));
+ if (once_more) {
+ printf (_("Error: 'lacp_rate': '%s' is invalid ('slow' or 'fast').\n"),
+ *lacp_rate);
+ g_free (*lacp_rate);
+ }
+ } while (once_more);
+ }
+
g_free (monitor_mode);
}
@@ -3322,7 +3633,7 @@ do_questionnaire_team_common (const char *type_name, char **config)
*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_print ("Error: %s\n", error->message);
g_clear_error (&error);
g_free (*config);
}
@@ -3365,7 +3676,7 @@ do_questionnaire_bridge (char **stp, char **priority, char **fwd_delay, char **h
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_print (_("Error: 'stp': %s.\n"), error->message);
g_clear_error (&error);
g_free (*stp);
}
@@ -3377,8 +3688,8 @@ do_questionnaire_bridge (char **stp, char **priority, char **fwd_delay, char **h
*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_print (_("Error: 'priority': '%s' is not a valid number <0-%d>.\n"),
+ *priority, G_MAXUINT16);
g_free (*priority);
}
} while (once_more);
@@ -3389,8 +3700,8 @@ do_questionnaire_bridge (char **stp, char **priority, char **fwd_delay, char **h
*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_print (_("Error: 'forward-delay': '%s' is not a valid number <2-30>.\n"),
+ *fwd_delay);
g_free (*fwd_delay);
}
} while (once_more);
@@ -3402,8 +3713,8 @@ do_questionnaire_bridge (char **stp, char **priority, char **fwd_delay, char **h
*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_print (_("Error: 'hello-time': '%s' is not a valid number <1-10>.\n"),
+ *hello_time);
g_free (*hello_time);
}
} while (once_more);
@@ -3414,8 +3725,8 @@ do_questionnaire_bridge (char **stp, char **priority, char **fwd_delay, char **h
*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_print (_("Error: 'max-age': '%s' is not a valid number <6-40>.\n"),
+ *max_age);
g_free (*max_age);
}
} while (once_more);
@@ -3426,8 +3737,8 @@ do_questionnaire_bridge (char **stp, char **priority, char **fwd_delay, char **h
*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_print (_("Error: 'ageing-time': '%s' is not a valid number <0-1000000>.\n"),
+ *ageing_time);
g_free (*ageing_time);
}
} while (once_more);
@@ -3435,9 +3746,9 @@ do_questionnaire_bridge (char **stp, char **priority, char **fwd_delay, char **h
if (!*mac) {
do {
*mac = nmc_get_user_input (_("MAC [none]: "));
- once_more = !check_and_convert_mac (*mac, NULL, ARPHRD_ETHER, "mac", &error);
+ once_more = !check_mac (*mac, ARPHRD_ETHER, "mac", &error);
if (once_more) {
- printf ("%s\n", error->message);
+ g_print ("%s\n", error->message);
g_clear_error (&error);
g_free (*mac);
}
@@ -3463,7 +3774,7 @@ do_questionnaire_bridge_slave (char **priority, char **path_cost, char **hairpin
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_print ("%s\n", error->message);
g_clear_error (&error);
g_free (*priority);
}
@@ -3476,7 +3787,7 @@ do_questionnaire_bridge_slave (char **priority, char **path_cost, char **hairpin
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_print ("%s\n", error->message);
g_clear_error (&error);
g_free (*path_cost);
}
@@ -3490,7 +3801,7 @@ do_questionnaire_bridge_slave (char **priority, char **path_cost, char **hairpin
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_print (_("Error: 'hairpin': %s.\n"), error->message);
g_clear_error (&error);
g_free (*hairpin);
}
@@ -3525,8 +3836,8 @@ do_questionnaire_olpc (char **channel, char **dhcp_anycast)
*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_print (_("Error: 'channel': '%s' is not a valid number <1-13>.\n"),
+ *channel);
g_free (*channel);
}
} while (once_more);
@@ -3534,9 +3845,9 @@ do_questionnaire_olpc (char **channel, char **dhcp_anycast)
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);
+ once_more = !check_mac (*dhcp_anycast, ARPHRD_ETHER, "dhcp-anycast", &error);
if (once_more) {
- printf ("%s\n", error->message);
+ g_print ("%s\n", error->message);
g_clear_error (&error);
g_free (*dhcp_anycast);
}
@@ -3545,24 +3856,21 @@ do_questionnaire_olpc (char **channel, char **dhcp_anycast)
}
static gboolean
-split_address (char* str, char **ip, char **gw, char **rest)
+split_address (char* str, char **ip, char **rest)
{
- size_t n1, n2, n3, n4, n5;
+ size_t n1, n2, n3;
- *ip = *gw = *rest = NULL;
+ *ip = *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';
+ str[n2] = '\0';
*ip = str[n1] ? str + n1 : NULL;
- *gw = str[n3] ? str + n3 : NULL;
- *rest = str[n5] ? str + n5 : NULL;
+ *rest = str[n3] ? str + n3 : NULL;
return TRUE;
}
@@ -3572,40 +3880,36 @@ ask_for_ip_addresses (NMConnection *connection, int family)
{
gboolean ip_loop;
GError *error = NULL;
- char *str, *ip, *gw, *rest;
+ char *str, *ip, *rest;
const char *prompt;
gboolean added;
- gpointer ipaddr;
+ NMIPAddress *ipaddr;
- if (family == 4)
- prompt =_("IPv4 address (IP[/plen] [gateway]) [none]: ");
+ if (family == AF_INET)
+ prompt =_("IPv4 address (IP[/plen]) [none]: ");
else
- prompt =_("IPv6 address (IP[/plen] [gateway]) [none]: ");
+ prompt =_("IPv6 address (IP[/plen]) [none]: ");
ip_loop = TRUE;
do {
str = nmc_readline ("%s", prompt);
- split_address (str, &ip, &gw, &rest);
+ split_address (str, &ip, &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);
+ ipaddr = nmc_parse_and_build_address (family, ip, &error);
if (ipaddr) {
- if (family == 4)
- added = add_ip4_address_to_connection ((NMIP4Address *) ipaddr, connection);
+ if (family == AF_INET)
+ added = add_ip4_address_to_connection (ipaddr, connection);
else
- added = add_ip6_address_to_connection ((NMIP6Address *) ipaddr, connection);
- gw = gw ? gw : (family == 4) ? "0.0.0.0" : "::";
+ added = add_ip6_address_to_connection (ipaddr, connection);
if (added)
- printf (_(" Address successfully added: %s %s\n"), ip, gw);
+ g_print (_(" Address successfully added: %s\n"), ip);
else
- printf (_(" Warning: address already present: %s %s\n"), ip, gw);
+ g_print (_(" Warning: address already present: %s\n"), ip);
if (rest)
- printf (_(" Warning: ignoring garbage at the end: '%s'\n"), rest);
+ g_print (_(" Warning: ignoring garbage at the end: '%s'\n"), rest);
} else {
g_prefix_error (&error, _("Error: "));
- printf ("%s\n", error->message);
+ g_print ("%s\n", error->message);
g_clear_error (&error);
}
} else
@@ -3616,6 +3920,45 @@ ask_for_ip_addresses (NMConnection *connection, int family)
}
static void
+maybe_ask_for_gateway (NMConnection *connection, int family)
+{
+ gboolean gw_loop;
+ char *str, *gw, *rest;
+ const char *prompt;
+ NMSettingIPConfig *s_ip;
+
+ if (family == AF_INET) {
+ prompt =_("IPv4 gateway [none]: ");
+ s_ip = nm_connection_get_setting_ip4_config (connection);
+ } else {
+ prompt =_("IPv6 gateway [none]: ");
+ s_ip = nm_connection_get_setting_ip6_config (connection);
+ }
+ if (s_ip == NULL)
+ return;
+ if ( nm_setting_ip_config_get_num_addresses (s_ip) == 0
+ || nm_setting_ip_config_get_gateway (s_ip) != NULL)
+ return;
+
+ gw_loop = TRUE;
+ do {
+ str = nmc_readline ("%s", prompt);
+ split_address (str, &gw, &rest);
+ if (gw) {
+ if (nm_utils_ipaddr_valid (family, gw)) {
+ g_object_set (s_ip,
+ NM_SETTING_IP_CONFIG_GATEWAY, gw,
+ NULL);
+ gw_loop = FALSE;
+ } else
+ g_print (_("Error: invalid gateway address '%s'\n"), gw);
+ } else
+ gw_loop = FALSE;
+ g_free (str);
+ } while (gw_loop);
+}
+
+static void
do_questionnaire_ip (NMConnection *connection)
{
char *answer;
@@ -3627,20 +3970,20 @@ do_questionnaire_ip (NMConnection *connection)
g_free (answer);
return;
}
+ g_free (answer);
- printf (_("Press <Enter> to finish adding addresses.\n"));
-
- ask_for_ip_addresses (connection, 4);
- ask_for_ip_addresses (connection, 6);
+ g_print (_("Press <Enter> to finish adding addresses.\n"));
- g_free (answer);
- return;
+ ask_for_ip_addresses (connection, AF_INET);
+ maybe_ask_for_gateway (connection, AF_INET);
+ ask_for_ip_addresses (connection, AF_INET6);
+ maybe_ask_for_gateway (connection, AF_INET6);
}
static gboolean
complete_connection_by_type (NMConnection *connection,
const char *con_type,
- GSList *all_connections,
+ const GPtrArray *all_connections,
gboolean ask,
int argc,
char **argv,
@@ -3651,7 +3994,7 @@ complete_connection_by_type (NMConnection *connection,
NMSettingInfiniband *s_infiniband;
NMSettingWireless *s_wifi;
NMSettingWimax *s_wimax;
- NMSettingPPPOE *s_pppoe;
+ NMSettingPppoe *s_pppoe;
NMSettingGsm *s_gsm;
NMSettingCdma *s_cdma;
NMSettingBluetooth *s_bt;
@@ -3661,7 +4004,7 @@ complete_connection_by_type (NMConnection *connection,
NMSettingTeamPort *s_team_port;
NMSettingBridge *s_bridge;
NMSettingBridgePort *s_bridge_port;
- NMSettingVPN *s_vpn;
+ NMSettingVpn *s_vpn;
NMSettingOlpcMesh *s_olpc_mesh;
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
@@ -3679,8 +4022,6 @@ complete_connection_by_type (NMConnection *connection,
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},
@@ -3690,17 +4031,17 @@ complete_connection_by_type (NMConnection *connection,
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;
+ mtu = g_strdup (mtu_c);
+ mac = g_strdup (mac_c);
+ cloned_mac = g_strdup (cloned_mac_c);
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))
+ if (!check_mac (mac, ARPHRD_ETHER, "mac", error))
goto cleanup_wired;
- if (!check_and_convert_mac (cloned_mac, &cloned_array, ARPHRD_ETHER, "cloned-mac", error))
+ if (!check_mac (cloned_mac, ARPHRD_ETHER, "cloned-mac", error))
goto cleanup_wired;
/* Add ethernet setting */
@@ -3709,20 +4050,16 @@ complete_connection_by_type (NMConnection *connection,
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);
+ if (mac)
+ g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, mac, NULL);
+ if (cloned_mac)
+ g_object_set (s_wired, NM_SETTING_WIRED_CLONED_MAC_ADDRESS, cloned_mac, 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;
@@ -3734,7 +4071,6 @@ cleanup_wired:
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;
@@ -3753,17 +4089,17 @@ cleanup_wired:
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;
+ mtu = g_strdup (mtu_c);
+ mac = g_strdup (mac_c);
+ mode = g_strdup (mode_c);
+ parent = g_strdup (parent_c);
+ p_key = g_strdup (p_key_c);
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))
+ if (!check_mac (mac, ARPHRD_INFINIBAND, "mac", error))
goto cleanup_ib;
if (!check_infiniband_mode (&mode, error))
goto cleanup_ib;
@@ -3785,10 +4121,8 @@ cleanup_wired:
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 (mac)
+ g_object_set (s_infiniband, NM_SETTING_INFINIBAND_MAC_ADDRESS, mac, NULL);
if (p_key)
g_object_set (s_infiniband, NM_SETTING_INFINIBAND_P_KEY, p_key_int, NULL);
if (parent)
@@ -3810,20 +4144,21 @@ cleanup_ib:
gboolean success = FALSE;
char *ssid_ask = NULL;
const char *ssid = NULL;
- GByteArray *ssid_arr = NULL;
+ GBytes *ssid_bytes;
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;
+ const char *mode_c = NULL;
+ char *mode = 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},
+ {"mode", TRUE, &mode_c, FALSE},
{NULL} };
if (!nmc_parse_args (exp_args, FALSE, &argc, &argv, error))
@@ -3838,33 +4173,39 @@ cleanup_ib:
}
/* 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;
+ mtu = g_strdup (mtu_c);
+ mac = g_strdup (mac_c);
+ cloned_mac = g_strdup (cloned_mac_c);
+ mode = g_strdup (mode_c);
if (ask)
- do_questionnaire_wifi (&mtu, &mac, &cloned_mac);
+ do_questionnaire_wifi (&mtu, &mac, &cloned_mac, &mode);
if (!check_and_convert_mtu (mtu, &mtu_int, error))
goto cleanup_wifi;
- if (!check_and_convert_mac (mac, &mac_array, ARPHRD_ETHER, "mac", error))
+ if (!check_mac (mac, ARPHRD_ETHER, "mac", error))
goto cleanup_wifi;
- if (!check_and_convert_mac (cloned_mac, &cloned_mac_array, ARPHRD_ETHER, "cloned-mac", error))
+ if (!check_mac (cloned_mac, ARPHRD_ETHER, "cloned-mac", error))
+ goto cleanup_wifi;
+ if (!check_wifi_mode (&mode, 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);
+ ssid_bytes = g_bytes_new (ssid, strlen (ssid));
+ g_object_set (s_wifi, NM_SETTING_WIRELESS_SSID, ssid_bytes, 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);
+ if (mac)
+ g_object_set (s_wifi, NM_SETTING_WIRELESS_MAC_ADDRESS, mac, NULL);
+ if (cloned_mac)
+ g_object_set (s_wifi, NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, cloned_mac, NULL);
+ if (mode)
+ g_object_set (s_wifi, NM_SETTING_WIRELESS_MODE, mode, NULL);
+
+ g_bytes_unref (ssid_bytes);
success = TRUE;
cleanup_wifi:
@@ -3872,12 +4213,7 @@ cleanup_wifi:
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);
+ g_free (mode);
if (!success)
return FALSE;
@@ -3888,7 +4224,6 @@ cleanup_wifi:
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} };
@@ -3905,11 +4240,11 @@ cleanup_wifi:
}
/* Also ask for all optional arguments if '--ask' is specified. */
- mac = mac_c ? g_strdup (mac_c) : NULL;
+ mac = g_strdup (mac_c);
if (ask)
do_questionnaire_wimax (&mac);
- if (!check_and_convert_mac (mac, &mac_array, ARPHRD_ETHER, "mac", error))
+ if (!check_mac (mac, ARPHRD_ETHER, "mac", error))
goto cleanup_wimax;
/* Add 'wimax' setting */
@@ -3917,10 +4252,8 @@ cleanup_wifi:
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);
- }
+ if (mac)
+ g_object_set (s_wimax, NM_SETTING_WIMAX_MAC_ADDRESS, mac, NULL);
success = TRUE;
cleanup_wimax:
@@ -3943,7 +4276,6 @@ cleanup_wimax:
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},
@@ -3972,11 +4304,11 @@ cleanup_wimax:
if (!check_and_convert_mtu (mtu, &mtu_int, error))
goto cleanup_pppoe;
- if (!check_and_convert_mac (mac, &mac_array, ARPHRD_ETHER, "mac", error))
+ if (!check_mac (mac, ARPHRD_ETHER, "mac", error))
goto cleanup_pppoe;
/* Add 'pppoe' setting */
- s_pppoe = (NMSettingPPPOE *) nm_setting_pppoe_new ();
+ 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);
@@ -3987,8 +4319,8 @@ cleanup_wimax:
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);
+ if (mac)
+ g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, mac, NULL);
success = TRUE;
cleanup_pppoe:
@@ -3997,8 +4329,6 @@ cleanup_pppoe:
g_free (service);
g_free (mtu);
g_free (mac);
- if (mac_array)
- g_byte_array_free (mac_array, TRUE);
if (!success)
return FALSE;
@@ -4037,8 +4367,8 @@ cleanup_pppoe:
}
/* 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;
+ user = g_strdup (user_c);
+ password = g_strdup (password_c);
if (ask)
do_questionnaire_mobile (&user, &password);
@@ -4082,7 +4412,6 @@ cleanup_mobile:
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} };
@@ -4097,11 +4426,11 @@ cleanup_mobile:
_("Error: 'addr' is required."));
return FALSE;
}
- if (!check_and_convert_mac (addr, &array, ARPHRD_ETHER, "addr", error))
+ if (!check_mac (addr, 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;
+ bt_type = g_strdup (bt_type_c);
if (ask)
do_questionnaire_bluetooth (&bt_type);
@@ -4113,10 +4442,8 @@ cleanup_mobile:
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);
- }
+ if (addr)
+ g_object_set (s_bt, NM_SETTING_BLUETOOTH_BDADDR, addr, NULL);
/* 'dun' type requires adding 'gsm' or 'cdma' setting */
if ( !strcmp (bt_type, NM_SETTING_BLUETOOTH_TYPE_DUN)
@@ -4154,7 +4481,6 @@ cleanup_bt:
} 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;
@@ -4204,7 +4530,7 @@ cleanup_bt:
}
}
- if ( !(addr_array = nm_utils_hwaddr_atoba (parent, ARPHRD_ETHER))
+ if ( !(addr_array = nm_utils_hwaddr_atoba (parent, ETH_ALEN))
&& !nm_utils_is_uuid (parent)
&& !nm_utils_iface_valid_name (parent)) {
g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
@@ -4214,16 +4540,13 @@ cleanup_bt:
}
/* 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;
+ mtu = g_strdup (mtu_c);
+ flags = g_strdup (flags_c);
+ ingress = g_strdup (ingress_c);
+ egress = g_strdup (egress_c);
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))
@@ -4252,8 +4575,6 @@ cleanup_bt:
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)
@@ -4281,7 +4602,6 @@ cleanup_vlan:
} 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;
@@ -4297,6 +4617,8 @@ cleanup_vlan:
char *bond_arpinterval = NULL;
const char *bond_arpiptarget_c = NULL;
char *bond_arpiptarget = NULL;
+ const char *bond_lacp_rate_c = NULL;
+ char *bond_lacp_rate = NULL;
nmc_arg_t exp_args[] = { {"mode", TRUE, &bond_mode_c, FALSE},
{"primary", TRUE, &bond_primary_c, FALSE},
{"miimon", TRUE, &bond_miimon_c, FALSE},
@@ -4304,40 +4626,43 @@ cleanup_vlan:
{"updelay", TRUE, &bond_updelay_c, FALSE},
{"arp-interval", TRUE, &bond_arpinterval_c, FALSE},
{"arp-ip-target", TRUE, &bond_arpiptarget_c, FALSE},
+ {"lacp-rate", TRUE, &bond_lacp_rate_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;
+ bond_mode = g_strdup (bond_mode_c);
+ bond_primary = g_strdup (bond_primary_c);
+ bond_miimon = g_strdup (bond_miimon_c);
+ bond_downdelay = g_strdup (bond_downdelay_c);
+ bond_updelay = g_strdup (bond_updelay_c);
+ bond_arpinterval = g_strdup (bond_arpinterval_c);
+ bond_arpiptarget = g_strdup (bond_arpiptarget_c);
+ bond_lacp_rate = g_strdup (bond_lacp_rate_c);
if (ask)
do_questionnaire_bond (&bond_mode, &bond_primary, &bond_miimon,
&bond_downdelay, &bond_updelay,
- &bond_arpinterval, &bond_arpiptarget);
+ &bond_arpinterval, &bond_arpiptarget,
+ &bond_lacp_rate);
- /* Use connection's ifname as 'bond' ifname if exists, else generate one */
+ /* Generate ifname if connection doesn't have 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);
+ if (!ifname) {
+ char *bond_ifname = unique_master_iface_ifname (all_connections, "nm-bond");
+
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_INTERFACE_NAME, bond_ifname,
+ NULL);
+ g_free (bond_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;
@@ -4368,10 +4693,11 @@ cleanup_vlan:
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);
+ if (bond_lacp_rate)
+ nm_setting_bond_add_option (s_bond, NM_SETTING_BOND_OPTION_LACP_RATE, bond_lacp_rate);
success = TRUE;
cleanup_bond:
- g_free (bond_ifname);
g_free (bond_mode);
g_free (bond_primary);
g_free (bond_miimon);
@@ -4379,6 +4705,7 @@ cleanup_bond:
g_free (bond_updelay);
g_free (bond_arpinterval);
g_free (bond_arpiptarget);
+ g_free (bond_lacp_rate);
if (!success)
return FALSE;
@@ -4408,11 +4735,11 @@ cleanup_bond:
/* 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);
+ g_print (_("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"));
+ g_print (_("Warning: 'type' is currently ignored. "
+ "We only support ethernet slaves for now.\n"));
/* Change properties in 'connection' setting */
g_object_set (s_con,
@@ -4430,7 +4757,6 @@ cleanup_bond:
} 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;
@@ -4446,15 +4772,16 @@ cleanup_bond:
if (ask)
do_questionnaire_team (&config);
- /* Use connection's ifname as 'team' ifname if exists, else generate one */
+ /* Generate ifname if conneciton doesn't have 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);
+ if (!ifname) {
+ char *team_ifname = unique_master_iface_ifname (all_connections, "nm-team");
+
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_INTERFACE_NAME, team_ifname,
+ NULL);
+ g_free (team_ifname);
+ }
/* Add 'team' setting */
s_team = (NMSettingTeam *) nm_setting_team_new ();
@@ -4466,12 +4793,10 @@ cleanup_bond:
}
/* 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)
@@ -4508,7 +4833,7 @@ cleanup_team:
/* 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);
+ g_print (_("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);
@@ -4516,8 +4841,8 @@ cleanup_team:
do_questionnaire_team_slave (&config);
if (type)
- printf (_("Warning: 'type' is currently ignored. "
- "We only support ethernet slaves for now.\n"));
+ g_print (_("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 ();
@@ -4553,7 +4878,6 @@ cleanup_team_slave:
} 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;
@@ -4572,7 +4896,6 @@ cleanup_team_slave:
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},
@@ -4586,26 +4909,27 @@ cleanup_team_slave:
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;
+ stp = g_strdup (stp_c);
+ priority = g_strdup (priority_c);
+ fwd_delay = g_strdup (fwd_delay_c);
+ hello_time = g_strdup (hello_time_c);
+ max_age = g_strdup (max_age_c);
+ ageing_time = g_strdup (ageing_time_c);
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 */
+ /* Generate ifname if conneciton doesn't have 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 (!ifname) {
+ char *bridge_ifname = unique_master_iface_ifname (all_connections, "nm-bridge");
+
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_INTERFACE_NAME, bridge_ifname,
+ NULL);
+ g_free (bridge_ifname);
+ }
if (stp) {
GError *tmp_err = NULL;
@@ -4642,11 +4966,10 @@ cleanup_team_slave:
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))
+ if (!check_mac (mac, 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)
@@ -4659,12 +4982,11 @@ cleanup_team_slave:
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);
+ if (mac)
+ g_object_set (s_bridge, NM_SETTING_BRIDGE_MAC_ADDRESS, mac, NULL);
success = TRUE;
cleanup_bridge:
- g_free (bridge_ifname);
g_free (stp);
g_free (priority);
g_free (fwd_delay);
@@ -4672,8 +4994,6 @@ cleanup_bridge:
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;
@@ -4715,11 +5035,11 @@ cleanup_bridge:
/* 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);
+ g_print (_("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"));
+ g_print (_("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 */
@@ -4727,9 +5047,9 @@ cleanup_bridge:
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;
+ priority = g_strdup (priority_c);
+ path_cost = g_strdup (path_cost_c);
+ hairpin = g_strdup (hairpin_c);
if (ask)
do_questionnaire_bridge_slave (&priority, &path_cost, &hairpin);
@@ -4805,18 +5125,18 @@ cleanup_bridge_slave:
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);
+ g_print (_("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;
+ user = g_strdup (user_c);
if (ask)
do_questionnaire_vpn (&user);
/* Add 'vpn' setting */
- s_vpn = (NMSettingVPN *) nm_setting_vpn_new ();
+ 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);
@@ -4835,13 +5155,12 @@ cleanup_vpn:
gboolean success = FALSE;
char *ssid_ask = NULL;
const char *ssid = NULL;
- GByteArray *ssid_arr;
+ GBytes *ssid_bytes;
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},
@@ -4859,8 +5178,8 @@ cleanup_vpn:
}
/* 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;
+ channel = g_strdup (channel_c);
+ dhcp_anycast = g_strdup (dhcp_anycast_c);
if (ask)
do_questionnaire_olpc (&channel, &dhcp_anycast);
@@ -4872,25 +5191,22 @@ cleanup_vpn:
goto cleanup_olpc;
}
}
- if (!check_and_convert_mac (dhcp_anycast, &array, ARPHRD_ETHER, "dhcp-anycast", error))
+ if (!check_mac (dhcp_anycast, 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);
+ ssid_bytes = g_bytes_new (ssid, strlen (ssid));
+ g_object_set (s_olpc_mesh, NM_SETTING_OLPC_MESH_SSID, ssid_bytes, NULL);
if (channel)
g_object_set (s_olpc_mesh, NM_SETTING_OLPC_MESH_CHANNEL, chan, NULL);
else
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);
+ if (dhcp_anycast)
+ g_object_set (s_olpc_mesh, NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS, dhcp_anycast, NULL);
+ g_bytes_unref (ssid_bytes);
success = TRUE;
cleanup_olpc:
@@ -4912,8 +5228,7 @@ cleanup_olpc:
&& strcmp (con_type, "team-slave") != 0
&& strcmp (con_type, "bridge-slave") != 0) {
- NMIP4Address *ip4addr = NULL;
- NMIP6Address *ip6addr = NULL;
+ NMIPAddress *ip4addr = NULL, *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},
@@ -4933,7 +5248,7 @@ cleanup_olpc:
/* coverity[dead_error_begin] */
if (ip4) {
- ip4addr = nmc_parse_and_build_ip4_address (ip4, gw4, error);
+ ip4addr = nmc_parse_and_build_address (AF_INET, ip4, error);
if (!ip4addr) {
g_prefix_error (error, _("Error: "));
return FALSE;
@@ -4942,14 +5257,60 @@ cleanup_olpc:
}
/* coverity[dead_error_begin] */
+ if (gw4) {
+ NMSettingIPConfig *s_ip = nm_connection_get_setting_ip4_config (connection);
+
+ if (!s_ip) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: IPv4 gateway specified without IPv4 addresses"));
+ return FALSE;
+ } else if (nm_setting_ip_config_get_gateway (s_ip)) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: multiple IPv4 gateways specified"));
+ return FALSE;
+ } else if (!nm_utils_ipaddr_valid (AF_INET, gw4)) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: Invalid IPv4 gateway '%s'"),
+ gw4);
+ }
+
+ g_object_set (s_ip,
+ NM_SETTING_IP_CONFIG_GATEWAY, gw4,
+ NULL);
+ }
+
+ /* coverity[dead_error_begin] */
if (ip6) {
- ip6addr = nmc_parse_and_build_ip6_address (ip6, gw6, error);
+ ip6addr = nmc_parse_and_build_address (AF_INET6, ip6, error);
if (!ip6addr) {
g_prefix_error (error, _("Error: "));
return FALSE;
}
add_ip6_address_to_connection (ip6addr, connection);
}
+
+ /* coverity[dead_error_begin] */
+ if (gw6) {
+ NMSettingIPConfig *s_ip = nm_connection_get_setting_ip6_config (connection);
+
+ if (!s_ip) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: IPv6 gateway specified without IPv6 addresses"));
+ return FALSE;
+ } else if (nm_setting_ip_config_get_gateway (s_ip)) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: multiple IPv6 gateways specified"));
+ return FALSE;
+ } else if (!nm_utils_ipaddr_valid (AF_INET, gw6)) {
+ g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
+ _("Error: Invalid IPv6 gateway '%s'"),
+ gw6);
+ }
+
+ g_object_set (s_ip,
+ NM_SETTING_IP_CONFIG_GATEWAY, gw6,
+ NULL);
+ }
}
/* Ask for addresses if '--ask' is specified. */
@@ -4961,25 +5322,25 @@ cleanup_olpc:
}
static char *
-unique_connection_name (GSList *list, const char *try_name)
+unique_connection_name (const GPtrArray *connections, const char *try_name)
{
NMConnection *connection;
const char *name;
char *new_name;
unsigned int num = 1;
- GSList *iterator = list;
+ int i = 0;
new_name = g_strdup (try_name);
- while (iterator) {
- connection = NM_CONNECTION (iterator->data);
+ while (i < connections->len) {
+ connection = NM_CONNECTION (connections->pdata[i]);
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);
+ i = 0;
+ } else
+ i++;
}
return new_name;
}
@@ -4990,23 +5351,27 @@ typedef struct {
} AddConnectionInfo;
static void
-add_connection_cb (NMRemoteSettings *settings,
- NMRemoteConnection *connection,
- GError *error,
+add_connection_cb (GObject *client,
+ GAsyncResult *result,
gpointer user_data)
{
AddConnectionInfo *info = (AddConnectionInfo *) user_data;
NmCli *nmc = info->nmc;
+ NMRemoteConnection *connection;
+ GError *error = NULL;
+ connection = nm_client_add_connection_finish (NM_CLIENT (client), result, &error);
if (error) {
g_string_printf (nmc->return_text,
- _("Error: Failed to add '%s' connection: (%d) %s"),
- info->con_name, error->code, error->message);
+ _("Error: Failed to add '%s' connection: %s"),
+ info->con_name, error->message);
+ g_error_free (error);
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_print (_("Connection '%s' (%s) successfully added.\n"),
+ nm_connection_get_id (NM_CONNECTION (connection)),
+ nm_connection_get_uuid (NM_CONNECTION (connection)));
+ g_object_unref (connection);
}
g_free (info->con_name);
@@ -5014,29 +5379,25 @@ add_connection_cb (NMRemoteSettings *settings,
quit ();
}
-static gboolean
+static void
add_new_connection (gboolean persistent,
- NMRemoteSettings *settings,
+ NMClient *client,
NMConnection *connection,
- NMRemoteSettingsAddConnectionFunc callback,
+ GAsyncReadyCallback 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);
+ nm_client_add_connection_async (client, connection, persistent,
+ NULL, callback, user_data);
}
static void
update_connection (gboolean persistent,
NMRemoteConnection *connection,
- NMRemoteConnectionResultFunc callback,
+ GAsyncReadyCallback 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);
+ nm_remote_connection_commit_changes_async (connection, persistent,
+ NULL, callback, user_data);
}
static char *
@@ -5053,6 +5414,13 @@ gen_func_bool_values_l10n (const char *text, int state)
}
static char *
+gen_func_wifi_mode (const char *text, int state)
+{
+ const char *words[] = { "infrastructure", "ap", "adhoc", 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 };
@@ -5083,28 +5451,28 @@ gen_func_bond_mon_mode (const char *text, int state)
static char *
gen_func_master_ifnames (const char *text, int state)
{
- GSList *iter;
+ int i;
GPtrArray *ifnames;
char *ret;
NMConnection *con;
NMSettingConnection *s_con;
const char *con_type, *ifname;
- if (!nm_cli.system_connections)
+ if (!nm_cli.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);
+ for (i = 0; i < nm_cli.connections->len; i++) {
+ con = NM_CONNECTION (nm_cli.connections->pdata[i]);
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);
+ ifname = nm_connection_get_interface_name (con);
g_ptr_array_add (ifnames, (gpointer) ifname);
}
g_ptr_array_add (ifnames, (gpointer) NULL);
@@ -5158,6 +5526,8 @@ nmcli_con_add_tab_completion (const char *text, int start, int end)
|| 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_WIFI_MODE))
+ generator_func = gen_func_wifi_mode;
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))
@@ -5213,7 +5583,7 @@ do_connection_add (NmCli *nmc, int argc, char **argv)
if (!type && nmc->ask) {
char *types_tmp = get_valid_options_string (nmc_valid_connection_types);
- printf ("Valid types: [%s]\n", types_tmp);
+ g_print ("Valid types: [%s]\n", types_tmp);
type = type_ask = nmc_readline (PROMPT_CON_TYPE);
g_free (types_tmp);
}
@@ -5284,7 +5654,7 @@ do_connection_add (NmCli *nmc, int argc, char **argv)
}
/* Create a new connection object */
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Build up the 'connection' setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -5295,7 +5665,7 @@ do_connection_add (NmCli *nmc, int argc, char **argv)
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);
+ default_name = unique_connection_name (nmc->connections, try_name);
g_free (try_name);
}
g_object_set (s_con,
@@ -5311,7 +5681,7 @@ do_connection_add (NmCli *nmc, int argc, char **argv)
if (!complete_connection_by_type (connection,
setting_name,
- nmc->system_connections,
+ nmc->connections,
nmc->ask,
argc,
argv,
@@ -5330,7 +5700,7 @@ do_connection_add (NmCli *nmc, int argc, char **argv)
/* Tell the settings service to add the new connection */
add_new_connection (save_bool,
- nmc->system_settings,
+ nmc->client,
connection,
add_connection_cb,
info);
@@ -5363,7 +5733,7 @@ uuid_display_hook (char **array, int len, int max_len)
const char *id;
for (i = 1; i <= len; i++) {
- con = nmc_find_connection (nmc_tab_completion.nmc->system_connections, "uuid", array[i], NULL);
+ con = nmc_find_connection (nmc_tab_completion.nmc->connections, "uuid", array[i], NULL);
id = con ? nm_connection_get_id (con) : NULL;
if (id) {
tmp = g_strdup_printf ("%s (%s)", array[i], id);
@@ -5377,19 +5747,6 @@ uuid_display_hook (char **array, int len, int max_len)
rl_forced_update_display ();
}
-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)
{
@@ -5411,7 +5768,7 @@ gen_nmcli_cmds_submenu (const char *text, int state)
static char *
gen_cmd_nmcli (const char *text, int state)
{
- const char *words[] = { "status-line", "save-confirmation", "prompt-color", NULL };
+ const char *words[] = { "status-line", "save-confirmation", "show-secrets", "prompt-color", NULL };
return nmc_rl_gen_func_basic (text, state, words);
}
@@ -5432,7 +5789,7 @@ gen_func_bool_values (const char *text, int state)
static char *
gen_cmd_verify0 (const char *text, int state)
{
- const char *words[] = { "all", NULL };
+ const char *words[] = { "all", "fix", NULL };
return nmc_rl_gen_func_basic (text, state, words);
}
@@ -5443,19 +5800,19 @@ gen_cmd_print0 (const char *text, int state)
char *ret = NULL;
if (!state) {
- GHashTable *settings;
- GHashTableIter iter;
+ GVariant *settings;
+ GVariantIter 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))
+ settings = nm_connection_to_dbus (nmc_tab_completion.connection, NM_CONNECTION_SERIALIZE_NO_SECRETS);
+ words = g_new (char *, g_variant_n_children (settings) + 2);
+ g_variant_iter_init (&iter, settings);
+ while (g_variant_iter_next (&iter, "{&s@a{sv}}", &setting_name, NULL))
words [i++] = g_strdup (setting_name);
words[i++] = g_strdup ("all");
words[i] = NULL;
- g_hash_table_unref (settings);
+ g_variant_unref (settings);
}
if (words) {
@@ -5584,7 +5941,7 @@ gen_compat_devices (const char *text, int state)
char *ret;
devices = nm_client_get_devices (nmc_tab_completion.nmc->client);
- if (!devices || devices->len < 1)
+ if (devices->len == 0)
return NULL;
compatible_devices = g_new (const char *, devices->len + 1);
@@ -5610,24 +5967,23 @@ gen_compat_devices (const char *text, int state)
static char *
gen_vpn_uuids (const char *text, int state)
{
- GSList *iter;
- guint len;
- int i = 0;
+ const GPtrArray *connections = nmc_tab_completion.nmc->connections;
+ int c, u = 0;
const char **uuids;
char *ret;
- len = g_slist_length (nmc_tab_completion.nmc->system_connections);
- if (len < 1)
+ if (connections->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));
+ uuids = g_new (const char *, connections->len + 1);
+ for (c = 0; c < connections->len; c++) {
+ NMConnection *connection = NM_CONNECTION (connections->pdata[c]);
+ const char *type = nm_connection_get_connection_type (connection);
if (g_strcmp0 (type, NM_SETTING_VPN_SETTING_NAME) == 0)
- uuids[i++] = nm_connection_get_uuid (NM_CONNECTION (iter->data));
+ uuids[u++] = nm_connection_get_uuid (connection);
}
- uuids[i] = NULL;
+ uuids[u] = NULL;
ret = nmc_rl_gen_func_basic (text, state, uuids);
@@ -5644,6 +6000,8 @@ get_gen_func_cmd_nmcli (const char *str)
return gen_func_bool_values;
if (matches (str, "save-confirmation") == 0)
return gen_func_bool_values;
+ if (matches (str, "show-secrets") == 0)
+ return gen_func_bool_values;
if (matches (str, "prompt-color") == 0)
return gen_cmd_nmcli_prompt_color;
return NULL;
@@ -5978,7 +6336,7 @@ load_history_cmds (const char *uuid)
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_print ("Warning: %s parse error: %s\n", filename, err->message);
g_key_file_free (kf);
g_free (filename);
return;
@@ -6014,7 +6372,7 @@ save_history_cmds (const char *uuid)
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_print ("Warning: %s parse error: %s\n", filename, err->message);
g_key_file_free (kf);
g_free (filename);
g_clear_error (&err);
@@ -6055,14 +6413,14 @@ editor_show_connection (NMConnection *connection, NmCli *nmc)
/* Remove any previous data */
nmc_empty_output_fields (nmc);
- nmc_connection_profile_details (connection, nmc);
+ nmc_connection_profile_details (connection, nmc, nmc->editor_show_secrets);
}
static void
editor_show_setting (NMSetting *setting, NmCli *nmc)
{
- printf (_("['%s' setting values]\n"),
- nm_setting_get_name (setting));
+ g_print (_("['%s' setting values]\n"),
+ nm_setting_get_name (setting));
nmc->print_output = NMC_PRINT_NORMAL;
nmc->multiline_output = TRUE;
@@ -6071,7 +6429,7 @@ editor_show_setting (NMSetting *setting, NmCli *nmc)
/* Remove any previous data */
nmc_empty_output_fields (nmc);
- setting_details (setting, nmc, NULL);
+ setting_details (setting, nmc, NULL, nmc->editor_show_secrets);
}
typedef enum {
@@ -6139,24 +6497,24 @@ parse_editor_main_cmd (const char *cmd, char **cmd_arg)
static void
editor_main_usage (void)
{
- printf ("------------------------------------------------------------------------------\n");
+ g_print ("------------------------------------------------------------------------------\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");
+ g_print (_("---[ 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 | fix] :: 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"));
+ g_print ("------------------------------------------------------------------------------\n");
}
static void
@@ -6170,92 +6528,95 @@ editor_main_help (const char *command)
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"));
+ g_print (_("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"));
+ g_print (_("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"));
+ g_print (_("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"));
+ g_print (_("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"));
+ g_print (_("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"));
+ g_print (_("verify [all | fix] :: verify setting or connection validity\n\n"
+ "Verifies whether the setting or connection is valid and can be saved later.\n"
+ "It indicates invalid values on error. Some errors may be fixed automatically\n"
+ "by 'fix' option.\n\n"
+ "Examples: nmcli> verify\n"
+ " nmcli> verify fix\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"));
+ g_print (_("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"));
+ g_print (_("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"));
+ g_print (_("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"));
+ g_print (_("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"));
+ g_print (_("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"
+ "show-secrets yes | no [default: no]\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"));
+ g_print (_("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);
+ g_print (_("Unknown command: '%s'\n"), command);
break;
}
}
@@ -6317,21 +6678,21 @@ parse_editor_sub_cmd (const char *cmd, char **cmd_arg)
static void
editor_sub_help (void)
{
- printf ("------------------------------------------------------------------------------\n");
+ g_print ("------------------------------------------------------------------------------\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");
+ g_print (_("---[ 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"));
+ g_print ("------------------------------------------------------------------------------\n");
}
static void
@@ -6346,53 +6707,53 @@ editor_sub_usage (const char *command)
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"));
+ g_print (_("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"));
+ g_print (_("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"));
+ g_print (_("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"));
+ g_print (_("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"));
+ g_print (_("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"));
+ g_print (_("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"));
+ g_print (_("back :: go to upper menu level\n\n"));
break;
case NMC_EDITOR_SUB_CMD_HELP:
- printf (_("help/? [<command>] :: help for nmcli commands\n\n"));
+ g_print (_("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"));
+ g_print (_("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);
+ g_print (_("Unknown command: '%s'\n"), command);
break;
}
}
@@ -6429,20 +6790,31 @@ set_info_and_signal_editor_thread (GError *error, MonitorACInfo *monitor_ac_info
}
static void
-add_connection_editor_cb (NMRemoteSettings *settings,
- NMRemoteConnection *connection,
- GError *error,
+add_connection_editor_cb (GObject *client,
+ GAsyncResult *result,
gpointer user_data)
{
+ NMRemoteConnection *connection;
+ GError *error = NULL;
+
+ connection = nm_client_add_connection_finish (NM_CLIENT (client), result, &error);
set_info_and_signal_editor_thread (error, NULL);
+
+ g_clear_object (&connection);
+ g_clear_error (&error);
}
static void
-update_connection_editor_cb (NMRemoteConnection *connection,
- GError *error,
+update_connection_editor_cb (GObject *connection,
+ GAsyncResult *result,
gpointer user_data)
{
+ GError *error = NULL;
+
+ nm_remote_connection_commit_changes_finish (NM_REMOTE_CONNECTION (connection),
+ result, &error);
set_info_and_signal_editor_thread (error, NULL);
+ g_clear_error (&error);
}
static gboolean
@@ -6465,13 +6837,13 @@ progress_activation_editor_cb (gpointer user_data)
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)));
+ g_print (_("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"));
+ g_print (_("Error: Connection activation failed.\n"));
goto finish; /* we are done */
}
@@ -6486,29 +6858,34 @@ finish:
}
static void
-activate_connection_editor_cb (NMClient *client,
- NMActiveConnection *active,
- GError *error,
+activate_connection_editor_cb (GObject *client,
+ GAsyncResult *result,
gpointer user_data)
{
ActivateConnectionInfo *info = (ActivateConnectionInfo *) user_data;
NMDevice *device = info->device;
const GPtrArray *ac_devs;
MonitorACInfo *monitor_ac_info = NULL;
+ NMActiveConnection *active;
+ GError *error = NULL;
+
+ active = nm_client_activate_connection_finish (NM_CLIENT (client), result, &error);
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;
+ device = 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->ac = active;
monitor_ac_info->monitor_id = g_timeout_add (120, progress_activation_editor_cb, monitor_ac_info);
- }
+ } else
+ g_object_unref (active);
}
set_info_and_signal_editor_thread (error, monitor_ac_info);
+ g_clear_error (&error);
}
/*----------------------------------------------------------------------------*/
@@ -6519,7 +6896,7 @@ 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_print ("\n=== [%s] ===\n%s\n", prop_name, desc);
g_free (desc);
}
@@ -6531,7 +6908,7 @@ print_setting_description (NMSetting *setting)
int i;
all_props = nmc_setting_get_valid_properties (setting);
- printf (("<<< %s >>>\n"), nm_setting_get_name (setting));
+ g_print (("<<< %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);
@@ -6549,8 +6926,8 @@ connection_remove_setting (NMConnection *connection, NMSetting *setting)
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));
+ g_print (_("Error: setting '%s' is mandatory and cannot be removed.\n"),
+ nm_setting_get_name (setting));
return FALSE;
}
@@ -6567,10 +6944,10 @@ editor_show_status_line (NMConnection *connection, gboolean dirty, gboolean temp
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"));
+ g_print (_("[ 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
@@ -6593,7 +6970,8 @@ is_connection_dirty (NMConnection *connection, NMRemoteConnection *remote)
{
return !nm_connection_compare (connection,
remote ? NM_CONNECTION (remote) : NULL,
- NM_SETTING_COMPARE_FLAG_EXACT);
+ NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS |
+ NM_SETTING_COMPARE_FLAG_IGNORE_TIMESTAMP);
}
static gboolean
@@ -6647,8 +7025,8 @@ property_edit_submenu (NmCli *nmc,
/* 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"));
+ g_print (_("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);
@@ -6684,27 +7062,33 @@ property_edit_submenu (NmCli *nmc,
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_print (_("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)
+ if (cmdsub == NMC_EDITOR_SUB_CMD_SET) {
+ /* Block change signals and restore original value */
+ g_signal_handlers_block_matched (curr_setting, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, NULL);
nmc_property_set_gvalue (curr_setting, prop_name, &prop_g_value);
+ g_signal_handlers_unblock_matched (curr_setting, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, NULL);
+ }
}
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);
+ rl_startup_hook = nmc_rl_set_deftext;
+ nmc_rl_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_print (_("Error: failed to set '%s' property: %s\n"), prop_name, tmp_err->message);
g_clear_error (&tmp_err);
+ g_signal_handlers_block_matched (curr_setting, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, NULL);
nmc_property_set_gvalue (curr_setting, prop_name, &prop_g_value);
+ g_signal_handlers_unblock_matched (curr_setting, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, NULL);
}
g_free (prop_val_user);
if (G_IS_VALUE (&prop_g_value))
@@ -6723,14 +7107,14 @@ property_edit_submenu (NmCli *nmc,
option ? g_strstrip (option) : NULL,
(guint32) val_int,
&tmp_err)) {
- printf (_("Error: %s\n"), tmp_err->message);
+ g_print (_("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_print (_("Error: failed to remove value of '%s': %s\n"), prop_name,
+ tmp_err->message);
g_clear_error (&tmp_err);
}
}
@@ -6750,10 +7134,10 @@ property_edit_submenu (NmCli *nmc,
|| matches (cmd_property_arg, "all") == 0)
editor_show_connection (connection, nmc);
else
- printf (_("Unknown command argument: '%s'\n"), cmd_property_arg);
+ g_print (_("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_print ("%s: %s\n", prop_name, prop_val);
g_free (prop_val);
}
break;
@@ -6780,7 +7164,7 @@ property_edit_submenu (NmCli *nmc,
case NMC_EDITOR_SUB_CMD_UNKNOWN:
default:
- printf (_("Unknown command: '%s'\n"), cmd_property_user);
+ g_print (_("Unknown command: '%s'\n"), cmd_property_user);
break;
}
g_free (cmd_property_user);
@@ -6843,7 +7227,7 @@ is_property_valid (NMSetting *setting, const char *property, GError **error)
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;
+ ret = g_strdup (prop_name);
g_strfreev (valid_props);
return ret;
}
@@ -6876,7 +7260,7 @@ ask_check_setting (const char *arg,
GError *err = NULL;
if (!arg) {
- printf (_("Available settings: %s\n"), valid_settings_str);
+ g_print (_("Available settings: %s\n"), valid_settings_str);
setting_name_user = nmc_readline (EDITOR_PROMPT_SETTING);
} else
setting_name_user = g_strdup (arg);
@@ -6885,7 +7269,7 @@ ask_check_setting (const char *arg,
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_print (_("Error: invalid setting name; %s\n"), err->message);
g_clear_error (&err);
}
g_free (setting_name_user);
@@ -6902,7 +7286,7 @@ ask_check_property (const char *arg,
GError *tmp_err = NULL;
if (!arg) {
- printf (_("Available properties: %s\n"), valid_props_str);
+ g_print (_("Available properties: %s\n"), valid_props_str);
prop_name_user = nmc_readline (EDITOR_PROMPT_PROPERTY);
if (prop_name_user)
g_strstrip (prop_name_user);
@@ -6910,7 +7294,7 @@ ask_check_property (const char *arg,
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_print (_("Error: property %s\n"), tmp_err->message);
g_clear_error (&tmp_err);
}
g_free (prop_name_user);
@@ -7026,7 +7410,7 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
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);
+ g_print (_("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);
@@ -7035,8 +7419,8 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
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));
+ con_tmp = nm_client_get_connection_by_uuid (nmc->client,
+ nm_connection_get_uuid (connection));
g_weak_ref_init (&weak, con_tmp);
rem_con = g_weak_ref_get (&weak);
@@ -7053,8 +7437,8 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
/* 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"));
+ g_print (_("The connection profile has been removed from another client. "
+ "You may type 'save' to restore it.\n"));
if (!cmd_user || *cmd_user == '\0')
continue;
@@ -7082,18 +7466,18 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
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);
+ g_print (_("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_print (_("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"));
+ g_print (_("Error: no setting selected; valid are [%s]\n"), valid_settings_str);
+ g_print (_("use 'goto <setting>' first, or 'set <setting>.<property>'\n"));
}
} else {
NMSetting *ss = NULL;
@@ -7107,8 +7491,8 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
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);
+ g_print (_("Error: invalid setting argument '%s'; valid are [%s]\n"),
+ cmd_arg_s, valid_settings_str);
break;
}
created_ss = TRUE;
@@ -7117,14 +7501,14 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
if (menu_ctx.curr_setting)
ss = menu_ctx.curr_setting;
else {
- printf (_("Error: missing setting for '%s' property\n"), cmd_arg_p);
+ g_print (_("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_print (_("Error: invalid property: %s\n"), tmp_err->message);
g_clear_error (&tmp_err);
if (created_ss)
g_object_unref (ss);
@@ -7137,15 +7521,15 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
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);
+ g_print (_("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_print (_("Error: failed to set '%s' property: %s\n"),
+ prop_name, tmp_err->message);
g_clear_error (&tmp_err);
}
@@ -7171,7 +7555,7 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
if (!setting) {
setting = nmc_setting_new_for_name (setting_name);
if (!setting) {
- printf (_("Error: unknown setting '%s'\n"), setting_name);
+ g_print (_("Error: unknown setting '%s'\n"), setting_name);
break;
}
nmc_setting_custom_init (setting);
@@ -7184,7 +7568,7 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
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);
+ g_print (_("You may edit the following properties: %s\n"), menu_ctx.valid_props_str);
break;
}
}
@@ -7223,12 +7607,12 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
/* 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_print (_("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);
+ g_print (_("Error: no argument given; valid are [%s]\n"), valid_settings_str);
} else {
NMSetting *ss = NULL;
gboolean descr_all;
@@ -7241,10 +7625,10 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
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);
+ g_print (_("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);
+ g_print (_("Error: invalid setting argument '%s'; valid are [%s]\n"),
+ user_s, valid_settings_str);
break;
}
} else
@@ -7264,8 +7648,8 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
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_print (_("Error: failed to remove value of '%s': %s\n"), prop_name,
+ tmp_err->message);
g_clear_error (&tmp_err);
}
} else {
@@ -7282,8 +7666,8 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
nmc_tab_completion.setting = NULL; /* for TAB completion */
}
} else
- printf (_("Error: %s properties, nor it is a setting name.\n"),
- tmp_err->message);
+ g_print (_("Error: %s properties, nor it is a setting name.\n"),
+ tmp_err->message);
g_clear_error (&tmp_err);
}
g_free (prop_name);
@@ -7306,8 +7690,8 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
/* 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"));
+ g_print (_("Error: no setting selected; valid are [%s]\n"), valid_settings_str);
+ g_print (_("use 'goto <setting>' first, or 'describe <setting>.<property>'\n"));
}
} else {
NMSetting *ss = NULL;
@@ -7323,8 +7707,8 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
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);
+ g_print (_("Error: invalid setting argument '%s'; valid are [%s]\n"),
+ user_s, valid_settings_str);
break;
}
unref_ss = TRUE;
@@ -7348,9 +7732,9 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
if (s_tmp)
print_setting_description (s_tmp);
else
- printf (_("Error: invalid property: %s, "
- "neither a valid setting name.\n"),
- tmp_err->message);
+ g_print (_("Error: invalid property: %s, "
+ "neither a valid setting name.\n"),
+ tmp_err->message);
g_clear_error (&tmp_err);
}
g_free (prop_name);
@@ -7377,12 +7761,12 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
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);
+ g_print (_("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);
+ g_print (_("Error: '%s' setting not present in the connection\n"), s_name);
break;
}
} else
@@ -7397,7 +7781,7 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
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_print ("%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 */
@@ -7407,9 +7791,9 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
/* 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_print (_("Error: invalid property: %s%s\n"),
+ err->message,
+ cmd_arg_s ? "" : _(", neither a valid setting name"));
g_clear_error (&err);
}
g_free (prop_name);
@@ -7425,19 +7809,34 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
case NMC_EDITOR_MAIN_CMD_VERIFY:
/* Verify current setting or the whole connection */
+ if (cmd_arg && strcmp (cmd_arg, "all") && strcmp (cmd_arg, "fix")) {
+ g_print (_("Invalid verify option: %s\n"), cmd_arg);
+ break;
+ }
+
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_print (_("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");
+ gboolean valid, modified;
+ gboolean fixed = TRUE;
+
+ valid = nm_connection_verify (connection, &tmp_err);
+ if (!valid && (g_strcmp0 (cmd_arg, "fix") == 0)) {
+ /* Try to fix normalizable errors */
+ g_clear_error (&tmp_err);
+ fixed = nm_connection_normalize (connection, NULL, &modified, &tmp_err);
+ }
+ g_print (_("Verify connection: %s\n"),
+ tmp_err ? tmp_err->message : "OK");
+ if (!fixed)
+ g_print (_("The error cannot be fixed automatically.\n"));
g_clear_error (&tmp_err);
}
break;
@@ -7454,7 +7853,7 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
else if (matches (cmd_arg, "persistent") == 0)
persistent = TRUE;
else {
- printf (_("Error: invalid argument '%s'\n"), cmd_arg);
+ g_print (_("Error: invalid argument '%s'\n"), cmd_arg);
break;
}
}
@@ -7470,15 +7869,14 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
info->nmc = nmc;
info->con_name = g_strdup (nm_connection_get_id (connection));
add_new_connection (persistent,
- nmc->system_settings,
+ nmc->client,
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);
+ connection);
update_connection (persistent, rem_con, update_connection_editor_cb, NULL);
}
@@ -7488,21 +7886,20 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
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_print (_("Error: Failed to save '%s' (%s) connection: %s\n"),
+ nm_connection_get_id (connection),
+ nm_connection_get_uuid (connection),
+ 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_print (!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_client_get_connection_by_uuid (nmc->client,
+ nm_connection_get_uuid (connection));
g_weak_ref_set (&weak, con_tmp);
refresh_remote_connection (&weak, &rem_con);
@@ -7517,8 +7914,7 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
/* Update settings in the local connection */
nm_connection_replace_settings_from_connection (connection,
- NM_CONNECTION (con_tmp),
- NULL);
+ NM_CONNECTION (con_tmp));
/* 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;
@@ -7530,9 +7926,11 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
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)"));
+ } else {
+ g_print (_("Error: connection verification failed: %s\n"),
+ err1 ? err1->message : _("(unknown error)"));
+ g_print (_("You may try running 'verify fix' to fix errors.\n"));
+ }
g_clear_error (&err1);
break;
@@ -7553,22 +7951,21 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
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"));
+ g_print (_("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_print (_("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,
+ if (!nmc_activate_connection (nmc, NM_CONNECTION (rem_con), ifname, ap_nsp, ap_nsp, NULL,
activate_connection_editor_cb, &tmp_err)) {
- printf (_("Error: Cannot activate connection: %s.\n"), tmp_err->message);
+ g_print (_("Error: Cannot activate connection: %s.\n"), tmp_err->message);
g_clear_error (&tmp_err);
break;
}
@@ -7578,13 +7975,13 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
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_print (_("Error: Failed to activate '%s' (%s) connection: %s\n"),
+ nm_connection_get_id (connection),
+ nm_connection_get_uuid (connection),
+ nmc_editor_error->message);
g_error_free (nmc_editor_error);
} else {
- printf (_("Monitoring connection activation (press any key to continue)\n"));
+ g_print (_("Monitoring connection activation (press any key to continue)\n"));
nmc_get_user_input ("");
}
@@ -7622,7 +8019,7 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
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_print (_("Error: status-line: %s\n"), tmp_err->message);
g_clear_error (&tmp_err);
} else
nmc->editor_status_line = bb;
@@ -7630,16 +8027,24 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
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_print (_("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, "show-secrets") == 0) {
+ GError *tmp_err = NULL;
+ gboolean bb;
+ if (!nmc_string_to_bool (cmd_arg_v ? g_strstrip (cmd_arg_v) : "", &bb, &tmp_err)) {
+ g_print (_("Error: show-secrets: %s\n"), tmp_err->message);
+ g_clear_error (&tmp_err);
+ } else
+ nmc->editor_show_secrets = 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 : "");
+ g_print (_("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);
@@ -7650,16 +8055,18 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
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);
+ g_print (_("Current nmcli configuration:\n"));
+ g_print ("status-line: %s\n"
+ "save-confirmation: %s\n"
+ "show-secrets: %s\n"
+ "prompt-color: %d\n",
+ nmc->editor_status_line ? "yes" : "no",
+ nmc->editor_save_confirmation ? "yes" : "no",
+ nmc->editor_show_secrets ? "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");
+ g_print (_("Invalid configuration option '%s'; allowed [%s]\n"),
+ cmd_arg_v ? cmd_arg_v : "", "status-line, save-confirmation, show-secrets, prompt-color");
break;
@@ -7673,7 +8080,7 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
case NMC_EDITOR_MAIN_CMD_UNKNOWN:
default:
- printf (_("Unknown command: '%s'\n"), cmd_user);
+ g_print (_("Unknown command: '%s'\n"), cmd_user);
break;
}
@@ -7703,9 +8110,8 @@ 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++) {
+ for (i = 0; i < devices->len; i++) {
NMDevice *dev = g_ptr_array_index (devices, i);
if (NM_IS_DEVICE_ETHERNET (dev))
return nm_device_get_iface (dev);
@@ -7727,6 +8133,8 @@ editor_init_new_connection (NmCli *nmc, NMConnection *connection)
/* Initialize new connection according to its type using sensible defaults. */
+ nmc_setting_connection_connect_handlers (s_con, connection);
+
if (g_strcmp0 (con_type, "bond-slave") == 0)
slave_type = NM_SETTING_BOND_SETTING_NAME;
if (g_strcmp0 (con_type, "team-slave") == 0)
@@ -7755,16 +8163,16 @@ editor_init_new_connection (NmCli *nmc, NMConnection *connection)
/* 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",
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_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",
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_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",
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_INTERFACE_NAME, "nm-bridge",
NULL);
/* Set sensible initial VLAN values */
@@ -7826,13 +8234,14 @@ editor_init_new_connection (NmCli *nmc, NMConnection *connection)
static void
editor_init_existing_connection (NMConnection *connection)
{
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4, *s_ip6;
NMSettingWireless *s_wireless;
+ NMSettingConnection *s_con;
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);
+ s_con = nm_connection_get_setting_connection (connection);
if (s_ip4)
nmc_setting_ip4_connect_handlers (s_ip4);
@@ -7840,6 +8249,8 @@ editor_init_existing_connection (NMConnection *connection)
nmc_setting_ip6_connect_handlers (s_ip6);
if (s_wireless)
nmc_setting_wireless_connect_handlers (s_wireless);
+ if (s_con)
+ nmc_setting_connection_connect_handlers (s_con, connection);
}
static NMCResultCode
@@ -7911,7 +8322,7 @@ do_connection_edit (NmCli *nmc, int argc, char **argv)
/* Existing connection */
NMConnection *found_con;
- found_con = nmc_find_connection (nmc->system_connections, selector, con, NULL);
+ found_con = nmc_find_connection (nmc->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;
@@ -7921,18 +8332,21 @@ do_connection_edit (NmCli *nmc, int argc, char **argv)
/* Duplicate the connection and use that so that we need not
* differentiate existing vs. new later
*/
- connection = nm_connection_duplicate (found_con);
+ connection = nm_simple_connection_new_clone (found_con);
+
+ /* Merge secrets into the connection */
+ update_secrets_in_connection (NM_REMOTE_CONNECTION (found_con), connection);
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));
+ g_print (_("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));
+ g_print (_("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));
@@ -7945,9 +8359,9 @@ do_connection_edit (NmCli *nmc, int argc, char **argv)
while (!connection_type) {
if (!type)
- printf (_("Valid connection types: %s\n"), tmp_str);
+ g_print (_("Valid connection types: %s\n"), tmp_str);
else
- printf (_("Error: invalid connection type; %s\n"), err1->message);
+ g_print (_("Error: invalid connection type; %s\n"), err1->message);
g_clear_error (&err1);
type_ask = nmc_readline (EDITOR_PROMPT_CON_TYPE);
@@ -7958,7 +8372,7 @@ do_connection_edit (NmCli *nmc, int argc, char **argv)
g_free (tmp_str);
/* Create a new connection object */
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Build up the 'connection' setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -7966,7 +8380,7 @@ do_connection_edit (NmCli *nmc, int argc, char **argv)
if (con_name)
default_name = g_strdup (con_name);
else
- default_name = unique_connection_name (nmc->system_connections,
+ default_name = unique_connection_name (nmc->connections,
get_name_alias (connection_type, nmc_valid_connection_types));
g_object_set (s_con,
@@ -7982,18 +8396,21 @@ do_connection_edit (NmCli *nmc, int argc, char **argv)
editor_init_new_connection (nmc, connection);
}
- printf ("\n");
- printf (_("===| nmcli interactive connection editor |==="));
- printf ("\n\n");
+ /* nmcli runs the editor */
+ nmc->in_editor = TRUE;
+
+ g_print ("\n");
+ g_print (_("===| nmcli interactive connection editor |==="));
+ g_print ("\n\n");
if (con)
- printf (_("Editing existing '%s' connection: '%s'"), connection_type, con);
+ g_print (_("Editing existing '%s' connection: '%s'"), connection_type, con);
else
- 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");
+ g_print (_("Adding a new '%s' connection"), connection_type);
+ g_print ("\n\n");
+ g_print (_("Type 'help' or '?' for available commands."));
+ g_print ("\n");
+ g_print (_("Type 'describe [<setting>.<prop>]' for detailed property description."));
+ g_print ("\n\n");
/* Set global variables for use in TAB completion */
nmc_tab_completion.nmc = nmc;
@@ -8020,23 +8437,26 @@ error:
static void
-modify_connection_cb (NMRemoteConnection *connection,
- GError *error,
+modify_connection_cb (GObject *connection,
+ GAsyncResult *result,
gpointer user_data)
{
NmCli *nmc = (NmCli *) user_data;
+ GError *error = NULL;
- if (error) {
+ if (!nm_remote_connection_commit_changes_finish (NM_REMOTE_CONNECTION (connection),
+ result, &error)) {
g_string_printf (nmc->return_text,
- _("Error: Failed to modify connection '%s': (%d) %s"),
+ _("Error: Failed to modify connection '%s': %s"),
nm_connection_get_id (NM_CONNECTION (connection)),
- error->code, error->message);
+ error->message);
+ g_error_free (error);
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)));
+ g_print (_("Connection '%s' (%s) successfully modified.\n"),
+ nm_connection_get_id (NM_CONNECTION (connection)),
+ nm_connection_get_uuid (NM_CONNECTION (connection)));
}
quit ();
}
@@ -8065,15 +8485,6 @@ do_connection_modify (NmCli *nmc,
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;
@@ -8098,14 +8509,14 @@ do_connection_modify (NmCli *nmc,
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
goto finish;
}
- connection = nmc_find_connection (nmc->system_connections, selector, name, NULL);
+ connection = nmc_find_connection (nmc->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));
+ rc = nm_client_get_connection_by_uuid (nmc->client,
+ 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;
@@ -8241,12 +8652,15 @@ typedef struct {
} DeleteStateInfo;
static void
-delete_cb (NMRemoteConnection *con, GError *err, gpointer user_data)
+delete_cb (GObject *con, GAsyncResult *result, gpointer user_data)
{
DeleteStateInfo *info = (DeleteStateInfo *) user_data;
+ GError *error = NULL;
- if (err) {
- g_string_printf (info->nmc->return_text, _("Error: Connection deletion failed: %s"), err->message);
+ if (!nm_remote_connection_delete_finish (NM_REMOTE_CONNECTION (con), result, &error)) {
+ g_string_printf (info->nmc->return_text, _("Error: Connection deletion failed: %s"),
+ error->message);
+ g_error_free (error);
info->nmc->return_value = NMC_RESULT_ERROR_CON_DEL;
}
@@ -8268,20 +8682,11 @@ do_connection_delete (NmCli *nmc, int argc, char **argv)
int arg_num = argc;
GString *invalid_cons = NULL;
gboolean del_info_free = FALSE;
- GSList *pos = NULL;
+ int pos = 0;
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);
@@ -8314,10 +8719,10 @@ do_connection_delete (NmCli *nmc, int argc, char **argv)
}
}
- connection = nmc_find_connection (nmc->system_connections, selector, *arg_ptr, &pos);
+ connection = nmc_find_connection (nmc->connections, selector, *arg_ptr, &pos);
if (!connection) {
if (nmc->print_output != NMC_PRINT_TERSE)
- printf (_("Error: unknown connection: %s\n"), *arg_ptr);
+ g_print (_("Error: unknown connection: %s\n"), *arg_ptr);
if (!invalid_cons)
invalid_cons = g_string_new (NULL);
@@ -8339,7 +8744,8 @@ do_connection_delete (NmCli *nmc, int argc, char **argv)
del_info->counter++;
/* Delete the connection */
- nm_remote_connection_delete (NM_REMOTE_CONNECTION (connection), delete_cb, del_info);
+ nm_remote_connection_delete_async (NM_REMOTE_CONNECTION (connection),
+ NULL, delete_cb, del_info);
/* Take next argument (if there's no other connection of the same name) */
if (!pos)
@@ -8369,18 +8775,16 @@ do_connection_reload (NmCli *nmc, int argc, char **argv)
nmc->return_value = NMC_RESULT_SUCCESS;
nmc->should_wait = FALSE;
- if (!nm_client_get_manager_running (nmc->client)) {
+ if (!nm_client_get_nm_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;
- else
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
+ if (!nm_client_reload_connections (nmc->client, NULL, &error)) {
+ g_string_printf (nmc->return_text, _("Error: failed to reload connections: %s."),
+ error->message);
+ nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
g_clear_error (&error);
}
@@ -8397,7 +8801,7 @@ do_connection_load (NmCli *nmc, int argc, char **argv)
nmc->return_value = NMC_RESULT_SUCCESS;
nmc->should_wait = FALSE;
- if (!nm_client_get_manager_running (nmc->client)) {
+ if (!nm_client_get_nm_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;
@@ -8414,17 +8818,18 @@ do_connection_load (NmCli *nmc, int argc, char **argv)
filenames[i] = argv[i];
filenames[i] = NULL;
- nm_remote_settings_load_connections (nmc->system_settings, filenames, &failures, &error);
+ nm_client_load_connections (nmc->client, filenames, &failures, NULL, &error);
g_free (filenames);
if (error) {
- g_string_printf (nmc->return_text, _("Error: %s."), error->message);
+ g_string_printf (nmc->return_text, _("Error: failed to load connection: %s."),
+ error->message);
nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
g_error_free (error);
}
if (failures) {
for (i = 0; failures[i]; i++)
- fprintf (stderr, _("Could not load file '%s'\n"), failures[i]);
+ g_printerr (_("Could not load file '%s'\n"), failures[i]);
g_strfreev (failures);
}
@@ -8463,17 +8868,16 @@ connection_editor_thread_func (gpointer data)
static char *
gen_func_connection_names (const char *text, int state)
{
- int i = 0;
- GSList *iter;
+ int i;
const char **connections;
char *ret;
- if (!nm_cli.system_connections)
+ if (nm_cli.connections->len == 0)
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);
+ connections = g_new (const char *, nm_cli.connections->len + 1);
+ for (i = 0; i < nm_cli.connections->len; i++) {
+ NMConnection *con = NM_CONNECTION (nm_cli.connections->pdata[i]);
const char *id = nm_connection_get_id (con);
connections[i++] = id;
}
@@ -8509,198 +8913,108 @@ nmcli_con_tab_completion (const char *text, int start, int end)
return match_array;
}
-static NMCResultCode
-parse_cmd (NmCli *nmc, int argc, char **argv)
+/* Entry point function for connections-related commands: 'nmcli connection' */
+NMCResultCode
+do_connections (NmCli *nmc, int argc, char **argv)
{
GError *error = NULL;
+ /* Register polkit agent */
+ nmc_start_polkit_agent_start_try (nmc);
+
+ /* Set completion function for 'nmcli con' */
rl_attempted_completion_function = (rl_completion_func_t *) nmcli_con_tab_completion;
+ /* Exit early on help */
+ if (nmc_arg_is_help (*argv)) {
+ usage ();
+ return nmc->return_value;
+ }
+ if (argc != 0 && nmc_arg_is_help (*(argv+1))) {
+ if (usage_connection_second_level (*argv))
+ return nmc->return_value;
+ }
+
+ /* Get NMClient object early */
+ nmc->get_client (nmc);
+
+ /* Check whether NetworkManager is running */
+ if (!nm_client_get_nm_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;
+ }
+ /* Compare NM and nmcli versions */
+ if (!nmc_versions_match (nmc))
+ return nmc->return_value;
+
+ /* Get the connection list */
+ nmc->connections = nm_client_get_connections (nmc->client);
+
+ /* Now parse the command line and perform the required operation */
if (argc == 0) {
if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error))
goto opt_error;
- nmc->return_value = do_connections_show (nmc, FALSE, argc, argv);
+ nmc->return_value = do_connections_show (nmc, FALSE, FALSE, argc, argv);
} else {
- if (nmc_arg_is_help (*argv)) {
- usage ();
- goto usage_exit;
- }
- else if (matches (*argv, "show") == 0) {
+ if (matches (*argv, "show") == 0) {
gboolean active = FALSE;
-
- if (nmc_arg_is_help (*(argv+1))) {
- usage_connection_show ();
- goto usage_exit;
- }
+ gboolean show_secrets = FALSE;
+ int i;
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;
+ /* check connection show options [--active] [--show-secrets] */
+ for (i = 0; i < 2; i++) {
+ if (!active && nmc_arg_is_option (*argv, "active")) {
+ active = TRUE;
+ next_arg (&argc, &argv);
+ }
+ if (!show_secrets && nmc_arg_is_option (*argv, "show-secrets")) {
+ show_secrets = TRUE;
+ next_arg (&argc, &argv);
+ }
}
+ nmc->return_value = do_connections_show (nmc, active, show_secrets, argc, argv);
+ } else if (matches(*argv, "up") == 0) {
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;
- }
+ } else if (matches(*argv, "down") == 0) {
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;
- }
+ } else if (matches(*argv, "add") == 0) {
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;
- }
+ } else if (matches(*argv, "edit") == 0) {
+ nmc->should_wait = TRUE;
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;
- }
+ } else if (matches(*argv, "delete") == 0) {
nmc->return_value = do_connection_delete (nmc, argc-1, argv+1);
- }
- else if (matches(*argv, "reload") == 0) {
- if (nmc_arg_is_help (*(argv+1))) {
- usage_connection_reload ();
- goto usage_exit;
- }
+ } else if (matches(*argv, "reload") == 0) {
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;
- }
+ } else if (matches(*argv, "load") == 0) {
nmc->return_value = do_connection_load (nmc, argc-1, argv+1);
- }
- else if (matches (*argv, "modify") == 0) {
+ } 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 {
+ } else {
usage ();
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;
}
}
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;
- nmc->should_wait = FALSE;
g_error_free (error);
return nmc->return_value;
}
-
-/* callback called when connections are obtained from the settings service */
-static void
-get_connections_cb (NMRemoteSettings *settings, gpointer user_data)
-{
- ArgsInfo *args = (ArgsInfo *) user_data;
-
- /* Get the connection list */
- args->nmc->system_connections = nm_remote_settings_list_connections (settings);
-
- parse_cmd (args->nmc, args->argc, args->argv);
-
- if (!args->nmc->should_wait)
- quit ();
-}
-
-/* Entry point function for connections-related commands: 'nmcli connection' */
-NMCResultCode
-do_connections (NmCli *nmc, int argc, char **argv)
-{
- int i = 0;
- gboolean real_cmd = FALSE;
-
- if (argc == 0)
- real_cmd = TRUE;
- else {
- while (real_con_commands[i] && matches (*argv, real_con_commands[i]) != 0)
- i++;
- if (real_con_commands[i] != NULL)
- real_cmd = TRUE;
- }
-
- if (!real_cmd) {
- /* no real execution command - no need to get connections */
- return parse_cmd (nmc, argc, argv);
- } else {
- if (!nmc_versions_match (nmc))
- return nmc->return_value;
-
- /* Get NMClient object early */
- nmc->get_client (nmc);
-
- nmc->should_wait = TRUE;
-
- args_info.nmc = nmc;
- args_info.argc = argc;
- args_info.argv = argv;
-
- /* get system settings */
- 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;
- return nmc->return_value;
- }
-
- /* find out whether settings service is running */
- g_object_get (nmc->system_settings, NM_REMOTE_SETTINGS_SERVICE_RUNNING, &nmc->system_settings_running, NULL);
-
- if (!nmc->system_settings_running) {
- g_string_printf (nmc->return_text, _("Error: Can't obtain connections: settings service is not running."));
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
- nmc->should_wait = FALSE;
- return nmc->return_value;
- }
-
- /* connect to signal "connections-read" - emitted when connections are fetched and ready */
- g_signal_connect (nmc->system_settings, NM_REMOTE_SETTINGS_CONNECTIONS_READ,
- G_CALLBACK (get_connections_cb), &args_info);
-
- /* The rest will be done in get_connection_cb() callback.
- * We need to wait for signals that connections are read.
- */
- return NMC_RESULT_SUCCESS;
- }
-}
diff --git a/cli/src/connections.h b/clients/cli/connections.h
index c73685979..c73685979 100644
--- a/cli/src/connections.h
+++ b/clients/cli/connections.h
diff --git a/cli/src/devices.c b/clients/cli/devices.c
index 17492066b..5530adc73 100644
--- a/cli/src/devices.c
+++ b/clients/cli/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 - 2014 Red Hat, Inc.
+ * Copyright 2010 - 2014 Red Hat, Inc.
*/
#include "config.h"
@@ -23,45 +23,13 @@
#include <string.h>
#include <stdlib.h>
#include <errno.h>
-#include <netinet/ether.h>
#include <readline/readline.h>
#include <glib.h>
#include <glib/gi18n.h>
-#include <nm-client.h>
-#include <nm-device.h>
-#include <nm-device-ethernet.h>
-#include <nm-device-adsl.h>
-#include <nm-device-wifi.h>
-#include <nm-device-modem.h>
-#include <nm-device-bt.h>
-#include <nm-device-olpc-mesh.h>
-#if WITH_WIMAX
-#include <nm-device-wimax.h>
-#endif
-#include <nm-device-infiniband.h>
-#include <nm-device-bond.h>
-#include <nm-device-bridge.h>
-#include <nm-device-vlan.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>
-#include <nm-setting-wired.h>
-#include <nm-setting-adsl.h>
-#include <nm-setting-pppoe.h>
-#include <nm-setting-wireless.h>
-#include <nm-setting-gsm.h>
-#include <nm-setting-cdma.h>
-#include <nm-setting-bluetooth.h>
-#include <nm-setting-olpc-mesh.h>
-#if WITH_WIMAX
-#include <nm-setting-wimax.h>
-#endif
-#include <nm-setting-infiniband.h>
-
+#include "nm-secret-agent-simple.h"
+#include "polkit-agent.h"
#include "utils.h"
#include "common.h"
#include "devices.h"
@@ -100,16 +68,17 @@ static NmcOutputField nmc_fields_dev_show_general[] = {
{"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 */
+ {"IS-SOFTWARE", N_("IS-SOFTWARE"), 15}, /* 14 */
+ {"NM-MANAGED", N_("NM-MANAGED"), 15}, /* 15 */
+ {"AUTOCONNECT", N_("AUTOCONNECT"), 15}, /* 16 */
+ {"FIRMWARE-MISSING", N_("FIRMWARE-MISSING"), 18}, /* 17 */
+ {"CONNECTION", N_("CONNECTION"), 20}, /* 18 */
+ {"CON-UUID", N_("CON-UUID"), 38}, /* 19 */
+ {"CON-PATH", N_("CON-PATH"), 51}, /* 20 */
{NULL, 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"
+ "UDI,IP-IFACE,IS-SOFTWARE,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 */
@@ -127,10 +96,11 @@ static NmcOutputField nmc_fields_dev_show_cap[] = {
{"NAME", N_("NAME"), 13}, /* 0 */
{"CARRIER-DETECT", N_("CARRIER-DETECT"), 16}, /* 1 */
{"SPEED", N_("SPEED"), 10}, /* 2 */
+ {"IS-SOFTWARE", N_("IS-SOFTWARE"), 12}, /* 3 */
{NULL, NULL, 0}
};
-#define NMC_FIELDS_DEV_SHOW_CAP_ALL "NAME,CARRIER-DETECT,SPEED"
-#define NMC_FIELDS_DEV_SHOW_CAP_COMMON "NAME,CARRIER-DETECT,SPEED"
+#define NMC_FIELDS_DEV_SHOW_CAP_ALL "NAME,CARRIER-DETECT,SPEED,IS-SOFTWARE"
+#define NMC_FIELDS_DEV_SHOW_CAP_COMMON "NAME,CARRIER-DETECT,SPEED,IS-SOFTWARE"
/* Available fields for 'device show' - wired properties part */
static NmcOutputField nmc_fields_dev_show_wired_prop[] = {
@@ -210,23 +180,33 @@ static NmcOutputField nmc_fields_dev_wimax_list[] = {
#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
-/* Available fields for 'device show' - BOND part */
-static NmcOutputField nmc_fields_dev_show_bond_prop[] = {
+/* Available fields for 'device show' - BOND, TEAM, BRIDGE part */
+static NmcOutputField nmc_fields_dev_show_master_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"
+#define NMC_FIELDS_DEV_SHOW_MASTER_PROP_ALL "NAME,SLAVES"
+#define NMC_FIELDS_DEV_SHOW_MASTER_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 */
+ {"PARENT", N_("PARENT"), 10}, /* 1 */
+ {"ID", N_("ID"), 5}, /* 2 */
{NULL, NULL, 0}
};
-#define NMC_FIELDS_DEV_SHOW_VLAN_PROP_ALL "NAME,ID"
-#define NMC_FIELDS_DEV_SHOW_VLAN_PROP_COMMON "NAME,ID"
+#define NMC_FIELDS_DEV_SHOW_VLAN_PROP_ALL "NAME,PARENT,ID"
+#define NMC_FIELDS_DEV_SHOW_VLAN_PROP_COMMON "NAME,PARENT,ID"
+
+/* Available fields for 'device show' - BLUETOOTH part */
+static NmcOutputField nmc_fields_dev_show_bluetooth[] = {
+ {"NAME", N_("NAME"), 0}, /* 0 */
+ {"CAPABILITIES", N_("CAPABILITIES"), 0}, /* 1 */
+ {NULL, NULL, 0}
+};
+#define NMC_FIELDS_DEV_SHOW_BLUETOOTH_ALL "NAME,CAPABILITIES"
+#define NMC_FIELDS_DEV_SHOW_BLUETOOTH_COMMON "NAME,CAPABILITIES"
/* defined in common.c */
extern NmcOutputField nmc_fields_ip4_config[];
@@ -247,19 +227,22 @@ static NmcOutputField nmc_fields_dev_show_sections[] = {
{"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 */
+ {"BOND", N_("BOND"), 0, nmc_fields_dev_show_master_prop + 1 }, /* 11 */
+ {"TEAM", N_("TEAM"), 0, nmc_fields_dev_show_master_prop + 1 }, /* 12 */
+ {"BRIDGE", N_("BRIDGE"), 0, nmc_fields_dev_show_master_prop + 1 }, /* 13 */
+ {"VLAN", N_("VLAN"), 0, nmc_fields_dev_show_vlan_prop + 1 }, /* 14 */
+ {"BLUETOOTH", N_("BLUETOOTH"), 0, nmc_fields_dev_show_bluetooth + 1 }, /* 15 */
+ {"CONNECTIONS", N_("CONNECTIONS"), 0, nmc_fields_dev_show_connections + 1 }, /* 16 */
{NULL, NULL, 0, NULL }
};
#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_ALL "GENERAL,CAPABILITIES,BOND,TEAM,BRIDGE,VLAN,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,"\
+ "WIMAX-PROPERTIES,NSP,BLUETOOTH,CONNECTIONS,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_ALL "GENERAL,CAPABILITIES,BOND,TEAM,BRIDGE,VLAN,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,"\
+ "BLUETOOTH,CONNECTIONS,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
@@ -273,127 +256,134 @@ static guint progress_id = 0; /* ID of event source for displaying progress */
static void
usage (void)
{
- fprintf (stderr,
- _("Usage: nmcli device { COMMAND | help }\n\n"
+ g_printerr (_("Usage: nmcli device { COMMAND | help }\n\n"
#if WITH_WIMAX
- "COMMAND := { status | show | connect | disconnect | wifi | wimax }\n\n"
+ "COMMAND := { status | show | connect | disconnect | delete | wifi | wimax }\n\n"
#else
- "COMMAND := { status | show | connect | disconnect | wifi }\n\n"
+ "COMMAND := { status | show | connect | disconnect | delete | wifi }\n\n"
#endif
- " 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"
+ " status\n\n"
+ " show [<ifname>]\n\n"
+ " connect <ifname>\n\n"
+ " disconnect <ifname>\n\n"
+ " delete <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 [ifname <ifname>] [nsp <name>]]\n\n"
+ " wimax [list [ifname <ifname>] [nsp <name>]]\n\n"
#endif
- ));
+ ));
}
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"));
+ g_printerr (_("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"));
+ g_printerr (_("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"));
+ g_printerr (_("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"));
+ g_printerr (_("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_delete (void)
+{
+ g_printerr (_("Usage: nmcli device delete { ARGUMENTS | help }\n"
+ "\n"
+ "ARGUMENTS := <ifname>\n"
+ "\n"
+ "Deletes the software device.\n"
+ "The command removes the interface. It only works for software devices\n"
+ "(like bonds, bridges, etc.). Hardware devices cannot be deleted by the\n"
+ "command.\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"));
+ g_printerr (_("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"));
+ g_printerr (_("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
@@ -437,11 +427,6 @@ get_devices_sorted (NMClient *client)
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 *));
@@ -512,18 +497,13 @@ fill_output_access_point (gpointer data, gpointer user_data)
NM80211ApSecurityFlags wpa_flags, rsn_flags;
guint32 freq, bitrate;
guint8 strength;
- const GByteArray *ssid;
+ GBytes *ssid;
const char *bssid;
NM80211Mode mode;
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) {
@@ -545,8 +525,12 @@ fill_output_access_point (gpointer data, gpointer user_data)
/* Convert to strings */
if (ssid) {
- ssid_str = nm_utils_ssid_to_utf8 (ssid);
- ssid_hex_str = ssid_to_hex ((const char *) ssid->data, ssid->len);
+ const guint8 *ssid_data;
+ gsize ssid_len;
+
+ ssid_data = g_bytes_get_data (ssid, &ssid_len);
+ ssid_str = nm_utils_ssid_to_utf8 (ssid_data, ssid_len);
+ 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);
@@ -554,11 +538,7 @@ fill_output_access_point (gpointer data, gpointer user_data)
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;
+ sig_bars = nm_utils_wifi_strength_bars (strength);
security_str = g_string_new (NULL);
@@ -663,6 +643,32 @@ fill_output_wimax_nsp (NMWimaxNsp *nsp, NmCli *nmc, NMDevice *dev, int idx, guin
}
#endif
+static char *
+bluetooth_caps_to_string (NMBluetoothCapabilities caps)
+{
+ char *caps_str[8]; /* Enough space for caps and terminating NULL */
+ char *ret_str;
+ int i = 0;
+
+ if (caps & NM_BT_CAPABILITY_DUN)
+ caps_str[i++] = g_strdup ("DUN");
+ if (caps & NM_BT_CAPABILITY_NAP)
+ caps_str[i++] = g_strdup ("NAP");
+
+ if (i == 0)
+ caps_str[i++] = g_strdup (_("(none)"));
+
+ caps_str[i] = NULL;
+
+ ret_str = g_strjoinv (" ", caps_str);
+
+ i = 0;
+ while (caps_str[i])
+ g_free (caps_str[i++]);
+
+ return ret_str;
+}
+
static const char *
construct_header_name (const char *base, const char *spec)
{
@@ -682,25 +688,65 @@ construct_header_name (const char *base, const char *spec)
static const char *
get_active_connection_id (NMDevice *device)
{
- const GPtrArray *avail_cons;
NMActiveConnection *ac;
- const char *ac_uuid;
- int i;
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));
+ return nm_active_connection_get_id (ac);
+}
+
+static gboolean
+print_bond_team_bridge_info (NMDevice *device,
+ NmCli *nmc,
+ const char *group_prefix,
+ const char *one_field)
+{
+ const GPtrArray *slaves = NULL;
+ GString *slaves_str;
+ int idx;
+ NmcOutputField *tmpl, *arr;
+ size_t tmpl_len;
+
+ 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));
+
+ slaves_str = g_string_new (NULL);
+ for (idx = 0; slaves && idx < slaves->len; idx++) {
+ NMDevice *slave = g_ptr_array_index (slaves, idx);
+ const char *iface = nm_device_get_iface (slave);
- if (g_strcmp0 (ac_uuid, test_uuid) == 0)
- return nm_connection_get_id (NM_CONNECTION (candidate));
+ if (iface) {
+ g_string_append (slaves_str, iface);
+ g_string_append_c (slaves_str, ' ');
+ }
}
- return NULL;
+ if (slaves_str->len > 0)
+ g_string_truncate (slaves_str, slaves_str->len-1); /* Chop off last space */
+
+ tmpl = nmc_fields_dev_show_master_prop;
+ tmpl_len = sizeof (nmc_fields_dev_show_master_prop);
+ nmc->print_fields.indices = parse_output_fields (one_field ? one_field : NMC_FIELDS_DEV_SHOW_MASTER_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, group_prefix); /* i.e. BOND, TEAM, BRIDGE */
+ set_val_str (arr, 1, slaves_str->str);
+ g_ptr_array_add (nmc->output_data, arr);
+
+ print_data (nmc); /* Print all data */
+
+ g_string_free (slaves_str, FALSE);
+ nmc_empty_output_fields (nmc);
+
+ return TRUE;
}
static gboolean
@@ -723,10 +769,8 @@ show_device_info (NMDevice *device, NmCli *nmc)
NmcOutputField *tmpl, *arr;
size_t tmpl_len;
gboolean was_output = FALSE;
- NMIP4Config *cfg4;
- NMIP6Config *cfg6;
- NMDHCP4Config *dhcp4;
- NMDHCP6Config *dhcp6;
+ NMIPConfig *cfg4, *cfg6;
+ NMDhcpConfig *dhcp4, *dhcp6;
const char *base_hdr = _("Device details");
GPtrArray *fields_in_section = NULL;
@@ -759,14 +803,15 @@ show_device_info (NMDevice *device, NmCli *nmc)
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"); /* Print empty line between groups in tabular mode */
+ g_print ("\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);
+ state = nm_device_get_state (device);
+ reason = nm_device_get_state_reason (device);
/* section GENERAL */
if (!strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[0].name)) {
@@ -798,12 +843,13 @@ show_device_info (NMDevice *device, NmCli *nmc)
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);
+ set_val_strc (arr, 14, nm_device_is_software (device) ? _("yes") : _("no"));
+ set_val_strc (arr, 15, nm_device_get_managed (device) ? _("yes") : _("no"));
+ set_val_strc (arr, 16, nm_device_get_autoconnect (device) ? _("yes") : _("no"));
+ set_val_strc (arr, 17, nm_device_get_firmware_missing (device) ? _("yes") : _("no"));
+ set_val_strc (arr, 18, get_active_connection_id (device));
+ set_val_strc (arr, 19, acon ? nm_active_connection_get_uuid (acon) : NULL);
+ set_val_strc (arr, 20, acon ? nm_object_get_path (NM_OBJECT (acon)) : NULL);
g_ptr_array_add (nmc->output_data, arr);
print_data (nmc); /* Print all data */
@@ -835,6 +881,7 @@ show_device_info (NMDevice *device, NmCli *nmc)
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);
+ set_val_strc (arr, 3, (caps & NM_DEVICE_CAP_IS_SOFTWARE) ? _("yes") : _("no"));
g_ptr_array_add (nmc->output_data, arr);
print_data (nmc); /* Print all data */
@@ -896,8 +943,7 @@ show_device_info (NMDevice *device, NmCli *nmc)
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, fill_output_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;
@@ -984,7 +1030,7 @@ show_device_info (NMDevice *device, NmCli *nmc)
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++) {
+ for (g = 0; g < nsps->len; g++) {
NMWimaxNsp *nsp = g_ptr_array_index (nsps, g);
fill_output_wimax_nsp (nsp, nmc, device, idx++, NMC_OF_FLAG_SECTION_PREFIX);
@@ -1017,71 +1063,70 @@ show_device_info (NMDevice *device, NmCli *nmc)
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_show_sections[section_idx].name, nmc_fields_dev_show_sections[11].name)) {
- const GPtrArray *slaves;
- GString *bond_slaves_str;
- int idx;
-
- bond_slaves_str = g_string_new (NULL);
- slaves = nm_device_bond_get_slaves (NM_DEVICE_BOND (device));
- for (idx = 0; slaves && idx < slaves->len; idx++) {
- NMDevice *slave = g_ptr_array_index (slaves, idx);
- const char *iface = nm_device_get_iface (slave);
-
- if (iface) {
- g_string_append (bond_slaves_str, iface);
- g_string_append_c (bond_slaves_str, ' ');
- }
- }
- if (bond_slaves_str->len > 0)
- g_string_truncate (bond_slaves_str, bond_slaves_str->len-1); /* Chop off last space */
+ /* Bond specific information */
+ if (NM_IS_DEVICE_BOND (device)) {
+ if (!strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[11].name))
+ was_output = print_bond_team_bridge_info (device, nmc, nmc_fields_dev_show_sections[11].name, section_fld);
+ }
+
+ /* Team specific information */
+ if (NM_IS_DEVICE_TEAM (device)) {
+ if (!strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[12].name))
+ was_output = print_bond_team_bridge_info (device, nmc, nmc_fields_dev_show_sections[12].name, section_fld);
+ }
+
+ /* Bridge specific information */
+ if (NM_IS_DEVICE_BRIDGE (device)) {
+ if (!strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[13].name))
+ was_output = print_bond_team_bridge_info (device, nmc, nmc_fields_dev_show_sections[13].name, section_fld);
+ }
+
+ /* VLAN-specific information */
+ if ((NM_IS_DEVICE_VLAN (device))) {
+ if (!strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[14].name)) {
+ char * vlan_id_str = g_strdup_printf ("%u", nm_device_vlan_get_vlan_id (NM_DEVICE_VLAN (device)));
+ NMDevice *parent = nm_device_vlan_get_parent (NM_DEVICE_VLAN (device));
- 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 = 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);
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);
+ set_val_strc (arr, 0, nmc_fields_dev_show_sections[14].name); /* "VLAN" */
+ set_val_strc (arr, 1, parent ? nm_device_get_iface (parent) : NULL);
+ set_val_str (arr, 2, vlan_id_str);
g_ptr_array_add (nmc->output_data, arr);
print_data (nmc); /* Print all data */
- g_string_free (bond_slaves_str, FALSE);
was_output = TRUE;
}
}
- /* VLAN-specific information */
- if ((NM_IS_DEVICE_VLAN (device))) {
- 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)));
-
- 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,
+ if (NM_IS_DEVICE_BT (device)) {
+ if (!strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[15].name)) {
+ tmpl = nmc_fields_dev_show_bluetooth;
+ tmpl_len = sizeof (nmc_fields_dev_show_bluetooth);
+ nmc->print_fields.indices = parse_output_fields (section_fld ? section_fld : NMC_FIELDS_DEV_SHOW_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_strc (arr, 0, nmc_fields_dev_show_sections[12].name); /* "VLAN" */
- set_val_str (arr, 1, vlan_id_str);
+ set_val_strc (arr, 0, nmc_fields_dev_show_sections[15].name); /* "BLUETOOTH" */
+ set_val_str (arr, 1, bluetooth_caps_to_string (nm_device_bt_get_capabilities (NM_DEVICE_BT (device))));
g_ptr_array_add (nmc->output_data, arr);
print_data (nmc); /* Print all data */
-
was_output = TRUE;
}
}
/* section CONNECTIONS */
- if (!strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[13].name)) {
+ if (!strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[16].name)) {
const GPtrArray *avail_cons;
GString *ac_paths_str;
char **ac_arr = NULL;
@@ -1097,11 +1142,11 @@ show_device_info (NMDevice *device, NmCli *nmc)
/* available-connections */
avail_cons = nm_device_get_available_connections (device);
ac_paths_str = g_string_new (NULL);
- if (avail_cons && avail_cons->len) {
+ if (avail_cons->len) {
ac_arr = g_new (char *, avail_cons->len + 1);
ac_arr[avail_cons->len] = NULL;
}
- for (i = 0; avail_cons && (i < avail_cons->len); i++) {
+ for (i = 0; i < avail_cons->len; i++) {
NMRemoteConnection *avail_con = g_ptr_array_index (avail_cons, i);
const char *ac_path = nm_connection_get_path (NM_CONNECTION (avail_con));
const char *ac_id = nm_connection_get_id (NM_CONNECTION (avail_con));
@@ -1119,7 +1164,7 @@ show_device_info (NMDevice *device, NmCli *nmc)
g_string_append_c (ac_paths_str, '}');
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_strc (arr, 0, nmc_fields_dev_show_sections[16].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);
@@ -1173,7 +1218,7 @@ do_devices_status (NmCli *nmc, int argc, char **argv)
size_t tmpl_len;
while (argc > 0) {
- fprintf (stderr, _("Unknown parameter: %s\n"), *argv);
+ g_printerr (_("Unknown parameter: %s\n"), *argv);
argc--;
argv++;
}
@@ -1196,17 +1241,6 @@ do_devices_status (NmCli *nmc, int argc, char **argv)
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;
-
/* Add headers */
nmc->print_fields.header_name = _("Status of devices");
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES);
@@ -1244,17 +1278,6 @@ do_devices_show (NmCli *nmc, int argc, char **argv)
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);
if (ifname) {
@@ -1280,7 +1303,7 @@ do_devices_show (NmCli *nmc, int argc, char **argv)
if (!ret)
break;
if (devices[i + 1])
- printf ("\n"); /* Empty line */
+ g_print ("\n"); /* Empty line */
}
}
@@ -1312,43 +1335,177 @@ progress_cb (gpointer user_data)
return TRUE;
}
+static void connected_state_cb (NMDevice *device, NMActiveConnection *active);
+
static void
-connected_state_cb (NMDevice *device, GParamSpec *pspec, gpointer user_data)
+device_state_cb (NMDevice *device, GParamSpec *pspec, gpointer user_data)
{
NMActiveConnection *active = (NMActiveConnection *) user_data;
+
+ connected_state_cb (device, active);
+}
+
+static void
+active_state_cb (NMActiveConnection *active, GParamSpec *pspec, gpointer user_data)
+{
+ NMDevice *device = (NMDevice *) user_data;
+
+ connected_state_cb (device, active);
+}
+
+static void
+connected_state_cb (NMDevice *device, NMActiveConnection *active)
+{
NMDeviceState state;
+ NMDeviceStateReason reason;
+ NMActiveConnectionState ac_state;
state = nm_device_get_state (device);
+ ac_state = nm_active_connection_get_state (active);
+
+ if (ac_state == NM_ACTIVE_CONNECTION_STATE_ACTIVATING)
+ return;
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));
+ g_print (_("Device '%s' successfully activated with '%s'.\n"),
+ nm_device_get_iface (device),
+ nm_active_connection_get_uuid (active));
+ } else if ( state <= NM_DEVICE_STATE_DISCONNECTED
+ || state >= NM_DEVICE_STATE_DEACTIVATING) {
+ reason = nm_device_get_state_reason (device);
+ g_print (_("Error: Connection activation failed: (%d) %s.\n"),
+ reason, nmc_device_reason_to_string (reason));
+ } else
+ return;
+
+ g_signal_handlers_disconnect_by_func (active, G_CALLBACK (active_state_cb), device);
+ g_signal_handlers_disconnect_by_func (device, G_CALLBACK (device_state_cb), active);
+
+ g_object_unref (active);
+ g_object_unref (device);
+
+ quit ();
+}
+
+typedef struct {
+ NmCli *nmc;
+ NMDevice *device;
+} AddAndActivateInfo;
+
+static void
+add_and_activate_cb (GObject *client,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ AddAndActivateInfo *info = (AddAndActivateInfo *) user_data;
+ NmCli *nmc = info->nmc;
+ NMDevice *device = info->device;
+ NMActiveConnectionState state;
+ NMActiveConnection *active;
+ GError *error = NULL;
+
+ active = nm_client_add_and_activate_connection_finish (NM_CLIENT (client), result, &error);
+
+ if (error) {
+ g_string_printf (nmc->return_text, _("Error: Failed to add/activate new connection: %s"),
+ error->message);
+ g_error_free (error);
+ nmc->return_value = NMC_RESULT_ERROR_CON_ACTIVATION;
quit ();
+ } else {
+ state = nm_active_connection_get_state (active);
+
+ if (state == NM_ACTIVE_CONNECTION_STATE_UNKNOWN) {
+ g_string_printf (nmc->return_text, _("Error: Failed to add/activate new connection: Unknown error"));
+ nmc->return_value = NMC_RESULT_ERROR_CON_ACTIVATION;
+ g_object_unref (active);
+ quit ();
+ }
+
+ 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) {
+ if (nmc->print_output == NMC_PRINT_PRETTY)
+ nmc_terminal_erase_line ();
+ g_print (_("Connection with UUID '%s' created and activated on device '%s'\n"),
+ nm_active_connection_get_uuid (active), nm_device_get_iface (device));
+ }
+ g_object_unref (active);
+ quit ();
+ } else {
+ g_object_ref (device);
+ g_signal_connect (device, "notify::state", G_CALLBACK (device_state_cb), active);
+ g_signal_connect (active, "notify::state", G_CALLBACK (active_state_cb), device);
+
+ g_timeout_add_seconds (nmc->timeout, timeout_cb, nmc); /* Exit if timeout expires */
+
+ if (nmc->print_output == NMC_PRINT_PRETTY)
+ progress_id = g_timeout_add (120, progress_cb, device);
+ }
}
+
+ g_free (info);
}
static void
-connect_device_cb (NMClient *client, NMActiveConnection *active, GError *error, gpointer user_data)
+create_connect_connection_for_device (AddAndActivateInfo *info)
{
- NmCli *nmc = (NmCli *) user_data;
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+
+ /* Create new connection and tie it to the device */
+ connection = nm_simple_connection_new ();
+ s_con = (NMSettingConnection *) nm_setting_connection_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_con));
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_ID, nm_device_get_iface (info->device),
+ NM_SETTING_CONNECTION_INTERFACE_NAME, nm_device_get_iface (info->device),
+ NULL);
+
+ nm_client_add_and_activate_connection_async (info->nmc->client,
+ connection,
+ info->device,
+ NULL,
+ NULL,
+ add_and_activate_cb,
+ info);
+}
+
+static void
+connect_device_cb (GObject *client, GAsyncResult *result, gpointer user_data)
+{
+ AddAndActivateInfo *info = (AddAndActivateInfo *) user_data;
+ NmCli *nmc = info->nmc;
+ NMActiveConnection *active;
+ GError *error = NULL;
const GPtrArray *devices;
NMDevice *device;
NMDeviceState state;
+ active = nm_client_activate_connection_finish (NM_CLIENT (client), result, &error);
+
if (error) {
+ /* If no connection existed for the device, create one and activate it */
+ if (g_error_matches (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_UNKNOWN_CONNECTION)) {
+ create_connect_connection_for_device (info);
+ return;
+ }
+
g_string_printf (nmc->return_text, _("Error: Device activation failed: %s"),
- error->message ? error->message : _("(unknown)"));
+ error->message);
+ g_error_free (error);
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) {
+ if (devices->len == 0) {
g_string_printf (nmc->return_text, _("Error: Device activation failed: device was disconnected"));
nmc->return_value = NMC_RESULT_ERROR_CON_ACTIVATION;
+ g_object_unref (active);
quit ();
+ g_free (info);
return;
}
@@ -1359,15 +1516,26 @@ connect_device_cb (NMClient *client, NMActiveConnection *active, GError *error,
/* 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));
+ g_print (_("Device '%s' has been connected.\n"), nm_device_get_iface (device));
}
+ g_object_unref (active);
quit ();
} else {
- g_signal_connect (device, "notify::state", G_CALLBACK (connected_state_cb), active);
+ if (nmc->secret_agent) {
+ NMRemoteConnection *connection = nm_active_connection_get_connection (active);
+
+ nm_secret_agent_simple_enable (NM_SECRET_AGENT_SIMPLE (nmc->secret_agent),
+ nm_connection_get_path (NM_CONNECTION (connection)));
+ }
+
+ g_object_ref (device);
+ g_signal_connect (device, "notify::state", G_CALLBACK (device_state_cb), active);
+ g_signal_connect (active, "notify::state", G_CALLBACK (active_state_cb), device);
/* Start timer not to loop forever if "notify::state" signal is not issued */
g_timeout_add_seconds (nmc->timeout, timeout_cb, nmc);
}
}
+ g_free (info);
}
static NMCResultCode
@@ -1378,6 +1546,7 @@ do_device_connect (NmCli *nmc, int argc, char **argv)
const char *ifname = NULL;
char *ifname_ask = NULL;
int i;
+ AddAndActivateInfo *info;
/* Set default timeout for connect operation. */
if (nmc->timeout == -1)
@@ -1408,16 +1577,6 @@ do_device_connect (NmCli *nmc, int argc, char **argv)
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];
@@ -1440,12 +1599,23 @@ do_device_connect (NmCli *nmc, int argc, char **argv)
*/
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);
+
+ /* Create secret agent */
+ nmc->secret_agent = nm_secret_agent_simple_new ("nmcli-connect");
+ if (nmc->secret_agent)
+ g_signal_connect (nmc->secret_agent, "request-secrets", G_CALLBACK (nmc_secrets_requested), nmc);
+
+ info = g_malloc0 (sizeof (AddAndActivateInfo));
+ info->nmc = nmc;
+ info->device = device;
+
+ nm_client_activate_connection_async (nmc->client,
+ NULL, /* let NM find a connection automatically */
+ device,
+ NULL,
+ NULL,
+ connect_device_cb,
+ info);
/* Start progress indication */
if (nmc->print_output == NMC_PRINT_PRETTY)
@@ -1460,28 +1630,42 @@ error:
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));
+ g_signal_handlers_disconnect_by_data (device, user_data);
+ g_print (_("Device '%s' successfully disconnected.\n"),
+ nm_device_get_iface (device));
quit ();
}
}
static void
-disconnect_device_cb (NMDevice *device, GError *error, gpointer user_data)
+device_removed_cb (NMClient *client, NMDevice *device, gpointer user_data)
+{
+ /* Success: device has been removed. It happens when disconnecting a software device. */
+ g_signal_handlers_disconnect_by_data (client, user_data);
+ g_print (_("Device '%s' successfully disconnected.\n"),
+ nm_device_get_iface (device));
+ quit ();
+}
+
+static void
+disconnect_device_cb (GObject *object, GAsyncResult *result, gpointer user_data)
{
+ NMDevice *device = NM_DEVICE (object);
NmCli *nmc = (NmCli *) user_data;
NMDeviceState state;
+ GError *error = NULL;
- if (error) {
+ if (!nm_device_disconnect_finish (device, result, &error)) {
g_string_printf (nmc->return_text, _("Error: Device '%s' (%s) disconnecting failed: %s"),
nm_device_get_iface (device),
nm_object_get_path (NM_OBJECT (device)),
- error->message ? error->message : _("(unknown)"));
+ error->message);
+ g_error_free (error);
nmc->return_value = NMC_RESULT_ERROR_DEV_DISCONNECT;
quit ();
} else {
@@ -1492,11 +1676,12 @@ disconnect_device_cb (NMDevice *device, GError *error, gpointer user_data)
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));
+ g_print (_("Device '%s' has been disconnected.\n"), nm_device_get_iface (device));
}
quit ();
} else {
g_signal_connect (device, "notify::state", G_CALLBACK (disconnect_state_cb), nmc);
+ g_signal_connect (nmc->client, NM_CLIENT_DEVICE_REMOVED, G_CALLBACK (device_removed_cb), nmc);
/* Start timer not to loop forever if "notify::state" signal is not issued */
g_timeout_add_seconds (nmc->timeout, timeout_cb, nmc);
}
@@ -1542,15 +1727,92 @@ do_device_disconnect (NmCli *nmc, int argc, char **argv)
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;
+ 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;
}
- if (!nmc_versions_match (nmc))
+ /*
+ * 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_async (device, NULL, disconnect_device_cb, nmc);
+
+ /* Start progress indication */
+ if (nmc->print_output == NMC_PRINT_PRETTY)
+ progress_id = g_timeout_add (120, progress_cb, device);
+
+error:
+ return nmc->return_value;
+}
+
+static void
+delete_device_cb (GObject *object, GAsyncResult *result, gpointer user_data)
+{
+ NMDevice *device = NM_DEVICE (object);
+ NmCli *nmc = (NmCli *) user_data;
+ GError *error = NULL;
+
+ if (!nm_device_delete_finish (device, result, &error)) {
+ g_string_printf (nmc->return_text, _("Error: Device '%s' (%s) deletion failed: %s"),
+ nm_device_get_iface (device),
+ nm_object_get_path (NM_OBJECT (device)),
+ error->message);
+ g_error_free (error);
+ nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
+ }
+ quit ();
+}
+
+static NMCResultCode
+do_device_delete (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 delete operation. */
+ if (nmc->timeout == -1)
+ nmc->timeout = 10;
+
+ 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;
+ }
devices = get_devices_sorted (nmc->client);
for (i = 0; devices[i]; i++) {
@@ -1568,13 +1830,19 @@ do_device_disconnect (NmCli *nmc, int argc, char **argv)
goto error;
}
+ if (!nm_device_is_software (device)) {
+ g_string_printf (nmc->return_text, _("Error: Device '%s' is a hardware device. It can't be deleted."), ifname);
+ nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
+ goto error;
+ }
+
/*
* 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.
+ * till delete_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);
+ nm_device_delete_async (device, NULL, delete_device_cb, nmc);
/* Start progress indication */
if (nmc->print_output == NMC_PRINT_PRETTY)
@@ -1585,7 +1853,7 @@ error:
}
static void
-show_acces_point_info (NMDevice *device, NmCli *nmc)
+show_access_point_info (NMDevice *device, NmCli *nmc)
{
NMAccessPoint *active_ap = NULL;
const char *active_bssid = NULL;
@@ -1609,8 +1877,7 @@ show_acces_point_info (NMDevice *device, NmCli *nmc)
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, fill_output_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);
@@ -1653,7 +1920,7 @@ do_device_wifi_list (NmCli *nmc, int argc, char **argv)
}
bssid_user = *argv;
} else {
- fprintf (stderr, _("Unknown parameter: %s\n"), *argv);
+ g_printerr (_("Unknown parameter: %s\n"), *argv);
}
argc--;
@@ -1678,17 +1945,6 @@ do_device_wifi_list (NmCli *nmc, int argc, char **argv)
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);
if (ifname) {
/* Device specified - list only APs of this interface */
@@ -1714,7 +1970,7 @@ do_device_wifi_list (NmCli *nmc, int argc, char **argv)
if (bssid_user) {
/* Specific AP requested - list only that */
aps = nm_device_wifi_get_access_points (NM_DEVICE_WIFI (device));
- for (j = 0; aps && (j < aps->len); j++) {
+ for (j = 0; j < aps->len; j++) {
char *bssid_up;
NMAccessPoint *candidate_ap = g_ptr_array_index (aps, j);
const char *candidate_bssid = nm_access_point_get_bssid (candidate_ap);
@@ -1746,7 +2002,7 @@ do_device_wifi_list (NmCli *nmc, int argc, char **argv)
print_data (nmc); /* Print all data */
g_free (info);
} else {
- show_acces_point_info (device, nmc);
+ show_access_point_info (device, nmc);
}
} else {
g_string_printf (nmc->return_text, _("Error: Device '%s' is not a Wi-Fi device."), ifname);
@@ -1754,6 +2010,8 @@ do_device_wifi_list (NmCli *nmc, int argc, char **argv)
goto error;
}
} else {
+ gboolean empty_line = FALSE;
+
/* List APs for all devices */
if (bssid_user) {
/* Specific AP requested - list only that */
@@ -1765,12 +2023,13 @@ do_device_wifi_list (NmCli *nmc, int argc, char **argv)
/* Main header name */
nmc->print_fields.header_name = (char *) construct_header_name (base_hdr, nm_device_get_iface (dev));
+ nmc->print_fields.indices = parse_output_fields (fields_str, tmpl, FALSE, NULL, NULL);
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++) {
+ for (j = 0; j < aps->len; j++) {
char *bssid_up;
NMAccessPoint *candidate_ap = g_ptr_array_index (aps, j);
const char *candidate_bssid = nm_access_point_get_bssid (candidate_ap);
@@ -1790,8 +2049,11 @@ do_device_wifi_list (NmCli *nmc, int argc, char **argv)
}
g_free (bssid_up);
}
+ if (empty_line)
+ g_print ("\n"); /* Empty line between devices' APs */
print_data (nmc); /* Print all data */
nmc_empty_output_fields (nmc);
+ empty_line = TRUE;
}
if (!ap) {
g_string_printf (nmc->return_text, _("Error: Access point with bssid '%s' not found."),
@@ -1806,8 +2068,14 @@ do_device_wifi_list (NmCli *nmc, int argc, char **argv)
/* 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);
+ nmc->print_fields.indices = parse_output_fields (fields_str, tmpl, FALSE, NULL, NULL);
+
+ if (NM_IS_DEVICE_WIFI (dev)) {
+ if (empty_line)
+ g_print ("\n"); /* Empty line between devices' APs */
+ show_access_point_info (dev, nmc);
+ empty_line = TRUE;
+ }
}
}
}
@@ -1817,83 +2085,6 @@ error:
return nmc->return_value;
}
-static void
-monitor_device_state_cb (NMDevice *device, GParamSpec *pspec, gpointer user_data)
-{
- NmCli *nmc = (NmCli *) user_data;
- NMDeviceState state;
- NMDeviceStateReason reason;
-
- state = nm_device_get_state_reason (device, &reason);
-
- if (state == NM_DEVICE_STATE_ACTIVATED) {
- 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));
- quit ();
- } else if (state == NM_DEVICE_STATE_FAILED) {
- g_string_printf (nmc->return_text, _("Error: Connection activation failed: (%d) %s."),
- reason, nmc_device_reason_to_string (reason));
- nmc->return_value = NMC_RESULT_ERROR_CON_ACTIVATION;
- quit ();
- }
-}
-
-typedef struct {
- NmCli *nmc;
- NMDevice *device;
-} AddAndActivateInfo;
-
-static void
-add_and_activate_cb (NMClient *client,
- NMActiveConnection *active,
- const char *connection_path,
- GError *error,
- gpointer user_data)
-{
- AddAndActivateInfo *info = (AddAndActivateInfo *) user_data;
- NmCli *nmc = info->nmc;
- NMDevice *device = info->device;
- NMActiveConnectionState state;
-
- if (error) {
- g_string_printf (nmc->return_text, _("Error: Failed to add/activate new connection: (%d) %s"),
- error->code, error->message);
- nmc->return_value = NMC_RESULT_ERROR_CON_ACTIVATION;
- quit ();
- } else {
- state = nm_active_connection_get_state (active);
-
- if (state == NM_ACTIVE_CONNECTION_STATE_UNKNOWN) {
- g_string_printf (nmc->return_text, _("Error: Failed to add/activate new connection: Unknown error"));
- nmc->return_value = NMC_RESULT_ERROR_CON_ACTIVATION;
- quit ();
- }
-
- 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) {
- 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));
- }
- quit ();
- } else {
- g_signal_connect (device, "notify::state", G_CALLBACK (monitor_device_state_cb), nmc);
- g_timeout_add_seconds (nmc->timeout, timeout_cb, nmc); /* Exit if timeout expires */
-
- if (nmc->print_output == NMC_PRINT_PRETTY)
- progress_id = g_timeout_add (120, progress_cb, device);
- }
- }
-
- g_free (info);
-}
-
/*
* Find a Wi-Fi device with 'iface' in 'devices' array. If 'iface' is NULL,
* the first Wi-Fi device is returned. 'idx' parameter is updated to the point
@@ -1907,7 +2098,7 @@ find_wifi_device_by_iface (const GPtrArray *devices, const char *iface, int *idx
NMDevice *device = NULL;
int i;
- for (i = *idx; devices && (i < devices->len); i++) {
+ for (i = *idx; i < devices->len; i++) {
NMDevice *candidate = g_ptr_array_index (devices, i);
const char *dev_iface = nm_device_get_iface (candidate);
@@ -1946,16 +2137,17 @@ find_ap_on_device (NMDevice *device, GByteArray *bssid, const char *ssid)
g_return_val_if_fail ((bssid && !ssid) || (!bssid && ssid), NULL);
aps = nm_device_wifi_get_access_points (NM_DEVICE_WIFI (device));
- for (i = 0; aps && (i < aps->len); i++) {
+ for (i = 0; i < aps->len; i++) {
NMAccessPoint *candidate_ap = g_ptr_array_index (aps, i);
if (ssid) {
/* Parameter is SSID */
- const GByteArray *candidate_ssid;
+ GBytes *candidate_ssid;
candidate_ssid = nm_access_point_get_ssid (candidate_ap);
if (candidate_ssid) {
- char *ssid_tmp = nm_utils_ssid_to_utf8 (candidate_ssid);
+ char *ssid_tmp = nm_utils_ssid_to_utf8 (g_bytes_get_data (candidate_ssid, NULL),
+ g_bytes_get_size (candidate_ssid));
/* Compare SSIDs */
if (strcmp (ssid, ssid_tmp) == 0) {
@@ -1968,7 +2160,7 @@ find_ap_on_device (NMDevice *device, GByteArray *bssid, const char *ssid)
} else if (bssid) {
/* Parameter is BSSID */
const char *candidate_bssid = nm_access_point_get_bssid (candidate_ap);
- char *bssid_up = nm_utils_hwaddr_ntoa (bssid->data, ARPHRD_ETHER);
+ char *bssid_up = nm_utils_hwaddr_ntoa (bssid->data, bssid->len);
/* Compare BSSIDs */
if (strcmp (bssid_up, candidate_bssid) == 0) {
@@ -2017,7 +2209,7 @@ do_device_wifi_connect_network (NmCli *nmc, int argc, char **argv)
/* Get the first compulsory argument (SSID or BSSID) */
if (argc > 0) {
param_user = *argv;
- bssid1_arr = nm_utils_hwaddr_atoba (param_user, ARPHRD_ETHER);
+ bssid1_arr = nm_utils_hwaddr_atoba (param_user, ETH_ALEN);
argc--;
argv++;
@@ -2025,7 +2217,7 @@ do_device_wifi_connect_network (NmCli *nmc, int argc, char **argv)
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);
+ bssid1_arr = nm_utils_hwaddr_atoba (param_user, ETH_ALEN);
}
if (!ssid_ask) {
g_string_printf (nmc->return_text, _("Error: SSID or BSSID are missing."));
@@ -2050,7 +2242,7 @@ do_device_wifi_connect_network (NmCli *nmc, int argc, char **argv)
goto error;
}
bssid = *argv;
- bssid2_arr = nm_utils_hwaddr_atoba (bssid, ARPHRD_ETHER);
+ bssid2_arr = nm_utils_hwaddr_atoba (bssid, ETH_ALEN);
if (!bssid2_arr) {
g_string_printf (nmc->return_text, _("Error: bssid argument value '%s' is not a valid BSSID."),
bssid);
@@ -2102,7 +2294,7 @@ do_device_wifi_connect_network (NmCli *nmc, int argc, char **argv)
goto error;
}
} else {
- fprintf (stderr, _("Unknown parameter: %s\n"), *argv);
+ g_printerr (_("Unknown parameter: %s\n"), *argv);
}
argc--;
@@ -2122,17 +2314,6 @@ do_device_wifi_connect_network (NmCli *nmc, int argc, char **argv)
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 = nm_client_get_devices (nmc->client);
/* Find a device to activate the connection on */
@@ -2171,7 +2352,7 @@ do_device_wifi_connect_network (NmCli *nmc, int argc, char **argv)
/* If there are some connection data from user, create a connection and
* fill them into proper settings. */
if (con_name || private || bssid2_arr || password)
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
if (con_name || private) {
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -2206,7 +2387,7 @@ do_device_wifi_connect_network (NmCli *nmc, int argc, char **argv)
if (password) {
if (!connection)
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
nm_connection_add_setting (connection, NM_SETTING (s_wsec));
@@ -2242,12 +2423,13 @@ do_device_wifi_connect_network (NmCli *nmc, int argc, char **argv)
info->nmc = nmc;
info->device = device;
- nm_client_add_and_activate_connection (nmc->client,
- connection,
- device,
- nm_object_get_path (NM_OBJECT (ap)),
- add_and_activate_cb,
- info);
+ nm_client_add_and_activate_connection_async (nmc->client,
+ connection,
+ device,
+ nm_object_get_path (NM_OBJECT (ap)),
+ NULL,
+ add_and_activate_cb,
+ info);
error:
if (bssid1_arr)
@@ -2261,14 +2443,16 @@ error:
}
static void
-request_rescan_cb (NMDeviceWifi *device, GError *error, gpointer user_data)
+request_rescan_cb (GObject *object, GAsyncResult *result, gpointer user_data)
{
NmCli *nmc = (NmCli *) user_data;
+ GError *error = NULL;
+ nm_device_wifi_request_scan_finish (NM_DEVICE_WIFI (object), result, &error);
if (error) {
- g_string_printf (nmc->return_text, _("Error: %s."),
- error->message ? error->message : _("unknown"));
+ g_string_printf (nmc->return_text, _("Error: %s."), error->message);
nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
+ g_error_free (error);
}
quit ();
}
@@ -2296,7 +2480,6 @@ do_device_wifi_rescan (NmCli *nmc, int argc, char **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);
@@ -2310,7 +2493,8 @@ do_device_wifi_rescan (NmCli *nmc, int argc, char **argv)
goto error;
}
- nm_device_wifi_request_scan_simple (NM_DEVICE_WIFI (device), request_rescan_cb, nmc);
+ nm_device_wifi_request_scan_async (NM_DEVICE_WIFI (device), NULL,
+ request_rescan_cb, nmc);
return nmc->return_value;
error:
@@ -2353,7 +2537,7 @@ show_nsp_info (NMDevice *device, NmCli *nmc)
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++) {
+ for (i = 0; i < nsps->len; i++) {
NMWimaxNsp *nsp = g_ptr_array_index (nsps, i);
fill_output_wimax_nsp (nsp, nmc, device, idx++, 0);
@@ -2396,7 +2580,7 @@ do_device_wimax_list (NmCli *nmc, int argc, char **argv)
}
nsp_user = *argv;
} else {
- fprintf (stderr, _("Unknown parameter: %s\n"), *argv);
+ g_printerr (_("Unknown parameter: %s\n"), *argv);
}
argc--;
@@ -2421,21 +2605,10 @@ do_device_wimax_list (NmCli *nmc, int argc, char **argv)
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 = nm_client_get_devices (nmc->client);
if (ifname) {
/* Device specified - list only NSPs of this interface */
- for (i = 0; devices && (i < devices->len); i++) {
+ for (i = 0; i < devices->len; i++) {
NMDevice *candidate = g_ptr_array_index (devices, i);
const char *dev_iface = nm_device_get_iface (candidate);
@@ -2458,7 +2631,7 @@ do_device_wimax_list (NmCli *nmc, int argc, char **argv)
if (nsp_user) {
/* Specific NSP requested - list only that */
nsps = nm_device_wimax_get_nsps (NM_DEVICE_WIMAX (device));
- for (j = 0, nsp = NULL; nsps && (j < nsps->len); j++) {
+ for (j = 0, nsp = NULL; j < nsps->len; j++) {
NMWimaxNsp *candidate_nsp = g_ptr_array_index (nsps, j);
const char *candidate_name = nm_wimax_nsp_get_name (candidate_nsp);
char *nsp_up;
@@ -2487,10 +2660,12 @@ do_device_wimax_list (NmCli *nmc, int argc, char **argv)
goto error;
}
} else {
+ gboolean empty_line = FALSE;
+
/* List NSPs for all devices */
if (nsp_user) {
/* Specific NSP requested - list only that */
- for (i = 0; devices && (i < devices->len); i++) {
+ for (i = 0; i < devices->len; i++) {
NMDevice *dev = g_ptr_array_index (devices, i);
int idx = 1;
@@ -2499,12 +2674,13 @@ do_device_wimax_list (NmCli *nmc, int argc, char **argv)
/* Main header name */
nmc->print_fields.header_name = (char *) construct_header_name (base_hdr, nm_device_get_iface (dev));
+ nmc->print_fields.indices = parse_output_fields (fields_str, tmpl, FALSE, NULL, NULL);
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++) {
+ for (j = 0, nsp = NULL; j < nsps->len; j++) {
NMWimaxNsp *candidate_nsp = g_ptr_array_index (nsps, j);
const char *candidate_name = nm_wimax_nsp_get_name (candidate_nsp);
char *nsp_up;
@@ -2516,8 +2692,11 @@ do_device_wimax_list (NmCli *nmc, int argc, char **argv)
}
g_free (nsp_up);
}
+ if (empty_line)
+ g_print ("\n"); /* Empty line between devices' NSPs */
print_data (nmc); /* Print all data */
nmc_empty_output_fields (nmc);
+ empty_line = TRUE;
}
if (!nsp) {
g_string_printf (nmc->return_text, _("Error: Access point with nsp '%s' not found."), nsp_user);
@@ -2525,15 +2704,20 @@ do_device_wimax_list (NmCli *nmc, int argc, char **argv)
goto error;
}
} else {
- for (i = 0; devices && (i < devices->len); i++) {
+ for (i = 0; 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));
+ nmc->print_fields.indices = parse_output_fields (fields_str, tmpl, FALSE, NULL, NULL);
- if (NM_IS_DEVICE_WIMAX (dev))
+ if (NM_IS_DEVICE_WIMAX (dev)) {
+ if (empty_line)
+ g_print ("\n"); /* Empty line between devices' NSPs */
show_nsp_info (dev, nmc);
+ empty_line = TRUE;
+ }
}
}
}
@@ -2589,7 +2773,7 @@ gen_func_ifnames (const char *text, int state)
nm_cli.get_client (&nm_cli);
devices = nm_client_get_devices (nm_cli.client);
- if (!devices || devices->len < 1)
+ if (devices->len == 0)
return NULL;
ifnames = g_new (const char *, devices->len + 1);
@@ -2635,8 +2819,24 @@ do_devices (NmCli *nmc, int argc, char **argv)
{
GError *error = NULL;
+ /* Register polkit agent */
+ nmc_start_polkit_agent_start_try (nmc);
+
rl_attempted_completion_function = (rl_completion_func_t *) nmcli_device_tab_completion;
+ /* Get NMClient object early */
+ nmc->get_client (nmc);
+
+ /* Check whether NetworkManager is running */
+ if (!nm_client_get_nm_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;
+ }
+ /* Compare NM and nmcli versions */
+ if (!nmc_versions_match (nmc))
+ return nmc->return_value;
+
if (argc == 0) {
if (!nmc_terse_option_check (nmc->print_output, nmc->required_fields, &error))
goto opt_error;
@@ -2680,6 +2880,13 @@ do_devices (NmCli *nmc, int argc, char **argv)
}
nmc->return_value = do_device_disconnect (nmc, argc-1, argv+1);
}
+ else if (matches (*argv, "delete") == 0) {
+ if (nmc_arg_is_help (*(argv+1))) {
+ usage_device_delete ();
+ goto usage_exit;
+ }
+ nmc->return_value = do_device_delete (nmc, argc-1, argv+1);
+ }
else if (matches (*argv, "wifi") == 0) {
if (nmc_arg_is_help (*(argv+1))) {
usage_device_wifi ();
diff --git a/cli/src/devices.h b/clients/cli/devices.h
index 152dd2077..152dd2077 100644
--- a/cli/src/devices.h
+++ b/clients/cli/devices.h
diff --git a/cli/src/network-manager.c b/clients/cli/general.c
index ed074c6de..44c63c356 100644
--- a/cli/src/network-manager.c
+++ b/clients/cli/general.c
@@ -14,22 +14,20 @@
* 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 - 2014 Red Hat, Inc.
+ * Copyright 2010 - 2014 Red Hat, Inc.
*/
#include "config.h"
-#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <glib.h>
#include <glib/gi18n.h>
-#include <nm-client.h>
-#include <nm-setting-connection.h>
+#include "polkit-agent.h"
#include "utils.h"
-#include "network-manager.h"
+#include "general.h"
/* Available fields for 'general status' */
@@ -91,161 +89,147 @@ 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"));
+ g_printerr (_("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"));
+ g_printerr (_("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"));
+ g_printerr (_("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"));
+ g_printerr (_("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"));
+ g_printerr (_("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"));
+ g_printerr (_("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"));
+ g_printerr (_("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"));
+ g_printerr (_("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"));
+ g_printerr (_("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_radio (void)
{
- fprintf (stderr,
- _("Usage: nmcli radio { COMMAND | help }\n\n"
+ g_printerr (_("Usage: nmcli radio { COMMAND | help }\n\n"
#if WITH_WIMAX
- "COMMAND := { all | wifi | wwan | wimax }\n\n"
- " all | wifi | wwan | wimax [ on | off ]\n\n"
+ "COMMAND := { all | wifi | wwan | wimax }\n\n"
+ " all | wifi | wwan | wimax [ on | off ]\n\n"
#else
- "COMMAND := { all | wifi | wwan }\n\n"
- " all | wifi | wwan [ on | off ]\n\n"
+ "COMMAND := { all | wifi | wwan }\n\n"
+ " all | wifi | wwan [ on | off ]\n\n"
#endif
- ));
+ ));
}
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"));
+ g_printerr (_("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"));
+ g_printerr (_("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"));
+ g_printerr (_("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"));
+ g_printerr (_("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
@@ -301,7 +285,7 @@ nm_connectivity_to_string (NMConnectivityState connectivity)
static gboolean
show_nm_status (NmCli *nmc, const char *pretty_header_name, const char *print_flds)
{
- gboolean nm_running, startup = FALSE;
+ gboolean startup = FALSE;
NMState state = NM_STATE_UNKNOWN;
NMConnectivityState connectivity = NM_CONNECTIVITY_UNKNOWN;
const char *net_enabled_str;
@@ -337,42 +321,37 @@ show_nm_status (NmCli *nmc, const char *pretty_header_name, const char *print_fl
nmc->get_client (nmc); /* create NMClient */
- nm_running = nm_client_get_manager_running (nmc->client);
- if (nm_running) {
- if (!nmc_versions_match (nmc))
- return FALSE;
-
- 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");
- wwan_hw_enabled_str = nm_client_wwan_hardware_get_enabled (nmc->client) ? _("enabled") : _("disabled");
- wwan_enabled_str = nm_client_wwan_get_enabled (nmc->client) ? _("enabled") : _("disabled");
-#if WITH_WIMAX
- wimax_hw_enabled_str = nm_client_wimax_hardware_get_enabled (nmc->client) ? _("enabled") : _("disabled");
- wimax_enabled_str = nm_client_wimax_get_enabled (nmc->client) ? _("enabled") : _("disabled");
-#endif
- } else {
+ if (!nm_client_get_nm_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;
+ }
+
+ if (!nmc_versions_match (nmc))
+ return FALSE;
+
+ 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");
+ wwan_hw_enabled_str = nm_client_wwan_hardware_get_enabled (nmc->client) ? _("enabled") : _("disabled");
+ wwan_enabled_str = nm_client_wwan_get_enabled (nmc->client) ? _("enabled") : _("disabled");
#if WITH_WIMAX
- net_enabled_str = wireless_hw_enabled_str = wireless_enabled_str =
- wwan_hw_enabled_str = wwan_enabled_str = wimax_hw_enabled_str = wimax_enabled_str = _("unknown");
-#else
- net_enabled_str = wireless_hw_enabled_str = wireless_enabled_str =
- wwan_hw_enabled_str = wwan_enabled_str = _("unknown");
+ wimax_hw_enabled_str = nm_client_wimax_hardware_get_enabled (nmc->client) ? _("enabled") : _("disabled");
+ wimax_enabled_str = nm_client_wimax_get_enabled (nmc->client) ? _("enabled") : _("disabled");
#endif
- }
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, 0, _("running"));
+ set_val_strc (arr, 1, nm_client_get_version (nmc->client));
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, 3, startup ? _("starting") : _("started"));
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);
@@ -480,7 +459,7 @@ show_nm_permissions (NmCli *nmc)
nmc->get_client (nmc); /* create NMClient */
- if (!nm_client_get_manager_running (nmc->client)) {
+ if (!nm_client_get_nm_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;
@@ -557,14 +536,17 @@ show_general_logging (NmCli *nmc)
}
static void
-save_hostname_cb (NMRemoteSettings *settings, GError *error, gpointer user_data)
+save_hostname_cb (GObject *object, GAsyncResult *result, gpointer user_data)
{
NmCli *nmc = (NmCli *) user_data;
+ GError *error = NULL;
+ nm_client_save_hostname_finish (NM_CLIENT (object), result, &error);
if (error) {
- g_string_printf (nmc->return_text, _("Error: failed to set hostname: (%d) %s"),
- error->code, error->message);
+ g_string_printf (nmc->return_text, _("Error: failed to set hostname: %s"),
+ error->message);
nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
+ g_error_free (error);
}
quit ();
}
@@ -577,6 +559,9 @@ do_general (NmCli *nmc, int argc, char **argv)
{
GError *error = NULL;
+ /* Register polkit agent */
+ nmc_start_polkit_agent_start_try (nmc);
+
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);
@@ -603,37 +588,30 @@ do_general (NmCli *nmc, int argc, char **argv)
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);
+ nmc->get_client (nmc); /* create NMClient */
+ g_object_get (nmc->client, NM_CLIENT_HOSTNAME, &hostname, NULL);
if (hostname)
- printf ("%s\n", hostname);
+ g_print ("%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);
+ g_print ("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);
+ nmc->get_client (nmc); /* create NMClient */
+ nm_client_save_hostname_async (nmc->client, hostname, NULL, save_hostname_cb, nmc);
}
}
else if (matches (*argv, "permissions") == 0) {
@@ -678,11 +656,9 @@ do_general (NmCli *nmc, int argc, char **argv)
nmc->get_client (nmc); /* create NMClient */
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;
+ g_string_printf (nmc->return_text, _("Error: failed to set logging: %s"),
+ error->message);
+ nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
goto finish;
}
}
@@ -754,6 +730,9 @@ do_networking (NmCli *nmc, int argc, char **argv)
{
gboolean enable_flag;
+ /* Register polkit agent */
+ nmc_start_polkit_agent_start_try (nmc);
+
if (argc == 0)
nmc_switch_show (nmc, NMC_FIELDS_NM_NETWORKING, _("Networking"));
else if (argc > 0) {
@@ -793,7 +772,7 @@ do_networking (NmCli *nmc, int argc, char **argv)
}
nmc->get_client (nmc); /* create NMClient */
- nm_client_networking_set_enabled (nmc->client, enable_flag);
+ nm_client_networking_set_enabled (nmc->client, enable_flag, NULL);
} else {
usage_networking ();
g_string_printf (nmc->return_text, _("Error: 'networking' command '%s' is not valid."), *argv);
@@ -815,6 +794,9 @@ do_radio (NmCli *nmc, int argc, char **argv)
GError *error = NULL;
gboolean enable_flag;
+ /* Register polkit agent */
+ nmc_start_polkit_agent_start_try (nmc);
+
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);
diff --git a/cli/src/network-manager.h b/clients/cli/general.h
index bccba7cee..7e8c21f9b 100644
--- a/cli/src/network-manager.h
+++ b/clients/cli/general.h
@@ -14,11 +14,11 @@
* 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.
+ * Copyright 2010 - 2014 Red Hat, Inc.
*/
-#ifndef NMC_NETWORK_MANAGER_H
-#define NMC_NETWORK_MANAGER_H
+#ifndef NMC_GENERAL_H
+#define NMC_GENERAL_H
#include "nmcli.h"
@@ -26,4 +26,4 @@ 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 */
+#endif /* NMC_GENERAL_H */
diff --git a/cli/completion/nmcli b/clients/cli/nmcli-completion
index 343c73220..73028bdff 100644
--- a/cli/completion/nmcli
+++ b/clients/cli/nmcli-completion
@@ -170,6 +170,9 @@ _nmcli_compl_OPTIONS()
ask)
_nmcli_array_delete_at words 0
;;
+ show-secrets)
+ _nmcli_array_delete_at words 0
+ ;;
active)
_nmcli_array_delete_at words 0
;;
@@ -269,7 +272,7 @@ _nmcli_compl_ARGS()
case "${words[0]}" in
level)
if [[ "${#words[@]}" -eq 2 ]]; then
- _nmcli_list "ERR WARN INFO DEBUG"
+ _nmcli_list "ERR WARN INFO DEBUG TRACE"
return 0
fi
;;
@@ -407,7 +410,14 @@ _nmcli_compl_ARGS()
;;
mode)
if [[ "${#words[@]}" -eq 2 ]]; then
- _nmcli_list "balance-rr active-backup balance-xor broadcast 802.3ad balance-tlb balance-alb"
+ case "$OPTIONS_TYPE" in
+ "wifi")
+ _nmcli_list "infrastructure ap adhoc"
+ ;;
+ "bond"| \
+ *)
+ _nmcli_list "balance-rr active-backup balance-xor broadcast 802.3ad balance-tlb balance-alb"
+ esac
return 0
fi
;;
@@ -423,6 +433,12 @@ _nmcli_compl_ARGS()
return 0
fi
;;
+ lacp-rate)
+ if [[ "${#words[@]}" -eq 2 ]]; then
+ _nmcli_list "slow fast"
+ return 0
+ fi
+ ;;
bt-type)
if [[ "${#words[@]}" -eq 2 ]]; then
_nmcli_list "panu dun-gsm dun-cdma"
@@ -486,7 +502,8 @@ _nmcli_compl_ARGS()
user| \
username| \
service| \
- password)
+ password| \
+ passwd-file)
if [[ "${#words[@]}" -eq 2 ]]; then
return 0
fi
@@ -684,7 +701,7 @@ _nmcli()
# (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)
+ OPTIONS=(help general networking radio connection device agent)
elif [[ "${words[0]:1:1}" == '-' || "${words[0]}" == "-" ]]; then
OPTIONS=("${LONG_OPTIONS[@]/#/--}")
else
@@ -723,6 +740,12 @@ _nmcli()
_nmcli_compl_ARGS
fi
;;
+ s|st|sta|stat|statu|status| \
+ p|pe|per|perm|permi|permis|permiss|permissi|permissio|permission|permissions)
+ if [[ ${#words[@]} -eq 3 ]]; then
+ _nmcli_compl_COMMAND "${words[2]}"
+ fi
+ ;;
esac
fi
;;
@@ -755,11 +778,11 @@ _nmcli()
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
+ _nmcli_compl_COMMAND_nl "${words[2]}" "$(printf "id\nuuid\npath\napath\n%s" "$(_nmcli_con_show NAME)")" active show-secrets
elif [[ ${#words[@]} -gt 3 ]]; then
_nmcli_array_delete_at words 0 1
- LONG_OPTIONS=(help active)
+ LONG_OPTIONS=(help active show-secrets)
HELP_ONLY_AS_FIRST=1
_nmcli_compl_OPTIONS
i=$?
@@ -823,9 +846,9 @@ _nmcli()
_nmcli_compl_ARGS_CONNECTION && return 0
if [[ "$COMMAND_CONNECTION_TYPE" = "ifname" ]]; then
- OPTIONS=(ap nsp)
+ OPTIONS=(ap nsp passwd-file)
else
- OPTIONS=(ifname ap nsp)
+ OPTIONS=(ifname ap nsp passwd-file)
fi
_nmcli_compl_ARGS
fi
@@ -903,67 +926,84 @@ _nmcli()
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_TYPE=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_TYPE=wifi
+ OPTIONS_TYPED=(ssid mac cloned-mac mtu mode)
OPTIONS_MANDATORY=(ssid)
;;
wim|wima|wimax)
+ OPTIONS_TYPE=wimax
OPTIONS_TYPED=(mac nsp)
;;
g|gs|gsm)
+ OPTIONS_TYPE=gsm
OPTIONS_TYPED=(apn user password)
OPTIONS_MANDATORY=(apn)
;;
c|cd|cdm|cdma)
+ OPTIONS_TYPE=cdma
OPTIONS_TYPED=(user password)
;;
i|in|inf|infi|infin|infini|infinib|infiniba|infiniban|infiniband)
+ OPTIONS_TYPE=infiniband
OPTIONS_TYPED=(mac mtu transport-mode parent p-key)
;;
bl|blu|blue|bluet|blueto|bluetoo|bluetoot|bluetooth)
+ OPTIONS_TYPE=bluetooth
OPTIONS_TYPED=(addr bt-type)
;;
vl|vla|vlan)
+ OPTIONS_TYPE=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)
+ OPTIONS_TYPE=bond
+ OPTIONS_TYPED=(mode miimon downdelay updelay arp-interval arp-ip-target primary lacp-rate)
;;
bond-|bond-s|bond-sl|bond-sla|bond-slav|bond-slave)
+ OPTIONS_TYPE=bond-slave
OPTIONS_TYPED=(master)
OPTIONS_MANDATORY=(master)
OPTIONS_IP=()
;;
team)
+ OPTIONS_TYPE=team
OPTIONS_TYPED=(config)
;;
team-|team-s|team-sl|team-sla|team-slav|team-slave)
+ OPTIONS_TYPE=team-slave
OPTIONS_TYPED=(master config)
OPTIONS_MANDATORY=(master)
OPTIONS_IP=()
;;
bridge)
+ OPTIONS_TYPE=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_TYPE=bridge-slave
OPTIONS_TYPED=(master priority path-cost hairpin)
OPTIONS_MANDATORY=(master)
OPTIONS_IP=()
;;
vp|vpn)
+ OPTIONS_TYPE=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_TYPE=olpc-mesh
OPTIONS_TYPED=(ssid channel dhcp-anycast)
OPTIONS_MANDATORY=(ssid)
;;
p|pp|ppp|pppo|pppoe)
+ OPTIONS_TYPE=pppoe
OPTIONS_TYPED=(username password service mtu mac)
OPTIONS_MANDATORY=(username)
;;
@@ -1114,7 +1154,12 @@ _nmcli()
_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')"
+ local PREFIX=""
+
+ if [[ "${words[0]:0:1}" == [+-] ]]; then
+ PREFIX="${words[0]:0:1}"
+ fi
+ _nmcli_list_nl "$(nmcli --fields profile connection show "${COMMAND_CONNECTION_TYPE:-id}" "$COMMAND_CONNECTION_ID" 2>/dev/null | sed -n 's/^\([^:]\+\):.*/'$PREFIX'\1/p')"
return 0
elif [[ ${#words[@]} -le 2 ]]; then
return 0
@@ -1164,7 +1209,7 @@ _nmcli()
;;
d|de|dev|devi|devic|device)
if [[ ${#words[@]} -eq 2 ]]; then
- _nmcli_compl_COMMAND "$command" status show connect disconnect wifi wimax
+ _nmcli_compl_COMMAND "$command" status show connect disconnect delete wifi wimax
elif [[ ${#words[@]} -gt 2 ]]; then
case "$command" in
s|st|sta|stat|statu|status)
@@ -1174,7 +1219,8 @@ _nmcli()
;;
sh|sho|show| \
c|co|con|conn|conne|connec|connect| \
- d|di|dis|disc|disco|discon|disconn|disconne|disconnec|disconnect)
+ d|di|dis|disc|disco|discon|disconn|disconne|disconnec|disconnect| \
+ de|del|dele|delet|delete)
if [[ ${#words[@]} -eq 3 ]]; then
_nmcli_compl_COMMAND_nl "${words[2]}" "$(_nmcli_dev_status DEVICE)"
fi
@@ -1227,6 +1273,11 @@ _nmcli()
esac
fi
;;
+ a|ag|age|agen|agent)
+ if [[ ${#words[@]} -eq 2 ]]; then
+ _nmcli_compl_COMMAND "$command" secret polkit all
+ fi
+ ;;
esac
return 0
diff --git a/cli/src/nmcli.c b/clients/cli/nmcli.c
index 66288c20a..8d9f7fef8 100644
--- a/cli/src/nmcli.c
+++ b/clients/cli/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 - 2014 Red Hat, Inc.
+ * Copyright 2010 - 2014 Red Hat, Inc.
*/
/* Generated configuration file */
@@ -27,20 +27,23 @@
#include <stdlib.h>
#include <signal.h>
#include <pthread.h>
+#include <termios.h>
+#include <unistd.h>
#include <locale.h>
+#include <readline/readline.h>
+#include <readline/history.h>
#include <glib.h>
#include <glib/gi18n.h>
-#include <nm-client.h>
-#include <nm-setting-connection.h>
-#include <nm-remote-settings.h>
+#include "polkit-agent.h"
#include "nmcli.h"
#include "utils.h"
#include "common.h"
#include "connections.h"
#include "devices.h"
-#include "network-manager.h"
+#include "general.h"
+#include "agent.h"
#if defined(NM_DIST_VERSION)
# define NMCLI_VERSION NM_DIST_VERSION
@@ -62,6 +65,7 @@ typedef struct {
/* --- Global variables --- */
GMainLoop *loop = NULL;
static sigset_t signal_set;
+struct termios termios_orig;
/* Get an error quark for use with GError */
@@ -79,29 +83,29 @@ nmcli_error_quark (void)
static void
usage (const char *prog_name)
{
- fprintf (stderr,
- _("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"),
- prog_name);
+ g_printerr (_("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"
+ " a[gent] NetworkManager secret agent or polkit agent\n"
+ "\n"),
+ prog_name);
}
static NMCResultCode
@@ -120,6 +124,7 @@ static const struct cmd {
{ "radio", do_radio },
{ "connection", do_connections },
{ "device", do_devices },
+ { "agent", do_agent },
{ "help", do_help },
{ 0 }
};
@@ -249,7 +254,7 @@ parse_command_line (NmCli *nmc, int argc, char **argv)
}
nmc->timeout = (int) timeout;
} else if (matches (opt, "-version") == 0) {
- printf (_("nmcli tool, version %s\n"), NMCLI_VERSION);
+ g_print (_("nmcli tool, version %s\n"), NMCLI_VERSION);
return NMC_RESULT_SUCCESS;
} else if (matches (opt, "-help") == 0) {
usage (base);
@@ -263,13 +268,55 @@ parse_command_line (NmCli *nmc, int argc, char **argv)
argv++;
}
- if (argc > 1)
+ if (argc > 1) {
+ /* Now run the requested command */
return do_cmd (nmc, argv[1], argc-1, argv+1);
+ }
usage (base);
return nmc->return_value;
}
+static gboolean nmcli_sigint = FALSE;
+static pthread_mutex_t sigint_mutex = PTHREAD_MUTEX_INITIALIZER;
+static gboolean nmcli_sigquit_internal = FALSE;
+
+gboolean
+nmc_seen_sigint (void)
+{
+ gboolean sigint;
+
+ pthread_mutex_lock (&sigint_mutex);
+ sigint = nmcli_sigint;
+ pthread_mutex_unlock (&sigint_mutex);
+ return sigint;
+}
+
+void
+nmc_clear_sigint (void)
+{
+ pthread_mutex_lock (&sigint_mutex);
+ nmcli_sigint = FALSE;
+ pthread_mutex_unlock (&sigint_mutex);
+}
+
+void
+nmc_set_sigquit_internal (void)
+{
+ nmcli_sigquit_internal = TRUE;
+}
+
+static int
+event_hook_for_readline (void)
+{
+ /* Make readline() exit on SIGINT */
+ if (nmc_seen_sigint ()) {
+ rl_echo_signal_char (SIGINT);
+ rl_stuff_char ('\n');
+ }
+ return 0;
+}
+
void *signal_handling_thread (void *arg);
/*
* Thread function waiting for signals and processing them.
@@ -287,10 +334,27 @@ signal_handling_thread (void *arg) {
switch (signo) {
case SIGINT:
+ if (nmc_get_in_readline ()) {
+ /* Don't quit when in readline, only signal we received SIGINT */
+ pthread_mutex_lock (&sigint_mutex);
+ nmcli_sigint = TRUE;
+ pthread_mutex_unlock (&sigint_mutex);
+ } else {
+ /* We can quit nmcli */
+ tcsetattr (STDIN_FILENO, TCSADRAIN, &termios_orig);
+ nmc_cleanup_readline ();
+ g_print (_("\nError: nmcli terminated by signal %s (%d)\n"),
+ strsignal (signo), signo);
+ exit (1);
+ }
+ break;
case SIGQUIT:
case SIGTERM:
+ tcsetattr (STDIN_FILENO, TCSADRAIN, &termios_orig);
nmc_cleanup_readline ();
- printf (_("\nError: nmcli terminated by signal %d."), signo);
+ if (!nmcli_sigquit_internal)
+ g_print (_("\nError: nmcli terminated by signal %s (%d)\n"),
+ strsignal (signo), signo);
exit (1);
break;
default:
@@ -320,27 +384,112 @@ setup_signals (void)
/* 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);
+ g_printerr (_("Failed to set signal mask: %d\n"), status);
return FALSE;
}
- /* Create the signal handling thread. */
+ /* 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);
+ g_printerr (_("Failed to create signal handling thread: %d\n"), status);
return FALSE;
}
return TRUE;
}
+static void
+nmc_convert_strv_to_string (const GValue *src_value, GValue *dest_value)
+{
+ char **strings;
+
+ strings = g_value_get_boxed (src_value);
+ if (strings)
+ g_value_take_string (dest_value, g_strjoinv (",", strings));
+ else
+ g_value_set_string (dest_value, "");
+}
+
+static void
+nmc_convert_string_hash_to_string (const GValue *src_value, GValue *dest_value)
+{
+ GHashTable *hash;
+ GHashTableIter iter;
+ const char *key, *value;
+ GString *string;
+
+ hash = (GHashTable *) g_value_get_boxed (src_value);
+
+ string = g_string_new (NULL);
+ if (hash) {
+ g_hash_table_iter_init (&iter, hash);
+ while (g_hash_table_iter_next (&iter, (gpointer *) &key, (gpointer *) &value)) {
+ if (string->len)
+ g_string_append_c (string, ',');
+ g_string_append_printf (string, "%s=%s", key, value);
+ }
+ }
+
+ g_value_take_string (dest_value, g_string_free (string, FALSE));
+}
+
+static void
+nmc_convert_bytes_to_string (const GValue *src_value, GValue *dest_value)
+{
+ GBytes *bytes;
+ const guint8 *array;
+ gsize length;
+ GString *printable;
+ guint i = 0;
+
+ bytes = g_value_get_boxed (src_value);
+
+ printable = g_string_new ("[");
+
+ if (bytes) {
+ array = g_bytes_get_data (bytes, &length);
+ while (i < MIN (length, 35)) {
+ if (i > 0)
+ g_string_append_c (printable, ' ');
+ g_string_append_printf (printable, "0x%02X", array[i++]);
+ }
+ if (i < length)
+ g_string_append (printable, " ... ");
+ }
+ g_string_append_c (printable, ']');
+
+ g_value_take_string (dest_value, g_string_free (printable, FALSE));
+}
+
+static void
+nmc_value_transforms_register (void)
+{
+ g_value_register_transform_func (G_TYPE_STRV,
+ G_TYPE_STRING,
+ nmc_convert_strv_to_string);
+
+ /* This depends on the fact that all of the hash-table-valued properties
+ * in libnm-core are string->string.
+ */
+ g_value_register_transform_func (G_TYPE_HASH_TABLE,
+ G_TYPE_STRING,
+ nmc_convert_string_hash_to_string);
+
+ g_value_register_transform_func (G_TYPE_BYTES,
+ G_TYPE_STRING,
+ nmc_convert_bytes_to_string);
+}
+
static NMClient *
nmc_get_client (NmCli *nmc)
{
+ GError *error = NULL;
+
if (!nmc->client) {
- nmc->client = nm_client_new ();
+ nmc->client = nm_client_new (NULL, &error);
if (!nmc->client) {
- g_critical (_("Error: Could not create NMClient object."));
+ g_critical (_("Error: Could not create NMClient object: %s."), error->message);
+ g_clear_error (&error);
exit (NMC_RESULT_ERROR_UNKNOWN);
}
}
@@ -360,9 +509,11 @@ nmc_init (NmCli *nmc)
nmc->timeout = -1;
- nmc->system_settings = NULL;
- nmc->system_settings_running = FALSE;
- nmc->system_connections = NULL;
+ nmc->connections = NULL;
+
+ nmc->secret_agent = NULL;
+ nmc->pwds_hash = NULL;
+ nmc->pk_listener = NULL;
nmc->should_wait = FALSE;
nmc->nowait_flag = TRUE;
@@ -375,8 +526,10 @@ nmc_init (NmCli *nmc)
memset (&nmc->print_fields, '\0', sizeof (NmcPrintFields));
nmc->nocheck_ver = FALSE;
nmc->ask = FALSE;
+ nmc->in_editor = FALSE;
nmc->editor_status_line = FALSE;
nmc->editor_save_confirmation = TRUE;
+ nmc->editor_show_secrets = FALSE;
nmc->editor_prompt_color = NMC_TERM_COLOR_NORMAL;
}
@@ -387,12 +540,19 @@ nmc_cleanup (NmCli *nmc)
g_string_free (nmc->return_text, TRUE);
- if (nmc->system_settings) g_object_unref (nmc->system_settings);
- g_slist_free (nmc->system_connections);
+ if (nmc->secret_agent) {
+ /* Destroy secret agent if we have one. */
+ nm_secret_agent_old_unregister (nmc->secret_agent, NULL, NULL);
+ g_object_unref (nmc->secret_agent);
+ }
+ if (nmc->pwds_hash)
+ g_hash_table_destroy (nmc->pwds_hash);
g_free (nmc->required_fields);
nmc_empty_output_fields (nmc);
g_ptr_array_unref (nmc->output_data);
+
+ nmc_polkit_agent_fini (nmc);
}
static gboolean
@@ -430,6 +590,18 @@ main (int argc, char *argv[])
#if !GLIB_CHECK_VERSION (2, 35, 0)
g_type_init ();
#endif
+
+ /* Save terminal settings */
+ tcgetattr (STDIN_FILENO, &termios_orig);
+
+ /* readline init */
+ rl_event_hook = event_hook_for_readline;
+ /* Set 0.01s timeout to mitigate slowness in readline when a broken version is used.
+ * See https://bugzilla.redhat.com/show_bug.cgi?id=1109946
+ */
+ rl_set_keyboard_input_timeout (10000);
+
+ nmc_value_transforms_register ();
nmc_init (&nm_cli);
g_idle_add (start, &args_info);
@@ -439,7 +611,7 @@ main (int argc, char *argv[])
/* Print result descripting text */
if (nm_cli.return_value != NMC_RESULT_SUCCESS) {
- fprintf (stderr, "%s\n", nm_cli.return_text->str);
+ g_printerr ("%s\n", nm_cli.return_text->str);
}
g_main_loop_unref (loop);
diff --git a/cli/src/nmcli.h b/clients/cli/nmcli.h
index b300c6d39..32e7e5dd9 100644
--- a/cli/src/nmcli.h
+++ b/clients/cli/nmcli.h
@@ -14,16 +14,23 @@
* 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.
+ * Copyright 2010 - 2014 Red Hat, Inc.
*/
#ifndef NMC_NMCLI_H
#define NMC_NMCLI_H
-#include <glib.h>
+#include "config.h"
-#include <nm-client.h>
-#include <nm-remote-settings.h>
+#include <NetworkManager.h>
+#include <nm-secret-agent-old.h>
+
+#if WITH_POLKIT_AGENT
+#include "nm-polkit-listener.h"
+#else
+/* polkit agent is not available; define fake NMPolkitListener */
+typedef gpointer NMPolkitListener;
+#endif
/* nmcli exit codes */
typedef enum {
@@ -105,7 +112,7 @@ typedef enum {
/* NmCli - main structure */
typedef struct _NmCli {
- NMClient *client; /* Pointer to NMClient of libnm-glib */
+ NMClient *client; /* Pointer to NMClient of libnm */
NMClient *(*get_client) (struct _NmCli *nmc); /* Pointer to function for creating NMClient */
NMCResultCode return_value; /* Return code of nmcli */
@@ -113,9 +120,11 @@ typedef struct _NmCli {
int timeout; /* Operation timeout */
- NMRemoteSettings *system_settings; /* System settings */
- gboolean system_settings_running; /* Is system settings service running? */
- GSList *system_connections; /* List of system connections */
+ const GPtrArray *connections; /* List of connections */
+
+ NMSecretAgentOld *secret_agent; /* Secret agent */
+ GHashTable *pwds_hash; /* Hash table with passwords in passwd-file */
+ NMPolkitListener *pk_listener ; /* polkit agent listener */
gboolean should_wait; /* Indication that nmcli should not end yet */
gboolean nowait_flag; /* '--nowait' option; used for passing to callbacks */
@@ -128,8 +137,10 @@ typedef struct _NmCli {
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 in_editor; /* Whether running the editor - nmcli con edit' */
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' */
+ gboolean editor_show_secrets; /* Whether to display secrets in the editor' */
NmcTermColor editor_prompt_color; /* Color of prompt in connection editor */
} NmCli;
@@ -137,4 +148,9 @@ typedef struct _NmCli {
#define NMCLI_ERROR (nmcli_error_quark ())
GQuark nmcli_error_quark (void);
+gboolean nmc_seen_sigint (void);
+void nmc_clear_sigint (void);
+void nmc_set_sigquit_internal (void);
+
+
#endif /* NMC_NMCLI_H */
diff --git a/clients/cli/polkit-agent.c b/clients/cli/polkit-agent.c
new file mode 100644
index 000000000..a163b824f
--- /dev/null
+++ b/clients/cli/polkit-agent.c
@@ -0,0 +1,166 @@
+/* nmcli - command-line tool to control 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 2014 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#if WITH_POLKIT_AGENT
+
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <termios.h>
+
+#include <glib.h>
+#include <glib/gi18n-lib.h>
+
+#include "polkit-agent.h"
+#include "nm-polkit-listener.h"
+#include "common.h"
+
+static char *
+polkit_request (const char *request,
+ const char *action_id,
+ const char *message,
+ const char *icon_name,
+ const char *user,
+ gboolean echo_on,
+ gpointer user_data)
+{
+ char *response, *tmp, *p;
+ struct termios termios_orig, termios_new;
+
+ g_print ("%s\n", message);
+ g_print ("(action_id: %s)\n", action_id);
+
+ if (!echo_on) {
+ tcgetattr (STDIN_FILENO, &termios_orig);
+ termios_new = termios_orig;
+ termios_new.c_lflag &= ~(ECHO);
+ tcsetattr (STDIN_FILENO, TCSADRAIN, &termios_new);
+ }
+
+ /* Ask user for polkit authorization password */
+ if (user) {
+ /* chop of ": " if present */
+ tmp = g_strdup (request);
+ p = strrchr (tmp, ':');
+ if (p && !strcmp (p, ": "))
+ *p = '\0';
+ response = nmc_readline ("%s (%s): ", tmp, user);
+ g_free (tmp);
+ } else
+ response = nmc_readline ("%s", request);
+ g_print ("\n");
+
+ /* Restore original terminal settings */
+ if (!echo_on)
+ tcsetattr (STDIN_FILENO, TCSADRAIN, &termios_orig);
+
+ return response;
+}
+
+static void
+polkit_show_info (const char *text)
+{
+ g_print (_("Authentication message: %s\n"), text);
+}
+
+static void
+polkit_show_error (const char *text)
+{
+ g_print (_("Authentication error: %s\n"), text);
+}
+
+static void
+polkit_completed (gboolean gained_authorization)
+{
+ /* We don't print anything here. The outcome will be evident from
+ * the operation result anyway. */
+}
+
+gboolean
+nmc_polkit_agent_init (NmCli* nmc, gboolean for_session, GError **error)
+{
+ PolkitAgentListener *listener;
+
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ listener = nm_polkit_listener_new (for_session, error);
+ if (!listener)
+ return FALSE;
+
+ nm_polkit_listener_set_request_callback (NM_POLKIT_LISTENER (listener), polkit_request, nmc);
+ nm_polkit_listener_set_show_info_callback (NM_POLKIT_LISTENER (listener), polkit_show_info);
+ nm_polkit_listener_set_show_error_callback (NM_POLKIT_LISTENER (listener), polkit_show_error);
+ nm_polkit_listener_set_completed_callback (NM_POLKIT_LISTENER (listener), polkit_completed);
+
+ nmc->pk_listener = NM_POLKIT_LISTENER (listener);
+ return TRUE;
+}
+
+void
+nmc_polkit_agent_fini (NmCli* nmc)
+{
+ g_clear_object (&nmc->pk_listener);
+}
+
+gboolean
+nmc_start_polkit_agent_start_try (NmCli *nmc)
+{
+ GError *error = NULL;
+
+ /* We don't register polkit agent at all when running non-interactively */
+ if (!nmc->ask)
+ return TRUE;
+
+ if (!nmc_polkit_agent_init (nmc, FALSE, &error)) {
+ g_printerr (_("Warning: polkit agent initialization failed: %s\n"),
+ error->message);
+ g_error_free (error);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+#else
+/* polkit agent is not avalable; implement stub functions. */
+
+#include <glib.h>
+#include "nmcli.h"
+#include "polkit-agent.h"
+
+gboolean
+nmc_polkit_agent_init (NmCli* nmc, gboolean for_session, GError **error)
+{
+ return TRUE;
+}
+
+void
+nmc_polkit_agent_fini (NmCli* nmc)
+{
+}
+
+gboolean
+nmc_start_polkit_agent_start_try (NmCli *nmc)
+{
+ return TRUE;
+}
+
+#endif /* #if WITH_POLKIT_AGENT */
diff --git a/src/settings/plugins/ifnet/errors.c b/clients/cli/polkit-agent.h
index 295db18ba..e2902dc0b 100644
--- a/src/settings/plugins/ifnet/errors.c
+++ b/clients/cli/polkit-agent.h
@@ -1,5 +1,4 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager system settings service
+/* nmcli - command-line tool to control 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,21 +14,17 @@
* 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.
+ * Copyright 2014 Red Hat, Inc.
*/
-#include <glib.h>
-#include "errors.h"
+#ifndef __NMC_POLKIT_AGENT_H__
+#define __NMC_POLKIT_AGENT_H__
-GQuark
-ifnet_plugin_error_quark (void)
-{
- static GQuark error_quark = 0;
+#include "nmcli.h"
- if (G_UNLIKELY (error_quark == 0))
- error_quark = g_quark_from_static_string ("ifnet-plugin-error-quark");
-
- return error_quark;
-}
+gboolean nmc_polkit_agent_init (NmCli *nmc, gboolean for_session, GError **error);
+void nmc_polkit_agent_fini (NmCli* nmc);
+gboolean nmc_start_polkit_agent_start_try (NmCli *nmc);
+#endif /* __NMC_POLKIT_AGENT_H__ */
diff --git a/clients/cli/settings-docs.c b/clients/cli/settings-docs.c
new file mode 100644
index 000000000..1edfddb5c
--- /dev/null
+++ b/clients/cli/settings-docs.c
@@ -0,0 +1,388 @@
+/* Generated file. Do not edit. */
+
+typedef struct {
+ const char *name;
+ const char *docs;
+} NmcPropertyDesc;
+
+NmcPropertyDesc setting_802_11_olpc_mesh[] = {
+ { "channel", "Channel on which the mesh network to join is located." },
+ { "dhcp-anycast-address", "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." },
+ { "name", "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\"." },
+ { "ssid", "SSID of the mesh network to join." },
+};
+
+NmcPropertyDesc setting_802_11_wireless[] = {
+ { "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 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." },
+ { "bssid", "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." },
+ { "channel", "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." },
+ { "cloned-mac-address", "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." },
+ { "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, these workarounds expose inherent insecurities with hidden SSID networks, and thus hidden SSID networks should be used with caution." },
+ { "mac-address", "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)." },
+ { "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\")." },
+ { "mode", "Wi-Fi network mode; one of \"infrastructure\", \"adhoc\" or \"ap\". If blank, infrastructure is assumed." },
+ { "mtu", "If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames." },
+ { "name", "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\"." },
+ { "rate", "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." },
+ { "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 BSSID list of NetworkManager. The changes you make to this property will not be preserved." },
+ { "ssid", "SSID of the Wi-Fi network. Must be specified." },
+ { "tx-power", "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." },
+};
+
+NmcPropertyDesc setting_802_11_wireless_security[] = {
+ { "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." },
+ { "group", "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\"." },
+ { "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 Wi-Fi connection that uses security." },
+ { "leap-password", "The login password for legacy LEAP connections (ie, key-mgmt = \"ieee8021x\" and auth-alg = \"leap\")." },
+ { "leap-password-flags", "Flags indicating how to handle the \"leap-password\" property." },
+ { "leap-username", "The login username for legacy LEAP connections (ie, key-mgmt = \"ieee8021x\" and auth-alg = \"leap\")." },
+ { "name", "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\"." },
+ { "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 \"tkip\" or \"ccmp\"." },
+ { "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 not specified, both WPA and RSN connections are allowed." },
+ { "psk", "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." },
+ { "psk-flags", "Flags indicating how to handle the \"psk\" property." },
+ { "wep-key-flags", "Flags indicating how to handle the \"wep-key0\", \"wep-key1\", \"wep-key2\", and \"wep-key3\" properties." },
+ { "wep-key-type", "Controls the interpretation of WEP keys. Allowed values are NM_WEP_KEY_TYPE_KEY (1), 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 (2), 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." },
+ { "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-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-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-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-tx-keyidx", "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." },
+};
+
+NmcPropertyDesc setting_802_1x[] = {
+ { "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." },
+ { "anonymous-identity", "Anonymous identity string for EAP authentication methods. Used as the unencrypted identity with EAP types that support different tunneled identity like EAP-TTLS." },
+ { "ca-cert", "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 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." },
+ { "ca-path", "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." },
+ { "client-cert", "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 NUL byte." },
+ { "eap", "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." },
+ { "identity", "Identity string for EAP authentication methods. Often the user's user or login name." },
+ { "name", "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\"." },
+ { "pac-file", "UTF-8 encoded file path containing PAC for EAP-FAST." },
+ { "password", "UTF-8 encoded password used for EAP authentication methods. If both the \"password\" property and the \"password-raw\" property are specified, \"password\" is preferred." },
+ { "password-flags", "Flags indicating how to handle the \"password\" property." },
+ { "password-raw", "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 \"password\" property and the \"password-raw\" property are specified, \"password\" is preferred." },
+ { "password-raw-flags", "Flags indicating how to handle the \"password-raw\" property." },
+ { "phase1-fast-provisioning", "Enables or disables in-line provisioning of EAP-FAST credentials when FAST is specified as the EAP method in the \"eap\" 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." },
+ { "phase1-peaplabel", "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." },
+ { "phase1-peapver", "Forces which PEAP version is used when PEAP is set as the EAP method in the \"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." },
+ { "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." },
+ { "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 \"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 authentication; see the wpa_supplicant documentation for more details." },
+ { "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 \"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." },
+ { "phase2-ca-cert", "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 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." },
+ { "phase2-ca-path", "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." },
+ { "phase2-client-cert", "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 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." },
+ { "phase2-private-key", "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 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 \"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 \"phase2-private-key-password\" property must be set to the password used to decode the PKCS#12 private key and certificate." },
+ { "phase2-private-key-password", "The password used to decrypt the \"phase 2\" private key specified in the \"phase2-private-key\" property when the private key either uses the path scheme, or is a PKCS#12 format key." },
+ { "phase2-private-key-password-flags", "Flags indicating how to handle the \"phase2-private-key-password\" property." },
+ { "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." },
+ { "pin", "PIN used for EAP authentication methods." },
+ { "pin-flags", "Flags indicating how to handle the \"pin\" property." },
+ { "private-key", "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 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 \"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. WARNING: \"private-key\" 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." },
+ { "private-key-password", "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." },
+ { "private-key-password-flags", "Flags indicating how to handle the \"private-key-password\" property." },
+ { "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." },
+ { "system-ca-certs", "When TRUE, overrides the \"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." },
+};
+
+NmcPropertyDesc setting_802_3_ethernet[] = {
+ { "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." },
+ { "cloned-mac-address", "If specified, request that the device use this MAC address instead of its permanent MAC address. This is known as MAC cloning or spoofing." },
+ { "duplex", "If specified, request that the device only use the specified duplex mode. Either \"half\" or \"full\"." },
+ { "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)." },
+ { "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 (00:11:22:33:44:55)." },
+ { "mtu", "If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames." },
+ { "name", "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\"." },
+ { "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. If the device supports only one port type, this setting is ignored." },
+ { "s390-nettype", "s390 network device type; one of \"qeth\", \"lcs\", or \"ctc\", representing the different types of virtual network devices available on s390 systems." },
+ { "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 alphanumeric characters (ie, [a-zA-Z0-9])." },
+ { "s390-subchannels", "Identifies specific subchannels that this network device uses for communication 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." },
+ { "speed", "If non-zero, request that the device use only the specified speed. In Mbit/s, ie 100 == 100Mbit/s." },
+};
+
+NmcPropertyDesc setting_adsl[] = {
+ { "encapsulation", "Encapsulation of ADSL connection. Can be \"vcmux\" or \"llc\"." },
+ { "name", "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\"." },
+ { "password", "Password used to authenticate with the ADSL service." },
+ { "password-flags", "Flags indicating how to handle the \"password\" property." },
+ { "protocol", "ADSL connection protocol. Can be \"pppoa\", \"pppoe\" or \"ipoatm\"." },
+ { "username", "Username used to authenticate with the ADSL service." },
+ { "vci", "VCI of ADSL connection" },
+ { "vpi", "VPI of ADSL connection" },
+};
+
+NmcPropertyDesc setting_bluetooth[] = {
+ { "bdaddr", "The Bluetooth address of the device." },
+ { "name", "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\"." },
+ { "type", "Either \"dun\" for Dial-Up Networking connections or \"panu\" for Personal Area Networking connections to devices supporting the NAP profile." },
+};
+
+NmcPropertyDesc setting_bond[] = {
+ { "name", "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\"." },
+ { "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])." },
+};
+
+NmcPropertyDesc setting_bridge[] = {
+ { "ageing-time", "The Ethernet MAC address aging time, in seconds." },
+ { "forward-delay", "The Spanning Tree Protocol (STP) forwarding delay, in seconds." },
+ { "hello-time", "The Spanning Tree Protocol (STP) hello time, in seconds." },
+ { "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." },
+ { "max-age", "The Spanning Tree Protocol (STP) maximum message age, in seconds." },
+ { "name", "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\"." },
+ { "priority", "Sets the Spanning Tree Protocol (STP) priority for this bridge. Lower values are \"better\"; the lowest priority bridge will be elected the root bridge." },
+ { "stp", "Controls whether Spanning Tree Protocol (STP) is enabled for this bridge." },
+};
+
+NmcPropertyDesc setting_bridge_port[] = {
+ { "hairpin-mode", "Enables or disabled \"hairpin mode\" for the port, which allows frames to be sent back out through the port the frame was received on." },
+ { "name", "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\"." },
+ { "path-cost", "The Spanning Tree Protocol (STP) port cost for destinations via this port." },
+ { "priority", "The Spanning Tree Protocol (STP) priority of this bridge port." },
+};
+
+NmcPropertyDesc setting_cdma[] = {
+ { "name", "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\"." },
+ { "number", "The number to dial to establish the connection to the CDMA-based mobile broadband network, if any. If not specified, the default number (#777) is used when required." },
+ { "password", "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." },
+ { "password-flags", "Flags indicating how to handle the \"password\" property." },
+ { "username", "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." },
+};
+
+NmcPropertyDesc setting_connection[] = {
+ { "autoconnect", "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." },
+ { "autoconnect-priority", "The autoconnect priority. If the connection is set to autoconnect, connections with higher priority will be preferred. Defaults to 0. The higher number means higher priority." },
+ { "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." },
+ { "id", "A human readable unique identifier for the connection, like \"Work Wi-Fi\" or \"T-Mobile 3G\"." },
+ { "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 software devices this specifies the name of the created device. 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." },
+ { "master", "Interface name of the master device or UUID of the master connection." },
+ { "name", "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\"." },
+ { "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 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\". 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." },
+ { "read-only", "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." },
+ { "secondaries", "List of connection UUIDs that should be activated when the base connection itself is activated. Currently only VPN connections are supported." },
+ { "slave-type", "Setting name of the device type of this slave's master connection (eg, \"bond\"), or NULL if this connection is not a slave." },
+ { "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)." },
+ { "type", "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)." },
+ { "uuid", "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, it should not be changed when the \"id\" property or NMSettingIP4Config changes, but might need to be re-created when the Wi-Fi SSID, mobile broadband network provider, or \"type\" property changes. The UUID must be in the format \"2815492f-7e56-435e-b2e9-246bd7cdc664\" (ie, contains only hexadecimal characters and \"-\")." },
+ { "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." },
+};
+
+NmcPropertyDesc setting_dcb[] = {
+ { "app-fcoe-flags", "Specifies the NMSettingDcbFlags for the DCB FCoE application. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4)." },
+ { "app-fcoe-mode", "The FCoE controller mode; either \"fabric\" (default) or \"vn2vn\"." },
+ { "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 NM_SETTING_DCB_FLAG_ENABLE (0x1) flag." },
+ { "app-fip-flags", "Specifies the NMSettingDcbFlags for the DCB FIP application. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4)." },
+ { "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 NM_SETTING_DCB_FLAG_ENABLE (0x1) flag." },
+ { "app-iscsi-flags", "Specifies the NMSettingDcbFlags for the DCB iSCSI application. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4)." },
+ { "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 NM_SETTING_DCB_FLAG_ENABLE (0x1) flag." },
+ { "name", "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\"." },
+ { "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." },
+ { "priority-flow-control", "An array of 8 boolean 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." },
+ { "priority-flow-control-flags", "Specifies the NMSettingDcbFlags for DCB Priority Flow Control (PFC). Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4)." },
+ { "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." },
+ { "priority-group-flags", "Specifies the NMSettingDcbFlags for DCB Priority Groups. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4)." },
+ { "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." },
+ { "priority-strict-bandwidth", "An array of 8 boolean 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." },
+ { "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." },
+};
+
+NmcPropertyDesc setting_generic[] = {
+ { "name", "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\"." },
+};
+
+NmcPropertyDesc setting_gsm[] = {
+ { "apn", "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." },
+ { "home-only", "When TRUE, only connections to the home network will be allowed. Connections to roaming networks will not be made." },
+ { "name", "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\"." },
+ { "network-id", "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." },
+ { "number", "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." },
+ { "password", "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." },
+ { "password-flags", "Flags indicating how to handle the \"password\" property." },
+ { "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." },
+ { "pin-flags", "Flags indicating how to handle the \"pin\" property." },
+ { "username", "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." },
+};
+
+NmcPropertyDesc setting_infiniband[] = {
+ { "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)." },
+ { "mtu", "If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple frames." },
+ { "name", "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-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." },
+ { "parent", "The interface name of the parent device of this device. Normally NULL, but if the \"p_key\" property is set, then you must specify the base device by setting either this property or \"mac-address\"." },
+ { "transport-mode", "The IP-over-InfiniBand transport mode. Either \"datagram\" or \"connected\"." },
+};
+
+NmcPropertyDesc setting_ipv4[] = {
+ { "addresses", "Array of IP addresses." },
+ { "dhcp-client-id", "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." },
+ { "dhcp-hostname", "If the \"dhcp-send-hostname\" property is TRUE, then the specified name will be sent to the DHCP server when acquiring a lease." },
+ { "dhcp-send-hostname", "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 NULL and this property is TRUE, the current persistent hostname of the computer is sent." },
+ { "dns", "Array of IP addresses of DNS servers." },
+ { "dns-search", "Array of DNS search domains." },
+ { "gateway", "The gateway associated with this configuration. This is only meaningful if \"addresses\" is also set." },
+ { "ignore-auto-dns", "When \"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." },
+ { "ignore-auto-routes", "When \"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." },
+ { "may-fail", "If TRUE, allow overall network configuration to proceed even if the configuration specified by this property 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 on the NMSettingIP4Config allows the overall network configuration to succeed if IPv4 configuration fails but IPv6 configuration completes successfully." },
+ { "method", "IP configuration method. NMSettingIP4Config and NMSettingIP6Config both support \"auto\", \"manual\", and \"link-local\". See the subclass-specific documentation for other values. In general, for the \"auto\" method, properties such as \"dns\" and \"routes\" specify information that is added on to the information returned from automatic configuration. The \"ignore-auto-routes\" and \"ignore-auto-dns\" properties modify this behavior. For methods that imply no upstream network, such as \"shared\" or \"link-local\", these properties must be empty." },
+ { "name", "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\"." },
+ { "never-default", "If TRUE, this connection will never be the default connection for this IP type, meaning it will never be assigned the default route by NetworkManager." },
+ { "route-metric", "The default metric for routes that don't explicitly specify a metric. The default value -1 means that the metric is choosen automatically based on the device type. The metric applies to dynamic routes, manual (static) routes that don't have an explicit metric setting, address prefix routes, and the default route. Note that for IPv6, the kernel accepts zero (0) but coerces it to 1024 (user default). Hence, setting this property to zero effectively mean setting it to 1024. For IPv4, zero is a regular value for the metric." },
+ { "routes", "Array of IP routes." },
+};
+
+NmcPropertyDesc setting_ipv6[] = {
+ { "addresses", "Array of IP addresses." },
+ { "dhcp-hostname", "If the \"dhcp-send-hostname\" property is TRUE, then the specified name will be sent to the DHCP server when acquiring a lease." },
+ { "dhcp-send-hostname", "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 NULL and this property is TRUE, the current persistent hostname of the computer is sent." },
+ { "dns", "Array of IP addresses of DNS servers." },
+ { "dns-search", "Array of DNS search domains." },
+ { "gateway", "The gateway associated with this configuration. This is only meaningful if \"addresses\" is also set." },
+ { "ignore-auto-dns", "When \"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." },
+ { "ignore-auto-routes", "When \"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." },
+ { "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)." },
+ { "may-fail", "If TRUE, allow overall network configuration to proceed even if the configuration specified by this property 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 on the NMSettingIP4Config allows the overall network configuration to succeed if IPv4 configuration fails but IPv6 configuration completes successfully." },
+ { "method", "IP configuration method. NMSettingIP4Config and NMSettingIP6Config both support \"auto\", \"manual\", and \"link-local\". See the subclass-specific documentation for other values. In general, for the \"auto\" method, properties such as \"dns\" and \"routes\" specify information that is added on to the information returned from automatic configuration. The \"ignore-auto-routes\" and \"ignore-auto-dns\" properties modify this behavior. For methods that imply no upstream network, such as \"shared\" or \"link-local\", these properties must be empty." },
+ { "name", "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\"." },
+ { "never-default", "If TRUE, this connection will never be the default connection for this IP type, meaning it will never be assigned the default route by NetworkManager." },
+ { "route-metric", "The default metric for routes that don't explicitly specify a metric. The default value -1 means that the metric is choosen automatically based on the device type. The metric applies to dynamic routes, manual (static) routes that don't have an explicit metric setting, address prefix routes, and the default route. Note that for IPv6, the kernel accepts zero (0) but coerces it to 1024 (user default). Hence, setting this property to zero effectively mean setting it to 1024. For IPv4, zero is a regular value for the metric." },
+ { "routes", "Array of IP routes." },
+};
+
+NmcPropertyDesc setting_ppp[] = {
+ { "baud", "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." },
+ { "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." },
+ { "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 value if this property is used." },
+ { "lcp-echo-interval", "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." },
+ { "mppe-stateful", "If TRUE, stateful MPPE is used. See pppd documentation for more information on stateful MPPE." },
+ { "mru", "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." },
+ { "mtu", "If non-zero, instruct pppd to send packets no larger than the specified size." },
+ { "name", "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\"." },
+ { "no-vj-comp", "If TRUE, Van Jacobsen TCP header compression will not be requested." },
+ { "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." },
+ { "nobsdcomp", "If TRUE, BSD compression will not be requested." },
+ { "nodeflate", "If TRUE, \"deflate\" compression will not be requested." },
+ { "refuse-chap", "If TRUE, the CHAP authentication method will not be used." },
+ { "refuse-eap", "If TRUE, the EAP authentication method will not be used." },
+ { "refuse-mschap", "If TRUE, the MSCHAP authentication method will not be used." },
+ { "refuse-mschapv2", "If TRUE, the MSCHAPv2 authentication method will not be used." },
+ { "refuse-pap", "If TRUE, the PAP authentication method will not be used." },
+ { "require-mppe", "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." },
+ { "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." },
+};
+
+NmcPropertyDesc setting_pppoe[] = {
+ { "name", "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\"." },
+ { "password", "Password used to authenticate with the PPPoE service." },
+ { "password-flags", "Flags indicating how to handle the \"password\" property." },
+ { "service", "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." },
+ { "username", "Username used to authenticate with the PPPoE service." },
+};
+
+NmcPropertyDesc setting_serial[] = {
+ { "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 ignore speed settings and use the highest available speed." },
+ { "bits", "Byte-width of the serial communication. The 8 in \"8n1\" for example." },
+ { "name", "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\"." },
+ { "parity", "Parity setting of the serial port." },
+ { "send-delay", "Time to delay between each byte sent to the modem, in microseconds." },
+ { "stopbits", "Number of stop bits for communication on the serial port. Either 1 or 2. The 1 in \"8n1\" for example." },
+};
+
+NmcPropertyDesc setting_team[] = {
+ { "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." },
+ { "name", "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\"." },
+};
+
+NmcPropertyDesc setting_team_port[] = {
+ { "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." },
+ { "name", "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\"." },
+};
+
+NmcPropertyDesc setting_vlan[] = {
+ { "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\"." },
+ { "flags", "One or more flags which control the behavior and features of the VLAN interface. Flags include NM_VLAN_FLAG_REORDER_HEADERS (0x1) (reordering of output packet headers), NM_VLAN_FLAG_GVRP (0x2) (use of the GVRP protocol), and NM_VLAN_FLAG_LOOSE_BINDING (0x4) (loose binding of the interface to its master device's operating state)." },
+ { "id", "The VLAN identifier that the interface created by this connection should be assigned." },
+ { "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\"." },
+ { "name", "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\"." },
+ { "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 an \"802-3-ethernet\" setting with a \"mac-address\" property." },
+};
+
+NmcPropertyDesc setting_vpn[] = {
+ { "data", "Dictionary of key/value pairs of VPN plugin specific data. Both keys and values must be strings." },
+ { "name", "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\"." },
+ { "persistent", "If the VPN service supports persistence, and this property is TRUE, the VPN will attempt to stay connected across link changes and outages, until explicitly disconnected." },
+ { "secrets", "Dictionary of key/value pairs of VPN plugin specific secrets like passwords or private keys. Both keys and values must be strings." },
+ { "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 plugin." },
+ { "user-name", "If the VPN connection requires a user name for authentication, that name should be provided here. If the connection is available to more than one user, and the VPN requires each user to supply a different name, then leave this property empty. If this property is empty, NetworkManager will automatically supply the username of the user which requested the VPN connection." },
+};
+
+NmcPropertyDesc setting_wimax[] = {
+ { "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)." },
+ { "name", "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\"." },
+ { "network-name", "Network Service Provider (NSP) name of the WiMAX network this connection should use." },
+};
+
+
+typedef struct {
+ const char *name;
+ NmcPropertyDesc *properties;
+ int n_properties;
+} NmcSettingDesc;
+
+NmcSettingDesc all_settings[] = {
+
+ { "802-11-olpc-mesh", setting_802_11_olpc_mesh, 4 },
+ { "802-11-wireless", setting_802_11_wireless, 14 },
+ { "802-11-wireless-security", setting_802_11_wireless_security, 18 },
+ { "802-1x", setting_802_1x, 33 },
+ { "802-3-ethernet", setting_802_3_ethernet, 12 },
+ { "adsl", setting_adsl, 8 },
+ { "bluetooth", setting_bluetooth, 3 },
+ { "bond", setting_bond, 2 },
+ { "bridge", setting_bridge, 8 },
+ { "bridge-port", setting_bridge_port, 4 },
+ { "cdma", setting_cdma, 5 },
+ { "connection", setting_connection, 15 },
+ { "dcb", setting_dcb, 16 },
+ { "generic", setting_generic, 1 },
+ { "gsm", setting_gsm, 10 },
+ { "infiniband", setting_infiniband, 6 },
+ { "ipv4", setting_ipv4, 15 },
+ { "ipv6", setting_ipv6, 15 },
+ { "ppp", setting_ppp, 19 },
+ { "pppoe", setting_pppoe, 5 },
+ { "serial", setting_serial, 6 },
+ { "team", setting_team, 2 },
+ { "team-port", setting_team_port, 2 },
+ { "vlan", setting_vlan, 6 },
+ { "vpn", setting_vpn, 6 },
+ { "wimax", setting_wimax, 3 },
+};
+
+static int
+find_by_name (gconstpointer keyv, gconstpointer cmpv)
+{
+ const char *key = keyv;
+ struct { const char *name; gpointer data; } *cmp = (gpointer)cmpv;
+
+ return strcmp (key, cmp->name);
+}
+
+static const char *
+nmc_setting_get_property_doc (NMSetting *setting, const char *prop)
+{
+ NmcSettingDesc *setting_desc;
+ NmcPropertyDesc *property_desc;
+
+ setting_desc = bsearch (nm_setting_get_name (setting),
+ all_settings, G_N_ELEMENTS (all_settings),
+ sizeof (NmcSettingDesc), find_by_name);
+ if (!setting_desc)
+ return NULL;
+ property_desc = bsearch (prop,
+ setting_desc->properties, setting_desc->n_properties,
+ sizeof (NmcPropertyDesc), find_by_name);
+ if (!property_desc)
+ return NULL;
+ return property_desc->docs;
+}
+ \ No newline at end of file
diff --git a/clients/cli/settings-docs.xsl b/clients/cli/settings-docs.xsl
new file mode 100644
index 000000000..996644bd9
--- /dev/null
+++ b/clients/cli/settings-docs.xsl
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+ <xsl:output
+ method="text"
+ doctype-public="-//OASIS//DTD DocBook XML V4.3//EN"
+ doctype-system="http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"
+ />
+
+ <xsl:template match="nm-setting-docs">/* Generated file. Do not edit. */
+
+typedef struct {
+ const char *name;
+ const char *docs;
+} NmcPropertyDesc;
+<xsl:apply-templates select="setting" mode="properties"><xsl:sort select="@name"/></xsl:apply-templates>
+
+typedef struct {
+ const char *name;
+ NmcPropertyDesc *properties;
+ int n_properties;
+} NmcSettingDesc;
+
+NmcSettingDesc all_settings[] = {
+<xsl:apply-templates select="setting" mode="settings"><xsl:sort select="@name"/></xsl:apply-templates>
+};
+
+static int
+find_by_name (gconstpointer keyv, gconstpointer cmpv)
+{
+ const char *key = keyv;
+ struct { const char *name; gpointer data; } *cmp = (gpointer)cmpv;
+
+ return strcmp (key, cmp->name);
+}
+
+static const char *
+nmc_setting_get_property_doc (NMSetting *setting, const char *prop)
+{
+ NmcSettingDesc *setting_desc;
+ NmcPropertyDesc *property_desc;
+
+ setting_desc = bsearch (nm_setting_get_name (setting),
+ all_settings, G_N_ELEMENTS (all_settings),
+ sizeof (NmcSettingDesc), find_by_name);
+ if (!setting_desc)
+ return NULL;
+ property_desc = bsearch (prop,
+ setting_desc->properties, setting_desc->n_properties,
+ sizeof (NmcPropertyDesc), find_by_name);
+ if (!property_desc)
+ return NULL;
+ return property_desc->docs;
+}
+ </xsl:template>
+
+ <xsl:template match="setting" mode="properties">
+NmcPropertyDesc setting_<xsl:value-of select="translate(@name,'-','_')"/>[] = {<xsl:apply-templates select="property"><xsl:sort select="@name"/></xsl:apply-templates>
+};
+ </xsl:template>
+
+ <xsl:template match="property">
+ <xsl:variable name="docs">
+ <xsl:call-template name="escape_quotes">
+ <xsl:with-param name="string" select="@description"/>
+ </xsl:call-template>
+ </xsl:variable>
+ { "<xsl:value-of select="@name"/>", "<xsl:value-of select="$docs"/>" },</xsl:template>
+
+ <xsl:template match="setting" mode="settings">
+ { "<xsl:value-of select="@name"/>", setting_<xsl:value-of select="translate(@name,'-','_')"/>, <xsl:value-of select="count(./property)"/> },</xsl:template>
+
+ <xsl:template name="escape_quotes">
+ <xsl:param name="string" />
+ <xsl:choose>
+ <xsl:when test="contains($string, '&quot;')">
+ <xsl:value-of select="substring-before($string, '&quot;')" />\&quot;<xsl:call-template name="escape_quotes"><xsl:with-param name="string" select="substring-after($string, '&quot;')" /></xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$string" />
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/cli/src/settings.c b/clients/cli/settings.c
index 0fc708b35..7d2a46c8c 100644
--- a/cli/src/settings.c
+++ b/clients/cli/settings.c
@@ -14,21 +14,21 @@
* 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 - 2014 Red Hat, Inc.
+ * Copyright 2010 - 2014 Red Hat, Inc.
*/
#include "config.h"
-#include <net/if_arp.h>
-#include <stdio.h>
+#include <stdlib.h>
+#include <arpa/inet.h>
#include <glib.h>
#include <glib/gi18n.h>
-#include <libnm-util/nm-utils.h>
#include "utils.h"
#include "common.h"
#include "settings.h"
+#include "nm-glib-compat.h"
/* Forward declarations */
static char *wep_key_type_to_string (NMWepKeyType type);
@@ -44,14 +44,15 @@ NmcOutputField nmc_fields_setting_connection[] = {
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 */
+ SETTING_FIELD (NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY, 10), /* 6 */
+ SETTING_FIELD (NM_SETTING_CONNECTION_TIMESTAMP, 10), /* 7 */
+ SETTING_FIELD (NM_SETTING_CONNECTION_READ_ONLY, 10), /* 8 */
+ SETTING_FIELD (NM_SETTING_CONNECTION_PERMISSIONS, 30), /* 9 */
+ SETTING_FIELD (NM_SETTING_CONNECTION_ZONE, 10), /* 10 */
+ SETTING_FIELD (NM_SETTING_CONNECTION_MASTER, 20), /* 11 */
+ SETTING_FIELD (NM_SETTING_CONNECTION_SLAVE_TYPE, 20), /* 12 */
+ SETTING_FIELD (NM_SETTING_CONNECTION_SECONDARIES, 40), /* 13 */
+ SETTING_FIELD (NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT, 30), /* 14 */
{NULL, NULL, 0, NULL, FALSE, FALSE, 0}
};
#define NMC_FIELDS_SETTING_CONNECTION_ALL "name"","\
@@ -60,6 +61,7 @@ NmcOutputField nmc_fields_setting_connection[] = {
NM_SETTING_CONNECTION_INTERFACE_NAME","\
NM_SETTING_CONNECTION_TYPE","\
NM_SETTING_CONNECTION_AUTOCONNECT","\
+ NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY","\
NM_SETTING_CONNECTION_TIMESTAMP","\
NM_SETTING_CONNECTION_READ_ONLY","\
NM_SETTING_CONNECTION_PERMISSIONS","\
@@ -250,64 +252,74 @@ NmcOutputField nmc_fields_setting_wireless_security[] = {
/* Available fields for NM_SETTING_IP4_CONFIG_SETTING_NAME */
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 */
- SETTING_FIELD (NM_SETTING_IP4_CONFIG_DNS_SEARCH, 15), /* 3 */
- SETTING_FIELD (NM_SETTING_IP4_CONFIG_ADDRESSES, 20), /* 4 */
- SETTING_FIELD (NM_SETTING_IP4_CONFIG_ROUTES, 20), /* 5 */
- SETTING_FIELD (NM_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES, 19), /* 6 */
- SETTING_FIELD (NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS, 16), /* 7 */
- SETTING_FIELD (NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID, 15), /* 8 */
- SETTING_FIELD (NM_SETTING_IP4_CONFIG_DHCP_SEND_HOSTNAME, 19), /* 9 */
- 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 */
+ SETTING_FIELD ("name", 8), /* 0 */
+ SETTING_FIELD (NM_SETTING_IP_CONFIG_METHOD, 10), /* 1 */
+ SETTING_FIELD (NM_SETTING_IP_CONFIG_DNS, 20), /* 2 */
+ SETTING_FIELD (NM_SETTING_IP_CONFIG_DNS_SEARCH, 15), /* 3 */
+ SETTING_FIELD (NM_SETTING_IP_CONFIG_ADDRESSES, 20), /* 4 */
+ SETTING_FIELD (NM_SETTING_IP_CONFIG_GATEWAY, 20), /* 5 */
+ SETTING_FIELD (NM_SETTING_IP_CONFIG_ROUTES, 20), /* 6 */
+ SETTING_FIELD (NM_SETTING_IP_CONFIG_ROUTE_METRIC, 15), /* 7 */
+ SETTING_FIELD (NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES, 19), /* 8 */
+ SETTING_FIELD (NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS, 16), /* 9 */
+ SETTING_FIELD (NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID, 15), /* 10 */
+ SETTING_FIELD (NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME, 19), /* 11 */
+ SETTING_FIELD (NM_SETTING_IP_CONFIG_DHCP_HOSTNAME, 14), /* 12 */
+ SETTING_FIELD (NM_SETTING_IP_CONFIG_NEVER_DEFAULT, 15), /* 13 */
+ SETTING_FIELD (NM_SETTING_IP_CONFIG_MAY_FAIL, 12), /* 14 */
{NULL, NULL, 0, NULL, FALSE, FALSE, 0}
};
#define NMC_FIELDS_SETTING_IP4_CONFIG_ALL "name"","\
- NM_SETTING_IP4_CONFIG_METHOD","\
- NM_SETTING_IP4_CONFIG_DNS","\
- NM_SETTING_IP4_CONFIG_DNS_SEARCH","\
- NM_SETTING_IP4_CONFIG_ADDRESSES","\
- NM_SETTING_IP4_CONFIG_ROUTES","\
- NM_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES","\
- NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS","\
+ NM_SETTING_IP_CONFIG_METHOD","\
+ NM_SETTING_IP_CONFIG_DNS","\
+ NM_SETTING_IP_CONFIG_DNS_SEARCH","\
+ NM_SETTING_IP_CONFIG_ADDRESSES","\
+ NM_SETTING_IP_CONFIG_GATEWAY","\
+ NM_SETTING_IP_CONFIG_ROUTES","\
+ NM_SETTING_IP_CONFIG_ROUTE_METRIC","\
+ NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES","\
+ NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS","\
NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID","\
- NM_SETTING_IP4_CONFIG_DHCP_SEND_HOSTNAME","\
- NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME","\
- NM_SETTING_IP4_CONFIG_NEVER_DEFAULT","\
- NM_SETTING_IP4_CONFIG_MAY_FAIL
+ NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME","\
+ NM_SETTING_IP_CONFIG_DHCP_HOSTNAME","\
+ NM_SETTING_IP_CONFIG_NEVER_DEFAULT","\
+ NM_SETTING_IP_CONFIG_MAY_FAIL
#define NMC_FIELDS_SETTING_IP4_CONFIG_COMMON NMC_FIELDS_SETTING_IP4_CONFIG_ALL
/* Available fields for NM_SETTING_IP6_CONFIG_SETTING_NAME */
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 */
- SETTING_FIELD (NM_SETTING_IP6_CONFIG_DNS_SEARCH, 15), /* 3 */
- SETTING_FIELD (NM_SETTING_IP6_CONFIG_ADDRESSES, 20), /* 4 */
- SETTING_FIELD (NM_SETTING_IP6_CONFIG_ROUTES, 20), /* 5 */
- SETTING_FIELD (NM_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES, 19), /* 6 */
- SETTING_FIELD (NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS, 16), /* 7 */
- SETTING_FIELD (NM_SETTING_IP6_CONFIG_NEVER_DEFAULT, 15), /* 8 */
- 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 */
+ SETTING_FIELD ("name", 8), /* 0 */
+ SETTING_FIELD (NM_SETTING_IP_CONFIG_METHOD, 10), /* 1 */
+ SETTING_FIELD (NM_SETTING_IP_CONFIG_DNS, 20), /* 2 */
+ SETTING_FIELD (NM_SETTING_IP_CONFIG_DNS_SEARCH, 15), /* 3 */
+ SETTING_FIELD (NM_SETTING_IP_CONFIG_ADDRESSES, 20), /* 4 */
+ SETTING_FIELD (NM_SETTING_IP_CONFIG_GATEWAY, 20), /* 5 */
+ SETTING_FIELD (NM_SETTING_IP_CONFIG_ROUTES, 20), /* 6 */
+ SETTING_FIELD (NM_SETTING_IP_CONFIG_ROUTE_METRIC, 15), /* 7 */
+ SETTING_FIELD (NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES, 19), /* 8 */
+ SETTING_FIELD (NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS, 16), /* 9 */
+ SETTING_FIELD (NM_SETTING_IP_CONFIG_NEVER_DEFAULT, 15), /* 10 */
+ SETTING_FIELD (NM_SETTING_IP_CONFIG_MAY_FAIL, 12), /* 11 */
+ SETTING_FIELD (NM_SETTING_IP6_CONFIG_IP6_PRIVACY, 15), /* 12 */
+ SETTING_FIELD (NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME, 19), /* 13 */
+ SETTING_FIELD (NM_SETTING_IP_CONFIG_DHCP_HOSTNAME, 14), /* 14 */
{NULL, NULL, 0, NULL, FALSE, FALSE, 0}
};
#define NMC_FIELDS_SETTING_IP6_CONFIG_ALL "name"","\
- NM_SETTING_IP6_CONFIG_METHOD","\
- NM_SETTING_IP6_CONFIG_DNS","\
- NM_SETTING_IP6_CONFIG_DNS_SEARCH","\
- NM_SETTING_IP6_CONFIG_ADDRESSES","\
- NM_SETTING_IP6_CONFIG_ROUTES","\
- NM_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES","\
- NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS","\
- NM_SETTING_IP6_CONFIG_NEVER_DEFAULT","\
- NM_SETTING_IP6_CONFIG_MAY_FAIL","\
+ NM_SETTING_IP_CONFIG_METHOD","\
+ NM_SETTING_IP_CONFIG_DNS","\
+ NM_SETTING_IP_CONFIG_DNS_SEARCH","\
+ NM_SETTING_IP_CONFIG_ADDRESSES","\
+ NM_SETTING_IP_CONFIG_GATEWAY","\
+ NM_SETTING_IP_CONFIG_ROUTES","\
+ NM_SETTING_IP_CONFIG_ROUTE_METRIC","\
+ NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES","\
+ NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS","\
+ NM_SETTING_IP_CONFIG_NEVER_DEFAULT","\
+ NM_SETTING_IP_CONFIG_MAY_FAIL","\
NM_SETTING_IP6_CONFIG_IP6_PRIVACY","\
- NM_SETTING_IP6_CONFIG_DHCP_HOSTNAME
+ NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME","\
+ NM_SETTING_IP_CONFIG_DHCP_HOSTNAME
#define NMC_FIELDS_SETTING_IP6_CONFIG_COMMON NMC_FIELDS_SETTING_IP4_CONFIG_ALL
/* Available fields for NM_SETTING_SERIAL_SETTING_NAME */
@@ -419,11 +431,9 @@ NmcOutputField nmc_fields_setting_gsm[] = {
SETTING_FIELD (NM_SETTING_GSM_PASSWORD_FLAGS, 20), /* 4 */
SETTING_FIELD (NM_SETTING_GSM_APN, 25), /* 5 */
SETTING_FIELD (NM_SETTING_GSM_NETWORK_ID, 12), /* 6 */
- SETTING_FIELD (NM_SETTING_GSM_NETWORK_TYPE, 15), /* 7 */
- SETTING_FIELD (NM_SETTING_GSM_ALLOWED_BANDS, 15), /* 8 */
- 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 */
+ SETTING_FIELD (NM_SETTING_GSM_PIN, 10), /* 7 */
+ SETTING_FIELD (NM_SETTING_GSM_PIN_FLAGS, 20), /* 8 */
+ SETTING_FIELD (NM_SETTING_GSM_HOME_ONLY, 10), /* 9 */
{NULL, NULL, 0, NULL, FALSE, FALSE, 0}
};
#define NMC_FIELDS_SETTING_GSM_ALL "name"","\
@@ -433,8 +443,6 @@ NmcOutputField nmc_fields_setting_gsm[] = {
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
@@ -489,13 +497,15 @@ NmcOutputField nmc_fields_setting_vpn[] = {
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 */
+ SETTING_FIELD (NM_SETTING_VPN_PERSISTENT, 15), /* 5 */
{NULL, NULL, 0, NULL, FALSE, FALSE, 0}
};
#define NMC_FIELDS_SETTING_VPN_ALL "name"","\
NM_SETTING_VPN_SERVICE_TYPE","\
NM_SETTING_VPN_USER_NAME","\
NM_SETTING_VPN_DATA","\
- NM_SETTING_VPN_SECRETS
+ NM_SETTING_VPN_SECRETS","\
+ NM_SETTING_VPN_PERSISTENT
#define NMC_FIELDS_SETTING_VPN_COMMON NMC_FIELDS_SETTING_VPN_ALL
/* Available fields for NM_SETTING_WIMAX_SETTING_NAME */
@@ -531,28 +541,24 @@ NmcOutputField nmc_fields_setting_infiniband[] = {
/* Available fields for NM_SETTING_BOND_SETTING_NAME */
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 */
+ SETTING_FIELD (NM_SETTING_BOND_OPTIONS, 30), /* 1 */
{NULL, NULL, 0, NULL, FALSE, FALSE, 0}
};
#define NMC_FIELDS_SETTING_BOND_ALL "name"","\
- NM_SETTING_BOND_INTERFACE_NAME","\
NM_SETTING_BOND_OPTIONS
#define NMC_FIELDS_SETTING_BOND_COMMON NMC_FIELDS_SETTING_BOND_ALL
/* Available fields for NM_SETTING_VLAN_SETTING_NAME */
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 */
- SETTING_FIELD (NM_SETTING_VLAN_ID, 6), /* 3 */
- 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 */
+ SETTING_FIELD (NM_SETTING_VLAN_PARENT, 8), /* 1 */
+ SETTING_FIELD (NM_SETTING_VLAN_ID, 6), /* 2 */
+ SETTING_FIELD (NM_SETTING_VLAN_FLAGS, 45), /* 3 */
+ SETTING_FIELD (NM_SETTING_VLAN_INGRESS_PRIORITY_MAP, 22), /* 4 */
+ SETTING_FIELD (NM_SETTING_VLAN_EGRESS_PRIORITY_MAP, 22), /* 5 */
{NULL, NULL, 0, NULL, FALSE, FALSE, 0}
};
#define NMC_FIELDS_SETTING_VLAN_ALL "name"","\
- NM_SETTING_VLAN_INTERFACE_NAME","\
NM_SETTING_VLAN_PARENT","\
NM_SETTING_VLAN_ID","\
NM_SETTING_VLAN_FLAGS","\
@@ -563,18 +569,16 @@ NmcOutputField nmc_fields_setting_vlan[] = {
/* Available fields for NM_SETTING_BRIDGE_SETTING_NAME */
NmcOutputField nmc_fields_setting_bridge[] = {
SETTING_FIELD ("name", 8), /* 0 */
- SETTING_FIELD (NM_SETTING_BRIDGE_INTERFACE_NAME, 15), /* 1 */
- 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 */
+ SETTING_FIELD (NM_SETTING_BRIDGE_MAC_ADDRESS, 19), /* 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, 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","\
@@ -601,12 +605,10 @@ NmcOutputField nmc_fields_setting_bridge_port[] = {
/* 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 */
+ SETTING_FIELD (NM_SETTING_TEAM_CONFIG, 30), /* 1 */
{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
@@ -675,69 +677,22 @@ wep_key_type_to_string (NMWepKeyType type)
}
static char *
-byte_array_to_string (const GByteArray *array)
+bytes_to_string (GBytes *bytes)
{
+ const guint8 *data;
+ gsize len;
GString *cert = NULL;
int i;
- if (array && array->len > 0)
- cert = g_string_new (NULL);
-
- for (i = 0; array && i < array->len; i++) {
- g_string_append_printf (cert, "%02X", array->data[i]);
- }
-
- return cert ? g_string_free (cert, FALSE) : NULL;
-}
-
-static char *
-allowed_bands_to_string (guint32 bands)
-{
- GString *band_str;
-
- if (bands == NM_SETTING_GSM_BAND_UNKNOWN)
- return g_strdup (_("0 (unknown)"));
-
- band_str = g_string_new (NULL);
- g_string_printf (band_str, "%d (", bands);
-
- if (bands & NM_SETTING_GSM_BAND_ANY)
- g_string_append (band_str, _("any, "));
- if (bands & NM_SETTING_GSM_BAND_EGSM)
- g_string_append (band_str, _("900 MHz, "));
- if (bands & NM_SETTING_GSM_BAND_DCS)
- g_string_append (band_str, _("1800 MHz, "));
- if (bands & NM_SETTING_GSM_BAND_PCS)
- g_string_append (band_str, _("1900 MHz, "));
- if (bands & NM_SETTING_GSM_BAND_G850)
- g_string_append (band_str, _("850 MHz, "));
- if (bands & NM_SETTING_GSM_BAND_U2100)
- g_string_append (band_str, _("WCDMA 3GPP UMTS 2100 MHz, "));
- if (bands & NM_SETTING_GSM_BAND_U1800)
- g_string_append (band_str, _("WCDMA 3GPP UMTS 1800 MHz, "));
- if (bands & NM_SETTING_GSM_BAND_U17IV)
- g_string_append (band_str, _("WCDMA 3GPP UMTS 1700/2100 MHz, "));
- if (bands & NM_SETTING_GSM_BAND_U800)
- g_string_append (band_str, _("WCDMA 3GPP UMTS 800 MHz, "));
- if (bands & NM_SETTING_GSM_BAND_U850)
- g_string_append (band_str, _("WCDMA 3GPP UMTS 850 MHz, "));
- if (bands & NM_SETTING_GSM_BAND_U900)
- g_string_append (band_str, _("WCDMA 3GPP UMTS 900 MHz, "));
- if (bands & NM_SETTING_GSM_BAND_U17IX)
- g_string_append (band_str, _("WCDMA 3GPP UMTS 1700 MHz, "));
- if (bands & NM_SETTING_GSM_BAND_U1900)
- g_string_append (band_str, _("WCDMA 3GPP UMTS 1900 MHz, "));
- if (bands & NM_SETTING_GSM_BAND_U2600)
- g_string_append (band_str, _("WCDMA 3GPP UMTS 2600 MHz, "));
-
- if (band_str->str[band_str->len-1] == '(')
- g_string_append (band_str, _("unknown"));
- else
- g_string_truncate (band_str, band_str->len-2); /* chop off trailing ', ' */
+ if (!bytes)
+ return NULL;
+ data = g_bytes_get_data (bytes, &len);
- g_string_append_c (band_str, ')');
+ cert = g_string_new (NULL);
+ for (i = 0; i < len; i++)
+ g_string_append_printf (cert, "%02X", data[i]);
- return g_string_free (band_str, FALSE);
+ return g_string_free (cert, FALSE);
}
static char *
@@ -851,9 +806,6 @@ vpn_data_item (const char *key, const char *value, gpointer user_data)
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; \
@@ -872,22 +824,6 @@ vpn_data_item (const char *key, const char *value, gpointer user_data)
return secret_flags_to_string (v); \
}
-#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; \
- }
-
/* --- 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)
@@ -924,7 +860,7 @@ nmc_property_802_1X_get_ca_cert (NMSetting *setting)
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));
+ ca_cert_str = bytes_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));
@@ -940,7 +876,7 @@ nmc_property_802_1X_get_client_cert (NMSetting *setting)
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));
+ client_cert_str = bytes_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));
@@ -956,7 +892,7 @@ nmc_property_802_1X_get_phase2_ca_cert (NMSetting *setting)
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));
+ phase2_ca_cert_str = bytes_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));
@@ -972,7 +908,7 @@ nmc_property_802_1X_get_phase2_client_cert (NMSetting *setting)
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));
+ phase2_client_cert_str = bytes_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));
@@ -983,7 +919,7 @@ 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));
+ return bytes_to_string (nm_setting_802_1x_get_password_raw (s_8021X));
}
static char *
@@ -995,7 +931,7 @@ nmc_property_802_1X_get_private_key (NMSetting *setting)
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));
+ private_key_str = bytes_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));
@@ -1011,7 +947,7 @@ nmc_property_802_1X_get_phase2_private_key (NMSetting *setting)
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));
+ phase2_private_key_str = bytes_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));
@@ -1028,12 +964,9 @@ 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_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)
{
@@ -1054,8 +987,7 @@ nmc_property_bond_get_options (NMSetting *setting)
}
/* --- 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_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)
@@ -1069,7 +1001,6 @@ DEFINE_GETTER (nmc_property_bridge_port_get_path_cost, NM_SETTING_BRIDGE_PORT_PA
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 --- */
@@ -1088,6 +1019,7 @@ 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_autoconnect_priority, NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY)
DEFINE_GETTER (nmc_property_connection_get_timestamp, NM_SETTING_CONNECTION_TIMESTAMP)
DEFINE_GETTER (nmc_property_connection_get_read_only, NM_SETTING_CONNECTION_READ_ONLY)
@@ -1243,23 +1175,12 @@ 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_mac_address, NM_SETTING_INFINIBAND_MAC_ADDRESS)
DEFINE_GETTER (nmc_property_ib_get_transport_mode, NM_SETTING_INFINIBAND_TRANSPORT_MODE)
static char *
@@ -1291,30 +1212,132 @@ nmc_property_ib_get_p_key (NMSetting *setting)
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_method, NM_SETTING_IP_CONFIG_METHOD)
+DEFINE_GETTER (nmc_property_ipv4_get_dns, NM_SETTING_IP_CONFIG_DNS)
+DEFINE_GETTER (nmc_property_ipv4_get_dns_search, NM_SETTING_IP_CONFIG_DNS_SEARCH)
+
+static char *
+nmc_property_ip_get_addresses (NMSetting *setting)
+{
+ NMSettingIPConfig *s_ip = NM_SETTING_IP_CONFIG (setting);
+ GString *printable;
+ guint32 num_addresses, i;
+ NMIPAddress *addr;
+
+ printable = g_string_new (NULL);
+
+ num_addresses = nm_setting_ip_config_get_num_addresses (s_ip);
+ for (i = 0; i < num_addresses; i++) {
+ addr = nm_setting_ip_config_get_address (s_ip, i);
+
+ if (printable->len > 0)
+ g_string_append (printable, ", ");
+
+ g_string_append_printf (printable, "%s/%u",
+ nm_ip_address_get_address (addr),
+ nm_ip_address_get_prefix (addr));
+ }
+
+ return g_string_free (printable, FALSE);
+}
+
+static char *
+nmc_property_ipv4_get_routes (NMSetting *setting)
+{
+ NMSettingIPConfig *s_ip4 = NM_SETTING_IP_CONFIG (setting);
+ GString *printable;
+ guint32 num_routes, i;
+ NMIPRoute *route;
+
+ printable = g_string_new (NULL);
+
+ num_routes = nm_setting_ip_config_get_num_routes (s_ip4);
+ for (i = 0; i < num_routes; i++) {
+ route = nm_setting_ip_config_get_route (s_ip4, i);
+
+ if (printable->len > 0)
+ g_string_append (printable, "; ");
+
+ g_string_append (printable, "{ ");
+
+ g_string_append_printf (printable, "ip = %s/%u",
+ nm_ip_route_get_dest (route),
+ nm_ip_route_get_prefix (route));
+
+ if (nm_ip_route_get_next_hop (route)) {
+ g_string_append_printf (printable, ", nh = %s",
+ nm_ip_route_get_next_hop (route));
+ }
+
+ if (nm_ip_route_get_metric (route) != -1)
+ g_string_append_printf (printable, ", mt = %u", (guint32) nm_ip_route_get_metric (route));
+
+ g_string_append (printable, " }");
+ }
+
+ return g_string_free (printable, FALSE);
+}
+
+DEFINE_GETTER (nmc_property_ipv4_get_gateway, NM_SETTING_IP_CONFIG_GATEWAY)
+DEFINE_GETTER (nmc_property_ipv4_get_route_metric, NM_SETTING_IP_CONFIG_ROUTE_METRIC)
+DEFINE_GETTER (nmc_property_ipv4_get_ignore_auto_routes, NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES)
+DEFINE_GETTER (nmc_property_ipv4_get_ignore_auto_dns, NM_SETTING_IP_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)
+DEFINE_GETTER (nmc_property_ipv4_get_dhcp_send_hostname, NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME)
+DEFINE_GETTER (nmc_property_ipv4_get_dhcp_hostname, NM_SETTING_IP_CONFIG_DHCP_HOSTNAME)
+DEFINE_GETTER (nmc_property_ipv4_get_never_default, NM_SETTING_IP_CONFIG_NEVER_DEFAULT)
+DEFINE_GETTER (nmc_property_ipv4_get_may_fail, NM_SETTING_IP_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)
+DEFINE_GETTER (nmc_property_ipv6_get_method, NM_SETTING_IP_CONFIG_METHOD)
+DEFINE_GETTER (nmc_property_ipv6_get_dns, NM_SETTING_IP_CONFIG_DNS)
+DEFINE_GETTER (nmc_property_ipv6_get_dns_search, NM_SETTING_IP_CONFIG_DNS_SEARCH)
+
+static char *
+nmc_property_ipv6_get_routes (NMSetting *setting)
+{
+ NMSettingIPConfig *s_ip6 = NM_SETTING_IP_CONFIG (setting);
+ GString *printable;
+ guint32 num_routes, i;
+ NMIPRoute *route;
+
+ printable = g_string_new (NULL);
+
+ num_routes = nm_setting_ip_config_get_num_routes (s_ip6);
+ for (i = 0; i < num_routes; i++) {
+ route = nm_setting_ip_config_get_route (s_ip6, i);
+
+ if (printable->len > 0)
+ g_string_append (printable, "; ");
+
+ g_string_append (printable, "{ ");
+
+ g_string_append_printf (printable, "ip = %s/%u",
+ nm_ip_route_get_dest (route),
+ nm_ip_route_get_prefix (route));
+
+ if (nm_ip_route_get_next_hop (route)) {
+ g_string_append_printf (printable, ", nh = %s",
+ nm_ip_route_get_next_hop (route));
+ }
+
+ if (nm_ip_route_get_metric (route) != -1)
+ g_string_append_printf (printable, ", mt = %u", (guint32) nm_ip_route_get_metric (route));
+
+ g_string_append (printable, " }");
+ }
+
+ return g_string_free (printable, FALSE);
+}
+
+DEFINE_GETTER (nmc_property_ipv6_get_gateway, NM_SETTING_IP_CONFIG_GATEWAY)
+DEFINE_GETTER (nmc_property_ipv6_get_route_metric, NM_SETTING_IP_CONFIG_ROUTE_METRIC)
+DEFINE_GETTER (nmc_property_ipv6_get_ignore_auto_routes, NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES)
+DEFINE_GETTER (nmc_property_ipv6_get_ignore_auto_dns, NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS)
+DEFINE_GETTER (nmc_property_ipv6_get_never_default, NM_SETTING_IP_CONFIG_NEVER_DEFAULT)
+DEFINE_GETTER (nmc_property_ipv6_get_may_fail, NM_SETTING_IP_CONFIG_MAY_FAIL)
+DEFINE_GETTER (nmc_property_ipv6_get_dhcp_send_hostname, NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME)
+DEFINE_GETTER (nmc_property_ipv6_get_dhcp_hostname, NM_SETTING_IP_CONFIG_DHCP_HOSTNAME)
static char *
nmc_property_ipv6_get_ip6_privacy (NMSetting *setting)
@@ -1325,18 +1348,20 @@ nmc_property_ipv6_get_ip6_privacy (NMSetting *setting)
/* --- 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)
+DEFINE_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;
+ GBytes *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);
+ if (ssid) {
+ ssid_str = nm_utils_ssid_to_utf8 (g_bytes_get_data (ssid, NULL),
+ g_bytes_get_size (ssid));
+ }
return ssid_str;
}
@@ -1370,12 +1395,10 @@ DEFINE_SECRET_FLAGS_GETTER (nmc_property_pppoe_get_password_flags, NM_SETTING_PP
/* --- 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)
@@ -1408,7 +1431,7 @@ 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);
+ NMSettingVpn *s_vpn = NM_SETTING_VPN (setting);
GString *data_item_str;
data_item_str = g_string_new (NULL);
@@ -1420,7 +1443,7 @@ nmc_property_vpn_get_data (NMSetting *setting)
static char *
nmc_property_vpn_get_secrets (NMSetting *setting)
{
- NMSettingVPN *s_vpn = NM_SETTING_VPN (setting);
+ NMSettingVpn *s_vpn = NM_SETTING_VPN (setting);
GString *secret_str;
secret_str = g_string_new (NULL);
@@ -1429,17 +1452,19 @@ nmc_property_vpn_get_secrets (NMSetting *setting)
return g_string_free (secret_str, FALSE);
}
+DEFINE_GETTER (nmc_property_vpn_get_persistent, NM_SETTING_VPN_PERSISTENT)
+
/* --- 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)
+DEFINE_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, NM_SETTING_WIRED_MAC_ADDRESS)
+DEFINE_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)
@@ -1462,11 +1487,11 @@ nmc_property_wired_get_mtu (NMSetting *setting)
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_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, NM_SETTING_WIRELESS_MAC_ADDRESS)
+DEFINE_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)
@@ -1475,12 +1500,14 @@ static char *
nmc_property_wireless_get_ssid (NMSetting *setting)
{
NMSettingWireless *s_wireless = NM_SETTING_WIRELESS (setting);
- const GByteArray *ssid;
+ GBytes *ssid;
char *ssid_str = NULL;
ssid = nm_setting_wireless_get_ssid (s_wireless);
- if (ssid)
- ssid_str = nm_utils_ssid_to_utf8 (ssid);
+ if (ssid) {
+ ssid_str = nm_utils_ssid_to_utf8 (g_bytes_get_data (ssid, NULL),
+ g_bytes_get_size (ssid));
+ }
return ssid_str;
}
@@ -1604,7 +1631,7 @@ nmc_setting_new_for_name (const char *name)
NMSetting *setting = NULL;
if (name) {
- stype = nm_connection_lookup_setting_type (name);
+ stype = nm_setting_lookup_type (name);
if (stype != G_TYPE_INVALID) {
setting = g_object_new (stype, NULL);
g_warn_if_fail (NM_IS_SETTING (setting));
@@ -1646,19 +1673,19 @@ ipv4_addresses_changed_cb (GObject *object, GParamSpec *pspec, gpointer user_dat
/* 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 (nm_setting_ip_config_get_num_addresses (NM_SETTING_IP_CONFIG (object))) {
+ if (g_strcmp0 (nm_setting_ip_config_get_method (NM_SETTING_IP_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);
+ g_object_set (object, NM_SETTING_IP_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);
+ if (!g_strcmp0 (nm_setting_ip_config_get_method (NM_SETTING_IP_CONFIG (object)), NM_SETTING_IP4_CONFIG_METHOD_MANUAL))
+ g_object_set (object, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
}
g_signal_handlers_unblock_by_func (object, G_CALLBACK (ipv4_method_changed_cb), NULL);
@@ -1674,8 +1701,8 @@ ipv4_method_changed_cb (GObject *object, GParamSpec *pspec, gpointer user_data)
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 (g_strcmp0 (nm_setting_ip_config_get_method (NM_SETTING_IP_CONFIG (object)), NM_SETTING_IP4_CONFIG_METHOD_MANUAL)) {
+ if (nm_setting_ip_config_get_num_addresses (NM_SETTING_IP_CONFIG (object))) {
if (!answered) {
answered = TRUE;
answer = get_answer ("ipv4.addresses", NULL);
@@ -1683,14 +1710,14 @@ ipv4_method_changed_cb (GObject *object, GParamSpec *pspec, gpointer user_data)
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);
+ nmc_property_get_gvalue (NM_SETTING (object), NM_SETTING_IP_CONFIG_ADDRESSES, &value);
+ g_object_set (object, NM_SETTING_IP_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);
+ nmc_property_set_gvalue (NM_SETTING (object), NM_SETTING_IP_CONFIG_ADDRESSES, &value);
g_value_unset (&value);
}
}
@@ -1709,19 +1736,19 @@ ipv6_addresses_changed_cb (GObject *object, GParamSpec *pspec, gpointer user_dat
/* 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 (nm_setting_ip_config_get_num_addresses (NM_SETTING_IP_CONFIG (object))) {
+ if (g_strcmp0 (nm_setting_ip_config_get_method (NM_SETTING_IP_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);
+ g_object_set (object, NM_SETTING_IP_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);
+ if (!g_strcmp0 (nm_setting_ip_config_get_method (NM_SETTING_IP_CONFIG (object)), NM_SETTING_IP6_CONFIG_METHOD_MANUAL))
+ g_object_set (object, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO, NULL);
}
g_signal_handlers_unblock_by_func (object, G_CALLBACK (ipv6_method_changed_cb), NULL);
@@ -1737,8 +1764,8 @@ ipv6_method_changed_cb (GObject *object, GParamSpec *pspec, gpointer user_data)
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 (g_strcmp0 (nm_setting_ip_config_get_method (NM_SETTING_IP_CONFIG (object)), NM_SETTING_IP6_CONFIG_METHOD_MANUAL)) {
+ if (nm_setting_ip_config_get_num_addresses (NM_SETTING_IP_CONFIG (object))) {
if (!answered) {
answered = TRUE;
answer = get_answer ("ipv6.addresses", NULL);
@@ -1746,14 +1773,14 @@ ipv6_method_changed_cb (GObject *object, GParamSpec *pspec, gpointer user_data)
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);
+ nmc_property_get_gvalue (NM_SETTING (object), NM_SETTING_IP_CONFIG_ADDRESSES, &value);
+ g_object_set (object, NM_SETTING_IP_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);
+ nmc_property_set_gvalue (NM_SETTING (object), NM_SETTING_IP_CONFIG_ADDRESSES, &value);
g_value_unset (&value);
}
}
@@ -1784,31 +1811,57 @@ wireless_band_channel_changed_cb (GObject *object, GParamSpec *pspec, gpointer u
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);
+ g_print (_("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);
+ }
+}
+
+static void
+connection_master_changed_cb (GObject *object, GParamSpec *pspec, gpointer user_data)
+{
+ NMSettingConnection *s_con = NM_SETTING_CONNECTION (object);
+ NMConnection *connection = NM_CONNECTION (user_data);
+ NMSetting *s_ipv4, *s_ipv6;
+ const char *value, *tmp_str;
+
+ value = nm_setting_connection_get_master (s_con);
+ if (value) {
+ s_ipv4 = nm_connection_get_setting_by_name (connection, NM_SETTING_IP4_CONFIG_SETTING_NAME);
+ s_ipv6 = nm_connection_get_setting_by_name (connection, NM_SETTING_IP6_CONFIG_SETTING_NAME);
+ if (s_ipv4 || s_ipv6) {
+ g_print (_("Warning: setting %s.%s requires removing ipv4 and ipv6 settings\n"),
+ nm_setting_get_name (NM_SETTING (s_con)), g_param_spec_get_name (pspec));
+ tmp_str = nmc_get_user_input (_("Do you want to remove them? [yes] "));
+ if (!tmp_str || matches (tmp_str, "yes") == 0) {
+ if (s_ipv4)
+ nm_connection_remove_setting (connection, G_OBJECT_TYPE (s_ipv4));
+ if (s_ipv6)
+ nm_connection_remove_setting (connection, G_OBJECT_TYPE (s_ipv6));
+ }
+ }
}
}
void
-nmc_setting_ip4_connect_handlers (NMSettingIP4Config *setting)
+nmc_setting_ip4_connect_handlers (NMSettingIPConfig *setting)
{
g_return_if_fail (NM_IS_SETTING_IP4_CONFIG (setting));
- g_signal_connect (setting, "notify::" NM_SETTING_IP4_CONFIG_ADDRESSES,
+ g_signal_connect (setting, "notify::" NM_SETTING_IP_CONFIG_ADDRESSES,
G_CALLBACK (ipv4_addresses_changed_cb), NULL);
- g_signal_connect (setting, "notify::" NM_SETTING_IP4_CONFIG_METHOD,
+ g_signal_connect (setting, "notify::" NM_SETTING_IP_CONFIG_METHOD,
G_CALLBACK (ipv4_method_changed_cb), NULL);
}
void
-nmc_setting_ip6_connect_handlers (NMSettingIP6Config *setting)
+nmc_setting_ip6_connect_handlers (NMSettingIPConfig *setting)
{
g_return_if_fail (NM_IS_SETTING_IP6_CONFIG (setting));
- g_signal_connect (setting, "notify::" NM_SETTING_IP6_CONFIG_ADDRESSES,
+ g_signal_connect (setting, "notify::" NM_SETTING_IP_CONFIG_ADDRESSES,
G_CALLBACK (ipv6_addresses_changed_cb), NULL);
- g_signal_connect (setting, "notify::" NM_SETTING_IP6_CONFIG_METHOD,
+ g_signal_connect (setting, "notify::" NM_SETTING_IP_CONFIG_METHOD,
G_CALLBACK (ipv6_method_changed_cb), NULL);
}
@@ -1823,6 +1876,15 @@ nmc_setting_wireless_connect_handlers (NMSettingWireless *setting)
G_CALLBACK (wireless_band_channel_changed_cb), NULL);
}
+void
+nmc_setting_connection_connect_handlers (NMSettingConnection *setting, NMConnection *connection)
+{
+ g_return_if_fail (NM_IS_SETTING_CONNECTION (setting));
+
+ g_signal_connect (setting, "notify::" NM_SETTING_CONNECTION_MASTER,
+ G_CALLBACK (connection_master_changed_cb), connection);
+}
+
/*
* Customize some properties of the setting so that the setting has sensible
* values.
@@ -1833,15 +1895,15 @@ 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,
+ g_object_set (NM_SETTING_IP_CONFIG (setting),
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
NULL);
- nmc_setting_ip4_connect_handlers (NM_SETTING_IP4_CONFIG (setting));
+ nmc_setting_ip4_connect_handlers (NM_SETTING_IP_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,
+ g_object_set (NM_SETTING_IP_CONFIG (setting),
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO,
NULL);
- nmc_setting_ip6_connect_handlers (NM_SETTING_IP6_CONFIG (setting));
+ nmc_setting_ip6_connect_handlers (NM_SETTING_IP_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,
@@ -1897,6 +1959,28 @@ validate_int (NMSetting *setting, const char* prop, gint val, GError **error)
return success;
}
+static gboolean
+validate_int64 (NMSetting *setting, const char* prop, gint64 val, GError **error)
+{
+ GParamSpec *pspec;
+ GValue value = G_VALUE_INIT;
+ gboolean success = TRUE;
+
+ g_value_init (&value, G_TYPE_INT64);
+ g_value_set_int64 (&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)) {
+ GParamSpecInt64 *pspec_int = (GParamSpecInt64 *) pspec;
+ G_STATIC_ASSERT (sizeof (long long) >= sizeof (gint64));
+ g_set_error (error, 1, 0, _("'%lld' is not valid; use <%lld-%lld>"),
+ (long long) val, (long long) pspec_int->minimum, (long long) pspec_int->maximum);
+ success = FALSE;
+ }
+ g_value_unset (&value);
+ return success;
+}
+
/* Validate 'val' number against to uint property spec */
static gboolean
validate_uint (NMSetting *setting, const char* prop, guint val, GError **error)
@@ -1911,7 +1995,7 @@ validate_uint (NMSetting *setting, const char* prop, guint val, GError **error)
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>"),
+ g_set_error (error, 1, 0, _("'%u' is not valid; use <%u-%u>"),
val, pspec_uint->minimum, pspec_uint->maximum);
success = FALSE;
}
@@ -2085,9 +2169,29 @@ nmc_property_set_string (NMSetting *setting, const char *prop, const char *val,
}
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, (guint) val_int, NULL);
+ return TRUE;
+}
+
+static gboolean
nmc_property_set_int (NMSetting *setting, const char *prop, const char *val, GError **error)
{
- long val_int;
+ long int val_int;
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
@@ -2100,27 +2204,27 @@ nmc_property_set_int (NMSetting *setting, const char *prop, const char *val, GEr
if (!validate_int (setting, prop, (gint) val_int, error))
return FALSE;
- g_object_set (setting, prop, val_int, NULL);
+ g_object_set (setting, prop, (gint) val_int, NULL);
return TRUE;
}
static gboolean
-nmc_property_set_uint (NMSetting *setting, const char *prop, const char *val, GError **error)
+nmc_property_set_int64 (NMSetting *setting, const char *prop, const char *val, GError **error)
{
- unsigned long val_int;
+ 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)) {
+ if (!nmc_string_to_int (val, FALSE, 0, 0, &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))
+ if (!validate_int64 (setting, prop, (gint64) val_int, error))
return FALSE;
- g_object_set (setting, prop, val_int, NULL);
+ g_object_set (setting, prop, (gint64) val_int, NULL);
return TRUE;
}
@@ -2141,7 +2245,7 @@ nmc_property_set_bool (NMSetting *setting, const char *prop, const char *val, GE
static gboolean
nmc_property_set_ssid (NMSetting *setting, const char *prop, const char *val, GError **error)
{
- GByteArray *ssid_arr;
+ GBytes *ssid;
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
@@ -2150,28 +2254,23 @@ nmc_property_set_ssid (NMSetting *setting, const char *prop, const char *val, GE
return FALSE;
}
- 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);
-
+ ssid = g_bytes_new (val, strlen (val));
+ g_object_set (setting, prop, ssid, NULL);
+ g_bytes_unref (ssid);
return TRUE;
}
static gboolean
nmc_property_set_mac (NMSetting *setting, const char *prop, const char *val, GError **error)
{
- GByteArray *array;
-
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
- array = nm_utils_hwaddr_atoba (val, ARPHRD_ETHER);
- if (!array) {
+ if (!nm_utils_hwaddr_valid (val, ETH_ALEN)) {
g_set_error (error, 1, 0, _("'%s' is not a valid Ethernet MAC"), val);
return FALSE;
}
- g_object_set (setting, prop, array, NULL);
- g_byte_array_free (array, TRUE);
+ g_object_set (setting, prop, val, NULL);
return TRUE;
}
@@ -2199,8 +2298,14 @@ nmc_property_set_ifname (NMSetting *setting, const char *prop, const char *val,
return TRUE;
}
+#define ALL_SECRET_FLAGS \
+ (NM_SETTING_SECRET_FLAG_NONE | \
+ NM_SETTING_SECRET_FLAG_AGENT_OWNED | \
+ NM_SETTING_SECRET_FLAG_NOT_SAVED | \
+ NM_SETTING_SECRET_FLAG_NOT_REQUIRED)
+
static gboolean
-nmc_property_set_flags (NMSetting *setting, const char *prop, const char *val, GError **error)
+nmc_property_set_secret_flags (NMSetting *setting, const char *prop, const char *val, GError **error)
{
char **strv = NULL, **iter;
unsigned long flags = 0, val_int;
@@ -2209,8 +2314,9 @@ nmc_property_set_flags (NMSetting *setting, const char *prop, const char *val, G
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);
+ if (!nmc_string_to_uint (*iter, TRUE, 0, ALL_SECRET_FLAGS, &val_int)) {
+ g_set_error (error, 1, 0, _("'%s' is not a valid flag number; use <0-%d>"),
+ *iter, ALL_SECRET_FLAGS);
g_strfreev (strv);
return FALSE;
}
@@ -2218,9 +2324,11 @@ nmc_property_set_flags (NMSetting *setting, const char *prop, const char *val, G
}
g_strfreev (strv);
- /* Validate the number according to the property spec */
- if (!validate_uint (setting, prop, (guint) flags, error))
- return FALSE;
+ /* Validate the flags number */
+ if (flags > ALL_SECRET_FLAGS) {
+ flags = ALL_SECRET_FLAGS;
+ g_print (_("Warning: '%s' sum is higher than all flags => all flags set\n"), val);
+ }
g_object_set (setting, prop, (guint) flags, NULL);
return TRUE;
@@ -2240,7 +2348,7 @@ nmc_property_set_byte_array (NMSetting *setting, const char *prop, const char *v
char *val_strip;
const char *delimiters = " \t,";
long int val_int;
- char *bin;
+ GBytes *bytes;
GByteArray *array = NULL;
gboolean success = TRUE;
@@ -2249,11 +2357,9 @@ nmc_property_set_byte_array (NMSetting *setting, const char *prop, const char *v
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);
+ bytes = nm_utils_hexstr2bin (val_strip);
+ if (bytes) {
+ array = g_bytes_unref_to_array (bytes);
goto done;
}
@@ -2291,7 +2397,7 @@ done:
\
list = nmc_strsplit_set (val, " \t,", 0); \
for (iter = list; iter && *iter; iter++) { \
- if (!nm_utils_hwaddr_aton (*iter, ARPHRD_ETHER, buf)) { \
+ if (!nm_utils_hwaddr_aton (*iter, buf, ETH_ALEN)) { \
g_set_error (error, 1, 0, _("'%s' is not a valid MAC"), *iter); \
g_strfreev (list); \
g_slist_free (macaddr_blacklist); \
@@ -2338,7 +2444,7 @@ nmc_property_con_set_uuid (NMSetting *setting, const char *prop, const char *val
#endif
/* 'permissions' */
-/* define from libnm-util/nm-setting-connection.c */
+/* define from libnm-core/nm-setting-connection.c */
#define PERM_USER_PREFIX "user:"
static gboolean
@@ -2468,10 +2574,10 @@ nmc_property_connection_set_secondaries (NMSetting *setting, const char *prop, c
continue;
if (nm_utils_is_uuid (*iter)) {
- con = nmc_find_connection (nm_cli.system_connections,
+ con = nmc_find_connection (nm_cli.connections,
"uuid", *iter, NULL);
if (!con)
- printf (_("Warning: %s is not an UUID of any existing connection profile\n"), *iter);
+ g_print (_("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)) {
@@ -2481,7 +2587,7 @@ nmc_property_connection_set_secondaries (NMSetting *setting, const char *prop, c
}
}
} else {
- con = nmc_find_connection (nm_cli.system_connections,
+ con = nmc_find_connection (nm_cli.connections,
"id", *iter, NULL);
if (!con) {
g_set_error (error, 1, 0, _("'%s' is not a name of any exiting profile"), *iter);
@@ -2929,18 +3035,14 @@ nmc_property_bond_allowed_options (NMSetting *setting, const char *prop)
static gboolean
nmc_property_ib_set_mac (NMSetting *setting, const char *prop, const char *val, GError **error)
{
- GByteArray *array;
-
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
- array = nm_utils_hwaddr_atoba (val, ARPHRD_INFINIBAND);
- if (!array) {
+ if (!nm_utils_hwaddr_valid (val, INFINIBAND_ALEN)) {
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);
+ g_object_set (setting, prop, val, NULL);
return TRUE;
}
@@ -2981,6 +3083,41 @@ nmc_property_ib_set_p_key (NMSetting *setting, const char *prop, const char *val
return TRUE;
}
+/* --- IP4 / IP6 shared functions --- */
+static NMIPAddress *
+_parse_ip_address (int family, const char *address, GError **error)
+{
+ char *value = g_strdup (address);
+ NMIPAddress *ipaddr;
+
+ ipaddr = nmc_parse_and_build_address (family, g_strstrip (value), error);
+ g_free (value);
+ return ipaddr;
+}
+
+static NMIPRoute *
+_parse_ip_route (int family, const char *route, GError **error)
+{
+ char *value = g_strdup (route);
+ char **routev;
+ guint len;
+ NMIPRoute *iproute = 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;
+ }
+ iproute = nmc_parse_and_build_route (family, routev[0], routev[1], len >= 2 ? routev[2] : NULL, error);
+
+finish:
+ g_free (value);
+ g_strfreev (routev);
+ return iproute;
+}
+
/* --- NM_SETTING_IP4_CONFIG_SETTING_NAME property setter functions --- */
/* 'method' */
static const char *ipv4_valid_methods[] = {
@@ -3008,26 +3145,27 @@ DEFINE_ALLOWED_VAL_FUNC (nmc_property_ipv4_allowed_method, ipv4_valid_methods)
static gboolean
nmc_property_ipv4_set_dns (NMSetting *setting, const char *prop, const char *val, GError **error)
{
- char **strv = NULL, **iter;
+ char **strv = NULL, **iter, *addr;
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);
+ addr = g_strstrip (*iter);
+ if (inet_pton (AF_INET, addr, &ip4_addr) < 1) {
+ g_set_error (error, 1, 0, _("invalid IPv4 address '%s'"), addr);
g_strfreev (strv);
return FALSE;
}
- nm_setting_ip4_config_add_dns (NM_SETTING_IP4_CONFIG (setting), ip4_addr);
+ nm_setting_ip_config_add_dns (NM_SETTING_IP_CONFIG (setting), addr);
}
g_strfreev (strv);
return TRUE;
}
static gboolean
-_validate_and_remove_ipv4_dns (NMSettingIP4Config *setting,
+_validate_and_remove_ipv4_dns (NMSettingIPConfig *setting,
const char *dns,
GError **error)
{
@@ -3039,15 +3177,15 @@ _validate_and_remove_ipv4_dns (NMSettingIP4Config *setting,
return FALSE;
}
- ret = nm_setting_ip4_config_remove_dns_by_value (setting, ip4_addr);
+ ret = nm_setting_ip_config_remove_dns_by_value (setting, dns);
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,
+ NM_SETTING_IP_CONFIG,
+ nm_setting_ip_config_get_num_dns,
+ nm_setting_ip_config_remove_dns,
_validate_and_remove_ipv4_dns)
static const char *
@@ -3073,20 +3211,20 @@ nmc_property_ipv4_set_dns_search (NMSetting *setting, const char *prop, const ch
}
while (strv && strv[i])
- nm_setting_ip4_config_add_dns_search (NM_SETTING_IP4_CONFIG (setting), strv[i++]);
+ nm_setting_ip_config_add_dns_search (NM_SETTING_IP_CONFIG (setting), strv[i++]);
g_strfreev (strv);
return TRUE;
}
static gboolean
-_validate_and_remove_ipv4_dns_search (NMSettingIP4Config *setting,
+_validate_and_remove_ipv4_dns_search (NMSettingIPConfig *setting,
const char *dns_search,
GError **error)
{
gboolean ret;
- ret = nm_setting_ip4_config_remove_dns_search_by_value (setting, dns_search);
+ ret = nm_setting_ip_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'"),
@@ -3094,38 +3232,23 @@ _validate_and_remove_ipv4_dns_search (NMSettingIP4Config *setting,
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,
+ NM_SETTING_IP_CONFIG,
+ nm_setting_ip_config_get_num_dns_searches,
+ nm_setting_ip_config_remove_dns_search,
_validate_and_remove_ipv4_dns_search)
/* 'addresses' */
-static NMIP4Address *
+static NMIPAddress *
_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;
+ return _parse_ip_address (AF_INET, address, error);
}
static gboolean
nmc_property_ipv4_set_addresses (NMSetting *setting, const char *prop, const char *val, GError **error)
{
char **strv = NULL, **iter;
- NMIP4Address *ip4addr;
+ NMIPAddress *ip4addr;
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
@@ -3136,111 +3259,81 @@ nmc_property_ipv4_set_addresses (NMSetting *setting, const char *prop, const cha
g_strfreev (strv);
return FALSE;
}
- nm_setting_ip4_config_add_address (NM_SETTING_IP4_CONFIG (setting), ip4addr);
- nm_ip4_address_unref (ip4addr);
+ nm_setting_ip_config_add_address (NM_SETTING_IP_CONFIG (setting), ip4addr);
+ nm_ip_address_unref (ip4addr);
}
g_strfreev (strv);
return TRUE;
}
static gboolean
-_validate_and_remove_ipv4_address (NMSettingIP4Config *setting,
+_validate_and_remove_ipv4_address (NMSettingIPConfig *setting,
const char *address,
GError **error)
{
- NMIP4Address *ip4addr;
+ NMIPAddress *ip4addr;
gboolean ret;
ip4addr = _parse_ipv4_address (address, error);
if (!ip4addr)
return FALSE;
- ret = nm_setting_ip4_config_remove_address_by_value (setting, ip4addr);
+ ret = nm_setting_ip_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);
+ nm_ip_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,
+ NM_SETTING_IP_CONFIG,
+ nm_setting_ip_config_get_num_addresses,
+ nm_setting_ip_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"
+ " ip[/prefix], ip[/prefix],...\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");
+ "Example: 192.168.1.5/24, 10.0.0.11/24\n");
}
-/*
- * 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)
+/* 'gateway' */
+static gboolean
+nmc_property_ipv4_set_gateway (NMSetting *setting, const char *prop, const char *val, GError **error)
{
- GRegex *regex;
- GString *str;
- char **strv;
- int i;
+ NMIPAddress *ip4addr;
- str = g_string_sized_new (128);
- regex = g_regex_new ("\\{ ip = ([^/]+)/([^,]+), gw = ([^ ]+) \\}", 0, 0, NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
- 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 (strchr (val, '/')) {
+ g_set_error (error, 1, 0,
+ _("invalid gateway address '%s'"), val);
+ return FALSE;
}
- if (str->len > 0)
- g_string_truncate (str, str->len - 2);
-
- g_strfreev (strv);
- g_regex_unref (regex);
+ ip4addr = _parse_ipv4_address (val, error);
+ if (!ip4addr)
+ return FALSE;
- return g_string_free (str, FALSE);
+ g_object_set (setting, prop, val, NULL);
+ nm_ip_address_unref (ip4addr);
+ return TRUE;
}
/* 'routes' */
-static NMIP4Route *
+static NMIPRoute *
_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;
+ return _parse_ip_route (AF_INET, route, error);
}
static gboolean
nmc_property_ipv4_set_routes (NMSetting *setting, const char *prop, const char *val, GError **error)
{
char **strv = NULL, **iter;
- NMIP4Route *ip4route;
+ NMIPRoute *ip4route;
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
@@ -3251,35 +3344,35 @@ nmc_property_ipv4_set_routes (NMSetting *setting, const char *prop, const char *
g_strfreev (strv);
return FALSE;
}
- nm_setting_ip4_config_add_route (NM_SETTING_IP4_CONFIG (setting), ip4route);
- nm_ip4_route_unref (ip4route);
+ nm_setting_ip_config_add_route (NM_SETTING_IP_CONFIG (setting), ip4route);
+ nm_ip_route_unref (ip4route);
}
g_strfreev (strv);
return TRUE;
}
static gboolean
-_validate_and_remove_ipv4_route (NMSettingIP4Config *setting,
+_validate_and_remove_ipv4_route (NMSettingIPConfig *setting,
const char *route,
GError **error)
{
- NMIP4Route *ip4route;
+ NMIPRoute *ip4route;
gboolean ret;
ip4route = _parse_ipv4_route (route, error);
if (!ip4route)
return FALSE;
- ret = nm_setting_ip4_config_remove_route_by_value (setting, ip4route);
+ ret = nm_setting_ip_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);
+ nm_ip_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,
+ NM_SETTING_IP_CONFIG,
+ nm_setting_ip_config_get_num_routes,
+ nm_setting_ip_config_remove_route,
_validate_and_remove_ipv4_route)
static const char *
@@ -3289,7 +3382,7 @@ nmc_property_ipv4_describe_routes (NMSetting *setting, const char *prop)
" 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"
+ "Missing metric means default (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");
}
@@ -3353,26 +3446,27 @@ DEFINE_ALLOWED_VAL_FUNC (nmc_property_ipv6_allowed_method, ipv6_valid_methods)
static gboolean
nmc_property_ipv6_set_dns (NMSetting *setting, const char *prop, const char *val, GError **error)
{
- char **strv = NULL, **iter;
+ char **strv = NULL, **iter, *addr;
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);
+ addr = g_strstrip (*iter);
+ if (inet_pton (AF_INET6, addr, &ip6_addr) < 1) {
+ g_set_error (error, 1, 0, _("invalid IPv6 address '%s'"), addr);
g_strfreev (strv);
return FALSE;
}
- nm_setting_ip6_config_add_dns (NM_SETTING_IP6_CONFIG (setting), &ip6_addr);
+ nm_setting_ip_config_add_dns (NM_SETTING_IP_CONFIG (setting), addr);
}
g_strfreev (strv);
return TRUE;
}
static gboolean
-_validate_and_remove_ipv6_dns (NMSettingIP6Config *setting,
+_validate_and_remove_ipv6_dns (NMSettingIPConfig *setting,
const char *dns,
GError **error)
{
@@ -3384,15 +3478,15 @@ _validate_and_remove_ipv6_dns (NMSettingIP6Config *setting,
return FALSE;
}
- ret = nm_setting_ip6_config_remove_dns_by_value (setting, &ip6_addr);
+ ret = nm_setting_ip_config_remove_dns_by_value (setting, dns);
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,
+ NM_SETTING_IP_CONFIG,
+ nm_setting_ip_config_get_num_dns,
+ nm_setting_ip_config_remove_dns,
_validate_and_remove_ipv6_dns)
static const char *
@@ -3424,20 +3518,20 @@ nmc_property_ipv6_set_dns_search (NMSetting *setting, const char *prop, const ch
}
while (strv && strv[i])
- nm_setting_ip6_config_add_dns_search (NM_SETTING_IP6_CONFIG (setting), strv[i++]);
+ nm_setting_ip_config_add_dns_search (NM_SETTING_IP_CONFIG (setting), strv[i++]);
g_strfreev (strv);
return TRUE;
}
static gboolean
-_validate_and_remove_ipv6_dns_search (NMSettingIP6Config *setting,
+_validate_and_remove_ipv6_dns_search (NMSettingIPConfig *setting,
const char *dns_search,
GError **error)
{
gboolean ret;
- ret = nm_setting_ip6_config_remove_dns_search_by_value (setting, dns_search);
+ ret = nm_setting_ip_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'"),
@@ -3445,38 +3539,23 @@ _validate_and_remove_ipv6_dns_search (NMSettingIP6Config *setting,
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,
+ NM_SETTING_IP_CONFIG,
+ nm_setting_ip_config_get_num_dns_searches,
+ nm_setting_ip_config_remove_dns_search,
_validate_and_remove_ipv6_dns_search)
/* 'addresses' */
-static NMIP6Address *
+static NMIPAddress *
_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;
+ return _parse_ip_address (AF_INET6, address, error);
}
static gboolean
nmc_property_ipv6_set_addresses (NMSetting *setting, const char *prop, const char *val, GError **error)
{
char **strv = NULL, **iter;
- NMIP6Address *ip6addr;
+ NMIPAddress *ip6addr;
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
@@ -3487,75 +3566,80 @@ nmc_property_ipv6_set_addresses (NMSetting *setting, const char *prop, const cha
g_strfreev (strv);
return FALSE;
}
- nm_setting_ip6_config_add_address (NM_SETTING_IP6_CONFIG (setting), ip6addr);
- nm_ip6_address_unref (ip6addr);
+ nm_setting_ip_config_add_address (NM_SETTING_IP_CONFIG (setting), ip6addr);
+ nm_ip_address_unref (ip6addr);
}
g_strfreev (strv);
return TRUE;
}
static gboolean
-_validate_and_remove_ipv6_address (NMSettingIP6Config *setting,
+_validate_and_remove_ipv6_address (NMSettingIPConfig *setting,
const char *address,
GError **error)
{
- NMIP6Address *ip6addr;
+ NMIPAddress *ip6addr;
gboolean ret;
ip6addr = _parse_ipv6_address (address, error);
if (!ip6addr)
return FALSE;
- ret = nm_setting_ip6_config_remove_address_by_value (setting, ip6addr);
+ ret = nm_setting_ip_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);
+ nm_ip_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,
+ NM_SETTING_IP_CONFIG,
+ nm_setting_ip_config_get_num_addresses,
+ nm_setting_ip_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"
+ " ip[/prefix], ip[/prefix],...\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");
+ "Example: 2607:f0d0:1002:51::4/64, 1050:0:0:0:5:600:300c:326b\n");
}
-/* 'routes' */
-static NMIP6Route *
-_parse_ipv6_route (const char *route, GError **error)
+/* 'gateway' */
+static gboolean
+nmc_property_ipv6_set_gateway (NMSetting *setting, const char *prop, const char *val, GError **error)
{
- char *value = g_strdup (route);
- char **routev;
- guint len;
- NMIP6Route *ip6route = NULL;
+ NMIPAddress *ip6addr;
- 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;
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ if (strchr (val, '/')) {
+ g_set_error (error, 1, 0,
+ _("invalid gateway address '%s'"), val);
+ return FALSE;
}
- ip6route = nmc_parse_and_build_ip6_route (routev[0], routev[1], len >= 2 ? routev[2] : NULL, error);
+ ip6addr = _parse_ipv6_address (val, error);
+ if (!ip6addr)
+ return FALSE;
-finish:
- g_free (value);
- g_strfreev (routev);
- return ip6route;
+ g_object_set (setting, prop, val, NULL);
+ nm_ip_address_unref (ip6addr);
+ return TRUE;
+}
+
+/* 'routes' */
+static NMIPRoute *
+_parse_ipv6_route (const char *route, GError **error)
+{
+ return _parse_ip_route (AF_INET6, route, error);
}
static gboolean
nmc_property_ipv6_set_routes (NMSetting *setting, const char *prop, const char *val, GError **error)
{
char **strv = NULL, **iter;
- NMIP6Route *ip6route;
+ NMIPRoute *ip6route;
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
@@ -3566,35 +3650,35 @@ nmc_property_ipv6_set_routes (NMSetting *setting, const char *prop, const char *
g_strfreev (strv);
return FALSE;
}
- nm_setting_ip6_config_add_route (NM_SETTING_IP6_CONFIG (setting), ip6route);
- nm_ip6_route_unref (ip6route);
+ nm_setting_ip_config_add_route (NM_SETTING_IP_CONFIG (setting), ip6route);
+ nm_ip_route_unref (ip6route);
}
g_strfreev (strv);
return TRUE;
}
static gboolean
-_validate_and_remove_ipv6_route (NMSettingIP6Config *setting,
+_validate_and_remove_ipv6_route (NMSettingIPConfig *setting,
const char *route,
GError **error)
{
- NMIP6Route *ip6route;
+ NMIPRoute *ip6route;
gboolean ret;
ip6route = _parse_ipv6_route (route, error);
if (!ip6route)
return FALSE;
- ret = nm_setting_ip6_config_remove_route_by_value (setting, ip6route);
+ ret = nm_setting_ip_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);
+ nm_ip_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,
+ NM_SETTING_IP_CONFIG,
+ nm_setting_ip_config_get_num_routes,
+ nm_setting_ip_config_remove_route,
_validate_and_remove_ipv6_route)
static const char *
@@ -3604,7 +3688,7 @@ nmc_property_ipv6_describe_routes (NMSetting *setting, const char *prop)
" 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"
+ "Missing metric means default (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");
}
@@ -3650,17 +3734,33 @@ nmc_property_olpc_set_channel (NMSetting *setting, const char *prop, const char
/* --- NM_SETTING_SERIAL_SETTING_NAME property setter functions --- */
+static char *
+nmc_property_serial_get_parity (NMSetting *setting)
+{
+ NMSettingSerial *s_serial = NM_SETTING_SERIAL (setting);
+
+ switch (nm_setting_serial_get_parity (s_serial)) {
+ case NM_SETTING_SERIAL_PARITY_EVEN:
+ return g_strdup ("even");
+ case NM_SETTING_SERIAL_PARITY_ODD:
+ return g_strdup ("odd");
+ default:
+ case NM_SETTING_SERIAL_PARITY_NONE:
+ return g_strdup ("none");
+ }
+}
+
static gboolean
nmc_property_serial_set_parity (NMSetting *setting, const char *prop, const char *val, GError **error)
{
- char parity;
+ NMSettingSerialParity parity;
if (val[0] == 'E' || val[0] == 'e')
- parity = 'E';
+ parity = NM_SETTING_SERIAL_PARITY_EVEN;
else if (val[0] == 'O' || val[0] == 'o')
- parity = 'o';
+ parity = NM_SETTING_SERIAL_PARITY_ODD;
else if (val[0] == 'N' || val[0] == 'n')
- parity = 'n';
+ parity = NM_SETTING_SERIAL_PARITY_NONE;
else {
g_set_error (error, 1, 0, _("'%s' is not valid; use [e, o, n]"), val);
return FALSE;
@@ -3773,8 +3873,8 @@ nmc_property_vlan_remove_priority_map (NMSetting *setting,
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]);
+ g_print (_("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]);
@@ -3824,7 +3924,7 @@ nmc_property_vlan_remove_egress_priority_map (NMSetting *setting,
/* 'data' */
DEFINE_SETTER_OPTIONS (nmc_property_vpn_set_data,
NM_SETTING_VPN,
- NMSettingVPN,
+ NMSettingVpn,
nm_setting_vpn_add_data_item,
NULL,
NULL)
@@ -3835,7 +3935,7 @@ DEFINE_REMOVER_OPTION (nmc_property_vpn_remove_option_data,
/* 'secrets' */
DEFINE_SETTER_OPTIONS (nmc_property_vpn_set_secrets,
NM_SETTING_VPN,
- NMSettingVPN,
+ NMSettingVpn,
nm_setting_vpn_add_secret,
NULL,
NULL)
@@ -3888,7 +3988,7 @@ _validate_and_remove_wired_mac_blacklist_item (NMSettingWired *setting,
gboolean ret;
guint8 buf[32];
- if (!nm_utils_hwaddr_aton (mac, ARPHRD_ETHER, buf)) {
+ if (!nm_utils_hwaddr_aton (mac, buf, ETH_ALEN)) {
g_set_error (error, 1, 0, _("'%s' is not a valid MAC address"), mac);
return FALSE;
}
@@ -3908,32 +4008,27 @@ DEFINE_REMOVER_INDEX_OR_VALUE (nmc_property_wired_remove_mac_address_blacklist,
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;
+ char **strv = NULL;
+ int len;
- //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"),
+ len = g_strv_length (strv);
+ if (len != 2 && len != 3) {
+ g_set_error (error, 1, 0, _("'%s' is not valid; 2 or 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_object_set (setting, prop, strv, 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"
+ return _("Enter a list of subchannels (comma or space separated).\n\n"
"Example: 0.0.0e20 0.0.0e21 0.0.0e22\n");
}
@@ -4056,7 +4151,7 @@ _validate_and_remove_wifi_mac_blacklist_item (NMSettingWireless *setting,
gboolean ret;
guint8 buf[32];
- if (!nm_utils_hwaddr_aton (mac, ARPHRD_ETHER, buf)) {
+ if (!nm_utils_hwaddr_aton (mac, buf, ETH_ALEN)) {
g_set_error (error, 1, 0, _("'%s' is not a valid MAC address"), mac);
return FALSE;
}
@@ -4245,9 +4340,9 @@ nmc_property_wifi_set_wep_key (NMSetting *setting, const char *prop, const char
}
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));
+ g_print (_("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_print (_("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);
@@ -4286,17 +4381,17 @@ nmc_property_wifi_set_wep_key_type (NMSetting *setting, const char *prop, const
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));
+ g_print (_("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));
+ g_print (_("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));
+ g_print (_("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_print (_("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;
@@ -4456,7 +4551,7 @@ dcb_check_feature_enabled (NMSettingDcb *s_dcb, const char *flags_prop)
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_print (_("Warning: changes will have no effect until '%s' includes 1 (enabled)\n\n"), flags_prop);
}
static gboolean
@@ -4611,6 +4706,8 @@ nmc_add_prop_funcs (char *key,
/* concatenate setting name and property name */
#define GLUE(A,B) (g_strconcat ((NM_SETTING_##A##_SETTING_NAME),(NM_SETTING_##A##_##B), NULL))
+#define GLUE_IP(A,B) (g_strconcat ((NM_SETTING_IP##A##_CONFIG_SETTING_NAME),(NM_SETTING_IP_CONFIG_##B), NULL))
+
void
nmc_properties_init (void)
{
@@ -4763,7 +4860,7 @@ nmc_properties_init (void)
NULL);
nmc_add_prop_funcs (GLUE (802_1X, PASSWORD_FLAGS),
nmc_property_802_1X_get_password_flags,
- nmc_property_set_flags,
+ nmc_property_set_secret_flags,
NULL,
NULL,
NULL,
@@ -4777,7 +4874,7 @@ nmc_properties_init (void)
NULL);
nmc_add_prop_funcs (GLUE (802_1X, PASSWORD_RAW_FLAGS),
nmc_property_802_1X_get_password_raw_flags,
- nmc_property_set_flags,
+ nmc_property_set_secret_flags,
NULL,
NULL,
NULL,
@@ -4798,7 +4895,7 @@ nmc_properties_init (void)
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,
+ nmc_property_set_secret_flags,
NULL,
NULL,
NULL,
@@ -4819,7 +4916,7 @@ nmc_properties_init (void)
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,
+ nmc_property_set_secret_flags,
NULL,
NULL,
NULL,
@@ -4833,7 +4930,7 @@ nmc_properties_init (void)
NULL);
nmc_add_prop_funcs (GLUE (802_1X, PIN_FLAGS),
nmc_property_802_1X_get_pin_flags,
- nmc_property_set_flags,
+ nmc_property_set_secret_flags,
NULL,
NULL,
NULL,
@@ -4863,7 +4960,7 @@ nmc_properties_init (void)
NULL);
nmc_add_prop_funcs (GLUE (ADSL, PASSWORD_FLAGS),
nmc_property_adsl_get_password_flags,
- nmc_property_set_flags,
+ nmc_property_set_secret_flags,
NULL,
NULL,
NULL,
@@ -4914,13 +5011,6 @@ nmc_properties_init (void)
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,
@@ -4930,13 +5020,6 @@ nmc_properties_init (void)
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,
@@ -5034,7 +5117,7 @@ nmc_properties_init (void)
NULL);
nmc_add_prop_funcs (GLUE (CDMA, PASSWORD_FLAGS),
nmc_property_cdma_get_password_flags,
- nmc_property_set_flags,
+ nmc_property_set_secret_flags,
NULL,
NULL,
NULL,
@@ -5076,6 +5159,13 @@ nmc_properties_init (void)
NULL,
NULL,
NULL);
+ nmc_add_prop_funcs (GLUE (CONNECTION, AUTOCONNECT_PRIORITY),
+ nmc_property_connection_get_autoconnect_priority,
+ nmc_property_set_int,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
nmc_add_prop_funcs (GLUE (CONNECTION, TIMESTAMP),
nmc_property_connection_get_timestamp,
NULL, /* read-only */
@@ -5264,7 +5354,7 @@ nmc_properties_init (void)
NULL);
nmc_add_prop_funcs (GLUE (GSM, PASSWORD_FLAGS),
nmc_property_gsm_get_password_flags,
- nmc_property_set_flags,
+ nmc_property_set_secret_flags,
NULL,
NULL,
NULL,
@@ -5283,20 +5373,6 @@ nmc_properties_init (void)
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,
@@ -5306,7 +5382,7 @@ nmc_properties_init (void)
NULL);
nmc_add_prop_funcs (GLUE (GSM, PIN_FLAGS),
nmc_property_gsm_get_pin_flags,
- nmc_property_set_flags,
+ nmc_property_set_secret_flags,
NULL,
NULL,
NULL,
@@ -5357,49 +5433,63 @@ nmc_properties_init (void)
NULL);
/* Add editable properties for NM_SETTING_IP4_CONFIG_SETTING_NAME */
- nmc_add_prop_funcs (GLUE (IP4_CONFIG, METHOD),
+ nmc_add_prop_funcs (GLUE_IP (4, 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_add_prop_funcs (GLUE_IP (4, 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_add_prop_funcs (GLUE_IP (4, 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_add_prop_funcs (GLUE_IP (4, ADDRESSES),
+ nmc_property_ip_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),
+ NULL);
+ nmc_add_prop_funcs (GLUE_IP (4, GATEWAY),
+ nmc_property_ipv4_get_gateway,
+ nmc_property_ipv4_set_gateway,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE_IP (4, 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_add_prop_funcs (GLUE_IP (4, ROUTE_METRIC),
+ nmc_property_ipv4_get_route_metric,
+ nmc_property_set_int64,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE_IP (4, 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_add_prop_funcs (GLUE_IP (4, IGNORE_AUTO_DNS),
nmc_property_ipv4_get_ignore_auto_dns,
nmc_property_set_bool,
NULL,
@@ -5413,28 +5503,28 @@ nmc_properties_init (void)
NULL,
NULL,
NULL);
- nmc_add_prop_funcs (GLUE (IP4_CONFIG, DHCP_SEND_HOSTNAME),
+ nmc_add_prop_funcs (GLUE_IP (4, 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_add_prop_funcs (GLUE_IP (4, 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_add_prop_funcs (GLUE_IP (4, 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_add_prop_funcs (GLUE_IP (4, MAY_FAIL),
nmc_property_ipv4_get_may_fail,
nmc_property_set_bool,
NULL,
@@ -5443,63 +5533,77 @@ nmc_properties_init (void)
NULL);
/* Add editable properties for NM_SETTING_IP6_CONFIG_SETTING_NAME */
- nmc_add_prop_funcs (GLUE (IP6_CONFIG, METHOD),
+ nmc_add_prop_funcs (GLUE_IP (6, 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_add_prop_funcs (GLUE_IP (6, 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_add_prop_funcs (GLUE_IP (6, 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_add_prop_funcs (GLUE_IP (6, ADDRESSES),
+ nmc_property_ip_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),
+ NULL);
+ nmc_add_prop_funcs (GLUE_IP (6, GATEWAY),
+ nmc_property_ipv6_get_gateway,
+ nmc_property_ipv6_set_gateway,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE_IP (6, 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_add_prop_funcs (GLUE_IP (6, ROUTE_METRIC),
+ nmc_property_ipv6_get_route_metric,
+ nmc_property_set_int64,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE_IP (6, 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_add_prop_funcs (GLUE_IP (6, 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_add_prop_funcs (GLUE_IP (6, 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_add_prop_funcs (GLUE_IP (6, MAY_FAIL),
nmc_property_ipv6_get_may_fail,
nmc_property_set_bool,
NULL,
@@ -5513,7 +5617,14 @@ nmc_properties_init (void)
NULL,
NULL,
nmc_property_out2in_cut_paren);
- nmc_add_prop_funcs (GLUE (IP6_CONFIG, DHCP_HOSTNAME),
+ nmc_add_prop_funcs (GLUE_IP (6, DHCP_SEND_HOSTNAME),
+ nmc_property_ipv6_get_dhcp_send_hostname,
+ nmc_property_set_bool,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ nmc_add_prop_funcs (GLUE_IP (6, DHCP_HOSTNAME),
nmc_property_ipv6_get_dhcp_hostname,
nmc_property_set_string,
NULL,
@@ -5696,7 +5807,7 @@ nmc_properties_init (void)
NULL);
nmc_add_prop_funcs (GLUE (PPPOE, PASSWORD_FLAGS),
nmc_property_pppoe_get_password_flags,
- nmc_property_set_flags,
+ nmc_property_set_secret_flags,
NULL,
NULL,
NULL,
@@ -5740,13 +5851,6 @@ nmc_properties_init (void)
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,
@@ -5765,13 +5869,6 @@ nmc_properties_init (void)
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,
@@ -5837,6 +5934,13 @@ nmc_properties_init (void)
NULL,
NULL,
NULL);
+ nmc_add_prop_funcs (GLUE (VPN, PERSISTENT),
+ nmc_property_vpn_get_persistent,
+ nmc_property_set_bool,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
/* Add editable properties for NM_SETTING_WIMAX_SETTING_NAME */
nmc_add_prop_funcs (GLUE (WIMAX, NETWORK_NAME),
@@ -6110,7 +6214,7 @@ nmc_properties_init (void)
NULL);
nmc_add_prop_funcs (GLUE (WIRELESS_SECURITY, WEP_KEY_FLAGS),
nmc_property_wifi_sec_get_wep_key_flags,
- nmc_property_set_flags,
+ nmc_property_set_secret_flags,
NULL,
NULL,
NULL,
@@ -6131,7 +6235,7 @@ nmc_properties_init (void)
NULL);
nmc_add_prop_funcs (GLUE (WIRELESS_SECURITY, PSK_FLAGS),
nmc_property_wifi_sec_get_psk_flags,
- nmc_property_set_flags,
+ nmc_property_set_secret_flags,
NULL,
NULL,
NULL,
@@ -6145,7 +6249,7 @@ nmc_properties_init (void)
NULL);
nmc_add_prop_funcs (GLUE (WIRELESS_SECURITY, LEAP_PASSWORD_FLAGS),
nmc_property_wifi_sec_get_leap_password_flags,
- nmc_property_set_flags,
+ nmc_property_set_secret_flags,
NULL,
NULL,
NULL,
@@ -6367,10 +6471,16 @@ nmc_setting_get_property_allowed_values (NMSetting *setting, const char *prop)
return NULL;
}
+#if defined (BUILD_SETTING_DOCS) || defined (HAVE_SETTING_DOCS)
+#include "settings-docs.c"
+#else
+#define nmc_setting_get_property_doc(setting, prop) _("(not available)")
+#endif
+
/*
* Create a description string for a property.
*
- * It returns a description got from properties blurb, concatenated with
+ * It returns a description got from property documentation, concatenated with
* nmcli specific description (if it exists).
*
* Returns: property description or NULL on failure. The caller must free the string.
@@ -6378,9 +6488,8 @@ nmc_setting_get_property_allowed_values (NMSetting *setting, const char *prop)
char *
nmc_setting_get_property_desc (NMSetting *setting, const char *prop)
{
- GParamSpec *spec;
const NmcPropertyFuncs *item;
- const char *setting_desc = "";
+ const char *setting_desc = NULL;
const char *setting_desc_title = "";
const char *nmcli_desc = NULL;
const char *nmcli_desc_title = "";
@@ -6388,11 +6497,9 @@ nmc_setting_get_property_desc (NMSetting *setting, const char *prop)
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 = nmc_setting_get_property_doc (setting, prop);
+ if (setting_desc)
setting_desc_title = _("[NM property description]");
- }
item = nmc_properties_find (nm_setting_get_name (setting), prop);
if (item && item->describe_func) {
@@ -6402,7 +6509,8 @@ nmc_setting_get_property_desc (NMSetting *setting, const char *prop)
}
return g_strdup_printf ("%s\n%s\n%s%s%s%s",
- setting_desc_title, setting_desc,
+ setting_desc_title,
+ setting_desc ? setting_desc : "",
nmcli_nl, nmcli_desc_title, nmcli_nl,
nmcli_desc ? nmcli_desc : "");
}
@@ -6444,8 +6552,11 @@ nmc_property_set_gvalue (NMSetting *setting, const char *prop, GValue *value)
/*----------------------------------------------------------------------------*/
+#define GET_SECRET(show, setting, func) \
+ (show ? func (setting) : g_strdup (_("<hidden>")))
+
static gboolean
-setting_connection_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+setting_connection_details (NMSetting *setting, NmCli *nmc, const char *one_prop, gboolean secrets)
{
NMSettingConnection *s_con = NM_SETTING_CONNECTION (setting);
NmcOutputField *tmpl, *arr;
@@ -6467,14 +6578,15 @@ setting_connection_details (NMSetting *setting, NmCli *nmc, const char *one_prop
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));
+ set_val_str (arr, 6, nmc_property_connection_get_autoconnect_priority (setting));
+ set_val_str (arr, 7, nmc_property_connection_get_timestamp (setting));
+ set_val_str (arr, 8, nmc_property_connection_get_read_only (setting));
+ set_val_str (arr, 9, nmc_property_connection_get_permissions (setting));
+ set_val_str (arr, 10, nmc_property_connection_get_zone (setting));
+ set_val_str (arr, 11, nmc_property_connection_get_master (setting));
+ set_val_str (arr, 12, nmc_property_connection_get_slave_type (setting));
+ set_val_str (arr, 13, nmc_property_connection_get_secondaries (setting));
+ set_val_str (arr, 14, nmc_property_connection_get_gateway_ping_timeout (setting));
g_ptr_array_add (nmc->output_data, arr);
print_data (nmc); /* Print all data */
@@ -6483,7 +6595,7 @@ setting_connection_details (NMSetting *setting, NmCli *nmc, const char *one_prop
}
static gboolean
-setting_wired_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+setting_wired_details (NMSetting *setting, NmCli *nmc, const char *one_prop, gboolean secrets)
{
NMSettingWired *s_wired = NM_SETTING_WIRED (setting);
NmcOutputField *tmpl, *arr;
@@ -6519,7 +6631,7 @@ setting_wired_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
}
static gboolean
-setting_802_1X_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+setting_802_1X_details (NMSetting *setting, NmCli *nmc, const char *one_prop, gboolean secrets)
{
NMSetting8021x *s_8021x = NM_SETTING_802_1X (setting);
NmcOutputField *tmpl, *arr;
@@ -6555,17 +6667,17 @@ setting_802_1X_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
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, 20, GET_SECRET (secrets, setting, nmc_property_802_1X_get_password));
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, 22, GET_SECRET (secrets, setting, nmc_property_802_1X_get_password_raw));
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, 25, GET_SECRET (secrets, setting, nmc_property_802_1X_get_private_key_password));
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, 28, GET_SECRET (secrets, setting, nmc_property_802_1X_get_phase2_private_key_password));
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, 30, GET_SECRET (secrets, setting, nmc_property_802_1X_get_pin));
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);
@@ -6576,7 +6688,7 @@ setting_802_1X_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
}
static gboolean
-setting_wireless_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+setting_wireless_details (NMSetting *setting, NmCli *nmc, const char *one_prop, gboolean secrets)
{
NMSettingWireless *s_wireless = NM_SETTING_WIRELESS (setting);
NmcOutputField *tmpl, *arr;
@@ -6614,7 +6726,7 @@ setting_wireless_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
}
static gboolean
-setting_wireless_security_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+setting_wireless_security_details (NMSetting *setting, NmCli *nmc, const char *one_prop, gboolean secrets)
{
NMSettingWirelessSecurity *s_wireless_sec = NM_SETTING_WIRELESS_SECURITY (setting);
NmcOutputField *tmpl, *arr;
@@ -6638,15 +6750,15 @@ setting_wireless_security_details (NMSetting *setting, NmCli *nmc, const char *o
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, 8, GET_SECRET (secrets, setting, nmc_property_wifi_sec_get_wep_key0));
+ set_val_str (arr, 9, GET_SECRET (secrets, setting, nmc_property_wifi_sec_get_wep_key1));
+ set_val_str (arr, 10, GET_SECRET (secrets, setting, nmc_property_wifi_sec_get_wep_key2));
+ set_val_str (arr, 11, GET_SECRET (secrets, setting, nmc_property_wifi_sec_get_wep_key3));
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, 14, GET_SECRET (secrets, setting, nmc_property_wifi_sec_get_psk));
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, 16, GET_SECRET (secrets, setting, nmc_property_wifi_sec_get_leap_password));
set_val_str (arr, 17, nmc_property_wifi_sec_get_leap_password_flags (setting));
g_ptr_array_add (nmc->output_data, arr);
@@ -6656,9 +6768,9 @@ setting_wireless_security_details (NMSetting *setting, NmCli *nmc, const char *o
}
static gboolean
-setting_ip4_config_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+setting_ip4_config_details (NMSetting *setting, NmCli *nmc, const char *one_prop, gboolean secrets)
{
- NMSettingIP4Config *s_ip4 = NM_SETTING_IP4_CONFIG (setting);
+ NMSettingIPConfig *s_ip4 = NM_SETTING_IP_CONFIG (setting);
NmcOutputField *tmpl, *arr;
size_t tmpl_len;
@@ -6676,15 +6788,17 @@ setting_ip4_config_details (NMSetting *setting, NmCli *nmc, const char *one_prop
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));
+ set_val_str (arr, 4, nmc_property_ip_get_addresses (setting));
+ set_val_str (arr, 5, nmc_property_ipv4_get_gateway (setting));
+ set_val_str (arr, 6, nmc_property_ipv4_get_routes (setting));
+ set_val_str (arr, 7, nmc_property_ipv4_get_route_metric (setting));
+ set_val_str (arr, 8, nmc_property_ipv4_get_ignore_auto_routes (setting));
+ set_val_str (arr, 9, nmc_property_ipv4_get_ignore_auto_dns (setting));
+ set_val_str (arr, 10, nmc_property_ipv4_get_dhcp_client_id (setting));
+ set_val_str (arr, 11, nmc_property_ipv4_get_dhcp_send_hostname (setting));
+ set_val_str (arr, 12, nmc_property_ipv4_get_dhcp_hostname (setting));
+ set_val_str (arr, 13, nmc_property_ipv4_get_never_default (setting));
+ set_val_str (arr, 14, nmc_property_ipv4_get_may_fail (setting));
g_ptr_array_add (nmc->output_data, arr);
print_data (nmc); /* Print all data */
@@ -6693,9 +6807,9 @@ setting_ip4_config_details (NMSetting *setting, NmCli *nmc, const char *one_prop
}
static gboolean
-setting_ip6_config_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+setting_ip6_config_details (NMSetting *setting, NmCli *nmc, const char *one_prop, gboolean secrets)
{
- NMSettingIP6Config *s_ip6 = NM_SETTING_IP6_CONFIG (setting);
+ NMSettingIPConfig *s_ip6 = NM_SETTING_IP_CONFIG (setting);
NmcOutputField *tmpl, *arr;
size_t tmpl_len;
@@ -6713,14 +6827,17 @@ setting_ip6_config_details (NMSetting *setting, NmCli *nmc, const char *one_prop
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));
+ set_val_str (arr, 4, nmc_property_ip_get_addresses (setting));
+ set_val_str (arr, 5, nmc_property_ipv6_get_gateway (setting));
+ set_val_str (arr, 6, nmc_property_ipv6_get_routes (setting));
+ set_val_str (arr, 7, nmc_property_ipv6_get_route_metric (setting));
+ set_val_str (arr, 8, nmc_property_ipv6_get_ignore_auto_routes (setting));
+ set_val_str (arr, 9, nmc_property_ipv6_get_ignore_auto_dns (setting));
+ set_val_str (arr, 10, nmc_property_ipv6_get_never_default (setting));
+ set_val_str (arr, 11, nmc_property_ipv6_get_may_fail (setting));
+ set_val_str (arr, 12, nmc_property_ipv6_get_ip6_privacy (setting));
+ set_val_str (arr, 13, nmc_property_ipv6_get_dhcp_send_hostname (setting));
+ set_val_str (arr, 14, nmc_property_ipv6_get_dhcp_hostname (setting));
g_ptr_array_add (nmc->output_data, arr);
print_data (nmc); /* Print all data */
@@ -6729,7 +6846,7 @@ setting_ip6_config_details (NMSetting *setting, NmCli *nmc, const char *one_prop
}
static gboolean
-setting_serial_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+setting_serial_details (NMSetting *setting, NmCli *nmc, const char *one_prop, gboolean secrets)
{
NMSettingSerial *s_serial = NM_SETTING_SERIAL (setting);
NmcOutputField *tmpl, *arr;
@@ -6759,9 +6876,9 @@ setting_serial_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
}
static gboolean
-setting_ppp_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+setting_ppp_details (NMSetting *setting, NmCli *nmc, const char *one_prop, gboolean secrets)
{
- NMSettingPPP *s_ppp = NM_SETTING_PPP (setting);
+ NMSettingPpp *s_ppp = NM_SETTING_PPP (setting);
NmcOutputField *tmpl, *arr;
size_t tmpl_len;
@@ -6802,9 +6919,9 @@ setting_ppp_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
}
static gboolean
-setting_pppoe_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+setting_pppoe_details (NMSetting *setting, NmCli *nmc, const char *one_prop, gboolean secrets)
{
- NMSettingPPPOE *s_pppoe = NM_SETTING_PPPOE (setting);
+ NMSettingPppoe *s_pppoe = NM_SETTING_PPPOE (setting);
NmcOutputField *tmpl, *arr;
size_t tmpl_len;
@@ -6821,7 +6938,7 @@ setting_pppoe_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
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, 3, GET_SECRET (secrets, setting, nmc_property_pppoe_get_password));
set_val_str (arr, 4, nmc_property_pppoe_get_password_flags (setting));
g_ptr_array_add (nmc->output_data, arr);
@@ -6831,7 +6948,7 @@ setting_pppoe_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
}
static gboolean
-setting_gsm_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+setting_gsm_details (NMSetting *setting, NmCli *nmc, const char *one_prop, gboolean secrets)
{
NMSettingGsm *s_gsm = NM_SETTING_GSM (setting);
NmcOutputField *tmpl, *arr;
@@ -6850,15 +6967,13 @@ setting_gsm_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
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, 3, GET_SECRET (secrets, setting, nmc_property_gsm_get_password));
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));
+ set_val_str (arr, 7, GET_SECRET (secrets, setting, nmc_property_gsm_get_pin));
+ set_val_str (arr, 8, nmc_property_gsm_get_pin_flags (setting));
+ set_val_str (arr, 9, nmc_property_gsm_get_home_only (setting));
g_ptr_array_add (nmc->output_data, arr);
print_data (nmc); /* Print all data */
@@ -6867,7 +6982,7 @@ setting_gsm_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
}
static gboolean
-setting_cdma_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+setting_cdma_details (NMSetting *setting, NmCli *nmc, const char *one_prop, gboolean secrets)
{
NMSettingCdma *s_cdma = NM_SETTING_CDMA (setting);
NmcOutputField *tmpl, *arr;
@@ -6886,7 +7001,7 @@ setting_cdma_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
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, 3, GET_SECRET (secrets, setting, nmc_property_cdma_get_password));
set_val_str (arr, 4, nmc_property_cdma_get_password_flags (setting));
g_ptr_array_add (nmc->output_data, arr);
@@ -6896,7 +7011,7 @@ setting_cdma_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
}
static gboolean
-setting_bluetooth_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+setting_bluetooth_details (NMSetting *setting, NmCli *nmc, const char *one_prop, gboolean secrets)
{
NMSettingBluetooth *s_bluetooth = NM_SETTING_BLUETOOTH (setting);
NmcOutputField *tmpl, *arr;
@@ -6923,7 +7038,7 @@ setting_bluetooth_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
}
static gboolean
-setting_olpc_mesh_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+setting_olpc_mesh_details (NMSetting *setting, NmCli *nmc, const char *one_prop, gboolean secrets)
{
NMSettingOlpcMesh *s_olpc_mesh = NM_SETTING_OLPC_MESH (setting);
NmcOutputField *tmpl, *arr;
@@ -6951,9 +7066,9 @@ setting_olpc_mesh_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
}
static gboolean
-setting_vpn_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+setting_vpn_details (NMSetting *setting, NmCli *nmc, const char *one_prop, gboolean secrets)
{
- NMSettingVPN *s_vpn = NM_SETTING_VPN (setting);
+ NMSettingVpn *s_vpn = NM_SETTING_VPN (setting);
NmcOutputField *tmpl, *arr;
size_t tmpl_len;
@@ -6971,7 +7086,8 @@ setting_vpn_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
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));
+ set_val_str (arr, 4, GET_SECRET (secrets, setting, nmc_property_vpn_get_secrets));
+ set_val_str (arr, 5, nmc_property_vpn_get_persistent (setting));
g_ptr_array_add (nmc->output_data, arr);
print_data (nmc); /* Print all data */
@@ -6980,7 +7096,7 @@ setting_vpn_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
}
static gboolean
-setting_wimax_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+setting_wimax_details (NMSetting *setting, NmCli *nmc, const char *one_prop, gboolean secrets)
{
NMSettingWimax *s_wimax = NM_SETTING_WIMAX (setting);
NmcOutputField *tmpl, *arr;
@@ -7007,7 +7123,7 @@ setting_wimax_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
}
static gboolean
-setting_infiniband_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+setting_infiniband_details (NMSetting *setting, NmCli *nmc, const char *one_prop, gboolean secrets)
{
NMSettingInfiniband *s_infiniband = NM_SETTING_INFINIBAND (setting);
NmcOutputField *tmpl, *arr;
@@ -7037,7 +7153,7 @@ setting_infiniband_details (NMSetting *setting, NmCli *nmc, const char *one_prop
}
static gboolean
-setting_bond_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+setting_bond_details (NMSetting *setting, NmCli *nmc, const char *one_prop, gboolean secrets)
{
NMSettingBond *s_bond = NM_SETTING_BOND (setting);
NmcOutputField *tmpl, *arr;
@@ -7054,8 +7170,7 @@ setting_bond_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
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));
+ set_val_str (arr, 1, nmc_property_bond_get_options (setting));
g_ptr_array_add (nmc->output_data, arr);
print_data (nmc); /* Print all data */
@@ -7064,7 +7179,7 @@ setting_bond_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
}
static gboolean
-setting_vlan_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+setting_vlan_details (NMSetting *setting, NmCli *nmc, const char *one_prop, gboolean secrets)
{
NMSettingVlan *s_vlan = NM_SETTING_VLAN (setting);
NmcOutputField *tmpl, *arr;
@@ -7081,12 +7196,11 @@ setting_vlan_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
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));
+ set_val_str (arr, 1, nmc_property_vlan_get_parent (setting));
+ set_val_str (arr, 2, nmc_property_vlan_get_id (setting));
+ set_val_str (arr, 3, nmc_property_vlan_get_flags (setting));
+ set_val_str (arr, 4, nmc_property_vlan_get_ingress_priority_map (setting));
+ set_val_str (arr, 5, nmc_property_vlan_get_egress_priority_map (setting));
g_ptr_array_add (nmc->output_data, arr);
print_data (nmc); /* Print all data */
@@ -7095,7 +7209,7 @@ setting_vlan_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
}
static gboolean
-setting_adsl_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+setting_adsl_details (NMSetting *setting, NmCli *nmc, const char *one_prop, gboolean secrets)
{
NMSettingAdsl *s_adsl = NM_SETTING_ADSL (setting);
NmcOutputField *tmpl, *arr;
@@ -7113,7 +7227,7 @@ setting_adsl_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
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, 2, GET_SECRET (secrets, setting, nmc_property_adsl_get_password));
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));
@@ -7127,7 +7241,7 @@ setting_adsl_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
}
static gboolean
-setting_bridge_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+setting_bridge_details (NMSetting *setting, NmCli *nmc, const char *one_prop, gboolean secrets)
{
NMSettingBridge *s_bridge = NM_SETTING_BRIDGE (setting);
NmcOutputField *tmpl, *arr;
@@ -7144,14 +7258,13 @@ setting_bridge_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
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));
+ set_val_str (arr, 1, nmc_property_bridge_get_mac_address (setting));
+ set_val_str (arr, 2, nmc_property_bridge_get_stp (setting));
+ set_val_str (arr, 3, nmc_property_bridge_get_priority (setting));
+ set_val_str (arr, 4, nmc_property_bridge_get_forward_delay (setting));
+ set_val_str (arr, 5, nmc_property_bridge_get_hello_time (setting));
+ set_val_str (arr, 6, nmc_property_bridge_get_max_age (setting));
+ set_val_str (arr, 7, nmc_property_bridge_get_ageing_time (setting));
g_ptr_array_add (nmc->output_data, arr);
print_data (nmc); /* Print all data */
@@ -7160,7 +7273,7 @@ setting_bridge_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
}
static gboolean
-setting_bridge_port_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+setting_bridge_port_details (NMSetting *setting, NmCli *nmc, const char *one_prop, gboolean secrets)
{
NMSettingBridgePort *s_bridge_port = NM_SETTING_BRIDGE_PORT (setting);
NmcOutputField *tmpl, *arr;
@@ -7188,7 +7301,7 @@ setting_bridge_port_details (NMSetting *setting, NmCli *nmc, const char *one_pro
}
static gboolean
-setting_team_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+setting_team_details (NMSetting *setting, NmCli *nmc, const char *one_prop, gboolean secrets)
{
NMSettingTeam *s_team = NM_SETTING_TEAM (setting);
NmcOutputField *tmpl, *arr;
@@ -7205,8 +7318,7 @@ setting_team_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
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));
+ set_val_str (arr, 1, nmc_property_team_get_config (setting));
g_ptr_array_add (nmc->output_data, arr);
print_data (nmc); /* Print all data */
@@ -7215,7 +7327,7 @@ setting_team_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
}
static gboolean
-setting_team_port_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+setting_team_port_details (NMSetting *setting, NmCli *nmc, const char *one_prop, gboolean secrets)
{
NMSettingTeamPort *s_team_port = NM_SETTING_TEAM_PORT (setting);
NmcOutputField *tmpl, *arr;
@@ -7241,7 +7353,7 @@ setting_team_port_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
}
static gboolean
-setting_dcb_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+setting_dcb_details (NMSetting *setting, NmCli *nmc, const char *one_prop, gboolean secrets)
{
NMSettingDcb *s_dcb = NM_SETTING_DCB (setting);
NmcOutputField *tmpl, *arr;
@@ -7282,7 +7394,7 @@ setting_dcb_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
typedef struct {
const char *sname;
- gboolean (*func) (NMSetting *setting, NmCli *nmc, const char *one_prop);
+ gboolean (*func) (NMSetting *setting, NmCli *nmc, const char *one_prop, gboolean secrets);
} SettingDetails;
static const SettingDetails detail_printers[] = {
@@ -7315,15 +7427,15 @@ static const SettingDetails detail_printers[] = {
};
gboolean
-setting_details (NMSetting *setting, NmCli *nmc, const char *one_prop)
+setting_details (NMSetting *setting, NmCli *nmc, const char *one_prop, gboolean secrets)
{
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);
+ if (nm_setting_lookup_type (iter->sname) == G_OBJECT_TYPE (setting))
+ return iter->func (setting, nmc, one_prop, secrets);
iter++;
}
diff --git a/cli/src/settings.h b/clients/cli/settings.h
index 709c8977f..3c4c814fd 100644
--- a/cli/src/settings.h
+++ b/clients/cli/settings.h
@@ -14,36 +14,12 @@
* 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 - 2013 Red Hat, Inc.
+ * Copyright 2010 - 2014 Red Hat, Inc.
*/
#ifndef NMC_SETTINGS_H
#define NMC_SETTINGS_H
-#include <nm-setting-connection.h>
-#include <nm-setting-wired.h>
-#include <nm-setting-adsl.h>
-#include <nm-setting-8021x.h>
-#include <nm-setting-wireless.h>
-#include <nm-setting-wireless-security.h>
-#include <nm-setting-ip4-config.h>
-#include <nm-setting-ip6-config.h>
-#include <nm-setting-serial.h>
-#include <nm-setting-ppp.h>
-#include <nm-setting-pppoe.h>
-#include <nm-setting-gsm.h>
-#include <nm-setting-cdma.h>
-#include <nm-setting-bluetooth.h>
-#include <nm-setting-olpc-mesh.h>
-#include <nm-setting-vpn.h>
-#include <nm-setting-wimax.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-setting-dcb.h>
-
#include "nmcli.h"
#include "utils.h"
@@ -54,9 +30,10 @@ 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_ip4_connect_handlers (NMSettingIPConfig *setting);
+void nmc_setting_ip6_connect_handlers (NMSettingIPConfig *setting);
void nmc_setting_wireless_connect_handlers (NMSettingWireless *setting);
+void nmc_setting_connection_connect_handlers (NMSettingConnection *setting, NMConnection *connection);
char **nmc_setting_get_valid_properties (NMSetting *setting);
char *nmc_setting_get_property_desc (NMSetting *setting, const char *prop);
@@ -84,6 +61,6 @@ 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);
+gboolean setting_details (NMSetting *setting, NmCli *nmc, const char *one_prop, gboolean secrets);
#endif /* NMC_SETTINGS_H */
diff --git a/cli/src/utils.c b/clients/cli/utils.c
index 9b513f5a0..60cf9f93f 100644
--- a/cli/src/utils.c
+++ b/clients/cli/utils.c
@@ -31,7 +31,6 @@
#include <glib.h>
#include <glib/gi18n.h>
-#include <dbus/dbus-glib-bindings.h>
#include "utils.h"
@@ -249,6 +248,9 @@ nmc_ip6_address_as_string (const struct in6_addr *ip, GError **error)
void
nmc_terminal_erase_line (void)
{
+ /* We intentionally use printf(), not g_print() here, to ensure that
+ * GLib doesn't mistakenly try to convert the string.
+ */
printf ("\33[2K\r");
fflush (stdout);
}
@@ -265,7 +267,7 @@ nmc_terminal_show_progress (const char *str)
const char slashes[4] = {'|', '/', '-', '\\'};
nmc_terminal_erase_line ();
- printf ("%c %s", slashes[idx++], str ? str : "");
+ g_print ("%c %s", slashes[idx++], str ? str : "");
fflush (stdout);
if (idx == 4)
idx = 0;
@@ -433,7 +435,7 @@ nmc_get_user_input (const char *ask_str)
size_t line_ln = 0;
ssize_t num;
- fprintf (stdout, "%s", ask_str);
+ g_print ("%s", ask_str);
num = getline (&line, &line_ln, stdin);
/* Remove newline from the string */
@@ -508,13 +510,10 @@ nmc_string_is_valid (const char *input, const char **allowed, GError **error)
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);
- }
+ 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, valid_vals);
g_free (valid_vals);
}
@@ -539,6 +538,31 @@ nmc_util_strv_to_slist (char **strv)
}
/*
+ * Convert string array (char **) to description string in the form of:
+ * "[string1, string2, ]"
+ *
+ * Returns: a newly allocated string. Caller must free it with g_free().
+ */
+char *
+nmc_util_strv_for_display (const char **strv)
+{
+ GString *result;
+ guint i = 0;
+
+ result = g_string_sized_new (150);
+ g_string_append_c (result, '[');
+ while (strv && strv[i]) {
+ if (result->len > 1)
+ g_string_append (result, ", ");
+ g_string_append (result, strv[i]);
+ i++;
+ }
+ g_string_append_c (result, ']');
+
+ return g_string_free (result, FALSE);
+}
+
+/*
* Wrapper function for g_strsplit_set() that removes empty strings
* from the vector as they are not useful in most cases.
*/
@@ -700,9 +724,9 @@ parse_output_fields (const char *fields_str,
break;
}
}
+ if (found)
+ break;
}
- if (found)
- break;
}
if (found) {
/* Add index to array, and field name (or NULL) to group_fields array */
@@ -896,9 +920,9 @@ print_required_fields (NmCli *nmc, const NmcOutputField field_values[])
line = g_strnfill (ML_HEADER_WIDTH, '=');
width1 = strlen (fields.header_name);
width2 = nmc_string_screen_width (fields.header_name, NULL);
- printf ("%s\n", line);
- printf ("%*s\n", (table_width + width2)/2 + width1 - width2, fields.header_name);
- printf ("%s\n", line);
+ g_print ("%s\n", line);
+ g_print ("%*s\n", (table_width + width2)/2 + width1 - width2, fields.header_name);
+ g_print ("%s\n", line);
g_free (line);
}
@@ -928,8 +952,8 @@ print_required_fields (NmCli *nmc, const NmcOutputField field_values[])
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_print ("%-*s%s\n", terse ? 0 : ML_VALUE_INDENT+width1-width2, tmp,
+ *p ? *p : not_set_str);
g_free (tmp);
}
} else {
@@ -943,14 +967,14 @@ print_required_fields (NmCli *nmc, const NmcOutputField field_values[])
_(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_print ("%-*s%s\n", terse ? 0 : ML_VALUE_INDENT+width1-width2, tmp,
+ val ? val : not_set_str);
g_free (tmp);
}
}
if (pretty) {
line = g_strnfill (ML_HEADER_WIDTH, '-');
- printf ("%s\n", line);
+ g_print ("%s\n", line);
g_free (line);
}
}
@@ -998,9 +1022,9 @@ print_required_fields (NmCli *nmc, const NmcOutputField field_values[])
line = g_strnfill (table_width, '=');
width1 = strlen (fields.header_name);
width2 = nmc_string_screen_width (fields.header_name, NULL);
- printf ("%s\n", line);
- printf ("%*s\n", (table_width + width2)/2 + width1 - width2, fields.header_name);
- printf ("%s\n", line);
+ g_print ("%s\n", line);
+ g_print ("%*s\n", (table_width + width2)/2 + width1 - width2, fields.header_name);
+ g_print ("%s\n", line);
g_free (line);
}
@@ -1012,14 +1036,14 @@ print_required_fields (NmCli *nmc, const NmcOutputField field_values[])
g_string_prepend (str, indent_str);
g_free (indent_str);
}
- printf ("%s\n", str->str);
+ g_print ("%s\n", str->str);
}
/* Print horizontal separator */
if (!main_header_only && field_names && pretty) {
if (str->len > 0) {
line = g_strnfill (table_width, '-');
- printf ("%s\n", line);
+ g_print ("%s\n", line);
g_free (line);
}
}
@@ -1108,9 +1132,8 @@ nmc_versions_match (NmCli *nmc)
if (dot) {
dot = strchr (dot + 1, '.');
if (dot && !strncmp (nm_ver, VERSION, dot-nm_ver)) {
- fprintf(stderr,
- _("Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --nocheck to suppress the warning.\n"),
- VERSION, nm_ver);
+ g_printerr (_("Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --nocheck to suppress the warning.\n"),
+ VERSION, nm_ver);
match = TRUE;
}
}
diff --git a/cli/src/utils.h b/clients/cli/utils.h
index e92952f33..fc43b0ed9 100644
--- a/cli/src/utils.h
+++ b/clients/cli/utils.h
@@ -14,14 +14,12 @@
* 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 - 2014 Red Hat, Inc.
+ * Copyright 2010 - 2014 Red Hat, Inc.
*/
#ifndef NMC_UTILS_H
#define NMC_UTILS_H
-#include <glib.h>
-
#include "nmcli.h"
/* === Types === */
@@ -74,6 +72,7 @@ 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_util_strv_for_display (const 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, char *value);
diff --git a/clients/common/nm-polkit-listener.c b/clients/common/nm-polkit-listener.c
new file mode 100644
index 000000000..82df1b2de
--- /dev/null
+++ b/clients/common/nm-polkit-listener.c
@@ -0,0 +1,415 @@
+/* -*- 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 2014 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nm-polkit-listener
+ * @short_description: A polkit agent listener
+ *
+ * #NMPolkitListener is the polkit agent listener used by nmcli and nmtui.
+ * http://www.freedesktop.org/software/polkit/docs/latest/index.html
+ *
+ * For an example polkit agent you can look at polkit source tree:
+ * http://cgit.freedesktop.org/polkit/tree/src/polkitagent/polkitagenttextlistener.c
+ * http://cgit.freedesktop.org/polkit/tree/src/programs/pkttyagent.c
+ * or LXDE polkit agent:
+ * http://git.lxde.org/gitweb/?p=debian/lxpolkit.git;a=blob;f=src/lxpolkit-listener.c
+ * https://github.com/lxde/lxqt-policykit/tree/master/src
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <glib.h>
+#include <glib/gi18n-lib.h>
+
+#include "nm-glib-compat.h"
+#include "nm-polkit-listener.h"
+
+G_DEFINE_TYPE (NMPolkitListener, nm_polkit_listener, POLKIT_AGENT_TYPE_LISTENER)
+
+#define NM_POLKIT_LISTENER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_POLKIT_LISTENER, NMPolkitListenerPrivate))
+
+typedef struct {
+ gpointer reg_handle; /* handle of polkit agent registration */
+
+ GSimpleAsyncResult *simple;
+ PolkitAgentSession *active_session;
+ gulong cancel_id;
+ GCancellable *cancellable;
+
+ char *action_id;
+ char *message;
+ char *icon_name;
+ char *identity;
+
+ /* callbacks */
+ NMPolkitListenerOnRequestFunc on_request_callback;
+ NMPolkitListenerOnShowInfoFunc on_show_info_callback;
+ NMPolkitListenerOnShowErrorFunc on_show_error_callback;
+ NMPolkitListenerOnCompletedFunc on_completed_callback;
+ gpointer request_callback_data;
+} NMPolkitListenerPrivate;
+
+
+static void
+on_request (PolkitAgentSession *session,
+ const char *request,
+ gboolean echo_on,
+ gpointer user_data)
+{
+ NMPolkitListenerPrivate *priv = NM_POLKIT_LISTENER_GET_PRIVATE (user_data);
+ char *response = NULL;
+
+ if (priv->on_request_callback) {
+ response = priv->on_request_callback (request, priv->action_id,
+ priv->message, priv->icon_name,
+ priv->identity, echo_on,
+ priv->request_callback_data);
+ }
+
+ if (response) {
+ polkit_agent_session_response (session, response);
+ g_free (response);
+ } else {
+ //FIXME: polkit_agent_session_cancel() should emit "completed", but it doesn't work for me ???
+ //polkit_agent_session_cancel (session);
+ polkit_agent_session_response (session, "");
+ }
+}
+
+static void
+on_show_info (PolkitAgentSession *session,
+ const char *text,
+ gpointer user_data)
+{
+ NMPolkitListenerPrivate *priv = NM_POLKIT_LISTENER_GET_PRIVATE (user_data);
+
+ if (priv->on_show_info_callback)
+ priv->on_show_info_callback (text);
+}
+
+static void
+on_show_error (PolkitAgentSession *session,
+ const char *text,
+ gpointer user_data)
+{
+ NMPolkitListenerPrivate *priv = NM_POLKIT_LISTENER_GET_PRIVATE (user_data);
+
+ if (priv->on_show_error_callback)
+ priv->on_show_error_callback (text);
+}
+
+static void
+on_completed (PolkitAgentSession *session,
+ gboolean gained_authorization,
+ gpointer user_data)
+{
+ NMPolkitListenerPrivate *priv = NM_POLKIT_LISTENER_GET_PRIVATE (user_data);
+
+ if (priv->on_completed_callback)
+ priv->on_completed_callback (gained_authorization);
+
+ g_simple_async_result_complete_in_idle (priv->simple);
+
+ g_object_unref (priv->simple);
+ g_object_unref (priv->active_session);
+ if (priv->cancellable) {
+ g_cancellable_disconnect (priv->cancellable, priv->cancel_id);
+ g_object_unref (priv->cancellable);
+ }
+
+ priv->simple = NULL;
+ priv->active_session = NULL;
+ priv->cancel_id = 0;
+
+ g_clear_pointer (&priv->action_id, g_free);
+ g_clear_pointer (&priv->message, g_free);
+ g_clear_pointer (&priv->icon_name, g_free);
+ g_clear_pointer (&priv->identity, g_free);
+}
+
+static void
+on_cancelled (GCancellable *cancellable, gpointer user_data)
+{
+ NMPolkitListenerPrivate *priv = NM_POLKIT_LISTENER_GET_PRIVATE (user_data);
+
+ polkit_agent_session_cancel (priv->active_session);
+}
+
+static gint
+compare_users (gconstpointer a, gconstpointer b)
+{
+ char *user;
+ int ret;
+
+ if (POLKIT_IS_UNIX_USER (a))
+ user = g_strdup (polkit_unix_user_get_name (POLKIT_UNIX_USER (a)));
+ else
+ user = polkit_identity_to_string (POLKIT_IDENTITY (a));
+
+ ret = g_strcmp0 ((const char *) user, (const char *) b);
+ g_free (user);
+ return ret;
+}
+
+static PolkitIdentity *
+choose_identity (GList *identities)
+{
+ const char *user;
+ GList *elem;
+
+ /* Choose identity. First try current user, then root, and else
+ * take the firts one */
+ user = getenv("USER");
+ elem = g_list_find_custom (identities, user, (GCompareFunc) compare_users);
+ if (!elem) {
+ elem = g_list_find_custom (identities, "root", (GCompareFunc) compare_users);
+ if (!elem)
+ elem = identities;
+ }
+
+ return elem->data;
+}
+
+static void
+initiate_authentication (PolkitAgentListener *listener,
+ const char *action_id,
+ const char *message,
+ const char *icon_name,
+ PolkitDetails *details,
+ const char *cookie,
+ GList *identities,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ NMPolkitListenerPrivate *priv = NM_POLKIT_LISTENER_GET_PRIVATE (listener);
+ GSimpleAsyncResult *simple;
+ PolkitIdentity *identity;
+
+ simple = g_simple_async_result_new (G_OBJECT (listener),
+ callback,
+ user_data,
+ initiate_authentication);
+ if (priv->active_session != NULL) {
+ g_simple_async_result_set_error (simple,
+ POLKIT_ERROR,
+ POLKIT_ERROR_FAILED,
+ _("An authentication session is already underway."));
+ g_simple_async_result_complete_in_idle (simple);
+ g_object_unref (simple);
+ return;
+ }
+
+ /* Choose identity */
+ identity = choose_identity (identities);
+
+ priv->active_session = polkit_agent_session_new (identity, cookie);
+ g_signal_connect (priv->active_session,
+ "completed",
+ G_CALLBACK (on_completed),
+ listener);
+ g_signal_connect (priv->active_session,
+ "request",
+ G_CALLBACK (on_request),
+ listener);
+ g_signal_connect (priv->active_session,
+ "show-info",
+ G_CALLBACK (on_show_info),
+ listener);
+ g_signal_connect (priv->active_session,
+ "show-error",
+ G_CALLBACK (on_show_error),
+ listener);
+
+ priv->action_id = g_strdup (action_id);
+ priv->message = g_strdup (message);
+ priv->icon_name = g_strdup (icon_name);
+ if (POLKIT_IS_UNIX_USER (identity))
+ priv->identity = g_strdup (polkit_unix_user_get_name (POLKIT_UNIX_USER (identity)));
+ else
+ priv->identity = polkit_identity_to_string (identity);
+
+ priv->simple = simple;
+ priv->cancellable = g_object_ref (cancellable);
+ priv->cancel_id = g_cancellable_connect (cancellable,
+ G_CALLBACK (on_cancelled),
+ listener,
+ NULL);
+
+ polkit_agent_session_initiate (priv->active_session);
+}
+
+static gboolean
+initiate_authentication_finish (PolkitAgentListener *listener,
+ GAsyncResult *result,
+ GError **error)
+{
+ return !g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error);
+}
+
+
+static void
+nm_polkit_listener_init (NMPolkitListener *agent)
+{
+}
+
+static void
+nm_polkit_listener_finalize (GObject *object)
+{
+ NMPolkitListenerPrivate *priv = NM_POLKIT_LISTENER_GET_PRIVATE (object);
+
+ if (priv->reg_handle)
+ polkit_agent_listener_unregister (priv->reg_handle);
+
+ g_free (priv->action_id);
+ g_free (priv->message);
+ g_free (priv->icon_name);
+ g_free (priv->identity);
+
+ G_OBJECT_CLASS (nm_polkit_listener_parent_class)->finalize (object);
+}
+
+static void
+nm_polkit_listener_class_init (NMPolkitListenerClass *klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ PolkitAgentListenerClass *pkal_class = POLKIT_AGENT_LISTENER_CLASS (klass);
+
+ g_type_class_add_private (klass, sizeof (NMPolkitListenerPrivate));
+
+ gobject_class->finalize = nm_polkit_listener_finalize;
+
+ pkal_class->initiate_authentication = initiate_authentication;
+ pkal_class->initiate_authentication_finish = initiate_authentication_finish;
+}
+
+/**
+ * nm_polkit_listener_new:
+ * @for_session: %TRUE for registering the polkit agent for the user session,
+ * %FALSE for registering it for the running process
+ * @error: location to store error, or %NULL
+ *
+ * Creates a new #NMPolkitListener and registers it as a polkit agent.
+ *
+ * Returns: a new #NMPolkitListener
+ */
+PolkitAgentListener *
+nm_polkit_listener_new (gboolean for_session, GError **error)
+{
+ PolkitAgentListener *listener;
+ PolkitSubject* session;
+ NMPolkitListenerPrivate *priv;
+
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ listener = g_object_new (NM_TYPE_POLKIT_LISTENER, NULL);
+ priv = NM_POLKIT_LISTENER_GET_PRIVATE (listener);
+
+ if (for_session)
+ session = polkit_unix_session_new_for_process_sync (getpid (), NULL, NULL);
+ else
+ session = polkit_unix_process_new_for_owner (getpid (), 0, getuid ());
+
+ priv->reg_handle = polkit_agent_listener_register (listener, POLKIT_AGENT_REGISTER_FLAGS_NONE,
+ session, NULL, NULL, error);
+ if (!priv->reg_handle) {
+ g_object_unref (listener);
+ g_object_unref (session);
+ return NULL;
+ }
+
+ return listener;
+}
+
+/**
+ * nm_polkit_listener_set_request_callback:
+ * @self: a #NMPolkitListener object
+ * @request_callback: callback to install for polkit requests
+ * @request_callback_data: usaer data passed to request_callback when it is called
+ *
+ * Set a callback for "request" signal. The callback will be invoked when polkit
+ * requests an authorization.
+ */
+void
+nm_polkit_listener_set_request_callback (NMPolkitListener *self,
+ NMPolkitListenerOnRequestFunc request_callback,
+ gpointer request_callback_data)
+{
+ NMPolkitListenerPrivate *priv;
+
+ g_return_if_fail (NM_IS_POLKIT_LISTENER (self));
+
+ priv = NM_POLKIT_LISTENER_GET_PRIVATE (self);
+
+ priv->on_request_callback = request_callback;
+ priv->request_callback_data = request_callback_data;
+}
+
+/**
+ * nm_polkit_listener_set_show_info_callback:
+ * @self: a #NMPolkitListener object
+ * @show_info_callback: callback to install for polkit show info trigger
+ *
+ * Set a callback for "show-info" signal. The callback will be invoked when polkit
+ * has an info text to display.
+ */
+void
+nm_polkit_listener_set_show_info_callback (NMPolkitListener *self,
+ NMPolkitListenerOnShowInfoFunc show_info_callback)
+{
+ g_return_if_fail (NM_IS_POLKIT_LISTENER (self));
+
+ NM_POLKIT_LISTENER_GET_PRIVATE (self)->on_show_info_callback = show_info_callback;
+}
+
+/**
+ * nm_polkit_listener_set_show_error_callback:
+ * @self: a #NMPolkitListener object
+ * @show_error_callback: callback to install for polkit show error trigger
+ *
+ * Set a callback for "show-error" signal. The callback will be invoked when polkit
+ * has an error text to display.
+ */
+void
+nm_polkit_listener_set_show_error_callback (NMPolkitListener *self,
+ NMPolkitListenerOnShowErrorFunc show_error_callback)
+{
+ g_return_if_fail (NM_IS_POLKIT_LISTENER (self));
+
+ NM_POLKIT_LISTENER_GET_PRIVATE (self)->on_show_error_callback = show_error_callback;
+}
+
+/**
+ * nm_polkit_listener_set_completed_callback:
+ * @self: a #NMPolkitListener object
+ * @completed_callback: callback to install for polkit completing authorization
+ *
+ * Set a callback for "completed" signal. The callback will be invoked when polkit
+ * completed the request.
+ */
+void
+nm_polkit_listener_set_completed_callback (NMPolkitListener *self,
+ NMPolkitListenerOnCompletedFunc completed_callback)
+{
+ g_return_if_fail (NM_IS_POLKIT_LISTENER (self));
+
+ NM_POLKIT_LISTENER_GET_PRIVATE (self)->on_completed_callback = completed_callback;
+}
diff --git a/clients/common/nm-polkit-listener.h b/clients/common/nm-polkit-listener.h
new file mode 100644
index 000000000..3cd750192
--- /dev/null
+++ b/clients/common/nm-polkit-listener.h
@@ -0,0 +1,104 @@
+/* -*- 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 2014 Red Hat, Inc.
+ */
+
+#ifndef __NM_POLKIT_LISTENER_H__
+#define __NM_POLKIT_LISTENER_H__
+
+#include <glib.h>
+
+#define POLKIT_AGENT_I_KNOW_API_IS_SUBJECT_TO_CHANGE
+#include <polkitagent/polkitagent.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_POLKIT_LISTENER (nm_polkit_listener_get_type ())
+#define NM_POLKIT_LISTENER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_POLKIT_LISTENER, NMPolkitListener))
+#define NM_POLKIT_LISTENER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_POLKIT_LISTENER, NMPolkitListenerClass))
+#define NM_IS_POLKIT_LISTENER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_POLKIT_LISTENER))
+#define NM_IS_POLKIT_LISTENER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_POLKIT_LISTENER))
+#define NM_POLKIT_LISTENER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_POLKIT_LISTENER, NMPolkitListenerClass))
+
+/**
+ * NMPolkitListenerOnRequestFunc:
+ * @request: the request asked by polkit agent
+ * @action_id: the action_id of the polkit request
+ * @message: the message of the polkit request
+ * @icon_name: the icon name of the polkit request
+ * @user: user name
+ * @echo_on: whether the response to the request should be echoed to the screen
+ * @user_data: user data for the callback
+ *
+ * Called as a result of a request by polkit. The function should obtain response
+ * to the request from user, i.e. get the password required.
+ */
+typedef char * (*NMPolkitListenerOnRequestFunc) (const char *request,
+ const char *action_id,
+ const char *message,
+ const char *icon_name,
+ const char *user,
+ gboolean echo_on,
+ gpointer user_data);
+/**
+ * NMPolkitListenerOnShowInfoFunc:
+ * @text: the info text from polkit
+ *
+ * Called as a result of show-info signal by polkit.
+ */
+typedef void (*NMPolkitListenerOnShowInfoFunc) (const char *text);
+/**
+ * NMPolkitListenerOnShowErrorFunc:
+ * @text: the error text from polkit
+ *
+ * Called as a result of show-error signal by polkit.
+ */
+typedef void (*NMPolkitListenerOnShowErrorFunc) (const char *text);
+/**
+ * NMPolkitListenerCompletedFunc:
+ * @gained_authorization: whether the autorization was successful
+ *
+ * Called as a result of completed signal by polkit.
+ */
+typedef void (*NMPolkitListenerOnCompletedFunc) (gboolean gained_authorization);
+
+
+typedef struct {
+ PolkitAgentListener parent;
+
+} NMPolkitListener;
+
+typedef struct {
+ PolkitAgentListenerClass parent;
+
+} NMPolkitListenerClass;
+
+GType nm_polkit_listener_get_type (void);
+
+PolkitAgentListener* nm_polkit_listener_new (gboolean for_session, GError **error);
+void nm_polkit_listener_set_request_callback (NMPolkitListener *self,
+ NMPolkitListenerOnRequestFunc request_callback,
+ gpointer request_callback_data);
+void nm_polkit_listener_set_show_info_callback (NMPolkitListener *self,
+ NMPolkitListenerOnShowInfoFunc show_info_callback);
+void nm_polkit_listener_set_show_error_callback (NMPolkitListener *self,
+ NMPolkitListenerOnShowErrorFunc show_error_callback);
+void nm_polkit_listener_set_completed_callback (NMPolkitListener *self,
+ NMPolkitListenerOnCompletedFunc completed_callback);
+
+G_END_DECLS
+
+#endif /* __NM_POLKIT_LISTENER_H__ */
diff --git a/clients/common/nm-secret-agent-simple.c b/clients/common/nm-secret-agent-simple.c
new file mode 100644
index 000000000..80022a4dc
--- /dev/null
+++ b/clients/common/nm-secret-agent-simple.c
@@ -0,0 +1,695 @@
+/* -*- 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:nm-secret-agent-simple
+ * @short_description: A simple secret agent for NetworkManager
+ *
+ * #NMSecretAgentSimple is the secret agent used by nmtui-connect and nmcli.
+ *
+ * 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 <glib/gi18n-lib.h>
+
+#include "nm-secret-agent-simple.h"
+
+G_DEFINE_TYPE (NMSecretAgentSimple, nm_secret_agent_simple, NM_TYPE_SECRET_AGENT_OLD)
+
+#define NM_SECRET_AGENT_SIMPLE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SECRET_AGENT_SIMPLE, NMSecretAgentSimplePrivate))
+
+enum {
+ REQUEST_SECRETS,
+
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+typedef struct {
+ NMSecretAgentSimple *self;
+
+ gchar *request_id;
+ NMConnection *connection;
+ gchar **hints;
+ NMSecretAgentOldGetSecretsFunc callback;
+ gpointer callback_data;
+} NMSecretAgentSimpleRequest;
+
+typedef struct {
+ /* <char *request_id, NMSecretAgentSimpleRequest *request> */
+ GHashTable *requests;
+
+ char *path;
+ gboolean enabled;
+} NMSecretAgentSimplePrivate;
+
+static void
+nm_secret_agent_simple_request_free (gpointer data)
+{
+ NMSecretAgentSimpleRequest *request = data;
+
+ g_object_unref (request->self);
+ g_object_unref (request->connection);
+ g_strfreev (request->hints);
+
+ g_slice_free (NMSecretAgentSimpleRequest, request);
+}
+
+static void
+nm_secret_agent_simple_init (NMSecretAgentSimple *agent)
+{
+ NMSecretAgentSimplePrivate *priv = NM_SECRET_AGENT_SIMPLE_GET_PRIVATE (agent);
+
+ priv->requests = g_hash_table_new_full (g_str_hash, g_str_equal,
+ g_free, nm_secret_agent_simple_request_free);
+}
+
+static void
+nm_secret_agent_simple_finalize (GObject *object)
+{
+ NMSecretAgentSimplePrivate *priv = NM_SECRET_AGENT_SIMPLE_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)) {
+ NMSecretAgentSimpleRequest *request = value;
+
+ request->callback (NM_SECRET_AGENT_OLD (object),
+ request->connection,
+ NULL, error,
+ request->callback_data);
+ }
+
+ g_hash_table_destroy (priv->requests);
+ g_error_free (error);
+
+ g_free (priv->path);
+
+ G_OBJECT_CLASS (nm_secret_agent_simple_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;
+}
+
+/**
+ * NMSecretAgentSimpleSecret:
+ * @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 {
+ NMSecretAgentSimpleSecret base;
+
+ NMSetting *setting;
+ char *property;
+} NMSecretAgentSimpleSecretReal;
+
+static void
+nm_secret_agent_simple_secret_free (NMSecretAgentSimpleSecret *secret)
+{
+ NMSecretAgentSimpleSecretReal *real = (NMSecretAgentSimpleSecretReal *)secret;
+
+ g_free (secret->name);
+ g_free (secret->prop_name);
+ g_free (secret->value);
+ g_free (real->property);
+ g_clear_object (&real->setting);
+
+ g_slice_free (NMSecretAgentSimpleSecretReal, real);
+}
+
+static NMSecretAgentSimpleSecret *
+nm_secret_agent_simple_secret_new (const char *name,
+ NMSetting *setting,
+ const char *property,
+ gboolean password)
+{
+ NMSecretAgentSimpleSecretReal *real;
+
+ real = g_slice_new0 (NMSecretAgentSimpleSecretReal);
+ real->base.name = g_strdup (name);
+ real->base.prop_name = g_strdup_printf ("%s.%s", nm_setting_get_name (setting), property);
+ 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 (NMSecretAgentSimpleRequest *request,
+ GPtrArray *secrets)
+{
+ NMSetting8021x *s_8021x = nm_connection_get_setting_802_1x (request->connection);
+ const char *eap_method;
+ NMSecretAgentSimpleSecret *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 = nm_secret_agent_simple_secret_new (_("Username"),
+ NM_SETTING (s_8021x),
+ NM_SETTING_802_1X_IDENTITY,
+ FALSE);
+ g_ptr_array_add (secrets, secret);
+ secret = nm_secret_agent_simple_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 = nm_secret_agent_simple_secret_new (_("Identity"),
+ NM_SETTING (s_8021x),
+ NM_SETTING_802_1X_IDENTITY,
+ FALSE);
+ g_ptr_array_add (secrets, secret);
+ secret = nm_secret_agent_simple_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 (NMSecretAgentSimpleRequest *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);
+ NMSecretAgentSimpleSecret *secret;
+
+ if (!key_mgmt)
+ return FALSE;
+
+ if (!strcmp (key_mgmt, "wpa-none") || !strcmp (key_mgmt, "wpa-psk")) {
+ secret = nm_secret_agent_simple_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 = nm_secret_agent_simple_secret_new (_("Key"),
+ NM_SETTING (s_wsec),
+ key,
+ TRUE);
+ g_free (key);
+
+ 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 = nm_secret_agent_simple_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 (NMSecretAgentSimpleRequest *request,
+ GPtrArray *secrets)
+{
+ NMSettingPppoe *s_pppoe = nm_connection_get_setting_pppoe (request->connection);
+ NMSecretAgentSimpleSecret *secret;
+
+ secret = nm_secret_agent_simple_secret_new (_("Username"),
+ NM_SETTING (s_pppoe),
+ NM_SETTING_PPPOE_USERNAME,
+ FALSE);
+ g_ptr_array_add (secrets, secret);
+ secret = nm_secret_agent_simple_secret_new (_("Service"),
+ NM_SETTING (s_pppoe),
+ NM_SETTING_PPPOE_SERVICE,
+ FALSE);
+ g_ptr_array_add (secrets, secret);
+ secret = nm_secret_agent_simple_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 (NMSecretAgentSimpleRequest *request)
+{
+ GPtrArray *secrets;
+ NMSecretAgentSimpleSecret *secret;
+ const char *title;
+ char *msg;
+ gboolean ok = TRUE;
+
+ secrets = g_ptr_array_new_with_free_func ((GDestroyNotify) nm_secret_agent_simple_secret_free);
+
+ if (nm_connection_is_type (request->connection, NM_SETTING_WIRELESS_SETTING_NAME)) {
+ NMSettingWireless *s_wireless;
+ GBytes *ssid;
+ char *ssid_utf8;
+
+ s_wireless = nm_connection_get_setting_wireless (request->connection);
+ ssid = nm_setting_wireless_get_ssid (s_wireless);
+ ssid_utf8 = nm_utils_ssid_to_utf8 (g_bytes_get_data (ssid, NULL),
+ g_bytes_get_size (ssid));
+
+ title = _("Authentication required by wireless network");
+ msg = g_strdup_printf (_("Passwords or encryption keys are required to access the wireless network '%s'."), ssid_utf8);
+
+ 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 = nm_secret_agent_simple_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 = nm_secret_agent_simple_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 = nm_secret_agent_simple_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 = nm_secret_agent_simple_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 = nm_secret_agent_simple_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
+nm_secret_agent_simple_get_secrets (NMSecretAgentOld *agent,
+ NMConnection *connection,
+ const gchar *connection_path,
+ const gchar *setting_name,
+ const gchar **hints,
+ NMSecretAgentGetSecretsFlags flags,
+ NMSecretAgentOldGetSecretsFunc callback,
+ gpointer callback_data)
+{
+ NMSecretAgentSimple *self = NM_SECRET_AGENT_SIMPLE (agent);
+ NMSecretAgentSimplePrivate *priv = NM_SECRET_AGENT_SIMPLE_GET_PRIVATE (self);
+ NMSecretAgentSimpleRequest *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_FAILED,
+ "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 (NMSecretAgentSimpleRequest);
+ 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);
+
+ if (priv->enabled)
+ request_secrets_from_ui (request);
+}
+
+/**
+ * nm_secret_agent_simple_response:
+ * @self: the #NMSecretAgentSimple
+ * @request_id: the request ID being responded to
+ * @secrets: (allow-none): the array of secrets, or %NULL
+ *
+ * Response to a #NMSecretAgentSimple::get-secrets signal.
+ *
+ * If the user provided secrets, the caller should set the
+ * corresponding <literal>value</literal> fields in the
+ * #NMSecretAgentSimpleSecrets (freeing any initial values they had), and
+ * pass the array to nm_secret_agent_simple_response(). If the user
+ * cancelled the request, @secrets should be NULL.
+ */
+void
+nm_secret_agent_simple_response (NMSecretAgentSimple *self,
+ const char *request_id,
+ GPtrArray *secrets)
+{
+ NMSecretAgentSimplePrivate *priv;
+ NMSecretAgentSimpleRequest *request;
+ GVariant *dict = NULL;
+ GError *error = NULL;
+ int i;
+
+ g_return_if_fail (NM_IS_SECRET_AGENT_SIMPLE (self));
+
+ priv = NM_SECRET_AGENT_SIMPLE_GET_PRIVATE (self);
+ request = g_hash_table_lookup (priv->requests, request_id);
+ g_return_if_fail (request != NULL);
+
+ if (secrets) {
+ GVariantBuilder conn_builder, *setting_builder;
+ GHashTable *settings;
+ GHashTableIter iter;
+ const char *name;
+
+ settings = g_hash_table_new (g_str_hash, g_str_equal);
+ for (i = 0; i < secrets->len; i++) {
+ NMSecretAgentSimpleSecretReal *secret = secrets->pdata[i];
+
+ setting_builder = g_hash_table_lookup (settings, nm_setting_get_name (secret->setting));
+ if (!setting_builder) {
+ setting_builder = g_variant_builder_new (NM_VARIANT_TYPE_SETTING);
+ g_hash_table_insert (settings, (char *) nm_setting_get_name (secret->setting),
+ setting_builder);
+ }
+
+ g_variant_builder_add (setting_builder, "{sv}",
+ secret->property,
+ g_variant_new_string (secret->base.value));
+ }
+
+ g_variant_builder_init (&conn_builder, NM_VARIANT_TYPE_CONNECTION);
+ g_hash_table_iter_init (&iter, settings);
+ while (g_hash_table_iter_next (&iter, (gpointer *) &name, (gpointer *) &setting_builder))
+ g_variant_builder_add (&conn_builder, "{sa{sv}}", name, setting_builder);
+ dict = g_variant_builder_end (&conn_builder);
+ g_hash_table_destroy (settings);
+ } else {
+ error = g_error_new (NM_SECRET_AGENT_ERROR, NM_SECRET_AGENT_ERROR_USER_CANCELED,
+ "User cancelled");
+ }
+
+ request->callback (NM_SECRET_AGENT_OLD (self), request->connection, dict, error, request->callback_data);
+
+ g_clear_error (&error);
+ g_hash_table_remove (priv->requests, request_id);
+}
+
+static void
+nm_secret_agent_simple_cancel_get_secrets (NMSecretAgentOld *agent,
+ const gchar *connection_path,
+ const gchar *setting_name)
+{
+ /* We don't support cancellation. Sorry! */
+}
+
+static void
+nm_secret_agent_simple_save_secrets (NMSecretAgentOld *agent,
+ NMConnection *connection,
+ const gchar *connection_path,
+ NMSecretAgentOldSaveSecretsFunc callback,
+ gpointer callback_data)
+{
+ /* We don't support secret storage */
+ callback (agent, connection, NULL, callback_data);
+}
+
+static void
+nm_secret_agent_simple_delete_secrets (NMSecretAgentOld *agent,
+ NMConnection *connection,
+ const gchar *connection_path,
+ NMSecretAgentOldDeleteSecretsFunc callback,
+ gpointer callback_data)
+{
+ /* We don't support secret storage, so there's nothing to delete. */
+ callback (agent, connection, NULL, callback_data);
+}
+
+/**
+ * nm_secret_agent_simple_enable:
+ * @self: the #NMSecretAgentSimple
+ * @path: (allow-none): the path of the connection (if any) to handle secrets
+ * for. If %NULL, secrets for any connection will be handled.
+ *
+ * Enables servicing the requests including the already queued ones. If @path
+ * is given, the agent will only handle requests for connections that match
+ * @path.
+ */
+void
+nm_secret_agent_simple_enable (NMSecretAgentSimple *self, const char *path)
+{
+ NMSecretAgentSimplePrivate *priv = NM_SECRET_AGENT_SIMPLE_GET_PRIVATE (self);
+ GList *requests, *iter;
+ GError *error;
+
+ if (g_strcmp0 (path, priv->path) != 0) {
+ g_free (priv->path);
+ priv->path = g_strdup (path);
+ }
+
+ if (priv->enabled)
+ return;
+ priv->enabled = TRUE;
+
+ /* Service pending secret requests. */
+ requests = g_hash_table_get_values (priv->requests);
+ for (iter = requests; iter; iter = g_list_next (iter)) {
+ NMSecretAgentSimpleRequest *request = iter->data;
+
+ if (g_str_has_prefix (request->request_id, priv->path)) {
+ request_secrets_from_ui (request);
+ } else {
+ /* We only handle requests for connection with @path if set. */
+ error = g_error_new (NM_SECRET_AGENT_ERROR, NM_SECRET_AGENT_ERROR_FAILED,
+ "Request for %s secrets doesn't match path %s",
+ request->request_id, priv->path);
+ request->callback (NM_SECRET_AGENT_OLD (self), request->connection, NULL, error, request->callback_data);
+ g_hash_table_remove (priv->requests, request->request_id);
+ g_error_free (error);
+ }
+ }
+ g_list_free (requests);
+}
+
+void
+nm_secret_agent_simple_class_init (NMSecretAgentSimpleClass *klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ NMSecretAgentOldClass *agent_class = NM_SECRET_AGENT_OLD_CLASS (klass);
+
+ g_type_class_add_private (klass, sizeof (NMSecretAgentSimplePrivate));
+
+ gobject_class->finalize = nm_secret_agent_simple_finalize;
+
+ agent_class->get_secrets = nm_secret_agent_simple_get_secrets;
+ agent_class->cancel_get_secrets = nm_secret_agent_simple_cancel_get_secrets;
+ agent_class->save_secrets = nm_secret_agent_simple_save_secrets;
+ agent_class->delete_secrets = nm_secret_agent_simple_delete_secrets;
+
+ /**
+ * NMSecretAgentSimple::request-secrets:
+ * @agent: the #NMSecretAgentSimple
+ * @request_id: request ID, to eventually pass to
+ * nm_secret_agent_simple_response().
+ * @title: a title for the password dialog
+ * @prompt: a prompt message for the password dialog
+ * @secrets: (element-type #NMSecretAgentSimpleSecret): array of secrets
+ * being requested.
+ *
+ * Emitted when the agent requires secrets from the user.
+ *
+ * The application should ask user for the secrets. For example,
+ * nmtui should create a password dialog (#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
+ * nm_secret_agent_simple_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);
+}
+
+/**
+ * nm_secret_agent_simple_new:
+ * @name: the identifier of secret agent
+ *
+ * Creates a new #NMSecretAgentSimple. It does not serve any requests until
+ * nm_secret_agent_simple_enable() is called.
+ *
+ * Returns: a new #NMSecretAgentSimple if the agent creation is successful
+ * or %NULL in case of a failure.
+ */
+NMSecretAgentOld *
+nm_secret_agent_simple_new (const char *name)
+{
+ return g_initable_new (NM_TYPE_SECRET_AGENT_SIMPLE, NULL, NULL,
+ NM_SECRET_AGENT_OLD_IDENTIFIER, name,
+ NULL);
+}
diff --git a/clients/common/nm-secret-agent-simple.h b/clients/common/nm-secret-agent-simple.h
new file mode 100644
index 000000000..81fec6513
--- /dev/null
+++ b/clients/common/nm-secret-agent-simple.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 - 2014 Red Hat, Inc.
+ */
+
+#ifndef __NM_SECRET_AGENT_SIMPLE_H__
+#define __NM_SECRET_AGENT_SIMPLE_H__
+
+#include <NetworkManager.h>
+#include <nm-secret-agent-old.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SECRET_AGENT_SIMPLE (nm_secret_agent_simple_get_type ())
+#define NM_SECRET_AGENT_SIMPLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SECRET_AGENT_SIMPLE, NMSecretAgentSimple))
+#define NM_SECRET_AGENT_SIMPLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SECRET_AGENT_SIMPLE, NMSecretAgentSimpleClass))
+#define NM_IS_SECRET_AGENT_SIMPLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SECRET_AGENT_SIMPLE))
+#define NM_IS_SECRET_AGENT_SIMPLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_SECRET_AGENT_SIMPLE))
+#define NM_SECRET_AGENT_SIMPLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SECRET_AGENT_SIMPLE, NMSecretAgentSimpleClass))
+
+typedef struct {
+ NMSecretAgentOld parent;
+
+} NMSecretAgentSimple;
+
+typedef struct {
+ NMSecretAgentOldClass parent;
+
+} NMSecretAgentSimpleClass;
+
+typedef struct {
+ char *name, *prop_name, *value;
+ gboolean password;
+} NMSecretAgentSimpleSecret;
+
+GType nm_secret_agent_simple_get_type (void);
+
+NMSecretAgentOld *nm_secret_agent_simple_new (const char *name);
+
+void nm_secret_agent_simple_response (NMSecretAgentSimple *self,
+ const char *request_id,
+ GPtrArray *secrets);
+
+void nm_secret_agent_simple_enable (NMSecretAgentSimple *self,
+ const char *path);
+
+G_END_DECLS
+
+#endif /* __NM_SECRET_AGENT_SIMPLE_H__ */
diff --git a/test/nm-online.c b/clients/nm-online.c
index 811928746..bb0c97066 100644
--- a/test/nm-online.c
+++ b/clients/nm-online.c
@@ -31,7 +31,7 @@
* Robert Love <rml@novell.com>
*/
-#include <config.h>
+#include "config.h"
#include <stdio.h>
#include <stdlib.h>
@@ -40,15 +40,16 @@
#include <glib/gi18n.h>
-#include "nm-client.h"
+#include <NetworkManager.h>
#define PROGRESS_STEPS 15
#define WAIT_STARTUP_TAG "wait-startup"
typedef struct
{
- int value;
- double norm;
+ gint64 start_timestamp_ms;
+ gint64 end_timestamp_ms;
+ gint64 progress_step_duration;
gboolean quiet;
} Timeout;
@@ -61,7 +62,7 @@ client_properties_changed (GObject *object,
NMState state;
gboolean wait_startup = GPOINTER_TO_UINT (g_object_get_data (object, WAIT_STARTUP_TAG));
- if (!nm_client_get_manager_running (client))
+ if (!nm_client_get_nm_running (client))
return;
if (wait_startup) {
@@ -79,32 +80,60 @@ client_properties_changed (GObject *object,
static gboolean
handle_timeout (gpointer data)
{
- int i = PROGRESS_STEPS;
- Timeout *timeout = data;
+ const Timeout *timeout = data;
+ const gint64 now = g_get_monotonic_time () / (G_USEC_PER_SEC / 1000);
+ gint64 remaining_ms = timeout->end_timestamp_ms - now;
+ const gint64 elapsed_ms = now - timeout->start_timestamp_ms;
+ int progress_next_step_i = 0;
if (!timeout->quiet) {
+ int i;
+
+ /* calculate the next step (not the current): floor()+1 */
+ progress_next_step_i = (elapsed_ms / timeout->progress_step_duration) + 1;
+ progress_next_step_i = MIN (progress_next_step_i, PROGRESS_STEPS);
+
g_print (_("\rConnecting"));
- for (; i > 0; i--)
- putchar ((timeout->value >= (i * timeout->norm)) ? ' ' : '.');
- if (timeout->value)
- g_print (" %4is", timeout->value);
+ for (i = 0; i < PROGRESS_STEPS; i++)
+ putchar (i < progress_next_step_i ? '.' : ' ');
+ g_print (" %4lds", (long) (MAX (0, remaining_ms) / 1000));
fflush (stdout);
}
- timeout->value--;
- if (timeout->value < 0) {
+ if (remaining_ms <= 3) {
if (!timeout->quiet)
g_print ("\n");
exit (1);
}
- return TRUE;
+ if (!timeout->quiet) {
+ gint64 rem;
+
+ /* synchronize the timeout with the ticking of the seconds. */
+ rem = remaining_ms % 1000;
+ if (rem <= 3)
+ rem = rem + G_USEC_PER_SEC;
+ rem = rem + 10; /* add small offset to awake a bit after the second ticks */
+ if (remaining_ms > rem)
+ remaining_ms = rem;
+
+ /* synchronize the timeout with the steps of the progress bar. */
+ rem = (progress_next_step_i * timeout->progress_step_duration) - elapsed_ms;
+ if (rem <= 3)
+ rem = rem + timeout->progress_step_duration;
+ rem = rem + 10; /* add small offset to awake a bit after the time out */
+ if (remaining_ms > rem)
+ remaining_ms = rem;
+ }
+
+ g_timeout_add (remaining_ms, handle_timeout, (void *) timeout);
+ return G_SOURCE_REMOVE;
}
int
main (int argc, char *argv[])
{
- gint t_secs = -1;
+ int t_secs = 30;
gboolean exit_no_nm = FALSE;
gboolean wait_startup = FALSE;
Timeout timeout;
@@ -113,6 +142,8 @@ main (int argc, char *argv[])
NMClient *client;
NMState state = NM_STATE_UNKNOWN;
GMainLoop *loop;
+ gint64 remaining_ms;
+ GError *error = NULL;
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>"},
@@ -122,6 +153,7 @@ main (int argc, char *argv[])
{NULL}
};
+ timeout.start_timestamp_ms = g_get_monotonic_time () / (G_USEC_PER_SEC / 1000);
timeout.quiet = FALSE;
/* Set locale to be able to use environment variables */
@@ -148,24 +180,22 @@ main (int argc, char *argv[])
_("Invalid option. Please use --help to see a list of valid options."));
return 2;
}
-
- if (t_secs > -1)
- timeout.value = t_secs;
- else
- timeout.value = 30;
- if (timeout.value < 0 || timeout.value > 3600) {
+
+ if (t_secs < 0 || t_secs > 3600) {
g_printerr ("%s: %s\n", argv[0],
_("Invalid option. Please use --help to see a list of valid options."));
return 2;
}
+ remaining_ms = t_secs * 1000;
#if !GLIB_CHECK_VERSION (2, 35, 0)
g_type_init ();
#endif
- client = nm_client_new ();
+ client = nm_client_new (NULL, &error);
if (!client) {
- g_printerr (_("Error: Could not create NMClient object."));
+ g_printerr (_("Error: Could not create NMClient object: %s."), error->message);
+ g_error_free (error);
return 2;
}
@@ -173,7 +203,7 @@ main (int argc, char *argv[])
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 (!nm_client_get_nm_running (client)) {
if (exit_no_nm) {
g_object_unref (client);
return 1;
@@ -196,17 +226,20 @@ main (int argc, char *argv[])
return 1;
}
- if (!timeout.value) {
+ if (remaining_ms == 0) {
g_object_unref (client);
return 1;
}
- 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);
+ timeout.end_timestamp_ms = timeout.start_timestamp_ms + remaining_ms;
+ timeout.progress_step_duration = (timeout.end_timestamp_ms - timeout.start_timestamp_ms + PROGRESS_STEPS/2) / PROGRESS_STEPS;
+
+ g_timeout_add (timeout.quiet ? remaining_ms : 0,
+ handle_timeout, &timeout);
+
g_main_loop_run (loop);
g_main_loop_unref (loop);
diff --git a/tui/Makefile.am b/clients/tui/Makefile.am
index 755b68941..ad9335daf 100644
--- a/tui/Makefile.am
+++ b/clients/tui/Makefile.am
@@ -5,14 +5,14 @@ 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$(top_srcdir)/libnm-core \
+ -I$(top_builddir)/libnm-core \
+ -I$(top_srcdir)/libnm \
+ -I$(top_builddir)/libnm \
-I$(srcdir)/newt \
+ -I$(top_srcdir)/clients/common \
$(GLIB_CFLAGS) \
$(NEWT_CFLAGS) \
- $(DBUS_CFLAGS) \
$(GUDEV_CFLAGS) \
-DG_LOG_DOMAIN=\""nmtui"\" \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
@@ -55,8 +55,14 @@ nmtui_SOURCES = \
nmt-device-entry.h \
nmt-edit-connection-list.c \
nmt-edit-connection-list.h \
+ nmt-editor-grid.c \
+ nmt-editor-grid.h \
nmt-editor-page.c \
nmt-editor-page.h \
+ nmt-editor-page-device.c \
+ nmt-editor-page-device.h \
+ nmt-editor-section.c \
+ nmt-editor-section.h \
nmt-editor.c \
nmt-editor.h \
nmt-ip-entry.c \
@@ -71,20 +77,18 @@ nmtui_SOURCES = \
nmt-page-bridge.h \
nmt-page-bridge-port.c \
nmt-page-bridge-port.h \
- nmt-page-device.c \
- nmt-page-device.h \
+ nmt-page-dsl.c \
+ nmt-page-dsl.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-ppp.c \
+ nmt-page-ppp.h \
nmt-page-team.c \
nmt-page-team.h \
nmt-page-team-port.c \
@@ -103,22 +107,20 @@ nmtui_SOURCES = \
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 \
+ $(srcdir)/../common/nm-secret-agent-simple.c \
+ $(srcdir)/../common/nm-secret-agent-simple.h \
$(NULL)
nmtui_LDADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(top_builddir)/libnm-glib/libnm-glib.la \
+ $(top_builddir)/libnm/libnm.la \
$(builddir)/newt/libnmt-newt.a \
$(GUDEV_LIBS) \
- $(DBUS_LIBS) \
$(NEWT_LIBS) \
$(GLIB_LIBS) \
$(NULL)
diff --git a/tui/Makefile.in b/clients/tui/Makefile.in
index e7368d059..86b2a3b9c 100644
--- a/tui/Makefile.in
+++ b/clients/tui/Makefile.in
@@ -79,7 +79,7 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
@BUILD_NMTUI_TRUE@bin_PROGRAMS = nmtui$(EXEEXT)
-subdir = tui
+subdir = clients/tui
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -111,24 +111,27 @@ am__nmtui_SOURCES_DIST = nmtui.c nmtui.h nmtui-connect.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-edit-connection-list.h nmt-editor-grid.c nmt-editor-grid.h \
+ nmt-editor-page.c nmt-editor-page.h nmt-editor-page-device.c \
+ nmt-editor-page-device.h nmt-editor-section.c \
+ nmt-editor-section.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
+ nmt-page-bridge-port.h nmt-page-dsl.c nmt-page-dsl.h \
+ nmt-page-ethernet.c nmt-page-ethernet.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-ppp.c nmt-page-ppp.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-slave-list.c nmt-slave-list.h \
+ nmt-utils.c nmt-utils.h nmt-widget-list.c nmt-widget-list.h \
+ $(srcdir)/../common/nm-secret-agent-simple.c \
+ $(srcdir)/../common/nm-secret-agent-simple.h
@BUILD_NMTUI_TRUE@am_nmtui_OBJECTS = nmtui.$(OBJEXT) \
@BUILD_NMTUI_TRUE@ nmtui-connect.$(OBJEXT) nmtui-edit.$(OBJEXT) \
@BUILD_NMTUI_TRUE@ nmtui-hostname.$(OBJEXT) \
@@ -138,20 +141,22 @@ am__nmtui_SOURCES_DIST = nmtui.c nmtui.h nmtui-connect.c \
@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-grid.$(OBJEXT) \
@BUILD_NMTUI_TRUE@ nmt-editor-page.$(OBJEXT) \
+@BUILD_NMTUI_TRUE@ nmt-editor-page-device.$(OBJEXT) \
+@BUILD_NMTUI_TRUE@ nmt-editor-section.$(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-dsl.$(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-ppp.$(OBJEXT) \
@BUILD_NMTUI_TRUE@ nmt-page-team.$(OBJEXT) \
@BUILD_NMTUI_TRUE@ nmt-page-team-port.$(OBJEXT) \
@BUILD_NMTUI_TRUE@ nmt-page-vlan.$(OBJEXT) \
@@ -161,17 +166,15 @@ am__nmtui_SOURCES_DIST = nmtui.c nmtui.h nmtui-connect.c \
@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)
+@BUILD_NMTUI_TRUE@ nmt-widget-list.$(OBJEXT) \
+@BUILD_NMTUI_TRUE@ nm-secret-agent-simple.$(OBJEXT)
nmtui_OBJECTS = $(am_nmtui_OBJECTS)
am__DEPENDENCIES_1 =
-@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@nmtui_DEPENDENCIES = $(top_builddir)/libnm/libnm.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)
+@BUILD_NMTUI_TRUE@ $(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
@@ -288,6 +291,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -411,6 +416,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -430,6 +436,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -456,7 +463,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -539,14 +546,14 @@ with_valgrind = @with_valgrind@
@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$(top_srcdir)/libnm-core \
+@BUILD_NMTUI_TRUE@ -I$(top_builddir)/libnm-core \
+@BUILD_NMTUI_TRUE@ -I$(top_srcdir)/libnm \
+@BUILD_NMTUI_TRUE@ -I$(top_builddir)/libnm \
@BUILD_NMTUI_TRUE@ -I$(srcdir)/newt \
+@BUILD_NMTUI_TRUE@ -I$(top_srcdir)/clients/common \
@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 \
@@ -577,8 +584,14 @@ with_valgrind = @with_valgrind@
@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-grid.c \
+@BUILD_NMTUI_TRUE@ nmt-editor-grid.h \
@BUILD_NMTUI_TRUE@ nmt-editor-page.c \
@BUILD_NMTUI_TRUE@ nmt-editor-page.h \
+@BUILD_NMTUI_TRUE@ nmt-editor-page-device.c \
+@BUILD_NMTUI_TRUE@ nmt-editor-page-device.h \
+@BUILD_NMTUI_TRUE@ nmt-editor-section.c \
+@BUILD_NMTUI_TRUE@ nmt-editor-section.h \
@BUILD_NMTUI_TRUE@ nmt-editor.c \
@BUILD_NMTUI_TRUE@ nmt-editor.h \
@BUILD_NMTUI_TRUE@ nmt-ip-entry.c \
@@ -593,20 +606,18 @@ with_valgrind = @with_valgrind@
@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-dsl.c \
+@BUILD_NMTUI_TRUE@ nmt-page-dsl.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-ppp.c \
+@BUILD_NMTUI_TRUE@ nmt-page-ppp.h \
@BUILD_NMTUI_TRUE@ nmt-page-team.c \
@BUILD_NMTUI_TRUE@ nmt-page-team.h \
@BUILD_NMTUI_TRUE@ nmt-page-team-port.c \
@@ -625,22 +636,20 @@ with_valgrind = @with_valgrind@
@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@ $(srcdir)/../common/nm-secret-agent-simple.c \
+@BUILD_NMTUI_TRUE@ $(srcdir)/../common/nm-secret-agent-simple.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@ $(top_builddir)/libnm/libnm.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)
@@ -658,9 +667,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tui/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu clients/tui/Makefile'; \
$(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu tui/Makefile
+ $(AUTOMAKE) --gnu clients/tui/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
@@ -741,11 +750,15 @@ distclean-compile:
@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)/nm-secret-agent-simple.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-grid.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmt-editor-page-device.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-section.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@
@@ -753,13 +766,12 @@ distclean-compile:
@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-dsl.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-ppp.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@
@@ -769,7 +781,6 @@ distclean-compile:
@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@
@@ -799,6 +810,20 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+nm-secret-agent-simple.o: $(srcdir)/../common/nm-secret-agent-simple.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-secret-agent-simple.o -MD -MP -MF $(DEPDIR)/nm-secret-agent-simple.Tpo -c -o nm-secret-agent-simple.o `test -f '$(srcdir)/../common/nm-secret-agent-simple.c' || echo '$(srcdir)/'`$(srcdir)/../common/nm-secret-agent-simple.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-secret-agent-simple.Tpo $(DEPDIR)/nm-secret-agent-simple.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(srcdir)/../common/nm-secret-agent-simple.c' object='nm-secret-agent-simple.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-secret-agent-simple.o `test -f '$(srcdir)/../common/nm-secret-agent-simple.c' || echo '$(srcdir)/'`$(srcdir)/../common/nm-secret-agent-simple.c
+
+nm-secret-agent-simple.obj: $(srcdir)/../common/nm-secret-agent-simple.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-secret-agent-simple.obj -MD -MP -MF $(DEPDIR)/nm-secret-agent-simple.Tpo -c -o nm-secret-agent-simple.obj `if test -f '$(srcdir)/../common/nm-secret-agent-simple.c'; then $(CYGPATH_W) '$(srcdir)/../common/nm-secret-agent-simple.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../common/nm-secret-agent-simple.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-secret-agent-simple.Tpo $(DEPDIR)/nm-secret-agent-simple.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(srcdir)/../common/nm-secret-agent-simple.c' object='nm-secret-agent-simple.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-secret-agent-simple.obj `if test -f '$(srcdir)/../common/nm-secret-agent-simple.c'; then $(CYGPATH_W) '$(srcdir)/../common/nm-secret-agent-simple.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../common/nm-secret-agent-simple.c'; fi`
+
mostlyclean-libtool:
-rm -f *.lo
diff --git a/tui/newt/Makefile.am b/clients/tui/newt/Makefile.am
index 0db5525d0..e572238b2 100644
--- a/tui/newt/Makefile.am
+++ b/clients/tui/newt/Makefile.am
@@ -1,6 +1,5 @@
AM_CPPFLAGS= \
-I$(top_srcdir)/include \
- -I$(top_builddir)/include \
-DG_LOG_DOMAIN=\""nmtui"\" \
$(GLIB_CFLAGS) \
$(NEWT_CFLAGS) \
diff --git a/tui/newt/Makefile.in b/clients/tui/newt/Makefile.in
index 043382bea..64abce69e 100644
--- a/tui/newt/Makefile.in
+++ b/clients/tui/newt/Makefile.in
@@ -78,7 +78,7 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-subdir = tui/newt
+subdir = clients/tui/newt
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -195,6 +195,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -318,6 +320,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -337,6 +340,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -363,7 +367,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -444,7 +448,6 @@ with_resolvconf = @with_resolvconf@
with_valgrind = @with_valgrind@
AM_CPPFLAGS = \
-I$(top_srcdir)/include \
- -I$(top_builddir)/include \
-DG_LOG_DOMAIN=\""nmtui"\" \
$(GLIB_CFLAGS) \
$(NEWT_CFLAGS) \
@@ -509,9 +512,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tui/newt/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu clients/tui/newt/Makefile'; \
$(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu tui/newt/Makefile
+ $(AUTOMAKE) --gnu clients/tui/newt/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
diff --git a/tui/newt/nmt-newt-button-box.c b/clients/tui/newt/nmt-newt-button-box.c
index 0199ebe93..4fba1daf9 100644
--- a/tui/newt/nmt-newt-button-box.c
+++ b/clients/tui/newt/nmt-newt-button-box.c
@@ -376,10 +376,11 @@ nmt_newt_button_box_class_init (NmtNewtButtonBoxClass *bbox_class)
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));
+ 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/clients/tui/newt/nmt-newt-button-box.h
index 970588a4d..970588a4d 100644
--- a/tui/newt/nmt-newt-button-box.h
+++ b/clients/tui/newt/nmt-newt-button-box.h
diff --git a/tui/newt/nmt-newt-button.c b/clients/tui/newt/nmt-newt-button.c
index 97ad50ca6..00dbcd79a 100644
--- a/tui/newt/nmt-newt-button.c
+++ b/clients/tui/newt/nmt-newt-button.c
@@ -252,9 +252,10 @@ nmt_newt_button_class_init (NmtNewtButtonClass *button_class)
*
* 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));
+ 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/clients/tui/newt/nmt-newt-button.h
index 52e95c5d1..52e95c5d1 100644
--- a/tui/newt/nmt-newt-button.h
+++ b/clients/tui/newt/nmt-newt-button.h
diff --git a/tui/newt/nmt-newt-checkbox.c b/clients/tui/newt/nmt-newt-checkbox.c
index 168fada20..69d9920a4 100644
--- a/tui/newt/nmt-newt-checkbox.c
+++ b/clients/tui/newt/nmt-newt-checkbox.c
@@ -217,19 +217,21 @@ nmt_newt_checkbox_class_init (NmtNewtCheckboxClass *checkbox_class)
*
* 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));
+ 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));
+ 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/clients/tui/newt/nmt-newt-checkbox.h
index c277386b1..c277386b1 100644
--- a/tui/newt/nmt-newt-checkbox.h
+++ b/clients/tui/newt/nmt-newt-checkbox.h
diff --git a/tui/newt/nmt-newt-component.c b/clients/tui/newt/nmt-newt-component.c
index 877b53dbf..98f6df63f 100644
--- a/tui/newt/nmt-newt-component.c
+++ b/clients/tui/newt/nmt-newt-component.c
@@ -288,10 +288,11 @@ nmt_newt_component_class_init (NmtNewtComponentClass *component_class)
*
* 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));
+ g_object_class_install_property
+ (object_class, PROP_COMPONENT,
+ g_param_spec_pointer ("component", "", "",
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NmtNewtComponent:sensitive:
*
@@ -299,9 +300,10 @@ nmt_newt_component_class_init (NmtNewtComponentClass *component_class)
* 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));
+ 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/clients/tui/newt/nmt-newt-component.h
index 2ffa018e1..2ffa018e1 100644
--- a/tui/newt/nmt-newt-component.h
+++ b/clients/tui/newt/nmt-newt-component.h
diff --git a/tui/newt/nmt-newt-container.c b/clients/tui/newt/nmt-newt-container.c
index 03f677fbd..03f677fbd 100644
--- a/tui/newt/nmt-newt-container.c
+++ b/clients/tui/newt/nmt-newt-container.c
diff --git a/tui/newt/nmt-newt-container.h b/clients/tui/newt/nmt-newt-container.h
index 6f182925d..6f182925d 100644
--- a/tui/newt/nmt-newt-container.h
+++ b/clients/tui/newt/nmt-newt-container.h
diff --git a/tui/newt/nmt-newt-entry-numeric.c b/clients/tui/newt/nmt-newt-entry-numeric.c
index 753c209a3..416b4b79b 100644
--- a/tui/newt/nmt-newt-entry-numeric.c
+++ b/clients/tui/newt/nmt-newt-entry-numeric.c
@@ -193,21 +193,23 @@ nmt_newt_entry_numeric_class_init (NmtNewtEntryNumericClass *entry_class)
* 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));
+ 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));
+ 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/clients/tui/newt/nmt-newt-entry-numeric.h
index 43ac34490..43ac34490 100644
--- a/tui/newt/nmt-newt-entry-numeric.h
+++ b/clients/tui/newt/nmt-newt-entry-numeric.h
diff --git a/tui/newt/nmt-newt-entry.c b/clients/tui/newt/nmt-newt-entry.c
index c98fcee8a..7c92d00ad 100644
--- a/tui/newt/nmt-newt-entry.c
+++ b/clients/tui/newt/nmt-newt-entry.c
@@ -496,41 +496,45 @@ nmt_newt_entry_class_init (NmtNewtEntryClass *entry_class)
*
* 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));
+ 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));
+ 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));
+ 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));
+ 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/clients/tui/newt/nmt-newt-entry.h
index 8df0b1370..8df0b1370 100644
--- a/tui/newt/nmt-newt-entry.h
+++ b/clients/tui/newt/nmt-newt-entry.h
diff --git a/tui/newt/nmt-newt-form.c b/clients/tui/newt/nmt-newt-form.c
index 0c2063be7..19bd39989 100644
--- a/tui/newt/nmt-newt-form.c
+++ b/clients/tui/newt/nmt-newt-form.c
@@ -273,7 +273,7 @@ nmt_newt_form_destroy (NmtNewtForm *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
+ * (eg, so libnm 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).
@@ -627,117 +627,127 @@ nmt_newt_form_class_init (NmtNewtFormClass *form_class)
* 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));
+ 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));
+ 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));
+ 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));
+ 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));
+ 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));
+ 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));
+ 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));
+ 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));
+ 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));
+ 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/clients/tui/newt/nmt-newt-form.h
index be95eb68a..be95eb68a 100644
--- a/tui/newt/nmt-newt-form.h
+++ b/clients/tui/newt/nmt-newt-form.h
diff --git a/tui/newt/nmt-newt-grid.c b/clients/tui/newt/nmt-newt-grid.c
index ac9673345..ac9673345 100644
--- a/tui/newt/nmt-newt-grid.c
+++ b/clients/tui/newt/nmt-newt-grid.c
diff --git a/tui/newt/nmt-newt-grid.h b/clients/tui/newt/nmt-newt-grid.h
index f36a38ee8..f36a38ee8 100644
--- a/tui/newt/nmt-newt-grid.h
+++ b/clients/tui/newt/nmt-newt-grid.h
diff --git a/tui/newt/nmt-newt-hacks.c b/clients/tui/newt/nmt-newt-hacks.c
index 2d9b1725a..2d9b1725a 100644
--- a/tui/newt/nmt-newt-hacks.c
+++ b/clients/tui/newt/nmt-newt-hacks.c
diff --git a/tui/newt/nmt-newt-hacks.h b/clients/tui/newt/nmt-newt-hacks.h
index ba8464af0..ba8464af0 100644
--- a/tui/newt/nmt-newt-hacks.h
+++ b/clients/tui/newt/nmt-newt-hacks.h
diff --git a/tui/newt/nmt-newt-label.c b/clients/tui/newt/nmt-newt-label.c
index a9d44b04f..9c4df8ed4 100644
--- a/tui/newt/nmt-newt-label.c
+++ b/clients/tui/newt/nmt-newt-label.c
@@ -295,29 +295,32 @@ nmt_newt_label_class_init (NmtNewtLabelClass *label_class)
*
* 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));
+ 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));
+ 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));
+ 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/clients/tui/newt/nmt-newt-label.h
index a4e0dcca5..a4e0dcca5 100644
--- a/tui/newt/nmt-newt-label.h
+++ b/clients/tui/newt/nmt-newt-label.h
diff --git a/tui/newt/nmt-newt-listbox.c b/clients/tui/newt/nmt-newt-listbox.c
index 78c55dbe3..e450df912 100644
--- a/tui/newt/nmt-newt-listbox.c
+++ b/clients/tui/newt/nmt-newt-listbox.c
@@ -493,51 +493,56 @@ nmt_newt_listbox_class_init (NmtNewtListboxClass *listbox_class)
*
* 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));
+ 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));
+ 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));
+ 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));
+ 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));
+ 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/clients/tui/newt/nmt-newt-listbox.h
index c18c9f8e6..c18c9f8e6 100644
--- a/tui/newt/nmt-newt-listbox.h
+++ b/clients/tui/newt/nmt-newt-listbox.h
diff --git a/tui/newt/nmt-newt-popup.c b/clients/tui/newt/nmt-newt-popup.c
index e9757eac2..b604eaaa3 100644
--- a/tui/newt/nmt-newt-popup.c
+++ b/clients/tui/newt/nmt-newt-popup.c
@@ -147,12 +147,27 @@ nmt_newt_popup_activated (NmtNewtWidget *widget)
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_set_padding (listbox, 1, 0, 1, 0);
nmt_newt_widget_size_request (listbox, &list_w, &list_h);
+
+ g_object_get (nmt_newt_widget_get_form (widget),
+ "x", &window_x,
+ "y", &window_y,
+ NULL);
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;
+ /* (window_x + button_x) is the screen X coordinate of the newtComponent. A
+ * newtButton labelled "Foo" is rendered as " <Foo>" (with a preceding
+ * space), so the "F" is at (window_x + button_x + 2). We've added 1 column
+ * of padding to the left of the listbox, so we need to position the popup
+ * at (window_x + button_x + 1) in order for its text to be aligned with the
+ * button's text. (The x and y coordinates given to NmtNewtForm are the
+ * coordinates of the top left of the window content, ignoring the border
+ * graphics.)
+ */
+ window_x += button_x + 1;
+ window_y += button_y - priv->active;
form = g_object_new (NMT_TYPE_NEWT_FORM,
"x", window_x,
@@ -325,19 +340,21 @@ nmt_newt_popup_class_init (NmtNewtPopupClass *popup_class)
*
* 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));
+ 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));
+ 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/clients/tui/newt/nmt-newt-popup.h
index 643ea2d8c..643ea2d8c 100644
--- a/tui/newt/nmt-newt-popup.h
+++ b/clients/tui/newt/nmt-newt-popup.h
diff --git a/tui/newt/nmt-newt-section.c b/clients/tui/newt/nmt-newt-section.c
index 094b41b73..1a5035fc0 100644
--- a/tui/newt/nmt-newt-section.c
+++ b/clients/tui/newt/nmt-newt-section.c
@@ -30,8 +30,9 @@
* 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.
+ * In addition to the header and body, the #NmtNewtSection also
+ * optionally draws a border along the left side, indicating the
+ * extent of the section.
*/
#include "config.h"
@@ -54,6 +55,7 @@ typedef struct {
NmtNewtWidget *body;
int bheight_req, bwidth_req;
+ gboolean show_border;
NmtNewtWidget *border_grid;
NmtNewtWidget *border_open_label;
NmtNewtWidget *border_closed_label;
@@ -68,6 +70,7 @@ static char *closed_glyph, *open_glyph, *line_glyph, *end_glyph;
enum {
PROP_0,
+ PROP_SHOW_BORDER,
PROP_OPEN,
LAST_PROP
@@ -75,15 +78,17 @@ enum {
/**
* nmt_newt_section_new:
+ * @show_border: whether to show the border on the side of the section
*
* Creates a new #NmtNewtSection
*
* Returns: a new #NmtNewtSection
*/
NmtNewtWidget *
-nmt_newt_section_new (void)
+nmt_newt_section_new (gboolean show_border)
{
return g_object_new (NMT_TYPE_NEWT_SECTION,
+ "show-border", show_border,
NULL);
}
@@ -93,6 +98,8 @@ 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->show_border = TRUE;
+
priv->border_grid = nmt_newt_grid_new ();
parent_class->add (NMT_NEWT_CONTAINER (section), priv->border_grid);
@@ -224,10 +231,12 @@ nmt_newt_section_get_components (NmtNewtWidget *widget)
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);
+ if (priv->show_border) {
+ 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++)
@@ -251,16 +260,20 @@ nmt_newt_section_size_request (NmtNewtWidget *widget,
int *height)
{
NmtNewtSectionPrivate *priv = NMT_NEWT_SECTION_GET_PRIVATE (widget);
- int border_width, border_height;
+ int w_ignore, h_ignore;
g_return_if_fail (priv->header != NULL && priv->body != NULL);
- nmt_newt_widget_size_request (priv->border_grid, &border_width, &border_height);
+ if (priv->show_border)
+ nmt_newt_widget_size_request (priv->border_grid, &w_ignore, &h_ignore);
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;
+ if (priv->open)
+ *height = priv->hheight_req + priv->bheight_req + (priv->show_border ? 1 : 0);
+ else
+ *height = priv->hheight_req;
}
static void
@@ -308,10 +321,16 @@ nmt_newt_section_size_allocate (NmtNewtWidget *widget,
{
NmtNewtSectionPrivate *priv = NMT_NEWT_SECTION_GET_PRIVATE (widget);
- adjust_border_for_allocation (priv, height);
+ if (priv->show_border) {
+ int w_ignore, h_ignore;
+
+ adjust_border_for_allocation (priv, height);
+ nmt_newt_widget_size_request (priv->border_grid, &w_ignore, &h_ignore);
+ 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);
+ } else
+ nmt_newt_widget_size_allocate (priv->header, x, y, width, priv->hheight_req);
- 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);
@@ -327,6 +346,10 @@ nmt_newt_section_set_property (GObject *object,
NmtNewtSectionPrivate *priv = NMT_NEWT_SECTION_GET_PRIVATE (object);
switch (prop_id) {
+ case PROP_SHOW_BORDER:
+ priv->show_border = g_value_get_boolean (value);
+ nmt_newt_widget_needs_rebuild (NMT_NEWT_WIDGET (object));
+ break;
case PROP_OPEN:
priv->open = g_value_get_boolean (value);
nmt_newt_widget_needs_rebuild (NMT_NEWT_WIDGET (object));
@@ -346,6 +369,9 @@ nmt_newt_section_get_property (GObject *object,
NmtNewtSectionPrivate *priv = NMT_NEWT_SECTION_GET_PRIVATE (object);
switch (prop_id) {
+ case PROP_SHOW_BORDER:
+ g_value_set_boolean (value, priv->show_border);
+ break;
case PROP_OPEN:
g_value_set_boolean (value, priv->open);
break;
@@ -378,27 +404,40 @@ nmt_newt_section_class_init (NmtNewtSectionClass *section_class)
/* properties */
/**
+ * NmtNewtSection:show-border:
+ *
+ * %TRUE if the section should show a border along the left side.
+ */
+ g_object_class_install_property
+ (object_class, PROP_SHOW_BORDER,
+ g_param_spec_boolean ("show-border", "", "",
+ TRUE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
* 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));
+ 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);
+ if (!*closed_glyph || !*open_glyph || !*line_glyph || !*end_glyph) {
+ g_free (closed_glyph);
+ g_free (open_glyph);
+ g_free (line_glyph);
+ g_free (end_glyph);
closed_glyph = g_strdup ("-");
open_glyph = g_strdup ("+");
diff --git a/tui/newt/nmt-newt-section.h b/clients/tui/newt/nmt-newt-section.h
index a943ba200..6bf59ebbb 100644
--- a/tui/newt/nmt-newt-section.h
+++ b/clients/tui/newt/nmt-newt-section.h
@@ -42,7 +42,7 @@ typedef struct {
GType nmt_newt_section_get_type (void);
-NmtNewtWidget *nmt_newt_section_new (void);
+NmtNewtWidget *nmt_newt_section_new (gboolean show_border);
void nmt_newt_section_set_header (NmtNewtSection *section,
NmtNewtWidget *header);
diff --git a/tui/newt/nmt-newt-separator.c b/clients/tui/newt/nmt-newt-separator.c
index 07deb1af9..07deb1af9 100644
--- a/tui/newt/nmt-newt-separator.c
+++ b/clients/tui/newt/nmt-newt-separator.c
diff --git a/tui/newt/nmt-newt-separator.h b/clients/tui/newt/nmt-newt-separator.h
index 3f4183d58..3f4183d58 100644
--- a/tui/newt/nmt-newt-separator.h
+++ b/clients/tui/newt/nmt-newt-separator.h
diff --git a/tui/newt/nmt-newt-stack.c b/clients/tui/newt/nmt-newt-stack.c
index 1b31d58fe..d94bdebff 100644
--- a/tui/newt/nmt-newt-stack.c
+++ b/clients/tui/newt/nmt-newt-stack.c
@@ -348,19 +348,21 @@ nmt_newt_stack_class_init (NmtNewtStackClass *stack_class)
*
* 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));
+ 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));
+ 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/clients/tui/newt/nmt-newt-stack.h
index 09afe4baf..09afe4baf 100644
--- a/tui/newt/nmt-newt-stack.h
+++ b/clients/tui/newt/nmt-newt-stack.h
diff --git a/tui/newt/nmt-newt-textbox.c b/clients/tui/newt/nmt-newt-textbox.c
index 67b8b247d..3d297160d 100644
--- a/tui/newt/nmt-newt-textbox.c
+++ b/clients/tui/newt/nmt-newt-textbox.c
@@ -261,32 +261,35 @@ nmt_newt_textbox_class_init (NmtNewtTextboxClass *textbox_class)
*
* 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));
+ 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));
+ 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));
+ 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/clients/tui/newt/nmt-newt-textbox.h
index b3743aea0..b3743aea0 100644
--- a/tui/newt/nmt-newt-textbox.h
+++ b/clients/tui/newt/nmt-newt-textbox.h
diff --git a/tui/newt/nmt-newt-toggle-button.c b/clients/tui/newt/nmt-newt-toggle-button.c
index d435e459e..ec4d9aca5 100644
--- a/tui/newt/nmt-newt-toggle-button.c
+++ b/clients/tui/newt/nmt-newt-toggle-button.c
@@ -206,29 +206,32 @@ nmt_newt_toggle_button_class_init (NmtNewtToggleButtonClass *button_class)
*
* 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));
+ 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));
+ 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));
+ 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/clients/tui/newt/nmt-newt-toggle-button.h
index e54c6d3fa..e54c6d3fa 100644
--- a/tui/newt/nmt-newt-toggle-button.h
+++ b/clients/tui/newt/nmt-newt-toggle-button.h
diff --git a/tui/newt/nmt-newt-types.h b/clients/tui/newt/nmt-newt-types.h
index 608f7ff6f..608f7ff6f 100644
--- a/tui/newt/nmt-newt-types.h
+++ b/clients/tui/newt/nmt-newt-types.h
diff --git a/tui/newt/nmt-newt-utils.c b/clients/tui/newt/nmt-newt-utils.c
index 68d8c449e..70a65a848 100644
--- a/tui/newt/nmt-newt-utils.c
+++ b/clients/tui/newt/nmt-newt-utils.c
@@ -30,6 +30,7 @@
#include <glib/gi18n-lib.h>
+#include "nm-glib-compat.h"
#include "nmt-newt-utils.h"
static void
diff --git a/tui/newt/nmt-newt-utils.h b/clients/tui/newt/nmt-newt-utils.h
index 3b37868a0..3b37868a0 100644
--- a/tui/newt/nmt-newt-utils.h
+++ b/clients/tui/newt/nmt-newt-utils.h
diff --git a/tui/newt/nmt-newt-widget.c b/clients/tui/newt/nmt-newt-widget.c
index 24ee8b0a6..24c94db94 100644
--- a/tui/newt/nmt-newt-widget.c
+++ b/clients/tui/newt/nmt-newt-widget.c
@@ -622,22 +622,24 @@ nmt_newt_widget_class_init (NmtNewtWidgetClass *widget_class)
*
* 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));
+ 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));
+ g_object_class_install_property
+ (object_class, PROP_VISIBLE,
+ g_param_spec_boolean ("visible", "", "",
+ TRUE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NmtNewtWidget:valid:
*
@@ -645,20 +647,22 @@ nmt_newt_widget_class_init (NmtNewtWidgetClass *widget_class)
* 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));
+ 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));
+ 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/clients/tui/newt/nmt-newt-widget.h
index a526a674c..a526a674c 100644
--- a/tui/newt/nmt-newt-widget.h
+++ b/clients/tui/newt/nmt-newt-widget.h
diff --git a/tui/newt/nmt-newt.h b/clients/tui/newt/nmt-newt.h
index 6a9c8d9fb..6a9c8d9fb 100644
--- a/tui/newt/nmt-newt.h
+++ b/clients/tui/newt/nmt-newt.h
diff --git a/clients/tui/nm-editor-bindings.c b/clients/tui/nm-editor-bindings.c
new file mode 100644
index 000000000..9218c31f5
--- /dev/null
+++ b/clients/tui/nm-editor-bindings.c
@@ -0,0 +1,1101 @@
+/* -*- 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 "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
+parse_addr_prefix (const char *text,
+ int family,
+ char **addr,
+ guint32 *prefix)
+{
+ const char *slash;
+ char *addrstr, *end;
+ gboolean valid;
+
+ slash = strchr (text, '/');
+
+ if (slash)
+ addrstr = g_strndup (text, slash - text);
+ else
+ addrstr = g_strdup (text);
+ valid = nm_utils_ipaddr_valid (family, addrstr);
+
+ 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;
+ }
+
+ if (addr && valid)
+ *addr = addrstr;
+ else
+ g_free (addrstr);
+ return valid;
+}
+
+static gboolean
+ip_addresses_with_prefix_to_strv (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ GPtrArray *addrs;
+ NMIPAddress *addr;
+ const char *addrstr;
+ guint32 prefix;
+ char **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];
+ addrstr = nm_ip_address_get_address (addr);
+ prefix = nm_ip_address_get_prefix (addr);
+
+ if (addrstr)
+ strings[i] = g_strdup_printf ("%s/%d", addrstr, (int) prefix);
+ else
+ strings[i] = g_strdup ("");
+ }
+
+ g_value_take_boxed (target_value, strings);
+ return TRUE;
+}
+
+static gboolean
+ip_addresses_with_prefix_from_strv (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ int family = GPOINTER_TO_INT (user_data);
+ char **strings;
+ GPtrArray *addrs;
+ NMIPAddress *addr;
+ char *addrstr;
+ guint32 prefix;
+ int i;
+
+ strings = g_value_get_boxed (source_value);
+ /* Fetch the original property value, so as to preserve their extra attributes */
+ 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) {
+ if (family == AF_INET)
+ addr = nm_ip_address_new (AF_INET, "0.0.0.0", 32, NULL);
+ else
+ addr = nm_ip_address_new (AF_INET6, "::", 128, NULL);
+ g_ptr_array_add (addrs, addr);
+ } else
+ addr = addrs->pdata[i];
+
+ if (!parse_addr_prefix (strings[i], family, &addrstr, &prefix)) {
+ g_ptr_array_unref (addrs);
+ return FALSE;
+ }
+
+ nm_ip_address_set_address (addr, addrstr);
+ nm_ip_address_set_prefix (addr, prefix);
+ g_free (addrstr);
+ }
+
+ g_ptr_array_set_size (addrs, i);
+ g_value_take_boxed (target_value, addrs);
+ return TRUE;
+}
+
+/**
+ * nm_editor_bind_ip_addresses_with_prefix_to_strv:
+ * @family: the IP address family
+ * @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 #GPtrArray-of-#NMIPAddress property @source_property on @source to
+ * the %G_TYPE_STRV property @target_property on @target.
+ *
+ * Each #NMIPAddress in @source_property will be converted to a string of the
+ * form "ip.ad.dr.ess/prefix" or "ip:ad:dr:ess/prefix" in @target_property (and
+ * vice versa if %G_BINDING_BIDIRECTIONAL) is specified.
+ */
+void
+nm_editor_bind_ip_addresses_with_prefix_to_strv (int family,
+ 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,
+ ip_addresses_with_prefix_to_strv,
+ ip_addresses_with_prefix_from_strv,
+ GINT_TO_POINTER (family), NULL);
+}
+
+static gboolean
+ip_addresses_check_and_copy (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ int family = GPOINTER_TO_INT (user_data);
+ char **strings;
+ int i;
+
+ strings = g_value_get_boxed (source_value);
+
+ for (i = 0; strings[i]; i++) {
+ if (!nm_utils_ipaddr_valid (family, strings[i]))
+ return FALSE;
+ }
+
+ g_value_set_boxed (target_value, strings);
+ return TRUE;
+}
+
+/**
+ * nm_editor_bind_ip_addresses_to_strv:
+ * @family: the IP address family
+ * @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 %G_TYPE_STRV property @source_property on @source to the
+ * %G_TYPE_STRV property @target_property on @target, verifying that
+ * each string is a valid address of type @family when copying.
+ */
+void
+nm_editor_bind_ip_addresses_to_strv (int family,
+ 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,
+ ip_addresses_check_and_copy,
+ ip_addresses_check_and_copy,
+ GINT_TO_POINTER (family), NULL);
+}
+
+static gboolean
+ip_gateway_to_string (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ g_value_set_string (target_value, g_value_get_string (source_value));
+ return TRUE;
+}
+
+static gboolean
+ip_gateway_from_string (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ int family = GPOINTER_TO_INT (user_data);
+ const char *gateway;
+
+ gateway = g_value_get_string (source_value);
+ if (gateway && !nm_utils_ipaddr_valid (family, gateway))
+ gateway = NULL;
+
+ g_value_set_string (target_value, gateway);
+ return TRUE;
+}
+
+static gboolean
+ip_addresses_to_gateway (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ GPtrArray *addrs;
+
+ addrs = g_value_get_boxed (source_value);
+ if (addrs->len == 0) {
+ g_value_set_string (target_value, NULL);
+ return TRUE;
+ } else
+ return FALSE;
+}
+
+static gboolean
+ip_addresses_to_sensitivity (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ GPtrArray *addrs;
+
+ addrs = g_value_get_boxed (source_value);
+ g_value_set_boolean (target_value, addrs->len != 0);
+ return TRUE;
+}
+
+/**
+ * nm_editor_bind_ip_gateway_to_string:
+ * @family: the IP address family
+ * @source: the source #NMSettingIPConfig
+ * @target: the target object (eg, an #NmtIPEntry)
+ * @target_property: the property on @target to bind (eg, "text")
+ * @target_sensitive_property: the "sensitivity" property on @target to bind
+ * @flags: %GBindingFlags
+ *
+ * Binds the #NMSettingIPConfig:gateway property on @source to the
+ * %G_TYPE_STRING property @target_property and %G_TYPE_BOOLEAN property
+ * @target_sensitive_property on @target, also taking the
+ * #NMSettingIPConfig:addresses property on @source into account.
+ *
+ * In particular, if @source has no static IP addresses, then @target_property
+ * will be set to "" and @target_sensitive_property will be set to %FALSE.
+ *
+ * If @source has at least one static IP address, then
+ * @target_sensitive_property will be set to %TRUE, @target_property will be
+ * initialized from @source's #NMSettingIPConfig:gateway, and @source will be
+ * updated with the value of @target_property whenever it contains a valid IP
+ * address.
+ */
+void
+nm_editor_bind_ip_gateway_to_string (int family,
+ NMSettingIPConfig *source,
+ gpointer target,
+ const gchar *target_property,
+ const gchar *target_sensitive_property,
+ GBindingFlags flags)
+{
+ g_object_bind_property_full (source, "gateway",
+ target, target_property,
+ flags,
+ ip_gateway_to_string,
+ ip_gateway_from_string,
+ GINT_TO_POINTER (family), NULL);
+ g_object_bind_property_full (source, "addresses",
+ source, "gateway",
+ (flags & G_BINDING_SYNC_CREATE),
+ ip_addresses_to_gateway,
+ NULL,
+ NULL, NULL);
+ g_object_bind_property_full (source, "addresses",
+ target, target_sensitive_property,
+ (flags & G_BINDING_SYNC_CREATE),
+ ip_addresses_to_sensitivity,
+ NULL,
+ NULL, NULL);
+}
+
+static gboolean
+ip_route_transform_to_dest_string (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ NMIPRoute *route;
+ const char *addrstr;
+ char *string;
+
+ route = g_value_get_boxed (source_value);
+ if (route)
+ addrstr = nm_ip_route_get_dest (route);
+ else
+ addrstr = NULL;
+
+ if (addrstr) {
+ string = g_strdup_printf ("%s/%d", addrstr, (int) nm_ip_route_get_prefix (route));
+ g_value_take_string (target_value, string);
+ } else
+ g_value_set_string (target_value, "");
+ return TRUE;
+}
+
+static gboolean
+ip_route_transform_to_next_hop_string (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ NMIPRoute *route;
+ const char *addrstr;
+
+ route = g_value_get_boxed (source_value);
+ if (route) {
+ addrstr = nm_ip_route_get_next_hop (route);
+ if (!addrstr)
+ addrstr = "";
+ } else
+ addrstr = "";
+
+ g_value_set_string (target_value, addrstr);
+ return TRUE;
+}
+
+static gboolean
+ip_route_transform_to_metric_string (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ NMIPRoute *route;
+ char *string;
+
+ route = g_value_get_boxed (source_value);
+ if (route && nm_ip_route_get_dest (route) && nm_ip_route_get_metric (route) != -1) {
+ string = g_strdup_printf ("%lu", (gulong) nm_ip_route_get_metric (route));
+ g_value_take_string (target_value, string);
+ } else
+ g_value_set_string (target_value, "");
+ return TRUE;
+}
+
+static gboolean
+ip_route_transform_from_dest_string (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ int family = GPOINTER_TO_INT (user_data);
+ NMIPRoute *route;
+ const char *text;
+ char *addrstr;
+ guint32 prefix;
+
+ text = g_value_get_string (source_value);
+ if (!parse_addr_prefix (text, family, &addrstr, &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_ip_route_set_dest (route, addrstr);
+ nm_ip_route_set_prefix (route, prefix);
+ g_free (addrstr);
+
+ g_value_take_boxed (target_value, route);
+ return TRUE;
+}
+
+static gboolean
+ip_route_transform_from_next_hop_string (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ int family = GPOINTER_TO_INT (user_data);
+ NMIPRoute *route;
+ const char *text;
+
+ text = g_value_get_string (source_value);
+ if (*text) {
+ if (!nm_utils_ipaddr_valid (family, text))
+ return FALSE;
+ } else
+ text = NULL;
+
+ /* Fetch the original property value */
+ g_object_get (g_binding_get_source (binding),
+ g_binding_get_source_property (binding), &route,
+ NULL);
+
+ nm_ip_route_set_next_hop (route, text);
+
+ g_value_take_boxed (target_value, route);
+ return TRUE;
+}
+
+static gboolean
+ip_route_transform_from_metric_string (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ NMIPRoute *route;
+ const char *text;
+ gint64 metric;
+
+ text = g_value_get_string (source_value);
+ if (*text)
+ metric = strtoul (text, NULL, 10);
+ else
+ metric = -1;
+
+ /* Fetch the original property value */
+ g_object_get (g_binding_get_source (binding),
+ g_binding_get_source_property (binding), &route,
+ NULL);
+
+ nm_ip_route_set_metric (route, metric);
+
+ g_value_take_boxed (target_value, route);
+ return TRUE;
+}
+
+/**
+ * nm_editor_bind_ip_route_to_strings:
+ * @family: the IP address family
+ * @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 #NMIPRoute-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_property
+ * is a plain IP address, and @metric_target_property is a number.
+ */
+void
+nm_editor_bind_ip_route_to_strings (int family,
+ 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,
+ ip_route_transform_to_dest_string,
+ ip_route_transform_from_dest_string,
+ GINT_TO_POINTER (family), NULL);
+ g_object_bind_property_full (source, source_property,
+ next_hop_target, next_hop_target_property,
+ flags,
+ ip_route_transform_to_next_hop_string,
+ ip_route_transform_from_next_hop_string,
+ GINT_TO_POINTER (family), NULL);
+ g_object_bind_property_full (source, source_property,
+ metric_target, metric_target_property,
+ flags,
+ ip_route_transform_to_metric_string,
+ ip_route_transform_from_metric_string,
+ GINT_TO_POINTER (family), 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;
+ NMSettingConnection *s_con;
+
+ 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_connection_get_interface_name (binding->s_con);
+ 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,
+ NMSettingConnection *s_con)
+{
+ NMEditorVlanWidgetBinding *binding;
+ const char *ifname;
+
+ binding = g_slice_new0 (NMEditorVlanWidgetBinding);
+ binding->s_vlan = s_vlan;
+ binding->s_con = s_con;
+
+ g_signal_connect (s_con, "notify::" NM_SETTING_CONNECTION_INTERFACE_NAME,
+ G_CALLBACK (vlan_settings_changed), binding);
+
+ g_object_weak_ref (G_OBJECT (s_vlan), vlan_target_destroyed, binding);
+
+ ifname = nm_setting_connection_get_interface_name (s_con);
+ 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/clients/tui/nm-editor-bindings.h
index a7a32dd14..c4ed95d53 100644
--- a/tui/nm-editor-bindings.h
+++ b/clients/tui/nm-editor-bindings.h
@@ -19,58 +19,34 @@
#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>
+#include <NetworkManager.h>
G_BEGIN_DECLS
void nm_editor_bindings_init (void);
-void nm_editor_bind_ip4_addresses_with_prefix_to_strv (gpointer source,
+void nm_editor_bind_ip_addresses_with_prefix_to_strv (int family,
+ gpointer source,
const gchar *source_property,
gpointer target,
const gchar *target_property,
GBindingFlags flags);
-void nm_editor_bind_ip4_addresses_to_strv (gpointer source,
+void nm_editor_bind_ip_addresses_to_strv (int family,
+ 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,
+void nm_editor_bind_ip_gateway_to_string (int family,
+ NMSettingIPConfig *source,
gpointer target,
const gchar *target_property,
+ const gchar *target_sensitive_property,
GBindingFlags flags);
-void nm_editor_bind_ip6_route_to_strings (gpointer source,
+void nm_editor_bind_ip_route_to_strings (int family,
+ gpointer source,
const gchar *source_property,
gpointer dest_target,
const gchar *dest_target_property,
@@ -92,7 +68,8 @@ void nm_editor_bind_wireless_security_wep_key (NMSettingWirelessSecurity
const char *key_selector_property,
GBindingFlags flags);
-void nm_editor_bind_vlan_name (NMSettingVlan *s_vlan);
+void nm_editor_bind_vlan_name (NMSettingVlan *s_vlan,
+ NMSettingConnection *s_con);
G_END_DECLS
diff --git a/tui/nm-editor-utils.c b/clients/tui/nm-editor-utils.c
index 4ac0eb641..f936c9594 100644
--- a/tui/nm-editor-utils.c
+++ b/clients/tui/nm-editor-utils.c
@@ -28,16 +28,7 @@
#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 <NetworkManager.h>
#include "nm-editor-utils.h"
#if 0
@@ -185,6 +176,7 @@ nm_editor_utils_get_connection_type_list (void)
item->id_format = _("Mobile broadband connection %d");
item->no_autoconnect = TRUE;
g_ptr_array_add (array, item);
+#endif
item = g_new0 (NMEditorConnectionTypeDataReal, 1);
item->data.name = _("DSL");
@@ -194,7 +186,6 @@ nm_editor_utils_get_connection_type_list (void)
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");
@@ -263,25 +254,25 @@ nm_editor_utils_get_connection_type_list (void)
}
static char *
-get_available_connection_name (const char *format,
- NMRemoteSettings *settings)
+get_available_connection_name (const char *format,
+ NMClient *client)
{
- GSList *connections, *iter, *names = NULL;
+ const GPtrArray *conns;
+ GSList *names = NULL, *iter;
char *cname = NULL;
int i = 0;
- connections = nm_remote_settings_list_connections (settings);
- for (iter = connections; iter; iter = iter->next) {
+ conns = nm_client_get_connections (client);
+ for (i = 0; i < conns->len; i++) {
const char *id;
- id = nm_connection_get_id (NM_CONNECTION (iter->data));
+ id = nm_connection_get_id (NM_CONNECTION (conns->pdata[i]));
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)) {
+ for (i = 1; !cname && i < 10000; i++) {
char *temp;
gboolean found = FALSE;
@@ -306,7 +297,7 @@ get_available_connection_name (const char *format,
* 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
+ * @client: an #NMClient
*
* Creates a new #NMConnection of the given type, automatically
* creating a UUID and an appropriate not-currently-in-use connection
@@ -318,9 +309,9 @@ get_available_connection_name (const char *format,
* Returns: a new #NMConnection
*/
NMConnection *
-nm_editor_utils_create_connection (GType type,
- NMConnection *master,
- NMRemoteSettings *settings)
+nm_editor_utils_create_connection (GType type,
+ NMConnection *master,
+ NMClient *client)
{
NMEditorConnectionTypeData **types;
NMEditorConnectionTypeDataReal *type_data = NULL;
@@ -338,7 +329,7 @@ nm_editor_utils_create_connection (GType type,
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);
+ master_type = nm_setting_lookup_type (master_setting_type);
}
types = nm_editor_utils_get_connection_type_list ();
@@ -354,7 +345,7 @@ nm_editor_utils_create_connection (GType type,
return NULL;
}
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
s_con = NM_SETTING_CONNECTION (nm_setting_connection_new ());
nm_connection_add_setting (connection, NM_SETTING (s_con));
@@ -368,7 +359,7 @@ nm_editor_utils_create_connection (GType type,
}
uuid = nm_utils_uuid_generate ();
- id = get_available_connection_name (type_data->id_format, settings);
+ id = get_available_connection_name (type_data->id_format, client);
g_object_set (s_con,
NM_SETTING_CONNECTION_UUID, uuid,
@@ -410,7 +401,7 @@ nm_editor_utils_get_connection_type_data (NMConnection *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);
+ conn_gtype = nm_setting_lookup_type (conn_type);
g_return_val_if_fail (conn_gtype != G_TYPE_INVALID, NULL);
types = nm_editor_utils_get_connection_type_list ();
diff --git a/tui/nm-editor-utils.h b/clients/tui/nm-editor-utils.h
index 4b9ad5edb..5e402ce71 100644
--- a/tui/nm-editor-utils.h
+++ b/clients/tui/nm-editor-utils.h
@@ -19,8 +19,7 @@
#ifndef NM_EDITOR_UTILS_H
#define NM_EDITOR_UTILS_H
-#include <glib-object.h>
-#include <nm-remote-settings.h>
+#include <NetworkManager.h>
G_BEGIN_DECLS
@@ -35,9 +34,9 @@ typedef struct {
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);
+NMConnection *nm_editor_utils_create_connection (GType type,
+ NMConnection *master,
+ NMClient *client);
G_END_DECLS
diff --git a/tui/nmt-address-list.c b/clients/tui/nmt-address-list.c
index da301a2fd..42873c521 100644
--- a/tui/nmt-address-list.c
+++ b/clients/tui/nmt-address-list.c
@@ -35,7 +35,6 @@
#include <stdlib.h>
#include <string.h>
-#include <dbus/dbus-glib.h>
#include <glib/gi18n-lib.h>
#include "nmt-address-list.h"
@@ -173,7 +172,7 @@ nmt_address_list_add_clicked (NmtWidgetList *list)
NmtAddressListPrivate *priv = NMT_ADDRESS_LIST_GET_PRIVATE (list);
int len;
- len = g_strv_length (priv->strings);
+ len = priv->strings ? g_strv_length (priv->strings) : 0;
priv->strings = g_renew (char *, priv->strings, len + 2);
priv->strings[len] = g_strdup ("");
priv->strings[len + 1] = NULL;
@@ -265,20 +264,22 @@ nmt_address_list_class_init (NmtAddressListClass *list_class)
*
* 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));
+ 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));
+ 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/clients/tui/nmt-address-list.h
index df7a4f796..df7a4f796 100644
--- a/tui/nmt-address-list.h
+++ b/clients/tui/nmt-address-list.h
diff --git a/tui/nmt-connect-connection-list.c b/clients/tui/nmt-connect-connection-list.c
index 54923ea54..080580663 100644
--- a/tui/nmt-connect-connection-list.c
+++ b/clients/tui/nmt-connect-connection-list.c
@@ -29,9 +29,7 @@
#include <stdlib.h>
#include <glib/gi18n-lib.h>
-#include <nm-access-point.h>
-#include <nm-device-wifi.h>
-#include <nm-utils.h>
+#include <NetworkManager.h>
#include "nmtui.h"
#include "nmt-connect-connection-list.h"
@@ -185,12 +183,12 @@ sort_connections (gconstpointer a,
static void
add_connections_for_device (NmtConnectDevice *nmtdev,
- GSList *connections)
+ const GPtrArray *connections)
{
- GSList *iter;
+ int i;
- for (iter = connections; iter; iter = iter->next) {
- NMConnection *conn = iter->data;
+ for (i = 0; i < connections->len; i++) {
+ NMConnection *conn = connections->pdata[i];
NMSettingConnection *s_con;
s_con = nm_connection_get_setting_connection (conn);
@@ -213,7 +211,7 @@ static char *
hash_ap (NMAccessPoint *ap)
{
unsigned char input[66];
- const GByteArray *ssid;
+ GBytes *ssid;
NM80211Mode mode;
guint32 flags;
guint32 wpa_flags;
@@ -223,7 +221,7 @@ hash_ap (NMAccessPoint *ap)
ssid = nm_access_point_get_ssid (ap);
if (ssid)
- memcpy (input, ssid->data, ssid->len);
+ memcpy (input, g_bytes_get_data (ssid, NULL), g_bytes_get_size (ssid));
mode = nm_access_point_get_mode (ap);
if (mode == NM_802_11_MODE_INFRA)
@@ -259,19 +257,19 @@ hash_ap (NMAccessPoint *ap)
static void
add_connections_for_aps (NmtConnectDevice *nmtdev,
- GSList *connections)
+ const GPtrArray *connections)
{
NmtConnectConnection *nmtconn;
NMConnection *conn;
NMAccessPoint *ap;
const GPtrArray *aps;
GHashTable *seen_ssids;
+ GBytes *ssid;
char *ap_hash;
- GSList *iter;
- int i;
+ int i, c;
aps = nm_device_wifi_get_access_points (NM_DEVICE_WIFI (nmtdev->device));
- if (!aps)
+ if (!aps->len)
return;
seen_ssids = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
@@ -292,10 +290,13 @@ add_connections_for_aps (NmtConnectDevice *nmtdev,
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));
+ ssid = nm_access_point_get_ssid (ap);
+ if (ssid)
+ nmtconn->ssid = nm_utils_ssid_to_utf8 (g_bytes_get_data (ssid, NULL),
+ g_bytes_get_size (ssid));
- for (iter = connections; iter; iter = iter->next) {
- conn = iter->data;
+ for (c = 0; c < connections->len; c++) {
+ conn = connections->pdata[c];
if ( nm_device_connection_valid (nmtdev->device, conn)
&& nm_access_point_connection_valid (ap, conn)) {
nmtconn->name = nm_connection_get_id (conn);
@@ -304,8 +305,8 @@ add_connections_for_aps (NmtConnectDevice *nmtdev,
}
}
- if (!iter)
- nmtconn->name = nmtconn->ssid;
+ if (!nmtconn->name)
+ nmtconn->name = nmtconn->ssid ? nmtconn->ssid : "<unknown>";
nmtdev->conns = g_slist_prepend (nmtdev->conns, nmtconn);
}
@@ -317,7 +318,7 @@ static GSList *
append_nmt_devices_for_devices (GSList *nmt_devices,
const GPtrArray *devices,
char **names,
- GSList *connections)
+ const GPtrArray *connections)
{
NmtConnectDevice *nmtdev;
NMDevice *device;
@@ -348,11 +349,11 @@ append_nmt_devices_for_devices (GSList *nmt_devices,
}
static GSList *
-append_nmt_devices_for_virtual_devices (GSList *nmt_devices,
- GSList *connections)
+append_nmt_devices_for_virtual_devices (GSList *nmt_devices,
+ const GPtrArray *connections)
{
NmtConnectDevice *nmtdev = NULL;
- GSList *iter;
+ int i;
GHashTable *devices_by_name;
char *name;
NMConnection *conn;
@@ -361,8 +362,8 @@ append_nmt_devices_for_virtual_devices (GSList *nmt_devices,
devices_by_name = g_hash_table_new (g_str_hash, g_str_equal);
- for (iter = connections; iter; iter = iter->next) {
- conn = iter->data;
+ for (i = 0; i < connections->len; i++) {
+ conn = connections->pdata[i];
sort_order = get_sort_order_for_connection (conn);
if (sort_order == -1)
continue;
@@ -393,11 +394,11 @@ append_nmt_devices_for_virtual_devices (GSList *nmt_devices,
}
static GSList *
-append_nmt_devices_for_vpns (GSList *nmt_devices,
- GSList *connections)
+append_nmt_devices_for_vpns (GSList *nmt_devices,
+ const GPtrArray *connections)
{
NmtConnectDevice *nmtdev;
- GSList *iter;
+ int i;
NMConnection *conn;
NmtConnectConnection *nmtconn;
@@ -405,8 +406,8 @@ append_nmt_devices_for_vpns (GSList *nmt_devices,
nmtdev->name = g_strdup (_("VPN"));
nmtdev->sort_order = 100;
- for (iter = connections; iter; iter = iter->next) {
- conn = iter->data;
+ for (i = 0; i < connections->len; i++) {
+ conn = connections->pdata[i];
if (!nm_connection_is_type (conn, NM_SETTING_VPN_SETTING_NAME))
continue;
@@ -443,15 +444,14 @@ connection_find_ac (NMConnection *conn,
const GPtrArray *acs)
{
NMActiveConnection *ac;
- const char *path, *ac_path;
+ NMRemoteConnection *ac_conn;
int i;
- path = nm_connection_get_path (conn);
- for (i = 0; acs && i < acs->len; i++) {
+ for (i = 0; i < acs->len; i++) {
ac = acs->pdata[i];
- ac_path = nm_active_connection_get_connection (ac);
+ ac_conn = nm_active_connection_get_connection (ac);
- if (!g_strcmp0 (path, ac_path))
+ if (conn == NM_CONNECTION (ac_conn))
return ac;
}
@@ -463,11 +463,10 @@ 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;
+ const GPtrArray *devices, *acs, *connections;
int max_width;
char **names, *row, active_col;
const char *strength_col;
- GSList *connections;
GSList *nmt_devices, *diter, *citer;
NmtConnectDevice *nmtdev;
NmtConnectConnection *nmtconn;
@@ -478,19 +477,18 @@ nmt_connect_connection_list_rebuild (NmtConnectConnectionList *list)
devices = nm_client_get_devices (nm_client);
acs = nm_client_get_active_connections (nm_client);
- connections = nm_remote_settings_list_connections (nm_settings);
+ connections = nm_client_get_connections (nm_client);
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);
- }
+
+ 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) {
@@ -523,24 +521,16 @@ nmt_connect_connection_list_rebuild (NmtConnectConnectionList *list)
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 = " ____";
+ strength_col = nm_utils_wifi_strength_bars (strength);
} else
- strength_col = "";
+ strength_col = NULL;
- row = g_strdup_printf ("%c %s%-*s%s",
+ row = g_strdup_printf ("%c %s%-*s%s%s",
active_col,
nmtconn->name,
(int)(max_width - nmt_newt_text_width (nmtconn->name)), "",
- strength_col);
+ strength_col ? " " : "",
+ strength_col ? strength_col : "");
nmt_newt_listbox_append (listbox, row, nmtconn);
g_free (row);
@@ -554,17 +544,9 @@ nmt_connect_connection_list_rebuild (NmtConnectConnectionList *list)
}
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)
+rebuild_on_property_changed (GObject *object,
+ GParamSpec *spec,
+ gpointer list)
{
nmt_connect_connection_list_rebuild (list);
}
@@ -575,11 +557,11 @@ 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);
+ G_CALLBACK (rebuild_on_property_changed), list);
+ g_signal_connect (nm_client, "notify::" NM_CLIENT_CONNECTIONS,
+ G_CALLBACK (rebuild_on_property_changed), list);
+ g_signal_connect (nm_client, "notify::" NM_CLIENT_DEVICES,
+ G_CALLBACK (rebuild_on_property_changed), list);
nmt_connect_connection_list_rebuild (list);
@@ -593,8 +575,7 @@ nmt_connect_connection_list_finalize (GObject *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_signal_handlers_disconnect_by_func (nm_client, G_CALLBACK (rebuild_on_property_changed), object);
G_OBJECT_CLASS (nmt_connect_connection_list_parent_class)->finalize (object);
}
@@ -642,9 +623,9 @@ nmt_connect_connection_list_get_connection (NmtConnectConnectionList *list,
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));
+ conn = NM_CONNECTION (nm_client_get_connection_by_uuid (nm_client, identifier));
if (!conn)
- conn = NM_CONNECTION (nm_remote_settings_get_connection_by_id (nm_settings, identifier));
+ conn = NM_CONNECTION (nm_client_get_connection_by_id (nm_client, identifier));
for (diter = priv->nmt_devices; diter; diter = diter->next) {
nmtdev = diter->data;
diff --git a/tui/nmt-connect-connection-list.h b/clients/tui/nmt-connect-connection-list.h
index d47900437..d47900437 100644
--- a/tui/nmt-connect-connection-list.h
+++ b/clients/tui/nmt-connect-connection-list.h
diff --git a/tui/nmt-device-entry.c b/clients/tui/nmt-device-entry.c
index 7ce6d7d42..2af5e584c 100644
--- a/tui/nmt-device-entry.c
+++ b/clients/tui/nmt-device-entry.c
@@ -28,7 +28,7 @@
* matching a known #NMDevice, then it will also display the other
* property in parentheses.
*
- * FIXME: #NmtDeviceEntry is currently an #NmtPageGrid object, so that
+ * FIXME: #NmtDeviceEntry is currently an #NmtEditorGrid 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.
@@ -41,14 +41,12 @@
#include <linux/if_arp.h>
#include <glib/gi18n-lib.h>
-#include <nm-device.h>
-#include <nm-device-infiniband.h>
-#include <nm-utils.h>
+#include <NetworkManager.h>
#include "nmtui.h"
#include "nmt-device-entry.h"
-G_DEFINE_TYPE (NmtDeviceEntry, nmt_device_entry, NMT_TYPE_PAGE_GRID)
+G_DEFINE_TYPE (NmtDeviceEntry, nmt_device_entry, NMT_TYPE_EDITOR_GRID)
#define NMT_DEVICE_ENTRY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_DEVICE_ENTRY, NmtDeviceEntryPrivate))
@@ -59,7 +57,7 @@ typedef struct {
int arptype;
char *interface_name;
- GByteArray *mac_address;
+ char *mac_address;
char *label;
NmtNewtEntry *entry;
@@ -143,14 +141,15 @@ device_entry_parse (NmtDeviceEntry *deventry,
words[1][len - 2] = '\0';
}
- if ( nm_utils_hwaddr_aton (words[0], priv->arptype, buf)
+ len = nm_utils_hwaddr_len (priv->arptype);
+ if ( nm_utils_hwaddr_aton (words[0], buf, len)
&& (!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))) {
+ && (!words[1] || nm_utils_hwaddr_aton (words[1], buf, len))) {
*interface_name = words[0];
*mac_address = NULL;
g_free (words);
@@ -188,9 +187,6 @@ find_device_by_interface_name (NmtDeviceEntry *deventry,
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];
@@ -219,9 +215,6 @@ find_device_by_mac_address (NmtDeviceEntry *deventry,
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;
@@ -260,8 +253,8 @@ update_entry (NmtDeviceEntry *deventry)
}
if (priv->mac_address) {
- mac = nm_utils_hwaddr_ntoa (priv->mac_address->data, priv->arptype);
- mac_device = find_device_by_mac_address (deventry, mac);
+ mac = g_strdup (priv->mac_address);
+ mac_device = find_device_by_mac_address (deventry, priv->mac_address);
} else {
mac = NULL;
mac_device = NULL;
@@ -313,24 +306,21 @@ nmt_device_entry_set_interface_name (NmtDeviceEntry *deventry,
static gboolean
nmt_device_entry_set_mac_address (NmtDeviceEntry *deventry,
- GByteArray *mac_address)
+ const char *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);
+ priv->mac_address = g_strdup (mac_address);
changed = TRUE;
} else if (!mac_address && priv->mac_address) {
- g_clear_pointer (&priv->mac_address, g_byte_array_unref);
+ g_clear_pointer (&priv->mac_address, g_free);
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);
+ && !nm_utils_hwaddr_matches (mac_address, -1, priv->mac_address, -1)) {
+ g_free (priv->mac_address);
+ priv->mac_address = g_strdup (mac_address);
changed = TRUE;
} else
changed = FALSE;
@@ -356,21 +346,11 @@ entry_text_changed (GObject *object,
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;
+ nmt_device_entry_set_interface_name (deventry, ifname);
+ g_free (ifname);
- 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);
+ nmt_device_entry_set_mac_address (deventry, mac);
+ g_free (mac);
}
static void
@@ -399,7 +379,7 @@ 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);
+ nmt_editor_grid_append (NMT_EDITOR_GRID (object), priv->label, NMT_NEWT_WIDGET (priv->entry), NULL);
G_OBJECT_CLASS (nmt_device_entry_parent_class)->constructed (object);
}
@@ -410,8 +390,7 @@ 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_free (priv->mac_address);
G_OBJECT_CLASS (nmt_device_entry_parent_class)->finalize (object);
}
@@ -461,7 +440,7 @@ nmt_device_entry_set_property (GObject *object,
NmtDeviceEntry *deventry = NMT_DEVICE_ENTRY (object);
NmtDeviceEntryPrivate *priv = NMT_DEVICE_ENTRY_GET_PRIVATE (deventry);
const char *interface_name;
- GByteArray *mac_address;
+ const char *mac_address;
switch (prop_id) {
case PROP_LABEL:
@@ -480,7 +459,7 @@ nmt_device_entry_set_property (GObject *object,
update_entry (deventry);
break;
case PROP_MAC_ADDRESS:
- mac_address = g_value_get_boxed (value);
+ mac_address = g_value_get_string (value);
if (nmt_device_entry_set_mac_address (deventry, mac_address))
update_entry (deventry);
break;
@@ -512,7 +491,7 @@ nmt_device_entry_get_property (GObject *object,
g_value_set_string (value, priv->interface_name);
break;
case PROP_MAC_ADDRESS:
- g_value_set_boxed (value, priv->mac_address);
+ g_value_set_string (value, priv->mac_address);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -538,22 +517,24 @@ nmt_device_entry_class_init (NmtDeviceEntryClass *deventry_class)
*
* 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));
+ 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));
+ 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:
*
@@ -561,29 +542,32 @@ nmt_device_entry_class_init (NmtDeviceEntryClass *deventry_class)
* 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));
+ 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));
+ 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));
+ g_object_class_install_property
+ (object_class, PROP_MAC_ADDRESS,
+ g_param_spec_string ("mac-address", "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
}
diff --git a/tui/nmt-device-entry.h b/clients/tui/nmt-device-entry.h
index 2b959aaa8..05d5d40f7 100644
--- a/tui/nmt-device-entry.h
+++ b/clients/tui/nmt-device-entry.h
@@ -19,10 +19,9 @@
#ifndef NMT_DEVICE_ENTRY_H
#define NMT_DEVICE_ENTRY_H
-#include "nmt-page-grid.h"
+#include "nmt-editor-grid.h"
-#include <nm-connection.h>
-#include <nm-device.h>
+#include <NetworkManager.h>
G_BEGIN_DECLS
@@ -34,12 +33,12 @@ G_BEGIN_DECLS
#define NMT_DEVICE_ENTRY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_DEVICE_ENTRY, NmtDeviceEntryClass))
typedef struct {
- NmtPageGrid parent;
+ NmtEditorGrid parent;
} NmtDeviceEntry;
typedef struct {
- NmtPageGridClass parent;
+ NmtEditorGridClass parent;
} NmtDeviceEntryClass;
diff --git a/tui/nmt-edit-connection-list.c b/clients/tui/nmt-edit-connection-list.c
index ec0a66845..e1b982dde 100644
--- a/tui/nmt-edit-connection-list.c
+++ b/clients/tui/nmt-edit-connection-list.c
@@ -83,23 +83,6 @@ 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)
{
@@ -155,7 +138,7 @@ sort_by_timestamp (gconstpointer a,
static void nmt_edit_connection_list_rebuild (NmtEditConnectionList *list);
static void
-rebuild_on_connection_updated (NMRemoteConnection *connection,
+rebuild_on_connection_changed (NMRemoteConnection *connection,
gpointer list)
{
nmt_edit_connection_list_rebuild (list);
@@ -171,17 +154,19 @@ free_connections (NmtEditConnectionList *list)
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_signal_handlers_disconnect_by_func (conn, G_CALLBACK (rebuild_on_connection_changed), list);
g_object_unref (conn);
}
g_slist_free (priv->connections);
+ priv->connections = NULL;
}
static void
nmt_edit_connection_list_rebuild (NmtEditConnectionList *list)
{
NmtEditConnectionListPrivate *priv = NMT_EDIT_CONNECTION_LIST_GET_PRIVATE (list);
- GSList *iter, *next;
+ const GPtrArray *connections;
+ GSList *iter;
gboolean did_header = FALSE, did_vpn = FALSE;
NMEditorConnectionTypeData **types;
NMConnection *conn, *selected_conn;
@@ -191,22 +176,17 @@ nmt_edit_connection_list_rebuild (NmtEditConnectionList *list)
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;
+ connections = nm_client_get_connections (nm_client);
+ for (i = 0; i < connections->len; i++) {
+ conn = connections->pdata[i];
if ( priv->connection_filter
- && !priv->connection_filter (list, conn, priv->connection_filter_data)) {
- priv->connections = g_slist_delete_link (priv->connections, iter);
+ && !priv->connection_filter (list, conn, priv->connection_filter_data))
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);
+ g_signal_connect (conn, NM_CONNECTION_CHANGED,
+ G_CALLBACK (rebuild_on_connection_changed), list);
+ priv->connections = g_slist_prepend (priv->connections, g_object_ref (conn));
}
priv->connections = g_slist_sort (priv->connections, sort_by_timestamp);
g_object_notify (G_OBJECT (list), "connections");
@@ -279,9 +259,9 @@ nmt_edit_connection_list_rebuild (NmtEditConnectionList *list)
}
static void
-rebuild_on_new_connection (NMRemoteSettings *settings,
- NMRemoteConnection *connection,
- gpointer list)
+rebuild_on_connections_changed (GObject *object,
+ GParamSpec *pspec,
+ gpointer list)
{
nmt_edit_connection_list_rebuild (list);
}
@@ -295,8 +275,8 @@ nmt_edit_connection_list_constructed (GObject *object)
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);
+ g_signal_connect (nm_client, "notify::" NM_CLIENT_CONNECTIONS,
+ G_CALLBACK (rebuild_on_connections_changed), list);
nmt_edit_connection_list_rebuild (list);
@@ -490,12 +470,13 @@ nmt_edit_connection_list_class_init (NmtEditConnectionListClass *list_class)
* 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));
+ 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:
@@ -513,21 +494,23 @@ nmt_edit_connection_list_class_init (NmtEditConnectionListClass *list_class)
* 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));
+ 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));
+ 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:
@@ -535,12 +518,13 @@ nmt_edit_connection_list_class_init (NmtEditConnectionListClass *list_class)
* 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));
+ 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:
@@ -549,20 +533,22 @@ nmt_edit_connection_list_class_init (NmtEditConnectionListClass *list_class)
*
* 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));
+ 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));
+ 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/clients/tui/nmt-edit-connection-list.h
index 35157e94d..c31c0a8cb 100644
--- a/tui/nmt-edit-connection-list.h
+++ b/clients/tui/nmt-edit-connection-list.h
@@ -21,7 +21,7 @@
#include "nmt-newt.h"
-#include <nm-remote-connection.h>
+#include <NetworkManager.h>
G_BEGIN_DECLS
@@ -54,8 +54,6 @@ 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-page-grid.c b/clients/tui/nmt-editor-grid.c
index 89ba9330f..118bf01d3 100644
--- a/tui/nmt-page-grid.c
+++ b/clients/tui/nmt-editor-grid.c
@@ -17,10 +17,10 @@
*/
/**
- * SECTION:nmt-page-grid
+ * SECTION:nmt-editor-grid
* @short_description: Grid widget for #NmtEditorPages
*
- * #NmtPageGrid is the layout grid used by #NmtEditorPages. It
+ * #NmtEditorGrid 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.
@@ -29,10 +29,10 @@
* 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
+ * The #NmtEditorGrids 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,
+ * the grids. #NmtEditorGrid is also specially aware of #NmtNewtSection,
* and grids inside sections will automatically take the size of the
* section border into account as well.
*/
@@ -41,96 +41,100 @@
#include <string.h>
-#include "nmt-page-grid.h"
+#include "nmt-editor-grid.h"
-G_DEFINE_TYPE (NmtPageGrid, nmt_page_grid, NMT_TYPE_NEWT_CONTAINER)
+G_DEFINE_TYPE (NmtEditorGrid, nmt_editor_grid, NMT_TYPE_NEWT_CONTAINER)
-#define NMT_PAGE_GRID_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_PAGE_GRID, NmtPageGridPrivate))
+#define NMT_EDITOR_GRID_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_EDITOR_GRID, NmtEditorGridPrivate))
typedef struct {
GArray *rows;
int *row_heights;
int indent;
-} NmtPageGridPrivate;
+} NmtEditorGridPrivate;
typedef struct {
NmtNewtWidget *label;
NmtNewtWidget *widget;
NmtNewtWidget *extra;
- NmtPageGridRowFlags flags;
-} NmtPageGridRow;
+ NmtEditorGridRowFlags flags;
+} NmtEditorGridRow;
typedef struct {
int col_widths[3];
-} NmtPageGridFormState;
+} NmtEditorGridFormState;
/**
- * nmt_page_grid_new:
+ * nmt_editor_grid_new:
*
- * Creates a new #NmtPageGrid
+ * Creates a new #NmtEditorGrid
*
- * Returns: a new #NmtPageGrid
+ * Returns: a new #NmtEditorGrid
*/
NmtNewtWidget *
-nmt_page_grid_new (void)
+nmt_editor_grid_new (void)
{
- return g_object_new (NMT_TYPE_PAGE_GRID,
+ return g_object_new (NMT_TYPE_EDITOR_GRID,
NULL);
}
static void
-nmt_page_grid_init (NmtPageGrid *grid)
+nmt_editor_grid_init (NmtEditorGrid *grid)
{
- NmtPageGridPrivate *priv = NMT_PAGE_GRID_GET_PRIVATE (grid);
+ NmtEditorGridPrivate *priv = NMT_EDITOR_GRID_GET_PRIVATE (grid);
- priv->rows = g_array_new (FALSE, TRUE, sizeof (NmtPageGridRow));
+ priv->rows = g_array_new (FALSE, TRUE, sizeof (NmtEditorGridRow));
}
static void
-nmt_page_grid_finalize (GObject *object)
+nmt_editor_grid_finalize (GObject *object)
{
- NmtPageGridPrivate *priv = NMT_PAGE_GRID_GET_PRIVATE (object);
+ NmtEditorGridPrivate *priv = NMT_EDITOR_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);
+ G_OBJECT_CLASS (nmt_editor_grid_parent_class)->finalize (object);
}
/**
- * nmt_page_grid_append:
- * @grid: the #NmtPageGrid
+ * nmt_editor_grid_append:
+ * @grid: the #NmtEditorGrid
* @label: (allow-none): the label text for @widget, or %NULL
- * @widget: the (main) widget
+ * @widget: (allow-none): 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 and @widget are both 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.
+ * If either @label or @widget is %NULL, then the other column will expand into
+ * it.
*
- * FIXME: That's sort of weird.
- *
- * See also nmt_page_grid_set_row_flags().
+ * See also nmt_editor_grid_set_row_flags().
*/
void
-nmt_page_grid_append (NmtPageGrid *grid,
+nmt_editor_grid_append (NmtEditorGrid *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);
+ NmtEditorGridPrivate *priv = NMT_EDITOR_GRID_GET_PRIVATE (grid);
+ NmtNewtContainerClass *parent_class = NMT_NEWT_CONTAINER_CLASS (nmt_editor_grid_parent_class);
NmtNewtContainer *container = NMT_NEWT_CONTAINER (grid);
- NmtPageGridRow row;
+ NmtEditorGridRow row;
+
+ g_return_if_fail (label != NULL || widget != NULL);
memset (&row, 0, sizeof (row));
+ if (label && !widget) {
+ widget = nmt_newt_label_new (label);
+ label = NULL;
+ }
+
if (label) {
row.label = nmt_newt_label_new (label);
parent_class->add (container, row.label);
@@ -153,11 +157,11 @@ nmt_page_grid_append (NmtPageGrid *grid,
}
static int
-nmt_page_grid_find_widget (NmtPageGrid *grid,
+nmt_editor_grid_find_widget (NmtEditorGrid *grid,
NmtNewtWidget *widget)
{
- NmtPageGridPrivate *priv = NMT_PAGE_GRID_GET_PRIVATE (grid);
- NmtPageGridRow *rows = (NmtPageGridRow *) priv->rows->data;
+ NmtEditorGridPrivate *priv = NMT_EDITOR_GRID_GET_PRIVATE (grid);
+ NmtEditorGridRow *rows = (NmtEditorGridRow *) priv->rows->data;
int i;
for (i = 0; i < priv->rows->len; i++) {
@@ -169,48 +173,48 @@ nmt_page_grid_find_widget (NmtPageGrid *grid,
}
/**
- * NmtPageGridRowFlags:
- * @NMT_PAGE_GRID_ROW_LABEL_ALIGN_LEFT: the row's label should be
+ * NmtEditorGridRowFlags:
+ * @NMT_EDITOR_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
+ * @NMT_EDITOR_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.
+ * Flags to alter an #NmtEditorGrid row's layout.
*/
/**
- * nmt_page_grid_set_row_flags:
- * @grid: an #NmtPageGrid
+ * nmt_editor_grid_set_row_flags:
+ * @grid: an #NmtEditorGrid
* @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,
+nmt_editor_grid_set_row_flags (NmtEditorGrid *grid,
NmtNewtWidget *widget,
- NmtPageGridRowFlags flags)
+ NmtEditorGridRowFlags flags)
{
- NmtPageGridPrivate *priv = NMT_PAGE_GRID_GET_PRIVATE (grid);
- NmtPageGridRow *rows = (NmtPageGridRow *) priv->rows->data;
+ NmtEditorGridPrivate *priv = NMT_EDITOR_GRID_GET_PRIVATE (grid);
+ NmtEditorGridRow *rows = (NmtEditorGridRow *) priv->rows->data;
int i;
- i = nmt_page_grid_find_widget (grid, widget);
+ i = nmt_editor_grid_find_widget (grid, widget);
if (i != -1)
rows[i].flags = flags;
}
static void
-nmt_page_grid_remove (NmtNewtContainer *container,
+nmt_editor_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;
+ NmtEditorGrid *grid = NMT_EDITOR_GRID (container);
+ NmtEditorGridPrivate *priv = NMT_EDITOR_GRID_GET_PRIVATE (grid);
+ NmtNewtContainerClass *parent_class = NMT_NEWT_CONTAINER_CLASS (nmt_editor_grid_parent_class);
+ NmtEditorGridRow *rows = (NmtEditorGridRow *) priv->rows->data;
int i;
- i = nmt_page_grid_find_widget (grid, widget);
+ i = nmt_editor_grid_find_widget (grid, widget);
if (i != -1) {
if (rows[i].label)
parent_class->remove (container, rows[i].label);
@@ -227,10 +231,10 @@ nmt_page_grid_remove (NmtNewtContainer *container,
}
static newtComponent *
-nmt_page_grid_get_components (NmtNewtWidget *widget)
+nmt_editor_grid_get_components (NmtNewtWidget *widget)
{
- NmtPageGridPrivate *priv = NMT_PAGE_GRID_GET_PRIVATE (widget);
- NmtPageGridRow *rows = (NmtPageGridRow *) priv->rows->data;
+ NmtEditorGridPrivate *priv = NMT_EDITOR_GRID_GET_PRIVATE (widget);
+ NmtEditorGridRow *rows = (NmtEditorGridRow *) priv->rows->data;
newtComponent *child_cos;
GPtrArray *cos;
int i, c;
@@ -265,31 +269,31 @@ nmt_page_grid_get_components (NmtNewtWidget *widget)
return (newtComponent *) g_ptr_array_free (cos, FALSE);
}
-static NmtPageGridFormState *
+static NmtEditorGridFormState *
get_form_state (NmtNewtWidget *widget)
{
NmtNewtForm *form = nmt_newt_widget_get_form (widget);
- NmtPageGridFormState *state;
+ NmtEditorGridFormState *state;
if (!form)
return NULL;
- state = g_object_get_data (G_OBJECT (form), "NmtPageGridFormState");
+ state = g_object_get_data (G_OBJECT (form), "NmtEditorGridFormState");
if (state)
return state;
- state = g_new0 (NmtPageGridFormState, 1);
- g_object_set_data_full (G_OBJECT (form), "NmtPageGridFormState", state, g_free);
+ state = g_new0 (NmtEditorGridFormState, 1);
+ g_object_set_data_full (G_OBJECT (form), "NmtEditorGridFormState", state, g_free);
return state;
}
static void
-nmt_page_grid_realize (NmtNewtWidget *widget)
+nmt_editor_grid_realize (NmtNewtWidget *widget)
{
- NmtPageGridPrivate *priv = NMT_PAGE_GRID_GET_PRIVATE (widget);
+ NmtEditorGridPrivate *priv = NMT_EDITOR_GRID_GET_PRIVATE (widget);
NmtNewtWidget *parent;
- NMT_NEWT_WIDGET_CLASS (nmt_page_grid_parent_class)->realize (widget);
+ NMT_NEWT_WIDGET_CLASS (nmt_editor_grid_parent_class)->realize (widget);
/* This is a hack, but it's the simplest way to make it work... */
priv->indent = 0;
@@ -305,24 +309,24 @@ nmt_page_grid_realize (NmtNewtWidget *widget)
}
static void
-nmt_page_grid_unrealize (NmtNewtWidget *widget)
+nmt_editor_grid_unrealize (NmtNewtWidget *widget)
{
- NmtPageGridFormState *state = get_form_state (widget);
+ NmtEditorGridFormState *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);
+ NMT_NEWT_WIDGET_CLASS (nmt_editor_grid_parent_class)->unrealize (widget);
}
static void
-nmt_page_grid_size_request (NmtNewtWidget *widget,
+nmt_editor_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);
+ NmtEditorGridPrivate *priv = NMT_EDITOR_GRID_GET_PRIVATE (widget);
+ NmtEditorGridRow *rows = (NmtEditorGridRow *) priv->rows->data;
+ NmtEditorGridFormState *state = get_form_state (widget);
gboolean add_padding = FALSE;
int i;
@@ -367,15 +371,15 @@ nmt_page_grid_size_request (NmtNewtWidget *widget,
static void
-nmt_page_grid_size_allocate (NmtNewtWidget *widget,
+nmt_editor_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);
+ NmtEditorGridPrivate *priv = NMT_EDITOR_GRID_GET_PRIVATE (widget);
+ NmtEditorGridRow *rows = (NmtEditorGridRow *) priv->rows->data;
+ NmtEditorGridFormState *state = get_form_state (widget);
int col0_width, col1_width, col2_width;
int i, row;
@@ -390,7 +394,7 @@ nmt_page_grid_size_allocate (NmtNewtWidget *widget,
if (rows[i].label) {
int lwidth, lheight, lx;
- if (rows[i].flags & NMT_PAGE_GRID_ROW_LABEL_ALIGN_LEFT)
+ if (rows[i].flags & NMT_EDITOR_GRID_ROW_LABEL_ALIGN_LEFT)
lx = x;
else {
nmt_newt_widget_size_request (rows[i].label, &lwidth, &lheight);
@@ -408,27 +412,28 @@ nmt_page_grid_size_allocate (NmtNewtWidget *widget,
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,
+ col0_width + col1_width + 1,
+ priv->row_heights[i]);
+ }
+
+ if (rows[i].extra) {
+ int wwidth, wheight, ex;
+
+ if (rows[i].flags & NMT_EDITOR_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]);
}
@@ -437,22 +442,22 @@ nmt_page_grid_size_allocate (NmtNewtWidget *widget,
}
static void
-nmt_page_grid_class_init (NmtPageGridClass *grid_class)
+nmt_editor_grid_class_init (NmtEditorGridClass *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));
+ g_type_class_add_private (grid_class, sizeof (NmtEditorGridPrivate));
/* virtual methods */
- object_class->finalize = nmt_page_grid_finalize;
+ object_class->finalize = nmt_editor_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;
+ widget_class->realize = nmt_editor_grid_realize;
+ widget_class->unrealize = nmt_editor_grid_unrealize;
+ widget_class->get_components = nmt_editor_grid_get_components;
+ widget_class->size_request = nmt_editor_grid_size_request;
+ widget_class->size_allocate = nmt_editor_grid_size_allocate;
- container_class->remove = nmt_page_grid_remove;
+ container_class->remove = nmt_editor_grid_remove;
}
diff --git a/tui/nmt-page-grid.h b/clients/tui/nmt-editor-grid.h
index 40ff96c41..2ae01d71d 100644
--- a/tui/nmt-page-grid.h
+++ b/clients/tui/nmt-editor-grid.h
@@ -16,47 +16,47 @@
* Copyright 2013 Red Hat, Inc.
*/
-#ifndef NMT_PAGE_GRID_H
-#define NMT_PAGE_GRID_H
+#ifndef NMT_EDITOR_GRID_H
+#define NMT_EDITOR_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))
+#define NMT_TYPE_EDITOR_GRID (nmt_editor_grid_get_type ())
+#define NMT_EDITOR_GRID(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_EDITOR_GRID, NmtEditorGrid))
+#define NMT_EDITOR_GRID_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_EDITOR_GRID, NmtEditorGridClass))
+#define NMT_IS_EDITOR_GRID(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_EDITOR_GRID))
+#define NMT_IS_EDITOR_GRID_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_EDITOR_GRID))
+#define NMT_EDITOR_GRID_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_EDITOR_GRID, NmtEditorGridClass))
typedef struct {
NmtNewtContainer parent;
-} NmtPageGrid;
+} NmtEditorGrid;
typedef struct {
NmtNewtContainerClass parent;
-} NmtPageGridClass;
+} NmtEditorGridClass;
-GType nmt_page_grid_get_type (void);
+GType nmt_editor_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;
+ NMT_EDITOR_GRID_ROW_LABEL_ALIGN_LEFT = (1 << 0),
+ NMT_EDITOR_GRID_ROW_EXTRA_ALIGN_RIGHT = (1 << 1)
+} NmtEditorGridRowFlags;
-NmtNewtWidget *nmt_page_grid_new (void);
+NmtNewtWidget *nmt_editor_grid_new (void);
-void nmt_page_grid_append (NmtPageGrid *grid,
+void nmt_editor_grid_append (NmtEditorGrid *grid,
const char *label,
NmtNewtWidget *widget,
NmtNewtWidget *extra);
-void nmt_page_grid_set_row_flags (NmtPageGrid *grid,
+void nmt_editor_grid_set_row_flags (NmtEditorGrid *grid,
NmtNewtWidget *widget,
- NmtPageGridRowFlags flags);
+ NmtEditorGridRowFlags flags);
G_END_DECLS
-#endif /* NMT_PAGE_GRID_H */
+#endif /* NMT_EDITOR_GRID_H */
diff --git a/clients/tui/nmt-editor-page-device.c b/clients/tui/nmt-editor-page-device.c
new file mode 100644
index 000000000..0a9b18e0b
--- /dev/null
+++ b/clients/tui/nmt-editor-page-device.c
@@ -0,0 +1,131 @@
+/* -*- 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-device
+ * @short_description: Abstract base class for "device" editor pages
+ *
+ * #NmtEditorPageDevice 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-editor-page-device.h"
+
+G_DEFINE_TYPE (NmtEditorPageDevice, nmt_editor_page_device, NMT_TYPE_EDITOR_PAGE)
+
+#define NMT_EDITOR_PAGE_DEVICE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_EDITOR_PAGE_DEVICE, NmtEditorPageDevicePrivate))
+
+typedef struct {
+ NmtDeviceEntry *device_entry;
+ gboolean show_by_default;
+} NmtEditorPageDevicePrivate;
+
+enum {
+ PROP_0,
+
+ PROP_DEVICE_ENTRY,
+
+ LAST_PROP
+};
+
+static void
+nmt_editor_page_device_init (NmtEditorPageDevice *device)
+{
+}
+
+static void
+nmt_editor_page_device_finalize (GObject *object)
+{
+ NmtEditorPageDevicePrivate *priv = NMT_EDITOR_PAGE_DEVICE_GET_PRIVATE (object);
+
+ g_clear_object (&priv->device_entry);
+
+ G_OBJECT_CLASS (nmt_editor_page_device_parent_class)->finalize (object);
+}
+
+NmtDeviceEntry *
+nmt_editor_page_device_get_device_entry (NmtEditorPageDevice *page)
+{
+ NmtEditorPageDevicePrivate *priv = NMT_EDITOR_PAGE_DEVICE_GET_PRIVATE (page);
+
+ return priv->device_entry;
+}
+
+static void
+nmt_editor_page_device_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NmtEditorPageDevicePrivate *priv = NMT_EDITOR_PAGE_DEVICE_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_DEVICE_ENTRY:
+ priv->device_entry = g_value_dup_object (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_editor_page_device_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NmtEditorPageDevicePrivate *priv = NMT_EDITOR_PAGE_DEVICE_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_DEVICE_ENTRY:
+ g_value_set_object (value, priv->device_entry);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_editor_page_device_class_init (NmtEditorPageDeviceClass *page_device_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (page_device_class);
+
+ g_type_class_add_private (page_device_class, sizeof (NmtEditorPageDevicePrivate));
+
+ /* virtual methods */
+ object_class->set_property = nmt_editor_page_device_set_property;
+ object_class->get_property = nmt_editor_page_device_get_property;
+ object_class->finalize = nmt_editor_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));
+}
diff --git a/clients/tui/nmt-editor-page-device.h b/clients/tui/nmt-editor-page-device.h
new file mode 100644
index 000000000..f911602cc
--- /dev/null
+++ b/clients/tui/nmt-editor-page-device.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_EDITOR_PAGE_DEVICE_H
+#define NMT_EDITOR_PAGE_DEVICE_H
+
+#include "nmt-editor-page.h"
+#include "nmt-device-entry.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_EDITOR_PAGE_DEVICE (nmt_editor_page_device_get_type ())
+#define NMT_EDITOR_PAGE_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_EDITOR_PAGE_DEVICE, NmtEditorPageDevice))
+#define NMT_EDITOR_PAGE_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_EDITOR_PAGE_DEVICE, NmtEditorPageDeviceClass))
+#define NMT_IS_EDITOR_PAGE_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_EDITOR_PAGE_DEVICE))
+#define NMT_IS_EDITOR_PAGE_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_EDITOR_PAGE_DEVICE))
+#define NMT_EDITOR_PAGE_DEVICE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_EDITOR_PAGE_DEVICE, NmtEditorPageDeviceClass))
+
+typedef struct {
+ NmtEditorPage parent;
+
+} NmtEditorPageDevice;
+
+typedef struct {
+ NmtEditorPageClass parent;
+
+} NmtEditorPageDeviceClass;
+
+GType nmt_editor_page_device_get_type (void);
+
+NmtDeviceEntry *nmt_editor_page_device_get_device_entry (NmtEditorPageDevice *page);
+
+G_END_DECLS
+
+#endif /* NMT_EDITOR_PAGE_DEVICE_H */
diff --git a/tui/nmt-editor-page.c b/clients/tui/nmt-editor-page.c
index 549a86a6f..a46d0ed43 100644
--- a/tui/nmt-editor-page.c
+++ b/clients/tui/nmt-editor-page.c
@@ -21,9 +21,7 @@
* @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.
+ * A "page" is a set of related #NmtEditorSections.
*/
#include "config.h"
@@ -32,14 +30,13 @@
#include "nmt-editor-page.h"
-G_DEFINE_ABSTRACT_TYPE (NmtEditorPage, nmt_editor_page, NMT_TYPE_PAGE_GRID)
+G_DEFINE_ABSTRACT_TYPE (NmtEditorPage, nmt_editor_page, G_TYPE_OBJECT)
#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;
+ GSList *sections;
} NmtEditorPagePrivate;
@@ -47,7 +44,6 @@ enum {
PROP_0,
PROP_CONNECTION,
- PROP_TITLE,
LAST_PROP
};
@@ -55,9 +51,6 @@ enum {
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
@@ -65,9 +58,8 @@ 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_slist_free_full (priv->sections, g_object_unref);
G_OBJECT_CLASS (nmt_editor_page_parent_class)->finalize (object);
}
@@ -89,61 +81,37 @@ nmt_editor_page_get_connection (NmtEditorPage *page)
}
/**
- * nmt_editor_page_set_header_widget:
+ * nmt_editor_page_get_sections:
* @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.
+ * Gets the page's list of sections to display.
*
- * FIXME: for consistency, this should be a property as well.
+ * Returns: (transfer none): the list of sections; this is the internal list
+ * used by the page and must not be modified or freed.
*/
-void
-nmt_editor_page_set_header_widget (NmtEditorPage *page,
- NmtNewtWidget *widget)
+GSList *
+nmt_editor_page_get_sections (NmtEditorPage *page)
{
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);
+ return priv->sections;
}
/**
- * nmt_editor_page_get_header_widget:
+ * nmt_editor_page_add_section:
* @page: the #NmtEditorPage
+ * @section: the #NmtEditorSection
*
- * 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.
+ * Adds a section to the page. This should only be called by #NmtEditorPage
+ * subclasses.
*/
-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)
+void
+nmt_editor_page_add_section (NmtEditorPage *page,
+ NmtEditorSection *section)
{
NmtEditorPagePrivate *priv = NMT_EDITOR_PAGE_GET_PRIVATE (page);
- return priv->title;
+ priv->sections = g_slist_append (priv->sections, g_object_ref_sink (section));
}
static void
@@ -158,9 +126,6 @@ nmt_editor_page_set_property (GObject *object,
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;
@@ -179,9 +144,6 @@ nmt_editor_page_get_property (GObject *object,
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;
@@ -207,21 +169,11 @@ nmt_editor_page_class_init (NmtEditorPageClass *page_class)
*
* 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));
+ 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));
}
diff --git a/tui/nmt-editor-page.h b/clients/tui/nmt-editor-page.h
index d9a97102e..bbc0d9e35 100644
--- a/tui/nmt-editor-page.h
+++ b/clients/tui/nmt-editor-page.h
@@ -13,15 +13,16 @@
* 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.
+ * Copyright 2013-2014 Red Hat, Inc.
*/
#ifndef NMT_EDITOR_PAGE_H
#define NMT_EDITOR_PAGE_H
-#include <nm-connection.h>
+#include <NetworkManager.h>
-#include "nmt-page-grid.h"
+#include "nmt-editor-grid.h"
+#include "nmt-editor-section.h"
G_BEGIN_DECLS
@@ -33,12 +34,12 @@ G_BEGIN_DECLS
#define NMT_EDITOR_PAGE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_EDITOR_PAGE, NmtEditorPageClass))
typedef struct {
- NmtPageGrid parent;
+ GObject parent;
} NmtEditorPage;
typedef struct {
- NmtPageGridClass parent;
+ GObjectClass parent;
} NmtEditorPageClass;
@@ -46,11 +47,11 @@ 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);
+GSList *nmt_editor_page_get_sections (NmtEditorPage *page);
-const char *nmt_editor_page_get_title (NmtEditorPage *page);
+/*< protected >*/
+void nmt_editor_page_add_section (NmtEditorPage *page,
+ NmtEditorSection *section);
G_END_DECLS
diff --git a/clients/tui/nmt-editor-section.c b/clients/tui/nmt-editor-section.c
new file mode 100644
index 000000000..ff463f7fe
--- /dev/null
+++ b/clients/tui/nmt-editor-section.c
@@ -0,0 +1,282 @@
+/* -*- 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-section:
+ * @short_description: A section of the #NmtEditor
+ *
+ * #NmtEditorSection is the abstract base class for #NmtEditor sections.
+ */
+
+#include "config.h"
+
+#include <glib/gi18n-lib.h>
+
+#include "nmt-editor-section.h"
+#include "nmt-newt-toggle-button.h"
+
+G_DEFINE_TYPE (NmtEditorSection, nmt_editor_section, NMT_TYPE_NEWT_SECTION)
+
+#define NMT_EDITOR_SECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_EDITOR_SECTION, NmtEditorSectionPrivate))
+
+typedef struct {
+ NmtEditorGrid *header, *body;
+ char *title;
+ NmtNewtWidget *header_widget;
+ NmtNewtWidget *toggle;
+
+ gboolean show_by_default;
+} NmtEditorSectionPrivate;
+
+enum {
+ PROP_0,
+
+ PROP_TITLE,
+ PROP_SHOW_BY_DEFAULT,
+ PROP_HEADER_WIDGET,
+
+ LAST_PROP
+};
+
+/**
+ * nmt_editor_section_new:
+ * @title: the section title
+ * @header_widget: (allow-none): the widget to show next to the title
+ * @show_by_default: whether the section should be open by default
+ *
+ * Creates a new #NmtEditorSection.
+ *
+ * Returns: a new #NmtEditorSection
+ */
+NmtEditorSection *
+nmt_editor_section_new (const char *title,
+ NmtNewtWidget *header_widget,
+ gboolean show_by_default)
+{
+ return g_object_new (NMT_TYPE_EDITOR_SECTION,
+ "title", title,
+ "header-widget", header_widget,
+ "show-by-default", show_by_default,
+ NULL);
+}
+
+static void
+rebuild_header (NmtEditorSection *section)
+{
+ NmtEditorSectionPrivate *priv = NMT_EDITOR_SECTION_GET_PRIVATE (section);
+
+ /* Removing any widget in an NmtEditorGrid removes its whole row, so we can
+ * remove the existing title/widget/toggle by asking to remove toggle.
+ */
+ nmt_newt_container_remove (NMT_NEWT_CONTAINER (priv->header), priv->toggle);
+
+ nmt_editor_grid_append (priv->header,
+ priv->title,
+ priv->header_widget,
+ priv->toggle);
+ nmt_editor_grid_set_row_flags (priv->header,
+ priv->toggle,
+ NMT_EDITOR_GRID_ROW_LABEL_ALIGN_LEFT |
+ NMT_EDITOR_GRID_ROW_EXTRA_ALIGN_RIGHT);
+}
+
+static void
+nmt_editor_section_init (NmtEditorSection *section)
+{
+ NmtEditorSectionPrivate *priv = NMT_EDITOR_SECTION_GET_PRIVATE (section);
+
+ priv->header = NMT_EDITOR_GRID (nmt_editor_grid_new ());
+ priv->body = NMT_EDITOR_GRID (nmt_editor_grid_new ());
+ priv->toggle = nmt_newt_toggle_button_new (_("Hide"), _("Show"));
+ g_object_ref_sink (priv->toggle);
+
+ nmt_newt_section_set_header (NMT_NEWT_SECTION (section), NMT_NEWT_WIDGET (priv->header));
+ nmt_newt_section_set_body (NMT_NEWT_SECTION (section), NMT_NEWT_WIDGET (priv->body));
+
+ g_object_bind_property (priv->toggle, "active",
+ section, "open",
+ G_BINDING_SYNC_CREATE);
+}
+
+static void
+nmt_editor_section_finalize (GObject *object)
+{
+ NmtEditorSectionPrivate *priv = NMT_EDITOR_SECTION_GET_PRIVATE (object);
+
+ g_free (priv->title);
+ g_clear_object (&priv->header_widget);
+ g_clear_object (&priv->toggle);
+
+ G_OBJECT_CLASS (nmt_editor_section_parent_class)->finalize (object);
+}
+
+/**
+ * nmt_editor_section_get_header_widget:
+ * @section: the #NmtEditorSection
+ *
+ * Gets the section's header widget.
+ *
+ * Returns: the section's header widget.
+ */
+NmtNewtWidget *
+nmt_editor_section_get_header_widget (NmtEditorSection *section)
+{
+ NmtEditorSectionPrivate *priv = NMT_EDITOR_SECTION_GET_PRIVATE (section);
+
+ return priv->header_widget;
+}
+
+/**
+ * nmt_editor_section_get_body:
+ * @section: the #NmtEditorSection
+ *
+ * Gets the section's body grid, so that you can add things to it.
+ *
+ * Returns: the #NmtEditorGrid used for the section body
+ */
+NmtEditorGrid *
+nmt_editor_section_get_body (NmtEditorSection *section)
+{
+ NmtEditorSectionPrivate *priv = NMT_EDITOR_SECTION_GET_PRIVATE (section);
+
+ return priv->body;
+}
+
+/**
+ * nmt_editor_section_get_title:
+ * @section: the #NmtEditorSection
+ *
+ * Gets the section's title.
+ *
+ * Returns: the section's title
+ */
+const char *
+nmt_editor_section_get_title (NmtEditorSection *section)
+{
+ NmtEditorSectionPrivate *priv = NMT_EDITOR_SECTION_GET_PRIVATE (section);
+
+ return priv->title;
+}
+
+static void
+nmt_editor_section_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NmtEditorSection *section = NMT_EDITOR_SECTION (object);
+ NmtEditorSectionPrivate *priv = NMT_EDITOR_SECTION_GET_PRIVATE (section);
+
+ switch (prop_id) {
+ case PROP_TITLE:
+ priv->title = g_value_dup_string (value);
+ rebuild_header (section);
+ break;
+ case PROP_SHOW_BY_DEFAULT:
+ priv->show_by_default = g_value_get_boolean (value);
+ nmt_newt_toggle_button_set_active (NMT_NEWT_TOGGLE_BUTTON (priv->toggle),
+ priv->show_by_default);
+ break;
+ case PROP_HEADER_WIDGET:
+ priv->header_widget = g_value_get_object (value);
+ if (priv->header_widget)
+ g_object_ref_sink (priv->header_widget);
+ rebuild_header (section);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_editor_section_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NmtEditorSectionPrivate *priv = NMT_EDITOR_SECTION_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_TITLE:
+ g_value_set_string (value, priv->title);
+ break;
+ case PROP_SHOW_BY_DEFAULT:
+ g_value_set_boolean (value, priv->show_by_default);
+ break;
+ case PROP_HEADER_WIDGET:
+ g_value_set_object (value, priv->header_widget);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nmt_editor_section_class_init (NmtEditorSectionClass *section_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (section_class);
+
+ g_type_class_add_private (section_class, sizeof (NmtEditorSectionPrivate));
+
+ /* virtual methods */
+ object_class->set_property = nmt_editor_section_set_property;
+ object_class->get_property = nmt_editor_section_get_property;
+ object_class->finalize = nmt_editor_section_finalize;
+
+ /* properties */
+
+ /**
+ * NmtEditorSection:title:
+ *
+ * The section'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));
+
+ /**
+ * NmtEditorSection:show-by-default:
+ *
+ * Whether the section should be expanded by default.
+ */
+ g_object_class_install_property
+ (object_class, PROP_SHOW_BY_DEFAULT,
+ g_param_spec_boolean ("show-by-default", "", "",
+ TRUE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NmtEditorSection:header-widget:
+ *
+ * The widget (if any) that appears between the section title and its toggle
+ * button.
+ */
+ g_object_class_install_property
+ (object_class, PROP_HEADER_WIDGET,
+ g_param_spec_object ("header-widget", "", "",
+ NMT_TYPE_NEWT_WIDGET,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/clients/tui/nmt-editor-section.h b/clients/tui/nmt-editor-section.h
new file mode 100644
index 000000000..67410c717
--- /dev/null
+++ b/clients/tui/nmt-editor-section.h
@@ -0,0 +1,56 @@
+/* -*- 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_SECTION_H
+#define NMT_EDITOR_SECTION_H
+
+#include "nmt-newt-section.h"
+#include "nmt-editor-grid.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_EDITOR_SECTION (nmt_editor_section_get_type ())
+#define NMT_EDITOR_SECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_EDITOR_SECTION, NmtEditorSection))
+#define NMT_EDITOR_SECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_EDITOR_SECTION, NmtEditorSectionClass))
+#define NMT_IS_EDITOR_SECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_EDITOR_SECTION))
+#define NMT_IS_EDITOR_SECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_EDITOR_SECTION))
+#define NMT_EDITOR_SECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_EDITOR_SECTION, NmtEditorSectionClass))
+
+typedef struct {
+ NmtNewtSection parent;
+
+} NmtEditorSection;
+
+typedef struct {
+ NmtNewtSectionClass parent;
+
+} NmtEditorSectionClass;
+
+GType nmt_editor_section_get_type (void);
+
+NmtEditorSection *nmt_editor_section_new (const char *title,
+ NmtNewtWidget *header_widget,
+ gboolean show_by_default);
+
+const char *nmt_editor_section_get_title (NmtEditorSection *section);
+NmtNewtWidget *nmt_editor_section_get_header_widget (NmtEditorSection *section);
+NmtEditorGrid *nmt_editor_section_get_body (NmtEditorSection *section);
+
+G_END_DECLS
+
+#endif /* NMT_EDITOR_SECTION_H */
diff --git a/clients/tui/nmt-editor.c b/clients/tui/nmt-editor.c
new file mode 100644
index 000000000..11fe758da
--- /dev/null
+++ b/clients/tui/nmt-editor.c
@@ -0,0 +1,520 @@
+/* -*- 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-utils.h"
+
+#include "nmt-device-entry.h"
+#include "nmt-mac-entry.h"
+#include "nmt-mtu-entry.h"
+
+#include "nmt-page-bond.h"
+#include "nmt-page-bridge.h"
+#include "nmt-page-bridge-port.h"
+#include "nmt-page-dsl.h"
+#include "nmt-page-ethernet.h"
+#include "nmt-page-infiniband.h"
+#include "nmt-page-ip4.h"
+#include "nmt-page-ip6.h"
+#include "nmt-page-ppp.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 (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;
+
+ GSList *pages;
+ 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 (GObject *connection,
+ GAsyncResult *result,
+ gpointer op)
+{
+ GError *error = NULL;
+
+ nm_remote_connection_commit_changes_finish (NM_REMOTE_CONNECTION (connection), result, &error);
+ nmt_sync_op_complete_boolean (op, error == NULL, error);
+ g_clear_error (&error);
+}
+
+static void
+connection_added (GObject *client,
+ GAsyncResult *result,
+ gpointer op)
+{
+ NMRemoteConnection *connection;
+ GError *error = NULL;
+
+ connection = nm_client_add_connection_finish (NM_CLIENT (client), result, &error);
+ nmt_sync_op_complete_boolean (op, error == NULL, error);
+ g_clear_object (&connection);
+ g_clear_error (&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;
+
+ nm_connection_replace_settings_from_connection (priv->orig_connection,
+ priv->edit_connection);
+
+ nmt_sync_op_init (&op);
+ if (NM_IS_REMOTE_CONNECTION (priv->orig_connection)) {
+ nm_remote_connection_commit_changes_async (NM_REMOTE_CONNECTION (priv->orig_connection),
+ TRUE, NULL, 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_client_add_connection_async (nm_client, priv->orig_connection, TRUE,
+ NULL, 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 (GObject *object,
+ GAsyncResult *result,
+ gpointer op)
+{
+ GVariant *secrets;
+ GError *error = NULL;
+
+ secrets = nm_remote_connection_get_secrets_finish (NM_REMOTE_CONNECTION (object),
+ result, &error);
+ if (secrets)
+ g_variant_ref (secrets);
+ nmt_sync_op_complete_pointer (op, secrets, error);
+ g_clear_error (&error);
+}
+
+static NMConnection *
+build_edit_connection (NMConnection *orig_connection)
+{
+ NMConnection *edit_connection;
+ GVariant *settings, *secrets;
+ GVariantIter iter;
+ const char *setting_name;
+ NmtSyncOp op;
+
+ edit_connection = nm_simple_connection_new_clone (orig_connection);
+
+ if (!NM_IS_REMOTE_CONNECTION (orig_connection))
+ return edit_connection;
+
+ settings = nm_connection_to_dbus (orig_connection, NM_CONNECTION_SERIALIZE_NO_SECRETS);
+ g_variant_iter_init (&iter, settings);
+ while (g_variant_iter_next (&iter, "{&s@a{sv}}", &setting_name, NULL)) {
+ nmt_sync_op_init (&op);
+ nm_remote_connection_get_secrets_async (NM_REMOTE_CONNECTION (orig_connection),
+ setting_name, NULL, 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_variant_unref (secrets);
+ }
+ }
+ g_variant_unref (settings);
+
+ return edit_connection;
+}
+
+static gboolean
+permissions_transform_to_allusers (GBinding *binding,
+ const GValue *source_value,
+ GValue *target_value,
+ gpointer user_data)
+{
+ char **perms = g_value_get_boxed (source_value);
+
+ g_value_set_boolean (target_value, g_strv_length (perms) == 0);
+ 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);
+ char **perms = NULL;
+
+ if (allusers) {
+ perms = g_new (char *, 2);
+
+ perms[0] = g_strdup_printf ("user:%s:", g_get_user_name ());
+ perms[1] = NULL;
+ }
+ g_value_take_boxed (target_value, perms);
+ return TRUE;
+}
+
+static NmtNewtWidget *
+add_sections_for_page (NmtEditor *editor, NmtEditorGrid *grid, NmtEditorPage *page)
+{
+ NmtEditorPrivate *priv = NMT_EDITOR_GET_PRIVATE (editor);
+ NmtNewtWidget *first_section = NULL;
+ const GSList *sections, *iter;
+
+ g_return_val_if_fail (NMT_IS_EDITOR_PAGE (page), NULL);
+
+ priv->pages = g_slist_prepend (priv->pages, page);
+
+ sections = nmt_editor_page_get_sections (page);
+ for (iter = sections; iter; iter = iter->next) {
+ if (!first_section)
+ first_section = iter->data;
+ nmt_editor_grid_append (grid, NULL, iter->data, NULL);
+ }
+
+ return first_section;
+}
+
+static void
+nmt_editor_constructed (GObject *object)
+{
+ NmtEditor *editor = NMT_EDITOR (object);
+ NmtEditorPrivate *priv = NMT_EDITOR_GET_PRIVATE (editor);
+ NMSettingConnection *s_con;
+ NmtNewtWidget *vbox, *widget, *buttons;
+ NmtEditorGrid *grid;
+ const char *deventry_label;
+ NmtDeviceEntry *deventry;
+ GType hardware_type;
+ const char *slave_type;
+ NmtEditorPage *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 ();
+
+ s_con = nm_connection_get_setting_connection (priv->edit_connection);
+
+ grid = NMT_EDITOR_GRID (nmt_editor_grid_new ());
+ nmt_newt_grid_add (NMT_NEWT_GRID (vbox), NMT_NEWT_WIDGET (grid), 0, 0);
+
+ /* Add the top widgets */
+
+ 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_editor_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;
+
+ /* For connections involving multiple network devices, clarify which one
+ * NMSettingConnection:interface-name refers to.
+ */
+ if (nm_connection_is_type (priv->edit_connection, NM_SETTING_PPPOE_SETTING_NAME))
+ deventry_label = _("Ethernet device");
+ else
+ deventry_label = _("Device");
+
+ widget = nmt_device_entry_new (deventry_label, 40, hardware_type);
+ nmt_editor_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_editor_grid_append (grid, NULL, nmt_newt_separator_new (), NULL);
+
+ /* Now add the various pages... */
+
+ if (nm_connection_is_type (priv->edit_connection, NM_SETTING_BOND_SETTING_NAME))
+ page = nmt_page_bond_new (priv->edit_connection, deventry);
+ else if (nm_connection_is_type (priv->edit_connection, NM_SETTING_BRIDGE_SETTING_NAME))
+ page = nmt_page_bridge_new (priv->edit_connection, deventry);
+ else if (nm_connection_is_type (priv->edit_connection, NM_SETTING_INFINIBAND_SETTING_NAME))
+ page = nmt_page_infiniband_new (priv->edit_connection, deventry);
+ else if (nm_connection_is_type (priv->edit_connection, NM_SETTING_PPPOE_SETTING_NAME))
+ page = nmt_page_dsl_new (priv->edit_connection, deventry);
+ else if (nm_connection_is_type (priv->edit_connection, NM_SETTING_TEAM_SETTING_NAME))
+ page = nmt_page_team_new (priv->edit_connection, deventry);
+ else if (nm_connection_is_type (priv->edit_connection, NM_SETTING_VLAN_SETTING_NAME))
+ page = nmt_page_vlan_new (priv->edit_connection, deventry);
+ else if (nm_connection_is_type (priv->edit_connection, NM_SETTING_WIRED_SETTING_NAME))
+ page = nmt_page_ethernet_new (priv->edit_connection, deventry);
+ else if (nm_connection_is_type (priv->edit_connection, NM_SETTING_WIRELESS_SETTING_NAME))
+ page = nmt_page_wifi_new (priv->edit_connection, deventry);
+ else
+ g_assert_not_reached ();
+
+ add_sections_for_page (editor, grid, page);
+ nmt_editor_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))
+ add_sections_for_page (editor, grid, nmt_page_bridge_port_new (priv->edit_connection));
+ else if (!strcmp (slave_type, NM_SETTING_TEAM_SETTING_NAME))
+ add_sections_for_page (editor, grid, nmt_page_team_port_new (priv->edit_connection));
+ } else {
+ NmtNewtWidget *section;
+
+ section = add_sections_for_page (editor, grid, nmt_page_ip4_new (priv->edit_connection));
+
+ /* Add a separator between ip4 and ip6 that's only visible if ip4 is open */
+ widget = nmt_newt_separator_new ();
+ g_object_bind_property (section, "open", widget, "visible", G_BINDING_SYNC_CREATE);
+ nmt_editor_grid_append (grid, NULL, widget, NULL);
+
+ add_sections_for_page (editor, grid, nmt_page_ip6_new (priv->edit_connection));
+
+ nmt_editor_grid_append (grid, NULL, nmt_newt_separator_new (), NULL);
+ }
+
+ /* And finally the bottom widgets */
+
+ 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_editor_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_editor_grid_append (grid, NULL, widget, NULL);
+
+ /* And the button box */
+
+ 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 (NMT_NEWT_WIDGET (grid), "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_slist_free_full (priv->pages, g_object_unref);
+
+ 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/clients/tui/nmt-editor.h
index a991a7666..db10b82a1 100644
--- a/tui/nmt-editor.h
+++ b/clients/tui/nmt-editor.h
@@ -19,7 +19,7 @@
#ifndef NMT_EDITOR_H
#define NMT_EDITOR_H
-#include <nm-connection.h>
+#include <NetworkManager.h>
#include "nmt-newt.h"
diff --git a/tui/nmt-ip-entry.c b/clients/tui/nmt-ip-entry.c
index 85a29fcce..30c7e2e48 100644
--- a/tui/nmt-ip-entry.c
+++ b/clients/tui/nmt-ip-entry.c
@@ -231,24 +231,26 @@ nmt_ip_entry_class_init (NmtIPEntryClass *entry_class)
*
* 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));
+ 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));
+ 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:
*
@@ -256,10 +258,11 @@ nmt_ip_entry_class_init (NmtIPEntryClass *entry_class)
* 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));
+ 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/clients/tui/nmt-ip-entry.h
index ceb355efc..ceb355efc 100644
--- a/tui/nmt-ip-entry.h
+++ b/clients/tui/nmt-ip-entry.h
diff --git a/tui/nmt-mac-entry.c b/clients/tui/nmt-mac-entry.c
index 5e1c41743..6501f09af 100644
--- a/tui/nmt-mac-entry.c
+++ b/clients/tui/nmt-mac-entry.c
@@ -30,8 +30,7 @@
#include <string.h>
-#include <dbus/dbus-glib.h>
-#include <nm-utils.h>
+#include <NetworkManager.h>
#include "nmt-mac-entry.h"
@@ -153,8 +152,6 @@ nmt_mac_entry_set_property (GObject *object,
GParamSpec *pspec)
{
NmtMacEntryPrivate *priv = NMT_MAC_ENTRY_GET_PRIVATE (object);
- GByteArray *addr;
- char *addr_str;
switch (prop_id) {
case PROP_MAC_LENGTH:
@@ -162,13 +159,7 @@ nmt_mac_entry_set_property (GObject *object,
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), "");
+ nmt_newt_entry_set_text (NMT_NEWT_ENTRY (object), g_value_get_string (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -183,15 +174,13 @@ nmt_mac_entry_get_property (GObject *object,
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);
+ g_value_set_string (value, nmt_newt_entry_get_text (NMT_NEWT_ENTRY (object)));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -217,20 +206,22 @@ nmt_mac_entry_class_init (NmtMacEntryClass *entry_class)
* 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));
+ 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).
+ * The MAC address, as a string (as with 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));
+ g_object_class_install_property
+ (object_class, PROP_MAC_ADDRESS,
+ g_param_spec_string ("mac-address", "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
}
diff --git a/tui/nmt-mac-entry.h b/clients/tui/nmt-mac-entry.h
index 33a323298..2e3e6cd1f 100644
--- a/tui/nmt-mac-entry.h
+++ b/clients/tui/nmt-mac-entry.h
@@ -19,10 +19,7 @@
#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 "nm-utils.h"
#include "nmt-newt.h"
G_BEGIN_DECLS
diff --git a/tui/nmt-mtu-entry.c b/clients/tui/nmt-mtu-entry.c
index da3746ccb..f599557ae 100644
--- a/tui/nmt-mtu-entry.c
+++ b/clients/tui/nmt-mtu-entry.c
@@ -183,9 +183,10 @@ nmt_mtu_entry_class_init (NmtMtuEntryClass *entry_class)
*
* 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));
+ 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/clients/tui/nmt-mtu-entry.h
index dfe416d0e..dfe416d0e 100644
--- a/tui/nmt-mtu-entry.h
+++ b/clients/tui/nmt-mtu-entry.h
diff --git a/tui/nmt-page-bond.c b/clients/tui/nmt-page-bond.c
index 55a6ffeeb..b043b513d 100644
--- a/tui/nmt-page-bond.c
+++ b/clients/tui/nmt-page-bond.c
@@ -35,7 +35,7 @@
#include "nmt-address-list.h"
#include "nmt-slave-list.h"
-G_DEFINE_TYPE (NmtPageBond, nmt_page_bond, NMT_TYPE_PAGE_DEVICE)
+G_DEFINE_TYPE (NmtPageBond, nmt_page_bond, NMT_TYPE_EDITOR_PAGE_DEVICE)
#define NMT_PAGE_BOND_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_PAGE_BOND, NmtPageBondPrivate))
@@ -64,13 +64,12 @@ typedef struct {
gboolean updating;
} NmtPageBondPrivate;
-NmtNewtWidget *
+NmtEditorPage *
nmt_page_bond_new (NMConnection *conn,
NmtDeviceEntry *deventry)
{
return g_object_new (NMT_TYPE_PAGE_BOND,
"connection", conn,
- "title", _("BOND"),
"device-entry", deventry,
NULL);
}
@@ -161,7 +160,7 @@ bond_options_changed (GObject *object,
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,
+ "strings", ips,
NULL);
g_strfreev (ips);
@@ -252,10 +251,14 @@ mode_widget_changed (GObject *object,
} else
nmt_newt_component_set_sensitive (NMT_NEWT_COMPONENT (priv->monitoring), TRUE);
- if (!strcmp (mode, "active-backup"))
+ if (!strcmp (mode, "active-backup")) {
nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->primary), TRUE);
- else
+ nm_setting_bond_add_option (priv->s_bond, NM_SETTING_BOND_OPTION_PRIMARY,
+ nmt_newt_entry_get_text (priv->primary));
+ } else {
nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->primary), FALSE);
+ nm_setting_bond_remove_option (priv->s_bond, NM_SETTING_BOND_OPTION_PRIMARY);
+ }
}
static void
@@ -334,8 +337,8 @@ nmt_page_bond_constructed (GObject *object)
{
NmtPageBond *bond = NMT_PAGE_BOND (object);
NmtPageBondPrivate *priv = NMT_PAGE_BOND_GET_PRIVATE (bond);
- NmtDeviceEntry *deventry;
- NmtPageGrid *grid;
+ NmtEditorSection *section;
+ NmtEditorGrid *grid;
NMSettingBond *s_bond;
NmtNewtWidget *widget, *label;
NMConnection *conn;
@@ -348,73 +351,69 @@ nmt_page_bond_constructed (GObject *object)
}
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);
+ section = nmt_editor_section_new (_("BOND"), NULL, TRUE);
+ grid = nmt_editor_section_get_body (section);
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);
+ nmt_editor_grid_append (grid, _("Slaves"), widget, NULL);
+ nmt_editor_grid_set_row_flags (grid, widget, NMT_EDITOR_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);
+ nmt_editor_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);
+ nmt_editor_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);
+ nmt_editor_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);
+ nmt_editor_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);
+ nmt_editor_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);
+ nmt_editor_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);
+ nmt_editor_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);
+ nmt_editor_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);
+ nmt_editor_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,
@@ -422,6 +421,8 @@ nmt_page_bond_constructed (GObject *object)
bond_options_changed (G_OBJECT (s_bond), NULL, bond);
slaves_changed (G_OBJECT (priv->slaves), NULL, bond);
+ nmt_editor_page_add_section (NMT_EDITOR_PAGE (bond), section);
+
G_OBJECT_CLASS (nmt_page_bond_parent_class)->constructed (object);
}
diff --git a/tui/nmt-page-bond.h b/clients/tui/nmt-page-bond.h
index c8e69dd5e..b77477db2 100644
--- a/tui/nmt-page-bond.h
+++ b/clients/tui/nmt-page-bond.h
@@ -19,7 +19,7 @@
#ifndef NMT_PAGE_BOND_H
#define NMT_PAGE_BOND_H
-#include "nmt-page-device.h"
+#include "nmt-editor-page-device.h"
G_BEGIN_DECLS
@@ -31,18 +31,18 @@ G_BEGIN_DECLS
#define NMT_PAGE_BOND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_PAGE_BOND, NmtPageBondClass))
typedef struct {
- NmtPageDevice parent;
+ NmtEditorPageDevice parent;
} NmtPageBond;
typedef struct {
- NmtPageDeviceClass parent;
+ NmtEditorPageDeviceClass parent;
} NmtPageBondClass;
GType nmt_page_bond_get_type (void);
-NmtNewtWidget *nmt_page_bond_new (NMConnection *conn,
+NmtEditorPage *nmt_page_bond_new (NMConnection *conn,
NmtDeviceEntry *deventry);
G_END_DECLS
diff --git a/tui/nmt-page-bridge-port.c b/clients/tui/nmt-page-bridge-port.c
index ab7a78887..c9ef14ed8 100644
--- a/tui/nmt-page-bridge-port.c
+++ b/clients/tui/nmt-page-bridge-port.c
@@ -30,12 +30,11 @@
G_DEFINE_TYPE (NmtPageBridgePort, nmt_page_bridge_port, NMT_TYPE_EDITOR_PAGE)
-NmtNewtWidget *
+NmtEditorPage *
nmt_page_bridge_port_new (NMConnection *conn)
{
return g_object_new (NMT_TYPE_PAGE_BRIDGE_PORT,
"connection", conn,
- "title", _("BRIDGE PORT"),
NULL);
}
@@ -48,7 +47,8 @@ static void
nmt_page_bridge_port_constructed (GObject *object)
{
NmtPageBridgePort *bridge = NMT_PAGE_BRIDGE_PORT (object);
- NmtPageGrid *grid;
+ NmtEditorSection *section;
+ NmtEditorGrid *grid;
NMSettingBridgePort *s_port;
NmtNewtWidget *widget;
NMConnection *conn;
@@ -60,25 +60,28 @@ nmt_page_bridge_port_constructed (GObject *object)
s_port = nm_connection_get_setting_bridge_port (conn);
}
- grid = NMT_PAGE_GRID (bridge);
+ section = nmt_editor_section_new (_("BRIDGE PORT"), NULL, TRUE);
+ grid = nmt_editor_section_get_body (section);
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);
+ nmt_editor_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);
+ nmt_editor_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);
+ nmt_editor_grid_append (grid, NULL, widget, NULL);
+
+ nmt_editor_page_add_section (NMT_EDITOR_PAGE (bridge), section);
G_OBJECT_CLASS (nmt_page_bridge_port_parent_class)->constructed (object);
}
diff --git a/tui/nmt-page-bridge-port.h b/clients/tui/nmt-page-bridge-port.h
index 7fe3a92c4..c566dbc09 100644
--- a/tui/nmt-page-bridge-port.h
+++ b/clients/tui/nmt-page-bridge-port.h
@@ -42,7 +42,7 @@ typedef struct {
GType nmt_page_bridge_port_get_type (void);
-NmtNewtWidget *nmt_page_bridge_port_new (NMConnection *conn);
+NmtEditorPage *nmt_page_bridge_port_new (NMConnection *conn);
G_END_DECLS
diff --git a/tui/nmt-page-bridge.c b/clients/tui/nmt-page-bridge.c
index 713d83507..460be60b4 100644
--- a/tui/nmt-page-bridge.c
+++ b/clients/tui/nmt-page-bridge.c
@@ -31,15 +31,14 @@
#include "nmt-address-list.h"
#include "nmt-slave-list.h"
-G_DEFINE_TYPE (NmtPageBridge, nmt_page_bridge, NMT_TYPE_PAGE_DEVICE)
+G_DEFINE_TYPE (NmtPageBridge, nmt_page_bridge, NMT_TYPE_EDITOR_PAGE_DEVICE)
-NmtNewtWidget *
+NmtEditorPage *
nmt_page_bridge_new (NMConnection *conn,
NmtDeviceEntry *deventry)
{
return g_object_new (NMT_TYPE_PAGE_BRIDGE,
"connection", conn,
- "title", _("BRIDGE"),
"device-entry", deventry,
NULL);
}
@@ -62,8 +61,8 @@ static void
nmt_page_bridge_constructed (GObject *object)
{
NmtPageBridge *bridge = NMT_PAGE_BRIDGE (object);
- NmtDeviceEntry *deventry;
- NmtPageGrid *grid;
+ NmtEditorSection *section;
+ NmtEditorGrid *grid;
NMSettingBridge *s_bridge;
NmtNewtWidget *widget, *label, *stp;
NMConnection *conn;
@@ -75,32 +74,28 @@ nmt_page_bridge_constructed (GObject *object)
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);
+ section = nmt_editor_section_new (_("BRIDGE"), NULL, TRUE);
+ grid = nmt_editor_section_get_body (section);
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);
+ nmt_editor_grid_append (grid, _("Slaves"), widget, NULL);
+ nmt_editor_grid_set_row_flags (grid, widget, NMT_EDITOR_GRID_ROW_LABEL_ALIGN_LEFT);
widget = nmt_slave_list_new (conn, bridge_connection_type_filter, bridge);
- nmt_page_grid_append (grid, NULL, widget, NULL);
+ nmt_editor_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);
+ nmt_editor_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);
+ nmt_editor_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,
@@ -109,7 +104,7 @@ nmt_page_bridge_constructed (GObject *object)
g_object_bind_property (s_bridge, NM_SETTING_BRIDGE_STP,
widget, "sensitive",
G_BINDING_SYNC_CREATE);
- nmt_page_grid_append (grid, _("Priority"), widget, NULL);
+ nmt_editor_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,
@@ -119,7 +114,7 @@ nmt_page_bridge_constructed (GObject *object)
widget, "sensitive",
G_BINDING_SYNC_CREATE);
label = nmt_newt_label_new (_("seconds"));
- nmt_page_grid_append (grid, _("Forward delay"), widget, label);
+ nmt_editor_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,
@@ -129,7 +124,7 @@ nmt_page_bridge_constructed (GObject *object)
widget, "sensitive",
G_BINDING_SYNC_CREATE);
label = nmt_newt_label_new (_("seconds"));
- nmt_page_grid_append (grid, _("Hello time"), widget, label);
+ nmt_editor_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,
@@ -139,7 +134,9 @@ nmt_page_bridge_constructed (GObject *object)
widget, "sensitive",
G_BINDING_SYNC_CREATE);
label = nmt_newt_label_new (_("seconds"));
- nmt_page_grid_append (grid, _("Max age"), widget, label);
+ nmt_editor_grid_append (grid, _("Max age"), widget, label);
+
+ nmt_editor_page_add_section (NMT_EDITOR_PAGE (bridge), section);
G_OBJECT_CLASS (nmt_page_bridge_parent_class)->constructed (object);
}
diff --git a/tui/nmt-page-bridge.h b/clients/tui/nmt-page-bridge.h
index b11d35029..60cbdea23 100644
--- a/tui/nmt-page-bridge.h
+++ b/clients/tui/nmt-page-bridge.h
@@ -19,7 +19,7 @@
#ifndef NMT_PAGE_BRIDGE_H
#define NMT_PAGE_BRIDGE_H
-#include "nmt-page-device.h"
+#include "nmt-editor-page-device.h"
G_BEGIN_DECLS
@@ -31,18 +31,18 @@ G_BEGIN_DECLS
#define NMT_PAGE_BRIDGE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_PAGE_BRIDGE, NmtPageBridgeClass))
typedef struct {
- NmtPageDevice parent;
+ NmtEditorPageDevice parent;
} NmtPageBridge;
typedef struct {
- NmtPageDeviceClass parent;
+ NmtEditorPageDeviceClass parent;
} NmtPageBridgeClass;
GType nmt_page_bridge_get_type (void);
-NmtNewtWidget *nmt_page_bridge_new (NMConnection *conn,
+NmtEditorPage *nmt_page_bridge_new (NMConnection *conn,
NmtDeviceEntry *deventry);
G_END_DECLS
diff --git a/clients/tui/nmt-page-dsl.c b/clients/tui/nmt-page-dsl.c
new file mode 100644
index 000000000..e8894d1ad
--- /dev/null
+++ b/clients/tui/nmt-page-dsl.c
@@ -0,0 +1,141 @@
+/* -*- 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 2014 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-page-dsl
+ * @short_description: The editor page for DSL connections
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <glib/gi18n-lib.h>
+
+#include "nmt-page-dsl.h"
+#include "nmt-page-ethernet.h"
+#include "nmt-page-ppp.h"
+#include "nmt-password-fields.h"
+
+G_DEFINE_TYPE (NmtPageDsl, nmt_page_dsl, NMT_TYPE_EDITOR_PAGE_DEVICE)
+
+#define NMT_PAGE_DSL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_PAGE_DSL, NmtPageDslPrivate))
+
+typedef struct {
+ NmtEditorPage *ethernet_page, *ppp_page;
+
+} NmtPageDslPrivate;
+
+NmtEditorPage *
+nmt_page_dsl_new (NMConnection *conn,
+ NmtDeviceEntry *deventry)
+{
+ return g_object_new (NMT_TYPE_PAGE_DSL,
+ "connection", conn,
+ "device-entry", deventry,
+ NULL);
+}
+
+static void
+nmt_page_dsl_init (NmtPageDsl *dsl)
+{
+}
+
+static NmtEditorSection *
+build_dsl_section (NmtPageDsl *dsl, NMSettingPppoe *s_pppoe)
+{
+ NmtEditorSection *section;
+ NmtEditorGrid *grid;
+ NmtNewtWidget *widget;
+
+ section = nmt_editor_section_new (_("DSL"), NULL, TRUE);
+ grid = nmt_editor_section_get_body (section);
+
+ widget = nmt_newt_entry_new (40, 0);
+ nmt_editor_grid_append (grid, _("Username"), widget, NULL);
+ g_object_bind_property (s_pppoe, NM_SETTING_PPPOE_USERNAME,
+ widget, "text",
+ G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
+
+ widget = nmt_password_fields_new (40, NMT_PASSWORD_FIELDS_SHOW_PASSWORD);
+ g_object_bind_property (s_pppoe, NM_SETTING_PPPOE_PASSWORD,
+ widget, "password",
+ G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
+ nmt_editor_grid_append (grid, _("Password"), widget, NULL);
+
+ widget = nmt_newt_entry_new (40, 0);
+ nmt_editor_grid_append (grid, _("Service"), widget, NULL);
+ g_object_bind_property (s_pppoe, NM_SETTING_PPPOE_SERVICE,
+ widget, "text",
+ G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
+
+ return section;
+}
+
+static void
+nmt_page_dsl_constructed (GObject *object)
+{
+ NmtPageDsl *dsl = NMT_PAGE_DSL (object);
+ NmtPageDslPrivate *priv = NMT_PAGE_DSL_GET_PRIVATE (dsl);
+ NMConnection *conn;
+ NMSettingPppoe *s_pppoe;
+ NmtEditorSection *section;
+ const GSList *sections, *iter;
+
+ conn = nmt_editor_page_get_connection (NMT_EDITOR_PAGE (dsl));
+ s_pppoe = nm_connection_get_setting_pppoe (conn);
+ if (!s_pppoe) {
+ nm_connection_add_setting (conn, nm_setting_pppoe_new ());
+ s_pppoe = nm_connection_get_setting_pppoe (conn);
+ }
+
+ section = build_dsl_section (dsl, s_pppoe);
+ nmt_editor_page_add_section (NMT_EDITOR_PAGE (dsl), section);
+
+ priv->ethernet_page = nmt_page_ethernet_new (conn, nmt_editor_page_device_get_device_entry (NMT_EDITOR_PAGE_DEVICE (dsl)));
+ sections = nmt_editor_page_get_sections (priv->ethernet_page);
+ for (iter = sections; iter; iter = iter->next)
+ nmt_editor_page_add_section (NMT_EDITOR_PAGE (dsl), iter->data);
+
+ priv->ppp_page = nmt_page_ppp_new (conn);
+ sections = nmt_editor_page_get_sections (priv->ppp_page);
+ for (iter = sections; iter; iter = iter->next)
+ nmt_editor_page_add_section (NMT_EDITOR_PAGE (dsl), iter->data);
+
+ G_OBJECT_CLASS (nmt_page_dsl_parent_class)->constructed (object);
+}
+
+static void
+nmt_page_dsl_finalize (GObject *object)
+{
+ NmtPageDsl *dsl = NMT_PAGE_DSL (object);
+ NmtPageDslPrivate *priv = NMT_PAGE_DSL_GET_PRIVATE (dsl);
+
+ g_clear_object (&priv->ethernet_page);
+ g_clear_object (&priv->ppp_page);
+
+ G_OBJECT_CLASS (nmt_page_dsl_parent_class)->finalize (object);
+}
+
+static void
+nmt_page_dsl_class_init (NmtPageDslClass *dsl_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (dsl_class);
+
+ object_class->constructed = nmt_page_dsl_constructed;
+ object_class->finalize = nmt_page_dsl_finalize;
+}
diff --git a/clients/tui/nmt-page-dsl.h b/clients/tui/nmt-page-dsl.h
new file mode 100644
index 000000000..b938ead23
--- /dev/null
+++ b/clients/tui/nmt-page-dsl.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_DSL_H
+#define NMT_PAGE_DSL_H
+
+#include "nmt-editor-page-device.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_PAGE_DSL (nmt_page_dsl_get_type ())
+#define NMT_PAGE_DSL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_PAGE_DSL, NmtPageDsl))
+#define NMT_PAGE_DSL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_PAGE_DSL, NmtPageDslClass))
+#define NMT_IS_PAGE_DSL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_PAGE_DSL))
+#define NMT_IS_PAGE_DSL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_PAGE_DSL))
+#define NMT_PAGE_DSL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_PAGE_DSL, NmtPageDslClass))
+
+typedef struct {
+ NmtEditorPageDevice parent;
+
+} NmtPageDsl;
+
+typedef struct {
+ NmtEditorPageDeviceClass parent;
+
+} NmtPageDslClass;
+
+GType nmt_page_dsl_get_type (void);
+
+NmtEditorPage *nmt_page_dsl_new (NMConnection *conn,
+ NmtDeviceEntry *deventry);
+
+G_END_DECLS
+
+#endif /* NMT_PAGE_DSL_H */
diff --git a/tui/nmt-page-ethernet.c b/clients/tui/nmt-page-ethernet.c
index 9eb08fe5b..cf4ef2c45 100644
--- a/tui/nmt-page-ethernet.c
+++ b/clients/tui/nmt-page-ethernet.c
@@ -30,17 +30,15 @@
#include "nmt-mac-entry.h"
#include "nmt-mtu-entry.h"
-G_DEFINE_TYPE (NmtPageEthernet, nmt_page_ethernet, NMT_TYPE_PAGE_DEVICE)
+G_DEFINE_TYPE (NmtPageEthernet, nmt_page_ethernet, NMT_TYPE_EDITOR_PAGE_DEVICE)
-NmtNewtWidget *
+NmtEditorPage *
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);
}
@@ -54,7 +52,8 @@ nmt_page_ethernet_constructed (GObject *object)
{
NmtPageEthernet *ethernet = NMT_PAGE_ETHERNET (object);
NmtDeviceEntry *deventry;
- NmtPageGrid *grid;
+ NmtEditorSection *section;
+ NmtEditorGrid *grid;
NMSettingWired *s_wired;
NmtNewtWidget *widget;
NMConnection *conn;
@@ -66,24 +65,27 @@ nmt_page_ethernet_constructed (GObject *object)
s_wired = nm_connection_get_setting_wired (conn);
}
- deventry = nmt_page_device_get_device_entry (NMT_PAGE_DEVICE (object));
+ deventry = nmt_editor_page_device_get_device_entry (NMT_EDITOR_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);
+ section = nmt_editor_section_new (_("ETHERNET"), NULL, FALSE);
+ grid = nmt_editor_section_get_body (section);
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);
+ nmt_editor_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);
+ nmt_editor_grid_append (grid, _("MTU"), widget, NULL);
+
+ nmt_editor_page_add_section (NMT_EDITOR_PAGE (ethernet), section);
G_OBJECT_CLASS (nmt_page_ethernet_parent_class)->constructed (object);
}
diff --git a/tui/nmt-page-ethernet.h b/clients/tui/nmt-page-ethernet.h
index 5e001562f..bdf3d6773 100644
--- a/tui/nmt-page-ethernet.h
+++ b/clients/tui/nmt-page-ethernet.h
@@ -19,7 +19,7 @@
#ifndef NMT_PAGE_ETHERNET_H
#define NMT_PAGE_ETHERNET_H
-#include "nmt-page-device.h"
+#include "nmt-editor-page-device.h"
G_BEGIN_DECLS
@@ -31,18 +31,18 @@ G_BEGIN_DECLS
#define NMT_PAGE_ETHERNET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_PAGE_ETHERNET, NmtPageEthernetClass))
typedef struct {
- NmtPageDevice parent;
+ NmtEditorPageDevice parent;
} NmtPageEthernet;
typedef struct {
- NmtPageDeviceClass parent;
+ NmtEditorPageDeviceClass parent;
} NmtPageEthernetClass;
GType nmt_page_ethernet_get_type (void);
-NmtNewtWidget *nmt_page_ethernet_new (NMConnection *conn,
+NmtEditorPage *nmt_page_ethernet_new (NMConnection *conn,
NmtDeviceEntry *deventry);
G_END_DECLS
diff --git a/tui/nmt-page-infiniband.c b/clients/tui/nmt-page-infiniband.c
index 59fa68000..f39b0b84f 100644
--- a/tui/nmt-page-infiniband.c
+++ b/clients/tui/nmt-page-infiniband.c
@@ -29,15 +29,14 @@
#include "nmt-page-infiniband.h"
#include "nmt-mtu-entry.h"
-G_DEFINE_TYPE (NmtPageInfiniband, nmt_page_infiniband, NMT_TYPE_PAGE_DEVICE)
+G_DEFINE_TYPE (NmtPageInfiniband, nmt_page_infiniband, NMT_TYPE_EDITOR_PAGE_DEVICE)
-NmtNewtWidget *
+NmtEditorPage *
nmt_page_infiniband_new (NMConnection *conn,
NmtDeviceEntry *deventry)
{
return g_object_new (NMT_TYPE_PAGE_INFINIBAND,
"connection", conn,
- "title", _("INFINIBAND"),
"device-entry", deventry,
NULL);
}
@@ -58,7 +57,8 @@ nmt_page_infiniband_constructed (GObject *object)
{
NmtPageInfiniband *infiniband = NMT_PAGE_INFINIBAND (object);
NmtDeviceEntry *deventry;
- NmtPageGrid *grid;
+ NmtEditorSection *section;
+ NmtEditorGrid *grid;
NMSettingInfiniband *s_ib;
NmtNewtWidget *widget;
NMConnection *conn;
@@ -76,24 +76,27 @@ nmt_page_infiniband_constructed (GObject *object)
NULL);
}
- deventry = nmt_page_device_get_device_entry (NMT_PAGE_DEVICE (object));
+ deventry = nmt_editor_page_device_get_device_entry (NMT_EDITOR_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);
+ section = nmt_editor_section_new (_("INFINIBAND"), NULL, TRUE);
+ grid = nmt_editor_section_get_body (section);
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);
+ nmt_editor_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);
+ nmt_editor_grid_append (grid, _("MTU"), widget, NULL);
+
+ nmt_editor_page_add_section (NMT_EDITOR_PAGE (infiniband), section);
G_OBJECT_CLASS (nmt_page_infiniband_parent_class)->constructed (object);
}
diff --git a/tui/nmt-page-infiniband.h b/clients/tui/nmt-page-infiniband.h
index 706b7b60c..f51e0874e 100644
--- a/tui/nmt-page-infiniband.h
+++ b/clients/tui/nmt-page-infiniband.h
@@ -19,7 +19,7 @@
#ifndef NMT_PAGE_INFINIBAND_H
#define NMT_PAGE_INFINIBAND_H
-#include "nmt-page-device.h"
+#include "nmt-editor-page-device.h"
G_BEGIN_DECLS
@@ -31,18 +31,18 @@ G_BEGIN_DECLS
#define NMT_PAGE_INFINIBAND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_PAGE_INFINIBAND, NmtPageInfinibandClass))
typedef struct {
- NmtPageDevice parent;
+ NmtEditorPageDevice parent;
} NmtPageInfiniband;
typedef struct {
- NmtPageDeviceClass parent;
+ NmtEditorPageDeviceClass parent;
} NmtPageInfinibandClass;
GType nmt_page_infiniband_get_type (void);
-NmtNewtWidget *nmt_page_infiniband_new (NMConnection *conn,
+NmtEditorPage *nmt_page_infiniband_new (NMConnection *conn,
NmtDeviceEntry *deventry);
G_END_DECLS
diff --git a/tui/nmt-page-ip4.c b/clients/tui/nmt-page-ip4.c
index 1c2d31744..df3f0b647 100644
--- a/tui/nmt-page-ip4.c
+++ b/clients/tui/nmt-page-ip4.c
@@ -46,29 +46,14 @@ static NmtNewtPopupEntry ip4methods[] = {
{ NULL, NULL }
};
-NmtNewtWidget *
+NmtEditorPage *
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)
{
@@ -114,82 +99,96 @@ static void
nmt_page_ip4_constructed (GObject *object)
{
NmtPageIP4 *ip4 = NMT_PAGE_IP4 (object);
- NmtPageGrid *grid;
- NMSettingIP4Config *s_ip4;
+ gboolean show_by_default;
+ NmtEditorSection *section;
+ NmtEditorGrid *grid;
+ NMSettingIPConfig *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 ();
+ s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new ();
g_object_set (G_OBJECT (s_ip4),
- NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
+ NM_SETTING_IP_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,
+ g_object_bind_property (s_ip4, NM_SETTING_IP_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);
+ if (!g_strcmp0 (nm_setting_ip_config_get_method (s_ip4), NM_SETTING_IP4_CONFIG_METHOD_MANUAL))
+ show_by_default = TRUE;
+ else if (nm_setting_ip_config_get_num_addresses (s_ip4))
+ show_by_default = TRUE;
+ else
+ show_by_default = FALSE;
+
+ section = nmt_editor_section_new (_("IPv4 CONFIGURATION"), widget, show_by_default);
+ grid = nmt_editor_section_get_body (section);
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);
+ nm_editor_bind_ip_addresses_with_prefix_to_strv (AF_INET,
+ s_ip4, NM_SETTING_IP_CONFIG_ADDRESSES,
+ widget, "strings",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ nmt_editor_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);
+ nm_editor_bind_ip_gateway_to_string (AF_INET,
+ s_ip4,
+ widget, "text", "sensitive",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ nmt_editor_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);
+ nm_editor_bind_ip_addresses_to_strv (AF_INET,
+ s_ip4, NM_SETTING_IP_CONFIG_DNS,
+ widget, "strings",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ nmt_editor_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,
+ g_object_bind_property (s_ip4, NM_SETTING_IP_CONFIG_DNS_SEARCH,
widget, "strings",
G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
- nmt_page_grid_append (grid, _("Search domains"), widget, NULL);
+ nmt_editor_grid_append (grid, _("Search domains"), widget, NULL);
- nmt_page_grid_append (grid, NULL, nmt_newt_separator_new (), NULL);
+ nmt_editor_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,
+ g_object_bind_property_full (s_ip4, NM_SETTING_IP_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);
+ nmt_editor_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,
+ g_object_bind_property (s_ip4, NM_SETTING_IP_CONFIG_NEVER_DEFAULT,
widget, "active",
G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
- nmt_page_grid_append (grid, NULL, widget, NULL);
+ nmt_editor_grid_append (grid, NULL, widget, NULL);
- nmt_page_grid_append (grid, NULL, nmt_newt_separator_new (), NULL);
+ nmt_editor_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,
+ g_object_bind_property (s_ip4, NM_SETTING_IP_CONFIG_MAY_FAIL,
widget, "active",
G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL |
G_BINDING_INVERT_BOOLEAN);
- nmt_page_grid_append (grid, NULL, widget, NULL);
+ nmt_editor_grid_append (grid, NULL, widget, NULL);
+
+ nmt_editor_page_add_section (NMT_EDITOR_PAGE (ip4), section);
G_OBJECT_CLASS (nmt_page_ip4_parent_class)->constructed (object);
}
diff --git a/tui/nmt-page-ip4.h b/clients/tui/nmt-page-ip4.h
index f3bb933e0..e3c5a0034 100644
--- a/tui/nmt-page-ip4.h
+++ b/clients/tui/nmt-page-ip4.h
@@ -42,9 +42,7 @@ typedef struct {
GType nmt_page_ip4_get_type (void);
-NmtNewtWidget *nmt_page_ip4_new (NMConnection *conn);
-
-gboolean nmt_page_ip4_is_non_empty (NmtPageIP4 *ip4);
+NmtEditorPage *nmt_page_ip4_new (NMConnection *conn);
G_END_DECLS
diff --git a/tui/nmt-page-ip6.c b/clients/tui/nmt-page-ip6.c
index ae859bd93..1513dbfa0 100644
--- a/tui/nmt-page-ip6.c
+++ b/clients/tui/nmt-page-ip6.c
@@ -46,29 +46,14 @@ static NmtNewtPopupEntry ip6methods[] = {
{ NULL, NULL }
};
-NmtNewtWidget *
+NmtEditorPage *
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)
{
@@ -114,80 +99,94 @@ static void
nmt_page_ip6_constructed (GObject *object)
{
NmtPageIP6 *ip6 = NMT_PAGE_IP6 (object);
- NmtPageGrid *grid;
- NMSettingIP6Config *s_ip6;
+ gboolean show_by_default;
+ NmtEditorSection *section;
+ NmtEditorGrid *grid;
+ NMSettingIPConfig *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 ();
+ s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new ();
g_object_set (G_OBJECT (s_ip6),
- NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO,
+ NM_SETTING_IP_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,
+ g_object_bind_property (s_ip6, NM_SETTING_IP_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);
+ if (!g_strcmp0 (nm_setting_ip_config_get_method (s_ip6), NM_SETTING_IP6_CONFIG_METHOD_MANUAL))
+ show_by_default = TRUE;
+ else if (nm_setting_ip_config_get_num_addresses (s_ip6))
+ show_by_default = TRUE;
+ else
+ show_by_default = FALSE;
+
+ section = nmt_editor_section_new (_("IPv6 CONFIGURATION"), widget, show_by_default);
+ grid = nmt_editor_section_get_body (section);
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);
+ nm_editor_bind_ip_addresses_with_prefix_to_strv (AF_INET6,
+ s_ip6, NM_SETTING_IP_CONFIG_ADDRESSES,
+ widget, "strings",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ nmt_editor_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);
+ nm_editor_bind_ip_gateway_to_string (AF_INET6,
+ s_ip6,
+ widget, "text", "sensitive",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ nmt_editor_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);
+ nm_editor_bind_ip_addresses_to_strv (AF_INET6,
+ s_ip6, NM_SETTING_IP_CONFIG_DNS,
+ widget, "strings",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ nmt_editor_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,
+ g_object_bind_property (s_ip6, NM_SETTING_IP_CONFIG_DNS_SEARCH,
widget, "strings",
G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
- nmt_page_grid_append (grid, _("Search domains"), widget, NULL);
+ nmt_editor_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,
+ g_object_bind_property_full (s_ip6, NM_SETTING_IP_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);
+ nmt_editor_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,
+ g_object_bind_property (s_ip6, NM_SETTING_IP_CONFIG_NEVER_DEFAULT,
widget, "active",
G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
- nmt_page_grid_append (grid, NULL, widget, NULL);
+ nmt_editor_grid_append (grid, NULL, widget, NULL);
- nmt_page_grid_append (grid, NULL, nmt_newt_separator_new (), NULL);
+ nmt_editor_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,
+ g_object_bind_property (s_ip6, NM_SETTING_IP_CONFIG_MAY_FAIL,
widget, "active",
G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL |
G_BINDING_INVERT_BOOLEAN);
- nmt_page_grid_append (grid, NULL, widget, NULL);
+ nmt_editor_grid_append (grid, NULL, widget, NULL);
+
+ nmt_editor_page_add_section (NMT_EDITOR_PAGE (ip6), section);
G_OBJECT_CLASS (nmt_page_ip6_parent_class)->constructed (object);
}
diff --git a/tui/nmt-page-ip6.h b/clients/tui/nmt-page-ip6.h
index d0d2bfa29..498261e16 100644
--- a/tui/nmt-page-ip6.h
+++ b/clients/tui/nmt-page-ip6.h
@@ -42,9 +42,7 @@ typedef struct {
GType nmt_page_ip6_get_type (void);
-NmtNewtWidget *nmt_page_ip6_new (NMConnection *conn);
-
-gboolean nmt_page_ip6_is_non_empty (NmtPageIP6 *ip6);
+NmtEditorPage *nmt_page_ip6_new (NMConnection *conn);
G_END_DECLS
diff --git a/clients/tui/nmt-page-ppp.c b/clients/tui/nmt-page-ppp.c
new file mode 100644
index 000000000..cec36549d
--- /dev/null
+++ b/clients/tui/nmt-page-ppp.c
@@ -0,0 +1,288 @@
+/* -*- 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 2014 Red Hat, Inc.
+ */
+
+/**
+ * SECTION:nmt-page-ppp
+ * @short_description: The editor page for PPP configuration
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+
+#include <glib.h>
+#include <glib/gi18n-lib.h>
+
+#include "nmt-page-ppp.h"
+#include "nmt-newt-section.h"
+#include "nmt-newt-separator.h"
+
+G_DEFINE_TYPE (NmtPagePpp, nmt_page_ppp, NMT_TYPE_EDITOR_PAGE)
+
+typedef struct {
+ guint32 lcp_echo_failure;
+ guint32 lcp_echo_interval;
+} NmtPagePppPrivate;
+
+#define NMT_PAGE_PPP_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_PAGE_PPP, NmtPagePppPrivate))
+
+NmtEditorPage *
+nmt_page_ppp_new (NMConnection *conn)
+{
+ return g_object_new (NMT_TYPE_PAGE_PPP,
+ "connection", conn,
+ NULL);
+}
+
+static void
+nmt_page_ppp_init (NmtPagePpp *ppp)
+{
+}
+
+static gboolean
+transform_lcp_echo_properties_to_checkbox (GBinding *binding,
+ const GValue *from_value,
+ GValue *to_value,
+ gpointer user_data)
+{
+ NMSettingPpp *s_ppp = NM_SETTING_PPP (g_binding_get_source (binding));
+
+ if ( nm_setting_ppp_get_lcp_echo_interval (s_ppp) != 0
+ && nm_setting_ppp_get_lcp_echo_failure (s_ppp) != 0)
+ g_value_set_boolean (to_value, TRUE);
+ else
+ g_value_set_boolean (to_value, FALSE);
+
+ return TRUE;
+}
+
+static gboolean
+transform_checkbox_to_lcp_echo_interval (GBinding *binding,
+ const GValue *from_value,
+ GValue *to_value,
+ gpointer user_data)
+{
+ NmtPagePpp *ppp = user_data;
+ NmtPagePppPrivate *priv = NMT_PAGE_PPP_GET_PRIVATE (ppp);
+
+ if (g_value_get_boolean (from_value))
+ g_value_set_uint (to_value, priv->lcp_echo_interval);
+ else
+ g_value_set_uint (to_value, 0);
+
+ return TRUE;
+}
+
+static gboolean
+transform_checkbox_to_lcp_echo_failure (GBinding *binding,
+ const GValue *from_value,
+ GValue *to_value,
+ gpointer user_data)
+{
+ NmtPagePpp *ppp = user_data;
+ NmtPagePppPrivate *priv = NMT_PAGE_PPP_GET_PRIVATE (ppp);
+
+ if (g_value_get_boolean (from_value))
+ g_value_set_uint (to_value, priv->lcp_echo_failure);
+ else
+ g_value_set_uint (to_value, 0);
+
+ return TRUE;
+}
+
+static void
+nmt_page_ppp_constructed (GObject *object)
+{
+ NmtPagePpp *ppp = NMT_PAGE_PPP (object);
+ NmtPagePppPrivate *priv = NMT_PAGE_PPP_GET_PRIVATE (ppp);
+ NmtEditorSection *section;
+ NmtEditorGrid *grid;
+ NMSettingPpp *s_ppp;
+ NmtNewtWidget *widget, *use_mppe;
+ NmtNewtGrid *auth_grid, *mppe_grid;
+ NmtNewtSection *auth_section, *mppe_section;
+ NMConnection *conn;
+
+ conn = nmt_editor_page_get_connection (NMT_EDITOR_PAGE (ppp));
+ s_ppp = nm_connection_get_setting_ppp (conn);
+ if (s_ppp) {
+ priv->lcp_echo_interval = nm_setting_ppp_get_lcp_echo_interval (s_ppp);
+ priv->lcp_echo_failure = nm_setting_ppp_get_lcp_echo_failure (s_ppp);
+ } else {
+ s_ppp = (NMSettingPpp *) nm_setting_ppp_new ();
+ nm_connection_add_setting (conn, (NMSetting *) s_ppp);
+
+ priv->lcp_echo_interval = 30;
+ priv->lcp_echo_failure = 5;
+ }
+
+ section = nmt_editor_section_new (_("PPP CONFIGURATION"), NULL, TRUE);
+ grid = nmt_editor_section_get_body (section);
+
+ /* Auth methods */
+ widget = nmt_newt_section_new (FALSE);
+ auth_section = NMT_NEWT_SECTION (widget);
+ g_object_set (auth_section, "open", TRUE, NULL);
+ nmt_editor_grid_append (grid, NULL, widget, NULL);
+
+ widget = nmt_newt_label_new (_("Allowed authentication methods:"));
+ nmt_newt_section_set_header (auth_section, widget);
+
+ widget = nmt_newt_grid_new ();
+ auth_grid = NMT_NEWT_GRID (widget);
+ nmt_newt_section_set_body (auth_section, widget);
+
+ widget = nmt_newt_checkbox_new (_("EAP"));
+ g_object_bind_property (s_ppp, NM_SETTING_PPP_REFUSE_EAP,
+ widget, "active",
+ G_BINDING_BIDIRECTIONAL |
+ G_BINDING_INVERT_BOOLEAN |
+ G_BINDING_SYNC_CREATE);
+ nmt_newt_grid_add (auth_grid, widget, 0, 0);
+
+ widget = nmt_newt_checkbox_new (_("PAP"));
+ g_object_bind_property (s_ppp, NM_SETTING_PPP_REFUSE_PAP,
+ widget, "active",
+ G_BINDING_BIDIRECTIONAL |
+ G_BINDING_INVERT_BOOLEAN |
+ G_BINDING_SYNC_CREATE);
+ nmt_newt_grid_add (auth_grid, widget, 0, 1);
+
+ widget = nmt_newt_checkbox_new (_("CHAP"));
+ g_object_bind_property (s_ppp, NM_SETTING_PPP_REFUSE_CHAP,
+ widget, "active",
+ G_BINDING_BIDIRECTIONAL |
+ G_BINDING_INVERT_BOOLEAN |
+ G_BINDING_SYNC_CREATE);
+ nmt_newt_grid_add (auth_grid, widget, 0, 2);
+
+ widget = nmt_newt_checkbox_new (_("MSCHAPv2"));
+ g_object_bind_property (s_ppp, NM_SETTING_PPP_REFUSE_MSCHAPV2,
+ widget, "active",
+ G_BINDING_BIDIRECTIONAL |
+ G_BINDING_INVERT_BOOLEAN |
+ G_BINDING_SYNC_CREATE);
+ nmt_newt_grid_add (auth_grid, widget, 0, 3);
+
+ widget = nmt_newt_checkbox_new (_("MSCHAP"));
+ g_object_bind_property (s_ppp, NM_SETTING_PPP_REFUSE_MSCHAP,
+ widget, "active",
+ G_BINDING_BIDIRECTIONAL |
+ G_BINDING_INVERT_BOOLEAN |
+ G_BINDING_SYNC_CREATE);
+ nmt_newt_grid_add (auth_grid, widget, 0, 4);
+
+ nmt_editor_grid_append (grid, NULL, nmt_newt_separator_new (), NULL);
+
+ /* MPPE */
+ widget = nmt_newt_section_new (FALSE);
+ mppe_section = NMT_NEWT_SECTION (widget);
+ g_object_set (mppe_section, "open", TRUE, NULL);
+ nmt_editor_grid_append (grid, NULL, widget, NULL);
+
+ widget = nmt_newt_checkbox_new (_("Use point-to-point encryption (MPPE)"));
+ g_object_bind_property (s_ppp, NM_SETTING_PPP_REQUIRE_MPPE,
+ widget, "active",
+ G_BINDING_BIDIRECTIONAL |
+ G_BINDING_SYNC_CREATE);
+ use_mppe = widget;
+ nmt_newt_section_set_header (mppe_section, widget);
+
+ widget = nmt_newt_grid_new ();
+ mppe_grid = NMT_NEWT_GRID (widget);
+ nmt_newt_section_set_body (mppe_section, widget);
+
+ widget = nmt_newt_checkbox_new (_("Require 128-bit encryption"));
+ g_object_bind_property (use_mppe, "active",
+ widget, "sensitive",
+ G_BINDING_SYNC_CREATE);
+ g_object_bind_property (s_ppp, NM_SETTING_PPP_REQUIRE_MPPE_128,
+ widget, "active",
+ G_BINDING_BIDIRECTIONAL |
+ G_BINDING_SYNC_CREATE);
+ nmt_newt_grid_add (mppe_grid, widget, 0, 0);
+
+ widget = nmt_newt_checkbox_new (_("Use stateful MPPE"));
+ g_object_bind_property (use_mppe, "active",
+ widget, "sensitive",
+ G_BINDING_SYNC_CREATE);
+ g_object_bind_property (s_ppp, NM_SETTING_PPP_MPPE_STATEFUL,
+ widget, "active",
+ G_BINDING_BIDIRECTIONAL |
+ G_BINDING_SYNC_CREATE);
+ nmt_newt_grid_add (mppe_grid, widget, 0, 1);
+
+ nmt_editor_grid_append (grid, NULL, nmt_newt_separator_new (), NULL);
+
+ widget = nmt_newt_checkbox_new (_("Allow BSD data compression"));
+ g_object_bind_property (s_ppp, NM_SETTING_PPP_NOBSDCOMP,
+ widget, "active",
+ G_BINDING_BIDIRECTIONAL |
+ G_BINDING_INVERT_BOOLEAN |
+ G_BINDING_SYNC_CREATE);
+ nmt_editor_grid_append (grid, NULL, widget, NULL);
+
+ widget = nmt_newt_checkbox_new (_("Allow Deflate data compression"));
+ g_object_bind_property (s_ppp, NM_SETTING_PPP_NODEFLATE,
+ widget, "active",
+ G_BINDING_BIDIRECTIONAL |
+ G_BINDING_INVERT_BOOLEAN |
+ G_BINDING_SYNC_CREATE);
+ nmt_editor_grid_append (grid, NULL, widget, NULL);
+
+ widget = nmt_newt_checkbox_new (_("Use TCP header compression"));
+ g_object_bind_property (s_ppp, NM_SETTING_PPP_NO_VJ_COMP,
+ widget, "active",
+ G_BINDING_BIDIRECTIONAL |
+ G_BINDING_INVERT_BOOLEAN |
+ G_BINDING_SYNC_CREATE);
+ nmt_editor_grid_append (grid, NULL, widget, NULL);
+
+ nmt_editor_grid_append (grid, NULL, nmt_newt_separator_new (), NULL);
+
+ widget = nmt_newt_checkbox_new (_("Send PPP echo packets"));
+ g_object_bind_property_full (s_ppp, NM_SETTING_PPP_LCP_ECHO_INTERVAL,
+ widget, "active",
+ G_BINDING_BIDIRECTIONAL |
+ G_BINDING_SYNC_CREATE,
+ transform_lcp_echo_properties_to_checkbox,
+ transform_checkbox_to_lcp_echo_interval,
+ ppp, NULL);
+ g_object_bind_property_full (s_ppp, NM_SETTING_PPP_LCP_ECHO_FAILURE,
+ widget, "active",
+ G_BINDING_BIDIRECTIONAL |
+ G_BINDING_SYNC_CREATE,
+ transform_lcp_echo_properties_to_checkbox,
+ transform_checkbox_to_lcp_echo_failure,
+ ppp, NULL);
+ nmt_editor_grid_append (grid, NULL, widget, NULL);
+
+ nmt_editor_page_add_section (NMT_EDITOR_PAGE (ppp), section);
+
+ G_OBJECT_CLASS (nmt_page_ppp_parent_class)->constructed (object);
+}
+
+static void
+nmt_page_ppp_class_init (NmtPagePppClass *ppp_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (ppp_class);
+
+ g_type_class_add_private (object_class, sizeof (NmtPagePppPrivate));
+
+ object_class->constructed = nmt_page_ppp_constructed;
+}
diff --git a/clients/tui/nmt-page-ppp.h b/clients/tui/nmt-page-ppp.h
new file mode 100644
index 000000000..79103232f
--- /dev/null
+++ b/clients/tui/nmt-page-ppp.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 2014 Red Hat, Inc.
+ */
+
+#ifndef NMT_PAGE_PPP_H
+#define NMT_PAGE_PPP_H
+
+#include "nmt-editor-page.h"
+
+G_BEGIN_DECLS
+
+#define NMT_TYPE_PAGE_PPP (nmt_page_ppp_get_type ())
+#define NMT_PAGE_PPP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMT_TYPE_PAGE_PPP, NmtPagePpp))
+#define NMT_PAGE_PPP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NMT_TYPE_PAGE_PPP, NmtPagePppClass))
+#define NMT_IS_PAGE_PPP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMT_TYPE_PAGE_PPP))
+#define NMT_IS_PAGE_PPP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMT_TYPE_PAGE_PPP))
+#define NMT_PAGE_PPP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_PAGE_PPP, NmtPagePppClass))
+
+typedef struct {
+ NmtEditorPage parent;
+
+} NmtPagePpp;
+
+typedef struct {
+ NmtEditorPageClass parent;
+
+} NmtPagePppClass;
+
+GType nmt_page_ppp_get_type (void);
+
+NmtEditorPage *nmt_page_ppp_new (NMConnection *conn);
+
+G_END_DECLS
+
+#endif /* NMT_PAGE_PPP_H */
diff --git a/tui/nmt-page-team-port.c b/clients/tui/nmt-page-team-port.c
index aec6b8039..645dc9d37 100644
--- a/tui/nmt-page-team-port.c
+++ b/clients/tui/nmt-page-team-port.c
@@ -37,12 +37,11 @@ typedef struct {
} NmtPageTeamPortPrivate;
-NmtNewtWidget *
+NmtEditorPage *
nmt_page_team_port_new (NMConnection *conn)
{
return g_object_new (NMT_TYPE_PAGE_TEAM_PORT,
"connection", conn,
- "title", _("TEAM PORT"),
NULL);
}
@@ -79,6 +78,7 @@ nmt_page_team_port_constructed (GObject *object)
{
NmtPageTeamPort *team = NMT_PAGE_TEAM_PORT (object);
NmtPageTeamPortPrivate *priv = NMT_PAGE_TEAM_PORT_GET_PRIVATE (team);
+ NmtEditorSection *section;
NmtNewtGrid *grid;
NMSettingTeamPort *s_port;
NmtNewtWidget *widget;
@@ -92,8 +92,10 @@ nmt_page_team_port_constructed (GObject *object)
}
priv->s_port = s_port;
+ section = nmt_editor_section_new (_("TEAM PORT"), NULL, TRUE);
+
widget = nmt_newt_grid_new ();
- nmt_page_grid_append (NMT_PAGE_GRID (team), NULL, widget, NULL);
+ nmt_editor_grid_append (nmt_editor_section_get_body (section), NULL, widget, NULL);
grid = NMT_NEWT_GRID (widget);
@@ -111,6 +113,8 @@ nmt_page_team_port_constructed (GObject *object)
g_signal_connect (widget, "clicked", G_CALLBACK (edit_clicked), team);
nmt_newt_grid_add (grid, widget, 0, 4);
+ nmt_editor_page_add_section (NMT_EDITOR_PAGE (team), section);
+
G_OBJECT_CLASS (nmt_page_team_port_parent_class)->constructed (object);
}
diff --git a/tui/nmt-page-team-port.h b/clients/tui/nmt-page-team-port.h
index d4ec7a557..2d8fa1218 100644
--- a/tui/nmt-page-team-port.h
+++ b/clients/tui/nmt-page-team-port.h
@@ -19,7 +19,7 @@
#ifndef NMT_PAGE_TEAM_PORT_H
#define NMT_PAGE_TEAM_PORT_H
-#include "nmt-page-device.h"
+#include "nmt-editor-page-device.h"
G_BEGIN_DECLS
@@ -42,7 +42,7 @@ typedef struct {
GType nmt_page_team_port_get_type (void);
-NmtNewtWidget *nmt_page_team_port_new (NMConnection *conn);
+NmtEditorPage *nmt_page_team_port_new (NMConnection *conn);
G_END_DECLS
diff --git a/tui/nmt-page-team.c b/clients/tui/nmt-page-team.c
index 81db3d33f..e520b02a3 100644
--- a/tui/nmt-page-team.c
+++ b/clients/tui/nmt-page-team.c
@@ -30,7 +30,7 @@
#include "nmt-slave-list.h"
-G_DEFINE_TYPE (NmtPageTeam, nmt_page_team, NMT_TYPE_PAGE_DEVICE)
+G_DEFINE_TYPE (NmtPageTeam, nmt_page_team, NMT_TYPE_EDITOR_PAGE_DEVICE)
#define NMT_PAGE_TEAM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_PAGE_TEAM, NmtPageTeamPrivate))
@@ -42,13 +42,12 @@ typedef struct {
} NmtPageTeamPrivate;
-NmtNewtWidget *
+NmtEditorPage *
nmt_page_team_new (NMConnection *conn,
NmtDeviceEntry *deventry)
{
return g_object_new (NMT_TYPE_PAGE_TEAM,
"connection", conn,
- "title", _("TEAM"),
"device-entry", deventry,
NULL);
}
@@ -132,7 +131,7 @@ nmt_page_team_constructed (GObject *object)
{
NmtPageTeam *team = NMT_PAGE_TEAM (object);
NmtPageTeamPrivate *priv = NMT_PAGE_TEAM_GET_PRIVATE (team);
- NmtDeviceEntry *deventry;
+ NmtEditorSection *section;
NmtNewtGrid *grid;
NMSettingTeam *s_team;
NmtNewtWidget *widget;
@@ -146,13 +145,10 @@ nmt_page_team_constructed (GObject *object)
}
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);
+ section = nmt_editor_section_new (_("TEAM"), NULL, TRUE);
widget = nmt_newt_grid_new ();
- nmt_page_grid_append (NMT_PAGE_GRID (team), NULL, widget, NULL);
+ nmt_editor_grid_append (nmt_editor_section_get_body (section), NULL, widget, NULL);
grid = NMT_NEWT_GRID (widget);
@@ -181,6 +177,8 @@ nmt_page_team_constructed (GObject *object)
g_signal_connect (widget, "clicked", G_CALLBACK (edit_clicked), team);
nmt_newt_grid_add (grid, widget, 0, 4);
+ nmt_editor_page_add_section (NMT_EDITOR_PAGE (team), section);
+
G_OBJECT_CLASS (nmt_page_team_parent_class)->constructed (object);
}
diff --git a/tui/nmt-page-team.h b/clients/tui/nmt-page-team.h
index 49a81dd55..2d8bf07ad 100644
--- a/tui/nmt-page-team.h
+++ b/clients/tui/nmt-page-team.h
@@ -19,7 +19,7 @@
#ifndef NMT_PAGE_TEAM_H
#define NMT_PAGE_TEAM_H
-#include "nmt-page-device.h"
+#include "nmt-editor-page-device.h"
G_BEGIN_DECLS
@@ -31,18 +31,18 @@ G_BEGIN_DECLS
#define NMT_PAGE_TEAM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_PAGE_TEAM, NmtPageTeamClass))
typedef struct {
- NmtPageDevice parent;
+ NmtEditorPageDevice parent;
} NmtPageTeam;
typedef struct {
- NmtPageDeviceClass parent;
+ NmtEditorPageDeviceClass parent;
} NmtPageTeamClass;
GType nmt_page_team_get_type (void);
-NmtNewtWidget *nmt_page_team_new (NMConnection *conn,
+NmtEditorPage *nmt_page_team_new (NMConnection *conn,
NmtDeviceEntry *deventry);
G_END_DECLS
diff --git a/tui/nmt-page-vlan.c b/clients/tui/nmt-page-vlan.c
index f6de671c8..9b9c8f52a 100644
--- a/tui/nmt-page-vlan.c
+++ b/clients/tui/nmt-page-vlan.c
@@ -26,8 +26,6 @@
#include <glib.h>
#include <glib/gi18n-lib.h>
-#include <nm-device-ethernet.h>
-
#include "nm-editor-bindings.h"
#include "nmt-page-vlan.h"
@@ -35,7 +33,7 @@
#include "nmt-mac-entry.h"
#include "nmt-mtu-entry.h"
-G_DEFINE_TYPE (NmtPageVlan, nmt_page_vlan, NMT_TYPE_PAGE_DEVICE)
+G_DEFINE_TYPE (NmtPageVlan, nmt_page_vlan, NMT_TYPE_EDITOR_PAGE_DEVICE)
#define NMT_PAGE_VLAN_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_PAGE_VLAN, NmtPageVlanPrivate))
@@ -44,13 +42,12 @@ typedef struct {
} NmtPageVlanPrivate;
-NmtNewtWidget *
+NmtEditorPage *
nmt_page_vlan_new (NMConnection *conn,
NmtDeviceEntry *deventry)
{
return g_object_new (NMT_TYPE_PAGE_VLAN,
"connection", conn,
- "title", _("VLAN"),
"device-entry", deventry,
NULL);
}
@@ -74,8 +71,8 @@ nmt_page_vlan_constructed (GObject *object)
{
NmtPageVlan *vlan = NMT_PAGE_VLAN (object);
NmtPageVlanPrivate *priv = NMT_PAGE_VLAN_GET_PRIVATE (vlan);
- NmtDeviceEntry *deventry;
- NmtPageGrid *grid;
+ NmtEditorSection *section;
+ NmtEditorGrid *grid;
NMSettingWired *s_wired;
NMSettingVlan *s_vlan;
NmtNewtWidget *widget, *parent, *id_entry;
@@ -97,14 +94,10 @@ nmt_page_vlan_constructed (GObject *object)
}
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);
+ section = nmt_editor_section_new (_("VLAN"), NULL, TRUE);
+ grid = nmt_editor_section_get_body (section);
- nm_editor_bind_vlan_name (s_vlan);
+ nm_editor_bind_vlan_name (s_vlan, nm_connection_get_setting_connection (conn));
widget = parent = nmt_device_entry_new (_("Parent"), 40, G_TYPE_NONE);
nmt_device_entry_set_device_filter (NMT_DEVICE_ENTRY (widget),
@@ -115,27 +108,29 @@ nmt_page_vlan_constructed (GObject *object)
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);
+ nmt_editor_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_editor_grid_append (grid, _("VLAN id"), widget, NULL);
- nmt_page_grid_append (grid, NULL, nmt_newt_separator_new (), NULL);
+ nmt_editor_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);
+ nmt_editor_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);
+ nmt_editor_grid_append (grid, _("MTU"), widget, NULL);
+
+ nmt_editor_page_add_section (NMT_EDITOR_PAGE (vlan), section);
G_OBJECT_CLASS (nmt_page_vlan_parent_class)->constructed (object);
}
diff --git a/tui/nmt-page-vlan.h b/clients/tui/nmt-page-vlan.h
index 57d002438..db7c40981 100644
--- a/tui/nmt-page-vlan.h
+++ b/clients/tui/nmt-page-vlan.h
@@ -19,7 +19,7 @@
#ifndef NMT_PAGE_VLAN_H
#define NMT_PAGE_VLAN_H
-#include "nmt-page-device.h"
+#include "nmt-editor-page-device.h"
G_BEGIN_DECLS
@@ -31,18 +31,18 @@ G_BEGIN_DECLS
#define NMT_PAGE_VLAN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_PAGE_VLAN, NmtPageVlanClass))
typedef struct {
- NmtPageDevice parent;
+ NmtEditorPageDevice parent;
} NmtPageVlan;
typedef struct {
- NmtPageDeviceClass parent;
+ NmtEditorPageDeviceClass parent;
} NmtPageVlanClass;
GType nmt_page_vlan_get_type (void);
-NmtNewtWidget *nmt_page_vlan_new (NMConnection *conn,
+NmtEditorPage *nmt_page_vlan_new (NMConnection *conn,
NmtDeviceEntry *deventry);
G_END_DECLS
diff --git a/tui/nmt-page-wifi.c b/clients/tui/nmt-page-wifi.c
index 153aee7ca..9cd20abf3 100644
--- a/tui/nmt-page-wifi.c
+++ b/clients/tui/nmt-page-wifi.c
@@ -31,7 +31,6 @@
#include <glib.h>
#include <glib/gi18n-lib.h>
-#include <nm-utils.h>
#include "nmt-page-wifi.h"
#include "nmt-mac-entry.h"
@@ -40,7 +39,7 @@
#include "nm-editor-bindings.h"
-G_DEFINE_TYPE (NmtPageWifi, nmt_page_wifi, NMT_TYPE_PAGE_DEVICE)
+G_DEFINE_TYPE (NmtPageWifi, nmt_page_wifi, NMT_TYPE_EDITOR_PAGE_DEVICE)
#define NMT_PAGE_WIFI_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NMT_TYPE_PAGE_WIFI, NmtPageWifiPrivate))
@@ -49,13 +48,12 @@ typedef struct {
} NmtPageWifiPrivate;
-NmtNewtWidget *
+NmtEditorPage *
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);
}
@@ -135,11 +133,15 @@ ssid_transform_to_entry (GBinding *binding,
GValue *target_value,
gpointer user_data)
{
- GByteArray *ssid;
+ GBytes *ssid;
char *utf8;
ssid = g_value_get_boxed (source_value);
- utf8 = nm_utils_ssid_to_utf8 (ssid);
+ if (ssid)
+ utf8 = nm_utils_ssid_to_utf8 (g_bytes_get_data (ssid, NULL),
+ g_bytes_get_size (ssid));
+ else
+ utf8 = g_strdup ("");
g_value_take_string (target_value, utf8);
return TRUE;
}
@@ -152,14 +154,17 @@ ssid_transform_from_entry (GBinding *binding,
{
NMSettingWireless *s_wireless = user_data;
const char *text;
- const GByteArray *old_ssid;
- GByteArray *ssid;
+ GBytes *old_ssid, *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 (old_ssid)
+ utf8 = nm_utils_ssid_to_utf8 (g_bytes_get_data (old_ssid, NULL),
+ g_bytes_get_size (old_ssid));
+ else
+ utf8 = g_strdup ("");
if (!g_strcmp0 (text, utf8)) {
g_free (utf8);
@@ -167,8 +172,7 @@ ssid_transform_from_entry (GBinding *binding,
}
g_free (utf8);
- ssid = g_byte_array_new ();
- g_byte_array_append (ssid, (guint8 *)text, strlen (text));
+ ssid = g_bytes_new (text, strlen (text));
g_value_take_boxed (target_value, ssid);
return TRUE;
}
@@ -179,7 +183,8 @@ nmt_page_wifi_constructed (GObject *object)
NmtPageWifiPrivate *priv = NMT_PAGE_WIFI_GET_PRIVATE (object);
NmtPageWifi *wifi = NMT_PAGE_WIFI (object);
NmtDeviceEntry *deventry;
- NmtPageGrid *grid;
+ NmtEditorSection *section;
+ NmtEditorGrid *grid;
NMSettingWireless *s_wireless;
NMSettingWirelessSecurity *s_wsec;
NmtNewtWidget *widget, *hbox, *subgrid;
@@ -204,12 +209,13 @@ nmt_page_wifi_constructed (GObject *object)
}
priv->s_wsec = g_object_ref_sink (s_wsec);
- deventry = nmt_page_device_get_device_entry (NMT_PAGE_DEVICE (object));
+ deventry = nmt_editor_page_device_get_device_entry (NMT_EDITOR_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);
+ section = nmt_editor_section_new (_("WI-FI"), NULL, TRUE);
+ grid = nmt_editor_section_get_body (section);
widget = nmt_newt_entry_new (40, NMT_NEWT_ENTRY_NONEMPTY);
g_object_bind_property_full (s_wireless, NM_SETTING_WIRELESS_SSID,
@@ -218,13 +224,13 @@ nmt_page_wifi_constructed (GObject *object)
ssid_transform_to_entry,
ssid_transform_from_entry,
s_wireless, NULL);
- nmt_page_grid_append (grid, _("SSID"), widget, NULL);
+ nmt_editor_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);
+ nmt_editor_grid_append (grid, _("Mode"), widget, NULL);
mode = widget;
hbox = nmt_newt_grid_new ();
@@ -250,28 +256,28 @@ nmt_page_wifi_constructed (GObject *object)
G_BINDING_SYNC_CREATE,
mode_transform_to_band_visibility,
NULL, NULL, NULL);
- nmt_page_grid_append (grid, _("Channel"), hbox, NULL);
+ nmt_editor_grid_append (grid, _("Channel"), hbox, NULL);
- nmt_page_grid_append (grid, NULL, nmt_newt_separator_new (), NULL);
+ nmt_editor_grid_append (grid, NULL, nmt_newt_separator_new (), NULL);
widget = nmt_newt_popup_new (wifi_security);
- nmt_page_grid_append (grid, _("Security"), widget, NULL);
+ nmt_editor_grid_append (grid, _("Security"), widget, NULL);
security = widget;
widget = nmt_newt_stack_new ();
stack = NMT_NEWT_STACK (widget);
/* none */
- subgrid = nmt_page_grid_new ();
+ subgrid = nmt_editor_grid_new ();
nmt_newt_stack_add (stack, "none", subgrid);
/* wpa-personal */
- subgrid = nmt_page_grid_new ();
+ subgrid = nmt_editor_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_editor_grid_append (NMT_EDITOR_GRID (subgrid), _("Password"), widget, NULL);
nmt_newt_stack_add (stack, "wpa-personal", subgrid);
/* "wpa-enterprise" */
@@ -280,13 +286,13 @@ nmt_page_wifi_constructed (GObject *object)
nmt_newt_stack_add (stack, "wpa-enterprise", widget);
/* wep-key */
- subgrid = nmt_page_grid_new ();
+ subgrid = nmt_editor_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);
+ nmt_editor_grid_append (NMT_EDITOR_GRID (subgrid), _("Key"), widget, NULL);
widget = nmt_newt_popup_new (wep_index);
- nmt_page_grid_append (NMT_PAGE_GRID (subgrid), _("WEP index"), widget, NULL);
+ nmt_editor_grid_append (NMT_EDITOR_GRID (subgrid), _("WEP index"), widget, NULL);
nm_editor_bind_wireless_security_wep_key (s_wsec,
entry, "password",
@@ -294,18 +300,18 @@ nmt_page_wifi_constructed (GObject *object)
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_editor_grid_append (NMT_EDITOR_GRID (subgrid), _("Authentication"), widget, NULL);
nmt_newt_stack_add (stack, "wep-key", subgrid);
/* wep-passphrase */
- subgrid = nmt_page_grid_new ();
+ subgrid = nmt_editor_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);
+ nmt_editor_grid_append (NMT_EDITOR_GRID (subgrid), _("Password"), widget, NULL);
widget = nmt_newt_popup_new (wep_index);
- nmt_page_grid_append (NMT_PAGE_GRID (subgrid), _("WEP index"), widget, NULL);
+ nmt_editor_grid_append (NMT_EDITOR_GRID (subgrid), _("WEP index"), widget, NULL);
nm_editor_bind_wireless_security_wep_key (s_wsec,
entry, "password",
@@ -313,7 +319,7 @@ nmt_page_wifi_constructed (GObject *object)
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_editor_grid_append (NMT_EDITOR_GRID (subgrid), _("Authentication"), widget, NULL);
nmt_newt_stack_add (stack, "wep-passphrase", subgrid);
@@ -323,45 +329,50 @@ nmt_page_wifi_constructed (GObject *object)
nmt_newt_stack_add (stack, "dynamic-wep", widget);
/* leap */
- subgrid = nmt_page_grid_new ();
+ subgrid = nmt_editor_grid_new ();
widget = nmt_newt_entry_new (40, NMT_NEWT_ENTRY_NONEMPTY);
- nmt_page_grid_append (NMT_PAGE_GRID (subgrid), _("Username"), widget, NULL);
+ nmt_editor_grid_append (NMT_EDITOR_GRID (subgrid), _("Username"), widget, NULL);
+ g_object_bind_property (s_wsec, NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME,
+ widget, "text",
+ G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
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_editor_grid_append (NMT_EDITOR_GRID (subgrid), _("Password"), widget, NULL);
nmt_newt_stack_add (stack, "leap", subgrid);
- nmt_page_grid_append (grid, NULL, NMT_NEWT_WIDGET (stack), NULL);
+ nmt_editor_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);
+ nmt_editor_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);
+ nmt_editor_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);
+ nmt_editor_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);
+ nmt_editor_grid_append (grid, _("MTU"), widget, NULL);
+
+ nmt_editor_page_add_section (NMT_EDITOR_PAGE (wifi), section);
G_OBJECT_CLASS (nmt_page_wifi_parent_class)->constructed (object);
}
@@ -373,7 +384,7 @@ nmt_page_wifi_finalize (GObject *object)
g_clear_object (&priv->s_wsec);
- G_OBJECT_CLASS (nmt_page_wifi_parent_class)->constructed (object);
+ G_OBJECT_CLASS (nmt_page_wifi_parent_class)->finalize (object);
}
diff --git a/tui/nmt-page-wifi.h b/clients/tui/nmt-page-wifi.h
index 06cb2a980..7ce505846 100644
--- a/tui/nmt-page-wifi.h
+++ b/clients/tui/nmt-page-wifi.h
@@ -19,7 +19,7 @@
#ifndef NMT_PAGE_WIFI_H
#define NMT_PAGE_WIFI_H
-#include "nmt-page-device.h"
+#include "nmt-editor-page-device.h"
G_BEGIN_DECLS
@@ -31,18 +31,18 @@ G_BEGIN_DECLS
#define NMT_PAGE_WIFI_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMT_TYPE_PAGE_WIFI, NmtPageWifiClass))
typedef struct {
- NmtPageDevice parent;
+ NmtEditorPageDevice parent;
} NmtPageWifi;
typedef struct {
- NmtPageDeviceClass parent;
+ NmtEditorPageDeviceClass parent;
} NmtPageWifiClass;
GType nmt_page_wifi_get_type (void);
-NmtNewtWidget *nmt_page_wifi_new (NMConnection *conn,
+NmtEditorPage *nmt_page_wifi_new (NMConnection *conn,
NmtDeviceEntry *deventry);
G_END_DECLS
diff --git a/tui/nmt-password-dialog.c b/clients/tui/nmt-password-dialog.c
index 6d52c75ab..aeece1211 100644
--- a/tui/nmt-password-dialog.c
+++ b/clients/tui/nmt-password-dialog.c
@@ -29,7 +29,7 @@
#include <glib/gi18n-lib.h>
#include "nmt-password-dialog.h"
-#include "nmt-secret-agent.h"
+#include "nm-secret-agent-simple.h"
#include "nmtui.h"
G_DEFINE_TYPE (NmtPasswordDialog, nmt_password_dialog, NMT_TYPE_NEWT_FORM)
@@ -60,10 +60,10 @@ enum {
/**
* nmt_password_dialog_new:
- * @request_id: the request ID from the #NmtSecretAgent
+ * @request_id: the request ID from the #NMSecretAgentSimple
* @title: the dialog title
* @prompt: the prompt text to display
- * @secrets: (element-type #NmtSecretAgentSecret): the secrets requested
+ * @secrets: (element-type #NMSecretAgentSimpleSecret): the secrets requested
*
* Creates a new #NmtPasswordDialog to request passwords from
* the user.
@@ -95,8 +95,7 @@ nmt_password_dialog_init (NmtPasswordDialog *dialog)
static void
maybe_save_input_and_exit (NmtNewtWidget *widget,
- gpointer dialog,
- newtComponent co)
+ gpointer dialog)
{
NmtPasswordDialogPrivate *priv = NMT_PASSWORD_DIALOG_GET_PRIVATE (dialog);
int i;
@@ -110,7 +109,7 @@ maybe_save_input_and_exit (NmtNewtWidget *widget,
priv->succeeded = TRUE;
for (i = 0; i < priv->secrets->len; i++) {
- NmtSecretAgentSecret *secret = priv->secrets->pdata[i];
+ NMSecretAgentSimpleSecret *secret = priv->secrets->pdata[i];
g_free (secret->value);
g_object_get (priv->entries->pdata[i], "text", &secret->value, NULL);
@@ -144,7 +143,7 @@ nmt_password_dialog_constructed (GObject *object)
secret_grid = NMT_NEWT_GRID (widget);
for (i = 0; i < priv->secrets->len; i++) {
- NmtSecretAgentSecret *secret = priv->secrets->pdata[i];
+ NMSecretAgentSimpleSecret *secret = priv->secrets->pdata[i];
NmtNewtEntryFlags flags;
widget = nmt_newt_label_new (secret->name);
@@ -259,38 +258,41 @@ nmt_password_dialog_class_init (NmtPasswordDialogClass *dialog_class)
/**
* NmtPasswordDialog:request-id:
*
- * The request ID from the #NmtSecretAgent
+ * The request ID from the #NMSecretAgentSimple
*/
- 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));
+ 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));
+ 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.
+ * Element-Type: #NMSecretAgentSimpleSecret.
*/
- 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));
+ 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));
}
/**
diff --git a/tui/nmt-password-dialog.h b/clients/tui/nmt-password-dialog.h
index 36c9f51e1..36c9f51e1 100644
--- a/tui/nmt-password-dialog.h
+++ b/clients/tui/nmt-password-dialog.h
diff --git a/tui/nmt-password-fields.c b/clients/tui/nmt-password-fields.c
index ec8b52182..7ef037b9d 100644
--- a/tui/nmt-password-fields.c
+++ b/clients/tui/nmt-password-fields.c
@@ -156,6 +156,10 @@ nmt_password_fields_constructed (GObject *object)
} else
g_clear_object (&priv->show_password);
+ g_object_bind_property (priv->entry, "text",
+ object, "password",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+
G_OBJECT_CLASS (nmt_password_fields_parent_class)->constructed (object);
}
@@ -261,50 +265,55 @@ nmt_password_fields_class_init (NmtPasswordFieldsClass *entry_class)
*
* 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));
+ 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));
+ 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));
+ 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));
+ 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));
+ 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/clients/tui/nmt-password-fields.h
index 2ef830aa2..2ef830aa2 100644
--- a/tui/nmt-password-fields.h
+++ b/clients/tui/nmt-password-fields.h
diff --git a/tui/nmt-route-editor.c b/clients/tui/nmt-route-editor.c
index 053cdb027..77bbec76d 100644
--- a/tui/nmt-route-editor.c
+++ b/clients/tui/nmt-route-editor.c
@@ -77,21 +77,15 @@ save_routes_and_exit (NmtNewtButton *button,
{
NmtRouteEditor *editor = user_data;
NmtRouteEditorPrivate *priv = NMT_ROUTE_EDITOR_GET_PRIVATE (editor);
- const char *property;
- GBinding *binding;
+ GPtrArray *routes;
- 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);
+ g_object_get (priv->edit_setting,
+ NM_SETTING_IP_CONFIG_ROUTES, &routes,
+ NULL);
+ g_object_set (priv->orig_setting,
+ NM_SETTING_IP_CONFIG_ROUTES, routes,
+ NULL);
+ g_ptr_array_unref (routes);
nmt_newt_form_quit (NMT_NEWT_FORM (editor));
}
@@ -106,17 +100,13 @@ nmt_route_editor_constructed (GObject *object)
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)) {
+ 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 {
+ 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);
- }
+ g_object_bind_property (priv->edit_setting, NM_SETTING_IP_CONFIG_ROUTES,
+ routes, "routes",
+ G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
vbox = nmt_newt_grid_new ();
nmt_newt_grid_add (NMT_NEWT_GRID (vbox), routes, 0, 0);
@@ -210,10 +200,11 @@ nmt_route_editor_class_init (NmtRouteEditorClass *entry_class)
* 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));
+ 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/clients/tui/nmt-route-editor.h
index e1040dffd..9882c7138 100644
--- a/tui/nmt-route-editor.h
+++ b/clients/tui/nmt-route-editor.h
@@ -19,7 +19,7 @@
#ifndef NMT_ROUTE_EDITOR_H
#define NMT_ROUTE_EDITOR_H
-#include <nm-connection.h>
+#include <NetworkManager.h>
#include "nmt-newt.h"
diff --git a/tui/nmt-route-entry.c b/clients/tui/nmt-route-entry.c
index 1b20ca646..3a8755208 100644
--- a/tui/nmt-route-entry.c
+++ b/clients/tui/nmt-route-entry.c
@@ -33,8 +33,7 @@
#include <stdlib.h>
#include <glib/gi18n-lib.h>
-#include <nm-setting-ip4-config.h>
-#include <nm-setting-ip6-config.h>
+#include <NetworkManager.h>
#include "nmt-route-entry.h"
#include "nmt-ip-entry.h"
@@ -50,8 +49,7 @@ typedef struct {
int family;
int ip_entry_width, metric_entry_width;
- NMIP4Route *ip4_route;
- NMIP6Route *ip6_route;
+ NMIPRoute *route;
} NmtRouteEntryPrivate;
enum {
@@ -59,8 +57,7 @@ enum {
PROP_FAMILY,
PROP_IP_ENTRY_WIDTH,
PROP_METRIC_ENTRY_WIDTH,
- PROP_IP4_ROUTE,
- PROP_IP6_ROUTE,
+ PROP_ROUTE,
LAST_PROP
};
@@ -144,20 +141,12 @@ nmt_route_entry_constructed (GObject *object)
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 ();
+ nm_editor_bind_ip_route_to_strings (priv->family,
+ object, "route",
+ priv->dest, "text",
+ priv->next_hop, "text",
+ priv->metric, "text",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
G_OBJECT_CLASS (nmt_route_entry_parent_class)->constructed (object);
}
@@ -175,8 +164,7 @@ 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_clear_pointer (&priv->route, nm_ip_route_unref);
G_OBJECT_CLASS (nmt_route_entry_parent_class)->finalize (object);
}
@@ -199,17 +187,10 @@ nmt_route_entry_set_property (GObject *object,
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);
+ case PROP_ROUTE:
+ if (priv->route)
+ nm_ip_route_unref (priv->route);
+ priv->route = g_value_dup_boxed (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -235,13 +216,8 @@ nmt_route_entry_get_property (GObject *object,
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);
+ case PROP_ROUTE:
+ g_value_set_boxed (value, priv->route);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -270,54 +246,46 @@ nmt_route_entry_class_init (NmtRouteEntryClass *entry_class)
*
* 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));
+ 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));
+ 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));
+ 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:ip6-route:
+ * NmtRouteEntry:route:
*
- * The contents of the entries, as an #NMIP6Route. Only valid
- * if #NmtRouteEntry:family is %AF_INET6.
+ * The contents of the entries, as an #NMIPRoute.
*/
- 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));
+ g_object_class_install_property
+ (object_class, PROP_ROUTE,
+ g_param_spec_boxed ("route", "", "",
+ nm_ip_route_get_type (),
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
}
diff --git a/tui/nmt-route-entry.h b/clients/tui/nmt-route-entry.h
index d37b14cd5..d37b14cd5 100644
--- a/tui/nmt-route-entry.h
+++ b/clients/tui/nmt-route-entry.h
diff --git a/tui/nmt-route-table.c b/clients/tui/nmt-route-table.c
index d6173a0bc..523d8ee32 100644
--- a/tui/nmt-route-table.c
+++ b/clients/tui/nmt-route-table.c
@@ -31,8 +31,7 @@
#include <stdlib.h>
#include <glib/gi18n-lib.h>
-#include <dbus/dbus-glib.h>
-#include <nm-utils.h>
+#include <NetworkManager.h>
#include "nmt-route-table.h"
#include "nmt-route-entry.h"
@@ -48,15 +47,14 @@ typedef struct {
int ip_entry_width;
int metric_entry_width;
- GSList *routes;
+ GPtrArray *routes;
NmtNewtWidget *list;
} NmtRouteTablePrivate;
enum {
PROP_0,
PROP_FAMILY,
- PROP_IP4_ROUTES,
- PROP_IP6_ROUTES,
+ PROP_ROUTES,
LAST_PROP
};
@@ -86,12 +84,14 @@ route_list_transform_to_route (GBinding *binding,
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;
+ NMIPRoute *route;
- route = g_slist_nth_data (priv->routes, n);
- if (route)
- g_value_set_boxed (target_value, route);
- return route != NULL;
+ if (n >= priv->routes->len)
+ return FALSE;
+
+ route = priv->routes->pdata[n];
+ g_value_set_boxed (target_value, route);
+ return TRUE;
}
static gboolean
@@ -103,31 +103,21 @@ route_list_transform_from_route (GBinding *binding,
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;
+ GPtrArray *routes;
+ NMIPRoute *route;
- nth = g_slist_nth (priv->routes, n);
- if (!nth)
+ if (n >= priv->routes->len)
return FALSE;
+ route = priv->routes->pdata[n];
routes = priv->routes;
- priv->routes = NULL;
+ priv->routes = g_ptr_array_new_with_free_func ((GDestroyNotify) nm_ip_route_unref);
- 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);
- }
+ if (route)
+ nm_ip_route_unref (route);
+ routes->pdata[n] = g_value_dup_boxed (source_value);
+ g_value_take_boxed (target_value, routes);
return TRUE;
}
@@ -143,21 +133,12 @@ create_route_entry (NmtWidgetList *list,
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);
- }
+ g_object_bind_property_full (table, "routes",
+ entry, "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;
}
@@ -166,24 +147,15 @@ add_route (NmtWidgetList *list,
gpointer table)
{
NmtRouteTablePrivate *priv = NMT_ROUTE_TABLE_GET_PRIVATE (table);
+ NMIPRoute *route;
- 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");
- }
+ if (priv->family == AF_INET)
+ route = nm_ip_route_new (AF_INET, "0.0.0.0", 32, NULL, 0, NULL);
+ else
+ route = nm_ip_route_new (AF_INET6, "::", 128, NULL, 0, NULL);
+ g_ptr_array_add (priv->routes, route);
+ nmt_widget_list_set_length (list, priv->routes->len);
+ g_object_notify (table, "routes");
}
static void
@@ -192,24 +164,16 @@ remove_route (NmtWidgetList *list,
gpointer table)
{
NmtRouteTablePrivate *priv = NMT_ROUTE_TABLE_GET_PRIVATE (table);
- GSList *nth;
- gpointer route;
+ NMIPRoute *route;
- nth = g_slist_nth (priv->routes, num);
- if (!nth)
+ if (num >= priv->routes->len)
return;
- route = nth->data;
- priv->routes = g_slist_delete_link (priv->routes, nth);
- nmt_widget_list_set_length (list, g_slist_length (priv->routes));
+ route = priv->routes->pdata[num];
+ g_ptr_array_remove_index (priv->routes, num);
+ nmt_widget_list_set_length (list, priv->routes->len);
- 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");
- }
+ g_object_notify (table, "routes");
}
static void
@@ -221,6 +185,8 @@ nmt_route_table_init (NmtRouteTable *table)
int dest_prefix_width, next_hop_width, metric_width;
char *text;
+ priv->routes = g_ptr_array_new_with_free_func ((GDestroyNotify) nm_ip_route_unref);
+
header = nmt_newt_grid_new ();
text = g_strdup_printf ("%s/%s", _("Destination"), _("Prefix"));
@@ -272,10 +238,7 @@ 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_ptr_array_unref (priv->routes);
G_OBJECT_CLASS (nmt_route_table_parent_class)->finalize (object);
}
@@ -287,24 +250,21 @@ nmt_route_table_set_property (GObject *object,
GParamSpec *pspec)
{
NmtRouteTablePrivate *priv = NMT_ROUTE_TABLE_GET_PRIVATE (object);
+ GPtrArray *array;
+ int i;
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));
+ case PROP_ROUTES:
+ array = g_value_get_boxed (value);
+ g_ptr_array_set_size (priv->routes, 0);
+ for (i = 0; i < array->len; i++) {
+ nm_ip_route_ref (array->pdata[i]);
+ g_ptr_array_add (priv->routes, array->pdata[i]);
+ }
+ nmt_widget_list_set_length (NMT_WIDGET_LIST (priv->list), priv->routes->len);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -324,13 +284,8 @@ nmt_route_table_get_property (GObject *object,
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);
+ case PROP_ROUTES:
+ g_value_set_boxed (value, priv->routes);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -338,11 +293,6 @@ nmt_route_table_get_property (GObject *object,
}
}
-#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)
{
@@ -360,36 +310,25 @@ nmt_route_table_class_init (NmtRouteTableClass *table_class)
*
* 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));
+ 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:ip6-routes:
+ * NmtRouteTable:routes:
*
- * The array of routes, suitable for binding to
- * #NMSettingIP6Config:routes.
+ * The array of routes, suitable for binding to #NMSettingIP4Config:routes
+ * or #NMSettingIP6Config:routes.
*
- * Only valid if #NmtRouteTable:family is %AF_INET6
+ * Element-type: NMIPRoute
*/
- 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));
+ g_object_class_install_property
+ (object_class, PROP_ROUTES,
+ g_param_spec_boxed ("routes", "", "",
+ G_TYPE_PTR_ARRAY,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
}
diff --git a/tui/nmt-route-table.h b/clients/tui/nmt-route-table.h
index 217bf40da..217bf40da 100644
--- a/tui/nmt-route-table.h
+++ b/clients/tui/nmt-route-table.h
diff --git a/tui/nmt-slave-list.c b/clients/tui/nmt-slave-list.c
index 284614aa2..9c8596f77 100644
--- a/tui/nmt-slave-list.c
+++ b/clients/tui/nmt-slave-list.c
@@ -27,8 +27,7 @@
#include "config.h"
#include <glib/gi18n-lib.h>
-
-#include <nm-remote-connection.h>
+#include <NetworkManager.h>
#include "nmt-slave-list.h"
@@ -123,7 +122,7 @@ nmt_slave_list_connection_filter (NmtEditConnectionList *list,
if (!master)
return FALSE;
- master_ifname = nm_connection_get_virtual_iface_name (priv->master);
+ master_ifname = nm_connection_get_interface_name (priv->master);
if (g_strcmp0 (master, master_ifname) != 0 && g_strcmp0 (master, priv->master_uuid) != 0)
return FALSE;
@@ -229,12 +228,13 @@ nmt_slave_list_class_init (NmtSlaveListClass *list_class)
*
* 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));
+ 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:
*
@@ -246,19 +246,21 @@ nmt_slave_list_class_init (NmtSlaveListClass *list_class)
* 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));
+ 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));
+ 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/clients/tui/nmt-slave-list.h
index d10cd3a73..d10cd3a73 100644
--- a/tui/nmt-slave-list.h
+++ b/clients/tui/nmt-slave-list.h
diff --git a/tui/nmt-utils.c b/clients/tui/nmt-utils.c
index f2bf70db8..f2bf70db8 100644
--- a/tui/nmt-utils.c
+++ b/clients/tui/nmt-utils.c
diff --git a/tui/nmt-utils.h b/clients/tui/nmt-utils.h
index 7e24fcab1..7e24fcab1 100644
--- a/tui/nmt-utils.h
+++ b/clients/tui/nmt-utils.h
diff --git a/tui/nmt-widget-list.c b/clients/tui/nmt-widget-list.c
index 83c0b9b9e..9159ed989 100644
--- a/tui/nmt-widget-list.c
+++ b/clients/tui/nmt-widget-list.c
@@ -37,7 +37,6 @@
#include <stdlib.h>
#include <string.h>
-#include <dbus/dbus-glib.h>
#include <glib/gi18n-lib.h>
#include "nmt-widget-list.h"
@@ -243,7 +242,8 @@ ensure_widgets (NmtWidgetList *list)
G_BINDING_SYNC_CREATE);
g_object_add_weak_pointer (G_OBJECT (priv->add_sensitivity),
(gpointer *)&priv->add_sensitivity);
- }
+ } else
+ nmt_newt_component_set_sensitive (NMT_NEWT_COMPONENT (priv->add_button), TRUE);
}
static void
@@ -443,49 +443,54 @@ nmt_widget_list_class_init (NmtWidgetListClass *list_class)
*
* 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));
+ 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));
+ 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));
+ 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));
+ 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));
+ 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/clients/tui/nmt-widget-list.h
index 7dbeb2158..7dbeb2158 100644
--- a/tui/nmt-widget-list.h
+++ b/clients/tui/nmt-widget-list.h
diff --git a/tui/nmtui-connect.c b/clients/tui/nmtui-connect.c
index a86b8df57..438915d2a 100644
--- a/tui/nmtui-connect.c
+++ b/clients/tui/nmtui-connect.c
@@ -20,11 +20,8 @@
* 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.
+ * nmtui-connect implements activating and deactivating #NMConnections,
+ * including presenting a password dialog if necessary.
*/
#include "config.h"
@@ -32,7 +29,6 @@
#include <stdlib.h>
#include <glib/gi18n-lib.h>
-#include <nm-utils.h>
#include "nmt-newt.h"
@@ -40,16 +36,16 @@
#include "nmtui-connect.h"
#include "nmt-connect-connection-list.h"
#include "nmt-password-dialog.h"
-#include "nmt-secret-agent.h"
+#include "nm-secret-agent-simple.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)
+secrets_requested (NMSecretAgentSimple *agent,
+ const char *request_id,
+ const char *title,
+ const char *msg,
+ GPtrArray *secrets,
+ gpointer user_data)
{
NmtNewtForm *form;
@@ -57,9 +53,9 @@ secrets_requested (NmtSecretAgent *agent,
nmt_newt_form_run_sync (form);
if (nmt_password_dialog_succeeded (NMT_PASSWORD_DIALOG (form)))
- nmt_secret_agent_response (agent, request_id, secrets);
+ nm_secret_agent_simple_response (agent, request_id, secrets);
else
- nmt_secret_agent_response (agent, request_id, NULL);
+ nm_secret_agent_simple_response (agent, request_id, NULL);
g_object_unref (form);
}
@@ -90,7 +86,7 @@ activate_ac_state_changed (GObject *object,
return;
if (state != NM_ACTIVE_CONNECTION_STATE_ACTIVATED) {
- error = g_error_new_literal (NM_CLIENT_ERROR, NM_CLIENT_ERROR_UNKNOWN,
+ error = g_error_new_literal (NM_CLIENT_ERROR, NM_CLIENT_ERROR_FAILED,
_("Activation failed"));
}
@@ -99,28 +95,35 @@ activate_ac_state_changed (GObject *object,
}
static void
-activate_callback (NMClient *client,
- NMActiveConnection *ac,
- GError *error,
- gpointer user_data)
+activate_callback (GObject *client,
+ GAsyncResult *result,
+ gpointer user_data)
{
NmtSyncOp *op = user_data;
+ NMActiveConnection *ac;
+ GError *error = NULL;
+ ac = nm_client_activate_connection_finish (NM_CLIENT (client), result, &error);
if (error)
nmt_sync_op_complete_pointer (op, NULL, error);
else
- nmt_sync_op_complete_pointer (op, g_object_ref (ac), NULL);
+ nmt_sync_op_complete_pointer (op, ac, NULL);
}
static void
-add_and_activate_callback (NMClient *client,
- NMActiveConnection *ac,
- const char *new_connection_path,
- GError *error,
- gpointer user_data)
+add_and_activate_callback (GObject *client,
+ GAsyncResult *result,
+ gpointer user_data)
{
- /* We don't care about @new_connection_path, so... */
- activate_callback (client, ac, error, user_data);
+ NmtSyncOp *op = user_data;
+ NMActiveConnection *ac;
+ GError *error = NULL;
+
+ ac = nm_client_add_and_activate_connection_finish (NM_CLIENT (client), result, &error);
+ if (error)
+ nmt_sync_op_complete_pointer (op, NULL, error);
+ else
+ nmt_sync_op_complete_pointer (op, ac, NULL);
}
static void
@@ -129,7 +132,7 @@ activate_connection (NMConnection *connection,
NMObject *specific_object)
{
NmtNewtForm *form;
- NMSecretAgent *agent;
+ NMSecretAgentOld *agent;
NmtNewtWidget *label;
NmtSyncOp op;
const char *specific_object_path;
@@ -142,9 +145,14 @@ activate_connection (NMConnection *connection,
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);
+ agent = nm_secret_agent_simple_new ("nmtui");
+ if (agent) {
+ if (connection) {
+ nm_secret_agent_simple_enable (NM_SECRET_AGENT_SIMPLE (agent),
+ nm_object_get_path (NM_OBJECT (connection)));
+ }
+ g_signal_connect (agent, "request-secrets", G_CALLBACK (secrets_requested), NULL);
+ }
specific_object_path = specific_object ? nm_object_get_path (specific_object) : NULL;
@@ -156,13 +164,13 @@ activate_connection (NMConnection *connection,
nmt_sync_op_init (&op);
if (connection) {
- nm_client_activate_connection (nm_client,
- connection, device, specific_object_path,
- activate_callback, &op);
+ nm_client_activate_connection_async (nm_client,
+ connection, device, specific_object_path,
+ NULL, activate_callback, &op);
} else {
- nm_client_add_and_activate_connection (nm_client,
- NULL, device, specific_object_path,
- add_and_activate_callback, &op);
+ nm_client_add_and_activate_connection_async (nm_client,
+ NULL, device, specific_object_path,
+ NULL, add_and_activate_callback, &op);
}
nmt_newt_form_show (form);
@@ -180,6 +188,14 @@ activate_connection (NMConnection *connection,
goto done;
}
+ if (!connection) {
+ connection = NM_CONNECTION (nm_active_connection_get_connection (ac));
+ if (connection) {
+ nm_secret_agent_simple_enable (NM_SECRET_AGENT_SIMPLE (agent),
+ nm_object_get_path (NM_OBJECT (connection)));
+ }
+ }
+
/* Now wait for the connection to actually reach the ACTIVATED state,
* allowing the user to cancel if it takes too long.
*/
@@ -204,11 +220,7 @@ activate_connection (NMConnection *connection,
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);
+ nm_secret_agent_old_unregister (agent, NULL, NULL);
g_object_unref (agent);
}
@@ -230,7 +242,7 @@ listbox_activated (NmtNewtListbox *listbox,
return;
if (ac)
- nm_client_deactivate_connection (nm_client, ac);
+ nm_client_deactivate_connection (nm_client, ac, NULL, NULL);
else
activate_connection (connection, device, specific_object);
}
diff --git a/tui/nmtui-connect.h b/clients/tui/nmtui-connect.h
index 8310ac389..8310ac389 100644
--- a/tui/nmtui-connect.h
+++ b/clients/tui/nmtui-connect.h
diff --git a/tui/nmtui-edit.c b/clients/tui/nmtui-edit.c
index 2a17b4540..0c3206da6 100644
--- a/tui/nmtui-edit.c
+++ b/clients/tui/nmtui-edit.c
@@ -28,7 +28,7 @@
#include <stdlib.h>
#include <glib/gi18n-lib.h>
-#include <nm-utils.h>
+#include <NetworkManager.h>
#include "nmtui.h"
#include "nmtui-edit.h"
@@ -70,11 +70,37 @@ edit_connection_list_filter (NmtEditConnectionList *list,
gpointer user_data)
{
NMSettingConnection *s_con;
+ const char *master, *slave_type;
+ const char *uuid, *ifname;
+ const GPtrArray *conns;
+ int i;
+ gboolean found_master = FALSE;
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);
+ master = nm_setting_connection_get_master (s_con);
+ if (!master)
+ return TRUE;
+ slave_type = nm_setting_connection_get_slave_type (s_con);
+ if ( g_strcmp0 (slave_type, NM_SETTING_BOND_SETTING_NAME) != 0
+ && g_strcmp0 (slave_type, NM_SETTING_TEAM_SETTING_NAME) != 0
+ && g_strcmp0 (slave_type, NM_SETTING_BRIDGE_SETTING_NAME) != 0)
+ return TRUE;
+
+ conns = nm_client_get_connections (nm_client);
+ for (i = 0; i < conns->len; i++) {
+ NMConnection *candidate = conns->pdata[i];
+
+ uuid = nm_connection_get_uuid (candidate);
+ ifname = nm_connection_get_interface_name (candidate);
+ if (!g_strcmp0 (master, uuid) || !g_strcmp0 (master, ifname)) {
+ found_master = TRUE;
+ break;
+ }
+ }
+
+ return !found_master;
}
static NmtNewtForm *
@@ -156,7 +182,7 @@ create_connection (NmtNewtWidget *widget, gpointer 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);
+ connection = nm_editor_utils_create_connection (type, priv->master, nm_client);
nmt_edit_connection (connection);
g_object_unref (connection);
@@ -336,40 +362,45 @@ nmt_add_connection_class_init (NmtAddConnectionClass *add_class)
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", "", "",
+ 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."),
+ _("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,
+ 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));
+ 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
@@ -421,16 +452,18 @@ nmt_edit_connection (NMConnection *connection)
typedef struct {
NmtSyncOp op;
gboolean got_callback, got_signal;
+ NMRemoteConnection *connection;
} ConnectionDeleteData;
static void
-connection_deleted_callback (NMRemoteConnection *connection,
- GError *error,
- gpointer user_data)
+connection_deleted_callback (GObject *connection,
+ GAsyncResult *result,
+ gpointer user_data)
{
ConnectionDeleteData *data = user_data;
+ GError *error = NULL;
- if (error) {
+ if (!nm_remote_connection_delete_finish (data->connection, result, &error)) {
nmt_newt_message_dialog (_("Unable to delete connection: %s"),
error->message);
} else
@@ -438,25 +471,57 @@ connection_deleted_callback (NMRemoteConnection *connection,
if (error || (data->got_callback && data->got_signal))
nmt_sync_op_complete_boolean (&data->op, error == NULL, error);
+ g_clear_error (&error);
}
static void
-connection_removed_signal (NMRemoteConnection *connection,
+connection_removed_signal (NMClient *client,
+ 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);
+ if (connection == data->connection) {
+ data->got_signal = TRUE;
+ if (data->got_callback && data->got_signal)
+ nmt_sync_op_complete_boolean (&data->op, TRUE, NULL);
+ }
+}
+
+static void
+remove_one_connection (NMRemoteConnection *connection)
+{
+ ConnectionDeleteData data;
+ GError *error = NULL;
+
+ data.got_callback = data.got_signal = FALSE;
+ nmt_sync_op_init (&data.op);
+
+ data.connection = connection;
+ g_signal_connect (nm_client, NM_CLIENT_CONNECTION_REMOVED,
+ G_CALLBACK (connection_removed_signal), &data);
+ nm_remote_connection_delete_async (connection, NULL, connection_deleted_callback, &data);
+
+ if (!nmt_sync_op_wait_boolean (&data.op, &error)) {
+ nmt_newt_message_dialog (_("Could not delete connection '%s': %s"),
+ nm_connection_get_id (NM_CONNECTION (connection)),
+ error->message);
+ g_error_free (error);
+ }
+
+ g_signal_handlers_disconnect_by_func (nm_client, G_CALLBACK (connection_removed_signal), &data);
}
void
nmt_remove_connection (NMRemoteConnection *connection)
{
- ConnectionDeleteData data;
+ const GPtrArray *all_conns;
+ GSList *slaves, *iter;
+ int i;
+ NMRemoteConnection *slave;
+ NMSettingConnection *s_con;
+ const char *uuid, *iface, *master;
int choice;
- GError *error = NULL;
choice = nmt_newt_choice_dialog (_("Cancel"),
_("Delete"),
@@ -465,21 +530,28 @@ nmt_remove_connection (NMRemoteConnection *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);
+ remove_one_connection (connection);
+
+ uuid = nm_connection_get_uuid (NM_CONNECTION (connection));
+ iface = nm_connection_get_interface_name (NM_CONNECTION (connection));
+
+ all_conns = nm_client_get_connections (nm_client);
+ slaves = NULL;
+ for (i = 0; i < all_conns->len; i++) {
+ slave = all_conns->pdata[i];
+ s_con = nm_connection_get_setting_connection (NM_CONNECTION (slave));
+ master = nm_setting_connection_get_master (s_con);
+ if (master) {
+ if (!g_strcmp0 (master, uuid) || !g_strcmp0 (master, iface))
+ slaves = g_slist_prepend (slaves, g_object_ref (slave));
+ }
}
- g_signal_handlers_disconnect_by_func (connection, G_CALLBACK (connection_removed_signal), &data);
+ for (iter = slaves; iter; iter = iter->next)
+ remove_one_connection (iter->data);
+ g_slist_free_full (slaves, g_object_unref);
+
g_object_unref (connection);
}
@@ -490,9 +562,9 @@ nmtui_edit (int argc, char **argv)
if (argc == 2) {
if (nm_utils_is_uuid (argv[1]))
- conn = NM_CONNECTION (nm_remote_settings_get_connection_by_uuid (nm_settings, argv[1]));
+ conn = NM_CONNECTION (nm_client_get_connection_by_uuid (nm_client, argv[1]));
if (!conn)
- conn = NM_CONNECTION (nm_remote_settings_get_connection_by_id (nm_settings, argv[1]));
+ conn = NM_CONNECTION (nm_client_get_connection_by_id (nm_client, argv[1]));
if (!conn) {
nmt_newt_message_dialog ("%s: no such connection '%s'\n", argv[0], argv[1]);
diff --git a/tui/nmtui-edit.h b/clients/tui/nmtui-edit.h
index dae91cfac..dae91cfac 100644
--- a/tui/nmtui-edit.h
+++ b/clients/tui/nmtui-edit.h
diff --git a/tui/nmtui-hostname.c b/clients/tui/nmtui-hostname.c
index 7c8aff3a8..23de95b85 100644
--- a/tui/nmtui-hostname.c
+++ b/clients/tui/nmtui-hostname.c
@@ -71,8 +71,8 @@ nmtui_hostname_run_dialog (void)
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,
+ g_object_get (G_OBJECT (nm_client),
+ NM_CLIENT_HOSTNAME, &hostname,
NULL);
nmt_newt_entry_set_text (entry, hostname);
g_free (hostname);
@@ -86,11 +86,15 @@ nmtui_hostname_run_dialog (void)
}
static void
-hostname_set (NMRemoteSettings *settings,
- GError *error,
- gpointer op)
+hostname_set (GObject *object,
+ GAsyncResult *result,
+ gpointer op)
{
+ GError *error = NULL;
+
+ nm_client_save_hostname_finish (NM_CLIENT (object), result, &error);
nmt_sync_op_complete_boolean (op, error == NULL, error);
+ g_clear_error (&error);
}
NmtNewtForm *
@@ -108,7 +112,7 @@ nmtui_hostname (int argc, char **argv)
if (hostname) {
nmt_sync_op_init (&op);
- nm_remote_settings_save_hostname (nm_settings, hostname, hostname_set, &op);
+ nm_client_save_hostname_async (nm_client, hostname, NULL, 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);
diff --git a/tui/nmtui-hostname.h b/clients/tui/nmtui-hostname.h
index a14bc6993..a14bc6993 100644
--- a/tui/nmtui-hostname.h
+++ b/clients/tui/nmtui-hostname.h
diff --git a/tui/nmtui.c b/clients/tui/nmtui.c
index 7fcac445a..0fac98ebc 100644
--- a/tui/nmtui.c
+++ b/clients/tui/nmtui.c
@@ -33,10 +33,7 @@
#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 <NetworkManager.h>
#include "nmt-newt.h"
#include "nm-editor-bindings.h"
@@ -47,7 +44,6 @@
#include "nmtui-hostname.h"
NMClient *nm_client;
-NMRemoteSettings *nm_settings;
static GMainLoop *loop;
typedef NmtNewtForm * (*NmtuiSubprogram) (int argc, char **argv);
@@ -144,15 +140,6 @@ nmtui_quit (void)
}
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 ();
@@ -220,7 +207,6 @@ GOptionEntry entries[] = {
int
main (int argc, char **argv)
{
- gboolean got_connections = FALSE;
GOptionContext *opts;
GError *error = NULL;
NmtuiStartupData startup_data;
@@ -246,19 +232,17 @@ main (int argc, char **argv)
nm_editor_bindings_init ();
- nm_client = nm_client_new ();
- if (!nm_client_get_manager_running (nm_client)) {
+ nm_client = nm_client_new (NULL, &error);
+ if (!nm_client) {
+ g_printerr (_("Could not contact NetworkManager: %s.\n"), error->message);
+ g_error_free (error);
+ exit (1);
+ }
+ if (!nm_client_get_nm_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);
@@ -304,7 +288,6 @@ main (int argc, char **argv)
nmt_newt_finished ();
g_object_unref (nm_client);
- g_object_unref (nm_settings);
return 0;
}
diff --git a/tui/nmtui.h b/clients/tui/nmtui.h
index 3e462b113..aada9719f 100644
--- a/tui/nmtui.h
+++ b/clients/tui/nmtui.h
@@ -19,13 +19,11 @@
#ifndef NMTUI_H
#define NMTUI_H
-#include <nm-client.h>
-#include <nm-remote-settings.h>
+#include <NetworkManager.h>
G_BEGIN_DECLS
extern NMClient *nm_client;
-extern NMRemoteSettings *nm_settings;
void nmtui_quit (void);
diff --git a/config.h.in b/config.h.in
index 273a7875e..9e17255de 100644
--- a/config.h.in
+++ b/config.h.in
@@ -3,6 +3,13 @@
/* Define if building universal (internal helper macro) */
#undef AC_APPLE_UNIVERSAL_BUILD
+/* Define if you we can build nm-setting-docs.xml, nm-keyfile-docs.xml and
+ nm-ifcfg-rh-docs.xml */
+#undef BUILD_SETTING_DOCS
+
+/* Default configuration option for main.plugins setting */
+#undef CONFIG_PLUGINS_DEFAULT
+
/* Define if dhcpcd supports IPv6 (6.x+) */
#undef DHCPCD_SUPPORTS_IPV6
@@ -53,8 +60,11 @@
/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
-/* Define if you have libsoup */
-#undef HAVE_LIBSOUP
+/* Define if the kernel has IN6_ADDR_GEN_MODE_* */
+#undef HAVE_KERNEL_INET6_ADDR_GEN_MODE
+
+/* Define if libnl has rtnl_link_inet6_get_addr_gen_mode() */
+#undef HAVE_LIBNL_INET6_ADDR_GEN_MODE
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
@@ -80,6 +90,9 @@
/* Define if you have SELinux support */
#undef HAVE_SELINUX
+/* Define if you have pre-built settings docs */
+#undef HAVE_SETTING_DOCS
+
/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H
@@ -123,9 +136,15 @@
/* Path to netconfig (if enabled) */
#undef NETCONFIG_PATH
+/* The default value of the auth-polkit configuration option */
+#undef NM_CONFIG_DEFAULT_AUTH_POLKIT
+
/* Define the distribution version string */
#undef NM_DIST_VERSION
+/* git commit id of the original source code version */
+#undef NM_GIT_SHA
+
/* Define to 1 if your C compiler doesn't accept -c and -o together. */
#undef NO_MINUS_C_MINUS_O
@@ -190,15 +209,30 @@
/* Version number of package */
#undef VERSION
+/* Define if you have Bluez 5 libraries */
+#undef WITH_BLUEZ5_DUN
+
/* Define if you want connectivity checking support */
#undef WITH_CONCHECK
+/* Define if you have dhclient */
+#undef WITH_DHCLIENT
+
+/* Define if you have dhcpcd */
+#undef WITH_DHCPCD
+
+/* Define if you have libsoup */
+#undef WITH_LIBSOUP
+
/* Define if you have ModemManager1 support */
#undef WITH_MODEM_MANAGER_1
-/* Define if you have PolicyKit support */
+/* whether to compile polkit support */
#undef WITH_POLKIT
+/* Define if you have polkit agent */
+#undef WITH_POLKIT_AGENT
+
/* Define if you have PPP support */
#undef WITH_PPP
diff --git a/configure b/configure
index 551c19556..573f3c024 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.10.0.
+# Generated by GNU Autoconf 2.69 for NetworkManager 1.0.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.10.0'
-PACKAGE_STRING='NetworkManager 0.9.10.0'
+PACKAGE_VERSION='1.0.0'
+PACKAGE_STRING='NetworkManager 1.0.0'
PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=NetworkManager'
PACKAGE_URL=''
@@ -639,6 +639,11 @@ am__EXEEXT_TRUE
LTLIBOBJS
LIBOBJS
subdirs
+SETTING_DOCS_AVAILABLE_FALSE
+SETTING_DOCS_AVAILABLE_TRUE
+BUILD_SETTING_DOCS_FALSE
+BUILD_SETTING_DOCS_TRUE
+PERL
INSTALL_PREGEN_MANPAGES_FALSE
INSTALL_PREGEN_MANPAGES_TRUE
GTK_DOC_USE_REBASE_FALSE
@@ -676,6 +681,8 @@ LIBNDP_LIBS
LIBNDP_CFLAGS
WITH_CONCHECK_FALSE
WITH_CONCHECK_TRUE
+WITH_LIBSOUP_FALSE
+WITH_LIBSOUP_TRUE
LIBSOUP_LIBS
LIBSOUP_CFLAGS
KERNEL_FIRMWARE_DIR
@@ -688,6 +695,10 @@ DHCPCD_PATH
DHCLIENT_PATH
with_dhcpcd
with_dhclient
+WITH_BLUEZ5_DUN_FALSE
+WITH_BLUEZ5_DUN_TRUE
+BLUEZ5_LIBS
+BLUEZ5_CFLAGS
WITH_MODEM_MANAGER_1_FALSE
WITH_MODEM_MANAGER_1_TRUE
MM_GLIB_LIBS
@@ -713,10 +724,11 @@ GNUTLS_CFLAGS
NSS_LIBS
NSS_CFLAGS
NM_MODIFY_SYSTEM_POLICY
-WITH_POLKIT_FALSE
-WITH_POLKIT_TRUE
+WITH_POLKIT_AGENT_FALSE
+WITH_POLKIT_AGENT_TRUE
POLKIT_LIBS
POLKIT_CFLAGS
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT
WITH_TEAMDCTL_FALSE
WITH_TEAMDCTL_TRUE
LIBTEAMDCTL_LIBS
@@ -754,7 +766,9 @@ SYSTEMD_200_CFLAGS
systemdsystemunitdir
HAVE_SYSTEMD_FALSE
HAVE_SYSTEMD_TRUE
-UDEV_BASE_DIR
+WITH_UDEV_DIR_FALSE
+WITH_UDEV_DIR_TRUE
+UDEV_DIR
WITH_QT_FALSE
WITH_QT_TRUE
MOC
@@ -804,6 +818,8 @@ CONFIG_PLUGIN_IFCFG_SUSE_FALSE
CONFIG_PLUGIN_IFCFG_SUSE_TRUE
CONFIG_PLUGIN_IFCFG_RH_FALSE
CONFIG_PLUGIN_IFCFG_RH_TRUE
+CONFIG_PLUGIN_IBFT_FALSE
+CONFIG_PLUGIN_IBFT_TRUE
nmrundir
nmstatedir
nmdatadir
@@ -1001,10 +1017,12 @@ enable_nls
enable_rpath
with_libiconv_prefix
with_libintl_prefix
+enable_config_plugin_ibft
enable_ifcfg_rh
enable_ifcfg_suse
enable_ifupdown
enable_ifnet
+with_config_plugins_default
enable_code_coverage
with_dist_version
with_wext
@@ -1018,6 +1036,7 @@ with_selinux
enable_wimax
enable_teamdctl
enable_polkit
+enable_polkit_agent
enable_modify_system
with_crypto
with_dbus_sys_dir
@@ -1026,6 +1045,7 @@ with_pppd_plugin_dir
with_pppd
with_pppoe
with_modem_manager_1
+enable_bluez5_dun
with_dhclient
with_dhcpcd
with_resolvconf
@@ -1034,9 +1054,11 @@ with_iptables
with_dnsmasq
with_system_ca_path
with_kernel_firmware_dir
+with_libsoup
enable_concheck
with_nmtui
enable_more_warnings
+enable_lto
enable_vala
enable_tests
with_valgrind
@@ -1096,6 +1118,8 @@ GNUTLS_CFLAGS
GNUTLS_LIBS
MM_GLIB_CFLAGS
MM_GLIB_LIBS
+BLUEZ5_CFLAGS
+BLUEZ5_LIBS
LIBSOUP_CFLAGS
LIBSOUP_LIBS
LIBNDP_CFLAGS
@@ -1644,7 +1668,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.10.0 to adapt to many kinds of systems.
+\`configure' configures NetworkManager 1.0.0 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1714,7 +1738,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of NetworkManager 0.9.10.0:";;
+ short | recursive ) echo "Configuration of NetworkManager 1.0.0:";;
esac
cat <<\_ACEOF
@@ -1738,6 +1762,8 @@ Optional Features:
--disable-libtool-lock avoid locking (might break parallel builds)
--disable-nls do not use Native Language Support
--disable-rpath do not hardcode runtime library paths
+ --enable-config-plugin-ibft
+ enable ibft configuration plugin
--enable-ifcfg-rh enable ifcfg-rh configuration plugin (Fedora/RHEL)
--enable-ifcfg-suse enable ifcfg-suse configuration plugin (SUSE)
--enable-ifupdown enable ifupdown configuration plugin (Debian/Ubuntu)
@@ -1748,11 +1774,19 @@ Optional Features:
--enable-qt enable Qt examples
--enable-wimax enable WiMAX support
--enable-teamdctl enable Teamd control support
- --enable-polkit enable PolicyKit support
+ --enable-polkit=yes|no|disabled
+ set default value for auth-polkit configuration
+ option. This value can be overwritten by NM
+ configuration. 'disabled' compiles NM without any
+ support
+ --enable-polkit-agent enable polkit agent for clients
--enable-modify-system Allow users to modify system connections
--enable-ppp enable PPP/PPPoE support
+ --enable-bluez5-dun enable Bluez5 DUN support
--enable-concheck enable connectivity checking support
--enable-more-warnings Possible values: no/yes/error
+ --enable-lto Enable Link Time Optimization for smaller size
+ (default: no)
--enable-vala=[no/auto/yes]
build Vala bindings [[default=auto]]
--enable-tests=root|yes|no
@@ -1774,10 +1808,15 @@ Optional Packages:
--without-libiconv-prefix don't search for libiconv in includedir and libdir
--with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib
--without-libintl-prefix don't search for libintl in includedir and libdir
+ --with-config-plugins-default=PLUGINS
+ Default configuration option for main.plugins
+ setting, used as fallback if the configuration
+ option is unset
--with-dist-version=<NM-distribution-version>
Define the NM''s distribution version string
--with-wext=yes Enable or disable Linux Wireless Extensions
- --with-udev-dir=DIR where the udev base directory is
+ --with-udev-dir=DIR Absolute path of the udev base directory. Set to
+ 'no' not to install the udev rules
--with-systemdsystemunitdir=DIR
Directory for systemd service files
--with-session-tracking=systemd|consolekit|no
@@ -1815,6 +1854,7 @@ Optional Packages:
--with-kernel-firmware-dir=DIR
where kernel firmware directory is (default is
/lib/firmware)
+ --with-libsoup=yes|no Link against libsoup
--with-nmtui=yes|no Build nmtui
--with-valgrind=yes|no|path
Use valgrind to memory-check the tests (default:
@@ -1893,6 +1933,9 @@ Some influential environment variables:
C compiler flags for MM_GLIB, overriding pkg-config
MM_GLIB_LIBS
linker flags for MM_GLIB, overriding pkg-config
+ BLUEZ5_CFLAGS
+ C compiler flags for BLUEZ5, overriding pkg-config
+ BLUEZ5_LIBS linker flags for BLUEZ5, overriding pkg-config
LIBSOUP_CFLAGS
C compiler flags for LIBSOUP, overriding pkg-config
LIBSOUP_LIBS
@@ -1973,7 +2016,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-NetworkManager configure 0.9.10.0
+NetworkManager configure 1.0.0
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2517,7 +2560,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.10.0, which was
+It was created by NetworkManager $as_me 1.0.0, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3387,7 +3430,7 @@ fi
# Define the identity of the package.
PACKAGE='NetworkManager'
- VERSION='0.9.10.0'
+ VERSION='1.0.0'
cat >>confdefs.h <<_ACEOF
@@ -16635,15 +16678,20 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
-NM_MAJOR_VERSION=0
-NM_MINOR_VERSION=9
-NM_MICRO_VERSION=10
-NM_VERSION=0.9.10.0
-NM_GIT_SHA=6eb82acd6dce882f4b91aafcf68dd9e143ce34e2
+NM_MAJOR_VERSION=1
+NM_MINOR_VERSION=0
+NM_MICRO_VERSION=0
+NM_VERSION=1.0.0
+NM_GIT_SHA=acdaf78a068b6c65ba799a7098b867953db4801c
+
+
+cat >>confdefs.h <<_ACEOF
+#define NM_GIT_SHA "$NM_GIT_SHA"
+_ACEOF
ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default"
@@ -19382,6 +19430,11 @@ nmrundir="$localstatedir/run/$PACKAGE"
# Alternative configuration plugins
+# Check whether --enable-config-plugin-ibft was given.
+if test "${enable_config_plugin_ibft+set}" = set; then :
+ enableval=$enable_config_plugin_ibft;
+fi
+
# Check whether --enable-ifcfg-rh was given.
if test "${enable_ifcfg_rh+set}" = set; then :
enableval=$enable_ifcfg_rh;
@@ -19542,7 +19595,19 @@ fi
if test -z "$enable_ifnet"; then :
enable_ifnet=no
fi
+# Enable ibft by default
+if test -z "$enable_config_plugin_ibft"; then :
+ enable_config_plugin_ibft="yes"
+fi
# Create automake conditionals
+ if test "$enable_config_plugin_ibft" = "yes"; then
+ CONFIG_PLUGIN_IBFT_TRUE=
+ CONFIG_PLUGIN_IBFT_FALSE='#'
+else
+ CONFIG_PLUGIN_IBFT_TRUE='#'
+ CONFIG_PLUGIN_IBFT_FALSE=
+fi
+
if test "$enable_ifcfg_rh" = "yes"; then
CONFIG_PLUGIN_IFCFG_RH_TRUE=
CONFIG_PLUGIN_IFCFG_RH_FALSE='#'
@@ -19576,6 +19641,29 @@ else
fi
+
+# Check whether --with-config-plugins-default was given.
+if test "${with_config_plugins_default+set}" = set; then :
+ withval=$with_config_plugins_default; config_plugins_default="$withval"
+else
+ config_plugins_default=""
+fi
+
+if test -z "$config_plugins_default" -o "$config_plugins_default" = no; then
+ config_plugins_default=''
+ test "$enable_ifcfg_rh" = "yes" && config_plugins_default="$config_plugins_default,ifcfg-rh"
+ test "$enable_ifcfg_suse" = "yes" && config_plugins_default="$config_plugins_default,ifcfg-suse"
+ test "$enable_ifupdown" = "yes" && config_plugins_default="$config_plugins_default,ifupdown"
+ test "$enable_ifnet" = "yes" && config_plugins_default="$config_plugins_default,ifnet"
+ test "$enable_config_plugin_ibft" = "yes" && config_plugins_default="$config_plugins_default,ibft"
+ config_plugins_default="${config_plugins_default#,}"
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define CONFIG_PLUGINS_DEFAULT "$config_plugins_default"
+_ACEOF
+
+
if test "$enable_ifcfg_rh" = "yes"; then
DISTRO_NETWORK_SERVICE=network.service
fi
@@ -20951,16 +21039,29 @@ fi
-
# Check whether --with-udev-dir was given.
if test "${with_udev_dir+set}" = set; then :
withval=$with_udev_dir;
+else
+ with_udev_dir="yes"
fi
-if test -n "$with_udev_dir" ; then
- UDEV_BASE_DIR="$with_udev_dir"
+if (test "$with_udev_dir" != 'no'); then
+ if (test "$with_udev_dir" != 'yes' && echo -n "$with_udev_dir" | grep -v -q '^/'); then
+ as_fn_error $? "--with-udev-dir must be an absolute path or 'yes' or 'no'. Instead it is '$with_udev_dir'" "$LINENO" 5
+ fi
+ if (test "$with_udev_dir" = 'yes'); then
+ with_udev_dir="/lib/udev"
+ fi
+ UDEV_DIR="$with_udev_dir"
+
+fi
+ if test "$with_udev_dir" != 'no'; then
+ WITH_UDEV_DIR_TRUE=
+ WITH_UDEV_DIR_FALSE='#'
else
- UDEV_BASE_DIR="/lib/udev"
+ WITH_UDEV_DIR_TRUE='#'
+ WITH_UDEV_DIR_FALSE=
fi
@@ -21131,6 +21232,65 @@ if test -n "$SYSTEMD_LOGIN_CFLAGS"; then
pkg_cv_SYSTEMD_LOGIN_CFLAGS="$SYSTEMD_LOGIN_CFLAGS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsystemd\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libsystemd") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_SYSTEMD_LOGIN_CFLAGS=`$PKG_CONFIG --cflags "libsystemd" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$SYSTEMD_LOGIN_LIBS"; then
+ pkg_cv_SYSTEMD_LOGIN_LIBS="$SYSTEMD_LOGIN_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsystemd\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libsystemd") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_SYSTEMD_LOGIN_LIBS=`$PKG_CONFIG --libs "libsystemd" 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
+ SYSTEMD_LOGIN_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libsystemd" 2>&1`
+ else
+ SYSTEMD_LOGIN_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libsystemd" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$SYSTEMD_LOGIN_PKG_ERRORS" >&5
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SYSTEMD_LOGIN" >&5
+$as_echo_n "checking for SYSTEMD_LOGIN... " >&6; }
+
+if test -n "$SYSTEMD_LOGIN_CFLAGS"; then
+ pkg_cv_SYSTEMD_LOGIN_CFLAGS="$SYSTEMD_LOGIN_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
{ { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsystemd-login\""; } >&5
($PKG_CONFIG --exists --print-errors "libsystemd-login") 2>&5
ac_status=$?
@@ -21213,6 +21373,107 @@ else
$as_echo "yes" >&6; }
fi
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SYSTEMD_LOGIN" >&5
+$as_echo_n "checking for SYSTEMD_LOGIN... " >&6; }
+
+if test -n "$SYSTEMD_LOGIN_CFLAGS"; then
+ pkg_cv_SYSTEMD_LOGIN_CFLAGS="$SYSTEMD_LOGIN_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsystemd-login\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libsystemd-login") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_SYSTEMD_LOGIN_CFLAGS=`$PKG_CONFIG --cflags "libsystemd-login" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$SYSTEMD_LOGIN_LIBS"; then
+ pkg_cv_SYSTEMD_LOGIN_LIBS="$SYSTEMD_LOGIN_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsystemd-login\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libsystemd-login") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_SYSTEMD_LOGIN_LIBS=`$PKG_CONFIG --libs "libsystemd-login" 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
+ SYSTEMD_LOGIN_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libsystemd-login" 2>&1`
+ else
+ SYSTEMD_LOGIN_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libsystemd-login" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$SYSTEMD_LOGIN_PKG_ERRORS" >&5
+
+ as_fn_error $? "Package requirements (libsystemd-login) were not met:
+
+$SYSTEMD_LOGIN_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 SYSTEMD_LOGIN_CFLAGS
+and SYSTEMD_LOGIN_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 SYSTEMD_LOGIN_CFLAGS
+and SYSTEMD_LOGIN_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
+ SYSTEMD_LOGIN_CFLAGS=$pkg_cv_SYSTEMD_LOGIN_CFLAGS
+ SYSTEMD_LOGIN_LIBS=$pkg_cv_SYSTEMD_LOGIN_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+else
+ SYSTEMD_LOGIN_CFLAGS=$pkg_cv_SYSTEMD_LOGIN_CFLAGS
+ SYSTEMD_LOGIN_LIBS=$pkg_cv_SYSTEMD_LOGIN_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
fi
@@ -21231,6 +21492,14 @@ fi
if test "z$with_suspend_resume" = "z"; then
if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsystemd >= 209\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libsystemd >= 209") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ have_systemd_inhibit=yes
+else
+ if test -n "$PKG_CONFIG" && \
{ { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsystemd-login >= 183\""; } >&5
($PKG_CONFIG --exists --print-errors "libsystemd-login >= 183") 2>&5
ac_status=$?
@@ -21240,6 +21509,7 @@ if test "z$with_suspend_resume" = "z"; then
else
have_systemd_inhibit=no
fi
+fi
if test "z${have_systemd_inhibit}" = "zyes"; then
# Use systemd if it's new enough
with_suspend_resume="systemd"
@@ -21261,6 +21531,159 @@ if test -n "$SYSTEMD_INHIBIT_CFLAGS"; then
pkg_cv_SYSTEMD_INHIBIT_CFLAGS="$SYSTEMD_INHIBIT_CFLAGS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsystemd >= 209\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libsystemd >= 209") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_SYSTEMD_INHIBIT_CFLAGS=`$PKG_CONFIG --cflags "libsystemd >= 209" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$SYSTEMD_INHIBIT_LIBS"; then
+ pkg_cv_SYSTEMD_INHIBIT_LIBS="$SYSTEMD_INHIBIT_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsystemd >= 209\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libsystemd >= 209") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_SYSTEMD_INHIBIT_LIBS=`$PKG_CONFIG --libs "libsystemd >= 209" 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
+ SYSTEMD_INHIBIT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libsystemd >= 209" 2>&1`
+ else
+ SYSTEMD_INHIBIT_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libsystemd >= 209" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$SYSTEMD_INHIBIT_PKG_ERRORS" >&5
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SYSTEMD_INHIBIT" >&5
+$as_echo_n "checking for SYSTEMD_INHIBIT... " >&6; }
+
+if test -n "$SYSTEMD_INHIBIT_CFLAGS"; then
+ pkg_cv_SYSTEMD_INHIBIT_CFLAGS="$SYSTEMD_INHIBIT_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsystemd-login >= 183\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libsystemd-login >= 183") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_SYSTEMD_INHIBIT_CFLAGS=`$PKG_CONFIG --cflags "libsystemd-login >= 183" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$SYSTEMD_INHIBIT_LIBS"; then
+ pkg_cv_SYSTEMD_INHIBIT_LIBS="$SYSTEMD_INHIBIT_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsystemd-login >= 183\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libsystemd-login >= 183") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_SYSTEMD_INHIBIT_LIBS=`$PKG_CONFIG --libs "libsystemd-login >= 183" 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
+ SYSTEMD_INHIBIT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libsystemd-login >= 183" 2>&1`
+ else
+ SYSTEMD_INHIBIT_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libsystemd-login >= 183" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$SYSTEMD_INHIBIT_PKG_ERRORS" >&5
+
+ as_fn_error $? "Package requirements (libsystemd-login >= 183) were not met:
+
+$SYSTEMD_INHIBIT_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 SYSTEMD_INHIBIT_CFLAGS
+and SYSTEMD_INHIBIT_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 SYSTEMD_INHIBIT_CFLAGS
+and SYSTEMD_INHIBIT_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
+ SYSTEMD_INHIBIT_CFLAGS=$pkg_cv_SYSTEMD_INHIBIT_CFLAGS
+ SYSTEMD_INHIBIT_LIBS=$pkg_cv_SYSTEMD_INHIBIT_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SYSTEMD_INHIBIT" >&5
+$as_echo_n "checking for SYSTEMD_INHIBIT... " >&6; }
+
+if test -n "$SYSTEMD_INHIBIT_CFLAGS"; then
+ pkg_cv_SYSTEMD_INHIBIT_CFLAGS="$SYSTEMD_INHIBIT_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
{ { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsystemd-login >= 183\""; } >&5
($PKG_CONFIG --exists --print-errors "libsystemd-login >= 183") 2>&5
ac_status=$?
@@ -21343,6 +21766,13 @@ else
$as_echo "yes" >&6; }
fi
+else
+ SYSTEMD_INHIBIT_CFLAGS=$pkg_cv_SYSTEMD_INHIBIT_CFLAGS
+ SYSTEMD_INHIBIT_LIBS=$pkg_cv_SYSTEMD_INHIBIT_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
;;
*)
as_fn_error $? "--with-suspend-resume must be one of upower, systemd" "$LINENO" 5
@@ -21565,6 +21995,88 @@ fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for rtnl_link_inet6_get_addr_gen_mode in -lnl-route-3" >&5
+$as_echo_n "checking for rtnl_link_inet6_get_addr_gen_mode in -lnl-route-3... " >&6; }
+if ${ac_cv_lib_nl_route_3_rtnl_link_inet6_get_addr_gen_mode+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnl-route-3 $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 rtnl_link_inet6_get_addr_gen_mode ();
+int
+main ()
+{
+return rtnl_link_inet6_get_addr_gen_mode ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_nl_route_3_rtnl_link_inet6_get_addr_gen_mode=yes
+else
+ ac_cv_lib_nl_route_3_rtnl_link_inet6_get_addr_gen_mode=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_nl_route_3_rtnl_link_inet6_get_addr_gen_mode" >&5
+$as_echo "$ac_cv_lib_nl_route_3_rtnl_link_inet6_get_addr_gen_mode" >&6; }
+if test "x$ac_cv_lib_nl_route_3_rtnl_link_inet6_get_addr_gen_mode" = xyes; then :
+ ac_have_addr_gen_mode="1"
+else
+ ac_have_addr_gen_mode="0"
+fi
+
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBNL_INET6_ADDR_GEN_MODE $ac_have_addr_gen_mode
+_ACEOF
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Linux kernel IN6_ADDR_GEN_MODE enum" >&5
+$as_echo_n "checking Linux kernel IN6_ADDR_GEN_MODE enum... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifndef __user
+ #define __user
+ #endif
+ #include <linux/if_link.h>
+int
+main ()
+{
+int a = IN6_ADDR_GEN_MODE_EUI64; a++;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_have_kernel_gen_mode=yes
+else
+ ac_have_kernel_gen_mode=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_have_kernel_gen_mode" >&5
+$as_echo "$ac_have_kernel_gen_mode" >&6; }
+if test "$ac_have_kernel_gen_mode" = yes; then
+
+$as_echo "#define HAVE_KERNEL_INET6_ADDR_GEN_MODE 1" >>confdefs.h
+
+else
+
+$as_echo "#define HAVE_KERNEL_INET6_ADDR_GEN_MODE 0" >>confdefs.h
+
+fi
+
# uuid library
pkg_failed=no
@@ -21718,6 +22230,7 @@ $as_echo "$ax_cv_lib_readline" >&6; }
as_fn_error $? "readline library with terminfo support is required (one of ncurses, curses, or termcap)" "$LINENO" 5
fi
+ ORIG_LIBS="$LIBS"
LIBS="$LIBS $ax_cv_lib_readline"
for ac_header in readline.h readline/readline.h
do :
@@ -21732,6 +22245,8 @@ fi
done
+
+ # Check history
{ $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 :
@@ -21782,6 +22297,47 @@ fi
done
+
+ # check rl_echo_signal_char()
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether readline supports rl_echo_signal_char()" >&5
+$as_echo_n "checking whether readline supports rl_echo_signal_char()... " >&6; }
+if ${ax_cv_lib_readline_echo_signal_char+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ ax_cv_lib_readline_echo_signal_char="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 rl_echo_signal_char ();
+int
+main ()
+{
+return rl_echo_signal_char ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ax_cv_lib_readline_echo_signal_char="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_echo_signal_char" >&5
+$as_echo "$ax_cv_lib_readline_echo_signal_char" >&6; }
+ if test "$ax_cv_lib_readline_echo_signal_char" != "yes"; then
+ as_fn_error $? "rl_echo_signal_char() is required (install readline6?)" "$LINENO" 5
+ fi
+
+ LIBS="$ORIG_LIBS"
READLINE_LIBS="$ax_cv_lib_readline"
@@ -22002,6 +22558,41 @@ else
fi
+# we usually compile with polkit support. --enable-polkit=yes|no only sets the
+# default configuration for main.auth-polkit. User can always enable/disable polkit
+# autorization via config. Only when specifying --enable-polkit=disabled, we do
+# not compile support. In this case, the user cannot enable polkit authorization via
+# configuration.
+# Check whether --enable-polkit was given.
+if test "${enable_polkit+set}" = set; then :
+ enableval=$enable_polkit; enable_polkit=${enableval}
+else
+ enable_polkit=yes
+fi
+
+if (test "${enable_polkit}" != "no" -a "${enable_polkit}" != "disabled"); then
+ enable_polkit=yes
+
+$as_echo "#define NM_CONFIG_DEFAULT_AUTH_POLKIT TRUE" >>confdefs.h
+
+ NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT='true'
+else
+
+$as_echo "#define NM_CONFIG_DEFAULT_AUTH_POLKIT FALSE" >>confdefs.h
+
+ NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT='false'
+fi
+if (test "${enable_polkit}" != "disabled"); then
+
+$as_echo "#define WITH_POLKIT 1" >>confdefs.h
+
+else
+
+$as_echo "#define WITH_POLKIT 0" >>confdefs.h
+
+fi
+
+
pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for POLKIT" >&5
@@ -22011,12 +22602,12 @@ if test -n "$POLKIT_CFLAGS"; then
pkg_cv_POLKIT_CFLAGS="$POLKIT_CFLAGS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"polkit-gobject-1 >= 0.97\""; } >&5
- ($PKG_CONFIG --exists --print-errors "polkit-gobject-1 >= 0.97") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"polkit-agent-1 >= 0.97\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "polkit-agent-1 >= 0.97") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_POLKIT_CFLAGS=`$PKG_CONFIG --cflags "polkit-gobject-1 >= 0.97" 2>/dev/null`
+ pkg_cv_POLKIT_CFLAGS=`$PKG_CONFIG --cflags "polkit-agent-1 >= 0.97" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
pkg_failed=yes
@@ -22028,12 +22619,12 @@ if test -n "$POLKIT_LIBS"; then
pkg_cv_POLKIT_LIBS="$POLKIT_LIBS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"polkit-gobject-1 >= 0.97\""; } >&5
- ($PKG_CONFIG --exists --print-errors "polkit-gobject-1 >= 0.97") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"polkit-agent-1 >= 0.97\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "polkit-agent-1 >= 0.97") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_POLKIT_LIBS=`$PKG_CONFIG --libs "polkit-gobject-1 >= 0.97" 2>/dev/null`
+ pkg_cv_POLKIT_LIBS=`$PKG_CONFIG --libs "polkit-agent-1 >= 0.97" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
pkg_failed=yes
@@ -22054,52 +22645,53 @@ else
_pkg_short_errors_supported=no
fi
if test $_pkg_short_errors_supported = yes; then
- POLKIT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "polkit-gobject-1 >= 0.97" 2>&1`
+ POLKIT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "polkit-agent-1 >= 0.97" 2>&1`
else
- POLKIT_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "polkit-gobject-1 >= 0.97" 2>&1`
+ POLKIT_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "polkit-agent-1 >= 0.97" 2>&1`
fi
# Put the nasty error message in config.log where it belongs
echo "$POLKIT_PKG_ERRORS" >&5
- have_polkit=no
+ have_pk_agent=no
elif test $pkg_failed = untried; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- have_polkit=no
+ have_pk_agent=no
else
POLKIT_CFLAGS=$pkg_cv_POLKIT_CFLAGS
POLKIT_LIBS=$pkg_cv_POLKIT_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
- have_polkit=yes
+ have_pk_agent=yes
fi
-# Check whether --enable-polkit was given.
-if test "${enable_polkit+set}" = set; then :
- enableval=$enable_polkit; enable_polkit=${enableval}
+# Check whether --enable-polkit-agent was given.
+if test "${enable_polkit_agent+set}" = set; then :
+ enableval=$enable_polkit_agent; enable_polkit_agent=${enableval}
else
- enable_polkit=${have_polkit}
+ enable_polkit_agent=${have_pk_agent}
fi
-if (test "${enable_polkit}" = "yes"); then
- if test x"$have_polkit" = x"no"; then
- as_fn_error $? "PolicyKit development headers are required" "$LINENO" 5
+if (test "${enable_polkit_agent}" = "yes"); then
+ if test x"$have_pk_agent" = x"no"; then
+ as_fn_error $? "Polkit agent is required" "$LINENO" 5
fi
-$as_echo "#define WITH_POLKIT 1" >>confdefs.h
+
+$as_echo "#define WITH_POLKIT_AGENT 1" >>confdefs.h
else
-$as_echo "#define WITH_POLKIT 0" >>confdefs.h
+$as_echo "#define WITH_POLKIT_AGENT 0" >>confdefs.h
fi
- if test "${enable_polkit}" = "yes"; then
- WITH_POLKIT_TRUE=
- WITH_POLKIT_FALSE='#'
+ if test "${enable_polkit_agent}" = "yes"; then
+ WITH_POLKIT_AGENT_TRUE=
+ WITH_POLKIT_AGENT_FALSE='#'
else
- WITH_POLKIT_TRUE='#'
- WITH_POLKIT_FALSE=
+ WITH_POLKIT_AGENT_TRUE='#'
+ WITH_POLKIT_AGENT_FALSE=
fi
@@ -22109,9 +22701,6 @@ if test "${enable_modify_system+set}" = set; then :
fi
if test "${enable_modify_system}" = "yes"; then
- if ! test "${enable_polkit}" = "yes"; then
- as_fn_error $? "--enable-modify-system requires --enable-polkit" "$LINENO" 5
- fi
NM_MODIFY_SYSTEM_POLICY="yes"
else
NM_MODIFY_SYSTEM_POLICY="auth_admin_keep"
@@ -22709,6 +23298,106 @@ else
fi
+# Bluez5 DUN support
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLUEZ5" >&5
+$as_echo_n "checking for BLUEZ5... " >&6; }
+
+if test -n "$BLUEZ5_CFLAGS"; then
+ pkg_cv_BLUEZ5_CFLAGS="$BLUEZ5_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"bluez >= 5\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "bluez >= 5") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_BLUEZ5_CFLAGS=`$PKG_CONFIG --cflags "bluez >= 5" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$BLUEZ5_LIBS"; then
+ pkg_cv_BLUEZ5_LIBS="$BLUEZ5_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"bluez >= 5\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "bluez >= 5") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_BLUEZ5_LIBS=`$PKG_CONFIG --libs "bluez >= 5" 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
+ BLUEZ5_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "bluez >= 5" 2>&1`
+ else
+ BLUEZ5_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "bluez >= 5" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$BLUEZ5_PKG_ERRORS" >&5
+
+ have_bluez5=no
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ have_bluez5=no
+else
+ BLUEZ5_CFLAGS=$pkg_cv_BLUEZ5_CFLAGS
+ BLUEZ5_LIBS=$pkg_cv_BLUEZ5_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ have_bluez5=yes
+fi
+# Check whether --enable-bluez5-dun was given.
+if test "${enable_bluez5_dun+set}" = set; then :
+ enableval=$enable_bluez5_dun; enable_bluez5_dun=${enableval}
+else
+ enable_bluez5_dun=${have_bluez5}
+fi
+
+if (test "${enable_bluez5_dun}" = "yes"); then
+ if test x"$have_bluez5" = x"no"; then
+ as_fn_error $? "Bluez 5.x development headers are required" "$LINENO" 5
+ fi
+
+$as_echo "#define WITH_BLUEZ5_DUN 1" >>confdefs.h
+
+else
+
+$as_echo "#define WITH_BLUEZ5_DUN 0" >>confdefs.h
+
+fi
+ if test "${enable_bluez5_dun}" = "yes"; then
+ WITH_BLUEZ5_DUN_TRUE=
+ WITH_BLUEZ5_DUN_FALSE='#'
+else
+ WITH_BLUEZ5_DUN_TRUE='#'
+ WITH_BLUEZ5_DUN_FALSE=
+fi
+
+
# DHCP client support
# Check whether --with-dhclient was given.
@@ -22854,12 +23543,26 @@ $as_echo "$as_me: WARNING: Could not find a suitable DHCP client, falling back t
fi
# Add substitutions
if test "$with_dhclient" != "no"; then
+
+$as_echo "#define WITH_DHCLIENT TRUE" >>confdefs.h
+
DHCLIENT_PATH=$with_dhclient
+else
+
+$as_echo "#define WITH_DHCLIENT FALSE" >>confdefs.h
+
fi
if test "$with_dhcpcd" != "no"; then
+
+$as_echo "#define WITH_DHCPCD TRUE" >>confdefs.h
+
DHCPCD_PATH=$with_dhcpcd
+else
+
+$as_echo "#define WITH_DHCPCD FALSE" >>confdefs.h
+
fi
# resolvconf and netconfig support
@@ -23249,26 +23952,46 @@ else
$as_echo "yes" >&6; }
have_libsoup=yes
fi
-if test "$have_libsoup" = "yes"; then
-$as_echo "#define HAVE_LIBSOUP 1" >>confdefs.h
+# Check whether --with-libsoup was given.
+if test "${with_libsoup+set}" = set; then :
+ withval=$with_libsoup;
+else
+ with_libsoup=${have_libsoup}
+fi
+
+if test "$with_libsoup" != "no"; then
+ if test "$have_libsoup" != "yes"; then
+ as_fn_error $? "libsoup library not found" "$LINENO" 5
+ fi
+ with_libsoup='yes'
+
+$as_echo "#define WITH_LIBSOUP 1" >>confdefs.h
else
-$as_echo "#define HAVE_LIBSOUP 0" >>confdefs.h
+$as_echo "#define WITH_LIBSOUP 0" >>confdefs.h
fi
+ if test "$with_libsoup" != "no"; then
+ WITH_LIBSOUP_TRUE=
+ WITH_LIBSOUP_FALSE='#'
+else
+ WITH_LIBSOUP_TRUE='#'
+ WITH_LIBSOUP_FALSE=
+fi
+
# Check whether --enable-concheck was given.
if test "${enable_concheck+set}" = set; then :
enableval=$enable_concheck; enable_concheck=${enableval}
else
- enable_concheck=${have_libsoup}
+ enable_concheck=${with_libsoup}
fi
if (test "${enable_concheck}" = "yes"); then
- if test x"$have_libsoup" = x"no"; then
- as_fn_error $? "Connectivity checking requires libsoup development headers" "$LINENO" 5
+ if test x"$with_libsoup" = x"no"; then
+ as_fn_error $? "Connectivity checking requires libsoup" "$LINENO" 5
fi
@@ -23487,17 +24210,42 @@ $as_echo_n "checking for more warnings... " >&6; }
if test "$GCC" = "yes" -a "$set_more_warnings" != "no"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
- CFLAGS="-Wall -std=gnu89 $CFLAGS"
+ CFLAGS_SAVED="$CFLAGS"
+ CFLAGS_MORE_WARNINGS="-Wall -std=gnu89"
+
+ CFLAGS_EXTRA="-Werror=unknown-warning-option"
+ CFLAGS="$CFLAGS_MORE_WARNINGS $CFLAGS_EXTRA $CFLAGS_SAVED"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ has_option=yes
+else
+ has_option=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ if test $has_option = no; then
+ CFLAGS_EXTRA=
+ fi
+ unset has_option
for option in -Wshadow -Wmissing-declarations -Wmissing-prototypes \
-Wdeclaration-after-statement -Wformat-security \
-Wfloat-equal -Wno-unused-parameter -Wno-sign-compare \
+ -Wstrict-prototypes \
-fno-strict-aliasing -Wno-unused-but-set-variable \
-Wundef -Wimplicit-function-declaration \
-Wpointer-arith -Winit-self \
- -Wmissing-include-dirs -Waggregate-return; do
- SAVE_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS $option"
+ -Wmissing-include-dirs; do
+ CFLAGS="$CFLAGS_MORE_WARNINGS $CFLAGS_EXTRA $option $CFLAGS_SAVED"
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc understands $option" >&5
$as_echo_n "checking whether gcc understands $option... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -23517,24 +24265,38 @@ else
has_option=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- if test $has_option = no; then
- CFLAGS="$SAVE_CFLAGS"
+ if test $has_option != no; then
+ CFLAGS_MORE_WARNINGS="$CFLAGS_MORE_WARNINGS $option"
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_option" >&5
$as_echo "$has_option" >&6; }
unset has_option
- unset SAVE_CFLAGS
done
unset option
+ unset CFLAGS_EXTRA
if test "x$set_more_warnings" = xerror; then
- CFLAGS="$CFLAGS -Werror"
+ CFLAGS_MORE_WARNINGS="$CFLAGS_MORE_WARNINGS -Werror"
fi
+ CFLAGS="$CFLAGS_MORE_WARNINGS $CFLAGS_SAVED"
+ unset CFLAGS_SAVED
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
+# Check whether --enable-lto was given.
+if test "${enable_lto+set}" = set; then :
+ enableval=$enable_lto; enable_lto=yes
+else
+ enable_lto=no
+fi
+
+if (test "${enable_lto}" = "yes"); then
+ CFLAGS="-flto $CFLAGS"
+fi
+
+
@@ -24191,6 +24953,8 @@ install_pregen_manpages=no
if test "$enable_gtk_doc" != "yes" \
-a -f man/NetworkManager.conf.5 \
-a -f man/nm-settings.5 \
+ -a -f man/nm-settings-keyfile.5 \
+ -a -f man/nm-settings-ifcfg-rh.5 \
-a -f man/nmcli-examples.5 \
-a -f man/NetworkManager.8; then
install_pregen_manpages=yes
@@ -24204,8 +24968,111 @@ else
fi
+# check if we can build setting property documentation
+if test -n "$INTROSPECTION_MAKEFILE" -a "$enable_gtk_doc" = "yes"; then
+ # If g-i is installed we know we have python, but we might not have pygobject
+ if python -c 'from gi.repository import GObject' >& /dev/null; then
+ have_pyobject=yes
+ fi
+
+ # gtk-doc depends on perl, but we can check for it anyway
+ # Extract the first word of "perl", so it can be a program name with args.
+set dummy perl; 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_PERL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $PERL in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PERL="$PERL" # 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_path_PERL="$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
+
+ test -z "$ac_cv_path_PERL" && ac_cv_path_PERL="no"
+ ;;
+esac
+fi
+PERL=$ac_cv_path_PERL
+if test -n "$PERL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5
+$as_echo "$PERL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ # check for needed perl modules (use YAML; YAML::XS is better, but may not be so widespread)
+ required_perl_modules="YAML"
+ for module in $required_perl_modules; do
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking checking for perl module '$module'" >&5
+$as_echo_n "checking checking for perl module '$module'... " >&6; }
+ if ${PERL} -e 'use '$module 2>/dev/null ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: Ok" >&5
+$as_echo "Ok" >&6; }
+ have_perl_modules=yes
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: Failed" >&5
+$as_echo "Failed" >&6; }
+ as_fn_error $? "You must have Perl modules to build settings plugin docs: $required_perl_modules." "$LINENO" 5
+ fi
+ done
+
+ if test "$have_pyobject" = "yes" -a "$have_perl_modules" = "yes"; then
+
+$as_echo "#define BUILD_SETTING_DOCS 1" >>confdefs.h
+
+ build_setting_docs=yes
+ fi
+fi
+
+# check for pre-built setting docs
+if test "$build_setting_docs" != "yes" \
+ -a -f man/nm-settings.xml \
+ -a -f man/nm-settings-keyfile.xml \
+ -a -f man/nm-settings-ifcfg-rh.xml \
+ -a -f docs/api/settings-spec.xml \
+ -a -f clients/cli/settings-docs.c; then
-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"
+$as_echo "#define HAVE_SETTING_DOCS 1" >>confdefs.h
+
+ have_setting_docs=yes
+fi
+
+ if test "$build_setting_docs" = "yes"; then
+ BUILD_SETTING_DOCS_TRUE=
+ BUILD_SETTING_DOCS_FALSE='#'
+else
+ BUILD_SETTING_DOCS_TRUE='#'
+ BUILD_SETTING_DOCS_FALSE=
+fi
+
+ if test "$build_setting_docs" = "yes" -o "$have_setting_docs" = "yes"; then
+ SETTING_DOCS_AVAILABLE_TRUE=
+ SETTING_DOCS_AVAILABLE_FALSE='#'
+else
+ SETTING_DOCS_AVAILABLE_TRUE='#'
+ SETTING_DOCS_AVAILABLE_FALSE=
+fi
+
+
+
+ac_config_files="$ac_config_files Makefile include/Makefile src/Makefile src/tests/Makefile src/tests/config/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/ibft/Makefile src/settings/plugins/ibft/tests/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/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/team/Makefile src/devices/wifi/Makefile src/devices/wifi/tests/Makefile src/devices/wwan/Makefile libnm-core/nm-version.h libnm-core/Makefile libnm-core/tests/Makefile libnm/libnm.pc libnm/Makefile libnm/tests/Makefile libnm-util/libnm-util.pc libnm-util/nm-version.h libnm-util/Makefile libnm-util/tests/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 clients/Makefile clients/cli/Makefile clients/tui/Makefile clients/tui/newt/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/NetworkManager.conf.xml man/nm-system-settings.conf.5 man/nm-online.1 man/nmcli.1 man/nmtui.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 docs/libnm/Makefile docs/libnm/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"
@@ -24361,6 +25228,10 @@ fi
+if test -z "${CONFIG_PLUGIN_IBFT_TRUE}" && test -z "${CONFIG_PLUGIN_IBFT_FALSE}"; then
+ as_fn_error $? "conditional \"CONFIG_PLUGIN_IBFT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${CONFIG_PLUGIN_IFCFG_RH_TRUE}" && test -z "${CONFIG_PLUGIN_IFCFG_RH_FALSE}"; then
as_fn_error $? "conditional \"CONFIG_PLUGIN_IFCFG_RH\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -24397,6 +25268,10 @@ 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_UDEV_DIR_TRUE}" && test -z "${WITH_UDEV_DIR_FALSE}"; then
+ as_fn_error $? "conditional \"WITH_UDEV_DIR\" 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
@@ -24433,8 +25308,8 @@ 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.
+if test -z "${WITH_POLKIT_AGENT_TRUE}" && test -z "${WITH_POLKIT_AGENT_FALSE}"; then
+ as_fn_error $? "conditional \"WITH_POLKIT_AGENT\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
if test -z "${WITH_NSS_TRUE}" && test -z "${WITH_NSS_FALSE}"; then
@@ -24453,6 +25328,14 @@ if test -z "${WITH_MODEM_MANAGER_1_TRUE}" && test -z "${WITH_MODEM_MANAGER_1_FAL
as_fn_error $? "conditional \"WITH_MODEM_MANAGER_1\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${WITH_BLUEZ5_DUN_TRUE}" && test -z "${WITH_BLUEZ5_DUN_FALSE}"; then
+ as_fn_error $? "conditional \"WITH_BLUEZ5_DUN\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${WITH_LIBSOUP_TRUE}" && test -z "${WITH_LIBSOUP_FALSE}"; then
+ as_fn_error $? "conditional \"WITH_LIBSOUP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
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
@@ -24497,6 +25380,14 @@ if test -z "${INSTALL_PREGEN_MANPAGES_TRUE}" && test -z "${INSTALL_PREGEN_MANPAG
as_fn_error $? "conditional \"INSTALL_PREGEN_MANPAGES\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${BUILD_SETTING_DOCS_TRUE}" && test -z "${BUILD_SETTING_DOCS_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_SETTING_DOCS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${SETTING_DOCS_AVAILABLE_TRUE}" && test -z "${SETTING_DOCS_AVAILABLE_FALSE}"; then
+ as_fn_error $? "conditional \"SETTING_DOCS_AVAILABLE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
: "${CONFIG_STATUS=./config.status}"
ac_write_fail=0
@@ -24894,7 +25785,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.10.0, which was
+This file was extended by NetworkManager $as_me 1.0.0, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -24960,7 +25851,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.10.0
+NetworkManager config.status 1.0.0
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
@@ -25477,10 +26368,9 @@ do
"po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;;
"Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
"include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;;
- "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/config/tests/Makefile") CONFIG_FILES="$CONFIG_FILES src/config/tests/Makefile" ;;
+ "src/tests/config/Makefile") CONFIG_FILES="$CONFIG_FILES src/tests/config/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/dnsmasq-manager/tests/Makefile") CONFIG_FILES="$CONFIG_FILES src/dnsmasq-manager/tests/Makefile" ;;
@@ -25494,12 +26384,13 @@ do
"src/settings/plugins/ifcfg-rh/Makefile") CONFIG_FILES="$CONFIG_FILES src/settings/plugins/ifcfg-rh/Makefile" ;;
"src/settings/plugins/ifcfg-rh/tests/Makefile") CONFIG_FILES="$CONFIG_FILES src/settings/plugins/ifcfg-rh/tests/Makefile" ;;
"src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile") CONFIG_FILES="$CONFIG_FILES src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile" ;;
+ "src/settings/plugins/ibft/Makefile") CONFIG_FILES="$CONFIG_FILES src/settings/plugins/ibft/Makefile" ;;
+ "src/settings/plugins/ibft/tests/Makefile") CONFIG_FILES="$CONFIG_FILES src/settings/plugins/ibft/tests/Makefile" ;;
"src/settings/plugins/ifcfg-suse/Makefile") CONFIG_FILES="$CONFIG_FILES src/settings/plugins/ifcfg-suse/Makefile" ;;
"src/settings/plugins/keyfile/Makefile") CONFIG_FILES="$CONFIG_FILES src/settings/plugins/keyfile/Makefile" ;;
"src/settings/plugins/keyfile/tests/Makefile") CONFIG_FILES="$CONFIG_FILES src/settings/plugins/keyfile/tests/Makefile" ;;
"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/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" ;;
@@ -25507,13 +26398,20 @@ do
"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/team/Makefile") CONFIG_FILES="$CONFIG_FILES src/devices/team/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-core/nm-version.h") CONFIG_FILES="$CONFIG_FILES libnm-core/nm-version.h" ;;
+ "libnm-core/Makefile") CONFIG_FILES="$CONFIG_FILES libnm-core/Makefile" ;;
+ "libnm-core/tests/Makefile") CONFIG_FILES="$CONFIG_FILES libnm-core/tests/Makefile" ;;
+ "libnm/libnm.pc") CONFIG_FILES="$CONFIG_FILES libnm/libnm.pc" ;;
+ "libnm/Makefile") CONFIG_FILES="$CONFIG_FILES libnm/Makefile" ;;
+ "libnm/tests/Makefile") CONFIG_FILES="$CONFIG_FILES libnm/tests/Makefile" ;;
"libnm-util/libnm-util.pc") CONFIG_FILES="$CONFIG_FILES libnm-util/libnm-util.pc" ;;
+ "libnm-util/nm-version.h") CONFIG_FILES="$CONFIG_FILES libnm-util/nm-version.h" ;;
"libnm-util/Makefile") CONFIG_FILES="$CONFIG_FILES libnm-util/Makefile" ;;
"libnm-util/tests/Makefile") CONFIG_FILES="$CONFIG_FILES libnm-util/tests/Makefile" ;;
- "libnm-util/tests/certs/Makefile") CONFIG_FILES="$CONFIG_FILES libnm-util/tests/certs/Makefile" ;;
"libnm-glib/libnm-glib.pc") CONFIG_FILES="$CONFIG_FILES libnm-glib/libnm-glib.pc" ;;
"libnm-glib/libnm-glib-vpn.pc") CONFIG_FILES="$CONFIG_FILES libnm-glib/libnm-glib-vpn.pc" ;;
"libnm-glib/Makefile") CONFIG_FILES="$CONFIG_FILES libnm-glib/Makefile" ;;
@@ -25521,12 +26419,10 @@ do
"callouts/Makefile") CONFIG_FILES="$CONFIG_FILES callouts/Makefile" ;;
"callouts/tests/Makefile") CONFIG_FILES="$CONFIG_FILES callouts/tests/Makefile" ;;
"tools/Makefile") CONFIG_FILES="$CONFIG_FILES tools/Makefile" ;;
- "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" ;;
+ "clients/Makefile") CONFIG_FILES="$CONFIG_FILES clients/Makefile" ;;
+ "clients/cli/Makefile") CONFIG_FILES="$CONFIG_FILES clients/cli/Makefile" ;;
+ "clients/tui/Makefile") CONFIG_FILES="$CONFIG_FILES clients/tui/Makefile" ;;
+ "clients/tui/newt/Makefile") CONFIG_FILES="$CONFIG_FILES clients/tui/newt/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" ;;
@@ -25537,9 +26433,11 @@ do
"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.conf.xml") CONFIG_FILES="$CONFIG_FILES man/NetworkManager.conf.xml" ;;
"man/nm-system-settings.conf.5") CONFIG_FILES="$CONFIG_FILES man/nm-system-settings.conf.5" ;;
"man/nm-online.1") CONFIG_FILES="$CONFIG_FILES man/nm-online.1" ;;
"man/nmcli.1") CONFIG_FILES="$CONFIG_FILES man/nmcli.1" ;;
+ "man/nmtui.1") CONFIG_FILES="$CONFIG_FILES man/nmtui.1" ;;
"po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;;
"policy/Makefile") CONFIG_FILES="$CONFIG_FILES policy/Makefile" ;;
"policy/org.freedesktop.NetworkManager.policy.in") CONFIG_FILES="$CONFIG_FILES policy/org.freedesktop.NetworkManager.policy.in" ;;
@@ -25551,6 +26449,8 @@ do
"docs/libnm-glib/version.xml") CONFIG_FILES="$CONFIG_FILES docs/libnm-glib/version.xml" ;;
"docs/libnm-util/Makefile") CONFIG_FILES="$CONFIG_FILES docs/libnm-util/Makefile" ;;
"docs/libnm-util/version.xml") CONFIG_FILES="$CONFIG_FILES docs/libnm-util/version.xml" ;;
+ "docs/libnm/Makefile") CONFIG_FILES="$CONFIG_FILES docs/libnm/Makefile" ;;
+ "docs/libnm/version.xml") CONFIG_FILES="$CONFIG_FILES docs/libnm/version.xml" ;;
"NetworkManager.pc") CONFIG_FILES="$CONFIG_FILES NetworkManager.pc" ;;
"examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
"examples/shell/Makefile") CONFIG_FILES="$CONFIG_FILES examples/shell/Makefile" ;;
@@ -27384,13 +28284,14 @@ echo " session tracking: $with_session_tracking"
echo " suspend/resume: $with_suspend_resume"
if test "${enable_polkit}" = "yes"; then
if test "${enable_modify_system}" = "yes"; then
- echo " policykit: yes (permissive modify.system)"
+ echo " policykit: yes (permissive modify.system) (default=${enable_polkit})"
else
- echo " policykit: yes (restrictive modify.system)"
+ echo " policykit: yes (restrictive modify.system) (default=${enable_polkit})"
fi
else
echo " policykit: no"
fi
+echo " polkit agent: ${enable_polkit_agent}"
echo " selinux: $have_selinux"
echo
@@ -27404,7 +28305,8 @@ echo " libteamdctl: $enable_teamdctl"
echo " nmtui: $build_nmtui"
echo
-echo "Configuration plugins"
+echo "Configuration plugins (main.plugins=${config_plugins_default})"
+echo " ibft: ${enable_config_plugin_ibft}"
echo " ifcfg-rh: ${enable_ifcfg_rh}"
echo " ifcfg-suse: ${enable_ifcfg_suse}"
echo " ifupdown: ${enable_ifupdown}"
@@ -27426,4 +28328,5 @@ echo " documentation: $enable_gtk_doc"
echo " tests: $enable_tests"
echo " valgrind: $with_valgrind"
echo " code coverage: $enable_code_coverage"
+echo " LTO: $enable_lto"
echo
diff --git a/configure.ac b/configure.ac
index 94b07580e..b6bf38e8c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,12 +1,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], [10])
-m4_define([nm_nano_version], [0])
+m4_define([nm_major_version], [1])
+m4_define([nm_minor_version], [0])
+m4_define([nm_micro_version], [0])
m4_define([nm_version],
- [nm_major_version.nm_minor_version.nm_micro_version.nm_nano_version])
+ [nm_major_version.nm_minor_version.nm_micro_version])
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],
@@ -60,6 +59,7 @@ AC_SUBST(NM_MAJOR_VERSION)
AC_SUBST(NM_MINOR_VERSION)
AC_SUBST(NM_MICRO_VERSION)
AC_SUBST(NM_VERSION)
+AC_DEFINE_UNQUOTED(NM_GIT_SHA,"$NM_GIT_SHA",[git commit id of the original source code version])
dnl
dnl Checks for typedefs, structures, and compiler characteristics.
@@ -91,6 +91,7 @@ AC_SUBST(nmstatedir, "$localstatedir/lib/$PACKAGE", [NetworkManager persistent s
AC_SUBST(nmrundir, "$localstatedir/run/$PACKAGE", [NetworkManager runtime state directory])
# Alternative configuration plugins
+AC_ARG_ENABLE(config-plugin-ibft, AS_HELP_STRING([--enable-config-plugin-ibft], [enable ibft configuration plugin]))
AC_ARG_ENABLE(ifcfg-rh, AS_HELP_STRING([--enable-ifcfg-rh], [enable ifcfg-rh configuration plugin (Fedora/RHEL)]))
AC_ARG_ENABLE(ifcfg-suse, AS_HELP_STRING([--enable-ifcfg-suse], [enable ifcfg-suse configuration plugin (SUSE)]))
AC_ARG_ENABLE(ifupdown, AS_HELP_STRING([--enable-ifupdown], [enable ifupdown configuration plugin (Debian/Ubuntu)]))
@@ -107,12 +108,27 @@ AS_IF([test -z "$enable_ifcfg_rh"], enable_ifcfg_rh=no)
AS_IF([test -z "$enable_ifcfg_suse"], enable_ifcfg_suse=no)
AS_IF([test -z "$enable_ifupdown"], enable_ifupdown=no)
AS_IF([test -z "$enable_ifnet"], enable_ifnet=no)
+# Enable ibft by default
+AS_IF([test -z "$enable_config_plugin_ibft"], enable_config_plugin_ibft="yes")
# Create automake conditionals
+AM_CONDITIONAL(CONFIG_PLUGIN_IBFT, test "$enable_config_plugin_ibft" = "yes")
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")
+AC_ARG_WITH(config-plugins-default, AS_HELP_STRING([--with-config-plugins-default=PLUGINS], [Default configuration option for main.plugins setting, used as fallback if the configuration option is unset]), [config_plugins_default="$withval"], [config_plugins_default=""])
+if test -z "$config_plugins_default" -o "$config_plugins_default" = no; then
+ config_plugins_default=''
+ test "$enable_ifcfg_rh" = "yes" && config_plugins_default="$config_plugins_default,ifcfg-rh"
+ test "$enable_ifcfg_suse" = "yes" && config_plugins_default="$config_plugins_default,ifcfg-suse"
+ test "$enable_ifupdown" = "yes" && config_plugins_default="$config_plugins_default,ifupdown"
+ test "$enable_ifnet" = "yes" && config_plugins_default="$config_plugins_default,ifnet"
+ test "$enable_config_plugin_ibft" = "yes" && config_plugins_default="$config_plugins_default,ibft"
+ config_plugins_default="${config_plugins_default#,}"
+fi
+AC_DEFINE_UNQUOTED(CONFIG_PLUGINS_DEFAULT, "$config_plugins_default", [Default configuration option for main.plugins setting])
+
if test "$enable_ifcfg_rh" = "yes"; then
DISTRO_NETWORK_SERVICE=network.service
fi
@@ -284,14 +300,18 @@ if (test "${enable_qt}" = "yes"); then
fi
AM_CONDITIONAL(WITH_QT, test "${enable_qt}" = "yes")
-
-AC_ARG_WITH(udev-dir, AS_HELP_STRING([--with-udev-dir=DIR], [where the udev base directory is]))
-if test -n "$with_udev_dir" ; then
- UDEV_BASE_DIR="$with_udev_dir"
-else
- UDEV_BASE_DIR="/lib/udev"
+AC_ARG_WITH(udev-dir, AS_HELP_STRING([--with-udev-dir=DIR], [Absolute path of the udev base directory. Set to 'no' not to install the udev rules]), [], [with_udev_dir="yes"])
+if (test "$with_udev_dir" != 'no'); then
+ if (test "$with_udev_dir" != 'yes' && echo -n "$with_udev_dir" | grep -v -q '^/'); then
+ AC_MSG_ERROR([--with-udev-dir must be an absolute path or 'yes' or 'no'. Instead it is '$with_udev_dir'])
+ fi
+ if (test "$with_udev_dir" = 'yes'); then
+ with_udev_dir="/lib/udev"
+ fi
+ UDEV_DIR="$with_udev_dir"
+ AC_SUBST(UDEV_DIR)
fi
-AC_SUBST(UDEV_BASE_DIR)
+AM_CONDITIONAL(WITH_UDEV_DIR, test "$with_udev_dir" != 'no')
# systemd unit support
AC_ARG_WITH([systemdsystemunitdir], AS_HELP_STRING([--with-systemdsystemunitdir=DIR],
@@ -327,7 +347,8 @@ AS_IF([! (echo "$with_session_tracking" | grep -q -E "^(systemd|consolekit|no)$"
AM_CONDITIONAL(SESSION_TRACKING_CK, test "$with_session_tracking" = "consolekit")
AM_CONDITIONAL(SESSION_TRACKING_SYSTEMD, test "$with_session_tracking" = "systemd")
if test "$with_session_tracking" = "systemd"; then
- PKG_CHECK_MODULES(SYSTEMD_LOGIN, [libsystemd-login])
+ PKG_CHECK_MODULES(SYSTEMD_LOGIN, [libsystemd],,
+ [PKG_CHECK_MODULES(SYSTEMD_LOGIN, [libsystemd-login])])
AC_SUBST(SYSTEMD_LOGIN_CFLAGS)
AC_SUBST(SYSTEMD_LOGIN_LIBS)
fi
@@ -338,7 +359,8 @@ AC_MSG_RESULT($with_session_tracking)
AC_ARG_WITH(suspend-resume, AS_HELP_STRING([--with-suspend-resume=upower|systemd], [Build NetworkManager with specific suspend/resume support]))
if test "z$with_suspend_resume" = "z"; then
- PKG_CHECK_EXISTS([libsystemd-login >= 183], [have_systemd_inhibit=yes], [have_systemd_inhibit=no])
+ PKG_CHECK_EXISTS([libsystemd >= 209], [have_systemd_inhibit=yes],
+ [PKG_CHECK_EXISTS([libsystemd-login >= 183], [have_systemd_inhibit=yes], [have_systemd_inhibit=no])])
if test "z${have_systemd_inhibit}" = "zyes"; then
# Use systemd if it's new enough
with_suspend_resume="systemd"
@@ -351,7 +373,8 @@ fi
case $with_suspend_resume in
upower) ;;
systemd)
- PKG_CHECK_MODULES(SYSTEMD_INHIBIT, [libsystemd-login >= 183])
+ PKG_CHECK_MODULES(SYSTEMD_INHIBIT, [libsystemd >= 209],,
+ [PKG_CHECK_MODULES(SYSTEMD_INHIBIT, [libsystemd-login >= 183])])
;;
*)
AC_MSG_ERROR(--with-suspend-resume must be one of [upower, systemd])
@@ -382,6 +405,29 @@ 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)
+AC_CHECK_LIB([nl-route-3], [rtnl_link_inet6_get_addr_gen_mode],
+ ac_have_addr_gen_mode="1",
+ ac_have_addr_gen_mode="0")
+AC_DEFINE_UNQUOTED(HAVE_LIBNL_INET6_ADDR_GEN_MODE,
+ $ac_have_addr_gen_mode, [Define if libnl has rtnl_link_inet6_get_addr_gen_mode()])
+
+AC_MSG_CHECKING([Linux kernel IN6_ADDR_GEN_MODE enum])
+AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#ifndef __user
+ #define __user
+ #endif
+ #include <linux/if_link.h>]],
+ [[int a = IN6_ADDR_GEN_MODE_EUI64; a++;]])],
+ [ac_have_kernel_gen_mode=yes],
+ [ac_have_kernel_gen_mode=no])
+AC_MSG_RESULT($ac_have_kernel_gen_mode)
+if test "$ac_have_kernel_gen_mode" = yes; then
+ AC_DEFINE(HAVE_KERNEL_INET6_ADDR_GEN_MODE, 1, [Define if the kernel has IN6_ADDR_GEN_MODE_*])
+else
+ AC_DEFINE(HAVE_KERNEL_INET6_ADDR_GEN_MODE, 0, [Define if the kernel has IN6_ADDR_GEN_MODE_*])
+fi
+
# uuid library
PKG_CHECK_MODULES(UUID, uuid)
AC_SUBST(UUID_CFLAGS)
@@ -434,27 +480,47 @@ else
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}])
-if (test "${enable_polkit}" = "yes"); then
- if test x"$have_polkit" = x"no"; then
- AC_MSG_ERROR(PolicyKit development headers are required)
+# we usually compile with polkit support. --enable-polkit=yes|no only sets the
+# default configuration for main.auth-polkit. User can always enable/disable polkit
+# autorization via config. Only when specifying --enable-polkit=disabled, we do
+# not compile support. In this case, the user cannot enable polkit authorization via
+# configuration.
+AC_ARG_ENABLE(polkit, AS_HELP_STRING([--enable-polkit=yes|no|disabled], [set default value for auth-polkit configuration option. This value can be overwritten by NM configuration. 'disabled' compiles NM without any support]),
+ [enable_polkit=${enableval}], [enable_polkit=yes])
+if (test "${enable_polkit}" != "no" -a "${enable_polkit}" != "disabled"); then
+ enable_polkit=yes
+ AC_DEFINE(NM_CONFIG_DEFAULT_AUTH_POLKIT, TRUE, [The default value of the auth-polkit configuration option])
+ NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT='true'
+else
+ AC_DEFINE(NM_CONFIG_DEFAULT_AUTH_POLKIT, FALSE, [The default value of the auth-polkit configuration option])
+ NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT='false'
+fi
+if (test "${enable_polkit}" != "disabled"); then
+ AC_DEFINE(WITH_POLKIT, 1, [whether to compile polkit support])
+else
+ AC_DEFINE(WITH_POLKIT, 0, [whether to compile polkit support])
+fi
+AC_SUBST(NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT)
+
+PKG_CHECK_MODULES(POLKIT, [polkit-agent-1 >= 0.97], [have_pk_agent=yes],[have_pk_agent=no])
+AC_ARG_ENABLE(polkit-agent, AS_HELP_STRING([--enable-polkit-agent], [enable polkit agent for clients]),
+ [enable_polkit_agent=${enableval}], [enable_polkit_agent=${have_pk_agent}])
+if (test "${enable_polkit_agent}" = "yes"); then
+ if test x"$have_pk_agent" = x"no"; then
+ AC_MSG_ERROR(Polkit agent is required)
fi
+
AC_SUBST(POLKIT_CFLAGS)
AC_SUBST(POLKIT_LIBS)
- AC_DEFINE(WITH_POLKIT, 1, [Define if you have PolicyKit support])
+ AC_DEFINE(WITH_POLKIT_AGENT, 1, [Define if you have polkit agent])
else
- AC_DEFINE(WITH_POLKIT, 0, [Define if you have PolicyKit support])
+ AC_DEFINE(WITH_POLKIT_AGENT, 0, [Define if you have polkit agent])
fi
-AM_CONDITIONAL(WITH_POLKIT, test "${enable_polkit}" = "yes")
+AM_CONDITIONAL(WITH_POLKIT_AGENT, test "${enable_polkit_agent}" = "yes")
AC_ARG_ENABLE(modify-system,
AS_HELP_STRING([--enable-modify-system], [Allow users to modify system connections]))
if test "${enable_modify_system}" = "yes"; then
- if ! test "${enable_polkit}" = "yes"; then
- AC_MSG_ERROR([--enable-modify-system requires --enable-polkit])
- fi
NM_MODIFY_SYSTEM_POLICY="yes"
else
NM_MODIFY_SYSTEM_POLICY="auth_admin_keep"
@@ -586,6 +652,20 @@ else
fi
AM_CONDITIONAL(WITH_MODEM_MANAGER_1, test "${with_modem_manager_1}" = "yes")
+# Bluez5 DUN support
+PKG_CHECK_MODULES(BLUEZ5, [bluez >= 5], [have_bluez5=yes],[have_bluez5=no])
+AC_ARG_ENABLE(bluez5-dun, AS_HELP_STRING([--enable-bluez5-dun], [enable Bluez5 DUN support]),
+ [enable_bluez5_dun=${enableval}], [enable_bluez5_dun=${have_bluez5}])
+if (test "${enable_bluez5_dun}" = "yes"); then
+ if test x"$have_bluez5" = x"no"; then
+ AC_MSG_ERROR(Bluez 5.x development headers are required)
+ fi
+ AC_DEFINE(WITH_BLUEZ5_DUN, 1, [Define if you have Bluez 5 libraries])
+else
+ AC_DEFINE(WITH_BLUEZ5_DUN, 0, [Define if you have Bluez 5 libraries])
+fi
+AM_CONDITIONAL(WITH_BLUEZ5_DUN, test "${enable_bluez5_dun}" = "yes")
+
# DHCP client support
AC_ARG_WITH([dhclient], AS_HELP_STRING([--with-dhclient=yes|no|path], [Enable dhclient 4.x support]))
AC_ARG_WITH([dhcpcd], AS_HELP_STRING([--with-dhcpcd=yes|no|path], [Enable dhcpcd 4.x support]))
@@ -620,10 +700,16 @@ if test "$with_dhclient" = "no" -a "$with_dhcpcd" = "no"; then
fi
# Add substitutions
if test "$with_dhclient" != "no"; then
+ AC_DEFINE(WITH_DHCLIENT, TRUE, [Define if you have dhclient])
AC_SUBST(DHCLIENT_PATH, $with_dhclient)
+else
+ AC_DEFINE(WITH_DHCLIENT, FALSE, [Define if you have dhclient])
fi
if test "$with_dhcpcd" != "no"; then
+ AC_DEFINE(WITH_DHCPCD, TRUE, [Define if you have dhcpcd])
AC_SUBST(DHCPCD_PATH, $with_dhcpcd)
+else
+ AC_DEFINE(WITH_DHCPCD, FALSE, [Define if you have dhcpcd])
fi
# resolvconf and netconfig support
@@ -693,17 +779,23 @@ 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])
+AC_ARG_WITH(libsoup, AS_HELP_STRING([--with-libsoup=yes|no], [Link against libsoup]), [], [with_libsoup=${have_libsoup}])
+if test "$with_libsoup" != "no"; then
+ if test "$have_libsoup" != "yes"; then
+ AC_MSG_ERROR(libsoup library not found)
+ fi
+ with_libsoup='yes'
+ AC_DEFINE(WITH_LIBSOUP, 1, [Define if you have libsoup])
else
- AC_DEFINE(HAVE_LIBSOUP, 0, [Define if you have libsoup])
+ AC_DEFINE(WITH_LIBSOUP, 0, [Define if you have libsoup])
fi
+AM_CONDITIONAL(WITH_LIBSOUP, test "$with_libsoup" != "no")
AC_ARG_ENABLE(concheck, AS_HELP_STRING([--enable-concheck], [enable connectivity checking support]),
- [enable_concheck=${enableval}], [enable_concheck=${have_libsoup}])
+ [enable_concheck=${enableval}], [enable_concheck=${with_libsoup}])
if (test "${enable_concheck}" = "yes"); then
- if test x"$have_libsoup" = x"no"; then
- AC_MSG_ERROR(Connectivity checking requires libsoup development headers)
+ if test x"$with_libsoup" = x"no"; then
+ AC_MSG_ERROR(Connectivity checking requires libsoup)
fi
AC_SUBST(LIBSOUP_CFLAGS)
AC_SUBST(LIBSOUP_LIBS)
@@ -729,6 +821,13 @@ AM_CONDITIONAL(BUILD_NMTUI, test "$build_nmtui" = yes)
NM_COMPILER_WARNINGS
+AC_ARG_ENABLE(lto, AS_HELP_STRING([--enable-lto], [Enable Link Time Optimization for smaller size (default: no)]),
+ [enable_lto=yes], [enable_lto=no])
+if (test "${enable_lto}" = "yes"); then
+ CFLAGS="-flto $CFLAGS"
+fi
+
+
dnl -------------------------
dnl Vala bindings
dnl -------------------------
@@ -763,20 +862,63 @@ install_pregen_manpages=no
if test "$enable_gtk_doc" != "yes" \
-a -f man/NetworkManager.conf.5 \
-a -f man/nm-settings.5 \
+ -a -f man/nm-settings-keyfile.5 \
+ -a -f man/nm-settings-ifcfg-rh.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")
+# check if we can build setting property documentation
+if test -n "$INTROSPECTION_MAKEFILE" -a "$enable_gtk_doc" = "yes"; then
+ # If g-i is installed we know we have python, but we might not have pygobject
+ if python -c 'from gi.repository import GObject' >& /dev/null; then
+ have_pyobject=yes
+ fi
+
+ # gtk-doc depends on perl, but we can check for it anyway
+ AC_PATH_PROG(PERL, perl, no)
+ # check for needed perl modules (use YAML; YAML::XS is better, but may not be so widespread)
+ required_perl_modules="YAML"
+ for module in $required_perl_modules; do
+ AC_MSG_CHECKING([checking for perl module '$module'])
+ if ${PERL} -e 'use '$module 2>/dev/null ; then
+ AC_MSG_RESULT([Ok])
+ have_perl_modules=yes
+ else
+ AC_MSG_RESULT([Failed])
+ AC_MSG_ERROR([You must have Perl modules to build settings plugin docs: $required_perl_modules.])
+ fi
+ done
+
+ if test "$have_pyobject" = "yes" -a "$have_perl_modules" = "yes"; then
+ AC_DEFINE(BUILD_SETTING_DOCS, [1], [Define if you we can build nm-setting-docs.xml, nm-keyfile-docs.xml and nm-ifcfg-rh-docs.xml])
+ build_setting_docs=yes
+ fi
+fi
+
+# check for pre-built setting docs
+if test "$build_setting_docs" != "yes" \
+ -a -f man/nm-settings.xml \
+ -a -f man/nm-settings-keyfile.xml \
+ -a -f man/nm-settings-ifcfg-rh.xml \
+ -a -f docs/api/settings-spec.xml \
+ -a -f clients/cli/settings-docs.c; then
+ AC_DEFINE(HAVE_SETTING_DOCS, [1], [Define if you have pre-built settings docs])
+ have_setting_docs=yes
+fi
+
+AM_CONDITIONAL(BUILD_SETTING_DOCS, test "$build_setting_docs" = "yes")
+AM_CONDITIONAL(SETTING_DOCS_AVAILABLE, test "$build_setting_docs" = "yes" -o "$have_setting_docs" = "yes")
+
AC_CONFIG_FILES([
Makefile
include/Makefile
-include/nm-version.h
src/Makefile
src/tests/Makefile
-src/config/tests/Makefile
+src/tests/config/Makefile
src/dhcp-manager/Makefile
src/dhcp-manager/tests/Makefile
src/dnsmasq-manager/tests/Makefile
@@ -790,12 +932,13 @@ 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/ibft/Makefile
+src/settings/plugins/ibft/tests/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
@@ -803,13 +946,20 @@ src/rdisc/tests/Makefile
src/devices/adsl/Makefile
src/devices/wimax/Makefile
src/devices/bluetooth/Makefile
+src/devices/team/Makefile
src/devices/wifi/Makefile
src/devices/wifi/tests/Makefile
src/devices/wwan/Makefile
+libnm-core/nm-version.h
+libnm-core/Makefile
+libnm-core/tests/Makefile
+libnm/libnm.pc
+libnm/Makefile
+libnm/tests/Makefile
libnm-util/libnm-util.pc
+libnm-util/nm-version.h
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
@@ -817,12 +967,10 @@ 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
+clients/Makefile
+clients/cli/Makefile
+clients/tui/Makefile
+clients/tui/newt/Makefile
initscript/RedHat/NetworkManager
initscript/Debian/NetworkManager
initscript/Slackware/rc.networkmanager
@@ -833,9 +981,11 @@ initscript/linexa/networkmanager
introspection/Makefile
introspection/all.xml
man/Makefile
+man/NetworkManager.conf.xml
man/nm-system-settings.conf.5
man/nm-online.1
man/nmcli.1
+man/nmtui.1
po/Makefile.in
policy/Makefile
policy/org.freedesktop.NetworkManager.policy.in
@@ -847,6 +997,8 @@ docs/libnm-glib/Makefile
docs/libnm-glib/version.xml
docs/libnm-util/Makefile
docs/libnm-util/version.xml
+docs/libnm/Makefile
+docs/libnm/version.xml
NetworkManager.pc
examples/Makefile
examples/shell/Makefile
@@ -881,13 +1033,14 @@ echo " session tracking: $with_session_tracking"
echo " suspend/resume: $with_suspend_resume"
if test "${enable_polkit}" = "yes"; then
if test "${enable_modify_system}" = "yes"; then
- echo " policykit: yes (permissive modify.system)"
+ echo " policykit: yes (permissive modify.system) (default=${enable_polkit})"
else
- echo " policykit: yes (restrictive modify.system)"
+ echo " policykit: yes (restrictive modify.system) (default=${enable_polkit})"
fi
else
echo " policykit: no"
fi
+echo " polkit agent: ${enable_polkit_agent}"
echo " selinux: $have_selinux"
echo
@@ -901,7 +1054,8 @@ echo " libteamdctl: $enable_teamdctl"
echo " nmtui: $build_nmtui"
echo
-echo "Configuration plugins"
+echo "Configuration plugins (main.plugins=${config_plugins_default})"
+echo " ibft: ${enable_config_plugin_ibft}"
echo " ifcfg-rh: ${enable_ifcfg_rh}"
echo " ifcfg-suse: ${enable_ifcfg_suse}"
echo " ifupdown: ${enable_ifupdown}"
@@ -923,4 +1077,5 @@ echo " documentation: $enable_gtk_doc"
echo " tests: $enable_tests"
echo " valgrind: $with_valgrind"
echo " code coverage: $enable_code_coverage"
+echo " LTO: $enable_lto"
echo
diff --git a/data/Makefile.in b/data/Makefile.in
index 7ff338dc7..93df796ee 100644
--- a/data/Makefile.in
+++ b/data/Makefile.in
@@ -160,6 +160,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -283,6 +285,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -302,6 +305,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -328,7 +332,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
diff --git a/data/NetworkManager.service.in b/data/NetworkManager.service.in
index 84a9c959c..b2e61ffbc 100644
--- a/data/NetworkManager.service.in
+++ b/data/NetworkManager.service.in
@@ -7,6 +7,7 @@ Before=network.target @DISTRO_NETWORK_SERVICE@
Type=dbus
BusName=org.freedesktop.NetworkManager
ExecStart=@sbindir@/NetworkManager --no-daemon
+Restart=on-failure
# NM doesn't want systemd to kill its children for it
KillMode=process
diff --git a/docs/Makefile.am b/docs/Makefile.am
index fd2c82c83..5fdeff62b 100644
--- a/docs/Makefile.am
+++ b/docs/Makefile.am
@@ -1,2 +1,2 @@
-SUBDIRS = libnm-glib libnm-util api
+SUBDIRS = libnm-glib libnm-util libnm api
diff --git a/docs/Makefile.in b/docs/Makefile.in
index f976adda1..81c7dc4eb 100644
--- a/docs/Makefile.in
+++ b/docs/Makefile.in
@@ -189,6 +189,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -312,6 +314,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -331,6 +334,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -357,7 +361,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -436,7 +440,7 @@ with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
with_valgrind = @with_valgrind@
-SUBDIRS = libnm-glib libnm-util api
+SUBDIRS = libnm-glib libnm-util libnm api
all: all-recursive
.SUFFIXES:
diff --git a/docs/api/Makefile.am b/docs/api/Makefile.am
index 3ca460333..5283f73f7 100644
--- a/docs/api/Makefile.am
+++ b/docs/api/Makefile.am
@@ -11,7 +11,19 @@ OTHER_FILES= \
$(top_srcdir)/tools/doc-generator.xsl \
$(top_srcdir)/introspection/generic-types.xml
-GENERATED_FILES = spec.html settings-spec.xml
+GENERATED_FILES = spec.html
+
+if SETTING_DOCS_AVAILABLE
+
+settings-spec.xml: settings-spec.xsl $(top_builddir)/libnm/nm-setting-docs.xml
+ $(AM_V_GEN) xsltproc --output $@ $^
+
+# Top-level SGML file includes (depends on) settings-spec.xml
+$(DOC_MAIN_SGML_FILE): settings-spec.xml
+
+GENERATED_FILES += settings-spec.xml
+
+endif
if ENABLE_GTK_DOC
@@ -20,17 +32,10 @@ spec.html: $(XMLS) $(OTHER_FILES) html-build.stamp
mkdir -p $(builddir)/html/
cp spec.html $(builddir)/html/
-settings-spec.xml: $(top_builddir)/tools/generate-settings-spec $(top_builddir)/libnm-util/libnm-util.la
- rm -f $(builddir)/settings-spec.xml
- $(top_builddir)/tools/generate-settings-spec book $(builddir)/settings-spec.xml
-
all: $(GENERATED_FILES)
endif
-# Top-level SGML file includes (depends on) settings-spec.xml
-$(DOC_MAIN_SGML_FILE): settings-spec.xml
-
####################################
# The name of the module.
@@ -47,6 +52,9 @@ MKDB_OPTIONS=--sgml-mode --output-format=xml
# Extra options to supply to gtkdoc-mktmpl
MKTMPL_OPTIONS=
+# Extra options to supply to gtkdoc-mkhtml
+MKHTML_OPTIONS=--path="$(abs_srcdir)"
+
# Non-autogenerated SGML files to be included in $(DOC_MAIN_SGML_FILE)
content_files = \
version.xml \
@@ -57,9 +65,15 @@ include $(top_srcdir)/gtk-doc.make
####################################
-EXTRA_DIST += version.xml.in $(GENERATED_FILES)
+EXTRA_DIST += version.xml.in settings-spec.xsl $(GENERATED_FILES)
CLEANFILES += html/* tmpl/* xml/* \
NetworkManager-sections.txt \
- NetworkManager-overrides.txt \
- $(GENERATED_FILES)
+ NetworkManager-overrides.txt
+if BUILD_SETTING_DOCS
+CLEANFILES += settings-spec.xml
+endif
+
+if ENABLE_GTK_DOC
+CLEANFILES += spec.html
+endif
diff --git a/docs/api/Makefile.in b/docs/api/Makefile.in
index ed0643e3a..fb97c8332 100644
--- a/docs/api/Makefile.in
+++ b/docs/api/Makefile.in
@@ -83,8 +83,11 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
+@SETTING_DOCS_AVAILABLE_TRUE@am__append_1 = settings-spec.xml
DIST_COMMON = $(top_srcdir)/gtk-doc.make $(srcdir)/Makefile.in \
$(srcdir)/Makefile.am $(srcdir)/version.xml.in
+@BUILD_SETTING_DOCS_TRUE@am__append_2 = settings-spec.xml
+@ENABLE_GTK_DOC_TRUE@am__append_3 = spec.html
subdir = docs/api
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
@@ -136,6 +139,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -259,6 +264,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -278,6 +284,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -304,7 +311,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -394,7 +401,7 @@ OTHER_FILES = \
$(top_srcdir)/tools/doc-generator.xsl \
$(top_srcdir)/introspection/generic-types.xml
-GENERATED_FILES = spec.html settings-spec.xml
+GENERATED_FILES = spec.html $(am__append_1)
####################################
@@ -411,6 +418,9 @@ MKDB_OPTIONS = --sgml-mode --output-format=xml
# Extra options to supply to gtkdoc-mktmpl
MKTMPL_OPTIONS =
+# Extra options to supply to gtkdoc-mkhtml
+MKHTML_OPTIONS = --path="$(abs_srcdir)"
+
# Non-autogenerated SGML files to be included in $(DOC_MAIN_SGML_FILE)
content_files = \
version.xml \
@@ -440,7 +450,7 @@ SETUP_FILES = \
####################################
EXTRA_DIST = $(HTML_IMAGES) $(SETUP_FILES) version.xml.in \
- $(GENERATED_FILES)
+ settings-spec.xsl $(GENERATED_FILES)
DOC_STAMPS = setup-build.stamp scan-build.stamp tmpl-build.stamp sgml-build.stamp \
html-build.stamp pdf-build.stamp \
tmpl.stamp sgml.stamp html.stamp pdf.stamp
@@ -459,7 +469,7 @@ REPORT_FILES = \
CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS) html/* \
tmpl/* xml/* NetworkManager-sections.txt \
- NetworkManager-overrides.txt $(GENERATED_FILES)
+ NetworkManager-overrides.txt $(am__append_2) $(am__append_3)
@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 =
@@ -701,20 +711,19 @@ uninstall-am: uninstall-local
uninstall-am uninstall-local
+@SETTING_DOCS_AVAILABLE_TRUE@settings-spec.xml: settings-spec.xsl $(top_builddir)/libnm/nm-setting-docs.xml
+@SETTING_DOCS_AVAILABLE_TRUE@ $(AM_V_GEN) xsltproc --output $@ $^
+
+# Top-level SGML file includes (depends on) settings-spec.xml
+@SETTING_DOCS_AVAILABLE_TRUE@$(DOC_MAIN_SGML_FILE): settings-spec.xml
+
@ENABLE_GTK_DOC_TRUE@spec.html: $(XMLS) $(OTHER_FILES) html-build.stamp
@ENABLE_GTK_DOC_TRUE@ $(XSLTPROC) --path "$(top_builddir)/introspection:$(top_srcdir)/introspection" $(top_srcdir)/tools/doc-generator.xsl $(top_builddir)/introspection/all.xml > spec.html
@ENABLE_GTK_DOC_TRUE@ mkdir -p $(builddir)/html/
@ENABLE_GTK_DOC_TRUE@ cp spec.html $(builddir)/html/
-@ENABLE_GTK_DOC_TRUE@settings-spec.xml: $(top_builddir)/tools/generate-settings-spec $(top_builddir)/libnm-util/libnm-util.la
-@ENABLE_GTK_DOC_TRUE@ rm -f $(builddir)/settings-spec.xml
-@ENABLE_GTK_DOC_TRUE@ $(top_builddir)/tools/generate-settings-spec book $(builddir)/settings-spec.xml
-
@ENABLE_GTK_DOC_TRUE@all: $(GENERATED_FILES)
-# Top-level SGML file includes (depends on) settings-spec.xml
-$(DOC_MAIN_SGML_FILE): settings-spec.xml
-
@ENABLE_GTK_DOC_TRUE@all-local: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
@ENABLE_GTK_DOC_FALSE@all-local:
diff --git a/docs/api/html/index.html b/docs/api/html/index.html
index 08c517de8..be7c56f51 100644
--- a/docs/api/html/index.html
+++ b/docs/api/html/index.html
@@ -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.10.0
+<div><p class="releaseinfo">Version 1.0.0
</p></div>
<div><p class="copyright">Copyright © 2012 The NetworkManager Authors</p></div>
<div><div class="legalnotice">
diff --git a/docs/api/html/ref-migrating.html b/docs/api/html/ref-migrating.html
index 00545851b..e5730a673 100644
--- a/docs/api/html/ref-migrating.html
+++ b/docs/api/html/ref-migrating.html
@@ -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 26. </b></p>
+<a name="id-1.4.3.7.3.2"></a><p class="title"><b>Table 27. </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 27. </b></p>
+<a name="id-1.4.3.13.2.1"></a><p class="title"><b>Table 28. </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 28. </b></p>
+<a name="id-1.4.3.14.2.2"></a><p class="title"><b>Table 29. </b></p>
<div class="table-contents"><table border="1">
<colgroup>
<col>
diff --git a/docs/api/html/ref-settings.html b/docs/api/html/ref-settings.html
index dbaf10d24..d8fa0906b 100644
--- a/docs/api/html/ref-settings.html
+++ b/docs/api/html/ref-settings.html
@@ -36,8 +36,6 @@
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="id-1.3.3"></a>Configuration Settings</h2></div></div></div>
-<p>
-</p>
<div class="table">
<a name="id-1.3.3.2.1"></a><p class="title"><b>Table 1. 802-1x setting</b></p>
<div class="table-contents"><table summary="802-1x setting" border="1">
@@ -55,16 +53,40 @@
</tr></thead>
<tbody>
<tr>
-<td><pre class="screen">name</pre></td>
+<td><pre class="screen">altsubject-matches</pre></td>
+<td><pre class="screen">array of string</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>
+<td><pre class="screen">anonymous-identity</pre></td>
<td><pre class="screen">string</pre></td>
-<td><pre class="screen">802-1x</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>
+<td><pre class="screen"></pre></td>
+<td>Anonymous identity string for EAP authentication methods. Used as the unencrypted identity with EAP types that support different tunneled identity like EAP-TTLS.</td>
+</tr>
+<tr>
+<td><pre class="screen">ca-cert</pre></td>
+<td><pre class="screen">byte array</pre></td>
+<td><pre class="screen"></pre></td>
+<td>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 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.</td>
+</tr>
+<tr>
+<td><pre class="screen">ca-path</pre></td>
+<td><pre class="screen">string</pre></td>
+<td><pre class="screen"></pre></td>
+<td>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.</td>
+</tr>
+<tr>
+<td><pre class="screen">client-cert</pre></td>
+<td><pre class="screen">byte array</pre></td>
+<td><pre class="screen"></pre></td>
+<td>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 NUL byte.</td>
</tr>
<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', 'pwd', 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>
@@ -73,10 +95,10 @@
<td>Identity string for EAP authentication methods. Often the user's user or login name.</td>
</tr>
<tr>
-<td><pre class="screen">anonymous-identity</pre></td>
+<td><pre class="screen">name</pre></td>
<td><pre class="screen">string</pre></td>
-<td><pre class="screen"></pre></td>
-<td>Anonymous identity string for EAP authentication methods. Used as the unencrypted identity with EAP types that support different tunneled identity like EAP-TTLS.</td>
+<td><pre class="screen">802-1x</pre></td>
+<td>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".</td>
</tr>
<tr>
<td><pre class="screen">pac-file</pre></td>
@@ -85,180 +107,155 @@
<td>UTF-8 encoded file path containing PAC for EAP-FAST.</td>
</tr>
<tr>
-<td><pre class="screen">ca-cert</pre></td>
-<td><pre class="screen">byte array</pre></td>
-<td><pre class="screen">[]</pre></td>
-<td>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.</td>
-</tr>
-<tr>
-<td><pre class="screen">ca-path</pre></td>
+<td><pre class="screen">password</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>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.</td>
+<td>UTF-8 encoded password used for EAP authentication methods. If both the "password" property and the "password-raw" property are specified, "password" is preferred.</td>
</tr>
<tr>
-<td><pre class="screen">subject-match</pre></td>
-<td><pre class="screen">string</pre></td>
+<td><pre class="screen">password-flags</pre></td>
+<td><pre class="screen">NMSettingSecretFlags (uint32)</pre></td>
<td><pre class="screen"></pre></td>
-<td>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.</td>
+<td>Flags indicating how to handle the "password" property.</td>
</tr>
<tr>
-<td><pre class="screen">altsubject-matches</pre></td>
-<td><pre class="screen">array of string</pre></td>
+<td><pre class="screen">password-raw</pre></td>
+<td><pre class="screen">byte array</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>
+<td>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 "password" property and the "password-raw" property are specified, "password" is preferred.</td>
</tr>
<tr>
-<td><pre class="screen">client-cert</pre></td>
-<td><pre class="screen">byte array</pre></td>
-<td><pre class="screen">[]</pre></td>
-<td>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.</td>
+<td><pre class="screen">password-raw-flags</pre></td>
+<td><pre class="screen">NMSettingSecretFlags (uint32)</pre></td>
+<td><pre class="screen"></pre></td>
+<td>Flags indicating how to handle the "password-raw" property.</td>
</tr>
<tr>
-<td><pre class="screen">phase1-peapver</pre></td>
+<td><pre class="screen">phase1-fast-provisioning</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>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.</td>
+<td>Enables or disables in-line provisioning of EAP-FAST credentials when FAST is specified as the EAP method in the "eap" 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.</td>
</tr>
<tr>
<td><pre class="screen">phase1-peaplabel</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>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.</td>
+<td>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.</td>
</tr>
<tr>
-<td><pre class="screen">phase1-fast-provisioning</pre></td>
+<td><pre class="screen">phase1-peapver</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>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.</td>
+<td>Forces which PEAP version is used when PEAP is set as the EAP method in the "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.</td>
+</tr>
+<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>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>
<td><pre class="screen">phase2-auth</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>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.</td>
+<td>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 "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.</td>
</tr>
<tr>
<td><pre class="screen">phase2-autheap</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>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.</td>
+<td>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.</td>
</tr>
<tr>
<td><pre class="screen">phase2-ca-cert</pre></td>
<td><pre class="screen">byte array</pre></td>
-<td><pre class="screen">[]</pre></td>
-<td>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.</td>
+<td><pre class="screen"></pre></td>
+<td>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 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.</td>
</tr>
<tr>
<td><pre class="screen">phase2-ca-path</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>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.</td>
+<td>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.</td>
</tr>
<tr>
-<td><pre class="screen">phase2-subject-match</pre></td>
-<td><pre class="screen">string</pre></td>
+<td><pre class="screen">phase2-client-cert</pre></td>
+<td><pre class="screen">byte array</pre></td>
<td><pre class="screen"></pre></td>
-<td>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.</td>
+<td>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 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.</td>
</tr>
<tr>
-<td><pre class="screen">phase2-altsubject-matches</pre></td>
-<td><pre class="screen">array of string</pre></td>
+<td><pre class="screen">phase2-private-key</pre></td>
+<td><pre class="screen">byte array</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>
+<td>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 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 "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 "phase2-private-key-password" property must be set to the password used to decode the PKCS#12 private key and certificate.</td>
</tr>
<tr>
-<td><pre class="screen">phase2-client-cert</pre></td>
-<td><pre class="screen">byte array</pre></td>
-<td><pre class="screen">[]</pre></td>
-<td>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.</td>
+<td><pre class="screen">phase2-private-key-password</pre></td>
+<td><pre class="screen">string</pre></td>
+<td><pre class="screen"></pre></td>
+<td>The password used to decrypt the "phase 2" private key specified in the "phase2-private-key" property when the private key either uses the path scheme, or is a PKCS#12 format key.</td>
</tr>
<tr>
-<td><pre class="screen">password</pre></td>
-<td><pre class="screen">string</pre></td>
+<td><pre class="screen">phase2-private-key-password-flags</pre></td>
+<td><pre class="screen">NMSettingSecretFlags (uint32)</pre></td>
<td><pre class="screen"></pre></td>
-<td>UTF-8 encoded password used for EAP authentication methods.</td>
+<td>Flags indicating how to handle the "phase2-private-key-password" property.</td>
</tr>
<tr>
-<td><pre class="screen">password-flags</pre></td>
-<td><pre class="screen">uint32</pre></td>
-<td><pre class="screen">0</pre></td>
-<td>Flags indicating how to handle the 802.1x password. (see <a class="xref" href="secrets-flags.html" title="Secret flag types">the section called “Secret flag typesâ€</a> for flag values)</td>
+<td><pre class="screen">phase2-subject-match</pre></td>
+<td><pre class="screen">string</pre></td>
+<td><pre class="screen"></pre></td>
+<td>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.</td>
</tr>
<tr>
-<td><pre class="screen">password-raw</pre></td>
-<td><pre class="screen">byte array</pre></td>
-<td><pre class="screen">[]</pre></td>
-<td>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.</td>
+<td><pre class="screen">pin</pre></td>
+<td><pre class="screen">string</pre></td>
+<td><pre class="screen"></pre></td>
+<td>PIN used for EAP authentication methods.</td>
</tr>
<tr>
-<td><pre class="screen">password-raw-flags</pre></td>
-<td><pre class="screen">uint32</pre></td>
-<td><pre class="screen">0</pre></td>
-<td>Flags indicating how to handle the 802.1x password byte array. (see <a class="xref" href="secrets-flags.html" title="Secret flag types">the section called “Secret flag typesâ€</a> for flag values)</td>
+<td><pre class="screen">pin-flags</pre></td>
+<td><pre class="screen">NMSettingSecretFlags (uint32)</pre></td>
+<td><pre class="screen"></pre></td>
+<td>Flags indicating how to handle the "pin" property.</td>
</tr>
<tr>
<td><pre class="screen">private-key</pre></td>
<td><pre class="screen">byte array</pre></td>
-<td><pre class="screen">[]</pre></td>
-<td>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.</td>
+<td><pre class="screen"></pre></td>
+<td>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 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 "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. WARNING: "private-key" 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.</td>
</tr>
<tr>
<td><pre class="screen">private-key-password</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>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.</td>
+<td>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.</td>
</tr>
<tr>
<td><pre class="screen">private-key-password-flags</pre></td>
-<td><pre class="screen">uint32</pre></td>
-<td><pre class="screen">0</pre></td>
-<td>Flags indicating how to handle the 802.1x private key password. (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">phase2-private-key</pre></td>
-<td><pre class="screen">byte array</pre></td>
-<td><pre class="screen">[]</pre></td>
-<td>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.</td>
-</tr>
-<tr>
-<td><pre class="screen">phase2-private-key-password</pre></td>
-<td><pre class="screen">string</pre></td>
+<td><pre class="screen">NMSettingSecretFlags (uint32)</pre></td>
<td><pre class="screen"></pre></td>
-<td>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.</td>
-</tr>
-<tr>
-<td><pre class="screen">phase2-private-key-password-flags</pre></td>
-<td><pre class="screen">uint32</pre></td>
-<td><pre class="screen">0</pre></td>
-<td>Flags indicating how to handle the 802.1x phase2 private key password. (see <a class="xref" href="secrets-flags.html" title="Secret flag types">the section called “Secret flag typesâ€</a> for flag values)</td>
+<td>Flags indicating how to handle the "private-key-password" property.</td>
</tr>
<tr>
-<td><pre class="screen">pin</pre></td>
+<td><pre class="screen">subject-match</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>PIN used for EAP authentication methods.</td>
-</tr>
-<tr>
-<td><pre class="screen">pin-flags</pre></td>
-<td><pre class="screen">uint32</pre></td>
-<td><pre class="screen">0</pre></td>
-<td>Flags indicating how to handle the 802.1x PIN. (see <a class="xref" href="secrets-flags.html" title="Secret flag types">the section called “Secret flag typesâ€</a> for flag values)</td>
+<td>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.</td>
</tr>
<tr>
<td><pre class="screen">system-ca-certs</pre></td>
<td><pre class="screen">boolean</pre></td>
<td><pre class="screen">FALSE</pre></td>
-<td>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.</td>
+<td>When TRUE, overrides the "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.</td>
</tr>
</tbody>
</table></div>
</div>
-<p><br class="table-break">
-</p>
+<p><br class="table-break"></p>
<div class="table">
-<a name="id-1.3.3.2.2"></a><p class="title"><b>Table 2. adsl setting</b></p>
+<a name="id-1.3.3.3.1"></a><p class="title"><b>Table 2. adsl setting</b></p>
<div class="table-contents"><table summary="adsl setting" border="1">
<colgroup>
<col>
@@ -274,60 +271,59 @@
</tr></thead>
<tbody>
<tr>
-<td><pre class="screen">name</pre></td>
+<td><pre class="screen">encapsulation</pre></td>
<td><pre class="screen">string</pre></td>
-<td><pre class="screen">adsl</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>
+<td><pre class="screen"></pre></td>
+<td>Encapsulation of ADSL connection. Can be "vcmux" or "llc".</td>
</tr>
<tr>
-<td><pre class="screen">username</pre></td>
+<td><pre class="screen">name</pre></td>
<td><pre class="screen">string</pre></td>
-<td><pre class="screen"></pre></td>
-<td>Username used to authenticate with the pppoa service.</td>
+<td><pre class="screen">adsl</pre></td>
+<td>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".</td>
</tr>
<tr>
<td><pre class="screen">password</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>Password used to authenticate with the pppoa service.</td>
+<td>Password used to authenticate with the ADSL service.</td>
</tr>
<tr>
<td><pre class="screen">password-flags</pre></td>
-<td><pre class="screen">uint32</pre></td>
-<td><pre class="screen">0</pre></td>
-<td>Flags indicating how to handle the ADSL password. (see <a class="xref" href="secrets-flags.html" title="Secret flag types">the section called “Secret flag typesâ€</a> for flag values)</td>
+<td><pre class="screen">NMSettingSecretFlags (uint32)</pre></td>
+<td><pre class="screen"></pre></td>
+<td>Flags indicating how to handle the "password" property.</td>
</tr>
<tr>
<td><pre class="screen">protocol</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>ADSL connection protocol.</td>
+<td>ADSL connection protocol. Can be "pppoa", "pppoe" or "ipoatm".</td>
</tr>
<tr>
-<td><pre class="screen">encapsulation</pre></td>
+<td><pre class="screen">username</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>Encapsulation of ADSL connection</td>
+<td>Username used to authenticate with the ADSL service.</td>
</tr>
<tr>
-<td><pre class="screen">vpi</pre></td>
+<td><pre class="screen">vci</pre></td>
<td><pre class="screen">uint32</pre></td>
<td><pre class="screen">0</pre></td>
-<td>VPI of ADSL connection</td>
+<td>VCI of ADSL connection</td>
</tr>
<tr>
-<td><pre class="screen">vci</pre></td>
+<td><pre class="screen">vpi</pre></td>
<td><pre class="screen">uint32</pre></td>
<td><pre class="screen">0</pre></td>
-<td>VCI of ADSL connection</td>
+<td>VPI of ADSL connection</td>
</tr>
</tbody>
</table></div>
</div>
-<p><br class="table-break">
-</p>
+<p><br class="table-break"></p>
<div class="table">
-<a name="id-1.3.3.2.3"></a><p class="title"><b>Table 3. bluetooth setting</b></p>
+<a name="id-1.3.3.4.1"></a><p class="title"><b>Table 3. bluetooth setting</b></p>
<div class="table-contents"><table summary="bluetooth setting" border="1">
<colgroup>
<col>
@@ -343,30 +339,29 @@
</tr></thead>
<tbody>
<tr>
+<td><pre class="screen">bdaddr</pre></td>
+<td><pre class="screen">byte array</pre></td>
+<td><pre class="screen"></pre></td>
+<td>The Bluetooth address of the device.</td>
+</tr>
+<tr>
<td><pre class="screen">name</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen">bluetooth</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">bdaddr</pre></td>
-<td><pre class="screen">byte array</pre></td>
-<td><pre class="screen">[]</pre></td>
-<td>The Bluetooth address of the device</td>
+<td>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".</td>
</tr>
<tr>
<td><pre class="screen">type</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>Either 'dun' for Dial-Up Networking connections or 'panu' for Personal Area Networking connections.</td>
+<td>Either "dun" for Dial-Up Networking connections or "panu" for Personal Area Networking connections to devices supporting the NAP profile.</td>
</tr>
</tbody>
</table></div>
</div>
-<p><br class="table-break">
-</p>
+<p><br class="table-break"></p>
<div class="table">
-<a name="id-1.3.3.2.4"></a><p class="title"><b>Table 4. bond setting</b></p>
+<a name="id-1.3.3.5.1"></a><p class="title"><b>Table 4. bond setting</b></p>
<div class="table-contents"><table summary="bond setting" border="1">
<colgroup>
<col>
@@ -382,30 +377,29 @@
</tr></thead>
<tbody>
<tr>
-<td><pre class="screen">name</pre></td>
+<td><pre class="screen">interface-name</pre></td>
<td><pre class="screen">string</pre></td>
-<td><pre class="screen">bond</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>
+<td><pre class="screen"></pre></td>
+<td>Deprecated in favor of connection.interface-name, but can be used for backward-compatibility with older daemons, to set the bond's interface name.</td>
</tr>
<tr>
-<td><pre class="screen">interface-name</pre></td>
+<td><pre class="screen">name</pre></td>
<td><pre class="screen">string</pre></td>
-<td><pre class="screen"></pre></td>
-<td>The name of the virtual in-kernel bonding network interface</td>
+<td><pre class="screen">bond</pre></td>
+<td>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".</td>
</tr>
<tr>
<td><pre class="screen">options</pre></td>
-<td><pre class="screen">dict of (string::string)</pre></td>
+<td><pre class="screen">dict of string to string</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>
+<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>
</table></div>
</div>
-<p><br class="table-break">
-</p>
+<p><br class="table-break"></p>
<div class="table">
-<a name="id-1.3.3.2.5"></a><p class="title"><b>Table 5. bridge setting</b></p>
+<a name="id-1.3.3.6.1"></a><p class="title"><b>Table 5. bridge setting</b></p>
<div class="table-contents"><table summary="bridge setting" border="1">
<colgroup>
<col>
@@ -421,34 +415,10 @@
</tr></thead>
<tbody>
<tr>
-<td><pre class="screen">name</pre></td>
-<td><pre class="screen">string</pre></td>
-<td><pre class="screen">bridge</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 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>
-<td>Controls whether Spanning Tree Protocol (STP) is enabled for this bridge.</td>
-</tr>
-<tr>
-<td><pre class="screen">priority</pre></td>
+<td><pre class="screen">ageing-time</pre></td>
<td><pre class="screen">uint32</pre></td>
-<td><pre class="screen">32768</pre></td>
-<td>Sets the Spanning Tree Protocol (STP) priority for this bridge. Lower values are 'better'; the lowest priority bridge will be elected the root bridge.</td>
+<td><pre class="screen">300</pre></td>
+<td>The Ethernet MAC address aging time, in seconds.</td>
</tr>
<tr>
<td><pre class="screen">forward-delay</pre></td>
@@ -463,24 +433,47 @@
<td>The Spanning Tree Protocol (STP) hello time, in seconds.</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>Deprecated in favor of connection.interface-name, but can be used for backward-compatibility with older daemons, to set the bridge's interface name.</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>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.</td>
+</tr>
+<tr>
<td><pre class="screen">max-age</pre></td>
<td><pre class="screen">uint32</pre></td>
<td><pre class="screen">20</pre></td>
<td>The Spanning Tree Protocol (STP) maximum message age, in seconds.</td>
</tr>
<tr>
-<td><pre class="screen">ageing-time</pre></td>
+<td><pre class="screen">name</pre></td>
+<td><pre class="screen">string</pre></td>
+<td><pre class="screen">bridge</pre></td>
+<td>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".</td>
+</tr>
+<tr>
+<td><pre class="screen">priority</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><pre class="screen">32768</pre></td>
+<td>Sets the Spanning Tree Protocol (STP) priority for this bridge. Lower values are "better"; the lowest priority bridge will be elected the root 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>
+<td>Controls whether Spanning Tree Protocol (STP) is enabled for this bridge.</td>
</tr>
</tbody>
</table></div>
</div>
-<p><br class="table-break">
-</p>
+<p><br class="table-break"></p>
<div class="table">
-<a name="id-1.3.3.2.6"></a><p class="title"><b>Table 6. bridge-port setting</b></p>
+<a name="id-1.3.3.7.1"></a><p class="title"><b>Table 6. bridge-port setting</b></p>
<div class="table-contents"><table summary="bridge-port setting" border="1">
<colgroup>
<col>
@@ -496,16 +489,16 @@
</tr></thead>
<tbody>
<tr>
+<td><pre class="screen">hairpin-mode</pre></td>
+<td><pre class="screen">boolean</pre></td>
+<td><pre class="screen">FALSE</pre></td>
+<td>Enables or disabled "hairpin mode" for the port, which allows frames to be sent back out through the port the frame was received on.</td>
+</tr>
+<tr>
<td><pre class="screen">name</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen">bridge-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">priority</pre></td>
-<td><pre class="screen">uint32</pre></td>
-<td><pre class="screen">32</pre></td>
-<td>The Spanning Tree Protocol (STP) priority of this bridge port</td>
+<td>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".</td>
</tr>
<tr>
<td><pre class="screen">path-cost</pre></td>
@@ -514,18 +507,17 @@
<td>The Spanning Tree Protocol (STP) port cost for destinations via this port.</td>
</tr>
<tr>
-<td><pre class="screen">hairpin-mode</pre></td>
-<td><pre class="screen">boolean</pre></td>
-<td><pre class="screen">FALSE</pre></td>
-<td>Enables or disabled 'hairpin mode' for the port, which allows frames to be sent back out through the port the frame was received on.</td>
+<td><pre class="screen">priority</pre></td>
+<td><pre class="screen">uint32</pre></td>
+<td><pre class="screen">32</pre></td>
+<td>The Spanning Tree Protocol (STP) priority of this bridge port.</td>
</tr>
</tbody>
</table></div>
</div>
-<p><br class="table-break">
-</p>
+<p><br class="table-break"></p>
<div class="table">
-<a name="id-1.3.3.2.7"></a><p class="title"><b>Table 7. cdma setting</b></p>
+<a name="id-1.3.3.8.1"></a><p class="title"><b>Table 7. cdma setting</b></p>
<div class="table-contents"><table summary="cdma setting" border="1">
<colgroup>
<col>
@@ -544,39 +536,38 @@
<td><pre class="screen">name</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen">cdma</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>
+<td>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".</td>
</tr>
<tr>
<td><pre class="screen">number</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>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.</td>
+<td>The number to dial to establish the connection to the CDMA-based mobile broadband network, if any. If not specified, the default number (#777) is used when required.</td>
</tr>
<tr>
-<td><pre class="screen">username</pre></td>
+<td><pre class="screen">password</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>Username used to authenticate with the network, if required. Note that many providers do not require a username or accept any username.</td>
+<td>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.</td>
</tr>
<tr>
-<td><pre class="screen">password</pre></td>
-<td><pre class="screen">string</pre></td>
+<td><pre class="screen">password-flags</pre></td>
+<td><pre class="screen">NMSettingSecretFlags (uint32)</pre></td>
<td><pre class="screen"></pre></td>
-<td>Password used to authenticate with the network, if required. Note that many providers do not require a password or accept any password.</td>
+<td>Flags indicating how to handle the "password" property.</td>
</tr>
<tr>
-<td><pre class="screen">password-flags</pre></td>
-<td><pre class="screen">uint32</pre></td>
-<td><pre class="screen">0</pre></td>
-<td>Flags indicating how to handle the CDMA password. (see <a class="xref" href="secrets-flags.html" title="Secret flag types">the section called “Secret flag typesâ€</a> for flag values)</td>
+<td><pre class="screen">username</pre></td>
+<td><pre class="screen">string</pre></td>
+<td><pre class="screen"></pre></td>
+<td>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.</td>
</tr>
</tbody>
</table></div>
</div>
-<p><br class="table-break">
-</p>
+<p><br class="table-break"></p>
<div class="table">
-<a name="id-1.3.3.2.8"></a><p class="title"><b>Table 8. connection setting</b></p>
+<a name="id-1.3.3.9.1"></a><p class="title"><b>Table 8. connection setting</b></p>
<div class="table-contents"><table summary="connection setting" border="1">
<colgroup>
<col>
@@ -592,96 +583,101 @@
</tr></thead>
<tbody>
<tr>
-<td><pre class="screen">name</pre></td>
-<td><pre class="screen">string</pre></td>
-<td><pre class="screen">connection</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>
+<td><pre class="screen">autoconnect</pre></td>
+<td><pre class="screen">boolean</pre></td>
+<td><pre class="screen">TRUE</pre></td>
+<td>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.</td>
+</tr>
+<tr>
+<td><pre class="screen">autoconnect-priority</pre></td>
+<td><pre class="screen">int32</pre></td>
+<td><pre class="screen">0</pre></td>
+<td>The autoconnect priority. If the connection is set to autoconnect, connections with higher priority will be preferred. Defaults to 0. The higher number means higher priority.</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>
<tr>
<td><pre class="screen">id</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>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.</td>
+<td>A human readable unique identifier for the connection, like "Work Wi-Fi" or "T-Mobile 3G".</td>
</tr>
<tr>
-<td><pre class="screen">uuid</pre></td>
+<td><pre class="screen">interface-name</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 Wi-Fi SSID, mobile broadband network provider, or the connection type changes.</td>
+<td>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 software devices this specifies the name of the created device. 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">interface-name</pre></td>
+<td><pre class="screen">master</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>
+<td>Interface name of the master device or UUID of the master connection.</td>
</tr>
<tr>
-<td><pre class="screen">type</pre></td>
+<td><pre class="screen">name</pre></td>
<td><pre class="screen">string</pre></td>
-<td><pre class="screen"></pre></td>
-<td>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).</td>
+<td><pre class="screen">connection</pre></td>
+<td>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".</td>
</tr>
<tr>
<td><pre class="screen">permissions</pre></td>
<td><pre class="screen">array of string</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>
-<td><pre class="screen">autoconnect</pre></td>
-<td><pre class="screen">boolean</pre></td>
-<td><pre class="screen">TRUE</pre></td>
-<td>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.</td>
-</tr>
-<tr>
-<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. 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>
+<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 list. 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 present must be ignored and is reserved for future use. All of [type], [id], and [reserved] must be valid UTF-8.</td>
</tr>
<tr>
<td><pre class="screen">read-only</pre></td>
<td><pre class="screen">boolean</pre></td>
<td><pre class="screen">FALSE</pre></td>
-<td>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.</td>
+<td>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.</td>
</tr>
<tr>
-<td><pre class="screen">zone</pre></td>
-<td><pre class="screen">string</pre></td>
-<td><pre class="screen"></pre></td>
-<td>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.</td>
+<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. Currently only VPN connections are supported.</td>
</tr>
<tr>
-<td><pre class="screen">master</pre></td>
+<td><pre class="screen">slave-type</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>Interface name of the master device or UUID of the master connection</td>
+<td>Setting name of the device type of this slave's master connection (eg, "bond"), or NULL if this connection is not a slave.</td>
</tr>
<tr>
-<td><pre class="screen">slave-type</pre></td>
+<td><pre class="screen">timestamp</pre></td>
+<td><pre class="screen">uint64</pre></td>
+<td><pre class="screen">0</pre></td>
+<td>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).</td>
+</tr>
+<tr>
+<td><pre class="screen">type</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>Setting name describing the type of slave this connection is (ie, 'bond') or NULL if this connection is not a slave.</td>
+<td>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).</td>
</tr>
<tr>
-<td><pre class="screen">secondaries</pre></td>
-<td><pre class="screen">array of string</pre></td>
+<td><pre class="screen">uuid</pre></td>
+<td><pre class="screen">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. Currently only VPN connections are supported.</td>
+<td>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, it should not be changed when the "id" property or NMSettingIP4Config changes, but might need to be re-created when the Wi-Fi SSID, mobile broadband network provider, or "type" property changes. The UUID must be in the format "2815492f-7e56-435e-b2e9-246bd7cdc664" (ie, contains only hexadecimal characters and "-").</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>
+<td><pre class="screen">zone</pre></td>
+<td><pre class="screen">string</pre></td>
+<td><pre class="screen"></pre></td>
+<td>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.</td>
</tr>
</tbody>
</table></div>
</div>
-<p><br class="table-break">
-</p>
+<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>
+<a name="id-1.3.3.10.1"></a><p class="title"><b>Table 9. dcb setting</b></p>
<div class="table-contents"><table summary="dcb setting" border="1">
<colgroup>
<col>
@@ -697,76 +693,70 @@
</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>
+<td><pre class="screen">app-fcoe-flags</pre></td>
+<td><pre class="screen">NMSettingDcbFlags (uint32)</pre></td>
+<td><pre class="screen"></pre></td>
+<td>Specifies the NMSettingDcbFlags for the DCB FCoE application. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4).</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>
+<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-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>
+<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 NM_SETTING_DCB_FLAG_ENABLE (0x1) flag.</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>
+<td><pre class="screen">app-fip-flags</pre></td>
+<td><pre class="screen">NMSettingDcbFlags (uint32)</pre></td>
+<td><pre class="screen"></pre></td>
+<td>Specifies the NMSettingDcbFlags for the DCB FIP application. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4).</td>
</tr>
<tr>
-<td><pre class="screen">app-iscsi-priority</pre></td>
+<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 iSCSI frames should use, or -1 for default priority. Only used when the 'app-iscsi-flags' property includes the 'enabled' flag.</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 NM_SETTING_DCB_FLAG_ENABLE (0x1) 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>
+<td><pre class="screen">app-iscsi-flags</pre></td>
+<td><pre class="screen">NMSettingDcbFlags (uint32)</pre></td>
+<td><pre class="screen"></pre></td>
+<td>Specifies the NMSettingDcbFlags for the DCB iSCSI application. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4).</td>
</tr>
<tr>
-<td><pre class="screen">app-fip-priority</pre></td>
+<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 FIP frames should use, or -1 for default priority. Only used when the 'app-fip-flags' property includes the 'enabled' flag.</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 NM_SETTING_DCB_FLAG_ENABLE (0x1) 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>
+<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, 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".</td>
</tr>
<tr>
-<td><pre class="screen">priority-flow-control</pre></td>
+<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 whether or not the corresponding priority should transmit priority pause. Allowed values are 0 (do not transmit pause) and 1 (transmit pause).</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-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>
+<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 boolean 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.</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">priority-flow-control-flags</pre></td>
+<td><pre class="screen">NMSettingDcbFlags (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>
+<td>Specifies the NMSettingDcbFlags for DCB Priority Flow Control (PFC). Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4).</td>
</tr>
<tr>
<td><pre class="screen">priority-group-bandwidth</pre></td>
@@ -775,16 +765,22 @@
<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">priority-group-flags</pre></td>
+<td><pre class="screen">NMSettingDcbFlags (uint32)</pre></td>
+<td><pre class="screen"></pre></td>
+<td>Specifies the NMSettingDcbFlags for DCB Priority Groups. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4).</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 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>
+<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-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>
+<td>An array of 8 boolean 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.</td>
</tr>
<tr>
<td><pre class="screen">priority-traffic-class</pre></td>
@@ -795,10 +791,33 @@
</tbody>
</table></div>
</div>
-<p><br class="table-break">
-</p>
+<p><br class="table-break"></p>
+<div class="table">
+<a name="id-1.3.3.11.1"></a><p class="title"><b>Table 10. generic setting</b></p>
+<div class="table-contents"><table summary="generic 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">generic</pre></td>
+<td>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".</td>
+</tr></tbody>
+</table></div>
+</div>
+<p><br class="table-break"></p>
<div class="table">
-<a name="id-1.3.3.2.10"></a><p class="title"><b>Table 10. gsm setting</b></p>
+<a name="id-1.3.3.12.1"></a><p class="title"><b>Table 11. gsm setting</b></p>
<div class="table-contents"><table summary="gsm setting" border="1">
<colgroup>
<col>
@@ -814,52 +833,46 @@
</tr></thead>
<tbody>
<tr>
-<td><pre class="screen">name</pre></td>
+<td><pre class="screen">apn</pre></td>
<td><pre class="screen">string</pre></td>
-<td><pre class="screen">gsm</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>
+<td><pre class="screen"></pre></td>
+<td>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.</td>
</tr>
<tr>
-<td><pre class="screen">number</pre></td>
-<td><pre class="screen">string</pre></td>
-<td><pre class="screen"></pre></td>
-<td>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.</td>
+<td><pre class="screen">home-only</pre></td>
+<td><pre class="screen">boolean</pre></td>
+<td><pre class="screen">FALSE</pre></td>
+<td>When TRUE, only connections to the home network will be allowed. Connections to roaming networks will not be made.</td>
</tr>
<tr>
-<td><pre class="screen">username</pre></td>
+<td><pre class="screen">name</pre></td>
<td><pre class="screen">string</pre></td>
-<td><pre class="screen"></pre></td>
-<td>Username used to authenticate with the network, if required. Note that many providers do not require a username or accept any username.</td>
+<td><pre class="screen">gsm</pre></td>
+<td>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".</td>
</tr>
<tr>
-<td><pre class="screen">password</pre></td>
+<td><pre class="screen">network-id</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>Password used to authenticate with the network, if required. Note that many providers do not require a password or accept any password.</td>
-</tr>
-<tr>
-<td><pre class="screen">password-flags</pre></td>
-<td><pre class="screen">uint32</pre></td>
-<td><pre class="screen">0</pre></td>
-<td>Flags indicating how to handle the GSM password. (see <a class="xref" href="secrets-flags.html" title="Secret flag types">the section called “Secret flag typesâ€</a> for flag values)</td>
+<td>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.</td>
</tr>
<tr>
-<td><pre class="screen">apn</pre></td>
+<td><pre class="screen">number</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>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.</td>
+<td>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.</td>
</tr>
<tr>
-<td><pre class="screen">network-id</pre></td>
+<td><pre class="screen">password</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>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.</td>
+<td>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.</td>
</tr>
<tr>
-<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. 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>
+<td><pre class="screen">password-flags</pre></td>
+<td><pre class="screen">NMSettingSecretFlags (uint32)</pre></td>
+<td><pre class="screen"></pre></td>
+<td>Flags indicating how to handle the "password" property.</td>
</tr>
<tr>
<td><pre class="screen">pin</pre></td>
@@ -869,29 +882,22 @@
</tr>
<tr>
<td><pre class="screen">pin-flags</pre></td>
-<td><pre class="screen">uint32</pre></td>
-<td><pre class="screen">0</pre></td>
-<td>Flags indicating how to handle the GSM SIM PIN. (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">allowed-bands</pre></td>
-<td><pre class="screen">uint32</pre></td>
-<td><pre class="screen">1</pre></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>
+<td><pre class="screen">NMSettingSecretFlags (uint32)</pre></td>
+<td><pre class="screen"></pre></td>
+<td>Flags indicating how to handle the "pin" property.</td>
</tr>
<tr>
-<td><pre class="screen">home-only</pre></td>
-<td><pre class="screen">boolean</pre></td>
-<td><pre class="screen">FALSE</pre></td>
-<td>When TRUE, only connections to the home network will be allowed. Connections to roaming networks will not be made.</td>
+<td><pre class="screen">username</pre></td>
+<td><pre class="screen">string</pre></td>
+<td><pre class="screen"></pre></td>
+<td>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.</td>
</tr>
</tbody>
</table></div>
</div>
-<p><br class="table-break">
-</p>
+<p><br class="table-break"></p>
<div class="table">
-<a name="id-1.3.3.2.11"></a><p class="title"><b>Table 11. infiniband setting</b></p>
+<a name="id-1.3.3.13.1"></a><p class="title"><b>Table 12. infiniband setting</b></p>
<div class="table-contents"><table summary="infiniband setting" border="1">
<colgroup>
<col>
@@ -907,16 +913,10 @@
</tr></thead>
<tbody>
<tr>
-<td><pre class="screen">name</pre></td>
-<td><pre class="screen">string</pre></td>
-<td><pre class="screen">infiniband</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">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 IPoIB device whose permanent MAC address matches. This property does not change the MAC address of the device (i.e. MAC spoofing).</td>
+<td><pre class="screen"></pre></td>
+<td>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).</td>
</tr>
<tr>
<td><pre class="screen">mtu</pre></td>
@@ -925,30 +925,35 @@
<td>If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple frames.</td>
</tr>
<tr>
-<td><pre class="screen">transport-mode</pre></td>
+<td><pre class="screen">name</pre></td>
<td><pre class="screen">string</pre></td>
-<td><pre class="screen"></pre></td>
-<td>The IPoIB transport mode. Either 'datagram' or 'connected'.</td>
+<td><pre class="screen">infiniband</pre></td>
+<td>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".</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>
+<td>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.</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>
+<td>The interface name of the parent device of this device. Normally NULL, but if the "p_key" property is set, then you must specify the base device by setting either this property or "mac-address".</td>
+</tr>
+<tr>
+<td><pre class="screen">transport-mode</pre></td>
+<td><pre class="screen">string</pre></td>
+<td><pre class="screen"></pre></td>
+<td>The IP-over-InfiniBand transport mode. Either "datagram" or "connected".</td>
</tr>
</tbody>
</table></div>
</div>
-<p><br class="table-break">
-</p>
+<p><br class="table-break"></p>
<div class="table">
-<a name="id-1.3.3.2.12"></a><p class="title"><b>Table 12. ipv4 setting</b></p>
+<a name="id-1.3.3.14.1"></a><p class="title"><b>Table 13. ipv4 setting</b></p>
<div class="table-contents"><table summary="ipv4 setting" border="1">
<colgroup>
<col>
@@ -964,96 +969,113 @@
</tr></thead>
<tbody>
<tr>
-<td><pre class="screen">name</pre></td>
-<td><pre class="screen">string</pre></td>
-<td><pre class="screen">ipv4</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>
+<td><pre class="screen">address-data</pre></td>
+<td><pre class="screen">array of vardict</pre></td>
+<td><pre class="screen"></pre></td>
+<td>Array of IPv4 addresses. Each address dictionary contains at least 'address' and 'prefix' entries, containing the IP address as a string, and the prefix length as a uint32. Additional attributes may also exist on some addresses.</td>
</tr>
<tr>
-<td><pre class="screen">method</pre></td>
-<td><pre class="screen">string</pre></td>
+<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>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.</td>
+<td>Deprecated in favor of the 'address-data' and 'gateway' properties, but this can be used for backward-compatibility with older daemons. Note that if you send this property the daemon will ignore 'address-data' and 'gateway'. 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.</td>
</tr>
<tr>
-<td><pre class="screen">dns</pre></td>
-<td><pre class="screen">array of uint32</pre></td>
+<td><pre class="screen">dhcp-client-id</pre></td>
+<td><pre class="screen">string</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>
+<td>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.</td>
</tr>
<tr>
-<td><pre class="screen">dns-search</pre></td>
-<td><pre class="screen">array of string</pre></td>
+<td><pre class="screen">dhcp-hostname</pre></td>
+<td><pre class="screen">string</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>
+<td>If the "dhcp-send-hostname" property is TRUE, then the specified name will be sent to the DHCP server when acquiring a lease.</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>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>
+<td><pre class="screen">dhcp-send-hostname</pre></td>
+<td><pre class="screen">boolean</pre></td>
+<td><pre class="screen">TRUE</pre></td>
+<td>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 NULL and this property is TRUE, the current persistent hostname of the computer is sent.</td>
+</tr>
+<tr>
+<td><pre class="screen">dns</pre></td>
+<td><pre class="screen">array of uint32</pre></td>
+<td><pre class="screen">[]</pre></td>
+<td>Array of IP addresses of DNS servers (as network-byte-order integers)</td>
</tr>
<tr>
-<td><pre class="screen">address-labels</pre></td>
+<td><pre class="screen">dns-search</pre></td>
<td><pre class="screen">array of string</pre></td>
-<td><pre class="screen"></pre></td>
-<td>Internal use only</td>
+<td><pre class="screen">[]</pre></td>
+<td>Array of DNS search domains.</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">gateway</pre></td>
+<td><pre class="screen">string</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>
+<td>The gateway associated with this configuration. This is only meaningful if "addresses" is also set.</td>
</tr>
<tr>
-<td><pre class="screen">ignore-auto-routes</pre></td>
+<td><pre class="screen">ignore-auto-dns</pre></td>
<td><pre class="screen">boolean</pre></td>
<td><pre class="screen">FALSE</pre></td>
-<td>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.</td>
+<td>When "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.</td>
</tr>
<tr>
-<td><pre class="screen">ignore-auto-dns</pre></td>
+<td><pre class="screen">ignore-auto-routes</pre></td>
<td><pre class="screen">boolean</pre></td>
<td><pre class="screen">FALSE</pre></td>
-<td>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.</td>
-</tr>
-<tr>
-<td><pre class="screen">dhcp-client-id</pre></td>
-<td><pre class="screen">string</pre></td>
-<td><pre class="screen"></pre></td>
-<td>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.</td>
+<td>When "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.</td>
</tr>
<tr>
-<td><pre class="screen">dhcp-send-hostname</pre></td>
+<td><pre class="screen">may-fail</pre></td>
<td><pre class="screen">boolean</pre></td>
<td><pre class="screen">TRUE</pre></td>
-<td>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.</td>
+<td>If TRUE, allow overall network configuration to proceed even if the configuration specified by this property 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 on the NMSettingIP4Config allows the overall network configuration to succeed if IPv4 configuration fails but IPv6 configuration completes successfully.</td>
</tr>
<tr>
-<td><pre class="screen">dhcp-hostname</pre></td>
+<td><pre class="screen">method</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>If the 'dhcp-send-hostname' property is TRUE, then the specified name will be sent to the DHCP server when acquiring a lease.</td>
+<td>IP configuration method. NMSettingIP4Config and NMSettingIP6Config both support "auto", "manual", and "link-local". See the subclass-specific documentation for other values. In general, for the "auto" method, properties such as "dns" and "routes" specify information that is added on to the information returned from automatic configuration. The "ignore-auto-routes" and "ignore-auto-dns" properties modify this behavior. For methods that imply no upstream network, such as "shared" or "link-local", these properties must be empty.</td>
+</tr>
+<tr>
+<td><pre class="screen">name</pre></td>
+<td><pre class="screen">string</pre></td>
+<td><pre class="screen">ipv4</pre></td>
+<td>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".</td>
</tr>
<tr>
<td><pre class="screen">never-default</pre></td>
<td><pre class="screen">boolean</pre></td>
<td><pre class="screen">FALSE</pre></td>
-<td>If TRUE, this connection will never be the default IPv4 connection, meaning it will never be assigned the default route by NetworkManager.</td>
+<td>If TRUE, this connection will never be the default connection for this IP type, meaning it will never be assigned the default route by NetworkManager.</td>
</tr>
<tr>
-<td><pre class="screen">may-fail</pre></td>
-<td><pre class="screen">boolean</pre></td>
-<td><pre class="screen">TRUE</pre></td>
-<td>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.</td>
+<td><pre class="screen">route-data</pre></td>
+<td><pre class="screen">array of vardict</pre></td>
+<td><pre class="screen"></pre></td>
+<td>Array of IPv4 routes. Each route dictionary contains at least 'dest' and 'prefix' entries, containing the destination IP address as a string, and the prefix length as a uint32. Most routes will also have a 'gateway' entry, containing the gateway IP address as a string. If the route has a 'metric' entry (containing a uint32), that will be used as the metric for the route (otherwise NM will pick a default value appropriate to the device). Additional attributes may also exist on some routes.</td>
+</tr>
+<tr>
+<td><pre class="screen">route-metric</pre></td>
+<td><pre class="screen">int64</pre></td>
+<td><pre class="screen">-1</pre></td>
+<td>The default metric for routes that don't explicitly specify a metric. The default value -1 means that the metric is choosen automatically based on the device type. The metric applies to dynamic routes, manual (static) routes that don't have an explicit metric setting, address prefix routes, and the default route. Note that for IPv6, the kernel accepts zero (0) but coerces it to 1024 (user default). Hence, setting this property to zero effectively mean setting it to 1024. For IPv4, zero is a regular value for the metric.</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>Deprecated in favor of the 'route-data' property, but this can be used for backward-compatibility with older daemons. Note that if you send this property the daemon will ignore 'route-data'. 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. If the metric is 0, NM will choose an appropriate default metric for the device. (There is no way to explicitly specify an actual metric of 0 with this property.)</td>
</tr>
</tbody>
</table></div>
</div>
-<p><br class="table-break">
-</p>
+<p><br class="table-break"></p>
<div class="table">
-<a name="id-1.3.3.2.13"></a><p class="title"><b>Table 13. ipv6 setting</b></p>
+<a name="id-1.3.3.15.1"></a><p class="title"><b>Table 14. ipv6 setting</b></p>
<div class="table-contents"><table summary="ipv6 setting" border="1">
<colgroup>
<col>
@@ -1069,84 +1091,113 @@
</tr></thead>
<tbody>
<tr>
-<td><pre class="screen">name</pre></td>
-<td><pre class="screen">string</pre></td>
-<td><pre class="screen">ipv6</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>
+<td><pre class="screen">address-data</pre></td>
+<td><pre class="screen">array of vardict</pre></td>
+<td><pre class="screen"></pre></td>
+<td>Array of IPv6 addresses. Each address dictionary contains at least 'address' and 'prefix' entries, containing the IP address as a string, and the prefix length as a uint32. Additional attributes may also exist on some addresses.</td>
</tr>
<tr>
-<td><pre class="screen">method</pre></td>
-<td><pre class="screen">string</pre></td>
+<td><pre class="screen">addresses</pre></td>
+<td><pre class="screen">array of legacy IPv6 address struct (a(ayuay))</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' method is not yet supported.</td>
+<td>Deprecated in favor of the 'address-data' and 'gateway' properties, but this can be used for backward-compatibility with older daemons. Note that if you send this property the daemon will ignore 'address-data' and 'gateway'. Array of IPv6 address structures. Each IPv6 address structure is composed of an IPv6 address, a prefix length (1 - 128), and an IPv6 gateway address. The gateway may be zeroed out if no gateway exists for that subnet.</td>
</tr>
<tr>
<td><pre class="screen">dhcp-hostname</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>The specified name will be sent to the DHCP server when acquiring a lease.</td>
+<td>If the "dhcp-send-hostname" property is TRUE, then the specified name will be sent to the DHCP server when acquiring a lease.</td>
+</tr>
+<tr>
+<td><pre class="screen">dhcp-send-hostname</pre></td>
+<td><pre class="screen">boolean</pre></td>
+<td><pre class="screen">TRUE</pre></td>
+<td>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 NULL and this property is TRUE, the current persistent hostname of the computer is sent.</td>
</tr>
<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>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>
+<td><pre class="screen">[]</pre></td>
+<td>Array of IP addresses of DNS servers (in network byte order)</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>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>
+<td><pre class="screen">[]</pre></td>
+<td>Array of DNS search domains.</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">gateway</pre></td>
+<td><pre class="screen">string</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>
+<td>The gateway associated with this configuration. This is only meaningful if "addresses" is also set.</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>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>
+<td><pre class="screen">ignore-auto-dns</pre></td>
+<td><pre class="screen">boolean</pre></td>
+<td><pre class="screen">FALSE</pre></td>
+<td>When "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.</td>
</tr>
<tr>
<td><pre class="screen">ignore-auto-routes</pre></td>
<td><pre class="screen">boolean</pre></td>
<td><pre class="screen">FALSE</pre></td>
-<td>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.</td>
+<td>When "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.</td>
</tr>
<tr>
-<td><pre class="screen">ignore-auto-dns</pre></td>
+<td><pre class="screen">ip6-privacy</pre></td>
+<td><pre class="screen">NMSettingIP6ConfigPrivacy (int32)</pre></td>
+<td><pre class="screen"></pre></td>
+<td>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).</td>
+</tr>
+<tr>
+<td><pre class="screen">may-fail</pre></td>
<td><pre class="screen">boolean</pre></td>
-<td><pre class="screen">FALSE</pre></td>
-<td>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.</td>
+<td><pre class="screen">TRUE</pre></td>
+<td>If TRUE, allow overall network configuration to proceed even if the configuration specified by this property 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 on the NMSettingIP4Config allows the overall network configuration to succeed if IPv4 configuration fails but IPv6 configuration completes successfully.</td>
+</tr>
+<tr>
+<td><pre class="screen">method</pre></td>
+<td><pre class="screen">string</pre></td>
+<td><pre class="screen"></pre></td>
+<td>IP configuration method. NMSettingIP4Config and NMSettingIP6Config both support "auto", "manual", and "link-local". See the subclass-specific documentation for other values. In general, for the "auto" method, properties such as "dns" and "routes" specify information that is added on to the information returned from automatic configuration. The "ignore-auto-routes" and "ignore-auto-dns" properties modify this behavior. For methods that imply no upstream network, such as "shared" or "link-local", these properties must be empty.</td>
+</tr>
+<tr>
+<td><pre class="screen">name</pre></td>
+<td><pre class="screen">string</pre></td>
+<td><pre class="screen">ipv6</pre></td>
+<td>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".</td>
</tr>
<tr>
<td><pre class="screen">never-default</pre></td>
<td><pre class="screen">boolean</pre></td>
<td><pre class="screen">FALSE</pre></td>
-<td>If TRUE, this connection will never be the default IPv6 connection, meaning it will never be assigned the default IPv6 route by NetworkManager.</td>
+<td>If TRUE, this connection will never be the default connection for this IP type, meaning it will never be assigned the default route by NetworkManager.</td>
</tr>
<tr>
-<td><pre class="screen">may-fail</pre></td>
-<td><pre class="screen">boolean</pre></td>
-<td><pre class="screen">TRUE</pre></td>
-<td>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.</td>
+<td><pre class="screen">route-data</pre></td>
+<td><pre class="screen">array of vardict</pre></td>
+<td><pre class="screen"></pre></td>
+<td>Array of IPv6 routes. Each route dictionary contains at least 'dest' and 'prefix' entries, containing the destination IP address as a string, and the prefix length as a uint32. Most routes will also have a 'next-hop' entry, containing the next hop IP address as a string. If the route has a 'metric' entry (containing a uint32), that will be used as the metric for the route (otherwise NM will pick a default value appropriate to the device). Additional attributes may also exist on some routes.</td>
</tr>
<tr>
-<td><pre class="screen">ip6-privacy</pre></td>
-<td><pre class="screen">int32</pre></td>
+<td><pre class="screen">route-metric</pre></td>
+<td><pre class="screen">int64</pre></td>
<td><pre class="screen">-1</pre></td>
-<td>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).</td>
+<td>The default metric for routes that don't explicitly specify a metric. The default value -1 means that the metric is choosen automatically based on the device type. The metric applies to dynamic routes, manual (static) routes that don't have an explicit metric setting, address prefix routes, and the default route. Note that for IPv6, the kernel accepts zero (0) but coerces it to 1024 (user default). Hence, setting this property to zero effectively mean setting it to 1024. For IPv4, zero is a regular value for the metric.</td>
+</tr>
+<tr>
+<td><pre class="screen">routes</pre></td>
+<td><pre class="screen">array of legacy IPv6 route struct (a(ayuayu))</pre></td>
+<td><pre class="screen"></pre></td>
+<td>Deprecated in favor of the 'route-data' property, but this can be used for backward-compatibility with older daemons. Note that if you send this property the daemon will ignore 'route-data'. Array of IPv6 route structures. Each IPv6 route structure is composed of an IPv6 address, a prefix length (1 - 128), an IPv6 next hop address (which may be zeroed out if there is no next hop), and a metric. If the metric is 0, NM will choose an appropriate default metric for the device.</td>
</tr>
</tbody>
</table></div>
</div>
-<p><br class="table-break">
-</p>
+<p><br class="table-break"></p>
<div class="table">
-<a name="id-1.3.3.2.14"></a><p class="title"><b>Table 14. 802-11-olpc-mesh setting</b></p>
+<a name="id-1.3.3.16.1"></a><p class="title"><b>Table 15. 802-11-olpc-mesh setting</b></p>
<div class="table-contents"><table summary="802-11-olpc-mesh setting" border="1">
<colgroup>
<col>
@@ -1162,18 +1213,6 @@
</tr></thead>
<tbody>
<tr>
-<td><pre class="screen">name</pre></td>
-<td><pre class="screen">string</pre></td>
-<td><pre class="screen">802-11-olpc-mesh</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">ssid</pre></td>
-<td><pre class="screen">byte array</pre></td>
-<td><pre class="screen">[]</pre></td>
-<td>SSID of the mesh network to join.</td>
-</tr>
-<tr>
<td><pre class="screen">channel</pre></td>
<td><pre class="screen">uint32</pre></td>
<td><pre class="screen">0</pre></td>
@@ -1182,16 +1221,27 @@
<tr>
<td><pre class="screen">dhcp-anycast-address</pre></td>
<td><pre class="screen">byte array</pre></td>
-<td><pre class="screen">[]</pre></td>
-<td>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.</td>
+<td><pre class="screen"></pre></td>
+<td>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.</td>
+</tr>
+<tr>
+<td><pre class="screen">name</pre></td>
+<td><pre class="screen">string</pre></td>
+<td><pre class="screen">802-11-olpc-mesh</pre></td>
+<td>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".</td>
+</tr>
+<tr>
+<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 mesh network to join.</td>
</tr>
</tbody>
</table></div>
</div>
-<p><br class="table-break">
-</p>
+<p><br class="table-break"></p>
<div class="table">
-<a name="id-1.3.3.2.15"></a><p class="title"><b>Table 15. ppp setting</b></p>
+<a name="id-1.3.3.17.1"></a><p class="title"><b>Table 16. ppp setting</b></p>
<div class="table-contents"><table summary="ppp setting" border="1">
<colgroup>
<col>
@@ -1207,46 +1257,64 @@
</tr></thead>
<tbody>
<tr>
-<td><pre class="screen">name</pre></td>
-<td><pre class="screen">string</pre></td>
-<td><pre class="screen">ppp</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>
+<td><pre class="screen">baud</pre></td>
+<td><pre class="screen">uint32</pre></td>
+<td><pre class="screen">0</pre></td>
+<td>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.</td>
</tr>
<tr>
-<td><pre class="screen">noauth</pre></td>
+<td><pre class="screen">crtscts</pre></td>
<td><pre class="screen">boolean</pre></td>
-<td><pre class="screen">TRUE</pre></td>
-<td>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.</td>
+<td><pre class="screen">FALSE</pre></td>
+<td>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.</td>
</tr>
<tr>
-<td><pre class="screen">refuse-eap</pre></td>
-<td><pre class="screen">boolean</pre></td>
-<td><pre class="screen">FALSE</pre></td>
-<td>If TRUE, the EAP authentication method will not be used.</td>
+<td><pre class="screen">lcp-echo-failure</pre></td>
+<td><pre class="screen">uint32</pre></td>
+<td><pre class="screen">0</pre></td>
+<td>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.</td>
</tr>
<tr>
-<td><pre class="screen">refuse-pap</pre></td>
-<td><pre class="screen">boolean</pre></td>
-<td><pre class="screen">FALSE</pre></td>
-<td>If TRUE, the PAP authentication method will not be used.</td>
+<td><pre class="screen">lcp-echo-interval</pre></td>
+<td><pre class="screen">uint32</pre></td>
+<td><pre class="screen">0</pre></td>
+<td>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.</td>
</tr>
<tr>
-<td><pre class="screen">refuse-chap</pre></td>
+<td><pre class="screen">mppe-stateful</pre></td>
<td><pre class="screen">boolean</pre></td>
<td><pre class="screen">FALSE</pre></td>
-<td>If TRUE, the CHAP authentication method will not be used.</td>
+<td>If TRUE, stateful MPPE is used. See pppd documentation for more information on stateful MPPE.</td>
</tr>
<tr>
-<td><pre class="screen">refuse-mschap</pre></td>
+<td><pre class="screen">mru</pre></td>
+<td><pre class="screen">uint32</pre></td>
+<td><pre class="screen">0</pre></td>
+<td>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.</td>
+</tr>
+<tr>
+<td><pre class="screen">mtu</pre></td>
+<td><pre class="screen">uint32</pre></td>
+<td><pre class="screen">0</pre></td>
+<td>If non-zero, instruct pppd to send packets no larger than the specified size.</td>
+</tr>
+<tr>
+<td><pre class="screen">name</pre></td>
+<td><pre class="screen">string</pre></td>
+<td><pre class="screen">ppp</pre></td>
+<td>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".</td>
+</tr>
+<tr>
+<td><pre class="screen">no-vj-comp</pre></td>
<td><pre class="screen">boolean</pre></td>
<td><pre class="screen">FALSE</pre></td>
-<td>If TRUE, the MSCHAP authentication method will not be used.</td>
+<td>If TRUE, Van Jacobsen TCP header compression will not be requested.</td>
</tr>
<tr>
-<td><pre class="screen">refuse-mschapv2</pre></td>
+<td><pre class="screen">noauth</pre></td>
<td><pre class="screen">boolean</pre></td>
-<td><pre class="screen">FALSE</pre></td>
-<td>If TRUE, the MSCHAPv2 authentication method will not be used.</td>
+<td><pre class="screen">TRUE</pre></td>
+<td>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.</td>
</tr>
<tr>
<td><pre class="screen">nobsdcomp</pre></td>
@@ -1258,75 +1326,56 @@
<td><pre class="screen">nodeflate</pre></td>
<td><pre class="screen">boolean</pre></td>
<td><pre class="screen">FALSE</pre></td>
-<td>If TRUE, 'deflate' compression will not be requested.</td>
+<td>If TRUE, "deflate" compression will not be requested.</td>
</tr>
<tr>
-<td><pre class="screen">no-vj-comp</pre></td>
+<td><pre class="screen">refuse-chap</pre></td>
<td><pre class="screen">boolean</pre></td>
<td><pre class="screen">FALSE</pre></td>
-<td>If TRUE, Van Jacobsen TCP header compression will not be requested.</td>
+<td>If TRUE, the CHAP authentication method will not be used.</td>
</tr>
<tr>
-<td><pre class="screen">require-mppe</pre></td>
+<td><pre class="screen">refuse-eap</pre></td>
<td><pre class="screen">boolean</pre></td>
<td><pre class="screen">FALSE</pre></td>
-<td>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.</td>
+<td>If TRUE, the EAP authentication method will not be used.</td>
</tr>
<tr>
-<td><pre class="screen">require-mppe-128</pre></td>
+<td><pre class="screen">refuse-mschap</pre></td>
<td><pre class="screen">boolean</pre></td>
<td><pre class="screen">FALSE</pre></td>
-<td>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.</td>
+<td>If TRUE, the MSCHAP authentication method will not be used.</td>
</tr>
<tr>
-<td><pre class="screen">mppe-stateful</pre></td>
+<td><pre class="screen">refuse-mschapv2</pre></td>
<td><pre class="screen">boolean</pre></td>
<td><pre class="screen">FALSE</pre></td>
-<td>If TRUE, stateful MPPE is used. See pppd documentation for more information on stateful MPPE.</td>
+<td>If TRUE, the MSCHAPv2 authentication method will not be used.</td>
</tr>
<tr>
-<td><pre class="screen">crtscts</pre></td>
+<td><pre class="screen">refuse-pap</pre></td>
<td><pre class="screen">boolean</pre></td>
<td><pre class="screen">FALSE</pre></td>
-<td>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.</td>
-</tr>
-<tr>
-<td><pre class="screen">baud</pre></td>
-<td><pre class="screen">uint32</pre></td>
-<td><pre class="screen">0</pre></td>
-<td>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.</td>
-</tr>
-<tr>
-<td><pre class="screen">mru</pre></td>
-<td><pre class="screen">uint32</pre></td>
-<td><pre class="screen">0</pre></td>
-<td>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.</td>
-</tr>
-<tr>
-<td><pre class="screen">mtu</pre></td>
-<td><pre class="screen">uint32</pre></td>
-<td><pre class="screen">0</pre></td>
-<td>If non-zero, instruct pppd to send packets no larger than the specified size.</td>
+<td>If TRUE, the PAP authentication method will not be used.</td>
</tr>
<tr>
-<td><pre class="screen">lcp-echo-failure</pre></td>
-<td><pre class="screen">uint32</pre></td>
-<td><pre class="screen">0</pre></td>
-<td>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.</td>
+<td><pre class="screen">require-mppe</pre></td>
+<td><pre class="screen">boolean</pre></td>
+<td><pre class="screen">FALSE</pre></td>
+<td>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.</td>
</tr>
<tr>
-<td><pre class="screen">lcp-echo-interval</pre></td>
-<td><pre class="screen">uint32</pre></td>
-<td><pre class="screen">0</pre></td>
-<td>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.</td>
+<td><pre class="screen">require-mppe-128</pre></td>
+<td><pre class="screen">boolean</pre></td>
+<td><pre class="screen">FALSE</pre></td>
+<td>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.</td>
</tr>
</tbody>
</table></div>
</div>
-<p><br class="table-break">
-</p>
+<p><br class="table-break"></p>
<div class="table">
-<a name="id-1.3.3.2.16"></a><p class="title"><b>Table 16. pppoe setting</b></p>
+<a name="id-1.3.3.18.1"></a><p class="title"><b>Table 17. pppoe setting</b></p>
<div class="table-contents"><table summary="pppoe setting" border="1">
<colgroup>
<col>
@@ -1345,39 +1394,38 @@
<td><pre class="screen">name</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen">pppoe</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>
+<td>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".</td>
</tr>
<tr>
-<td><pre class="screen">service</pre></td>
+<td><pre class="screen">password</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 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>
+<td>Password used to authenticate with the PPPoE service.</td>
</tr>
<tr>
-<td><pre class="screen">username</pre></td>
-<td><pre class="screen">string</pre></td>
+<td><pre class="screen">password-flags</pre></td>
+<td><pre class="screen">NMSettingSecretFlags (uint32)</pre></td>
<td><pre class="screen"></pre></td>
-<td>Username used to authenticate with the PPPoE service.</td>
+<td>Flags indicating how to handle the "password" property.</td>
</tr>
<tr>
-<td><pre class="screen">password</pre></td>
+<td><pre class="screen">service</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>Password used to authenticate with the PPPoE service.</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">password-flags</pre></td>
-<td><pre class="screen">uint32</pre></td>
-<td><pre class="screen">0</pre></td>
-<td>Flags indicating how to handle the PPPoE password. (see <a class="xref" href="secrets-flags.html" title="Secret flag types">the section called “Secret flag typesâ€</a> for flag values)</td>
+<td><pre class="screen">username</pre></td>
+<td><pre class="screen">string</pre></td>
+<td><pre class="screen"></pre></td>
+<td>Username used to authenticate with the PPPoE service.</td>
</tr>
</tbody>
</table></div>
</div>
-<p><br class="table-break">
-</p>
+<p><br class="table-break"></p>
<div class="table">
-<a name="id-1.3.3.2.17"></a><p class="title"><b>Table 17. serial setting</b></p>
+<a name="id-1.3.3.19.1"></a><p class="title"><b>Table 18. serial setting</b></p>
<div class="table-contents"><table summary="serial setting" border="1">
<colgroup>
<col>
@@ -1393,12 +1441,6 @@
</tr></thead>
<tbody>
<tr>
-<td><pre class="screen">name</pre></td>
-<td><pre class="screen">string</pre></td>
-<td><pre class="screen">serial</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">baud</pre></td>
<td><pre class="screen">uint32</pre></td>
<td><pre class="screen">57600</pre></td>
@@ -1408,19 +1450,19 @@
<td><pre class="screen">bits</pre></td>
<td><pre class="screen">uint32</pre></td>
<td><pre class="screen">8</pre></td>
-<td>Byte-width of the serial communication. The 8 in '8n1' for example.</td>
+<td>Byte-width of the serial communication. The 8 in "8n1" for example.</td>
</tr>
<tr>
-<td><pre class="screen">parity</pre></td>
-<td><pre class="screen">gchar</pre></td>
-<td><pre class="screen">110</pre></td>
-<td>Parity setting of the serial port. Either 'E' for even parity, 'o' for odd parity, or 'n' for no parity.</td>
+<td><pre class="screen">name</pre></td>
+<td><pre class="screen">string</pre></td>
+<td><pre class="screen">serial</pre></td>
+<td>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".</td>
</tr>
<tr>
-<td><pre class="screen">stopbits</pre></td>
-<td><pre class="screen">uint32</pre></td>
-<td><pre class="screen">1</pre></td>
-<td>Number of stop bits for communication on the serial port. Either 1 or 2. The 1 in '8n1' for example.</td>
+<td><pre class="screen">parity</pre></td>
+<td><pre class="screen">byte</pre></td>
+<td><pre class="screen"></pre></td>
+<td>The connection parity: 69 (ASCII 'E') for even parity, 111 (ASCII 'o') for odd, 110 (ASCII 'n') for none.</td>
</tr>
<tr>
<td><pre class="screen">send-delay</pre></td>
@@ -1428,13 +1470,18 @@
<td><pre class="screen">0</pre></td>
<td>Time to delay between each byte sent to the modem, in microseconds.</td>
</tr>
+<tr>
+<td><pre class="screen">stopbits</pre></td>
+<td><pre class="screen">uint32</pre></td>
+<td><pre class="screen">1</pre></td>
+<td>Number of stop bits for communication on the serial port. Either 1 or 2. The 1 in "8n1" for example.</td>
+</tr>
</tbody>
</table></div>
</div>
-<p><br class="table-break">
-</p>
+<p><br class="table-break"></p>
<div class="table">
-<a name="id-1.3.3.2.18"></a><p class="title"><b>Table 18. team setting</b></p>
+<a name="id-1.3.3.20.1"></a><p class="title"><b>Table 19. team setting</b></p>
<div class="table-contents"><table summary="team setting" border="1">
<colgroup>
<col>
@@ -1450,30 +1497,29 @@
</tr></thead>
<tbody>
<tr>
-<td><pre class="screen">name</pre></td>
+<td><pre class="screen">config</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>
+<td><pre class="screen"></pre></td>
+<td>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.</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>
+<td>Deprecated in favor of connection.interface-name, but can be used for backward-compatibility with older daemons, to set the team's interface name.</td>
</tr>
<tr>
-<td><pre class="screen">config</pre></td>
+<td><pre class="screen">name</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>
+<td><pre class="screen">team</pre></td>
+<td>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".</td>
</tr>
</tbody>
</table></div>
</div>
-<p><br class="table-break">
-</p>
+<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>
+<a name="id-1.3.3.21.1"></a><p class="title"><b>Table 20. team-port setting</b></p>
<div class="table-contents"><table summary="team-port setting" border="1">
<colgroup>
<col>
@@ -1489,24 +1535,23 @@
</tr></thead>
<tbody>
<tr>
-<td><pre class="screen">name</pre></td>
+<td><pre class="screen">config</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>
+<td><pre class="screen"></pre></td>
+<td>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.</td>
</tr>
<tr>
-<td><pre class="screen">config</pre></td>
+<td><pre class="screen">name</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>
+<td><pre class="screen">team-port</pre></td>
+<td>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".</td>
</tr>
</tbody>
</table></div>
</div>
-<p><br class="table-break">
-</p>
+<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>
+<a name="id-1.3.3.22.1"></a><p class="title"><b>Table 21. vlan setting</b></p>
<div class="table-contents"><table summary="vlan setting" border="1">
<colgroup>
<col>
@@ -1522,54 +1567,53 @@
</tr></thead>
<tbody>
<tr>
-<td><pre class="screen">name</pre></td>
-<td><pre class="screen">string</pre></td>
-<td><pre class="screen">vlan</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>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>
+<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>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>
<tr>
-<td><pre class="screen">parent</pre></td>
-<td><pre class="screen">string</pre></td>
+<td><pre class="screen">flags</pre></td>
+<td><pre class="screen">NMVlanFlags (uint32)</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 'wired' setting with a 'mac-address' property.</td>
+<td>One or more flags which control the behavior and features of the VLAN interface. Flags include NM_VLAN_FLAG_REORDER_HEADERS (0x1) (reordering of output packet headers), NM_VLAN_FLAG_GVRP (0x2) (use of the GVRP protocol), and NM_VLAN_FLAG_LOOSE_BINDING (0x4) (loose binding of the interface to its master device's operating state).</td>
</tr>
<tr>
<td><pre class="screen">id</pre></td>
<td><pre class="screen">uint32</pre></td>
<td><pre class="screen">0</pre></td>
-<td>The VLAN indentifier the interface created by this connection should be assigned.</td>
-</tr>
-<tr>
-<td><pre class="screen">flags</pre></td>
-<td><pre class="screen">uint32</pre></td>
-<td><pre class="screen">0</pre></td>
-<td>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).</td>
+<td>The VLAN identifier that the interface created by this connection should be assigned.</td>
</tr>
<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>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">interface-name</pre></td>
+<td><pre class="screen">string</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>
+<td>Deprecated in favor of connection.interface-name, but can be used for backward-compatibility with older daemons, to set the vlan's interface name.</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">name</pre></td>
+<td><pre class="screen">string</pre></td>
+<td><pre class="screen">vlan</pre></td>
+<td>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".</td>
+</tr>
+<tr>
+<td><pre class="screen">parent</pre></td>
+<td><pre class="screen">string</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>
+<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 an "802-3-ethernet" setting with a "mac-address" property.</td>
</tr>
</tbody>
</table></div>
</div>
-<p><br class="table-break">
-</p>
+<p><br class="table-break"></p>
<div class="table">
-<a name="id-1.3.3.2.21"></a><p class="title"><b>Table 21. vpn setting</b></p>
+<a name="id-1.3.3.23.1"></a><p class="title"><b>Table 22. vpn setting</b></p>
<div class="table-contents"><table summary="vpn setting" border="1">
<colgroup>
<col>
@@ -1585,10 +1629,28 @@
</tr></thead>
<tbody>
<tr>
+<td><pre class="screen">data</pre></td>
+<td><pre class="screen">dict of string to string</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">name</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen">vpn</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>
+<td>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".</td>
+</tr>
+<tr>
+<td><pre class="screen">persistent</pre></td>
+<td><pre class="screen">boolean</pre></td>
+<td><pre class="screen">FALSE</pre></td>
+<td>If the VPN service supports persistence, and this property is TRUE, the VPN will attempt to stay connected across link changes and outages, until explicitly disconnected.</td>
+</tr>
+<tr>
+<td><pre class="screen">secrets</pre></td>
+<td><pre class="screen">dict of string to string</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>
<tr>
<td><pre class="screen">service-type</pre></td>
@@ -1602,25 +1664,12 @@
<td><pre class="screen"></pre></td>
<td>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.</td>
</tr>
-<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>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>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>
</table></div>
</div>
-<p><br class="table-break">
-</p>
+<p><br class="table-break"></p>
<div class="table">
-<a name="id-1.3.3.2.22"></a><p class="title"><b>Table 22. wimax setting</b></p>
+<a name="id-1.3.3.24.1"></a><p class="title"><b>Table 23. wimax setting</b></p>
<div class="table-contents"><table summary="wimax setting" border="1">
<colgroup>
<col>
@@ -1636,10 +1685,16 @@
</tr></thead>
<tbody>
<tr>
+<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 WiMAX device whose MAC address matches. This property does not change the MAC address of the device (known as MAC spoofing).</td>
+</tr>
+<tr>
<td><pre class="screen">name</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen">wimax</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>
+<td>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".</td>
</tr>
<tr>
<td><pre class="screen">network-name</pre></td>
@@ -1647,19 +1702,12 @@
<td><pre class="screen"></pre></td>
<td>Network Service Provider (NSP) name of the WiMAX network this connection should use.</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>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).</td>
-</tr>
</tbody>
</table></div>
</div>
-<p><br class="table-break">
-</p>
+<p><br class="table-break"></p>
<div class="table">
-<a name="id-1.3.3.2.23"></a><p class="title"><b>Table 23. 802-3-ethernet setting</b></p>
+<a name="id-1.3.3.25.1"></a><p class="title"><b>Table 24. 802-3-ethernet setting</b></p>
<div class="table-contents"><table summary="802-3-ethernet setting" border="1">
<colgroup>
<col>
@@ -1675,51 +1723,33 @@
</tr></thead>
<tbody>
<tr>
-<td><pre class="screen">name</pre></td>
-<td><pre class="screen">string</pre></td>
-<td><pre class="screen">802-3-ethernet</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>
+<td><pre class="screen">auto-negotiate</pre></td>
+<td><pre class="screen">boolean</pre></td>
+<td><pre class="screen">TRUE</pre></td>
+<td>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.</td>
</tr>
<tr>
-<td><pre class="screen">port</pre></td>
-<td><pre class="screen">string</pre></td>
+<td><pre class="screen">cloned-mac-address</pre></td>
+<td><pre class="screen">byte array</pre></td>
<td><pre class="screen"></pre></td>
-<td>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.</td>
-</tr>
-<tr>
-<td><pre class="screen">speed</pre></td>
-<td><pre class="screen">uint32</pre></td>
-<td><pre class="screen">0</pre></td>
-<td>If non-zero, request that the device use only the specified speed. In Mbit/s, ie 100 == 100Mbit/s.</td>
+<td>If specified, request that the 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">duplex</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>If specified, request that the device only use the specified duplex mode. Either 'half' or 'full'.</td>
-</tr>
-<tr>
-<td><pre class="screen">auto-negotiate</pre></td>
-<td><pre class="screen">boolean</pre></td>
-<td><pre class="screen">TRUE</pre></td>
-<td>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.</td>
+<td>If specified, request that the device only use the specified duplex mode. Either "half" or "full".</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>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>
-<td><pre class="screen">byte array</pre></td>
-<td><pre class="screen">[]</pre></td>
-<td>If specified, request that the device use this MAC address instead of its permanent MAC address. This is known as MAC cloning or spoofing.</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>
</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>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>
@@ -1729,30 +1759,47 @@
<td>If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames.</td>
</tr>
<tr>
-<td><pre class="screen">s390-subchannels</pre></td>
-<td><pre class="screen">array of string</pre></td>
+<td><pre class="screen">name</pre></td>
+<td><pre class="screen">string</pre></td>
+<td><pre class="screen">802-3-ethernet</pre></td>
+<td>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".</td>
+</tr>
+<tr>
+<td><pre class="screen">port</pre></td>
+<td><pre class="screen">string</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>
+<td>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.</td>
</tr>
<tr>
<td><pre class="screen">s390-nettype</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>s390 network device type; one of 'qeth', 'lcs', or 'ctc', representing the different types of virtual network devices available on s390 systems.</td>
+<td>s390 network device type; one of "qeth", "lcs", or "ctc", representing the different types of virtual network devices available on s390 systems.</td>
</tr>
<tr>
<td><pre class="screen">s390-options</pre></td>
-<td><pre class="screen">dict of (string::string)</pre></td>
+<td><pre class="screen">dict of string to string</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>
+<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. Key names must contain only alphanumeric characters (ie, [a-zA-Z0-9]).</td>
+</tr>
+<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>Identifies specific subchannels that this network device uses for communication 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>
+<td><pre class="screen">speed</pre></td>
+<td><pre class="screen">uint32</pre></td>
+<td><pre class="screen">0</pre></td>
+<td>If non-zero, request that the device use only the specified speed. In Mbit/s, ie 100 == 100Mbit/s.</td>
</tr>
</tbody>
</table></div>
</div>
-<p><br class="table-break">
-</p>
+<p><br class="table-break"></p>
<div class="table">
-<a name="id-1.3.3.2.24"></a><p class="title"><b>Table 24. 802-11-wireless setting</b></p>
+<a name="id-1.3.3.26.1"></a><p class="title"><b>Table 25. 802-11-wireless setting</b></p>
<div class="table-contents"><table summary="802-11-wireless setting" border="1">
<colgroup>
<col>
@@ -1768,70 +1815,52 @@
</tr></thead>
<tbody>
<tr>
-<td><pre class="screen">name</pre></td>
-<td><pre class="screen">string</pre></td>
-<td><pre class="screen">802-11-wireless</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">ssid</pre></td>
-<td><pre class="screen">byte array</pre></td>
-<td><pre class="screen">[]</pre></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">band</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>Wi-Fi network mode; one of 'infrastructure', 'adhoc' or 'ap'. If blank, infrastructure is assumed.</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">band</pre></td>
-<td><pre class="screen">string</pre></td>
+<td><pre class="screen">bssid</pre></td>
+<td><pre class="screen">byte array</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 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>
+<td>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.</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 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>
+<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>
+<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, 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.</td>
-</tr>
-<tr>
-<td><pre class="screen">rate</pre></td>
-<td><pre class="screen">uint32</pre></td>
-<td><pre class="screen">0</pre></td>
-<td>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.</td>
+<td><pre class="screen"></pre></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">tx-power</pre></td>
-<td><pre class="screen">uint32</pre></td>
-<td><pre class="screen">0</pre></td>
-<td>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.</td>
+<td><pre class="screen">hidden</pre></td>
+<td><pre class="screen">boolean</pre></td>
+<td><pre class="screen">FALSE</pre></td>
+<td>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.</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>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>
+<td><pre class="screen"></pre></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">mac-address-blacklist</pre></td>
+<td><pre class="screen">array of string</pre></td>
<td><pre class="screen">[]</pre></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>
+<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>
-<td><pre class="screen">mac-address-blacklist</pre></td>
-<td><pre class="screen">array of string</pre></td>
+<td><pre class="screen">mode</pre></td>
+<td><pre class="screen">string</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>
+<td>Wi-Fi network mode; one of "infrastructure", "adhoc" or "ap". If blank, infrastructure is assumed.</td>
</tr>
<tr>
<td><pre class="screen">mtu</pre></td>
@@ -1840,30 +1869,47 @@
<td>If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames.</td>
</tr>
<tr>
+<td><pre class="screen">name</pre></td>
+<td><pre class="screen">string</pre></td>
+<td><pre class="screen">802-11-wireless</pre></td>
+<td>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".</td>
+</tr>
+<tr>
+<td><pre class="screen">rate</pre></td>
+<td><pre class="screen">uint32</pre></td>
+<td><pre class="screen">0</pre></td>
+<td>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.</td>
+</tr>
+<tr>
+<td><pre class="screen">security</pre></td>
+<td><pre class="screen">None</pre></td>
+<td><pre class="screen"></pre></td>
+<td>This property is deprecated, but can be set to the value '802-11-wireless-security' when a wireless security setting is also present in the connection dictionary, for compatibility with very old NetworkManager daemons.</td>
+</tr>
+<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 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>
+<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>
-<td><pre class="screen">string</pre></td>
+<td><pre class="screen">ssid</pre></td>
+<td><pre class="screen">byte array</pre></td>
<td><pre class="screen"></pre></td>
-<td>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.</td>
+<td>SSID of the Wi-Fi network. Must be specified.</td>
</tr>
<tr>
-<td><pre class="screen">hidden</pre></td>
-<td><pre class="screen">boolean</pre></td>
-<td><pre class="screen">FALSE</pre></td>
-<td>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.</td>
+<td><pre class="screen">tx-power</pre></td>
+<td><pre class="screen">uint32</pre></td>
+<td><pre class="screen">0</pre></td>
+<td>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.</td>
</tr>
</tbody>
</table></div>
</div>
-<p><br class="table-break">
-</p>
+<p><br class="table-break"></p>
<div class="table">
-<a name="id-1.3.3.2.25"></a><p class="title"><b>Table 25. 802-11-wireless-security setting</b></p>
+<a name="id-1.3.3.27.1"></a><p class="title"><b>Table 26. 802-11-wireless-security setting</b></p>
<div class="table-contents"><table summary="802-11-wireless-security setting" border="1">
<colgroup>
<col>
@@ -1879,118 +1925,117 @@
</tr></thead>
<tbody>
<tr>
-<td><pre class="screen">name</pre></td>
+<td><pre class="screen">auth-alg</pre></td>
<td><pre class="screen">string</pre></td>
-<td><pre class="screen">802-11-wireless-security</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>
+<td><pre class="screen"></pre></td>
+<td>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.</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>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>
<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 Wi-Fi connection that uses security.</td>
+<td>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.</td>
</tr>
<tr>
-<td><pre class="screen">wep-tx-keyidx</pre></td>
-<td><pre class="screen">uint32</pre></td>
-<td><pre class="screen">0</pre></td>
-<td>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.</td>
+<td><pre class="screen">leap-password</pre></td>
+<td><pre class="screen">string</pre></td>
+<td><pre class="screen"></pre></td>
+<td>The login password for legacy LEAP connections (ie, key-mgmt = "ieee8021x" and auth-alg = "leap").</td>
</tr>
<tr>
-<td><pre class="screen">auth-alg</pre></td>
-<td><pre class="screen">string</pre></td>
+<td><pre class="screen">leap-password-flags</pre></td>
+<td><pre class="screen">NMSettingSecretFlags (uint32)</pre></td>
<td><pre class="screen"></pre></td>
-<td>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.</td>
+<td>Flags indicating how to handle the "leap-password" property.</td>
</tr>
<tr>
-<td><pre class="screen">proto</pre></td>
-<td><pre class="screen">array of string</pre></td>
+<td><pre class="screen">leap-username</pre></td>
+<td><pre class="screen">string</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>
+<td>The login username for legacy LEAP connections (ie, key-mgmt = "ieee8021x" and auth-alg = "leap").</td>
+</tr>
+<tr>
+<td><pre class="screen">name</pre></td>
+<td><pre class="screen">string</pre></td>
+<td><pre class="screen">802-11-wireless-security</pre></td>
+<td>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".</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 '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">proto</pre></td>
<td><pre class="screen">array of string</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>
+<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">leap-username</pre></td>
+<td><pre class="screen">psk</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>The login username for legacy LEAP connections (ie, key-mgmt = 'ieee8021x' and auth-alg = 'leap').</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">wep-key0</pre></td>
-<td><pre class="screen">string</pre></td>
+<td><pre class="screen">psk-flags</pre></td>
+<td><pre class="screen">NMSettingSecretFlags (uint32)</pre></td>
<td><pre class="screen"></pre></td>
-<td>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.</td>
+<td>Flags indicating how to handle the "psk" property.</td>
</tr>
<tr>
-<td><pre class="screen">wep-key1</pre></td>
-<td><pre class="screen">string</pre></td>
+<td><pre class="screen">wep-key-flags</pre></td>
+<td><pre class="screen">NMSettingSecretFlags (uint32)</pre></td>
<td><pre class="screen"></pre></td>
-<td>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.</td>
+<td>Flags indicating how to handle the "wep-key0", "wep-key1", "wep-key2", and "wep-key3" properties.</td>
</tr>
<tr>
-<td><pre class="screen">wep-key2</pre></td>
-<td><pre class="screen">string</pre></td>
+<td><pre class="screen">wep-key-type</pre></td>
+<td><pre class="screen">NMWepKeyType (uint32)</pre></td>
<td><pre class="screen"></pre></td>
-<td>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.</td>
+<td>Controls the interpretation of WEP keys. Allowed values are NM_WEP_KEY_TYPE_KEY (1), 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 (2), 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.</td>
</tr>
<tr>
-<td><pre class="screen">wep-key3</pre></td>
+<td><pre class="screen">wep-key0</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>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.</td>
+<td>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.</td>
</tr>
<tr>
-<td><pre class="screen">wep-key-flags</pre></td>
-<td><pre class="screen">uint32</pre></td>
-<td><pre class="screen">0</pre></td>
-<td>Flags indicating how to handle the WEP keys. (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">wep-key-type</pre></td>
-<td><pre class="screen">uint32</pre></td>
-<td><pre class="screen">0</pre></td>
-<td>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.</td>
-</tr>
-<tr>
-<td><pre class="screen">psk</pre></td>
+<td><pre class="screen">wep-key1</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 Wi-Fi network.</td>
+<td>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.</td>
</tr>
<tr>
-<td><pre class="screen">psk-flags</pre></td>
-<td><pre class="screen">uint32</pre></td>
-<td><pre class="screen">0</pre></td>
-<td>Flags indicating how to handle the WPA PSK key. (see <a class="xref" href="secrets-flags.html" title="Secret flag types">the section called “Secret flag typesâ€</a> for flag values)</td>
+<td><pre class="screen">wep-key2</pre></td>
+<td><pre class="screen">string</pre></td>
+<td><pre class="screen"></pre></td>
+<td>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.</td>
</tr>
<tr>
-<td><pre class="screen">leap-password</pre></td>
+<td><pre class="screen">wep-key3</pre></td>
<td><pre class="screen">string</pre></td>
<td><pre class="screen"></pre></td>
-<td>The login password for legacy LEAP connections (ie, key-mgmt = 'ieee8021x' and auth-alg = 'leap').</td>
+<td>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.</td>
</tr>
<tr>
-<td><pre class="screen">leap-password-flags</pre></td>
+<td><pre class="screen">wep-tx-keyidx</pre></td>
<td><pre class="screen">uint32</pre></td>
<td><pre class="screen">0</pre></td>
-<td>Flags indicating how to handle the LEAP password. (see <a class="xref" href="secrets-flags.html" title="Secret flag types">the section called “Secret flag typesâ€</a> for flag values)</td>
+<td>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.</td>
</tr>
</tbody>
</table></div>
</div>
-<p><br class="table-break">
- </p>
+<p><br class="table-break"></p>
</div>
</div>
<div class="footer">
diff --git a/docs/api/html/spec.html b/docs/api/html/spec.html
index 84819cabc..cf717b594 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.10.0</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 1.0.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.10.0</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 1.0.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
@@ -162,11 +162,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
</dd></dl></div><div><h4>Returns</h4><dl><dt><code>active_connection</code> -
<code>o</code></dt><dd>
The path of the active connection object representing this active connection.
- </dd></dl></div><div><h4>Possible errors</h4><dl><dt><code>org.freedesktop.NetworkManager.Error.UnknownConnection</code></dt><dd>
- Connection was not provided by the settings service.
- <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.Error.UnknownDevice</code></dt><dd>
- Unknown device.
- <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.Error.ConnectionActivating</code></dt><dd>Another connection is already activating or the same connection is already active. FIXME: check if the error name is correct. FIXME: split into 2 errors?</dd><dt><code>org.freedesktop.NetworkManager.Error.ConnectionInvalid</code></dt><dd>The connection is invalid for this device.</dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.AddAndActivateConnection" id="org.freedesktop.NetworkManager.AddAndActivateConnection">AddAndActivateConnection</a> (
+ </dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.AddAndActivateConnection" id="org.freedesktop.NetworkManager.AddAndActivateConnection">AddAndActivateConnection</a> (
a{sa{sv}}: connection, o: device, o: specific_object
) &#8594;
o, o</h3><div class="docstring">
@@ -195,11 +191,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
</dd><dt><code>active_connection</code> -
<code>o</code></dt><dd>
The path of the active connection object representing this active connection.
- </dd></dl></div><div><h4>Possible errors</h4><dl><dt><code>org.freedesktop.NetworkManager.Error.UnknownConnection</code></dt><dd>
- Connection was not provided by the settings service.
- <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.Error.UnknownDevice</code></dt><dd>
- Unknown device.
- <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.Error.ConnectionInvalid</code></dt><dd>The connection is invalid for this device.</dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.DeactivateConnection" id="org.freedesktop.NetworkManager.DeactivateConnection">DeactivateConnection</a> (
+ </dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.DeactivateConnection" id="org.freedesktop.NetworkManager.DeactivateConnection">DeactivateConnection</a> (
o: active_connection
) &#8594;
nothing</h3><div class="docstring">
@@ -254,7 +246,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
Set logging verbosity and which operations are logged.
</div><div><h4>Parameters</h4><dl><dt><code>level</code> -
<code>s</code></dt><dd>
- One of [ERR, WARN, INFO, DEBUG].
+ One of [ERR, WARN, INFO, DEBUG, TRACE].
</dd><dt><code>domains</code> -
<code>s</code></dt><dd>
A combination of logging domains separated by commas (','), or "NONE"
@@ -277,7 +269,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
Get current logging verbosity level and operations domains.
</div><div><h4>Returns</h4><dl><dt><code>level</code> -
<code>s</code></dt><dd>
- One of [ERR, WARN, INFO, DEBUG].
+ One of [ERR, WARN, INFO, DEBUG, TRACE].
</dd><dt><code>domains</code> -
<code>s</code></dt><dd>
For available domains see SetLogging() call.
@@ -383,6 +375,12 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
indicates the connection that has the default route. If there
is a VPN active with the default route, then this indicates
the connection that contains the route to the VPN endpoint.
+ </dd><dt><code>PrimaryConnectionType</code> -
+ <code>s</code> -
+ <code>(read)</code></dt><dd>
+ The connection type of the "primary" active connection being
+ used to access the network. This is the same as the Type
+ property on the object indicated by PrimaryConnection.
</dd><dt><code>ActivatingConnection</code> -
<code>o</code> -
<code>(read)</code></dt><dd>
@@ -491,6 +489,12 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
) &#8594;
nothing</h3><div class="docstring">
Disconnects a device and prevents the device from automatically activating further connections without user intervention.
+ </div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.Device.Delete" id="org.freedesktop.NetworkManager.Device.Delete">Delete</a> (
+
+ ) &#8594;
+ nothing</h3><div class="docstring">
+ Deletes a software device from NetworkManager and removes the interface from the system.
+ The method returns an error when called for a hardware device.
</div></div><h2>Signals:</h2><div class="signal"><h3><a name="org.freedesktop.NetworkManager.Device.StateChanged" id="org.freedesktop.NetworkManager.Device.StateChanged">StateChanged</a> (
u: new_state, u: old_state, u: reason
)</h3><div class="docstring"></div><div><h4>Parameters</h4><dl><dt><code>new_state</code> -
@@ -603,7 +607,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
If TRUE, indicates the device is allowed to autoconnect. If FALSE,
manual intervention is required before the device will automatically
connect to a known network, such as activating a connection using the
- device, or setting this property to TRUE.
+ device, or setting this property to TRUE. This property cannot be
+ set to TRUE for default-unmanaged devices, since they never autoconnect.
</dd><dt><code>FirmwareMissing</code> -
<code>b</code> -
<code>(read)</code></dt><dd>
@@ -1212,6 +1217,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
<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>Parent</code> -
+ <code>o</code> -
+ <code>(read)</code></dt><dd>
+ Object path of the parent device of this VLAN device.
</dd><dt><code>VlanId</code> -
<code>u</code> -
<code>(read)</code></dt><dd>
@@ -1257,19 +1266,39 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
(<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> -
+ </dd></dl></div></div><h2>Properties:</h2><dl><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>Routes</code> -
+ <code>(read)</code></dt><dd>
+ Array of arrays of IPv4 address/prefix/gateway. All 3
+ elements of each array are in network byte order. Essentially:
+ [(addr, prefix, gateway), (addr, prefix, gateway), ...]
+
+ Deprecated: use AddressData and Gateway
+ </dd><dt><code>AddressData</code> -
+ <code>aa{sv}</code> -
+ <code>(read)</code></dt><dd>
+ Array of IP address data objects. All addresses will include
+ "address" (an IP address string), and "prefix" (a uint). Some
+ addresses may include additional attributes.
+ </dd><dt><code>Gateway</code> -
+ <code>s</code> -
+ <code>(read)</code></dt><dd>The gateway in use.</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), ...]
+ <code>(read)</code></dt><dd>
+ Arrays 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), ...]
+
+ Deprecated: use RouteData
+ </dd><dt><code>RouteData</code> -
+ <code>aa{sv}</code> -
+ <code>(read)</code></dt><dd>
+ Array of IP route data objects. All routes will include "dest"
+ (an IP address string) and "prefix" (a uint). Some routes may
+ include "next-hop" (an IP address string), "metric" (a uint),
+ and additional attributes.
</dd><dt><code>Nameservers</code> -
<code>au</code> -
<code>(read)</code></dt><dd>The nameservers in use.</dd><dt><code>Domains</code> -
@@ -1287,13 +1316,34 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
(<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> -
+ </dd></dl></div></div><h2>Properties:</h2><dl><dt><code>Addresses</code> -
<code>a(ayuay)</code> -
- <code>(read)</code></dt><dd>Tuples of IPv6 address/prefix/gateway.</dd><dt><code>Routes</code> -
+ <code>(read)</code></dt><dd>
+ Array of tuples of IPv6 address/prefix/gateway.
+
+ Deprecated: use AddressData and Gateway.
+ </dd><dt><code>AddressData</code> -
+ <code>aa{sv}</code> -
+ <code>(read)</code></dt><dd>
+ Array of IP address data objects. All addresses will include
+ "address" (an IP address string), and "prefix" (a uint). Some
+ addresses may include additional attributes.
+ </dd><dt><code>Gateway</code> -
+ <code>s</code> -
+ <code>(read)</code></dt><dd>The gateway in use.</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>(read)</code></dt><dd>
+ Tuples of IPv6 route/prefix/next-hop/metric.
+
+ Deprecated: use RouteData
+ </dd><dt><code>RouteData</code> -
+ <code>aa{sv}</code> -
+ <code>(read)</code></dt><dd>
+ Array of IP route data objects. All routes will include "dest"
+ (an IP address string) and "prefix" (a uint). Some routes may
+ include "next-hop" (an IP address string), "metric" (a uint),
+ and additional attributes.
+ </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> -
@@ -1539,7 +1589,12 @@ 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><div class="method"><h3><a name="org.freedesktop.NetworkManager.Settings.Connection.Save" id="org.freedesktop.NetworkManager.Settings.Connection.Save">Save</a> (
+ </dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.Settings.Connection.ClearSecrets" id="org.freedesktop.NetworkManager.Settings.Connection.ClearSecrets">ClearSecrets</a> (
+
+ ) &#8594;
+ nothing</h3><div class="docstring">
+ Clear the secrets belonging to this network connection profile.
+ </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">
@@ -2117,7 +2172,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
Emitted when the plugin state changes.
</div><div><h4>Parameters</h4><dl><dt><code>state</code> -
<code>u</code>
- (<a xmlns="" href="#type-NM_VPN_CONNECTION_STATE">NM_VPN_CONNECTION_STATE</a>)
+ (<a xmlns="" href="#type-NM_VPN_SERVICE_STATE">NM_VPN_SERVICE_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.SecretsRequired" id="org.freedesktop.NetworkManager.VPN.Plugin.SecretsRequired">SecretsRequired</a> (
@@ -2183,10 +2238,24 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
</dd></dl></div></div><h2>Properties:</h2><dl><dt><code>State</code> -
<code>u</code> -
<code>(read)</code>
- (<a xmlns="" href="#type-NM_VPN_CONNECTION_STATE">NM_VPN_CONNECTION_STATE</a>)
+ (<a xmlns="" href="#type-NM_VPN_SERVICE_STATE">NM_VPN_SERVICE_STATE</a>)
</dt><dd>
The state of the plugin.
- </dd></dl><h2>Enumerated types:</h2><h3><a name="type-NM_VPN_PLUGIN_FAILURE" id="type-NM_VPN_PLUGIN_FAILURE">NM_VPN_PLUGIN_FAILURE</a></h3><dl><dt><code>NM_VPN_PLUGIN_FAILURE_LOGIN_FAILED = 0</code></dt><dd>
+ </dd></dl><h2>Enumerated types:</h2><h3><a name="type-NM_VPN_SERVICE_STATE" id="type-NM_VPN_SERVICE_STATE">NM_VPN_SERVICE_STATE</a></h3><dl><dt><code>NM_VPN_SERVICE_STATE_UNKNOWN = 0</code></dt><dd>
+ The state of the VPN plugin is unknown.
+ </dd><dt><code>NM_VPN_SERVICE_STATE_INIT = 1</code></dt><dd>
+ The VPN plugin is initialized.
+ </dd><dt><code>NM_VPN_SERVICE_STATE_SHUTDOWN = 2</code></dt><dd>
+ (Not used.)
+ </dd><dt><code>NM_VPN_SERVICE_STATE_STARTING = 3</code></dt><dd>
+ The plugin is attempting to connect to a VPN server.
+ </dd><dt><code>NM_VPN_SERVICE_STATE_STARTED = 4</code></dt><dd>
+ The plugin has connected to a VPN server.
+ </dd><dt><code>NM_VPN_SERVICE_STATE_STOPPING = 5</code></dt><dd>
+ The plugin is disconnecting from the VPN server.
+ </dd><dt><code>NM_VPN_SERVICE_STATE_STOPPED = 6</code></dt><dd>
+ The plugin has disconnected from the VPN server.
+ </dd></dl><h3><a name="type-NM_VPN_PLUGIN_FAILURE" id="type-NM_VPN_PLUGIN_FAILURE">NM_VPN_PLUGIN_FAILURE</a></h3><dl><dt><code>NM_VPN_PLUGIN_FAILURE_LOGIN_FAILED = 0</code></dt><dd>
Login failed.
</dd><dt><code>NM_VPN_PLUGIN_FAILURE_CONNECT_FAILED = 1</code></dt><dd>
Connect failed.
@@ -2295,6 +2364,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
- u</li><li><code><a href="#type-NM_VPN_CONNECTION_STATE">NM_VPN_CONNECTION_STATE</a></code>
- u</li><li><code><a href="#type-NM_VPN_CONNECTION_STATE_REASON">NM_VPN_CONNECTION_STATE_REASON</a></code>
- u</li><li><code><a href="#type-NM_VPN_PLUGIN_FAILURE">NM_VPN_PLUGIN_FAILURE</a></code>
+ - u</li><li><code><a href="#type-NM_VPN_SERVICE_STATE">NM_VPN_SERVICE_STATE</a></code>
- u</li><li><code><a href="#type-NM_WIMAX_NSP_NETWORK_TYPE">NM_WIMAX_NSP_NETWORK_TYPE</a></code>
- u</li><li><code><a href="#type-String_String_Map">String_String_Map</a></code>
- a{ s &#8594; s }
diff --git a/docs/api/network-manager-docs.xml b/docs/api/network-manager-docs.xml
index fadc88628..0f9c7dbb4 100644
--- a/docs/api/network-manager-docs.xml
+++ b/docs/api/network-manager-docs.xml
@@ -54,7 +54,17 @@
setting names (like "wimax" or "bluetooth") to a dictionary of
key/value pairs that represents each itself.
</para>
- <xi:include href="settings-spec.xml" />
+ <xi:include href="settings-spec.xml">
+ <xi:fallback>
+ <section>
+ <title>Configuration Settings</title>
+ <note><para>
+ (NetworkManager was built without full introspection support. Setting
+ documentation is not available.)
+ </para></note>
+ </section>
+ </xi:fallback>
+ </xi:include>
<section id="secrets-flags">
<title>Secret flag types</title>
<para>
diff --git a/docs/api/settings-spec.xml b/docs/api/settings-spec.xml
index a0c54945f..24a413aef 100644
--- a/docs/api/settings-spec.xml
+++ b/docs/api/settings-spec.xml
@@ -1,1811 +1,303 @@
<?xml version="1.0"?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
-<!ENTITY % local.common.attrib "xmlns:xi CDATA #FIXED 'http://www.w3.org/2003/XInclude'">]><section>
- <title>Configuration Settings</title>
- <para>
-<table>
- <title>802-1x 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>802-1x</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>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', '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>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>Identity string for EAP authentication methods. Often the user's user or login name.</entry>
- </row>
- <row>
- <entry><screen>anonymous-identity</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>Anonymous identity string for EAP authentication methods. Used as the unencrypted identity with EAP types that support different tunneled identity like EAP-TTLS.</entry>
- </row>
- <row>
- <entry><screen>pac-file</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>UTF-8 encoded file path containing PAC for EAP-FAST.</entry>
- </row>
- <row>
- <entry><screen>ca-cert</screen></entry>
- <entry><screen>byte array</screen></entry>
- <entry><screen>[]</screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>ca-path</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>subject-match</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>altsubject-matches</screen></entry>
- <entry><screen>array of string</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>
- <entry><screen>client-cert</screen></entry>
- <entry><screen>byte array</screen></entry>
- <entry><screen>[]</screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>phase1-peapver</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>phase1-peaplabel</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>phase1-fast-provisioning</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>phase2-auth</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>phase2-autheap</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>phase2-ca-cert</screen></entry>
- <entry><screen>byte array</screen></entry>
- <entry><screen>[]</screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>phase2-ca-path</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>phase2-subject-match</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>phase2-altsubject-matches</screen></entry>
- <entry><screen>array of string</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>
- <entry><screen>phase2-client-cert</screen></entry>
- <entry><screen>byte array</screen></entry>
- <entry><screen>[]</screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>password</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>UTF-8 encoded password used for EAP authentication methods.</entry>
- </row>
- <row>
- <entry><screen>password-flags</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>0</screen></entry>
- <entry>Flags indicating how to handle the 802.1x password. (see <xref linkend="secrets-flags"/> for flag values)</entry>
- </row>
- <row>
- <entry><screen>password-raw</screen></entry>
- <entry><screen>byte array</screen></entry>
- <entry><screen>[]</screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>password-raw-flags</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>0</screen></entry>
- <entry>Flags indicating how to handle the 802.1x password byte array. (see <xref linkend="secrets-flags"/> for flag values)</entry>
- </row>
- <row>
- <entry><screen>private-key</screen></entry>
- <entry><screen>byte array</screen></entry>
- <entry><screen>[]</screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>private-key-password</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>private-key-password-flags</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>0</screen></entry>
- <entry>Flags indicating how to handle the 802.1x private key password. (see <xref linkend="secrets-flags"/> for flag values)</entry>
- </row>
- <row>
- <entry><screen>phase2-private-key</screen></entry>
- <entry><screen>byte array</screen></entry>
- <entry><screen>[]</screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>phase2-private-key-password</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>phase2-private-key-password-flags</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>0</screen></entry>
- <entry>Flags indicating how to handle the 802.1x phase2 private key password. (see <xref linkend="secrets-flags"/> for flag values)</entry>
- </row>
- <row>
- <entry><screen>pin</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>PIN used for EAP authentication methods.</entry>
- </row>
- <row>
- <entry><screen>pin-flags</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>0</screen></entry>
- <entry>Flags indicating how to handle the 802.1x PIN. (see <xref linkend="secrets-flags"/> for flag values)</entry>
- </row>
- <row>
- <entry><screen>system-ca-certs</screen></entry>
- <entry><screen>boolean</screen></entry>
- <entry><screen>FALSE</screen></entry>
- <entry>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.</entry>
- </row>
- </tbody>
- </tgroup>
-</table>
-<table>
- <title>adsl 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>adsl</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>username</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>Username used to authenticate with the pppoa service.</entry>
- </row>
- <row>
- <entry><screen>password</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>Password used to authenticate with the pppoa service.</entry>
- </row>
- <row>
- <entry><screen>password-flags</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>0</screen></entry>
- <entry>Flags indicating how to handle the ADSL password. (see <xref linkend="secrets-flags"/> for flag values)</entry>
- </row>
- <row>
- <entry><screen>protocol</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>ADSL connection protocol.</entry>
- </row>
- <row>
- <entry><screen>encapsulation</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>Encapsulation of ADSL connection</entry>
- </row>
- <row>
- <entry><screen>vpi</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>0</screen></entry>
- <entry>VPI of ADSL connection</entry>
- </row>
- <row>
- <entry><screen>vci</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>0</screen></entry>
- <entry>VCI of ADSL connection</entry>
- </row>
- </tbody>
- </tgroup>
-</table>
-<table>
- <title>bluetooth 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>bluetooth</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>bdaddr</screen></entry>
- <entry><screen>byte array</screen></entry>
- <entry><screen>[]</screen></entry>
- <entry>The Bluetooth address of the device</entry>
- </row>
- <row>
- <entry><screen>type</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>Either 'dun' for Dial-Up Networking connections or 'panu' for Personal Area Networking connections.</entry>
- </row>
- </tbody>
- </tgroup>
-</table>
-<table>
- <title>bond 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>bond</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 bonding network interface</entry>
- </row>
- <row>
- <entry><screen>options</screen></entry>
- <entry><screen>dict of (string::string)</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>
- </tgroup>
-</table>
-<table>
- <title>bridge 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>bridge</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 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>
- <entry>Controls whether Spanning Tree Protocol (STP) is enabled for this bridge.</entry>
- </row>
- <row>
- <entry><screen>priority</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>32768</screen></entry>
- <entry>Sets the Spanning Tree Protocol (STP) priority for this bridge. Lower values are 'better'; the lowest priority bridge will be elected the root bridge.</entry>
- </row>
- <row>
- <entry><screen>forward-delay</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>15</screen></entry>
- <entry>The Spanning Tree Protocol (STP) forwarding delay, in seconds.</entry>
- </row>
- <row>
- <entry><screen>hello-time</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>2</screen></entry>
- <entry>The Spanning Tree Protocol (STP) hello time, in seconds.</entry>
- </row>
- <row>
- <entry><screen>max-age</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>20</screen></entry>
- <entry>The Spanning Tree Protocol (STP) maximum message age, in seconds.</entry>
- </row>
- <row>
- <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>
- </row>
- </tbody>
- </tgroup>
-</table>
-<table>
- <title>bridge-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>bridge-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>priority</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>32</screen></entry>
- <entry>The Spanning Tree Protocol (STP) priority of this bridge port</entry>
- </row>
- <row>
- <entry><screen>path-cost</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>100</screen></entry>
- <entry>The Spanning Tree Protocol (STP) port cost for destinations via this port.</entry>
- </row>
- <row>
- <entry><screen>hairpin-mode</screen></entry>
- <entry><screen>boolean</screen></entry>
- <entry><screen>FALSE</screen></entry>
- <entry>Enables or disabled 'hairpin mode' for the port, which allows frames to be sent back out through the port the frame was received on.</entry>
- </row>
- </tbody>
- </tgroup>
-</table>
-<table>
- <title>cdma 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>cdma</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>number</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>username</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>Username used to authenticate with the network, if required. Note that many providers do not require a username or accept any username.</entry>
- </row>
- <row>
- <entry><screen>password</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>Password used to authenticate with the network, if required. Note that many providers do not require a password or accept any password.</entry>
- </row>
- <row>
- <entry><screen>password-flags</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>0</screen></entry>
- <entry>Flags indicating how to handle the CDMA password. (see <xref linkend="secrets-flags"/> for flag values)</entry>
- </row>
- </tbody>
- </tgroup>
-</table>
-<table>
- <title>connection 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>connection</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>id</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <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 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>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>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).</entry>
- </row>
- <row>
- <entry><screen>permissions</screen></entry>
- <entry><screen>array of string</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>
- <entry><screen>autoconnect</screen></entry>
- <entry><screen>boolean</screen></entry>
- <entry><screen>TRUE</screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <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. 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>
- <entry><screen>boolean</screen></entry>
- <entry><screen>FALSE</screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>zone</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>master</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>Interface name of the master device or UUID of the master connection</entry>
- </row>
- <row>
- <entry><screen>slave-type</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>Setting name describing the type of slave this connection is (ie, 'bond') or NULL if this connection is not a slave.</entry>
- </row>
- <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. 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>
-</table>
-<table>
- <title>gsm 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>gsm</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>number</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>username</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>Username used to authenticate with the network, if required. Note that many providers do not require a username or accept any username.</entry>
- </row>
- <row>
- <entry><screen>password</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>Password used to authenticate with the network, if required. Note that many providers do not require a password or accept any password.</entry>
- </row>
- <row>
- <entry><screen>password-flags</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>0</screen></entry>
- <entry>Flags indicating how to handle the GSM password. (see <xref linkend="secrets-flags"/> for flag values)</entry>
- </row>
- <row>
- <entry><screen>apn</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>network-id</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <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. 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>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>pin-flags</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>0</screen></entry>
- <entry>Flags indicating how to handle the GSM SIM PIN. (see <xref linkend="secrets-flags"/> for flag values)</entry>
- </row>
- <row>
- <entry><screen>allowed-bands</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>1</screen></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>
- <entry><screen>boolean</screen></entry>
- <entry><screen>FALSE</screen></entry>
- <entry>When TRUE, only connections to the home network will be allowed. Connections to roaming networks will not be made.</entry>
- </row>
- </tbody>
- </tgroup>
-</table>
-<table>
- <title>infiniband 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>infiniband</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>mac-address</screen></entry>
- <entry><screen>byte array</screen></entry>
- <entry><screen>[]</screen></entry>
- <entry>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).</entry>
- </row>
- <row>
- <entry><screen>mtu</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>0</screen></entry>
- <entry>If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple frames.</entry>
- </row>
- <row>
- <entry><screen>transport-mode</screen></entry>
- <entry><screen>string</screen></entry>
- <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>
-<table>
- <title>ipv4 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>ipv4</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>method</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>dns</screen></entry>
- <entry><screen>array of uint32</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>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>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>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>
- <entry><screen>ignore-auto-routes</screen></entry>
- <entry><screen>boolean</screen></entry>
- <entry><screen>FALSE</screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>ignore-auto-dns</screen></entry>
- <entry><screen>boolean</screen></entry>
- <entry><screen>FALSE</screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>dhcp-client-id</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>dhcp-send-hostname</screen></entry>
- <entry><screen>boolean</screen></entry>
- <entry><screen>TRUE</screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>dhcp-hostname</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>If the 'dhcp-send-hostname' property is TRUE, then the specified name will be sent to the DHCP server when acquiring a lease.</entry>
- </row>
- <row>
- <entry><screen>never-default</screen></entry>
- <entry><screen>boolean</screen></entry>
- <entry><screen>FALSE</screen></entry>
- <entry>If TRUE, this connection will never be the default IPv4 connection, meaning it will never be assigned the default route by NetworkManager.</entry>
- </row>
- <row>
- <entry><screen>may-fail</screen></entry>
- <entry><screen>boolean</screen></entry>
- <entry><screen>TRUE</screen></entry>
- <entry>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.</entry>
- </row>
- </tbody>
- </tgroup>
-</table>
-<table>
- <title>ipv6 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>ipv6</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>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' method is not yet supported.</entry>
- </row>
- <row>
- <entry><screen>dhcp-hostname</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>The specified name will be sent to the DHCP server when acquiring a lease.</entry>
- </row>
- <row>
- <entry><screen>dns</screen></entry>
- <entry><screen>array of byte array</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>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>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>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>
- <entry><screen>ignore-auto-routes</screen></entry>
- <entry><screen>boolean</screen></entry>
- <entry><screen>FALSE</screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>ignore-auto-dns</screen></entry>
- <entry><screen>boolean</screen></entry>
- <entry><screen>FALSE</screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>never-default</screen></entry>
- <entry><screen>boolean</screen></entry>
- <entry><screen>FALSE</screen></entry>
- <entry>If TRUE, this connection will never be the default IPv6 connection, meaning it will never be assigned the default IPv6 route by NetworkManager.</entry>
- </row>
- <row>
- <entry><screen>may-fail</screen></entry>
- <entry><screen>boolean</screen></entry>
- <entry><screen>TRUE</screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>ip6-privacy</screen></entry>
- <entry><screen>int32</screen></entry>
- <entry><screen>-1</screen></entry>
- <entry>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).</entry>
- </row>
- </tbody>
- </tgroup>
-</table>
-<table>
- <title>802-11-olpc-mesh 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>802-11-olpc-mesh</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>ssid</screen></entry>
- <entry><screen>byte array</screen></entry>
- <entry><screen>[]</screen></entry>
- <entry>SSID of the mesh network to join.</entry>
- </row>
- <row>
- <entry><screen>channel</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>0</screen></entry>
- <entry>Channel on which the mesh network to join is located.</entry>
- </row>
- <row>
- <entry><screen>dhcp-anycast-address</screen></entry>
- <entry><screen>byte array</screen></entry>
- <entry><screen>[]</screen></entry>
- <entry>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.</entry>
- </row>
- </tbody>
- </tgroup>
-</table>
-<table>
- <title>ppp 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>ppp</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>noauth</screen></entry>
- <entry><screen>boolean</screen></entry>
- <entry><screen>TRUE</screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>refuse-eap</screen></entry>
- <entry><screen>boolean</screen></entry>
- <entry><screen>FALSE</screen></entry>
- <entry>If TRUE, the EAP authentication method will not be used.</entry>
- </row>
- <row>
- <entry><screen>refuse-pap</screen></entry>
- <entry><screen>boolean</screen></entry>
- <entry><screen>FALSE</screen></entry>
- <entry>If TRUE, the PAP authentication method will not be used.</entry>
- </row>
- <row>
- <entry><screen>refuse-chap</screen></entry>
- <entry><screen>boolean</screen></entry>
- <entry><screen>FALSE</screen></entry>
- <entry>If TRUE, the CHAP authentication method will not be used.</entry>
- </row>
- <row>
- <entry><screen>refuse-mschap</screen></entry>
- <entry><screen>boolean</screen></entry>
- <entry><screen>FALSE</screen></entry>
- <entry>If TRUE, the MSCHAP authentication method will not be used.</entry>
- </row>
- <row>
- <entry><screen>refuse-mschapv2</screen></entry>
- <entry><screen>boolean</screen></entry>
- <entry><screen>FALSE</screen></entry>
- <entry>If TRUE, the MSCHAPv2 authentication method will not be used.</entry>
- </row>
- <row>
- <entry><screen>nobsdcomp</screen></entry>
- <entry><screen>boolean</screen></entry>
- <entry><screen>FALSE</screen></entry>
- <entry>If TRUE, BSD compression will not be requested.</entry>
- </row>
- <row>
- <entry><screen>nodeflate</screen></entry>
- <entry><screen>boolean</screen></entry>
- <entry><screen>FALSE</screen></entry>
- <entry>If TRUE, 'deflate' compression will not be requested.</entry>
- </row>
- <row>
- <entry><screen>no-vj-comp</screen></entry>
- <entry><screen>boolean</screen></entry>
- <entry><screen>FALSE</screen></entry>
- <entry>If TRUE, Van Jacobsen TCP header compression will not be requested.</entry>
- </row>
- <row>
- <entry><screen>require-mppe</screen></entry>
- <entry><screen>boolean</screen></entry>
- <entry><screen>FALSE</screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>require-mppe-128</screen></entry>
- <entry><screen>boolean</screen></entry>
- <entry><screen>FALSE</screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>mppe-stateful</screen></entry>
- <entry><screen>boolean</screen></entry>
- <entry><screen>FALSE</screen></entry>
- <entry>If TRUE, stateful MPPE is used. See pppd documentation for more information on stateful MPPE.</entry>
- </row>
- <row>
- <entry><screen>crtscts</screen></entry>
- <entry><screen>boolean</screen></entry>
- <entry><screen>FALSE</screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>baud</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>0</screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>mru</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>0</screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>mtu</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>0</screen></entry>
- <entry>If non-zero, instruct pppd to send packets no larger than the specified size.</entry>
- </row>
- <row>
- <entry><screen>lcp-echo-failure</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>0</screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>lcp-echo-interval</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>0</screen></entry>
- <entry>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.</entry>
- </row>
- </tbody>
- </tgroup>
-</table>
-<table>
- <title>pppoe 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>pppoe</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>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 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>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>Username used to authenticate with the PPPoE service.</entry>
- </row>
- <row>
- <entry><screen>password</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>Password used to authenticate with the PPPoE service.</entry>
- </row>
- <row>
- <entry><screen>password-flags</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>0</screen></entry>
- <entry>Flags indicating how to handle the PPPoE password. (see <xref linkend="secrets-flags"/> for flag values)</entry>
- </row>
- </tbody>
- </tgroup>
-</table>
-<table>
- <title>serial 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>serial</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>baud</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>57600</screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>bits</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>8</screen></entry>
- <entry>Byte-width of the serial communication. The 8 in '8n1' for example.</entry>
- </row>
- <row>
- <entry><screen>parity</screen></entry>
- <entry><screen>gchar</screen></entry>
- <entry><screen>110</screen></entry>
- <entry>Parity setting of the serial port. Either 'E' for even parity, 'o' for odd parity, or 'n' for no parity.</entry>
- </row>
- <row>
- <entry><screen>stopbits</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>1</screen></entry>
- <entry>Number of stop bits for communication on the serial port. Either 1 or 2. The 1 in '8n1' for example.</entry>
- </row>
- <row>
- <entry><screen>send-delay</screen></entry>
- <entry><screen>uint64</screen></entry>
- <entry><screen>0</screen></entry>
- <entry>Time to delay between each byte sent to the modem, in microseconds.</entry>
- </row>
- </tbody>
- </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>
- <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>vlan</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>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 'wired' setting with a 'mac-address' property.</entry>
- </row>
- <row>
- <entry><screen>id</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>0</screen></entry>
- <entry>The VLAN indentifier the interface created by this connection should be assigned.</entry>
- </row>
- <row>
- <entry><screen>flags</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>0</screen></entry>
- <entry>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).</entry>
- </row>
- <row>
- <entry><screen>ingress-priority-map</screen></entry>
- <entry><screen>array of string</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>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>
- </tgroup>
-</table>
-<table>
- <title>vpn 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>vpn</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>service-type</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>user-name</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>data</screen></entry>
- <entry><screen>dict of (string::string)</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>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>
- </tgroup>
-</table>
-<table>
- <title>wimax 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>wimax</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>network-name</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>Network Service Provider (NSP) name of the WiMAX network this connection should use.</entry>
- </row>
- <row>
- <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 WiMAX device whose MAC address matches. This property does not change the MAC address of the device (known as MAC spoofing).</entry>
- </row>
- </tbody>
- </tgroup>
-</table>
-<table>
- <title>802-3-ethernet 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>802-3-ethernet</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>port</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>speed</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>0</screen></entry>
- <entry>If non-zero, request that the device use only the specified speed. In Mbit/s, ie 100 == 100Mbit/s.</entry>
- </row>
- <row>
- <entry><screen>duplex</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>If specified, request that the device only use the specified duplex mode. Either 'half' or 'full'.</entry>
- </row>
- <row>
- <entry><screen>auto-negotiate</screen></entry>
- <entry><screen>boolean</screen></entry>
- <entry><screen>TRUE</screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <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>
- </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 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>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>
- <entry><screen>uint32</screen></entry>
- <entry><screen>0</screen></entry>
- <entry>If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames.</entry>
- </row>
- <row>
- <entry><screen>s390-subchannels</screen></entry>
- <entry><screen>array of string</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>
- <entry><screen>s390-nettype</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>s390 network device type; one of 'qeth', 'lcs', or 'ctc', representing the different types of virtual network devices available on s390 systems.</entry>
- </row>
- <row>
- <entry><screen>s390-options</screen></entry>
- <entry><screen>dict of (string::string)</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>
- </tgroup>
-</table>
-<table>
- <title>802-11-wireless 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>802-11-wireless</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>ssid</screen></entry>
- <entry><screen>byte array</screen></entry>
- <entry><screen>[]</screen></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>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 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 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>
- <entry><screen>byte array</screen></entry>
- <entry><screen>[]</screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>rate</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>0</screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>tx-power</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>0</screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <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 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 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>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>
- <entry><screen>mtu</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>0</screen></entry>
- <entry>If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames.</entry>
- </row>
- <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 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>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>hidden</screen></entry>
- <entry><screen>boolean</screen></entry>
- <entry><screen>FALSE</screen></entry>
- <entry>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.</entry>
- </row>
- </tbody>
- </tgroup>
-</table>
-<table>
- <title>802-11-wireless-security 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>802-11-wireless-security</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>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 Wi-Fi connection that uses security.</entry>
- </row>
- <row>
- <entry><screen>wep-tx-keyidx</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>0</screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>auth-alg</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>proto</screen></entry>
- <entry><screen>array of string</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 'tkip' or 'ccmp'.</entry>
- </row>
- <row>
- <entry><screen>group</screen></entry>
- <entry><screen>array of string</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>
- <entry><screen>leap-username</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>The login username for legacy LEAP connections (ie, key-mgmt = 'ieee8021x' and auth-alg = 'leap').</entry>
- </row>
- <row>
- <entry><screen>wep-key0</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>wep-key1</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>wep-key2</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>wep-key3</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <entry><screen>wep-key-flags</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>0</screen></entry>
- <entry>Flags indicating how to handle the WEP keys. (see <xref linkend="secrets-flags"/> for flag values)</entry>
- </row>
- <row>
- <entry><screen>wep-key-type</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>0</screen></entry>
- <entry>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.</entry>
- </row>
- <row>
- <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 Wi-Fi network.</entry>
- </row>
- <row>
- <entry><screen>psk-flags</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>0</screen></entry>
- <entry>Flags indicating how to handle the WPA PSK key. (see <xref linkend="secrets-flags"/> for flag values)</entry>
- </row>
- <row>
- <entry><screen>leap-password</screen></entry>
- <entry><screen>string</screen></entry>
- <entry><screen></screen></entry>
- <entry>The login password for legacy LEAP connections (ie, key-mgmt = 'ieee8021x' and auth-alg = 'leap').</entry>
- </row>
- <row>
- <entry><screen>leap-password-flags</screen></entry>
- <entry><screen>uint32</screen></entry>
- <entry><screen>0</screen></entry>
- <entry>Flags indicating how to handle the LEAP password. (see <xref linkend="secrets-flags"/> for flag values)</entry>
- </row>
- </tbody>
- </tgroup>
-</table>
- </para>
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
+<section><title>Configuration Settings</title>
+ <para><table><title>802-1x 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>altsubject-matches</screen></entry><entry><screen>array of string</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><entry><screen>anonymous-identity</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>Anonymous identity string for EAP authentication methods. Used as the unencrypted identity with EAP types that support different tunneled identity like EAP-TTLS.</entry></row>
+ <row><entry><screen>ca-cert</screen></entry><entry><screen>byte array</screen></entry><entry><screen/></entry><entry>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 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.</entry></row>
+ <row><entry><screen>ca-path</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>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.</entry></row>
+ <row><entry><screen>client-cert</screen></entry><entry><screen>byte array</screen></entry><entry><screen/></entry><entry>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 NUL byte.</entry></row>
+ <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", "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><entry><screen>string</screen></entry><entry><screen/></entry><entry>Identity string for EAP authentication methods. Often the user's user or login name.</entry></row>
+ <row><entry><screen>name</screen></entry><entry><screen>string</screen></entry><entry><screen>802-1x</screen></entry><entry>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".</entry></row>
+ <row><entry><screen>pac-file</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>UTF-8 encoded file path containing PAC for EAP-FAST.</entry></row>
+ <row><entry><screen>password</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>UTF-8 encoded password used for EAP authentication methods. If both the "password" property and the "password-raw" property are specified, "password" is preferred.</entry></row>
+ <row><entry><screen>password-flags</screen></entry><entry><screen>NMSettingSecretFlags (uint32)</screen></entry><entry><screen/></entry><entry>Flags indicating how to handle the "password" property.</entry></row>
+ <row><entry><screen>password-raw</screen></entry><entry><screen>byte array</screen></entry><entry><screen/></entry><entry>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 "password" property and the "password-raw" property are specified, "password" is preferred.</entry></row>
+ <row><entry><screen>password-raw-flags</screen></entry><entry><screen>NMSettingSecretFlags (uint32)</screen></entry><entry><screen/></entry><entry>Flags indicating how to handle the "password-raw" property.</entry></row>
+ <row><entry><screen>phase1-fast-provisioning</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>Enables or disables in-line provisioning of EAP-FAST credentials when FAST is specified as the EAP method in the "eap" 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.</entry></row>
+ <row><entry><screen>phase1-peaplabel</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>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.</entry></row>
+ <row><entry><screen>phase1-peapver</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>Forces which PEAP version is used when PEAP is set as the EAP method in the "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.</entry></row>
+ <row><entry><screen>phase2-altsubject-matches</screen></entry><entry><screen>array of string</screen></entry><entry><screen>[]</screen></entry><entry>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><entry><screen>phase2-auth</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>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 "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.</entry></row>
+ <row><entry><screen>phase2-autheap</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>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.</entry></row>
+ <row><entry><screen>phase2-ca-cert</screen></entry><entry><screen>byte array</screen></entry><entry><screen/></entry><entry>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 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.</entry></row>
+ <row><entry><screen>phase2-ca-path</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>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.</entry></row>
+ <row><entry><screen>phase2-client-cert</screen></entry><entry><screen>byte array</screen></entry><entry><screen/></entry><entry>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 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.</entry></row>
+ <row><entry><screen>phase2-private-key</screen></entry><entry><screen>byte array</screen></entry><entry><screen/></entry><entry>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 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 "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 "phase2-private-key-password" property must be set to the password used to decode the PKCS#12 private key and certificate.</entry></row>
+ <row><entry><screen>phase2-private-key-password</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>The password used to decrypt the "phase 2" private key specified in the "phase2-private-key" property when the private key either uses the path scheme, or is a PKCS#12 format key.</entry></row>
+ <row><entry><screen>phase2-private-key-password-flags</screen></entry><entry><screen>NMSettingSecretFlags (uint32)</screen></entry><entry><screen/></entry><entry>Flags indicating how to handle the "phase2-private-key-password" property.</entry></row>
+ <row><entry><screen>phase2-subject-match</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>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.</entry></row>
+ <row><entry><screen>pin</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>PIN used for EAP authentication methods.</entry></row>
+ <row><entry><screen>pin-flags</screen></entry><entry><screen>NMSettingSecretFlags (uint32)</screen></entry><entry><screen/></entry><entry>Flags indicating how to handle the "pin" property.</entry></row>
+ <row><entry><screen>private-key</screen></entry><entry><screen>byte array</screen></entry><entry><screen/></entry><entry>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 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 "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. WARNING: "private-key" 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.</entry></row>
+ <row><entry><screen>private-key-password</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>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.</entry></row>
+ <row><entry><screen>private-key-password-flags</screen></entry><entry><screen>NMSettingSecretFlags (uint32)</screen></entry><entry><screen/></entry><entry>Flags indicating how to handle the "private-key-password" property.</entry></row>
+ <row><entry><screen>subject-match</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>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.</entry></row>
+ <row><entry><screen>system-ca-certs</screen></entry><entry><screen>boolean</screen></entry><entry><screen>FALSE</screen></entry><entry>When TRUE, overrides the "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.</entry></row>
+ </tbody></tgroup></table></para>
+ <para><table><title>adsl 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>encapsulation</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>Encapsulation of ADSL connection. Can be "vcmux" or "llc".</entry></row>
+ <row><entry><screen>name</screen></entry><entry><screen>string</screen></entry><entry><screen>adsl</screen></entry><entry>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".</entry></row>
+ <row><entry><screen>password</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>Password used to authenticate with the ADSL service.</entry></row>
+ <row><entry><screen>password-flags</screen></entry><entry><screen>NMSettingSecretFlags (uint32)</screen></entry><entry><screen/></entry><entry>Flags indicating how to handle the "password" property.</entry></row>
+ <row><entry><screen>protocol</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>ADSL connection protocol. Can be "pppoa", "pppoe" or "ipoatm".</entry></row>
+ <row><entry><screen>username</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>Username used to authenticate with the ADSL service.</entry></row>
+ <row><entry><screen>vci</screen></entry><entry><screen>uint32</screen></entry><entry><screen>0</screen></entry><entry>VCI of ADSL connection</entry></row>
+ <row><entry><screen>vpi</screen></entry><entry><screen>uint32</screen></entry><entry><screen>0</screen></entry><entry>VPI of ADSL connection</entry></row>
+ </tbody></tgroup></table></para>
+ <para><table><title>bluetooth 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>bdaddr</screen></entry><entry><screen>byte array</screen></entry><entry><screen/></entry><entry>The Bluetooth address of the device.</entry></row>
+ <row><entry><screen>name</screen></entry><entry><screen>string</screen></entry><entry><screen>bluetooth</screen></entry><entry>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".</entry></row>
+ <row><entry><screen>type</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>Either "dun" for Dial-Up Networking connections or "panu" for Personal Area Networking connections to devices supporting the NAP profile.</entry></row>
+ </tbody></tgroup></table></para>
+ <para><table><title>bond 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>interface-name</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>Deprecated in favor of connection.interface-name, but can be used for backward-compatibility with older daemons, to set the bond's interface name.</entry></row>
+ <row><entry><screen>name</screen></entry><entry><screen>string</screen></entry><entry><screen>bond</screen></entry><entry>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".</entry></row>
+ <row><entry><screen>options</screen></entry><entry><screen>dict of string to string</screen></entry><entry><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></tgroup></table></para>
+ <para><table><title>bridge 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>ageing-time</screen></entry><entry><screen>uint32</screen></entry><entry><screen>300</screen></entry><entry>The Ethernet MAC address aging time, in seconds.</entry></row>
+ <row><entry><screen>forward-delay</screen></entry><entry><screen>uint32</screen></entry><entry><screen>15</screen></entry><entry>The Spanning Tree Protocol (STP) forwarding delay, in seconds.</entry></row>
+ <row><entry><screen>hello-time</screen></entry><entry><screen>uint32</screen></entry><entry><screen>2</screen></entry><entry>The Spanning Tree Protocol (STP) hello time, in seconds.</entry></row>
+ <row><entry><screen>interface-name</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>Deprecated in favor of connection.interface-name, but can be used for backward-compatibility with older daemons, to set the bridge's interface name.</entry></row>
+ <row><entry><screen>mac-address</screen></entry><entry><screen>byte array</screen></entry><entry><screen/></entry><entry>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.</entry></row>
+ <row><entry><screen>max-age</screen></entry><entry><screen>uint32</screen></entry><entry><screen>20</screen></entry><entry>The Spanning Tree Protocol (STP) maximum message age, in seconds.</entry></row>
+ <row><entry><screen>name</screen></entry><entry><screen>string</screen></entry><entry><screen>bridge</screen></entry><entry>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".</entry></row>
+ <row><entry><screen>priority</screen></entry><entry><screen>uint32</screen></entry><entry><screen>32768</screen></entry><entry>Sets the Spanning Tree Protocol (STP) priority for this bridge. Lower values are "better"; the lowest priority bridge will be elected the root bridge.</entry></row>
+ <row><entry><screen>stp</screen></entry><entry><screen>boolean</screen></entry><entry><screen>TRUE</screen></entry><entry>Controls whether Spanning Tree Protocol (STP) is enabled for this bridge.</entry></row>
+ </tbody></tgroup></table></para>
+ <para><table><title>bridge-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>hairpin-mode</screen></entry><entry><screen>boolean</screen></entry><entry><screen>FALSE</screen></entry><entry>Enables or disabled "hairpin mode" for the port, which allows frames to be sent back out through the port the frame was received on.</entry></row>
+ <row><entry><screen>name</screen></entry><entry><screen>string</screen></entry><entry><screen>bridge-port</screen></entry><entry>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".</entry></row>
+ <row><entry><screen>path-cost</screen></entry><entry><screen>uint32</screen></entry><entry><screen>100</screen></entry><entry>The Spanning Tree Protocol (STP) port cost for destinations via this port.</entry></row>
+ <row><entry><screen>priority</screen></entry><entry><screen>uint32</screen></entry><entry><screen>32</screen></entry><entry>The Spanning Tree Protocol (STP) priority of this bridge port.</entry></row>
+ </tbody></tgroup></table></para>
+ <para><table><title>cdma 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>cdma</screen></entry><entry>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".</entry></row>
+ <row><entry><screen>number</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>The number to dial to establish the connection to the CDMA-based mobile broadband network, if any. If not specified, the default number (#777) is used when required.</entry></row>
+ <row><entry><screen>password</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>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.</entry></row>
+ <row><entry><screen>password-flags</screen></entry><entry><screen>NMSettingSecretFlags (uint32)</screen></entry><entry><screen/></entry><entry>Flags indicating how to handle the "password" property.</entry></row>
+ <row><entry><screen>username</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>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.</entry></row>
+ </tbody></tgroup></table></para>
+ <para><table><title>connection 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>autoconnect</screen></entry><entry><screen>boolean</screen></entry><entry><screen>TRUE</screen></entry><entry>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.</entry></row>
+ <row><entry><screen>autoconnect-priority</screen></entry><entry><screen>int32</screen></entry><entry><screen>0</screen></entry><entry>The autoconnect priority. If the connection is set to autoconnect, connections with higher priority will be preferred. Defaults to 0. The higher number means higher priority.</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>
+ <row><entry><screen>id</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>A human readable unique identifier for the connection, like "Work Wi-Fi" or "T-Mobile 3G".</entry></row>
+ <row><entry><screen>interface-name</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>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 software devices this specifies the name of the created device. 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>master</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>Interface name of the master device or UUID of the master connection.</entry></row>
+ <row><entry><screen>name</screen></entry><entry><screen>string</screen></entry><entry><screen>connection</screen></entry><entry>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".</entry></row>
+ <row><entry><screen>permissions</screen></entry><entry><screen>array of string</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 list. 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 present must be ignored and is reserved for future use. All of [type], [id], and [reserved] must be valid UTF-8.</entry></row>
+ <row><entry><screen>read-only</screen></entry><entry><screen>boolean</screen></entry><entry><screen>FALSE</screen></entry><entry>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.</entry></row>
+ <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. Currently only VPN connections are supported.</entry></row>
+ <row><entry><screen>slave-type</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>Setting name of the device type of this slave's master connection (eg, "bond"), or NULL if this connection is not a slave.</entry></row>
+ <row><entry><screen>timestamp</screen></entry><entry><screen>uint64</screen></entry><entry><screen>0</screen></entry><entry>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).</entry></row>
+ <row><entry><screen>type</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>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).</entry></row>
+ <row><entry><screen>uuid</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>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, it should not be changed when the "id" property or NMSettingIP4Config changes, but might need to be re-created when the Wi-Fi SSID, mobile broadband network provider, or "type" property changes. The UUID must be in the format "2815492f-7e56-435e-b2e9-246bd7cdc664" (ie, contains only hexadecimal characters and "-").</entry></row>
+ <row><entry><screen>zone</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>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.</entry></row>
+ </tbody></tgroup></table></para>
+ <para><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>app-fcoe-flags</screen></entry><entry><screen>NMSettingDcbFlags (uint32)</screen></entry><entry><screen/></entry><entry>Specifies the NMSettingDcbFlags for the DCB FCoE application. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4).</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-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 NM_SETTING_DCB_FLAG_ENABLE (0x1) flag.</entry></row>
+ <row><entry><screen>app-fip-flags</screen></entry><entry><screen>NMSettingDcbFlags (uint32)</screen></entry><entry><screen/></entry><entry>Specifies the NMSettingDcbFlags for the DCB FIP application. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4).</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 NM_SETTING_DCB_FLAG_ENABLE (0x1) flag.</entry></row>
+ <row><entry><screen>app-iscsi-flags</screen></entry><entry><screen>NMSettingDcbFlags (uint32)</screen></entry><entry><screen/></entry><entry>Specifies the NMSettingDcbFlags for the DCB iSCSI application. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4).</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 NM_SETTING_DCB_FLAG_ENABLE (0x1) flag.</entry></row>
+ <row><entry><screen>name</screen></entry><entry><screen>string</screen></entry><entry><screen>dcb</screen></entry><entry>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".</entry></row>
+ <row><entry><screen>priority-bandwidth</screen></entry><entry><screen>array of uint32</screen></entry><entry><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-flow-control</screen></entry><entry><screen>array of uint32</screen></entry><entry><screen/></entry><entry>An array of 8 boolean 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.</entry></row>
+ <row><entry><screen>priority-flow-control-flags</screen></entry><entry><screen>NMSettingDcbFlags (uint32)</screen></entry><entry><screen/></entry><entry>Specifies the NMSettingDcbFlags for DCB Priority Flow Control (PFC). Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4).</entry></row>
+ <row><entry><screen>priority-group-bandwidth</screen></entry><entry><screen>array of uint32</screen></entry><entry><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-group-flags</screen></entry><entry><screen>NMSettingDcbFlags (uint32)</screen></entry><entry><screen/></entry><entry>Specifies the NMSettingDcbFlags for DCB Priority Groups. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4).</entry></row>
+ <row><entry><screen>priority-group-id</screen></entry><entry><screen>array of uint32</screen></entry><entry><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-strict-bandwidth</screen></entry><entry><screen>array of uint32</screen></entry><entry><screen/></entry><entry>An array of 8 boolean 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.</entry></row>
+ <row><entry><screen>priority-traffic-class</screen></entry><entry><screen>array of uint32</screen></entry><entry><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></table></para>
+ <para><table><title>generic 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>generic</screen></entry><entry>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".</entry></row>
+ </tbody></tgroup></table></para>
+ <para><table><title>gsm 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>apn</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>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.</entry></row>
+ <row><entry><screen>home-only</screen></entry><entry><screen>boolean</screen></entry><entry><screen>FALSE</screen></entry><entry>When TRUE, only connections to the home network will be allowed. Connections to roaming networks will not be made.</entry></row>
+ <row><entry><screen>name</screen></entry><entry><screen>string</screen></entry><entry><screen>gsm</screen></entry><entry>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".</entry></row>
+ <row><entry><screen>network-id</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>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.</entry></row>
+ <row><entry><screen>number</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>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.</entry></row>
+ <row><entry><screen>password</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>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.</entry></row>
+ <row><entry><screen>password-flags</screen></entry><entry><screen>NMSettingSecretFlags (uint32)</screen></entry><entry><screen/></entry><entry>Flags indicating how to handle the "password" property.</entry></row>
+ <row><entry><screen>pin</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>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.</entry></row>
+ <row><entry><screen>pin-flags</screen></entry><entry><screen>NMSettingSecretFlags (uint32)</screen></entry><entry><screen/></entry><entry>Flags indicating how to handle the "pin" property.</entry></row>
+ <row><entry><screen>username</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>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.</entry></row>
+ </tbody></tgroup></table></para>
+ <para><table><title>infiniband 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>mac-address</screen></entry><entry><screen>byte array</screen></entry><entry><screen/></entry><entry>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).</entry></row>
+ <row><entry><screen>mtu</screen></entry><entry><screen>uint32</screen></entry><entry><screen>0</screen></entry><entry>If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple frames.</entry></row>
+ <row><entry><screen>name</screen></entry><entry><screen>string</screen></entry><entry><screen>infiniband</screen></entry><entry>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".</entry></row>
+ <row><entry><screen>p-key</screen></entry><entry><screen>int32</screen></entry><entry><screen>-1</screen></entry><entry>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.</entry></row>
+ <row><entry><screen>parent</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>The interface name of the parent device of this device. Normally NULL, but if the "p_key" property is set, then you must specify the base device by setting either this property or "mac-address".</entry></row>
+ <row><entry><screen>transport-mode</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>The IP-over-InfiniBand transport mode. Either "datagram" or "connected".</entry></row>
+ </tbody></tgroup></table></para>
+ <para><table><title>ipv4 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>address-data</screen></entry><entry><screen>array of vardict</screen></entry><entry><screen/></entry><entry>Array of IPv4 addresses. Each address dictionary contains at least 'address' and 'prefix' entries, containing the IP address as a string, and the prefix length as a uint32. Additional attributes may also exist on some addresses.</entry></row>
+ <row><entry><screen>addresses</screen></entry><entry><screen>array of array of uint32</screen></entry><entry><screen/></entry><entry>Deprecated in favor of the 'address-data' and 'gateway' properties, but this can be used for backward-compatibility with older daemons. Note that if you send this property the daemon will ignore 'address-data' and 'gateway'. 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.</entry></row>
+ <row><entry><screen>dhcp-client-id</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>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.</entry></row>
+ <row><entry><screen>dhcp-hostname</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>If the "dhcp-send-hostname" property is TRUE, then the specified name will be sent to the DHCP server when acquiring a lease.</entry></row>
+ <row><entry><screen>dhcp-send-hostname</screen></entry><entry><screen>boolean</screen></entry><entry><screen>TRUE</screen></entry><entry>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 NULL and this property is TRUE, the current persistent hostname of the computer is sent.</entry></row>
+ <row><entry><screen>dns</screen></entry><entry><screen>array of uint32</screen></entry><entry><screen>[]</screen></entry><entry>Array of IP addresses of DNS servers (as network-byte-order integers)</entry></row>
+ <row><entry><screen>dns-search</screen></entry><entry><screen>array of string</screen></entry><entry><screen>[]</screen></entry><entry>Array of DNS search domains.</entry></row>
+ <row><entry><screen>gateway</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>The gateway associated with this configuration. This is only meaningful if "addresses" is also set.</entry></row>
+ <row><entry><screen>ignore-auto-dns</screen></entry><entry><screen>boolean</screen></entry><entry><screen>FALSE</screen></entry><entry>When "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.</entry></row>
+ <row><entry><screen>ignore-auto-routes</screen></entry><entry><screen>boolean</screen></entry><entry><screen>FALSE</screen></entry><entry>When "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.</entry></row>
+ <row><entry><screen>may-fail</screen></entry><entry><screen>boolean</screen></entry><entry><screen>TRUE</screen></entry><entry>If TRUE, allow overall network configuration to proceed even if the configuration specified by this property 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 on the NMSettingIP4Config allows the overall network configuration to succeed if IPv4 configuration fails but IPv6 configuration completes successfully.</entry></row>
+ <row><entry><screen>method</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>IP configuration method. NMSettingIP4Config and NMSettingIP6Config both support "auto", "manual", and "link-local". See the subclass-specific documentation for other values. In general, for the "auto" method, properties such as "dns" and "routes" specify information that is added on to the information returned from automatic configuration. The "ignore-auto-routes" and "ignore-auto-dns" properties modify this behavior. For methods that imply no upstream network, such as "shared" or "link-local", these properties must be empty.</entry></row>
+ <row><entry><screen>name</screen></entry><entry><screen>string</screen></entry><entry><screen>ipv4</screen></entry><entry>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".</entry></row>
+ <row><entry><screen>never-default</screen></entry><entry><screen>boolean</screen></entry><entry><screen>FALSE</screen></entry><entry>If TRUE, this connection will never be the default connection for this IP type, meaning it will never be assigned the default route by NetworkManager.</entry></row>
+ <row><entry><screen>route-data</screen></entry><entry><screen>array of vardict</screen></entry><entry><screen/></entry><entry>Array of IPv4 routes. Each route dictionary contains at least 'dest' and 'prefix' entries, containing the destination IP address as a string, and the prefix length as a uint32. Most routes will also have a 'gateway' entry, containing the gateway IP address as a string. If the route has a 'metric' entry (containing a uint32), that will be used as the metric for the route (otherwise NM will pick a default value appropriate to the device). Additional attributes may also exist on some routes.</entry></row>
+ <row><entry><screen>route-metric</screen></entry><entry><screen>int64</screen></entry><entry><screen>-1</screen></entry><entry>The default metric for routes that don't explicitly specify a metric. The default value -1 means that the metric is choosen automatically based on the device type. The metric applies to dynamic routes, manual (static) routes that don't have an explicit metric setting, address prefix routes, and the default route. Note that for IPv6, the kernel accepts zero (0) but coerces it to 1024 (user default). Hence, setting this property to zero effectively mean setting it to 1024. For IPv4, zero is a regular value for the metric.</entry></row>
+ <row><entry><screen>routes</screen></entry><entry><screen>array of array of uint32</screen></entry><entry><screen/></entry><entry>Deprecated in favor of the 'route-data' property, but this can be used for backward-compatibility with older daemons. Note that if you send this property the daemon will ignore 'route-data'. 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. If the metric is 0, NM will choose an appropriate default metric for the device. (There is no way to explicitly specify an actual metric of 0 with this property.)</entry></row>
+ </tbody></tgroup></table></para>
+ <para><table><title>ipv6 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>address-data</screen></entry><entry><screen>array of vardict</screen></entry><entry><screen/></entry><entry>Array of IPv6 addresses. Each address dictionary contains at least 'address' and 'prefix' entries, containing the IP address as a string, and the prefix length as a uint32. Additional attributes may also exist on some addresses.</entry></row>
+ <row><entry><screen>addresses</screen></entry><entry><screen>array of legacy IPv6 address struct (a(ayuay))</screen></entry><entry><screen/></entry><entry>Deprecated in favor of the 'address-data' and 'gateway' properties, but this can be used for backward-compatibility with older daemons. Note that if you send this property the daemon will ignore 'address-data' and 'gateway'. Array of IPv6 address structures. Each IPv6 address structure is composed of an IPv6 address, a prefix length (1 - 128), and an IPv6 gateway address. The gateway may be zeroed out if no gateway exists for that subnet.</entry></row>
+ <row><entry><screen>dhcp-hostname</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>If the "dhcp-send-hostname" property is TRUE, then the specified name will be sent to the DHCP server when acquiring a lease.</entry></row>
+ <row><entry><screen>dhcp-send-hostname</screen></entry><entry><screen>boolean</screen></entry><entry><screen>TRUE</screen></entry><entry>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 NULL and this property is TRUE, the current persistent hostname of the computer is sent.</entry></row>
+ <row><entry><screen>dns</screen></entry><entry><screen>array of byte array</screen></entry><entry><screen>[]</screen></entry><entry>Array of IP addresses of DNS servers (in network byte order)</entry></row>
+ <row><entry><screen>dns-search</screen></entry><entry><screen>array of string</screen></entry><entry><screen>[]</screen></entry><entry>Array of DNS search domains.</entry></row>
+ <row><entry><screen>gateway</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>The gateway associated with this configuration. This is only meaningful if "addresses" is also set.</entry></row>
+ <row><entry><screen>ignore-auto-dns</screen></entry><entry><screen>boolean</screen></entry><entry><screen>FALSE</screen></entry><entry>When "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.</entry></row>
+ <row><entry><screen>ignore-auto-routes</screen></entry><entry><screen>boolean</screen></entry><entry><screen>FALSE</screen></entry><entry>When "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.</entry></row>
+ <row><entry><screen>ip6-privacy</screen></entry><entry><screen>NMSettingIP6ConfigPrivacy (int32)</screen></entry><entry><screen/></entry><entry>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).</entry></row>
+ <row><entry><screen>may-fail</screen></entry><entry><screen>boolean</screen></entry><entry><screen>TRUE</screen></entry><entry>If TRUE, allow overall network configuration to proceed even if the configuration specified by this property 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 on the NMSettingIP4Config allows the overall network configuration to succeed if IPv4 configuration fails but IPv6 configuration completes successfully.</entry></row>
+ <row><entry><screen>method</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>IP configuration method. NMSettingIP4Config and NMSettingIP6Config both support "auto", "manual", and "link-local". See the subclass-specific documentation for other values. In general, for the "auto" method, properties such as "dns" and "routes" specify information that is added on to the information returned from automatic configuration. The "ignore-auto-routes" and "ignore-auto-dns" properties modify this behavior. For methods that imply no upstream network, such as "shared" or "link-local", these properties must be empty.</entry></row>
+ <row><entry><screen>name</screen></entry><entry><screen>string</screen></entry><entry><screen>ipv6</screen></entry><entry>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".</entry></row>
+ <row><entry><screen>never-default</screen></entry><entry><screen>boolean</screen></entry><entry><screen>FALSE</screen></entry><entry>If TRUE, this connection will never be the default connection for this IP type, meaning it will never be assigned the default route by NetworkManager.</entry></row>
+ <row><entry><screen>route-data</screen></entry><entry><screen>array of vardict</screen></entry><entry><screen/></entry><entry>Array of IPv6 routes. Each route dictionary contains at least 'dest' and 'prefix' entries, containing the destination IP address as a string, and the prefix length as a uint32. Most routes will also have a 'next-hop' entry, containing the next hop IP address as a string. If the route has a 'metric' entry (containing a uint32), that will be used as the metric for the route (otherwise NM will pick a default value appropriate to the device). Additional attributes may also exist on some routes.</entry></row>
+ <row><entry><screen>route-metric</screen></entry><entry><screen>int64</screen></entry><entry><screen>-1</screen></entry><entry>The default metric for routes that don't explicitly specify a metric. The default value -1 means that the metric is choosen automatically based on the device type. The metric applies to dynamic routes, manual (static) routes that don't have an explicit metric setting, address prefix routes, and the default route. Note that for IPv6, the kernel accepts zero (0) but coerces it to 1024 (user default). Hence, setting this property to zero effectively mean setting it to 1024. For IPv4, zero is a regular value for the metric.</entry></row>
+ <row><entry><screen>routes</screen></entry><entry><screen>array of legacy IPv6 route struct (a(ayuayu))</screen></entry><entry><screen/></entry><entry>Deprecated in favor of the 'route-data' property, but this can be used for backward-compatibility with older daemons. Note that if you send this property the daemon will ignore 'route-data'. Array of IPv6 route structures. Each IPv6 route structure is composed of an IPv6 address, a prefix length (1 - 128), an IPv6 next hop address (which may be zeroed out if there is no next hop), and a metric. If the metric is 0, NM will choose an appropriate default metric for the device.</entry></row>
+ </tbody></tgroup></table></para>
+ <para><table><title>802-11-olpc-mesh 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>channel</screen></entry><entry><screen>uint32</screen></entry><entry><screen>0</screen></entry><entry>Channel on which the mesh network to join is located.</entry></row>
+ <row><entry><screen>dhcp-anycast-address</screen></entry><entry><screen>byte array</screen></entry><entry><screen/></entry><entry>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.</entry></row>
+ <row><entry><screen>name</screen></entry><entry><screen>string</screen></entry><entry><screen>802-11-olpc-mesh</screen></entry><entry>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".</entry></row>
+ <row><entry><screen>ssid</screen></entry><entry><screen>byte array</screen></entry><entry><screen/></entry><entry>SSID of the mesh network to join.</entry></row>
+ </tbody></tgroup></table></para>
+ <para><table><title>ppp 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>baud</screen></entry><entry><screen>uint32</screen></entry><entry><screen>0</screen></entry><entry>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.</entry></row>
+ <row><entry><screen>crtscts</screen></entry><entry><screen>boolean</screen></entry><entry><screen>FALSE</screen></entry><entry>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.</entry></row>
+ <row><entry><screen>lcp-echo-failure</screen></entry><entry><screen>uint32</screen></entry><entry><screen>0</screen></entry><entry>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.</entry></row>
+ <row><entry><screen>lcp-echo-interval</screen></entry><entry><screen>uint32</screen></entry><entry><screen>0</screen></entry><entry>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.</entry></row>
+ <row><entry><screen>mppe-stateful</screen></entry><entry><screen>boolean</screen></entry><entry><screen>FALSE</screen></entry><entry>If TRUE, stateful MPPE is used. See pppd documentation for more information on stateful MPPE.</entry></row>
+ <row><entry><screen>mru</screen></entry><entry><screen>uint32</screen></entry><entry><screen>0</screen></entry><entry>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.</entry></row>
+ <row><entry><screen>mtu</screen></entry><entry><screen>uint32</screen></entry><entry><screen>0</screen></entry><entry>If non-zero, instruct pppd to send packets no larger than the specified size.</entry></row>
+ <row><entry><screen>name</screen></entry><entry><screen>string</screen></entry><entry><screen>ppp</screen></entry><entry>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".</entry></row>
+ <row><entry><screen>no-vj-comp</screen></entry><entry><screen>boolean</screen></entry><entry><screen>FALSE</screen></entry><entry>If TRUE, Van Jacobsen TCP header compression will not be requested.</entry></row>
+ <row><entry><screen>noauth</screen></entry><entry><screen>boolean</screen></entry><entry><screen>TRUE</screen></entry><entry>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.</entry></row>
+ <row><entry><screen>nobsdcomp</screen></entry><entry><screen>boolean</screen></entry><entry><screen>FALSE</screen></entry><entry>If TRUE, BSD compression will not be requested.</entry></row>
+ <row><entry><screen>nodeflate</screen></entry><entry><screen>boolean</screen></entry><entry><screen>FALSE</screen></entry><entry>If TRUE, "deflate" compression will not be requested.</entry></row>
+ <row><entry><screen>refuse-chap</screen></entry><entry><screen>boolean</screen></entry><entry><screen>FALSE</screen></entry><entry>If TRUE, the CHAP authentication method will not be used.</entry></row>
+ <row><entry><screen>refuse-eap</screen></entry><entry><screen>boolean</screen></entry><entry><screen>FALSE</screen></entry><entry>If TRUE, the EAP authentication method will not be used.</entry></row>
+ <row><entry><screen>refuse-mschap</screen></entry><entry><screen>boolean</screen></entry><entry><screen>FALSE</screen></entry><entry>If TRUE, the MSCHAP authentication method will not be used.</entry></row>
+ <row><entry><screen>refuse-mschapv2</screen></entry><entry><screen>boolean</screen></entry><entry><screen>FALSE</screen></entry><entry>If TRUE, the MSCHAPv2 authentication method will not be used.</entry></row>
+ <row><entry><screen>refuse-pap</screen></entry><entry><screen>boolean</screen></entry><entry><screen>FALSE</screen></entry><entry>If TRUE, the PAP authentication method will not be used.</entry></row>
+ <row><entry><screen>require-mppe</screen></entry><entry><screen>boolean</screen></entry><entry><screen>FALSE</screen></entry><entry>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.</entry></row>
+ <row><entry><screen>require-mppe-128</screen></entry><entry><screen>boolean</screen></entry><entry><screen>FALSE</screen></entry><entry>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.</entry></row>
+ </tbody></tgroup></table></para>
+ <para><table><title>pppoe 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>pppoe</screen></entry><entry>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".</entry></row>
+ <row><entry><screen>password</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>Password used to authenticate with the PPPoE service.</entry></row>
+ <row><entry><screen>password-flags</screen></entry><entry><screen>NMSettingSecretFlags (uint32)</screen></entry><entry><screen/></entry><entry>Flags indicating how to handle the "password" property.</entry></row>
+ <row><entry><screen>service</screen></entry><entry><screen>string</screen></entry><entry><screen/></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><entry><screen>string</screen></entry><entry><screen/></entry><entry>Username used to authenticate with the PPPoE service.</entry></row>
+ </tbody></tgroup></table></para>
+ <para><table><title>serial 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>baud</screen></entry><entry><screen>uint32</screen></entry><entry><screen>57600</screen></entry><entry>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.</entry></row>
+ <row><entry><screen>bits</screen></entry><entry><screen>uint32</screen></entry><entry><screen>8</screen></entry><entry>Byte-width of the serial communication. The 8 in "8n1" for example.</entry></row>
+ <row><entry><screen>name</screen></entry><entry><screen>string</screen></entry><entry><screen>serial</screen></entry><entry>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".</entry></row>
+ <row><entry><screen>parity</screen></entry><entry><screen>byte</screen></entry><entry><screen/></entry><entry>The connection parity: 69 (ASCII 'E') for even parity, 111 (ASCII 'o') for odd, 110 (ASCII 'n') for none.</entry></row>
+ <row><entry><screen>send-delay</screen></entry><entry><screen>uint64</screen></entry><entry><screen>0</screen></entry><entry>Time to delay between each byte sent to the modem, in microseconds.</entry></row>
+ <row><entry><screen>stopbits</screen></entry><entry><screen>uint32</screen></entry><entry><screen>1</screen></entry><entry>Number of stop bits for communication on the serial port. Either 1 or 2. The 1 in "8n1" for example.</entry></row>
+ </tbody></tgroup></table></para>
+ <para><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>config</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>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.</entry></row>
+ <row><entry><screen>interface-name</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>Deprecated in favor of connection.interface-name, but can be used for backward-compatibility with older daemons, to set the team's interface name.</entry></row>
+ <row><entry><screen>name</screen></entry><entry><screen>string</screen></entry><entry><screen>team</screen></entry><entry>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".</entry></row>
+ </tbody></tgroup></table></para>
+ <para><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>config</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>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.</entry></row>
+ <row><entry><screen>name</screen></entry><entry><screen>string</screen></entry><entry><screen>team-port</screen></entry><entry>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".</entry></row>
+ </tbody></tgroup></table></para>
+ <para><table><title>vlan 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>egress-priority-map</screen></entry><entry><screen>array of string</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>
+ <row><entry><screen>flags</screen></entry><entry><screen>NMVlanFlags (uint32)</screen></entry><entry><screen/></entry><entry>One or more flags which control the behavior and features of the VLAN interface. Flags include NM_VLAN_FLAG_REORDER_HEADERS (0x1) (reordering of output packet headers), NM_VLAN_FLAG_GVRP (0x2) (use of the GVRP protocol), and NM_VLAN_FLAG_LOOSE_BINDING (0x4) (loose binding of the interface to its master device's operating state).</entry></row>
+ <row><entry><screen>id</screen></entry><entry><screen>uint32</screen></entry><entry><screen>0</screen></entry><entry>The VLAN identifier that the interface created by this connection should be assigned.</entry></row>
+ <row><entry><screen>ingress-priority-map</screen></entry><entry><screen>array of string</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>interface-name</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>Deprecated in favor of connection.interface-name, but can be used for backward-compatibility with older daemons, to set the vlan's interface name.</entry></row>
+ <row><entry><screen>name</screen></entry><entry><screen>string</screen></entry><entry><screen>vlan</screen></entry><entry>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".</entry></row>
+ <row><entry><screen>parent</screen></entry><entry><screen>string</screen></entry><entry><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 an "802-3-ethernet" setting with a "mac-address" property.</entry></row>
+ </tbody></tgroup></table></para>
+ <para><table><title>vpn 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>data</screen></entry><entry><screen>dict of string to string</screen></entry><entry><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>name</screen></entry><entry><screen>string</screen></entry><entry><screen>vpn</screen></entry><entry>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".</entry></row>
+ <row><entry><screen>persistent</screen></entry><entry><screen>boolean</screen></entry><entry><screen>FALSE</screen></entry><entry>If the VPN service supports persistence, and this property is TRUE, the VPN will attempt to stay connected across link changes and outages, until explicitly disconnected.</entry></row>
+ <row><entry><screen>secrets</screen></entry><entry><screen>dict of string to string</screen></entry><entry><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>
+ <row><entry><screen>service-type</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>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.</entry></row>
+ <row><entry><screen>user-name</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>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.</entry></row>
+ </tbody></tgroup></table></para>
+ <para><table><title>wimax 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>mac-address</screen></entry><entry><screen>byte array</screen></entry><entry><screen/></entry><entry>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).</entry></row>
+ <row><entry><screen>name</screen></entry><entry><screen>string</screen></entry><entry><screen>wimax</screen></entry><entry>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".</entry></row>
+ <row><entry><screen>network-name</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>Network Service Provider (NSP) name of the WiMAX network this connection should use.</entry></row>
+ </tbody></tgroup></table></para>
+ <para><table><title>802-3-ethernet 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>auto-negotiate</screen></entry><entry><screen>boolean</screen></entry><entry><screen>TRUE</screen></entry><entry>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.</entry></row>
+ <row><entry><screen>cloned-mac-address</screen></entry><entry><screen>byte array</screen></entry><entry><screen/></entry><entry>If specified, request that the device use this MAC address instead of its permanent MAC address. This is known as MAC cloning or spoofing.</entry></row>
+ <row><entry><screen>duplex</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>If specified, request that the device only use the specified duplex mode. Either "half" or "full".</entry></row>
+ <row><entry><screen>mac-address</screen></entry><entry><screen>byte array</screen></entry><entry><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></row>
+ <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></row>
+ <row><entry><screen>mtu</screen></entry><entry><screen>uint32</screen></entry><entry><screen>0</screen></entry><entry>If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames.</entry></row>
+ <row><entry><screen>name</screen></entry><entry><screen>string</screen></entry><entry><screen>802-3-ethernet</screen></entry><entry>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".</entry></row>
+ <row><entry><screen>port</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>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.</entry></row>
+ <row><entry><screen>s390-nettype</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>s390 network device type; one of "qeth", "lcs", or "ctc", representing the different types of virtual network devices available on s390 systems.</entry></row>
+ <row><entry><screen>s390-options</screen></entry><entry><screen>dict of string to string</screen></entry><entry><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. Key names must contain only alphanumeric characters (ie, [a-zA-Z0-9]).</entry></row>
+ <row><entry><screen>s390-subchannels</screen></entry><entry><screen>array of string</screen></entry><entry><screen>[]</screen></entry><entry>Identifies specific subchannels that this network device uses for communication 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><entry><screen>speed</screen></entry><entry><screen>uint32</screen></entry><entry><screen>0</screen></entry><entry>If non-zero, request that the device use only the specified speed. In Mbit/s, ie 100 == 100Mbit/s.</entry></row>
+ </tbody></tgroup></table></para>
+ <para><table><title>802-11-wireless 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>band</screen></entry><entry><screen>string</screen></entry><entry><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 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>bssid</screen></entry><entry><screen>byte array</screen></entry><entry><screen/></entry><entry>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.</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 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>cloned-mac-address</screen></entry><entry><screen>byte array</screen></entry><entry><screen/></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>hidden</screen></entry><entry><screen>boolean</screen></entry><entry><screen>FALSE</screen></entry><entry>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.</entry></row>
+ <row><entry><screen>mac-address</screen></entry><entry><screen>byte array</screen></entry><entry><screen/></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>mac-address-blacklist</screen></entry><entry><screen>array of string</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><entry><screen>mode</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>Wi-Fi network mode; one of "infrastructure", "adhoc" or "ap". If blank, infrastructure is assumed.</entry></row>
+ <row><entry><screen>mtu</screen></entry><entry><screen>uint32</screen></entry><entry><screen>0</screen></entry><entry>If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames.</entry></row>
+ <row><entry><screen>name</screen></entry><entry><screen>string</screen></entry><entry><screen>802-11-wireless</screen></entry><entry>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".</entry></row>
+ <row><entry><screen>rate</screen></entry><entry><screen>uint32</screen></entry><entry><screen>0</screen></entry><entry>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.</entry></row>
+ <row><entry><screen>security</screen></entry><entry><screen>None</screen></entry><entry><screen/></entry><entry>This property is deprecated, but can be set to the value '802-11-wireless-security' when a wireless security setting is also present in the connection dictionary, for compatibility with very old NetworkManager daemons.</entry></row>
+ <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 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>ssid</screen></entry><entry><screen>byte array</screen></entry><entry><screen/></entry><entry>SSID of the Wi-Fi network. Must be specified.</entry></row>
+ <row><entry><screen>tx-power</screen></entry><entry><screen>uint32</screen></entry><entry><screen>0</screen></entry><entry>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.</entry></row>
+ </tbody></tgroup></table></para>
+ <para><table><title>802-11-wireless-security 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>auth-alg</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>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.</entry></row>
+ <row><entry><screen>group</screen></entry><entry><screen>array of string</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><entry><screen>key-mgmt</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>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.</entry></row>
+ <row><entry><screen>leap-password</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>The login password for legacy LEAP connections (ie, key-mgmt = "ieee8021x" and auth-alg = "leap").</entry></row>
+ <row><entry><screen>leap-password-flags</screen></entry><entry><screen>NMSettingSecretFlags (uint32)</screen></entry><entry><screen/></entry><entry>Flags indicating how to handle the "leap-password" property.</entry></row>
+ <row><entry><screen>leap-username</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>The login username for legacy LEAP connections (ie, key-mgmt = "ieee8021x" and auth-alg = "leap").</entry></row>
+ <row><entry><screen>name</screen></entry><entry><screen>string</screen></entry><entry><screen>802-11-wireless-security</screen></entry><entry>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".</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 "tkip" or "ccmp".</entry></row>
+ <row><entry><screen>proto</screen></entry><entry><screen>array of string</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>psk</screen></entry><entry><screen>string</screen></entry><entry><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 Wi-Fi network.</entry></row>
+ <row><entry><screen>psk-flags</screen></entry><entry><screen>NMSettingSecretFlags (uint32)</screen></entry><entry><screen/></entry><entry>Flags indicating how to handle the "psk" property.</entry></row>
+ <row><entry><screen>wep-key-flags</screen></entry><entry><screen>NMSettingSecretFlags (uint32)</screen></entry><entry><screen/></entry><entry>Flags indicating how to handle the "wep-key0", "wep-key1", "wep-key2", and "wep-key3" properties.</entry></row>
+ <row><entry><screen>wep-key-type</screen></entry><entry><screen>NMWepKeyType (uint32)</screen></entry><entry><screen/></entry><entry>Controls the interpretation of WEP keys. Allowed values are NM_WEP_KEY_TYPE_KEY (1), 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 (2), 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.</entry></row>
+ <row><entry><screen>wep-key0</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>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.</entry></row>
+ <row><entry><screen>wep-key1</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>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.</entry></row>
+ <row><entry><screen>wep-key2</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>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.</entry></row>
+ <row><entry><screen>wep-key3</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>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.</entry></row>
+ <row><entry><screen>wep-tx-keyidx</screen></entry><entry><screen>uint32</screen></entry><entry><screen>0</screen></entry><entry>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.</entry></row>
+ </tbody></tgroup></table></para>
</section>
diff --git a/docs/api/settings-spec.xsl b/docs/api/settings-spec.xsl
new file mode 100644
index 000000000..04feb3987
--- /dev/null
+++ b/docs/api/settings-spec.xsl
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+ <xsl:output
+ method="xml"
+ doctype-public="-//OASIS//DTD DocBook XML V4.3//EN"
+ doctype-system="http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"
+ />
+
+ <xsl:template match="nm-setting-docs">
+ <section>
+ <title>Configuration Settings</title>
+ <xsl:apply-templates/>
+ </section>
+ </xsl:template>
+
+ <xsl:template match="setting">
+ <para>
+ <table>
+ <title><xsl:value-of select="@name"/> 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>
+ <xsl:apply-templates/>
+ </tbody>
+ </tgroup>
+ </table>
+ </para>
+ </xsl:template>
+
+ <xsl:template match="property">
+ <xsl:variable name="setting_name" select="../@name"/>
+ <row>
+ <entry><screen><xsl:value-of select="@name"/></screen></entry>
+ <entry><screen><xsl:value-of select="@type"/></screen></entry>
+ <entry><screen><xsl:value-of select="@default"/></screen></entry>
+ <entry><xsl:value-of select="@description"/><xsl:if test="@type = 'NMSettingSecretFlags'"> (see <xref linkend="secrets-flags"/> for flag values)</xsl:if></entry>
+ </row>
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/docs/api/spec.html b/docs/api/spec.html
index 84819cabc..cf717b594 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.10.0</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 1.0.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.10.0</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 1.0.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
@@ -162,11 +162,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
</dd></dl></div><div><h4>Returns</h4><dl><dt><code>active_connection</code> -
<code>o</code></dt><dd>
The path of the active connection object representing this active connection.
- </dd></dl></div><div><h4>Possible errors</h4><dl><dt><code>org.freedesktop.NetworkManager.Error.UnknownConnection</code></dt><dd>
- Connection was not provided by the settings service.
- <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.Error.UnknownDevice</code></dt><dd>
- Unknown device.
- <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.Error.ConnectionActivating</code></dt><dd>Another connection is already activating or the same connection is already active. FIXME: check if the error name is correct. FIXME: split into 2 errors?</dd><dt><code>org.freedesktop.NetworkManager.Error.ConnectionInvalid</code></dt><dd>The connection is invalid for this device.</dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.AddAndActivateConnection" id="org.freedesktop.NetworkManager.AddAndActivateConnection">AddAndActivateConnection</a> (
+ </dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.AddAndActivateConnection" id="org.freedesktop.NetworkManager.AddAndActivateConnection">AddAndActivateConnection</a> (
a{sa{sv}}: connection, o: device, o: specific_object
) &#8594;
o, o</h3><div class="docstring">
@@ -195,11 +191,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
</dd><dt><code>active_connection</code> -
<code>o</code></dt><dd>
The path of the active connection object representing this active connection.
- </dd></dl></div><div><h4>Possible errors</h4><dl><dt><code>org.freedesktop.NetworkManager.Error.UnknownConnection</code></dt><dd>
- Connection was not provided by the settings service.
- <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.Error.UnknownDevice</code></dt><dd>
- Unknown device.
- <em>(generic description)</em></dd><dt><code>org.freedesktop.NetworkManager.Error.ConnectionInvalid</code></dt><dd>The connection is invalid for this device.</dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.DeactivateConnection" id="org.freedesktop.NetworkManager.DeactivateConnection">DeactivateConnection</a> (
+ </dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.DeactivateConnection" id="org.freedesktop.NetworkManager.DeactivateConnection">DeactivateConnection</a> (
o: active_connection
) &#8594;
nothing</h3><div class="docstring">
@@ -254,7 +246,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
Set logging verbosity and which operations are logged.
</div><div><h4>Parameters</h4><dl><dt><code>level</code> -
<code>s</code></dt><dd>
- One of [ERR, WARN, INFO, DEBUG].
+ One of [ERR, WARN, INFO, DEBUG, TRACE].
</dd><dt><code>domains</code> -
<code>s</code></dt><dd>
A combination of logging domains separated by commas (','), or "NONE"
@@ -277,7 +269,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
Get current logging verbosity level and operations domains.
</div><div><h4>Returns</h4><dl><dt><code>level</code> -
<code>s</code></dt><dd>
- One of [ERR, WARN, INFO, DEBUG].
+ One of [ERR, WARN, INFO, DEBUG, TRACE].
</dd><dt><code>domains</code> -
<code>s</code></dt><dd>
For available domains see SetLogging() call.
@@ -383,6 +375,12 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
indicates the connection that has the default route. If there
is a VPN active with the default route, then this indicates
the connection that contains the route to the VPN endpoint.
+ </dd><dt><code>PrimaryConnectionType</code> -
+ <code>s</code> -
+ <code>(read)</code></dt><dd>
+ The connection type of the "primary" active connection being
+ used to access the network. This is the same as the Type
+ property on the object indicated by PrimaryConnection.
</dd><dt><code>ActivatingConnection</code> -
<code>o</code> -
<code>(read)</code></dt><dd>
@@ -491,6 +489,12 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
) &#8594;
nothing</h3><div class="docstring">
Disconnects a device and prevents the device from automatically activating further connections without user intervention.
+ </div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.Device.Delete" id="org.freedesktop.NetworkManager.Device.Delete">Delete</a> (
+
+ ) &#8594;
+ nothing</h3><div class="docstring">
+ Deletes a software device from NetworkManager and removes the interface from the system.
+ The method returns an error when called for a hardware device.
</div></div><h2>Signals:</h2><div class="signal"><h3><a name="org.freedesktop.NetworkManager.Device.StateChanged" id="org.freedesktop.NetworkManager.Device.StateChanged">StateChanged</a> (
u: new_state, u: old_state, u: reason
)</h3><div class="docstring"></div><div><h4>Parameters</h4><dl><dt><code>new_state</code> -
@@ -603,7 +607,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
If TRUE, indicates the device is allowed to autoconnect. If FALSE,
manual intervention is required before the device will automatically
connect to a known network, such as activating a connection using the
- device, or setting this property to TRUE.
+ device, or setting this property to TRUE. This property cannot be
+ set to TRUE for default-unmanaged devices, since they never autoconnect.
</dd><dt><code>FirmwareMissing</code> -
<code>b</code> -
<code>(read)</code></dt><dd>
@@ -1212,6 +1217,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
<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>Parent</code> -
+ <code>o</code> -
+ <code>(read)</code></dt><dd>
+ Object path of the parent device of this VLAN device.
</dd><dt><code>VlanId</code> -
<code>u</code> -
<code>(read)</code></dt><dd>
@@ -1257,19 +1266,39 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
(<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> -
+ </dd></dl></div></div><h2>Properties:</h2><dl><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>Routes</code> -
+ <code>(read)</code></dt><dd>
+ Array of arrays of IPv4 address/prefix/gateway. All 3
+ elements of each array are in network byte order. Essentially:
+ [(addr, prefix, gateway), (addr, prefix, gateway), ...]
+
+ Deprecated: use AddressData and Gateway
+ </dd><dt><code>AddressData</code> -
+ <code>aa{sv}</code> -
+ <code>(read)</code></dt><dd>
+ Array of IP address data objects. All addresses will include
+ "address" (an IP address string), and "prefix" (a uint). Some
+ addresses may include additional attributes.
+ </dd><dt><code>Gateway</code> -
+ <code>s</code> -
+ <code>(read)</code></dt><dd>The gateway in use.</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), ...]
+ <code>(read)</code></dt><dd>
+ Arrays 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), ...]
+
+ Deprecated: use RouteData
+ </dd><dt><code>RouteData</code> -
+ <code>aa{sv}</code> -
+ <code>(read)</code></dt><dd>
+ Array of IP route data objects. All routes will include "dest"
+ (an IP address string) and "prefix" (a uint). Some routes may
+ include "next-hop" (an IP address string), "metric" (a uint),
+ and additional attributes.
</dd><dt><code>Nameservers</code> -
<code>au</code> -
<code>(read)</code></dt><dd>The nameservers in use.</dd><dt><code>Domains</code> -
@@ -1287,13 +1316,34 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
(<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> -
+ </dd></dl></div></div><h2>Properties:</h2><dl><dt><code>Addresses</code> -
<code>a(ayuay)</code> -
- <code>(read)</code></dt><dd>Tuples of IPv6 address/prefix/gateway.</dd><dt><code>Routes</code> -
+ <code>(read)</code></dt><dd>
+ Array of tuples of IPv6 address/prefix/gateway.
+
+ Deprecated: use AddressData and Gateway.
+ </dd><dt><code>AddressData</code> -
+ <code>aa{sv}</code> -
+ <code>(read)</code></dt><dd>
+ Array of IP address data objects. All addresses will include
+ "address" (an IP address string), and "prefix" (a uint). Some
+ addresses may include additional attributes.
+ </dd><dt><code>Gateway</code> -
+ <code>s</code> -
+ <code>(read)</code></dt><dd>The gateway in use.</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>(read)</code></dt><dd>
+ Tuples of IPv6 route/prefix/next-hop/metric.
+
+ Deprecated: use RouteData
+ </dd><dt><code>RouteData</code> -
+ <code>aa{sv}</code> -
+ <code>(read)</code></dt><dd>
+ Array of IP route data objects. All routes will include "dest"
+ (an IP address string) and "prefix" (a uint). Some routes may
+ include "next-hop" (an IP address string), "metric" (a uint),
+ and additional attributes.
+ </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> -
@@ -1539,7 +1589,12 @@ 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><div class="method"><h3><a name="org.freedesktop.NetworkManager.Settings.Connection.Save" id="org.freedesktop.NetworkManager.Settings.Connection.Save">Save</a> (
+ </dd></dl></div></div><div class="method"><h3><a name="org.freedesktop.NetworkManager.Settings.Connection.ClearSecrets" id="org.freedesktop.NetworkManager.Settings.Connection.ClearSecrets">ClearSecrets</a> (
+
+ ) &#8594;
+ nothing</h3><div class="docstring">
+ Clear the secrets belonging to this network connection profile.
+ </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">
@@ -2117,7 +2172,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
Emitted when the plugin state changes.
</div><div><h4>Parameters</h4><dl><dt><code>state</code> -
<code>u</code>
- (<a xmlns="" href="#type-NM_VPN_CONNECTION_STATE">NM_VPN_CONNECTION_STATE</a>)
+ (<a xmlns="" href="#type-NM_VPN_SERVICE_STATE">NM_VPN_SERVICE_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.SecretsRequired" id="org.freedesktop.NetworkManager.VPN.Plugin.SecretsRequired">SecretsRequired</a> (
@@ -2183,10 +2238,24 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
</dd></dl></div></div><h2>Properties:</h2><dl><dt><code>State</code> -
<code>u</code> -
<code>(read)</code>
- (<a xmlns="" href="#type-NM_VPN_CONNECTION_STATE">NM_VPN_CONNECTION_STATE</a>)
+ (<a xmlns="" href="#type-NM_VPN_SERVICE_STATE">NM_VPN_SERVICE_STATE</a>)
</dt><dd>
The state of the plugin.
- </dd></dl><h2>Enumerated types:</h2><h3><a name="type-NM_VPN_PLUGIN_FAILURE" id="type-NM_VPN_PLUGIN_FAILURE">NM_VPN_PLUGIN_FAILURE</a></h3><dl><dt><code>NM_VPN_PLUGIN_FAILURE_LOGIN_FAILED = 0</code></dt><dd>
+ </dd></dl><h2>Enumerated types:</h2><h3><a name="type-NM_VPN_SERVICE_STATE" id="type-NM_VPN_SERVICE_STATE">NM_VPN_SERVICE_STATE</a></h3><dl><dt><code>NM_VPN_SERVICE_STATE_UNKNOWN = 0</code></dt><dd>
+ The state of the VPN plugin is unknown.
+ </dd><dt><code>NM_VPN_SERVICE_STATE_INIT = 1</code></dt><dd>
+ The VPN plugin is initialized.
+ </dd><dt><code>NM_VPN_SERVICE_STATE_SHUTDOWN = 2</code></dt><dd>
+ (Not used.)
+ </dd><dt><code>NM_VPN_SERVICE_STATE_STARTING = 3</code></dt><dd>
+ The plugin is attempting to connect to a VPN server.
+ </dd><dt><code>NM_VPN_SERVICE_STATE_STARTED = 4</code></dt><dd>
+ The plugin has connected to a VPN server.
+ </dd><dt><code>NM_VPN_SERVICE_STATE_STOPPING = 5</code></dt><dd>
+ The plugin is disconnecting from the VPN server.
+ </dd><dt><code>NM_VPN_SERVICE_STATE_STOPPED = 6</code></dt><dd>
+ The plugin has disconnected from the VPN server.
+ </dd></dl><h3><a name="type-NM_VPN_PLUGIN_FAILURE" id="type-NM_VPN_PLUGIN_FAILURE">NM_VPN_PLUGIN_FAILURE</a></h3><dl><dt><code>NM_VPN_PLUGIN_FAILURE_LOGIN_FAILED = 0</code></dt><dd>
Login failed.
</dd><dt><code>NM_VPN_PLUGIN_FAILURE_CONNECT_FAILED = 1</code></dt><dd>
Connect failed.
@@ -2295,6 +2364,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
- u</li><li><code><a href="#type-NM_VPN_CONNECTION_STATE">NM_VPN_CONNECTION_STATE</a></code>
- u</li><li><code><a href="#type-NM_VPN_CONNECTION_STATE_REASON">NM_VPN_CONNECTION_STATE_REASON</a></code>
- u</li><li><code><a href="#type-NM_VPN_PLUGIN_FAILURE">NM_VPN_PLUGIN_FAILURE</a></code>
+ - u</li><li><code><a href="#type-NM_VPN_SERVICE_STATE">NM_VPN_SERVICE_STATE</a></code>
- u</li><li><code><a href="#type-NM_WIMAX_NSP_NETWORK_TYPE">NM_WIMAX_NSP_NETWORK_TYPE</a></code>
- u</li><li><code><a href="#type-String_String_Map">String_String_Map</a></code>
- a{ s &#8594; s }
diff --git a/docs/api/version.xml b/docs/api/version.xml
index 82e28fcb1..3eefcb9dd 100644
--- a/docs/api/version.xml
+++ b/docs/api/version.xml
@@ -1 +1 @@
-0.9.10.0
+1.0.0
diff --git a/docs/libnm-glib/Makefile.am b/docs/libnm-glib/Makefile.am
index c6c9edf8f..5c3c492ff 100644
--- a/docs/libnm-glib/Makefile.am
+++ b/docs/libnm-glib/Makefile.am
@@ -30,30 +30,13 @@ CFILE_GLOB=$(top_srcdir)/libnm-glib/*.c
# Header files to ignore when scanning.
IGNORE_HFILES= \
+ common.h \
+ nm-dbus-helpers-private.h \
nm-device-private.h \
nm-object-cache.h \
nm-object-private.h \
nm-remote-connection-private.h \
nm-types-private.h \
- nm-access-point-bindings.h \
- nm-active-connection-bindings.h \
- nm-client-bindings.h \
- nm-device-bindings.h \
- nm-device-bt-bindings.h \
- nm-device-ethernet-bindings.h \
- nm-device-wifi-bindings.h \
- nm-device-modem-bindings.h \
- nm-device-wimax-bindings.h \
- nm-dhcp4-config-bindings.h \
- nm-dhcp6-config-bindings.h \
- nm-settings-connection-glue.h \
- nm-ip4-config-bindings.h \
- nm-ip6-config-bindings.h \
- nm-settings-bindings.h \
- nm-settings-glue.h \
- nm-settings-connection-bindings.h \
- nm-secret-agent-bindings.h \
- nm-vpn-connection-bindings.h \
nm-secret-agent-glue.h \
nm-vpn-plugin-glue.h
@@ -70,8 +53,6 @@ extra_files = libnm-glib.png
# CFLAGS and LDFLAGS for compiling scan program. Only needed
# if $(DOC_MODULE).types is non-empty.
GTKDOC_CFLAGS = \
- -I$(top_srcdir)/include \
- -I$(top_builddir)/include \
-I$(top_srcdir)/libnm-util \
-I$(top_builddir)/libnm-util \
-I$(top_srcdir)/libnm-glib \
diff --git a/docs/libnm-glib/Makefile.in b/docs/libnm-glib/Makefile.in
index a6406abe9..e2f71216a 100644
--- a/docs/libnm-glib/Makefile.in
+++ b/docs/libnm-glib/Makefile.in
@@ -136,6 +136,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -259,6 +261,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -278,6 +281,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -304,7 +308,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -414,30 +418,13 @@ CFILE_GLOB = $(top_srcdir)/libnm-glib/*.c
# Header files to ignore when scanning.
IGNORE_HFILES = \
+ common.h \
+ nm-dbus-helpers-private.h \
nm-device-private.h \
nm-object-cache.h \
nm-object-private.h \
nm-remote-connection-private.h \
nm-types-private.h \
- nm-access-point-bindings.h \
- nm-active-connection-bindings.h \
- nm-client-bindings.h \
- nm-device-bindings.h \
- nm-device-bt-bindings.h \
- nm-device-ethernet-bindings.h \
- nm-device-wifi-bindings.h \
- nm-device-modem-bindings.h \
- nm-device-wimax-bindings.h \
- nm-dhcp4-config-bindings.h \
- nm-dhcp6-config-bindings.h \
- nm-settings-connection-glue.h \
- nm-ip4-config-bindings.h \
- nm-ip6-config-bindings.h \
- nm-settings-bindings.h \
- nm-settings-glue.h \
- nm-settings-connection-bindings.h \
- nm-secret-agent-bindings.h \
- nm-vpn-connection-bindings.h \
nm-secret-agent-glue.h \
nm-vpn-plugin-glue.h
@@ -454,8 +441,6 @@ extra_files = libnm-glib.png
# CFLAGS and LDFLAGS for compiling scan program. Only needed
# if $(DOC_MODULE).types is non-empty.
GTKDOC_CFLAGS = \
- -I$(top_srcdir)/include \
- -I$(top_builddir)/include \
-I$(top_srcdir)/libnm-util \
-I$(top_builddir)/libnm-util \
-I$(top_srcdir)/libnm-glib \
diff --git a/docs/libnm-glib/html/NMAccessPoint.html b/docs/libnm-glib/html/NMAccessPoint.html
index 7c72487cb..97ae9c960 100644
--- a/docs/libnm-glib/html/NMAccessPoint.html
+++ b/docs/libnm-glib/html/NMAccessPoint.html
@@ -57,13 +57,13 @@
<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>);
+<a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NM80211ApFlags"><span class="returnvalue">NM80211ApFlags</span></a> <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>);
+<a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NM80211ApSecurityFlags"><span class="returnvalue">NM80211ApSecurityFlags</span></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> (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>);
+<a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NM80211ApSecurityFlags"><span class="returnvalue">NM80211ApSecurityFlags</span></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> (<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="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NM80211Mode"><span class="returnvalue">NM80211Mode</span></a> <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>,
@@ -247,7 +247,7 @@ Creates a new <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><s
<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>
+<pre class="programlisting"><a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NM80211ApFlags"><span class="returnvalue">NM80211ApFlags</span></a> 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>
@@ -272,7 +272,7 @@ Gets the flags of the access point.
<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>
+<pre class="programlisting"><a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NM80211ApSecurityFlags"><span class="returnvalue">NM80211ApSecurityFlags</span></a> 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>
@@ -297,7 +297,7 @@ Gets the WPA (version 1) flags of the access point.
<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>
+<pre class="programlisting"><a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NM80211ApSecurityFlags"><span class="returnvalue">NM80211ApSecurityFlags</span></a> 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.
@@ -400,7 +400,7 @@ Gets the frequency of the access point.
<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>
+<pre class="programlisting"><a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NM80211Mode"><span class="returnvalue">NM80211Mode</span></a> 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>
@@ -502,7 +502,7 @@ filter that list with this function.
<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>
+<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> NMConnection]</span>
</td>
</tr>
<tr>
@@ -511,7 +511,7 @@ filter that list with this function.
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>
+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> NMConnection]</span>
</td>
</tr>
</tbody>
diff --git a/docs/libnm-glib/html/NMActiveConnection.html b/docs/libnm-glib/html/NMActiveConnection.html
index 0e8471d51..961428e26 100644
--- a/docs/libnm-glib/html/NMActiveConnection.html
+++ b/docs/libnm-glib/html/NMActiveConnection.html
@@ -70,7 +70,7 @@ const <span class="returnvalue">char</span> * <a class="link" href="NMAct
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>);
+<a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NMActiveConnectionState"><span class="returnvalue">NMActiveConnectionState</span></a> <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>);
@@ -458,7 +458,7 @@ Gets the <a href="NMDevice.html"><span class="type">NMDevices</span></a> used fo
<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>.
-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>
+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> NMDevice]</span>
</td>
</tr>
</tbody>
@@ -467,7 +467,7 @@ This is the internal copy used by the connection, and must not be modified. <spa
<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>
+<pre class="programlisting"><a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NMActiveConnectionState"><span class="returnvalue">NMActiveConnectionState</span></a> 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>
@@ -563,7 +563,7 @@ Gets the current <a class="link" href="NMIP4Config.html" title="NMIP4Config"><sp
<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>
+connection is not in the <a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NM-ACTIVE-CONNECTION-STATE-ACTIVATED:CAPS"><code class="literal">NM_ACTIVE_CONNECTION_STATE_ACTIVATED</code></a>
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>
@@ -595,7 +595,7 @@ Gets the current <a class="link" href="NMDHCP4Config.html" title="NMDHCP4Config"
<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>
+<a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NM-ACTIVE-CONNECTION-STATE-ACTIVATED:CAPS"><code class="literal">NM_ACTIVE_CONNECTION_STATE_ACTIVATED</code></a> 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>
@@ -650,7 +650,7 @@ Gets the current <a class="link" href="NMIP6Config.html" title="NMIP6Config"><sp
<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>
+connection is not in the <a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NM-ACTIVE-CONNECTION-STATE-ACTIVATED:CAPS"><code class="literal">NM_ACTIVE_CONNECTION_STATE_ACTIVATED</code></a>
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>
@@ -682,7 +682,7 @@ Gets the current <a class="link" href="NMDHCP6Config.html" title="NMDHCP6Config"
<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>
+<a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NM-ACTIVE-CONNECTION-STATE-ACTIVATED:CAPS"><code class="literal">NM_ACTIVE_CONNECTION_STATE_ACTIVATED</code></a> 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>
@@ -749,7 +749,7 @@ Whether the active connection is the default IPv6 one.
<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>* : Read</pre>
-<p>Devices.</p>
+<p></p>
</div>
<hr>
<div class="refsect2">
diff --git a/docs/libnm-glib/html/NMClient.html b/docs/libnm-glib/html/NMClient.html
index 67de27865..b28d9ed53 100644
--- a/docs/libnm-glib/html/NMClient.html
+++ b/docs/libnm-glib/html/NMClient.html
@@ -121,7 +121,7 @@ const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.
<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="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NMState"><span class="returnvalue">NMState</span></a> <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>);
@@ -138,15 +138,15 @@ const <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.
<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>,
+<a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NMConnectivityState"><span class="returnvalue">NMConnectivityState</span></a> <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>);
+<a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NMConnectivityState"><span class="returnvalue">NMConnectivityState</span></a> <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>,
+<a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NMConnectivityState"><span class="returnvalue">NMConnectivityState</span></a> <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>);
@@ -680,9 +680,9 @@ Gets the result of an <a class="link" href="NMClient.html#nm-client-new-async" t
<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>.
+<code class="literal">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="variablelist"><table border="0" class="variablelist">
<colgroup>
@@ -699,7 +699,7 @@ returned array is, and then you may use device-specific methods such as
<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>
+<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> NMDevice]</span>
</td>
</tr>
</tbody>
@@ -799,6 +799,12 @@ determine which network to connect to given the settings in <em class="parameter
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>
+<p>
+Note that the callback is invoked when NetworkManager has started activating
+the new connection, not when it finishes. You can used the returned
+<a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> object (in particular, <a class="link" href="NMActiveConnection.html#NMActiveConnection--state" title='The "state" property'><span class="type">"state"</span></a>) to
+track the activation to its completion.
+</p>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -871,6 +877,12 @@ 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>
+<p>
+Note that the callback is invoked when NetworkManager has started activating
+the new connection, not when it finishes. You can used the returned
+<a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> object (in particular, <a class="link" href="NMActiveConnection.html#NMActiveConnection--state" title='The "state" property'><span class="type">"state"</span></a>) to
+track the activation to its completion.
+</p>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -1266,7 +1278,7 @@ Gets NetworkManager version.
<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>
+<pre class="programlisting"><a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NMState"><span class="returnvalue">NMState</span></a> 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>
@@ -1283,7 +1295,7 @@ Gets the current daemon state.
</tr>
<tr>
<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
-<td>the current <code class="literal">NMState</code>
+<td>the current <a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NMState"><code class="literal">NMState</code></a>
</td>
</tr>
</tbody>
@@ -1364,7 +1376,7 @@ Gets the active connections.
<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>
+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> NMActiveConnection]</span>
</td>
</tr>
</tbody>
@@ -1526,7 +1538,7 @@ domains separated by ",". (<a href="/usr/share/gtk-doc/html/liboil/liboil-liboil
<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>
+<pre class="programlisting"><a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NMConnectivityState"><span class="returnvalue">NMConnectivityState</span></a> 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
@@ -1555,7 +1567,7 @@ connectivity state first before returning any information.
<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>,
+<pre class="programlisting"><a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NMConnectivityState"><span class="returnvalue">NMConnectivityState</span></a> 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>
@@ -1640,7 +1652,7 @@ re-checking, and <a class="link" href="NMClient.html#nm-client-check-connectivit
<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>,
+<pre class="programlisting"><a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NMConnectivityState"><span class="returnvalue">NMConnectivityState</span></a> 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>
@@ -1763,7 +1775,10 @@ likely to become the new <a class="link" href="NMClient.html#NMClient--primary-c
<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>* : Read</pre>
-<p>Active connections.</p>
+<p>
+The active connections.
+Type: GLib.PtrArray
+</p>
</div>
<hr>
<div class="refsect2">
@@ -1789,14 +1804,18 @@ List of known network devices.
<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> : Read</pre>
-<p>Whether NetworkManager is running.</p>
+<p>
+Whether the daemon is running.
+</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> : Read / Write</pre>
-<p>Is networking enabled.</p>
+<p>
+Whether networking is enabled.
+</p>
<p>Default value: TRUE</p>
</div>
<hr>
@@ -1842,42 +1861,54 @@ The NetworkManager version.
<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> : Read / Write</pre>
-<p>Is WiMAX enabled.</p>
+<p>
+Whether WiMAX functionality is enabled.
+</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> : Read</pre>
-<p>Is WiMAX hardware enabled.</p>
+<p>
+Whether the WiMAX hardware is enabled.
+</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> : Read / Write</pre>
-<p>Is wireless enabled.</p>
+<p>
+Whether wireless is enabled.
+</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> : Read</pre>
-<p>Is wireless hardware enabled.</p>
+<p>
+Whether the wireless hardware is enabled.
+</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> : Read / Write</pre>
-<p>Is WWAN enabled.</p>
+<p>
+Whether WWAN functionality is enabled.
+</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> : Read</pre>
-<p>Is WWAN hardware enabled.</p>
+<p>
+Whether the WWAN hardware is enabled.
+</p>
<p>Default value: FALSE</p>
</div>
</div>
@@ -1903,7 +1934,7 @@ Notifies that a <a class="link" href="NMDevice.html" title="NMDevice"><span clas
</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>the new device. <span class="annotation">[<acronym title="Override the parsed C type with given type."><span class="acronym">type</span></acronym> NMDevice]</span>
</td>
</tr>
<tr>
@@ -1934,7 +1965,7 @@ Notifies that a <a class="link" href="NMDevice.html" title="NMDevice"><span clas
</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>the removed device. <span class="annotation">[<acronym title="Override the parsed C type with given type."><span class="acronym">type</span></acronym> NMDevice]</span>
</td>
</tr>
<tr>
diff --git a/docs/libnm-glib/html/NMDevice.html b/docs/libnm-glib/html/NMDevice.html
index ad4e490b9..c34214d58 100644
--- a/docs/libnm-glib/html/NMDevice.html
+++ b/docs/libnm-glib/html/NMDevice.html
@@ -77,14 +77,14 @@
<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>);
+<a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NMDeviceType"><span class="returnvalue">NMDeviceType</span></a> <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="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NMDeviceCapabilities"><span class="returnvalue">NMDeviceCapabilities</span></a> <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>,
@@ -94,23 +94,27 @@ const <span class="returnvalue">char</span> * <a class="link" href="NMDev
<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 href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NMDeviceState"><span class="returnvalue">NMDeviceState</span></a> <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>);
+<a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NMDeviceState"><span class="returnvalue">NMDeviceState</span></a> <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><a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NMDeviceStateReason"><span class="type">NMDeviceStateReason</span></a> *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>);
+<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-is-software" title="nm_device_is_software ()">nm_device_is_software</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>,
+<span class="returnvalue">void</span> (<a class="link" href="NMDevice.html#NMDeviceCallbackFn" title="NMDeviceCallbackFn ()">*NMDeviceCallbackFn</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 class="link" href="NMDevice.html#NMDeviceCallbackFn" title="NMDeviceCallbackFn ()"><span class="type">NMDeviceCallbackFn</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="NMDevice.html#nm-device-delete" title="nm_device_delete ()">nm_device_delete</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#NMDeviceCallbackFn" title="NMDeviceCallbackFn ()"><span class="type">NMDeviceCallbackFn</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>);
@@ -120,6 +124,9 @@ const <span class="returnvalue">char</span> * <a class="link" href="NMDev
<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>);
+<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>);
</pre>
</div>
<div class="refsect1">
@@ -552,7 +559,7 @@ used by the device, and must not be modified.</td>
<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>
+<pre class="programlisting"><a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NMDeviceType"><span class="returnvalue">NMDeviceType</span></a> 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>
@@ -737,7 +744,7 @@ This is the internal string used by the device, and must not be modified.</td>
<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>
+<pre class="programlisting"><a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NMDeviceCapabilities"><span class="returnvalue">NMDeviceCapabilities</span></a> 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>
@@ -995,7 +1002,7 @@ using DHCP. <span class="annotation">[<acronym title="Don't free data after the
<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>
+<pre class="programlisting"><a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NMDeviceState"><span class="returnvalue">NMDeviceState</span></a> 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>
@@ -1020,8 +1027,8 @@ Gets the current <a class="link" href="NMDevice.html" title="NMDevice"><span cla
<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>
+<pre class="programlisting"><a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NMDeviceState"><span class="returnvalue">NMDeviceState</span></a> 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><a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NMDeviceStateReason"><span class="type">NMDeviceStateReason</span></a> *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).
@@ -1039,7 +1046,7 @@ the state (<em class="parameter"><code>reason</code></em> argument).
</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>location to store reason (<a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NMDeviceStateReason"><span class="type">NMDeviceStateReason</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="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>
@@ -1099,7 +1106,7 @@ be activated on <em class="parameter"><code>device</code></em>.
<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>
+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> NMRemoteConnection]</span>
</td>
</tr>
</tbody>
@@ -1165,6 +1172,33 @@ Gets the MTU of the <a class="link" href="NMDevice.html" title="NMDevice"><span
</div>
<hr>
<div class="refsect2">
+<a name="nm-device-is-software"></a><h3>nm_device_is_software ()</h3>
+<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_is_software (<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 device is a software 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="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 <em class="parameter"><code>device</code></em> is a software device, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it is a hardware device.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.0</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>
@@ -1220,8 +1254,7 @@ device, and must not be modified.</td>
<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>.
+Gets a description of <em class="parameter"><code>device</code></em>, based on its vendor and product names.
</p>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
@@ -1279,8 +1312,8 @@ devices in <em class="parameter"><code>devices</code></em>.
</div>
<hr>
<div class="refsect2">
-<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>,
+<a name="NMDeviceCallbackFn"></a><h3>NMDeviceCallbackFn ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> (*NMDeviceCallbackFn) (<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>
@@ -1290,7 +1323,7 @@ devices in <em class="parameter"><code>devices</code></em>.
<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 class="link" href="NMDevice.html#NMDeviceCallbackFn" title="NMDeviceCallbackFn ()"><span class="type">NMDeviceCallbackFn</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
@@ -1324,6 +1357,41 @@ operation completes. <span class="annotation">[<acronym title="The callback is v
</div>
<hr>
<div class="refsect2">
+<a name="nm-device-delete"></a><h3>nm_device_delete ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_device_delete (<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#NMDeviceCallbackFn" title="NMDeviceCallbackFn ()"><span class="type">NMDeviceCallbackFn</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>
+Deletes the software device. Hardware devices can't be deleted.
+</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="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
+<td>callback to be called when delete
+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>
+</tbody>
+</table></div>
+<p class="since">Since 1.0</p>
+</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>
@@ -1349,7 +1417,7 @@ incompatible with the device. To get the full list of connections see
</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>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> NMConnection]</span>
</td>
</tr>
<tr>
@@ -1358,7 +1426,7 @@ incompatible with the device. To get the full list of connections see
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. <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>
+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> NMConnection]</span>
</td>
</tr>
</tbody>
@@ -1456,7 +1524,7 @@ if is incompatible with the device's capabilities and characteristics.</td>
<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
+Gets the (primary) <a href="https://developer.gnome.org/libnm/1.0/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">
@@ -1473,12 +1541,21 @@ that can be used on <em class="parameter"><code>device</code></em>.
<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>
+<em class="parameter"><code>device</code></em>'s associated <a href="https://developer.gnome.org/libnm/1.0/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="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>
</div>
<div class="refsect1">
<a name="NMDevice.property-details"></a><h2>Property Details</h2>
diff --git a/docs/libnm-glib/html/NMDeviceBond.html b/docs/libnm-glib/html/NMDeviceBond.html
index 9a5025875..6a708b0b5 100644
--- a/docs/libnm-glib/html/NMDeviceBond.html
+++ b/docs/libnm-glib/html/NMDeviceBond.html
@@ -306,7 +306,7 @@ Gets the devices currently slaved to <em class="parameter"><code>device</code></
<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>
+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> NMDevice]</span>
</td>
</tr>
</tbody>
diff --git a/docs/libnm-glib/html/NMDeviceBridge.html b/docs/libnm-glib/html/NMDeviceBridge.html
index 2b7594ad2..e2bb740cb 100644
--- a/docs/libnm-glib/html/NMDeviceBridge.html
+++ b/docs/libnm-glib/html/NMDeviceBridge.html
@@ -311,7 +311,7 @@ Gets the devices currently slaved to <em class="parameter"><code>device</code></
<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>
+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> NMDevice]</span>
</td>
</tr>
</tbody>
diff --git a/docs/libnm-glib/html/NMDeviceBt.html b/docs/libnm-glib/html/NMDeviceBt.html
index e3a59fc79..c3a5325a9 100644
--- a/docs/libnm-glib/html/NMDeviceBt.html
+++ b/docs/libnm-glib/html/NMDeviceBt.html
@@ -55,7 +55,7 @@
<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>);
+<a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NMBluetoothCapabilities"><span class="returnvalue">NMBluetoothCapabilities</span></a> <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">
@@ -298,7 +298,7 @@ Gets the name of the <a class="link" href="NMDeviceBt.html" title="NMDeviceBt"><
<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>
+<pre class="programlisting"><a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NMBluetoothCapabilities"><span class="returnvalue">NMBluetoothCapabilities</span></a> 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>
@@ -315,7 +315,7 @@ Returns the Bluetooth device's usable capabilities.
</tr>
<tr>
<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>a combination of <a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NMBluetoothCapabilities"><span class="type">NMBluetoothCapabilities</span></a>
</td>
</tr>
</tbody>
@@ -328,7 +328,7 @@ Returns the Bluetooth device's usable capabilities.
<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>.
+The device's bluetooth capabilities, a combination of <a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NMBluetoothCapabilities"><span class="type">NMBluetoothCapabilities</span></a>.
</p>
<p>Default value: 0</p>
</div>
diff --git a/docs/libnm-glib/html/NMDeviceModem.html b/docs/libnm-glib/html/NMDeviceModem.html
index d5fb1cdf8..1399158e6 100644
--- a/docs/libnm-glib/html/NMDeviceModem.html
+++ b/docs/libnm-glib/html/NMDeviceModem.html
@@ -50,9 +50,9 @@
#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>
+<a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NMDeviceModemCapabilities"><span class="returnvalue">NMDeviceModemCapabilities</span></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>
(<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>
+<a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NMDeviceModemCapabilities"><span class="returnvalue">NMDeviceModemCapabilities</span></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>
(<em class="parameter"><code><a class="link" href="NMDeviceModem.html" title="NMDeviceModem"><span class="type">NMDeviceModem</span></a> *self</code></em>);
</pre>
</div>
@@ -193,7 +193,7 @@ Registers an error quark for <a class="link" href="NMDeviceModem.html" title="NM
<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
+<pre class="programlisting"><a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NMDeviceModemCapabilities"><span class="returnvalue">NMDeviceModemCapabilities</span></a> 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
@@ -221,7 +221,7 @@ may require a firmware reload or reinitialization.
<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
+<pre class="programlisting"><a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NMDeviceModemCapabilities"><span class="returnvalue">NMDeviceModemCapabilities</span></a> 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
diff --git a/docs/libnm-glib/html/NMDeviceTeam.html b/docs/libnm-glib/html/NMDeviceTeam.html
index 4557c4b95..9160805ec 100644
--- a/docs/libnm-glib/html/NMDeviceTeam.html
+++ b/docs/libnm-glib/html/NMDeviceTeam.html
@@ -310,7 +310,7 @@ Gets the devices currently enslaved to <em class="parameter"><code>device</code>
<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>
+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> NMDevice]</span>
</td>
</tr>
</tbody>
diff --git a/docs/libnm-glib/html/NMDeviceVlan.html b/docs/libnm-glib/html/NMDeviceVlan.html
index 89e4a9ce3..48198bf6a 100644
--- a/docs/libnm-glib/html/NMDeviceVlan.html
+++ b/docs/libnm-glib/html/NMDeviceVlan.html
@@ -48,6 +48,7 @@
<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-PARENT:CAPS" title="NM_DEVICE_VLAN_PARENT">NM_DEVICE_VLAN_PARENT</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>;
@@ -55,6 +56,7 @@
<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 class="link" href="NMDevice.html" title="NMDevice"><span class="returnvalue">NMDevice</span></a> * <a class="link" href="NMDeviceVlan.html#nm-device-vlan-get-parent" title="nm_device_vlan_get_parent ()">nm_device_vlan_get_parent</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>
@@ -78,6 +80,7 @@ NMDeviceVlan implements
<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--parent" title='The "parent" property'>parent</a>" <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</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>
@@ -182,6 +185,14 @@ Registers an error quark for <a class="link" href="NMDeviceVlan.html" title="NMD
</div>
<hr>
<div class="refsect2">
+<a name="NM-DEVICE-VLAN-PARENT:CAPS"></a><h3>NM_DEVICE_VLAN_PARENT</h3>
+<pre class="programlisting">#define NM_DEVICE_VLAN_PARENT "parent"
+</pre>
+<p>
+</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>
@@ -298,6 +309,30 @@ Whether the device has carrier.
</div>
<hr>
<div class="refsect2">
+<a name="nm-device-vlan-get-parent"></a><h3>nm_device_vlan_get_parent ()</h3>
+<pre class="programlisting"><a class="link" href="NMDevice.html" title="NMDevice"><span class="returnvalue">NMDevice</span></a> * nm_device_vlan_get_parent (<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 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="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 device's parent device. <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 1.0</p>
+</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="variablelist"><table border="0" class="variablelist">
@@ -340,6 +375,15 @@ The hardware (MAC) address of the device.
</div>
<hr>
<div class="refsect2">
+<a name="NMDeviceVlan--parent"></a><h3>The <code class="literal">"parent"</code> property</h3>
+<pre class="programlisting"> "parent" <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>* : Read</pre>
+<p>
+The devices's parent device.
+</p>
+<p class="since">Since 1.0</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> : Read</pre>
<p>
diff --git a/docs/libnm-glib/html/NMDeviceWifi.html b/docs/libnm-glib/html/NMDeviceWifi.html
index 63492658d..7a9a27dfa 100644
--- a/docs/libnm-glib/html/NMDeviceWifi.html
+++ b/docs/libnm-glib/html/NMDeviceWifi.html
@@ -62,9 +62,9 @@
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="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NM80211Mode"><span class="returnvalue">NM80211Mode</span></a> <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>
+<a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NMDeviceWifiCapabilities"><span class="returnvalue">NMDeviceWifiCapabilities</span></a> <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>);
@@ -377,7 +377,7 @@ device, and must not be modified.</td>
<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>
+<pre class="programlisting"><a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NM80211Mode"><span class="returnvalue">NM80211Mode</span></a> 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>
@@ -427,7 +427,7 @@ Gets the bit rate of the <a class="link" href="NMDeviceWifi.html" title="NMDevic
<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
+<pre class="programlisting"><a href="https://developer.gnome.org/libnm/1.0/libnm-nm-dbus-interface.html#NMDeviceWifiCapabilities"><span class="returnvalue">NMDeviceWifiCapabilities</span></a> 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>.
@@ -531,7 +531,7 @@ Gets all the scanned access points of the <a class="link" href="NMDeviceWifi.htm
<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>
+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> NMAccessPoint]</span>
</td>
</tr>
</tbody>
diff --git a/docs/libnm-glib/html/NMDeviceWimax.html b/docs/libnm-glib/html/NMDeviceWimax.html
index 60e44b58c..e082543e0 100644
--- a/docs/libnm-glib/html/NMDeviceWimax.html
+++ b/docs/libnm-glib/html/NMDeviceWimax.html
@@ -406,7 +406,7 @@ Gets all the scanned NSPs of the <a class="link" href="NMDeviceWimax.html" title
<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>
+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> NMWimaxNsp]</span>
</td>
</tr>
</tbody>
diff --git a/docs/libnm-glib/html/NMIP4Config.html b/docs/libnm-glib/html/NMIP4Config.html
index ca30a7b2a..6396397da 100644
--- a/docs/libnm-glib/html/NMIP4Config.html
+++ b/docs/libnm-glib/html/NMIP4Config.html
@@ -254,7 +254,7 @@ Gets the IP4 addresses (containing the address, prefix, and gateway).
<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-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>
+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> NMIP4Address]</span>
</td>
</tr>
</tbody>
@@ -282,7 +282,7 @@ Gets the routes.
<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>
+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> NMIP4Route]</span>
</td>
</tr>
</tbody>
diff --git a/docs/libnm-glib/html/NMIP6Config.html b/docs/libnm-glib/html/NMIP6Config.html
index 9f0865a2d..d923c6f77 100644
--- a/docs/libnm-glib/html/NMIP6Config.html
+++ b/docs/libnm-glib/html/NMIP6Config.html
@@ -247,7 +247,7 @@ Gets the IP6 addresses (containing the address, prefix, and gateway).
<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>
+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> NMIP6Address]</span>
</td>
</tr>
</tbody>
@@ -275,7 +275,7 @@ Gets the routes.
<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>
+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> NMIP6Route]</span>
</td>
</tr>
</tbody>
diff --git a/docs/libnm-glib/html/NMObject.html b/docs/libnm-glib/html/NMObject.html
index 99b05001e..cedff8eec 100644
--- a/docs/libnm-glib/html/NMObject.html
+++ b/docs/libnm-glib/html/NMObject.html
@@ -261,13 +261,13 @@ device, and must not be modified.</td>
<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>* : Read / Write / Construct Only</pre>
-<p>Connection.</p>
+<p></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>* : Read / Write / Construct Only</pre>
-<p>DBus Object Path.</p>
+<p></p>
<p>Default value: NULL</p>
</div>
</div>
diff --git a/docs/libnm-glib/html/NMRemoteConnection.html b/docs/libnm-glib/html/NMRemoteConnection.html
index a5d9e2149..848c1910f 100644
--- a/docs/libnm-glib/html/NMRemoteConnection.html
+++ b/docs/libnm-glib/html/NMRemoteConnection.html
@@ -511,7 +511,7 @@ Request the connection's secrets.
</tr>
<tr>
<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>
+<td>the <a href="https://developer.gnome.org/libnm/1.0/NMSetting.html"><span class="type">NMSetting</span></a> object name to get secrets for</td>
</tr>
<tr>
<td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
@@ -559,19 +559,21 @@ representation.</td>
<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>* : Write / Construct Only</pre>
-<p>DBusGConnection.</p>
+<p>
+The <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> that the <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> is connected to.
+</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>* : Write / Construct Only</pre>
-<p>DBusGConnection.</p>
+<p></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>* : Write / Construct Only</pre>
-<p>DBus Object Path.</p>
+<p></p>
<p>Default value: NULL</p>
</div>
<hr>
diff --git a/docs/libnm-glib/html/NMRemoteSettings.html b/docs/libnm-glib/html/NMRemoteSettings.html
index fe7118c89..41fdcb756 100644
--- a/docs/libnm-glib/html/NMRemoteSettings.html
+++ b/docs/libnm-glib/html/NMRemoteSettings.html
@@ -233,7 +233,7 @@ the stored object known to NetworkManager.
<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="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/1.0/libnm-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>
@@ -251,25 +251,25 @@ the stored object known to NetworkManager.
<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"> 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/1.0/NMSettingConnection.html">NMSettingConnection</a> </span><span class="symbol">*)</span><span class="normal"> </span><span class="function"><a href="https://developer.gnome.org/libnm/1.0/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/1.0/libnm-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="https://developer.gnome.org/libnm/1.0/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/1.0/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/1.0/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/1.0/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="function"><a href="https://developer.gnome.org/libnm/1.0/libnm-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="function"><a href="https://developer.gnome.org/libnm/1.0/libnm-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/1.0/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"> 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/1.0/NMSettingIP4Config.html">NMSettingIP4Config</a> </span><span class="symbol">*)</span><span class="normal"> </span><span class="function"><a href="https://developer.gnome.org/libnm/1.0/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="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/1.0/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="function"><a href="https://developer.gnome.org/libnm/1.0/libnm-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>
@@ -597,7 +597,7 @@ 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. <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>
+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> NMRemoteConnection]</span>
</td>
</tr>
</tbody>
@@ -952,27 +952,37 @@ hostname operation completes. <span class="annotation">[<acronym title="The call
<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>* : Read / Write / Construct Only</pre>
-<p>DBusGConnection.</p>
+<p>
+The <a href="/usr/share/gtk-doc/html/dbus-glib/dbus-glib-DBusGConnection.html#DBusGConnection"><span class="type">DBusGConnection</span></a> that the <a class="link" href="NMRemoteSettings.html" title="NMRemoteSettings"><span class="type">NMRemoteSettings</span></a> is connected to. Defaults
+to the system bus if not specified.
+</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> : Read</pre>
-<p>Can modify anything (hostname, connections, etc).</p>
+<p>
+If <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, adding and modifying connections is supported.
+</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>* : Read</pre>
-<p>Persistent hostname.</p>
+<p>
+The machine hostname stored in persistent configuration. This can be
+modified by calling <a class="link" href="NMRemoteSettings.html#nm-remote-settings-save-hostname" title="nm_remote_settings_save_hostname ()"><code class="function">nm_remote_settings_save_hostname()</code></a>.
+</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> : Read</pre>
-<p>Is service running.</p>
+<p>
+Whether the settings service is running.
+</p>
<p>Default value: FALSE</p>
</div>
</div>
diff --git a/docs/libnm-glib/html/NMSecretAgent.html b/docs/libnm-glib/html/NMSecretAgent.html
index 2aee97d92..feeaf82eb 100644
--- a/docs/libnm-glib/html/NMSecretAgent.html
+++ b/docs/libnm-glib/html/NMSecretAgent.html
@@ -219,7 +219,7 @@ when they encounter problems retrieving secrets on behalf of NM.
<tr>
<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
+by the <code class="literal">get_secrets</code> class method to VPN plugin
authentication dialogs.
</td>
</tr>
@@ -376,11 +376,11 @@ something like this:
<span class="usertype">GHashTable</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">secrets_hash</span><span class="symbol">;</span>
<span class="normal">secrets </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">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="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/1.0/NMSettingWirelessSecurity.html">NMSettingWirelessSecurity</a> </span><span class="symbol">*)</span><span class="normal"> </span><span class="function"><a href="https://developer.gnome.org/libnm/1.0/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="https://developer.gnome.org/libnm/1.0/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="/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="function"><a href="https://developer.gnome.org/libnm/1.0/libnm-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"> <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>
@@ -418,7 +418,7 @@ has returned. <span class="annotation">[<acronym title="Don't free data after th
<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")
+should be the name of a <a href="https://developer.gnome.org/libnm/1.0/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. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GLib.HashTable]</span>
diff --git a/docs/libnm-glib/html/NMWimaxNsp.html b/docs/libnm-glib/html/NMWimaxNsp.html
index 736d56fdd..ea7536cf8 100644
--- a/docs/libnm-glib/html/NMWimaxNsp.html
+++ b/docs/libnm-glib/html/NMWimaxNsp.html
@@ -123,6 +123,7 @@ NMWimaxNsp implements
} NMWimaxNspNetworkType;
</pre>
<p>
+WiMAX network type.
</p>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
@@ -132,22 +133,22 @@ NMWimaxNsp implements
<tbody>
<tr>
<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>unknown network type
</td>
</tr>
<tr>
<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>home network
</td>
</tr>
<tr>
<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>partner network
</td>
</tr>
<tr>
<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>roaming partner network
</td>
</tr>
</tbody>
@@ -307,7 +308,7 @@ returned connections will match the <em class="parameter"><code>nsp</code></em>'
<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>
+<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> NMConnection]</span>
</td>
</tr>
<tr>
@@ -316,7 +317,7 @@ returned connections will match the <em class="parameter"><code>nsp</code></em>'
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>
+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> NMConnection]</span>
</td>
</tr>
</tbody>
diff --git a/docs/libnm-glib/html/api-index-full.html b/docs/libnm-glib/html/api-index-full.html
index b576616e4..e52c73aaf 100644
--- a/docs/libnm-glib/html/api-index-full.html
+++ b/docs/libnm-glib/html/api-index-full.html
@@ -883,6 +883,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="NMDevice.html#NMDeviceCallbackFn" title="NMDeviceCallbackFn ()">NMDeviceCallbackFn</a>, user_function in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+</dt>
+<dd></dd>
+<dt>
<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>
@@ -1043,6 +1047,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="NMDeviceVlan.html#NMDeviceVlan--parent" title='The "parent" property'>NMDeviceVlan:parent</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>
@@ -1311,6 +1319,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="NMDevice.html#nm-device-delete" title="nm_device_delete ()">nm_device_delete</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-DEVICE-TYPE:CAPS" title="NM_DEVICE_DEVICE_TYPE">NM_DEVICE_DEVICE_TYPE</a>, macro in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
@@ -1579,6 +1591,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="NMDevice.html#nm-device-is-software" title="nm_device_is_software ()">nm_device_is_software</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-MANAGED:CAPS" title="NM_DEVICE_MANAGED">NM_DEVICE_MANAGED</a>, macro in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
</dt>
<dd></dd>
@@ -1735,6 +1751,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="NMDeviceVlan.html#nm-device-vlan-get-parent" title="nm_device_vlan_get_parent ()">nm_device_vlan_get_parent</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>
</dt>
<dd></dd>
@@ -1747,6 +1767,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="NMDeviceVlan.html#NM-DEVICE-VLAN-PARENT:CAPS" title="NM_DEVICE_VLAN_PARENT">NM_DEVICE_VLAN_PARENT</a>, macro in <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan">NMDeviceVlan</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="NMDeviceVlan.html#NM-DEVICE-VLAN-VLAN-ID:CAPS" title="NM_DEVICE_VLAN_VLAN_ID">NM_DEVICE_VLAN_VLAN_ID</a>, macro in <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan">NMDeviceVlan</a>
</dt>
<dd></dd>
diff --git a/docs/libnm-glib/html/index.html b/docs/libnm-glib/html/index.html
index 588c303c8..9434f44e5 100644
--- a/docs/libnm-glib/html/index.html
+++ b/docs/libnm-glib/html/index.html
@@ -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.10.0
+ for libnm-glib 1.0.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>.
diff --git a/docs/libnm-glib/html/index.sgml b/docs/libnm-glib/html/index.sgml
index 5aab1ec14..4dca87c8f 100644
--- a/docs/libnm-glib/html/index.sgml
+++ b/docs/libnm-glib/html/index.sgml
@@ -226,16 +226,19 @@
<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-is-software" href="libnm-glib/NMDevice.html#nm-device-is-software">
<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="NMDeviceCallbackFn" href="libnm-glib/NMDevice.html#NMDeviceCallbackFn">
<ANCHOR id="nm-device-disconnect" href="libnm-glib/NMDevice.html#nm-device-disconnect">
+<ANCHOR id="nm-device-delete" href="libnm-glib/NMDevice.html#nm-device-delete">
<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="nm-device-get-setting-type" href="libnm-glib/NMDevice.html#nm-device-get-setting-type">
+<ANCHOR id="NMDeviceDeactivateFn" href="libnm-glib/NMDevice.html#NMDeviceDeactivateFn">
<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">
@@ -608,16 +611,19 @@
<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-PARENT:CAPS" href="libnm-glib/NMDeviceVlan.html#NM-DEVICE-VLAN-PARENT: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-parent" href="libnm-glib/NMDeviceVlan.html#nm-device-vlan-get-parent">
<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--parent" href="libnm-glib/NMDeviceVlan.html#NMDeviceVlan--parent">
<ANCHOR id="NMDeviceVlan--vlan-id" href="libnm-glib/NMDeviceVlan.html#NMDeviceVlan--vlan-id">
<ANCHOR id="NMDeviceOlpcMesh" href="libnm-glib/NMDeviceOlpcMesh.html">
<ANCHOR id="NMDeviceOlpcMesh.synopsis" href="libnm-glib/NMDeviceOlpcMesh.html#NMDeviceOlpcMesh.synopsis">
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 0d883d082..7a2098f6d 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
@@ -44,7 +44,7 @@
<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>);
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm/1.0/NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> *out_flags</code></em>);
</pre>
</div>
<div class="refsect1">
@@ -100,11 +100,11 @@ an applet when the applet calls the authentication dialog of the VPN plugin.
<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>
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm/1.0/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.
+<a href="https://developer.gnome.org/libnm/1.0/NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> and returns it.
</p>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
diff --git a/docs/libnm-glib/html/libnm-glib.devhelp2 b/docs/libnm-glib/html/libnm-glib.devhelp2
index f552f3e18..c9ec066a8 100644
--- a/docs/libnm-glib/html/libnm-glib.devhelp2
+++ b/docs/libnm-glib/html/libnm-glib.devhelp2
@@ -221,16 +221,19 @@
<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_is_software ()" link="NMDevice.html#nm-device-is-software" since="1.0"/>
<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="NMDeviceCallbackFn ()" link="NMDevice.html#NMDeviceCallbackFn"/>
<keyword type="function" name="nm_device_disconnect ()" link="NMDevice.html#nm-device-disconnect"/>
+ <keyword type="function" name="nm_device_delete ()" link="NMDevice.html#nm-device-delete" since="1.0"/>
<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="function" name="NMDeviceDeactivateFn ()" link="NMDevice.html#NMDeviceDeactivateFn"/>
<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"/>
@@ -446,15 +449,18 @@
<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_PARENT" link="NMDeviceVlan.html#NM-DEVICE-VLAN-PARENT:CAPS"/>
<keyword type="macro" name="NM_DEVICE_VLAN_VLAN_ID" link="NMDeviceVlan.html#NM-DEVICE-VLAN-VLAN-ID:CAPS"/>
<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_parent ()" link="NMDeviceVlan.html#nm-device-vlan-get-parent" since="1.0"/>
<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;parent&quot; property" link="NMDeviceVlan.html#NMDeviceVlan--parent"/>
<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"/>
diff --git a/docs/libnm-glib/libnm-glib-sections.txt b/docs/libnm-glib/libnm-glib-sections.txt
index 1ba95d1de..571855ebc 100644
--- a/docs/libnm-glib/libnm-glib-sections.txt
+++ b/docs/libnm-glib/libnm-glib-sections.txt
@@ -211,16 +211,19 @@ nm_device_get_active_connection
nm_device_get_available_connections
nm_device_get_physical_port_id
nm_device_get_mtu
+nm_device_is_software
nm_device_get_product
nm_device_get_vendor
nm_device_get_description
nm_device_disambiguate_names
-NMDeviceDeactivateFn
+NMDeviceCallbackFn
nm_device_disconnect
+nm_device_delete
nm_device_filter_connections
nm_device_connection_valid
nm_device_connection_compatible
nm_device_get_setting_type
+NMDeviceDeactivateFn
<SUBSECTION Standard>
NM_DEVICE
NM_DEVICE_CLASS
@@ -479,12 +482,14 @@ NM_DEVICE_VLAN_ERROR
nm_device_vlan_error_quark
NM_DEVICE_VLAN_HW_ADDRESS
NM_DEVICE_VLAN_CARRIER
+NM_DEVICE_VLAN_PARENT
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_parent
nm_device_vlan_get_vlan_id
<SUBSECTION Standard>
NM_DEVICE_VLAN
diff --git a/docs/libnm-glib/tmpl/nm-device-vlan.sgml b/docs/libnm-glib/tmpl/nm-device-vlan.sgml
index 2509a21d4..2c638e900 100644
--- a/docs/libnm-glib/tmpl/nm-device-vlan.sgml
+++ b/docs/libnm-glib/tmpl/nm-device-vlan.sgml
@@ -64,6 +64,13 @@ NMDeviceVlan
+<!-- ##### MACRO NM_DEVICE_VLAN_PARENT ##### -->
+<para>
+
+</para>
+
+
+
<!-- ##### MACRO NM_DEVICE_VLAN_VLAN_ID ##### -->
<para>
@@ -87,6 +94,11 @@ NMDeviceVlan
</para>
+<!-- ##### ARG NMDeviceVlan:parent ##### -->
+<para>
+
+</para>
+
<!-- ##### ARG NMDeviceVlan:vlan-id ##### -->
<para>
@@ -133,6 +145,15 @@ NMDeviceVlan
@Returns:
+<!-- ##### FUNCTION nm_device_vlan_get_parent ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
<!-- ##### FUNCTION nm_device_vlan_get_vlan_id ##### -->
<para>
diff --git a/docs/libnm-glib/tmpl/nm-device.sgml b/docs/libnm-glib/tmpl/nm-device.sgml
index a3c552861..5b50ca841 100644
--- a/docs/libnm-glib/tmpl/nm-device.sgml
+++ b/docs/libnm-glib/tmpl/nm-device.sgml
@@ -580,6 +580,15 @@ NMDevice
@Returns:
+<!-- ##### FUNCTION nm_device_is_software ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
<!-- ##### FUNCTION nm_device_get_product ##### -->
<para>
@@ -617,7 +626,7 @@ NMDevice
@Returns:
-<!-- ##### USER_FUNCTION NMDeviceDeactivateFn ##### -->
+<!-- ##### USER_FUNCTION NMDeviceCallbackFn ##### -->
<para>
</para>
@@ -637,6 +646,16 @@ NMDevice
@user_data:
+<!-- ##### FUNCTION nm_device_delete ##### -->
+<para>
+
+</para>
+
+@device:
+@callback:
+@user_data:
+
+
<!-- ##### FUNCTION nm_device_filter_connections ##### -->
<para>
@@ -677,3 +696,13 @@ NMDevice
@Returns:
+<!-- ##### USER_FUNCTION NMDeviceDeactivateFn ##### -->
+<para>
+
+</para>
+
+@device:
+@error:
+@user_data:
+
+
diff --git a/docs/libnm-glib/version.xml b/docs/libnm-glib/version.xml
index 82e28fcb1..3eefcb9dd 100644
--- a/docs/libnm-glib/version.xml
+++ b/docs/libnm-glib/version.xml
@@ -1 +1 @@
-0.9.10.0
+1.0.0
diff --git a/docs/libnm-util/Makefile.am b/docs/libnm-util/Makefile.am
index 45c746d97..f5c44ace8 100644
--- a/docs/libnm-util/Makefile.am
+++ b/docs/libnm-util/Makefile.am
@@ -35,7 +35,8 @@ IGNORE_HFILES= \
nm-utils-private.h \
nm-setting-private.h \
nm-param-spec-specialized.h \
- nm-test-utils.h
+ nm-test-utils.h \
+ nm-version.h
# Images to copy into HTML directory.
HTML_IMAGES =
@@ -50,7 +51,6 @@ extra_files =
# CFLAGS and LDFLAGS for compiling scan program. Only needed
# if $(DOC_MODULE).types is non-empty.
GTKDOC_CFLAGS = \
- -I$(top_srcdir)/include \
-I$(top_srcdir)/libnm-util \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
diff --git a/docs/libnm-util/Makefile.in b/docs/libnm-util/Makefile.in
index 7079dd353..d8998452f 100644
--- a/docs/libnm-util/Makefile.in
+++ b/docs/libnm-util/Makefile.in
@@ -136,6 +136,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -259,6 +261,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -278,6 +281,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -304,7 +308,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -419,7 +423,8 @@ IGNORE_HFILES = \
nm-utils-private.h \
nm-setting-private.h \
nm-param-spec-specialized.h \
- nm-test-utils.h
+ nm-test-utils.h \
+ nm-version.h
# Images to copy into HTML directory.
@@ -434,7 +439,6 @@ extra_files =
# CFLAGS and LDFLAGS for compiling scan program. Only needed
# if $(DOC_MODULE).types is non-empty.
GTKDOC_CFLAGS = \
- -I$(top_srcdir)/include \
-I$(top_srcdir)/libnm-util \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
diff --git a/docs/libnm-util/html/NMConnection.html b/docs/libnm-util/html/NMConnection.html
index ef0d76b91..5b41012d3 100644
--- a/docs/libnm-util/html/NMConnection.html
+++ b/docs/libnm-util/html/NMConnection.html
@@ -51,6 +51,7 @@
#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-NORMALIZE-PARAM-IP6-CONFIG-METHOD:CAPS" title="NM_CONNECTION_NORMALIZE_PARAM_IP6_CONFIG_METHOD">NM_CONNECTION_NORMALIZE_PARAM_IP6_CONFIG_METHOD</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>;
@@ -84,6 +85,10 @@ enum <a class="link" href="NMConnection.html#NMConnectionError-en
<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>);
+<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-normalize" title="nm_connection_normalize ()">nm_connection_normalize</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> *parameters</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> *modified</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>);
@@ -100,6 +105,7 @@ const <span class="returnvalue">char</span> * <a class="link" href="NMCon
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>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMConnection.html#nm-connection-get-interface-name" title="nm_connection_get_interface_name ()">nm_connection_get_interface_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>
@@ -235,7 +241,8 @@ parameters (MTU, SSID, APN, channel, rate, etc) and IP-level parameters
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;*/
+ NM_CONNECTION_ERROR_SETTING_NOT_FOUND, /*&lt; nick=SettingNotFound &gt;*/
+ NM_CONNECTION_ERROR_INVALID_SETTING, /*&lt; nick=InvalidSetting &gt;*/
} NMConnectionError;
</pre>
<p>
@@ -273,11 +280,25 @@ Describes errors that may result from operations involving a <a class="link" hre
did not contain the specified <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object
</td>
</tr>
+<tr>
+<td><p><a name="NM-CONNECTION-ERROR-INVALID-SETTING:CAPS"></a><span class="term"><code class="literal">NM_CONNECTION_ERROR_INVALID_SETTING</code></span></p></td>
+<td>the <a class="link" href="NMConnection.html" title="NMConnection"><span class="type">NMConnection</span></a> object contains
+ a conflicting setting object
+</td>
+</tr>
</tbody>
</table></div>
</div>
<hr>
<div class="refsect2">
+<a name="NM-CONNECTION-NORMALIZE-PARAM-IP6-CONFIG-METHOD:CAPS"></a><h3>NM_CONNECTION_NORMALIZE_PARAM_IP6_CONFIG_METHOD</h3>
+<pre class="programlisting">#define NM_CONNECTION_NORMALIZE_PARAM_IP6_CONFIG_METHOD "ip6-config-method"
+</pre>
+<p>
+</p>
+</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>
@@ -727,7 +748,7 @@ 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 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
+<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
@@ -758,6 +779,62 @@ setting and which property failed validation, and how it failed validation.
</div>
<hr>
<div class="refsect2">
+<a name="nm-connection-normalize"></a><h3>nm_connection_normalize ()</h3>
+<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_normalize (<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> *parameters</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> *modified</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>
+Does some basic normalization and fixup of well known inconsistencies
+and deprecated fields. If the connection was modified in any way,
+the output parameter <em class="parameter"><code>modified</code></em> is set <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>.
+</p>
+<p>
+Finally the connection will be verified and <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> returns if the connection
+is valid. As this function only performs some specific normalization steps
+it cannot repair all connections. If the connection has errors that
+cannot be normalized, the connection will not be modified.
+</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> to normalize</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>parameters</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> with
+normalization parameters to allow customization of the normalization by providing
+specific arguments. Unknown arguments will be ignored and the default will be
+used. The keys must be strings, hashed by <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#g-str-hash"><code class="function">g_str_hash()</code></a> and <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#g-str-equal"><code class="function">g_str_equal()</code></a> functions.
+The values are opaque and depend on the parameter name. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 gpointer]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>modified</code></em> :</span></p></td>
+<td>outputs whether any settings were modified. <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>location to store error, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>. Contains the reason,
+why the connection is invalid, if the function returns 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 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>
+<p class="since">Since 1.0</p>
+</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>
@@ -988,6 +1065,39 @@ connection types, this function will return <a href="/usr/share/gtk-doc/html/lib
</div>
<hr>
<div class="refsect2">
+<a name="nm-connection-get-interface-name"></a><h3>nm_connection_get_interface_name ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_connection_get_interface_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 interface name as stored in NMSettingConnection:interface_name.
+If the connection contains no NMSettingConnection, it will return <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>.
+</p>
+<p>
+For hardware devices and software devices created outside of NetworkManager,
+this name is used to match the device. for software devices created by
+NetworkManager, this is the name of the created interface.
+</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>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>
+<p class="since">Since 1.0</p>
+</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>
@@ -1247,7 +1357,7 @@ A shortcut to return the type from the connection's <a class="link" href="NMSett
<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
+Returns the name that <a href="https://developer.gnome.org/libnm/1.0/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>
diff --git a/docs/libnm-util/html/NMSetting.html b/docs/libnm-util/html/NMSetting.html
index d6e1af38d..259433e64 100644
--- a/docs/libnm-util/html/NMSetting.html
+++ b/docs/libnm-util/html/NMSetting.html
@@ -352,7 +352,9 @@ secret is not required
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
+ NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS = 0x00000010,
+ NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT = 0x00000020,
+ NM_SETTING_COMPARE_FLAG_DIFF_RESULT_NO_DEFAULT = 0x00000040,
/* 0x80000000 is used for a private flag */
} NMSettingCompareFlags;
@@ -403,6 +405,28 @@ 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>
+<tr>
+<td><p><a name="NM-SETTING-COMPARE-FLAG-DIFF-RESULT-WITH-DEFAULT:CAPS"></a><span class="term"><code class="literal">NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT</code></span></p></td>
+<td>if this flag is set,
+<a class="link" href="NMSetting.html#nm-setting-diff" title="nm_setting_diff ()"><code class="function">nm_setting_diff()</code></a> and <a class="link" href="NMConnection.html#nm-connection-diff" title="nm_connection_diff ()"><code class="function">nm_connection_diff()</code></a> will also include properties that
+are set to their default value. See also <em class="parameter"><code>NM_SETTING_COMPARE_FLAG_DIFF_RESULT_NO_DEFAULT</code></em>.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-SETTING-COMPARE-FLAG-DIFF-RESULT-NO-DEFAULT:CAPS"></a><span class="term"><code class="literal">NM_SETTING_COMPARE_FLAG_DIFF_RESULT_NO_DEFAULT</code></span></p></td>
+<td>if this flag is set,
+<a class="link" href="NMSetting.html#nm-setting-diff" title="nm_setting_diff ()"><code class="function">nm_setting_diff()</code></a> and <a class="link" href="NMConnection.html#nm-connection-diff" title="nm_connection_diff ()"><code class="function">nm_connection_diff()</code></a> will not include properties that
+are set to their default value. This is the opposite of
+<em class="parameter"><code>NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT</code></em>. If both flags are set together,
+<em class="parameter"><code>NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT</code></em> wins. If both flags are unset,
+this means to exclude default properties if there is a setting to compare,
+but include all properties, if the setting 'b' is missing. This is the legacy
+behaviour of libnm-util, where <a class="link" href="NMSetting.html#nm-setting-diff" title="nm_setting_diff ()"><code class="function">nm_setting_diff()</code></a> behaved differently depending
+on whether the setting 'b' was available. If <em class="parameter"><code>NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT</code></em>
+is set, <a class="link" href="NMSetting.html#nm-setting-diff" title="nm_setting_diff ()"><code class="function">nm_setting_diff()</code></a> will also set the flags <em class="parameter"><code>NM_SETTING_DIFF_RESULT_IN_A_DEFAULT</code></em>
+and <em class="parameter"><code>NM_SETTING_DIFF_RESULT_IN_B_DEFAULT</code></em>, if the values are default values.
+</td>
+</tr>
</tbody>
</table></div>
</div>
@@ -461,7 +485,7 @@ It should only be accessed through the functions described below.
GObjectClass parent;
/* Virtual functions */
- gboolean (*verify) (NMSetting *setting,
+ gint (*verify) (NMSetting *setting,
GSList *all_settings,
GError **error);
@@ -793,6 +817,8 @@ for a description of each flag's behavior.
NM_SETTING_DIFF_RESULT_UNKNOWN = 0x00000000,
NM_SETTING_DIFF_RESULT_IN_A = 0x00000001,
NM_SETTING_DIFF_RESULT_IN_B = 0x00000002,
+ NM_SETTING_DIFF_RESULT_IN_A_DEFAULT = 0x00000004,
+ NM_SETTING_DIFF_RESULT_IN_B_DEFAULT = 0x00000004,
} NMSettingDiffResult;
</pre>
<p>
@@ -819,6 +845,18 @@ These values indicate the result of a setting difference operation.
<td>the property is present in setting B
</td>
</tr>
+<tr>
+<td><p><a name="NM-SETTING-DIFF-RESULT-IN-A-DEFAULT:CAPS"></a><span class="term"><code class="literal">NM_SETTING_DIFF_RESULT_IN_A_DEFAULT</code></span></p></td>
+<td>the property is present in
+setting A but is set to the default value. This flag is only set,
+if you specify <em class="parameter"><code>NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT</code></em>.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-SETTING-DIFF-RESULT-IN-B-DEFAULT:CAPS"></a><span class="term"><code class="literal">NM_SETTING_DIFF_RESULT_IN_B_DEFAULT</code></span></p></td>
+<td>analog to <em class="parameter"><code>NM_SETTING_DIFF_RESULT_IN_A_DEFAULT</code></em>.
+</td>
+</tr>
</tbody>
</table></div>
</div>
diff --git a/docs/libnm-util/html/NMSetting8021x.html b/docs/libnm-util/html/NMSetting8021x.html
index a0bd18de6..10ee02e01 100644
--- a/docs/libnm-util/html/NMSetting8021x.html
+++ b/docs/libnm-util/html/NMSetting8021x.html
@@ -369,7 +369,7 @@ or DER private key
</tr>
<tr>
<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
+<td>file contains a PKCS#12 certificate
and private key
</td>
</tr>
@@ -1587,7 +1587,7 @@ authentication method.
<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
+certificate file (PEM, DER, or PKCS#12 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="/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>
@@ -2203,7 +2203,7 @@ authentication method.
<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
+certificate file (PEM, DER, or PKCS#12 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="/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>
@@ -2511,7 +2511,7 @@ key password to prevent unauthorized access to unencrypted private key data.
<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
+(PEM, DER, or PKCS#12 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="/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>
@@ -2757,7 +2757,7 @@ key password to prevent unauthorized access to unencrypted private key data.
<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;
+key file (PEM, DER, or PKCS#12 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="/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>
@@ -3165,15 +3165,15 @@ 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
+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
<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
+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 <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.
+the password used to decode the PKCS#12 private key and certificate.
</p>
<p>
Setting this property directly is discouraged; use the
@@ -3187,7 +3187,7 @@ Setting this property directly is discouraged; use the
<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
+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 <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.
@@ -3250,15 +3250,15 @@ 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
+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
<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
+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<span class="type">12</span> private key and certificate.
+decode the PKCS#12 private key and certificate.
</p>
<p>
Setting this property directly is discouraged; use the
@@ -3279,7 +3279,7 @@ private key data.
<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
+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 <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.
diff --git a/docs/libnm-util/html/NMSettingBluetooth.html b/docs/libnm-util/html/NMSettingBluetooth.html
index d627ed93a..622a3c2ca 100644
--- a/docs/libnm-util/html/NMSettingBluetooth.html
+++ b/docs/libnm-util/html/NMSettingBluetooth.html
@@ -291,7 +291,8 @@ either DUN to a DUN-capable device or PANU to a NAP-capable device).
</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>the type, either <a class="link" href="NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-TYPE-PANU:CAPS" title="NM_SETTING_BLUETOOTH_TYPE_PANU"><code class="literal">NM_SETTING_BLUETOOTH_TYPE_PANU</code></a> or
+<a class="link" href="NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-TYPE-DUN:CAPS" title="NM_SETTING_BLUETOOTH_TYPE_DUN"><code class="literal">NM_SETTING_BLUETOOTH_TYPE_DUN</code></a>
</td>
</tr>
</tbody>
diff --git a/docs/libnm-util/html/NMSettingBond.html b/docs/libnm-util/html/NMSettingBond.html
index ac130ddef..efe99e638 100644
--- a/docs/libnm-util/html/NMSettingBond.html
+++ b/docs/libnm-util/html/NMSettingBond.html
@@ -64,6 +64,7 @@ enum <a class="link" href="NMSettingBond.html#NMSettingBondError-
#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>
+#define <a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTION-LACP-RATE:CAPS" title="NM_SETTING_BOND_OPTION_LACP_RATE">NM_SETTING_BOND_OPTION_LACP_RATE</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>);
@@ -324,6 +325,14 @@ Registers an error quark for <a class="link" href="NMSettingBond.html" title="NM
</div>
<hr>
<div class="refsect2">
+<a name="NM-SETTING-BOND-OPTION-LACP-RATE:CAPS"></a><h3>NM_SETTING_BOND_OPTION_LACP_RATE</h3>
+<pre class="programlisting">#define NM_SETTING_BOND_OPTION_LACP_RATE "lacp_rate"
+</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>
diff --git a/docs/libnm-util/html/NMSettingConnection.html b/docs/libnm-util/html/NMSettingConnection.html
index 7bf190c28..508a3b8f1 100644
--- a/docs/libnm-util/html/NMSettingConnection.html
+++ b/docs/libnm-util/html/NMSettingConnection.html
@@ -1131,6 +1131,9 @@ set, then the connection can be attached to any interface of the
appropriate type (subject to restrictions imposed by other settings).
</p>
<p>
+For software devices this specifies the name of the created device.
+</p>
+<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
diff --git a/docs/libnm-util/html/NMSettingIP4Config.html b/docs/libnm-util/html/NMSettingIP4Config.html
index e44b6d491..20a04ac16 100644
--- a/docs/libnm-util/html/NMSettingIP4Config.html
+++ b/docs/libnm-util/html/NMSettingIP4Config.html
@@ -53,6 +53,7 @@ enum <a class="link" href="NMSettingIP4Config.html#NMSettingIP4Co
#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-ROUTE-METRIC:CAPS" title="NM_SETTING_IP4_CONFIG_ROUTE_METRIC">NM_SETTING_IP4_CONFIG_ROUTE_METRIC</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>
@@ -157,6 +158,8 @@ const <span class="returnvalue">char</span> * <a class="link" href="NMSet
(<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#gint64"><span class="returnvalue">gint64</span></a> <a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-route-metric" title="nm_setting_ip4_config_get_route_metric ()">nm_setting_ip4_config_get_route_metric</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>
@@ -195,7 +198,6 @@ const <span class="returnvalue">char</span> * <a class="link" href="NMSet
<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
@@ -207,6 +209,7 @@ const <span class="returnvalue">char</span> * <a class="link" href="NMSet
"<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--route-metric" title='The "route-metric" property'>route-metric</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</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>
@@ -335,6 +338,14 @@ Registers an error quark for <a class="link" href="NMSettingIP4Config.html" titl
</div>
<hr>
<div class="refsect2">
+<a name="NM-SETTING-IP4-CONFIG-ROUTE-METRIC:CAPS"></a><h3>NM_SETTING_IP4_CONFIG_ROUTE_METRIC</h3>
+<pre class="programlisting">#define NM_SETTING_IP4_CONFIG_ROUTE_METRIC "route-metric"
+</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>
@@ -1765,6 +1776,35 @@ Removes all configured routes.
</div>
<hr>
<div class="refsect2">
+<a name="nm-setting-ip4-config-get-route-metric"></a><h3>nm_setting_ip4_config_get_route_metric ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="returnvalue">gint64</span></a> nm_setting_ip4_config_get_route_metric
+ (<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--route-metric" title='The "route-metric" property'><span class="type">"route-metric"</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 route metric that is used for IPv4 routes that don't explicitly
+specify a metric. See <a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--route-metric" title='The "route-metric" property'><span class="type">"route-metric"</span></a> for more details.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.0</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>
@@ -1967,14 +2007,6 @@ for the connection to succeed.</td>
<div class="refsect1">
<a name="NMSettingIP4Config.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
-<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="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>
@@ -2116,6 +2148,24 @@ meaning it will never be assigned the default route by NetworkManager.
</div>
<hr>
<div class="refsect2">
+<a name="NMSettingIP4Config--route-metric"></a><h3>The <code class="literal">"route-metric"</code> property</h3>
+<pre class="programlisting"> "route-metric" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> : Read / Write / Construct</pre>
+<p>
+The default metric for routes that don't explicitly specify a metric.
+The default value -1 means that the metric is choosen automatically
+based on the device type.
+The metric applies to dynamic routes, manual (static) routes that
+don't have an explicit metric setting, address prefix routes, and
+the default route.
+As the linux kernel accepts zero (0) as a valid metric, zero is
+a valid value.
+</p>
+<p>Allowed values: [-1,4294967295]</p>
+<p>Default value: -1</p>
+<p class="since">Since 1.0</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>* : Read / Write</pre>
<p>
diff --git a/docs/libnm-util/html/NMSettingIP6Config.html b/docs/libnm-util/html/NMSettingIP6Config.html
index 71ac6e055..b785114d8 100644
--- a/docs/libnm-util/html/NMSettingIP6Config.html
+++ b/docs/libnm-util/html/NMSettingIP6Config.html
@@ -53,6 +53,7 @@ enum <a class="link" href="NMSettingIP6Config.html#NMSettingIP6Co
#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-ROUTE-METRIC:CAPS" title="NM_SETTING_IP6_CONFIG_ROUTE_METRIC">NM_SETTING_IP6_CONFIG_ROUTE_METRIC</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>
@@ -160,6 +161,8 @@ const <span class="returnvalue">char</span> * <a class="link" href="NMSet
<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#gint64"><span class="returnvalue">gint64</span></a> <a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-route-metric" title="nm_setting_ip6_config_get_route_metric ()">nm_setting_ip6_config_get_route_metric</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>
@@ -208,6 +211,7 @@ const <span class="returnvalue">char</span> * <a class="link" href="NMSet
"<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--route-metric" title='The "route-metric" property'>route-metric</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</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>
@@ -336,6 +340,14 @@ Registers an error quark for <a class="link" href="NMSettingIP6Config.html" titl
</div>
<hr>
<div class="refsect2">
+<a name="NM-SETTING-IP6-CONFIG-ROUTE-METRIC:CAPS"></a><h3>NM_SETTING_IP6_CONFIG_ROUTE_METRIC</h3>
+<pre class="programlisting">#define NM_SETTING_IP6_CONFIG_ROUTE_METRIC "route-metric"
+</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>
@@ -1845,6 +1857,35 @@ ignored.</td>
</div>
<hr>
<div class="refsect2">
+<a name="nm-setting-ip6-config-get-route-metric"></a><h3>nm_setting_ip6_config_get_route_metric ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="returnvalue">gint64</span></a> nm_setting_ip6_config_get_route_metric
+ (<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--route-metric" title='The "route-metric" property'><span class="type">"route-metric"</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 route metric that is used for IPv6 routes that don't explicitly
+specify a metric. See <a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--route-metric" title='The "route-metric" property'><span class="type">"route-metric"</span></a> for more details.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.0</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>
@@ -2125,6 +2166,24 @@ NetworkManager.
</div>
<hr>
<div class="refsect2">
+<a name="NMSettingIP6Config--route-metric"></a><h3>The <code class="literal">"route-metric"</code> property</h3>
+<pre class="programlisting"> "route-metric" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> : Read / Write / Construct</pre>
+<p>
+The default metric for routes that don't explicitly specify a metric.
+The default value -1 means that the metric is choosen automatically
+based on the device type.
+The metric applies to dynamic routes, manual (static) routes that
+don't have an explicit metric setting, address prefix routes, and
+the default route.
+As the linux kernel replaces zero (0) by 1024 (user-default), setting
+this property to 0 means effectively setting it to 1024.
+</p>
+<p>Allowed values: [-1,4294967295]</p>
+<p>Default value: -1</p>
+<p class="since">Since 1.0</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> : Read / Write</pre>
<p>
diff --git a/docs/libnm-util/html/NMSettingVPN.html b/docs/libnm-util/html/NMSettingVPN.html
index 646871a07..97cc809f4 100644
--- a/docs/libnm-util/html/NMSettingVPN.html
+++ b/docs/libnm-util/html/NMSettingVPN.html
@@ -50,6 +50,7 @@ enum <a class="link" href="NMSettingVPN.html#NMSettingVpnError-en
<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-PERSISTENT:CAPS" title="NM_SETTING_VPN_PERSISTENT">NM_SETTING_VPN_PERSISTENT</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>;
@@ -60,6 +61,7 @@ enum <a class="link" href="NMSettingVPN.html#NMSettingVpnError-en
<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#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingVPN.html#nm-setting-vpn-get-persistent" title="nm_setting_vpn_get_persistent ()">nm_setting_vpn_get_persistent</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>,
@@ -100,6 +102,7 @@ const <span class="returnvalue">char</span> * <a class="link" href="NMSet
<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--persistent" title='The "persistent" property'>persistent</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="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
@@ -204,6 +207,14 @@ Registers an error quark for <a class="link" href="NMSettingVPN.html" title="NMS
</div>
<hr>
<div class="refsect2">
+<a name="NM-SETTING-VPN-PERSISTENT:CAPS"></a><h3>NM_SETTING_VPN_PERSISTENT</h3>
+<pre class="programlisting">#define NM_SETTING_VPN_PERSISTENT "persistent"
+</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>
@@ -339,6 +350,28 @@ plugin that should be used to connect to this VPN.
</div>
<hr>
<div class="refsect2">
+<a name="nm-setting-vpn-get-persistent"></a><h3>nm_setting_vpn_get_persistent ()</h3>
+<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_get_persistent (<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 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"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingVPN.html#NMSettingVPN--persistent" title='The "persistent" property'><span class="type">"persistent"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></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>
@@ -667,6 +700,17 @@ values must be strings.
</div>
<hr>
<div class="refsect2">
+<a name="NMSettingVPN--persistent"></a><h3>The <code class="literal">"persistent"</code> property</h3>
+<pre class="programlisting"> "persistent" <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 the VPN service supports persistence, 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 VPN will attempt to stay connected across link changes and outages,
+until explicitly disconnected.
+</p>
+<p>Default value: FALSE</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> : Read / Write</pre>
<p>
diff --git a/docs/libnm-util/html/NMSettingWireless.html b/docs/libnm-util/html/NMSettingWireless.html
index 803beb00f..4d97a0756 100644
--- a/docs/libnm-util/html/NMSettingWireless.html
+++ b/docs/libnm-util/html/NMSettingWireless.html
@@ -107,10 +107,10 @@ const <span class="returnvalue">char</span> * <a class="link" href="NMSet
<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>);
+ <em class="parameter"><code><a class="link" href="libnm-util-NetworkManager.html#NM80211ApFlags" title="enum NM80211ApFlags"><span class="type">NM80211ApFlags</span></a> ap_flags</code></em>,
+ <em class="parameter"><code><a class="link" href="libnm-util-NetworkManager.html#NM80211ApSecurityFlags" title="enum NM80211ApSecurityFlags"><span class="type">NM80211ApSecurityFlags</span></a> ap_wpa</code></em>,
+ <em class="parameter"><code><a class="link" href="libnm-util-NetworkManager.html#NM80211ApSecurityFlags" title="enum NM80211ApSecurityFlags"><span class="type">NM80211ApSecurityFlags</span></a> ap_rsn</code></em>,
+ <em class="parameter"><code><a class="link" href="libnm-util-NetworkManager.html#NM80211Mode" title="enum NM80211Mode"><span class="type">NM80211Mode</span></a> 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>
@@ -950,10 +950,10 @@ not be preserved.
<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>
+ <em class="parameter"><code><a class="link" href="libnm-util-NetworkManager.html#NM80211ApFlags" title="enum NM80211ApFlags"><span class="type">NM80211ApFlags</span></a> ap_flags</code></em>,
+ <em class="parameter"><code><a class="link" href="libnm-util-NetworkManager.html#NM80211ApSecurityFlags" title="enum NM80211ApSecurityFlags"><span class="type">NM80211ApSecurityFlags</span></a> ap_wpa</code></em>,
+ <em class="parameter"><code><a class="link" href="libnm-util-NetworkManager.html#NM80211ApSecurityFlags" title="enum NM80211ApSecurityFlags"><span class="type">NM80211ApSecurityFlags</span></a> ap_rsn</code></em>,
+ <em class="parameter"><code><a class="link" href="libnm-util-NetworkManager.html#NM80211Mode" title="enum NM80211Mode"><span class="type">NM80211Mode</span></a> 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
@@ -980,16 +980,16 @@ compatible with which access points.
</tr>
<tr>
<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>
+<td>the <a class="link" href="libnm-util-NetworkManager.html#NM80211ApFlags" title="enum NM80211ApFlags"><code class="literal">NM80211ApFlags</code></a> of the given access point</td>
</tr>
<tr>
<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
+<td>the <a class="link" href="libnm-util-NetworkManager.html#NM80211ApSecurityFlags" title="enum NM80211ApSecurityFlags"><code class="literal">NM80211ApSecurityFlags</code></a> of the given access point's WPA
capabilities</td>
</tr>
<tr>
<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
+<td>the <a class="link" href="libnm-util-NetworkManager.html#NM80211ApSecurityFlags" title="enum NM80211ApSecurityFlags"><code class="literal">NM80211ApSecurityFlags</code></a> of the given access point's WPA2/RSN
capabilities</td>
</tr>
<tr>
diff --git a/docs/libnm-util/html/annotation-glossary.html b/docs/libnm-util/html/annotation-glossary.html
index 3fd307235..1c488594c 100644
--- a/docs/libnm-util/html/annotation-glossary.html
+++ b/docs/libnm-util/html/annotation-glossary.html
@@ -22,6 +22,8 @@
<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="#glsI">I</a>
@@ -41,6 +43,9 @@
<dd class="glossdef"><p>NULL is ok, both for passing and for returning.</p></dd>
<dt><span class="glossterm"><a name="annotation-glossterm-array"></a>array</span></dt>
<dd class="glossdef"><p>Parameter points to an array of items.</p></dd>
+<a name="glsC"></a><h3 class="title">C</h3>
+<dt><span class="glossterm"><a name="annotation-glossterm-closure"></a>closure</span></dt>
+<dd class="glossdef"><p>This parameter is a 'user_data', for callbacks; many bindings can pass NULL here.</p></dd>
<a name="glsE"></a><h3 class="title">E</h3>
<dt><span class="glossterm"><a name="annotation-glossterm-element-type"></a>element-type</span></dt>
<dd class="glossdef"><p>Generics and defining elements of containers and arrays.</p></dd>
diff --git a/docs/libnm-util/html/api-index-full.html b/docs/libnm-util/html/api-index-full.html
index 87f9e3026..c98194165 100644
--- a/docs/libnm-util/html/api-index-full.html
+++ b/docs/libnm-util/html/api-index-full.html
@@ -21,7 +21,15 @@
<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="#idx8">8</a>
+  | 
+ <a class="shortcut" href="#idxA">A</a>
+  | 
+ <a class="shortcut" href="#idxB">B</a>
+  | 
+ <a class="shortcut" href="#idxC">C</a>
+  | 
+ <a class="shortcut" href="#idxD">D</a>
 | 
<a class="shortcut" href="#idxI">I</a>
 | 
@@ -37,7 +45,30 @@
<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="idxC"></a><h3 class="title">C</h3>
+<a name="idx"></a><a name="idx8"></a><h3 class="title">8</h3>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM80211ApFlags" title="enum NM80211ApFlags">NM80211ApFlags</a>, enum in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM80211ApSecurityFlags" title="enum NM80211ApSecurityFlags">NM80211ApSecurityFlags</a>, enum in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM80211Mode" title="enum NM80211Mode">NM80211Mode</a>, enum in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<a name="idxA"></a><h3 class="title">A</h3>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NMActiveConnectionState" title="enum NMActiveConnectionState">NMActiveConnectionState</a>, enum in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<a name="idxB"></a><h3 class="title">B</h3>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NMBluetoothCapabilities" title="enum NMBluetoothCapabilities">NMBluetoothCapabilities</a>, enum in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<a name="idxC"></a><h3 class="title">C</h3>
<dt>
<a class="link" href="NMConnection.html#NMConnection-struct" title="NMConnection">NMConnection</a>, struct in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
@@ -123,6 +154,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="NMConnection.html#nm-connection-get-interface-name" title="nm_connection_get_interface_name ()">nm_connection_get_interface_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-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>
@@ -275,6 +310,14 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="NMConnection.html#nm-connection-normalize" title="nm_connection_normalize ()">nm_connection_normalize</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-NORMALIZE-PARAM-IP6-CONFIG-METHOD:CAPS" title="NM_CONNECTION_NORMALIZE_PARAM_IP6_CONFIG_METHOD">NM_CONNECTION_NORMALIZE_PARAM_IP6_CONFIG_METHOD</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-PATH:CAPS" title="NM_CONNECTION_PATH">NM_CONNECTION_PATH</a>, macro in <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
</dt>
<dd></dd>
@@ -314,6 +357,287 @@
<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>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NMConnectivityState" title="enum NMConnectivityState">NMConnectivityState</a>, enum in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<a name="idxD"></a><h3 class="title">D</h3>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-IFACE-SETTINGS:CAPS" title="NM_DBUS_IFACE_SETTINGS">NM_DBUS_IFACE_SETTINGS</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-IFACE-SETTINGS-CONNECTION:CAPS" title="NM_DBUS_IFACE_SETTINGS_CONNECTION">NM_DBUS_IFACE_SETTINGS_CONNECTION</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-IFACE-SETTINGS-CONNECTION-SECRETS:CAPS" title="NM_DBUS_IFACE_SETTINGS_CONNECTION_SECRETS">NM_DBUS_IFACE_SETTINGS_CONNECTION_SECRETS</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE:CAPS" title="NM_DBUS_INTERFACE">NM_DBUS_INTERFACE</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-ACCESS-POINT:CAPS" title="NM_DBUS_INTERFACE_ACCESS_POINT">NM_DBUS_INTERFACE_ACCESS_POINT</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-ACTIVE-CONNECTION:CAPS" title="NM_DBUS_INTERFACE_ACTIVE_CONNECTION">NM_DBUS_INTERFACE_ACTIVE_CONNECTION</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-AGENT-MANAGER:CAPS" title="NM_DBUS_INTERFACE_AGENT_MANAGER">NM_DBUS_INTERFACE_AGENT_MANAGER</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE:CAPS" title="NM_DBUS_INTERFACE_DEVICE">NM_DBUS_INTERFACE_DEVICE</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-ADSL:CAPS" title="NM_DBUS_INTERFACE_DEVICE_ADSL">NM_DBUS_INTERFACE_DEVICE_ADSL</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-BLUETOOTH:CAPS" title="NM_DBUS_INTERFACE_DEVICE_BLUETOOTH">NM_DBUS_INTERFACE_DEVICE_BLUETOOTH</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-BOND:CAPS" title="NM_DBUS_INTERFACE_DEVICE_BOND">NM_DBUS_INTERFACE_DEVICE_BOND</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-BRIDGE:CAPS" title="NM_DBUS_INTERFACE_DEVICE_BRIDGE">NM_DBUS_INTERFACE_DEVICE_BRIDGE</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-GENERIC:CAPS" title="NM_DBUS_INTERFACE_DEVICE_GENERIC">NM_DBUS_INTERFACE_DEVICE_GENERIC</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-GRE:CAPS" title="NM_DBUS_INTERFACE_DEVICE_GRE">NM_DBUS_INTERFACE_DEVICE_GRE</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-INFINIBAND:CAPS" title="NM_DBUS_INTERFACE_DEVICE_INFINIBAND">NM_DBUS_INTERFACE_DEVICE_INFINIBAND</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-MACVLAN:CAPS" title="NM_DBUS_INTERFACE_DEVICE_MACVLAN">NM_DBUS_INTERFACE_DEVICE_MACVLAN</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-MODEM:CAPS" title="NM_DBUS_INTERFACE_DEVICE_MODEM">NM_DBUS_INTERFACE_DEVICE_MODEM</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-OLPC-MESH:CAPS" title="NM_DBUS_INTERFACE_DEVICE_OLPC_MESH">NM_DBUS_INTERFACE_DEVICE_OLPC_MESH</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-TEAM:CAPS" title="NM_DBUS_INTERFACE_DEVICE_TEAM">NM_DBUS_INTERFACE_DEVICE_TEAM</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-TUN:CAPS" title="NM_DBUS_INTERFACE_DEVICE_TUN">NM_DBUS_INTERFACE_DEVICE_TUN</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-VETH:CAPS" title="NM_DBUS_INTERFACE_DEVICE_VETH">NM_DBUS_INTERFACE_DEVICE_VETH</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-VLAN:CAPS" title="NM_DBUS_INTERFACE_DEVICE_VLAN">NM_DBUS_INTERFACE_DEVICE_VLAN</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-VXLAN:CAPS" title="NM_DBUS_INTERFACE_DEVICE_VXLAN">NM_DBUS_INTERFACE_DEVICE_VXLAN</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-WIMAX:CAPS" title="NM_DBUS_INTERFACE_DEVICE_WIMAX">NM_DBUS_INTERFACE_DEVICE_WIMAX</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-WIRED:CAPS" title="NM_DBUS_INTERFACE_DEVICE_WIRED">NM_DBUS_INTERFACE_DEVICE_WIRED</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-WIRELESS:CAPS" title="NM_DBUS_INTERFACE_DEVICE_WIRELESS">NM_DBUS_INTERFACE_DEVICE_WIRELESS</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DHCP4-CONFIG:CAPS" title="NM_DBUS_INTERFACE_DHCP4_CONFIG">NM_DBUS_INTERFACE_DHCP4_CONFIG</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DHCP6-CONFIG:CAPS" title="NM_DBUS_INTERFACE_DHCP6_CONFIG">NM_DBUS_INTERFACE_DHCP6_CONFIG</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-IP4-CONFIG:CAPS" title="NM_DBUS_INTERFACE_IP4_CONFIG">NM_DBUS_INTERFACE_IP4_CONFIG</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-IP6-CONFIG:CAPS" title="NM_DBUS_INTERFACE_IP6_CONFIG">NM_DBUS_INTERFACE_IP6_CONFIG</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-SECRET-AGENT:CAPS" title="NM_DBUS_INTERFACE_SECRET_AGENT">NM_DBUS_INTERFACE_SECRET_AGENT</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-INTERFACE-VPN:CAPS" title="NM_DBUS_INTERFACE_VPN">NM_DBUS_INTERFACE_VPN</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-INTERFACE-VPN-CONNECTION:CAPS" title="NM_DBUS_INTERFACE_VPN_CONNECTION">NM_DBUS_INTERFACE_VPN_CONNECTION</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-WIMAX-NSP:CAPS" title="NM_DBUS_INTERFACE_WIMAX_NSP">NM_DBUS_INTERFACE_WIMAX_NSP</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-INVALID-VPN-CONNECTION:CAPS" title="NM_DBUS_INVALID_VPN_CONNECTION">NM_DBUS_INVALID_VPN_CONNECTION</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-NO-ACTIVE-VPN-CONNECTION:CAPS" title="NM_DBUS_NO_ACTIVE_VPN_CONNECTION">NM_DBUS_NO_ACTIVE_VPN_CONNECTION</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-NO-VPN-CONNECTIONS:CAPS" title="NM_DBUS_NO_VPN_CONNECTIONS">NM_DBUS_NO_VPN_CONNECTIONS</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-PATH:CAPS" title="NM_DBUS_PATH">NM_DBUS_PATH</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-PATH-ACCESS-POINT:CAPS" title="NM_DBUS_PATH_ACCESS_POINT">NM_DBUS_PATH_ACCESS_POINT</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-PATH-AGENT-MANAGER:CAPS" title="NM_DBUS_PATH_AGENT_MANAGER">NM_DBUS_PATH_AGENT_MANAGER</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-PATH-SECRET-AGENT:CAPS" title="NM_DBUS_PATH_SECRET_AGENT">NM_DBUS_PATH_SECRET_AGENT</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-PATH-SETTINGS:CAPS" title="NM_DBUS_PATH_SETTINGS">NM_DBUS_PATH_SETTINGS</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-PATH-SETTINGS-CONNECTION:CAPS" title="NM_DBUS_PATH_SETTINGS_CONNECTION">NM_DBUS_PATH_SETTINGS_CONNECTION</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-PATH-VPN:CAPS" title="NM_DBUS_PATH_VPN">NM_DBUS_PATH_VPN</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-PATH-VPN-CONNECTION:CAPS" title="NM_DBUS_PATH_VPN_CONNECTION">NM_DBUS_PATH_VPN_CONNECTION</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-PATH-WIMAX-NSP:CAPS" title="NM_DBUS_PATH_WIMAX_NSP">NM_DBUS_PATH_WIMAX_NSP</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-SERVICE:CAPS" title="NM_DBUS_SERVICE">NM_DBUS_SERVICE</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-ALREADY-STARTED:CAPS" title="NM_DBUS_VPN_ALREADY_STARTED">NM_DBUS_VPN_ALREADY_STARTED</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-ALREADY-STOPPED:CAPS" title="NM_DBUS_VPN_ALREADY_STOPPED">NM_DBUS_VPN_ALREADY_STOPPED</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-BAD-ARGUMENTS:CAPS" title="NM_DBUS_VPN_BAD_ARGUMENTS">NM_DBUS_VPN_BAD_ARGUMENTS</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-ERROR-PREFIX:CAPS" title="NM_DBUS_VPN_ERROR_PREFIX">NM_DBUS_VPN_ERROR_PREFIX</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-INTERACTIVE-NOT-SUPPORTED:CAPS" title="NM_DBUS_VPN_INTERACTIVE_NOT_SUPPORTED">NM_DBUS_VPN_INTERACTIVE_NOT_SUPPORTED</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-CONNECT-FAILED:CAPS" title="NM_DBUS_VPN_SIGNAL_CONNECT_FAILED">NM_DBUS_VPN_SIGNAL_CONNECT_FAILED</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-IP4-CONFIG:CAPS" title="NM_DBUS_VPN_SIGNAL_IP4_CONFIG">NM_DBUS_VPN_SIGNAL_IP4_CONFIG</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-IP-CONFIG-BAD:CAPS" title="NM_DBUS_VPN_SIGNAL_IP_CONFIG_BAD">NM_DBUS_VPN_SIGNAL_IP_CONFIG_BAD</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-LAUNCH-FAILED:CAPS" title="NM_DBUS_VPN_SIGNAL_LAUNCH_FAILED">NM_DBUS_VPN_SIGNAL_LAUNCH_FAILED</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-LOGIN-BANNER:CAPS" title="NM_DBUS_VPN_SIGNAL_LOGIN_BANNER">NM_DBUS_VPN_SIGNAL_LOGIN_BANNER</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-LOGIN-FAILED:CAPS" title="NM_DBUS_VPN_SIGNAL_LOGIN_FAILED">NM_DBUS_VPN_SIGNAL_LOGIN_FAILED</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-STATE-CHANGE:CAPS" title="NM_DBUS_VPN_SIGNAL_STATE_CHANGE">NM_DBUS_VPN_SIGNAL_STATE_CHANGE</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-VPN-CONFIG-BAD:CAPS" title="NM_DBUS_VPN_SIGNAL_VPN_CONFIG_BAD">NM_DBUS_VPN_SIGNAL_VPN_CONFIG_BAD</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-STARTING-IN-PROGRESS:CAPS" title="NM_DBUS_VPN_STARTING_IN_PROGRESS">NM_DBUS_VPN_STARTING_IN_PROGRESS</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-STOPPING-IN-PROGRESS:CAPS" title="NM_DBUS_VPN_STOPPING_IN_PROGRESS">NM_DBUS_VPN_STOPPING_IN_PROGRESS</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-WRONG-STATE:CAPS" title="NM_DBUS_VPN_WRONG_STATE">NM_DBUS_VPN_WRONG_STATE</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NMDeviceCapabilities" title="enum NMDeviceCapabilities">NMDeviceCapabilities</a>, enum in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NMDeviceModemCapabilities" title="enum NMDeviceModemCapabilities">NMDeviceModemCapabilities</a>, enum in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NMDeviceState" title="enum NMDeviceState">NMDeviceState</a>, enum in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NMDeviceStateReason" title="enum NMDeviceStateReason">NMDeviceStateReason</a>, enum in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NMDeviceType" title="enum NMDeviceType">NMDeviceType</a>, enum in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NMDeviceWifiCapabilities" title="enum NMDeviceWifiCapabilities">NMDeviceWifiCapabilities</a>, enum in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
<a name="idxI"></a><h3 class="title">I</h3>
<dt>
<a class="link" href="NMSettingIP4Config.html#NMIP4Address">NMIP4Address</a>, typedef in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
@@ -1133,10 +1457,6 @@
</dt>
<dd></dd>
<dt>
-<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="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>
@@ -1181,6 +1501,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config--route-metric" title='The "route-metric" property'>NMSettingIP4Config:route-metric</a>, object property in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</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>
</dt>
<dd></dd>
@@ -1237,6 +1561,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config--route-metric" title='The "route-metric" property'>NMSettingIP6Config:route-metric</a>, object property in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</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>
</dt>
<dd></dd>
@@ -1509,6 +1837,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="NMSettingVPN.html#NMSettingVPN--persistent" title='The "persistent" property'>NMSettingVPN:persistent</a>, object property in <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</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>
</dt>
<dd></dd>
@@ -2369,6 +2701,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTION-LACP-RATE:CAPS" title="NM_SETTING_BOND_OPTION_LACP_RATE">NM_SETTING_BOND_OPTION_LACP_RATE</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>
@@ -3261,6 +3597,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="NMSettingIP4Config.html#nm-setting-ip4-config-get-route-metric" title="nm_setting_ip4_config_get_route_metric ()">nm_setting_ip4_config_get_route_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-SETTING-IP4-CONFIG-IGNORE-AUTO-DNS:CAPS" title="NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS">NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS</a>, macro in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
@@ -3341,6 +3681,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-ROUTE-METRIC:CAPS" title="NM_SETTING_IP4_CONFIG_ROUTE_METRIC">NM_SETTING_IP4_CONFIG_ROUTE_METRIC</a>, macro 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-SETTING-NAME:CAPS" title="NM_SETTING_IP4_CONFIG_SETTING_NAME">NM_SETTING_IP4_CONFIG_SETTING_NAME</a>, macro in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
</dt>
<dd></dd>
@@ -3461,6 +3805,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="NMSettingIP6Config.html#nm-setting-ip6-config-get-route-metric" title="nm_setting_ip6_config_get_route_metric ()">nm_setting_ip6_config_get_route_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-SETTING-IP6-CONFIG-IGNORE-AUTO-DNS:CAPS" title="NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS">NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS</a>, macro in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
@@ -3549,6 +3897,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-ROUTE-METRIC:CAPS" title="NM_SETTING_IP6_CONFIG_ROUTE_METRIC">NM_SETTING_IP6_CONFIG_ROUTE_METRIC</a>, macro 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-SETTING-NAME:CAPS" title="NM_SETTING_IP6_CONFIG_SETTING_NAME">NM_SETTING_IP6_CONFIG_SETTING_NAME</a>, macro in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
</dt>
<dd></dd>
@@ -4089,6 +4441,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="NMSettingVPN.html#nm-setting-vpn-get-persistent" title="nm_setting_vpn_get_persistent ()">nm_setting_vpn_get_persistent</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>
</dt>
<dd></dd>
@@ -4105,6 +4461,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="NMSettingVPN.html#NM-SETTING-VPN-PERSISTENT:CAPS" title="NM_SETTING_VPN_PERSISTENT">NM_SETTING_VPN_PERSISTENT</a>, macro 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>
</dt>
<dd></dd>
@@ -4688,8 +5048,20 @@
<a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-TX-POWER:CAPS" title="NM_SETTING_WIRELESS_TX_POWER">NM_SETTING_WIRELESS_TX_POWER</a>, macro in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
</dt>
<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NMState" title="enum NMState">NMState</a>, enum in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManager.html#NM-STATE-CONNECTED:CAPS" title="NM_STATE_CONNECTED">NM_STATE_CONNECTED</a>, macro in <a class="link" href="libnm-util-NetworkManager.html" title="NetworkManager">NetworkManager</a>
+</dt>
+<dd></dd>
<a name="idxU"></a><h3 class="title">U</h3>
<dt>
+<a class="link" href="libnm-util-nm-utils.html#NMUtilsFileSearchInPathsPredicate" title="NMUtilsFileSearchInPathsPredicate ()">NMUtilsFileSearchInPathsPredicate</a>, user_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#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>
@@ -4718,6 +5090,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="libnm-util-nm-utils.html#nm-utils-file-search-in-paths" title="nm_utils_file_search_in_paths ()">nm_utils_file_search_in_paths</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>
</dt>
<dd></dd>
@@ -4911,9 +5287,165 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NMVPNConnectionState" title="enum NMVPNConnectionState">NMVPNConnectionState</a>, enum in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NMVPNConnectionStateReason" title="enum NMVPNConnectionStateReason">NMVPNConnectionStateReason</a>, enum in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</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>
</dt>
<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NMVPNPluginFailure" title="enum NMVPNPluginFailure">NMVPNPluginFailure</a>, enum in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NMVPNServiceState" title="enum NMVPNServiceState">NMVPNServiceState</a>, enum in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-DBUS-PLUGIN-INTERFACE:CAPS" title="NM_VPN_DBUS_PLUGIN_INTERFACE">NM_VPN_DBUS_PLUGIN_INTERFACE</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-DBUS-PLUGIN-PATH:CAPS" title="NM_VPN_DBUS_PLUGIN_PATH">NM_VPN_DBUS_PLUGIN_PATH</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-CAN-PERSIST:CAPS" title="NM_VPN_PLUGIN_CAN_PERSIST">NM_VPN_PLUGIN_CAN_PERSIST</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-CONFIG-BANNER:CAPS" title="NM_VPN_PLUGIN_CONFIG_BANNER">NM_VPN_PLUGIN_CONFIG_BANNER</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-CONFIG-EXT-GATEWAY:CAPS" title="NM_VPN_PLUGIN_CONFIG_EXT_GATEWAY">NM_VPN_PLUGIN_CONFIG_EXT_GATEWAY</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-CONFIG-HAS-IP4:CAPS" title="NM_VPN_PLUGIN_CONFIG_HAS_IP4">NM_VPN_PLUGIN_CONFIG_HAS_IP4</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-CONFIG-HAS-IP6:CAPS" title="NM_VPN_PLUGIN_CONFIG_HAS_IP6">NM_VPN_PLUGIN_CONFIG_HAS_IP6</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-CONFIG-MTU:CAPS" title="NM_VPN_PLUGIN_CONFIG_MTU">NM_VPN_PLUGIN_CONFIG_MTU</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-CONFIG-TUNDEV:CAPS" title="NM_VPN_PLUGIN_CONFIG_TUNDEV">NM_VPN_PLUGIN_CONFIG_TUNDEV</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-ADDRESS:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_ADDRESS">NM_VPN_PLUGIN_IP4_CONFIG_ADDRESS</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-BANNER:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_BANNER">NM_VPN_PLUGIN_IP4_CONFIG_BANNER</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-DNS:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_DNS">NM_VPN_PLUGIN_IP4_CONFIG_DNS</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-DOMAIN:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_DOMAIN">NM_VPN_PLUGIN_IP4_CONFIG_DOMAIN</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-DOMAINS:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_DOMAINS">NM_VPN_PLUGIN_IP4_CONFIG_DOMAINS</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-EXT-GATEWAY:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY">NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-GATEWAY:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_GATEWAY">NM_VPN_PLUGIN_IP4_CONFIG_GATEWAY</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-INT-GATEWAY:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_INT_GATEWAY">NM_VPN_PLUGIN_IP4_CONFIG_INT_GATEWAY</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-MSS:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_MSS">NM_VPN_PLUGIN_IP4_CONFIG_MSS</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-MTU:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_MTU">NM_VPN_PLUGIN_IP4_CONFIG_MTU</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-NBNS:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_NBNS">NM_VPN_PLUGIN_IP4_CONFIG_NBNS</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-NEVER-DEFAULT:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_NEVER_DEFAULT">NM_VPN_PLUGIN_IP4_CONFIG_NEVER_DEFAULT</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-PREFIX:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_PREFIX">NM_VPN_PLUGIN_IP4_CONFIG_PREFIX</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-PTP:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_PTP">NM_VPN_PLUGIN_IP4_CONFIG_PTP</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-ROUTES:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_ROUTES">NM_VPN_PLUGIN_IP4_CONFIG_ROUTES</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-TUNDEV:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_TUNDEV">NM_VPN_PLUGIN_IP4_CONFIG_TUNDEV</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-ADDRESS:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_ADDRESS">NM_VPN_PLUGIN_IP6_CONFIG_ADDRESS</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-DNS:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_DNS">NM_VPN_PLUGIN_IP6_CONFIG_DNS</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-DOMAIN:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_DOMAIN">NM_VPN_PLUGIN_IP6_CONFIG_DOMAIN</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-DOMAINS:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_DOMAINS">NM_VPN_PLUGIN_IP6_CONFIG_DOMAINS</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-INT-GATEWAY:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_INT_GATEWAY">NM_VPN_PLUGIN_IP6_CONFIG_INT_GATEWAY</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-MSS:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_MSS">NM_VPN_PLUGIN_IP6_CONFIG_MSS</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-NEVER-DEFAULT:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_NEVER_DEFAULT">NM_VPN_PLUGIN_IP6_CONFIG_NEVER_DEFAULT</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-PREFIX:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_PREFIX">NM_VPN_PLUGIN_IP6_CONFIG_PREFIX</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-PTP:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_PTP">NM_VPN_PLUGIN_IP6_CONFIG_PTP</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-ROUTES:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_ROUTES">NM_VPN_PLUGIN_IP6_CONFIG_ROUTES</a>, macro in <a class="link" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">NetworkManagerVPN</a>
+</dt>
+<dd></dd>
<a name="idxW"></a><h3 class="title">W</h3>
<dt>
<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>
diff --git a/docs/libnm-util/html/ch01.html b/docs/libnm-util/html/ch01.html
index 88a43401e..10afeae90 100644
--- a/docs/libnm-util/html/ch01.html
+++ b/docs/libnm-util/html/ch01.html
@@ -113,6 +113,12 @@ that require PPP to deliver IP capability</span>
<dt>
<span class="refentrytitle"><a href="libnm-util-nm-utils.html">nm-utils</a></span><span class="refpurpose"> — Utility functions</span>
</dt>
+<dt>
+<span class="refentrytitle"><a href="libnm-util-NetworkManager.html">NetworkManager</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="libnm-util-NetworkManagerVPN.html">NetworkManagerVPN</a></span><span class="refpurpose"></span>
+</dt>
</dl></div>
</div>
<div class="footer">
diff --git a/docs/libnm-util/html/index.html b/docs/libnm-util/html/index.html
index aa9390e13..05c28f08a 100644
--- a/docs/libnm-util/html/index.html
+++ b/docs/libnm-util/html/index.html
@@ -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.10.0
+ for libnm-util 1.0.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>.
@@ -139,6 +139,12 @@ that require PPP to deliver IP capability</span>
<dt>
<span class="refentrytitle"><a href="libnm-util-nm-utils.html">nm-utils</a></span><span class="refpurpose"> — Utility functions</span>
</dt>
+<dt>
+<span class="refentrytitle"><a href="libnm-util-NetworkManager.html">NetworkManager</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="libnm-util-NetworkManagerVPN.html">NetworkManagerVPN</a></span><span class="refpurpose"></span>
+</dt>
</dl></dd>
<dt><span class="chapter"><a href="object-tree.html">Object Hierarchy</a></span></dt>
<dt><span class="index"><a href="api-index-full.html">API Index</a></span></dt>
diff --git a/docs/libnm-util/html/index.sgml b/docs/libnm-util/html/index.sgml
index ad7d61c93..e09593178 100644
--- a/docs/libnm-util/html/index.sgml
+++ b/docs/libnm-util/html/index.sgml
@@ -16,6 +16,8 @@
<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-INVALID-SETTING:CAPS" href="libnm-util/NMConnection.html#NM-CONNECTION-ERROR-INVALID-SETTING:CAPS">
+<ANCHOR id="NM-CONNECTION-NORMALIZE-PARAM-IP6-CONFIG-METHOD:CAPS" href="libnm-util/NMConnection.html#NM-CONNECTION-NORMALIZE-PARAM-IP6-CONFIG-METHOD: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">
@@ -33,6 +35,7 @@
<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">
+<ANCHOR id="nm-connection-normalize" href="libnm-util/NMConnection.html#nm-connection-normalize">
<ANCHOR id="nm-connection-need-secrets" href="libnm-util/NMConnection.html#nm-connection-need-secrets">
<ANCHOR id="nm-connection-clear-secrets" href="libnm-util/NMConnection.html#nm-connection-clear-secrets">
<ANCHOR id="nm-connection-clear-secrets-with-flags" href="libnm-util/NMConnection.html#nm-connection-clear-secrets-with-flags">
@@ -40,6 +43,7 @@
<ANCHOR id="nm-connection-set-path" href="libnm-util/NMConnection.html#nm-connection-set-path">
<ANCHOR id="nm-connection-get-path" href="libnm-util/NMConnection.html#nm-connection-get-path">
<ANCHOR id="nm-connection-get-virtual-iface-name" href="libnm-util/NMConnection.html#nm-connection-get-virtual-iface-name">
+<ANCHOR id="nm-connection-get-interface-name" href="libnm-util/NMConnection.html#nm-connection-get-interface-name">
<ANCHOR id="nm-connection-is-type" href="libnm-util/NMConnection.html#nm-connection-is-type">
<ANCHOR id="nm-connection-for-each-setting-value" href="libnm-util/NMConnection.html#nm-connection-for-each-setting-value">
<ANCHOR id="nm-connection-to-hash" href="libnm-util/NMConnection.html#nm-connection-to-hash">
@@ -117,6 +121,8 @@
<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="NM-SETTING-COMPARE-FLAG-DIFF-RESULT-WITH-DEFAULT:CAPS" href="libnm-util/NMSetting.html#NM-SETTING-COMPARE-FLAG-DIFF-RESULT-WITH-DEFAULT:CAPS">
+<ANCHOR id="NM-SETTING-COMPARE-FLAG-DIFF-RESULT-NO-DEFAULT:CAPS" href="libnm-util/NMSetting.html#NM-SETTING-COMPARE-FLAG-DIFF-RESULT-NO-DEFAULT: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">
@@ -135,6 +141,8 @@
<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-RESULT-IN-A-DEFAULT:CAPS" href="libnm-util/NMSetting.html#NM-SETTING-DIFF-RESULT-IN-A-DEFAULT:CAPS">
+<ANCHOR id="NM-SETTING-DIFF-RESULT-IN-B-DEFAULT:CAPS" href="libnm-util/NMSetting.html#NM-SETTING-DIFF-RESULT-IN-B-DEFAULT: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">
@@ -671,6 +679,7 @@
<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="NM-SETTING-BOND-OPTION-LACP-RATE:CAPS" href="libnm-util/NMSettingBond.html#NM-SETTING-BOND-OPTION-LACP-RATE: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">
@@ -1231,6 +1240,7 @@
<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-ROUTE-METRIC:CAPS" href="libnm-util/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-ROUTE-METRIC: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">
@@ -1297,6 +1307,7 @@
<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-route-metric" href="libnm-util/NMSettingIP4Config.html#nm-setting-ip4-config-get-route-metric">
<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">
<ANCHOR id="nm-setting-ip4-config-get-dhcp-client-id" href="libnm-util/NMSettingIP4Config.html#nm-setting-ip4-config-get-dhcp-client-id">
@@ -1305,7 +1316,6 @@
<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.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">
@@ -1317,6 +1327,7 @@
<ANCHOR id="NMSettingIP4Config--may-fail" href="libnm-util/NMSettingIP4Config.html#NMSettingIP4Config--may-fail">
<ANCHOR id="NMSettingIP4Config--method" href="libnm-util/NMSettingIP4Config.html#NMSettingIP4Config--method">
<ANCHOR id="NMSettingIP4Config--never-default" href="libnm-util/NMSettingIP4Config.html#NMSettingIP4Config--never-default">
+<ANCHOR id="NMSettingIP4Config--route-metric" href="libnm-util/NMSettingIP4Config.html#NMSettingIP4Config--route-metric">
<ANCHOR id="NMSettingIP4Config--routes" href="libnm-util/NMSettingIP4Config.html#NMSettingIP4Config--routes">
<ANCHOR id="NMSettingIP6Config" href="libnm-util/NMSettingIP6Config.html">
<ANCHOR id="NMSettingIP6Config.synopsis" href="libnm-util/NMSettingIP6Config.html#NMSettingIP6Config.synopsis">
@@ -1341,6 +1352,7 @@
<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-ROUTE-METRIC:CAPS" href="libnm-util/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-ROUTE-METRIC: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">
@@ -1413,6 +1425,7 @@
<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-route-metric" href="libnm-util/NMSettingIP6Config.html#nm-setting-ip6-config-get-route-metric">
<ANCHOR id="nm-setting-ip6-config-get-ignore-auto-dns" href="libnm-util/NMSettingIP6Config.html#nm-setting-ip6-config-get-ignore-auto-dns">
<ANCHOR id="nm-setting-ip6-config-get-dhcp-hostname" href="libnm-util/NMSettingIP6Config.html#nm-setting-ip6-config-get-dhcp-hostname">
<ANCHOR id="nm-setting-ip6-config-get-never-default" href="libnm-util/NMSettingIP6Config.html#nm-setting-ip6-config-get-never-default">
@@ -1429,6 +1442,7 @@
<ANCHOR id="NMSettingIP6Config--may-fail" href="libnm-util/NMSettingIP6Config.html#NMSettingIP6Config--may-fail">
<ANCHOR id="NMSettingIP6Config--method" href="libnm-util/NMSettingIP6Config.html#NMSettingIP6Config--method">
<ANCHOR id="NMSettingIP6Config--never-default" href="libnm-util/NMSettingIP6Config.html#NMSettingIP6Config--never-default">
+<ANCHOR id="NMSettingIP6Config--route-metric" href="libnm-util/NMSettingIP6Config.html#NMSettingIP6Config--route-metric">
<ANCHOR id="NMSettingIP6Config--routes" href="libnm-util/NMSettingIP6Config.html#NMSettingIP6Config--routes">
<ANCHOR id="NMSettingPPP" href="libnm-util/NMSettingPPP.html">
<ANCHOR id="NMSettingPPP.synopsis" href="libnm-util/NMSettingPPP.html#NMSettingPPP.synopsis">
@@ -1550,6 +1564,7 @@
<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-PERSISTENT:CAPS" href="libnm-util/NMSettingVPN.html#NM-SETTING-VPN-PERSISTENT: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">
@@ -1558,6 +1573,7 @@
<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">
<ANCHOR id="nm-setting-vpn-get-user-name" href="libnm-util/NMSettingVPN.html#nm-setting-vpn-get-user-name">
+<ANCHOR id="nm-setting-vpn-get-persistent" href="libnm-util/NMSettingVPN.html#nm-setting-vpn-get-persistent">
<ANCHOR id="nm-setting-vpn-get-num-data-items" href="libnm-util/NMSettingVPN.html#nm-setting-vpn-get-num-data-items">
<ANCHOR id="nm-setting-vpn-add-data-item" href="libnm-util/NMSettingVPN.html#nm-setting-vpn-add-data-item">
<ANCHOR id="nm-setting-vpn-get-data-item" href="libnm-util/NMSettingVPN.html#nm-setting-vpn-get-data-item">
@@ -1570,6 +1586,7 @@
<ANCHOR id="nm-setting-vpn-foreach-secret" href="libnm-util/NMSettingVPN.html#nm-setting-vpn-foreach-secret">
<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--persistent" href="libnm-util/NMSettingVPN.html#NMSettingVPN--persistent">
<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">
@@ -1619,6 +1636,8 @@
<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="NMUtilsFileSearchInPathsPredicate" href="libnm-util/libnm-util-nm-utils.html#NMUtilsFileSearchInPathsPredicate">
+<ANCHOR id="nm-utils-file-search-in-paths" href="libnm-util/libnm-util-nm-utils.html#nm-utils-file-search-in-paths">
<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">
@@ -1641,8 +1660,309 @@
<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="libnm-util-NetworkManager" href="libnm-util/libnm-util-NetworkManager.html">
+<ANCHOR id="libnm-util-NetworkManager.synopsis" href="libnm-util/libnm-util-NetworkManager.html#libnm-util-NetworkManager.synopsis">
+<ANCHOR id="libnm-util-NetworkManager.description" href="libnm-util/libnm-util-NetworkManager.html#libnm-util-NetworkManager.description">
+<ANCHOR id="libnm-util-NetworkManager.details" href="libnm-util/libnm-util-NetworkManager.html#libnm-util-NetworkManager.details">
+<ANCHOR id="NM-DBUS-SERVICE:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-SERVICE:CAPS">
+<ANCHOR id="NM-DBUS-PATH:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-PATH:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-INTERFACE:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE-WIRED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-WIRED:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE-ADSL:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-ADSL:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE-WIRELESS:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-WIRELESS:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE-BLUETOOTH:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-BLUETOOTH:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE-OLPC-MESH:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-OLPC-MESH:CAPS">
+<ANCHOR id="NM-DBUS-PATH-ACCESS-POINT:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-PATH-ACCESS-POINT:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-ACCESS-POINT:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-ACCESS-POINT:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE-MODEM:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-MODEM:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE-WIMAX:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-WIMAX:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-WIMAX-NSP:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-WIMAX-NSP:CAPS">
+<ANCHOR id="NM-DBUS-PATH-WIMAX-NSP:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-PATH-WIMAX-NSP:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-ACTIVE-CONNECTION:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-ACTIVE-CONNECTION:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-IP4-CONFIG:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-IP4-CONFIG:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DHCP4-CONFIG:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DHCP4-CONFIG:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-IP6-CONFIG:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-IP6-CONFIG:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DHCP6-CONFIG:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DHCP6-CONFIG:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE-INFINIBAND:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-INFINIBAND:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE-BOND:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-BOND:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE-TEAM:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-TEAM:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE-VLAN:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-VLAN:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE-BRIDGE:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-BRIDGE:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE-GENERIC:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-GENERIC:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE-VETH:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-VETH:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE-TUN:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-TUN:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE-MACVLAN:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-MACVLAN:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE-VXLAN:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-VXLAN:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE-GRE:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-GRE:CAPS">
+<ANCHOR id="NM-DBUS-IFACE-SETTINGS:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-IFACE-SETTINGS:CAPS">
+<ANCHOR id="NM-DBUS-PATH-SETTINGS:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-PATH-SETTINGS:CAPS">
+<ANCHOR id="NM-DBUS-IFACE-SETTINGS-CONNECTION:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-IFACE-SETTINGS-CONNECTION:CAPS">
+<ANCHOR id="NM-DBUS-PATH-SETTINGS-CONNECTION:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-PATH-SETTINGS-CONNECTION:CAPS">
+<ANCHOR id="NM-DBUS-IFACE-SETTINGS-CONNECTION-SECRETS:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-IFACE-SETTINGS-CONNECTION-SECRETS:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-AGENT-MANAGER:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-AGENT-MANAGER:CAPS">
+<ANCHOR id="NM-DBUS-PATH-AGENT-MANAGER:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-PATH-AGENT-MANAGER:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-SECRET-AGENT:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-SECRET-AGENT:CAPS">
+<ANCHOR id="NM-DBUS-PATH-SECRET-AGENT:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DBUS-PATH-SECRET-AGENT:CAPS">
+<ANCHOR id="NMState" href="libnm-util/libnm-util-NetworkManager.html#NMState">
+<ANCHOR id="NM-STATE-UNKNOWN:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-STATE-UNKNOWN:CAPS">
+<ANCHOR id="NM-STATE-ASLEEP:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-STATE-ASLEEP:CAPS">
+<ANCHOR id="NM-STATE-DISCONNECTED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-STATE-DISCONNECTED:CAPS">
+<ANCHOR id="NM-STATE-DISCONNECTING:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-STATE-DISCONNECTING:CAPS">
+<ANCHOR id="NM-STATE-CONNECTING:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-STATE-CONNECTING:CAPS">
+<ANCHOR id="NM-STATE-CONNECTED-LOCAL:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-STATE-CONNECTED-LOCAL:CAPS">
+<ANCHOR id="NM-STATE-CONNECTED-SITE:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-STATE-CONNECTED-SITE:CAPS">
+<ANCHOR id="NM-STATE-CONNECTED-GLOBAL:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-STATE-CONNECTED-GLOBAL:CAPS">
+<ANCHOR id="NM-STATE-CONNECTED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-STATE-CONNECTED:CAPS">
+<ANCHOR id="NMConnectivityState" href="libnm-util/libnm-util-NetworkManager.html#NMConnectivityState">
+<ANCHOR id="NM-CONNECTIVITY-UNKNOWN:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-CONNECTIVITY-UNKNOWN:CAPS">
+<ANCHOR id="NM-CONNECTIVITY-NONE:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-CONNECTIVITY-NONE:CAPS">
+<ANCHOR id="NM-CONNECTIVITY-PORTAL:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-CONNECTIVITY-PORTAL:CAPS">
+<ANCHOR id="NM-CONNECTIVITY-LIMITED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-CONNECTIVITY-LIMITED:CAPS">
+<ANCHOR id="NM-CONNECTIVITY-FULL:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-CONNECTIVITY-FULL:CAPS">
+<ANCHOR id="NMDeviceType" href="libnm-util/libnm-util-NetworkManager.html#NMDeviceType">
+<ANCHOR id="NM-DEVICE-TYPE-UNKNOWN:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-TYPE-UNKNOWN:CAPS">
+<ANCHOR id="NM-DEVICE-TYPE-ETHERNET:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-TYPE-ETHERNET:CAPS">
+<ANCHOR id="NM-DEVICE-TYPE-WIFI:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-TYPE-WIFI:CAPS">
+<ANCHOR id="NM-DEVICE-TYPE-UNUSED1:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-TYPE-UNUSED1:CAPS">
+<ANCHOR id="NM-DEVICE-TYPE-UNUSED2:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-TYPE-UNUSED2:CAPS">
+<ANCHOR id="NM-DEVICE-TYPE-BT:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-TYPE-BT:CAPS">
+<ANCHOR id="NM-DEVICE-TYPE-OLPC-MESH:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-TYPE-OLPC-MESH:CAPS">
+<ANCHOR id="NM-DEVICE-TYPE-WIMAX:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-TYPE-WIMAX:CAPS">
+<ANCHOR id="NM-DEVICE-TYPE-MODEM:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-TYPE-MODEM:CAPS">
+<ANCHOR id="NM-DEVICE-TYPE-INFINIBAND:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-TYPE-INFINIBAND:CAPS">
+<ANCHOR id="NM-DEVICE-TYPE-BOND:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-TYPE-BOND:CAPS">
+<ANCHOR id="NM-DEVICE-TYPE-VLAN:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-TYPE-VLAN:CAPS">
+<ANCHOR id="NM-DEVICE-TYPE-ADSL:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-TYPE-ADSL:CAPS">
+<ANCHOR id="NM-DEVICE-TYPE-BRIDGE:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-TYPE-BRIDGE:CAPS">
+<ANCHOR id="NM-DEVICE-TYPE-GENERIC:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-TYPE-GENERIC:CAPS">
+<ANCHOR id="NM-DEVICE-TYPE-TEAM:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-TYPE-TEAM:CAPS">
+<ANCHOR id="NMDeviceCapabilities" href="libnm-util/libnm-util-NetworkManager.html#NMDeviceCapabilities">
+<ANCHOR id="NM-DEVICE-CAP-NONE:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-CAP-NONE:CAPS">
+<ANCHOR id="NM-DEVICE-CAP-NM-SUPPORTED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-CAP-NM-SUPPORTED:CAPS">
+<ANCHOR id="NM-DEVICE-CAP-CARRIER-DETECT:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-CAP-CARRIER-DETECT:CAPS">
+<ANCHOR id="NM-DEVICE-CAP-IS-SOFTWARE:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-CAP-IS-SOFTWARE:CAPS">
+<ANCHOR id="NMDeviceWifiCapabilities" href="libnm-util/libnm-util-NetworkManager.html#NMDeviceWifiCapabilities">
+<ANCHOR id="NM-WIFI-DEVICE-CAP-NONE:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-WIFI-DEVICE-CAP-NONE:CAPS">
+<ANCHOR id="NM-WIFI-DEVICE-CAP-CIPHER-WEP40:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-WIFI-DEVICE-CAP-CIPHER-WEP40:CAPS">
+<ANCHOR id="NM-WIFI-DEVICE-CAP-CIPHER-WEP104:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-WIFI-DEVICE-CAP-CIPHER-WEP104:CAPS">
+<ANCHOR id="NM-WIFI-DEVICE-CAP-CIPHER-TKIP:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-WIFI-DEVICE-CAP-CIPHER-TKIP:CAPS">
+<ANCHOR id="NM-WIFI-DEVICE-CAP-CIPHER-CCMP:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-WIFI-DEVICE-CAP-CIPHER-CCMP:CAPS">
+<ANCHOR id="NM-WIFI-DEVICE-CAP-WPA:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-WIFI-DEVICE-CAP-WPA:CAPS">
+<ANCHOR id="NM-WIFI-DEVICE-CAP-RSN:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-WIFI-DEVICE-CAP-RSN:CAPS">
+<ANCHOR id="NM-WIFI-DEVICE-CAP-AP:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-WIFI-DEVICE-CAP-AP:CAPS">
+<ANCHOR id="NM-WIFI-DEVICE-CAP-ADHOC:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-WIFI-DEVICE-CAP-ADHOC:CAPS">
+<ANCHOR id="NM80211ApFlags" href="libnm-util/libnm-util-NetworkManager.html#NM80211ApFlags">
+<ANCHOR id="NM-802-11-AP-FLAGS-NONE:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-802-11-AP-FLAGS-NONE:CAPS">
+<ANCHOR id="NM-802-11-AP-FLAGS-PRIVACY:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-802-11-AP-FLAGS-PRIVACY:CAPS">
+<ANCHOR id="NM80211ApSecurityFlags" href="libnm-util/libnm-util-NetworkManager.html#NM80211ApSecurityFlags">
+<ANCHOR id="NM-802-11-AP-SEC-NONE:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-802-11-AP-SEC-NONE:CAPS">
+<ANCHOR id="NM-802-11-AP-SEC-PAIR-WEP40:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-802-11-AP-SEC-PAIR-WEP40:CAPS">
+<ANCHOR id="NM-802-11-AP-SEC-PAIR-WEP104:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-802-11-AP-SEC-PAIR-WEP104:CAPS">
+<ANCHOR id="NM-802-11-AP-SEC-PAIR-TKIP:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-802-11-AP-SEC-PAIR-TKIP:CAPS">
+<ANCHOR id="NM-802-11-AP-SEC-PAIR-CCMP:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-802-11-AP-SEC-PAIR-CCMP:CAPS">
+<ANCHOR id="NM-802-11-AP-SEC-GROUP-WEP40:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-802-11-AP-SEC-GROUP-WEP40:CAPS">
+<ANCHOR id="NM-802-11-AP-SEC-GROUP-WEP104:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-802-11-AP-SEC-GROUP-WEP104:CAPS">
+<ANCHOR id="NM-802-11-AP-SEC-GROUP-TKIP:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-802-11-AP-SEC-GROUP-TKIP:CAPS">
+<ANCHOR id="NM-802-11-AP-SEC-GROUP-CCMP:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-802-11-AP-SEC-GROUP-CCMP:CAPS">
+<ANCHOR id="NM-802-11-AP-SEC-KEY-MGMT-PSK:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-802-11-AP-SEC-KEY-MGMT-PSK:CAPS">
+<ANCHOR id="NM-802-11-AP-SEC-KEY-MGMT-802-1X:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-802-11-AP-SEC-KEY-MGMT-802-1X:CAPS">
+<ANCHOR id="NM80211Mode" href="libnm-util/libnm-util-NetworkManager.html#NM80211Mode">
+<ANCHOR id="NM-802-11-MODE-UNKNOWN:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-802-11-MODE-UNKNOWN:CAPS">
+<ANCHOR id="NM-802-11-MODE-ADHOC:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-802-11-MODE-ADHOC:CAPS">
+<ANCHOR id="NM-802-11-MODE-INFRA:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-802-11-MODE-INFRA:CAPS">
+<ANCHOR id="NM-802-11-MODE-AP:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-802-11-MODE-AP:CAPS">
+<ANCHOR id="NMBluetoothCapabilities" href="libnm-util/libnm-util-NetworkManager.html#NMBluetoothCapabilities">
+<ANCHOR id="NM-BT-CAPABILITY-NONE:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-BT-CAPABILITY-NONE:CAPS">
+<ANCHOR id="NM-BT-CAPABILITY-DUN:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-BT-CAPABILITY-DUN:CAPS">
+<ANCHOR id="NM-BT-CAPABILITY-NAP:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-BT-CAPABILITY-NAP:CAPS">
+<ANCHOR id="NMDeviceModemCapabilities" href="libnm-util/libnm-util-NetworkManager.html#NMDeviceModemCapabilities">
+<ANCHOR id="NM-DEVICE-MODEM-CAPABILITY-NONE:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-MODEM-CAPABILITY-NONE:CAPS">
+<ANCHOR id="NM-DEVICE-MODEM-CAPABILITY-POTS:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-MODEM-CAPABILITY-POTS:CAPS">
+<ANCHOR id="NM-DEVICE-MODEM-CAPABILITY-CDMA-EVDO:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-MODEM-CAPABILITY-CDMA-EVDO:CAPS">
+<ANCHOR id="NM-DEVICE-MODEM-CAPABILITY-GSM-UMTS:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-MODEM-CAPABILITY-GSM-UMTS:CAPS">
+<ANCHOR id="NM-DEVICE-MODEM-CAPABILITY-LTE:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-MODEM-CAPABILITY-LTE:CAPS">
+<ANCHOR id="NMDeviceState" href="libnm-util/libnm-util-NetworkManager.html#NMDeviceState">
+<ANCHOR id="NM-DEVICE-STATE-UNKNOWN:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-UNKNOWN:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-UNMANAGED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-UNMANAGED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-UNAVAILABLE:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-UNAVAILABLE:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-DISCONNECTED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-DISCONNECTED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-PREPARE:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-PREPARE:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-CONFIG:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-CONFIG:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-NEED-AUTH:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-NEED-AUTH:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-IP-CONFIG:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-IP-CONFIG:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-IP-CHECK:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-IP-CHECK:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-SECONDARIES:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-SECONDARIES:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-ACTIVATED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-ACTIVATED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-DEACTIVATING:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-DEACTIVATING:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-FAILED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-FAILED:CAPS">
+<ANCHOR id="NMDeviceStateReason" href="libnm-util/libnm-util-NetworkManager.html#NMDeviceStateReason">
+<ANCHOR id="NM-DEVICE-STATE-REASON-NONE:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-NONE:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-UNKNOWN:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-UNKNOWN:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-NOW-MANAGED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-NOW-MANAGED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-NOW-UNMANAGED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-NOW-UNMANAGED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-CONFIG-FAILED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-CONFIG-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-IP-CONFIG-UNAVAILABLE:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-IP-CONFIG-UNAVAILABLE:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-IP-CONFIG-EXPIRED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-IP-CONFIG-EXPIRED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-NO-SECRETS:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-NO-SECRETS:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-SUPPLICANT-DISCONNECT:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-SUPPLICANT-DISCONNECT:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-SUPPLICANT-CONFIG-FAILED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-SUPPLICANT-CONFIG-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-SUPPLICANT-FAILED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-SUPPLICANT-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-SUPPLICANT-TIMEOUT:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-SUPPLICANT-TIMEOUT:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-PPP-START-FAILED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-PPP-START-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-PPP-DISCONNECT:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-PPP-DISCONNECT:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-PPP-FAILED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-PPP-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-DHCP-START-FAILED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-DHCP-START-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-DHCP-ERROR:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-DHCP-ERROR:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-DHCP-FAILED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-DHCP-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-SHARED-START-FAILED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-SHARED-START-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-SHARED-FAILED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-SHARED-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-AUTOIP-START-FAILED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-AUTOIP-START-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-AUTOIP-ERROR:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-AUTOIP-ERROR:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-AUTOIP-FAILED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-AUTOIP-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-MODEM-BUSY:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-MODEM-BUSY:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-MODEM-NO-DIAL-TONE:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-MODEM-NO-DIAL-TONE:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-MODEM-NO-CARRIER:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-MODEM-NO-CARRIER:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-MODEM-DIAL-TIMEOUT:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-MODEM-DIAL-TIMEOUT:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-MODEM-DIAL-FAILED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-MODEM-DIAL-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-MODEM-INIT-FAILED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-MODEM-INIT-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-GSM-APN-FAILED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-GSM-APN-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-GSM-REGISTRATION-NOT-SEARCHING:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-GSM-REGISTRATION-NOT-SEARCHING:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-GSM-REGISTRATION-DENIED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-GSM-REGISTRATION-DENIED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-GSM-REGISTRATION-TIMEOUT:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-GSM-REGISTRATION-TIMEOUT:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-GSM-REGISTRATION-FAILED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-GSM-REGISTRATION-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-GSM-PIN-CHECK-FAILED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-GSM-PIN-CHECK-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-FIRMWARE-MISSING:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-FIRMWARE-MISSING:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-REMOVED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-REMOVED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-SLEEPING:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-SLEEPING:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-CONNECTION-REMOVED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-CONNECTION-REMOVED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-USER-REQUESTED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-USER-REQUESTED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-CARRIER:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-CARRIER:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-CONNECTION-ASSUMED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-CONNECTION-ASSUMED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-SUPPLICANT-AVAILABLE:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-SUPPLICANT-AVAILABLE:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-MODEM-NOT-FOUND:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-MODEM-NOT-FOUND:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-BT-FAILED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-BT-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-GSM-SIM-NOT-INSERTED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-GSM-SIM-NOT-INSERTED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-GSM-SIM-PIN-REQUIRED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-GSM-SIM-PIN-REQUIRED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-GSM-SIM-PUK-REQUIRED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-GSM-SIM-PUK-REQUIRED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-GSM-SIM-WRONG:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-GSM-SIM-WRONG:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-INFINIBAND-MODE:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-INFINIBAND-MODE:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-DEPENDENCY-FAILED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-DEPENDENCY-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-BR2684-FAILED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-BR2684-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-MODEM-MANAGER-UNAVAILABLE:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-MODEM-MANAGER-UNAVAILABLE:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-SSID-NOT-FOUND:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-SSID-NOT-FOUND:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-SECONDARY-CONNECTION-FAILED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-SECONDARY-CONNECTION-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-DCB-FCOE-FAILED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-DCB-FCOE-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-TEAMD-CONTROL-FAILED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-TEAMD-CONTROL-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-MODEM-FAILED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-MODEM-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-MODEM-AVAILABLE:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-MODEM-AVAILABLE:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-SIM-PIN-INCORRECT:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-SIM-PIN-INCORRECT:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-LAST:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-LAST:CAPS">
+<ANCHOR id="NMActiveConnectionState" href="libnm-util/libnm-util-NetworkManager.html#NMActiveConnectionState">
+<ANCHOR id="NM-ACTIVE-CONNECTION-STATE-UNKNOWN:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-ACTIVE-CONNECTION-STATE-UNKNOWN:CAPS">
+<ANCHOR id="NM-ACTIVE-CONNECTION-STATE-ACTIVATING:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-ACTIVE-CONNECTION-STATE-ACTIVATING:CAPS">
+<ANCHOR id="NM-ACTIVE-CONNECTION-STATE-ACTIVATED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-ACTIVE-CONNECTION-STATE-ACTIVATED:CAPS">
+<ANCHOR id="NM-ACTIVE-CONNECTION-STATE-DEACTIVATING:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-ACTIVE-CONNECTION-STATE-DEACTIVATING:CAPS">
+<ANCHOR id="NM-ACTIVE-CONNECTION-STATE-DEACTIVATED:CAPS" href="libnm-util/libnm-util-NetworkManager.html#NM-ACTIVE-CONNECTION-STATE-DEACTIVATED:CAPS">
+<ANCHOR id="libnm-util-NetworkManagerVPN" href="libnm-util/libnm-util-NetworkManagerVPN.html">
+<ANCHOR id="libnm-util-NetworkManagerVPN.synopsis" href="libnm-util/libnm-util-NetworkManagerVPN.html#libnm-util-NetworkManagerVPN.synopsis">
+<ANCHOR id="libnm-util-NetworkManagerVPN.description" href="libnm-util/libnm-util-NetworkManagerVPN.html#libnm-util-NetworkManagerVPN.description">
+<ANCHOR id="libnm-util-NetworkManagerVPN.details" href="libnm-util/libnm-util-NetworkManagerVPN.html#libnm-util-NetworkManagerVPN.details">
+<ANCHOR id="NM-DBUS-PATH-VPN:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-PATH-VPN:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-VPN:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-INTERFACE-VPN:CAPS">
+<ANCHOR id="NM-DBUS-PATH-VPN-CONNECTION:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-PATH-VPN-CONNECTION:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-VPN-CONNECTION:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-INTERFACE-VPN-CONNECTION:CAPS">
+<ANCHOR id="NM-VPN-DBUS-PLUGIN-PATH:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-DBUS-PLUGIN-PATH:CAPS">
+<ANCHOR id="NM-VPN-DBUS-PLUGIN-INTERFACE:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-DBUS-PLUGIN-INTERFACE:CAPS">
+<ANCHOR id="NM-DBUS-NO-ACTIVE-VPN-CONNECTION:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-NO-ACTIVE-VPN-CONNECTION:CAPS">
+<ANCHOR id="NM-DBUS-NO-VPN-CONNECTIONS:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-NO-VPN-CONNECTIONS:CAPS">
+<ANCHOR id="NM-DBUS-INVALID-VPN-CONNECTION:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-INVALID-VPN-CONNECTION:CAPS">
+<ANCHOR id="NM-DBUS-VPN-ERROR-PREFIX:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-ERROR-PREFIX:CAPS">
+<ANCHOR id="NM-DBUS-VPN-STARTING-IN-PROGRESS:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-STARTING-IN-PROGRESS:CAPS">
+<ANCHOR id="NM-DBUS-VPN-ALREADY-STARTED:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-ALREADY-STARTED:CAPS">
+<ANCHOR id="NM-DBUS-VPN-STOPPING-IN-PROGRESS:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-STOPPING-IN-PROGRESS:CAPS">
+<ANCHOR id="NM-DBUS-VPN-ALREADY-STOPPED:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-ALREADY-STOPPED:CAPS">
+<ANCHOR id="NM-DBUS-VPN-WRONG-STATE:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-WRONG-STATE:CAPS">
+<ANCHOR id="NM-DBUS-VPN-BAD-ARGUMENTS:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-BAD-ARGUMENTS:CAPS">
+<ANCHOR id="NM-DBUS-VPN-INTERACTIVE-NOT-SUPPORTED:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-INTERACTIVE-NOT-SUPPORTED:CAPS">
+<ANCHOR id="NM-DBUS-VPN-SIGNAL-LOGIN-BANNER:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-LOGIN-BANNER:CAPS">
+<ANCHOR id="NM-DBUS-VPN-SIGNAL-LOGIN-FAILED:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-LOGIN-FAILED:CAPS">
+<ANCHOR id="NM-DBUS-VPN-SIGNAL-LAUNCH-FAILED:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-LAUNCH-FAILED:CAPS">
+<ANCHOR id="NM-DBUS-VPN-SIGNAL-CONNECT-FAILED:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-CONNECT-FAILED:CAPS">
+<ANCHOR id="NM-DBUS-VPN-SIGNAL-VPN-CONFIG-BAD:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-VPN-CONFIG-BAD:CAPS">
+<ANCHOR id="NM-DBUS-VPN-SIGNAL-IP-CONFIG-BAD:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-IP-CONFIG-BAD:CAPS">
+<ANCHOR id="NM-DBUS-VPN-SIGNAL-STATE-CHANGE:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-STATE-CHANGE:CAPS">
+<ANCHOR id="NM-DBUS-VPN-SIGNAL-IP4-CONFIG:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-IP4-CONFIG:CAPS">
+<ANCHOR id="NMVPNServiceState" href="libnm-util/libnm-util-NetworkManagerVPN.html#NMVPNServiceState">
+<ANCHOR id="NM-VPN-SERVICE-STATE-UNKNOWN:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-SERVICE-STATE-UNKNOWN:CAPS">
+<ANCHOR id="NM-VPN-SERVICE-STATE-INIT:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-SERVICE-STATE-INIT:CAPS">
+<ANCHOR id="NM-VPN-SERVICE-STATE-SHUTDOWN:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-SERVICE-STATE-SHUTDOWN:CAPS">
+<ANCHOR id="NM-VPN-SERVICE-STATE-STARTING:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-SERVICE-STATE-STARTING:CAPS">
+<ANCHOR id="NM-VPN-SERVICE-STATE-STARTED:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-SERVICE-STATE-STARTED:CAPS">
+<ANCHOR id="NM-VPN-SERVICE-STATE-STOPPING:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-SERVICE-STATE-STOPPING:CAPS">
+<ANCHOR id="NM-VPN-SERVICE-STATE-STOPPED:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-SERVICE-STATE-STOPPED:CAPS">
+<ANCHOR id="NMVPNConnectionState" href="libnm-util/libnm-util-NetworkManagerVPN.html#NMVPNConnectionState">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-UNKNOWN:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-UNKNOWN:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-PREPARE:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-PREPARE:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-NEED-AUTH:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-NEED-AUTH:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-CONNECT:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-CONNECT:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-IP-CONFIG-GET:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-IP-CONFIG-GET:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-ACTIVATED:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-ACTIVATED:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-FAILED:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-FAILED:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-DISCONNECTED:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-DISCONNECTED:CAPS">
+<ANCHOR id="NMVPNConnectionStateReason" href="libnm-util/libnm-util-NetworkManagerVPN.html#NMVPNConnectionStateReason">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-REASON-UNKNOWN:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-REASON-UNKNOWN:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-REASON-NONE:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-REASON-NONE:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-REASON-USER-DISCONNECTED:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-REASON-USER-DISCONNECTED:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-REASON-DEVICE-DISCONNECTED:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-REASON-DEVICE-DISCONNECTED:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-REASON-SERVICE-STOPPED:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-REASON-SERVICE-STOPPED:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-REASON-IP-CONFIG-INVALID:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-REASON-IP-CONFIG-INVALID:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-REASON-CONNECT-TIMEOUT:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-REASON-CONNECT-TIMEOUT:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-REASON-SERVICE-START-TIMEOUT:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-REASON-SERVICE-START-TIMEOUT:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-REASON-SERVICE-START-FAILED:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-REASON-SERVICE-START-FAILED:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-REASON-NO-SECRETS:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-REASON-NO-SECRETS:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-REASON-LOGIN-FAILED:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-REASON-LOGIN-FAILED:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-REASON-CONNECTION-REMOVED:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-REASON-CONNECTION-REMOVED:CAPS">
+<ANCHOR id="NMVPNPluginFailure" href="libnm-util/libnm-util-NetworkManagerVPN.html#NMVPNPluginFailure">
+<ANCHOR id="NM-VPN-PLUGIN-FAILURE-LOGIN-FAILED:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-FAILURE-LOGIN-FAILED:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-FAILURE-CONNECT-FAILED:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-FAILURE-CONNECT-FAILED:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-FAILURE-BAD-IP-CONFIG:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-FAILURE-BAD-IP-CONFIG:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-CONFIG-TUNDEV:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-CONFIG-TUNDEV:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-CONFIG-BANNER:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-CONFIG-BANNER:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-CONFIG-EXT-GATEWAY:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-CONFIG-EXT-GATEWAY:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-CONFIG-MTU:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-CONFIG-MTU:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-CONFIG-HAS-IP4:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-CONFIG-HAS-IP4:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-CONFIG-HAS-IP6:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-CONFIG-HAS-IP6:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-CAN-PERSIST:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-CAN-PERSIST:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP4-CONFIG-INT-GATEWAY:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-INT-GATEWAY:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP4-CONFIG-ADDRESS:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-ADDRESS:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP4-CONFIG-PTP:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-PTP:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP4-CONFIG-PREFIX:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-PREFIX:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP4-CONFIG-DNS:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-DNS:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP4-CONFIG-NBNS:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-NBNS:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP4-CONFIG-MSS:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-MSS:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP4-CONFIG-DOMAIN:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-DOMAIN:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP4-CONFIG-DOMAINS:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-DOMAINS:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP4-CONFIG-ROUTES:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-ROUTES:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP4-CONFIG-NEVER-DEFAULT:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-NEVER-DEFAULT:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP4-CONFIG-GATEWAY:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-GATEWAY:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP4-CONFIG-BANNER:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-BANNER:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP4-CONFIG-EXT-GATEWAY:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-EXT-GATEWAY:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP4-CONFIG-MTU:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-MTU:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP4-CONFIG-TUNDEV:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-TUNDEV:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP6-CONFIG-INT-GATEWAY:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-INT-GATEWAY:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP6-CONFIG-ADDRESS:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-ADDRESS:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP6-CONFIG-PTP:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-PTP:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP6-CONFIG-PREFIX:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-PREFIX:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP6-CONFIG-DNS:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-DNS:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP6-CONFIG-MSS:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-MSS:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP6-CONFIG-DOMAIN:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-DOMAIN:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP6-CONFIG-DOMAINS:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-DOMAINS:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP6-CONFIG-ROUTES:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-ROUTES:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP6-CONFIG-NEVER-DEFAULT:CAPS" href="libnm-util/libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-NEVER-DEFAULT:CAPS">
<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-closure" href="libnm-util/annotation-glossary.html#annotation-glossterm-closure">
<ANCHOR id="annotation-glossterm-element-type" href="libnm-util/annotation-glossary.html#annotation-glossterm-element-type">
<ANCHOR id="annotation-glossterm-inout" href="libnm-util/annotation-glossary.html#annotation-glossterm-inout">
<ANCHOR id="annotation-glossterm-out" href="libnm-util/annotation-glossary.html#annotation-glossterm-out">
diff --git a/docs/libnm-util/html/libnm-util-NetworkManager.html b/docs/libnm-util/html/libnm-util-NetworkManager.html
new file mode 100644
index 000000000..4d8444fad
--- /dev/null
+++ b/docs/libnm-util/html/libnm-util-NetworkManager.html
@@ -0,0 +1,1635 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NetworkManager</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="libnm-util-nm-utils.html" title="nm-utils">
+<link rel="next" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">
+<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-util-nm-utils.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-NetworkManagerVPN.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-NetworkManager.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#libnm-util-NetworkManager.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="libnm-util-NetworkManager"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="libnm-util-NetworkManager.top_of_page"></a>NetworkManager</span></h2>
+<p>NetworkManager</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="libnm-util-NetworkManager.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-SERVICE:CAPS" title="NM_DBUS_SERVICE">NM_DBUS_SERVICE</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-PATH:CAPS" title="NM_DBUS_PATH">NM_DBUS_PATH</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE:CAPS" title="NM_DBUS_INTERFACE">NM_DBUS_INTERFACE</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE:CAPS" title="NM_DBUS_INTERFACE_DEVICE">NM_DBUS_INTERFACE_DEVICE</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-WIRED:CAPS" title="NM_DBUS_INTERFACE_DEVICE_WIRED">NM_DBUS_INTERFACE_DEVICE_WIRED</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-ADSL:CAPS" title="NM_DBUS_INTERFACE_DEVICE_ADSL">NM_DBUS_INTERFACE_DEVICE_ADSL</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-WIRELESS:CAPS" title="NM_DBUS_INTERFACE_DEVICE_WIRELESS">NM_DBUS_INTERFACE_DEVICE_WIRELESS</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-BLUETOOTH:CAPS" title="NM_DBUS_INTERFACE_DEVICE_BLUETOOTH">NM_DBUS_INTERFACE_DEVICE_BLUETOOTH</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-OLPC-MESH:CAPS" title="NM_DBUS_INTERFACE_DEVICE_OLPC_MESH">NM_DBUS_INTERFACE_DEVICE_OLPC_MESH</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-PATH-ACCESS-POINT:CAPS" title="NM_DBUS_PATH_ACCESS_POINT">NM_DBUS_PATH_ACCESS_POINT</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-ACCESS-POINT:CAPS" title="NM_DBUS_INTERFACE_ACCESS_POINT">NM_DBUS_INTERFACE_ACCESS_POINT</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-MODEM:CAPS" title="NM_DBUS_INTERFACE_DEVICE_MODEM">NM_DBUS_INTERFACE_DEVICE_MODEM</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-WIMAX:CAPS" title="NM_DBUS_INTERFACE_DEVICE_WIMAX">NM_DBUS_INTERFACE_DEVICE_WIMAX</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-WIMAX-NSP:CAPS" title="NM_DBUS_INTERFACE_WIMAX_NSP">NM_DBUS_INTERFACE_WIMAX_NSP</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-PATH-WIMAX-NSP:CAPS" title="NM_DBUS_PATH_WIMAX_NSP">NM_DBUS_PATH_WIMAX_NSP</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-ACTIVE-CONNECTION:CAPS" title="NM_DBUS_INTERFACE_ACTIVE_CONNECTION">NM_DBUS_INTERFACE_ACTIVE_CONNECTION</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-IP4-CONFIG:CAPS" title="NM_DBUS_INTERFACE_IP4_CONFIG">NM_DBUS_INTERFACE_IP4_CONFIG</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DHCP4-CONFIG:CAPS" title="NM_DBUS_INTERFACE_DHCP4_CONFIG">NM_DBUS_INTERFACE_DHCP4_CONFIG</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-IP6-CONFIG:CAPS" title="NM_DBUS_INTERFACE_IP6_CONFIG">NM_DBUS_INTERFACE_IP6_CONFIG</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DHCP6-CONFIG:CAPS" title="NM_DBUS_INTERFACE_DHCP6_CONFIG">NM_DBUS_INTERFACE_DHCP6_CONFIG</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-INFINIBAND:CAPS" title="NM_DBUS_INTERFACE_DEVICE_INFINIBAND">NM_DBUS_INTERFACE_DEVICE_INFINIBAND</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-BOND:CAPS" title="NM_DBUS_INTERFACE_DEVICE_BOND">NM_DBUS_INTERFACE_DEVICE_BOND</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-TEAM:CAPS" title="NM_DBUS_INTERFACE_DEVICE_TEAM">NM_DBUS_INTERFACE_DEVICE_TEAM</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-VLAN:CAPS" title="NM_DBUS_INTERFACE_DEVICE_VLAN">NM_DBUS_INTERFACE_DEVICE_VLAN</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-BRIDGE:CAPS" title="NM_DBUS_INTERFACE_DEVICE_BRIDGE">NM_DBUS_INTERFACE_DEVICE_BRIDGE</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-GENERIC:CAPS" title="NM_DBUS_INTERFACE_DEVICE_GENERIC">NM_DBUS_INTERFACE_DEVICE_GENERIC</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-VETH:CAPS" title="NM_DBUS_INTERFACE_DEVICE_VETH">NM_DBUS_INTERFACE_DEVICE_VETH</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-TUN:CAPS" title="NM_DBUS_INTERFACE_DEVICE_TUN">NM_DBUS_INTERFACE_DEVICE_TUN</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-MACVLAN:CAPS" title="NM_DBUS_INTERFACE_DEVICE_MACVLAN">NM_DBUS_INTERFACE_DEVICE_MACVLAN</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-VXLAN:CAPS" title="NM_DBUS_INTERFACE_DEVICE_VXLAN">NM_DBUS_INTERFACE_DEVICE_VXLAN</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-GRE:CAPS" title="NM_DBUS_INTERFACE_DEVICE_GRE">NM_DBUS_INTERFACE_DEVICE_GRE</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-IFACE-SETTINGS:CAPS" title="NM_DBUS_IFACE_SETTINGS">NM_DBUS_IFACE_SETTINGS</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-PATH-SETTINGS:CAPS" title="NM_DBUS_PATH_SETTINGS">NM_DBUS_PATH_SETTINGS</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-IFACE-SETTINGS-CONNECTION:CAPS" title="NM_DBUS_IFACE_SETTINGS_CONNECTION">NM_DBUS_IFACE_SETTINGS_CONNECTION</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-PATH-SETTINGS-CONNECTION:CAPS" title="NM_DBUS_PATH_SETTINGS_CONNECTION">NM_DBUS_PATH_SETTINGS_CONNECTION</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-IFACE-SETTINGS-CONNECTION-SECRETS:CAPS" title="NM_DBUS_IFACE_SETTINGS_CONNECTION_SECRETS">NM_DBUS_IFACE_SETTINGS_CONNECTION_SECRETS</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-AGENT-MANAGER:CAPS" title="NM_DBUS_INTERFACE_AGENT_MANAGER">NM_DBUS_INTERFACE_AGENT_MANAGER</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-PATH-AGENT-MANAGER:CAPS" title="NM_DBUS_PATH_AGENT_MANAGER">NM_DBUS_PATH_AGENT_MANAGER</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-SECRET-AGENT:CAPS" title="NM_DBUS_INTERFACE_SECRET_AGENT">NM_DBUS_INTERFACE_SECRET_AGENT</a>
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-DBUS-PATH-SECRET-AGENT:CAPS" title="NM_DBUS_PATH_SECRET_AGENT">NM_DBUS_PATH_SECRET_AGENT</a>
+enum <a class="link" href="libnm-util-NetworkManager.html#NMState" title="enum NMState">NMState</a>;
+#define <a class="link" href="libnm-util-NetworkManager.html#NM-STATE-CONNECTED:CAPS" title="NM_STATE_CONNECTED">NM_STATE_CONNECTED</a>
+enum <a class="link" href="libnm-util-NetworkManager.html#NMConnectivityState" title="enum NMConnectivityState">NMConnectivityState</a>;
+enum <a class="link" href="libnm-util-NetworkManager.html#NMDeviceType" title="enum NMDeviceType">NMDeviceType</a>;
+enum <a class="link" href="libnm-util-NetworkManager.html#NMDeviceCapabilities" title="enum NMDeviceCapabilities">NMDeviceCapabilities</a>;
+enum <a class="link" href="libnm-util-NetworkManager.html#NMDeviceWifiCapabilities" title="enum NMDeviceWifiCapabilities">NMDeviceWifiCapabilities</a>;
+enum <a class="link" href="libnm-util-NetworkManager.html#NM80211ApFlags" title="enum NM80211ApFlags">NM80211ApFlags</a>;
+enum <a class="link" href="libnm-util-NetworkManager.html#NM80211ApSecurityFlags" title="enum NM80211ApSecurityFlags">NM80211ApSecurityFlags</a>;
+enum <a class="link" href="libnm-util-NetworkManager.html#NM80211Mode" title="enum NM80211Mode">NM80211Mode</a>;
+enum <a class="link" href="libnm-util-NetworkManager.html#NMBluetoothCapabilities" title="enum NMBluetoothCapabilities">NMBluetoothCapabilities</a>;
+enum <a class="link" href="libnm-util-NetworkManager.html#NMDeviceModemCapabilities" title="enum NMDeviceModemCapabilities">NMDeviceModemCapabilities</a>;
+enum <a class="link" href="libnm-util-NetworkManager.html#NMDeviceState" title="enum NMDeviceState">NMDeviceState</a>;
+enum <a class="link" href="libnm-util-NetworkManager.html#NMDeviceStateReason" title="enum NMDeviceStateReason">NMDeviceStateReason</a>;
+enum <a class="link" href="libnm-util-NetworkManager.html#NMActiveConnectionState" title="enum NMActiveConnectionState">NMActiveConnectionState</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="libnm-util-NetworkManager.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="libnm-util-NetworkManager.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NM-DBUS-SERVICE:CAPS"></a><h3>NM_DBUS_SERVICE</h3>
+<pre class="programlisting">#define NM_DBUS_SERVICE "org.freedesktop.NetworkManager"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-PATH:CAPS"></a><h3>NM_DBUS_PATH</h3>
+<pre class="programlisting">#define NM_DBUS_PATH "/org/freedesktop/NetworkManager"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE:CAPS"></a><h3>NM_DBUS_INTERFACE</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE "org.freedesktop.NetworkManager"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE NM_DBUS_INTERFACE ".Device"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE-WIRED:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE_WIRED</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE_WIRED NM_DBUS_INTERFACE_DEVICE ".Wired"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE-ADSL:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE_ADSL</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE_ADSL NM_DBUS_INTERFACE_DEVICE ".Adsl"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE-WIRELESS:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE_WIRELESS</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE_WIRELESS NM_DBUS_INTERFACE_DEVICE ".Wireless"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE-BLUETOOTH:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE_BLUETOOTH</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE_BLUETOOTH NM_DBUS_INTERFACE_DEVICE ".Bluetooth"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE-OLPC-MESH:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE_OLPC_MESH</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE_OLPC_MESH NM_DBUS_INTERFACE_DEVICE ".OlpcMesh"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-PATH-ACCESS-POINT:CAPS"></a><h3>NM_DBUS_PATH_ACCESS_POINT</h3>
+<pre class="programlisting">#define NM_DBUS_PATH_ACCESS_POINT NM_DBUS_PATH "/AccessPoint"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-ACCESS-POINT:CAPS"></a><h3>NM_DBUS_INTERFACE_ACCESS_POINT</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_ACCESS_POINT NM_DBUS_INTERFACE ".AccessPoint"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE-MODEM:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE_MODEM</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE_MODEM NM_DBUS_INTERFACE_DEVICE ".Modem"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE-WIMAX:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE_WIMAX</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE_WIMAX NM_DBUS_INTERFACE_DEVICE ".WiMax"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-WIMAX-NSP:CAPS"></a><h3>NM_DBUS_INTERFACE_WIMAX_NSP</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_WIMAX_NSP NM_DBUS_INTERFACE ".WiMax.Nsp"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-PATH-WIMAX-NSP:CAPS"></a><h3>NM_DBUS_PATH_WIMAX_NSP</h3>
+<pre class="programlisting">#define NM_DBUS_PATH_WIMAX_NSP NM_DBUS_PATH "/Nsp"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-ACTIVE-CONNECTION:CAPS"></a><h3>NM_DBUS_INTERFACE_ACTIVE_CONNECTION</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_ACTIVE_CONNECTION NM_DBUS_INTERFACE ".Connection.Active"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-IP4-CONFIG:CAPS"></a><h3>NM_DBUS_INTERFACE_IP4_CONFIG</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_IP4_CONFIG NM_DBUS_INTERFACE ".IP4Config"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DHCP4-CONFIG:CAPS"></a><h3>NM_DBUS_INTERFACE_DHCP4_CONFIG</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DHCP4_CONFIG NM_DBUS_INTERFACE ".DHCP4Config"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-IP6-CONFIG:CAPS"></a><h3>NM_DBUS_INTERFACE_IP6_CONFIG</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_IP6_CONFIG NM_DBUS_INTERFACE ".IP6Config"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DHCP6-CONFIG:CAPS"></a><h3>NM_DBUS_INTERFACE_DHCP6_CONFIG</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DHCP6_CONFIG NM_DBUS_INTERFACE ".DHCP6Config"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE-INFINIBAND:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE_INFINIBAND</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE_INFINIBAND NM_DBUS_INTERFACE_DEVICE ".Infiniband"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE-BOND:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE_BOND</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE_BOND NM_DBUS_INTERFACE_DEVICE ".Bond"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE-TEAM:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE_TEAM</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE_TEAM NM_DBUS_INTERFACE_DEVICE ".Team"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE-VLAN:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE_VLAN</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE_VLAN NM_DBUS_INTERFACE_DEVICE ".Vlan"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE-BRIDGE:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE_BRIDGE</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE_BRIDGE NM_DBUS_INTERFACE_DEVICE ".Bridge"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE-GENERIC:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE_GENERIC</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE_GENERIC NM_DBUS_INTERFACE_DEVICE ".Generic"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE-VETH:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE_VETH</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE_VETH NM_DBUS_INTERFACE_DEVICE ".Veth"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE-TUN:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE_TUN</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE_TUN NM_DBUS_INTERFACE_DEVICE ".Tun"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE-MACVLAN:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE_MACVLAN</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE_MACVLAN NM_DBUS_INTERFACE_DEVICE ".Macvlan"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE-VXLAN:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE_VXLAN</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE_VXLAN NM_DBUS_INTERFACE_DEVICE ".Vxlan"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE-GRE:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE_GRE</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE_GRE NM_DBUS_INTERFACE_DEVICE ".Gre"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-IFACE-SETTINGS:CAPS"></a><h3>NM_DBUS_IFACE_SETTINGS</h3>
+<pre class="programlisting">#define NM_DBUS_IFACE_SETTINGS "org.freedesktop.NetworkManager.Settings"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-PATH-SETTINGS:CAPS"></a><h3>NM_DBUS_PATH_SETTINGS</h3>
+<pre class="programlisting">#define NM_DBUS_PATH_SETTINGS "/org/freedesktop/NetworkManager/Settings"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-IFACE-SETTINGS-CONNECTION:CAPS"></a><h3>NM_DBUS_IFACE_SETTINGS_CONNECTION</h3>
+<pre class="programlisting">#define NM_DBUS_IFACE_SETTINGS_CONNECTION "org.freedesktop.NetworkManager.Settings.Connection"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-PATH-SETTINGS-CONNECTION:CAPS"></a><h3>NM_DBUS_PATH_SETTINGS_CONNECTION</h3>
+<pre class="programlisting">#define NM_DBUS_PATH_SETTINGS_CONNECTION "/org/freedesktop/NetworkManager/Settings/Connection"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-IFACE-SETTINGS-CONNECTION-SECRETS:CAPS"></a><h3>NM_DBUS_IFACE_SETTINGS_CONNECTION_SECRETS</h3>
+<pre class="programlisting">#define NM_DBUS_IFACE_SETTINGS_CONNECTION_SECRETS "org.freedesktop.NetworkManager.Settings.Connection.Secrets"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-AGENT-MANAGER:CAPS"></a><h3>NM_DBUS_INTERFACE_AGENT_MANAGER</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_AGENT_MANAGER NM_DBUS_INTERFACE ".AgentManager"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-PATH-AGENT-MANAGER:CAPS"></a><h3>NM_DBUS_PATH_AGENT_MANAGER</h3>
+<pre class="programlisting">#define NM_DBUS_PATH_AGENT_MANAGER "/org/freedesktop/NetworkManager/AgentManager"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-SECRET-AGENT:CAPS"></a><h3>NM_DBUS_INTERFACE_SECRET_AGENT</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_SECRET_AGENT NM_DBUS_INTERFACE ".SecretAgent"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-PATH-SECRET-AGENT:CAPS"></a><h3>NM_DBUS_PATH_SECRET_AGENT</h3>
+<pre class="programlisting">#define NM_DBUS_PATH_SECRET_AGENT "/org/freedesktop/NetworkManager/SecretAgent"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMState"></a><h3>enum NMState</h3>
+<pre class="programlisting">typedef enum {
+ 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
+} NMState;
+</pre>
+<p>
+<a class="link" href="libnm-util-NetworkManager.html#NMState" title="enum NMState"><span class="type">NMState</span></a> values indicate the current overall networking state.
+</p>
+<p>
+(Corresponds to the NM_STATE type in nm-manager.xml.)
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-STATE-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_STATE_UNKNOWN</code></span></p></td>
+<td>networking state is unknown
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-STATE-ASLEEP:CAPS"></a><span class="term"><code class="literal">NM_STATE_ASLEEP</code></span></p></td>
+<td>networking is not enabled
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-STATE-DISCONNECTED:CAPS"></a><span class="term"><code class="literal">NM_STATE_DISCONNECTED</code></span></p></td>
+<td>there is no active network connection
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-STATE-DISCONNECTING:CAPS"></a><span class="term"><code class="literal">NM_STATE_DISCONNECTING</code></span></p></td>
+<td>network connections are being cleaned up
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-STATE-CONNECTING:CAPS"></a><span class="term"><code class="literal">NM_STATE_CONNECTING</code></span></p></td>
+<td>a network connection is being started
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-STATE-CONNECTED-LOCAL:CAPS"></a><span class="term"><code class="literal">NM_STATE_CONNECTED_LOCAL</code></span></p></td>
+<td>there is only local IPv4 and/or IPv6 connectivity
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-STATE-CONNECTED-SITE:CAPS"></a><span class="term"><code class="literal">NM_STATE_CONNECTED_SITE</code></span></p></td>
+<td>there is only site-wide IPv4 and/or IPv6 connectivity
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-STATE-CONNECTED-GLOBAL:CAPS"></a><span class="term"><code class="literal">NM_STATE_CONNECTED_GLOBAL</code></span></p></td>
+<td>there is global IPv4 and/or IPv6 Internet connectivity
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-STATE-CONNECTED:CAPS"></a><h3>NM_STATE_CONNECTED</h3>
+<pre class="programlisting">#define NM_STATE_CONNECTED NM_STATE_CONNECTED_GLOBAL
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMConnectivityState"></a><h3>enum NMConnectivityState</h3>
+<pre class="programlisting">typedef enum {
+ NM_CONNECTIVITY_UNKNOWN,
+ NM_CONNECTIVITY_NONE,
+ NM_CONNECTIVITY_PORTAL,
+ NM_CONNECTIVITY_LIMITED,
+ NM_CONNECTIVITY_FULL
+} NMConnectivityState;
+</pre>
+<p>
+(Corresponds to the NM_CONNECTIVITY type in nm-manager.xml.)
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-CONNECTIVITY-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_CONNECTIVITY_UNKNOWN</code></span></p></td>
+<td>Network connectivity is unknown.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-CONNECTIVITY-NONE:CAPS"></a><span class="term"><code class="literal">NM_CONNECTIVITY_NONE</code></span></p></td>
+<td>The host is not connected to any network.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-CONNECTIVITY-PORTAL:CAPS"></a><span class="term"><code class="literal">NM_CONNECTIVITY_PORTAL</code></span></p></td>
+<td>The host is behind a captive portal and
+ cannot reach the full Internet.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-CONNECTIVITY-LIMITED:CAPS"></a><span class="term"><code class="literal">NM_CONNECTIVITY_LIMITED</code></span></p></td>
+<td>The host is connected to a network, but
+ does not appear to be able to reach the full Internet.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-CONNECTIVITY-FULL:CAPS"></a><span class="term"><code class="literal">NM_CONNECTIVITY_FULL</code></span></p></td>
+<td>The host is connected to a network, and
+ appears to be able to reach the full Internet.
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.9.8.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceType"></a><h3>enum NMDeviceType</h3>
+<pre class="programlisting">typedef enum {
+ 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, /* Bluetooth */
+ 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,
+} NMDeviceType;
+</pre>
+<p>
+<a class="link" href="libnm-util-NetworkManager.html#NMDeviceType" title="enum NMDeviceType"><span class="type">NMDeviceType</span></a> values indicate the type of hardware represented by
+an <a href="https://developer.gnome.org/libnm/1.0/NMDevice.html"><span class="type">NMDevice</span></a>.
+</p>
+<p>
+(Corresponds to the NM_DEVICE_TYPE type in nm-device.xml.)
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-DEVICE-TYPE-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_TYPE_UNKNOWN</code></span></p></td>
+<td>unknown device
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-TYPE-ETHERNET:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_TYPE_ETHERNET</code></span></p></td>
+<td>a wired ethernet device
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-TYPE-WIFI:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_TYPE_WIFI</code></span></p></td>
+<td>an 802.11 WiFi device
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-TYPE-UNUSED1:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_TYPE_UNUSED1</code></span></p></td>
+<td>not used
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-TYPE-UNUSED2:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_TYPE_UNUSED2</code></span></p></td>
+<td>not used
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-TYPE-BT:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_TYPE_BT</code></span></p></td>
+<td>a Bluetooth device supporting PAN or DUN access protocols
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-TYPE-OLPC-MESH:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_TYPE_OLPC_MESH</code></span></p></td>
+<td>an OLPC XO mesh networking device
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-TYPE-WIMAX:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_TYPE_WIMAX</code></span></p></td>
+<td>an 802.16e Mobile WiMAX broadband device
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-TYPE-MODEM:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_TYPE_MODEM</code></span></p></td>
+<td>a modem supporting analog telephone, CDMA/EVDO,
+GSM/UMTS, or LTE network access protocols
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-TYPE-INFINIBAND:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_TYPE_INFINIBAND</code></span></p></td>
+<td>an IP-over-InfiniBand device
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-TYPE-BOND:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_TYPE_BOND</code></span></p></td>
+<td>a bond master interface
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-TYPE-VLAN:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_TYPE_VLAN</code></span></p></td>
+<td>an 802.1Q VLAN interface
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-TYPE-ADSL:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_TYPE_ADSL</code></span></p></td>
+<td>ADSL modem
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-TYPE-BRIDGE:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_TYPE_BRIDGE</code></span></p></td>
+<td>a bridge master interface
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-TYPE-GENERIC:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_TYPE_GENERIC</code></span></p></td>
+<td>generic support for unrecognized device types
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-TYPE-TEAM:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_TYPE_TEAM</code></span></p></td>
+<td>a team master interface
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceCapabilities"></a><h3>enum NMDeviceCapabilities</h3>
+<pre class="programlisting">typedef enum {
+ NM_DEVICE_CAP_NONE = 0x00000000,
+ NM_DEVICE_CAP_NM_SUPPORTED = 0x00000001,
+ NM_DEVICE_CAP_CARRIER_DETECT = 0x00000002,
+ NM_DEVICE_CAP_IS_SOFTWARE = 0x00000004,
+} NMDeviceCapabilities;
+</pre>
+<p>
+General device capability flags.
+</p>
+<p>
+(Corresponds to the NM_DEVICE_CAP type in nm-device-wifi.xml.)
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-DEVICE-CAP-NONE:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_CAP_NONE</code></span></p></td>
+<td>device has no special capabilities
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-CAP-NM-SUPPORTED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_CAP_NM_SUPPORTED</code></span></p></td>
+<td>NetworkManager supports this device
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-CAP-CARRIER-DETECT:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_CAP_CARRIER_DETECT</code></span></p></td>
+<td>this device can indicate carrier status
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-CAP-IS-SOFTWARE:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_CAP_IS_SOFTWARE</code></span></p></td>
+<td>this device is a software device
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceWifiCapabilities"></a><h3>enum NMDeviceWifiCapabilities</h3>
+<pre class="programlisting">typedef enum {
+ NM_WIFI_DEVICE_CAP_NONE = 0x00000000,
+ NM_WIFI_DEVICE_CAP_CIPHER_WEP40 = 0x00000001,
+ NM_WIFI_DEVICE_CAP_CIPHER_WEP104 = 0x00000002,
+ NM_WIFI_DEVICE_CAP_CIPHER_TKIP = 0x00000004,
+ NM_WIFI_DEVICE_CAP_CIPHER_CCMP = 0x00000008,
+ NM_WIFI_DEVICE_CAP_WPA = 0x00000010,
+ NM_WIFI_DEVICE_CAP_RSN = 0x00000020,
+ NM_WIFI_DEVICE_CAP_AP = 0x00000040,
+ NM_WIFI_DEVICE_CAP_ADHOC = 0x00000080
+} NMDeviceWifiCapabilities;
+</pre>
+<p>
+802.11 specific device encryption and authentication capabilities.
+</p>
+<p>
+(Corresponds to the NM_802_11_DEVICE_CAP type in nm-device-wifi.xml.)
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-WIFI-DEVICE-CAP-NONE:CAPS"></a><span class="term"><code class="literal">NM_WIFI_DEVICE_CAP_NONE</code></span></p></td>
+<td>device has no encryption/authentication capabilities
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-WIFI-DEVICE-CAP-CIPHER-WEP40:CAPS"></a><span class="term"><code class="literal">NM_WIFI_DEVICE_CAP_CIPHER_WEP40</code></span></p></td>
+<td>device supports 40/64-bit WEP encryption
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-WIFI-DEVICE-CAP-CIPHER-WEP104:CAPS"></a><span class="term"><code class="literal">NM_WIFI_DEVICE_CAP_CIPHER_WEP104</code></span></p></td>
+<td>device supports 104/128-bit WEP encryption
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-WIFI-DEVICE-CAP-CIPHER-TKIP:CAPS"></a><span class="term"><code class="literal">NM_WIFI_DEVICE_CAP_CIPHER_TKIP</code></span></p></td>
+<td>device supports TKIP encryption
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-WIFI-DEVICE-CAP-CIPHER-CCMP:CAPS"></a><span class="term"><code class="literal">NM_WIFI_DEVICE_CAP_CIPHER_CCMP</code></span></p></td>
+<td>device supports AES/CCMP encryption
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-WIFI-DEVICE-CAP-WPA:CAPS"></a><span class="term"><code class="literal">NM_WIFI_DEVICE_CAP_WPA</code></span></p></td>
+<td>device supports WPA1 authentication
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-WIFI-DEVICE-CAP-RSN:CAPS"></a><span class="term"><code class="literal">NM_WIFI_DEVICE_CAP_RSN</code></span></p></td>
+<td>device supports WPA2/RSN authentication
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-WIFI-DEVICE-CAP-AP:CAPS"></a><span class="term"><code class="literal">NM_WIFI_DEVICE_CAP_AP</code></span></p></td>
+<td>device supports Access Point mode
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-WIFI-DEVICE-CAP-ADHOC:CAPS"></a><span class="term"><code class="literal">NM_WIFI_DEVICE_CAP_ADHOC</code></span></p></td>
+<td>device supports Ad-Hoc mode
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM80211ApFlags"></a><h3>enum NM80211ApFlags</h3>
+<pre class="programlisting">typedef enum {
+ NM_802_11_AP_FLAGS_NONE = 0x00000000,
+ NM_802_11_AP_FLAGS_PRIVACY = 0x00000001
+} NM80211ApFlags;
+</pre>
+<p>
+802.11 access point flags.
+</p>
+<p>
+(Corresponds to the NM_802_11_AP_FLAGS type in nm-access-point.xml.)
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-802-11-AP-FLAGS-NONE:CAPS"></a><span class="term"><code class="literal">NM_802_11_AP_FLAGS_NONE</code></span></p></td>
+<td>access point has no special capabilities
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-802-11-AP-FLAGS-PRIVACY:CAPS"></a><span class="term"><code class="literal">NM_802_11_AP_FLAGS_PRIVACY</code></span></p></td>
+<td>access point requires authentication and
+encryption (usually means WEP)
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM80211ApSecurityFlags"></a><h3>enum NM80211ApSecurityFlags</h3>
+<pre class="programlisting">typedef enum {
+ NM_802_11_AP_SEC_NONE = 0x00000000,
+ NM_802_11_AP_SEC_PAIR_WEP40 = 0x00000001,
+ NM_802_11_AP_SEC_PAIR_WEP104 = 0x00000002,
+ NM_802_11_AP_SEC_PAIR_TKIP = 0x00000004,
+ NM_802_11_AP_SEC_PAIR_CCMP = 0x00000008,
+ NM_802_11_AP_SEC_GROUP_WEP40 = 0x00000010,
+ NM_802_11_AP_SEC_GROUP_WEP104 = 0x00000020,
+ NM_802_11_AP_SEC_GROUP_TKIP = 0x00000040,
+ NM_802_11_AP_SEC_GROUP_CCMP = 0x00000080,
+ NM_802_11_AP_SEC_KEY_MGMT_PSK = 0x00000100,
+ NM_802_11_AP_SEC_KEY_MGMT_802_1X = 0x00000200
+} NM80211ApSecurityFlags;
+</pre>
+<p>
+802.11 access point security and authentication flags. These flags describe
+the current security requirements of an access point as determined from the
+access point's beacon.
+</p>
+<p>
+(Corresponds to the NM_802_11_AP_SEC type in nm-access-point.xml.)
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-802-11-AP-SEC-NONE:CAPS"></a><span class="term"><code class="literal">NM_802_11_AP_SEC_NONE</code></span></p></td>
+<td>the access point has no special security requirements
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-802-11-AP-SEC-PAIR-WEP40:CAPS"></a><span class="term"><code class="literal">NM_802_11_AP_SEC_PAIR_WEP40</code></span></p></td>
+<td>40/64-bit WEP is supported for
+pairwise/unicast encryption
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-802-11-AP-SEC-PAIR-WEP104:CAPS"></a><span class="term"><code class="literal">NM_802_11_AP_SEC_PAIR_WEP104</code></span></p></td>
+<td>104/128-bit WEP is supported for
+pairwise/unicast encryption
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-802-11-AP-SEC-PAIR-TKIP:CAPS"></a><span class="term"><code class="literal">NM_802_11_AP_SEC_PAIR_TKIP</code></span></p></td>
+<td>TKIP is supported for pairwise/unicast encryption
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-802-11-AP-SEC-PAIR-CCMP:CAPS"></a><span class="term"><code class="literal">NM_802_11_AP_SEC_PAIR_CCMP</code></span></p></td>
+<td>AES/CCMP is supported for pairwise/unicast encryption
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-802-11-AP-SEC-GROUP-WEP40:CAPS"></a><span class="term"><code class="literal">NM_802_11_AP_SEC_GROUP_WEP40</code></span></p></td>
+<td>40/64-bit WEP is supported for group/broadcast
+encryption
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-802-11-AP-SEC-GROUP-WEP104:CAPS"></a><span class="term"><code class="literal">NM_802_11_AP_SEC_GROUP_WEP104</code></span></p></td>
+<td>104/128-bit WEP is supported for
+group/broadcast encryption
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-802-11-AP-SEC-GROUP-TKIP:CAPS"></a><span class="term"><code class="literal">NM_802_11_AP_SEC_GROUP_TKIP</code></span></p></td>
+<td>TKIP is supported for group/broadcast encryption
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-802-11-AP-SEC-GROUP-CCMP:CAPS"></a><span class="term"><code class="literal">NM_802_11_AP_SEC_GROUP_CCMP</code></span></p></td>
+<td>AES/CCMP is supported for group/broadcast
+encryption
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-802-11-AP-SEC-KEY-MGMT-PSK:CAPS"></a><span class="term"><code class="literal">NM_802_11_AP_SEC_KEY_MGMT_PSK</code></span></p></td>
+<td>WPA/RSN Pre-Shared Key encryption is
+supported
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-802-11-AP-SEC-KEY-MGMT-802-1X:CAPS"></a><span class="term"><code class="literal">NM_802_11_AP_SEC_KEY_MGMT_802_1X</code></span></p></td>
+<td>802.1x authentication and key management
+is supported
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM80211Mode"></a><h3>enum NM80211Mode</h3>
+<pre class="programlisting">typedef enum {
+ NM_802_11_MODE_UNKNOWN = 0,
+ NM_802_11_MODE_ADHOC,
+ NM_802_11_MODE_INFRA,
+ NM_802_11_MODE_AP
+} NM80211Mode;
+</pre>
+<p>
+Indicates the 802.11 mode an access point or device is currently in.
+</p>
+<p>
+(Corresponds to the NM_802_11_MODE type in generic-types.xml.)
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-802-11-MODE-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_802_11_MODE_UNKNOWN</code></span></p></td>
+<td>the device or access point mode is unknown
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-802-11-MODE-ADHOC:CAPS"></a><span class="term"><code class="literal">NM_802_11_MODE_ADHOC</code></span></p></td>
+<td>for both devices and access point objects, indicates
+ the object is part of an Ad-Hoc 802.11 network without a central
+ coordinating access point.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-802-11-MODE-INFRA:CAPS"></a><span class="term"><code class="literal">NM_802_11_MODE_INFRA</code></span></p></td>
+<td>the device or access point is in infrastructure mode.
+ For devices, this indicates the device is an 802.11 client/station. For
+ access point objects, this indicates the object is an access point that
+ provides connectivity to clients.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-802-11-MODE-AP:CAPS"></a><span class="term"><code class="literal">NM_802_11_MODE_AP</code></span></p></td>
+<td>the device is an access point/hotspot. Not valid for
+ access point objects; used only for hotspot mode on the local machine.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMBluetoothCapabilities"></a><h3>enum NMBluetoothCapabilities</h3>
+<pre class="programlisting">typedef enum {
+ NM_BT_CAPABILITY_NONE = 0x00000000,
+ NM_BT_CAPABILITY_DUN = 0x00000001,
+ NM_BT_CAPABILITY_NAP = 0x00000002,
+} NMBluetoothCapabilities;
+</pre>
+<p>
+<a class="link" href="libnm-util-NetworkManager.html#NMBluetoothCapabilities" title="enum NMBluetoothCapabilities"><span class="type">NMBluetoothCapabilities</span></a> values indicate the usable capabilities of a
+Bluetooth device.
+</p>
+<p>
+(Corresponds to the NM_BT_CAPABILITY type in nm-device-bt.xml.)
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-BT-CAPABILITY-NONE:CAPS"></a><span class="term"><code class="literal">NM_BT_CAPABILITY_NONE</code></span></p></td>
+<td>device has no usable capabilities
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-BT-CAPABILITY-DUN:CAPS"></a><span class="term"><code class="literal">NM_BT_CAPABILITY_DUN</code></span></p></td>
+<td>device provides Dial-Up Networking capability
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-BT-CAPABILITY-NAP:CAPS"></a><span class="term"><code class="literal">NM_BT_CAPABILITY_NAP</code></span></p></td>
+<td>device provides Network Access Point capability
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceModemCapabilities"></a><h3>enum NMDeviceModemCapabilities</h3>
+<pre class="programlisting">typedef enum {
+ NM_DEVICE_MODEM_CAPABILITY_NONE = 0x00000000,
+ NM_DEVICE_MODEM_CAPABILITY_POTS = 0x00000001,
+ NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO = 0x00000002,
+ NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS = 0x00000004,
+ NM_DEVICE_MODEM_CAPABILITY_LTE = 0x00000008,
+} NMDeviceModemCapabilities;
+</pre>
+<p>
+<a class="link" href="libnm-util-NetworkManager.html#NMDeviceModemCapabilities" title="enum NMDeviceModemCapabilities"><span class="type">NMDeviceModemCapabilities</span></a> values indicate the generic radio access
+technology families a modem device supports. For more information on the
+specific access technologies the device supports use the ModemManager D-Bus
+API.
+</p>
+<p>
+(Corresponds to the NM_DEVICE_MODEM_CAPABILITY type in nm-device-modem.xml.)
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-DEVICE-MODEM-CAPABILITY-NONE:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_MODEM_CAPABILITY_NONE</code></span></p></td>
+<td>modem has no usable capabilities
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-MODEM-CAPABILITY-POTS:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_MODEM_CAPABILITY_POTS</code></span></p></td>
+<td>modem uses the analog wired telephone
+network and is not a wireless/cellular device
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-MODEM-CAPABILITY-CDMA-EVDO:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO</code></span></p></td>
+<td>modem supports at least one of CDMA
+1xRTT, EVDO revision 0, EVDO revision A, or EVDO revision B
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-MODEM-CAPABILITY-GSM-UMTS:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS</code></span></p></td>
+<td>modem supports at least one of GSM,
+GPRS, EDGE, UMTS, HSDPA, HSUPA, or HSPA+ packet switched data capability
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-MODEM-CAPABILITY-LTE:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_MODEM_CAPABILITY_LTE</code></span></p></td>
+<td>modem has LTE data capability
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceState"></a><h3>enum NMDeviceState</h3>
+<pre class="programlisting">typedef enum {
+ 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
+} NMDeviceState;
+</pre>
+<p>
+(Corresponds to the NM_DEVICE_STATE type in nm-device.xml.)
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_UNKNOWN</code></span></p></td>
+<td>the device's state is unknown
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-UNMANAGED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_UNMANAGED</code></span></p></td>
+<td>the device is recognized, but not managed by
+ NetworkManager
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-UNAVAILABLE:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_UNAVAILABLE</code></span></p></td>
+<td>the device is managed by NetworkManager, but
+ is not available for use. Reasons may include the wireless switched off,
+ missing firmware, no ethernet carrier, missing supplicant or modem manager,
+ etc.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-DISCONNECTED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_DISCONNECTED</code></span></p></td>
+<td>the device can be activated, but is currently
+ idle and not connected to a network.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-PREPARE:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_PREPARE</code></span></p></td>
+<td>the device is preparing the connection to the
+ network. This may include operations like changing the MAC address,
+ setting physical link properties, and anything else required to connect
+ to the requested network.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-CONFIG:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_CONFIG</code></span></p></td>
+<td>the device is connecting to the requested network.
+ This may include operations like associating with the WiFi AP, dialing
+ the modem, connecting to the remote Bluetooth device, etc.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-NEED-AUTH:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_NEED_AUTH</code></span></p></td>
+<td>the device requires more information to continue
+ connecting to the requested network. This includes secrets like WiFi
+ passphrases, login passwords, PIN codes, etc.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-IP-CONFIG:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_IP_CONFIG</code></span></p></td>
+<td>the device is requesting IPv4 and/or IPv6
+ addresses and routing information from the network.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-IP-CHECK:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_IP_CHECK</code></span></p></td>
+<td>the device is checking whether further action is
+ required for the requested network connection. This may include checking
+ whether only local network access is available, whether a captive portal
+ is blocking access to the Internet, etc.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-SECONDARIES:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_SECONDARIES</code></span></p></td>
+<td>the device is waiting for a secondary
+ connection (like a VPN) which must activated before the device can be
+ activated
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-ACTIVATED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_ACTIVATED</code></span></p></td>
+<td>the device has a network connection, either local
+ or global.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-DEACTIVATING:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_DEACTIVATING</code></span></p></td>
+<td>a disconnection from the current network
+ connection was requested, and the device is cleaning up resources used for
+ that connection. The network connection may still be valid.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_FAILED</code></span></p></td>
+<td>the device failed to connect to the requested
+ network and is cleaning up the connection request
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceStateReason"></a><h3>enum NMDeviceStateReason</h3>
+<pre class="programlisting">typedef enum {
+ NM_DEVICE_STATE_REASON_NONE = 0,
+ NM_DEVICE_STATE_REASON_UNKNOWN = 1,
+ NM_DEVICE_STATE_REASON_NOW_MANAGED = 2,
+ NM_DEVICE_STATE_REASON_NOW_UNMANAGED = 3,
+ NM_DEVICE_STATE_REASON_CONFIG_FAILED = 4,
+ NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE = 5,
+ NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED = 6,
+ NM_DEVICE_STATE_REASON_NO_SECRETS = 7,
+ NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT = 8,
+ NM_DEVICE_STATE_REASON_SUPPLICANT_CONFIG_FAILED = 9,
+ NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED = 10,
+ NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT = 11,
+ NM_DEVICE_STATE_REASON_PPP_START_FAILED = 12,
+ NM_DEVICE_STATE_REASON_PPP_DISCONNECT = 13,
+ NM_DEVICE_STATE_REASON_PPP_FAILED = 14,
+ NM_DEVICE_STATE_REASON_DHCP_START_FAILED = 15,
+ NM_DEVICE_STATE_REASON_DHCP_ERROR = 16,
+ NM_DEVICE_STATE_REASON_DHCP_FAILED = 17,
+ NM_DEVICE_STATE_REASON_SHARED_START_FAILED = 18,
+ NM_DEVICE_STATE_REASON_SHARED_FAILED = 19,
+ NM_DEVICE_STATE_REASON_AUTOIP_START_FAILED = 20,
+ NM_DEVICE_STATE_REASON_AUTOIP_ERROR = 21,
+ NM_DEVICE_STATE_REASON_AUTOIP_FAILED = 22,
+ NM_DEVICE_STATE_REASON_MODEM_BUSY = 23,
+ NM_DEVICE_STATE_REASON_MODEM_NO_DIAL_TONE = 24,
+ NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER = 25,
+ NM_DEVICE_STATE_REASON_MODEM_DIAL_TIMEOUT = 26,
+ NM_DEVICE_STATE_REASON_MODEM_DIAL_FAILED = 27,
+ NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED = 28,
+ NM_DEVICE_STATE_REASON_GSM_APN_FAILED = 29,
+ NM_DEVICE_STATE_REASON_GSM_REGISTRATION_NOT_SEARCHING = 30,
+ NM_DEVICE_STATE_REASON_GSM_REGISTRATION_DENIED = 31,
+ NM_DEVICE_STATE_REASON_GSM_REGISTRATION_TIMEOUT = 32,
+ NM_DEVICE_STATE_REASON_GSM_REGISTRATION_FAILED = 33,
+ NM_DEVICE_STATE_REASON_GSM_PIN_CHECK_FAILED = 34,
+ NM_DEVICE_STATE_REASON_FIRMWARE_MISSING = 35,
+ NM_DEVICE_STATE_REASON_REMOVED = 36,
+ NM_DEVICE_STATE_REASON_SLEEPING = 37,
+ NM_DEVICE_STATE_REASON_CONNECTION_REMOVED = 38,
+ NM_DEVICE_STATE_REASON_USER_REQUESTED = 39,
+ NM_DEVICE_STATE_REASON_CARRIER = 40,
+ NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED = 41,
+ NM_DEVICE_STATE_REASON_SUPPLICANT_AVAILABLE = 42,
+ NM_DEVICE_STATE_REASON_MODEM_NOT_FOUND = 43,
+ NM_DEVICE_STATE_REASON_BT_FAILED = 44,
+ NM_DEVICE_STATE_REASON_GSM_SIM_NOT_INSERTED = 45,
+ NM_DEVICE_STATE_REASON_GSM_SIM_PIN_REQUIRED = 46,
+ NM_DEVICE_STATE_REASON_GSM_SIM_PUK_REQUIRED = 47,
+ NM_DEVICE_STATE_REASON_GSM_SIM_WRONG = 48,
+ NM_DEVICE_STATE_REASON_INFINIBAND_MODE = 49,
+ NM_DEVICE_STATE_REASON_DEPENDENCY_FAILED = 50,
+ NM_DEVICE_STATE_REASON_BR2684_FAILED = 51,
+ NM_DEVICE_STATE_REASON_MODEM_MANAGER_UNAVAILABLE = 52,
+ NM_DEVICE_STATE_REASON_SSID_NOT_FOUND = 53,
+ NM_DEVICE_STATE_REASON_SECONDARY_CONNECTION_FAILED = 54,
+ NM_DEVICE_STATE_REASON_DCB_FCOE_FAILED = 55,
+ NM_DEVICE_STATE_REASON_TEAMD_CONTROL_FAILED = 56,
+ NM_DEVICE_STATE_REASON_MODEM_FAILED = 57,
+ NM_DEVICE_STATE_REASON_MODEM_AVAILABLE = 58,
+ NM_DEVICE_STATE_REASON_SIM_PIN_INCORRECT = 59,
+
+ NM_DEVICE_STATE_REASON_LAST = 0xFFFF
+} NMDeviceStateReason;
+</pre>
+<p>
+Device state change reason codes
+</p>
+<p>
+(Corresponds to the NM_DEVICE_STATE_REASON type in nm-device.xml.)
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-NONE:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_NONE</code></span></p></td>
+<td>No reason given
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_UNKNOWN</code></span></p></td>
+<td>Unknown error
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-NOW-MANAGED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_NOW_MANAGED</code></span></p></td>
+<td>Device is now managed
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-NOW-UNMANAGED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_NOW_UNMANAGED</code></span></p></td>
+<td>Device is now unmanaged
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-CONFIG-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_CONFIG_FAILED</code></span></p></td>
+<td>The device could not be readied for configuration
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-IP-CONFIG-UNAVAILABLE:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE</code></span></p></td>
+<td>IP configuration could not be reserved (no available address, timeout, etc)
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-IP-CONFIG-EXPIRED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED</code></span></p></td>
+<td>The IP config is no longer valid
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-NO-SECRETS:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_NO_SECRETS</code></span></p></td>
+<td>Secrets were required, but not provided
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-SUPPLICANT-DISCONNECT:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT</code></span></p></td>
+<td>802.1x supplicant disconnected
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-SUPPLICANT-CONFIG-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_SUPPLICANT_CONFIG_FAILED</code></span></p></td>
+<td>802.1x supplicant configuration failed
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-SUPPLICANT-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED</code></span></p></td>
+<td>802.1x supplicant failed
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-SUPPLICANT-TIMEOUT:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT</code></span></p></td>
+<td>802.1x supplicant took too long to authenticate
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-PPP-START-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_PPP_START_FAILED</code></span></p></td>
+<td>PPP service failed to start
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-PPP-DISCONNECT:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_PPP_DISCONNECT</code></span></p></td>
+<td>PPP service disconnected
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-PPP-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_PPP_FAILED</code></span></p></td>
+<td>PPP failed
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-DHCP-START-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_DHCP_START_FAILED</code></span></p></td>
+<td>DHCP client failed to start
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-DHCP-ERROR:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_DHCP_ERROR</code></span></p></td>
+<td>DHCP client error
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-DHCP-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_DHCP_FAILED</code></span></p></td>
+<td>DHCP client failed
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-SHARED-START-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_SHARED_START_FAILED</code></span></p></td>
+<td>Shared connection service failed to start
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-SHARED-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_SHARED_FAILED</code></span></p></td>
+<td>Shared connection service failed
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-AUTOIP-START-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_AUTOIP_START_FAILED</code></span></p></td>
+<td>AutoIP service failed to start
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-AUTOIP-ERROR:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_AUTOIP_ERROR</code></span></p></td>
+<td>AutoIP service error
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-AUTOIP-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_AUTOIP_FAILED</code></span></p></td>
+<td>AutoIP service failed
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-MODEM-BUSY:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_MODEM_BUSY</code></span></p></td>
+<td>The line is busy
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-MODEM-NO-DIAL-TONE:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_MODEM_NO_DIAL_TONE</code></span></p></td>
+<td>No dial tone
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-MODEM-NO-CARRIER:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER</code></span></p></td>
+<td>No carrier could be established
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-MODEM-DIAL-TIMEOUT:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_MODEM_DIAL_TIMEOUT</code></span></p></td>
+<td>The dialing request timed out
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-MODEM-DIAL-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_MODEM_DIAL_FAILED</code></span></p></td>
+<td>The dialing attempt failed
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-MODEM-INIT-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED</code></span></p></td>
+<td>Modem initialization failed
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-GSM-APN-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_GSM_APN_FAILED</code></span></p></td>
+<td>Failed to select the specified APN
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-GSM-REGISTRATION-NOT-SEARCHING:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_GSM_REGISTRATION_NOT_SEARCHING</code></span></p></td>
+<td>Not searching for networks
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-GSM-REGISTRATION-DENIED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_GSM_REGISTRATION_DENIED</code></span></p></td>
+<td>Network registration denied
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-GSM-REGISTRATION-TIMEOUT:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_GSM_REGISTRATION_TIMEOUT</code></span></p></td>
+<td>Network registration timed out
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-GSM-REGISTRATION-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_GSM_REGISTRATION_FAILED</code></span></p></td>
+<td>Failed to register with the requested network
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-GSM-PIN-CHECK-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_GSM_PIN_CHECK_FAILED</code></span></p></td>
+<td>PIN check failed
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-FIRMWARE-MISSING:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_FIRMWARE_MISSING</code></span></p></td>
+<td>Necessary firmware for the device may be missing
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-REMOVED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_REMOVED</code></span></p></td>
+<td>The device was removed
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-SLEEPING:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_SLEEPING</code></span></p></td>
+<td>NetworkManager went to sleep
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-CONNECTION-REMOVED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_CONNECTION_REMOVED</code></span></p></td>
+<td>The device's active connection disappeared
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-USER-REQUESTED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_USER_REQUESTED</code></span></p></td>
+<td>Device disconnected by user or client
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-CARRIER:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_CARRIER</code></span></p></td>
+<td>Carrier/link changed
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-CONNECTION-ASSUMED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED</code></span></p></td>
+<td>The device's existing connection was assumed
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-SUPPLICANT-AVAILABLE:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_SUPPLICANT_AVAILABLE</code></span></p></td>
+<td>The supplicant is now available
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-MODEM-NOT-FOUND:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_MODEM_NOT_FOUND</code></span></p></td>
+<td>The modem could not be found
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-BT-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_BT_FAILED</code></span></p></td>
+<td>The Bluetooth connection failed or timed out
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-GSM-SIM-NOT-INSERTED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_GSM_SIM_NOT_INSERTED</code></span></p></td>
+<td>GSM Modem's SIM Card not inserted
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-GSM-SIM-PIN-REQUIRED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_GSM_SIM_PIN_REQUIRED</code></span></p></td>
+<td>GSM Modem's SIM Pin required
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-GSM-SIM-PUK-REQUIRED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_GSM_SIM_PUK_REQUIRED</code></span></p></td>
+<td>GSM Modem's SIM Puk required
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-GSM-SIM-WRONG:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_GSM_SIM_WRONG</code></span></p></td>
+<td>GSM Modem's SIM wrong
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-INFINIBAND-MODE:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_INFINIBAND_MODE</code></span></p></td>
+<td>InfiniBand device does not support connected mode
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-DEPENDENCY-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_DEPENDENCY_FAILED</code></span></p></td>
+<td>A dependency of the connection failed
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-BR2684-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_BR2684_FAILED</code></span></p></td>
+<td>Problem with the RFC 2684 Ethernet over ADSL bridge
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-MODEM-MANAGER-UNAVAILABLE:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_MODEM_MANAGER_UNAVAILABLE</code></span></p></td>
+<td>ModemManager not running
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-SSID-NOT-FOUND:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_SSID_NOT_FOUND</code></span></p></td>
+<td>The WiFi network could not be found
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-SECONDARY-CONNECTION-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_SECONDARY_CONNECTION_FAILED</code></span></p></td>
+<td>A secondary connection of the base connection failed
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-DCB-FCOE-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_DCB_FCOE_FAILED</code></span></p></td>
+<td>DCB or FCoE setup failed
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-TEAMD-CONTROL-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_TEAMD_CONTROL_FAILED</code></span></p></td>
+<td>teamd control failed
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-MODEM-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_MODEM_FAILED</code></span></p></td>
+<td>Modem failed or no longer available
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-MODEM-AVAILABLE:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_MODEM_AVAILABLE</code></span></p></td>
+<td>Modem now ready and available
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-SIM-PIN-INCORRECT:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_SIM_PIN_INCORRECT</code></span></p></td>
+<td>SIM PIN was incorrect
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-LAST:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_LAST</code></span></p></td>
+<td>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMActiveConnectionState"></a><h3>enum NMActiveConnectionState</h3>
+<pre class="programlisting">typedef enum {
+ NM_ACTIVE_CONNECTION_STATE_UNKNOWN = 0,
+ NM_ACTIVE_CONNECTION_STATE_ACTIVATING,
+ NM_ACTIVE_CONNECTION_STATE_ACTIVATED,
+ NM_ACTIVE_CONNECTION_STATE_DEACTIVATING,
+ NM_ACTIVE_CONNECTION_STATE_DEACTIVATED
+} NMActiveConnectionState;
+</pre>
+<p>
+<a class="link" href="libnm-util-NetworkManager.html#NMActiveConnectionState" title="enum NMActiveConnectionState"><span class="type">NMActiveConnectionState</span></a> values indicate the state of a connection to a
+specific network while it is starting, connected, or disconnecting from that
+network.
+</p>
+<p>
+(Corresponds to the NM_ACTIVE_CONNECTION_STATE type in nm-active-connection.xml.)
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-ACTIVE-CONNECTION-STATE-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_ACTIVE_CONNECTION_STATE_UNKNOWN</code></span></p></td>
+<td>the state of the connection is unknown
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-ACTIVE-CONNECTION-STATE-ACTIVATING:CAPS"></a><span class="term"><code class="literal">NM_ACTIVE_CONNECTION_STATE_ACTIVATING</code></span></p></td>
+<td>a network connection is being prepared
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-ACTIVE-CONNECTION-STATE-ACTIVATED:CAPS"></a><span class="term"><code class="literal">NM_ACTIVE_CONNECTION_STATE_ACTIVATED</code></span></p></td>
+<td>there is a connection to the network
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-ACTIVE-CONNECTION-STATE-DEACTIVATING:CAPS"></a><span class="term"><code class="literal">NM_ACTIVE_CONNECTION_STATE_DEACTIVATING</code></span></p></td>
+<td>the network connection is being
+ torn down and cleaned up
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-ACTIVE-CONNECTION-STATE-DEACTIVATED:CAPS"></a><span class="term"><code class="literal">NM_ACTIVE_CONNECTION_STATE_DEACTIVATED</code></span></p></td>
+<td>the network connection is disconnected
+ and will be removed
+</td>
+</tr>
+</tbody>
+</table></div>
+</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/libnm-util-NetworkManagerVPN.html b/docs/libnm-util/html/libnm-util-NetworkManagerVPN.html
new file mode 100644
index 000000000..217138c09
--- /dev/null
+++ b/docs/libnm-util/html/libnm-util-NetworkManagerVPN.html
@@ -0,0 +1,861 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NetworkManagerVPN</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="libnm-util-NetworkManager.html" title="NetworkManager">
+<link rel="next" href="object-tree.html" title="Object Hierarchy">
+<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-util-NetworkManager.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-NetworkManagerVPN.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#libnm-util-NetworkManagerVPN.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="libnm-util-NetworkManagerVPN"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="libnm-util-NetworkManagerVPN.top_of_page"></a>NetworkManagerVPN</span></h2>
+<p>NetworkManagerVPN</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="libnm-util-NetworkManagerVPN.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-PATH-VPN:CAPS" title="NM_DBUS_PATH_VPN">NM_DBUS_PATH_VPN</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-INTERFACE-VPN:CAPS" title="NM_DBUS_INTERFACE_VPN">NM_DBUS_INTERFACE_VPN</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-PATH-VPN-CONNECTION:CAPS" title="NM_DBUS_PATH_VPN_CONNECTION">NM_DBUS_PATH_VPN_CONNECTION</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-INTERFACE-VPN-CONNECTION:CAPS" title="NM_DBUS_INTERFACE_VPN_CONNECTION">NM_DBUS_INTERFACE_VPN_CONNECTION</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-DBUS-PLUGIN-PATH:CAPS" title="NM_VPN_DBUS_PLUGIN_PATH">NM_VPN_DBUS_PLUGIN_PATH</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-DBUS-PLUGIN-INTERFACE:CAPS" title="NM_VPN_DBUS_PLUGIN_INTERFACE">NM_VPN_DBUS_PLUGIN_INTERFACE</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-NO-ACTIVE-VPN-CONNECTION:CAPS" title="NM_DBUS_NO_ACTIVE_VPN_CONNECTION">NM_DBUS_NO_ACTIVE_VPN_CONNECTION</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-NO-VPN-CONNECTIONS:CAPS" title="NM_DBUS_NO_VPN_CONNECTIONS">NM_DBUS_NO_VPN_CONNECTIONS</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-INVALID-VPN-CONNECTION:CAPS" title="NM_DBUS_INVALID_VPN_CONNECTION">NM_DBUS_INVALID_VPN_CONNECTION</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-ERROR-PREFIX:CAPS" title="NM_DBUS_VPN_ERROR_PREFIX">NM_DBUS_VPN_ERROR_PREFIX</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-STARTING-IN-PROGRESS:CAPS" title="NM_DBUS_VPN_STARTING_IN_PROGRESS">NM_DBUS_VPN_STARTING_IN_PROGRESS</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-ALREADY-STARTED:CAPS" title="NM_DBUS_VPN_ALREADY_STARTED">NM_DBUS_VPN_ALREADY_STARTED</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-STOPPING-IN-PROGRESS:CAPS" title="NM_DBUS_VPN_STOPPING_IN_PROGRESS">NM_DBUS_VPN_STOPPING_IN_PROGRESS</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-ALREADY-STOPPED:CAPS" title="NM_DBUS_VPN_ALREADY_STOPPED">NM_DBUS_VPN_ALREADY_STOPPED</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-WRONG-STATE:CAPS" title="NM_DBUS_VPN_WRONG_STATE">NM_DBUS_VPN_WRONG_STATE</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-BAD-ARGUMENTS:CAPS" title="NM_DBUS_VPN_BAD_ARGUMENTS">NM_DBUS_VPN_BAD_ARGUMENTS</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-INTERACTIVE-NOT-SUPPORTED:CAPS" title="NM_DBUS_VPN_INTERACTIVE_NOT_SUPPORTED">NM_DBUS_VPN_INTERACTIVE_NOT_SUPPORTED</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-LOGIN-BANNER:CAPS" title="NM_DBUS_VPN_SIGNAL_LOGIN_BANNER">NM_DBUS_VPN_SIGNAL_LOGIN_BANNER</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-LOGIN-FAILED:CAPS" title="NM_DBUS_VPN_SIGNAL_LOGIN_FAILED">NM_DBUS_VPN_SIGNAL_LOGIN_FAILED</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-LAUNCH-FAILED:CAPS" title="NM_DBUS_VPN_SIGNAL_LAUNCH_FAILED">NM_DBUS_VPN_SIGNAL_LAUNCH_FAILED</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-CONNECT-FAILED:CAPS" title="NM_DBUS_VPN_SIGNAL_CONNECT_FAILED">NM_DBUS_VPN_SIGNAL_CONNECT_FAILED</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-VPN-CONFIG-BAD:CAPS" title="NM_DBUS_VPN_SIGNAL_VPN_CONFIG_BAD">NM_DBUS_VPN_SIGNAL_VPN_CONFIG_BAD</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-IP-CONFIG-BAD:CAPS" title="NM_DBUS_VPN_SIGNAL_IP_CONFIG_BAD">NM_DBUS_VPN_SIGNAL_IP_CONFIG_BAD</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-STATE-CHANGE:CAPS" title="NM_DBUS_VPN_SIGNAL_STATE_CHANGE">NM_DBUS_VPN_SIGNAL_STATE_CHANGE</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-IP4-CONFIG:CAPS" title="NM_DBUS_VPN_SIGNAL_IP4_CONFIG">NM_DBUS_VPN_SIGNAL_IP4_CONFIG</a>
+enum <a class="link" href="libnm-util-NetworkManagerVPN.html#NMVPNServiceState" title="enum NMVPNServiceState">NMVPNServiceState</a>;
+enum <a class="link" href="libnm-util-NetworkManagerVPN.html#NMVPNConnectionState" title="enum NMVPNConnectionState">NMVPNConnectionState</a>;
+enum <a class="link" href="libnm-util-NetworkManagerVPN.html#NMVPNConnectionStateReason" title="enum NMVPNConnectionStateReason">NMVPNConnectionStateReason</a>;
+enum <a class="link" href="libnm-util-NetworkManagerVPN.html#NMVPNPluginFailure" title="enum NMVPNPluginFailure">NMVPNPluginFailure</a>;
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-CONFIG-TUNDEV:CAPS" title="NM_VPN_PLUGIN_CONFIG_TUNDEV">NM_VPN_PLUGIN_CONFIG_TUNDEV</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-CONFIG-BANNER:CAPS" title="NM_VPN_PLUGIN_CONFIG_BANNER">NM_VPN_PLUGIN_CONFIG_BANNER</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-CONFIG-EXT-GATEWAY:CAPS" title="NM_VPN_PLUGIN_CONFIG_EXT_GATEWAY">NM_VPN_PLUGIN_CONFIG_EXT_GATEWAY</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-CONFIG-MTU:CAPS" title="NM_VPN_PLUGIN_CONFIG_MTU">NM_VPN_PLUGIN_CONFIG_MTU</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-CONFIG-HAS-IP4:CAPS" title="NM_VPN_PLUGIN_CONFIG_HAS_IP4">NM_VPN_PLUGIN_CONFIG_HAS_IP4</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-CONFIG-HAS-IP6:CAPS" title="NM_VPN_PLUGIN_CONFIG_HAS_IP6">NM_VPN_PLUGIN_CONFIG_HAS_IP6</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-CAN-PERSIST:CAPS" title="NM_VPN_PLUGIN_CAN_PERSIST">NM_VPN_PLUGIN_CAN_PERSIST</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-INT-GATEWAY:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_INT_GATEWAY">NM_VPN_PLUGIN_IP4_CONFIG_INT_GATEWAY</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-ADDRESS:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_ADDRESS">NM_VPN_PLUGIN_IP4_CONFIG_ADDRESS</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-PTP:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_PTP">NM_VPN_PLUGIN_IP4_CONFIG_PTP</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-PREFIX:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_PREFIX">NM_VPN_PLUGIN_IP4_CONFIG_PREFIX</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-DNS:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_DNS">NM_VPN_PLUGIN_IP4_CONFIG_DNS</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-NBNS:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_NBNS">NM_VPN_PLUGIN_IP4_CONFIG_NBNS</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-MSS:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_MSS">NM_VPN_PLUGIN_IP4_CONFIG_MSS</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-DOMAIN:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_DOMAIN">NM_VPN_PLUGIN_IP4_CONFIG_DOMAIN</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-DOMAINS:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_DOMAINS">NM_VPN_PLUGIN_IP4_CONFIG_DOMAINS</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-ROUTES:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_ROUTES">NM_VPN_PLUGIN_IP4_CONFIG_ROUTES</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-NEVER-DEFAULT:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_NEVER_DEFAULT">NM_VPN_PLUGIN_IP4_CONFIG_NEVER_DEFAULT</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-GATEWAY:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_GATEWAY">NM_VPN_PLUGIN_IP4_CONFIG_GATEWAY</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-BANNER:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_BANNER">NM_VPN_PLUGIN_IP4_CONFIG_BANNER</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-EXT-GATEWAY:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY">NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-MTU:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_MTU">NM_VPN_PLUGIN_IP4_CONFIG_MTU</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-TUNDEV:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_TUNDEV">NM_VPN_PLUGIN_IP4_CONFIG_TUNDEV</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-INT-GATEWAY:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_INT_GATEWAY">NM_VPN_PLUGIN_IP6_CONFIG_INT_GATEWAY</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-ADDRESS:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_ADDRESS">NM_VPN_PLUGIN_IP6_CONFIG_ADDRESS</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-PTP:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_PTP">NM_VPN_PLUGIN_IP6_CONFIG_PTP</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-PREFIX:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_PREFIX">NM_VPN_PLUGIN_IP6_CONFIG_PREFIX</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-DNS:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_DNS">NM_VPN_PLUGIN_IP6_CONFIG_DNS</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-MSS:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_MSS">NM_VPN_PLUGIN_IP6_CONFIG_MSS</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-DOMAIN:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_DOMAIN">NM_VPN_PLUGIN_IP6_CONFIG_DOMAIN</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-DOMAINS:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_DOMAINS">NM_VPN_PLUGIN_IP6_CONFIG_DOMAINS</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-ROUTES:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_ROUTES">NM_VPN_PLUGIN_IP6_CONFIG_ROUTES</a>
+#define <a class="link" href="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-NEVER-DEFAULT:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_NEVER_DEFAULT">NM_VPN_PLUGIN_IP6_CONFIG_NEVER_DEFAULT</a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="libnm-util-NetworkManagerVPN.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="libnm-util-NetworkManagerVPN.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NM-DBUS-PATH-VPN:CAPS"></a><h3>NM_DBUS_PATH_VPN</h3>
+<pre class="programlisting">#define NM_DBUS_PATH_VPN "/org/freedesktop/NetworkManager/VPN/Manager"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-VPN:CAPS"></a><h3>NM_DBUS_INTERFACE_VPN</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_VPN "org.freedesktop.NetworkManager.VPN.Manager"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-PATH-VPN-CONNECTION:CAPS"></a><h3>NM_DBUS_PATH_VPN_CONNECTION</h3>
+<pre class="programlisting">#define NM_DBUS_PATH_VPN_CONNECTION "/org/freedesktop/NetworkManager/VPN/Connection"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-VPN-CONNECTION:CAPS"></a><h3>NM_DBUS_INTERFACE_VPN_CONNECTION</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_VPN_CONNECTION "org.freedesktop.NetworkManager.VPN.Connection"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-DBUS-PLUGIN-PATH:CAPS"></a><h3>NM_VPN_DBUS_PLUGIN_PATH</h3>
+<pre class="programlisting">#define NM_VPN_DBUS_PLUGIN_PATH "/org/freedesktop/NetworkManager/VPN/Plugin"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-DBUS-PLUGIN-INTERFACE:CAPS"></a><h3>NM_VPN_DBUS_PLUGIN_INTERFACE</h3>
+<pre class="programlisting">#define NM_VPN_DBUS_PLUGIN_INTERFACE "org.freedesktop.NetworkManager.VPN.Plugin"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-NO-ACTIVE-VPN-CONNECTION:CAPS"></a><h3>NM_DBUS_NO_ACTIVE_VPN_CONNECTION</h3>
+<pre class="programlisting">#define NM_DBUS_NO_ACTIVE_VPN_CONNECTION "org.freedesktop.NetworkManager.VPNConnections.NoActiveVPNConnection"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-NO-VPN-CONNECTIONS:CAPS"></a><h3>NM_DBUS_NO_VPN_CONNECTIONS</h3>
+<pre class="programlisting">#define NM_DBUS_NO_VPN_CONNECTIONS "org.freedesktop.NetworkManager.VPNConnections.NoVPNConnections"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INVALID-VPN-CONNECTION:CAPS"></a><h3>NM_DBUS_INVALID_VPN_CONNECTION</h3>
+<pre class="programlisting">#define NM_DBUS_INVALID_VPN_CONNECTION "org.freedesktop.NetworkManager.VPNConnections.InvalidVPNConnection"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-VPN-ERROR-PREFIX:CAPS"></a><h3>NM_DBUS_VPN_ERROR_PREFIX</h3>
+<pre class="programlisting">#define NM_DBUS_VPN_ERROR_PREFIX "org.freedesktop.NetworkManager.VPN.Error"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-VPN-STARTING-IN-PROGRESS:CAPS"></a><h3>NM_DBUS_VPN_STARTING_IN_PROGRESS</h3>
+<pre class="programlisting">#define NM_DBUS_VPN_STARTING_IN_PROGRESS "StartingInProgress"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-VPN-ALREADY-STARTED:CAPS"></a><h3>NM_DBUS_VPN_ALREADY_STARTED</h3>
+<pre class="programlisting">#define NM_DBUS_VPN_ALREADY_STARTED "AlreadyStarted"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-VPN-STOPPING-IN-PROGRESS:CAPS"></a><h3>NM_DBUS_VPN_STOPPING_IN_PROGRESS</h3>
+<pre class="programlisting">#define NM_DBUS_VPN_STOPPING_IN_PROGRESS "StoppingInProgress"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-VPN-ALREADY-STOPPED:CAPS"></a><h3>NM_DBUS_VPN_ALREADY_STOPPED</h3>
+<pre class="programlisting">#define NM_DBUS_VPN_ALREADY_STOPPED "AlreadyStopped"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-VPN-WRONG-STATE:CAPS"></a><h3>NM_DBUS_VPN_WRONG_STATE</h3>
+<pre class="programlisting">#define NM_DBUS_VPN_WRONG_STATE "WrongState"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-VPN-BAD-ARGUMENTS:CAPS"></a><h3>NM_DBUS_VPN_BAD_ARGUMENTS</h3>
+<pre class="programlisting">#define NM_DBUS_VPN_BAD_ARGUMENTS "BadArguments"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-VPN-INTERACTIVE-NOT-SUPPORTED:CAPS"></a><h3>NM_DBUS_VPN_INTERACTIVE_NOT_SUPPORTED</h3>
+<pre class="programlisting">#define NM_DBUS_VPN_INTERACTIVE_NOT_SUPPORTED "InteractiveNotSupported"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-VPN-SIGNAL-LOGIN-BANNER:CAPS"></a><h3>NM_DBUS_VPN_SIGNAL_LOGIN_BANNER</h3>
+<pre class="programlisting">#define NM_DBUS_VPN_SIGNAL_LOGIN_BANNER "LoginBanner"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-VPN-SIGNAL-LOGIN-FAILED:CAPS"></a><h3>NM_DBUS_VPN_SIGNAL_LOGIN_FAILED</h3>
+<pre class="programlisting">#define NM_DBUS_VPN_SIGNAL_LOGIN_FAILED "LoginFailed"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-VPN-SIGNAL-LAUNCH-FAILED:CAPS"></a><h3>NM_DBUS_VPN_SIGNAL_LAUNCH_FAILED</h3>
+<pre class="programlisting">#define NM_DBUS_VPN_SIGNAL_LAUNCH_FAILED "LaunchFailed"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-VPN-SIGNAL-CONNECT-FAILED:CAPS"></a><h3>NM_DBUS_VPN_SIGNAL_CONNECT_FAILED</h3>
+<pre class="programlisting">#define NM_DBUS_VPN_SIGNAL_CONNECT_FAILED "ConnectFailed"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-VPN-SIGNAL-VPN-CONFIG-BAD:CAPS"></a><h3>NM_DBUS_VPN_SIGNAL_VPN_CONFIG_BAD</h3>
+<pre class="programlisting">#define NM_DBUS_VPN_SIGNAL_VPN_CONFIG_BAD "VPNConfigBad"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-VPN-SIGNAL-IP-CONFIG-BAD:CAPS"></a><h3>NM_DBUS_VPN_SIGNAL_IP_CONFIG_BAD</h3>
+<pre class="programlisting">#define NM_DBUS_VPN_SIGNAL_IP_CONFIG_BAD "IPConfigBad"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-VPN-SIGNAL-STATE-CHANGE:CAPS"></a><h3>NM_DBUS_VPN_SIGNAL_STATE_CHANGE</h3>
+<pre class="programlisting">#define NM_DBUS_VPN_SIGNAL_STATE_CHANGE "StateChange"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-VPN-SIGNAL-IP4-CONFIG:CAPS"></a><h3>NM_DBUS_VPN_SIGNAL_IP4_CONFIG</h3>
+<pre class="programlisting">#define NM_DBUS_VPN_SIGNAL_IP4_CONFIG "IP4Config"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMVPNServiceState"></a><h3>enum NMVPNServiceState</h3>
+<pre class="programlisting">typedef enum {
+ NM_VPN_SERVICE_STATE_UNKNOWN = 0,
+ NM_VPN_SERVICE_STATE_INIT,
+ NM_VPN_SERVICE_STATE_SHUTDOWN,
+ NM_VPN_SERVICE_STATE_STARTING,
+ NM_VPN_SERVICE_STATE_STARTED,
+ NM_VPN_SERVICE_STATE_STOPPING,
+ NM_VPN_SERVICE_STATE_STOPPED
+} NMVPNServiceState;
+</pre>
+<p>
+VPN daemon states
+</p>
+<p>
+(Corresponds to the NM_VPN_SERVICE_STATE type in nm-vpn-connection.xml.)
+</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-SERVICE-STATE-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_VPN_SERVICE_STATE_UNKNOWN</code></span></p></td>
+<td>The state of the VPN plugin is unknown.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-SERVICE-STATE-INIT:CAPS"></a><span class="term"><code class="literal">NM_VPN_SERVICE_STATE_INIT</code></span></p></td>
+<td>The VPN plugin is initialized.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-SERVICE-STATE-SHUTDOWN:CAPS"></a><span class="term"><code class="literal">NM_VPN_SERVICE_STATE_SHUTDOWN</code></span></p></td>
+<td>Not used.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-SERVICE-STATE-STARTING:CAPS"></a><span class="term"><code class="literal">NM_VPN_SERVICE_STATE_STARTING</code></span></p></td>
+<td>The plugin is attempting to connect to a VPN server.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-SERVICE-STATE-STARTED:CAPS"></a><span class="term"><code class="literal">NM_VPN_SERVICE_STATE_STARTED</code></span></p></td>
+<td>The plugin has connected to a VPN server.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-SERVICE-STATE-STOPPING:CAPS"></a><span class="term"><code class="literal">NM_VPN_SERVICE_STATE_STOPPING</code></span></p></td>
+<td>The plugin is disconnecting from the VPN server.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-SERVICE-STATE-STOPPED:CAPS"></a><span class="term"><code class="literal">NM_VPN_SERVICE_STATE_STOPPED</code></span></p></td>
+<td>The plugin has disconnected from the VPN server.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMVPNConnectionState"></a><h3>enum NMVPNConnectionState</h3>
+<pre class="programlisting">typedef enum {
+ NM_VPN_CONNECTION_STATE_UNKNOWN = 0,
+ NM_VPN_CONNECTION_STATE_PREPARE,
+ NM_VPN_CONNECTION_STATE_NEED_AUTH,
+ NM_VPN_CONNECTION_STATE_CONNECT,
+ NM_VPN_CONNECTION_STATE_IP_CONFIG_GET,
+ NM_VPN_CONNECTION_STATE_ACTIVATED,
+ NM_VPN_CONNECTION_STATE_FAILED,
+ NM_VPN_CONNECTION_STATE_DISCONNECTED
+} NMVPNConnectionState;
+</pre>
+<p>
+VPN connection states
+</p>
+<p>
+(Corresponds to the NM_VPN_CONNECTION_STATE type in nm-vpn-connection.xml.)
+</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-CONNECTION-STATE-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_UNKNOWN</code></span></p></td>
+<td>The state of the VPN connection is
+ unknown.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-CONNECTION-STATE-PREPARE:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_PREPARE</code></span></p></td>
+<td>The VPN connection is preparing to
+ connect.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-CONNECTION-STATE-NEED-AUTH:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_NEED_AUTH</code></span></p></td>
+<td>The VPN connection needs authorization
+ credentials.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-CONNECTION-STATE-CONNECT:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_CONNECT</code></span></p></td>
+<td>The VPN connection is being established.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-CONNECTION-STATE-IP-CONFIG-GET:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_IP_CONFIG_GET</code></span></p></td>
+<td>The VPN connection is getting an IP
+ address.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-CONNECTION-STATE-ACTIVATED:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_ACTIVATED</code></span></p></td>
+<td>The VPN connection is active.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-CONNECTION-STATE-FAILED:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_FAILED</code></span></p></td>
+<td>The VPN connection failed.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-CONNECTION-STATE-DISCONNECTED:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_DISCONNECTED</code></span></p></td>
+<td>The VPN connection is disconnected.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMVPNConnectionStateReason"></a><h3>enum NMVPNConnectionStateReason</h3>
+<pre class="programlisting">typedef enum {
+ NM_VPN_CONNECTION_STATE_REASON_UNKNOWN = 0,
+ NM_VPN_CONNECTION_STATE_REASON_NONE,
+ NM_VPN_CONNECTION_STATE_REASON_USER_DISCONNECTED,
+ NM_VPN_CONNECTION_STATE_REASON_DEVICE_DISCONNECTED,
+ NM_VPN_CONNECTION_STATE_REASON_SERVICE_STOPPED,
+ NM_VPN_CONNECTION_STATE_REASON_IP_CONFIG_INVALID,
+ NM_VPN_CONNECTION_STATE_REASON_CONNECT_TIMEOUT,
+ NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_TIMEOUT,
+ NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_FAILED,
+ NM_VPN_CONNECTION_STATE_REASON_NO_SECRETS,
+ NM_VPN_CONNECTION_STATE_REASON_LOGIN_FAILED,
+ NM_VPN_CONNECTION_STATE_REASON_CONNECTION_REMOVED
+} NMVPNConnectionStateReason;
+</pre>
+<p>
+VPN connection state reasons
+</p>
+<p>
+(Corresponds to the NM_VPN_CONNECTION_STATE_REASON type in nm-vpn-connection.xml.)
+</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-CONNECTION-STATE-REASON-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_REASON_UNKNOWN</code></span></p></td>
+<td>The reason for the VPN connection
+ state change is unknown.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-CONNECTION-STATE-REASON-NONE:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_REASON_NONE</code></span></p></td>
+<td>No reason was given for the VPN
+ connection state change.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-CONNECTION-STATE-REASON-USER-DISCONNECTED:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_REASON_USER_DISCONNECTED</code></span></p></td>
+<td>The VPN connection changed
+ state because the user disconnected it.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-CONNECTION-STATE-REASON-DEVICE-DISCONNECTED:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_REASON_DEVICE_DISCONNECTED</code></span></p></td>
+<td>The VPN connection
+ changed state because the device it was using was disconnected.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-CONNECTION-STATE-REASON-SERVICE-STOPPED:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_REASON_SERVICE_STOPPED</code></span></p></td>
+<td>The service providing the
+ VPN connection was stopped.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-CONNECTION-STATE-REASON-IP-CONFIG-INVALID:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_REASON_IP_CONFIG_INVALID</code></span></p></td>
+<td>The IP config of the VPN
+ connection was invalid.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-CONNECTION-STATE-REASON-CONNECT-TIMEOUT:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_REASON_CONNECT_TIMEOUT</code></span></p></td>
+<td>The connection attempt to
+ the VPN service timed out.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-CONNECTION-STATE-REASON-SERVICE-START-TIMEOUT:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_TIMEOUT</code></span></p></td>
+<td>A timeout occurred
+ while starting the service providing the VPN connection.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-CONNECTION-STATE-REASON-SERVICE-START-FAILED:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_FAILED</code></span></p></td>
+<td>Starting the service
+ starting the service providing the VPN connection failed.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-CONNECTION-STATE-REASON-NO-SECRETS:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_REASON_NO_SECRETS</code></span></p></td>
+<td>Necessary secrets for the VPN
+ connection were not provided.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-CONNECTION-STATE-REASON-LOGIN-FAILED:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_REASON_LOGIN_FAILED</code></span></p></td>
+<td>Authentication to the VPN
+ server failed.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-CONNECTION-STATE-REASON-CONNECTION-REMOVED:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_REASON_CONNECTION_REMOVED</code></span></p></td>
+<td>The connection was
+ deleted from settings.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMVPNPluginFailure"></a><h3>enum NMVPNPluginFailure</h3>
+<pre class="programlisting">typedef enum {
+ NM_VPN_PLUGIN_FAILURE_LOGIN_FAILED,
+ NM_VPN_PLUGIN_FAILURE_CONNECT_FAILED,
+ NM_VPN_PLUGIN_FAILURE_BAD_IP_CONFIG
+} NMVPNPluginFailure;
+</pre>
+<p>
+VPN plugin failure reasons
+</p>
+<p>
+(Corresponds to the NM_VPN_PLUGIN_FAILURE type in nm-vpn-plugin.xml.)
+</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-FAILURE-LOGIN-FAILED:CAPS"></a><span class="term"><code class="literal">NM_VPN_PLUGIN_FAILURE_LOGIN_FAILED</code></span></p></td>
+<td>Login failed.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-PLUGIN-FAILURE-CONNECT-FAILED:CAPS"></a><span class="term"><code class="literal">NM_VPN_PLUGIN_FAILURE_CONNECT_FAILED</code></span></p></td>
+<td>Connect failed.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-PLUGIN-FAILURE-BAD-IP-CONFIG:CAPS"></a><span class="term"><code class="literal">NM_VPN_PLUGIN_FAILURE_BAD_IP_CONFIG</code></span></p></td>
+<td>Invalid IP configuration returned from
+ the VPN plugin.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-CONFIG-TUNDEV:CAPS"></a><h3>NM_VPN_PLUGIN_CONFIG_TUNDEV</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_CONFIG_TUNDEV "tundev"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-CONFIG-BANNER:CAPS"></a><h3>NM_VPN_PLUGIN_CONFIG_BANNER</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_CONFIG_BANNER "banner"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-CONFIG-EXT-GATEWAY:CAPS"></a><h3>NM_VPN_PLUGIN_CONFIG_EXT_GATEWAY</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_CONFIG_EXT_GATEWAY "gateway"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-CONFIG-MTU:CAPS"></a><h3>NM_VPN_PLUGIN_CONFIG_MTU</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_CONFIG_MTU "mtu"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-CONFIG-HAS-IP4:CAPS"></a><h3>NM_VPN_PLUGIN_CONFIG_HAS_IP4</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_CONFIG_HAS_IP4 "has-ip4"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-CONFIG-HAS-IP6:CAPS"></a><h3>NM_VPN_PLUGIN_CONFIG_HAS_IP6</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_CONFIG_HAS_IP6 "has-ip6"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-CAN-PERSIST:CAPS"></a><h3>NM_VPN_PLUGIN_CAN_PERSIST</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_CAN_PERSIST "can-persist"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP4-CONFIG-INT-GATEWAY:CAPS"></a><h3>NM_VPN_PLUGIN_IP4_CONFIG_INT_GATEWAY</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP4_CONFIG_INT_GATEWAY "internal-gateway"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP4-CONFIG-ADDRESS:CAPS"></a><h3>NM_VPN_PLUGIN_IP4_CONFIG_ADDRESS</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP4_CONFIG_ADDRESS "address"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP4-CONFIG-PTP:CAPS"></a><h3>NM_VPN_PLUGIN_IP4_CONFIG_PTP</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP4_CONFIG_PTP "ptp"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP4-CONFIG-PREFIX:CAPS"></a><h3>NM_VPN_PLUGIN_IP4_CONFIG_PREFIX</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP4_CONFIG_PREFIX "prefix"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP4-CONFIG-DNS:CAPS"></a><h3>NM_VPN_PLUGIN_IP4_CONFIG_DNS</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP4_CONFIG_DNS "dns"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP4-CONFIG-NBNS:CAPS"></a><h3>NM_VPN_PLUGIN_IP4_CONFIG_NBNS</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP4_CONFIG_NBNS "nbns"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP4-CONFIG-MSS:CAPS"></a><h3>NM_VPN_PLUGIN_IP4_CONFIG_MSS</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP4_CONFIG_MSS "mss"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP4-CONFIG-DOMAIN:CAPS"></a><h3>NM_VPN_PLUGIN_IP4_CONFIG_DOMAIN</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP4_CONFIG_DOMAIN "domain"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP4-CONFIG-DOMAINS:CAPS"></a><h3>NM_VPN_PLUGIN_IP4_CONFIG_DOMAINS</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP4_CONFIG_DOMAINS "domains"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP4-CONFIG-ROUTES:CAPS"></a><h3>NM_VPN_PLUGIN_IP4_CONFIG_ROUTES</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP4_CONFIG_ROUTES "routes"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP4-CONFIG-NEVER-DEFAULT:CAPS"></a><h3>NM_VPN_PLUGIN_IP4_CONFIG_NEVER_DEFAULT</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP4_CONFIG_NEVER_DEFAULT "never-default"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP4-CONFIG-GATEWAY:CAPS"></a><h3>NM_VPN_PLUGIN_IP4_CONFIG_GATEWAY</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP4_CONFIG_GATEWAY NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP4-CONFIG-BANNER:CAPS"></a><h3>NM_VPN_PLUGIN_IP4_CONFIG_BANNER</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP4_CONFIG_BANNER NM_VPN_PLUGIN_CONFIG_BANNER
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP4-CONFIG-EXT-GATEWAY:CAPS"></a><h3>NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY NM_VPN_PLUGIN_CONFIG_EXT_GATEWAY
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP4-CONFIG-MTU:CAPS"></a><h3>NM_VPN_PLUGIN_IP4_CONFIG_MTU</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP4_CONFIG_MTU NM_VPN_PLUGIN_CONFIG_MTU
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP4-CONFIG-TUNDEV:CAPS"></a><h3>NM_VPN_PLUGIN_IP4_CONFIG_TUNDEV</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP4_CONFIG_TUNDEV NM_VPN_PLUGIN_CONFIG_TUNDEV
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP6-CONFIG-INT-GATEWAY:CAPS"></a><h3>NM_VPN_PLUGIN_IP6_CONFIG_INT_GATEWAY</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP6_CONFIG_INT_GATEWAY "internal-gateway"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP6-CONFIG-ADDRESS:CAPS"></a><h3>NM_VPN_PLUGIN_IP6_CONFIG_ADDRESS</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP6_CONFIG_ADDRESS "address"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP6-CONFIG-PTP:CAPS"></a><h3>NM_VPN_PLUGIN_IP6_CONFIG_PTP</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP6_CONFIG_PTP "ptp"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP6-CONFIG-PREFIX:CAPS"></a><h3>NM_VPN_PLUGIN_IP6_CONFIG_PREFIX</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP6_CONFIG_PREFIX "prefix"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP6-CONFIG-DNS:CAPS"></a><h3>NM_VPN_PLUGIN_IP6_CONFIG_DNS</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP6_CONFIG_DNS "dns"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP6-CONFIG-MSS:CAPS"></a><h3>NM_VPN_PLUGIN_IP6_CONFIG_MSS</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP6_CONFIG_MSS "mss"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP6-CONFIG-DOMAIN:CAPS"></a><h3>NM_VPN_PLUGIN_IP6_CONFIG_DOMAIN</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP6_CONFIG_DOMAIN "domain"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP6-CONFIG-DOMAINS:CAPS"></a><h3>NM_VPN_PLUGIN_IP6_CONFIG_DOMAINS</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP6_CONFIG_DOMAINS "domains"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP6-CONFIG-ROUTES:CAPS"></a><h3>NM_VPN_PLUGIN_IP6_CONFIG_ROUTES</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP6_CONFIG_ROUTES "routes"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP6-CONFIG-NEVER-DEFAULT:CAPS"></a><h3>NM_VPN_PLUGIN_IP6_CONFIG_NEVER_DEFAULT</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP6_CONFIG_NEVER_DEFAULT "never-default"
+</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-util/html/libnm-util-nm-utils.html b/docs/libnm-util/html/libnm-util-nm-utils.html
index 91e5b8f96..3d5c24ea8 100644
--- a/docs/libnm-util/html/libnm-util-nm-utils.html
+++ b/docs/libnm-util/html/libnm-util-nm-utils.html
@@ -7,7 +7,7 @@
<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">
+<link rel="next" href="libnm-util-NetworkManager.html" title="NetworkManager">
<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
@@ -18,7 +18,7 @@
<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>
+<td><a accesskey="n" href="libnm-util-NetworkManager.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>
@@ -57,14 +57,14 @@ const <span class="returnvalue">char</span> * <a class="link" href="libnm
<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 class="link" href="libnm-util-NetworkManager.html#NMDeviceWifiCapabilities" title="enum NMDeviceWifiCapabilities"><span class="type">NMDeviceWifiCapabilities</span></a> 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>);
+ <em class="parameter"><code><a class="link" href="libnm-util-NetworkManager.html#NM80211ApFlags" title="enum NM80211ApFlags"><span class="type">NM80211ApFlags</span></a> ap_flags</code></em>,
+ <em class="parameter"><code><a class="link" href="libnm-util-NetworkManager.html#NM80211ApSecurityFlags" title="enum NM80211ApSecurityFlags"><span class="type">NM80211ApSecurityFlags</span></a> ap_wpa</code></em>,
+ <em class="parameter"><code><a class="link" href="libnm-util-NetworkManager.html#NM80211ApSecurityFlags" title="enum NM80211ApSecurityFlags"><span class="type">NM80211ApSecurityFlags</span></a> 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>);
+ <em class="parameter"><code><a class="link" href="libnm-util-NetworkManager.html#NMDeviceWifiCapabilities" title="enum NMDeviceWifiCapabilities"><span class="type">NMDeviceWifiCapabilities</span></a> 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>);
@@ -97,6 +97,16 @@ enum <a class="link" href="libnm-util-nm-utils.html#NMUtilsSecuri
<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#gboolean"><span class="returnvalue">gboolean</span></a> (<a class="link" href="libnm-util-nm-utils.html#NMUtilsFileSearchInPathsPredicate" title="NMUtilsFileSearchInPathsPredicate ()">*NMUtilsFileSearchInPathsPredicate</a>)
+ (<em class="parameter"><code>const <span class="type">char</span> *filename</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>);
+const <span class="returnvalue">char</span> * <a class="link" href="libnm-util-nm-utils.html#nm-utils-file-search-in-paths" title="nm_utils_file_search_in_paths ()">nm_utils_file_search_in_paths</a> (<em class="parameter"><code>const <span class="type">char</span> *progname</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *try_first</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *const *paths</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-File-Utilities.html#GFileTest"><span class="type">GFileTest</span></a> file_test_flags</code></em>,
+ <em class="parameter"><code><a class="link" href="libnm-util-nm-utils.html#NMUtilsFileSearchInPathsPredicate" title="NMUtilsFileSearchInPathsPredicate ()"><span class="type">NMUtilsFileSearchInPathsPredicate</span></a> predicate</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>,
+ <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-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>);
@@ -149,7 +159,7 @@ const <span class="returnvalue">char</span> * <a class="link" href="libnm
<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
+A collection of utility functions for working with SSIDs, IP addresses, Wi-Fi
access points and devices, among other things.
</p>
</div>
@@ -159,10 +169,8 @@ access points and devices, among other things.
<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.
+Initializes libnm-util; should be called when starting any program that
+uses libnm-util. This function can be called more than once.
</p>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
@@ -188,10 +196,8 @@ libnm-util can also be done. This function can be called more than once.
<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.
+No-op. Although this function still exists for ABI compatibility reasons, it
+does not have any effect, and does not ever need to be called.
</p>
</div>
<hr>
@@ -490,12 +496,12 @@ generating the dynamic WEP keys automatically
<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 class="link" href="libnm-util-NetworkManager.html#NMDeviceWifiCapabilities" title="enum NMDeviceWifiCapabilities"><span class="type">NMDeviceWifiCapabilities</span></a> 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>
+ <em class="parameter"><code><a class="link" href="libnm-util-NetworkManager.html#NM80211ApFlags" title="enum NM80211ApFlags"><span class="type">NM80211ApFlags</span></a> ap_flags</code></em>,
+ <em class="parameter"><code><a class="link" href="libnm-util-NetworkManager.html#NM80211ApSecurityFlags" title="enum NM80211ApSecurityFlags"><span class="type">NM80211ApSecurityFlags</span></a> ap_wpa</code></em>,
+ <em class="parameter"><code><a class="link" href="libnm-util-NetworkManager.html#NM80211ApSecurityFlags" title="enum NM80211ApSecurityFlags"><span class="type">NM80211ApSecurityFlags</span></a> 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
@@ -520,7 +526,7 @@ e.g. <a class="link" href="libnm-util-nm-utils.html#NMU-SEC-STATIC-WEP:CAPS"><sp
<tr>
<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>
+<a class="link" href="libnm-util-NetworkManager.html#NM-WIFI-DEVICE-CAP-CIPHER-WEP40:CAPS"><span class="type">NM_WIFI_DEVICE_CAP_CIPHER_WEP40</span></a>
</td>
</tr>
<tr>
@@ -533,18 +539,18 @@ e.g. <a class="link" href="libnm-util-nm-utils.html#NMU-SEC-STATIC-WEP:CAPS"><sp
</tr>
<tr>
<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>bitfield of AP capabilities, e.g. <a class="link" href="libnm-util-NetworkManager.html#NM-802-11-AP-FLAGS-PRIVACY:CAPS"><span class="type">NM_802_11_AP_FLAGS_PRIVACY</span></a>
</td>
</tr>
<tr>
<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>
+e.g. (<a class="link" href="libnm-util-NetworkManager.html#NM-802-11-AP-SEC-PAIR-TKIP:CAPS"><span class="type">NM_802_11_AP_SEC_PAIR_TKIP</span></a> | <a class="link" href="libnm-util-NetworkManager.html#NM-802-11-AP-SEC-KEY-MGMT-PSK:CAPS"><span class="type">NM_802_11_AP_SEC_KEY_MGMT_PSK</span></a>)</td>
</tr>
<tr>
<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>
+e.g. (<a class="link" href="libnm-util-NetworkManager.html#NM-802-11-AP-SEC-PAIR-CCMP:CAPS"><span class="type">NM_802_11_AP_SEC_PAIR_CCMP</span></a> | <a class="link" href="libnm-util-NetworkManager.html#NM-802-11-AP-SEC-PAIR-TKIP:CAPS"><span class="type">NM_802_11_AP_SEC_PAIR_TKIP</span></a>)</td>
</tr>
<tr>
<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
@@ -559,7 +565,7 @@ compatible with the desired <em class="parameter"><code>type</code></em>, <a hre
<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>
+ <em class="parameter"><code><a class="link" href="libnm-util-NetworkManager.html#NMDeviceWifiCapabilities" title="enum NMDeviceWifiCapabilities"><span class="type">NMDeviceWifiCapabilities</span></a> 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
@@ -580,7 +586,7 @@ e.g. <a class="link" href="libnm-util-nm-utils.html#NMU-SEC-STATIC-WEP:CAPS"><sp
<tr>
<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>
+<a class="link" href="libnm-util-NetworkManager.html#NM-WIFI-DEVICE-CAP-CIPHER-WEP40:CAPS"><span class="type">NM_WIFI_DEVICE_CAP_CIPHER_WEP40</span></a>
</td>
</tr>
<tr>
@@ -675,7 +681,7 @@ extended in the future.
</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#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>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> NMIP4Address]</span>
</td>
</tr>
</tbody>
@@ -738,7 +744,7 @@ extended in the future.
</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>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> NMIP4Route]</span>
</td>
</tr>
</tbody>
@@ -869,7 +875,7 @@ extended in the future.
</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#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>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> NMIP6Address]</span>
</td>
</tr>
</tbody>
@@ -933,7 +939,7 @@ is not guaranteed to be stable and may be extended in the future.
</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>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> NMIP6Route]</span>
</td>
</tr>
</tbody>
@@ -948,7 +954,7 @@ is not guaranteed to be stable and may be extended in the future.
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
+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">
@@ -1167,7 +1173,7 @@ certificate/private key file. <span class="annotation">[<acronym title="Free dat
<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.
+Utility function to find out if the <em class="parameter"><code>filename</code></em> is in PKCS#12 format.
</p>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
@@ -1182,7 +1188,84 @@ Utility function to find out if the <em class="parameter"><code>filename</code><
<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 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>
+<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#12, <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="NMUtilsFileSearchInPathsPredicate"></a><h3>NMUtilsFileSearchInPathsPredicate ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> (*NMUtilsFileSearchInPathsPredicate)
+ (<em class="parameter"><code>const <span class="type">char</span> *filename</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-utils-file-search-in-paths"></a><h3>nm_utils_file_search_in_paths ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_utils_file_search_in_paths (<em class="parameter"><code>const <span class="type">char</span> *progname</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *try_first</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *const *paths</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-File-Utilities.html#GFileTest"><span class="type">GFileTest</span></a> file_test_flags</code></em>,
+ <em class="parameter"><code><a class="link" href="libnm-util-nm-utils.html#NMUtilsFileSearchInPathsPredicate" title="NMUtilsFileSearchInPathsPredicate ()"><span class="type">NMUtilsFileSearchInPathsPredicate</span></a> predicate</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>,
+ <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>
+Searches for a <em class="parameter"><code>progname</code></em> file in a list of search <em class="parameter"><code>paths</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>progname</code></em> :</span></p></td>
+<td>the helper program name, like "iptables"
+Must be a non-empty string, without path separator (/).</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>try_first</code></em> :</span></p></td>
+<td>a custom path to try first before searching.
+It is silently ignored if it is empty or not an absolute path. <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>paths</code></em> :</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 list of search paths.
+Can be empty or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>, in which case only <em class="parameter"><code>try_first</code></em> is checked. <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>file_test_flags</code></em> :</span></p></td>
+<td>the flags passed to <a href="http://library.gnome.org/devel/glib/unstable/glib-File-Utilities.html#g-file-test"><code class="function">g_file_test()</code></a> when searching
+for <em class="parameter"><code>progname</code></em>. Set it to 0 to skip the <a href="http://library.gnome.org/devel/glib/unstable/glib-File-Utilities.html#g-file-test"><code class="function">g_file_test()</code></a>.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>predicate</code></em> :</span></p></td>
+<td>if given, pass the file name to this function
+for additional checks. This check is performed after the check for
+<em class="parameter"><code>file_test_flags</code></em>. You cannot omit both <em class="parameter"><code>file_test_flags</code></em> and <em class="parameter"><code>predicate</code></em>. <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>(allow-none): user data for <em class="parameter"><code>predicate</code></em> 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>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>on failure, a "not found" error using <em class="parameter"><code>error_domain</code></em> and <em class="parameter"><code>error_code</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the full path to the helper, if found, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if not found.
+The returned string is not owned by the caller, but later
+invocations of the function might overwrite it. <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>
@@ -1313,9 +1396,8 @@ Utility function to verify Wi-Fi channel validity.
<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>.
+The maximum length of hardware addresses handled by NetworkManager itself,
+<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>, and <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>
@@ -1333,7 +1415,8 @@ Returns the length in octets of a hardware address of type <em class="parameter"
<tbody>
<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>the type of address; either <code class="literal">ARPHRD_ETHER</code> or
+<code class="literal">ARPHRD_INFINIBAND</code>
</td>
</tr>
<tr>
@@ -1357,8 +1440,8 @@ a length; but you can just use <a class="link" href="libnm-util-nm-utils.html#nm
<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.
+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>
@@ -1372,8 +1455,9 @@ the raw address given its length.
</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>
+<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>
@@ -1402,7 +1486,8 @@ a type.
</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>the type of address; either <code class="literal">ARPHRD_ETHER</code> or
+<code class="literal">ARPHRD_INFINIBAND</code>
</td>
</tr>
<tr>
@@ -1434,7 +1519,8 @@ Parses <em class="parameter"><code>asc</code></em> and converts it to binary for
</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>the type of address; either <code class="literal">ARPHRD_ETHER</code> or
+<code class="literal">ARPHRD_INFINIBAND</code>
</td>
</tr>
<tr>
@@ -1473,7 +1559,8 @@ instead of a type.
</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>the type of address; either <code class="literal">ARPHRD_ETHER</code> or
+<code class="literal">ARPHRD_INFINIBAND</code>
</td>
</tr>
<tr>
@@ -1764,13 +1851,14 @@ Wrapper for inet_ntop.
</tr>
<tr>
<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>
+<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><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
@@ -1801,13 +1889,14 @@ Wrapper for inet_ntop.
</tr>
<tr>
<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>
+<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><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
diff --git a/docs/libnm-util/html/libnm-util.devhelp2 b/docs/libnm-util/html/libnm-util.devhelp2
index 571aa04f6..573c7c538 100644
--- a/docs/libnm-util/html/libnm-util.devhelp2
+++ b/docs/libnm-util/html/libnm-util.devhelp2
@@ -32,6 +32,8 @@
<sub name="NMSettingPPPOE" link="NMSettingPPPOE.html"/>
<sub name="NMSettingVPN" link="NMSettingVPN.html"/>
<sub name="nm-utils" link="libnm-util-nm-utils.html"/>
+ <sub name="NetworkManager" link="libnm-util-NetworkManager.html"/>
+ <sub name="NetworkManagerVPN" link="libnm-util-NetworkManagerVPN.html"/>
</sub>
<sub name="Object Hierarchy" link="object-tree.html"/>
<sub name="API Index" link="api-index-full.html"/>
@@ -43,6 +45,7 @@
<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_NORMALIZE_PARAM_IP6_CONFIG_METHOD" link="NMConnection.html#NM-CONNECTION-NORMALIZE-PARAM-IP6-CONFIG-METHOD:CAPS"/>
<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"/>
@@ -60,6 +63,7 @@
<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_normalize ()" link="NMConnection.html#nm-connection-normalize" since="1.0"/>
<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"/>
@@ -67,6 +71,7 @@
<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_get_interface_name ()" link="NMConnection.html#nm-connection-get-interface-name" since="1.0"/>
<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"/>
@@ -512,6 +517,7 @@
<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="macro" name="NM_SETTING_BOND_OPTION_LACP_RATE" link="NMSettingBond.html#NM-SETTING-BOND-OPTION-LACP-RATE: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"/>
@@ -917,6 +923,7 @@
<keyword type="macro" name="NM_SETTING_IP4_CONFIG_DNS_SEARCH" link="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-DNS-SEARCH:CAPS"/>
<keyword type="macro" name="NM_SETTING_IP4_CONFIG_ADDRESSES" link="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-ADDRESSES:CAPS"/>
<keyword type="macro" name="NM_SETTING_IP4_CONFIG_ROUTES" link="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-ROUTES:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_IP4_CONFIG_ROUTE_METRIC" link="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-ROUTE-METRIC:CAPS"/>
<keyword type="macro" name="NM_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES" link="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-IGNORE-AUTO-ROUTES:CAPS"/>
<keyword type="macro" name="NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS" link="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-IGNORE-AUTO-DNS:CAPS"/>
<keyword type="macro" name="NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID" link="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-DHCP-CLIENT-ID:CAPS"/>
@@ -983,6 +990,7 @@
<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_route_metric ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-get-route-metric" since="1.0"/>
<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"/>
@@ -990,7 +998,6 @@
<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"/>
@@ -1002,6 +1009,7 @@
<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;route-metric&quot; property" link="NMSettingIP4Config.html#NMSettingIP4Config--route-metric"/>
<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-enum"/>
@@ -1012,6 +1020,7 @@
<keyword type="macro" name="NM_SETTING_IP6_CONFIG_DNS_SEARCH" link="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-DNS-SEARCH:CAPS"/>
<keyword type="macro" name="NM_SETTING_IP6_CONFIG_ADDRESSES" link="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-ADDRESSES:CAPS"/>
<keyword type="macro" name="NM_SETTING_IP6_CONFIG_ROUTES" link="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-ROUTES:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_IP6_CONFIG_ROUTE_METRIC" link="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-ROUTE-METRIC:CAPS"/>
<keyword type="macro" name="NM_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES" link="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-IGNORE-AUTO-ROUTES:CAPS"/>
<keyword type="macro" name="NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS" link="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-IGNORE-AUTO-DNS:CAPS"/>
<keyword type="macro" name="NM_SETTING_IP6_CONFIG_NEVER_DEFAULT" link="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-NEVER-DEFAULT:CAPS"/>
@@ -1080,6 +1089,7 @@
<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_route_metric ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-get-route-metric" since="1.0"/>
<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"/>
@@ -1095,6 +1105,7 @@
<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;route-metric&quot; property" link="NMSettingIP6Config.html#NMSettingIP6Config--route-metric"/>
<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-enum"/>
@@ -1182,6 +1193,7 @@
<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_PERSISTENT" link="NMSettingVPN.html#NM-SETTING-VPN-PERSISTENT: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="struct" name="NMSettingVPN" link="NMSettingVPN.html#NMSettingVPN-struct"/>
@@ -1190,6 +1202,7 @@
<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_persistent ()" link="NMSettingVPN.html#nm-setting-vpn-get-persistent"/>
<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"/>
@@ -1201,6 +1214,7 @@
<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;persistent&quot; property" link="NMSettingVPN.html#NMSettingVPN--persistent"/>
<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"/>
@@ -1235,6 +1249,8 @@
<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="NMUtilsFileSearchInPathsPredicate ()" link="libnm-util-nm-utils.html#NMUtilsFileSearchInPathsPredicate"/>
+ <keyword type="function" name="nm_utils_file_search_in_paths ()" link="libnm-util-nm-utils.html#nm-utils-file-search-in-paths"/>
<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"/>
@@ -1257,10 +1273,127 @@
<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="macro" name="NM_DBUS_SERVICE" link="libnm-util-NetworkManager.html#NM-DBUS-SERVICE:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_PATH" link="libnm-util-NetworkManager.html#NM-DBUS-PATH:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE" link="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE" link="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE_WIRED" link="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-WIRED:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE_ADSL" link="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-ADSL:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE_WIRELESS" link="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-WIRELESS:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE_BLUETOOTH" link="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-BLUETOOTH:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE_OLPC_MESH" link="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-OLPC-MESH:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_PATH_ACCESS_POINT" link="libnm-util-NetworkManager.html#NM-DBUS-PATH-ACCESS-POINT:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_ACCESS_POINT" link="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-ACCESS-POINT:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE_MODEM" link="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-MODEM:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE_WIMAX" link="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-WIMAX:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_WIMAX_NSP" link="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-WIMAX-NSP:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_PATH_WIMAX_NSP" link="libnm-util-NetworkManager.html#NM-DBUS-PATH-WIMAX-NSP:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_ACTIVE_CONNECTION" link="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-ACTIVE-CONNECTION:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_IP4_CONFIG" link="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-IP4-CONFIG:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DHCP4_CONFIG" link="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DHCP4-CONFIG:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_IP6_CONFIG" link="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-IP6-CONFIG:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DHCP6_CONFIG" link="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DHCP6-CONFIG:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE_INFINIBAND" link="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-INFINIBAND:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE_BOND" link="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-BOND:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE_TEAM" link="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-TEAM:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE_VLAN" link="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-VLAN:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE_BRIDGE" link="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-BRIDGE:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE_GENERIC" link="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-GENERIC:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE_VETH" link="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-VETH:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE_TUN" link="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-TUN:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE_MACVLAN" link="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-MACVLAN:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE_VXLAN" link="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-VXLAN:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE_GRE" link="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-DEVICE-GRE:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_IFACE_SETTINGS" link="libnm-util-NetworkManager.html#NM-DBUS-IFACE-SETTINGS:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_PATH_SETTINGS" link="libnm-util-NetworkManager.html#NM-DBUS-PATH-SETTINGS:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_IFACE_SETTINGS_CONNECTION" link="libnm-util-NetworkManager.html#NM-DBUS-IFACE-SETTINGS-CONNECTION:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_PATH_SETTINGS_CONNECTION" link="libnm-util-NetworkManager.html#NM-DBUS-PATH-SETTINGS-CONNECTION:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_IFACE_SETTINGS_CONNECTION_SECRETS" link="libnm-util-NetworkManager.html#NM-DBUS-IFACE-SETTINGS-CONNECTION-SECRETS:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_AGENT_MANAGER" link="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-AGENT-MANAGER:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_PATH_AGENT_MANAGER" link="libnm-util-NetworkManager.html#NM-DBUS-PATH-AGENT-MANAGER:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_SECRET_AGENT" link="libnm-util-NetworkManager.html#NM-DBUS-INTERFACE-SECRET-AGENT:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_PATH_SECRET_AGENT" link="libnm-util-NetworkManager.html#NM-DBUS-PATH-SECRET-AGENT:CAPS"/>
+ <keyword type="enum" name="enum NMState" link="libnm-util-NetworkManager.html#NMState"/>
+ <keyword type="macro" name="NM_STATE_CONNECTED" link="libnm-util-NetworkManager.html#NM-STATE-CONNECTED:CAPS"/>
+ <keyword type="enum" name="enum NMConnectivityState" link="libnm-util-NetworkManager.html#NMConnectivityState" since="0.9.8.6"/>
+ <keyword type="enum" name="enum NMDeviceType" link="libnm-util-NetworkManager.html#NMDeviceType"/>
+ <keyword type="enum" name="enum NMDeviceCapabilities" link="libnm-util-NetworkManager.html#NMDeviceCapabilities"/>
+ <keyword type="enum" name="enum NMDeviceWifiCapabilities" link="libnm-util-NetworkManager.html#NMDeviceWifiCapabilities"/>
+ <keyword type="enum" name="enum NM80211ApFlags" link="libnm-util-NetworkManager.html#NM80211ApFlags"/>
+ <keyword type="enum" name="enum NM80211ApSecurityFlags" link="libnm-util-NetworkManager.html#NM80211ApSecurityFlags"/>
+ <keyword type="enum" name="enum NM80211Mode" link="libnm-util-NetworkManager.html#NM80211Mode"/>
+ <keyword type="enum" name="enum NMBluetoothCapabilities" link="libnm-util-NetworkManager.html#NMBluetoothCapabilities"/>
+ <keyword type="enum" name="enum NMDeviceModemCapabilities" link="libnm-util-NetworkManager.html#NMDeviceModemCapabilities"/>
+ <keyword type="enum" name="enum NMDeviceState" link="libnm-util-NetworkManager.html#NMDeviceState"/>
+ <keyword type="enum" name="enum NMDeviceStateReason" link="libnm-util-NetworkManager.html#NMDeviceStateReason"/>
+ <keyword type="enum" name="enum NMActiveConnectionState" link="libnm-util-NetworkManager.html#NMActiveConnectionState"/>
+ <keyword type="macro" name="NM_DBUS_PATH_VPN" link="libnm-util-NetworkManagerVPN.html#NM-DBUS-PATH-VPN:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_VPN" link="libnm-util-NetworkManagerVPN.html#NM-DBUS-INTERFACE-VPN:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_PATH_VPN_CONNECTION" link="libnm-util-NetworkManagerVPN.html#NM-DBUS-PATH-VPN-CONNECTION:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_VPN_CONNECTION" link="libnm-util-NetworkManagerVPN.html#NM-DBUS-INTERFACE-VPN-CONNECTION:CAPS"/>
+ <keyword type="macro" name="NM_VPN_DBUS_PLUGIN_PATH" link="libnm-util-NetworkManagerVPN.html#NM-VPN-DBUS-PLUGIN-PATH:CAPS"/>
+ <keyword type="macro" name="NM_VPN_DBUS_PLUGIN_INTERFACE" link="libnm-util-NetworkManagerVPN.html#NM-VPN-DBUS-PLUGIN-INTERFACE:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_NO_ACTIVE_VPN_CONNECTION" link="libnm-util-NetworkManagerVPN.html#NM-DBUS-NO-ACTIVE-VPN-CONNECTION:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_NO_VPN_CONNECTIONS" link="libnm-util-NetworkManagerVPN.html#NM-DBUS-NO-VPN-CONNECTIONS:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INVALID_VPN_CONNECTION" link="libnm-util-NetworkManagerVPN.html#NM-DBUS-INVALID-VPN-CONNECTION:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_VPN_ERROR_PREFIX" link="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-ERROR-PREFIX:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_VPN_STARTING_IN_PROGRESS" link="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-STARTING-IN-PROGRESS:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_VPN_ALREADY_STARTED" link="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-ALREADY-STARTED:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_VPN_STOPPING_IN_PROGRESS" link="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-STOPPING-IN-PROGRESS:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_VPN_ALREADY_STOPPED" link="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-ALREADY-STOPPED:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_VPN_WRONG_STATE" link="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-WRONG-STATE:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_VPN_BAD_ARGUMENTS" link="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-BAD-ARGUMENTS:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_VPN_INTERACTIVE_NOT_SUPPORTED" link="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-INTERACTIVE-NOT-SUPPORTED:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_VPN_SIGNAL_LOGIN_BANNER" link="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-LOGIN-BANNER:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_VPN_SIGNAL_LOGIN_FAILED" link="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-LOGIN-FAILED:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_VPN_SIGNAL_LAUNCH_FAILED" link="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-LAUNCH-FAILED:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_VPN_SIGNAL_CONNECT_FAILED" link="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-CONNECT-FAILED:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_VPN_SIGNAL_VPN_CONFIG_BAD" link="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-VPN-CONFIG-BAD:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_VPN_SIGNAL_IP_CONFIG_BAD" link="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-IP-CONFIG-BAD:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_VPN_SIGNAL_STATE_CHANGE" link="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-STATE-CHANGE:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_VPN_SIGNAL_IP4_CONFIG" link="libnm-util-NetworkManagerVPN.html#NM-DBUS-VPN-SIGNAL-IP4-CONFIG:CAPS"/>
+ <keyword type="enum" name="enum NMVPNServiceState" link="libnm-util-NetworkManagerVPN.html#NMVPNServiceState"/>
+ <keyword type="enum" name="enum NMVPNConnectionState" link="libnm-util-NetworkManagerVPN.html#NMVPNConnectionState"/>
+ <keyword type="enum" name="enum NMVPNConnectionStateReason" link="libnm-util-NetworkManagerVPN.html#NMVPNConnectionStateReason"/>
+ <keyword type="enum" name="enum NMVPNPluginFailure" link="libnm-util-NetworkManagerVPN.html#NMVPNPluginFailure"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_CONFIG_TUNDEV" link="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-CONFIG-TUNDEV:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_CONFIG_BANNER" link="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-CONFIG-BANNER:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_CONFIG_EXT_GATEWAY" link="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-CONFIG-EXT-GATEWAY:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_CONFIG_MTU" link="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-CONFIG-MTU:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_CONFIG_HAS_IP4" link="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-CONFIG-HAS-IP4:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_CONFIG_HAS_IP6" link="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-CONFIG-HAS-IP6:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_CAN_PERSIST" link="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-CAN-PERSIST:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP4_CONFIG_INT_GATEWAY" link="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-INT-GATEWAY:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP4_CONFIG_ADDRESS" link="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-ADDRESS:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP4_CONFIG_PTP" link="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-PTP:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP4_CONFIG_PREFIX" link="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-PREFIX:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP4_CONFIG_DNS" link="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-DNS:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP4_CONFIG_NBNS" link="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-NBNS:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP4_CONFIG_MSS" link="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-MSS:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP4_CONFIG_DOMAIN" link="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-DOMAIN:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP4_CONFIG_DOMAINS" link="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-DOMAINS:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP4_CONFIG_ROUTES" link="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-ROUTES:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP4_CONFIG_NEVER_DEFAULT" link="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-NEVER-DEFAULT:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP4_CONFIG_GATEWAY" link="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-GATEWAY:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP4_CONFIG_BANNER" link="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-BANNER:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY" link="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-EXT-GATEWAY:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP4_CONFIG_MTU" link="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-MTU:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP4_CONFIG_TUNDEV" link="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP4-CONFIG-TUNDEV:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP6_CONFIG_INT_GATEWAY" link="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-INT-GATEWAY:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP6_CONFIG_ADDRESS" link="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-ADDRESS:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP6_CONFIG_PTP" link="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-PTP:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP6_CONFIG_PREFIX" link="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-PREFIX:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP6_CONFIG_DNS" link="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-DNS:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP6_CONFIG_MSS" link="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-MSS:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP6_CONFIG_DOMAIN" link="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-DOMAIN:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP6_CONFIG_DOMAINS" link="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-DOMAINS:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP6_CONFIG_ROUTES" link="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-ROUTES:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP6_CONFIG_NEVER_DEFAULT" link="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-IP6-CONFIG-NEVER-DEFAULT:CAPS"/>
<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_CONNECTION_ERROR_INVALID_SETTING" link="NMConnection.html#NM-CONNECTION-ERROR-INVALID-SETTING: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"/>
@@ -1275,12 +1408,16 @@
<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_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT" link="NMSetting.html#NM-SETTING-COMPARE-FLAG-DIFF-RESULT-WITH-DEFAULT:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_COMPARE_FLAG_DIFF_RESULT_NO_DEFAULT" link="NMSetting.html#NM-SETTING-COMPARE-FLAG-DIFF-RESULT-NO-DEFAULT: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_DIFF_RESULT_IN_A_DEFAULT" link="NMSetting.html#NM-SETTING-DIFF-RESULT-IN-A-DEFAULT:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_DIFF_RESULT_IN_B_DEFAULT" link="NMSetting.html#NM-SETTING-DIFF-RESULT-IN-B-DEFAULT: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"/>
@@ -1433,5 +1570,181 @@
<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"/>
+ <keyword type="constant" name="NM_STATE_UNKNOWN" link="libnm-util-NetworkManager.html#NM-STATE-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_STATE_ASLEEP" link="libnm-util-NetworkManager.html#NM-STATE-ASLEEP:CAPS"/>
+ <keyword type="constant" name="NM_STATE_DISCONNECTED" link="libnm-util-NetworkManager.html#NM-STATE-DISCONNECTED:CAPS"/>
+ <keyword type="constant" name="NM_STATE_DISCONNECTING" link="libnm-util-NetworkManager.html#NM-STATE-DISCONNECTING:CAPS"/>
+ <keyword type="constant" name="NM_STATE_CONNECTING" link="libnm-util-NetworkManager.html#NM-STATE-CONNECTING:CAPS"/>
+ <keyword type="constant" name="NM_STATE_CONNECTED_LOCAL" link="libnm-util-NetworkManager.html#NM-STATE-CONNECTED-LOCAL:CAPS"/>
+ <keyword type="constant" name="NM_STATE_CONNECTED_SITE" link="libnm-util-NetworkManager.html#NM-STATE-CONNECTED-SITE:CAPS"/>
+ <keyword type="constant" name="NM_STATE_CONNECTED_GLOBAL" link="libnm-util-NetworkManager.html#NM-STATE-CONNECTED-GLOBAL:CAPS"/>
+ <keyword type="constant" name="NM_CONNECTIVITY_UNKNOWN" link="libnm-util-NetworkManager.html#NM-CONNECTIVITY-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_CONNECTIVITY_NONE" link="libnm-util-NetworkManager.html#NM-CONNECTIVITY-NONE:CAPS"/>
+ <keyword type="constant" name="NM_CONNECTIVITY_PORTAL" link="libnm-util-NetworkManager.html#NM-CONNECTIVITY-PORTAL:CAPS"/>
+ <keyword type="constant" name="NM_CONNECTIVITY_LIMITED" link="libnm-util-NetworkManager.html#NM-CONNECTIVITY-LIMITED:CAPS"/>
+ <keyword type="constant" name="NM_CONNECTIVITY_FULL" link="libnm-util-NetworkManager.html#NM-CONNECTIVITY-FULL:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_TYPE_UNKNOWN" link="libnm-util-NetworkManager.html#NM-DEVICE-TYPE-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_TYPE_ETHERNET" link="libnm-util-NetworkManager.html#NM-DEVICE-TYPE-ETHERNET:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_TYPE_WIFI" link="libnm-util-NetworkManager.html#NM-DEVICE-TYPE-WIFI:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_TYPE_UNUSED1" link="libnm-util-NetworkManager.html#NM-DEVICE-TYPE-UNUSED1:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_TYPE_UNUSED2" link="libnm-util-NetworkManager.html#NM-DEVICE-TYPE-UNUSED2:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_TYPE_BT" link="libnm-util-NetworkManager.html#NM-DEVICE-TYPE-BT:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_TYPE_OLPC_MESH" link="libnm-util-NetworkManager.html#NM-DEVICE-TYPE-OLPC-MESH:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_TYPE_WIMAX" link="libnm-util-NetworkManager.html#NM-DEVICE-TYPE-WIMAX:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_TYPE_MODEM" link="libnm-util-NetworkManager.html#NM-DEVICE-TYPE-MODEM:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_TYPE_INFINIBAND" link="libnm-util-NetworkManager.html#NM-DEVICE-TYPE-INFINIBAND:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_TYPE_BOND" link="libnm-util-NetworkManager.html#NM-DEVICE-TYPE-BOND:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_TYPE_VLAN" link="libnm-util-NetworkManager.html#NM-DEVICE-TYPE-VLAN:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_TYPE_ADSL" link="libnm-util-NetworkManager.html#NM-DEVICE-TYPE-ADSL:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_TYPE_BRIDGE" link="libnm-util-NetworkManager.html#NM-DEVICE-TYPE-BRIDGE:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_TYPE_GENERIC" link="libnm-util-NetworkManager.html#NM-DEVICE-TYPE-GENERIC:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_TYPE_TEAM" link="libnm-util-NetworkManager.html#NM-DEVICE-TYPE-TEAM:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_CAP_NONE" link="libnm-util-NetworkManager.html#NM-DEVICE-CAP-NONE:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_CAP_NM_SUPPORTED" link="libnm-util-NetworkManager.html#NM-DEVICE-CAP-NM-SUPPORTED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_CAP_CARRIER_DETECT" link="libnm-util-NetworkManager.html#NM-DEVICE-CAP-CARRIER-DETECT:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_CAP_IS_SOFTWARE" link="libnm-util-NetworkManager.html#NM-DEVICE-CAP-IS-SOFTWARE:CAPS"/>
+ <keyword type="constant" name="NM_WIFI_DEVICE_CAP_NONE" link="libnm-util-NetworkManager.html#NM-WIFI-DEVICE-CAP-NONE:CAPS"/>
+ <keyword type="constant" name="NM_WIFI_DEVICE_CAP_CIPHER_WEP40" link="libnm-util-NetworkManager.html#NM-WIFI-DEVICE-CAP-CIPHER-WEP40:CAPS"/>
+ <keyword type="constant" name="NM_WIFI_DEVICE_CAP_CIPHER_WEP104" link="libnm-util-NetworkManager.html#NM-WIFI-DEVICE-CAP-CIPHER-WEP104:CAPS"/>
+ <keyword type="constant" name="NM_WIFI_DEVICE_CAP_CIPHER_TKIP" link="libnm-util-NetworkManager.html#NM-WIFI-DEVICE-CAP-CIPHER-TKIP:CAPS"/>
+ <keyword type="constant" name="NM_WIFI_DEVICE_CAP_CIPHER_CCMP" link="libnm-util-NetworkManager.html#NM-WIFI-DEVICE-CAP-CIPHER-CCMP:CAPS"/>
+ <keyword type="constant" name="NM_WIFI_DEVICE_CAP_WPA" link="libnm-util-NetworkManager.html#NM-WIFI-DEVICE-CAP-WPA:CAPS"/>
+ <keyword type="constant" name="NM_WIFI_DEVICE_CAP_RSN" link="libnm-util-NetworkManager.html#NM-WIFI-DEVICE-CAP-RSN:CAPS"/>
+ <keyword type="constant" name="NM_WIFI_DEVICE_CAP_AP" link="libnm-util-NetworkManager.html#NM-WIFI-DEVICE-CAP-AP:CAPS"/>
+ <keyword type="constant" name="NM_WIFI_DEVICE_CAP_ADHOC" link="libnm-util-NetworkManager.html#NM-WIFI-DEVICE-CAP-ADHOC:CAPS"/>
+ <keyword type="constant" name="NM_802_11_AP_FLAGS_NONE" link="libnm-util-NetworkManager.html#NM-802-11-AP-FLAGS-NONE:CAPS"/>
+ <keyword type="constant" name="NM_802_11_AP_FLAGS_PRIVACY" link="libnm-util-NetworkManager.html#NM-802-11-AP-FLAGS-PRIVACY:CAPS"/>
+ <keyword type="constant" name="NM_802_11_AP_SEC_NONE" link="libnm-util-NetworkManager.html#NM-802-11-AP-SEC-NONE:CAPS"/>
+ <keyword type="constant" name="NM_802_11_AP_SEC_PAIR_WEP40" link="libnm-util-NetworkManager.html#NM-802-11-AP-SEC-PAIR-WEP40:CAPS"/>
+ <keyword type="constant" name="NM_802_11_AP_SEC_PAIR_WEP104" link="libnm-util-NetworkManager.html#NM-802-11-AP-SEC-PAIR-WEP104:CAPS"/>
+ <keyword type="constant" name="NM_802_11_AP_SEC_PAIR_TKIP" link="libnm-util-NetworkManager.html#NM-802-11-AP-SEC-PAIR-TKIP:CAPS"/>
+ <keyword type="constant" name="NM_802_11_AP_SEC_PAIR_CCMP" link="libnm-util-NetworkManager.html#NM-802-11-AP-SEC-PAIR-CCMP:CAPS"/>
+ <keyword type="constant" name="NM_802_11_AP_SEC_GROUP_WEP40" link="libnm-util-NetworkManager.html#NM-802-11-AP-SEC-GROUP-WEP40:CAPS"/>
+ <keyword type="constant" name="NM_802_11_AP_SEC_GROUP_WEP104" link="libnm-util-NetworkManager.html#NM-802-11-AP-SEC-GROUP-WEP104:CAPS"/>
+ <keyword type="constant" name="NM_802_11_AP_SEC_GROUP_TKIP" link="libnm-util-NetworkManager.html#NM-802-11-AP-SEC-GROUP-TKIP:CAPS"/>
+ <keyword type="constant" name="NM_802_11_AP_SEC_GROUP_CCMP" link="libnm-util-NetworkManager.html#NM-802-11-AP-SEC-GROUP-CCMP:CAPS"/>
+ <keyword type="constant" name="NM_802_11_AP_SEC_KEY_MGMT_PSK" link="libnm-util-NetworkManager.html#NM-802-11-AP-SEC-KEY-MGMT-PSK:CAPS"/>
+ <keyword type="constant" name="NM_802_11_AP_SEC_KEY_MGMT_802_1X" link="libnm-util-NetworkManager.html#NM-802-11-AP-SEC-KEY-MGMT-802-1X:CAPS"/>
+ <keyword type="constant" name="NM_802_11_MODE_UNKNOWN" link="libnm-util-NetworkManager.html#NM-802-11-MODE-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_802_11_MODE_ADHOC" link="libnm-util-NetworkManager.html#NM-802-11-MODE-ADHOC:CAPS"/>
+ <keyword type="constant" name="NM_802_11_MODE_INFRA" link="libnm-util-NetworkManager.html#NM-802-11-MODE-INFRA:CAPS"/>
+ <keyword type="constant" name="NM_802_11_MODE_AP" link="libnm-util-NetworkManager.html#NM-802-11-MODE-AP:CAPS"/>
+ <keyword type="constant" name="NM_BT_CAPABILITY_NONE" link="libnm-util-NetworkManager.html#NM-BT-CAPABILITY-NONE:CAPS"/>
+ <keyword type="constant" name="NM_BT_CAPABILITY_DUN" link="libnm-util-NetworkManager.html#NM-BT-CAPABILITY-DUN:CAPS"/>
+ <keyword type="constant" name="NM_BT_CAPABILITY_NAP" link="libnm-util-NetworkManager.html#NM-BT-CAPABILITY-NAP:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_MODEM_CAPABILITY_NONE" link="libnm-util-NetworkManager.html#NM-DEVICE-MODEM-CAPABILITY-NONE:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_MODEM_CAPABILITY_POTS" link="libnm-util-NetworkManager.html#NM-DEVICE-MODEM-CAPABILITY-POTS:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO" link="libnm-util-NetworkManager.html#NM-DEVICE-MODEM-CAPABILITY-CDMA-EVDO:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS" link="libnm-util-NetworkManager.html#NM-DEVICE-MODEM-CAPABILITY-GSM-UMTS:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_MODEM_CAPABILITY_LTE" link="libnm-util-NetworkManager.html#NM-DEVICE-MODEM-CAPABILITY-LTE:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_UNKNOWN" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_UNMANAGED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-UNMANAGED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_UNAVAILABLE" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-UNAVAILABLE:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_DISCONNECTED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-DISCONNECTED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_PREPARE" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-PREPARE:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_CONFIG" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-CONFIG:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_NEED_AUTH" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-NEED-AUTH:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_IP_CONFIG" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-IP-CONFIG:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_IP_CHECK" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-IP-CHECK:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_SECONDARIES" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-SECONDARIES:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_ACTIVATED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-ACTIVATED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_DEACTIVATING" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-DEACTIVATING:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_FAILED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_NONE" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-NONE:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_UNKNOWN" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_NOW_MANAGED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-NOW-MANAGED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_NOW_UNMANAGED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-NOW-UNMANAGED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_CONFIG_FAILED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-CONFIG-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-IP-CONFIG-UNAVAILABLE:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-IP-CONFIG-EXPIRED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_NO_SECRETS" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-NO-SECRETS:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-SUPPLICANT-DISCONNECT:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_SUPPLICANT_CONFIG_FAILED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-SUPPLICANT-CONFIG-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-SUPPLICANT-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-SUPPLICANT-TIMEOUT:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_PPP_START_FAILED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-PPP-START-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_PPP_DISCONNECT" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-PPP-DISCONNECT:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_PPP_FAILED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-PPP-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_DHCP_START_FAILED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-DHCP-START-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_DHCP_ERROR" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-DHCP-ERROR:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_DHCP_FAILED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-DHCP-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_SHARED_START_FAILED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-SHARED-START-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_SHARED_FAILED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-SHARED-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_AUTOIP_START_FAILED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-AUTOIP-START-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_AUTOIP_ERROR" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-AUTOIP-ERROR:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_AUTOIP_FAILED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-AUTOIP-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_MODEM_BUSY" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-MODEM-BUSY:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_MODEM_NO_DIAL_TONE" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-MODEM-NO-DIAL-TONE:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-MODEM-NO-CARRIER:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_MODEM_DIAL_TIMEOUT" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-MODEM-DIAL-TIMEOUT:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_MODEM_DIAL_FAILED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-MODEM-DIAL-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-MODEM-INIT-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_GSM_APN_FAILED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-GSM-APN-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_GSM_REGISTRATION_NOT_SEARCHING" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-GSM-REGISTRATION-NOT-SEARCHING:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_GSM_REGISTRATION_DENIED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-GSM-REGISTRATION-DENIED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_GSM_REGISTRATION_TIMEOUT" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-GSM-REGISTRATION-TIMEOUT:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_GSM_REGISTRATION_FAILED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-GSM-REGISTRATION-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_GSM_PIN_CHECK_FAILED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-GSM-PIN-CHECK-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_FIRMWARE_MISSING" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-FIRMWARE-MISSING:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_REMOVED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-REMOVED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_SLEEPING" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-SLEEPING:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_CONNECTION_REMOVED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-CONNECTION-REMOVED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_USER_REQUESTED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-USER-REQUESTED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_CARRIER" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-CARRIER:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-CONNECTION-ASSUMED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_SUPPLICANT_AVAILABLE" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-SUPPLICANT-AVAILABLE:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_MODEM_NOT_FOUND" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-MODEM-NOT-FOUND:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_BT_FAILED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-BT-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_GSM_SIM_NOT_INSERTED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-GSM-SIM-NOT-INSERTED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_GSM_SIM_PIN_REQUIRED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-GSM-SIM-PIN-REQUIRED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_GSM_SIM_PUK_REQUIRED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-GSM-SIM-PUK-REQUIRED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_GSM_SIM_WRONG" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-GSM-SIM-WRONG:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_INFINIBAND_MODE" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-INFINIBAND-MODE:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_DEPENDENCY_FAILED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-DEPENDENCY-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_BR2684_FAILED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-BR2684-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_MODEM_MANAGER_UNAVAILABLE" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-MODEM-MANAGER-UNAVAILABLE:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_SSID_NOT_FOUND" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-SSID-NOT-FOUND:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_SECONDARY_CONNECTION_FAILED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-SECONDARY-CONNECTION-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_DCB_FCOE_FAILED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-DCB-FCOE-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_TEAMD_CONTROL_FAILED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-TEAMD-CONTROL-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_MODEM_FAILED" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-MODEM-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_MODEM_AVAILABLE" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-MODEM-AVAILABLE:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_SIM_PIN_INCORRECT" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-SIM-PIN-INCORRECT:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_LAST" link="libnm-util-NetworkManager.html#NM-DEVICE-STATE-REASON-LAST:CAPS"/>
+ <keyword type="constant" name="NM_ACTIVE_CONNECTION_STATE_UNKNOWN" link="libnm-util-NetworkManager.html#NM-ACTIVE-CONNECTION-STATE-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_ACTIVE_CONNECTION_STATE_ACTIVATING" link="libnm-util-NetworkManager.html#NM-ACTIVE-CONNECTION-STATE-ACTIVATING:CAPS"/>
+ <keyword type="constant" name="NM_ACTIVE_CONNECTION_STATE_ACTIVATED" link="libnm-util-NetworkManager.html#NM-ACTIVE-CONNECTION-STATE-ACTIVATED:CAPS"/>
+ <keyword type="constant" name="NM_ACTIVE_CONNECTION_STATE_DEACTIVATING" link="libnm-util-NetworkManager.html#NM-ACTIVE-CONNECTION-STATE-DEACTIVATING:CAPS"/>
+ <keyword type="constant" name="NM_ACTIVE_CONNECTION_STATE_DEACTIVATED" link="libnm-util-NetworkManager.html#NM-ACTIVE-CONNECTION-STATE-DEACTIVATED:CAPS"/>
+ <keyword type="constant" name="NM_VPN_SERVICE_STATE_UNKNOWN" link="libnm-util-NetworkManagerVPN.html#NM-VPN-SERVICE-STATE-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_VPN_SERVICE_STATE_INIT" link="libnm-util-NetworkManagerVPN.html#NM-VPN-SERVICE-STATE-INIT:CAPS"/>
+ <keyword type="constant" name="NM_VPN_SERVICE_STATE_SHUTDOWN" link="libnm-util-NetworkManagerVPN.html#NM-VPN-SERVICE-STATE-SHUTDOWN:CAPS"/>
+ <keyword type="constant" name="NM_VPN_SERVICE_STATE_STARTING" link="libnm-util-NetworkManagerVPN.html#NM-VPN-SERVICE-STATE-STARTING:CAPS"/>
+ <keyword type="constant" name="NM_VPN_SERVICE_STATE_STARTED" link="libnm-util-NetworkManagerVPN.html#NM-VPN-SERVICE-STATE-STARTED:CAPS"/>
+ <keyword type="constant" name="NM_VPN_SERVICE_STATE_STOPPING" link="libnm-util-NetworkManagerVPN.html#NM-VPN-SERVICE-STATE-STOPPING:CAPS"/>
+ <keyword type="constant" name="NM_VPN_SERVICE_STATE_STOPPED" link="libnm-util-NetworkManagerVPN.html#NM-VPN-SERVICE-STATE-STOPPED:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_UNKNOWN" link="libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_PREPARE" link="libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-PREPARE:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_NEED_AUTH" link="libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-NEED-AUTH:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_CONNECT" link="libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-CONNECT:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_IP_CONFIG_GET" link="libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-IP-CONFIG-GET:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_ACTIVATED" link="libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-ACTIVATED:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_FAILED" link="libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_DISCONNECTED" link="libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-DISCONNECTED:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_REASON_UNKNOWN" link="libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-REASON-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_REASON_NONE" link="libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-REASON-NONE:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_REASON_USER_DISCONNECTED" link="libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-REASON-USER-DISCONNECTED:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_REASON_DEVICE_DISCONNECTED" link="libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-REASON-DEVICE-DISCONNECTED:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_REASON_SERVICE_STOPPED" link="libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-REASON-SERVICE-STOPPED:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_REASON_IP_CONFIG_INVALID" link="libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-REASON-IP-CONFIG-INVALID:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_REASON_CONNECT_TIMEOUT" link="libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-REASON-CONNECT-TIMEOUT:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_TIMEOUT" link="libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-REASON-SERVICE-START-TIMEOUT:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_FAILED" link="libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-REASON-SERVICE-START-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_REASON_NO_SECRETS" link="libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-REASON-NO-SECRETS:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_REASON_LOGIN_FAILED" link="libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-REASON-LOGIN-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_REASON_CONNECTION_REMOVED" link="libnm-util-NetworkManagerVPN.html#NM-VPN-CONNECTION-STATE-REASON-CONNECTION-REMOVED:CAPS"/>
+ <keyword type="constant" name="NM_VPN_PLUGIN_FAILURE_LOGIN_FAILED" link="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-FAILURE-LOGIN-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_VPN_PLUGIN_FAILURE_CONNECT_FAILED" link="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-FAILURE-CONNECT-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_VPN_PLUGIN_FAILURE_BAD_IP_CONFIG" link="libnm-util-NetworkManagerVPN.html#NM-VPN-PLUGIN-FAILURE-BAD-IP-CONFIG:CAPS"/>
</functions>
</book>
diff --git a/docs/libnm-util/html/object-tree.html b/docs/libnm-util/html/object-tree.html
index 6cd0dcde9..c073e707a 100644
--- a/docs/libnm-util/html/object-tree.html
+++ b/docs/libnm-util/html/object-tree.html
@@ -6,14 +6,14 @@
<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="prev" href="libnm-util-NetworkManagerVPN.html" title="NetworkManagerVPN">
<link rel="next" href="api-index-full.html" title="API Index">
<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-util-nm-utils.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="libnm-util-NetworkManagerVPN.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>
diff --git a/docs/libnm-util/libnm-util-docs.sgml b/docs/libnm-util/libnm-util-docs.sgml
index 2a23a1736..14139181d 100644
--- a/docs/libnm-util/libnm-util-docs.sgml
+++ b/docs/libnm-util/libnm-util-docs.sgml
@@ -73,6 +73,8 @@
<xi:include href="xml/nm-setting-pppoe.xml"/>
<xi:include href="xml/nm-setting-vpn.xml"/>
<xi:include href="xml/nm-utils.xml"/>
+ <xi:include href="xml/NetworkManager.xml"/>
+ <xi:include href="xml/NetworkManagerVPN.xml"/>
</chapter>
<chapter id="object-tree">
diff --git a/docs/libnm-util/libnm-util-sections.txt b/docs/libnm-util/libnm-util-sections.txt
index 69bb1dfa1..89afa31a0 100644
--- a/docs/libnm-util/libnm-util-sections.txt
+++ b/docs/libnm-util/libnm-util-sections.txt
@@ -1,4 +1,128 @@
<SECTION>
+<FILE>NetworkManager</FILE>
+NM_DBUS_SERVICE
+NM_DBUS_PATH
+NM_DBUS_INTERFACE
+NM_DBUS_INTERFACE_DEVICE
+NM_DBUS_INTERFACE_DEVICE_WIRED
+NM_DBUS_INTERFACE_DEVICE_ADSL
+NM_DBUS_INTERFACE_DEVICE_WIRELESS
+NM_DBUS_INTERFACE_DEVICE_BLUETOOTH
+NM_DBUS_INTERFACE_DEVICE_OLPC_MESH
+NM_DBUS_PATH_ACCESS_POINT
+NM_DBUS_INTERFACE_ACCESS_POINT
+NM_DBUS_INTERFACE_DEVICE_MODEM
+NM_DBUS_INTERFACE_DEVICE_WIMAX
+NM_DBUS_INTERFACE_WIMAX_NSP
+NM_DBUS_PATH_WIMAX_NSP
+NM_DBUS_INTERFACE_ACTIVE_CONNECTION
+NM_DBUS_INTERFACE_IP4_CONFIG
+NM_DBUS_INTERFACE_DHCP4_CONFIG
+NM_DBUS_INTERFACE_IP6_CONFIG
+NM_DBUS_INTERFACE_DHCP6_CONFIG
+NM_DBUS_INTERFACE_DEVICE_INFINIBAND
+NM_DBUS_INTERFACE_DEVICE_BOND
+NM_DBUS_INTERFACE_DEVICE_TEAM
+NM_DBUS_INTERFACE_DEVICE_VLAN
+NM_DBUS_INTERFACE_DEVICE_BRIDGE
+NM_DBUS_INTERFACE_DEVICE_GENERIC
+NM_DBUS_INTERFACE_DEVICE_VETH
+NM_DBUS_INTERFACE_DEVICE_TUN
+NM_DBUS_INTERFACE_DEVICE_MACVLAN
+NM_DBUS_INTERFACE_DEVICE_VXLAN
+NM_DBUS_INTERFACE_DEVICE_GRE
+NM_DBUS_IFACE_SETTINGS
+NM_DBUS_PATH_SETTINGS
+NM_DBUS_IFACE_SETTINGS_CONNECTION
+NM_DBUS_PATH_SETTINGS_CONNECTION
+NM_DBUS_IFACE_SETTINGS_CONNECTION_SECRETS
+NM_DBUS_INTERFACE_AGENT_MANAGER
+NM_DBUS_PATH_AGENT_MANAGER
+NM_DBUS_INTERFACE_SECRET_AGENT
+NM_DBUS_PATH_SECRET_AGENT
+NMState
+NM_STATE_CONNECTED
+NMConnectivityState
+NMDeviceType
+NMDeviceCapabilities
+NMDeviceWifiCapabilities
+NM80211ApFlags
+NM80211ApSecurityFlags
+NM80211Mode
+NMBluetoothCapabilities
+NMDeviceModemCapabilities
+NMDeviceState
+NMDeviceStateReason
+NMActiveConnectionState
+</SECTION>
+
+<SECTION>
+<FILE>NetworkManagerVPN</FILE>
+NM_DBUS_PATH_VPN
+NM_DBUS_INTERFACE_VPN
+NM_DBUS_PATH_VPN_CONNECTION
+NM_DBUS_INTERFACE_VPN_CONNECTION
+NM_VPN_DBUS_PLUGIN_PATH
+NM_VPN_DBUS_PLUGIN_INTERFACE
+NM_DBUS_NO_ACTIVE_VPN_CONNECTION
+NM_DBUS_NO_VPN_CONNECTIONS
+NM_DBUS_INVALID_VPN_CONNECTION
+NM_DBUS_VPN_ERROR_PREFIX
+NM_DBUS_VPN_STARTING_IN_PROGRESS
+NM_DBUS_VPN_ALREADY_STARTED
+NM_DBUS_VPN_STOPPING_IN_PROGRESS
+NM_DBUS_VPN_ALREADY_STOPPED
+NM_DBUS_VPN_WRONG_STATE
+NM_DBUS_VPN_BAD_ARGUMENTS
+NM_DBUS_VPN_INTERACTIVE_NOT_SUPPORTED
+NM_DBUS_VPN_SIGNAL_LOGIN_BANNER
+NM_DBUS_VPN_SIGNAL_LOGIN_FAILED
+NM_DBUS_VPN_SIGNAL_LAUNCH_FAILED
+NM_DBUS_VPN_SIGNAL_CONNECT_FAILED
+NM_DBUS_VPN_SIGNAL_VPN_CONFIG_BAD
+NM_DBUS_VPN_SIGNAL_IP_CONFIG_BAD
+NM_DBUS_VPN_SIGNAL_STATE_CHANGE
+NM_DBUS_VPN_SIGNAL_IP4_CONFIG
+NMVPNServiceState
+NMVPNConnectionState
+NMVPNConnectionStateReason
+NMVPNPluginFailure
+NM_VPN_PLUGIN_CONFIG_TUNDEV
+NM_VPN_PLUGIN_CONFIG_BANNER
+NM_VPN_PLUGIN_CONFIG_EXT_GATEWAY
+NM_VPN_PLUGIN_CONFIG_MTU
+NM_VPN_PLUGIN_CONFIG_HAS_IP4
+NM_VPN_PLUGIN_CONFIG_HAS_IP6
+NM_VPN_PLUGIN_CAN_PERSIST
+NM_VPN_PLUGIN_IP4_CONFIG_INT_GATEWAY
+NM_VPN_PLUGIN_IP4_CONFIG_ADDRESS
+NM_VPN_PLUGIN_IP4_CONFIG_PTP
+NM_VPN_PLUGIN_IP4_CONFIG_PREFIX
+NM_VPN_PLUGIN_IP4_CONFIG_DNS
+NM_VPN_PLUGIN_IP4_CONFIG_NBNS
+NM_VPN_PLUGIN_IP4_CONFIG_MSS
+NM_VPN_PLUGIN_IP4_CONFIG_DOMAIN
+NM_VPN_PLUGIN_IP4_CONFIG_DOMAINS
+NM_VPN_PLUGIN_IP4_CONFIG_ROUTES
+NM_VPN_PLUGIN_IP4_CONFIG_NEVER_DEFAULT
+NM_VPN_PLUGIN_IP4_CONFIG_GATEWAY
+NM_VPN_PLUGIN_IP4_CONFIG_BANNER
+NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY
+NM_VPN_PLUGIN_IP4_CONFIG_MTU
+NM_VPN_PLUGIN_IP4_CONFIG_TUNDEV
+NM_VPN_PLUGIN_IP6_CONFIG_INT_GATEWAY
+NM_VPN_PLUGIN_IP6_CONFIG_ADDRESS
+NM_VPN_PLUGIN_IP6_CONFIG_PTP
+NM_VPN_PLUGIN_IP6_CONFIG_PREFIX
+NM_VPN_PLUGIN_IP6_CONFIG_DNS
+NM_VPN_PLUGIN_IP6_CONFIG_MSS
+NM_VPN_PLUGIN_IP6_CONFIG_DOMAIN
+NM_VPN_PLUGIN_IP6_CONFIG_DOMAINS
+NM_VPN_PLUGIN_IP6_CONFIG_ROUTES
+NM_VPN_PLUGIN_IP6_CONFIG_NEVER_DEFAULT
+</SECTION>
+
+<SECTION>
<FILE>nm-connection</FILE>
<TITLE>NMConnection</TITLE>
NM_CONNECTION_SECRETS_UPDATED
@@ -6,6 +130,7 @@ NM_CONNECTION_SECRETS_CLEARED
NM_CONNECTION_CHANGED
NM_CONNECTION_PATH
NMConnectionError
+NM_CONNECTION_NORMALIZE_PARAM_IP6_CONFIG_METHOD
NM_CONNECTION_ERROR
nm_connection_error_quark
NMConnection
@@ -23,6 +148,7 @@ nm_connection_replace_settings_from_connection
nm_connection_compare
nm_connection_diff
nm_connection_verify
+nm_connection_normalize
nm_connection_need_secrets
nm_connection_clear_secrets
nm_connection_clear_secrets_with_flags
@@ -30,6 +156,7 @@ nm_connection_update_secrets
nm_connection_set_path
nm_connection_get_path
nm_connection_get_virtual_iface_name
+nm_connection_get_interface_name
nm_connection_is_type
nm_connection_for_each_setting_value
nm_connection_to_hash
@@ -330,6 +457,7 @@ 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
+NM_SETTING_BOND_OPTION_LACP_RATE
NMSettingBond
NMSettingBondClass
nm_setting_bond_new
@@ -664,6 +792,7 @@ NM_SETTING_IP4_CONFIG_DNS
NM_SETTING_IP4_CONFIG_DNS_SEARCH
NM_SETTING_IP4_CONFIG_ADDRESSES
NM_SETTING_IP4_CONFIG_ROUTES
+NM_SETTING_IP4_CONFIG_ROUTE_METRIC
NM_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES
NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS
NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID
@@ -730,6 +859,7 @@ 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_route_metric
nm_setting_ip4_config_get_ignore_auto_routes
nm_setting_ip4_config_get_ignore_auto_dns
nm_setting_ip4_config_get_dhcp_client_id
@@ -761,6 +891,7 @@ NM_SETTING_IP6_CONFIG_DNS
NM_SETTING_IP6_CONFIG_DNS_SEARCH
NM_SETTING_IP6_CONFIG_ADDRESSES
NM_SETTING_IP6_CONFIG_ROUTES
+NM_SETTING_IP6_CONFIG_ROUTE_METRIC
NM_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES
NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS
NM_SETTING_IP6_CONFIG_NEVER_DEFAULT
@@ -829,6 +960,7 @@ 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_route_metric
nm_setting_ip6_config_get_ignore_auto_dns
nm_setting_ip6_config_get_dhcp_hostname
nm_setting_ip6_config_get_never_default
@@ -1081,6 +1213,7 @@ NM_SETTING_VPN_ERROR
nm_setting_vpn_error_quark
NM_SETTING_VPN_SERVICE_TYPE
NM_SETTING_VPN_USER_NAME
+NM_SETTING_VPN_PERSISTENT
NM_SETTING_VPN_DATA
NM_SETTING_VPN_SECRETS
NMSettingVPN
@@ -1089,6 +1222,7 @@ NMVPNIterFunc
nm_setting_vpn_new
nm_setting_vpn_get_service_type
nm_setting_vpn_get_user_name
+nm_setting_vpn_get_persistent
nm_setting_vpn_get_num_data_items
nm_setting_vpn_add_data_item
nm_setting_vpn_get_data_item
@@ -1347,6 +1481,8 @@ nm_utils_uuid_generate_from_string
nm_utils_rsa_key_encrypt
nm_utils_rsa_key_encrypt_aes
nm_utils_file_is_pkcs12
+NMUtilsFileSearchInPathsPredicate
+nm_utils_file_search_in_paths
nm_utils_wifi_freq_to_channel
nm_utils_wifi_channel_to_freq
nm_utils_wifi_find_next_channel
diff --git a/docs/libnm-util/tmpl/NetworkManager.sgml b/docs/libnm-util/tmpl/NetworkManager.sgml
new file mode 100644
index 000000000..44e92a733
--- /dev/null
+++ b/docs/libnm-util/tmpl/NetworkManager.sgml
@@ -0,0 +1,535 @@
+<!-- ##### SECTION Title ##### -->
+NetworkManager
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_DBUS_SERVICE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_PATH ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE_WIRED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE_ADSL ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE_WIRELESS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE_BLUETOOTH ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE_OLPC_MESH ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_PATH_ACCESS_POINT ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_ACCESS_POINT ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE_MODEM ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE_WIMAX ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_WIMAX_NSP ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_PATH_WIMAX_NSP ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_ACTIVE_CONNECTION ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_IP4_CONFIG ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DHCP4_CONFIG ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_IP6_CONFIG ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DHCP6_CONFIG ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE_INFINIBAND ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE_BOND ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE_TEAM ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE_VLAN ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE_BRIDGE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE_GENERIC ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE_VETH ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE_TUN ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE_MACVLAN ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE_VXLAN ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE_GRE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_IFACE_SETTINGS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_PATH_SETTINGS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_IFACE_SETTINGS_CONNECTION ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_PATH_SETTINGS_CONNECTION ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_IFACE_SETTINGS_CONNECTION_SECRETS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_AGENT_MANAGER ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_PATH_AGENT_MANAGER ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_SECRET_AGENT ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_PATH_SECRET_AGENT ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### ENUM NMState ##### -->
+<para>
+
+</para>
+
+@NM_STATE_UNKNOWN:
+@NM_STATE_ASLEEP:
+@NM_STATE_DISCONNECTED:
+@NM_STATE_DISCONNECTING:
+@NM_STATE_CONNECTING:
+@NM_STATE_CONNECTED_LOCAL:
+@NM_STATE_CONNECTED_SITE:
+@NM_STATE_CONNECTED_GLOBAL:
+
+<!-- ##### MACRO NM_STATE_CONNECTED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### ENUM NMConnectivityState ##### -->
+<para>
+
+</para>
+
+@NM_CONNECTIVITY_UNKNOWN:
+@NM_CONNECTIVITY_NONE:
+@NM_CONNECTIVITY_PORTAL:
+@NM_CONNECTIVITY_LIMITED:
+@NM_CONNECTIVITY_FULL:
+
+<!-- ##### ENUM NMDeviceType ##### -->
+<para>
+
+</para>
+
+@NM_DEVICE_TYPE_UNKNOWN:
+@NM_DEVICE_TYPE_ETHERNET:
+@NM_DEVICE_TYPE_WIFI:
+@NM_DEVICE_TYPE_UNUSED1:
+@NM_DEVICE_TYPE_UNUSED2:
+@NM_DEVICE_TYPE_BT:
+@NM_DEVICE_TYPE_OLPC_MESH:
+@NM_DEVICE_TYPE_WIMAX:
+@NM_DEVICE_TYPE_MODEM:
+@NM_DEVICE_TYPE_INFINIBAND:
+@NM_DEVICE_TYPE_BOND:
+@NM_DEVICE_TYPE_VLAN:
+@NM_DEVICE_TYPE_ADSL:
+@NM_DEVICE_TYPE_BRIDGE:
+@NM_DEVICE_TYPE_GENERIC:
+@NM_DEVICE_TYPE_TEAM:
+
+<!-- ##### ENUM NMDeviceCapabilities ##### -->
+<para>
+
+</para>
+
+@NM_DEVICE_CAP_NONE:
+@NM_DEVICE_CAP_NM_SUPPORTED:
+@NM_DEVICE_CAP_CARRIER_DETECT:
+@NM_DEVICE_CAP_IS_SOFTWARE:
+
+<!-- ##### ENUM NMDeviceWifiCapabilities ##### -->
+<para>
+
+</para>
+
+@NM_WIFI_DEVICE_CAP_NONE:
+@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:
+
+<!-- ##### ENUM NM80211ApFlags ##### -->
+<para>
+
+</para>
+
+@NM_802_11_AP_FLAGS_NONE:
+@NM_802_11_AP_FLAGS_PRIVACY:
+
+<!-- ##### ENUM NM80211ApSecurityFlags ##### -->
+<para>
+
+</para>
+
+@NM_802_11_AP_SEC_NONE:
+@NM_802_11_AP_SEC_PAIR_WEP40:
+@NM_802_11_AP_SEC_PAIR_WEP104:
+@NM_802_11_AP_SEC_PAIR_TKIP:
+@NM_802_11_AP_SEC_PAIR_CCMP:
+@NM_802_11_AP_SEC_GROUP_WEP40:
+@NM_802_11_AP_SEC_GROUP_WEP104:
+@NM_802_11_AP_SEC_GROUP_TKIP:
+@NM_802_11_AP_SEC_GROUP_CCMP:
+@NM_802_11_AP_SEC_KEY_MGMT_PSK:
+@NM_802_11_AP_SEC_KEY_MGMT_802_1X:
+
+<!-- ##### ENUM NM80211Mode ##### -->
+<para>
+
+</para>
+
+@NM_802_11_MODE_UNKNOWN:
+@NM_802_11_MODE_ADHOC:
+@NM_802_11_MODE_INFRA:
+@NM_802_11_MODE_AP:
+
+<!-- ##### ENUM NMBluetoothCapabilities ##### -->
+<para>
+
+</para>
+
+@NM_BT_CAPABILITY_NONE:
+@NM_BT_CAPABILITY_DUN:
+@NM_BT_CAPABILITY_NAP:
+
+<!-- ##### ENUM NMDeviceModemCapabilities ##### -->
+<para>
+
+</para>
+
+@NM_DEVICE_MODEM_CAPABILITY_NONE:
+@NM_DEVICE_MODEM_CAPABILITY_POTS:
+@NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO:
+@NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS:
+@NM_DEVICE_MODEM_CAPABILITY_LTE:
+
+<!-- ##### ENUM NMDeviceState ##### -->
+<para>
+
+</para>
+
+@NM_DEVICE_STATE_UNKNOWN:
+@NM_DEVICE_STATE_UNMANAGED:
+@NM_DEVICE_STATE_UNAVAILABLE:
+@NM_DEVICE_STATE_DISCONNECTED:
+@NM_DEVICE_STATE_PREPARE:
+@NM_DEVICE_STATE_CONFIG:
+@NM_DEVICE_STATE_NEED_AUTH:
+@NM_DEVICE_STATE_IP_CONFIG:
+@NM_DEVICE_STATE_IP_CHECK:
+@NM_DEVICE_STATE_SECONDARIES:
+@NM_DEVICE_STATE_ACTIVATED:
+@NM_DEVICE_STATE_DEACTIVATING:
+@NM_DEVICE_STATE_FAILED:
+
+<!-- ##### ENUM NMDeviceStateReason ##### -->
+<para>
+
+</para>
+
+@NM_DEVICE_STATE_REASON_NONE:
+@NM_DEVICE_STATE_REASON_UNKNOWN:
+@NM_DEVICE_STATE_REASON_NOW_MANAGED:
+@NM_DEVICE_STATE_REASON_NOW_UNMANAGED:
+@NM_DEVICE_STATE_REASON_CONFIG_FAILED:
+@NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE:
+@NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED:
+@NM_DEVICE_STATE_REASON_NO_SECRETS:
+@NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT:
+@NM_DEVICE_STATE_REASON_SUPPLICANT_CONFIG_FAILED:
+@NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED:
+@NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT:
+@NM_DEVICE_STATE_REASON_PPP_START_FAILED:
+@NM_DEVICE_STATE_REASON_PPP_DISCONNECT:
+@NM_DEVICE_STATE_REASON_PPP_FAILED:
+@NM_DEVICE_STATE_REASON_DHCP_START_FAILED:
+@NM_DEVICE_STATE_REASON_DHCP_ERROR:
+@NM_DEVICE_STATE_REASON_DHCP_FAILED:
+@NM_DEVICE_STATE_REASON_SHARED_START_FAILED:
+@NM_DEVICE_STATE_REASON_SHARED_FAILED:
+@NM_DEVICE_STATE_REASON_AUTOIP_START_FAILED:
+@NM_DEVICE_STATE_REASON_AUTOIP_ERROR:
+@NM_DEVICE_STATE_REASON_AUTOIP_FAILED:
+@NM_DEVICE_STATE_REASON_MODEM_BUSY:
+@NM_DEVICE_STATE_REASON_MODEM_NO_DIAL_TONE:
+@NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER:
+@NM_DEVICE_STATE_REASON_MODEM_DIAL_TIMEOUT:
+@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_NOT_SEARCHING:
+@NM_DEVICE_STATE_REASON_GSM_REGISTRATION_DENIED:
+@NM_DEVICE_STATE_REASON_GSM_REGISTRATION_TIMEOUT:
+@NM_DEVICE_STATE_REASON_GSM_REGISTRATION_FAILED:
+@NM_DEVICE_STATE_REASON_GSM_PIN_CHECK_FAILED:
+@NM_DEVICE_STATE_REASON_FIRMWARE_MISSING:
+@NM_DEVICE_STATE_REASON_REMOVED:
+@NM_DEVICE_STATE_REASON_SLEEPING:
+@NM_DEVICE_STATE_REASON_CONNECTION_REMOVED:
+@NM_DEVICE_STATE_REASON_USER_REQUESTED:
+@NM_DEVICE_STATE_REASON_CARRIER:
+@NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED:
+@NM_DEVICE_STATE_REASON_SUPPLICANT_AVAILABLE:
+@NM_DEVICE_STATE_REASON_MODEM_NOT_FOUND:
+@NM_DEVICE_STATE_REASON_BT_FAILED:
+@NM_DEVICE_STATE_REASON_GSM_SIM_NOT_INSERTED:
+@NM_DEVICE_STATE_REASON_GSM_SIM_PIN_REQUIRED:
+@NM_DEVICE_STATE_REASON_GSM_SIM_PUK_REQUIRED:
+@NM_DEVICE_STATE_REASON_GSM_SIM_WRONG:
+@NM_DEVICE_STATE_REASON_INFINIBAND_MODE:
+@NM_DEVICE_STATE_REASON_DEPENDENCY_FAILED:
+@NM_DEVICE_STATE_REASON_BR2684_FAILED:
+@NM_DEVICE_STATE_REASON_MODEM_MANAGER_UNAVAILABLE:
+@NM_DEVICE_STATE_REASON_SSID_NOT_FOUND:
+@NM_DEVICE_STATE_REASON_SECONDARY_CONNECTION_FAILED:
+@NM_DEVICE_STATE_REASON_DCB_FCOE_FAILED:
+@NM_DEVICE_STATE_REASON_TEAMD_CONTROL_FAILED:
+@NM_DEVICE_STATE_REASON_MODEM_FAILED:
+@NM_DEVICE_STATE_REASON_MODEM_AVAILABLE:
+@NM_DEVICE_STATE_REASON_SIM_PIN_INCORRECT:
+@NM_DEVICE_STATE_REASON_LAST:
+
+<!-- ##### ENUM NMActiveConnectionState ##### -->
+<para>
+
+</para>
+
+@NM_ACTIVE_CONNECTION_STATE_UNKNOWN:
+@NM_ACTIVE_CONNECTION_STATE_ACTIVATING:
+@NM_ACTIVE_CONNECTION_STATE_ACTIVATED:
+@NM_ACTIVE_CONNECTION_STATE_DEACTIVATING:
+@NM_ACTIVE_CONNECTION_STATE_DEACTIVATED:
+
diff --git a/docs/libnm-util/tmpl/NetworkManagerVPN.sgml b/docs/libnm-util/tmpl/NetworkManagerVPN.sgml
new file mode 100644
index 000000000..03b7f3164
--- /dev/null
+++ b/docs/libnm-util/tmpl/NetworkManagerVPN.sgml
@@ -0,0 +1,484 @@
+<!-- ##### SECTION Title ##### -->
+NetworkManagerVPN
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_DBUS_PATH_VPN ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_VPN ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_PATH_VPN_CONNECTION ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_VPN_CONNECTION ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_DBUS_PLUGIN_PATH ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_DBUS_PLUGIN_INTERFACE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_NO_ACTIVE_VPN_CONNECTION ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_NO_VPN_CONNECTIONS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INVALID_VPN_CONNECTION ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_VPN_ERROR_PREFIX ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_VPN_STARTING_IN_PROGRESS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_VPN_ALREADY_STARTED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_VPN_STOPPING_IN_PROGRESS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_VPN_ALREADY_STOPPED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_VPN_WRONG_STATE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_VPN_BAD_ARGUMENTS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_VPN_INTERACTIVE_NOT_SUPPORTED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_VPN_SIGNAL_LOGIN_BANNER ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_VPN_SIGNAL_LOGIN_FAILED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_VPN_SIGNAL_LAUNCH_FAILED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_VPN_SIGNAL_CONNECT_FAILED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_VPN_SIGNAL_VPN_CONFIG_BAD ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_VPN_SIGNAL_IP_CONFIG_BAD ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_VPN_SIGNAL_STATE_CHANGE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_VPN_SIGNAL_IP4_CONFIG ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### ENUM NMVPNServiceState ##### -->
+<para>
+
+</para>
+
+@NM_VPN_SERVICE_STATE_UNKNOWN:
+@NM_VPN_SERVICE_STATE_INIT:
+@NM_VPN_SERVICE_STATE_SHUTDOWN:
+@NM_VPN_SERVICE_STATE_STARTING:
+@NM_VPN_SERVICE_STATE_STARTED:
+@NM_VPN_SERVICE_STATE_STOPPING:
+@NM_VPN_SERVICE_STATE_STOPPED:
+
+<!-- ##### ENUM NMVPNConnectionState ##### -->
+<para>
+
+</para>
+
+@NM_VPN_CONNECTION_STATE_UNKNOWN:
+@NM_VPN_CONNECTION_STATE_PREPARE:
+@NM_VPN_CONNECTION_STATE_NEED_AUTH:
+@NM_VPN_CONNECTION_STATE_CONNECT:
+@NM_VPN_CONNECTION_STATE_IP_CONFIG_GET:
+@NM_VPN_CONNECTION_STATE_ACTIVATED:
+@NM_VPN_CONNECTION_STATE_FAILED:
+@NM_VPN_CONNECTION_STATE_DISCONNECTED:
+
+<!-- ##### ENUM NMVPNConnectionStateReason ##### -->
+<para>
+
+</para>
+
+@NM_VPN_CONNECTION_STATE_REASON_UNKNOWN:
+@NM_VPN_CONNECTION_STATE_REASON_NONE:
+@NM_VPN_CONNECTION_STATE_REASON_USER_DISCONNECTED:
+@NM_VPN_CONNECTION_STATE_REASON_DEVICE_DISCONNECTED:
+@NM_VPN_CONNECTION_STATE_REASON_SERVICE_STOPPED:
+@NM_VPN_CONNECTION_STATE_REASON_IP_CONFIG_INVALID:
+@NM_VPN_CONNECTION_STATE_REASON_CONNECT_TIMEOUT:
+@NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_TIMEOUT:
+@NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_FAILED:
+@NM_VPN_CONNECTION_STATE_REASON_NO_SECRETS:
+@NM_VPN_CONNECTION_STATE_REASON_LOGIN_FAILED:
+@NM_VPN_CONNECTION_STATE_REASON_CONNECTION_REMOVED:
+
+<!-- ##### ENUM NMVPNPluginFailure ##### -->
+<para>
+
+</para>
+
+@NM_VPN_PLUGIN_FAILURE_LOGIN_FAILED:
+@NM_VPN_PLUGIN_FAILURE_CONNECT_FAILED:
+@NM_VPN_PLUGIN_FAILURE_BAD_IP_CONFIG:
+
+<!-- ##### MACRO NM_VPN_PLUGIN_CONFIG_TUNDEV ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_CONFIG_BANNER ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_CONFIG_EXT_GATEWAY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_CONFIG_MTU ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_CONFIG_HAS_IP4 ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_CONFIG_HAS_IP6 ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_CAN_PERSIST ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP4_CONFIG_INT_GATEWAY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP4_CONFIG_ADDRESS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP4_CONFIG_PTP ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP4_CONFIG_PREFIX ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP4_CONFIG_DNS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP4_CONFIG_NBNS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP4_CONFIG_MSS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP4_CONFIG_DOMAIN ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP4_CONFIG_DOMAINS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP4_CONFIG_ROUTES ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP4_CONFIG_NEVER_DEFAULT ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP4_CONFIG_GATEWAY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP4_CONFIG_BANNER ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP4_CONFIG_MTU ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP4_CONFIG_TUNDEV ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP6_CONFIG_INT_GATEWAY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP6_CONFIG_ADDRESS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP6_CONFIG_PTP ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP6_CONFIG_PREFIX ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP6_CONFIG_DNS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP6_CONFIG_MSS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP6_CONFIG_DOMAIN ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP6_CONFIG_DOMAINS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP6_CONFIG_ROUTES ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP6_CONFIG_NEVER_DEFAULT ##### -->
+<para>
+
+</para>
+
+
+
diff --git a/docs/libnm-util/tmpl/nm-connection.sgml b/docs/libnm-util/tmpl/nm-connection.sgml
index 8054b92c7..4c0db74eb 100644
--- a/docs/libnm-util/tmpl/nm-connection.sgml
+++ b/docs/libnm-util/tmpl/nm-connection.sgml
@@ -59,6 +59,14 @@ NMConnection
@NM_CONNECTION_ERROR_CONNECTION_SETTING_NOT_FOUND:
@NM_CONNECTION_ERROR_CONNECTION_TYPE_INVALID:
@NM_CONNECTION_ERROR_SETTING_NOT_FOUND:
+@NM_CONNECTION_ERROR_INVALID_SETTING:
+
+<!-- ##### MACRO NM_CONNECTION_NORMALIZE_PARAM_IP6_CONFIG_METHOD ##### -->
+<para>
+
+</para>
+
+
<!-- ##### MACRO NM_CONNECTION_ERROR ##### -->
<para>
@@ -247,6 +255,18 @@ NMConnection
@Returns:
+<!-- ##### FUNCTION nm_connection_normalize ##### -->
+<para>
+
+</para>
+
+@connection:
+@parameters:
+@modified:
+@error:
+@Returns:
+
+
<!-- ##### FUNCTION nm_connection_need_secrets ##### -->
<para>
@@ -314,6 +334,15 @@ NMConnection
@Returns:
+<!-- ##### FUNCTION nm_connection_get_interface_name ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
<!-- ##### FUNCTION nm_connection_is_type ##### -->
<para>
diff --git a/docs/libnm-util/tmpl/nm-setting-bond.sgml b/docs/libnm-util/tmpl/nm-setting-bond.sgml
index fa5b03351..9a67232ac 100644
--- a/docs/libnm-util/tmpl/nm-setting-bond.sgml
+++ b/docs/libnm-util/tmpl/nm-setting-bond.sgml
@@ -168,6 +168,13 @@ NMSettingBond
+<!-- ##### MACRO NM_SETTING_BOND_OPTION_LACP_RATE ##### -->
+<para>
+
+</para>
+
+
+
<!-- ##### STRUCT NMSettingBond ##### -->
<para>
diff --git a/docs/libnm-util/tmpl/nm-setting-ip4-config.sgml b/docs/libnm-util/tmpl/nm-setting-ip4-config.sgml
index 106ed1d84..bf4fbee15 100644
--- a/docs/libnm-util/tmpl/nm-setting-ip4-config.sgml
+++ b/docs/libnm-util/tmpl/nm-setting-ip4-config.sgml
@@ -90,6 +90,13 @@ NMSettingIP4Config
+<!-- ##### MACRO NM_SETTING_IP4_CONFIG_ROUTE_METRIC ##### -->
+<para>
+
+</para>
+
+
+
<!-- ##### MACRO NM_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES ##### -->
<para>
@@ -406,11 +413,6 @@ NMSettingIP4Config
</para>
-<!-- ##### ARG NMSettingIP4Config:address-labels ##### -->
-<para>
-
-</para>
-
<!-- ##### ARG NMSettingIP4Config:addresses ##### -->
<para>
@@ -466,6 +468,11 @@ NMSettingIP4Config
</para>
+<!-- ##### ARG NMSettingIP4Config:route-metric ##### -->
+<para>
+
+</para>
+
<!-- ##### ARG NMSettingIP4Config:routes ##### -->
<para>
@@ -724,6 +731,15 @@ NMSettingIP4Config
@setting:
+<!-- ##### FUNCTION nm_setting_ip4_config_get_route_metric ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
<!-- ##### FUNCTION nm_setting_ip4_config_get_ignore_auto_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 6a746b5e1..1894b0a07 100644
--- a/docs/libnm-util/tmpl/nm-setting-ip6-config.sgml
+++ b/docs/libnm-util/tmpl/nm-setting-ip6-config.sgml
@@ -90,6 +90,13 @@ NMSettingIP6Config
+<!-- ##### MACRO NM_SETTING_IP6_CONFIG_ROUTE_METRIC ##### -->
+<para>
+
+</para>
+
+
+
<!-- ##### MACRO NM_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES ##### -->
<para>
@@ -466,6 +473,11 @@ NMSettingIP6Config
</para>
+<!-- ##### ARG NMSettingIP6Config:route-metric ##### -->
+<para>
+
+</para>
+
<!-- ##### ARG NMSettingIP6Config:routes ##### -->
<para>
@@ -733,6 +745,15 @@ NMSettingIP6Config
@Returns:
+<!-- ##### FUNCTION nm_setting_ip6_config_get_route_metric ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
<!-- ##### FUNCTION nm_setting_ip6_config_get_ignore_auto_dns ##### -->
<para>
diff --git a/docs/libnm-util/tmpl/nm-setting-vpn.sgml b/docs/libnm-util/tmpl/nm-setting-vpn.sgml
index f6386c185..2f8652cb9 100644
--- a/docs/libnm-util/tmpl/nm-setting-vpn.sgml
+++ b/docs/libnm-util/tmpl/nm-setting-vpn.sgml
@@ -68,6 +68,13 @@ NMSettingVPN
+<!-- ##### MACRO NM_SETTING_VPN_PERSISTENT ##### -->
+<para>
+
+</para>
+
+
+
<!-- ##### MACRO NM_SETTING_VPN_DATA ##### -->
<para>
@@ -93,6 +100,11 @@ NMSettingVPN
</para>
+<!-- ##### ARG NMSettingVPN:persistent ##### -->
+<para>
+
+</para>
+
<!-- ##### ARG NMSettingVPN:secrets ##### -->
<para>
@@ -156,6 +168,15 @@ NMSettingVPN
@Returns:
+<!-- ##### FUNCTION nm_setting_vpn_get_persistent ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
<!-- ##### FUNCTION nm_setting_vpn_get_num_data_items ##### -->
<para>
diff --git a/docs/libnm-util/tmpl/nm-setting.sgml b/docs/libnm-util/tmpl/nm-setting.sgml
index d5df34e5e..d781e4cc1 100644
--- a/docs/libnm-util/tmpl/nm-setting.sgml
+++ b/docs/libnm-util/tmpl/nm-setting.sgml
@@ -104,6 +104,8 @@ NMSetting
@NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS:
@NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS:
@NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS:
+@NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT:
+@NM_SETTING_COMPARE_FLAG_DIFF_RESULT_NO_DEFAULT:
<!-- ##### STRUCT NMSetting ##### -->
<para>
@@ -233,6 +235,8 @@ NMSetting
@NM_SETTING_DIFF_RESULT_UNKNOWN:
@NM_SETTING_DIFF_RESULT_IN_A:
@NM_SETTING_DIFF_RESULT_IN_B:
+@NM_SETTING_DIFF_RESULT_IN_A_DEFAULT:
+@NM_SETTING_DIFF_RESULT_IN_B_DEFAULT:
<!-- ##### FUNCTION nm_setting_diff ##### -->
<para>
diff --git a/docs/libnm-util/tmpl/nm-utils.sgml b/docs/libnm-util/tmpl/nm-utils.sgml
index 99a0f447c..2bb22046a 100644
--- a/docs/libnm-util/tmpl/nm-utils.sgml
+++ b/docs/libnm-util/tmpl/nm-utils.sgml
@@ -324,6 +324,31 @@ nm-utils
@Returns:
+<!-- ##### USER_FUNCTION NMUtilsFileSearchInPathsPredicate ##### -->
+<para>
+
+</para>
+
+@filename:
+@user_data:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_file_search_in_paths ##### -->
+<para>
+
+</para>
+
+@progname:
+@try_first:
+@paths:
+@file_test_flags:
+@predicate:
+@user_data:
+@error:
+@Returns:
+
+
<!-- ##### FUNCTION nm_utils_wifi_freq_to_channel ##### -->
<para>
diff --git a/docs/libnm-util/version.xml b/docs/libnm-util/version.xml
index 82e28fcb1..3eefcb9dd 100644
--- a/docs/libnm-util/version.xml
+++ b/docs/libnm-util/version.xml
@@ -1 +1 @@
-0.9.10.0
+1.0.0
diff --git a/docs/libnm/Makefile.am b/docs/libnm/Makefile.am
new file mode 100644
index 000000000..28938f89f
--- /dev/null
+++ b/docs/libnm/Makefile.am
@@ -0,0 +1,94 @@
+## Process this file with automake to produce Makefile.in
+AUTOMAKE_OPTIONS = 1.6
+
+# The name of the module
+DOC_MODULE=libnm
+
+# The top-level SGML file.
+DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.xml
+
+# The directory containing the source code. Relative to $(srcdir).
+# gtk-doc will search all .c & .h files beneath here for inline comments
+# documenting functions and macros.
+DOC_SOURCE_DIR= \
+ $(top_srcdir)/libnm-core \
+ $(top_builddir)/libnm-core \
+ $(top_srcdir)/libnm \
+ $(top_builddir)/libnm
+
+# Extra options to supply to gtkdoc-scan.
+SCAN_OPTIONS=--rebuild-types --rebuild-sections
+
+# Extra options to supply to gtkdoc-scangobj.
+SCANGOBJ_OPTIONS=--type-init-func 'g_type_init();'
+
+# Extra options to supply to gtkdoc-mkdb.
+MKDB_OPTIONS=--sgml-mode --output-format=xml
+
+# Extra options to supply to gtkdoc-fixref.
+FIXXREF_OPTIONS=
+
+# Used for dependencies.
+HFILE_GLOB=$(top_srcdir)/libnm-core/*.h $(top_srcdir)/libnm/*.h
+CFILE_GLOB=$(top_srcdir)/libnm-core/*.c $(top_srcdir)/libnm/*.c
+
+# Header files to ignore when scanning.
+IGNORE_HFILES= \
+ common.h \
+ crypto.h \
+ nm-dbus-helpers.h \
+ nm-core-internal.h \
+ nm-core-types.h \
+ nm-device-private.h \
+ nm-dhcp4-config.h \
+ nm-dhcp6-config.h \
+ nm-ip4-config.h \
+ nm-ip6-config.h \
+ nm-manager.h \
+ nm-object-cache.h \
+ nm-object-private.h \
+ nm-property-compare.h \
+ nm-remote-connection-private.h \
+ nm-remote-settings.h \
+ nm-setting-private.h \
+ nm-types.h \
+ nm-utils-private.h \
+ nm-vpn-plugin-old.h
+
+# Images to copy into HTML directory.
+HTML_IMAGES = libnm.png
+
+# Extra XML files that are included by $(DOC_MAIN_SGML_FILE).
+content_files = version.xml
+
+# Other files to distribute.
+extra_files = libnm.png
+
+
+# CFLAGS and LDFLAGS for compiling scan program. Only needed
+# if $(DOC_MODULE).types is non-empty.
+GTKDOC_CFLAGS = \
+ -I$(top_srcdir)/libnm-core \
+ -I$(top_builddir)/libnm-core \
+ -I$(top_srcdir)/libnm \
+ -I$(top_builddir)/libnm \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ $(GLIB_CFLAGS)
+
+GTKDOC_LIBS = \
+ $(top_builddir)/libnm/libnm.la \
+ $(GLIB_LIBS)
+
+
+# include common portion ...
+include $(top_srcdir)/gtk-doc.make
+
+EXTRA_DIST += version.xml.in
+
+CLEANFILES += \
+ libnm-sections.txt \
+ libnm-overrides.txt \
+ html/* \
+ tmpl/* \
+ xml/*
+
diff --git a/cli/completion/Makefile.in b/docs/libnm/Makefile.in
index 7b45c2b44..4f5a79669 100644
--- a/cli/completion/Makefile.in
+++ b/docs/libnm/Makefile.in
@@ -14,6 +14,11 @@
@SET_MAKE@
+# -*- mode: makefile -*-
+
+####################################
+# Everything below here is generic #
+####################################
VPATH = @srcdir@
am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
am__make_running_with_option = \
@@ -78,9 +83,9 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-subdir = cli/completion
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
- $(dist_completion_DATA)
+DIST_COMMON = $(top_srcdir)/gtk-doc.make $(srcdir)/Makefile.in \
+ $(srcdir)/Makefile.am $(srcdir)/version.xml.in
+subdir = docs/libnm
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
$(top_srcdir)/m4/compiler_warnings.m4 \
@@ -99,7 +104,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 =
+CONFIG_CLEAN_FILES = version.xml
CONFIG_CLEAN_VPATH_FILES =
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
@@ -120,35 +125,6 @@ am__can_run_installinfo = \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
-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)$(completiondir)"
-DATA = $(dist_completion_DATA)
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
@@ -160,6 +136,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -283,6 +261,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -302,6 +281,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -328,7 +308,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -407,12 +387,172 @@ 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
+AUTOMAKE_OPTIONS = 1.6
+
+# The name of the module
+DOC_MODULE = libnm
+
+# The top-level SGML file.
+DOC_MAIN_SGML_FILE = $(DOC_MODULE)-docs.xml
+
+# The directory containing the source code. Relative to $(srcdir).
+# gtk-doc will search all .c & .h files beneath here for inline comments
+# documenting functions and macros.
+DOC_SOURCE_DIR = \
+ $(top_srcdir)/libnm-core \
+ $(top_builddir)/libnm-core \
+ $(top_srcdir)/libnm \
+ $(top_builddir)/libnm
+
+
+# Extra options to supply to gtkdoc-scan.
+SCAN_OPTIONS = --rebuild-types --rebuild-sections
+
+# Extra options to supply to gtkdoc-scangobj.
+SCANGOBJ_OPTIONS = --type-init-func 'g_type_init();'
+
+# Extra options to supply to gtkdoc-mkdb.
+MKDB_OPTIONS = --sgml-mode --output-format=xml
+
+# Extra options to supply to gtkdoc-fixref.
+FIXXREF_OPTIONS =
+
+# Used for dependencies.
+HFILE_GLOB = $(top_srcdir)/libnm-core/*.h $(top_srcdir)/libnm/*.h
+CFILE_GLOB = $(top_srcdir)/libnm-core/*.c $(top_srcdir)/libnm/*.c
+
+# Header files to ignore when scanning.
+IGNORE_HFILES = \
+ common.h \
+ crypto.h \
+ nm-dbus-helpers.h \
+ nm-core-internal.h \
+ nm-core-types.h \
+ nm-device-private.h \
+ nm-dhcp4-config.h \
+ nm-dhcp6-config.h \
+ nm-ip4-config.h \
+ nm-ip6-config.h \
+ nm-manager.h \
+ nm-object-cache.h \
+ nm-object-private.h \
+ nm-property-compare.h \
+ nm-remote-connection-private.h \
+ nm-remote-settings.h \
+ nm-setting-private.h \
+ nm-types.h \
+ nm-utils-private.h \
+ nm-vpn-plugin-old.h
+
+
+# Images to copy into HTML directory.
+HTML_IMAGES = libnm.png
+
+# Extra XML files that are included by $(DOC_MAIN_SGML_FILE).
+content_files = version.xml
+
+# Other files to distribute.
+extra_files = libnm.png
+
+# CFLAGS and LDFLAGS for compiling scan program. Only needed
+# if $(DOC_MODULE).types is non-empty.
+GTKDOC_CFLAGS = \
+ -I$(top_srcdir)/libnm-core \
+ -I$(top_builddir)/libnm-core \
+ -I$(top_srcdir)/libnm \
+ -I$(top_builddir)/libnm \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ $(GLIB_CFLAGS)
+
+GTKDOC_LIBS = \
+ $(top_builddir)/libnm/libnm.la \
+ $(GLIB_LIBS)
+
+@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_RUN =
+@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_RUN = $(LIBTOOL) --mode=execute
+
+# We set GPATH here; this gives us semantics for GNU make
+# which are more like other make's VPATH, when it comes to
+# whether a source that is a target of one rule is then
+# searched for in VPATH/GPATH.
+#
+GPATH = $(srcdir)
+TARGET_DIR = $(HTML_DIR)/$(DOC_MODULE)
+SETUP_FILES = \
+ $(content_files) \
+ $(DOC_MAIN_SGML_FILE) \
+ $(DOC_MODULE)-sections.txt \
+ $(DOC_MODULE)-overrides.txt
+
+
+# include common portion ...
+EXTRA_DIST = $(HTML_IMAGES) $(SETUP_FILES) version.xml.in
+DOC_STAMPS = setup-build.stamp scan-build.stamp tmpl-build.stamp sgml-build.stamp \
+ html-build.stamp pdf-build.stamp \
+ tmpl.stamp sgml.stamp html.stamp pdf.stamp
+
+SCANOBJ_FILES = \
+ $(DOC_MODULE).args \
+ $(DOC_MODULE).hierarchy \
+ $(DOC_MODULE).interfaces \
+ $(DOC_MODULE).prerequisites \
+ $(DOC_MODULE).signals
+
+REPORT_FILES = \
+ $(DOC_MODULE)-undocumented.txt \
+ $(DOC_MODULE)-undeclared.txt \
+ $(DOC_MODULE)-unused.txt
+
+CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS) \
+ libnm-sections.txt libnm-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))
+GTK_DOC_V_SETUP_ = $(GTK_DOC_V_SETUP_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_SETUP_0 = @echo " DOC Preparing build";
+
+#### scan ####
+GTK_DOC_V_SCAN = $(GTK_DOC_V_SCAN_$(V))
+GTK_DOC_V_SCAN_ = $(GTK_DOC_V_SCAN_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_SCAN_0 = @echo " DOC Scanning header files";
+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";
+
+#### templates ####
+GTK_DOC_V_TMPL = $(GTK_DOC_V_TMPL_$(V))
+GTK_DOC_V_TMPL_ = $(GTK_DOC_V_TMPL_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_TMPL_0 = @echo " DOC Rebuilding template files";
+
+#### xml ####
+GTK_DOC_V_XML = $(GTK_DOC_V_XML_$(V))
+GTK_DOC_V_XML_ = $(GTK_DOC_V_XML_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_XML_0 = @echo " DOC Building XML";
+
+#### html ####
+GTK_DOC_V_HTML = $(GTK_DOC_V_HTML_$(V))
+GTK_DOC_V_HTML_ = $(GTK_DOC_V_HTML_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_HTML_0 = @echo " DOC Building HTML";
+GTK_DOC_V_XREF = $(GTK_DOC_V_XREF_$(V))
+GTK_DOC_V_XREF_ = $(GTK_DOC_V_XREF_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_XREF_0 = @echo " DOC Fixing cross-references";
+
+#### pdf ####
+GTK_DOC_V_PDF = $(GTK_DOC_V_PDF_$(V))
+GTK_DOC_V_PDF_ = $(GTK_DOC_V_PDF_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_PDF_0 = @echo " DOC Building PDF";
all: all-am
.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/gtk-doc.make $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -421,9 +561,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu cli/completion/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/libnm/Makefile'; \
$(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu cli/completion/Makefile
+ $(AUTOMAKE) --gnu docs/libnm/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
@@ -433,6 +573,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
+$(top_srcdir)/gtk-doc.make:
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -442,33 +583,14 @@ $(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):
+version.xml: $(top_builddir)/config.status $(srcdir)/version.xml.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
-install-dist_completionDATA: $(dist_completion_DATA)
- @$(NORMAL_INSTALL)
- @list='$(dist_completion_DATA)'; test -n "$(completiondir)" || list=; \
- if test -n "$$list"; then \
- echo " $(MKDIR_P) '$(DESTDIR)$(completiondir)'"; \
- $(MKDIR_P) "$(DESTDIR)$(completiondir)" || 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)$(completiondir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(completiondir)" || exit $$?; \
- done
-
-uninstall-dist_completionDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(dist_completion_DATA)'; test -n "$(completiondir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- dir='$(DESTDIR)$(completiondir)'; $(am__uninstall_files_from_dir)
tags TAGS:
ctags CTAGS:
@@ -506,13 +628,13 @@ distdir: $(DISTFILES)
|| exit 1; \
fi; \
done
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$(top_distdir)" distdir="$(distdir)" \
+ dist-hook
check-am: all-am
check: check-am
-all-am: Makefile $(DATA)
+all-am: Makefile all-local
installdirs:
- for dir in "$(DESTDIR)$(completiondir)"; do \
- test -z "$$dir" || $(MKDIR_P) "$$dir"; \
- done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
@@ -535,6 +657,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)
@@ -545,11 +668,11 @@ maintainer-clean-generic:
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
-clean-am: clean-generic clean-libtool mostlyclean-am
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
distclean: distclean-am
-rm -f Makefile
-distclean-am: clean-am distclean-generic
+distclean-am: clean-am distclean-generic distclean-local
dvi: dvi-am
@@ -563,7 +686,7 @@ info: info-am
info-am:
-install-data-am: install-dist_completionDATA
+install-data-am: install-data-local
install-dvi: install-dvi-am
@@ -593,7 +716,8 @@ installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
+maintainer-clean-am: distclean-am maintainer-clean-generic \
+ maintainer-clean-local
mostlyclean: mostlyclean-am
@@ -607,23 +731,213 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-dist_completionDATA
+uninstall-am: uninstall-local
.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-dist_completionDATA 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 \
+.PHONY: all all-am all-local check check-am clean clean-generic \
+ clean-libtool clean-local cscopelist-am ctags-am dist-hook \
+ distclean distclean-generic distclean-libtool distclean-local \
+ distdir dvi dvi-am html html-am info info-am install \
+ install-am install-data install-data-am install-data-local \
+ 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 \
+ maintainer-clean-local mostlyclean mostlyclean-generic \
mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
- uninstall-am uninstall-dist_completionDATA
+ uninstall-am uninstall-local
+
+
+@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)
+
+$(REPORT_FILES): sgml-build.stamp
+
+setup-build.stamp:
+ -$(GTK_DOC_V_SETUP)if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
+ files=`echo $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types`; \
+ if test "x$$files" != "x" ; then \
+ for file in $$files ; do \
+ test -f $(abs_srcdir)/$$file && \
+ cp -pu $(abs_srcdir)/$$file $(abs_builddir)/$$file || true; \
+ done; \
+ fi; \
+ test -d $(abs_srcdir)/tmpl && \
+ { 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: $(HFILE_GLOB) $(CFILE_GLOB)
+ $(GTK_DOC_V_SCAN)_source_dir='' ; \
+ for i in $(DOC_SOURCE_DIR) ; do \
+ _source_dir="$${_source_dir} --source-dir=$$i" ; \
+ done ; \
+ gtkdoc-scan --module=$(DOC_MODULE) --ignore-headers="$(IGNORE_HFILES)" $${_source_dir} $(SCAN_OPTIONS) $(EXTRA_HFILES)
+ $(GTK_DOC_V_INTROSPECT)if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \
+ scanobj_options=""; \
+ gtkdoc-scangobj 2>&1 --help | grep >/dev/null "\-\-verbose"; \
+ if test "$(?)" = "0"; then \
+ if test "x$(V)" = "x1"; then \
+ scanobj_options="--verbose"; \
+ fi; \
+ fi; \
+ CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \
+ gtkdoc-scangobj $(SCANGOBJ_OPTIONS) $$scanobj_options --module=$(DOC_MODULE); \
+ else \
+ for i in $(SCANOBJ_FILES) ; do \
+ test -f $$i || touch $$i ; \
+ done \
+ fi
+ $(AM_V_at)touch scan-build.stamp
+
+$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp
+ @true
+
+tmpl-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt
+ $(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 -rp $(abs_builddir)/tmpl $(abs_srcdir)/; \
+ fi \
+ fi
+ $(AM_V_at)touch tmpl-build.stamp
+
+tmpl.stamp: tmpl-build.stamp
+ @true
+
+$(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='' ; \
+ for i in $(DOC_SOURCE_DIR) ; do \
+ _source_dir="$${_source_dir} --source-dir=$$i" ; \
+ done ; \
+ gtkdoc-mkdb --module=$(DOC_MODULE) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $${_source_dir} $(MKDB_OPTIONS)
+ $(AM_V_at)touch sgml-build.stamp
+
+sgml.stamp: sgml-build.stamp
+ @true
+
+html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
+ $(GTK_DOC_V_HTML)rm -rf html && mkdir html && \
+ mkhtml_options=""; \
+ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-verbose"; \
+ if test "$(?)" = "0"; then \
+ if test "x$(V)" = "x1"; then \
+ mkhtml_options="$$mkhtml_options --verbose"; \
+ fi; \
+ fi; \
+ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-path"; \
+ if test "$(?)" = "0"; then \
+ mkhtml_options="$$mkhtml_options --path=\"$(abs_srcdir)\""; \
+ fi; \
+ cd html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE)
+ -@test "x$(HTML_IMAGES)" = "x" || \
+ for file in $(HTML_IMAGES) ; do \
+ if test -f $(abs_srcdir)/$$file ; then \
+ cp $(abs_srcdir)/$$file $(abs_builddir)/html; \
+ fi; \
+ if test -f $(abs_builddir)/$$file ; then \
+ cp $(abs_builddir)/$$file $(abs_builddir)/html; \
+ fi; \
+ done;
+ $(GTK_DOC_V_XREF)gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS)
+ $(AM_V_at)touch html-build.stamp
+
+pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
+ $(GTK_DOC_V_PDF)rm -f $(DOC_MODULE).pdf && \
+ mkpdf_options=""; \
+ gtkdoc-mkpdf 2>&1 --help | grep >/dev/null "\-\-verbose"; \
+ if test "$(?)" = "0"; then \
+ if test "x$(V)" = "x1"; then \
+ mkpdf_options="$$mkpdf_options --verbose"; \
+ fi; \
+ fi; \
+ if test "x$(HTML_IMAGES)" != "x"; then \
+ for img in $(HTML_IMAGES); do \
+ part=`dirname $$img`; \
+ echo $$mkpdf_options | grep >/dev/null "\-\-imgdir=$$part "; \
+ if test $$? != 0; then \
+ mkpdf_options="$$mkpdf_options --imgdir=$$part"; \
+ fi; \
+ done; \
+ fi; \
+ gtkdoc-mkpdf --path="$(abs_srcdir)" $$mkpdf_options $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) $(MKPDF_OPTIONS)
+ $(AM_V_at)touch pdf-build.stamp
+
+##############
+
+clean-local:
+ @rm -f *~ *.bak
+ @rm -rf .libs
+
+distclean-local:
+ @rm -rf xml html $(REPORT_FILES) $(DOC_MODULE).pdf \
+ $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
+ @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
+ rm -f $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types; \
+ rm -rf tmpl; \
+ fi
+
+maintainer-clean-local:
+ @rm -rf xml html
+
+install-data-local:
+ @installfiles=`echo $(builddir)/html/*`; \
+ if test "$$installfiles" = '$(builddir)/html/*'; \
+ then echo 1>&2 'Nothing to install' ; \
+ else \
+ if test -n "$(DOC_MODULE_VERSION)"; then \
+ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \
+ else \
+ installdir="$(DESTDIR)$(TARGET_DIR)"; \
+ fi; \
+ $(mkinstalldirs) $${installdir} ; \
+ for i in $$installfiles; do \
+ echo ' $(INSTALL_DATA) '$$i ; \
+ $(INSTALL_DATA) $$i $${installdir}; \
+ done; \
+ if test -n "$(DOC_MODULE_VERSION)"; then \
+ mv -f $${installdir}/$(DOC_MODULE).devhelp2 \
+ $${installdir}/$(DOC_MODULE)-$(DOC_MODULE_VERSION).devhelp2; \
+ fi; \
+ $(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) --html-dir=$${installdir}; \
+ fi
+uninstall-local:
+ @if test -n "$(DOC_MODULE_VERSION)"; then \
+ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \
+ else \
+ installdir="$(DESTDIR)$(TARGET_DIR)"; \
+ fi; \
+ rm -rf $${installdir}
+
+#
+# Require gtk-doc when making dist
+#
+@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
+ @cp ./html/* $(distdir)/html
+ @-cp ./$(DOC_MODULE).pdf $(distdir)/
+ @-cp ./$(DOC_MODULE).types $(distdir)/
+ @-cp ./$(DOC_MODULE)-sections.txt $(distdir)/
+ @cd $(distdir) && rm -f $(DISTCLEANFILES)
+ @$(GTKDOC_REBASE) --online --relative --html-dir=$(distdir)/html
+
+.PHONY : dist-hook-local docs
# 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/docs/libnm/html/NMAccessPoint.html b/docs/libnm/html/NMAccessPoint.html
new file mode 100644
index 000000000..9b21cae9b
--- /dev/null
+++ b/docs/libnm/html/NMAccessPoint.html
@@ -0,0 +1,613 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMAccessPoint</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference">
+<link rel="prev" href="NMRemoteConnection.html" title="NMRemoteConnection">
+<link rel="next" href="NMWimaxNsp.html" title="NMWimaxNsp">
+<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="NMRemoteConnection.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch04.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 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="#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>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMAccessPoint.top_of_page"></a>NMAccessPoint</span></h2>
+<p>NMAccessPoint</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></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>
+struct <a class="link" href="NMAccessPoint.html#NMAccessPoint-struct" title="struct NMAccessPoint">NMAccessPoint</a>;
+ <a class="link" href="NMAccessPoint.html#NMAccessPointClass" title="NMAccessPointClass">NMAccessPointClass</a>;
+<a class="link" href="libnm-nm-dbus-interface.html#NM80211ApFlags"><span class="returnvalue">NM80211ApFlags</span></a> <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>);
+<a class="link" href="libnm-nm-dbus-interface.html#NM80211ApSecurityFlags"><span class="returnvalue">NM80211ApSecurityFlags</span></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> (<em class="parameter"><code><a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> *ap</code></em>);
+<a class="link" href="libnm-nm-dbus-interface.html#NM80211ApSecurityFlags"><span class="returnvalue">NM80211ApSecurityFlags</span></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> (<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-Byte-Arrays.html#GBytes"><span class="returnvalue">GBytes</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>);
+<a class="link" href="libnm-nm-dbus-interface.html#NM80211Mode"><span class="returnvalue">NM80211Mode</span></a> <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-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</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-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</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>);
+</pre>
+</div>
+<div class="refsect1">
+<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.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.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 class="link" href="libnm-nm-dbus-interface.html#NM80211ApFlags"><span class="type">NM80211ApFlags</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 class="link" href="libnm-nm-dbus-interface.html#NM80211Mode"><span class="type">NM80211Mode</span></a> : Read
+ "<a class="link" href="NMAccessPoint.html#NMAccessPoint--rsn-flags" title='The "rsn-flags" property'>rsn-flags</a>" <a class="link" href="libnm-nm-dbus-interface.html#NM80211ApSecurityFlags"><span class="type">NM80211ApSecurityFlags</span></a> : Read
+ "<a class="link" href="NMAccessPoint.html#NMAccessPoint--ssid" title='The "ssid" property'>ssid</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="type">GBytes</span></a>* : 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 class="link" href="libnm-nm-dbus-interface.html#NM80211ApSecurityFlags"><span class="type">NM80211ApSecurityFlags</span></a> : Read
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMAccessPoint.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<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-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-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-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-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-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-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-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-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>
+<hr>
+<div class="refsect2">
+<a name="NMAccessPoint-struct"></a><h3>struct NMAccessPoint</h3>
+<pre class="programlisting">struct NMAccessPoint;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMAccessPointClass"></a><h3>NMAccessPointClass</h3>
+<pre class="programlisting">typedef struct {
+ NMObjectClass parent;
+} NMAccessPointClass;
+</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"><a class="link" href="libnm-nm-dbus-interface.html#NM80211ApFlags"><span class="returnvalue">NM80211ApFlags</span></a> 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 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 flags</td>
+</tr>
+</tbody>
+</table></div>
+</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"><a class="link" href="libnm-nm-dbus-interface.html#NM80211ApSecurityFlags"><span class="returnvalue">NM80211ApSecurityFlags</span></a> 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 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 WPA flags</td>
+</tr>
+</tbody>
+</table></div>
+</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"><a class="link" href="libnm-nm-dbus-interface.html#NM80211ApSecurityFlags"><span class="returnvalue">NM80211ApSecurityFlags</span></a> 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 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 RSN flags</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-access-point-get-ssid"></a><h3>nm_access_point_get_ssid ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="returnvalue">GBytes</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#GBytes"><span class="type">GBytes</span></a> containing the SSID, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if the
+SSID is unknown. <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-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-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-get-mode"></a><h3>nm_access_point_get_mode ()</h3>
+<pre class="programlisting"><a class="link" href="libnm-nm-dbus-interface.html#NM80211Mode"><span class="returnvalue">NM80211Mode</span></a> 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-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-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-filter-connections"></a><h3>nm_access_point_filter_connections ()</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_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-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *connections</code></em>);</pre>
+<p>
+Filters a given array of connections for a given <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a> object and
+returns 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="NMClient.html#nm-client-get-connections" title="nm_client_get_connections ()"><code class="function">nm_client_get_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>an array of <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnections</span></a> to
+filter. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMConnection]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an array of
+<a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnections</span></a> that could be activated with the given <em class="parameter"><code>ap</code></em>. The array should
+be freed with <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#g-ptr-array-unref"><code class="function">g_ptr_array_unref()</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> NMConnection]</span>
+</td>
+</tr>
+</tbody>
+</table></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 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>
+</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>* : 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 class="link" href="libnm-nm-dbus-interface.html#NM80211ApFlags"><span class="type">NM80211ApFlags</span></a> : Read</pre>
+<p>
+The flags of the access point.
+</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> : 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>* : Read</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">NMAccessPoint:hw-address</code> has been deprecated since version 1.0 and should not be used in newly-written code. use <a class="link" href="NMAccessPoint.html#NMAccessPoint--bssid" title='The "bssid" property'><span class="type">"bssid"</span></a>.</p>
+</div>
+<p>
+Alias for <a class="link" href="NMAccessPoint.html#NMAccessPoint--bssid" title='The "bssid" property'><span class="type">"bssid"</span></a>.
+</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> : 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 class="link" href="libnm-nm-dbus-interface.html#NM80211Mode"><span class="type">NM80211Mode</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>Default value: NM_802_11_MODE_INFRA</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 class="link" href="libnm-nm-dbus-interface.html#NM80211ApSecurityFlags"><span class="type">NM80211ApSecurityFlags</span></a> : Read</pre>
+<p>
+The RSN flags of the access point.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMAccessPoint--ssid"></a><h3>The <code class="literal">"ssid"</code> property</h3>
+<pre class="programlisting"> "ssid" <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="type">GBytes</span></a>* : Read</pre>
+<p>
+The SSID of the access point, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if it is not known.
+</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> : 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 class="link" href="libnm-nm-dbus-interface.html#NM80211ApSecurityFlags"><span class="type">NM80211ApSecurityFlags</span></a> : Read</pre>
+<p>
+The WPA flags of the access point.
+</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/html/NMActiveConnection.html b/docs/libnm/html/NMActiveConnection.html
new file mode 100644
index 000000000..15ac01581
--- /dev/null
+++ b/docs/libnm/html/NMActiveConnection.html
@@ -0,0 +1,816 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMActiveConnection</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference">
+<link rel="prev" href="NMDeviceWimax.html" title="NMDeviceWimax">
+<link rel="next" href="NMVpnConnection.html" title="NMVpnConnection">
+<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="NMDeviceWimax.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch04.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 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="#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>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMActiveConnection.top_of_page"></a>NMActiveConnection</span></h2>
+<p>NMActiveConnection</p>
+</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-PATH:CAPS" title="NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT_PATH">NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT_PATH</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>
+struct <a class="link" href="NMActiveConnection.html#NMActiveConnection-struct" title="struct NMActiveConnection">NMActiveConnection</a>;
+ <a class="link" href="NMActiveConnection.html#NMActiveConnectionClass" title="NMActiveConnectionClass">NMActiveConnectionClass</a>;
+<a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="returnvalue">NMRemoteConnection</span></a> * <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-path" title="nm_active_connection_get_specific_object_path ()">nm_active_connection_get_specific_object_path</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>);
+<a class="link" href="libnm-nm-dbus-interface.html#NMActiveConnectionState"><span class="returnvalue">NMActiveConnectionState</span></a> <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>);
+<a class="link" href="NMDevice.html" title="NMDevice"><span class="returnvalue">NMDevice</span></a> * <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="NMIPConfig.html" title="NMIPConfig"><span class="returnvalue">NMIPConfig</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="NMDhcpConfig.html" title="NMDhcpConfig"><span class="returnvalue">NMDhcpConfig</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="NMIPConfig.html" title="NMIPConfig"><span class="returnvalue">NMIPConfig</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="NMDhcpConfig.html" title="NMDhcpConfig"><span class="returnvalue">NMDhcpConfig</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.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 class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</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>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>* : Read
+ "<a class="link" href="NMActiveConnection.html#NMActiveConnection--dhcp4-config" title='The "dhcp4-config" property'>dhcp4-config</a>" <a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig"><span class="type">NMDhcpConfig</span></a>* : Read
+ "<a class="link" href="NMActiveConnection.html#NMActiveConnection--dhcp6-config" title='The "dhcp6-config" property'>dhcp6-config</a>" <a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig"><span class="type">NMDhcpConfig</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="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</span></a>* : Read
+ "<a class="link" href="NMActiveConnection.html#NMActiveConnection--ip6-config" title='The "ip6-config" property'>ip6-config</a>" <a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</span></a>* : Read
+ "<a class="link" href="NMActiveConnection.html#NMActiveConnection--master" title='The "master" property'>master</a>" <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>* : Read
+ "<a class="link" href="NMActiveConnection.html#NMActiveConnection--specific-object-path" title='The "specific-object-path" property'>specific-object-path</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 class="link" href="libnm-nm-dbus-interface.html#NMActiveConnectionState"><span class="type">NMActiveConnectionState</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-PATH:CAPS"></a><h3>NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT_PATH</h3>
+<pre class="programlisting">#define NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT_PATH "specific-object-path"
+</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>struct NMActiveConnection</h3>
+<pre class="programlisting">struct NMActiveConnection;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMActiveConnectionClass"></a><h3>NMActiveConnectionClass</h3>
+<pre class="programlisting">typedef struct {
+ NMObjectClass parent;
+} NMActiveConnectionClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-active-connection-get-connection"></a><h3>nm_active_connection_get_connection ()</h3>
+<pre class="programlisting"><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="returnvalue">NMRemoteConnection</span></a> * 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 class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> associated with <em class="parameter"><code>connection</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>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 <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> which this
+<a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> is an active instance of. <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-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><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 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>
+</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><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 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>
+<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 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 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 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>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-active-connection-get-specific-object-path"></a><h3>nm_active_connection_get_specific_object_path ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_active_connection_get_specific_object_path
+ (<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 of the "specific object" used at activation.
+</p>
+<p>
+Currently there is no single method that will allow you to automatically turn
+this into an appropriate <a class="link" href="NMObject.html" title="NMObject"><span class="type">NMObject</span></a>; you need to know what kind of object it
+is based on other information. (Eg, if <em class="parameter"><code>connection</code></em> corresponds to a Wi-Fi
+connection, then the specific object will be an <a class="link" href="NMAccessPoint.html" title="NMAccessPoint"><span class="type">NMAccessPoint</span></a>, and you can
+resolve it with <a class="link" href="NMDeviceWifi.html#nm-device-wifi-get-access-point-by-path" title="nm_device_wifi_get_access_point_by_path ()"><code class="function">nm_device_wifi_get_access_point_by_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>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 specific object's D-Bus 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><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 <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> NMDevice]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-active-connection-get-state"></a><h3>nm_active_connection_get_state ()</h3>
+<pre class="programlisting"><a class="link" href="libnm-nm-dbus-interface.html#NMActiveConnectionState"><span class="returnvalue">NMActiveConnectionState</span></a> 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="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 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 state</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-active-connection-get-master"></a><h3>nm_active_connection_get_master ()</h3>
+<pre class="programlisting"><a class="link" href="NMDevice.html" title="NMDevice"><span class="returnvalue">NMDevice</span></a> * 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 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 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 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 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>. <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-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 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 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>
+<hr>
+<div class="refsect2">
+<a name="nm-active-connection-get-ip4-config"></a><h3>nm_active_connection_get_ip4_config ()</h3>
+<pre class="programlisting"><a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="returnvalue">NMIPConfig</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 IPv4 <a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</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 align="left" valign="top">
+<col>
+</colgroup>
+<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 IPv4 <a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</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 <a class="link" href="libnm-nm-dbus-interface.html#NM-ACTIVE-CONNECTION-STATE-ACTIVATED:CAPS"><code class="literal">NM_ACTIVE_CONNECTION_STATE_ACTIVATED</code></a> 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>
+<hr>
+<div class="refsect2">
+<a name="nm-active-connection-get-dhcp4-config"></a><h3>nm_active_connection_get_dhcp4_config ()</h3>
+<pre class="programlisting"><a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig"><span class="returnvalue">NMDhcpConfig</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 IPv4 <a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig"><span class="type">NMDhcpConfig</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 align="left" valign="top">
+<col>
+</colgroup>
+<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 IPv4 <a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig"><span class="type">NMDhcpConfig</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 <a class="link" href="libnm-nm-dbus-interface.html#NM-ACTIVE-CONNECTION-STATE-ACTIVATED:CAPS"><code class="literal">NM_ACTIVE_CONNECTION_STATE_ACTIVATED</code></a>
+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>
+<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="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 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>
+<hr>
+<div class="refsect2">
+<a name="nm-active-connection-get-ip6-config"></a><h3>nm_active_connection_get_ip6_config ()</h3>
+<pre class="programlisting"><a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="returnvalue">NMIPConfig</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 IPv6 <a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</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 align="left" valign="top">
+<col>
+</colgroup>
+<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 IPv6 <a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</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 <a class="link" href="libnm-nm-dbus-interface.html#NM-ACTIVE-CONNECTION-STATE-ACTIVATED:CAPS"><code class="literal">NM_ACTIVE_CONNECTION_STATE_ACTIVATED</code></a> 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>
+<hr>
+<div class="refsect2">
+<a name="nm-active-connection-get-dhcp6-config"></a><h3>nm_active_connection_get_dhcp6_config ()</h3>
+<pre class="programlisting"><a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig"><span class="returnvalue">NMDhcpConfig</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 IPv6 <a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig"><span class="type">NMDhcpConfig</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 align="left" valign="top">
+<col>
+</colgroup>
+<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 IPv6 <a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig"><span class="type">NMDhcpConfig</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 <a class="link" href="libnm-nm-dbus-interface.html#NM-ACTIVE-CONNECTION-STATE-ACTIVATED:CAPS"><code class="literal">NM_ACTIVE_CONNECTION_STATE_ACTIVATED</code></a>
+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>
+<hr>
+<div class="refsect2">
+<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 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 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>
+<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 class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a>* : Read</pre>
+<p>
+The connection that this is an active instance of.
+</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> : 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="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="NMActiveConnection--devices"></a><h3>The <code class="literal">"devices"</code> property</h3>
+<pre class="programlisting"> "devices" <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>* : Read</pre>
+<p>
+The devices of the active connection.
+</p>
+<p>
+Element-type: NMDevice
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<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="NMDhcpConfig.html" title="NMDhcpConfig"><span class="type">NMDhcpConfig</span></a>* : Read</pre>
+<p>
+The IPv4 <a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig"><span class="type">NMDhcpConfig</span></a> of the connection.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<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="NMDhcpConfig.html" title="NMDhcpConfig"><span class="type">NMDhcpConfig</span></a>* : Read</pre>
+<p>
+The IPv6 <a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig"><span class="type">NMDhcpConfig</span></a> of the connection.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<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>
+</div>
+<hr>
+<div class="refsect2">
+<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="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</span></a>* : Read</pre>
+<p>
+The IPv4 <a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</span></a> of the connection.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<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="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</span></a>* : Read</pre>
+<p>
+The IPv6 <a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</span></a> of the connection.
+</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 class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>* : Read</pre>
+<p>
+The master device if one exists.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMActiveConnection--specific-object-path"></a><h3>The <code class="literal">"specific-object-path"</code> property</h3>
+<pre class="programlisting"> "specific-object-path" <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 to the "specific object" of the active connection; see
+<a class="link" href="NMActiveConnection.html#nm-active-connection-get-specific-object-path" title="nm_active_connection_get_specific_object_path ()"><code class="function">nm_active_connection_get_specific_object_path()</code></a> for more details.
+</p>
+<p>Default value: NULL</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 class="link" href="libnm-nm-dbus-interface.html#NMActiveConnectionState"><span class="type">NMActiveConnectionState</span></a> : Read</pre>
+<p>
+The state of the active connection.
+</p>
+<p>Default value: NM_ACTIVE_CONNECTION_STATE_UNKNOWN</p>
+</div>
+<hr>
+<div class="refsect2">
+<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>
+</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>* : Read</pre>
+<p>
+The active connection's UUID
+</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<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>
+</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/html/NMClient.html b/docs/libnm/html/NMClient.html
new file mode 100644
index 000000000..604d03304
--- /dev/null
+++ b/docs/libnm/html/NMClient.html
@@ -0,0 +1,3059 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMClient</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch02.html" title="Client Object API Reference">
+<link rel="prev" href="ch02.html" title="Client Object API Reference">
+<link rel="next" href="NMSecretAgentOld.html" title="NMSecretAgentOld">
+<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="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 Reference Manual</th>
+<td><a accesskey="n" href="NMSecretAgentOld.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>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMClient.top_of_page"></a>NMClient</span></h2>
+<p>NMClient</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMClient.synopsis"></a><h2>Synopsis</h2>
+<a name="NMClientPermission"></a><a name="NMClientPermissionResult"></a><a name="NMClientError"></a><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-NM-RUNNING:CAPS" title="NM_CLIENT_NM_RUNNING">NM_CLIENT_NM_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>
+#define <a class="link" href="NMClient.html#NM-CLIENT-CONNECTIONS:CAPS" title="NM_CLIENT_CONNECTIONS">NM_CLIENT_CONNECTIONS</a>
+#define <a class="link" href="NMClient.html#NM-CLIENT-HOSTNAME:CAPS" title="NM_CLIENT_HOSTNAME">NM_CLIENT_HOSTNAME</a>
+#define <a class="link" href="NMClient.html#NM-CLIENT-CAN-MODIFY:CAPS" title="NM_CLIENT_CAN_MODIFY">NM_CLIENT_CAN_MODIFY</a>
+#define <a class="link" href="NMClient.html#NM-CLIENT-DEVICE-ADDED:CAPS" title="NM_CLIENT_DEVICE_ADDED">NM_CLIENT_DEVICE_ADDED</a>
+#define <a class="link" href="NMClient.html#NM-CLIENT-DEVICE-REMOVED:CAPS" title="NM_CLIENT_DEVICE_REMOVED">NM_CLIENT_DEVICE_REMOVED</a>
+#define <a class="link" href="NMClient.html#NM-CLIENT-PERMISSION-CHANGED:CAPS" title="NM_CLIENT_PERMISSION_CHANGED">NM_CLIENT_PERMISSION_CHANGED</a>
+#define <a class="link" href="NMClient.html#NM-CLIENT-CONNECTION-ADDED:CAPS" title="NM_CLIENT_CONNECTION_ADDED">NM_CLIENT_CONNECTION_ADDED</a>
+#define <a class="link" href="NMClient.html#NM-CLIENT-CONNECTION-REMOVED:CAPS" title="NM_CLIENT_CONNECTION_REMOVED">NM_CLIENT_CONNECTION_REMOVED</a>
+enum <a class="link" href="NMClient.html#NMClientPermission-enum" title="enum NMClientPermission">NMClientPermission</a>;
+enum <a class="link" href="NMClient.html#NMClientPermissionResult-enum" title="enum NMClientPermissionResult">NMClientPermissionResult</a>;
+enum <a class="link" href="NMClient.html#NMClientError-enum" 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>);
+struct <a class="link" href="NMClient.html#NMClient-struct" title="struct 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><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-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 <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>);
+<a class="link" href="libnm-nm-dbus-interface.html#NMState"><span class="returnvalue">NMState</span></a> <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-nm-running" title="nm_client_get_nm_running ()">nm_client_get_nm_running</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-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>);
+<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-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>,
+ <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-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>);
+<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>);
+<a class="link" href="NMClient.html#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"><span class="type">NMClientPermission</span></a> permission</code></em>);
+<a class="link" href="libnm-nm-dbus-interface.html#NMConnectivityState"><span class="returnvalue">NMConnectivityState</span></a> <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>);
+<a class="link" href="libnm-nm-dbus-interface.html#NMConnectivityState"><span class="returnvalue">NMConnectivityState</span></a> <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>);
+<a class="link" href="libnm-nm-dbus-interface.html#NMConnectivityState"><span class="returnvalue">NMConnectivityState</span></a> <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 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-save-hostname" title="nm_client_save_hostname ()">nm_client_save_hostname</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> *hostname</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-save-hostname-async" title="nm_client_save_hostname_async ()">nm_client_save_hostname_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>const <span class="type">char</span> *hostname</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 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-save-hostname-finish" title="nm_client_save_hostname_finish ()">nm_client_save_hostname_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>);
+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>);
+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>);
+<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>);
+<span class="returnvalue">void</span> <a class="link" href="NMClient.html#nm-client-activate-connection-async" title="nm_client_activate_connection_async ()">nm_client_activate_connection_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="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 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="NMActiveConnection.html" title="NMActiveConnection"><span class="returnvalue">NMActiveConnection</span></a> * <a class="link" href="NMClient.html#nm-client-activate-connection-finish" title="nm_client_activate_connection_finish ()">nm_client_activate_connection_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>);
+<span class="returnvalue">void</span> <a class="link" href="NMClient.html#nm-client-add-and-activate-connection-async" title="nm_client_add_and_activate_connection_async ()">nm_client_add_and_activate_connection_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="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 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="NMActiveConnection.html" title="NMActiveConnection"><span class="returnvalue">NMActiveConnection</span></a> * <a class="link" href="NMClient.html#nm-client-add-and-activate-connection-finish" title="nm_client_add_and_activate_connection_finish ()">nm_client_add_and_activate_connection_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 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-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>,
+ <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-deactivate-connection-async" title="nm_client_deactivate_connection_async ()">nm_client_deactivate_connection_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 class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *active</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 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-deactivate-connection-finish" title="nm_client_deactivate_connection_finish ()">nm_client_deactivate_connection_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>);
+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-connections" title="nm_client_get_connections ()">nm_client_get_connections</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="NMRemoteConnection.html" title="NMRemoteConnection"><span class="returnvalue">NMRemoteConnection</span></a> * <a class="link" href="NMClient.html#nm-client-get-connection-by-id" title="nm_client_get_connection_by_id ()">nm_client_get_connection_by_id</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> *id</code></em>);
+<a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="returnvalue">NMRemoteConnection</span></a> * <a class="link" href="NMClient.html#nm-client-get-connection-by-path" title="nm_client_get_connection_by_path ()">nm_client_get_connection_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> *path</code></em>);
+<a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="returnvalue">NMRemoteConnection</span></a> * <a class="link" href="NMClient.html#nm-client-get-connection-by-uuid" title="nm_client_get_connection_by_uuid ()">nm_client_get_connection_by_uuid</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> *uuid</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMClient.html#nm-client-add-connection-async" title="nm_client_add_connection_async ()">nm_client_add_connection_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="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-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> save_to_disk</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="NMRemoteConnection.html" title="NMRemoteConnection"><span class="returnvalue">NMRemoteConnection</span></a> * <a class="link" href="NMClient.html#nm-client-add-connection-finish" title="nm_client_add_connection_finish ()">nm_client_add_connection_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 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-load-connections" title="nm_client_load_connections ()">nm_client_load_connections</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> **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/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-load-connections-async" title="nm_client_load_connections_async ()">nm_client_load_connections_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><span class="type">char</span> **filenames</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 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-load-connections-finish" title="nm_client_load_connections_finish ()">nm_client_load_connections_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><span class="type">char</span> ***failures</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 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-reload-connections" title="nm_client_reload_connections ()">nm_client_reload_connections</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-reload-connections-async" title="nm_client_reload_connections_async ()">nm_client_reload_connections_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>);
+<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-reload-connections-finish" title="nm_client_reload_connections_finish ()">nm_client_reload_connections_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>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMClient.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ GEnum
+ +----NMClientPermission
+</pre>
+<pre class="synopsis">
+ GEnum
+ +----NMClientPermissionResult
+</pre>
+<pre class="synopsis">
+ GEnum
+ +----NMClientError
+</pre>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----NMClient
+</pre>
+</div>
+<div class="refsect1">
+<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>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>* : Read
+ "<a class="link" href="NMClient.html#NMClient--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="NMClient.html#NMClient--connections" title='The "connections" property'>connections</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>* : Read
+ "<a class="link" href="NMClient.html#NMClient--connectivity" title='The "connectivity" property'>connectivity</a>" <a class="link" href="libnm-nm-dbus-interface.html#NMConnectivityState"><span class="type">NMConnectivityState</span></a> : Read
+ "<a class="link" href="NMClient.html#NMClient--devices" title='The "devices" property'>devices</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>* : Read
+ "<a class="link" href="NMClient.html#NMClient--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="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--nm-running" title='The "nm-running" property'>nm-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--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 class="link" href="libnm-nm-dbus-interface.html#NMState"><span class="type">NMState</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-connection-added" title='The "connection-added" signal'>connection-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-connection-removed" title='The "connection-removed" signal'>connection-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-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-NM-RUNNING:CAPS"></a><h3>NM_CLIENT_NM_RUNNING</h3>
+<pre class="programlisting">#define NM_CLIENT_NM_RUNNING "nm-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="NM-CLIENT-CONNECTIONS:CAPS"></a><h3>NM_CLIENT_CONNECTIONS</h3>
+<pre class="programlisting">#define NM_CLIENT_CONNECTIONS "connections"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-CLIENT-HOSTNAME:CAPS"></a><h3>NM_CLIENT_HOSTNAME</h3>
+<pre class="programlisting">#define NM_CLIENT_HOSTNAME "hostname"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-CLIENT-CAN-MODIFY:CAPS"></a><h3>NM_CLIENT_CAN_MODIFY</h3>
+<pre class="programlisting">#define NM_CLIENT_CAN_MODIFY "can-modify"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-CLIENT-DEVICE-ADDED:CAPS"></a><h3>NM_CLIENT_DEVICE_ADDED</h3>
+<pre class="programlisting">#define NM_CLIENT_DEVICE_ADDED "device-added"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-CLIENT-DEVICE-REMOVED:CAPS"></a><h3>NM_CLIENT_DEVICE_REMOVED</h3>
+<pre class="programlisting">#define NM_CLIENT_DEVICE_REMOVED "device-removed"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-CLIENT-PERMISSION-CHANGED:CAPS"></a><h3>NM_CLIENT_PERMISSION_CHANGED</h3>
+<pre class="programlisting">#define NM_CLIENT_PERMISSION_CHANGED "permission-changed"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-CLIENT-CONNECTION-ADDED:CAPS"></a><h3>NM_CLIENT_CONNECTION_ADDED</h3>
+<pre class="programlisting">#define NM_CLIENT_CONNECTION_ADDED "connection-added"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-CLIENT-CONNECTION-REMOVED:CAPS"></a><h3>NM_CLIENT_CONNECTION_REMOVED</h3>
+<pre class="programlisting">#define NM_CLIENT_CONNECTION_REMOVED "connection-removed"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMClientPermission-enum"></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"><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 align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<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><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><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><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><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><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><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><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><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><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><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><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><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>
+<hr>
+<div class="refsect2">
+<a name="NMClientPermissionResult-enum"></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"><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"><span class="type">NMClientPermission</span></a>
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<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><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><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><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>
+<hr>
+<div class="refsect2">
+<a name="NMClientError-enum"></a><h3>enum NMClientError</h3>
+<pre class="programlisting">typedef enum {
+ NM_CLIENT_ERROR_FAILED = 0,
+ NM_CLIENT_ERROR_MANAGER_NOT_RUNNING,
+ NM_CLIENT_ERROR_OBJECT_CREATION_FAILED,
+} 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>
+<p>
+D-Bus operations may also return errors from other domains, including
+<a class="link" href="libnm-nm-errors.html#NMManagerError"><span class="type">NMManagerError</span></a>, <a class="link" href="libnm-nm-errors.html#NMSettingsError"><span class="type">NMSettingsError</span></a>, <a class="link" href="libnm-nm-errors.html#NMAgentManagerError"><span class="type">NMAgentManagerError</span></a>, and <a class="link" href="libnm-nm-errors.html#NMConnectionError"><span class="type">NMConnectionError</span></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-CLIENT-ERROR-FAILED:CAPS"></a><span class="term"><code class="literal">NM_CLIENT_ERROR_FAILED</code></span></p></td>
+<td>unknown or unclassified error
+</td>
+</tr>
+<tr>
+<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>
+<tr>
+<td><p><a name="NM-CLIENT-ERROR-OBJECT-CREATION-FAILED:CAPS"></a><span class="term"><code class="literal">NM_CLIENT_ERROR_OBJECT_CREATION_FAILED</code></span></p></td>
+<td>NetworkManager claimed that an
+ operation succeeded, but the object that was allegedly created (eg,
+ <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a>, <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a>) was apparently destroyed before
+ <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> could create a representation of it.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<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 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="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> errors.</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMClient-struct"></a><h3>struct NMClient</h3>
+<pre class="programlisting">struct NMClient;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMClientClass"></a><h3>NMClientClass</h3>
+<pre class="programlisting">typedef struct {
+ GObjectClass 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);
+ void (*connection_added) (NMClient *client, NMRemoteConnection *connection);
+ void (*connection_removed) (NMClient *client, NMRemoteConnection *connection);
+} NMClientClass;
+</pre>
+<p>
+</p>
+</div>
+<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><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>
+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>
+<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>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><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 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. Note that on an error,
+the callback can be invoked with two first parameters as NULL.
+</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>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><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><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>
+<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="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>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><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>
+<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="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>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 (or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if NetworkManager is not running)</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-client-get-state"></a><h3>nm_client_get_state ()</h3>
+<pre class="programlisting"><a class="link" href="libnm-nm-dbus-interface.html#NMState"><span class="returnvalue">NMState</span></a> 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 align="left" valign="top">
+<col>
+</colgroup>
+<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>the current <a class="link" href="libnm-nm-dbus-interface.html#NMState"><code class="literal">NMState</code></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<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 align="left" valign="top">
+<col>
+</colgroup>
+<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>whether the daemon is still starting up</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-client-get-nm-running"></a><h3>nm_client_get_nm_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_nm_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 align="left" valign="top">
+<col>
+</colgroup>
+<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 daemon is running</td>
+</tr>
+</tbody>
+</table></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="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>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>
+<hr>
+<div class="refsect2">
+<a name="nm-client-networking-set-enabled"></a><h3>nm_client_networking_set_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_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>,
+ <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>
+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="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>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 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>
+<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>
+<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="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>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 wireless is enabled</td>
+</tr>
+</tbody>
+</table></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="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>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 wireless</td>
+</tr>
+</tbody>
+</table></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="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>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>
+<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="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>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>
+<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="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>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 WWAN</td>
+</tr>
+</tbody>
+</table></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="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>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>
+<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="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>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>
+<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="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>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>
+<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="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>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>
+<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="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>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>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><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><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>
+<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="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>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>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><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>
+<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"><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"><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 align="left" valign="top">
+<col>
+</colgroup>
+<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>permission</code></em> :</span></p></td>
+<td>the permission for which to return the result, one of <a class="link" href="NMClient.html#NMClientPermission"><span class="type">NMClientPermission</span></a>
+</td>
+</tr>
+<tr>
+<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"><span class="type">NMClientPermissionResult</span></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-client-get-connectivity"></a><h3>nm_client_get_connectivity ()</h3>
+<pre class="programlisting"><a class="link" href="libnm-nm-dbus-interface.html#NMConnectivityState"><span class="returnvalue">NMConnectivityState</span></a> 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 align="left" valign="top">
+<col>
+</colgroup>
+<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>
+<hr>
+<div class="refsect2">
+<a name="nm-client-check-connectivity"></a><h3>nm_client_check_connectivity ()</h3>
+<pre class="programlisting"><a class="link" href="libnm-nm-dbus-interface.html#NMConnectivityState"><span class="returnvalue">NMConnectivityState</span></a> 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="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>an <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>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>
+</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>
+</td>
+</tr>
+<tr>
+<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>
+<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><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"><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>
+</tr>
+<tr>
+<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><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>
+<hr>
+<div class="refsect2">
+<a name="nm-client-check-connectivity-finish"></a><h3>nm_client_check_connectivity_finish ()</h3>
+<pre class="programlisting"><a class="link" href="libnm-nm-dbus-interface.html#NMConnectivityState"><span class="returnvalue">NMConnectivityState</span></a> 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><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"><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>
+</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>
+</td>
+</tr>
+<tr>
+<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>
+<hr>
+<div class="refsect2">
+<a name="nm-client-save-hostname"></a><h3>nm_client_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_client_save_hostname (<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> *hostname</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>
+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>client</code></em> :</span></p></td>
+<td>the <a class="link" href="NMClient.html" title="NMClient"><code class="literal">NMClient</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. <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>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><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 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>
+<hr>
+<div class="refsect2">
+<a name="nm-client-save-hostname-async"></a><h3>nm_client_save_hostname_async ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_client_save_hostname_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>const <span class="type">char</span> *hostname</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>
+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>client</code></em> :</span></p></td>
+<td>the <a class="link" href="NMClient.html" title="NMClient"><code class="literal">NMClient</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. <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>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><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
+<td>callback to be called when the 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><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>
+<hr>
+<div class="refsect2">
+<a name="nm-client-save-hostname-finish"></a><h3>nm_client_save_hostname_finish ()</h3>
+<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_save_hostname_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>
+Gets the result of an <a class="link" href="NMClient.html#nm-client-save-hostname-async" title="nm_client_save_hostname_async ()"><code class="function">nm_client_save_hostname_async()</code></a> call.
+</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 <a class="link" href="NMClient.html" title="NMClient"><code class="literal">NMClient</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>result</code></em> :</span></p></td>
+<td>the result passed to the <a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html#GAsyncReadyCallback"><span class="type">GAsyncReadyCallback</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> 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>
+<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
+<code class="literal">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="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>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> NMDevice]</span>
+</td>
+</tr>
+</tbody>
+</table></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="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>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><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>
+<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="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>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><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>
+<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="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>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 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> NMActiveConnection]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</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="/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 align="left" valign="top">
+<col>
+</colgroup>
+<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 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>
+</tr>
+</tbody>
+</table></div>
+</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><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 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>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-client-activate-connection-async"></a><h3>nm_client_activate_connection_async ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_client_activate_connection_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="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 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 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 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>
+<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>
+<p>
+Note that the callback is invoked when NetworkManager has started activating
+the new connection, not when it finishes. You can used the returned
+<a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> object (in particular, <a class="link" href="NMActiveConnection.html#NMActiveConnection--state" title='The "state" property'><span class="type">"state"</span></a>) to
+track the activation to its completion.
+</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>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>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><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><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="/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><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><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
+<td>callback to be called when the activation has started</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>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-client-activate-connection-finish"></a><h3>nm_client_activate_connection_finish ()</h3>
+<pre class="programlisting"><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="returnvalue">NMActiveConnection</span></a> * nm_client_activate_connection_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>
+Gets the result of a call to <a class="link" href="NMClient.html#nm-client-activate-connection-async" title="nm_client_activate_connection_async ()"><code class="function">nm_client_activate_connection_async()</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>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"><em class="parameter"><code>result</code></em> :</span></p></td>
+<td>the result passed to the <a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html#GAsyncReadyCallback"><span class="type">GAsyncReadyCallback</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><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> on success, <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> on
+failure, in which case <em class="parameter"><code>error</code></em> will be set. <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-client-add-and-activate-connection-async"></a><h3>nm_client_add_and_activate_connection_async ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_client_add_and_activate_connection_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="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 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>
+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 asynchronously
+activated as with <a class="link" href="NMClient.html#nm-client-activate-connection-async" title="nm_client_activate_connection_async ()"><code class="function">nm_client_activate_connection_async()</code></a>. Cannot be used for
+VPN connections at this time.
+</p>
+<p>
+Note that the callback is invoked when NetworkManager has started activating
+the new connection, not when it finishes. You can used the returned
+<a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> object (in particular, <a class="link" href="NMActiveConnection.html#NMActiveConnection--state" title='The "state" property'><span class="type">"state"</span></a>) to
+track the activation to its completion.
+</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>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>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><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><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="/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><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><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
+<td>callback to be called when the activation has started</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>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-client-add-and-activate-connection-finish"></a><h3>nm_client_add_and_activate_connection_finish ()</h3>
+<pre class="programlisting"><a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="returnvalue">NMActiveConnection</span></a> * nm_client_add_and_activate_connection_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>
+Gets the result of a call to <a class="link" href="NMClient.html#nm-client-add-and-activate-connection-async" title="nm_client_add_and_activate_connection_async ()"><code class="function">nm_client_add_and_activate_connection_async()</code></a>.
+</p>
+<p>
+You can call <a class="link" href="NMActiveConnection.html#nm-active-connection-get-connection" title="nm_active_connection_get_connection ()"><code class="function">nm_active_connection_get_connection()</code></a> on the returned
+<a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> to find the path of the created <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</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>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"><em class="parameter"><code>result</code></em> :</span></p></td>
+<td>the result passed to the <a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html#GAsyncReadyCallback"><span class="type">GAsyncReadyCallback</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><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new <a class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> on success, <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> on
+failure, in which case <em class="parameter"><code>error</code></em> will be set. <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-client-deactivate-connection"></a><h3>nm_client_deactivate_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_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>,
+ <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>
+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 align="left" valign="top">
+<col>
+</colgroup>
+<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>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>
+<tr>
+<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><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>success or failure</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-client-deactivate-connection-async"></a><h3>nm_client_deactivate_connection_async ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_client_deactivate_connection_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 class="link" href="NMActiveConnection.html" title="NMActiveConnection"><span class="type">NMActiveConnection</span></a> *active</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 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 align="left" valign="top">
+<col>
+</colgroup>
+<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>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>
+<tr>
+<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><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
+<td>callback to be called when the deactivation has completed</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>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-client-deactivate-connection-finish"></a><h3>nm_client_deactivate_connection_finish ()</h3>
+<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_deactivate_connection_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>
+Gets the result of a call to <a class="link" href="NMClient.html#nm-client-deactivate-connection-async" title="nm_client_deactivate_connection_async ()"><code class="function">nm_client_deactivate_connection_async()</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>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>result</code></em> :</span></p></td>
+<td>the result passed to the <a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html#GAsyncReadyCallback"><span class="type">GAsyncReadyCallback</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><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>success or failure</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-client-get-connections"></a><h3>nm_client_get_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_connections (<em class="parameter"><code><a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> *client</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>client</code></em> :</span></p></td>
+<td>the <a class="link" href="NMClient.html" title="NMClient"><code class="literal">NMClient</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an array
+containing all connections provided by the remote settings service. 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> NMRemoteConnection]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-client-get-connection-by-id"></a><h3>nm_client_get_connection_by_id ()</h3>
+<pre class="programlisting"><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="returnvalue">NMRemoteConnection</span></a> * nm_client_get_connection_by_id (<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> *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 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 <a class="link" href="NMClient.html" title="NMClient"><code class="literal">NMClient</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><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>
+<hr>
+<div class="refsect2">
+<a name="nm-client-get-connection-by-path"></a><h3>nm_client_get_connection_by_path ()</h3>
+<pre class="programlisting"><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="returnvalue">NMRemoteConnection</span></a> * nm_client_get_connection_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> *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 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 <a class="link" href="NMClient.html" title="NMClient"><code class="literal">NMClient</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><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>
+<hr>
+<div class="refsect2">
+<a name="nm-client-get-connection-by-uuid"></a><h3>nm_client_get_connection_by_uuid ()</h3>
+<pre class="programlisting"><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="returnvalue">NMRemoteConnection</span></a> * nm_client_get_connection_by_uuid (<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> *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 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 <a class="link" href="NMClient.html" title="NMClient"><code class="literal">NMClient</code></a>
+</td>
+</tr>
+<tr>
+<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><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>
+<hr>
+<div class="refsect2">
+<a name="nm-client-add-connection-async"></a><h3>nm_client_add_connection_async ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_client_add_connection_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="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-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> save_to_disk</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>
+Requests that the remote settings service add the given settings to a new
+connection. If <em class="parameter"><code>save_to_disk</code></em> is <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, the connection is immediately written
+to disk; otherwise it is initially only stored in memory, but may be saved
+later 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>
+<p>
+<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 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 <a class="link" href="NMClient.html" title="NMClient"><code class="literal">NMClient</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><p><span class="term"><em class="parameter"><code>save_to_disk</code></em> :</span></p></td>
+<td>whether to immediately save the connection to disk</td>
+</tr>
+<tr>
+<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><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><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>
+<hr>
+<div class="refsect2">
+<a name="nm-client-add-connection-finish"></a><h3>nm_client_add_connection_finish ()</h3>
+<pre class="programlisting"><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="returnvalue">NMRemoteConnection</span></a> * nm_client_add_connection_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>
+Gets the result of a call to <a class="link" href="NMClient.html#nm-client-add-connection-async" title="nm_client_add_connection_async ()"><code class="function">nm_client_add_connection_async()</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>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"><em class="parameter"><code>result</code></em> :</span></p></td>
+<td>the result passed to the <a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html#GAsyncReadyCallback"><span class="type">GAsyncReadyCallback</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><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> on success, <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> on
+failure, in which case <em class="parameter"><code>error</code></em> will be set. <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-client-load-connections"></a><h3>nm_client_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_client_load_connections (<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> **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/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>
+Requests that the remote settings service load or reload the given files,
+adding or updating the connections described within.
+</p>
+<p>
+The changes to the indicated files will not yet be reflected in
+<em class="parameter"><code>client</code></em>'s connections array when the function returns.
+</p>
+<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>client</code></em> :</span></p></td>
+<td>the <a class="link" href="NMClient.html" title="NMClient"><code class="literal">NMClient</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>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><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>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-client-load-connections-async"></a><h3>nm_client_load_connections_async ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_client_load_connections_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><span class="type">char</span> **filenames</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>
+Requests that the remote settings service asynchronously load or reload the
+given files, adding or updating the connections described within.
+</p>
+<p>
+See <a class="link" href="NMClient.html#nm-client-load-connections" title="nm_client_load_connections ()"><code class="function">nm_client_load_connections()</code></a> for more details.
+</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 <a class="link" href="NMClient.html" title="NMClient"><code class="literal">NMClient</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>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><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
+<td>callback to be called when the 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><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>
+<hr>
+<div class="refsect2">
+<a name="nm-client-load-connections-finish"></a><h3>nm_client_load_connections_finish ()</h3>
+<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_load_connections_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><span class="type">char</span> ***failures</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>
+Gets the result of an <a class="link" href="NMClient.html#nm-client-load-connections-async" title="nm_client_load_connections_async ()"><code class="function">nm_client_load_connections_async()</code></a> call.
+</p>
+<p>
+See <a class="link" href="NMClient.html#nm-client-load-connections" title="nm_client_load_connections ()"><code class="function">nm_client_load_connections()</code></a> for more details.
+</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 <a class="link" href="NMClient.html" title="NMClient"><code class="literal">NMClient</code></a>
+</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>result</code></em> :</span></p></td>
+<td>the result passed to the <a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html#GAsyncReadyCallback"><span class="type">GAsyncReadyCallback</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><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>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-client-reload-connections"></a><h3>nm_client_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_client_reload_connections (<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>
+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>client</code></em> :</span></p></td>
+<td>the <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>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><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>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-client-reload-connections-async"></a><h3>nm_client_reload_connections_async ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_client_reload_connections_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>
+Requests that the remote settings service begin reloading 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>client</code></em> :</span></p></td>
+<td>the <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>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><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
+<td>callback to be called when the reload 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><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>
+<hr>
+<div class="refsect2">
+<a name="nm-client-reload-connections-finish"></a><h3>nm_client_reload_connections_finish ()</h3>
+<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_reload_connections_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>
+Gets the result of an <a class="link" href="NMClient.html#nm-client-reload-connections-async" title="nm_client_reload_connections_async ()"><code class="function">nm_client_reload_connections_async()</code></a> call.
+</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 <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>result</code></em> :</span></p></td>
+<td>the result passed to the <a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html#GAsyncReadyCallback"><span class="type">GAsyncReadyCallback</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>
+</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>* : 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>
+</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" <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>* : Read</pre>
+<p>
+The active connections.
+</p>
+<p>
+Element-type: NMActiveConnection
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMClient--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>
+If <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, adding and modifying connections is supported.
+</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMClient--connections"></a><h3>The <code class="literal">"connections"</code> property</h3>
+<pre class="programlisting"> "connections" <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>* : Read</pre>
+<p>
+The list of configured connections that are available to the user. (Note
+that this differs from the underlying D-Bus property, which may also
+contain the object paths of connections that the user does not have
+permission to read the details of.)
+</p>
+<p>
+Element-type: NMRemoteConnection
+</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 class="link" href="libnm-nm-dbus-interface.html#NMConnectivityState"><span class="type">NMConnectivityState</span></a> : Read</pre>
+<p>
+The network connectivity state.
+</p>
+<p>Default value: NM_CONNECTIVITY_UNKNOWN</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMClient--devices"></a><h3>The <code class="literal">"devices"</code> property</h3>
+<pre class="programlisting"> "devices" <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>* : Read</pre>
+<p>
+List of known network devices.
+</p>
+<p>
+Element-type: NMDevice
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMClient--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>
+The machine hostname stored in persistent configuration. This can be
+modified by calling <a class="link" href="NMClient.html#nm-client-save-hostname" title="nm_client_save_hostname ()"><code class="function">nm_client_save_hostname()</code></a>.
+</p>
+<p>Default value: NULL</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> : Read / Write</pre>
+<p>
+Whether networking is enabled.
+</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMClient--nm-running"></a><h3>The <code class="literal">"nm-running"</code> property</h3>
+<pre class="programlisting"> "nm-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 the daemon is running.
+</p>
+<p>Default value: FALSE</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>* : 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>
+</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>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMClient--state"></a><h3>The <code class="literal">"state"</code> property</h3>
+<pre class="programlisting"> "state" <a class="link" href="libnm-nm-dbus-interface.html#NMState"><span class="type">NMState</span></a> : Read</pre>
+<p>
+The current daemon state.
+</p>
+<p>Default value: NM_STATE_UNKNOWN</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>* : 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> : Read / Write</pre>
+<p>
+Whether WiMAX functionality is enabled.
+</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> : Read</pre>
+<p>
+Whether the WiMAX hardware is enabled.
+</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> : Read / Write</pre>
+<p>
+Whether wireless is enabled.
+</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> : Read</pre>
+<p>
+Whether the wireless hardware is enabled.
+</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> : Read / Write</pre>
+<p>
+Whether WWAN functionality is enabled.
+</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> : Read</pre>
+<p>
+Whether the WWAN hardware is enabled.
+</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-connection-added"></a><h3>The <code class="literal">"connection-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 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>
+Notifies that a <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> has been 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 settings object that received the signal</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the new connection</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-connection-removed"></a><h3>The <code class="literal">"connection-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 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>
+Notifies that a <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> has been 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 settings object that received the signal</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>connection</code></em> :</span></p></td>
+<td>the removed connection</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-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> NMDevice]</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) : <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> NMDevice]</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) : <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"><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"><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.19</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/libnm/html/NMDevice.html b/docs/libnm/html/NMDevice.html
new file mode 100644
index 000000000..9ac8d27a6
--- /dev/null
+++ b/docs/libnm/html/NMDevice.html
@@ -0,0 +1,1858 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMDevice</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference">
+<link rel="prev" href="ch04.html" title="Device and Runtime Configuration API Reference">
+<link rel="next" href="NMDeviceAdsl.html" title="NMDeviceAdsl">
+<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="ch04.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch04.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 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="#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>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMDevice.top_of_page"></a>NMDevice</span></h2>
+<p>NMDevice</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMDevice.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#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>
+struct <a class="link" href="NMDevice.html#NMDevice-struct" title="struct NMDevice">NMDevice</a>;
+ <a class="link" href="NMDevice.html#NMDeviceClass" title="NMDeviceClass">NMDeviceClass</a>;
+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>);
+<a class="link" href="libnm-nm-dbus-interface.html#NMDeviceType"><span class="returnvalue">NMDeviceType</span></a> <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>);
+<a class="link" href="libnm-nm-dbus-interface.html#NMDeviceCapabilities"><span class="returnvalue">NMDeviceCapabilities</span></a> <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="NMIPConfig.html" title="NMIPConfig"><span class="returnvalue">NMIPConfig</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="NMDhcpConfig.html" title="NMDhcpConfig"><span class="returnvalue">NMDhcpConfig</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="NMIPConfig.html" title="NMIPConfig"><span class="returnvalue">NMIPConfig</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="NMDhcpConfig.html" title="NMDhcpConfig"><span class="returnvalue">NMDhcpConfig</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>);
+<a class="link" href="libnm-nm-dbus-interface.html#NMDeviceState"><span class="returnvalue">NMDeviceState</span></a> <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>);
+<a class="link" href="libnm-nm-dbus-interface.html#NMDeviceStateReason"><span class="returnvalue">NMDeviceStateReason</span></a> <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>);
+<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>);
+<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-is-software" title="nm_device_is_software ()">nm_device_is_software</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>);
+<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-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 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="NMDevice.html#nm-device-disconnect-async" title="nm_device_disconnect_async ()">nm_device_disconnect_async</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/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 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-disconnect-finish" title="nm_device_disconnect_finish ()">nm_device_disconnect_finish</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/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-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMDevice.html#nm-device-delete" title="nm_device_delete ()">nm_device_delete</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/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="NMDevice.html#nm-device-delete-async" title="nm_device_delete_async ()">nm_device_delete_async</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/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 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-delete-finish" title="nm_device_delete_finish ()">nm_device_delete_finish</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/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-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</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-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</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="NMDeviceAdsl.html" title="NMDeviceAdsl">NMDeviceAdsl</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="NMDeviceBt.html" title="NMDeviceBt">NMDeviceBt</a>
+ +----<a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet">NMDeviceEthernet</a>
+ +----<a class="link" href="NMDeviceGeneric.html" title="NMDeviceGeneric">NMDeviceGeneric</a>
+ +----<a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband">NMDeviceInfiniband</a>
+ +----<a class="link" href="NMDeviceModem.html" title="NMDeviceModem">NMDeviceModem</a>
+ +----<a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh">NMDeviceOlpcMesh</a>
+ +----<a class="link" href="NMDeviceTeam.html" title="NMDeviceTeam">NMDeviceTeam</a>
+ +----<a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan">NMDeviceVlan</a>
+ +----<a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
+ +----<a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</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>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>* : Read
+ "<a class="link" href="NMDevice.html#NMDevice--capabilities" title='The "capabilities" property'>capabilities</a>" <a class="link" href="libnm-nm-dbus-interface.html#NMDeviceCapabilities"><span class="type">NMDeviceCapabilities</span></a> : Read
+ "<a class="link" href="NMDevice.html#NMDevice--device-type" title='The "device-type" property'>device-type</a>" <a class="link" href="libnm-nm-dbus-interface.html#NMDeviceType"><span class="type">NMDeviceType</span></a> : Read
+ "<a class="link" href="NMDevice.html#NMDevice--dhcp4-config" title='The "dhcp4-config" property'>dhcp4-config</a>" <a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig"><span class="type">NMDhcpConfig</span></a>* : Read
+ "<a class="link" href="NMDevice.html#NMDevice--dhcp6-config" title='The "dhcp6-config" property'>dhcp6-config</a>" <a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig"><span class="type">NMDhcpConfig</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="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</span></a>* : Read
+ "<a class="link" href="NMDevice.html#NMDevice--ip6-config" title='The "ip6-config" property'>ip6-config</a>" <a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</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 class="link" href="libnm-nm-dbus-interface.html#NMDeviceState"><span class="type">NMDeviceState</span></a> : Read
+ "<a class="link" href="NMDevice.html#NMDevice--state-reason" title='The "state-reason" property'>state-reason</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--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.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="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>struct NMDevice</h3>
+<pre class="programlisting">struct 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);
+
+ /* Methods */
+ 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);
+} NMDeviceClass;
+</pre>
+<p>
+</p>
+</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><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 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><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 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"><a class="link" href="libnm-nm-dbus-interface.html#NMDeviceType"><span class="returnvalue">NMDeviceType</span></a> 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><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 device type</td>
+</tr>
+</tbody>
+</table></div>
+</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="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="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 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>
+<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 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="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 driver 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-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="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="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 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>
+<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="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="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>
+<hr>
+<div class="refsect2">
+<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 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="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>
+<hr>
+<div class="refsect2">
+<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 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="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>
+<hr>
+<div class="refsect2">
+<a name="nm-device-get-capabilities"></a><h3>nm_device_get_capabilities ()</h3>
+<pre class="programlisting"><a class="link" href="libnm-nm-dbus-interface.html#NMDeviceCapabilities"><span class="returnvalue">NMDeviceCapabilities</span></a> 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 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="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>
+<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="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="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>
+<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="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="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>
+<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="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="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>
+<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="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="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>
+<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="NMIPConfig.html" title="NMIPConfig"><span class="returnvalue">NMIPConfig</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 IPv4 <a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</span></a> associated with the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>.
+</p>
+<p>
+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 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="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 IPv4 <a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</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>
+<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="NMDhcpConfig.html" title="NMDhcpConfig"><span class="returnvalue">NMDhcpConfig</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 IPv4 <a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig"><span class="type">NMDhcpConfig</span></a> associated with the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>.
+</p>
+<p>
+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 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="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 IPv4 <a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig"><span class="type">NMDhcpConfig</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>
+<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="NMIPConfig.html" title="NMIPConfig"><span class="returnvalue">NMIPConfig</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 IPv6 <a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</span></a> associated with the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>.
+</p>
+<p>
+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 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="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 IPv6 <a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</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>
+<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="NMDhcpConfig.html" title="NMDhcpConfig"><span class="returnvalue">NMDhcpConfig</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 IPv6 <a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig"><span class="type">NMDhcpConfig</span></a> associated with the <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>.
+</p>
+<p>
+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 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="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 IPv6 <a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig"><span class="type">NMDhcpConfig</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 DHCPv6. <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-get-state"></a><h3>nm_device_get_state ()</h3>
+<pre class="programlisting"><a class="link" href="libnm-nm-dbus-interface.html#NMDeviceState"><span class="returnvalue">NMDeviceState</span></a> 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 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="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>
+<hr>
+<div class="refsect2">
+<a name="nm-device-get-state-reason"></a><h3>nm_device_get_state_reason ()</h3>
+<pre class="programlisting"><a class="link" href="libnm-nm-dbus-interface.html#NMDeviceStateReason"><span class="returnvalue">NMDeviceStateReason</span></a> 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>);</pre>
+<p>
+Gets the reason for entering 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 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="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 reason for entering the current device state</td>
+</tr>
+</tbody>
+</table></div>
+</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="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="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>
+<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="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="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> NMRemoteConnection]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<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 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="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>
+<hr>
+<div class="refsect2">
+<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 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="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 MTU of the device.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-device-is-software"></a><h3>nm_device_is_software ()</h3>
+<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_is_software (<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 device is a software 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="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 <em class="parameter"><code>device</code></em> is a software device, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it is a hardware device.</td>
+</tr>
+</tbody>
+</table></div>
+</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="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="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>
+<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="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="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>
+<hr>
+<div class="refsect2">
+<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>, based on its vendor and product names.
+</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>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>
+<hr>
+<div class="refsect2">
+<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 align="left" valign="top">
+<col>
+</colgroup>
+<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>
+<hr>
+<div class="refsect2">
+<a name="nm-device-disconnect"></a><h3>nm_device_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_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 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>
+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="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="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>
+</td>
+</tr>
+<tr>
+<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><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 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 error, in which case <em class="parameter"><code>error</code></em> will be set.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-device-disconnect-async"></a><h3>nm_device_disconnect_async ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_device_disconnect_async (<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/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 begins disconnecting the device if currently connected, and
+prevents the device from automatically connecting to networks until the next
+manual network connection 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>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>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><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
+<td>callback to be called when the disconnect operation completes</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>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-device-disconnect-finish"></a><h3>nm_device_disconnect_finish ()</h3>
+<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_disconnect_finish (<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/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 a call to <a class="link" href="NMDevice.html#nm-device-disconnect-async" title="nm_device_disconnect_async ()"><code class="function">nm_device_disconnect_async()</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>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>result</code></em> :</span></p></td>
+<td>the result passed to the <a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html#GAsyncReadyCallback"><span class="type">GAsyncReadyCallback</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><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 error, in which case <em class="parameter"><code>error</code></em>
+will be set.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-device-delete"></a><h3>nm_device_delete ()</h3>
+<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_delete (<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/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>
+Deletes the software device. Hardware devices can't be deleted.
+</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="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>
+</td>
+</tr>
+<tr>
+<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><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 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 error, in which case <em class="parameter"><code>error</code></em>
+will be set.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-device-delete-async"></a><h3>nm_device_delete_async ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_device_delete_async (<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/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 begins deleteing the software device. Hardware devices can't
+be deleted.
+</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="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>
+</td>
+</tr>
+<tr>
+<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><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
+<td>callback to be called when delete operation completes</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>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-device-delete-finish"></a><h3>nm_device_delete_finish ()</h3>
+<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_delete_finish (<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/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 a call to <a class="link" href="NMDevice.html#nm-device-delete-async" title="nm_device_delete_async ()"><code class="function">nm_device_delete_async()</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>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>result</code></em> :</span></p></td>
+<td>the result passed to the <a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html#GAsyncReadyCallback"><span class="type">GAsyncReadyCallback</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><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 error, in which case <em class="parameter"><code>error</code></em>
+will be set.</td>
+</tr>
+</tbody>
+</table></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-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</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-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *connections</code></em>);</pre>
+<p>
+Filters a given array of connections for a given <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> object and returns
+connections which may be activated with the device. For example if <em class="parameter"><code>device</code></em>
+is a Wi-Fi device that supports only WEP encryption, the returned array 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 array will not contain
+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="NMClient.html#nm-client-get-connections" title="nm_client_get_connections ()"><code class="function">nm_client_get_connections()</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>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><p><span class="term"><em class="parameter"><code>connections</code></em> :</span></p></td>
+<td>an array of <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnections</span></a> to filter. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMConnection]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an array of
+<a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnections</span></a> that could be activated with the given <em class="parameter"><code>device</code></em>. The array
+should be freed with <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#g-ptr-array-unref"><code class="function">g_ptr_array_unref()</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> NMConnection]</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
+whether the connection may be activated with the device. For example if
+<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="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> 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>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>
+<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
+whether the connection may be activated with the device. For example if
+<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
+compatibility of the given device and connection. But, in addition, it sets
+GError when FALSE is returned.
+</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> 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>device</code></em>
+</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>
+</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>
+<hr>
+<div class="refsect2">
+<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 class="link" href="NMSetting.html" title="NMSetting"><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 class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> type</td>
+</tr>
+</tbody>
+</table></div>
+</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>* : 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="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="NMDevice--available-connections"></a><h3>The <code class="literal">"available-connections"</code> property</h3>
+<pre class="programlisting"> "available-connections" <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>* : Read</pre>
+<p>
+The available connections of the device
+</p>
+<p>
+Element-type: NMRemoteConnection
+</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 class="link" href="libnm-nm-dbus-interface.html#NMDeviceCapabilities"><span class="type">NMDeviceCapabilities</span></a> : Read</pre>
+<p>
+The capabilities of the device.
+</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 class="link" href="libnm-nm-dbus-interface.html#NMDeviceType"><span class="type">NMDeviceType</span></a> : Read</pre>
+<p>
+The numeric type of the device.
+</p>
+<p>Default value: NM_DEVICE_TYPE_UNKNOWN</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="NMDhcpConfig.html" title="NMDhcpConfig"><span class="type">NMDhcpConfig</span></a>* : Read</pre>
+<p>
+The IPv4 <a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig"><span class="type">NMDhcpConfig</span></a> of the device.
+</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="NMDhcpConfig.html" title="NMDhcpConfig"><span class="type">NMDhcpConfig</span></a>* : Read</pre>
+<p>
+The IPv6 <a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig"><span class="type">NMDhcpConfig</span></a> of the device.
+</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>* : Read</pre>
+<p>
+The driver of the device.
+</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>* : Read</pre>
+<p>
+The version of the device driver.
+</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> : 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="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="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="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="NMDevice--ip4-config"></a><h3>The <code class="literal">"ip4-config"</code> property</h3>
+<pre class="programlisting"> "ip4-config" <a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</span></a>* : Read</pre>
+<p>
+The <a href="https://developer.gnome.org/libnm-glib/0.9/NMIP4Config.html"><span class="type">NMIP4Config</span></a> of the device.
+</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="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</span></a>* : Read</pre>
+<p>
+The IPv6 <a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</span></a> of the device.
+</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> : Read</pre>
+<p>
+Whether the device is managed by NetworkManager.
+</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<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>
+</div>
+<hr>
+<div class="refsect2">
+<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>
+<p>Default value: NULL</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>* : 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 class="link" href="libnm-nm-dbus-interface.html#NMDeviceState"><span class="type">NMDeviceState</span></a> : Read</pre>
+<p>
+The state of the device.
+</p>
+<p>Default value: NM_DEVICE_STATE_UNKNOWN</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" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read</pre>
+<p>
+The reason for the device state.
+</p>
+<p>Default value: 0</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>* : 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>* : 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) : <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.19</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/libnm/html/NMDeviceAdsl.html b/docs/libnm/html/NMDeviceAdsl.html
new file mode 100644
index 000000000..e983c2871
--- /dev/null
+++ b/docs/libnm/html/NMDeviceAdsl.html
@@ -0,0 +1,147 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMDeviceAdsl</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference">
+<link rel="prev" href="NMDevice.html" title="NMDevice">
+<link rel="next" href="NMDeviceBond.html" title="NMDeviceBond">
+<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="NMDevice.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch04.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 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>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMDeviceAdsl.top_of_page"></a>NMDeviceAdsl</span></h2>
+<p>NMDeviceAdsl</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMDeviceAdsl.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#define <a class="link" href="NMDeviceAdsl.html#NM-DEVICE-ADSL-CARRIER:CAPS" title="NM_DEVICE_ADSL_CARRIER">NM_DEVICE_ADSL_CARRIER</a>
+struct <a class="link" href="NMDeviceAdsl.html#NMDeviceAdsl-struct" title="struct NMDeviceAdsl">NMDeviceAdsl</a>;
+ <a class="link" href="NMDeviceAdsl.html#NMDeviceAdslClass" title="NMDeviceAdslClass">NMDeviceAdslClass</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="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.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.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.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">
+<a name="NMDeviceAdsl.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="NMDeviceAdsl.details"></a><h2>Details</h2>
+<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>struct NMDeviceAdsl</h3>
+<pre class="programlisting">struct NMDeviceAdsl;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceAdslClass"></a><h3>NMDeviceAdslClass</h3>
+<pre class="programlisting">typedef struct {
+ NMDeviceClass parent;
+} NMDeviceAdslClass;
+</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="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> : 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.19</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/libnm/html/NMDeviceBond.html b/docs/libnm/html/NMDeviceBond.html
new file mode 100644
index 000000000..7213a45a0
--- /dev/null
+++ b/docs/libnm/html/NMDeviceBond.html
@@ -0,0 +1,243 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMDeviceBond</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch04.html" title="Device and Runtime Configuration 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.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="NMDeviceAdsl.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch04.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 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>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMDeviceBond.top_of_page"></a>NMDeviceBond</span></h2>
+<p>NMDeviceBond</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMDeviceBond.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#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>
+struct <a class="link" href="NMDeviceBond.html#NMDeviceBond-struct" title="struct NMDeviceBond">NMDeviceBond</a>;
+ <a class="link" href="NMDeviceBond.html#NMDeviceBondClass" title="NMDeviceBondClass">NMDeviceBondClass</a>;
+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.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.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.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>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>* : Read
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMDeviceBond.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="NMDeviceBond.details"></a><h2>Details</h2>
+<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-CARRIER:CAPS"></a><h3>NM_DEVICE_BOND_CARRIER</h3>
+<pre class="programlisting">#define NM_DEVICE_BOND_CARRIER "carrier"
+</pre>
+<p>
+</p>
+</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>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceBond-struct"></a><h3>struct NMDeviceBond</h3>
+<pre class="programlisting">struct NMDeviceBond;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceBondClass"></a><h3>NMDeviceBondClass</h3>
+<pre class="programlisting">typedef struct {
+ NMDeviceClass parent;
+} NMDeviceBondClass;
+</pre>
+<p>
+</p>
+</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="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-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-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> NMDevice]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</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> : 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>* : 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" <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>* : Read</pre>
+<p>
+The devices slaved to the bond device.
+</p>
+<p>
+Element-type: NMDevice
+</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/html/NMDeviceBridge.html b/docs/libnm/html/NMDeviceBridge.html
new file mode 100644
index 000000000..14ed6a103
--- /dev/null
+++ b/docs/libnm/html/NMDeviceBridge.html
@@ -0,0 +1,243 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMDeviceBridge</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference">
+<link rel="prev" href="NMDeviceBond.html" title="NMDeviceBond">
+<link rel="next" href="NMDeviceBt.html" title="NMDeviceBt">
+<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="NMDeviceBond.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch04.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 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="#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>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMDeviceBridge.top_of_page"></a>NMDeviceBridge</span></h2>
+<p>NMDeviceBridge</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMDeviceBridge.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#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>
+struct <a class="link" href="NMDeviceBridge.html#NMDeviceBridge-struct" title="struct NMDeviceBridge">NMDeviceBridge</a>;
+ <a class="link" href="NMDeviceBridge.html#NMDeviceBridgeClass" title="NMDeviceBridgeClass">NMDeviceBridgeClass</a>;
+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.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.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.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>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>* : Read
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMDeviceBridge.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="NMDeviceBridge.details"></a><h2>Details</h2>
+<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>
+<p>
+</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>
+<p>
+</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>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceBridge-struct"></a><h3>struct NMDeviceBridge</h3>
+<pre class="programlisting">struct NMDeviceBridge;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceBridgeClass"></a><h3>NMDeviceBridgeClass</h3>
+<pre class="programlisting">typedef struct {
+ NMDeviceClass parent;
+} NMDeviceBridgeClass;
+</pre>
+<p>
+</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="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>
+</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="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>
+</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="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> NMDevice]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</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> : Read</pre>
+<p>
+Whether the device has carrier.
+</p>
+<p>Default value: FALSE</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>* : Read</pre>
+<p>
+The hardware (MAC) address of the device.
+</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceBridge--slaves"></a><h3>The <code class="literal">"slaves"</code> property</h3>
+<pre class="programlisting"> "slaves" <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>* : Read</pre>
+<p>
+The devices slaved to the bridge device.
+</p>
+<p>
+Element-type: NMDevice
+</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/html/NMDeviceBt.html b/docs/libnm/html/NMDeviceBt.html
new file mode 100644
index 000000000..d074d0bfa
--- /dev/null
+++ b/docs/libnm/html/NMDeviceBt.html
@@ -0,0 +1,237 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMDeviceBt</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference">
+<link rel="prev" href="NMDeviceBridge.html" title="NMDeviceBridge">
+<link rel="next" href="NMDeviceEthernet.html" title="NMDeviceEthernet">
+<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="ch04.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 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="#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>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMDeviceBt.top_of_page"></a>NMDeviceBt</span></h2>
+<p>NMDeviceBt</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMDeviceBt.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#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>
+struct <a class="link" href="NMDeviceBt.html#NMDeviceBt-struct" title="struct NMDeviceBt">NMDeviceBt</a>;
+ <a class="link" href="NMDeviceBt.html#NMDeviceBtClass" title="NMDeviceBtClass">NMDeviceBtClass</a>;
+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>);
+<a class="link" href="libnm-nm-dbus-interface.html#NMBluetoothCapabilities"><span class="returnvalue">NMBluetoothCapabilities</span></a> <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.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 class="link" href="libnm-nm-dbus-interface.html#NMBluetoothCapabilities"><span class="type">NMBluetoothCapabilities</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="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>
+<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>
+<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>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceBt-struct"></a><h3>struct NMDeviceBt</h3>
+<pre class="programlisting">struct NMDeviceBt;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceBtClass"></a><h3>NMDeviceBtClass</h3>
+<pre class="programlisting">typedef struct {
+ NMDeviceClass parent;
+} NMDeviceBtClass;
+</pre>
+<p>
+</p>
+</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="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="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>
+<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="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="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>
+<hr>
+<div class="refsect2">
+<a name="nm-device-bt-get-capabilities"></a><h3>nm_device_bt_get_capabilities ()</h3>
+<pre class="programlisting"><a class="link" href="libnm-nm-dbus-interface.html#NMBluetoothCapabilities"><span class="returnvalue">NMBluetoothCapabilities</span></a> 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 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="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>a combination of <a class="link" href="libnm-nm-dbus-interface.html#NMBluetoothCapabilities"><span class="type">NMBluetoothCapabilities</span></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</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 class="link" href="libnm-nm-dbus-interface.html#NMBluetoothCapabilities"><span class="type">NMBluetoothCapabilities</span></a> : Read</pre>
+<p>
+The device's bluetooth capabilities, a combination of <a class="link" href="libnm-nm-dbus-interface.html#NMBluetoothCapabilities"><span class="type">NMBluetoothCapabilities</span></a>.
+</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>* : Read</pre>
+<p>
+The hardware (MAC) address of the device.
+</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>* : Read</pre>
+<p>
+The name of the bluetooth device.
+</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/html/NMDeviceEthernet.html b/docs/libnm/html/NMDeviceEthernet.html
new file mode 100644
index 000000000..2b5681d96
--- /dev/null
+++ b/docs/libnm/html/NMDeviceEthernet.html
@@ -0,0 +1,286 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMDeviceEthernet</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference">
+<link rel="prev" href="NMDeviceBt.html" title="NMDeviceBt">
+<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="NMDeviceBt.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch04.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 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="#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>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMDeviceEthernet.top_of_page"></a>NMDeviceEthernet</span></h2>
+<p>NMDeviceEthernet</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMDeviceEthernet.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#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>
+struct <a class="link" href="NMDeviceEthernet.html#NMDeviceEthernet-struct" title="struct NMDeviceEthernet">NMDeviceEthernet</a>;
+ <a class="link" href="NMDeviceEthernet.html#NMDeviceEthernetClass" title="NMDeviceEthernetClass">NMDeviceEthernetClass</a>;
+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.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.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.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">
+<a name="NMDeviceEthernet.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="NMDeviceEthernet.details"></a><h2>Details</h2>
+<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>
+<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-SPEED:CAPS"></a><h3>NM_DEVICE_ETHERNET_SPEED</h3>
+<pre class="programlisting">#define NM_DEVICE_ETHERNET_SPEED "speed"
+</pre>
+<p>
+</p>
+</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>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceEthernet-struct"></a><h3>struct NMDeviceEthernet</h3>
+<pre class="programlisting">struct NMDeviceEthernet;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceEthernetClass"></a><h3>NMDeviceEthernetClass</h3>
+<pre class="programlisting">typedef struct {
+ NMDeviceClass parent;
+} NMDeviceEthernetClass;
+</pre>
+<p>
+</p>
+</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="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-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-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-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> : 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>* : 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>* : 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> : 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.19</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/libnm/html/NMDeviceGeneric.html b/docs/libnm/html/NMDeviceGeneric.html
new file mode 100644
index 000000000..3efbf0a69
--- /dev/null
+++ b/docs/libnm/html/NMDeviceGeneric.html
@@ -0,0 +1,167 @@
+<!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 Reference Manual">
+<link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference">
+<link rel="prev" href="NMDeviceEthernet.html" title="NMDeviceEthernet">
+<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="NMDeviceEthernet.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch04.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 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">#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>
+struct <a class="link" href="NMDeviceGeneric.html#NMDeviceGeneric-struct" title="struct NMDeviceGeneric">NMDeviceGeneric</a>;
+ <a class="link" href="NMDeviceGeneric.html#NMDeviceGenericClass" title="NMDeviceGenericClass">NMDeviceGenericClass</a>;
+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="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>struct NMDeviceGeneric</h3>
+<pre class="programlisting">struct NMDeviceGeneric;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceGenericClass"></a><h3>NMDeviceGenericClass</h3>
+<pre class="programlisting">typedef struct {
+ NMDeviceClass parent;
+} NMDeviceGenericClass;
+</pre>
+<p>
+</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>
+</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/html/NMDeviceInfiniband.html b/docs/libnm/html/NMDeviceInfiniband.html
new file mode 100644
index 000000000..b5646e853
--- /dev/null
+++ b/docs/libnm/html/NMDeviceInfiniband.html
@@ -0,0 +1,193 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMDeviceInfiniband</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference">
+<link rel="prev" href="NMDeviceGeneric.html" title="NMDeviceGeneric">
+<link rel="next" href="NMDeviceModem.html" title="NMDeviceModem">
+<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="NMDeviceGeneric.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch04.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 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="#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>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMDeviceInfiniband.top_of_page"></a>NMDeviceInfiniband</span></h2>
+<p>NMDeviceInfiniband</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMDeviceInfiniband.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#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>
+struct <a class="link" href="NMDeviceInfiniband.html#NMDeviceInfiniband-struct" title="struct NMDeviceInfiniband">NMDeviceInfiniband</a>;
+ <a class="link" href="NMDeviceInfiniband.html#NMDeviceInfinibandClass" title="NMDeviceInfinibandClass">NMDeviceInfinibandClass</a>;
+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.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.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.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">
+<a name="NMDeviceInfiniband.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="NMDeviceInfiniband.details"></a><h2>Details</h2>
+<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>
+<p>
+</p>
+</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>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceInfiniband-struct"></a><h3>struct NMDeviceInfiniband</h3>
+<pre class="programlisting">struct NMDeviceInfiniband;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceInfinibandClass"></a><h3>NMDeviceInfinibandClass</h3>
+<pre class="programlisting">typedef struct {
+ NMDeviceClass parent;
+} NMDeviceInfinibandClass;
+</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="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-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> : 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>* : 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.19</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/libnm/html/NMDeviceModem.html b/docs/libnm/html/NMDeviceModem.html
new file mode 100644
index 000000000..12e5d37d7
--- /dev/null
+++ b/docs/libnm/html/NMDeviceModem.html
@@ -0,0 +1,202 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMDeviceModem</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch04.html" title="Device and Runtime Configuration 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.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="NMDeviceInfiniband.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch04.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 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="#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>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMDeviceModem.top_of_page"></a>NMDeviceModem</span></h2>
+<p>NMDeviceModem</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMDeviceModem.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#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>
+struct <a class="link" href="NMDeviceModem.html#NMDeviceModem-struct" title="struct NMDeviceModem">NMDeviceModem</a>;
+ <a class="link" href="NMDeviceModem.html#NMDeviceModemClass" title="NMDeviceModemClass">NMDeviceModemClass</a>;
+<a class="link" href="libnm-nm-dbus-interface.html#NMDeviceModemCapabilities"><span class="returnvalue">NMDeviceModemCapabilities</span></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>
+ (<em class="parameter"><code><a class="link" href="NMDeviceModem.html" title="NMDeviceModem"><span class="type">NMDeviceModem</span></a> *self</code></em>);
+<a class="link" href="libnm-nm-dbus-interface.html#NMDeviceModemCapabilities"><span class="returnvalue">NMDeviceModemCapabilities</span></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>
+ (<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.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.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.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 class="link" href="libnm-nm-dbus-interface.html#NMDeviceModemCapabilities"><span class="type">NMDeviceModemCapabilities</span></a> : Read
+ "<a class="link" href="NMDeviceModem.html#NMDeviceModem--modem-capabilities" title='The "modem-capabilities" property'>modem-capabilities</a>" <a class="link" href="libnm-nm-dbus-interface.html#NMDeviceModemCapabilities"><span class="type">NMDeviceModemCapabilities</span></a> : Read
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMDeviceModem.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="NMDeviceModem.details"></a><h2>Details</h2>
+<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>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-MODEM-CURRENT-CAPABILITIES:CAPS"></a><h3>NM_DEVICE_MODEM_CURRENT_CAPABILITIES</h3>
+<pre class="programlisting">#define NM_DEVICE_MODEM_CURRENT_CAPABILITIES "current-capabilities"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceModem-struct"></a><h3>struct NMDeviceModem</h3>
+<pre class="programlisting">struct NMDeviceModem;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceModemClass"></a><h3>NMDeviceModemClass</h3>
+<pre class="programlisting">typedef struct {
+ NMDeviceClass parent;
+} 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"><a class="link" href="libnm-nm-dbus-interface.html#NMDeviceModemCapabilities"><span class="returnvalue">NMDeviceModemCapabilities</span></a> 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"><a class="link" href="libnm-nm-dbus-interface.html#NMDeviceModemCapabilities"><span class="returnvalue">NMDeviceModemCapabilities</span></a> 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 class="link" href="libnm-nm-dbus-interface.html#NMDeviceModemCapabilities"><span class="type">NMDeviceModemCapabilities</span></a> : Read</pre>
+<p>
+The generic family of access technologies the modem currently supports
+without a firmware reload or reinitialization.
+</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 class="link" href="libnm-nm-dbus-interface.html#NMDeviceModemCapabilities"><span class="type">NMDeviceModemCapabilities</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>
+</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/html/NMDeviceOlpcMesh.html b/docs/libnm/html/NMDeviceOlpcMesh.html
new file mode 100644
index 000000000..88a6d71b2
--- /dev/null
+++ b/docs/libnm/html/NMDeviceOlpcMesh.html
@@ -0,0 +1,239 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMDeviceOlpcMesh</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference">
+<link rel="prev" href="NMDeviceModem.html" title="NMDeviceModem">
+<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="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="ch04.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 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="#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>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMDeviceOlpcMesh.top_of_page"></a>NMDeviceOlpcMesh</span></h2>
+<p>NMDeviceOlpcMesh</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMDeviceOlpcMesh.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#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>
+struct <a class="link" href="NMDeviceOlpcMesh.html#NMDeviceOlpcMesh-struct" title="struct NMDeviceOlpcMesh">NMDeviceOlpcMesh</a>;
+ <a class="link" href="NMDeviceOlpcMesh.html#NMDeviceOlpcMeshClass" title="NMDeviceOlpcMeshClass">NMDeviceOlpcMeshClass</a>;
+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.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.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.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">
+<a name="NMDeviceOlpcMesh.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="NMDeviceOlpcMesh.details"></a><h2>Details</h2>
+<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-COMPANION:CAPS"></a><h3>NM_DEVICE_OLPC_MESH_COMPANION</h3>
+<pre class="programlisting">#define NM_DEVICE_OLPC_MESH_COMPANION "companion"
+</pre>
+<p>
+</p>
+</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>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceOlpcMesh-struct"></a><h3>struct NMDeviceOlpcMesh</h3>
+<pre class="programlisting">struct NMDeviceOlpcMesh;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceOlpcMeshClass"></a><h3>NMDeviceOlpcMeshClass</h3>
+<pre class="programlisting">typedef struct {
+ NMDeviceClass parent;
+} NMDeviceOlpcMeshClass;
+</pre>
+<p>
+</p>
+</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="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-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-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> : 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>* : 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>* : 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.19</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/libnm/html/NMDeviceTeam.html b/docs/libnm/html/NMDeviceTeam.html
new file mode 100644
index 000000000..9edc63f64
--- /dev/null
+++ b/docs/libnm/html/NMDeviceTeam.html
@@ -0,0 +1,243 @@
+<!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 Reference Manual">
+<link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference">
+<link rel="prev" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh">
+<link rel="next" href="NMDeviceVlan.html" title="NMDeviceVlan">
+<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="NMDeviceOlpcMesh.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch04.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 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="#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">#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>
+struct <a class="link" href="NMDeviceTeam.html#NMDeviceTeam-struct" title="struct NMDeviceTeam">NMDeviceTeam</a>;
+ <a class="link" href="NMDeviceTeam.html#NMDeviceTeamClass" title="NMDeviceTeamClass">NMDeviceTeamClass</a>;
+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>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>* : 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="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>struct NMDeviceTeam</h3>
+<pre class="programlisting">struct NMDeviceTeam;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceTeamClass"></a><h3>NMDeviceTeamClass</h3>
+<pre class="programlisting">typedef struct {
+ NMDeviceClass parent;
+} NMDeviceTeamClass;
+</pre>
+<p>
+</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>
+</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>
+</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> NMDevice]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</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" <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>* : Read</pre>
+<p>
+The devices enslaved to the team device.
+</p>
+<p>
+Element-type: NMDevice
+</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/html/NMDeviceVlan.html b/docs/libnm/html/NMDeviceVlan.html
new file mode 100644
index 000000000..7351cc96e
--- /dev/null
+++ b/docs/libnm/html/NMDeviceVlan.html
@@ -0,0 +1,278 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMDeviceVlan</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference">
+<link rel="prev" href="NMDeviceTeam.html" title="NMDeviceTeam">
+<link rel="next" href="NMDeviceWifi.html" title="NMDeviceWifi">
+<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="ch04.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 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="#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>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMDeviceVlan.top_of_page"></a>NMDeviceVlan</span></h2>
+<p>NMDeviceVlan</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMDeviceVlan.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#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-PARENT:CAPS" title="NM_DEVICE_VLAN_PARENT">NM_DEVICE_VLAN_PARENT</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>
+struct <a class="link" href="NMDeviceVlan.html#NMDeviceVlan-struct" title="struct NMDeviceVlan">NMDeviceVlan</a>;
+ <a class="link" href="NMDeviceVlan.html#NMDeviceVlanClass" title="NMDeviceVlanClass">NMDeviceVlanClass</a>;
+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 class="link" href="NMDevice.html" title="NMDevice"><span class="returnvalue">NMDevice</span></a> * <a class="link" href="NMDeviceVlan.html#nm-device-vlan-get-parent" title="nm_device_vlan_get_parent ()">nm_device_vlan_get_parent</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--parent" title='The "parent" property'>parent</a>" <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</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.details"></a><h2>Details</h2>
+<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>
+<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>
+<hr>
+<div class="refsect2">
+<a name="NM-DEVICE-VLAN-PARENT:CAPS"></a><h3>NM_DEVICE_VLAN_PARENT</h3>
+<pre class="programlisting">#define NM_DEVICE_VLAN_PARENT "parent"
+</pre>
+<p>
+</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>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceVlan-struct"></a><h3>struct NMDeviceVlan</h3>
+<pre class="programlisting">struct NMDeviceVlan;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceVlanClass"></a><h3>NMDeviceVlanClass</h3>
+<pre class="programlisting">typedef struct {
+ NMDeviceClass parent;
+} NMDeviceVlanClass;
+</pre>
+<p>
+</p>
+</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="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="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>
+<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="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="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>
+<hr>
+<div class="refsect2">
+<a name="nm-device-vlan-get-parent"></a><h3>nm_device_vlan_get_parent ()</h3>
+<pre class="programlisting"><a class="link" href="NMDevice.html" title="NMDevice"><span class="returnvalue">NMDevice</span></a> * nm_device_vlan_get_parent (<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 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="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 device's parent device. <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-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 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="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 device's VLAN ID</td>
+</tr>
+</tbody>
+</table></div>
+</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> : Read</pre>
+<p>
+Whether the device has carrier.
+</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>* : Read</pre>
+<p>
+The hardware (MAC) address of the device.
+</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceVlan--parent"></a><h3>The <code class="literal">"parent"</code> property</h3>
+<pre class="programlisting"> "parent" <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>* : Read</pre>
+<p>
+The devices's parent device.
+</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> : Read</pre>
+<p>
+The device's VLAN ID.
+</p>
+<p>Allowed values: &lt;= 4095</p>
+<p>Default value: 0</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/html/NMDeviceWifi.html b/docs/libnm/html/NMDeviceWifi.html
new file mode 100644
index 000000000..4fce89857
--- /dev/null
+++ b/docs/libnm/html/NMDeviceWifi.html
@@ -0,0 +1,668 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMDeviceWifi</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference">
+<link rel="prev" href="NMDeviceVlan.html" title="NMDeviceVlan">
+<link rel="next" href="NMDeviceWimax.html" title="NMDeviceWimax">
+<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="NMDeviceVlan.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch04.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 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="#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>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMDeviceWifi.top_of_page"></a>NMDeviceWifi</span></h2>
+<p>NMDeviceWifi</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMDeviceWifi.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#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>
+struct <a class="link" href="NMDeviceWifi.html#NMDeviceWifi-struct" title="struct NMDeviceWifi">NMDeviceWifi</a>;
+ <a class="link" href="NMDeviceWifi.html#NMDeviceWifiClass" title="NMDeviceWifiClass">NMDeviceWifiClass</a>;
+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>);
+<a class="link" href="libnm-nm-dbus-interface.html#NM80211Mode"><span class="returnvalue">NM80211Mode</span></a> <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>);
+<a class="link" href="libnm-nm-dbus-interface.html#NMDeviceWifiCapabilities"><span class="returnvalue">NMDeviceWifiCapabilities</span></a> <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>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMDeviceWifi.html#nm-device-wifi-request-scan" title="nm_device_wifi_request_scan ()">nm_device_wifi_request_scan</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/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="NMDeviceWifi.html#nm-device-wifi-request-scan-async" title="nm_device_wifi_request_scan_async ()">nm_device_wifi_request_scan_async</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/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 href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMDeviceWifi.html#nm-device-wifi-request-scan-finish" title="nm_device_wifi_request_scan_finish ()">nm_device_wifi_request_scan_finish</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/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>
+</div>
+<div class="refsect1">
+<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>
+<pre class="synopsis">
+ "<a class="link" href="NMDeviceWifi.html#NMDeviceWifi--access-points" title='The "access-points" property'>access-points</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>* : 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 class="link" href="libnm-nm-dbus-interface.html#NM80211Mode"><span class="type">NM80211Mode</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 class="link" href="libnm-nm-dbus-interface.html#NMDeviceWifiCapabilities"><span class="type">NMDeviceWifiCapabilities</span></a> : Read
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMDeviceWifi.signals"></a><h2>Signals</h2>
+<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.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="NMDeviceWifi.details"></a><h2>Details</h2>
+<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>
+<p>
+</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="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-BITRATE:CAPS"></a><h3>NM_DEVICE_WIFI_BITRATE</h3>
+<pre class="programlisting">#define NM_DEVICE_WIFI_BITRATE "bitrate"
+</pre>
+<p>
+</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>
+<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-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>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceWifi-struct"></a><h3>struct NMDeviceWifi</h3>
+<pre class="programlisting">struct 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);
+} NMDeviceWifiClass;
+</pre>
+<p>
+</p>
+</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="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"><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>
+<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="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"><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-wifi-get-mode"></a><h3>nm_device_wifi_get_mode ()</h3>
+<pre class="programlisting"><a class="link" href="libnm-nm-dbus-interface.html#NM80211Mode"><span class="returnvalue">NM80211Mode</span></a> 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 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"><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-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 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"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the bit rate (kbit/s)</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-device-wifi-get-capabilities"></a><h3>nm_device_wifi_get_capabilities ()</h3>
+<pre class="programlisting"><a class="link" href="libnm-nm-dbus-interface.html#NMDeviceWifiCapabilities"><span class="returnvalue">NMDeviceWifiCapabilities</span></a> 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 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"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the capabilities</td>
+</tr>
+</tbody>
+</table></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="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"><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>
+</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><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>path</code></em> :</span></p></td>
+<td>the object path of the access point</td>
+</tr>
+<tr>
+<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>
+<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><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>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> NMAccessPoint]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-device-wifi-request-scan"></a><h3>nm_device_wifi_request_scan ()</h3>
+<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_wifi_request_scan (<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/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>
+Request NM to scan for access points on <em class="parameter"><code>device</code></em>. Note that the function
+returns immediately after requesting the scan, and it may take some time
+after that for the scan to complete.
+</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>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><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 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 error, in which case <em class="parameter"><code>error</code></em> will be
+set.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-device-wifi-request-scan-async"></a><h3>nm_device_wifi_request_scan_async ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_device_wifi_request_scan_async (<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/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>
+Request NM to scan for access points on <em class="parameter"><code>device</code></em>. Note that <em class="parameter"><code>callback</code></em> will be
+called immediately after requesting the scan, and it may take some time after
+that for the scan to complete.
+</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>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><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
+<td>callback to be called when the scan has been requested</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>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-device-wifi-request-scan-finish"></a><h3>nm_device_wifi_request_scan_finish ()</h3>
+<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_wifi_request_scan_finish (<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/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 a call to <a class="link" href="NMDeviceWifi.html#nm-device-wifi-request-scan-async" title="nm_device_wifi_request_scan_async ()"><code class="function">nm_device_wifi_request_scan_async()</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>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>result</code></em> :</span></p></td>
+<td>the result passed to the <a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html#GAsyncReadyCallback"><span class="type">GAsyncReadyCallback</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><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 error, in which case <em class="parameter"><code>error</code></em> will be
+set.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="refsect1">
+<a name="NMDeviceWifi.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="NMDeviceWifi--access-points"></a><h3>The <code class="literal">"access-points"</code> property</h3>
+<pre class="programlisting"> "access-points" <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>* : Read</pre>
+<p>
+List of all Wi-Fi access points the device can see.
+</p>
+<p>
+Element-type: NMAccessPoint
+</p>
+</div>
+<hr>
+<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>* : 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="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="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>
+<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 class="link" href="libnm-nm-dbus-interface.html#NM80211Mode"><span class="type">NM80211Mode</span></a> : Read</pre>
+<p>
+The mode of the device.
+</p>
+<p>Default value: NM_802_11_MODE_UNKNOWN</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>* : 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 class="link" href="libnm-nm-dbus-interface.html#NMDeviceWifiCapabilities"><span class="type">NMDeviceWifiCapabilities</span></a> : Read</pre>
+<p>
+The wireless capabilities of the device.
+</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) : <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) : <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.19</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/libnm/html/NMDeviceWimax.html b/docs/libnm/html/NMDeviceWimax.html
new file mode 100644
index 000000000..2a97f81dc
--- /dev/null
+++ b/docs/libnm/html/NMDeviceWimax.html
@@ -0,0 +1,597 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMDeviceWimax</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference">
+<link rel="prev" href="NMDeviceWifi.html" title="NMDeviceWifi">
+<link rel="next" href="NMActiveConnection.html" title="NMActiveConnection">
+<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="NMDeviceWifi.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch04.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 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="#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>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMDeviceWimax.top_of_page"></a>NMDeviceWimax</span></h2>
+<p>NMDeviceWimax</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMDeviceWimax.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#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>
+struct <a class="link" href="NMDeviceWimax.html#NMDeviceWimax-struct" title="struct NMDeviceWimax">NMDeviceWimax</a>;
+ <a class="link" href="NMDeviceWimax.html#NMDeviceWimaxClass" title="NMDeviceWimaxClass">NMDeviceWimaxClass</a>;
+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>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>* : 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.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="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>struct NMDeviceWimax</h3>
+<pre class="programlisting">struct 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-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 align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<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><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-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 align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<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><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>
+<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 align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<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><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><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>
+<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="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>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><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> NMWimaxNsp]</span>
+</td>
+</tr>
+</tbody>
+</table></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="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="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 center frequency in KHz, or 0</td>
+</tr>
+</tbody>
+</table></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
+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="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="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>
+<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
+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="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="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>
+<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
+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="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="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>
+<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="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="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 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>
+</tr>
+</tbody>
+</table></div>
+</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>* : 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="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="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="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="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="NMDeviceWimax--nsps"></a><h3>The <code class="literal">"nsps"</code> property</h3>
+<pre class="programlisting"> "nsps" <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>* : Read</pre>
+<p>
+List of all WiMAX Network Service Providers the device can see.
+</p>
+<p>
+Element-type: NMWimaxNsp
+</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> : 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="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>
+<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) : <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) : <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.19</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/libnm/html/NMDhcpConfig.html b/docs/libnm/html/NMDhcpConfig.html
new file mode 100644
index 000000000..3a48d7304
--- /dev/null
+++ b/docs/libnm/html/NMDhcpConfig.html
@@ -0,0 +1,232 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMDhcpConfig</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference">
+<link rel="prev" href="NMIPConfig.html" title="NMIPConfig">
+<link rel="next" href="ch05.html" title="Utility API Reference">
+<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="NMIPConfig.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch04.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 Reference Manual</th>
+<td><a accesskey="n" href="ch05.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMDhcpConfig.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMDhcpConfig.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMDhcpConfig.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMDhcpConfig.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+  | 
+ <a href="#NMDhcpConfig.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="NMDhcpConfig"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMDhcpConfig.top_of_page"></a>NMDhcpConfig</span></h2>
+<p>NMDhcpConfig</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMDhcpConfig.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">struct <a class="link" href="NMDhcpConfig.html#NMDhcpConfig-struct" title="struct NMDhcpConfig">NMDhcpConfig</a>;
+ <a class="link" href="NMDhcpConfig.html#NMDhcpConfigClass" title="NMDhcpConfigClass">NMDhcpConfigClass</a>;
+#define <a class="link" href="NMDhcpConfig.html#NM-DHCP-CONFIG-FAMILY:CAPS" title="NM_DHCP_CONFIG_FAMILY">NM_DHCP_CONFIG_FAMILY</a>
+#define <a class="link" href="NMDhcpConfig.html#NM-DHCP-CONFIG-OPTIONS:CAPS" title="NM_DHCP_CONFIG_OPTIONS">NM_DHCP_CONFIG_OPTIONS</a>
+<span class="returnvalue">int</span> <a class="link" href="NMDhcpConfig.html#nm-dhcp-config-get-family" title="nm_dhcp_config_get_family ()">nm_dhcp_config_get_family</a> (<em class="parameter"><code><a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig"><span class="type">NMDhcpConfig</span></a> *config</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="NMDhcpConfig.html#nm-dhcp-config-get-options" title="nm_dhcp_config_get_options ()">nm_dhcp_config_get_options</a> (<em class="parameter"><code><a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig"><span class="type">NMDhcpConfig</span></a> *config</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMDhcpConfig.html#nm-dhcp-config-get-one-option" title="nm_dhcp_config_get_one_option ()">nm_dhcp_config_get_one_option</a> (<em class="parameter"><code><a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig"><span class="type">NMDhcpConfig</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="NMDhcpConfig.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>
+ +----NMDhcpConfig
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMDhcpConfig.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+NMDhcpConfig 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="NMDhcpConfig.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMDhcpConfig.html#NMDhcpConfig--family" title='The "family" property'>family</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="NMDhcpConfig.html#NMDhcpConfig--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">
+<a name="NMDhcpConfig.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="NMDhcpConfig.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NMDhcpConfig-struct"></a><h3>struct NMDhcpConfig</h3>
+<pre class="programlisting">struct NMDhcpConfig;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDhcpConfigClass"></a><h3>NMDhcpConfigClass</h3>
+<pre class="programlisting">typedef struct {
+ NMObjectClass parent;
+} NMDhcpConfigClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DHCP-CONFIG-FAMILY:CAPS"></a><h3>NM_DHCP_CONFIG_FAMILY</h3>
+<pre class="programlisting">#define NM_DHCP_CONFIG_FAMILY "family"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DHCP-CONFIG-OPTIONS:CAPS"></a><h3>NM_DHCP_CONFIG_OPTIONS</h3>
+<pre class="programlisting">#define NM_DHCP_CONFIG_OPTIONS "options"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-dhcp-config-get-family"></a><h3>nm_dhcp_config_get_family ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span> nm_dhcp_config_get_family (<em class="parameter"><code><a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig"><span class="type">NMDhcpConfig</span></a> *config</code></em>);</pre>
+<p>
+Gets the IP address family of the configuration
+</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>config</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig"><span class="type">NMDhcpConfig</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the IP address family; either <code class="literal">AF_INET</code> or
+<code class="literal">AF_INET6</code>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-dhcp-config-get-options"></a><h3>nm_dhcp_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_dhcp_config_get_options (<em class="parameter"><code><a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig"><span class="type">NMDhcpConfig</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 align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>config</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig"><span class="type">NMDhcpConfig</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 utf8]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-dhcp-config-get-one-option"></a><h3>nm_dhcp_config_get_one_option ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_dhcp_config_get_one_option (<em class="parameter"><code><a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig"><span class="type">NMDhcpConfig</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 align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>config</code></em> :</span></p></td>
+<td>a <a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig"><span class="type">NMDhcpConfig</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><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>
+<div class="refsect1">
+<a name="NMDhcpConfig.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="NMDhcpConfig--family"></a><h3>The <code class="literal">"family"</code> property</h3>
+<pre class="programlisting"> "family" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read</pre>
+<p>
+The IP address family of the configuration; either
+<code class="literal">AF_INET</code> or <code class="literal">AF_INET6</code>.
+</p>
+<p>Allowed values: [0,255]</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDhcpConfig--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,utf8)
+</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/html/NMIPConfig.html b/docs/libnm/html/NMIPConfig.html
new file mode 100644
index 000000000..83ede1e41
--- /dev/null
+++ b/docs/libnm/html/NMIPConfig.html
@@ -0,0 +1,473 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMIPConfig</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference">
+<link rel="prev" href="NMWimaxNsp.html" title="NMWimaxNsp">
+<link rel="next" href="NMDhcpConfig.html" title="NMDhcpConfig">
+<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="NMWimaxNsp.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch04.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 Reference Manual</th>
+<td><a accesskey="n" href="NMDhcpConfig.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#NMIPConfig.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMIPConfig.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMIPConfig.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMIPConfig.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+  | 
+ <a href="#NMIPConfig.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="NMIPConfig"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMIPConfig.top_of_page"></a>NMIPConfig</span></h2>
+<p>NMIPConfig</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMIPConfig.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">struct <a class="link" href="NMIPConfig.html#NMIPConfig-struct" title="struct NMIPConfig">NMIPConfig</a>;
+ <a class="link" href="NMIPConfig.html#NMIPConfigClass" title="NMIPConfigClass">NMIPConfigClass</a>;
+#define <a class="link" href="NMIPConfig.html#NM-IP-CONFIG-FAMILY:CAPS" title="NM_IP_CONFIG_FAMILY">NM_IP_CONFIG_FAMILY</a>
+#define <a class="link" href="NMIPConfig.html#NM-IP-CONFIG-GATEWAY:CAPS" title="NM_IP_CONFIG_GATEWAY">NM_IP_CONFIG_GATEWAY</a>
+#define <a class="link" href="NMIPConfig.html#NM-IP-CONFIG-ADDRESSES:CAPS" title="NM_IP_CONFIG_ADDRESSES">NM_IP_CONFIG_ADDRESSES</a>
+#define <a class="link" href="NMIPConfig.html#NM-IP-CONFIG-ROUTES:CAPS" title="NM_IP_CONFIG_ROUTES">NM_IP_CONFIG_ROUTES</a>
+#define <a class="link" href="NMIPConfig.html#NM-IP-CONFIG-NAMESERVERS:CAPS" title="NM_IP_CONFIG_NAMESERVERS">NM_IP_CONFIG_NAMESERVERS</a>
+#define <a class="link" href="NMIPConfig.html#NM-IP-CONFIG-DOMAINS:CAPS" title="NM_IP_CONFIG_DOMAINS">NM_IP_CONFIG_DOMAINS</a>
+#define <a class="link" href="NMIPConfig.html#NM-IP-CONFIG-SEARCHES:CAPS" title="NM_IP_CONFIG_SEARCHES">NM_IP_CONFIG_SEARCHES</a>
+#define <a class="link" href="NMIPConfig.html#NM-IP-CONFIG-WINS-SERVERS:CAPS" title="NM_IP_CONFIG_WINS_SERVERS">NM_IP_CONFIG_WINS_SERVERS</a>
+<span class="returnvalue">int</span> <a class="link" href="NMIPConfig.html#nm-ip-config-get-family" title="nm_ip_config_get_family ()">nm_ip_config_get_family</a> (<em class="parameter"><code><a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</span></a> *config</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMIPConfig.html#nm-ip-config-get-gateway" title="nm_ip_config_get_gateway ()">nm_ip_config_get_gateway</a> (<em class="parameter"><code><a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</span></a> *config</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="NMIPConfig.html#nm-ip-config-get-addresses" title="nm_ip_config_get_addresses ()">nm_ip_config_get_addresses</a> (<em class="parameter"><code><a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</span></a> *config</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="NMIPConfig.html#nm-ip-config-get-routes" title="nm_ip_config_get_routes ()">nm_ip_config_get_routes</a> (<em class="parameter"><code><a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</span></a> *config</code></em>);
+const <span class="returnvalue">char</span> * const * <a class="link" href="NMIPConfig.html#nm-ip-config-get-nameservers" title="nm_ip_config_get_nameservers ()">nm_ip_config_get_nameservers</a> (<em class="parameter"><code><a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</span></a> *config</code></em>);
+const <span class="returnvalue">char</span> * const * <a class="link" href="NMIPConfig.html#nm-ip-config-get-domains" title="nm_ip_config_get_domains ()">nm_ip_config_get_domains</a> (<em class="parameter"><code><a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</span></a> *config</code></em>);
+const <span class="returnvalue">char</span> * const * <a class="link" href="NMIPConfig.html#nm-ip-config-get-searches" title="nm_ip_config_get_searches ()">nm_ip_config_get_searches</a> (<em class="parameter"><code><a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</span></a> *config</code></em>);
+const <span class="returnvalue">char</span> * const * <a class="link" href="NMIPConfig.html#nm-ip-config-get-wins-servers" title="nm_ip_config_get_wins_servers ()">nm_ip_config_get_wins_servers</a> (<em class="parameter"><code><a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</span></a> *config</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMIPConfig.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>
+ +----NMIPConfig
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMIPConfig.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+NMIPConfig 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="NMIPConfig.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMIPConfig.html#NMIPConfig--addresses" title='The "addresses" property'>addresses</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>* : Read
+ "<a class="link" href="NMIPConfig.html#NMIPConfig--domains" title='The "domains" property'>domains</a>" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : Read
+ "<a class="link" href="NMIPConfig.html#NMIPConfig--family" title='The "family" property'>family</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="NMIPConfig.html#NMIPConfig--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="NMIPConfig.html#NMIPConfig--nameservers" title='The "nameservers" property'>nameservers</a>" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : Read
+ "<a class="link" href="NMIPConfig.html#NMIPConfig--routes" title='The "routes" property'>routes</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>* : Read
+ "<a class="link" href="NMIPConfig.html#NMIPConfig--searches" title='The "searches" property'>searches</a>" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : Read
+ "<a class="link" href="NMIPConfig.html#NMIPConfig--wins-servers" title='The "wins-servers" property'>wins-servers</a>" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : Read
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMIPConfig.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="NMIPConfig.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NMIPConfig-struct"></a><h3>struct NMIPConfig</h3>
+<pre class="programlisting">struct NMIPConfig;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMIPConfigClass"></a><h3>NMIPConfigClass</h3>
+<pre class="programlisting">typedef struct {
+ NMObjectClass parent;
+} NMIPConfigClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-IP-CONFIG-FAMILY:CAPS"></a><h3>NM_IP_CONFIG_FAMILY</h3>
+<pre class="programlisting">#define NM_IP_CONFIG_FAMILY "family"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-IP-CONFIG-GATEWAY:CAPS"></a><h3>NM_IP_CONFIG_GATEWAY</h3>
+<pre class="programlisting">#define NM_IP_CONFIG_GATEWAY "gateway"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-IP-CONFIG-ADDRESSES:CAPS"></a><h3>NM_IP_CONFIG_ADDRESSES</h3>
+<pre class="programlisting">#define NM_IP_CONFIG_ADDRESSES "addresses"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-IP-CONFIG-ROUTES:CAPS"></a><h3>NM_IP_CONFIG_ROUTES</h3>
+<pre class="programlisting">#define NM_IP_CONFIG_ROUTES "routes"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-IP-CONFIG-NAMESERVERS:CAPS"></a><h3>NM_IP_CONFIG_NAMESERVERS</h3>
+<pre class="programlisting">#define NM_IP_CONFIG_NAMESERVERS "nameservers"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-IP-CONFIG-DOMAINS:CAPS"></a><h3>NM_IP_CONFIG_DOMAINS</h3>
+<pre class="programlisting">#define NM_IP_CONFIG_DOMAINS "domains"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-IP-CONFIG-SEARCHES:CAPS"></a><h3>NM_IP_CONFIG_SEARCHES</h3>
+<pre class="programlisting">#define NM_IP_CONFIG_SEARCHES "searches"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-IP-CONFIG-WINS-SERVERS:CAPS"></a><h3>NM_IP_CONFIG_WINS_SERVERS</h3>
+<pre class="programlisting">#define NM_IP_CONFIG_WINS_SERVERS "wins-servers"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-ip-config-get-family"></a><h3>nm_ip_config_get_family ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span> nm_ip_config_get_family (<em class="parameter"><code><a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</span></a> *config</code></em>);</pre>
+<p>
+Gets the IP address family
+</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>config</code></em> :</span></p></td>
+<td>a <a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the IP address family; either <code class="literal">AF_INET</code> or
+<code class="literal">AF_INET6</code>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-ip-config-get-gateway"></a><h3>nm_ip_config_get_gateway ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_ip_config_get_gateway (<em class="parameter"><code><a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</span></a> *config</code></em>);</pre>
+<p>
+Gets the IP gateway address.
+</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>config</code></em> :</span></p></td>
+<td>a <a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the IP address of the gateway. <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-ip-config-get-addresses"></a><h3>nm_ip_config_get_addresses ()</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_ip_config_get_addresses (<em class="parameter"><code><a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</span></a> *config</code></em>);</pre>
+<p>
+Gets the IP addresses (containing the address, prefix, and gateway).
+</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>config</code></em> :</span></p></td>
+<td>a <a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</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 class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</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> NMIPAddress][<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-ip-config-get-routes"></a><h3>nm_ip_config_get_routes ()</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_ip_config_get_routes (<em class="parameter"><code><a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</span></a> *config</code></em>);</pre>
+<p>
+Gets the 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>config</code></em> :</span></p></td>
+<td>a <a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</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="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoutes</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> NMIPRoute][<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-ip-config-get-nameservers"></a><h3>nm_ip_config_get_nameservers ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * const * nm_ip_config_get_nameservers (<em class="parameter"><code><a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</span></a> *config</code></em>);</pre>
+<p>
+Gets the domain name servers (DNS).
+</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>config</code></em> :</span></p></td>
+<td>a <a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the array of nameserver IP addresses. <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-ip-config-get-domains"></a><h3>nm_ip_config_get_domains ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * const * nm_ip_config_get_domains (<em class="parameter"><code><a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</span></a> *config</code></em>);</pre>
+<p>
+Gets the domain names.
+</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>config</code></em> :</span></p></td>
+<td>a <a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the array of domains.
+(This is never <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>, though it may be 0-length). <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-ip-config-get-searches"></a><h3>nm_ip_config_get_searches ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * const * nm_ip_config_get_searches (<em class="parameter"><code><a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</span></a> *config</code></em>);</pre>
+<p>
+Gets the DNS searches.
+</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>config</code></em> :</span></p></td>
+<td>a <a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the array of DNS search strings.
+(This is never <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>, though it may be 0-length). <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-ip-config-get-wins-servers"></a><h3>nm_ip_config_get_wins_servers ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * const * nm_ip_config_get_wins_servers (<em class="parameter"><code><a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</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 align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>config</code></em> :</span></p></td>
+<td>a <a class="link" href="NMIPConfig.html" title="NMIPConfig"><span class="type">NMIPConfig</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the arry of WINS server IP address strings.
+(This is never <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>, though it may be 0-length.). <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="NMIPConfig.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="NMIPConfig--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-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>* : Read</pre>
+<p>
+A <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing the addresses (<a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a>) of the configuration.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMIPConfig--domains"></a><h3>The <code class="literal">"domains"</code> property</h3>
+<pre class="programlisting"> "domains" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : Read</pre>
+<p>
+The array containing domain strings of the configuration.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMIPConfig--family"></a><h3>The <code class="literal">"family"</code> property</h3>
+<pre class="programlisting"> "family" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read</pre>
+<p>
+The IP address family of the configuration; either
+<code class="literal">AF_INET</code> or <code class="literal">AF_INET6</code>.
+</p>
+<p>Allowed values: [0,255]</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMIPConfig--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 IP gateway address of the configuration as string.
+</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMIPConfig--nameservers"></a><h3>The <code class="literal">"nameservers"</code> property</h3>
+<pre class="programlisting"> "nameservers" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : Read</pre>
+<p>
+The array containing name server IP addresses of the configuration.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMIPConfig--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-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>* : Read</pre>
+<p>
+A <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> containing the routes (<a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a>) of the configuration.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMIPConfig--searches"></a><h3>The <code class="literal">"searches"</code> property</h3>
+<pre class="programlisting"> "searches" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : Read</pre>
+<p>
+The array containing DNS search strings of the configuration.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMIPConfig--wins-servers"></a><h3>The <code class="literal">"wins-servers"</code> property</h3>
+<pre class="programlisting"> "wins-servers" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : Read</pre>
+<p>
+The array containing WINS server IP addresses of the configuration.
+(This will always be empty for IPv6 configurations.)
+</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/html/NMObject.html b/docs/libnm/html/NMObject.html
new file mode 100644
index 000000000..84324d983
--- /dev/null
+++ b/docs/libnm/html/NMObject.html
@@ -0,0 +1,188 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMObject</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch02.html" title="Client Object API Reference">
+<link rel="prev" href="NMSecretAgentOld.html" title="NMSecretAgentOld">
+<link rel="next" href="libnm-nm-errors.html" title="nm-errors">
+<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="NMSecretAgentOld.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 Reference Manual</th>
+<td><a accesskey="n" href="libnm-nm-errors.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>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="NMObject"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMObject.top_of_page"></a>NMObject</span></h2>
+<p>NMObject</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMObject.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#define <a class="link" href="NMObject.html#NM-OBJECT-PATH:CAPS" title="NM_OBJECT_PATH">NM_OBJECT_PATH</a>
+#define <a class="link" href="NMObject.html#NM-OBJECT-DBUS-CONNECTION:CAPS" title="NM_OBJECT_DBUS_CONNECTION">NM_OBJECT_DBUS_CONNECTION</a>
+struct <a class="link" href="NMObject.html#NMObject-struct" title="struct NMObject">NMObject</a>;
+ <a class="link" href="NMObject.html#NMObjectClass" title="NMObjectClass">NMObjectClass</a>;
+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.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="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
+ +----<a class="link" href="NMActiveConnection.html" title="NMActiveConnection">NMActiveConnection</a>
+ +----<a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+ +----<a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig">NMDhcpConfig</a>
+ +----<a class="link" href="NMIPConfig.html" title="NMIPConfig">NMIPConfig</a>
+ +----<a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
+ +----<a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp">NMWimaxNsp</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>
+<pre class="synopsis">
+ "<a class="link" href="NMObject.html#NMObject--dbus-connection" title='The "dbus-connection" property'>dbus-connection</a>" <a href="http://library.gnome.org/devel/gio/unstable/GDBusConnection.html"><span class="type">GDBusConnection</span></a>* : Read / Write / Construct Only
+ "<a class="link" href="NMObject.html#NMObject--nm-running-internal" title='The "nm-running-internal" property'>nm-running-internal</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="NMObject.html#NMObject--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 Only
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMObject.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="NMObject.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NM-OBJECT-PATH:CAPS"></a><h3>NM_OBJECT_PATH</h3>
+<pre class="programlisting">#define NM_OBJECT_PATH "path"
+</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="NMObject-struct"></a><h3>struct NMObject</h3>
+<pre class="programlisting">struct NMObject;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMObjectClass"></a><h3>NMObjectClass</h3>
+<pre class="programlisting">typedef struct {
+ GObjectClass parent;
+
+ /* Methods */
+ void (*init_dbus) (NMObject *object);
+
+ /* The "object-creation-failed" method is PRIVATE for libnm 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,
+ const char *failed_path);
+} NMObjectClass;
+</pre>
+<p>
+</p>
+</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="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="http://library.gnome.org/devel/gio/unstable/GDBusConnection.html"><span class="type">GDBusConnection</span></a>* : Read / Write / Construct Only</pre>
+<p>
+The <a href="http://library.gnome.org/devel/gio/unstable/GDBusConnection.html"><span class="type">GDBusConnection</span></a> of the object.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMObject--nm-running-internal"></a><h3>The <code class="literal">"nm-running-internal"</code> property</h3>
+<pre class="programlisting"> "nm-running-internal" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read</pre>
+<p></p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMObject--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 Only</pre>
+<p>
+The D-Bus object path.
+</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/html/NMRemoteConnection.html b/docs/libnm/html/NMRemoteConnection.html
new file mode 100644
index 000000000..96e95e2eb
--- /dev/null
+++ b/docs/libnm/html/NMRemoteConnection.html
@@ -0,0 +1,761 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMRemoteConnection</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference">
+<link rel="prev" href="NMVpnConnection.html" title="NMVpnConnection">
+<link rel="next" href="NMAccessPoint.html" title="NMAccessPoint">
+<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="NMVpnConnection.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch04.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 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="#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>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="NMRemoteConnection"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMRemoteConnection.top_of_page"></a>NMRemoteConnection</span></h2>
+<p>NMRemoteConnection</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMRemoteConnection.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#define <a class="link" href="NMRemoteConnection.html#NM-REMOTE-CONNECTION-DBUS-CONNECTION:CAPS" title="NM_REMOTE_CONNECTION_DBUS_CONNECTION">NM_REMOTE_CONNECTION_DBUS_CONNECTION</a>
+#define <a class="link" href="NMRemoteConnection.html#NM-REMOTE-CONNECTION-PATH:CAPS" title="NM_REMOTE_CONNECTION_PATH">NM_REMOTE_CONNECTION_PATH</a>
+#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-VISIBLE:CAPS" title="NM_REMOTE_CONNECTION_VISIBLE">NM_REMOTE_CONNECTION_VISIBLE</a>
+struct <a class="link" href="NMRemoteConnection.html#NMRemoteConnection-struct" title="struct NMRemoteConnection">NMRemoteConnection</a>;
+ <a class="link" href="NMRemoteConnection.html#NMRemoteConnectionClass" title="NMRemoteConnectionClass">NMRemoteConnectionClass</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="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 href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> save_to_disk</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="NMRemoteConnection.html#nm-remote-connection-commit-changes-async" title="nm_remote_connection_commit_changes_async ()">nm_remote_connection_commit_changes_async</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-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> save_to_disk</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 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-commit-changes-finish" title="nm_remote_connection_commit_changes_finish ()">nm_remote_connection_commit_changes_finish</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/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-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <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 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="NMRemoteConnection.html#nm-remote-connection-save-async" title="nm_remote_connection_save_async ()">nm_remote_connection_save_async</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/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 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-save-finish" title="nm_remote_connection_save_finish ()">nm_remote_connection_save_finish</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/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-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <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 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="NMRemoteConnection.html#nm-remote-connection-delete-async" title="nm_remote_connection_delete_async ()">nm_remote_connection_delete_async</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/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 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-delete-finish" title="nm_remote_connection_delete_finish ()">nm_remote_connection_delete_finish</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/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-GVariant.html#GVariant"><span class="returnvalue">GVariant</span></a> * <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 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="NMRemoteConnection.html#nm-remote-connection-get-secrets-async" title="nm_remote_connection_get_secrets_async ()">nm_remote_connection_get_secrets_async</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 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 href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="returnvalue">GVariant</span></a> * <a class="link" href="NMRemoteConnection.html#nm-remote-connection-get-secrets-finish" title="nm_remote_connection_get_secrets_finish ()">nm_remote_connection_get_secrets_finish</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/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-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>);
+<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-visible" title="nm_remote_connection_get_visible ()">nm_remote_connection_get_visible</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 class="link" href="NMObject.html" title="NMObject">NMObject</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>, <a href="http://library.gnome.org/devel/gio/unstable/GAsyncInitable.html">GAsyncInitable</a> and <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html">NMConnection</a>.</p>
+</div>
+<div class="refsect1">
+<a name="NMRemoteConnection.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<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
+ "<a class="link" href="NMRemoteConnection.html#NMRemoteConnection--visible" title='The "visible" property'>visible</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.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="NMRemoteConnection.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NM-REMOTE-CONNECTION-DBUS-CONNECTION:CAPS"></a><h3>NM_REMOTE_CONNECTION_DBUS_CONNECTION</h3>
+<pre class="programlisting">#define NM_REMOTE_CONNECTION_DBUS_CONNECTION "dbus-connection"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-REMOTE-CONNECTION-PATH:CAPS"></a><h3>NM_REMOTE_CONNECTION_PATH</h3>
+<pre class="programlisting">#define NM_REMOTE_CONNECTION_PATH "path"
+</pre>
+<p>
+</p>
+</div>
+<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-VISIBLE:CAPS"></a><h3>NM_REMOTE_CONNECTION_VISIBLE</h3>
+<pre class="programlisting">#define NM_REMOTE_CONNECTION_VISIBLE "visible"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMRemoteConnection-struct"></a><h3>struct NMRemoteConnection</h3>
+<pre class="programlisting">struct NMRemoteConnection;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMRemoteConnectionClass"></a><h3>NMRemoteConnectionClass</h3>
+<pre class="programlisting">typedef struct {
+ NMObjectClass parent_class;
+} NMRemoteConnectionClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-remote-connection-commit-changes"></a><h3>nm_remote_connection_commit_changes ()</h3>
+<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_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 href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> save_to_disk</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>
+Send any local changes to the settings and properties of <em class="parameter"><code>connection</code></em> to
+NetworkManager. If <em class="parameter"><code>save_to_disk</code></em> is <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, the updated connection will be saved to
+disk; if <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>, then only the in-memory representation will be 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>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>save_to_disk</code></em> :</span></p></td>
+<td>whether to persist the changes to disk</td>
+</tr>
+<tr>
+<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><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 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 error, in which case <em class="parameter"><code>error</code></em> will be set.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-remote-connection-commit-changes-async"></a><h3>nm_remote_connection_commit_changes_async ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_remote_connection_commit_changes_async
+ (<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-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> save_to_disk</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 sends any local changes to the settings and properties of
+<em class="parameter"><code>connection</code></em> to NetworkManager. If <em class="parameter"><code>save</code></em> is <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, the updated connection will
+be saved to disk; if <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>, then only the in-memory representation will be
+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>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>save_to_disk</code></em> :</span></p></td>
+<td>whether to save the changes to persistent storage</td>
+</tr>
+<tr>
+<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><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
+<td>callback to be called when the commit operation completes</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>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-remote-connection-commit-changes-finish"></a><h3>nm_remote_connection_commit_changes_finish ()</h3>
+<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_commit_changes_finish
+ (<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/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 a call to <a class="link" href="NMRemoteConnection.html#nm-remote-connection-commit-changes-async" title="nm_remote_connection_commit_changes_async ()"><code class="function">nm_remote_connection_commit_changes_async()</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>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>result</code></em> :</span></p></td>
+<td>the result passed to the <a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html#GAsyncReadyCallback"><span class="type">GAsyncReadyCallback</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><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 error, in which case <em class="parameter"><code>error</code></em> will be set.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-remote-connection-save"></a><h3>nm_remote_connection_save ()</h3>
+<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_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 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>
+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 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"><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><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 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 error, in which case <em class="parameter"><code>error</code></em> will be set.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-remote-connection-save-async"></a><h3>nm_remote_connection_save_async ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_remote_connection_save_async (<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/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>
+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 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"><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><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
+<td>callback to be called when the save operation completes</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>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-remote-connection-save-finish"></a><h3>nm_remote_connection_save_finish ()</h3>
+<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_save_finish (<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/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 a call to <a class="link" href="NMRemoteConnection.html#nm-remote-connection-save-async" title="nm_remote_connection_save_async ()"><code class="function">nm_remote_connection_save_async()</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>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>result</code></em> :</span></p></td>
+<td>the result passed to the <a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html#GAsyncReadyCallback"><span class="type">GAsyncReadyCallback</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><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 error, in which case <em class="parameter"><code>error</code></em> will be set.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-remote-connection-delete"></a><h3>nm_remote_connection_delete ()</h3>
+<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_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 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>
+Deletes 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>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>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><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 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 error, in which case <em class="parameter"><code>error</code></em> will be set.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-remote-connection-delete-async"></a><h3>nm_remote_connection_delete_async ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_remote_connection_delete_async (<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/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 deletes 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>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>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><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
+<td>callback to be called when the delete operation completes</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>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-remote-connection-delete-finish"></a><h3>nm_remote_connection_delete_finish ()</h3>
+<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_delete_finish (<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/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 a call to <a class="link" href="NMRemoteConnection.html#nm-remote-connection-delete-async" title="nm_remote_connection_delete_async ()"><code class="function">nm_remote_connection_delete_async()</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>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>result</code></em> :</span></p></td>
+<td>the result passed to the <a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html#GAsyncReadyCallback"><span class="type">GAsyncReadyCallback</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><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 error, in which case <em class="parameter"><code>error</code></em> will be set.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-remote-connection-get-secrets"></a><h3>nm_remote_connection_get_secrets ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="returnvalue">GVariant</span></a> * 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 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>
+Request the connection's secrets. Note that this is a blocking D-Bus call,
+not a simple property accessor.
+</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="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting_name</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object name to get secrets for</td>
+</tr>
+<tr>
+<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><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 <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> of type <code class="literal">NM_VARIANT_TYPE_CONNECTION</code> containing
+<em class="parameter"><code>connection</code></em>'s secrets, 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>
+<hr>
+<div class="refsect2">
+<a name="nm-remote-connection-get-secrets-async"></a><h3>nm_remote_connection_get_secrets_async ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_remote_connection_get_secrets_async
+ (<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 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 requests the connection's secrets.
+</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="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting_name</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object name to get secrets for</td>
+</tr>
+<tr>
+<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><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
+<td>callback to be called when the secret request completes</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>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-remote-connection-get-secrets-finish"></a><h3>nm_remote_connection_get_secrets_finish ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="returnvalue">GVariant</span></a> * nm_remote_connection_get_secrets_finish
+ (<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/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 a call to <a class="link" href="NMRemoteConnection.html#nm-remote-connection-get-secrets-async" title="nm_remote_connection_get_secrets_async ()"><code class="function">nm_remote_connection_get_secrets_async()</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>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>result</code></em> :</span></p></td>
+<td>the result passed to the <a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html#GAsyncReadyCallback"><span class="type">GAsyncReadyCallback</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><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-GVariant.html#GVariant"><span class="type">GVariant</span></a> of type <code class="literal">NM_VARIANT_TYPE_CONNECTION</code>
+containing <em class="parameter"><code>connection</code></em>'s secrets, 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>
+<hr>
+<div class="refsect2">
+<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>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-remote-connection-get-visible"></a><h3>nm_remote_connection_get_visible ()</h3>
+<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_visible (<em class="parameter"><code><a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection"><span class="type">NMRemoteConnection</span></a> *connection</code></em>);</pre>
+<p>
+Checks if the connection is visible to the current user. If the
+connection is not visible then it is essentially useless; it will
+not contain any settings, and operations such as
+<a class="link" href="NMRemoteConnection.html#nm-remote-connection-save" title="nm_remote_connection_save ()"><code class="function">nm_remote_connection_save()</code></a> and <a class="link" href="NMRemoteConnection.html#nm-remote-connection-delete" title="nm_remote_connection_delete ()"><code class="function">nm_remote_connection_delete()</code></a> will
+always fail. (<a href="https://developer.gnome.org/libnm-glib/0.9/NMRemoteSettings.html"><span class="type">NMRemoteSettings</span></a> will not normally return
+non-visible connections to callers, but it is possible for a
+connection's visibility to change after you already have a
+reference to it.)
+</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="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 is visible to the current
+user, <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>
+<div class="refsect1">
+<a name="NMRemoteConnection.property-details"></a><h2>Property Details</h2>
+<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>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMRemoteConnection--visible"></a><h3>The <code class="literal">"visible"</code> property</h3>
+<pre class="programlisting"> "visible" <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 is visible to the current user, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if
+not. If the connection is not visible then it is essentially useless; it
+will not contain any settings, and operations such as
+<a class="link" href="NMRemoteConnection.html#nm-remote-connection-save" title="nm_remote_connection_save ()"><code class="function">nm_remote_connection_save()</code></a> and <a class="link" href="NMRemoteConnection.html#nm-remote-connection-delete" title="nm_remote_connection_delete ()"><code class="function">nm_remote_connection_delete()</code></a> will always
+fail. (<a href="https://developer.gnome.org/libnm-glib/0.9/NMRemoteSettings.html"><span class="type">NMRemoteSettings</span></a> will not normally return non-visible connections
+to callers, but it is possible for a connection's visibility to change
+after you already have a reference to it.)
+</p>
+<p>Default value: FALSE</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/html/NMSecretAgentOld.html b/docs/libnm/html/NMSecretAgentOld.html
new file mode 100644
index 000000000..8ba81e688
--- /dev/null
+++ b/docs/libnm/html/NMSecretAgentOld.html
@@ -0,0 +1,911 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMSecretAgentOld</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch02.html" title="Client Object API Reference">
+<link rel="prev" href="NMClient.html" title="NMClient">
+<link rel="next" href="NMObject.html" title="NMObject">
+<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="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 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="#NMSecretAgentOld.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMSecretAgentOld.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMSecretAgentOld.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMSecretAgentOld.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+  | 
+ <a href="#NMSecretAgentOld.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="NMSecretAgentOld"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMSecretAgentOld.top_of_page"></a>NMSecretAgentOld</span></h2>
+<p>NMSecretAgentOld</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSecretAgentOld.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#define <a class="link" href="NMSecretAgentOld.html#NM-SECRET-AGENT-OLD-IDENTIFIER:CAPS" title="NM_SECRET_AGENT_OLD_IDENTIFIER">NM_SECRET_AGENT_OLD_IDENTIFIER</a>
+#define <a class="link" href="NMSecretAgentOld.html#NM-SECRET-AGENT-OLD-AUTO-REGISTER:CAPS" title="NM_SECRET_AGENT_OLD_AUTO_REGISTER">NM_SECRET_AGENT_OLD_AUTO_REGISTER</a>
+#define <a class="link" href="NMSecretAgentOld.html#NM-SECRET-AGENT-OLD-REGISTERED:CAPS" title="NM_SECRET_AGENT_OLD_REGISTERED">NM_SECRET_AGENT_OLD_REGISTERED</a>
+#define <a class="link" href="NMSecretAgentOld.html#NM-SECRET-AGENT-OLD-CAPABILITIES:CAPS" title="NM_SECRET_AGENT_OLD_CAPABILITIES">NM_SECRET_AGENT_OLD_CAPABILITIES</a>
+ <a class="link" href="NMSecretAgentOld.html#NMSecretAgentOld-struct" title="NMSecretAgentOld">NMSecretAgentOld</a>;
+<span class="returnvalue">void</span> (<a class="link" href="NMSecretAgentOld.html#NMSecretAgentOldGetSecretsFunc" title="NMSecretAgentOldGetSecretsFunc ()">*NMSecretAgentOldGetSecretsFunc</a>) (<em class="parameter"><code><a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</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-GVariant.html#GVariant"><span class="type">GVariant</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="NMSecretAgentOld.html#NMSecretAgentOldSaveSecretsFunc" title="NMSecretAgentOldSaveSecretsFunc ()">*NMSecretAgentOldSaveSecretsFunc</a>) (<em class="parameter"><code><a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</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="NMSecretAgentOld.html#NMSecretAgentOldDeleteSecretsFunc" title="NMSecretAgentOldDeleteSecretsFunc ()">*NMSecretAgentOldDeleteSecretsFunc</a>)
+ (<em class="parameter"><code><a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</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="NMSecretAgentOld.html#NMSecretAgentOldClass" title="NMSecretAgentOldClass">NMSecretAgentOldClass</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="NMSecretAgentOld.html#nm-secret-agent-old-register" title="nm_secret_agent_old_register ()">nm_secret_agent_old_register</a> (<em class="parameter"><code><a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</span></a> *self</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="NMSecretAgentOld.html#nm-secret-agent-old-register-async" title="nm_secret_agent_old_register_async ()">nm_secret_agent_old_register_async</a> (<em class="parameter"><code><a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</span></a> *self</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 href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSecretAgentOld.html#nm-secret-agent-old-register-finish" title="nm_secret_agent_old_register_finish ()">nm_secret_agent_old_register_finish</a> (<em class="parameter"><code><a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</span></a> *self</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 href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSecretAgentOld.html#nm-secret-agent-old-unregister" title="nm_secret_agent_old_unregister ()">nm_secret_agent_old_unregister</a> (<em class="parameter"><code><a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</span></a> *self</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="NMSecretAgentOld.html#nm-secret-agent-old-unregister-async" title="nm_secret_agent_old_unregister_async ()">nm_secret_agent_old_unregister_async</a>
+ (<em class="parameter"><code><a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</span></a> *self</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 href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSecretAgentOld.html#nm-secret-agent-old-unregister-finish" title="nm_secret_agent_old_unregister_finish ()">nm_secret_agent_old_unregister_finish</a>
+ (<em class="parameter"><code><a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</span></a> *self</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 href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSecretAgentOld.html#nm-secret-agent-old-get-registered" title="nm_secret_agent_old_get_registered ()">nm_secret_agent_old_get_registered</a> (<em class="parameter"><code><a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</span></a> *self</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSecretAgentOld.html#nm-secret-agent-old-get-secrets" title="nm_secret_agent_old_get_secrets ()">nm_secret_agent_old_get_secrets</a> (<em class="parameter"><code><a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</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="libnm-nm-dbus-interface.html#NMSecretAgentGetSecretsFlags"><span class="type">NMSecretAgentGetSecretsFlags</span></a> flags</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSecretAgentOld.html#NMSecretAgentOldGetSecretsFunc" title="NMSecretAgentOldGetSecretsFunc ()"><span class="type">NMSecretAgentOldGetSecretsFunc</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="NMSecretAgentOld.html#nm-secret-agent-old-save-secrets" title="nm_secret_agent_old_save_secrets ()">nm_secret_agent_old_save_secrets</a> (<em class="parameter"><code><a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</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="NMSecretAgentOld.html#NMSecretAgentOldSaveSecretsFunc" title="NMSecretAgentOldSaveSecretsFunc ()"><span class="type">NMSecretAgentOldSaveSecretsFunc</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="NMSecretAgentOld.html#nm-secret-agent-old-delete-secrets" title="nm_secret_agent_old_delete_secrets ()">nm_secret_agent_old_delete_secrets</a> (<em class="parameter"><code><a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</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="NMSecretAgentOld.html#NMSecretAgentOldDeleteSecretsFunc" title="NMSecretAgentOldDeleteSecretsFunc ()"><span class="type">NMSecretAgentOldDeleteSecretsFunc</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="NMSecretAgentOld.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>
+ +----NMSecretAgentOld
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSecretAgentOld.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+NMSecretAgentOld 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="NMSecretAgentOld.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMSecretAgentOld.html#NMSecretAgentOld--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="NMSecretAgentOld.html#NMSecretAgentOld--capabilities" title='The "capabilities" property'>capabilities</a>" <a class="link" href="libnm-nm-dbus-interface.html#NMSecretAgentCapabilities"><span class="type">NMSecretAgentCapabilities</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSecretAgentOld.html#NMSecretAgentOld--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="NMSecretAgentOld.html#NMSecretAgentOld--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="NMSecretAgentOld.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="NMSecretAgentOld.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NM-SECRET-AGENT-OLD-IDENTIFIER:CAPS"></a><h3>NM_SECRET_AGENT_OLD_IDENTIFIER</h3>
+<pre class="programlisting">#define NM_SECRET_AGENT_OLD_IDENTIFIER "identifier"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SECRET-AGENT-OLD-AUTO-REGISTER:CAPS"></a><h3>NM_SECRET_AGENT_OLD_AUTO_REGISTER</h3>
+<pre class="programlisting">#define NM_SECRET_AGENT_OLD_AUTO_REGISTER "auto-register"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SECRET-AGENT-OLD-REGISTERED:CAPS"></a><h3>NM_SECRET_AGENT_OLD_REGISTERED</h3>
+<pre class="programlisting">#define NM_SECRET_AGENT_OLD_REGISTERED "registered"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SECRET-AGENT-OLD-CAPABILITIES:CAPS"></a><h3>NM_SECRET_AGENT_OLD_CAPABILITIES</h3>
+<pre class="programlisting">#define NM_SECRET_AGENT_OLD_CAPABILITIES "capabilities"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSecretAgentOld-struct"></a><h3>NMSecretAgentOld</h3>
+<pre class="programlisting">typedef struct _NMSecretAgentOld NMSecretAgentOld;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSecretAgentOldGetSecretsFunc"></a><h3>NMSecretAgentOldGetSecretsFunc ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> (*NMSecretAgentOldGetSecretsFunc) (<em class="parameter"><code><a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</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-GVariant.html#GVariant"><span class="type">GVariant</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="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</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 dictionary to return the Wi-Fi PSK, you could do
+something like this:
+</p>
+<div class="example">
+<a name="id-1.3.3.8.7.5.1"></a><p class="title"><b>Example 1. Creating a secrets dictionary</b></p>
+<div class="example-contents">
+ <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</pre></td>
+ <td class="listing_code"><pre class="programlisting"><span class="usertype">NMConnection</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">secrets</span><span class="symbol">;</span>
+<span class="usertype">NMSettingWirelessSecurity</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">s_wsec</span><span class="symbol">;</span>
+<span class="usertype">GVariant</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">secrets_dict</span><span class="symbol">;</span>
+
+<span class="normal">secrets </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="NMSimpleConnection.html#nm-simple-connection-new">nm_simple_connection_new</a></span><span class="normal"> </span><span class="symbol">();</span>
+<span class="normal">s_wsec </span><span class="symbol">=</span><span class="normal"> </span><span class="symbol">(</span><span class="normal"><a href="NMSettingWirelessSecurity.html">NMSettingWirelessSecurity</a> </span><span class="symbol">*)</span><span class="normal"> </span><span class="function"><a href="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="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="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS">NULL</a></span><span class="symbol">);</span>
+<span class="function"><a href="libnm-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_dict </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="libnm-NMConnection.html#nm-connection-to-dbus">nm_connection_to_dbus</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">secrets</span><span class="symbol">,</span><span class="normal"> <a href="libnm-NMConnection.html#NM-CONNECTION-SERIALIZE-ALL:CAPS">NM_CONNECTION_SERIALIZE_ALL</a></span><span class="symbol">);</span>
+
+<span class="symbol">(</span><span class="normal">call the NMSecretAgentOldGetSecretsFunc </span><span class="usertype">with</span><span class="normal"> secrets_dict</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-unref">g_object_unref</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">secrets</span><span class="symbol">);</span>
+<span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#g-variant-unref">g_variant_unref</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">secrets_dict</span><span class="symbol">);</span></pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+</div>
+<p><br class="example-break">
+</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 secret agent object</td>
+</tr>
+<tr>
+<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. <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><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-GVariant.html#GVariant"><span class="type">GVariant</span></a> of type <code class="literal">NM_VARIANT_TYPE_CONNECTION</code> containing the requested
+secrets (as created by <a class="link" href="libnm-NMConnection.html#nm-connection-to-dbus" title="nm_connection_to_dbus ()"><code class="function">nm_connection_to_dbus()</code></a> for example). Each key in <em class="parameter"><code>secrets</code></em>
+should be the name of a <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> object (like "802-11-wireless-security")
+and each value should be an <a class="link" href="libnm-NMConnection.html#NM-VARIANT-TYPE-SETTING:CAPS" title="NM_VARIANT_TYPE_SETTING"><code class="literal">NM_VARIANT_TYPE_SETTING</code></a> variant. The sub-dicts
+map string:value, where the string is the setting property name (like "psk")
+and the value is the secret</td>
+</tr>
+<tr>
+<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><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="NMSecretAgentOldSaveSecretsFunc"></a><h3>NMSecretAgentOldSaveSecretsFunc ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> (*NMSecretAgentOldSaveSecretsFunc) (<em class="parameter"><code><a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</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="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</span></a> subclass has finished saving the secrets, this function
+should be called.
+</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 secret agent object</td>
+</tr>
+<tr>
+<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. <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><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><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="NMSecretAgentOldDeleteSecretsFunc"></a><h3>NMSecretAgentOldDeleteSecretsFunc ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> (*NMSecretAgentOldDeleteSecretsFunc)
+ (<em class="parameter"><code><a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</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="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</span></a> subclass has finished deleting the secrets, this function
+should be called.
+</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 secret agent object</td>
+</tr>
+<tr>
+<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. <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><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><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="NMSecretAgentOldClass"></a><h3>NMSecretAgentOldClass</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_OLD_ERROR_AGENT_CANCELED error.
+ */
+ void (*get_secrets) (NMSecretAgentOld *self,
+ NMConnection *connection,
+ const char *connection_path,
+ const char *setting_name,
+ const char **hints,
+ NMSecretAgentGetSecretsFlags flags,
+ NMSecretAgentOldGetSecretsFunc 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_OLD_ERROR/
+ * NM_SECRET_AGENT_OLD_ERROR_AGENT_CANCELED error to that callback.
+ */
+ void (*cancel_get_secrets) (NMSecretAgentOld *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) (NMSecretAgentOld *self,
+ NMConnection *connection,
+ const char *connection_path,
+ NMSecretAgentOldSaveSecretsFunc 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) (NMSecretAgentOld *self,
+ NMConnection *connection,
+ const char *connection_path,
+ NMSecretAgentOldDeleteSecretsFunc callback,
+ gpointer user_data);
+} NMSecretAgentOldClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-secret-agent-old-register"></a><h3>nm_secret_agent_old_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_old_register (<em class="parameter"><code><a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</span></a> *self</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>
+Registers the <a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</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.
+</p>
+<p>
+It is a programmer error to attempt to register an agent that is already
+registered, or in the process of registering.
+</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="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</span></a>
+</td>
+</tr>
+<tr>
+<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><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 registration was successful, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> on error.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-secret-agent-old-register-async"></a><h3>nm_secret_agent_old_register_async ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_secret_agent_old_register_async (<em class="parameter"><code><a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</span></a> *self</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 registers the <a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</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.
+</p>
+<p>
+It is a programmer error to attempt to register an agent that is already
+registered, or in the process of registering.
+</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="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</span></a>
+</td>
+</tr>
+<tr>
+<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><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
+<td>callback to call when the agent is registered</td>
+</tr>
+<tr>
+<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>
+<hr>
+<div class="refsect2">
+<a name="nm-secret-agent-old-register-finish"></a><h3>nm_secret_agent_old_register_finish ()</h3>
+<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_old_register_finish (<em class="parameter"><code><a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</span></a> *self</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>
+Gets the result of a call to <a class="link" href="NMSecretAgentOld.html#nm-secret-agent-old-register-async" title="nm_secret_agent_old_register_async ()"><code class="function">nm_secret_agent_old_register_async()</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>self</code></em> :</span></p></td>
+<td>a <a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>result</code></em> :</span></p></td>
+<td>the result passed to the <a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html#GAsyncReadyCallback"><span class="type">GAsyncReadyCallback</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 <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 registration was successful, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> on error.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-secret-agent-old-unregister"></a><h3>nm_secret_agent_old_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_old_unregister (<em class="parameter"><code><a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</span></a> *self</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>
+Unregisters the <a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</span></a> with the NetworkManager secret manager,
+indicating to NetworkManager that the agent will no longer provide or
+store secrets on behalf of this user.
+</p>
+<p>
+It is a programmer error to attempt to unregister an agent that is not
+registered.
+</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="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</span></a>
+</td>
+</tr>
+<tr>
+<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><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 unregistration was successful, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> on error</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-secret-agent-old-unregister-async"></a><h3>nm_secret_agent_old_unregister_async ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_secret_agent_old_unregister_async
+ (<em class="parameter"><code><a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</span></a> *self</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 unregisters the <a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</span></a> with the NetworkManager secret
+manager, indicating to NetworkManager that the agent will no longer provide
+or store secrets on behalf of this user.
+</p>
+<p>
+It is a programmer error to attempt to unregister an agent that is not
+registered.
+</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="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</span></a>
+</td>
+</tr>
+<tr>
+<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><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
+<td>callback to call when the agent is unregistered</td>
+</tr>
+<tr>
+<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>
+<hr>
+<div class="refsect2">
+<a name="nm-secret-agent-old-unregister-finish"></a><h3>nm_secret_agent_old_unregister_finish ()</h3>
+<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_old_unregister_finish
+ (<em class="parameter"><code><a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</span></a> *self</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>
+Gets the result of a call to <a class="link" href="NMSecretAgentOld.html#nm-secret-agent-old-unregister-async" title="nm_secret_agent_old_unregister_async ()"><code class="function">nm_secret_agent_old_unregister_async()</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>self</code></em> :</span></p></td>
+<td>a <a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>result</code></em> :</span></p></td>
+<td>the result passed to the <a href="http://library.gnome.org/devel/gio/unstable/GAsyncResult.html#GAsyncReadyCallback"><span class="type">GAsyncReadyCallback</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 <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 unregistration was successful, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> on error.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-secret-agent-old-get-registered"></a><h3>nm_secret_agent_old_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_old_get_registered (<em class="parameter"><code><a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</span></a> *self</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>self</code></em> :</span></p></td>
+<td>a <a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</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-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>
+<hr>
+<div class="refsect2">
+<a name="nm-secret-agent-old-get-secrets"></a><h3>nm_secret_agent_old_get_secrets ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_secret_agent_old_get_secrets (<em class="parameter"><code><a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</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="libnm-nm-dbus-interface.html#NMSecretAgentGetSecretsFlags"><span class="type">NMSecretAgentGetSecretsFlags</span></a> flags</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSecretAgentOld.html#NMSecretAgentOldGetSecretsFunc" title="NMSecretAgentOldGetSecretsFunc ()"><span class="type">NMSecretAgentOldGetSecretsFunc</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 retrieves 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 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="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</span></a>
+</td>
+</tr>
+<tr>
+<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><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><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>
+<hr>
+<div class="refsect2">
+<a name="nm-secret-agent-old-save-secrets"></a><h3>nm_secret_agent_old_save_secrets ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_secret_agent_old_save_secrets (<em class="parameter"><code><a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</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="NMSecretAgentOld.html#NMSecretAgentOldSaveSecretsFunc" title="NMSecretAgentOldSaveSecretsFunc ()"><span class="type">NMSecretAgentOldSaveSecretsFunc</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 ensures 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 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="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</span></a>
+</td>
+</tr>
+<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>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>
+<hr>
+<div class="refsect2">
+<a name="nm-secret-agent-old-delete-secrets"></a><h3>nm_secret_agent_old_delete_secrets ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_secret_agent_old_delete_secrets (<em class="parameter"><code><a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</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="NMSecretAgentOld.html#NMSecretAgentOldDeleteSecretsFunc" title="NMSecretAgentOldDeleteSecretsFunc ()"><span class="type">NMSecretAgentOldDeleteSecretsFunc</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 asks 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 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="NMSecretAgentOld.html" title="NMSecretAgentOld"><span class="type">NMSecretAgentOld</span></a>
+</td>
+</tr>
+<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>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 class="refsect1">
+<a name="NMSecretAgentOld.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="NMSecretAgentOld--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 <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> (the default), the agent will always be registered when
+NetworkManager is running; if NetworkManager exits and restarts, the
+agent will re-register itself automatically.
+</p>
+<p>
+In particular, if this property is <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> at construct time, then the
+agent will register itself with NetworkManager during
+construction/initialization, and initialization will fail with an error
+if the agent is unable to register itself.
+</p>
+<p>
+If the property is <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>, the agent will not automatically register with
+NetworkManager, and <a class="link" href="NMSecretAgentOld.html#nm-secret-agent-old-register" title="nm_secret_agent_old_register ()"><code class="function">nm_secret_agent_old_register()</code></a> or
+<a class="link" href="NMSecretAgentOld.html#nm-secret-agent-old-register-async" title="nm_secret_agent_old_register_async ()"><code class="function">nm_secret_agent_old_register_async()</code></a> must be called to register it.
+</p>
+<p>
+Calling <a class="link" href="NMSecretAgentOld.html#nm-secret-agent-old-unregister" title="nm_secret_agent_old_unregister ()"><code class="function">nm_secret_agent_old_unregister()</code></a> will suppress auto-registration
+until <a class="link" href="NMSecretAgentOld.html#nm-secret-agent-old-register" title="nm_secret_agent_old_register ()"><code class="function">nm_secret_agent_old_register()</code></a> is called, which re-enables
+auto-registration. This ensures that the agent remains un-registered when
+you expect it to be unregistered.
+</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSecretAgentOld--capabilities"></a><h3>The <code class="literal">"capabilities"</code> property</h3>
+<pre class="programlisting"> "capabilities" <a class="link" href="libnm-nm-dbus-interface.html#NMSecretAgentCapabilities"><span class="type">NMSecretAgentCapabilities</span></a> : Read / Write / Construct</pre>
+<p>
+A bitfield of <a class="link" href="libnm-nm-dbus-interface.html#NMSecretAgentCapabilities"><code class="literal">NMSecretAgentCapabilities</code></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSecretAgentOld--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="NMSecretAgentOld--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>
+<p>Default value: FALSE</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/html/NMSetting.html b/docs/libnm/html/NMSetting.html
new file mode 100644
index 000000000..6c7f830bd
--- /dev/null
+++ b/docs/libnm/html/NMSetting.html
@@ -0,0 +1,932 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMSetting</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch03.html" title="Connection and Setting API Reference">
+<link rel="prev" href="NMSimpleConnection.html" title="NMSimpleConnection">
+<link rel="next" href="NMSettingConnection.html" title="NMSettingConnection">
+<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="NMSimpleConnection.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch03.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 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>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMSetting.top_of_page"></a>NMSetting</span></h2>
+<p>NMSetting — Describes related configuration information</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSetting.synopsis"></a><h2>Synopsis</h2>
+<a name="NMSettingSecretFlags"></a><a name="NMSettingCompareFlags"></a><a name="NMSettingDiffResult"></a><pre class="synopsis">#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>;
+struct <a class="link" href="NMSetting.html#NMSetting-struct" title="struct 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>);
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="returnvalue">GType</span></a> <a class="link" href="NMSetting.html#nm-setting-lookup-type" title="nm_setting_lookup_type ()">nm_setting_lookup_type</a> (<em class="parameter"><code>const <span class="type">char</span> *name</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="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="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>);
+<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 <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariantType.html#GVariantType"><span class="returnvalue">GVariantType</span></a> * <a class="link" href="NMSetting.html#nm-setting-get-dbus-property-type" title="nm_setting_get_dbus_property_type ()">nm_setting_get_dbus_property_type</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> *property_name</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSetting.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ GFlags
+ +----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="NMSettingBridgePort.html" title="NMSettingBridgePort">NMSettingBridgePort</a>
+ +----<a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
+ +----<a class="link" href="NMSettingCdma.html" title="NMSettingCdma">NMSettingCdma</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="NMSettingGeneric.html" title="NMSettingGeneric">NMSettingGeneric</a>
+ +----<a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+ +----<a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband">NMSettingInfiniband</a>
+ +----<a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+ +----<a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh">NMSettingOlpcMesh</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="NMSettingTeamPort.html" title="NMSettingTeamPort">NMSettingTeamPort</a>
+ +----<a class="link" href="NMSettingTeam.html" title="NMSettingTeam">NMSettingTeam</a>
+ +----<a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
+ +----<a class="link" href="NMSettingVpn.html" title="NMSettingVpn">NMSettingVpn</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="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+ +----<a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+</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
+</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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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="NM-SETTING-PARAM-REQUIRED:CAPS"></a><h3>NM_SETTING_PARAM_REQUIRED</h3>
+<pre class="programlisting">#define NM_SETTING_PARAM_REQUIRED (1 &lt;&lt; (1 + G_PARAM_USER_SHIFT))
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-PARAM-SECRET:CAPS"></a><h3>NM_SETTING_PARAM_SECRET</h3>
+<pre class="programlisting">#define NM_SETTING_PARAM_SECRET (1 &lt;&lt; (2 + G_PARAM_USER_SHIFT))
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-PARAM-FUZZY-IGNORE:CAPS"></a><h3>NM_SETTING_PARAM_FUZZY_IGNORE</h3>
+<pre class="programlisting">#define NM_SETTING_PARAM_FUZZY_IGNORE (1 &lt;&lt; (3 + G_PARAM_USER_SHIFT))
+</pre>
+<p>
+</p>
+</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>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingSecretFlags-enum"></a><h3>enum NMSettingSecretFlags</h3>
+<pre class="programlisting">typedef enum {
+ /*&lt; flags &gt;*/
+ 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-core-internal.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 align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<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><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><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><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>
+<hr>
+<div class="refsect2">
+<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,
+ NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT = 0x00000020,
+ NM_SETTING_COMPARE_FLAG_DIFF_RESULT_NO_DEFAULT = 0x00000040,
+ NM_SETTING_COMPARE_FLAG_IGNORE_TIMESTAMP = 0x00000080,
+
+ /* 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 align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<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><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><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><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><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>
+<tr>
+<td><p><a name="NM-SETTING-COMPARE-FLAG-DIFF-RESULT-WITH-DEFAULT:CAPS"></a><span class="term"><code class="literal">NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT</code></span></p></td>
+<td>if this flag is set,
+ <a class="link" href="NMSetting.html#nm-setting-diff" title="nm_setting_diff ()"><code class="function">nm_setting_diff()</code></a> and <a class="link" href="libnm-NMConnection.html#nm-connection-diff" title="nm_connection_diff ()"><code class="function">nm_connection_diff()</code></a> will also include properties that
+ are set to their default value. See also <em class="parameter"><code>NM_SETTING_COMPARE_FLAG_DIFF_RESULT_NO_DEFAULT</code></em>.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-SETTING-COMPARE-FLAG-DIFF-RESULT-NO-DEFAULT:CAPS"></a><span class="term"><code class="literal">NM_SETTING_COMPARE_FLAG_DIFF_RESULT_NO_DEFAULT</code></span></p></td>
+<td>if this flag is set,
+ <a class="link" href="NMSetting.html#nm-setting-diff" title="nm_setting_diff ()"><code class="function">nm_setting_diff()</code></a> and <a class="link" href="libnm-NMConnection.html#nm-connection-diff" title="nm_connection_diff ()"><code class="function">nm_connection_diff()</code></a> will not include properties that
+ are set to their default value. This is the opposite of
+ <em class="parameter"><code>NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT</code></em>. If both flags are set together,
+ <em class="parameter"><code>NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT</code></em> wins. If both flags are unset,
+ this means to exclude default properties if there is a setting to compare,
+ but include all properties, if the setting 'b' is missing. This is the legacy
+ behaviour of libnm-util, where <a class="link" href="NMSetting.html#nm-setting-diff" title="nm_setting_diff ()"><code class="function">nm_setting_diff()</code></a> behaved differently depending
+ on whether the setting 'b' was available. If <em class="parameter"><code>NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT</code></em>
+ is set, <a class="link" href="NMSetting.html#nm-setting-diff" title="nm_setting_diff ()"><code class="function">nm_setting_diff()</code></a> will also set the flags <em class="parameter"><code>NM_SETTING_DIFF_RESULT_IN_A_DEFAULT</code></em>
+ and <em class="parameter"><code>NM_SETTING_DIFF_RESULT_IN_B_DEFAULT</code></em>, if the values are default values.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-SETTING-COMPARE-FLAG-IGNORE-TIMESTAMP:CAPS"></a><span class="term"><code class="literal">NM_SETTING_COMPARE_FLAG_IGNORE_TIMESTAMP</code></span></p></td>
+<td>ignore the connection's timestamp
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSetting-struct"></a><h3>struct NMSetting</h3>
+<pre class="programlisting">struct 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="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 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 setting for which secrets are being iterated</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>secret</code></em> :</span></p></td>
+<td>The secret's name</td>
+</tr>
+<tr>
+<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><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>User data passed to <a class="link" href="libnm-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>
+<hr>
+<div class="refsect2">
+<a name="NMSettingClass"></a><h3>NMSettingClass</h3>
+<pre class="programlisting">typedef struct {
+ GObjectClass parent;
+
+ /* Virtual functions */
+ gint (*verify) (NMSetting *setting,
+ NMConnection *connection,
+ GError **error);
+
+ GPtrArray *(*need_secrets) (NMSetting *setting);
+
+ int (*update_one_secret) (NMSetting *setting,
+ const char *key,
+ GVariant *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);
+
+ gboolean (*clear_secrets_with_flags) (NMSetting *setting,
+ GParamSpec *pspec,
+ NMSettingClearSecretsWithFlagsFn func,
+ gpointer user_data);
+
+ /* 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);
+} NMSettingClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<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 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 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><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
+<td>The property's value</td>
+</tr>
+<tr>
+<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>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-lookup-type"></a><h3>nm_setting_lookup_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_setting_lookup_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 align="left" valign="top">
+<col>
+</colgroup>
+<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, or <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#G-TYPE-INVALID:CAPS"><code class="literal">G_TYPE_INVALID</code></a> if
+<em class="parameter"><code>name</code></em> is not recognized.</td>
+</tr>
+</tbody>
+</table></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="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> 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>
+<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="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 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>
+<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="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 the setting. Each setting's properties have allowed values, and
+some are dependent on other values (hence the need for <em class="parameter"><code>connection</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 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> to verify</td>
+</tr>
+<tr>
+<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> that <em class="parameter"><code>setting</code></em> came from, 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>setting</code></em> is being verified in isolation. <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>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 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>
+<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"><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 align="left" valign="top">
+<col>
+</colgroup>
+<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>
+<hr>
+<div class="refsect2">
+<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,
+ NM_SETTING_DIFF_RESULT_IN_A_DEFAULT = 0x00000004,
+ NM_SETTING_DIFF_RESULT_IN_B_DEFAULT = 0x00000004,
+} NMSettingDiffResult;
+</pre>
+<p>
+These values indicate the result of a setting difference operation.
+</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-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><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><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>
+<tr>
+<td><p><a name="NM-SETTING-DIFF-RESULT-IN-A-DEFAULT:CAPS"></a><span class="term"><code class="literal">NM_SETTING_DIFF_RESULT_IN_A_DEFAULT</code></span></p></td>
+<td>the property is present in
+setting A but is set to the default value. This flag is only set,
+if you specify <em class="parameter"><code>NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT</code></em>.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-SETTING-DIFF-RESULT-IN-B-DEFAULT:CAPS"></a><span class="term"><code class="literal">NM_SETTING_DIFF_RESULT_IN_B_DEFAULT</code></span></p></td>
+<td>analog to <em class="parameter"><code>NM_SETTING_DIFF_RESULT_IN_A_DEFAULT</code></em>.
+</td>
+</tr>
+</tbody>
+</table></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"><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 align="left" valign="top">
+<col>
+</colgroup>
+<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"><em class="parameter"><code>invert_results</code></em> :</span></p></td>
+<td>this parameter is used internally by libnm 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>
+<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="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"><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><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><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>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>
+<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"><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 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"><em class="parameter"><code>secret_name</code></em> :</span></p></td>
+<td>the secret key name to get flags for</td>
+</tr>
+<tr>
+<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><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> 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>
+<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"><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 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"><em class="parameter"><code>secret_name</code></em> :</span></p></td>
+<td>the secret key name to set flags for</td>
+</tr>
+<tr>
+<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>
+</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>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-get-dbus-property-type"></a><h3>nm_setting_get_dbus_property_type ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariantType.html#GVariantType"><span class="returnvalue">GVariantType</span></a> * nm_setting_get_dbus_property_type (<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> *property_name</code></em>);</pre>
+<p>
+Gets the D-Bus marshalling type of a property. <em class="parameter"><code>property_name</code></em> is a D-Bus
+property name, which may not necessarily be a <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</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>an <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>property_name</code></em> :</span></p></td>
+<td>the property of <em class="parameter"><code>setting</code></em> to get the type of</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the D-Bus marshalling type of <em class="parameter"><code>property</code></em> on <em class="parameter"><code>setting</code></em>.</td>
+</tr>
+</tbody>
+</table></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>* : Read</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>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/html/NMSetting8021x.html b/docs/libnm/html/NMSetting8021x.html
new file mode 100644
index 000000000..ea6a7740a
--- /dev/null
+++ b/docs/libnm/html/NMSetting8021x.html
@@ -0,0 +1,3251 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMSetting8021x</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch03.html" title="Connection and Setting API Reference">
+<link rel="prev" href="NMSettingConnection.html" title="NMSettingConnection">
+<link rel="next" href="NMSettingAdsl.html" title="NMSettingAdsl">
+<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="NMSettingConnection.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch03.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 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="#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>
+<td valign="top">
+<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 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><pre class="synopsis">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>
+#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>
+struct <a class="link" href="NMSetting8021x.html#NMSetting8021x-struct" title="struct 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>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="returnvalue">GBytes</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>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="returnvalue">GBytes</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>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="returnvalue">GBytes</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>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="returnvalue">GBytes</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>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="returnvalue">GBytes</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>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="returnvalue">GBytes</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>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="returnvalue">GBytes</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">
+ <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.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>" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : 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>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="type">GBytes</span></a>* : 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>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="type">GBytes</span></a>* : Read / Write
+ "<a class="link" href="NMSetting8021x.html#NMSetting8021x--eap" title='The "eap" property'>eap</a>" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : 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 class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> : Read / Write
+ "<a class="link" href="NMSetting8021x.html#NMSetting8021x--password-raw" title='The "password-raw" property'>password-raw</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="type">GBytes</span></a>* : Read / Write
+ "<a class="link" href="NMSetting8021x.html#NMSetting8021x--password-raw-flags" title='The "password-raw-flags" property'>password-raw-flags</a>" <a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</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>" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : 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>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="type">GBytes</span></a>* : 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>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="type">GBytes</span></a>* : Read / Write
+ "<a class="link" href="NMSetting8021x.html#NMSetting8021x--phase2-private-key" title='The "phase2-private-key" property'>phase2-private-key</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="type">GBytes</span></a>* : 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 class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</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 class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</span></a> : Read / Write
+ "<a class="link" href="NMSetting8021x.html#NMSetting8021x--private-key" title='The "private-key" property'>private-key</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="type">GBytes</span></a>* : 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 class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</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 align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<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><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><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><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#12 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><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><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><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>
+<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="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>
+<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>
+<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>
+<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-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-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-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>struct NMSetting8021x</h3>
+<pre class="programlisting">struct NMSetting8021x;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSetting8021xClass"></a><h3>NMSetting8021xClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+} 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 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="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> object</td>
+</tr></tbody>
+</table></div>
+</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="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 number of allowed EAP methods</td>
+</tr>
+</tbody>
+</table></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="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="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>eap</code></em> :</span></p></td>
+<td>the name of the EAP method to allow for this connection</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 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>
+<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="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 to remove</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<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 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>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>
+<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="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></tbody>
+</table></div>
+</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
+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="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 anonymous identifier</td>
+</tr>
+</tbody>
+</table></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="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 PAC file</td>
+</tr>
+</tbody>
+</table></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 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="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>
+<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>
+<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
+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="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 CA certificate directory path</td>
+</tr>
+</tbody>
+</table></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.
+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="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 "phase 2" CA certificate directory path</td>
+</tr>
+</tbody>
+</table></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"><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 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 CA certificate (blob or path)</td>
+</tr>
+</tbody>
+</table></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"><a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="returnvalue">GBytes</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="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 CA certificate data. <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-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="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>path to the CA certificate file</td>
+</tr>
+</tbody>
+</table></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"><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="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>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="/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><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><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>
+<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="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 <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="/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="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 number of altsubject-matches entries.</td>
+</tr>
+</tbody>
+</table></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="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>i</code></em> :</span></p></td>
+<td>the zero-based index of the array of altSubjectName matches</td>
+</tr>
+<tr>
+<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>
+<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
+match is added, the altSubjectName of the remote authentication
+server is not verified.
+</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>altsubject_match</code></em> :</span></p></td>
+<td>the altSubjectName to allow for this connection</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
+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>
+<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="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 altSubjectName match to remove</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<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 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>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>
+<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="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></tbody>
+</table></div>
+</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"><a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="returnvalue">GBytes</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="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 client certificate data. <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-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="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>path to the client certificate file</td>
+</tr>
+</tbody>
+</table></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"><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
+when EAP-TLS is used as either the "phase 1" or "phase 2" 802.1x
+authentication method.
+</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>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#12 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="/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><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><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>
+<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="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 "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>
+<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="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>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="/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.</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="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>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>
+<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="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 "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>
+<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="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 "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>
+<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"><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="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 "phase 2" CA certificate (blob or path)</td>
+</tr>
+</tbody>
+</table></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"><a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="returnvalue">GBytes</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="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 "phase 2" CA certificate data. <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-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="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>path to the "phase 2" CA certificate file</td>
+</tr>
+</tbody>
+</table></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"><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="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>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="/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><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><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>
+<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="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 <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="/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="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 number of phase2-altsubject-matches entries.</td>
+</tr>
+</tbody>
+</table></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="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>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>
+<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
+at least one match is added, the altSubjectName of the "phase 2"
+remote authentication server is not verified.
+</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 allow for this
+connection</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 "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>
+<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="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 "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>
+</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="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></tbody>
+</table></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"><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-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 "phase 2" client certificate (blob or path)</td>
+</tr>
+</tbody>
+</table></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"><a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="returnvalue">GBytes</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="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 "phase 2" client certificate data. <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-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="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>path to the "phase 2" client certificate file</td>
+</tr>
+</tbody>
+</table></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"><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
+when EAP-TLS is used as either the "phase 1" or "phase 2" 802.1x
+authentication method.
+</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>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#12 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="/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><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><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><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>
+<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="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 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>
+<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"><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 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 <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>
+<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"><a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="returnvalue">GBytes</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 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 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. <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-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 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 <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>
+<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="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 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>
+<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"><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 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 <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>
+<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"><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-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 private key (blob or path)</td>
+</tr>
+</tbody>
+</table></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"><a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="returnvalue">GBytes</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
+unencrypted private key data may be readable by unprivileged users. Private
+keys should always be encrypted with a private key password.
+</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 private key data. <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-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="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>path to the private key file</td>
+</tr>
+</tbody>
+</table></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"><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
+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
+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
+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="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>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#12 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="/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><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.</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><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><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>
+<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="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 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>
+<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"><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 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 <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>
+<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"><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 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 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>
+<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"><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-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 "phase 2" private key (blob or path)</td>
+</tr>
+</tbody>
+</table></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"><a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="returnvalue">GBytes</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
+unencrypted private key data may be readable by unprivileged users. Private
+keys should always be encrypted with a private key password.
+</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 "phase 2" private key data. <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-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="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>path to the "phase 2" private key file</td>
+</tr>
+</tbody>
+</table></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"><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
+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
+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
+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="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>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#12 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="/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><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.</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><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><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>
+<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="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 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>
+<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"><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 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 <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>
+</tr>
+</tbody>
+</table></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"><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 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 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>
+<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" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : 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="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="NMSetting8021x--ca-cert"></a><h3>The <code class="literal">"ca-cert"</code> property</h3>
+<pre class="programlisting"> "ca-cert" <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="type">GBytes</span></a>* : 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>
+<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>
+<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="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="NMSetting8021x--client-cert"></a><h3>The <code class="literal">"client-cert"</code> property</h3>
+<pre class="programlisting"> "client-cert" <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="type">GBytes</span></a>* : 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>
+<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>
+<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="NMSetting8021x--eap"></a><h3>The <code class="literal">"eap"</code> property</h3>
+<pre class="programlisting"> "eap" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : 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="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="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="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="NMSetting8021x--password-flags"></a><h3>The <code class="literal">"password-flags"</code> property</h3>
+<pre class="programlisting"> "password-flags" <a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</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>
+</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" <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="type">GBytes</span></a>* : 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="NMSetting8021x--password-raw-flags"></a><h3>The <code class="literal">"password-raw-flags"</code> property</h3>
+<pre class="programlisting"> "password-raw-flags" <a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</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>
+</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>* : 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="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="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="NMSetting8021x--phase2-altsubject-matches"></a><h3>The <code class="literal">"phase2-altsubject-matches"</code> property</h3>
+<pre class="programlisting"> "phase2-altsubject-matches" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : 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="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="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="NMSetting8021x--phase2-ca-cert"></a><h3>The <code class="literal">"phase2-ca-cert"</code> property</h3>
+<pre class="programlisting"> "phase2-ca-cert" <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="type">GBytes</span></a>* : 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>
+<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>
+<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="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="NMSetting8021x--phase2-client-cert"></a><h3>The <code class="literal">"phase2-client-cert"</code> property</h3>
+<pre class="programlisting"> "phase2-client-cert" <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="type">GBytes</span></a>* : 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>
+<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>
+<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="NMSetting8021x--phase2-private-key"></a><h3>The <code class="literal">"phase2-private-key"</code> property</h3>
+<pre class="programlisting"> "phase2-private-key" <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="type">GBytes</span></a>* : 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>
+<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#12 format private
+keys and the blob scheme, this property should be set to the
+PKCS#12 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#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
+<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#12 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-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="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#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 <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>
+<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 class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</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>
+</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>* : 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>* : 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 class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</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>
+</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" <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="type">GBytes</span></a>* : 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#12 format private
+keys and the blob scheme, this property should be set to the
+PKCS#12 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#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.
+</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>* : 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#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 <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 class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</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>
+</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>* : 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> : 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.19</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/libnm/html/NMSettingAdsl.html b/docs/libnm/html/NMSettingAdsl.html
new file mode 100644
index 000000000..cbbf17017
--- /dev/null
+++ b/docs/libnm/html/NMSettingAdsl.html
@@ -0,0 +1,463 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMSettingAdsl</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch03.html" title="Connection and Setting API Reference">
+<link rel="prev" href="NMSetting8021x.html" title="NMSetting8021x">
+<link rel="next" href="NMSettingBluetooth.html" title="NMSettingBluetooth">
+<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="NMSetting8021x.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch03.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 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="#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>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMSettingAdsl.top_of_page"></a>NMSettingAdsl</span></h2>
+<p>NMSettingAdsl — Describes ADSL-based properties</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingAdsl.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#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>
+#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>
+struct <a class="link" href="NMSettingAdsl.html#NMSettingAdsl-struct" title="struct 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="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.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 class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</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.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"
+</pre>
+<p>
+</p>
+</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>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-ADSL-PASSWORD:CAPS"></a><h3>NM_SETTING_ADSL_PASSWORD</h3>
+<pre class="programlisting">#define NM_SETTING_ADSL_PASSWORD "password"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-ADSL-PASSWORD-FLAGS:CAPS"></a><h3>NM_SETTING_ADSL_PASSWORD_FLAGS</h3>
+<pre class="programlisting">#define NM_SETTING_ADSL_PASSWORD_FLAGS "password-flags"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-ADSL-PROTOCOL:CAPS"></a><h3>NM_SETTING_ADSL_PROTOCOL</h3>
+<pre class="programlisting">#define NM_SETTING_ADSL_PROTOCOL "protocol"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-ADSL-ENCAPSULATION:CAPS"></a><h3>NM_SETTING_ADSL_ENCAPSULATION</h3>
+<pre class="programlisting">#define NM_SETTING_ADSL_ENCAPSULATION "encapsulation"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-ADSL-VPI:CAPS"></a><h3>NM_SETTING_ADSL_VPI</h3>
+<pre class="programlisting">#define NM_SETTING_ADSL_VPI "vpi"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-ADSL-VCI:CAPS"></a><h3>NM_SETTING_ADSL_VCI</h3>
+<pre class="programlisting">#define NM_SETTING_ADSL_VCI "vci"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-ADSL-PROTOCOL-PPPOA:CAPS"></a><h3>NM_SETTING_ADSL_PROTOCOL_PPPOA</h3>
+<pre class="programlisting">#define NM_SETTING_ADSL_PROTOCOL_PPPOA "pppoa"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-ADSL-PROTOCOL-PPPOE:CAPS"></a><h3>NM_SETTING_ADSL_PROTOCOL_PPPOE</h3>
+<pre class="programlisting">#define NM_SETTING_ADSL_PROTOCOL_PPPOE "pppoe"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-ADSL-PROTOCOL-IPOATM:CAPS"></a><h3>NM_SETTING_ADSL_PROTOCOL_IPOATM</h3>
+<pre class="programlisting">#define NM_SETTING_ADSL_PROTOCOL_IPOATM "ipoatm"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-ADSL-ENCAPSULATION-VCMUX:CAPS"></a><h3>NM_SETTING_ADSL_ENCAPSULATION_VCMUX</h3>
+<pre class="programlisting">#define NM_SETTING_ADSL_ENCAPSULATION_VCMUX "vcmux"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-ADSL-ENCAPSULATION-LLC:CAPS"></a><h3>NM_SETTING_ADSL_ENCAPSULATION_LLC</h3>
+<pre class="programlisting">#define NM_SETTING_ADSL_ENCAPSULATION_LLC "llc"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingAdsl-struct"></a><h3>struct NMSettingAdsl</h3>
+<pre class="programlisting">struct NMSettingAdsl;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingAdslClass"></a><h3>NMSettingAdslClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+} 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>* : 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>* : 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 class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</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>
+</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>* : 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>* : 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> : 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> : Read / Write</pre>
+<p>
+VPI of ADSL connection
+</p>
+<p>Allowed values: &lt;= 65536</p>
+<p>Default value: 0</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/html/NMSettingBluetooth.html b/docs/libnm/html/NMSettingBluetooth.html
new file mode 100644
index 000000000..203c39114
--- /dev/null
+++ b/docs/libnm/html/NMSettingBluetooth.html
@@ -0,0 +1,244 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMSettingBluetooth</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch03.html" title="Connection and Setting API Reference">
+<link rel="prev" href="NMSettingAdsl.html" title="NMSettingAdsl">
+<link rel="next" href="NMSettingBond.html" title="NMSettingBond">
+<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="ch03.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 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="#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>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMSettingBluetooth.top_of_page"></a>NMSettingBluetooth</span></h2>
+<p>NMSettingBluetooth — Describes Bluetooth connection properties</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingBluetooth.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#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>
+#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>
+struct <a class="link" href="NMSettingBluetooth.html#NMSettingBluetooth-struct" title="struct 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 <span class="returnvalue">char</span> * <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="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.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMSettingBluetooth.html#NMSettingBluetooth--bdaddr" title='The "bdaddr" property'>bdaddr</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="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
+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.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"
+</pre>
+<p>
+</p>
+</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>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-BLUETOOTH-TYPE:CAPS"></a><h3>NM_SETTING_BLUETOOTH_TYPE</h3>
+<pre class="programlisting">#define NM_SETTING_BLUETOOTH_TYPE "type"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<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>
+</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>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingBluetooth-struct"></a><h3>struct NMSettingBluetooth</h3>
+<pre class="programlisting">struct NMSettingBluetooth;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingBluetoothClass"></a><h3>NMSettingBluetoothClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+} 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 <span class="returnvalue">char</span> * 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 <a class="link" href="NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-TYPE-PANU:CAPS" title="NM_SETTING_BLUETOOTH_TYPE_PANU"><code class="literal">NM_SETTING_BLUETOOTH_TYPE_PANU</code></a> or
+<a class="link" href="NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-TYPE-DUN:CAPS" title="NM_SETTING_BLUETOOTH_TYPE_DUN"><code class="literal">NM_SETTING_BLUETOOTH_TYPE_DUN</code></a>
+</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" <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 Bluetooth address of the device.
+</p>
+<p>Default value: NULL</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>* : 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.19</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/libnm/html/NMSettingBond.html b/docs/libnm/html/NMSettingBond.html
new file mode 100644
index 000000000..6a4d566c3
--- /dev/null
+++ b/docs/libnm/html/NMSettingBond.html
@@ -0,0 +1,573 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMSettingBond</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch03.html" title="Connection and Setting API Reference">
+<link rel="prev" href="NMSettingBluetooth.html" title="NMSettingBluetooth">
+<link rel="next" href="NMSettingBridge.html" title="NMSettingBridge">
+<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="NMSettingBluetooth.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch03.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 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>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMSettingBond.top_of_page"></a>NMSettingBond</span></h2>
+<p>NMSettingBond — Describes connection properties for bonds</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingBond.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#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>
+#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>
+#define <a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTION-LACP-RATE:CAPS" title="NM_SETTING_BOND_OPTION_LACP_RATE">NM_SETTING_BOND_OPTION_LACP_RATE</a>
+struct <a class="link" href="NMSettingBond.html#NMSettingBond-struct" title="struct 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>);
+<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">
+ <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--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 / Write
+</pre>
+</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>
+</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="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="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-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-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-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="NM-SETTING-BOND-OPTION-LACP-RATE:CAPS"></a><h3>NM_SETTING_BOND_OPTION_LACP_RATE</h3>
+<pre class="programlisting">#define NM_SETTING_BOND_OPTION_LACP_RATE "lacp_rate"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingBond-struct"></a><h3>struct NMSettingBond</h3>
+<pre class="programlisting">struct NMSettingBond;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingBondClass"></a><h3>NMSettingBondClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+} 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 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="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>
+<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
+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="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 number of bonding options</td>
+</tr>
+</tbody>
+</table></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
+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>,
+and should not be used to refer to options except for short periods of time
+such as during option 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>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><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>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<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>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer 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 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>
+<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="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"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>the option name for which to retrieve the value</td>
+</tr>
+<tr>
+<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>
+<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
+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>
+<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 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"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>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-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 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"><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>
+<hr>
+<div class="refsect2">
+<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 align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<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><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>
+</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="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>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>
+</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><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 name of the option</td>
+</tr>
+<tr>
+<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>
+<div class="refsect1">
+<a name="NMSettingBond.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="NMSettingBond--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 / 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>
+<p>
+Type: GHashTable(utf8,utf8)
+</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/html/NMSettingBridge.html b/docs/libnm/html/NMSettingBridge.html
new file mode 100644
index 000000000..7248b61be
--- /dev/null
+++ b/docs/libnm/html/NMSettingBridge.html
@@ -0,0 +1,426 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMSettingBridge</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch03.html" title="Connection and Setting 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.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="NMSettingBond.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch03.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 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>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMSettingBridge.top_of_page"></a>NMSettingBridge</span></h2>
+<p>NMSettingBridge — Describes connection properties for bridges</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingBridge.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#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>
+#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>
+struct <a class="link" href="NMSettingBridge.html#NMSettingBridge-struct" title="struct 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-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">
+ <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.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--mac-address" title='The "mac-address" property'>mac-address</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--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="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>
+<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>
+<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>
+<p>
+</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>
+<p>
+</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>
+<p>
+</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>
+<p>
+</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>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingBridge-struct"></a><h3>struct NMSettingBridge</h3>
+<pre class="programlisting">struct NMSettingBridge;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingBridgeClass"></a><h3>NMSettingBridgeClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+} NMSettingBridgeClass;
+</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="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="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>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-bridge-get-mac-address"></a><h3>nm_setting_bridge_get_mac_address ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * 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 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--mac-address" title='The "mac-address" property'><span class="type">"mac-address"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</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="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--stp" title='The "stp" property'><span class="type">"stp"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</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="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--priority" title='The "priority" property'><span class="type">"priority"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</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="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--forward-delay" title='The "forward-delay" property'><span class="type">"forward-delay"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</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="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--hello-time" title='The "hello-time" property'><span class="type">"hello-time"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</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><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--max-age" title='The "max-age" property'><span class="type">"max-age"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</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="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>
+</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> : 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>
+</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> : 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>
+</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> : 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>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingBridge--mac-address"></a><h3>The <code class="literal">"mac-address"</code> property</h3>
+<pre class="programlisting"> "mac-address" <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, 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>Default value: NULL</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> : Read / Write / Construct</pre>
+<p>
+The Spanning Tree Protocol (STP) maximum message age, in seconds.
+</p>
+<p>Allowed values: &lt;= 40</p>
+<p>Default value: 20</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> : 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>
+</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> : Read / Write / Construct</pre>
+<p>
+Controls whether Spanning Tree Protocol (STP) is enabled for this bridge.
+</p>
+<p>Default value: TRUE</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/html/NMSettingBridgePort.html b/docs/libnm/html/NMSettingBridgePort.html
new file mode 100644
index 000000000..b6e0035f2
--- /dev/null
+++ b/docs/libnm/html/NMSettingBridgePort.html
@@ -0,0 +1,257 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMSettingBridgePort</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch03.html" title="Connection and Setting API Reference">
+<link rel="prev" href="NMSettingBridge.html" title="NMSettingBridge">
+<link rel="next" href="NMSettingCdma.html" title="NMSettingCdma">
+<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="NMSettingBridge.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch03.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 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="#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>
+<td valign="top">
+<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 valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingBridgePort.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#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>
+#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>
+struct <a class="link" href="NMSettingBridgePort.html#NMSettingBridgePort-struct" title="struct 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="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.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.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"
+</pre>
+<p>
+</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>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-BRIDGE-PORT-PATH-COST:CAPS"></a><h3>NM_SETTING_BRIDGE_PORT_PATH_COST</h3>
+<pre class="programlisting">#define NM_SETTING_BRIDGE_PORT_PATH_COST "path-cost"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-BRIDGE-PORT-HAIRPIN-MODE:CAPS"></a><h3>NM_SETTING_BRIDGE_PORT_HAIRPIN_MODE</h3>
+<pre class="programlisting">#define NM_SETTING_BRIDGE_PORT_HAIRPIN_MODE "hairpin-mode"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingBridgePort-struct"></a><h3>struct NMSettingBridgePort</h3>
+<pre class="programlisting">struct NMSettingBridgePort;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingBridgePortClass"></a><h3>NMSettingBridgePortClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+} 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>
+</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>
+</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>
+</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>
+</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> : 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>
+</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> : 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>
+</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> : 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>
+</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/html/NMSettingCdma.html b/docs/libnm/html/NMSettingCdma.html
new file mode 100644
index 000000000..653c020bb
--- /dev/null
+++ b/docs/libnm/html/NMSettingCdma.html
@@ -0,0 +1,297 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMSettingCdma</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch03.html" title="Connection and Setting API Reference">
+<link rel="prev" href="NMSettingBridgePort.html" title="NMSettingBridgePort">
+<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="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="ch03.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 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="#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>
+<td valign="top">
+<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 valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingCdma.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#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>
+#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>
+struct <a class="link" href="NMSettingCdma.html#NMSettingCdma-struct" title="struct 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="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.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 class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</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
+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.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"
+</pre>
+<p>
+</p>
+</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>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-CDMA-USERNAME:CAPS"></a><h3>NM_SETTING_CDMA_USERNAME</h3>
+<pre class="programlisting">#define NM_SETTING_CDMA_USERNAME "username"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-CDMA-PASSWORD:CAPS"></a><h3>NM_SETTING_CDMA_PASSWORD</h3>
+<pre class="programlisting">#define NM_SETTING_CDMA_PASSWORD "password"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-CDMA-PASSWORD-FLAGS:CAPS"></a><h3>NM_SETTING_CDMA_PASSWORD_FLAGS</h3>
+<pre class="programlisting">#define NM_SETTING_CDMA_PASSWORD_FLAGS "password-flags"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingCdma-struct"></a><h3>struct NMSettingCdma</h3>
+<pre class="programlisting">struct NMSettingCdma;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingCdmaClass"></a><h3>NMSettingCdmaClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+} 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>* : 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>* : 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 class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</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>
+</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>* : 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.19</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/libnm/html/NMSettingConnection.html b/docs/libnm/html/NMSettingConnection.html
new file mode 100644
index 000000000..2ebace0b7
--- /dev/null
+++ b/docs/libnm/html/NMSettingConnection.html
@@ -0,0 +1,1246 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMSettingConnection</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch03.html" title="Connection and Setting API Reference">
+<link rel="prev" href="NMSetting.html" title="NMSetting">
+<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="NMSetting.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch03.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 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="#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>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMSettingConnection.top_of_page"></a>NMSettingConnection</span></h2>
+<p>NMSettingConnection — Describes general connection properties</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingConnection.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#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>
+#define <a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-AUTOCONNECT-PRIORITY-MIN:CAPS" title="NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_MIN">NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_MIN</a>
+#define <a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-AUTOCONNECT-PRIORITY-MAX:CAPS" title="NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_MAX">NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_MAX</a>
+#define <a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-AUTOCONNECT-PRIORITY-DEFAULT:CAPS" title="NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_DEFAULT">NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_DEFAULT</a>
+#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-AUTOCONNECT-PRIORITY:CAPS" title="NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY">NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY</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>
+struct <a class="link" href="NMSettingConnection.html#NMSettingConnection-struct" title="struct 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#gint"><span class="returnvalue">gint</span></a> <a class="link" href="NMSettingConnection.html#nm-setting-connection-get-autoconnect-priority" title="nm_setting_connection_get_autoconnect_priority ()">nm_setting_connection_get_autoconnect_priority</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">
+ <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--autoconnect-priority" title='The "autoconnect-priority" property'>autoconnect-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="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>" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : 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>" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : 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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> objects, regardless of what type
+of network connection they describe. Each <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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.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="NM-SETTING-CONNECTION-AUTOCONNECT-PRIORITY-MIN:CAPS"></a><h3>NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_MIN</h3>
+<pre class="programlisting">#define NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_MIN -999
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-CONNECTION-AUTOCONNECT-PRIORITY-MAX:CAPS"></a><h3>NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_MAX</h3>
+<pre class="programlisting">#define NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_MAX 999
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-CONNECTION-AUTOCONNECT-PRIORITY-DEFAULT:CAPS"></a><h3>NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_DEFAULT</h3>
+<pre class="programlisting">#define NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_DEFAULT 0
+</pre>
+<p>
+</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>
+<p>
+</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>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<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-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-AUTOCONNECT-PRIORITY:CAPS"></a><h3>NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY</h3>
+<pre class="programlisting">#define NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY "autoconnect-priority"
+</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-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>
+<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-MASTER:CAPS"></a><h3>NM_SETTING_CONNECTION_MASTER</h3>
+<pre class="programlisting">#define NM_SETTING_CONNECTION_MASTER "master"
+</pre>
+<p>
+</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>
+</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-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>
+<hr>
+<div class="refsect2">
+<a name="NMSettingConnection-struct"></a><h3>struct NMSettingConnection</h3>
+<pre class="programlisting">struct 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;
+} NMSettingConnectionClass;
+</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="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="NMSettingConnection.html" title="NMSettingConnection"><span class="type">NMSettingConnection</span></a> object</td>
+</tr></tbody>
+</table></div>
+</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="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 connection ID</td>
+</tr>
+</tbody>
+</table></div>
+</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="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 connection UUID</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<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 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 connection's interface name</td>
+</tr>
+</tbody>
+</table></div>
+</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="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 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><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 autoconnect behavior</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-connection-get-autoconnect-priority"></a><h3>nm_setting_connection_get_autoconnect_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_connection_get_autoconnect_priority
+ (<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-priority" title='The "autoconnect-priority" property'><span class="type">"autoconnect-priority"</span></a> property of the connection.
+The higher number, the higher priority.
+</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"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the connection's autoconnect priority</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><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>
+<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="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>
+<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>
+<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="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 number of permissions entires</td>
+</tr>
+</tbody>
+</table></div>
+</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="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>the zero-based index of the permissions entry</td>
+</tr>
+<tr>
+<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><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>
+<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="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 trust level of a connection</td>
+</tr>
+</tbody>
+</table></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="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>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>
+<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="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>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 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>
+<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="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>the zero-based index of the permission to remove</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<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 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>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>
+<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="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>interface name of the master device or UUID of the master
+connection.</td>
+</tr>
+</tbody>
+</table></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="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>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><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>
+<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="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 type of slave this connection is, if any</td>
+</tr>
+</tbody>
+</table></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="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 number of configured secondary connection UUIDs</td>
+</tr>
+</tbody>
+</table></div>
+</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><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 secondary connection UUID entry</td>
+</tr>
+<tr>
+<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>
+</tr>
+</tbody>
+</table></div>
+</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="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>
+</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="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>
+</div>
+<hr>
+<div class="refsect2">
+<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>
+</div>
+<hr>
+<div class="refsect2">
+<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>
+</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> : 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="NMSettingConnection--autoconnect-priority"></a><h3>The <code class="literal">"autoconnect-priority"</code> property</h3>
+<pre class="programlisting"> "autoconnect-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 autoconnect priority. If the connection is set to autoconnect,
+connections with higher priority will be preferred. Defaults to 0.
+The higher number means higher priority.
+</p>
+<p>Allowed values: [-999,999]</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<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>
+</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>* : 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="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>
+<p>
+For software devices this specifies the name of the created device.
+</p>
+<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>
+</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>* : Read / Write</pre>
+<p>
+Interface name of the master device or UUID of the master connection.
+</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" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : 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, "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>
+</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> : 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" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : 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>
+</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>* : 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> : 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>* : 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>* : 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, 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-nm-utils.html#nm-utils-uuid-generate" title="nm_utils_uuid_generate ()"><code class="function">nm_utils_uuid_generate()</code></a> or
+<a href="https://developer.gnome.org/libnm-util/0.9/libnm-util-nm-utils.html#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>* : 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.19</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/libnm/html/NMSettingDcb.html b/docs/libnm/html/NMSettingDcb.html
new file mode 100644
index 000000000..e9d9de648
--- /dev/null
+++ b/docs/libnm/html/NMSettingDcb.html
@@ -0,0 +1,1140 @@
+<!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 Reference Manual">
+<link rel="up" href="ch03.html" title="Connection and Setting API Reference">
+<link rel="prev" href="NMSettingCdma.html" title="NMSettingCdma">
+<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="NMSettingCdma.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch03.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 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="#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="NMSettingDcbFlags"></a><pre class="synopsis">#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#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>
+struct <a class="link" href="NMSettingDcb.html#NMSettingDcb-struct" title="struct 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">
+ GFlags
+ +----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 class="link" href="NMSettingDcb.html#NMSettingDcbFlags"><span class="type">NMSettingDcbFlags</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 class="link" href="NMSettingDcb.html#NMSettingDcbFlags"><span class="type">NMSettingDcbFlags</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 class="link" href="NMSettingDcb.html#NMSettingDcbFlags"><span class="type">NMSettingDcbFlags</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>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a>* : Read / Write
+ "<a class="link" href="NMSettingDcb.html#NMSettingDcb--priority-flow-control" title='The "priority-flow-control" property'>priority-flow-control</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a>* : 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 class="link" href="NMSettingDcb.html#NMSettingDcbFlags"><span class="type">NMSettingDcbFlags</span></a> : Read / Write
+ "<a class="link" href="NMSettingDcb.html#NMSettingDcb--priority-group-bandwidth" title='The "priority-group-bandwidth" property'>priority-group-bandwidth</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a>* : Read / Write
+ "<a class="link" href="NMSettingDcb.html#NMSettingDcb--priority-group-flags" title='The "priority-group-flags" property'>priority-group-flags</a>" <a class="link" href="NMSettingDcb.html#NMSettingDcbFlags"><span class="type">NMSettingDcbFlags</span></a> : Read / Write
+ "<a class="link" href="NMSettingDcb.html#NMSettingDcb--priority-group-id" title='The "priority-group-id" property'>priority-group-id</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a>* : Read / Write
+ "<a class="link" href="NMSettingDcb.html#NMSettingDcb--priority-strict-bandwidth" title='The "priority-strict-bandwidth" property'>priority-strict-bandwidth</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a>* : Read / Write
+ "<a class="link" href="NMSettingDcb.html#NMSettingDcb--priority-traffic-class" title='The "priority-traffic-class" property'>priority-traffic-class</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a>* : 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="NMSettingDcbFlags-enum"></a><h3>enum NMSettingDcbFlags</h3>
+<pre class="programlisting">typedef enum {
+ /*&lt; flags &gt;*/
+ 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>
+</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>
+</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>
+</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>struct NMSettingDcb</h3>
+<pre class="programlisting">struct NMSettingDcb;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingDcbClass"></a><h3>NMSettingDcbClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+} 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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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 class="link" href="NMSettingDcb.html#NMSettingDcbFlags"><span class="type">NMSettingDcbFlags</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>
+</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>
+</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>
+</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 class="link" href="NMSettingDcb.html#NMSettingDcbFlags"><span class="type">NMSettingDcbFlags</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>
+</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>
+</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 class="link" href="NMSettingDcb.html#NMSettingDcbFlags"><span class="type">NMSettingDcbFlags</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>
+</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>
+</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" <a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a>* : 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>
+Element-type: guint
+</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" <a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a>* : Read / Write</pre>
+<p>
+An array of 8 boolean 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.
+</p>
+<p>
+Element-type: gboolean
+</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 class="link" href="NMSettingDcb.html#NMSettingDcbFlags"><span class="type">NMSettingDcbFlags</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>
+</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" <a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a>* : 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>
+Element-type: guint
+</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 class="link" href="NMSettingDcb.html#NMSettingDcbFlags"><span class="type">NMSettingDcbFlags</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>
+</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" <a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a>* : 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>
+Element-type: guint
+</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" <a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a>* : Read / Write</pre>
+<p>
+An array of 8 boolean 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.
+</p>
+<p>
+Element-type: gboolean
+</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" <a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a>* : 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>
+Element-type: guint
+</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/html/NMSettingGeneric.html b/docs/libnm/html/NMSettingGeneric.html
new file mode 100644
index 000000000..1ade9b46b
--- /dev/null
+++ b/docs/libnm/html/NMSettingGeneric.html
@@ -0,0 +1,119 @@
+<!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 Reference Manual">
+<link rel="up" href="ch03.html" title="Connection and Setting API Reference">
+<link rel="prev" href="NMSettingDcb.html" title="NMSettingDcb">
+<link rel="next" href="NMSettingGsm.html" title="NMSettingGsm">
+<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="NMSettingDcb.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch03.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 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="#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>
+<pre class="synopsis">#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>
+struct <a class="link" href="NMSettingGeneric.html#NMSettingGeneric-struct" title="struct 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">
+ <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="https://developer.gnome.org/libnm-util/0.9/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="NMSettingGeneric-struct"></a><h3>struct NMSettingGeneric</h3>
+<pre class="programlisting">struct NMSettingGeneric;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingGenericClass"></a><h3>NMSettingGenericClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+} 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>
+</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/html/NMSettingGsm.html b/docs/libnm/html/NMSettingGsm.html
new file mode 100644
index 000000000..f3bd95cd3
--- /dev/null
+++ b/docs/libnm/html/NMSettingGsm.html
@@ -0,0 +1,521 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMSettingGsm</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch03.html" title="Connection and Setting API Reference">
+<link rel="prev" href="NMSettingGeneric.html" title="NMSettingGeneric">
+<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="NMSettingGeneric.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch03.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 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="#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>
+<td valign="top">
+<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 valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingGsm.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#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>
+#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>
+struct <a class="link" href="NMSettingGsm.html#NMSettingGsm-struct" title="struct 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>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingGsm.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="NMSetting.html" title="NMSetting">NMSetting</a>
+ +----NMSettingGsm
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingGsm.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<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--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 class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</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 class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</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
+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.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"
+</pre>
+<p>
+</p>
+</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>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-GSM-USERNAME:CAPS"></a><h3>NM_SETTING_GSM_USERNAME</h3>
+<pre class="programlisting">#define NM_SETTING_GSM_USERNAME "username"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-GSM-PASSWORD:CAPS"></a><h3>NM_SETTING_GSM_PASSWORD</h3>
+<pre class="programlisting">#define NM_SETTING_GSM_PASSWORD "password"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-GSM-PASSWORD-FLAGS:CAPS"></a><h3>NM_SETTING_GSM_PASSWORD_FLAGS</h3>
+<pre class="programlisting">#define NM_SETTING_GSM_PASSWORD_FLAGS "password-flags"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-GSM-APN:CAPS"></a><h3>NM_SETTING_GSM_APN</h3>
+<pre class="programlisting">#define NM_SETTING_GSM_APN "apn"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-GSM-NETWORK-ID:CAPS"></a><h3>NM_SETTING_GSM_NETWORK_ID</h3>
+<pre class="programlisting">#define NM_SETTING_GSM_NETWORK_ID "network-id"
+</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"
+</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"
+</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"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingGsm-struct"></a><h3>struct NMSettingGsm</h3>
+<pre class="programlisting">struct NMSettingGsm;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingGsmClass"></a><h3>NMSettingGsmClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+} 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>
+</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--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>
+</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--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>
+</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--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>
+</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-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>
+</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--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>
+</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--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>
+</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="NMSettingGsm.html#NMSettingGsm--pin" title='The "pin" property'><span class="type">"pin"</span></a>
+</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><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="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>
+</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--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> : 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>* : 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--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>* : 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 class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</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>
+</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>* : 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 class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</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>
+</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>* : 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.19</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/libnm/html/NMSettingIP4Config.html b/docs/libnm/html/NMSettingIP4Config.html
new file mode 100644
index 000000000..cb7542b82
--- /dev/null
+++ b/docs/libnm/html/NMSettingIP4Config.html
@@ -0,0 +1,251 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMSettingIP4Config</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch03.html" title="Connection and Setting API Reference">
+<link rel="prev" href="NMSettingIPConfig.html" title="NMSettingIPConfig">
+<link rel="next" href="NMSettingIP6Config.html" title="NMSettingIP6Config">
+<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="NMSettingIPConfig.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch03.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 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>
+<td valign="top">
+<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 valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingIP4Config.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#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>
+#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-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>
+struct <a class="link" href="NMSettingIP4Config.html#NMSettingIP4Config-struct" title="struct 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-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>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingIP4Config.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="NMSetting.html" title="NMSetting">NMSetting</a>
+ +----<a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</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--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
+</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>
+<p>
+<a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> has few properties or methods of its own; it inherits
+almost everything from <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a>.
+</p>
+<p>
+NetworkManager supports 5 values for the <a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--method" title='The "method" property'><span class="type">"method"</span></a> property
+for IPv4. 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.
+</p>
+</div>
+<div class="refsect1">
+<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="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-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>
+<hr>
+<div class="refsect2">
+<a name="NMSettingIP4Config-struct"></a><h3>struct NMSettingIP4Config</h3>
+<pre class="programlisting">struct NMSettingIP4Config;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingIP4ConfigClass"></a><h3>NMSettingIP4ConfigClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingIPConfigClass parent;
+} NMSettingIP4ConfigClass;
+</pre>
+<p>
+</p>
+</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="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="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>
+<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="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>
+</div>
+<div class="refsect1">
+<a name="NMSettingIP4Config.property-details"></a><h2>Property Details</h2>
+<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>* : 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>
+</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/html/NMSettingIP6Config.html b/docs/libnm/html/NMSettingIP6Config.html
new file mode 100644
index 000000000..c5640b40a
--- /dev/null
+++ b/docs/libnm/html/NMSettingIP6Config.html
@@ -0,0 +1,316 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMSettingIP6Config</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch03.html" title="Connection and Setting API Reference">
+<link rel="prev" href="NMSettingIP4Config.html" title="NMSettingIP4Config">
+<link rel="next" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh">
+<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="NMSettingIP4Config.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch03.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 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="#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>
+<td valign="top">
+<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 valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingIP6Config.synopsis"></a><h2>Synopsis</h2>
+<a name="NMSettingIP6ConfigPrivacy"></a><pre class="synopsis">#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>
+#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-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>;
+struct <a class="link" href="NMSettingIP6Config.html#NMSettingIP6Config-struct" title="struct 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>);
+<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
+ +----NMSettingIP6ConfigPrivacy
+</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>
+ +----<a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</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--ip6-privacy" title='The "ip6-privacy" property'>ip6-privacy</a>" <a class="link" href="NMSettingIP6Config.html#NMSettingIP6ConfigPrivacy"><span class="type">NMSettingIP6ConfigPrivacy</span></a> : Read / Write / Construct
+</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>
+<p>
+<a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> has few properties or methods of its own; it inherits
+almost everything from <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a>.
+</p>
+<p>
+NetworkManager supports 6 values for the <a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--method" title='The "method" property'><span class="type">"method"</span></a> property
+for IPv6. 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. Note: the "shared" method is not yet
+supported.
+</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="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-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 align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<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><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><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><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>
+<hr>
+<div class="refsect2">
+<a name="NMSettingIP6Config-struct"></a><h3>struct NMSettingIP6Config</h3>
+<pre class="programlisting">struct NMSettingIP6Config;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingIP6ConfigClass"></a><h3>NMSettingIP6ConfigClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingIPConfigClass parent;
+} NMSettingIP6ConfigClass;
+</pre>
+<p>
+</p>
+</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="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="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>
+<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><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>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 class="refsect1">
+<a name="NMSettingIP6Config.property-details"></a><h2>Property Details</h2>
+<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 class="link" href="NMSettingIP6Config.html#NMSettingIP6ConfigPrivacy"><span class="type">NMSettingIP6ConfigPrivacy</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>Default value: NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN</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/html/NMSettingIPConfig.html b/docs/libnm/html/NMSettingIPConfig.html
new file mode 100644
index 000000000..413c392a6
--- /dev/null
+++ b/docs/libnm/html/NMSettingIPConfig.html
@@ -0,0 +1,2580 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMSettingIPConfig</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch03.html" title="Connection and Setting API Reference">
+<link rel="prev" href="NMSettingInfiniband.html" title="NMSettingInfiniband">
+<link rel="next" href="NMSettingIP4Config.html" title="NMSettingIP4Config">
+<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="NMSettingInfiniband.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch03.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 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="#NMSettingIPConfig.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMSettingIPConfig.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMSettingIPConfig.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMSettingIPConfig.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="NMSettingIPConfig"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMSettingIPConfig.top_of_page"></a>NMSettingIPConfig</span></h2>
+<p>NMSettingIPConfig — Abstract base class for IPv4 and IPv6
+ addressing, routing, and name service properties</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingIPConfig.synopsis"></a><h2>Synopsis</h2>
+<a name="NMIPAddress"></a><a name="NMIPRoute"></a><pre class="synopsis">
+#include &lt;nm-setting-ip-config.h&gt;
+
+typedef <a class="link" href="NMSettingIPConfig.html#NMIPAddress">NMIPAddress</a>;
+<a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="returnvalue">NMIPAddress</span></a> * <a class="link" href="NMSettingIPConfig.html#nm-ip-address-new" title="nm_ip_address_new ()">nm_ip_address_new</a> (<em class="parameter"><code><span class="type">int</span> family</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *addr</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> prefix</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="NMSettingIPConfig.html#NMIPAddress"><span class="returnvalue">NMIPAddress</span></a> * <a class="link" href="NMSettingIPConfig.html#nm-ip-address-new-binary" title="nm_ip_address_new_binary ()">nm_ip_address_new_binary</a> (<em class="parameter"><code><span class="type">int</span> family</code></em>,
+ <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#guint"><span class="type">guint</span></a> prefix</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="NMSettingIPConfig.html#nm-ip-address-ref" title="nm_ip_address_ref ()">nm_ip_address_ref</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> *address</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIPConfig.html#nm-ip-address-unref" title="nm_ip_address_unref ()">nm_ip_address_unref</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</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="NMSettingIPConfig.html#nm-ip-address-equal" title="nm_ip_address_equal ()">nm_ip_address_equal</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> *address</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> *other</code></em>);
+<a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="returnvalue">NMIPAddress</span></a> * <a class="link" href="NMSettingIPConfig.html#nm-ip-address-dup" title="nm_ip_address_dup ()">nm_ip_address_dup</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> *address</code></em>);
+<span class="returnvalue">int</span> <a class="link" href="NMSettingIPConfig.html#nm-ip-address-get-family" title="nm_ip_address_get_family ()">nm_ip_address_get_family</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> *address</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingIPConfig.html#nm-ip-address-get-address" title="nm_ip_address_get_address ()">nm_ip_address_get_address</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> *address</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIPConfig.html#nm-ip-address-set-address" title="nm_ip_address_set_address ()">nm_ip_address_set_address</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> *address</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *addr</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIPConfig.html#nm-ip-address-get-address-binary" title="nm_ip_address_get_address_binary ()">nm_ip_address_get_address_binary</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> *address</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> addr</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIPConfig.html#nm-ip-address-set-address-binary" title="nm_ip_address_set_address_binary ()">nm_ip_address_set_address_binary</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> *address</code></em>,
+ <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>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> <a class="link" href="NMSettingIPConfig.html#nm-ip-address-get-prefix" title="nm_ip_address_get_prefix ()">nm_ip_address_get_prefix</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> *address</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIPConfig.html#nm-ip-address-set-prefix" title="nm_ip_address_set_prefix ()">nm_ip_address_set_prefix</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> *address</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> prefix</code></em>);
+<span class="returnvalue">char</span> ** <a class="link" href="NMSettingIPConfig.html#nm-ip-address-get-attribute-names" title="nm_ip_address_get_attribute_names ()">nm_ip_address_get_attribute_names</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> *address</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="returnvalue">GVariant</span></a> * <a class="link" href="NMSettingIPConfig.html#nm-ip-address-get-attribute" title="nm_ip_address_get_attribute ()">nm_ip_address_get_attribute</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> *address</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *name</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIPConfig.html#nm-ip-address-set-attribute" title="nm_ip_address_set_attribute ()">nm_ip_address_set_attribute</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> *address</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> *value</code></em>);
+typedef <a class="link" href="NMSettingIPConfig.html#NMIPRoute">NMIPRoute</a>;
+<a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="returnvalue">NMIPRoute</span></a> * <a class="link" href="NMSettingIPConfig.html#nm-ip-route-new" title="nm_ip_route_new ()">nm_ip_route_new</a> (<em class="parameter"><code><span class="type">int</span> family</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *dest</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> prefix</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *next_hop</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> metric</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="NMSettingIPConfig.html#NMIPRoute"><span class="returnvalue">NMIPRoute</span></a> * <a class="link" href="NMSettingIPConfig.html#nm-ip-route-new-binary" title="nm_ip_route_new_binary ()">nm_ip_route_new_binary</a> (<em class="parameter"><code><span class="type">int</span> family</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gconstpointer"><span class="type">gconstpointer</span></a> dest</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> prefix</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gconstpointer"><span class="type">gconstpointer</span></a> next_hop</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> metric</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="NMSettingIPConfig.html#nm-ip-route-ref" title="nm_ip_route_ref ()">nm_ip_route_ref</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIPConfig.html#nm-ip-route-unref" title="nm_ip_route_unref ()">nm_ip_route_unref</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</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="NMSettingIPConfig.html#nm-ip-route-equal" title="nm_ip_route_equal ()">nm_ip_route_equal</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *other</code></em>);
+<a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="returnvalue">NMIPRoute</span></a> * <a class="link" href="NMSettingIPConfig.html#nm-ip-route-dup" title="nm_ip_route_dup ()">nm_ip_route_dup</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</code></em>);
+<span class="returnvalue">int</span> <a class="link" href="NMSettingIPConfig.html#nm-ip-route-get-family" title="nm_ip_route_get_family ()">nm_ip_route_get_family</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingIPConfig.html#nm-ip-route-get-dest" title="nm_ip_route_get_dest ()">nm_ip_route_get_dest</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIPConfig.html#nm-ip-route-set-dest" title="nm_ip_route_set_dest ()">nm_ip_route_set_dest</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *dest</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIPConfig.html#nm-ip-route-get-dest-binary" title="nm_ip_route_get_dest_binary ()">nm_ip_route_get_dest_binary</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</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> dest</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIPConfig.html#nm-ip-route-set-dest-binary" title="nm_ip_route_set_dest_binary ()">nm_ip_route_set_dest_binary</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gconstpointer"><span class="type">gconstpointer</span></a> dest</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="NMSettingIPConfig.html#nm-ip-route-get-prefix" title="nm_ip_route_get_prefix ()">nm_ip_route_get_prefix</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIPConfig.html#nm-ip-route-set-prefix" title="nm_ip_route_set_prefix ()">nm_ip_route_set_prefix</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</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> prefix</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingIPConfig.html#nm-ip-route-get-next-hop" title="nm_ip_route_get_next_hop ()">nm_ip_route_get_next_hop</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIPConfig.html#nm-ip-route-set-next-hop" title="nm_ip_route_set_next_hop ()">nm_ip_route_set_next_hop</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *next_hop</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="NMSettingIPConfig.html#nm-ip-route-get-next-hop-binary" title="nm_ip_route_get_next_hop_binary ()">nm_ip_route_get_next_hop_binary</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</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> next_hop</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIPConfig.html#nm-ip-route-set-next-hop-binary" title="nm_ip_route_set_next_hop_binary ()">nm_ip_route_set_next_hop_binary</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gconstpointer"><span class="type">gconstpointer</span></a> next_hop</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="returnvalue">gint64</span></a> <a class="link" href="NMSettingIPConfig.html#nm-ip-route-get-metric" title="nm_ip_route_get_metric ()">nm_ip_route_get_metric</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIPConfig.html#nm-ip-route-set-metric" title="nm_ip_route_set_metric ()">nm_ip_route_set_metric</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> metric</code></em>);
+<span class="returnvalue">char</span> ** <a class="link" href="NMSettingIPConfig.html#nm-ip-route-get-attribute-names" title="nm_ip_route_get_attribute_names ()">nm_ip_route_get_attribute_names</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="returnvalue">GVariant</span></a> * <a class="link" href="NMSettingIPConfig.html#nm-ip-route-get-attribute" title="nm_ip_route_get_attribute ()">nm_ip_route_get_attribute</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *name</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIPConfig.html#nm-ip-route-set-attribute" title="nm_ip_route_set_attribute ()">nm_ip_route_set_attribute</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> *value</code></em>);
+#define <a class="link" href="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-METHOD:CAPS" title="NM_SETTING_IP_CONFIG_METHOD">NM_SETTING_IP_CONFIG_METHOD</a>
+#define <a class="link" href="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-DNS:CAPS" title="NM_SETTING_IP_CONFIG_DNS">NM_SETTING_IP_CONFIG_DNS</a>
+#define <a class="link" href="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-DNS-SEARCH:CAPS" title="NM_SETTING_IP_CONFIG_DNS_SEARCH">NM_SETTING_IP_CONFIG_DNS_SEARCH</a>
+#define <a class="link" href="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-ADDRESSES:CAPS" title="NM_SETTING_IP_CONFIG_ADDRESSES">NM_SETTING_IP_CONFIG_ADDRESSES</a>
+#define <a class="link" href="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-GATEWAY:CAPS" title="NM_SETTING_IP_CONFIG_GATEWAY">NM_SETTING_IP_CONFIG_GATEWAY</a>
+#define <a class="link" href="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-ROUTES:CAPS" title="NM_SETTING_IP_CONFIG_ROUTES">NM_SETTING_IP_CONFIG_ROUTES</a>
+#define <a class="link" href="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-ROUTE-METRIC:CAPS" title="NM_SETTING_IP_CONFIG_ROUTE_METRIC">NM_SETTING_IP_CONFIG_ROUTE_METRIC</a>
+#define <a class="link" href="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-IGNORE-AUTO-ROUTES:CAPS" title="NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES">NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES</a>
+#define <a class="link" href="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-IGNORE-AUTO-DNS:CAPS" title="NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS">NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS</a>
+#define <a class="link" href="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-DHCP-HOSTNAME:CAPS" title="NM_SETTING_IP_CONFIG_DHCP_HOSTNAME">NM_SETTING_IP_CONFIG_DHCP_HOSTNAME</a>
+#define <a class="link" href="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-DHCP-SEND-HOSTNAME:CAPS" title="NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME">NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME</a>
+#define <a class="link" href="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-NEVER-DEFAULT:CAPS" title="NM_SETTING_IP_CONFIG_NEVER_DEFAULT">NM_SETTING_IP_CONFIG_NEVER_DEFAULT</a>
+#define <a class="link" href="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-MAY-FAIL:CAPS" title="NM_SETTING_IP_CONFIG_MAY_FAIL">NM_SETTING_IP_CONFIG_MAY_FAIL</a>
+struct <a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig-struct" title="struct NMSettingIPConfig">NMSettingIPConfig</a>;
+ <a class="link" href="NMSettingIPConfig.html#NMSettingIPConfigClass" title="NMSettingIPConfigClass">NMSettingIPConfigClass</a>;
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-get-method" title="nm_setting_ip_config_get_method ()">nm_setting_ip_config_get_method</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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="NMSettingIPConfig.html#nm-setting-ip-config-get-num-dns" title="nm_setting_ip_config_get_num_dns ()">nm_setting_ip_config_get_num_dns</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-get-dns" title="nm_setting_ip_config_get_dns ()">nm_setting_ip_config_get_dns</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>,
+ <em class="parameter"><code><span class="type">int</span> 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="NMSettingIPConfig.html#nm-setting-ip-config-add-dns" title="nm_setting_ip_config_add_dns ()">nm_setting_ip_config_add_dns</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *dns</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-remove-dns" title="nm_setting_ip_config_remove_dns ()">nm_setting_ip_config_remove_dns</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>,
+ <em class="parameter"><code><span class="type">int</span> 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="NMSettingIPConfig.html#nm-setting-ip-config-remove-dns-by-value" title="nm_setting_ip_config_remove_dns_by_value ()">nm_setting_ip_config_remove_dns_by_value</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *dns</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-clear-dns" title="nm_setting_ip_config_clear_dns ()">nm_setting_ip_config_clear_dns</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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="NMSettingIPConfig.html#nm-setting-ip-config-get-num-dns-searches" title="nm_setting_ip_config_get_num_dns_searches ()">nm_setting_ip_config_get_num_dns_searches</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-get-dns-search" title="nm_setting_ip_config_get_dns_search ()">nm_setting_ip_config_get_dns_search</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>,
+ <em class="parameter"><code><span class="type">int</span> 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="NMSettingIPConfig.html#nm-setting-ip-config-add-dns-search" title="nm_setting_ip_config_add_dns_search ()">nm_setting_ip_config_add_dns_search</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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="NMSettingIPConfig.html#nm-setting-ip-config-remove-dns-search" title="nm_setting_ip_config_remove_dns_search ()">nm_setting_ip_config_remove_dns_search</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>,
+ <em class="parameter"><code><span class="type">int</span> 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="NMSettingIPConfig.html#nm-setting-ip-config-remove-dns-search-by-value" title="nm_setting_ip_config_remove_dns_search_by_value ()">nm_setting_ip_config_remove_dns_search_by_value</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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="NMSettingIPConfig.html#nm-setting-ip-config-clear-dns-searches" title="nm_setting_ip_config_clear_dns_searches ()">nm_setting_ip_config_clear_dns_searches</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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="NMSettingIPConfig.html#nm-setting-ip-config-get-num-addresses" title="nm_setting_ip_config_get_num_addresses ()">nm_setting_ip_config_get_num_addresses</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>);
+<a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="returnvalue">NMIPAddress</span></a> * <a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-get-address" title="nm_setting_ip_config_get_address ()">nm_setting_ip_config_get_address</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>,
+ <em class="parameter"><code><span class="type">int</span> 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="NMSettingIPConfig.html#nm-setting-ip-config-add-address" title="nm_setting_ip_config_add_address ()">nm_setting_ip_config_add_address</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> *address</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-remove-address" title="nm_setting_ip_config_remove_address ()">nm_setting_ip_config_remove_address</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>,
+ <em class="parameter"><code><span class="type">int</span> 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="NMSettingIPConfig.html#nm-setting-ip-config-remove-address-by-value" title="nm_setting_ip_config_remove_address_by_value ()">nm_setting_ip_config_remove_address_by_value</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> *address</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-clear-addresses" title="nm_setting_ip_config_clear_addresses ()">nm_setting_ip_config_clear_addresses</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-get-gateway" title="nm_setting_ip_config_get_gateway ()">nm_setting_ip_config_get_gateway</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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="NMSettingIPConfig.html#nm-setting-ip-config-get-num-routes" title="nm_setting_ip_config_get_num_routes ()">nm_setting_ip_config_get_num_routes</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>);
+<a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="returnvalue">NMIPRoute</span></a> * <a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-get-route" title="nm_setting_ip_config_get_route ()">nm_setting_ip_config_get_route</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>,
+ <em class="parameter"><code><span class="type">int</span> 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="NMSettingIPConfig.html#nm-setting-ip-config-add-route" title="nm_setting_ip_config_add_route ()">nm_setting_ip_config_add_route</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-remove-route" title="nm_setting_ip_config_remove_route ()">nm_setting_ip_config_remove_route</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>,
+ <em class="parameter"><code><span class="type">int</span> 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="NMSettingIPConfig.html#nm-setting-ip-config-remove-route-by-value" title="nm_setting_ip_config_remove_route_by_value ()">nm_setting_ip_config_remove_route_by_value</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-clear-routes" title="nm_setting_ip_config_clear_routes ()">nm_setting_ip_config_clear_routes</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="returnvalue">gint64</span></a> <a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-get-route-metric" title="nm_setting_ip_config_get_route_metric ()">nm_setting_ip_config_get_route_metric</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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="NMSettingIPConfig.html#nm-setting-ip-config-get-ignore-auto-routes" title="nm_setting_ip_config_get_ignore_auto_routes ()">nm_setting_ip_config_get_ignore_auto_routes</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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="NMSettingIPConfig.html#nm-setting-ip-config-get-ignore-auto-dns" title="nm_setting_ip_config_get_ignore_auto_dns ()">nm_setting_ip_config_get_ignore_auto_dns</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-get-dhcp-hostname" title="nm_setting_ip_config_get_dhcp_hostname ()">nm_setting_ip_config_get_dhcp_hostname</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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="NMSettingIPConfig.html#nm-setting-ip-config-get-dhcp-send-hostname" title="nm_setting_ip_config_get_dhcp_send_hostname ()">nm_setting_ip_config_get_dhcp_send_hostname</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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="NMSettingIPConfig.html#nm-setting-ip-config-get-never-default" title="nm_setting_ip_config_get_never_default ()">nm_setting_ip_config_get_never_default</a>
+ (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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="NMSettingIPConfig.html#nm-setting-ip-config-get-may-fail" title="nm_setting_ip_config_get_may_fail ()">nm_setting_ip_config_get_may_fail</a> (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingIPConfig.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ GBoxed
+ +----NMIPAddress
+</pre>
+<pre class="synopsis">
+ GBoxed
+ +----NMIPRoute
+</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>
+ +----NMSettingIPConfig
+ +----<a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+ +----<a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingIPConfig.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--addresses" title='The "addresses" property'>addresses</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>* : Read / Write
+ "<a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--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="NMSettingIPConfig.html#NMSettingIPConfig--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="NMSettingIPConfig.html#NMSettingIPConfig--dns" title='The "dns" property'>dns</a>" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : Read / Write
+ "<a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--dns-search" title='The "dns-search" property'>dns-search</a>" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : Read / Write
+ "<a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--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 / Write
+ "<a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--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="NMSettingIPConfig.html#NMSettingIPConfig--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="NMSettingIPConfig.html#NMSettingIPConfig--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="NMSettingIPConfig.html#NMSettingIPConfig--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="NMSettingIPConfig.html#NMSettingIPConfig--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="NMSettingIPConfig.html#NMSettingIPConfig--route-metric" title='The "route-metric" property'>route-metric</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> : Read / Write / Construct
+ "<a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--routes" title='The "routes" property'>routes</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>* : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingIPConfig.description"></a><h2>Description</h2>
+<p>
+<a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> is the abstract base class of
+<a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> and <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a>, providing properties
+related to IP addressing, routing, and Domain Name Service.
+</p>
+</div>
+<div class="refsect1">
+<a name="NMSettingIPConfig.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NMIPAddress"></a><h3>NMIPAddress</h3>
+<pre class="programlisting">typedef struct NMIPAddress NMIPAddress;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-ip-address-new"></a><h3>nm_ip_address_new ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="returnvalue">NMIPAddress</span></a> * nm_ip_address_new (<em class="parameter"><code><span class="type">int</span> family</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *addr</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> prefix</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="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</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"><em class="parameter"><code>family</code></em> :</span></p></td>
+<td>the IP address family (<code class="literal">AF_INET</code> or
+<code class="literal">AF_INET6</code>)</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>addr</code></em> :</span></p></td>
+<td>the IP address</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>prefix</code></em> :</span></p></td>
+<td>the address prefix length</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><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new <a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</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. <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-ip-address-new-binary"></a><h3>nm_ip_address_new_binary ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="returnvalue">NMIPAddress</span></a> * nm_ip_address_new_binary (<em class="parameter"><code><span class="type">int</span> family</code></em>,
+ <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#guint"><span class="type">guint</span></a> prefix</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="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> object. <em class="parameter"><code>addr</code></em> must point to a buffer of the
+correct size for <em class="parameter"><code>family</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>family</code></em> :</span></p></td>
+<td>the IP address family (<code class="literal">AF_INET</code> or
+<code class="literal">AF_INET6</code>)</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>addr</code></em> :</span></p></td>
+<td>the IP address</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>prefix</code></em> :</span></p></td>
+<td>the address prefix length</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><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new <a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</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. <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-ip-address-ref"></a><h3>nm_ip_address_ref ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip_address_ref (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</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 align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>address</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-ip-address-unref"></a><h3>nm_ip_address_unref ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip_address_unref (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</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 align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>address</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-ip-address-equal"></a><h3>nm_ip_address_equal ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_ip_address_equal (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> *address</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> *other</code></em>);</pre>
+<p>
+Determines if two <a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> objects contain the same address and prefix
+(attributes are not compared).
+</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>address</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</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="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</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>
+<hr>
+<div class="refsect2">
+<a name="nm-ip-address-dup"></a><h3>nm_ip_address_dup ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="returnvalue">NMIPAddress</span></a> * nm_ip_address_dup (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> *address</code></em>);</pre>
+<p>
+Creates a copy of <em class="parameter"><code>address</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>address</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a copy of <em class="parameter"><code>address</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>
+<hr>
+<div class="refsect2">
+<a name="nm-ip-address-get-family"></a><h3>nm_ip_address_get_family ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span> nm_ip_address_get_family (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> *address</code></em>);</pre>
+<p>
+Gets the IP address family (eg, AF_INET) property of this address
+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"><em class="parameter"><code>address</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the IP address family</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-ip-address-get-address"></a><h3>nm_ip_address_get_address ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_ip_address_get_address (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> *address</code></em>);</pre>
+<p>
+Gets the IP address property of this address 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"><em class="parameter"><code>address</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the IP address</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-ip-address-set-address"></a><h3>nm_ip_address_set_address ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip_address_set_address (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> *address</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *addr</code></em>);</pre>
+<p>
+Sets the IP address property of this address object.
+</p>
+<p>
+<em class="parameter"><code>addr</code></em> must be a valid address of <em class="parameter"><code>address</code></em>'s family. If you aren't sure you
+have a valid address, use <a class="link" href="libnm-nm-utils.html#nm-utils-ipaddr-valid" title="nm_utils_ipaddr_valid ()"><code class="function">nm_utils_ipaddr_valid()</code></a> to check it.
+</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>address</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>addr</code></em> :</span></p></td>
+<td>the IP address, as a string</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-ip-address-get-address-binary"></a><h3>nm_ip_address_get_address_binary ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip_address_get_address_binary (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> *address</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> addr</code></em>);</pre>
+<p>
+Gets the IP address property of this address object.
+</p>
+<p>
+<em class="parameter"><code>addr</code></em> must point to a buffer that is the correct size for <em class="parameter"><code>address</code></em>'s family.
+</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>address</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>addr</code></em> :</span></p></td>
+<td>a buffer in which to store the address in binary format.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-ip-address-set-address-binary"></a><h3>nm_ip_address_set_address_binary ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip_address_set_address_binary (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> *address</code></em>,
+ <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>);</pre>
+<p>
+Sets the IP address property of this address object.
+</p>
+<p>
+<em class="parameter"><code>addr</code></em> must point to a buffer that is the correct size for <em class="parameter"><code>address</code></em>'s family.
+</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>address</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>addr</code></em> :</span></p></td>
+<td>the address, in binary format</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-ip-address-get-prefix"></a><h3>nm_ip_address_get_prefix ()</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_ip_address_get_prefix (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> *address</code></em>);</pre>
+<p>
+Gets the IP address prefix (ie "24" or "30" etc) property of this address
+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"><em class="parameter"><code>address</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the IP address prefix</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-ip-address-set-prefix"></a><h3>nm_ip_address_set_prefix ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip_address_set_prefix (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> *address</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> prefix</code></em>);</pre>
+<p>
+Sets the IP address prefix property of this address 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"><em class="parameter"><code>address</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>prefix</code></em> :</span></p></td>
+<td>the IP address prefix</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-ip-address-get-attribute-names"></a><h3>nm_ip_address_get_attribute_names ()</h3>
+<pre class="programlisting"><span class="returnvalue">char</span> ** nm_ip_address_get_attribute_names (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> *address</code></em>);</pre>
+<p>
+Gets an array of attribute names defined on <em class="parameter"><code>address</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>address</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</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 attribute names,. <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-ip-address-get-attribute"></a><h3>nm_ip_address_get_attribute ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="returnvalue">GVariant</span></a> * nm_ip_address_get_attribute (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> *address</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *name</code></em>);</pre>
+<p>
+Gets the value of the attribute with name <em class="parameter"><code>name</code></em> on <em class="parameter"><code>address</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>address</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>the name of an address attribute</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the value of the attribute with name <em class="parameter"><code>name</code></em> on
+<em class="parameter"><code>address</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>address</code></em> has no such attribute. <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-ip-address-set-attribute"></a><h3>nm_ip_address_set_attribute ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip_address_set_attribute (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> *address</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> *value</code></em>);</pre>
+<p>
+Sets or clears the named attribute on <em class="parameter"><code>address</code></em> to the given 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>address</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>the name of an address attribute</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
+<td>the value. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMIPRoute"></a><h3>NMIPRoute</h3>
+<pre class="programlisting">typedef struct NMIPRoute NMIPRoute;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-ip-route-new"></a><h3>nm_ip_route_new ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="returnvalue">NMIPRoute</span></a> * nm_ip_route_new (<em class="parameter"><code><span class="type">int</span> family</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *dest</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> prefix</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *next_hop</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> metric</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="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</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"><em class="parameter"><code>family</code></em> :</span></p></td>
+<td>the IP address family (<code class="literal">AF_INET</code> or
+<code class="literal">AF_INET6</code>)</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dest</code></em> :</span></p></td>
+<td>the IP address of the route's destination</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>prefix</code></em> :</span></p></td>
+<td>the address prefix length</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>next_hop</code></em> :</span></p></td>
+<td>the IP address of the next hop (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"><em class="parameter"><code>metric</code></em> :</span></p></td>
+<td>the route metric (or -1 for "default")</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><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new <a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</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. <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-ip-route-new-binary"></a><h3>nm_ip_route_new_binary ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="returnvalue">NMIPRoute</span></a> * nm_ip_route_new_binary (<em class="parameter"><code><span class="type">int</span> family</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gconstpointer"><span class="type">gconstpointer</span></a> dest</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> prefix</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gconstpointer"><span class="type">gconstpointer</span></a> next_hop</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> metric</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="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> object. <em class="parameter"><code>dest</code></em> and <em class="parameter"><code>next_hop</code></em> (if non-<a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>) must
+point to buffers of the correct size for <em class="parameter"><code>family</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>family</code></em> :</span></p></td>
+<td>the IP address family (<code class="literal">AF_INET</code> or
+<code class="literal">AF_INET6</code>)</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dest</code></em> :</span></p></td>
+<td>the IP address of the route's destination</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>prefix</code></em> :</span></p></td>
+<td>the address prefix length</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>next_hop</code></em> :</span></p></td>
+<td>the IP address of the next hop (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"><em class="parameter"><code>metric</code></em> :</span></p></td>
+<td>the route metric (or -1 for "default")</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><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new <a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</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. <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-ip-route-ref"></a><h3>nm_ip_route_ref ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip_route_ref (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</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 align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-ip-route-unref"></a><h3>nm_ip_route_unref ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip_route_unref (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</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 align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-ip-route-equal"></a><h3>nm_ip_route_equal ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_ip_route_equal (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *other</code></em>);</pre>
+<p>
+Determines if two <a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> objects contain the same destination, prefix,
+next hop, and metric. (Attributes are not compared.)
+</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>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</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="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</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>
+<hr>
+<div class="refsect2">
+<a name="nm-ip-route-dup"></a><h3>nm_ip_route_dup ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="returnvalue">NMIPRoute</span></a> * nm_ip_route_dup (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</code></em>);</pre>
+<p>
+Creates a copy of <em class="parameter"><code>route</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>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a copy of <em class="parameter"><code>route</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>
+<hr>
+<div class="refsect2">
+<a name="nm-ip-route-get-family"></a><h3>nm_ip_route_get_family ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span> nm_ip_route_get_family (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</code></em>);</pre>
+<p>
+Gets the IP address family (eg, AF_INET) property of this route
+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"><em class="parameter"><code>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the IP address family</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-ip-route-get-dest"></a><h3>nm_ip_route_get_dest ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_ip_route_get_dest (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</code></em>);</pre>
+<p>
+Gets the IP destination address property of this route 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"><em class="parameter"><code>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the IP address of the route's destination</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-ip-route-set-dest"></a><h3>nm_ip_route_set_dest ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip_route_set_dest (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *dest</code></em>);</pre>
+<p>
+Sets the destination property of this route object.
+</p>
+<p>
+<em class="parameter"><code>dest</code></em> must be a valid address of <em class="parameter"><code>route</code></em>'s family. If you aren't sure you
+have a valid address, use <a class="link" href="libnm-nm-utils.html#nm-utils-ipaddr-valid" title="nm_utils_ipaddr_valid ()"><code class="function">nm_utils_ipaddr_valid()</code></a> to check it.
+</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>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dest</code></em> :</span></p></td>
+<td>the route's destination, as a string</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-ip-route-get-dest-binary"></a><h3>nm_ip_route_get_dest_binary ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip_route_get_dest_binary (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</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> dest</code></em>);</pre>
+<p>
+Gets the destination property of this route object.
+</p>
+<p>
+<em class="parameter"><code>dest</code></em> must point to a buffer that is the correct size for <em class="parameter"><code>route</code></em>'s family.
+</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>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dest</code></em> :</span></p></td>
+<td>a buffer in which to store the destination in binary format.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-ip-route-set-dest-binary"></a><h3>nm_ip_route_set_dest_binary ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip_route_set_dest_binary (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gconstpointer"><span class="type">gconstpointer</span></a> dest</code></em>);</pre>
+<p>
+Sets the destination property of this route object.
+</p>
+<p>
+<em class="parameter"><code>dest</code></em> must point to a buffer that is the correct size for <em class="parameter"><code>route</code></em>'s family.
+</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>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dest</code></em> :</span></p></td>
+<td>the route's destination, in binary format</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-ip-route-get-prefix"></a><h3>nm_ip_route_get_prefix ()</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_ip_route_get_prefix (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</code></em>);</pre>
+<p>
+Gets the IP prefix (ie "24" or "30" etc) of this route.
+</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>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the IP prefix</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-ip-route-set-prefix"></a><h3>nm_ip_route_set_prefix ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip_route_set_prefix (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</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> prefix</code></em>);</pre>
+<p>
+Sets the prefix property of this route 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"><em class="parameter"><code>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>prefix</code></em> :</span></p></td>
+<td>the route prefix</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-ip-route-get-next-hop"></a><h3>nm_ip_route_get_next_hop ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_ip_route_get_next_hop (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</code></em>);</pre>
+<p>
+Gets the IP address of the next hop of this route; this will be <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if the
+route has no next hop.
+</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>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the IP address of the next hop, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if this is a device route.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-ip-route-set-next-hop"></a><h3>nm_ip_route_set_next_hop ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip_route_set_next_hop (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *next_hop</code></em>);</pre>
+<p>
+Sets the next-hop property of this route object.
+</p>
+<p>
+<em class="parameter"><code>next_hop</code></em> (if non-<a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>) must be a valid address of <em class="parameter"><code>route</code></em>'s family. If you
+aren't sure you have a valid address, use <a class="link" href="libnm-nm-utils.html#nm-utils-ipaddr-valid" title="nm_utils_ipaddr_valid ()"><code class="function">nm_utils_ipaddr_valid()</code></a> to check
+it.
+</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>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>next_hop</code></em> :</span></p></td>
+<td>the route's next hop, as a 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>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-ip-route-get-next-hop-binary"></a><h3>nm_ip_route_get_next_hop_binary ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> nm_ip_route_get_next_hop_binary (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</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> next_hop</code></em>);</pre>
+<p>
+Gets the next hop property of this route object.
+</p>
+<p>
+<em class="parameter"><code>next_hop</code></em> must point to a buffer that is the correct size for <em class="parameter"><code>route</code></em>'s family.
+</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>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>next_hop</code></em> :</span></p></td>
+<td>a buffer in which to store the next hop in binary format.</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>route</code></em> has a next hop, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not (in which case
+<em class="parameter"><code>next_hop</code></em> will be zeroed out)</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-ip-route-set-next-hop-binary"></a><h3>nm_ip_route_set_next_hop_binary ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip_route_set_next_hop_binary (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gconstpointer"><span class="type">gconstpointer</span></a> next_hop</code></em>);</pre>
+<p>
+Sets the destination property of this route object.
+</p>
+<p>
+<em class="parameter"><code>next_hop</code></em> (if non-<a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>) must point to a buffer that is the correct size for
+<em class="parameter"><code>route</code></em>'s family.
+</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>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>next_hop</code></em> :</span></p></td>
+<td>the route's next hop, in binary format</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-ip-route-get-metric"></a><h3>nm_ip_route_get_metric ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="returnvalue">gint64</span></a> nm_ip_route_get_metric (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</code></em>);</pre>
+<p>
+Gets the route metric property of this route object; lower values
+indicate "better" or more preferred routes; -1 indicates "default"
+(meaning NetworkManager will set it appropriately).
+</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>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</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>
+<hr>
+<div class="refsect2">
+<a name="nm-ip-route-set-metric"></a><h3>nm_ip_route_set_metric ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip_route_set_metric (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> metric</code></em>);</pre>
+<p>
+Sets the metric property of this route 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"><em class="parameter"><code>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>metric</code></em> :</span></p></td>
+<td>the route metric (or -1 for "default")</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-ip-route-get-attribute-names"></a><h3>nm_ip_route_get_attribute_names ()</h3>
+<pre class="programlisting"><span class="returnvalue">char</span> ** nm_ip_route_get_attribute_names (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</code></em>);</pre>
+<p>
+Gets an array of attribute names defined on <em class="parameter"><code>route</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>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</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 attribute names. <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-ip-route-get-attribute"></a><h3>nm_ip_route_get_attribute ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="returnvalue">GVariant</span></a> * nm_ip_route_get_attribute (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *name</code></em>);</pre>
+<p>
+Gets the value of the attribute with name <em class="parameter"><code>name</code></em> on <em class="parameter"><code>route</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>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>the name of an route attribute</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the value of the attribute with name <em class="parameter"><code>name</code></em> on
+<em class="parameter"><code>route</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>route</code></em> has no such attribute. <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-ip-route-set-attribute"></a><h3>nm_ip_route_set_attribute ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_ip_route_set_attribute (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> *value</code></em>);</pre>
+<p>
+Sets the named attribute on <em class="parameter"><code>route</code></em> to the given 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>route</code></em> :</span></p></td>
+<td>the <a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>the name of a route attribute</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
+<td>the value. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP-CONFIG-METHOD:CAPS"></a><h3>NM_SETTING_IP_CONFIG_METHOD</h3>
+<pre class="programlisting">#define NM_SETTING_IP_CONFIG_METHOD "method"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP-CONFIG-DNS:CAPS"></a><h3>NM_SETTING_IP_CONFIG_DNS</h3>
+<pre class="programlisting">#define NM_SETTING_IP_CONFIG_DNS "dns"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP-CONFIG-DNS-SEARCH:CAPS"></a><h3>NM_SETTING_IP_CONFIG_DNS_SEARCH</h3>
+<pre class="programlisting">#define NM_SETTING_IP_CONFIG_DNS_SEARCH "dns-search"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP-CONFIG-ADDRESSES:CAPS"></a><h3>NM_SETTING_IP_CONFIG_ADDRESSES</h3>
+<pre class="programlisting">#define NM_SETTING_IP_CONFIG_ADDRESSES "addresses"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP-CONFIG-GATEWAY:CAPS"></a><h3>NM_SETTING_IP_CONFIG_GATEWAY</h3>
+<pre class="programlisting">#define NM_SETTING_IP_CONFIG_GATEWAY "gateway"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP-CONFIG-ROUTES:CAPS"></a><h3>NM_SETTING_IP_CONFIG_ROUTES</h3>
+<pre class="programlisting">#define NM_SETTING_IP_CONFIG_ROUTES "routes"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP-CONFIG-ROUTE-METRIC:CAPS"></a><h3>NM_SETTING_IP_CONFIG_ROUTE_METRIC</h3>
+<pre class="programlisting">#define NM_SETTING_IP_CONFIG_ROUTE_METRIC "route-metric"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP-CONFIG-IGNORE-AUTO-ROUTES:CAPS"></a><h3>NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES</h3>
+<pre class="programlisting">#define NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES "ignore-auto-routes"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP-CONFIG-IGNORE-AUTO-DNS:CAPS"></a><h3>NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS</h3>
+<pre class="programlisting">#define NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS "ignore-auto-dns"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP-CONFIG-DHCP-HOSTNAME:CAPS"></a><h3>NM_SETTING_IP_CONFIG_DHCP_HOSTNAME</h3>
+<pre class="programlisting">#define NM_SETTING_IP_CONFIG_DHCP_HOSTNAME "dhcp-hostname"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP-CONFIG-DHCP-SEND-HOSTNAME:CAPS"></a><h3>NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME</h3>
+<pre class="programlisting">#define NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME "dhcp-send-hostname"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP-CONFIG-NEVER-DEFAULT:CAPS"></a><h3>NM_SETTING_IP_CONFIG_NEVER_DEFAULT</h3>
+<pre class="programlisting">#define NM_SETTING_IP_CONFIG_NEVER_DEFAULT "never-default"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-IP-CONFIG-MAY-FAIL:CAPS"></a><h3>NM_SETTING_IP_CONFIG_MAY_FAIL</h3>
+<pre class="programlisting">#define NM_SETTING_IP_CONFIG_MAY_FAIL "may-fail"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingIPConfig-struct"></a><h3>struct NMSettingIPConfig</h3>
+<pre class="programlisting">struct NMSettingIPConfig;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingIPConfigClass"></a><h3>NMSettingIPConfigClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+
+ /* Padding for future expansion */
+ gpointer padding[8];
+} NMSettingIPConfigClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ip-config-get-method"></a><h3>nm_setting_ip_config_get_method ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_ip_config_get_method (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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="NMSettingIPConfig.html#NMSettingIPConfig--method" title='The "method" property'><span class="type">"method"</span></a> property of the setting; see
+<a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> and <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> for details of the
+methods available with each type.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ip-config-get-num-dns"></a><h3>nm_setting_ip_config_get_num_dns ()</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_ip_config_get_num_dns (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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 servers</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ip-config-get-dns"></a><h3>nm_setting_ip_config_get_dns ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_ip_config_get_dns (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>,
+ <em class="parameter"><code><span class="type">int</span> i</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="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the IP address of the DNS server at index <em class="parameter"><code>i</code></em>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ip-config-add-dns"></a><h3>nm_setting_ip_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_ip_config_add_dns (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</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 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="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dns</code></em> :</span></p></td>
+<td>the IP address of the DNS server 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 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>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ip-config-remove-dns"></a><h3>nm_setting_ip_config_remove_dns ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_ip_config_remove_dns (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>,
+ <em class="parameter"><code><span class="type">int</span> 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 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="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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 remove</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ip-config-remove-dns-by-value"></a><h3>nm_setting_ip_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_ip_config_remove_dns_by_value
+ (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *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 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="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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><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>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ip-config-clear-dns"></a><h3>nm_setting_ip_config_clear_dns ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_ip_config_clear_dns (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>);</pre>
+<p>
+Removes all configured DNS servers.
+</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="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ip-config-get-num-dns-searches"></a><h3>nm_setting_ip_config_get_num_dns_searches ()</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_ip_config_get_num_dns_searches
+ (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ip-config-get-dns-search"></a><h3>nm_setting_ip_config_get_dns_search ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_ip_config_get_dns_search (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>,
+ <em class="parameter"><code><span class="type">int</span> i</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="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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><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>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ip-config-add-dns-search"></a><h3>nm_setting_ip_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_ip_config_add_dns_search (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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 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="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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-ip-config-remove-dns-search"></a><h3>nm_setting_ip_config_remove_dns_search ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_ip_config_remove_dns_search
+ (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>,
+ <em class="parameter"><code><span class="type">int</span> 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 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="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ip-config-remove-dns-search-by-value"></a><h3>nm_setting_ip_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_ip_config_remove_dns_search_by_value
+ (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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 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="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ip-config-clear-dns-searches"></a><h3>nm_setting_ip_config_clear_dns_searches ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_ip_config_clear_dns_searches
+ (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>);</pre>
+<p>
+Removes all configured DNS search domains.
+</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="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ip-config-get-num-addresses"></a><h3>nm_setting_ip_config_get_num_addresses ()</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_ip_config_get_num_addresses
+ (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ip-config-get-address"></a><h3>nm_setting_ip_config_get_address ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="returnvalue">NMIPAddress</span></a> * nm_setting_ip_config_get_address (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>,
+ <em class="parameter"><code><span class="type">int</span> i</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="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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 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>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ip-config-add-address"></a><h3>nm_setting_ip_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_ip_config_add_address (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> *address</code></em>);</pre>
+<p>
+Adds a new IP 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 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="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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><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>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ip-config-remove-address"></a><h3>nm_setting_ip_config_remove_address ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_ip_config_remove_address (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>,
+ <em class="parameter"><code><span class="type">int</span> 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 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="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ip-config-remove-address-by-value"></a><h3>nm_setting_ip_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_ip_config_remove_address_by_value
+ (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</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 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="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ip-config-clear-addresses"></a><h3>nm_setting_ip_config_clear_addresses ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_ip_config_clear_addresses
+ (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>);</pre>
+<p>
+Removes all configured addresses.
+</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="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ip-config-get-gateway"></a><h3>nm_setting_ip_config_get_gateway ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_ip_config_get_gateway (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the IP address of the gateway associated with this configuration, 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>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ip-config-get-num-routes"></a><h3>nm_setting_ip_config_get_num_routes ()</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_ip_config_get_num_routes (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ip-config-get-route"></a><h3>nm_setting_ip_config_get_route ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="returnvalue">NMIPRoute</span></a> * nm_setting_ip_config_get_route (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>,
+ <em class="parameter"><code><span class="type">int</span> i</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="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ip-config-add-route"></a><h3>nm_setting_ip_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_ip_config_add_route (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> *route</code></em>);</pre>
+<p>
+Adds a new 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 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="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ip-config-remove-route"></a><h3>nm_setting_ip_config_remove_route ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_ip_config_remove_route (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>,
+ <em class="parameter"><code><span class="type">int</span> 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 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="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ip-config-remove-route-by-value"></a><h3>nm_setting_ip_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_ip_config_remove_route_by_value
+ (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>,
+ <em class="parameter"><code><a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</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 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="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ip-config-clear-routes"></a><h3>nm_setting_ip_config_clear_routes ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_setting_ip_config_clear_routes (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ip-config-get-route-metric"></a><h3>nm_setting_ip_config_get_route_metric ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="returnvalue">gint64</span></a> nm_setting_ip_config_get_route_metric
+ (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>);</pre>
+<p>
+Returns the value contained in the <a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--route-metric" title='The "route-metric" property'><span class="type">"route-metric"</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="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the route metric that is used for routes that don't explicitly
+specify a metric. See <a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--route-metric" title='The "route-metric" property'><span class="type">"route-metric"</span></a> for more details.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ip-config-get-ignore-auto-routes"></a><h3>nm_setting_ip_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_ip_config_get_ignore_auto_routes
+ (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>);</pre>
+<p>
+Returns the value contained in the <a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--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="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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-ip-config-get-ignore-auto-dns"></a><h3>nm_setting_ip_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_ip_config_get_ignore_auto_dns
+ (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>);</pre>
+<p>
+Returns the value contained in the <a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--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="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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) DNS information
+should be ignored.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ip-config-get-dhcp-hostname"></a><h3>nm_setting_ip_config_get_dhcp_hostname ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_ip_config_get_dhcp_hostname
+ (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>);</pre>
+<p>
+Returns the value contained in the <a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--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="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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-ip-config-get-dhcp-send-hostname"></a><h3>nm_setting_ip_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_ip_config_get_dhcp_send_hostname
+ (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>);</pre>
+<p>
+Returns the value contained in the <a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--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="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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-ip-config-get-never-default"></a><h3>nm_setting_ip_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_ip_config_get_never_default
+ (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>);</pre>
+<p>
+Returns the value contained in the <a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--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="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-ip-config-get-may-fail"></a><h3>nm_setting_ip_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_ip_config_get_may_fail (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>);</pre>
+<p>
+Returns the value contained in the <a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--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="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</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 this type of IP
+addressing to complete for the connection to succeed.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="refsect1">
+<a name="NMSettingIPConfig.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="NMSettingIPConfig--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-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>* : Read / Write</pre>
+<p>
+Array of IP addresses.
+</p>
+<p>
+Element-Type: NMIPAddress
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingIPConfig--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="NMSettingIPConfig.html#NMSettingIPConfig--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="NMSettingIPConfig--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="NMSettingIPConfig.html#NMSettingIPConfig--dhcp-hostname" title='The "dhcp-hostname" property'><span class="type">"dhcp-hostname"</span></a> property is <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> 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="NMSettingIPConfig--dns"></a><h3>The <code class="literal">"dns"</code> property</h3>
+<pre class="programlisting"> "dns" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : Read / Write</pre>
+<p>
+Array of IP addresses of DNS servers.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingIPConfig--dns-search"></a><h3>The <code class="literal">"dns-search"</code> property</h3>
+<pre class="programlisting"> "dns-search" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : Read / Write</pre>
+<p>
+Array of DNS search domains.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingIPConfig--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 / Write</pre>
+<p>
+The gateway associated with this configuration. This is only meaningful
+if <a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--addresses" title='The "addresses" property'><span class="type">"addresses"</span></a> is also set.
+</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingIPConfig--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 <a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--method" title='The "method" property'><span class="type">"method"</span></a> 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="NMSettingIPConfig.html#NMSettingIPConfig--dns" title='The "dns" property'><span class="type">"dns"</span></a> and <a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--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="NMSettingIPConfig--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 <a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--method" title='The "method" property'><span class="type">"method"</span></a> 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="NMSettingIPConfig.html#NMSettingIPConfig--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="NMSettingIPConfig--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 the
+configuration specified by this property 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> on the <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></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="NMSettingIPConfig--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>
+IP configuration method.
+</p>
+<p>
+<a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> and <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> both support "auto",
+"manual", and "link-local". See the subclass-specific documentation for
+other values.
+</p>
+<p>
+In general, for the "auto" method, properties such as
+<a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--dns" title='The "dns" property'><span class="type">"dns"</span></a> and <a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--routes" title='The "routes" property'><span class="type">"routes"</span></a> specify information
+that is added on to the information returned from automatic
+configuration. The <a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--ignore-auto-routes" title='The "ignore-auto-routes" property'><span class="type">"ignore-auto-routes"</span></a> and
+<a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--ignore-auto-dns" title='The "ignore-auto-dns" property'><span class="type">"ignore-auto-dns"</span></a> properties modify this behavior.
+</p>
+<p>
+For methods that imply no upstream network, such as "shared" or
+"link-local", these properties must be empty.
+</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingIPConfig--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 connection for this
+IP type, meaning it will never be assigned the default route by
+NetworkManager.
+</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingIPConfig--route-metric"></a><h3>The <code class="literal">"route-metric"</code> property</h3>
+<pre class="programlisting"> "route-metric" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> : Read / Write / Construct</pre>
+<p>
+The default metric for routes that don't explicitly specify a metric.
+The default value -1 means that the metric is choosen automatically
+based on the device type.
+The metric applies to dynamic routes, manual (static) routes that
+don't have an explicit metric setting, address prefix routes, and
+the default route.
+Note that for IPv6, the kernel accepts zero (0) but coerces it to
+1024 (user default). Hence, setting this property to zero effectively
+mean setting it to 1024.
+For IPv4, zero is a regular value for the metric.
+</p>
+<p>Allowed values: [-1,4294967295]</p>
+<p>Default value: -1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingIPConfig--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-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>* : Read / Write</pre>
+<p>
+Array of IP routes.
+</p>
+<p>
+Element-Type: NMIPRoute
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="NMSettingIPConfig.see-also"></a><h2>See Also</h2>
+<a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a>, <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a>
+</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/html/NMSettingInfiniband.html b/docs/libnm/html/NMSettingInfiniband.html
new file mode 100644
index 000000000..42a8063c9
--- /dev/null
+++ b/docs/libnm/html/NMSettingInfiniband.html
@@ -0,0 +1,391 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMSettingInfiniband</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch03.html" title="Connection and Setting API Reference">
+<link rel="prev" href="NMSettingGsm.html" title="NMSettingGsm">
+<link rel="next" href="NMSettingIPConfig.html" title="NMSettingIPConfig">
+<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="NMSettingGsm.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch03.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 Reference Manual</th>
+<td><a accesskey="n" href="NMSettingIPConfig.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>
+<td valign="top">
+<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 valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingInfiniband.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#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>
+#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>
+struct <a class="link" href="NMSettingInfiniband.html#NMSettingInfiniband-struct" title="struct 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 <span class="returnvalue">char</span> * <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>);
+const <span class="returnvalue">char</span> * <a class="link" href="NMSettingInfiniband.html#nm-setting-infiniband-get-virtual-interface-name" title="nm_setting_infiniband_get_virtual_interface_name ()">nm_setting_infiniband_get_virtual_interface_name</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">
+ <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>" <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="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.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="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>
+<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>
+<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>
+<hr>
+<div class="refsect2">
+<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="NMSettingInfiniband-struct"></a><h3>struct NMSettingInfiniband</h3>
+<pre class="programlisting">struct NMSettingInfiniband;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingInfinibandClass"></a><h3>NMSettingInfinibandClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+} NMSettingInfinibandClass;
+</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="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="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>
+<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 <span class="returnvalue">char</span> * 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 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 <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>
+<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="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 <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>
+<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="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="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 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 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><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 parent interface name</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-infiniband-get-virtual-interface-name"></a><h3>nm_setting_infiniband_get_virtual_interface_name ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_setting_infiniband_get_virtual_interface_name
+ (<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 interface name created by combining <a class="link" href="NMSettingInfiniband.html#NMSettingInfiniband--parent" title='The "parent" property'><span class="type">"parent"</span></a>
+and <a class="link" href="NMSettingInfiniband.html#NMSettingInfiniband--p-key" title='The "p-key" property'><span class="type">"p-key"</span></a>. (If either property is unset, 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 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 interface name, 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>
+<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" <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, 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>Default value: NULL</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> : 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="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="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>
+<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>* : 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.19</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/libnm/html/NMSettingOlpcMesh.html b/docs/libnm/html/NMSettingOlpcMesh.html
new file mode 100644
index 000000000..0c3eb7bb5
--- /dev/null
+++ b/docs/libnm/html/NMSettingOlpcMesh.html
@@ -0,0 +1,213 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMSettingOlpcMesh</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch03.html" title="Connection and Setting API Reference">
+<link rel="prev" href="NMSettingIP6Config.html" title="NMSettingIP6Config">
+<link rel="next" href="NMSettingPpp.html" title="NMSettingPpp">
+<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="NMSettingIP6Config.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch03.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 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="#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>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMSettingOlpcMesh.top_of_page"></a>NMSettingOlpcMesh</span></h2>
+<p>NMSettingOlpcMesh</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingOlpcMesh.synopsis"></a><h2>Synopsis</h2>
+<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>
+#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>
+struct <a class="link" href="NMSettingOlpcMesh.html#NMSettingOlpcMesh-struct" title="struct 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>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="returnvalue">GBytes</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 <span class="returnvalue">char</span> * <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.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="NMSetting.html" title="NMSetting">NMSetting</a>
+ +----NMSettingOlpcMesh
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingOlpcMesh.properties"></a><h2>Properties</h2>
+<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>" <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="NMSettingOlpcMesh.html#NMSettingOlpcMesh--ssid" title='The "ssid" property'>ssid</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="type">GBytes</span></a>* : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<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="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-CHANNEL:CAPS"></a><h3>NM_SETTING_OLPC_MESH_CHANNEL</h3>
+<pre class="programlisting">#define NM_SETTING_OLPC_MESH_CHANNEL "channel"
+</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>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingOlpcMesh-struct"></a><h3>struct NMSettingOlpcMesh</h3>
+<pre class="programlisting">struct NMSettingOlpcMesh;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingOlpcMeshClass"></a><h3>NMSettingOlpcMeshClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+} NMSettingOlpcMeshClass;
+</pre>
+<p>
+</p>
+</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="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="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh"><span class="type">NMSettingOlpcMesh</span></a> object</td>
+</tr></tbody>
+</table></div>
+</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"><a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="returnvalue">GBytes</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>
+<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>. <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-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-get-dhcp-anycast-address"></a><h3>nm_setting_olpc_mesh_get_dhcp_anycast_address ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * 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>
+</div>
+<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> : 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" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : 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>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingOlpcMesh--ssid"></a><h3>The <code class="literal">"ssid"</code> property</h3>
+<pre class="programlisting"> "ssid" <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="type">GBytes</span></a>* : Read / Write</pre>
+<p>
+SSID of the mesh network to join.
+</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/html/NMSettingPpp.html b/docs/libnm/html/NMSettingPpp.html
new file mode 100644
index 000000000..d17528617
--- /dev/null
+++ b/docs/libnm/html/NMSettingPpp.html
@@ -0,0 +1,905 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMSettingPpp</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch03.html" title="Connection and Setting API Reference">
+<link rel="prev" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh">
+<link rel="next" href="NMSettingPppoe.html" title="NMSettingPppoe">
+<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="NMSettingOlpcMesh.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch03.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 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>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMSettingPpp.top_of_page"></a>NMSettingPpp</span></h2>
+<p>NMSettingPpp — Describes connection properties for devices/networks
+that require PPP to deliver IP capability</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingPpp.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#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>
+#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>
+struct <a class="link" href="NMSettingPpp.html#NMSettingPpp-struct" title="struct 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="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.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
+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.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"
+</pre>
+<p>
+</p>
+</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>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-PPP-REFUSE-EAP:CAPS"></a><h3>NM_SETTING_PPP_REFUSE_EAP</h3>
+<pre class="programlisting">#define NM_SETTING_PPP_REFUSE_EAP "refuse-eap"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-PPP-REFUSE-PAP:CAPS"></a><h3>NM_SETTING_PPP_REFUSE_PAP</h3>
+<pre class="programlisting">#define NM_SETTING_PPP_REFUSE_PAP "refuse-pap"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-PPP-REFUSE-CHAP:CAPS"></a><h3>NM_SETTING_PPP_REFUSE_CHAP</h3>
+<pre class="programlisting">#define NM_SETTING_PPP_REFUSE_CHAP "refuse-chap"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-PPP-REFUSE-MSCHAP:CAPS"></a><h3>NM_SETTING_PPP_REFUSE_MSCHAP</h3>
+<pre class="programlisting">#define NM_SETTING_PPP_REFUSE_MSCHAP "refuse-mschap"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-PPP-REFUSE-MSCHAPV2:CAPS"></a><h3>NM_SETTING_PPP_REFUSE_MSCHAPV2</h3>
+<pre class="programlisting">#define NM_SETTING_PPP_REFUSE_MSCHAPV2 "refuse-mschapv2"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-PPP-NOBSDCOMP:CAPS"></a><h3>NM_SETTING_PPP_NOBSDCOMP</h3>
+<pre class="programlisting">#define NM_SETTING_PPP_NOBSDCOMP "nobsdcomp"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-PPP-NODEFLATE:CAPS"></a><h3>NM_SETTING_PPP_NODEFLATE</h3>
+<pre class="programlisting">#define NM_SETTING_PPP_NODEFLATE "nodeflate"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-PPP-NO-VJ-COMP:CAPS"></a><h3>NM_SETTING_PPP_NO_VJ_COMP</h3>
+<pre class="programlisting">#define NM_SETTING_PPP_NO_VJ_COMP "no-vj-comp"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-PPP-REQUIRE-MPPE:CAPS"></a><h3>NM_SETTING_PPP_REQUIRE_MPPE</h3>
+<pre class="programlisting">#define NM_SETTING_PPP_REQUIRE_MPPE "require-mppe"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-PPP-REQUIRE-MPPE-128:CAPS"></a><h3>NM_SETTING_PPP_REQUIRE_MPPE_128</h3>
+<pre class="programlisting">#define NM_SETTING_PPP_REQUIRE_MPPE_128 "require-mppe-128"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-PPP-MPPE-STATEFUL:CAPS"></a><h3>NM_SETTING_PPP_MPPE_STATEFUL</h3>
+<pre class="programlisting">#define NM_SETTING_PPP_MPPE_STATEFUL "mppe-stateful"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-PPP-CRTSCTS:CAPS"></a><h3>NM_SETTING_PPP_CRTSCTS</h3>
+<pre class="programlisting">#define NM_SETTING_PPP_CRTSCTS "crtscts"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-PPP-BAUD:CAPS"></a><h3>NM_SETTING_PPP_BAUD</h3>
+<pre class="programlisting">#define NM_SETTING_PPP_BAUD "baud"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-PPP-MRU:CAPS"></a><h3>NM_SETTING_PPP_MRU</h3>
+<pre class="programlisting">#define NM_SETTING_PPP_MRU "mru"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-PPP-MTU:CAPS"></a><h3>NM_SETTING_PPP_MTU</h3>
+<pre class="programlisting">#define NM_SETTING_PPP_MTU "mtu"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-PPP-LCP-ECHO-FAILURE:CAPS"></a><h3>NM_SETTING_PPP_LCP_ECHO_FAILURE</h3>
+<pre class="programlisting">#define NM_SETTING_PPP_LCP_ECHO_FAILURE "lcp-echo-failure"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-PPP-LCP-ECHO-INTERVAL:CAPS"></a><h3>NM_SETTING_PPP_LCP_ECHO_INTERVAL</h3>
+<pre class="programlisting">#define NM_SETTING_PPP_LCP_ECHO_INTERVAL "lcp-echo-interval"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingPpp-struct"></a><h3>struct NMSettingPpp</h3>
+<pre class="programlisting">struct NMSettingPpp;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingPppClass"></a><h3>NMSettingPppClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+} 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> : 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> : 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> : 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> : 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> : 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> : 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> : 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> : 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> : 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> : 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> : 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> : 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> : 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> : 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> : 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> : 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> : 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> : 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.19</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/libnm/html/NMSettingPppoe.html b/docs/libnm/html/NMSettingPppoe.html
new file mode 100644
index 000000000..583028d37
--- /dev/null
+++ b/docs/libnm/html/NMSettingPppoe.html
@@ -0,0 +1,297 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMSettingPppoe</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch03.html" title="Connection and Setting API Reference">
+<link rel="prev" href="NMSettingPpp.html" title="NMSettingPpp">
+<link rel="next" href="NMSettingSerial.html" title="NMSettingSerial">
+<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="NMSettingPpp.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch03.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 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="#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>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMSettingPppoe.top_of_page"></a>NMSettingPppoe</span></h2>
+<p>NMSettingPppoe — Describes PPPoE connection properties</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingPppoe.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#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>
+#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>
+struct <a class="link" href="NMSettingPppoe.html#NMSettingPppoe-struct" title="struct 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="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.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 class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</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
+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.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"
+</pre>
+<p>
+</p>
+</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>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-PPPOE-USERNAME:CAPS"></a><h3>NM_SETTING_PPPOE_USERNAME</h3>
+<pre class="programlisting">#define NM_SETTING_PPPOE_USERNAME "username"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-PPPOE-PASSWORD:CAPS"></a><h3>NM_SETTING_PPPOE_PASSWORD</h3>
+<pre class="programlisting">#define NM_SETTING_PPPOE_PASSWORD "password"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-PPPOE-PASSWORD-FLAGS:CAPS"></a><h3>NM_SETTING_PPPOE_PASSWORD_FLAGS</h3>
+<pre class="programlisting">#define NM_SETTING_PPPOE_PASSWORD_FLAGS "password-flags"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingPppoe-struct"></a><h3>struct NMSettingPppoe</h3>
+<pre class="programlisting">struct NMSettingPppoe;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingPppoeClass"></a><h3>NMSettingPppoeClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+} 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>* : 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 class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</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>
+</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>* : 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>* : 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.19</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/libnm/html/NMSettingSerial.html b/docs/libnm/html/NMSettingSerial.html
new file mode 100644
index 000000000..65971e1c2
--- /dev/null
+++ b/docs/libnm/html/NMSettingSerial.html
@@ -0,0 +1,381 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMSettingSerial</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch03.html" title="Connection and Setting API Reference">
+<link rel="prev" href="NMSettingPppoe.html" title="NMSettingPppoe">
+<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="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="ch03.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 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="#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>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMSettingSerial.top_of_page"></a>NMSettingSerial</span></h2>
+<p>NMSettingSerial — Describes connection properties for devices that use
+serial communications</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingSerial.synopsis"></a><h2>Synopsis</h2>
+<a name="NMSettingSerialParity"></a><pre class="synopsis">#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#NMSettingSerialParity-enum" title="enum NMSettingSerialParity">NMSettingSerialParity</a>;
+#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>
+struct <a class="link" href="NMSettingSerial.html#NMSettingSerial-struct" title="struct 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>);
+<a class="link" href="NMSettingSerial.html#NMSettingSerialParity"><span class="returnvalue">NMSettingSerialParity</span></a> <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="synopsis">
+ GEnum
+ +----NMSettingSerialParity
+</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.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 class="link" href="NMSettingSerial.html#NMSettingSerialParity"><span class="type">NMSettingSerialParity</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
+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.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"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingSerialParity-enum"></a><h3>enum NMSettingSerialParity</h3>
+<pre class="programlisting">typedef enum {
+ NM_SETTING_SERIAL_PARITY_NONE = 0,
+ NM_SETTING_SERIAL_PARITY_EVEN,
+ NM_SETTING_SERIAL_PARITY_ODD
+} NMSettingSerialParity;
+</pre>
+<p>
+The parity setting of a serial port.
+</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-SERIAL-PARITY-NONE:CAPS"></a><span class="term"><code class="literal">NM_SETTING_SERIAL_PARITY_NONE</code></span></p></td>
+<td>No parity bits (default)
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-SETTING-SERIAL-PARITY-EVEN:CAPS"></a><span class="term"><code class="literal">NM_SETTING_SERIAL_PARITY_EVEN</code></span></p></td>
+<td>Even parity
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-SETTING-SERIAL-PARITY-ODD:CAPS"></a><span class="term"><code class="literal">NM_SETTING_SERIAL_PARITY_ODD</code></span></p></td>
+<td>Odd parity
+</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>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-SERIAL-BITS:CAPS"></a><h3>NM_SETTING_SERIAL_BITS</h3>
+<pre class="programlisting">#define NM_SETTING_SERIAL_BITS "bits"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-SERIAL-PARITY:CAPS"></a><h3>NM_SETTING_SERIAL_PARITY</h3>
+<pre class="programlisting">#define NM_SETTING_SERIAL_PARITY "parity"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-SERIAL-STOPBITS:CAPS"></a><h3>NM_SETTING_SERIAL_STOPBITS</h3>
+<pre class="programlisting">#define NM_SETTING_SERIAL_STOPBITS "stopbits"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-SERIAL-SEND-DELAY:CAPS"></a><h3>NM_SETTING_SERIAL_SEND_DELAY</h3>
+<pre class="programlisting">#define NM_SETTING_SERIAL_SEND_DELAY "send-delay"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingSerial-struct"></a><h3>struct NMSettingSerial</h3>
+<pre class="programlisting">struct NMSettingSerial;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingSerialClass"></a><h3>NMSettingSerialClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+} 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"><a class="link" href="NMSettingSerial.html#NMSettingSerialParity"><span class="returnvalue">NMSettingSerialParity</span></a> 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> : 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> : 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 class="link" href="NMSettingSerial.html#NMSettingSerialParity"><span class="type">NMSettingSerialParity</span></a> : Read / Write / Construct</pre>
+<p>
+Parity setting of the serial port.
+</p>
+<p>Default value: NM_SETTING_SERIAL_PARITY_NONE</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> : 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> : 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>
+</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/html/NMSettingTeam.html b/docs/libnm/html/NMSettingTeam.html
new file mode 100644
index 000000000..d8e501956
--- /dev/null
+++ b/docs/libnm/html/NMSettingTeam.html
@@ -0,0 +1,168 @@
+<!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 Reference Manual">
+<link rel="up" href="ch03.html" title="Connection and Setting API Reference">
+<link rel="prev" href="NMSettingSerial.html" title="NMSettingSerial">
+<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="NMSettingSerial.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch03.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 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>
+<pre class="synopsis">#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>
+#define <a class="link" href="NMSettingTeam.html#NM-SETTING-TEAM-CONFIG:CAPS" title="NM_SETTING_TEAM_CONFIG">NM_SETTING_TEAM_CONFIG</a>
+struct <a class="link" href="NMSettingTeam.html#NMSettingTeam-struct" title="struct 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-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">
+ <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
+</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="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>struct NMSettingTeam</h3>
+<pre class="programlisting">struct NMSettingTeam;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingTeamClass"></a><h3>NMSettingTeamClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+} 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>
+</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>
+</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>
+</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/html/NMSettingTeamPort.html b/docs/libnm/html/NMSettingTeamPort.html
new file mode 100644
index 000000000..90835aa5d
--- /dev/null
+++ b/docs/libnm/html/NMSettingTeamPort.html
@@ -0,0 +1,168 @@
+<!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 Reference Manual">
+<link rel="up" href="ch03.html" title="Connection and Setting API Reference">
+<link rel="prev" href="NMSettingTeam.html" title="NMSettingTeam">
+<link rel="next" href="NMSettingVlan.html" title="NMSettingVlan">
+<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="ch03.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 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="#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>
+<pre class="synopsis">#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>
+#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>
+struct <a class="link" href="NMSettingTeamPort.html#NMSettingTeamPort-struct" title="struct 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">
+ <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="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>struct NMSettingTeamPort</h3>
+<pre class="programlisting">struct NMSettingTeamPort;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingTeamPortClass"></a><h3>NMSettingTeamPortClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+} 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>
+</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>
+</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/html/NMSettingVlan.html b/docs/libnm/html/NMSettingVlan.html
new file mode 100644
index 000000000..52175ad82
--- /dev/null
+++ b/docs/libnm/html/NMSettingVlan.html
@@ -0,0 +1,727 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMSettingVlan</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch03.html" title="Connection and Setting API Reference">
+<link rel="prev" href="NMSettingTeamPort.html" title="NMSettingTeamPort">
+<link rel="next" href="NMSettingVpn.html" title="NMSettingVpn">
+<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="ch03.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 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="#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>
+<td valign="top">
+<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 valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingVlan.synopsis"></a><h2>Synopsis</h2>
+<a name="NMVlanPriorityMap"></a><a name="NMVlanFlags"></a><pre class="synopsis">#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>
+#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>
+struct <a class="link" href="NMSettingVlan.html#NMSettingVlan-struct" title="struct 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-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.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="NMSetting.html" title="NMSetting">NMSetting</a>
+ +----NMSettingVlan
+</pre>
+<pre class="synopsis">
+ GEnum
+ +----NMVlanPriorityMap
+</pre>
+<pre class="synopsis">
+ GFlags
+ +----NMVlanFlags
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingVlan.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMSettingVlan.html#NMSettingVlan--egress-priority-map" title='The "egress-priority-map" property'>egress-priority-map</a>" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : Read / Write
+ "<a class="link" href="NMSettingVlan.html#NMSettingVlan--flags" title='The "flags" property'>flags</a>" <a class="link" href="NMSettingVlan.html#NMVlanFlags"><span class="type">NMVlanFlags</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>" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : Read / Write
+ "<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.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="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-ID:CAPS"></a><h3>NM_SETTING_VLAN_ID</h3>
+<pre class="programlisting">#define NM_SETTING_VLAN_ID "id"
+</pre>
+<p>
+</p>
+</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>
+<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-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>
+<hr>
+<div class="refsect2">
+<a name="NMSettingVlan-struct"></a><h3>struct NMSettingVlan</h3>
+<pre class="programlisting">struct NMSettingVlan;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingVlanClass"></a><h3>NMSettingVlanClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+} NMSettingVlanClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<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 align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<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><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>
+<hr>
+<div class="refsect2">
+<a name="NMVlanFlags-enum"></a><h3>enum NMVlanFlags</h3>
+<pre class="programlisting">typedef enum {
+ /*&lt; flags &gt;*/
+ 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 align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<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><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><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>
+<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-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><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"><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>
+<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="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"><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>
+<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="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"><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>
+<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"><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 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"><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>
+<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"><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="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 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>
+</tr>
+<tr>
+<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>
+</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>
+<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"><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="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-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-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>
+</div>
+<hr>
+<div class="refsect2">
+<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>
+</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"><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="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>
+</tbody>
+</table></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"><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 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 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 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" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : 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 class="link" href="NMSettingVlan.html#NMVlanFlags"><span class="type">NMVlanFlags</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>
+</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> : 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" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : 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--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.19</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/libnm/html/NMSettingVpn.html b/docs/libnm/html/NMSettingVpn.html
new file mode 100644
index 000000000..a83c01452
--- /dev/null
+++ b/docs/libnm/html/NMSettingVpn.html
@@ -0,0 +1,682 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMSettingVpn</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch03.html" title="Connection and Setting API Reference">
+<link rel="prev" href="NMSettingVlan.html" title="NMSettingVlan">
+<link rel="next" href="NMSettingWimax.html" title="NMSettingWimax">
+<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="NMSettingVlan.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch03.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 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="#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>
+<td valign="top">
+<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 valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingVpn.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#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>
+#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-PERSISTENT:CAPS" title="NM_SETTING_VPN_PERSISTENT">NM_SETTING_VPN_PERSISTENT</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>
+struct <a class="link" href="NMSettingVpn.html#NMSettingVpn-struct" title="struct 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#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="NMSettingVpn.html#nm-setting-vpn-get-persistent" title="nm_setting_vpn_get_persistent ()">nm_setting_vpn_get_persistent</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="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.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+ "<a class="link" href="NMSettingVpn.html#NMSettingVpn--data" title='The "data" property'>data</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a>* : Read / Write
+ "<a class="link" href="NMSettingVpn.html#NMSettingVpn--persistent" title='The "persistent" property'>persistent</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="NMSettingVpn.html#NMSettingVpn--secrets" title='The "secrets" property'>secrets</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a>* : 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
+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>
+</div>
+<div class="refsect1">
+<a name="NMSettingVpn.details"></a><h2>Details</h2>
+<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>
+<p>
+</p>
+</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>
+<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-PERSISTENT:CAPS"></a><h3>NM_SETTING_VPN_PERSISTENT</h3>
+<pre class="programlisting">#define NM_SETTING_VPN_PERSISTENT "persistent"
+</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>struct NMSettingVpn</h3>
+<pre class="programlisting">struct NMSettingVpn;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingVpnClass"></a><h3>NMSettingVpnClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+} NMSettingVpnClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<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 align="left" valign="top">
+<col>
+</colgroup>
+<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>
+<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="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="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>
+<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="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"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the VPN plugin's service name</td>
+</tr>
+</tbody>
+</table></div>
+</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="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"><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>
+<hr>
+<div class="refsect2">
+<a name="nm-setting-vpn-get-persistent"></a><h3>nm_setting_vpn_get_persistent ()</h3>
+<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_get_persistent (<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 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"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="NMSettingVpn.html#NMSettingVpn--persistent" title='The "persistent" property'><span class="type">"persistent"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></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="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"><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>
+<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="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>a name that uniquely identifies the given value <em class="parameter"><code>item</code></em>
+</td>
+</tr>
+<tr>
+<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>
+<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="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 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>
+<hr>
+<div class="refsect2">
+<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 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 data item 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 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>
+<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="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 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="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"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of VPN plugin specific secrets</td>
+</tr>
+</tbody>
+</table></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="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>a name that uniquely identifies the given secret <em class="parameter"><code>secret</code></em>
+</td>
+</tr>
+<tr>
+<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>
+<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="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 retrieve</td>
+</tr>
+<tr>
+<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>
+<hr>
+<div class="refsect2">
+<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-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>
+</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" <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a>* : Read / Write</pre>
+<p>
+Dictionary of key/value pairs of VPN plugin specific data. Both keys and
+values must be strings.
+</p>
+<p>
+Type: GHashTable(utf8,utf8)
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingVpn--persistent"></a><h3>The <code class="literal">"persistent"</code> property</h3>
+<pre class="programlisting"> "persistent" <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 the VPN service supports persistence, 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 VPN will attempt to stay connected across link changes and outages,
+until explicitly disconnected.
+</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingVpn--secrets"></a><h3>The <code class="literal">"secrets"</code> property</h3>
+<pre class="programlisting"> "secrets" <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a>* : 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>
+<p>
+Type: GHashTable(utf8,utf8)
+</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>* : 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>
+<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>* : 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.19</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/libnm/html/NMSettingWimax.html b/docs/libnm/html/NMSettingWimax.html
new file mode 100644
index 000000000..7b2f64f98
--- /dev/null
+++ b/docs/libnm/html/NMSettingWimax.html
@@ -0,0 +1,217 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMSettingWimax</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch03.html" title="Connection and Setting API Reference">
+<link rel="prev" href="NMSettingVpn.html" title="NMSettingVpn">
+<link rel="next" href="NMSettingWired.html" title="NMSettingWired">
+<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="NMSettingVpn.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch03.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 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="#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>
+<td valign="top">
+<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 valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingWimax.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#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>
+#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>
+struct <a class="link" href="NMSettingWimax.html#NMSettingWimax-struct" title="struct 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 <span class="returnvalue">char</span> * <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="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.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>" <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="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.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"
+</pre>
+<p>
+</p>
+</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>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTING-WIMAX-MAC-ADDRESS:CAPS"></a><h3>NM_SETTING_WIMAX_MAC_ADDRESS</h3>
+<pre class="programlisting">#define NM_SETTING_WIMAX_MAC_ADDRESS "mac-address"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingWimax-struct"></a><h3>struct NMSettingWimax</h3>
+<pre class="programlisting">struct 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 <span class="returnvalue">char</span> * 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" <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, 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>Default value: NULL</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>* : 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.19</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/libnm/html/NMSettingWired.html b/docs/libnm/html/NMSettingWired.html
new file mode 100644
index 000000000..b9f0ad4b3
--- /dev/null
+++ b/docs/libnm/html/NMSettingWired.html
@@ -0,0 +1,1015 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMSettingWired</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch03.html" title="Connection and Setting API Reference">
+<link rel="prev" href="NMSettingWimax.html" title="NMSettingWimax">
+<link rel="next" href="NMSettingWireless.html" title="NMSettingWireless">
+<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="NMSettingWimax.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch03.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 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>
+<td valign="top">
+<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 valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingWired.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#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>
+#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>
+struct <a class="link" href="NMSettingWired.html#NMSettingWired-struct" title="struct 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 <span class="returnvalue">char</span> * <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 <span class="returnvalue">char</span> * <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 <span class="returnvalue">char</span> * const * <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 <span class="returnvalue">char</span> * const * <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">
+ <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>" <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--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>" <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-blacklist" title='The "mac-address-blacklist" property'>mac-address-blacklist</a>" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : 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>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a>* : Read / Write
+ "<a class="link" href="NMSettingWired.html#NMSettingWired--s390-subchannels" title='The "s390-subchannels" property'>s390-subchannels</a>" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : 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.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="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>struct NMSettingWired</h3>
+<pre class="programlisting">struct NMSettingWired;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingWiredClass"></a><h3>NMSettingWiredClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+} 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></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><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--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><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--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><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--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><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--auto-negotiate" title='The "auto-negotiate" property'><span class="type">"auto-negotiate"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</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 <span class="returnvalue">char</span> * 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 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>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>
+<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 <span class="returnvalue">char</span> * 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 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>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>
+<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 <span class="returnvalue">char</span> * const * 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 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>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</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<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 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>the number of blacklisted MAC addresses</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<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 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>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>
+<hr>
+<div class="refsect2">
+<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 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>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>
+<hr>
+<div class="refsect2">
+<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 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>idx</code></em> :</span></p></td>
+<td>index number of the MAC address</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<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 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>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>
+<hr>
+<div class="refsect2">
+<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 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></tbody>
+</table></div>
+</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="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>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>
+<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 <span class="returnvalue">char</span> * const * 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="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>array of strings, each specifying
+one subchannel the s390 device uses to communicate to the host. <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]</span>
+</td>
+</tr>
+</tbody>
+</table></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="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>the s390 device type</td>
+</tr>
+</tbody>
+</table></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
+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="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>the number of s390-specific device options</td>
+</tr>
+</tbody>
+</table></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
+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>,
+and should not be used to refer to options except for short periods of time
+such as during option 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>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 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><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>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<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>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer 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 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>
+<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="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>the key for which to retrieve the value</td>
+</tr>
+<tr>
+<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>
+<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> *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="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>
+Remove the s390-specific option referenced by <em class="parameter"><code>key</code></em> from the internal option
+list.
+</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"><em class="parameter"><code>key</code></em> :</span></p></td>
+<td>key name for 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>
+<hr>
+<div class="refsect2">
+<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>
+</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> : 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="NMSettingWired--cloned-mac-address"></a><h3>The <code class="literal">"cloned-mac-address"</code> property</h3>
+<pre class="programlisting"> "cloned-mac-address" <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 use this MAC address instead of its
+permanent MAC address. This is known as MAC cloning or spoofing.
+</p>
+<p>Default value: NULL</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>* : 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="NMSettingWired--mac-address"></a><h3>The <code class="literal">"mac-address"</code> property</h3>
+<pre class="programlisting"> "mac-address" <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, 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>Default value: NULL</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" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : 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="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="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="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="NMSettingWired--s390-options"></a><h3>The <code class="literal">"s390-options"</code> property</h3>
+<pre class="programlisting"> "s390-options" <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a>* : 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>
+<p>
+Type: GHashTable(utf8,utf8)
+</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" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : 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="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>
+<p>Default value: 0</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/html/NMSettingWireless.html b/docs/libnm/html/NMSettingWireless.html
new file mode 100644
index 000000000..8cc9a4715
--- /dev/null
+++ b/docs/libnm/html/NMSettingWireless.html
@@ -0,0 +1,1053 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMSettingWireless</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch03.html" title="Connection and Setting 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.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="NMSettingWired.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch03.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 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 Wi-Fi networks</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingWireless.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#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>
+#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-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>
+struct <a class="link" href="NMSettingWireless.html#NMSettingWireless-struct" title="struct 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>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="returnvalue">GBytes</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 <span class="returnvalue">char</span> * <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 <span class="returnvalue">char</span> * <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 <span class="returnvalue">char</span> * <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 <span class="returnvalue">char</span> * const * <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><a class="link" href="libnm-nm-dbus-interface.html#NM80211ApFlags"><span class="type">NM80211ApFlags</span></a> ap_flags</code></em>,
+ <em class="parameter"><code><a class="link" href="libnm-nm-dbus-interface.html#NM80211ApSecurityFlags"><span class="type">NM80211ApSecurityFlags</span></a> ap_wpa</code></em>,
+ <em class="parameter"><code><a class="link" href="libnm-nm-dbus-interface.html#NM80211ApSecurityFlags"><span class="type">NM80211ApSecurityFlags</span></a> ap_rsn</code></em>,
+ <em class="parameter"><code><a class="link" href="libnm-nm-dbus-interface.html#NM80211Mode"><span class="type">NM80211Mode</span></a> ap_mode</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSettingWireless.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="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>" <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--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>" <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--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>" <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--mac-address-blacklist" title='The "mac-address-blacklist" property'>mac-address-blacklist</a>" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : 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--seen-bssids" title='The "seen-bssids" property'>seen-bssids</a>" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : Read / Write
+ "<a class="link" href="NMSettingWireless.html#NMSettingWireless--ssid" title='The "ssid" property'>ssid</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="type">GBytes</span></a>* : 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.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="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-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>
+</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>struct NMSettingWireless</h3>
+<pre class="programlisting">struct NMSettingWireless;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingWirelessClass"></a><h3>NMSettingWirelessClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+} 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></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"><a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="returnvalue">GBytes</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><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--ssid" title='The "ssid" property'><span class="type">"ssid"</span></a> property of the setting. <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-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><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--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><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--band" title='The "band" property'><span class="type">"band"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></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="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="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--channel" title='The "channel" property'><span class="type">"channel"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></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 <span class="returnvalue">char</span> * 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 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="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--bssid" title='The "bssid" property'><span class="type">"bssid"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></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="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="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>
+<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="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="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>
+<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 <span class="returnvalue">char</span> * 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 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="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>
+<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 <span class="returnvalue">char</span> * 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 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="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>
+<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 <span class="returnvalue">char</span> * const * 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 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="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</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<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 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="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>
+<hr>
+<div class="refsect2">
+<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 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="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>
+<hr>
+<div class="refsect2">
+<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 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="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>
+<hr>
+<div class="refsect2">
+<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 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="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>
+<hr>
+<div class="refsect2">
+<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 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="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>
+<hr>
+<div class="refsect2">
+<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 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="NMSettingWireless.html" title="NMSettingWireless"><span class="type">NMSettingWireless</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</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="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="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>
+<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="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="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>
+<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.
+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="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="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><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>
+<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="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="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>
+<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="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="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><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>
+<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><a class="link" href="libnm-nm-dbus-interface.html#NM80211ApFlags"><span class="type">NM80211ApFlags</span></a> ap_flags</code></em>,
+ <em class="parameter"><code><a class="link" href="libnm-nm-dbus-interface.html#NM80211ApSecurityFlags"><span class="type">NM80211ApSecurityFlags</span></a> ap_wpa</code></em>,
+ <em class="parameter"><code><a class="link" href="libnm-nm-dbus-interface.html#NM80211ApSecurityFlags"><span class="type">NM80211ApSecurityFlags</span></a> ap_rsn</code></em>,
+ <em class="parameter"><code><a class="link" href="libnm-nm-dbus-interface.html#NM80211Mode"><span class="type">NM80211Mode</span></a> 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="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>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><p><span class="term"><em class="parameter"><code>ap_flags</code></em> :</span></p></td>
+<td>the <a class="link" href="libnm-nm-dbus-interface.html#NM80211ApFlags"><code class="literal">NM80211ApFlags</code></a> of the given access point</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ap_wpa</code></em> :</span></p></td>
+<td>the <a class="link" href="libnm-nm-dbus-interface.html#NM80211ApSecurityFlags"><code class="literal">NM80211ApSecurityFlags</code></a> of the given access point's WPA
+capabilities</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ap_rsn</code></em> :</span></p></td>
+<td>the <a class="link" href="libnm-nm-dbus-interface.html#NM80211ApSecurityFlags"><code class="literal">NM80211ApSecurityFlags</code></a> of the given access point's WPA2/RSN
+capabilities</td>
+</tr>
+<tr>
+<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><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>
+<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>* : 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="NMSettingWireless--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 / 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>
+<p>Default value: NULL</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> : 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="NMSettingWireless--cloned-mac-address"></a><h3>The <code class="literal">"cloned-mac-address"</code> property</h3>
+<pre class="programlisting"> "cloned-mac-address" <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 Wi-Fi device use this MAC address instead
+of its permanent MAC address. This is known as MAC cloning or spoofing.
+</p>
+<p>Default value: NULL</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> : 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="NMSettingWireless--mac-address"></a><h3>The <code class="literal">"mac-address"</code> property</h3>
+<pre class="programlisting"> "mac-address" <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, 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>
+<p>Default value: NULL</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" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : 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="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="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="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="NMSettingWireless--seen-bssids"></a><h3>The <code class="literal">"seen-bssids"</code> property</h3>
+<pre class="programlisting"> "seen-bssids" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : 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="NMSettingWireless--ssid"></a><h3>The <code class="literal">"ssid"</code> property</h3>
+<pre class="programlisting"> "ssid" <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="type">GBytes</span></a>* : Read / Write</pre>
+<p>
+SSID of the Wi-Fi network. Must be specified.
+</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> : 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>
+<p>Default value: 0</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/html/NMSettingWirelessSecurity.html b/docs/libnm/html/NMSettingWirelessSecurity.html
new file mode 100644
index 000000000..b302a1136
--- /dev/null
+++ b/docs/libnm/html/NMSettingWirelessSecurity.html
@@ -0,0 +1,1450 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMSettingWirelessSecurity</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch03.html" title="Connection and Setting API Reference">
+<link rel="prev" href="NMSettingWireless.html" title="NMSettingWireless">
+<link rel="next" href="ch04.html" title="Device and Runtime Configuration API Reference">
+<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="NMSettingWireless.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch03.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 Reference Manual</th>
+<td><a accesskey="n" href="ch04.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 Wi-Fi networks that
+use WEP, LEAP, WPA or WPA2/RSN security</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSettingWirelessSecurity.synopsis"></a><h2>Synopsis</h2>
+<a name="NMWepKeyType"></a><pre class="synopsis">#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#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>
+struct <a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity-struct" title="struct 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
+ +----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>" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : 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 class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</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>" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : Read / Write
+ "<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--proto" title='The "proto" property'>proto</a>" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : 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 class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</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 class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</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 class="link" href="NMSettingWirelessSecurity.html#NMWepKeyType"><span class="type">NMWepKeyType</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.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="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 align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<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><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><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><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>
+<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>
+<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>
+<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="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-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-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-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>
+<hr>
+<div class="refsect2">
+<a name="NMSettingWirelessSecurity-struct"></a><h3>struct NMSettingWirelessSecurity</h3>
+<pre class="programlisting">struct NMSettingWirelessSecurity;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSettingWirelessSecurityClass"></a><h3>NMSettingWirelessSecurityClass</h3>
+<pre class="programlisting">typedef struct {
+ NMSettingClass parent;
+} NMSettingWirelessSecurityClass;
+</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="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="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>
+<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="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--key-mgmt" title='The "key-mgmt" property'><span class="type">"key-mgmt"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</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="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 number of security protocols this connection allows when
+connecting to secure Wi-Fi networks</td>
+</tr>
+</tbody>
+</table></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="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>i</code></em> :</span></p></td>
+<td>an index into the protocol list</td>
+</tr>
+<tr>
+<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>
+<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 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 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>proto</code></em> :</span></p></td>
+<td>the protocol to add, 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 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>
+<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="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>i</code></em> :</span></p></td>
+<td>index of the protocol to remove</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<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 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>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>
+<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="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></tbody>
+</table></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="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 number of pairwise encryption algorithms in the allowed list</td>
+</tr>
+</tbody>
+</table></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="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>i</code></em> :</span></p></td>
+<td>index of an item in the allowed pairwise encryption algorithm list</td>
+</tr>
+<tr>
+<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>
+<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="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>pairwise</code></em> :</span></p></td>
+<td>the encryption algorithm to add, 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 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>
+<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="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>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>
+<hr>
+<div class="refsect2">
+<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 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>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>
+<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="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></tbody>
+</table></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="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 number of groupwise encryption algorithms in the allowed list</td>
+</tr>
+</tbody>
+</table></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="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>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>
+<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
+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 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>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>
+<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="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>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>
+<hr>
+<div class="refsect2">
+<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 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>group</code></em> :</span></p></td>
+<td>the encryption algorithm to remove, 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 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>
+<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="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></tbody>
+</table></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="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--psk" title='The "psk" property'><span class="type">"psk"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></div>
+</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"><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 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
+<a class="link" href="NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--psk" title='The "psk" property'><span class="type">"psk"</span></a>
+</td>
+</tr>
+</tbody>
+</table></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="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--leap-username" title='The "leap-username" property'><span class="type">"leap-username"</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"></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 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--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><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--leap-password" title='The "leap-password" property'><span class="type">"leap-password"</span></a>
+</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><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 WEP key index (0..3 inclusive)</td>
+</tr>
+<tr>
+<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>
+<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="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="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 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-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><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--auth-alg" title='The "auth-alg" property'><span class="type">"auth-alg"</span></a> property of the setting</td>
+</tr>
+</tbody>
+</table></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"><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-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>
+</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>* : 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="NMSettingWirelessSecurity--group"></a><h3>The <code class="literal">"group"</code> property</h3>
+<pre class="programlisting"> "group" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : 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="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="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="NMSettingWirelessSecurity--leap-password-flags"></a><h3>The <code class="literal">"leap-password-flags"</code> property</h3>
+<pre class="programlisting"> "leap-password-flags" <a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</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>
+</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>* : 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="NMSettingWirelessSecurity--pairwise"></a><h3>The <code class="literal">"pairwise"</code> property</h3>
+<pre class="programlisting"> "pairwise" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : 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="NMSettingWirelessSecurity--proto"></a><h3>The <code class="literal">"proto"</code> property</h3>
+<pre class="programlisting"> "proto" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> : 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="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="NMSettingWirelessSecurity--psk-flags"></a><h3>The <code class="literal">"psk-flags"</code> property</h3>
+<pre class="programlisting"> "psk-flags" <a class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</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>
+</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 class="link" href="NMSetting.html#NMSettingSecretFlags"><span class="type">NMSettingSecretFlags</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>
+</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 class="link" href="NMSettingWirelessSecurity.html#NMWepKeyType"><span class="type">NMWepKeyType</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>Default value: NM_WEP_KEY_TYPE_UNKNOWN</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>* : 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="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>
+<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>* : 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>* : 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> : 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>
+</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/html/NMSimpleConnection.html b/docs/libnm/html/NMSimpleConnection.html
new file mode 100644
index 000000000..c017881eb
--- /dev/null
+++ b/docs/libnm/html/NMSimpleConnection.html
@@ -0,0 +1,175 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMSimpleConnection</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch03.html" title="Connection and Setting API Reference">
+<link rel="prev" href="libnm-NMConnection.html" title="NMConnection">
+<link rel="next" href="NMSetting.html" title="NMSetting">
+<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-NMConnection.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch03.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 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="#NMSimpleConnection.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#NMSimpleConnection.description" class="shortcut">Description</a>
+  | 
+ <a href="#NMSimpleConnection.object-hierarchy" class="shortcut">Object Hierarchy</a>
+  | 
+ <a href="#NMSimpleConnection.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="NMSimpleConnection"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMSimpleConnection.top_of_page"></a>NMSimpleConnection</span></h2>
+<p>NMSimpleConnection</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMSimpleConnection.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">struct <a class="link" href="NMSimpleConnection.html#NMSimpleConnection-struct" title="struct NMSimpleConnection">NMSimpleConnection</a>;
+ <a class="link" href="NMSimpleConnection.html#NMSimpleConnectionClass" title="NMSimpleConnectionClass">NMSimpleConnectionClass</a>;
+<a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="returnvalue">NMConnection</span></a> * <a class="link" href="NMSimpleConnection.html#nm-simple-connection-new" title="nm_simple_connection_new ()">nm_simple_connection_new</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+<a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="returnvalue">NMConnection</span></a> * <a class="link" href="NMSimpleConnection.html#nm-simple-connection-new-from-dbus" title="nm_simple_connection_new_from_dbus ()">nm_simple_connection_new_from_dbus</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> *dict</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="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="returnvalue">NMConnection</span></a> * <a class="link" href="NMSimpleConnection.html#nm-simple-connection-new-clone" title="nm_simple_connection_new_clone ()">nm_simple_connection_new_clone</a> (<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="NMSimpleConnection.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>
+ +----NMSimpleConnection
+</pre>
+</div>
+<div class="refsect1">
+<a name="NMSimpleConnection.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+NMSimpleConnection implements
+ <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html">NMConnection</a>.</p>
+</div>
+<div class="refsect1">
+<a name="NMSimpleConnection.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="NMSimpleConnection.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NMSimpleConnection-struct"></a><h3>struct NMSimpleConnection</h3>
+<pre class="programlisting">struct NMSimpleConnection;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSimpleConnectionClass"></a><h3>NMSimpleConnectionClass</h3>
+<pre class="programlisting">typedef struct {
+ GObjectClass parent_class;
+} NMSimpleConnectionClass;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-simple-connection-new"></a><h3>nm_simple_connection_new ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="returnvalue">NMConnection</span></a> * nm_simple_connection_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Creates a new <a class="link" href="NMSimpleConnection.html" title="NMSimpleConnection"><span class="type">NMSimpleConnection</span></a> object with no <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> objects. An
+<a class="link" href="NMSimpleConnection.html" title="NMSimpleConnection"><span class="type">NMSimpleConnection</span></a> does not directly represent a D-Bus-exported connection,
+but might be used in the process of creating a new one.
+</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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</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-simple-connection-new-from-dbus"></a><h3>nm_simple_connection_new_from_dbus ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="returnvalue">NMConnection</span></a> * nm_simple_connection_new_from_dbus (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> *dict</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="NMSimpleConnection.html" title="NMSimpleConnection"><span class="type">NMSimpleConnection</span></a> from a hash table describing the
+connection. See <a class="link" href="libnm-NMConnection.html#nm-connection-to-dbus" title="nm_connection_to_dbus ()"><code class="function">nm_connection_to_dbus()</code></a> for a description of the expected
+hash table.
+</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>dict</code></em> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> of type <code class="literal">NM_VARIANT_TYPE_CONNECTION</code> describing the connection</td>
+</tr>
+<tr>
+<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>the new <a class="link" href="NMSimpleConnection.html" title="NMSimpleConnection"><span class="type">NMSimpleConnection</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. <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-simple-connection-new-clone"></a><h3>nm_simple_connection_new_clone ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="returnvalue">NMConnection</span></a> * nm_simple_connection_new_clone (<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>
+Clones an <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> as an <a class="link" href="NMSimpleConnection.html" title="NMSimpleConnection"><span class="type">NMSimpleConnection</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="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> to clone</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> containing the same settings
+and properties as the source <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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>
+</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/html/NMVpnConnection.html b/docs/libnm/html/NMVpnConnection.html
new file mode 100644
index 000000000..33abdad9c
--- /dev/null
+++ b/docs/libnm/html/NMVpnConnection.html
@@ -0,0 +1,233 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMVpnConnection</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference">
+<link rel="prev" href="NMActiveConnection.html" title="NMActiveConnection">
+<link rel="next" href="NMRemoteConnection.html" title="NMRemoteConnection">
+<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="NMActiveConnection.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch04.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 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="#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>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMVpnConnection.top_of_page"></a>NMVpnConnection</span></h2>
+<p>NMVpnConnection</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></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>
+struct <a class="link" href="NMVpnConnection.html#NMVpnConnection-struct" title="struct NMVpnConnection">NMVpnConnection</a>;
+ <a class="link" href="NMVpnConnection.html#NMVpnConnectionClass" title="NMVpnConnectionClass">NMVpnConnectionClass</a>;
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NMVpnConnectionState"><span class="returnvalue">NMVpnConnectionState</span></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> (<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.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.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.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 class="link" href="libnm-nm-vpn-dbus-interface.html#NMVpnConnectionState"><span class="type">NMVpnConnectionState</span></a> : Read
+</pre>
+</div>
+<div class="refsect1">
+<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">
+<a name="NMVpnConnection.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<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>struct NMVpnConnection</h3>
+<pre class="programlisting">struct NMVpnConnection;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<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);
+} NMVpnConnectionClass;
+</pre>
+<p>
+</p>
+</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"><a class="link" href="libnm-nm-vpn-dbus-interface.html#NMVpnConnectionState"><span class="returnvalue">NMVpnConnectionState</span></a> 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 align="left" valign="top">
+<col>
+</colgroup>
+<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>
+<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="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>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>
+<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>* : 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="NMVpnConnection--vpn-state"></a><h3>The <code class="literal">"vpn-state"</code> property</h3>
+<pre class="programlisting"> "vpn-state" <a class="link" href="libnm-nm-vpn-dbus-interface.html#NMVpnConnectionState"><span class="type">NMVpnConnectionState</span></a> : Read</pre>
+<p>
+The VPN state of the active VPN connection.
+</p>
+<p>Default value: NM_VPN_CONNECTION_STATE_UNKNOWN</p>
+</div>
+</div>
+<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) : <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.19</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/libnm/html/NMWimaxNsp.html b/docs/libnm/html/NMWimaxNsp.html
new file mode 100644
index 000000000..fa7058670
--- /dev/null
+++ b/docs/libnm/html/NMWimaxNsp.html
@@ -0,0 +1,357 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMWimaxNsp</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch04.html" title="Device and Runtime Configuration API Reference">
+<link rel="prev" href="NMAccessPoint.html" title="NMAccessPoint">
+<link rel="next" href="NMIPConfig.html" title="NMIPConfig">
+<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="NMAccessPoint.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch04.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 Reference Manual</th>
+<td><a accesskey="n" href="NMIPConfig.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>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="NMWimaxNsp.top_of_page"></a>NMWimaxNsp</span></h2>
+<p>NMWimaxNsp</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="NMWimaxNsp.synopsis"></a><h2>Synopsis</h2>
+<a name="NMWimaxNspNetworkType"></a><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-enum" title="enum NMWimaxNspNetworkType">NMWimaxNspNetworkType</a>;
+struct <a class="link" href="NMWimaxNsp.html#NMWimaxNsp-struct" title="struct NMWimaxNsp">NMWimaxNsp</a>;
+ <a class="link" href="NMWimaxNsp.html#NMWimaxNspClass" title="NMWimaxNspClass">NMWimaxNspClass</a>;
+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"><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-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</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-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</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">
+ GEnum
+ +----NMWimaxNspNetworkType
+</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="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 class="link" href="NMWimaxNsp.html#NMWimaxNspNetworkType"><span class="type">NMWimaxNspNetworkType</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.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-enum"></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>
+WiMAX network type.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<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>unknown network type
+</td>
+</tr>
+<tr>
+<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>home network
+</td>
+</tr>
+<tr>
+<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>partner network
+</td>
+</tr>
+<tr>
+<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>roaming partner network
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMWimaxNsp-struct"></a><h3>struct NMWimaxNsp</h3>
+<pre class="programlisting">struct NMWimaxNsp;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMWimaxNspClass"></a><h3>NMWimaxNspClass</h3>
+<pre class="programlisting">typedef struct {
+ NMObjectClass parent;
+} NMWimaxNspClass;
+</pre>
+<p>
+</p>
+</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="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>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><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the name</td>
+</tr>
+</tbody>
+</table></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="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>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><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the signal quality</td>
+</tr>
+</tbody>
+</table></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"><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 align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<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><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the network type</td>
+</tr>
+</tbody>
+</table></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-Pointer-Arrays.html#GPtrArray"><span class="returnvalue">GPtrArray</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-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *connections</code></em>);</pre>
+<p>
+Filters a given array 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 NSP. 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 align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<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>an array of <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnections</span></a> to
+filter. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMConnection]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an array of
+<a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnections</span></a> that could be activated with the given <em class="parameter"><code>nsp</code></em>. The array should
+be freed with <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#g-ptr-array-unref"><code class="function">g_ptr_array_unref()</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> NMConnection]</span>
+</td>
+</tr>
+</tbody>
+</table></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="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>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><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><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 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>* : 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 class="link" href="NMWimaxNsp.html#NMWimaxNspNetworkType"><span class="type">NMWimaxNspNetworkType</span></a> : Read</pre>
+<p>
+The network type of the WiMAX NSP.
+</p>
+<p>Default value: NM_WIMAX_NSP_NETWORK_TYPE_UNKNOWN</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> : Read</pre>
+<p>
+The signal quality of the WiMAX NSP.
+</p>
+<p>Allowed values: &lt;= 100</p>
+<p>Default value: 0</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/html/annotation-glossary.html b/docs/libnm/html/annotation-glossary.html
new file mode 100644
index 000000000..11787bca1
--- /dev/null
+++ b/docs/libnm/html/annotation-glossary.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Annotation Glossary</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="index.html" title="libnm Reference Manual">
+<link rel="prev" href="api-index-full.html" title="API Index">
+<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="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 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="#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>
+<a name="glsA"></a><h3 class="title">A</h3>
+<dt><span class="glossterm"><a name="annotation-glossterm-allow-none"></a>allow-none</span></dt>
+<dd class="glossdef"><p>NULL is ok, both for passing and for returning.</p></dd>
+<dt><span class="glossterm"><a name="annotation-glossterm-array"></a>array</span></dt>
+<dd class="glossdef"><p>Parameter points to an array of items.</p></dd>
+<a name="glsC"></a><h3 class="title">C</h3>
+<dt><span class="glossterm"><a name="annotation-glossterm-closure"></a>closure</span></dt>
+<dd class="glossdef"><p>This parameter is a 'user_data', for callbacks; many bindings can pass NULL here.</p></dd>
+<a name="glsE"></a><h3 class="title">E</h3>
+<dt><span class="glossterm"><a name="annotation-glossterm-element-type"></a>element-type</span></dt>
+<dd class="glossdef"><p>Generics and defining elements of containers and arrays.</p></dd>
+<a name="glsI"></a><h3 class="title">I</h3>
+<dt><span class="glossterm"><a name="annotation-glossterm-inout"></a>inout</span></dt>
+<dd class="glossdef"><p>Parameter for input and for returning results. Default is <acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>.</p></dd>
+<a name="glsO"></a><h3 class="title">O</h3>
+<dt><span class="glossterm"><a name="annotation-glossterm-out"></a>out</span></dt>
+<dd class="glossdef"><p>Parameter for returning results. Default is <acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>.</p></dd>
+<a name="glsS"></a><h3 class="title">S</h3>
+<dt><span class="glossterm"><a name="annotation-glossterm-scope%20async"></a>scope async</span></dt>
+<dd class="glossdef"><p>The callback is valid until first called.</p></dd>
+<dt><span class="glossterm"><a name="annotation-glossterm-scope%20call"></a>scope call</span></dt>
+<dd class="glossdef"><p>The callback is valid only during the call to the method.</p></dd>
+<a name="glsT"></a><h3 class="title">T</h3>
+<dt><span class="glossterm"><a name="annotation-glossterm-transfer%20container"></a>transfer container</span></dt>
+<dd class="glossdef"><p>Free data container after the code is done.</p></dd>
+<dt><span class="glossterm"><a name="annotation-glossterm-transfer%20full"></a>transfer full</span></dt>
+<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.19</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/libnm/html/api-index-full.html b/docs/libnm/html/api-index-full.html
new file mode 100644
index 000000000..c0db3a8be
--- /dev/null
+++ b/docs/libnm/html/api-index-full.html
@@ -0,0 +1,7247 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>API Index</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="index.html" title="libnm 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.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="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 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="#idx8">8</a>
+  | 
+ <a class="shortcut" href="#idxA">A</a>
+  | 
+ <a class="shortcut" href="#idxB">B</a>
+  | 
+ <a class="shortcut" href="#idxC">C</a>
+  | 
+ <a class="shortcut" href="#idxD">D</a>
+  | 
+ <a class="shortcut" href="#idxE">E</a>
+  | 
+ <a class="shortcut" href="#idxI">I</a>
+  | 
+ <a class="shortcut" href="#idxM">M</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="#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>
+<a name="idx"></a><a name="idx8"></a><h3 class="title">8</h3>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM80211ApFlags-enum" title="enum NM80211ApFlags">NM80211ApFlags</a>, enum in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM80211ApSecurityFlags-enum" title="enum NM80211ApSecurityFlags">NM80211ApSecurityFlags</a>, enum in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM80211Mode-enum" title="enum NM80211Mode">NM80211Mode</a>, enum in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<a name="idxA"></a><h3 class="title">A</h3>
+<dt>
+<a class="link" href="NMAccessPoint.html#NMAccessPoint-struct" title="struct 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--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--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--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--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--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--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--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--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--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>
+<a class="link" href="NMAccessPoint.html#NM-ACCESS-POINT-BSSID:CAPS" title="NM_ACCESS_POINT_BSSID">NM_ACCESS_POINT_BSSID</a>, macro in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMAccessPoint.html#NM-ACCESS-POINT-FLAGS:CAPS" title="NM_ACCESS_POINT_FLAGS">NM_ACCESS_POINT_FLAGS</a>, macro in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMAccessPoint.html#NM-ACCESS-POINT-FREQUENCY:CAPS" title="NM_ACCESS_POINT_FREQUENCY">NM_ACCESS_POINT_FREQUENCY</a>, macro 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-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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMAccessPoint.html#NM-ACCESS-POINT-HW-ADDRESS:CAPS" title="NM_ACCESS_POINT_HW_ADDRESS">NM_ACCESS_POINT_HW_ADDRESS</a>, macro in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMAccessPoint.html#NM-ACCESS-POINT-MAX-BITRATE:CAPS" title="NM_ACCESS_POINT_MAX_BITRATE">NM_ACCESS_POINT_MAX_BITRATE</a>, macro in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMAccessPoint.html#NM-ACCESS-POINT-MODE:CAPS" title="NM_ACCESS_POINT_MODE">NM_ACCESS_POINT_MODE</a>, macro in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMAccessPoint.html#NM-ACCESS-POINT-RSN-FLAGS:CAPS" title="NM_ACCESS_POINT_RSN_FLAGS">NM_ACCESS_POINT_RSN_FLAGS</a>, macro in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMAccessPoint.html#NM-ACCESS-POINT-SSID:CAPS" title="NM_ACCESS_POINT_SSID">NM_ACCESS_POINT_SSID</a>, macro in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMAccessPoint.html#NM-ACCESS-POINT-STRENGTH:CAPS" title="NM_ACCESS_POINT_STRENGTH">NM_ACCESS_POINT_STRENGTH</a>, macro in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMAccessPoint.html#NM-ACCESS-POINT-WPA-FLAGS:CAPS" title="NM_ACCESS_POINT_WPA_FLAGS">NM_ACCESS_POINT_WPA_FLAGS</a>, macro in <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMActiveConnection.html#NMActiveConnection-struct" title="struct 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--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--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--specific-object-path" title='The "specific-object-path" property'>NMActiveConnection:specific-object-path</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>
+</dt>
+<dd></dd>
+<dt>
+<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--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--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>
+<a class="link" href="libnm-nm-dbus-interface.html#NMActiveConnectionState-enum" title="enum NMActiveConnectionState">NMActiveConnectionState</a>, enum in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMActiveConnection.html#NM-ACTIVE-CONNECTION-CONNECTION:CAPS" title="NM_ACTIVE_CONNECTION_CONNECTION">NM_ACTIVE_CONNECTION_CONNECTION</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-DEFAULT:CAPS" title="NM_ACTIVE_CONNECTION_DEFAULT">NM_ACTIVE_CONNECTION_DEFAULT</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-DEFAULT6:CAPS" title="NM_ACTIVE_CONNECTION_DEFAULT6">NM_ACTIVE_CONNECTION_DEFAULT6</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-DEVICES:CAPS" title="NM_ACTIVE_CONNECTION_DEVICES">NM_ACTIVE_CONNECTION_DEVICES</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-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-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-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-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-specific-object-path" title="nm_active_connection_get_specific_object_path ()">nm_active_connection_get_specific_object_path</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<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>
+<a class="link" href="NMActiveConnection.html#NM-ACTIVE-CONNECTION-MASTER:CAPS" title="NM_ACTIVE_CONNECTION_MASTER">NM_ACTIVE_CONNECTION_MASTER</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-SPECIFIC-OBJECT-PATH:CAPS" title="NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT_PATH">NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT_PATH</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-STATE:CAPS" title="NM_ACTIVE_CONNECTION_STATE">NM_ACTIVE_CONNECTION_STATE</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-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>
+<dt>
+<a class="link" href="libnm-nm-errors.html#NMAgentManagerError-enum" title="enum NMAgentManagerError">NMAgentManagerError</a>, enum in <a class="link" href="libnm-nm-errors.html" title="nm-errors">nm-errors</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-errors.html#NM-AGENT-MANAGER-ERROR:CAPS" title="NM_AGENT_MANAGER_ERROR">NM_AGENT_MANAGER_ERROR</a>, macro in <a class="link" href="libnm-nm-errors.html" title="nm-errors">nm-errors</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-errors.html#nm-agent-manager-error-quark" title="nm_agent_manager_error_quark ()">nm_agent_manager_error_quark</a>, function in <a class="link" href="libnm-nm-errors.html" title="nm-errors">nm-errors</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-version.html#NM-AVAILABLE-IN-0-9-10:CAPS" title="NM_AVAILABLE_IN_0_9_10">NM_AVAILABLE_IN_0_9_10</a>, macro in <a class="link" href="libnm-nm-version.html" title="nm-version">nm-version</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-version.html#NM-AVAILABLE-IN-1-0:CAPS" title="NM_AVAILABLE_IN_1_0">NM_AVAILABLE_IN_1_0</a>, macro in <a class="link" href="libnm-nm-version.html" title="nm-version">nm-version</a>
+</dt>
+<dd></dd>
+<a name="idxB"></a><h3 class="title">B</h3>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NMBluetoothCapabilities-enum" title="enum NMBluetoothCapabilities">NMBluetoothCapabilities</a>, enum in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<a name="idxC"></a><h3 class="title">C</h3>
+<dt>
+<a class="link" href="libnm-nm-version.html#NM-CHECK-VERSION:CAPS" title="NM_CHECK_VERSION()">NM_CHECK_VERSION</a>, macro in <a class="link" href="libnm-nm-version.html" title="nm-version">nm-version</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMClient.html#NMClient-struct" title="struct 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-connection-added" title='The "connection-added" signal'>NMClient::connection-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-connection-removed" title='The "connection-removed" signal'>NMClient::connection-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-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--can-modify" title='The "can-modify" property'>NMClient:can-modify</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--connections" title='The "connections" property'>NMClient: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--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--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--hostname" title='The "hostname" property'>NMClient:hostname</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMClient.html#NMClient--nm-running" title='The "nm-running" property'>NMClient:nm-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--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--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--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--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--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--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--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--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--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--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#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#NMClientError-enum" title="enum NMClientError">NMClientError</a>, enum in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMClient.html#NMClientPermission-enum" title="enum NMClientPermission">NMClientPermission</a>, enum in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMClient.html#NMClientPermissionResult-enum" title="enum NMClientPermissionResult">NMClientPermissionResult</a>, enum in <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMClient.html#nm-client-activate-connection-async" title="nm_client_activate_connection_async ()">nm_client_activate_connection_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-activate-connection-finish" title="nm_client_activate_connection_finish ()">nm_client_activate_connection_finish</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-ACTIVATING-CONNECTION:CAPS" title="NM_CLIENT_ACTIVATING_CONNECTION">NM_CLIENT_ACTIVATING_CONNECTION</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-ACTIVE-CONNECTIONS:CAPS" title="NM_CLIENT_ACTIVE_CONNECTIONS">NM_CLIENT_ACTIVE_CONNECTIONS</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-add-and-activate-connection-async" title="nm_client_add_and_activate_connection_async ()">nm_client_add_and_activate_connection_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-add-and-activate-connection-finish" title="nm_client_add_and_activate_connection_finish ()">nm_client_add_and_activate_connection_finish</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-add-connection-async" title="nm_client_add_connection_async ()">nm_client_add_connection_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-add-connection-finish" title="nm_client_add_connection_finish ()">nm_client_add_connection_finish</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-CAN-MODIFY:CAPS" title="NM_CLIENT_CAN_MODIFY">NM_CLIENT_CAN_MODIFY</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-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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMClient.html#NM-CLIENT-CONNECTIONS:CAPS" title="NM_CLIENT_CONNECTIONS">NM_CLIENT_CONNECTIONS</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-CONNECTION-ADDED:CAPS" title="NM_CLIENT_CONNECTION_ADDED">NM_CLIENT_CONNECTION_ADDED</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-CONNECTION-REMOVED:CAPS" title="NM_CLIENT_CONNECTION_REMOVED">NM_CLIENT_CONNECTION_REMOVED</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-CONNECTIVITY:CAPS" title="NM_CLIENT_CONNECTIVITY">NM_CLIENT_CONNECTIVITY</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-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-deactivate-connection-async" title="nm_client_deactivate_connection_async ()">nm_client_deactivate_connection_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-deactivate-connection-finish" title="nm_client_deactivate_connection_finish ()">nm_client_deactivate_connection_finish</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-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-DEVICE-ADDED:CAPS" title="NM_CLIENT_DEVICE_ADDED">NM_CLIENT_DEVICE_ADDED</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-DEVICE-REMOVED:CAPS" title="NM_CLIENT_DEVICE_REMOVED">NM_CLIENT_DEVICE_REMOVED</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-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-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-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-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-connections" title="nm_client_get_connections ()">nm_client_get_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-connection-by-id" title="nm_client_get_connection_by_id ()">nm_client_get_connection_by_id</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-connection-by-path" title="nm_client_get_connection_by_path ()">nm_client_get_connection_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-connection-by-uuid" title="nm_client_get_connection_by_uuid ()">nm_client_get_connection_by_uuid</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-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-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-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-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-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-nm-running" title="nm_client_get_nm_running ()">nm_client_get_nm_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-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>
+<a class="link" href="NMClient.html#NM-CLIENT-HOSTNAME:CAPS" title="NM_CLIENT_HOSTNAME">NM_CLIENT_HOSTNAME</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-load-connections" title="nm_client_load_connections ()">nm_client_load_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-load-connections-async" title="nm_client_load_connections_async ()">nm_client_load_connections_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-load-connections-finish" title="nm_client_load_connections_finish ()">nm_client_load_connections_finish</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-ENABLED:CAPS" title="NM_CLIENT_NETWORKING_ENABLED">NM_CLIENT_NETWORKING_ENABLED</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-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>
+</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>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMClient.html#NM-CLIENT-NM-RUNNING:CAPS" title="NM_CLIENT_NM_RUNNING">NM_CLIENT_NM_RUNNING</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-PERMISSION-CHANGED:CAPS" title="NM_CLIENT_PERMISSION_CHANGED">NM_CLIENT_PERMISSION_CHANGED</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-PRIMARY-CONNECTION:CAPS" title="NM_CLIENT_PRIMARY_CONNECTION">NM_CLIENT_PRIMARY_CONNECTION</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-reload-connections" title="nm_client_reload_connections ()">nm_client_reload_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-reload-connections-async" title="nm_client_reload_connections_async ()">nm_client_reload_connections_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-reload-connections-finish" title="nm_client_reload_connections_finish ()">nm_client_reload_connections_finish</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-save-hostname" title="nm_client_save_hostname ()">nm_client_save_hostname</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-save-hostname-async" title="nm_client_save_hostname_async ()">nm_client_save_hostname_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-save-hostname-finish" title="nm_client_save_hostname_finish ()">nm_client_save_hostname_finish</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-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-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>
+<a class="link" href="NMClient.html#NM-CLIENT-STATE:CAPS" title="NM_CLIENT_STATE">NM_CLIENT_STATE</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-VERSION:CAPS" title="NM_CLIENT_VERSION">NM_CLIENT_VERSION</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-WIMAX-ENABLED:CAPS" title="NM_CLIENT_WIMAX_ENABLED">NM_CLIENT_WIMAX_ENABLED</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-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>
+<a class="link" href="NMClient.html#NM-CLIENT-WIMAX-HARDWARE-ENABLED:CAPS" title="NM_CLIENT_WIMAX_HARDWARE_ENABLED">NM_CLIENT_WIMAX_HARDWARE_ENABLED</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-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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMClient.html#NM-CLIENT-WIRELESS-ENABLED:CAPS" title="NM_CLIENT_WIRELESS_ENABLED">NM_CLIENT_WIRELESS_ENABLED</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-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>
+<a class="link" href="NMClient.html#NM-CLIENT-WIRELESS-HARDWARE-ENABLED:CAPS" title="NM_CLIENT_WIRELESS_HARDWARE_ENABLED">NM_CLIENT_WIRELESS_HARDWARE_ENABLED</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-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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMClient.html#NM-CLIENT-WWAN-ENABLED:CAPS" title="NM_CLIENT_WWAN_ENABLED">NM_CLIENT_WWAN_ENABLED</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-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>
+<a class="link" href="NMClient.html#NM-CLIENT-WWAN-HARDWARE-ENABLED:CAPS" title="NM_CLIENT_WWAN_HARDWARE_ENABLED">NM_CLIENT_WWAN_HARDWARE_ENABLED</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-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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-errors.html#NMConnectionError-enum" title="enum NMConnectionError">NMConnectionError</a>, enum in <a class="link" href="libnm-nm-errors.html" title="nm-errors">nm-errors</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMConnection.html#NMConnectionInterface" title="NMConnectionInterface">NMConnectionInterface</a>, struct in <a class="link" href="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMConnection.html#NMConnectionSerializationFlags-enum" title="enum NMConnectionSerializationFlags">NMConnectionSerializationFlags</a>, enum in <a class="link" href="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMConnection.html#nm-connection-add-setting" title="nm_connection_add_setting ()">nm_connection_add_setting</a>, function in <a class="link" href="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMConnection.html#NM-CONNECTION-CHANGED:CAPS" title="NM_CONNECTION_CHANGED">NM_CONNECTION_CHANGED</a>, macro in <a class="link" href="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMConnection.html#nm-connection-clear-secrets" title="nm_connection_clear_secrets ()">nm_connection_clear_secrets</a>, function in <a class="link" href="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMConnection.html#nm-connection-clear-settings" title="nm_connection_clear_settings ()">nm_connection_clear_settings</a>, function in <a class="link" href="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMConnection.html#nm-connection-compare" title="nm_connection_compare ()">nm_connection_compare</a>, function in <a class="link" href="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMConnection.html#nm-connection-diff" title="nm_connection_diff ()">nm_connection_diff</a>, function in <a class="link" href="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMConnection.html#nm-connection-dump" title="nm_connection_dump ()">nm_connection_dump</a>, function in <a class="link" href="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-errors.html#NM-CONNECTION-ERROR:CAPS" title="NM_CONNECTION_ERROR">NM_CONNECTION_ERROR</a>, macro in <a class="link" href="libnm-nm-errors.html" title="nm-errors">nm-errors</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-errors.html#nm-connection-error-quark" title="nm_connection_error_quark ()">nm_connection_error_quark</a>, function in <a class="link" href="libnm-nm-errors.html" title="nm-errors">nm-errors</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMConnection.html#nm-connection-get-id" title="nm_connection_get_id ()">nm_connection_get_id</a>, function in <a class="link" href="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMConnection.html#nm-connection-get-interface-name" title="nm_connection_get_interface_name ()">nm_connection_get_interface_name</a>, function in <a class="link" href="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMConnection.html#nm-connection-get-path" title="nm_connection_get_path ()">nm_connection_get_path</a>, function in <a class="link" href="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMConnection.html#nm-connection-get-setting" title="nm_connection_get_setting ()">nm_connection_get_setting</a>, function in <a class="link" href="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMConnection.html#nm-connection-get-uuid" title="nm_connection_get_uuid ()">nm_connection_get_uuid</a>, function in <a class="link" href="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMConnection.html#nm-connection-is-type" title="nm_connection_is_type ()">nm_connection_is_type</a>, function in <a class="link" href="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMConnection.html#nm-connection-is-virtual" title="nm_connection_is_virtual ()">nm_connection_is_virtual</a>, function in <a class="link" href="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMConnection.html#nm-connection-need-secrets" title="nm_connection_need_secrets ()">nm_connection_need_secrets</a>, function in <a class="link" href="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMConnection.html#nm-connection-normalize" title="nm_connection_normalize ()">nm_connection_normalize</a>, function in <a class="link" href="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMConnection.html#NM-CONNECTION-NORMALIZE-PARAM-IP6-CONFIG-METHOD:CAPS" title="NM_CONNECTION_NORMALIZE_PARAM_IP6_CONFIG_METHOD">NM_CONNECTION_NORMALIZE_PARAM_IP6_CONFIG_METHOD</a>, macro in <a class="link" href="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMConnection.html#nm-connection-remove-setting" title="nm_connection_remove_setting ()">nm_connection_remove_setting</a>, function in <a class="link" href="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMConnection.html#nm-connection-replace-settings" title="nm_connection_replace_settings ()">nm_connection_replace_settings</a>, function in <a class="link" href="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMConnection.html#NM-CONNECTION-SECRETS-CLEARED:CAPS" title="NM_CONNECTION_SECRETS_CLEARED">NM_CONNECTION_SECRETS_CLEARED</a>, macro in <a class="link" href="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMConnection.html#NM-CONNECTION-SECRETS-UPDATED:CAPS" title="NM_CONNECTION_SECRETS_UPDATED">NM_CONNECTION_SECRETS_UPDATED</a>, macro in <a class="link" href="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMConnection.html#nm-connection-set-path" title="nm_connection_set_path ()">nm_connection_set_path</a>, function in <a class="link" href="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMConnection.html#nm-connection-to-dbus" title="nm_connection_to_dbus ()">nm_connection_to_dbus</a>, function in <a class="link" href="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMConnection.html#nm-connection-update-secrets" title="nm_connection_update_secrets ()">nm_connection_update_secrets</a>, function in <a class="link" href="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMConnection.html#nm-connection-verify" title="nm_connection_verify ()">nm_connection_verify</a>, function in <a class="link" href="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NMConnectivityState-enum" title="enum NMConnectivityState">NMConnectivityState</a>, enum in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-errors.html#NMCryptoError-enum" title="enum NMCryptoError">NMCryptoError</a>, enum in <a class="link" href="libnm-nm-errors.html" title="nm-errors">nm-errors</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-errors.html#NM-CRYPTO-ERROR:CAPS" title="NM_CRYPTO_ERROR">NM_CRYPTO_ERROR</a>, macro in <a class="link" href="libnm-nm-errors.html" title="nm-errors">nm-errors</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-errors.html#nm-crypto-error-quark" title="nm_crypto_error_quark ()">nm_crypto_error_quark</a>, function in <a class="link" href="libnm-nm-errors.html" title="nm-errors">nm-errors</a>
+</dt>
+<dd></dd>
+<a name="idxD"></a><h3 class="title">D</h3>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE:CAPS" title="NM_DBUS_INTERFACE">NM_DBUS_INTERFACE</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-ACCESS-POINT:CAPS" title="NM_DBUS_INTERFACE_ACCESS_POINT">NM_DBUS_INTERFACE_ACCESS_POINT</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-ACTIVE-CONNECTION:CAPS" title="NM_DBUS_INTERFACE_ACTIVE_CONNECTION">NM_DBUS_INTERFACE_ACTIVE_CONNECTION</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-AGENT-MANAGER:CAPS" title="NM_DBUS_INTERFACE_AGENT_MANAGER">NM_DBUS_INTERFACE_AGENT_MANAGER</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE:CAPS" title="NM_DBUS_INTERFACE_DEVICE">NM_DBUS_INTERFACE_DEVICE</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-ADSL:CAPS" title="NM_DBUS_INTERFACE_DEVICE_ADSL">NM_DBUS_INTERFACE_DEVICE_ADSL</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-BLUETOOTH:CAPS" title="NM_DBUS_INTERFACE_DEVICE_BLUETOOTH">NM_DBUS_INTERFACE_DEVICE_BLUETOOTH</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-BOND:CAPS" title="NM_DBUS_INTERFACE_DEVICE_BOND">NM_DBUS_INTERFACE_DEVICE_BOND</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-BRIDGE:CAPS" title="NM_DBUS_INTERFACE_DEVICE_BRIDGE">NM_DBUS_INTERFACE_DEVICE_BRIDGE</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-GENERIC:CAPS" title="NM_DBUS_INTERFACE_DEVICE_GENERIC">NM_DBUS_INTERFACE_DEVICE_GENERIC</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-GRE:CAPS" title="NM_DBUS_INTERFACE_DEVICE_GRE">NM_DBUS_INTERFACE_DEVICE_GRE</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-INFINIBAND:CAPS" title="NM_DBUS_INTERFACE_DEVICE_INFINIBAND">NM_DBUS_INTERFACE_DEVICE_INFINIBAND</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-MACVLAN:CAPS" title="NM_DBUS_INTERFACE_DEVICE_MACVLAN">NM_DBUS_INTERFACE_DEVICE_MACVLAN</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-MODEM:CAPS" title="NM_DBUS_INTERFACE_DEVICE_MODEM">NM_DBUS_INTERFACE_DEVICE_MODEM</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-OLPC-MESH:CAPS" title="NM_DBUS_INTERFACE_DEVICE_OLPC_MESH">NM_DBUS_INTERFACE_DEVICE_OLPC_MESH</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-TEAM:CAPS" title="NM_DBUS_INTERFACE_DEVICE_TEAM">NM_DBUS_INTERFACE_DEVICE_TEAM</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-TUN:CAPS" title="NM_DBUS_INTERFACE_DEVICE_TUN">NM_DBUS_INTERFACE_DEVICE_TUN</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-VETH:CAPS" title="NM_DBUS_INTERFACE_DEVICE_VETH">NM_DBUS_INTERFACE_DEVICE_VETH</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-VLAN:CAPS" title="NM_DBUS_INTERFACE_DEVICE_VLAN">NM_DBUS_INTERFACE_DEVICE_VLAN</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-VXLAN:CAPS" title="NM_DBUS_INTERFACE_DEVICE_VXLAN">NM_DBUS_INTERFACE_DEVICE_VXLAN</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-WIMAX:CAPS" title="NM_DBUS_INTERFACE_DEVICE_WIMAX">NM_DBUS_INTERFACE_DEVICE_WIMAX</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-WIRED:CAPS" title="NM_DBUS_INTERFACE_DEVICE_WIRED">NM_DBUS_INTERFACE_DEVICE_WIRED</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-WIRELESS:CAPS" title="NM_DBUS_INTERFACE_DEVICE_WIRELESS">NM_DBUS_INTERFACE_DEVICE_WIRELESS</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DHCP4-CONFIG:CAPS" title="NM_DBUS_INTERFACE_DHCP4_CONFIG">NM_DBUS_INTERFACE_DHCP4_CONFIG</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DHCP6-CONFIG:CAPS" title="NM_DBUS_INTERFACE_DHCP6_CONFIG">NM_DBUS_INTERFACE_DHCP6_CONFIG</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-IP4-CONFIG:CAPS" title="NM_DBUS_INTERFACE_IP4_CONFIG">NM_DBUS_INTERFACE_IP4_CONFIG</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-IP6-CONFIG:CAPS" title="NM_DBUS_INTERFACE_IP6_CONFIG">NM_DBUS_INTERFACE_IP6_CONFIG</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-SECRET-AGENT:CAPS" title="NM_DBUS_INTERFACE_SECRET_AGENT">NM_DBUS_INTERFACE_SECRET_AGENT</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-SETTINGS:CAPS" title="NM_DBUS_INTERFACE_SETTINGS">NM_DBUS_INTERFACE_SETTINGS</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-SETTINGS-CONNECTION:CAPS" title="NM_DBUS_INTERFACE_SETTINGS_CONNECTION">NM_DBUS_INTERFACE_SETTINGS_CONNECTION</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-SETTINGS-CONNECTION-SECRETS:CAPS" title="NM_DBUS_INTERFACE_SETTINGS_CONNECTION_SECRETS">NM_DBUS_INTERFACE_SETTINGS_CONNECTION_SECRETS</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-INTERFACE-VPN:CAPS" title="NM_DBUS_INTERFACE_VPN">NM_DBUS_INTERFACE_VPN</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-INTERFACE-VPN-CONNECTION:CAPS" title="NM_DBUS_INTERFACE_VPN_CONNECTION">NM_DBUS_INTERFACE_VPN_CONNECTION</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-WIMAX-NSP:CAPS" title="NM_DBUS_INTERFACE_WIMAX_NSP">NM_DBUS_INTERFACE_WIMAX_NSP</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-INVALID-VPN-CONNECTION:CAPS" title="NM_DBUS_INVALID_VPN_CONNECTION">NM_DBUS_INVALID_VPN_CONNECTION</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-NO-ACTIVE-VPN-CONNECTION:CAPS" title="NM_DBUS_NO_ACTIVE_VPN_CONNECTION">NM_DBUS_NO_ACTIVE_VPN_CONNECTION</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-NO-VPN-CONNECTIONS:CAPS" title="NM_DBUS_NO_VPN_CONNECTIONS">NM_DBUS_NO_VPN_CONNECTIONS</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-PATH:CAPS" title="NM_DBUS_PATH">NM_DBUS_PATH</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-PATH-ACCESS-POINT:CAPS" title="NM_DBUS_PATH_ACCESS_POINT">NM_DBUS_PATH_ACCESS_POINT</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-PATH-AGENT-MANAGER:CAPS" title="NM_DBUS_PATH_AGENT_MANAGER">NM_DBUS_PATH_AGENT_MANAGER</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-PATH-SECRET-AGENT:CAPS" title="NM_DBUS_PATH_SECRET_AGENT">NM_DBUS_PATH_SECRET_AGENT</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-PATH-SETTINGS:CAPS" title="NM_DBUS_PATH_SETTINGS">NM_DBUS_PATH_SETTINGS</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-PATH-SETTINGS-CONNECTION:CAPS" title="NM_DBUS_PATH_SETTINGS_CONNECTION">NM_DBUS_PATH_SETTINGS_CONNECTION</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-PATH-VPN:CAPS" title="NM_DBUS_PATH_VPN">NM_DBUS_PATH_VPN</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-PATH-VPN-CONNECTION:CAPS" title="NM_DBUS_PATH_VPN_CONNECTION">NM_DBUS_PATH_VPN_CONNECTION</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-PATH-WIMAX-NSP:CAPS" title="NM_DBUS_PATH_WIMAX_NSP">NM_DBUS_PATH_WIMAX_NSP</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-SERVICE:CAPS" title="NM_DBUS_SERVICE">NM_DBUS_SERVICE</a>, macro in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-ALREADY-STARTED:CAPS" title="NM_DBUS_VPN_ALREADY_STARTED">NM_DBUS_VPN_ALREADY_STARTED</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-ALREADY-STOPPED:CAPS" title="NM_DBUS_VPN_ALREADY_STOPPED">NM_DBUS_VPN_ALREADY_STOPPED</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-BAD-ARGUMENTS:CAPS" title="NM_DBUS_VPN_BAD_ARGUMENTS">NM_DBUS_VPN_BAD_ARGUMENTS</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-ERROR-PREFIX:CAPS" title="NM_DBUS_VPN_ERROR_PREFIX">NM_DBUS_VPN_ERROR_PREFIX</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-INTERACTIVE-NOT-SUPPORTED:CAPS" title="NM_DBUS_VPN_INTERACTIVE_NOT_SUPPORTED">NM_DBUS_VPN_INTERACTIVE_NOT_SUPPORTED</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-SIGNAL-CONNECT-FAILED:CAPS" title="NM_DBUS_VPN_SIGNAL_CONNECT_FAILED">NM_DBUS_VPN_SIGNAL_CONNECT_FAILED</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-SIGNAL-IP4-CONFIG:CAPS" title="NM_DBUS_VPN_SIGNAL_IP4_CONFIG">NM_DBUS_VPN_SIGNAL_IP4_CONFIG</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-SIGNAL-IP-CONFIG-BAD:CAPS" title="NM_DBUS_VPN_SIGNAL_IP_CONFIG_BAD">NM_DBUS_VPN_SIGNAL_IP_CONFIG_BAD</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-SIGNAL-LAUNCH-FAILED:CAPS" title="NM_DBUS_VPN_SIGNAL_LAUNCH_FAILED">NM_DBUS_VPN_SIGNAL_LAUNCH_FAILED</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-SIGNAL-LOGIN-BANNER:CAPS" title="NM_DBUS_VPN_SIGNAL_LOGIN_BANNER">NM_DBUS_VPN_SIGNAL_LOGIN_BANNER</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-SIGNAL-LOGIN-FAILED:CAPS" title="NM_DBUS_VPN_SIGNAL_LOGIN_FAILED">NM_DBUS_VPN_SIGNAL_LOGIN_FAILED</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-SIGNAL-STATE-CHANGE:CAPS" title="NM_DBUS_VPN_SIGNAL_STATE_CHANGE">NM_DBUS_VPN_SIGNAL_STATE_CHANGE</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-SIGNAL-VPN-CONFIG-BAD:CAPS" title="NM_DBUS_VPN_SIGNAL_VPN_CONFIG_BAD">NM_DBUS_VPN_SIGNAL_VPN_CONFIG_BAD</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-STARTING-IN-PROGRESS:CAPS" title="NM_DBUS_VPN_STARTING_IN_PROGRESS">NM_DBUS_VPN_STARTING_IN_PROGRESS</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-STOPPING-IN-PROGRESS:CAPS" title="NM_DBUS_VPN_STOPPING_IN_PROGRESS">NM_DBUS_VPN_STOPPING_IN_PROGRESS</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-WRONG-STATE:CAPS" title="NM_DBUS_VPN_WRONG_STATE">NM_DBUS_VPN_WRONG_STATE</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-version.html#NM-DEPRECATED-IN-0-9-10:CAPS" title="NM_DEPRECATED_IN_0_9_10">NM_DEPRECATED_IN_0_9_10</a>, macro in <a class="link" href="libnm-nm-version.html" title="nm-version">nm-version</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-version.html#NM-DEPRECATED-IN-0-9-10-FOR:CAPS" title="NM_DEPRECATED_IN_0_9_10_FOR()">NM_DEPRECATED_IN_0_9_10_FOR</a>, macro in <a class="link" href="libnm-nm-version.html" title="nm-version">nm-version</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-version.html#NM-DEPRECATED-IN-1-0:CAPS" title="NM_DEPRECATED_IN_1_0">NM_DEPRECATED_IN_1_0</a>, macro in <a class="link" href="libnm-nm-version.html" title="nm-version">nm-version</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-version.html#NM-DEPRECATED-IN-1-0-FOR:CAPS" title="NM_DEPRECATED_IN_1_0_FOR()">NM_DEPRECATED_IN_1_0_FOR</a>, macro in <a class="link" href="libnm-nm-version.html" title="nm-version">nm-version</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDevice.html#NMDevice-struct" title="struct 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--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--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--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--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--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--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--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--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--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--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--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--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--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--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--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--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--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--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--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="NMDeviceAdsl.html#NMDeviceAdsl-struct" title="struct NMDeviceAdsl">NMDeviceAdsl</a>, struct 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>
+</dt>
+<dd></dd>
+<dt>
+<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>
+<a class="link" href="NMDeviceBond.html#NMDeviceBond-struct" title="struct 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--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--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>
+<a class="link" href="NMDeviceBridge.html#NMDeviceBridge-struct" title="struct 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--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--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>
+<a class="link" href="NMDeviceBt.html#NMDeviceBt-struct" title="struct 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>
+</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>
+</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>
+<a class="link" href="libnm-nm-dbus-interface.html#NMDeviceCapabilities-enum" title="enum NMDeviceCapabilities">NMDeviceCapabilities</a>, enum in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<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="libnm-nm-errors.html#NMDeviceError-enum" title="enum NMDeviceError">NMDeviceError</a>, enum in <a class="link" href="libnm-nm-errors.html" title="nm-errors">nm-errors</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceEthernet.html#NMDeviceEthernet-struct" title="struct 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--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--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--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#NMDeviceEthernetClass" title="NMDeviceEthernetClass">NMDeviceEthernetClass</a>, struct in <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet">NMDeviceEthernet</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceGeneric.html#NMDeviceGeneric-struct" title="struct NMDeviceGeneric">NMDeviceGeneric</a>, struct in <a class="link" href="NMDeviceGeneric.html" title="NMDeviceGeneric">NMDeviceGeneric</a>
+</dt>
+<dd></dd>
+<dt>
+<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="NMDeviceInfiniband.html#NMDeviceInfiniband-struct" title="struct 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>
+<a class="link" href="NMDeviceModem.html#NMDeviceModem-struct" title="struct 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--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="libnm-nm-dbus-interface.html#NMDeviceModemCapabilities-enum" title="enum NMDeviceModemCapabilities">NMDeviceModemCapabilities</a>, enum in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</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>
+<a class="link" href="NMDeviceOlpcMesh.html#NMDeviceOlpcMesh-struct" title="struct 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>
+</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>
+</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>
+<a class="link" href="libnm-nm-dbus-interface.html#NMDeviceState-enum" title="enum NMDeviceState">NMDeviceState</a>, enum in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NMDeviceStateReason-enum" title="enum NMDeviceStateReason">NMDeviceStateReason</a>, enum in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceTeam.html#NMDeviceTeam-struct" title="struct 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="libnm-nm-dbus-interface.html#NMDeviceType-enum" title="enum NMDeviceType">NMDeviceType</a>, enum in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceVlan.html#NMDeviceVlan-struct" title="struct 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--parent" title='The "parent" property'>NMDeviceVlan:parent</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>
+<a class="link" href="NMDeviceWifi.html#NMDeviceWifi-struct" title="struct 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>
+</dt>
+<dd></dd>
+<dt>
+<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--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--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--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--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--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="libnm-nm-dbus-interface.html#NMDeviceWifiCapabilities-enum" title="enum NMDeviceWifiCapabilities">NMDeviceWifiCapabilities</a>, enum in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</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>
+<a class="link" href="NMDeviceWimax.html#NMDeviceWimax-struct" title="struct 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--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--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--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--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--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--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--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--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#NMDeviceWimaxClass" title="NMDeviceWimaxClass">NMDeviceWimaxClass</a>, struct in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDevice.html#NM-DEVICE-ACTIVE-CONNECTION:CAPS" title="NM_DEVICE_ACTIVE_CONNECTION">NM_DEVICE_ACTIVE_CONNECTION</a>, macro in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceAdsl.html#NM-DEVICE-ADSL-CARRIER:CAPS" title="NM_DEVICE_ADSL_CARRIER">NM_DEVICE_ADSL_CARRIER</a>, macro 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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDevice.html#NM-DEVICE-AUTOCONNECT:CAPS" title="NM_DEVICE_AUTOCONNECT">NM_DEVICE_AUTOCONNECT</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-AVAILABLE-CONNECTIONS:CAPS" title="NM_DEVICE_AVAILABLE_CONNECTIONS">NM_DEVICE_AVAILABLE_CONNECTIONS</a>, macro in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceBond.html#NM-DEVICE-BOND-CARRIER:CAPS" title="NM_DEVICE_BOND_CARRIER">NM_DEVICE_BOND_CARRIER</a>, macro 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>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceBond.html#NM-DEVICE-BOND-HW-ADDRESS:CAPS" title="NM_DEVICE_BOND_HW_ADDRESS">NM_DEVICE_BOND_HW_ADDRESS</a>, macro in <a class="link" href="NMDeviceBond.html" title="NMDeviceBond">NMDeviceBond</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceBond.html#NM-DEVICE-BOND-SLAVES:CAPS" title="NM_DEVICE_BOND_SLAVES">NM_DEVICE_BOND_SLAVES</a>, macro in <a class="link" href="NMDeviceBond.html" title="NMDeviceBond">NMDeviceBond</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceBridge.html#NM-DEVICE-BRIDGE-CARRIER:CAPS" title="NM_DEVICE_BRIDGE_CARRIER">NM_DEVICE_BRIDGE_CARRIER</a>, macro 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>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceBridge.html#NM-DEVICE-BRIDGE-HW-ADDRESS:CAPS" title="NM_DEVICE_BRIDGE_HW_ADDRESS">NM_DEVICE_BRIDGE_HW_ADDRESS</a>, macro in <a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge">NMDeviceBridge</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceBridge.html#NM-DEVICE-BRIDGE-SLAVES:CAPS" title="NM_DEVICE_BRIDGE_SLAVES">NM_DEVICE_BRIDGE_SLAVES</a>, macro in <a class="link" href="NMDeviceBridge.html" title="NMDeviceBridge">NMDeviceBridge</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceBt.html#NM-DEVICE-BT-CAPABILITIES:CAPS" title="NM_DEVICE_BT_CAPABILITIES">NM_DEVICE_BT_CAPABILITIES</a>, macro 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>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceBt.html#NM-DEVICE-BT-HW-ADDRESS:CAPS" title="NM_DEVICE_BT_HW_ADDRESS">NM_DEVICE_BT_HW_ADDRESS</a>, macro in <a class="link" href="NMDeviceBt.html" title="NMDeviceBt">NMDeviceBt</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceBt.html#NM-DEVICE-BT-NAME:CAPS" title="NM_DEVICE_BT_NAME">NM_DEVICE_BT_NAME</a>, macro in <a class="link" href="NMDeviceBt.html" title="NMDeviceBt">NMDeviceBt</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDevice.html#NM-DEVICE-CAPABILITIES:CAPS" title="NM_DEVICE_CAPABILITIES">NM_DEVICE_CAPABILITIES</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-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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDevice.html#nm-device-delete" title="nm_device_delete ()">nm_device_delete</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-delete-async" title="nm_device_delete_async ()">nm_device_delete_async</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-delete-finish" title="nm_device_delete_finish ()">nm_device_delete_finish</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-DEVICE-TYPE:CAPS" title="NM_DEVICE_DEVICE_TYPE">NM_DEVICE_DEVICE_TYPE</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-DHCP4-CONFIG:CAPS" title="NM_DEVICE_DHCP4_CONFIG">NM_DEVICE_DHCP4_CONFIG</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-DHCP6-CONFIG:CAPS" title="NM_DEVICE_DHCP6_CONFIG">NM_DEVICE_DHCP6_CONFIG</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-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>
+<a class="link" href="NMDevice.html#nm-device-disconnect-async" title="nm_device_disconnect_async ()">nm_device_disconnect_async</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-finish" title="nm_device_disconnect_finish ()">nm_device_disconnect_finish</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-DRIVER:CAPS" title="NM_DEVICE_DRIVER">NM_DEVICE_DRIVER</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-DRIVER-VERSION:CAPS" title="NM_DEVICE_DRIVER_VERSION">NM_DEVICE_DRIVER_VERSION</a>, macro in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-errors.html#NM-DEVICE-ERROR:CAPS" title="NM_DEVICE_ERROR">NM_DEVICE_ERROR</a>, macro in <a class="link" href="libnm-nm-errors.html" title="nm-errors">nm-errors</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-errors.html#nm-device-error-quark" title="nm_device_error_quark ()">nm_device_error_quark</a>, function in <a class="link" href="libnm-nm-errors.html" title="nm-errors">nm-errors</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>
+<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>
+</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>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceEthernet.html#NM-DEVICE-ETHERNET-HW-ADDRESS:CAPS" title="NM_DEVICE_ETHERNET_HW_ADDRESS">NM_DEVICE_ETHERNET_HW_ADDRESS</a>, macro in <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet">NMDeviceEthernet</a>
+</dt>
+<dd></dd>
+<dt>
+<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>, macro in <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet">NMDeviceEthernet</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceEthernet.html#NM-DEVICE-ETHERNET-SPEED:CAPS" title="NM_DEVICE_ETHERNET_SPEED">NM_DEVICE_ETHERNET_SPEED</a>, macro in <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet">NMDeviceEthernet</a>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDevice.html#NM-DEVICE-FIRMWARE-MISSING:CAPS" title="NM_DEVICE_FIRMWARE_MISSING">NM_DEVICE_FIRMWARE_MISSING</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-FIRMWARE-VERSION:CAPS" title="NM_DEVICE_FIRMWARE_VERSION">NM_DEVICE_FIRMWARE_VERSION</a>, macro in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+</dt>
+<dd></dd>
+<dt>
+<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="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="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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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>
+<a class="link" href="NMDeviceInfiniband.html#NM-DEVICE-INFINIBAND-CARRIER:CAPS" title="NM_DEVICE_INFINIBAND_CARRIER">NM_DEVICE_INFINIBAND_CARRIER</a>, macro 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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceInfiniband.html#NM-DEVICE-INFINIBAND-HW-ADDRESS:CAPS" title="NM_DEVICE_INFINIBAND_HW_ADDRESS">NM_DEVICE_INFINIBAND_HW_ADDRESS</a>, macro in <a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband">NMDeviceInfiniband</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDevice.html#NM-DEVICE-INTERFACE:CAPS" title="NM_DEVICE_INTERFACE">NM_DEVICE_INTERFACE</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-IP4-CONFIG:CAPS" title="NM_DEVICE_IP4_CONFIG">NM_DEVICE_IP4_CONFIG</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-IP6-CONFIG:CAPS" title="NM_DEVICE_IP6_CONFIG">NM_DEVICE_IP6_CONFIG</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-IP-INTERFACE:CAPS" title="NM_DEVICE_IP_INTERFACE">NM_DEVICE_IP_INTERFACE</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-is-software" title="nm_device_is_software ()">nm_device_is_software</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-MANAGED:CAPS" title="NM_DEVICE_MANAGED">NM_DEVICE_MANAGED</a>, macro in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceModem.html#NM-DEVICE-MODEM-CURRENT-CAPABILITIES:CAPS" title="NM_DEVICE_MODEM_CURRENT_CAPABILITIES">NM_DEVICE_MODEM_CURRENT_CAPABILITIES</a>, macro 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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceModem.html#NM-DEVICE-MODEM-MODEM-CAPABILITIES:CAPS" title="NM_DEVICE_MODEM_MODEM_CAPABILITIES">NM_DEVICE_MODEM_MODEM_CAPABILITIES</a>, macro in <a class="link" href="NMDeviceModem.html" title="NMDeviceModem">NMDeviceModem</a>
+</dt>
+<dd></dd>
+<dt>
+<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="NMDeviceOlpcMesh.html#NM-DEVICE-OLPC-MESH-ACTIVE-CHANNEL:CAPS" title="NM_DEVICE_OLPC_MESH_ACTIVE_CHANNEL">NM_DEVICE_OLPC_MESH_ACTIVE_CHANNEL</a>, macro 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-COMPANION:CAPS" title="NM_DEVICE_OLPC_MESH_COMPANION">NM_DEVICE_OLPC_MESH_COMPANION</a>, macro 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>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<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>, macro 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>
+<a class="link" href="NMDevice.html#NM-DEVICE-PRODUCT:CAPS" title="NM_DEVICE_PRODUCT">NM_DEVICE_PRODUCT</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-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>
+<a class="link" href="NMDevice.html#NM-DEVICE-STATE:CAPS" title="NM_DEVICE_STATE">NM_DEVICE_STATE</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-STATE-REASON:CAPS" title="NM_DEVICE_STATE_REASON">NM_DEVICE_STATE_REASON</a>, macro in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+</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-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-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>
+<dt>
+<a class="link" href="NMDevice.html#NM-DEVICE-VENDOR:CAPS" title="NM_DEVICE_VENDOR">NM_DEVICE_VENDOR</a>, macro in <a class="link" href="NMDevice.html" title="NMDevice">NMDevice</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceVlan.html#NM-DEVICE-VLAN-CARRIER:CAPS" title="NM_DEVICE_VLAN_CARRIER">NM_DEVICE_VLAN_CARRIER</a>, macro 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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceVlan.html#nm-device-vlan-get-parent" title="nm_device_vlan_get_parent ()">nm_device_vlan_get_parent</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceVlan.html#NM-DEVICE-VLAN-HW-ADDRESS:CAPS" title="NM_DEVICE_VLAN_HW_ADDRESS">NM_DEVICE_VLAN_HW_ADDRESS</a>, macro in <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan">NMDeviceVlan</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceVlan.html#NM-DEVICE-VLAN-PARENT:CAPS" title="NM_DEVICE_VLAN_PARENT">NM_DEVICE_VLAN_PARENT</a>, macro in <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan">NMDeviceVlan</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceVlan.html#NM-DEVICE-VLAN-VLAN-ID:CAPS" title="NM_DEVICE_VLAN_VLAN_ID">NM_DEVICE_VLAN_VLAN_ID</a>, macro in <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan">NMDeviceVlan</a>
+</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>
+<dt>
+<a class="link" href="NMDeviceWifi.html#NM-DEVICE-WIFI-BITRATE:CAPS" title="NM_DEVICE_WIFI_BITRATE">NM_DEVICE_WIFI_BITRATE</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-CAPABILITIES:CAPS" title="NM_DEVICE_WIFI_CAPABILITIES">NM_DEVICE_WIFI_CAPABILITIES</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-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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceWifi.html#NM-DEVICE-WIFI-HW-ADDRESS:CAPS" title="NM_DEVICE_WIFI_HW_ADDRESS">NM_DEVICE_WIFI_HW_ADDRESS</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-MODE:CAPS" title="NM_DEVICE_WIFI_MODE">NM_DEVICE_WIFI_MODE</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-PERMANENT-HW-ADDRESS:CAPS" title="NM_DEVICE_WIFI_PERMANENT_HW_ADDRESS">NM_DEVICE_WIFI_PERMANENT_HW_ADDRESS</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-request-scan" title="nm_device_wifi_request_scan ()">nm_device_wifi_request_scan</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-request-scan-async" title="nm_device_wifi_request_scan_async ()">nm_device_wifi_request_scan_async</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-request-scan-finish" title="nm_device_wifi_request_scan_finish ()">nm_device_wifi_request_scan_finish</a>, function in <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceWimax.html#NM-DEVICE-WIMAX-ACTIVE-NSP:CAPS" title="NM_DEVICE_WIMAX_ACTIVE_NSP">NM_DEVICE_WIMAX_ACTIVE_NSP</a>, macro in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceWimax.html#NM-DEVICE-WIMAX-BSID:CAPS" title="NM_DEVICE_WIMAX_BSID">NM_DEVICE_WIMAX_BSID</a>, macro in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceWimax.html#NM-DEVICE-WIMAX-CENTER-FREQUENCY:CAPS" title="NM_DEVICE_WIMAX_CENTER_FREQUENCY">NM_DEVICE_WIMAX_CENTER_FREQUENCY</a>, macro in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceWimax.html#NM-DEVICE-WIMAX-CINR:CAPS" title="NM_DEVICE_WIMAX_CINR">NM_DEVICE_WIMAX_CINR</a>, macro 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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceWimax.html#NM-DEVICE-WIMAX-HW-ADDRESS:CAPS" title="NM_DEVICE_WIMAX_HW_ADDRESS">NM_DEVICE_WIMAX_HW_ADDRESS</a>, macro 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>
+<a class="link" href="NMDeviceWimax.html#NM-DEVICE-WIMAX-RSSI:CAPS" title="NM_DEVICE_WIMAX_RSSI">NM_DEVICE_WIMAX_RSSI</a>, macro in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDeviceWimax.html#NM-DEVICE-WIMAX-TX-POWER:CAPS" title="NM_DEVICE_WIMAX_TX_POWER">NM_DEVICE_WIMAX_TX_POWER</a>, macro in <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDhcpConfig.html#NMDhcpConfig-struct" title="struct NMDhcpConfig">NMDhcpConfig</a>, struct in <a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig">NMDhcpConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDhcpConfig.html#NMDhcpConfig--family" title='The "family" property'>NMDhcpConfig:family</a>, object property in <a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig">NMDhcpConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDhcpConfig.html#NMDhcpConfig--options" title='The "options" property'>NMDhcpConfig:options</a>, object property in <a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig">NMDhcpConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDhcpConfig.html#NMDhcpConfigClass" title="NMDhcpConfigClass">NMDhcpConfigClass</a>, struct in <a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig">NMDhcpConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDhcpConfig.html#NM-DHCP-CONFIG-FAMILY:CAPS" title="NM_DHCP_CONFIG_FAMILY">NM_DHCP_CONFIG_FAMILY</a>, macro in <a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig">NMDhcpConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDhcpConfig.html#nm-dhcp-config-get-family" title="nm_dhcp_config_get_family ()">nm_dhcp_config_get_family</a>, function in <a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig">NMDhcpConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDhcpConfig.html#nm-dhcp-config-get-one-option" title="nm_dhcp_config_get_one_option ()">nm_dhcp_config_get_one_option</a>, function in <a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig">NMDhcpConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDhcpConfig.html#nm-dhcp-config-get-options" title="nm_dhcp_config_get_options ()">nm_dhcp_config_get_options</a>, function in <a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig">NMDhcpConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMDhcpConfig.html#NM-DHCP-CONFIG-OPTIONS:CAPS" title="NM_DHCP_CONFIG_OPTIONS">NM_DHCP_CONFIG_OPTIONS</a>, macro in <a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig">NMDhcpConfig</a>
+</dt>
+<dd></dd>
+<a name="idxE"></a><h3 class="title">E</h3>
+<dt>
+<a class="link" href="libnm-nm-version.html#NM-ENCODE-VERSION:CAPS" title="NM_ENCODE_VERSION()">NM_ENCODE_VERSION</a>, macro in <a class="link" href="libnm-nm-version.html" title="nm-version">nm-version</a>
+</dt>
+<dd></dd>
+<a name="idxI"></a><h3 class="title">I</h3>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#NMIPAddress">NMIPAddress</a>, typedef in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIPConfig.html#NMIPConfig-struct" title="struct NMIPConfig">NMIPConfig</a>, struct in <a class="link" href="NMIPConfig.html" title="NMIPConfig">NMIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIPConfig.html#NMIPConfig--addresses" title='The "addresses" property'>NMIPConfig:addresses</a>, object property in <a class="link" href="NMIPConfig.html" title="NMIPConfig">NMIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIPConfig.html#NMIPConfig--domains" title='The "domains" property'>NMIPConfig:domains</a>, object property in <a class="link" href="NMIPConfig.html" title="NMIPConfig">NMIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIPConfig.html#NMIPConfig--family" title='The "family" property'>NMIPConfig:family</a>, object property in <a class="link" href="NMIPConfig.html" title="NMIPConfig">NMIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIPConfig.html#NMIPConfig--gateway" title='The "gateway" property'>NMIPConfig:gateway</a>, object property in <a class="link" href="NMIPConfig.html" title="NMIPConfig">NMIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIPConfig.html#NMIPConfig--nameservers" title='The "nameservers" property'>NMIPConfig:nameservers</a>, object property in <a class="link" href="NMIPConfig.html" title="NMIPConfig">NMIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIPConfig.html#NMIPConfig--routes" title='The "routes" property'>NMIPConfig:routes</a>, object property in <a class="link" href="NMIPConfig.html" title="NMIPConfig">NMIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIPConfig.html#NMIPConfig--searches" title='The "searches" property'>NMIPConfig:searches</a>, object property in <a class="link" href="NMIPConfig.html" title="NMIPConfig">NMIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIPConfig.html#NMIPConfig--wins-servers" title='The "wins-servers" property'>NMIPConfig:wins-servers</a>, object property in <a class="link" href="NMIPConfig.html" title="NMIPConfig">NMIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIPConfig.html#NMIPConfigClass" title="NMIPConfigClass">NMIPConfigClass</a>, struct in <a class="link" href="NMIPConfig.html" title="NMIPConfig">NMIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#NMIPRoute">NMIPRoute</a>, typedef in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-address-dup" title="nm_ip_address_dup ()">nm_ip_address_dup</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-address-equal" title="nm_ip_address_equal ()">nm_ip_address_equal</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-address-get-address" title="nm_ip_address_get_address ()">nm_ip_address_get_address</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-address-get-address-binary" title="nm_ip_address_get_address_binary ()">nm_ip_address_get_address_binary</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-address-get-attribute" title="nm_ip_address_get_attribute ()">nm_ip_address_get_attribute</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-address-get-attribute-names" title="nm_ip_address_get_attribute_names ()">nm_ip_address_get_attribute_names</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-address-get-family" title="nm_ip_address_get_family ()">nm_ip_address_get_family</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-address-get-prefix" title="nm_ip_address_get_prefix ()">nm_ip_address_get_prefix</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-address-new" title="nm_ip_address_new ()">nm_ip_address_new</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-address-new-binary" title="nm_ip_address_new_binary ()">nm_ip_address_new_binary</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-address-ref" title="nm_ip_address_ref ()">nm_ip_address_ref</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-address-set-address" title="nm_ip_address_set_address ()">nm_ip_address_set_address</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-address-set-address-binary" title="nm_ip_address_set_address_binary ()">nm_ip_address_set_address_binary</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-address-set-attribute" title="nm_ip_address_set_attribute ()">nm_ip_address_set_attribute</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-address-set-prefix" title="nm_ip_address_set_prefix ()">nm_ip_address_set_prefix</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-address-unref" title="nm_ip_address_unref ()">nm_ip_address_unref</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIPConfig.html#NM-IP-CONFIG-ADDRESSES:CAPS" title="NM_IP_CONFIG_ADDRESSES">NM_IP_CONFIG_ADDRESSES</a>, macro in <a class="link" href="NMIPConfig.html" title="NMIPConfig">NMIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIPConfig.html#NM-IP-CONFIG-DOMAINS:CAPS" title="NM_IP_CONFIG_DOMAINS">NM_IP_CONFIG_DOMAINS</a>, macro in <a class="link" href="NMIPConfig.html" title="NMIPConfig">NMIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIPConfig.html#NM-IP-CONFIG-FAMILY:CAPS" title="NM_IP_CONFIG_FAMILY">NM_IP_CONFIG_FAMILY</a>, macro in <a class="link" href="NMIPConfig.html" title="NMIPConfig">NMIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIPConfig.html#NM-IP-CONFIG-GATEWAY:CAPS" title="NM_IP_CONFIG_GATEWAY">NM_IP_CONFIG_GATEWAY</a>, macro in <a class="link" href="NMIPConfig.html" title="NMIPConfig">NMIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIPConfig.html#nm-ip-config-get-addresses" title="nm_ip_config_get_addresses ()">nm_ip_config_get_addresses</a>, function in <a class="link" href="NMIPConfig.html" title="NMIPConfig">NMIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIPConfig.html#nm-ip-config-get-domains" title="nm_ip_config_get_domains ()">nm_ip_config_get_domains</a>, function in <a class="link" href="NMIPConfig.html" title="NMIPConfig">NMIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIPConfig.html#nm-ip-config-get-family" title="nm_ip_config_get_family ()">nm_ip_config_get_family</a>, function in <a class="link" href="NMIPConfig.html" title="NMIPConfig">NMIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIPConfig.html#nm-ip-config-get-gateway" title="nm_ip_config_get_gateway ()">nm_ip_config_get_gateway</a>, function in <a class="link" href="NMIPConfig.html" title="NMIPConfig">NMIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIPConfig.html#nm-ip-config-get-nameservers" title="nm_ip_config_get_nameservers ()">nm_ip_config_get_nameservers</a>, function in <a class="link" href="NMIPConfig.html" title="NMIPConfig">NMIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIPConfig.html#nm-ip-config-get-routes" title="nm_ip_config_get_routes ()">nm_ip_config_get_routes</a>, function in <a class="link" href="NMIPConfig.html" title="NMIPConfig">NMIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIPConfig.html#nm-ip-config-get-searches" title="nm_ip_config_get_searches ()">nm_ip_config_get_searches</a>, function in <a class="link" href="NMIPConfig.html" title="NMIPConfig">NMIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIPConfig.html#nm-ip-config-get-wins-servers" title="nm_ip_config_get_wins_servers ()">nm_ip_config_get_wins_servers</a>, function in <a class="link" href="NMIPConfig.html" title="NMIPConfig">NMIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIPConfig.html#NM-IP-CONFIG-NAMESERVERS:CAPS" title="NM_IP_CONFIG_NAMESERVERS">NM_IP_CONFIG_NAMESERVERS</a>, macro in <a class="link" href="NMIPConfig.html" title="NMIPConfig">NMIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIPConfig.html#NM-IP-CONFIG-ROUTES:CAPS" title="NM_IP_CONFIG_ROUTES">NM_IP_CONFIG_ROUTES</a>, macro in <a class="link" href="NMIPConfig.html" title="NMIPConfig">NMIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIPConfig.html#NM-IP-CONFIG-SEARCHES:CAPS" title="NM_IP_CONFIG_SEARCHES">NM_IP_CONFIG_SEARCHES</a>, macro in <a class="link" href="NMIPConfig.html" title="NMIPConfig">NMIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMIPConfig.html#NM-IP-CONFIG-WINS-SERVERS:CAPS" title="NM_IP_CONFIG_WINS_SERVERS">NM_IP_CONFIG_WINS_SERVERS</a>, macro in <a class="link" href="NMIPConfig.html" title="NMIPConfig">NMIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-route-dup" title="nm_ip_route_dup ()">nm_ip_route_dup</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-route-equal" title="nm_ip_route_equal ()">nm_ip_route_equal</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-route-get-attribute" title="nm_ip_route_get_attribute ()">nm_ip_route_get_attribute</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-route-get-attribute-names" title="nm_ip_route_get_attribute_names ()">nm_ip_route_get_attribute_names</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-route-get-dest" title="nm_ip_route_get_dest ()">nm_ip_route_get_dest</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-route-get-dest-binary" title="nm_ip_route_get_dest_binary ()">nm_ip_route_get_dest_binary</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-route-get-family" title="nm_ip_route_get_family ()">nm_ip_route_get_family</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-route-get-metric" title="nm_ip_route_get_metric ()">nm_ip_route_get_metric</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-route-get-next-hop" title="nm_ip_route_get_next_hop ()">nm_ip_route_get_next_hop</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-route-get-next-hop-binary" title="nm_ip_route_get_next_hop_binary ()">nm_ip_route_get_next_hop_binary</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-route-get-prefix" title="nm_ip_route_get_prefix ()">nm_ip_route_get_prefix</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-route-new" title="nm_ip_route_new ()">nm_ip_route_new</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-route-new-binary" title="nm_ip_route_new_binary ()">nm_ip_route_new_binary</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-route-ref" title="nm_ip_route_ref ()">nm_ip_route_ref</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-route-set-attribute" title="nm_ip_route_set_attribute ()">nm_ip_route_set_attribute</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-route-set-dest" title="nm_ip_route_set_dest ()">nm_ip_route_set_dest</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-route-set-dest-binary" title="nm_ip_route_set_dest_binary ()">nm_ip_route_set_dest_binary</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-route-set-metric" title="nm_ip_route_set_metric ()">nm_ip_route_set_metric</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-route-set-next-hop" title="nm_ip_route_set_next_hop ()">nm_ip_route_set_next_hop</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-route-set-next-hop-binary" title="nm_ip_route_set_next_hop_binary ()">nm_ip_route_set_next_hop_binary</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-route-set-prefix" title="nm_ip_route_set_prefix ()">nm_ip_route_set_prefix</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-ip-route-unref" title="nm_ip_route_unref ()">nm_ip_route_unref</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<a name="idxM"></a><h3 class="title">M</h3>
+<dt>
+<a class="link" href="libnm-nm-version.html#NM-MAJOR-VERSION:CAPS" title="NM_MAJOR_VERSION">NM_MAJOR_VERSION</a>, macro in <a class="link" href="libnm-nm-version.html" title="nm-version">nm-version</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-errors.html#NMManagerError-enum" title="enum NMManagerError">NMManagerError</a>, enum in <a class="link" href="libnm-nm-errors.html" title="nm-errors">nm-errors</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-errors.html#NM-MANAGER-ERROR:CAPS" title="NM_MANAGER_ERROR">NM_MANAGER_ERROR</a>, macro in <a class="link" href="libnm-nm-errors.html" title="nm-errors">nm-errors</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-errors.html#nm-manager-error-quark" title="nm_manager_error_quark ()">nm_manager_error_quark</a>, function in <a class="link" href="libnm-nm-errors.html" title="nm-errors">nm-errors</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-version.html#NM-MICRO-VERSION:CAPS" title="NM_MICRO_VERSION">NM_MICRO_VERSION</a>, macro in <a class="link" href="libnm-nm-version.html" title="nm-version">nm-version</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-version.html#NM-MINOR-VERSION:CAPS" title="NM_MINOR_VERSION">NM_MINOR_VERSION</a>, macro in <a class="link" href="libnm-nm-version.html" title="nm-version">nm-version</a>
+</dt>
+<dd></dd>
+<a name="idxO"></a><h3 class="title">O</h3>
+<dt>
+<a class="link" href="NMObject.html#NMObject-struct" title="struct 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--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--nm-running-internal" title='The "nm-running-internal" property'>NMObject:nm-running-internal</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--path" title='The "path" property'>NMObject: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#NMObjectClass" title="NMObjectClass">NMObjectClass</a>, struct in <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMObject.html#NM-OBJECT-DBUS-CONNECTION:CAPS" title="NM_OBJECT_DBUS_CONNECTION">NM_OBJECT_DBUS_CONNECTION</a>, macro 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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMObject.html#NM-OBJECT-PATH:CAPS" title="NM_OBJECT_PATH">NM_OBJECT_PATH</a>, macro 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-struct" title="struct 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--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--visible" title='The "visible" property'>NMRemoteConnection:visible</a>, object property in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<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#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-async" title="nm_remote_connection_commit_changes_async ()">nm_remote_connection_commit_changes_async</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-finish" title="nm_remote_connection_commit_changes_finish ()">nm_remote_connection_commit_changes_finish</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-DBUS-CONNECTION:CAPS" title="NM_REMOTE_CONNECTION_DBUS_CONNECTION">NM_REMOTE_CONNECTION_DBUS_CONNECTION</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-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-async" title="nm_remote_connection_delete_async ()">nm_remote_connection_delete_async</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-finish" title="nm_remote_connection_delete_finish ()">nm_remote_connection_delete_finish</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-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-secrets-async" title="nm_remote_connection_get_secrets_async ()">nm_remote_connection_get_secrets_async</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-secrets-finish" title="nm_remote_connection_get_secrets_finish ()">nm_remote_connection_get_secrets_finish</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-get-visible" title="nm_remote_connection_get_visible ()">nm_remote_connection_get_visible</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-PATH:CAPS" title="NM_REMOTE_CONNECTION_PATH">NM_REMOTE_CONNECTION_PATH</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-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-save-async" title="nm_remote_connection_save_async ()">nm_remote_connection_save_async</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-save-finish" title="nm_remote_connection_save_finish ()">nm_remote_connection_save_finish</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-VISIBLE:CAPS" title="NM_REMOTE_CONNECTION_VISIBLE">NM_REMOTE_CONNECTION_VISIBLE</a>, macro in <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
+</dt>
+<dd></dd>
+<a name="idxS"></a><h3 class="title">S</h3>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NMSecretAgentCapabilities-enum" title="enum NMSecretAgentCapabilities">NMSecretAgentCapabilities</a>, enum in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-errors.html#NMSecretAgentError-enum" title="enum NMSecretAgentError">NMSecretAgentError</a>, enum in <a class="link" href="libnm-nm-errors.html" title="nm-errors">nm-errors</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NMSecretAgentGetSecretsFlags-enum" title="enum NMSecretAgentGetSecretsFlags">NMSecretAgentGetSecretsFlags</a>, enum in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSecretAgentOld.html#NMSecretAgentOld-struct" title="NMSecretAgentOld">NMSecretAgentOld</a>, struct in <a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld">NMSecretAgentOld</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSecretAgentOld.html#NMSecretAgentOld--auto-register" title='The "auto-register" property'>NMSecretAgentOld:auto-register</a>, object property in <a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld">NMSecretAgentOld</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSecretAgentOld.html#NMSecretAgentOld--capabilities" title='The "capabilities" property'>NMSecretAgentOld:capabilities</a>, object property in <a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld">NMSecretAgentOld</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSecretAgentOld.html#NMSecretAgentOld--identifier" title='The "identifier" property'>NMSecretAgentOld:identifier</a>, object property in <a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld">NMSecretAgentOld</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSecretAgentOld.html#NMSecretAgentOld--registered" title='The "registered" property'>NMSecretAgentOld:registered</a>, object property in <a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld">NMSecretAgentOld</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSecretAgentOld.html#NMSecretAgentOldClass" title="NMSecretAgentOldClass">NMSecretAgentOldClass</a>, struct in <a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld">NMSecretAgentOld</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSecretAgentOld.html#NMSecretAgentOldDeleteSecretsFunc" title="NMSecretAgentOldDeleteSecretsFunc ()">NMSecretAgentOldDeleteSecretsFunc</a>, user_function in <a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld">NMSecretAgentOld</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSecretAgentOld.html#NMSecretAgentOldGetSecretsFunc" title="NMSecretAgentOldGetSecretsFunc ()">NMSecretAgentOldGetSecretsFunc</a>, user_function in <a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld">NMSecretAgentOld</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSecretAgentOld.html#NMSecretAgentOldSaveSecretsFunc" title="NMSecretAgentOldSaveSecretsFunc ()">NMSecretAgentOldSaveSecretsFunc</a>, user_function in <a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld">NMSecretAgentOld</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-errors.html#NM-SECRET-AGENT-ERROR:CAPS" title="NM_SECRET_AGENT_ERROR">NM_SECRET_AGENT_ERROR</a>, macro in <a class="link" href="libnm-nm-errors.html" title="nm-errors">nm-errors</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-errors.html#nm-secret-agent-error-quark" title="nm_secret_agent_error_quark ()">nm_secret_agent_error_quark</a>, function in <a class="link" href="libnm-nm-errors.html" title="nm-errors">nm-errors</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSecretAgentOld.html#NM-SECRET-AGENT-OLD-AUTO-REGISTER:CAPS" title="NM_SECRET_AGENT_OLD_AUTO_REGISTER">NM_SECRET_AGENT_OLD_AUTO_REGISTER</a>, macro in <a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld">NMSecretAgentOld</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSecretAgentOld.html#NM-SECRET-AGENT-OLD-CAPABILITIES:CAPS" title="NM_SECRET_AGENT_OLD_CAPABILITIES">NM_SECRET_AGENT_OLD_CAPABILITIES</a>, macro in <a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld">NMSecretAgentOld</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSecretAgentOld.html#nm-secret-agent-old-delete-secrets" title="nm_secret_agent_old_delete_secrets ()">nm_secret_agent_old_delete_secrets</a>, function in <a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld">NMSecretAgentOld</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSecretAgentOld.html#nm-secret-agent-old-get-registered" title="nm_secret_agent_old_get_registered ()">nm_secret_agent_old_get_registered</a>, function in <a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld">NMSecretAgentOld</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSecretAgentOld.html#nm-secret-agent-old-get-secrets" title="nm_secret_agent_old_get_secrets ()">nm_secret_agent_old_get_secrets</a>, function in <a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld">NMSecretAgentOld</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSecretAgentOld.html#NM-SECRET-AGENT-OLD-IDENTIFIER:CAPS" title="NM_SECRET_AGENT_OLD_IDENTIFIER">NM_SECRET_AGENT_OLD_IDENTIFIER</a>, macro in <a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld">NMSecretAgentOld</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSecretAgentOld.html#nm-secret-agent-old-register" title="nm_secret_agent_old_register ()">nm_secret_agent_old_register</a>, function in <a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld">NMSecretAgentOld</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSecretAgentOld.html#NM-SECRET-AGENT-OLD-REGISTERED:CAPS" title="NM_SECRET_AGENT_OLD_REGISTERED">NM_SECRET_AGENT_OLD_REGISTERED</a>, macro in <a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld">NMSecretAgentOld</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSecretAgentOld.html#nm-secret-agent-old-register-async" title="nm_secret_agent_old_register_async ()">nm_secret_agent_old_register_async</a>, function in <a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld">NMSecretAgentOld</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSecretAgentOld.html#nm-secret-agent-old-register-finish" title="nm_secret_agent_old_register_finish ()">nm_secret_agent_old_register_finish</a>, function in <a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld">NMSecretAgentOld</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSecretAgentOld.html#nm-secret-agent-old-save-secrets" title="nm_secret_agent_old_save_secrets ()">nm_secret_agent_old_save_secrets</a>, function in <a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld">NMSecretAgentOld</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSecretAgentOld.html#nm-secret-agent-old-unregister" title="nm_secret_agent_old_unregister ()">nm_secret_agent_old_unregister</a>, function in <a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld">NMSecretAgentOld</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSecretAgentOld.html#nm-secret-agent-old-unregister-async" title="nm_secret_agent_old_unregister_async ()">nm_secret_agent_old_unregister_async</a>, function in <a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld">NMSecretAgentOld</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSecretAgentOld.html#nm-secret-agent-old-unregister-finish" title="nm_secret_agent_old_unregister_finish ()">nm_secret_agent_old_unregister_finish</a>, function in <a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld">NMSecretAgentOld</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting.html#NMSetting-struct" title="struct NMSetting">NMSetting</a>, struct in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting8021x.html#NMSetting8021x-struct" title="struct 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--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--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--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--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--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--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--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--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--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--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--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--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--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--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--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--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--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--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--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#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#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#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="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="NMSettingAdsl.html#NMSettingAdsl-struct" title="struct NMSettingAdsl">NMSettingAdsl</a>, struct in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<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="NMSettingBluetooth.html#NMSettingBluetooth-struct" title="struct NMSettingBluetooth">NMSettingBluetooth</a>, struct in <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth">NMSettingBluetooth</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<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="NMSettingBond.html#NMSettingBond-struct" title="struct NMSettingBond">NMSettingBond</a>, struct in <a class="link" href="NMSettingBond.html" title="NMSettingBond">NMSettingBond</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>
+</dt>
+<dd></dd>
+<dt>
+<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="NMSettingBridge.html#NMSettingBridge-struct" title="struct NMSettingBridge">NMSettingBridge</a>, struct 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>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<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--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--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--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#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="NMSettingBridgePort.html#NMSettingBridgePort-struct" title="struct NMSettingBridgePort">NMSettingBridgePort</a>, struct 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>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<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="NMSettingCdma.html#NMSettingCdma-struct" title="struct 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--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" 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--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#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="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#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>
+<a class="link" href="NMSettingConnection.html#NMSettingConnection-struct" title="struct NMSettingConnection">NMSettingConnection</a>, struct in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingConnection.html#NMSettingConnection--autoconnect-priority" title='The "autoconnect-priority" property'>NMSettingConnection:autoconnect-priority</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="NMSettingDcb.html#NMSettingDcb-struct" title="struct 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#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="NMSettingGeneric.html#NMSettingGeneric-struct" title="struct 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="NMSettingGsm.html#NMSettingGsm-struct" title="struct 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--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--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="NMSettingInfiniband.html#NMSettingInfiniband-struct" title="struct NMSettingInfiniband">NMSettingInfiniband</a>, struct in <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband">NMSettingInfiniband</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<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="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="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="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="NMSettingIP4Config.html#NMSettingIP4Config-struct" title="struct NMSettingIP4Config">NMSettingIP4Config</a>, struct in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</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>
+</dt>
+<dd></dd>
+<dt>
+<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="NMSettingIP6Config.html#NMSettingIP6Config-struct" title="struct NMSettingIP6Config">NMSettingIP6Config</a>, struct in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</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>
+</dt>
+<dd></dd>
+<dt>
+<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="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="NMSettingIPConfig.html#NMSettingIPConfig-struct" title="struct NMSettingIPConfig">NMSettingIPConfig</a>, struct in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--addresses" title='The "addresses" property'>NMSettingIPConfig:addresses</a>, object property in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--dhcp-hostname" title='The "dhcp-hostname" property'>NMSettingIPConfig:dhcp-hostname</a>, object property in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--dhcp-send-hostname" title='The "dhcp-send-hostname" property'>NMSettingIPConfig:dhcp-send-hostname</a>, object property in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--dns" title='The "dns" property'>NMSettingIPConfig:dns</a>, object property in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--dns-search" title='The "dns-search" property'>NMSettingIPConfig:dns-search</a>, object property in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--gateway" title='The "gateway" property'>NMSettingIPConfig:gateway</a>, object property in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--ignore-auto-dns" title='The "ignore-auto-dns" property'>NMSettingIPConfig:ignore-auto-dns</a>, object property in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--ignore-auto-routes" title='The "ignore-auto-routes" property'>NMSettingIPConfig:ignore-auto-routes</a>, object property in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--may-fail" title='The "may-fail" property'>NMSettingIPConfig:may-fail</a>, object property in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--method" title='The "method" property'>NMSettingIPConfig:method</a>, object property in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--never-default" title='The "never-default" property'>NMSettingIPConfig:never-default</a>, object property in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--route-metric" title='The "route-metric" property'>NMSettingIPConfig:route-metric</a>, object property in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--routes" title='The "routes" property'>NMSettingIPConfig:routes</a>, object property in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#NMSettingIPConfigClass" title="NMSettingIPConfigClass">NMSettingIPConfigClass</a>, struct in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingOlpcMesh.html#NMSettingOlpcMesh-struct" title="struct NMSettingOlpcMesh">NMSettingOlpcMesh</a>, struct in <a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh">NMSettingOlpcMesh</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>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<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="NMSettingPpp.html#NMSettingPpp-struct" title="struct NMSettingPpp">NMSettingPpp</a>, struct 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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<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="NMSettingPppoe.html#NMSettingPppoe-struct" title="struct NMSettingPppoe">NMSettingPppoe</a>, struct in <a class="link" href="NMSettingPppoe.html" title="NMSettingPppoe">NMSettingPppoe</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>
+</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>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<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="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="NMSettingSerial.html#NMSettingSerial-struct" title="struct NMSettingSerial">NMSettingSerial</a>, struct in <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</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>
+</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>
+</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>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<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="NMSettingSerial.html#NMSettingSerialParity-enum" title="enum NMSettingSerialParity">NMSettingSerialParity</a>, enum in <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-errors.html#NMSettingsError-enum" title="enum NMSettingsError">NMSettingsError</a>, enum in <a class="link" href="libnm-nm-errors.html" title="nm-errors">nm-errors</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-errors.html#NM-SETTINGS-ERROR:CAPS" title="NM_SETTINGS_ERROR">NM_SETTINGS_ERROR</a>, macro in <a class="link" href="libnm-nm-errors.html" title="nm-errors">nm-errors</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-errors.html#nm-settings-error-quark" title="nm_settings_error_quark ()">nm_settings_error_quark</a>, function in <a class="link" href="libnm-nm-errors.html" title="nm-errors">nm-errors</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingTeam.html#NMSettingTeam-struct" title="struct NMSettingTeam">NMSettingTeam</a>, struct in <a class="link" href="NMSettingTeam.html" title="NMSettingTeam">NMSettingTeam</a>
+</dt>
+<dd></dd>
+<dt>
+<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="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="NMSettingTeamPort.html#NMSettingTeamPort-struct" title="struct NMSettingTeamPort">NMSettingTeamPort</a>, struct in <a class="link" href="NMSettingTeamPort.html" title="NMSettingTeamPort">NMSettingTeamPort</a>
+</dt>
+<dd></dd>
+<dt>
+<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="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="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-struct" title="struct 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--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--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--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#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="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="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-struct" title="struct NMSettingVpn">NMSettingVpn</a>, struct in <a class="link" href="NMSettingVpn.html" title="NMSettingVpn">NMSettingVpn</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingVpn.html#NMSettingVpn--persistent" title='The "persistent" property'>NMSettingVpn:persistent</a>, object property in <a class="link" href="NMSettingVpn.html" title="NMSettingVpn">NMSettingVpn</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>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<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="NMSettingWimax.html#NMSettingWimax-struct" title="struct NMSettingWimax">NMSettingWimax</a>, struct in <a class="link" href="NMSettingWimax.html" title="NMSettingWimax">NMSettingWimax</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<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-struct" title="struct 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--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--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#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="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="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="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="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="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="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="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="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="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-struct" title="struct 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--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--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--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#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="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="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="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="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="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="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="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="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="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="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-struct" title="struct 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--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--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--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--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#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="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="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="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="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>
+<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>, macro 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-ANONYMOUS-IDENTITY:CAPS" title="NM_SETTING_802_1X_ANONYMOUS_IDENTITY">NM_SETTING_802_1X_ANONYMOUS_IDENTITY</a>, macro 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-CA-CERT:CAPS" title="NM_SETTING_802_1X_CA_CERT">NM_SETTING_802_1X_CA_CERT</a>, macro 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-CA-PATH:CAPS" title="NM_SETTING_802_1X_CA_PATH">NM_SETTING_802_1X_CA_PATH</a>, macro 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-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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<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>, macro 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-EAP:CAPS" title="NM_SETTING_802_1X_EAP">NM_SETTING_802_1X_EAP</a>, macro 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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting8021x.html#NM-SETTING-802-1X-IDENTITY:CAPS" title="NM_SETTING_802_1X_IDENTITY">NM_SETTING_802_1X_IDENTITY</a>, macro 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-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>
+<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>, macro 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-PASSWORD:CAPS" title="NM_SETTING_802_1X_PASSWORD">NM_SETTING_802_1X_PASSWORD</a>, macro 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-PASSWORD-FLAGS:CAPS" title="NM_SETTING_802_1X_PASSWORD_FLAGS">NM_SETTING_802_1X_PASSWORD_FLAGS</a>, macro 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-PASSWORD-RAW:CAPS" title="NM_SETTING_802_1X_PASSWORD_RAW">NM_SETTING_802_1X_PASSWORD_RAW</a>, macro 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-PASSWORD-RAW-FLAGS:CAPS" title="NM_SETTING_802_1X_PASSWORD_RAW_FLAGS">NM_SETTING_802_1X_PASSWORD_RAW_FLAGS</a>, macro 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-PHASE1-FAST-PROVISIONING:CAPS" title="NM_SETTING_802_1X_PHASE1_FAST_PROVISIONING">NM_SETTING_802_1X_PHASE1_FAST_PROVISIONING</a>, macro 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-PHASE1-PEAPLABEL:CAPS" title="NM_SETTING_802_1X_PHASE1_PEAPLABEL">NM_SETTING_802_1X_PHASE1_PEAPLABEL</a>, macro 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-PHASE1-PEAPVER:CAPS" title="NM_SETTING_802_1X_PHASE1_PEAPVER">NM_SETTING_802_1X_PHASE1_PEAPVER</a>, macro 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-PHASE2-ALTSUBJECT-MATCHES:CAPS" title="NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES">NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES</a>, macro 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-PHASE2-AUTH:CAPS" title="NM_SETTING_802_1X_PHASE2_AUTH">NM_SETTING_802_1X_PHASE2_AUTH</a>, macro 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-PHASE2-AUTHEAP:CAPS" title="NM_SETTING_802_1X_PHASE2_AUTHEAP">NM_SETTING_802_1X_PHASE2_AUTHEAP</a>, macro 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-PHASE2-CA-CERT:CAPS" title="NM_SETTING_802_1X_PHASE2_CA_CERT">NM_SETTING_802_1X_PHASE2_CA_CERT</a>, macro 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-PHASE2-CA-PATH:CAPS" title="NM_SETTING_802_1X_PHASE2_CA_PATH">NM_SETTING_802_1X_PHASE2_CA_PATH</a>, macro 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-PHASE2-CLIENT-CERT:CAPS" title="NM_SETTING_802_1X_PHASE2_CLIENT_CERT">NM_SETTING_802_1X_PHASE2_CLIENT_CERT</a>, macro 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-PHASE2-PRIVATE-KEY:CAPS" title="NM_SETTING_802_1X_PHASE2_PRIVATE_KEY">NM_SETTING_802_1X_PHASE2_PRIVATE_KEY</a>, macro 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-PHASE2-PRIVATE-KEY-PASSWORD:CAPS" title="NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD">NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD</a>, macro 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-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>, macro 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-PHASE2-SUBJECT-MATCH:CAPS" title="NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH">NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH</a>, macro 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-PIN:CAPS" title="NM_SETTING_802_1X_PIN">NM_SETTING_802_1X_PIN</a>, macro 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-PIN-FLAGS:CAPS" title="NM_SETTING_802_1X_PIN_FLAGS">NM_SETTING_802_1X_PIN_FLAGS</a>, macro 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-PRIVATE-KEY:CAPS" title="NM_SETTING_802_1X_PRIVATE_KEY">NM_SETTING_802_1X_PRIVATE_KEY</a>, macro 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-PRIVATE-KEY-PASSWORD:CAPS" title="NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD">NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD</a>, macro 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-PRIVATE-KEY-PASSWORD-FLAGS:CAPS" title="NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD_FLAGS">NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD_FLAGS</a>, macro 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-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-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-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>
+<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>, macro 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-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>
+</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>
+</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>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<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>, macro 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-SYSTEM-CA-CERTS:CAPS" title="NM_SETTING_802_1X_SYSTEM_CA_CERTS">NM_SETTING_802_1X_SYSTEM_CA_CERTS</a>, macro in <a class="link" href="NMSetting8021x.html" title="NMSetting8021x">NMSetting8021x</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-ENCAPSULATION:CAPS" title="NM_SETTING_ADSL_ENCAPSULATION">NM_SETTING_ADSL_ENCAPSULATION</a>, macro in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-ENCAPSULATION-LLC:CAPS" title="NM_SETTING_ADSL_ENCAPSULATION_LLC">NM_SETTING_ADSL_ENCAPSULATION_LLC</a>, macro in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-ENCAPSULATION-VCMUX:CAPS" title="NM_SETTING_ADSL_ENCAPSULATION_VCMUX">NM_SETTING_ADSL_ENCAPSULATION_VCMUX</a>, macro 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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-PASSWORD:CAPS" title="NM_SETTING_ADSL_PASSWORD">NM_SETTING_ADSL_PASSWORD</a>, macro in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-PASSWORD-FLAGS:CAPS" title="NM_SETTING_ADSL_PASSWORD_FLAGS">NM_SETTING_ADSL_PASSWORD_FLAGS</a>, macro in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-PROTOCOL:CAPS" title="NM_SETTING_ADSL_PROTOCOL">NM_SETTING_ADSL_PROTOCOL</a>, macro in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-PROTOCOL-IPOATM:CAPS" title="NM_SETTING_ADSL_PROTOCOL_IPOATM">NM_SETTING_ADSL_PROTOCOL_IPOATM</a>, macro in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-PROTOCOL-PPPOA:CAPS" title="NM_SETTING_ADSL_PROTOCOL_PPPOA">NM_SETTING_ADSL_PROTOCOL_PPPOA</a>, macro in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-PROTOCOL-PPPOE:CAPS" title="NM_SETTING_ADSL_PROTOCOL_PPPOE">NM_SETTING_ADSL_PROTOCOL_PPPOE</a>, macro in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-SETTING-NAME:CAPS" title="NM_SETTING_ADSL_SETTING_NAME">NM_SETTING_ADSL_SETTING_NAME</a>, macro in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-USERNAME:CAPS" title="NM_SETTING_ADSL_USERNAME">NM_SETTING_ADSL_USERNAME</a>, macro in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-VCI:CAPS" title="NM_SETTING_ADSL_VCI">NM_SETTING_ADSL_VCI</a>, macro in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingAdsl.html#NM-SETTING-ADSL-VPI:CAPS" title="NM_SETTING_ADSL_VPI">NM_SETTING_ADSL_VPI</a>, macro in <a class="link" href="NMSettingAdsl.html" title="NMSettingAdsl">NMSettingAdsl</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-BDADDR:CAPS" title="NM_SETTING_BLUETOOTH_BDADDR">NM_SETTING_BLUETOOTH_BDADDR</a>, macro 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>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-SETTING-NAME:CAPS" title="NM_SETTING_BLUETOOTH_SETTING_NAME">NM_SETTING_BLUETOOTH_SETTING_NAME</a>, macro in <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth">NMSettingBluetooth</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-TYPE:CAPS" title="NM_SETTING_BLUETOOTH_TYPE">NM_SETTING_BLUETOOTH_TYPE</a>, macro in <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth">NMSettingBluetooth</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-TYPE-DUN:CAPS" title="NM_SETTING_BLUETOOTH_TYPE_DUN">NM_SETTING_BLUETOOTH_TYPE_DUN</a>, macro in <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth">NMSettingBluetooth</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-TYPE-PANU:CAPS" title="NM_SETTING_BLUETOOTH_TYPE_PANU">NM_SETTING_BLUETOOTH_TYPE_PANU</a>, macro in <a class="link" href="NMSettingBluetooth.html" title="NMSettingBluetooth">NMSettingBluetooth</a>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTIONS:CAPS" title="NM_SETTING_BOND_OPTIONS">NM_SETTING_BOND_OPTIONS</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-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>
+<dt>
+<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>, 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-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-LACP-RATE:CAPS" title="NM_SETTING_BOND_OPTION_LACP_RATE">NM_SETTING_BOND_OPTION_LACP_RATE</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>
+<dt>
+<a class="link" href="NMSettingBond.html#NM-SETTING-BOND-OPTION-MODE:CAPS" title="NM_SETTING_BOND_OPTION_MODE">NM_SETTING_BOND_OPTION_MODE</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: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-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>
+<a class="link" href="NMSettingBond.html#NM-SETTING-BOND-SETTING-NAME:CAPS" title="NM_SETTING_BOND_SETTING_NAME">NM_SETTING_BOND_SETTING_NAME</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-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>
+<dt>
+<a class="link" href="NMSettingBridge.html#NM-SETTING-BRIDGE-FORWARD-DELAY:CAPS" title="NM_SETTING_BRIDGE_FORWARD_DELAY">NM_SETTING_BRIDGE_FORWARD_DELAY</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-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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<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-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-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>
+<a class="link" href="NMSettingBridge.html#NM-SETTING-BRIDGE-HELLO-TIME:CAPS" title="NM_SETTING_BRIDGE_HELLO_TIME">NM_SETTING_BRIDGE_HELLO_TIME</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-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>
+</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>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<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>, macro 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-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>
+<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>, macro 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-PRIORITY:CAPS" title="NM_SETTING_BRIDGE_PORT_PRIORITY">NM_SETTING_BRIDGE_PORT_PRIORITY</a>, macro 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-SETTING-NAME:CAPS" title="NM_SETTING_BRIDGE_PORT_SETTING_NAME">NM_SETTING_BRIDGE_PORT_SETTING_NAME</a>, macro in <a class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort">NMSettingBridgePort</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingBridge.html#NM-SETTING-BRIDGE-PRIORITY:CAPS" title="NM_SETTING_BRIDGE_PRIORITY">NM_SETTING_BRIDGE_PRIORITY</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-SETTING-NAME:CAPS" title="NM_SETTING_BRIDGE_SETTING_NAME">NM_SETTING_BRIDGE_SETTING_NAME</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-STP:CAPS" title="NM_SETTING_BRIDGE_STP">NM_SETTING_BRIDGE_STP</a>, macro in <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</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>
+</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>
+</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>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingCdma.html#NM-SETTING-CDMA-NUMBER:CAPS" title="NM_SETTING_CDMA_NUMBER">NM_SETTING_CDMA_NUMBER</a>, macro in <a class="link" href="NMSettingCdma.html" title="NMSettingCdma">NMSettingCdma</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingCdma.html#NM-SETTING-CDMA-PASSWORD:CAPS" title="NM_SETTING_CDMA_PASSWORD">NM_SETTING_CDMA_PASSWORD</a>, macro in <a class="link" href="NMSettingCdma.html" title="NMSettingCdma">NMSettingCdma</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingCdma.html#NM-SETTING-CDMA-PASSWORD-FLAGS:CAPS" title="NM_SETTING_CDMA_PASSWORD_FLAGS">NM_SETTING_CDMA_PASSWORD_FLAGS</a>, macro in <a class="link" href="NMSettingCdma.html" title="NMSettingCdma">NMSettingCdma</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingCdma.html#NM-SETTING-CDMA-SETTING-NAME:CAPS" title="NM_SETTING_CDMA_SETTING_NAME">NM_SETTING_CDMA_SETTING_NAME</a>, macro in <a class="link" href="NMSettingCdma.html" title="NMSettingCdma">NMSettingCdma</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingCdma.html#NM-SETTING-CDMA-USERNAME:CAPS" title="NM_SETTING_CDMA_USERNAME">NM_SETTING_CDMA_USERNAME</a>, macro in <a class="link" href="NMSettingCdma.html" title="NMSettingCdma">NMSettingCdma</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>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-AUTOCONNECT:CAPS" title="NM_SETTING_CONNECTION_AUTOCONNECT">NM_SETTING_CONNECTION_AUTOCONNECT</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-AUTOCONNECT-PRIORITY:CAPS" title="NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY">NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY</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-AUTOCONNECT-PRIORITY-DEFAULT:CAPS" title="NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_DEFAULT">NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_DEFAULT</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-AUTOCONNECT-PRIORITY-MAX:CAPS" title="NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_MAX">NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_MAX</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-AUTOCONNECT-PRIORITY-MIN:CAPS" title="NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_MIN">NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_MIN</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-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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingConnection.html#nm-setting-connection-get-autoconnect-priority" title="nm_setting_connection_get_autoconnect_priority ()">nm_setting_connection_get_autoconnect_priority</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>
+</dt>
+<dd></dd>
+<dt>
+<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-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-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-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-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-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-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-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-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-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-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>
+<a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-ID:CAPS" title="NM_SETTING_CONNECTION_ID">NM_SETTING_CONNECTION_ID</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-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>
+<a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-MASTER:CAPS" title="NM_SETTING_CONNECTION_MASTER">NM_SETTING_CONNECTION_MASTER</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-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>
+<a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-PERMISSIONS:CAPS" title="NM_SETTING_CONNECTION_PERMISSIONS">NM_SETTING_CONNECTION_PERMISSIONS</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-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>
+<a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-READ-ONLY:CAPS" title="NM_SETTING_CONNECTION_READ_ONLY">NM_SETTING_CONNECTION_READ_ONLY</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-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>
+</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>
+<a class="link" href="NMSettingConnection.html#NM-SETTING-CONNECTION-SECONDARIES:CAPS" title="NM_SETTING_CONNECTION_SECONDARIES">NM_SETTING_CONNECTION_SECONDARIES</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-SETTING-NAME:CAPS" title="NM_SETTING_CONNECTION_SETTING_NAME">NM_SETTING_CONNECTION_SETTING_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-SLAVE-TYPE:CAPS" title="NM_SETTING_CONNECTION_SLAVE_TYPE">NM_SETTING_CONNECTION_SLAVE_TYPE</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-TIMESTAMP:CAPS" title="NM_SETTING_CONNECTION_TIMESTAMP">NM_SETTING_CONNECTION_TIMESTAMP</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-TYPE:CAPS" title="NM_SETTING_CONNECTION_TYPE">NM_SETTING_CONNECTION_TYPE</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-UUID:CAPS" title="NM_SETTING_CONNECTION_UUID">NM_SETTING_CONNECTION_UUID</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-ZONE:CAPS" title="NM_SETTING_CONNECTION_ZONE">NM_SETTING_CONNECTION_ZONE</a>, macro in <a class="link" href="NMSettingConnection.html" title="NMSettingConnection">NMSettingConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<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-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="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="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>
+<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-dbus-property-type" title="nm_setting_get_dbus_property_type ()">nm_setting_get_dbus_property_type</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>
+</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="NMSettingGsm.html#NM-SETTING-GSM-APN:CAPS" title="NM_SETTING_GSM_APN">NM_SETTING_GSM_APN</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-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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-HOME-ONLY:CAPS" title="NM_SETTING_GSM_HOME_ONLY">NM_SETTING_GSM_HOME_ONLY</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-NETWORK-ID:CAPS" title="NM_SETTING_GSM_NETWORK_ID">NM_SETTING_GSM_NETWORK_ID</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-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>
+<a class="link" href="NMSettingGsm.html#NM-SETTING-GSM-NUMBER:CAPS" title="NM_SETTING_GSM_NUMBER">NM_SETTING_GSM_NUMBER</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-PASSWORD:CAPS" title="NM_SETTING_GSM_PASSWORD">NM_SETTING_GSM_PASSWORD</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-PASSWORD-FLAGS:CAPS" title="NM_SETTING_GSM_PASSWORD_FLAGS">NM_SETTING_GSM_PASSWORD_FLAGS</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-PIN:CAPS" title="NM_SETTING_GSM_PIN">NM_SETTING_GSM_PIN</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-PIN-FLAGS:CAPS" title="NM_SETTING_GSM_PIN_FLAGS">NM_SETTING_GSM_PIN_FLAGS</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-SETTING-NAME:CAPS" title="NM_SETTING_GSM_SETTING_NAME">NM_SETTING_GSM_SETTING_NAME</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-USERNAME:CAPS" title="NM_SETTING_GSM_USERNAME">NM_SETTING_GSM_USERNAME</a>, macro in <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</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-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-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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingInfiniband.html#nm-setting-infiniband-get-virtual-interface-name" title="nm_setting_infiniband_get_virtual_interface_name ()">nm_setting_infiniband_get_virtual_interface_name</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-MAC-ADDRESS:CAPS" title="NM_SETTING_INFINIBAND_MAC_ADDRESS">NM_SETTING_INFINIBAND_MAC_ADDRESS</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-MTU:CAPS" title="NM_SETTING_INFINIBAND_MTU">NM_SETTING_INFINIBAND_MTU</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-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>
+<a class="link" href="NMSettingInfiniband.html#NM-SETTING-INFINIBAND-SETTING-NAME:CAPS" title="NM_SETTING_INFINIBAND_SETTING_NAME">NM_SETTING_INFINIBAND_SETTING_NAME</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-TRANSPORT-MODE:CAPS" title="NM_SETTING_INFINIBAND_TRANSPORT_MODE">NM_SETTING_INFINIBAND_TRANSPORT_MODE</a>, macro in <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband">NMSettingInfiniband</a>
+</dt>
+<dd></dd>
+<dt>
+<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>, macro 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>
+</dt>
+<dd></dd>
+<dt>
+<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>, macro 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-METHOD-DISABLED:CAPS" title="NM_SETTING_IP4_CONFIG_METHOD_DISABLED">NM_SETTING_IP4_CONFIG_METHOD_DISABLED</a>, macro 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-METHOD-LINK-LOCAL:CAPS" title="NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL">NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL</a>, macro 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-METHOD-MANUAL:CAPS" title="NM_SETTING_IP4_CONFIG_METHOD_MANUAL">NM_SETTING_IP4_CONFIG_METHOD_MANUAL</a>, macro 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-METHOD-SHARED:CAPS" title="NM_SETTING_IP4_CONFIG_METHOD_SHARED">NM_SETTING_IP4_CONFIG_METHOD_SHARED</a>, macro 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-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-SETTING-NAME:CAPS" title="NM_SETTING_IP4_CONFIG_SETTING_NAME">NM_SETTING_IP4_CONFIG_SETTING_NAME</a>, macro in <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</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>
+</dt>
+<dd></dd>
+<dt>
+<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>, macro 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-METHOD-AUTO:CAPS" title="NM_SETTING_IP6_CONFIG_METHOD_AUTO">NM_SETTING_IP6_CONFIG_METHOD_AUTO</a>, macro 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-METHOD-DHCP:CAPS" title="NM_SETTING_IP6_CONFIG_METHOD_DHCP">NM_SETTING_IP6_CONFIG_METHOD_DHCP</a>, macro 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-METHOD-IGNORE:CAPS" title="NM_SETTING_IP6_CONFIG_METHOD_IGNORE">NM_SETTING_IP6_CONFIG_METHOD_IGNORE</a>, macro 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-METHOD-LINK-LOCAL:CAPS" title="NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL">NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL</a>, macro 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-METHOD-MANUAL:CAPS" title="NM_SETTING_IP6_CONFIG_METHOD_MANUAL">NM_SETTING_IP6_CONFIG_METHOD_MANUAL</a>, macro 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-METHOD-SHARED:CAPS" title="NM_SETTING_IP6_CONFIG_METHOD_SHARED">NM_SETTING_IP6_CONFIG_METHOD_SHARED</a>, macro 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-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-SETTING-NAME:CAPS" title="NM_SETTING_IP6_CONFIG_SETTING_NAME">NM_SETTING_IP6_CONFIG_SETTING_NAME</a>, macro in <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-ADDRESSES:CAPS" title="NM_SETTING_IP_CONFIG_ADDRESSES">NM_SETTING_IP_CONFIG_ADDRESSES</a>, macro in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-add-address" title="nm_setting_ip_config_add_address ()">nm_setting_ip_config_add_address</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-add-dns" title="nm_setting_ip_config_add_dns ()">nm_setting_ip_config_add_dns</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-add-dns-search" title="nm_setting_ip_config_add_dns_search ()">nm_setting_ip_config_add_dns_search</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-add-route" title="nm_setting_ip_config_add_route ()">nm_setting_ip_config_add_route</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-clear-addresses" title="nm_setting_ip_config_clear_addresses ()">nm_setting_ip_config_clear_addresses</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-clear-dns" title="nm_setting_ip_config_clear_dns ()">nm_setting_ip_config_clear_dns</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-clear-dns-searches" title="nm_setting_ip_config_clear_dns_searches ()">nm_setting_ip_config_clear_dns_searches</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-clear-routes" title="nm_setting_ip_config_clear_routes ()">nm_setting_ip_config_clear_routes</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-DHCP-HOSTNAME:CAPS" title="NM_SETTING_IP_CONFIG_DHCP_HOSTNAME">NM_SETTING_IP_CONFIG_DHCP_HOSTNAME</a>, macro in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-DHCP-SEND-HOSTNAME:CAPS" title="NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME">NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME</a>, macro in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-DNS:CAPS" title="NM_SETTING_IP_CONFIG_DNS">NM_SETTING_IP_CONFIG_DNS</a>, macro in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-DNS-SEARCH:CAPS" title="NM_SETTING_IP_CONFIG_DNS_SEARCH">NM_SETTING_IP_CONFIG_DNS_SEARCH</a>, macro in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-GATEWAY:CAPS" title="NM_SETTING_IP_CONFIG_GATEWAY">NM_SETTING_IP_CONFIG_GATEWAY</a>, macro in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-get-address" title="nm_setting_ip_config_get_address ()">nm_setting_ip_config_get_address</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-get-dhcp-hostname" title="nm_setting_ip_config_get_dhcp_hostname ()">nm_setting_ip_config_get_dhcp_hostname</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-get-dhcp-send-hostname" title="nm_setting_ip_config_get_dhcp_send_hostname ()">nm_setting_ip_config_get_dhcp_send_hostname</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-get-dns" title="nm_setting_ip_config_get_dns ()">nm_setting_ip_config_get_dns</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-get-dns-search" title="nm_setting_ip_config_get_dns_search ()">nm_setting_ip_config_get_dns_search</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-get-gateway" title="nm_setting_ip_config_get_gateway ()">nm_setting_ip_config_get_gateway</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-get-ignore-auto-dns" title="nm_setting_ip_config_get_ignore_auto_dns ()">nm_setting_ip_config_get_ignore_auto_dns</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-get-ignore-auto-routes" title="nm_setting_ip_config_get_ignore_auto_routes ()">nm_setting_ip_config_get_ignore_auto_routes</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-get-may-fail" title="nm_setting_ip_config_get_may_fail ()">nm_setting_ip_config_get_may_fail</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-get-method" title="nm_setting_ip_config_get_method ()">nm_setting_ip_config_get_method</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-get-never-default" title="nm_setting_ip_config_get_never_default ()">nm_setting_ip_config_get_never_default</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-get-num-addresses" title="nm_setting_ip_config_get_num_addresses ()">nm_setting_ip_config_get_num_addresses</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-get-num-dns" title="nm_setting_ip_config_get_num_dns ()">nm_setting_ip_config_get_num_dns</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-get-num-dns-searches" title="nm_setting_ip_config_get_num_dns_searches ()">nm_setting_ip_config_get_num_dns_searches</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-get-num-routes" title="nm_setting_ip_config_get_num_routes ()">nm_setting_ip_config_get_num_routes</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-get-route" title="nm_setting_ip_config_get_route ()">nm_setting_ip_config_get_route</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-get-route-metric" title="nm_setting_ip_config_get_route_metric ()">nm_setting_ip_config_get_route_metric</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-IGNORE-AUTO-DNS:CAPS" title="NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS">NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS</a>, macro in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-IGNORE-AUTO-ROUTES:CAPS" title="NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES">NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES</a>, macro in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-MAY-FAIL:CAPS" title="NM_SETTING_IP_CONFIG_MAY_FAIL">NM_SETTING_IP_CONFIG_MAY_FAIL</a>, macro in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-METHOD:CAPS" title="NM_SETTING_IP_CONFIG_METHOD">NM_SETTING_IP_CONFIG_METHOD</a>, macro in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-NEVER-DEFAULT:CAPS" title="NM_SETTING_IP_CONFIG_NEVER_DEFAULT">NM_SETTING_IP_CONFIG_NEVER_DEFAULT</a>, macro in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-remove-address" title="nm_setting_ip_config_remove_address ()">nm_setting_ip_config_remove_address</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-remove-address-by-value" title="nm_setting_ip_config_remove_address_by_value ()">nm_setting_ip_config_remove_address_by_value</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-remove-dns" title="nm_setting_ip_config_remove_dns ()">nm_setting_ip_config_remove_dns</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-remove-dns-by-value" title="nm_setting_ip_config_remove_dns_by_value ()">nm_setting_ip_config_remove_dns_by_value</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-remove-dns-search" title="nm_setting_ip_config_remove_dns_search ()">nm_setting_ip_config_remove_dns_search</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-remove-dns-search-by-value" title="nm_setting_ip_config_remove_dns_search_by_value ()">nm_setting_ip_config_remove_dns_search_by_value</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-remove-route" title="nm_setting_ip_config_remove_route ()">nm_setting_ip_config_remove_route</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-remove-route-by-value" title="nm_setting_ip_config_remove_route_by_value ()">nm_setting_ip_config_remove_route_by_value</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-ROUTES:CAPS" title="NM_SETTING_IP_CONFIG_ROUTES">NM_SETTING_IP_CONFIG_ROUTES</a>, macro in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-ROUTE-METRIC:CAPS" title="NM_SETTING_IP_CONFIG_ROUTE_METRIC">NM_SETTING_IP_CONFIG_ROUTE_METRIC</a>, macro in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting.html#nm-setting-lookup-type" title="nm_setting_lookup_type ()">nm_setting_lookup_type</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-NAME:CAPS" title="NM_SETTING_NAME">NM_SETTING_NAME</a>, macro in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingOlpcMesh.html#NM-SETTING-OLPC-MESH-CHANNEL:CAPS" title="NM_SETTING_OLPC_MESH_CHANNEL">NM_SETTING_OLPC_MESH_CHANNEL</a>, macro 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-DHCP-ANYCAST-ADDRESS:CAPS" title="NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS">NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS</a>, macro 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>
+</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>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<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>, macro 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-SSID:CAPS" title="NM_SETTING_OLPC_MESH_SSID">NM_SETTING_OLPC_MESH_SSID</a>, macro in <a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh">NMSettingOlpcMesh</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting.html#NM-SETTING-PARAM-FUZZY-IGNORE:CAPS" title="NM_SETTING_PARAM_FUZZY_IGNORE">NM_SETTING_PARAM_FUZZY_IGNORE</a>, macro in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting.html#NM-SETTING-PARAM-REQUIRED:CAPS" title="NM_SETTING_PARAM_REQUIRED">NM_SETTING_PARAM_REQUIRED</a>, macro in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSetting.html#NM-SETTING-PARAM-SECRET:CAPS" title="NM_SETTING_PARAM_SECRET">NM_SETTING_PARAM_SECRET</a>, macro in <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</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>
+</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>
+</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>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingPppoe.html#NM-SETTING-PPPOE-PASSWORD:CAPS" title="NM_SETTING_PPPOE_PASSWORD">NM_SETTING_PPPOE_PASSWORD</a>, macro in <a class="link" href="NMSettingPppoe.html" title="NMSettingPppoe">NMSettingPppoe</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingPppoe.html#NM-SETTING-PPPOE-PASSWORD-FLAGS:CAPS" title="NM_SETTING_PPPOE_PASSWORD_FLAGS">NM_SETTING_PPPOE_PASSWORD_FLAGS</a>, macro in <a class="link" href="NMSettingPppoe.html" title="NMSettingPppoe">NMSettingPppoe</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingPppoe.html#NM-SETTING-PPPOE-SERVICE:CAPS" title="NM_SETTING_PPPOE_SERVICE">NM_SETTING_PPPOE_SERVICE</a>, macro in <a class="link" href="NMSettingPppoe.html" title="NMSettingPppoe">NMSettingPppoe</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingPppoe.html#NM-SETTING-PPPOE-SETTING-NAME:CAPS" title="NM_SETTING_PPPOE_SETTING_NAME">NM_SETTING_PPPOE_SETTING_NAME</a>, macro in <a class="link" href="NMSettingPppoe.html" title="NMSettingPppoe">NMSettingPppoe</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingPppoe.html#NM-SETTING-PPPOE-USERNAME:CAPS" title="NM_SETTING_PPPOE_USERNAME">NM_SETTING_PPPOE_USERNAME</a>, macro in <a class="link" href="NMSettingPppoe.html" title="NMSettingPppoe">NMSettingPppoe</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingPpp.html#NM-SETTING-PPP-BAUD:CAPS" title="NM_SETTING_PPP_BAUD">NM_SETTING_PPP_BAUD</a>, macro in <a class="link" href="NMSettingPpp.html" title="NMSettingPpp">NMSettingPpp</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingPpp.html#NM-SETTING-PPP-CRTSCTS:CAPS" title="NM_SETTING_PPP_CRTSCTS">NM_SETTING_PPP_CRTSCTS</a>, macro 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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<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>, macro in <a class="link" href="NMSettingPpp.html" title="NMSettingPpp">NMSettingPpp</a>
+</dt>
+<dd></dd>
+<dt>
+<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>, macro in <a class="link" href="NMSettingPpp.html" title="NMSettingPpp">NMSettingPpp</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingPpp.html#NM-SETTING-PPP-MPPE-STATEFUL:CAPS" title="NM_SETTING_PPP_MPPE_STATEFUL">NM_SETTING_PPP_MPPE_STATEFUL</a>, macro in <a class="link" href="NMSettingPpp.html" title="NMSettingPpp">NMSettingPpp</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingPpp.html#NM-SETTING-PPP-MRU:CAPS" title="NM_SETTING_PPP_MRU">NM_SETTING_PPP_MRU</a>, macro in <a class="link" href="NMSettingPpp.html" title="NMSettingPpp">NMSettingPpp</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingPpp.html#NM-SETTING-PPP-MTU:CAPS" title="NM_SETTING_PPP_MTU">NM_SETTING_PPP_MTU</a>, macro in <a class="link" href="NMSettingPpp.html" title="NMSettingPpp">NMSettingPpp</a>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingPpp.html#NM-SETTING-PPP-NOAUTH:CAPS" title="NM_SETTING_PPP_NOAUTH">NM_SETTING_PPP_NOAUTH</a>, macro in <a class="link" href="NMSettingPpp.html" title="NMSettingPpp">NMSettingPpp</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingPpp.html#NM-SETTING-PPP-NOBSDCOMP:CAPS" title="NM_SETTING_PPP_NOBSDCOMP">NM_SETTING_PPP_NOBSDCOMP</a>, macro in <a class="link" href="NMSettingPpp.html" title="NMSettingPpp">NMSettingPpp</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingPpp.html#NM-SETTING-PPP-NODEFLATE:CAPS" title="NM_SETTING_PPP_NODEFLATE">NM_SETTING_PPP_NODEFLATE</a>, macro in <a class="link" href="NMSettingPpp.html" title="NMSettingPpp">NMSettingPpp</a>
+</dt>
+<dd></dd>
+<dt>
+<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>, macro in <a class="link" href="NMSettingPpp.html" title="NMSettingPpp">NMSettingPpp</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingPpp.html#NM-SETTING-PPP-REFUSE-CHAP:CAPS" title="NM_SETTING_PPP_REFUSE_CHAP">NM_SETTING_PPP_REFUSE_CHAP</a>, macro in <a class="link" href="NMSettingPpp.html" title="NMSettingPpp">NMSettingPpp</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingPpp.html#NM-SETTING-PPP-REFUSE-EAP:CAPS" title="NM_SETTING_PPP_REFUSE_EAP">NM_SETTING_PPP_REFUSE_EAP</a>, macro in <a class="link" href="NMSettingPpp.html" title="NMSettingPpp">NMSettingPpp</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingPpp.html#NM-SETTING-PPP-REFUSE-MSCHAP:CAPS" title="NM_SETTING_PPP_REFUSE_MSCHAP">NM_SETTING_PPP_REFUSE_MSCHAP</a>, macro in <a class="link" href="NMSettingPpp.html" title="NMSettingPpp">NMSettingPpp</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingPpp.html#NM-SETTING-PPP-REFUSE-MSCHAPV2:CAPS" title="NM_SETTING_PPP_REFUSE_MSCHAPV2">NM_SETTING_PPP_REFUSE_MSCHAPV2</a>, macro in <a class="link" href="NMSettingPpp.html" title="NMSettingPpp">NMSettingPpp</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingPpp.html#NM-SETTING-PPP-REFUSE-PAP:CAPS" title="NM_SETTING_PPP_REFUSE_PAP">NM_SETTING_PPP_REFUSE_PAP</a>, macro in <a class="link" href="NMSettingPpp.html" title="NMSettingPpp">NMSettingPpp</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingPpp.html#NM-SETTING-PPP-REQUIRE-MPPE:CAPS" title="NM_SETTING_PPP_REQUIRE_MPPE">NM_SETTING_PPP_REQUIRE_MPPE</a>, macro in <a class="link" href="NMSettingPpp.html" title="NMSettingPpp">NMSettingPpp</a>
+</dt>
+<dd></dd>
+<dt>
+<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>, macro in <a class="link" href="NMSettingPpp.html" title="NMSettingPpp">NMSettingPpp</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingPpp.html#NM-SETTING-PPP-SETTING-NAME:CAPS" title="NM_SETTING_PPP_SETTING_NAME">NM_SETTING_PPP_SETTING_NAME</a>, macro in <a class="link" href="NMSettingPpp.html" title="NMSettingPpp">NMSettingPpp</a>
+</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>
+<dt>
+<a class="link" href="NMSettingSerial.html#NM-SETTING-SERIAL-BITS:CAPS" title="NM_SETTING_SERIAL_BITS">NM_SETTING_SERIAL_BITS</a>, macro 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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingSerial.html#NM-SETTING-SERIAL-PARITY:CAPS" title="NM_SETTING_SERIAL_PARITY">NM_SETTING_SERIAL_PARITY</a>, macro in <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingSerial.html#NM-SETTING-SERIAL-SEND-DELAY:CAPS" title="NM_SETTING_SERIAL_SEND_DELAY">NM_SETTING_SERIAL_SEND_DELAY</a>, macro in <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingSerial.html#NM-SETTING-SERIAL-SETTING-NAME:CAPS" title="NM_SETTING_SERIAL_SETTING_NAME">NM_SETTING_SERIAL_SETTING_NAME</a>, macro in <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingSerial.html#NM-SETTING-SERIAL-STOPBITS:CAPS" title="NM_SETTING_SERIAL_STOPBITS">NM_SETTING_SERIAL_STOPBITS</a>, macro in <a class="link" href="NMSettingSerial.html" title="NMSettingSerial">NMSettingSerial</a>
+</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>
+</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-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="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="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="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-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-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>
+<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>, macro in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingVlan.html#NM-SETTING-VLAN-FLAGS:CAPS" title="NM_SETTING_VLAN_FLAGS">NM_SETTING_VLAN_FLAGS</a>, macro 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-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>
+</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>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingVlan.html#NM-SETTING-VLAN-ID:CAPS" title="NM_SETTING_VLAN_ID">NM_SETTING_VLAN_ID</a>, macro in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
+</dt>
+<dd></dd>
+<dt>
+<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>, macro in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingVlan.html#NM-SETTING-VLAN-PARENT:CAPS" title="NM_SETTING_VLAN_PARENT">NM_SETTING_VLAN_PARENT</a>, macro 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" 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>
+<a class="link" href="NMSettingVlan.html#NM-SETTING-VLAN-SETTING-NAME:CAPS" title="NM_SETTING_VLAN_SETTING_NAME">NM_SETTING_VLAN_SETTING_NAME</a>, macro in <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingVpn.html#NM-SETTING-VPN-DATA:CAPS" title="NM_SETTING_VPN_DATA">NM_SETTING_VPN_DATA</a>, macro 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>
+</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>
+</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>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingVpn.html#nm-setting-vpn-get-persistent" title="nm_setting_vpn_get_persistent ()">nm_setting_vpn_get_persistent</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>
+</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>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingVpn.html#NM-SETTING-VPN-PERSISTENT:CAPS" title="NM_SETTING_VPN_PERSISTENT">NM_SETTING_VPN_PERSISTENT</a>, macro 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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingVpn.html#NM-SETTING-VPN-SECRETS:CAPS" title="NM_SETTING_VPN_SECRETS">NM_SETTING_VPN_SECRETS</a>, macro in <a class="link" href="NMSettingVpn.html" title="NMSettingVpn">NMSettingVpn</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingVpn.html#NM-SETTING-VPN-SERVICE-TYPE:CAPS" title="NM_SETTING_VPN_SERVICE_TYPE">NM_SETTING_VPN_SERVICE_TYPE</a>, macro in <a class="link" href="NMSettingVpn.html" title="NMSettingVpn">NMSettingVpn</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingVpn.html#NM-SETTING-VPN-SETTING-NAME:CAPS" title="NM_SETTING_VPN_SETTING_NAME">NM_SETTING_VPN_SETTING_NAME</a>, macro in <a class="link" href="NMSettingVpn.html" title="NMSettingVpn">NMSettingVpn</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingVpn.html#NM-SETTING-VPN-USER-NAME:CAPS" title="NM_SETTING_VPN_USER_NAME">NM_SETTING_VPN_USER_NAME</a>, macro in <a class="link" href="NMSettingVpn.html" title="NMSettingVpn">NMSettingVpn</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWimax.html#NM-SETTING-WIMAX-MAC-ADDRESS:CAPS" title="NM_SETTING_WIMAX_MAC_ADDRESS">NM_SETTING_WIMAX_MAC_ADDRESS</a>, macro in <a class="link" href="NMSettingWimax.html" title="NMSettingWimax">NMSettingWimax</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWimax.html#NM-SETTING-WIMAX-NETWORK-NAME:CAPS" title="NM_SETTING_WIMAX_NETWORK_NAME">NM_SETTING_WIMAX_NETWORK_NAME</a>, macro in <a class="link" href="NMSettingWimax.html" title="NMSettingWimax">NMSettingWimax</a>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWimax.html#NM-SETTING-WIMAX-SETTING-NAME:CAPS" title="NM_SETTING_WIMAX_SETTING_NAME">NM_SETTING_WIMAX_SETTING_NAME</a>, macro in <a class="link" href="NMSettingWimax.html" title="NMSettingWimax">NMSettingWimax</a>
+</dt>
+<dd></dd>
+<dt>
+<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>
+<a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-AUTO-NEGOTIATE:CAPS" title="NM_SETTING_WIRED_AUTO_NEGOTIATE">NM_SETTING_WIRED_AUTO_NEGOTIATE</a>, macro in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+</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>
+<dt>
+<a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-DUPLEX:CAPS" title="NM_SETTING_WIRED_DUPLEX">NM_SETTING_WIRED_DUPLEX</a>, macro 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>
+</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>
+</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>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<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-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-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-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-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-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-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-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>
+<a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-MAC-ADDRESS:CAPS" title="NM_SETTING_WIRED_MAC_ADDRESS">NM_SETTING_WIRED_MAC_ADDRESS</a>, macro in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+</dt>
+<dd></dd>
+<dt>
+<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>, macro in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-MTU:CAPS" title="NM_SETTING_WIRED_MTU">NM_SETTING_WIRED_MTU</a>, macro in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-PORT:CAPS" title="NM_SETTING_WIRED_PORT">NM_SETTING_WIRED_PORT</a>, macro 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" 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>
+<a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-S390-NETTYPE:CAPS" title="NM_SETTING_WIRED_S390_NETTYPE">NM_SETTING_WIRED_S390_NETTYPE</a>, macro in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-S390-OPTIONS:CAPS" title="NM_SETTING_WIRED_S390_OPTIONS">NM_SETTING_WIRED_S390_OPTIONS</a>, macro in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-S390-SUBCHANNELS:CAPS" title="NM_SETTING_WIRED_S390_SUBCHANNELS">NM_SETTING_WIRED_S390_SUBCHANNELS</a>, macro in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-SETTING-NAME:CAPS" title="NM_SETTING_WIRED_SETTING_NAME">NM_SETTING_WIRED_SETTING_NAME</a>, macro in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWired.html#NM-SETTING-WIRED-SPEED:CAPS" title="NM_SETTING_WIRED_SPEED">NM_SETTING_WIRED_SPEED</a>, macro in <a class="link" href="NMSettingWired.html" title="NMSettingWired">NMSettingWired</a>
+</dt>
+<dd></dd>
+<dt>
+<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-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>
+<a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-BAND:CAPS" title="NM_SETTING_WIRELESS_BAND">NM_SETTING_WIRELESS_BAND</a>, macro in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-BSSID:CAPS" title="NM_SETTING_WIRELESS_BSSID">NM_SETTING_WIRELESS_BSSID</a>, macro in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-CHANNEL:CAPS" title="NM_SETTING_WIRELESS_CHANNEL">NM_SETTING_WIRELESS_CHANNEL</a>, macro in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+</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>
+<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-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-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-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-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-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-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-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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<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-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-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>
+</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>
+</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>
+<a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-HIDDEN:CAPS" title="NM_SETTING_WIRELESS_HIDDEN">NM_SETTING_WIRELESS_HIDDEN</a>, macro in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-MAC-ADDRESS:CAPS" title="NM_SETTING_WIRELESS_MAC_ADDRESS">NM_SETTING_WIRELESS_MAC_ADDRESS</a>, macro in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+</dt>
+<dd></dd>
+<dt>
+<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>, macro in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-MODE:CAPS" title="NM_SETTING_WIRELESS_MODE">NM_SETTING_WIRELESS_MODE</a>, macro in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-MODE-ADHOC:CAPS" title="NM_SETTING_WIRELESS_MODE_ADHOC">NM_SETTING_WIRELESS_MODE_ADHOC</a>, macro in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-MODE-AP:CAPS" title="NM_SETTING_WIRELESS_MODE_AP">NM_SETTING_WIRELESS_MODE_AP</a>, macro in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-MODE-INFRA:CAPS" title="NM_SETTING_WIRELESS_MODE_INFRA">NM_SETTING_WIRELESS_MODE_INFRA</a>, macro in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-MTU:CAPS" title="NM_SETTING_WIRELESS_MTU">NM_SETTING_WIRELESS_MTU</a>, macro in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-RATE:CAPS" title="NM_SETTING_WIRELESS_RATE">NM_SETTING_WIRELESS_RATE</a>, macro 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" 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="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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<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>, macro 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-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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-GROUP:CAPS" title="NM_SETTING_WIRELESS_SECURITY_GROUP">NM_SETTING_WIRELESS_SECURITY_GROUP</a>, macro 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-KEY-MGMT:CAPS" title="NM_SETTING_WIRELESS_SECURITY_KEY_MGMT">NM_SETTING_WIRELESS_SECURITY_KEY_MGMT</a>, macro 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-LEAP-PASSWORD:CAPS" title="NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD">NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD</a>, macro 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-LEAP-PASSWORD-FLAGS:CAPS" title="NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS">NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS</a>, macro 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-LEAP-USERNAME:CAPS" title="NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME">NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME</a>, macro 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-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>
+<a class="link" href="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-PAIRWISE:CAPS" title="NM_SETTING_WIRELESS_SECURITY_PAIRWISE">NM_SETTING_WIRELESS_SECURITY_PAIRWISE</a>, macro 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-PROTO:CAPS" title="NM_SETTING_WIRELESS_SECURITY_PROTO">NM_SETTING_WIRELESS_SECURITY_PROTO</a>, macro 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-PSK:CAPS" title="NM_SETTING_WIRELESS_SECURITY_PSK">NM_SETTING_WIRELESS_SECURITY_PSK</a>, macro 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-PSK-FLAGS:CAPS" title="NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS">NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS</a>, macro 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" 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-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>
+</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>
+<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>, macro 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-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>
+<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>, macro 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-WEP-KEY1:CAPS" title="NM_SETTING_WIRELESS_SECURITY_WEP_KEY1">NM_SETTING_WIRELESS_SECURITY_WEP_KEY1</a>, macro 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-WEP-KEY2:CAPS" title="NM_SETTING_WIRELESS_SECURITY_WEP_KEY2">NM_SETTING_WIRELESS_SECURITY_WEP_KEY2</a>, macro 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-WEP-KEY3:CAPS" title="NM_SETTING_WIRELESS_SECURITY_WEP_KEY3">NM_SETTING_WIRELESS_SECURITY_WEP_KEY3</a>, macro 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-WEP-KEY-FLAGS:CAPS" title="NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS">NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS</a>, macro 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-WEP-KEY-TYPE:CAPS" title="NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE">NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE</a>, macro 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-WEP-TX-KEYIDX:CAPS" title="NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX">NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX</a>, macro in <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-SEEN-BSSIDS:CAPS" title="NM_SETTING_WIRELESS_SEEN_BSSIDS">NM_SETTING_WIRELESS_SEEN_BSSIDS</a>, macro in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-SETTING-NAME:CAPS" title="NM_SETTING_WIRELESS_SETTING_NAME">NM_SETTING_WIRELESS_SETTING_NAME</a>, macro in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-SSID:CAPS" title="NM_SETTING_WIRELESS_SSID">NM_SETTING_WIRELESS_SSID</a>, macro in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSettingWireless.html#NM-SETTING-WIRELESS-TX-POWER:CAPS" title="NM_SETTING_WIRELESS_TX_POWER">NM_SETTING_WIRELESS_TX_POWER</a>, macro in <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSimpleConnection.html#NMSimpleConnection-struct" title="struct NMSimpleConnection">NMSimpleConnection</a>, struct in <a class="link" href="NMSimpleConnection.html" title="NMSimpleConnection">NMSimpleConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSimpleConnection.html#NMSimpleConnectionClass" title="NMSimpleConnectionClass">NMSimpleConnectionClass</a>, struct in <a class="link" href="NMSimpleConnection.html" title="NMSimpleConnection">NMSimpleConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSimpleConnection.html#nm-simple-connection-new" title="nm_simple_connection_new ()">nm_simple_connection_new</a>, function in <a class="link" href="NMSimpleConnection.html" title="NMSimpleConnection">NMSimpleConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSimpleConnection.html#nm-simple-connection-new-clone" title="nm_simple_connection_new_clone ()">nm_simple_connection_new_clone</a>, function in <a class="link" href="NMSimpleConnection.html" title="NMSimpleConnection">NMSimpleConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMSimpleConnection.html#nm-simple-connection-new-from-dbus" title="nm_simple_connection_new_from_dbus ()">nm_simple_connection_new_from_dbus</a>, function in <a class="link" href="NMSimpleConnection.html" title="NMSimpleConnection">NMSimpleConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-dbus-interface.html#NMState-enum" title="enum NMState">NMState</a>, enum in <a class="link" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">nm-dbus-interface</a>
+</dt>
+<dd></dd>
+<a name="idxU"></a><h3 class="title">U</h3>
+<dt>
+<a class="link" href="libnm-nm-utils.html#NMUtilsFileSearchInPathsPredicate" title="NMUtilsFileSearchInPathsPredicate ()">NMUtilsFileSearchInPathsPredicate</a>, user_function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#NMUtilsSecurityType-enum" title="enum NMUtilsSecurityType">NMUtilsSecurityType</a>, enum in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#nm-utils-bin2hexstr" title="nm_utils_bin2hexstr ()">nm_utils_bin2hexstr</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#nm-utils-escape-ssid" title="nm_utils_escape_ssid ()">nm_utils_escape_ssid</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#nm-utils-file-is-certificate" title="nm_utils_file_is_certificate ()">nm_utils_file_is_certificate</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#nm-utils-file-is-private-key" title="nm_utils_file_is_private_key ()">nm_utils_file_is_private_key</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#nm-utils-file-search-in-paths" title="nm_utils_file_search_in_paths ()">nm_utils_file_search_in_paths</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#nm-utils-hexstr2bin" title="nm_utils_hexstr2bin ()">nm_utils_hexstr2bin</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#nm-utils-hwaddr-atoba" title="nm_utils_hwaddr_atoba ()">nm_utils_hwaddr_atoba</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#nm-utils-hwaddr-aton" title="nm_utils_hwaddr_aton ()">nm_utils_hwaddr_aton</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#nm-utils-hwaddr-canonical" title="nm_utils_hwaddr_canonical ()">nm_utils_hwaddr_canonical</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#nm-utils-hwaddr-len" title="nm_utils_hwaddr_len ()">nm_utils_hwaddr_len</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#NM-UTILS-HWADDR-LEN-MAX:CAPS" title="NM_UTILS_HWADDR_LEN_MAX">NM_UTILS_HWADDR_LEN_MAX</a>, macro in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#nm-utils-hwaddr-matches" title="nm_utils_hwaddr_matches ()">nm_utils_hwaddr_matches</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#nm-utils-hwaddr-ntoa" title="nm_utils_hwaddr_ntoa ()">nm_utils_hwaddr_ntoa</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#nm-utils-hwaddr-valid" title="nm_utils_hwaddr_valid ()">nm_utils_hwaddr_valid</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#nm-utils-inet4-ntop" title="nm_utils_inet4_ntop ()">nm_utils_inet4_ntop</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#nm-utils-inet6-ntop" title="nm_utils_inet6_ntop ()">nm_utils_inet6_ntop</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#nm-utils-ip4-addresses-from-variant" title="nm_utils_ip4_addresses_from_variant ()">nm_utils_ip4_addresses_from_variant</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#nm-utils-ip4-addresses-to-variant" title="nm_utils_ip4_addresses_to_variant ()">nm_utils_ip4_addresses_to_variant</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#nm-utils-ip4-dns-from-variant" title="nm_utils_ip4_dns_from_variant ()">nm_utils_ip4_dns_from_variant</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#nm-utils-ip4-dns-to-variant" title="nm_utils_ip4_dns_to_variant ()">nm_utils_ip4_dns_to_variant</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#nm-utils-ip4-routes-from-variant" title="nm_utils_ip4_routes_from_variant ()">nm_utils_ip4_routes_from_variant</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#nm-utils-ip4-routes-to-variant" title="nm_utils_ip4_routes_to_variant ()">nm_utils_ip4_routes_to_variant</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#nm-utils-ip6-addresses-from-variant" title="nm_utils_ip6_addresses_from_variant ()">nm_utils_ip6_addresses_from_variant</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#nm-utils-ip6-addresses-to-variant" title="nm_utils_ip6_addresses_to_variant ()">nm_utils_ip6_addresses_to_variant</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#nm-utils-ip6-dns-from-variant" title="nm_utils_ip6_dns_from_variant ()">nm_utils_ip6_dns_from_variant</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#nm-utils-ip6-dns-to-variant" title="nm_utils_ip6_dns_to_variant ()">nm_utils_ip6_dns_to_variant</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#nm-utils-ip6-routes-from-variant" title="nm_utils_ip6_routes_from_variant ()">nm_utils_ip6_routes_from_variant</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#nm-utils-ip6-routes-to-variant" title="nm_utils_ip6_routes_to_variant ()">nm_utils_ip6_routes_to_variant</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#nm-utils-ipaddr-valid" title="nm_utils_ipaddr_valid ()">nm_utils_ipaddr_valid</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#nm-utils-ip-addresses-from-variant" title="nm_utils_ip_addresses_from_variant ()">nm_utils_ip_addresses_from_variant</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#nm-utils-ip-addresses-to-variant" title="nm_utils_ip_addresses_to_variant ()">nm_utils_ip_addresses_to_variant</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#nm-utils-ip-routes-from-variant" title="nm_utils_ip_routes_from_variant ()">nm_utils_ip_routes_from_variant</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#nm-utils-ip-routes-to-variant" title="nm_utils_ip_routes_to_variant ()">nm_utils_ip_routes_to_variant</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#nm-utils-is-uuid" title="nm_utils_is_uuid ()">nm_utils_is_uuid</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#nm-utils-same-ssid" title="nm_utils_same_ssid ()">nm_utils_same_ssid</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#nm-utils-security-valid" title="nm_utils_security_valid ()">nm_utils_security_valid</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#nm-utils-uuid-generate" title="nm_utils_uuid_generate ()">nm_utils_uuid_generate</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-utils.html#nm-utils-wifi-strength-bars" title="nm_utils_wifi_strength_bars ()">nm_utils_wifi_strength_bars</a>, function in <a class="link" href="libnm-nm-utils.html" title="nm-utils">nm-utils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-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-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="libnm-NMConnection.html#NM-VARIANT-TYPE-SETTING:CAPS" title="NM_VARIANT_TYPE_SETTING">NM_VARIANT_TYPE_SETTING</a>, macro in <a class="link" href="libnm-NMConnection.html" title="NMConnection">NMConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-version.html#NM-VERSION-0-9-10:CAPS" title="NM_VERSION_0_9_10">NM_VERSION_0_9_10</a>, macro in <a class="link" href="libnm-nm-version.html" title="nm-version">nm-version</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-version.html#NM-VERSION-0-9-8:CAPS" title="NM_VERSION_0_9_8">NM_VERSION_0_9_8</a>, macro in <a class="link" href="libnm-nm-version.html" title="nm-version">nm-version</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-version.html#NM-VERSION-1-0:CAPS" title="NM_VERSION_1_0">NM_VERSION_1_0</a>, macro in <a class="link" href="libnm-nm-version.html" title="nm-version">nm-version</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-version.html#NM-VERSION-CUR-STABLE:CAPS" title="NM_VERSION_CUR_STABLE">NM_VERSION_CUR_STABLE</a>, macro in <a class="link" href="libnm-nm-version.html" title="nm-version">nm-version</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-version.html#NM-VERSION-MAX-ALLOWED:CAPS" title="NM_VERSION_MAX_ALLOWED">NM_VERSION_MAX_ALLOWED</a>, macro in <a class="link" href="libnm-nm-version.html" title="nm-version">nm-version</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-version.html#NM-VERSION-MIN-REQUIRED:CAPS" title="NM_VERSION_MIN_REQUIRED">NM_VERSION_MIN_REQUIRED</a>, macro in <a class="link" href="libnm-nm-version.html" title="nm-version">nm-version</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-version.html#NM-VERSION-NEXT-STABLE:CAPS" title="NM_VERSION_NEXT_STABLE">NM_VERSION_NEXT_STABLE</a>, macro in <a class="link" href="libnm-nm-version.html" title="nm-version">nm-version</a>
+</dt>
+<dd></dd>
+<dt>
+<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-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="NMVpnConnection.html#NMVpnConnection-struct" title="struct 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--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#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-nm-vpn-dbus-interface.html#NMVpnConnectionState-enum" title="enum NMVpnConnectionState">NMVpnConnectionState</a>, enum in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NMVpnConnectionStateReason-enum" title="enum NMVpnConnectionStateReason">NMVpnConnectionStateReason</a>, enum in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMVpnEditorPlugin.html#NMVpnEditorInterface" title="NMVpnEditorInterface">NMVpnEditorInterface</a>, struct in <a class="link" href="libnm-NMVpnEditorPlugin.html" title="NMVpnEditorPlugin">NMVpnEditorPlugin</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMVpnEditorPlugin.html#NMVpnEditorPluginCapability-enum" title="enum NMVpnEditorPluginCapability">NMVpnEditorPluginCapability</a>, enum in <a class="link" href="libnm-NMVpnEditorPlugin.html" title="NMVpnEditorPlugin">NMVpnEditorPlugin</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMVpnEditorPlugin.html#NMVpnEditorPluginFactory" title="NMVpnEditorPluginFactory ()">NMVpnEditorPluginFactory</a>, user_function in <a class="link" href="libnm-NMVpnEditorPlugin.html" title="NMVpnEditorPlugin">NMVpnEditorPlugin</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMVpnEditorPlugin.html#NMVpnEditorPluginInterface" title="NMVpnEditorPluginInterface">NMVpnEditorPluginInterface</a>, struct in <a class="link" href="libnm-NMVpnEditorPlugin.html" title="NMVpnEditorPlugin">NMVpnEditorPlugin</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-errors.html#NMVpnPluginError-enum" title="enum NMVpnPluginError">NMVpnPluginError</a>, enum in <a class="link" href="libnm-nm-errors.html" title="nm-errors">nm-errors</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NMVpnPluginFailure-enum" title="enum NMVpnPluginFailure">NMVpnPluginFailure</a>, enum in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NMVpnServiceState-enum" title="enum NMVpnServiceState">NMVpnServiceState</a>, enum in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMVpnConnection.html#NM-VPN-CONNECTION-BANNER:CAPS" title="NM_VPN_CONNECTION_BANNER">NM_VPN_CONNECTION_BANNER</a>, macro 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-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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMVpnConnection.html#NM-VPN-CONNECTION-VPN-STATE:CAPS" title="NM_VPN_CONNECTION_VPN_STATE">NM_VPN_CONNECTION_VPN_STATE</a>, macro in <a class="link" href="NMVpnConnection.html" title="NMVpnConnection">NMVpnConnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-DBUS-PLUGIN-INTERFACE:CAPS" title="NM_VPN_DBUS_PLUGIN_INTERFACE">NM_VPN_DBUS_PLUGIN_INTERFACE</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-DBUS-PLUGIN-PATH:CAPS" title="NM_VPN_DBUS_PLUGIN_PATH">NM_VPN_DBUS_PLUGIN_PATH</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMVpnEditorPlugin.html#nm-vpn-editor-get-widget" title="nm_vpn_editor_get_widget ()">nm_vpn_editor_get_widget</a>, function in <a class="link" href="libnm-NMVpnEditorPlugin.html" title="NMVpnEditorPlugin">NMVpnEditorPlugin</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMVpnEditorPlugin.html#NM-VPN-EDITOR-PLUGIN-DESCRIPTION:CAPS" title="NM_VPN_EDITOR_PLUGIN_DESCRIPTION">NM_VPN_EDITOR_PLUGIN_DESCRIPTION</a>, macro in <a class="link" href="libnm-NMVpnEditorPlugin.html" title="NMVpnEditorPlugin">NMVpnEditorPlugin</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMVpnEditorPlugin.html#nm-vpn-editor-plugin-export" title="nm_vpn_editor_plugin_export ()">nm_vpn_editor_plugin_export</a>, function in <a class="link" href="libnm-NMVpnEditorPlugin.html" title="NMVpnEditorPlugin">NMVpnEditorPlugin</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMVpnEditorPlugin.html#nm-vpn-editor-plugin-factory" title="nm_vpn_editor_plugin_factory ()">nm_vpn_editor_plugin_factory</a>, function in <a class="link" href="libnm-NMVpnEditorPlugin.html" title="NMVpnEditorPlugin">NMVpnEditorPlugin</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMVpnEditorPlugin.html#nm-vpn-editor-plugin-get-capabilities" title="nm_vpn_editor_plugin_get_capabilities ()">nm_vpn_editor_plugin_get_capabilities</a>, function in <a class="link" href="libnm-NMVpnEditorPlugin.html" title="NMVpnEditorPlugin">NMVpnEditorPlugin</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMVpnEditorPlugin.html#nm-vpn-editor-plugin-get-editor" title="nm_vpn_editor_plugin_get_editor ()">nm_vpn_editor_plugin_get_editor</a>, function in <a class="link" href="libnm-NMVpnEditorPlugin.html" title="NMVpnEditorPlugin">NMVpnEditorPlugin</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMVpnEditorPlugin.html#nm-vpn-editor-plugin-get-suggested-filename" title="nm_vpn_editor_plugin_get_suggested_filename ()">nm_vpn_editor_plugin_get_suggested_filename</a>, function in <a class="link" href="libnm-NMVpnEditorPlugin.html" title="NMVpnEditorPlugin">NMVpnEditorPlugin</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMVpnEditorPlugin.html#nm-vpn-editor-plugin-import" title="nm_vpn_editor_plugin_import ()">nm_vpn_editor_plugin_import</a>, function in <a class="link" href="libnm-NMVpnEditorPlugin.html" title="NMVpnEditorPlugin">NMVpnEditorPlugin</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMVpnEditorPlugin.html#NM-VPN-EDITOR-PLUGIN-NAME:CAPS" title="NM_VPN_EDITOR_PLUGIN_NAME">NM_VPN_EDITOR_PLUGIN_NAME</a>, macro in <a class="link" href="libnm-NMVpnEditorPlugin.html" title="NMVpnEditorPlugin">NMVpnEditorPlugin</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMVpnEditorPlugin.html#NM-VPN-EDITOR-PLUGIN-SERVICE:CAPS" title="NM_VPN_EDITOR_PLUGIN_SERVICE">NM_VPN_EDITOR_PLUGIN_SERVICE</a>, macro in <a class="link" href="libnm-NMVpnEditorPlugin.html" title="NMVpnEditorPlugin">NMVpnEditorPlugin</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-NMVpnEditorPlugin.html#nm-vpn-editor-update-connection" title="nm_vpn_editor_update_connection ()">nm_vpn_editor_update_connection</a>, function in <a class="link" href="libnm-NMVpnEditorPlugin.html" title="NMVpnEditorPlugin">NMVpnEditorPlugin</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-CAN-PERSIST:CAPS" title="NM_VPN_PLUGIN_CAN_PERSIST">NM_VPN_PLUGIN_CAN_PERSIST</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-CONFIG-BANNER:CAPS" title="NM_VPN_PLUGIN_CONFIG_BANNER">NM_VPN_PLUGIN_CONFIG_BANNER</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-CONFIG-EXT-GATEWAY:CAPS" title="NM_VPN_PLUGIN_CONFIG_EXT_GATEWAY">NM_VPN_PLUGIN_CONFIG_EXT_GATEWAY</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-CONFIG-HAS-IP4:CAPS" title="NM_VPN_PLUGIN_CONFIG_HAS_IP4">NM_VPN_PLUGIN_CONFIG_HAS_IP4</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-CONFIG-HAS-IP6:CAPS" title="NM_VPN_PLUGIN_CONFIG_HAS_IP6">NM_VPN_PLUGIN_CONFIG_HAS_IP6</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-CONFIG-MTU:CAPS" title="NM_VPN_PLUGIN_CONFIG_MTU">NM_VPN_PLUGIN_CONFIG_MTU</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-CONFIG-TUNDEV:CAPS" title="NM_VPN_PLUGIN_CONFIG_TUNDEV">NM_VPN_PLUGIN_CONFIG_TUNDEV</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-errors.html#NM-VPN-PLUGIN-ERROR:CAPS" title="NM_VPN_PLUGIN_ERROR">NM_VPN_PLUGIN_ERROR</a>, macro in <a class="link" href="libnm-nm-errors.html" title="nm-errors">nm-errors</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-errors.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-nm-errors.html" title="nm-errors">nm-errors</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-ADDRESS:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_ADDRESS">NM_VPN_PLUGIN_IP4_CONFIG_ADDRESS</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-BANNER:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_BANNER">NM_VPN_PLUGIN_IP4_CONFIG_BANNER</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-DNS:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_DNS">NM_VPN_PLUGIN_IP4_CONFIG_DNS</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-DOMAIN:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_DOMAIN">NM_VPN_PLUGIN_IP4_CONFIG_DOMAIN</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-DOMAINS:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_DOMAINS">NM_VPN_PLUGIN_IP4_CONFIG_DOMAINS</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-EXT-GATEWAY:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY">NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-GATEWAY:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_GATEWAY">NM_VPN_PLUGIN_IP4_CONFIG_GATEWAY</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-INT-GATEWAY:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_INT_GATEWAY">NM_VPN_PLUGIN_IP4_CONFIG_INT_GATEWAY</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-MSS:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_MSS">NM_VPN_PLUGIN_IP4_CONFIG_MSS</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-MTU:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_MTU">NM_VPN_PLUGIN_IP4_CONFIG_MTU</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-NBNS:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_NBNS">NM_VPN_PLUGIN_IP4_CONFIG_NBNS</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-NEVER-DEFAULT:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_NEVER_DEFAULT">NM_VPN_PLUGIN_IP4_CONFIG_NEVER_DEFAULT</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-PREFIX:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_PREFIX">NM_VPN_PLUGIN_IP4_CONFIG_PREFIX</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-PTP:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_PTP">NM_VPN_PLUGIN_IP4_CONFIG_PTP</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-ROUTES:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_ROUTES">NM_VPN_PLUGIN_IP4_CONFIG_ROUTES</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-TUNDEV:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_TUNDEV">NM_VPN_PLUGIN_IP4_CONFIG_TUNDEV</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-ADDRESS:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_ADDRESS">NM_VPN_PLUGIN_IP6_CONFIG_ADDRESS</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-DNS:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_DNS">NM_VPN_PLUGIN_IP6_CONFIG_DNS</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-DOMAIN:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_DOMAIN">NM_VPN_PLUGIN_IP6_CONFIG_DOMAIN</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-DOMAINS:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_DOMAINS">NM_VPN_PLUGIN_IP6_CONFIG_DOMAINS</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-INT-GATEWAY:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_INT_GATEWAY">NM_VPN_PLUGIN_IP6_CONFIG_INT_GATEWAY</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-MSS:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_MSS">NM_VPN_PLUGIN_IP6_CONFIG_MSS</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-NEVER-DEFAULT:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_NEVER_DEFAULT">NM_VPN_PLUGIN_IP6_CONFIG_NEVER_DEFAULT</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-PREFIX:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_PREFIX">NM_VPN_PLUGIN_IP6_CONFIG_PREFIX</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-PTP:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_PTP">NM_VPN_PLUGIN_IP6_CONFIG_PTP</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-ROUTES:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_ROUTES">NM_VPN_PLUGIN_IP6_CONFIG_ROUTES</a>, macro in <a class="link" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">nm-vpn-dbus-interface</a>
+</dt>
+<dd></dd>
+<a name="idxW"></a><h3 class="title">W</h3>
+<dt>
+<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>
+<dt>
+<a class="link" href="NMWimaxNsp.html#NMWimaxNsp-struct" title="struct 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--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#NMWimaxNspClass" title="NMWimaxNspClass">NMWimaxNspClass</a>, struct in <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp">NMWimaxNsp</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMWimaxNsp.html#NMWimaxNspNetworkType-enum" title="enum NMWimaxNspNetworkType">NMWimaxNspNetworkType</a>, enum in <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp">NMWimaxNsp</a>
+</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>
+</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>
+</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>
+</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>
+</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>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMWimaxNsp.html#NM-WIMAX-NSP-NAME:CAPS" title="NM_WIMAX_NSP_NAME">NM_WIMAX_NSP_NAME</a>, macro in <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp">NMWimaxNsp</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMWimaxNsp.html#NM-WIMAX-NSP-NETWORK-TYPE:CAPS" title="NM_WIMAX_NSP_NETWORK_TYPE">NM_WIMAX_NSP_NETWORK_TYPE</a>, macro in <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp">NMWimaxNsp</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="NMWimaxNsp.html#NM-WIMAX-NSP-SIGNAL-QUALITY:CAPS" title="NM_WIMAX_NSP_SIGNAL_QUALITY">NM_WIMAX_NSP_SIGNAL_QUALITY</a>, macro in <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp">NMWimaxNsp</a>
+</dt>
+<dd></dd>
+</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/html/ch02.html b/docs/libnm/html/ch02.html
new file mode 100644
index 000000000..ba5f8372d
--- /dev/null
+++ b/docs/libnm/html/ch02.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Client Object API Reference</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="index.html" title="libnm Reference Manual">
+<link rel="prev" href="ref-overview.html" title="Overview">
+<link rel="next" href="NMClient.html" title="NMClient">
+<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="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 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">
+<a name="id-1.3"></a>Client Object API Reference</h1></div></div></div>
+<div class="toc"><dl class="toc">
+<dt>
+<span class="refentrytitle"><a href="NMClient.html">NMClient</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMSecretAgentOld.html">NMSecretAgentOld</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMObject.html">NMObject</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="libnm-nm-errors.html">nm-errors</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="libnm-nm-dbus-interface.html">nm-dbus-interface</a></span><span class="refpurpose"></span>
+</dt>
+</dl></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/html/ch03.html b/docs/libnm/html/ch03.html
new file mode 100644
index 000000000..022ba785e
--- /dev/null
+++ b/docs/libnm/html/ch03.html
@@ -0,0 +1,126 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Connection and Setting API Reference</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="index.html" title="libnm Reference Manual">
+<link rel="prev" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">
+<link rel="next" href="libnm-NMConnection.html" title="NMConnection">
+<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-nm-dbus-interface.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 Reference Manual</th>
+<td><a accesskey="n" href="libnm-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">
+<a name="id-1.4"></a>Connection and Setting API Reference</h1></div></div></div>
+<div class="toc"><dl class="toc">
+<dt>
+<span class="refentrytitle"><a href="libnm-NMConnection.html">NMConnection</a></span><span class="refpurpose"> — Describes a connection to specific network or provider</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMSimpleConnection.html">NMSimpleConnection</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMSetting.html">NMSetting</a></span><span class="refpurpose"> — Describes related configuration information</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMSettingConnection.html">NMSettingConnection</a></span><span class="refpurpose"> — Describes general connection properties</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>
+<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="NMSettingBluetooth.html">NMSettingBluetooth</a></span><span class="refpurpose"> — Describes Bluetooth connection properties</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMSettingBond.html">NMSettingBond</a></span><span class="refpurpose"> — Describes connection properties for bonds</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMSettingBridge.html">NMSettingBridge</a></span><span class="refpurpose"> — Describes connection properties for bridges</span>
+</dt>
+<dt>
+<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="NMSettingCdma.html">NMSettingCdma</a></span><span class="refpurpose"> — Describes CDMA-based mobile broadband 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="NMSettingGeneric.html">NMSettingGeneric</a></span><span class="refpurpose"> — Describes connection properties for generic devices</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMSettingGsm.html">NMSettingGsm</a></span><span class="refpurpose"> — Describes GSM/3GPP-based mobile broadband properties</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>
+<span class="refentrytitle"><a href="NMSettingIPConfig.html">NMSettingIPConfig</a></span><span class="refpurpose"> — Abstract base class for IPv4 and IPv6
+ addressing, routing, and name service properties</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMSettingIP4Config.html">NMSettingIP4Config</a></span><span class="refpurpose"> — Describes IPv4 addressing, routing, and name service properties</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMSettingIP6Config.html">NMSettingIP6Config</a></span><span class="refpurpose"> — Describes IPv6 addressing, routing, and name service properties</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMSettingOlpcMesh.html">NMSettingOlpcMesh</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMSettingPpp.html">NMSettingPpp</a></span><span class="refpurpose"> — Describes connection properties for devices/networks
+that require PPP to deliver IP capability</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMSettingPppoe.html">NMSettingPppoe</a></span><span class="refpurpose"> — Describes PPPoE connection properties</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMSettingSerial.html">NMSettingSerial</a></span><span class="refpurpose"> — Describes connection properties for devices that use
+serial communications</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="NMSettingVlan.html">NMSettingVlan</a></span><span class="refpurpose"> — Describes connection properties for VLAN interfaces</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMSettingVpn.html">NMSettingVpn</a></span><span class="refpurpose"> — Describes connection properties for Virtual Private Networks</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMSettingWimax.html">NMSettingWimax</a></span><span class="refpurpose"> — Describes 802.16e Mobile WiMAX connection properties</span>
+</dt>
+<dt>
+<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 Wi-Fi networks</span>
+</dt>
+<dt>
+<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>
+</dl></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/html/ch04.html b/docs/libnm/html/ch04.html
new file mode 100644
index 000000000..0053b1bdc
--- /dev/null
+++ b/docs/libnm/html/ch04.html
@@ -0,0 +1,95 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Device and Runtime Configuration API Reference</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="index.html" title="libnm Reference Manual">
+<link rel="prev" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">
+<link rel="next" href="NMDevice.html" title="NMDevice">
+<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="NMSettingWirelessSecurity.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 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></table>
+<div class="chapter">
+<div class="titlepage"><div><div><h1 class="title">
+<a name="id-1.5"></a>Device and Runtime Configuration API Reference</h1></div></div></div>
+<div class="toc"><dl class="toc">
+<dt>
+<span class="refentrytitle"><a href="NMDevice.html">NMDevice</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMDeviceAdsl.html">NMDeviceAdsl</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMDeviceBond.html">NMDeviceBond</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMDeviceBridge.html">NMDeviceBridge</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMDeviceBt.html">NMDeviceBt</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMDeviceEthernet.html">NMDeviceEthernet</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>
+<span class="refentrytitle"><a href="NMDeviceModem.html">NMDeviceModem</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMDeviceOlpcMesh.html">NMDeviceOlpcMesh</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="NMDeviceVlan.html">NMDeviceVlan</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMDeviceWifi.html">NMDeviceWifi</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMDeviceWimax.html">NMDeviceWimax</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMActiveConnection.html">NMActiveConnection</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMVpnConnection.html">NMVpnConnection</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMRemoteConnection.html">NMRemoteConnection</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMAccessPoint.html">NMAccessPoint</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMWimaxNsp.html">NMWimaxNsp</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMIPConfig.html">NMIPConfig</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMDhcpConfig.html">NMDhcpConfig</a></span><span class="refpurpose"></span>
+</dt>
+</dl></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/html/ch05.html b/docs/libnm/html/ch05.html
new file mode 100644
index 000000000..e54a51fe5
--- /dev/null
+++ b/docs/libnm/html/ch05.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Utility API Reference</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="index.html" title="libnm Reference Manual">
+<link rel="prev" href="NMDhcpConfig.html" title="NMDhcpConfig">
+<link rel="next" href="libnm-nm-utils.html" title="nm-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="NMDhcpConfig.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 Reference Manual</th>
+<td><a accesskey="n" href="libnm-nm-utils.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="id-1.6"></a>Utility API Reference</h1></div></div></div>
+<div class="toc"><dl class="toc">
+<dt>
+<span class="refentrytitle"><a href="libnm-nm-utils.html">nm-utils</a></span><span class="refpurpose"> — Utility functions</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="libnm-nm-version.html">nm-version</a></span><span class="refpurpose"></span>
+</dt>
+</dl></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/html/ch06.html b/docs/libnm/html/ch06.html
new file mode 100644
index 000000000..e89257224
--- /dev/null
+++ b/docs/libnm/html/ch06.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>VPN Plugin API Reference</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="index.html" title="libnm Reference Manual">
+<link rel="prev" href="libnm-nm-version.html" title="nm-version">
+<link rel="next" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">
+<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-nm-version.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 Reference Manual</th>
+<td><a accesskey="n" href="libnm-nm-vpn-dbus-interface.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="id-1.7"></a>VPN Plugin API Reference</h1></div></div></div>
+<div class="toc"><dl class="toc">
+<dt>
+<span class="refentrytitle"><a href="libnm-nm-vpn-dbus-interface.html">nm-vpn-dbus-interface</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="libnm-NMVpnEditorPlugin.html">NMVpnEditorPlugin</a></span><span class="refpurpose"></span>
+</dt>
+</dl></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/html/home.png b/docs/libnm/html/home.png
new file mode 100644
index 000000000..17003611d
--- /dev/null
+++ b/docs/libnm/html/home.png
Binary files differ
diff --git a/docs/libnm/html/index.html b/docs/libnm/html/index.html
new file mode 100644
index 000000000..8597a0f85
--- /dev/null
+++ b/docs/libnm/html/index.html
@@ -0,0 +1,259 @@
+<!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 Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="next" href="ref-overview.html" title="Overview">
+<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">
+<div class="book">
+<div class="titlepage">
+<div>
+<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">libnm Reference Manual</p></th></tr></table></div>
+<div><p class="releaseinfo">
+ for libnm 1.0.0
+
+ The latest version of this documentation can be found on-line at
+ <a class="ulink" href="https://developer.gnome.org/libnm/1.0/" target="_top">https://developer.gnome.org/libnm/1.0/</a>.
+ </p></div>
+<div><p class="copyright">Copyright © 2012-2014 The NetworkManager Authors</p></div>
+<div><div class="legalnotice">
+<a name="id-1.1.4"></a><p>
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the <em class="citetitle">GNU Free
+ Documentation License</em>, Version 1.1 or any later
+ version published by the Free Software Foundation with no
+ Invariant Sections, no Front-Cover Texts, and no Back-Cover
+ Texts. You may obtain a copy of the <em class="citetitle">GNU Free
+ Documentation License</em> from the Free Software
+ Foundation by visiting <a class="ulink" href="http://www.fsf.org" target="_top">their Web site</a> or by writing
+ to:
+
+ </p>
+<div class="address"><p><br>
+   The Free Software Foundation, Inc.,<br>
+   <span class="street">51 Franklin Street</span> - Fifth Floor,<br>
+   <span class="city">Boston</span>, <span class="state">MA</span> <span class="postcode">02110-1301</span>,<br>
+   <span class="country">USA</span><br>
+ </p></div>
+<p>
+ </p>
+</div></div>
+</div>
+<hr>
+</div>
+<div class="toc"><dl class="toc">
+<dt><span class="chapter"><a href="ref-overview.html">Overview</a></span></dt>
+<dt><span class="chapter"><a href="ch02.html">Client Object API Reference</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="NMClient.html">NMClient</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMSecretAgentOld.html">NMSecretAgentOld</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMObject.html">NMObject</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="libnm-nm-errors.html">nm-errors</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="libnm-nm-dbus-interface.html">nm-dbus-interface</a></span><span class="refpurpose"></span>
+</dt>
+</dl></dd>
+<dt><span class="chapter"><a href="ch03.html">Connection and Setting API Reference</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="libnm-NMConnection.html">NMConnection</a></span><span class="refpurpose"> — Describes a connection to specific network or provider</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMSimpleConnection.html">NMSimpleConnection</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMSetting.html">NMSetting</a></span><span class="refpurpose"> — Describes related configuration information</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMSettingConnection.html">NMSettingConnection</a></span><span class="refpurpose"> — Describes general connection properties</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>
+<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="NMSettingBluetooth.html">NMSettingBluetooth</a></span><span class="refpurpose"> — Describes Bluetooth connection properties</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMSettingBond.html">NMSettingBond</a></span><span class="refpurpose"> — Describes connection properties for bonds</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMSettingBridge.html">NMSettingBridge</a></span><span class="refpurpose"> — Describes connection properties for bridges</span>
+</dt>
+<dt>
+<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="NMSettingCdma.html">NMSettingCdma</a></span><span class="refpurpose"> — Describes CDMA-based mobile broadband 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="NMSettingGeneric.html">NMSettingGeneric</a></span><span class="refpurpose"> — Describes connection properties for generic devices</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMSettingGsm.html">NMSettingGsm</a></span><span class="refpurpose"> — Describes GSM/3GPP-based mobile broadband properties</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>
+<span class="refentrytitle"><a href="NMSettingIPConfig.html">NMSettingIPConfig</a></span><span class="refpurpose"> — Abstract base class for IPv4 and IPv6
+ addressing, routing, and name service properties</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMSettingIP4Config.html">NMSettingIP4Config</a></span><span class="refpurpose"> — Describes IPv4 addressing, routing, and name service properties</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMSettingIP6Config.html">NMSettingIP6Config</a></span><span class="refpurpose"> — Describes IPv6 addressing, routing, and name service properties</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMSettingOlpcMesh.html">NMSettingOlpcMesh</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMSettingPpp.html">NMSettingPpp</a></span><span class="refpurpose"> — Describes connection properties for devices/networks
+that require PPP to deliver IP capability</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMSettingPppoe.html">NMSettingPppoe</a></span><span class="refpurpose"> — Describes PPPoE connection properties</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMSettingSerial.html">NMSettingSerial</a></span><span class="refpurpose"> — Describes connection properties for devices that use
+serial communications</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="NMSettingVlan.html">NMSettingVlan</a></span><span class="refpurpose"> — Describes connection properties for VLAN interfaces</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMSettingVpn.html">NMSettingVpn</a></span><span class="refpurpose"> — Describes connection properties for Virtual Private Networks</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMSettingWimax.html">NMSettingWimax</a></span><span class="refpurpose"> — Describes 802.16e Mobile WiMAX connection properties</span>
+</dt>
+<dt>
+<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 Wi-Fi networks</span>
+</dt>
+<dt>
+<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>
+</dl></dd>
+<dt><span class="chapter"><a href="ch04.html">Device and Runtime Configuration API Reference</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="NMDevice.html">NMDevice</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMDeviceAdsl.html">NMDeviceAdsl</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMDeviceBond.html">NMDeviceBond</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMDeviceBridge.html">NMDeviceBridge</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMDeviceBt.html">NMDeviceBt</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMDeviceEthernet.html">NMDeviceEthernet</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>
+<span class="refentrytitle"><a href="NMDeviceModem.html">NMDeviceModem</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMDeviceOlpcMesh.html">NMDeviceOlpcMesh</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="NMDeviceVlan.html">NMDeviceVlan</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMDeviceWifi.html">NMDeviceWifi</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMDeviceWimax.html">NMDeviceWimax</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMActiveConnection.html">NMActiveConnection</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMVpnConnection.html">NMVpnConnection</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMRemoteConnection.html">NMRemoteConnection</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMAccessPoint.html">NMAccessPoint</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMWimaxNsp.html">NMWimaxNsp</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMIPConfig.html">NMIPConfig</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="NMDhcpConfig.html">NMDhcpConfig</a></span><span class="refpurpose"></span>
+</dt>
+</dl></dd>
+<dt><span class="chapter"><a href="ch05.html">Utility API Reference</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="libnm-nm-utils.html">nm-utils</a></span><span class="refpurpose"> — Utility functions</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="libnm-nm-version.html">nm-version</a></span><span class="refpurpose"></span>
+</dt>
+</dl></dd>
+<dt><span class="chapter"><a href="ch06.html">VPN Plugin API Reference</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="libnm-nm-vpn-dbus-interface.html">nm-vpn-dbus-interface</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="libnm-NMVpnEditorPlugin.html">NMVpnEditorPlugin</a></span><span class="refpurpose"></span>
+</dt>
+</dl></dd>
+<dt><span class="chapter"><a href="object-tree.html">Object Hierarchy</a></span></dt>
+<dt><span class="index"><a href="api-index-full.html">API Index</a></span></dt>
+<dt><span class="glossary"><a href="annotation-glossary.html">Annotation Glossary</a></span></dt>
+</dl></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/html/index.sgml b/docs/libnm/html/index.sgml
new file mode 100644
index 000000000..20ed77945
--- /dev/null
+++ b/docs/libnm/html/index.sgml
@@ -0,0 +1,2622 @@
+<ONLINE href="https://developer.gnome.org/libnm/1.0/">
+<ANCHOR id="NMClient" href="libnm/NMClient.html">
+<ANCHOR id="NMClient.synopsis" href="libnm/NMClient.html#NMClient.synopsis">
+<ANCHOR id="NMClientPermission" href="libnm/NMClient.html#NMClientPermission">
+<ANCHOR id="NMClientPermissionResult" href="libnm/NMClient.html#NMClientPermissionResult">
+<ANCHOR id="NMClientError" href="libnm/NMClient.html#NMClientError">
+<ANCHOR id="NMClient.object-hierarchy" href="libnm/NMClient.html#NMClient.object-hierarchy">
+<ANCHOR id="NMClient.implemented-interfaces" href="libnm/NMClient.html#NMClient.implemented-interfaces">
+<ANCHOR id="NMClient.properties" href="libnm/NMClient.html#NMClient.properties">
+<ANCHOR id="NMClient.signals" href="libnm/NMClient.html#NMClient.signals">
+<ANCHOR id="NMClient.description" href="libnm/NMClient.html#NMClient.description">
+<ANCHOR id="NMClient.details" href="libnm/NMClient.html#NMClient.details">
+<ANCHOR id="NM-CLIENT-VERSION:CAPS" href="libnm/NMClient.html#NM-CLIENT-VERSION:CAPS">
+<ANCHOR id="NM-CLIENT-STATE:CAPS" href="libnm/NMClient.html#NM-CLIENT-STATE:CAPS">
+<ANCHOR id="NM-CLIENT-STARTUP:CAPS" href="libnm/NMClient.html#NM-CLIENT-STARTUP:CAPS">
+<ANCHOR id="NM-CLIENT-NM-RUNNING:CAPS" href="libnm/NMClient.html#NM-CLIENT-NM-RUNNING:CAPS">
+<ANCHOR id="NM-CLIENT-NETWORKING-ENABLED:CAPS" href="libnm/NMClient.html#NM-CLIENT-NETWORKING-ENABLED:CAPS">
+<ANCHOR id="NM-CLIENT-WIRELESS-ENABLED:CAPS" href="libnm/NMClient.html#NM-CLIENT-WIRELESS-ENABLED:CAPS">
+<ANCHOR id="NM-CLIENT-WIRELESS-HARDWARE-ENABLED:CAPS" href="libnm/NMClient.html#NM-CLIENT-WIRELESS-HARDWARE-ENABLED:CAPS">
+<ANCHOR id="NM-CLIENT-WWAN-ENABLED:CAPS" href="libnm/NMClient.html#NM-CLIENT-WWAN-ENABLED:CAPS">
+<ANCHOR id="NM-CLIENT-WWAN-HARDWARE-ENABLED:CAPS" href="libnm/NMClient.html#NM-CLIENT-WWAN-HARDWARE-ENABLED:CAPS">
+<ANCHOR id="NM-CLIENT-WIMAX-ENABLED:CAPS" href="libnm/NMClient.html#NM-CLIENT-WIMAX-ENABLED:CAPS">
+<ANCHOR id="NM-CLIENT-WIMAX-HARDWARE-ENABLED:CAPS" href="libnm/NMClient.html#NM-CLIENT-WIMAX-HARDWARE-ENABLED:CAPS">
+<ANCHOR id="NM-CLIENT-ACTIVE-CONNECTIONS:CAPS" href="libnm/NMClient.html#NM-CLIENT-ACTIVE-CONNECTIONS:CAPS">
+<ANCHOR id="NM-CLIENT-CONNECTIVITY:CAPS" href="libnm/NMClient.html#NM-CLIENT-CONNECTIVITY:CAPS">
+<ANCHOR id="NM-CLIENT-PRIMARY-CONNECTION:CAPS" href="libnm/NMClient.html#NM-CLIENT-PRIMARY-CONNECTION:CAPS">
+<ANCHOR id="NM-CLIENT-ACTIVATING-CONNECTION:CAPS" href="libnm/NMClient.html#NM-CLIENT-ACTIVATING-CONNECTION:CAPS">
+<ANCHOR id="NM-CLIENT-DEVICES:CAPS" href="libnm/NMClient.html#NM-CLIENT-DEVICES:CAPS">
+<ANCHOR id="NM-CLIENT-CONNECTIONS:CAPS" href="libnm/NMClient.html#NM-CLIENT-CONNECTIONS:CAPS">
+<ANCHOR id="NM-CLIENT-HOSTNAME:CAPS" href="libnm/NMClient.html#NM-CLIENT-HOSTNAME:CAPS">
+<ANCHOR id="NM-CLIENT-CAN-MODIFY:CAPS" href="libnm/NMClient.html#NM-CLIENT-CAN-MODIFY:CAPS">
+<ANCHOR id="NM-CLIENT-DEVICE-ADDED:CAPS" href="libnm/NMClient.html#NM-CLIENT-DEVICE-ADDED:CAPS">
+<ANCHOR id="NM-CLIENT-DEVICE-REMOVED:CAPS" href="libnm/NMClient.html#NM-CLIENT-DEVICE-REMOVED:CAPS">
+<ANCHOR id="NM-CLIENT-PERMISSION-CHANGED:CAPS" href="libnm/NMClient.html#NM-CLIENT-PERMISSION-CHANGED:CAPS">
+<ANCHOR id="NM-CLIENT-CONNECTION-ADDED:CAPS" href="libnm/NMClient.html#NM-CLIENT-CONNECTION-ADDED:CAPS">
+<ANCHOR id="NM-CLIENT-CONNECTION-REMOVED:CAPS" href="libnm/NMClient.html#NM-CLIENT-CONNECTION-REMOVED:CAPS">
+<ANCHOR id="NMClientPermission-enum" href="libnm/NMClient.html#NMClientPermission-enum">
+<ANCHOR id="NM-CLIENT-PERMISSION-NONE:CAPS" href="libnm/NMClient.html#NM-CLIENT-PERMISSION-NONE:CAPS">
+<ANCHOR id="NM-CLIENT-PERMISSION-ENABLE-DISABLE-NETWORK:CAPS" href="libnm/NMClient.html#NM-CLIENT-PERMISSION-ENABLE-DISABLE-NETWORK:CAPS">
+<ANCHOR id="NM-CLIENT-PERMISSION-ENABLE-DISABLE-WIFI:CAPS" href="libnm/NMClient.html#NM-CLIENT-PERMISSION-ENABLE-DISABLE-WIFI:CAPS">
+<ANCHOR id="NM-CLIENT-PERMISSION-ENABLE-DISABLE-WWAN:CAPS" href="libnm/NMClient.html#NM-CLIENT-PERMISSION-ENABLE-DISABLE-WWAN:CAPS">
+<ANCHOR id="NM-CLIENT-PERMISSION-ENABLE-DISABLE-WIMAX:CAPS" href="libnm/NMClient.html#NM-CLIENT-PERMISSION-ENABLE-DISABLE-WIMAX:CAPS">
+<ANCHOR id="NM-CLIENT-PERMISSION-SLEEP-WAKE:CAPS" href="libnm/NMClient.html#NM-CLIENT-PERMISSION-SLEEP-WAKE:CAPS">
+<ANCHOR id="NM-CLIENT-PERMISSION-NETWORK-CONTROL:CAPS" href="libnm/NMClient.html#NM-CLIENT-PERMISSION-NETWORK-CONTROL:CAPS">
+<ANCHOR id="NM-CLIENT-PERMISSION-WIFI-SHARE-PROTECTED:CAPS" href="libnm/NMClient.html#NM-CLIENT-PERMISSION-WIFI-SHARE-PROTECTED:CAPS">
+<ANCHOR id="NM-CLIENT-PERMISSION-WIFI-SHARE-OPEN:CAPS" href="libnm/NMClient.html#NM-CLIENT-PERMISSION-WIFI-SHARE-OPEN:CAPS">
+<ANCHOR id="NM-CLIENT-PERMISSION-SETTINGS-MODIFY-SYSTEM:CAPS" href="libnm/NMClient.html#NM-CLIENT-PERMISSION-SETTINGS-MODIFY-SYSTEM:CAPS">
+<ANCHOR id="NM-CLIENT-PERMISSION-SETTINGS-MODIFY-OWN:CAPS" href="libnm/NMClient.html#NM-CLIENT-PERMISSION-SETTINGS-MODIFY-OWN:CAPS">
+<ANCHOR id="NM-CLIENT-PERMISSION-SETTINGS-MODIFY-HOSTNAME:CAPS" href="libnm/NMClient.html#NM-CLIENT-PERMISSION-SETTINGS-MODIFY-HOSTNAME:CAPS">
+<ANCHOR id="NM-CLIENT-PERMISSION-LAST:CAPS" href="libnm/NMClient.html#NM-CLIENT-PERMISSION-LAST:CAPS">
+<ANCHOR id="NMClientPermissionResult-enum" href="libnm/NMClient.html#NMClientPermissionResult-enum">
+<ANCHOR id="NM-CLIENT-PERMISSION-RESULT-UNKNOWN:CAPS" href="libnm/NMClient.html#NM-CLIENT-PERMISSION-RESULT-UNKNOWN:CAPS">
+<ANCHOR id="NM-CLIENT-PERMISSION-RESULT-YES:CAPS" href="libnm/NMClient.html#NM-CLIENT-PERMISSION-RESULT-YES:CAPS">
+<ANCHOR id="NM-CLIENT-PERMISSION-RESULT-AUTH:CAPS" href="libnm/NMClient.html#NM-CLIENT-PERMISSION-RESULT-AUTH:CAPS">
+<ANCHOR id="NM-CLIENT-PERMISSION-RESULT-NO:CAPS" href="libnm/NMClient.html#NM-CLIENT-PERMISSION-RESULT-NO:CAPS">
+<ANCHOR id="NMClientError-enum" href="libnm/NMClient.html#NMClientError-enum">
+<ANCHOR id="NM-CLIENT-ERROR-FAILED:CAPS" href="libnm/NMClient.html#NM-CLIENT-ERROR-FAILED:CAPS">
+<ANCHOR id="NM-CLIENT-ERROR-MANAGER-NOT-RUNNING:CAPS" href="libnm/NMClient.html#NM-CLIENT-ERROR-MANAGER-NOT-RUNNING:CAPS">
+<ANCHOR id="NM-CLIENT-ERROR-OBJECT-CREATION-FAILED:CAPS" href="libnm/NMClient.html#NM-CLIENT-ERROR-OBJECT-CREATION-FAILED:CAPS">
+<ANCHOR id="NM-CLIENT-ERROR:CAPS" href="libnm/NMClient.html#NM-CLIENT-ERROR:CAPS">
+<ANCHOR id="nm-client-error-quark" href="libnm/NMClient.html#nm-client-error-quark">
+<ANCHOR id="NMClient-struct" href="libnm/NMClient.html#NMClient-struct">
+<ANCHOR id="NMClientClass" href="libnm/NMClient.html#NMClientClass">
+<ANCHOR id="nm-client-new" href="libnm/NMClient.html#nm-client-new">
+<ANCHOR id="nm-client-new-async" href="libnm/NMClient.html#nm-client-new-async">
+<ANCHOR id="nm-client-new-finish" href="libnm/NMClient.html#nm-client-new-finish">
+<ANCHOR id="nm-client-get-version" href="libnm/NMClient.html#nm-client-get-version">
+<ANCHOR id="nm-client-get-state" href="libnm/NMClient.html#nm-client-get-state">
+<ANCHOR id="nm-client-get-startup" href="libnm/NMClient.html#nm-client-get-startup">
+<ANCHOR id="nm-client-get-nm-running" href="libnm/NMClient.html#nm-client-get-nm-running">
+<ANCHOR id="nm-client-networking-get-enabled" href="libnm/NMClient.html#nm-client-networking-get-enabled">
+<ANCHOR id="nm-client-networking-set-enabled" href="libnm/NMClient.html#nm-client-networking-set-enabled">
+<ANCHOR id="nm-client-wireless-get-enabled" href="libnm/NMClient.html#nm-client-wireless-get-enabled">
+<ANCHOR id="nm-client-wireless-set-enabled" href="libnm/NMClient.html#nm-client-wireless-set-enabled">
+<ANCHOR id="nm-client-wireless-hardware-get-enabled" href="libnm/NMClient.html#nm-client-wireless-hardware-get-enabled">
+<ANCHOR id="nm-client-wwan-get-enabled" href="libnm/NMClient.html#nm-client-wwan-get-enabled">
+<ANCHOR id="nm-client-wwan-set-enabled" href="libnm/NMClient.html#nm-client-wwan-set-enabled">
+<ANCHOR id="nm-client-wwan-hardware-get-enabled" href="libnm/NMClient.html#nm-client-wwan-hardware-get-enabled">
+<ANCHOR id="nm-client-wimax-get-enabled" href="libnm/NMClient.html#nm-client-wimax-get-enabled">
+<ANCHOR id="nm-client-wimax-set-enabled" href="libnm/NMClient.html#nm-client-wimax-set-enabled">
+<ANCHOR id="nm-client-wimax-hardware-get-enabled" href="libnm/NMClient.html#nm-client-wimax-hardware-get-enabled">
+<ANCHOR id="nm-client-get-logging" href="libnm/NMClient.html#nm-client-get-logging">
+<ANCHOR id="nm-client-set-logging" href="libnm/NMClient.html#nm-client-set-logging">
+<ANCHOR id="nm-client-get-permission-result" href="libnm/NMClient.html#nm-client-get-permission-result">
+<ANCHOR id="nm-client-get-connectivity" href="libnm/NMClient.html#nm-client-get-connectivity">
+<ANCHOR id="nm-client-check-connectivity" href="libnm/NMClient.html#nm-client-check-connectivity">
+<ANCHOR id="nm-client-check-connectivity-async" href="libnm/NMClient.html#nm-client-check-connectivity-async">
+<ANCHOR id="nm-client-check-connectivity-finish" href="libnm/NMClient.html#nm-client-check-connectivity-finish">
+<ANCHOR id="nm-client-save-hostname" href="libnm/NMClient.html#nm-client-save-hostname">
+<ANCHOR id="nm-client-save-hostname-async" href="libnm/NMClient.html#nm-client-save-hostname-async">
+<ANCHOR id="nm-client-save-hostname-finish" href="libnm/NMClient.html#nm-client-save-hostname-finish">
+<ANCHOR id="nm-client-get-devices" href="libnm/NMClient.html#nm-client-get-devices">
+<ANCHOR id="nm-client-get-device-by-path" href="libnm/NMClient.html#nm-client-get-device-by-path">
+<ANCHOR id="nm-client-get-device-by-iface" href="libnm/NMClient.html#nm-client-get-device-by-iface">
+<ANCHOR id="nm-client-get-active-connections" href="libnm/NMClient.html#nm-client-get-active-connections">
+<ANCHOR id="nm-client-get-primary-connection" href="libnm/NMClient.html#nm-client-get-primary-connection">
+<ANCHOR id="nm-client-get-activating-connection" href="libnm/NMClient.html#nm-client-get-activating-connection">
+<ANCHOR id="nm-client-activate-connection-async" href="libnm/NMClient.html#nm-client-activate-connection-async">
+<ANCHOR id="nm-client-activate-connection-finish" href="libnm/NMClient.html#nm-client-activate-connection-finish">
+<ANCHOR id="nm-client-add-and-activate-connection-async" href="libnm/NMClient.html#nm-client-add-and-activate-connection-async">
+<ANCHOR id="nm-client-add-and-activate-connection-finish" href="libnm/NMClient.html#nm-client-add-and-activate-connection-finish">
+<ANCHOR id="nm-client-deactivate-connection" href="libnm/NMClient.html#nm-client-deactivate-connection">
+<ANCHOR id="nm-client-deactivate-connection-async" href="libnm/NMClient.html#nm-client-deactivate-connection-async">
+<ANCHOR id="nm-client-deactivate-connection-finish" href="libnm/NMClient.html#nm-client-deactivate-connection-finish">
+<ANCHOR id="nm-client-get-connections" href="libnm/NMClient.html#nm-client-get-connections">
+<ANCHOR id="nm-client-get-connection-by-id" href="libnm/NMClient.html#nm-client-get-connection-by-id">
+<ANCHOR id="nm-client-get-connection-by-path" href="libnm/NMClient.html#nm-client-get-connection-by-path">
+<ANCHOR id="nm-client-get-connection-by-uuid" href="libnm/NMClient.html#nm-client-get-connection-by-uuid">
+<ANCHOR id="nm-client-add-connection-async" href="libnm/NMClient.html#nm-client-add-connection-async">
+<ANCHOR id="nm-client-add-connection-finish" href="libnm/NMClient.html#nm-client-add-connection-finish">
+<ANCHOR id="nm-client-load-connections" href="libnm/NMClient.html#nm-client-load-connections">
+<ANCHOR id="nm-client-load-connections-async" href="libnm/NMClient.html#nm-client-load-connections-async">
+<ANCHOR id="nm-client-load-connections-finish" href="libnm/NMClient.html#nm-client-load-connections-finish">
+<ANCHOR id="nm-client-reload-connections" href="libnm/NMClient.html#nm-client-reload-connections">
+<ANCHOR id="nm-client-reload-connections-async" href="libnm/NMClient.html#nm-client-reload-connections-async">
+<ANCHOR id="nm-client-reload-connections-finish" href="libnm/NMClient.html#nm-client-reload-connections-finish">
+<ANCHOR id="NMClient.property-details" href="libnm/NMClient.html#NMClient.property-details">
+<ANCHOR id="NMClient--activating-connection" href="libnm/NMClient.html#NMClient--activating-connection">
+<ANCHOR id="NMClient--active-connections" href="libnm/NMClient.html#NMClient--active-connections">
+<ANCHOR id="NMClient--can-modify" href="libnm/NMClient.html#NMClient--can-modify">
+<ANCHOR id="NMClient--connections" href="libnm/NMClient.html#NMClient--connections">
+<ANCHOR id="NMClient--connectivity" href="libnm/NMClient.html#NMClient--connectivity">
+<ANCHOR id="NMClient--devices" href="libnm/NMClient.html#NMClient--devices">
+<ANCHOR id="NMClient--hostname" href="libnm/NMClient.html#NMClient--hostname">
+<ANCHOR id="NMClient--networking-enabled" href="libnm/NMClient.html#NMClient--networking-enabled">
+<ANCHOR id="NMClient--nm-running" href="libnm/NMClient.html#NMClient--nm-running">
+<ANCHOR id="NMClient--primary-connection" href="libnm/NMClient.html#NMClient--primary-connection">
+<ANCHOR id="NMClient--startup" href="libnm/NMClient.html#NMClient--startup">
+<ANCHOR id="NMClient--state" href="libnm/NMClient.html#NMClient--state">
+<ANCHOR id="NMClient--version" href="libnm/NMClient.html#NMClient--version">
+<ANCHOR id="NMClient--wimax-enabled" href="libnm/NMClient.html#NMClient--wimax-enabled">
+<ANCHOR id="NMClient--wimax-hardware-enabled" href="libnm/NMClient.html#NMClient--wimax-hardware-enabled">
+<ANCHOR id="NMClient--wireless-enabled" href="libnm/NMClient.html#NMClient--wireless-enabled">
+<ANCHOR id="NMClient--wireless-hardware-enabled" href="libnm/NMClient.html#NMClient--wireless-hardware-enabled">
+<ANCHOR id="NMClient--wwan-enabled" href="libnm/NMClient.html#NMClient--wwan-enabled">
+<ANCHOR id="NMClient--wwan-hardware-enabled" href="libnm/NMClient.html#NMClient--wwan-hardware-enabled">
+<ANCHOR id="NMClient.signal-details" href="libnm/NMClient.html#NMClient.signal-details">
+<ANCHOR id="NMClient-connection-added" href="libnm/NMClient.html#NMClient-connection-added">
+<ANCHOR id="NMClient-connection-removed" href="libnm/NMClient.html#NMClient-connection-removed">
+<ANCHOR id="NMClient-device-added" href="libnm/NMClient.html#NMClient-device-added">
+<ANCHOR id="NMClient-device-removed" href="libnm/NMClient.html#NMClient-device-removed">
+<ANCHOR id="NMClient-permission-changed" href="libnm/NMClient.html#NMClient-permission-changed">
+<ANCHOR id="NMSecretAgentOld" href="libnm/NMSecretAgentOld.html">
+<ANCHOR id="NMSecretAgentOld.synopsis" href="libnm/NMSecretAgentOld.html#NMSecretAgentOld.synopsis">
+<ANCHOR id="NMSecretAgentOld.object-hierarchy" href="libnm/NMSecretAgentOld.html#NMSecretAgentOld.object-hierarchy">
+<ANCHOR id="NMSecretAgentOld.implemented-interfaces" href="libnm/NMSecretAgentOld.html#NMSecretAgentOld.implemented-interfaces">
+<ANCHOR id="NMSecretAgentOld.properties" href="libnm/NMSecretAgentOld.html#NMSecretAgentOld.properties">
+<ANCHOR id="NMSecretAgentOld.description" href="libnm/NMSecretAgentOld.html#NMSecretAgentOld.description">
+<ANCHOR id="NMSecretAgentOld.details" href="libnm/NMSecretAgentOld.html#NMSecretAgentOld.details">
+<ANCHOR id="NM-SECRET-AGENT-OLD-IDENTIFIER:CAPS" href="libnm/NMSecretAgentOld.html#NM-SECRET-AGENT-OLD-IDENTIFIER:CAPS">
+<ANCHOR id="NM-SECRET-AGENT-OLD-AUTO-REGISTER:CAPS" href="libnm/NMSecretAgentOld.html#NM-SECRET-AGENT-OLD-AUTO-REGISTER:CAPS">
+<ANCHOR id="NM-SECRET-AGENT-OLD-REGISTERED:CAPS" href="libnm/NMSecretAgentOld.html#NM-SECRET-AGENT-OLD-REGISTERED:CAPS">
+<ANCHOR id="NM-SECRET-AGENT-OLD-CAPABILITIES:CAPS" href="libnm/NMSecretAgentOld.html#NM-SECRET-AGENT-OLD-CAPABILITIES:CAPS">
+<ANCHOR id="NMSecretAgentOld-struct" href="libnm/NMSecretAgentOld.html#NMSecretAgentOld-struct">
+<ANCHOR id="NMSecretAgentOldGetSecretsFunc" href="libnm/NMSecretAgentOld.html#NMSecretAgentOldGetSecretsFunc">
+<ANCHOR id="NMSecretAgentOldSaveSecretsFunc" href="libnm/NMSecretAgentOld.html#NMSecretAgentOldSaveSecretsFunc">
+<ANCHOR id="NMSecretAgentOldDeleteSecretsFunc" href="libnm/NMSecretAgentOld.html#NMSecretAgentOldDeleteSecretsFunc">
+<ANCHOR id="NMSecretAgentOldClass" href="libnm/NMSecretAgentOld.html#NMSecretAgentOldClass">
+<ANCHOR id="nm-secret-agent-old-register" href="libnm/NMSecretAgentOld.html#nm-secret-agent-old-register">
+<ANCHOR id="nm-secret-agent-old-register-async" href="libnm/NMSecretAgentOld.html#nm-secret-agent-old-register-async">
+<ANCHOR id="nm-secret-agent-old-register-finish" href="libnm/NMSecretAgentOld.html#nm-secret-agent-old-register-finish">
+<ANCHOR id="nm-secret-agent-old-unregister" href="libnm/NMSecretAgentOld.html#nm-secret-agent-old-unregister">
+<ANCHOR id="nm-secret-agent-old-unregister-async" href="libnm/NMSecretAgentOld.html#nm-secret-agent-old-unregister-async">
+<ANCHOR id="nm-secret-agent-old-unregister-finish" href="libnm/NMSecretAgentOld.html#nm-secret-agent-old-unregister-finish">
+<ANCHOR id="nm-secret-agent-old-get-registered" href="libnm/NMSecretAgentOld.html#nm-secret-agent-old-get-registered">
+<ANCHOR id="nm-secret-agent-old-get-secrets" href="libnm/NMSecretAgentOld.html#nm-secret-agent-old-get-secrets">
+<ANCHOR id="nm-secret-agent-old-save-secrets" href="libnm/NMSecretAgentOld.html#nm-secret-agent-old-save-secrets">
+<ANCHOR id="nm-secret-agent-old-delete-secrets" href="libnm/NMSecretAgentOld.html#nm-secret-agent-old-delete-secrets">
+<ANCHOR id="NMSecretAgentOld.property-details" href="libnm/NMSecretAgentOld.html#NMSecretAgentOld.property-details">
+<ANCHOR id="NMSecretAgentOld--auto-register" href="libnm/NMSecretAgentOld.html#NMSecretAgentOld--auto-register">
+<ANCHOR id="NMSecretAgentOld--capabilities" href="libnm/NMSecretAgentOld.html#NMSecretAgentOld--capabilities">
+<ANCHOR id="NMSecretAgentOld--identifier" href="libnm/NMSecretAgentOld.html#NMSecretAgentOld--identifier">
+<ANCHOR id="NMSecretAgentOld--registered" href="libnm/NMSecretAgentOld.html#NMSecretAgentOld--registered">
+<ANCHOR id="NMObject" href="libnm/NMObject.html">
+<ANCHOR id="NMObject.synopsis" href="libnm/NMObject.html#NMObject.synopsis">
+<ANCHOR id="NMObject.object-hierarchy" href="libnm/NMObject.html#NMObject.object-hierarchy">
+<ANCHOR id="NMObject.implemented-interfaces" href="libnm/NMObject.html#NMObject.implemented-interfaces">
+<ANCHOR id="NMObject.properties" href="libnm/NMObject.html#NMObject.properties">
+<ANCHOR id="NMObject.description" href="libnm/NMObject.html#NMObject.description">
+<ANCHOR id="NMObject.details" href="libnm/NMObject.html#NMObject.details">
+<ANCHOR id="NM-OBJECT-PATH:CAPS" href="libnm/NMObject.html#NM-OBJECT-PATH:CAPS">
+<ANCHOR id="NM-OBJECT-DBUS-CONNECTION:CAPS" href="libnm/NMObject.html#NM-OBJECT-DBUS-CONNECTION:CAPS">
+<ANCHOR id="NMObject-struct" href="libnm/NMObject.html#NMObject-struct">
+<ANCHOR id="NMObjectClass" href="libnm/NMObject.html#NMObjectClass">
+<ANCHOR id="nm-object-get-path" href="libnm/NMObject.html#nm-object-get-path">
+<ANCHOR id="NMObject.property-details" href="libnm/NMObject.html#NMObject.property-details">
+<ANCHOR id="NMObject--dbus-connection" href="libnm/NMObject.html#NMObject--dbus-connection">
+<ANCHOR id="NMObject--nm-running-internal" href="libnm/NMObject.html#NMObject--nm-running-internal">
+<ANCHOR id="NMObject--path" href="libnm/NMObject.html#NMObject--path">
+<ANCHOR id="libnm-nm-errors" href="libnm/libnm-nm-errors.html">
+<ANCHOR id="libnm-nm-errors.synopsis" href="libnm/libnm-nm-errors.html#libnm-nm-errors.synopsis">
+<ANCHOR id="NMAgentManagerError" href="libnm/libnm-nm-errors.html#NMAgentManagerError">
+<ANCHOR id="NMConnectionError" href="libnm/libnm-nm-errors.html#NMConnectionError">
+<ANCHOR id="NMCryptoError" href="libnm/libnm-nm-errors.html#NMCryptoError">
+<ANCHOR id="NMDeviceError" href="libnm/libnm-nm-errors.html#NMDeviceError">
+<ANCHOR id="NMManagerError" href="libnm/libnm-nm-errors.html#NMManagerError">
+<ANCHOR id="NMSecretAgentError" href="libnm/libnm-nm-errors.html#NMSecretAgentError">
+<ANCHOR id="NMSettingsError" href="libnm/libnm-nm-errors.html#NMSettingsError">
+<ANCHOR id="NMVpnPluginError" href="libnm/libnm-nm-errors.html#NMVpnPluginError">
+<ANCHOR id="libnm-nm-errors.object-hierarchy" href="libnm/libnm-nm-errors.html#libnm-nm-errors.object-hierarchy">
+<ANCHOR id="libnm-nm-errors.description" href="libnm/libnm-nm-errors.html#libnm-nm-errors.description">
+<ANCHOR id="libnm-nm-errors.details" href="libnm/libnm-nm-errors.html#libnm-nm-errors.details">
+<ANCHOR id="NMAgentManagerError-enum" href="libnm/libnm-nm-errors.html#NMAgentManagerError-enum">
+<ANCHOR id="NM-AGENT-MANAGER-ERROR-FAILED:CAPS" href="libnm/libnm-nm-errors.html#NM-AGENT-MANAGER-ERROR-FAILED:CAPS">
+<ANCHOR id="NM-AGENT-MANAGER-ERROR-PERMISSION-DENIED:CAPS" href="libnm/libnm-nm-errors.html#NM-AGENT-MANAGER-ERROR-PERMISSION-DENIED:CAPS">
+<ANCHOR id="NM-AGENT-MANAGER-ERROR-INVALID-IDENTIFIER:CAPS" href="libnm/libnm-nm-errors.html#NM-AGENT-MANAGER-ERROR-INVALID-IDENTIFIER:CAPS">
+<ANCHOR id="NM-AGENT-MANAGER-ERROR-NOT-REGISTERED:CAPS" href="libnm/libnm-nm-errors.html#NM-AGENT-MANAGER-ERROR-NOT-REGISTERED:CAPS">
+<ANCHOR id="NM-AGENT-MANAGER-ERROR-NO-SECRETS:CAPS" href="libnm/libnm-nm-errors.html#NM-AGENT-MANAGER-ERROR-NO-SECRETS:CAPS">
+<ANCHOR id="NM-AGENT-MANAGER-ERROR-USER-CANCELED:CAPS" href="libnm/libnm-nm-errors.html#NM-AGENT-MANAGER-ERROR-USER-CANCELED:CAPS">
+<ANCHOR id="nm-agent-manager-error-quark" href="libnm/libnm-nm-errors.html#nm-agent-manager-error-quark">
+<ANCHOR id="NM-AGENT-MANAGER-ERROR:CAPS" href="libnm/libnm-nm-errors.html#NM-AGENT-MANAGER-ERROR:CAPS">
+<ANCHOR id="NMConnectionError-enum" href="libnm/libnm-nm-errors.html#NMConnectionError-enum">
+<ANCHOR id="NM-CONNECTION-ERROR-FAILED:CAPS" href="libnm/libnm-nm-errors.html#NM-CONNECTION-ERROR-FAILED:CAPS">
+<ANCHOR id="NM-CONNECTION-ERROR-SETTING-NOT-FOUND:CAPS" href="libnm/libnm-nm-errors.html#NM-CONNECTION-ERROR-SETTING-NOT-FOUND:CAPS">
+<ANCHOR id="NM-CONNECTION-ERROR-PROPERTY-NOT-FOUND:CAPS" href="libnm/libnm-nm-errors.html#NM-CONNECTION-ERROR-PROPERTY-NOT-FOUND:CAPS">
+<ANCHOR id="NM-CONNECTION-ERROR-PROPERTY-NOT-SECRET:CAPS" href="libnm/libnm-nm-errors.html#NM-CONNECTION-ERROR-PROPERTY-NOT-SECRET:CAPS">
+<ANCHOR id="NM-CONNECTION-ERROR-MISSING-SETTING:CAPS" href="libnm/libnm-nm-errors.html#NM-CONNECTION-ERROR-MISSING-SETTING:CAPS">
+<ANCHOR id="NM-CONNECTION-ERROR-INVALID-SETTING:CAPS" href="libnm/libnm-nm-errors.html#NM-CONNECTION-ERROR-INVALID-SETTING:CAPS">
+<ANCHOR id="NM-CONNECTION-ERROR-MISSING-PROPERTY:CAPS" href="libnm/libnm-nm-errors.html#NM-CONNECTION-ERROR-MISSING-PROPERTY:CAPS">
+<ANCHOR id="NM-CONNECTION-ERROR-INVALID-PROPERTY:CAPS" href="libnm/libnm-nm-errors.html#NM-CONNECTION-ERROR-INVALID-PROPERTY:CAPS">
+<ANCHOR id="NM-CONNECTION-ERROR:CAPS" href="libnm/libnm-nm-errors.html#NM-CONNECTION-ERROR:CAPS">
+<ANCHOR id="nm-connection-error-quark" href="libnm/libnm-nm-errors.html#nm-connection-error-quark">
+<ANCHOR id="NMCryptoError-enum" href="libnm/libnm-nm-errors.html#NMCryptoError-enum">
+<ANCHOR id="NM-CRYPTO-ERROR-FAILED:CAPS" href="libnm/libnm-nm-errors.html#NM-CRYPTO-ERROR-FAILED:CAPS">
+<ANCHOR id="NM-CRYPTO-ERROR-INVALID-DATA:CAPS" href="libnm/libnm-nm-errors.html#NM-CRYPTO-ERROR-INVALID-DATA:CAPS">
+<ANCHOR id="NM-CRYPTO-ERROR-INVALID-PASSWORD:CAPS" href="libnm/libnm-nm-errors.html#NM-CRYPTO-ERROR-INVALID-PASSWORD:CAPS">
+<ANCHOR id="NM-CRYPTO-ERROR-UNKNOWN-CIPHER:CAPS" href="libnm/libnm-nm-errors.html#NM-CRYPTO-ERROR-UNKNOWN-CIPHER:CAPS">
+<ANCHOR id="NM-CRYPTO-ERROR-DECRYPTION-FAILED:CAPS" href="libnm/libnm-nm-errors.html#NM-CRYPTO-ERROR-DECRYPTION-FAILED:CAPS">
+<ANCHOR id="NM-CRYPTO-ERROR-ENCRYPTION-FAILED:CAPS" href="libnm/libnm-nm-errors.html#NM-CRYPTO-ERROR-ENCRYPTION-FAILED:CAPS">
+<ANCHOR id="NM-CRYPTO-ERROR:CAPS" href="libnm/libnm-nm-errors.html#NM-CRYPTO-ERROR:CAPS">
+<ANCHOR id="nm-crypto-error-quark" href="libnm/libnm-nm-errors.html#nm-crypto-error-quark">
+<ANCHOR id="NMDeviceError-enum" href="libnm/libnm-nm-errors.html#NMDeviceError-enum">
+<ANCHOR id="NM-DEVICE-ERROR-FAILED:CAPS" href="libnm/libnm-nm-errors.html#NM-DEVICE-ERROR-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-ERROR-CREATION-FAILED:CAPS" href="libnm/libnm-nm-errors.html#NM-DEVICE-ERROR-CREATION-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-ERROR-INVALID-CONNECTION:CAPS" href="libnm/libnm-nm-errors.html#NM-DEVICE-ERROR-INVALID-CONNECTION:CAPS">
+<ANCHOR id="NM-DEVICE-ERROR-INCOMPATIBLE-CONNECTION:CAPS" href="libnm/libnm-nm-errors.html#NM-DEVICE-ERROR-INCOMPATIBLE-CONNECTION:CAPS">
+<ANCHOR id="NM-DEVICE-ERROR-NOT-ACTIVE:CAPS" href="libnm/libnm-nm-errors.html#NM-DEVICE-ERROR-NOT-ACTIVE:CAPS">
+<ANCHOR id="NM-DEVICE-ERROR-NOT-SOFTWARE:CAPS" href="libnm/libnm-nm-errors.html#NM-DEVICE-ERROR-NOT-SOFTWARE:CAPS">
+<ANCHOR id="NM-DEVICE-ERROR-NOT-ALLOWED:CAPS" href="libnm/libnm-nm-errors.html#NM-DEVICE-ERROR-NOT-ALLOWED:CAPS">
+<ANCHOR id="NM-DEVICE-ERROR-SPECIFIC-OBJECT-NOT-FOUND:CAPS" href="libnm/libnm-nm-errors.html#NM-DEVICE-ERROR-SPECIFIC-OBJECT-NOT-FOUND:CAPS">
+<ANCHOR id="NM-DEVICE-ERROR:CAPS" href="libnm/libnm-nm-errors.html#NM-DEVICE-ERROR:CAPS">
+<ANCHOR id="nm-device-error-quark" href="libnm/libnm-nm-errors.html#nm-device-error-quark">
+<ANCHOR id="NMManagerError-enum" href="libnm/libnm-nm-errors.html#NMManagerError-enum">
+<ANCHOR id="NM-MANAGER-ERROR-FAILED:CAPS" href="libnm/libnm-nm-errors.html#NM-MANAGER-ERROR-FAILED:CAPS">
+<ANCHOR id="NM-MANAGER-ERROR-PERMISSION-DENIED:CAPS" href="libnm/libnm-nm-errors.html#NM-MANAGER-ERROR-PERMISSION-DENIED:CAPS">
+<ANCHOR id="NM-MANAGER-ERROR-UNKNOWN-CONNECTION:CAPS" href="libnm/libnm-nm-errors.html#NM-MANAGER-ERROR-UNKNOWN-CONNECTION:CAPS">
+<ANCHOR id="NM-MANAGER-ERROR-UNKNOWN-DEVICE:CAPS" href="libnm/libnm-nm-errors.html#NM-MANAGER-ERROR-UNKNOWN-DEVICE:CAPS">
+<ANCHOR id="NM-MANAGER-ERROR-CONNECTION-NOT-AVAILABLE:CAPS" href="libnm/libnm-nm-errors.html#NM-MANAGER-ERROR-CONNECTION-NOT-AVAILABLE:CAPS">
+<ANCHOR id="NM-MANAGER-ERROR-CONNECTION-NOT-ACTIVE:CAPS" href="libnm/libnm-nm-errors.html#NM-MANAGER-ERROR-CONNECTION-NOT-ACTIVE:CAPS">
+<ANCHOR id="NM-MANAGER-ERROR-CONNECTION-ALREADY-ACTIVE:CAPS" href="libnm/libnm-nm-errors.html#NM-MANAGER-ERROR-CONNECTION-ALREADY-ACTIVE:CAPS">
+<ANCHOR id="NM-MANAGER-ERROR-DEPENDENCY-FAILED:CAPS" href="libnm/libnm-nm-errors.html#NM-MANAGER-ERROR-DEPENDENCY-FAILED:CAPS">
+<ANCHOR id="NM-MANAGER-ERROR-ALREADY-ASLEEP-OR-AWAKE:CAPS" href="libnm/libnm-nm-errors.html#NM-MANAGER-ERROR-ALREADY-ASLEEP-OR-AWAKE:CAPS">
+<ANCHOR id="NM-MANAGER-ERROR-ALREADY-ENABLED-OR-DISABLED:CAPS" href="libnm/libnm-nm-errors.html#NM-MANAGER-ERROR-ALREADY-ENABLED-OR-DISABLED:CAPS">
+<ANCHOR id="NM-MANAGER-ERROR-UNKNOWN-LOG-LEVEL:CAPS" href="libnm/libnm-nm-errors.html#NM-MANAGER-ERROR-UNKNOWN-LOG-LEVEL:CAPS">
+<ANCHOR id="NM-MANAGER-ERROR-UNKNOWN-LOG-DOMAIN:CAPS" href="libnm/libnm-nm-errors.html#NM-MANAGER-ERROR-UNKNOWN-LOG-DOMAIN:CAPS">
+<ANCHOR id="nm-manager-error-quark" href="libnm/libnm-nm-errors.html#nm-manager-error-quark">
+<ANCHOR id="NM-MANAGER-ERROR:CAPS" href="libnm/libnm-nm-errors.html#NM-MANAGER-ERROR:CAPS">
+<ANCHOR id="NMSecretAgentError-enum" href="libnm/libnm-nm-errors.html#NMSecretAgentError-enum">
+<ANCHOR id="NM-SECRET-AGENT-ERROR-FAILED:CAPS" href="libnm/libnm-nm-errors.html#NM-SECRET-AGENT-ERROR-FAILED:CAPS">
+<ANCHOR id="NM-SECRET-AGENT-ERROR-PERMISSION-DENIED:CAPS" href="libnm/libnm-nm-errors.html#NM-SECRET-AGENT-ERROR-PERMISSION-DENIED:CAPS">
+<ANCHOR id="NM-SECRET-AGENT-ERROR-INVALID-CONNECTION:CAPS" href="libnm/libnm-nm-errors.html#NM-SECRET-AGENT-ERROR-INVALID-CONNECTION:CAPS">
+<ANCHOR id="NM-SECRET-AGENT-ERROR-USER-CANCELED:CAPS" href="libnm/libnm-nm-errors.html#NM-SECRET-AGENT-ERROR-USER-CANCELED:CAPS">
+<ANCHOR id="NM-SECRET-AGENT-ERROR-AGENT-CANCELED:CAPS" href="libnm/libnm-nm-errors.html#NM-SECRET-AGENT-ERROR-AGENT-CANCELED:CAPS">
+<ANCHOR id="NM-SECRET-AGENT-ERROR-NO-SECRETS:CAPS" href="libnm/libnm-nm-errors.html#NM-SECRET-AGENT-ERROR-NO-SECRETS:CAPS">
+<ANCHOR id="nm-secret-agent-error-quark" href="libnm/libnm-nm-errors.html#nm-secret-agent-error-quark">
+<ANCHOR id="NM-SECRET-AGENT-ERROR:CAPS" href="libnm/libnm-nm-errors.html#NM-SECRET-AGENT-ERROR:CAPS">
+<ANCHOR id="NMSettingsError-enum" href="libnm/libnm-nm-errors.html#NMSettingsError-enum">
+<ANCHOR id="NM-SETTINGS-ERROR-FAILED:CAPS" href="libnm/libnm-nm-errors.html#NM-SETTINGS-ERROR-FAILED:CAPS">
+<ANCHOR id="NM-SETTINGS-ERROR-PERMISSION-DENIED:CAPS" href="libnm/libnm-nm-errors.html#NM-SETTINGS-ERROR-PERMISSION-DENIED:CAPS">
+<ANCHOR id="NM-SETTINGS-ERROR-NOT-SUPPORTED:CAPS" href="libnm/libnm-nm-errors.html#NM-SETTINGS-ERROR-NOT-SUPPORTED:CAPS">
+<ANCHOR id="NM-SETTINGS-ERROR-INVALID-CONNECTION:CAPS" href="libnm/libnm-nm-errors.html#NM-SETTINGS-ERROR-INVALID-CONNECTION:CAPS">
+<ANCHOR id="NM-SETTINGS-ERROR-READ-ONLY-CONNECTION:CAPS" href="libnm/libnm-nm-errors.html#NM-SETTINGS-ERROR-READ-ONLY-CONNECTION:CAPS">
+<ANCHOR id="NM-SETTINGS-ERROR-UUID-EXISTS:CAPS" href="libnm/libnm-nm-errors.html#NM-SETTINGS-ERROR-UUID-EXISTS:CAPS">
+<ANCHOR id="NM-SETTINGS-ERROR-INVALID-HOSTNAME:CAPS" href="libnm/libnm-nm-errors.html#NM-SETTINGS-ERROR-INVALID-HOSTNAME:CAPS">
+<ANCHOR id="nm-settings-error-quark" href="libnm/libnm-nm-errors.html#nm-settings-error-quark">
+<ANCHOR id="NM-SETTINGS-ERROR:CAPS" href="libnm/libnm-nm-errors.html#NM-SETTINGS-ERROR:CAPS">
+<ANCHOR id="NMVpnPluginError-enum" href="libnm/libnm-nm-errors.html#NMVpnPluginError-enum">
+<ANCHOR id="NM-VPN-PLUGIN-ERROR-FAILED:CAPS" href="libnm/libnm-nm-errors.html#NM-VPN-PLUGIN-ERROR-FAILED:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-ERROR-STARTING-IN-PROGRESS:CAPS" href="libnm/libnm-nm-errors.html#NM-VPN-PLUGIN-ERROR-STARTING-IN-PROGRESS:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-ERROR-ALREADY-STARTED:CAPS" href="libnm/libnm-nm-errors.html#NM-VPN-PLUGIN-ERROR-ALREADY-STARTED:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-ERROR-STOPPING-IN-PROGRESS:CAPS" href="libnm/libnm-nm-errors.html#NM-VPN-PLUGIN-ERROR-STOPPING-IN-PROGRESS:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-ERROR-ALREADY-STOPPED:CAPS" href="libnm/libnm-nm-errors.html#NM-VPN-PLUGIN-ERROR-ALREADY-STOPPED:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-ERROR-WRONG-STATE:CAPS" href="libnm/libnm-nm-errors.html#NM-VPN-PLUGIN-ERROR-WRONG-STATE:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-ERROR-BAD-ARGUMENTS:CAPS" href="libnm/libnm-nm-errors.html#NM-VPN-PLUGIN-ERROR-BAD-ARGUMENTS:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-ERROR-LAUNCH-FAILED:CAPS" href="libnm/libnm-nm-errors.html#NM-VPN-PLUGIN-ERROR-LAUNCH-FAILED:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-ERROR-INVALID-CONNECTION:CAPS" href="libnm/libnm-nm-errors.html#NM-VPN-PLUGIN-ERROR-INVALID-CONNECTION:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-ERROR-INTERACTIVE-NOT-SUPPORTED:CAPS" href="libnm/libnm-nm-errors.html#NM-VPN-PLUGIN-ERROR-INTERACTIVE-NOT-SUPPORTED:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-ERROR:CAPS" href="libnm/libnm-nm-errors.html#NM-VPN-PLUGIN-ERROR:CAPS">
+<ANCHOR id="nm-vpn-plugin-error-quark" href="libnm/libnm-nm-errors.html#nm-vpn-plugin-error-quark">
+<ANCHOR id="libnm-nm-dbus-interface" href="libnm/libnm-nm-dbus-interface.html">
+<ANCHOR id="libnm-nm-dbus-interface.synopsis" href="libnm/libnm-nm-dbus-interface.html#libnm-nm-dbus-interface.synopsis">
+<ANCHOR id="NMState" href="libnm/libnm-nm-dbus-interface.html#NMState">
+<ANCHOR id="NMConnectivityState" href="libnm/libnm-nm-dbus-interface.html#NMConnectivityState">
+<ANCHOR id="NMDeviceType" href="libnm/libnm-nm-dbus-interface.html#NMDeviceType">
+<ANCHOR id="NMDeviceCapabilities" href="libnm/libnm-nm-dbus-interface.html#NMDeviceCapabilities">
+<ANCHOR id="NMDeviceWifiCapabilities" href="libnm/libnm-nm-dbus-interface.html#NMDeviceWifiCapabilities">
+<ANCHOR id="NM80211ApFlags" href="libnm/libnm-nm-dbus-interface.html#NM80211ApFlags">
+<ANCHOR id="NM80211ApSecurityFlags" href="libnm/libnm-nm-dbus-interface.html#NM80211ApSecurityFlags">
+<ANCHOR id="NM80211Mode" href="libnm/libnm-nm-dbus-interface.html#NM80211Mode">
+<ANCHOR id="NMBluetoothCapabilities" href="libnm/libnm-nm-dbus-interface.html#NMBluetoothCapabilities">
+<ANCHOR id="NMDeviceModemCapabilities" href="libnm/libnm-nm-dbus-interface.html#NMDeviceModemCapabilities">
+<ANCHOR id="NMDeviceState" href="libnm/libnm-nm-dbus-interface.html#NMDeviceState">
+<ANCHOR id="NMDeviceStateReason" href="libnm/libnm-nm-dbus-interface.html#NMDeviceStateReason">
+<ANCHOR id="NMActiveConnectionState" href="libnm/libnm-nm-dbus-interface.html#NMActiveConnectionState">
+<ANCHOR id="NMSecretAgentGetSecretsFlags" href="libnm/libnm-nm-dbus-interface.html#NMSecretAgentGetSecretsFlags">
+<ANCHOR id="NMSecretAgentCapabilities" href="libnm/libnm-nm-dbus-interface.html#NMSecretAgentCapabilities">
+<ANCHOR id="libnm-nm-dbus-interface.object-hierarchy" href="libnm/libnm-nm-dbus-interface.html#libnm-nm-dbus-interface.object-hierarchy">
+<ANCHOR id="libnm-nm-dbus-interface.description" href="libnm/libnm-nm-dbus-interface.html#libnm-nm-dbus-interface.description">
+<ANCHOR id="libnm-nm-dbus-interface.details" href="libnm/libnm-nm-dbus-interface.html#libnm-nm-dbus-interface.details">
+<ANCHOR id="NM-DBUS-SERVICE:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-SERVICE:CAPS">
+<ANCHOR id="NM-DBUS-PATH:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-PATH:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE-WIRED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-WIRED:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE-ADSL:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-ADSL:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE-WIRELESS:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-WIRELESS:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE-BLUETOOTH:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-BLUETOOTH:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE-OLPC-MESH:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-OLPC-MESH:CAPS">
+<ANCHOR id="NM-DBUS-PATH-ACCESS-POINT:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-PATH-ACCESS-POINT:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-ACCESS-POINT:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-ACCESS-POINT:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE-MODEM:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-MODEM:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE-WIMAX:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-WIMAX:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-WIMAX-NSP:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-WIMAX-NSP:CAPS">
+<ANCHOR id="NM-DBUS-PATH-WIMAX-NSP:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-PATH-WIMAX-NSP:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-ACTIVE-CONNECTION:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-ACTIVE-CONNECTION:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-IP4-CONFIG:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-IP4-CONFIG:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DHCP4-CONFIG:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DHCP4-CONFIG:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-IP6-CONFIG:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-IP6-CONFIG:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DHCP6-CONFIG:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DHCP6-CONFIG:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE-INFINIBAND:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-INFINIBAND:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE-BOND:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-BOND:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE-TEAM:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-TEAM:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE-VLAN:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-VLAN:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE-BRIDGE:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-BRIDGE:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE-GENERIC:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-GENERIC:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE-VETH:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-VETH:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE-TUN:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-TUN:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE-MACVLAN:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-MACVLAN:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE-VXLAN:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-VXLAN:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-DEVICE-GRE:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-GRE:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-SETTINGS:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-SETTINGS:CAPS">
+<ANCHOR id="NM-DBUS-PATH-SETTINGS:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-PATH-SETTINGS:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-SETTINGS-CONNECTION:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-SETTINGS-CONNECTION:CAPS">
+<ANCHOR id="NM-DBUS-PATH-SETTINGS-CONNECTION:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-PATH-SETTINGS-CONNECTION:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-SETTINGS-CONNECTION-SECRETS:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-SETTINGS-CONNECTION-SECRETS:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-AGENT-MANAGER:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-AGENT-MANAGER:CAPS">
+<ANCHOR id="NM-DBUS-PATH-AGENT-MANAGER:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-PATH-AGENT-MANAGER:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-SECRET-AGENT:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-SECRET-AGENT:CAPS">
+<ANCHOR id="NM-DBUS-PATH-SECRET-AGENT:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DBUS-PATH-SECRET-AGENT:CAPS">
+<ANCHOR id="NMState-enum" href="libnm/libnm-nm-dbus-interface.html#NMState-enum">
+<ANCHOR id="NM-STATE-UNKNOWN:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-STATE-UNKNOWN:CAPS">
+<ANCHOR id="NM-STATE-ASLEEP:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-STATE-ASLEEP:CAPS">
+<ANCHOR id="NM-STATE-DISCONNECTED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-STATE-DISCONNECTED:CAPS">
+<ANCHOR id="NM-STATE-DISCONNECTING:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-STATE-DISCONNECTING:CAPS">
+<ANCHOR id="NM-STATE-CONNECTING:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-STATE-CONNECTING:CAPS">
+<ANCHOR id="NM-STATE-CONNECTED-LOCAL:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-STATE-CONNECTED-LOCAL:CAPS">
+<ANCHOR id="NM-STATE-CONNECTED-SITE:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-STATE-CONNECTED-SITE:CAPS">
+<ANCHOR id="NM-STATE-CONNECTED-GLOBAL:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-STATE-CONNECTED-GLOBAL:CAPS">
+<ANCHOR id="NMConnectivityState-enum" href="libnm/libnm-nm-dbus-interface.html#NMConnectivityState-enum">
+<ANCHOR id="NM-CONNECTIVITY-UNKNOWN:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-CONNECTIVITY-UNKNOWN:CAPS">
+<ANCHOR id="NM-CONNECTIVITY-NONE:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-CONNECTIVITY-NONE:CAPS">
+<ANCHOR id="NM-CONNECTIVITY-PORTAL:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-CONNECTIVITY-PORTAL:CAPS">
+<ANCHOR id="NM-CONNECTIVITY-LIMITED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-CONNECTIVITY-LIMITED:CAPS">
+<ANCHOR id="NM-CONNECTIVITY-FULL:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-CONNECTIVITY-FULL:CAPS">
+<ANCHOR id="NMDeviceType-enum" href="libnm/libnm-nm-dbus-interface.html#NMDeviceType-enum">
+<ANCHOR id="NM-DEVICE-TYPE-UNKNOWN:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-TYPE-UNKNOWN:CAPS">
+<ANCHOR id="NM-DEVICE-TYPE-ETHERNET:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-TYPE-ETHERNET:CAPS">
+<ANCHOR id="NM-DEVICE-TYPE-WIFI:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-TYPE-WIFI:CAPS">
+<ANCHOR id="NM-DEVICE-TYPE-UNUSED1:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-TYPE-UNUSED1:CAPS">
+<ANCHOR id="NM-DEVICE-TYPE-UNUSED2:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-TYPE-UNUSED2:CAPS">
+<ANCHOR id="NM-DEVICE-TYPE-BT:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-TYPE-BT:CAPS">
+<ANCHOR id="NM-DEVICE-TYPE-OLPC-MESH:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-TYPE-OLPC-MESH:CAPS">
+<ANCHOR id="NM-DEVICE-TYPE-WIMAX:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-TYPE-WIMAX:CAPS">
+<ANCHOR id="NM-DEVICE-TYPE-MODEM:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-TYPE-MODEM:CAPS">
+<ANCHOR id="NM-DEVICE-TYPE-INFINIBAND:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-TYPE-INFINIBAND:CAPS">
+<ANCHOR id="NM-DEVICE-TYPE-BOND:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-TYPE-BOND:CAPS">
+<ANCHOR id="NM-DEVICE-TYPE-VLAN:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-TYPE-VLAN:CAPS">
+<ANCHOR id="NM-DEVICE-TYPE-ADSL:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-TYPE-ADSL:CAPS">
+<ANCHOR id="NM-DEVICE-TYPE-BRIDGE:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-TYPE-BRIDGE:CAPS">
+<ANCHOR id="NM-DEVICE-TYPE-GENERIC:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-TYPE-GENERIC:CAPS">
+<ANCHOR id="NM-DEVICE-TYPE-TEAM:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-TYPE-TEAM:CAPS">
+<ANCHOR id="NMDeviceCapabilities-enum" href="libnm/libnm-nm-dbus-interface.html#NMDeviceCapabilities-enum">
+<ANCHOR id="NM-DEVICE-CAP-NONE:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-CAP-NONE:CAPS">
+<ANCHOR id="NM-DEVICE-CAP-NM-SUPPORTED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-CAP-NM-SUPPORTED:CAPS">
+<ANCHOR id="NM-DEVICE-CAP-CARRIER-DETECT:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-CAP-CARRIER-DETECT:CAPS">
+<ANCHOR id="NM-DEVICE-CAP-IS-SOFTWARE:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-CAP-IS-SOFTWARE:CAPS">
+<ANCHOR id="NMDeviceWifiCapabilities-enum" href="libnm/libnm-nm-dbus-interface.html#NMDeviceWifiCapabilities-enum">
+<ANCHOR id="NM-WIFI-DEVICE-CAP-NONE:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-WIFI-DEVICE-CAP-NONE:CAPS">
+<ANCHOR id="NM-WIFI-DEVICE-CAP-CIPHER-WEP40:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-WIFI-DEVICE-CAP-CIPHER-WEP40:CAPS">
+<ANCHOR id="NM-WIFI-DEVICE-CAP-CIPHER-WEP104:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-WIFI-DEVICE-CAP-CIPHER-WEP104:CAPS">
+<ANCHOR id="NM-WIFI-DEVICE-CAP-CIPHER-TKIP:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-WIFI-DEVICE-CAP-CIPHER-TKIP:CAPS">
+<ANCHOR id="NM-WIFI-DEVICE-CAP-CIPHER-CCMP:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-WIFI-DEVICE-CAP-CIPHER-CCMP:CAPS">
+<ANCHOR id="NM-WIFI-DEVICE-CAP-WPA:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-WIFI-DEVICE-CAP-WPA:CAPS">
+<ANCHOR id="NM-WIFI-DEVICE-CAP-RSN:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-WIFI-DEVICE-CAP-RSN:CAPS">
+<ANCHOR id="NM-WIFI-DEVICE-CAP-AP:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-WIFI-DEVICE-CAP-AP:CAPS">
+<ANCHOR id="NM-WIFI-DEVICE-CAP-ADHOC:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-WIFI-DEVICE-CAP-ADHOC:CAPS">
+<ANCHOR id="NM80211ApFlags-enum" href="libnm/libnm-nm-dbus-interface.html#NM80211ApFlags-enum">
+<ANCHOR id="NM-802-11-AP-FLAGS-NONE:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-802-11-AP-FLAGS-NONE:CAPS">
+<ANCHOR id="NM-802-11-AP-FLAGS-PRIVACY:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-802-11-AP-FLAGS-PRIVACY:CAPS">
+<ANCHOR id="NM80211ApSecurityFlags-enum" href="libnm/libnm-nm-dbus-interface.html#NM80211ApSecurityFlags-enum">
+<ANCHOR id="NM-802-11-AP-SEC-NONE:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-802-11-AP-SEC-NONE:CAPS">
+<ANCHOR id="NM-802-11-AP-SEC-PAIR-WEP40:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-802-11-AP-SEC-PAIR-WEP40:CAPS">
+<ANCHOR id="NM-802-11-AP-SEC-PAIR-WEP104:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-802-11-AP-SEC-PAIR-WEP104:CAPS">
+<ANCHOR id="NM-802-11-AP-SEC-PAIR-TKIP:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-802-11-AP-SEC-PAIR-TKIP:CAPS">
+<ANCHOR id="NM-802-11-AP-SEC-PAIR-CCMP:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-802-11-AP-SEC-PAIR-CCMP:CAPS">
+<ANCHOR id="NM-802-11-AP-SEC-GROUP-WEP40:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-802-11-AP-SEC-GROUP-WEP40:CAPS">
+<ANCHOR id="NM-802-11-AP-SEC-GROUP-WEP104:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-802-11-AP-SEC-GROUP-WEP104:CAPS">
+<ANCHOR id="NM-802-11-AP-SEC-GROUP-TKIP:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-802-11-AP-SEC-GROUP-TKIP:CAPS">
+<ANCHOR id="NM-802-11-AP-SEC-GROUP-CCMP:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-802-11-AP-SEC-GROUP-CCMP:CAPS">
+<ANCHOR id="NM-802-11-AP-SEC-KEY-MGMT-PSK:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-802-11-AP-SEC-KEY-MGMT-PSK:CAPS">
+<ANCHOR id="NM-802-11-AP-SEC-KEY-MGMT-802-1X:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-802-11-AP-SEC-KEY-MGMT-802-1X:CAPS">
+<ANCHOR id="NM80211Mode-enum" href="libnm/libnm-nm-dbus-interface.html#NM80211Mode-enum">
+<ANCHOR id="NM-802-11-MODE-UNKNOWN:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-802-11-MODE-UNKNOWN:CAPS">
+<ANCHOR id="NM-802-11-MODE-ADHOC:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-802-11-MODE-ADHOC:CAPS">
+<ANCHOR id="NM-802-11-MODE-INFRA:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-802-11-MODE-INFRA:CAPS">
+<ANCHOR id="NM-802-11-MODE-AP:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-802-11-MODE-AP:CAPS">
+<ANCHOR id="NMBluetoothCapabilities-enum" href="libnm/libnm-nm-dbus-interface.html#NMBluetoothCapabilities-enum">
+<ANCHOR id="NM-BT-CAPABILITY-NONE:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-BT-CAPABILITY-NONE:CAPS">
+<ANCHOR id="NM-BT-CAPABILITY-DUN:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-BT-CAPABILITY-DUN:CAPS">
+<ANCHOR id="NM-BT-CAPABILITY-NAP:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-BT-CAPABILITY-NAP:CAPS">
+<ANCHOR id="NMDeviceModemCapabilities-enum" href="libnm/libnm-nm-dbus-interface.html#NMDeviceModemCapabilities-enum">
+<ANCHOR id="NM-DEVICE-MODEM-CAPABILITY-NONE:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-MODEM-CAPABILITY-NONE:CAPS">
+<ANCHOR id="NM-DEVICE-MODEM-CAPABILITY-POTS:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-MODEM-CAPABILITY-POTS:CAPS">
+<ANCHOR id="NM-DEVICE-MODEM-CAPABILITY-CDMA-EVDO:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-MODEM-CAPABILITY-CDMA-EVDO:CAPS">
+<ANCHOR id="NM-DEVICE-MODEM-CAPABILITY-GSM-UMTS:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-MODEM-CAPABILITY-GSM-UMTS:CAPS">
+<ANCHOR id="NM-DEVICE-MODEM-CAPABILITY-LTE:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-MODEM-CAPABILITY-LTE:CAPS">
+<ANCHOR id="NMDeviceState-enum" href="libnm/libnm-nm-dbus-interface.html#NMDeviceState-enum">
+<ANCHOR id="NM-DEVICE-STATE-UNKNOWN:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-UNKNOWN:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-UNMANAGED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-UNMANAGED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-UNAVAILABLE:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-UNAVAILABLE:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-DISCONNECTED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-DISCONNECTED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-PREPARE:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-PREPARE:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-CONFIG:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-CONFIG:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-NEED-AUTH:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-NEED-AUTH:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-IP-CONFIG:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-IP-CONFIG:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-IP-CHECK:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-IP-CHECK:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-SECONDARIES:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-SECONDARIES:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-ACTIVATED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-ACTIVATED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-DEACTIVATING:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-DEACTIVATING:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-FAILED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-FAILED:CAPS">
+<ANCHOR id="NMDeviceStateReason-enum" href="libnm/libnm-nm-dbus-interface.html#NMDeviceStateReason-enum">
+<ANCHOR id="NM-DEVICE-STATE-REASON-NONE:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-NONE:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-UNKNOWN:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-UNKNOWN:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-NOW-MANAGED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-NOW-MANAGED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-NOW-UNMANAGED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-NOW-UNMANAGED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-CONFIG-FAILED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-CONFIG-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-IP-CONFIG-UNAVAILABLE:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-IP-CONFIG-UNAVAILABLE:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-IP-CONFIG-EXPIRED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-IP-CONFIG-EXPIRED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-NO-SECRETS:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-NO-SECRETS:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-SUPPLICANT-DISCONNECT:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-SUPPLICANT-DISCONNECT:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-SUPPLICANT-CONFIG-FAILED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-SUPPLICANT-CONFIG-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-SUPPLICANT-FAILED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-SUPPLICANT-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-SUPPLICANT-TIMEOUT:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-SUPPLICANT-TIMEOUT:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-PPP-START-FAILED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-PPP-START-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-PPP-DISCONNECT:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-PPP-DISCONNECT:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-PPP-FAILED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-PPP-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-DHCP-START-FAILED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-DHCP-START-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-DHCP-ERROR:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-DHCP-ERROR:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-DHCP-FAILED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-DHCP-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-SHARED-START-FAILED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-SHARED-START-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-SHARED-FAILED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-SHARED-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-AUTOIP-START-FAILED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-AUTOIP-START-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-AUTOIP-ERROR:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-AUTOIP-ERROR:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-AUTOIP-FAILED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-AUTOIP-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-MODEM-BUSY:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-MODEM-BUSY:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-MODEM-NO-DIAL-TONE:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-MODEM-NO-DIAL-TONE:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-MODEM-NO-CARRIER:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-MODEM-NO-CARRIER:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-MODEM-DIAL-TIMEOUT:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-MODEM-DIAL-TIMEOUT:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-MODEM-DIAL-FAILED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-MODEM-DIAL-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-MODEM-INIT-FAILED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-MODEM-INIT-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-GSM-APN-FAILED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-GSM-APN-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-GSM-REGISTRATION-NOT-SEARCHING:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-GSM-REGISTRATION-NOT-SEARCHING:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-GSM-REGISTRATION-DENIED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-GSM-REGISTRATION-DENIED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-GSM-REGISTRATION-TIMEOUT:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-GSM-REGISTRATION-TIMEOUT:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-GSM-REGISTRATION-FAILED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-GSM-REGISTRATION-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-GSM-PIN-CHECK-FAILED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-GSM-PIN-CHECK-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-FIRMWARE-MISSING:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-FIRMWARE-MISSING:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-REMOVED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-REMOVED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-SLEEPING:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-SLEEPING:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-CONNECTION-REMOVED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-CONNECTION-REMOVED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-USER-REQUESTED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-USER-REQUESTED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-CARRIER:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-CARRIER:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-CONNECTION-ASSUMED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-CONNECTION-ASSUMED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-SUPPLICANT-AVAILABLE:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-SUPPLICANT-AVAILABLE:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-MODEM-NOT-FOUND:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-MODEM-NOT-FOUND:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-BT-FAILED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-BT-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-GSM-SIM-NOT-INSERTED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-GSM-SIM-NOT-INSERTED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-GSM-SIM-PIN-REQUIRED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-GSM-SIM-PIN-REQUIRED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-GSM-SIM-PUK-REQUIRED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-GSM-SIM-PUK-REQUIRED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-GSM-SIM-WRONG:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-GSM-SIM-WRONG:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-INFINIBAND-MODE:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-INFINIBAND-MODE:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-DEPENDENCY-FAILED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-DEPENDENCY-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-BR2684-FAILED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-BR2684-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-MODEM-MANAGER-UNAVAILABLE:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-MODEM-MANAGER-UNAVAILABLE:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-SSID-NOT-FOUND:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-SSID-NOT-FOUND:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-SECONDARY-CONNECTION-FAILED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-SECONDARY-CONNECTION-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-DCB-FCOE-FAILED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-DCB-FCOE-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-TEAMD-CONTROL-FAILED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-TEAMD-CONTROL-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-MODEM-FAILED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-MODEM-FAILED:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-MODEM-AVAILABLE:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-MODEM-AVAILABLE:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON-SIM-PIN-INCORRECT:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-SIM-PIN-INCORRECT:CAPS">
+<ANCHOR id="NMActiveConnectionState-enum" href="libnm/libnm-nm-dbus-interface.html#NMActiveConnectionState-enum">
+<ANCHOR id="NM-ACTIVE-CONNECTION-STATE-UNKNOWN:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-ACTIVE-CONNECTION-STATE-UNKNOWN:CAPS">
+<ANCHOR id="NM-ACTIVE-CONNECTION-STATE-ACTIVATING:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-ACTIVE-CONNECTION-STATE-ACTIVATING:CAPS">
+<ANCHOR id="NM-ACTIVE-CONNECTION-STATE-ACTIVATED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-ACTIVE-CONNECTION-STATE-ACTIVATED:CAPS">
+<ANCHOR id="NM-ACTIVE-CONNECTION-STATE-DEACTIVATING:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-ACTIVE-CONNECTION-STATE-DEACTIVATING:CAPS">
+<ANCHOR id="NM-ACTIVE-CONNECTION-STATE-DEACTIVATED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-ACTIVE-CONNECTION-STATE-DEACTIVATED:CAPS">
+<ANCHOR id="NMSecretAgentGetSecretsFlags-enum" href="libnm/libnm-nm-dbus-interface.html#NMSecretAgentGetSecretsFlags-enum">
+<ANCHOR id="NM-SECRET-AGENT-GET-SECRETS-FLAG-NONE:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-SECRET-AGENT-GET-SECRETS-FLAG-NONE:CAPS">
+<ANCHOR id="NM-SECRET-AGENT-GET-SECRETS-FLAG-ALLOW-INTERACTION:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-SECRET-AGENT-GET-SECRETS-FLAG-ALLOW-INTERACTION:CAPS">
+<ANCHOR id="NM-SECRET-AGENT-GET-SECRETS-FLAG-REQUEST-NEW:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-SECRET-AGENT-GET-SECRETS-FLAG-REQUEST-NEW:CAPS">
+<ANCHOR id="NM-SECRET-AGENT-GET-SECRETS-FLAG-USER-REQUESTED:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-SECRET-AGENT-GET-SECRETS-FLAG-USER-REQUESTED:CAPS">
+<ANCHOR id="NM-SECRET-AGENT-GET-SECRETS-FLAG-ONLY-SYSTEM:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-SECRET-AGENT-GET-SECRETS-FLAG-ONLY-SYSTEM:CAPS">
+<ANCHOR id="NM-SECRET-AGENT-GET-SECRETS-FLAG-NO-ERRORS:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-SECRET-AGENT-GET-SECRETS-FLAG-NO-ERRORS:CAPS">
+<ANCHOR id="NMSecretAgentCapabilities-enum" href="libnm/libnm-nm-dbus-interface.html#NMSecretAgentCapabilities-enum">
+<ANCHOR id="NM-SECRET-AGENT-CAPABILITY-NONE:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-SECRET-AGENT-CAPABILITY-NONE:CAPS">
+<ANCHOR id="NM-SECRET-AGENT-CAPABILITY-VPN-HINTS:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-SECRET-AGENT-CAPABILITY-VPN-HINTS:CAPS">
+<ANCHOR id="NM-SECRET-AGENT-CAPABILITY-LAST:CAPS" href="libnm/libnm-nm-dbus-interface.html#NM-SECRET-AGENT-CAPABILITY-LAST:CAPS">
+<ANCHOR id="libnm-NMConnection" href="libnm/libnm-NMConnection.html">
+<ANCHOR id="libnm-NMConnection.synopsis" href="libnm/libnm-NMConnection.html#libnm-NMConnection.synopsis">
+<ANCHOR id="NMConnectionSerializationFlags" href="libnm/libnm-NMConnection.html#NMConnectionSerializationFlags">
+<ANCHOR id="libnm-NMConnection.object-hierarchy" href="libnm/libnm-NMConnection.html#libnm-NMConnection.object-hierarchy">
+<ANCHOR id="libnm-NMConnection.description" href="libnm/libnm-NMConnection.html#libnm-NMConnection.description">
+<ANCHOR id="libnm-NMConnection.details" href="libnm/libnm-NMConnection.html#libnm-NMConnection.details">
+<ANCHOR id="NM-CONNECTION-SECRETS-UPDATED:CAPS" href="libnm/libnm-NMConnection.html#NM-CONNECTION-SECRETS-UPDATED:CAPS">
+<ANCHOR id="NM-CONNECTION-SECRETS-CLEARED:CAPS" href="libnm/libnm-NMConnection.html#NM-CONNECTION-SECRETS-CLEARED:CAPS">
+<ANCHOR id="NM-CONNECTION-CHANGED:CAPS" href="libnm/libnm-NMConnection.html#NM-CONNECTION-CHANGED:CAPS">
+<ANCHOR id="NM-CONNECTION-NORMALIZE-PARAM-IP6-CONFIG-METHOD:CAPS" href="libnm/libnm-NMConnection.html#NM-CONNECTION-NORMALIZE-PARAM-IP6-CONFIG-METHOD:CAPS">
+<ANCHOR id="NMConnectionInterface" href="libnm/libnm-NMConnection.html#NMConnectionInterface">
+<ANCHOR id="nm-connection-add-setting" href="libnm/libnm-NMConnection.html#nm-connection-add-setting">
+<ANCHOR id="nm-connection-remove-setting" href="libnm/libnm-NMConnection.html#nm-connection-remove-setting">
+<ANCHOR id="nm-connection-get-setting" href="libnm/libnm-NMConnection.html#nm-connection-get-setting">
+<ANCHOR id="nm-connection-get-setting-by-name" href="libnm/libnm-NMConnection.html#nm-connection-get-setting-by-name">
+<ANCHOR id="NM-VARIANT-TYPE-SETTING:CAPS" href="libnm/libnm-NMConnection.html#NM-VARIANT-TYPE-SETTING:CAPS">
+<ANCHOR id="NMConnectionSerializationFlags-enum" href="libnm/libnm-NMConnection.html#NMConnectionSerializationFlags-enum">
+<ANCHOR id="NM-CONNECTION-SERIALIZE-ALL:CAPS" href="libnm/libnm-NMConnection.html#NM-CONNECTION-SERIALIZE-ALL:CAPS">
+<ANCHOR id="NM-CONNECTION-SERIALIZE-NO-SECRETS:CAPS" href="libnm/libnm-NMConnection.html#NM-CONNECTION-SERIALIZE-NO-SECRETS:CAPS">
+<ANCHOR id="NM-CONNECTION-SERIALIZE-ONLY-SECRETS:CAPS" href="libnm/libnm-NMConnection.html#NM-CONNECTION-SERIALIZE-ONLY-SECRETS:CAPS">
+<ANCHOR id="nm-connection-to-dbus" href="libnm/libnm-NMConnection.html#nm-connection-to-dbus">
+<ANCHOR id="nm-connection-replace-settings" href="libnm/libnm-NMConnection.html#nm-connection-replace-settings">
+<ANCHOR id="nm-connection-replace-settings-from-connection" href="libnm/libnm-NMConnection.html#nm-connection-replace-settings-from-connection">
+<ANCHOR id="nm-connection-clear-settings" href="libnm/libnm-NMConnection.html#nm-connection-clear-settings">
+<ANCHOR id="nm-connection-compare" href="libnm/libnm-NMConnection.html#nm-connection-compare">
+<ANCHOR id="nm-connection-diff" href="libnm/libnm-NMConnection.html#nm-connection-diff">
+<ANCHOR id="nm-connection-verify" href="libnm/libnm-NMConnection.html#nm-connection-verify">
+<ANCHOR id="nm-connection-normalize" href="libnm/libnm-NMConnection.html#nm-connection-normalize">
+<ANCHOR id="nm-connection-need-secrets" href="libnm/libnm-NMConnection.html#nm-connection-need-secrets">
+<ANCHOR id="nm-connection-clear-secrets" href="libnm/libnm-NMConnection.html#nm-connection-clear-secrets">
+<ANCHOR id="nm-connection-clear-secrets-with-flags" href="libnm/libnm-NMConnection.html#nm-connection-clear-secrets-with-flags">
+<ANCHOR id="nm-connection-update-secrets" href="libnm/libnm-NMConnection.html#nm-connection-update-secrets">
+<ANCHOR id="nm-connection-set-path" href="libnm/libnm-NMConnection.html#nm-connection-set-path">
+<ANCHOR id="nm-connection-get-path" href="libnm/libnm-NMConnection.html#nm-connection-get-path">
+<ANCHOR id="nm-connection-get-interface-name" href="libnm/libnm-NMConnection.html#nm-connection-get-interface-name">
+<ANCHOR id="nm-connection-is-type" href="libnm/libnm-NMConnection.html#nm-connection-is-type">
+<ANCHOR id="nm-connection-for-each-setting-value" href="libnm/libnm-NMConnection.html#nm-connection-for-each-setting-value">
+<ANCHOR id="nm-connection-dump" href="libnm/libnm-NMConnection.html#nm-connection-dump">
+<ANCHOR id="nm-connection-get-uuid" href="libnm/libnm-NMConnection.html#nm-connection-get-uuid">
+<ANCHOR id="nm-connection-get-id" href="libnm/libnm-NMConnection.html#nm-connection-get-id">
+<ANCHOR id="nm-connection-get-connection-type" href="libnm/libnm-NMConnection.html#nm-connection-get-connection-type">
+<ANCHOR id="nm-connection-is-virtual" href="libnm/libnm-NMConnection.html#nm-connection-is-virtual">
+<ANCHOR id="nm-connection-get-virtual-device-description" href="libnm/libnm-NMConnection.html#nm-connection-get-virtual-device-description">
+<ANCHOR id="nm-connection-get-setting-802-1x" href="libnm/libnm-NMConnection.html#nm-connection-get-setting-802-1x">
+<ANCHOR id="nm-connection-get-setting-bluetooth" href="libnm/libnm-NMConnection.html#nm-connection-get-setting-bluetooth">
+<ANCHOR id="nm-connection-get-setting-bond" href="libnm/libnm-NMConnection.html#nm-connection-get-setting-bond">
+<ANCHOR id="nm-connection-get-setting-team" href="libnm/libnm-NMConnection.html#nm-connection-get-setting-team">
+<ANCHOR id="nm-connection-get-setting-team-port" href="libnm/libnm-NMConnection.html#nm-connection-get-setting-team-port">
+<ANCHOR id="nm-connection-get-setting-bridge" href="libnm/libnm-NMConnection.html#nm-connection-get-setting-bridge">
+<ANCHOR id="nm-connection-get-setting-bridge-port" href="libnm/libnm-NMConnection.html#nm-connection-get-setting-bridge-port">
+<ANCHOR id="nm-connection-get-setting-cdma" href="libnm/libnm-NMConnection.html#nm-connection-get-setting-cdma">
+<ANCHOR id="nm-connection-get-setting-connection" href="libnm/libnm-NMConnection.html#nm-connection-get-setting-connection">
+<ANCHOR id="nm-connection-get-setting-dcb" href="libnm/libnm-NMConnection.html#nm-connection-get-setting-dcb">
+<ANCHOR id="nm-connection-get-setting-generic" href="libnm/libnm-NMConnection.html#nm-connection-get-setting-generic">
+<ANCHOR id="nm-connection-get-setting-gsm" href="libnm/libnm-NMConnection.html#nm-connection-get-setting-gsm">
+<ANCHOR id="nm-connection-get-setting-infiniband" href="libnm/libnm-NMConnection.html#nm-connection-get-setting-infiniband">
+<ANCHOR id="nm-connection-get-setting-ip4-config" href="libnm/libnm-NMConnection.html#nm-connection-get-setting-ip4-config">
+<ANCHOR id="nm-connection-get-setting-ip6-config" href="libnm/libnm-NMConnection.html#nm-connection-get-setting-ip6-config">
+<ANCHOR id="nm-connection-get-setting-olpc-mesh" href="libnm/libnm-NMConnection.html#nm-connection-get-setting-olpc-mesh">
+<ANCHOR id="nm-connection-get-setting-ppp" href="libnm/libnm-NMConnection.html#nm-connection-get-setting-ppp">
+<ANCHOR id="nm-connection-get-setting-pppoe" href="libnm/libnm-NMConnection.html#nm-connection-get-setting-pppoe">
+<ANCHOR id="nm-connection-get-setting-serial" href="libnm/libnm-NMConnection.html#nm-connection-get-setting-serial">
+<ANCHOR id="nm-connection-get-setting-vpn" href="libnm/libnm-NMConnection.html#nm-connection-get-setting-vpn">
+<ANCHOR id="nm-connection-get-setting-wimax" href="libnm/libnm-NMConnection.html#nm-connection-get-setting-wimax">
+<ANCHOR id="nm-connection-get-setting-adsl" href="libnm/libnm-NMConnection.html#nm-connection-get-setting-adsl">
+<ANCHOR id="nm-connection-get-setting-wired" href="libnm/libnm-NMConnection.html#nm-connection-get-setting-wired">
+<ANCHOR id="nm-connection-get-setting-wireless" href="libnm/libnm-NMConnection.html#nm-connection-get-setting-wireless">
+<ANCHOR id="nm-connection-get-setting-wireless-security" href="libnm/libnm-NMConnection.html#nm-connection-get-setting-wireless-security">
+<ANCHOR id="nm-connection-get-setting-vlan" href="libnm/libnm-NMConnection.html#nm-connection-get-setting-vlan">
+<ANCHOR id="NMSimpleConnection" href="libnm/NMSimpleConnection.html">
+<ANCHOR id="NMSimpleConnection.synopsis" href="libnm/NMSimpleConnection.html#NMSimpleConnection.synopsis">
+<ANCHOR id="NMSimpleConnection.object-hierarchy" href="libnm/NMSimpleConnection.html#NMSimpleConnection.object-hierarchy">
+<ANCHOR id="NMSimpleConnection.implemented-interfaces" href="libnm/NMSimpleConnection.html#NMSimpleConnection.implemented-interfaces">
+<ANCHOR id="NMSimpleConnection.description" href="libnm/NMSimpleConnection.html#NMSimpleConnection.description">
+<ANCHOR id="NMSimpleConnection.details" href="libnm/NMSimpleConnection.html#NMSimpleConnection.details">
+<ANCHOR id="NMSimpleConnection-struct" href="libnm/NMSimpleConnection.html#NMSimpleConnection-struct">
+<ANCHOR id="NMSimpleConnectionClass" href="libnm/NMSimpleConnection.html#NMSimpleConnectionClass">
+<ANCHOR id="nm-simple-connection-new" href="libnm/NMSimpleConnection.html#nm-simple-connection-new">
+<ANCHOR id="nm-simple-connection-new-from-dbus" href="libnm/NMSimpleConnection.html#nm-simple-connection-new-from-dbus">
+<ANCHOR id="nm-simple-connection-new-clone" href="libnm/NMSimpleConnection.html#nm-simple-connection-new-clone">
+<ANCHOR id="NMSetting" href="libnm/NMSetting.html">
+<ANCHOR id="NMSetting.synopsis" href="libnm/NMSetting.html#NMSetting.synopsis">
+<ANCHOR id="NMSettingSecretFlags" href="libnm/NMSetting.html#NMSettingSecretFlags">
+<ANCHOR id="NMSettingCompareFlags" href="libnm/NMSetting.html#NMSettingCompareFlags">
+<ANCHOR id="NMSettingDiffResult" href="libnm/NMSetting.html#NMSettingDiffResult">
+<ANCHOR id="NMSetting.object-hierarchy" href="libnm/NMSetting.html#NMSetting.object-hierarchy">
+<ANCHOR id="NMSetting.properties" href="libnm/NMSetting.html#NMSetting.properties">
+<ANCHOR id="NMSetting.description" href="libnm/NMSetting.html#NMSetting.description">
+<ANCHOR id="NMSetting.details" href="libnm/NMSetting.html#NMSetting.details">
+<ANCHOR id="NM-SETTING-PARAM-REQUIRED:CAPS" href="libnm/NMSetting.html#NM-SETTING-PARAM-REQUIRED:CAPS">
+<ANCHOR id="NM-SETTING-PARAM-SECRET:CAPS" href="libnm/NMSetting.html#NM-SETTING-PARAM-SECRET:CAPS">
+<ANCHOR id="NM-SETTING-PARAM-FUZZY-IGNORE:CAPS" href="libnm/NMSetting.html#NM-SETTING-PARAM-FUZZY-IGNORE:CAPS">
+<ANCHOR id="NM-SETTING-NAME:CAPS" href="libnm/NMSetting.html#NM-SETTING-NAME:CAPS">
+<ANCHOR id="NMSettingSecretFlags-enum" href="libnm/NMSetting.html#NMSettingSecretFlags-enum">
+<ANCHOR id="NM-SETTING-SECRET-FLAG-NONE:CAPS" href="libnm/NMSetting.html#NM-SETTING-SECRET-FLAG-NONE:CAPS">
+<ANCHOR id="NM-SETTING-SECRET-FLAG-AGENT-OWNED:CAPS" href="libnm/NMSetting.html#NM-SETTING-SECRET-FLAG-AGENT-OWNED:CAPS">
+<ANCHOR id="NM-SETTING-SECRET-FLAG-NOT-SAVED:CAPS" href="libnm/NMSetting.html#NM-SETTING-SECRET-FLAG-NOT-SAVED:CAPS">
+<ANCHOR id="NM-SETTING-SECRET-FLAG-NOT-REQUIRED:CAPS" href="libnm/NMSetting.html#NM-SETTING-SECRET-FLAG-NOT-REQUIRED:CAPS">
+<ANCHOR id="NMSettingCompareFlags-enum" href="libnm/NMSetting.html#NMSettingCompareFlags-enum">
+<ANCHOR id="NM-SETTING-COMPARE-FLAG-EXACT:CAPS" href="libnm/NMSetting.html#NM-SETTING-COMPARE-FLAG-EXACT:CAPS">
+<ANCHOR id="NM-SETTING-COMPARE-FLAG-FUZZY:CAPS" href="libnm/NMSetting.html#NM-SETTING-COMPARE-FLAG-FUZZY:CAPS">
+<ANCHOR id="NM-SETTING-COMPARE-FLAG-IGNORE-ID:CAPS" href="libnm/NMSetting.html#NM-SETTING-COMPARE-FLAG-IGNORE-ID:CAPS">
+<ANCHOR id="NM-SETTING-COMPARE-FLAG-IGNORE-SECRETS:CAPS" href="libnm/NMSetting.html#NM-SETTING-COMPARE-FLAG-IGNORE-SECRETS:CAPS">
+<ANCHOR id="NM-SETTING-COMPARE-FLAG-IGNORE-AGENT-OWNED-SECRETS:CAPS" href="libnm/NMSetting.html#NM-SETTING-COMPARE-FLAG-IGNORE-AGENT-OWNED-SECRETS:CAPS">
+<ANCHOR id="NM-SETTING-COMPARE-FLAG-IGNORE-NOT-SAVED-SECRETS:CAPS" href="libnm/NMSetting.html#NM-SETTING-COMPARE-FLAG-IGNORE-NOT-SAVED-SECRETS:CAPS">
+<ANCHOR id="NM-SETTING-COMPARE-FLAG-DIFF-RESULT-WITH-DEFAULT:CAPS" href="libnm/NMSetting.html#NM-SETTING-COMPARE-FLAG-DIFF-RESULT-WITH-DEFAULT:CAPS">
+<ANCHOR id="NM-SETTING-COMPARE-FLAG-DIFF-RESULT-NO-DEFAULT:CAPS" href="libnm/NMSetting.html#NM-SETTING-COMPARE-FLAG-DIFF-RESULT-NO-DEFAULT:CAPS">
+<ANCHOR id="NM-SETTING-COMPARE-FLAG-IGNORE-TIMESTAMP:CAPS" href="libnm/NMSetting.html#NM-SETTING-COMPARE-FLAG-IGNORE-TIMESTAMP:CAPS">
+<ANCHOR id="NMSetting-struct" href="libnm/NMSetting.html#NMSetting-struct">
+<ANCHOR id="NMSettingClearSecretsWithFlagsFn" href="libnm/NMSetting.html#NMSettingClearSecretsWithFlagsFn">
+<ANCHOR id="NMSettingClass" href="libnm/NMSetting.html#NMSettingClass">
+<ANCHOR id="NMSettingValueIterFn" href="libnm/NMSetting.html#NMSettingValueIterFn">
+<ANCHOR id="nm-setting-lookup-type" href="libnm/NMSetting.html#nm-setting-lookup-type">
+<ANCHOR id="nm-setting-duplicate" href="libnm/NMSetting.html#nm-setting-duplicate">
+<ANCHOR id="nm-setting-get-name" href="libnm/NMSetting.html#nm-setting-get-name">
+<ANCHOR id="nm-setting-verify" href="libnm/NMSetting.html#nm-setting-verify">
+<ANCHOR id="nm-setting-compare" href="libnm/NMSetting.html#nm-setting-compare">
+<ANCHOR id="NMSettingDiffResult-enum" href="libnm/NMSetting.html#NMSettingDiffResult-enum">
+<ANCHOR id="NM-SETTING-DIFF-RESULT-UNKNOWN:CAPS" href="libnm/NMSetting.html#NM-SETTING-DIFF-RESULT-UNKNOWN:CAPS">
+<ANCHOR id="NM-SETTING-DIFF-RESULT-IN-A:CAPS" href="libnm/NMSetting.html#NM-SETTING-DIFF-RESULT-IN-A:CAPS">
+<ANCHOR id="NM-SETTING-DIFF-RESULT-IN-B:CAPS" href="libnm/NMSetting.html#NM-SETTING-DIFF-RESULT-IN-B:CAPS">
+<ANCHOR id="NM-SETTING-DIFF-RESULT-IN-A-DEFAULT:CAPS" href="libnm/NMSetting.html#NM-SETTING-DIFF-RESULT-IN-A-DEFAULT:CAPS">
+<ANCHOR id="NM-SETTING-DIFF-RESULT-IN-B-DEFAULT:CAPS" href="libnm/NMSetting.html#NM-SETTING-DIFF-RESULT-IN-B-DEFAULT:CAPS">
+<ANCHOR id="nm-setting-diff" href="libnm/NMSetting.html#nm-setting-diff">
+<ANCHOR id="nm-setting-enumerate-values" href="libnm/NMSetting.html#nm-setting-enumerate-values">
+<ANCHOR id="nm-setting-to-string" href="libnm/NMSetting.html#nm-setting-to-string">
+<ANCHOR id="nm-setting-get-secret-flags" href="libnm/NMSetting.html#nm-setting-get-secret-flags">
+<ANCHOR id="nm-setting-set-secret-flags" href="libnm/NMSetting.html#nm-setting-set-secret-flags">
+<ANCHOR id="nm-setting-get-dbus-property-type" href="libnm/NMSetting.html#nm-setting-get-dbus-property-type">
+<ANCHOR id="NMSetting.property-details" href="libnm/NMSetting.html#NMSetting.property-details">
+<ANCHOR id="NMSetting--name" href="libnm/NMSetting.html#NMSetting--name">
+<ANCHOR id="NMSettingConnection" href="libnm/NMSettingConnection.html">
+<ANCHOR id="NMSettingConnection.synopsis" href="libnm/NMSettingConnection.html#NMSettingConnection.synopsis">
+<ANCHOR id="NMSettingConnection.object-hierarchy" href="libnm/NMSettingConnection.html#NMSettingConnection.object-hierarchy">
+<ANCHOR id="NMSettingConnection.properties" href="libnm/NMSettingConnection.html#NMSettingConnection.properties">
+<ANCHOR id="NMSettingConnection.description" href="libnm/NMSettingConnection.html#NMSettingConnection.description">
+<ANCHOR id="NMSettingConnection.details" href="libnm/NMSettingConnection.html#NMSettingConnection.details">
+<ANCHOR id="NM-SETTING-CONNECTION-SETTING-NAME:CAPS" href="libnm/NMSettingConnection.html#NM-SETTING-CONNECTION-SETTING-NAME:CAPS">
+<ANCHOR id="NM-SETTING-CONNECTION-AUTOCONNECT-PRIORITY-MIN:CAPS" href="libnm/NMSettingConnection.html#NM-SETTING-CONNECTION-AUTOCONNECT-PRIORITY-MIN:CAPS">
+<ANCHOR id="NM-SETTING-CONNECTION-AUTOCONNECT-PRIORITY-MAX:CAPS" href="libnm/NMSettingConnection.html#NM-SETTING-CONNECTION-AUTOCONNECT-PRIORITY-MAX:CAPS">
+<ANCHOR id="NM-SETTING-CONNECTION-AUTOCONNECT-PRIORITY-DEFAULT:CAPS" href="libnm/NMSettingConnection.html#NM-SETTING-CONNECTION-AUTOCONNECT-PRIORITY-DEFAULT:CAPS">
+<ANCHOR id="NM-SETTING-CONNECTION-ID:CAPS" href="libnm/NMSettingConnection.html#NM-SETTING-CONNECTION-ID:CAPS">
+<ANCHOR id="NM-SETTING-CONNECTION-UUID:CAPS" href="libnm/NMSettingConnection.html#NM-SETTING-CONNECTION-UUID:CAPS">
+<ANCHOR id="NM-SETTING-CONNECTION-INTERFACE-NAME:CAPS" href="libnm/NMSettingConnection.html#NM-SETTING-CONNECTION-INTERFACE-NAME:CAPS">
+<ANCHOR id="NM-SETTING-CONNECTION-TYPE:CAPS" href="libnm/NMSettingConnection.html#NM-SETTING-CONNECTION-TYPE:CAPS">
+<ANCHOR id="NM-SETTING-CONNECTION-AUTOCONNECT:CAPS" href="libnm/NMSettingConnection.html#NM-SETTING-CONNECTION-AUTOCONNECT:CAPS">
+<ANCHOR id="NM-SETTING-CONNECTION-AUTOCONNECT-PRIORITY:CAPS" href="libnm/NMSettingConnection.html#NM-SETTING-CONNECTION-AUTOCONNECT-PRIORITY:CAPS">
+<ANCHOR id="NM-SETTING-CONNECTION-TIMESTAMP:CAPS" href="libnm/NMSettingConnection.html#NM-SETTING-CONNECTION-TIMESTAMP:CAPS">
+<ANCHOR id="NM-SETTING-CONNECTION-READ-ONLY:CAPS" href="libnm/NMSettingConnection.html#NM-SETTING-CONNECTION-READ-ONLY:CAPS">
+<ANCHOR id="NM-SETTING-CONNECTION-PERMISSIONS:CAPS" href="libnm/NMSettingConnection.html#NM-SETTING-CONNECTION-PERMISSIONS:CAPS">
+<ANCHOR id="NM-SETTING-CONNECTION-ZONE:CAPS" href="libnm/NMSettingConnection.html#NM-SETTING-CONNECTION-ZONE:CAPS">
+<ANCHOR id="NM-SETTING-CONNECTION-MASTER:CAPS" href="libnm/NMSettingConnection.html#NM-SETTING-CONNECTION-MASTER:CAPS">
+<ANCHOR id="NM-SETTING-CONNECTION-SLAVE-TYPE:CAPS" href="libnm/NMSettingConnection.html#NM-SETTING-CONNECTION-SLAVE-TYPE:CAPS">
+<ANCHOR id="NM-SETTING-CONNECTION-SECONDARIES:CAPS" href="libnm/NMSettingConnection.html#NM-SETTING-CONNECTION-SECONDARIES:CAPS">
+<ANCHOR id="NM-SETTING-CONNECTION-GATEWAY-PING-TIMEOUT:CAPS" href="libnm/NMSettingConnection.html#NM-SETTING-CONNECTION-GATEWAY-PING-TIMEOUT:CAPS">
+<ANCHOR id="NMSettingConnection-struct" href="libnm/NMSettingConnection.html#NMSettingConnection-struct">
+<ANCHOR id="NMSettingConnectionClass" href="libnm/NMSettingConnection.html#NMSettingConnectionClass">
+<ANCHOR id="nm-setting-connection-new" href="libnm/NMSettingConnection.html#nm-setting-connection-new">
+<ANCHOR id="nm-setting-connection-get-id" href="libnm/NMSettingConnection.html#nm-setting-connection-get-id">
+<ANCHOR id="nm-setting-connection-get-uuid" href="libnm/NMSettingConnection.html#nm-setting-connection-get-uuid">
+<ANCHOR id="nm-setting-connection-get-interface-name" href="libnm/NMSettingConnection.html#nm-setting-connection-get-interface-name">
+<ANCHOR id="nm-setting-connection-get-connection-type" href="libnm/NMSettingConnection.html#nm-setting-connection-get-connection-type">
+<ANCHOR id="nm-setting-connection-get-autoconnect" href="libnm/NMSettingConnection.html#nm-setting-connection-get-autoconnect">
+<ANCHOR id="nm-setting-connection-get-autoconnect-priority" href="libnm/NMSettingConnection.html#nm-setting-connection-get-autoconnect-priority">
+<ANCHOR id="nm-setting-connection-get-timestamp" href="libnm/NMSettingConnection.html#nm-setting-connection-get-timestamp">
+<ANCHOR id="nm-setting-connection-get-read-only" href="libnm/NMSettingConnection.html#nm-setting-connection-get-read-only">
+<ANCHOR id="nm-setting-connection-get-num-permissions" href="libnm/NMSettingConnection.html#nm-setting-connection-get-num-permissions">
+<ANCHOR id="nm-setting-connection-get-permission" href="libnm/NMSettingConnection.html#nm-setting-connection-get-permission">
+<ANCHOR id="nm-setting-connection-get-zone" href="libnm/NMSettingConnection.html#nm-setting-connection-get-zone">
+<ANCHOR id="nm-setting-connection-permissions-user-allowed" href="libnm/NMSettingConnection.html#nm-setting-connection-permissions-user-allowed">
+<ANCHOR id="nm-setting-connection-add-permission" href="libnm/NMSettingConnection.html#nm-setting-connection-add-permission">
+<ANCHOR id="nm-setting-connection-remove-permission" href="libnm/NMSettingConnection.html#nm-setting-connection-remove-permission">
+<ANCHOR id="nm-setting-connection-remove-permission-by-value" href="libnm/NMSettingConnection.html#nm-setting-connection-remove-permission-by-value">
+<ANCHOR id="nm-setting-connection-get-master" href="libnm/NMSettingConnection.html#nm-setting-connection-get-master">
+<ANCHOR id="nm-setting-connection-is-slave-type" href="libnm/NMSettingConnection.html#nm-setting-connection-is-slave-type">
+<ANCHOR id="nm-setting-connection-get-slave-type" href="libnm/NMSettingConnection.html#nm-setting-connection-get-slave-type">
+<ANCHOR id="nm-setting-connection-get-num-secondaries" href="libnm/NMSettingConnection.html#nm-setting-connection-get-num-secondaries">
+<ANCHOR id="nm-setting-connection-get-secondary" href="libnm/NMSettingConnection.html#nm-setting-connection-get-secondary">
+<ANCHOR id="nm-setting-connection-add-secondary" href="libnm/NMSettingConnection.html#nm-setting-connection-add-secondary">
+<ANCHOR id="nm-setting-connection-remove-secondary" href="libnm/NMSettingConnection.html#nm-setting-connection-remove-secondary">
+<ANCHOR id="nm-setting-connection-remove-secondary-by-value" href="libnm/NMSettingConnection.html#nm-setting-connection-remove-secondary-by-value">
+<ANCHOR id="nm-setting-connection-get-gateway-ping-timeout" href="libnm/NMSettingConnection.html#nm-setting-connection-get-gateway-ping-timeout">
+<ANCHOR id="NMSettingConnection.property-details" href="libnm/NMSettingConnection.html#NMSettingConnection.property-details">
+<ANCHOR id="NMSettingConnection--autoconnect" href="libnm/NMSettingConnection.html#NMSettingConnection--autoconnect">
+<ANCHOR id="NMSettingConnection--autoconnect-priority" href="libnm/NMSettingConnection.html#NMSettingConnection--autoconnect-priority">
+<ANCHOR id="NMSettingConnection--gateway-ping-timeout" href="libnm/NMSettingConnection.html#NMSettingConnection--gateway-ping-timeout">
+<ANCHOR id="NMSettingConnection--id" href="libnm/NMSettingConnection.html#NMSettingConnection--id">
+<ANCHOR id="NMSettingConnection--interface-name" href="libnm/NMSettingConnection.html#NMSettingConnection--interface-name">
+<ANCHOR id="NMSettingConnection--master" href="libnm/NMSettingConnection.html#NMSettingConnection--master">
+<ANCHOR id="NMSettingConnection--permissions" href="libnm/NMSettingConnection.html#NMSettingConnection--permissions">
+<ANCHOR id="NMSettingConnection--read-only" href="libnm/NMSettingConnection.html#NMSettingConnection--read-only">
+<ANCHOR id="NMSettingConnection--secondaries" href="libnm/NMSettingConnection.html#NMSettingConnection--secondaries">
+<ANCHOR id="NMSettingConnection--slave-type" href="libnm/NMSettingConnection.html#NMSettingConnection--slave-type">
+<ANCHOR id="NMSettingConnection--timestamp" href="libnm/NMSettingConnection.html#NMSettingConnection--timestamp">
+<ANCHOR id="NMSettingConnection--type" href="libnm/NMSettingConnection.html#NMSettingConnection--type">
+<ANCHOR id="NMSettingConnection--uuid" href="libnm/NMSettingConnection.html#NMSettingConnection--uuid">
+<ANCHOR id="NMSettingConnection--zone" href="libnm/NMSettingConnection.html#NMSettingConnection--zone">
+<ANCHOR id="NMSetting8021x" href="libnm/NMSetting8021x.html">
+<ANCHOR id="NMSetting8021x.synopsis" href="libnm/NMSetting8021x.html#NMSetting8021x.synopsis">
+<ANCHOR id="NMSetting8021xCKFormat" href="libnm/NMSetting8021x.html#NMSetting8021xCKFormat">
+<ANCHOR id="NMSetting8021xCKScheme" href="libnm/NMSetting8021x.html#NMSetting8021xCKScheme">
+<ANCHOR id="NMSetting8021x.object-hierarchy" href="libnm/NMSetting8021x.html#NMSetting8021x.object-hierarchy">
+<ANCHOR id="NMSetting8021x.properties" href="libnm/NMSetting8021x.html#NMSetting8021x.properties">
+<ANCHOR id="NMSetting8021x.description" href="libnm/NMSetting8021x.html#NMSetting8021x.description">
+<ANCHOR id="NMSetting8021x.details" href="libnm/NMSetting8021x.html#NMSetting8021x.details">
+<ANCHOR id="NMSetting8021xCKFormat-enum" href="libnm/NMSetting8021x.html#NMSetting8021xCKFormat-enum">
+<ANCHOR id="NM-SETTING-802-1X-CK-FORMAT-UNKNOWN:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-CK-FORMAT-UNKNOWN:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-CK-FORMAT-X509:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-CK-FORMAT-X509:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-CK-FORMAT-RAW-KEY:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-CK-FORMAT-RAW-KEY:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-CK-FORMAT-PKCS12:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-CK-FORMAT-PKCS12:CAPS">
+<ANCHOR id="NMSetting8021xCKScheme-enum" href="libnm/NMSetting8021x.html#NMSetting8021xCKScheme-enum">
+<ANCHOR id="NM-SETTING-802-1X-CK-SCHEME-UNKNOWN:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-UNKNOWN:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-BLOB:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-CK-SCHEME-PATH:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-SETTING-NAME:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-SETTING-NAME:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-EAP:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-EAP:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-IDENTITY:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-IDENTITY:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-ANONYMOUS-IDENTITY:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-ANONYMOUS-IDENTITY:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PAC-FILE:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-PAC-FILE:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-CA-CERT:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-CA-CERT:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-CA-PATH:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-CA-PATH:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-SUBJECT-MATCH:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-SUBJECT-MATCH:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-ALTSUBJECT-MATCHES:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-ALTSUBJECT-MATCHES:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-CLIENT-CERT:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-CLIENT-CERT:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PHASE1-PEAPVER:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-PHASE1-PEAPVER:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PHASE1-PEAPLABEL:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-PHASE1-PEAPLABEL:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PHASE1-FAST-PROVISIONING:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-PHASE1-FAST-PROVISIONING:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PHASE2-AUTH:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-AUTH:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PHASE2-AUTHEAP:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-AUTHEAP:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PHASE2-CA-CERT:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-CA-CERT:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PHASE2-CA-PATH:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-CA-PATH:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PHASE2-SUBJECT-MATCH:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-SUBJECT-MATCH:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PHASE2-ALTSUBJECT-MATCHES:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-ALTSUBJECT-MATCHES:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PHASE2-CLIENT-CERT:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-CLIENT-CERT:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PASSWORD:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-PASSWORD:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PASSWORD-FLAGS:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-PASSWORD-FLAGS:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PASSWORD-RAW:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-PASSWORD-RAW:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PASSWORD-RAW-FLAGS:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-PASSWORD-RAW-FLAGS:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PRIVATE-KEY:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-PRIVATE-KEY:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PRIVATE-KEY-PASSWORD:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-PRIVATE-KEY-PASSWORD:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PRIVATE-KEY-PASSWORD-FLAGS:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-PRIVATE-KEY-PASSWORD-FLAGS:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PHASE2-PRIVATE-KEY:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-PRIVATE-KEY:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PHASE2-PRIVATE-KEY-PASSWORD:CAPS" href="libnm/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/NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-PRIVATE-KEY-PASSWORD-FLAGS:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PIN:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-PIN:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-PIN-FLAGS:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-PIN-FLAGS:CAPS">
+<ANCHOR id="NM-SETTING-802-1X-SYSTEM-CA-CERTS:CAPS" href="libnm/NMSetting8021x.html#NM-SETTING-802-1X-SYSTEM-CA-CERTS:CAPS">
+<ANCHOR id="NMSetting8021x-struct" href="libnm/NMSetting8021x.html#NMSetting8021x-struct">
+<ANCHOR id="NMSetting8021xClass" href="libnm/NMSetting8021x.html#NMSetting8021xClass">
+<ANCHOR id="nm-setting-802-1x-new" href="libnm/NMSetting8021x.html#nm-setting-802-1x-new">
+<ANCHOR id="nm-setting-802-1x-get-num-eap-methods" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-num-eap-methods">
+<ANCHOR id="nm-setting-802-1x-get-eap-method" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-eap-method">
+<ANCHOR id="nm-setting-802-1x-add-eap-method" href="libnm/NMSetting8021x.html#nm-setting-802-1x-add-eap-method">
+<ANCHOR id="nm-setting-802-1x-remove-eap-method" href="libnm/NMSetting8021x.html#nm-setting-802-1x-remove-eap-method">
+<ANCHOR id="nm-setting-802-1x-remove-eap-method-by-value" href="libnm/NMSetting8021x.html#nm-setting-802-1x-remove-eap-method-by-value">
+<ANCHOR id="nm-setting-802-1x-clear-eap-methods" href="libnm/NMSetting8021x.html#nm-setting-802-1x-clear-eap-methods">
+<ANCHOR id="nm-setting-802-1x-get-identity" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-identity">
+<ANCHOR id="nm-setting-802-1x-get-anonymous-identity" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-anonymous-identity">
+<ANCHOR id="nm-setting-802-1x-get-pac-file" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-pac-file">
+<ANCHOR id="nm-setting-802-1x-get-system-ca-certs" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-system-ca-certs">
+<ANCHOR id="nm-setting-802-1x-get-ca-path" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-ca-path">
+<ANCHOR id="nm-setting-802-1x-get-phase2-ca-path" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-phase2-ca-path">
+<ANCHOR id="nm-setting-802-1x-get-ca-cert-scheme" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-ca-cert-scheme">
+<ANCHOR id="nm-setting-802-1x-get-ca-cert-blob" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-ca-cert-blob">
+<ANCHOR id="nm-setting-802-1x-get-ca-cert-path" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-ca-cert-path">
+<ANCHOR id="nm-setting-802-1x-set-ca-cert" href="libnm/NMSetting8021x.html#nm-setting-802-1x-set-ca-cert">
+<ANCHOR id="nm-setting-802-1x-get-subject-match" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-subject-match">
+<ANCHOR id="nm-setting-802-1x-get-num-altsubject-matches" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-num-altsubject-matches">
+<ANCHOR id="nm-setting-802-1x-get-altsubject-match" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-altsubject-match">
+<ANCHOR id="nm-setting-802-1x-add-altsubject-match" href="libnm/NMSetting8021x.html#nm-setting-802-1x-add-altsubject-match">
+<ANCHOR id="nm-setting-802-1x-remove-altsubject-match" href="libnm/NMSetting8021x.html#nm-setting-802-1x-remove-altsubject-match">
+<ANCHOR id="nm-setting-802-1x-remove-altsubject-match-by-value" href="libnm/NMSetting8021x.html#nm-setting-802-1x-remove-altsubject-match-by-value">
+<ANCHOR id="nm-setting-802-1x-clear-altsubject-matches" href="libnm/NMSetting8021x.html#nm-setting-802-1x-clear-altsubject-matches">
+<ANCHOR id="nm-setting-802-1x-get-client-cert-scheme" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-client-cert-scheme">
+<ANCHOR id="nm-setting-802-1x-get-client-cert-blob" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-client-cert-blob">
+<ANCHOR id="nm-setting-802-1x-get-client-cert-path" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-client-cert-path">
+<ANCHOR id="nm-setting-802-1x-set-client-cert" href="libnm/NMSetting8021x.html#nm-setting-802-1x-set-client-cert">
+<ANCHOR id="nm-setting-802-1x-get-phase1-peapver" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-phase1-peapver">
+<ANCHOR id="nm-setting-802-1x-get-phase1-peaplabel" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-phase1-peaplabel">
+<ANCHOR id="nm-setting-802-1x-get-phase1-fast-provisioning" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-phase1-fast-provisioning">
+<ANCHOR id="nm-setting-802-1x-get-phase2-auth" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-phase2-auth">
+<ANCHOR id="nm-setting-802-1x-get-phase2-autheap" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-phase2-autheap">
+<ANCHOR id="nm-setting-802-1x-get-phase2-ca-cert-scheme" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-phase2-ca-cert-scheme">
+<ANCHOR id="nm-setting-802-1x-get-phase2-ca-cert-blob" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-phase2-ca-cert-blob">
+<ANCHOR id="nm-setting-802-1x-get-phase2-ca-cert-path" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-phase2-ca-cert-path">
+<ANCHOR id="nm-setting-802-1x-set-phase2-ca-cert" href="libnm/NMSetting8021x.html#nm-setting-802-1x-set-phase2-ca-cert">
+<ANCHOR id="nm-setting-802-1x-get-phase2-subject-match" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-phase2-subject-match">
+<ANCHOR id="nm-setting-802-1x-get-num-phase2-altsubject-matches" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-num-phase2-altsubject-matches">
+<ANCHOR id="nm-setting-802-1x-get-phase2-altsubject-match" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-phase2-altsubject-match">
+<ANCHOR id="nm-setting-802-1x-add-phase2-altsubject-match" href="libnm/NMSetting8021x.html#nm-setting-802-1x-add-phase2-altsubject-match">
+<ANCHOR id="nm-setting-802-1x-remove-phase2-altsubject-match" href="libnm/NMSetting8021x.html#nm-setting-802-1x-remove-phase2-altsubject-match">
+<ANCHOR id="nm-setting-802-1x-remove-phase2-altsubject-match-by-value" href="libnm/NMSetting8021x.html#nm-setting-802-1x-remove-phase2-altsubject-match-by-value">
+<ANCHOR id="nm-setting-802-1x-clear-phase2-altsubject-matches" href="libnm/NMSetting8021x.html#nm-setting-802-1x-clear-phase2-altsubject-matches">
+<ANCHOR id="nm-setting-802-1x-get-phase2-client-cert-scheme" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-phase2-client-cert-scheme">
+<ANCHOR id="nm-setting-802-1x-get-phase2-client-cert-blob" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-phase2-client-cert-blob">
+<ANCHOR id="nm-setting-802-1x-get-phase2-client-cert-path" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-phase2-client-cert-path">
+<ANCHOR id="nm-setting-802-1x-set-phase2-client-cert" href="libnm/NMSetting8021x.html#nm-setting-802-1x-set-phase2-client-cert">
+<ANCHOR id="nm-setting-802-1x-get-password" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-password">
+<ANCHOR id="nm-setting-802-1x-get-password-flags" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-password-flags">
+<ANCHOR id="nm-setting-802-1x-get-password-raw" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-password-raw">
+<ANCHOR id="nm-setting-802-1x-get-password-raw-flags" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-password-raw-flags">
+<ANCHOR id="nm-setting-802-1x-get-pin" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-pin">
+<ANCHOR id="nm-setting-802-1x-get-pin-flags" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-pin-flags">
+<ANCHOR id="nm-setting-802-1x-get-private-key-scheme" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-private-key-scheme">
+<ANCHOR id="nm-setting-802-1x-get-private-key-blob" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-private-key-blob">
+<ANCHOR id="nm-setting-802-1x-get-private-key-path" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-private-key-path">
+<ANCHOR id="nm-setting-802-1x-set-private-key" href="libnm/NMSetting8021x.html#nm-setting-802-1x-set-private-key">
+<ANCHOR id="nm-setting-802-1x-get-private-key-password" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-private-key-password">
+<ANCHOR id="nm-setting-802-1x-get-private-key-password-flags" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-private-key-password-flags">
+<ANCHOR id="nm-setting-802-1x-get-private-key-format" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-private-key-format">
+<ANCHOR id="nm-setting-802-1x-get-phase2-private-key-scheme" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-scheme">
+<ANCHOR id="nm-setting-802-1x-get-phase2-private-key-blob" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-blob">
+<ANCHOR id="nm-setting-802-1x-get-phase2-private-key-path" href="libnm/NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-path">
+<ANCHOR id="nm-setting-802-1x-set-phase2-private-key" href="libnm/NMSetting8021x.html#nm-setting-802-1x-set-phase2-private-key">
+<ANCHOR id="nm-setting-802-1x-get-phase2-private-key-password" href="libnm/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/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/NMSetting8021x.html#nm-setting-802-1x-get-phase2-private-key-format">
+<ANCHOR id="NMSetting8021x.property-details" href="libnm/NMSetting8021x.html#NMSetting8021x.property-details">
+<ANCHOR id="NMSetting8021x--altsubject-matches" href="libnm/NMSetting8021x.html#NMSetting8021x--altsubject-matches">
+<ANCHOR id="NMSetting8021x--anonymous-identity" href="libnm/NMSetting8021x.html#NMSetting8021x--anonymous-identity">
+<ANCHOR id="NMSetting8021x--ca-cert" href="libnm/NMSetting8021x.html#NMSetting8021x--ca-cert">
+<ANCHOR id="NMSetting8021x--ca-path" href="libnm/NMSetting8021x.html#NMSetting8021x--ca-path">
+<ANCHOR id="NMSetting8021x--client-cert" href="libnm/NMSetting8021x.html#NMSetting8021x--client-cert">
+<ANCHOR id="NMSetting8021x--eap" href="libnm/NMSetting8021x.html#NMSetting8021x--eap">
+<ANCHOR id="NMSetting8021x--identity" href="libnm/NMSetting8021x.html#NMSetting8021x--identity">
+<ANCHOR id="NMSetting8021x--pac-file" href="libnm/NMSetting8021x.html#NMSetting8021x--pac-file">
+<ANCHOR id="NMSetting8021x--password" href="libnm/NMSetting8021x.html#NMSetting8021x--password">
+<ANCHOR id="NMSetting8021x--password-flags" href="libnm/NMSetting8021x.html#NMSetting8021x--password-flags">
+<ANCHOR id="NMSetting8021x--password-raw" href="libnm/NMSetting8021x.html#NMSetting8021x--password-raw">
+<ANCHOR id="NMSetting8021x--password-raw-flags" href="libnm/NMSetting8021x.html#NMSetting8021x--password-raw-flags">
+<ANCHOR id="NMSetting8021x--phase1-fast-provisioning" href="libnm/NMSetting8021x.html#NMSetting8021x--phase1-fast-provisioning">
+<ANCHOR id="NMSetting8021x--phase1-peaplabel" href="libnm/NMSetting8021x.html#NMSetting8021x--phase1-peaplabel">
+<ANCHOR id="NMSetting8021x--phase1-peapver" href="libnm/NMSetting8021x.html#NMSetting8021x--phase1-peapver">
+<ANCHOR id="NMSetting8021x--phase2-altsubject-matches" href="libnm/NMSetting8021x.html#NMSetting8021x--phase2-altsubject-matches">
+<ANCHOR id="NMSetting8021x--phase2-auth" href="libnm/NMSetting8021x.html#NMSetting8021x--phase2-auth">
+<ANCHOR id="NMSetting8021x--phase2-autheap" href="libnm/NMSetting8021x.html#NMSetting8021x--phase2-autheap">
+<ANCHOR id="NMSetting8021x--phase2-ca-cert" href="libnm/NMSetting8021x.html#NMSetting8021x--phase2-ca-cert">
+<ANCHOR id="NMSetting8021x--phase2-ca-path" href="libnm/NMSetting8021x.html#NMSetting8021x--phase2-ca-path">
+<ANCHOR id="NMSetting8021x--phase2-client-cert" href="libnm/NMSetting8021x.html#NMSetting8021x--phase2-client-cert">
+<ANCHOR id="NMSetting8021x--phase2-private-key" href="libnm/NMSetting8021x.html#NMSetting8021x--phase2-private-key">
+<ANCHOR id="NMSetting8021x--phase2-private-key-password" href="libnm/NMSetting8021x.html#NMSetting8021x--phase2-private-key-password">
+<ANCHOR id="NMSetting8021x--phase2-private-key-password-flags" href="libnm/NMSetting8021x.html#NMSetting8021x--phase2-private-key-password-flags">
+<ANCHOR id="NMSetting8021x--phase2-subject-match" href="libnm/NMSetting8021x.html#NMSetting8021x--phase2-subject-match">
+<ANCHOR id="NMSetting8021x--pin" href="libnm/NMSetting8021x.html#NMSetting8021x--pin">
+<ANCHOR id="NMSetting8021x--pin-flags" href="libnm/NMSetting8021x.html#NMSetting8021x--pin-flags">
+<ANCHOR id="NMSetting8021x--private-key" href="libnm/NMSetting8021x.html#NMSetting8021x--private-key">
+<ANCHOR id="NMSetting8021x--private-key-password" href="libnm/NMSetting8021x.html#NMSetting8021x--private-key-password">
+<ANCHOR id="NMSetting8021x--private-key-password-flags" href="libnm/NMSetting8021x.html#NMSetting8021x--private-key-password-flags">
+<ANCHOR id="NMSetting8021x--subject-match" href="libnm/NMSetting8021x.html#NMSetting8021x--subject-match">
+<ANCHOR id="NMSetting8021x--system-ca-certs" href="libnm/NMSetting8021x.html#NMSetting8021x--system-ca-certs">
+<ANCHOR id="NMSettingAdsl" href="libnm/NMSettingAdsl.html">
+<ANCHOR id="NMSettingAdsl.synopsis" href="libnm/NMSettingAdsl.html#NMSettingAdsl.synopsis">
+<ANCHOR id="NMSettingAdsl.object-hierarchy" href="libnm/NMSettingAdsl.html#NMSettingAdsl.object-hierarchy">
+<ANCHOR id="NMSettingAdsl.properties" href="libnm/NMSettingAdsl.html#NMSettingAdsl.properties">
+<ANCHOR id="NMSettingAdsl.description" href="libnm/NMSettingAdsl.html#NMSettingAdsl.description">
+<ANCHOR id="NMSettingAdsl.details" href="libnm/NMSettingAdsl.html#NMSettingAdsl.details">
+<ANCHOR id="NM-SETTING-ADSL-SETTING-NAME:CAPS" href="libnm/NMSettingAdsl.html#NM-SETTING-ADSL-SETTING-NAME:CAPS">
+<ANCHOR id="NM-SETTING-ADSL-USERNAME:CAPS" href="libnm/NMSettingAdsl.html#NM-SETTING-ADSL-USERNAME:CAPS">
+<ANCHOR id="NM-SETTING-ADSL-PASSWORD:CAPS" href="libnm/NMSettingAdsl.html#NM-SETTING-ADSL-PASSWORD:CAPS">
+<ANCHOR id="NM-SETTING-ADSL-PASSWORD-FLAGS:CAPS" href="libnm/NMSettingAdsl.html#NM-SETTING-ADSL-PASSWORD-FLAGS:CAPS">
+<ANCHOR id="NM-SETTING-ADSL-PROTOCOL:CAPS" href="libnm/NMSettingAdsl.html#NM-SETTING-ADSL-PROTOCOL:CAPS">
+<ANCHOR id="NM-SETTING-ADSL-ENCAPSULATION:CAPS" href="libnm/NMSettingAdsl.html#NM-SETTING-ADSL-ENCAPSULATION:CAPS">
+<ANCHOR id="NM-SETTING-ADSL-VPI:CAPS" href="libnm/NMSettingAdsl.html#NM-SETTING-ADSL-VPI:CAPS">
+<ANCHOR id="NM-SETTING-ADSL-VCI:CAPS" href="libnm/NMSettingAdsl.html#NM-SETTING-ADSL-VCI:CAPS">
+<ANCHOR id="NM-SETTING-ADSL-PROTOCOL-PPPOA:CAPS" href="libnm/NMSettingAdsl.html#NM-SETTING-ADSL-PROTOCOL-PPPOA:CAPS">
+<ANCHOR id="NM-SETTING-ADSL-PROTOCOL-PPPOE:CAPS" href="libnm/NMSettingAdsl.html#NM-SETTING-ADSL-PROTOCOL-PPPOE:CAPS">
+<ANCHOR id="NM-SETTING-ADSL-PROTOCOL-IPOATM:CAPS" href="libnm/NMSettingAdsl.html#NM-SETTING-ADSL-PROTOCOL-IPOATM:CAPS">
+<ANCHOR id="NM-SETTING-ADSL-ENCAPSULATION-VCMUX:CAPS" href="libnm/NMSettingAdsl.html#NM-SETTING-ADSL-ENCAPSULATION-VCMUX:CAPS">
+<ANCHOR id="NM-SETTING-ADSL-ENCAPSULATION-LLC:CAPS" href="libnm/NMSettingAdsl.html#NM-SETTING-ADSL-ENCAPSULATION-LLC:CAPS">
+<ANCHOR id="NMSettingAdsl-struct" href="libnm/NMSettingAdsl.html#NMSettingAdsl-struct">
+<ANCHOR id="NMSettingAdslClass" href="libnm/NMSettingAdsl.html#NMSettingAdslClass">
+<ANCHOR id="nm-setting-adsl-new" href="libnm/NMSettingAdsl.html#nm-setting-adsl-new">
+<ANCHOR id="nm-setting-adsl-get-username" href="libnm/NMSettingAdsl.html#nm-setting-adsl-get-username">
+<ANCHOR id="nm-setting-adsl-get-password" href="libnm/NMSettingAdsl.html#nm-setting-adsl-get-password">
+<ANCHOR id="nm-setting-adsl-get-protocol" href="libnm/NMSettingAdsl.html#nm-setting-adsl-get-protocol">
+<ANCHOR id="nm-setting-adsl-get-encapsulation" href="libnm/NMSettingAdsl.html#nm-setting-adsl-get-encapsulation">
+<ANCHOR id="nm-setting-adsl-get-vpi" href="libnm/NMSettingAdsl.html#nm-setting-adsl-get-vpi">
+<ANCHOR id="nm-setting-adsl-get-vci" href="libnm/NMSettingAdsl.html#nm-setting-adsl-get-vci">
+<ANCHOR id="nm-setting-adsl-get-password-flags" href="libnm/NMSettingAdsl.html#nm-setting-adsl-get-password-flags">
+<ANCHOR id="NMSettingAdsl.property-details" href="libnm/NMSettingAdsl.html#NMSettingAdsl.property-details">
+<ANCHOR id="NMSettingAdsl--encapsulation" href="libnm/NMSettingAdsl.html#NMSettingAdsl--encapsulation">
+<ANCHOR id="NMSettingAdsl--password" href="libnm/NMSettingAdsl.html#NMSettingAdsl--password">
+<ANCHOR id="NMSettingAdsl--password-flags" href="libnm/NMSettingAdsl.html#NMSettingAdsl--password-flags">
+<ANCHOR id="NMSettingAdsl--protocol" href="libnm/NMSettingAdsl.html#NMSettingAdsl--protocol">
+<ANCHOR id="NMSettingAdsl--username" href="libnm/NMSettingAdsl.html#NMSettingAdsl--username">
+<ANCHOR id="NMSettingAdsl--vci" href="libnm/NMSettingAdsl.html#NMSettingAdsl--vci">
+<ANCHOR id="NMSettingAdsl--vpi" href="libnm/NMSettingAdsl.html#NMSettingAdsl--vpi">
+<ANCHOR id="NMSettingBluetooth" href="libnm/NMSettingBluetooth.html">
+<ANCHOR id="NMSettingBluetooth.synopsis" href="libnm/NMSettingBluetooth.html#NMSettingBluetooth.synopsis">
+<ANCHOR id="NMSettingBluetooth.object-hierarchy" href="libnm/NMSettingBluetooth.html#NMSettingBluetooth.object-hierarchy">
+<ANCHOR id="NMSettingBluetooth.properties" href="libnm/NMSettingBluetooth.html#NMSettingBluetooth.properties">
+<ANCHOR id="NMSettingBluetooth.description" href="libnm/NMSettingBluetooth.html#NMSettingBluetooth.description">
+<ANCHOR id="NMSettingBluetooth.details" href="libnm/NMSettingBluetooth.html#NMSettingBluetooth.details">
+<ANCHOR id="NM-SETTING-BLUETOOTH-SETTING-NAME:CAPS" href="libnm/NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-SETTING-NAME:CAPS">
+<ANCHOR id="NM-SETTING-BLUETOOTH-BDADDR:CAPS" href="libnm/NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-BDADDR:CAPS">
+<ANCHOR id="NM-SETTING-BLUETOOTH-TYPE:CAPS" href="libnm/NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-TYPE:CAPS">
+<ANCHOR id="NM-SETTING-BLUETOOTH-TYPE-DUN:CAPS" href="libnm/NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-TYPE-DUN:CAPS">
+<ANCHOR id="NM-SETTING-BLUETOOTH-TYPE-PANU:CAPS" href="libnm/NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-TYPE-PANU:CAPS">
+<ANCHOR id="NMSettingBluetooth-struct" href="libnm/NMSettingBluetooth.html#NMSettingBluetooth-struct">
+<ANCHOR id="NMSettingBluetoothClass" href="libnm/NMSettingBluetooth.html#NMSettingBluetoothClass">
+<ANCHOR id="nm-setting-bluetooth-new" href="libnm/NMSettingBluetooth.html#nm-setting-bluetooth-new">
+<ANCHOR id="nm-setting-bluetooth-get-bdaddr" href="libnm/NMSettingBluetooth.html#nm-setting-bluetooth-get-bdaddr">
+<ANCHOR id="nm-setting-bluetooth-get-connection-type" href="libnm/NMSettingBluetooth.html#nm-setting-bluetooth-get-connection-type">
+<ANCHOR id="NMSettingBluetooth.property-details" href="libnm/NMSettingBluetooth.html#NMSettingBluetooth.property-details">
+<ANCHOR id="NMSettingBluetooth--bdaddr" href="libnm/NMSettingBluetooth.html#NMSettingBluetooth--bdaddr">
+<ANCHOR id="NMSettingBluetooth--type" href="libnm/NMSettingBluetooth.html#NMSettingBluetooth--type">
+<ANCHOR id="NMSettingBond" href="libnm/NMSettingBond.html">
+<ANCHOR id="NMSettingBond.synopsis" href="libnm/NMSettingBond.html#NMSettingBond.synopsis">
+<ANCHOR id="NMSettingBond.object-hierarchy" href="libnm/NMSettingBond.html#NMSettingBond.object-hierarchy">
+<ANCHOR id="NMSettingBond.properties" href="libnm/NMSettingBond.html#NMSettingBond.properties">
+<ANCHOR id="NMSettingBond.description" href="libnm/NMSettingBond.html#NMSettingBond.description">
+<ANCHOR id="NMSettingBond.details" href="libnm/NMSettingBond.html#NMSettingBond.details">
+<ANCHOR id="NM-SETTING-BOND-SETTING-NAME:CAPS" href="libnm/NMSettingBond.html#NM-SETTING-BOND-SETTING-NAME:CAPS">
+<ANCHOR id="NM-SETTING-BOND-OPTIONS:CAPS" href="libnm/NMSettingBond.html#NM-SETTING-BOND-OPTIONS:CAPS">
+<ANCHOR id="NM-SETTING-BOND-OPTION-MODE:CAPS" href="libnm/NMSettingBond.html#NM-SETTING-BOND-OPTION-MODE:CAPS">
+<ANCHOR id="NM-SETTING-BOND-OPTION-MIIMON:CAPS" href="libnm/NMSettingBond.html#NM-SETTING-BOND-OPTION-MIIMON:CAPS">
+<ANCHOR id="NM-SETTING-BOND-OPTION-DOWNDELAY:CAPS" href="libnm/NMSettingBond.html#NM-SETTING-BOND-OPTION-DOWNDELAY:CAPS">
+<ANCHOR id="NM-SETTING-BOND-OPTION-UPDELAY:CAPS" href="libnm/NMSettingBond.html#NM-SETTING-BOND-OPTION-UPDELAY:CAPS">
+<ANCHOR id="NM-SETTING-BOND-OPTION-ARP-INTERVAL:CAPS" href="libnm/NMSettingBond.html#NM-SETTING-BOND-OPTION-ARP-INTERVAL:CAPS">
+<ANCHOR id="NM-SETTING-BOND-OPTION-ARP-IP-TARGET:CAPS" href="libnm/NMSettingBond.html#NM-SETTING-BOND-OPTION-ARP-IP-TARGET:CAPS">
+<ANCHOR id="NM-SETTING-BOND-OPTION-ARP-VALIDATE:CAPS" href="libnm/NMSettingBond.html#NM-SETTING-BOND-OPTION-ARP-VALIDATE:CAPS">
+<ANCHOR id="NM-SETTING-BOND-OPTION-PRIMARY:CAPS" href="libnm/NMSettingBond.html#NM-SETTING-BOND-OPTION-PRIMARY:CAPS">
+<ANCHOR id="NM-SETTING-BOND-OPTION-PRIMARY-RESELECT:CAPS" href="libnm/NMSettingBond.html#NM-SETTING-BOND-OPTION-PRIMARY-RESELECT:CAPS">
+<ANCHOR id="NM-SETTING-BOND-OPTION-FAIL-OVER-MAC:CAPS" href="libnm/NMSettingBond.html#NM-SETTING-BOND-OPTION-FAIL-OVER-MAC:CAPS">
+<ANCHOR id="NM-SETTING-BOND-OPTION-USE-CARRIER:CAPS" href="libnm/NMSettingBond.html#NM-SETTING-BOND-OPTION-USE-CARRIER:CAPS">
+<ANCHOR id="NM-SETTING-BOND-OPTION-AD-SELECT:CAPS" href="libnm/NMSettingBond.html#NM-SETTING-BOND-OPTION-AD-SELECT:CAPS">
+<ANCHOR id="NM-SETTING-BOND-OPTION-XMIT-HASH-POLICY:CAPS" href="libnm/NMSettingBond.html#NM-SETTING-BOND-OPTION-XMIT-HASH-POLICY:CAPS">
+<ANCHOR id="NM-SETTING-BOND-OPTION-RESEND-IGMP:CAPS" href="libnm/NMSettingBond.html#NM-SETTING-BOND-OPTION-RESEND-IGMP:CAPS">
+<ANCHOR id="NM-SETTING-BOND-OPTION-LACP-RATE:CAPS" href="libnm/NMSettingBond.html#NM-SETTING-BOND-OPTION-LACP-RATE:CAPS">
+<ANCHOR id="NMSettingBond-struct" href="libnm/NMSettingBond.html#NMSettingBond-struct">
+<ANCHOR id="NMSettingBondClass" href="libnm/NMSettingBond.html#NMSettingBondClass">
+<ANCHOR id="nm-setting-bond-new" href="libnm/NMSettingBond.html#nm-setting-bond-new">
+<ANCHOR id="nm-setting-bond-get-num-options" href="libnm/NMSettingBond.html#nm-setting-bond-get-num-options">
+<ANCHOR id="nm-setting-bond-get-option" href="libnm/NMSettingBond.html#nm-setting-bond-get-option">
+<ANCHOR id="nm-setting-bond-get-option-by-name" href="libnm/NMSettingBond.html#nm-setting-bond-get-option-by-name">
+<ANCHOR id="nm-setting-bond-add-option" href="libnm/NMSettingBond.html#nm-setting-bond-add-option">
+<ANCHOR id="nm-setting-bond-remove-option" href="libnm/NMSettingBond.html#nm-setting-bond-remove-option">
+<ANCHOR id="nm-setting-bond-validate-option" href="libnm/NMSettingBond.html#nm-setting-bond-validate-option">
+<ANCHOR id="nm-setting-bond-get-valid-options" href="libnm/NMSettingBond.html#nm-setting-bond-get-valid-options">
+<ANCHOR id="nm-setting-bond-get-option-default" href="libnm/NMSettingBond.html#nm-setting-bond-get-option-default">
+<ANCHOR id="NMSettingBond.property-details" href="libnm/NMSettingBond.html#NMSettingBond.property-details">
+<ANCHOR id="NMSettingBond--options" href="libnm/NMSettingBond.html#NMSettingBond--options">
+<ANCHOR id="NMSettingBridge" href="libnm/NMSettingBridge.html">
+<ANCHOR id="NMSettingBridge.synopsis" href="libnm/NMSettingBridge.html#NMSettingBridge.synopsis">
+<ANCHOR id="NMSettingBridge.object-hierarchy" href="libnm/NMSettingBridge.html#NMSettingBridge.object-hierarchy">
+<ANCHOR id="NMSettingBridge.properties" href="libnm/NMSettingBridge.html#NMSettingBridge.properties">
+<ANCHOR id="NMSettingBridge.description" href="libnm/NMSettingBridge.html#NMSettingBridge.description">
+<ANCHOR id="NMSettingBridge.details" href="libnm/NMSettingBridge.html#NMSettingBridge.details">
+<ANCHOR id="NM-SETTING-BRIDGE-SETTING-NAME:CAPS" href="libnm/NMSettingBridge.html#NM-SETTING-BRIDGE-SETTING-NAME:CAPS">
+<ANCHOR id="NM-SETTING-BRIDGE-MAC-ADDRESS:CAPS" href="libnm/NMSettingBridge.html#NM-SETTING-BRIDGE-MAC-ADDRESS:CAPS">
+<ANCHOR id="NM-SETTING-BRIDGE-STP:CAPS" href="libnm/NMSettingBridge.html#NM-SETTING-BRIDGE-STP:CAPS">
+<ANCHOR id="NM-SETTING-BRIDGE-PRIORITY:CAPS" href="libnm/NMSettingBridge.html#NM-SETTING-BRIDGE-PRIORITY:CAPS">
+<ANCHOR id="NM-SETTING-BRIDGE-FORWARD-DELAY:CAPS" href="libnm/NMSettingBridge.html#NM-SETTING-BRIDGE-FORWARD-DELAY:CAPS">
+<ANCHOR id="NM-SETTING-BRIDGE-HELLO-TIME:CAPS" href="libnm/NMSettingBridge.html#NM-SETTING-BRIDGE-HELLO-TIME:CAPS">
+<ANCHOR id="NM-SETTING-BRIDGE-MAX-AGE:CAPS" href="libnm/NMSettingBridge.html#NM-SETTING-BRIDGE-MAX-AGE:CAPS">
+<ANCHOR id="NM-SETTING-BRIDGE-AGEING-TIME:CAPS" href="libnm/NMSettingBridge.html#NM-SETTING-BRIDGE-AGEING-TIME:CAPS">
+<ANCHOR id="NMSettingBridge-struct" href="libnm/NMSettingBridge.html#NMSettingBridge-struct">
+<ANCHOR id="NMSettingBridgeClass" href="libnm/NMSettingBridge.html#NMSettingBridgeClass">
+<ANCHOR id="nm-setting-bridge-new" href="libnm/NMSettingBridge.html#nm-setting-bridge-new">
+<ANCHOR id="nm-setting-bridge-get-mac-address" href="libnm/NMSettingBridge.html#nm-setting-bridge-get-mac-address">
+<ANCHOR id="nm-setting-bridge-get-stp" href="libnm/NMSettingBridge.html#nm-setting-bridge-get-stp">
+<ANCHOR id="nm-setting-bridge-get-priority" href="libnm/NMSettingBridge.html#nm-setting-bridge-get-priority">
+<ANCHOR id="nm-setting-bridge-get-forward-delay" href="libnm/NMSettingBridge.html#nm-setting-bridge-get-forward-delay">
+<ANCHOR id="nm-setting-bridge-get-hello-time" href="libnm/NMSettingBridge.html#nm-setting-bridge-get-hello-time">
+<ANCHOR id="nm-setting-bridge-get-max-age" href="libnm/NMSettingBridge.html#nm-setting-bridge-get-max-age">
+<ANCHOR id="nm-setting-bridge-get-ageing-time" href="libnm/NMSettingBridge.html#nm-setting-bridge-get-ageing-time">
+<ANCHOR id="NMSettingBridge.property-details" href="libnm/NMSettingBridge.html#NMSettingBridge.property-details">
+<ANCHOR id="NMSettingBridge--ageing-time" href="libnm/NMSettingBridge.html#NMSettingBridge--ageing-time">
+<ANCHOR id="NMSettingBridge--forward-delay" href="libnm/NMSettingBridge.html#NMSettingBridge--forward-delay">
+<ANCHOR id="NMSettingBridge--hello-time" href="libnm/NMSettingBridge.html#NMSettingBridge--hello-time">
+<ANCHOR id="NMSettingBridge--mac-address" href="libnm/NMSettingBridge.html#NMSettingBridge--mac-address">
+<ANCHOR id="NMSettingBridge--max-age" href="libnm/NMSettingBridge.html#NMSettingBridge--max-age">
+<ANCHOR id="NMSettingBridge--priority" href="libnm/NMSettingBridge.html#NMSettingBridge--priority">
+<ANCHOR id="NMSettingBridge--stp" href="libnm/NMSettingBridge.html#NMSettingBridge--stp">
+<ANCHOR id="NMSettingBridgePort" href="libnm/NMSettingBridgePort.html">
+<ANCHOR id="NMSettingBridgePort.synopsis" href="libnm/NMSettingBridgePort.html#NMSettingBridgePort.synopsis">
+<ANCHOR id="NMSettingBridgePort.object-hierarchy" href="libnm/NMSettingBridgePort.html#NMSettingBridgePort.object-hierarchy">
+<ANCHOR id="NMSettingBridgePort.properties" href="libnm/NMSettingBridgePort.html#NMSettingBridgePort.properties">
+<ANCHOR id="NMSettingBridgePort.description" href="libnm/NMSettingBridgePort.html#NMSettingBridgePort.description">
+<ANCHOR id="NMSettingBridgePort.details" href="libnm/NMSettingBridgePort.html#NMSettingBridgePort.details">
+<ANCHOR id="NM-SETTING-BRIDGE-PORT-SETTING-NAME:CAPS" href="libnm/NMSettingBridgePort.html#NM-SETTING-BRIDGE-PORT-SETTING-NAME:CAPS">
+<ANCHOR id="NM-SETTING-BRIDGE-PORT-PRIORITY:CAPS" href="libnm/NMSettingBridgePort.html#NM-SETTING-BRIDGE-PORT-PRIORITY:CAPS">
+<ANCHOR id="NM-SETTING-BRIDGE-PORT-PATH-COST:CAPS" href="libnm/NMSettingBridgePort.html#NM-SETTING-BRIDGE-PORT-PATH-COST:CAPS">
+<ANCHOR id="NM-SETTING-BRIDGE-PORT-HAIRPIN-MODE:CAPS" href="libnm/NMSettingBridgePort.html#NM-SETTING-BRIDGE-PORT-HAIRPIN-MODE:CAPS">
+<ANCHOR id="NMSettingBridgePort-struct" href="libnm/NMSettingBridgePort.html#NMSettingBridgePort-struct">
+<ANCHOR id="NMSettingBridgePortClass" href="libnm/NMSettingBridgePort.html#NMSettingBridgePortClass">
+<ANCHOR id="nm-setting-bridge-port-new" href="libnm/NMSettingBridgePort.html#nm-setting-bridge-port-new">
+<ANCHOR id="nm-setting-bridge-port-get-priority" href="libnm/NMSettingBridgePort.html#nm-setting-bridge-port-get-priority">
+<ANCHOR id="nm-setting-bridge-port-get-path-cost" href="libnm/NMSettingBridgePort.html#nm-setting-bridge-port-get-path-cost">
+<ANCHOR id="nm-setting-bridge-port-get-hairpin-mode" href="libnm/NMSettingBridgePort.html#nm-setting-bridge-port-get-hairpin-mode">
+<ANCHOR id="NMSettingBridgePort.property-details" href="libnm/NMSettingBridgePort.html#NMSettingBridgePort.property-details">
+<ANCHOR id="NMSettingBridgePort--hairpin-mode" href="libnm/NMSettingBridgePort.html#NMSettingBridgePort--hairpin-mode">
+<ANCHOR id="NMSettingBridgePort--path-cost" href="libnm/NMSettingBridgePort.html#NMSettingBridgePort--path-cost">
+<ANCHOR id="NMSettingBridgePort--priority" href="libnm/NMSettingBridgePort.html#NMSettingBridgePort--priority">
+<ANCHOR id="NMSettingCdma" href="libnm/NMSettingCdma.html">
+<ANCHOR id="NMSettingCdma.synopsis" href="libnm/NMSettingCdma.html#NMSettingCdma.synopsis">
+<ANCHOR id="NMSettingCdma.object-hierarchy" href="libnm/NMSettingCdma.html#NMSettingCdma.object-hierarchy">
+<ANCHOR id="NMSettingCdma.properties" href="libnm/NMSettingCdma.html#NMSettingCdma.properties">
+<ANCHOR id="NMSettingCdma.description" href="libnm/NMSettingCdma.html#NMSettingCdma.description">
+<ANCHOR id="NMSettingCdma.details" href="libnm/NMSettingCdma.html#NMSettingCdma.details">
+<ANCHOR id="NM-SETTING-CDMA-SETTING-NAME:CAPS" href="libnm/NMSettingCdma.html#NM-SETTING-CDMA-SETTING-NAME:CAPS">
+<ANCHOR id="NM-SETTING-CDMA-NUMBER:CAPS" href="libnm/NMSettingCdma.html#NM-SETTING-CDMA-NUMBER:CAPS">
+<ANCHOR id="NM-SETTING-CDMA-USERNAME:CAPS" href="libnm/NMSettingCdma.html#NM-SETTING-CDMA-USERNAME:CAPS">
+<ANCHOR id="NM-SETTING-CDMA-PASSWORD:CAPS" href="libnm/NMSettingCdma.html#NM-SETTING-CDMA-PASSWORD:CAPS">
+<ANCHOR id="NM-SETTING-CDMA-PASSWORD-FLAGS:CAPS" href="libnm/NMSettingCdma.html#NM-SETTING-CDMA-PASSWORD-FLAGS:CAPS">
+<ANCHOR id="NMSettingCdma-struct" href="libnm/NMSettingCdma.html#NMSettingCdma-struct">
+<ANCHOR id="NMSettingCdmaClass" href="libnm/NMSettingCdma.html#NMSettingCdmaClass">
+<ANCHOR id="nm-setting-cdma-new" href="libnm/NMSettingCdma.html#nm-setting-cdma-new">
+<ANCHOR id="nm-setting-cdma-get-number" href="libnm/NMSettingCdma.html#nm-setting-cdma-get-number">
+<ANCHOR id="nm-setting-cdma-get-username" href="libnm/NMSettingCdma.html#nm-setting-cdma-get-username">
+<ANCHOR id="nm-setting-cdma-get-password" href="libnm/NMSettingCdma.html#nm-setting-cdma-get-password">
+<ANCHOR id="nm-setting-cdma-get-password-flags" href="libnm/NMSettingCdma.html#nm-setting-cdma-get-password-flags">
+<ANCHOR id="NMSettingCdma.property-details" href="libnm/NMSettingCdma.html#NMSettingCdma.property-details">
+<ANCHOR id="NMSettingCdma--number" href="libnm/NMSettingCdma.html#NMSettingCdma--number">
+<ANCHOR id="NMSettingCdma--password" href="libnm/NMSettingCdma.html#NMSettingCdma--password">
+<ANCHOR id="NMSettingCdma--password-flags" href="libnm/NMSettingCdma.html#NMSettingCdma--password-flags">
+<ANCHOR id="NMSettingCdma--username" href="libnm/NMSettingCdma.html#NMSettingCdma--username">
+<ANCHOR id="NMSettingDcb" href="libnm/NMSettingDcb.html">
+<ANCHOR id="NMSettingDcb.synopsis" href="libnm/NMSettingDcb.html#NMSettingDcb.synopsis">
+<ANCHOR id="NMSettingDcbFlags" href="libnm/NMSettingDcb.html#NMSettingDcbFlags">
+<ANCHOR id="NMSettingDcb.object-hierarchy" href="libnm/NMSettingDcb.html#NMSettingDcb.object-hierarchy">
+<ANCHOR id="NMSettingDcb.properties" href="libnm/NMSettingDcb.html#NMSettingDcb.properties">
+<ANCHOR id="NMSettingDcb.description" href="libnm/NMSettingDcb.html#NMSettingDcb.description">
+<ANCHOR id="NMSettingDcb.details" href="libnm/NMSettingDcb.html#NMSettingDcb.details">
+<ANCHOR id="NM-SETTING-DCB-SETTING-NAME:CAPS" href="libnm/NMSettingDcb.html#NM-SETTING-DCB-SETTING-NAME:CAPS">
+<ANCHOR id="NMSettingDcbFlags-enum" href="libnm/NMSettingDcb.html#NMSettingDcbFlags-enum">
+<ANCHOR id="NM-SETTING-DCB-FLAG-NONE:CAPS" href="libnm/NMSettingDcb.html#NM-SETTING-DCB-FLAG-NONE:CAPS">
+<ANCHOR id="NM-SETTING-DCB-FLAG-ENABLE:CAPS" href="libnm/NMSettingDcb.html#NM-SETTING-DCB-FLAG-ENABLE:CAPS">
+<ANCHOR id="NM-SETTING-DCB-FLAG-ADVERTISE:CAPS" href="libnm/NMSettingDcb.html#NM-SETTING-DCB-FLAG-ADVERTISE:CAPS">
+<ANCHOR id="NM-SETTING-DCB-FLAG-WILLING:CAPS" href="libnm/NMSettingDcb.html#NM-SETTING-DCB-FLAG-WILLING:CAPS">
+<ANCHOR id="NM-SETTING-DCB-FCOE-MODE-FABRIC:CAPS" href="libnm/NMSettingDcb.html#NM-SETTING-DCB-FCOE-MODE-FABRIC:CAPS">
+<ANCHOR id="NM-SETTING-DCB-FCOE-MODE-VN2VN:CAPS" href="libnm/NMSettingDcb.html#NM-SETTING-DCB-FCOE-MODE-VN2VN:CAPS">
+<ANCHOR id="NM-SETTING-DCB-APP-FCOE-FLAGS:CAPS" href="libnm/NMSettingDcb.html#NM-SETTING-DCB-APP-FCOE-FLAGS:CAPS">
+<ANCHOR id="NM-SETTING-DCB-APP-FCOE-PRIORITY:CAPS" href="libnm/NMSettingDcb.html#NM-SETTING-DCB-APP-FCOE-PRIORITY:CAPS">
+<ANCHOR id="NM-SETTING-DCB-APP-FCOE-MODE:CAPS" href="libnm/NMSettingDcb.html#NM-SETTING-DCB-APP-FCOE-MODE:CAPS">
+<ANCHOR id="NM-SETTING-DCB-APP-ISCSI-FLAGS:CAPS" href="libnm/NMSettingDcb.html#NM-SETTING-DCB-APP-ISCSI-FLAGS:CAPS">
+<ANCHOR id="NM-SETTING-DCB-APP-ISCSI-PRIORITY:CAPS" href="libnm/NMSettingDcb.html#NM-SETTING-DCB-APP-ISCSI-PRIORITY:CAPS">
+<ANCHOR id="NM-SETTING-DCB-APP-FIP-FLAGS:CAPS" href="libnm/NMSettingDcb.html#NM-SETTING-DCB-APP-FIP-FLAGS:CAPS">
+<ANCHOR id="NM-SETTING-DCB-APP-FIP-PRIORITY:CAPS" href="libnm/NMSettingDcb.html#NM-SETTING-DCB-APP-FIP-PRIORITY:CAPS">
+<ANCHOR id="NM-SETTING-DCB-PRIORITY-FLOW-CONTROL-FLAGS:CAPS" href="libnm/NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-FLOW-CONTROL-FLAGS:CAPS">
+<ANCHOR id="NM-SETTING-DCB-PRIORITY-FLOW-CONTROL:CAPS" href="libnm/NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-FLOW-CONTROL:CAPS">
+<ANCHOR id="NM-SETTING-DCB-PRIORITY-GROUP-FLAGS:CAPS" href="libnm/NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-GROUP-FLAGS:CAPS">
+<ANCHOR id="NM-SETTING-DCB-PRIORITY-GROUP-ID:CAPS" href="libnm/NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-GROUP-ID:CAPS">
+<ANCHOR id="NM-SETTING-DCB-PRIORITY-GROUP-BANDWIDTH:CAPS" href="libnm/NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-GROUP-BANDWIDTH:CAPS">
+<ANCHOR id="NM-SETTING-DCB-PRIORITY-BANDWIDTH:CAPS" href="libnm/NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-BANDWIDTH:CAPS">
+<ANCHOR id="NM-SETTING-DCB-PRIORITY-STRICT-BANDWIDTH:CAPS" href="libnm/NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-STRICT-BANDWIDTH:CAPS">
+<ANCHOR id="NM-SETTING-DCB-PRIORITY-TRAFFIC-CLASS:CAPS" href="libnm/NMSettingDcb.html#NM-SETTING-DCB-PRIORITY-TRAFFIC-CLASS:CAPS">
+<ANCHOR id="NMSettingDcb-struct" href="libnm/NMSettingDcb.html#NMSettingDcb-struct">
+<ANCHOR id="NMSettingDcbClass" href="libnm/NMSettingDcb.html#NMSettingDcbClass">
+<ANCHOR id="nm-setting-dcb-new" href="libnm/NMSettingDcb.html#nm-setting-dcb-new">
+<ANCHOR id="nm-setting-dcb-get-app-fcoe-flags" href="libnm/NMSettingDcb.html#nm-setting-dcb-get-app-fcoe-flags">
+<ANCHOR id="nm-setting-dcb-get-app-fcoe-priority" href="libnm/NMSettingDcb.html#nm-setting-dcb-get-app-fcoe-priority">
+<ANCHOR id="nm-setting-dcb-get-app-fcoe-mode" href="libnm/NMSettingDcb.html#nm-setting-dcb-get-app-fcoe-mode">
+<ANCHOR id="nm-setting-dcb-get-app-iscsi-flags" href="libnm/NMSettingDcb.html#nm-setting-dcb-get-app-iscsi-flags">
+<ANCHOR id="nm-setting-dcb-get-app-iscsi-priority" href="libnm/NMSettingDcb.html#nm-setting-dcb-get-app-iscsi-priority">
+<ANCHOR id="nm-setting-dcb-get-app-fip-flags" href="libnm/NMSettingDcb.html#nm-setting-dcb-get-app-fip-flags">
+<ANCHOR id="nm-setting-dcb-get-app-fip-priority" href="libnm/NMSettingDcb.html#nm-setting-dcb-get-app-fip-priority">
+<ANCHOR id="nm-setting-dcb-get-priority-flow-control-flags" href="libnm/NMSettingDcb.html#nm-setting-dcb-get-priority-flow-control-flags">
+<ANCHOR id="nm-setting-dcb-get-priority-flow-control" href="libnm/NMSettingDcb.html#nm-setting-dcb-get-priority-flow-control">
+<ANCHOR id="nm-setting-dcb-set-priority-flow-control" href="libnm/NMSettingDcb.html#nm-setting-dcb-set-priority-flow-control">
+<ANCHOR id="nm-setting-dcb-get-priority-group-flags" href="libnm/NMSettingDcb.html#nm-setting-dcb-get-priority-group-flags">
+<ANCHOR id="nm-setting-dcb-get-priority-group-id" href="libnm/NMSettingDcb.html#nm-setting-dcb-get-priority-group-id">
+<ANCHOR id="nm-setting-dcb-set-priority-group-id" href="libnm/NMSettingDcb.html#nm-setting-dcb-set-priority-group-id">
+<ANCHOR id="nm-setting-dcb-get-priority-group-bandwidth" href="libnm/NMSettingDcb.html#nm-setting-dcb-get-priority-group-bandwidth">
+<ANCHOR id="nm-setting-dcb-set-priority-group-bandwidth" href="libnm/NMSettingDcb.html#nm-setting-dcb-set-priority-group-bandwidth">
+<ANCHOR id="nm-setting-dcb-get-priority-bandwidth" href="libnm/NMSettingDcb.html#nm-setting-dcb-get-priority-bandwidth">
+<ANCHOR id="nm-setting-dcb-set-priority-bandwidth" href="libnm/NMSettingDcb.html#nm-setting-dcb-set-priority-bandwidth">
+<ANCHOR id="nm-setting-dcb-get-priority-strict-bandwidth" href="libnm/NMSettingDcb.html#nm-setting-dcb-get-priority-strict-bandwidth">
+<ANCHOR id="nm-setting-dcb-set-priority-strict-bandwidth" href="libnm/NMSettingDcb.html#nm-setting-dcb-set-priority-strict-bandwidth">
+<ANCHOR id="nm-setting-dcb-get-priority-traffic-class" href="libnm/NMSettingDcb.html#nm-setting-dcb-get-priority-traffic-class">
+<ANCHOR id="nm-setting-dcb-set-priority-traffic-class" href="libnm/NMSettingDcb.html#nm-setting-dcb-set-priority-traffic-class">
+<ANCHOR id="NMSettingDcb.property-details" href="libnm/NMSettingDcb.html#NMSettingDcb.property-details">
+<ANCHOR id="NMSettingDcb--app-fcoe-flags" href="libnm/NMSettingDcb.html#NMSettingDcb--app-fcoe-flags">
+<ANCHOR id="NMSettingDcb--app-fcoe-mode" href="libnm/NMSettingDcb.html#NMSettingDcb--app-fcoe-mode">
+<ANCHOR id="NMSettingDcb--app-fcoe-priority" href="libnm/NMSettingDcb.html#NMSettingDcb--app-fcoe-priority">
+<ANCHOR id="NMSettingDcb--app-fip-flags" href="libnm/NMSettingDcb.html#NMSettingDcb--app-fip-flags">
+<ANCHOR id="NMSettingDcb--app-fip-priority" href="libnm/NMSettingDcb.html#NMSettingDcb--app-fip-priority">
+<ANCHOR id="NMSettingDcb--app-iscsi-flags" href="libnm/NMSettingDcb.html#NMSettingDcb--app-iscsi-flags">
+<ANCHOR id="NMSettingDcb--app-iscsi-priority" href="libnm/NMSettingDcb.html#NMSettingDcb--app-iscsi-priority">
+<ANCHOR id="NMSettingDcb--priority-bandwidth" href="libnm/NMSettingDcb.html#NMSettingDcb--priority-bandwidth">
+<ANCHOR id="NMSettingDcb--priority-flow-control" href="libnm/NMSettingDcb.html#NMSettingDcb--priority-flow-control">
+<ANCHOR id="NMSettingDcb--priority-flow-control-flags" href="libnm/NMSettingDcb.html#NMSettingDcb--priority-flow-control-flags">
+<ANCHOR id="NMSettingDcb--priority-group-bandwidth" href="libnm/NMSettingDcb.html#NMSettingDcb--priority-group-bandwidth">
+<ANCHOR id="NMSettingDcb--priority-group-flags" href="libnm/NMSettingDcb.html#NMSettingDcb--priority-group-flags">
+<ANCHOR id="NMSettingDcb--priority-group-id" href="libnm/NMSettingDcb.html#NMSettingDcb--priority-group-id">
+<ANCHOR id="NMSettingDcb--priority-strict-bandwidth" href="libnm/NMSettingDcb.html#NMSettingDcb--priority-strict-bandwidth">
+<ANCHOR id="NMSettingDcb--priority-traffic-class" href="libnm/NMSettingDcb.html#NMSettingDcb--priority-traffic-class">
+<ANCHOR id="NMSettingGeneric" href="libnm/NMSettingGeneric.html">
+<ANCHOR id="NMSettingGeneric.synopsis" href="libnm/NMSettingGeneric.html#NMSettingGeneric.synopsis">
+<ANCHOR id="NMSettingGeneric.object-hierarchy" href="libnm/NMSettingGeneric.html#NMSettingGeneric.object-hierarchy">
+<ANCHOR id="NMSettingGeneric.description" href="libnm/NMSettingGeneric.html#NMSettingGeneric.description">
+<ANCHOR id="NMSettingGeneric.details" href="libnm/NMSettingGeneric.html#NMSettingGeneric.details">
+<ANCHOR id="NM-SETTING-GENERIC-SETTING-NAME:CAPS" href="libnm/NMSettingGeneric.html#NM-SETTING-GENERIC-SETTING-NAME:CAPS">
+<ANCHOR id="NMSettingGeneric-struct" href="libnm/NMSettingGeneric.html#NMSettingGeneric-struct">
+<ANCHOR id="NMSettingGenericClass" href="libnm/NMSettingGeneric.html#NMSettingGenericClass">
+<ANCHOR id="nm-setting-generic-new" href="libnm/NMSettingGeneric.html#nm-setting-generic-new">
+<ANCHOR id="NMSettingGsm" href="libnm/NMSettingGsm.html">
+<ANCHOR id="NMSettingGsm.synopsis" href="libnm/NMSettingGsm.html#NMSettingGsm.synopsis">
+<ANCHOR id="NMSettingGsm.object-hierarchy" href="libnm/NMSettingGsm.html#NMSettingGsm.object-hierarchy">
+<ANCHOR id="NMSettingGsm.properties" href="libnm/NMSettingGsm.html#NMSettingGsm.properties">
+<ANCHOR id="NMSettingGsm.description" href="libnm/NMSettingGsm.html#NMSettingGsm.description">
+<ANCHOR id="NMSettingGsm.details" href="libnm/NMSettingGsm.html#NMSettingGsm.details">
+<ANCHOR id="NM-SETTING-GSM-SETTING-NAME:CAPS" href="libnm/NMSettingGsm.html#NM-SETTING-GSM-SETTING-NAME:CAPS">
+<ANCHOR id="NM-SETTING-GSM-NUMBER:CAPS" href="libnm/NMSettingGsm.html#NM-SETTING-GSM-NUMBER:CAPS">
+<ANCHOR id="NM-SETTING-GSM-USERNAME:CAPS" href="libnm/NMSettingGsm.html#NM-SETTING-GSM-USERNAME:CAPS">
+<ANCHOR id="NM-SETTING-GSM-PASSWORD:CAPS" href="libnm/NMSettingGsm.html#NM-SETTING-GSM-PASSWORD:CAPS">
+<ANCHOR id="NM-SETTING-GSM-PASSWORD-FLAGS:CAPS" href="libnm/NMSettingGsm.html#NM-SETTING-GSM-PASSWORD-FLAGS:CAPS">
+<ANCHOR id="NM-SETTING-GSM-APN:CAPS" href="libnm/NMSettingGsm.html#NM-SETTING-GSM-APN:CAPS">
+<ANCHOR id="NM-SETTING-GSM-NETWORK-ID:CAPS" href="libnm/NMSettingGsm.html#NM-SETTING-GSM-NETWORK-ID:CAPS">
+<ANCHOR id="NM-SETTING-GSM-PIN:CAPS" href="libnm/NMSettingGsm.html#NM-SETTING-GSM-PIN:CAPS">
+<ANCHOR id="NM-SETTING-GSM-PIN-FLAGS:CAPS" href="libnm/NMSettingGsm.html#NM-SETTING-GSM-PIN-FLAGS:CAPS">
+<ANCHOR id="NM-SETTING-GSM-HOME-ONLY:CAPS" href="libnm/NMSettingGsm.html#NM-SETTING-GSM-HOME-ONLY:CAPS">
+<ANCHOR id="NMSettingGsm-struct" href="libnm/NMSettingGsm.html#NMSettingGsm-struct">
+<ANCHOR id="NMSettingGsmClass" href="libnm/NMSettingGsm.html#NMSettingGsmClass">
+<ANCHOR id="nm-setting-gsm-new" href="libnm/NMSettingGsm.html#nm-setting-gsm-new">
+<ANCHOR id="nm-setting-gsm-get-number" href="libnm/NMSettingGsm.html#nm-setting-gsm-get-number">
+<ANCHOR id="nm-setting-gsm-get-username" href="libnm/NMSettingGsm.html#nm-setting-gsm-get-username">
+<ANCHOR id="nm-setting-gsm-get-password" href="libnm/NMSettingGsm.html#nm-setting-gsm-get-password">
+<ANCHOR id="nm-setting-gsm-get-apn" href="libnm/NMSettingGsm.html#nm-setting-gsm-get-apn">
+<ANCHOR id="nm-setting-gsm-get-network-id" href="libnm/NMSettingGsm.html#nm-setting-gsm-get-network-id">
+<ANCHOR id="nm-setting-gsm-get-pin" href="libnm/NMSettingGsm.html#nm-setting-gsm-get-pin">
+<ANCHOR id="nm-setting-gsm-get-home-only" href="libnm/NMSettingGsm.html#nm-setting-gsm-get-home-only">
+<ANCHOR id="nm-setting-gsm-get-pin-flags" href="libnm/NMSettingGsm.html#nm-setting-gsm-get-pin-flags">
+<ANCHOR id="nm-setting-gsm-get-password-flags" href="libnm/NMSettingGsm.html#nm-setting-gsm-get-password-flags">
+<ANCHOR id="NMSettingGsm.property-details" href="libnm/NMSettingGsm.html#NMSettingGsm.property-details">
+<ANCHOR id="NMSettingGsm--apn" href="libnm/NMSettingGsm.html#NMSettingGsm--apn">
+<ANCHOR id="NMSettingGsm--home-only" href="libnm/NMSettingGsm.html#NMSettingGsm--home-only">
+<ANCHOR id="NMSettingGsm--network-id" href="libnm/NMSettingGsm.html#NMSettingGsm--network-id">
+<ANCHOR id="NMSettingGsm--number" href="libnm/NMSettingGsm.html#NMSettingGsm--number">
+<ANCHOR id="NMSettingGsm--password" href="libnm/NMSettingGsm.html#NMSettingGsm--password">
+<ANCHOR id="NMSettingGsm--password-flags" href="libnm/NMSettingGsm.html#NMSettingGsm--password-flags">
+<ANCHOR id="NMSettingGsm--pin" href="libnm/NMSettingGsm.html#NMSettingGsm--pin">
+<ANCHOR id="NMSettingGsm--pin-flags" href="libnm/NMSettingGsm.html#NMSettingGsm--pin-flags">
+<ANCHOR id="NMSettingGsm--username" href="libnm/NMSettingGsm.html#NMSettingGsm--username">
+<ANCHOR id="NMSettingInfiniband" href="libnm/NMSettingInfiniband.html">
+<ANCHOR id="NMSettingInfiniband.synopsis" href="libnm/NMSettingInfiniband.html#NMSettingInfiniband.synopsis">
+<ANCHOR id="NMSettingInfiniband.object-hierarchy" href="libnm/NMSettingInfiniband.html#NMSettingInfiniband.object-hierarchy">
+<ANCHOR id="NMSettingInfiniband.properties" href="libnm/NMSettingInfiniband.html#NMSettingInfiniband.properties">
+<ANCHOR id="NMSettingInfiniband.description" href="libnm/NMSettingInfiniband.html#NMSettingInfiniband.description">
+<ANCHOR id="NMSettingInfiniband.details" href="libnm/NMSettingInfiniband.html#NMSettingInfiniband.details">
+<ANCHOR id="NM-SETTING-INFINIBAND-SETTING-NAME:CAPS" href="libnm/NMSettingInfiniband.html#NM-SETTING-INFINIBAND-SETTING-NAME:CAPS">
+<ANCHOR id="NM-SETTING-INFINIBAND-MAC-ADDRESS:CAPS" href="libnm/NMSettingInfiniband.html#NM-SETTING-INFINIBAND-MAC-ADDRESS:CAPS">
+<ANCHOR id="NM-SETTING-INFINIBAND-MTU:CAPS" href="libnm/NMSettingInfiniband.html#NM-SETTING-INFINIBAND-MTU:CAPS">
+<ANCHOR id="NM-SETTING-INFINIBAND-TRANSPORT-MODE:CAPS" href="libnm/NMSettingInfiniband.html#NM-SETTING-INFINIBAND-TRANSPORT-MODE:CAPS">
+<ANCHOR id="NM-SETTING-INFINIBAND-P-KEY:CAPS" href="libnm/NMSettingInfiniband.html#NM-SETTING-INFINIBAND-P-KEY:CAPS">
+<ANCHOR id="NM-SETTING-INFINIBAND-PARENT:CAPS" href="libnm/NMSettingInfiniband.html#NM-SETTING-INFINIBAND-PARENT:CAPS">
+<ANCHOR id="NMSettingInfiniband-struct" href="libnm/NMSettingInfiniband.html#NMSettingInfiniband-struct">
+<ANCHOR id="NMSettingInfinibandClass" href="libnm/NMSettingInfiniband.html#NMSettingInfinibandClass">
+<ANCHOR id="nm-setting-infiniband-new" href="libnm/NMSettingInfiniband.html#nm-setting-infiniband-new">
+<ANCHOR id="nm-setting-infiniband-get-mac-address" href="libnm/NMSettingInfiniband.html#nm-setting-infiniband-get-mac-address">
+<ANCHOR id="nm-setting-infiniband-get-mtu" href="libnm/NMSettingInfiniband.html#nm-setting-infiniband-get-mtu">
+<ANCHOR id="nm-setting-infiniband-get-transport-mode" href="libnm/NMSettingInfiniband.html#nm-setting-infiniband-get-transport-mode">
+<ANCHOR id="nm-setting-infiniband-get-p-key" href="libnm/NMSettingInfiniband.html#nm-setting-infiniband-get-p-key">
+<ANCHOR id="nm-setting-infiniband-get-parent" href="libnm/NMSettingInfiniband.html#nm-setting-infiniband-get-parent">
+<ANCHOR id="nm-setting-infiniband-get-virtual-interface-name" href="libnm/NMSettingInfiniband.html#nm-setting-infiniband-get-virtual-interface-name">
+<ANCHOR id="NMSettingInfiniband.property-details" href="libnm/NMSettingInfiniband.html#NMSettingInfiniband.property-details">
+<ANCHOR id="NMSettingInfiniband--mac-address" href="libnm/NMSettingInfiniband.html#NMSettingInfiniband--mac-address">
+<ANCHOR id="NMSettingInfiniband--mtu" href="libnm/NMSettingInfiniband.html#NMSettingInfiniband--mtu">
+<ANCHOR id="NMSettingInfiniband--p-key" href="libnm/NMSettingInfiniband.html#NMSettingInfiniband--p-key">
+<ANCHOR id="NMSettingInfiniband--parent" href="libnm/NMSettingInfiniband.html#NMSettingInfiniband--parent">
+<ANCHOR id="NMSettingInfiniband--transport-mode" href="libnm/NMSettingInfiniband.html#NMSettingInfiniband--transport-mode">
+<ANCHOR id="NMSettingIPConfig" href="libnm/NMSettingIPConfig.html">
+<ANCHOR id="NMSettingIPConfig.synopsis" href="libnm/NMSettingIPConfig.html#NMSettingIPConfig.synopsis">
+<ANCHOR id="NMIPAddress" href="libnm/NMSettingIPConfig.html#NMIPAddress">
+<ANCHOR id="NMIPRoute" href="libnm/NMSettingIPConfig.html#NMIPRoute">
+<ANCHOR id="NMSettingIPConfig.object-hierarchy" href="libnm/NMSettingIPConfig.html#NMSettingIPConfig.object-hierarchy">
+<ANCHOR id="NMSettingIPConfig.properties" href="libnm/NMSettingIPConfig.html#NMSettingIPConfig.properties">
+<ANCHOR id="NMSettingIPConfig.description" href="libnm/NMSettingIPConfig.html#NMSettingIPConfig.description">
+<ANCHOR id="NMSettingIPConfig.details" href="libnm/NMSettingIPConfig.html#NMSettingIPConfig.details">
+<ANCHOR id="NMIPAddress" href="libnm/NMSettingIPConfig.html#NMIPAddress">
+<ANCHOR id="nm-ip-address-new" href="libnm/NMSettingIPConfig.html#nm-ip-address-new">
+<ANCHOR id="nm-ip-address-new-binary" href="libnm/NMSettingIPConfig.html#nm-ip-address-new-binary">
+<ANCHOR id="nm-ip-address-ref" href="libnm/NMSettingIPConfig.html#nm-ip-address-ref">
+<ANCHOR id="nm-ip-address-unref" href="libnm/NMSettingIPConfig.html#nm-ip-address-unref">
+<ANCHOR id="nm-ip-address-equal" href="libnm/NMSettingIPConfig.html#nm-ip-address-equal">
+<ANCHOR id="nm-ip-address-dup" href="libnm/NMSettingIPConfig.html#nm-ip-address-dup">
+<ANCHOR id="nm-ip-address-get-family" href="libnm/NMSettingIPConfig.html#nm-ip-address-get-family">
+<ANCHOR id="nm-ip-address-get-address" href="libnm/NMSettingIPConfig.html#nm-ip-address-get-address">
+<ANCHOR id="nm-ip-address-set-address" href="libnm/NMSettingIPConfig.html#nm-ip-address-set-address">
+<ANCHOR id="nm-ip-address-get-address-binary" href="libnm/NMSettingIPConfig.html#nm-ip-address-get-address-binary">
+<ANCHOR id="nm-ip-address-set-address-binary" href="libnm/NMSettingIPConfig.html#nm-ip-address-set-address-binary">
+<ANCHOR id="nm-ip-address-get-prefix" href="libnm/NMSettingIPConfig.html#nm-ip-address-get-prefix">
+<ANCHOR id="nm-ip-address-set-prefix" href="libnm/NMSettingIPConfig.html#nm-ip-address-set-prefix">
+<ANCHOR id="nm-ip-address-get-attribute-names" href="libnm/NMSettingIPConfig.html#nm-ip-address-get-attribute-names">
+<ANCHOR id="nm-ip-address-get-attribute" href="libnm/NMSettingIPConfig.html#nm-ip-address-get-attribute">
+<ANCHOR id="nm-ip-address-set-attribute" href="libnm/NMSettingIPConfig.html#nm-ip-address-set-attribute">
+<ANCHOR id="NMIPRoute" href="libnm/NMSettingIPConfig.html#NMIPRoute">
+<ANCHOR id="nm-ip-route-new" href="libnm/NMSettingIPConfig.html#nm-ip-route-new">
+<ANCHOR id="nm-ip-route-new-binary" href="libnm/NMSettingIPConfig.html#nm-ip-route-new-binary">
+<ANCHOR id="nm-ip-route-ref" href="libnm/NMSettingIPConfig.html#nm-ip-route-ref">
+<ANCHOR id="nm-ip-route-unref" href="libnm/NMSettingIPConfig.html#nm-ip-route-unref">
+<ANCHOR id="nm-ip-route-equal" href="libnm/NMSettingIPConfig.html#nm-ip-route-equal">
+<ANCHOR id="nm-ip-route-dup" href="libnm/NMSettingIPConfig.html#nm-ip-route-dup">
+<ANCHOR id="nm-ip-route-get-family" href="libnm/NMSettingIPConfig.html#nm-ip-route-get-family">
+<ANCHOR id="nm-ip-route-get-dest" href="libnm/NMSettingIPConfig.html#nm-ip-route-get-dest">
+<ANCHOR id="nm-ip-route-set-dest" href="libnm/NMSettingIPConfig.html#nm-ip-route-set-dest">
+<ANCHOR id="nm-ip-route-get-dest-binary" href="libnm/NMSettingIPConfig.html#nm-ip-route-get-dest-binary">
+<ANCHOR id="nm-ip-route-set-dest-binary" href="libnm/NMSettingIPConfig.html#nm-ip-route-set-dest-binary">
+<ANCHOR id="nm-ip-route-get-prefix" href="libnm/NMSettingIPConfig.html#nm-ip-route-get-prefix">
+<ANCHOR id="nm-ip-route-set-prefix" href="libnm/NMSettingIPConfig.html#nm-ip-route-set-prefix">
+<ANCHOR id="nm-ip-route-get-next-hop" href="libnm/NMSettingIPConfig.html#nm-ip-route-get-next-hop">
+<ANCHOR id="nm-ip-route-set-next-hop" href="libnm/NMSettingIPConfig.html#nm-ip-route-set-next-hop">
+<ANCHOR id="nm-ip-route-get-next-hop-binary" href="libnm/NMSettingIPConfig.html#nm-ip-route-get-next-hop-binary">
+<ANCHOR id="nm-ip-route-set-next-hop-binary" href="libnm/NMSettingIPConfig.html#nm-ip-route-set-next-hop-binary">
+<ANCHOR id="nm-ip-route-get-metric" href="libnm/NMSettingIPConfig.html#nm-ip-route-get-metric">
+<ANCHOR id="nm-ip-route-set-metric" href="libnm/NMSettingIPConfig.html#nm-ip-route-set-metric">
+<ANCHOR id="nm-ip-route-get-attribute-names" href="libnm/NMSettingIPConfig.html#nm-ip-route-get-attribute-names">
+<ANCHOR id="nm-ip-route-get-attribute" href="libnm/NMSettingIPConfig.html#nm-ip-route-get-attribute">
+<ANCHOR id="nm-ip-route-set-attribute" href="libnm/NMSettingIPConfig.html#nm-ip-route-set-attribute">
+<ANCHOR id="NM-SETTING-IP-CONFIG-METHOD:CAPS" href="libnm/NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-METHOD:CAPS">
+<ANCHOR id="NM-SETTING-IP-CONFIG-DNS:CAPS" href="libnm/NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-DNS:CAPS">
+<ANCHOR id="NM-SETTING-IP-CONFIG-DNS-SEARCH:CAPS" href="libnm/NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-DNS-SEARCH:CAPS">
+<ANCHOR id="NM-SETTING-IP-CONFIG-ADDRESSES:CAPS" href="libnm/NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-ADDRESSES:CAPS">
+<ANCHOR id="NM-SETTING-IP-CONFIG-GATEWAY:CAPS" href="libnm/NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-GATEWAY:CAPS">
+<ANCHOR id="NM-SETTING-IP-CONFIG-ROUTES:CAPS" href="libnm/NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-ROUTES:CAPS">
+<ANCHOR id="NM-SETTING-IP-CONFIG-ROUTE-METRIC:CAPS" href="libnm/NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-ROUTE-METRIC:CAPS">
+<ANCHOR id="NM-SETTING-IP-CONFIG-IGNORE-AUTO-ROUTES:CAPS" href="libnm/NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-IGNORE-AUTO-ROUTES:CAPS">
+<ANCHOR id="NM-SETTING-IP-CONFIG-IGNORE-AUTO-DNS:CAPS" href="libnm/NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-IGNORE-AUTO-DNS:CAPS">
+<ANCHOR id="NM-SETTING-IP-CONFIG-DHCP-HOSTNAME:CAPS" href="libnm/NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-DHCP-HOSTNAME:CAPS">
+<ANCHOR id="NM-SETTING-IP-CONFIG-DHCP-SEND-HOSTNAME:CAPS" href="libnm/NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-DHCP-SEND-HOSTNAME:CAPS">
+<ANCHOR id="NM-SETTING-IP-CONFIG-NEVER-DEFAULT:CAPS" href="libnm/NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-NEVER-DEFAULT:CAPS">
+<ANCHOR id="NM-SETTING-IP-CONFIG-MAY-FAIL:CAPS" href="libnm/NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-MAY-FAIL:CAPS">
+<ANCHOR id="NMSettingIPConfig-struct" href="libnm/NMSettingIPConfig.html#NMSettingIPConfig-struct">
+<ANCHOR id="NMSettingIPConfigClass" href="libnm/NMSettingIPConfig.html#NMSettingIPConfigClass">
+<ANCHOR id="nm-setting-ip-config-get-method" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-get-method">
+<ANCHOR id="nm-setting-ip-config-get-num-dns" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-get-num-dns">
+<ANCHOR id="nm-setting-ip-config-get-dns" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-get-dns">
+<ANCHOR id="nm-setting-ip-config-add-dns" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-add-dns">
+<ANCHOR id="nm-setting-ip-config-remove-dns" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-remove-dns">
+<ANCHOR id="nm-setting-ip-config-remove-dns-by-value" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-remove-dns-by-value">
+<ANCHOR id="nm-setting-ip-config-clear-dns" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-clear-dns">
+<ANCHOR id="nm-setting-ip-config-get-num-dns-searches" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-get-num-dns-searches">
+<ANCHOR id="nm-setting-ip-config-get-dns-search" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-get-dns-search">
+<ANCHOR id="nm-setting-ip-config-add-dns-search" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-add-dns-search">
+<ANCHOR id="nm-setting-ip-config-remove-dns-search" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-remove-dns-search">
+<ANCHOR id="nm-setting-ip-config-remove-dns-search-by-value" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-remove-dns-search-by-value">
+<ANCHOR id="nm-setting-ip-config-clear-dns-searches" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-clear-dns-searches">
+<ANCHOR id="nm-setting-ip-config-get-num-addresses" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-get-num-addresses">
+<ANCHOR id="nm-setting-ip-config-get-address" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-get-address">
+<ANCHOR id="nm-setting-ip-config-add-address" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-add-address">
+<ANCHOR id="nm-setting-ip-config-remove-address" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-remove-address">
+<ANCHOR id="nm-setting-ip-config-remove-address-by-value" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-remove-address-by-value">
+<ANCHOR id="nm-setting-ip-config-clear-addresses" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-clear-addresses">
+<ANCHOR id="nm-setting-ip-config-get-gateway" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-get-gateway">
+<ANCHOR id="nm-setting-ip-config-get-num-routes" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-get-num-routes">
+<ANCHOR id="nm-setting-ip-config-get-route" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-get-route">
+<ANCHOR id="nm-setting-ip-config-add-route" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-add-route">
+<ANCHOR id="nm-setting-ip-config-remove-route" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-remove-route">
+<ANCHOR id="nm-setting-ip-config-remove-route-by-value" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-remove-route-by-value">
+<ANCHOR id="nm-setting-ip-config-clear-routes" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-clear-routes">
+<ANCHOR id="nm-setting-ip-config-get-route-metric" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-get-route-metric">
+<ANCHOR id="nm-setting-ip-config-get-ignore-auto-routes" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-get-ignore-auto-routes">
+<ANCHOR id="nm-setting-ip-config-get-ignore-auto-dns" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-get-ignore-auto-dns">
+<ANCHOR id="nm-setting-ip-config-get-dhcp-hostname" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-get-dhcp-hostname">
+<ANCHOR id="nm-setting-ip-config-get-dhcp-send-hostname" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-get-dhcp-send-hostname">
+<ANCHOR id="nm-setting-ip-config-get-never-default" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-get-never-default">
+<ANCHOR id="nm-setting-ip-config-get-may-fail" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-get-may-fail">
+<ANCHOR id="NMSettingIPConfig.property-details" href="libnm/NMSettingIPConfig.html#NMSettingIPConfig.property-details">
+<ANCHOR id="NMSettingIPConfig--addresses" href="libnm/NMSettingIPConfig.html#NMSettingIPConfig--addresses">
+<ANCHOR id="NMSettingIPConfig--dhcp-hostname" href="libnm/NMSettingIPConfig.html#NMSettingIPConfig--dhcp-hostname">
+<ANCHOR id="NMSettingIPConfig--dhcp-send-hostname" href="libnm/NMSettingIPConfig.html#NMSettingIPConfig--dhcp-send-hostname">
+<ANCHOR id="NMSettingIPConfig--dns" href="libnm/NMSettingIPConfig.html#NMSettingIPConfig--dns">
+<ANCHOR id="NMSettingIPConfig--dns-search" href="libnm/NMSettingIPConfig.html#NMSettingIPConfig--dns-search">
+<ANCHOR id="NMSettingIPConfig--gateway" href="libnm/NMSettingIPConfig.html#NMSettingIPConfig--gateway">
+<ANCHOR id="NMSettingIPConfig--ignore-auto-dns" href="libnm/NMSettingIPConfig.html#NMSettingIPConfig--ignore-auto-dns">
+<ANCHOR id="NMSettingIPConfig--ignore-auto-routes" href="libnm/NMSettingIPConfig.html#NMSettingIPConfig--ignore-auto-routes">
+<ANCHOR id="NMSettingIPConfig--may-fail" href="libnm/NMSettingIPConfig.html#NMSettingIPConfig--may-fail">
+<ANCHOR id="NMSettingIPConfig--method" href="libnm/NMSettingIPConfig.html#NMSettingIPConfig--method">
+<ANCHOR id="NMSettingIPConfig--never-default" href="libnm/NMSettingIPConfig.html#NMSettingIPConfig--never-default">
+<ANCHOR id="NMSettingIPConfig--route-metric" href="libnm/NMSettingIPConfig.html#NMSettingIPConfig--route-metric">
+<ANCHOR id="NMSettingIPConfig--routes" href="libnm/NMSettingIPConfig.html#NMSettingIPConfig--routes">
+<ANCHOR id="NMSettingIPConfig.see-also" href="libnm/NMSettingIPConfig.html#NMSettingIPConfig.see-also">
+<ANCHOR id="NMSettingIP4Config" href="libnm/NMSettingIP4Config.html">
+<ANCHOR id="NMSettingIP4Config.synopsis" href="libnm/NMSettingIP4Config.html#NMSettingIP4Config.synopsis">
+<ANCHOR id="NMSettingIP4Config.object-hierarchy" href="libnm/NMSettingIP4Config.html#NMSettingIP4Config.object-hierarchy">
+<ANCHOR id="NMSettingIP4Config.properties" href="libnm/NMSettingIP4Config.html#NMSettingIP4Config.properties">
+<ANCHOR id="NMSettingIP4Config.description" href="libnm/NMSettingIP4Config.html#NMSettingIP4Config.description">
+<ANCHOR id="NMSettingIP4Config.details" href="libnm/NMSettingIP4Config.html#NMSettingIP4Config.details">
+<ANCHOR id="NM-SETTING-IP4-CONFIG-SETTING-NAME:CAPS" href="libnm/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-SETTING-NAME:CAPS">
+<ANCHOR id="NM-SETTING-IP4-CONFIG-DHCP-CLIENT-ID:CAPS" href="libnm/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-DHCP-CLIENT-ID:CAPS">
+<ANCHOR id="NM-SETTING-IP4-CONFIG-METHOD-AUTO:CAPS" href="libnm/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-METHOD-AUTO:CAPS">
+<ANCHOR id="NM-SETTING-IP4-CONFIG-METHOD-LINK-LOCAL:CAPS" href="libnm/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-METHOD-LINK-LOCAL:CAPS">
+<ANCHOR id="NM-SETTING-IP4-CONFIG-METHOD-MANUAL:CAPS" href="libnm/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-METHOD-MANUAL:CAPS">
+<ANCHOR id="NM-SETTING-IP4-CONFIG-METHOD-SHARED:CAPS" href="libnm/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-METHOD-SHARED:CAPS">
+<ANCHOR id="NM-SETTING-IP4-CONFIG-METHOD-DISABLED:CAPS" href="libnm/NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-METHOD-DISABLED:CAPS">
+<ANCHOR id="NMSettingIP4Config-struct" href="libnm/NMSettingIP4Config.html#NMSettingIP4Config-struct">
+<ANCHOR id="NMSettingIP4ConfigClass" href="libnm/NMSettingIP4Config.html#NMSettingIP4ConfigClass">
+<ANCHOR id="nm-setting-ip4-config-new" href="libnm/NMSettingIP4Config.html#nm-setting-ip4-config-new">
+<ANCHOR id="nm-setting-ip4-config-get-dhcp-client-id" href="libnm/NMSettingIP4Config.html#nm-setting-ip4-config-get-dhcp-client-id">
+<ANCHOR id="NMSettingIP4Config.property-details" href="libnm/NMSettingIP4Config.html#NMSettingIP4Config.property-details">
+<ANCHOR id="NMSettingIP4Config--dhcp-client-id" href="libnm/NMSettingIP4Config.html#NMSettingIP4Config--dhcp-client-id">
+<ANCHOR id="NMSettingIP6Config" href="libnm/NMSettingIP6Config.html">
+<ANCHOR id="NMSettingIP6Config.synopsis" href="libnm/NMSettingIP6Config.html#NMSettingIP6Config.synopsis">
+<ANCHOR id="NMSettingIP6ConfigPrivacy" href="libnm/NMSettingIP6Config.html#NMSettingIP6ConfigPrivacy">
+<ANCHOR id="NMSettingIP6Config.object-hierarchy" href="libnm/NMSettingIP6Config.html#NMSettingIP6Config.object-hierarchy">
+<ANCHOR id="NMSettingIP6Config.properties" href="libnm/NMSettingIP6Config.html#NMSettingIP6Config.properties">
+<ANCHOR id="NMSettingIP6Config.description" href="libnm/NMSettingIP6Config.html#NMSettingIP6Config.description">
+<ANCHOR id="NMSettingIP6Config.details" href="libnm/NMSettingIP6Config.html#NMSettingIP6Config.details">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-SETTING-NAME:CAPS" href="libnm/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-SETTING-NAME:CAPS">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-IP6-PRIVACY:CAPS" href="libnm/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-IP6-PRIVACY:CAPS">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-METHOD-IGNORE:CAPS" href="libnm/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD-IGNORE:CAPS">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-METHOD-AUTO:CAPS" href="libnm/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD-AUTO:CAPS">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-METHOD-DHCP:CAPS" href="libnm/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD-DHCP:CAPS">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-METHOD-LINK-LOCAL:CAPS" href="libnm/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD-LINK-LOCAL:CAPS">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-METHOD-MANUAL:CAPS" href="libnm/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD-MANUAL:CAPS">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-METHOD-SHARED:CAPS" href="libnm/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD-SHARED:CAPS">
+<ANCHOR id="NMSettingIP6ConfigPrivacy-enum" href="libnm/NMSettingIP6Config.html#NMSettingIP6ConfigPrivacy-enum">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-PRIVACY-UNKNOWN:CAPS" href="libnm/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-PRIVACY-UNKNOWN:CAPS">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-PRIVACY-DISABLED:CAPS" href="libnm/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-PRIVACY-DISABLED:CAPS">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-PRIVACY-PREFER-PUBLIC-ADDR:CAPS" href="libnm/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-PRIVACY-PREFER-PUBLIC-ADDR:CAPS">
+<ANCHOR id="NM-SETTING-IP6-CONFIG-PRIVACY-PREFER-TEMP-ADDR:CAPS" href="libnm/NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-PRIVACY-PREFER-TEMP-ADDR:CAPS">
+<ANCHOR id="NMSettingIP6Config-struct" href="libnm/NMSettingIP6Config.html#NMSettingIP6Config-struct">
+<ANCHOR id="NMSettingIP6ConfigClass" href="libnm/NMSettingIP6Config.html#NMSettingIP6ConfigClass">
+<ANCHOR id="nm-setting-ip6-config-new" href="libnm/NMSettingIP6Config.html#nm-setting-ip6-config-new">
+<ANCHOR id="nm-setting-ip6-config-get-ip6-privacy" href="libnm/NMSettingIP6Config.html#nm-setting-ip6-config-get-ip6-privacy">
+<ANCHOR id="NMSettingIP6Config.property-details" href="libnm/NMSettingIP6Config.html#NMSettingIP6Config.property-details">
+<ANCHOR id="NMSettingIP6Config--ip6-privacy" href="libnm/NMSettingIP6Config.html#NMSettingIP6Config--ip6-privacy">
+<ANCHOR id="NMSettingOlpcMesh" href="libnm/NMSettingOlpcMesh.html">
+<ANCHOR id="NMSettingOlpcMesh.synopsis" href="libnm/NMSettingOlpcMesh.html#NMSettingOlpcMesh.synopsis">
+<ANCHOR id="NMSettingOlpcMesh.object-hierarchy" href="libnm/NMSettingOlpcMesh.html#NMSettingOlpcMesh.object-hierarchy">
+<ANCHOR id="NMSettingOlpcMesh.properties" href="libnm/NMSettingOlpcMesh.html#NMSettingOlpcMesh.properties">
+<ANCHOR id="NMSettingOlpcMesh.description" href="libnm/NMSettingOlpcMesh.html#NMSettingOlpcMesh.description">
+<ANCHOR id="NMSettingOlpcMesh.details" href="libnm/NMSettingOlpcMesh.html#NMSettingOlpcMesh.details">
+<ANCHOR id="NM-SETTING-OLPC-MESH-SETTING-NAME:CAPS" href="libnm/NMSettingOlpcMesh.html#NM-SETTING-OLPC-MESH-SETTING-NAME:CAPS">
+<ANCHOR id="NM-SETTING-OLPC-MESH-SSID:CAPS" href="libnm/NMSettingOlpcMesh.html#NM-SETTING-OLPC-MESH-SSID:CAPS">
+<ANCHOR id="NM-SETTING-OLPC-MESH-CHANNEL:CAPS" href="libnm/NMSettingOlpcMesh.html#NM-SETTING-OLPC-MESH-CHANNEL:CAPS">
+<ANCHOR id="NM-SETTING-OLPC-MESH-DHCP-ANYCAST-ADDRESS:CAPS" href="libnm/NMSettingOlpcMesh.html#NM-SETTING-OLPC-MESH-DHCP-ANYCAST-ADDRESS:CAPS">
+<ANCHOR id="NMSettingOlpcMesh-struct" href="libnm/NMSettingOlpcMesh.html#NMSettingOlpcMesh-struct">
+<ANCHOR id="NMSettingOlpcMeshClass" href="libnm/NMSettingOlpcMesh.html#NMSettingOlpcMeshClass">
+<ANCHOR id="nm-setting-olpc-mesh-new" href="libnm/NMSettingOlpcMesh.html#nm-setting-olpc-mesh-new">
+<ANCHOR id="nm-setting-olpc-mesh-get-ssid" href="libnm/NMSettingOlpcMesh.html#nm-setting-olpc-mesh-get-ssid">
+<ANCHOR id="nm-setting-olpc-mesh-get-channel" href="libnm/NMSettingOlpcMesh.html#nm-setting-olpc-mesh-get-channel">
+<ANCHOR id="nm-setting-olpc-mesh-get-dhcp-anycast-address" href="libnm/NMSettingOlpcMesh.html#nm-setting-olpc-mesh-get-dhcp-anycast-address">
+<ANCHOR id="NMSettingOlpcMesh.property-details" href="libnm/NMSettingOlpcMesh.html#NMSettingOlpcMesh.property-details">
+<ANCHOR id="NMSettingOlpcMesh--channel" href="libnm/NMSettingOlpcMesh.html#NMSettingOlpcMesh--channel">
+<ANCHOR id="NMSettingOlpcMesh--dhcp-anycast-address" href="libnm/NMSettingOlpcMesh.html#NMSettingOlpcMesh--dhcp-anycast-address">
+<ANCHOR id="NMSettingOlpcMesh--ssid" href="libnm/NMSettingOlpcMesh.html#NMSettingOlpcMesh--ssid">
+<ANCHOR id="NMSettingPpp" href="libnm/NMSettingPpp.html">
+<ANCHOR id="NMSettingPpp.synopsis" href="libnm/NMSettingPpp.html#NMSettingPpp.synopsis">
+<ANCHOR id="NMSettingPpp.object-hierarchy" href="libnm/NMSettingPpp.html#NMSettingPpp.object-hierarchy">
+<ANCHOR id="NMSettingPpp.properties" href="libnm/NMSettingPpp.html#NMSettingPpp.properties">
+<ANCHOR id="NMSettingPpp.description" href="libnm/NMSettingPpp.html#NMSettingPpp.description">
+<ANCHOR id="NMSettingPpp.details" href="libnm/NMSettingPpp.html#NMSettingPpp.details">
+<ANCHOR id="NM-SETTING-PPP-SETTING-NAME:CAPS" href="libnm/NMSettingPpp.html#NM-SETTING-PPP-SETTING-NAME:CAPS">
+<ANCHOR id="NM-SETTING-PPP-NOAUTH:CAPS" href="libnm/NMSettingPpp.html#NM-SETTING-PPP-NOAUTH:CAPS">
+<ANCHOR id="NM-SETTING-PPP-REFUSE-EAP:CAPS" href="libnm/NMSettingPpp.html#NM-SETTING-PPP-REFUSE-EAP:CAPS">
+<ANCHOR id="NM-SETTING-PPP-REFUSE-PAP:CAPS" href="libnm/NMSettingPpp.html#NM-SETTING-PPP-REFUSE-PAP:CAPS">
+<ANCHOR id="NM-SETTING-PPP-REFUSE-CHAP:CAPS" href="libnm/NMSettingPpp.html#NM-SETTING-PPP-REFUSE-CHAP:CAPS">
+<ANCHOR id="NM-SETTING-PPP-REFUSE-MSCHAP:CAPS" href="libnm/NMSettingPpp.html#NM-SETTING-PPP-REFUSE-MSCHAP:CAPS">
+<ANCHOR id="NM-SETTING-PPP-REFUSE-MSCHAPV2:CAPS" href="libnm/NMSettingPpp.html#NM-SETTING-PPP-REFUSE-MSCHAPV2:CAPS">
+<ANCHOR id="NM-SETTING-PPP-NOBSDCOMP:CAPS" href="libnm/NMSettingPpp.html#NM-SETTING-PPP-NOBSDCOMP:CAPS">
+<ANCHOR id="NM-SETTING-PPP-NODEFLATE:CAPS" href="libnm/NMSettingPpp.html#NM-SETTING-PPP-NODEFLATE:CAPS">
+<ANCHOR id="NM-SETTING-PPP-NO-VJ-COMP:CAPS" href="libnm/NMSettingPpp.html#NM-SETTING-PPP-NO-VJ-COMP:CAPS">
+<ANCHOR id="NM-SETTING-PPP-REQUIRE-MPPE:CAPS" href="libnm/NMSettingPpp.html#NM-SETTING-PPP-REQUIRE-MPPE:CAPS">
+<ANCHOR id="NM-SETTING-PPP-REQUIRE-MPPE-128:CAPS" href="libnm/NMSettingPpp.html#NM-SETTING-PPP-REQUIRE-MPPE-128:CAPS">
+<ANCHOR id="NM-SETTING-PPP-MPPE-STATEFUL:CAPS" href="libnm/NMSettingPpp.html#NM-SETTING-PPP-MPPE-STATEFUL:CAPS">
+<ANCHOR id="NM-SETTING-PPP-CRTSCTS:CAPS" href="libnm/NMSettingPpp.html#NM-SETTING-PPP-CRTSCTS:CAPS">
+<ANCHOR id="NM-SETTING-PPP-BAUD:CAPS" href="libnm/NMSettingPpp.html#NM-SETTING-PPP-BAUD:CAPS">
+<ANCHOR id="NM-SETTING-PPP-MRU:CAPS" href="libnm/NMSettingPpp.html#NM-SETTING-PPP-MRU:CAPS">
+<ANCHOR id="NM-SETTING-PPP-MTU:CAPS" href="libnm/NMSettingPpp.html#NM-SETTING-PPP-MTU:CAPS">
+<ANCHOR id="NM-SETTING-PPP-LCP-ECHO-FAILURE:CAPS" href="libnm/NMSettingPpp.html#NM-SETTING-PPP-LCP-ECHO-FAILURE:CAPS">
+<ANCHOR id="NM-SETTING-PPP-LCP-ECHO-INTERVAL:CAPS" href="libnm/NMSettingPpp.html#NM-SETTING-PPP-LCP-ECHO-INTERVAL:CAPS">
+<ANCHOR id="NMSettingPpp-struct" href="libnm/NMSettingPpp.html#NMSettingPpp-struct">
+<ANCHOR id="NMSettingPppClass" href="libnm/NMSettingPpp.html#NMSettingPppClass">
+<ANCHOR id="nm-setting-ppp-new" href="libnm/NMSettingPpp.html#nm-setting-ppp-new">
+<ANCHOR id="nm-setting-ppp-get-noauth" href="libnm/NMSettingPpp.html#nm-setting-ppp-get-noauth">
+<ANCHOR id="nm-setting-ppp-get-refuse-eap" href="libnm/NMSettingPpp.html#nm-setting-ppp-get-refuse-eap">
+<ANCHOR id="nm-setting-ppp-get-refuse-pap" href="libnm/NMSettingPpp.html#nm-setting-ppp-get-refuse-pap">
+<ANCHOR id="nm-setting-ppp-get-refuse-chap" href="libnm/NMSettingPpp.html#nm-setting-ppp-get-refuse-chap">
+<ANCHOR id="nm-setting-ppp-get-refuse-mschap" href="libnm/NMSettingPpp.html#nm-setting-ppp-get-refuse-mschap">
+<ANCHOR id="nm-setting-ppp-get-refuse-mschapv2" href="libnm/NMSettingPpp.html#nm-setting-ppp-get-refuse-mschapv2">
+<ANCHOR id="nm-setting-ppp-get-nobsdcomp" href="libnm/NMSettingPpp.html#nm-setting-ppp-get-nobsdcomp">
+<ANCHOR id="nm-setting-ppp-get-nodeflate" href="libnm/NMSettingPpp.html#nm-setting-ppp-get-nodeflate">
+<ANCHOR id="nm-setting-ppp-get-no-vj-comp" href="libnm/NMSettingPpp.html#nm-setting-ppp-get-no-vj-comp">
+<ANCHOR id="nm-setting-ppp-get-require-mppe" href="libnm/NMSettingPpp.html#nm-setting-ppp-get-require-mppe">
+<ANCHOR id="nm-setting-ppp-get-require-mppe-128" href="libnm/NMSettingPpp.html#nm-setting-ppp-get-require-mppe-128">
+<ANCHOR id="nm-setting-ppp-get-mppe-stateful" href="libnm/NMSettingPpp.html#nm-setting-ppp-get-mppe-stateful">
+<ANCHOR id="nm-setting-ppp-get-crtscts" href="libnm/NMSettingPpp.html#nm-setting-ppp-get-crtscts">
+<ANCHOR id="nm-setting-ppp-get-baud" href="libnm/NMSettingPpp.html#nm-setting-ppp-get-baud">
+<ANCHOR id="nm-setting-ppp-get-mru" href="libnm/NMSettingPpp.html#nm-setting-ppp-get-mru">
+<ANCHOR id="nm-setting-ppp-get-mtu" href="libnm/NMSettingPpp.html#nm-setting-ppp-get-mtu">
+<ANCHOR id="nm-setting-ppp-get-lcp-echo-failure" href="libnm/NMSettingPpp.html#nm-setting-ppp-get-lcp-echo-failure">
+<ANCHOR id="nm-setting-ppp-get-lcp-echo-interval" href="libnm/NMSettingPpp.html#nm-setting-ppp-get-lcp-echo-interval">
+<ANCHOR id="NMSettingPpp.property-details" href="libnm/NMSettingPpp.html#NMSettingPpp.property-details">
+<ANCHOR id="NMSettingPpp--baud" href="libnm/NMSettingPpp.html#NMSettingPpp--baud">
+<ANCHOR id="NMSettingPpp--crtscts" href="libnm/NMSettingPpp.html#NMSettingPpp--crtscts">
+<ANCHOR id="NMSettingPpp--lcp-echo-failure" href="libnm/NMSettingPpp.html#NMSettingPpp--lcp-echo-failure">
+<ANCHOR id="NMSettingPpp--lcp-echo-interval" href="libnm/NMSettingPpp.html#NMSettingPpp--lcp-echo-interval">
+<ANCHOR id="NMSettingPpp--mppe-stateful" href="libnm/NMSettingPpp.html#NMSettingPpp--mppe-stateful">
+<ANCHOR id="NMSettingPpp--mru" href="libnm/NMSettingPpp.html#NMSettingPpp--mru">
+<ANCHOR id="NMSettingPpp--mtu" href="libnm/NMSettingPpp.html#NMSettingPpp--mtu">
+<ANCHOR id="NMSettingPpp--no-vj-comp" href="libnm/NMSettingPpp.html#NMSettingPpp--no-vj-comp">
+<ANCHOR id="NMSettingPpp--noauth" href="libnm/NMSettingPpp.html#NMSettingPpp--noauth">
+<ANCHOR id="NMSettingPpp--nobsdcomp" href="libnm/NMSettingPpp.html#NMSettingPpp--nobsdcomp">
+<ANCHOR id="NMSettingPpp--nodeflate" href="libnm/NMSettingPpp.html#NMSettingPpp--nodeflate">
+<ANCHOR id="NMSettingPpp--refuse-chap" href="libnm/NMSettingPpp.html#NMSettingPpp--refuse-chap">
+<ANCHOR id="NMSettingPpp--refuse-eap" href="libnm/NMSettingPpp.html#NMSettingPpp--refuse-eap">
+<ANCHOR id="NMSettingPpp--refuse-mschap" href="libnm/NMSettingPpp.html#NMSettingPpp--refuse-mschap">
+<ANCHOR id="NMSettingPpp--refuse-mschapv2" href="libnm/NMSettingPpp.html#NMSettingPpp--refuse-mschapv2">
+<ANCHOR id="NMSettingPpp--refuse-pap" href="libnm/NMSettingPpp.html#NMSettingPpp--refuse-pap">
+<ANCHOR id="NMSettingPpp--require-mppe" href="libnm/NMSettingPpp.html#NMSettingPpp--require-mppe">
+<ANCHOR id="NMSettingPpp--require-mppe-128" href="libnm/NMSettingPpp.html#NMSettingPpp--require-mppe-128">
+<ANCHOR id="NMSettingPppoe" href="libnm/NMSettingPppoe.html">
+<ANCHOR id="NMSettingPppoe.synopsis" href="libnm/NMSettingPppoe.html#NMSettingPppoe.synopsis">
+<ANCHOR id="NMSettingPppoe.object-hierarchy" href="libnm/NMSettingPppoe.html#NMSettingPppoe.object-hierarchy">
+<ANCHOR id="NMSettingPppoe.properties" href="libnm/NMSettingPppoe.html#NMSettingPppoe.properties">
+<ANCHOR id="NMSettingPppoe.description" href="libnm/NMSettingPppoe.html#NMSettingPppoe.description">
+<ANCHOR id="NMSettingPppoe.details" href="libnm/NMSettingPppoe.html#NMSettingPppoe.details">
+<ANCHOR id="NM-SETTING-PPPOE-SETTING-NAME:CAPS" href="libnm/NMSettingPppoe.html#NM-SETTING-PPPOE-SETTING-NAME:CAPS">
+<ANCHOR id="NM-SETTING-PPPOE-SERVICE:CAPS" href="libnm/NMSettingPppoe.html#NM-SETTING-PPPOE-SERVICE:CAPS">
+<ANCHOR id="NM-SETTING-PPPOE-USERNAME:CAPS" href="libnm/NMSettingPppoe.html#NM-SETTING-PPPOE-USERNAME:CAPS">
+<ANCHOR id="NM-SETTING-PPPOE-PASSWORD:CAPS" href="libnm/NMSettingPppoe.html#NM-SETTING-PPPOE-PASSWORD:CAPS">
+<ANCHOR id="NM-SETTING-PPPOE-PASSWORD-FLAGS:CAPS" href="libnm/NMSettingPppoe.html#NM-SETTING-PPPOE-PASSWORD-FLAGS:CAPS">
+<ANCHOR id="NMSettingPppoe-struct" href="libnm/NMSettingPppoe.html#NMSettingPppoe-struct">
+<ANCHOR id="NMSettingPppoeClass" href="libnm/NMSettingPppoe.html#NMSettingPppoeClass">
+<ANCHOR id="nm-setting-pppoe-new" href="libnm/NMSettingPppoe.html#nm-setting-pppoe-new">
+<ANCHOR id="nm-setting-pppoe-get-service" href="libnm/NMSettingPppoe.html#nm-setting-pppoe-get-service">
+<ANCHOR id="nm-setting-pppoe-get-username" href="libnm/NMSettingPppoe.html#nm-setting-pppoe-get-username">
+<ANCHOR id="nm-setting-pppoe-get-password" href="libnm/NMSettingPppoe.html#nm-setting-pppoe-get-password">
+<ANCHOR id="nm-setting-pppoe-get-password-flags" href="libnm/NMSettingPppoe.html#nm-setting-pppoe-get-password-flags">
+<ANCHOR id="NMSettingPppoe.property-details" href="libnm/NMSettingPppoe.html#NMSettingPppoe.property-details">
+<ANCHOR id="NMSettingPppoe--password" href="libnm/NMSettingPppoe.html#NMSettingPppoe--password">
+<ANCHOR id="NMSettingPppoe--password-flags" href="libnm/NMSettingPppoe.html#NMSettingPppoe--password-flags">
+<ANCHOR id="NMSettingPppoe--service" href="libnm/NMSettingPppoe.html#NMSettingPppoe--service">
+<ANCHOR id="NMSettingPppoe--username" href="libnm/NMSettingPppoe.html#NMSettingPppoe--username">
+<ANCHOR id="NMSettingSerial" href="libnm/NMSettingSerial.html">
+<ANCHOR id="NMSettingSerial.synopsis" href="libnm/NMSettingSerial.html#NMSettingSerial.synopsis">
+<ANCHOR id="NMSettingSerialParity" href="libnm/NMSettingSerial.html#NMSettingSerialParity">
+<ANCHOR id="NMSettingSerial.object-hierarchy" href="libnm/NMSettingSerial.html#NMSettingSerial.object-hierarchy">
+<ANCHOR id="NMSettingSerial.properties" href="libnm/NMSettingSerial.html#NMSettingSerial.properties">
+<ANCHOR id="NMSettingSerial.description" href="libnm/NMSettingSerial.html#NMSettingSerial.description">
+<ANCHOR id="NMSettingSerial.details" href="libnm/NMSettingSerial.html#NMSettingSerial.details">
+<ANCHOR id="NM-SETTING-SERIAL-SETTING-NAME:CAPS" href="libnm/NMSettingSerial.html#NM-SETTING-SERIAL-SETTING-NAME:CAPS">
+<ANCHOR id="NMSettingSerialParity-enum" href="libnm/NMSettingSerial.html#NMSettingSerialParity-enum">
+<ANCHOR id="NM-SETTING-SERIAL-PARITY-NONE:CAPS" href="libnm/NMSettingSerial.html#NM-SETTING-SERIAL-PARITY-NONE:CAPS">
+<ANCHOR id="NM-SETTING-SERIAL-PARITY-EVEN:CAPS" href="libnm/NMSettingSerial.html#NM-SETTING-SERIAL-PARITY-EVEN:CAPS">
+<ANCHOR id="NM-SETTING-SERIAL-PARITY-ODD:CAPS" href="libnm/NMSettingSerial.html#NM-SETTING-SERIAL-PARITY-ODD:CAPS">
+<ANCHOR id="NM-SETTING-SERIAL-BAUD:CAPS" href="libnm/NMSettingSerial.html#NM-SETTING-SERIAL-BAUD:CAPS">
+<ANCHOR id="NM-SETTING-SERIAL-BITS:CAPS" href="libnm/NMSettingSerial.html#NM-SETTING-SERIAL-BITS:CAPS">
+<ANCHOR id="NM-SETTING-SERIAL-PARITY:CAPS" href="libnm/NMSettingSerial.html#NM-SETTING-SERIAL-PARITY:CAPS">
+<ANCHOR id="NM-SETTING-SERIAL-STOPBITS:CAPS" href="libnm/NMSettingSerial.html#NM-SETTING-SERIAL-STOPBITS:CAPS">
+<ANCHOR id="NM-SETTING-SERIAL-SEND-DELAY:CAPS" href="libnm/NMSettingSerial.html#NM-SETTING-SERIAL-SEND-DELAY:CAPS">
+<ANCHOR id="NMSettingSerial-struct" href="libnm/NMSettingSerial.html#NMSettingSerial-struct">
+<ANCHOR id="NMSettingSerialClass" href="libnm/NMSettingSerial.html#NMSettingSerialClass">
+<ANCHOR id="nm-setting-serial-new" href="libnm/NMSettingSerial.html#nm-setting-serial-new">
+<ANCHOR id="nm-setting-serial-get-baud" href="libnm/NMSettingSerial.html#nm-setting-serial-get-baud">
+<ANCHOR id="nm-setting-serial-get-bits" href="libnm/NMSettingSerial.html#nm-setting-serial-get-bits">
+<ANCHOR id="nm-setting-serial-get-parity" href="libnm/NMSettingSerial.html#nm-setting-serial-get-parity">
+<ANCHOR id="nm-setting-serial-get-stopbits" href="libnm/NMSettingSerial.html#nm-setting-serial-get-stopbits">
+<ANCHOR id="nm-setting-serial-get-send-delay" href="libnm/NMSettingSerial.html#nm-setting-serial-get-send-delay">
+<ANCHOR id="NMSettingSerial.property-details" href="libnm/NMSettingSerial.html#NMSettingSerial.property-details">
+<ANCHOR id="NMSettingSerial--baud" href="libnm/NMSettingSerial.html#NMSettingSerial--baud">
+<ANCHOR id="NMSettingSerial--bits" href="libnm/NMSettingSerial.html#NMSettingSerial--bits">
+<ANCHOR id="NMSettingSerial--parity" href="libnm/NMSettingSerial.html#NMSettingSerial--parity">
+<ANCHOR id="NMSettingSerial--send-delay" href="libnm/NMSettingSerial.html#NMSettingSerial--send-delay">
+<ANCHOR id="NMSettingSerial--stopbits" href="libnm/NMSettingSerial.html#NMSettingSerial--stopbits">
+<ANCHOR id="NMSettingTeam" href="libnm/NMSettingTeam.html">
+<ANCHOR id="NMSettingTeam.synopsis" href="libnm/NMSettingTeam.html#NMSettingTeam.synopsis">
+<ANCHOR id="NMSettingTeam.object-hierarchy" href="libnm/NMSettingTeam.html#NMSettingTeam.object-hierarchy">
+<ANCHOR id="NMSettingTeam.properties" href="libnm/NMSettingTeam.html#NMSettingTeam.properties">
+<ANCHOR id="NMSettingTeam.description" href="libnm/NMSettingTeam.html#NMSettingTeam.description">
+<ANCHOR id="NMSettingTeam.details" href="libnm/NMSettingTeam.html#NMSettingTeam.details">
+<ANCHOR id="NM-SETTING-TEAM-SETTING-NAME:CAPS" href="libnm/NMSettingTeam.html#NM-SETTING-TEAM-SETTING-NAME:CAPS">
+<ANCHOR id="NM-SETTING-TEAM-CONFIG:CAPS" href="libnm/NMSettingTeam.html#NM-SETTING-TEAM-CONFIG:CAPS">
+<ANCHOR id="NMSettingTeam-struct" href="libnm/NMSettingTeam.html#NMSettingTeam-struct">
+<ANCHOR id="NMSettingTeamClass" href="libnm/NMSettingTeam.html#NMSettingTeamClass">
+<ANCHOR id="nm-setting-team-new" href="libnm/NMSettingTeam.html#nm-setting-team-new">
+<ANCHOR id="nm-setting-team-get-config" href="libnm/NMSettingTeam.html#nm-setting-team-get-config">
+<ANCHOR id="NMSettingTeam.property-details" href="libnm/NMSettingTeam.html#NMSettingTeam.property-details">
+<ANCHOR id="NMSettingTeam--config" href="libnm/NMSettingTeam.html#NMSettingTeam--config">
+<ANCHOR id="NMSettingTeamPort" href="libnm/NMSettingTeamPort.html">
+<ANCHOR id="NMSettingTeamPort.synopsis" href="libnm/NMSettingTeamPort.html#NMSettingTeamPort.synopsis">
+<ANCHOR id="NMSettingTeamPort.object-hierarchy" href="libnm/NMSettingTeamPort.html#NMSettingTeamPort.object-hierarchy">
+<ANCHOR id="NMSettingTeamPort.properties" href="libnm/NMSettingTeamPort.html#NMSettingTeamPort.properties">
+<ANCHOR id="NMSettingTeamPort.description" href="libnm/NMSettingTeamPort.html#NMSettingTeamPort.description">
+<ANCHOR id="NMSettingTeamPort.details" href="libnm/NMSettingTeamPort.html#NMSettingTeamPort.details">
+<ANCHOR id="NM-SETTING-TEAM-PORT-SETTING-NAME:CAPS" href="libnm/NMSettingTeamPort.html#NM-SETTING-TEAM-PORT-SETTING-NAME:CAPS">
+<ANCHOR id="NM-SETTING-TEAM-PORT-CONFIG:CAPS" href="libnm/NMSettingTeamPort.html#NM-SETTING-TEAM-PORT-CONFIG:CAPS">
+<ANCHOR id="NMSettingTeamPort-struct" href="libnm/NMSettingTeamPort.html#NMSettingTeamPort-struct">
+<ANCHOR id="NMSettingTeamPortClass" href="libnm/NMSettingTeamPort.html#NMSettingTeamPortClass">
+<ANCHOR id="nm-setting-team-port-new" href="libnm/NMSettingTeamPort.html#nm-setting-team-port-new">
+<ANCHOR id="nm-setting-team-port-get-config" href="libnm/NMSettingTeamPort.html#nm-setting-team-port-get-config">
+<ANCHOR id="NMSettingTeamPort.property-details" href="libnm/NMSettingTeamPort.html#NMSettingTeamPort.property-details">
+<ANCHOR id="NMSettingTeamPort--config" href="libnm/NMSettingTeamPort.html#NMSettingTeamPort--config">
+<ANCHOR id="NMSettingVlan" href="libnm/NMSettingVlan.html">
+<ANCHOR id="NMSettingVlan.synopsis" href="libnm/NMSettingVlan.html#NMSettingVlan.synopsis">
+<ANCHOR id="NMVlanPriorityMap" href="libnm/NMSettingVlan.html#NMVlanPriorityMap">
+<ANCHOR id="NMVlanFlags" href="libnm/NMSettingVlan.html#NMVlanFlags">
+<ANCHOR id="NMSettingVlan.object-hierarchy" href="libnm/NMSettingVlan.html#NMSettingVlan.object-hierarchy">
+<ANCHOR id="NMSettingVlan.properties" href="libnm/NMSettingVlan.html#NMSettingVlan.properties">
+<ANCHOR id="NMSettingVlan.description" href="libnm/NMSettingVlan.html#NMSettingVlan.description">
+<ANCHOR id="NMSettingVlan.details" href="libnm/NMSettingVlan.html#NMSettingVlan.details">
+<ANCHOR id="NM-SETTING-VLAN-SETTING-NAME:CAPS" href="libnm/NMSettingVlan.html#NM-SETTING-VLAN-SETTING-NAME:CAPS">
+<ANCHOR id="NM-SETTING-VLAN-PARENT:CAPS" href="libnm/NMSettingVlan.html#NM-SETTING-VLAN-PARENT:CAPS">
+<ANCHOR id="NM-SETTING-VLAN-ID:CAPS" href="libnm/NMSettingVlan.html#NM-SETTING-VLAN-ID:CAPS">
+<ANCHOR id="NM-SETTING-VLAN-FLAGS:CAPS" href="libnm/NMSettingVlan.html#NM-SETTING-VLAN-FLAGS:CAPS">
+<ANCHOR id="NM-SETTING-VLAN-INGRESS-PRIORITY-MAP:CAPS" href="libnm/NMSettingVlan.html#NM-SETTING-VLAN-INGRESS-PRIORITY-MAP:CAPS">
+<ANCHOR id="NM-SETTING-VLAN-EGRESS-PRIORITY-MAP:CAPS" href="libnm/NMSettingVlan.html#NM-SETTING-VLAN-EGRESS-PRIORITY-MAP:CAPS">
+<ANCHOR id="NMSettingVlan-struct" href="libnm/NMSettingVlan.html#NMSettingVlan-struct">
+<ANCHOR id="NMSettingVlanClass" href="libnm/NMSettingVlan.html#NMSettingVlanClass">
+<ANCHOR id="NMVlanPriorityMap-enum" href="libnm/NMSettingVlan.html#NMVlanPriorityMap-enum">
+<ANCHOR id="NM-VLAN-INGRESS-MAP:CAPS" href="libnm/NMSettingVlan.html#NM-VLAN-INGRESS-MAP:CAPS">
+<ANCHOR id="NM-VLAN-EGRESS-MAP:CAPS" href="libnm/NMSettingVlan.html#NM-VLAN-EGRESS-MAP:CAPS">
+<ANCHOR id="NMVlanFlags-enum" href="libnm/NMSettingVlan.html#NMVlanFlags-enum">
+<ANCHOR id="NM-VLAN-FLAG-REORDER-HEADERS:CAPS" href="libnm/NMSettingVlan.html#NM-VLAN-FLAG-REORDER-HEADERS:CAPS">
+<ANCHOR id="NM-VLAN-FLAG-GVRP:CAPS" href="libnm/NMSettingVlan.html#NM-VLAN-FLAG-GVRP:CAPS">
+<ANCHOR id="NM-VLAN-FLAG-LOOSE-BINDING:CAPS" href="libnm/NMSettingVlan.html#NM-VLAN-FLAG-LOOSE-BINDING:CAPS">
+<ANCHOR id="nm-setting-vlan-new" href="libnm/NMSettingVlan.html#nm-setting-vlan-new">
+<ANCHOR id="nm-setting-vlan-get-parent" href="libnm/NMSettingVlan.html#nm-setting-vlan-get-parent">
+<ANCHOR id="nm-setting-vlan-get-id" href="libnm/NMSettingVlan.html#nm-setting-vlan-get-id">
+<ANCHOR id="nm-setting-vlan-get-flags" href="libnm/NMSettingVlan.html#nm-setting-vlan-get-flags">
+<ANCHOR id="nm-setting-vlan-get-num-priorities" href="libnm/NMSettingVlan.html#nm-setting-vlan-get-num-priorities">
+<ANCHOR id="nm-setting-vlan-get-priority" href="libnm/NMSettingVlan.html#nm-setting-vlan-get-priority">
+<ANCHOR id="nm-setting-vlan-add-priority" href="libnm/NMSettingVlan.html#nm-setting-vlan-add-priority">
+<ANCHOR id="nm-setting-vlan-remove-priority" href="libnm/NMSettingVlan.html#nm-setting-vlan-remove-priority">
+<ANCHOR id="nm-setting-vlan-remove-priority-by-value" href="libnm/NMSettingVlan.html#nm-setting-vlan-remove-priority-by-value">
+<ANCHOR id="nm-setting-vlan-remove-priority-str-by-value" href="libnm/NMSettingVlan.html#nm-setting-vlan-remove-priority-str-by-value">
+<ANCHOR id="nm-setting-vlan-clear-priorities" href="libnm/NMSettingVlan.html#nm-setting-vlan-clear-priorities">
+<ANCHOR id="nm-setting-vlan-add-priority-str" href="libnm/NMSettingVlan.html#nm-setting-vlan-add-priority-str">
+<ANCHOR id="NMSettingVlan.property-details" href="libnm/NMSettingVlan.html#NMSettingVlan.property-details">
+<ANCHOR id="NMSettingVlan--egress-priority-map" href="libnm/NMSettingVlan.html#NMSettingVlan--egress-priority-map">
+<ANCHOR id="NMSettingVlan--flags" href="libnm/NMSettingVlan.html#NMSettingVlan--flags">
+<ANCHOR id="NMSettingVlan--id" href="libnm/NMSettingVlan.html#NMSettingVlan--id">
+<ANCHOR id="NMSettingVlan--ingress-priority-map" href="libnm/NMSettingVlan.html#NMSettingVlan--ingress-priority-map">
+<ANCHOR id="NMSettingVlan--parent" href="libnm/NMSettingVlan.html#NMSettingVlan--parent">
+<ANCHOR id="NMSettingVpn" href="libnm/NMSettingVpn.html">
+<ANCHOR id="NMSettingVpn.synopsis" href="libnm/NMSettingVpn.html#NMSettingVpn.synopsis">
+<ANCHOR id="NMSettingVpn.object-hierarchy" href="libnm/NMSettingVpn.html#NMSettingVpn.object-hierarchy">
+<ANCHOR id="NMSettingVpn.properties" href="libnm/NMSettingVpn.html#NMSettingVpn.properties">
+<ANCHOR id="NMSettingVpn.description" href="libnm/NMSettingVpn.html#NMSettingVpn.description">
+<ANCHOR id="NMSettingVpn.details" href="libnm/NMSettingVpn.html#NMSettingVpn.details">
+<ANCHOR id="NM-SETTING-VPN-SETTING-NAME:CAPS" href="libnm/NMSettingVpn.html#NM-SETTING-VPN-SETTING-NAME:CAPS">
+<ANCHOR id="NM-SETTING-VPN-SERVICE-TYPE:CAPS" href="libnm/NMSettingVpn.html#NM-SETTING-VPN-SERVICE-TYPE:CAPS">
+<ANCHOR id="NM-SETTING-VPN-USER-NAME:CAPS" href="libnm/NMSettingVpn.html#NM-SETTING-VPN-USER-NAME:CAPS">
+<ANCHOR id="NM-SETTING-VPN-PERSISTENT:CAPS" href="libnm/NMSettingVpn.html#NM-SETTING-VPN-PERSISTENT:CAPS">
+<ANCHOR id="NM-SETTING-VPN-DATA:CAPS" href="libnm/NMSettingVpn.html#NM-SETTING-VPN-DATA:CAPS">
+<ANCHOR id="NM-SETTING-VPN-SECRETS:CAPS" href="libnm/NMSettingVpn.html#NM-SETTING-VPN-SECRETS:CAPS">
+<ANCHOR id="NMSettingVpn-struct" href="libnm/NMSettingVpn.html#NMSettingVpn-struct">
+<ANCHOR id="NMSettingVpnClass" href="libnm/NMSettingVpn.html#NMSettingVpnClass">
+<ANCHOR id="NMVpnIterFunc" href="libnm/NMSettingVpn.html#NMVpnIterFunc">
+<ANCHOR id="nm-setting-vpn-new" href="libnm/NMSettingVpn.html#nm-setting-vpn-new">
+<ANCHOR id="nm-setting-vpn-get-service-type" href="libnm/NMSettingVpn.html#nm-setting-vpn-get-service-type">
+<ANCHOR id="nm-setting-vpn-get-user-name" href="libnm/NMSettingVpn.html#nm-setting-vpn-get-user-name">
+<ANCHOR id="nm-setting-vpn-get-persistent" href="libnm/NMSettingVpn.html#nm-setting-vpn-get-persistent">
+<ANCHOR id="nm-setting-vpn-get-num-data-items" href="libnm/NMSettingVpn.html#nm-setting-vpn-get-num-data-items">
+<ANCHOR id="nm-setting-vpn-add-data-item" href="libnm/NMSettingVpn.html#nm-setting-vpn-add-data-item">
+<ANCHOR id="nm-setting-vpn-get-data-item" href="libnm/NMSettingVpn.html#nm-setting-vpn-get-data-item">
+<ANCHOR id="nm-setting-vpn-remove-data-item" href="libnm/NMSettingVpn.html#nm-setting-vpn-remove-data-item">
+<ANCHOR id="nm-setting-vpn-foreach-data-item" href="libnm/NMSettingVpn.html#nm-setting-vpn-foreach-data-item">
+<ANCHOR id="nm-setting-vpn-get-num-secrets" href="libnm/NMSettingVpn.html#nm-setting-vpn-get-num-secrets">
+<ANCHOR id="nm-setting-vpn-add-secret" href="libnm/NMSettingVpn.html#nm-setting-vpn-add-secret">
+<ANCHOR id="nm-setting-vpn-get-secret" href="libnm/NMSettingVpn.html#nm-setting-vpn-get-secret">
+<ANCHOR id="nm-setting-vpn-remove-secret" href="libnm/NMSettingVpn.html#nm-setting-vpn-remove-secret">
+<ANCHOR id="nm-setting-vpn-foreach-secret" href="libnm/NMSettingVpn.html#nm-setting-vpn-foreach-secret">
+<ANCHOR id="NMSettingVpn.property-details" href="libnm/NMSettingVpn.html#NMSettingVpn.property-details">
+<ANCHOR id="NMSettingVpn--data" href="libnm/NMSettingVpn.html#NMSettingVpn--data">
+<ANCHOR id="NMSettingVpn--persistent" href="libnm/NMSettingVpn.html#NMSettingVpn--persistent">
+<ANCHOR id="NMSettingVpn--secrets" href="libnm/NMSettingVpn.html#NMSettingVpn--secrets">
+<ANCHOR id="NMSettingVpn--service-type" href="libnm/NMSettingVpn.html#NMSettingVpn--service-type">
+<ANCHOR id="NMSettingVpn--user-name" href="libnm/NMSettingVpn.html#NMSettingVpn--user-name">
+<ANCHOR id="NMSettingWimax" href="libnm/NMSettingWimax.html">
+<ANCHOR id="NMSettingWimax.synopsis" href="libnm/NMSettingWimax.html#NMSettingWimax.synopsis">
+<ANCHOR id="NMSettingWimax.object-hierarchy" href="libnm/NMSettingWimax.html#NMSettingWimax.object-hierarchy">
+<ANCHOR id="NMSettingWimax.properties" href="libnm/NMSettingWimax.html#NMSettingWimax.properties">
+<ANCHOR id="NMSettingWimax.description" href="libnm/NMSettingWimax.html#NMSettingWimax.description">
+<ANCHOR id="NMSettingWimax.details" href="libnm/NMSettingWimax.html#NMSettingWimax.details">
+<ANCHOR id="NM-SETTING-WIMAX-SETTING-NAME:CAPS" href="libnm/NMSettingWimax.html#NM-SETTING-WIMAX-SETTING-NAME:CAPS">
+<ANCHOR id="NM-SETTING-WIMAX-NETWORK-NAME:CAPS" href="libnm/NMSettingWimax.html#NM-SETTING-WIMAX-NETWORK-NAME:CAPS">
+<ANCHOR id="NM-SETTING-WIMAX-MAC-ADDRESS:CAPS" href="libnm/NMSettingWimax.html#NM-SETTING-WIMAX-MAC-ADDRESS:CAPS">
+<ANCHOR id="NMSettingWimax-struct" href="libnm/NMSettingWimax.html#NMSettingWimax-struct">
+<ANCHOR id="NMSettingWimaxClass" href="libnm/NMSettingWimax.html#NMSettingWimaxClass">
+<ANCHOR id="nm-setting-wimax-new" href="libnm/NMSettingWimax.html#nm-setting-wimax-new">
+<ANCHOR id="nm-setting-wimax-get-network-name" href="libnm/NMSettingWimax.html#nm-setting-wimax-get-network-name">
+<ANCHOR id="nm-setting-wimax-get-mac-address" href="libnm/NMSettingWimax.html#nm-setting-wimax-get-mac-address">
+<ANCHOR id="NMSettingWimax.property-details" href="libnm/NMSettingWimax.html#NMSettingWimax.property-details">
+<ANCHOR id="NMSettingWimax--mac-address" href="libnm/NMSettingWimax.html#NMSettingWimax--mac-address">
+<ANCHOR id="NMSettingWimax--network-name" href="libnm/NMSettingWimax.html#NMSettingWimax--network-name">
+<ANCHOR id="NMSettingWired" href="libnm/NMSettingWired.html">
+<ANCHOR id="NMSettingWired.synopsis" href="libnm/NMSettingWired.html#NMSettingWired.synopsis">
+<ANCHOR id="NMSettingWired.object-hierarchy" href="libnm/NMSettingWired.html#NMSettingWired.object-hierarchy">
+<ANCHOR id="NMSettingWired.properties" href="libnm/NMSettingWired.html#NMSettingWired.properties">
+<ANCHOR id="NMSettingWired.description" href="libnm/NMSettingWired.html#NMSettingWired.description">
+<ANCHOR id="NMSettingWired.details" href="libnm/NMSettingWired.html#NMSettingWired.details">
+<ANCHOR id="NM-SETTING-WIRED-SETTING-NAME:CAPS" href="libnm/NMSettingWired.html#NM-SETTING-WIRED-SETTING-NAME:CAPS">
+<ANCHOR id="NM-SETTING-WIRED-PORT:CAPS" href="libnm/NMSettingWired.html#NM-SETTING-WIRED-PORT:CAPS">
+<ANCHOR id="NM-SETTING-WIRED-SPEED:CAPS" href="libnm/NMSettingWired.html#NM-SETTING-WIRED-SPEED:CAPS">
+<ANCHOR id="NM-SETTING-WIRED-DUPLEX:CAPS" href="libnm/NMSettingWired.html#NM-SETTING-WIRED-DUPLEX:CAPS">
+<ANCHOR id="NM-SETTING-WIRED-AUTO-NEGOTIATE:CAPS" href="libnm/NMSettingWired.html#NM-SETTING-WIRED-AUTO-NEGOTIATE:CAPS">
+<ANCHOR id="NM-SETTING-WIRED-MAC-ADDRESS:CAPS" href="libnm/NMSettingWired.html#NM-SETTING-WIRED-MAC-ADDRESS:CAPS">
+<ANCHOR id="NM-SETTING-WIRED-CLONED-MAC-ADDRESS:CAPS" href="libnm/NMSettingWired.html#NM-SETTING-WIRED-CLONED-MAC-ADDRESS:CAPS">
+<ANCHOR id="NM-SETTING-WIRED-MAC-ADDRESS-BLACKLIST:CAPS" href="libnm/NMSettingWired.html#NM-SETTING-WIRED-MAC-ADDRESS-BLACKLIST:CAPS">
+<ANCHOR id="NM-SETTING-WIRED-MTU:CAPS" href="libnm/NMSettingWired.html#NM-SETTING-WIRED-MTU:CAPS">
+<ANCHOR id="NM-SETTING-WIRED-S390-SUBCHANNELS:CAPS" href="libnm/NMSettingWired.html#NM-SETTING-WIRED-S390-SUBCHANNELS:CAPS">
+<ANCHOR id="NM-SETTING-WIRED-S390-NETTYPE:CAPS" href="libnm/NMSettingWired.html#NM-SETTING-WIRED-S390-NETTYPE:CAPS">
+<ANCHOR id="NM-SETTING-WIRED-S390-OPTIONS:CAPS" href="libnm/NMSettingWired.html#NM-SETTING-WIRED-S390-OPTIONS:CAPS">
+<ANCHOR id="NMSettingWired-struct" href="libnm/NMSettingWired.html#NMSettingWired-struct">
+<ANCHOR id="NMSettingWiredClass" href="libnm/NMSettingWired.html#NMSettingWiredClass">
+<ANCHOR id="nm-setting-wired-new" href="libnm/NMSettingWired.html#nm-setting-wired-new">
+<ANCHOR id="nm-setting-wired-get-port" href="libnm/NMSettingWired.html#nm-setting-wired-get-port">
+<ANCHOR id="nm-setting-wired-get-speed" href="libnm/NMSettingWired.html#nm-setting-wired-get-speed">
+<ANCHOR id="nm-setting-wired-get-duplex" href="libnm/NMSettingWired.html#nm-setting-wired-get-duplex">
+<ANCHOR id="nm-setting-wired-get-auto-negotiate" href="libnm/NMSettingWired.html#nm-setting-wired-get-auto-negotiate">
+<ANCHOR id="nm-setting-wired-get-mac-address" href="libnm/NMSettingWired.html#nm-setting-wired-get-mac-address">
+<ANCHOR id="nm-setting-wired-get-cloned-mac-address" href="libnm/NMSettingWired.html#nm-setting-wired-get-cloned-mac-address">
+<ANCHOR id="nm-setting-wired-get-mac-address-blacklist" href="libnm/NMSettingWired.html#nm-setting-wired-get-mac-address-blacklist">
+<ANCHOR id="nm-setting-wired-get-num-mac-blacklist-items" href="libnm/NMSettingWired.html#nm-setting-wired-get-num-mac-blacklist-items">
+<ANCHOR id="nm-setting-wired-get-mac-blacklist-item" href="libnm/NMSettingWired.html#nm-setting-wired-get-mac-blacklist-item">
+<ANCHOR id="nm-setting-wired-add-mac-blacklist-item" href="libnm/NMSettingWired.html#nm-setting-wired-add-mac-blacklist-item">
+<ANCHOR id="nm-setting-wired-remove-mac-blacklist-item" href="libnm/NMSettingWired.html#nm-setting-wired-remove-mac-blacklist-item">
+<ANCHOR id="nm-setting-wired-remove-mac-blacklist-item-by-value" href="libnm/NMSettingWired.html#nm-setting-wired-remove-mac-blacklist-item-by-value">
+<ANCHOR id="nm-setting-wired-clear-mac-blacklist-items" href="libnm/NMSettingWired.html#nm-setting-wired-clear-mac-blacklist-items">
+<ANCHOR id="nm-setting-wired-get-mtu" href="libnm/NMSettingWired.html#nm-setting-wired-get-mtu">
+<ANCHOR id="nm-setting-wired-get-s390-subchannels" href="libnm/NMSettingWired.html#nm-setting-wired-get-s390-subchannels">
+<ANCHOR id="nm-setting-wired-get-s390-nettype" href="libnm/NMSettingWired.html#nm-setting-wired-get-s390-nettype">
+<ANCHOR id="nm-setting-wired-get-num-s390-options" href="libnm/NMSettingWired.html#nm-setting-wired-get-num-s390-options">
+<ANCHOR id="nm-setting-wired-get-s390-option" href="libnm/NMSettingWired.html#nm-setting-wired-get-s390-option">
+<ANCHOR id="nm-setting-wired-get-s390-option-by-key" href="libnm/NMSettingWired.html#nm-setting-wired-get-s390-option-by-key">
+<ANCHOR id="nm-setting-wired-add-s390-option" href="libnm/NMSettingWired.html#nm-setting-wired-add-s390-option">
+<ANCHOR id="nm-setting-wired-remove-s390-option" href="libnm/NMSettingWired.html#nm-setting-wired-remove-s390-option">
+<ANCHOR id="nm-setting-wired-get-valid-s390-options" href="libnm/NMSettingWired.html#nm-setting-wired-get-valid-s390-options">
+<ANCHOR id="NMSettingWired.property-details" href="libnm/NMSettingWired.html#NMSettingWired.property-details">
+<ANCHOR id="NMSettingWired--auto-negotiate" href="libnm/NMSettingWired.html#NMSettingWired--auto-negotiate">
+<ANCHOR id="NMSettingWired--cloned-mac-address" href="libnm/NMSettingWired.html#NMSettingWired--cloned-mac-address">
+<ANCHOR id="NMSettingWired--duplex" href="libnm/NMSettingWired.html#NMSettingWired--duplex">
+<ANCHOR id="NMSettingWired--mac-address" href="libnm/NMSettingWired.html#NMSettingWired--mac-address">
+<ANCHOR id="NMSettingWired--mac-address-blacklist" href="libnm/NMSettingWired.html#NMSettingWired--mac-address-blacklist">
+<ANCHOR id="NMSettingWired--mtu" href="libnm/NMSettingWired.html#NMSettingWired--mtu">
+<ANCHOR id="NMSettingWired--port" href="libnm/NMSettingWired.html#NMSettingWired--port">
+<ANCHOR id="NMSettingWired--s390-nettype" href="libnm/NMSettingWired.html#NMSettingWired--s390-nettype">
+<ANCHOR id="NMSettingWired--s390-options" href="libnm/NMSettingWired.html#NMSettingWired--s390-options">
+<ANCHOR id="NMSettingWired--s390-subchannels" href="libnm/NMSettingWired.html#NMSettingWired--s390-subchannels">
+<ANCHOR id="NMSettingWired--speed" href="libnm/NMSettingWired.html#NMSettingWired--speed">
+<ANCHOR id="NMSettingWireless" href="libnm/NMSettingWireless.html">
+<ANCHOR id="NMSettingWireless.synopsis" href="libnm/NMSettingWireless.html#NMSettingWireless.synopsis">
+<ANCHOR id="NMSettingWireless.object-hierarchy" href="libnm/NMSettingWireless.html#NMSettingWireless.object-hierarchy">
+<ANCHOR id="NMSettingWireless.properties" href="libnm/NMSettingWireless.html#NMSettingWireless.properties">
+<ANCHOR id="NMSettingWireless.description" href="libnm/NMSettingWireless.html#NMSettingWireless.description">
+<ANCHOR id="NMSettingWireless.details" href="libnm/NMSettingWireless.html#NMSettingWireless.details">
+<ANCHOR id="NM-SETTING-WIRELESS-SETTING-NAME:CAPS" href="libnm/NMSettingWireless.html#NM-SETTING-WIRELESS-SETTING-NAME:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SSID:CAPS" href="libnm/NMSettingWireless.html#NM-SETTING-WIRELESS-SSID:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-MODE:CAPS" href="libnm/NMSettingWireless.html#NM-SETTING-WIRELESS-MODE:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-BAND:CAPS" href="libnm/NMSettingWireless.html#NM-SETTING-WIRELESS-BAND:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-CHANNEL:CAPS" href="libnm/NMSettingWireless.html#NM-SETTING-WIRELESS-CHANNEL:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-BSSID:CAPS" href="libnm/NMSettingWireless.html#NM-SETTING-WIRELESS-BSSID:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-RATE:CAPS" href="libnm/NMSettingWireless.html#NM-SETTING-WIRELESS-RATE:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-TX-POWER:CAPS" href="libnm/NMSettingWireless.html#NM-SETTING-WIRELESS-TX-POWER:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-MAC-ADDRESS:CAPS" href="libnm/NMSettingWireless.html#NM-SETTING-WIRELESS-MAC-ADDRESS:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-CLONED-MAC-ADDRESS:CAPS" href="libnm/NMSettingWireless.html#NM-SETTING-WIRELESS-CLONED-MAC-ADDRESS:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-MAC-ADDRESS-BLACKLIST:CAPS" href="libnm/NMSettingWireless.html#NM-SETTING-WIRELESS-MAC-ADDRESS-BLACKLIST:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-MTU:CAPS" href="libnm/NMSettingWireless.html#NM-SETTING-WIRELESS-MTU:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SEEN-BSSIDS:CAPS" href="libnm/NMSettingWireless.html#NM-SETTING-WIRELESS-SEEN-BSSIDS:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-HIDDEN:CAPS" href="libnm/NMSettingWireless.html#NM-SETTING-WIRELESS-HIDDEN:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-MODE-ADHOC:CAPS" href="libnm/NMSettingWireless.html#NM-SETTING-WIRELESS-MODE-ADHOC:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-MODE-AP:CAPS" href="libnm/NMSettingWireless.html#NM-SETTING-WIRELESS-MODE-AP:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-MODE-INFRA:CAPS" href="libnm/NMSettingWireless.html#NM-SETTING-WIRELESS-MODE-INFRA:CAPS">
+<ANCHOR id="NMSettingWireless-struct" href="libnm/NMSettingWireless.html#NMSettingWireless-struct">
+<ANCHOR id="NMSettingWirelessClass" href="libnm/NMSettingWireless.html#NMSettingWirelessClass">
+<ANCHOR id="nm-setting-wireless-new" href="libnm/NMSettingWireless.html#nm-setting-wireless-new">
+<ANCHOR id="nm-setting-wireless-get-ssid" href="libnm/NMSettingWireless.html#nm-setting-wireless-get-ssid">
+<ANCHOR id="nm-setting-wireless-get-mode" href="libnm/NMSettingWireless.html#nm-setting-wireless-get-mode">
+<ANCHOR id="nm-setting-wireless-get-band" href="libnm/NMSettingWireless.html#nm-setting-wireless-get-band">
+<ANCHOR id="nm-setting-wireless-get-channel" href="libnm/NMSettingWireless.html#nm-setting-wireless-get-channel">
+<ANCHOR id="nm-setting-wireless-get-bssid" href="libnm/NMSettingWireless.html#nm-setting-wireless-get-bssid">
+<ANCHOR id="nm-setting-wireless-get-rate" href="libnm/NMSettingWireless.html#nm-setting-wireless-get-rate">
+<ANCHOR id="nm-setting-wireless-get-tx-power" href="libnm/NMSettingWireless.html#nm-setting-wireless-get-tx-power">
+<ANCHOR id="nm-setting-wireless-get-mac-address" href="libnm/NMSettingWireless.html#nm-setting-wireless-get-mac-address">
+<ANCHOR id="nm-setting-wireless-get-cloned-mac-address" href="libnm/NMSettingWireless.html#nm-setting-wireless-get-cloned-mac-address">
+<ANCHOR id="nm-setting-wireless-get-mac-address-blacklist" href="libnm/NMSettingWireless.html#nm-setting-wireless-get-mac-address-blacklist">
+<ANCHOR id="nm-setting-wireless-get-num-mac-blacklist-items" href="libnm/NMSettingWireless.html#nm-setting-wireless-get-num-mac-blacklist-items">
+<ANCHOR id="nm-setting-wireless-get-mac-blacklist-item" href="libnm/NMSettingWireless.html#nm-setting-wireless-get-mac-blacklist-item">
+<ANCHOR id="nm-setting-wireless-add-mac-blacklist-item" href="libnm/NMSettingWireless.html#nm-setting-wireless-add-mac-blacklist-item">
+<ANCHOR id="nm-setting-wireless-remove-mac-blacklist-item" href="libnm/NMSettingWireless.html#nm-setting-wireless-remove-mac-blacklist-item">
+<ANCHOR id="nm-setting-wireless-remove-mac-blacklist-item-by-value" href="libnm/NMSettingWireless.html#nm-setting-wireless-remove-mac-blacklist-item-by-value">
+<ANCHOR id="nm-setting-wireless-clear-mac-blacklist-items" href="libnm/NMSettingWireless.html#nm-setting-wireless-clear-mac-blacklist-items">
+<ANCHOR id="nm-setting-wireless-get-mtu" href="libnm/NMSettingWireless.html#nm-setting-wireless-get-mtu">
+<ANCHOR id="nm-setting-wireless-get-hidden" href="libnm/NMSettingWireless.html#nm-setting-wireless-get-hidden">
+<ANCHOR id="nm-setting-wireless-add-seen-bssid" href="libnm/NMSettingWireless.html#nm-setting-wireless-add-seen-bssid">
+<ANCHOR id="nm-setting-wireless-get-num-seen-bssids" href="libnm/NMSettingWireless.html#nm-setting-wireless-get-num-seen-bssids">
+<ANCHOR id="nm-setting-wireless-get-seen-bssid" href="libnm/NMSettingWireless.html#nm-setting-wireless-get-seen-bssid">
+<ANCHOR id="nm-setting-wireless-ap-security-compatible" href="libnm/NMSettingWireless.html#nm-setting-wireless-ap-security-compatible">
+<ANCHOR id="NMSettingWireless.property-details" href="libnm/NMSettingWireless.html#NMSettingWireless.property-details">
+<ANCHOR id="NMSettingWireless--band" href="libnm/NMSettingWireless.html#NMSettingWireless--band">
+<ANCHOR id="NMSettingWireless--bssid" href="libnm/NMSettingWireless.html#NMSettingWireless--bssid">
+<ANCHOR id="NMSettingWireless--channel" href="libnm/NMSettingWireless.html#NMSettingWireless--channel">
+<ANCHOR id="NMSettingWireless--cloned-mac-address" href="libnm/NMSettingWireless.html#NMSettingWireless--cloned-mac-address">
+<ANCHOR id="NMSettingWireless--hidden" href="libnm/NMSettingWireless.html#NMSettingWireless--hidden">
+<ANCHOR id="NMSettingWireless--mac-address" href="libnm/NMSettingWireless.html#NMSettingWireless--mac-address">
+<ANCHOR id="NMSettingWireless--mac-address-blacklist" href="libnm/NMSettingWireless.html#NMSettingWireless--mac-address-blacklist">
+<ANCHOR id="NMSettingWireless--mode" href="libnm/NMSettingWireless.html#NMSettingWireless--mode">
+<ANCHOR id="NMSettingWireless--mtu" href="libnm/NMSettingWireless.html#NMSettingWireless--mtu">
+<ANCHOR id="NMSettingWireless--rate" href="libnm/NMSettingWireless.html#NMSettingWireless--rate">
+<ANCHOR id="NMSettingWireless--seen-bssids" href="libnm/NMSettingWireless.html#NMSettingWireless--seen-bssids">
+<ANCHOR id="NMSettingWireless--ssid" href="libnm/NMSettingWireless.html#NMSettingWireless--ssid">
+<ANCHOR id="NMSettingWireless--tx-power" href="libnm/NMSettingWireless.html#NMSettingWireless--tx-power">
+<ANCHOR id="NMSettingWirelessSecurity" href="libnm/NMSettingWirelessSecurity.html">
+<ANCHOR id="NMSettingWirelessSecurity.synopsis" href="libnm/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity.synopsis">
+<ANCHOR id="NMWepKeyType" href="libnm/NMSettingWirelessSecurity.html#NMWepKeyType">
+<ANCHOR id="NMSettingWirelessSecurity.object-hierarchy" href="libnm/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity.object-hierarchy">
+<ANCHOR id="NMSettingWirelessSecurity.properties" href="libnm/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity.properties">
+<ANCHOR id="NMSettingWirelessSecurity.description" href="libnm/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity.description">
+<ANCHOR id="NMSettingWirelessSecurity.details" href="libnm/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity.details">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-SETTING-NAME:CAPS" href="libnm/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-SETTING-NAME:CAPS">
+<ANCHOR id="NMWepKeyType-enum" href="libnm/NMSettingWirelessSecurity.html#NMWepKeyType-enum">
+<ANCHOR id="NM-WEP-KEY-TYPE-UNKNOWN:CAPS" href="libnm/NMSettingWirelessSecurity.html#NM-WEP-KEY-TYPE-UNKNOWN:CAPS">
+<ANCHOR id="NM-WEP-KEY-TYPE-KEY:CAPS" href="libnm/NMSettingWirelessSecurity.html#NM-WEP-KEY-TYPE-KEY:CAPS">
+<ANCHOR id="NM-WEP-KEY-TYPE-PASSPHRASE:CAPS" href="libnm/NMSettingWirelessSecurity.html#NM-WEP-KEY-TYPE-PASSPHRASE:CAPS">
+<ANCHOR id="NM-WEP-KEY-TYPE-LAST:CAPS" href="libnm/NMSettingWirelessSecurity.html#NM-WEP-KEY-TYPE-LAST:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-KEY-MGMT:CAPS" href="libnm/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-KEY-MGMT:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-WEP-TX-KEYIDX:CAPS" href="libnm/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-TX-KEYIDX:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-AUTH-ALG:CAPS" href="libnm/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-AUTH-ALG:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-PROTO:CAPS" href="libnm/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-PROTO:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-PAIRWISE:CAPS" href="libnm/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-PAIRWISE:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-GROUP:CAPS" href="libnm/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-GROUP:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-LEAP-USERNAME:CAPS" href="libnm/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-LEAP-USERNAME:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-WEP-KEY0:CAPS" href="libnm/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-KEY0:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-WEP-KEY1:CAPS" href="libnm/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-KEY1:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-WEP-KEY2:CAPS" href="libnm/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-KEY2:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-WEP-KEY3:CAPS" href="libnm/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-KEY3:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-WEP-KEY-FLAGS:CAPS" href="libnm/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-KEY-FLAGS:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-WEP-KEY-TYPE:CAPS" href="libnm/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-KEY-TYPE:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-PSK:CAPS" href="libnm/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-PSK:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-PSK-FLAGS:CAPS" href="libnm/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-PSK-FLAGS:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-LEAP-PASSWORD:CAPS" href="libnm/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-LEAP-PASSWORD:CAPS">
+<ANCHOR id="NM-SETTING-WIRELESS-SECURITY-LEAP-PASSWORD-FLAGS:CAPS" href="libnm/NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-LEAP-PASSWORD-FLAGS:CAPS">
+<ANCHOR id="NMSettingWirelessSecurity-struct" href="libnm/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity-struct">
+<ANCHOR id="NMSettingWirelessSecurityClass" href="libnm/NMSettingWirelessSecurity.html#NMSettingWirelessSecurityClass">
+<ANCHOR id="nm-setting-wireless-security-new" href="libnm/NMSettingWirelessSecurity.html#nm-setting-wireless-security-new">
+<ANCHOR id="nm-setting-wireless-security-get-key-mgmt" href="libnm/NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-key-mgmt">
+<ANCHOR id="nm-setting-wireless-security-get-num-protos" href="libnm/NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-num-protos">
+<ANCHOR id="nm-setting-wireless-security-get-proto" href="libnm/NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-proto">
+<ANCHOR id="nm-setting-wireless-security-add-proto" href="libnm/NMSettingWirelessSecurity.html#nm-setting-wireless-security-add-proto">
+<ANCHOR id="nm-setting-wireless-security-remove-proto" href="libnm/NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-proto">
+<ANCHOR id="nm-setting-wireless-security-remove-proto-by-value" href="libnm/NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-proto-by-value">
+<ANCHOR id="nm-setting-wireless-security-clear-protos" href="libnm/NMSettingWirelessSecurity.html#nm-setting-wireless-security-clear-protos">
+<ANCHOR id="nm-setting-wireless-security-get-num-pairwise" href="libnm/NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-num-pairwise">
+<ANCHOR id="nm-setting-wireless-security-get-pairwise" href="libnm/NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-pairwise">
+<ANCHOR id="nm-setting-wireless-security-add-pairwise" href="libnm/NMSettingWirelessSecurity.html#nm-setting-wireless-security-add-pairwise">
+<ANCHOR id="nm-setting-wireless-security-remove-pairwise" href="libnm/NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-pairwise">
+<ANCHOR id="nm-setting-wireless-security-remove-pairwise-by-value" href="libnm/NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-pairwise-by-value">
+<ANCHOR id="nm-setting-wireless-security-clear-pairwise" href="libnm/NMSettingWirelessSecurity.html#nm-setting-wireless-security-clear-pairwise">
+<ANCHOR id="nm-setting-wireless-security-get-num-groups" href="libnm/NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-num-groups">
+<ANCHOR id="nm-setting-wireless-security-get-group" href="libnm/NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-group">
+<ANCHOR id="nm-setting-wireless-security-add-group" href="libnm/NMSettingWirelessSecurity.html#nm-setting-wireless-security-add-group">
+<ANCHOR id="nm-setting-wireless-security-remove-group" href="libnm/NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-group">
+<ANCHOR id="nm-setting-wireless-security-remove-group-by-value" href="libnm/NMSettingWirelessSecurity.html#nm-setting-wireless-security-remove-group-by-value">
+<ANCHOR id="nm-setting-wireless-security-clear-groups" href="libnm/NMSettingWirelessSecurity.html#nm-setting-wireless-security-clear-groups">
+<ANCHOR id="nm-setting-wireless-security-get-psk" href="libnm/NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-psk">
+<ANCHOR id="nm-setting-wireless-security-get-psk-flags" href="libnm/NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-psk-flags">
+<ANCHOR id="nm-setting-wireless-security-get-leap-username" href="libnm/NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-leap-username">
+<ANCHOR id="nm-setting-wireless-security-get-leap-password" href="libnm/NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-leap-password">
+<ANCHOR id="nm-setting-wireless-security-get-leap-password-flags" href="libnm/NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-leap-password-flags">
+<ANCHOR id="nm-setting-wireless-security-get-wep-key" href="libnm/NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-wep-key">
+<ANCHOR id="nm-setting-wireless-security-set-wep-key" href="libnm/NMSettingWirelessSecurity.html#nm-setting-wireless-security-set-wep-key">
+<ANCHOR id="nm-setting-wireless-security-get-wep-tx-keyidx" href="libnm/NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-wep-tx-keyidx">
+<ANCHOR id="nm-setting-wireless-security-get-auth-alg" href="libnm/NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-auth-alg">
+<ANCHOR id="nm-setting-wireless-security-get-wep-key-flags" href="libnm/NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-wep-key-flags">
+<ANCHOR id="nm-setting-wireless-security-get-wep-key-type" href="libnm/NMSettingWirelessSecurity.html#nm-setting-wireless-security-get-wep-key-type">
+<ANCHOR id="NMSettingWirelessSecurity.property-details" href="libnm/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity.property-details">
+<ANCHOR id="NMSettingWirelessSecurity--auth-alg" href="libnm/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--auth-alg">
+<ANCHOR id="NMSettingWirelessSecurity--group" href="libnm/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--group">
+<ANCHOR id="NMSettingWirelessSecurity--key-mgmt" href="libnm/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--key-mgmt">
+<ANCHOR id="NMSettingWirelessSecurity--leap-password" href="libnm/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--leap-password">
+<ANCHOR id="NMSettingWirelessSecurity--leap-password-flags" href="libnm/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--leap-password-flags">
+<ANCHOR id="NMSettingWirelessSecurity--leap-username" href="libnm/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--leap-username">
+<ANCHOR id="NMSettingWirelessSecurity--pairwise" href="libnm/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--pairwise">
+<ANCHOR id="NMSettingWirelessSecurity--proto" href="libnm/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--proto">
+<ANCHOR id="NMSettingWirelessSecurity--psk" href="libnm/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--psk">
+<ANCHOR id="NMSettingWirelessSecurity--psk-flags" href="libnm/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--psk-flags">
+<ANCHOR id="NMSettingWirelessSecurity--wep-key-flags" href="libnm/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key-flags">
+<ANCHOR id="NMSettingWirelessSecurity--wep-key-type" href="libnm/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key-type">
+<ANCHOR id="NMSettingWirelessSecurity--wep-key0" href="libnm/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key0">
+<ANCHOR id="NMSettingWirelessSecurity--wep-key1" href="libnm/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key1">
+<ANCHOR id="NMSettingWirelessSecurity--wep-key2" href="libnm/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key2">
+<ANCHOR id="NMSettingWirelessSecurity--wep-key3" href="libnm/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-key3">
+<ANCHOR id="NMSettingWirelessSecurity--wep-tx-keyidx" href="libnm/NMSettingWirelessSecurity.html#NMSettingWirelessSecurity--wep-tx-keyidx">
+<ANCHOR id="NMDevice" href="libnm/NMDevice.html">
+<ANCHOR id="NMDevice.synopsis" href="libnm/NMDevice.html#NMDevice.synopsis">
+<ANCHOR id="NMDevice.object-hierarchy" href="libnm/NMDevice.html#NMDevice.object-hierarchy">
+<ANCHOR id="NMDevice.implemented-interfaces" href="libnm/NMDevice.html#NMDevice.implemented-interfaces">
+<ANCHOR id="NMDevice.properties" href="libnm/NMDevice.html#NMDevice.properties">
+<ANCHOR id="NMDevice.signals" href="libnm/NMDevice.html#NMDevice.signals">
+<ANCHOR id="NMDevice.description" href="libnm/NMDevice.html#NMDevice.description">
+<ANCHOR id="NMDevice.details" href="libnm/NMDevice.html#NMDevice.details">
+<ANCHOR id="NM-DEVICE-DEVICE-TYPE:CAPS" href="libnm/NMDevice.html#NM-DEVICE-DEVICE-TYPE:CAPS">
+<ANCHOR id="NM-DEVICE-UDI:CAPS" href="libnm/NMDevice.html#NM-DEVICE-UDI:CAPS">
+<ANCHOR id="NM-DEVICE-INTERFACE:CAPS" href="libnm/NMDevice.html#NM-DEVICE-INTERFACE:CAPS">
+<ANCHOR id="NM-DEVICE-IP-INTERFACE:CAPS" href="libnm/NMDevice.html#NM-DEVICE-IP-INTERFACE:CAPS">
+<ANCHOR id="NM-DEVICE-DRIVER:CAPS" href="libnm/NMDevice.html#NM-DEVICE-DRIVER:CAPS">
+<ANCHOR id="NM-DEVICE-DRIVER-VERSION:CAPS" href="libnm/NMDevice.html#NM-DEVICE-DRIVER-VERSION:CAPS">
+<ANCHOR id="NM-DEVICE-FIRMWARE-VERSION:CAPS" href="libnm/NMDevice.html#NM-DEVICE-FIRMWARE-VERSION:CAPS">
+<ANCHOR id="NM-DEVICE-CAPABILITIES:CAPS" href="libnm/NMDevice.html#NM-DEVICE-CAPABILITIES:CAPS">
+<ANCHOR id="NM-DEVICE-MANAGED:CAPS" href="libnm/NMDevice.html#NM-DEVICE-MANAGED:CAPS">
+<ANCHOR id="NM-DEVICE-AUTOCONNECT:CAPS" href="libnm/NMDevice.html#NM-DEVICE-AUTOCONNECT:CAPS">
+<ANCHOR id="NM-DEVICE-FIRMWARE-MISSING:CAPS" href="libnm/NMDevice.html#NM-DEVICE-FIRMWARE-MISSING:CAPS">
+<ANCHOR id="NM-DEVICE-IP4-CONFIG:CAPS" href="libnm/NMDevice.html#NM-DEVICE-IP4-CONFIG:CAPS">
+<ANCHOR id="NM-DEVICE-DHCP4-CONFIG:CAPS" href="libnm/NMDevice.html#NM-DEVICE-DHCP4-CONFIG:CAPS">
+<ANCHOR id="NM-DEVICE-IP6-CONFIG:CAPS" href="libnm/NMDevice.html#NM-DEVICE-IP6-CONFIG:CAPS">
+<ANCHOR id="NM-DEVICE-DHCP6-CONFIG:CAPS" href="libnm/NMDevice.html#NM-DEVICE-DHCP6-CONFIG:CAPS">
+<ANCHOR id="NM-DEVICE-STATE:CAPS" href="libnm/NMDevice.html#NM-DEVICE-STATE:CAPS">
+<ANCHOR id="NM-DEVICE-STATE-REASON:CAPS" href="libnm/NMDevice.html#NM-DEVICE-STATE-REASON:CAPS">
+<ANCHOR id="NM-DEVICE-ACTIVE-CONNECTION:CAPS" href="libnm/NMDevice.html#NM-DEVICE-ACTIVE-CONNECTION:CAPS">
+<ANCHOR id="NM-DEVICE-AVAILABLE-CONNECTIONS:CAPS" href="libnm/NMDevice.html#NM-DEVICE-AVAILABLE-CONNECTIONS:CAPS">
+<ANCHOR id="NM-DEVICE-VENDOR:CAPS" href="libnm/NMDevice.html#NM-DEVICE-VENDOR:CAPS">
+<ANCHOR id="NM-DEVICE-PRODUCT:CAPS" href="libnm/NMDevice.html#NM-DEVICE-PRODUCT:CAPS">
+<ANCHOR id="NM-DEVICE-PHYSICAL-PORT-ID:CAPS" href="libnm/NMDevice.html#NM-DEVICE-PHYSICAL-PORT-ID:CAPS">
+<ANCHOR id="NM-DEVICE-MTU:CAPS" href="libnm/NMDevice.html#NM-DEVICE-MTU:CAPS">
+<ANCHOR id="NMDevice-struct" href="libnm/NMDevice.html#NMDevice-struct">
+<ANCHOR id="NMDeviceClass" href="libnm/NMDevice.html#NMDeviceClass">
+<ANCHOR id="nm-device-get-iface" href="libnm/NMDevice.html#nm-device-get-iface">
+<ANCHOR id="nm-device-get-ip-iface" href="libnm/NMDevice.html#nm-device-get-ip-iface">
+<ANCHOR id="nm-device-get-device-type" href="libnm/NMDevice.html#nm-device-get-device-type">
+<ANCHOR id="nm-device-get-udi" href="libnm/NMDevice.html#nm-device-get-udi">
+<ANCHOR id="nm-device-get-driver" href="libnm/NMDevice.html#nm-device-get-driver">
+<ANCHOR id="nm-device-get-driver-version" href="libnm/NMDevice.html#nm-device-get-driver-version">
+<ANCHOR id="nm-device-get-firmware-version" href="libnm/NMDevice.html#nm-device-get-firmware-version">
+<ANCHOR id="nm-device-get-type-description" href="libnm/NMDevice.html#nm-device-get-type-description">
+<ANCHOR id="nm-device-get-hw-address" href="libnm/NMDevice.html#nm-device-get-hw-address">
+<ANCHOR id="nm-device-get-capabilities" href="libnm/NMDevice.html#nm-device-get-capabilities">
+<ANCHOR id="nm-device-get-managed" href="libnm/NMDevice.html#nm-device-get-managed">
+<ANCHOR id="nm-device-get-autoconnect" href="libnm/NMDevice.html#nm-device-get-autoconnect">
+<ANCHOR id="nm-device-set-autoconnect" href="libnm/NMDevice.html#nm-device-set-autoconnect">
+<ANCHOR id="nm-device-get-firmware-missing" href="libnm/NMDevice.html#nm-device-get-firmware-missing">
+<ANCHOR id="nm-device-get-ip4-config" href="libnm/NMDevice.html#nm-device-get-ip4-config">
+<ANCHOR id="nm-device-get-dhcp4-config" href="libnm/NMDevice.html#nm-device-get-dhcp4-config">
+<ANCHOR id="nm-device-get-ip6-config" href="libnm/NMDevice.html#nm-device-get-ip6-config">
+<ANCHOR id="nm-device-get-dhcp6-config" href="libnm/NMDevice.html#nm-device-get-dhcp6-config">
+<ANCHOR id="nm-device-get-state" href="libnm/NMDevice.html#nm-device-get-state">
+<ANCHOR id="nm-device-get-state-reason" href="libnm/NMDevice.html#nm-device-get-state-reason">
+<ANCHOR id="nm-device-get-active-connection" href="libnm/NMDevice.html#nm-device-get-active-connection">
+<ANCHOR id="nm-device-get-available-connections" href="libnm/NMDevice.html#nm-device-get-available-connections">
+<ANCHOR id="nm-device-get-physical-port-id" href="libnm/NMDevice.html#nm-device-get-physical-port-id">
+<ANCHOR id="nm-device-get-mtu" href="libnm/NMDevice.html#nm-device-get-mtu">
+<ANCHOR id="nm-device-is-software" href="libnm/NMDevice.html#nm-device-is-software">
+<ANCHOR id="nm-device-get-product" href="libnm/NMDevice.html#nm-device-get-product">
+<ANCHOR id="nm-device-get-vendor" href="libnm/NMDevice.html#nm-device-get-vendor">
+<ANCHOR id="nm-device-get-description" href="libnm/NMDevice.html#nm-device-get-description">
+<ANCHOR id="nm-device-disambiguate-names" href="libnm/NMDevice.html#nm-device-disambiguate-names">
+<ANCHOR id="nm-device-disconnect" href="libnm/NMDevice.html#nm-device-disconnect">
+<ANCHOR id="nm-device-disconnect-async" href="libnm/NMDevice.html#nm-device-disconnect-async">
+<ANCHOR id="nm-device-disconnect-finish" href="libnm/NMDevice.html#nm-device-disconnect-finish">
+<ANCHOR id="nm-device-delete" href="libnm/NMDevice.html#nm-device-delete">
+<ANCHOR id="nm-device-delete-async" href="libnm/NMDevice.html#nm-device-delete-async">
+<ANCHOR id="nm-device-delete-finish" href="libnm/NMDevice.html#nm-device-delete-finish">
+<ANCHOR id="nm-device-filter-connections" href="libnm/NMDevice.html#nm-device-filter-connections">
+<ANCHOR id="nm-device-connection-valid" href="libnm/NMDevice.html#nm-device-connection-valid">
+<ANCHOR id="nm-device-connection-compatible" href="libnm/NMDevice.html#nm-device-connection-compatible">
+<ANCHOR id="nm-device-get-setting-type" href="libnm/NMDevice.html#nm-device-get-setting-type">
+<ANCHOR id="NMDevice.property-details" href="libnm/NMDevice.html#NMDevice.property-details">
+<ANCHOR id="NMDevice--active-connection" href="libnm/NMDevice.html#NMDevice--active-connection">
+<ANCHOR id="NMDevice--autoconnect" href="libnm/NMDevice.html#NMDevice--autoconnect">
+<ANCHOR id="NMDevice--available-connections" href="libnm/NMDevice.html#NMDevice--available-connections">
+<ANCHOR id="NMDevice--capabilities" href="libnm/NMDevice.html#NMDevice--capabilities">
+<ANCHOR id="NMDevice--device-type" href="libnm/NMDevice.html#NMDevice--device-type">
+<ANCHOR id="NMDevice--dhcp4-config" href="libnm/NMDevice.html#NMDevice--dhcp4-config">
+<ANCHOR id="NMDevice--dhcp6-config" href="libnm/NMDevice.html#NMDevice--dhcp6-config">
+<ANCHOR id="NMDevice--driver" href="libnm/NMDevice.html#NMDevice--driver">
+<ANCHOR id="NMDevice--driver-version" href="libnm/NMDevice.html#NMDevice--driver-version">
+<ANCHOR id="NMDevice--firmware-missing" href="libnm/NMDevice.html#NMDevice--firmware-missing">
+<ANCHOR id="NMDevice--firmware-version" href="libnm/NMDevice.html#NMDevice--firmware-version">
+<ANCHOR id="NMDevice--interface" href="libnm/NMDevice.html#NMDevice--interface">
+<ANCHOR id="NMDevice--ip-interface" href="libnm/NMDevice.html#NMDevice--ip-interface">
+<ANCHOR id="NMDevice--ip4-config" href="libnm/NMDevice.html#NMDevice--ip4-config">
+<ANCHOR id="NMDevice--ip6-config" href="libnm/NMDevice.html#NMDevice--ip6-config">
+<ANCHOR id="NMDevice--managed" href="libnm/NMDevice.html#NMDevice--managed">
+<ANCHOR id="NMDevice--mtu" href="libnm/NMDevice.html#NMDevice--mtu">
+<ANCHOR id="NMDevice--physical-port-id" href="libnm/NMDevice.html#NMDevice--physical-port-id">
+<ANCHOR id="NMDevice--product" href="libnm/NMDevice.html#NMDevice--product">
+<ANCHOR id="NMDevice--state" href="libnm/NMDevice.html#NMDevice--state">
+<ANCHOR id="NMDevice--state-reason" href="libnm/NMDevice.html#NMDevice--state-reason">
+<ANCHOR id="NMDevice--udi" href="libnm/NMDevice.html#NMDevice--udi">
+<ANCHOR id="NMDevice--vendor" href="libnm/NMDevice.html#NMDevice--vendor">
+<ANCHOR id="NMDevice.signal-details" href="libnm/NMDevice.html#NMDevice.signal-details">
+<ANCHOR id="NMDevice-state-changed" href="libnm/NMDevice.html#NMDevice-state-changed">
+<ANCHOR id="NMDeviceAdsl" href="libnm/NMDeviceAdsl.html">
+<ANCHOR id="NMDeviceAdsl.synopsis" href="libnm/NMDeviceAdsl.html#NMDeviceAdsl.synopsis">
+<ANCHOR id="NMDeviceAdsl.object-hierarchy" href="libnm/NMDeviceAdsl.html#NMDeviceAdsl.object-hierarchy">
+<ANCHOR id="NMDeviceAdsl.implemented-interfaces" href="libnm/NMDeviceAdsl.html#NMDeviceAdsl.implemented-interfaces">
+<ANCHOR id="NMDeviceAdsl.properties" href="libnm/NMDeviceAdsl.html#NMDeviceAdsl.properties">
+<ANCHOR id="NMDeviceAdsl.description" href="libnm/NMDeviceAdsl.html#NMDeviceAdsl.description">
+<ANCHOR id="NMDeviceAdsl.details" href="libnm/NMDeviceAdsl.html#NMDeviceAdsl.details">
+<ANCHOR id="NM-DEVICE-ADSL-CARRIER:CAPS" href="libnm/NMDeviceAdsl.html#NM-DEVICE-ADSL-CARRIER:CAPS">
+<ANCHOR id="NMDeviceAdsl-struct" href="libnm/NMDeviceAdsl.html#NMDeviceAdsl-struct">
+<ANCHOR id="NMDeviceAdslClass" href="libnm/NMDeviceAdsl.html#NMDeviceAdslClass">
+<ANCHOR id="nm-device-adsl-get-carrier" href="libnm/NMDeviceAdsl.html#nm-device-adsl-get-carrier">
+<ANCHOR id="NMDeviceAdsl.property-details" href="libnm/NMDeviceAdsl.html#NMDeviceAdsl.property-details">
+<ANCHOR id="NMDeviceAdsl--carrier" href="libnm/NMDeviceAdsl.html#NMDeviceAdsl--carrier">
+<ANCHOR id="NMDeviceBond" href="libnm/NMDeviceBond.html">
+<ANCHOR id="NMDeviceBond.synopsis" href="libnm/NMDeviceBond.html#NMDeviceBond.synopsis">
+<ANCHOR id="NMDeviceBond.object-hierarchy" href="libnm/NMDeviceBond.html#NMDeviceBond.object-hierarchy">
+<ANCHOR id="NMDeviceBond.implemented-interfaces" href="libnm/NMDeviceBond.html#NMDeviceBond.implemented-interfaces">
+<ANCHOR id="NMDeviceBond.properties" href="libnm/NMDeviceBond.html#NMDeviceBond.properties">
+<ANCHOR id="NMDeviceBond.description" href="libnm/NMDeviceBond.html#NMDeviceBond.description">
+<ANCHOR id="NMDeviceBond.details" href="libnm/NMDeviceBond.html#NMDeviceBond.details">
+<ANCHOR id="NM-DEVICE-BOND-HW-ADDRESS:CAPS" href="libnm/NMDeviceBond.html#NM-DEVICE-BOND-HW-ADDRESS:CAPS">
+<ANCHOR id="NM-DEVICE-BOND-CARRIER:CAPS" href="libnm/NMDeviceBond.html#NM-DEVICE-BOND-CARRIER:CAPS">
+<ANCHOR id="NM-DEVICE-BOND-SLAVES:CAPS" href="libnm/NMDeviceBond.html#NM-DEVICE-BOND-SLAVES:CAPS">
+<ANCHOR id="NMDeviceBond-struct" href="libnm/NMDeviceBond.html#NMDeviceBond-struct">
+<ANCHOR id="NMDeviceBondClass" href="libnm/NMDeviceBond.html#NMDeviceBondClass">
+<ANCHOR id="nm-device-bond-get-hw-address" href="libnm/NMDeviceBond.html#nm-device-bond-get-hw-address">
+<ANCHOR id="nm-device-bond-get-carrier" href="libnm/NMDeviceBond.html#nm-device-bond-get-carrier">
+<ANCHOR id="nm-device-bond-get-slaves" href="libnm/NMDeviceBond.html#nm-device-bond-get-slaves">
+<ANCHOR id="NMDeviceBond.property-details" href="libnm/NMDeviceBond.html#NMDeviceBond.property-details">
+<ANCHOR id="NMDeviceBond--carrier" href="libnm/NMDeviceBond.html#NMDeviceBond--carrier">
+<ANCHOR id="NMDeviceBond--hw-address" href="libnm/NMDeviceBond.html#NMDeviceBond--hw-address">
+<ANCHOR id="NMDeviceBond--slaves" href="libnm/NMDeviceBond.html#NMDeviceBond--slaves">
+<ANCHOR id="NMDeviceBridge" href="libnm/NMDeviceBridge.html">
+<ANCHOR id="NMDeviceBridge.synopsis" href="libnm/NMDeviceBridge.html#NMDeviceBridge.synopsis">
+<ANCHOR id="NMDeviceBridge.object-hierarchy" href="libnm/NMDeviceBridge.html#NMDeviceBridge.object-hierarchy">
+<ANCHOR id="NMDeviceBridge.implemented-interfaces" href="libnm/NMDeviceBridge.html#NMDeviceBridge.implemented-interfaces">
+<ANCHOR id="NMDeviceBridge.properties" href="libnm/NMDeviceBridge.html#NMDeviceBridge.properties">
+<ANCHOR id="NMDeviceBridge.description" href="libnm/NMDeviceBridge.html#NMDeviceBridge.description">
+<ANCHOR id="NMDeviceBridge.details" href="libnm/NMDeviceBridge.html#NMDeviceBridge.details">
+<ANCHOR id="NM-DEVICE-BRIDGE-HW-ADDRESS:CAPS" href="libnm/NMDeviceBridge.html#NM-DEVICE-BRIDGE-HW-ADDRESS:CAPS">
+<ANCHOR id="NM-DEVICE-BRIDGE-CARRIER:CAPS" href="libnm/NMDeviceBridge.html#NM-DEVICE-BRIDGE-CARRIER:CAPS">
+<ANCHOR id="NM-DEVICE-BRIDGE-SLAVES:CAPS" href="libnm/NMDeviceBridge.html#NM-DEVICE-BRIDGE-SLAVES:CAPS">
+<ANCHOR id="NMDeviceBridge-struct" href="libnm/NMDeviceBridge.html#NMDeviceBridge-struct">
+<ANCHOR id="NMDeviceBridgeClass" href="libnm/NMDeviceBridge.html#NMDeviceBridgeClass">
+<ANCHOR id="nm-device-bridge-get-hw-address" href="libnm/NMDeviceBridge.html#nm-device-bridge-get-hw-address">
+<ANCHOR id="nm-device-bridge-get-carrier" href="libnm/NMDeviceBridge.html#nm-device-bridge-get-carrier">
+<ANCHOR id="nm-device-bridge-get-slaves" href="libnm/NMDeviceBridge.html#nm-device-bridge-get-slaves">
+<ANCHOR id="NMDeviceBridge.property-details" href="libnm/NMDeviceBridge.html#NMDeviceBridge.property-details">
+<ANCHOR id="NMDeviceBridge--carrier" href="libnm/NMDeviceBridge.html#NMDeviceBridge--carrier">
+<ANCHOR id="NMDeviceBridge--hw-address" href="libnm/NMDeviceBridge.html#NMDeviceBridge--hw-address">
+<ANCHOR id="NMDeviceBridge--slaves" href="libnm/NMDeviceBridge.html#NMDeviceBridge--slaves">
+<ANCHOR id="NMDeviceBt" href="libnm/NMDeviceBt.html">
+<ANCHOR id="NMDeviceBt.synopsis" href="libnm/NMDeviceBt.html#NMDeviceBt.synopsis">
+<ANCHOR id="NMDeviceBt.object-hierarchy" href="libnm/NMDeviceBt.html#NMDeviceBt.object-hierarchy">
+<ANCHOR id="NMDeviceBt.implemented-interfaces" href="libnm/NMDeviceBt.html#NMDeviceBt.implemented-interfaces">
+<ANCHOR id="NMDeviceBt.properties" href="libnm/NMDeviceBt.html#NMDeviceBt.properties">
+<ANCHOR id="NMDeviceBt.description" href="libnm/NMDeviceBt.html#NMDeviceBt.description">
+<ANCHOR id="NMDeviceBt.details" href="libnm/NMDeviceBt.html#NMDeviceBt.details">
+<ANCHOR id="NM-DEVICE-BT-HW-ADDRESS:CAPS" href="libnm/NMDeviceBt.html#NM-DEVICE-BT-HW-ADDRESS:CAPS">
+<ANCHOR id="NM-DEVICE-BT-NAME:CAPS" href="libnm/NMDeviceBt.html#NM-DEVICE-BT-NAME:CAPS">
+<ANCHOR id="NM-DEVICE-BT-CAPABILITIES:CAPS" href="libnm/NMDeviceBt.html#NM-DEVICE-BT-CAPABILITIES:CAPS">
+<ANCHOR id="NMDeviceBt-struct" href="libnm/NMDeviceBt.html#NMDeviceBt-struct">
+<ANCHOR id="NMDeviceBtClass" href="libnm/NMDeviceBt.html#NMDeviceBtClass">
+<ANCHOR id="nm-device-bt-get-hw-address" href="libnm/NMDeviceBt.html#nm-device-bt-get-hw-address">
+<ANCHOR id="nm-device-bt-get-name" href="libnm/NMDeviceBt.html#nm-device-bt-get-name">
+<ANCHOR id="nm-device-bt-get-capabilities" href="libnm/NMDeviceBt.html#nm-device-bt-get-capabilities">
+<ANCHOR id="NMDeviceBt.property-details" href="libnm/NMDeviceBt.html#NMDeviceBt.property-details">
+<ANCHOR id="NMDeviceBt--bt-capabilities" href="libnm/NMDeviceBt.html#NMDeviceBt--bt-capabilities">
+<ANCHOR id="NMDeviceBt--hw-address" href="libnm/NMDeviceBt.html#NMDeviceBt--hw-address">
+<ANCHOR id="NMDeviceBt--name" href="libnm/NMDeviceBt.html#NMDeviceBt--name">
+<ANCHOR id="NMDeviceEthernet" href="libnm/NMDeviceEthernet.html">
+<ANCHOR id="NMDeviceEthernet.synopsis" href="libnm/NMDeviceEthernet.html#NMDeviceEthernet.synopsis">
+<ANCHOR id="NMDeviceEthernet.object-hierarchy" href="libnm/NMDeviceEthernet.html#NMDeviceEthernet.object-hierarchy">
+<ANCHOR id="NMDeviceEthernet.implemented-interfaces" href="libnm/NMDeviceEthernet.html#NMDeviceEthernet.implemented-interfaces">
+<ANCHOR id="NMDeviceEthernet.properties" href="libnm/NMDeviceEthernet.html#NMDeviceEthernet.properties">
+<ANCHOR id="NMDeviceEthernet.description" href="libnm/NMDeviceEthernet.html#NMDeviceEthernet.description">
+<ANCHOR id="NMDeviceEthernet.details" href="libnm/NMDeviceEthernet.html#NMDeviceEthernet.details">
+<ANCHOR id="NM-DEVICE-ETHERNET-HW-ADDRESS:CAPS" href="libnm/NMDeviceEthernet.html#NM-DEVICE-ETHERNET-HW-ADDRESS:CAPS">
+<ANCHOR id="NM-DEVICE-ETHERNET-PERMANENT-HW-ADDRESS:CAPS" href="libnm/NMDeviceEthernet.html#NM-DEVICE-ETHERNET-PERMANENT-HW-ADDRESS:CAPS">
+<ANCHOR id="NM-DEVICE-ETHERNET-SPEED:CAPS" href="libnm/NMDeviceEthernet.html#NM-DEVICE-ETHERNET-SPEED:CAPS">
+<ANCHOR id="NM-DEVICE-ETHERNET-CARRIER:CAPS" href="libnm/NMDeviceEthernet.html#NM-DEVICE-ETHERNET-CARRIER:CAPS">
+<ANCHOR id="NMDeviceEthernet-struct" href="libnm/NMDeviceEthernet.html#NMDeviceEthernet-struct">
+<ANCHOR id="NMDeviceEthernetClass" href="libnm/NMDeviceEthernet.html#NMDeviceEthernetClass">
+<ANCHOR id="nm-device-ethernet-get-hw-address" href="libnm/NMDeviceEthernet.html#nm-device-ethernet-get-hw-address">
+<ANCHOR id="nm-device-ethernet-get-permanent-hw-address" href="libnm/NMDeviceEthernet.html#nm-device-ethernet-get-permanent-hw-address">
+<ANCHOR id="nm-device-ethernet-get-speed" href="libnm/NMDeviceEthernet.html#nm-device-ethernet-get-speed">
+<ANCHOR id="nm-device-ethernet-get-carrier" href="libnm/NMDeviceEthernet.html#nm-device-ethernet-get-carrier">
+<ANCHOR id="NMDeviceEthernet.property-details" href="libnm/NMDeviceEthernet.html#NMDeviceEthernet.property-details">
+<ANCHOR id="NMDeviceEthernet--carrier" href="libnm/NMDeviceEthernet.html#NMDeviceEthernet--carrier">
+<ANCHOR id="NMDeviceEthernet--hw-address" href="libnm/NMDeviceEthernet.html#NMDeviceEthernet--hw-address">
+<ANCHOR id="NMDeviceEthernet--perm-hw-address" href="libnm/NMDeviceEthernet.html#NMDeviceEthernet--perm-hw-address">
+<ANCHOR id="NMDeviceEthernet--speed" href="libnm/NMDeviceEthernet.html#NMDeviceEthernet--speed">
+<ANCHOR id="NMDeviceGeneric" href="libnm/NMDeviceGeneric.html">
+<ANCHOR id="NMDeviceGeneric.synopsis" href="libnm/NMDeviceGeneric.html#NMDeviceGeneric.synopsis">
+<ANCHOR id="NMDeviceGeneric.object-hierarchy" href="libnm/NMDeviceGeneric.html#NMDeviceGeneric.object-hierarchy">
+<ANCHOR id="NMDeviceGeneric.implemented-interfaces" href="libnm/NMDeviceGeneric.html#NMDeviceGeneric.implemented-interfaces">
+<ANCHOR id="NMDeviceGeneric.properties" href="libnm/NMDeviceGeneric.html#NMDeviceGeneric.properties">
+<ANCHOR id="NMDeviceGeneric.description" href="libnm/NMDeviceGeneric.html#NMDeviceGeneric.description">
+<ANCHOR id="NMDeviceGeneric.details" href="libnm/NMDeviceGeneric.html#NMDeviceGeneric.details">
+<ANCHOR id="NM-DEVICE-GENERIC-HW-ADDRESS:CAPS" href="libnm/NMDeviceGeneric.html#NM-DEVICE-GENERIC-HW-ADDRESS:CAPS">
+<ANCHOR id="NM-DEVICE-GENERIC-TYPE-DESCRIPTION:CAPS" href="libnm/NMDeviceGeneric.html#NM-DEVICE-GENERIC-TYPE-DESCRIPTION:CAPS">
+<ANCHOR id="NMDeviceGeneric-struct" href="libnm/NMDeviceGeneric.html#NMDeviceGeneric-struct">
+<ANCHOR id="NMDeviceGenericClass" href="libnm/NMDeviceGeneric.html#NMDeviceGenericClass">
+<ANCHOR id="nm-device-generic-get-hw-address" href="libnm/NMDeviceGeneric.html#nm-device-generic-get-hw-address">
+<ANCHOR id="NMDeviceGeneric.property-details" href="libnm/NMDeviceGeneric.html#NMDeviceGeneric.property-details">
+<ANCHOR id="NMDeviceGeneric--hw-address" href="libnm/NMDeviceGeneric.html#NMDeviceGeneric--hw-address">
+<ANCHOR id="NMDeviceGeneric--type-description" href="libnm/NMDeviceGeneric.html#NMDeviceGeneric--type-description">
+<ANCHOR id="NMDeviceInfiniband" href="libnm/NMDeviceInfiniband.html">
+<ANCHOR id="NMDeviceInfiniband.synopsis" href="libnm/NMDeviceInfiniband.html#NMDeviceInfiniband.synopsis">
+<ANCHOR id="NMDeviceInfiniband.object-hierarchy" href="libnm/NMDeviceInfiniband.html#NMDeviceInfiniband.object-hierarchy">
+<ANCHOR id="NMDeviceInfiniband.implemented-interfaces" href="libnm/NMDeviceInfiniband.html#NMDeviceInfiniband.implemented-interfaces">
+<ANCHOR id="NMDeviceInfiniband.properties" href="libnm/NMDeviceInfiniband.html#NMDeviceInfiniband.properties">
+<ANCHOR id="NMDeviceInfiniband.description" href="libnm/NMDeviceInfiniband.html#NMDeviceInfiniband.description">
+<ANCHOR id="NMDeviceInfiniband.details" href="libnm/NMDeviceInfiniband.html#NMDeviceInfiniband.details">
+<ANCHOR id="NM-DEVICE-INFINIBAND-HW-ADDRESS:CAPS" href="libnm/NMDeviceInfiniband.html#NM-DEVICE-INFINIBAND-HW-ADDRESS:CAPS">
+<ANCHOR id="NM-DEVICE-INFINIBAND-CARRIER:CAPS" href="libnm/NMDeviceInfiniband.html#NM-DEVICE-INFINIBAND-CARRIER:CAPS">
+<ANCHOR id="NMDeviceInfiniband-struct" href="libnm/NMDeviceInfiniband.html#NMDeviceInfiniband-struct">
+<ANCHOR id="NMDeviceInfinibandClass" href="libnm/NMDeviceInfiniband.html#NMDeviceInfinibandClass">
+<ANCHOR id="nm-device-infiniband-get-hw-address" href="libnm/NMDeviceInfiniband.html#nm-device-infiniband-get-hw-address">
+<ANCHOR id="nm-device-infiniband-get-carrier" href="libnm/NMDeviceInfiniband.html#nm-device-infiniband-get-carrier">
+<ANCHOR id="NMDeviceInfiniband.property-details" href="libnm/NMDeviceInfiniband.html#NMDeviceInfiniband.property-details">
+<ANCHOR id="NMDeviceInfiniband--carrier" href="libnm/NMDeviceInfiniband.html#NMDeviceInfiniband--carrier">
+<ANCHOR id="NMDeviceInfiniband--hw-address" href="libnm/NMDeviceInfiniband.html#NMDeviceInfiniband--hw-address">
+<ANCHOR id="NMDeviceModem" href="libnm/NMDeviceModem.html">
+<ANCHOR id="NMDeviceModem.synopsis" href="libnm/NMDeviceModem.html#NMDeviceModem.synopsis">
+<ANCHOR id="NMDeviceModem.object-hierarchy" href="libnm/NMDeviceModem.html#NMDeviceModem.object-hierarchy">
+<ANCHOR id="NMDeviceModem.implemented-interfaces" href="libnm/NMDeviceModem.html#NMDeviceModem.implemented-interfaces">
+<ANCHOR id="NMDeviceModem.properties" href="libnm/NMDeviceModem.html#NMDeviceModem.properties">
+<ANCHOR id="NMDeviceModem.description" href="libnm/NMDeviceModem.html#NMDeviceModem.description">
+<ANCHOR id="NMDeviceModem.details" href="libnm/NMDeviceModem.html#NMDeviceModem.details">
+<ANCHOR id="NM-DEVICE-MODEM-MODEM-CAPABILITIES:CAPS" href="libnm/NMDeviceModem.html#NM-DEVICE-MODEM-MODEM-CAPABILITIES:CAPS">
+<ANCHOR id="NM-DEVICE-MODEM-CURRENT-CAPABILITIES:CAPS" href="libnm/NMDeviceModem.html#NM-DEVICE-MODEM-CURRENT-CAPABILITIES:CAPS">
+<ANCHOR id="NMDeviceModem-struct" href="libnm/NMDeviceModem.html#NMDeviceModem-struct">
+<ANCHOR id="NMDeviceModemClass" href="libnm/NMDeviceModem.html#NMDeviceModemClass">
+<ANCHOR id="nm-device-modem-get-modem-capabilities" href="libnm/NMDeviceModem.html#nm-device-modem-get-modem-capabilities">
+<ANCHOR id="nm-device-modem-get-current-capabilities" href="libnm/NMDeviceModem.html#nm-device-modem-get-current-capabilities">
+<ANCHOR id="NMDeviceModem.property-details" href="libnm/NMDeviceModem.html#NMDeviceModem.property-details">
+<ANCHOR id="NMDeviceModem--current-capabilities" href="libnm/NMDeviceModem.html#NMDeviceModem--current-capabilities">
+<ANCHOR id="NMDeviceModem--modem-capabilities" href="libnm/NMDeviceModem.html#NMDeviceModem--modem-capabilities">
+<ANCHOR id="NMDeviceOlpcMesh" href="libnm/NMDeviceOlpcMesh.html">
+<ANCHOR id="NMDeviceOlpcMesh.synopsis" href="libnm/NMDeviceOlpcMesh.html#NMDeviceOlpcMesh.synopsis">
+<ANCHOR id="NMDeviceOlpcMesh.object-hierarchy" href="libnm/NMDeviceOlpcMesh.html#NMDeviceOlpcMesh.object-hierarchy">
+<ANCHOR id="NMDeviceOlpcMesh.implemented-interfaces" href="libnm/NMDeviceOlpcMesh.html#NMDeviceOlpcMesh.implemented-interfaces">
+<ANCHOR id="NMDeviceOlpcMesh.properties" href="libnm/NMDeviceOlpcMesh.html#NMDeviceOlpcMesh.properties">
+<ANCHOR id="NMDeviceOlpcMesh.description" href="libnm/NMDeviceOlpcMesh.html#NMDeviceOlpcMesh.description">
+<ANCHOR id="NMDeviceOlpcMesh.details" href="libnm/NMDeviceOlpcMesh.html#NMDeviceOlpcMesh.details">
+<ANCHOR id="NM-DEVICE-OLPC-MESH-HW-ADDRESS:CAPS" href="libnm/NMDeviceOlpcMesh.html#NM-DEVICE-OLPC-MESH-HW-ADDRESS:CAPS">
+<ANCHOR id="NM-DEVICE-OLPC-MESH-COMPANION:CAPS" href="libnm/NMDeviceOlpcMesh.html#NM-DEVICE-OLPC-MESH-COMPANION:CAPS">
+<ANCHOR id="NM-DEVICE-OLPC-MESH-ACTIVE-CHANNEL:CAPS" href="libnm/NMDeviceOlpcMesh.html#NM-DEVICE-OLPC-MESH-ACTIVE-CHANNEL:CAPS">
+<ANCHOR id="NMDeviceOlpcMesh-struct" href="libnm/NMDeviceOlpcMesh.html#NMDeviceOlpcMesh-struct">
+<ANCHOR id="NMDeviceOlpcMeshClass" href="libnm/NMDeviceOlpcMesh.html#NMDeviceOlpcMeshClass">
+<ANCHOR id="nm-device-olpc-mesh-get-hw-address" href="libnm/NMDeviceOlpcMesh.html#nm-device-olpc-mesh-get-hw-address">
+<ANCHOR id="nm-device-olpc-mesh-get-companion" href="libnm/NMDeviceOlpcMesh.html#nm-device-olpc-mesh-get-companion">
+<ANCHOR id="nm-device-olpc-mesh-get-active-channel" href="libnm/NMDeviceOlpcMesh.html#nm-device-olpc-mesh-get-active-channel">
+<ANCHOR id="NMDeviceOlpcMesh.property-details" href="libnm/NMDeviceOlpcMesh.html#NMDeviceOlpcMesh.property-details">
+<ANCHOR id="NMDeviceOlpcMesh--active-channel" href="libnm/NMDeviceOlpcMesh.html#NMDeviceOlpcMesh--active-channel">
+<ANCHOR id="NMDeviceOlpcMesh--companion" href="libnm/NMDeviceOlpcMesh.html#NMDeviceOlpcMesh--companion">
+<ANCHOR id="NMDeviceOlpcMesh--hw-address" href="libnm/NMDeviceOlpcMesh.html#NMDeviceOlpcMesh--hw-address">
+<ANCHOR id="NMDeviceTeam" href="libnm/NMDeviceTeam.html">
+<ANCHOR id="NMDeviceTeam.synopsis" href="libnm/NMDeviceTeam.html#NMDeviceTeam.synopsis">
+<ANCHOR id="NMDeviceTeam.object-hierarchy" href="libnm/NMDeviceTeam.html#NMDeviceTeam.object-hierarchy">
+<ANCHOR id="NMDeviceTeam.implemented-interfaces" href="libnm/NMDeviceTeam.html#NMDeviceTeam.implemented-interfaces">
+<ANCHOR id="NMDeviceTeam.properties" href="libnm/NMDeviceTeam.html#NMDeviceTeam.properties">
+<ANCHOR id="NMDeviceTeam.description" href="libnm/NMDeviceTeam.html#NMDeviceTeam.description">
+<ANCHOR id="NMDeviceTeam.details" href="libnm/NMDeviceTeam.html#NMDeviceTeam.details">
+<ANCHOR id="NM-DEVICE-TEAM-HW-ADDRESS:CAPS" href="libnm/NMDeviceTeam.html#NM-DEVICE-TEAM-HW-ADDRESS:CAPS">
+<ANCHOR id="NM-DEVICE-TEAM-CARRIER:CAPS" href="libnm/NMDeviceTeam.html#NM-DEVICE-TEAM-CARRIER:CAPS">
+<ANCHOR id="NM-DEVICE-TEAM-SLAVES:CAPS" href="libnm/NMDeviceTeam.html#NM-DEVICE-TEAM-SLAVES:CAPS">
+<ANCHOR id="NMDeviceTeam-struct" href="libnm/NMDeviceTeam.html#NMDeviceTeam-struct">
+<ANCHOR id="NMDeviceTeamClass" href="libnm/NMDeviceTeam.html#NMDeviceTeamClass">
+<ANCHOR id="nm-device-team-get-hw-address" href="libnm/NMDeviceTeam.html#nm-device-team-get-hw-address">
+<ANCHOR id="nm-device-team-get-carrier" href="libnm/NMDeviceTeam.html#nm-device-team-get-carrier">
+<ANCHOR id="nm-device-team-get-slaves" href="libnm/NMDeviceTeam.html#nm-device-team-get-slaves">
+<ANCHOR id="NMDeviceTeam.property-details" href="libnm/NMDeviceTeam.html#NMDeviceTeam.property-details">
+<ANCHOR id="NMDeviceTeam--carrier" href="libnm/NMDeviceTeam.html#NMDeviceTeam--carrier">
+<ANCHOR id="NMDeviceTeam--hw-address" href="libnm/NMDeviceTeam.html#NMDeviceTeam--hw-address">
+<ANCHOR id="NMDeviceTeam--slaves" href="libnm/NMDeviceTeam.html#NMDeviceTeam--slaves">
+<ANCHOR id="NMDeviceVlan" href="libnm/NMDeviceVlan.html">
+<ANCHOR id="NMDeviceVlan.synopsis" href="libnm/NMDeviceVlan.html#NMDeviceVlan.synopsis">
+<ANCHOR id="NMDeviceVlan.object-hierarchy" href="libnm/NMDeviceVlan.html#NMDeviceVlan.object-hierarchy">
+<ANCHOR id="NMDeviceVlan.implemented-interfaces" href="libnm/NMDeviceVlan.html#NMDeviceVlan.implemented-interfaces">
+<ANCHOR id="NMDeviceVlan.properties" href="libnm/NMDeviceVlan.html#NMDeviceVlan.properties">
+<ANCHOR id="NMDeviceVlan.description" href="libnm/NMDeviceVlan.html#NMDeviceVlan.description">
+<ANCHOR id="NMDeviceVlan.details" href="libnm/NMDeviceVlan.html#NMDeviceVlan.details">
+<ANCHOR id="NM-DEVICE-VLAN-HW-ADDRESS:CAPS" href="libnm/NMDeviceVlan.html#NM-DEVICE-VLAN-HW-ADDRESS:CAPS">
+<ANCHOR id="NM-DEVICE-VLAN-CARRIER:CAPS" href="libnm/NMDeviceVlan.html#NM-DEVICE-VLAN-CARRIER:CAPS">
+<ANCHOR id="NM-DEVICE-VLAN-PARENT:CAPS" href="libnm/NMDeviceVlan.html#NM-DEVICE-VLAN-PARENT:CAPS">
+<ANCHOR id="NM-DEVICE-VLAN-VLAN-ID:CAPS" href="libnm/NMDeviceVlan.html#NM-DEVICE-VLAN-VLAN-ID:CAPS">
+<ANCHOR id="NMDeviceVlan-struct" href="libnm/NMDeviceVlan.html#NMDeviceVlan-struct">
+<ANCHOR id="NMDeviceVlanClass" href="libnm/NMDeviceVlan.html#NMDeviceVlanClass">
+<ANCHOR id="nm-device-vlan-get-hw-address" href="libnm/NMDeviceVlan.html#nm-device-vlan-get-hw-address">
+<ANCHOR id="nm-device-vlan-get-carrier" href="libnm/NMDeviceVlan.html#nm-device-vlan-get-carrier">
+<ANCHOR id="nm-device-vlan-get-parent" href="libnm/NMDeviceVlan.html#nm-device-vlan-get-parent">
+<ANCHOR id="nm-device-vlan-get-vlan-id" href="libnm/NMDeviceVlan.html#nm-device-vlan-get-vlan-id">
+<ANCHOR id="NMDeviceVlan.property-details" href="libnm/NMDeviceVlan.html#NMDeviceVlan.property-details">
+<ANCHOR id="NMDeviceVlan--carrier" href="libnm/NMDeviceVlan.html#NMDeviceVlan--carrier">
+<ANCHOR id="NMDeviceVlan--hw-address" href="libnm/NMDeviceVlan.html#NMDeviceVlan--hw-address">
+<ANCHOR id="NMDeviceVlan--parent" href="libnm/NMDeviceVlan.html#NMDeviceVlan--parent">
+<ANCHOR id="NMDeviceVlan--vlan-id" href="libnm/NMDeviceVlan.html#NMDeviceVlan--vlan-id">
+<ANCHOR id="NMDeviceWifi" href="libnm/NMDeviceWifi.html">
+<ANCHOR id="NMDeviceWifi.synopsis" href="libnm/NMDeviceWifi.html#NMDeviceWifi.synopsis">
+<ANCHOR id="NMDeviceWifi.object-hierarchy" href="libnm/NMDeviceWifi.html#NMDeviceWifi.object-hierarchy">
+<ANCHOR id="NMDeviceWifi.implemented-interfaces" href="libnm/NMDeviceWifi.html#NMDeviceWifi.implemented-interfaces">
+<ANCHOR id="NMDeviceWifi.properties" href="libnm/NMDeviceWifi.html#NMDeviceWifi.properties">
+<ANCHOR id="NMDeviceWifi.signals" href="libnm/NMDeviceWifi.html#NMDeviceWifi.signals">
+<ANCHOR id="NMDeviceWifi.description" href="libnm/NMDeviceWifi.html#NMDeviceWifi.description">
+<ANCHOR id="NMDeviceWifi.details" href="libnm/NMDeviceWifi.html#NMDeviceWifi.details">
+<ANCHOR id="NM-DEVICE-WIFI-HW-ADDRESS:CAPS" href="libnm/NMDeviceWifi.html#NM-DEVICE-WIFI-HW-ADDRESS:CAPS">
+<ANCHOR id="NM-DEVICE-WIFI-PERMANENT-HW-ADDRESS:CAPS" href="libnm/NMDeviceWifi.html#NM-DEVICE-WIFI-PERMANENT-HW-ADDRESS:CAPS">
+<ANCHOR id="NM-DEVICE-WIFI-MODE:CAPS" href="libnm/NMDeviceWifi.html#NM-DEVICE-WIFI-MODE:CAPS">
+<ANCHOR id="NM-DEVICE-WIFI-BITRATE:CAPS" href="libnm/NMDeviceWifi.html#NM-DEVICE-WIFI-BITRATE:CAPS">
+<ANCHOR id="NM-DEVICE-WIFI-ACTIVE-ACCESS-POINT:CAPS" href="libnm/NMDeviceWifi.html#NM-DEVICE-WIFI-ACTIVE-ACCESS-POINT:CAPS">
+<ANCHOR id="NM-DEVICE-WIFI-CAPABILITIES:CAPS" href="libnm/NMDeviceWifi.html#NM-DEVICE-WIFI-CAPABILITIES:CAPS">
+<ANCHOR id="NM-DEVICE-WIFI-ACCESS-POINTS:CAPS" href="libnm/NMDeviceWifi.html#NM-DEVICE-WIFI-ACCESS-POINTS:CAPS">
+<ANCHOR id="NMDeviceWifi-struct" href="libnm/NMDeviceWifi.html#NMDeviceWifi-struct">
+<ANCHOR id="NMDeviceWifiClass" href="libnm/NMDeviceWifi.html#NMDeviceWifiClass">
+<ANCHOR id="nm-device-wifi-get-hw-address" href="libnm/NMDeviceWifi.html#nm-device-wifi-get-hw-address">
+<ANCHOR id="nm-device-wifi-get-permanent-hw-address" href="libnm/NMDeviceWifi.html#nm-device-wifi-get-permanent-hw-address">
+<ANCHOR id="nm-device-wifi-get-mode" href="libnm/NMDeviceWifi.html#nm-device-wifi-get-mode">
+<ANCHOR id="nm-device-wifi-get-bitrate" href="libnm/NMDeviceWifi.html#nm-device-wifi-get-bitrate">
+<ANCHOR id="nm-device-wifi-get-capabilities" href="libnm/NMDeviceWifi.html#nm-device-wifi-get-capabilities">
+<ANCHOR id="nm-device-wifi-get-active-access-point" href="libnm/NMDeviceWifi.html#nm-device-wifi-get-active-access-point">
+<ANCHOR id="nm-device-wifi-get-access-point-by-path" href="libnm/NMDeviceWifi.html#nm-device-wifi-get-access-point-by-path">
+<ANCHOR id="nm-device-wifi-get-access-points" href="libnm/NMDeviceWifi.html#nm-device-wifi-get-access-points">
+<ANCHOR id="nm-device-wifi-request-scan" href="libnm/NMDeviceWifi.html#nm-device-wifi-request-scan">
+<ANCHOR id="nm-device-wifi-request-scan-async" href="libnm/NMDeviceWifi.html#nm-device-wifi-request-scan-async">
+<ANCHOR id="nm-device-wifi-request-scan-finish" href="libnm/NMDeviceWifi.html#nm-device-wifi-request-scan-finish">
+<ANCHOR id="NMDeviceWifi.property-details" href="libnm/NMDeviceWifi.html#NMDeviceWifi.property-details">
+<ANCHOR id="NMDeviceWifi--access-points" href="libnm/NMDeviceWifi.html#NMDeviceWifi--access-points">
+<ANCHOR id="NMDeviceWifi--active-access-point" href="libnm/NMDeviceWifi.html#NMDeviceWifi--active-access-point">
+<ANCHOR id="NMDeviceWifi--bitrate" href="libnm/NMDeviceWifi.html#NMDeviceWifi--bitrate">
+<ANCHOR id="NMDeviceWifi--hw-address" href="libnm/NMDeviceWifi.html#NMDeviceWifi--hw-address">
+<ANCHOR id="NMDeviceWifi--mode" href="libnm/NMDeviceWifi.html#NMDeviceWifi--mode">
+<ANCHOR id="NMDeviceWifi--perm-hw-address" href="libnm/NMDeviceWifi.html#NMDeviceWifi--perm-hw-address">
+<ANCHOR id="NMDeviceWifi--wireless-capabilities" href="libnm/NMDeviceWifi.html#NMDeviceWifi--wireless-capabilities">
+<ANCHOR id="NMDeviceWifi.signal-details" href="libnm/NMDeviceWifi.html#NMDeviceWifi.signal-details">
+<ANCHOR id="NMDeviceWifi-access-point-added" href="libnm/NMDeviceWifi.html#NMDeviceWifi-access-point-added">
+<ANCHOR id="NMDeviceWifi-access-point-removed" href="libnm/NMDeviceWifi.html#NMDeviceWifi-access-point-removed">
+<ANCHOR id="NMDeviceWimax" href="libnm/NMDeviceWimax.html">
+<ANCHOR id="NMDeviceWimax.synopsis" href="libnm/NMDeviceWimax.html#NMDeviceWimax.synopsis">
+<ANCHOR id="NMDeviceWimax.object-hierarchy" href="libnm/NMDeviceWimax.html#NMDeviceWimax.object-hierarchy">
+<ANCHOR id="NMDeviceWimax.implemented-interfaces" href="libnm/NMDeviceWimax.html#NMDeviceWimax.implemented-interfaces">
+<ANCHOR id="NMDeviceWimax.properties" href="libnm/NMDeviceWimax.html#NMDeviceWimax.properties">
+<ANCHOR id="NMDeviceWimax.signals" href="libnm/NMDeviceWimax.html#NMDeviceWimax.signals">
+<ANCHOR id="NMDeviceWimax.description" href="libnm/NMDeviceWimax.html#NMDeviceWimax.description">
+<ANCHOR id="NMDeviceWimax.details" href="libnm/NMDeviceWimax.html#NMDeviceWimax.details">
+<ANCHOR id="NM-DEVICE-WIMAX-HW-ADDRESS:CAPS" href="libnm/NMDeviceWimax.html#NM-DEVICE-WIMAX-HW-ADDRESS:CAPS">
+<ANCHOR id="NM-DEVICE-WIMAX-ACTIVE-NSP:CAPS" href="libnm/NMDeviceWimax.html#NM-DEVICE-WIMAX-ACTIVE-NSP:CAPS">
+<ANCHOR id="NM-DEVICE-WIMAX-CENTER-FREQUENCY:CAPS" href="libnm/NMDeviceWimax.html#NM-DEVICE-WIMAX-CENTER-FREQUENCY:CAPS">
+<ANCHOR id="NM-DEVICE-WIMAX-RSSI:CAPS" href="libnm/NMDeviceWimax.html#NM-DEVICE-WIMAX-RSSI:CAPS">
+<ANCHOR id="NM-DEVICE-WIMAX-CINR:CAPS" href="libnm/NMDeviceWimax.html#NM-DEVICE-WIMAX-CINR:CAPS">
+<ANCHOR id="NM-DEVICE-WIMAX-TX-POWER:CAPS" href="libnm/NMDeviceWimax.html#NM-DEVICE-WIMAX-TX-POWER:CAPS">
+<ANCHOR id="NM-DEVICE-WIMAX-BSID:CAPS" href="libnm/NMDeviceWimax.html#NM-DEVICE-WIMAX-BSID:CAPS">
+<ANCHOR id="NM-DEVICE-WIMAX-NSPS:CAPS" href="libnm/NMDeviceWimax.html#NM-DEVICE-WIMAX-NSPS:CAPS">
+<ANCHOR id="NMDeviceWimax-struct" href="libnm/NMDeviceWimax.html#NMDeviceWimax-struct">
+<ANCHOR id="NMDeviceWimaxClass" href="libnm/NMDeviceWimax.html#NMDeviceWimaxClass">
+<ANCHOR id="nm-device-wimax-get-hw-address" href="libnm/NMDeviceWimax.html#nm-device-wimax-get-hw-address">
+<ANCHOR id="nm-device-wimax-get-active-nsp" href="libnm/NMDeviceWimax.html#nm-device-wimax-get-active-nsp">
+<ANCHOR id="nm-device-wimax-get-nsp-by-path" href="libnm/NMDeviceWimax.html#nm-device-wimax-get-nsp-by-path">
+<ANCHOR id="nm-device-wimax-get-nsps" href="libnm/NMDeviceWimax.html#nm-device-wimax-get-nsps">
+<ANCHOR id="nm-device-wimax-get-center-frequency" href="libnm/NMDeviceWimax.html#nm-device-wimax-get-center-frequency">
+<ANCHOR id="nm-device-wimax-get-rssi" href="libnm/NMDeviceWimax.html#nm-device-wimax-get-rssi">
+<ANCHOR id="nm-device-wimax-get-cinr" href="libnm/NMDeviceWimax.html#nm-device-wimax-get-cinr">
+<ANCHOR id="nm-device-wimax-get-tx-power" href="libnm/NMDeviceWimax.html#nm-device-wimax-get-tx-power">
+<ANCHOR id="nm-device-wimax-get-bsid" href="libnm/NMDeviceWimax.html#nm-device-wimax-get-bsid">
+<ANCHOR id="NMDeviceWimax.property-details" href="libnm/NMDeviceWimax.html#NMDeviceWimax.property-details">
+<ANCHOR id="NMDeviceWimax--active-nsp" href="libnm/NMDeviceWimax.html#NMDeviceWimax--active-nsp">
+<ANCHOR id="NMDeviceWimax--bsid" href="libnm/NMDeviceWimax.html#NMDeviceWimax--bsid">
+<ANCHOR id="NMDeviceWimax--center-frequency" href="libnm/NMDeviceWimax.html#NMDeviceWimax--center-frequency">
+<ANCHOR id="NMDeviceWimax--cinr" href="libnm/NMDeviceWimax.html#NMDeviceWimax--cinr">
+<ANCHOR id="NMDeviceWimax--hw-address" href="libnm/NMDeviceWimax.html#NMDeviceWimax--hw-address">
+<ANCHOR id="NMDeviceWimax--nsps" href="libnm/NMDeviceWimax.html#NMDeviceWimax--nsps">
+<ANCHOR id="NMDeviceWimax--rssi" href="libnm/NMDeviceWimax.html#NMDeviceWimax--rssi">
+<ANCHOR id="NMDeviceWimax--tx-power" href="libnm/NMDeviceWimax.html#NMDeviceWimax--tx-power">
+<ANCHOR id="NMDeviceWimax.signal-details" href="libnm/NMDeviceWimax.html#NMDeviceWimax.signal-details">
+<ANCHOR id="NMDeviceWimax-nsp-added" href="libnm/NMDeviceWimax.html#NMDeviceWimax-nsp-added">
+<ANCHOR id="NMDeviceWimax-nsp-removed" href="libnm/NMDeviceWimax.html#NMDeviceWimax-nsp-removed">
+<ANCHOR id="NMActiveConnection" href="libnm/NMActiveConnection.html">
+<ANCHOR id="NMActiveConnection.synopsis" href="libnm/NMActiveConnection.html#NMActiveConnection.synopsis">
+<ANCHOR id="NMActiveConnection.object-hierarchy" href="libnm/NMActiveConnection.html#NMActiveConnection.object-hierarchy">
+<ANCHOR id="NMActiveConnection.implemented-interfaces" href="libnm/NMActiveConnection.html#NMActiveConnection.implemented-interfaces">
+<ANCHOR id="NMActiveConnection.properties" href="libnm/NMActiveConnection.html#NMActiveConnection.properties">
+<ANCHOR id="NMActiveConnection.description" href="libnm/NMActiveConnection.html#NMActiveConnection.description">
+<ANCHOR id="NMActiveConnection.details" href="libnm/NMActiveConnection.html#NMActiveConnection.details">
+<ANCHOR id="NM-ACTIVE-CONNECTION-CONNECTION:CAPS" href="libnm/NMActiveConnection.html#NM-ACTIVE-CONNECTION-CONNECTION:CAPS">
+<ANCHOR id="NM-ACTIVE-CONNECTION-ID:CAPS" href="libnm/NMActiveConnection.html#NM-ACTIVE-CONNECTION-ID:CAPS">
+<ANCHOR id="NM-ACTIVE-CONNECTION-UUID:CAPS" href="libnm/NMActiveConnection.html#NM-ACTIVE-CONNECTION-UUID:CAPS">
+<ANCHOR id="NM-ACTIVE-CONNECTION-TYPE:CAPS" href="libnm/NMActiveConnection.html#NM-ACTIVE-CONNECTION-TYPE:CAPS">
+<ANCHOR id="NM-ACTIVE-CONNECTION-SPECIFIC-OBJECT-PATH:CAPS" href="libnm/NMActiveConnection.html#NM-ACTIVE-CONNECTION-SPECIFIC-OBJECT-PATH:CAPS">
+<ANCHOR id="NM-ACTIVE-CONNECTION-DEVICES:CAPS" href="libnm/NMActiveConnection.html#NM-ACTIVE-CONNECTION-DEVICES:CAPS">
+<ANCHOR id="NM-ACTIVE-CONNECTION-STATE:CAPS" href="libnm/NMActiveConnection.html#NM-ACTIVE-CONNECTION-STATE:CAPS">
+<ANCHOR id="NM-ACTIVE-CONNECTION-DEFAULT:CAPS" href="libnm/NMActiveConnection.html#NM-ACTIVE-CONNECTION-DEFAULT:CAPS">
+<ANCHOR id="NM-ACTIVE-CONNECTION-IP4-CONFIG:CAPS" href="libnm/NMActiveConnection.html#NM-ACTIVE-CONNECTION-IP4-CONFIG:CAPS">
+<ANCHOR id="NM-ACTIVE-CONNECTION-DHCP4-CONFIG:CAPS" href="libnm/NMActiveConnection.html#NM-ACTIVE-CONNECTION-DHCP4-CONFIG:CAPS">
+<ANCHOR id="NM-ACTIVE-CONNECTION-DEFAULT6:CAPS" href="libnm/NMActiveConnection.html#NM-ACTIVE-CONNECTION-DEFAULT6:CAPS">
+<ANCHOR id="NM-ACTIVE-CONNECTION-IP6-CONFIG:CAPS" href="libnm/NMActiveConnection.html#NM-ACTIVE-CONNECTION-IP6-CONFIG:CAPS">
+<ANCHOR id="NM-ACTIVE-CONNECTION-DHCP6-CONFIG:CAPS" href="libnm/NMActiveConnection.html#NM-ACTIVE-CONNECTION-DHCP6-CONFIG:CAPS">
+<ANCHOR id="NM-ACTIVE-CONNECTION-VPN:CAPS" href="libnm/NMActiveConnection.html#NM-ACTIVE-CONNECTION-VPN:CAPS">
+<ANCHOR id="NM-ACTIVE-CONNECTION-MASTER:CAPS" href="libnm/NMActiveConnection.html#NM-ACTIVE-CONNECTION-MASTER:CAPS">
+<ANCHOR id="NMActiveConnection-struct" href="libnm/NMActiveConnection.html#NMActiveConnection-struct">
+<ANCHOR id="NMActiveConnectionClass" href="libnm/NMActiveConnection.html#NMActiveConnectionClass">
+<ANCHOR id="nm-active-connection-get-connection" href="libnm/NMActiveConnection.html#nm-active-connection-get-connection">
+<ANCHOR id="nm-active-connection-get-id" href="libnm/NMActiveConnection.html#nm-active-connection-get-id">
+<ANCHOR id="nm-active-connection-get-uuid" href="libnm/NMActiveConnection.html#nm-active-connection-get-uuid">
+<ANCHOR id="nm-active-connection-get-connection-type" href="libnm/NMActiveConnection.html#nm-active-connection-get-connection-type">
+<ANCHOR id="nm-active-connection-get-specific-object-path" href="libnm/NMActiveConnection.html#nm-active-connection-get-specific-object-path">
+<ANCHOR id="nm-active-connection-get-devices" href="libnm/NMActiveConnection.html#nm-active-connection-get-devices">
+<ANCHOR id="nm-active-connection-get-state" href="libnm/NMActiveConnection.html#nm-active-connection-get-state">
+<ANCHOR id="nm-active-connection-get-master" href="libnm/NMActiveConnection.html#nm-active-connection-get-master">
+<ANCHOR id="nm-active-connection-get-default" href="libnm/NMActiveConnection.html#nm-active-connection-get-default">
+<ANCHOR id="nm-active-connection-get-ip4-config" href="libnm/NMActiveConnection.html#nm-active-connection-get-ip4-config">
+<ANCHOR id="nm-active-connection-get-dhcp4-config" href="libnm/NMActiveConnection.html#nm-active-connection-get-dhcp4-config">
+<ANCHOR id="nm-active-connection-get-default6" href="libnm/NMActiveConnection.html#nm-active-connection-get-default6">
+<ANCHOR id="nm-active-connection-get-ip6-config" href="libnm/NMActiveConnection.html#nm-active-connection-get-ip6-config">
+<ANCHOR id="nm-active-connection-get-dhcp6-config" href="libnm/NMActiveConnection.html#nm-active-connection-get-dhcp6-config">
+<ANCHOR id="nm-active-connection-get-vpn" href="libnm/NMActiveConnection.html#nm-active-connection-get-vpn">
+<ANCHOR id="NMActiveConnection.property-details" href="libnm/NMActiveConnection.html#NMActiveConnection.property-details">
+<ANCHOR id="NMActiveConnection--connection" href="libnm/NMActiveConnection.html#NMActiveConnection--connection">
+<ANCHOR id="NMActiveConnection--default" href="libnm/NMActiveConnection.html#NMActiveConnection--default">
+<ANCHOR id="NMActiveConnection--default6" href="libnm/NMActiveConnection.html#NMActiveConnection--default6">
+<ANCHOR id="NMActiveConnection--devices" href="libnm/NMActiveConnection.html#NMActiveConnection--devices">
+<ANCHOR id="NMActiveConnection--dhcp4-config" href="libnm/NMActiveConnection.html#NMActiveConnection--dhcp4-config">
+<ANCHOR id="NMActiveConnection--dhcp6-config" href="libnm/NMActiveConnection.html#NMActiveConnection--dhcp6-config">
+<ANCHOR id="NMActiveConnection--id" href="libnm/NMActiveConnection.html#NMActiveConnection--id">
+<ANCHOR id="NMActiveConnection--ip4-config" href="libnm/NMActiveConnection.html#NMActiveConnection--ip4-config">
+<ANCHOR id="NMActiveConnection--ip6-config" href="libnm/NMActiveConnection.html#NMActiveConnection--ip6-config">
+<ANCHOR id="NMActiveConnection--master" href="libnm/NMActiveConnection.html#NMActiveConnection--master">
+<ANCHOR id="NMActiveConnection--specific-object-path" href="libnm/NMActiveConnection.html#NMActiveConnection--specific-object-path">
+<ANCHOR id="NMActiveConnection--state" href="libnm/NMActiveConnection.html#NMActiveConnection--state">
+<ANCHOR id="NMActiveConnection--type" href="libnm/NMActiveConnection.html#NMActiveConnection--type">
+<ANCHOR id="NMActiveConnection--uuid" href="libnm/NMActiveConnection.html#NMActiveConnection--uuid">
+<ANCHOR id="NMActiveConnection--vpn" href="libnm/NMActiveConnection.html#NMActiveConnection--vpn">
+<ANCHOR id="NMVpnConnection" href="libnm/NMVpnConnection.html">
+<ANCHOR id="NMVpnConnection.synopsis" href="libnm/NMVpnConnection.html#NMVpnConnection.synopsis">
+<ANCHOR id="NMVpnConnection.object-hierarchy" href="libnm/NMVpnConnection.html#NMVpnConnection.object-hierarchy">
+<ANCHOR id="NMVpnConnection.implemented-interfaces" href="libnm/NMVpnConnection.html#NMVpnConnection.implemented-interfaces">
+<ANCHOR id="NMVpnConnection.properties" href="libnm/NMVpnConnection.html#NMVpnConnection.properties">
+<ANCHOR id="NMVpnConnection.signals" href="libnm/NMVpnConnection.html#NMVpnConnection.signals">
+<ANCHOR id="NMVpnConnection.description" href="libnm/NMVpnConnection.html#NMVpnConnection.description">
+<ANCHOR id="NMVpnConnection.details" href="libnm/NMVpnConnection.html#NMVpnConnection.details">
+<ANCHOR id="NM-VPN-CONNECTION-VPN-STATE:CAPS" href="libnm/NMVpnConnection.html#NM-VPN-CONNECTION-VPN-STATE:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-BANNER:CAPS" href="libnm/NMVpnConnection.html#NM-VPN-CONNECTION-BANNER:CAPS">
+<ANCHOR id="NMVpnConnection-struct" href="libnm/NMVpnConnection.html#NMVpnConnection-struct">
+<ANCHOR id="NMVpnConnectionClass" href="libnm/NMVpnConnection.html#NMVpnConnectionClass">
+<ANCHOR id="nm-vpn-connection-get-vpn-state" href="libnm/NMVpnConnection.html#nm-vpn-connection-get-vpn-state">
+<ANCHOR id="nm-vpn-connection-get-banner" href="libnm/NMVpnConnection.html#nm-vpn-connection-get-banner">
+<ANCHOR id="NMVpnConnection.property-details" href="libnm/NMVpnConnection.html#NMVpnConnection.property-details">
+<ANCHOR id="NMVpnConnection--banner" href="libnm/NMVpnConnection.html#NMVpnConnection--banner">
+<ANCHOR id="NMVpnConnection--vpn-state" href="libnm/NMVpnConnection.html#NMVpnConnection--vpn-state">
+<ANCHOR id="NMVpnConnection.signal-details" href="libnm/NMVpnConnection.html#NMVpnConnection.signal-details">
+<ANCHOR id="NMVpnConnection-vpn-state-changed" href="libnm/NMVpnConnection.html#NMVpnConnection-vpn-state-changed">
+<ANCHOR id="NMRemoteConnection" href="libnm/NMRemoteConnection.html">
+<ANCHOR id="NMRemoteConnection.synopsis" href="libnm/NMRemoteConnection.html#NMRemoteConnection.synopsis">
+<ANCHOR id="NMRemoteConnection.object-hierarchy" href="libnm/NMRemoteConnection.html#NMRemoteConnection.object-hierarchy">
+<ANCHOR id="NMRemoteConnection.implemented-interfaces" href="libnm/NMRemoteConnection.html#NMRemoteConnection.implemented-interfaces">
+<ANCHOR id="NMRemoteConnection.properties" href="libnm/NMRemoteConnection.html#NMRemoteConnection.properties">
+<ANCHOR id="NMRemoteConnection.description" href="libnm/NMRemoteConnection.html#NMRemoteConnection.description">
+<ANCHOR id="NMRemoteConnection.details" href="libnm/NMRemoteConnection.html#NMRemoteConnection.details">
+<ANCHOR id="NM-REMOTE-CONNECTION-DBUS-CONNECTION:CAPS" href="libnm/NMRemoteConnection.html#NM-REMOTE-CONNECTION-DBUS-CONNECTION:CAPS">
+<ANCHOR id="NM-REMOTE-CONNECTION-PATH:CAPS" href="libnm/NMRemoteConnection.html#NM-REMOTE-CONNECTION-PATH:CAPS">
+<ANCHOR id="NM-REMOTE-CONNECTION-UNSAVED:CAPS" href="libnm/NMRemoteConnection.html#NM-REMOTE-CONNECTION-UNSAVED:CAPS">
+<ANCHOR id="NM-REMOTE-CONNECTION-VISIBLE:CAPS" href="libnm/NMRemoteConnection.html#NM-REMOTE-CONNECTION-VISIBLE:CAPS">
+<ANCHOR id="NMRemoteConnection-struct" href="libnm/NMRemoteConnection.html#NMRemoteConnection-struct">
+<ANCHOR id="NMRemoteConnectionClass" href="libnm/NMRemoteConnection.html#NMRemoteConnectionClass">
+<ANCHOR id="nm-remote-connection-commit-changes" href="libnm/NMRemoteConnection.html#nm-remote-connection-commit-changes">
+<ANCHOR id="nm-remote-connection-commit-changes-async" href="libnm/NMRemoteConnection.html#nm-remote-connection-commit-changes-async">
+<ANCHOR id="nm-remote-connection-commit-changes-finish" href="libnm/NMRemoteConnection.html#nm-remote-connection-commit-changes-finish">
+<ANCHOR id="nm-remote-connection-save" href="libnm/NMRemoteConnection.html#nm-remote-connection-save">
+<ANCHOR id="nm-remote-connection-save-async" href="libnm/NMRemoteConnection.html#nm-remote-connection-save-async">
+<ANCHOR id="nm-remote-connection-save-finish" href="libnm/NMRemoteConnection.html#nm-remote-connection-save-finish">
+<ANCHOR id="nm-remote-connection-delete" href="libnm/NMRemoteConnection.html#nm-remote-connection-delete">
+<ANCHOR id="nm-remote-connection-delete-async" href="libnm/NMRemoteConnection.html#nm-remote-connection-delete-async">
+<ANCHOR id="nm-remote-connection-delete-finish" href="libnm/NMRemoteConnection.html#nm-remote-connection-delete-finish">
+<ANCHOR id="nm-remote-connection-get-secrets" href="libnm/NMRemoteConnection.html#nm-remote-connection-get-secrets">
+<ANCHOR id="nm-remote-connection-get-secrets-async" href="libnm/NMRemoteConnection.html#nm-remote-connection-get-secrets-async">
+<ANCHOR id="nm-remote-connection-get-secrets-finish" href="libnm/NMRemoteConnection.html#nm-remote-connection-get-secrets-finish">
+<ANCHOR id="nm-remote-connection-get-unsaved" href="libnm/NMRemoteConnection.html#nm-remote-connection-get-unsaved">
+<ANCHOR id="nm-remote-connection-get-visible" href="libnm/NMRemoteConnection.html#nm-remote-connection-get-visible">
+<ANCHOR id="NMRemoteConnection.property-details" href="libnm/NMRemoteConnection.html#NMRemoteConnection.property-details">
+<ANCHOR id="NMRemoteConnection--unsaved" href="libnm/NMRemoteConnection.html#NMRemoteConnection--unsaved">
+<ANCHOR id="NMRemoteConnection--visible" href="libnm/NMRemoteConnection.html#NMRemoteConnection--visible">
+<ANCHOR id="NMAccessPoint" href="libnm/NMAccessPoint.html">
+<ANCHOR id="NMAccessPoint.synopsis" href="libnm/NMAccessPoint.html#NMAccessPoint.synopsis">
+<ANCHOR id="NMAccessPoint.object-hierarchy" href="libnm/NMAccessPoint.html#NMAccessPoint.object-hierarchy">
+<ANCHOR id="NMAccessPoint.implemented-interfaces" href="libnm/NMAccessPoint.html#NMAccessPoint.implemented-interfaces">
+<ANCHOR id="NMAccessPoint.properties" href="libnm/NMAccessPoint.html#NMAccessPoint.properties">
+<ANCHOR id="NMAccessPoint.description" href="libnm/NMAccessPoint.html#NMAccessPoint.description">
+<ANCHOR id="NMAccessPoint.details" href="libnm/NMAccessPoint.html#NMAccessPoint.details">
+<ANCHOR id="NM-ACCESS-POINT-FLAGS:CAPS" href="libnm/NMAccessPoint.html#NM-ACCESS-POINT-FLAGS:CAPS">
+<ANCHOR id="NM-ACCESS-POINT-WPA-FLAGS:CAPS" href="libnm/NMAccessPoint.html#NM-ACCESS-POINT-WPA-FLAGS:CAPS">
+<ANCHOR id="NM-ACCESS-POINT-RSN-FLAGS:CAPS" href="libnm/NMAccessPoint.html#NM-ACCESS-POINT-RSN-FLAGS:CAPS">
+<ANCHOR id="NM-ACCESS-POINT-SSID:CAPS" href="libnm/NMAccessPoint.html#NM-ACCESS-POINT-SSID:CAPS">
+<ANCHOR id="NM-ACCESS-POINT-BSSID:CAPS" href="libnm/NMAccessPoint.html#NM-ACCESS-POINT-BSSID:CAPS">
+<ANCHOR id="NM-ACCESS-POINT-FREQUENCY:CAPS" href="libnm/NMAccessPoint.html#NM-ACCESS-POINT-FREQUENCY:CAPS">
+<ANCHOR id="NM-ACCESS-POINT-MODE:CAPS" href="libnm/NMAccessPoint.html#NM-ACCESS-POINT-MODE:CAPS">
+<ANCHOR id="NM-ACCESS-POINT-MAX-BITRATE:CAPS" href="libnm/NMAccessPoint.html#NM-ACCESS-POINT-MAX-BITRATE:CAPS">
+<ANCHOR id="NM-ACCESS-POINT-STRENGTH:CAPS" href="libnm/NMAccessPoint.html#NM-ACCESS-POINT-STRENGTH:CAPS">
+<ANCHOR id="NM-ACCESS-POINT-HW-ADDRESS:CAPS" href="libnm/NMAccessPoint.html#NM-ACCESS-POINT-HW-ADDRESS:CAPS">
+<ANCHOR id="NMAccessPoint-struct" href="libnm/NMAccessPoint.html#NMAccessPoint-struct">
+<ANCHOR id="NMAccessPointClass" href="libnm/NMAccessPoint.html#NMAccessPointClass">
+<ANCHOR id="nm-access-point-get-flags" href="libnm/NMAccessPoint.html#nm-access-point-get-flags">
+<ANCHOR id="nm-access-point-get-wpa-flags" href="libnm/NMAccessPoint.html#nm-access-point-get-wpa-flags">
+<ANCHOR id="nm-access-point-get-rsn-flags" href="libnm/NMAccessPoint.html#nm-access-point-get-rsn-flags">
+<ANCHOR id="nm-access-point-get-ssid" href="libnm/NMAccessPoint.html#nm-access-point-get-ssid">
+<ANCHOR id="nm-access-point-get-bssid" href="libnm/NMAccessPoint.html#nm-access-point-get-bssid">
+<ANCHOR id="nm-access-point-get-frequency" href="libnm/NMAccessPoint.html#nm-access-point-get-frequency">
+<ANCHOR id="nm-access-point-get-mode" href="libnm/NMAccessPoint.html#nm-access-point-get-mode">
+<ANCHOR id="nm-access-point-get-max-bitrate" href="libnm/NMAccessPoint.html#nm-access-point-get-max-bitrate">
+<ANCHOR id="nm-access-point-get-strength" href="libnm/NMAccessPoint.html#nm-access-point-get-strength">
+<ANCHOR id="nm-access-point-filter-connections" href="libnm/NMAccessPoint.html#nm-access-point-filter-connections">
+<ANCHOR id="nm-access-point-connection-valid" href="libnm/NMAccessPoint.html#nm-access-point-connection-valid">
+<ANCHOR id="NMAccessPoint.property-details" href="libnm/NMAccessPoint.html#NMAccessPoint.property-details">
+<ANCHOR id="NMAccessPoint--bssid" href="libnm/NMAccessPoint.html#NMAccessPoint--bssid">
+<ANCHOR id="NMAccessPoint--flags" href="libnm/NMAccessPoint.html#NMAccessPoint--flags">
+<ANCHOR id="NMAccessPoint--frequency" href="libnm/NMAccessPoint.html#NMAccessPoint--frequency">
+<ANCHOR id="NMAccessPoint--hw-address" href="libnm/NMAccessPoint.html#NMAccessPoint--hw-address">
+<ANCHOR id="NMAccessPoint--max-bitrate" href="libnm/NMAccessPoint.html#NMAccessPoint--max-bitrate">
+<ANCHOR id="NMAccessPoint--mode" href="libnm/NMAccessPoint.html#NMAccessPoint--mode">
+<ANCHOR id="NMAccessPoint--rsn-flags" href="libnm/NMAccessPoint.html#NMAccessPoint--rsn-flags">
+<ANCHOR id="NMAccessPoint--ssid" href="libnm/NMAccessPoint.html#NMAccessPoint--ssid">
+<ANCHOR id="NMAccessPoint--strength" href="libnm/NMAccessPoint.html#NMAccessPoint--strength">
+<ANCHOR id="NMAccessPoint--wpa-flags" href="libnm/NMAccessPoint.html#NMAccessPoint--wpa-flags">
+<ANCHOR id="NMWimaxNsp" href="libnm/NMWimaxNsp.html">
+<ANCHOR id="NMWimaxNsp.synopsis" href="libnm/NMWimaxNsp.html#NMWimaxNsp.synopsis">
+<ANCHOR id="NMWimaxNspNetworkType" href="libnm/NMWimaxNsp.html#NMWimaxNspNetworkType">
+<ANCHOR id="NMWimaxNsp.object-hierarchy" href="libnm/NMWimaxNsp.html#NMWimaxNsp.object-hierarchy">
+<ANCHOR id="NMWimaxNsp.implemented-interfaces" href="libnm/NMWimaxNsp.html#NMWimaxNsp.implemented-interfaces">
+<ANCHOR id="NMWimaxNsp.properties" href="libnm/NMWimaxNsp.html#NMWimaxNsp.properties">
+<ANCHOR id="NMWimaxNsp.description" href="libnm/NMWimaxNsp.html#NMWimaxNsp.description">
+<ANCHOR id="NMWimaxNsp.details" href="libnm/NMWimaxNsp.html#NMWimaxNsp.details">
+<ANCHOR id="NM-WIMAX-NSP-NAME:CAPS" href="libnm/NMWimaxNsp.html#NM-WIMAX-NSP-NAME:CAPS">
+<ANCHOR id="NM-WIMAX-NSP-SIGNAL-QUALITY:CAPS" href="libnm/NMWimaxNsp.html#NM-WIMAX-NSP-SIGNAL-QUALITY:CAPS">
+<ANCHOR id="NM-WIMAX-NSP-NETWORK-TYPE:CAPS" href="libnm/NMWimaxNsp.html#NM-WIMAX-NSP-NETWORK-TYPE:CAPS">
+<ANCHOR id="NMWimaxNspNetworkType-enum" href="libnm/NMWimaxNsp.html#NMWimaxNspNetworkType-enum">
+<ANCHOR id="NM-WIMAX-NSP-NETWORK-TYPE-UNKNOWN:CAPS" href="libnm/NMWimaxNsp.html#NM-WIMAX-NSP-NETWORK-TYPE-UNKNOWN:CAPS">
+<ANCHOR id="NM-WIMAX-NSP-NETWORK-TYPE-HOME:CAPS" href="libnm/NMWimaxNsp.html#NM-WIMAX-NSP-NETWORK-TYPE-HOME:CAPS">
+<ANCHOR id="NM-WIMAX-NSP-NETWORK-TYPE-PARTNER:CAPS" href="libnm/NMWimaxNsp.html#NM-WIMAX-NSP-NETWORK-TYPE-PARTNER:CAPS">
+<ANCHOR id="NM-WIMAX-NSP-NETWORK-TYPE-ROAMING-PARTNER:CAPS" href="libnm/NMWimaxNsp.html#NM-WIMAX-NSP-NETWORK-TYPE-ROAMING-PARTNER:CAPS">
+<ANCHOR id="NMWimaxNsp-struct" href="libnm/NMWimaxNsp.html#NMWimaxNsp-struct">
+<ANCHOR id="NMWimaxNspClass" href="libnm/NMWimaxNsp.html#NMWimaxNspClass">
+<ANCHOR id="nm-wimax-nsp-get-name" href="libnm/NMWimaxNsp.html#nm-wimax-nsp-get-name">
+<ANCHOR id="nm-wimax-nsp-get-signal-quality" href="libnm/NMWimaxNsp.html#nm-wimax-nsp-get-signal-quality">
+<ANCHOR id="nm-wimax-nsp-get-network-type" href="libnm/NMWimaxNsp.html#nm-wimax-nsp-get-network-type">
+<ANCHOR id="nm-wimax-nsp-filter-connections" href="libnm/NMWimaxNsp.html#nm-wimax-nsp-filter-connections">
+<ANCHOR id="nm-wimax-nsp-connection-valid" href="libnm/NMWimaxNsp.html#nm-wimax-nsp-connection-valid">
+<ANCHOR id="NMWimaxNsp.property-details" href="libnm/NMWimaxNsp.html#NMWimaxNsp.property-details">
+<ANCHOR id="NMWimaxNsp--name" href="libnm/NMWimaxNsp.html#NMWimaxNsp--name">
+<ANCHOR id="NMWimaxNsp--network-type" href="libnm/NMWimaxNsp.html#NMWimaxNsp--network-type">
+<ANCHOR id="NMWimaxNsp--signal-quality" href="libnm/NMWimaxNsp.html#NMWimaxNsp--signal-quality">
+<ANCHOR id="NMIPConfig" href="libnm/NMIPConfig.html">
+<ANCHOR id="NMIPConfig.synopsis" href="libnm/NMIPConfig.html#NMIPConfig.synopsis">
+<ANCHOR id="NMIPConfig.object-hierarchy" href="libnm/NMIPConfig.html#NMIPConfig.object-hierarchy">
+<ANCHOR id="NMIPConfig.implemented-interfaces" href="libnm/NMIPConfig.html#NMIPConfig.implemented-interfaces">
+<ANCHOR id="NMIPConfig.properties" href="libnm/NMIPConfig.html#NMIPConfig.properties">
+<ANCHOR id="NMIPConfig.description" href="libnm/NMIPConfig.html#NMIPConfig.description">
+<ANCHOR id="NMIPConfig.details" href="libnm/NMIPConfig.html#NMIPConfig.details">
+<ANCHOR id="NMIPConfig-struct" href="libnm/NMIPConfig.html#NMIPConfig-struct">
+<ANCHOR id="NMIPConfigClass" href="libnm/NMIPConfig.html#NMIPConfigClass">
+<ANCHOR id="NM-IP-CONFIG-FAMILY:CAPS" href="libnm/NMIPConfig.html#NM-IP-CONFIG-FAMILY:CAPS">
+<ANCHOR id="NM-IP-CONFIG-GATEWAY:CAPS" href="libnm/NMIPConfig.html#NM-IP-CONFIG-GATEWAY:CAPS">
+<ANCHOR id="NM-IP-CONFIG-ADDRESSES:CAPS" href="libnm/NMIPConfig.html#NM-IP-CONFIG-ADDRESSES:CAPS">
+<ANCHOR id="NM-IP-CONFIG-ROUTES:CAPS" href="libnm/NMIPConfig.html#NM-IP-CONFIG-ROUTES:CAPS">
+<ANCHOR id="NM-IP-CONFIG-NAMESERVERS:CAPS" href="libnm/NMIPConfig.html#NM-IP-CONFIG-NAMESERVERS:CAPS">
+<ANCHOR id="NM-IP-CONFIG-DOMAINS:CAPS" href="libnm/NMIPConfig.html#NM-IP-CONFIG-DOMAINS:CAPS">
+<ANCHOR id="NM-IP-CONFIG-SEARCHES:CAPS" href="libnm/NMIPConfig.html#NM-IP-CONFIG-SEARCHES:CAPS">
+<ANCHOR id="NM-IP-CONFIG-WINS-SERVERS:CAPS" href="libnm/NMIPConfig.html#NM-IP-CONFIG-WINS-SERVERS:CAPS">
+<ANCHOR id="nm-ip-config-get-family" href="libnm/NMIPConfig.html#nm-ip-config-get-family">
+<ANCHOR id="nm-ip-config-get-gateway" href="libnm/NMIPConfig.html#nm-ip-config-get-gateway">
+<ANCHOR id="nm-ip-config-get-addresses" href="libnm/NMIPConfig.html#nm-ip-config-get-addresses">
+<ANCHOR id="nm-ip-config-get-routes" href="libnm/NMIPConfig.html#nm-ip-config-get-routes">
+<ANCHOR id="nm-ip-config-get-nameservers" href="libnm/NMIPConfig.html#nm-ip-config-get-nameservers">
+<ANCHOR id="nm-ip-config-get-domains" href="libnm/NMIPConfig.html#nm-ip-config-get-domains">
+<ANCHOR id="nm-ip-config-get-searches" href="libnm/NMIPConfig.html#nm-ip-config-get-searches">
+<ANCHOR id="nm-ip-config-get-wins-servers" href="libnm/NMIPConfig.html#nm-ip-config-get-wins-servers">
+<ANCHOR id="NMIPConfig.property-details" href="libnm/NMIPConfig.html#NMIPConfig.property-details">
+<ANCHOR id="NMIPConfig--addresses" href="libnm/NMIPConfig.html#NMIPConfig--addresses">
+<ANCHOR id="NMIPConfig--domains" href="libnm/NMIPConfig.html#NMIPConfig--domains">
+<ANCHOR id="NMIPConfig--family" href="libnm/NMIPConfig.html#NMIPConfig--family">
+<ANCHOR id="NMIPConfig--gateway" href="libnm/NMIPConfig.html#NMIPConfig--gateway">
+<ANCHOR id="NMIPConfig--nameservers" href="libnm/NMIPConfig.html#NMIPConfig--nameservers">
+<ANCHOR id="NMIPConfig--routes" href="libnm/NMIPConfig.html#NMIPConfig--routes">
+<ANCHOR id="NMIPConfig--searches" href="libnm/NMIPConfig.html#NMIPConfig--searches">
+<ANCHOR id="NMIPConfig--wins-servers" href="libnm/NMIPConfig.html#NMIPConfig--wins-servers">
+<ANCHOR id="NMDhcpConfig" href="libnm/NMDhcpConfig.html">
+<ANCHOR id="NMDhcpConfig.synopsis" href="libnm/NMDhcpConfig.html#NMDhcpConfig.synopsis">
+<ANCHOR id="NMDhcpConfig.object-hierarchy" href="libnm/NMDhcpConfig.html#NMDhcpConfig.object-hierarchy">
+<ANCHOR id="NMDhcpConfig.implemented-interfaces" href="libnm/NMDhcpConfig.html#NMDhcpConfig.implemented-interfaces">
+<ANCHOR id="NMDhcpConfig.properties" href="libnm/NMDhcpConfig.html#NMDhcpConfig.properties">
+<ANCHOR id="NMDhcpConfig.description" href="libnm/NMDhcpConfig.html#NMDhcpConfig.description">
+<ANCHOR id="NMDhcpConfig.details" href="libnm/NMDhcpConfig.html#NMDhcpConfig.details">
+<ANCHOR id="NMDhcpConfig-struct" href="libnm/NMDhcpConfig.html#NMDhcpConfig-struct">
+<ANCHOR id="NMDhcpConfigClass" href="libnm/NMDhcpConfig.html#NMDhcpConfigClass">
+<ANCHOR id="NM-DHCP-CONFIG-FAMILY:CAPS" href="libnm/NMDhcpConfig.html#NM-DHCP-CONFIG-FAMILY:CAPS">
+<ANCHOR id="NM-DHCP-CONFIG-OPTIONS:CAPS" href="libnm/NMDhcpConfig.html#NM-DHCP-CONFIG-OPTIONS:CAPS">
+<ANCHOR id="nm-dhcp-config-get-family" href="libnm/NMDhcpConfig.html#nm-dhcp-config-get-family">
+<ANCHOR id="nm-dhcp-config-get-options" href="libnm/NMDhcpConfig.html#nm-dhcp-config-get-options">
+<ANCHOR id="nm-dhcp-config-get-one-option" href="libnm/NMDhcpConfig.html#nm-dhcp-config-get-one-option">
+<ANCHOR id="NMDhcpConfig.property-details" href="libnm/NMDhcpConfig.html#NMDhcpConfig.property-details">
+<ANCHOR id="NMDhcpConfig--family" href="libnm/NMDhcpConfig.html#NMDhcpConfig--family">
+<ANCHOR id="NMDhcpConfig--options" href="libnm/NMDhcpConfig.html#NMDhcpConfig--options">
+<ANCHOR id="libnm-nm-utils" href="libnm/libnm-nm-utils.html">
+<ANCHOR id="libnm-nm-utils.synopsis" href="libnm/libnm-nm-utils.html#libnm-nm-utils.synopsis">
+<ANCHOR id="NMUtilsSecurityType" href="libnm/libnm-nm-utils.html#NMUtilsSecurityType">
+<ANCHOR id="libnm-nm-utils.object-hierarchy" href="libnm/libnm-nm-utils.html#libnm-nm-utils.object-hierarchy">
+<ANCHOR id="libnm-nm-utils.description" href="libnm/libnm-nm-utils.html#libnm-nm-utils.description">
+<ANCHOR id="libnm-nm-utils.details" href="libnm/libnm-nm-utils.html#libnm-nm-utils.details">
+<ANCHOR id="nm-utils-is-empty-ssid" href="libnm/libnm-nm-utils.html#nm-utils-is-empty-ssid">
+<ANCHOR id="nm-utils-escape-ssid" href="libnm/libnm-nm-utils.html#nm-utils-escape-ssid">
+<ANCHOR id="nm-utils-same-ssid" href="libnm/libnm-nm-utils.html#nm-utils-same-ssid">
+<ANCHOR id="nm-utils-ssid-to-utf8" href="libnm/libnm-nm-utils.html#nm-utils-ssid-to-utf8">
+<ANCHOR id="NMUtilsSecurityType-enum" href="libnm/libnm-nm-utils.html#NMUtilsSecurityType-enum">
+<ANCHOR id="NMU-SEC-INVALID:CAPS" href="libnm/libnm-nm-utils.html#NMU-SEC-INVALID:CAPS">
+<ANCHOR id="NMU-SEC-NONE:CAPS" href="libnm/libnm-nm-utils.html#NMU-SEC-NONE:CAPS">
+<ANCHOR id="NMU-SEC-STATIC-WEP:CAPS" href="libnm/libnm-nm-utils.html#NMU-SEC-STATIC-WEP:CAPS">
+<ANCHOR id="NMU-SEC-LEAP:CAPS" href="libnm/libnm-nm-utils.html#NMU-SEC-LEAP:CAPS">
+<ANCHOR id="NMU-SEC-DYNAMIC-WEP:CAPS" href="libnm/libnm-nm-utils.html#NMU-SEC-DYNAMIC-WEP:CAPS">
+<ANCHOR id="NMU-SEC-WPA-PSK:CAPS" href="libnm/libnm-nm-utils.html#NMU-SEC-WPA-PSK:CAPS">
+<ANCHOR id="NMU-SEC-WPA-ENTERPRISE:CAPS" href="libnm/libnm-nm-utils.html#NMU-SEC-WPA-ENTERPRISE:CAPS">
+<ANCHOR id="NMU-SEC-WPA2-PSK:CAPS" href="libnm/libnm-nm-utils.html#NMU-SEC-WPA2-PSK:CAPS">
+<ANCHOR id="NMU-SEC-WPA2-ENTERPRISE:CAPS" href="libnm/libnm-nm-utils.html#NMU-SEC-WPA2-ENTERPRISE:CAPS">
+<ANCHOR id="nm-utils-security-valid" href="libnm/libnm-nm-utils.html#nm-utils-security-valid">
+<ANCHOR id="nm-utils-ap-mode-security-valid" href="libnm/libnm-nm-utils.html#nm-utils-ap-mode-security-valid">
+<ANCHOR id="nm-utils-wep-key-valid" href="libnm/libnm-nm-utils.html#nm-utils-wep-key-valid">
+<ANCHOR id="nm-utils-wpa-psk-valid" href="libnm/libnm-nm-utils.html#nm-utils-wpa-psk-valid">
+<ANCHOR id="nm-utils-ip4-dns-to-variant" href="libnm/libnm-nm-utils.html#nm-utils-ip4-dns-to-variant">
+<ANCHOR id="nm-utils-ip4-dns-from-variant" href="libnm/libnm-nm-utils.html#nm-utils-ip4-dns-from-variant">
+<ANCHOR id="nm-utils-ip4-addresses-to-variant" href="libnm/libnm-nm-utils.html#nm-utils-ip4-addresses-to-variant">
+<ANCHOR id="nm-utils-ip4-addresses-from-variant" href="libnm/libnm-nm-utils.html#nm-utils-ip4-addresses-from-variant">
+<ANCHOR id="nm-utils-ip4-routes-to-variant" href="libnm/libnm-nm-utils.html#nm-utils-ip4-routes-to-variant">
+<ANCHOR id="nm-utils-ip4-routes-from-variant" href="libnm/libnm-nm-utils.html#nm-utils-ip4-routes-from-variant">
+<ANCHOR id="nm-utils-ip4-netmask-to-prefix" href="libnm/libnm-nm-utils.html#nm-utils-ip4-netmask-to-prefix">
+<ANCHOR id="nm-utils-ip4-prefix-to-netmask" href="libnm/libnm-nm-utils.html#nm-utils-ip4-prefix-to-netmask">
+<ANCHOR id="nm-utils-ip4-get-default-prefix" href="libnm/libnm-nm-utils.html#nm-utils-ip4-get-default-prefix">
+<ANCHOR id="nm-utils-ip6-dns-to-variant" href="libnm/libnm-nm-utils.html#nm-utils-ip6-dns-to-variant">
+<ANCHOR id="nm-utils-ip6-dns-from-variant" href="libnm/libnm-nm-utils.html#nm-utils-ip6-dns-from-variant">
+<ANCHOR id="nm-utils-ip6-addresses-to-variant" href="libnm/libnm-nm-utils.html#nm-utils-ip6-addresses-to-variant">
+<ANCHOR id="nm-utils-ip6-addresses-from-variant" href="libnm/libnm-nm-utils.html#nm-utils-ip6-addresses-from-variant">
+<ANCHOR id="nm-utils-ip6-routes-to-variant" href="libnm/libnm-nm-utils.html#nm-utils-ip6-routes-to-variant">
+<ANCHOR id="nm-utils-ip6-routes-from-variant" href="libnm/libnm-nm-utils.html#nm-utils-ip6-routes-from-variant">
+<ANCHOR id="nm-utils-ip-addresses-to-variant" href="libnm/libnm-nm-utils.html#nm-utils-ip-addresses-to-variant">
+<ANCHOR id="nm-utils-ip-addresses-from-variant" href="libnm/libnm-nm-utils.html#nm-utils-ip-addresses-from-variant">
+<ANCHOR id="nm-utils-ip-routes-to-variant" href="libnm/libnm-nm-utils.html#nm-utils-ip-routes-to-variant">
+<ANCHOR id="nm-utils-ip-routes-from-variant" href="libnm/libnm-nm-utils.html#nm-utils-ip-routes-from-variant">
+<ANCHOR id="nm-utils-uuid-generate" href="libnm/libnm-nm-utils.html#nm-utils-uuid-generate">
+<ANCHOR id="nm-utils-file-is-certificate" href="libnm/libnm-nm-utils.html#nm-utils-file-is-certificate">
+<ANCHOR id="nm-utils-file-is-private-key" href="libnm/libnm-nm-utils.html#nm-utils-file-is-private-key">
+<ANCHOR id="nm-utils-file-is-pkcs12" href="libnm/libnm-nm-utils.html#nm-utils-file-is-pkcs12">
+<ANCHOR id="NMUtilsFileSearchInPathsPredicate" href="libnm/libnm-nm-utils.html#NMUtilsFileSearchInPathsPredicate">
+<ANCHOR id="nm-utils-file-search-in-paths" href="libnm/libnm-nm-utils.html#nm-utils-file-search-in-paths">
+<ANCHOR id="nm-utils-wifi-freq-to-channel" href="libnm/libnm-nm-utils.html#nm-utils-wifi-freq-to-channel">
+<ANCHOR id="nm-utils-wifi-channel-to-freq" href="libnm/libnm-nm-utils.html#nm-utils-wifi-channel-to-freq">
+<ANCHOR id="nm-utils-wifi-find-next-channel" href="libnm/libnm-nm-utils.html#nm-utils-wifi-find-next-channel">
+<ANCHOR id="nm-utils-wifi-is-channel-valid" href="libnm/libnm-nm-utils.html#nm-utils-wifi-is-channel-valid">
+<ANCHOR id="nm-utils-wifi-strength-bars" href="libnm/libnm-nm-utils.html#nm-utils-wifi-strength-bars">
+<ANCHOR id="NM-UTILS-HWADDR-LEN-MAX:CAPS" href="libnm/libnm-nm-utils.html#NM-UTILS-HWADDR-LEN-MAX:CAPS">
+<ANCHOR id="nm-utils-hwaddr-len" href="libnm/libnm-nm-utils.html#nm-utils-hwaddr-len">
+<ANCHOR id="nm-utils-hwaddr-ntoa" href="libnm/libnm-nm-utils.html#nm-utils-hwaddr-ntoa">
+<ANCHOR id="nm-utils-hwaddr-atoba" href="libnm/libnm-nm-utils.html#nm-utils-hwaddr-atoba">
+<ANCHOR id="nm-utils-hwaddr-aton" href="libnm/libnm-nm-utils.html#nm-utils-hwaddr-aton">
+<ANCHOR id="nm-utils-hwaddr-valid" href="libnm/libnm-nm-utils.html#nm-utils-hwaddr-valid">
+<ANCHOR id="nm-utils-hwaddr-canonical" href="libnm/libnm-nm-utils.html#nm-utils-hwaddr-canonical">
+<ANCHOR id="nm-utils-hwaddr-matches" href="libnm/libnm-nm-utils.html#nm-utils-hwaddr-matches">
+<ANCHOR id="nm-utils-bin2hexstr" href="libnm/libnm-nm-utils.html#nm-utils-bin2hexstr">
+<ANCHOR id="nm-utils-hexstr2bin" href="libnm/libnm-nm-utils.html#nm-utils-hexstr2bin">
+<ANCHOR id="nm-utils-iface-valid-name" href="libnm/libnm-nm-utils.html#nm-utils-iface-valid-name">
+<ANCHOR id="nm-utils-is-uuid" href="libnm/libnm-nm-utils.html#nm-utils-is-uuid">
+<ANCHOR id="NM-UTILS-INET-ADDRSTRLEN:CAPS" href="libnm/libnm-nm-utils.html#NM-UTILS-INET-ADDRSTRLEN:CAPS">
+<ANCHOR id="nm-utils-inet4-ntop" href="libnm/libnm-nm-utils.html#nm-utils-inet4-ntop">
+<ANCHOR id="nm-utils-inet6-ntop" href="libnm/libnm-nm-utils.html#nm-utils-inet6-ntop">
+<ANCHOR id="nm-utils-ipaddr-valid" href="libnm/libnm-nm-utils.html#nm-utils-ipaddr-valid">
+<ANCHOR id="nm-utils-check-virtual-device-compatibility" href="libnm/libnm-nm-utils.html#nm-utils-check-virtual-device-compatibility">
+<ANCHOR id="libnm-nm-version" href="libnm/libnm-nm-version.html">
+<ANCHOR id="libnm-nm-version.synopsis" href="libnm/libnm-nm-version.html#libnm-nm-version.synopsis">
+<ANCHOR id="libnm-nm-version.description" href="libnm/libnm-nm-version.html#libnm-nm-version.description">
+<ANCHOR id="libnm-nm-version.details" href="libnm/libnm-nm-version.html#libnm-nm-version.details">
+<ANCHOR id="NM-MAJOR-VERSION:CAPS" href="libnm/libnm-nm-version.html#NM-MAJOR-VERSION:CAPS">
+<ANCHOR id="NM-MINOR-VERSION:CAPS" href="libnm/libnm-nm-version.html#NM-MINOR-VERSION:CAPS">
+<ANCHOR id="NM-MICRO-VERSION:CAPS" href="libnm/libnm-nm-version.html#NM-MICRO-VERSION:CAPS">
+<ANCHOR id="NM-CHECK-VERSION:CAPS" href="libnm/libnm-nm-version.html#NM-CHECK-VERSION:CAPS">
+<ANCHOR id="NM-ENCODE-VERSION:CAPS" href="libnm/libnm-nm-version.html#NM-ENCODE-VERSION:CAPS">
+<ANCHOR id="NM-VERSION-0-9-8:CAPS" href="libnm/libnm-nm-version.html#NM-VERSION-0-9-8:CAPS">
+<ANCHOR id="NM-VERSION-0-9-10:CAPS" href="libnm/libnm-nm-version.html#NM-VERSION-0-9-10:CAPS">
+<ANCHOR id="NM-VERSION-1-0:CAPS" href="libnm/libnm-nm-version.html#NM-VERSION-1-0:CAPS">
+<ANCHOR id="NM-VERSION-CUR-STABLE:CAPS" href="libnm/libnm-nm-version.html#NM-VERSION-CUR-STABLE:CAPS">
+<ANCHOR id="NM-VERSION-NEXT-STABLE:CAPS" href="libnm/libnm-nm-version.html#NM-VERSION-NEXT-STABLE:CAPS">
+<ANCHOR id="NM-VERSION-MIN-REQUIRED:CAPS" href="libnm/libnm-nm-version.html#NM-VERSION-MIN-REQUIRED:CAPS">
+<ANCHOR id="NM-VERSION-MAX-ALLOWED:CAPS" href="libnm/libnm-nm-version.html#NM-VERSION-MAX-ALLOWED:CAPS">
+<ANCHOR id="NM-DEPRECATED-IN-0-9-10:CAPS" href="libnm/libnm-nm-version.html#NM-DEPRECATED-IN-0-9-10:CAPS">
+<ANCHOR id="NM-DEPRECATED-IN-0-9-10-FOR:CAPS" href="libnm/libnm-nm-version.html#NM-DEPRECATED-IN-0-9-10-FOR:CAPS">
+<ANCHOR id="NM-DEPRECATED-IN-1-0:CAPS" href="libnm/libnm-nm-version.html#NM-DEPRECATED-IN-1-0:CAPS">
+<ANCHOR id="NM-DEPRECATED-IN-1-0-FOR:CAPS" href="libnm/libnm-nm-version.html#NM-DEPRECATED-IN-1-0-FOR:CAPS">
+<ANCHOR id="NM-AVAILABLE-IN-0-9-10:CAPS" href="libnm/libnm-nm-version.html#NM-AVAILABLE-IN-0-9-10:CAPS">
+<ANCHOR id="NM-AVAILABLE-IN-1-0:CAPS" href="libnm/libnm-nm-version.html#NM-AVAILABLE-IN-1-0:CAPS">
+<ANCHOR id="libnm-nm-vpn-dbus-interface" href="libnm/libnm-nm-vpn-dbus-interface.html">
+<ANCHOR id="libnm-nm-vpn-dbus-interface.synopsis" href="libnm/libnm-nm-vpn-dbus-interface.html#libnm-nm-vpn-dbus-interface.synopsis">
+<ANCHOR id="NMVpnServiceState" href="libnm/libnm-nm-vpn-dbus-interface.html#NMVpnServiceState">
+<ANCHOR id="NMVpnConnectionState" href="libnm/libnm-nm-vpn-dbus-interface.html#NMVpnConnectionState">
+<ANCHOR id="NMVpnConnectionStateReason" href="libnm/libnm-nm-vpn-dbus-interface.html#NMVpnConnectionStateReason">
+<ANCHOR id="NMVpnPluginFailure" href="libnm/libnm-nm-vpn-dbus-interface.html#NMVpnPluginFailure">
+<ANCHOR id="libnm-nm-vpn-dbus-interface.object-hierarchy" href="libnm/libnm-nm-vpn-dbus-interface.html#libnm-nm-vpn-dbus-interface.object-hierarchy">
+<ANCHOR id="libnm-nm-vpn-dbus-interface.description" href="libnm/libnm-nm-vpn-dbus-interface.html#libnm-nm-vpn-dbus-interface.description">
+<ANCHOR id="libnm-nm-vpn-dbus-interface.details" href="libnm/libnm-nm-vpn-dbus-interface.html#libnm-nm-vpn-dbus-interface.details">
+<ANCHOR id="NM-DBUS-PATH-VPN:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-DBUS-PATH-VPN:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-VPN:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-DBUS-INTERFACE-VPN:CAPS">
+<ANCHOR id="NM-DBUS-PATH-VPN-CONNECTION:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-DBUS-PATH-VPN-CONNECTION:CAPS">
+<ANCHOR id="NM-DBUS-INTERFACE-VPN-CONNECTION:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-DBUS-INTERFACE-VPN-CONNECTION:CAPS">
+<ANCHOR id="NM-VPN-DBUS-PLUGIN-PATH:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-DBUS-PLUGIN-PATH:CAPS">
+<ANCHOR id="NM-VPN-DBUS-PLUGIN-INTERFACE:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-DBUS-PLUGIN-INTERFACE:CAPS">
+<ANCHOR id="NM-DBUS-NO-ACTIVE-VPN-CONNECTION:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-DBUS-NO-ACTIVE-VPN-CONNECTION:CAPS">
+<ANCHOR id="NM-DBUS-NO-VPN-CONNECTIONS:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-DBUS-NO-VPN-CONNECTIONS:CAPS">
+<ANCHOR id="NM-DBUS-INVALID-VPN-CONNECTION:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-DBUS-INVALID-VPN-CONNECTION:CAPS">
+<ANCHOR id="NM-DBUS-VPN-ERROR-PREFIX:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-ERROR-PREFIX:CAPS">
+<ANCHOR id="NM-DBUS-VPN-STARTING-IN-PROGRESS:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-STARTING-IN-PROGRESS:CAPS">
+<ANCHOR id="NM-DBUS-VPN-ALREADY-STARTED:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-ALREADY-STARTED:CAPS">
+<ANCHOR id="NM-DBUS-VPN-STOPPING-IN-PROGRESS:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-STOPPING-IN-PROGRESS:CAPS">
+<ANCHOR id="NM-DBUS-VPN-ALREADY-STOPPED:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-ALREADY-STOPPED:CAPS">
+<ANCHOR id="NM-DBUS-VPN-WRONG-STATE:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-WRONG-STATE:CAPS">
+<ANCHOR id="NM-DBUS-VPN-BAD-ARGUMENTS:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-BAD-ARGUMENTS:CAPS">
+<ANCHOR id="NM-DBUS-VPN-INTERACTIVE-NOT-SUPPORTED:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-INTERACTIVE-NOT-SUPPORTED:CAPS">
+<ANCHOR id="NM-DBUS-VPN-SIGNAL-LOGIN-BANNER:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-SIGNAL-LOGIN-BANNER:CAPS">
+<ANCHOR id="NM-DBUS-VPN-SIGNAL-LOGIN-FAILED:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-SIGNAL-LOGIN-FAILED:CAPS">
+<ANCHOR id="NM-DBUS-VPN-SIGNAL-LAUNCH-FAILED:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-SIGNAL-LAUNCH-FAILED:CAPS">
+<ANCHOR id="NM-DBUS-VPN-SIGNAL-CONNECT-FAILED:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-SIGNAL-CONNECT-FAILED:CAPS">
+<ANCHOR id="NM-DBUS-VPN-SIGNAL-VPN-CONFIG-BAD:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-SIGNAL-VPN-CONFIG-BAD:CAPS">
+<ANCHOR id="NM-DBUS-VPN-SIGNAL-IP-CONFIG-BAD:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-SIGNAL-IP-CONFIG-BAD:CAPS">
+<ANCHOR id="NM-DBUS-VPN-SIGNAL-STATE-CHANGE:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-SIGNAL-STATE-CHANGE:CAPS">
+<ANCHOR id="NM-DBUS-VPN-SIGNAL-IP4-CONFIG:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-SIGNAL-IP4-CONFIG:CAPS">
+<ANCHOR id="NMVpnServiceState-enum" href="libnm/libnm-nm-vpn-dbus-interface.html#NMVpnServiceState-enum">
+<ANCHOR id="NM-VPN-SERVICE-STATE-UNKNOWN:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-SERVICE-STATE-UNKNOWN:CAPS">
+<ANCHOR id="NM-VPN-SERVICE-STATE-INIT:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-SERVICE-STATE-INIT:CAPS">
+<ANCHOR id="NM-VPN-SERVICE-STATE-SHUTDOWN:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-SERVICE-STATE-SHUTDOWN:CAPS">
+<ANCHOR id="NM-VPN-SERVICE-STATE-STARTING:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-SERVICE-STATE-STARTING:CAPS">
+<ANCHOR id="NM-VPN-SERVICE-STATE-STARTED:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-SERVICE-STATE-STARTED:CAPS">
+<ANCHOR id="NM-VPN-SERVICE-STATE-STOPPING:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-SERVICE-STATE-STOPPING:CAPS">
+<ANCHOR id="NM-VPN-SERVICE-STATE-STOPPED:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-SERVICE-STATE-STOPPED:CAPS">
+<ANCHOR id="NMVpnConnectionState-enum" href="libnm/libnm-nm-vpn-dbus-interface.html#NMVpnConnectionState-enum">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-UNKNOWN:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-UNKNOWN:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-PREPARE:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-PREPARE:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-NEED-AUTH:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-NEED-AUTH:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-CONNECT:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-CONNECT:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-IP-CONFIG-GET:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-IP-CONFIG-GET:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-ACTIVATED:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-ACTIVATED:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-FAILED:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-FAILED:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-DISCONNECTED:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-DISCONNECTED:CAPS">
+<ANCHOR id="NMVpnConnectionStateReason-enum" href="libnm/libnm-nm-vpn-dbus-interface.html#NMVpnConnectionStateReason-enum">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-REASON-UNKNOWN:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-REASON-UNKNOWN:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-REASON-NONE:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-REASON-NONE:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-REASON-USER-DISCONNECTED:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-REASON-USER-DISCONNECTED:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-REASON-DEVICE-DISCONNECTED:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-REASON-DEVICE-DISCONNECTED:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-REASON-SERVICE-STOPPED:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-REASON-SERVICE-STOPPED:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-REASON-IP-CONFIG-INVALID:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-REASON-IP-CONFIG-INVALID:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-REASON-CONNECT-TIMEOUT:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-REASON-CONNECT-TIMEOUT:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-REASON-SERVICE-START-TIMEOUT:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-REASON-SERVICE-START-TIMEOUT:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-REASON-SERVICE-START-FAILED:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-REASON-SERVICE-START-FAILED:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-REASON-NO-SECRETS:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-REASON-NO-SECRETS:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-REASON-LOGIN-FAILED:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-REASON-LOGIN-FAILED:CAPS">
+<ANCHOR id="NM-VPN-CONNECTION-STATE-REASON-CONNECTION-REMOVED:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-REASON-CONNECTION-REMOVED:CAPS">
+<ANCHOR id="NMVpnPluginFailure-enum" href="libnm/libnm-nm-vpn-dbus-interface.html#NMVpnPluginFailure-enum">
+<ANCHOR id="NM-VPN-PLUGIN-FAILURE-LOGIN-FAILED:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-FAILURE-LOGIN-FAILED:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-FAILURE-CONNECT-FAILED:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-FAILURE-CONNECT-FAILED:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-FAILURE-BAD-IP-CONFIG:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-FAILURE-BAD-IP-CONFIG:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-CONFIG-TUNDEV:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-CONFIG-TUNDEV:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-CONFIG-BANNER:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-CONFIG-BANNER:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-CONFIG-EXT-GATEWAY:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-CONFIG-EXT-GATEWAY:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-CONFIG-MTU:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-CONFIG-MTU:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-CONFIG-HAS-IP4:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-CONFIG-HAS-IP4:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-CONFIG-HAS-IP6:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-CONFIG-HAS-IP6:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-CAN-PERSIST:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-CAN-PERSIST:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP4-CONFIG-INT-GATEWAY:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-INT-GATEWAY:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP4-CONFIG-ADDRESS:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-ADDRESS:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP4-CONFIG-PTP:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-PTP:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP4-CONFIG-PREFIX:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-PREFIX:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP4-CONFIG-DNS:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-DNS:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP4-CONFIG-NBNS:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-NBNS:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP4-CONFIG-MSS:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-MSS:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP4-CONFIG-DOMAIN:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-DOMAIN:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP4-CONFIG-DOMAINS:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-DOMAINS:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP4-CONFIG-ROUTES:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-ROUTES:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP4-CONFIG-NEVER-DEFAULT:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-NEVER-DEFAULT:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP4-CONFIG-GATEWAY:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-GATEWAY:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP4-CONFIG-BANNER:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-BANNER:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP4-CONFIG-EXT-GATEWAY:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-EXT-GATEWAY:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP4-CONFIG-MTU:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-MTU:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP4-CONFIG-TUNDEV:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-TUNDEV:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP6-CONFIG-INT-GATEWAY:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-INT-GATEWAY:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP6-CONFIG-ADDRESS:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-ADDRESS:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP6-CONFIG-PTP:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-PTP:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP6-CONFIG-PREFIX:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-PREFIX:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP6-CONFIG-DNS:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-DNS:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP6-CONFIG-MSS:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-MSS:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP6-CONFIG-DOMAIN:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-DOMAIN:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP6-CONFIG-DOMAINS:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-DOMAINS:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP6-CONFIG-ROUTES:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-ROUTES:CAPS">
+<ANCHOR id="NM-VPN-PLUGIN-IP6-CONFIG-NEVER-DEFAULT:CAPS" href="libnm/libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-NEVER-DEFAULT:CAPS">
+<ANCHOR id="libnm-NMVpnEditorPlugin" href="libnm/libnm-NMVpnEditorPlugin.html">
+<ANCHOR id="libnm-NMVpnEditorPlugin.synopsis" href="libnm/libnm-NMVpnEditorPlugin.html#libnm-NMVpnEditorPlugin.synopsis">
+<ANCHOR id="NMVpnEditorPluginCapability" href="libnm/libnm-NMVpnEditorPlugin.html#NMVpnEditorPluginCapability">
+<ANCHOR id="libnm-NMVpnEditorPlugin.object-hierarchy" href="libnm/libnm-NMVpnEditorPlugin.html#libnm-NMVpnEditorPlugin.object-hierarchy">
+<ANCHOR id="libnm-NMVpnEditorPlugin.description" href="libnm/libnm-NMVpnEditorPlugin.html#libnm-NMVpnEditorPlugin.description">
+<ANCHOR id="libnm-NMVpnEditorPlugin.details" href="libnm/libnm-NMVpnEditorPlugin.html#libnm-NMVpnEditorPlugin.details">
+<ANCHOR id="NMVpnEditorPluginFactory" href="libnm/libnm-NMVpnEditorPlugin.html#NMVpnEditorPluginFactory">
+<ANCHOR id="nm-vpn-editor-plugin-factory" href="libnm/libnm-NMVpnEditorPlugin.html#nm-vpn-editor-plugin-factory">
+<ANCHOR id="NMVpnEditorPluginCapability-enum" href="libnm/libnm-NMVpnEditorPlugin.html#NMVpnEditorPluginCapability-enum">
+<ANCHOR id="NM-VPN-EDITOR-PLUGIN-CAPABILITY-NONE:CAPS" href="libnm/libnm-NMVpnEditorPlugin.html#NM-VPN-EDITOR-PLUGIN-CAPABILITY-NONE:CAPS">
+<ANCHOR id="NM-VPN-EDITOR-PLUGIN-CAPABILITY-IMPORT:CAPS" href="libnm/libnm-NMVpnEditorPlugin.html#NM-VPN-EDITOR-PLUGIN-CAPABILITY-IMPORT:CAPS">
+<ANCHOR id="NM-VPN-EDITOR-PLUGIN-CAPABILITY-EXPORT:CAPS" href="libnm/libnm-NMVpnEditorPlugin.html#NM-VPN-EDITOR-PLUGIN-CAPABILITY-EXPORT:CAPS">
+<ANCHOR id="NM-VPN-EDITOR-PLUGIN-CAPABILITY-IPV6:CAPS" href="libnm/libnm-NMVpnEditorPlugin.html#NM-VPN-EDITOR-PLUGIN-CAPABILITY-IPV6:CAPS">
+<ANCHOR id="NM-VPN-EDITOR-PLUGIN-NAME:CAPS" href="libnm/libnm-NMVpnEditorPlugin.html#NM-VPN-EDITOR-PLUGIN-NAME:CAPS">
+<ANCHOR id="NM-VPN-EDITOR-PLUGIN-DESCRIPTION:CAPS" href="libnm/libnm-NMVpnEditorPlugin.html#NM-VPN-EDITOR-PLUGIN-DESCRIPTION:CAPS">
+<ANCHOR id="NM-VPN-EDITOR-PLUGIN-SERVICE:CAPS" href="libnm/libnm-NMVpnEditorPlugin.html#NM-VPN-EDITOR-PLUGIN-SERVICE:CAPS">
+<ANCHOR id="NMVpnEditorPluginInterface" href="libnm/libnm-NMVpnEditorPlugin.html#NMVpnEditorPluginInterface">
+<ANCHOR id="nm-vpn-editor-plugin-get-editor" href="libnm/libnm-NMVpnEditorPlugin.html#nm-vpn-editor-plugin-get-editor">
+<ANCHOR id="nm-vpn-editor-plugin-get-capabilities" href="libnm/libnm-NMVpnEditorPlugin.html#nm-vpn-editor-plugin-get-capabilities">
+<ANCHOR id="nm-vpn-editor-plugin-import" href="libnm/libnm-NMVpnEditorPlugin.html#nm-vpn-editor-plugin-import">
+<ANCHOR id="nm-vpn-editor-plugin-export" href="libnm/libnm-NMVpnEditorPlugin.html#nm-vpn-editor-plugin-export">
+<ANCHOR id="nm-vpn-editor-plugin-get-suggested-filename" href="libnm/libnm-NMVpnEditorPlugin.html#nm-vpn-editor-plugin-get-suggested-filename">
+<ANCHOR id="NMVpnEditorInterface" href="libnm/libnm-NMVpnEditorPlugin.html#NMVpnEditorInterface">
+<ANCHOR id="nm-vpn-editor-get-widget" href="libnm/libnm-NMVpnEditorPlugin.html#nm-vpn-editor-get-widget">
+<ANCHOR id="nm-vpn-editor-update-connection" href="libnm/libnm-NMVpnEditorPlugin.html#nm-vpn-editor-update-connection">
+<ANCHOR id="annotation-glossterm-allow-none" href="libnm/annotation-glossary.html#annotation-glossterm-allow-none">
+<ANCHOR id="annotation-glossterm-array" href="libnm/annotation-glossary.html#annotation-glossterm-array">
+<ANCHOR id="annotation-glossterm-closure" href="libnm/annotation-glossary.html#annotation-glossterm-closure">
+<ANCHOR id="annotation-glossterm-element-type" href="libnm/annotation-glossary.html#annotation-glossterm-element-type">
+<ANCHOR id="annotation-glossterm-inout" href="libnm/annotation-glossary.html#annotation-glossterm-inout">
+<ANCHOR id="annotation-glossterm-out" href="libnm/annotation-glossary.html#annotation-glossterm-out">
+<ANCHOR id="annotation-glossterm-scope async" href="libnm/annotation-glossary.html#annotation-glossterm-scope async">
+<ANCHOR id="annotation-glossterm-scope call" href="libnm/annotation-glossary.html#annotation-glossterm-scope call">
+<ANCHOR id="annotation-glossterm-transfer container" href="libnm/annotation-glossary.html#annotation-glossterm-transfer container">
+<ANCHOR id="annotation-glossterm-transfer full" href="libnm/annotation-glossary.html#annotation-glossterm-transfer full">
+<ANCHOR id="annotation-glossterm-transfer none" href="libnm/annotation-glossary.html#annotation-glossterm-transfer none">
+<ANCHOR id="annotation-glossterm-type" href="libnm/annotation-glossary.html#annotation-glossterm-type">
diff --git a/docs/libnm/html/left.png b/docs/libnm/html/left.png
new file mode 100644
index 000000000..2d05b3d5b
--- /dev/null
+++ b/docs/libnm/html/left.png
Binary files differ
diff --git a/docs/libnm/html/libnm-NMConnection.html b/docs/libnm/html/libnm-NMConnection.html
new file mode 100644
index 000000000..46e2ba75e
--- /dev/null
+++ b/docs/libnm/html/libnm-NMConnection.html
@@ -0,0 +1,1868 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMConnection</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch03.html" title="Connection and Setting API Reference">
+<link rel="prev" href="ch03.html" title="Connection and Setting API Reference">
+<link rel="next" href="NMSimpleConnection.html" title="NMSimpleConnection">
+<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="ch03.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch03.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 Reference Manual</th>
+<td><a accesskey="n" href="NMSimpleConnection.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-NMConnection.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#libnm-NMConnection.description" class="shortcut">Description</a>
+  | 
+ <a href="#libnm-NMConnection.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="libnm-NMConnection"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="libnm-NMConnection.top_of_page"></a>NMConnection</span></h2>
+<p>NMConnection — Describes a connection to specific network or provider</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="libnm-NMConnection.synopsis"></a><h2>Synopsis</h2>
+<a name="NMConnectionSerializationFlags"></a><pre class="synopsis">#define <a class="link" href="libnm-NMConnection.html#NM-CONNECTION-SECRETS-UPDATED:CAPS" title="NM_CONNECTION_SECRETS_UPDATED">NM_CONNECTION_SECRETS_UPDATED</a>
+#define <a class="link" href="libnm-NMConnection.html#NM-CONNECTION-SECRETS-CLEARED:CAPS" title="NM_CONNECTION_SECRETS_CLEARED">NM_CONNECTION_SECRETS_CLEARED</a>
+#define <a class="link" href="libnm-NMConnection.html#NM-CONNECTION-CHANGED:CAPS" title="NM_CONNECTION_CHANGED">NM_CONNECTION_CHANGED</a>
+#define <a class="link" href="libnm-NMConnection.html#NM-CONNECTION-NORMALIZE-PARAM-IP6-CONFIG-METHOD:CAPS" title="NM_CONNECTION_NORMALIZE_PARAM_IP6_CONFIG_METHOD">NM_CONNECTION_NORMALIZE_PARAM_IP6_CONFIG_METHOD</a>
+ <a class="link" href="libnm-NMConnection.html#NMConnectionInterface" title="NMConnectionInterface">NMConnectionInterface</a>;
+<span class="returnvalue">void</span> <a class="link" href="libnm-NMConnection.html#nm-connection-add-setting" title="nm_connection_add_setting ()">nm_connection_add_setting</a> (<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="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> *setting</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="libnm-NMConnection.html#nm-connection-remove-setting" title="nm_connection_remove_setting ()">nm_connection_remove_setting</a> (<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/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="libnm-NMConnection.html#nm-connection-get-setting" title="nm_connection_get_setting ()">nm_connection_get_setting</a> (<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/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="libnm-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 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> *name</code></em>);
+#define <a class="link" href="libnm-NMConnection.html#NM-VARIANT-TYPE-SETTING:CAPS" title="NM_VARIANT_TYPE_SETTING">NM_VARIANT_TYPE_SETTING</a>
+enum <a class="link" href="libnm-NMConnection.html#NMConnectionSerializationFlags-enum" title="enum NMConnectionSerializationFlags">NMConnectionSerializationFlags</a>;
+<a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="returnvalue">GVariant</span></a> * <a class="link" href="libnm-NMConnection.html#nm-connection-to-dbus" title="nm_connection_to_dbus ()">nm_connection_to_dbus</a> (<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="libnm-NMConnection.html#NMConnectionSerializationFlags"><span class="type">NMConnectionSerializationFlags</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="libnm-NMConnection.html#nm-connection-replace-settings" title="nm_connection_replace_settings ()">nm_connection_replace_settings</a> (<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-GVariant.html#GVariant"><span class="type">GVariant</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>);
+<span class="returnvalue">void</span> <a class="link" href="libnm-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 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="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *new_connection</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="libnm-NMConnection.html#nm-connection-clear-settings" title="nm_connection_clear_settings ()">nm_connection_clear_settings</a> (<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-NMConnection.html#nm-connection-compare" title="nm_connection_compare ()">nm_connection_compare</a> (<em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *a</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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="libnm-NMConnection.html#nm-connection-diff" title="nm_connection_diff ()">nm_connection_diff</a> (<em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *a</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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="libnm-NMConnection.html#nm-connection-verify" title="nm_connection_verify ()">nm_connection_verify</a> (<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-NMConnection.html#nm-connection-normalize" title="nm_connection_normalize ()">nm_connection_normalize</a> (<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> *parameters</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> *modified</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="libnm-NMConnection.html#nm-connection-need-secrets" title="nm_connection_need_secrets ()">nm_connection_need_secrets</a> (<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-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> **hints</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="libnm-NMConnection.html#nm-connection-clear-secrets" title="nm_connection_clear_secrets ()">nm_connection_clear_secrets</a> (<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>);
+<span class="returnvalue">void</span> <a class="link" href="libnm-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 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="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="libnm-NMConnection.html#nm-connection-update-secrets" title="nm_connection_update_secrets ()">nm_connection_update_secrets</a> (<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><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</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="libnm-NMConnection.html#nm-connection-set-path" title="nm_connection_set_path ()">nm_connection_set_path</a> (<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> *path</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="libnm-NMConnection.html#nm-connection-get-path" title="nm_connection_get_path ()">nm_connection_get_path</a> (<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="libnm-NMConnection.html#nm-connection-get-interface-name" title="nm_connection_get_interface_name ()">nm_connection_get_interface_name</a> (<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-NMConnection.html#nm-connection-is-type" title="nm_connection_is_type ()">nm_connection_is_type</a> (<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> *type</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="libnm-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 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="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">void</span> <a class="link" href="libnm-NMConnection.html#nm-connection-dump" title="nm_connection_dump ()">nm_connection_dump</a> (<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="libnm-NMConnection.html#nm-connection-get-uuid" title="nm_connection_get_uuid ()">nm_connection_get_uuid</a> (<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="libnm-NMConnection.html#nm-connection-get-id" title="nm_connection_get_id ()">nm_connection_get_id</a> (<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="libnm-NMConnection.html#nm-connection-get-connection-type" title="nm_connection_get_connection_type ()">nm_connection_get_connection_type</a> (<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-NMConnection.html#nm-connection-is-virtual" title="nm_connection_is_virtual ()">nm_connection_is_virtual</a> (<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>);
+<span class="returnvalue">char</span> * <a class="link" href="libnm-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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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="libnm-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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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="libnm-NMConnection.html#nm-connection-get-setting-bluetooth" title="nm_connection_get_setting_bluetooth ()">nm_connection_get_setting_bluetooth</a>
+ (<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 class="link" href="NMSettingBond.html" title="NMSettingBond"><span class="returnvalue">NMSettingBond</span></a> * <a class="link" href="libnm-NMConnection.html#nm-connection-get-setting-bond" title="nm_connection_get_setting_bond ()">nm_connection_get_setting_bond</a> (<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 class="link" href="NMSettingTeam.html" title="NMSettingTeam"><span class="returnvalue">NMSettingTeam</span></a> * <a class="link" href="libnm-NMConnection.html#nm-connection-get-setting-team" title="nm_connection_get_setting_team ()">nm_connection_get_setting_team</a> (<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 class="link" href="NMSettingTeamPort.html" title="NMSettingTeamPort"><span class="returnvalue">NMSettingTeamPort</span></a> * <a class="link" href="libnm-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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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="libnm-NMConnection.html#nm-connection-get-setting-bridge" title="nm_connection_get_setting_bridge ()">nm_connection_get_setting_bridge</a> (<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 class="link" href="NMSettingBridgePort.html" title="NMSettingBridgePort"><span class="returnvalue">NMSettingBridgePort</span></a> * <a class="link" href="libnm-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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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="libnm-NMConnection.html#nm-connection-get-setting-cdma" title="nm_connection_get_setting_cdma ()">nm_connection_get_setting_cdma</a> (<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 class="link" href="NMSettingConnection.html" title="NMSettingConnection"><span class="returnvalue">NMSettingConnection</span></a> * <a class="link" href="libnm-NMConnection.html#nm-connection-get-setting-connection" title="nm_connection_get_setting_connection ()">nm_connection_get_setting_connection</a>
+ (<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 class="link" href="NMSettingDcb.html" title="NMSettingDcb"><span class="returnvalue">NMSettingDcb</span></a> * <a class="link" href="libnm-NMConnection.html#nm-connection-get-setting-dcb" title="nm_connection_get_setting_dcb ()">nm_connection_get_setting_dcb</a> (<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 class="link" href="NMSettingGeneric.html" title="NMSettingGeneric"><span class="returnvalue">NMSettingGeneric</span></a> * <a class="link" href="libnm-NMConnection.html#nm-connection-get-setting-generic" title="nm_connection_get_setting_generic ()">nm_connection_get_setting_generic</a> (<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 class="link" href="NMSettingGsm.html" title="NMSettingGsm"><span class="returnvalue">NMSettingGsm</span></a> * <a class="link" href="libnm-NMConnection.html#nm-connection-get-setting-gsm" title="nm_connection_get_setting_gsm ()">nm_connection_get_setting_gsm</a> (<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 class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband"><span class="returnvalue">NMSettingInfiniband</span></a> * <a class="link" href="libnm-NMConnection.html#nm-connection-get-setting-infiniband" title="nm_connection_get_setting_infiniband ()">nm_connection_get_setting_infiniband</a>
+ (<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 class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="returnvalue">NMSettingIPConfig</span></a> * <a class="link" href="libnm-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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>);
+<a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="returnvalue">NMSettingIPConfig</span></a> * <a class="link" href="libnm-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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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="libnm-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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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="libnm-NMConnection.html#nm-connection-get-setting-ppp" title="nm_connection_get_setting_ppp ()">nm_connection_get_setting_ppp</a> (<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 class="link" href="NMSettingPppoe.html" title="NMSettingPppoe"><span class="returnvalue">NMSettingPppoe</span></a> * <a class="link" href="libnm-NMConnection.html#nm-connection-get-setting-pppoe" title="nm_connection_get_setting_pppoe ()">nm_connection_get_setting_pppoe</a> (<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 class="link" href="NMSettingSerial.html" title="NMSettingSerial"><span class="returnvalue">NMSettingSerial</span></a> * <a class="link" href="libnm-NMConnection.html#nm-connection-get-setting-serial" title="nm_connection_get_setting_serial ()">nm_connection_get_setting_serial</a> (<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 class="link" href="NMSettingVpn.html" title="NMSettingVpn"><span class="returnvalue">NMSettingVpn</span></a> * <a class="link" href="libnm-NMConnection.html#nm-connection-get-setting-vpn" title="nm_connection_get_setting_vpn ()">nm_connection_get_setting_vpn</a> (<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 class="link" href="NMSettingWimax.html" title="NMSettingWimax"><span class="returnvalue">NMSettingWimax</span></a> * <a class="link" href="libnm-NMConnection.html#nm-connection-get-setting-wimax" title="nm_connection_get_setting_wimax ()">nm_connection_get_setting_wimax</a> (<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 class="link" href="NMSettingAdsl.html" title="NMSettingAdsl"><span class="returnvalue">NMSettingAdsl</span></a> * <a class="link" href="libnm-NMConnection.html#nm-connection-get-setting-adsl" title="nm_connection_get_setting_adsl ()">nm_connection_get_setting_adsl</a> (<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 class="link" href="NMSettingWired.html" title="NMSettingWired"><span class="returnvalue">NMSettingWired</span></a> * <a class="link" href="libnm-NMConnection.html#nm-connection-get-setting-wired" title="nm_connection_get_setting_wired ()">nm_connection_get_setting_wired</a> (<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 class="link" href="NMSettingWireless.html" title="NMSettingWireless"><span class="returnvalue">NMSettingWireless</span></a> * <a class="link" href="libnm-NMConnection.html#nm-connection-get-setting-wireless" title="nm_connection_get_setting_wireless ()">nm_connection_get_setting_wireless</a> (<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 class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity"><span class="returnvalue">NMSettingWirelessSecurity</span></a> * <a class="link" href="libnm-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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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="libnm-NMConnection.html#nm-connection-get-setting-vlan" title="nm_connection_get_setting_vlan ()">nm_connection_get_setting_vlan</a> (<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="libnm-NMConnection.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ GFlags
+ +----NMConnectionSerializationFlags
+</pre>
+</div>
+<div class="refsect1">
+<a name="libnm-NMConnection.description"></a><h2>Description</h2>
+<p>
+An <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a>, or
+disconnected without having been connected with a <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a>.
+</p>
+<p>
+Each <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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="libnm-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="libnm-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="libnm-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-NORMALIZE-PARAM-IP6-CONFIG-METHOD:CAPS"></a><h3>NM_CONNECTION_NORMALIZE_PARAM_IP6_CONFIG_METHOD</h3>
+<pre class="programlisting">#define NM_CONNECTION_NORMALIZE_PARAM_IP6_CONFIG_METHOD "ip6-config-method"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMConnectionInterface"></a><h3>NMConnectionInterface</h3>
+<pre class="programlisting">typedef struct {
+ GTypeInterface parent;
+
+ /* Signals */
+ void (*secrets_updated) (NMConnection *connection,
+ const char *setting);
+ void (*secrets_cleared) (NMConnection *connection);
+ void (*changed) (NMConnection *connection);
+} NMConnectionInterface;
+</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GTypeInterface"><span class="type">GTypeInterface</span></a> <em class="structfield"><code><a name="NMConnectionInterface.parent"></a>parent</code></em>;</span></p></td>
+<td>the parent interace struct</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="NMConnectionInterface.secrets-updated"></a>secrets_updated</code></em> ()</span></p></td>
+<td>emitted when the connection's secrets are updated</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="NMConnectionInterface.secrets-cleared"></a>secrets_cleared</code></em> ()</span></p></td>
+<td>emitted when the connection's secrets are cleared</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="NMConnectionInterface.changed"></a>changed</code></em> ()</span></p></td>
+<td>emitted when any change to the connection's settings occurs</td>
+</tr>
+</tbody>
+</table></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 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="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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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 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>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>
+<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 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/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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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 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>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>
+<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 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/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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</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>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>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><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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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>
+<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 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> *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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</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>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>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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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>
+<hr>
+<div class="refsect2">
+<a name="NM-VARIANT-TYPE-SETTING:CAPS"></a><h3>NM_VARIANT_TYPE_SETTING</h3>
+<pre class="programlisting">#define NM_VARIANT_TYPE_SETTING G_VARIANT_TYPE_VARDICT
+</pre>
+<p>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-GVariantType.html#GVariantType"><span class="type">GVariantType</span></a> for a dictionary mapping from property names to values. This is
+an alias for <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariantType.html#G-VARIANT-TYPE-VARDICT:CAPS"><code class="literal">G_VARIANT_TYPE_VARDICT</code></a>, and is the type of each element of
+an <code class="literal">NM_VARIANT_TYPE_CONNECTION</code> dictionary.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMConnectionSerializationFlags-enum"></a><h3>enum NMConnectionSerializationFlags</h3>
+<pre class="programlisting">typedef enum {
+ /*&lt; flags &gt;*/
+ NM_CONNECTION_SERIALIZE_ALL = 0x00000000,
+ NM_CONNECTION_SERIALIZE_NO_SECRETS = 0x00000001,
+ NM_CONNECTION_SERIALIZE_ONLY_SECRETS = 0x00000002,
+} NMConnectionSerializationFlags;
+</pre>
+<p>
+These flags determine which properties are serialized when calling when
+calling <a class="link" href="libnm-NMConnection.html#nm-connection-to-dbus" title="nm_connection_to_dbus ()"><code class="function">nm_connection_to_dbus()</code></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-CONNECTION-SERIALIZE-ALL:CAPS"></a><span class="term"><code class="literal">NM_CONNECTION_SERIALIZE_ALL</code></span></p></td>
+<td>serialize all properties (including secrets)
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-CONNECTION-SERIALIZE-NO-SECRETS:CAPS"></a><span class="term"><code class="literal">NM_CONNECTION_SERIALIZE_NO_SECRETS</code></span></p></td>
+<td>do not include secrets
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-CONNECTION-SERIALIZE-ONLY-SECRETS:CAPS"></a><span class="term"><code class="literal">NM_CONNECTION_SERIALIZE_ONLY_SECRETS</code></span></p></td>
+<td>only serialize secrets
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-to-dbus"></a><h3>nm_connection_to_dbus ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="returnvalue">GVariant</span></a> * nm_connection_to_dbus (<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="libnm-NMConnection.html#NMConnectionSerializationFlags"><span class="type">NMConnectionSerializationFlags</span></a> flags</code></em>);</pre>
+<p>
+Converts the <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> into a <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> of type
+<code class="literal">NM_VARIANT_TYPE_CONNECTION</code> describing the connection, suitable for
+marshalling over D-Bus or otherwise serializing.
+</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="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>flags</code></em> :</span></p></td>
+<td>serialization flags, e.g. <a class="link" href="libnm-NMConnection.html#NM-CONNECTION-SERIALIZE-ALL:CAPS"><code class="literal">NM_CONNECTION_SERIALIZE_ALL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new floating <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> describing the connection,
+its settings, and each setting's properties. <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-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 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-GVariant.html#GVariant"><span class="type">GVariant</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>
+<p>
+Replaces <em class="parameter"><code>connection</code></em>'s settings with <em class="parameter"><code>new_settings</code></em> (which must be
+syntactically valid, and describe a known type of connection, but does not
+need to result in a connection that passes <a class="link" href="libnm-NMConnection.html#nm-connection-verify" title="nm_connection_verify ()"><code class="function">nm_connection_verify()</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>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>new_settings</code></em> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> of type <code class="literal">NM_VARIANT_TYPE_CONNECTION</code>, with the new settings</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><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 was updated, <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>new_settings</code></em> could not
+be deserialized (in which case <em class="parameter"><code>connection</code></em> will be unchanged).</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-replace-settings-from-connection"></a><h3>nm_connection_replace_settings_from_connection ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_connection_replace_settings_from_connection
+ (<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="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *new_connection</code></em>);</pre>
+<p>
+Deep-copies the settings of <em class="parameter"><code>new_connection</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 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>new_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> to replace the settings of <em class="parameter"><code>connection</code></em> with</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-clear-settings"></a><h3>nm_connection_clear_settings ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_connection_clear_settings (<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>
+Deletes all of <em class="parameter"><code>connection</code></em>'s settings.
+</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></tbody>
+</table></div>
+</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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *a</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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 align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>a</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>b</code></em> :</span></p></td>
+<td>a second <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</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>
+<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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *a</code></em>,
+ <em class="parameter"><code><a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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="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>a</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>b</code></em> :</span></p></td>
+<td>a second <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</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"><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"><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>
+<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 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 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 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="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="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> to verify</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><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>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-normalize"></a><h3>nm_connection_normalize ()</h3>
+<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_normalize (<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> *parameters</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> *modified</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>
+Does some basic normalization and fixup of well known inconsistencies
+and deprecated fields. If the connection was modified in any way,
+the output parameter <em class="parameter"><code>modified</code></em> is set <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>.
+</p>
+<p>
+Finally the connection will be verified and <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> returns if the connection
+is valid. As this function only performs some specific normalization steps
+it cannot repair all connections. If the connection has errors that
+cannot be normalized, the connection will not be modified.
+</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="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> to normalize</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>parameters</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> with
+normalization parameters to allow customization of the normalization by providing
+specific arguments. Unknown arguments will be ignored and the default will be
+used. The keys must be strings, hashed by <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#g-str-hash"><code class="function">g_str_hash()</code></a> and <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#g-str-equal"><code class="function">g_str_equal()</code></a> functions.
+The values are opaque and depend on the parameter name. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 gpointer]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>modified</code></em> :</span></p></td>
+<td>outputs whether any settings were modified. <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>location to store error, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>. Contains the reason,
+why the connection is invalid, if the function returns 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 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>
+<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 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-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="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="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>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. <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>
+<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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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 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="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a>
+</td>
+</tr></tbody>
+</table></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 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="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 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="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>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><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>
+<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 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><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</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 dictionary of secrets
+intended for that setting (deserialized from D-Bus for example). Will also
+extract the given setting's secrets hash if given a connection dictionary.
+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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> as
+returned by <a class="link" href="libnm-NMConnection.html#nm-connection-to-dbus" title="nm_connection_to_dbus ()"><code class="function">nm_connection_to_dbus()</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 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="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>setting_name</code></em> :</span></p></td>
+<td>the setting object name to which the secrets apply</td>
+</tr>
+<tr>
+<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-GVariant.html#GVariant"><span class="type">GVariant</span></a> of secrets, of type <code class="literal">NM_VARIANT_TYPE_CONNECTION</code>
+or <a class="link" href="libnm-NMConnection.html#NM-VARIANT-TYPE-SETTING:CAPS" title="NM_VARIANT_TYPE_SETTING"><code class="literal">NM_VARIANT_TYPE_SETTING</code></a>
+</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><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>
+<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 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> *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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html#NMConnection--path"><span class="type">"path"</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>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>
+</td>
+</tr>
+<tr>
+<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>
+<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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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 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="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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="libnm-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>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-get-interface-name"></a><h3>nm_connection_get_interface_name ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_connection_get_interface_name (<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>
+Returns the interface name as stored in NMSettingConnection:interface_name.
+If the connection contains no NMSettingConnection, it will return <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>.
+</p>
+<p>
+For hardware devices and software devices created outside of NetworkManager,
+this name is used to match the device. for software devices created by
+NetworkManager, this is the name of the created interface.
+</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="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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>
+<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 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> *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 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="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>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>
+<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 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="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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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 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="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>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><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-connection-dump"></a><h3>nm_connection_dump ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> nm_connection_dump (<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>
+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="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="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a>
+</td>
+</tr></tbody>
+</table></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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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 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="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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>
+<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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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 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="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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>
+<hr>
+<div class="refsect2">
+<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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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 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="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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>
+<hr>
+<div class="refsect2">
+<a name="nm-connection-is-virtual"></a><h3>nm_connection_is_virtual ()</h3>
+<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_virtual (<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>
+Checks if <em class="parameter"><code>connection</code></em> refers to a virtual device (and thus can potentially be
+activated even if the device it refers to doesn't exist).
+</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>an <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"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>whether <em class="parameter"><code>connection</code></em> refers to a virtual device</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> *connection</code></em>);</pre>
+<p>
+Returns the name that <a class="link" href="NMDevice.html#nm-device-disambiguate-names" title="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 align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<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> 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>
+<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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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 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="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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>
+<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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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 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="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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>
+<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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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 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="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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>
+<hr>
+<div class="refsect2">
+<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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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 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="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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>
+<hr>
+<div class="refsect2">
+<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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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 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="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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>
+<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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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 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="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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>
+<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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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 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="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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>
+<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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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 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="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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>
+<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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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 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="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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>
+<hr>
+<div class="refsect2">
+<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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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 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="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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>
+<hr>
+<div class="refsect2">
+<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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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 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="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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>
+<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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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 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="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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>
+<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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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 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="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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>
+<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="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="returnvalue">NMSettingIPConfig</span></a> * nm_connection_get_setting_ip4_config
+ (<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>
+A shortcut to return any <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</span></a> the connection might contain.
+</p>
+<p>
+Note that it returns the value as type <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a>, since the vast
+majority of IPv4-setting-related methods are on that type, not
+<a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config"><span class="type">NMSettingIP4Config</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="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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="Override the parsed C type with given type."><span class="acronym">type</span></acronym> NMSettingIP4Config][<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-get-setting-ip6-config"></a><h3>nm_connection_get_setting_ip6_config ()</h3>
+<pre class="programlisting"><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="returnvalue">NMSettingIPConfig</span></a> * nm_connection_get_setting_ip6_config
+ (<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>
+A shortcut to return any <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</span></a> the connection might contain.
+</p>
+<p>
+Note that it returns the value as type <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a>, since the vast
+majority of IPv6-setting-related methods are on that type, not
+<a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config"><span class="type">NMSettingIP6Config</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="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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="Override the parsed C type with given type."><span class="acronym">type</span></acronym> NMSettingIP6Config][<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-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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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 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="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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>
+<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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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 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="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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>
+<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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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 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="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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>
+<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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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 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="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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>
+<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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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 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="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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>
+<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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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 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="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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="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>
+</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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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><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>
+</td>
+</tr>
+<tr>
+<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>
+</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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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 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"><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-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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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 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"><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-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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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 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"><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="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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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 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"><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>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.19</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/libnm/html/libnm-NMVpnEditorPlugin.html b/docs/libnm/html/libnm-NMVpnEditorPlugin.html
new file mode 100644
index 000000000..1cfdb8e63
--- /dev/null
+++ b/docs/libnm/html/libnm-NMVpnEditorPlugin.html
@@ -0,0 +1,382 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NMVpnEditorPlugin</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch06.html" title="VPN Plugin API Reference">
+<link rel="prev" href="libnm-nm-vpn-dbus-interface.html" title="nm-vpn-dbus-interface">
+<link rel="next" href="object-tree.html" title="Object Hierarchy">
+<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-nm-vpn-dbus-interface.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch06.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 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-NMVpnEditorPlugin.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#libnm-NMVpnEditorPlugin.description" class="shortcut">Description</a>
+  | 
+ <a href="#libnm-NMVpnEditorPlugin.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="libnm-NMVpnEditorPlugin"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="libnm-NMVpnEditorPlugin.top_of_page"></a>NMVpnEditorPlugin</span></h2>
+<p>NMVpnEditorPlugin</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="libnm-NMVpnEditorPlugin.synopsis"></a><h2>Synopsis</h2>
+<a name="NMVpnEditorPluginCapability"></a><pre class="synopsis"><span class="returnvalue">NMVpnEditorPlugin</span> * (<a class="link" href="libnm-NMVpnEditorPlugin.html#NMVpnEditorPluginFactory" title="NMVpnEditorPluginFactory ()">*NMVpnEditorPluginFactory</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">NMVpnEditorPlugin</span> * <a class="link" href="libnm-NMVpnEditorPlugin.html#nm-vpn-editor-plugin-factory" title="nm_vpn_editor_plugin_factory ()">nm_vpn_editor_plugin_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-NMVpnEditorPlugin.html#NMVpnEditorPluginCapability-enum" title="enum NMVpnEditorPluginCapability">NMVpnEditorPluginCapability</a>;
+#define <a class="link" href="libnm-NMVpnEditorPlugin.html#NM-VPN-EDITOR-PLUGIN-NAME:CAPS" title="NM_VPN_EDITOR_PLUGIN_NAME">NM_VPN_EDITOR_PLUGIN_NAME</a>
+#define <a class="link" href="libnm-NMVpnEditorPlugin.html#NM-VPN-EDITOR-PLUGIN-DESCRIPTION:CAPS" title="NM_VPN_EDITOR_PLUGIN_DESCRIPTION">NM_VPN_EDITOR_PLUGIN_DESCRIPTION</a>
+#define <a class="link" href="libnm-NMVpnEditorPlugin.html#NM-VPN-EDITOR-PLUGIN-SERVICE:CAPS" title="NM_VPN_EDITOR_PLUGIN_SERVICE">NM_VPN_EDITOR_PLUGIN_SERVICE</a>
+ <a class="link" href="libnm-NMVpnEditorPlugin.html#NMVpnEditorPluginInterface" title="NMVpnEditorPluginInterface">NMVpnEditorPluginInterface</a>;
+<span class="returnvalue">NMVpnEditor</span> * <a class="link" href="libnm-NMVpnEditorPlugin.html#nm-vpn-editor-plugin-get-editor" title="nm_vpn_editor_plugin_get_editor ()">nm_vpn_editor_plugin_get_editor</a> (<em class="parameter"><code><span class="type">NMVpnEditorPlugin</span> *plugin</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 class="link" href="libnm-NMVpnEditorPlugin.html#NMVpnEditorPluginCapability"><span class="returnvalue">NMVpnEditorPluginCapability</span></a> <a class="link" href="libnm-NMVpnEditorPlugin.html#nm-vpn-editor-plugin-get-capabilities" title="nm_vpn_editor_plugin_get_capabilities ()">nm_vpn_editor_plugin_get_capabilities</a>
+ (<em class="parameter"><code><span class="type">NMVpnEditorPlugin</span> *plugin</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-NMVpnEditorPlugin.html#nm-vpn-editor-plugin-import" title="nm_vpn_editor_plugin_import ()">nm_vpn_editor_plugin_import</a> (<em class="parameter"><code><span class="type">NMVpnEditorPlugin</span> *plugin</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-NMVpnEditorPlugin.html#nm-vpn-editor-plugin-export" title="nm_vpn_editor_plugin_export ()">nm_vpn_editor_plugin_export</a> (<em class="parameter"><code><span class="type">NMVpnEditorPlugin</span> *plugin</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-NMVpnEditorPlugin.html#nm-vpn-editor-plugin-get-suggested-filename" title="nm_vpn_editor_plugin_get_suggested_filename ()">nm_vpn_editor_plugin_get_suggested_filename</a>
+ (<em class="parameter"><code><span class="type">NMVpnEditorPlugin</span> *plugin</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 class="link" href="libnm-NMVpnEditorPlugin.html#NMVpnEditorInterface" title="NMVpnEditorInterface">NMVpnEditorInterface</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-NMVpnEditorPlugin.html#nm-vpn-editor-get-widget" title="nm_vpn_editor_get_widget ()">nm_vpn_editor_get_widget</a> (<em class="parameter"><code><span class="type">NMVpnEditor</span> *editor</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-NMVpnEditorPlugin.html#nm-vpn-editor-update-connection" title="nm_vpn_editor_update_connection ()">nm_vpn_editor_update_connection</a> (<em class="parameter"><code><span class="type">NMVpnEditor</span> *editor</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-NMVpnEditorPlugin.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ GFlags
+ +----NMVpnEditorPluginCapability
+</pre>
+</div>
+<div class="refsect1">
+<a name="libnm-NMVpnEditorPlugin.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="libnm-NMVpnEditorPlugin.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NMVpnEditorPluginFactory"></a><h3>NMVpnEditorPluginFactory ()</h3>
+<pre class="programlisting"><span class="returnvalue">NMVpnEditorPlugin</span> * (*NMVpnEditorPluginFactory) (<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-editor-plugin-factory"></a><h3>nm_vpn_editor_plugin_factory ()</h3>
+<pre class="programlisting"><span class="returnvalue">NMVpnEditorPlugin</span> * nm_vpn_editor_plugin_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="NMVpnEditorPluginCapability-enum"></a><h3>enum NMVpnEditorPluginCapability</h3>
+<pre class="programlisting">typedef enum {
+ NM_VPN_EDITOR_PLUGIN_CAPABILITY_NONE = 0x00,
+ NM_VPN_EDITOR_PLUGIN_CAPABILITY_IMPORT = 0x01,
+ NM_VPN_EDITOR_PLUGIN_CAPABILITY_EXPORT = 0x02,
+ NM_VPN_EDITOR_PLUGIN_CAPABILITY_IPV6 = 0x04
+} NMVpnEditorPluginCapability;
+</pre>
+<p>
+Flags that indicate certain capabilities of the plugin to editor 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-EDITOR-PLUGIN-CAPABILITY-NONE:CAPS"></a><span class="term"><code class="literal">NM_VPN_EDITOR_PLUGIN_CAPABILITY_NONE</code></span></p></td>
+<td>unknown or no capability
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-EDITOR-PLUGIN-CAPABILITY-IMPORT:CAPS"></a><span class="term"><code class="literal">NM_VPN_EDITOR_PLUGIN_CAPABILITY_IMPORT</code></span></p></td>
+<td>the plugin can import new connections
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-EDITOR-PLUGIN-CAPABILITY-EXPORT:CAPS"></a><span class="term"><code class="literal">NM_VPN_EDITOR_PLUGIN_CAPABILITY_EXPORT</code></span></p></td>
+<td>the plugin can export connections
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-EDITOR-PLUGIN-CAPABILITY-IPV6:CAPS"></a><span class="term"><code class="literal">NM_VPN_EDITOR_PLUGIN_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-EDITOR-PLUGIN-NAME:CAPS"></a><h3>NM_VPN_EDITOR_PLUGIN_NAME</h3>
+<pre class="programlisting">#define NM_VPN_EDITOR_PLUGIN_NAME "name"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-EDITOR-PLUGIN-DESCRIPTION:CAPS"></a><h3>NM_VPN_EDITOR_PLUGIN_DESCRIPTION</h3>
+<pre class="programlisting">#define NM_VPN_EDITOR_PLUGIN_DESCRIPTION "description"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-EDITOR-PLUGIN-SERVICE:CAPS"></a><h3>NM_VPN_EDITOR_PLUGIN_SERVICE</h3>
+<pre class="programlisting">#define NM_VPN_EDITOR_PLUGIN_SERVICE "service"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMVpnEditorPluginInterface"></a><h3>NMVpnEditorPluginInterface</h3>
+<pre class="programlisting">typedef struct {
+ GTypeInterface g_iface;
+
+ NMVpnEditor * (*get_editor) (NMVpnEditorPlugin *plugin,
+ NMConnection *connection,
+ GError **error);
+
+ NMVpnEditorPluginCapability (*get_capabilities) (NMVpnEditorPlugin *plugin);
+
+ NMConnection * (*import_from_file) (NMVpnEditorPlugin *plugin,
+ const char *path,
+ GError **error);
+
+ gboolean (*export_to_file) (NMVpnEditorPlugin *plugin,
+ const char *path,
+ NMConnection *connection,
+ GError **error);
+
+ char * (*get_suggested_filename) (NMVpnEditorPlugin *plugin, NMConnection *connection);
+} NMVpnEditorPluginInterface;
+</pre>
+<p>
+Interface for VPN editor plugins.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GTypeInterface"><span class="type">GTypeInterface</span></a> <em class="structfield"><code><a name="NMVpnEditorPluginInterface.g-iface"></a>g_iface</code></em>;</span></p></td>
+<td>the parent interface</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="NMVpnEditorPluginInterface.get-editor"></a>get_editor</code></em> ()</span></p></td>
+<td>returns an <span class="type">NMVpnEditor</span>, pre-filled with values from <em class="parameter"><code>connection</code></em>
+if non-<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"><em class="structfield"><code><a name="NMVpnEditorPluginInterface.get-capabilities"></a>get_capabilities</code></em> ()</span></p></td>
+<td>returns a bitmask of capabilities.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="NMVpnEditorPluginInterface.import-from-file"></a>import_from_file</code></em> ()</span></p></td>
+<td>Try to import a connection from the specified path. On
+success, return a partial <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> object. On error, return <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> and
+set <em class="parameter"><code>error</code></em> with additional information. Note that <em class="parameter"><code>error</code></em> can be <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>, in
+which case no additional error information should be provided.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="NMVpnEditorPluginInterface.export-to-file"></a>export_to_file</code></em> ()</span></p></td>
+<td>Export the given connection to the specified path. Return
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> on success. On error, return <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> and set <em class="parameter"><code>error</code></em> with additional
+error information. Note that <em class="parameter"><code>error</code></em> can be <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>, in which case no
+additional error information should be provided.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="NMVpnEditorPluginInterface.get-suggested-filename"></a>get_suggested_filename</code></em> ()</span></p></td>
+<td>For a given connection, return a suggested file
+name. Returned value will be <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> or a suggested file name to be freed by
+the caller.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-vpn-editor-plugin-get-editor"></a><h3>nm_vpn_editor_plugin_get_editor ()</h3>
+<pre class="programlisting"><span class="returnvalue">NMVpnEditor</span> * nm_vpn_editor_plugin_get_editor (<em class="parameter"><code><span class="type">NMVpnEditorPlugin</span> *plugin</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 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>. <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-vpn-editor-plugin-get-capabilities"></a><h3>nm_vpn_editor_plugin_get_capabilities ()</h3>
+<pre class="programlisting"><a class="link" href="libnm-NMVpnEditorPlugin.html#NMVpnEditorPluginCapability"><span class="returnvalue">NMVpnEditorPluginCapability</span></a> nm_vpn_editor_plugin_get_capabilities
+ (<em class="parameter"><code><span class="type">NMVpnEditorPlugin</span> *plugin</code></em>);</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-vpn-editor-plugin-import"></a><h3>nm_vpn_editor_plugin_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_editor_plugin_import (<em class="parameter"><code><span class="type">NMVpnEditorPlugin</span> *plugin</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>
+<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>. <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-vpn-editor-plugin-export"></a><h3>nm_vpn_editor_plugin_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_editor_plugin_export (<em class="parameter"><code><span class="type">NMVpnEditorPlugin</span> *plugin</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-editor-plugin-get-suggested-filename"></a><h3>nm_vpn_editor_plugin_get_suggested_filename ()</h3>
+<pre class="programlisting"><span class="returnvalue">char</span> * nm_vpn_editor_plugin_get_suggested_filename
+ (<em class="parameter"><code><span class="type">NMVpnEditorPlugin</span> *plugin</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="NMVpnEditorInterface"></a><h3>NMVpnEditorInterface</h3>
+<pre class="programlisting">typedef struct {
+ GTypeInterface g_iface;
+
+ GObject * (*get_widget) (NMVpnEditor *editor);
+
+ void (*placeholder) (void);
+
+ gboolean (*update_connection) (NMVpnEditor *editor,
+ NMConnection *connection,
+ GError **error);
+
+ void (*changed) (NMVpnEditor *editor);
+} NMVpnEditorInterface;
+</pre>
+<p>
+Interface for editing a specific <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</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"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GTypeInterface"><span class="type">GTypeInterface</span></a> <em class="structfield"><code><a name="NMVpnEditorInterface.g-iface"></a>g_iface</code></em>;</span></p></td>
+<td>the parent interface</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="NMVpnEditorInterface.get-widget"></a>get_widget</code></em> ()</span></p></td>
+<td>return the <a href="http://developer.gnome.org/gtk2/GtkWidget.html"><span class="type">GtkWidget</span></a> for the VPN editor's UI</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="NMVpnEditorInterface.placeholder"></a>placeholder</code></em> ()</span></p></td>
+<td>not currently used</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="NMVpnEditorInterface.update-connection"></a>update_connection</code></em> ()</span></p></td>
+<td>called to save the user-entered options to the connection
+object. Should return <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> and set <em class="parameter"><code>error</code></em> if the current options are
+invalid. <em class="parameter"><code>error</code></em> 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 <em class="parameter"><code>error</code></em> with the name of the invalid property.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="NMVpnEditorInterface.changed"></a>changed</code></em> ()</span></p></td>
+<td>emitted when the value of a UI widget changes. May trigger a
+validity check via <em class="parameter"><code>update_connection</code></em> to write values to the connection.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-vpn-editor-get-widget"></a><h3>nm_vpn_editor_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_editor_get_widget (<em class="parameter"><code><span class="type">NMVpnEditor</span> *editor</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"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>. <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-vpn-editor-update-connection"></a><h3>nm_vpn_editor_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_editor_update_connection (<em class="parameter"><code><span class="type">NMVpnEditor</span> *editor</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/html/libnm-nm-dbus-interface.html b/docs/libnm/html/libnm-nm-dbus-interface.html
new file mode 100644
index 000000000..f2e00fe27
--- /dev/null
+++ b/docs/libnm/html/libnm-nm-dbus-interface.html
@@ -0,0 +1,1806 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>nm-dbus-interface</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch02.html" title="Client Object API Reference">
+<link rel="prev" href="libnm-nm-errors.html" title="nm-errors">
+<link rel="next" href="ch03.html" title="Connection and Setting API Reference">
+<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-nm-errors.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 Reference Manual</th>
+<td><a accesskey="n" href="ch03.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-nm-dbus-interface.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#libnm-nm-dbus-interface.description" class="shortcut">Description</a>
+  | 
+ <a href="#libnm-nm-dbus-interface.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="libnm-nm-dbus-interface"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="libnm-nm-dbus-interface.top_of_page"></a>nm-dbus-interface</span></h2>
+<p>nm-dbus-interface</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="libnm-nm-dbus-interface.synopsis"></a><h2>Synopsis</h2>
+<a name="NMState"></a><a name="NMConnectivityState"></a><a name="NMDeviceType"></a><a name="NMDeviceCapabilities"></a><a name="NMDeviceWifiCapabilities"></a><a name="NM80211ApFlags"></a><a name="NM80211ApSecurityFlags"></a><a name="NM80211Mode"></a><a name="NMBluetoothCapabilities"></a><a name="NMDeviceModemCapabilities"></a><a name="NMDeviceState"></a><a name="NMDeviceStateReason"></a><a name="NMActiveConnectionState"></a><a name="NMSecretAgentGetSecretsFlags"></a><a name="NMSecretAgentCapabilities"></a><pre class="synopsis">#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-SERVICE:CAPS" title="NM_DBUS_SERVICE">NM_DBUS_SERVICE</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-PATH:CAPS" title="NM_DBUS_PATH">NM_DBUS_PATH</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE:CAPS" title="NM_DBUS_INTERFACE">NM_DBUS_INTERFACE</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE:CAPS" title="NM_DBUS_INTERFACE_DEVICE">NM_DBUS_INTERFACE_DEVICE</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-WIRED:CAPS" title="NM_DBUS_INTERFACE_DEVICE_WIRED">NM_DBUS_INTERFACE_DEVICE_WIRED</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-ADSL:CAPS" title="NM_DBUS_INTERFACE_DEVICE_ADSL">NM_DBUS_INTERFACE_DEVICE_ADSL</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-WIRELESS:CAPS" title="NM_DBUS_INTERFACE_DEVICE_WIRELESS">NM_DBUS_INTERFACE_DEVICE_WIRELESS</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-BLUETOOTH:CAPS" title="NM_DBUS_INTERFACE_DEVICE_BLUETOOTH">NM_DBUS_INTERFACE_DEVICE_BLUETOOTH</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-OLPC-MESH:CAPS" title="NM_DBUS_INTERFACE_DEVICE_OLPC_MESH">NM_DBUS_INTERFACE_DEVICE_OLPC_MESH</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-PATH-ACCESS-POINT:CAPS" title="NM_DBUS_PATH_ACCESS_POINT">NM_DBUS_PATH_ACCESS_POINT</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-ACCESS-POINT:CAPS" title="NM_DBUS_INTERFACE_ACCESS_POINT">NM_DBUS_INTERFACE_ACCESS_POINT</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-MODEM:CAPS" title="NM_DBUS_INTERFACE_DEVICE_MODEM">NM_DBUS_INTERFACE_DEVICE_MODEM</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-WIMAX:CAPS" title="NM_DBUS_INTERFACE_DEVICE_WIMAX">NM_DBUS_INTERFACE_DEVICE_WIMAX</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-WIMAX-NSP:CAPS" title="NM_DBUS_INTERFACE_WIMAX_NSP">NM_DBUS_INTERFACE_WIMAX_NSP</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-PATH-WIMAX-NSP:CAPS" title="NM_DBUS_PATH_WIMAX_NSP">NM_DBUS_PATH_WIMAX_NSP</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-ACTIVE-CONNECTION:CAPS" title="NM_DBUS_INTERFACE_ACTIVE_CONNECTION">NM_DBUS_INTERFACE_ACTIVE_CONNECTION</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-IP4-CONFIG:CAPS" title="NM_DBUS_INTERFACE_IP4_CONFIG">NM_DBUS_INTERFACE_IP4_CONFIG</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DHCP4-CONFIG:CAPS" title="NM_DBUS_INTERFACE_DHCP4_CONFIG">NM_DBUS_INTERFACE_DHCP4_CONFIG</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-IP6-CONFIG:CAPS" title="NM_DBUS_INTERFACE_IP6_CONFIG">NM_DBUS_INTERFACE_IP6_CONFIG</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DHCP6-CONFIG:CAPS" title="NM_DBUS_INTERFACE_DHCP6_CONFIG">NM_DBUS_INTERFACE_DHCP6_CONFIG</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-INFINIBAND:CAPS" title="NM_DBUS_INTERFACE_DEVICE_INFINIBAND">NM_DBUS_INTERFACE_DEVICE_INFINIBAND</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-BOND:CAPS" title="NM_DBUS_INTERFACE_DEVICE_BOND">NM_DBUS_INTERFACE_DEVICE_BOND</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-TEAM:CAPS" title="NM_DBUS_INTERFACE_DEVICE_TEAM">NM_DBUS_INTERFACE_DEVICE_TEAM</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-VLAN:CAPS" title="NM_DBUS_INTERFACE_DEVICE_VLAN">NM_DBUS_INTERFACE_DEVICE_VLAN</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-BRIDGE:CAPS" title="NM_DBUS_INTERFACE_DEVICE_BRIDGE">NM_DBUS_INTERFACE_DEVICE_BRIDGE</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-GENERIC:CAPS" title="NM_DBUS_INTERFACE_DEVICE_GENERIC">NM_DBUS_INTERFACE_DEVICE_GENERIC</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-VETH:CAPS" title="NM_DBUS_INTERFACE_DEVICE_VETH">NM_DBUS_INTERFACE_DEVICE_VETH</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-TUN:CAPS" title="NM_DBUS_INTERFACE_DEVICE_TUN">NM_DBUS_INTERFACE_DEVICE_TUN</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-MACVLAN:CAPS" title="NM_DBUS_INTERFACE_DEVICE_MACVLAN">NM_DBUS_INTERFACE_DEVICE_MACVLAN</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-VXLAN:CAPS" title="NM_DBUS_INTERFACE_DEVICE_VXLAN">NM_DBUS_INTERFACE_DEVICE_VXLAN</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-GRE:CAPS" title="NM_DBUS_INTERFACE_DEVICE_GRE">NM_DBUS_INTERFACE_DEVICE_GRE</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-SETTINGS:CAPS" title="NM_DBUS_INTERFACE_SETTINGS">NM_DBUS_INTERFACE_SETTINGS</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-PATH-SETTINGS:CAPS" title="NM_DBUS_PATH_SETTINGS">NM_DBUS_PATH_SETTINGS</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-SETTINGS-CONNECTION:CAPS" title="NM_DBUS_INTERFACE_SETTINGS_CONNECTION">NM_DBUS_INTERFACE_SETTINGS_CONNECTION</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-PATH-SETTINGS-CONNECTION:CAPS" title="NM_DBUS_PATH_SETTINGS_CONNECTION">NM_DBUS_PATH_SETTINGS_CONNECTION</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-SETTINGS-CONNECTION-SECRETS:CAPS" title="NM_DBUS_INTERFACE_SETTINGS_CONNECTION_SECRETS">NM_DBUS_INTERFACE_SETTINGS_CONNECTION_SECRETS</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-AGENT-MANAGER:CAPS" title="NM_DBUS_INTERFACE_AGENT_MANAGER">NM_DBUS_INTERFACE_AGENT_MANAGER</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-PATH-AGENT-MANAGER:CAPS" title="NM_DBUS_PATH_AGENT_MANAGER">NM_DBUS_PATH_AGENT_MANAGER</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-SECRET-AGENT:CAPS" title="NM_DBUS_INTERFACE_SECRET_AGENT">NM_DBUS_INTERFACE_SECRET_AGENT</a>
+#define <a class="link" href="libnm-nm-dbus-interface.html#NM-DBUS-PATH-SECRET-AGENT:CAPS" title="NM_DBUS_PATH_SECRET_AGENT">NM_DBUS_PATH_SECRET_AGENT</a>
+enum <a class="link" href="libnm-nm-dbus-interface.html#NMState-enum" title="enum NMState">NMState</a>;
+enum <a class="link" href="libnm-nm-dbus-interface.html#NMConnectivityState-enum" title="enum NMConnectivityState">NMConnectivityState</a>;
+enum <a class="link" href="libnm-nm-dbus-interface.html#NMDeviceType-enum" title="enum NMDeviceType">NMDeviceType</a>;
+enum <a class="link" href="libnm-nm-dbus-interface.html#NMDeviceCapabilities-enum" title="enum NMDeviceCapabilities">NMDeviceCapabilities</a>;
+enum <a class="link" href="libnm-nm-dbus-interface.html#NMDeviceWifiCapabilities-enum" title="enum NMDeviceWifiCapabilities">NMDeviceWifiCapabilities</a>;
+enum <a class="link" href="libnm-nm-dbus-interface.html#NM80211ApFlags-enum" title="enum NM80211ApFlags">NM80211ApFlags</a>;
+enum <a class="link" href="libnm-nm-dbus-interface.html#NM80211ApSecurityFlags-enum" title="enum NM80211ApSecurityFlags">NM80211ApSecurityFlags</a>;
+enum <a class="link" href="libnm-nm-dbus-interface.html#NM80211Mode-enum" title="enum NM80211Mode">NM80211Mode</a>;
+enum <a class="link" href="libnm-nm-dbus-interface.html#NMBluetoothCapabilities-enum" title="enum NMBluetoothCapabilities">NMBluetoothCapabilities</a>;
+enum <a class="link" href="libnm-nm-dbus-interface.html#NMDeviceModemCapabilities-enum" title="enum NMDeviceModemCapabilities">NMDeviceModemCapabilities</a>;
+enum <a class="link" href="libnm-nm-dbus-interface.html#NMDeviceState-enum" title="enum NMDeviceState">NMDeviceState</a>;
+enum <a class="link" href="libnm-nm-dbus-interface.html#NMDeviceStateReason-enum" title="enum NMDeviceStateReason">NMDeviceStateReason</a>;
+enum <a class="link" href="libnm-nm-dbus-interface.html#NMActiveConnectionState-enum" title="enum NMActiveConnectionState">NMActiveConnectionState</a>;
+enum <a class="link" href="libnm-nm-dbus-interface.html#NMSecretAgentGetSecretsFlags-enum" title="enum NMSecretAgentGetSecretsFlags">NMSecretAgentGetSecretsFlags</a>;
+enum <a class="link" href="libnm-nm-dbus-interface.html#NMSecretAgentCapabilities-enum" title="enum NMSecretAgentCapabilities">NMSecretAgentCapabilities</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="libnm-nm-dbus-interface.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ GEnum
+ +----NMState
+</pre>
+<pre class="synopsis">
+ GEnum
+ +----NMConnectivityState
+</pre>
+<pre class="synopsis">
+ GEnum
+ +----NMDeviceType
+</pre>
+<pre class="synopsis">
+ GFlags
+ +----NMDeviceCapabilities
+</pre>
+<pre class="synopsis">
+ GFlags
+ +----NMDeviceWifiCapabilities
+</pre>
+<pre class="synopsis">
+ GFlags
+ +----NM80211ApFlags
+</pre>
+<pre class="synopsis">
+ GFlags
+ +----NM80211ApSecurityFlags
+</pre>
+<pre class="synopsis">
+ GEnum
+ +----NM80211Mode
+</pre>
+<pre class="synopsis">
+ GFlags
+ +----NMBluetoothCapabilities
+</pre>
+<pre class="synopsis">
+ GFlags
+ +----NMDeviceModemCapabilities
+</pre>
+<pre class="synopsis">
+ GEnum
+ +----NMDeviceState
+</pre>
+<pre class="synopsis">
+ GEnum
+ +----NMDeviceStateReason
+</pre>
+<pre class="synopsis">
+ GEnum
+ +----NMActiveConnectionState
+</pre>
+<pre class="synopsis">
+ GFlags
+ +----NMSecretAgentGetSecretsFlags
+</pre>
+<pre class="synopsis">
+ GFlags
+ +----NMSecretAgentCapabilities
+</pre>
+</div>
+<div class="refsect1">
+<a name="libnm-nm-dbus-interface.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="libnm-nm-dbus-interface.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NM-DBUS-SERVICE:CAPS"></a><h3>NM_DBUS_SERVICE</h3>
+<pre class="programlisting">#define NM_DBUS_SERVICE "org.freedesktop.NetworkManager"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-PATH:CAPS"></a><h3>NM_DBUS_PATH</h3>
+<pre class="programlisting">#define NM_DBUS_PATH "/org/freedesktop/NetworkManager"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE:CAPS"></a><h3>NM_DBUS_INTERFACE</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE "org.freedesktop.NetworkManager"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE NM_DBUS_INTERFACE ".Device"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE-WIRED:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE_WIRED</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE_WIRED NM_DBUS_INTERFACE_DEVICE ".Wired"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE-ADSL:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE_ADSL</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE_ADSL NM_DBUS_INTERFACE_DEVICE ".Adsl"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE-WIRELESS:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE_WIRELESS</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE_WIRELESS NM_DBUS_INTERFACE_DEVICE ".Wireless"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE-BLUETOOTH:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE_BLUETOOTH</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE_BLUETOOTH NM_DBUS_INTERFACE_DEVICE ".Bluetooth"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE-OLPC-MESH:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE_OLPC_MESH</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE_OLPC_MESH NM_DBUS_INTERFACE_DEVICE ".OlpcMesh"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-PATH-ACCESS-POINT:CAPS"></a><h3>NM_DBUS_PATH_ACCESS_POINT</h3>
+<pre class="programlisting">#define NM_DBUS_PATH_ACCESS_POINT NM_DBUS_PATH "/AccessPoint"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-ACCESS-POINT:CAPS"></a><h3>NM_DBUS_INTERFACE_ACCESS_POINT</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_ACCESS_POINT NM_DBUS_INTERFACE ".AccessPoint"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE-MODEM:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE_MODEM</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE_MODEM NM_DBUS_INTERFACE_DEVICE ".Modem"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE-WIMAX:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE_WIMAX</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE_WIMAX NM_DBUS_INTERFACE_DEVICE ".WiMax"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-WIMAX-NSP:CAPS"></a><h3>NM_DBUS_INTERFACE_WIMAX_NSP</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_WIMAX_NSP NM_DBUS_INTERFACE ".WiMax.Nsp"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-PATH-WIMAX-NSP:CAPS"></a><h3>NM_DBUS_PATH_WIMAX_NSP</h3>
+<pre class="programlisting">#define NM_DBUS_PATH_WIMAX_NSP NM_DBUS_PATH "/Nsp"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-ACTIVE-CONNECTION:CAPS"></a><h3>NM_DBUS_INTERFACE_ACTIVE_CONNECTION</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_ACTIVE_CONNECTION NM_DBUS_INTERFACE ".Connection.Active"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-IP4-CONFIG:CAPS"></a><h3>NM_DBUS_INTERFACE_IP4_CONFIG</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_IP4_CONFIG NM_DBUS_INTERFACE ".IP4Config"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DHCP4-CONFIG:CAPS"></a><h3>NM_DBUS_INTERFACE_DHCP4_CONFIG</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DHCP4_CONFIG NM_DBUS_INTERFACE ".DHCP4Config"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-IP6-CONFIG:CAPS"></a><h3>NM_DBUS_INTERFACE_IP6_CONFIG</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_IP6_CONFIG NM_DBUS_INTERFACE ".IP6Config"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DHCP6-CONFIG:CAPS"></a><h3>NM_DBUS_INTERFACE_DHCP6_CONFIG</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DHCP6_CONFIG NM_DBUS_INTERFACE ".DHCP6Config"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE-INFINIBAND:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE_INFINIBAND</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE_INFINIBAND NM_DBUS_INTERFACE_DEVICE ".Infiniband"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE-BOND:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE_BOND</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE_BOND NM_DBUS_INTERFACE_DEVICE ".Bond"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE-TEAM:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE_TEAM</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE_TEAM NM_DBUS_INTERFACE_DEVICE ".Team"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE-VLAN:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE_VLAN</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE_VLAN NM_DBUS_INTERFACE_DEVICE ".Vlan"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE-BRIDGE:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE_BRIDGE</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE_BRIDGE NM_DBUS_INTERFACE_DEVICE ".Bridge"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE-GENERIC:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE_GENERIC</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE_GENERIC NM_DBUS_INTERFACE_DEVICE ".Generic"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE-VETH:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE_VETH</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE_VETH NM_DBUS_INTERFACE_DEVICE ".Veth"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE-TUN:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE_TUN</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE_TUN NM_DBUS_INTERFACE_DEVICE ".Tun"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE-MACVLAN:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE_MACVLAN</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE_MACVLAN NM_DBUS_INTERFACE_DEVICE ".Macvlan"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE-VXLAN:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE_VXLAN</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE_VXLAN NM_DBUS_INTERFACE_DEVICE ".Vxlan"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-DEVICE-GRE:CAPS"></a><h3>NM_DBUS_INTERFACE_DEVICE_GRE</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_DEVICE_GRE NM_DBUS_INTERFACE_DEVICE ".Gre"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-SETTINGS:CAPS"></a><h3>NM_DBUS_INTERFACE_SETTINGS</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_SETTINGS "org.freedesktop.NetworkManager.Settings"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-PATH-SETTINGS:CAPS"></a><h3>NM_DBUS_PATH_SETTINGS</h3>
+<pre class="programlisting">#define NM_DBUS_PATH_SETTINGS "/org/freedesktop/NetworkManager/Settings"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-SETTINGS-CONNECTION:CAPS"></a><h3>NM_DBUS_INTERFACE_SETTINGS_CONNECTION</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_SETTINGS_CONNECTION "org.freedesktop.NetworkManager.Settings.Connection"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-PATH-SETTINGS-CONNECTION:CAPS"></a><h3>NM_DBUS_PATH_SETTINGS_CONNECTION</h3>
+<pre class="programlisting">#define NM_DBUS_PATH_SETTINGS_CONNECTION "/org/freedesktop/NetworkManager/Settings/Connection"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-SETTINGS-CONNECTION-SECRETS:CAPS"></a><h3>NM_DBUS_INTERFACE_SETTINGS_CONNECTION_SECRETS</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_SETTINGS_CONNECTION_SECRETS "org.freedesktop.NetworkManager.Settings.Connection.Secrets"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-AGENT-MANAGER:CAPS"></a><h3>NM_DBUS_INTERFACE_AGENT_MANAGER</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_AGENT_MANAGER NM_DBUS_INTERFACE ".AgentManager"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-PATH-AGENT-MANAGER:CAPS"></a><h3>NM_DBUS_PATH_AGENT_MANAGER</h3>
+<pre class="programlisting">#define NM_DBUS_PATH_AGENT_MANAGER "/org/freedesktop/NetworkManager/AgentManager"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-SECRET-AGENT:CAPS"></a><h3>NM_DBUS_INTERFACE_SECRET_AGENT</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_SECRET_AGENT NM_DBUS_INTERFACE ".SecretAgent"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-PATH-SECRET-AGENT:CAPS"></a><h3>NM_DBUS_PATH_SECRET_AGENT</h3>
+<pre class="programlisting">#define NM_DBUS_PATH_SECRET_AGENT "/org/freedesktop/NetworkManager/SecretAgent"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMState-enum"></a><h3>enum NMState</h3>
+<pre class="programlisting">typedef enum {
+ 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
+} NMState;
+</pre>
+<p>
+<a class="link" href="libnm-nm-dbus-interface.html#NMState"><span class="type">NMState</span></a> values indicate the current overall networking state.
+</p>
+<p>
+(Corresponds to the NM_STATE type in nm-manager.xml.)
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-STATE-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_STATE_UNKNOWN</code></span></p></td>
+<td>networking state is unknown
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-STATE-ASLEEP:CAPS"></a><span class="term"><code class="literal">NM_STATE_ASLEEP</code></span></p></td>
+<td>networking is not enabled
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-STATE-DISCONNECTED:CAPS"></a><span class="term"><code class="literal">NM_STATE_DISCONNECTED</code></span></p></td>
+<td>there is no active network connection
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-STATE-DISCONNECTING:CAPS"></a><span class="term"><code class="literal">NM_STATE_DISCONNECTING</code></span></p></td>
+<td>network connections are being cleaned up
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-STATE-CONNECTING:CAPS"></a><span class="term"><code class="literal">NM_STATE_CONNECTING</code></span></p></td>
+<td>a network connection is being started
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-STATE-CONNECTED-LOCAL:CAPS"></a><span class="term"><code class="literal">NM_STATE_CONNECTED_LOCAL</code></span></p></td>
+<td>there is only local IPv4 and/or IPv6 connectivity
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-STATE-CONNECTED-SITE:CAPS"></a><span class="term"><code class="literal">NM_STATE_CONNECTED_SITE</code></span></p></td>
+<td>there is only site-wide IPv4 and/or IPv6 connectivity
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-STATE-CONNECTED-GLOBAL:CAPS"></a><span class="term"><code class="literal">NM_STATE_CONNECTED_GLOBAL</code></span></p></td>
+<td>there is global IPv4 and/or IPv6 Internet connectivity
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMConnectivityState-enum"></a><h3>enum NMConnectivityState</h3>
+<pre class="programlisting">typedef enum {
+ NM_CONNECTIVITY_UNKNOWN,
+ NM_CONNECTIVITY_NONE,
+ NM_CONNECTIVITY_PORTAL,
+ NM_CONNECTIVITY_LIMITED,
+ NM_CONNECTIVITY_FULL
+} NMConnectivityState;
+</pre>
+<p>
+(Corresponds to the NM_CONNECTIVITY type in nm-manager.xml.)
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-CONNECTIVITY-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_CONNECTIVITY_UNKNOWN</code></span></p></td>
+<td>Network connectivity is unknown.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-CONNECTIVITY-NONE:CAPS"></a><span class="term"><code class="literal">NM_CONNECTIVITY_NONE</code></span></p></td>
+<td>The host is not connected to any network.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-CONNECTIVITY-PORTAL:CAPS"></a><span class="term"><code class="literal">NM_CONNECTIVITY_PORTAL</code></span></p></td>
+<td>The host is behind a captive portal and
+ cannot reach the full Internet.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-CONNECTIVITY-LIMITED:CAPS"></a><span class="term"><code class="literal">NM_CONNECTIVITY_LIMITED</code></span></p></td>
+<td>The host is connected to a network, but
+ does not appear to be able to reach the full Internet.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-CONNECTIVITY-FULL:CAPS"></a><span class="term"><code class="literal">NM_CONNECTIVITY_FULL</code></span></p></td>
+<td>The host is connected to a network, and
+ appears to be able to reach the full Internet.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceType-enum"></a><h3>enum NMDeviceType</h3>
+<pre class="programlisting">typedef enum {
+ 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, /* Bluetooth */
+ 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,
+} NMDeviceType;
+</pre>
+<p>
+<a class="link" href="libnm-nm-dbus-interface.html#NMDeviceType"><span class="type">NMDeviceType</span></a> values indicate the type of hardware represented by
+an <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>.
+</p>
+<p>
+(Corresponds to the NM_DEVICE_TYPE type in nm-device.xml.)
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-DEVICE-TYPE-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_TYPE_UNKNOWN</code></span></p></td>
+<td>unknown device
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-TYPE-ETHERNET:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_TYPE_ETHERNET</code></span></p></td>
+<td>a wired ethernet device
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-TYPE-WIFI:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_TYPE_WIFI</code></span></p></td>
+<td>an 802.11 WiFi device
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-TYPE-UNUSED1:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_TYPE_UNUSED1</code></span></p></td>
+<td>not used
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-TYPE-UNUSED2:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_TYPE_UNUSED2</code></span></p></td>
+<td>not used
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-TYPE-BT:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_TYPE_BT</code></span></p></td>
+<td>a Bluetooth device supporting PAN or DUN access protocols
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-TYPE-OLPC-MESH:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_TYPE_OLPC_MESH</code></span></p></td>
+<td>an OLPC XO mesh networking device
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-TYPE-WIMAX:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_TYPE_WIMAX</code></span></p></td>
+<td>an 802.16e Mobile WiMAX broadband device
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-TYPE-MODEM:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_TYPE_MODEM</code></span></p></td>
+<td>a modem supporting analog telephone, CDMA/EVDO,
+GSM/UMTS, or LTE network access protocols
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-TYPE-INFINIBAND:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_TYPE_INFINIBAND</code></span></p></td>
+<td>an IP-over-InfiniBand device
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-TYPE-BOND:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_TYPE_BOND</code></span></p></td>
+<td>a bond master interface
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-TYPE-VLAN:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_TYPE_VLAN</code></span></p></td>
+<td>an 802.1Q VLAN interface
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-TYPE-ADSL:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_TYPE_ADSL</code></span></p></td>
+<td>ADSL modem
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-TYPE-BRIDGE:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_TYPE_BRIDGE</code></span></p></td>
+<td>a bridge master interface
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-TYPE-GENERIC:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_TYPE_GENERIC</code></span></p></td>
+<td>generic support for unrecognized device types
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-TYPE-TEAM:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_TYPE_TEAM</code></span></p></td>
+<td>a team master interface
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceCapabilities-enum"></a><h3>enum NMDeviceCapabilities</h3>
+<pre class="programlisting">typedef enum {
+ /*&lt; flags &gt;*/
+ NM_DEVICE_CAP_NONE = 0x00000000,
+ NM_DEVICE_CAP_NM_SUPPORTED = 0x00000001,
+ NM_DEVICE_CAP_CARRIER_DETECT = 0x00000002,
+ NM_DEVICE_CAP_IS_SOFTWARE = 0x00000004,
+} NMDeviceCapabilities;
+</pre>
+<p>
+General device capability flags.
+</p>
+<p>
+(Corresponds to the NM_DEVICE_CAP type in nm-device-wifi.xml.)
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-DEVICE-CAP-NONE:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_CAP_NONE</code></span></p></td>
+<td>device has no special capabilities
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-CAP-NM-SUPPORTED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_CAP_NM_SUPPORTED</code></span></p></td>
+<td>NetworkManager supports this device
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-CAP-CARRIER-DETECT:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_CAP_CARRIER_DETECT</code></span></p></td>
+<td>this device can indicate carrier status
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-CAP-IS-SOFTWARE:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_CAP_IS_SOFTWARE</code></span></p></td>
+<td>this device is a software device
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceWifiCapabilities-enum"></a><h3>enum NMDeviceWifiCapabilities</h3>
+<pre class="programlisting">typedef enum {
+ /*&lt; flags &gt;*/
+ NM_WIFI_DEVICE_CAP_NONE = 0x00000000,
+ NM_WIFI_DEVICE_CAP_CIPHER_WEP40 = 0x00000001,
+ NM_WIFI_DEVICE_CAP_CIPHER_WEP104 = 0x00000002,
+ NM_WIFI_DEVICE_CAP_CIPHER_TKIP = 0x00000004,
+ NM_WIFI_DEVICE_CAP_CIPHER_CCMP = 0x00000008,
+ NM_WIFI_DEVICE_CAP_WPA = 0x00000010,
+ NM_WIFI_DEVICE_CAP_RSN = 0x00000020,
+ NM_WIFI_DEVICE_CAP_AP = 0x00000040,
+ NM_WIFI_DEVICE_CAP_ADHOC = 0x00000080
+} NMDeviceWifiCapabilities;
+</pre>
+<p>
+802.11 specific device encryption and authentication capabilities.
+</p>
+<p>
+(Corresponds to the NM_802_11_DEVICE_CAP type in nm-device-wifi.xml.)
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-WIFI-DEVICE-CAP-NONE:CAPS"></a><span class="term"><code class="literal">NM_WIFI_DEVICE_CAP_NONE</code></span></p></td>
+<td>device has no encryption/authentication capabilities
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-WIFI-DEVICE-CAP-CIPHER-WEP40:CAPS"></a><span class="term"><code class="literal">NM_WIFI_DEVICE_CAP_CIPHER_WEP40</code></span></p></td>
+<td>device supports 40/64-bit WEP encryption
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-WIFI-DEVICE-CAP-CIPHER-WEP104:CAPS"></a><span class="term"><code class="literal">NM_WIFI_DEVICE_CAP_CIPHER_WEP104</code></span></p></td>
+<td>device supports 104/128-bit WEP encryption
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-WIFI-DEVICE-CAP-CIPHER-TKIP:CAPS"></a><span class="term"><code class="literal">NM_WIFI_DEVICE_CAP_CIPHER_TKIP</code></span></p></td>
+<td>device supports TKIP encryption
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-WIFI-DEVICE-CAP-CIPHER-CCMP:CAPS"></a><span class="term"><code class="literal">NM_WIFI_DEVICE_CAP_CIPHER_CCMP</code></span></p></td>
+<td>device supports AES/CCMP encryption
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-WIFI-DEVICE-CAP-WPA:CAPS"></a><span class="term"><code class="literal">NM_WIFI_DEVICE_CAP_WPA</code></span></p></td>
+<td>device supports WPA1 authentication
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-WIFI-DEVICE-CAP-RSN:CAPS"></a><span class="term"><code class="literal">NM_WIFI_DEVICE_CAP_RSN</code></span></p></td>
+<td>device supports WPA2/RSN authentication
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-WIFI-DEVICE-CAP-AP:CAPS"></a><span class="term"><code class="literal">NM_WIFI_DEVICE_CAP_AP</code></span></p></td>
+<td>device supports Access Point mode
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-WIFI-DEVICE-CAP-ADHOC:CAPS"></a><span class="term"><code class="literal">NM_WIFI_DEVICE_CAP_ADHOC</code></span></p></td>
+<td>device supports Ad-Hoc mode
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM80211ApFlags-enum"></a><h3>enum NM80211ApFlags</h3>
+<pre class="programlisting">typedef enum {
+ /*&lt; underscore_name=nm_802_11_ap_flags, flags &gt;*/
+ NM_802_11_AP_FLAGS_NONE = 0x00000000,
+ NM_802_11_AP_FLAGS_PRIVACY = 0x00000001
+} NM80211ApFlags;
+</pre>
+<p>
+802.11 access point flags.
+</p>
+<p>
+(Corresponds to the NM_802_11_AP_FLAGS type in nm-access-point.xml.)
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-802-11-AP-FLAGS-NONE:CAPS"></a><span class="term"><code class="literal">NM_802_11_AP_FLAGS_NONE</code></span></p></td>
+<td>access point has no special capabilities
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-802-11-AP-FLAGS-PRIVACY:CAPS"></a><span class="term"><code class="literal">NM_802_11_AP_FLAGS_PRIVACY</code></span></p></td>
+<td>access point requires authentication and
+encryption (usually means WEP)
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM80211ApSecurityFlags-enum"></a><h3>enum NM80211ApSecurityFlags</h3>
+<pre class="programlisting">typedef enum {
+ /*&lt; underscore_name=nm_802_11_ap_security_flags, flags &gt;*/
+ NM_802_11_AP_SEC_NONE = 0x00000000,
+ NM_802_11_AP_SEC_PAIR_WEP40 = 0x00000001,
+ NM_802_11_AP_SEC_PAIR_WEP104 = 0x00000002,
+ NM_802_11_AP_SEC_PAIR_TKIP = 0x00000004,
+ NM_802_11_AP_SEC_PAIR_CCMP = 0x00000008,
+ NM_802_11_AP_SEC_GROUP_WEP40 = 0x00000010,
+ NM_802_11_AP_SEC_GROUP_WEP104 = 0x00000020,
+ NM_802_11_AP_SEC_GROUP_TKIP = 0x00000040,
+ NM_802_11_AP_SEC_GROUP_CCMP = 0x00000080,
+ NM_802_11_AP_SEC_KEY_MGMT_PSK = 0x00000100,
+ NM_802_11_AP_SEC_KEY_MGMT_802_1X = 0x00000200
+} NM80211ApSecurityFlags;
+</pre>
+<p>
+802.11 access point security and authentication flags. These flags describe
+the current security requirements of an access point as determined from the
+access point's beacon.
+</p>
+<p>
+(Corresponds to the NM_802_11_AP_SEC type in nm-access-point.xml.)
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-802-11-AP-SEC-NONE:CAPS"></a><span class="term"><code class="literal">NM_802_11_AP_SEC_NONE</code></span></p></td>
+<td>the access point has no special security requirements
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-802-11-AP-SEC-PAIR-WEP40:CAPS"></a><span class="term"><code class="literal">NM_802_11_AP_SEC_PAIR_WEP40</code></span></p></td>
+<td>40/64-bit WEP is supported for
+pairwise/unicast encryption
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-802-11-AP-SEC-PAIR-WEP104:CAPS"></a><span class="term"><code class="literal">NM_802_11_AP_SEC_PAIR_WEP104</code></span></p></td>
+<td>104/128-bit WEP is supported for
+pairwise/unicast encryption
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-802-11-AP-SEC-PAIR-TKIP:CAPS"></a><span class="term"><code class="literal">NM_802_11_AP_SEC_PAIR_TKIP</code></span></p></td>
+<td>TKIP is supported for pairwise/unicast encryption
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-802-11-AP-SEC-PAIR-CCMP:CAPS"></a><span class="term"><code class="literal">NM_802_11_AP_SEC_PAIR_CCMP</code></span></p></td>
+<td>AES/CCMP is supported for pairwise/unicast encryption
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-802-11-AP-SEC-GROUP-WEP40:CAPS"></a><span class="term"><code class="literal">NM_802_11_AP_SEC_GROUP_WEP40</code></span></p></td>
+<td>40/64-bit WEP is supported for group/broadcast
+encryption
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-802-11-AP-SEC-GROUP-WEP104:CAPS"></a><span class="term"><code class="literal">NM_802_11_AP_SEC_GROUP_WEP104</code></span></p></td>
+<td>104/128-bit WEP is supported for
+group/broadcast encryption
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-802-11-AP-SEC-GROUP-TKIP:CAPS"></a><span class="term"><code class="literal">NM_802_11_AP_SEC_GROUP_TKIP</code></span></p></td>
+<td>TKIP is supported for group/broadcast encryption
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-802-11-AP-SEC-GROUP-CCMP:CAPS"></a><span class="term"><code class="literal">NM_802_11_AP_SEC_GROUP_CCMP</code></span></p></td>
+<td>AES/CCMP is supported for group/broadcast
+encryption
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-802-11-AP-SEC-KEY-MGMT-PSK:CAPS"></a><span class="term"><code class="literal">NM_802_11_AP_SEC_KEY_MGMT_PSK</code></span></p></td>
+<td>WPA/RSN Pre-Shared Key encryption is
+supported
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-802-11-AP-SEC-KEY-MGMT-802-1X:CAPS"></a><span class="term"><code class="literal">NM_802_11_AP_SEC_KEY_MGMT_802_1X</code></span></p></td>
+<td>802.1x authentication and key management
+is supported
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM80211Mode-enum"></a><h3>enum NM80211Mode</h3>
+<pre class="programlisting">typedef enum {
+ /*&lt; underscore_name=nm_802_11_mode &gt;*/
+ NM_802_11_MODE_UNKNOWN = 0,
+ NM_802_11_MODE_ADHOC,
+ NM_802_11_MODE_INFRA,
+ NM_802_11_MODE_AP
+} NM80211Mode;
+</pre>
+<p>
+Indicates the 802.11 mode an access point or device is currently in.
+</p>
+<p>
+(Corresponds to the NM_802_11_MODE type in generic-types.xml.)
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-802-11-MODE-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_802_11_MODE_UNKNOWN</code></span></p></td>
+<td>the device or access point mode is unknown
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-802-11-MODE-ADHOC:CAPS"></a><span class="term"><code class="literal">NM_802_11_MODE_ADHOC</code></span></p></td>
+<td>for both devices and access point objects, indicates
+ the object is part of an Ad-Hoc 802.11 network without a central
+ coordinating access point.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-802-11-MODE-INFRA:CAPS"></a><span class="term"><code class="literal">NM_802_11_MODE_INFRA</code></span></p></td>
+<td>the device or access point is in infrastructure mode.
+ For devices, this indicates the device is an 802.11 client/station. For
+ access point objects, this indicates the object is an access point that
+ provides connectivity to clients.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-802-11-MODE-AP:CAPS"></a><span class="term"><code class="literal">NM_802_11_MODE_AP</code></span></p></td>
+<td>the device is an access point/hotspot. Not valid for
+ access point objects; used only for hotspot mode on the local machine.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMBluetoothCapabilities-enum"></a><h3>enum NMBluetoothCapabilities</h3>
+<pre class="programlisting">typedef enum {
+ /*&lt; flags &gt;*/
+ NM_BT_CAPABILITY_NONE = 0x00000000,
+ NM_BT_CAPABILITY_DUN = 0x00000001,
+ NM_BT_CAPABILITY_NAP = 0x00000002,
+} NMBluetoothCapabilities;
+</pre>
+<p>
+<a class="link" href="libnm-nm-dbus-interface.html#NMBluetoothCapabilities"><span class="type">NMBluetoothCapabilities</span></a> values indicate the usable capabilities of a
+Bluetooth device.
+</p>
+<p>
+(Corresponds to the NM_BT_CAPABILITY type in nm-device-bt.xml.)
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-BT-CAPABILITY-NONE:CAPS"></a><span class="term"><code class="literal">NM_BT_CAPABILITY_NONE</code></span></p></td>
+<td>device has no usable capabilities
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-BT-CAPABILITY-DUN:CAPS"></a><span class="term"><code class="literal">NM_BT_CAPABILITY_DUN</code></span></p></td>
+<td>device provides Dial-Up Networking capability
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-BT-CAPABILITY-NAP:CAPS"></a><span class="term"><code class="literal">NM_BT_CAPABILITY_NAP</code></span></p></td>
+<td>device provides Network Access Point capability
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceModemCapabilities-enum"></a><h3>enum NMDeviceModemCapabilities</h3>
+<pre class="programlisting">typedef enum {
+ /*&lt; flags &gt;*/
+ NM_DEVICE_MODEM_CAPABILITY_NONE = 0x00000000,
+ NM_DEVICE_MODEM_CAPABILITY_POTS = 0x00000001,
+ NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO = 0x00000002,
+ NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS = 0x00000004,
+ NM_DEVICE_MODEM_CAPABILITY_LTE = 0x00000008,
+} NMDeviceModemCapabilities;
+</pre>
+<p>
+<a class="link" href="libnm-nm-dbus-interface.html#NMDeviceModemCapabilities"><span class="type">NMDeviceModemCapabilities</span></a> values indicate the generic radio access
+technology families a modem device supports. For more information on the
+specific access technologies the device supports use the ModemManager D-Bus
+API.
+</p>
+<p>
+(Corresponds to the NM_DEVICE_MODEM_CAPABILITY type in nm-device-modem.xml.)
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-DEVICE-MODEM-CAPABILITY-NONE:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_MODEM_CAPABILITY_NONE</code></span></p></td>
+<td>modem has no usable capabilities
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-MODEM-CAPABILITY-POTS:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_MODEM_CAPABILITY_POTS</code></span></p></td>
+<td>modem uses the analog wired telephone
+network and is not a wireless/cellular device
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-MODEM-CAPABILITY-CDMA-EVDO:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO</code></span></p></td>
+<td>modem supports at least one of CDMA
+1xRTT, EVDO revision 0, EVDO revision A, or EVDO revision B
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-MODEM-CAPABILITY-GSM-UMTS:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS</code></span></p></td>
+<td>modem supports at least one of GSM,
+GPRS, EDGE, UMTS, HSDPA, HSUPA, or HSPA+ packet switched data capability
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-MODEM-CAPABILITY-LTE:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_MODEM_CAPABILITY_LTE</code></span></p></td>
+<td>modem has LTE data capability
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceState-enum"></a><h3>enum NMDeviceState</h3>
+<pre class="programlisting">typedef enum {
+ 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
+} NMDeviceState;
+</pre>
+<p>
+(Corresponds to the NM_DEVICE_STATE type in nm-device.xml.)
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_UNKNOWN</code></span></p></td>
+<td>the device's state is unknown
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-UNMANAGED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_UNMANAGED</code></span></p></td>
+<td>the device is recognized, but not managed by
+ NetworkManager
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-UNAVAILABLE:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_UNAVAILABLE</code></span></p></td>
+<td>the device is managed by NetworkManager, but
+ is not available for use. Reasons may include the wireless switched off,
+ missing firmware, no ethernet carrier, missing supplicant or modem manager,
+ etc.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-DISCONNECTED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_DISCONNECTED</code></span></p></td>
+<td>the device can be activated, but is currently
+ idle and not connected to a network.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-PREPARE:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_PREPARE</code></span></p></td>
+<td>the device is preparing the connection to the
+ network. This may include operations like changing the MAC address,
+ setting physical link properties, and anything else required to connect
+ to the requested network.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-CONFIG:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_CONFIG</code></span></p></td>
+<td>the device is connecting to the requested network.
+ This may include operations like associating with the WiFi AP, dialing
+ the modem, connecting to the remote Bluetooth device, etc.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-NEED-AUTH:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_NEED_AUTH</code></span></p></td>
+<td>the device requires more information to continue
+ connecting to the requested network. This includes secrets like WiFi
+ passphrases, login passwords, PIN codes, etc.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-IP-CONFIG:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_IP_CONFIG</code></span></p></td>
+<td>the device is requesting IPv4 and/or IPv6
+ addresses and routing information from the network.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-IP-CHECK:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_IP_CHECK</code></span></p></td>
+<td>the device is checking whether further action is
+ required for the requested network connection. This may include checking
+ whether only local network access is available, whether a captive portal
+ is blocking access to the Internet, etc.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-SECONDARIES:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_SECONDARIES</code></span></p></td>
+<td>the device is waiting for a secondary
+ connection (like a VPN) which must activated before the device can be
+ activated
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-ACTIVATED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_ACTIVATED</code></span></p></td>
+<td>the device has a network connection, either local
+ or global.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-DEACTIVATING:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_DEACTIVATING</code></span></p></td>
+<td>a disconnection from the current network
+ connection was requested, and the device is cleaning up resources used for
+ that connection. The network connection may still be valid.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_FAILED</code></span></p></td>
+<td>the device failed to connect to the requested
+ network and is cleaning up the connection request
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceStateReason-enum"></a><h3>enum NMDeviceStateReason</h3>
+<pre class="programlisting">typedef enum {
+ NM_DEVICE_STATE_REASON_NONE = 0,
+ NM_DEVICE_STATE_REASON_UNKNOWN = 1,
+ NM_DEVICE_STATE_REASON_NOW_MANAGED = 2,
+ NM_DEVICE_STATE_REASON_NOW_UNMANAGED = 3,
+ NM_DEVICE_STATE_REASON_CONFIG_FAILED = 4,
+ NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE = 5,
+ NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED = 6,
+ NM_DEVICE_STATE_REASON_NO_SECRETS = 7,
+ NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT = 8,
+ NM_DEVICE_STATE_REASON_SUPPLICANT_CONFIG_FAILED = 9,
+ NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED = 10,
+ NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT = 11,
+ NM_DEVICE_STATE_REASON_PPP_START_FAILED = 12,
+ NM_DEVICE_STATE_REASON_PPP_DISCONNECT = 13,
+ NM_DEVICE_STATE_REASON_PPP_FAILED = 14,
+ NM_DEVICE_STATE_REASON_DHCP_START_FAILED = 15,
+ NM_DEVICE_STATE_REASON_DHCP_ERROR = 16,
+ NM_DEVICE_STATE_REASON_DHCP_FAILED = 17,
+ NM_DEVICE_STATE_REASON_SHARED_START_FAILED = 18,
+ NM_DEVICE_STATE_REASON_SHARED_FAILED = 19,
+ NM_DEVICE_STATE_REASON_AUTOIP_START_FAILED = 20,
+ NM_DEVICE_STATE_REASON_AUTOIP_ERROR = 21,
+ NM_DEVICE_STATE_REASON_AUTOIP_FAILED = 22,
+ NM_DEVICE_STATE_REASON_MODEM_BUSY = 23,
+ NM_DEVICE_STATE_REASON_MODEM_NO_DIAL_TONE = 24,
+ NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER = 25,
+ NM_DEVICE_STATE_REASON_MODEM_DIAL_TIMEOUT = 26,
+ NM_DEVICE_STATE_REASON_MODEM_DIAL_FAILED = 27,
+ NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED = 28,
+ NM_DEVICE_STATE_REASON_GSM_APN_FAILED = 29,
+ NM_DEVICE_STATE_REASON_GSM_REGISTRATION_NOT_SEARCHING = 30,
+ NM_DEVICE_STATE_REASON_GSM_REGISTRATION_DENIED = 31,
+ NM_DEVICE_STATE_REASON_GSM_REGISTRATION_TIMEOUT = 32,
+ NM_DEVICE_STATE_REASON_GSM_REGISTRATION_FAILED = 33,
+ NM_DEVICE_STATE_REASON_GSM_PIN_CHECK_FAILED = 34,
+ NM_DEVICE_STATE_REASON_FIRMWARE_MISSING = 35,
+ NM_DEVICE_STATE_REASON_REMOVED = 36,
+ NM_DEVICE_STATE_REASON_SLEEPING = 37,
+ NM_DEVICE_STATE_REASON_CONNECTION_REMOVED = 38,
+ NM_DEVICE_STATE_REASON_USER_REQUESTED = 39,
+ NM_DEVICE_STATE_REASON_CARRIER = 40,
+ NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED = 41,
+ NM_DEVICE_STATE_REASON_SUPPLICANT_AVAILABLE = 42,
+ NM_DEVICE_STATE_REASON_MODEM_NOT_FOUND = 43,
+ NM_DEVICE_STATE_REASON_BT_FAILED = 44,
+ NM_DEVICE_STATE_REASON_GSM_SIM_NOT_INSERTED = 45,
+ NM_DEVICE_STATE_REASON_GSM_SIM_PIN_REQUIRED = 46,
+ NM_DEVICE_STATE_REASON_GSM_SIM_PUK_REQUIRED = 47,
+ NM_DEVICE_STATE_REASON_GSM_SIM_WRONG = 48,
+ NM_DEVICE_STATE_REASON_INFINIBAND_MODE = 49,
+ NM_DEVICE_STATE_REASON_DEPENDENCY_FAILED = 50,
+ NM_DEVICE_STATE_REASON_BR2684_FAILED = 51,
+ NM_DEVICE_STATE_REASON_MODEM_MANAGER_UNAVAILABLE = 52,
+ NM_DEVICE_STATE_REASON_SSID_NOT_FOUND = 53,
+ NM_DEVICE_STATE_REASON_SECONDARY_CONNECTION_FAILED = 54,
+ NM_DEVICE_STATE_REASON_DCB_FCOE_FAILED = 55,
+ NM_DEVICE_STATE_REASON_TEAMD_CONTROL_FAILED = 56,
+ NM_DEVICE_STATE_REASON_MODEM_FAILED = 57,
+ NM_DEVICE_STATE_REASON_MODEM_AVAILABLE = 58,
+ NM_DEVICE_STATE_REASON_SIM_PIN_INCORRECT = 59,
+} NMDeviceStateReason;
+</pre>
+<p>
+Device state change reason codes
+</p>
+<p>
+(Corresponds to the NM_DEVICE_STATE_REASON type in nm-device.xml.)
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-NONE:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_NONE</code></span></p></td>
+<td>No reason given
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_UNKNOWN</code></span></p></td>
+<td>Unknown error
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-NOW-MANAGED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_NOW_MANAGED</code></span></p></td>
+<td>Device is now managed
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-NOW-UNMANAGED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_NOW_UNMANAGED</code></span></p></td>
+<td>Device is now unmanaged
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-CONFIG-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_CONFIG_FAILED</code></span></p></td>
+<td>The device could not be readied for configuration
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-IP-CONFIG-UNAVAILABLE:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE</code></span></p></td>
+<td>IP configuration could not be reserved (no available address, timeout, etc)
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-IP-CONFIG-EXPIRED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED</code></span></p></td>
+<td>The IP config is no longer valid
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-NO-SECRETS:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_NO_SECRETS</code></span></p></td>
+<td>Secrets were required, but not provided
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-SUPPLICANT-DISCONNECT:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT</code></span></p></td>
+<td>802.1x supplicant disconnected
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-SUPPLICANT-CONFIG-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_SUPPLICANT_CONFIG_FAILED</code></span></p></td>
+<td>802.1x supplicant configuration failed
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-SUPPLICANT-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED</code></span></p></td>
+<td>802.1x supplicant failed
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-SUPPLICANT-TIMEOUT:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT</code></span></p></td>
+<td>802.1x supplicant took too long to authenticate
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-PPP-START-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_PPP_START_FAILED</code></span></p></td>
+<td>PPP service failed to start
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-PPP-DISCONNECT:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_PPP_DISCONNECT</code></span></p></td>
+<td>PPP service disconnected
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-PPP-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_PPP_FAILED</code></span></p></td>
+<td>PPP failed
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-DHCP-START-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_DHCP_START_FAILED</code></span></p></td>
+<td>DHCP client failed to start
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-DHCP-ERROR:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_DHCP_ERROR</code></span></p></td>
+<td>DHCP client error
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-DHCP-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_DHCP_FAILED</code></span></p></td>
+<td>DHCP client failed
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-SHARED-START-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_SHARED_START_FAILED</code></span></p></td>
+<td>Shared connection service failed to start
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-SHARED-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_SHARED_FAILED</code></span></p></td>
+<td>Shared connection service failed
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-AUTOIP-START-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_AUTOIP_START_FAILED</code></span></p></td>
+<td>AutoIP service failed to start
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-AUTOIP-ERROR:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_AUTOIP_ERROR</code></span></p></td>
+<td>AutoIP service error
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-AUTOIP-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_AUTOIP_FAILED</code></span></p></td>
+<td>AutoIP service failed
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-MODEM-BUSY:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_MODEM_BUSY</code></span></p></td>
+<td>The line is busy
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-MODEM-NO-DIAL-TONE:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_MODEM_NO_DIAL_TONE</code></span></p></td>
+<td>No dial tone
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-MODEM-NO-CARRIER:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER</code></span></p></td>
+<td>No carrier could be established
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-MODEM-DIAL-TIMEOUT:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_MODEM_DIAL_TIMEOUT</code></span></p></td>
+<td>The dialing request timed out
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-MODEM-DIAL-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_MODEM_DIAL_FAILED</code></span></p></td>
+<td>The dialing attempt failed
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-MODEM-INIT-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED</code></span></p></td>
+<td>Modem initialization failed
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-GSM-APN-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_GSM_APN_FAILED</code></span></p></td>
+<td>Failed to select the specified APN
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-GSM-REGISTRATION-NOT-SEARCHING:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_GSM_REGISTRATION_NOT_SEARCHING</code></span></p></td>
+<td>Not searching for networks
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-GSM-REGISTRATION-DENIED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_GSM_REGISTRATION_DENIED</code></span></p></td>
+<td>Network registration denied
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-GSM-REGISTRATION-TIMEOUT:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_GSM_REGISTRATION_TIMEOUT</code></span></p></td>
+<td>Network registration timed out
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-GSM-REGISTRATION-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_GSM_REGISTRATION_FAILED</code></span></p></td>
+<td>Failed to register with the requested network
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-GSM-PIN-CHECK-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_GSM_PIN_CHECK_FAILED</code></span></p></td>
+<td>PIN check failed
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-FIRMWARE-MISSING:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_FIRMWARE_MISSING</code></span></p></td>
+<td>Necessary firmware for the device may be missing
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-REMOVED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_REMOVED</code></span></p></td>
+<td>The device was removed
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-SLEEPING:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_SLEEPING</code></span></p></td>
+<td>NetworkManager went to sleep
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-CONNECTION-REMOVED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_CONNECTION_REMOVED</code></span></p></td>
+<td>The device's active connection disappeared
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-USER-REQUESTED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_USER_REQUESTED</code></span></p></td>
+<td>Device disconnected by user or client
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-CARRIER:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_CARRIER</code></span></p></td>
+<td>Carrier/link changed
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-CONNECTION-ASSUMED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED</code></span></p></td>
+<td>The device's existing connection was assumed
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-SUPPLICANT-AVAILABLE:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_SUPPLICANT_AVAILABLE</code></span></p></td>
+<td>The supplicant is now available
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-MODEM-NOT-FOUND:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_MODEM_NOT_FOUND</code></span></p></td>
+<td>The modem could not be found
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-BT-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_BT_FAILED</code></span></p></td>
+<td>The Bluetooth connection failed or timed out
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-GSM-SIM-NOT-INSERTED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_GSM_SIM_NOT_INSERTED</code></span></p></td>
+<td>GSM Modem's SIM Card not inserted
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-GSM-SIM-PIN-REQUIRED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_GSM_SIM_PIN_REQUIRED</code></span></p></td>
+<td>GSM Modem's SIM Pin required
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-GSM-SIM-PUK-REQUIRED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_GSM_SIM_PUK_REQUIRED</code></span></p></td>
+<td>GSM Modem's SIM Puk required
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-GSM-SIM-WRONG:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_GSM_SIM_WRONG</code></span></p></td>
+<td>GSM Modem's SIM wrong
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-INFINIBAND-MODE:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_INFINIBAND_MODE</code></span></p></td>
+<td>InfiniBand device does not support connected mode
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-DEPENDENCY-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_DEPENDENCY_FAILED</code></span></p></td>
+<td>A dependency of the connection failed
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-BR2684-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_BR2684_FAILED</code></span></p></td>
+<td>Problem with the RFC 2684 Ethernet over ADSL bridge
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-MODEM-MANAGER-UNAVAILABLE:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_MODEM_MANAGER_UNAVAILABLE</code></span></p></td>
+<td>ModemManager not running
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-SSID-NOT-FOUND:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_SSID_NOT_FOUND</code></span></p></td>
+<td>The WiFi network could not be found
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-SECONDARY-CONNECTION-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_SECONDARY_CONNECTION_FAILED</code></span></p></td>
+<td>A secondary connection of the base connection failed
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-DCB-FCOE-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_DCB_FCOE_FAILED</code></span></p></td>
+<td>DCB or FCoE setup failed
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-TEAMD-CONTROL-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_TEAMD_CONTROL_FAILED</code></span></p></td>
+<td>teamd control failed
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-MODEM-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_MODEM_FAILED</code></span></p></td>
+<td>Modem failed or no longer available
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-MODEM-AVAILABLE:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_MODEM_AVAILABLE</code></span></p></td>
+<td>Modem now ready and available
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-STATE-REASON-SIM-PIN-INCORRECT:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_STATE_REASON_SIM_PIN_INCORRECT</code></span></p></td>
+<td>SIM PIN was incorrect
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMActiveConnectionState-enum"></a><h3>enum NMActiveConnectionState</h3>
+<pre class="programlisting">typedef enum {
+ NM_ACTIVE_CONNECTION_STATE_UNKNOWN = 0,
+ NM_ACTIVE_CONNECTION_STATE_ACTIVATING,
+ NM_ACTIVE_CONNECTION_STATE_ACTIVATED,
+ NM_ACTIVE_CONNECTION_STATE_DEACTIVATING,
+ NM_ACTIVE_CONNECTION_STATE_DEACTIVATED
+} NMActiveConnectionState;
+</pre>
+<p>
+<a class="link" href="libnm-nm-dbus-interface.html#NMActiveConnectionState"><span class="type">NMActiveConnectionState</span></a> values indicate the state of a connection to a
+specific network while it is starting, connected, or disconnecting from that
+network.
+</p>
+<p>
+(Corresponds to the NM_ACTIVE_CONNECTION_STATE type in nm-active-connection.xml.)
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-ACTIVE-CONNECTION-STATE-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_ACTIVE_CONNECTION_STATE_UNKNOWN</code></span></p></td>
+<td>the state of the connection is unknown
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-ACTIVE-CONNECTION-STATE-ACTIVATING:CAPS"></a><span class="term"><code class="literal">NM_ACTIVE_CONNECTION_STATE_ACTIVATING</code></span></p></td>
+<td>a network connection is being prepared
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-ACTIVE-CONNECTION-STATE-ACTIVATED:CAPS"></a><span class="term"><code class="literal">NM_ACTIVE_CONNECTION_STATE_ACTIVATED</code></span></p></td>
+<td>there is a connection to the network
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-ACTIVE-CONNECTION-STATE-DEACTIVATING:CAPS"></a><span class="term"><code class="literal">NM_ACTIVE_CONNECTION_STATE_DEACTIVATING</code></span></p></td>
+<td>the network connection is being
+ torn down and cleaned up
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-ACTIVE-CONNECTION-STATE-DEACTIVATED:CAPS"></a><span class="term"><code class="literal">NM_ACTIVE_CONNECTION_STATE_DEACTIVATED</code></span></p></td>
+<td>the network connection is disconnected
+ and will be removed
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSecretAgentGetSecretsFlags-enum"></a><h3>enum NMSecretAgentGetSecretsFlags</h3>
+<pre class="programlisting">typedef enum {
+ /*&lt; flags &gt;*/
+ 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,
+
+ /* Internal to NM; not part of the D-Bus API */
+ NM_SECRET_AGENT_GET_SECRETS_FLAG_ONLY_SYSTEM = 0x80000000,
+ NM_SECRET_AGENT_GET_SECRETS_FLAG_NO_ERRORS = 0x40000000,
+} NMSecretAgentGetSecretsFlags;
+</pre>
+<p>
+<a class="link" href="libnm-nm-dbus-interface.html#NMSecretAgentGetSecretsFlags"><span class="type">NMSecretAgentGetSecretsFlags</span></a> values modify the behavior of a GetSecrets request.
+</p>
+<p>
+(Corresponds to the NM_SECRET_AGENT_GET_SECRETS_FLAGS type in nm-secret-agent.xml.)
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<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><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><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><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>
+<tr>
+<td><p><a name="NM-SECRET-AGENT-GET-SECRETS-FLAG-ONLY-SYSTEM:CAPS"></a><span class="term"><code class="literal">NM_SECRET_AGENT_GET_SECRETS_FLAG_ONLY_SYSTEM</code></span></p></td>
+<td>Internal flag, not part of
+ the D-Bus API.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-SECRET-AGENT-GET-SECRETS-FLAG-NO-ERRORS:CAPS"></a><span class="term"><code class="literal">NM_SECRET_AGENT_GET_SECRETS_FLAG_NO_ERRORS</code></span></p></td>
+<td>Internal flag, not part of
+ the D-Bus API.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSecretAgentCapabilities-enum"></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="libnm-nm-dbus-interface.html#NMSecretAgentCapabilities"><span class="type">NMSecretAgentCapabilities</span></a> indicate various capabilities of the agent.
+</p>
+<p>
+(Corresponds to the NM_SECRET_AGENT_CAPABILITIES type in nm-secret-agent.xml.)
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<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><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 passing hints to
+VPN plugin authentication dialogs.
+</td>
+</tr>
+<tr>
+<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>
+</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/html/libnm-nm-errors.html b/docs/libnm/html/libnm-nm-errors.html
new file mode 100644
index 000000000..79a6365c3
--- /dev/null
+++ b/docs/libnm/html/libnm-nm-errors.html
@@ -0,0 +1,844 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>nm-errors</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch02.html" title="Client Object API Reference">
+<link rel="prev" href="NMObject.html" title="NMObject">
+<link rel="next" href="libnm-nm-dbus-interface.html" title="nm-dbus-interface">
+<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="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 Reference Manual</th>
+<td><a accesskey="n" href="libnm-nm-dbus-interface.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-nm-errors.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#libnm-nm-errors.description" class="shortcut">Description</a>
+  | 
+ <a href="#libnm-nm-errors.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="libnm-nm-errors"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="libnm-nm-errors.top_of_page"></a>nm-errors</span></h2>
+<p>nm-errors</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="libnm-nm-errors.synopsis"></a><h2>Synopsis</h2>
+<a name="NMAgentManagerError"></a><a name="NMConnectionError"></a><a name="NMCryptoError"></a><a name="NMDeviceError"></a><a name="NMManagerError"></a><a name="NMSecretAgentError"></a><a name="NMSettingsError"></a><a name="NMVpnPluginError"></a><pre class="synopsis">enum <a class="link" href="libnm-nm-errors.html#NMAgentManagerError-enum" title="enum NMAgentManagerError">NMAgentManagerError</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-nm-errors.html#nm-agent-manager-error-quark" title="nm_agent_manager_error_quark ()">nm_agent_manager_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="libnm-nm-errors.html#NM-AGENT-MANAGER-ERROR:CAPS" title="NM_AGENT_MANAGER_ERROR">NM_AGENT_MANAGER_ERROR</a>
+enum <a class="link" href="libnm-nm-errors.html#NMConnectionError-enum" title="enum NMConnectionError">NMConnectionError</a>;
+#define <a class="link" href="libnm-nm-errors.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="libnm-nm-errors.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>);
+enum <a class="link" href="libnm-nm-errors.html#NMCryptoError-enum" title="enum NMCryptoError">NMCryptoError</a>;
+#define <a class="link" href="libnm-nm-errors.html#NM-CRYPTO-ERROR:CAPS" title="NM_CRYPTO_ERROR">NM_CRYPTO_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="libnm-nm-errors.html#nm-crypto-error-quark" title="nm_crypto_error_quark ()">nm_crypto_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+enum <a class="link" href="libnm-nm-errors.html#NMDeviceError-enum" title="enum NMDeviceError">NMDeviceError</a>;
+#define <a class="link" href="libnm-nm-errors.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="libnm-nm-errors.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>);
+enum <a class="link" href="libnm-nm-errors.html#NMManagerError-enum" title="enum NMManagerError">NMManagerError</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-nm-errors.html#nm-manager-error-quark" title="nm_manager_error_quark ()">nm_manager_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="libnm-nm-errors.html#NM-MANAGER-ERROR:CAPS" title="NM_MANAGER_ERROR">NM_MANAGER_ERROR</a>
+enum <a class="link" href="libnm-nm-errors.html#NMSecretAgentError-enum" title="enum NMSecretAgentError">NMSecretAgentError</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-nm-errors.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>);
+#define <a class="link" href="libnm-nm-errors.html#NM-SECRET-AGENT-ERROR:CAPS" title="NM_SECRET_AGENT_ERROR">NM_SECRET_AGENT_ERROR</a>
+enum <a class="link" href="libnm-nm-errors.html#NMSettingsError-enum" title="enum NMSettingsError">NMSettingsError</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-nm-errors.html#nm-settings-error-quark" title="nm_settings_error_quark ()">nm_settings_error_quark</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+#define <a class="link" href="libnm-nm-errors.html#NM-SETTINGS-ERROR:CAPS" title="NM_SETTINGS_ERROR">NM_SETTINGS_ERROR</a>
+enum <a class="link" href="libnm-nm-errors.html#NMVpnPluginError-enum" title="enum NMVpnPluginError">NMVpnPluginError</a>;
+#define <a class="link" href="libnm-nm-errors.html#NM-VPN-PLUGIN-ERROR:CAPS" title="NM_VPN_PLUGIN_ERROR">NM_VPN_PLUGIN_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="libnm-nm-errors.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>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="libnm-nm-errors.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ GEnum
+ +----NMAgentManagerError
+</pre>
+<pre class="synopsis">
+ GEnum
+ +----NMConnectionError
+</pre>
+<pre class="synopsis">
+ GEnum
+ +----NMCryptoError
+</pre>
+<pre class="synopsis">
+ GEnum
+ +----NMDeviceError
+</pre>
+<pre class="synopsis">
+ GEnum
+ +----NMManagerError
+</pre>
+<pre class="synopsis">
+ GEnum
+ +----NMSecretAgentError
+</pre>
+<pre class="synopsis">
+ GEnum
+ +----NMSettingsError
+</pre>
+<pre class="synopsis">
+ GEnum
+ +----NMVpnPluginError
+</pre>
+</div>
+<div class="refsect1">
+<a name="libnm-nm-errors.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="libnm-nm-errors.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NMAgentManagerError-enum"></a><h3>enum NMAgentManagerError</h3>
+<pre class="programlisting">typedef enum {
+ NM_AGENT_MANAGER_ERROR_FAILED = 0, /*&lt; nick=Failed &gt;*/
+ NM_AGENT_MANAGER_ERROR_PERMISSION_DENIED, /*&lt; nick=PermissionDenied &gt;*/
+ NM_AGENT_MANAGER_ERROR_INVALID_IDENTIFIER, /*&lt; nick=InvalidIdentifier &gt;*/
+ NM_AGENT_MANAGER_ERROR_NOT_REGISTERED, /*&lt; nick=NotRegistered &gt;*/
+ NM_AGENT_MANAGER_ERROR_NO_SECRETS, /*&lt; nick=NoSecrets &gt;*/
+ NM_AGENT_MANAGER_ERROR_USER_CANCELED, /*&lt; nick=UserCanceled &gt;*/
+} NMAgentManagerError;
+</pre>
+<p>
+Errors returned from the secret-agent manager.
+</p>
+<p>
+These errors may be returned from operations that could cause secrets to be
+requested (such as <a href="https://developer.gnome.org/libnm-glib/0.9/NMClient.html#nm-client-activate-connection"><code class="function">nm_client_activate_connection()</code></a>), and correspond to D-Bus
+errors in the "org.freedesktop.NetworkManager.AgentManager" namespace.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-AGENT-MANAGER-ERROR-FAILED:CAPS"></a><span class="term"><code class="literal">NM_AGENT_MANAGER_ERROR_FAILED</code></span></p></td>
+<td>unknown or unspecified error
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-AGENT-MANAGER-ERROR-PERMISSION-DENIED:CAPS"></a><span class="term"><code class="literal">NM_AGENT_MANAGER_ERROR_PERMISSION_DENIED</code></span></p></td>
+<td>The caller does not have permission
+ to register a secret agent, or is trying to register the same secret agent
+ twice.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-AGENT-MANAGER-ERROR-INVALID-IDENTIFIER:CAPS"></a><span class="term"><code class="literal">NM_AGENT_MANAGER_ERROR_INVALID_IDENTIFIER</code></span></p></td>
+<td>The identifier is not a valid
+ secret agent identifier.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-AGENT-MANAGER-ERROR-NOT-REGISTERED:CAPS"></a><span class="term"><code class="literal">NM_AGENT_MANAGER_ERROR_NOT_REGISTERED</code></span></p></td>
+<td>The caller tried to unregister an agent
+ that was not registered.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-AGENT-MANAGER-ERROR-NO-SECRETS:CAPS"></a><span class="term"><code class="literal">NM_AGENT_MANAGER_ERROR_NO_SECRETS</code></span></p></td>
+<td>No secret agent returned secrets for this
+ request
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-AGENT-MANAGER-ERROR-USER-CANCELED:CAPS"></a><span class="term"><code class="literal">NM_AGENT_MANAGER_ERROR_USER_CANCELED</code></span></p></td>
+<td>The user canceled the secrets request.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-agent-manager-error-quark"></a><h3>nm_agent_manager_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_agent_manager_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-AGENT-MANAGER-ERROR:CAPS"></a><h3>NM_AGENT_MANAGER_ERROR</h3>
+<pre class="programlisting">#define NM_AGENT_MANAGER_ERROR (nm_agent_manager_error_quark ())
+</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_FAILED = 0, /*&lt; nick=Failed &gt;*/
+ NM_CONNECTION_ERROR_SETTING_NOT_FOUND, /*&lt; nick=SettingNotFound &gt;*/
+ NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND, /*&lt; nick=PropertyNotFound &gt;*/
+ NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET, /*&lt; nick=PropertyNotSecret &gt;*/
+ NM_CONNECTION_ERROR_MISSING_SETTING, /*&lt; nick=MissingSetting &gt;*/
+ NM_CONNECTION_ERROR_INVALID_SETTING, /*&lt; nick=InvalidSetting &gt;*/
+ NM_CONNECTION_ERROR_MISSING_PROPERTY, /*&lt; nick=MissingProperty &gt;*/
+ NM_CONNECTION_ERROR_INVALID_PROPERTY, /*&lt; nick=InvalidProperty &gt;*/
+} NMConnectionError;
+</pre>
+<p>
+Describes errors that may result from operations involving a <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a>
+or its <a href="NMSetting.html"><span class="type">NMSettings</span></a>.
+</p>
+<p>
+These errors may be returned directly from <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> and <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a>
+methods, or may be returned from D-Bus operations (eg on <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> or
+<a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a>), where they correspond to errors in the
+"org.freedesktop.NetworkManager.Settings.Connection" namespace.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-CONNECTION-ERROR-FAILED:CAPS"></a><span class="term"><code class="literal">NM_CONNECTION_ERROR_FAILED</code></span></p></td>
+<td>unknown or unclassified error
+</td>
+</tr>
+<tr>
+<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 href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><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>
+<tr>
+<td><p><a name="NM-CONNECTION-ERROR-PROPERTY-NOT-FOUND:CAPS"></a><span class="term"><code class="literal">NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND</code></span></p></td>
+<td>the <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> did not contain the
+ requested <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> property
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-CONNECTION-ERROR-PROPERTY-NOT-SECRET:CAPS"></a><span class="term"><code class="literal">NM_CONNECTION_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><p><a name="NM-CONNECTION-ERROR-MISSING-SETTING:CAPS"></a><span class="term"><code class="literal">NM_CONNECTION_ERROR_MISSING_SETTING</code></span></p></td>
+<td>the <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> object is missing an
+ <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a> which is required for its configuration. The error message will
+ always be prefixed with "&lt;setting-name&gt;: ", where "&lt;setting-name&gt;" is the
+ name of the setting that is missing.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-CONNECTION-ERROR-INVALID-SETTING:CAPS"></a><span class="term"><code class="literal">NM_CONNECTION_ERROR_INVALID_SETTING</code></span></p></td>
+<td>the <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> object contains an
+ invalid or inappropriate <a class="link" href="NMSetting.html" title="NMSetting"><span class="type">NMSetting</span></a>. The error message will always be
+ prefixed with "&lt;setting-name&gt;: ", where "&lt;setting-name&gt;" is the name of the
+ setting that is invalid.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-CONNECTION-ERROR-MISSING-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_CONNECTION_ERROR_MISSING_PROPERTY</code></span></p></td>
+<td>the <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> object is invalid
+ because it is missing a required property. The error message will always be
+ prefixed with "&lt;setting-name&gt;.&lt;property-name&gt;: ", where "&lt;setting-name&gt;" is
+ the name of the setting with the missing property, and "&lt;property-name&gt;" is
+ the property that is missing.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-CONNECTION-ERROR-INVALID-PROPERTY:CAPS"></a><span class="term"><code class="literal">NM_CONNECTION_ERROR_INVALID_PROPERTY</code></span></p></td>
+<td>the <a href="https://developer.gnome.org/libnm-util/0.9/NMConnection.html"><span class="type">NMConnection</span></a> object is invalid
+ because a property has an invalid value. The error message will always be
+ prefixed with "&lt;setting-name&gt;.&lt;property-name&gt;: ", where "&lt;setting-name&gt;" is
+ the name of the setting with the invalid property, and "&lt;property-name&gt;" is
+ the property that is invalid.
+</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>
+<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>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMCryptoError-enum"></a><h3>enum NMCryptoError</h3>
+<pre class="programlisting">typedef enum {
+ NM_CRYPTO_ERROR_FAILED = 0,
+ NM_CRYPTO_ERROR_INVALID_DATA,
+ NM_CRYPTO_ERROR_INVALID_PASSWORD,
+ NM_CRYPTO_ERROR_UNKNOWN_CIPHER,
+ NM_CRYPTO_ERROR_DECRYPTION_FAILED,
+ NM_CRYPTO_ERROR_ENCRYPTION_FAILED,
+} NMCryptoError;
+</pre>
+<p>
+Cryptography-related errors that can be returned from some nm-utils methods,
+and some <a class="link" href="NMSetting8021x.html" title="NMSetting8021x"><span class="type">NMSetting8021x</span></a> operations.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-CRYPTO-ERROR-FAILED:CAPS"></a><span class="term"><code class="literal">NM_CRYPTO_ERROR_FAILED</code></span></p></td>
+<td>generic failure
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-CRYPTO-ERROR-INVALID-DATA:CAPS"></a><span class="term"><code class="literal">NM_CRYPTO_ERROR_INVALID_DATA</code></span></p></td>
+<td>the certificate or key data provided
+ was invalid
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-CRYPTO-ERROR-INVALID-PASSWORD:CAPS"></a><span class="term"><code class="literal">NM_CRYPTO_ERROR_INVALID_PASSWORD</code></span></p></td>
+<td>the password was invalid
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-CRYPTO-ERROR-UNKNOWN-CIPHER:CAPS"></a><span class="term"><code class="literal">NM_CRYPTO_ERROR_UNKNOWN_CIPHER</code></span></p></td>
+<td>the data uses an unknown cipher
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-CRYPTO-ERROR-DECRYPTION-FAILED:CAPS"></a><span class="term"><code class="literal">NM_CRYPTO_ERROR_DECRYPTION_FAILED</code></span></p></td>
+<td>decryption failed
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-CRYPTO-ERROR-ENCRYPTION-FAILED:CAPS"></a><span class="term"><code class="literal">NM_CRYPTO_ERROR_ENCRYPTION_FAILED</code></span></p></td>
+<td>encryption failed
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-CRYPTO-ERROR:CAPS"></a><h3>NM_CRYPTO_ERROR</h3>
+<pre class="programlisting">#define NM_CRYPTO_ERROR nm_crypto_error_quark ()
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-crypto-error-quark"></a><h3>nm_crypto_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_crypto_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMDeviceError-enum"></a><h3>enum NMDeviceError</h3>
+<pre class="programlisting">typedef enum {
+ NM_DEVICE_ERROR_FAILED = 0, /*&lt; nick=Failed &gt;*/
+ NM_DEVICE_ERROR_CREATION_FAILED, /*&lt; nick=CreationFailed &gt;*/
+ NM_DEVICE_ERROR_INVALID_CONNECTION, /*&lt; nick=InvalidConnection &gt;*/
+ NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION, /*&lt; nick=IncompatibleConnection &gt;*/
+ NM_DEVICE_ERROR_NOT_ACTIVE, /*&lt; nick=NotActive &gt;*/
+ NM_DEVICE_ERROR_NOT_SOFTWARE, /*&lt; nick=NotSoftware &gt;*/
+ NM_DEVICE_ERROR_NOT_ALLOWED, /*&lt; nick=NotAllowed &gt;*/
+ NM_DEVICE_ERROR_SPECIFIC_OBJECT_NOT_FOUND, /*&lt; nick=SpecificObjectNotFound &gt;*/
+} NMDeviceError;
+</pre>
+<p>
+Device-related errors.
+</p>
+<p>
+These errors may be returned directly from <a class="link" href="NMDevice.html" title="NMDevice"><span class="type">NMDevice</span></a> methods, or may be
+returned from D-Bus operations (where they correspond to errors in the
+"org.freedesktop.NetworkManager.Device" namespace).
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-DEVICE-ERROR-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_ERROR_FAILED</code></span></p></td>
+<td>unknown or unclassified error
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-ERROR-CREATION-FAILED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_ERROR_CREATION_FAILED</code></span></p></td>
+<td>NetworkManager failed to create the device
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-ERROR-INVALID-CONNECTION:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_ERROR_INVALID_CONNECTION</code></span></p></td>
+<td>the specified connection is not valid
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-ERROR-INCOMPATIBLE-CONNECTION:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION</code></span></p></td>
+<td>the specified connection is not
+ compatible with this device.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-ERROR-NOT-ACTIVE:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_ERROR_NOT_ACTIVE</code></span></p></td>
+<td>the device does not have an active connection
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-ERROR-NOT-SOFTWARE:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_ERROR_NOT_SOFTWARE</code></span></p></td>
+<td>the requested operation is only valid on
+ software devices.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-ERROR-NOT-ALLOWED:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_ERROR_NOT_ALLOWED</code></span></p></td>
+<td>the requested operation is not allowed at
+ this time.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-DEVICE-ERROR-SPECIFIC-OBJECT-NOT-FOUND:CAPS"></a><span class="term"><code class="literal">NM_DEVICE_ERROR_SPECIFIC_OBJECT_NOT_FOUND</code></span></p></td>
+<td>the "specific object" in the
+ activation request (eg, the <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>) was not
+ found.
+</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>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMManagerError-enum"></a><h3>enum NMManagerError</h3>
+<pre class="programlisting">typedef enum {
+ NM_MANAGER_ERROR_FAILED = 0, /*&lt; nick=Failed &gt;*/
+ NM_MANAGER_ERROR_PERMISSION_DENIED, /*&lt; nick=PermissionDenied &gt;*/
+ NM_MANAGER_ERROR_UNKNOWN_CONNECTION, /*&lt; nick=UnknownConnection &gt;*/
+ NM_MANAGER_ERROR_UNKNOWN_DEVICE, /*&lt; nick=UnknownDevice &gt;*/
+ NM_MANAGER_ERROR_CONNECTION_NOT_AVAILABLE, /*&lt; nick=ConnectionNotAvailable &gt;*/
+ NM_MANAGER_ERROR_CONNECTION_NOT_ACTIVE, /*&lt; nick=ConnectionNotActive &gt;*/
+ NM_MANAGER_ERROR_CONNECTION_ALREADY_ACTIVE, /*&lt; nick=ConnectionAlreadyActive &gt;*/
+ NM_MANAGER_ERROR_DEPENDENCY_FAILED, /*&lt; nick=DependencyFailed &gt;*/
+ NM_MANAGER_ERROR_ALREADY_ASLEEP_OR_AWAKE, /*&lt; nick=AlreadyAsleepOrAwake &gt;*/
+ NM_MANAGER_ERROR_ALREADY_ENABLED_OR_DISABLED, /*&lt; nick=AlreadyEnabledOrDisabled &gt;*/
+ NM_MANAGER_ERROR_UNKNOWN_LOG_LEVEL, /*&lt; nick=UnknownLogLevel &gt;*/
+ NM_MANAGER_ERROR_UNKNOWN_LOG_DOMAIN, /*&lt; nick=UnknownLogDomain &gt;*/
+} NMManagerError;
+</pre>
+<p>
+Errors related to the main "network management" interface of NetworkManager.
+These may be returned from <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> methods that invoke D-Bus operations on
+the "org.freedesktop.NetworkManager" interface, and correspond to D-Bus
+errors in that namespace.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-MANAGER-ERROR-FAILED:CAPS"></a><span class="term"><code class="literal">NM_MANAGER_ERROR_FAILED</code></span></p></td>
+<td>unknown or unclassified error
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-MANAGER-ERROR-PERMISSION-DENIED:CAPS"></a><span class="term"><code class="literal">NM_MANAGER_ERROR_PERMISSION_DENIED</code></span></p></td>
+<td>Permission denied.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-MANAGER-ERROR-UNKNOWN-CONNECTION:CAPS"></a><span class="term"><code class="literal">NM_MANAGER_ERROR_UNKNOWN_CONNECTION</code></span></p></td>
+<td>The requested connection is not known.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-MANAGER-ERROR-UNKNOWN-DEVICE:CAPS"></a><span class="term"><code class="literal">NM_MANAGER_ERROR_UNKNOWN_DEVICE</code></span></p></td>
+<td>The requested device is not known.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-MANAGER-ERROR-CONNECTION-NOT-AVAILABLE:CAPS"></a><span class="term"><code class="literal">NM_MANAGER_ERROR_CONNECTION_NOT_AVAILABLE</code></span></p></td>
+<td>The requested connection cannot be
+ activated at this time.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-MANAGER-ERROR-CONNECTION-NOT-ACTIVE:CAPS"></a><span class="term"><code class="literal">NM_MANAGER_ERROR_CONNECTION_NOT_ACTIVE</code></span></p></td>
+<td>The request could not be completed
+ because a required connection is not active.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-MANAGER-ERROR-CONNECTION-ALREADY-ACTIVE:CAPS"></a><span class="term"><code class="literal">NM_MANAGER_ERROR_CONNECTION_ALREADY_ACTIVE</code></span></p></td>
+<td>The connection to be activated was
+ already active on another device.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-MANAGER-ERROR-DEPENDENCY-FAILED:CAPS"></a><span class="term"><code class="literal">NM_MANAGER_ERROR_DEPENDENCY_FAILED</code></span></p></td>
+<td>An activation request failed due to a
+ dependency being unavailable.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-MANAGER-ERROR-ALREADY-ASLEEP-OR-AWAKE:CAPS"></a><span class="term"><code class="literal">NM_MANAGER_ERROR_ALREADY_ASLEEP_OR_AWAKE</code></span></p></td>
+<td>The manager is already in the requested
+ sleep/wake state.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-MANAGER-ERROR-ALREADY-ENABLED-OR-DISABLED:CAPS"></a><span class="term"><code class="literal">NM_MANAGER_ERROR_ALREADY_ENABLED_OR_DISABLED</code></span></p></td>
+<td>The network is already
+ enabled/disabled.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-MANAGER-ERROR-UNKNOWN-LOG-LEVEL:CAPS"></a><span class="term"><code class="literal">NM_MANAGER_ERROR_UNKNOWN_LOG_LEVEL</code></span></p></td>
+<td>Unknown log level in SetLogging
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-MANAGER-ERROR-UNKNOWN-LOG-DOMAIN:CAPS"></a><span class="term"><code class="literal">NM_MANAGER_ERROR_UNKNOWN_LOG_DOMAIN</code></span></p></td>
+<td>Unknown log domain in SetLogging
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-manager-error-quark"></a><h3>nm_manager_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_manager_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-MANAGER-ERROR:CAPS"></a><h3>NM_MANAGER_ERROR</h3>
+<pre class="programlisting">#define NM_MANAGER_ERROR (nm_manager_error_quark ())
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMSecretAgentError-enum"></a><h3>enum NMSecretAgentError</h3>
+<pre class="programlisting">typedef enum {
+ NM_SECRET_AGENT_ERROR_FAILED = 0, /*&lt; nick=Failed &gt;*/
+ NM_SECRET_AGENT_ERROR_PERMISSION_DENIED, /*&lt; nick=PermissionDenied &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_NO_SECRETS, /*&lt; nick=NoSecrets &gt;*/
+} NMSecretAgentError;
+</pre>
+<p>
+<a class="link" href="libnm-nm-errors.html#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. They
+correspond to errors in the "org.freedesktop.NetworkManager.SecretManager"
+namespace.
+</p>
+<p>
+Client APIs such as <a href="https://developer.gnome.org/libnm-glib/0.9/NMClient.html#nm-client-activate-connection"><code class="function">nm_client_activate_connection()</code></a> will not see these error
+codes; instead, the secret agent manager will translate them to the
+corresponding <a class="link" href="libnm-nm-errors.html#NMAgentManagerError"><span class="type">NMAgentManagerError</span></a> codes.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-SECRET-AGENT-ERROR-FAILED:CAPS"></a><span class="term"><code class="literal">NM_SECRET_AGENT_ERROR_FAILED</code></span></p></td>
+<td>unknown or unclassified error
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-SECRET-AGENT-ERROR-PERMISSION-DENIED:CAPS"></a><span class="term"><code class="literal">NM_SECRET_AGENT_ERROR_PERMISSION_DENIED</code></span></p></td>
+<td>the caller (ie, NetworkManager) is
+ not authorized to make this request
+</td>
+</tr>
+<tr>
+<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 is invalid
+</td>
+</tr>
+<tr>
+<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><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><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>
+<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="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="NMSettingsError-enum"></a><h3>enum NMSettingsError</h3>
+<pre class="programlisting">typedef enum {
+ NM_SETTINGS_ERROR_FAILED = 0, /*&lt; nick=Failed &gt;*/
+ NM_SETTINGS_ERROR_PERMISSION_DENIED, /*&lt; nick=PermissionDenied &gt;*/
+ NM_SETTINGS_ERROR_NOT_SUPPORTED, /*&lt; nick=NotSupported &gt;*/
+ NM_SETTINGS_ERROR_INVALID_CONNECTION, /*&lt; nick=InvalidConnection &gt;*/
+ NM_SETTINGS_ERROR_READ_ONLY_CONNECTION, /*&lt; nick=ReadOnlyConnection &gt;*/
+ NM_SETTINGS_ERROR_UUID_EXISTS, /*&lt; nick=UuidExists &gt;*/
+ NM_SETTINGS_ERROR_INVALID_HOSTNAME, /*&lt; nick=InvalidHostname &gt;*/
+} NMSettingsError;
+</pre>
+<p>
+Errors related to the settings/persistent configuration interface of
+NetworkManager.
+</p>
+<p>
+These may be returned from <a class="link" href="NMClient.html" title="NMClient"><span class="type">NMClient</span></a> methods that invoke D-Bus operations on
+the "org.freedesktop.NetworkManager.Settings" interface, and correspond to
+D-Bus errors in that namespace.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><a name="NM-SETTINGS-ERROR-FAILED:CAPS"></a><span class="term"><code class="literal">NM_SETTINGS_ERROR_FAILED</code></span></p></td>
+<td>unknown or unclassified error
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-SETTINGS-ERROR-PERMISSION-DENIED:CAPS"></a><span class="term"><code class="literal">NM_SETTINGS_ERROR_PERMISSION_DENIED</code></span></p></td>
+<td>permission denied
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-SETTINGS-ERROR-NOT-SUPPORTED:CAPS"></a><span class="term"><code class="literal">NM_SETTINGS_ERROR_NOT_SUPPORTED</code></span></p></td>
+<td>the requested operation is not supported by any
+ active settings backend
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-SETTINGS-ERROR-INVALID-CONNECTION:CAPS"></a><span class="term"><code class="literal">NM_SETTINGS_ERROR_INVALID_CONNECTION</code></span></p></td>
+<td>the connection was invalid
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-SETTINGS-ERROR-READ-ONLY-CONNECTION:CAPS"></a><span class="term"><code class="literal">NM_SETTINGS_ERROR_READ_ONLY_CONNECTION</code></span></p></td>
+<td>attempted to modify a read-only connection
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-SETTINGS-ERROR-UUID-EXISTS:CAPS"></a><span class="term"><code class="literal">NM_SETTINGS_ERROR_UUID_EXISTS</code></span></p></td>
+<td>a connection with that UUID already exists
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-SETTINGS-ERROR-INVALID-HOSTNAME:CAPS"></a><span class="term"><code class="literal">NM_SETTINGS_ERROR_INVALID_HOSTNAME</code></span></p></td>
+<td>attempted to set an invalid hostname
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-settings-error-quark"></a><h3>nm_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_settings_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-SETTINGS-ERROR:CAPS"></a><h3>NM_SETTINGS_ERROR</h3>
+<pre class="programlisting">#define NM_SETTINGS_ERROR (nm_settings_error_quark ())
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMVpnPluginError-enum"></a><h3>enum NMVpnPluginError</h3>
+<pre class="programlisting">typedef enum {
+ NM_VPN_PLUGIN_ERROR_FAILED, /*&lt; nick=Failed &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_INVALID_CONNECTION, /*&lt; nick=InvalidConnection &gt;*/
+ NM_VPN_PLUGIN_ERROR_INTERACTIVE_NOT_SUPPORTED, /*&lt; nick=InteractiveNotSupported &gt;*/
+} NMVpnPluginError;
+</pre>
+<p>
+Returned by the VPN service plugin to indicate errors. These codes correspond
+to errors in the "org.freedesktop.NetworkManager.VPN.Error" namespace.
+</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-ERROR-FAILED:CAPS"></a><span class="term"><code class="literal">NM_VPN_PLUGIN_ERROR_FAILED</code></span></p></td>
+<td>unknown or unclassified error
+</td>
+</tr>
+<tr>
+<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><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><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><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><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><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><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><p><a name="NM-VPN-PLUGIN-ERROR-INVALID-CONNECTION:CAPS"></a><span class="term"><code class="literal">NM_VPN_PLUGIN_ERROR_INVALID_CONNECTION</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><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>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-ERROR:CAPS"></a><h3>NM_VPN_PLUGIN_ERROR</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_ERROR (nm_vpn_plugin_error_quark ())
+</pre>
+<p>
+</p>
+</div>
+<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>
+<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/html/libnm-nm-utils.html b/docs/libnm/html/libnm-nm-utils.html
new file mode 100644
index 000000000..4985188b1
--- /dev/null
+++ b/docs/libnm/html/libnm-nm-utils.html
@@ -0,0 +1,2042 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>nm-utils</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch05.html" title="Utility API Reference">
+<link rel="prev" href="ch05.html" title="Utility API Reference">
+<link rel="next" href="libnm-nm-version.html" title="nm-version">
+<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="ch05.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch05.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 Reference Manual</th>
+<td><a accesskey="n" href="libnm-nm-version.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-nm-utils.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#libnm-nm-utils.description" class="shortcut">Description</a>
+  | 
+ <a href="#libnm-nm-utils.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="libnm-nm-utils"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="libnm-nm-utils.top_of_page"></a>nm-utils</span></h2>
+<p>nm-utils — Utility functions</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="libnm-nm-utils.synopsis"></a><h2>Synopsis</h2>
+<a name="NMUtilsSecurityType"></a><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-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><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gsize"><span class="type">gsize</span></a> len</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="libnm-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#gsize"><span class="type">gsize</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-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-Basic-Types.html#guint8"><span class="type">guint8</span></a> *ssid1</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> len1</code></em>,
+ <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> *ssid2</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> len2</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-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-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#gsize"><span class="type">gsize</span></a> len</code></em>);
+enum <a class="link" href="libnm-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-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-nm-utils.html#NMUtilsSecurityType"><span class="type">NMUtilsSecurityType</span></a> type</code></em>,
+ <em class="parameter"><code><a class="link" href="libnm-nm-dbus-interface.html#NMDeviceWifiCapabilities"><span class="type">NMDeviceWifiCapabilities</span></a> 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><a class="link" href="libnm-nm-dbus-interface.html#NM80211ApFlags"><span class="type">NM80211ApFlags</span></a> ap_flags</code></em>,
+ <em class="parameter"><code><a class="link" href="libnm-nm-dbus-interface.html#NM80211ApSecurityFlags"><span class="type">NM80211ApSecurityFlags</span></a> ap_wpa</code></em>,
+ <em class="parameter"><code><a class="link" href="libnm-nm-dbus-interface.html#NM80211ApSecurityFlags"><span class="type">NM80211ApSecurityFlags</span></a> 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-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-nm-utils.html#NMUtilsSecurityType"><span class="type">NMUtilsSecurityType</span></a> type</code></em>,
+ <em class="parameter"><code><a class="link" href="libnm-nm-dbus-interface.html#NMDeviceWifiCapabilities"><span class="type">NMDeviceWifiCapabilities</span></a> 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-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-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-GVariant.html#GVariant"><span class="returnvalue">GVariant</span></a> * <a class="link" href="libnm-nm-utils.html#nm-utils-ip4-dns-to-variant" title="nm_utils_ip4_dns_to_variant ()">nm_utils_ip4_dns_to_variant</a> (<em class="parameter"><code><span class="type">char</span> **dns</code></em>);
+<span class="returnvalue">char</span> ** <a class="link" href="libnm-nm-utils.html#nm-utils-ip4-dns-from-variant" title="nm_utils_ip4_dns_from_variant ()">nm_utils_ip4_dns_from_variant</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> *value</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="returnvalue">GVariant</span></a> * <a class="link" href="libnm-nm-utils.html#nm-utils-ip4-addresses-to-variant" title="nm_utils_ip4_addresses_to_variant ()">nm_utils_ip4_addresses_to_variant</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *addresses</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *gateway</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="libnm-nm-utils.html#nm-utils-ip4-addresses-from-variant" title="nm_utils_ip4_addresses_from_variant ()">nm_utils_ip4_addresses_from_variant</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> *value</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **out_gateway</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="returnvalue">GVariant</span></a> * <a class="link" href="libnm-nm-utils.html#nm-utils-ip4-routes-to-variant" title="nm_utils_ip4_routes_to_variant ()">nm_utils_ip4_routes_to_variant</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *routes</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="libnm-nm-utils.html#nm-utils-ip4-routes-from-variant" title="nm_utils_ip4_routes_from_variant ()">nm_utils_ip4_routes_from_variant</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</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-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-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-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-GVariant.html#GVariant"><span class="returnvalue">GVariant</span></a> * <a class="link" href="libnm-nm-utils.html#nm-utils-ip6-dns-to-variant" title="nm_utils_ip6_dns_to_variant ()">nm_utils_ip6_dns_to_variant</a> (<em class="parameter"><code><span class="type">char</span> **dns</code></em>);
+<span class="returnvalue">char</span> ** <a class="link" href="libnm-nm-utils.html#nm-utils-ip6-dns-from-variant" title="nm_utils_ip6_dns_from_variant ()">nm_utils_ip6_dns_from_variant</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> *value</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="returnvalue">GVariant</span></a> * <a class="link" href="libnm-nm-utils.html#nm-utils-ip6-addresses-to-variant" title="nm_utils_ip6_addresses_to_variant ()">nm_utils_ip6_addresses_to_variant</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *addresses</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *gateway</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="libnm-nm-utils.html#nm-utils-ip6-addresses-from-variant" title="nm_utils_ip6_addresses_from_variant ()">nm_utils_ip6_addresses_from_variant</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> *value</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **out_gateway</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="returnvalue">GVariant</span></a> * <a class="link" href="libnm-nm-utils.html#nm-utils-ip6-routes-to-variant" title="nm_utils_ip6_routes_to_variant ()">nm_utils_ip6_routes_to_variant</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *routes</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="libnm-nm-utils.html#nm-utils-ip6-routes-from-variant" title="nm_utils_ip6_routes_from_variant ()">nm_utils_ip6_routes_from_variant</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> *value</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="returnvalue">GVariant</span></a> * <a class="link" href="libnm-nm-utils.html#nm-utils-ip-addresses-to-variant" title="nm_utils_ip_addresses_to_variant ()">nm_utils_ip_addresses_to_variant</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *addresses</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="libnm-nm-utils.html#nm-utils-ip-addresses-from-variant" title="nm_utils_ip_addresses_from_variant ()">nm_utils_ip_addresses_from_variant</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> *value</code></em>,
+ <em class="parameter"><code><span class="type">int</span> family</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="returnvalue">GVariant</span></a> * <a class="link" href="libnm-nm-utils.html#nm-utils-ip-routes-to-variant" title="nm_utils_ip_routes_to_variant ()">nm_utils_ip_routes_to_variant</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *routes</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="libnm-nm-utils.html#nm-utils-ip-routes-from-variant" title="nm_utils_ip_routes_from_variant ()">nm_utils_ip_routes_from_variant</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> *value</code></em>,
+ <em class="parameter"><code><span class="type">int</span> family</code></em>);
+<span class="returnvalue">char</span> * <a class="link" href="libnm-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>);
+<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-nm-utils.html#nm-utils-file-is-certificate" title="nm_utils_file_is_certificate ()">nm_utils_file_is_certificate</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#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="libnm-nm-utils.html#nm-utils-file-is-private-key" title="nm_utils_file_is_private_key ()">nm_utils_file_is_private_key</a> (<em class="parameter"><code>const <span class="type">char</span> *filename</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> *out_encrypted</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-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#gboolean"><span class="returnvalue">gboolean</span></a> (<a class="link" href="libnm-nm-utils.html#NMUtilsFileSearchInPathsPredicate" title="NMUtilsFileSearchInPathsPredicate ()">*NMUtilsFileSearchInPathsPredicate</a>)
+ (<em class="parameter"><code>const <span class="type">char</span> *filename</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>);
+const <span class="returnvalue">char</span> * <a class="link" href="libnm-nm-utils.html#nm-utils-file-search-in-paths" title="nm_utils_file_search_in_paths ()">nm_utils_file_search_in_paths</a> (<em class="parameter"><code>const <span class="type">char</span> *progname</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *try_first</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *const *paths</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-File-Utilities.html#GFileTest"><span class="type">GFileTest</span></a> file_test_flags</code></em>,
+ <em class="parameter"><code><a class="link" href="libnm-nm-utils.html#NMUtilsFileSearchInPathsPredicate" title="NMUtilsFileSearchInPathsPredicate ()"><span class="type">NMUtilsFileSearchInPathsPredicate</span></a> predicate</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>,
+ <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-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-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-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-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>);
+const <span class="returnvalue">char</span> * <a class="link" href="libnm-nm-utils.html#nm-utils-wifi-strength-bars" title="nm_utils_wifi_strength_bars ()">nm_utils_wifi_strength_bars</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> strength</code></em>);
+#define <a class="link" href="libnm-nm-utils.html#NM-UTILS-HWADDR-LEN-MAX:CAPS" title="NM_UTILS_HWADDR_LEN_MAX">NM_UTILS_HWADDR_LEN_MAX</a>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gsize"><span class="returnvalue">gsize</span></a> <a class="link" href="libnm-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">char</span> * <a class="link" href="libnm-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><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-Byte-Arrays.html#GByteArray"><span class="returnvalue">GByteArray</span></a> * <a class="link" href="libnm-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><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-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><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-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>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gssize"><span class="type">gssize</span></a> length</code></em>);
+<span class="returnvalue">char</span> * <a class="link" href="libnm-nm-utils.html#nm-utils-hwaddr-canonical" title="nm_utils_hwaddr_canonical ()">nm_utils_hwaddr_canonical</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#gssize"><span class="type">gssize</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-nm-utils.html#nm-utils-hwaddr-matches" title="nm_utils_hwaddr_matches ()">nm_utils_hwaddr_matches</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> hwaddr1</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gssize"><span class="type">gssize</span></a> hwaddr1_len</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gconstpointer"><span class="type">gconstpointer</span></a> hwaddr2</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gssize"><span class="type">gssize</span></a> hwaddr2_len</code></em>);
+<span class="returnvalue">char</span> * <a class="link" href="libnm-nm-utils.html#nm-utils-bin2hexstr" title="nm_utils_bin2hexstr ()">nm_utils_bin2hexstr</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> src</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> len</code></em>,
+ <em class="parameter"><code><span class="type">int</span> final_len</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="returnvalue">GBytes</span></a> * <a class="link" href="libnm-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>);
+<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-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-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-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-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-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-nm-utils.html#nm-utils-ipaddr-valid" title="nm_utils_ipaddr_valid ()">nm_utils_ipaddr_valid</a> (<em class="parameter"><code><span class="type">int</span> family</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *ip</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-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-nm-utils.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ GEnum
+ +----NMUtilsSecurityType
+</pre>
+</div>
+<div class="refsect1">
+<a name="libnm-nm-utils.description"></a><h2>Description</h2>
+<p>
+A collection of utility functions for working with SSIDs, IP addresses, Wi-Fi
+access points and devices, among other things.
+</p>
+</div>
+<div class="refsect1">
+<a name="libnm-nm-utils.details"></a><h2>Details</h2>
+<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><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gsize"><span class="type">gsize</span></a> 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><p><span class="term"><em class="parameter"><code>ssid</code></em> :</span></p></td>
+<td>pointer to a buffer containing the SSID data. <span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=len]</span>
+</td>
+</tr>
+<tr>
+<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><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#gsize"><span class="type">gsize</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><p><span class="term"><em class="parameter"><code>ssid</code></em> :</span></p></td>
+<td>pointer to a buffer containing the SSID data. <span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=len]</span>
+</td>
+</tr>
+<tr>
+<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><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-Basic-Types.html#guint8"><span class="type">guint8</span></a> *ssid1</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> len1</code></em>,
+ <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> *ssid2</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> len2</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><p><span class="term"><em class="parameter"><code>ssid1</code></em> :</span></p></td>
+<td>the first SSID to compare. <span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=len1]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len1</code></em> :</span></p></td>
+<td>length of the SSID data in <em class="parameter"><code>ssid1</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ssid2</code></em> :</span></p></td>
+<td>the second SSID to compare. <span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=len2]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len2</code></em> :</span></p></td>
+<td>length of the SSID data in <em class="parameter"><code>ssid2</code></em>
+</td>
+</tr>
+<tr>
+<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><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-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#gsize"><span class="type">gsize</span></a> len</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><p><span class="term"><em class="parameter"><code>ssid</code></em> :</span></p></td>
+<td>pointer to a buffer containing the SSID data. <span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=len]</span>
+</td>
+</tr>
+<tr>
+<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><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="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-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><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><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><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><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><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><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><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><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><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-nm-utils.html#NMUtilsSecurityType"><span class="type">NMUtilsSecurityType</span></a> type</code></em>,
+ <em class="parameter"><code><a class="link" href="libnm-nm-dbus-interface.html#NMDeviceWifiCapabilities"><span class="type">NMDeviceWifiCapabilities</span></a> 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><a class="link" href="libnm-nm-dbus-interface.html#NM80211ApFlags"><span class="type">NM80211ApFlags</span></a> ap_flags</code></em>,
+ <em class="parameter"><code><a class="link" href="libnm-nm-dbus-interface.html#NM80211ApSecurityFlags"><span class="type">NM80211ApSecurityFlags</span></a> ap_wpa</code></em>,
+ <em class="parameter"><code><a class="link" href="libnm-nm-dbus-interface.html#NM80211ApSecurityFlags"><span class="type">NM80211ApSecurityFlags</span></a> 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-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><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-nm-utils.html#NMU-SEC-STATIC-WEP:CAPS"><span class="type">NMU_SEC_STATIC_WEP</span></a>
+</td>
+</tr>
+<tr>
+<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.
+<a class="link" href="libnm-nm-dbus-interface.html#NM-WIFI-DEVICE-CAP-CIPHER-WEP40:CAPS"><span class="type">NM_WIFI_DEVICE_CAP_CIPHER_WEP40</span></a>
+</td>
+</tr>
+<tr>
+<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><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><p><span class="term"><em class="parameter"><code>ap_flags</code></em> :</span></p></td>
+<td>bitfield of AP capabilities, e.g. <a class="link" href="libnm-nm-dbus-interface.html#NM-802-11-AP-FLAGS-PRIVACY:CAPS"><span class="type">NM_802_11_AP_FLAGS_PRIVACY</span></a>
+</td>
+</tr>
+<tr>
+<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. (<a class="link" href="libnm-nm-dbus-interface.html#NM-802-11-AP-SEC-PAIR-TKIP:CAPS"><span class="type">NM_802_11_AP_SEC_PAIR_TKIP</span></a> | <a class="link" href="libnm-nm-dbus-interface.html#NM-802-11-AP-SEC-KEY-MGMT-PSK:CAPS"><span class="type">NM_802_11_AP_SEC_KEY_MGMT_PSK</span></a>)</td>
+</tr>
+<tr>
+<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. (<a class="link" href="libnm-nm-dbus-interface.html#NM-802-11-AP-SEC-PAIR-CCMP:CAPS"><span class="type">NM_802_11_AP_SEC_PAIR_CCMP</span></a> | <a class="link" href="libnm-nm-dbus-interface.html#NM-802-11-AP-SEC-PAIR-TKIP:CAPS"><span class="type">NM_802_11_AP_SEC_PAIR_TKIP</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 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-nm-utils.html#NMUtilsSecurityType"><span class="type">NMUtilsSecurityType</span></a> type</code></em>,
+ <em class="parameter"><code><a class="link" href="libnm-nm-dbus-interface.html#NMDeviceWifiCapabilities"><span class="type">NMDeviceWifiCapabilities</span></a> 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><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-nm-utils.html#NMU-SEC-STATIC-WEP:CAPS"><span class="type">NMU_SEC_STATIC_WEP</span></a>
+</td>
+</tr>
+<tr>
+<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.
+<a class="link" href="libnm-nm-dbus-interface.html#NM-WIFI-DEVICE-CAP-CIPHER-WEP40:CAPS"><span class="type">NM_WIFI_DEVICE_CAP_CIPHER_WEP40</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 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>
+</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"><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 align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<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><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>
+<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="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>psk</code></em> :</span></p></td>
+<td>a string that might be a WPA PSK</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>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>
+<hr>
+<div class="refsect2">
+<a name="nm-utils-ip4-dns-to-variant"></a><h3>nm_utils_ip4_dns_to_variant ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="returnvalue">GVariant</span></a> * nm_utils_ip4_dns_to_variant (<em class="parameter"><code><span class="type">char</span> **dns</code></em>);</pre>
+<p>
+Utility function to convert an array of IP address strings int a <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> of
+type 'au' representing an array of IPv4 addresses.
+</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>dns</code></em> :</span></p></td>
+<td>an array of IP address strings. <span class="annotation">[<acronym title="Override the parsed C type with given type."><span class="acronym">type</span></acronym> utf8]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new floating <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> representing <em class="parameter"><code>dns</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>
+<hr>
+<div class="refsect2">
+<a name="nm-utils-ip4-dns-from-variant"></a><h3>nm_utils_ip4_dns_from_variant ()</h3>
+<pre class="programlisting"><span class="returnvalue">char</span> ** nm_utils_ip4_dns_from_variant (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> *value</code></em>);</pre>
+<p>
+Utility function to convert a <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> of type 'au' representing a list of
+IPv4 addresses into an array of IP address strings.
+</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>value</code></em> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> of type 'au'</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 IP address strings. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Override the parsed C type with given type."><span class="acronym">type</span></acronym> utf8]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-utils-ip4-addresses-to-variant"></a><h3>nm_utils_ip4_addresses_to_variant ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="returnvalue">GVariant</span></a> * nm_utils_ip4_addresses_to_variant (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *addresses</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *gateway</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 class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> objects representing
+IPv4 addresses into a <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> of type 'aau' representing an array of
+NetworkManager IPv4 addresses (which are tuples of address, prefix, and
+gateway). The "gateway" field of the first address will get the value of
+<em class="parameter"><code>gateway</code></em> (if non-<a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>). In all of the other addresses, that field will be 0.
+</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>addresses</code></em> :</span></p></td>
+<td>an array of <a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> objects. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMIPAddress]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>gateway</code></em> :</span></p></td>
+<td>the gateway IP address. <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 new floating <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> representing <em class="parameter"><code>addresses</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>
+<hr>
+<div class="refsect2">
+<a name="nm-utils-ip4-addresses-from-variant"></a><h3>nm_utils_ip4_addresses_from_variant ()</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_utils_ip4_addresses_from_variant (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> *value</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **out_gateway</code></em>);</pre>
+<p>
+Utility function to convert a <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> of type 'aau' representing a list of
+NetworkManager IPv4 addresses (which are tuples of address, prefix, and
+gateway) into a <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> of <a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> objects. The "gateway" field of
+the first address (if set) will be returned in <em class="parameter"><code>out_gateway</code></em>; the "gateway" fields
+of the other addresses are ignored.
+</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>value</code></em> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> of type 'aau'</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>out_gateway</code></em> :</span></p></td>
+<td>on return, will contain the IP gateway. <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>][<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 newly allocated
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> of <a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</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> NMIPAddress]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-utils-ip4-routes-to-variant"></a><h3>nm_utils_ip4_routes_to_variant ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="returnvalue">GVariant</span></a> * nm_utils_ip4_routes_to_variant (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *routes</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 class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> objects representing
+IPv4 routes into a <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> of type 'aau' representing an array of
+NetworkManager IPv4 routes (which are tuples of route, prefix, next hop, and
+metric).
+</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>routes</code></em> :</span></p></td>
+<td>an array of <a href="https://developer.gnome.org/libnm-util/0.9/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> NMIPRoute]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new floating <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> representing <em class="parameter"><code>routes</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>
+<hr>
+<div class="refsect2">
+<a name="nm-utils-ip4-routes-from-variant"></a><h3>nm_utils_ip4_routes_from_variant ()</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_utils_ip4_routes_from_variant (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> *value</code></em>);</pre>
+<p>
+Utility function to convert a <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> of type 'aau' representing an array
+of NetworkManager IPv4 routes (which are tuples of route, prefix, next hop,
+and metric) into a <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> of <a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> objects.
+</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>value</code></em> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> of type 'aau'</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-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> of <a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</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> NMIPRoute]</span>
+</td>
+</tr>
+</tbody>
+</table></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="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>netmask</code></em> :</span></p></td>
+<td>an IPv4 netmask in network byte order</td>
+</tr>
+<tr>
+<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>
+<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="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>prefix</code></em> :</span></p></td>
+<td>a CIDR prefix</td>
+</tr>
+<tr>
+<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>
+<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="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>ip</code></em> :</span></p></td>
+<td>an IPv4 address (in network byte order)</td>
+</tr>
+<tr>
+<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>
+<hr>
+<div class="refsect2">
+<a name="nm-utils-ip6-dns-to-variant"></a><h3>nm_utils_ip6_dns_to_variant ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="returnvalue">GVariant</span></a> * nm_utils_ip6_dns_to_variant (<em class="parameter"><code><span class="type">char</span> **dns</code></em>);</pre>
+<p>
+Utility function to convert an array of IP address strings int a <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> of
+type 'aay' representing an array of IPv6 addresses.
+</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>dns</code></em> :</span></p></td>
+<td>an array of IP address strings. <span class="annotation">[<acronym title="Override the parsed C type with given type."><span class="acronym">type</span></acronym> utf8]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new floating <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> representing <em class="parameter"><code>dns</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>
+<hr>
+<div class="refsect2">
+<a name="nm-utils-ip6-dns-from-variant"></a><h3>nm_utils_ip6_dns_from_variant ()</h3>
+<pre class="programlisting"><span class="returnvalue">char</span> ** nm_utils_ip6_dns_from_variant (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> *value</code></em>);</pre>
+<p>
+Utility function to convert a <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> of type 'aay' representing a list of
+IPv6 addresses into an array of IP address strings.
+</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>value</code></em> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> of type 'aay'</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 IP address strings. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Override the parsed C type with given type."><span class="acronym">type</span></acronym> utf8]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-utils-ip6-addresses-to-variant"></a><h3>nm_utils_ip6_addresses_to_variant ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="returnvalue">GVariant</span></a> * nm_utils_ip6_addresses_to_variant (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *addresses</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *gateway</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 class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> objects representing
+IPv6 addresses into a <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> of type 'a(ayuay)' representing an array of
+NetworkManager IPv6 addresses (which are tuples of address, prefix, and
+gateway). The "gateway" field of the first address will get the value of
+<em class="parameter"><code>gateway</code></em> (if non-<a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>). In all of the other addresses, that field will be
+all 0s.
+</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>addresses</code></em> :</span></p></td>
+<td>an array of <a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> objects. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMIPAddress]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>gateway</code></em> :</span></p></td>
+<td>the gateway IP address. <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 new floating <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> representing <em class="parameter"><code>addresses</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>
+<hr>
+<div class="refsect2">
+<a name="nm-utils-ip6-addresses-from-variant"></a><h3>nm_utils_ip6_addresses_from_variant ()</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_utils_ip6_addresses_from_variant (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> *value</code></em>,
+ <em class="parameter"><code><span class="type">char</span> **out_gateway</code></em>);</pre>
+<p>
+Utility function to convert a <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> of type 'a(ayuay)' representing a
+list of NetworkManager IPv6 addresses (which are tuples of address, prefix,
+and gateway) into a <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> of <a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> objects. The "gateway" field
+of the first address (if set) will be returned in <em class="parameter"><code>out_gateway</code></em>; the "gateway"
+fields of the other addresses are ignored.
+</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>value</code></em> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> of type 'a(ayuay)'</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>out_gateway</code></em> :</span></p></td>
+<td>on return, will contain the IP gateway. <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>][<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 newly allocated
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> of <a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</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> NMIPAddress]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-utils-ip6-routes-to-variant"></a><h3>nm_utils_ip6_routes_to_variant ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="returnvalue">GVariant</span></a> * nm_utils_ip6_routes_to_variant (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *routes</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 class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> objects representing
+IPv6 routes into a <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> of type 'a(ayuayu)' representing an array of
+NetworkManager IPv6 routes (which are tuples of route, prefix, next hop, and
+metric).
+</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>routes</code></em> :</span></p></td>
+<td>an array of <a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> objects. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMIPRoute]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new floating <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> representing <em class="parameter"><code>routes</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>
+<hr>
+<div class="refsect2">
+<a name="nm-utils-ip6-routes-from-variant"></a><h3>nm_utils_ip6_routes_from_variant ()</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_utils_ip6_routes_from_variant (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> *value</code></em>);</pre>
+<p>
+Utility function to convert a <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> of type 'a(ayuayu)' representing an
+array of NetworkManager IPv6 routes (which are tuples of route, prefix, next
+hop, and metric) into a <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> of <a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> objects.
+</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>value</code></em> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> of type 'a(ayuayu)'</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-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> of <a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</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> NMIPRoute]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-utils-ip-addresses-to-variant"></a><h3>nm_utils_ip_addresses_to_variant ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="returnvalue">GVariant</span></a> * nm_utils_ip_addresses_to_variant (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *addresses</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 class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> objects representing
+IPv4 or IPv6 addresses into a <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> of type 'aa{sv}' representing an
+array of new-style NetworkManager IP addresses. All addresses will include
+"address" (an IP address string), and "prefix" (a uint). Some addresses may
+include additional attributes.
+</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>addresses</code></em> :</span></p></td>
+<td>an array of <a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a> objects. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMIPAddress]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new floating <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> representing <em class="parameter"><code>addresses</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>
+<hr>
+<div class="refsect2">
+<a name="nm-utils-ip-addresses-from-variant"></a><h3>nm_utils_ip_addresses_from_variant ()</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_utils_ip_addresses_from_variant (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> *value</code></em>,
+ <em class="parameter"><code><span class="type">int</span> family</code></em>);</pre>
+<p>
+Utility function to convert a <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> representing a list of new-style
+NetworkManager IPv4 or IPv6 addresses (as described in the documentation for
+<a class="link" href="libnm-nm-utils.html#nm-utils-ip-addresses-to-variant" title="nm_utils_ip_addresses_to_variant ()"><code class="function">nm_utils_ip_addresses_to_variant()</code></a>) into a <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> of <a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</span></a>
+objects.
+</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>value</code></em> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> of type 'aa{sv}'</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>family</code></em> :</span></p></td>
+<td>an IP address family</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-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> of <a class="link" href="NMSettingIPConfig.html#NMIPAddress"><span class="type">NMIPAddress</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> NMIPAddress]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-utils-ip-routes-to-variant"></a><h3>nm_utils_ip_routes_to_variant ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="returnvalue">GVariant</span></a> * nm_utils_ip_routes_to_variant (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *routes</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 class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> objects representing
+IPv4 or IPv6 routes into a <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> of type 'aa{sv}' representing an array
+of new-style NetworkManager IP routes (which are tuples of destination,
+prefix, next hop, metric, and additional attributes).
+</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>routes</code></em> :</span></p></td>
+<td>an array of <a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> objects. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> NMIPRoute]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new floating <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> representing <em class="parameter"><code>routes</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>
+<hr>
+<div class="refsect2">
+<a name="nm-utils-ip-routes-from-variant"></a><h3>nm_utils_ip_routes_from_variant ()</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_utils_ip_routes_from_variant (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> *value</code></em>,
+ <em class="parameter"><code><span class="type">int</span> family</code></em>);</pre>
+<p>
+Utility function to convert a <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> representing a list of new-style
+NetworkManager IPv4 or IPv6 addresses (which are tuples of destination,
+prefix, next hop, metric, and additional attributes) into a <a href="http://library.gnome.org/devel/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> of
+<a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</span></a> objects.
+</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>value</code></em> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> of type 'aa{sv}'</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>family</code></em> :</span></p></td>
+<td>an IP address family</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-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> of <a class="link" href="NMSettingIPConfig.html#NMIPRoute"><span class="type">NMIPRoute</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> NMIPRoute]</span>
+</td>
+</tr>
+</tbody>
+</table></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="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 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>
+<hr>
+<div class="refsect2">
+<a name="nm-utils-file-is-certificate"></a><h3>nm_utils_file_is_certificate ()</h3>
+<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_certificate (<em class="parameter"><code>const <span class="type">char</span> *filename</code></em>);</pre>
+<p>
+Tests if <em class="parameter"><code>filename</code></em> has a valid extension for an X.509 certificate file
+(".cer", ".crt", ".der", or ".pem"), and contains a certificate in a format
+recognized by NetworkManager.
+</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>filename</code></em> :</span></p></td>
+<td>name of the file to test</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 file is a certificate, <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-file-is-private-key"></a><h3>nm_utils_file_is_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_utils_file_is_private_key (<em class="parameter"><code>const <span class="type">char</span> *filename</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> *out_encrypted</code></em>);</pre>
+<p>
+Tests if <em class="parameter"><code>filename</code></em> has a valid extension for an X.509 private key file
+(".der", ".key", ".pem", or ".p12"), and contains a private key in a format
+recognized by NetworkManager.
+</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>filename</code></em> :</span></p></td>
+<td>name of the file to test</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>out_encrypted</code></em> :</span></p></td>
+<td>on return, whether the file is encrypted. <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> if the file is a private key, <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-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>
+Tests if <em class="parameter"><code>filename</code></em> is a PKCS#12 file.
+</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>filename</code></em> :</span></p></td>
+<td>name of the file to test</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 file is PKCS#12, <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="NMUtilsFileSearchInPathsPredicate"></a><h3>NMUtilsFileSearchInPathsPredicate ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> (*NMUtilsFileSearchInPathsPredicate)
+ (<em class="parameter"><code>const <span class="type">char</span> *filename</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-utils-file-search-in-paths"></a><h3>nm_utils_file_search_in_paths ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_utils_file_search_in_paths (<em class="parameter"><code>const <span class="type">char</span> *progname</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *try_first</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *const *paths</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-File-Utilities.html#GFileTest"><span class="type">GFileTest</span></a> file_test_flags</code></em>,
+ <em class="parameter"><code><a class="link" href="libnm-nm-utils.html#NMUtilsFileSearchInPathsPredicate" title="NMUtilsFileSearchInPathsPredicate ()"><span class="type">NMUtilsFileSearchInPathsPredicate</span></a> predicate</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>,
+ <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>
+Searches for a <em class="parameter"><code>progname</code></em> file in a list of search <em class="parameter"><code>paths</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>progname</code></em> :</span></p></td>
+<td>the helper program name, like "iptables"
+Must be a non-empty string, without path separator (/).</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>try_first</code></em> :</span></p></td>
+<td>a custom path to try first before searching.
+It is silently ignored if it is empty or not an absolute path. <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>paths</code></em> :</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 list of search paths.
+Can be empty or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>, in which case only <em class="parameter"><code>try_first</code></em> is checked. <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>file_test_flags</code></em> :</span></p></td>
+<td>the flags passed to <a href="http://library.gnome.org/devel/glib/unstable/glib-File-Utilities.html#g-file-test"><code class="function">g_file_test()</code></a> when searching
+for <em class="parameter"><code>progname</code></em>. Set it to 0 to skip the <a href="http://library.gnome.org/devel/glib/unstable/glib-File-Utilities.html#g-file-test"><code class="function">g_file_test()</code></a>.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>predicate</code></em> :</span></p></td>
+<td>if given, pass the file name to this function
+for additional checks. This check is performed after the check for
+<em class="parameter"><code>file_test_flags</code></em>. You cannot omit both <em class="parameter"><code>file_test_flags</code></em> and <em class="parameter"><code>predicate</code></em>. <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>(allow-none): user data for <em class="parameter"><code>predicate</code></em> 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>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>on failure, a "not found" error using <em class="parameter"><code>error_domain</code></em> and <em class="parameter"><code>error_code</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the full path to the helper, if found, or <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if not found.
+The returned string is not owned by the caller, but later
+invocations of the function might overwrite it. <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-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 align="left" valign="top">
+<col>
+</colgroup>
+<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>
+<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 Wi-Fi channel to its corresponding frequency.
+</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>channel</code></em> :</span></p></td>
+<td>channel</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 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>
+<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 Wi-Fi channel for a channel.
+</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>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>
+<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 Wi-Fi channel validity.
+</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>channel</code></em> :</span></p></td>
+<td>channel</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>
+<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>
+<hr>
+<div class="refsect2">
+<a name="nm-utils-wifi-strength-bars"></a><h3>nm_utils_wifi_strength_bars ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * nm_utils_wifi_strength_bars (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> strength</code></em>);</pre>
+<p>
+Converts <em class="parameter"><code>strength</code></em> into a 4-character-wide graphical representation of
+strength suitable for printing to stdout. If the current locale and terminal
+support it, this will use unicode graphics characters to represent
+"bars". Otherwise it will use 0 to 4 asterisks.
+</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>strength</code></em> :</span></p></td>
+<td>the access point strength, from 0 to 100</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the graphical representation of the access point strength</td>
+</tr>
+</tbody>
+</table></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 hardware addresses handled by NetworkManager itself,
+<a class="link" href="libnm-nm-utils.html#nm-utils-hwaddr-len" title="nm_utils_hwaddr_len ()"><code class="function">nm_utils_hwaddr_len()</code></a>, and <a class="link" href="libnm-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-hwaddr-len"></a><h3>nm_utils_hwaddr_len ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gsize"><span class="returnvalue">gsize</span></a> 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>
+<p>
+It is an error to call this function with any value other than
+<code class="literal">ARPHRD_ETHER</code> or <code class="literal">ARPHRD_INFINIBAND</code>.
+</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>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 length.</td>
+</tr>
+</tbody>
+</table></div>
+</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><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 align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>addr</code></em> :</span></p></td>
+<td>a binary hardware address. <span class="annotation">[<acronym title="Override the parsed C type with given type."><span class="acronym">type</span></acronym> guint8][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=length]</span>
+</td>
+</tr>
+<tr>
+<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>
+<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><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 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-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 align="left" valign="top">
+<col>
+</colgroup>
+<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>length</code></em> :</span></p></td>
+<td>the expected length in bytes of the result</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-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>
+<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><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 align="left" valign="top">
+<col>
+</colgroup>
+<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>
+<hr>
+<div class="refsect2">
+<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>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gssize"><span class="type">gssize</span></a> length</code></em>);</pre>
+<p>
+Parses <em class="parameter"><code>asc</code></em> to see if it is a valid hardware address of the given
+length.
+</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>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>length</code></em> :</span></p></td>
+<td>the length of address that <em class="parameter"><code>asc</code></em> is expected to convert to
+(or -1 to accept any length up to <a class="link" href="libnm-nm-utils.html#NM-UTILS-HWADDR-LEN-MAX:CAPS" title="NM_UTILS_HWADDR_LEN_MAX"><code class="literal">NM_UTILS_HWADDR_LEN_MAX</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 <em class="parameter"><code>asc</code></em> appears to be a valid hardware address
+of the indicated length, <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>
+<hr>
+<div class="refsect2">
+<a name="nm-utils-hwaddr-canonical"></a><h3>nm_utils_hwaddr_canonical ()</h3>
+<pre class="programlisting"><span class="returnvalue">char</span> * nm_utils_hwaddr_canonical (<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#gssize"><span class="type">gssize</span></a> length</code></em>);</pre>
+<p>
+Parses <em class="parameter"><code>asc</code></em> to see if it is a valid hardware address of the given
+length, and if so, returns it in canonical form (uppercase, with
+leading 0s as needed, and with colons rather than hyphens).
+</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>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>length</code></em> :</span></p></td>
+<td>the length of address that <em class="parameter"><code>asc</code></em> is expected to convert to
+(or -1 to accept any length up to <a class="link" href="libnm-nm-utils.html#NM-UTILS-HWADDR-LEN-MAX:CAPS" title="NM_UTILS_HWADDR_LEN_MAX"><code class="literal">NM_UTILS_HWADDR_LEN_MAX</code></a>)</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the canonicalized address if <em class="parameter"><code>asc</code></em> appears to
+be a valid hardware address of the indicated length, <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> if not. <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-hwaddr-matches"></a><h3>nm_utils_hwaddr_matches ()</h3>
+<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_matches (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gconstpointer"><span class="type">gconstpointer</span></a> hwaddr1</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gssize"><span class="type">gssize</span></a> hwaddr1_len</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gconstpointer"><span class="type">gconstpointer</span></a> hwaddr2</code></em>,
+ <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gssize"><span class="type">gssize</span></a> hwaddr2_len</code></em>);</pre>
+<p>
+Generalized hardware address comparison function. Tests if <em class="parameter"><code>hwaddr1</code></em> and
+<em class="parameter"><code>hwaddr2</code></em> "equal" (or more precisely, "equivalent"), with several advantages
+over a simple <code class="function">memcmp()</code>:
+</p>
+<p>
+ 1. If <em class="parameter"><code>hwaddr1_len</code></em> or <em class="parameter"><code>hwaddr2_len</code></em> is -1, then the corresponding address is
+ assumed to be ASCII rather than binary, and will be converted to binary
+ before being compared.
+</p>
+<p>
+ 2. If <em class="parameter"><code>hwaddr1</code></em> or <em class="parameter"><code>hwaddr2</code></em> is <a href="/usr/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>, it is treated instead as though it was
+ a zero-filled buffer <em class="parameter"><code>hwaddr1_len</code></em> or <em class="parameter"><code>hwaddr2_len</code></em> bytes long.
+</p>
+<p>
+ 3. If <em class="parameter"><code>hwaddr1</code></em> and <em class="parameter"><code>hwaddr2</code></em> are InfiniBand hardware addresses (that is, if
+ they are <code class="literal">INFINIBAND_ALEN</code> bytes long in binary form)
+ then only the last 8 bytes are compared, since those are the only bytes
+ that actually identify the hardware. (The other 12 bytes will change
+ depending on the configuration of the InfiniBand fabric that the device
+ is connected to.)
+</p>
+<p>
+If a passed-in ASCII hardware address cannot be parsed, or would parse to an
+address larger than <a class="link" href="libnm-nm-utils.html#NM-UTILS-HWADDR-LEN-MAX:CAPS" title="NM_UTILS_HWADDR_LEN_MAX"><code class="literal">NM_UTILS_HWADDR_LEN_MAX</code></a>, then it will silently fail to
+match. (This means that externally-provided address strings do not need to be
+sanity-checked before comparing them against known good addresses; they are
+guaranteed to not match if they are invalid.)
+</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>hwaddr1</code></em> :</span></p></td>
+<td>pointer to a binary or ASCII hardware address, 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"><em class="parameter"><code>hwaddr1_len</code></em> :</span></p></td>
+<td>size of <em class="parameter"><code>hwaddr1</code></em>, or -1 if <em class="parameter"><code>hwaddr1</code></em> is ASCII</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>hwaddr2</code></em> :</span></p></td>
+<td>pointer to a binary or ASCII hardware address, 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"><em class="parameter"><code>hwaddr2_len</code></em> :</span></p></td>
+<td>size of <em class="parameter"><code>hwaddr2</code></em>, or -1 if <em class="parameter"><code>hwaddr2</code></em> is ASCII</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>hwaddr1</code></em> and <em class="parameter"><code>hwaddr2</code></em> are equivalent, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if they are
+different (or either of them is invalid).</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<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><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gconstpointer"><span class="type">gconstpointer</span></a> src</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> len</code></em>,
+ <em class="parameter"><code><span class="type">int</span> final_len</code></em>);</pre>
+<p>
+Converts the byte array <em class="parameter"><code>src</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 align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>src</code></em> :</span></p></td>
+<td>an array of bytes. <span class="annotation">[<acronym title="Override the parsed C type with given type."><span class="acronym">type</span></acronym> guint8][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=len]</span>
+</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>src</code></em> array</td>
+</tr>
+<tr>
+<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>
+<hr>
+<div class="refsect2">
+<a name="nm-utils-hexstr2bin"></a><h3>nm_utils_hexstr2bin ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="returnvalue">GBytes</span></a> * nm_utils_hexstr2bin (<em class="parameter"><code>const <span class="type">char</span> *hex</code></em>);</pre>
+<p>
+Converts a hexadecimal string <em class="parameter"><code>hex</code></em> into an array of bytes. The optional
+separator ':' may be used between single or pairs of hexadecimal characters,
+eg "00:11" or "0:1". Any "0x" at the beginning of <em class="parameter"><code>hex</code></em> is ignored. <em class="parameter"><code>hex</code></em>
+may not start or end with ':'.
+</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>hex</code></em> :</span></p></td>
+<td>a string of hexadecimal characters with optional ':' separators</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the converted 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>
+<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="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>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>
+<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="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>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>
+<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-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-nm-utils.html#nm-utils-inet6-ntop" title="nm_utils_inet6_ntop ()"><code class="function">nm_utils_inet6_ntop()</code></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<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 align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<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><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-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-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-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-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><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>
+</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><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><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-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-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-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-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><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>
+</div>
+<hr>
+<div class="refsect2">
+<a name="nm-utils-ipaddr-valid"></a><h3>nm_utils_ipaddr_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_ipaddr_valid (<em class="parameter"><code><span class="type">int</span> family</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *ip</code></em>);</pre>
+<p>
+Checks if <em class="parameter"><code>ip</code></em> contains a valid IP address of the given family.
+</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>family</code></em> :</span></p></td>
+<td>
+<code class="literal">AF_INET</code> or <code class="literal">AF_INET6</code>, or
+<code class="literal">AF_UNSPEC</code> to accept either</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ip</code></em> :</span></p></td>
+<td>an IP 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> 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>
+<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><p><span class="term"><em class="parameter"><code>virtual_type</code></em> :</span></p></td>
+<td>a virtual connection type</td>
+</tr>
+<tr>
+<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>
+</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>
+</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/html/libnm-nm-version.html b/docs/libnm/html/libnm-nm-version.html
new file mode 100644
index 000000000..a260fbea1
--- /dev/null
+++ b/docs/libnm/html/libnm-nm-version.html
@@ -0,0 +1,249 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>nm-version</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch05.html" title="Utility API Reference">
+<link rel="prev" href="libnm-nm-utils.html" title="nm-utils">
+<link rel="next" href="ch06.html" title="VPN Plugin API Reference">
+<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-nm-utils.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch05.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 Reference Manual</th>
+<td><a accesskey="n" href="ch06.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-nm-version.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#libnm-nm-version.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="libnm-nm-version"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="libnm-nm-version.top_of_page"></a>nm-version</span></h2>
+<p>nm-version</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="libnm-nm-version.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#define <a class="link" href="libnm-nm-version.html#NM-MAJOR-VERSION:CAPS" title="NM_MAJOR_VERSION">NM_MAJOR_VERSION</a>
+#define <a class="link" href="libnm-nm-version.html#NM-MINOR-VERSION:CAPS" title="NM_MINOR_VERSION">NM_MINOR_VERSION</a>
+#define <a class="link" href="libnm-nm-version.html#NM-MICRO-VERSION:CAPS" title="NM_MICRO_VERSION">NM_MICRO_VERSION</a>
+#define <a class="link" href="libnm-nm-version.html#NM-CHECK-VERSION:CAPS" title="NM_CHECK_VERSION()">NM_CHECK_VERSION</a> (major,
+ minor,
+ micro)
+#define <a class="link" href="libnm-nm-version.html#NM-ENCODE-VERSION:CAPS" title="NM_ENCODE_VERSION()">NM_ENCODE_VERSION</a> (major,
+ minor,
+ micro)
+#define <a class="link" href="libnm-nm-version.html#NM-VERSION-0-9-8:CAPS" title="NM_VERSION_0_9_8">NM_VERSION_0_9_8</a>
+#define <a class="link" href="libnm-nm-version.html#NM-VERSION-0-9-10:CAPS" title="NM_VERSION_0_9_10">NM_VERSION_0_9_10</a>
+#define <a class="link" href="libnm-nm-version.html#NM-VERSION-1-0:CAPS" title="NM_VERSION_1_0">NM_VERSION_1_0</a>
+#define <a class="link" href="libnm-nm-version.html#NM-VERSION-CUR-STABLE:CAPS" title="NM_VERSION_CUR_STABLE">NM_VERSION_CUR_STABLE</a>
+#define <a class="link" href="libnm-nm-version.html#NM-VERSION-NEXT-STABLE:CAPS" title="NM_VERSION_NEXT_STABLE">NM_VERSION_NEXT_STABLE</a>
+#define <a class="link" href="libnm-nm-version.html#NM-VERSION-MIN-REQUIRED:CAPS" title="NM_VERSION_MIN_REQUIRED">NM_VERSION_MIN_REQUIRED</a>
+#define <a class="link" href="libnm-nm-version.html#NM-VERSION-MAX-ALLOWED:CAPS" title="NM_VERSION_MAX_ALLOWED">NM_VERSION_MAX_ALLOWED</a>
+#define <a class="link" href="libnm-nm-version.html#NM-DEPRECATED-IN-0-9-10:CAPS" title="NM_DEPRECATED_IN_0_9_10">NM_DEPRECATED_IN_0_9_10</a>
+#define <a class="link" href="libnm-nm-version.html#NM-DEPRECATED-IN-0-9-10-FOR:CAPS" title="NM_DEPRECATED_IN_0_9_10_FOR()">NM_DEPRECATED_IN_0_9_10_FOR</a> (f)
+#define <a class="link" href="libnm-nm-version.html#NM-DEPRECATED-IN-1-0:CAPS" title="NM_DEPRECATED_IN_1_0">NM_DEPRECATED_IN_1_0</a>
+#define <a class="link" href="libnm-nm-version.html#NM-DEPRECATED-IN-1-0-FOR:CAPS" title="NM_DEPRECATED_IN_1_0_FOR()">NM_DEPRECATED_IN_1_0_FOR</a> (f)
+#define <a class="link" href="libnm-nm-version.html#NM-AVAILABLE-IN-0-9-10:CAPS" title="NM_AVAILABLE_IN_0_9_10">NM_AVAILABLE_IN_0_9_10</a>
+#define <a class="link" href="libnm-nm-version.html#NM-AVAILABLE-IN-1-0:CAPS" title="NM_AVAILABLE_IN_1_0">NM_AVAILABLE_IN_1_0</a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="libnm-nm-version.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="libnm-nm-version.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NM-MAJOR-VERSION:CAPS"></a><h3>NM_MAJOR_VERSION</h3>
+<pre class="programlisting">#define NM_MAJOR_VERSION (1)
+</pre>
+<p>
+Evaluates to the major version number of NetworkManager which this source
+is compiled against.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-MINOR-VERSION:CAPS"></a><h3>NM_MINOR_VERSION</h3>
+<pre class="programlisting">#define NM_MINOR_VERSION (0)
+</pre>
+<p>
+Evaluates to the minor version number of NetworkManager which this source
+is compiled against.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-MICRO-VERSION:CAPS"></a><h3>NM_MICRO_VERSION</h3>
+<pre class="programlisting">#define NM_MICRO_VERSION (0)
+</pre>
+<p>
+Evaluates to the micro version number of NetworkManager which this source
+compiled against.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-CHECK-VERSION:CAPS"></a><h3>NM_CHECK_VERSION()</h3>
+<pre class="programlisting">#define NM_CHECK_VERSION(major,minor,micro)</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>major</code></em> :</span></p></td>
+<td>major version (e.g. 1 for version 1.2.5)</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>minor</code></em> :</span></p></td>
+<td>minor version (e.g. 2 for version 1.2.5)</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>micro</code></em> :</span></p></td>
+<td>micro version (e.g. 5 for version 1.2.5)</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 version of the NetworkManager header files
+is the same as or newer than the passed-in version.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-ENCODE-VERSION:CAPS"></a><h3>NM_ENCODE_VERSION()</h3>
+<pre class="programlisting">#define NM_ENCODE_VERSION(major,minor,micro) ((major) &lt;&lt; 16 | (minor) &lt;&lt; 8 | (micro))
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VERSION-0-9-8:CAPS"></a><h3>NM_VERSION_0_9_8</h3>
+<pre class="programlisting">#define NM_VERSION_0_9_8 (NM_ENCODE_VERSION (0, 9, 8))
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VERSION-0-9-10:CAPS"></a><h3>NM_VERSION_0_9_10</h3>
+<pre class="programlisting">#define NM_VERSION_0_9_10 (NM_ENCODE_VERSION (0, 9, 10))
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VERSION-1-0:CAPS"></a><h3>NM_VERSION_1_0</h3>
+<pre class="programlisting">#define NM_VERSION_1_0 (NM_ENCODE_VERSION (1, 0, 0))
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VERSION-CUR-STABLE:CAPS"></a><h3>NM_VERSION_CUR_STABLE</h3>
+<pre class="programlisting">#define NM_VERSION_CUR_STABLE NM_VERSION_0_9_10
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VERSION-NEXT-STABLE:CAPS"></a><h3>NM_VERSION_NEXT_STABLE</h3>
+<pre class="programlisting">#define NM_VERSION_NEXT_STABLE NM_VERSION_1_0
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VERSION-MIN-REQUIRED:CAPS"></a><h3>NM_VERSION_MIN_REQUIRED</h3>
+<pre class="programlisting"># define NM_VERSION_MIN_REQUIRED (NM_VERSION_CUR_STABLE)
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VERSION-MAX-ALLOWED:CAPS"></a><h3>NM_VERSION_MAX_ALLOWED</h3>
+<pre class="programlisting"># define NM_VERSION_MAX_ALLOWED (NM_VERSION_CUR_STABLE)
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEPRECATED-IN-0-9-10:CAPS"></a><h3>NM_DEPRECATED_IN_0_9_10</h3>
+<pre class="programlisting"># define NM_DEPRECATED_IN_0_9_10 G_DEPRECATED
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEPRECATED-IN-0-9-10-FOR:CAPS"></a><h3>NM_DEPRECATED_IN_0_9_10_FOR()</h3>
+<pre class="programlisting"># define NM_DEPRECATED_IN_0_9_10_FOR(f) G_DEPRECATED_FOR(f)
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEPRECATED-IN-1-0:CAPS"></a><h3>NM_DEPRECATED_IN_1_0</h3>
+<pre class="programlisting"># define NM_DEPRECATED_IN_1_0 G_DEPRECATED
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DEPRECATED-IN-1-0-FOR:CAPS"></a><h3>NM_DEPRECATED_IN_1_0_FOR()</h3>
+<pre class="programlisting"># define NM_DEPRECATED_IN_1_0_FOR(f) G_DEPRECATED_FOR(f)
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-AVAILABLE-IN-0-9-10:CAPS"></a><h3>NM_AVAILABLE_IN_0_9_10</h3>
+<pre class="programlisting"># define NM_AVAILABLE_IN_0_9_10 G_UNAVAILABLE(0.9,10)
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-AVAILABLE-IN-1-0:CAPS"></a><h3>NM_AVAILABLE_IN_1_0</h3>
+<pre class="programlisting"># define NM_AVAILABLE_IN_1_0 G_UNAVAILABLE(1,0)
+</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/html/libnm-nm-vpn-dbus-interface.html b/docs/libnm/html/libnm-nm-vpn-dbus-interface.html
new file mode 100644
index 000000000..3460e107c
--- /dev/null
+++ b/docs/libnm/html/libnm-nm-vpn-dbus-interface.html
@@ -0,0 +1,882 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>nm-vpn-dbus-interface</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="ch06.html" title="VPN Plugin API Reference">
+<link rel="prev" href="ch06.html" title="VPN Plugin API Reference">
+<link rel="next" href="libnm-NMVpnEditorPlugin.html" title="NMVpnEditorPlugin">
+<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="ch06.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch06.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 Reference Manual</th>
+<td><a accesskey="n" href="libnm-NMVpnEditorPlugin.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-nm-vpn-dbus-interface.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#libnm-nm-vpn-dbus-interface.description" class="shortcut">Description</a>
+  | 
+ <a href="#libnm-nm-vpn-dbus-interface.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="libnm-nm-vpn-dbus-interface"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="libnm-nm-vpn-dbus-interface.top_of_page"></a>nm-vpn-dbus-interface</span></h2>
+<p>nm-vpn-dbus-interface</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="libnm-nm-vpn-dbus-interface.synopsis"></a><h2>Synopsis</h2>
+<a name="NMVpnServiceState"></a><a name="NMVpnConnectionState"></a><a name="NMVpnConnectionStateReason"></a><a name="NMVpnPluginFailure"></a><pre class="synopsis">#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-PATH-VPN:CAPS" title="NM_DBUS_PATH_VPN">NM_DBUS_PATH_VPN</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-INTERFACE-VPN:CAPS" title="NM_DBUS_INTERFACE_VPN">NM_DBUS_INTERFACE_VPN</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-PATH-VPN-CONNECTION:CAPS" title="NM_DBUS_PATH_VPN_CONNECTION">NM_DBUS_PATH_VPN_CONNECTION</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-INTERFACE-VPN-CONNECTION:CAPS" title="NM_DBUS_INTERFACE_VPN_CONNECTION">NM_DBUS_INTERFACE_VPN_CONNECTION</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-DBUS-PLUGIN-PATH:CAPS" title="NM_VPN_DBUS_PLUGIN_PATH">NM_VPN_DBUS_PLUGIN_PATH</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-DBUS-PLUGIN-INTERFACE:CAPS" title="NM_VPN_DBUS_PLUGIN_INTERFACE">NM_VPN_DBUS_PLUGIN_INTERFACE</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-NO-ACTIVE-VPN-CONNECTION:CAPS" title="NM_DBUS_NO_ACTIVE_VPN_CONNECTION">NM_DBUS_NO_ACTIVE_VPN_CONNECTION</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-NO-VPN-CONNECTIONS:CAPS" title="NM_DBUS_NO_VPN_CONNECTIONS">NM_DBUS_NO_VPN_CONNECTIONS</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-INVALID-VPN-CONNECTION:CAPS" title="NM_DBUS_INVALID_VPN_CONNECTION">NM_DBUS_INVALID_VPN_CONNECTION</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-ERROR-PREFIX:CAPS" title="NM_DBUS_VPN_ERROR_PREFIX">NM_DBUS_VPN_ERROR_PREFIX</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-STARTING-IN-PROGRESS:CAPS" title="NM_DBUS_VPN_STARTING_IN_PROGRESS">NM_DBUS_VPN_STARTING_IN_PROGRESS</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-ALREADY-STARTED:CAPS" title="NM_DBUS_VPN_ALREADY_STARTED">NM_DBUS_VPN_ALREADY_STARTED</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-STOPPING-IN-PROGRESS:CAPS" title="NM_DBUS_VPN_STOPPING_IN_PROGRESS">NM_DBUS_VPN_STOPPING_IN_PROGRESS</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-ALREADY-STOPPED:CAPS" title="NM_DBUS_VPN_ALREADY_STOPPED">NM_DBUS_VPN_ALREADY_STOPPED</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-WRONG-STATE:CAPS" title="NM_DBUS_VPN_WRONG_STATE">NM_DBUS_VPN_WRONG_STATE</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-BAD-ARGUMENTS:CAPS" title="NM_DBUS_VPN_BAD_ARGUMENTS">NM_DBUS_VPN_BAD_ARGUMENTS</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-INTERACTIVE-NOT-SUPPORTED:CAPS" title="NM_DBUS_VPN_INTERACTIVE_NOT_SUPPORTED">NM_DBUS_VPN_INTERACTIVE_NOT_SUPPORTED</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-SIGNAL-LOGIN-BANNER:CAPS" title="NM_DBUS_VPN_SIGNAL_LOGIN_BANNER">NM_DBUS_VPN_SIGNAL_LOGIN_BANNER</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-SIGNAL-LOGIN-FAILED:CAPS" title="NM_DBUS_VPN_SIGNAL_LOGIN_FAILED">NM_DBUS_VPN_SIGNAL_LOGIN_FAILED</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-SIGNAL-LAUNCH-FAILED:CAPS" title="NM_DBUS_VPN_SIGNAL_LAUNCH_FAILED">NM_DBUS_VPN_SIGNAL_LAUNCH_FAILED</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-SIGNAL-CONNECT-FAILED:CAPS" title="NM_DBUS_VPN_SIGNAL_CONNECT_FAILED">NM_DBUS_VPN_SIGNAL_CONNECT_FAILED</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-SIGNAL-VPN-CONFIG-BAD:CAPS" title="NM_DBUS_VPN_SIGNAL_VPN_CONFIG_BAD">NM_DBUS_VPN_SIGNAL_VPN_CONFIG_BAD</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-SIGNAL-IP-CONFIG-BAD:CAPS" title="NM_DBUS_VPN_SIGNAL_IP_CONFIG_BAD">NM_DBUS_VPN_SIGNAL_IP_CONFIG_BAD</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-SIGNAL-STATE-CHANGE:CAPS" title="NM_DBUS_VPN_SIGNAL_STATE_CHANGE">NM_DBUS_VPN_SIGNAL_STATE_CHANGE</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-SIGNAL-IP4-CONFIG:CAPS" title="NM_DBUS_VPN_SIGNAL_IP4_CONFIG">NM_DBUS_VPN_SIGNAL_IP4_CONFIG</a>
+enum <a class="link" href="libnm-nm-vpn-dbus-interface.html#NMVpnServiceState-enum" title="enum NMVpnServiceState">NMVpnServiceState</a>;
+enum <a class="link" href="libnm-nm-vpn-dbus-interface.html#NMVpnConnectionState-enum" title="enum NMVpnConnectionState">NMVpnConnectionState</a>;
+enum <a class="link" href="libnm-nm-vpn-dbus-interface.html#NMVpnConnectionStateReason-enum" title="enum NMVpnConnectionStateReason">NMVpnConnectionStateReason</a>;
+enum <a class="link" href="libnm-nm-vpn-dbus-interface.html#NMVpnPluginFailure-enum" title="enum NMVpnPluginFailure">NMVpnPluginFailure</a>;
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-CONFIG-TUNDEV:CAPS" title="NM_VPN_PLUGIN_CONFIG_TUNDEV">NM_VPN_PLUGIN_CONFIG_TUNDEV</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-CONFIG-BANNER:CAPS" title="NM_VPN_PLUGIN_CONFIG_BANNER">NM_VPN_PLUGIN_CONFIG_BANNER</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-CONFIG-EXT-GATEWAY:CAPS" title="NM_VPN_PLUGIN_CONFIG_EXT_GATEWAY">NM_VPN_PLUGIN_CONFIG_EXT_GATEWAY</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-CONFIG-MTU:CAPS" title="NM_VPN_PLUGIN_CONFIG_MTU">NM_VPN_PLUGIN_CONFIG_MTU</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-CONFIG-HAS-IP4:CAPS" title="NM_VPN_PLUGIN_CONFIG_HAS_IP4">NM_VPN_PLUGIN_CONFIG_HAS_IP4</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-CONFIG-HAS-IP6:CAPS" title="NM_VPN_PLUGIN_CONFIG_HAS_IP6">NM_VPN_PLUGIN_CONFIG_HAS_IP6</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-CAN-PERSIST:CAPS" title="NM_VPN_PLUGIN_CAN_PERSIST">NM_VPN_PLUGIN_CAN_PERSIST</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-INT-GATEWAY:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_INT_GATEWAY">NM_VPN_PLUGIN_IP4_CONFIG_INT_GATEWAY</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-ADDRESS:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_ADDRESS">NM_VPN_PLUGIN_IP4_CONFIG_ADDRESS</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-PTP:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_PTP">NM_VPN_PLUGIN_IP4_CONFIG_PTP</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-PREFIX:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_PREFIX">NM_VPN_PLUGIN_IP4_CONFIG_PREFIX</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-DNS:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_DNS">NM_VPN_PLUGIN_IP4_CONFIG_DNS</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-NBNS:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_NBNS">NM_VPN_PLUGIN_IP4_CONFIG_NBNS</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-MSS:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_MSS">NM_VPN_PLUGIN_IP4_CONFIG_MSS</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-DOMAIN:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_DOMAIN">NM_VPN_PLUGIN_IP4_CONFIG_DOMAIN</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-DOMAINS:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_DOMAINS">NM_VPN_PLUGIN_IP4_CONFIG_DOMAINS</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-ROUTES:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_ROUTES">NM_VPN_PLUGIN_IP4_CONFIG_ROUTES</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-NEVER-DEFAULT:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_NEVER_DEFAULT">NM_VPN_PLUGIN_IP4_CONFIG_NEVER_DEFAULT</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-GATEWAY:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_GATEWAY">NM_VPN_PLUGIN_IP4_CONFIG_GATEWAY</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-BANNER:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_BANNER">NM_VPN_PLUGIN_IP4_CONFIG_BANNER</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-EXT-GATEWAY:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY">NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-MTU:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_MTU">NM_VPN_PLUGIN_IP4_CONFIG_MTU</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-TUNDEV:CAPS" title="NM_VPN_PLUGIN_IP4_CONFIG_TUNDEV">NM_VPN_PLUGIN_IP4_CONFIG_TUNDEV</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-INT-GATEWAY:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_INT_GATEWAY">NM_VPN_PLUGIN_IP6_CONFIG_INT_GATEWAY</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-ADDRESS:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_ADDRESS">NM_VPN_PLUGIN_IP6_CONFIG_ADDRESS</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-PTP:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_PTP">NM_VPN_PLUGIN_IP6_CONFIG_PTP</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-PREFIX:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_PREFIX">NM_VPN_PLUGIN_IP6_CONFIG_PREFIX</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-DNS:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_DNS">NM_VPN_PLUGIN_IP6_CONFIG_DNS</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-MSS:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_MSS">NM_VPN_PLUGIN_IP6_CONFIG_MSS</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-DOMAIN:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_DOMAIN">NM_VPN_PLUGIN_IP6_CONFIG_DOMAIN</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-DOMAINS:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_DOMAINS">NM_VPN_PLUGIN_IP6_CONFIG_DOMAINS</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-ROUTES:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_ROUTES">NM_VPN_PLUGIN_IP6_CONFIG_ROUTES</a>
+#define <a class="link" href="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-NEVER-DEFAULT:CAPS" title="NM_VPN_PLUGIN_IP6_CONFIG_NEVER_DEFAULT">NM_VPN_PLUGIN_IP6_CONFIG_NEVER_DEFAULT</a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="libnm-nm-vpn-dbus-interface.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ GEnum
+ +----NMVpnServiceState
+</pre>
+<pre class="synopsis">
+ GEnum
+ +----NMVpnConnectionState
+</pre>
+<pre class="synopsis">
+ GEnum
+ +----NMVpnConnectionStateReason
+</pre>
+<pre class="synopsis">
+ GEnum
+ +----NMVpnPluginFailure
+</pre>
+</div>
+<div class="refsect1">
+<a name="libnm-nm-vpn-dbus-interface.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="libnm-nm-vpn-dbus-interface.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="NM-DBUS-PATH-VPN:CAPS"></a><h3>NM_DBUS_PATH_VPN</h3>
+<pre class="programlisting">#define NM_DBUS_PATH_VPN "/org/freedesktop/NetworkManager/VPN/Manager"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-VPN:CAPS"></a><h3>NM_DBUS_INTERFACE_VPN</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_VPN "org.freedesktop.NetworkManager.VPN.Manager"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-PATH-VPN-CONNECTION:CAPS"></a><h3>NM_DBUS_PATH_VPN_CONNECTION</h3>
+<pre class="programlisting">#define NM_DBUS_PATH_VPN_CONNECTION "/org/freedesktop/NetworkManager/VPN/Connection"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INTERFACE-VPN-CONNECTION:CAPS"></a><h3>NM_DBUS_INTERFACE_VPN_CONNECTION</h3>
+<pre class="programlisting">#define NM_DBUS_INTERFACE_VPN_CONNECTION "org.freedesktop.NetworkManager.VPN.Connection"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-DBUS-PLUGIN-PATH:CAPS"></a><h3>NM_VPN_DBUS_PLUGIN_PATH</h3>
+<pre class="programlisting">#define NM_VPN_DBUS_PLUGIN_PATH "/org/freedesktop/NetworkManager/VPN/Plugin"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-DBUS-PLUGIN-INTERFACE:CAPS"></a><h3>NM_VPN_DBUS_PLUGIN_INTERFACE</h3>
+<pre class="programlisting">#define NM_VPN_DBUS_PLUGIN_INTERFACE "org.freedesktop.NetworkManager.VPN.Plugin"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-NO-ACTIVE-VPN-CONNECTION:CAPS"></a><h3>NM_DBUS_NO_ACTIVE_VPN_CONNECTION</h3>
+<pre class="programlisting">#define NM_DBUS_NO_ACTIVE_VPN_CONNECTION "org.freedesktop.NetworkManager.VPNConnections.NoActiveVPNConnection"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-NO-VPN-CONNECTIONS:CAPS"></a><h3>NM_DBUS_NO_VPN_CONNECTIONS</h3>
+<pre class="programlisting">#define NM_DBUS_NO_VPN_CONNECTIONS "org.freedesktop.NetworkManager.VPNConnections.NoVPNConnections"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-INVALID-VPN-CONNECTION:CAPS"></a><h3>NM_DBUS_INVALID_VPN_CONNECTION</h3>
+<pre class="programlisting">#define NM_DBUS_INVALID_VPN_CONNECTION "org.freedesktop.NetworkManager.VPNConnections.InvalidVPNConnection"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-VPN-ERROR-PREFIX:CAPS"></a><h3>NM_DBUS_VPN_ERROR_PREFIX</h3>
+<pre class="programlisting">#define NM_DBUS_VPN_ERROR_PREFIX "org.freedesktop.NetworkManager.VPN.Error"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-VPN-STARTING-IN-PROGRESS:CAPS"></a><h3>NM_DBUS_VPN_STARTING_IN_PROGRESS</h3>
+<pre class="programlisting">#define NM_DBUS_VPN_STARTING_IN_PROGRESS "StartingInProgress"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-VPN-ALREADY-STARTED:CAPS"></a><h3>NM_DBUS_VPN_ALREADY_STARTED</h3>
+<pre class="programlisting">#define NM_DBUS_VPN_ALREADY_STARTED "AlreadyStarted"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-VPN-STOPPING-IN-PROGRESS:CAPS"></a><h3>NM_DBUS_VPN_STOPPING_IN_PROGRESS</h3>
+<pre class="programlisting">#define NM_DBUS_VPN_STOPPING_IN_PROGRESS "StoppingInProgress"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-VPN-ALREADY-STOPPED:CAPS"></a><h3>NM_DBUS_VPN_ALREADY_STOPPED</h3>
+<pre class="programlisting">#define NM_DBUS_VPN_ALREADY_STOPPED "AlreadyStopped"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-VPN-WRONG-STATE:CAPS"></a><h3>NM_DBUS_VPN_WRONG_STATE</h3>
+<pre class="programlisting">#define NM_DBUS_VPN_WRONG_STATE "WrongState"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-VPN-BAD-ARGUMENTS:CAPS"></a><h3>NM_DBUS_VPN_BAD_ARGUMENTS</h3>
+<pre class="programlisting">#define NM_DBUS_VPN_BAD_ARGUMENTS "BadArguments"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-VPN-INTERACTIVE-NOT-SUPPORTED:CAPS"></a><h3>NM_DBUS_VPN_INTERACTIVE_NOT_SUPPORTED</h3>
+<pre class="programlisting">#define NM_DBUS_VPN_INTERACTIVE_NOT_SUPPORTED "InteractiveNotSupported"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-VPN-SIGNAL-LOGIN-BANNER:CAPS"></a><h3>NM_DBUS_VPN_SIGNAL_LOGIN_BANNER</h3>
+<pre class="programlisting">#define NM_DBUS_VPN_SIGNAL_LOGIN_BANNER "LoginBanner"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-VPN-SIGNAL-LOGIN-FAILED:CAPS"></a><h3>NM_DBUS_VPN_SIGNAL_LOGIN_FAILED</h3>
+<pre class="programlisting">#define NM_DBUS_VPN_SIGNAL_LOGIN_FAILED "LoginFailed"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-VPN-SIGNAL-LAUNCH-FAILED:CAPS"></a><h3>NM_DBUS_VPN_SIGNAL_LAUNCH_FAILED</h3>
+<pre class="programlisting">#define NM_DBUS_VPN_SIGNAL_LAUNCH_FAILED "LaunchFailed"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-VPN-SIGNAL-CONNECT-FAILED:CAPS"></a><h3>NM_DBUS_VPN_SIGNAL_CONNECT_FAILED</h3>
+<pre class="programlisting">#define NM_DBUS_VPN_SIGNAL_CONNECT_FAILED "ConnectFailed"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-VPN-SIGNAL-VPN-CONFIG-BAD:CAPS"></a><h3>NM_DBUS_VPN_SIGNAL_VPN_CONFIG_BAD</h3>
+<pre class="programlisting">#define NM_DBUS_VPN_SIGNAL_VPN_CONFIG_BAD "VPNConfigBad"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-VPN-SIGNAL-IP-CONFIG-BAD:CAPS"></a><h3>NM_DBUS_VPN_SIGNAL_IP_CONFIG_BAD</h3>
+<pre class="programlisting">#define NM_DBUS_VPN_SIGNAL_IP_CONFIG_BAD "IPConfigBad"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-VPN-SIGNAL-STATE-CHANGE:CAPS"></a><h3>NM_DBUS_VPN_SIGNAL_STATE_CHANGE</h3>
+<pre class="programlisting">#define NM_DBUS_VPN_SIGNAL_STATE_CHANGE "StateChange"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-DBUS-VPN-SIGNAL-IP4-CONFIG:CAPS"></a><h3>NM_DBUS_VPN_SIGNAL_IP4_CONFIG</h3>
+<pre class="programlisting">#define NM_DBUS_VPN_SIGNAL_IP4_CONFIG "IP4Config"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMVpnServiceState-enum"></a><h3>enum NMVpnServiceState</h3>
+<pre class="programlisting">typedef enum {
+ NM_VPN_SERVICE_STATE_UNKNOWN = 0,
+ NM_VPN_SERVICE_STATE_INIT,
+ NM_VPN_SERVICE_STATE_SHUTDOWN,
+ NM_VPN_SERVICE_STATE_STARTING,
+ NM_VPN_SERVICE_STATE_STARTED,
+ NM_VPN_SERVICE_STATE_STOPPING,
+ NM_VPN_SERVICE_STATE_STOPPED
+} NMVpnServiceState;
+</pre>
+<p>
+VPN daemon states
+</p>
+<p>
+(Corresponds to the NM_VPN_SERVICE_STATE type in nm-vpn-connection.xml.)
+</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-SERVICE-STATE-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_VPN_SERVICE_STATE_UNKNOWN</code></span></p></td>
+<td>The state of the VPN plugin is unknown.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-SERVICE-STATE-INIT:CAPS"></a><span class="term"><code class="literal">NM_VPN_SERVICE_STATE_INIT</code></span></p></td>
+<td>The VPN plugin is initialized.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-SERVICE-STATE-SHUTDOWN:CAPS"></a><span class="term"><code class="literal">NM_VPN_SERVICE_STATE_SHUTDOWN</code></span></p></td>
+<td>Not used.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-SERVICE-STATE-STARTING:CAPS"></a><span class="term"><code class="literal">NM_VPN_SERVICE_STATE_STARTING</code></span></p></td>
+<td>The plugin is attempting to connect to a VPN server.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-SERVICE-STATE-STARTED:CAPS"></a><span class="term"><code class="literal">NM_VPN_SERVICE_STATE_STARTED</code></span></p></td>
+<td>The plugin has connected to a VPN server.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-SERVICE-STATE-STOPPING:CAPS"></a><span class="term"><code class="literal">NM_VPN_SERVICE_STATE_STOPPING</code></span></p></td>
+<td>The plugin is disconnecting from the VPN server.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-SERVICE-STATE-STOPPED:CAPS"></a><span class="term"><code class="literal">NM_VPN_SERVICE_STATE_STOPPED</code></span></p></td>
+<td>The plugin has disconnected from the VPN server.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMVpnConnectionState-enum"></a><h3>enum NMVpnConnectionState</h3>
+<pre class="programlisting">typedef enum {
+ NM_VPN_CONNECTION_STATE_UNKNOWN = 0,
+ NM_VPN_CONNECTION_STATE_PREPARE,
+ NM_VPN_CONNECTION_STATE_NEED_AUTH,
+ NM_VPN_CONNECTION_STATE_CONNECT,
+ NM_VPN_CONNECTION_STATE_IP_CONFIG_GET,
+ NM_VPN_CONNECTION_STATE_ACTIVATED,
+ NM_VPN_CONNECTION_STATE_FAILED,
+ NM_VPN_CONNECTION_STATE_DISCONNECTED
+} NMVpnConnectionState;
+</pre>
+<p>
+VPN connection states
+</p>
+<p>
+(Corresponds to the NM_VPN_CONNECTION_STATE type in nm-vpn-connection.xml.)
+</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-CONNECTION-STATE-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_UNKNOWN</code></span></p></td>
+<td>The state of the VPN connection is
+ unknown.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-CONNECTION-STATE-PREPARE:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_PREPARE</code></span></p></td>
+<td>The VPN connection is preparing to
+ connect.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-CONNECTION-STATE-NEED-AUTH:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_NEED_AUTH</code></span></p></td>
+<td>The VPN connection needs authorization
+ credentials.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-CONNECTION-STATE-CONNECT:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_CONNECT</code></span></p></td>
+<td>The VPN connection is being established.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-CONNECTION-STATE-IP-CONFIG-GET:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_IP_CONFIG_GET</code></span></p></td>
+<td>The VPN connection is getting an IP
+ address.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-CONNECTION-STATE-ACTIVATED:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_ACTIVATED</code></span></p></td>
+<td>The VPN connection is active.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-CONNECTION-STATE-FAILED:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_FAILED</code></span></p></td>
+<td>The VPN connection failed.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-CONNECTION-STATE-DISCONNECTED:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_DISCONNECTED</code></span></p></td>
+<td>The VPN connection is disconnected.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMVpnConnectionStateReason-enum"></a><h3>enum NMVpnConnectionStateReason</h3>
+<pre class="programlisting">typedef enum {
+ NM_VPN_CONNECTION_STATE_REASON_UNKNOWN = 0,
+ NM_VPN_CONNECTION_STATE_REASON_NONE,
+ NM_VPN_CONNECTION_STATE_REASON_USER_DISCONNECTED,
+ NM_VPN_CONNECTION_STATE_REASON_DEVICE_DISCONNECTED,
+ NM_VPN_CONNECTION_STATE_REASON_SERVICE_STOPPED,
+ NM_VPN_CONNECTION_STATE_REASON_IP_CONFIG_INVALID,
+ NM_VPN_CONNECTION_STATE_REASON_CONNECT_TIMEOUT,
+ NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_TIMEOUT,
+ NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_FAILED,
+ NM_VPN_CONNECTION_STATE_REASON_NO_SECRETS,
+ NM_VPN_CONNECTION_STATE_REASON_LOGIN_FAILED,
+ NM_VPN_CONNECTION_STATE_REASON_CONNECTION_REMOVED
+} NMVpnConnectionStateReason;
+</pre>
+<p>
+VPN connection state reasons
+</p>
+<p>
+(Corresponds to the NM_VPN_CONNECTION_STATE_REASON type in nm-vpn-connection.xml.)
+</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-CONNECTION-STATE-REASON-UNKNOWN:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_REASON_UNKNOWN</code></span></p></td>
+<td>The reason for the VPN connection
+ state change is unknown.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-CONNECTION-STATE-REASON-NONE:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_REASON_NONE</code></span></p></td>
+<td>No reason was given for the VPN
+ connection state change.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-CONNECTION-STATE-REASON-USER-DISCONNECTED:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_REASON_USER_DISCONNECTED</code></span></p></td>
+<td>The VPN connection changed
+ state because the user disconnected it.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-CONNECTION-STATE-REASON-DEVICE-DISCONNECTED:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_REASON_DEVICE_DISCONNECTED</code></span></p></td>
+<td>The VPN connection
+ changed state because the device it was using was disconnected.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-CONNECTION-STATE-REASON-SERVICE-STOPPED:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_REASON_SERVICE_STOPPED</code></span></p></td>
+<td>The service providing the
+ VPN connection was stopped.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-CONNECTION-STATE-REASON-IP-CONFIG-INVALID:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_REASON_IP_CONFIG_INVALID</code></span></p></td>
+<td>The IP config of the VPN
+ connection was invalid.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-CONNECTION-STATE-REASON-CONNECT-TIMEOUT:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_REASON_CONNECT_TIMEOUT</code></span></p></td>
+<td>The connection attempt to
+ the VPN service timed out.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-CONNECTION-STATE-REASON-SERVICE-START-TIMEOUT:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_TIMEOUT</code></span></p></td>
+<td>A timeout occurred
+ while starting the service providing the VPN connection.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-CONNECTION-STATE-REASON-SERVICE-START-FAILED:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_FAILED</code></span></p></td>
+<td>Starting the service
+ starting the service providing the VPN connection failed.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-CONNECTION-STATE-REASON-NO-SECRETS:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_REASON_NO_SECRETS</code></span></p></td>
+<td>Necessary secrets for the VPN
+ connection were not provided.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-CONNECTION-STATE-REASON-LOGIN-FAILED:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_REASON_LOGIN_FAILED</code></span></p></td>
+<td>Authentication to the VPN
+ server failed.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-CONNECTION-STATE-REASON-CONNECTION-REMOVED:CAPS"></a><span class="term"><code class="literal">NM_VPN_CONNECTION_STATE_REASON_CONNECTION_REMOVED</code></span></p></td>
+<td>The connection was
+ deleted from settings.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NMVpnPluginFailure-enum"></a><h3>enum NMVpnPluginFailure</h3>
+<pre class="programlisting">typedef enum {
+ NM_VPN_PLUGIN_FAILURE_LOGIN_FAILED,
+ NM_VPN_PLUGIN_FAILURE_CONNECT_FAILED,
+ NM_VPN_PLUGIN_FAILURE_BAD_IP_CONFIG
+} NMVpnPluginFailure;
+</pre>
+<p>
+VPN plugin failure reasons
+</p>
+<p>
+(Corresponds to the NM_VPN_PLUGIN_FAILURE type in nm-vpn-plugin.xml.)
+</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-FAILURE-LOGIN-FAILED:CAPS"></a><span class="term"><code class="literal">NM_VPN_PLUGIN_FAILURE_LOGIN_FAILED</code></span></p></td>
+<td>Login failed.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-PLUGIN-FAILURE-CONNECT-FAILED:CAPS"></a><span class="term"><code class="literal">NM_VPN_PLUGIN_FAILURE_CONNECT_FAILED</code></span></p></td>
+<td>Connect failed.
+</td>
+</tr>
+<tr>
+<td><p><a name="NM-VPN-PLUGIN-FAILURE-BAD-IP-CONFIG:CAPS"></a><span class="term"><code class="literal">NM_VPN_PLUGIN_FAILURE_BAD_IP_CONFIG</code></span></p></td>
+<td>Invalid IP configuration returned from
+ the VPN plugin.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-CONFIG-TUNDEV:CAPS"></a><h3>NM_VPN_PLUGIN_CONFIG_TUNDEV</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_CONFIG_TUNDEV "tundev"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-CONFIG-BANNER:CAPS"></a><h3>NM_VPN_PLUGIN_CONFIG_BANNER</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_CONFIG_BANNER "banner"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-CONFIG-EXT-GATEWAY:CAPS"></a><h3>NM_VPN_PLUGIN_CONFIG_EXT_GATEWAY</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_CONFIG_EXT_GATEWAY "gateway"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-CONFIG-MTU:CAPS"></a><h3>NM_VPN_PLUGIN_CONFIG_MTU</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_CONFIG_MTU "mtu"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-CONFIG-HAS-IP4:CAPS"></a><h3>NM_VPN_PLUGIN_CONFIG_HAS_IP4</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_CONFIG_HAS_IP4 "has-ip4"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-CONFIG-HAS-IP6:CAPS"></a><h3>NM_VPN_PLUGIN_CONFIG_HAS_IP6</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_CONFIG_HAS_IP6 "has-ip6"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-CAN-PERSIST:CAPS"></a><h3>NM_VPN_PLUGIN_CAN_PERSIST</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_CAN_PERSIST "can-persist"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP4-CONFIG-INT-GATEWAY:CAPS"></a><h3>NM_VPN_PLUGIN_IP4_CONFIG_INT_GATEWAY</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP4_CONFIG_INT_GATEWAY "internal-gateway"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP4-CONFIG-ADDRESS:CAPS"></a><h3>NM_VPN_PLUGIN_IP4_CONFIG_ADDRESS</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP4_CONFIG_ADDRESS "address"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP4-CONFIG-PTP:CAPS"></a><h3>NM_VPN_PLUGIN_IP4_CONFIG_PTP</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP4_CONFIG_PTP "ptp"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP4-CONFIG-PREFIX:CAPS"></a><h3>NM_VPN_PLUGIN_IP4_CONFIG_PREFIX</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP4_CONFIG_PREFIX "prefix"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP4-CONFIG-DNS:CAPS"></a><h3>NM_VPN_PLUGIN_IP4_CONFIG_DNS</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP4_CONFIG_DNS "dns"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP4-CONFIG-NBNS:CAPS"></a><h3>NM_VPN_PLUGIN_IP4_CONFIG_NBNS</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP4_CONFIG_NBNS "nbns"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP4-CONFIG-MSS:CAPS"></a><h3>NM_VPN_PLUGIN_IP4_CONFIG_MSS</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP4_CONFIG_MSS "mss"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP4-CONFIG-DOMAIN:CAPS"></a><h3>NM_VPN_PLUGIN_IP4_CONFIG_DOMAIN</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP4_CONFIG_DOMAIN "domain"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP4-CONFIG-DOMAINS:CAPS"></a><h3>NM_VPN_PLUGIN_IP4_CONFIG_DOMAINS</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP4_CONFIG_DOMAINS "domains"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP4-CONFIG-ROUTES:CAPS"></a><h3>NM_VPN_PLUGIN_IP4_CONFIG_ROUTES</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP4_CONFIG_ROUTES "routes"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP4-CONFIG-NEVER-DEFAULT:CAPS"></a><h3>NM_VPN_PLUGIN_IP4_CONFIG_NEVER_DEFAULT</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP4_CONFIG_NEVER_DEFAULT "never-default"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP4-CONFIG-GATEWAY:CAPS"></a><h3>NM_VPN_PLUGIN_IP4_CONFIG_GATEWAY</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP4_CONFIG_GATEWAY NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP4-CONFIG-BANNER:CAPS"></a><h3>NM_VPN_PLUGIN_IP4_CONFIG_BANNER</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP4_CONFIG_BANNER NM_VPN_PLUGIN_CONFIG_BANNER
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP4-CONFIG-EXT-GATEWAY:CAPS"></a><h3>NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY NM_VPN_PLUGIN_CONFIG_EXT_GATEWAY
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP4-CONFIG-MTU:CAPS"></a><h3>NM_VPN_PLUGIN_IP4_CONFIG_MTU</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP4_CONFIG_MTU NM_VPN_PLUGIN_CONFIG_MTU
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP4-CONFIG-TUNDEV:CAPS"></a><h3>NM_VPN_PLUGIN_IP4_CONFIG_TUNDEV</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP4_CONFIG_TUNDEV NM_VPN_PLUGIN_CONFIG_TUNDEV
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP6-CONFIG-INT-GATEWAY:CAPS"></a><h3>NM_VPN_PLUGIN_IP6_CONFIG_INT_GATEWAY</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP6_CONFIG_INT_GATEWAY "internal-gateway"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP6-CONFIG-ADDRESS:CAPS"></a><h3>NM_VPN_PLUGIN_IP6_CONFIG_ADDRESS</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP6_CONFIG_ADDRESS "address"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP6-CONFIG-PTP:CAPS"></a><h3>NM_VPN_PLUGIN_IP6_CONFIG_PTP</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP6_CONFIG_PTP "ptp"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP6-CONFIG-PREFIX:CAPS"></a><h3>NM_VPN_PLUGIN_IP6_CONFIG_PREFIX</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP6_CONFIG_PREFIX "prefix"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP6-CONFIG-DNS:CAPS"></a><h3>NM_VPN_PLUGIN_IP6_CONFIG_DNS</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP6_CONFIG_DNS "dns"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP6-CONFIG-MSS:CAPS"></a><h3>NM_VPN_PLUGIN_IP6_CONFIG_MSS</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP6_CONFIG_MSS "mss"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP6-CONFIG-DOMAIN:CAPS"></a><h3>NM_VPN_PLUGIN_IP6_CONFIG_DOMAIN</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP6_CONFIG_DOMAIN "domain"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP6-CONFIG-DOMAINS:CAPS"></a><h3>NM_VPN_PLUGIN_IP6_CONFIG_DOMAINS</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP6_CONFIG_DOMAINS "domains"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP6-CONFIG-ROUTES:CAPS"></a><h3>NM_VPN_PLUGIN_IP6_CONFIG_ROUTES</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP6_CONFIG_ROUTES "routes"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="NM-VPN-PLUGIN-IP6-CONFIG-NEVER-DEFAULT:CAPS"></a><h3>NM_VPN_PLUGIN_IP6_CONFIG_NEVER_DEFAULT</h3>
+<pre class="programlisting">#define NM_VPN_PLUGIN_IP6_CONFIG_NEVER_DEFAULT "never-default"
+</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/html/libnm.devhelp2 b/docs/libnm/html/libnm.devhelp2
new file mode 100644
index 000000000..d8530d821
--- /dev/null
+++ b/docs/libnm/html/libnm.devhelp2
@@ -0,0 +1,2207 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE book PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">
+<book xmlns="http://www.devhelp.net/book" title="libnm Reference Manual" link="index.html" author="" name="libnm" version="2" language="c">
+ <chapters>
+ <sub name="Overview" link="ref-overview.html"/>
+ <sub name="Client Object API Reference" link="ch02.html">
+ <sub name="NMClient" link="NMClient.html"/>
+ <sub name="NMSecretAgentOld" link="NMSecretAgentOld.html"/>
+ <sub name="NMObject" link="NMObject.html"/>
+ <sub name="nm-errors" link="libnm-nm-errors.html"/>
+ <sub name="nm-dbus-interface" link="libnm-nm-dbus-interface.html"/>
+ </sub>
+ <sub name="Connection and Setting API Reference" link="ch03.html">
+ <sub name="NMConnection" link="libnm-NMConnection.html"/>
+ <sub name="NMSimpleConnection" link="NMSimpleConnection.html"/>
+ <sub name="NMSetting" link="NMSetting.html"/>
+ <sub name="NMSettingConnection" link="NMSettingConnection.html"/>
+ <sub name="NMSetting8021x" link="NMSetting8021x.html"/>
+ <sub name="NMSettingAdsl" link="NMSettingAdsl.html"/>
+ <sub name="NMSettingBluetooth" link="NMSettingBluetooth.html"/>
+ <sub name="NMSettingBond" link="NMSettingBond.html"/>
+ <sub name="NMSettingBridge" link="NMSettingBridge.html"/>
+ <sub name="NMSettingBridgePort" link="NMSettingBridgePort.html"/>
+ <sub name="NMSettingCdma" link="NMSettingCdma.html"/>
+ <sub name="NMSettingDcb" link="NMSettingDcb.html"/>
+ <sub name="NMSettingGeneric" link="NMSettingGeneric.html"/>
+ <sub name="NMSettingGsm" link="NMSettingGsm.html"/>
+ <sub name="NMSettingInfiniband" link="NMSettingInfiniband.html"/>
+ <sub name="NMSettingIPConfig" link="NMSettingIPConfig.html"/>
+ <sub name="NMSettingIP4Config" link="NMSettingIP4Config.html"/>
+ <sub name="NMSettingIP6Config" link="NMSettingIP6Config.html"/>
+ <sub name="NMSettingOlpcMesh" link="NMSettingOlpcMesh.html"/>
+ <sub name="NMSettingPpp" link="NMSettingPpp.html"/>
+ <sub name="NMSettingPppoe" link="NMSettingPppoe.html"/>
+ <sub name="NMSettingSerial" link="NMSettingSerial.html"/>
+ <sub name="NMSettingTeam" link="NMSettingTeam.html"/>
+ <sub name="NMSettingTeamPort" link="NMSettingTeamPort.html"/>
+ <sub name="NMSettingVlan" link="NMSettingVlan.html"/>
+ <sub name="NMSettingVpn" link="NMSettingVpn.html"/>
+ <sub name="NMSettingWimax" link="NMSettingWimax.html"/>
+ <sub name="NMSettingWired" link="NMSettingWired.html"/>
+ <sub name="NMSettingWireless" link="NMSettingWireless.html"/>
+ <sub name="NMSettingWirelessSecurity" link="NMSettingWirelessSecurity.html"/>
+ </sub>
+ <sub name="Device and Runtime Configuration API Reference" link="ch04.html">
+ <sub name="NMDevice" link="NMDevice.html"/>
+ <sub name="NMDeviceAdsl" link="NMDeviceAdsl.html"/>
+ <sub name="NMDeviceBond" link="NMDeviceBond.html"/>
+ <sub name="NMDeviceBridge" link="NMDeviceBridge.html"/>
+ <sub name="NMDeviceBt" link="NMDeviceBt.html"/>
+ <sub name="NMDeviceEthernet" link="NMDeviceEthernet.html"/>
+ <sub name="NMDeviceGeneric" link="NMDeviceGeneric.html"/>
+ <sub name="NMDeviceInfiniband" link="NMDeviceInfiniband.html"/>
+ <sub name="NMDeviceModem" link="NMDeviceModem.html"/>
+ <sub name="NMDeviceOlpcMesh" link="NMDeviceOlpcMesh.html"/>
+ <sub name="NMDeviceTeam" link="NMDeviceTeam.html"/>
+ <sub name="NMDeviceVlan" link="NMDeviceVlan.html"/>
+ <sub name="NMDeviceWifi" link="NMDeviceWifi.html"/>
+ <sub name="NMDeviceWimax" link="NMDeviceWimax.html"/>
+ <sub name="NMActiveConnection" link="NMActiveConnection.html"/>
+ <sub name="NMVpnConnection" link="NMVpnConnection.html"/>
+ <sub name="NMRemoteConnection" link="NMRemoteConnection.html"/>
+ <sub name="NMAccessPoint" link="NMAccessPoint.html"/>
+ <sub name="NMWimaxNsp" link="NMWimaxNsp.html"/>
+ <sub name="NMIPConfig" link="NMIPConfig.html"/>
+ <sub name="NMDhcpConfig" link="NMDhcpConfig.html"/>
+ </sub>
+ <sub name="Utility API Reference" link="ch05.html">
+ <sub name="nm-utils" link="libnm-nm-utils.html"/>
+ <sub name="nm-version" link="libnm-nm-version.html"/>
+ </sub>
+ <sub name="VPN Plugin API Reference" link="ch06.html">
+ <sub name="nm-vpn-dbus-interface" link="libnm-nm-vpn-dbus-interface.html"/>
+ <sub name="NMVpnEditorPlugin" link="libnm-NMVpnEditorPlugin.html"/>
+ </sub>
+ <sub name="Object Hierarchy" link="object-tree.html"/>
+ <sub name="API Index" link="api-index-full.html"/>
+ <sub name="Annotation Glossary" link="annotation-glossary.html"/>
+ </chapters>
+ <functions>
+ <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_NM_RUNNING" link="NMClient.html#NM-CLIENT-NM-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"/>
+ <keyword type="macro" name="NM_CLIENT_WIRELESS_HARDWARE_ENABLED" link="NMClient.html#NM-CLIENT-WIRELESS-HARDWARE-ENABLED:CAPS"/>
+ <keyword type="macro" name="NM_CLIENT_WWAN_ENABLED" link="NMClient.html#NM-CLIENT-WWAN-ENABLED:CAPS"/>
+ <keyword type="macro" name="NM_CLIENT_WWAN_HARDWARE_ENABLED" link="NMClient.html#NM-CLIENT-WWAN-HARDWARE-ENABLED:CAPS"/>
+ <keyword type="macro" name="NM_CLIENT_WIMAX_ENABLED" link="NMClient.html#NM-CLIENT-WIMAX-ENABLED:CAPS"/>
+ <keyword type="macro" name="NM_CLIENT_WIMAX_HARDWARE_ENABLED" link="NMClient.html#NM-CLIENT-WIMAX-HARDWARE-ENABLED:CAPS"/>
+ <keyword type="macro" name="NM_CLIENT_ACTIVE_CONNECTIONS" link="NMClient.html#NM-CLIENT-ACTIVE-CONNECTIONS:CAPS"/>
+ <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="macro" name="NM_CLIENT_CONNECTIONS" link="NMClient.html#NM-CLIENT-CONNECTIONS:CAPS"/>
+ <keyword type="macro" name="NM_CLIENT_HOSTNAME" link="NMClient.html#NM-CLIENT-HOSTNAME:CAPS"/>
+ <keyword type="macro" name="NM_CLIENT_CAN_MODIFY" link="NMClient.html#NM-CLIENT-CAN-MODIFY:CAPS"/>
+ <keyword type="macro" name="NM_CLIENT_DEVICE_ADDED" link="NMClient.html#NM-CLIENT-DEVICE-ADDED:CAPS"/>
+ <keyword type="macro" name="NM_CLIENT_DEVICE_REMOVED" link="NMClient.html#NM-CLIENT-DEVICE-REMOVED:CAPS"/>
+ <keyword type="macro" name="NM_CLIENT_PERMISSION_CHANGED" link="NMClient.html#NM-CLIENT-PERMISSION-CHANGED:CAPS"/>
+ <keyword type="macro" name="NM_CLIENT_CONNECTION_ADDED" link="NMClient.html#NM-CLIENT-CONNECTION-ADDED:CAPS"/>
+ <keyword type="macro" name="NM_CLIENT_CONNECTION_REMOVED" link="NMClient.html#NM-CLIENT-CONNECTION-REMOVED:CAPS"/>
+ <keyword type="enum" name="enum NMClientPermission" link="NMClient.html#NMClientPermission-enum"/>
+ <keyword type="enum" name="enum NMClientPermissionResult" link="NMClient.html#NMClientPermissionResult-enum"/>
+ <keyword type="enum" name="enum NMClientError" link="NMClient.html#NMClientError-enum"/>
+ <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"/>
+ <keyword type="struct" name="struct 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_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"/>
+ <keyword type="function" name="nm_client_get_nm_running ()" link="NMClient.html#nm-client-get-nm-running"/>
+ <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_logging ()" link="NMClient.html#nm-client-get-logging"/>
+ <keyword type="function" name="nm_client_set_logging ()" link="NMClient.html#nm-client-set-logging"/>
+ <keyword type="function" name="nm_client_get_permission_result ()" link="NMClient.html#nm-client-get-permission-result"/>
+ <keyword type="function" name="nm_client_get_connectivity ()" link="NMClient.html#nm-client-get-connectivity"/>
+ <keyword type="function" name="nm_client_check_connectivity ()" link="NMClient.html#nm-client-check-connectivity"/>
+ <keyword type="function" name="nm_client_check_connectivity_async ()" link="NMClient.html#nm-client-check-connectivity-async"/>
+ <keyword type="function" name="nm_client_check_connectivity_finish ()" link="NMClient.html#nm-client-check-connectivity-finish"/>
+ <keyword type="function" name="nm_client_save_hostname ()" link="NMClient.html#nm-client-save-hostname"/>
+ <keyword type="function" name="nm_client_save_hostname_async ()" link="NMClient.html#nm-client-save-hostname-async"/>
+ <keyword type="function" name="nm_client_save_hostname_finish ()" link="NMClient.html#nm-client-save-hostname-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="nm_client_get_active_connections ()" link="NMClient.html#nm-client-get-active-connections"/>
+ <keyword type="function" name="nm_client_get_primary_connection ()" link="NMClient.html#nm-client-get-primary-connection"/>
+ <keyword type="function" name="nm_client_get_activating_connection ()" link="NMClient.html#nm-client-get-activating-connection"/>
+ <keyword type="function" name="nm_client_activate_connection_async ()" link="NMClient.html#nm-client-activate-connection-async"/>
+ <keyword type="function" name="nm_client_activate_connection_finish ()" link="NMClient.html#nm-client-activate-connection-finish"/>
+ <keyword type="function" name="nm_client_add_and_activate_connection_async ()" link="NMClient.html#nm-client-add-and-activate-connection-async"/>
+ <keyword type="function" name="nm_client_add_and_activate_connection_finish ()" link="NMClient.html#nm-client-add-and-activate-connection-finish"/>
+ <keyword type="function" name="nm_client_deactivate_connection ()" link="NMClient.html#nm-client-deactivate-connection"/>
+ <keyword type="function" name="nm_client_deactivate_connection_async ()" link="NMClient.html#nm-client-deactivate-connection-async"/>
+ <keyword type="function" name="nm_client_deactivate_connection_finish ()" link="NMClient.html#nm-client-deactivate-connection-finish"/>
+ <keyword type="function" name="nm_client_get_connections ()" link="NMClient.html#nm-client-get-connections"/>
+ <keyword type="function" name="nm_client_get_connection_by_id ()" link="NMClient.html#nm-client-get-connection-by-id"/>
+ <keyword type="function" name="nm_client_get_connection_by_path ()" link="NMClient.html#nm-client-get-connection-by-path"/>
+ <keyword type="function" name="nm_client_get_connection_by_uuid ()" link="NMClient.html#nm-client-get-connection-by-uuid"/>
+ <keyword type="function" name="nm_client_add_connection_async ()" link="NMClient.html#nm-client-add-connection-async"/>
+ <keyword type="function" name="nm_client_add_connection_finish ()" link="NMClient.html#nm-client-add-connection-finish"/>
+ <keyword type="function" name="nm_client_load_connections ()" link="NMClient.html#nm-client-load-connections"/>
+ <keyword type="function" name="nm_client_load_connections_async ()" link="NMClient.html#nm-client-load-connections-async"/>
+ <keyword type="function" name="nm_client_load_connections_finish ()" link="NMClient.html#nm-client-load-connections-finish"/>
+ <keyword type="function" name="nm_client_reload_connections ()" link="NMClient.html#nm-client-reload-connections"/>
+ <keyword type="function" name="nm_client_reload_connections_async ()" link="NMClient.html#nm-client-reload-connections-async"/>
+ <keyword type="function" name="nm_client_reload_connections_finish ()" link="NMClient.html#nm-client-reload-connections-finish"/>
+ <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;can-modify&quot; property" link="NMClient.html#NMClient--can-modify"/>
+ <keyword type="property" name="The &quot;connections&quot; property" link="NMClient.html#NMClient--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;hostname&quot; property" link="NMClient.html#NMClient--hostname"/>
+ <keyword type="property" name="The &quot;networking-enabled&quot; property" link="NMClient.html#NMClient--networking-enabled"/>
+ <keyword type="property" name="The &quot;nm-running&quot; property" link="NMClient.html#NMClient--nm-running"/>
+ <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;connection-added&quot; signal" link="NMClient.html#NMClient-connection-added"/>
+ <keyword type="signal" name="The &quot;connection-removed&quot; signal" link="NMClient.html#NMClient-connection-removed"/>
+ <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_SECRET_AGENT_OLD_IDENTIFIER" link="NMSecretAgentOld.html#NM-SECRET-AGENT-OLD-IDENTIFIER:CAPS"/>
+ <keyword type="macro" name="NM_SECRET_AGENT_OLD_AUTO_REGISTER" link="NMSecretAgentOld.html#NM-SECRET-AGENT-OLD-AUTO-REGISTER:CAPS"/>
+ <keyword type="macro" name="NM_SECRET_AGENT_OLD_REGISTERED" link="NMSecretAgentOld.html#NM-SECRET-AGENT-OLD-REGISTERED:CAPS"/>
+ <keyword type="macro" name="NM_SECRET_AGENT_OLD_CAPABILITIES" link="NMSecretAgentOld.html#NM-SECRET-AGENT-OLD-CAPABILITIES:CAPS"/>
+ <keyword type="struct" name="NMSecretAgentOld" link="NMSecretAgentOld.html#NMSecretAgentOld-struct"/>
+ <keyword type="function" name="NMSecretAgentOldGetSecretsFunc ()" link="NMSecretAgentOld.html#NMSecretAgentOldGetSecretsFunc"/>
+ <keyword type="function" name="NMSecretAgentOldSaveSecretsFunc ()" link="NMSecretAgentOld.html#NMSecretAgentOldSaveSecretsFunc"/>
+ <keyword type="function" name="NMSecretAgentOldDeleteSecretsFunc ()" link="NMSecretAgentOld.html#NMSecretAgentOldDeleteSecretsFunc"/>
+ <keyword type="struct" name="NMSecretAgentOldClass" link="NMSecretAgentOld.html#NMSecretAgentOldClass"/>
+ <keyword type="function" name="nm_secret_agent_old_register ()" link="NMSecretAgentOld.html#nm-secret-agent-old-register"/>
+ <keyword type="function" name="nm_secret_agent_old_register_async ()" link="NMSecretAgentOld.html#nm-secret-agent-old-register-async"/>
+ <keyword type="function" name="nm_secret_agent_old_register_finish ()" link="NMSecretAgentOld.html#nm-secret-agent-old-register-finish"/>
+ <keyword type="function" name="nm_secret_agent_old_unregister ()" link="NMSecretAgentOld.html#nm-secret-agent-old-unregister"/>
+ <keyword type="function" name="nm_secret_agent_old_unregister_async ()" link="NMSecretAgentOld.html#nm-secret-agent-old-unregister-async"/>
+ <keyword type="function" name="nm_secret_agent_old_unregister_finish ()" link="NMSecretAgentOld.html#nm-secret-agent-old-unregister-finish"/>
+ <keyword type="function" name="nm_secret_agent_old_get_registered ()" link="NMSecretAgentOld.html#nm-secret-agent-old-get-registered"/>
+ <keyword type="function" name="nm_secret_agent_old_get_secrets ()" link="NMSecretAgentOld.html#nm-secret-agent-old-get-secrets"/>
+ <keyword type="function" name="nm_secret_agent_old_save_secrets ()" link="NMSecretAgentOld.html#nm-secret-agent-old-save-secrets"/>
+ <keyword type="function" name="nm_secret_agent_old_delete_secrets ()" link="NMSecretAgentOld.html#nm-secret-agent-old-delete-secrets"/>
+ <keyword type="property" name="The &quot;auto-register&quot; property" link="NMSecretAgentOld.html#NMSecretAgentOld--auto-register"/>
+ <keyword type="property" name="The &quot;capabilities&quot; property" link="NMSecretAgentOld.html#NMSecretAgentOld--capabilities"/>
+ <keyword type="property" name="The &quot;identifier&quot; property" link="NMSecretAgentOld.html#NMSecretAgentOld--identifier"/>
+ <keyword type="property" name="The &quot;registered&quot; property" link="NMSecretAgentOld.html#NMSecretAgentOld--registered"/>
+ <keyword type="macro" name="NM_OBJECT_PATH" link="NMObject.html#NM-OBJECT-PATH:CAPS"/>
+ <keyword type="macro" name="NM_OBJECT_DBUS_CONNECTION" link="NMObject.html#NM-OBJECT-DBUS-CONNECTION:CAPS"/>
+ <keyword type="struct" name="struct NMObject" link="NMObject.html#NMObject-struct"/>
+ <keyword type="struct" name="NMObjectClass" link="NMObject.html#NMObjectClass"/>
+ <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;nm-running-internal&quot; property" link="NMObject.html#NMObject--nm-running-internal"/>
+ <keyword type="property" name="The &quot;path&quot; property" link="NMObject.html#NMObject--path"/>
+ <keyword type="enum" name="enum NMAgentManagerError" link="libnm-nm-errors.html#NMAgentManagerError-enum"/>
+ <keyword type="function" name="nm_agent_manager_error_quark ()" link="libnm-nm-errors.html#nm-agent-manager-error-quark"/>
+ <keyword type="macro" name="NM_AGENT_MANAGER_ERROR" link="libnm-nm-errors.html#NM-AGENT-MANAGER-ERROR:CAPS"/>
+ <keyword type="enum" name="enum NMConnectionError" link="libnm-nm-errors.html#NMConnectionError-enum"/>
+ <keyword type="macro" name="NM_CONNECTION_ERROR" link="libnm-nm-errors.html#NM-CONNECTION-ERROR:CAPS"/>
+ <keyword type="function" name="nm_connection_error_quark ()" link="libnm-nm-errors.html#nm-connection-error-quark"/>
+ <keyword type="enum" name="enum NMCryptoError" link="libnm-nm-errors.html#NMCryptoError-enum"/>
+ <keyword type="macro" name="NM_CRYPTO_ERROR" link="libnm-nm-errors.html#NM-CRYPTO-ERROR:CAPS"/>
+ <keyword type="function" name="nm_crypto_error_quark ()" link="libnm-nm-errors.html#nm-crypto-error-quark"/>
+ <keyword type="enum" name="enum NMDeviceError" link="libnm-nm-errors.html#NMDeviceError-enum"/>
+ <keyword type="macro" name="NM_DEVICE_ERROR" link="libnm-nm-errors.html#NM-DEVICE-ERROR:CAPS"/>
+ <keyword type="function" name="nm_device_error_quark ()" link="libnm-nm-errors.html#nm-device-error-quark"/>
+ <keyword type="enum" name="enum NMManagerError" link="libnm-nm-errors.html#NMManagerError-enum"/>
+ <keyword type="function" name="nm_manager_error_quark ()" link="libnm-nm-errors.html#nm-manager-error-quark"/>
+ <keyword type="macro" name="NM_MANAGER_ERROR" link="libnm-nm-errors.html#NM-MANAGER-ERROR:CAPS"/>
+ <keyword type="enum" name="enum NMSecretAgentError" link="libnm-nm-errors.html#NMSecretAgentError-enum"/>
+ <keyword type="function" name="nm_secret_agent_error_quark ()" link="libnm-nm-errors.html#nm-secret-agent-error-quark"/>
+ <keyword type="macro" name="NM_SECRET_AGENT_ERROR" link="libnm-nm-errors.html#NM-SECRET-AGENT-ERROR:CAPS"/>
+ <keyword type="enum" name="enum NMSettingsError" link="libnm-nm-errors.html#NMSettingsError-enum"/>
+ <keyword type="function" name="nm_settings_error_quark ()" link="libnm-nm-errors.html#nm-settings-error-quark"/>
+ <keyword type="macro" name="NM_SETTINGS_ERROR" link="libnm-nm-errors.html#NM-SETTINGS-ERROR:CAPS"/>
+ <keyword type="enum" name="enum NMVpnPluginError" link="libnm-nm-errors.html#NMVpnPluginError-enum"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_ERROR" link="libnm-nm-errors.html#NM-VPN-PLUGIN-ERROR:CAPS"/>
+ <keyword type="function" name="nm_vpn_plugin_error_quark ()" link="libnm-nm-errors.html#nm-vpn-plugin-error-quark"/>
+ <keyword type="macro" name="NM_DBUS_SERVICE" link="libnm-nm-dbus-interface.html#NM-DBUS-SERVICE:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_PATH" link="libnm-nm-dbus-interface.html#NM-DBUS-PATH:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE" link="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE" link="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE_WIRED" link="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-WIRED:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE_ADSL" link="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-ADSL:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE_WIRELESS" link="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-WIRELESS:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE_BLUETOOTH" link="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-BLUETOOTH:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE_OLPC_MESH" link="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-OLPC-MESH:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_PATH_ACCESS_POINT" link="libnm-nm-dbus-interface.html#NM-DBUS-PATH-ACCESS-POINT:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_ACCESS_POINT" link="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-ACCESS-POINT:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE_MODEM" link="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-MODEM:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE_WIMAX" link="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-WIMAX:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_WIMAX_NSP" link="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-WIMAX-NSP:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_PATH_WIMAX_NSP" link="libnm-nm-dbus-interface.html#NM-DBUS-PATH-WIMAX-NSP:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_ACTIVE_CONNECTION" link="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-ACTIVE-CONNECTION:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_IP4_CONFIG" link="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-IP4-CONFIG:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DHCP4_CONFIG" link="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DHCP4-CONFIG:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_IP6_CONFIG" link="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-IP6-CONFIG:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DHCP6_CONFIG" link="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DHCP6-CONFIG:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE_INFINIBAND" link="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-INFINIBAND:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE_BOND" link="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-BOND:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE_TEAM" link="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-TEAM:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE_VLAN" link="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-VLAN:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE_BRIDGE" link="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-BRIDGE:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE_GENERIC" link="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-GENERIC:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE_VETH" link="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-VETH:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE_TUN" link="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-TUN:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE_MACVLAN" link="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-MACVLAN:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE_VXLAN" link="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-VXLAN:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_DEVICE_GRE" link="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-DEVICE-GRE:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_SETTINGS" link="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-SETTINGS:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_PATH_SETTINGS" link="libnm-nm-dbus-interface.html#NM-DBUS-PATH-SETTINGS:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_SETTINGS_CONNECTION" link="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-SETTINGS-CONNECTION:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_PATH_SETTINGS_CONNECTION" link="libnm-nm-dbus-interface.html#NM-DBUS-PATH-SETTINGS-CONNECTION:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_SETTINGS_CONNECTION_SECRETS" link="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-SETTINGS-CONNECTION-SECRETS:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_AGENT_MANAGER" link="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-AGENT-MANAGER:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_PATH_AGENT_MANAGER" link="libnm-nm-dbus-interface.html#NM-DBUS-PATH-AGENT-MANAGER:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_SECRET_AGENT" link="libnm-nm-dbus-interface.html#NM-DBUS-INTERFACE-SECRET-AGENT:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_PATH_SECRET_AGENT" link="libnm-nm-dbus-interface.html#NM-DBUS-PATH-SECRET-AGENT:CAPS"/>
+ <keyword type="enum" name="enum NMState" link="libnm-nm-dbus-interface.html#NMState-enum"/>
+ <keyword type="enum" name="enum NMConnectivityState" link="libnm-nm-dbus-interface.html#NMConnectivityState-enum"/>
+ <keyword type="enum" name="enum NMDeviceType" link="libnm-nm-dbus-interface.html#NMDeviceType-enum"/>
+ <keyword type="enum" name="enum NMDeviceCapabilities" link="libnm-nm-dbus-interface.html#NMDeviceCapabilities-enum"/>
+ <keyword type="enum" name="enum NMDeviceWifiCapabilities" link="libnm-nm-dbus-interface.html#NMDeviceWifiCapabilities-enum"/>
+ <keyword type="enum" name="enum NM80211ApFlags" link="libnm-nm-dbus-interface.html#NM80211ApFlags-enum"/>
+ <keyword type="enum" name="enum NM80211ApSecurityFlags" link="libnm-nm-dbus-interface.html#NM80211ApSecurityFlags-enum"/>
+ <keyword type="enum" name="enum NM80211Mode" link="libnm-nm-dbus-interface.html#NM80211Mode-enum"/>
+ <keyword type="enum" name="enum NMBluetoothCapabilities" link="libnm-nm-dbus-interface.html#NMBluetoothCapabilities-enum"/>
+ <keyword type="enum" name="enum NMDeviceModemCapabilities" link="libnm-nm-dbus-interface.html#NMDeviceModemCapabilities-enum"/>
+ <keyword type="enum" name="enum NMDeviceState" link="libnm-nm-dbus-interface.html#NMDeviceState-enum"/>
+ <keyword type="enum" name="enum NMDeviceStateReason" link="libnm-nm-dbus-interface.html#NMDeviceStateReason-enum"/>
+ <keyword type="enum" name="enum NMActiveConnectionState" link="libnm-nm-dbus-interface.html#NMActiveConnectionState-enum"/>
+ <keyword type="enum" name="enum NMSecretAgentGetSecretsFlags" link="libnm-nm-dbus-interface.html#NMSecretAgentGetSecretsFlags-enum"/>
+ <keyword type="enum" name="enum NMSecretAgentCapabilities" link="libnm-nm-dbus-interface.html#NMSecretAgentCapabilities-enum"/>
+ <keyword type="macro" name="NM_CONNECTION_SECRETS_UPDATED" link="libnm-NMConnection.html#NM-CONNECTION-SECRETS-UPDATED:CAPS"/>
+ <keyword type="macro" name="NM_CONNECTION_SECRETS_CLEARED" link="libnm-NMConnection.html#NM-CONNECTION-SECRETS-CLEARED:CAPS"/>
+ <keyword type="macro" name="NM_CONNECTION_CHANGED" link="libnm-NMConnection.html#NM-CONNECTION-CHANGED:CAPS"/>
+ <keyword type="macro" name="NM_CONNECTION_NORMALIZE_PARAM_IP6_CONFIG_METHOD" link="libnm-NMConnection.html#NM-CONNECTION-NORMALIZE-PARAM-IP6-CONFIG-METHOD:CAPS"/>
+ <keyword type="struct" name="NMConnectionInterface" link="libnm-NMConnection.html#NMConnectionInterface"/>
+ <keyword type="function" name="nm_connection_add_setting ()" link="libnm-NMConnection.html#nm-connection-add-setting"/>
+ <keyword type="function" name="nm_connection_remove_setting ()" link="libnm-NMConnection.html#nm-connection-remove-setting"/>
+ <keyword type="function" name="nm_connection_get_setting ()" link="libnm-NMConnection.html#nm-connection-get-setting"/>
+ <keyword type="function" name="nm_connection_get_setting_by_name ()" link="libnm-NMConnection.html#nm-connection-get-setting-by-name"/>
+ <keyword type="macro" name="NM_VARIANT_TYPE_SETTING" link="libnm-NMConnection.html#NM-VARIANT-TYPE-SETTING:CAPS"/>
+ <keyword type="enum" name="enum NMConnectionSerializationFlags" link="libnm-NMConnection.html#NMConnectionSerializationFlags-enum"/>
+ <keyword type="function" name="nm_connection_to_dbus ()" link="libnm-NMConnection.html#nm-connection-to-dbus"/>
+ <keyword type="function" name="nm_connection_replace_settings ()" link="libnm-NMConnection.html#nm-connection-replace-settings"/>
+ <keyword type="function" name="nm_connection_replace_settings_from_connection ()" link="libnm-NMConnection.html#nm-connection-replace-settings-from-connection"/>
+ <keyword type="function" name="nm_connection_clear_settings ()" link="libnm-NMConnection.html#nm-connection-clear-settings"/>
+ <keyword type="function" name="nm_connection_compare ()" link="libnm-NMConnection.html#nm-connection-compare"/>
+ <keyword type="function" name="nm_connection_diff ()" link="libnm-NMConnection.html#nm-connection-diff"/>
+ <keyword type="function" name="nm_connection_verify ()" link="libnm-NMConnection.html#nm-connection-verify"/>
+ <keyword type="function" name="nm_connection_normalize ()" link="libnm-NMConnection.html#nm-connection-normalize"/>
+ <keyword type="function" name="nm_connection_need_secrets ()" link="libnm-NMConnection.html#nm-connection-need-secrets"/>
+ <keyword type="function" name="nm_connection_clear_secrets ()" link="libnm-NMConnection.html#nm-connection-clear-secrets"/>
+ <keyword type="function" name="nm_connection_clear_secrets_with_flags ()" link="libnm-NMConnection.html#nm-connection-clear-secrets-with-flags"/>
+ <keyword type="function" name="nm_connection_update_secrets ()" link="libnm-NMConnection.html#nm-connection-update-secrets"/>
+ <keyword type="function" name="nm_connection_set_path ()" link="libnm-NMConnection.html#nm-connection-set-path"/>
+ <keyword type="function" name="nm_connection_get_path ()" link="libnm-NMConnection.html#nm-connection-get-path"/>
+ <keyword type="function" name="nm_connection_get_interface_name ()" link="libnm-NMConnection.html#nm-connection-get-interface-name"/>
+ <keyword type="function" name="nm_connection_is_type ()" link="libnm-NMConnection.html#nm-connection-is-type"/>
+ <keyword type="function" name="nm_connection_for_each_setting_value ()" link="libnm-NMConnection.html#nm-connection-for-each-setting-value"/>
+ <keyword type="function" name="nm_connection_dump ()" link="libnm-NMConnection.html#nm-connection-dump"/>
+ <keyword type="function" name="nm_connection_get_uuid ()" link="libnm-NMConnection.html#nm-connection-get-uuid"/>
+ <keyword type="function" name="nm_connection_get_id ()" link="libnm-NMConnection.html#nm-connection-get-id"/>
+ <keyword type="function" name="nm_connection_get_connection_type ()" link="libnm-NMConnection.html#nm-connection-get-connection-type"/>
+ <keyword type="function" name="nm_connection_is_virtual ()" link="libnm-NMConnection.html#nm-connection-is-virtual"/>
+ <keyword type="function" name="nm_connection_get_virtual_device_description ()" link="libnm-NMConnection.html#nm-connection-get-virtual-device-description"/>
+ <keyword type="function" name="nm_connection_get_setting_802_1x ()" link="libnm-NMConnection.html#nm-connection-get-setting-802-1x"/>
+ <keyword type="function" name="nm_connection_get_setting_bluetooth ()" link="libnm-NMConnection.html#nm-connection-get-setting-bluetooth"/>
+ <keyword type="function" name="nm_connection_get_setting_bond ()" link="libnm-NMConnection.html#nm-connection-get-setting-bond"/>
+ <keyword type="function" name="nm_connection_get_setting_team ()" link="libnm-NMConnection.html#nm-connection-get-setting-team"/>
+ <keyword type="function" name="nm_connection_get_setting_team_port ()" link="libnm-NMConnection.html#nm-connection-get-setting-team-port"/>
+ <keyword type="function" name="nm_connection_get_setting_bridge ()" link="libnm-NMConnection.html#nm-connection-get-setting-bridge"/>
+ <keyword type="function" name="nm_connection_get_setting_bridge_port ()" link="libnm-NMConnection.html#nm-connection-get-setting-bridge-port"/>
+ <keyword type="function" name="nm_connection_get_setting_cdma ()" link="libnm-NMConnection.html#nm-connection-get-setting-cdma"/>
+ <keyword type="function" name="nm_connection_get_setting_connection ()" link="libnm-NMConnection.html#nm-connection-get-setting-connection"/>
+ <keyword type="function" name="nm_connection_get_setting_dcb ()" link="libnm-NMConnection.html#nm-connection-get-setting-dcb"/>
+ <keyword type="function" name="nm_connection_get_setting_generic ()" link="libnm-NMConnection.html#nm-connection-get-setting-generic"/>
+ <keyword type="function" name="nm_connection_get_setting_gsm ()" link="libnm-NMConnection.html#nm-connection-get-setting-gsm"/>
+ <keyword type="function" name="nm_connection_get_setting_infiniband ()" link="libnm-NMConnection.html#nm-connection-get-setting-infiniband"/>
+ <keyword type="function" name="nm_connection_get_setting_ip4_config ()" link="libnm-NMConnection.html#nm-connection-get-setting-ip4-config"/>
+ <keyword type="function" name="nm_connection_get_setting_ip6_config ()" link="libnm-NMConnection.html#nm-connection-get-setting-ip6-config"/>
+ <keyword type="function" name="nm_connection_get_setting_olpc_mesh ()" link="libnm-NMConnection.html#nm-connection-get-setting-olpc-mesh"/>
+ <keyword type="function" name="nm_connection_get_setting_ppp ()" link="libnm-NMConnection.html#nm-connection-get-setting-ppp"/>
+ <keyword type="function" name="nm_connection_get_setting_pppoe ()" link="libnm-NMConnection.html#nm-connection-get-setting-pppoe"/>
+ <keyword type="function" name="nm_connection_get_setting_serial ()" link="libnm-NMConnection.html#nm-connection-get-setting-serial"/>
+ <keyword type="function" name="nm_connection_get_setting_vpn ()" link="libnm-NMConnection.html#nm-connection-get-setting-vpn"/>
+ <keyword type="function" name="nm_connection_get_setting_wimax ()" link="libnm-NMConnection.html#nm-connection-get-setting-wimax"/>
+ <keyword type="function" name="nm_connection_get_setting_adsl ()" link="libnm-NMConnection.html#nm-connection-get-setting-adsl"/>
+ <keyword type="function" name="nm_connection_get_setting_wired ()" link="libnm-NMConnection.html#nm-connection-get-setting-wired"/>
+ <keyword type="function" name="nm_connection_get_setting_wireless ()" link="libnm-NMConnection.html#nm-connection-get-setting-wireless"/>
+ <keyword type="function" name="nm_connection_get_setting_wireless_security ()" link="libnm-NMConnection.html#nm-connection-get-setting-wireless-security"/>
+ <keyword type="function" name="nm_connection_get_setting_vlan ()" link="libnm-NMConnection.html#nm-connection-get-setting-vlan"/>
+ <keyword type="struct" name="struct NMSimpleConnection" link="NMSimpleConnection.html#NMSimpleConnection-struct"/>
+ <keyword type="struct" name="NMSimpleConnectionClass" link="NMSimpleConnection.html#NMSimpleConnectionClass"/>
+ <keyword type="function" name="nm_simple_connection_new ()" link="NMSimpleConnection.html#nm-simple-connection-new"/>
+ <keyword type="function" name="nm_simple_connection_new_from_dbus ()" link="NMSimpleConnection.html#nm-simple-connection-new-from-dbus"/>
+ <keyword type="function" name="nm_simple_connection_new_clone ()" link="NMSimpleConnection.html#nm-simple-connection-new-clone"/>
+ <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="macro" name="NM_SETTING_NAME" link="NMSetting.html#NM-SETTING-NAME:CAPS"/>
+ <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="struct NMSetting" link="NMSetting.html#NMSetting-struct"/>
+ <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="function" name="nm_setting_lookup_type ()" link="NMSetting.html#nm-setting-lookup-type"/>
+ <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_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_dbus_property_type ()" link="NMSetting.html#nm-setting-get-dbus-property-type"/>
+ <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="macro" name="NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_MIN" link="NMSettingConnection.html#NM-SETTING-CONNECTION-AUTOCONNECT-PRIORITY-MIN:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_MAX" link="NMSettingConnection.html#NM-SETTING-CONNECTION-AUTOCONNECT-PRIORITY-MAX:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_DEFAULT" link="NMSettingConnection.html#NM-SETTING-CONNECTION-AUTOCONNECT-PRIORITY-DEFAULT:CAPS"/>
+ <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_AUTOCONNECT_PRIORITY" link="NMSettingConnection.html#NM-SETTING-CONNECTION-AUTOCONNECT-PRIORITY:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_CONNECTION_TIMESTAMP" link="NMSettingConnection.html#NM-SETTING-CONNECTION-TIMESTAMP:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_CONNECTION_READ_ONLY" link="NMSettingConnection.html#NM-SETTING-CONNECTION-READ-ONLY:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_CONNECTION_PERMISSIONS" link="NMSettingConnection.html#NM-SETTING-CONNECTION-PERMISSIONS:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_CONNECTION_ZONE" link="NMSettingConnection.html#NM-SETTING-CONNECTION-ZONE:CAPS"/>
+ <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="struct NMSettingConnection" link="NMSettingConnection.html#NMSettingConnection-struct"/>
+ <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"/>
+ <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_autoconnect_priority ()" link="NMSettingConnection.html#nm-setting-connection-get-autoconnect-priority"/>
+ <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"/>
+ <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"/>
+ <keyword type="function" name="nm_setting_connection_get_secondary ()" link="NMSettingConnection.html#nm-setting-connection-get-secondary"/>
+ <keyword type="function" name="nm_setting_connection_add_secondary ()" link="NMSettingConnection.html#nm-setting-connection-add-secondary"/>
+ <keyword type="function" name="nm_setting_connection_remove_secondary ()" link="NMSettingConnection.html#nm-setting-connection-remove-secondary"/>
+ <keyword type="function" name="nm_setting_connection_remove_secondary_by_value ()" link="NMSettingConnection.html#nm-setting-connection-remove-secondary-by-value"/>
+ <keyword type="function" name="nm_setting_connection_get_gateway_ping_timeout ()" link="NMSettingConnection.html#nm-setting-connection-get-gateway-ping-timeout"/>
+ <keyword type="property" name="The &quot;autoconnect&quot; property" link="NMSettingConnection.html#NMSettingConnection--autoconnect"/>
+ <keyword type="property" name="The &quot;autoconnect-priority&quot; property" link="NMSettingConnection.html#NMSettingConnection--autoconnect-priority"/>
+ <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="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="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"/>
+ <keyword type="macro" name="NM_SETTING_802_1X_PAC_FILE" link="NMSetting8021x.html#NM-SETTING-802-1X-PAC-FILE:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_802_1X_CA_CERT" link="NMSetting8021x.html#NM-SETTING-802-1X-CA-CERT:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_802_1X_CA_PATH" link="NMSetting8021x.html#NM-SETTING-802-1X-CA-PATH:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_802_1X_SUBJECT_MATCH" link="NMSetting8021x.html#NM-SETTING-802-1X-SUBJECT-MATCH:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_802_1X_ALTSUBJECT_MATCHES" link="NMSetting8021x.html#NM-SETTING-802-1X-ALTSUBJECT-MATCHES:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_802_1X_CLIENT_CERT" link="NMSetting8021x.html#NM-SETTING-802-1X-CLIENT-CERT:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_802_1X_PHASE1_PEAPVER" link="NMSetting8021x.html#NM-SETTING-802-1X-PHASE1-PEAPVER:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_802_1X_PHASE1_PEAPLABEL" link="NMSetting8021x.html#NM-SETTING-802-1X-PHASE1-PEAPLABEL:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_802_1X_PHASE1_FAST_PROVISIONING" link="NMSetting8021x.html#NM-SETTING-802-1X-PHASE1-FAST-PROVISIONING:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_802_1X_PHASE2_AUTH" link="NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-AUTH:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_802_1X_PHASE2_AUTHEAP" link="NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-AUTHEAP:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_802_1X_PHASE2_CA_CERT" link="NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-CA-CERT:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_802_1X_PHASE2_CA_PATH" link="NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-CA-PATH:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH" link="NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-SUBJECT-MATCH:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES" link="NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-ALTSUBJECT-MATCHES:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_802_1X_PHASE2_CLIENT_CERT" link="NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-CLIENT-CERT:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_802_1X_PASSWORD" link="NMSetting8021x.html#NM-SETTING-802-1X-PASSWORD:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_802_1X_PASSWORD_FLAGS" link="NMSetting8021x.html#NM-SETTING-802-1X-PASSWORD-FLAGS:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_802_1X_PASSWORD_RAW" link="NMSetting8021x.html#NM-SETTING-802-1X-PASSWORD-RAW:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_802_1X_PASSWORD_RAW_FLAGS" link="NMSetting8021x.html#NM-SETTING-802-1X-PASSWORD-RAW-FLAGS:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_802_1X_PRIVATE_KEY" link="NMSetting8021x.html#NM-SETTING-802-1X-PRIVATE-KEY:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD" link="NMSetting8021x.html#NM-SETTING-802-1X-PRIVATE-KEY-PASSWORD:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD_FLAGS" link="NMSetting8021x.html#NM-SETTING-802-1X-PRIVATE-KEY-PASSWORD-FLAGS:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_802_1X_PHASE2_PRIVATE_KEY" link="NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-PRIVATE-KEY:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD" link="NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-PRIVATE-KEY-PASSWORD:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD_FLAGS" link="NMSetting8021x.html#NM-SETTING-802-1X-PHASE2-PRIVATE-KEY-PASSWORD-FLAGS:CAPS"/>
+ <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="struct" name="struct 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"/>
+ <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"/>
+ <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"/>
+ <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_ADSL_SETTING_NAME" link="NMSettingAdsl.html#NM-SETTING-ADSL-SETTING-NAME:CAPS"/>
+ <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"/>
+ <keyword type="macro" name="NM_SETTING_ADSL_PROTOCOL" link="NMSettingAdsl.html#NM-SETTING-ADSL-PROTOCOL:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_ADSL_ENCAPSULATION" link="NMSettingAdsl.html#NM-SETTING-ADSL-ENCAPSULATION:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_ADSL_VPI" link="NMSettingAdsl.html#NM-SETTING-ADSL-VPI:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_ADSL_VCI" link="NMSettingAdsl.html#NM-SETTING-ADSL-VCI:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_ADSL_PROTOCOL_PPPOA" link="NMSettingAdsl.html#NM-SETTING-ADSL-PROTOCOL-PPPOA:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_ADSL_PROTOCOL_PPPOE" link="NMSettingAdsl.html#NM-SETTING-ADSL-PROTOCOL-PPPOE:CAPS"/>
+ <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="struct" name="struct 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_BLUETOOTH_SETTING_NAME" link="NMSettingBluetooth.html#NM-SETTING-BLUETOOTH-SETTING-NAME:CAPS"/>
+ <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="struct" name="struct 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_BOND_SETTING_NAME" link="NMSettingBond.html#NM-SETTING-BOND-SETTING-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"/>
+ <keyword type="macro" name="NM_SETTING_BOND_OPTION_MIIMON" link="NMSettingBond.html#NM-SETTING-BOND-OPTION-MIIMON:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_BOND_OPTION_DOWNDELAY" link="NMSettingBond.html#NM-SETTING-BOND-OPTION-DOWNDELAY:CAPS"/>
+ <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="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="macro" name="NM_SETTING_BOND_OPTION_LACP_RATE" link="NMSettingBond.html#NM-SETTING-BOND-OPTION-LACP-RATE:CAPS"/>
+ <keyword type="struct" name="struct 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_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"/>
+ <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;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="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="struct" name="struct 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"/>
+ <keyword type="function" name="nm_setting_bridge_get_mac_address ()" link="NMSettingBridge.html#nm-setting-bridge-get-mac-address"/>
+ <keyword type="function" name="nm_setting_bridge_get_stp ()" link="NMSettingBridge.html#nm-setting-bridge-get-stp"/>
+ <keyword type="function" name="nm_setting_bridge_get_priority ()" link="NMSettingBridge.html#nm-setting-bridge-get-priority"/>
+ <keyword type="function" name="nm_setting_bridge_get_forward_delay ()" link="NMSettingBridge.html#nm-setting-bridge-get-forward-delay"/>
+ <keyword type="function" name="nm_setting_bridge_get_hello_time ()" link="NMSettingBridge.html#nm-setting-bridge-get-hello-time"/>
+ <keyword type="function" name="nm_setting_bridge_get_max_age ()" link="NMSettingBridge.html#nm-setting-bridge-get-max-age"/>
+ <keyword type="function" name="nm_setting_bridge_get_ageing_time ()" link="NMSettingBridge.html#nm-setting-bridge-get-ageing-time"/>
+ <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;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="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="struct" name="struct 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"/>
+ <keyword type="function" name="nm_setting_bridge_port_get_priority ()" link="NMSettingBridgePort.html#nm-setting-bridge-port-get-priority"/>
+ <keyword type="function" name="nm_setting_bridge_port_get_path_cost ()" link="NMSettingBridgePort.html#nm-setting-bridge-port-get-path-cost"/>
+ <keyword type="function" name="nm_setting_bridge_port_get_hairpin_mode ()" link="NMSettingBridgePort.html#nm-setting-bridge-port-get-hairpin-mode"/>
+ <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_CDMA_SETTING_NAME" link="NMSettingCdma.html#NM-SETTING-CDMA-SETTING-NAME:CAPS"/>
+ <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="struct" name="struct 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_DCB_SETTING_NAME" link="NMSettingDcb.html#NM-SETTING-DCB-SETTING-NAME:CAPS"/>
+ <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"/>
+ <keyword type="macro" name="NM_SETTING_DCB_FCOE_MODE_VN2VN" link="NMSettingDcb.html#NM-SETTING-DCB-FCOE-MODE-VN2VN:CAPS"/>
+ <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="struct 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"/>
+ <keyword type="function" name="nm_setting_dcb_get_app_fcoe_flags ()" link="NMSettingDcb.html#nm-setting-dcb-get-app-fcoe-flags"/>
+ <keyword type="function" name="nm_setting_dcb_get_app_fcoe_priority ()" link="NMSettingDcb.html#nm-setting-dcb-get-app-fcoe-priority"/>
+ <keyword type="function" name="nm_setting_dcb_get_app_fcoe_mode ()" link="NMSettingDcb.html#nm-setting-dcb-get-app-fcoe-mode"/>
+ <keyword type="function" name="nm_setting_dcb_get_app_iscsi_flags ()" link="NMSettingDcb.html#nm-setting-dcb-get-app-iscsi-flags"/>
+ <keyword type="function" name="nm_setting_dcb_get_app_iscsi_priority ()" link="NMSettingDcb.html#nm-setting-dcb-get-app-iscsi-priority"/>
+ <keyword type="function" name="nm_setting_dcb_get_app_fip_flags ()" link="NMSettingDcb.html#nm-setting-dcb-get-app-fip-flags"/>
+ <keyword type="function" name="nm_setting_dcb_get_app_fip_priority ()" link="NMSettingDcb.html#nm-setting-dcb-get-app-fip-priority"/>
+ <keyword type="function" name="nm_setting_dcb_get_priority_flow_control_flags ()" link="NMSettingDcb.html#nm-setting-dcb-get-priority-flow-control-flags"/>
+ <keyword type="function" name="nm_setting_dcb_get_priority_flow_control ()" link="NMSettingDcb.html#nm-setting-dcb-get-priority-flow-control"/>
+ <keyword type="function" name="nm_setting_dcb_set_priority_flow_control ()" link="NMSettingDcb.html#nm-setting-dcb-set-priority-flow-control"/>
+ <keyword type="function" name="nm_setting_dcb_get_priority_group_flags ()" link="NMSettingDcb.html#nm-setting-dcb-get-priority-group-flags"/>
+ <keyword type="function" name="nm_setting_dcb_get_priority_group_id ()" link="NMSettingDcb.html#nm-setting-dcb-get-priority-group-id"/>
+ <keyword type="function" name="nm_setting_dcb_set_priority_group_id ()" link="NMSettingDcb.html#nm-setting-dcb-set-priority-group-id"/>
+ <keyword type="function" name="nm_setting_dcb_get_priority_group_bandwidth ()" link="NMSettingDcb.html#nm-setting-dcb-get-priority-group-bandwidth"/>
+ <keyword type="function" name="nm_setting_dcb_set_priority_group_bandwidth ()" link="NMSettingDcb.html#nm-setting-dcb-set-priority-group-bandwidth"/>
+ <keyword type="function" name="nm_setting_dcb_get_priority_bandwidth ()" link="NMSettingDcb.html#nm-setting-dcb-get-priority-bandwidth"/>
+ <keyword type="function" name="nm_setting_dcb_set_priority_bandwidth ()" link="NMSettingDcb.html#nm-setting-dcb-set-priority-bandwidth"/>
+ <keyword type="function" name="nm_setting_dcb_get_priority_strict_bandwidth ()" link="NMSettingDcb.html#nm-setting-dcb-get-priority-strict-bandwidth"/>
+ <keyword type="function" name="nm_setting_dcb_set_priority_strict_bandwidth ()" link="NMSettingDcb.html#nm-setting-dcb-set-priority-strict-bandwidth"/>
+ <keyword type="function" name="nm_setting_dcb_get_priority_traffic_class ()" link="NMSettingDcb.html#nm-setting-dcb-get-priority-traffic-class"/>
+ <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="macro" name="NM_SETTING_GENERIC_SETTING_NAME" link="NMSettingGeneric.html#NM-SETTING-GENERIC-SETTING-NAME:CAPS"/>
+ <keyword type="struct" name="struct 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"/>
+ <keyword type="macro" name="NM_SETTING_GSM_SETTING_NAME" link="NMSettingGsm.html#NM-SETTING-GSM-SETTING-NAME:CAPS"/>
+ <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_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="struct" name="struct 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="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;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_INFINIBAND_SETTING_NAME" link="NMSettingInfiniband.html#NM-SETTING-INFINIBAND-SETTING-NAME:CAPS"/>
+ <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="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="struct 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="function" name="nm_setting_infiniband_get_virtual_interface_name ()" link="NMSettingInfiniband.html#nm-setting-infiniband-get-virtual-interface-name"/>
+ <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="typedef" name="NMIPAddress" link="NMSettingIPConfig.html#NMIPAddress"/>
+ <keyword type="function" name="nm_ip_address_new ()" link="NMSettingIPConfig.html#nm-ip-address-new"/>
+ <keyword type="function" name="nm_ip_address_new_binary ()" link="NMSettingIPConfig.html#nm-ip-address-new-binary"/>
+ <keyword type="function" name="nm_ip_address_ref ()" link="NMSettingIPConfig.html#nm-ip-address-ref"/>
+ <keyword type="function" name="nm_ip_address_unref ()" link="NMSettingIPConfig.html#nm-ip-address-unref"/>
+ <keyword type="function" name="nm_ip_address_equal ()" link="NMSettingIPConfig.html#nm-ip-address-equal"/>
+ <keyword type="function" name="nm_ip_address_dup ()" link="NMSettingIPConfig.html#nm-ip-address-dup"/>
+ <keyword type="function" name="nm_ip_address_get_family ()" link="NMSettingIPConfig.html#nm-ip-address-get-family"/>
+ <keyword type="function" name="nm_ip_address_get_address ()" link="NMSettingIPConfig.html#nm-ip-address-get-address"/>
+ <keyword type="function" name="nm_ip_address_set_address ()" link="NMSettingIPConfig.html#nm-ip-address-set-address"/>
+ <keyword type="function" name="nm_ip_address_get_address_binary ()" link="NMSettingIPConfig.html#nm-ip-address-get-address-binary"/>
+ <keyword type="function" name="nm_ip_address_set_address_binary ()" link="NMSettingIPConfig.html#nm-ip-address-set-address-binary"/>
+ <keyword type="function" name="nm_ip_address_get_prefix ()" link="NMSettingIPConfig.html#nm-ip-address-get-prefix"/>
+ <keyword type="function" name="nm_ip_address_set_prefix ()" link="NMSettingIPConfig.html#nm-ip-address-set-prefix"/>
+ <keyword type="function" name="nm_ip_address_get_attribute_names ()" link="NMSettingIPConfig.html#nm-ip-address-get-attribute-names"/>
+ <keyword type="function" name="nm_ip_address_get_attribute ()" link="NMSettingIPConfig.html#nm-ip-address-get-attribute"/>
+ <keyword type="function" name="nm_ip_address_set_attribute ()" link="NMSettingIPConfig.html#nm-ip-address-set-attribute"/>
+ <keyword type="typedef" name="NMIPRoute" link="NMSettingIPConfig.html#NMIPRoute"/>
+ <keyword type="function" name="nm_ip_route_new ()" link="NMSettingIPConfig.html#nm-ip-route-new"/>
+ <keyword type="function" name="nm_ip_route_new_binary ()" link="NMSettingIPConfig.html#nm-ip-route-new-binary"/>
+ <keyword type="function" name="nm_ip_route_ref ()" link="NMSettingIPConfig.html#nm-ip-route-ref"/>
+ <keyword type="function" name="nm_ip_route_unref ()" link="NMSettingIPConfig.html#nm-ip-route-unref"/>
+ <keyword type="function" name="nm_ip_route_equal ()" link="NMSettingIPConfig.html#nm-ip-route-equal"/>
+ <keyword type="function" name="nm_ip_route_dup ()" link="NMSettingIPConfig.html#nm-ip-route-dup"/>
+ <keyword type="function" name="nm_ip_route_get_family ()" link="NMSettingIPConfig.html#nm-ip-route-get-family"/>
+ <keyword type="function" name="nm_ip_route_get_dest ()" link="NMSettingIPConfig.html#nm-ip-route-get-dest"/>
+ <keyword type="function" name="nm_ip_route_set_dest ()" link="NMSettingIPConfig.html#nm-ip-route-set-dest"/>
+ <keyword type="function" name="nm_ip_route_get_dest_binary ()" link="NMSettingIPConfig.html#nm-ip-route-get-dest-binary"/>
+ <keyword type="function" name="nm_ip_route_set_dest_binary ()" link="NMSettingIPConfig.html#nm-ip-route-set-dest-binary"/>
+ <keyword type="function" name="nm_ip_route_get_prefix ()" link="NMSettingIPConfig.html#nm-ip-route-get-prefix"/>
+ <keyword type="function" name="nm_ip_route_set_prefix ()" link="NMSettingIPConfig.html#nm-ip-route-set-prefix"/>
+ <keyword type="function" name="nm_ip_route_get_next_hop ()" link="NMSettingIPConfig.html#nm-ip-route-get-next-hop"/>
+ <keyword type="function" name="nm_ip_route_set_next_hop ()" link="NMSettingIPConfig.html#nm-ip-route-set-next-hop"/>
+ <keyword type="function" name="nm_ip_route_get_next_hop_binary ()" link="NMSettingIPConfig.html#nm-ip-route-get-next-hop-binary"/>
+ <keyword type="function" name="nm_ip_route_set_next_hop_binary ()" link="NMSettingIPConfig.html#nm-ip-route-set-next-hop-binary"/>
+ <keyword type="function" name="nm_ip_route_get_metric ()" link="NMSettingIPConfig.html#nm-ip-route-get-metric"/>
+ <keyword type="function" name="nm_ip_route_set_metric ()" link="NMSettingIPConfig.html#nm-ip-route-set-metric"/>
+ <keyword type="function" name="nm_ip_route_get_attribute_names ()" link="NMSettingIPConfig.html#nm-ip-route-get-attribute-names"/>
+ <keyword type="function" name="nm_ip_route_get_attribute ()" link="NMSettingIPConfig.html#nm-ip-route-get-attribute"/>
+ <keyword type="function" name="nm_ip_route_set_attribute ()" link="NMSettingIPConfig.html#nm-ip-route-set-attribute"/>
+ <keyword type="macro" name="NM_SETTING_IP_CONFIG_METHOD" link="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-METHOD:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_IP_CONFIG_DNS" link="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-DNS:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_IP_CONFIG_DNS_SEARCH" link="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-DNS-SEARCH:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_IP_CONFIG_ADDRESSES" link="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-ADDRESSES:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_IP_CONFIG_GATEWAY" link="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-GATEWAY:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_IP_CONFIG_ROUTES" link="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-ROUTES:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_IP_CONFIG_ROUTE_METRIC" link="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-ROUTE-METRIC:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES" link="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-IGNORE-AUTO-ROUTES:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS" link="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-IGNORE-AUTO-DNS:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_IP_CONFIG_DHCP_HOSTNAME" link="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-DHCP-HOSTNAME:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME" link="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-DHCP-SEND-HOSTNAME:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_IP_CONFIG_NEVER_DEFAULT" link="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-NEVER-DEFAULT:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_IP_CONFIG_MAY_FAIL" link="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-MAY-FAIL:CAPS"/>
+ <keyword type="struct" name="struct NMSettingIPConfig" link="NMSettingIPConfig.html#NMSettingIPConfig-struct"/>
+ <keyword type="struct" name="NMSettingIPConfigClass" link="NMSettingIPConfig.html#NMSettingIPConfigClass"/>
+ <keyword type="function" name="nm_setting_ip_config_get_method ()" link="NMSettingIPConfig.html#nm-setting-ip-config-get-method"/>
+ <keyword type="function" name="nm_setting_ip_config_get_num_dns ()" link="NMSettingIPConfig.html#nm-setting-ip-config-get-num-dns"/>
+ <keyword type="function" name="nm_setting_ip_config_get_dns ()" link="NMSettingIPConfig.html#nm-setting-ip-config-get-dns"/>
+ <keyword type="function" name="nm_setting_ip_config_add_dns ()" link="NMSettingIPConfig.html#nm-setting-ip-config-add-dns"/>
+ <keyword type="function" name="nm_setting_ip_config_remove_dns ()" link="NMSettingIPConfig.html#nm-setting-ip-config-remove-dns"/>
+ <keyword type="function" name="nm_setting_ip_config_remove_dns_by_value ()" link="NMSettingIPConfig.html#nm-setting-ip-config-remove-dns-by-value"/>
+ <keyword type="function" name="nm_setting_ip_config_clear_dns ()" link="NMSettingIPConfig.html#nm-setting-ip-config-clear-dns"/>
+ <keyword type="function" name="nm_setting_ip_config_get_num_dns_searches ()" link="NMSettingIPConfig.html#nm-setting-ip-config-get-num-dns-searches"/>
+ <keyword type="function" name="nm_setting_ip_config_get_dns_search ()" link="NMSettingIPConfig.html#nm-setting-ip-config-get-dns-search"/>
+ <keyword type="function" name="nm_setting_ip_config_add_dns_search ()" link="NMSettingIPConfig.html#nm-setting-ip-config-add-dns-search"/>
+ <keyword type="function" name="nm_setting_ip_config_remove_dns_search ()" link="NMSettingIPConfig.html#nm-setting-ip-config-remove-dns-search"/>
+ <keyword type="function" name="nm_setting_ip_config_remove_dns_search_by_value ()" link="NMSettingIPConfig.html#nm-setting-ip-config-remove-dns-search-by-value"/>
+ <keyword type="function" name="nm_setting_ip_config_clear_dns_searches ()" link="NMSettingIPConfig.html#nm-setting-ip-config-clear-dns-searches"/>
+ <keyword type="function" name="nm_setting_ip_config_get_num_addresses ()" link="NMSettingIPConfig.html#nm-setting-ip-config-get-num-addresses"/>
+ <keyword type="function" name="nm_setting_ip_config_get_address ()" link="NMSettingIPConfig.html#nm-setting-ip-config-get-address"/>
+ <keyword type="function" name="nm_setting_ip_config_add_address ()" link="NMSettingIPConfig.html#nm-setting-ip-config-add-address"/>
+ <keyword type="function" name="nm_setting_ip_config_remove_address ()" link="NMSettingIPConfig.html#nm-setting-ip-config-remove-address"/>
+ <keyword type="function" name="nm_setting_ip_config_remove_address_by_value ()" link="NMSettingIPConfig.html#nm-setting-ip-config-remove-address-by-value"/>
+ <keyword type="function" name="nm_setting_ip_config_clear_addresses ()" link="NMSettingIPConfig.html#nm-setting-ip-config-clear-addresses"/>
+ <keyword type="function" name="nm_setting_ip_config_get_gateway ()" link="NMSettingIPConfig.html#nm-setting-ip-config-get-gateway"/>
+ <keyword type="function" name="nm_setting_ip_config_get_num_routes ()" link="NMSettingIPConfig.html#nm-setting-ip-config-get-num-routes"/>
+ <keyword type="function" name="nm_setting_ip_config_get_route ()" link="NMSettingIPConfig.html#nm-setting-ip-config-get-route"/>
+ <keyword type="function" name="nm_setting_ip_config_add_route ()" link="NMSettingIPConfig.html#nm-setting-ip-config-add-route"/>
+ <keyword type="function" name="nm_setting_ip_config_remove_route ()" link="NMSettingIPConfig.html#nm-setting-ip-config-remove-route"/>
+ <keyword type="function" name="nm_setting_ip_config_remove_route_by_value ()" link="NMSettingIPConfig.html#nm-setting-ip-config-remove-route-by-value"/>
+ <keyword type="function" name="nm_setting_ip_config_clear_routes ()" link="NMSettingIPConfig.html#nm-setting-ip-config-clear-routes"/>
+ <keyword type="function" name="nm_setting_ip_config_get_route_metric ()" link="NMSettingIPConfig.html#nm-setting-ip-config-get-route-metric"/>
+ <keyword type="function" name="nm_setting_ip_config_get_ignore_auto_routes ()" link="NMSettingIPConfig.html#nm-setting-ip-config-get-ignore-auto-routes"/>
+ <keyword type="function" name="nm_setting_ip_config_get_ignore_auto_dns ()" link="NMSettingIPConfig.html#nm-setting-ip-config-get-ignore-auto-dns"/>
+ <keyword type="function" name="nm_setting_ip_config_get_dhcp_hostname ()" link="NMSettingIPConfig.html#nm-setting-ip-config-get-dhcp-hostname"/>
+ <keyword type="function" name="nm_setting_ip_config_get_dhcp_send_hostname ()" link="NMSettingIPConfig.html#nm-setting-ip-config-get-dhcp-send-hostname"/>
+ <keyword type="function" name="nm_setting_ip_config_get_never_default ()" link="NMSettingIPConfig.html#nm-setting-ip-config-get-never-default"/>
+ <keyword type="function" name="nm_setting_ip_config_get_may_fail ()" link="NMSettingIPConfig.html#nm-setting-ip-config-get-may-fail"/>
+ <keyword type="property" name="The &quot;addresses&quot; property" link="NMSettingIPConfig.html#NMSettingIPConfig--addresses"/>
+ <keyword type="property" name="The &quot;dhcp-hostname&quot; property" link="NMSettingIPConfig.html#NMSettingIPConfig--dhcp-hostname"/>
+ <keyword type="property" name="The &quot;dhcp-send-hostname&quot; property" link="NMSettingIPConfig.html#NMSettingIPConfig--dhcp-send-hostname"/>
+ <keyword type="property" name="The &quot;dns&quot; property" link="NMSettingIPConfig.html#NMSettingIPConfig--dns"/>
+ <keyword type="property" name="The &quot;dns-search&quot; property" link="NMSettingIPConfig.html#NMSettingIPConfig--dns-search"/>
+ <keyword type="property" name="The &quot;gateway&quot; property" link="NMSettingIPConfig.html#NMSettingIPConfig--gateway"/>
+ <keyword type="property" name="The &quot;ignore-auto-dns&quot; property" link="NMSettingIPConfig.html#NMSettingIPConfig--ignore-auto-dns"/>
+ <keyword type="property" name="The &quot;ignore-auto-routes&quot; property" link="NMSettingIPConfig.html#NMSettingIPConfig--ignore-auto-routes"/>
+ <keyword type="property" name="The &quot;may-fail&quot; property" link="NMSettingIPConfig.html#NMSettingIPConfig--may-fail"/>
+ <keyword type="property" name="The &quot;method&quot; property" link="NMSettingIPConfig.html#NMSettingIPConfig--method"/>
+ <keyword type="property" name="The &quot;never-default&quot; property" link="NMSettingIPConfig.html#NMSettingIPConfig--never-default"/>
+ <keyword type="property" name="The &quot;route-metric&quot; property" link="NMSettingIPConfig.html#NMSettingIPConfig--route-metric"/>
+ <keyword type="property" name="The &quot;routes&quot; property" link="NMSettingIPConfig.html#NMSettingIPConfig--routes"/>
+ <keyword type="macro" name="NM_SETTING_IP4_CONFIG_SETTING_NAME" link="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-SETTING-NAME:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID" link="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-DHCP-CLIENT-ID:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_IP4_CONFIG_METHOD_AUTO" link="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-METHOD-AUTO:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL" link="NMSettingIP4Config.html#NM-SETTING-IP4-CONFIG-METHOD-LINK-LOCAL:CAPS"/>
+ <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="struct" name="struct 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_dhcp_client_id ()" link="NMSettingIP4Config.html#nm-setting-ip4-config-get-dhcp-client-id"/>
+ <keyword type="property" name="The &quot;dhcp-client-id&quot; property" link="NMSettingIP4Config.html#NMSettingIP4Config--dhcp-client-id"/>
+ <keyword type="macro" name="NM_SETTING_IP6_CONFIG_SETTING_NAME" link="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-SETTING-NAME:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_IP6_CONFIG_IP6_PRIVACY" link="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-IP6-PRIVACY:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_IP6_CONFIG_METHOD_IGNORE" link="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD-IGNORE:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_IP6_CONFIG_METHOD_AUTO" link="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD-AUTO:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_IP6_CONFIG_METHOD_DHCP" link="NMSettingIP6Config.html#NM-SETTING-IP6-CONFIG-METHOD-DHCP:CAPS"/>
+ <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-enum"/>
+ <keyword type="struct" name="struct 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_ip6_privacy ()" link="NMSettingIP6Config.html#nm-setting-ip6-config-get-ip6-privacy"/>
+ <keyword type="property" name="The &quot;ip6-privacy&quot; property" link="NMSettingIP6Config.html#NMSettingIP6Config--ip6-privacy"/>
+ <keyword type="macro" name="NM_SETTING_OLPC_MESH_SETTING_NAME" link="NMSettingOlpcMesh.html#NM-SETTING-OLPC-MESH-SETTING-NAME:CAPS"/>
+ <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="struct" name="struct 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_PPP_SETTING_NAME" link="NMSettingPpp.html#NM-SETTING-PPP-SETTING-NAME:CAPS"/>
+ <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"/>
+ <keyword type="macro" name="NM_SETTING_PPP_REFUSE_CHAP" link="NMSettingPpp.html#NM-SETTING-PPP-REFUSE-CHAP:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_PPP_REFUSE_MSCHAP" link="NMSettingPpp.html#NM-SETTING-PPP-REFUSE-MSCHAP:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_PPP_REFUSE_MSCHAPV2" link="NMSettingPpp.html#NM-SETTING-PPP-REFUSE-MSCHAPV2:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_PPP_NOBSDCOMP" link="NMSettingPpp.html#NM-SETTING-PPP-NOBSDCOMP:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_PPP_NODEFLATE" link="NMSettingPpp.html#NM-SETTING-PPP-NODEFLATE:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_PPP_NO_VJ_COMP" link="NMSettingPpp.html#NM-SETTING-PPP-NO-VJ-COMP:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_PPP_REQUIRE_MPPE" link="NMSettingPpp.html#NM-SETTING-PPP-REQUIRE-MPPE:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_PPP_REQUIRE_MPPE_128" link="NMSettingPpp.html#NM-SETTING-PPP-REQUIRE-MPPE-128:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_PPP_MPPE_STATEFUL" link="NMSettingPpp.html#NM-SETTING-PPP-MPPE-STATEFUL:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_PPP_CRTSCTS" link="NMSettingPpp.html#NM-SETTING-PPP-CRTSCTS:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_PPP_BAUD" link="NMSettingPpp.html#NM-SETTING-PPP-BAUD:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_PPP_MRU" link="NMSettingPpp.html#NM-SETTING-PPP-MRU:CAPS"/>
+ <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="struct" name="struct 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="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="struct" name="struct 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_SERIAL_SETTING_NAME" link="NMSettingSerial.html#NM-SETTING-SERIAL-SETTING-NAME:CAPS"/>
+ <keyword type="enum" name="enum NMSettingSerialParity" link="NMSettingSerial.html#NMSettingSerialParity-enum"/>
+ <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="struct" name="struct 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_TEAM_SETTING_NAME" link="NMSettingTeam.html#NM-SETTING-TEAM-SETTING-NAME:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_TEAM_CONFIG" link="NMSettingTeam.html#NM-SETTING-TEAM-CONFIG:CAPS"/>
+ <keyword type="struct" name="struct 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"/>
+ <keyword type="function" name="nm_setting_team_get_config ()" link="NMSettingTeam.html#nm-setting-team-get-config"/>
+ <keyword type="property" name="The &quot;config&quot; property" link="NMSettingTeam.html#NMSettingTeam--config"/>
+ <keyword type="macro" name="NM_SETTING_TEAM_PORT_SETTING_NAME" link="NMSettingTeamPort.html#NM-SETTING-TEAM-PORT-SETTING-NAME:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_TEAM_PORT_CONFIG" link="NMSettingTeamPort.html#NM-SETTING-TEAM-PORT-CONFIG:CAPS"/>
+ <keyword type="struct" name="struct 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"/>
+ <keyword type="function" name="nm_setting_team_port_get_config ()" link="NMSettingTeamPort.html#nm-setting-team-port-get-config"/>
+ <keyword type="property" name="The &quot;config&quot; property" link="NMSettingTeamPort.html#NMSettingTeamPort--config"/>
+ <keyword type="macro" name="NM_SETTING_VLAN_SETTING_NAME" link="NMSettingVlan.html#NM-SETTING-VLAN-SETTING-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="struct" name="struct 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_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"/>
+ <keyword type="function" name="nm_setting_vlan_remove_priority_str_by_value ()" link="NMSettingVlan.html#nm-setting-vlan-remove-priority-str-by-value"/>
+ <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;parent&quot; property" link="NMSettingVlan.html#NMSettingVlan--parent"/>
+ <keyword type="macro" name="NM_SETTING_VPN_SETTING_NAME" link="NMSettingVpn.html#NM-SETTING-VPN-SETTING-NAME:CAPS"/>
+ <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_PERSISTENT" link="NMSettingVpn.html#NM-SETTING-VPN-PERSISTENT: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="struct" name="struct 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_persistent ()" link="NMSettingVpn.html#nm-setting-vpn-get-persistent"/>
+ <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;persistent&quot; property" link="NMSettingVpn.html#NMSettingVpn--persistent"/>
+ <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="macro" name="NM_SETTING_WIMAX_SETTING_NAME" link="NMSettingWimax.html#NM-SETTING-WIMAX-SETTING-NAME:CAPS"/>
+ <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="struct" name="struct 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_WIRED_SETTING_NAME" link="NMSettingWired.html#NM-SETTING-WIRED-SETTING-NAME:CAPS"/>
+ <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"/>
+ <keyword type="macro" name="NM_SETTING_WIRED_AUTO_NEGOTIATE" link="NMSettingWired.html#NM-SETTING-WIRED-AUTO-NEGOTIATE:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_WIRED_MAC_ADDRESS" link="NMSettingWired.html#NM-SETTING-WIRED-MAC-ADDRESS:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_WIRED_CLONED_MAC_ADDRESS" link="NMSettingWired.html#NM-SETTING-WIRED-CLONED-MAC-ADDRESS:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST" link="NMSettingWired.html#NM-SETTING-WIRED-MAC-ADDRESS-BLACKLIST:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_WIRED_MTU" link="NMSettingWired.html#NM-SETTING-WIRED-MTU:CAPS"/>
+ <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="struct" name="struct 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"/>
+ <keyword type="function" name="nm_setting_wired_get_mac_blacklist_item ()" link="NMSettingWired.html#nm-setting-wired-get-mac-blacklist-item"/>
+ <keyword type="function" name="nm_setting_wired_add_mac_blacklist_item ()" link="NMSettingWired.html#nm-setting-wired-add-mac-blacklist-item"/>
+ <keyword type="function" name="nm_setting_wired_remove_mac_blacklist_item ()" link="NMSettingWired.html#nm-setting-wired-remove-mac-blacklist-item"/>
+ <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"/>
+ <keyword type="function" name="nm_setting_wired_clear_mac_blacklist_items ()" link="NMSettingWired.html#nm-setting-wired-clear-mac-blacklist-items"/>
+ <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"/>
+ <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="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"/>
+ <keyword type="macro" name="NM_SETTING_WIRELESS_CHANNEL" link="NMSettingWireless.html#NM-SETTING-WIRELESS-CHANNEL:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_WIRELESS_BSSID" link="NMSettingWireless.html#NM-SETTING-WIRELESS-BSSID:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_WIRELESS_RATE" link="NMSettingWireless.html#NM-SETTING-WIRELESS-RATE:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_WIRELESS_TX_POWER" link="NMSettingWireless.html#NM-SETTING-WIRELESS-TX-POWER:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_WIRELESS_MAC_ADDRESS" link="NMSettingWireless.html#NM-SETTING-WIRELESS-MAC-ADDRESS:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS" link="NMSettingWireless.html#NM-SETTING-WIRELESS-CLONED-MAC-ADDRESS:CAPS"/>
+ <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_HIDDEN" link="NMSettingWireless.html#NM-SETTING-WIRELESS-HIDDEN: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"/>
+ <keyword type="macro" name="NM_SETTING_WIRELESS_MODE_INFRA" link="NMSettingWireless.html#NM-SETTING-WIRELESS-MODE-INFRA:CAPS"/>
+ <keyword type="struct" name="struct 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"/>
+ <keyword type="function" name="nm_setting_wireless_get_mac_blacklist_item ()" link="NMSettingWireless.html#nm-setting-wireless-get-mac-blacklist-item"/>
+ <keyword type="function" name="nm_setting_wireless_add_mac_blacklist_item ()" link="NMSettingWireless.html#nm-setting-wireless-add-mac-blacklist-item"/>
+ <keyword type="function" name="nm_setting_wireless_remove_mac_blacklist_item ()" link="NMSettingWireless.html#nm-setting-wireless-remove-mac-blacklist-item"/>
+ <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"/>
+ <keyword type="function" name="nm_setting_wireless_clear_mac_blacklist_items ()" link="NMSettingWireless.html#nm-setting-wireless-clear-mac-blacklist-items"/>
+ <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="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;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 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"/>
+ <keyword type="macro" name="NM_SETTING_WIRELESS_SECURITY_PROTO" link="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-PROTO:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_WIRELESS_SECURITY_PAIRWISE" link="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-PAIRWISE:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_WIRELESS_SECURITY_GROUP" link="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-GROUP:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME" link="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-LEAP-USERNAME:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_WIRELESS_SECURITY_WEP_KEY0" link="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-KEY0:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_WIRELESS_SECURITY_WEP_KEY1" link="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-KEY1:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_WIRELESS_SECURITY_WEP_KEY2" link="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-KEY2:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_WIRELESS_SECURITY_WEP_KEY3" link="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-KEY3:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS" link="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-KEY-FLAGS:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE" link="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-WEP-KEY-TYPE:CAPS"/>
+ <keyword type="macro" name="NM_SETTING_WIRELESS_SECURITY_PSK" link="NMSettingWirelessSecurity.html#NM-SETTING-WIRELESS-SECURITY-PSK:CAPS"/>
+ <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="struct" name="struct 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"/>
+ <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"/>
+ <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"/>
+ <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_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"/>
+ <keyword type="macro" name="NM_DEVICE_IP_INTERFACE" link="NMDevice.html#NM-DEVICE-IP-INTERFACE:CAPS"/>
+ <keyword type="macro" name="NM_DEVICE_DRIVER" link="NMDevice.html#NM-DEVICE-DRIVER:CAPS"/>
+ <keyword type="macro" name="NM_DEVICE_DRIVER_VERSION" link="NMDevice.html#NM-DEVICE-DRIVER-VERSION:CAPS"/>
+ <keyword type="macro" name="NM_DEVICE_FIRMWARE_VERSION" link="NMDevice.html#NM-DEVICE-FIRMWARE-VERSION:CAPS"/>
+ <keyword type="macro" name="NM_DEVICE_CAPABILITIES" link="NMDevice.html#NM-DEVICE-CAPABILITIES:CAPS"/>
+ <keyword type="macro" name="NM_DEVICE_MANAGED" link="NMDevice.html#NM-DEVICE-MANAGED:CAPS"/>
+ <keyword type="macro" name="NM_DEVICE_AUTOCONNECT" link="NMDevice.html#NM-DEVICE-AUTOCONNECT:CAPS"/>
+ <keyword type="macro" name="NM_DEVICE_FIRMWARE_MISSING" link="NMDevice.html#NM-DEVICE-FIRMWARE-MISSING:CAPS"/>
+ <keyword type="macro" name="NM_DEVICE_IP4_CONFIG" link="NMDevice.html#NM-DEVICE-IP4-CONFIG:CAPS"/>
+ <keyword type="macro" name="NM_DEVICE_DHCP4_CONFIG" link="NMDevice.html#NM-DEVICE-DHCP4-CONFIG:CAPS"/>
+ <keyword type="macro" name="NM_DEVICE_IP6_CONFIG" link="NMDevice.html#NM-DEVICE-IP6-CONFIG:CAPS"/>
+ <keyword type="macro" name="NM_DEVICE_DHCP6_CONFIG" link="NMDevice.html#NM-DEVICE-DHCP6-CONFIG:CAPS"/>
+ <keyword type="macro" name="NM_DEVICE_STATE" link="NMDevice.html#NM-DEVICE-STATE:CAPS"/>
+ <keyword type="macro" name="NM_DEVICE_STATE_REASON" link="NMDevice.html#NM-DEVICE-STATE-REASON:CAPS"/>
+ <keyword type="macro" name="NM_DEVICE_ACTIVE_CONNECTION" link="NMDevice.html#NM-DEVICE-ACTIVE-CONNECTION:CAPS"/>
+ <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="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="struct NMDevice" link="NMDevice.html#NMDevice-struct"/>
+ <keyword type="struct" name="NMDeviceClass" link="NMDevice.html#NMDeviceClass"/>
+ <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"/>
+ <keyword type="function" name="nm_device_get_hw_address ()" link="NMDevice.html#nm-device-get-hw-address"/>
+ <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"/>
+ <keyword type="function" name="nm_device_get_physical_port_id ()" link="NMDevice.html#nm-device-get-physical-port-id"/>
+ <keyword type="function" name="nm_device_get_mtu ()" link="NMDevice.html#nm-device-get-mtu"/>
+ <keyword type="function" name="nm_device_is_software ()" link="NMDevice.html#nm-device-is-software"/>
+ <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"/>
+ <keyword type="function" name="nm_device_disambiguate_names ()" link="NMDevice.html#nm-device-disambiguate-names"/>
+ <keyword type="function" name="nm_device_disconnect ()" link="NMDevice.html#nm-device-disconnect"/>
+ <keyword type="function" name="nm_device_disconnect_async ()" link="NMDevice.html#nm-device-disconnect-async"/>
+ <keyword type="function" name="nm_device_disconnect_finish ()" link="NMDevice.html#nm-device-disconnect-finish"/>
+ <keyword type="function" name="nm_device_delete ()" link="NMDevice.html#nm-device-delete"/>
+ <keyword type="function" name="nm_device_delete_async ()" link="NMDevice.html#nm-device-delete-async"/>
+ <keyword type="function" name="nm_device_delete_finish ()" link="NMDevice.html#nm-device-delete-finish"/>
+ <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"/>
+ <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="macro" name="NM_DEVICE_ADSL_CARRIER" link="NMDeviceAdsl.html#NM-DEVICE-ADSL-CARRIER:CAPS"/>
+ <keyword type="struct" name="struct NMDeviceAdsl" link="NMDeviceAdsl.html#NMDeviceAdsl-struct"/>
+ <keyword type="struct" name="NMDeviceAdslClass" link="NMDeviceAdsl.html#NMDeviceAdslClass"/>
+ <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="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="struct" name="struct NMDeviceBond" link="NMDeviceBond.html#NMDeviceBond-struct"/>
+ <keyword type="struct" name="NMDeviceBondClass" link="NMDeviceBond.html#NMDeviceBondClass"/>
+ <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"/>
+ <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="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="struct" name="struct NMDeviceBridge" link="NMDeviceBridge.html#NMDeviceBridge-struct"/>
+ <keyword type="struct" name="NMDeviceBridgeClass" link="NMDeviceBridge.html#NMDeviceBridgeClass"/>
+ <keyword type="function" name="nm_device_bridge_get_hw_address ()" link="NMDeviceBridge.html#nm-device-bridge-get-hw-address"/>
+ <keyword type="function" name="nm_device_bridge_get_carrier ()" link="NMDeviceBridge.html#nm-device-bridge-get-carrier"/>
+ <keyword type="function" name="nm_device_bridge_get_slaves ()" link="NMDeviceBridge.html#nm-device-bridge-get-slaves"/>
+ <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="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="struct" name="struct NMDeviceBt" link="NMDeviceBt.html#NMDeviceBt-struct"/>
+ <keyword type="struct" name="NMDeviceBtClass" link="NMDeviceBt.html#NMDeviceBtClass"/>
+ <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="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="struct" name="struct NMDeviceEthernet" link="NMDeviceEthernet.html#NMDeviceEthernet-struct"/>
+ <keyword type="struct" name="NMDeviceEthernetClass" link="NMDeviceEthernet.html#NMDeviceEthernetClass"/>
+ <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="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="struct NMDeviceGeneric" link="NMDeviceGeneric.html#NMDeviceGeneric-struct"/>
+ <keyword type="struct" name="NMDeviceGenericClass" link="NMDeviceGeneric.html#NMDeviceGenericClass"/>
+ <keyword type="function" name="nm_device_generic_get_hw_address ()" link="NMDeviceGeneric.html#nm-device-generic-get-hw-address"/>
+ <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="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="struct" name="struct NMDeviceInfiniband" link="NMDeviceInfiniband.html#NMDeviceInfiniband-struct"/>
+ <keyword type="struct" name="NMDeviceInfinibandClass" link="NMDeviceInfiniband.html#NMDeviceInfinibandClass"/>
+ <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="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="struct" name="struct 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="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="struct" name="struct NMDeviceOlpcMesh" link="NMDeviceOlpcMesh.html#NMDeviceOlpcMesh-struct"/>
+ <keyword type="struct" name="NMDeviceOlpcMeshClass" link="NMDeviceOlpcMesh.html#NMDeviceOlpcMeshClass"/>
+ <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_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="struct NMDeviceTeam" link="NMDeviceTeam.html#NMDeviceTeam-struct"/>
+ <keyword type="struct" name="NMDeviceTeamClass" link="NMDeviceTeam.html#NMDeviceTeamClass"/>
+ <keyword type="function" name="nm_device_team_get_hw_address ()" link="NMDeviceTeam.html#nm-device-team-get-hw-address"/>
+ <keyword type="function" name="nm_device_team_get_carrier ()" link="NMDeviceTeam.html#nm-device-team-get-carrier"/>
+ <keyword type="function" name="nm_device_team_get_slaves ()" link="NMDeviceTeam.html#nm-device-team-get-slaves"/>
+ <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="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_PARENT" link="NMDeviceVlan.html#NM-DEVICE-VLAN-PARENT:CAPS"/>
+ <keyword type="macro" name="NM_DEVICE_VLAN_VLAN_ID" link="NMDeviceVlan.html#NM-DEVICE-VLAN-VLAN-ID:CAPS"/>
+ <keyword type="struct" name="struct NMDeviceVlan" link="NMDeviceVlan.html#NMDeviceVlan-struct"/>
+ <keyword type="struct" name="NMDeviceVlanClass" link="NMDeviceVlan.html#NMDeviceVlanClass"/>
+ <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_parent ()" link="NMDeviceVlan.html#nm-device-vlan-get-parent"/>
+ <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;parent&quot; property" link="NMDeviceVlan.html#NMDeviceVlan--parent"/>
+ <keyword type="property" name="The &quot;vlan-id&quot; property" link="NMDeviceVlan.html#NMDeviceVlan--vlan-id"/>
+ <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="macro" name="NM_DEVICE_WIFI_ACCESS_POINTS" link="NMDeviceWifi.html#NM-DEVICE-WIFI-ACCESS-POINTS:CAPS"/>
+ <keyword type="struct" name="struct NMDeviceWifi" link="NMDeviceWifi.html#NMDeviceWifi-struct"/>
+ <keyword type="struct" name="NMDeviceWifiClass" link="NMDeviceWifi.html#NMDeviceWifiClass"/>
+ <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="nm_device_wifi_request_scan ()" link="NMDeviceWifi.html#nm-device-wifi-request-scan"/>
+ <keyword type="function" name="nm_device_wifi_request_scan_async ()" link="NMDeviceWifi.html#nm-device-wifi-request-scan-async"/>
+ <keyword type="function" name="nm_device_wifi_request_scan_finish ()" link="NMDeviceWifi.html#nm-device-wifi-request-scan-finish"/>
+ <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="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"/>
+ <keyword type="macro" name="NM_DEVICE_WIMAX_RSSI" link="NMDeviceWimax.html#NM-DEVICE-WIMAX-RSSI:CAPS"/>
+ <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="macro" name="NM_DEVICE_WIMAX_NSPS" link="NMDeviceWimax.html#NM-DEVICE-WIMAX-NSPS:CAPS"/>
+ <keyword type="struct" name="struct NMDeviceWimax" link="NMDeviceWimax.html#NMDeviceWimax-struct"/>
+ <keyword type="struct" name="NMDeviceWimaxClass" link="NMDeviceWimax.html#NMDeviceWimaxClass"/>
+ <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="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_PATH" link="NMActiveConnection.html#NM-ACTIVE-CONNECTION-SPECIFIC-OBJECT-PATH: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="struct" name="struct NMActiveConnection" link="NMActiveConnection.html#NMActiveConnection-struct"/>
+ <keyword type="struct" name="NMActiveConnectionClass" link="NMActiveConnection.html#NMActiveConnectionClass"/>
+ <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"/>
+ <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"/>
+ <keyword type="function" name="nm_active_connection_get_specific_object_path ()" link="NMActiveConnection.html#nm-active-connection-get-specific-object-path"/>
+ <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"/>
+ <keyword type="function" name="nm_active_connection_get_dhcp4_config ()" link="NMActiveConnection.html#nm-active-connection-get-dhcp4-config"/>
+ <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"/>
+ <keyword type="function" name="nm_active_connection_get_dhcp6_config ()" link="NMActiveConnection.html#nm-active-connection-get-dhcp6-config"/>
+ <keyword type="function" name="nm_active_connection_get_vpn ()" link="NMActiveConnection.html#nm-active-connection-get-vpn"/>
+ <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-path&quot; property" link="NMActiveConnection.html#NMActiveConnection--specific-object-path"/>
+ <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="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="struct" name="struct NMVpnConnection" link="NMVpnConnection.html#NMVpnConnection-struct"/>
+ <keyword type="struct" name="NMVpnConnectionClass" link="NMVpnConnection.html#NMVpnConnectionClass"/>
+ <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_REMOTE_CONNECTION_DBUS_CONNECTION" link="NMRemoteConnection.html#NM-REMOTE-CONNECTION-DBUS-CONNECTION:CAPS"/>
+ <keyword type="macro" name="NM_REMOTE_CONNECTION_PATH" link="NMRemoteConnection.html#NM-REMOTE-CONNECTION-PATH:CAPS"/>
+ <keyword type="macro" name="NM_REMOTE_CONNECTION_UNSAVED" link="NMRemoteConnection.html#NM-REMOTE-CONNECTION-UNSAVED:CAPS"/>
+ <keyword type="macro" name="NM_REMOTE_CONNECTION_VISIBLE" link="NMRemoteConnection.html#NM-REMOTE-CONNECTION-VISIBLE:CAPS"/>
+ <keyword type="struct" name="struct NMRemoteConnection" link="NMRemoteConnection.html#NMRemoteConnection-struct"/>
+ <keyword type="struct" name="NMRemoteConnectionClass" link="NMRemoteConnection.html#NMRemoteConnectionClass"/>
+ <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_async ()" link="NMRemoteConnection.html#nm-remote-connection-commit-changes-async"/>
+ <keyword type="function" name="nm_remote_connection_commit_changes_finish ()" link="NMRemoteConnection.html#nm-remote-connection-commit-changes-finish"/>
+ <keyword type="function" name="nm_remote_connection_save ()" link="NMRemoteConnection.html#nm-remote-connection-save"/>
+ <keyword type="function" name="nm_remote_connection_save_async ()" link="NMRemoteConnection.html#nm-remote-connection-save-async"/>
+ <keyword type="function" name="nm_remote_connection_save_finish ()" link="NMRemoteConnection.html#nm-remote-connection-save-finish"/>
+ <keyword type="function" name="nm_remote_connection_delete ()" link="NMRemoteConnection.html#nm-remote-connection-delete"/>
+ <keyword type="function" name="nm_remote_connection_delete_async ()" link="NMRemoteConnection.html#nm-remote-connection-delete-async"/>
+ <keyword type="function" name="nm_remote_connection_delete_finish ()" link="NMRemoteConnection.html#nm-remote-connection-delete-finish"/>
+ <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_secrets_async ()" link="NMRemoteConnection.html#nm-remote-connection-get-secrets-async"/>
+ <keyword type="function" name="nm_remote_connection_get_secrets_finish ()" link="NMRemoteConnection.html#nm-remote-connection-get-secrets-finish"/>
+ <keyword type="function" name="nm_remote_connection_get_unsaved ()" link="NMRemoteConnection.html#nm-remote-connection-get-unsaved"/>
+ <keyword type="function" name="nm_remote_connection_get_visible ()" link="NMRemoteConnection.html#nm-remote-connection-get-visible"/>
+ <keyword type="property" name="The &quot;unsaved&quot; property" link="NMRemoteConnection.html#NMRemoteConnection--unsaved"/>
+ <keyword type="property" name="The &quot;visible&quot; property" link="NMRemoteConnection.html#NMRemoteConnection--visible"/>
+ <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"/>
+ <keyword type="macro" name="NM_ACCESS_POINT_SSID" link="NMAccessPoint.html#NM-ACCESS-POINT-SSID:CAPS"/>
+ <keyword type="macro" name="NM_ACCESS_POINT_BSSID" link="NMAccessPoint.html#NM-ACCESS-POINT-BSSID:CAPS"/>
+ <keyword type="macro" name="NM_ACCESS_POINT_FREQUENCY" link="NMAccessPoint.html#NM-ACCESS-POINT-FREQUENCY:CAPS"/>
+ <keyword type="macro" name="NM_ACCESS_POINT_MODE" link="NMAccessPoint.html#NM-ACCESS-POINT-MODE:CAPS"/>
+ <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="struct" name="struct NMAccessPoint" link="NMAccessPoint.html#NMAccessPoint-struct"/>
+ <keyword type="struct" name="NMAccessPointClass" link="NMAccessPoint.html#NMAccessPointClass"/>
+ <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="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="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-enum"/>
+ <keyword type="struct" name="struct NMWimaxNsp" link="NMWimaxNsp.html#NMWimaxNsp-struct"/>
+ <keyword type="struct" name="NMWimaxNspClass" link="NMWimaxNsp.html#NMWimaxNspClass"/>
+ <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="struct" name="struct NMIPConfig" link="NMIPConfig.html#NMIPConfig-struct"/>
+ <keyword type="struct" name="NMIPConfigClass" link="NMIPConfig.html#NMIPConfigClass"/>
+ <keyword type="macro" name="NM_IP_CONFIG_FAMILY" link="NMIPConfig.html#NM-IP-CONFIG-FAMILY:CAPS"/>
+ <keyword type="macro" name="NM_IP_CONFIG_GATEWAY" link="NMIPConfig.html#NM-IP-CONFIG-GATEWAY:CAPS"/>
+ <keyword type="macro" name="NM_IP_CONFIG_ADDRESSES" link="NMIPConfig.html#NM-IP-CONFIG-ADDRESSES:CAPS"/>
+ <keyword type="macro" name="NM_IP_CONFIG_ROUTES" link="NMIPConfig.html#NM-IP-CONFIG-ROUTES:CAPS"/>
+ <keyword type="macro" name="NM_IP_CONFIG_NAMESERVERS" link="NMIPConfig.html#NM-IP-CONFIG-NAMESERVERS:CAPS"/>
+ <keyword type="macro" name="NM_IP_CONFIG_DOMAINS" link="NMIPConfig.html#NM-IP-CONFIG-DOMAINS:CAPS"/>
+ <keyword type="macro" name="NM_IP_CONFIG_SEARCHES" link="NMIPConfig.html#NM-IP-CONFIG-SEARCHES:CAPS"/>
+ <keyword type="macro" name="NM_IP_CONFIG_WINS_SERVERS" link="NMIPConfig.html#NM-IP-CONFIG-WINS-SERVERS:CAPS"/>
+ <keyword type="function" name="nm_ip_config_get_family ()" link="NMIPConfig.html#nm-ip-config-get-family"/>
+ <keyword type="function" name="nm_ip_config_get_gateway ()" link="NMIPConfig.html#nm-ip-config-get-gateway"/>
+ <keyword type="function" name="nm_ip_config_get_addresses ()" link="NMIPConfig.html#nm-ip-config-get-addresses"/>
+ <keyword type="function" name="nm_ip_config_get_routes ()" link="NMIPConfig.html#nm-ip-config-get-routes"/>
+ <keyword type="function" name="nm_ip_config_get_nameservers ()" link="NMIPConfig.html#nm-ip-config-get-nameservers"/>
+ <keyword type="function" name="nm_ip_config_get_domains ()" link="NMIPConfig.html#nm-ip-config-get-domains"/>
+ <keyword type="function" name="nm_ip_config_get_searches ()" link="NMIPConfig.html#nm-ip-config-get-searches"/>
+ <keyword type="function" name="nm_ip_config_get_wins_servers ()" link="NMIPConfig.html#nm-ip-config-get-wins-servers"/>
+ <keyword type="property" name="The &quot;addresses&quot; property" link="NMIPConfig.html#NMIPConfig--addresses"/>
+ <keyword type="property" name="The &quot;domains&quot; property" link="NMIPConfig.html#NMIPConfig--domains"/>
+ <keyword type="property" name="The &quot;family&quot; property" link="NMIPConfig.html#NMIPConfig--family"/>
+ <keyword type="property" name="The &quot;gateway&quot; property" link="NMIPConfig.html#NMIPConfig--gateway"/>
+ <keyword type="property" name="The &quot;nameservers&quot; property" link="NMIPConfig.html#NMIPConfig--nameservers"/>
+ <keyword type="property" name="The &quot;routes&quot; property" link="NMIPConfig.html#NMIPConfig--routes"/>
+ <keyword type="property" name="The &quot;searches&quot; property" link="NMIPConfig.html#NMIPConfig--searches"/>
+ <keyword type="property" name="The &quot;wins-servers&quot; property" link="NMIPConfig.html#NMIPConfig--wins-servers"/>
+ <keyword type="struct" name="struct NMDhcpConfig" link="NMDhcpConfig.html#NMDhcpConfig-struct"/>
+ <keyword type="struct" name="NMDhcpConfigClass" link="NMDhcpConfig.html#NMDhcpConfigClass"/>
+ <keyword type="macro" name="NM_DHCP_CONFIG_FAMILY" link="NMDhcpConfig.html#NM-DHCP-CONFIG-FAMILY:CAPS"/>
+ <keyword type="macro" name="NM_DHCP_CONFIG_OPTIONS" link="NMDhcpConfig.html#NM-DHCP-CONFIG-OPTIONS:CAPS"/>
+ <keyword type="function" name="nm_dhcp_config_get_family ()" link="NMDhcpConfig.html#nm-dhcp-config-get-family"/>
+ <keyword type="function" name="nm_dhcp_config_get_options ()" link="NMDhcpConfig.html#nm-dhcp-config-get-options"/>
+ <keyword type="function" name="nm_dhcp_config_get_one_option ()" link="NMDhcpConfig.html#nm-dhcp-config-get-one-option"/>
+ <keyword type="property" name="The &quot;family&quot; property" link="NMDhcpConfig.html#NMDhcpConfig--family"/>
+ <keyword type="property" name="The &quot;options&quot; property" link="NMDhcpConfig.html#NMDhcpConfig--options"/>
+ <keyword type="function" name="nm_utils_is_empty_ssid ()" link="libnm-nm-utils.html#nm-utils-is-empty-ssid"/>
+ <keyword type="function" name="nm_utils_escape_ssid ()" link="libnm-nm-utils.html#nm-utils-escape-ssid"/>
+ <keyword type="function" name="nm_utils_same_ssid ()" link="libnm-nm-utils.html#nm-utils-same-ssid"/>
+ <keyword type="function" name="nm_utils_ssid_to_utf8 ()" link="libnm-nm-utils.html#nm-utils-ssid-to-utf8"/>
+ <keyword type="enum" name="enum NMUtilsSecurityType" link="libnm-nm-utils.html#NMUtilsSecurityType-enum"/>
+ <keyword type="function" name="nm_utils_security_valid ()" link="libnm-nm-utils.html#nm-utils-security-valid"/>
+ <keyword type="function" name="nm_utils_ap_mode_security_valid ()" link="libnm-nm-utils.html#nm-utils-ap-mode-security-valid"/>
+ <keyword type="function" name="nm_utils_wep_key_valid ()" link="libnm-nm-utils.html#nm-utils-wep-key-valid"/>
+ <keyword type="function" name="nm_utils_wpa_psk_valid ()" link="libnm-nm-utils.html#nm-utils-wpa-psk-valid"/>
+ <keyword type="function" name="nm_utils_ip4_dns_to_variant ()" link="libnm-nm-utils.html#nm-utils-ip4-dns-to-variant"/>
+ <keyword type="function" name="nm_utils_ip4_dns_from_variant ()" link="libnm-nm-utils.html#nm-utils-ip4-dns-from-variant"/>
+ <keyword type="function" name="nm_utils_ip4_addresses_to_variant ()" link="libnm-nm-utils.html#nm-utils-ip4-addresses-to-variant"/>
+ <keyword type="function" name="nm_utils_ip4_addresses_from_variant ()" link="libnm-nm-utils.html#nm-utils-ip4-addresses-from-variant"/>
+ <keyword type="function" name="nm_utils_ip4_routes_to_variant ()" link="libnm-nm-utils.html#nm-utils-ip4-routes-to-variant"/>
+ <keyword type="function" name="nm_utils_ip4_routes_from_variant ()" link="libnm-nm-utils.html#nm-utils-ip4-routes-from-variant"/>
+ <keyword type="function" name="nm_utils_ip4_netmask_to_prefix ()" link="libnm-nm-utils.html#nm-utils-ip4-netmask-to-prefix"/>
+ <keyword type="function" name="nm_utils_ip4_prefix_to_netmask ()" link="libnm-nm-utils.html#nm-utils-ip4-prefix-to-netmask"/>
+ <keyword type="function" name="nm_utils_ip4_get_default_prefix ()" link="libnm-nm-utils.html#nm-utils-ip4-get-default-prefix"/>
+ <keyword type="function" name="nm_utils_ip6_dns_to_variant ()" link="libnm-nm-utils.html#nm-utils-ip6-dns-to-variant"/>
+ <keyword type="function" name="nm_utils_ip6_dns_from_variant ()" link="libnm-nm-utils.html#nm-utils-ip6-dns-from-variant"/>
+ <keyword type="function" name="nm_utils_ip6_addresses_to_variant ()" link="libnm-nm-utils.html#nm-utils-ip6-addresses-to-variant"/>
+ <keyword type="function" name="nm_utils_ip6_addresses_from_variant ()" link="libnm-nm-utils.html#nm-utils-ip6-addresses-from-variant"/>
+ <keyword type="function" name="nm_utils_ip6_routes_to_variant ()" link="libnm-nm-utils.html#nm-utils-ip6-routes-to-variant"/>
+ <keyword type="function" name="nm_utils_ip6_routes_from_variant ()" link="libnm-nm-utils.html#nm-utils-ip6-routes-from-variant"/>
+ <keyword type="function" name="nm_utils_ip_addresses_to_variant ()" link="libnm-nm-utils.html#nm-utils-ip-addresses-to-variant"/>
+ <keyword type="function" name="nm_utils_ip_addresses_from_variant ()" link="libnm-nm-utils.html#nm-utils-ip-addresses-from-variant"/>
+ <keyword type="function" name="nm_utils_ip_routes_to_variant ()" link="libnm-nm-utils.html#nm-utils-ip-routes-to-variant"/>
+ <keyword type="function" name="nm_utils_ip_routes_from_variant ()" link="libnm-nm-utils.html#nm-utils-ip-routes-from-variant"/>
+ <keyword type="function" name="nm_utils_uuid_generate ()" link="libnm-nm-utils.html#nm-utils-uuid-generate"/>
+ <keyword type="function" name="nm_utils_file_is_certificate ()" link="libnm-nm-utils.html#nm-utils-file-is-certificate"/>
+ <keyword type="function" name="nm_utils_file_is_private_key ()" link="libnm-nm-utils.html#nm-utils-file-is-private-key"/>
+ <keyword type="function" name="nm_utils_file_is_pkcs12 ()" link="libnm-nm-utils.html#nm-utils-file-is-pkcs12"/>
+ <keyword type="function" name="NMUtilsFileSearchInPathsPredicate ()" link="libnm-nm-utils.html#NMUtilsFileSearchInPathsPredicate"/>
+ <keyword type="function" name="nm_utils_file_search_in_paths ()" link="libnm-nm-utils.html#nm-utils-file-search-in-paths"/>
+ <keyword type="function" name="nm_utils_wifi_freq_to_channel ()" link="libnm-nm-utils.html#nm-utils-wifi-freq-to-channel"/>
+ <keyword type="function" name="nm_utils_wifi_channel_to_freq ()" link="libnm-nm-utils.html#nm-utils-wifi-channel-to-freq"/>
+ <keyword type="function" name="nm_utils_wifi_find_next_channel ()" link="libnm-nm-utils.html#nm-utils-wifi-find-next-channel"/>
+ <keyword type="function" name="nm_utils_wifi_is_channel_valid ()" link="libnm-nm-utils.html#nm-utils-wifi-is-channel-valid"/>
+ <keyword type="function" name="nm_utils_wifi_strength_bars ()" link="libnm-nm-utils.html#nm-utils-wifi-strength-bars"/>
+ <keyword type="macro" name="NM_UTILS_HWADDR_LEN_MAX" link="libnm-nm-utils.html#NM-UTILS-HWADDR-LEN-MAX:CAPS"/>
+ <keyword type="function" name="nm_utils_hwaddr_len ()" link="libnm-nm-utils.html#nm-utils-hwaddr-len"/>
+ <keyword type="function" name="nm_utils_hwaddr_ntoa ()" link="libnm-nm-utils.html#nm-utils-hwaddr-ntoa"/>
+ <keyword type="function" name="nm_utils_hwaddr_atoba ()" link="libnm-nm-utils.html#nm-utils-hwaddr-atoba"/>
+ <keyword type="function" name="nm_utils_hwaddr_aton ()" link="libnm-nm-utils.html#nm-utils-hwaddr-aton"/>
+ <keyword type="function" name="nm_utils_hwaddr_valid ()" link="libnm-nm-utils.html#nm-utils-hwaddr-valid"/>
+ <keyword type="function" name="nm_utils_hwaddr_canonical ()" link="libnm-nm-utils.html#nm-utils-hwaddr-canonical"/>
+ <keyword type="function" name="nm_utils_hwaddr_matches ()" link="libnm-nm-utils.html#nm-utils-hwaddr-matches"/>
+ <keyword type="function" name="nm_utils_bin2hexstr ()" link="libnm-nm-utils.html#nm-utils-bin2hexstr"/>
+ <keyword type="function" name="nm_utils_hexstr2bin ()" link="libnm-nm-utils.html#nm-utils-hexstr2bin"/>
+ <keyword type="function" name="nm_utils_iface_valid_name ()" link="libnm-nm-utils.html#nm-utils-iface-valid-name"/>
+ <keyword type="function" name="nm_utils_is_uuid ()" link="libnm-nm-utils.html#nm-utils-is-uuid"/>
+ <keyword type="macro" name="NM_UTILS_INET_ADDRSTRLEN" link="libnm-nm-utils.html#NM-UTILS-INET-ADDRSTRLEN:CAPS"/>
+ <keyword type="function" name="nm_utils_inet4_ntop ()" link="libnm-nm-utils.html#nm-utils-inet4-ntop"/>
+ <keyword type="function" name="nm_utils_inet6_ntop ()" link="libnm-nm-utils.html#nm-utils-inet6-ntop"/>
+ <keyword type="function" name="nm_utils_ipaddr_valid ()" link="libnm-nm-utils.html#nm-utils-ipaddr-valid"/>
+ <keyword type="function" name="nm_utils_check_virtual_device_compatibility ()" link="libnm-nm-utils.html#nm-utils-check-virtual-device-compatibility"/>
+ <keyword type="macro" name="NM_MAJOR_VERSION" link="libnm-nm-version.html#NM-MAJOR-VERSION:CAPS"/>
+ <keyword type="macro" name="NM_MINOR_VERSION" link="libnm-nm-version.html#NM-MINOR-VERSION:CAPS"/>
+ <keyword type="macro" name="NM_MICRO_VERSION" link="libnm-nm-version.html#NM-MICRO-VERSION:CAPS"/>
+ <keyword type="macro" name="NM_CHECK_VERSION()" link="libnm-nm-version.html#NM-CHECK-VERSION:CAPS"/>
+ <keyword type="macro" name="NM_ENCODE_VERSION()" link="libnm-nm-version.html#NM-ENCODE-VERSION:CAPS"/>
+ <keyword type="macro" name="NM_VERSION_0_9_8" link="libnm-nm-version.html#NM-VERSION-0-9-8:CAPS"/>
+ <keyword type="macro" name="NM_VERSION_0_9_10" link="libnm-nm-version.html#NM-VERSION-0-9-10:CAPS"/>
+ <keyword type="macro" name="NM_VERSION_1_0" link="libnm-nm-version.html#NM-VERSION-1-0:CAPS"/>
+ <keyword type="macro" name="NM_VERSION_CUR_STABLE" link="libnm-nm-version.html#NM-VERSION-CUR-STABLE:CAPS"/>
+ <keyword type="macro" name="NM_VERSION_NEXT_STABLE" link="libnm-nm-version.html#NM-VERSION-NEXT-STABLE:CAPS"/>
+ <keyword type="macro" name="NM_VERSION_MIN_REQUIRED" link="libnm-nm-version.html#NM-VERSION-MIN-REQUIRED:CAPS"/>
+ <keyword type="macro" name="NM_VERSION_MAX_ALLOWED" link="libnm-nm-version.html#NM-VERSION-MAX-ALLOWED:CAPS"/>
+ <keyword type="macro" name="NM_DEPRECATED_IN_0_9_10" link="libnm-nm-version.html#NM-DEPRECATED-IN-0-9-10:CAPS"/>
+ <keyword type="macro" name="NM_DEPRECATED_IN_0_9_10_FOR()" link="libnm-nm-version.html#NM-DEPRECATED-IN-0-9-10-FOR:CAPS"/>
+ <keyword type="macro" name="NM_DEPRECATED_IN_1_0" link="libnm-nm-version.html#NM-DEPRECATED-IN-1-0:CAPS"/>
+ <keyword type="macro" name="NM_DEPRECATED_IN_1_0_FOR()" link="libnm-nm-version.html#NM-DEPRECATED-IN-1-0-FOR:CAPS"/>
+ <keyword type="macro" name="NM_AVAILABLE_IN_0_9_10" link="libnm-nm-version.html#NM-AVAILABLE-IN-0-9-10:CAPS"/>
+ <keyword type="macro" name="NM_AVAILABLE_IN_1_0" link="libnm-nm-version.html#NM-AVAILABLE-IN-1-0:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_PATH_VPN" link="libnm-nm-vpn-dbus-interface.html#NM-DBUS-PATH-VPN:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_VPN" link="libnm-nm-vpn-dbus-interface.html#NM-DBUS-INTERFACE-VPN:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_PATH_VPN_CONNECTION" link="libnm-nm-vpn-dbus-interface.html#NM-DBUS-PATH-VPN-CONNECTION:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INTERFACE_VPN_CONNECTION" link="libnm-nm-vpn-dbus-interface.html#NM-DBUS-INTERFACE-VPN-CONNECTION:CAPS"/>
+ <keyword type="macro" name="NM_VPN_DBUS_PLUGIN_PATH" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-DBUS-PLUGIN-PATH:CAPS"/>
+ <keyword type="macro" name="NM_VPN_DBUS_PLUGIN_INTERFACE" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-DBUS-PLUGIN-INTERFACE:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_NO_ACTIVE_VPN_CONNECTION" link="libnm-nm-vpn-dbus-interface.html#NM-DBUS-NO-ACTIVE-VPN-CONNECTION:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_NO_VPN_CONNECTIONS" link="libnm-nm-vpn-dbus-interface.html#NM-DBUS-NO-VPN-CONNECTIONS:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_INVALID_VPN_CONNECTION" link="libnm-nm-vpn-dbus-interface.html#NM-DBUS-INVALID-VPN-CONNECTION:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_VPN_ERROR_PREFIX" link="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-ERROR-PREFIX:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_VPN_STARTING_IN_PROGRESS" link="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-STARTING-IN-PROGRESS:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_VPN_ALREADY_STARTED" link="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-ALREADY-STARTED:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_VPN_STOPPING_IN_PROGRESS" link="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-STOPPING-IN-PROGRESS:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_VPN_ALREADY_STOPPED" link="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-ALREADY-STOPPED:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_VPN_WRONG_STATE" link="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-WRONG-STATE:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_VPN_BAD_ARGUMENTS" link="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-BAD-ARGUMENTS:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_VPN_INTERACTIVE_NOT_SUPPORTED" link="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-INTERACTIVE-NOT-SUPPORTED:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_VPN_SIGNAL_LOGIN_BANNER" link="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-SIGNAL-LOGIN-BANNER:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_VPN_SIGNAL_LOGIN_FAILED" link="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-SIGNAL-LOGIN-FAILED:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_VPN_SIGNAL_LAUNCH_FAILED" link="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-SIGNAL-LAUNCH-FAILED:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_VPN_SIGNAL_CONNECT_FAILED" link="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-SIGNAL-CONNECT-FAILED:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_VPN_SIGNAL_VPN_CONFIG_BAD" link="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-SIGNAL-VPN-CONFIG-BAD:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_VPN_SIGNAL_IP_CONFIG_BAD" link="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-SIGNAL-IP-CONFIG-BAD:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_VPN_SIGNAL_STATE_CHANGE" link="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-SIGNAL-STATE-CHANGE:CAPS"/>
+ <keyword type="macro" name="NM_DBUS_VPN_SIGNAL_IP4_CONFIG" link="libnm-nm-vpn-dbus-interface.html#NM-DBUS-VPN-SIGNAL-IP4-CONFIG:CAPS"/>
+ <keyword type="enum" name="enum NMVpnServiceState" link="libnm-nm-vpn-dbus-interface.html#NMVpnServiceState-enum"/>
+ <keyword type="enum" name="enum NMVpnConnectionState" link="libnm-nm-vpn-dbus-interface.html#NMVpnConnectionState-enum"/>
+ <keyword type="enum" name="enum NMVpnConnectionStateReason" link="libnm-nm-vpn-dbus-interface.html#NMVpnConnectionStateReason-enum"/>
+ <keyword type="enum" name="enum NMVpnPluginFailure" link="libnm-nm-vpn-dbus-interface.html#NMVpnPluginFailure-enum"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_CONFIG_TUNDEV" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-CONFIG-TUNDEV:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_CONFIG_BANNER" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-CONFIG-BANNER:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_CONFIG_EXT_GATEWAY" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-CONFIG-EXT-GATEWAY:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_CONFIG_MTU" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-CONFIG-MTU:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_CONFIG_HAS_IP4" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-CONFIG-HAS-IP4:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_CONFIG_HAS_IP6" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-CONFIG-HAS-IP6:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_CAN_PERSIST" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-CAN-PERSIST:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP4_CONFIG_INT_GATEWAY" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-INT-GATEWAY:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP4_CONFIG_ADDRESS" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-ADDRESS:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP4_CONFIG_PTP" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-PTP:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP4_CONFIG_PREFIX" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-PREFIX:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP4_CONFIG_DNS" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-DNS:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP4_CONFIG_NBNS" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-NBNS:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP4_CONFIG_MSS" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-MSS:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP4_CONFIG_DOMAIN" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-DOMAIN:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP4_CONFIG_DOMAINS" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-DOMAINS:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP4_CONFIG_ROUTES" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-ROUTES:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP4_CONFIG_NEVER_DEFAULT" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-NEVER-DEFAULT:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP4_CONFIG_GATEWAY" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-GATEWAY:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP4_CONFIG_BANNER" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-BANNER:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-EXT-GATEWAY:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP4_CONFIG_MTU" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-MTU:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP4_CONFIG_TUNDEV" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP4-CONFIG-TUNDEV:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP6_CONFIG_INT_GATEWAY" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-INT-GATEWAY:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP6_CONFIG_ADDRESS" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-ADDRESS:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP6_CONFIG_PTP" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-PTP:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP6_CONFIG_PREFIX" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-PREFIX:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP6_CONFIG_DNS" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-DNS:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP6_CONFIG_MSS" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-MSS:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP6_CONFIG_DOMAIN" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-DOMAIN:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP6_CONFIG_DOMAINS" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-DOMAINS:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP6_CONFIG_ROUTES" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-ROUTES:CAPS"/>
+ <keyword type="macro" name="NM_VPN_PLUGIN_IP6_CONFIG_NEVER_DEFAULT" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-IP6-CONFIG-NEVER-DEFAULT:CAPS"/>
+ <keyword type="function" name="NMVpnEditorPluginFactory ()" link="libnm-NMVpnEditorPlugin.html#NMVpnEditorPluginFactory"/>
+ <keyword type="function" name="nm_vpn_editor_plugin_factory ()" link="libnm-NMVpnEditorPlugin.html#nm-vpn-editor-plugin-factory"/>
+ <keyword type="enum" name="enum NMVpnEditorPluginCapability" link="libnm-NMVpnEditorPlugin.html#NMVpnEditorPluginCapability-enum"/>
+ <keyword type="macro" name="NM_VPN_EDITOR_PLUGIN_NAME" link="libnm-NMVpnEditorPlugin.html#NM-VPN-EDITOR-PLUGIN-NAME:CAPS"/>
+ <keyword type="macro" name="NM_VPN_EDITOR_PLUGIN_DESCRIPTION" link="libnm-NMVpnEditorPlugin.html#NM-VPN-EDITOR-PLUGIN-DESCRIPTION:CAPS"/>
+ <keyword type="macro" name="NM_VPN_EDITOR_PLUGIN_SERVICE" link="libnm-NMVpnEditorPlugin.html#NM-VPN-EDITOR-PLUGIN-SERVICE:CAPS"/>
+ <keyword type="struct" name="NMVpnEditorPluginInterface" link="libnm-NMVpnEditorPlugin.html#NMVpnEditorPluginInterface"/>
+ <keyword type="function" name="nm_vpn_editor_plugin_get_editor ()" link="libnm-NMVpnEditorPlugin.html#nm-vpn-editor-plugin-get-editor"/>
+ <keyword type="function" name="nm_vpn_editor_plugin_get_capabilities ()" link="libnm-NMVpnEditorPlugin.html#nm-vpn-editor-plugin-get-capabilities"/>
+ <keyword type="function" name="nm_vpn_editor_plugin_import ()" link="libnm-NMVpnEditorPlugin.html#nm-vpn-editor-plugin-import"/>
+ <keyword type="function" name="nm_vpn_editor_plugin_export ()" link="libnm-NMVpnEditorPlugin.html#nm-vpn-editor-plugin-export"/>
+ <keyword type="function" name="nm_vpn_editor_plugin_get_suggested_filename ()" link="libnm-NMVpnEditorPlugin.html#nm-vpn-editor-plugin-get-suggested-filename"/>
+ <keyword type="struct" name="NMVpnEditorInterface" link="libnm-NMVpnEditorPlugin.html#NMVpnEditorInterface"/>
+ <keyword type="function" name="nm_vpn_editor_get_widget ()" link="libnm-NMVpnEditorPlugin.html#nm-vpn-editor-get-widget"/>
+ <keyword type="function" name="nm_vpn_editor_update_connection ()" link="libnm-NMVpnEditorPlugin.html#nm-vpn-editor-update-connection"/>
+ <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_FAILED" link="NMClient.html#NM-CLIENT-ERROR-FAILED: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_CLIENT_ERROR_OBJECT_CREATION_FAILED" link="NMClient.html#NM-CLIENT-ERROR-OBJECT-CREATION-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_AGENT_MANAGER_ERROR_FAILED" link="libnm-nm-errors.html#NM-AGENT-MANAGER-ERROR-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_AGENT_MANAGER_ERROR_PERMISSION_DENIED" link="libnm-nm-errors.html#NM-AGENT-MANAGER-ERROR-PERMISSION-DENIED:CAPS"/>
+ <keyword type="constant" name="NM_AGENT_MANAGER_ERROR_INVALID_IDENTIFIER" link="libnm-nm-errors.html#NM-AGENT-MANAGER-ERROR-INVALID-IDENTIFIER:CAPS"/>
+ <keyword type="constant" name="NM_AGENT_MANAGER_ERROR_NOT_REGISTERED" link="libnm-nm-errors.html#NM-AGENT-MANAGER-ERROR-NOT-REGISTERED:CAPS"/>
+ <keyword type="constant" name="NM_AGENT_MANAGER_ERROR_NO_SECRETS" link="libnm-nm-errors.html#NM-AGENT-MANAGER-ERROR-NO-SECRETS:CAPS"/>
+ <keyword type="constant" name="NM_AGENT_MANAGER_ERROR_USER_CANCELED" link="libnm-nm-errors.html#NM-AGENT-MANAGER-ERROR-USER-CANCELED:CAPS"/>
+ <keyword type="constant" name="NM_CONNECTION_ERROR_FAILED" link="libnm-nm-errors.html#NM-CONNECTION-ERROR-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_CONNECTION_ERROR_SETTING_NOT_FOUND" link="libnm-nm-errors.html#NM-CONNECTION-ERROR-SETTING-NOT-FOUND:CAPS"/>
+ <keyword type="constant" name="NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND" link="libnm-nm-errors.html#NM-CONNECTION-ERROR-PROPERTY-NOT-FOUND:CAPS"/>
+ <keyword type="constant" name="NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET" link="libnm-nm-errors.html#NM-CONNECTION-ERROR-PROPERTY-NOT-SECRET:CAPS"/>
+ <keyword type="constant" name="NM_CONNECTION_ERROR_MISSING_SETTING" link="libnm-nm-errors.html#NM-CONNECTION-ERROR-MISSING-SETTING:CAPS"/>
+ <keyword type="constant" name="NM_CONNECTION_ERROR_INVALID_SETTING" link="libnm-nm-errors.html#NM-CONNECTION-ERROR-INVALID-SETTING:CAPS"/>
+ <keyword type="constant" name="NM_CONNECTION_ERROR_MISSING_PROPERTY" link="libnm-nm-errors.html#NM-CONNECTION-ERROR-MISSING-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_CONNECTION_ERROR_INVALID_PROPERTY" link="libnm-nm-errors.html#NM-CONNECTION-ERROR-INVALID-PROPERTY:CAPS"/>
+ <keyword type="constant" name="NM_CRYPTO_ERROR_FAILED" link="libnm-nm-errors.html#NM-CRYPTO-ERROR-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_CRYPTO_ERROR_INVALID_DATA" link="libnm-nm-errors.html#NM-CRYPTO-ERROR-INVALID-DATA:CAPS"/>
+ <keyword type="constant" name="NM_CRYPTO_ERROR_INVALID_PASSWORD" link="libnm-nm-errors.html#NM-CRYPTO-ERROR-INVALID-PASSWORD:CAPS"/>
+ <keyword type="constant" name="NM_CRYPTO_ERROR_UNKNOWN_CIPHER" link="libnm-nm-errors.html#NM-CRYPTO-ERROR-UNKNOWN-CIPHER:CAPS"/>
+ <keyword type="constant" name="NM_CRYPTO_ERROR_DECRYPTION_FAILED" link="libnm-nm-errors.html#NM-CRYPTO-ERROR-DECRYPTION-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_CRYPTO_ERROR_ENCRYPTION_FAILED" link="libnm-nm-errors.html#NM-CRYPTO-ERROR-ENCRYPTION-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_ERROR_FAILED" link="libnm-nm-errors.html#NM-DEVICE-ERROR-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_ERROR_CREATION_FAILED" link="libnm-nm-errors.html#NM-DEVICE-ERROR-CREATION-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_ERROR_INVALID_CONNECTION" link="libnm-nm-errors.html#NM-DEVICE-ERROR-INVALID-CONNECTION:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION" link="libnm-nm-errors.html#NM-DEVICE-ERROR-INCOMPATIBLE-CONNECTION:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_ERROR_NOT_ACTIVE" link="libnm-nm-errors.html#NM-DEVICE-ERROR-NOT-ACTIVE:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_ERROR_NOT_SOFTWARE" link="libnm-nm-errors.html#NM-DEVICE-ERROR-NOT-SOFTWARE:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_ERROR_NOT_ALLOWED" link="libnm-nm-errors.html#NM-DEVICE-ERROR-NOT-ALLOWED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_ERROR_SPECIFIC_OBJECT_NOT_FOUND" link="libnm-nm-errors.html#NM-DEVICE-ERROR-SPECIFIC-OBJECT-NOT-FOUND:CAPS"/>
+ <keyword type="constant" name="NM_MANAGER_ERROR_FAILED" link="libnm-nm-errors.html#NM-MANAGER-ERROR-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_MANAGER_ERROR_PERMISSION_DENIED" link="libnm-nm-errors.html#NM-MANAGER-ERROR-PERMISSION-DENIED:CAPS"/>
+ <keyword type="constant" name="NM_MANAGER_ERROR_UNKNOWN_CONNECTION" link="libnm-nm-errors.html#NM-MANAGER-ERROR-UNKNOWN-CONNECTION:CAPS"/>
+ <keyword type="constant" name="NM_MANAGER_ERROR_UNKNOWN_DEVICE" link="libnm-nm-errors.html#NM-MANAGER-ERROR-UNKNOWN-DEVICE:CAPS"/>
+ <keyword type="constant" name="NM_MANAGER_ERROR_CONNECTION_NOT_AVAILABLE" link="libnm-nm-errors.html#NM-MANAGER-ERROR-CONNECTION-NOT-AVAILABLE:CAPS"/>
+ <keyword type="constant" name="NM_MANAGER_ERROR_CONNECTION_NOT_ACTIVE" link="libnm-nm-errors.html#NM-MANAGER-ERROR-CONNECTION-NOT-ACTIVE:CAPS"/>
+ <keyword type="constant" name="NM_MANAGER_ERROR_CONNECTION_ALREADY_ACTIVE" link="libnm-nm-errors.html#NM-MANAGER-ERROR-CONNECTION-ALREADY-ACTIVE:CAPS"/>
+ <keyword type="constant" name="NM_MANAGER_ERROR_DEPENDENCY_FAILED" link="libnm-nm-errors.html#NM-MANAGER-ERROR-DEPENDENCY-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_MANAGER_ERROR_ALREADY_ASLEEP_OR_AWAKE" link="libnm-nm-errors.html#NM-MANAGER-ERROR-ALREADY-ASLEEP-OR-AWAKE:CAPS"/>
+ <keyword type="constant" name="NM_MANAGER_ERROR_ALREADY_ENABLED_OR_DISABLED" link="libnm-nm-errors.html#NM-MANAGER-ERROR-ALREADY-ENABLED-OR-DISABLED:CAPS"/>
+ <keyword type="constant" name="NM_MANAGER_ERROR_UNKNOWN_LOG_LEVEL" link="libnm-nm-errors.html#NM-MANAGER-ERROR-UNKNOWN-LOG-LEVEL:CAPS"/>
+ <keyword type="constant" name="NM_MANAGER_ERROR_UNKNOWN_LOG_DOMAIN" link="libnm-nm-errors.html#NM-MANAGER-ERROR-UNKNOWN-LOG-DOMAIN:CAPS"/>
+ <keyword type="constant" name="NM_SECRET_AGENT_ERROR_FAILED" link="libnm-nm-errors.html#NM-SECRET-AGENT-ERROR-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_SECRET_AGENT_ERROR_PERMISSION_DENIED" link="libnm-nm-errors.html#NM-SECRET-AGENT-ERROR-PERMISSION-DENIED:CAPS"/>
+ <keyword type="constant" name="NM_SECRET_AGENT_ERROR_INVALID_CONNECTION" link="libnm-nm-errors.html#NM-SECRET-AGENT-ERROR-INVALID-CONNECTION:CAPS"/>
+ <keyword type="constant" name="NM_SECRET_AGENT_ERROR_USER_CANCELED" link="libnm-nm-errors.html#NM-SECRET-AGENT-ERROR-USER-CANCELED:CAPS"/>
+ <keyword type="constant" name="NM_SECRET_AGENT_ERROR_AGENT_CANCELED" link="libnm-nm-errors.html#NM-SECRET-AGENT-ERROR-AGENT-CANCELED:CAPS"/>
+ <keyword type="constant" name="NM_SECRET_AGENT_ERROR_NO_SECRETS" link="libnm-nm-errors.html#NM-SECRET-AGENT-ERROR-NO-SECRETS:CAPS"/>
+ <keyword type="constant" name="NM_SETTINGS_ERROR_FAILED" link="libnm-nm-errors.html#NM-SETTINGS-ERROR-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_SETTINGS_ERROR_PERMISSION_DENIED" link="libnm-nm-errors.html#NM-SETTINGS-ERROR-PERMISSION-DENIED:CAPS"/>
+ <keyword type="constant" name="NM_SETTINGS_ERROR_NOT_SUPPORTED" link="libnm-nm-errors.html#NM-SETTINGS-ERROR-NOT-SUPPORTED:CAPS"/>
+ <keyword type="constant" name="NM_SETTINGS_ERROR_INVALID_CONNECTION" link="libnm-nm-errors.html#NM-SETTINGS-ERROR-INVALID-CONNECTION:CAPS"/>
+ <keyword type="constant" name="NM_SETTINGS_ERROR_READ_ONLY_CONNECTION" link="libnm-nm-errors.html#NM-SETTINGS-ERROR-READ-ONLY-CONNECTION:CAPS"/>
+ <keyword type="constant" name="NM_SETTINGS_ERROR_UUID_EXISTS" link="libnm-nm-errors.html#NM-SETTINGS-ERROR-UUID-EXISTS:CAPS"/>
+ <keyword type="constant" name="NM_SETTINGS_ERROR_INVALID_HOSTNAME" link="libnm-nm-errors.html#NM-SETTINGS-ERROR-INVALID-HOSTNAME:CAPS"/>
+ <keyword type="constant" name="NM_VPN_PLUGIN_ERROR_FAILED" link="libnm-nm-errors.html#NM-VPN-PLUGIN-ERROR-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_VPN_PLUGIN_ERROR_STARTING_IN_PROGRESS" link="libnm-nm-errors.html#NM-VPN-PLUGIN-ERROR-STARTING-IN-PROGRESS:CAPS"/>
+ <keyword type="constant" name="NM_VPN_PLUGIN_ERROR_ALREADY_STARTED" link="libnm-nm-errors.html#NM-VPN-PLUGIN-ERROR-ALREADY-STARTED:CAPS"/>
+ <keyword type="constant" name="NM_VPN_PLUGIN_ERROR_STOPPING_IN_PROGRESS" link="libnm-nm-errors.html#NM-VPN-PLUGIN-ERROR-STOPPING-IN-PROGRESS:CAPS"/>
+ <keyword type="constant" name="NM_VPN_PLUGIN_ERROR_ALREADY_STOPPED" link="libnm-nm-errors.html#NM-VPN-PLUGIN-ERROR-ALREADY-STOPPED:CAPS"/>
+ <keyword type="constant" name="NM_VPN_PLUGIN_ERROR_WRONG_STATE" link="libnm-nm-errors.html#NM-VPN-PLUGIN-ERROR-WRONG-STATE:CAPS"/>
+ <keyword type="constant" name="NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS" link="libnm-nm-errors.html#NM-VPN-PLUGIN-ERROR-BAD-ARGUMENTS:CAPS"/>
+ <keyword type="constant" name="NM_VPN_PLUGIN_ERROR_LAUNCH_FAILED" link="libnm-nm-errors.html#NM-VPN-PLUGIN-ERROR-LAUNCH-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_VPN_PLUGIN_ERROR_INVALID_CONNECTION" link="libnm-nm-errors.html#NM-VPN-PLUGIN-ERROR-INVALID-CONNECTION:CAPS"/>
+ <keyword type="constant" name="NM_VPN_PLUGIN_ERROR_INTERACTIVE_NOT_SUPPORTED" link="libnm-nm-errors.html#NM-VPN-PLUGIN-ERROR-INTERACTIVE-NOT-SUPPORTED:CAPS"/>
+ <keyword type="constant" name="NM_STATE_UNKNOWN" link="libnm-nm-dbus-interface.html#NM-STATE-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_STATE_ASLEEP" link="libnm-nm-dbus-interface.html#NM-STATE-ASLEEP:CAPS"/>
+ <keyword type="constant" name="NM_STATE_DISCONNECTED" link="libnm-nm-dbus-interface.html#NM-STATE-DISCONNECTED:CAPS"/>
+ <keyword type="constant" name="NM_STATE_DISCONNECTING" link="libnm-nm-dbus-interface.html#NM-STATE-DISCONNECTING:CAPS"/>
+ <keyword type="constant" name="NM_STATE_CONNECTING" link="libnm-nm-dbus-interface.html#NM-STATE-CONNECTING:CAPS"/>
+ <keyword type="constant" name="NM_STATE_CONNECTED_LOCAL" link="libnm-nm-dbus-interface.html#NM-STATE-CONNECTED-LOCAL:CAPS"/>
+ <keyword type="constant" name="NM_STATE_CONNECTED_SITE" link="libnm-nm-dbus-interface.html#NM-STATE-CONNECTED-SITE:CAPS"/>
+ <keyword type="constant" name="NM_STATE_CONNECTED_GLOBAL" link="libnm-nm-dbus-interface.html#NM-STATE-CONNECTED-GLOBAL:CAPS"/>
+ <keyword type="constant" name="NM_CONNECTIVITY_UNKNOWN" link="libnm-nm-dbus-interface.html#NM-CONNECTIVITY-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_CONNECTIVITY_NONE" link="libnm-nm-dbus-interface.html#NM-CONNECTIVITY-NONE:CAPS"/>
+ <keyword type="constant" name="NM_CONNECTIVITY_PORTAL" link="libnm-nm-dbus-interface.html#NM-CONNECTIVITY-PORTAL:CAPS"/>
+ <keyword type="constant" name="NM_CONNECTIVITY_LIMITED" link="libnm-nm-dbus-interface.html#NM-CONNECTIVITY-LIMITED:CAPS"/>
+ <keyword type="constant" name="NM_CONNECTIVITY_FULL" link="libnm-nm-dbus-interface.html#NM-CONNECTIVITY-FULL:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_TYPE_UNKNOWN" link="libnm-nm-dbus-interface.html#NM-DEVICE-TYPE-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_TYPE_ETHERNET" link="libnm-nm-dbus-interface.html#NM-DEVICE-TYPE-ETHERNET:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_TYPE_WIFI" link="libnm-nm-dbus-interface.html#NM-DEVICE-TYPE-WIFI:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_TYPE_UNUSED1" link="libnm-nm-dbus-interface.html#NM-DEVICE-TYPE-UNUSED1:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_TYPE_UNUSED2" link="libnm-nm-dbus-interface.html#NM-DEVICE-TYPE-UNUSED2:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_TYPE_BT" link="libnm-nm-dbus-interface.html#NM-DEVICE-TYPE-BT:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_TYPE_OLPC_MESH" link="libnm-nm-dbus-interface.html#NM-DEVICE-TYPE-OLPC-MESH:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_TYPE_WIMAX" link="libnm-nm-dbus-interface.html#NM-DEVICE-TYPE-WIMAX:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_TYPE_MODEM" link="libnm-nm-dbus-interface.html#NM-DEVICE-TYPE-MODEM:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_TYPE_INFINIBAND" link="libnm-nm-dbus-interface.html#NM-DEVICE-TYPE-INFINIBAND:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_TYPE_BOND" link="libnm-nm-dbus-interface.html#NM-DEVICE-TYPE-BOND:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_TYPE_VLAN" link="libnm-nm-dbus-interface.html#NM-DEVICE-TYPE-VLAN:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_TYPE_ADSL" link="libnm-nm-dbus-interface.html#NM-DEVICE-TYPE-ADSL:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_TYPE_BRIDGE" link="libnm-nm-dbus-interface.html#NM-DEVICE-TYPE-BRIDGE:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_TYPE_GENERIC" link="libnm-nm-dbus-interface.html#NM-DEVICE-TYPE-GENERIC:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_TYPE_TEAM" link="libnm-nm-dbus-interface.html#NM-DEVICE-TYPE-TEAM:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_CAP_NONE" link="libnm-nm-dbus-interface.html#NM-DEVICE-CAP-NONE:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_CAP_NM_SUPPORTED" link="libnm-nm-dbus-interface.html#NM-DEVICE-CAP-NM-SUPPORTED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_CAP_CARRIER_DETECT" link="libnm-nm-dbus-interface.html#NM-DEVICE-CAP-CARRIER-DETECT:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_CAP_IS_SOFTWARE" link="libnm-nm-dbus-interface.html#NM-DEVICE-CAP-IS-SOFTWARE:CAPS"/>
+ <keyword type="constant" name="NM_WIFI_DEVICE_CAP_NONE" link="libnm-nm-dbus-interface.html#NM-WIFI-DEVICE-CAP-NONE:CAPS"/>
+ <keyword type="constant" name="NM_WIFI_DEVICE_CAP_CIPHER_WEP40" link="libnm-nm-dbus-interface.html#NM-WIFI-DEVICE-CAP-CIPHER-WEP40:CAPS"/>
+ <keyword type="constant" name="NM_WIFI_DEVICE_CAP_CIPHER_WEP104" link="libnm-nm-dbus-interface.html#NM-WIFI-DEVICE-CAP-CIPHER-WEP104:CAPS"/>
+ <keyword type="constant" name="NM_WIFI_DEVICE_CAP_CIPHER_TKIP" link="libnm-nm-dbus-interface.html#NM-WIFI-DEVICE-CAP-CIPHER-TKIP:CAPS"/>
+ <keyword type="constant" name="NM_WIFI_DEVICE_CAP_CIPHER_CCMP" link="libnm-nm-dbus-interface.html#NM-WIFI-DEVICE-CAP-CIPHER-CCMP:CAPS"/>
+ <keyword type="constant" name="NM_WIFI_DEVICE_CAP_WPA" link="libnm-nm-dbus-interface.html#NM-WIFI-DEVICE-CAP-WPA:CAPS"/>
+ <keyword type="constant" name="NM_WIFI_DEVICE_CAP_RSN" link="libnm-nm-dbus-interface.html#NM-WIFI-DEVICE-CAP-RSN:CAPS"/>
+ <keyword type="constant" name="NM_WIFI_DEVICE_CAP_AP" link="libnm-nm-dbus-interface.html#NM-WIFI-DEVICE-CAP-AP:CAPS"/>
+ <keyword type="constant" name="NM_WIFI_DEVICE_CAP_ADHOC" link="libnm-nm-dbus-interface.html#NM-WIFI-DEVICE-CAP-ADHOC:CAPS"/>
+ <keyword type="constant" name="NM_802_11_AP_FLAGS_NONE" link="libnm-nm-dbus-interface.html#NM-802-11-AP-FLAGS-NONE:CAPS"/>
+ <keyword type="constant" name="NM_802_11_AP_FLAGS_PRIVACY" link="libnm-nm-dbus-interface.html#NM-802-11-AP-FLAGS-PRIVACY:CAPS"/>
+ <keyword type="constant" name="NM_802_11_AP_SEC_NONE" link="libnm-nm-dbus-interface.html#NM-802-11-AP-SEC-NONE:CAPS"/>
+ <keyword type="constant" name="NM_802_11_AP_SEC_PAIR_WEP40" link="libnm-nm-dbus-interface.html#NM-802-11-AP-SEC-PAIR-WEP40:CAPS"/>
+ <keyword type="constant" name="NM_802_11_AP_SEC_PAIR_WEP104" link="libnm-nm-dbus-interface.html#NM-802-11-AP-SEC-PAIR-WEP104:CAPS"/>
+ <keyword type="constant" name="NM_802_11_AP_SEC_PAIR_TKIP" link="libnm-nm-dbus-interface.html#NM-802-11-AP-SEC-PAIR-TKIP:CAPS"/>
+ <keyword type="constant" name="NM_802_11_AP_SEC_PAIR_CCMP" link="libnm-nm-dbus-interface.html#NM-802-11-AP-SEC-PAIR-CCMP:CAPS"/>
+ <keyword type="constant" name="NM_802_11_AP_SEC_GROUP_WEP40" link="libnm-nm-dbus-interface.html#NM-802-11-AP-SEC-GROUP-WEP40:CAPS"/>
+ <keyword type="constant" name="NM_802_11_AP_SEC_GROUP_WEP104" link="libnm-nm-dbus-interface.html#NM-802-11-AP-SEC-GROUP-WEP104:CAPS"/>
+ <keyword type="constant" name="NM_802_11_AP_SEC_GROUP_TKIP" link="libnm-nm-dbus-interface.html#NM-802-11-AP-SEC-GROUP-TKIP:CAPS"/>
+ <keyword type="constant" name="NM_802_11_AP_SEC_GROUP_CCMP" link="libnm-nm-dbus-interface.html#NM-802-11-AP-SEC-GROUP-CCMP:CAPS"/>
+ <keyword type="constant" name="NM_802_11_AP_SEC_KEY_MGMT_PSK" link="libnm-nm-dbus-interface.html#NM-802-11-AP-SEC-KEY-MGMT-PSK:CAPS"/>
+ <keyword type="constant" name="NM_802_11_AP_SEC_KEY_MGMT_802_1X" link="libnm-nm-dbus-interface.html#NM-802-11-AP-SEC-KEY-MGMT-802-1X:CAPS"/>
+ <keyword type="constant" name="NM_802_11_MODE_UNKNOWN" link="libnm-nm-dbus-interface.html#NM-802-11-MODE-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_802_11_MODE_ADHOC" link="libnm-nm-dbus-interface.html#NM-802-11-MODE-ADHOC:CAPS"/>
+ <keyword type="constant" name="NM_802_11_MODE_INFRA" link="libnm-nm-dbus-interface.html#NM-802-11-MODE-INFRA:CAPS"/>
+ <keyword type="constant" name="NM_802_11_MODE_AP" link="libnm-nm-dbus-interface.html#NM-802-11-MODE-AP:CAPS"/>
+ <keyword type="constant" name="NM_BT_CAPABILITY_NONE" link="libnm-nm-dbus-interface.html#NM-BT-CAPABILITY-NONE:CAPS"/>
+ <keyword type="constant" name="NM_BT_CAPABILITY_DUN" link="libnm-nm-dbus-interface.html#NM-BT-CAPABILITY-DUN:CAPS"/>
+ <keyword type="constant" name="NM_BT_CAPABILITY_NAP" link="libnm-nm-dbus-interface.html#NM-BT-CAPABILITY-NAP:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_MODEM_CAPABILITY_NONE" link="libnm-nm-dbus-interface.html#NM-DEVICE-MODEM-CAPABILITY-NONE:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_MODEM_CAPABILITY_POTS" link="libnm-nm-dbus-interface.html#NM-DEVICE-MODEM-CAPABILITY-POTS:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO" link="libnm-nm-dbus-interface.html#NM-DEVICE-MODEM-CAPABILITY-CDMA-EVDO:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS" link="libnm-nm-dbus-interface.html#NM-DEVICE-MODEM-CAPABILITY-GSM-UMTS:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_MODEM_CAPABILITY_LTE" link="libnm-nm-dbus-interface.html#NM-DEVICE-MODEM-CAPABILITY-LTE:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_UNKNOWN" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_UNMANAGED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-UNMANAGED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_UNAVAILABLE" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-UNAVAILABLE:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_DISCONNECTED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-DISCONNECTED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_PREPARE" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-PREPARE:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_CONFIG" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-CONFIG:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_NEED_AUTH" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-NEED-AUTH:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_IP_CONFIG" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-IP-CONFIG:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_IP_CHECK" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-IP-CHECK:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_SECONDARIES" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-SECONDARIES:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_ACTIVATED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-ACTIVATED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_DEACTIVATING" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-DEACTIVATING:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_FAILED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_NONE" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-NONE:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_UNKNOWN" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_NOW_MANAGED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-NOW-MANAGED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_NOW_UNMANAGED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-NOW-UNMANAGED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_CONFIG_FAILED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-CONFIG-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-IP-CONFIG-UNAVAILABLE:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-IP-CONFIG-EXPIRED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_NO_SECRETS" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-NO-SECRETS:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-SUPPLICANT-DISCONNECT:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_SUPPLICANT_CONFIG_FAILED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-SUPPLICANT-CONFIG-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-SUPPLICANT-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-SUPPLICANT-TIMEOUT:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_PPP_START_FAILED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-PPP-START-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_PPP_DISCONNECT" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-PPP-DISCONNECT:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_PPP_FAILED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-PPP-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_DHCP_START_FAILED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-DHCP-START-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_DHCP_ERROR" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-DHCP-ERROR:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_DHCP_FAILED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-DHCP-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_SHARED_START_FAILED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-SHARED-START-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_SHARED_FAILED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-SHARED-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_AUTOIP_START_FAILED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-AUTOIP-START-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_AUTOIP_ERROR" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-AUTOIP-ERROR:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_AUTOIP_FAILED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-AUTOIP-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_MODEM_BUSY" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-MODEM-BUSY:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_MODEM_NO_DIAL_TONE" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-MODEM-NO-DIAL-TONE:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-MODEM-NO-CARRIER:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_MODEM_DIAL_TIMEOUT" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-MODEM-DIAL-TIMEOUT:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_MODEM_DIAL_FAILED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-MODEM-DIAL-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-MODEM-INIT-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_GSM_APN_FAILED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-GSM-APN-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_GSM_REGISTRATION_NOT_SEARCHING" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-GSM-REGISTRATION-NOT-SEARCHING:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_GSM_REGISTRATION_DENIED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-GSM-REGISTRATION-DENIED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_GSM_REGISTRATION_TIMEOUT" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-GSM-REGISTRATION-TIMEOUT:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_GSM_REGISTRATION_FAILED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-GSM-REGISTRATION-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_GSM_PIN_CHECK_FAILED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-GSM-PIN-CHECK-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_FIRMWARE_MISSING" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-FIRMWARE-MISSING:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_REMOVED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-REMOVED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_SLEEPING" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-SLEEPING:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_CONNECTION_REMOVED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-CONNECTION-REMOVED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_USER_REQUESTED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-USER-REQUESTED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_CARRIER" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-CARRIER:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-CONNECTION-ASSUMED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_SUPPLICANT_AVAILABLE" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-SUPPLICANT-AVAILABLE:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_MODEM_NOT_FOUND" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-MODEM-NOT-FOUND:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_BT_FAILED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-BT-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_GSM_SIM_NOT_INSERTED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-GSM-SIM-NOT-INSERTED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_GSM_SIM_PIN_REQUIRED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-GSM-SIM-PIN-REQUIRED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_GSM_SIM_PUK_REQUIRED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-GSM-SIM-PUK-REQUIRED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_GSM_SIM_WRONG" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-GSM-SIM-WRONG:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_INFINIBAND_MODE" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-INFINIBAND-MODE:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_DEPENDENCY_FAILED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-DEPENDENCY-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_BR2684_FAILED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-BR2684-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_MODEM_MANAGER_UNAVAILABLE" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-MODEM-MANAGER-UNAVAILABLE:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_SSID_NOT_FOUND" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-SSID-NOT-FOUND:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_SECONDARY_CONNECTION_FAILED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-SECONDARY-CONNECTION-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_DCB_FCOE_FAILED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-DCB-FCOE-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_TEAMD_CONTROL_FAILED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-TEAMD-CONTROL-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_MODEM_FAILED" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-MODEM-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_MODEM_AVAILABLE" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-MODEM-AVAILABLE:CAPS"/>
+ <keyword type="constant" name="NM_DEVICE_STATE_REASON_SIM_PIN_INCORRECT" link="libnm-nm-dbus-interface.html#NM-DEVICE-STATE-REASON-SIM-PIN-INCORRECT:CAPS"/>
+ <keyword type="constant" name="NM_ACTIVE_CONNECTION_STATE_UNKNOWN" link="libnm-nm-dbus-interface.html#NM-ACTIVE-CONNECTION-STATE-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_ACTIVE_CONNECTION_STATE_ACTIVATING" link="libnm-nm-dbus-interface.html#NM-ACTIVE-CONNECTION-STATE-ACTIVATING:CAPS"/>
+ <keyword type="constant" name="NM_ACTIVE_CONNECTION_STATE_ACTIVATED" link="libnm-nm-dbus-interface.html#NM-ACTIVE-CONNECTION-STATE-ACTIVATED:CAPS"/>
+ <keyword type="constant" name="NM_ACTIVE_CONNECTION_STATE_DEACTIVATING" link="libnm-nm-dbus-interface.html#NM-ACTIVE-CONNECTION-STATE-DEACTIVATING:CAPS"/>
+ <keyword type="constant" name="NM_ACTIVE_CONNECTION_STATE_DEACTIVATED" link="libnm-nm-dbus-interface.html#NM-ACTIVE-CONNECTION-STATE-DEACTIVATED:CAPS"/>
+ <keyword type="constant" name="NM_SECRET_AGENT_GET_SECRETS_FLAG_NONE" link="libnm-nm-dbus-interface.html#NM-SECRET-AGENT-GET-SECRETS-FLAG-NONE:CAPS"/>
+ <keyword type="constant" name="NM_SECRET_AGENT_GET_SECRETS_FLAG_ALLOW_INTERACTION" link="libnm-nm-dbus-interface.html#NM-SECRET-AGENT-GET-SECRETS-FLAG-ALLOW-INTERACTION:CAPS"/>
+ <keyword type="constant" name="NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW" link="libnm-nm-dbus-interface.html#NM-SECRET-AGENT-GET-SECRETS-FLAG-REQUEST-NEW:CAPS"/>
+ <keyword type="constant" name="NM_SECRET_AGENT_GET_SECRETS_FLAG_USER_REQUESTED" link="libnm-nm-dbus-interface.html#NM-SECRET-AGENT-GET-SECRETS-FLAG-USER-REQUESTED:CAPS"/>
+ <keyword type="constant" name="NM_SECRET_AGENT_GET_SECRETS_FLAG_ONLY_SYSTEM" link="libnm-nm-dbus-interface.html#NM-SECRET-AGENT-GET-SECRETS-FLAG-ONLY-SYSTEM:CAPS"/>
+ <keyword type="constant" name="NM_SECRET_AGENT_GET_SECRETS_FLAG_NO_ERRORS" link="libnm-nm-dbus-interface.html#NM-SECRET-AGENT-GET-SECRETS-FLAG-NO-ERRORS:CAPS"/>
+ <keyword type="constant" name="NM_SECRET_AGENT_CAPABILITY_NONE" link="libnm-nm-dbus-interface.html#NM-SECRET-AGENT-CAPABILITY-NONE:CAPS"/>
+ <keyword type="constant" name="NM_SECRET_AGENT_CAPABILITY_VPN_HINTS" link="libnm-nm-dbus-interface.html#NM-SECRET-AGENT-CAPABILITY-VPN-HINTS:CAPS"/>
+ <keyword type="constant" name="NM_SECRET_AGENT_CAPABILITY_LAST" link="libnm-nm-dbus-interface.html#NM-SECRET-AGENT-CAPABILITY-LAST:CAPS"/>
+ <keyword type="constant" name="NM_CONNECTION_SERIALIZE_ALL" link="libnm-NMConnection.html#NM-CONNECTION-SERIALIZE-ALL:CAPS"/>
+ <keyword type="constant" name="NM_CONNECTION_SERIALIZE_NO_SECRETS" link="libnm-NMConnection.html#NM-CONNECTION-SERIALIZE-NO-SECRETS:CAPS"/>
+ <keyword type="constant" name="NM_CONNECTION_SERIALIZE_ONLY_SECRETS" link="libnm-NMConnection.html#NM-CONNECTION-SERIALIZE-ONLY-SECRETS: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_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT" link="NMSetting.html#NM-SETTING-COMPARE-FLAG-DIFF-RESULT-WITH-DEFAULT:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_COMPARE_FLAG_DIFF_RESULT_NO_DEFAULT" link="NMSetting.html#NM-SETTING-COMPARE-FLAG-DIFF-RESULT-NO-DEFAULT:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_COMPARE_FLAG_IGNORE_TIMESTAMP" link="NMSetting.html#NM-SETTING-COMPARE-FLAG-IGNORE-TIMESTAMP: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_DIFF_RESULT_IN_A_DEFAULT" link="NMSetting.html#NM-SETTING-DIFF-RESULT-IN-A-DEFAULT:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_DIFF_RESULT_IN_B_DEFAULT" link="NMSetting.html#NM-SETTING-DIFF-RESULT-IN-B-DEFAULT: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_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_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_SERIAL_PARITY_NONE" link="NMSettingSerial.html#NM-SETTING-SERIAL-PARITY-NONE:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_SERIAL_PARITY_EVEN" link="NMSettingSerial.html#NM-SETTING-SERIAL-PARITY-EVEN:CAPS"/>
+ <keyword type="constant" name="NM_SETTING_SERIAL_PARITY_ODD" link="NMSettingSerial.html#NM-SETTING-SERIAL-PARITY-ODD: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_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_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="NMU_SEC_INVALID" link="libnm-nm-utils.html#NMU-SEC-INVALID:CAPS"/>
+ <keyword type="constant" name="NMU_SEC_NONE" link="libnm-nm-utils.html#NMU-SEC-NONE:CAPS"/>
+ <keyword type="constant" name="NMU_SEC_STATIC_WEP" link="libnm-nm-utils.html#NMU-SEC-STATIC-WEP:CAPS"/>
+ <keyword type="constant" name="NMU_SEC_LEAP" link="libnm-nm-utils.html#NMU-SEC-LEAP:CAPS"/>
+ <keyword type="constant" name="NMU_SEC_DYNAMIC_WEP" link="libnm-nm-utils.html#NMU-SEC-DYNAMIC-WEP:CAPS"/>
+ <keyword type="constant" name="NMU_SEC_WPA_PSK" link="libnm-nm-utils.html#NMU-SEC-WPA-PSK:CAPS"/>
+ <keyword type="constant" name="NMU_SEC_WPA_ENTERPRISE" link="libnm-nm-utils.html#NMU-SEC-WPA-ENTERPRISE:CAPS"/>
+ <keyword type="constant" name="NMU_SEC_WPA2_PSK" link="libnm-nm-utils.html#NMU-SEC-WPA2-PSK:CAPS"/>
+ <keyword type="constant" name="NMU_SEC_WPA2_ENTERPRISE" link="libnm-nm-utils.html#NMU-SEC-WPA2-ENTERPRISE:CAPS"/>
+ <keyword type="constant" name="NM_VPN_SERVICE_STATE_UNKNOWN" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-SERVICE-STATE-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_VPN_SERVICE_STATE_INIT" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-SERVICE-STATE-INIT:CAPS"/>
+ <keyword type="constant" name="NM_VPN_SERVICE_STATE_SHUTDOWN" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-SERVICE-STATE-SHUTDOWN:CAPS"/>
+ <keyword type="constant" name="NM_VPN_SERVICE_STATE_STARTING" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-SERVICE-STATE-STARTING:CAPS"/>
+ <keyword type="constant" name="NM_VPN_SERVICE_STATE_STARTED" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-SERVICE-STATE-STARTED:CAPS"/>
+ <keyword type="constant" name="NM_VPN_SERVICE_STATE_STOPPING" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-SERVICE-STATE-STOPPING:CAPS"/>
+ <keyword type="constant" name="NM_VPN_SERVICE_STATE_STOPPED" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-SERVICE-STATE-STOPPED:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_UNKNOWN" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_PREPARE" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-PREPARE:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_NEED_AUTH" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-NEED-AUTH:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_CONNECT" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-CONNECT:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_IP_CONFIG_GET" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-IP-CONFIG-GET:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_ACTIVATED" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-ACTIVATED:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_FAILED" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_DISCONNECTED" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-DISCONNECTED:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_REASON_UNKNOWN" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-REASON-UNKNOWN:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_REASON_NONE" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-REASON-NONE:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_REASON_USER_DISCONNECTED" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-REASON-USER-DISCONNECTED:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_REASON_DEVICE_DISCONNECTED" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-REASON-DEVICE-DISCONNECTED:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_REASON_SERVICE_STOPPED" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-REASON-SERVICE-STOPPED:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_REASON_IP_CONFIG_INVALID" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-REASON-IP-CONFIG-INVALID:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_REASON_CONNECT_TIMEOUT" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-REASON-CONNECT-TIMEOUT:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_TIMEOUT" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-REASON-SERVICE-START-TIMEOUT:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_FAILED" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-REASON-SERVICE-START-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_REASON_NO_SECRETS" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-REASON-NO-SECRETS:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_REASON_LOGIN_FAILED" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-REASON-LOGIN-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_VPN_CONNECTION_STATE_REASON_CONNECTION_REMOVED" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-CONNECTION-STATE-REASON-CONNECTION-REMOVED:CAPS"/>
+ <keyword type="constant" name="NM_VPN_PLUGIN_FAILURE_LOGIN_FAILED" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-FAILURE-LOGIN-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_VPN_PLUGIN_FAILURE_CONNECT_FAILED" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-FAILURE-CONNECT-FAILED:CAPS"/>
+ <keyword type="constant" name="NM_VPN_PLUGIN_FAILURE_BAD_IP_CONFIG" link="libnm-nm-vpn-dbus-interface.html#NM-VPN-PLUGIN-FAILURE-BAD-IP-CONFIG:CAPS"/>
+ <keyword type="constant" name="NM_VPN_EDITOR_PLUGIN_CAPABILITY_NONE" link="libnm-NMVpnEditorPlugin.html#NM-VPN-EDITOR-PLUGIN-CAPABILITY-NONE:CAPS"/>
+ <keyword type="constant" name="NM_VPN_EDITOR_PLUGIN_CAPABILITY_IMPORT" link="libnm-NMVpnEditorPlugin.html#NM-VPN-EDITOR-PLUGIN-CAPABILITY-IMPORT:CAPS"/>
+ <keyword type="constant" name="NM_VPN_EDITOR_PLUGIN_CAPABILITY_EXPORT" link="libnm-NMVpnEditorPlugin.html#NM-VPN-EDITOR-PLUGIN-CAPABILITY-EXPORT:CAPS"/>
+ <keyword type="constant" name="NM_VPN_EDITOR_PLUGIN_CAPABILITY_IPV6" link="libnm-NMVpnEditorPlugin.html#NM-VPN-EDITOR-PLUGIN-CAPABILITY-IPV6:CAPS"/>
+ </functions>
+</book>
diff --git a/docs/libnm/html/libnm.png b/docs/libnm/html/libnm.png
new file mode 100644
index 000000000..dc0007284
--- /dev/null
+++ b/docs/libnm/html/libnm.png
Binary files differ
diff --git a/docs/libnm/html/object-tree.html b/docs/libnm/html/object-tree.html
new file mode 100644
index 000000000..8013b082b
--- /dev/null
+++ b/docs/libnm/html/object-tree.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Object Hierarchy</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="index.html" title="libnm Reference Manual">
+<link rel="prev" href="libnm-NMVpnEditorPlugin.html" title="NMVpnEditorPlugin">
+<link rel="next" href="api-index-full.html" title="API Index">
+<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-NMVpnEditorPlugin.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 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>
+ <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="NMSettingBridgePort.html" title="NMSettingBridgePort">NMSettingBridgePort</a>
+ <a class="link" href="NMSettingBridge.html" title="NMSettingBridge">NMSettingBridge</a>
+ <a class="link" href="NMSettingCdma.html" title="NMSettingCdma">NMSettingCdma</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="NMSettingGeneric.html" title="NMSettingGeneric">NMSettingGeneric</a>
+ <a class="link" href="NMSettingGsm.html" title="NMSettingGsm">NMSettingGsm</a>
+ <a class="link" href="NMSettingInfiniband.html" title="NMSettingInfiniband">NMSettingInfiniband</a>
+ <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
+ <a class="link" href="NMSettingIP4Config.html" title="NMSettingIP4Config">NMSettingIP4Config</a>
+ <a class="link" href="NMSettingIP6Config.html" title="NMSettingIP6Config">NMSettingIP6Config</a>
+ <a class="link" href="NMSettingOlpcMesh.html" title="NMSettingOlpcMesh">NMSettingOlpcMesh</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="NMSettingTeamPort.html" title="NMSettingTeamPort">NMSettingTeamPort</a>
+ <a class="link" href="NMSettingTeam.html" title="NMSettingTeam">NMSettingTeam</a>
+ <a class="link" href="NMSettingVlan.html" title="NMSettingVlan">NMSettingVlan</a>
+ <a class="link" href="NMSettingVpn.html" title="NMSettingVpn">NMSettingVpn</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="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
+ <a class="link" href="NMSettingWireless.html" title="NMSettingWireless">NMSettingWireless</a>
+ <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
+ <a class="link" href="NMAccessPoint.html" title="NMAccessPoint">NMAccessPoint</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="NMDevice.html" title="NMDevice">NMDevice</a>
+ <a class="link" href="NMDeviceAdsl.html" title="NMDeviceAdsl">NMDeviceAdsl</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="NMDeviceBt.html" title="NMDeviceBt">NMDeviceBt</a>
+ <a class="link" href="NMDeviceEthernet.html" title="NMDeviceEthernet">NMDeviceEthernet</a>
+ <a class="link" href="NMDeviceGeneric.html" title="NMDeviceGeneric">NMDeviceGeneric</a>
+ <a class="link" href="NMDeviceInfiniband.html" title="NMDeviceInfiniband">NMDeviceInfiniband</a>
+ <a class="link" href="NMDeviceModem.html" title="NMDeviceModem">NMDeviceModem</a>
+ <a class="link" href="NMDeviceOlpcMesh.html" title="NMDeviceOlpcMesh">NMDeviceOlpcMesh</a>
+ <a class="link" href="NMDeviceTeam.html" title="NMDeviceTeam">NMDeviceTeam</a>
+ <a class="link" href="NMDeviceVlan.html" title="NMDeviceVlan">NMDeviceVlan</a>
+ <a class="link" href="NMDeviceWifi.html" title="NMDeviceWifi">NMDeviceWifi</a>
+ <a class="link" href="NMDeviceWimax.html" title="NMDeviceWimax">NMDeviceWimax</a>
+ <a class="link" href="NMDhcpConfig.html" title="NMDhcpConfig">NMDhcpConfig</a>
+ <a class="link" href="NMIPConfig.html" title="NMIPConfig">NMIPConfig</a>
+ <a class="link" href="NMRemoteConnection.html" title="NMRemoteConnection">NMRemoteConnection</a>
+ <a class="link" href="NMWimaxNsp.html" title="NMWimaxNsp">NMWimaxNsp</a>
+ <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
+ <a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld">NMSecretAgentOld</a>
+ <a class="link" href="NMSimpleConnection.html" title="NMSimpleConnection">NMSimpleConnection</a>
+ GFlags
+ <a class="link" href="libnm-nm-dbus-interface.html#NM80211ApFlags">NM80211ApFlags</a>
+ <a class="link" href="libnm-nm-dbus-interface.html#NM80211ApSecurityFlags">NM80211ApSecurityFlags</a>
+ <a class="link" href="libnm-nm-dbus-interface.html#NMBluetoothCapabilities">NMBluetoothCapabilities</a>
+ <a class="link" href="libnm-NMConnection.html#NMConnectionSerializationFlags">NMConnectionSerializationFlags</a>
+ <a class="link" href="libnm-nm-dbus-interface.html#NMDeviceCapabilities">NMDeviceCapabilities</a>
+ <a class="link" href="libnm-nm-dbus-interface.html#NMDeviceModemCapabilities">NMDeviceModemCapabilities</a>
+ <a class="link" href="libnm-nm-dbus-interface.html#NMDeviceWifiCapabilities">NMDeviceWifiCapabilities</a>
+ <a class="link" href="libnm-nm-dbus-interface.html#NMSecretAgentCapabilities">NMSecretAgentCapabilities</a>
+ <a class="link" href="libnm-nm-dbus-interface.html#NMSecretAgentGetSecretsFlags">NMSecretAgentGetSecretsFlags</a>
+ <a class="link" href="NMSettingDcb.html#NMSettingDcbFlags">NMSettingDcbFlags</a>
+ <a class="link" href="NMSetting.html#NMSettingSecretFlags">NMSettingSecretFlags</a>
+ <a class="link" href="NMSettingVlan.html#NMVlanFlags">NMVlanFlags</a>
+ <a class="link" href="libnm-NMVpnEditorPlugin.html#NMVpnEditorPluginCapability">NMVpnEditorPluginCapability</a>
+ GEnum
+ <a class="link" href="libnm-nm-errors.html#NMAgentManagerError">NMAgentManagerError</a>
+ <a class="link" href="libnm-nm-errors.html#NMConnectionError">NMConnectionError</a>
+ <a class="link" href="libnm-nm-errors.html#NMDeviceError">NMDeviceError</a>
+ <a class="link" href="libnm-nm-errors.html#NMManagerError">NMManagerError</a>
+ <a class="link" href="libnm-nm-errors.html#NMSecretAgentError">NMSecretAgentError</a>
+ <a class="link" href="libnm-nm-errors.html#NMSettingsError">NMSettingsError</a>
+ <a class="link" href="libnm-nm-errors.html#NMVpnPluginError">NMVpnPluginError</a>
+ <a class="link" href="libnm-nm-dbus-interface.html#NM80211Mode">NM80211Mode</a>
+ <a class="link" href="libnm-nm-dbus-interface.html#NMActiveConnectionState">NMActiveConnectionState</a>
+ <a class="link" href="NMClient.html#NMClientError">NMClientError</a>
+ <a class="link" href="NMClient.html#NMClientPermission">NMClientPermission</a>
+ <a class="link" href="NMClient.html#NMClientPermissionResult">NMClientPermissionResult</a>
+ <a class="link" href="libnm-nm-dbus-interface.html#NMConnectivityState">NMConnectivityState</a>
+ <a class="link" href="libnm-nm-errors.html#NMCryptoError">NMCryptoError</a>
+ <a class="link" href="libnm-nm-dbus-interface.html#NMDeviceState">NMDeviceState</a>
+ <a class="link" href="libnm-nm-dbus-interface.html#NMDeviceStateReason">NMDeviceStateReason</a>
+ <a class="link" href="libnm-nm-dbus-interface.html#NMDeviceType">NMDeviceType</a>
+ <a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat">NMSetting8021xCKFormat</a>
+ <a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme">NMSetting8021xCKScheme</a>
+ <a class="link" href="NMSetting.html#NMSettingCompareFlags">NMSettingCompareFlags</a>
+ <a class="link" href="NMSetting.html#NMSettingDiffResult">NMSettingDiffResult</a>
+ <a class="link" href="NMSettingIP6Config.html#NMSettingIP6ConfigPrivacy">NMSettingIP6ConfigPrivacy</a>
+ <a class="link" href="NMSettingSerial.html#NMSettingSerialParity">NMSettingSerialParity</a>
+ <a class="link" href="libnm-nm-dbus-interface.html#NMState">NMState</a>
+ <a class="link" href="libnm-nm-utils.html#NMUtilsSecurityType">NMUtilsSecurityType</a>
+ <a class="link" href="NMSettingVlan.html#NMVlanPriorityMap">NMVlanPriorityMap</a>
+ <a class="link" href="libnm-nm-vpn-dbus-interface.html#NMVpnConnectionState">NMVpnConnectionState</a>
+ <a class="link" href="libnm-nm-vpn-dbus-interface.html#NMVpnConnectionStateReason">NMVpnConnectionStateReason</a>
+ <a class="link" href="libnm-nm-vpn-dbus-interface.html#NMVpnPluginFailure">NMVpnPluginFailure</a>
+ <a class="link" href="libnm-nm-vpn-dbus-interface.html#NMVpnServiceState">NMVpnServiceState</a>
+ <a class="link" href="NMSettingWirelessSecurity.html#NMWepKeyType">NMWepKeyType</a>
+ <a class="link" href="NMWimaxNsp.html#NMWimaxNspNetworkType">NMWimaxNspNetworkType</a>
+ GBoxed
+ <a class="link" href="NMSettingIPConfig.html#NMIPAddress">NMIPAddress</a>
+ <a class="link" href="NMSettingIPConfig.html#NMIPRoute">NMIPRoute</a>
+</pre>
+</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/html/ref-overview.html b/docs/libnm/html/ref-overview.html
new file mode 100644
index 000000000..febd374f3
--- /dev/null
+++ b/docs/libnm/html/ref-overview.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Overview</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libnm Reference Manual">
+<link rel="up" href="index.html" title="libnm Reference Manual">
+<link rel="prev" href="index.html" title="libnm Reference Manual">
+<link rel="next" href="ch02.html" title="Client Object API Reference">
+<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="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 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">
+<a name="ref-overview"></a>Overview</h1></div></div></div>
+<p>
+ libnm maps fairly closely to the actual D-Bus API that NetworkManager
+ provides, wrapping the remote D-Bus objects as native GObjects,
+ mapping D-Bus signals and properties to GObject signals and properties,
+ and providing helpful accessor and utility functions. However, unlike
+ the old libnm-util/libnm-glib API, the mapping to the D-Bus API is not
+ exact, and various inconveniences and historical anomolies of the D-Bus
+ API are papered over.
+ </p>
+<p>
+ The following is a rough overview of the libnm object structure and
+ how to use the various parts of it:
+ </p>
+<div class="mediaobject">
+<a name="libnm-overview"></a><img src="libnm.png">
+</div>
+<p>
+ </p>
+</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/html/right.png b/docs/libnm/html/right.png
new file mode 100644
index 000000000..92832e3a4
--- /dev/null
+++ b/docs/libnm/html/right.png
Binary files differ
diff --git a/docs/libnm/html/style.css b/docs/libnm/html/style.css
new file mode 100644
index 000000000..d6f6c26ec
--- /dev/null
+++ b/docs/libnm/html/style.css
@@ -0,0 +1,266 @@
+.synopsis, .classsynopsis
+{
+ /* tango:aluminium 1/2 */
+ background: #eeeeec;
+ border: solid 1px #d3d7cf;
+ padding: 0.5em;
+}
+.programlisting
+{
+ /* tango:sky blue 0/1 */
+ background: #e6f3ff;
+ border: solid 1px #729fcf;
+ padding: 0.5em;
+}
+.variablelist
+{
+ padding: 4px;
+ margin-left: 3em;
+}
+.variablelist td:first-child
+{
+ vertical-align: top;
+}
+
+@media screen {
+ sup a.footnote
+ {
+ 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]
+ {
+ display: inline-block;
+ position: relative;
+ top:-5em;
+ }
+ /* this seems to be a bug in the xsl style sheets when generating indexes */
+ div.index div.index
+ {
+ top: 0em;
+ }
+ /* make space for the fixed navigation bar and add space at the bottom so that
+ * link targets appear somewhat close to top
+ */
+ body
+ {
+ padding-top: 3.2em;
+ padding-bottom: 20em;
+ }
+ /* style and size the navigation bar */
+ table.navigation#top
+ {
+ position: fixed;
+ /* tango:scarlet red 0/1 */
+ background: #ffe6e6;
+ border: solid 1px #ef2929;
+ margin-top: 0;
+ margin-bottom: 0;
+ top: 0;
+ left: 0;
+ height: 3em;
+ z-index: 10;
+ }
+ .navigation a, .navigation a:visited
+ {
+ /* tango:scarlet red 3 */
+ color: #a40000;
+ }
+ .navigation a:hover
+ {
+ /* tango:scarlet red 1 */
+ color: #ef2929;
+ }
+ td.shortcuts
+ {
+ /* tango:scarlet red 1 */
+ color: #ef2929;
+ font-size: 80%;
+ white-space: nowrap;
+ }
+}
+@media print {
+ table.navigation {
+ visibility: collapse;
+ display: none;
+ }
+ div.titlepage table.navigation {
+ visibility: visible;
+ display: table;
+ /* tango:scarlet red 0/1 */
+ background: #ffe6e6;
+ border: solid 1px #ef2929;
+ margin-top: 0;
+ margin-bottom: 0;
+ top: 0;
+ left: 0;
+ height: 3em;
+ }
+}
+
+.navigation .title
+{
+ font-size: 200%;
+}
+
+div.gallery-float
+{
+ float: left;
+ padding: 10px;
+}
+div.gallery-float img
+{
+ border-style: none;
+}
+div.gallery-spacer
+{
+ clear: both;
+}
+
+a, a:visited
+{
+ text-decoration: none;
+ /* tango:sky blue 2 */
+ color: #3465a4;
+}
+a:hover
+{
+ text-decoration: underline;
+ /* tango:sky blue 1 */
+ color: #729fcf;
+}
+
+div.table table
+{
+ border-collapse: collapse;
+ border-spacing: 0px;
+ /* tango:aluminium 3 */
+ border: solid 1px #babdb6;
+}
+
+div.table table td, div.table table th
+{
+ /* tango:aluminium 3 */
+ border: solid 1px #babdb6;
+ padding: 3px;
+ vertical-align: top;
+}
+
+div.table table th
+{
+ /* tango:aluminium 2 */
+ background-color: #d3d7cf;
+}
+
+hr
+{
+ /* tango:aluminium 3 */
+ color: #babdb6;
+ background: #babdb6;
+ border: none 0px;
+ height: 1px;
+ clear: both;
+}
+
+.footer
+{
+ padding-top: 3.5em;
+ /* tango:aluminium 3 */
+ color: #babdb6;
+ text-align: center;
+ font-size: 80%;
+}
+
+.warning
+{
+ /* tango:orange 0/1 */
+ background: #ffeed9;
+ border-color: #ffb04f;
+}
+.note
+{
+ /* tango:chameleon 0/0.5 */
+ background: #d8ffb2;
+ border-color: #abf562;
+}
+.note, .warning
+{
+ padding: 0.5em;
+ border-width: 1px;
+ border-style: solid;
+}
+.note h3, .warning h3
+{
+ margin-top: 0.0em
+}
+.note p, .warning p
+{
+ margin-bottom: 0.0em
+}
+
+/* blob links */
+h2 .extralinks, h3 .extralinks
+{
+ float: right;
+ /* tango:aluminium 3 */
+ color: #babdb6;
+ font-size: 80%;
+ font-weight: normal;
+}
+
+.annotation
+{
+ /* tango:aluminium 5 */
+ color: #555753;
+ font-size: 80%;
+ font-weight: normal;
+}
+
+/* code listings */
+
+.listing_code .programlisting .cbracket { color: #a40000; } /* tango: scarlet red 3 */
+.listing_code .programlisting .comment { color: #a1a39d; } /* tango: aluminium 4 */
+.listing_code .programlisting .function { color: #000000; font-weight: bold; }
+.listing_code .programlisting .function a { color: #11326b; font-weight: bold; } /* tango: sky blue 4 */
+.listing_code .programlisting .keyword { color: #4e9a06; } /* tango: chameleon 3 */
+.listing_code .programlisting .linenum { color: #babdb6; } /* tango: aluminium 3 */
+.listing_code .programlisting .normal { color: #000000; }
+.listing_code .programlisting .number { color: #75507b; } /* tango: plum 2 */
+.listing_code .programlisting .preproc { color: #204a87; } /* tango: sky blue 3 */
+.listing_code .programlisting .string { color: #c17d11; } /* tango: chocolate 2 */
+.listing_code .programlisting .type { color: #000000; }
+.listing_code .programlisting .type a { color: #11326b; } /* tango: sky blue 4 */
+.listing_code .programlisting .symbol { color: #ce5c00; } /* tango: orange 3 */
+
+.listing_frame {
+ /* tango:sky blue 1 */
+ border: solid 1px #729fcf;
+ padding: 0px;
+}
+
+.listing_lines, .listing_code {
+ margin-top: 0px;
+ margin-bottom: 0px;
+ padding: 0.5em;
+}
+.listing_lines {
+ /* tango:sky blue 0.5 */
+ background: #a6c5e3;
+ /* tango:aluminium 6 */
+ color: #2e3436;
+}
+.listing_code {
+ /* tango:sky blue 0 */
+ background: #e6f3ff;
+}
+.listing_code .programlisting {
+ /* override from previous */
+ border: none 0px;
+ padding: 0px;
+}
+.listing_lines pre, .listing_code pre {
+ margin: 0px;
+}
+
diff --git a/docs/libnm/html/up.png b/docs/libnm/html/up.png
new file mode 100644
index 000000000..85b3e2a27
--- /dev/null
+++ b/docs/libnm/html/up.png
Binary files differ
diff --git a/docs/libnm/libnm-docs.xml b/docs/libnm/libnm-docs.xml
new file mode 100644
index 000000000..399ba5135
--- /dev/null
+++ b/docs/libnm/libnm-docs.xml
@@ -0,0 +1,161 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
+ <!ENTITY version SYSTEM "version.xml">
+]>
+
+<book id="index" xmlns:xi="http://www.w3.org/2003/XInclude">
+ <bookinfo>
+ <title>libnm Reference Manual</title>
+ <releaseinfo>
+ for libnm &version;
+ The latest version of this documentation can be found on-line at
+ <ulink role="online-location" url="https://developer.gnome.org/libnm/1.0/">https://developer.gnome.org/libnm/1.0/</ulink>.
+ </releaseinfo>
+
+ <copyright>
+ <year>2012-2014</year>
+ <holder>The NetworkManager Authors</holder>
+ </copyright>
+
+ <legalnotice>
+ <para>
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the <citetitle>GNU Free
+ Documentation License</citetitle>, Version 1.1 or any later
+ version published by the Free Software Foundation with no
+ Invariant Sections, no Front-Cover Texts, and no Back-Cover
+ Texts. You may obtain a copy of the <citetitle>GNU Free
+ Documentation License</citetitle> from the Free Software
+ Foundation by visiting <ulink type="http"
+ url="http://www.fsf.org">their Web site</ulink> or by writing
+ to:
+
+ <address>
+ The Free Software Foundation, Inc.,
+ <street>51 Franklin Street</street> - Fifth Floor,
+ <city>Boston</city>, <state>MA</state> <postcode>02110-1301</postcode>,
+ <country>USA</country>
+ </address>
+ </para>
+ </legalnotice>
+ </bookinfo>
+
+ <chapter id="ref-overview">
+ <title>Overview</title>
+ <para>
+ libnm maps fairly closely to the actual D-Bus API that NetworkManager
+ provides, wrapping the remote D-Bus objects as native GObjects,
+ mapping D-Bus signals and properties to GObject signals and properties,
+ and providing helpful accessor and utility functions. However, unlike
+ the old libnm-util/libnm-glib API, the mapping to the D-Bus API is not
+ exact, and various inconveniences and historical anomolies of the D-Bus
+ API are papered over.
+ </para>
+ <para>
+ The following is a rough overview of the libnm object structure and
+ how to use the various parts of it:
+ <mediaobject id="libnm-overview">
+ <imageobject>
+ <imagedata fileref="libnm.png" format="PNG"/>
+ </imageobject>
+ </mediaobject>
+ </para>
+ </chapter>
+
+ <chapter>
+ <title>Client Object API Reference</title>
+ <xi:include href="xml/nm-client.xml"/>
+ <xi:include href="xml/nm-secret-agent-old.xml"/>
+ <xi:include href="xml/nm-object.xml"/>
+ <xi:include href="xml/nm-errors.xml"/>
+ <xi:include href="xml/nm-dbus-interface.xml"/>
+ </chapter>
+
+ <chapter>
+ <title>Connection and Setting API Reference</title>
+ <xi:include href="xml/nm-connection.xml"/>
+ <xi:include href="xml/nm-simple-connection.xml"/>
+ <xi:include href="xml/nm-setting.xml"/>
+ <xi:include href="xml/nm-setting-connection.xml"/>
+ <!-- begin alphabetical -->
+ <xi:include href="xml/nm-setting-8021x.xml"/>
+ <xi:include href="xml/nm-setting-adsl.xml"/>
+ <xi:include href="xml/nm-setting-bluetooth.xml"/>
+ <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-cdma.xml"/>
+ <xi:include href="xml/nm-setting-dcb.xml"/>
+ <xi:include href="xml/nm-setting-generic.xml"/>
+ <xi:include href="xml/nm-setting-gsm.xml"/>
+ <xi:include href="xml/nm-setting-infiniband.xml"/>
+ <xi:include href="xml/nm-setting-ip-config.xml"/>
+ <xi:include href="xml/nm-setting-ip4-config.xml"/>
+ <xi:include href="xml/nm-setting-ip6-config.xml"/>
+ <xi:include href="xml/nm-setting-olpc-mesh.xml"/>
+ <xi:include href="xml/nm-setting-ppp.xml"/>
+ <xi:include href="xml/nm-setting-pppoe.xml"/>
+ <xi:include href="xml/nm-setting-serial.xml"/>
+ <xi:include href="xml/nm-setting-team.xml"/>
+ <xi:include href="xml/nm-setting-team-port.xml"/>
+ <xi:include href="xml/nm-setting-vlan.xml"/>
+ <xi:include href="xml/nm-setting-vpn.xml"/>
+ <xi:include href="xml/nm-setting-wimax.xml"/>
+ <xi:include href="xml/nm-setting-wired.xml"/>
+ <xi:include href="xml/nm-setting-wireless.xml"/>
+ <xi:include href="xml/nm-setting-wireless-security.xml"/>
+ <!-- end alphabetical -->
+ </chapter>
+
+ <chapter>
+ <title>Device and Runtime Configuration API Reference</title>
+ <xi:include href="xml/nm-device.xml"/>
+ <!-- begin alphabetical -->
+ <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-bt.xml"/>
+ <xi:include href="xml/nm-device-ethernet.xml"/>
+ <xi:include href="xml/nm-device-generic.xml"/>
+ <xi:include href="xml/nm-device-infiniband.xml"/>
+ <xi:include href="xml/nm-device-modem.xml"/>
+ <xi:include href="xml/nm-device-olpc-mesh.xml"/>
+ <xi:include href="xml/nm-device-team.xml"/>
+ <xi:include href="xml/nm-device-vlan.xml"/>
+ <xi:include href="xml/nm-device-wifi.xml"/>
+ <xi:include href="xml/nm-device-wimax.xml"/>
+ <!-- end alphabetical -->
+ <xi:include href="xml/nm-active-connection.xml"/>
+ <xi:include href="xml/nm-vpn-connection.xml"/>
+ <xi:include href="xml/nm-remote-connection.xml"/>
+ <xi:include href="xml/nm-access-point.xml"/>
+ <xi:include href="xml/nm-wimax-nsp.xml"/>
+ <xi:include href="xml/nm-ip-config.xml"/>
+ <xi:include href="xml/nm-dhcp-config.xml"/>
+ </chapter>
+
+ <chapter>
+ <title>Utility API Reference</title>
+ <xi:include href="xml/nm-utils.xml"/>
+ <xi:include href="xml/nm-version.xml"/>
+ </chapter>
+
+ <chapter>
+ <title>VPN Plugin API Reference</title>
+ <xi:include href="xml/nm-vpn-dbus-interface.xml"/>
+ <xi:include href="xml/nm-vpn-editor-plugin.xml"/>
+ </chapter>
+
+ <chapter id="object-tree">
+ <title>Object Hierarchy</title>
+ <xi:include href="xml/tree_index.sgml"/>
+ </chapter>
+ <index id="api-index-full">
+ <title>API Index</title>
+ <xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include>
+ </index>
+
+ <xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include>
+</book>
+
diff --git a/docs/libnm/libnm-overrides.txt b/docs/libnm/libnm-overrides.txt
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/docs/libnm/libnm-overrides.txt
diff --git a/docs/libnm/libnm-sections.txt b/docs/libnm/libnm-sections.txt
new file mode 100644
index 000000000..6c4eb9818
--- /dev/null
+++ b/docs/libnm/libnm-sections.txt
@@ -0,0 +1,2285 @@
+<SECTION>
+<FILE>nm-access-point</FILE>
+<TITLE>NMAccessPoint</TITLE>
+NM_ACCESS_POINT_FLAGS
+NM_ACCESS_POINT_WPA_FLAGS
+NM_ACCESS_POINT_RSN_FLAGS
+NM_ACCESS_POINT_SSID
+NM_ACCESS_POINT_BSSID
+NM_ACCESS_POINT_FREQUENCY
+NM_ACCESS_POINT_MODE
+NM_ACCESS_POINT_MAX_BITRATE
+NM_ACCESS_POINT_STRENGTH
+NM_ACCESS_POINT_HW_ADDRESS
+NMAccessPoint
+NMAccessPointClass
+nm_access_point_get_flags
+nm_access_point_get_wpa_flags
+nm_access_point_get_rsn_flags
+nm_access_point_get_ssid
+nm_access_point_get_bssid
+nm_access_point_get_frequency
+nm_access_point_get_mode
+nm_access_point_get_max_bitrate
+nm_access_point_get_strength
+nm_access_point_filter_connections
+nm_access_point_connection_valid
+<SUBSECTION Standard>
+NM_ACCESS_POINT
+NM_ACCESS_POINT_CLASS
+NM_ACCESS_POINT_GET_CLASS
+NM_IS_ACCESS_POINT
+NM_IS_ACCESS_POINT_CLASS
+NM_TYPE_ACCESS_POINT
+nm_access_point_get_type
+</SECTION>
+
+<SECTION>
+<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_PATH
+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_get_connection
+nm_active_connection_get_id
+nm_active_connection_get_uuid
+nm_active_connection_get_connection_type
+nm_active_connection_get_specific_object_path
+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_ip6_config
+nm_active_connection_get_dhcp6_config
+nm_active_connection_get_vpn
+<SUBSECTION Standard>
+NM_ACTIVE_CONNECTION
+NM_ACTIVE_CONNECTION_CLASS
+NM_ACTIVE_CONNECTION_GET_CLASS
+NM_IS_ACTIVE_CONNECTION
+NM_IS_ACTIVE_CONNECTION_CLASS
+NM_TYPE_ACTIVE_CONNECTION
+nm_active_connection_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-client</FILE>
+<TITLE>NMClient</TITLE>
+NM_CLIENT_VERSION
+NM_CLIENT_STATE
+NM_CLIENT_STARTUP
+NM_CLIENT_NM_RUNNING
+NM_CLIENT_NETWORKING_ENABLED
+NM_CLIENT_WIRELESS_ENABLED
+NM_CLIENT_WIRELESS_HARDWARE_ENABLED
+NM_CLIENT_WWAN_ENABLED
+NM_CLIENT_WWAN_HARDWARE_ENABLED
+NM_CLIENT_WIMAX_ENABLED
+NM_CLIENT_WIMAX_HARDWARE_ENABLED
+NM_CLIENT_ACTIVE_CONNECTIONS
+NM_CLIENT_CONNECTIVITY
+NM_CLIENT_PRIMARY_CONNECTION
+NM_CLIENT_ACTIVATING_CONNECTION
+NM_CLIENT_DEVICES
+NM_CLIENT_CONNECTIONS
+NM_CLIENT_HOSTNAME
+NM_CLIENT_CAN_MODIFY
+NM_CLIENT_DEVICE_ADDED
+NM_CLIENT_DEVICE_REMOVED
+NM_CLIENT_PERMISSION_CHANGED
+NM_CLIENT_CONNECTION_ADDED
+NM_CLIENT_CONNECTION_REMOVED
+NMClientPermission
+NMClientPermissionResult
+NMClientError
+NM_CLIENT_ERROR
+nm_client_error_quark
+NMClient
+NMClientClass
+nm_client_new
+nm_client_new_async
+nm_client_new_finish
+nm_client_get_version
+nm_client_get_state
+nm_client_get_startup
+nm_client_get_nm_running
+nm_client_networking_get_enabled
+nm_client_networking_set_enabled
+nm_client_wireless_get_enabled
+nm_client_wireless_set_enabled
+nm_client_wireless_hardware_get_enabled
+nm_client_wwan_get_enabled
+nm_client_wwan_set_enabled
+nm_client_wwan_hardware_get_enabled
+nm_client_wimax_get_enabled
+nm_client_wimax_set_enabled
+nm_client_wimax_hardware_get_enabled
+nm_client_get_logging
+nm_client_set_logging
+nm_client_get_permission_result
+nm_client_get_connectivity
+nm_client_check_connectivity
+nm_client_check_connectivity_async
+nm_client_check_connectivity_finish
+nm_client_save_hostname
+nm_client_save_hostname_async
+nm_client_save_hostname_finish
+nm_client_get_devices
+nm_client_get_device_by_path
+nm_client_get_device_by_iface
+nm_client_get_active_connections
+nm_client_get_primary_connection
+nm_client_get_activating_connection
+nm_client_activate_connection_async
+nm_client_activate_connection_finish
+nm_client_add_and_activate_connection_async
+nm_client_add_and_activate_connection_finish
+nm_client_deactivate_connection
+nm_client_deactivate_connection_async
+nm_client_deactivate_connection_finish
+nm_client_get_connections
+nm_client_get_connection_by_id
+nm_client_get_connection_by_path
+nm_client_get_connection_by_uuid
+nm_client_add_connection_async
+nm_client_add_connection_finish
+nm_client_load_connections
+nm_client_load_connections_async
+nm_client_load_connections_finish
+nm_client_reload_connections
+nm_client_reload_connections_async
+nm_client_reload_connections_finish
+<SUBSECTION Standard>
+NM_CLIENT
+NM_CLIENT_CLASS
+NM_CLIENT_GET_CLASS
+NM_IS_CLIENT
+NM_IS_CLIENT_CLASS
+NM_TYPE_CLIENT
+nm_client_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-connection</FILE>
+<TITLE>NMConnection</TITLE>
+NM_CONNECTION_SECRETS_UPDATED
+NM_CONNECTION_SECRETS_CLEARED
+NM_CONNECTION_CHANGED
+NM_CONNECTION_NORMALIZE_PARAM_IP6_CONFIG_METHOD
+NMConnectionInterface
+nm_connection_add_setting
+nm_connection_remove_setting
+nm_connection_get_setting
+nm_connection_get_setting_by_name
+NM_VARIANT_TYPE_SETTING
+NMConnectionSerializationFlags
+nm_connection_to_dbus
+nm_connection_replace_settings
+nm_connection_replace_settings_from_connection
+nm_connection_clear_settings
+nm_connection_compare
+nm_connection_diff
+nm_connection_verify
+nm_connection_normalize
+nm_connection_need_secrets
+nm_connection_clear_secrets
+nm_connection_clear_secrets_with_flags
+nm_connection_update_secrets
+nm_connection_set_path
+nm_connection_get_path
+nm_connection_get_interface_name
+nm_connection_is_type
+nm_connection_for_each_setting_value
+nm_connection_dump
+nm_connection_get_uuid
+nm_connection_get_id
+nm_connection_get_connection_type
+nm_connection_is_virtual
+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
+nm_connection_get_setting_ip6_config
+nm_connection_get_setting_olpc_mesh
+nm_connection_get_setting_ppp
+nm_connection_get_setting_pppoe
+nm_connection_get_setting_serial
+nm_connection_get_setting_vpn
+nm_connection_get_setting_wimax
+nm_connection_get_setting_adsl
+nm_connection_get_setting_wired
+nm_connection_get_setting_wireless
+nm_connection_get_setting_wireless_security
+nm_connection_get_setting_vlan
+<SUBSECTION Standard>
+NM_CONNECTION
+NM_CONNECTION_GET_INTERFACE
+NM_IS_CONNECTION
+NM_TYPE_CONNECTION
+NM_VARIANT_TYPE_CONNECTION
+nm_connection_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-core-enum-types</FILE>
+<SUBSECTION Standard>
+NM_TYPE_802_11_AP_FLAGS
+NM_TYPE_802_11_AP_SECURITY_FLAGS
+NM_TYPE_802_11_MODE
+NM_TYPE_ACTIVE_CONNECTION_STATE
+NM_TYPE_AGENT_MANAGER_ERROR
+NM_TYPE_BLUETOOTH_CAPABILITIES
+NM_TYPE_CONNECTION_ERROR
+NM_TYPE_CONNECTION_SERIALIZATION_FLAGS
+NM_TYPE_CONNECTIVITY_STATE
+NM_TYPE_CRYPTO_ERROR
+NM_TYPE_DEVICE_CAPABILITIES
+NM_TYPE_DEVICE_ERROR
+NM_TYPE_DEVICE_MODEM_CAPABILITIES
+NM_TYPE_DEVICE_STATE
+NM_TYPE_DEVICE_STATE_REASON
+NM_TYPE_DEVICE_TYPE
+NM_TYPE_DEVICE_WIFI_CAPABILITIES
+NM_TYPE_MANAGER_ERROR
+NM_TYPE_SECRET_AGENT_CAPABILITIES
+NM_TYPE_SECRET_AGENT_ERROR
+NM_TYPE_SECRET_AGENT_GET_SECRETS_FLAGS
+NM_TYPE_SETTINGS_ERROR
+NM_TYPE_SETTING_802_1X_CK_FORMAT
+NM_TYPE_SETTING_802_1X_CK_SCHEME
+NM_TYPE_SETTING_COMPARE_FLAGS
+NM_TYPE_SETTING_DCB_FLAGS
+NM_TYPE_SETTING_DIFF_RESULT
+NM_TYPE_SETTING_IP6_CONFIG_PRIVACY
+NM_TYPE_SETTING_SECRET_FLAGS
+NM_TYPE_SETTING_SERIAL_PARITY
+NM_TYPE_STATE
+NM_TYPE_UTILS_SECURITY_TYPE
+NM_TYPE_VLAN_FLAGS
+NM_TYPE_VLAN_PRIORITY_MAP
+NM_TYPE_VPN_CONNECTION_STATE
+NM_TYPE_VPN_CONNECTION_STATE_REASON
+NM_TYPE_VPN_PLUGIN_ERROR
+NM_TYPE_VPN_PLUGIN_FAILURE
+NM_TYPE_VPN_SERVICE_STATE
+NM_TYPE_WEP_KEY_TYPE
+nm_802_11_ap_flags_get_type
+nm_802_11_ap_security_flags_get_type
+nm_802_11_mode_get_type
+nm_active_connection_state_get_type
+nm_agent_manager_error_get_type
+nm_bluetooth_capabilities_get_type
+nm_connection_error_get_type
+nm_connection_serialization_flags_get_type
+nm_connectivity_state_get_type
+nm_crypto_error_get_type
+nm_device_capabilities_get_type
+nm_device_error_get_type
+nm_device_modem_capabilities_get_type
+nm_device_state_get_type
+nm_device_state_reason_get_type
+nm_device_type_get_type
+nm_device_wifi_capabilities_get_type
+nm_manager_error_get_type
+nm_secret_agent_capabilities_get_type
+nm_secret_agent_error_get_type
+nm_secret_agent_get_secrets_flags_get_type
+nm_setting_802_1x_ck_format_get_type
+nm_setting_802_1x_ck_scheme_get_type
+nm_setting_compare_flags_get_type
+nm_setting_dcb_flags_get_type
+nm_setting_diff_result_get_type
+nm_setting_ip6_config_privacy_get_type
+nm_setting_secret_flags_get_type
+nm_setting_serial_parity_get_type
+nm_settings_error_get_type
+nm_state_get_type
+nm_utils_security_type_get_type
+nm_vlan_flags_get_type
+nm_vlan_priority_map_get_type
+nm_vpn_connection_state_get_type
+nm_vpn_connection_state_reason_get_type
+nm_vpn_plugin_error_get_type
+nm_vpn_plugin_failure_get_type
+nm_vpn_service_state_get_type
+nm_wep_key_type_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-dbus-interface</FILE>
+NM_DBUS_SERVICE
+NM_DBUS_PATH
+NM_DBUS_INTERFACE
+NM_DBUS_INTERFACE_DEVICE
+NM_DBUS_INTERFACE_DEVICE_WIRED
+NM_DBUS_INTERFACE_DEVICE_ADSL
+NM_DBUS_INTERFACE_DEVICE_WIRELESS
+NM_DBUS_INTERFACE_DEVICE_BLUETOOTH
+NM_DBUS_INTERFACE_DEVICE_OLPC_MESH
+NM_DBUS_PATH_ACCESS_POINT
+NM_DBUS_INTERFACE_ACCESS_POINT
+NM_DBUS_INTERFACE_DEVICE_MODEM
+NM_DBUS_INTERFACE_DEVICE_WIMAX
+NM_DBUS_INTERFACE_WIMAX_NSP
+NM_DBUS_PATH_WIMAX_NSP
+NM_DBUS_INTERFACE_ACTIVE_CONNECTION
+NM_DBUS_INTERFACE_IP4_CONFIG
+NM_DBUS_INTERFACE_DHCP4_CONFIG
+NM_DBUS_INTERFACE_IP6_CONFIG
+NM_DBUS_INTERFACE_DHCP6_CONFIG
+NM_DBUS_INTERFACE_DEVICE_INFINIBAND
+NM_DBUS_INTERFACE_DEVICE_BOND
+NM_DBUS_INTERFACE_DEVICE_TEAM
+NM_DBUS_INTERFACE_DEVICE_VLAN
+NM_DBUS_INTERFACE_DEVICE_BRIDGE
+NM_DBUS_INTERFACE_DEVICE_GENERIC
+NM_DBUS_INTERFACE_DEVICE_VETH
+NM_DBUS_INTERFACE_DEVICE_TUN
+NM_DBUS_INTERFACE_DEVICE_MACVLAN
+NM_DBUS_INTERFACE_DEVICE_VXLAN
+NM_DBUS_INTERFACE_DEVICE_GRE
+NM_DBUS_INTERFACE_SETTINGS
+NM_DBUS_PATH_SETTINGS
+NM_DBUS_INTERFACE_SETTINGS_CONNECTION
+NM_DBUS_PATH_SETTINGS_CONNECTION
+NM_DBUS_INTERFACE_SETTINGS_CONNECTION_SECRETS
+NM_DBUS_INTERFACE_AGENT_MANAGER
+NM_DBUS_PATH_AGENT_MANAGER
+NM_DBUS_INTERFACE_SECRET_AGENT
+NM_DBUS_PATH_SECRET_AGENT
+NMState
+NMConnectivityState
+NMDeviceType
+NMDeviceCapabilities
+NMDeviceWifiCapabilities
+NM80211ApFlags
+NM80211ApSecurityFlags
+NM80211Mode
+NMBluetoothCapabilities
+NMDeviceModemCapabilities
+NMDeviceState
+NMDeviceStateReason
+NMActiveConnectionState
+NMSecretAgentGetSecretsFlags
+NMSecretAgentCapabilities
+</SECTION>
+
+<SECTION>
+<FILE>nm-device</FILE>
+<TITLE>NMDevice</TITLE>
+NM_DEVICE_DEVICE_TYPE
+NM_DEVICE_UDI
+NM_DEVICE_INTERFACE
+NM_DEVICE_IP_INTERFACE
+NM_DEVICE_DRIVER
+NM_DEVICE_DRIVER_VERSION
+NM_DEVICE_FIRMWARE_VERSION
+NM_DEVICE_CAPABILITIES
+NM_DEVICE_MANAGED
+NM_DEVICE_AUTOCONNECT
+NM_DEVICE_FIRMWARE_MISSING
+NM_DEVICE_IP4_CONFIG
+NM_DEVICE_DHCP4_CONFIG
+NM_DEVICE_IP6_CONFIG
+NM_DEVICE_DHCP6_CONFIG
+NM_DEVICE_STATE
+NM_DEVICE_STATE_REASON
+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_get_iface
+nm_device_get_ip_iface
+nm_device_get_device_type
+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
+nm_device_set_autoconnect
+nm_device_get_firmware_missing
+nm_device_get_ip4_config
+nm_device_get_dhcp4_config
+nm_device_get_ip6_config
+nm_device_get_dhcp6_config
+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_is_software
+nm_device_get_product
+nm_device_get_vendor
+nm_device_get_description
+nm_device_disambiguate_names
+nm_device_disconnect
+nm_device_disconnect_async
+nm_device_disconnect_finish
+nm_device_delete
+nm_device_delete_async
+nm_device_delete_finish
+nm_device_filter_connections
+nm_device_connection_valid
+nm_device_connection_compatible
+nm_device_get_setting_type
+<SUBSECTION Standard>
+NM_DEVICE
+NM_DEVICE_CLASS
+NM_DEVICE_GET_CLASS
+NM_IS_DEVICE
+NM_IS_DEVICE_CLASS
+NM_TYPE_DEVICE
+nm_device_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-device-adsl</FILE>
+<TITLE>NMDeviceAdsl</TITLE>
+NM_DEVICE_ADSL_CARRIER
+NMDeviceAdsl
+NMDeviceAdslClass
+nm_device_adsl_get_carrier
+<SUBSECTION Standard>
+NM_DEVICE_ADSL
+NM_DEVICE_ADSL_CLASS
+NM_DEVICE_ADSL_GET_CLASS
+NM_IS_DEVICE_ADSL
+NM_IS_DEVICE_ADSL_CLASS
+NM_TYPE_DEVICE_ADSL
+nm_device_adsl_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-device-bond</FILE>
+<TITLE>NMDeviceBond</TITLE>
+NM_DEVICE_BOND_HW_ADDRESS
+NM_DEVICE_BOND_CARRIER
+NM_DEVICE_BOND_SLAVES
+NMDeviceBond
+NMDeviceBondClass
+nm_device_bond_get_hw_address
+nm_device_bond_get_carrier
+nm_device_bond_get_slaves
+<SUBSECTION Standard>
+NM_DEVICE_BOND
+NM_DEVICE_BOND_CLASS
+NM_DEVICE_BOND_GET_CLASS
+NM_IS_DEVICE_BOND
+NM_IS_DEVICE_BOND_CLASS
+NM_TYPE_DEVICE_BOND
+nm_device_bond_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-device-bridge</FILE>
+<TITLE>NMDeviceBridge</TITLE>
+NM_DEVICE_BRIDGE_HW_ADDRESS
+NM_DEVICE_BRIDGE_CARRIER
+NM_DEVICE_BRIDGE_SLAVES
+NMDeviceBridge
+NMDeviceBridgeClass
+nm_device_bridge_get_hw_address
+nm_device_bridge_get_carrier
+nm_device_bridge_get_slaves
+<SUBSECTION Standard>
+NM_DEVICE_BRIDGE
+NM_DEVICE_BRIDGE_CLASS
+NM_DEVICE_BRIDGE_GET_CLASS
+NM_IS_DEVICE_BRIDGE
+NM_IS_DEVICE_BRIDGE_CLASS
+NM_TYPE_DEVICE_BRIDGE
+nm_device_bridge_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-device-bt</FILE>
+<TITLE>NMDeviceBt</TITLE>
+NM_DEVICE_BT_HW_ADDRESS
+NM_DEVICE_BT_NAME
+NM_DEVICE_BT_CAPABILITIES
+NMDeviceBt
+NMDeviceBtClass
+nm_device_bt_get_hw_address
+nm_device_bt_get_name
+nm_device_bt_get_capabilities
+<SUBSECTION Standard>
+NM_DEVICE_BT
+NM_DEVICE_BT_CLASS
+NM_DEVICE_BT_GET_CLASS
+NM_IS_DEVICE_BT
+NM_IS_DEVICE_BT_CLASS
+NM_TYPE_DEVICE_BT
+nm_device_bt_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-device-ethernet</FILE>
+<TITLE>NMDeviceEthernet</TITLE>
+NM_DEVICE_ETHERNET_HW_ADDRESS
+NM_DEVICE_ETHERNET_PERMANENT_HW_ADDRESS
+NM_DEVICE_ETHERNET_SPEED
+NM_DEVICE_ETHERNET_CARRIER
+NMDeviceEthernet
+NMDeviceEthernetClass
+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>
+NM_DEVICE_ETHERNET
+NM_DEVICE_ETHERNET_CLASS
+NM_DEVICE_ETHERNET_GET_CLASS
+NM_IS_DEVICE_ETHERNET
+NM_IS_DEVICE_ETHERNET_CLASS
+NM_TYPE_DEVICE_ETHERNET
+nm_device_ethernet_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-device-generic</FILE>
+<TITLE>NMDeviceGeneric</TITLE>
+NM_DEVICE_GENERIC_HW_ADDRESS
+NM_DEVICE_GENERIC_TYPE_DESCRIPTION
+NMDeviceGeneric
+NMDeviceGenericClass
+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>
+NM_DEVICE_INFINIBAND_HW_ADDRESS
+NM_DEVICE_INFINIBAND_CARRIER
+NMDeviceInfiniband
+NMDeviceInfinibandClass
+nm_device_infiniband_get_hw_address
+nm_device_infiniband_get_carrier
+<SUBSECTION Standard>
+NM_DEVICE_INFINIBAND
+NM_DEVICE_INFINIBAND_CLASS
+NM_DEVICE_INFINIBAND_GET_CLASS
+NM_IS_DEVICE_INFINIBAND
+NM_IS_DEVICE_INFINIBAND_CLASS
+NM_TYPE_DEVICE_INFINIBAND
+nm_device_infiniband_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-device-modem</FILE>
+<TITLE>NMDeviceModem</TITLE>
+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>
+NM_DEVICE_MODEM
+NM_DEVICE_MODEM_CLASS
+NM_DEVICE_MODEM_GET_CLASS
+NM_IS_DEVICE_MODEM
+NM_IS_DEVICE_MODEM_CLASS
+NM_TYPE_DEVICE_MODEM
+nm_device_modem_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-device-olpc-mesh</FILE>
+<TITLE>NMDeviceOlpcMesh</TITLE>
+NM_DEVICE_OLPC_MESH_HW_ADDRESS
+NM_DEVICE_OLPC_MESH_COMPANION
+NM_DEVICE_OLPC_MESH_ACTIVE_CHANNEL
+NMDeviceOlpcMesh
+NMDeviceOlpcMeshClass
+nm_device_olpc_mesh_get_hw_address
+nm_device_olpc_mesh_get_companion
+nm_device_olpc_mesh_get_active_channel
+<SUBSECTION Standard>
+NM_DEVICE_OLPC_MESH
+NM_DEVICE_OLPC_MESH_CLASS
+NM_DEVICE_OLPC_MESH_GET_CLASS
+NM_IS_DEVICE_OLPC_MESH
+NM_IS_DEVICE_OLPC_MESH_CLASS
+NM_TYPE_DEVICE_OLPC_MESH
+nm_device_olpc_mesh_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-device-team</FILE>
+<TITLE>NMDeviceTeam</TITLE>
+NM_DEVICE_TEAM_HW_ADDRESS
+NM_DEVICE_TEAM_CARRIER
+NM_DEVICE_TEAM_SLAVES
+NMDeviceTeam
+NMDeviceTeamClass
+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>
+NM_DEVICE_VLAN_HW_ADDRESS
+NM_DEVICE_VLAN_CARRIER
+NM_DEVICE_VLAN_PARENT
+NM_DEVICE_VLAN_VLAN_ID
+NMDeviceVlan
+NMDeviceVlanClass
+nm_device_vlan_get_hw_address
+nm_device_vlan_get_carrier
+nm_device_vlan_get_parent
+nm_device_vlan_get_vlan_id
+<SUBSECTION Standard>
+NM_DEVICE_VLAN
+NM_DEVICE_VLAN_CLASS
+NM_DEVICE_VLAN_GET_CLASS
+NM_IS_DEVICE_VLAN
+NM_IS_DEVICE_VLAN_CLASS
+NM_TYPE_DEVICE_VLAN
+nm_device_vlan_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-device-wifi</FILE>
+<TITLE>NMDeviceWifi</TITLE>
+NM_DEVICE_WIFI_HW_ADDRESS
+NM_DEVICE_WIFI_PERMANENT_HW_ADDRESS
+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_get_hw_address
+nm_device_wifi_get_permanent_hw_address
+nm_device_wifi_get_mode
+nm_device_wifi_get_bitrate
+nm_device_wifi_get_capabilities
+nm_device_wifi_get_active_access_point
+nm_device_wifi_get_access_point_by_path
+nm_device_wifi_get_access_points
+nm_device_wifi_request_scan
+nm_device_wifi_request_scan_async
+nm_device_wifi_request_scan_finish
+<SUBSECTION Standard>
+NM_DEVICE_WIFI
+NM_DEVICE_WIFI_CLASS
+NM_DEVICE_WIFI_GET_CLASS
+NM_IS_DEVICE_WIFI
+NM_IS_DEVICE_WIFI_CLASS
+NM_TYPE_DEVICE_WIFI
+nm_device_wifi_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-device-wimax</FILE>
+<TITLE>NMDeviceWimax</TITLE>
+NM_DEVICE_WIMAX_HW_ADDRESS
+NM_DEVICE_WIMAX_ACTIVE_NSP
+NM_DEVICE_WIMAX_CENTER_FREQUENCY
+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_get_hw_address
+nm_device_wimax_get_active_nsp
+nm_device_wimax_get_nsp_by_path
+nm_device_wimax_get_nsps
+nm_device_wimax_get_center_frequency
+nm_device_wimax_get_rssi
+nm_device_wimax_get_cinr
+nm_device_wimax_get_tx_power
+nm_device_wimax_get_bsid
+<SUBSECTION Standard>
+NM_DEVICE_WIMAX
+NM_DEVICE_WIMAX_CLASS
+NM_DEVICE_WIMAX_GET_CLASS
+NM_IS_DEVICE_WIMAX
+NM_IS_DEVICE_WIMAX_CLASS
+NM_TYPE_DEVICE_WIMAX
+nm_device_wimax_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-dhcp-config</FILE>
+<TITLE>NMDhcpConfig</TITLE>
+NMDhcpConfig
+NMDhcpConfigClass
+NM_DHCP_CONFIG_FAMILY
+NM_DHCP_CONFIG_OPTIONS
+nm_dhcp_config_get_family
+nm_dhcp_config_get_options
+nm_dhcp_config_get_one_option
+<SUBSECTION Standard>
+NM_DHCP_CONFIG
+NM_DHCP_CONFIG_CLASS
+NM_IS_DHCP_CONFIG
+NM_IS_DHCP_CONFIG_CLASS
+NM_TYPE_DHCP_CONFIG
+nm_dhcp_config_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-enum-types</FILE>
+<SUBSECTION Standard>
+NM_TYPE_CLIENT_ERROR
+NM_TYPE_CLIENT_PERMISSION
+NM_TYPE_CLIENT_PERMISSION_RESULT
+NM_TYPE_VPN_EDITOR_PLUGIN_CAPABILITY
+NM_TYPE_WIMAX_NSP_NETWORK_TYPE
+nm_client_error_get_type
+nm_client_permission_get_type
+nm_client_permission_result_get_type
+nm_vpn_editor_plugin_capability_get_type
+nm_wimax_nsp_network_type_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-errors</FILE>
+NMAgentManagerError
+nm_agent_manager_error_quark
+NM_AGENT_MANAGER_ERROR
+NMConnectionError
+NM_CONNECTION_ERROR
+nm_connection_error_quark
+NMCryptoError
+NM_CRYPTO_ERROR
+nm_crypto_error_quark
+NMDeviceError
+NM_DEVICE_ERROR
+nm_device_error_quark
+NMManagerError
+nm_manager_error_quark
+NM_MANAGER_ERROR
+NMSecretAgentError
+nm_secret_agent_error_quark
+NM_SECRET_AGENT_ERROR
+NMSettingsError
+nm_settings_error_quark
+NM_SETTINGS_ERROR
+NMVpnPluginError
+NM_VPN_PLUGIN_ERROR
+nm_vpn_plugin_error_quark
+</SECTION>
+
+<SECTION>
+<FILE>nm-ip-config</FILE>
+<TITLE>NMIPConfig</TITLE>
+NMIPConfig
+NMIPConfigClass
+NM_IP_CONFIG_FAMILY
+NM_IP_CONFIG_GATEWAY
+NM_IP_CONFIG_ADDRESSES
+NM_IP_CONFIG_ROUTES
+NM_IP_CONFIG_NAMESERVERS
+NM_IP_CONFIG_DOMAINS
+NM_IP_CONFIG_SEARCHES
+NM_IP_CONFIG_WINS_SERVERS
+nm_ip_config_get_family
+nm_ip_config_get_gateway
+nm_ip_config_get_addresses
+nm_ip_config_get_routes
+nm_ip_config_get_nameservers
+nm_ip_config_get_domains
+nm_ip_config_get_searches
+nm_ip_config_get_wins_servers
+<SUBSECTION Standard>
+NM_IP_CONFIG
+NM_IP_CONFIG_CLASS
+NM_IP_CONFIG_GET_CLASS
+NM_IS_IP_CONFIG
+NM_IS_IP_CONFIG_CLASS
+NM_TYPE_IP_CONFIG
+nm_ip_config_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-object</FILE>
+<TITLE>NMObject</TITLE>
+NM_OBJECT_PATH
+NM_OBJECT_DBUS_CONNECTION
+NMObject
+NMObjectClass
+nm_object_get_path
+<SUBSECTION Standard>
+NM_IS_OBJECT
+NM_IS_OBJECT_CLASS
+NM_OBJECT
+NM_OBJECT_CLASS
+NM_OBJECT_GET_CLASS
+NM_TYPE_OBJECT
+nm_object_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-remote-connection</FILE>
+<TITLE>NMRemoteConnection</TITLE>
+NM_REMOTE_CONNECTION_DBUS_CONNECTION
+NM_REMOTE_CONNECTION_PATH
+NM_REMOTE_CONNECTION_UNSAVED
+NM_REMOTE_CONNECTION_VISIBLE
+NMRemoteConnection
+NMRemoteConnectionClass
+nm_remote_connection_commit_changes
+nm_remote_connection_commit_changes_async
+nm_remote_connection_commit_changes_finish
+nm_remote_connection_save
+nm_remote_connection_save_async
+nm_remote_connection_save_finish
+nm_remote_connection_delete
+nm_remote_connection_delete_async
+nm_remote_connection_delete_finish
+nm_remote_connection_get_secrets
+nm_remote_connection_get_secrets_async
+nm_remote_connection_get_secrets_finish
+nm_remote_connection_get_unsaved
+nm_remote_connection_get_visible
+<SUBSECTION Standard>
+NM_IS_REMOTE_CONNECTION
+NM_IS_REMOTE_CONNECTION_CLASS
+NM_REMOTE_CONNECTION
+NM_REMOTE_CONNECTION_CLASS
+NM_REMOTE_CONNECTION_GET_CLASS
+NM_TYPE_REMOTE_CONNECTION
+nm_remote_connection_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-secret-agent-old</FILE>
+<TITLE>NMSecretAgentOld</TITLE>
+NM_SECRET_AGENT_OLD_IDENTIFIER
+NM_SECRET_AGENT_OLD_AUTO_REGISTER
+NM_SECRET_AGENT_OLD_REGISTERED
+NM_SECRET_AGENT_OLD_CAPABILITIES
+NMSecretAgentOld
+NMSecretAgentOldGetSecretsFunc
+NMSecretAgentOldSaveSecretsFunc
+NMSecretAgentOldDeleteSecretsFunc
+NMSecretAgentOldClass
+nm_secret_agent_old_register
+nm_secret_agent_old_register_async
+nm_secret_agent_old_register_finish
+nm_secret_agent_old_unregister
+nm_secret_agent_old_unregister_async
+nm_secret_agent_old_unregister_finish
+nm_secret_agent_old_get_registered
+nm_secret_agent_old_get_secrets
+nm_secret_agent_old_save_secrets
+nm_secret_agent_old_delete_secrets
+<SUBSECTION Standard>
+NM_IS_SECRET_AGENT_OLD
+NM_IS_SECRET_AGENT_OLD_CLASS
+NM_SECRET_AGENT_OLD
+NM_SECRET_AGENT_OLD_CLASS
+NM_SECRET_AGENT_OLD_GET_CLASS
+NM_TYPE_SECRET_AGENT_OLD
+nm_secret_agent_old_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-setting</FILE>
+<TITLE>NMSetting</TITLE>
+NM_SETTING_PARAM_REQUIRED
+NM_SETTING_PARAM_SECRET
+NM_SETTING_PARAM_FUZZY_IGNORE
+NM_SETTING_NAME
+NMSettingSecretFlags
+NMSettingCompareFlags
+NMSetting
+NMSettingClearSecretsWithFlagsFn
+NMSettingClass
+NMSettingValueIterFn
+nm_setting_lookup_type
+nm_setting_duplicate
+nm_setting_get_name
+nm_setting_verify
+nm_setting_compare
+NMSettingDiffResult
+nm_setting_diff
+nm_setting_enumerate_values
+nm_setting_to_string
+nm_setting_get_secret_flags
+nm_setting_set_secret_flags
+nm_setting_get_dbus_property_type
+<SUBSECTION Standard>
+NM_IS_SETTING
+NM_IS_SETTING_CLASS
+NM_SETTING
+NM_SETTING_CLASS
+NM_SETTING_GET_CLASS
+NM_TYPE_SETTING
+nm_setting_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-setting-8021x</FILE>
+<TITLE>NMSetting8021x</TITLE>
+NMSetting8021xCKFormat
+NMSetting8021xCKScheme
+NM_SETTING_802_1X_SETTING_NAME
+NM_SETTING_802_1X_EAP
+NM_SETTING_802_1X_IDENTITY
+NM_SETTING_802_1X_ANONYMOUS_IDENTITY
+NM_SETTING_802_1X_PAC_FILE
+NM_SETTING_802_1X_CA_CERT
+NM_SETTING_802_1X_CA_PATH
+NM_SETTING_802_1X_SUBJECT_MATCH
+NM_SETTING_802_1X_ALTSUBJECT_MATCHES
+NM_SETTING_802_1X_CLIENT_CERT
+NM_SETTING_802_1X_PHASE1_PEAPVER
+NM_SETTING_802_1X_PHASE1_PEAPLABEL
+NM_SETTING_802_1X_PHASE1_FAST_PROVISIONING
+NM_SETTING_802_1X_PHASE2_AUTH
+NM_SETTING_802_1X_PHASE2_AUTHEAP
+NM_SETTING_802_1X_PHASE2_CA_CERT
+NM_SETTING_802_1X_PHASE2_CA_PATH
+NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH
+NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES
+NM_SETTING_802_1X_PHASE2_CLIENT_CERT
+NM_SETTING_802_1X_PASSWORD
+NM_SETTING_802_1X_PASSWORD_FLAGS
+NM_SETTING_802_1X_PASSWORD_RAW
+NM_SETTING_802_1X_PASSWORD_RAW_FLAGS
+NM_SETTING_802_1X_PRIVATE_KEY
+NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD
+NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD_FLAGS
+NM_SETTING_802_1X_PHASE2_PRIVATE_KEY
+NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD
+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
+nm_setting_802_1x_get_pac_file
+nm_setting_802_1x_get_system_ca_certs
+nm_setting_802_1x_get_ca_path
+nm_setting_802_1x_get_phase2_ca_path
+nm_setting_802_1x_get_ca_cert_scheme
+nm_setting_802_1x_get_ca_cert_blob
+nm_setting_802_1x_get_ca_cert_path
+nm_setting_802_1x_set_ca_cert
+nm_setting_802_1x_get_subject_match
+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
+nm_setting_802_1x_get_client_cert_path
+nm_setting_802_1x_set_client_cert
+nm_setting_802_1x_get_phase1_peapver
+nm_setting_802_1x_get_phase1_peaplabel
+nm_setting_802_1x_get_phase1_fast_provisioning
+nm_setting_802_1x_get_phase2_auth
+nm_setting_802_1x_get_phase2_autheap
+nm_setting_802_1x_get_phase2_ca_cert_scheme
+nm_setting_802_1x_get_phase2_ca_cert_blob
+nm_setting_802_1x_get_phase2_ca_cert_path
+nm_setting_802_1x_set_phase2_ca_cert
+nm_setting_802_1x_get_phase2_subject_match
+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
+nm_setting_802_1x_get_phase2_client_cert_path
+nm_setting_802_1x_set_phase2_client_cert
+nm_setting_802_1x_get_password
+nm_setting_802_1x_get_password_flags
+nm_setting_802_1x_get_password_raw
+nm_setting_802_1x_get_password_raw_flags
+nm_setting_802_1x_get_pin
+nm_setting_802_1x_get_pin_flags
+nm_setting_802_1x_get_private_key_scheme
+nm_setting_802_1x_get_private_key_blob
+nm_setting_802_1x_get_private_key_path
+nm_setting_802_1x_set_private_key
+nm_setting_802_1x_get_private_key_password
+nm_setting_802_1x_get_private_key_password_flags
+nm_setting_802_1x_get_private_key_format
+nm_setting_802_1x_get_phase2_private_key_scheme
+nm_setting_802_1x_get_phase2_private_key_blob
+nm_setting_802_1x_get_phase2_private_key_path
+nm_setting_802_1x_set_phase2_private_key
+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>
+NM_IS_SETTING_802_1X
+NM_IS_SETTING_802_1X_CLASS
+NM_SETTING_802_1X
+NM_SETTING_802_1X_CLASS
+NM_SETTING_802_1X_GET_CLASS
+NM_TYPE_SETTING_802_1X
+nm_setting_802_1x_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-setting-adsl</FILE>
+<TITLE>NMSettingAdsl</TITLE>
+NM_SETTING_ADSL_SETTING_NAME
+NM_SETTING_ADSL_USERNAME
+NM_SETTING_ADSL_PASSWORD
+NM_SETTING_ADSL_PASSWORD_FLAGS
+NM_SETTING_ADSL_PROTOCOL
+NM_SETTING_ADSL_ENCAPSULATION
+NM_SETTING_ADSL_VPI
+NM_SETTING_ADSL_VCI
+NM_SETTING_ADSL_PROTOCOL_PPPOA
+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
+nm_setting_adsl_get_protocol
+nm_setting_adsl_get_encapsulation
+nm_setting_adsl_get_vpi
+nm_setting_adsl_get_vci
+nm_setting_adsl_get_password_flags
+<SUBSECTION Standard>
+NM_IS_SETTING_ADSL
+NM_IS_SETTING_ADSL_CLASS
+NM_SETTING_ADSL
+NM_SETTING_ADSL_CLASS
+NM_SETTING_ADSL_GET_CLASS
+NM_TYPE_SETTING_ADSL
+nm_setting_adsl_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-setting-bluetooth</FILE>
+<TITLE>NMSettingBluetooth</TITLE>
+NM_SETTING_BLUETOOTH_SETTING_NAME
+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>
+NM_IS_SETTING_BLUETOOTH
+NM_IS_SETTING_BLUETOOTH_CLASS
+NM_SETTING_BLUETOOTH
+NM_SETTING_BLUETOOTH_CLASS
+NM_SETTING_BLUETOOTH_GET_CLASS
+NM_TYPE_SETTING_BLUETOOTH
+nm_setting_bluetooth_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-setting-bond</FILE>
+<TITLE>NMSettingBond</TITLE>
+NM_SETTING_BOND_SETTING_NAME
+NM_SETTING_BOND_OPTIONS
+NM_SETTING_BOND_OPTION_MODE
+NM_SETTING_BOND_OPTION_MIIMON
+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
+NM_SETTING_BOND_OPTION_LACP_RATE
+NMSettingBond
+NMSettingBondClass
+nm_setting_bond_new
+nm_setting_bond_get_num_options
+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>
+NM_IS_SETTING_BOND
+NM_IS_SETTING_BOND_CLASS
+NM_SETTING_BOND
+NM_SETTING_BOND_CLASS
+NM_SETTING_BOND_GET_CLASS
+NM_TYPE_SETTING_BOND
+nm_setting_bond_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-setting-bridge</FILE>
+<TITLE>NMSettingBridge</TITLE>
+NM_SETTING_BRIDGE_SETTING_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_mac_address
+nm_setting_bridge_get_stp
+nm_setting_bridge_get_priority
+nm_setting_bridge_get_forward_delay
+nm_setting_bridge_get_hello_time
+nm_setting_bridge_get_max_age
+nm_setting_bridge_get_ageing_time
+<SUBSECTION Standard>
+NM_IS_SETTING_BRIDGE
+NM_IS_SETTING_BRIDGE_CLASS
+NM_SETTING_BRIDGE
+NM_SETTING_BRIDGE_CLASS
+NM_SETTING_BRIDGE_GET_CLASS
+NM_TYPE_SETTING_BRIDGE
+nm_setting_bridge_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-setting-bridge-port</FILE>
+<TITLE>NMSettingBridgePort</TITLE>
+NM_SETTING_BRIDGE_PORT_SETTING_NAME
+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>
+NM_IS_SETTING_BRIDGE_PORT
+NM_IS_SETTING_BRIDGE_PORT_CLASS
+NM_SETTING_BRIDGE_PORT
+NM_SETTING_BRIDGE_PORT_CLASS
+NM_SETTING_BRIDGE_PORT_GET_CLASS
+NM_TYPE_SETTING_BRIDGE_PORT
+nm_setting_bridge_port_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-setting-cdma</FILE>
+<TITLE>NMSettingCdma</TITLE>
+NM_SETTING_CDMA_SETTING_NAME
+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>
+NM_IS_SETTING_CDMA
+NM_IS_SETTING_CDMA_CLASS
+NM_SETTING_CDMA
+NM_SETTING_CDMA_CLASS
+NM_SETTING_CDMA_GET_CLASS
+NM_TYPE_SETTING_CDMA
+nm_setting_cdma_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-setting-connection</FILE>
+<TITLE>NMSettingConnection</TITLE>
+NM_SETTING_CONNECTION_SETTING_NAME
+NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_MIN
+NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_MAX
+NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_DEFAULT
+NM_SETTING_CONNECTION_ID
+NM_SETTING_CONNECTION_UUID
+NM_SETTING_CONNECTION_INTERFACE_NAME
+NM_SETTING_CONNECTION_TYPE
+NM_SETTING_CONNECTION_AUTOCONNECT
+NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY
+NM_SETTING_CONNECTION_TIMESTAMP
+NM_SETTING_CONNECTION_READ_ONLY
+NM_SETTING_CONNECTION_PERMISSIONS
+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_autoconnect_priority
+nm_setting_connection_get_timestamp
+nm_setting_connection_get_read_only
+nm_setting_connection_get_num_permissions
+nm_setting_connection_get_permission
+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
+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>
+NM_IS_SETTING_CONNECTION
+NM_IS_SETTING_CONNECTION_CLASS
+NM_SETTING_CONNECTION
+NM_SETTING_CONNECTION_CLASS
+NM_SETTING_CONNECTION_GET_CLASS
+NM_TYPE_SETTING_CONNECTION
+nm_setting_connection_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-setting-dcb</FILE>
+<TITLE>NMSettingDcb</TITLE>
+NM_SETTING_DCB_SETTING_NAME
+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
+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
+NM_SETTING_GSM_NUMBER
+NM_SETTING_GSM_USERNAME
+NM_SETTING_GSM_PASSWORD
+NM_SETTING_GSM_PASSWORD_FLAGS
+NM_SETTING_GSM_APN
+NM_SETTING_GSM_NETWORK_ID
+NM_SETTING_GSM_PIN
+NM_SETTING_GSM_PIN_FLAGS
+NM_SETTING_GSM_HOME_ONLY
+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_pin
+nm_setting_gsm_get_home_only
+nm_setting_gsm_get_pin_flags
+nm_setting_gsm_get_password_flags
+<SUBSECTION Standard>
+NM_IS_SETTING_GSM
+NM_IS_SETTING_GSM_CLASS
+NM_SETTING_GSM
+NM_SETTING_GSM_CLASS
+NM_SETTING_GSM_GET_CLASS
+NM_TYPE_SETTING_GSM
+nm_setting_gsm_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-setting-infiniband</FILE>
+<TITLE>NMSettingInfiniband</TITLE>
+NM_SETTING_INFINIBAND_SETTING_NAME
+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
+nm_setting_infiniband_get_virtual_interface_name
+<SUBSECTION Standard>
+NM_IS_SETTING_INFINIBAND
+NM_IS_SETTING_INFINIBAND_CLASS
+NM_SETTING_INFINIBAND
+NM_SETTING_INFINIBAND_CLASS
+NM_SETTING_INFINIBAND_GET_CLASS
+NM_TYPE_SETTING_INFINIBAND
+nm_setting_infiniband_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-setting-ip-config</FILE>
+<TITLE>NMSettingIPConfig</TITLE>
+NMIPAddress
+nm_ip_address_new
+nm_ip_address_new_binary
+nm_ip_address_ref
+nm_ip_address_unref
+nm_ip_address_equal
+nm_ip_address_dup
+nm_ip_address_get_family
+nm_ip_address_get_address
+nm_ip_address_set_address
+nm_ip_address_get_address_binary
+nm_ip_address_set_address_binary
+nm_ip_address_get_prefix
+nm_ip_address_set_prefix
+nm_ip_address_get_attribute_names
+nm_ip_address_get_attribute
+nm_ip_address_set_attribute
+NMIPRoute
+nm_ip_route_new
+nm_ip_route_new_binary
+nm_ip_route_ref
+nm_ip_route_unref
+nm_ip_route_equal
+nm_ip_route_dup
+nm_ip_route_get_family
+nm_ip_route_get_dest
+nm_ip_route_set_dest
+nm_ip_route_get_dest_binary
+nm_ip_route_set_dest_binary
+nm_ip_route_get_prefix
+nm_ip_route_set_prefix
+nm_ip_route_get_next_hop
+nm_ip_route_set_next_hop
+nm_ip_route_get_next_hop_binary
+nm_ip_route_set_next_hop_binary
+nm_ip_route_get_metric
+nm_ip_route_set_metric
+nm_ip_route_get_attribute_names
+nm_ip_route_get_attribute
+nm_ip_route_set_attribute
+NM_SETTING_IP_CONFIG_METHOD
+NM_SETTING_IP_CONFIG_DNS
+NM_SETTING_IP_CONFIG_DNS_SEARCH
+NM_SETTING_IP_CONFIG_ADDRESSES
+NM_SETTING_IP_CONFIG_GATEWAY
+NM_SETTING_IP_CONFIG_ROUTES
+NM_SETTING_IP_CONFIG_ROUTE_METRIC
+NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES
+NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS
+NM_SETTING_IP_CONFIG_DHCP_HOSTNAME
+NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME
+NM_SETTING_IP_CONFIG_NEVER_DEFAULT
+NM_SETTING_IP_CONFIG_MAY_FAIL
+NMSettingIPConfig
+NMSettingIPConfigClass
+nm_setting_ip_config_get_method
+nm_setting_ip_config_get_num_dns
+nm_setting_ip_config_get_dns
+nm_setting_ip_config_add_dns
+nm_setting_ip_config_remove_dns
+nm_setting_ip_config_remove_dns_by_value
+nm_setting_ip_config_clear_dns
+nm_setting_ip_config_get_num_dns_searches
+nm_setting_ip_config_get_dns_search
+nm_setting_ip_config_add_dns_search
+nm_setting_ip_config_remove_dns_search
+nm_setting_ip_config_remove_dns_search_by_value
+nm_setting_ip_config_clear_dns_searches
+nm_setting_ip_config_get_num_addresses
+nm_setting_ip_config_get_address
+nm_setting_ip_config_add_address
+nm_setting_ip_config_remove_address
+nm_setting_ip_config_remove_address_by_value
+nm_setting_ip_config_clear_addresses
+nm_setting_ip_config_get_gateway
+nm_setting_ip_config_get_num_routes
+nm_setting_ip_config_get_route
+nm_setting_ip_config_add_route
+nm_setting_ip_config_remove_route
+nm_setting_ip_config_remove_route_by_value
+nm_setting_ip_config_clear_routes
+nm_setting_ip_config_get_route_metric
+nm_setting_ip_config_get_ignore_auto_routes
+nm_setting_ip_config_get_ignore_auto_dns
+nm_setting_ip_config_get_dhcp_hostname
+nm_setting_ip_config_get_dhcp_send_hostname
+nm_setting_ip_config_get_never_default
+nm_setting_ip_config_get_may_fail
+<SUBSECTION Standard>
+NM_IS_SETTING_IP_CONFIG
+NM_IS_SETTING_IP_CONFIG_CLASS
+NM_SETTING_IP_CONFIG
+NM_SETTING_IP_CONFIG_CLASS
+NM_SETTING_IP_CONFIG_GET_CLASS
+NM_TYPE_SETTING_IP_CONFIG
+nm_ip_address_get_type
+nm_ip_route_get_type
+nm_setting_ip_config_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-setting-ip4-config</FILE>
+<TITLE>NMSettingIP4Config</TITLE>
+NM_SETTING_IP4_CONFIG_SETTING_NAME
+NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID
+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
+NMSettingIP4Config
+NMSettingIP4ConfigClass
+nm_setting_ip4_config_new
+nm_setting_ip4_config_get_dhcp_client_id
+<SUBSECTION Standard>
+NM_IS_SETTING_IP4_CONFIG
+NM_IS_SETTING_IP4_CONFIG_CLASS
+NM_SETTING_IP4_CONFIG
+NM_SETTING_IP4_CONFIG_CLASS
+NM_SETTING_IP4_CONFIG_GET_CLASS
+NM_TYPE_SETTING_IP4_CONFIG
+nm_setting_ip4_config_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-setting-ip6-config</FILE>
+<TITLE>NMSettingIP6Config</TITLE>
+NM_SETTING_IP6_CONFIG_SETTING_NAME
+NM_SETTING_IP6_CONFIG_IP6_PRIVACY
+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
+NMSettingIP6ConfigPrivacy
+NMSettingIP6Config
+NMSettingIP6ConfigClass
+nm_setting_ip6_config_new
+nm_setting_ip6_config_get_ip6_privacy
+<SUBSECTION Standard>
+NM_IS_SETTING_IP6_CONFIG
+NM_IS_SETTING_IP6_CONFIG_CLASS
+NM_SETTING_IP6_CONFIG
+NM_SETTING_IP6_CONFIG_CLASS
+NM_SETTING_IP6_CONFIG_GET_CLASS
+NM_TYPE_SETTING_IP6_CONFIG
+nm_setting_ip6_config_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-setting-olpc-mesh</FILE>
+<TITLE>NMSettingOlpcMesh</TITLE>
+NM_SETTING_OLPC_MESH_SETTING_NAME
+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>
+NM_IS_SETTING_OLPC_MESH
+NM_IS_SETTING_OLPC_MESH_CLASS
+NM_SETTING_OLPC_MESH
+NM_SETTING_OLPC_MESH_CLASS
+NM_SETTING_OLPC_MESH_GET_CLASS
+NM_TYPE_SETTING_OLPC_MESH
+nm_setting_olpc_mesh_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-setting-ppp</FILE>
+<TITLE>NMSettingPpp</TITLE>
+NM_SETTING_PPP_SETTING_NAME
+NM_SETTING_PPP_NOAUTH
+NM_SETTING_PPP_REFUSE_EAP
+NM_SETTING_PPP_REFUSE_PAP
+NM_SETTING_PPP_REFUSE_CHAP
+NM_SETTING_PPP_REFUSE_MSCHAP
+NM_SETTING_PPP_REFUSE_MSCHAPV2
+NM_SETTING_PPP_NOBSDCOMP
+NM_SETTING_PPP_NODEFLATE
+NM_SETTING_PPP_NO_VJ_COMP
+NM_SETTING_PPP_REQUIRE_MPPE
+NM_SETTING_PPP_REQUIRE_MPPE_128
+NM_SETTING_PPP_MPPE_STATEFUL
+NM_SETTING_PPP_CRTSCTS
+NM_SETTING_PPP_BAUD
+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
+nm_setting_ppp_get_refuse_pap
+nm_setting_ppp_get_refuse_chap
+nm_setting_ppp_get_refuse_mschap
+nm_setting_ppp_get_refuse_mschapv2
+nm_setting_ppp_get_nobsdcomp
+nm_setting_ppp_get_nodeflate
+nm_setting_ppp_get_no_vj_comp
+nm_setting_ppp_get_require_mppe
+nm_setting_ppp_get_require_mppe_128
+nm_setting_ppp_get_mppe_stateful
+nm_setting_ppp_get_crtscts
+nm_setting_ppp_get_baud
+nm_setting_ppp_get_mru
+nm_setting_ppp_get_mtu
+nm_setting_ppp_get_lcp_echo_failure
+nm_setting_ppp_get_lcp_echo_interval
+<SUBSECTION Standard>
+NM_IS_SETTING_PPP
+NM_IS_SETTING_PPP_CLASS
+NM_SETTING_PPP
+NM_SETTING_PPP_CLASS
+NM_SETTING_PPP_GET_CLASS
+NM_TYPE_SETTING_PPP
+nm_setting_ppp_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-setting-pppoe</FILE>
+<TITLE>NMSettingPppoe</TITLE>
+NM_SETTING_PPPOE_SETTING_NAME
+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>
+NM_IS_SETTING_PPPOE
+NM_IS_SETTING_PPPOE_CLASS
+NM_SETTING_PPPOE
+NM_SETTING_PPPOE_CLASS
+NM_SETTING_PPPOE_GET_CLASS
+NM_TYPE_SETTING_PPPOE
+nm_setting_pppoe_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-setting-serial</FILE>
+<TITLE>NMSettingSerial</TITLE>
+NM_SETTING_SERIAL_SETTING_NAME
+NMSettingSerialParity
+NM_SETTING_SERIAL_BAUD
+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
+nm_setting_serial_get_parity
+nm_setting_serial_get_stopbits
+nm_setting_serial_get_send_delay
+<SUBSECTION Standard>
+NM_IS_SETTING_SERIAL
+NM_IS_SETTING_SERIAL_CLASS
+NM_SETTING_SERIAL
+NM_SETTING_SERIAL_CLASS
+NM_SETTING_SERIAL_GET_CLASS
+NM_TYPE_SETTING_SERIAL
+nm_setting_serial_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-setting-team</FILE>
+<TITLE>NMSettingTeam</TITLE>
+NM_SETTING_TEAM_SETTING_NAME
+NM_SETTING_TEAM_CONFIG
+NMSettingTeam
+NMSettingTeamClass
+nm_setting_team_new
+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
+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
+NM_SETTING_VLAN_PARENT
+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
+nm_setting_vlan_get_parent
+nm_setting_vlan_get_id
+nm_setting_vlan_get_flags
+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>
+NM_IS_SETTING_VLAN
+NM_IS_SETTING_VLAN_CLASS
+NM_SETTING_VLAN
+NM_SETTING_VLAN_CLASS
+NM_SETTING_VLAN_GET_CLASS
+NM_TYPE_SETTING_VLAN
+nm_setting_vlan_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-setting-vpn</FILE>
+<TITLE>NMSettingVpn</TITLE>
+NM_SETTING_VPN_SETTING_NAME
+NM_SETTING_VPN_SERVICE_TYPE
+NM_SETTING_VPN_USER_NAME
+NM_SETTING_VPN_PERSISTENT
+NM_SETTING_VPN_DATA
+NM_SETTING_VPN_SECRETS
+NMSettingVpn
+NMSettingVpnClass
+NMVpnIterFunc
+nm_setting_vpn_new
+nm_setting_vpn_get_service_type
+nm_setting_vpn_get_user_name
+nm_setting_vpn_get_persistent
+nm_setting_vpn_get_num_data_items
+nm_setting_vpn_add_data_item
+nm_setting_vpn_get_data_item
+nm_setting_vpn_remove_data_item
+nm_setting_vpn_foreach_data_item
+nm_setting_vpn_get_num_secrets
+nm_setting_vpn_add_secret
+nm_setting_vpn_get_secret
+nm_setting_vpn_remove_secret
+nm_setting_vpn_foreach_secret
+<SUBSECTION Standard>
+NM_IS_SETTING_VPN
+NM_IS_SETTING_VPN_CLASS
+NM_SETTING_VPN
+NM_SETTING_VPN_CLASS
+NM_SETTING_VPN_GET_CLASS
+NM_TYPE_SETTING_VPN
+nm_setting_vpn_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-setting-wimax</FILE>
+<TITLE>NMSettingWimax</TITLE>
+NM_SETTING_WIMAX_SETTING_NAME
+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>
+NM_IS_SETTING_WIMAX
+NM_IS_SETTING_WIMAX_CLASS
+NM_SETTING_WIMAX
+NM_SETTING_WIMAX_CLASS
+NM_SETTING_WIMAX_GET_CLASS
+NM_TYPE_SETTING_WIMAX
+nm_setting_wimax_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-setting-wired</FILE>
+<TITLE>NMSettingWired</TITLE>
+NM_SETTING_WIRED_SETTING_NAME
+NM_SETTING_WIRED_PORT
+NM_SETTING_WIRED_SPEED
+NM_SETTING_WIRED_DUPLEX
+NM_SETTING_WIRED_AUTO_NEGOTIATE
+NM_SETTING_WIRED_MAC_ADDRESS
+NM_SETTING_WIRED_CLONED_MAC_ADDRESS
+NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST
+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
+nm_setting_wired_get_duplex
+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
+nm_setting_wired_get_num_s390_options
+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>
+NM_IS_SETTING_WIRED
+NM_IS_SETTING_WIRED_CLASS
+NM_SETTING_WIRED
+NM_SETTING_WIRED_CLASS
+NM_SETTING_WIRED_GET_CLASS
+NM_TYPE_SETTING_WIRED
+nm_setting_wired_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-setting-wireless</FILE>
+<TITLE>NMSettingWireless</TITLE>
+NM_SETTING_WIRELESS_SETTING_NAME
+NM_SETTING_WIRELESS_SSID
+NM_SETTING_WIRELESS_MODE
+NM_SETTING_WIRELESS_BAND
+NM_SETTING_WIRELESS_CHANNEL
+NM_SETTING_WIRELESS_BSSID
+NM_SETTING_WIRELESS_RATE
+NM_SETTING_WIRELESS_TX_POWER
+NM_SETTING_WIRELESS_MAC_ADDRESS
+NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS
+NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST
+NM_SETTING_WIRELESS_MTU
+NM_SETTING_WIRELESS_SEEN_BSSIDS
+NM_SETTING_WIRELESS_HIDDEN
+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
+nm_setting_wireless_get_band
+nm_setting_wireless_get_channel
+nm_setting_wireless_get_bssid
+nm_setting_wireless_get_rate
+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_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
+<SUBSECTION Standard>
+NM_IS_SETTING_WIRELESS
+NM_IS_SETTING_WIRELESS_CLASS
+NM_SETTING_WIRELESS
+NM_SETTING_WIRELESS_CLASS
+NM_SETTING_WIRELESS_GET_CLASS
+NM_TYPE_SETTING_WIRELESS
+nm_setting_wireless_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-setting-wireless-security</FILE>
+<TITLE>NMSettingWirelessSecurity</TITLE>
+NM_SETTING_WIRELESS_SECURITY_SETTING_NAME
+NMWepKeyType
+NM_SETTING_WIRELESS_SECURITY_KEY_MGMT
+NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX
+NM_SETTING_WIRELESS_SECURITY_AUTH_ALG
+NM_SETTING_WIRELESS_SECURITY_PROTO
+NM_SETTING_WIRELESS_SECURITY_PAIRWISE
+NM_SETTING_WIRELESS_SECURITY_GROUP
+NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME
+NM_SETTING_WIRELESS_SECURITY_WEP_KEY0
+NM_SETTING_WIRELESS_SECURITY_WEP_KEY1
+NM_SETTING_WIRELESS_SECURITY_WEP_KEY2
+NM_SETTING_WIRELESS_SECURITY_WEP_KEY3
+NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS
+NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE
+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
+nm_setting_wireless_security_get_leap_username
+nm_setting_wireless_security_get_leap_password
+nm_setting_wireless_security_get_leap_password_flags
+nm_setting_wireless_security_get_wep_key
+nm_setting_wireless_security_set_wep_key
+nm_setting_wireless_security_get_wep_tx_keyidx
+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>
+NM_IS_SETTING_WIRELESS_SECURITY
+NM_IS_SETTING_WIRELESS_SECURITY_CLASS
+NM_SETTING_WIRELESS_SECURITY
+NM_SETTING_WIRELESS_SECURITY_CLASS
+NM_SETTING_WIRELESS_SECURITY_GET_CLASS
+NM_TYPE_SETTING_WIRELESS_SECURITY
+nm_setting_wireless_security_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-simple-connection</FILE>
+<TITLE>NMSimpleConnection</TITLE>
+NMSimpleConnection
+NMSimpleConnectionClass
+nm_simple_connection_new
+nm_simple_connection_new_from_dbus
+nm_simple_connection_new_clone
+<SUBSECTION Standard>
+NM_IS_SIMPLE_CONNECTION
+NM_IS_SIMPLE_CONNECTION_CLASS
+NM_SIMPLE_CONNECTION
+NM_SIMPLE_CONNECTION_CLASS
+NM_SIMPLE_CONNECTION_GET_CLASS
+NM_TYPE_SIMPLE_CONNECTION
+nm_simple_connection_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-utils</FILE>
+nm_utils_is_empty_ssid
+nm_utils_escape_ssid
+nm_utils_same_ssid
+nm_utils_ssid_to_utf8
+NMUtilsSecurityType
+nm_utils_security_valid
+nm_utils_ap_mode_security_valid
+nm_utils_wep_key_valid
+nm_utils_wpa_psk_valid
+nm_utils_ip4_dns_to_variant
+nm_utils_ip4_dns_from_variant
+nm_utils_ip4_addresses_to_variant
+nm_utils_ip4_addresses_from_variant
+nm_utils_ip4_routes_to_variant
+nm_utils_ip4_routes_from_variant
+nm_utils_ip4_netmask_to_prefix
+nm_utils_ip4_prefix_to_netmask
+nm_utils_ip4_get_default_prefix
+nm_utils_ip6_dns_to_variant
+nm_utils_ip6_dns_from_variant
+nm_utils_ip6_addresses_to_variant
+nm_utils_ip6_addresses_from_variant
+nm_utils_ip6_routes_to_variant
+nm_utils_ip6_routes_from_variant
+nm_utils_ip_addresses_to_variant
+nm_utils_ip_addresses_from_variant
+nm_utils_ip_routes_to_variant
+nm_utils_ip_routes_from_variant
+nm_utils_uuid_generate
+nm_utils_file_is_certificate
+nm_utils_file_is_private_key
+nm_utils_file_is_pkcs12
+NMUtilsFileSearchInPathsPredicate
+nm_utils_file_search_in_paths
+nm_utils_wifi_freq_to_channel
+nm_utils_wifi_channel_to_freq
+nm_utils_wifi_find_next_channel
+nm_utils_wifi_is_channel_valid
+nm_utils_wifi_strength_bars
+NM_UTILS_HWADDR_LEN_MAX
+nm_utils_hwaddr_len
+nm_utils_hwaddr_ntoa
+nm_utils_hwaddr_atoba
+nm_utils_hwaddr_aton
+nm_utils_hwaddr_valid
+nm_utils_hwaddr_canonical
+nm_utils_hwaddr_matches
+nm_utils_bin2hexstr
+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_ipaddr_valid
+nm_utils_check_virtual_device_compatibility
+</SECTION>
+
+<SECTION>
+<FILE>nm-version</FILE>
+NM_MAJOR_VERSION
+NM_MINOR_VERSION
+NM_MICRO_VERSION
+NM_CHECK_VERSION
+NM_ENCODE_VERSION
+NM_VERSION_0_9_8
+NM_VERSION_0_9_10
+NM_VERSION_1_0
+NM_VERSION_CUR_STABLE
+NM_VERSION_NEXT_STABLE
+NM_VERSION_MIN_REQUIRED
+NM_VERSION_MAX_ALLOWED
+NM_DEPRECATED_IN_0_9_10
+NM_DEPRECATED_IN_0_9_10_FOR
+NM_DEPRECATED_IN_1_0
+NM_DEPRECATED_IN_1_0_FOR
+NM_AVAILABLE_IN_0_9_10
+NM_AVAILABLE_IN_1_0
+</SECTION>
+
+<SECTION>
+<FILE>nm-vpn-connection</FILE>
+<TITLE>NMVpnConnection</TITLE>
+NM_VPN_CONNECTION_VPN_STATE
+NM_VPN_CONNECTION_BANNER
+NMVpnConnection
+NMVpnConnectionClass
+nm_vpn_connection_get_vpn_state
+nm_vpn_connection_get_banner
+<SUBSECTION Standard>
+NM_IS_VPN_CONNECTION
+NM_IS_VPN_CONNECTION_CLASS
+NM_TYPE_VPN_CONNECTION
+NM_VPN_CONNECTION
+NM_VPN_CONNECTION_CLASS
+NM_VPN_CONNECTION_GET_CLASS
+nm_vpn_connection_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-vpn-dbus-interface</FILE>
+NM_DBUS_PATH_VPN
+NM_DBUS_INTERFACE_VPN
+NM_DBUS_PATH_VPN_CONNECTION
+NM_DBUS_INTERFACE_VPN_CONNECTION
+NM_VPN_DBUS_PLUGIN_PATH
+NM_VPN_DBUS_PLUGIN_INTERFACE
+NM_DBUS_NO_ACTIVE_VPN_CONNECTION
+NM_DBUS_NO_VPN_CONNECTIONS
+NM_DBUS_INVALID_VPN_CONNECTION
+NM_DBUS_VPN_ERROR_PREFIX
+NM_DBUS_VPN_STARTING_IN_PROGRESS
+NM_DBUS_VPN_ALREADY_STARTED
+NM_DBUS_VPN_STOPPING_IN_PROGRESS
+NM_DBUS_VPN_ALREADY_STOPPED
+NM_DBUS_VPN_WRONG_STATE
+NM_DBUS_VPN_BAD_ARGUMENTS
+NM_DBUS_VPN_INTERACTIVE_NOT_SUPPORTED
+NM_DBUS_VPN_SIGNAL_LOGIN_BANNER
+NM_DBUS_VPN_SIGNAL_LOGIN_FAILED
+NM_DBUS_VPN_SIGNAL_LAUNCH_FAILED
+NM_DBUS_VPN_SIGNAL_CONNECT_FAILED
+NM_DBUS_VPN_SIGNAL_VPN_CONFIG_BAD
+NM_DBUS_VPN_SIGNAL_IP_CONFIG_BAD
+NM_DBUS_VPN_SIGNAL_STATE_CHANGE
+NM_DBUS_VPN_SIGNAL_IP4_CONFIG
+NMVpnServiceState
+NMVpnConnectionState
+NMVpnConnectionStateReason
+NMVpnPluginFailure
+NM_VPN_PLUGIN_CONFIG_TUNDEV
+NM_VPN_PLUGIN_CONFIG_BANNER
+NM_VPN_PLUGIN_CONFIG_EXT_GATEWAY
+NM_VPN_PLUGIN_CONFIG_MTU
+NM_VPN_PLUGIN_CONFIG_HAS_IP4
+NM_VPN_PLUGIN_CONFIG_HAS_IP6
+NM_VPN_PLUGIN_CAN_PERSIST
+NM_VPN_PLUGIN_IP4_CONFIG_INT_GATEWAY
+NM_VPN_PLUGIN_IP4_CONFIG_ADDRESS
+NM_VPN_PLUGIN_IP4_CONFIG_PTP
+NM_VPN_PLUGIN_IP4_CONFIG_PREFIX
+NM_VPN_PLUGIN_IP4_CONFIG_DNS
+NM_VPN_PLUGIN_IP4_CONFIG_NBNS
+NM_VPN_PLUGIN_IP4_CONFIG_MSS
+NM_VPN_PLUGIN_IP4_CONFIG_DOMAIN
+NM_VPN_PLUGIN_IP4_CONFIG_DOMAINS
+NM_VPN_PLUGIN_IP4_CONFIG_ROUTES
+NM_VPN_PLUGIN_IP4_CONFIG_NEVER_DEFAULT
+NM_VPN_PLUGIN_IP4_CONFIG_GATEWAY
+NM_VPN_PLUGIN_IP4_CONFIG_BANNER
+NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY
+NM_VPN_PLUGIN_IP4_CONFIG_MTU
+NM_VPN_PLUGIN_IP4_CONFIG_TUNDEV
+NM_VPN_PLUGIN_IP6_CONFIG_INT_GATEWAY
+NM_VPN_PLUGIN_IP6_CONFIG_ADDRESS
+NM_VPN_PLUGIN_IP6_CONFIG_PTP
+NM_VPN_PLUGIN_IP6_CONFIG_PREFIX
+NM_VPN_PLUGIN_IP6_CONFIG_DNS
+NM_VPN_PLUGIN_IP6_CONFIG_MSS
+NM_VPN_PLUGIN_IP6_CONFIG_DOMAIN
+NM_VPN_PLUGIN_IP6_CONFIG_DOMAINS
+NM_VPN_PLUGIN_IP6_CONFIG_ROUTES
+NM_VPN_PLUGIN_IP6_CONFIG_NEVER_DEFAULT
+</SECTION>
+
+<SECTION>
+<FILE>nm-vpn-editor-plugin</FILE>
+<TITLE>NMVpnEditor</TITLE>
+<TITLE>NMVpnEditorPlugin</TITLE>
+NMVpnEditorPluginFactory
+nm_vpn_editor_plugin_factory
+NMVpnEditorPluginCapability
+NM_VPN_EDITOR_PLUGIN_NAME
+NM_VPN_EDITOR_PLUGIN_DESCRIPTION
+NM_VPN_EDITOR_PLUGIN_SERVICE
+NMVpnEditorPluginInterface
+nm_vpn_editor_plugin_get_editor
+nm_vpn_editor_plugin_get_capabilities
+nm_vpn_editor_plugin_import
+nm_vpn_editor_plugin_export
+nm_vpn_editor_plugin_get_suggested_filename
+NMVpnEditorInterface
+nm_vpn_editor_get_widget
+nm_vpn_editor_update_connection
+<SUBSECTION Standard>
+NM_IS_VPN_EDITOR
+NM_IS_VPN_EDITOR_PLUGIN
+NM_TYPE_VPN_EDITOR
+NM_TYPE_VPN_EDITOR_PLUGIN
+NM_VPN_EDITOR
+NM_VPN_EDITOR_GET_INTERFACE
+NM_VPN_EDITOR_PLUGIN
+NM_VPN_EDITOR_PLUGIN_GET_INTERFACE
+nm_vpn_editor_get_type
+nm_vpn_editor_plugin_get_type
+</SECTION>
+
+<SECTION>
+<FILE>nm-wimax-nsp</FILE>
+<TITLE>NMWimaxNsp</TITLE>
+NM_WIMAX_NSP_NAME
+NM_WIMAX_NSP_SIGNAL_QUALITY
+NM_WIMAX_NSP_NETWORK_TYPE
+NMWimaxNspNetworkType
+NMWimaxNsp
+NMWimaxNspClass
+nm_wimax_nsp_get_name
+nm_wimax_nsp_get_signal_quality
+nm_wimax_nsp_get_network_type
+nm_wimax_nsp_filter_connections
+nm_wimax_nsp_connection_valid
+<SUBSECTION Standard>
+NM_IS_WIMAX_NSP
+NM_IS_WIMAX_NSP_CLASS
+NM_TYPE_WIMAX_NSP
+NM_WIMAX_NSP
+NM_WIMAX_NSP_CLASS
+NM_WIMAX_NSP_GET_CLASS
+nm_wimax_nsp_get_type
+</SECTION>
+
diff --git a/docs/libnm/libnm.png b/docs/libnm/libnm.png
new file mode 100644
index 000000000..dc0007284
--- /dev/null
+++ b/docs/libnm/libnm.png
Binary files differ
diff --git a/docs/libnm/libnm.types b/docs/libnm/libnm.types
new file mode 100644
index 000000000..c7169090b
--- /dev/null
+++ b/docs/libnm/libnm.types
@@ -0,0 +1,103 @@
+nm_802_11_ap_flags_get_type
+nm_802_11_ap_security_flags_get_type
+nm_802_11_mode_get_type
+nm_access_point_get_type
+nm_active_connection_get_type
+nm_active_connection_state_get_type
+nm_agent_manager_error_get_type
+nm_bluetooth_capabilities_get_type
+nm_client_error_get_type
+nm_client_get_type
+nm_client_permission_get_type
+nm_client_permission_result_get_type
+nm_connection_error_get_type
+nm_connection_get_type
+nm_connection_serialization_flags_get_type
+nm_connectivity_state_get_type
+nm_crypto_error_get_type
+nm_device_adsl_get_type
+nm_device_bond_get_type
+nm_device_bridge_get_type
+nm_device_bt_get_type
+nm_device_capabilities_get_type
+nm_device_error_get_type
+nm_device_ethernet_get_type
+nm_device_generic_get_type
+nm_device_get_type
+nm_device_infiniband_get_type
+nm_device_modem_capabilities_get_type
+nm_device_modem_get_type
+nm_device_olpc_mesh_get_type
+nm_device_state_get_type
+nm_device_state_reason_get_type
+nm_device_team_get_type
+nm_device_type_get_type
+nm_device_vlan_get_type
+nm_device_wifi_capabilities_get_type
+nm_device_wifi_get_type
+nm_device_wimax_get_type
+nm_dhcp_config_get_type
+nm_ip_address_get_type
+nm_ip_config_get_type
+nm_ip_route_get_type
+nm_manager_error_get_type
+nm_object_get_type
+nm_remote_connection_get_type
+nm_secret_agent_capabilities_get_type
+nm_secret_agent_error_get_type
+nm_secret_agent_get_secrets_flags_get_type
+nm_secret_agent_old_get_type
+nm_setting_802_1x_ck_format_get_type
+nm_setting_802_1x_ck_scheme_get_type
+nm_setting_802_1x_get_type
+nm_setting_adsl_get_type
+nm_setting_bluetooth_get_type
+nm_setting_bond_get_type
+nm_setting_bridge_get_type
+nm_setting_bridge_port_get_type
+nm_setting_cdma_get_type
+nm_setting_compare_flags_get_type
+nm_setting_connection_get_type
+nm_setting_dcb_flags_get_type
+nm_setting_dcb_get_type
+nm_setting_diff_result_get_type
+nm_setting_generic_get_type
+nm_setting_get_type
+nm_setting_gsm_get_type
+nm_setting_infiniband_get_type
+nm_setting_ip4_config_get_type
+nm_setting_ip6_config_get_type
+nm_setting_ip6_config_privacy_get_type
+nm_setting_ip_config_get_type
+nm_setting_olpc_mesh_get_type
+nm_setting_ppp_get_type
+nm_setting_pppoe_get_type
+nm_setting_secret_flags_get_type
+nm_setting_serial_get_type
+nm_setting_serial_parity_get_type
+nm_setting_team_get_type
+nm_setting_team_port_get_type
+nm_setting_vlan_get_type
+nm_setting_vpn_get_type
+nm_setting_wimax_get_type
+nm_setting_wired_get_type
+nm_setting_wireless_get_type
+nm_setting_wireless_security_get_type
+nm_settings_error_get_type
+nm_simple_connection_get_type
+nm_state_get_type
+nm_utils_security_type_get_type
+nm_vlan_flags_get_type
+nm_vlan_priority_map_get_type
+nm_vpn_connection_get_type
+nm_vpn_connection_state_get_type
+nm_vpn_connection_state_reason_get_type
+nm_vpn_editor_get_type
+nm_vpn_editor_plugin_capability_get_type
+nm_vpn_editor_plugin_get_type
+nm_vpn_plugin_error_get_type
+nm_vpn_plugin_failure_get_type
+nm_vpn_service_state_get_type
+nm_wep_key_type_get_type
+nm_wimax_nsp_get_type
+nm_wimax_nsp_network_type_get_type
diff --git a/docs/libnm/tmpl/libnm-unused.sgml b/docs/libnm/tmpl/libnm-unused.sgml
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/docs/libnm/tmpl/libnm-unused.sgml
diff --git a/docs/libnm/tmpl/nm-access-point.sgml b/docs/libnm/tmpl/nm-access-point.sgml
new file mode 100644
index 000000000..8673d7666
--- /dev/null
+++ b/docs/libnm/tmpl/nm-access-point.sgml
@@ -0,0 +1,258 @@
+<!-- ##### SECTION Title ##### -->
+NMAccessPoint
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_ACCESS_POINT_FLAGS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_ACCESS_POINT_WPA_FLAGS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_ACCESS_POINT_RSN_FLAGS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_ACCESS_POINT_SSID ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_ACCESS_POINT_BSSID ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_ACCESS_POINT_FREQUENCY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_ACCESS_POINT_MODE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_ACCESS_POINT_MAX_BITRATE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_ACCESS_POINT_STRENGTH ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_ACCESS_POINT_HW_ADDRESS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### 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:
+
+<!-- ##### FUNCTION nm_access_point_get_flags ##### -->
+<para>
+
+</para>
+
+@ap:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_access_point_get_wpa_flags ##### -->
+<para>
+
+</para>
+
+@ap:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_access_point_get_rsn_flags ##### -->
+<para>
+
+</para>
+
+@ap:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_access_point_get_ssid ##### -->
+<para>
+
+</para>
+
+@ap:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_access_point_get_bssid ##### -->
+<para>
+
+</para>
+
+@ap:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_access_point_get_frequency ##### -->
+<para>
+
+</para>
+
+@ap:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_access_point_get_mode ##### -->
+<para>
+
+</para>
+
+@ap:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_access_point_get_max_bitrate ##### -->
+<para>
+
+</para>
+
+@ap:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_access_point_get_strength ##### -->
+<para>
+
+</para>
+
+@ap:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_access_point_filter_connections ##### -->
+<para>
+
+</para>
+
+@ap:
+@connections:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_access_point_connection_valid ##### -->
+<para>
+
+</para>
+
+@ap:
+@connection:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-active-connection.sgml b/docs/libnm/tmpl/nm-active-connection.sgml
new file mode 100644
index 000000000..0fe4bb39d
--- /dev/null
+++ b/docs/libnm/tmpl/nm-active-connection.sgml
@@ -0,0 +1,352 @@
+<!-- ##### SECTION Title ##### -->
+NMActiveConnection
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_ACTIVE_CONNECTION_CONNECTION ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_ACTIVE_CONNECTION_ID ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_ACTIVE_CONNECTION_UUID ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_ACTIVE_CONNECTION_TYPE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT_PATH ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_ACTIVE_CONNECTION_DEVICES ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_ACTIVE_CONNECTION_STATE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_ACTIVE_CONNECTION_DEFAULT ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_ACTIVE_CONNECTION_IP4_CONFIG ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_ACTIVE_CONNECTION_DHCP4_CONFIG ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_ACTIVE_CONNECTION_DEFAULT6 ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### 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>
+
+</para>
+
+
+
+<!-- ##### 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-path ##### -->
+<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:
+
+<!-- ##### FUNCTION nm_active_connection_get_connection ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_active_connection_get_id ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_active_connection_get_uuid ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_active_connection_get_connection_type ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_active_connection_get_specific_object_path ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_active_connection_get_devices ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_active_connection_get_state ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_active_connection_get_master ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_active_connection_get_default ##### -->
+<para>
+
+</para>
+
+@connection:
+@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>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### 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>
+
+@connection:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-client.sgml b/docs/libnm/tmpl/nm-client.sgml
new file mode 100644
index 000000000..32d4edef1
--- /dev/null
+++ b/docs/libnm/tmpl/nm-client.sgml
@@ -0,0 +1,952 @@
+<!-- ##### SECTION Title ##### -->
+NMClient
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_CLIENT_VERSION ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_CLIENT_STATE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_CLIENT_STARTUP ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_CLIENT_NM_RUNNING ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_CLIENT_NETWORKING_ENABLED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_CLIENT_WIRELESS_ENABLED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_CLIENT_WIRELESS_HARDWARE_ENABLED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_CLIENT_WWAN_ENABLED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_CLIENT_WWAN_HARDWARE_ENABLED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_CLIENT_WIMAX_ENABLED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_CLIENT_WIMAX_HARDWARE_ENABLED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_CLIENT_ACTIVE_CONNECTIONS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_CLIENT_CONNECTIVITY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_CLIENT_PRIMARY_CONNECTION ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_CLIENT_ACTIVATING_CONNECTION ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_CLIENT_DEVICES ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_CLIENT_CONNECTIONS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_CLIENT_HOSTNAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_CLIENT_CAN_MODIFY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_CLIENT_DEVICE_ADDED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_CLIENT_DEVICE_REMOVED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_CLIENT_PERMISSION_CHANGED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_CLIENT_CONNECTION_ADDED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_CLIENT_CONNECTION_REMOVED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### ENUM NMClientPermission ##### -->
+<para>
+
+</para>
+
+@NM_CLIENT_PERMISSION_NONE:
+@NM_CLIENT_PERMISSION_ENABLE_DISABLE_NETWORK:
+@NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIFI:
+@NM_CLIENT_PERMISSION_ENABLE_DISABLE_WWAN:
+@NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIMAX:
+@NM_CLIENT_PERMISSION_SLEEP_WAKE:
+@NM_CLIENT_PERMISSION_NETWORK_CONTROL:
+@NM_CLIENT_PERMISSION_WIFI_SHARE_PROTECTED:
+@NM_CLIENT_PERMISSION_WIFI_SHARE_OPEN:
+@NM_CLIENT_PERMISSION_SETTINGS_MODIFY_SYSTEM:
+@NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN:
+@NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME:
+@NM_CLIENT_PERMISSION_LAST:
+
+<!-- ##### ENUM NMClientPermissionResult ##### -->
+<para>
+
+</para>
+
+@NM_CLIENT_PERMISSION_RESULT_UNKNOWN:
+@NM_CLIENT_PERMISSION_RESULT_YES:
+@NM_CLIENT_PERMISSION_RESULT_AUTH:
+@NM_CLIENT_PERMISSION_RESULT_NO:
+
+<!-- ##### ENUM NMClientError ##### -->
+<para>
+
+</para>
+
+@NM_CLIENT_ERROR_FAILED:
+@NM_CLIENT_ERROR_MANAGER_NOT_RUNNING:
+@NM_CLIENT_ERROR_OBJECT_CREATION_FAILED:
+
+<!-- ##### MACRO NM_CLIENT_ERROR ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### FUNCTION nm_client_error_quark ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### STRUCT NMClient ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SIGNAL NMClient::connection-added ##### -->
+<para>
+
+</para>
+
+@nmclient: the object which received the signal.
+@arg1:
+
+<!-- ##### SIGNAL NMClient::connection-removed ##### -->
+<para>
+
+</para>
+
+@nmclient: the object which received the signal.
+@arg1:
+
+<!-- ##### 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:can-modify ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMClient:connections ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMClient:connectivity ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMClient:devices ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMClient:hostname ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMClient:networking-enabled ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMClient:nm-running ##### -->
+<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:
+@connection_added:
+@connection_removed:
+
+<!-- ##### FUNCTION nm_client_new ##### -->
+<para>
+
+</para>
+
+@cancellable:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_new_async ##### -->
+<para>
+
+</para>
+
+@cancellable:
+@callback:
+@user_data:
+
+
+<!-- ##### FUNCTION nm_client_new_finish ##### -->
+<para>
+
+</para>
+
+@result:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_get_version ##### -->
+<para>
+
+</para>
+
+@client:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_get_state ##### -->
+<para>
+
+</para>
+
+@client:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_get_startup ##### -->
+<para>
+
+</para>
+
+@client:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_get_nm_running ##### -->
+<para>
+
+</para>
+
+@client:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_networking_get_enabled ##### -->
+<para>
+
+</para>
+
+@client:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_networking_set_enabled ##### -->
+<para>
+
+</para>
+
+@client:
+@enabled:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_wireless_get_enabled ##### -->
+<para>
+
+</para>
+
+@client:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_wireless_set_enabled ##### -->
+<para>
+
+</para>
+
+@client:
+@enabled:
+
+
+<!-- ##### FUNCTION nm_client_wireless_hardware_get_enabled ##### -->
+<para>
+
+</para>
+
+@client:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_wwan_get_enabled ##### -->
+<para>
+
+</para>
+
+@client:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_wwan_set_enabled ##### -->
+<para>
+
+</para>
+
+@client:
+@enabled:
+
+
+<!-- ##### FUNCTION nm_client_wwan_hardware_get_enabled ##### -->
+<para>
+
+</para>
+
+@client:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_wimax_get_enabled ##### -->
+<para>
+
+</para>
+
+@client:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_wimax_set_enabled ##### -->
+<para>
+
+</para>
+
+@client:
+@enabled:
+
+
+<!-- ##### FUNCTION nm_client_wimax_hardware_get_enabled ##### -->
+<para>
+
+</para>
+
+@client:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_get_logging ##### -->
+<para>
+
+</para>
+
+@client:
+@level:
+@domains:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_set_logging ##### -->
+<para>
+
+</para>
+
+@client:
+@level:
+@domains:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_get_permission_result ##### -->
+<para>
+
+</para>
+
+@client:
+@permission:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_get_connectivity ##### -->
+<para>
+
+</para>
+
+@client:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_check_connectivity ##### -->
+<para>
+
+</para>
+
+@client:
+@cancellable:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_check_connectivity_async ##### -->
+<para>
+
+</para>
+
+@client:
+@cancellable:
+@callback:
+@user_data:
+
+
+<!-- ##### FUNCTION nm_client_check_connectivity_finish ##### -->
+<para>
+
+</para>
+
+@client:
+@result:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_save_hostname ##### -->
+<para>
+
+</para>
+
+@client:
+@hostname:
+@cancellable:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_save_hostname_async ##### -->
+<para>
+
+</para>
+
+@client:
+@hostname:
+@cancellable:
+@callback:
+@user_data:
+
+
+<!-- ##### FUNCTION nm_client_save_hostname_finish ##### -->
+<para>
+
+</para>
+
+@client:
+@result:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_get_devices ##### -->
+<para>
+
+</para>
+
+@client:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_get_device_by_path ##### -->
+<para>
+
+</para>
+
+@client:
+@object_path:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_get_device_by_iface ##### -->
+<para>
+
+</para>
+
+@client:
+@iface:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_get_active_connections ##### -->
+<para>
+
+</para>
+
+@client:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_get_primary_connection ##### -->
+<para>
+
+</para>
+
+@client:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_get_activating_connection ##### -->
+<para>
+
+</para>
+
+@client:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_activate_connection_async ##### -->
+<para>
+
+</para>
+
+@client:
+@connection:
+@device:
+@specific_object:
+@cancellable:
+@callback:
+@user_data:
+
+
+<!-- ##### FUNCTION nm_client_activate_connection_finish ##### -->
+<para>
+
+</para>
+
+@client:
+@result:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_add_and_activate_connection_async ##### -->
+<para>
+
+</para>
+
+@client:
+@partial:
+@device:
+@specific_object:
+@cancellable:
+@callback:
+@user_data:
+
+
+<!-- ##### FUNCTION nm_client_add_and_activate_connection_finish ##### -->
+<para>
+
+</para>
+
+@client:
+@result:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_deactivate_connection ##### -->
+<para>
+
+</para>
+
+@client:
+@active:
+@cancellable:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_deactivate_connection_async ##### -->
+<para>
+
+</para>
+
+@client:
+@active:
+@cancellable:
+@callback:
+@user_data:
+
+
+<!-- ##### FUNCTION nm_client_deactivate_connection_finish ##### -->
+<para>
+
+</para>
+
+@client:
+@result:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_get_connections ##### -->
+<para>
+
+</para>
+
+@client:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_get_connection_by_id ##### -->
+<para>
+
+</para>
+
+@client:
+@id:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_get_connection_by_path ##### -->
+<para>
+
+</para>
+
+@client:
+@path:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_get_connection_by_uuid ##### -->
+<para>
+
+</para>
+
+@client:
+@uuid:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_add_connection_async ##### -->
+<para>
+
+</para>
+
+@client:
+@connection:
+@save_to_disk:
+@cancellable:
+@callback:
+@user_data:
+
+
+<!-- ##### FUNCTION nm_client_add_connection_finish ##### -->
+<para>
+
+</para>
+
+@client:
+@result:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_load_connections ##### -->
+<para>
+
+</para>
+
+@client:
+@filenames:
+@failures:
+@cancellable:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_load_connections_async ##### -->
+<para>
+
+</para>
+
+@client:
+@filenames:
+@cancellable:
+@callback:
+@user_data:
+
+
+<!-- ##### FUNCTION nm_client_load_connections_finish ##### -->
+<para>
+
+</para>
+
+@client:
+@failures:
+@result:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_reload_connections ##### -->
+<para>
+
+</para>
+
+@client:
+@cancellable:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_client_reload_connections_async ##### -->
+<para>
+
+</para>
+
+@client:
+@cancellable:
+@callback:
+@user_data:
+
+
+<!-- ##### FUNCTION nm_client_reload_connections_finish ##### -->
+<para>
+
+</para>
+
+@client:
+@result:
+@error:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-connection.sgml b/docs/libnm/tmpl/nm-connection.sgml
new file mode 100644
index 000000000..804f0cb24
--- /dev/null
+++ b/docs/libnm/tmpl/nm-connection.sgml
@@ -0,0 +1,573 @@
+<!-- ##### SECTION Title ##### -->
+NMConnection
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### 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_NORMALIZE_PARAM_IP6_CONFIG_METHOD ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### STRUCT NMConnectionInterface ##### -->
+<para>
+
+</para>
+
+@parent:
+@secrets_updated:
+@secrets_cleared:
+@changed:
+
+<!-- ##### FUNCTION nm_connection_add_setting ##### -->
+<para>
+
+</para>
+
+@connection:
+@setting:
+
+
+<!-- ##### FUNCTION nm_connection_remove_setting ##### -->
+<para>
+
+</para>
+
+@connection:
+@setting_type:
+
+
+<!-- ##### FUNCTION nm_connection_get_setting ##### -->
+<para>
+
+</para>
+
+@connection:
+@setting_type:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_get_setting_by_name ##### -->
+<para>
+
+</para>
+
+@connection:
+@name:
+@Returns:
+
+
+<!-- ##### MACRO NM_VARIANT_TYPE_SETTING ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### ENUM NMConnectionSerializationFlags ##### -->
+<para>
+
+</para>
+
+@NM_CONNECTION_SERIALIZE_ALL:
+@NM_CONNECTION_SERIALIZE_NO_SECRETS:
+@NM_CONNECTION_SERIALIZE_ONLY_SECRETS:
+
+<!-- ##### FUNCTION nm_connection_to_dbus ##### -->
+<para>
+
+</para>
+
+@connection:
+@flags:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_replace_settings ##### -->
+<para>
+
+</para>
+
+@connection:
+@new_settings:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_replace_settings_from_connection ##### -->
+<para>
+
+</para>
+
+@connection:
+@new_connection:
+
+
+<!-- ##### FUNCTION nm_connection_clear_settings ##### -->
+<para>
+
+</para>
+
+@connection:
+
+
+<!-- ##### FUNCTION nm_connection_compare ##### -->
+<para>
+
+</para>
+
+@a:
+@b:
+@flags:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_diff ##### -->
+<para>
+
+</para>
+
+@a:
+@b:
+@flags:
+@out_settings:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_verify ##### -->
+<para>
+
+</para>
+
+@connection:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_normalize ##### -->
+<para>
+
+</para>
+
+@connection:
+@parameters:
+@modified:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_need_secrets ##### -->
+<para>
+
+</para>
+
+@connection:
+@hints:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_clear_secrets ##### -->
+<para>
+
+</para>
+
+@connection:
+
+
+<!-- ##### FUNCTION nm_connection_clear_secrets_with_flags ##### -->
+<para>
+
+</para>
+
+@connection:
+@func:
+@user_data:
+
+
+<!-- ##### FUNCTION nm_connection_update_secrets ##### -->
+<para>
+
+</para>
+
+@connection:
+@setting_name:
+@secrets:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_set_path ##### -->
+<para>
+
+</para>
+
+@connection:
+@path:
+
+
+<!-- ##### FUNCTION nm_connection_get_path ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_get_interface_name ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_is_type ##### -->
+<para>
+
+</para>
+
+@connection:
+@type:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_for_each_setting_value ##### -->
+<para>
+
+</para>
+
+@connection:
+@func:
+@user_data:
+
+
+<!-- ##### FUNCTION nm_connection_dump ##### -->
+<para>
+
+</para>
+
+@connection:
+
+
+<!-- ##### FUNCTION nm_connection_get_uuid ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_get_id ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_get_connection_type ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_is_virtual ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_get_virtual_device_description ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_get_setting_802_1x ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_get_setting_bluetooth ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_get_setting_bond ##### -->
+<para>
+
+</para>
+
+@connection:
+@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>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_get_setting_bridge_port ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_get_setting_cdma ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_get_setting_connection ##### -->
+<para>
+
+</para>
+
+@connection:
+@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>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_get_setting_infiniband ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_get_setting_ip4_config ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_get_setting_ip6_config ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_get_setting_olpc_mesh ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_get_setting_ppp ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_get_setting_pppoe ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_get_setting_serial ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_get_setting_vpn ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_get_setting_wimax ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_get_setting_adsl ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_get_setting_wired ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_get_setting_wireless ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_get_setting_wireless_security ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_connection_get_setting_vlan ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-core-enum-types.sgml b/docs/libnm/tmpl/nm-core-enum-types.sgml
new file mode 100644
index 000000000..68f14ec30
--- /dev/null
+++ b/docs/libnm/tmpl/nm-core-enum-types.sgml
@@ -0,0 +1,24 @@
+<!-- ##### SECTION Title ##### -->
+nm-core-enum-types
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
diff --git a/docs/libnm/tmpl/nm-dbus-interface.sgml b/docs/libnm/tmpl/nm-dbus-interface.sgml
new file mode 100644
index 000000000..287ab8c71
--- /dev/null
+++ b/docs/libnm/tmpl/nm-dbus-interface.sgml
@@ -0,0 +1,548 @@
+<!-- ##### SECTION Title ##### -->
+nm-dbus-interface
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_DBUS_SERVICE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_PATH ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE_WIRED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE_ADSL ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE_WIRELESS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE_BLUETOOTH ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE_OLPC_MESH ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_PATH_ACCESS_POINT ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_ACCESS_POINT ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE_MODEM ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE_WIMAX ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_WIMAX_NSP ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_PATH_WIMAX_NSP ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_ACTIVE_CONNECTION ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_IP4_CONFIG ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DHCP4_CONFIG ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_IP6_CONFIG ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DHCP6_CONFIG ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE_INFINIBAND ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE_BOND ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE_TEAM ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE_VLAN ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE_BRIDGE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE_GENERIC ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE_VETH ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE_TUN ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE_MACVLAN ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE_VXLAN ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_DEVICE_GRE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_SETTINGS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_PATH_SETTINGS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_SETTINGS_CONNECTION ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_PATH_SETTINGS_CONNECTION ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_SETTINGS_CONNECTION_SECRETS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_AGENT_MANAGER ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_PATH_AGENT_MANAGER ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_SECRET_AGENT ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_PATH_SECRET_AGENT ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### ENUM NMState ##### -->
+<para>
+
+</para>
+
+@NM_STATE_UNKNOWN:
+@NM_STATE_ASLEEP:
+@NM_STATE_DISCONNECTED:
+@NM_STATE_DISCONNECTING:
+@NM_STATE_CONNECTING:
+@NM_STATE_CONNECTED_LOCAL:
+@NM_STATE_CONNECTED_SITE:
+@NM_STATE_CONNECTED_GLOBAL:
+
+<!-- ##### ENUM NMConnectivityState ##### -->
+<para>
+
+</para>
+
+@NM_CONNECTIVITY_UNKNOWN:
+@NM_CONNECTIVITY_NONE:
+@NM_CONNECTIVITY_PORTAL:
+@NM_CONNECTIVITY_LIMITED:
+@NM_CONNECTIVITY_FULL:
+
+<!-- ##### ENUM NMDeviceType ##### -->
+<para>
+
+</para>
+
+@NM_DEVICE_TYPE_UNKNOWN:
+@NM_DEVICE_TYPE_ETHERNET:
+@NM_DEVICE_TYPE_WIFI:
+@NM_DEVICE_TYPE_UNUSED1:
+@NM_DEVICE_TYPE_UNUSED2:
+@NM_DEVICE_TYPE_BT:
+@NM_DEVICE_TYPE_OLPC_MESH:
+@NM_DEVICE_TYPE_WIMAX:
+@NM_DEVICE_TYPE_MODEM:
+@NM_DEVICE_TYPE_INFINIBAND:
+@NM_DEVICE_TYPE_BOND:
+@NM_DEVICE_TYPE_VLAN:
+@NM_DEVICE_TYPE_ADSL:
+@NM_DEVICE_TYPE_BRIDGE:
+@NM_DEVICE_TYPE_GENERIC:
+@NM_DEVICE_TYPE_TEAM:
+
+<!-- ##### ENUM NMDeviceCapabilities ##### -->
+<para>
+
+</para>
+
+@NM_DEVICE_CAP_NONE:
+@NM_DEVICE_CAP_NM_SUPPORTED:
+@NM_DEVICE_CAP_CARRIER_DETECT:
+@NM_DEVICE_CAP_IS_SOFTWARE:
+
+<!-- ##### ENUM NMDeviceWifiCapabilities ##### -->
+<para>
+
+</para>
+
+@NM_WIFI_DEVICE_CAP_NONE:
+@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:
+
+<!-- ##### ENUM NM80211ApFlags ##### -->
+<para>
+
+</para>
+
+@NM_802_11_AP_FLAGS_NONE:
+@NM_802_11_AP_FLAGS_PRIVACY:
+
+<!-- ##### ENUM NM80211ApSecurityFlags ##### -->
+<para>
+
+</para>
+
+@NM_802_11_AP_SEC_NONE:
+@NM_802_11_AP_SEC_PAIR_WEP40:
+@NM_802_11_AP_SEC_PAIR_WEP104:
+@NM_802_11_AP_SEC_PAIR_TKIP:
+@NM_802_11_AP_SEC_PAIR_CCMP:
+@NM_802_11_AP_SEC_GROUP_WEP40:
+@NM_802_11_AP_SEC_GROUP_WEP104:
+@NM_802_11_AP_SEC_GROUP_TKIP:
+@NM_802_11_AP_SEC_GROUP_CCMP:
+@NM_802_11_AP_SEC_KEY_MGMT_PSK:
+@NM_802_11_AP_SEC_KEY_MGMT_802_1X:
+
+<!-- ##### ENUM NM80211Mode ##### -->
+<para>
+
+</para>
+
+@NM_802_11_MODE_UNKNOWN:
+@NM_802_11_MODE_ADHOC:
+@NM_802_11_MODE_INFRA:
+@NM_802_11_MODE_AP:
+
+<!-- ##### ENUM NMBluetoothCapabilities ##### -->
+<para>
+
+</para>
+
+@NM_BT_CAPABILITY_NONE:
+@NM_BT_CAPABILITY_DUN:
+@NM_BT_CAPABILITY_NAP:
+
+<!-- ##### ENUM NMDeviceModemCapabilities ##### -->
+<para>
+
+</para>
+
+@NM_DEVICE_MODEM_CAPABILITY_NONE:
+@NM_DEVICE_MODEM_CAPABILITY_POTS:
+@NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO:
+@NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS:
+@NM_DEVICE_MODEM_CAPABILITY_LTE:
+
+<!-- ##### ENUM NMDeviceState ##### -->
+<para>
+
+</para>
+
+@NM_DEVICE_STATE_UNKNOWN:
+@NM_DEVICE_STATE_UNMANAGED:
+@NM_DEVICE_STATE_UNAVAILABLE:
+@NM_DEVICE_STATE_DISCONNECTED:
+@NM_DEVICE_STATE_PREPARE:
+@NM_DEVICE_STATE_CONFIG:
+@NM_DEVICE_STATE_NEED_AUTH:
+@NM_DEVICE_STATE_IP_CONFIG:
+@NM_DEVICE_STATE_IP_CHECK:
+@NM_DEVICE_STATE_SECONDARIES:
+@NM_DEVICE_STATE_ACTIVATED:
+@NM_DEVICE_STATE_DEACTIVATING:
+@NM_DEVICE_STATE_FAILED:
+
+<!-- ##### ENUM NMDeviceStateReason ##### -->
+<para>
+
+</para>
+
+@NM_DEVICE_STATE_REASON_NONE:
+@NM_DEVICE_STATE_REASON_UNKNOWN:
+@NM_DEVICE_STATE_REASON_NOW_MANAGED:
+@NM_DEVICE_STATE_REASON_NOW_UNMANAGED:
+@NM_DEVICE_STATE_REASON_CONFIG_FAILED:
+@NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE:
+@NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED:
+@NM_DEVICE_STATE_REASON_NO_SECRETS:
+@NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT:
+@NM_DEVICE_STATE_REASON_SUPPLICANT_CONFIG_FAILED:
+@NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED:
+@NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT:
+@NM_DEVICE_STATE_REASON_PPP_START_FAILED:
+@NM_DEVICE_STATE_REASON_PPP_DISCONNECT:
+@NM_DEVICE_STATE_REASON_PPP_FAILED:
+@NM_DEVICE_STATE_REASON_DHCP_START_FAILED:
+@NM_DEVICE_STATE_REASON_DHCP_ERROR:
+@NM_DEVICE_STATE_REASON_DHCP_FAILED:
+@NM_DEVICE_STATE_REASON_SHARED_START_FAILED:
+@NM_DEVICE_STATE_REASON_SHARED_FAILED:
+@NM_DEVICE_STATE_REASON_AUTOIP_START_FAILED:
+@NM_DEVICE_STATE_REASON_AUTOIP_ERROR:
+@NM_DEVICE_STATE_REASON_AUTOIP_FAILED:
+@NM_DEVICE_STATE_REASON_MODEM_BUSY:
+@NM_DEVICE_STATE_REASON_MODEM_NO_DIAL_TONE:
+@NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER:
+@NM_DEVICE_STATE_REASON_MODEM_DIAL_TIMEOUT:
+@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_NOT_SEARCHING:
+@NM_DEVICE_STATE_REASON_GSM_REGISTRATION_DENIED:
+@NM_DEVICE_STATE_REASON_GSM_REGISTRATION_TIMEOUT:
+@NM_DEVICE_STATE_REASON_GSM_REGISTRATION_FAILED:
+@NM_DEVICE_STATE_REASON_GSM_PIN_CHECK_FAILED:
+@NM_DEVICE_STATE_REASON_FIRMWARE_MISSING:
+@NM_DEVICE_STATE_REASON_REMOVED:
+@NM_DEVICE_STATE_REASON_SLEEPING:
+@NM_DEVICE_STATE_REASON_CONNECTION_REMOVED:
+@NM_DEVICE_STATE_REASON_USER_REQUESTED:
+@NM_DEVICE_STATE_REASON_CARRIER:
+@NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED:
+@NM_DEVICE_STATE_REASON_SUPPLICANT_AVAILABLE:
+@NM_DEVICE_STATE_REASON_MODEM_NOT_FOUND:
+@NM_DEVICE_STATE_REASON_BT_FAILED:
+@NM_DEVICE_STATE_REASON_GSM_SIM_NOT_INSERTED:
+@NM_DEVICE_STATE_REASON_GSM_SIM_PIN_REQUIRED:
+@NM_DEVICE_STATE_REASON_GSM_SIM_PUK_REQUIRED:
+@NM_DEVICE_STATE_REASON_GSM_SIM_WRONG:
+@NM_DEVICE_STATE_REASON_INFINIBAND_MODE:
+@NM_DEVICE_STATE_REASON_DEPENDENCY_FAILED:
+@NM_DEVICE_STATE_REASON_BR2684_FAILED:
+@NM_DEVICE_STATE_REASON_MODEM_MANAGER_UNAVAILABLE:
+@NM_DEVICE_STATE_REASON_SSID_NOT_FOUND:
+@NM_DEVICE_STATE_REASON_SECONDARY_CONNECTION_FAILED:
+@NM_DEVICE_STATE_REASON_DCB_FCOE_FAILED:
+@NM_DEVICE_STATE_REASON_TEAMD_CONTROL_FAILED:
+@NM_DEVICE_STATE_REASON_MODEM_FAILED:
+@NM_DEVICE_STATE_REASON_MODEM_AVAILABLE:
+@NM_DEVICE_STATE_REASON_SIM_PIN_INCORRECT:
+
+<!-- ##### ENUM NMActiveConnectionState ##### -->
+<para>
+
+</para>
+
+@NM_ACTIVE_CONNECTION_STATE_UNKNOWN:
+@NM_ACTIVE_CONNECTION_STATE_ACTIVATING:
+@NM_ACTIVE_CONNECTION_STATE_ACTIVATED:
+@NM_ACTIVE_CONNECTION_STATE_DEACTIVATING:
+@NM_ACTIVE_CONNECTION_STATE_DEACTIVATED:
+
+<!-- ##### ENUM NMSecretAgentGetSecretsFlags ##### -->
+<para>
+
+</para>
+
+@NM_SECRET_AGENT_GET_SECRETS_FLAG_NONE:
+@NM_SECRET_AGENT_GET_SECRETS_FLAG_ALLOW_INTERACTION:
+@NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW:
+@NM_SECRET_AGENT_GET_SECRETS_FLAG_USER_REQUESTED:
+@NM_SECRET_AGENT_GET_SECRETS_FLAG_ONLY_SYSTEM:
+@NM_SECRET_AGENT_GET_SECRETS_FLAG_NO_ERRORS:
+
+<!-- ##### ENUM NMSecretAgentCapabilities ##### -->
+<para>
+
+</para>
+
+@NM_SECRET_AGENT_CAPABILITY_NONE:
+@NM_SECRET_AGENT_CAPABILITY_VPN_HINTS:
+@NM_SECRET_AGENT_CAPABILITY_LAST:
+
diff --git a/docs/libnm/tmpl/nm-device-adsl.sgml b/docs/libnm/tmpl/nm-device-adsl.sgml
new file mode 100644
index 000000000..406c572c0
--- /dev/null
+++ b/docs/libnm/tmpl/nm-device-adsl.sgml
@@ -0,0 +1,58 @@
+<!-- ##### SECTION Title ##### -->
+NMDeviceAdsl
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_DEVICE_ADSL_CARRIER ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### STRUCT NMDeviceAdsl ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMDeviceAdsl:carrier ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMDeviceAdslClass ##### -->
+<para>
+
+</para>
+
+@parent:
+
+<!-- ##### FUNCTION nm_device_adsl_get_carrier ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-device-bond.sgml b/docs/libnm/tmpl/nm-device-bond.sgml
new file mode 100644
index 000000000..b444ff3d5
--- /dev/null
+++ b/docs/libnm/tmpl/nm-device-bond.sgml
@@ -0,0 +1,100 @@
+<!-- ##### SECTION Title ##### -->
+NMDeviceBond
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_DEVICE_BOND_HW_ADDRESS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_BOND_CARRIER ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_BOND_SLAVES ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### 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:
+
+<!-- ##### FUNCTION nm_device_bond_get_hw_address ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_bond_get_carrier ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_bond_get_slaves ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-device-bridge.sgml b/docs/libnm/tmpl/nm-device-bridge.sgml
new file mode 100644
index 000000000..4a0e1595e
--- /dev/null
+++ b/docs/libnm/tmpl/nm-device-bridge.sgml
@@ -0,0 +1,100 @@
+<!-- ##### SECTION Title ##### -->
+NMDeviceBridge
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_DEVICE_BRIDGE_HW_ADDRESS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_BRIDGE_CARRIER ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_BRIDGE_SLAVES ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### 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:
+
+<!-- ##### FUNCTION nm_device_bridge_get_hw_address ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_bridge_get_carrier ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_bridge_get_slaves ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-device-bt.sgml b/docs/libnm/tmpl/nm-device-bt.sgml
new file mode 100644
index 000000000..5765f6663
--- /dev/null
+++ b/docs/libnm/tmpl/nm-device-bt.sgml
@@ -0,0 +1,100 @@
+<!-- ##### SECTION Title ##### -->
+NMDeviceBt
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_DEVICE_BT_HW_ADDRESS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_BT_NAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_BT_CAPABILITIES ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### 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:
+
+<!-- ##### FUNCTION nm_device_bt_get_hw_address ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_bt_get_name ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_bt_get_capabilities ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-device-ethernet.sgml b/docs/libnm/tmpl/nm-device-ethernet.sgml
new file mode 100644
index 000000000..6a004bf08
--- /dev/null
+++ b/docs/libnm/tmpl/nm-device-ethernet.sgml
@@ -0,0 +1,121 @@
+<!-- ##### SECTION Title ##### -->
+NMDeviceEthernet
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_DEVICE_ETHERNET_HW_ADDRESS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_ETHERNET_PERMANENT_HW_ADDRESS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_ETHERNET_SPEED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_ETHERNET_CARRIER ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### 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:
+
+<!-- ##### FUNCTION nm_device_ethernet_get_hw_address ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_ethernet_get_permanent_hw_address ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_ethernet_get_speed ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_ethernet_get_carrier ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-device-generic.sgml b/docs/libnm/tmpl/nm-device-generic.sgml
new file mode 100644
index 000000000..c93ed4cc5
--- /dev/null
+++ b/docs/libnm/tmpl/nm-device-generic.sgml
@@ -0,0 +1,70 @@
+<!-- ##### SECTION Title ##### -->
+NMDeviceGeneric
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### 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:
+
+<!-- ##### FUNCTION nm_device_generic_get_hw_address ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-device-infiniband.sgml b/docs/libnm/tmpl/nm-device-infiniband.sgml
new file mode 100644
index 000000000..626c0e3dc
--- /dev/null
+++ b/docs/libnm/tmpl/nm-device-infiniband.sgml
@@ -0,0 +1,79 @@
+<!-- ##### SECTION Title ##### -->
+NMDeviceInfiniband
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_DEVICE_INFINIBAND_HW_ADDRESS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_INFINIBAND_CARRIER ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### STRUCT NMDeviceInfiniband ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMDeviceInfiniband:carrier ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDeviceInfiniband:hw-address ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMDeviceInfinibandClass ##### -->
+<para>
+
+</para>
+
+@parent:
+
+<!-- ##### FUNCTION nm_device_infiniband_get_hw_address ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_infiniband_get_carrier ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-device-modem.sgml b/docs/libnm/tmpl/nm-device-modem.sgml
new file mode 100644
index 000000000..c582ddbd1
--- /dev/null
+++ b/docs/libnm/tmpl/nm-device-modem.sgml
@@ -0,0 +1,79 @@
+<!-- ##### SECTION Title ##### -->
+NMDeviceModem
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_DEVICE_MODEM_MODEM_CAPABILITIES ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_MODEM_CURRENT_CAPABILITIES ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### STRUCT NMDeviceModem ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMDeviceModem:current-capabilities ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDeviceModem:modem-capabilities ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMDeviceModemClass ##### -->
+<para>
+
+</para>
+
+@parent:
+
+<!-- ##### FUNCTION nm_device_modem_get_modem_capabilities ##### -->
+<para>
+
+</para>
+
+@self:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_modem_get_current_capabilities ##### -->
+<para>
+
+</para>
+
+@self:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-device-olpc-mesh.sgml b/docs/libnm/tmpl/nm-device-olpc-mesh.sgml
new file mode 100644
index 000000000..bcc857ae1
--- /dev/null
+++ b/docs/libnm/tmpl/nm-device-olpc-mesh.sgml
@@ -0,0 +1,100 @@
+<!-- ##### SECTION Title ##### -->
+NMDeviceOlpcMesh
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_DEVICE_OLPC_MESH_HW_ADDRESS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_OLPC_MESH_COMPANION ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_OLPC_MESH_ACTIVE_CHANNEL ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### 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:
+
+<!-- ##### FUNCTION nm_device_olpc_mesh_get_hw_address ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_olpc_mesh_get_companion ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_olpc_mesh_get_active_channel ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-device-team.sgml b/docs/libnm/tmpl/nm-device-team.sgml
new file mode 100644
index 000000000..de047234c
--- /dev/null
+++ b/docs/libnm/tmpl/nm-device-team.sgml
@@ -0,0 +1,100 @@
+<!-- ##### SECTION Title ##### -->
+NMDeviceTeam
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### 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:
+
+<!-- ##### 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/tmpl/nm-device-vlan.sgml b/docs/libnm/tmpl/nm-device-vlan.sgml
new file mode 100644
index 000000000..8607d3e02
--- /dev/null
+++ b/docs/libnm/tmpl/nm-device-vlan.sgml
@@ -0,0 +1,121 @@
+<!-- ##### SECTION Title ##### -->
+NMDeviceVlan
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_DEVICE_VLAN_HW_ADDRESS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_VLAN_CARRIER ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_VLAN_PARENT ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_VLAN_VLAN_ID ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### STRUCT NMDeviceVlan ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMDeviceVlan:carrier ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDeviceVlan:hw-address ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDeviceVlan:parent ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDeviceVlan:vlan-id ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMDeviceVlanClass ##### -->
+<para>
+
+</para>
+
+@parent:
+
+<!-- ##### FUNCTION nm_device_vlan_get_hw_address ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_vlan_get_carrier ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_vlan_get_parent ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_vlan_get_vlan_id ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-device-wifi.sgml b/docs/libnm/tmpl/nm-device-wifi.sgml
new file mode 100644
index 000000000..d19476314
--- /dev/null
+++ b/docs/libnm/tmpl/nm-device-wifi.sgml
@@ -0,0 +1,245 @@
+<!-- ##### SECTION Title ##### -->
+NMDeviceWifi
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_DEVICE_WIFI_HW_ADDRESS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_WIFI_PERMANENT_HW_ADDRESS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_WIFI_MODE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_WIFI_BITRATE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_WIFI_ACTIVE_ACCESS_POINT ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_WIFI_CAPABILITIES ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### 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:
+
+<!-- ##### FUNCTION nm_device_wifi_get_hw_address ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_wifi_get_permanent_hw_address ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_wifi_get_mode ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_wifi_get_bitrate ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_wifi_get_capabilities ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_wifi_get_active_access_point ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_wifi_get_access_point_by_path ##### -->
+<para>
+
+</para>
+
+@device:
+@path:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_wifi_get_access_points ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_wifi_request_scan ##### -->
+<para>
+
+</para>
+
+@device:
+@cancellable:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_wifi_request_scan_async ##### -->
+<para>
+
+</para>
+
+@device:
+@cancellable:
+@callback:
+@user_data:
+
+
+<!-- ##### FUNCTION nm_device_wifi_request_scan_finish ##### -->
+<para>
+
+</para>
+
+@device:
+@result:
+@error:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-device-wimax.sgml b/docs/libnm/tmpl/nm-device-wimax.sgml
new file mode 100644
index 000000000..fcbac1e54
--- /dev/null
+++ b/docs/libnm/tmpl/nm-device-wimax.sgml
@@ -0,0 +1,233 @@
+<!-- ##### SECTION Title ##### -->
+NMDeviceWimax
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_DEVICE_WIMAX_HW_ADDRESS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_WIMAX_ACTIVE_NSP ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_WIMAX_CENTER_FREQUENCY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_WIMAX_RSSI ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_WIMAX_CINR ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_WIMAX_TX_POWER ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_WIMAX_BSID ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### 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_get_hw_address ##### -->
+<para>
+
+</para>
+
+@wimax:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_wimax_get_active_nsp ##### -->
+<para>
+
+</para>
+
+@wimax:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_wimax_get_nsp_by_path ##### -->
+<para>
+
+</para>
+
+@wimax:
+@path:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_wimax_get_nsps ##### -->
+<para>
+
+</para>
+
+@wimax:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_wimax_get_center_frequency ##### -->
+<para>
+
+</para>
+
+@self:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_wimax_get_rssi ##### -->
+<para>
+
+</para>
+
+@self:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_wimax_get_cinr ##### -->
+<para>
+
+</para>
+
+@self:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_wimax_get_tx_power ##### -->
+<para>
+
+</para>
+
+@self:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_wimax_get_bsid ##### -->
+<para>
+
+</para>
+
+@self:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-device.sgml b/docs/libnm/tmpl/nm-device.sgml
new file mode 100644
index 000000000..5bd99db5d
--- /dev/null
+++ b/docs/libnm/tmpl/nm-device.sgml
@@ -0,0 +1,696 @@
+<!-- ##### SECTION Title ##### -->
+NMDevice
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_DEVICE_DEVICE_TYPE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_UDI ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_INTERFACE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_IP_INTERFACE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_DRIVER ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_DRIVER_VERSION ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_FIRMWARE_VERSION ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_CAPABILITIES ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_MANAGED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_AUTOCONNECT ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_FIRMWARE_MISSING ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_IP4_CONFIG ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_DHCP4_CONFIG ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_IP6_CONFIG ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_DHCP6_CONFIG ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_STATE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_STATE_REASON ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_ACTIVE_CONNECTION ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_AVAILABLE_CONNECTIONS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_VENDOR ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEVICE_PRODUCT ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### 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:
+
+<!-- ##### FUNCTION nm_device_get_iface ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_get_ip_iface ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_get_device_type ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_get_udi ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_get_driver ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_get_driver_version ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_get_firmware_version ##### -->
+<para>
+
+</para>
+
+@device:
+@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>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_get_managed ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_get_autoconnect ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_set_autoconnect ##### -->
+<para>
+
+</para>
+
+@device:
+@autoconnect:
+
+
+<!-- ##### FUNCTION nm_device_get_firmware_missing ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_get_ip4_config ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_get_dhcp4_config ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_get_ip6_config ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_get_dhcp6_config ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_get_state ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_get_state_reason ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_get_active_connection ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_get_available_connections ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_get_physical_port_id ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_get_mtu ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_is_software ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_get_product ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_get_vendor ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_get_description ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_disambiguate_names ##### -->
+<para>
+
+</para>
+
+@devices:
+@num_devices:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_disconnect ##### -->
+<para>
+
+</para>
+
+@device:
+@cancellable:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_disconnect_async ##### -->
+<para>
+
+</para>
+
+@device:
+@cancellable:
+@callback:
+@user_data:
+
+
+<!-- ##### FUNCTION nm_device_disconnect_finish ##### -->
+<para>
+
+</para>
+
+@device:
+@result:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_delete ##### -->
+<para>
+
+</para>
+
+@device:
+@cancellable:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_delete_async ##### -->
+<para>
+
+</para>
+
+@device:
+@cancellable:
+@callback:
+@user_data:
+
+
+<!-- ##### FUNCTION nm_device_delete_finish ##### -->
+<para>
+
+</para>
+
+@device:
+@result:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_filter_connections ##### -->
+<para>
+
+</para>
+
+@device:
+@connections:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_connection_valid ##### -->
+<para>
+
+</para>
+
+@device:
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_connection_compatible ##### -->
+<para>
+
+</para>
+
+@device:
+@connection:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_device_get_setting_type ##### -->
+<para>
+
+</para>
+
+@device:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-dhcp-config.sgml b/docs/libnm/tmpl/nm-dhcp-config.sgml
new file mode 100644
index 000000000..6d5af6f07
--- /dev/null
+++ b/docs/libnm/tmpl/nm-dhcp-config.sgml
@@ -0,0 +1,89 @@
+<!-- ##### SECTION Title ##### -->
+NMDhcpConfig
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### STRUCT NMDhcpConfig ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMDhcpConfig:family ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMDhcpConfig:options ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMDhcpConfigClass ##### -->
+<para>
+
+</para>
+
+@parent:
+
+<!-- ##### MACRO NM_DHCP_CONFIG_FAMILY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DHCP_CONFIG_OPTIONS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### FUNCTION nm_dhcp_config_get_family ##### -->
+<para>
+
+</para>
+
+@config:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_dhcp_config_get_options ##### -->
+<para>
+
+</para>
+
+@config:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_dhcp_config_get_one_option ##### -->
+<para>
+
+</para>
+
+@config:
+@option:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-enum-types.sgml b/docs/libnm/tmpl/nm-enum-types.sgml
new file mode 100644
index 000000000..8577600d3
--- /dev/null
+++ b/docs/libnm/tmpl/nm-enum-types.sgml
@@ -0,0 +1,24 @@
+<!-- ##### SECTION Title ##### -->
+nm-enum-types
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
diff --git a/docs/libnm/tmpl/nm-errors.sgml b/docs/libnm/tmpl/nm-errors.sgml
new file mode 100644
index 000000000..8c79b479d
--- /dev/null
+++ b/docs/libnm/tmpl/nm-errors.sgml
@@ -0,0 +1,263 @@
+<!-- ##### SECTION Title ##### -->
+nm-errors
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### ENUM NMAgentManagerError ##### -->
+<para>
+
+</para>
+
+@NM_AGENT_MANAGER_ERROR_FAILED:
+@NM_AGENT_MANAGER_ERROR_PERMISSION_DENIED:
+@NM_AGENT_MANAGER_ERROR_INVALID_IDENTIFIER:
+@NM_AGENT_MANAGER_ERROR_NOT_REGISTERED:
+@NM_AGENT_MANAGER_ERROR_NO_SECRETS:
+@NM_AGENT_MANAGER_ERROR_USER_CANCELED:
+
+<!-- ##### FUNCTION nm_agent_manager_error_quark ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### MACRO NM_AGENT_MANAGER_ERROR ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### ENUM NMConnectionError ##### -->
+<para>
+
+</para>
+
+@NM_CONNECTION_ERROR_FAILED:
+@NM_CONNECTION_ERROR_SETTING_NOT_FOUND:
+@NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND:
+@NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET:
+@NM_CONNECTION_ERROR_MISSING_SETTING:
+@NM_CONNECTION_ERROR_INVALID_SETTING:
+@NM_CONNECTION_ERROR_MISSING_PROPERTY:
+@NM_CONNECTION_ERROR_INVALID_PROPERTY:
+
+<!-- ##### MACRO NM_CONNECTION_ERROR ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### FUNCTION nm_connection_error_quark ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### ENUM NMCryptoError ##### -->
+<para>
+
+</para>
+
+@NM_CRYPTO_ERROR_FAILED:
+@NM_CRYPTO_ERROR_INVALID_DATA:
+@NM_CRYPTO_ERROR_INVALID_PASSWORD:
+@NM_CRYPTO_ERROR_UNKNOWN_CIPHER:
+@NM_CRYPTO_ERROR_DECRYPTION_FAILED:
+@NM_CRYPTO_ERROR_ENCRYPTION_FAILED:
+
+<!-- ##### MACRO NM_CRYPTO_ERROR ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### FUNCTION nm_crypto_error_quark ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### ENUM NMDeviceError ##### -->
+<para>
+
+</para>
+
+@NM_DEVICE_ERROR_FAILED:
+@NM_DEVICE_ERROR_CREATION_FAILED:
+@NM_DEVICE_ERROR_INVALID_CONNECTION:
+@NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION:
+@NM_DEVICE_ERROR_NOT_ACTIVE:
+@NM_DEVICE_ERROR_NOT_SOFTWARE:
+@NM_DEVICE_ERROR_NOT_ALLOWED:
+@NM_DEVICE_ERROR_SPECIFIC_OBJECT_NOT_FOUND:
+
+<!-- ##### MACRO NM_DEVICE_ERROR ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### FUNCTION nm_device_error_quark ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### ENUM NMManagerError ##### -->
+<para>
+
+</para>
+
+@NM_MANAGER_ERROR_FAILED:
+@NM_MANAGER_ERROR_PERMISSION_DENIED:
+@NM_MANAGER_ERROR_UNKNOWN_CONNECTION:
+@NM_MANAGER_ERROR_UNKNOWN_DEVICE:
+@NM_MANAGER_ERROR_CONNECTION_NOT_AVAILABLE:
+@NM_MANAGER_ERROR_CONNECTION_NOT_ACTIVE:
+@NM_MANAGER_ERROR_CONNECTION_ALREADY_ACTIVE:
+@NM_MANAGER_ERROR_DEPENDENCY_FAILED:
+@NM_MANAGER_ERROR_ALREADY_ASLEEP_OR_AWAKE:
+@NM_MANAGER_ERROR_ALREADY_ENABLED_OR_DISABLED:
+@NM_MANAGER_ERROR_UNKNOWN_LOG_LEVEL:
+@NM_MANAGER_ERROR_UNKNOWN_LOG_DOMAIN:
+
+<!-- ##### FUNCTION nm_manager_error_quark ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### MACRO NM_MANAGER_ERROR ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### ENUM NMSecretAgentError ##### -->
+<para>
+
+</para>
+
+@NM_SECRET_AGENT_ERROR_FAILED:
+@NM_SECRET_AGENT_ERROR_PERMISSION_DENIED:
+@NM_SECRET_AGENT_ERROR_INVALID_CONNECTION:
+@NM_SECRET_AGENT_ERROR_USER_CANCELED:
+@NM_SECRET_AGENT_ERROR_AGENT_CANCELED:
+@NM_SECRET_AGENT_ERROR_NO_SECRETS:
+
+<!-- ##### FUNCTION nm_secret_agent_error_quark ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### MACRO NM_SECRET_AGENT_ERROR ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### ENUM NMSettingsError ##### -->
+<para>
+
+</para>
+
+@NM_SETTINGS_ERROR_FAILED:
+@NM_SETTINGS_ERROR_PERMISSION_DENIED:
+@NM_SETTINGS_ERROR_NOT_SUPPORTED:
+@NM_SETTINGS_ERROR_INVALID_CONNECTION:
+@NM_SETTINGS_ERROR_READ_ONLY_CONNECTION:
+@NM_SETTINGS_ERROR_UUID_EXISTS:
+@NM_SETTINGS_ERROR_INVALID_HOSTNAME:
+
+<!-- ##### FUNCTION nm_settings_error_quark ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### MACRO NM_SETTINGS_ERROR ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### ENUM NMVpnPluginError ##### -->
+<para>
+
+</para>
+
+@NM_VPN_PLUGIN_ERROR_FAILED:
+@NM_VPN_PLUGIN_ERROR_STARTING_IN_PROGRESS:
+@NM_VPN_PLUGIN_ERROR_ALREADY_STARTED:
+@NM_VPN_PLUGIN_ERROR_STOPPING_IN_PROGRESS:
+@NM_VPN_PLUGIN_ERROR_ALREADY_STOPPED:
+@NM_VPN_PLUGIN_ERROR_WRONG_STATE:
+@NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS:
+@NM_VPN_PLUGIN_ERROR_LAUNCH_FAILED:
+@NM_VPN_PLUGIN_ERROR_INVALID_CONNECTION:
+@NM_VPN_PLUGIN_ERROR_INTERACTIVE_NOT_SUPPORTED:
+
+<!-- ##### MACRO NM_VPN_PLUGIN_ERROR ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### FUNCTION nm_vpn_plugin_error_quark ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-ip-config.sgml b/docs/libnm/tmpl/nm-ip-config.sgml
new file mode 100644
index 000000000..bc3ff5632
--- /dev/null
+++ b/docs/libnm/tmpl/nm-ip-config.sgml
@@ -0,0 +1,205 @@
+<!-- ##### SECTION Title ##### -->
+NMIPConfig
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### STRUCT NMIPConfig ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMIPConfig:addresses ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMIPConfig:domains ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMIPConfig:family ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMIPConfig:gateway ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMIPConfig:nameservers ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMIPConfig:routes ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMIPConfig:searches ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMIPConfig:wins-servers ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMIPConfigClass ##### -->
+<para>
+
+</para>
+
+@parent:
+
+<!-- ##### MACRO NM_IP_CONFIG_FAMILY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_IP_CONFIG_GATEWAY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_IP_CONFIG_ADDRESSES ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_IP_CONFIG_ROUTES ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_IP_CONFIG_NAMESERVERS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_IP_CONFIG_DOMAINS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_IP_CONFIG_SEARCHES ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_IP_CONFIG_WINS_SERVERS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### FUNCTION nm_ip_config_get_family ##### -->
+<para>
+
+</para>
+
+@config:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_ip_config_get_gateway ##### -->
+<para>
+
+</para>
+
+@config:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_ip_config_get_addresses ##### -->
+<para>
+
+</para>
+
+@config:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_ip_config_get_routes ##### -->
+<para>
+
+</para>
+
+@config:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_ip_config_get_nameservers ##### -->
+<para>
+
+</para>
+
+@config:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_ip_config_get_domains ##### -->
+<para>
+
+</para>
+
+@config:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_ip_config_get_searches ##### -->
+<para>
+
+</para>
+
+@config:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_ip_config_get_wins_servers ##### -->
+<para>
+
+</para>
+
+@config:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-object.sgml b/docs/libnm/tmpl/nm-object.sgml
new file mode 100644
index 000000000..53ed0566d
--- /dev/null
+++ b/docs/libnm/tmpl/nm-object.sgml
@@ -0,0 +1,77 @@
+<!-- ##### SECTION Title ##### -->
+NMObject
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_OBJECT_PATH ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_OBJECT_DBUS_CONNECTION ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### STRUCT NMObject ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMObject:dbus-connection ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMObject:nm-running-internal ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMObject:path ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMObjectClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@init_dbus:
+@object_creation_failed:
+
+<!-- ##### FUNCTION nm_object_get_path ##### -->
+<para>
+
+</para>
+
+@object:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-remote-connection.sgml b/docs/libnm/tmpl/nm-remote-connection.sgml
new file mode 100644
index 000000000..f51af61e9
--- /dev/null
+++ b/docs/libnm/tmpl/nm-remote-connection.sgml
@@ -0,0 +1,229 @@
+<!-- ##### SECTION Title ##### -->
+NMRemoteConnection
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_REMOTE_CONNECTION_DBUS_CONNECTION ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_REMOTE_CONNECTION_PATH ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_REMOTE_CONNECTION_UNSAVED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_REMOTE_CONNECTION_VISIBLE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### STRUCT NMRemoteConnection ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMRemoteConnection:unsaved ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMRemoteConnection:visible ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMRemoteConnectionClass ##### -->
+<para>
+
+</para>
+
+@parent_class:
+
+<!-- ##### FUNCTION nm_remote_connection_commit_changes ##### -->
+<para>
+
+</para>
+
+@connection:
+@save_to_disk:
+@cancellable:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_remote_connection_commit_changes_async ##### -->
+<para>
+
+</para>
+
+@connection:
+@save_to_disk:
+@cancellable:
+@callback:
+@user_data:
+
+
+<!-- ##### FUNCTION nm_remote_connection_commit_changes_finish ##### -->
+<para>
+
+</para>
+
+@connection:
+@result:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_remote_connection_save ##### -->
+<para>
+
+</para>
+
+@connection:
+@cancellable:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_remote_connection_save_async ##### -->
+<para>
+
+</para>
+
+@connection:
+@cancellable:
+@callback:
+@user_data:
+
+
+<!-- ##### FUNCTION nm_remote_connection_save_finish ##### -->
+<para>
+
+</para>
+
+@connection:
+@result:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_remote_connection_delete ##### -->
+<para>
+
+</para>
+
+@connection:
+@cancellable:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_remote_connection_delete_async ##### -->
+<para>
+
+</para>
+
+@connection:
+@cancellable:
+@callback:
+@user_data:
+
+
+<!-- ##### FUNCTION nm_remote_connection_delete_finish ##### -->
+<para>
+
+</para>
+
+@connection:
+@result:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_remote_connection_get_secrets ##### -->
+<para>
+
+</para>
+
+@connection:
+@setting_name:
+@cancellable:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_remote_connection_get_secrets_async ##### -->
+<para>
+
+</para>
+
+@connection:
+@setting_name:
+@cancellable:
+@callback:
+@user_data:
+
+
+<!-- ##### FUNCTION nm_remote_connection_get_secrets_finish ##### -->
+<para>
+
+</para>
+
+@connection:
+@result:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_remote_connection_get_unsaved ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_remote_connection_get_visible ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-secret-agent-old.sgml b/docs/libnm/tmpl/nm-secret-agent-old.sgml
new file mode 100644
index 000000000..86953508b
--- /dev/null
+++ b/docs/libnm/tmpl/nm-secret-agent-old.sgml
@@ -0,0 +1,234 @@
+<!-- ##### SECTION Title ##### -->
+NMSecretAgentOld
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_SECRET_AGENT_OLD_IDENTIFIER ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SECRET_AGENT_OLD_AUTO_REGISTER ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SECRET_AGENT_OLD_REGISTERED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SECRET_AGENT_OLD_CAPABILITIES ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### STRUCT NMSecretAgentOld ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMSecretAgentOld:auto-register ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSecretAgentOld:capabilities ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSecretAgentOld:identifier ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSecretAgentOld:registered ##### -->
+<para>
+
+</para>
+
+<!-- ##### USER_FUNCTION NMSecretAgentOldGetSecretsFunc ##### -->
+<para>
+
+</para>
+
+@agent:
+@connection:
+@secrets:
+@error:
+@user_data:
+
+
+<!-- ##### USER_FUNCTION NMSecretAgentOldSaveSecretsFunc ##### -->
+<para>
+
+</para>
+
+@agent:
+@connection:
+@error:
+@user_data:
+
+
+<!-- ##### USER_FUNCTION NMSecretAgentOldDeleteSecretsFunc ##### -->
+<para>
+
+</para>
+
+@agent:
+@connection:
+@error:
+@user_data:
+
+
+<!-- ##### STRUCT NMSecretAgentOldClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@get_secrets:
+@cancel_get_secrets:
+@save_secrets:
+@delete_secrets:
+
+<!-- ##### FUNCTION nm_secret_agent_old_register ##### -->
+<para>
+
+</para>
+
+@self:
+@cancellable:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_secret_agent_old_register_async ##### -->
+<para>
+
+</para>
+
+@self:
+@cancellable:
+@callback:
+@user_data:
+
+
+<!-- ##### FUNCTION nm_secret_agent_old_register_finish ##### -->
+<para>
+
+</para>
+
+@self:
+@result:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_secret_agent_old_unregister ##### -->
+<para>
+
+</para>
+
+@self:
+@cancellable:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_secret_agent_old_unregister_async ##### -->
+<para>
+
+</para>
+
+@self:
+@cancellable:
+@callback:
+@user_data:
+
+
+<!-- ##### FUNCTION nm_secret_agent_old_unregister_finish ##### -->
+<para>
+
+</para>
+
+@self:
+@result:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_secret_agent_old_get_registered ##### -->
+<para>
+
+</para>
+
+@self:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_secret_agent_old_get_secrets ##### -->
+<para>
+
+</para>
+
+@self:
+@connection:
+@setting_name:
+@hints:
+@flags:
+@callback:
+@user_data:
+
+
+<!-- ##### FUNCTION nm_secret_agent_old_save_secrets ##### -->
+<para>
+
+</para>
+
+@self:
+@connection:
+@callback:
+@user_data:
+
+
+<!-- ##### FUNCTION nm_secret_agent_old_delete_secrets ##### -->
+<para>
+
+</para>
+
+@self:
+@connection:
+@callback:
+@user_data:
+
+
diff --git a/docs/libnm/tmpl/nm-setting-8021x.sgml b/docs/libnm/tmpl/nm-setting-8021x.sgml
new file mode 100644
index 000000000..b77deec6e
--- /dev/null
+++ b/docs/libnm/tmpl/nm-setting-8021x.sgml
@@ -0,0 +1,1091 @@
+<!-- ##### SECTION Title ##### -->
+NMSetting8021x
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### ENUM NMSetting8021xCKFormat ##### -->
+<para>
+
+</para>
+
+@NM_SETTING_802_1X_CK_FORMAT_UNKNOWN:
+@NM_SETTING_802_1X_CK_FORMAT_X509:
+@NM_SETTING_802_1X_CK_FORMAT_RAW_KEY:
+@NM_SETTING_802_1X_CK_FORMAT_PKCS12:
+
+<!-- ##### ENUM NMSetting8021xCKScheme ##### -->
+<para>
+
+</para>
+
+@NM_SETTING_802_1X_CK_SCHEME_UNKNOWN:
+@NM_SETTING_802_1X_CK_SCHEME_BLOB:
+@NM_SETTING_802_1X_CK_SCHEME_PATH:
+
+<!-- ##### MACRO NM_SETTING_802_1X_SETTING_NAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_802_1X_EAP ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_802_1X_IDENTITY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_802_1X_ANONYMOUS_IDENTITY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_802_1X_PAC_FILE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_802_1X_CA_CERT ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_802_1X_CA_PATH ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_802_1X_SUBJECT_MATCH ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_802_1X_ALTSUBJECT_MATCHES ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_802_1X_CLIENT_CERT ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_802_1X_PHASE1_PEAPVER ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_802_1X_PHASE1_PEAPLABEL ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_802_1X_PHASE1_FAST_PROVISIONING ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_802_1X_PHASE2_AUTH ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_802_1X_PHASE2_AUTHEAP ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_802_1X_PHASE2_CA_CERT ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_802_1X_PHASE2_CA_PATH ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_802_1X_PHASE2_CLIENT_CERT ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_802_1X_PASSWORD ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_802_1X_PASSWORD_FLAGS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_802_1X_PASSWORD_RAW ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_802_1X_PASSWORD_RAW_FLAGS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_802_1X_PRIVATE_KEY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD_FLAGS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_802_1X_PHASE2_PRIVATE_KEY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD_FLAGS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_802_1X_PIN ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_802_1X_PIN_FLAGS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_802_1X_SYSTEM_CA_CERTS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### 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:
+
+<!-- ##### FUNCTION nm_setting_802_1x_new ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_num_eap_methods ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_eap_method ##### -->
+<para>
+
+</para>
+
+@setting:
+@i:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_add_eap_method ##### -->
+<para>
+
+</para>
+
+@setting:
+@eap:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_remove_eap_method ##### -->
+<para>
+
+</para>
+
+@setting:
+@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>
+
+</para>
+
+@setting:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_identity ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_anonymous_identity ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_pac_file ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_system_ca_certs ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_ca_path ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_phase2_ca_path ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_ca_cert_scheme ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_ca_cert_blob ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_ca_cert_path ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_set_ca_cert ##### -->
+<para>
+
+</para>
+
+@setting:
+@cert_path:
+@scheme:
+@out_format:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_subject_match ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_num_altsubject_matches ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_altsubject_match ##### -->
+<para>
+
+</para>
+
+@setting:
+@i:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_add_altsubject_match ##### -->
+<para>
+
+</para>
+
+@setting:
+@altsubject_match:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_remove_altsubject_match ##### -->
+<para>
+
+</para>
+
+@setting:
+@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>
+
+</para>
+
+@setting:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_client_cert_scheme ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_client_cert_blob ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_client_cert_path ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_set_client_cert ##### -->
+<para>
+
+</para>
+
+@setting:
+@cert_path:
+@scheme:
+@out_format:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_phase1_peapver ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_phase1_peaplabel ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_phase1_fast_provisioning ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_phase2_auth ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_phase2_autheap ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_phase2_ca_cert_scheme ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_phase2_ca_cert_blob ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_phase2_ca_cert_path ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_set_phase2_ca_cert ##### -->
+<para>
+
+</para>
+
+@setting:
+@cert_path:
+@scheme:
+@out_format:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_phase2_subject_match ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_num_phase2_altsubject_matches ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_phase2_altsubject_match ##### -->
+<para>
+
+</para>
+
+@setting:
+@i:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_add_phase2_altsubject_match ##### -->
+<para>
+
+</para>
+
+@setting:
+@phase2_altsubject_match:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_remove_phase2_altsubject_match ##### -->
+<para>
+
+</para>
+
+@setting:
+@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>
+
+</para>
+
+@setting:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_phase2_client_cert_scheme ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_phase2_client_cert_blob ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_phase2_client_cert_path ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_set_phase2_client_cert ##### -->
+<para>
+
+</para>
+
+@setting:
+@cert_path:
+@scheme:
+@out_format:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_password ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_password_flags ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_password_raw ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_password_raw_flags ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_pin ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_pin_flags ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_private_key_scheme ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_private_key_blob ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_private_key_path ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_set_private_key ##### -->
+<para>
+
+</para>
+
+@setting:
+@key_path:
+@password:
+@scheme:
+@out_format:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_private_key_password ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_private_key_password_flags ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_private_key_format ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_phase2_private_key_scheme ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_phase2_private_key_blob ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_phase2_private_key_path ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_set_phase2_private_key ##### -->
+<para>
+
+</para>
+
+@setting:
+@key_path:
+@password:
+@scheme:
+@out_format:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_phase2_private_key_password ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_phase2_private_key_password_flags ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_802_1x_get_phase2_private_key_format ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-setting-adsl.sgml b/docs/libnm/tmpl/nm-setting-adsl.sgml
new file mode 100644
index 000000000..cac35e4dc
--- /dev/null
+++ b/docs/libnm/tmpl/nm-setting-adsl.sgml
@@ -0,0 +1,235 @@
+<!-- ##### SECTION Title ##### -->
+NMSettingAdsl
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_SETTING_ADSL_SETTING_NAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_ADSL_USERNAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_ADSL_PASSWORD ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_ADSL_PASSWORD_FLAGS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_ADSL_PROTOCOL ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_ADSL_ENCAPSULATION ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_ADSL_VPI ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_ADSL_VCI ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_ADSL_PROTOCOL_PPPOA ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_ADSL_PROTOCOL_PPPOE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_ADSL_PROTOCOL_IPOATM ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_ADSL_ENCAPSULATION_VCMUX ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_ADSL_ENCAPSULATION_LLC ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### 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:
+
+<!-- ##### FUNCTION nm_setting_adsl_new ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_adsl_get_username ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_adsl_get_password ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_adsl_get_protocol ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_adsl_get_encapsulation ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_adsl_get_vpi ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_adsl_get_vci ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_adsl_get_password_flags ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-setting-bluetooth.sgml b/docs/libnm/tmpl/nm-setting-bluetooth.sgml
new file mode 100644
index 000000000..e4dc13972
--- /dev/null
+++ b/docs/libnm/tmpl/nm-setting-bluetooth.sgml
@@ -0,0 +1,109 @@
+<!-- ##### SECTION Title ##### -->
+NMSettingBluetooth
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_SETTING_BLUETOOTH_SETTING_NAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_BLUETOOTH_BDADDR ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_BLUETOOTH_TYPE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_BLUETOOTH_TYPE_DUN ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_BLUETOOTH_TYPE_PANU ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### STRUCT NMSettingBluetooth ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMSettingBluetooth:bdaddr ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingBluetooth:type ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMSettingBluetoothClass ##### -->
+<para>
+
+</para>
+
+@parent:
+
+<!-- ##### FUNCTION nm_setting_bluetooth_new ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_bluetooth_get_bdaddr ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_bluetooth_get_connection_type ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-setting-bond.sgml b/docs/libnm/tmpl/nm-setting-bond.sgml
new file mode 100644
index 000000000..bbf1e8b09
--- /dev/null
+++ b/docs/libnm/tmpl/nm-setting-bond.sgml
@@ -0,0 +1,251 @@
+<!-- ##### SECTION Title ##### -->
+NMSettingBond
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_SETTING_BOND_SETTING_NAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_BOND_OPTIONS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_BOND_OPTION_MODE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_BOND_OPTION_MIIMON ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_BOND_OPTION_DOWNDELAY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_BOND_OPTION_UPDELAY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_BOND_OPTION_ARP_INTERVAL ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_BOND_OPTION_ARP_IP_TARGET ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### 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>
+
+
+
+<!-- ##### MACRO NM_SETTING_BOND_OPTION_LACP_RATE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### STRUCT NMSettingBond ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMSettingBond:options ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMSettingBondClass ##### -->
+<para>
+
+</para>
+
+@parent:
+
+<!-- ##### FUNCTION nm_setting_bond_new ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_bond_get_num_options ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_bond_get_option ##### -->
+<para>
+
+</para>
+
+@setting:
+@idx:
+@out_name:
+@out_value:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_bond_get_option_by_name ##### -->
+<para>
+
+</para>
+
+@setting:
+@name:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_bond_add_option ##### -->
+<para>
+
+</para>
+
+@setting:
+@name:
+@value:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_bond_remove_option ##### -->
+<para>
+
+</para>
+
+@setting:
+@name:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_bond_validate_option ##### -->
+<para>
+
+</para>
+
+@name:
+@value:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_bond_get_valid_options ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_bond_get_option_default ##### -->
+<para>
+
+</para>
+
+@setting:
+@name:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-setting-bridge-port.sgml b/docs/libnm/tmpl/nm-setting-bridge-port.sgml
new file mode 100644
index 000000000..4588abee6
--- /dev/null
+++ b/docs/libnm/tmpl/nm-setting-bridge-port.sgml
@@ -0,0 +1,116 @@
+<!-- ##### SECTION Title ##### -->
+NMSettingBridgePort
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_SETTING_BRIDGE_PORT_SETTING_NAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_BRIDGE_PORT_PRIORITY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_BRIDGE_PORT_PATH_COST ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_BRIDGE_PORT_HAIRPIN_MODE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### 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:
+
+<!-- ##### FUNCTION nm_setting_bridge_port_new ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_bridge_port_get_priority ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_bridge_port_get_path_cost ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_bridge_port_get_hairpin_mode ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-setting-bridge.sgml b/docs/libnm/tmpl/nm-setting-bridge.sgml
new file mode 100644
index 000000000..476297322
--- /dev/null
+++ b/docs/libnm/tmpl/nm-setting-bridge.sgml
@@ -0,0 +1,200 @@
+<!-- ##### SECTION Title ##### -->
+NMSettingBridge
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_SETTING_BRIDGE_SETTING_NAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_BRIDGE_MAC_ADDRESS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_BRIDGE_STP ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_BRIDGE_PRIORITY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_BRIDGE_FORWARD_DELAY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_BRIDGE_HELLO_TIME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_BRIDGE_MAX_AGE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_BRIDGE_AGEING_TIME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### STRUCT NMSettingBridge ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMSettingBridge:ageing-time ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingBridge:forward-delay ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingBridge:hello-time ##### -->
+<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:
+
+<!-- ##### FUNCTION nm_setting_bridge_new ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_bridge_get_mac_address ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_bridge_get_stp ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_bridge_get_priority ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_bridge_get_forward_delay ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_bridge_get_hello_time ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_bridge_get_max_age ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_bridge_get_ageing_time ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-setting-cdma.sgml b/docs/libnm/tmpl/nm-setting-cdma.sgml
new file mode 100644
index 000000000..cd497fe12
--- /dev/null
+++ b/docs/libnm/tmpl/nm-setting-cdma.sgml
@@ -0,0 +1,137 @@
+<!-- ##### SECTION Title ##### -->
+NMSettingCdma
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_SETTING_CDMA_SETTING_NAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_CDMA_NUMBER ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_CDMA_USERNAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_CDMA_PASSWORD ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_CDMA_PASSWORD_FLAGS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### 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:
+
+<!-- ##### FUNCTION nm_setting_cdma_new ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_cdma_get_number ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_cdma_get_username ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_cdma_get_password ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_cdma_get_password_flags ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-setting-connection.sgml b/docs/libnm/tmpl/nm-setting-connection.sgml
new file mode 100644
index 000000000..f4dbe24fc
--- /dev/null
+++ b/docs/libnm/tmpl/nm-setting-connection.sgml
@@ -0,0 +1,473 @@
+<!-- ##### SECTION Title ##### -->
+NMSettingConnection
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_SETTING_CONNECTION_SETTING_NAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_MIN ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_MAX ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_DEFAULT ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_CONNECTION_ID ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_CONNECTION_UUID ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_CONNECTION_INTERFACE_NAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_CONNECTION_TYPE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_CONNECTION_AUTOCONNECT ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_CONNECTION_TIMESTAMP ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_CONNECTION_READ_ONLY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_CONNECTION_PERMISSIONS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_CONNECTION_ZONE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_CONNECTION_MASTER ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_CONNECTION_SLAVE_TYPE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_CONNECTION_SECONDARIES ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### STRUCT NMSettingConnection ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMSettingConnection:autoconnect ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingConnection:autoconnect-priority ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingConnection:gateway-ping-timeout ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingConnection:id ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingConnection:interface-name ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingConnection:master ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingConnection:permissions ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingConnection:read-only ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingConnection:secondaries ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingConnection:slave-type ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingConnection:timestamp ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingConnection:type ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingConnection:uuid ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingConnection:zone ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMSettingConnectionClass ##### -->
+<para>
+
+</para>
+
+@parent:
+
+<!-- ##### FUNCTION nm_setting_connection_new ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_connection_get_id ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_connection_get_uuid ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_connection_get_interface_name ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_connection_get_connection_type ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_connection_get_autoconnect ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_connection_get_autoconnect_priority ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_connection_get_timestamp ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_connection_get_read_only ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_connection_get_num_permissions ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_connection_get_permission ##### -->
+<para>
+
+</para>
+
+@setting:
+@idx:
+@out_ptype:
+@out_pitem:
+@out_detail:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_connection_get_zone ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_connection_permissions_user_allowed ##### -->
+<para>
+
+</para>
+
+@setting:
+@uname:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_connection_add_permission ##### -->
+<para>
+
+</para>
+
+@setting:
+@ptype:
+@pitem:
+@detail:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_connection_remove_permission ##### -->
+<para>
+
+</para>
+
+@setting:
+@idx:
+
+
+<!-- ##### FUNCTION nm_setting_connection_remove_permission_by_value ##### -->
+<para>
+
+</para>
+
+@setting:
+@ptype:
+@pitem:
+@detail:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_connection_get_master ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_connection_is_slave_type ##### -->
+<para>
+
+</para>
+
+@setting:
+@type:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_connection_get_slave_type ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_connection_get_num_secondaries ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_connection_get_secondary ##### -->
+<para>
+
+</para>
+
+@setting:
+@idx:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_connection_add_secondary ##### -->
+<para>
+
+</para>
+
+@setting:
+@sec_uuid:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_connection_remove_secondary ##### -->
+<para>
+
+</para>
+
+@setting:
+@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/tmpl/nm-setting-dcb.sgml b/docs/libnm/tmpl/nm-setting-dcb.sgml
new file mode 100644
index 000000000..38a875cec
--- /dev/null
+++ b/docs/libnm/tmpl/nm-setting-dcb.sgml
@@ -0,0 +1,458 @@
+<!-- ##### 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 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:
+
+<!-- ##### 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/tmpl/nm-setting-generic.sgml b/docs/libnm/tmpl/nm-setting-generic.sgml
new file mode 100644
index 000000000..bb6d19023
--- /dev/null
+++ b/docs/libnm/tmpl/nm-setting-generic.sgml
@@ -0,0 +1,53 @@
+<!-- ##### 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>
+
+
+
+<!-- ##### STRUCT NMSettingGeneric ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### STRUCT NMSettingGenericClass ##### -->
+<para>
+
+</para>
+
+@parent:
+
+<!-- ##### FUNCTION nm_setting_generic_new ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-setting-gsm.sgml b/docs/libnm/tmpl/nm-setting-gsm.sgml
new file mode 100644
index 000000000..1bc4a620a
--- /dev/null
+++ b/docs/libnm/tmpl/nm-setting-gsm.sgml
@@ -0,0 +1,242 @@
+<!-- ##### SECTION Title ##### -->
+NMSettingGsm
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_SETTING_GSM_SETTING_NAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_GSM_NUMBER ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_GSM_USERNAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_GSM_PASSWORD ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_GSM_PASSWORD_FLAGS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_GSM_APN ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_GSM_NETWORK_ID ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_GSM_PIN ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_GSM_PIN_FLAGS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_GSM_HOME_ONLY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### STRUCT NMSettingGsm ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMSettingGsm:apn ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingGsm:home-only ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingGsm:network-id ##### -->
+<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:
+
+<!-- ##### FUNCTION nm_setting_gsm_new ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_gsm_get_number ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_gsm_get_username ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_gsm_get_password ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_gsm_get_apn ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_gsm_get_network_id ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_gsm_get_pin ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_gsm_get_home_only ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_gsm_get_pin_flags ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_gsm_get_password_flags ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-setting-infiniband.sgml b/docs/libnm/tmpl/nm-setting-infiniband.sgml
new file mode 100644
index 000000000..41588b376
--- /dev/null
+++ b/docs/libnm/tmpl/nm-setting-infiniband.sgml
@@ -0,0 +1,167 @@
+<!-- ##### SECTION Title ##### -->
+NMSettingInfiniband
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_SETTING_INFINIBAND_SETTING_NAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_INFINIBAND_MAC_ADDRESS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_INFINIBAND_MTU ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_INFINIBAND_TRANSPORT_MODE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### 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:
+
+<!-- ##### FUNCTION nm_setting_infiniband_new ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_infiniband_get_mac_address ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_infiniband_get_mtu ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_infiniband_get_transport_mode ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_infiniband_get_p_key ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_infiniband_get_parent ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_infiniband_get_virtual_interface_name ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-setting-ip-config.sgml b/docs/libnm/tmpl/nm-setting-ip-config.sgml
new file mode 100644
index 000000000..00a233ce2
--- /dev/null
+++ b/docs/libnm/tmpl/nm-setting-ip-config.sgml
@@ -0,0 +1,872 @@
+<!-- ##### SECTION Title ##### -->
+NMSettingIPConfig
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### TYPEDEF NMIPAddress ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION nm_ip_address_new ##### -->
+<para>
+
+</para>
+
+@family:
+@addr:
+@prefix:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_ip_address_new_binary ##### -->
+<para>
+
+</para>
+
+@family:
+@addr:
+@prefix:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_ip_address_ref ##### -->
+<para>
+
+</para>
+
+@address:
+
+
+<!-- ##### FUNCTION nm_ip_address_unref ##### -->
+<para>
+
+</para>
+
+@address:
+
+
+<!-- ##### FUNCTION nm_ip_address_equal ##### -->
+<para>
+
+</para>
+
+@address:
+@other:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_ip_address_dup ##### -->
+<para>
+
+</para>
+
+@address:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_ip_address_get_family ##### -->
+<para>
+
+</para>
+
+@address:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_ip_address_get_address ##### -->
+<para>
+
+</para>
+
+@address:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_ip_address_set_address ##### -->
+<para>
+
+</para>
+
+@address:
+@addr:
+
+
+<!-- ##### FUNCTION nm_ip_address_get_address_binary ##### -->
+<para>
+
+</para>
+
+@address:
+@addr:
+
+
+<!-- ##### FUNCTION nm_ip_address_set_address_binary ##### -->
+<para>
+
+</para>
+
+@address:
+@addr:
+
+
+<!-- ##### FUNCTION nm_ip_address_get_prefix ##### -->
+<para>
+
+</para>
+
+@address:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_ip_address_set_prefix ##### -->
+<para>
+
+</para>
+
+@address:
+@prefix:
+
+
+<!-- ##### FUNCTION nm_ip_address_get_attribute_names ##### -->
+<para>
+
+</para>
+
+@address:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_ip_address_get_attribute ##### -->
+<para>
+
+</para>
+
+@address:
+@name:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_ip_address_set_attribute ##### -->
+<para>
+
+</para>
+
+@address:
+@name:
+@value:
+
+
+<!-- ##### TYPEDEF NMIPRoute ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION nm_ip_route_new ##### -->
+<para>
+
+</para>
+
+@family:
+@dest:
+@prefix:
+@next_hop:
+@metric:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_ip_route_new_binary ##### -->
+<para>
+
+</para>
+
+@family:
+@dest:
+@prefix:
+@next_hop:
+@metric:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_ip_route_ref ##### -->
+<para>
+
+</para>
+
+@route:
+
+
+<!-- ##### FUNCTION nm_ip_route_unref ##### -->
+<para>
+
+</para>
+
+@route:
+
+
+<!-- ##### FUNCTION nm_ip_route_equal ##### -->
+<para>
+
+</para>
+
+@route:
+@other:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_ip_route_dup ##### -->
+<para>
+
+</para>
+
+@route:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_ip_route_get_family ##### -->
+<para>
+
+</para>
+
+@route:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_ip_route_get_dest ##### -->
+<para>
+
+</para>
+
+@route:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_ip_route_set_dest ##### -->
+<para>
+
+</para>
+
+@route:
+@dest:
+
+
+<!-- ##### FUNCTION nm_ip_route_get_dest_binary ##### -->
+<para>
+
+</para>
+
+@route:
+@dest:
+
+
+<!-- ##### FUNCTION nm_ip_route_set_dest_binary ##### -->
+<para>
+
+</para>
+
+@route:
+@dest:
+
+
+<!-- ##### FUNCTION nm_ip_route_get_prefix ##### -->
+<para>
+
+</para>
+
+@route:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_ip_route_set_prefix ##### -->
+<para>
+
+</para>
+
+@route:
+@prefix:
+
+
+<!-- ##### FUNCTION nm_ip_route_get_next_hop ##### -->
+<para>
+
+</para>
+
+@route:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_ip_route_set_next_hop ##### -->
+<para>
+
+</para>
+
+@route:
+@next_hop:
+
+
+<!-- ##### FUNCTION nm_ip_route_get_next_hop_binary ##### -->
+<para>
+
+</para>
+
+@route:
+@next_hop:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_ip_route_set_next_hop_binary ##### -->
+<para>
+
+</para>
+
+@route:
+@next_hop:
+
+
+<!-- ##### FUNCTION nm_ip_route_get_metric ##### -->
+<para>
+
+</para>
+
+@route:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_ip_route_set_metric ##### -->
+<para>
+
+</para>
+
+@route:
+@metric:
+
+
+<!-- ##### FUNCTION nm_ip_route_get_attribute_names ##### -->
+<para>
+
+</para>
+
+@route:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_ip_route_get_attribute ##### -->
+<para>
+
+</para>
+
+@route:
+@name:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_ip_route_set_attribute ##### -->
+<para>
+
+</para>
+
+@route:
+@name:
+@value:
+
+
+<!-- ##### MACRO NM_SETTING_IP_CONFIG_METHOD ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_IP_CONFIG_DNS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_IP_CONFIG_DNS_SEARCH ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_IP_CONFIG_ADDRESSES ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_IP_CONFIG_GATEWAY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_IP_CONFIG_ROUTES ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_IP_CONFIG_ROUTE_METRIC ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_IP_CONFIG_DHCP_HOSTNAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_IP_CONFIG_NEVER_DEFAULT ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_IP_CONFIG_MAY_FAIL ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### STRUCT NMSettingIPConfig ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMSettingIPConfig:addresses ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingIPConfig:dhcp-hostname ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingIPConfig:dhcp-send-hostname ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingIPConfig:dns ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingIPConfig:dns-search ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingIPConfig:gateway ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingIPConfig:ignore-auto-dns ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingIPConfig:ignore-auto-routes ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingIPConfig:may-fail ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingIPConfig:method ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingIPConfig:never-default ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingIPConfig:route-metric ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingIPConfig:routes ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMSettingIPConfigClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@padding:
+
+<!-- ##### FUNCTION nm_setting_ip_config_get_method ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ip_config_get_num_dns ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ip_config_get_dns ##### -->
+<para>
+
+</para>
+
+@setting:
+@i:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ip_config_add_dns ##### -->
+<para>
+
+</para>
+
+@setting:
+@dns:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ip_config_remove_dns ##### -->
+<para>
+
+</para>
+
+@setting:
+@i:
+
+
+<!-- ##### FUNCTION nm_setting_ip_config_remove_dns_by_value ##### -->
+<para>
+
+</para>
+
+@setting:
+@dns:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ip_config_clear_dns ##### -->
+<para>
+
+</para>
+
+@setting:
+
+
+<!-- ##### FUNCTION nm_setting_ip_config_get_num_dns_searches ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ip_config_get_dns_search ##### -->
+<para>
+
+</para>
+
+@setting:
+@i:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ip_config_add_dns_search ##### -->
+<para>
+
+</para>
+
+@setting:
+@dns_search:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ip_config_remove_dns_search ##### -->
+<para>
+
+</para>
+
+@setting:
+@i:
+
+
+<!-- ##### FUNCTION nm_setting_ip_config_remove_dns_search_by_value ##### -->
+<para>
+
+</para>
+
+@setting:
+@dns_search:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ip_config_clear_dns_searches ##### -->
+<para>
+
+</para>
+
+@setting:
+
+
+<!-- ##### FUNCTION nm_setting_ip_config_get_num_addresses ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ip_config_get_address ##### -->
+<para>
+
+</para>
+
+@setting:
+@i:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ip_config_add_address ##### -->
+<para>
+
+</para>
+
+@setting:
+@address:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ip_config_remove_address ##### -->
+<para>
+
+</para>
+
+@setting:
+@i:
+
+
+<!-- ##### FUNCTION nm_setting_ip_config_remove_address_by_value ##### -->
+<para>
+
+</para>
+
+@setting:
+@address:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ip_config_clear_addresses ##### -->
+<para>
+
+</para>
+
+@setting:
+
+
+<!-- ##### FUNCTION nm_setting_ip_config_get_gateway ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ip_config_get_num_routes ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ip_config_get_route ##### -->
+<para>
+
+</para>
+
+@setting:
+@i:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ip_config_add_route ##### -->
+<para>
+
+</para>
+
+@setting:
+@route:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ip_config_remove_route ##### -->
+<para>
+
+</para>
+
+@setting:
+@i:
+
+
+<!-- ##### FUNCTION nm_setting_ip_config_remove_route_by_value ##### -->
+<para>
+
+</para>
+
+@setting:
+@route:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ip_config_clear_routes ##### -->
+<para>
+
+</para>
+
+@setting:
+
+
+<!-- ##### FUNCTION nm_setting_ip_config_get_route_metric ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ip_config_get_ignore_auto_routes ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ip_config_get_ignore_auto_dns ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ip_config_get_dhcp_hostname ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ip_config_get_dhcp_send_hostname ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ip_config_get_never_default ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ip_config_get_may_fail ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-setting-ip4-config.sgml b/docs/libnm/tmpl/nm-setting-ip4-config.sgml
new file mode 100644
index 000000000..3d1b3caaf
--- /dev/null
+++ b/docs/libnm/tmpl/nm-setting-ip4-config.sgml
@@ -0,0 +1,109 @@
+<!-- ##### SECTION Title ##### -->
+NMSettingIP4Config
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_SETTING_IP4_CONFIG_SETTING_NAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_IP4_CONFIG_METHOD_AUTO ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_IP4_CONFIG_METHOD_MANUAL ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_IP4_CONFIG_METHOD_SHARED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_IP4_CONFIG_METHOD_DISABLED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### STRUCT NMSettingIP4Config ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMSettingIP4Config:dhcp-client-id ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMSettingIP4ConfigClass ##### -->
+<para>
+
+</para>
+
+@parent:
+
+<!-- ##### FUNCTION nm_setting_ip4_config_new ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ip4_config_get_dhcp_client_id ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-setting-ip6-config.sgml b/docs/libnm/tmpl/nm-setting-ip6-config.sgml
new file mode 100644
index 000000000..821849633
--- /dev/null
+++ b/docs/libnm/tmpl/nm-setting-ip6-config.sgml
@@ -0,0 +1,126 @@
+<!-- ##### SECTION Title ##### -->
+NMSettingIP6Config
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_SETTING_IP6_CONFIG_SETTING_NAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_IP6_CONFIG_IP6_PRIVACY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_IP6_CONFIG_METHOD_IGNORE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_IP6_CONFIG_METHOD_AUTO ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_IP6_CONFIG_METHOD_DHCP ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_IP6_CONFIG_METHOD_MANUAL ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_IP6_CONFIG_METHOD_SHARED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### ENUM NMSettingIP6ConfigPrivacy ##### -->
+<para>
+
+</para>
+
+@NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN:
+@NM_SETTING_IP6_CONFIG_PRIVACY_DISABLED:
+@NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_PUBLIC_ADDR:
+@NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR:
+
+<!-- ##### STRUCT NMSettingIP6Config ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMSettingIP6Config:ip6-privacy ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMSettingIP6ConfigClass ##### -->
+<para>
+
+</para>
+
+@parent:
+
+<!-- ##### FUNCTION nm_setting_ip6_config_new ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ip6_config_get_ip6_privacy ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-setting-olpc-mesh.sgml b/docs/libnm/tmpl/nm-setting-olpc-mesh.sgml
new file mode 100644
index 000000000..dfcc9e081
--- /dev/null
+++ b/docs/libnm/tmpl/nm-setting-olpc-mesh.sgml
@@ -0,0 +1,116 @@
+<!-- ##### SECTION Title ##### -->
+NMSettingOlpcMesh
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_SETTING_OLPC_MESH_SETTING_NAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_OLPC_MESH_SSID ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_OLPC_MESH_CHANNEL ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### 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:
+
+<!-- ##### FUNCTION nm_setting_olpc_mesh_new ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_olpc_mesh_get_ssid ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_olpc_mesh_get_channel ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_olpc_mesh_get_dhcp_anycast_address ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-setting-ppp.sgml b/docs/libnm/tmpl/nm-setting-ppp.sgml
new file mode 100644
index 000000000..8ae7fa2b2
--- /dev/null
+++ b/docs/libnm/tmpl/nm-setting-ppp.sgml
@@ -0,0 +1,431 @@
+<!-- ##### SECTION Title ##### -->
+NMSettingPpp
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_SETTING_PPP_SETTING_NAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_PPP_NOAUTH ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_PPP_REFUSE_EAP ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_PPP_REFUSE_PAP ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_PPP_REFUSE_CHAP ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_PPP_REFUSE_MSCHAP ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_PPP_REFUSE_MSCHAPV2 ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_PPP_NOBSDCOMP ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_PPP_NODEFLATE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_PPP_NO_VJ_COMP ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_PPP_REQUIRE_MPPE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_PPP_REQUIRE_MPPE_128 ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_PPP_MPPE_STATEFUL ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_PPP_CRTSCTS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_PPP_BAUD ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_PPP_MRU ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_PPP_MTU ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_PPP_LCP_ECHO_FAILURE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_PPP_LCP_ECHO_INTERVAL ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### 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:
+
+<!-- ##### FUNCTION nm_setting_ppp_new ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ppp_get_noauth ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ppp_get_refuse_eap ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ppp_get_refuse_pap ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ppp_get_refuse_chap ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ppp_get_refuse_mschap ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ppp_get_refuse_mschapv2 ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ppp_get_nobsdcomp ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ppp_get_nodeflate ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ppp_get_no_vj_comp ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ppp_get_require_mppe ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ppp_get_require_mppe_128 ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ppp_get_mppe_stateful ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ppp_get_crtscts ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ppp_get_baud ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ppp_get_mru ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ppp_get_mtu ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ppp_get_lcp_echo_failure ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_ppp_get_lcp_echo_interval ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-setting-pppoe.sgml b/docs/libnm/tmpl/nm-setting-pppoe.sgml
new file mode 100644
index 000000000..932c49903
--- /dev/null
+++ b/docs/libnm/tmpl/nm-setting-pppoe.sgml
@@ -0,0 +1,137 @@
+<!-- ##### SECTION Title ##### -->
+NMSettingPppoe
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_SETTING_PPPOE_SETTING_NAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_PPPOE_SERVICE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_PPPOE_USERNAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_PPPOE_PASSWORD ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_PPPOE_PASSWORD_FLAGS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### 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:
+
+<!-- ##### FUNCTION nm_setting_pppoe_new ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_pppoe_get_service ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_pppoe_get_username ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_pppoe_get_password ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_pppoe_get_password_flags ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-setting-serial.sgml b/docs/libnm/tmpl/nm-setting-serial.sgml
new file mode 100644
index 000000000..2db0e5ce0
--- /dev/null
+++ b/docs/libnm/tmpl/nm-setting-serial.sgml
@@ -0,0 +1,167 @@
+<!-- ##### SECTION Title ##### -->
+NMSettingSerial
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_SETTING_SERIAL_SETTING_NAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### ENUM NMSettingSerialParity ##### -->
+<para>
+
+</para>
+
+@NM_SETTING_SERIAL_PARITY_NONE:
+@NM_SETTING_SERIAL_PARITY_EVEN:
+@NM_SETTING_SERIAL_PARITY_ODD:
+
+<!-- ##### MACRO NM_SETTING_SERIAL_BAUD ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_SERIAL_BITS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_SERIAL_PARITY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_SERIAL_STOPBITS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_SERIAL_SEND_DELAY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### 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:
+
+<!-- ##### FUNCTION nm_setting_serial_new ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_serial_get_baud ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_serial_get_bits ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_serial_get_parity ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_serial_get_stopbits ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_serial_get_send_delay ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-setting-team-port.sgml b/docs/libnm/tmpl/nm-setting-team-port.sgml
new file mode 100644
index 000000000..a8bb595b2
--- /dev/null
+++ b/docs/libnm/tmpl/nm-setting-team-port.sgml
@@ -0,0 +1,74 @@
+<!-- ##### 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>
+
+
+
+<!-- ##### MACRO NM_SETTING_TEAM_PORT_CONFIG ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### STRUCT NMSettingTeamPort ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMSettingTeamPort:config ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMSettingTeamPortClass ##### -->
+<para>
+
+</para>
+
+@parent:
+
+<!-- ##### 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/tmpl/nm-setting-team.sgml b/docs/libnm/tmpl/nm-setting-team.sgml
new file mode 100644
index 000000000..ed6ea8464
--- /dev/null
+++ b/docs/libnm/tmpl/nm-setting-team.sgml
@@ -0,0 +1,74 @@
+<!-- ##### 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>
+
+
+
+<!-- ##### MACRO NM_SETTING_TEAM_CONFIG ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### STRUCT NMSettingTeam ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMSettingTeam:config ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMSettingTeamClass ##### -->
+<para>
+
+</para>
+
+@parent:
+
+<!-- ##### FUNCTION nm_setting_team_new ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_team_get_config ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-setting-vlan.sgml b/docs/libnm/tmpl/nm-setting-vlan.sgml
new file mode 100644
index 000000000..fa0915d0d
--- /dev/null
+++ b/docs/libnm/tmpl/nm-setting-vlan.sgml
@@ -0,0 +1,245 @@
+<!-- ##### SECTION Title ##### -->
+NMSettingVlan
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_SETTING_VLAN_SETTING_NAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_VLAN_PARENT ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_VLAN_ID ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_VLAN_FLAGS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_VLAN_INGRESS_PRIORITY_MAP ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_VLAN_EGRESS_PRIORITY_MAP ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### 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:parent ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMSettingVlanClass ##### -->
+<para>
+
+</para>
+
+@parent:
+
+<!-- ##### ENUM NMVlanPriorityMap ##### -->
+<para>
+
+</para>
+
+@NM_VLAN_INGRESS_MAP:
+@NM_VLAN_EGRESS_MAP:
+
+<!-- ##### ENUM NMVlanFlags ##### -->
+<para>
+
+</para>
+
+@NM_VLAN_FLAG_REORDER_HEADERS:
+@NM_VLAN_FLAG_GVRP:
+@NM_VLAN_FLAG_LOOSE_BINDING:
+
+<!-- ##### FUNCTION nm_setting_vlan_new ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_vlan_get_parent ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_vlan_get_id ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_vlan_get_flags ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_vlan_get_num_priorities ##### -->
+<para>
+
+</para>
+
+@setting:
+@map:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_vlan_get_priority ##### -->
+<para>
+
+</para>
+
+@setting:
+@map:
+@idx:
+@out_from:
+@out_to:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_vlan_add_priority ##### -->
+<para>
+
+</para>
+
+@setting:
+@map:
+@from:
+@to:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_vlan_remove_priority ##### -->
+<para>
+
+</para>
+
+@setting:
+@map:
+@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>
+
+</para>
+
+@setting:
+@map:
+
+
+<!-- ##### FUNCTION nm_setting_vlan_add_priority_str ##### -->
+<para>
+
+</para>
+
+@setting:
+@map:
+@str:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-setting-vpn.sgml b/docs/libnm/tmpl/nm-setting-vpn.sgml
new file mode 100644
index 000000000..e7aef7710
--- /dev/null
+++ b/docs/libnm/tmpl/nm-setting-vpn.sgml
@@ -0,0 +1,248 @@
+<!-- ##### SECTION Title ##### -->
+NMSettingVpn
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_SETTING_VPN_SETTING_NAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_VPN_SERVICE_TYPE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_VPN_USER_NAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_VPN_PERSISTENT ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_VPN_DATA ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_VPN_SECRETS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### STRUCT NMSettingVpn ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMSettingVpn:data ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingVpn:persistent ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingVpn:secrets ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingVpn:service-type ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingVpn:user-name ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMSettingVpnClass ##### -->
+<para>
+
+</para>
+
+@parent:
+
+<!-- ##### USER_FUNCTION NMVpnIterFunc ##### -->
+<para>
+
+</para>
+
+@key:
+@value:
+@user_data:
+
+
+<!-- ##### FUNCTION nm_setting_vpn_new ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_vpn_get_service_type ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_vpn_get_user_name ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_vpn_get_persistent ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_vpn_get_num_data_items ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_vpn_add_data_item ##### -->
+<para>
+
+</para>
+
+@setting:
+@key:
+@item:
+
+
+<!-- ##### FUNCTION nm_setting_vpn_get_data_item ##### -->
+<para>
+
+</para>
+
+@setting:
+@key:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_vpn_remove_data_item ##### -->
+<para>
+
+</para>
+
+@setting:
+@key:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_vpn_foreach_data_item ##### -->
+<para>
+
+</para>
+
+@setting:
+@func:
+@user_data:
+
+
+<!-- ##### FUNCTION nm_setting_vpn_get_num_secrets ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_vpn_add_secret ##### -->
+<para>
+
+</para>
+
+@setting:
+@key:
+@secret:
+
+
+<!-- ##### FUNCTION nm_setting_vpn_get_secret ##### -->
+<para>
+
+</para>
+
+@setting:
+@key:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_vpn_remove_secret ##### -->
+<para>
+
+</para>
+
+@setting:
+@key:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_vpn_foreach_secret ##### -->
+<para>
+
+</para>
+
+@setting:
+@func:
+@user_data:
+
+
diff --git a/docs/libnm/tmpl/nm-setting-wimax.sgml b/docs/libnm/tmpl/nm-setting-wimax.sgml
new file mode 100644
index 000000000..51eb12de3
--- /dev/null
+++ b/docs/libnm/tmpl/nm-setting-wimax.sgml
@@ -0,0 +1,95 @@
+<!-- ##### SECTION Title ##### -->
+NMSettingWimax
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_SETTING_WIMAX_SETTING_NAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIMAX_NETWORK_NAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIMAX_MAC_ADDRESS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### 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>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wimax_get_network_name ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wimax_get_mac_address ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-setting-wired.sgml b/docs/libnm/tmpl/nm-setting-wired.sgml
new file mode 100644
index 000000000..06cd91579
--- /dev/null
+++ b/docs/libnm/tmpl/nm-setting-wired.sgml
@@ -0,0 +1,392 @@
+<!-- ##### SECTION Title ##### -->
+NMSettingWired
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_SETTING_WIRED_SETTING_NAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRED_PORT ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRED_SPEED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRED_DUPLEX ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRED_AUTO_NEGOTIATE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRED_MAC_ADDRESS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRED_CLONED_MAC_ADDRESS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRED_MTU ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRED_S390_SUBCHANNELS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRED_S390_NETTYPE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRED_S390_OPTIONS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### 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:
+
+<!-- ##### FUNCTION nm_setting_wired_new ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wired_get_port ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wired_get_speed ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wired_get_duplex ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wired_get_auto_negotiate ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wired_get_mac_address ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wired_get_cloned_mac_address ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wired_get_mac_address_blacklist ##### -->
+<para>
+
+</para>
+
+@setting:
+@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>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wired_get_s390_subchannels ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wired_get_s390_nettype ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wired_get_num_s390_options ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wired_get_s390_option ##### -->
+<para>
+
+</para>
+
+@setting:
+@idx:
+@out_key:
+@out_value:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wired_get_s390_option_by_key ##### -->
+<para>
+
+</para>
+
+@setting:
+@key:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wired_add_s390_option ##### -->
+<para>
+
+</para>
+
+@setting:
+@key:
+@value:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wired_remove_s390_option ##### -->
+<para>
+
+</para>
+
+@setting:
+@key:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wired_get_valid_s390_options ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-setting-wireless-security.sgml b/docs/libnm/tmpl/nm-setting-wireless-security.sgml
new file mode 100644
index 000000000..5cfed64c6
--- /dev/null
+++ b/docs/libnm/tmpl/nm-setting-wireless-security.sgml
@@ -0,0 +1,545 @@
+<!-- ##### SECTION Title ##### -->
+NMSettingWirelessSecurity
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_SETTING_WIRELESS_SECURITY_SETTING_NAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### ENUM NMWepKeyType ##### -->
+<para>
+
+</para>
+
+@NM_WEP_KEY_TYPE_UNKNOWN:
+@NM_WEP_KEY_TYPE_KEY:
+@NM_WEP_KEY_TYPE_PASSPHRASE:
+@NM_WEP_KEY_TYPE_LAST:
+
+<!-- ##### MACRO NM_SETTING_WIRELESS_SECURITY_KEY_MGMT ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRELESS_SECURITY_AUTH_ALG ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRELESS_SECURITY_PROTO ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRELESS_SECURITY_PAIRWISE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRELESS_SECURITY_GROUP ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRELESS_SECURITY_WEP_KEY0 ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRELESS_SECURITY_WEP_KEY1 ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRELESS_SECURITY_WEP_KEY2 ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRELESS_SECURITY_WEP_KEY3 ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRELESS_SECURITY_PSK ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### 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:
+
+<!-- ##### FUNCTION nm_setting_wireless_security_new ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_security_get_key_mgmt ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_security_get_num_protos ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_security_get_proto ##### -->
+<para>
+
+</para>
+
+@setting:
+@i:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_security_add_proto ##### -->
+<para>
+
+</para>
+
+@setting:
+@proto:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_security_remove_proto ##### -->
+<para>
+
+</para>
+
+@setting:
+@i:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_security_remove_proto_by_value ##### -->
+<para>
+
+</para>
+
+@setting:
+@proto:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_security_clear_protos ##### -->
+<para>
+
+</para>
+
+@setting:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_security_get_num_pairwise ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_security_get_pairwise ##### -->
+<para>
+
+</para>
+
+@setting:
+@i:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_security_add_pairwise ##### -->
+<para>
+
+</para>
+
+@setting:
+@pairwise:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_security_remove_pairwise ##### -->
+<para>
+
+</para>
+
+@setting:
+@i:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_security_remove_pairwise_by_value ##### -->
+<para>
+
+</para>
+
+@setting:
+@pairwise:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_security_clear_pairwise ##### -->
+<para>
+
+</para>
+
+@setting:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_security_get_num_groups ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_security_get_group ##### -->
+<para>
+
+</para>
+
+@setting:
+@i:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_security_add_group ##### -->
+<para>
+
+</para>
+
+@setting:
+@group:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_security_remove_group ##### -->
+<para>
+
+</para>
+
+@setting:
+@i:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_security_remove_group_by_value ##### -->
+<para>
+
+</para>
+
+@setting:
+@group:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_security_clear_groups ##### -->
+<para>
+
+</para>
+
+@setting:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_security_get_psk ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_security_get_psk_flags ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_security_get_leap_username ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_security_get_leap_password ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_security_get_leap_password_flags ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_security_get_wep_key ##### -->
+<para>
+
+</para>
+
+@setting:
+@idx:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_security_set_wep_key ##### -->
+<para>
+
+</para>
+
+@setting:
+@idx:
+@key:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_security_get_wep_tx_keyidx ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_security_get_auth_alg ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_security_get_wep_key_flags ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_security_get_wep_key_type ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-setting-wireless.sgml b/docs/libnm/tmpl/nm-setting-wireless.sgml
new file mode 100644
index 000000000..4a69fd77c
--- /dev/null
+++ b/docs/libnm/tmpl/nm-setting-wireless.sgml
@@ -0,0 +1,437 @@
+<!-- ##### SECTION Title ##### -->
+NMSettingWireless
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_SETTING_WIRELESS_SETTING_NAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRELESS_SSID ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRELESS_MODE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRELESS_BAND ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRELESS_CHANNEL ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRELESS_BSSID ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRELESS_RATE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRELESS_TX_POWER ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRELESS_MAC_ADDRESS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRELESS_MTU ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRELESS_SEEN_BSSIDS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRELESS_HIDDEN ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRELESS_MODE_ADHOC ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRELESS_MODE_AP ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_WIRELESS_MODE_INFRA ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### 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:seen-bssids ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWireless:ssid ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG NMSettingWireless:tx-power ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT NMSettingWirelessClass ##### -->
+<para>
+
+</para>
+
+@parent:
+
+<!-- ##### FUNCTION nm_setting_wireless_new ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_get_ssid ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_get_mode ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_get_band ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_get_channel ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_get_bssid ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_get_rate ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_get_tx_power ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_get_mac_address ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_get_cloned_mac_address ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_get_mac_address_blacklist ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_get_num_mac_blacklist_items ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### 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>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_get_hidden ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_add_seen_bssid ##### -->
+<para>
+
+</para>
+
+@setting:
+@bssid:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_get_num_seen_bssids ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_get_seen_bssid ##### -->
+<para>
+
+</para>
+
+@setting:
+@i:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_wireless_ap_security_compatible ##### -->
+<para>
+
+</para>
+
+@s_wireless:
+@s_wireless_sec:
+@ap_flags:
+@ap_wpa:
+@ap_rsn:
+@ap_mode:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-setting.sgml b/docs/libnm/tmpl/nm-setting.sgml
new file mode 100644
index 000000000..aec0ef912
--- /dev/null
+++ b/docs/libnm/tmpl/nm-setting.sgml
@@ -0,0 +1,252 @@
+<!-- ##### SECTION Title ##### -->
+NMSetting
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_SETTING_PARAM_REQUIRED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_PARAM_SECRET ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_PARAM_FUZZY_IGNORE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_SETTING_NAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### ENUM NMSettingSecretFlags ##### -->
+<para>
+
+</para>
+
+@NM_SETTING_SECRET_FLAG_NONE:
+@NM_SETTING_SECRET_FLAG_AGENT_OWNED:
+@NM_SETTING_SECRET_FLAG_NOT_SAVED:
+@NM_SETTING_SECRET_FLAG_NOT_REQUIRED:
+
+<!-- ##### ENUM NMSettingCompareFlags ##### -->
+<para>
+
+</para>
+
+@NM_SETTING_COMPARE_FLAG_EXACT:
+@NM_SETTING_COMPARE_FLAG_FUZZY:
+@NM_SETTING_COMPARE_FLAG_IGNORE_ID:
+@NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS:
+@NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS:
+@NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS:
+@NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT:
+@NM_SETTING_COMPARE_FLAG_DIFF_RESULT_NO_DEFAULT:
+@NM_SETTING_COMPARE_FLAG_IGNORE_TIMESTAMP:
+
+<!-- ##### STRUCT NMSetting ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG NMSetting:name ##### -->
+<para>
+
+</para>
+
+<!-- ##### USER_FUNCTION NMSettingClearSecretsWithFlagsFn ##### -->
+<para>
+
+</para>
+
+@setting:
+@secret:
+@flags:
+@user_data:
+@Returns:
+
+
+<!-- ##### STRUCT NMSettingClass ##### -->
+<para>
+
+</para>
+
+@parent:
+@verify:
+@need_secrets:
+@update_one_secret:
+@get_secret_flags:
+@set_secret_flags:
+@clear_secrets_with_flags:
+@compare_property:
+
+<!-- ##### USER_FUNCTION NMSettingValueIterFn ##### -->
+<para>
+
+</para>
+
+@setting:
+@key:
+@value:
+@flags:
+@user_data:
+
+
+<!-- ##### FUNCTION nm_setting_lookup_type ##### -->
+<para>
+
+</para>
+
+@name:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_duplicate ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_get_name ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_verify ##### -->
+<para>
+
+</para>
+
+@setting:
+@connection:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_compare ##### -->
+<para>
+
+</para>
+
+@a:
+@b:
+@flags:
+@Returns:
+
+
+<!-- ##### ENUM NMSettingDiffResult ##### -->
+<para>
+
+</para>
+
+@NM_SETTING_DIFF_RESULT_UNKNOWN:
+@NM_SETTING_DIFF_RESULT_IN_A:
+@NM_SETTING_DIFF_RESULT_IN_B:
+@NM_SETTING_DIFF_RESULT_IN_A_DEFAULT:
+@NM_SETTING_DIFF_RESULT_IN_B_DEFAULT:
+
+<!-- ##### FUNCTION nm_setting_diff ##### -->
+<para>
+
+</para>
+
+@a:
+@b:
+@flags:
+@invert_results:
+@results:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_enumerate_values ##### -->
+<para>
+
+</para>
+
+@setting:
+@func:
+@user_data:
+
+
+<!-- ##### FUNCTION nm_setting_to_string ##### -->
+<para>
+
+</para>
+
+@setting:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_get_secret_flags ##### -->
+<para>
+
+</para>
+
+@setting:
+@secret_name:
+@out_flags:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_set_secret_flags ##### -->
+<para>
+
+</para>
+
+@setting:
+@secret_name:
+@flags:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_setting_get_dbus_property_type ##### -->
+<para>
+
+</para>
+
+@setting:
+@property_name:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-simple-connection.sgml b/docs/libnm/tmpl/nm-simple-connection.sgml
new file mode 100644
index 000000000..683461f8f
--- /dev/null
+++ b/docs/libnm/tmpl/nm-simple-connection.sgml
@@ -0,0 +1,65 @@
+<!-- ##### SECTION Title ##### -->
+NMSimpleConnection
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### STRUCT NMSimpleConnection ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### STRUCT NMSimpleConnectionClass ##### -->
+<para>
+
+</para>
+
+@parent_class:
+
+<!-- ##### FUNCTION nm_simple_connection_new ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_simple_connection_new_from_dbus ##### -->
+<para>
+
+</para>
+
+@dict:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_simple_connection_new_clone ##### -->
+<para>
+
+</para>
+
+@connection:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-utils.sgml b/docs/libnm/tmpl/nm-utils.sgml
new file mode 100644
index 000000000..9981cc586
--- /dev/null
+++ b/docs/libnm/tmpl/nm-utils.sgml
@@ -0,0 +1,578 @@
+<!-- ##### SECTION Title ##### -->
+nm-utils
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### FUNCTION nm_utils_is_empty_ssid ##### -->
+<para>
+
+</para>
+
+@ssid:
+@len:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_escape_ssid ##### -->
+<para>
+
+</para>
+
+@ssid:
+@len:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_same_ssid ##### -->
+<para>
+
+</para>
+
+@ssid1:
+@len1:
+@ssid2:
+@len2:
+@ignore_trailing_null:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_ssid_to_utf8 ##### -->
+<para>
+
+</para>
+
+@ssid:
+@len:
+@Returns:
+
+
+<!-- ##### ENUM NMUtilsSecurityType ##### -->
+<para>
+
+</para>
+
+@NMU_SEC_INVALID:
+@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:
+
+<!-- ##### FUNCTION nm_utils_security_valid ##### -->
+<para>
+
+</para>
+
+@type:
+@wifi_caps:
+@have_ap:
+@adhoc:
+@ap_flags:
+@ap_wpa:
+@ap_rsn:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_ap_mode_security_valid ##### -->
+<para>
+
+</para>
+
+@type:
+@wifi_caps:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_wep_key_valid ##### -->
+<para>
+
+</para>
+
+@key:
+@wep_type:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_wpa_psk_valid ##### -->
+<para>
+
+</para>
+
+@psk:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_ip4_dns_to_variant ##### -->
+<para>
+
+</para>
+
+@dns:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_ip4_dns_from_variant ##### -->
+<para>
+
+</para>
+
+@value:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_ip4_addresses_to_variant ##### -->
+<para>
+
+</para>
+
+@addresses:
+@gateway:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_ip4_addresses_from_variant ##### -->
+<para>
+
+</para>
+
+@value:
+@out_gateway:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_ip4_routes_to_variant ##### -->
+<para>
+
+</para>
+
+@routes:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_ip4_routes_from_variant ##### -->
+<para>
+
+</para>
+
+@value:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_ip4_netmask_to_prefix ##### -->
+<para>
+
+</para>
+
+@netmask:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_ip4_prefix_to_netmask ##### -->
+<para>
+
+</para>
+
+@prefix:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_ip4_get_default_prefix ##### -->
+<para>
+
+</para>
+
+@ip:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_ip6_dns_to_variant ##### -->
+<para>
+
+</para>
+
+@dns:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_ip6_dns_from_variant ##### -->
+<para>
+
+</para>
+
+@value:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_ip6_addresses_to_variant ##### -->
+<para>
+
+</para>
+
+@addresses:
+@gateway:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_ip6_addresses_from_variant ##### -->
+<para>
+
+</para>
+
+@value:
+@out_gateway:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_ip6_routes_to_variant ##### -->
+<para>
+
+</para>
+
+@routes:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_ip6_routes_from_variant ##### -->
+<para>
+
+</para>
+
+@value:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_ip_addresses_to_variant ##### -->
+<para>
+
+</para>
+
+@addresses:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_ip_addresses_from_variant ##### -->
+<para>
+
+</para>
+
+@value:
+@family:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_ip_routes_to_variant ##### -->
+<para>
+
+</para>
+
+@routes:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_ip_routes_from_variant ##### -->
+<para>
+
+</para>
+
+@value:
+@family:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_uuid_generate ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_file_is_certificate ##### -->
+<para>
+
+</para>
+
+@filename:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_file_is_private_key ##### -->
+<para>
+
+</para>
+
+@filename:
+@out_encrypted:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_file_is_pkcs12 ##### -->
+<para>
+
+</para>
+
+@filename:
+@Returns:
+
+
+<!-- ##### USER_FUNCTION NMUtilsFileSearchInPathsPredicate ##### -->
+<para>
+
+</para>
+
+@filename:
+@user_data:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_file_search_in_paths ##### -->
+<para>
+
+</para>
+
+@progname:
+@try_first:
+@paths:
+@file_test_flags:
+@predicate:
+@user_data:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_wifi_freq_to_channel ##### -->
+<para>
+
+</para>
+
+@freq:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_wifi_channel_to_freq ##### -->
+<para>
+
+</para>
+
+@channel:
+@band:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_wifi_find_next_channel ##### -->
+<para>
+
+</para>
+
+@channel:
+@direction:
+@band:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_wifi_is_channel_valid ##### -->
+<para>
+
+</para>
+
+@channel:
+@band:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_wifi_strength_bars ##### -->
+<para>
+
+</para>
+
+@strength:
+@Returns:
+
+
+<!-- ##### MACRO NM_UTILS_HWADDR_LEN_MAX ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### FUNCTION nm_utils_hwaddr_len ##### -->
+<para>
+
+</para>
+
+@type:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_hwaddr_ntoa ##### -->
+<para>
+
+</para>
+
+@addr:
+@length:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_hwaddr_atoba ##### -->
+<para>
+
+</para>
+
+@asc:
+@length:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_hwaddr_aton ##### -->
+<para>
+
+</para>
+
+@asc:
+@buffer:
+@length:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_hwaddr_valid ##### -->
+<para>
+
+</para>
+
+@asc:
+@length:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_hwaddr_canonical ##### -->
+<para>
+
+</para>
+
+@asc:
+@length:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_hwaddr_matches ##### -->
+<para>
+
+</para>
+
+@hwaddr1:
+@hwaddr1_len:
+@hwaddr2:
+@hwaddr2_len:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_bin2hexstr ##### -->
+<para>
+
+</para>
+
+@src:
+@len:
+@final_len:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_hexstr2bin ##### -->
+<para>
+
+</para>
+
+@hex:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_iface_valid_name ##### -->
+<para>
+
+</para>
+
+@name:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_is_uuid ##### -->
+<para>
+
+</para>
+
+@str:
+@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_ipaddr_valid ##### -->
+<para>
+
+</para>
+
+@family:
+@ip:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_utils_check_virtual_device_compatibility ##### -->
+<para>
+
+</para>
+
+@virtual_type:
+@other_type:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-version.sgml b/docs/libnm/tmpl/nm-version.sgml
new file mode 100644
index 000000000..c27d75bd4
--- /dev/null
+++ b/docs/libnm/tmpl/nm-version.sgml
@@ -0,0 +1,158 @@
+<!-- ##### SECTION Title ##### -->
+nm-version
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_MAJOR_VERSION ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_MINOR_VERSION ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_MICRO_VERSION ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_CHECK_VERSION ##### -->
+<para>
+
+</para>
+
+@major:
+@minor:
+@micro:
+
+
+<!-- ##### MACRO NM_ENCODE_VERSION ##### -->
+<para>
+
+</para>
+
+@major:
+@minor:
+@micro:
+
+
+<!-- ##### MACRO NM_VERSION_0_9_8 ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VERSION_0_9_10 ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VERSION_1_0 ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VERSION_CUR_STABLE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VERSION_NEXT_STABLE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VERSION_MIN_REQUIRED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VERSION_MAX_ALLOWED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEPRECATED_IN_0_9_10 ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEPRECATED_IN_0_9_10_FOR ##### -->
+<para>
+
+</para>
+
+@f:
+
+
+<!-- ##### MACRO NM_DEPRECATED_IN_1_0 ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DEPRECATED_IN_1_0_FOR ##### -->
+<para>
+
+</para>
+
+@f:
+
+
+<!-- ##### MACRO NM_AVAILABLE_IN_0_9_10 ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_AVAILABLE_IN_1_0 ##### -->
+<para>
+
+</para>
+
+
+
diff --git a/docs/libnm/tmpl/nm-vpn-connection.sgml b/docs/libnm/tmpl/nm-vpn-connection.sgml
new file mode 100644
index 000000000..0b85b6f0c
--- /dev/null
+++ b/docs/libnm/tmpl/nm-vpn-connection.sgml
@@ -0,0 +1,89 @@
+<!-- ##### SECTION Title ##### -->
+NMVpnConnection
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_VPN_CONNECTION_VPN_STATE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_CONNECTION_BANNER ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### 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:
+
+<!-- ##### FUNCTION nm_vpn_connection_get_vpn_state ##### -->
+<para>
+
+</para>
+
+@vpn:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_vpn_connection_get_banner ##### -->
+<para>
+
+</para>
+
+@vpn:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-vpn-dbus-interface.sgml b/docs/libnm/tmpl/nm-vpn-dbus-interface.sgml
new file mode 100644
index 000000000..c4a88fe38
--- /dev/null
+++ b/docs/libnm/tmpl/nm-vpn-dbus-interface.sgml
@@ -0,0 +1,484 @@
+<!-- ##### SECTION Title ##### -->
+nm-vpn-dbus-interface
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_DBUS_PATH_VPN ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_VPN ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_PATH_VPN_CONNECTION ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INTERFACE_VPN_CONNECTION ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_DBUS_PLUGIN_PATH ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_DBUS_PLUGIN_INTERFACE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_NO_ACTIVE_VPN_CONNECTION ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_NO_VPN_CONNECTIONS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_INVALID_VPN_CONNECTION ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_VPN_ERROR_PREFIX ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_VPN_STARTING_IN_PROGRESS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_VPN_ALREADY_STARTED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_VPN_STOPPING_IN_PROGRESS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_VPN_ALREADY_STOPPED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_VPN_WRONG_STATE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_VPN_BAD_ARGUMENTS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_VPN_INTERACTIVE_NOT_SUPPORTED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_VPN_SIGNAL_LOGIN_BANNER ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_VPN_SIGNAL_LOGIN_FAILED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_VPN_SIGNAL_LAUNCH_FAILED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_VPN_SIGNAL_CONNECT_FAILED ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_VPN_SIGNAL_VPN_CONFIG_BAD ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_VPN_SIGNAL_IP_CONFIG_BAD ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_VPN_SIGNAL_STATE_CHANGE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_DBUS_VPN_SIGNAL_IP4_CONFIG ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### ENUM NMVpnServiceState ##### -->
+<para>
+
+</para>
+
+@NM_VPN_SERVICE_STATE_UNKNOWN:
+@NM_VPN_SERVICE_STATE_INIT:
+@NM_VPN_SERVICE_STATE_SHUTDOWN:
+@NM_VPN_SERVICE_STATE_STARTING:
+@NM_VPN_SERVICE_STATE_STARTED:
+@NM_VPN_SERVICE_STATE_STOPPING:
+@NM_VPN_SERVICE_STATE_STOPPED:
+
+<!-- ##### ENUM NMVpnConnectionState ##### -->
+<para>
+
+</para>
+
+@NM_VPN_CONNECTION_STATE_UNKNOWN:
+@NM_VPN_CONNECTION_STATE_PREPARE:
+@NM_VPN_CONNECTION_STATE_NEED_AUTH:
+@NM_VPN_CONNECTION_STATE_CONNECT:
+@NM_VPN_CONNECTION_STATE_IP_CONFIG_GET:
+@NM_VPN_CONNECTION_STATE_ACTIVATED:
+@NM_VPN_CONNECTION_STATE_FAILED:
+@NM_VPN_CONNECTION_STATE_DISCONNECTED:
+
+<!-- ##### ENUM NMVpnConnectionStateReason ##### -->
+<para>
+
+</para>
+
+@NM_VPN_CONNECTION_STATE_REASON_UNKNOWN:
+@NM_VPN_CONNECTION_STATE_REASON_NONE:
+@NM_VPN_CONNECTION_STATE_REASON_USER_DISCONNECTED:
+@NM_VPN_CONNECTION_STATE_REASON_DEVICE_DISCONNECTED:
+@NM_VPN_CONNECTION_STATE_REASON_SERVICE_STOPPED:
+@NM_VPN_CONNECTION_STATE_REASON_IP_CONFIG_INVALID:
+@NM_VPN_CONNECTION_STATE_REASON_CONNECT_TIMEOUT:
+@NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_TIMEOUT:
+@NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_FAILED:
+@NM_VPN_CONNECTION_STATE_REASON_NO_SECRETS:
+@NM_VPN_CONNECTION_STATE_REASON_LOGIN_FAILED:
+@NM_VPN_CONNECTION_STATE_REASON_CONNECTION_REMOVED:
+
+<!-- ##### ENUM NMVpnPluginFailure ##### -->
+<para>
+
+</para>
+
+@NM_VPN_PLUGIN_FAILURE_LOGIN_FAILED:
+@NM_VPN_PLUGIN_FAILURE_CONNECT_FAILED:
+@NM_VPN_PLUGIN_FAILURE_BAD_IP_CONFIG:
+
+<!-- ##### MACRO NM_VPN_PLUGIN_CONFIG_TUNDEV ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_CONFIG_BANNER ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_CONFIG_EXT_GATEWAY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_CONFIG_MTU ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_CONFIG_HAS_IP4 ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_CONFIG_HAS_IP6 ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_CAN_PERSIST ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP4_CONFIG_INT_GATEWAY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP4_CONFIG_ADDRESS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP4_CONFIG_PTP ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP4_CONFIG_PREFIX ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP4_CONFIG_DNS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP4_CONFIG_NBNS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP4_CONFIG_MSS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP4_CONFIG_DOMAIN ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP4_CONFIG_DOMAINS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP4_CONFIG_ROUTES ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP4_CONFIG_NEVER_DEFAULT ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP4_CONFIG_GATEWAY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP4_CONFIG_BANNER ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP4_CONFIG_MTU ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP4_CONFIG_TUNDEV ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP6_CONFIG_INT_GATEWAY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP6_CONFIG_ADDRESS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP6_CONFIG_PTP ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP6_CONFIG_PREFIX ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP6_CONFIG_DNS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP6_CONFIG_MSS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP6_CONFIG_DOMAIN ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP6_CONFIG_DOMAINS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP6_CONFIG_ROUTES ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_PLUGIN_IP6_CONFIG_NEVER_DEFAULT ##### -->
+<para>
+
+</para>
+
+
+
diff --git a/docs/libnm/tmpl/nm-vpn-editor-plugin.sgml b/docs/libnm/tmpl/nm-vpn-editor-plugin.sgml
new file mode 100644
index 000000000..f657e7e2a
--- /dev/null
+++ b/docs/libnm/tmpl/nm-vpn-editor-plugin.sgml
@@ -0,0 +1,169 @@
+<!-- ##### SECTION Title ##### -->
+NMVpnEditorPlugin
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### USER_FUNCTION NMVpnEditorPluginFactory ##### -->
+<para>
+
+</para>
+
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_vpn_editor_plugin_factory ##### -->
+<para>
+
+</para>
+
+@error:
+@Returns:
+
+
+<!-- ##### ENUM NMVpnEditorPluginCapability ##### -->
+<para>
+
+</para>
+
+@NM_VPN_EDITOR_PLUGIN_CAPABILITY_NONE:
+@NM_VPN_EDITOR_PLUGIN_CAPABILITY_IMPORT:
+@NM_VPN_EDITOR_PLUGIN_CAPABILITY_EXPORT:
+@NM_VPN_EDITOR_PLUGIN_CAPABILITY_IPV6:
+
+<!-- ##### MACRO NM_VPN_EDITOR_PLUGIN_NAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_EDITOR_PLUGIN_DESCRIPTION ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_VPN_EDITOR_PLUGIN_SERVICE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### STRUCT NMVpnEditorPluginInterface ##### -->
+<para>
+
+</para>
+
+@g_iface:
+@get_editor:
+@get_capabilities:
+@import_from_file:
+@export_to_file:
+@get_suggested_filename:
+
+<!-- ##### FUNCTION nm_vpn_editor_plugin_get_editor ##### -->
+<para>
+
+</para>
+
+@plugin:
+@connection:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_vpn_editor_plugin_get_capabilities ##### -->
+<para>
+
+</para>
+
+@plugin:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_vpn_editor_plugin_import ##### -->
+<para>
+
+</para>
+
+@plugin:
+@path:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_vpn_editor_plugin_export ##### -->
+<para>
+
+</para>
+
+@plugin:
+@path:
+@connection:
+@error:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_vpn_editor_plugin_get_suggested_filename ##### -->
+<para>
+
+</para>
+
+@plugin:
+@connection:
+@Returns:
+
+
+<!-- ##### STRUCT NMVpnEditorInterface ##### -->
+<para>
+
+</para>
+
+@g_iface:
+@get_widget:
+@placeholder:
+@update_connection:
+@changed:
+
+<!-- ##### FUNCTION nm_vpn_editor_get_widget ##### -->
+<para>
+
+</para>
+
+@editor:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_vpn_editor_update_connection ##### -->
+<para>
+
+</para>
+
+@editor:
+@connection:
+@error:
+@Returns:
+
+
diff --git a/docs/libnm/tmpl/nm-wimax-nsp.sgml b/docs/libnm/tmpl/nm-wimax-nsp.sgml
new file mode 100644
index 000000000..12143f546
--- /dev/null
+++ b/docs/libnm/tmpl/nm-wimax-nsp.sgml
@@ -0,0 +1,130 @@
+<!-- ##### SECTION Title ##### -->
+NMWimaxNsp
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### MACRO NM_WIMAX_NSP_NAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_WIMAX_NSP_SIGNAL_QUALITY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO NM_WIMAX_NSP_NETWORK_TYPE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### ENUM NMWimaxNspNetworkType ##### -->
+<para>
+
+</para>
+
+@NM_WIMAX_NSP_NETWORK_TYPE_UNKNOWN:
+@NM_WIMAX_NSP_NETWORK_TYPE_HOME:
+@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:
+
+<!-- ##### FUNCTION nm_wimax_nsp_get_name ##### -->
+<para>
+
+</para>
+
+@nsp:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_wimax_nsp_get_signal_quality ##### -->
+<para>
+
+</para>
+
+@nsp:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_wimax_nsp_get_network_type ##### -->
+<para>
+
+</para>
+
+@nsp:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_wimax_nsp_filter_connections ##### -->
+<para>
+
+</para>
+
+@nsp:
+@connections:
+@Returns:
+
+
+<!-- ##### FUNCTION nm_wimax_nsp_connection_valid ##### -->
+<para>
+
+</para>
+
+@nsp:
+@connection:
+@Returns:
+
+
diff --git a/docs/libnm/version.xml b/docs/libnm/version.xml
new file mode 100644
index 000000000..3eefcb9dd
--- /dev/null
+++ b/docs/libnm/version.xml
@@ -0,0 +1 @@
+1.0.0
diff --git a/docs/libnm/version.xml.in b/docs/libnm/version.xml.in
new file mode 100644
index 000000000..d78bda934
--- /dev/null
+++ b/docs/libnm/version.xml.in
@@ -0,0 +1 @@
+@VERSION@
diff --git a/examples/C/Makefile.in b/examples/C/Makefile.in
index 95754494d..c3bdf7e63 100644
--- a/examples/C/Makefile.in
+++ b/examples/C/Makefile.in
@@ -190,6 +190,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -313,6 +315,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -332,6 +335,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -358,7 +362,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
diff --git a/examples/C/glib/Makefile.am b/examples/C/glib/Makefile.am
index 1f4785dad..d8e5d2853 100644
--- a/examples/C/glib/Makefile.am
+++ b/examples/C/glib/Makefile.am
@@ -1,83 +1,53 @@
AM_CPPFLAGS = \
- -I${top_srcdir}/libnm-util \
- -I${top_builddir}/libnm-util \
- -I${top_srcdir}/libnm-glib \
-I${top_srcdir}/include \
- -I${top_builddir}/include \
- $(DBUS_CFLAGS) \
+ -I${top_srcdir}/libnm-core \
+ -I${top_builddir}/libnm-core \
+ -I${top_srcdir}/libnm \
+ -I${top_builddir}/libnm \
$(GLIB_CFLAGS)
noinst_PROGRAMS = \
- add-connection-dbus-glib \
- add-connection-libnm-glib \
- get-active-connections-dbus-glib \
- list-connections-dbus-glib \
- list-connections-libnm-glib \
- get-ap-info-libnm-glib \
- monitor-nm-running-dbus-glib \
- monitor-nm-running-GDBus \
- monitor-nm-state-GDBus
+ add-connection-gdbus \
+ add-connection-libnm \
+ get-active-connections-gdbus \
+ get-ap-info-libnm \
+ list-connections-gdbus \
+ list-connections-libnm \
+ monitor-nm-running-gdbus \
+ monitor-nm-state-gdbus
-add_connection_dbus_glib_SOURCES = add-connection-dbus-glib.c
-add_connection_dbus_glib_LDADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(DBUS_LIBS) \
- $(GLIB_LIBS)
-
-add_connection_libnm_glib_SOURCES = add-connection-libnm-glib.c
-add_connection_libnm_glib_LDADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(top_builddir)/libnm-glib/libnm-glib.la \
- $(DBUS_LIBS) \
- $(GLIB_LIBS)
+add_connection_gdbus_SOURCES = add-connection-gdbus.c
+add_connection_gdbus_LDADD = \
+ $(GLIB_LIBS) \
+ $(UUID_LIBS)
-get_active_connections_dbus_glib_SOURCES = get-active-connections-dbus-glib.c
-get_active_connections_dbus_glib_LDADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(DBUS_LIBS) \
+add_connection_libnm_SOURCES = add-connection-libnm.c
+add_connection_libnm_LDADD = \
+ $(top_builddir)/libnm/libnm.la \
$(GLIB_LIBS)
-list_connections_dbus_glib_SOURCES = list-connections-dbus-glib.c
-list_connections_dbus_glib_LDADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(DBUS_LIBS) \
+get_active_connections_gdbus_SOURCES = get-active-connections-gdbus.c
+get_active_connections_gdbus_LDADD = \
$(GLIB_LIBS)
-list_connections_libnm_glib_SOURCES = list-connections-libnm-glib.c
-list_connections_libnm_glib_LDADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(top_builddir)/libnm-glib/libnm-glib.la \
- $(DBUS_LIBS) \
+get_ap_info_libnm_SOURCES = get-ap-info-libnm.c
+get_ap_info_libnm_LDADD = \
+ $(top_builddir)/libnm/libnm.la \
$(GLIB_LIBS)
-get_ap_info_libnm_glib_SOURCES = get-ap-info-libnm-glib.c
-get_ap_info_libnm_glib_LDADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(top_builddir)/libnm-glib/libnm-glib.la \
- $(DBUS_LIBS) \
+list_connections_gdbus_SOURCES = list-connections-gdbus.c
+list_connections_gdbus_LDADD = \
$(GLIB_LIBS)
-monitor_nm_running_dbus_glib_SOURCES = monitor-nm-running-dbus-glib.c
-monitor_nm_running_dbus_glib_LDADD = \
- $(DBUS_LIBS) \
+list_connections_libnm_SOURCES = list-connections-libnm.c
+list_connections_libnm_LDADD = \
+ $(top_builddir)/libnm/libnm.la \
$(GLIB_LIBS)
-monitor_nm_running_GDBus_SOURCES = monitor-nm-running-GDBus.c
-monitor_nm_running_GDBus_LDADD = \
+monitor_nm_running_gdbus_SOURCES = monitor-nm-running-gdbus.c
+monitor_nm_running_gdbus_LDADD = \
$(GLIB_LIBS)
-monitor_nm_state_GDBus_SOURCES = monitor-nm-state-GDBus.c
-monitor_nm_state_GDBus_LDADD = \
+monitor_nm_state_gdbus_SOURCES = monitor-nm-state-gdbus.c
+monitor_nm_state_gdbus_LDADD = \
$(GLIB_LIBS)
-
-EXTRA_DIST = \
- add-connection-dbus-glib.c \
- add-connection-libnm-glib.c \
- get-active-connections-dbus-glib.c \
- list-connections-dbus-glib.c \
- list-connections-libnm-glib.c \
- get-ap-info-libnm-glib.c \
- monitor-nm-running-dbus-glib.c \
- monitor-nm-running-GDBus.c \
- monitor-nm-state-GDBus.c
-
diff --git a/examples/C/glib/Makefile.in b/examples/C/glib/Makefile.in
index e58e66d01..d2790a7a2 100644
--- a/examples/C/glib/Makefile.in
+++ b/examples/C/glib/Makefile.in
@@ -78,15 +78,13 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-noinst_PROGRAMS = add-connection-dbus-glib$(EXEEXT) \
- add-connection-libnm-glib$(EXEEXT) \
- get-active-connections-dbus-glib$(EXEEXT) \
- list-connections-dbus-glib$(EXEEXT) \
- list-connections-libnm-glib$(EXEEXT) \
- get-ap-info-libnm-glib$(EXEEXT) \
- monitor-nm-running-dbus-glib$(EXEEXT) \
- monitor-nm-running-GDBus$(EXEEXT) \
- monitor-nm-state-GDBus$(EXEEXT)
+noinst_PROGRAMS = add-connection-gdbus$(EXEEXT) \
+ add-connection-libnm$(EXEEXT) \
+ get-active-connections-gdbus$(EXEEXT) \
+ get-ap-info-libnm$(EXEEXT) list-connections-gdbus$(EXEEXT) \
+ list-connections-libnm$(EXEEXT) \
+ monitor-nm-running-gdbus$(EXEEXT) \
+ monitor-nm-state-gdbus$(EXEEXT)
subdir = examples/C/glib
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
@@ -111,68 +109,43 @@ CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
PROGRAMS = $(noinst_PROGRAMS)
-am_add_connection_dbus_glib_OBJECTS = \
- add-connection-dbus-glib.$(OBJEXT)
-add_connection_dbus_glib_OBJECTS = \
- $(am_add_connection_dbus_glib_OBJECTS)
+am_add_connection_gdbus_OBJECTS = add-connection-gdbus.$(OBJEXT)
+add_connection_gdbus_OBJECTS = $(am_add_connection_gdbus_OBJECTS)
am__DEPENDENCIES_1 =
-add_connection_dbus_glib_DEPENDENCIES = \
- $(top_builddir)/libnm-util/libnm-util.la $(am__DEPENDENCIES_1) \
+add_connection_gdbus_DEPENDENCIES = $(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 =
-am_add_connection_libnm_glib_OBJECTS = \
- add-connection-libnm-glib.$(OBJEXT)
-add_connection_libnm_glib_OBJECTS = \
- $(am_add_connection_libnm_glib_OBJECTS)
-add_connection_libnm_glib_DEPENDENCIES = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(top_builddir)/libnm-glib/libnm-glib.la $(am__DEPENDENCIES_1) \
+am_add_connection_libnm_OBJECTS = add-connection-libnm.$(OBJEXT)
+add_connection_libnm_OBJECTS = $(am_add_connection_libnm_OBJECTS)
+add_connection_libnm_DEPENDENCIES = $(top_builddir)/libnm/libnm.la \
$(am__DEPENDENCIES_1)
-am_get_active_connections_dbus_glib_OBJECTS = \
- get-active-connections-dbus-glib.$(OBJEXT)
-get_active_connections_dbus_glib_OBJECTS = \
- $(am_get_active_connections_dbus_glib_OBJECTS)
-get_active_connections_dbus_glib_DEPENDENCIES = \
- $(top_builddir)/libnm-util/libnm-util.la $(am__DEPENDENCIES_1) \
+am_get_active_connections_gdbus_OBJECTS = \
+ get-active-connections-gdbus.$(OBJEXT)
+get_active_connections_gdbus_OBJECTS = \
+ $(am_get_active_connections_gdbus_OBJECTS)
+get_active_connections_gdbus_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_get_ap_info_libnm_OBJECTS = get-ap-info-libnm.$(OBJEXT)
+get_ap_info_libnm_OBJECTS = $(am_get_ap_info_libnm_OBJECTS)
+get_ap_info_libnm_DEPENDENCIES = $(top_builddir)/libnm/libnm.la \
$(am__DEPENDENCIES_1)
-am_get_ap_info_libnm_glib_OBJECTS = get-ap-info-libnm-glib.$(OBJEXT)
-get_ap_info_libnm_glib_OBJECTS = $(am_get_ap_info_libnm_glib_OBJECTS)
-get_ap_info_libnm_glib_DEPENDENCIES = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(top_builddir)/libnm-glib/libnm-glib.la $(am__DEPENDENCIES_1) \
+am_list_connections_gdbus_OBJECTS = list-connections-gdbus.$(OBJEXT)
+list_connections_gdbus_OBJECTS = $(am_list_connections_gdbus_OBJECTS)
+list_connections_gdbus_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_list_connections_libnm_OBJECTS = list-connections-libnm.$(OBJEXT)
+list_connections_libnm_OBJECTS = $(am_list_connections_libnm_OBJECTS)
+list_connections_libnm_DEPENDENCIES = $(top_builddir)/libnm/libnm.la \
$(am__DEPENDENCIES_1)
-am_list_connections_dbus_glib_OBJECTS = \
- list-connections-dbus-glib.$(OBJEXT)
-list_connections_dbus_glib_OBJECTS = \
- $(am_list_connections_dbus_glib_OBJECTS)
-list_connections_dbus_glib_DEPENDENCIES = \
- $(top_builddir)/libnm-util/libnm-util.la $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1)
-am_list_connections_libnm_glib_OBJECTS = \
- list-connections-libnm-glib.$(OBJEXT)
-list_connections_libnm_glib_OBJECTS = \
- $(am_list_connections_libnm_glib_OBJECTS)
-list_connections_libnm_glib_DEPENDENCIES = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(top_builddir)/libnm-glib/libnm-glib.la $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1)
-am_monitor_nm_running_GDBus_OBJECTS = \
- monitor-nm-running-GDBus.$(OBJEXT)
-monitor_nm_running_GDBus_OBJECTS = \
- $(am_monitor_nm_running_GDBus_OBJECTS)
-monitor_nm_running_GDBus_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am_monitor_nm_running_dbus_glib_OBJECTS = \
- monitor-nm-running-dbus-glib.$(OBJEXT)
-monitor_nm_running_dbus_glib_OBJECTS = \
- $(am_monitor_nm_running_dbus_glib_OBJECTS)
-monitor_nm_running_dbus_glib_DEPENDENCIES = $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1)
-am_monitor_nm_state_GDBus_OBJECTS = monitor-nm-state-GDBus.$(OBJEXT)
-monitor_nm_state_GDBus_OBJECTS = $(am_monitor_nm_state_GDBus_OBJECTS)
-monitor_nm_state_GDBus_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_monitor_nm_running_gdbus_OBJECTS = \
+ monitor-nm-running-gdbus.$(OBJEXT)
+monitor_nm_running_gdbus_OBJECTS = \
+ $(am_monitor_nm_running_gdbus_OBJECTS)
+monitor_nm_running_gdbus_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_monitor_nm_state_gdbus_OBJECTS = monitor-nm-state-gdbus.$(OBJEXT)
+monitor_nm_state_gdbus_OBJECTS = $(am_monitor_nm_state_gdbus_OBJECTS)
+monitor_nm_state_gdbus_DEPENDENCIES = $(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
@@ -207,24 +180,20 @@ 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 = $(add_connection_dbus_glib_SOURCES) \
- $(add_connection_libnm_glib_SOURCES) \
- $(get_active_connections_dbus_glib_SOURCES) \
- $(get_ap_info_libnm_glib_SOURCES) \
- $(list_connections_dbus_glib_SOURCES) \
- $(list_connections_libnm_glib_SOURCES) \
- $(monitor_nm_running_GDBus_SOURCES) \
- $(monitor_nm_running_dbus_glib_SOURCES) \
- $(monitor_nm_state_GDBus_SOURCES)
-DIST_SOURCES = $(add_connection_dbus_glib_SOURCES) \
- $(add_connection_libnm_glib_SOURCES) \
- $(get_active_connections_dbus_glib_SOURCES) \
- $(get_ap_info_libnm_glib_SOURCES) \
- $(list_connections_dbus_glib_SOURCES) \
- $(list_connections_libnm_glib_SOURCES) \
- $(monitor_nm_running_GDBus_SOURCES) \
- $(monitor_nm_running_dbus_glib_SOURCES) \
- $(monitor_nm_state_GDBus_SOURCES)
+SOURCES = $(add_connection_gdbus_SOURCES) \
+ $(add_connection_libnm_SOURCES) \
+ $(get_active_connections_gdbus_SOURCES) \
+ $(get_ap_info_libnm_SOURCES) $(list_connections_gdbus_SOURCES) \
+ $(list_connections_libnm_SOURCES) \
+ $(monitor_nm_running_gdbus_SOURCES) \
+ $(monitor_nm_state_gdbus_SOURCES)
+DIST_SOURCES = $(add_connection_gdbus_SOURCES) \
+ $(add_connection_libnm_SOURCES) \
+ $(get_active_connections_gdbus_SOURCES) \
+ $(get_ap_info_libnm_SOURCES) $(list_connections_gdbus_SOURCES) \
+ $(list_connections_libnm_SOURCES) \
+ $(monitor_nm_running_gdbus_SOURCES) \
+ $(monitor_nm_state_gdbus_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -259,6 +228,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -382,6 +353,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -401,6 +373,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -427,7 +400,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -507,77 +480,49 @@ with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
with_valgrind = @with_valgrind@
AM_CPPFLAGS = \
- -I${top_srcdir}/libnm-util \
- -I${top_builddir}/libnm-util \
- -I${top_srcdir}/libnm-glib \
-I${top_srcdir}/include \
- -I${top_builddir}/include \
- $(DBUS_CFLAGS) \
+ -I${top_srcdir}/libnm-core \
+ -I${top_builddir}/libnm-core \
+ -I${top_srcdir}/libnm \
+ -I${top_builddir}/libnm \
$(GLIB_CFLAGS)
-add_connection_dbus_glib_SOURCES = add-connection-dbus-glib.c
-add_connection_dbus_glib_LDADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(DBUS_LIBS) \
- $(GLIB_LIBS)
-
-add_connection_libnm_glib_SOURCES = add-connection-libnm-glib.c
-add_connection_libnm_glib_LDADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(top_builddir)/libnm-glib/libnm-glib.la \
- $(DBUS_LIBS) \
- $(GLIB_LIBS)
+add_connection_gdbus_SOURCES = add-connection-gdbus.c
+add_connection_gdbus_LDADD = \
+ $(GLIB_LIBS) \
+ $(UUID_LIBS)
-get_active_connections_dbus_glib_SOURCES = get-active-connections-dbus-glib.c
-get_active_connections_dbus_glib_LDADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(DBUS_LIBS) \
+add_connection_libnm_SOURCES = add-connection-libnm.c
+add_connection_libnm_LDADD = \
+ $(top_builddir)/libnm/libnm.la \
$(GLIB_LIBS)
-list_connections_dbus_glib_SOURCES = list-connections-dbus-glib.c
-list_connections_dbus_glib_LDADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(DBUS_LIBS) \
+get_active_connections_gdbus_SOURCES = get-active-connections-gdbus.c
+get_active_connections_gdbus_LDADD = \
$(GLIB_LIBS)
-list_connections_libnm_glib_SOURCES = list-connections-libnm-glib.c
-list_connections_libnm_glib_LDADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(top_builddir)/libnm-glib/libnm-glib.la \
- $(DBUS_LIBS) \
+get_ap_info_libnm_SOURCES = get-ap-info-libnm.c
+get_ap_info_libnm_LDADD = \
+ $(top_builddir)/libnm/libnm.la \
$(GLIB_LIBS)
-get_ap_info_libnm_glib_SOURCES = get-ap-info-libnm-glib.c
-get_ap_info_libnm_glib_LDADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(top_builddir)/libnm-glib/libnm-glib.la \
- $(DBUS_LIBS) \
+list_connections_gdbus_SOURCES = list-connections-gdbus.c
+list_connections_gdbus_LDADD = \
$(GLIB_LIBS)
-monitor_nm_running_dbus_glib_SOURCES = monitor-nm-running-dbus-glib.c
-monitor_nm_running_dbus_glib_LDADD = \
- $(DBUS_LIBS) \
+list_connections_libnm_SOURCES = list-connections-libnm.c
+list_connections_libnm_LDADD = \
+ $(top_builddir)/libnm/libnm.la \
$(GLIB_LIBS)
-monitor_nm_running_GDBus_SOURCES = monitor-nm-running-GDBus.c
-monitor_nm_running_GDBus_LDADD = \
+monitor_nm_running_gdbus_SOURCES = monitor-nm-running-gdbus.c
+monitor_nm_running_gdbus_LDADD = \
$(GLIB_LIBS)
-monitor_nm_state_GDBus_SOURCES = monitor-nm-state-GDBus.c
-monitor_nm_state_GDBus_LDADD = \
+monitor_nm_state_gdbus_SOURCES = monitor-nm-state-gdbus.c
+monitor_nm_state_gdbus_LDADD = \
$(GLIB_LIBS)
-EXTRA_DIST = \
- add-connection-dbus-glib.c \
- add-connection-libnm-glib.c \
- get-active-connections-dbus-glib.c \
- list-connections-dbus-glib.c \
- list-connections-libnm-glib.c \
- get-ap-info-libnm-glib.c \
- monitor-nm-running-dbus-glib.c \
- monitor-nm-running-GDBus.c \
- monitor-nm-state-GDBus.c
-
all: all-am
.SUFFIXES:
@@ -622,41 +567,37 @@ clean-noinstPROGRAMS:
echo " rm -f" $$list; \
rm -f $$list
-add-connection-dbus-glib$(EXEEXT): $(add_connection_dbus_glib_OBJECTS) $(add_connection_dbus_glib_DEPENDENCIES) $(EXTRA_add_connection_dbus_glib_DEPENDENCIES)
- @rm -f add-connection-dbus-glib$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(add_connection_dbus_glib_OBJECTS) $(add_connection_dbus_glib_LDADD) $(LIBS)
-
-add-connection-libnm-glib$(EXEEXT): $(add_connection_libnm_glib_OBJECTS) $(add_connection_libnm_glib_DEPENDENCIES) $(EXTRA_add_connection_libnm_glib_DEPENDENCIES)
- @rm -f add-connection-libnm-glib$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(add_connection_libnm_glib_OBJECTS) $(add_connection_libnm_glib_LDADD) $(LIBS)
+add-connection-gdbus$(EXEEXT): $(add_connection_gdbus_OBJECTS) $(add_connection_gdbus_DEPENDENCIES) $(EXTRA_add_connection_gdbus_DEPENDENCIES)
+ @rm -f add-connection-gdbus$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(add_connection_gdbus_OBJECTS) $(add_connection_gdbus_LDADD) $(LIBS)
-get-active-connections-dbus-glib$(EXEEXT): $(get_active_connections_dbus_glib_OBJECTS) $(get_active_connections_dbus_glib_DEPENDENCIES) $(EXTRA_get_active_connections_dbus_glib_DEPENDENCIES)
- @rm -f get-active-connections-dbus-glib$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(get_active_connections_dbus_glib_OBJECTS) $(get_active_connections_dbus_glib_LDADD) $(LIBS)
+add-connection-libnm$(EXEEXT): $(add_connection_libnm_OBJECTS) $(add_connection_libnm_DEPENDENCIES) $(EXTRA_add_connection_libnm_DEPENDENCIES)
+ @rm -f add-connection-libnm$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(add_connection_libnm_OBJECTS) $(add_connection_libnm_LDADD) $(LIBS)
-get-ap-info-libnm-glib$(EXEEXT): $(get_ap_info_libnm_glib_OBJECTS) $(get_ap_info_libnm_glib_DEPENDENCIES) $(EXTRA_get_ap_info_libnm_glib_DEPENDENCIES)
- @rm -f get-ap-info-libnm-glib$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(get_ap_info_libnm_glib_OBJECTS) $(get_ap_info_libnm_glib_LDADD) $(LIBS)
+get-active-connections-gdbus$(EXEEXT): $(get_active_connections_gdbus_OBJECTS) $(get_active_connections_gdbus_DEPENDENCIES) $(EXTRA_get_active_connections_gdbus_DEPENDENCIES)
+ @rm -f get-active-connections-gdbus$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(get_active_connections_gdbus_OBJECTS) $(get_active_connections_gdbus_LDADD) $(LIBS)
-list-connections-dbus-glib$(EXEEXT): $(list_connections_dbus_glib_OBJECTS) $(list_connections_dbus_glib_DEPENDENCIES) $(EXTRA_list_connections_dbus_glib_DEPENDENCIES)
- @rm -f list-connections-dbus-glib$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(list_connections_dbus_glib_OBJECTS) $(list_connections_dbus_glib_LDADD) $(LIBS)
+get-ap-info-libnm$(EXEEXT): $(get_ap_info_libnm_OBJECTS) $(get_ap_info_libnm_DEPENDENCIES) $(EXTRA_get_ap_info_libnm_DEPENDENCIES)
+ @rm -f get-ap-info-libnm$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(get_ap_info_libnm_OBJECTS) $(get_ap_info_libnm_LDADD) $(LIBS)
-list-connections-libnm-glib$(EXEEXT): $(list_connections_libnm_glib_OBJECTS) $(list_connections_libnm_glib_DEPENDENCIES) $(EXTRA_list_connections_libnm_glib_DEPENDENCIES)
- @rm -f list-connections-libnm-glib$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(list_connections_libnm_glib_OBJECTS) $(list_connections_libnm_glib_LDADD) $(LIBS)
+list-connections-gdbus$(EXEEXT): $(list_connections_gdbus_OBJECTS) $(list_connections_gdbus_DEPENDENCIES) $(EXTRA_list_connections_gdbus_DEPENDENCIES)
+ @rm -f list-connections-gdbus$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(list_connections_gdbus_OBJECTS) $(list_connections_gdbus_LDADD) $(LIBS)
-monitor-nm-running-GDBus$(EXEEXT): $(monitor_nm_running_GDBus_OBJECTS) $(monitor_nm_running_GDBus_DEPENDENCIES) $(EXTRA_monitor_nm_running_GDBus_DEPENDENCIES)
- @rm -f monitor-nm-running-GDBus$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(monitor_nm_running_GDBus_OBJECTS) $(monitor_nm_running_GDBus_LDADD) $(LIBS)
+list-connections-libnm$(EXEEXT): $(list_connections_libnm_OBJECTS) $(list_connections_libnm_DEPENDENCIES) $(EXTRA_list_connections_libnm_DEPENDENCIES)
+ @rm -f list-connections-libnm$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(list_connections_libnm_OBJECTS) $(list_connections_libnm_LDADD) $(LIBS)
-monitor-nm-running-dbus-glib$(EXEEXT): $(monitor_nm_running_dbus_glib_OBJECTS) $(monitor_nm_running_dbus_glib_DEPENDENCIES) $(EXTRA_monitor_nm_running_dbus_glib_DEPENDENCIES)
- @rm -f monitor-nm-running-dbus-glib$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(monitor_nm_running_dbus_glib_OBJECTS) $(monitor_nm_running_dbus_glib_LDADD) $(LIBS)
+monitor-nm-running-gdbus$(EXEEXT): $(monitor_nm_running_gdbus_OBJECTS) $(monitor_nm_running_gdbus_DEPENDENCIES) $(EXTRA_monitor_nm_running_gdbus_DEPENDENCIES)
+ @rm -f monitor-nm-running-gdbus$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(monitor_nm_running_gdbus_OBJECTS) $(monitor_nm_running_gdbus_LDADD) $(LIBS)
-monitor-nm-state-GDBus$(EXEEXT): $(monitor_nm_state_GDBus_OBJECTS) $(monitor_nm_state_GDBus_DEPENDENCIES) $(EXTRA_monitor_nm_state_GDBus_DEPENDENCIES)
- @rm -f monitor-nm-state-GDBus$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(monitor_nm_state_GDBus_OBJECTS) $(monitor_nm_state_GDBus_LDADD) $(LIBS)
+monitor-nm-state-gdbus$(EXEEXT): $(monitor_nm_state_gdbus_OBJECTS) $(monitor_nm_state_gdbus_DEPENDENCIES) $(EXTRA_monitor_nm_state_gdbus_DEPENDENCIES)
+ @rm -f monitor-nm-state-gdbus$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(monitor_nm_state_gdbus_OBJECTS) $(monitor_nm_state_gdbus_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -664,15 +605,14 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/add-connection-dbus-glib.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/add-connection-libnm-glib.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/get-active-connections-dbus-glib.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/get-ap-info-libnm-glib.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/list-connections-dbus-glib.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/list-connections-libnm-glib.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/monitor-nm-running-GDBus.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/monitor-nm-running-dbus-glib.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/monitor-nm-state-GDBus.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/add-connection-gdbus.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/add-connection-libnm.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/get-active-connections-gdbus.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/get-ap-info-libnm.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/list-connections-gdbus.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/list-connections-libnm.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/monitor-nm-running-gdbus.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/monitor-nm-state-gdbus.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
diff --git a/examples/C/glib/add-connection-dbus-glib.c b/examples/C/glib/add-connection-dbus-glib.c
deleted file mode 100644
index 354dcb75a..000000000
--- a/examples/C/glib/add-connection-dbus-glib.c
+++ /dev/null
@@ -1,126 +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 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 2011 Red Hat, Inc.
- */
-
-/*
- * The example shows how to call AddConnection() D-Bus method to add
- * a connection to system settings service. It uses dbus-glib and libnm-util
- * libraries.
- *
- * Compile with:
- * gcc -Wall `pkg-config --libs --cflags glib-2.0 dbus-glib-1 libnm-util` add-connection-glib.c -o add-connection-glib
- */
-
-#include <glib.h>
-#include <dbus/dbus-glib.h>
-
-#include <nm-connection.h>
-#include <nm-setting-connection.h>
-#include <nm-setting-wired.h>
-#include <nm-setting-ip4-config.h>
-#include <NetworkManager.h>
-#include <nm-utils.h>
-
-#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))
-
-static void
-add_connection (DBusGProxy *proxy, const char *con_name)
-{
- NMConnection *connection;
- NMSettingConnection *s_con;
- NMSettingWired *s_wired;
- NMSettingIP4Config *s_ip4;
- char *uuid, *new_con_path = NULL;
- GHashTable *hash;
- GError *error = NULL;
-
- /* Create a new connection object */
- connection = (NMConnection *) nm_connection_new ();
-
- /* Build up the 'connection' Setting */
- 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, con_name,
- NM_SETTING_CONNECTION_TYPE, "802-3-ethernet",
- NULL);
- g_free (uuid);
- nm_connection_add_setting (connection, NM_SETTING (s_con));
-
- /* Build up the 'wired' Setting */
- s_wired = (NMSettingWired *) nm_setting_wired_new ();
- nm_connection_add_setting (connection, NM_SETTING (s_wired));
-
- /* Build up the 'ipv4' Setting */
- 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));
-
- hash = nm_connection_to_hash (connection, NM_SETTING_HASH_FLAG_ALL);
-
- /* Call AddConnection with the hash as argument */
- if (!dbus_g_proxy_call (proxy, "AddConnection", &error,
- DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT, hash,
- G_TYPE_INVALID,
- DBUS_TYPE_G_OBJECT_PATH, &new_con_path,
- G_TYPE_INVALID)) {
- g_print ("Error adding connection: %s %s",
- dbus_g_error_get_name (error),
- error->message);
- g_clear_error (&error);
- } else {
- g_print ("Added: %s\n", new_con_path);
- g_free (new_con_path);
- }
-
- g_hash_table_destroy (hash);
- g_object_unref (connection);
-}
-
-
-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);
-
- /* Create a D-Bus proxy; NM_DBUS_* defined in NetworkManager.h */
- proxy = dbus_g_proxy_new_for_name (bus,
- NM_DBUS_SERVICE,
- NM_DBUS_PATH_SETTINGS,
- NM_DBUS_IFACE_SETTINGS);
-
- /* Add a connection */
- add_connection (proxy, "__Test connection__");
-
- g_object_unref (proxy);
- dbus_g_connection_unref (bus);
-
- return 0;
-}
diff --git a/examples/C/glib/add-connection-gdbus.c b/examples/C/glib/add-connection-gdbus.c
new file mode 100644
index 000000000..d39032739
--- /dev/null
+++ b/examples/C/glib/add-connection-gdbus.c
@@ -0,0 +1,150 @@
+/* -*- 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, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright 2011, 2014 Red Hat, Inc.
+ */
+
+/*
+ * The example shows how to call the AddConnection() D-Bus method to add a
+ * connection to the system settings service. It uses GDBus, plus a few defines
+ * from the NetworkManager headers. Contrast add-connection-libnm, which is
+ * higher level because it uses libnm.
+ *
+ * Compile with:
+ * gcc -Wall `pkg-config --cflags libnm` `pkg-config --cflags --libs gio-2.0` -luuid add-connection-gdbus.c -o add-connection-gdbus
+ */
+
+#include "config.h"
+
+#include <gio/gio.h>
+#include <uuid/uuid.h>
+#include <NetworkManager.h>
+
+/* copied from libnm-core/nm-utils.c */
+char *
+nm_utils_uuid_generate (void)
+{
+ uuid_t uuid;
+ char *buf;
+
+ buf = g_malloc0 (37);
+ uuid_generate_random (uuid);
+ uuid_unparse_lower (uuid, &buf[0]);
+ return buf;
+}
+
+static void
+add_connection (GDBusProxy *proxy, const char *con_name)
+{
+ GVariantBuilder connection_builder;
+ GVariantBuilder setting_builder;
+ char *uuid;
+ const char *new_con_path;
+ GVariant *ret;
+ GError *error = NULL;
+
+ /* Initialize connection GVariantBuilder */
+ g_variant_builder_init (&connection_builder, G_VARIANT_TYPE ("a{sa{sv}}"));
+
+ /* Build up the 'connection' Setting */
+ g_variant_builder_init (&setting_builder, G_VARIANT_TYPE ("a{sv}"));
+
+ uuid = nm_utils_uuid_generate ();
+ g_variant_builder_add (&setting_builder, "{sv}",
+ NM_SETTING_CONNECTION_UUID,
+ g_variant_new_string (uuid));
+ g_free (uuid);
+
+ g_variant_builder_add (&setting_builder, "{sv}",
+ NM_SETTING_CONNECTION_ID,
+ g_variant_new_string (con_name));
+ g_variant_builder_add (&setting_builder, "{sv}",
+ NM_SETTING_CONNECTION_TYPE,
+ g_variant_new_string (NM_SETTING_WIRED_SETTING_NAME));
+
+ g_variant_builder_add (&connection_builder, "{sa{sv}}",
+ NM_SETTING_CONNECTION_SETTING_NAME,
+ &setting_builder);
+
+ /* Add the (empty) 'wired' Setting */
+ g_variant_builder_init (&setting_builder, G_VARIANT_TYPE ("a{sv}"));
+ g_variant_builder_add (&connection_builder, "{sa{sv}}",
+ NM_SETTING_WIRED_SETTING_NAME,
+ &setting_builder);
+
+ /* Build up the 'ipv4' Setting */
+ g_variant_builder_init (&setting_builder, G_VARIANT_TYPE ("a{sv}"));
+ g_variant_builder_add (&setting_builder, "{sv}",
+ NM_SETTING_IP_CONFIG_METHOD,
+ g_variant_new_string (NM_SETTING_IP4_CONFIG_METHOD_AUTO));
+ g_variant_builder_add (&connection_builder, "{sa{sv}}",
+ NM_SETTING_IP4_CONFIG_SETTING_NAME,
+ &setting_builder);
+
+ /* Call AddConnection with the connection dictionary as argument.
+ * (g_variant_new() will consume the floating GVariant returned from
+ * &connection_builder, and g_dbus_proxy_call_sync() will consume the
+ * floating variant returned from g_variant_new(), so no cleanup is needed.
+ */
+ ret = g_dbus_proxy_call_sync (proxy,
+ "AddConnection",
+ g_variant_new ("(a{sa{sv}})", &connection_builder),
+ G_DBUS_CALL_FLAGS_NONE, -1,
+ NULL, &error);
+ if (ret) {
+ g_variant_get (ret, "(&o)", &new_con_path);
+ g_print ("Added: %s\n", new_con_path);
+ g_variant_unref (ret);
+ } else {
+ g_dbus_error_strip_remote_error (error);
+ g_print ("Error adding connection: %s\n", error->message);
+ g_clear_error (&error);
+ }
+}
+
+int
+main (int argc, char *argv[])
+{
+ GDBusProxy *proxy;
+ GError *error = NULL;
+
+#if !GLIB_CHECK_VERSION (2, 35, 0)
+ /* Initialize GType system */
+ g_type_init ();
+#endif
+
+ /* Create a D-Bus proxy; NM_DBUS_* defined in nm-dbus-interface.h */
+ proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
+ G_DBUS_PROXY_FLAGS_NONE,
+ NULL,
+ NM_DBUS_SERVICE,
+ NM_DBUS_PATH_SETTINGS,
+ NM_DBUS_INTERFACE_SETTINGS,
+ NULL, &error);
+ if (!proxy) {
+ g_dbus_error_strip_remote_error (error);
+ g_print ("Could not create NetworkManager D-Bus proxy: %s\n", error->message);
+ g_error_free (error);
+ return 1;
+ }
+
+ /* Add a connection */
+ add_connection (proxy, "__Test connection__");
+
+ g_object_unref (proxy);
+
+ return 0;
+}
diff --git a/examples/C/glib/add-connection-libnm-glib.c b/examples/C/glib/add-connection-libnm.c
index 28eadf8d3..75048bd8f 100644
--- a/examples/C/glib/add-connection-libnm-glib.c
+++ b/examples/C/glib/add-connection-libnm.c
@@ -14,61 +14,61 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2011 Red Hat, Inc.
+ * Copyright 2011 Red Hat, Inc.
*/
/*
- * The example shows how to add a new connection using libnm-glib and libnm-util.
- * Contrast this example with add-connection-dbus-glib.c, which is a bit lower
- * level and talks directly to NM using dbus-glib. This example is simpler
- * because libnm-glib handles much of the low-level stuff for you.
+ * The example shows how to add a new connection using libnm. Contrast this
+ * example with add-connection-gdbus.c, which is a bit lower level and talks
+ * directly to NM using GDBus. This example is simpler because libnm handles
+ * much of the low-level stuff for you.
*
* Compile with:
- * gcc -Wall `pkg-config --libs --cflags glib-2.0 dbus-glib-1 libnm-util` add-connection-libnm-glib.c -o add-connection-libnm-glib
+ * gcc -Wall `pkg-config --libs --cflags glib-2.0 libnm` add-connection-libnm.c -o add-connection-libnm
*/
-#include <glib.h>
-#include <nm-remote-settings.h>
+#include "config.h"
-#include <nm-connection.h>
-#include <nm-setting-connection.h>
-#include <nm-setting-wired.h>
-#include <nm-setting-ip4-config.h>
-#include <nm-utils.h>
+#include <glib.h>
+#include <NetworkManager.h>
static void
-added_cb (NMRemoteSettings *settings,
- NMRemoteConnection *remote,
- GError *error,
+added_cb (GObject *client,
+ GAsyncResult *result,
gpointer user_data)
{
GMainLoop *loop = user_data;
+ NMRemoteConnection *remote;
+ GError *error;
/* NM responded to our request; either handle the resulting error or
* print out the object path of the connection we just added.
*/
+ remote = nm_client_add_connection_finish (NM_CLIENT (client), result, &error);
- if (error)
+ if (error) {
g_print ("Error adding connection: %s", error->message);
- else
+ g_error_free (error);
+ } else {
g_print ("Added: %s\n", nm_connection_get_path (NM_CONNECTION (remote)));
+ g_object_unref (remote);
+ }
/* Tell the mainloop we're done and we can quit now */
g_main_loop_quit (loop);
}
-static gboolean
-add_connection (NMRemoteSettings *settings, GMainLoop *loop, const char *con_name)
+static void
+add_connection (NMClient *client, GMainLoop *loop, const char *con_name)
{
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
NMSettingIP4Config *s_ip4;
char *uuid;
- gboolean success;
/* Create a new connection object */
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Build up the 'connection' Setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -88,27 +88,24 @@ add_connection (NMRemoteSettings *settings, GMainLoop *loop, const char *con_nam
/* Build up the 'ipv4' Setting */
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,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
NULL);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
/* Ask the settings service to add the new connection; we'll quit the
* mainloop and exit when the callback is called.
*/
- success = nm_remote_settings_add_connection (settings, connection, added_cb, loop);
- if (!success)
- g_print ("Error adding connection\n");
-
+ nm_client_add_connection_async (client, connection, TRUE, NULL, added_cb, loop);
g_object_unref (connection);
- return success;
}
-int main (int argc, char *argv[])
+int
+main (int argc, char *argv[])
{
- DBusGConnection *bus;
- NMRemoteSettings *settings;
+ NMClient *client;
GMainLoop *loop;
+ GError *error = NULL;
#if !GLIB_CHECK_VERSION (2, 35, 0)
/* Initialize GType system */
@@ -117,22 +114,21 @@ int main (int argc, char *argv[])
loop = g_main_loop_new (NULL, FALSE);
- /* Get system bus */
- bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, NULL);
-
- /* Create our proxy for NetworkManager's settings service */
- settings = nm_remote_settings_new (bus);
+ /* Connect to NetworkManager */
+ client = nm_client_new (NULL, &error);
+ if (!client) {
+ g_message ("Error: Could not connect to NetworkManager: %s.", error->message);
+ g_error_free (error);
+ return 1;
+ }
- /* Ask the settings service to add the new connection */
- if (add_connection (settings, loop, "__Test connection__")) {
- /* Wait for the connection to be added */
- g_main_loop_run (loop);
- } else
- g_print ("Error adding connection to NetworkManager\n");
+ /* Ask NM to add the new connection */
+ add_connection (client, loop, "__Test connection__");
+ /* Wait for the connection to be added */
+ g_main_loop_run (loop);
/* Clean up */
- g_object_unref (settings);
- dbus_g_connection_unref (bus);
+ g_object_unref (client);
return 0;
}
diff --git a/examples/C/glib/get-active-connections-dbus-glib.c b/examples/C/glib/get-active-connections-dbus-glib.c
deleted file mode 100644
index 186feae26..000000000
--- a/examples/C/glib/get-active-connections-dbus-glib.c
+++ /dev/null
@@ -1,223 +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 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 2010 -2014 Red Hat, Inc.
- */
-
-/*
- * The example shows how to call the D-Bus properties interface to get the
- * list of currently active connections known to NetworkManager. It uses
- * dbus-glib and libnm-util libraries.
- *
- * Compile with:
- * 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>
-
-#include <nm-connection.h>
-#include <nm-setting-connection.h>
-#include <nm-setting-wired.h>
-#include <nm-setting-ip4-config.h>
-#include <NetworkManager.h>
-#include <nm-utils.h>
-
-#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 void
-print_connection (DBusGConnection *bus, const char *path)
-{
- DBusGProxy *proxy;
- GError *error = NULL;
- GHashTable *hash = NULL;
- NMConnection *connection = NULL;
-
- /* This function asks NetworkManager for the details of the connection */
-
- /* Create the D-Bus proxy so we can ask it for the connection configuration details. */
- proxy = dbus_g_proxy_new_for_name (bus,
- NM_DBUS_SERVICE,
- path,
- NM_DBUS_IFACE_SETTINGS_CONNECTION);
- g_assert (proxy);
-
- /* Request the all the configuration of the Connection */
- if (!dbus_g_proxy_call (proxy, "GetSettings", &error,
- G_TYPE_INVALID,
- DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT, &hash,
- G_TYPE_INVALID)) {
- g_warning ("Failed to get active connection Connection property: %s",
- error->message);
- g_error_free (error);
- goto out;
- }
-
- /* 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);
- g_error_free (error);
- goto out;
- }
-
- /* And finally dump all the configuration to stdout */
- printf ("%s <=> %s\n", nm_connection_get_id (connection), path);
- nm_connection_dump (connection);
-
-out:
- if (connection)
- g_object_unref (connection);
- if (hash)
- g_hash_table_destroy (hash);
- g_object_unref (proxy);
-}
-
-static void
-get_active_connection_details (DBusGConnection *bus, const char *obj_path)
-{
- DBusGProxy *props_proxy;
- GValue path_value = G_VALUE_INIT;
- GError *error = NULL;
- const char *path = NULL;
-
- /* This function gets the backing Connection object that describes the
- * network configuration that the ActiveConnection object is actually using.
- * The ActiveConnection object contains the mapping between the configuration
- * and the actual network interfaces that are using that configuration.
- */
-
- /* Create a D-Bus object proxy for the active connection object's properties */
- props_proxy = dbus_g_proxy_new_for_name (bus,
- NM_DBUS_SERVICE,
- obj_path,
- DBUS_INTERFACE_PROPERTIES);
- g_assert (props_proxy);
-
- /* Get the object path of the Connection details */
- if (!dbus_g_proxy_call (props_proxy, "Get", &error,
- G_TYPE_STRING, NM_DBUS_INTERFACE_ACTIVE_CONNECTION,
- G_TYPE_STRING, "Connection",
- G_TYPE_INVALID,
- G_TYPE_VALUE, &path_value,
- G_TYPE_INVALID)) {
- g_warning ("Failed to get active connection Connection property: %s",
- error->message);
- g_error_free (error);
- goto out;
- }
-
- if (!G_VALUE_HOLDS (&path_value, DBUS_TYPE_G_OBJECT_PATH)) {
- g_warning ("Unexpected type returned getting Connection property: %s",
- G_VALUE_TYPE_NAME (&path_value));
- goto out;
- }
-
- path = g_value_get_boxed (&path_value);
- if (!path) {
- g_warning ("Missing connection path!");
- goto out;
- }
-
- /* Print out the actual connection details */
- print_connection (bus, path);
-
-out:
- g_value_unset (&path_value);
- g_object_unref (props_proxy);
-}
-
-static void
-get_active_connections (DBusGConnection *bus, DBusGProxy *proxy)
-{
- GError *error = NULL;
- GValue value = G_VALUE_INIT;
- GPtrArray *paths = NULL;
- const char *a_path;
- int i;
-
- /* Get the ActiveConnections property from the NM Manager object */
- if (!dbus_g_proxy_call (proxy, "Get", &error,
- G_TYPE_STRING, NM_DBUS_INTERFACE,
- G_TYPE_STRING, "ActiveConnections",
- G_TYPE_INVALID,
- G_TYPE_VALUE, &value,
- G_TYPE_INVALID)) {
- g_warning ("Failed to get ActiveConnections property: %s", error->message);
- g_error_free (error);
- return;
- }
-
- /* Make sure the ActiveConnections property is the type we expect it to be */
- if (!G_VALUE_HOLDS (&value, DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH)) {
- g_warning ("Unexpected type returned getting ActiveConnections: %s",
- G_VALUE_TYPE_NAME (&value));
- goto out;
- }
-
- /* Extract the active connections array from the GValue */
- paths = g_value_get_boxed (&value);
- if (!paths) {
- g_warning ("Could not retrieve active connections property");
- goto out;
- }
-
- /* 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);
-}
-
-
-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);
-
- /* Create a D-Bus proxy to get the object properties from the NM Manager
- * object. NM_DBUS_* defines are from NetworkManager.h.
- */
- props_proxy = dbus_g_proxy_new_for_name (bus,
- NM_DBUS_SERVICE,
- NM_DBUS_PATH,
- DBUS_INTERFACE_PROPERTIES);
- g_assert (props_proxy);
-
- /* Get active connections */
- get_active_connections (bus, props_proxy);
-
- g_object_unref (props_proxy);
- dbus_g_connection_unref (bus);
-
- return 0;
-}
diff --git a/examples/C/glib/get-active-connections-gdbus.c b/examples/C/glib/get-active-connections-gdbus.c
new file mode 100644
index 000000000..9b34f6b21
--- /dev/null
+++ b/examples/C/glib/get-active-connections-gdbus.c
@@ -0,0 +1,274 @@
+/* -*- 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, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * (C) Copyright 2010 -2014 Red Hat, Inc.
+ */
+
+/*
+ * The example shows how to call the D-Bus properties interface to get the list
+ * of currently active connections known to NetworkManager. It uses GDBus, plus
+ * a few defines from the NetworkManager headers.
+ *
+ * Compile with:
+ * gcc -Wall `pkg-config --cflags libnm` `pkg-config --cflags --libs gio-2.0` get-active-connections-gdbus.c -o get-active-connections-gdbus
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <gio/gio.h>
+#include <NetworkManager.h>
+
+static void
+print_setting (const char *setting_name, GVariant *setting)
+{
+ GVariantIter iter;
+ const char *property_name;
+ GVariant *value;
+ char *printed_value;
+
+ g_print (" %s:\n", setting_name);
+ g_variant_iter_init (&iter, setting);
+ while (g_variant_iter_next (&iter, "{&sv}", &property_name, &value)) {
+ printed_value = g_variant_print (value, FALSE);
+ if (strcmp (printed_value, "[]") != 0)
+ g_print (" %s: %s\n", property_name, printed_value);
+ g_free (printed_value);
+ g_variant_unref (value);
+ }
+}
+
+static void
+print_connection (const char *path)
+{
+ GDBusProxy *proxy;
+ GError *error = NULL;
+ GVariant *ret, *connection = NULL, *s_con = NULL;
+ const char *id, *type;
+ gboolean found;
+ GVariantIter iter;
+ const char *setting_name;
+ GVariant *setting;
+
+ /* This function asks NetworkManager for the details of the connection */
+
+ /* Create the D-Bus proxy so we can ask it for the connection configuration details. */
+ proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
+ G_DBUS_PROXY_FLAGS_NONE,
+ NULL,
+ NM_DBUS_SERVICE,
+ path,
+ NM_DBUS_INTERFACE_SETTINGS_CONNECTION,
+ NULL, NULL);
+ g_assert (proxy);
+
+ /* Request the all the configuration of the Connection */
+ ret = g_dbus_proxy_call_sync (proxy,
+ "GetSettings",
+ NULL,
+ G_DBUS_CALL_FLAGS_NONE, -1,
+ NULL, &error);
+ if (!ret) {
+ g_dbus_error_strip_remote_error (error);
+ g_warning ("Failed to get connection settings: %s\n", error->message);
+ g_error_free (error);
+ goto out;
+ }
+
+ g_variant_get (ret, "(@a{sa{sv}})", &connection);
+
+ s_con = g_variant_lookup_value (connection, NM_SETTING_CONNECTION_SETTING_NAME, NULL);
+ g_assert (s_con != NULL);
+ found = g_variant_lookup (s_con, NM_SETTING_CONNECTION_ID, "&s", &id);
+ g_assert (found);
+ found = g_variant_lookup (s_con, NM_SETTING_CONNECTION_TYPE, "&s", &type);
+ g_assert (found);
+
+ /* Dump the configuration to stdout */
+ g_print ("%s <=> %s\n", id, path);
+
+ /* Connection setting first */
+ print_setting (NM_SETTING_CONNECTION_SETTING_NAME, s_con);
+
+ /* Then the type-specific setting */
+ setting = g_variant_lookup_value (connection, type, NULL);
+ if (setting) {
+ print_setting (type, setting);
+ g_variant_unref (setting);
+ }
+
+ g_variant_iter_init (&iter, connection);
+ while (g_variant_iter_next (&iter, "{&s@a{sv}}", &setting_name, &setting)) {
+ if ( strcmp (setting_name, NM_SETTING_CONNECTION_SETTING_NAME) != 0
+ && strcmp (setting_name, type) != 0)
+ print_setting (setting_name, setting);
+ g_variant_unref (setting);
+ }
+ g_print ("\n");
+
+out:
+ if (s_con)
+ g_variant_unref (s_con);
+ if (connection)
+ g_variant_unref (connection);
+ if (ret)
+ g_variant_unref (ret);
+ g_object_unref (proxy);
+}
+
+static void
+get_active_connection_details (const char *obj_path)
+{
+ GDBusProxy *props_proxy;
+ GVariant *ret = NULL, *path_value = NULL;
+ const char *path = NULL;
+ GError *error = NULL;
+
+ /* This function gets the backing Connection object that describes the
+ * network configuration that the ActiveConnection object is actually using.
+ * The ActiveConnection object contains the mapping between the configuration
+ * and the actual network interfaces that are using that configuration.
+ */
+
+ /* Create a D-Bus object proxy for the active connection object's properties */
+ props_proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
+ G_DBUS_PROXY_FLAGS_NONE,
+ NULL,
+ NM_DBUS_SERVICE,
+ obj_path,
+ "org.freedesktop.DBus.Properties",
+ NULL, NULL);
+ g_assert (props_proxy);
+
+ /* Get the object path of the Connection details */
+ ret = g_dbus_proxy_call_sync (props_proxy,
+ "Get",
+ g_variant_new ("(ss)",
+ NM_DBUS_INTERFACE_ACTIVE_CONNECTION,
+ "Connection"),
+ G_DBUS_CALL_FLAGS_NONE, -1,
+ NULL, &error);
+ if (!ret) {
+ g_dbus_error_strip_remote_error (error);
+ g_warning ("Failed to get active connection Connection property: %s\n",
+ error->message);
+ g_error_free (error);
+ goto out;
+ }
+
+ g_variant_get (ret, "(v)", &path_value);
+ if (!g_variant_is_of_type (path_value, G_VARIANT_TYPE_OBJECT_PATH)) {
+ g_warning ("Unexpected type returned getting Connection property: %s",
+ g_variant_get_type_string (path_value));
+ goto out;
+ }
+
+ path = g_variant_get_string (path_value, NULL);
+
+ /* Print out the actual connection details */
+ print_connection (path);
+
+out:
+ if (path_value)
+ g_variant_unref (path_value);
+ if (ret)
+ g_variant_unref (ret);
+ g_object_unref (props_proxy);
+}
+
+static void
+get_active_connections (GDBusProxy *proxy)
+{
+ GError *error = NULL;
+ GVariant *ret = NULL, *value = NULL;
+ char **paths;
+ int i;
+
+ /* Get the ActiveConnections property from the NM Manager object */
+ ret = g_dbus_proxy_call_sync (proxy,
+ "Get",
+ g_variant_new ("(ss)",
+ NM_DBUS_INTERFACE,
+ "ActiveConnections"),
+ G_DBUS_CALL_FLAGS_NONE, -1,
+ NULL, &error);
+ if (!ret) {
+ g_dbus_error_strip_remote_error (error);
+ g_warning ("Failed to get ActiveConnections property: %s\n", error->message);
+ g_error_free (error);
+ return;
+ }
+
+ g_variant_get (ret, "(v)", &value);
+
+ /* Make sure the ActiveConnections property is the type we expect it to be */
+ if (!g_variant_is_of_type (value, G_VARIANT_TYPE ("ao"))) {
+ g_warning ("Unexpected type returned getting ActiveConnections: %s",
+ g_variant_get_type_string (value));
+ goto out;
+ }
+
+ /* Extract the active connections array from the GValue */
+ paths = g_variant_dup_objv (value, NULL);
+ if (!paths) {
+ g_warning ("Could not retrieve active connections property");
+ goto out;
+ }
+
+ /* And print out the details for each active connection */
+ for (i = 0; paths[i]; i++) {
+ g_print ("Active connection path: %s\n", paths[i]);
+ get_active_connection_details (paths[i]);
+ }
+ g_strfreev (paths);
+
+out:
+ if (value)
+ g_variant_unref (value);
+ if (ret)
+ g_variant_unref (ret);
+}
+
+
+int
+main (int argc, char *argv[])
+{
+ GDBusProxy *props_proxy;
+
+#if !GLIB_CHECK_VERSION (2, 35, 0)
+ /* Initialize GType system */
+ g_type_init ();
+#endif
+
+ /* Create a D-Bus proxy to get the object properties from the NM Manager
+ * object. NM_DBUS_* defines are from nm-dbus-interface.h.
+ */
+ props_proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
+ G_DBUS_PROXY_FLAGS_NONE,
+ NULL,
+ NM_DBUS_SERVICE,
+ NM_DBUS_PATH,
+ "org.freedesktop.DBus.Properties",
+ NULL, NULL);
+ g_assert (props_proxy);
+
+ /* Get active connections */
+ get_active_connections (props_proxy);
+
+ g_object_unref (props_proxy);
+
+ return 0;
+}
diff --git a/examples/C/glib/get-ap-info-libnm-glib.c b/examples/C/glib/get-ap-info-libnm.c
index 1ad58124b..90bc2d5e7 100644
--- a/examples/C/glib/get-ap-info-libnm-glib.c
+++ b/examples/C/glib/get-ap-info-libnm.c
@@ -1,3 +1,4 @@
+/* -*- 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
@@ -13,29 +14,24 @@
* 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.
+ * Copyright 2010 Red Hat, Inc.
*/
/*
- * The example shows how to get info about APs visible by Wi-Fi devices
- * using libnm-glib (that wraps direct D-Bus calls).
- * The example uses dbus-glib, libnm-util and libnm-glib libraries.
+ * The example shows how to get info about APs visible by Wi-Fi devices using
+ * libnm.
*
* Compile with:
- * gcc -Wall `pkg-config --libs --cflags glib-2.0 dbus-glib-1 libnm-util libnm-glib` get-ap-info-libnm-glib.c -o get-ap-info-libnm-glib
+ * gcc -Wall `pkg-config --libs --cflags glib-2.0 libnm` get-ap-info-libnm.c -o get-ap-info-libnm
*/
+#include "config.h"
+
#include <glib.h>
-#include <dbus/dbus-glib.h>
#include <stdio.h>
#include <stdlib.h>
-#include <nm-client.h>
-#include <nm-device.h>
-#include <nm-device-wifi.h>
-#include <nm-access-point.h>
#include <NetworkManager.h>
-#include <nm-utils.h>
/* Convert flags to string */
static char *
@@ -85,7 +81,7 @@ show_access_point_info (NMAccessPoint *ap)
{
guint32 flags, wpa_flags, rsn_flags, freq, bitrate;
guint8 strength;
- const GByteArray *ssid;
+ GBytes *ssid;
const char *hwaddr;
NM80211Mode mode;
char *freq_str, *ssid_str, *bitrate_str, *strength_str, *wpa_flags_str, *rsn_flags_str;
@@ -103,7 +99,10 @@ show_access_point_info (NMAccessPoint *ap)
strength = nm_access_point_get_strength (ap);
/* Convert to strings */
- ssid_str = nm_utils_ssid_to_utf8 (ssid);
+ if (ssid)
+ ssid_str = nm_utils_ssid_to_utf8 (g_bytes_get_data (ssid, NULL), g_bytes_get_size (ssid));
+ else
+ ssid_str = g_strdup ("--");
freq_str = g_strdup_printf ("%u MHz", freq);
bitrate_str = g_strdup_printf ("%u Mbit/s", bitrate/1000);
strength_str = g_strdup_printf ("%u", strength);
@@ -161,7 +160,7 @@ show_wifi_device_info (NMDevice *device)
const char *iface;
const char *driver;
guint32 speed;
- const GByteArray *active_ssid;
+ GBytes *active_ssid;
char *active_ssid_str = NULL;
int i;
@@ -169,7 +168,11 @@ show_wifi_device_info (NMDevice *device)
if (nm_device_get_state (device) == NM_DEVICE_STATE_ACTIVATED) {
if ((active_ap = nm_device_wifi_get_active_access_point (NM_DEVICE_WIFI (device)))) {
active_ssid = nm_access_point_get_ssid (active_ap);
- active_ssid_str = nm_utils_ssid_to_utf8 (active_ssid);
+ if (active_ssid)
+ active_ssid_str = nm_utils_ssid_to_utf8 (g_bytes_get_data (active_ssid, NULL),
+ g_bytes_get_size (active_ssid));
+ else
+ active_ssid_str = g_strdup ("--");
}
}
@@ -187,32 +190,30 @@ show_wifi_device_info (NMDevice *device)
aps = nm_device_wifi_get_access_points (NM_DEVICE_WIFI (device));
/* Print AP details */
- for (i = 0; aps && (i < aps->len); i++) {
+ for (i = 0; i < aps->len; i++) {
NMAccessPoint *ap = g_ptr_array_index (aps, i);
show_access_point_info (ap);
}
}
-int main (int argc, char *argv[])
+int
+main (int argc, char *argv[])
{
- DBusGConnection *bus;
NMClient *client;
const GPtrArray *devices;
int i;
+ GError *error = NULL;
#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);
-
/* Get NMClient object */
- client = nm_client_new ();
+ client = nm_client_new (NULL, &error);
if (!client) {
- dbus_g_connection_unref (bus);
- g_message ("Error: Could not create NMClient.");
+ g_message ("Error: Could not create NMClient: %s.", error->message);
+ g_error_free (error);
return EXIT_FAILURE;
}
@@ -220,14 +221,13 @@ int main (int argc, char *argv[])
devices = nm_client_get_devices (client);
/* Go through the array and process Wi-Fi devices */
- for (i = 0; devices && (i < devices->len); i++) {
+ for (i = 0; i < devices->len; i++) {
NMDevice *device = g_ptr_array_index (devices, i);
if (NM_IS_DEVICE_WIFI (device))
show_wifi_device_info (device);
}
g_object_unref (client);
- dbus_g_connection_unref (bus);
return EXIT_SUCCESS;
}
diff --git a/examples/C/glib/list-connections-dbus-glib.c b/examples/C/glib/list-connections-dbus-glib.c
deleted file mode 100644
index e17b8dc7d..000000000
--- a/examples/C/glib/list-connections-dbus-glib.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * 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 2011 Red Hat, Inc.
- */
-
-/*
- * The example shows how to list connections from System Settings service using direct
- * D-Bus call of ListConnections method.
- * The example uses dbus-glib, libnm-util libraries.
- *
- * Compile with:
- * gcc -Wall `pkg-config --libs --cflags glib-2.0 dbus-glib-1 libnm-util` list-connections-dbus.c -o list-connections-dbus
- */
-
-#include <glib.h>
-#include <dbus/dbus-glib.h>
-#include <stdio.h>
-
-#include <NetworkManager.h>
-#include <nm-utils.h>
-
-#define DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH (dbus_g_type_get_collection ("GPtrArray", DBUS_TYPE_G_OBJECT_PATH))
-
-static void
-list_connections (DBusGProxy *proxy)
-{
- int i;
- GError *error = NULL;
- GPtrArray *con_array;
- gboolean success;
-
- /* Call ListConnections D-Bus method */
- 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);
- printf ("%s\n", connection_path);
- g_free (connection_path);
- }
- g_ptr_array_free (con_array, TRUE);
-}
-
-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);
-
- /* Create a D-Bus proxy; NM_DBUS_* defined in NetworkManager.h */
- proxy = dbus_g_proxy_new_for_name (bus,
- NM_DBUS_SERVICE,
- NM_DBUS_PATH_SETTINGS,
- NM_DBUS_IFACE_SETTINGS);
-
- /* List connections of system settings service */
- list_connections (proxy);
-
- g_object_unref (proxy);
- dbus_g_connection_unref (bus);
-
- return 0;
-}
diff --git a/examples/C/glib/list-connections-gdbus.c b/examples/C/glib/list-connections-gdbus.c
new file mode 100644
index 000000000..634bd90c8
--- /dev/null
+++ b/examples/C/glib/list-connections-gdbus.c
@@ -0,0 +1,90 @@
+/* -*- 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, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright 2011, 2014 Red Hat, Inc.
+ */
+
+/*
+ * The example shows how to list connections from the System Settings service
+ * using direct D-Bus calls. The example uses GDBus, plus a few defines from
+ * the NetworkManager headers. Contrast list-connections-libnm, which is higher
+ * level because it uses libnm.
+ *
+ * Compile with:
+ * gcc -Wall `pkg-config --cflags libnm` `pkg-config --cflags --libs gio-2.0` list-connections-gdbus.c -o list-connections-gdbus
+ */
+
+#include "config.h"
+
+#include <gio/gio.h>
+#include <NetworkManager.h>
+
+static void
+list_connections (GDBusProxy *proxy)
+{
+ int i;
+ GError *error = NULL;
+ GVariant *ret;
+ char **paths;
+
+ /* Call ListConnections D-Bus method */
+ ret = g_dbus_proxy_call_sync (proxy,
+ "ListConnections",
+ NULL,
+ G_DBUS_CALL_FLAGS_NONE, -1,
+ NULL, &error);
+ if (!ret) {
+ g_dbus_error_strip_remote_error (error);
+ g_print ("ListConnections failed: %s\n", error->message);
+ g_error_free (error);
+ return;
+ }
+
+ g_variant_get (ret, "(^ao)", &paths);
+ g_variant_unref (ret);
+
+ for (i = 0; paths[i]; i++)
+ g_print ("%s\n", paths[i]);
+ g_strfreev (paths);
+}
+
+int
+main (int argc, char *argv[])
+{
+ GDBusProxy *proxy;
+
+#if !GLIB_CHECK_VERSION (2, 35, 0)
+ /* Initialize GType system */
+ g_type_init ();
+#endif
+
+ /* Create a D-Bus proxy; NM_DBUS_* defined in nm-dbus-interface.h */
+ proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
+ G_DBUS_PROXY_FLAGS_NONE,
+ NULL,
+ NM_DBUS_SERVICE,
+ NM_DBUS_PATH_SETTINGS,
+ NM_DBUS_INTERFACE_SETTINGS,
+ NULL, NULL);
+ g_assert (proxy != NULL);
+
+ /* List connections of system settings service */
+ list_connections (proxy);
+
+ g_object_unref (proxy);
+
+ return 0;
+}
diff --git a/examples/C/glib/list-connections-libnm-glib.c b/examples/C/glib/list-connections-libnm-glib.c
deleted file mode 100644
index 29f105c60..000000000
--- a/examples/C/glib/list-connections-libnm-glib.c
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * 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 2011 Red Hat, Inc.
- */
-
-/*
- * The example shows how to list connections from System Settings service using libnm-glib
- * (that wraps direct D-Bus calls).
- * The example uses dbus-glib, libnm-util and libnm-glib libraries.
- *
- * Compile with:
- * gcc -Wall `pkg-config --libs --cflags glib-2.0 dbus-glib-1 libnm-util libnm-glib` list-connections-libnm-glib.c -o list-connections-libnm-glib
- */
-
-#include <glib.h>
-#include <dbus/dbus-glib.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <signal.h>
-
-#include <nm-connection.h>
-#include <nm-setting-connection.h>
-#include <NetworkManager.h>
-#include <nm-utils.h>
-#include <nm-remote-settings.h>
-
-
-/* Global variables */
-GMainLoop *loop = NULL; /* Main loop variable - needed for waiting for signal */
-int result = EXIT_SUCCESS;
-
-static void
-signal_handler (int signo)
-{
- if (signo == SIGINT || signo == SIGTERM) {
- g_message ("Caught signal %d, shutting down...", signo);
- g_main_loop_quit (loop);
- }
-}
-
-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);
-}
-
-/* Print details of connection */
-static void
-show_connection (gpointer data, gpointer user_data)
-{
- NMConnection *connection = (NMConnection *) data;
- NMSettingConnection *s_con;
- guint64 timestamp;
- char *timestamp_str;
- char timestamp_real_str[64];
- const char *val1, *val2, *val3, *val4, *val5;
-
- s_con = nm_connection_get_setting_connection (connection);
- if (s_con) {
- /* Get various info from NMSettingConnection and show it */
- timestamp = nm_setting_connection_get_timestamp (s_con);
- timestamp_str = g_strdup_printf ("%" G_GUINT64_FORMAT, timestamp);
- strftime (timestamp_real_str, sizeof (timestamp_real_str), "%c", localtime ((time_t *) &timestamp));
-
- val1 = nm_setting_connection_get_id (s_con);
- val2 = nm_setting_connection_get_uuid (s_con);
- val3 = nm_setting_connection_get_connection_type (s_con);
- val4 = nm_connection_get_path (connection);
- val5 = timestamp ? timestamp_real_str : "never";
-
- printf ("%-25s | %s | %-15s | %-43s | %s\n", val1, val2, val3, val4, val5);
-
- g_free (timestamp_str);
- }
-}
-
-/* This callback is called when connections from the settings service are ready.
- * Now the connections can be listed.
- */
-static void
-get_connections_cb (NMRemoteSettings *settings, gpointer user_data)
-{
- GSList *connections;
-
- connections = nm_remote_settings_list_connections (settings);
-
- printf ("Connections:\n===================\n");
-
- g_slist_foreach (connections, show_connection, NULL);
-
- g_slist_free (connections);
- g_object_unref (settings);
-
- /* We are done, exit main loop */
- g_main_loop_quit (loop);
-}
-
-/* Get system settings and then connect to connections-read signal */
-static gboolean
-list_connections (gpointer data)
-{
- DBusGConnection *bus = (DBusGConnection *) data;
- NMRemoteSettings *settings;
- gboolean settings_running;
-
- /* Get system settings */
- if (!(settings = nm_remote_settings_new (bus))) {
- g_message ("Error: Could not get system settings.");
- result = EXIT_FAILURE;
- g_main_loop_quit (loop);
- return FALSE;
- }
-
- /* Find out whether setting service is running */
- g_object_get (settings, NM_REMOTE_SETTINGS_SERVICE_RUNNING, &settings_running, NULL);
-
- if (!settings_running) {
- g_message ("Error: Can't obtain connections: settings service is not running.");
- result = EXIT_FAILURE;
- g_main_loop_quit (loop);
- return FALSE;
- }
-
- /* Connect to signal "connections-read" - emitted when connections are fetched and ready */
- g_signal_connect (settings, NM_REMOTE_SETTINGS_CONNECTIONS_READ,
- G_CALLBACK (get_connections_cb), NULL);
-
- return FALSE;
-}
-
-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);
-
- /* Run list_connections from main loop, because we need to wait for "connections-read"
- * signal to have connections ready. The execution will be finished in get_connections_cb()
- * callback on the signal.
- */
- g_idle_add (list_connections, bus);
-
- loop = g_main_loop_new (NULL, FALSE); /* Create main loop */
- setup_signals (); /* Setup UNIX signals */
- g_main_loop_run (loop); /* Run main loop */
-
- g_main_loop_unref (loop);
- dbus_g_connection_unref (bus);
-
- return result;
-}
diff --git a/examples/C/glib/list-connections-libnm.c b/examples/C/glib/list-connections-libnm.c
new file mode 100644
index 000000000..d5cdf361d
--- /dev/null
+++ b/examples/C/glib/list-connections-libnm.c
@@ -0,0 +1,101 @@
+/* -*- 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, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright 2011 Red Hat, Inc.
+ */
+
+/*
+ * The example shows how to list connections. Contrast this example with
+ * list-connections-gdbus.c, which is a bit lower level and talks directly to NM
+ * using GDBus.
+ *
+ * Compile with:
+ * gcc -Wall `pkg-config --libs --cflags glib-2.0 libnm` list-connections-libnm.c -o list-connections-libnm
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <NetworkManager.h>
+
+/* Print details of connection */
+static void
+show_connection (NMConnection *connection)
+{
+ NMSettingConnection *s_con;
+ guint64 timestamp;
+ char *timestamp_str;
+ char timestamp_real_str[64];
+ const char *val1, *val2, *val3, *val4, *val5;
+
+ s_con = nm_connection_get_setting_connection (connection);
+ if (s_con) {
+ /* Get various info from NMSettingConnection and show it */
+ timestamp = nm_setting_connection_get_timestamp (s_con);
+ timestamp_str = g_strdup_printf ("%" G_GUINT64_FORMAT, timestamp);
+ strftime (timestamp_real_str, sizeof (timestamp_real_str), "%c", localtime ((time_t *) &timestamp));
+
+ val1 = nm_setting_connection_get_id (s_con);
+ val2 = nm_setting_connection_get_uuid (s_con);
+ val3 = nm_setting_connection_get_connection_type (s_con);
+ val4 = nm_connection_get_path (connection);
+ val5 = timestamp ? timestamp_real_str : "never";
+
+ printf ("%-25s | %s | %-15s | %-43s | %s\n", val1, val2, val3, val4, val5);
+
+ g_free (timestamp_str);
+ }
+}
+
+int
+main (int argc, char *argv[])
+{
+ NMClient *client;
+ GError *error = NULL;
+ const GPtrArray *connections;
+ int i;
+
+#if !GLIB_CHECK_VERSION (2, 35, 0)
+ /* Initialize GType system */
+ g_type_init ();
+#endif
+
+ if (!(client = nm_client_new (NULL, &error))) {
+ g_message ("Error: Could not connect to NetworkManager: %s.", error->message);
+ g_error_free (error);
+ return EXIT_FAILURE;
+ }
+
+ if (!nm_client_get_nm_running (client)) {
+ g_message ("Error: Can't obtain connections: NetworkManager is not running.");
+ return EXIT_FAILURE;
+ }
+
+ /* Now the connections can be listed. */
+ connections = nm_client_get_connections (client);
+
+ printf ("Connections:\n===================\n");
+
+ for (i = 0; i < connections->len; i++)
+ show_connection (connections->pdata[i]);
+
+ g_object_unref (client);
+
+ return EXIT_SUCCESS;
+}
diff --git a/examples/C/glib/monitor-nm-running-dbus-glib.c b/examples/C/glib/monitor-nm-running-dbus-glib.c
deleted file mode 100644
index 0b01a57f0..000000000
--- a/examples/C/glib/monitor-nm-running-dbus-glib.c
+++ /dev/null
@@ -1,127 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* vim: set ft=c ts=4 sts=4 sw=4 noexpandtab smartindent: */
-/*
- * 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 2012 Red Hat, Inc.
- */
-
-/*
- * This example monitors whether NM is running by checking D-Bus
- * NameOwnerChanged signal.
- * It uses dbus-glib library.
- *
- * Standalone compilation:
- * gcc -Wall `pkg-config --libs --cflags glib-2.0 dbus-glib-1` monitor-nm-running.c -o monitor-nm-running
- */
-
-#include <glib.h>
-#include <dbus/dbus-glib.h>
-#include <dbus/dbus-glib-bindings.h>
-#include <string.h>
-
-#define NM_DBUS_SERVICE "org.freedesktop.NetworkManager"
-
-static void
-proxy_name_owner_changed (DBusGProxy *proxy,
- const char *name,
- const char *old_owner,
- const char *new_owner,
- gpointer user_data)
-{
- gboolean *nm_running = (gboolean *) user_data;
- gboolean old_good = (old_owner && strlen (old_owner));
- gboolean new_good = (new_owner && strlen (new_owner));
- gboolean new_running = FALSE;
-
- /* We are only interested in NetworkManager */
- if (!name || strcmp (name, NM_DBUS_SERVICE) != 0)
- return;
-
- if (!old_good && new_good)
- new_running = TRUE;
- else if (old_good && !new_good)
- new_running = FALSE;
-
- *nm_running = new_running;
-
- g_print ("name: '%s', old_owner: '%s', new_owner: '%s'", name, old_owner, new_owner);
- g_print (" => NM is %s\n", *nm_running ? "running" : "not running");
-}
-
-
-int
-main (int argc, char *argv[])
-{
- DBusGConnection *bus;
- DBusGProxy *bus_proxy;
- GMainLoop *loop = NULL;
- 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");
-
- /* Get system bus */
- bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, NULL);
-
- /* Create a D-Bus proxy to D-Bus daemon */
- bus_proxy = dbus_g_proxy_new_for_name (bus,
- "org.freedesktop.DBus",
- "/org/freedesktop/DBus",
- "org.freedesktop.DBus");
-
- if (!bus_proxy) {
- g_message ("Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus.");
- dbus_g_connection_unref (bus);
- return -1;
- }
-
- /* Call NameHasOwner method to find out if NM is running. When NM runs it claims
- * 'org.freedesktop.NetworkManager' service name on D-Bus */
- if (!org_freedesktop_DBus_name_has_owner (bus_proxy, NM_DBUS_SERVICE, &nm_running, &err)) {
- g_message ("Error: NameHasOwner request failed: %s",
- (err && err->message) ? err->message : "(unknown)");
- g_clear_error (&err);
- g_object_unref (bus_proxy);
- dbus_g_connection_unref (bus);
- return -1;
- }
- g_print ("NM is %s\n", nm_running ? "running" : "not running");
-
-
- /* Connect to NameOwnerChanged signal to monitor NM running state */
- dbus_g_proxy_add_signal (bus_proxy, "NameOwnerChanged",
- G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
- G_TYPE_INVALID);
- dbus_g_proxy_connect_signal (bus_proxy,
- "NameOwnerChanged",
- G_CALLBACK (proxy_name_owner_changed),
- &nm_running, NULL);
-
- loop = g_main_loop_new (NULL, FALSE); /* Create main loop */
- g_main_loop_run (loop); /* Run main loop */
-
- g_object_unref (bus_proxy);
- dbus_g_connection_unref (bus);
-
- return 0;
-}
-
diff --git a/examples/C/glib/monitor-nm-running-GDBus.c b/examples/C/glib/monitor-nm-running-gdbus.c
index 9e38d4c70..e4b3bbbfc 100644
--- a/examples/C/glib/monitor-nm-running-GDBus.c
+++ b/examples/C/glib/monitor-nm-running-gdbus.c
@@ -1,5 +1,4 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* vim: set ft=c ts=4 sts=4 sw=4 noexpandtab smartindent: */
/*
* 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,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 2012 Red Hat, Inc.
+ * Copyright 2012 Red Hat, Inc.
*/
/*
@@ -26,9 +25,11 @@
* See also http://developer.gnome.org/gio/stable/gio-Watching-Bus-Names.html
*
* Standalone compilation:
- * gcc -Wall `pkg-config --libs --cflags glib-2.0 gio-2.0` monitor-nm-running-GDBus.c -o monitor-nm-running-GDBus
+ * gcc -Wall `pkg-config --libs --cflags glib-2.0 gio-2.0` monitor-nm-running-gdbus.c -o monitor-nm-running-gdbus
*/
+#include "config.h"
+
#include <gio/gio.h>
static void
diff --git a/examples/C/glib/monitor-nm-state-GDBus.c b/examples/C/glib/monitor-nm-state-gdbus.c
index f40197253..aeabcfe16 100644
--- a/examples/C/glib/monitor-nm-state-GDBus.c
+++ b/examples/C/glib/monitor-nm-state-gdbus.c
@@ -1,5 +1,4 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* vim: set ft=c ts=4 sts=4 sw=4 noexpandtab smartindent: */
/*
* 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,24 +14,26 @@
* 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.
+ * Copyright 2012 Red Hat, Inc.
*/
/*
* This example monitors NM state via D-Bus "StateChanged" signal on
* "org.freedesktop.NetworkManager" object.
- * It uses GDBus.
+ * It uses GDBus and the libnm headers.
- * You don't need to have NetworkManager devel package installed. You can just
- * grab NetworkManager.h and put it in the path.
+ * You don't need to have the NetworkManager devel packages installed. You can just
+ * grab nm-dbus-interface.h and put it in the path.
*
* Standalone compilation:
- * gcc -Wall `pkg-config --libs --cflags glib-2.0 gio-2.0 NetworkManager` monitor-nm-state-GDBus.c -o monitor-nm-state-GDBus
+ * gcc -Wall `pkg-config --libs --cflags glib-2.0 gio-2.0` `pkg-config --cflags libnm` monitor-nm-state-gdbus.c -o monitor-nm-state-gdbus
*/
+#include "config.h"
+
#include <gio/gio.h>
#include <string.h>
-#include <NetworkManager.h>
+#include <nm-dbus-interface.h>
static const char *
nm_state_to_string (NMState state)
@@ -112,6 +113,7 @@ main (int argc, char *argv[])
if (proxy == NULL)
{
+ g_dbus_error_strip_remote_error (error);
g_printerr ("Error creating D-Bus proxy: %s\n", error->message);
g_error_free (error);
return -1;
diff --git a/examples/C/qt/Makefile.am b/examples/C/qt/Makefile.am
index 15b6bf452..aff4c48e2 100644
--- a/examples/C/qt/Makefile.am
+++ b/examples/C/qt/Makefile.am
@@ -1,6 +1,6 @@
AM_CPPFLAGS = \
- -I${top_srcdir}/include \
- -I${top_builddir}/include \
+ -I${top_srcdir}/libnm-core \
+ -I${top_builddir}/libnm-core \
$(DBUS_CFLAGS) \
$(QT_CFLAGS)
diff --git a/examples/C/qt/Makefile.in b/examples/C/qt/Makefile.in
index 6cce98839..f6bb151ce 100644
--- a/examples/C/qt/Makefile.in
+++ b/examples/C/qt/Makefile.in
@@ -200,6 +200,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -323,6 +325,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -342,6 +345,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -368,7 +372,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -448,8 +452,8 @@ with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
with_valgrind = @with_valgrind@
AM_CPPFLAGS = \
- -I${top_srcdir}/include \
- -I${top_builddir}/include \
+ -I${top_srcdir}/libnm-core \
+ -I${top_builddir}/libnm-core \
$(DBUS_CFLAGS) \
$(QT_CFLAGS)
diff --git a/examples/C/qt/add-connection-wired.cpp b/examples/C/qt/add-connection-wired.cpp
index 475eaffff..fe790ecdb 100644
--- a/examples/C/qt/add-connection-wired.cpp
+++ b/examples/C/qt/add-connection-wired.cpp
@@ -31,7 +31,7 @@
#include <QtCore/QDebug>
-#include "NetworkManager.h"
+#include "nm-dbus-interface.h"
typedef QMap<QString, QMap<QString, QVariant> > Connection;
Q_DECLARE_METATYPE(Connection)
@@ -68,7 +68,7 @@ int main() {
QDBusInterface interface(
NM_DBUS_SERVICE,
NM_DBUS_PATH_SETTINGS,
- NM_DBUS_IFACE_SETTINGS,
+ NM_DBUS_INTERFACE_SETTINGS,
QDBusConnection::systemBus());
addConnection(interface, "__Test connection__");
diff --git a/examples/C/qt/change-ipv4-addresses.cpp b/examples/C/qt/change-ipv4-addresses.cpp
index ca340f7f7..8ca3dde2f 100644
--- a/examples/C/qt/change-ipv4-addresses.cpp
+++ b/examples/C/qt/change-ipv4-addresses.cpp
@@ -22,10 +22,10 @@
* It uses Qt and D-Bus libraries to do that.
*
* Standalone compilation:
- * g++ -Wall `pkg-config --libs --cflags NetworkManager QtCore QtDBus QtNetwork` change-ipv4-addresses.cpp -o change-ipv4-addresses
+ * g++ -Wall `pkg-config --libs --cflags QtCore QtDBus QtNetwork` `pkg-config --cflags libnm` change-ipv4-addresses.cpp -o change-ipv4-addresses
*
* You don't need to have NetworkManager devel package installed; you can just
- * grab NetworkManager.h and put it in the path
+ * grab nm-dbus-interface.h and put it in the path
*/
#include <QtDBus/QDBusConnection>
@@ -40,7 +40,7 @@
#include "arpa/inet.h"
-#include "NetworkManager.h"
+#include "nm-dbus-interface.h"
typedef QMap<QString, QMap<QString, QVariant> > Connection;
Q_DECLARE_METATYPE(Connection)
@@ -61,7 +61,7 @@ const QString getConnection(const QString& connectionUuid, Connection *found_con
QDBusInterface interface(
NM_DBUS_SERVICE,
NM_DBUS_PATH_SETTINGS,
- NM_DBUS_IFACE_SETTINGS,
+ NM_DBUS_INTERFACE_SETTINGS,
QDBusConnection::systemBus());
// Get connection list and find the connection with 'connectionUuid'
@@ -71,7 +71,7 @@ const QString getConnection(const QString& connectionUuid, Connection *found_con
ifaceForSettings = new QDBusInterface(
NM_DBUS_SERVICE,
connection.path(),
- NM_DBUS_IFACE_SETTINGS_CONNECTION,
+ NM_DBUS_INTERFACE_SETTINGS_CONNECTION,
QDBusConnection::systemBus());
QDBusReply<Connection> result2 = ifaceForSettings->call("GetSettings");
delete ifaceForSettings;
@@ -120,7 +120,7 @@ void changeConnection(const QString& uuid)
QDBusInterface interface(
NM_DBUS_SERVICE,
conPath,
- NM_DBUS_IFACE_SETTINGS_CONNECTION,
+ NM_DBUS_INTERFACE_SETTINGS_CONNECTION,
QDBusConnection::systemBus());
// Call Update() D-Bus method to update connection
diff --git a/examples/C/qt/list-connections.cpp b/examples/C/qt/list-connections.cpp
index fb9816647..66f309c83 100644
--- a/examples/C/qt/list-connections.cpp
+++ b/examples/C/qt/list-connections.cpp
@@ -28,7 +28,7 @@
#include <QtCore/QDebug>
-#include "NetworkManager.h"
+#include "nm-dbus-interface.h"
void listConnections(QDBusInterface& interface) {
@@ -44,7 +44,7 @@ int main() {
QDBusInterface interface(
NM_DBUS_SERVICE,
NM_DBUS_PATH_SETTINGS,
- NM_DBUS_IFACE_SETTINGS,
+ NM_DBUS_INTERFACE_SETTINGS,
QDBusConnection::systemBus());
listConnections(interface);
diff --git a/examples/Makefile.in b/examples/Makefile.in
index 8a27af4f3..6754f4e67 100644
--- a/examples/Makefile.in
+++ b/examples/Makefile.in
@@ -189,6 +189,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -312,6 +314,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -331,6 +334,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -357,7 +361,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
diff --git a/examples/dispatcher/Makefile.in b/examples/dispatcher/Makefile.in
index d577fde10..7e1686ad9 100644
--- a/examples/dispatcher/Makefile.in
+++ b/examples/dispatcher/Makefile.in
@@ -129,6 +129,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -252,6 +254,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -271,6 +274,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -297,7 +301,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
diff --git a/examples/python/Makefile.in b/examples/python/Makefile.in
index 338935955..fd0edd1c4 100644
--- a/examples/python/Makefile.in
+++ b/examples/python/Makefile.in
@@ -189,6 +189,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -312,6 +314,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -331,6 +334,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -357,7 +361,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
diff --git a/examples/python/dbus/Makefile.am b/examples/python/dbus/Makefile.am
index 0e8848849..dd77f1e9b 100644
--- a/examples/python/dbus/Makefile.am
+++ b/examples/python/dbus/Makefile.am
@@ -1,6 +1,7 @@
EXTRA_DIST = \
nm-state.py \
add-connection.py \
+ add-connection-compat.py \
add-system-wifi-connection.py \
vpn.py \
update-secrets.py \
diff --git a/examples/python/dbus/Makefile.in b/examples/python/dbus/Makefile.in
index 7b543fa73..a505993c5 100644
--- a/examples/python/dbus/Makefile.in
+++ b/examples/python/dbus/Makefile.in
@@ -129,6 +129,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -252,6 +254,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -271,6 +274,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -297,7 +301,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -379,6 +383,7 @@ with_valgrind = @with_valgrind@
EXTRA_DIST = \
nm-state.py \
add-connection.py \
+ add-connection-compat.py \
add-system-wifi-connection.py \
vpn.py \
update-secrets.py \
diff --git a/examples/python/dbus/add-connection-compat.py b/examples/python/dbus/add-connection-compat.py
new file mode 100755
index 000000000..4792ac5eb
--- /dev/null
+++ b/examples/python/dbus/add-connection-compat.py
@@ -0,0 +1,66 @@
+#!/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 - 2012 Red Hat, Inc.
+#
+
+#
+# This example adds a new ethernet connection via the AddConnection()
+# D-Bus call, using backward-compatible settings, so it will work with
+# both old and new versions of NetworkManager. Compare
+# add-connection.py, which only supports NM 1.0 and later.
+#
+# Configuration settings are described at
+# https://developer.gnome.org/NetworkManager/1.0/ref-settings.html
+#
+
+import socket, struct, dbus, uuid
+
+# Helper functions
+def ip_to_int(ip_string):
+ return struct.unpack("=I", socket.inet_aton(ip_string))[0]
+
+def int_to_ip(ip_int):
+ return socket.inet_ntoa(struct.pack("=I", ip_int))
+
+s_wired = dbus.Dictionary({'duplex': 'full'})
+s_con = dbus.Dictionary({
+ 'type': '802-3-ethernet',
+ 'uuid': str(uuid.uuid4()),
+ 'id': 'MyConnectionExample'})
+
+addr1 = dbus.Array([ip_to_int("10.1.2.3"), dbus.UInt32(8L), ip_to_int("10.1.2.1")], signature=dbus.Signature('u'))
+s_ip4 = dbus.Dictionary({
+ 'addresses': dbus.Array([addr1], signature=dbus.Signature('au')),
+ 'method': 'manual'})
+
+s_ip6 = dbus.Dictionary({'method': 'ignore'})
+
+con = dbus.Dictionary({
+ '802-3-ethernet': s_wired,
+ 'connection': s_con,
+ 'ipv4': s_ip4,
+ 'ipv6': s_ip6})
+
+
+print "Creating connection:", s_con['id'], "-", s_con['uuid']
+
+bus = dbus.SystemBus()
+proxy = bus.get_object("org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager/Settings")
+settings = dbus.Interface(proxy, "org.freedesktop.NetworkManager.Settings")
+
+settings.AddConnection(con)
+
diff --git a/examples/python/dbus/add-connection.py b/examples/python/dbus/add-connection.py
index 6df14c103..5ebb82a38 100755
--- a/examples/python/dbus/add-connection.py
+++ b/examples/python/dbus/add-connection.py
@@ -18,20 +18,17 @@
#
#
-# This example adds a new ethernet connection via AddConnection() D-Bus call.
+# This example adds a new ethernet connection via the AddConnection()
+# D-Bus call, using the new 'ipv4.address-data' and 'ipv4.gateway'
+# settings introduced in NetworkManager 1.0. Compare
+# add-connection-compat.py, which will work against older versions of
+# NetworkManager as well.
#
# Configuration settings are described at
-# https://developer.gnome.org/NetworkManager/0.9/ref-settings.html
+# https://developer.gnome.org/NetworkManager/1.0/ref-settings.html
#
-import socket, struct, dbus, uuid
-
-# Helper functions
-def ip_to_int(ip_string):
- return struct.unpack("=I", socket.inet_aton(ip_string))[0]
-
-def int_to_ip(ip_int):
- return socket.inet_ntoa(struct.pack("=I", ip_int))
+import dbus, uuid
s_wired = dbus.Dictionary({'duplex': 'full'})
s_con = dbus.Dictionary({
@@ -39,9 +36,12 @@ s_con = dbus.Dictionary({
'uuid': str(uuid.uuid4()),
'id': 'MyConnectionExample'})
-addr1 = dbus.Array([ip_to_int("10.1.2.3"), dbus.UInt32(8L), ip_to_int("10.1.2.1")], signature=dbus.Signature('u'))
+addr1 = dbus.Dictionary({
+ 'address': '10.1.2.3',
+ 'prefix': dbus.UInt32(8L)})
s_ip4 = dbus.Dictionary({
- 'addresses': dbus.Array([addr1], signature=dbus.Signature('au')),
+ 'address-data': dbus.Array([addr1], signature=dbus.Signature('a{sv}')),
+ 'gateway': '10.1.2.1',
'method': 'manual'})
s_ip6 = dbus.Dictionary({'method': 'ignore'})
diff --git a/examples/python/dbus/is-wwan-default.py b/examples/python/dbus/is-wwan-default.py
index 6131cda16..a4a3ff8e7 100755
--- a/examples/python/dbus/is-wwan-default.py
+++ b/examples/python/dbus/is-wwan-default.py
@@ -28,6 +28,8 @@ NM_SERVICE_NAME = "org.freedesktop.NetworkManager"
NM_MANAGER_IFACE = "org.freedesktop.NetworkManager"
DBUS_PROPS_IFACE = "org.freedesktop.DBus.Properties"
+NM_ACTIVE_CONNECTION_INTERFACE = "org.freedesktop.NetworkManager.Connection.Active"
+
bus = dbus.SystemBus()
# Exit early if NetworkManager is not running
@@ -42,34 +44,54 @@ 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
+def found_connection_type(ctype):
+ if ctype == '':
+ print "No active connection"
+ elif ctype in ["gsm", "cdma", "bluetooth"]:
+ print "WWAN is default"
+ else:
+ print "WWAN is not default"
+ sys.exit(0)
+
+# Shortcut #1, for NM 1.0
+try:
+ ctype = props.Get(NM_MANAGER_IFACE, "PrimaryConnectionType")
+ found_connection_type(ctype)
+except KeyError:
+ pass
-# Look through all active network connections for the default one
+# Shortcut #2, for NM 0.9.10
+try:
+ primary = props.Get(NM_MANAGER_IFACE, "PrimaryConnection")
+ if not primary:
+ found_connection_type('')
+ primary_proxy = bus.get_object(NM_SERVICE_NAME, primary)
+ primary_props = dbus.Interface(primary_proxy, DBUS_PROPS_IFACE)
+ ctype = primary_props.Get(NM_ACTIVE_CONNECTION_INTERFACE, "Type")
+ found_connection_type(ctype)
+except KeyError:
+ pass
+
+# Fallback for NM 0.9.8 and earlier; look through all active network
+# connections for the default one
+default_is_wwan = False
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")
+ all_props = a_props.GetAll(NM_ACTIVE_CONNECTION_INTERFACE)
# 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
+ 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"
diff --git a/examples/python/dbus/update-ip4-method.py b/examples/python/dbus/update-ip4-method.py
index 243738c5c..28a222899 100755
--- a/examples/python/dbus/update-ip4-method.py
+++ b/examples/python/dbus/update-ip4-method.py
@@ -21,15 +21,14 @@
#
# This example updates a connection's IPv4 method with the Update() method.
#
+# This uses the new NM 1.0 setting properties. See add-connection-compat.py
+# for a similar example using the backward-compatible properties
+#
# Configuration settings are described at
-# https://developer.gnome.org/NetworkManager/0.9/ref-settings.html
+# https://developer.gnome.org/NetworkManager/1.0/ref-settings.html
#
-import socket, struct, dbus, sys
-
-def ip_to_int(ip_string):
- return struct.unpack("=I", socket.inet_aton(ip_string))[0]
-
+import dbus, sys
if len(sys.argv) < 3:
print "Usage: %s <uuid> <auto|static> [address prefix gateway]" % sys.argv[0]
@@ -58,21 +57,25 @@ for c_path in settings.ListConnections():
continue
# add IPv4 setting if it doesn't yet exist
- if not c_settings.has_key('ipv4'):
+ if 'ipv4' not in c_settings:
c_settings['ipv4'] = {}
+ # clear existing address info
+ if c_settings['ipv4'].has_key('addresses'):
+ del c_settings['ipv4']['addresses']
+ if c_settings['ipv4'].has_key('address-data'):
+ del c_settings['ipv4']['address-data']
+ if c_settings['ipv4'].has_key('gateway'):
+ del c_settings['ipv4']['gateway']
+
# 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":
+ if method == "manual":
# Add the static IP address, prefix, and (optional) gateway
- gw = 0
+ addr = dbus.Dictionary({'address': sys.argv[3], 'prefix': dbus.UInt32(int(sys.argv[4]))})
+ c_settings['ipv4']['address-data'] = dbus.Array([addr], signature=dbus.Signature('a{sv}'))
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'))
+ c_settings['ipv4']['gateway'] = sys.argv[5]
# Save all the updated settings back to NetworkManager
c_obj.Update(c_settings)
diff --git a/examples/python/gi/Makefile.in b/examples/python/gi/Makefile.in
index 8ea13b18d..0f8e3e585 100644
--- a/examples/python/gi/Makefile.in
+++ b/examples/python/gi/Makefile.in
@@ -129,6 +129,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -252,6 +254,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -271,6 +274,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -297,7 +301,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
diff --git a/examples/python/gi/add_connection.py b/examples/python/gi/add_connection.py
index 76c2e94e6..bb1163db2 100755
--- a/examples/python/gi/add_connection.py
+++ b/examples/python/gi/add_connection.py
@@ -1,5 +1,7 @@
#!/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
@@ -15,21 +17,19 @@
# 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.
+# Copyright 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.
+# The code uses libnm (NM) 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
+# https://developer.gnome.org/libnm/1.0/
+# https://developer.gnome.org/NetworkManager/1.0/ref-settings.html
#
-from gi.repository import GLib, NetworkManager, NMClient
+from gi.repository import GLib, NM
import sys, uuid
main_loop = None
@@ -39,19 +39,19 @@ def print_values(setting, key, value, flags, data):
# 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")
+ profile = NM.SimpleConnection.new()
+ s_con = NM.SettingConnection.new()
+ s_con.set_property(NM.SETTING_CONNECTION_ID, name)
+ s_con.set_property(NM.SETTING_CONNECTION_UUID, str(uuid.uuid4()))
+ s_con.set_property(NM.SETTING_CONNECTION_TYPE, "802-3-ethernet")
- s_wired = NetworkManager.SettingWired.new()
+ s_wired = NM.SettingWired.new()
- s_ip4 = NetworkManager.SettingIP4Config.new()
- s_ip4.set_property(NetworkManager.SETTING_IP4_CONFIG_METHOD, "auto")
+ s_ip4 = NM.SettingIP4Config.new()
+ s_ip4.set_property(NM.SETTING_IP_CONFIG_METHOD, "auto")
- s_ip6 = NetworkManager.SettingIP6Config.new()
- s_ip6.set_property(NetworkManager.SETTING_IP6_CONFIG_METHOD, "auto")
+ s_ip6 = NM.SettingIP6Config.new()
+ s_ip6.set_property(NM.SETTING_IP_CONFIG_METHOD, "auto")
profile.add_setting(s_con)
profile.add_setting(s_ip4)
@@ -64,11 +64,12 @@ def create_profile(name):
return profile
# callback function
-def added_cb(settings, con, error, data):
- if error is (None):
+def added_cb(client, result, data):
+ try:
+ client.add_connection_finish(result)
print("The connection profile has been succesfully added to NetworkManager.")
- else:
- print(error)
+ except Exception, e:
+ print("Error: %s" % e)
main_loop.quit()
if __name__ == "__main__":
@@ -85,17 +86,14 @@ if __name__ == "__main__":
main_loop = GLib.MainLoop()
- # create RemoteSettings object
- settings = NMClient.RemoteSettings.new(None);
+ # create Client object
+ client = NM.Client.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)
+ client.add_connection_async(con, persistent, None, added_cb, None)
main_loop.run()
diff --git a/examples/python/gi/device-state-ip4config.py b/examples/python/gi/device-state-ip4config.py
index be19b9966..1a6f7dece 100755
--- a/examples/python/gi/device-state-ip4config.py
+++ b/examples/python/gi/device-state-ip4config.py
@@ -21,7 +21,7 @@
#
import sys
-from gi.repository import GLib, NetworkManager, NMClient
+from gi.repository import GLib, NM
#
# This example shows how to get NMIP4Config from NMDevice after it is activated.
@@ -51,7 +51,7 @@ if __name__ == "__main__":
sys.exit('Usage: %s <interface>' % sys.argv[0])
dev_iface = sys.argv[1]
- c = NMClient.Client.new()
+ c = NM.Client.new(None)
dev = c.get_device_by_iface(dev_iface)
if dev is None:
sys.exit('Device \'%s\' not found' % dev_iface)
diff --git a/examples/python/gi/firewall-zone.py b/examples/python/gi/firewall-zone.py
index 5e5eea919..ed9e59103 100755
--- a/examples/python/gi/firewall-zone.py
+++ b/examples/python/gi/firewall-zone.py
@@ -16,11 +16,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) 2013 Red Hat, Inc.
+# Copyright 2013 - 2014 Red Hat, Inc.
#
import sys
-from gi.repository import GLib, NetworkManager, NMClient
+from gi.repository import GLib, NM
#
# This example demonstrates how to get and change firewall zone in a
@@ -32,7 +32,7 @@ from gi.repository import GLib, NetworkManager, NMClient
# If you used D-Bus calls, you would call GetSettings() and then Update().
#
# Links:
-# https://developer.gnome.org/libnm-glib/0.9/
+# https://developer.gnome.org/libnm/1.0/
# https://wiki.gnome.org/GObjectIntrospection
# https://wiki.gnome.org/PyGObject
#
@@ -43,7 +43,14 @@ def connection_saved(connection, error, data):
print ("Connection '%s' saved.") % (connection.get_id())
main_loop.quit()
-def connections_read(settings, data):
+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()
+ client = NM.Client.new(None)
+ connections = client.get_connections()
+
con_name = sys.argv[1]
if len(sys.argv) == 3:
new_zone = sys.argv[2]
@@ -51,7 +58,6 @@ def connections_read(settings, data):
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
@@ -71,17 +77,3 @@ def connections_read(settings, data):
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
index 13f0b0310..55ba2d81c 100755
--- a/examples/python/gi/get-active-connections.py
+++ b/examples/python/gi/get-active-connections.py
@@ -21,10 +21,10 @@
# This example lists currently active connections
-from gi.repository import GLib, NMClient
+from gi.repository import GLib, NM
if __name__ == "__main__":
- client = NMClient.Client.new()
+ client = NM.Client.new(None)
acons = client.get_active_connections()
for ac in acons:
print "%s (%s) - %s" % (ac.get_id(), ac.get_uuid(), ac.get_connection_type())
diff --git a/examples/python/gi/get_ips.py b/examples/python/gi/get_ips.py
index 6903b6de2..690bd6ef8 100755
--- a/examples/python/gi/get_ips.py
+++ b/examples/python/gi/get_ips.py
@@ -17,22 +17,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) 2014 Red Hat, Inc.
+# Copyright 2014 Red Hat, Inc.
#
-import sys, socket, struct
-from gi.repository import GLib, NetworkManager, NMClient
+import sys, socket
+from gi.repository import GLib, NM
#
# This example shows how to get addresses, routes and DNS information
# from NMIP4Config and NMIP6Config (got out of NMDevice)
#
-def show_addresses(self, family):
+def show_addresses(dev, family):
if (family == socket.AF_INET):
- ip_cfg = self.get_ip4_config()
+ ip_cfg = dev.get_ip4_config()
else:
- ip_cfg = self.get_ip6_config()
+ ip_cfg = dev.get_ip6_config()
if ip_cfg is None:
print("None")
@@ -46,24 +46,29 @@ def show_addresses(self, family):
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))
+ print("%s/%d") % (addr, prefix)
+def show_gateway(dev, family):
+ if (family == socket.AF_INET):
+ ip_cfg = dev.get_ip4_config()
+ else:
+ ip_cfg = dev.get_ip6_config()
+
+ if ip_cfg is None:
+ gw = "None"
+ else:
+ gw = ip_cfg.get_gateway()
+ if gw == '':
+ gw = "None"
+
+ print(gw)
-def show_routes(self, family):
+def show_routes(dev, family):
if (family == socket.AF_INET):
- ip_cfg = self.get_ip4_config()
+ ip_cfg = dev.get_ip4_config()
else:
- ip_cfg = self.get_ip6_config()
+ ip_cfg = dev.get_ip6_config()
if ip_cfg is None:
print("None")
@@ -80,43 +85,24 @@ def show_routes(self, family):
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)
+ print("%s/%d %s %d") % (dest, prefix, next_hop, metric)
-def show_dns(self, family):
+def show_dns(dev, family):
if (family == socket.AF_INET):
- ip_cfg = self.get_ip4_config()
+ ip_cfg = dev.get_ip4_config()
else:
- ip_cfg = self.get_ip6_config()
+ ip_cfg = dev.get_ip6_config()
if ip_cfg is None:
print("None")
return
+ print ("Nameservers: %s") % (ip_cfg.get_nameservers())
+ print ("Domains: %s") % (ip_cfg.get_domains())
+ print ("Searches: %s") % (ip_cfg.get_searches())
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)
+ print ("WINS: %s") % (ip_cfg.get_wins_servers())
if __name__ == "__main__":
@@ -124,7 +110,7 @@ if __name__ == "__main__":
sys.exit('Usage: %s <interface>' % sys.argv[0])
dev_iface = sys.argv[1]
- c = NMClient.Client.new()
+ c = NM.Client.new(None)
dev = c.get_device_by_iface(dev_iface)
if dev is None:
sys.exit('Device \'%s\' not found' % dev_iface)
@@ -136,6 +122,11 @@ if __name__ == "__main__":
show_addresses(dev, socket.AF_INET)
print
+ print("IPv4 gateway:")
+ print("-------------")
+ show_gateway(dev, socket.AF_INET)
+ print
+
print("IPv4 routes:")
print("------------")
show_routes(dev, socket.AF_INET)
@@ -146,6 +137,11 @@ if __name__ == "__main__":
show_addresses(dev, socket.AF_INET6)
print
+ print("IPv6 gateway:")
+ print("-------------")
+ show_gateway(dev, socket.AF_INET6)
+ print
+
print "IPv6 routes:"
print("------------")
show_routes(dev, socket.AF_INET6)
diff --git a/examples/python/gi/list-connections.py b/examples/python/gi/list-connections.py
index b6452d35a..34b559fc6 100755
--- a/examples/python/gi/list-connections.py
+++ b/examples/python/gi/list-connections.py
@@ -1,5 +1,7 @@
#!/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
@@ -15,36 +17,26 @@
# 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.
+# Copyright 2012 - 2014 Red Hat, Inc.
#
-from gi.repository import GLib, NetworkManager, NMClient
+from gi.repository import NM
# 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()
+if __name__ == "__main__":
+ # create Client object
+ client = NM.Client.new(None)
+
+ # get all connections
+ connections = client.get_connections()
+
+ # print the connections' details
for c in connections:
- print "--- %s : %s" % (c.get_id(), c.get_path())
+ 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
index 9d9e34718..7f3bd2dbb 100755
--- a/examples/python/gi/show-wifi-networks.py
+++ b/examples/python/gi/show-wifi-networks.py
@@ -20,33 +20,32 @@
# Copyright (C) 2013 Red Hat, Inc.
#
-from gi.repository import NetworkManager, NMClient
+import locale
+from gi.repository import NM
#
# This example lists Wi-Fi access points NetworkManager scanned on Wi-Fi devices.
-# It calls libnm-glib functions using GObject introspection.
+# It calls libnm 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 ssid_to_utf8(ap):
+ ssid = ap.get_ssid()
+ if not ssid:
+ return ""
+ return NM.utils_ssid_to_utf8(ap.get_ssid().get_data())
+
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()
+ ssid = ssid_to_utf8(active_ap)
info = "Device: %s | Driver: %s | Active AP: %s" % (dev.get_iface(), dev.get_driver(), ssid)
print info
print '=' * len(info)
@@ -54,19 +53,24 @@ def print_device_info(device):
def print_ap_info(ap):
strength = ap.get_strength()
frequency = ap.get_frequency()
- print "SSID: %s" % (ap.get_ssid())
+ print "SSID: %s" % (ssid_to_utf8(ap))
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 "Channel: %s" % (NM.utils_wifi_freq_to_channel(frequency))
+ print "Strength: %s %s%%" % (NM.utils_wifi_strength_bars(strength), strength)
print
if __name__ == "__main__":
- nmc = NMClient.Client.new()
+ # Python apparently doesn't call setlocale() on its own? We have to call this or else
+ # NM.utils_wifi_strength_bars() will think the locale is ASCII-only, and return the
+ # fallback characters rather than the unicode bars
+ locale.setlocale(locale.LC_ALL, '')
+
+ nmc = NM.Client.new(None)
devs = nmc.get_devices()
for dev in devs:
- if dev.get_device_type() == NetworkManager.DeviceType.WIFI:
+ if dev.get_device_type() == NM.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
index 2fe12693b..983578cf4 100755
--- a/examples/python/gi/update-ip4-method.py
+++ b/examples/python/gi/update-ip4-method.py
@@ -1,5 +1,6 @@
#!/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
@@ -15,35 +16,43 @@
# 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.
+# Copyright 2014 Red Hat, Inc.
#
#
# This example updates a connection's IPv4 method with the Update() method
-# using the libnm-glib GObject-based convenience APIs.
+# using the libnm GObject-based convenience APIs.
#
# Configuration settings are described at
-# https://developer.gnome.org/NetworkManager/0.9/ref-settings.html
+# https://developer.gnome.org/NetworkManager/1.0/ref-settings.html
#
-from gi.repository import GLib, NetworkManager, NMClient
-import sys, struct, socket
+from gi.repository import GLib, NM
+import sys, socket
-def ip_to_int(ip_string):
- return struct.unpack("=I", socket.inet_aton(ip_string))[0]
+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" or method == "manual") and len(sys.argv) < 5:
+ print "Usage: %s %s static address prefix [gateway]" % (sys.argv[0], sys.argv[1])
+ sys.exit(1)
-# 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()
+ uuid = sys.argv[1]
-def connections_read_cb(settings, data):
- uuid, method, args = data
+ # Convert method to NM method
+ if method == "static":
+ method = "manual"
+
+ main_loop = GLib.MainLoop()
- all_connections = settings.list_connections()
+ # create Client object
+ client = NM.Client.new(None)
+
+ all_connections = client.get_connections()
for c in all_connections:
if c.get_uuid() != uuid:
continue
@@ -51,46 +60,26 @@ def connections_read_cb(settings, data):
# 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()
+ s_ip4 = NM.SettingIP4Config.new()
c.add_setting(s_ip4)
# set the method and change properties
- s_ip4.set_property(NetworkManager.SETTING_IP4_CONFIG_METHOD, method)
+ s_ip4.set_property(NM.SETTING_IP_CONFIG_METHOD, method)
if method == "auto":
- # remove addresses
+ # remove addresses and gateway
s_ip4.clear_addresses()
+ s_ip4.props.gateway = None
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]))
+ addr = NM.IPAddress.new(socket.AF_INET, sys.argv[3], int(sys.argv[4]))
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()
+ if len(sys.argv) == 6:
+ s_ip4.props.gateway = sys.argv[5]
+
+ try:
+ c.commit_changes(True, None)
+ print("The connection profile has been updated.")
+ except Exception, e:
+ print("Error: %s" % e)
+ break
diff --git a/examples/ruby/Makefile.in b/examples/ruby/Makefile.in
index e9bff7858..fa8d7c733 100644
--- a/examples/ruby/Makefile.in
+++ b/examples/ruby/Makefile.in
@@ -129,6 +129,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -252,6 +254,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -271,6 +274,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -297,7 +301,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
diff --git a/examples/ruby/add-connection.rb b/examples/ruby/add-connection.rb
index 6af723bf1..645ad3486 100755
--- a/examples/ruby/add-connection.rb
+++ b/examples/ruby/add-connection.rb
@@ -27,8 +27,13 @@ require 'ipaddr'
# It also shows how to specify D-Bus signature for properties like "addresses"
# and "clone-mac-address".
#
+# This uses the old, backwards-compatible settings properties. The new 1.0
+# properties (eg, 'address-data' rather than 'addresses') would make this simpler;
+# see the python add-connection.py and add-connection-compat.py examples for
+# details
+#
# Configuration settings are described here:
-# https://developer.gnome.org/NetworkManager/0.9/ref-settings.html
+# https://developer.gnome.org/NetworkManager/1.0/ref-settings.html
#
# Helper functions
diff --git a/examples/shell/Makefile.in b/examples/shell/Makefile.in
index d3a6bdfae..327b49494 100644
--- a/examples/shell/Makefile.in
+++ b/examples/shell/Makefile.in
@@ -129,6 +129,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -252,6 +254,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -271,6 +274,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -297,7 +301,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
diff --git a/include/Makefile.am b/include/Makefile.am
index 087afe48f..6e84a5b63 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -1,17 +1,9 @@
EXTRA_DIST = \
- NetworkManager.h \
- NetworkManagerVPN.h \
+ gsystem-local-alloc.h \
nm-dbus-glib-types.h \
nm-glib-compat.h \
nm-gvaluearray-compat.h \
nm-test-utils.h \
- nm-version.h.in \
- nm-settings-flags.h
-
-NetworkManagerincludedir=$(includedir)/NetworkManager
-
-NetworkManagerinclude_HEADERS = \
- NetworkManager.h \
- NetworkManagerVPN.h \
- nm-version.h
+ nm-utils-internal.h
+CLEANFILES=nm-version.h
diff --git a/include/Makefile.in b/include/Makefile.in
index 4ec32b8bc..07ade2fb2 100644
--- a/include/Makefile.in
+++ b/include/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 = \
@@ -79,8 +78,7 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = include
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
- $(srcdir)/nm-version.h.in $(NetworkManagerinclude_HEADERS)
+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 \
@@ -99,7 +97,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 = nm-version.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@)
@@ -120,54 +118,7 @@ am__can_run_installinfo = \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
-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)$(NetworkManagerincludedir)"
-HEADERS = $(NetworkManagerinclude_HEADERS)
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@
@@ -178,6 +129,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -301,6 +254,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -320,6 +274,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -346,7 +301,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -426,21 +381,14 @@ with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
with_valgrind = @with_valgrind@
EXTRA_DIST = \
- NetworkManager.h \
- NetworkManagerVPN.h \
+ gsystem-local-alloc.h \
nm-dbus-glib-types.h \
nm-glib-compat.h \
nm-gvaluearray-compat.h \
nm-test-utils.h \
- nm-version.h.in \
- nm-settings-flags.h
-
-NetworkManagerincludedir = $(includedir)/NetworkManager
-NetworkManagerinclude_HEADERS = \
- NetworkManager.h \
- NetworkManagerVPN.h \
- nm-version.h
+ nm-utils-internal.h
+CLEANFILES = nm-version.h
all: all-am
.SUFFIXES:
@@ -474,87 +422,18 @@ $(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):
-nm-version.h: $(top_builddir)/config.status $(srcdir)/nm-version.h.in
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
-install-NetworkManagerincludeHEADERS: $(NetworkManagerinclude_HEADERS)
- @$(NORMAL_INSTALL)
- @list='$(NetworkManagerinclude_HEADERS)'; test -n "$(NetworkManagerincludedir)" || list=; \
- if test -n "$$list"; then \
- echo " $(MKDIR_P) '$(DESTDIR)$(NetworkManagerincludedir)'"; \
- $(MKDIR_P) "$(DESTDIR)$(NetworkManagerincludedir)" || 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_HEADER) $$files '$(DESTDIR)$(NetworkManagerincludedir)'"; \
- $(INSTALL_HEADER) $$files "$(DESTDIR)$(NetworkManagerincludedir)" || exit $$?; \
- done
+tags TAGS:
-uninstall-NetworkManagerincludeHEADERS:
- @$(NORMAL_UNINSTALL)
- @list='$(NetworkManagerinclude_HEADERS)'; test -n "$(NetworkManagerincludedir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- dir='$(DESTDIR)$(NetworkManagerincludedir)'; $(am__uninstall_files_from_dir)
-
-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
+ctags CTAGS:
+
+cscope cscopelist:
-distclean-tags:
- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -588,11 +467,8 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-am
-all-am: Makefile $(HEADERS)
+all-am: Makefile
installdirs:
- for dir in "$(DESTDIR)$(NetworkManagerincludedir)"; do \
- test -z "$$dir" || $(MKDIR_P) "$$dir"; \
- done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
@@ -615,6 +491,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)
@@ -629,7 +506,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am
distclean: distclean-am
-rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-tags
+distclean-am: clean-am distclean-generic
dvi: dvi-am
@@ -643,7 +520,7 @@ info: info-am
info-am:
-install-data-am: install-NetworkManagerincludeHEADERS
+install-data-am:
install-dvi: install-dvi-am
@@ -687,23 +564,21 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-NetworkManagerincludeHEADERS
+uninstall-am:
.MAKE: install-am install-strip
-.PHONY: 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-NetworkManagerincludeHEADERS 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 tags-am uninstall \
- uninstall-NetworkManagerincludeHEADERS uninstall-am
+.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.
diff --git a/libgsystem/gsystem-local-alloc.h b/include/gsystem-local-alloc.h
index 34db2979a..68b122742 100644
--- a/libgsystem/gsystem-local-alloc.h
+++ b/include/gsystem-local-alloc.h
@@ -46,8 +46,11 @@ G_BEGIN_DECLS
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(GKeyFile*, gs_local_keyfile_unref, g_key_file_unref)
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_FUNCTION(GList*, gs_local_free_list, g_list_free)
+GS_DEFINE_CLEANUP_FUNCTION(GSList*, gs_local_free_slist, g_slist_free)
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)
@@ -128,6 +131,22 @@ GS_DEFINE_CLEANUP_FUNCTION(void*, gs_local_free, g_free)
#define gs_unref_hashtable __attribute__ ((cleanup(gs_local_hashtable_unref)))
/**
+ * gs_free_list:
+ *
+ * Call g_list_free() on a variable location when it goes out
+ * of scope.
+ */
+#define gs_free_list __attribute__ ((cleanup(gs_local_free_list)))
+
+/**
+ * gs_free_slist:
+ *
+ * Call g_slist_free() on a variable location when it goes out
+ * of scope.
+ */
+#define gs_free_slist __attribute__ ((cleanup(gs_local_free_slist)))
+
+/**
* gs_free_checksum:
*
* Call g_checksum_free() on a variable location when it goes out
diff --git a/include/nm-dbus-glib-types.h b/include/nm-dbus-glib-types.h
index 0f8c542e8..ad11ab681 100644
--- a/include/nm-dbus-glib-types.h
+++ b/include/nm-dbus-glib-types.h
@@ -1,7 +1,5 @@
-/* NetworkManager -- Network link manager
- *
- * Dan Williams <dcbw@redhat.com>
- *
+/* -*- 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
@@ -16,11 +14,11 @@
* 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 2008 Red Hat, Inc.
*/
-#ifndef DBUS_GLIB_TYPES_H
-#define DBUS_GLIB_TYPES_H
+#ifndef __NM_DBUS_GLIB_TYPES_H__
+#define __NM_DBUS_GLIB_TYPES_H__
#include <dbus/dbus-glib.h>
@@ -39,5 +37,9 @@
#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))
-#endif /* DBUS_GLIB_TYPES_H */
+#define DBUS_TYPE_NM_IP_ADDRESS DBUS_TYPE_G_MAP_OF_VARIANT
+#define DBUS_TYPE_NM_IP_ADDRESSES (dbus_g_type_get_collection ("GPtrArray", DBUS_TYPE_NM_IP_ADDRESS))
+#define DBUS_TYPE_NM_IP_ROUTE DBUS_TYPE_G_MAP_OF_VARIANT
+#define DBUS_TYPE_NM_IP_ROUTES (dbus_g_type_get_collection ("GPtrArray", DBUS_TYPE_NM_IP_ROUTE))
+#endif /* __NM_DBUS_GLIB_TYPES_H__ */
diff --git a/include/nm-glib-compat.h b/include/nm-glib-compat.h
index cfaddb7d3..1dc939fea 100644
--- a/include/nm-glib-compat.h
+++ b/include/nm-glib-compat.h
@@ -1,8 +1,5 @@
/* -*- 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
@@ -17,43 +14,67 @@
* 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.
+ * Copyright 2008 - 2011 Red Hat, Inc.
*/
-#ifndef NM_GLIB_COMPAT_H
-#define NM_GLIB_COMPAT_H
+#ifndef __NM_GLIB_COMPAT_H__
+#define __NM_GLIB_COMPAT_H__
#include <glib.h>
#include <glib-object.h>
+
+#ifdef __clang__
+
+#undef G_GNUC_BEGIN_IGNORE_DEPRECATIONS
+#undef G_GNUC_END_IGNORE_DEPRECATIONS
+
+#define G_GNUC_BEGIN_IGNORE_DEPRECATIONS \
+ _Pragma("clang diagnostic push") \
+ _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"")
+
+#define G_GNUC_END_IGNORE_DEPRECATIONS \
+ _Pragma("clang diagnostic pop")
+
+#endif
+
+
#include "nm-gvaluearray-compat.h"
-#if !GLIB_CHECK_VERSION(2,34,0)
+
static inline void
-g_type_ensure (GType type)
+__g_type_ensure (GType type)
{
- if (G_UNLIKELY (type == (GType)-1))
- g_error ("can't happen");
+#if !GLIB_CHECK_VERSION(2,34,0)
+ if (G_UNLIKELY (type == (GType)-1))
+ g_error ("can't happen");
+#else
+ G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
+ g_type_ensure (type);
+ G_GNUC_END_IGNORE_DEPRECATIONS;
+#endif
}
+#define g_type_ensure __g_type_ensure
-#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
+#if !GLIB_CHECK_VERSION(2,34,0)
+
+#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); \
+ \
+ _p = *_pp; \
+ if (_p) \
+ { \
+ *_pp = NULL; \
+ _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.
@@ -68,13 +89,6 @@ g_type_ensure (GType type)
* the APIs that we emulate above.
*/
-#define g_type_ensure(t) \
- G_STMT_START { \
- G_GNUC_BEGIN_IGNORE_DEPRECATIONS \
- g_type_ensure (t); \
- G_GNUC_END_IGNORE_DEPRECATIONS \
- } G_STMT_END
-
#define g_test_expect_message(domain, level, format...) \
G_STMT_START { \
G_GNUC_BEGIN_IGNORE_DEPRECATIONS \
@@ -110,4 +124,43 @@ __nmtst_g_test_skip (const gchar *msg)
}
#define g_test_skip __nmtst_g_test_skip
-#endif /* NM_GLIB_COMPAT_H */
+
+/* g_test_add_data_func_full() is only available since glib 2.34. Add a compatibility wrapper. */
+inline static void
+__g_test_add_data_func_full (const char *testpath,
+ gpointer test_data,
+ GTestDataFunc test_func,
+ GDestroyNotify data_free_func)
+{
+#if GLIB_CHECK_VERSION (2, 34, 0)
+ G_GNUC_BEGIN_IGNORE_DEPRECATIONS
+ g_test_add_data_func_full (testpath, test_data, test_func, data_free_func);
+ G_GNUC_END_IGNORE_DEPRECATIONS
+#else
+ g_return_if_fail (testpath != NULL);
+ g_return_if_fail (testpath[0] == '/');
+ g_return_if_fail (test_func != NULL);
+
+ g_test_add_vtable (testpath, 0, test_data, NULL,
+ (GTestFixtureFunc) test_func,
+ (GTestFixtureFunc) data_free_func);
+#endif
+}
+#define g_test_add_data_func_full __g_test_add_data_func_full
+
+
+#if !GLIB_CHECK_VERSION (2, 34, 0)
+#define G_DEFINE_QUARK(QN, q_n) \
+GQuark \
+q_n##_quark (void) \
+{ \
+ static GQuark q; \
+ \
+ if G_UNLIKELY (q == 0) \
+ q = g_quark_from_static_string (#QN); \
+ \
+ return q; \
+}
+#endif
+
+#endif /* __NM_GLIB_COMPAT_H__ */
diff --git a/include/nm-gvaluearray-compat.h b/include/nm-gvaluearray-compat.h
index e26ce3717..f0b4a6cdc 100644
--- a/include/nm-gvaluearray-compat.h
+++ b/include/nm-gvaluearray-compat.h
@@ -1,6 +1,5 @@
/* -*- 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
@@ -18,11 +17,13 @@
* Copyright 2013 Red Hat, Inc.
*/
-#ifndef NM_GVALUEARRAY_COMPAT_H
-#define NM_GVALUEARRAY_COMPAT_H
+#ifndef __NM_GVALUEARRAY_COMPAT_H__
+#define __NM_GVALUEARRAY_COMPAT_H__
#include <glib.h>
+#include "nm-glib-compat.h"
+
#define g_value_array_get_type() \
G_GNUC_EXTENSION ({ \
G_GNUC_BEGIN_IGNORE_DEPRECATIONS \
@@ -104,4 +105,4 @@ __g_value_array_free (GValueArray *value_array)
G_GNUC_END_IGNORE_DEPRECATIONS \
})
-#endif /* NM_GVALUEARRAY_COMPAT_H */
+#endif /* __NM_GVALUEARRAY_COMPAT_H__ */
diff --git a/include/nm-test-utils.h b/include/nm-test-utils.h
index 83c4080fe..dcfa46eba 100644
--- a/include/nm-test-utils.h
+++ b/include/nm-test-utils.h
@@ -1,5 +1,4 @@
/* -*- 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
@@ -16,7 +15,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2014 Red Hat, Inc.
+ * Copyright 2014 Red Hat, Inc.
*/
#ifndef __NM_TEST_UTILS_H__
@@ -34,7 +33,32 @@
#include "nm-utils.h"
#include "nm-glib-compat.h"
+#include "gsystem-local-alloc.h"
+
+
+/*******************************************************************************/
+
+/* general purpose functions that have no dependency on other nmtst functions */
+
+inline static void
+nmtst_assert_error (GError *error,
+ GQuark expect_error_domain,
+ gint expect_error_code,
+ const char *expect_error_pattern)
+{
+ if (expect_error_domain)
+ g_assert_error (error, expect_error_domain, expect_error_code);
+ else
+ g_assert (error);
+ g_assert (error->message);
+ if ( expect_error_pattern
+ && !g_pattern_match_simple (expect_error_pattern, error->message)) {
+ g_error ("error message does not have expected pattern '%s'. Instead it is '%s' (%s, %d)",
+ expect_error_pattern, error->message, g_quark_to_string (error->domain), error->code);
+ }
+}
+/*******************************************************************************/
struct __nmtst_internal
{
@@ -140,7 +164,6 @@ 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;
@@ -243,7 +266,7 @@ __nmtst_init (int *argc, char ***argv, gboolean assert_logging, const char *log_
if (!__nmtst_internal.assert_logging) {
gboolean success = TRUE;
-#ifdef NM_LOGGING_H
+#ifdef __NETWORKMANAGER_LOGGING_H__
success = nm_logging_setup (log_level, log_domains, NULL, NULL);
#endif
g_assert (success);
@@ -276,10 +299,6 @@ __nmtst_init (int *argc, char ***argv, gboolean assert_logging, const char *log_
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));
@@ -292,9 +311,14 @@ __nmtst_init (int *argc, char ***argv, gboolean assert_logging, const char *log_
atexit (nmtst_free);
g_once_init_leave (&atexit_registered, 1);
}
+
+#ifdef __NETWORKMANAGER_UTILS_H__
+ /* ensure that monotonic timestamp is called (because it initially logs a line) */
+ nm_utils_get_monotonic_timestamp_s ();
+#endif
}
-#ifdef NM_LOGGING_H
+#ifdef __NETWORKMANAGER_LOGGING_H__
inline static void
nmtst_init_with_logging (int *argc, char ***argv, const char *log_level, const char *log_domains)
{
@@ -336,14 +360,14 @@ nmtst_is_debug (void)
#endif
inline static GRand *
-nmtst_get_rand0 ()
+nmtst_get_rand0 (void)
{
g_assert (nmtst_initialized ());
return __nmtst_internal.rand0;
}
inline static GRand *
-nmtst_get_rand ()
+nmtst_get_rand (void)
{
g_assert (nmtst_initialized ());
@@ -539,7 +563,7 @@ __nmtst_spawn_sync (const char *working_directory, char **standard_out, char **s
/*******************************************************************************/
-#ifdef NM_PLATFORM_H
+#ifdef __NETWORKMANAGER_PLATFORM_H__
inline static NMPlatformIP6Address *
nmtst_platform_ip6_address (const char *address, const char *peer_address, guint plen)
@@ -556,7 +580,7 @@ nmtst_platform_ip6_address (const char *address, const char *peer_address, guint
inline static NMPlatformIP6Address *
nmtst_platform_ip6_address_full (const char *address, const char *peer_address, guint plen,
- int ifindex, NMPlatformSource source, guint32 timestamp,
+ int ifindex, NMIPConfigSource source, guint32 timestamp,
guint32 lifetime, guint32 preferred, guint flags)
{
NMPlatformIP6Address *addr = nmtst_platform_ip6_address (address, peer_address, plen);
@@ -586,7 +610,7 @@ nmtst_platform_ip6_route (const char *network, guint plen, const char *gateway)
inline static NMPlatformIP6Route *
nmtst_platform_ip6_route_full (const char *network, guint plen, const char *gateway,
- int ifindex, NMPlatformSource source,
+ int ifindex, NMIPConfigSource source,
guint metric, guint mss)
{
NMPlatformIP6Route *route = nmtst_platform_ip6_route (network, plen, gateway);
@@ -644,7 +668,7 @@ nmtst_platform_ip6_routes_equal (const NMPlatformIP6Route *a, const NMPlatformIP
#endif
-#ifdef NM_IP4_CONFIG_H
+#ifdef __NETWORKMANAGER_IP4_CONFIG_H__
inline static NMIP4Config *
nmtst_ip4_config_clone (NMIP4Config *config)
@@ -660,7 +684,7 @@ nmtst_ip4_config_clone (NMIP4Config *config)
#endif
-#ifdef NM_IP6_CONFIG_H
+#ifdef __NETWORKMANAGER_IP6_CONFIG_H__
inline static NMIP6Config *
nmtst_ip6_config_clone (NMIP6Config *config)
@@ -675,6 +699,413 @@ nmtst_ip6_config_clone (NMIP6Config *config)
#endif
+#ifdef __NM_SIMPLE_CONNECTION_H__
-#endif /* __NM_TEST_UTILS_H__ */
+inline static NMConnection *
+nmtst_create_minimal_connection (const char *id, const char *uuid, const char *type, NMSettingConnection **out_s_con)
+{
+ NMConnection *con;
+ NMSetting *s_base = NULL;
+ NMSettingConnection *s_con;
+ gs_free char *uuid_free = NULL;
+
+ g_assert (id);
+
+ if (uuid)
+ g_assert (nm_utils_is_uuid (uuid));
+ else
+ uuid = uuid_free = nm_utils_uuid_generate ();
+
+ if (type) {
+ GType type_g = nm_setting_lookup_type (type);
+
+ g_assert (type_g != G_TYPE_INVALID);
+
+ s_base = g_object_new (type_g, NULL);
+ g_assert (NM_IS_SETTING (s_base));
+ }
+
+ con = nm_simple_connection_new ();
+ s_con = NM_SETTING_CONNECTION (nm_setting_connection_new ());
+
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_ID, id,
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NM_SETTING_CONNECTION_TYPE, type,
+ NULL);
+ nm_connection_add_setting (con, NM_SETTING (s_con));
+
+ if (s_base)
+ nm_connection_add_setting (con, s_base);
+
+ if (out_s_con)
+ *out_s_con = s_con;
+ return con;
+}
+
+inline static gboolean
+_nmtst_connection_normalize_v (NMConnection *connection, va_list args)
+{
+ GError *error = NULL;
+ gboolean success;
+ gboolean was_modified = FALSE;
+ GHashTable *parameters = NULL;
+ const char *p_name;
+
+ g_assert (NM_IS_CONNECTION (connection));
+
+ while ((p_name = va_arg (args, const char *))) {
+ if (!parameters)
+ parameters = g_hash_table_new (g_str_hash, g_str_equal);
+ g_hash_table_insert (parameters, (gpointer *) p_name, va_arg (args, gpointer));
+ }
+
+ success = nm_connection_normalize (connection,
+ parameters,
+ &was_modified,
+ &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ if (parameters)
+ g_hash_table_destroy (parameters);
+
+ return was_modified;
+}
+
+inline static gboolean
+_nmtst_connection_normalize (NMConnection *connection, ...)
+{
+ gboolean was_modified;
+ va_list args;
+
+ va_start (args, connection);
+ was_modified = _nmtst_connection_normalize_v (connection, args);
+ va_end (args);
+
+ return was_modified;
+}
+#define nmtst_connection_normalize(connection, ...) \
+ _nmtst_connection_normalize(connection, ##__VA_ARGS__, NULL)
+
+inline static NMConnection *
+_nmtst_connection_duplicate_and_normalize (NMConnection *connection, ...)
+{
+ gboolean was_modified;
+ va_list args;
+
+ g_assert (NM_IS_CONNECTION (connection));
+
+ connection = nm_simple_connection_new_clone (connection);
+
+ va_start (args, connection);
+ was_modified = _nmtst_connection_normalize_v (connection, args);
+ va_end (args);
+
+ return connection;
+}
+#define nmtst_connection_duplicate_and_normalize(connection, ...) \
+ _nmtst_connection_duplicate_and_normalize(connection, ##__VA_ARGS__, NULL)
+
+inline static void
+nmtst_assert_connection_equals (NMConnection *a, gboolean normalize_a, NMConnection *b, gboolean normalize_b)
+{
+ gboolean compare;
+ gs_unref_object NMConnection *a2 = NULL;
+ gs_unref_object NMConnection *b2 = NULL;
+ GHashTable *out_settings = NULL;
+
+ g_assert (NM_IS_CONNECTION (a));
+ g_assert (NM_IS_CONNECTION (b));
+
+ if (normalize_a)
+ a = a2 = nmtst_connection_duplicate_and_normalize (a);
+ if (normalize_b)
+ b = b2 = nmtst_connection_duplicate_and_normalize (b);
+
+ compare = nm_connection_diff (a, b, NM_SETTING_COMPARE_FLAG_EXACT, &out_settings);
+ if (!compare && out_settings) {
+ const char *name, *pname;
+ GHashTable *setting;
+ GHashTableIter iter, iter2;
+
+ g_hash_table_iter_init (&iter, out_settings);
+ while (g_hash_table_iter_next (&iter, (gpointer *) &name, (gpointer *) &setting)) {
+ __NMTST_LOG (g_message, ">>> differences in setting '%s':", name);
+
+ g_hash_table_iter_init (&iter2, out_settings);
+ while (g_hash_table_iter_next (&iter2, (gpointer *) &pname, NULL))
+ __NMTST_LOG (g_message, ">>> differences in setting '%s.%s':", name, pname);
+ }
+ }
+ g_assert (compare);
+ g_assert (!out_settings);
+
+ compare = nm_connection_compare (a, b, NM_SETTING_COMPARE_FLAG_EXACT);
+ g_assert (compare);
+}
+
+inline static void
+nmtst_assert_connection_verifies_without_normalization (NMConnection *con)
+{
+ /* assert that the connection verifies and does not need any normalization */
+
+ GError *error = NULL;
+ gboolean success;
+ gboolean was_modified = FALSE;
+ gs_unref_object NMConnection *clone = NULL;
+
+ g_assert (NM_IS_CONNECTION (con));
+
+ clone = nm_simple_connection_new_clone (con);
+
+ success = nm_connection_verify (con, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ success = nm_connection_normalize (con, NULL, &was_modified, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+ nmtst_assert_connection_equals (con, FALSE, clone, FALSE);
+ g_assert (!was_modified);
+}
+
+inline static void
+nmtst_assert_connection_verifies_and_normalizable (NMConnection *con)
+{
+ /* assert that the connection does verify, but normalization still modifies it */
+ GError *error = NULL;
+ gboolean success;
+ gboolean was_modified = FALSE;
+
+ g_assert (NM_IS_CONNECTION (con));
+
+ success = nm_connection_verify (con, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+ g_clear_error (&error);
+
+ success = nm_connection_normalize (con, NULL, &was_modified, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+ g_assert (was_modified);
+
+ /* again! */
+ nmtst_assert_connection_verifies_without_normalization (con);
+}
+
+inline static void
+nmtst_assert_connection_verifies_after_normalization (NMConnection *con,
+ GQuark expect_error_domain,
+ gint expect_error_code)
+{
+ /* assert that the connection does not verify, but normalization does fix it */
+ GError *error = NULL;
+ gboolean success;
+ gboolean was_modified = FALSE;
+
+ g_assert (NM_IS_CONNECTION (con));
+
+ success = nm_connection_verify (con, &error);
+ nmtst_assert_error (error, expect_error_domain, expect_error_code, NULL);
+ g_assert (!success);
+ g_clear_error (&error);
+
+ success = nm_connection_normalize (con, NULL, &was_modified, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+ g_assert (was_modified);
+
+ /* again! */
+ nmtst_assert_connection_verifies_without_normalization (con);
+}
+
+inline static void
+nmtst_assert_connection_unnormalizable (NMConnection *con,
+ GQuark expect_error_domain,
+ gint expect_error_code)
+{
+ /* assert that the connection does not verify, and it cannot be fixed by normalization */
+
+ GError *error = NULL;
+ gboolean success;
+ gboolean was_modified = FALSE;
+
+ g_assert (NM_IS_CONNECTION (con));
+
+ success = nm_connection_verify (con, &error);
+ nmtst_assert_error (error, expect_error_domain, expect_error_code, NULL);
+ g_assert (!success);
+ g_clear_error (&error);
+
+ success = nm_connection_normalize (con, NULL, &was_modified, &error);
+ nmtst_assert_error (error, expect_error_domain, expect_error_code, NULL);
+ g_assert (!success);
+ g_assert (!was_modified);
+ g_clear_error (&error);
+}
+
+inline static void
+nmtst_assert_setting_verifies (NMSetting *setting)
+{
+ /* assert that the setting verifies without an error */
+
+ GError *error = NULL;
+ gboolean success;
+
+ g_assert (NM_IS_SETTING (setting));
+
+ success = nm_setting_verify (setting, NULL, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+}
+
+inline static void
+nmtst_assert_setting_verify_fails (NMSetting *setting,
+ GQuark expect_error_domain,
+ gint expect_error_code)
+{
+ /* assert that the setting verification fails */
+
+ GError *error = NULL;
+ gboolean success;
+
+ g_assert (NM_IS_SETTING (setting));
+
+ success = nm_setting_verify (setting, NULL, &error);
+ nmtst_assert_error (error, expect_error_domain, expect_error_code, NULL);
+ g_assert (!success);
+ g_clear_error (&error);
+}
+
+#endif
+
+#ifdef __NM_UTILS_H__
+static inline void
+nmtst_assert_hwaddr_equals (gconstpointer hwaddr1, gssize hwaddr1_len, const char *expected, const char *loc)
+{
+ guint8 buf2[NM_UTILS_HWADDR_LEN_MAX];
+ gsize hwaddr2_len = 1;
+ const char *p;
+ gboolean success;
+
+ g_assert (hwaddr1_len > 0 && hwaddr1_len <= NM_UTILS_HWADDR_LEN_MAX);
+
+ g_assert (expected);
+ for (p = expected; *p; p++) {
+ if (*p == ':' || *p == '-')
+ hwaddr2_len++;
+ }
+ g_assert (hwaddr2_len <= NM_UTILS_HWADDR_LEN_MAX);
+ g_assert (nm_utils_hwaddr_aton (expected, buf2, hwaddr2_len));
+
+ /* Manually check the entire hardware address instead of using
+ * nm_utils_hwaddr_matches() because that function doesn't compare
+ * entire InfiniBand addresses for various (legitimate) reasons.
+ */
+ success = (hwaddr1_len == hwaddr2_len);
+ if (success)
+ success = !memcmp (hwaddr1, buf2, hwaddr1_len);
+ if (!success) {
+ g_error ("assert: %s: hwaddr '%s' (%zd) expected, but got %s (%zd)",
+ loc, expected, hwaddr2_len, nm_utils_hwaddr_ntoa (hwaddr1, hwaddr1_len), hwaddr1_len);
+ }
+}
+#define nmtst_assert_hwaddr_equals(hwaddr1, hwaddr1_len, expected) \
+ nmtst_assert_hwaddr_equals (hwaddr1, hwaddr1_len, expected, G_STRLOC)
+#endif
+
+#ifdef __NM_CONNECTION_H__
+
+typedef enum {
+ NMTST_VARIANT_EDITOR_CONNECTION,
+ NMTST_VARIANT_EDITOR_SETTING,
+ NMTST_VARIANT_EDITOR_PROPERTY
+} NmtstVariantEditorPhase;
+
+#define NMTST_VARIANT_EDITOR(__connection_variant, __code) \
+ G_STMT_START { \
+ GVariantIter __connection_iter, *__setting_iter; \
+ GVariantBuilder __connection_builder, __setting_builder; \
+ const char *__cur_setting_name, *__cur_property_name; \
+ GVariant *__property_val; \
+ NmtstVariantEditorPhase __phase; \
+ \
+ g_variant_builder_init (&__connection_builder, NM_VARIANT_TYPE_CONNECTION); \
+ g_variant_iter_init (&__connection_iter, __connection_variant); \
+ \
+ __phase = NMTST_VARIANT_EDITOR_CONNECTION; \
+ __cur_setting_name = NULL; \
+ __cur_property_name = NULL; \
+ __code; \
+ while (g_variant_iter_next (&__connection_iter, "{&sa{sv}}", &__cur_setting_name, &__setting_iter)) { \
+ g_variant_builder_init (&__setting_builder, NM_VARIANT_TYPE_SETTING); \
+ __phase = NMTST_VARIANT_EDITOR_SETTING; \
+ __cur_property_name = NULL; \
+ __code; \
+ \
+ while ( __cur_setting_name \
+ && g_variant_iter_next (__setting_iter, "{&sv}", &__cur_property_name, &__property_val)) { \
+ __phase = NMTST_VARIANT_EDITOR_PROPERTY; \
+ __code; \
+ \
+ if (__cur_property_name) { \
+ g_variant_builder_add (&__setting_builder, "{sv}", \
+ __cur_property_name, \
+ __property_val); \
+ } else \
+ g_variant_unref (__property_val); \
+ } \
+ \
+ if (__cur_setting_name) \
+ g_variant_builder_add (&__connection_builder, "{sa{sv}}", __cur_setting_name, &__setting_builder); \
+ g_variant_iter_free (__setting_iter); \
+ } \
+ \
+ g_variant_unref (__connection_variant); \
+ \
+ __connection_variant = g_variant_builder_end (&__connection_builder); \
+ } G_STMT_END;
+#define NMTST_VARIANT_ADD_SETTING(__setting_name, __setting_variant) \
+ G_STMT_START { \
+ if (__phase == NMTST_VARIANT_EDITOR_CONNECTION) \
+ g_variant_builder_add (&__connection_builder, "{s@a{sv}}", __setting_name, __setting_variant); \
+ } G_STMT_END
+
+#define NMTST_VARIANT_DROP_SETTING(__setting_name) \
+ G_STMT_START { \
+ if (__phase == NMTST_VARIANT_EDITOR_SETTING && __cur_setting_name) { \
+ if (!strcmp (__cur_setting_name, __setting_name)) \
+ __cur_setting_name = NULL; \
+ } \
+ } G_STMT_END
+
+#define NMTST_VARIANT_ADD_PROPERTY(__setting_name, __property_name, __format_string, __value) \
+ G_STMT_START { \
+ if (__phase == NMTST_VARIANT_EDITOR_SETTING) { \
+ if (!strcmp (__cur_setting_name, __setting_name)) { \
+ g_variant_builder_add (&__setting_builder, "{sv}", __property_name, \
+ g_variant_new (__format_string, __value)); \
+ } \
+ } \
+ } G_STMT_END
+
+#define NMTST_VARIANT_DROP_PROPERTY(__setting_name, __property_name) \
+ G_STMT_START { \
+ if (__phase == NMTST_VARIANT_EDITOR_PROPERTY && __cur_property_name) { \
+ if ( !strcmp (__cur_setting_name, __setting_name) \
+ && !strcmp (__cur_property_name, __property_name)) \
+ __cur_property_name = NULL; \
+ } \
+ } G_STMT_END
+
+#define NMTST_VARIANT_CHANGE_PROPERTY(__setting_name, __property_name, __format_string, __value) \
+ G_STMT_START { \
+ NMTST_VARIANT_DROP_PROPERTY (__setting_name, __property_name); \
+ NMTST_VARIANT_ADD_PROPERTY (__setting_name, __property_name, __format_string, __value); \
+ } G_STMT_END
+
+#endif /* __NM_CONNECTION_H__ */
+
+#endif /* __NM_TEST_UTILS_H__ */
diff --git a/include/nm-utils-internal.h b/include/nm-utils-internal.h
new file mode 100644
index 000000000..c002b6c1e
--- /dev/null
+++ b/include/nm-utils-internal.h
@@ -0,0 +1,103 @@
+/* -*- 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.
+ *
+ * (C) Copyright 2014 Red Hat, Inc.
+ */
+
+#ifndef __NM_UTILS_INTERNAL_H__
+#define __NM_UTILS_INTERNAL_H__
+
+
+#include <glib.h>
+
+/********************************************************/
+
+/* http://stackoverflow.com/a/11172679 */
+#define _NM_UTILS_MACRO_FIRST(...) __NM_UTILS_MACRO_FIRST_HELPER(__VA_ARGS__, throwaway)
+#define __NM_UTILS_MACRO_FIRST_HELPER(first, ...) first
+
+#define _NM_UTILS_MACRO_REST(...) __NM_UTILS_MACRO_REST_HELPER(__NM_UTILS_MACRO_REST_NUM(__VA_ARGS__), __VA_ARGS__)
+#define __NM_UTILS_MACRO_REST_HELPER(qty, ...) __NM_UTILS_MACRO_REST_HELPER2(qty, __VA_ARGS__)
+#define __NM_UTILS_MACRO_REST_HELPER2(qty, ...) __NM_UTILS_MACRO_REST_HELPER_##qty(__VA_ARGS__)
+#define __NM_UTILS_MACRO_REST_HELPER_ONE(first)
+#define __NM_UTILS_MACRO_REST_HELPER_TWOORMORE(first, ...) , __VA_ARGS__
+#define __NM_UTILS_MACRO_REST_NUM(...) \
+ __NM_UTILS_MACRO_REST_SELECT_20TH(__VA_ARGS__, \
+ TWOORMORE, TWOORMORE, TWOORMORE, TWOORMORE, TWOORMORE,\
+ TWOORMORE, TWOORMORE, TWOORMORE, TWOORMORE, TWOORMORE,\
+ TWOORMORE, TWOORMORE, TWOORMORE, TWOORMORE, TWOORMORE,\
+ TWOORMORE, TWOORMORE, TWOORMORE, ONE, throwaway)
+#define __NM_UTILS_MACRO_REST_SELECT_20TH(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, ...) a20
+
+/********************************************************/
+
+#if defined (__GNUC__)
+#define _NM_PRAGMA_WARNING_DO(warning) G_STRINGIFY(GCC diagnostic ignored warning)
+#elif defined (__clang__)
+#define _NM_PRAGMA_WARNING_DO(warning) G_STRINGIFY(clang diagnostic ignored warning)
+#endif
+
+/* you can only suppress a specific warning that the compiler
+ * understands. Otherwise you will get another compiler warning
+ * about invalid pragma option.
+ * It's not that bad however, because gcc and clang often have the
+ * same name for the same warning. */
+
+#if defined (__GNUC__)
+#define NM_PRAGMA_WARNING_DISABLE(warning) \
+ _Pragma("GCC diagnostic push"); \
+ _Pragma(_NM_PRAGMA_WARNING_DO(warning))
+#elif defined (__clang__)
+#define NM_PRAGMA_WARNING_DISABLE(warning) \
+ _Pragma("clang diagnostic push"); \
+ _Pragma(_NM_PRAGMA_WARNING_DO(warning))
+#else
+#define NM_PRAGMA_WARNING_DISABLE(warning)
+#endif
+
+#if defined (__GNUC__)
+#define NM_PRAGMA_WARNING_REENABLE \
+ _Pragma("GCC diagnostic pop")
+#elif defined (__clang__)
+#define NM_PRAGMA_WARNING_REENABLE \
+ _Pragma("clang diagnostic pop")
+#else
+#define NM_PRAGMA_WARNING_REENABLE
+#endif
+
+/********************************************************/
+
+/* macro to return strlen() of a compile time string. */
+#define STRLEN(str) ( sizeof ("" str) - 1 )
+
+#define NM_IN_SET(x, y, ...) \
+ ({ \
+ const typeof(y) _y = (y); \
+ typeof(_y) _x = (x); \
+ unsigned _i; \
+ gboolean _found = FALSE; \
+ for (_i = 0; _i < 1 + sizeof((typeof(_x)[]) { __VA_ARGS__ })/sizeof(typeof(_x)); _i++) { \
+ if (((typeof(_x)[]) { _y, __VA_ARGS__ })[_i] == _x) { \
+ _found = TRUE; \
+ break; \
+ } \
+ } \
+ _found; \
+ })
+
+#endif
diff --git a/introspection/Makefile.am b/introspection/Makefile.am
index 030155791..3cf087339 100644
--- a/introspection/Makefile.am
+++ b/introspection/Makefile.am
@@ -1,40 +1,127 @@
+noinst_LTLIBRARIES = \
+ libnmdbus.la
+
+# gdbus-codegen 2.38 will emit code that requires glib 2.38, which
+# will then cause availability warnings if we define
+# GLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_32.
+#
+# This is fixed in GLib 2.40 (it emits code that takes
+# GLIB_VERSION_MAX_ALLOWED into account), so this workaround can go
+# away when we depend on that.
+AM_CPPFLAGS = $(filter-out -DGLIB_VERSION_MAX_ALLOWED%,$(GLIB_CFLAGS))
+
+nodist_libnmdbus_la_SOURCES = \
+ nmdbus-access-point.c \
+ nmdbus-access-point.h \
+ nmdbus-active-connection.c \
+ nmdbus-active-connection.h \
+ nmdbus-agent-manager.c \
+ nmdbus-agent-manager.h \
+ nmdbus-device-bond.c \
+ nmdbus-device-bond.h \
+ nmdbus-device-bridge.c \
+ nmdbus-device-bridge.h \
+ nmdbus-device-bt.c \
+ nmdbus-device-bt.h \
+ nmdbus-device-ethernet.c \
+ nmdbus-device-ethernet.h \
+ nmdbus-device.c \
+ nmdbus-device.h \
+ nmdbus-device-generic.c \
+ nmdbus-device-generic.h \
+ nmdbus-device-gre.c \
+ nmdbus-device-gre.h \
+ nmdbus-device-infiniband.c \
+ nmdbus-device-infiniband.h \
+ nmdbus-device-macvlan.c \
+ nmdbus-device-macvlan.h \
+ nmdbus-device-tun.c \
+ nmdbus-device-tun.h \
+ nmdbus-device-veth.c \
+ nmdbus-device-veth.h \
+ nmdbus-device-vlan.c \
+ nmdbus-device-vlan.h \
+ nmdbus-device-vxlan.c \
+ nmdbus-device-vxlan.h \
+ nmdbus-device-wifi.c \
+ nmdbus-device-wifi.h \
+ nmdbus-device-wimax.c \
+ nmdbus-device-wimax.h \
+ nmdbus-dhcp4-config.c \
+ nmdbus-dhcp4-config.h \
+ nmdbus-dhcp6-config.c \
+ nmdbus-dhcp6-config.h \
+ nmdbus-ip4-config.c \
+ nmdbus-ip4-config.h \
+ nmdbus-ip6-config.c \
+ nmdbus-ip6-config.h \
+ nmdbus-manager.c \
+ nmdbus-manager.h \
+ nmdbus-ppp-manager.c \
+ nmdbus-ppp-manager.h \
+ nmdbus-secret-agent.c \
+ nmdbus-secret-agent.h \
+ nmdbus-settings-connection.c \
+ nmdbus-settings-connection.h \
+ nmdbus-settings.c \
+ nmdbus-settings.h \
+ nmdbus-vpn-connection.c \
+ nmdbus-vpn-connection.h \
+ nmdbus-vpn-plugin.c \
+ nmdbus-vpn-plugin.h
+
+define _make_nmdbus_rule
+$(1): $(patsubst nmdbus-%.c,nm-%.xml,$(1))
+ $$(AM_V_GEN) gdbus-codegen \
+ --generate-c-code $$(basename $$@) \
+ --c-namespace NMDBus \
+ --interface-prefix org.freedesktop.NetworkManager \
+ $$<
+
+$(basename $(1)).h: $(1)
+ @true
+endef
+
+$(foreach f,$(filter %.c,$(nodist_libnmdbus_la_SOURCES)),$(eval $(call _make_nmdbus_rule,$f)))
+
+CLEANFILES = $(nodist_libnmdbus_la_SOURCES)
+
EXTRA_DIST = \
all.xml.in \
generic-types.xml \
errors.xml \
vpn-errors.xml \
nm-access-point.xml \
- nm-device-bt.xml \
- nm-device-wifi.xml \
- nm-device-olpc-mesh.xml \
- nm-device-ethernet.xml \
+ nm-active-connection.xml \
+ nm-agent-manager.xml \
nm-device-adsl.xml \
- nm-device-modem.xml \
- 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-bt.xml \
+ nm-device-ethernet.xml \
nm-device-generic.xml \
- nm-device-veth.xml \
- nm-device-tun.xml \
+ nm-device-gre.xml \
+ nm-device-infiniband.xml \
nm-device-macvlan.xml \
+ nm-device-modem.xml \
+ nm-device-olpc-mesh.xml \
+ nm-device-team.xml \
+ nm-device-tun.xml \
+ nm-device-veth.xml \
+ nm-device-vlan.xml \
nm-device-vxlan.xml \
- nm-device-gre.xml \
+ nm-device-wifi.xml \
+ nm-device-wimax.xml \
nm-device.xml \
+ nm-dhcp4-config.xml \
+ nm-dhcp6-config.xml \
nm-ip4-config.xml \
nm-ip6-config.xml \
nm-manager.xml \
- nm-settings.xml \
+ nm-ppp-manager.xml \
+ nm-secret-agent.xml \
nm-settings-connection.xml \
- nm-vpn-plugin.xml \
+ nm-settings.xml \
nm-vpn-connection.xml \
- nm-ppp-manager.xml \
- nm-active-connection.xml \
- nm-dhcp4-config.xml \
- nm-dhcp6-config.xml \
- nm-agent-manager.xml \
- nm-wimax-nsp.xml \
- nm-secret-agent.xml
-
+ nm-vpn-plugin.xml \
+ nm-wimax-nsp.xml
diff --git a/introspection/Makefile.in b/introspection/Makefile.in
index 9e6cc901b..f31fafcc1 100644
--- a/introspection/Makefile.in
+++ b/introspection/Makefile.in
@@ -13,6 +13,7 @@
# PARTICULAR PURPOSE.
@SET_MAKE@
+
VPATH = @srcdir@
am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
am__make_running_with_option = \
@@ -79,7 +80,7 @@ build_triplet = @build@
host_triplet = @host@
subdir = introspection
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
- $(srcdir)/all.xml.in
+ $(srcdir)/all.xml.in $(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 \
@@ -100,6 +101,27 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES = all.xml
CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libnmdbus_la_LIBADD =
+nodist_libnmdbus_la_OBJECTS = nmdbus-access-point.lo \
+ nmdbus-active-connection.lo nmdbus-agent-manager.lo \
+ nmdbus-device-bond.lo nmdbus-device-bridge.lo \
+ nmdbus-device-bt.lo nmdbus-device-ethernet.lo nmdbus-device.lo \
+ nmdbus-device-generic.lo nmdbus-device-gre.lo \
+ nmdbus-device-infiniband.lo nmdbus-device-macvlan.lo \
+ nmdbus-device-tun.lo nmdbus-device-veth.lo \
+ nmdbus-device-vlan.lo nmdbus-device-vxlan.lo \
+ nmdbus-device-wifi.lo nmdbus-device-wimax.lo \
+ nmdbus-dhcp4-config.lo nmdbus-dhcp6-config.lo \
+ nmdbus-ip4-config.lo nmdbus-ip6-config.lo nmdbus-manager.lo \
+ nmdbus-ppp-manager.lo nmdbus-secret-agent.lo \
+ nmdbus-settings-connection.lo nmdbus-settings.lo \
+ nmdbus-vpn-connection.lo nmdbus-vpn-plugin.lo
+libnmdbus_la_OBJECTS = $(nodist_libnmdbus_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
@@ -112,7 +134,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 =
-SOURCES =
+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 = $(nodist_libnmdbus_la_SOURCES)
DIST_SOURCES =
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
@@ -120,6 +164,24 @@ am__can_run_installinfo = \
*) (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@
@@ -130,6 +192,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -253,6 +317,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -272,6 +337,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -298,7 +364,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -377,49 +443,123 @@ with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
with_valgrind = @with_valgrind@
+noinst_LTLIBRARIES = \
+ libnmdbus.la
+
+
+# gdbus-codegen 2.38 will emit code that requires glib 2.38, which
+# will then cause availability warnings if we define
+# GLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_32.
+#
+# This is fixed in GLib 2.40 (it emits code that takes
+# GLIB_VERSION_MAX_ALLOWED into account), so this workaround can go
+# away when we depend on that.
+AM_CPPFLAGS = $(filter-out -DGLIB_VERSION_MAX_ALLOWED%,$(GLIB_CFLAGS))
+nodist_libnmdbus_la_SOURCES = \
+ nmdbus-access-point.c \
+ nmdbus-access-point.h \
+ nmdbus-active-connection.c \
+ nmdbus-active-connection.h \
+ nmdbus-agent-manager.c \
+ nmdbus-agent-manager.h \
+ nmdbus-device-bond.c \
+ nmdbus-device-bond.h \
+ nmdbus-device-bridge.c \
+ nmdbus-device-bridge.h \
+ nmdbus-device-bt.c \
+ nmdbus-device-bt.h \
+ nmdbus-device-ethernet.c \
+ nmdbus-device-ethernet.h \
+ nmdbus-device.c \
+ nmdbus-device.h \
+ nmdbus-device-generic.c \
+ nmdbus-device-generic.h \
+ nmdbus-device-gre.c \
+ nmdbus-device-gre.h \
+ nmdbus-device-infiniband.c \
+ nmdbus-device-infiniband.h \
+ nmdbus-device-macvlan.c \
+ nmdbus-device-macvlan.h \
+ nmdbus-device-tun.c \
+ nmdbus-device-tun.h \
+ nmdbus-device-veth.c \
+ nmdbus-device-veth.h \
+ nmdbus-device-vlan.c \
+ nmdbus-device-vlan.h \
+ nmdbus-device-vxlan.c \
+ nmdbus-device-vxlan.h \
+ nmdbus-device-wifi.c \
+ nmdbus-device-wifi.h \
+ nmdbus-device-wimax.c \
+ nmdbus-device-wimax.h \
+ nmdbus-dhcp4-config.c \
+ nmdbus-dhcp4-config.h \
+ nmdbus-dhcp6-config.c \
+ nmdbus-dhcp6-config.h \
+ nmdbus-ip4-config.c \
+ nmdbus-ip4-config.h \
+ nmdbus-ip6-config.c \
+ nmdbus-ip6-config.h \
+ nmdbus-manager.c \
+ nmdbus-manager.h \
+ nmdbus-ppp-manager.c \
+ nmdbus-ppp-manager.h \
+ nmdbus-secret-agent.c \
+ nmdbus-secret-agent.h \
+ nmdbus-settings-connection.c \
+ nmdbus-settings-connection.h \
+ nmdbus-settings.c \
+ nmdbus-settings.h \
+ nmdbus-vpn-connection.c \
+ nmdbus-vpn-connection.h \
+ nmdbus-vpn-plugin.c \
+ nmdbus-vpn-plugin.h
+
+CLEANFILES = $(nodist_libnmdbus_la_SOURCES)
EXTRA_DIST = \
all.xml.in \
generic-types.xml \
errors.xml \
vpn-errors.xml \
nm-access-point.xml \
- nm-device-bt.xml \
- nm-device-wifi.xml \
- nm-device-olpc-mesh.xml \
- nm-device-ethernet.xml \
+ nm-active-connection.xml \
+ nm-agent-manager.xml \
nm-device-adsl.xml \
- nm-device-modem.xml \
- 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-bt.xml \
+ nm-device-ethernet.xml \
nm-device-generic.xml \
- nm-device-veth.xml \
- nm-device-tun.xml \
+ nm-device-gre.xml \
+ nm-device-infiniband.xml \
nm-device-macvlan.xml \
+ nm-device-modem.xml \
+ nm-device-olpc-mesh.xml \
+ nm-device-team.xml \
+ nm-device-tun.xml \
+ nm-device-veth.xml \
+ nm-device-vlan.xml \
nm-device-vxlan.xml \
- nm-device-gre.xml \
+ nm-device-wifi.xml \
+ nm-device-wimax.xml \
nm-device.xml \
+ nm-dhcp4-config.xml \
+ nm-dhcp6-config.xml \
nm-ip4-config.xml \
nm-ip6-config.xml \
nm-manager.xml \
- nm-settings.xml \
+ nm-ppp-manager.xml \
+ nm-secret-agent.xml \
nm-settings-connection.xml \
- nm-vpn-plugin.xml \
+ nm-settings.xml \
nm-vpn-connection.xml \
- nm-ppp-manager.xml \
- nm-active-connection.xml \
- nm-dhcp4-config.xml \
- nm-dhcp6-config.xml \
- nm-agent-manager.xml \
- nm-wimax-nsp.xml \
- nm-secret-agent.xml
+ nm-vpn-plugin.xml \
+ nm-wimax-nsp.xml
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 \
@@ -453,17 +593,134 @@ $(am__aclocal_m4_deps):
all.xml: $(top_builddir)/config.status $(srcdir)/all.xml.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+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}; \
+ }
+
+libnmdbus.la: $(libnmdbus_la_OBJECTS) $(libnmdbus_la_DEPENDENCIES) $(EXTRA_libnmdbus_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libnmdbus_la_OBJECTS) $(libnmdbus_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmdbus-access-point.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmdbus-active-connection.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmdbus-agent-manager.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmdbus-device-bond.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmdbus-device-bridge.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmdbus-device-bt.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmdbus-device-ethernet.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmdbus-device-generic.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmdbus-device-gre.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmdbus-device-infiniband.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmdbus-device-macvlan.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmdbus-device-tun.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmdbus-device-veth.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmdbus-device-vlan.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmdbus-device-vxlan.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmdbus-device-wifi.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmdbus-device-wimax.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmdbus-device.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmdbus-dhcp4-config.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmdbus-dhcp6-config.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmdbus-ip4-config.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmdbus-ip6-config.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmdbus-manager.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmdbus-ppp-manager.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmdbus-secret-agent.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmdbus-settings-connection.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmdbus-settings.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmdbus-vpn-connection.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nmdbus-vpn-plugin.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 $@ $<
+
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
-tags TAGS:
-
-ctags CTAGS:
-cscope cscopelist:
+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'`; \
@@ -497,7 +754,7 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-am
-all-am: Makefile
+all-am: Makefile $(LTLIBRARIES)
installdirs:
install: install-am
install-exec: install-exec-am
@@ -521,6 +778,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)
@@ -531,11 +789,14 @@ maintainer-clean-generic:
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
-clean-am: clean-generic clean-libtool mostlyclean-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-generic
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
dvi: dvi-am
@@ -578,12 +839,14 @@ 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-generic mostlyclean-libtool
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
pdf: pdf-am
@@ -597,18 +860,34 @@ 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 \
+.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-am uninstall uninstall-am
+ tags tags-am uninstall uninstall-am
+
+
+define _make_nmdbus_rule
+$(1): $(patsubst nmdbus-%.c,nm-%.xml,$(1))
+ $$(AM_V_GEN) gdbus-codegen \
+ --generate-c-code $$(basename $$@) \
+ --c-namespace NMDBus \
+ --interface-prefix org.freedesktop.NetworkManager \
+ $$<
+
+$(basename $(1)).h: $(1)
+ @true
+endef
+$(foreach f,$(filter %.c,$(nodist_libnmdbus_la_SOURCES)),$(eval $(call _make_nmdbus_rule,$f)))
# 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/introspection/nm-device-ethernet.xml b/introspection/nm-device-ethernet.xml
index 000caf752..2554bda17 100644
--- a/introspection/nm-device-ethernet.xml
+++ b/introspection/nm-device-ethernet.xml
@@ -2,6 +2,7 @@
<node name="/" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
<interface name="org.freedesktop.NetworkManager.Device.Wired">
+ <annotation name="org.gtk.GDBus.C.Name" value="DeviceEthernet"/>
<property name="HwAddress" type="s" access="read">
<tp:docstring>
diff --git a/introspection/nm-device-vlan.xml b/introspection/nm-device-vlan.xml
index 54b7bbe48..992340e00 100644
--- a/introspection/nm-device-vlan.xml
+++ b/introspection/nm-device-vlan.xml
@@ -15,6 +15,12 @@
</tp:docstring>
</property>
+ <property name="Parent" type="o" access="read">
+ <tp:docstring>
+ Object path of the parent device of this VLAN device.
+ </tp:docstring>
+ </property>
+
<property name="VlanId" type="u" access="read">
<tp:docstring>
The VLAN ID of this VLAN interface.
diff --git a/introspection/nm-device-wifi.xml b/introspection/nm-device-wifi.xml
index 65c7b71dc..2476fd7dd 100644
--- a/introspection/nm-device-wifi.xml
+++ b/introspection/nm-device-wifi.xml
@@ -2,6 +2,8 @@
<node name="/" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
<interface name="org.freedesktop.NetworkManager.Device.Wireless">
+ <annotation name="org.gtk.GDBus.C.Name" value="DeviceWifi"/>
+
<method name="GetAccessPoints">
<annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_device_get_access_points"/>
<arg name="access_points" type="ao" direction="out">
diff --git a/introspection/nm-device.xml b/introspection/nm-device.xml
index f459bce4f..0c2a330c0 100644
--- a/introspection/nm-device.xml
+++ b/introspection/nm-device.xml
@@ -106,7 +106,8 @@
If TRUE, indicates the device is allowed to autoconnect. If FALSE,
manual intervention is required before the device will automatically
connect to a known network, such as activating a connection using the
- device, or setting this property to TRUE.
+ device, or setting this property to TRUE. This property cannot be
+ set to TRUE for default-unmanaged devices, since they never autoconnect.
</tp:docstring>
</property>
<property name="FirmwareMissing" type="b" access="read">
@@ -147,6 +148,15 @@
</tp:docstring>
</method>
+ <method name="Delete">
+ <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_device_delete"/>
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <tp:docstring>
+ Deletes a software device from NetworkManager and removes the interface from the system.
+ The method returns an error when called for a hardware device.
+ </tp:docstring>
+ </method>
+
<signal name="StateChanged">
<arg name="new_state" type="u" tp:type="NM_DEVICE_STATE">
<tp:docstring>
diff --git a/introspection/nm-ip4-config.xml b/introspection/nm-ip4-config.xml
index 6a8750b7f..980765349 100644
--- a/introspection/nm-ip4-config.xml
+++ b/introspection/nm-ip4-config.xml
@@ -2,20 +2,42 @@
<node name="/" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
<interface name="org.freedesktop.NetworkManager.IP4Config">
+ <property name="Addresses" type="aau" access="read">
+ <tp:docstring>
+ Array of arrays of IPv4 address/prefix/gateway. All 3
+ elements of each array are in network byte order. Essentially:
+ [(addr, prefix, gateway), (addr, prefix, gateway), ...]
+
+ Deprecated: use AddressData and Gateway
+ </tp:docstring>
+ </property>
+ <property name="AddressData" type="aa{sv}" access="read">
+ <tp:docstring>
+ Array of IP address data objects. All addresses will include
+ "address" (an IP address string), and "prefix" (a uint). Some
+ addresses may include additional attributes.
+ </tp:docstring>
+ </property>
<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), ...]
+ <property name="Routes" type="aau" access="read">
+ <tp:docstring>
+ Arrays 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), ...]
+
+ Deprecated: use RouteData
</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
- addresses, while prefix and metric are simple unsigned integers. Essentially:
- [(route, prefix, next-hop, metric), (route, prefix, next-hop, metric), ...]
+ <property name="RouteData" type="aa{sv}" access="read">
+ <tp:docstring>
+ Array of IP route data objects. All routes will include "dest"
+ (an IP address string) and "prefix" (a uint). Some routes may
+ include "next-hop" (an IP address string), "metric" (a uint),
+ and additional attributes.
</tp:docstring>
</property>
<property name="Nameservers" type="au" access="read">
diff --git a/introspection/nm-ip6-config.xml b/introspection/nm-ip6-config.xml
index 55c519e70..985dd2e33 100644
--- a/introspection/nm-ip6-config.xml
+++ b/introspection/nm-ip6-config.xml
@@ -2,14 +2,37 @@
<node name="/" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
<interface name="org.freedesktop.NetworkManager.IP6Config">
+ <property name="Addresses" type="a(ayuay)" access="read">
+ <tp:docstring>
+ Array of tuples of IPv6 address/prefix/gateway.
+
+ Deprecated: use AddressData and Gateway.
+ </tp:docstring>
+ </property>
+ <property name="AddressData" type="aa{sv}" access="read">
+ <tp:docstring>
+ Array of IP address data objects. All addresses will include
+ "address" (an IP address string), and "prefix" (a uint). Some
+ addresses may include additional attributes.
+ </tp:docstring>
+ </property>
<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>
+ <tp:docstring>
+ Tuples of IPv6 route/prefix/next-hop/metric.
+
+ Deprecated: use RouteData
+ </tp:docstring>
+ </property>
+ <property name="RouteData" type="aa{sv}" access="read">
+ <tp:docstring>
+ Array of IP route data objects. All routes will include "dest"
+ (an IP address string) and "prefix" (a uint). Some routes may
+ include "next-hop" (an IP address string), "metric" (a uint),
+ and additional attributes.
+ </tp:docstring>
</property>
<property name="Nameservers" type="aay" access="read">
<tp:docstring>The nameservers in use.</tp:docstring>
diff --git a/introspection/nm-manager.xml b/introspection/nm-manager.xml
index 6af2be303..a9bb6dcf1 100644
--- a/introspection/nm-manager.xml
+++ b/introspection/nm-manager.xml
@@ -2,6 +2,8 @@
<node name="/org/freedesktop/NetworkManager" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
<interface name="org.freedesktop.NetworkManager">
+ <annotation name="org.gtk.GDBus.C.Name" value="Manager"/>
+
<method name="GetDevices">
<tp:docstring>
Get the list of network devices.
@@ -71,16 +73,6 @@
The path of the active connection object representing this active connection.
</tp:docstring>
</arg>
- <tp:possible-errors>
- <tp:error name="org.freedesktop.NetworkManager.Error.UnknownConnection"/>
- <tp:error name="org.freedesktop.NetworkManager.Error.UnknownDevice"/>
- <tp:error name="org.freedesktop.NetworkManager.Error.ConnectionActivating">
- <tp:docstring>Another connection is already activating or the same connection is already active. FIXME: check if the error name is correct. FIXME: split into 2 errors?</tp:docstring>
- </tp:error>
- <tp:error name="org.freedesktop.NetworkManager.Error.ConnectionInvalid">
- <tp:docstring>The connection is invalid for this device.</tp:docstring>
- </tp:error>
- </tp:possible-errors>
</method>
<method name="AddAndActivateConnection">
@@ -123,13 +115,6 @@
The path of the active connection object representing this active connection.
</tp:docstring>
</arg>
- <tp:possible-errors>
- <tp:error name="org.freedesktop.NetworkManager.Error.UnknownConnection"/>
- <tp:error name="org.freedesktop.NetworkManager.Error.UnknownDevice"/>
- <tp:error name="org.freedesktop.NetworkManager.Error.ConnectionInvalid">
- <tp:docstring>The connection is invalid for this device.</tp:docstring>
- </tp:error>
- </tp:possible-errors>
</method>
<method name="DeactivateConnection">
@@ -215,7 +200,7 @@
</tp:docstring>
<arg name="level" type="s" direction="in">
<tp:docstring>
- One of [ERR, WARN, INFO, DEBUG].
+ One of [ERR, WARN, INFO, DEBUG, TRACE].
</tp:docstring>
</arg>
<arg name="domains" type="s" direction="in">
@@ -244,7 +229,7 @@
</tp:docstring>
<arg name="level" type="s" direction="out">
<tp:docstring>
- One of [ERR, WARN, INFO, DEBUG].
+ One of [ERR, WARN, INFO, DEBUG, TRACE].
</tp:docstring>
</arg>
<arg name="domains" type="s" direction="out">
@@ -342,6 +327,14 @@
</tp:docstring>
</property>
+ <property name="PrimaryConnectionType" type="s" access="read">
+ <tp:docstring>
+ The connection type of the "primary" active connection being
+ used to access the network. This is the same as the Type
+ property on the object indicated by PrimaryConnection.
+ </tp:docstring>
+ </property>
+
<property name="ActivatingConnection" type="o" access="read">
<tp:docstring>
The object path of an active connection that is currently
diff --git a/introspection/nm-ppp-manager.xml b/introspection/nm-ppp-manager.xml
index 9e2dfdb1c..5ea1e8b16 100644
--- a/introspection/nm-ppp-manager.xml
+++ b/introspection/nm-ppp-manager.xml
@@ -2,6 +2,8 @@
<node name="/">
<interface name="org.freedesktop.NetworkManager.PPP">
+ <annotation name="org.gtk.GDBus.C.Name" value="PPP_Manager"/>
+
<method name="NeedSecrets">
<annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_ppp_manager_need_secrets"/>
<annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
@@ -14,6 +16,11 @@
<arg name="config" type="a{sv}" direction="in"/>
</method>
+ <method name="SetIp6Config">
+ <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_ppp_manager_set_ip6_config"/>
+ <arg name="config" type="a{sv}" direction="in"/>
+ </method>
+
<method name="SetState">
<annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_ppp_manager_set_state"/>
<arg name="state" type="u" direction="in"/>
diff --git a/introspection/nm-settings-connection.xml b/introspection/nm-settings-connection.xml
index b5bd2cd0e..b02762d6b 100644
--- a/introspection/nm-settings-connection.xml
+++ b/introspection/nm-settings-connection.xml
@@ -93,6 +93,14 @@
</arg>
</method>
+ <method name="ClearSecrets">
+ <tp:docstring>
+ Clear the secrets belonging to this network connection profile.
+ </tp:docstring>
+ <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_settings_connection_clear_secrets"/>
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ </method>
+
<method name="Save">
<tp:docstring>
Saves a "dirty" connection (that had previously been
diff --git a/introspection/nm-vpn-connection.xml b/introspection/nm-vpn-connection.xml
index 65b917854..03bbbe980 100644
--- a/introspection/nm-vpn-connection.xml
+++ b/introspection/nm-vpn-connection.xml
@@ -2,6 +2,8 @@
<node name="/" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
<interface name="org.freedesktop.NetworkManager.VPN.Connection">
+ <annotation name="org.gtk.GDBus.C.Name" value="VpnConnection"/>
+
<tp:docstring>
Represents an active connection to a Virtual Private Network.
</tp:docstring>
diff --git a/introspection/nm-vpn-plugin.xml b/introspection/nm-vpn-plugin.xml
index 07397c2b9..adb6a0852 100644
--- a/introspection/nm-vpn-plugin.xml
+++ b/introspection/nm-vpn-plugin.xml
@@ -2,6 +2,8 @@
<node name="/" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
<interface name="org.freedesktop.NetworkManager.VPN.Plugin">
+ <annotation name="org.gtk.GDBus.C.Name" value="VpnPlugin"/>
+
<tp:docstring>
This interface is provided by plugins providing VPN services to the NetworkManager daemon.
</tp:docstring>
@@ -137,7 +139,7 @@
</arg>
</method>
- <property name="State" type="u" access="read" tp:type="NM_VPN_CONNECTION_STATE">
+ <property name="State" type="u" access="read" tp:type="NM_VPN_SERVICE_STATE">
<tp:docstring>
The state of the plugin.
</tp:docstring>
@@ -147,7 +149,7 @@
<tp:docstring>
Emitted when the plugin state changes.
</tp:docstring>
- <arg name="state" type="u" tp:type="NM_VPN_CONNECTION_STATE">
+ <arg name="state" type="u" tp:type="NM_VPN_SERVICE_STATE">
<tp:docstring>
The new state of the plugin.
</tp:docstring>
@@ -251,6 +253,44 @@
</arg>
</signal>
+ <tp:enum name="NM_VPN_SERVICE_STATE" type="u">
+ <tp:enumvalue suffix="UNKNOWN" value="0">
+ <tp:docstring>
+ The state of the VPN plugin is unknown.
+ </tp:docstring>
+ </tp:enumvalue>
+ <tp:enumvalue suffix="INIT" value="1">
+ <tp:docstring>
+ The VPN plugin is initialized.
+ </tp:docstring>
+ </tp:enumvalue>
+ <tp:enumvalue suffix="SHUTDOWN" value="2">
+ <tp:docstring>
+ (Not used.)
+ </tp:docstring>
+ </tp:enumvalue>
+ <tp:enumvalue suffix="STARTING" value="3">
+ <tp:docstring>
+ The plugin is attempting to connect to a VPN server.
+ </tp:docstring>
+ </tp:enumvalue>
+ <tp:enumvalue suffix="STARTED" value="4">
+ <tp:docstring>
+ The plugin has connected to a VPN server.
+ </tp:docstring>
+ </tp:enumvalue>
+ <tp:enumvalue suffix="STOPPING" value="5">
+ <tp:docstring>
+ The plugin is disconnecting from the VPN server.
+ </tp:docstring>
+ </tp:enumvalue>
+ <tp:enumvalue suffix="STOPPED" value="6">
+ <tp:docstring>
+ The plugin has disconnected from the VPN server.
+ </tp:docstring>
+ </tp:enumvalue>
+ </tp:enum>
+
<tp:enum name="NM_VPN_PLUGIN_FAILURE" type="u">
<tp:enumvalue suffix="LOGIN_FAILED" value="0">
<tp:docstring>
diff --git a/libgsystem/COPYING b/libgsystem/COPYING
deleted file mode 100644
index 5bc8fb2c8..000000000
--- a/libgsystem/COPYING
+++ /dev/null
@@ -1,481 +0,0 @@
- 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
deleted file mode 100644
index 092522c73..000000000
--- a/libgsystem/Makefile-libgsystem.am
+++ /dev/null
@@ -1,42 +0,0 @@
-# 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
deleted file mode 100644
index 13fa05f29..000000000
--- a/libgsystem/README
+++ /dev/null
@@ -1,10 +0,0 @@
-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
deleted file mode 100644
index 35477ebaf..000000000
--- a/libgsystem/gsystem-console.c
+++ /dev/null
@@ -1,443 +0,0 @@
-/* -*- 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
deleted file mode 100644
index a22b2d45a..000000000
--- a/libgsystem/gsystem-console.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* -*- 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
deleted file mode 100644
index 026060353..000000000
--- a/libgsystem/gsystem-file-utils.c
+++ /dev/null
@@ -1,1644 +0,0 @@
-/* -*- 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
deleted file mode 100644
index 021aebb73..000000000
--- a/libgsystem/gsystem-file-utils.h
+++ /dev/null
@@ -1,172 +0,0 @@
-/* -*- 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
deleted file mode 100644
index 6fd59c655..000000000
--- a/libgsystem/gsystem-glib-compat.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* -*- 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
deleted file mode 100644
index add3fcb37..000000000
--- a/libgsystem/gsystem-local-alloc.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/* -*- 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-log.c b/libgsystem/gsystem-log.c
deleted file mode 100644
index 7b0314539..000000000
--- a/libgsystem/gsystem-log.c
+++ /dev/null
@@ -1,167 +0,0 @@
-/* -*- 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
deleted file mode 100644
index 80cfc3414..000000000
--- a/libgsystem/gsystem-log.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* -*- 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
deleted file mode 100644
index 8029dd9cd..000000000
--- a/libgsystem/gsystem-shutil.c
+++ /dev/null
@@ -1,460 +0,0 @@
-/* -*- 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
deleted file mode 100644
index 3cdea778d..000000000
--- a/libgsystem/gsystem-shutil.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/* -*- 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
deleted file mode 100644
index 719df4516..000000000
--- a/libgsystem/gsystem-subprocess-context-private.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/* 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
deleted file mode 100644
index 90ca7167a..000000000
--- a/libgsystem/gsystem-subprocess-context.c
+++ /dev/null
@@ -1,501 +0,0 @@
-/* -*- 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
deleted file mode 100644
index b8a24012a..000000000
--- a/libgsystem/gsystem-subprocess-context.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/* -*- 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
deleted file mode 100644
index 4ec680f80..000000000
--- a/libgsystem/gsystem-subprocess.c
+++ /dev/null
@@ -1,966 +0,0 @@
-/* -*- 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
deleted file mode 100644
index f248f7ba4..000000000
--- a/libgsystem/gsystem-subprocess.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/* -*- 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
deleted file mode 100644
index 60884b652..000000000
--- a/libgsystem/libgsystem.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* -*- 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-core/Makefile.am b/libnm-core/Makefile.am
new file mode 100644
index 000000000..8fab84bcb
--- /dev/null
+++ b/libnm-core/Makefile.am
@@ -0,0 +1,48 @@
+include $(GLIB_MAKEFILE)
+
+SUBDIRS = . tests
+
+AM_CPPFLAGS = \
+ -I${top_srcdir}/include \
+ -DG_LOG_DOMAIN=\""libnm"\" \
+ -DLOCALEDIR=\"$(datadir)/locale\" \
+ -DNETWORKMANAGER_COMPILATION \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ $(GLIB_CFLAGS)
+
+noinst_LTLIBRARIES = libnm-core.la
+
+# header/source defines are in Makefile.libnm-core, so they can be shared
+# with libnm/Makefile.am
+include Makefile.libnm-core
+
+libnmincludedir = $(includedir)/libnm
+
+libnminclude_HEADERS = $(libnm_core_headers)
+libnm_core_la_SOURCES = \
+ $(libnm_core_sources) \
+ $(libnm_core_private_headers)
+
+GLIB_GENERATED = nm-core-enum-types.h nm-core-enum-types.c
+nm_core_enum_types_sources = $(notdir $(libnminclude_HEADERS))
+GLIB_MKENUMS_H_FLAGS = --identifier-prefix NM
+GLIB_MKENUMS_C_FLAGS = --identifier-prefix NM
+
+libnm_core_la_LIBADD = \
+ $(GLIB_LIBS) \
+ $(UUID_LIBS)
+
+if WITH_GNUTLS
+AM_CPPFLAGS += $(LIBGCRYPT_CFLAGS) $(GNUTLS_CFLAGS)
+libnm_core_la_SOURCES += crypto_gnutls.c
+libnm_core_la_LIBADD += $(LIBGCRYPT_LIBS) $(GNUTLS_LIBS)
+endif
+
+if WITH_NSS
+AM_CPPFLAGS += $(NSS_CFLAGS)
+libnm_core_la_SOURCES += crypto_nss.c
+libnm_core_la_LIBADD += $(NSS_LIBS)
+endif
+
+BUILT_SOURCES = $(GLIB_GENERATED)
+CLEANFILES = $(BUILT_SOURCES)
diff --git a/libnm-core/Makefile.in b/libnm-core/Makefile.in
new file mode 100644
index 000000000..8ec1414e3
--- /dev/null
+++ b/libnm-core/Makefile.in
@@ -0,0 +1,1350 @@
+# 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@
+
+# In order for this to work correctly from both libnm-core/ and libnm/,
+# we have to specify full pathnames. (We can't just use $(addprefix) from
+# libnm/, because that's incompatible with the Makefile.introspection rules.)
+
+
+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@
+DIST_COMMON = $(srcdir)/Makefile.libnm-core $(srcdir)/Makefile.in \
+ $(srcdir)/Makefile.am $(srcdir)/nm-version.h.in \
+ $(top_srcdir)/build-aux/depcomp $(libnminclude_HEADERS)
+@WITH_GNUTLS_TRUE@am__append_1 = $(LIBGCRYPT_CFLAGS) $(GNUTLS_CFLAGS)
+@WITH_GNUTLS_TRUE@am__append_2 = crypto_gnutls.c
+@WITH_GNUTLS_TRUE@am__append_3 = $(LIBGCRYPT_LIBS) $(GNUTLS_LIBS)
+@WITH_NSS_TRUE@am__append_4 = $(NSS_CFLAGS)
+@WITH_NSS_TRUE@am__append_5 = crypto_nss.c
+@WITH_NSS_TRUE@am__append_6 = $(NSS_LIBS)
+subdir = libnm-core
+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 = nm-version.h
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+@WITH_GNUTLS_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) \
+@WITH_GNUTLS_TRUE@ $(am__DEPENDENCIES_1)
+@WITH_NSS_TRUE@am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1)
+libnm_core_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \
+ $(am__DEPENDENCIES_3)
+am__libnm_core_la_SOURCES_DIST = $(core_build)/nm-core-enum-types.c \
+ $(core)/crypto.c $(core)/nm-connection.c $(core)/nm-errors.c \
+ $(core)/nm-property-compare.c $(core)/nm-setting-8021x.c \
+ $(core)/nm-setting-adsl.c $(core)/nm-setting-bluetooth.c \
+ $(core)/nm-setting-bond.c $(core)/nm-setting-bridge-port.c \
+ $(core)/nm-setting-bridge.c $(core)/nm-setting-cdma.c \
+ $(core)/nm-setting-connection.c $(core)/nm-setting-dcb.c \
+ $(core)/nm-setting-generic.c $(core)/nm-setting-gsm.c \
+ $(core)/nm-setting-infiniband.c $(core)/nm-setting-ip-config.c \
+ $(core)/nm-setting-ip4-config.c \
+ $(core)/nm-setting-ip6-config.c $(core)/nm-setting-olpc-mesh.c \
+ $(core)/nm-setting-ppp.c $(core)/nm-setting-pppoe.c \
+ $(core)/nm-setting-serial.c $(core)/nm-setting-team-port.c \
+ $(core)/nm-setting-team.c $(core)/nm-setting-vlan.c \
+ $(core)/nm-setting-vpn.c $(core)/nm-setting-wimax.c \
+ $(core)/nm-setting-wired.c \
+ $(core)/nm-setting-wireless-security.c \
+ $(core)/nm-setting-wireless.c $(core)/nm-setting.c \
+ $(core)/nm-simple-connection.c $(core)/nm-utils.c \
+ $(core)/crypto.h $(core)/nm-connection-private.h \
+ $(core)/nm-core-internal.h $(core)/nm-property-compare.h \
+ $(core)/nm-setting-private.h $(core)/nm-utils-private.h \
+ crypto_gnutls.c crypto_nss.c
+am__objects_1 = nm-core-enum-types.lo crypto.lo nm-connection.lo \
+ nm-errors.lo nm-property-compare.lo nm-setting-8021x.lo \
+ nm-setting-adsl.lo nm-setting-bluetooth.lo nm-setting-bond.lo \
+ nm-setting-bridge-port.lo nm-setting-bridge.lo \
+ nm-setting-cdma.lo nm-setting-connection.lo nm-setting-dcb.lo \
+ nm-setting-generic.lo nm-setting-gsm.lo \
+ nm-setting-infiniband.lo nm-setting-ip-config.lo \
+ nm-setting-ip4-config.lo nm-setting-ip6-config.lo \
+ nm-setting-olpc-mesh.lo nm-setting-ppp.lo nm-setting-pppoe.lo \
+ nm-setting-serial.lo nm-setting-team-port.lo \
+ nm-setting-team.lo nm-setting-vlan.lo nm-setting-vpn.lo \
+ nm-setting-wimax.lo nm-setting-wired.lo \
+ nm-setting-wireless-security.lo nm-setting-wireless.lo \
+ nm-setting.lo nm-simple-connection.lo nm-utils.lo
+am__objects_2 =
+@WITH_GNUTLS_TRUE@am__objects_3 = crypto_gnutls.lo
+@WITH_NSS_TRUE@am__objects_4 = crypto_nss.lo
+am_libnm_core_la_OBJECTS = $(am__objects_1) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
+libnm_core_la_OBJECTS = $(am_libnm_core_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 = $(libnm_core_la_SOURCES)
+DIST_SOURCES = $(am__libnm_core_la_SOURCES_DIST)
+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
+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)$(libnmincludedir)"
+HEADERS = $(libnminclude_HEADERS)
+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@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
+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_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
+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@
+PERL = @PERL@
+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_DIR = @UDEV_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
+AM_CPPFLAGS = -I${top_srcdir}/include -DG_LOG_DOMAIN=\""libnm"\" \
+ -DLOCALEDIR=\"$(datadir)/locale\" -DNETWORKMANAGER_COMPILATION \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE $(GLIB_CFLAGS) \
+ $(am__append_1) $(am__append_4)
+noinst_LTLIBRARIES = libnm-core.la
+core = $(top_srcdir)/libnm-core
+core_build = $(top_builddir)/libnm-core
+libnm_core_headers = \
+ $(core_build)/nm-core-enum-types.h \
+ $(core_build)/nm-version.h \
+ $(core)/nm-connection.h \
+ $(core)/nm-core-types.h \
+ $(core)/nm-dbus-interface.h \
+ $(core)/nm-errors.h \
+ $(core)/nm-setting-8021x.h \
+ $(core)/nm-setting-adsl.h \
+ $(core)/nm-setting-bluetooth.h \
+ $(core)/nm-setting-bond.h \
+ $(core)/nm-setting-bridge-port.h \
+ $(core)/nm-setting-bridge.h \
+ $(core)/nm-setting-cdma.h \
+ $(core)/nm-setting-connection.h \
+ $(core)/nm-setting-dcb.h \
+ $(core)/nm-setting-generic.h \
+ $(core)/nm-setting-gsm.h \
+ $(core)/nm-setting-infiniband.h \
+ $(core)/nm-setting-ip-config.h \
+ $(core)/nm-setting-ip4-config.h \
+ $(core)/nm-setting-ip6-config.h \
+ $(core)/nm-setting-olpc-mesh.h \
+ $(core)/nm-setting-ppp.h \
+ $(core)/nm-setting-pppoe.h \
+ $(core)/nm-setting-serial.h \
+ $(core)/nm-setting-team-port.h \
+ $(core)/nm-setting-team.h \
+ $(core)/nm-setting-vlan.h \
+ $(core)/nm-setting-vpn.h \
+ $(core)/nm-setting-wimax.h \
+ $(core)/nm-setting-wired.h \
+ $(core)/nm-setting-wireless-security.h \
+ $(core)/nm-setting-wireless.h \
+ $(core)/nm-setting.h \
+ $(core)/nm-simple-connection.h \
+ $(core)/nm-utils.h \
+ $(core)/nm-vpn-dbus-interface.h
+
+libnm_core_private_headers = \
+ $(core)/crypto.h \
+ $(core)/nm-connection-private.h \
+ $(core)/nm-core-internal.h \
+ $(core)/nm-property-compare.h \
+ $(core)/nm-setting-private.h \
+ $(core)/nm-utils-private.h
+
+libnm_core_sources = \
+ $(core_build)/nm-core-enum-types.c \
+ $(core)/crypto.c \
+ $(core)/nm-connection.c \
+ $(core)/nm-errors.c \
+ $(core)/nm-property-compare.c \
+ $(core)/nm-setting-8021x.c \
+ $(core)/nm-setting-adsl.c \
+ $(core)/nm-setting-bluetooth.c \
+ $(core)/nm-setting-bond.c \
+ $(core)/nm-setting-bridge-port.c \
+ $(core)/nm-setting-bridge.c \
+ $(core)/nm-setting-cdma.c \
+ $(core)/nm-setting-connection.c \
+ $(core)/nm-setting-dcb.c \
+ $(core)/nm-setting-generic.c \
+ $(core)/nm-setting-gsm.c \
+ $(core)/nm-setting-infiniband.c \
+ $(core)/nm-setting-ip-config.c \
+ $(core)/nm-setting-ip4-config.c \
+ $(core)/nm-setting-ip6-config.c \
+ $(core)/nm-setting-olpc-mesh.c \
+ $(core)/nm-setting-ppp.c \
+ $(core)/nm-setting-pppoe.c \
+ $(core)/nm-setting-serial.c \
+ $(core)/nm-setting-team-port.c \
+ $(core)/nm-setting-team.c \
+ $(core)/nm-setting-vlan.c \
+ $(core)/nm-setting-vpn.c \
+ $(core)/nm-setting-wimax.c \
+ $(core)/nm-setting-wired.c \
+ $(core)/nm-setting-wireless-security.c \
+ $(core)/nm-setting-wireless.c \
+ $(core)/nm-setting.c \
+ $(core)/nm-simple-connection.c \
+ $(core)/nm-utils.c
+
+
+# header/source defines are in Makefile.libnm-core, so they can be shared
+# with libnm/Makefile.am
+libnmincludedir = $(includedir)/libnm
+libnminclude_HEADERS = $(libnm_core_headers)
+libnm_core_la_SOURCES = $(libnm_core_sources) \
+ $(libnm_core_private_headers) $(am__append_2) $(am__append_5)
+GLIB_GENERATED = nm-core-enum-types.h nm-core-enum-types.c
+nm_core_enum_types_sources = $(notdir $(libnminclude_HEADERS))
+GLIB_MKENUMS_H_FLAGS = --identifier-prefix NM
+GLIB_MKENUMS_C_FLAGS = --identifier-prefix NM
+libnm_core_la_LIBADD = $(GLIB_LIBS) $(UUID_LIBS) $(am__append_3) \
+ $(am__append_6)
+BUILT_SOURCES = $(GLIB_GENERATED)
+CLEANFILES = $(BUILT_SOURCES)
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/Makefile.libnm-core $(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 libnm-core/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu libnm-core/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;
+$(srcdir)/Makefile.libnm-core:
+
+$(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):
+nm-version.h: $(top_builddir)/config.status $(srcdir)/nm-version.h.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+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}; \
+ }
+
+libnm-core.la: $(libnm_core_la_OBJECTS) $(libnm_core_la_DEPENDENCIES) $(EXTRA_libnm_core_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libnm_core_la_OBJECTS) $(libnm_core_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@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-core-enum-types.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-errors.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-property-compare.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-ip-config.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-simple-connection.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-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 $@ $<
+
+nm-core-enum-types.lo: $(core_build)/nm-core-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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-core-enum-types.lo -MD -MP -MF $(DEPDIR)/nm-core-enum-types.Tpo -c -o nm-core-enum-types.lo `test -f '$(core_build)/nm-core-enum-types.c' || echo '$(srcdir)/'`$(core_build)/nm-core-enum-types.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-core-enum-types.Tpo $(DEPDIR)/nm-core-enum-types.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(core_build)/nm-core-enum-types.c' object='nm-core-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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-core-enum-types.lo `test -f '$(core_build)/nm-core-enum-types.c' || echo '$(srcdir)/'`$(core_build)/nm-core-enum-types.c
+
+crypto.lo: $(core)/crypto.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 crypto.lo -MD -MP -MF $(DEPDIR)/crypto.Tpo -c -o crypto.lo `test -f '$(core)/crypto.c' || echo '$(srcdir)/'`$(core)/crypto.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/crypto.Tpo $(DEPDIR)/crypto.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(core)/crypto.c' object='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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto.lo `test -f '$(core)/crypto.c' || echo '$(srcdir)/'`$(core)/crypto.c
+
+nm-connection.lo: $(core)/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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-connection.lo -MD -MP -MF $(DEPDIR)/nm-connection.Tpo -c -o nm-connection.lo `test -f '$(core)/nm-connection.c' || echo '$(srcdir)/'`$(core)/nm-connection.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-connection.Tpo $(DEPDIR)/nm-connection.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(core)/nm-connection.c' object='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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-connection.lo `test -f '$(core)/nm-connection.c' || echo '$(srcdir)/'`$(core)/nm-connection.c
+
+nm-errors.lo: $(core)/nm-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 nm-errors.lo -MD -MP -MF $(DEPDIR)/nm-errors.Tpo -c -o nm-errors.lo `test -f '$(core)/nm-errors.c' || echo '$(srcdir)/'`$(core)/nm-errors.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-errors.Tpo $(DEPDIR)/nm-errors.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(core)/nm-errors.c' object='nm-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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-errors.lo `test -f '$(core)/nm-errors.c' || echo '$(srcdir)/'`$(core)/nm-errors.c
+
+nm-property-compare.lo: $(core)/nm-property-compare.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-property-compare.lo -MD -MP -MF $(DEPDIR)/nm-property-compare.Tpo -c -o nm-property-compare.lo `test -f '$(core)/nm-property-compare.c' || echo '$(srcdir)/'`$(core)/nm-property-compare.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-property-compare.Tpo $(DEPDIR)/nm-property-compare.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(core)/nm-property-compare.c' object='nm-property-compare.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) $(AM_CFLAGS) $(CFLAGS) -c -o nm-property-compare.lo `test -f '$(core)/nm-property-compare.c' || echo '$(srcdir)/'`$(core)/nm-property-compare.c
+
+nm-setting-8021x.lo: $(core)/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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-setting-8021x.lo -MD -MP -MF $(DEPDIR)/nm-setting-8021x.Tpo -c -o nm-setting-8021x.lo `test -f '$(core)/nm-setting-8021x.c' || echo '$(srcdir)/'`$(core)/nm-setting-8021x.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-setting-8021x.Tpo $(DEPDIR)/nm-setting-8021x.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(core)/nm-setting-8021x.c' object='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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-setting-8021x.lo `test -f '$(core)/nm-setting-8021x.c' || echo '$(srcdir)/'`$(core)/nm-setting-8021x.c
+
+nm-setting-adsl.lo: $(core)/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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-setting-adsl.lo -MD -MP -MF $(DEPDIR)/nm-setting-adsl.Tpo -c -o nm-setting-adsl.lo `test -f '$(core)/nm-setting-adsl.c' || echo '$(srcdir)/'`$(core)/nm-setting-adsl.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-setting-adsl.Tpo $(DEPDIR)/nm-setting-adsl.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(core)/nm-setting-adsl.c' object='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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-setting-adsl.lo `test -f '$(core)/nm-setting-adsl.c' || echo '$(srcdir)/'`$(core)/nm-setting-adsl.c
+
+nm-setting-bluetooth.lo: $(core)/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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-setting-bluetooth.lo -MD -MP -MF $(DEPDIR)/nm-setting-bluetooth.Tpo -c -o nm-setting-bluetooth.lo `test -f '$(core)/nm-setting-bluetooth.c' || echo '$(srcdir)/'`$(core)/nm-setting-bluetooth.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-setting-bluetooth.Tpo $(DEPDIR)/nm-setting-bluetooth.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(core)/nm-setting-bluetooth.c' object='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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-setting-bluetooth.lo `test -f '$(core)/nm-setting-bluetooth.c' || echo '$(srcdir)/'`$(core)/nm-setting-bluetooth.c
+
+nm-setting-bond.lo: $(core)/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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-setting-bond.lo -MD -MP -MF $(DEPDIR)/nm-setting-bond.Tpo -c -o nm-setting-bond.lo `test -f '$(core)/nm-setting-bond.c' || echo '$(srcdir)/'`$(core)/nm-setting-bond.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-setting-bond.Tpo $(DEPDIR)/nm-setting-bond.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(core)/nm-setting-bond.c' object='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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-setting-bond.lo `test -f '$(core)/nm-setting-bond.c' || echo '$(srcdir)/'`$(core)/nm-setting-bond.c
+
+nm-setting-bridge-port.lo: $(core)/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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-setting-bridge-port.lo -MD -MP -MF $(DEPDIR)/nm-setting-bridge-port.Tpo -c -o nm-setting-bridge-port.lo `test -f '$(core)/nm-setting-bridge-port.c' || echo '$(srcdir)/'`$(core)/nm-setting-bridge-port.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-setting-bridge-port.Tpo $(DEPDIR)/nm-setting-bridge-port.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(core)/nm-setting-bridge-port.c' object='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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-setting-bridge-port.lo `test -f '$(core)/nm-setting-bridge-port.c' || echo '$(srcdir)/'`$(core)/nm-setting-bridge-port.c
+
+nm-setting-bridge.lo: $(core)/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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-setting-bridge.lo -MD -MP -MF $(DEPDIR)/nm-setting-bridge.Tpo -c -o nm-setting-bridge.lo `test -f '$(core)/nm-setting-bridge.c' || echo '$(srcdir)/'`$(core)/nm-setting-bridge.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-setting-bridge.Tpo $(DEPDIR)/nm-setting-bridge.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(core)/nm-setting-bridge.c' object='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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-setting-bridge.lo `test -f '$(core)/nm-setting-bridge.c' || echo '$(srcdir)/'`$(core)/nm-setting-bridge.c
+
+nm-setting-cdma.lo: $(core)/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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-setting-cdma.lo -MD -MP -MF $(DEPDIR)/nm-setting-cdma.Tpo -c -o nm-setting-cdma.lo `test -f '$(core)/nm-setting-cdma.c' || echo '$(srcdir)/'`$(core)/nm-setting-cdma.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-setting-cdma.Tpo $(DEPDIR)/nm-setting-cdma.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(core)/nm-setting-cdma.c' object='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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-setting-cdma.lo `test -f '$(core)/nm-setting-cdma.c' || echo '$(srcdir)/'`$(core)/nm-setting-cdma.c
+
+nm-setting-connection.lo: $(core)/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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-setting-connection.lo -MD -MP -MF $(DEPDIR)/nm-setting-connection.Tpo -c -o nm-setting-connection.lo `test -f '$(core)/nm-setting-connection.c' || echo '$(srcdir)/'`$(core)/nm-setting-connection.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-setting-connection.Tpo $(DEPDIR)/nm-setting-connection.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(core)/nm-setting-connection.c' object='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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-setting-connection.lo `test -f '$(core)/nm-setting-connection.c' || echo '$(srcdir)/'`$(core)/nm-setting-connection.c
+
+nm-setting-dcb.lo: $(core)/nm-setting-dcb.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-setting-dcb.lo -MD -MP -MF $(DEPDIR)/nm-setting-dcb.Tpo -c -o nm-setting-dcb.lo `test -f '$(core)/nm-setting-dcb.c' || echo '$(srcdir)/'`$(core)/nm-setting-dcb.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-setting-dcb.Tpo $(DEPDIR)/nm-setting-dcb.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(core)/nm-setting-dcb.c' object='nm-setting-dcb.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) $(AM_CFLAGS) $(CFLAGS) -c -o nm-setting-dcb.lo `test -f '$(core)/nm-setting-dcb.c' || echo '$(srcdir)/'`$(core)/nm-setting-dcb.c
+
+nm-setting-generic.lo: $(core)/nm-setting-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-setting-generic.lo -MD -MP -MF $(DEPDIR)/nm-setting-generic.Tpo -c -o nm-setting-generic.lo `test -f '$(core)/nm-setting-generic.c' || echo '$(srcdir)/'`$(core)/nm-setting-generic.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-setting-generic.Tpo $(DEPDIR)/nm-setting-generic.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(core)/nm-setting-generic.c' object='nm-setting-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) $(AM_CFLAGS) $(CFLAGS) -c -o nm-setting-generic.lo `test -f '$(core)/nm-setting-generic.c' || echo '$(srcdir)/'`$(core)/nm-setting-generic.c
+
+nm-setting-gsm.lo: $(core)/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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-setting-gsm.lo -MD -MP -MF $(DEPDIR)/nm-setting-gsm.Tpo -c -o nm-setting-gsm.lo `test -f '$(core)/nm-setting-gsm.c' || echo '$(srcdir)/'`$(core)/nm-setting-gsm.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-setting-gsm.Tpo $(DEPDIR)/nm-setting-gsm.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(core)/nm-setting-gsm.c' object='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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-setting-gsm.lo `test -f '$(core)/nm-setting-gsm.c' || echo '$(srcdir)/'`$(core)/nm-setting-gsm.c
+
+nm-setting-infiniband.lo: $(core)/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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-setting-infiniband.lo -MD -MP -MF $(DEPDIR)/nm-setting-infiniband.Tpo -c -o nm-setting-infiniband.lo `test -f '$(core)/nm-setting-infiniband.c' || echo '$(srcdir)/'`$(core)/nm-setting-infiniband.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-setting-infiniband.Tpo $(DEPDIR)/nm-setting-infiniband.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(core)/nm-setting-infiniband.c' object='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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-setting-infiniband.lo `test -f '$(core)/nm-setting-infiniband.c' || echo '$(srcdir)/'`$(core)/nm-setting-infiniband.c
+
+nm-setting-ip-config.lo: $(core)/nm-setting-ip-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-setting-ip-config.lo -MD -MP -MF $(DEPDIR)/nm-setting-ip-config.Tpo -c -o nm-setting-ip-config.lo `test -f '$(core)/nm-setting-ip-config.c' || echo '$(srcdir)/'`$(core)/nm-setting-ip-config.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-setting-ip-config.Tpo $(DEPDIR)/nm-setting-ip-config.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(core)/nm-setting-ip-config.c' object='nm-setting-ip-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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-setting-ip-config.lo `test -f '$(core)/nm-setting-ip-config.c' || echo '$(srcdir)/'`$(core)/nm-setting-ip-config.c
+
+nm-setting-ip4-config.lo: $(core)/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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-setting-ip4-config.lo -MD -MP -MF $(DEPDIR)/nm-setting-ip4-config.Tpo -c -o nm-setting-ip4-config.lo `test -f '$(core)/nm-setting-ip4-config.c' || echo '$(srcdir)/'`$(core)/nm-setting-ip4-config.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-setting-ip4-config.Tpo $(DEPDIR)/nm-setting-ip4-config.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(core)/nm-setting-ip4-config.c' object='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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-setting-ip4-config.lo `test -f '$(core)/nm-setting-ip4-config.c' || echo '$(srcdir)/'`$(core)/nm-setting-ip4-config.c
+
+nm-setting-ip6-config.lo: $(core)/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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-setting-ip6-config.lo -MD -MP -MF $(DEPDIR)/nm-setting-ip6-config.Tpo -c -o nm-setting-ip6-config.lo `test -f '$(core)/nm-setting-ip6-config.c' || echo '$(srcdir)/'`$(core)/nm-setting-ip6-config.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-setting-ip6-config.Tpo $(DEPDIR)/nm-setting-ip6-config.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(core)/nm-setting-ip6-config.c' object='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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-setting-ip6-config.lo `test -f '$(core)/nm-setting-ip6-config.c' || echo '$(srcdir)/'`$(core)/nm-setting-ip6-config.c
+
+nm-setting-olpc-mesh.lo: $(core)/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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-setting-olpc-mesh.lo -MD -MP -MF $(DEPDIR)/nm-setting-olpc-mesh.Tpo -c -o nm-setting-olpc-mesh.lo `test -f '$(core)/nm-setting-olpc-mesh.c' || echo '$(srcdir)/'`$(core)/nm-setting-olpc-mesh.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-setting-olpc-mesh.Tpo $(DEPDIR)/nm-setting-olpc-mesh.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(core)/nm-setting-olpc-mesh.c' object='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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-setting-olpc-mesh.lo `test -f '$(core)/nm-setting-olpc-mesh.c' || echo '$(srcdir)/'`$(core)/nm-setting-olpc-mesh.c
+
+nm-setting-ppp.lo: $(core)/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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-setting-ppp.lo -MD -MP -MF $(DEPDIR)/nm-setting-ppp.Tpo -c -o nm-setting-ppp.lo `test -f '$(core)/nm-setting-ppp.c' || echo '$(srcdir)/'`$(core)/nm-setting-ppp.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-setting-ppp.Tpo $(DEPDIR)/nm-setting-ppp.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(core)/nm-setting-ppp.c' object='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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-setting-ppp.lo `test -f '$(core)/nm-setting-ppp.c' || echo '$(srcdir)/'`$(core)/nm-setting-ppp.c
+
+nm-setting-pppoe.lo: $(core)/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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-setting-pppoe.lo -MD -MP -MF $(DEPDIR)/nm-setting-pppoe.Tpo -c -o nm-setting-pppoe.lo `test -f '$(core)/nm-setting-pppoe.c' || echo '$(srcdir)/'`$(core)/nm-setting-pppoe.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-setting-pppoe.Tpo $(DEPDIR)/nm-setting-pppoe.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(core)/nm-setting-pppoe.c' object='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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-setting-pppoe.lo `test -f '$(core)/nm-setting-pppoe.c' || echo '$(srcdir)/'`$(core)/nm-setting-pppoe.c
+
+nm-setting-serial.lo: $(core)/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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-setting-serial.lo -MD -MP -MF $(DEPDIR)/nm-setting-serial.Tpo -c -o nm-setting-serial.lo `test -f '$(core)/nm-setting-serial.c' || echo '$(srcdir)/'`$(core)/nm-setting-serial.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-setting-serial.Tpo $(DEPDIR)/nm-setting-serial.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(core)/nm-setting-serial.c' object='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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-setting-serial.lo `test -f '$(core)/nm-setting-serial.c' || echo '$(srcdir)/'`$(core)/nm-setting-serial.c
+
+nm-setting-team-port.lo: $(core)/nm-setting-team-port.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-setting-team-port.lo -MD -MP -MF $(DEPDIR)/nm-setting-team-port.Tpo -c -o nm-setting-team-port.lo `test -f '$(core)/nm-setting-team-port.c' || echo '$(srcdir)/'`$(core)/nm-setting-team-port.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-setting-team-port.Tpo $(DEPDIR)/nm-setting-team-port.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(core)/nm-setting-team-port.c' object='nm-setting-team-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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-setting-team-port.lo `test -f '$(core)/nm-setting-team-port.c' || echo '$(srcdir)/'`$(core)/nm-setting-team-port.c
+
+nm-setting-team.lo: $(core)/nm-setting-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-setting-team.lo -MD -MP -MF $(DEPDIR)/nm-setting-team.Tpo -c -o nm-setting-team.lo `test -f '$(core)/nm-setting-team.c' || echo '$(srcdir)/'`$(core)/nm-setting-team.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-setting-team.Tpo $(DEPDIR)/nm-setting-team.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(core)/nm-setting-team.c' object='nm-setting-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) $(AM_CFLAGS) $(CFLAGS) -c -o nm-setting-team.lo `test -f '$(core)/nm-setting-team.c' || echo '$(srcdir)/'`$(core)/nm-setting-team.c
+
+nm-setting-vlan.lo: $(core)/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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-setting-vlan.lo -MD -MP -MF $(DEPDIR)/nm-setting-vlan.Tpo -c -o nm-setting-vlan.lo `test -f '$(core)/nm-setting-vlan.c' || echo '$(srcdir)/'`$(core)/nm-setting-vlan.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-setting-vlan.Tpo $(DEPDIR)/nm-setting-vlan.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(core)/nm-setting-vlan.c' object='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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-setting-vlan.lo `test -f '$(core)/nm-setting-vlan.c' || echo '$(srcdir)/'`$(core)/nm-setting-vlan.c
+
+nm-setting-vpn.lo: $(core)/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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-setting-vpn.lo -MD -MP -MF $(DEPDIR)/nm-setting-vpn.Tpo -c -o nm-setting-vpn.lo `test -f '$(core)/nm-setting-vpn.c' || echo '$(srcdir)/'`$(core)/nm-setting-vpn.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-setting-vpn.Tpo $(DEPDIR)/nm-setting-vpn.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(core)/nm-setting-vpn.c' object='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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-setting-vpn.lo `test -f '$(core)/nm-setting-vpn.c' || echo '$(srcdir)/'`$(core)/nm-setting-vpn.c
+
+nm-setting-wimax.lo: $(core)/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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-setting-wimax.lo -MD -MP -MF $(DEPDIR)/nm-setting-wimax.Tpo -c -o nm-setting-wimax.lo `test -f '$(core)/nm-setting-wimax.c' || echo '$(srcdir)/'`$(core)/nm-setting-wimax.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-setting-wimax.Tpo $(DEPDIR)/nm-setting-wimax.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(core)/nm-setting-wimax.c' object='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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-setting-wimax.lo `test -f '$(core)/nm-setting-wimax.c' || echo '$(srcdir)/'`$(core)/nm-setting-wimax.c
+
+nm-setting-wired.lo: $(core)/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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-setting-wired.lo -MD -MP -MF $(DEPDIR)/nm-setting-wired.Tpo -c -o nm-setting-wired.lo `test -f '$(core)/nm-setting-wired.c' || echo '$(srcdir)/'`$(core)/nm-setting-wired.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-setting-wired.Tpo $(DEPDIR)/nm-setting-wired.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(core)/nm-setting-wired.c' object='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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-setting-wired.lo `test -f '$(core)/nm-setting-wired.c' || echo '$(srcdir)/'`$(core)/nm-setting-wired.c
+
+nm-setting-wireless-security.lo: $(core)/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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-setting-wireless-security.lo -MD -MP -MF $(DEPDIR)/nm-setting-wireless-security.Tpo -c -o nm-setting-wireless-security.lo `test -f '$(core)/nm-setting-wireless-security.c' || echo '$(srcdir)/'`$(core)/nm-setting-wireless-security.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-setting-wireless-security.Tpo $(DEPDIR)/nm-setting-wireless-security.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(core)/nm-setting-wireless-security.c' object='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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-setting-wireless-security.lo `test -f '$(core)/nm-setting-wireless-security.c' || echo '$(srcdir)/'`$(core)/nm-setting-wireless-security.c
+
+nm-setting-wireless.lo: $(core)/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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-setting-wireless.lo -MD -MP -MF $(DEPDIR)/nm-setting-wireless.Tpo -c -o nm-setting-wireless.lo `test -f '$(core)/nm-setting-wireless.c' || echo '$(srcdir)/'`$(core)/nm-setting-wireless.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-setting-wireless.Tpo $(DEPDIR)/nm-setting-wireless.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(core)/nm-setting-wireless.c' object='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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-setting-wireless.lo `test -f '$(core)/nm-setting-wireless.c' || echo '$(srcdir)/'`$(core)/nm-setting-wireless.c
+
+nm-setting.lo: $(core)/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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-setting.lo -MD -MP -MF $(DEPDIR)/nm-setting.Tpo -c -o nm-setting.lo `test -f '$(core)/nm-setting.c' || echo '$(srcdir)/'`$(core)/nm-setting.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-setting.Tpo $(DEPDIR)/nm-setting.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(core)/nm-setting.c' object='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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-setting.lo `test -f '$(core)/nm-setting.c' || echo '$(srcdir)/'`$(core)/nm-setting.c
+
+nm-simple-connection.lo: $(core)/nm-simple-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-simple-connection.lo -MD -MP -MF $(DEPDIR)/nm-simple-connection.Tpo -c -o nm-simple-connection.lo `test -f '$(core)/nm-simple-connection.c' || echo '$(srcdir)/'`$(core)/nm-simple-connection.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-simple-connection.Tpo $(DEPDIR)/nm-simple-connection.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(core)/nm-simple-connection.c' object='nm-simple-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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-simple-connection.lo `test -f '$(core)/nm-simple-connection.c' || echo '$(srcdir)/'`$(core)/nm-simple-connection.c
+
+nm-utils.lo: $(core)/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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-utils.lo -MD -MP -MF $(DEPDIR)/nm-utils.Tpo -c -o nm-utils.lo `test -f '$(core)/nm-utils.c' || echo '$(srcdir)/'`$(core)/nm-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-utils.Tpo $(DEPDIR)/nm-utils.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(core)/nm-utils.c' object='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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-utils.lo `test -f '$(core)/nm-utils.c' || echo '$(srcdir)/'`$(core)/nm-utils.c
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-libnmincludeHEADERS: $(libnminclude_HEADERS)
+ @$(NORMAL_INSTALL)
+ @list='$(libnminclude_HEADERS)'; test -n "$(libnmincludedir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(libnmincludedir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(libnmincludedir)" || 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_HEADER) $$files '$(DESTDIR)$(libnmincludedir)'"; \
+ $(INSTALL_HEADER) $$files "$(DESTDIR)$(libnmincludedir)" || exit $$?; \
+ done
+
+uninstall-libnmincludeHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(libnminclude_HEADERS)'; test -n "$(libnmincludedir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(libnmincludedir)'; $(am__uninstall_files_from_dir)
+
+# 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: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-recursive
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(libnmincludedir)"; 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
+
+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:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+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."
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-libnmincludeHEADERS
+
+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 -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-libnmincludeHEADERS
+
+.MAKE: $(am__recursive_targets) all check 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 \
+ 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-libnmincludeHEADERS 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-libnmincludeHEADERS
+
+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/libnm-core/Makefile.libnm-core b/libnm-core/Makefile.libnm-core
new file mode 100644
index 000000000..fc6d779b5
--- /dev/null
+++ b/libnm-core/Makefile.libnm-core
@@ -0,0 +1,91 @@
+# In order for this to work correctly from both libnm-core/ and libnm/,
+# we have to specify full pathnames. (We can't just use $(addprefix) from
+# libnm/, because that's incompatible with the Makefile.introspection rules.)
+
+core = $(top_srcdir)/libnm-core
+core_build = $(top_builddir)/libnm-core
+
+libnm_core_headers = \
+ $(core_build)/nm-core-enum-types.h \
+ $(core_build)/nm-version.h \
+ $(core)/nm-connection.h \
+ $(core)/nm-core-types.h \
+ $(core)/nm-dbus-interface.h \
+ $(core)/nm-errors.h \
+ $(core)/nm-setting-8021x.h \
+ $(core)/nm-setting-adsl.h \
+ $(core)/nm-setting-bluetooth.h \
+ $(core)/nm-setting-bond.h \
+ $(core)/nm-setting-bridge-port.h \
+ $(core)/nm-setting-bridge.h \
+ $(core)/nm-setting-cdma.h \
+ $(core)/nm-setting-connection.h \
+ $(core)/nm-setting-dcb.h \
+ $(core)/nm-setting-generic.h \
+ $(core)/nm-setting-gsm.h \
+ $(core)/nm-setting-infiniband.h \
+ $(core)/nm-setting-ip-config.h \
+ $(core)/nm-setting-ip4-config.h \
+ $(core)/nm-setting-ip6-config.h \
+ $(core)/nm-setting-olpc-mesh.h \
+ $(core)/nm-setting-ppp.h \
+ $(core)/nm-setting-pppoe.h \
+ $(core)/nm-setting-serial.h \
+ $(core)/nm-setting-team-port.h \
+ $(core)/nm-setting-team.h \
+ $(core)/nm-setting-vlan.h \
+ $(core)/nm-setting-vpn.h \
+ $(core)/nm-setting-wimax.h \
+ $(core)/nm-setting-wired.h \
+ $(core)/nm-setting-wireless-security.h \
+ $(core)/nm-setting-wireless.h \
+ $(core)/nm-setting.h \
+ $(core)/nm-simple-connection.h \
+ $(core)/nm-utils.h \
+ $(core)/nm-vpn-dbus-interface.h
+
+libnm_core_private_headers = \
+ $(core)/crypto.h \
+ $(core)/nm-connection-private.h \
+ $(core)/nm-core-internal.h \
+ $(core)/nm-property-compare.h \
+ $(core)/nm-setting-private.h \
+ $(core)/nm-utils-private.h
+
+libnm_core_sources = \
+ $(core_build)/nm-core-enum-types.c \
+ $(core)/crypto.c \
+ $(core)/nm-connection.c \
+ $(core)/nm-errors.c \
+ $(core)/nm-property-compare.c \
+ $(core)/nm-setting-8021x.c \
+ $(core)/nm-setting-adsl.c \
+ $(core)/nm-setting-bluetooth.c \
+ $(core)/nm-setting-bond.c \
+ $(core)/nm-setting-bridge-port.c \
+ $(core)/nm-setting-bridge.c \
+ $(core)/nm-setting-cdma.c \
+ $(core)/nm-setting-connection.c \
+ $(core)/nm-setting-dcb.c \
+ $(core)/nm-setting-generic.c \
+ $(core)/nm-setting-gsm.c \
+ $(core)/nm-setting-infiniband.c \
+ $(core)/nm-setting-ip-config.c \
+ $(core)/nm-setting-ip4-config.c \
+ $(core)/nm-setting-ip6-config.c \
+ $(core)/nm-setting-olpc-mesh.c \
+ $(core)/nm-setting-ppp.c \
+ $(core)/nm-setting-pppoe.c \
+ $(core)/nm-setting-serial.c \
+ $(core)/nm-setting-team-port.c \
+ $(core)/nm-setting-team.c \
+ $(core)/nm-setting-vlan.c \
+ $(core)/nm-setting-vpn.c \
+ $(core)/nm-setting-wimax.c \
+ $(core)/nm-setting-wired.c \
+ $(core)/nm-setting-wireless-security.c \
+ $(core)/nm-setting-wireless.c \
+ $(core)/nm-setting.c \
+ $(core)/nm-simple-connection.c \
+ $(core)/nm-utils.c
+
diff --git a/libnm-core/crypto.c b/libnm-core/crypto.c
new file mode 100644
index 000000000..205d22c61
--- /dev/null
+++ b/libnm-core/crypto.c
@@ -0,0 +1,816 @@
+/* -*- 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.
+ *
+ * Copyright 2007 - 2011 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <string.h>
+#include <strings.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <glib/gi18n-lib.h>
+
+#include "crypto.h"
+#include "nm-errors.h"
+
+#define PEM_RSA_KEY_BEGIN "-----BEGIN RSA PRIVATE KEY-----"
+#define PEM_RSA_KEY_END "-----END RSA PRIVATE KEY-----"
+
+#define PEM_DSA_KEY_BEGIN "-----BEGIN DSA PRIVATE KEY-----"
+#define PEM_DSA_KEY_END "-----END DSA PRIVATE KEY-----"
+
+#define PEM_CERT_BEGIN "-----BEGIN CERTIFICATE-----"
+#define PEM_CERT_END "-----END CERTIFICATE-----"
+
+#define PEM_PKCS8_ENC_KEY_BEGIN "-----BEGIN ENCRYPTED PRIVATE KEY-----"
+#define PEM_PKCS8_ENC_KEY_END "-----END ENCRYPTED PRIVATE KEY-----"
+
+#define PEM_PKCS8_DEC_KEY_BEGIN "-----BEGIN PRIVATE KEY-----"
+#define PEM_PKCS8_DEC_KEY_END "-----END PRIVATE KEY-----"
+
+static gboolean
+find_tag (const char *tag,
+ const guint8 *data,
+ gsize data_len,
+ gsize start_at,
+ gsize *out_pos)
+{
+ gsize i, taglen;
+ gsize len = data_len - start_at;
+
+ g_return_val_if_fail (out_pos != NULL, FALSE);
+
+ taglen = strlen (tag);
+ if (len >= taglen) {
+ for (i = 0; i < len - taglen + 1; i++) {
+ if (memcmp (data + start_at + i, tag, taglen) == 0) {
+ *out_pos = start_at + i;
+ return TRUE;
+ }
+ }
+ }
+ return FALSE;
+}
+
+#define DEK_INFO_TAG "DEK-Info: "
+#define PROC_TYPE_TAG "Proc-Type: "
+
+static GByteArray *
+parse_old_openssl_key_file (const guint8 *data,
+ gsize data_len,
+ NMCryptoKeyType *out_key_type,
+ char **out_cipher,
+ char **out_iv,
+ GError **error)
+{
+ GByteArray *bindata = NULL;
+ char **lines = NULL;
+ char **ln = NULL;
+ gsize start = 0, end = 0;
+ GString *str = NULL;
+ int enc_tags = 0;
+ NMCryptoKeyType key_type;
+ char *iv = NULL;
+ char *cipher = NULL;
+ unsigned char *tmp = NULL;
+ gsize tmp_len = 0;
+ const char *start_tag;
+ const char *end_tag;
+ guint8 save_end = 0;
+
+ *out_key_type = NM_CRYPTO_KEY_TYPE_UNKNOWN;
+ *out_iv = NULL;
+ *out_cipher = NULL;
+
+ if (find_tag (PEM_RSA_KEY_BEGIN, data, data_len, 0, &start)) {
+ key_type = NM_CRYPTO_KEY_TYPE_RSA;
+ start_tag = PEM_RSA_KEY_BEGIN;
+ end_tag = PEM_RSA_KEY_END;
+ } else if (find_tag (PEM_DSA_KEY_BEGIN, data, data_len, 0, &start)) {
+ key_type = NM_CRYPTO_KEY_TYPE_DSA;
+ start_tag = PEM_DSA_KEY_BEGIN;
+ end_tag = PEM_DSA_KEY_END;
+ } else
+ goto parse_error;
+
+ start += strlen (start_tag);
+ if (!find_tag (end_tag, data, data_len, start, &end)) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_INVALID_DATA,
+ _("PEM key file had no end tag '%s'."),
+ end_tag);
+ goto parse_error;
+ }
+
+ save_end = data[end];
+ ((guint8 *)data)[end] = '\0';
+ lines = g_strsplit ((const char *) (data + start), "\n", 0);
+ ((guint8 *)data)[end] = save_end;
+
+ if (!lines || g_strv_length (lines) <= 1) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_INVALID_DATA,
+ _("Doesn't look like a PEM private key file."));
+ goto parse_error;
+ }
+
+ str = g_string_new_len (NULL, end - start);
+ for (ln = lines; *ln; ln++) {
+ char *p = *ln;
+
+ /* Chug leading spaces */
+ p = g_strstrip (p);
+ if (!*p)
+ continue;
+
+ if (!strncmp (p, PROC_TYPE_TAG, strlen (PROC_TYPE_TAG))) {
+ if (enc_tags++ != 0 || str->len != 0) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_INVALID_DATA,
+ _("Malformed PEM file: Proc-Type was not first tag."));
+ goto parse_error;
+ }
+
+ p += strlen (PROC_TYPE_TAG);
+ if (strcmp (p, "4,ENCRYPTED")) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_INVALID_DATA,
+ _("Malformed PEM file: unknown Proc-Type tag '%s'."),
+ p);
+ goto parse_error;
+ }
+ } else if (!strncmp (p, DEK_INFO_TAG, strlen (DEK_INFO_TAG))) {
+ char *comma;
+
+ if (enc_tags++ != 1 || str->len != 0) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_INVALID_DATA,
+ _("Malformed PEM file: DEK-Info was not the second tag."));
+ goto parse_error;
+ }
+
+ p += strlen (DEK_INFO_TAG);
+
+ /* Grab the IV first */
+ comma = strchr (p, ',');
+ if (!comma || (*(comma + 1) == '\0')) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_INVALID_DATA,
+ _("Malformed PEM file: no IV found in DEK-Info tag."));
+ goto parse_error;
+ }
+ *comma++ = '\0';
+ if (!g_ascii_isxdigit (*comma)) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_INVALID_DATA,
+ _("Malformed PEM file: invalid format of IV in DEK-Info tag."));
+ goto parse_error;
+ }
+ iv = g_strdup (comma);
+
+ /* Get the private key cipher */
+ if (!strcasecmp (p, "DES-EDE3-CBC")) {
+ 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_ERROR_INVALID_DATA,
+ _("Malformed PEM file: unknown private key cipher '%s'."),
+ p);
+ goto parse_error;
+ }
+ } else {
+ if (enc_tags == 1) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_INVALID_DATA,
+ "Malformed PEM file: both Proc-Type and DEK-Info tags are required.");
+ goto parse_error;
+ }
+ g_string_append (str, p);
+ }
+ }
+
+ tmp = g_base64_decode (str->str, &tmp_len);
+ if (tmp == NULL || !tmp_len) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_INVALID_DATA,
+ _("Could not decode private key."));
+ goto parse_error;
+ }
+ g_string_free (str, TRUE);
+
+ if (lines)
+ g_strfreev (lines);
+
+ bindata = g_byte_array_sized_new (tmp_len);
+ g_byte_array_append (bindata, tmp, tmp_len);
+ g_free (tmp);
+
+ *out_key_type = key_type;
+ *out_iv = iv;
+ *out_cipher = cipher;
+ return bindata;
+
+parse_error:
+ g_free (tmp);
+ g_free (cipher);
+ g_free (iv);
+ if (str)
+ g_string_free (str, TRUE);
+ if (lines)
+ g_strfreev (lines);
+ return NULL;
+}
+
+static GByteArray *
+parse_pkcs8_key_file (const guint8 *data,
+ gsize data_len,
+ gboolean *out_encrypted,
+ GError **error)
+{
+ GByteArray *key = NULL;
+ gsize start = 0, end = 0;
+ unsigned char *der = NULL;
+ guint8 save_end;
+ gsize length = 0;
+ const char *start_tag = NULL, *end_tag = NULL;
+ gboolean encrypted = FALSE;
+
+ /* Try encrypted first, decrypted next */
+ if (find_tag (PEM_PKCS8_ENC_KEY_BEGIN, data, data_len, 0, &start)) {
+ start_tag = PEM_PKCS8_ENC_KEY_BEGIN;
+ end_tag = PEM_PKCS8_ENC_KEY_END;
+ encrypted = TRUE;
+ } else if (find_tag (PEM_PKCS8_DEC_KEY_BEGIN, data, data_len, 0, &start)) {
+ start_tag = PEM_PKCS8_DEC_KEY_BEGIN;
+ end_tag = PEM_PKCS8_DEC_KEY_END;
+ encrypted = FALSE;
+ } else {
+ g_set_error_literal (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_INVALID_DATA,
+ _("Failed to find expected PKCS#8 start tag."));
+ return NULL;
+ }
+
+ start += strlen (start_tag);
+ if (!find_tag (end_tag, data, data_len, start, &end)) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_INVALID_DATA,
+ _("Failed to find expected PKCS#8 end tag '%s'."),
+ end_tag);
+ return NULL;
+ }
+
+ /* g_base64_decode() wants a NULL-terminated string */
+ save_end = data[end];
+ ((guint8 *)data)[end] = '\0';
+ der = g_base64_decode ((const char *) (data + start), &length);
+ ((guint8 *)data)[end] = save_end;
+
+ if (der && length) {
+ key = g_byte_array_sized_new (length);
+ 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_ERROR_INVALID_DATA,
+ _("Failed to decode PKCS#8 private key."));
+ }
+
+ g_free (der);
+ return key;
+}
+
+static GByteArray *
+file_to_g_byte_array (const char *filename, GError **error)
+{
+ char *contents;
+ GByteArray *array = NULL;
+ gsize length = 0;
+
+ if (g_file_get_contents (filename, &contents, &length, error)) {
+ array = g_byte_array_sized_new (length);
+ g_byte_array_append (array, (guint8 *) contents, length);
+ g_assert (array->len == length);
+ g_free (contents);
+ }
+ return array;
+}
+
+/*
+ * Convert a hex string into bytes.
+ */
+static char *
+convert_iv (const char *src,
+ gsize *out_len,
+ GError **error)
+{
+ int num;
+ int i;
+ char conv[3];
+ char *c;
+
+ g_return_val_if_fail (src != NULL, NULL);
+
+ num = strlen (src);
+ if (num % 2) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_INVALID_DATA,
+ _("IV must be an even number of bytes in length."));
+ return NULL;
+ }
+
+ num /= 2;
+ c = g_malloc0 (num + 1);
+
+ conv[2] = '\0';
+ for (i = 0; i < num; i++) {
+ conv[0] = src[(i * 2)];
+ conv[1] = src[(i * 2) + 1];
+ if (!g_ascii_isxdigit (conv[0]) || !g_ascii_isxdigit (conv[1])) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_INVALID_DATA,
+ _("IV contains non-hexadecimal digits."));
+ goto error;
+ }
+
+ c[i] = strtol(conv, NULL, 16);
+ }
+ *out_len = num;
+ return c;
+
+error:
+ g_free (c);
+ return NULL;
+}
+
+char *
+crypto_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;
+
+ g_return_val_if_fail (cipher != NULL, NULL);
+ g_return_val_if_fail (salt != NULL, NULL);
+ g_return_val_if_fail (salt_len >= 8, NULL);
+ 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, "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_ERROR_UNKNOWN_CIPHER,
+ _("Private key cipher '%s' was unknown."),
+ cipher);
+ return NULL;
+ }
+
+ if (password[0] == '\0')
+ return NULL;
+
+ key = g_malloc0 (digest_len + 1);
+
+ crypto_md5_hash (salt,
+ 8,
+ password,
+ strlen (password),
+ key,
+ digest_len);
+
+ *out_len = digest_len;
+ return key;
+}
+
+static GByteArray *
+decrypt_key (const char *cipher,
+ int key_type,
+ const guint8 *data,
+ gsize data_len,
+ const char *iv,
+ const char *password,
+ GError **error)
+{
+ char *bin_iv = NULL;
+ gsize bin_iv_len = 0;
+ char *key = NULL;
+ gsize key_len = 0;
+ char *output = NULL;
+ gsize decrypted_len = 0;
+ GByteArray *decrypted = NULL;
+
+ g_return_val_if_fail (password != NULL, NULL);
+
+ bin_iv = convert_iv (iv, &bin_iv_len, error);
+ if (!bin_iv)
+ return NULL;
+
+ /* Convert the password and IV into a DES or AES key */
+ key = crypto_make_des_aes_key (cipher, bin_iv, bin_iv_len, password, &key_len, error);
+ if (!key || !key_len)
+ goto out;
+
+ output = crypto_decrypt (cipher, key_type,
+ data, data_len,
+ bin_iv, bin_iv_len,
+ key, key_len,
+ &decrypted_len,
+ error);
+ if (output && decrypted_len) {
+ decrypted = g_byte_array_sized_new (decrypted_len);
+ g_byte_array_append (decrypted, (guint8 *) output, decrypted_len);
+ }
+
+out:
+ /* Don't leak stale key material */
+ if (key)
+ memset (key, 0, key_len);
+ g_free (output);
+ g_free (key);
+ g_free (bin_iv);
+
+ return decrypted;
+}
+
+GByteArray *
+crypto_decrypt_openssl_private_key_data (const guint8 *data,
+ gsize data_len,
+ const char *password,
+ NMCryptoKeyType *out_key_type,
+ GError **error)
+{
+ GByteArray *decrypted = NULL;
+ NMCryptoKeyType key_type = NM_CRYPTO_KEY_TYPE_UNKNOWN;
+ GByteArray *parsed;
+ char *iv = NULL;
+ char *cipher = NULL;
+
+ g_return_val_if_fail (data != NULL, NULL);
+ if (out_key_type)
+ g_return_val_if_fail (*out_key_type == NM_CRYPTO_KEY_TYPE_UNKNOWN, NULL);
+
+ if (!crypto_init (error))
+ return NULL;
+
+ parsed = parse_old_openssl_key_file (data, data_len, &key_type, &cipher, &iv, NULL);
+ /* return the key type even if decryption failed */
+ if (out_key_type)
+ *out_key_type = key_type;
+
+ if (!parsed) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_INVALID_DATA,
+ _("Unable to determine private key type."));
+ return NULL;
+ }
+
+ if (password) {
+ if (!cipher || !iv) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_INVALID_PASSWORD,
+ _("Password provided, but key was not encrypted."));
+ } else {
+ decrypted = decrypt_key (cipher,
+ key_type,
+ parsed->data,
+ parsed->len,
+ iv,
+ password,
+ error);
+ }
+ } else if (!cipher && !iv)
+ decrypted = g_byte_array_ref (parsed);
+
+ g_byte_array_unref (parsed);
+ g_free (cipher);
+ g_free (iv);
+
+ return decrypted;
+}
+
+GByteArray *
+crypto_decrypt_openssl_private_key (const char *file,
+ const char *password,
+ NMCryptoKeyType *out_key_type,
+ GError **error)
+{
+ GByteArray *contents;
+ GByteArray *key = NULL;
+
+ if (!crypto_init (error))
+ return NULL;
+
+ contents = file_to_g_byte_array (file, error);
+ if (contents) {
+ key = crypto_decrypt_openssl_private_key_data (contents->data, contents->len,
+ password, out_key_type, error);
+ g_byte_array_free (contents, TRUE);
+ }
+ return key;
+}
+
+static GByteArray *
+extract_pem_cert_data (GByteArray *contents, GError **error)
+{
+ GByteArray *cert = NULL;
+ gsize start = 0, end = 0;
+ unsigned char *der = NULL;
+ guint8 save_end;
+ gsize length = 0;
+
+ if (!find_tag (PEM_CERT_BEGIN, contents->data, contents->len, 0, &start)) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_INVALID_DATA,
+ _("PEM certificate had no start tag '%s'."),
+ PEM_CERT_BEGIN);
+ goto done;
+ }
+
+ start += strlen (PEM_CERT_BEGIN);
+ if (!find_tag (PEM_CERT_END, contents->data, contents->len, start, &end)) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_INVALID_DATA,
+ _("PEM certificate had no end tag '%s'."),
+ PEM_CERT_END);
+ goto done;
+ }
+
+ /* g_base64_decode() wants a NULL-terminated string */
+ save_end = contents->data[end];
+ contents->data[end] = '\0';
+ der = g_base64_decode ((const char *) (contents->data + start), &length);
+ contents->data[end] = save_end;
+
+ if (der && length) {
+ cert = g_byte_array_sized_new (length);
+ g_byte_array_append (cert, der, length);
+ g_assert (cert->len == length);
+ } else {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_INVALID_DATA,
+ _("Failed to decode certificate."));
+ }
+
+done:
+ g_free (der);
+ return cert;
+}
+
+GByteArray *
+crypto_load_and_verify_certificate (const char *file,
+ NMCryptoFileFormat *out_file_format,
+ GError **error)
+{
+ GByteArray *array, *contents;
+
+ g_return_val_if_fail (file != NULL, NULL);
+ g_return_val_if_fail (out_file_format != NULL, NULL);
+ g_return_val_if_fail (*out_file_format == NM_CRYPTO_FILE_FORMAT_UNKNOWN, NULL);
+
+ if (!crypto_init (error))
+ return NULL;
+
+ contents = file_to_g_byte_array (file, error);
+ if (!contents)
+ return NULL;
+
+ /* Check for PKCS#12 */
+ if (crypto_is_pkcs12_data (contents->data, contents->len, NULL)) {
+ *out_file_format = NM_CRYPTO_FILE_FORMAT_PKCS12;
+ return contents;
+ }
+
+ /* Check for plain DER format */
+ if (contents->len > 2 && contents->data[0] == 0x30 && contents->data[1] == 0x82) {
+ *out_file_format = crypto_verify_cert (contents->data, contents->len, error);
+ } else {
+ array = extract_pem_cert_data (contents, error);
+ if (!array) {
+ g_byte_array_free (contents, TRUE);
+ return NULL;
+ }
+
+ *out_file_format = crypto_verify_cert (array->data, array->len, error);
+ g_byte_array_free (array, TRUE);
+ }
+
+ if (*out_file_format != NM_CRYPTO_FILE_FORMAT_X509) {
+ g_byte_array_free (contents, TRUE);
+ contents = NULL;
+ }
+
+ return contents;
+}
+
+gboolean
+crypto_is_pkcs12_data (const guint8 *data,
+ gsize data_len,
+ GError **error)
+{
+ GError *local = NULL;
+ gboolean success;
+
+ g_return_val_if_fail (data != NULL, FALSE);
+
+ if (!crypto_init (error))
+ return FALSE;
+
+ success = crypto_verify_pkcs12 (data, data_len, NULL, &local);
+ if (success == FALSE) {
+ /* If the error was just a decryption error, then it's pkcs#12 */
+ if (local) {
+ if (g_error_matches (local, NM_CRYPTO_ERROR, NM_CRYPTO_ERROR_DECRYPTION_FAILED)) {
+ success = TRUE;
+ g_error_free (local);
+ } else
+ g_propagate_error (error, local);
+ }
+ }
+ return success;
+}
+
+gboolean
+crypto_is_pkcs12_file (const char *file, GError **error)
+{
+ GByteArray *contents;
+ gboolean success = FALSE;
+
+ g_return_val_if_fail (file != NULL, FALSE);
+
+ if (!crypto_init (error))
+ return FALSE;
+
+ contents = file_to_g_byte_array (file, error);
+ if (contents) {
+ success = crypto_is_pkcs12_data (contents->data, contents->len, error);
+ g_byte_array_free (contents, TRUE);
+ }
+ return success;
+}
+
+/* Verifies that a private key can be read, and if a password is given, that
+ * the private key can be decrypted with that password.
+ */
+NMCryptoFileFormat
+crypto_verify_private_key_data (const guint8 *data,
+ gsize data_len,
+ const char *password,
+ gboolean *out_is_encrypted,
+ GError **error)
+{
+ GByteArray *tmp;
+ NMCryptoFileFormat format = NM_CRYPTO_FILE_FORMAT_UNKNOWN;
+ NMCryptoKeyType ktype = NM_CRYPTO_KEY_TYPE_UNKNOWN;
+ gboolean is_encrypted = FALSE;
+
+ g_return_val_if_fail (data != NULL, NM_CRYPTO_FILE_FORMAT_UNKNOWN);
+ g_return_val_if_fail (out_is_encrypted == NULL || *out_is_encrypted == FALSE, NM_CRYPTO_FILE_FORMAT_UNKNOWN);
+
+ if (!crypto_init (error))
+ return NM_CRYPTO_FILE_FORMAT_UNKNOWN;
+
+ /* Check for PKCS#12 first */
+ if (crypto_is_pkcs12_data (data, data_len, NULL)) {
+ is_encrypted = TRUE;
+ if (!password || crypto_verify_pkcs12 (data, data_len, password, error))
+ format = NM_CRYPTO_FILE_FORMAT_PKCS12;
+ } else {
+ /* Maybe it's PKCS#8 */
+ tmp = parse_pkcs8_key_file (data, data_len, &is_encrypted, NULL);
+ if (tmp) {
+ if (crypto_verify_pkcs8 (tmp->data, tmp->len, is_encrypted, password, error))
+ format = NM_CRYPTO_FILE_FORMAT_RAW_KEY;
+ } else {
+ char *cipher, *iv;
+
+ /* Or it's old-style OpenSSL */
+ tmp = parse_old_openssl_key_file (data, data_len, &ktype,
+ &cipher, &iv, NULL);
+ if (tmp) {
+ format = NM_CRYPTO_FILE_FORMAT_RAW_KEY;
+ is_encrypted = (cipher && iv);
+ g_free (cipher);
+ g_free (iv);
+ }
+ }
+
+ if (tmp) {
+ /* Don't leave key data around */
+ memset (tmp->data, 0, tmp->len);
+ g_byte_array_free (tmp, TRUE);
+ }
+ }
+
+ if (out_is_encrypted)
+ *out_is_encrypted = is_encrypted;
+ return format;
+}
+
+NMCryptoFileFormat
+crypto_verify_private_key (const char *filename,
+ const char *password,
+ gboolean *out_is_encrypted,
+ GError **error)
+{
+ GByteArray *contents;
+ NMCryptoFileFormat format = NM_CRYPTO_FILE_FORMAT_UNKNOWN;
+
+ g_return_val_if_fail (filename != NULL, NM_CRYPTO_FILE_FORMAT_UNKNOWN);
+
+ if (!crypto_init (error))
+ return NM_CRYPTO_FILE_FORMAT_UNKNOWN;
+
+ contents = file_to_g_byte_array (filename, error);
+ if (contents) {
+ format = crypto_verify_private_key_data (contents->data, contents->len, password, out_is_encrypted, error);
+ g_byte_array_free (contents, TRUE);
+ }
+ return format;
+}
+
+void
+crypto_md5_hash (const char *salt,
+ gssize salt_len,
+ const char *password,
+ gssize password_len,
+ char *buffer,
+ gsize buflen)
+{
+ GChecksum *ctx;
+ int nkey = buflen;
+ gsize digest_len;
+ int count = 0;
+ char digest[16];
+ char *p = buffer;
+
+ g_assert_cmpint (g_checksum_type_get_length (G_CHECKSUM_MD5), ==, sizeof (digest));
+
+ g_return_if_fail (password_len == 0 || password);
+ g_return_if_fail (buffer != NULL);
+ g_return_if_fail (buflen > 0);
+ g_return_if_fail (salt_len == 0 || salt);
+
+ ctx = g_checksum_new (G_CHECKSUM_MD5);
+
+ if (salt_len < 0)
+ salt_len = strlen (salt);
+ if (password_len < 0)
+ password_len = strlen (password);
+
+ while (nkey > 0) {
+ int i = 0;
+
+ g_checksum_reset (ctx);
+ if (count++)
+ g_checksum_update (ctx, (const guchar *) digest, sizeof (digest));
+ if (password_len > 0)
+ g_checksum_update (ctx, (const guchar *) password, password_len);
+ if (salt_len > 0)
+ g_checksum_update (ctx, (const guchar *) salt, salt_len);
+
+ digest_len = sizeof (digest);
+ g_checksum_get_digest (ctx, (guchar *) digest, &digest_len);
+ g_assert (digest_len == sizeof (digest));
+
+ while (nkey && (i < sizeof (digest))) {
+ *(p++) = digest[i++];
+ nkey--;
+ }
+ }
+
+ memset (digest, 0, sizeof (digest));
+ g_checksum_free (ctx);
+}
diff --git a/libnm-core/crypto.h b/libnm-core/crypto.h
new file mode 100644
index 000000000..434f108d0
--- /dev/null
+++ b/libnm-core/crypto.h
@@ -0,0 +1,133 @@
+/* -*- 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.
+ *
+ * Copyright 2007 - 2014 Red Hat, Inc.
+ */
+
+#ifndef __CRYPTO_H__
+#define __CRYPTO_H__
+
+#include <glib.h>
+
+#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"
+
+typedef enum {
+ NM_CRYPTO_KEY_TYPE_UNKNOWN = 0,
+ NM_CRYPTO_KEY_TYPE_RSA,
+ NM_CRYPTO_KEY_TYPE_DSA
+} NMCryptoKeyType;
+
+typedef enum {
+ NM_CRYPTO_FILE_FORMAT_UNKNOWN = 0,
+ NM_CRYPTO_FILE_FORMAT_X509,
+ NM_CRYPTO_FILE_FORMAT_RAW_KEY,
+ NM_CRYPTO_FILE_FORMAT_PKCS12
+} NMCryptoFileFormat;
+
+gboolean crypto_init (GError **error);
+
+GByteArray *crypto_decrypt_openssl_private_key_data (const guint8 *data,
+ gsize data_len,
+ const char *password,
+ NMCryptoKeyType *out_key_type,
+ GError **error);
+
+GByteArray *crypto_decrypt_openssl_private_key (const char *file,
+ const char *password,
+ NMCryptoKeyType *out_key_type,
+ GError **error);
+
+GByteArray *crypto_load_and_verify_certificate (const char *file,
+ NMCryptoFileFormat *out_file_format,
+ GError **error);
+
+gboolean crypto_is_pkcs12_file (const char *file, GError **error);
+
+gboolean crypto_is_pkcs12_data (const guint8 *data, gsize len, GError **error);
+
+NMCryptoFileFormat crypto_verify_private_key_data (const guint8 *data,
+ gsize data_len,
+ const char *password,
+ gboolean *out_is_encrypted,
+ GError **error);
+
+NMCryptoFileFormat crypto_verify_private_key (const char *file,
+ const char *password,
+ gboolean *out_is_encrypted,
+ GError **error);
+
+/* Internal utils API bits for crypto providers */
+
+void crypto_md5_hash (const char *salt,
+ gssize salt_len,
+ const char *password,
+ gssize password_len,
+ char *buffer,
+ gsize buflen);
+
+char *crypto_make_des_aes_key (const char *cipher,
+ const char *salt,
+ const gsize salt_len,
+ const char *password,
+ gsize *out_len,
+ GError **error);
+
+char * crypto_decrypt (const char *cipher,
+ int key_type,
+ const guint8 *data,
+ gsize data_len,
+ const char *iv,
+ const gsize iv_len,
+ const char *key,
+ const gsize key_len,
+ gsize *out_len,
+ GError **error);
+
+char * crypto_encrypt (const char *cipher,
+ const guint8 *data,
+ gsize data_len,
+ const char *iv,
+ gsize iv_len,
+ const char *key,
+ gsize key_len,
+ gsize *out_len,
+ GError **error);
+
+gboolean crypto_randomize (void *buffer, gsize buffer_len, GError **error);
+
+NMCryptoFileFormat crypto_verify_cert (const guint8 *data,
+ gsize len,
+ GError **error);
+
+gboolean crypto_verify_pkcs12 (const guint8 *data,
+ gsize data_len,
+ const char *password,
+ GError **error);
+
+gboolean crypto_verify_pkcs8 (const guint8 *data,
+ gsize data_len,
+ gboolean is_encrypted,
+ const char *password,
+ GError **error);
+
+#endif /* __CRYPTO_H__ */
diff --git a/libnm-core/crypto_gnutls.c b/libnm-core/crypto_gnutls.c
new file mode 100644
index 000000000..96dddb902
--- /dev/null
+++ b/libnm-core/crypto_gnutls.c
@@ -0,0 +1,454 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager Wireless Applet -- Display wireless access points and allow user control
+ *
+ * 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.
+ *
+ * Copyright 2007 - 2009 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <glib/gi18n-lib.h>
+
+#include <gcrypt.h>
+#include <gnutls/gnutls.h>
+#include <gnutls/x509.h>
+#include <gnutls/pkcs12.h>
+
+#include "crypto.h"
+#include "nm-errors.h"
+
+#define SALT_LEN 8
+
+static gboolean initialized = FALSE;
+
+gboolean
+crypto_init (GError **error)
+{
+ if (initialized)
+ return TRUE;
+
+ if (gnutls_global_init() != 0) {
+ gnutls_global_deinit();
+ g_set_error_literal (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_FAILED,
+ _("Failed to initialize the crypto engine."));
+ return FALSE;
+ }
+
+ initialized = TRUE;
+ return TRUE;
+}
+
+char *
+crypto_decrypt (const char *cipher,
+ int key_type,
+ const guint8 *data,
+ gsize data_len,
+ const char *iv,
+ const gsize iv_len,
+ const char *key,
+ const gsize key_len,
+ gsize *out_len,
+ GError **error)
+{
+ gcry_cipher_hd_t ctx;
+ gcry_error_t err;
+ int cipher_mech, i;
+ char *output = NULL;
+ gboolean success = FALSE;
+ gsize pad_len, real_iv_len;
+
+ if (!crypto_init (error))
+ return NULL;
+
+ if (!strcmp (cipher, CIPHER_DES_EDE3_CBC)) {
+ cipher_mech = GCRY_CIPHER_3DES;
+ real_iv_len = SALT_LEN;
+ } 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_ERROR_UNKNOWN_CIPHER,
+ _("Private key cipher '%s' was unknown."),
+ cipher);
+ return NULL;
+ }
+
+ if (iv_len < real_iv_len) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_INVALID_DATA,
+ _("Invalid IV length (must be at least %zd)."),
+ real_iv_len);
+ return NULL;
+ }
+
+ output = g_malloc0 (data_len);
+
+ err = gcry_cipher_open (&ctx, cipher_mech, GCRY_CIPHER_MODE_CBC, 0);
+ if (err) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_DECRYPTION_FAILED,
+ _("Failed to initialize the decryption cipher context: %s / %s."),
+ gcry_strsource (err), gcry_strerror (err));
+ goto out;
+ }
+
+ err = gcry_cipher_setkey (ctx, key, key_len);
+ if (err) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_DECRYPTION_FAILED,
+ _("Failed to set symmetric key for decryption: %s / %s."),
+ gcry_strsource (err), gcry_strerror (err));
+ goto out;
+ }
+
+ err = gcry_cipher_setiv (ctx, iv, iv_len);
+ if (err) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_DECRYPTION_FAILED,
+ _("Failed to set IV for decryption: %s / %s."),
+ gcry_strsource (err), gcry_strerror (err));
+ goto out;
+ }
+
+ err = gcry_cipher_decrypt (ctx, output, data_len, data, data_len);
+ if (err) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_DECRYPTION_FAILED,
+ _("Failed to decrypt the private key: %s / %s."),
+ gcry_strsource (err), gcry_strerror (err));
+ goto out;
+ }
+ pad_len = output[data_len - 1];
+
+ /* Check if the padding at the end of the decrypted data is valid */
+ if (pad_len == 0 || pad_len > real_iv_len) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_DECRYPTION_FAILED,
+ _("Failed to decrypt the private key: unexpected padding length."));
+ goto out;
+ }
+
+ /* Validate tail padding; last byte is the padding size, and all pad bytes
+ * should contain the padding size.
+ */
+ for (i = 1; i <= pad_len; ++i) {
+ if (output[data_len - i] != pad_len) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_DECRYPTION_FAILED,
+ _("Failed to decrypt the private key."));
+ goto out;
+ }
+ }
+
+ *out_len = data_len - pad_len;
+ success = TRUE;
+
+out:
+ if (!success) {
+ if (output) {
+ /* Don't expose key material */
+ memset (output, 0, data_len);
+ g_free (output);
+ output = NULL;
+ }
+ }
+ gcry_cipher_close (ctx);
+ return output;
+}
+
+char *
+crypto_encrypt (const char *cipher,
+ const guint8 *data,
+ gsize data_len,
+ const char *iv,
+ const gsize iv_len,
+ const char *key,
+ gsize key_len,
+ gsize *out_len,
+ GError **error)
+{
+ gcry_cipher_hd_t ctx;
+ gcry_error_t err;
+ int cipher_mech;
+ char *output = NULL;
+ gboolean success = FALSE;
+ gsize padded_buf_len, pad_len, output_len;
+ char *padded_buf = NULL;
+ guint32 i;
+ gsize salt_len;
+
+ if (!crypto_init (error))
+ return NULL;
+
+ if (!strcmp (cipher, CIPHER_DES_EDE3_CBC)) {
+ cipher_mech = GCRY_CIPHER_3DES;
+ 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_ERROR_UNKNOWN_CIPHER,
+ _("Private key cipher '%s' was unknown."),
+ cipher);
+ return NULL;
+ }
+
+ /* If data_len % ivlen == 0, then we add another complete block
+ * onto the end so that the decrypter knows there's padding.
+ */
+ pad_len = iv_len - (data_len % iv_len);
+ output_len = padded_buf_len = data_len + pad_len;
+ padded_buf = g_malloc0 (padded_buf_len);
+
+ memcpy (padded_buf, data, data_len);
+ for (i = 0; i < pad_len; i++)
+ padded_buf[data_len + i] = (guint8) (pad_len & 0xFF);
+
+ output = g_malloc0 (output_len);
+
+ err = gcry_cipher_open (&ctx, cipher_mech, GCRY_CIPHER_MODE_CBC, 0);
+ if (err) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_ENCRYPTION_FAILED,
+ _("Failed to initialize the encryption cipher context: %s / %s."),
+ gcry_strsource (err), gcry_strerror (err));
+ goto out;
+ }
+
+ err = gcry_cipher_setkey (ctx, key, key_len);
+ if (err) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_ENCRYPTION_FAILED,
+ _("Failed to set symmetric key for encryption: %s / %s."),
+ gcry_strsource (err), gcry_strerror (err));
+ goto out;
+ }
+
+ /* gcrypt only wants 8 bytes of the IV (same as the DES block length) */
+ err = gcry_cipher_setiv (ctx, iv, salt_len);
+ if (err) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_ENCRYPTION_FAILED,
+ _("Failed to set IV for encryption: %s / %s."),
+ gcry_strsource (err), gcry_strerror (err));
+ goto out;
+ }
+
+ err = gcry_cipher_encrypt (ctx, output, output_len, padded_buf, padded_buf_len);
+ if (err) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_ENCRYPTION_FAILED,
+ _("Failed to encrypt the data: %s / %s."),
+ gcry_strsource (err), gcry_strerror (err));
+ goto out;
+ }
+
+ *out_len = output_len;
+ success = TRUE;
+
+out:
+ if (padded_buf) {
+ memset (padded_buf, 0, padded_buf_len);
+ g_free (padded_buf);
+ padded_buf = NULL;
+ }
+
+ if (!success) {
+ if (output) {
+ /* Don't expose key material */
+ memset (output, 0, output_len);
+ g_free (output);
+ output = NULL;
+ }
+ }
+ gcry_cipher_close (ctx);
+ return output;
+}
+
+NMCryptoFileFormat
+crypto_verify_cert (const unsigned char *data,
+ gsize len,
+ GError **error)
+{
+ gnutls_x509_crt_t der;
+ gnutls_datum_t dt;
+ int err;
+
+ if (!crypto_init (error))
+ return NM_CRYPTO_FILE_FORMAT_UNKNOWN;
+
+ err = gnutls_x509_crt_init (&der);
+ if (err < 0) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_INVALID_DATA,
+ _("Error initializing certificate data: %s"),
+ gnutls_strerror (err));
+ return NM_CRYPTO_FILE_FORMAT_UNKNOWN;
+ }
+
+ /* Try DER first */
+ dt.data = (unsigned char *) data;
+ dt.size = len;
+ err = gnutls_x509_crt_import (der, &dt, GNUTLS_X509_FMT_DER);
+ if (err == GNUTLS_E_SUCCESS) {
+ gnutls_x509_crt_deinit (der);
+ return NM_CRYPTO_FILE_FORMAT_X509;
+ }
+
+ /* And PEM next */
+ err = gnutls_x509_crt_import (der, &dt, GNUTLS_X509_FMT_PEM);
+ gnutls_x509_crt_deinit (der);
+ if (err == GNUTLS_E_SUCCESS)
+ return NM_CRYPTO_FILE_FORMAT_X509;
+
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_INVALID_DATA,
+ _("Couldn't decode certificate: %s"),
+ gnutls_strerror (err));
+ return NM_CRYPTO_FILE_FORMAT_UNKNOWN;
+}
+
+gboolean
+crypto_verify_pkcs12 (const guint8 *data,
+ gsize data_len,
+ const char *password,
+ GError **error)
+{
+ gnutls_pkcs12_t p12;
+ gnutls_datum_t dt;
+ gboolean success = FALSE;
+ int err;
+
+ g_return_val_if_fail (data != NULL, FALSE);
+
+ if (!crypto_init (error))
+ return FALSE;
+
+ dt.data = (unsigned char *) data;
+ dt.size = data_len;
+
+ err = gnutls_pkcs12_init (&p12);
+ if (err < 0) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_FAILED,
+ _("Couldn't initialize PKCS#12 decoder: %s"),
+ gnutls_strerror (err));
+ return FALSE;
+ }
+
+ /* DER first */
+ err = gnutls_pkcs12_import (p12, &dt, GNUTLS_X509_FMT_DER, 0);
+ if (err < 0) {
+ /* PEM next */
+ err = gnutls_pkcs12_import (p12, &dt, GNUTLS_X509_FMT_PEM, 0);
+ if (err < 0) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_INVALID_DATA,
+ _("Couldn't decode PKCS#12 file: %s"),
+ gnutls_strerror (err));
+ goto out;
+ }
+ }
+
+ err = gnutls_pkcs12_verify_mac (p12, password);
+ if (err == GNUTLS_E_SUCCESS)
+ success = TRUE;
+ else {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_DECRYPTION_FAILED,
+ _("Couldn't verify PKCS#12 file: %s"),
+ gnutls_strerror (err));
+ }
+
+out:
+ gnutls_pkcs12_deinit (p12);
+ return success;
+}
+
+gboolean
+crypto_verify_pkcs8 (const guint8 *data,
+ gsize data_len,
+ gboolean is_encrypted,
+ const char *password,
+ GError **error)
+{
+ gnutls_x509_privkey_t p8;
+ gnutls_datum_t dt;
+ int err;
+
+ g_return_val_if_fail (data != NULL, FALSE);
+
+ if (!crypto_init (error))
+ return FALSE;
+
+ dt.data = (unsigned char *) data;
+ dt.size = data_len;
+
+ err = gnutls_x509_privkey_init (&p8);
+ if (err < 0) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_FAILED,
+ _("Couldn't initialize PKCS#8 decoder: %s"),
+ gnutls_strerror (err));
+ return FALSE;
+ }
+
+ err = gnutls_x509_privkey_import_pkcs8 (p8,
+ &dt,
+ GNUTLS_X509_FMT_DER,
+ is_encrypted ? password : NULL,
+ is_encrypted ? 0 : GNUTLS_PKCS_PLAIN);
+ gnutls_x509_privkey_deinit (p8);
+
+ if (err < 0) {
+ if (err == GNUTLS_E_UNKNOWN_CIPHER_TYPE) {
+ /* HACK: gnutls doesn't support all the cipher types that openssl
+ * can use with PKCS#8, so if we encounter one, we have to assume
+ * the given password works. gnutls needs to unsuckify, apparently.
+ * Specifically, by default openssl uses pbeWithMD5AndDES-CBC
+ * which gnutls does not support.
+ */
+ } else {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_INVALID_DATA,
+ _("Couldn't decode PKCS#8 file: %s"),
+ gnutls_strerror (err));
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+gboolean
+crypto_randomize (void *buffer, gsize buffer_len, GError **error)
+{
+ if (!crypto_init (error))
+ return FALSE;
+
+ gcry_randomize (buffer, buffer_len, GCRY_STRONG_RANDOM);
+ return TRUE;
+}
diff --git a/libnm-core/crypto_nss.c b/libnm-core/crypto_nss.c
new file mode 100644
index 000000000..d0c3506b8
--- /dev/null
+++ b/libnm-core/crypto_nss.c
@@ -0,0 +1,526 @@
+/* -*- 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.
+ *
+ * Copyright 2007 - 2009 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <glib/gi18n-lib.h>
+
+#include <prinit.h>
+#include <nss.h>
+#include <pk11pub.h>
+#include <pkcs11t.h>
+#include <cert.h>
+#include <prerror.h>
+#include <p12.h>
+#include <ciferfam.h>
+#include <p12plcy.h>
+
+#include "crypto.h"
+#include "nm-errors.h"
+
+static gboolean initialized = FALSE;
+
+gboolean
+crypto_init (GError **error)
+{
+ SECStatus ret;
+
+ if (initialized)
+ return TRUE;
+
+ PR_Init(PR_USER_THREAD, PR_PRIORITY_NORMAL, 1);
+ ret = NSS_NoDB_Init (NULL);
+ if (ret != SECSuccess) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_FAILED,
+ _("Failed to initialize the crypto engine: %d."),
+ PR_GetError ());
+ PR_Cleanup ();
+ return FALSE;
+ }
+
+ SEC_PKCS12EnableCipher(PKCS12_RC4_40, 1);
+ SEC_PKCS12EnableCipher(PKCS12_RC4_128, 1);
+ SEC_PKCS12EnableCipher(PKCS12_RC2_CBC_40, 1);
+ SEC_PKCS12EnableCipher(PKCS12_RC2_CBC_128, 1);
+ SEC_PKCS12EnableCipher(PKCS12_DES_56, 1);
+ SEC_PKCS12EnableCipher(PKCS12_DES_EDE3_168, 1);
+ SEC_PKCS12SetPreferredCipher(PKCS12_DES_EDE3_168, 1);
+
+ initialized = TRUE;
+ return TRUE;
+}
+
+char *
+crypto_decrypt (const char *cipher,
+ int key_type,
+ const guint8 *data,
+ gsize data_len,
+ const char *iv,
+ const gsize iv_len,
+ const char *key,
+ const gsize key_len,
+ gsize *out_len,
+ GError **error)
+{
+ char *output = NULL;
+ int decrypted_len = 0;
+ CK_MECHANISM_TYPE cipher_mech;
+ PK11SlotInfo *slot = NULL;
+ SECItem key_item;
+ PK11SymKey *sym_key = NULL;
+ SECItem *sec_param = NULL;
+ PK11Context *ctx = NULL;
+ SECStatus s;
+ gboolean success = FALSE;
+ unsigned int pad_len = 0, extra = 0;
+ guint32 i, real_iv_len = 0;
+
+ if (!crypto_init (error))
+ return NULL;
+
+ if (!strcmp (cipher, CIPHER_DES_EDE3_CBC)) {
+ cipher_mech = CKM_DES3_CBC_PAD;
+ real_iv_len = 8;
+ } 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_ERROR_UNKNOWN_CIPHER,
+ _("Private key cipher '%s' was unknown."),
+ cipher);
+ return NULL;
+ }
+
+ if (iv_len < real_iv_len) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_INVALID_DATA,
+ _("Invalid IV length (must be at least %d)."),
+ real_iv_len);
+ return NULL;
+ }
+
+ output = g_malloc0 (data_len);
+
+ slot = PK11_GetBestSlot (cipher_mech, NULL);
+ if (!slot) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_FAILED,
+ _("Failed to initialize the decryption cipher slot."));
+ goto out;
+ }
+
+ key_item.data = (unsigned char *) key;
+ key_item.len = key_len;
+ sym_key = PK11_ImportSymKey (slot, cipher_mech, PK11_OriginUnwrap, CKA_DECRYPT, &key_item, NULL);
+ if (!sym_key) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_DECRYPTION_FAILED,
+ _("Failed to set symmetric key for decryption."));
+ goto out;
+ }
+
+ key_item.data = (unsigned char *) iv;
+ key_item.len = real_iv_len;
+ sec_param = PK11_ParamFromIV (cipher_mech, &key_item);
+ if (!sec_param) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_DECRYPTION_FAILED,
+ _("Failed to set IV for decryption."));
+ goto out;
+ }
+
+ ctx = PK11_CreateContextBySymKey (cipher_mech, CKA_DECRYPT, sym_key, sec_param);
+ if (!ctx) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_DECRYPTION_FAILED,
+ _("Failed to initialize the decryption context."));
+ goto out;
+ }
+
+ s = PK11_CipherOp (ctx,
+ (unsigned char *) output,
+ &decrypted_len,
+ data_len,
+ data,
+ data_len);
+ if (s != SECSuccess) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_DECRYPTION_FAILED,
+ _("Failed to decrypt the private key: %d."),
+ PORT_GetError ());
+ goto out;
+ }
+
+ if (decrypted_len > data_len) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_DECRYPTION_FAILED,
+ _("Failed to decrypt the private key: decrypted data too large."));
+ goto out;
+ }
+
+ s = PK11_DigestFinal (ctx,
+ (unsigned char *) (output + decrypted_len),
+ &extra,
+ data_len - decrypted_len);
+ if (s != SECSuccess) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_DECRYPTION_FAILED,
+ _("Failed to finalize decryption of the private key: %d."),
+ PORT_GetError ());
+ goto out;
+ }
+ decrypted_len += extra;
+ pad_len = data_len - decrypted_len;
+
+ /* Check if the padding at the end of the decrypted data is valid */
+ if (pad_len == 0 || pad_len > real_iv_len) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_DECRYPTION_FAILED,
+ _("Failed to decrypt the private key: unexpected padding length."));
+ goto out;
+ }
+
+ /* Validate tail padding; last byte is the padding size, and all pad bytes
+ * should contain the padding size.
+ */
+ for (i = pad_len; i > 0; i--) {
+ if (output[data_len - i] != pad_len) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_DECRYPTION_FAILED,
+ _("Failed to decrypt the private key."));
+ goto out;
+ }
+ }
+
+ *out_len = decrypted_len;
+ success = TRUE;
+
+out:
+ if (ctx)
+ PK11_DestroyContext (ctx, PR_TRUE);
+ if (sym_key)
+ PK11_FreeSymKey (sym_key);
+ if (sec_param)
+ SECITEM_FreeItem (sec_param, PR_TRUE);
+ if (slot)
+ PK11_FreeSlot (slot);
+
+ if (!success) {
+ if (output) {
+ /* Don't expose key material */
+ memset (output, 0, data_len);
+ g_free (output);
+ output = NULL;
+ }
+ }
+ return output;
+}
+
+char *
+crypto_encrypt (const char *cipher,
+ const guint8 *data,
+ gsize data_len,
+ const char *iv,
+ gsize iv_len,
+ const char *key,
+ gsize key_len,
+ gsize *out_len,
+ GError **error)
+{
+ SECStatus ret;
+ CK_MECHANISM_TYPE cipher_mech = CKM_DES3_CBC_PAD;
+ PK11SlotInfo *slot = NULL;
+ SECItem key_item = { .data = (unsigned char *) key, .len = key_len };
+ SECItem iv_item = { .data = (unsigned char *) iv, .len = iv_len };
+ PK11SymKey *sym_key = NULL;
+ SECItem *sec_param = NULL;
+ PK11Context *ctx = NULL;
+ unsigned char *output, *padded_buf;
+ gsize output_len;
+ int encrypted_len = 0, i;
+ gboolean success = FALSE;
+ gsize padded_buf_len, pad_len;
+
+ if (!crypto_init (error))
+ return NULL;
+
+ 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_ERROR_UNKNOWN_CIPHER,
+ _("Private key cipher '%s' was unknown."),
+ cipher);
+ return NULL;
+ }
+
+ /* If data->len % ivlen == 0, then we add another complete block
+ * onto the end so that the decrypter knows there's padding.
+ */
+ pad_len = iv_len - (data_len % iv_len);
+ output_len = padded_buf_len = data_len + pad_len;
+ padded_buf = g_malloc0 (padded_buf_len);
+
+ memcpy (padded_buf, data, data_len);
+ for (i = 0; i < pad_len; i++)
+ padded_buf[data_len + i] = (guint8) (pad_len & 0xFF);
+
+ output = g_malloc0 (output_len);
+
+ slot = PK11_GetBestSlot (cipher_mech, NULL);
+ if (!slot) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_FAILED,
+ _("Failed to initialize the encryption cipher slot."));
+ goto out;
+ }
+
+ sym_key = PK11_ImportSymKey (slot, cipher_mech, PK11_OriginUnwrap, CKA_ENCRYPT, &key_item, NULL);
+ if (!sym_key) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_ENCRYPTION_FAILED,
+ _("Failed to set symmetric key for encryption."));
+ goto out;
+ }
+
+ sec_param = PK11_ParamFromIV (cipher_mech, &iv_item);
+ if (!sec_param) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_ENCRYPTION_FAILED,
+ _("Failed to set IV for encryption."));
+ goto out;
+ }
+
+ ctx = PK11_CreateContextBySymKey (cipher_mech, CKA_ENCRYPT, sym_key, sec_param);
+ if (!ctx) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_ENCRYPTION_FAILED,
+ _("Failed to initialize the encryption context."));
+ goto out;
+ }
+
+ ret = PK11_CipherOp (ctx, output, &encrypted_len, output_len, padded_buf, padded_buf_len);
+ if (ret != SECSuccess) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_ENCRYPTION_FAILED,
+ _("Failed to encrypt: %d."),
+ PORT_GetError ());
+ goto out;
+ }
+
+ if (encrypted_len != output_len) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_ENCRYPTION_FAILED,
+ _("Unexpected amount of data after encrypting."));
+ goto out;
+ }
+
+ *out_len = encrypted_len;
+ success = TRUE;
+
+out:
+ if (ctx)
+ PK11_DestroyContext (ctx, PR_TRUE);
+ if (sym_key)
+ PK11_FreeSymKey (sym_key);
+ if (sec_param)
+ SECITEM_FreeItem (sec_param, PR_TRUE);
+ if (slot)
+ PK11_FreeSlot (slot);
+
+ memset (padded_buf, 0, padded_buf_len);
+ g_free (padded_buf);
+
+ if (!success) {
+ memset (output, 0, output_len);
+ g_free (output);
+ output = NULL;
+ }
+ return (char *) output;
+}
+
+NMCryptoFileFormat
+crypto_verify_cert (const unsigned char *data,
+ gsize len,
+ GError **error)
+{
+ CERTCertificate *cert;
+
+ if (!crypto_init (error))
+ return NM_CRYPTO_FILE_FORMAT_UNKNOWN;
+
+ /* Try DER/PEM first */
+ cert = CERT_DecodeCertFromPackage ((char *) data, len);
+ if (!cert) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_INVALID_DATA,
+ _("Couldn't decode certificate: %d"),
+ PORT_GetError());
+ return NM_CRYPTO_FILE_FORMAT_UNKNOWN;
+ }
+
+ CERT_DestroyCertificate (cert);
+ return NM_CRYPTO_FILE_FORMAT_X509;
+}
+
+gboolean
+crypto_verify_pkcs12 (const guint8 *data,
+ gsize data_len,
+ const char *password,
+ GError **error)
+{
+ SEC_PKCS12DecoderContext *p12ctx = NULL;
+ SECItem pw = { 0 };
+ PK11SlotInfo *slot = NULL;
+ SECStatus s;
+ gunichar2 *ucs2_password;
+ glong ucs2_chars = 0;
+#ifndef WORDS_BIGENDIAN
+ guint16 *p;
+#endif /* WORDS_BIGENDIAN */
+
+ if (error)
+ g_return_val_if_fail (*error == NULL, FALSE);
+
+ if (!crypto_init (error))
+ return FALSE;
+
+ /* PKCS#12 passwords are apparently UCS2 BIG ENDIAN, and NSS doesn't do
+ * any conversions for us.
+ */
+ if (password && *password) {
+ if (!g_utf8_validate (password, -1, NULL)) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_INVALID_PASSWORD,
+ _("Password must be UTF-8"));
+ return FALSE;
+ }
+ ucs2_password = g_utf8_to_utf16 (password, strlen (password), NULL, &ucs2_chars, NULL);
+ /* Can't fail if g_utf8_validate() succeeded */
+ g_return_val_if_fail (ucs2_password != NULL && ucs2_chars != 0, FALSE);
+
+ ucs2_chars *= 2; /* convert # UCS2 characters -> bytes */
+ pw.data = PORT_ZAlloc(ucs2_chars + 2);
+ memcpy (pw.data, ucs2_password, ucs2_chars);
+ pw.len = ucs2_chars + 2; /* include terminating NULL */
+
+ memset (ucs2_password, 0, ucs2_chars);
+ g_free (ucs2_password);
+
+#ifndef WORDS_BIGENDIAN
+ for (p = (guint16 *) pw.data; p < (guint16 *) (pw.data + pw.len); p++)
+ *p = GUINT16_SWAP_LE_BE (*p);
+#endif /* WORDS_BIGENDIAN */
+ } else {
+ /* NULL password */
+ pw.data = NULL;
+ pw.len = 0;
+ }
+
+ slot = PK11_GetInternalKeySlot();
+ p12ctx = SEC_PKCS12DecoderStart (&pw, slot, NULL, NULL, NULL, NULL, NULL, NULL);
+ if (!p12ctx) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_FAILED,
+ _("Couldn't initialize PKCS#12 decoder: %d"),
+ PORT_GetError());
+ goto error;
+ }
+
+ s = SEC_PKCS12DecoderUpdate (p12ctx, (guint8 *)data, data_len);
+ if (s != SECSuccess) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_INVALID_DATA,
+ _("Couldn't decode PKCS#12 file: %d"),
+ PORT_GetError());
+ goto error;
+ }
+
+ s = SEC_PKCS12DecoderVerify (p12ctx);
+ if (s != SECSuccess) {
+ g_set_error (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_DECRYPTION_FAILED,
+ _("Couldn't verify PKCS#12 file: %d"),
+ PORT_GetError());
+ goto error;
+ }
+
+ SEC_PKCS12DecoderFinish (p12ctx);
+ SECITEM_ZfreeItem (&pw, PR_FALSE);
+ return TRUE;
+
+error:
+ if (p12ctx)
+ SEC_PKCS12DecoderFinish (p12ctx);
+
+ if (slot)
+ PK11_FreeSlot(slot);
+
+ SECITEM_ZfreeItem (&pw, PR_FALSE);
+ return FALSE;
+}
+
+gboolean
+crypto_verify_pkcs8 (const guint8 *data,
+ gsize data_len,
+ gboolean is_encrypted,
+ const char *password,
+ GError **error)
+{
+ g_return_val_if_fail (data != NULL, FALSE);
+
+ if (!crypto_init (error))
+ return FALSE;
+
+ /* NSS apparently doesn't do PKCS#8 natively, but you have to put the
+ * PKCS#8 key into a PKCS#12 file and import that?? So until we figure
+ * all that out, we can only assume the password is valid.
+ */
+ return TRUE;
+}
+
+gboolean
+crypto_randomize (void *buffer, gsize buffer_len, GError **error)
+{
+ SECStatus s;
+
+ if (!crypto_init (error))
+ return FALSE;
+
+ s = PK11_GenerateRandom (buffer, buffer_len);
+ if (s != SECSuccess) {
+ g_set_error_literal (error, NM_CRYPTO_ERROR,
+ NM_CRYPTO_ERROR_FAILED,
+ _("Could not generate random data."));
+ return FALSE;
+ }
+ return TRUE;
+}
diff --git a/libnm-core/nm-connection-private.h b/libnm-core/nm-connection-private.h
new file mode 100644
index 000000000..620e6a81e
--- /dev/null
+++ b/libnm-core/nm-connection-private.h
@@ -0,0 +1,35 @@
+/* -*- 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 2014 Red Hat, Inc.
+ */
+
+#ifndef __NM_CONNECTION_PRIVATE_H__
+#define __NM_CONNECTION_PRIVATE_H__
+
+#include "nm-setting.h"
+#include "nm-connection.h"
+
+NMSetting *_nm_connection_find_base_type_setting (NMConnection *connection);
+
+const char *_nm_connection_detect_slave_type (NMConnection *connection,
+ NMSetting **out_s_port);
+
+gboolean _nm_connection_verify_required_interface_name (NMConnection *connection,
+ GError **error);
+
+#endif /* __NM_CONNECTION_PRIVATE_H__ */
diff --git a/libnm-core/nm-connection.c b/libnm-core/nm-connection.c
new file mode 100644
index 000000000..907713bd0
--- /dev/null
+++ b/libnm-core/nm-connection.c
@@ -0,0 +1,2077 @@
+/* -*- 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 2007 - 2013 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ */
+
+#include "config.h"
+
+#include <glib-object.h>
+#include <glib/gi18n-lib.h>
+#include <string.h>
+#include "nm-connection.h"
+#include "nm-connection-private.h"
+#include "nm-utils.h"
+#include "nm-setting-private.h"
+#include "nm-core-internal.h"
+
+/**
+ * SECTION:nm-connection
+ * @short_description: Describes a connection to specific network or provider
+ *
+ * An #NMConnection 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 #NMConnection, or
+ * disconnected without having been connected with a #NMConnection.
+ *
+ * Each #NMConnection contains a list of #NMSetting objects usually referenced
+ * by name (using nm_connection_get_setting_by_name()) or by type (with
+ * nm_connection_get_setting()). 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).
+ *
+ */
+
+typedef struct {
+ NMConnection *self;
+
+ GHashTable *settings;
+
+ /* D-Bus path of the connection, if any */
+ char *path;
+} NMConnectionPrivate;
+
+static NMConnectionPrivate *nm_connection_get_private (NMConnection *connection);
+#define NM_CONNECTION_GET_PRIVATE(o) (nm_connection_get_private ((NMConnection *)o))
+
+G_DEFINE_INTERFACE (NMConnection, nm_connection, G_TYPE_OBJECT)
+
+enum {
+ SECRETS_UPDATED,
+ SECRETS_CLEARED,
+ CHANGED,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+
+static NMSettingVerifyResult _nm_connection_verify (NMConnection *connection, GError **error);
+
+
+/*************************************************************/
+
+static void
+setting_changed_cb (NMSetting *setting,
+ GParamSpec *pspec,
+ NMConnection *self)
+{
+ g_signal_emit (self, signals[CHANGED], 0);
+}
+
+static gboolean
+_setting_release (gpointer key, gpointer value, gpointer user_data)
+{
+ g_signal_handlers_disconnect_by_func (user_data, setting_changed_cb, value);
+ return TRUE;
+}
+
+static void
+_nm_connection_add_setting (NMConnection *connection, NMSetting *setting)
+{
+ NMConnectionPrivate *priv = NM_CONNECTION_GET_PRIVATE (connection);
+ const char *name = G_OBJECT_TYPE_NAME (setting);
+ NMSetting *s_old;
+
+ if ((s_old = g_hash_table_lookup (priv->settings, (gpointer) name)))
+ g_signal_handlers_disconnect_by_func (s_old, setting_changed_cb, connection);
+ g_hash_table_insert (priv->settings, (gpointer) name, setting);
+ /* Listen for property changes so we can emit the 'changed' signal */
+ g_signal_connect (setting, "notify", (GCallback) setting_changed_cb, connection);
+}
+
+/**
+ * nm_connection_add_setting:
+ * @connection: a #NMConnection
+ * @setting: (transfer full): the #NMSetting to add to the connection object
+ *
+ * Adds a #NMSetting to the connection, replacing any previous #NMSetting of the
+ * same name which has previously been added to the #NMConnection. The
+ * connection takes ownership of the #NMSetting object and does not increase
+ * the setting object's reference count.
+ **/
+void
+nm_connection_add_setting (NMConnection *connection, NMSetting *setting)
+{
+ g_return_if_fail (NM_IS_CONNECTION (connection));
+ g_return_if_fail (NM_IS_SETTING (setting));
+
+ _nm_connection_add_setting (connection, setting);
+ g_signal_emit (connection, signals[CHANGED], 0);
+}
+
+/**
+ * nm_connection_remove_setting:
+ * @connection: a #NMConnection
+ * @setting_type: the #GType of the setting object to remove
+ *
+ * Removes the #NMSetting with the given #GType from the #NMConnection. This
+ * operation dereferences the #NMSetting object.
+ **/
+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));
+
+ 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);
+ }
+}
+
+/**
+ * nm_connection_get_setting:
+ * @connection: a #NMConnection
+ * @setting_type: the #GType of the setting object to return
+ *
+ * Gets the #NMSetting with the given #GType, if one has been previously added
+ * to the #NMConnection.
+ *
+ * Returns: (transfer none): the #NMSetting, or %NULL if no setting of that type was previously
+ * added to the #NMConnection
+ **/
+NMSetting *
+nm_connection_get_setting (NMConnection *connection, GType setting_type)
+{
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
+ 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));
+}
+
+/**
+ * nm_connection_get_setting_by_name:
+ * @connection: a #NMConnection
+ * @name: a setting name
+ *
+ * Gets the #NMSetting with the given name, if one has been previously added
+ * the #NMConnection.
+ *
+ * Returns: (transfer none): the #NMSetting, or %NULL if no setting with that name was previously
+ * added to the #NMConnection
+ **/
+NMSetting *
+nm_connection_get_setting_by_name (NMConnection *connection, const char *name)
+{
+ GType type;
+
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
+ g_return_val_if_fail (name != NULL, NULL);
+
+ type = nm_setting_lookup_type (name);
+
+ return type ? nm_connection_get_setting (connection, type) : NULL;
+}
+
+static gboolean
+validate_permissions_type (GVariant *variant, GError **error)
+{
+ GVariant *s_con;
+ GVariant *permissions;
+ gboolean valid = TRUE;
+
+ /* Ensure the connection::permissions item (if present) is the correct
+ * type, otherwise the g_object_set() will throw a warning and ignore the
+ * error, leaving us with no permissions.
+ */
+ s_con = g_variant_lookup_value (variant, NM_SETTING_CONNECTION_SETTING_NAME, NM_VARIANT_TYPE_SETTING);
+ if (!s_con)
+ return TRUE;
+
+ permissions = g_variant_lookup_value (s_con, NM_SETTING_CONNECTION_PERMISSIONS, NULL);
+ if (permissions) {
+ if (!g_variant_is_of_type (permissions, G_VARIANT_TYPE_STRING_ARRAY)) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("wrong type; should be a list of strings."));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_PERMISSIONS);
+ valid = FALSE;
+ }
+ g_variant_unref (permissions);
+ }
+
+ g_variant_unref (s_con);
+ return valid;
+}
+
+/**
+ * nm_connection_replace_settings:
+ * @connection: a #NMConnection
+ * @new_settings: a #GVariant of type %NM_VARIANT_TYPE_CONNECTION, with the new settings
+ * @error: location to store error, or %NULL
+ *
+ * Replaces @connection's settings with @new_settings (which must be
+ * syntactically valid, and describe a known type of connection, but does not
+ * need to result in a connection that passes nm_connection_verify()).
+ *
+ * Returns: %TRUE if connection was updated, %FALSE if @new_settings could not
+ * be deserialized (in which case @connection will be unchanged).
+ **/
+gboolean
+nm_connection_replace_settings (NMConnection *connection,
+ GVariant *new_settings,
+ GError **error)
+{
+ NMConnectionPrivate *priv;
+ GVariantIter iter;
+ const char *setting_name;
+ GVariant *setting_dict;
+ GSList *settings = NULL, *s;
+ gboolean changed;
+
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE);
+ g_return_val_if_fail (g_variant_is_of_type (new_settings, NM_VARIANT_TYPE_CONNECTION), FALSE);
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ priv = NM_CONNECTION_GET_PRIVATE (connection);
+
+ if (!validate_permissions_type (new_settings, error))
+ return FALSE;
+
+ g_variant_iter_init (&iter, new_settings);
+ while (g_variant_iter_next (&iter, "{&s@a{sv}}", &setting_name, &setting_dict)) {
+ NMSetting *setting;
+ GType type;
+
+ type = nm_setting_lookup_type (setting_name);
+ if (type == G_TYPE_INVALID) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_SETTING,
+ _("unknown setting name"));
+ g_prefix_error (error, "%s: ", setting_name);
+ g_variant_unref (setting_dict);
+ g_slist_free_full (settings, g_object_unref);
+ return FALSE;
+ }
+
+ setting = _nm_setting_new_from_dbus (type, setting_dict, new_settings, error);
+ g_variant_unref (setting_dict);
+
+ if (!setting) {
+ g_slist_free_full (settings, g_object_unref);
+ return FALSE;
+ }
+
+ settings = g_slist_prepend (settings, setting);
+ }
+
+ if (g_hash_table_size (priv->settings) > 0) {
+ g_hash_table_foreach_remove (priv->settings, _setting_release, connection);
+ changed = TRUE;
+ } else
+ changed = (settings != NULL);
+
+ for (s = settings; s; s = s->next)
+ _nm_connection_add_setting (connection, s->data);
+
+ if (changed)
+ g_signal_emit (connection, signals[CHANGED], 0);
+ return TRUE;
+}
+
+/**
+ * nm_connection_replace_settings_from_connection:
+ * @connection: a #NMConnection
+ * @new_connection: a #NMConnection to replace the settings of @connection with
+ *
+ * Deep-copies the settings of @new_connection and replaces the settings of @connection
+ * with the copied settings.
+ **/
+void
+nm_connection_replace_settings_from_connection (NMConnection *connection,
+ NMConnection *new_connection)
+{
+ NMConnectionPrivate *priv, *new_priv;
+ GHashTableIter iter;
+ NMSetting *setting;
+ gboolean changed;
+
+ g_return_if_fail (NM_IS_CONNECTION (connection));
+ g_return_if_fail (NM_IS_CONNECTION (new_connection));
+
+ /* When 'connection' and 'new_connection' are the same object simply return
+ * in order not to destroy 'connection'.
+ */
+ if (connection == new_connection)
+ return;
+
+ /* No need to validate permissions like nm_connection_replace_settings()
+ * since we're dealing with an NMConnection which has already done that.
+ */
+
+ priv = NM_CONNECTION_GET_PRIVATE (connection);
+ new_priv = NM_CONNECTION_GET_PRIVATE (new_connection);
+
+ if ((changed = g_hash_table_size (priv->settings) > 0))
+ g_hash_table_foreach_remove (priv->settings, _setting_release, connection);
+
+ if (g_hash_table_size (new_priv->settings)) {
+ g_hash_table_iter_init (&iter, new_priv->settings);
+ while (g_hash_table_iter_next (&iter, NULL, (gpointer) &setting))
+ _nm_connection_add_setting (connection, nm_setting_duplicate (setting));
+ changed = TRUE;
+ }
+
+ if (changed)
+ g_signal_emit (connection, signals[CHANGED], 0);
+}
+
+/**
+ * nm_connection_clear_settings:
+ * @connection: a #NMConnection
+ *
+ * Deletes all of @connection's settings.
+ **/
+void
+nm_connection_clear_settings (NMConnection *connection)
+{
+ NMConnectionPrivate *priv;
+
+ g_return_if_fail (NM_IS_CONNECTION (connection));
+
+ priv = NM_CONNECTION_GET_PRIVATE (connection);
+
+ if (g_hash_table_size (priv->settings) > 0) {
+ g_hash_table_foreach_remove (priv->settings, _setting_release, connection);
+ g_signal_emit (connection, signals[CHANGED], 0);
+ }
+}
+
+/**
+ * nm_connection_compare:
+ * @a: a #NMConnection
+ * @b: a second #NMConnection to compare with the first
+ * @flags: compare flags, e.g. %NM_SETTING_COMPARE_FLAG_EXACT
+ *
+ * Compares two #NMConnection objects for similarity, with comparison behavior
+ * modified by a set of flags. See nm_setting_compare() for a description of
+ * each flag's behavior.
+ *
+ * Returns: %TRUE if the comparison succeeds, %FALSE if it does not
+ **/
+gboolean
+nm_connection_compare (NMConnection *a,
+ NMConnection *b,
+ NMSettingCompareFlags flags)
+{
+ GHashTableIter iter;
+ NMSetting *src;
+
+ if (a == b)
+ return TRUE;
+ if (!a || !b)
+ return FALSE;
+
+ /* 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 TRUE;
+}
+
+
+static void
+diff_one_connection (NMConnection *a,
+ NMConnection *b,
+ NMSettingCompareFlags flags,
+ gboolean invert_results,
+ GHashTable *diffs)
+{
+ NMConnectionPrivate *priv = NM_CONNECTION_GET_PRIVATE (a);
+ GHashTableIter iter;
+ NMSetting *a_setting = NULL;
+
+ g_hash_table_iter_init (&iter, priv->settings);
+ while (g_hash_table_iter_next (&iter, NULL, (gpointer) &a_setting)) {
+ NMSetting *b_setting = NULL;
+ const char *setting_name = nm_setting_get_name (a_setting);
+ GHashTable *results;
+ gboolean new_results = TRUE;
+
+ if (b)
+ b_setting = nm_connection_get_setting (b, G_OBJECT_TYPE (a_setting));
+
+ results = g_hash_table_lookup (diffs, setting_name);
+ if (results)
+ new_results = FALSE;
+
+ if (!nm_setting_diff (a_setting, b_setting, flags, invert_results, &results)) {
+ if (new_results)
+ g_hash_table_insert (diffs, g_strdup (setting_name), results);
+ }
+ }
+}
+
+/**
+ * nm_connection_diff:
+ * @a: a #NMConnection
+ * @b: a second #NMConnection to compare with the first
+ * @flags: compare flags, e.g. %NM_SETTING_COMPARE_FLAG_EXACT
+ * @out_settings: (element-type utf8 GLib.HashTable): 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 %NMSettingDiffResult as a bitfield
+ *
+ * Compares two #NMConnection objects for similarity, with comparison behavior
+ * modified by a set of flags. See nm_setting_compare() 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 @out_settings hash table.
+ * No values are returned, only key names.
+ *
+ * Returns: %TRUE if the connections contain the same values, %FALSE if they do
+ * not
+ **/
+gboolean
+nm_connection_diff (NMConnection *a,
+ NMConnection *b,
+ NMSettingCompareFlags flags,
+ GHashTable **out_settings)
+{
+ GHashTable *diffs;
+
+ 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);
+ if (b)
+ g_return_val_if_fail (NM_IS_CONNECTION (b), FALSE);
+
+ if (a == b)
+ return TRUE;
+
+ diffs = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) g_hash_table_destroy);
+
+ /* Diff A to B, then B to A to capture keys in B that aren't in A */
+ diff_one_connection (a, b, flags, FALSE, diffs);
+ if (b)
+ diff_one_connection (b, a, flags, TRUE, diffs);
+
+ if (g_hash_table_size (diffs) == 0)
+ g_hash_table_destroy (diffs);
+ else
+ *out_settings = diffs;
+
+ return *out_settings ? FALSE : TRUE;
+}
+
+NMSetting *
+_nm_connection_find_base_type_setting (NMConnection *connection)
+{
+ NMConnectionPrivate *priv = NM_CONNECTION_GET_PRIVATE (connection);
+ GHashTableIter iter;
+ NMSetting *setting = NULL, *s_iter;
+
+ g_hash_table_iter_init (&iter, priv->settings);
+ while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &s_iter)) {
+ if (!_nm_setting_is_base_type (s_iter))
+ continue;
+
+ if (setting) {
+ /* FIXME: currently, if there is more than one matching base type,
+ * we cannot detect the base setting.
+ * See: https://bugzilla.gnome.org/show_bug.cgi?id=696936#c8 */
+ return NULL;
+ }
+ setting = s_iter;
+ }
+ return setting;
+}
+
+static gboolean
+_normalize_connection_uuid (NMConnection *self)
+{
+ NMSettingConnection *s_con = nm_connection_get_setting_connection (self);
+ char *uuid;
+
+ g_assert (s_con);
+
+ if (nm_setting_connection_get_uuid (s_con))
+ return FALSE;
+
+ uuid = nm_utils_uuid_generate ();
+ g_object_set (s_con, NM_SETTING_CONNECTION_UUID, uuid, NULL);
+ g_free (uuid);
+
+ return TRUE;
+}
+
+static gboolean
+_normalize_connection_type (NMConnection *self)
+{
+ NMSettingConnection *s_con = nm_connection_get_setting_connection (self);
+ NMSetting *s_base = NULL;
+ const char *type;
+
+ type = nm_setting_connection_get_connection_type (s_con);
+
+ if (type) {
+ s_base = nm_connection_get_setting_by_name (self, type);
+
+ if (!s_base) {
+ GType base_type = nm_setting_lookup_type (type);
+
+ g_return_val_if_fail (base_type, FALSE);
+ nm_connection_add_setting (self, g_object_new (base_type, NULL));
+ return TRUE;
+ }
+ } else {
+ s_base = _nm_connection_find_base_type_setting (self);
+ g_return_val_if_fail (s_base, FALSE);
+
+ type = nm_setting_get_name (s_base);
+ g_object_set (s_con, NM_SETTING_CONNECTION_TYPE, type, NULL);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+const char *
+_nm_connection_detect_slave_type (NMConnection *connection, NMSetting **out_s_port)
+{
+ NMConnectionPrivate *priv = NM_CONNECTION_GET_PRIVATE (connection);
+ GHashTableIter iter;
+ const char *slave_type = NULL;
+ NMSetting *s_port = NULL, *s_iter;
+
+ g_hash_table_iter_init (&iter, priv->settings);
+ while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &s_iter)) {
+ const char *name = nm_setting_get_name (s_iter);
+ const char *i_slave_type = NULL;
+
+ if (!strcmp (name, NM_SETTING_BRIDGE_PORT_SETTING_NAME))
+ i_slave_type = NM_SETTING_BRIDGE_SETTING_NAME;
+ else if (!strcmp (name, NM_SETTING_TEAM_PORT_SETTING_NAME))
+ i_slave_type = NM_SETTING_TEAM_SETTING_NAME;
+ else
+ continue;
+
+ if (slave_type) {
+ /* there are more then one matching port types, cannot detect the slave type. */
+ slave_type = NULL;
+ s_port = NULL;
+ break;
+ }
+ slave_type = i_slave_type;
+ s_port = s_iter;
+ }
+
+ if (out_s_port)
+ *out_s_port = s_port;
+ return slave_type;
+}
+
+static gboolean
+_normalize_connection_slave_type (NMConnection *self)
+{
+ NMSettingConnection *s_con = nm_connection_get_setting_connection (self);
+ const char *slave_type, *port_type;
+
+ if (!s_con)
+ return FALSE;
+ if (!nm_setting_connection_get_master (s_con))
+ return FALSE;
+
+ slave_type = nm_setting_connection_get_slave_type (s_con);
+ if (slave_type) {
+ if ( _nm_setting_slave_type_is_valid (slave_type, &port_type)
+ && port_type) {
+ NMSetting *s_port;
+
+ s_port = nm_connection_get_setting_by_name (self, port_type);
+ if (!s_port) {
+ GType p_type = nm_setting_lookup_type (port_type);
+
+ g_return_val_if_fail (p_type, FALSE);
+ nm_connection_add_setting (self, g_object_new (p_type, NULL));
+ return TRUE;
+ }
+ }
+ } else {
+ if ((slave_type = _nm_connection_detect_slave_type (self, NULL))) {
+ g_object_set (s_con, NM_SETTING_CONNECTION_SLAVE_TYPE, slave_type, NULL);
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+static gboolean
+_normalize_ip_config (NMConnection *self, GHashTable *parameters)
+{
+ NMSettingConnection *s_con = nm_connection_get_setting_connection (self);
+ const char *default_ip4_method = NM_SETTING_IP4_CONFIG_METHOD_AUTO;
+ const char *default_ip6_method = NULL;
+ NMSettingIPConfig *s_ip4, *s_ip6;
+ NMSetting *setting;
+
+ if (parameters)
+ default_ip6_method = g_hash_table_lookup (parameters, NM_CONNECTION_NORMALIZE_PARAM_IP6_CONFIG_METHOD);
+ if (!default_ip6_method)
+ default_ip6_method = NM_SETTING_IP6_CONFIG_METHOD_AUTO;
+
+ s_ip4 = nm_connection_get_setting_ip4_config (self);
+ s_ip6 = nm_connection_get_setting_ip6_config (self);
+
+ if (nm_setting_connection_get_master (s_con)) {
+ /* Slave connections don't have IP configuration. */
+
+ if (s_ip4)
+ nm_connection_remove_setting (self, NM_TYPE_SETTING_IP4_CONFIG);
+
+ if (s_ip6)
+ nm_connection_remove_setting (self, NM_TYPE_SETTING_IP6_CONFIG);
+
+ return s_ip4 || s_ip6;
+ } 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 ();
+
+ g_object_set (setting,
+ NM_SETTING_IP_CONFIG_METHOD, default_ip4_method,
+ NULL);
+ nm_connection_add_setting (self, setting);
+ }
+ if (!s_ip6) {
+ setting = nm_setting_ip6_config_new ();
+
+ g_object_set (setting,
+ NM_SETTING_IP_CONFIG_METHOD, default_ip6_method,
+ NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
+ NULL);
+ nm_connection_add_setting (self, setting);
+ }
+ return !s_ip4 || !s_ip6;
+ }
+}
+
+static gboolean
+_normalize_infiniband_mtu (NMConnection *self, GHashTable *parameters)
+{
+ NMSettingInfiniband *s_infini = nm_connection_get_setting_infiniband (self);
+
+ if (s_infini) {
+ const char *transport_mode = nm_setting_infiniband_get_transport_mode (s_infini);
+ guint32 max_mtu = 0;
+
+ if (transport_mode) {
+ if (!strcmp (transport_mode, "datagram"))
+ max_mtu = 2044;
+ else if (!strcmp (transport_mode, "connected"))
+ max_mtu = 65520;
+
+ if (max_mtu && nm_setting_infiniband_get_mtu (s_infini) > max_mtu) {
+ g_object_set (s_infini, NM_SETTING_INFINIBAND_MTU, max_mtu, NULL);
+ return TRUE;
+ }
+ }
+ }
+ return FALSE;
+}
+
+/**
+ * nm_connection_verify:
+ * @connection: the #NMConnection to verify
+ * @error: location to store error, or %NULL
+ *
+ * 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 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
+ * #NMSettingWired object's 'mac-address' property must be a validly formatted
+ * MAC address. The returned #GError contains information about which
+ * setting and which property failed validation, and how it failed validation.
+ *
+ * Returns: %TRUE if the connection is valid, %FALSE if it is not
+ **/
+gboolean
+nm_connection_verify (NMConnection *connection, GError **error)
+{
+ NMSettingVerifyResult result;
+
+ result = _nm_connection_verify (connection, error);
+
+ /* we treat normalizable connections as valid. */
+ if (result == NM_SETTING_VERIFY_NORMALIZABLE)
+ g_clear_error (error);
+
+ return result == NM_SETTING_VERIFY_SUCCESS || result == NM_SETTING_VERIFY_NORMALIZABLE;
+}
+
+static NMSettingVerifyResult
+_nm_connection_verify (NMConnection *connection, GError **error)
+{
+ NMConnectionPrivate *priv;
+ NMSettingConnection *s_con;
+ NMSettingIPConfig *s_ip4, *s_ip6;
+ GHashTableIter iter;
+ gpointer value;
+ GSList *all_settings = NULL, *setting_i;
+ NMSettingVerifyResult success = NM_SETTING_VERIFY_ERROR;
+ GError *normalizable_error = NULL;
+ NMSettingVerifyResult normalizable_error_type = NM_SETTING_VERIFY_SUCCESS;
+
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NM_SETTING_VERIFY_ERROR);
+ g_return_val_if_fail (!error || !*error, NM_SETTING_VERIFY_ERROR);
+
+ priv = NM_CONNECTION_GET_PRIVATE (connection);
+
+ /* First, make sure there's at least 'connection' setting */
+ s_con = nm_connection_get_setting_connection (connection);
+ if (!s_con) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_MISSING_SETTING,
+ _("setting not found"));
+ g_prefix_error (error, "%s: ", NM_SETTING_CONNECTION_SETTING_NAME);
+ goto EXIT;
+ }
+
+ /* Build up the list of settings */
+ g_hash_table_iter_init (&iter, priv->settings);
+ while (g_hash_table_iter_next (&iter, NULL, &value)) {
+ /* Order NMSettingConnection so that it will be verified first.
+ * The reason is, that errors in this setting might be more fundamental
+ * and should be checked and reported with higher priority.
+ */
+ if (value == s_con)
+ all_settings = g_slist_append (all_settings, value);
+ else
+ all_settings = g_slist_prepend (all_settings, value);
+ }
+ all_settings = g_slist_reverse (all_settings);
+
+ /* Now, run the verify function of each setting */
+ for (setting_i = all_settings; setting_i; setting_i = setting_i->next) {
+ GError *verify_error = NULL;
+ NMSettingVerifyResult verify_result;
+
+ /* verify all settings. We stop if we find the first non-normalizable
+ * @NM_SETTING_VERIFY_ERROR. If we find normalizable errors we continue
+ * but remember the error to return it to the user.
+ * @NM_SETTING_VERIFY_NORMALIZABLE_ERROR has a higher priority then
+ * @NM_SETTING_VERIFY_NORMALIZABLE, so, if we encounter such an error type,
+ * we remember it instead (to return it as output).
+ **/
+ verify_result = _nm_setting_verify (NM_SETTING (setting_i->data), connection, &verify_error);
+ if (verify_result == NM_SETTING_VERIFY_NORMALIZABLE ||
+ verify_result == NM_SETTING_VERIFY_NORMALIZABLE_ERROR) {
+ if ( verify_result == NM_SETTING_VERIFY_NORMALIZABLE_ERROR
+ && normalizable_error_type == NM_SETTING_VERIFY_NORMALIZABLE) {
+ /* NORMALIZABLE_ERROR has higher priority. */
+ g_clear_error (&normalizable_error);
+ }
+ if (!normalizable_error) {
+ g_propagate_error (&normalizable_error, verify_error);
+ verify_error = NULL;
+ normalizable_error_type = verify_result;
+ }
+ } else if (verify_result != NM_SETTING_VERIFY_SUCCESS) {
+ g_propagate_error (error, verify_error);
+ g_slist_free (all_settings);
+ g_return_val_if_fail (verify_result == NM_SETTING_VERIFY_ERROR, success);
+ goto EXIT;
+ }
+ g_clear_error (&verify_error);
+ }
+ g_slist_free (all_settings);
+
+ 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)) {
+ if ((normalizable_error_type == NM_SETTING_VERIFY_SUCCESS ||
+ (normalizable_error_type == NM_SETTING_VERIFY_NORMALIZABLE)) && (s_ip4 || s_ip6)) {
+ g_clear_error (&normalizable_error);
+ g_set_error_literal (&normalizable_error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_SETTING,
+ _("setting not allowed in slave connection"));
+ g_prefix_error (&normalizable_error, "%s: ",
+ s_ip4 ? NM_SETTING_IP4_CONFIG_SETTING_NAME : NM_SETTING_IP6_CONFIG_SETTING_NAME);
+ /* having a slave with IP config *was* and is a verify() error. */
+ normalizable_error_type = NM_SETTING_VERIFY_NORMALIZABLE_ERROR;
+ }
+ } else {
+ if (normalizable_error_type == NM_SETTING_VERIFY_SUCCESS && (!s_ip4 || !s_ip6)) {
+ g_set_error_literal (&normalizable_error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_MISSING_SETTING,
+ _("setting is required for non-slave connections"));
+ g_prefix_error (&normalizable_error, "%s: ",
+ !s_ip4 ? NM_SETTING_IP4_CONFIG_SETTING_NAME : NM_SETTING_IP6_CONFIG_SETTING_NAME);
+ /* having a master without IP config was not a verify() error, accept
+ * it for backward compatibility. */
+ normalizable_error_type = NM_SETTING_VERIFY_NORMALIZABLE;
+ }
+ }
+
+ if (normalizable_error_type != NM_SETTING_VERIFY_SUCCESS) {
+ g_propagate_error (error, normalizable_error);
+ normalizable_error = NULL;
+ success = normalizable_error_type;
+ } else
+ success = NM_SETTING_VERIFY_SUCCESS;
+
+EXIT:
+ g_clear_error (&normalizable_error);
+ return success;
+}
+
+/**
+ * nm_connection_normalize:
+ * @connection: the #NMConnection to normalize
+ * @parameters: (allow-none) (element-type utf8 gpointer): a #GHashTable with
+ * normalization parameters to allow customization of the normalization by providing
+ * specific arguments. Unknown arguments will be ignored and the default will be
+ * used. The keys must be strings, hashed by g_str_hash() and g_str_equal() functions.
+ * The values are opaque and depend on the parameter name.
+ * @modified: (out) (allow-none): outputs whether any settings were modified.
+ * @error: location to store error, or %NULL. Contains the reason,
+ * why the connection is invalid, if the function returns an error.
+ *
+ * Does some basic normalization and fixup of well known inconsistencies
+ * and deprecated fields. If the connection was modified in any way,
+ * the output parameter @modified is set %TRUE.
+ *
+ * Finally the connection will be verified and %TRUE returns if the connection
+ * is valid. As this function only performs some specific normalization steps
+ * it cannot repair all connections. If the connection has errors that
+ * cannot be normalized, the connection will not be modified.
+ *
+ * Returns: %TRUE if the connection is valid, %FALSE if it is not
+ **/
+gboolean
+nm_connection_normalize (NMConnection *connection,
+ GHashTable *parameters,
+ gboolean *modified,
+ GError **error)
+{
+ NMSettingVerifyResult success;
+ gboolean was_modified = FALSE;
+ GError *normalizable_error = NULL;
+
+ success = _nm_connection_verify (connection, &normalizable_error);
+
+ if (success == NM_SETTING_VERIFY_ERROR ||
+ success == NM_SETTING_VERIFY_SUCCESS) {
+ if (normalizable_error)
+ g_propagate_error (error, normalizable_error);
+ if (modified)
+ *modified = FALSE;
+ if (success == NM_SETTING_VERIFY_ERROR && error && !*error) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_FAILED,
+ _("Unexpected failure to verify the connection"));
+ g_return_val_if_reached (FALSE);
+ }
+ return success == NM_SETTING_VERIFY_SUCCESS;
+ }
+ g_assert (success == NM_SETTING_VERIFY_NORMALIZABLE || success == NM_SETTING_VERIFY_NORMALIZABLE_ERROR);
+ g_clear_error (&normalizable_error);
+
+ /* Try to perform all kind of normalizations on the settings to fix it.
+ * We only do this, after verifying that the connection contains no un-normalizable
+ * errors, because in that case we rather fail without touching the settings. */
+
+ was_modified |= _normalize_connection_uuid (connection);
+ was_modified |= _normalize_connection_type (connection);
+ was_modified |= _normalize_connection_slave_type (connection);
+ was_modified |= _normalize_ip_config (connection, parameters);
+ was_modified |= _normalize_infiniband_mtu (connection, parameters);
+
+ /* Verify anew. */
+ success = _nm_connection_verify (connection, error);
+
+ if (modified)
+ *modified = was_modified;
+
+ if (success != NM_SETTING_VERIFY_SUCCESS) {
+ /* we would expect, that after normalization, the connection can be verified.
+ * Also treat NM_SETTING_VERIFY_NORMALIZABLE as failure, because there is something
+ * odd going on. */
+ if (error && !*error) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_FAILED,
+ _("Unexpected failure to normalize the connection"));
+ }
+ g_return_val_if_reached (FALSE);
+ }
+
+ /* we would expect, that the connection was modified during normalization. */
+ g_return_val_if_fail (was_modified, TRUE);
+
+ return TRUE;
+}
+
+/**
+ * nm_connection_update_secrets:
+ * @connection: the #NMConnection
+ * @setting_name: the setting object name to which the secrets apply
+ * @secrets: a #GVariant of secrets, of type %NM_VARIANT_TYPE_CONNECTION
+ * or %NM_VARIANT_TYPE_SETTING
+ * @error: location to store error, or %NULL
+ *
+ * Update the specified setting's secrets, given a dictionary of secrets
+ * intended for that setting (deserialized from D-Bus for example). Will also
+ * extract the given setting's secrets hash if given a connection dictionary.
+ * If @setting_name is %NULL, expects a fully serialized #NMConnection as
+ * returned by nm_connection_to_dbus() and will update all secrets from all
+ * settings contained in @secrets.
+ *
+ * Returns: %TRUE if the secrets were successfully updated, %FALSE if the update
+ * failed (tried to update secrets for a setting that doesn't exist, etc)
+ **/
+gboolean
+nm_connection_update_secrets (NMConnection *connection,
+ const char *setting_name,
+ GVariant *secrets,
+ GError **error)
+{
+ NMSetting *setting;
+ gboolean success = TRUE, updated = FALSE;
+ GVariant *setting_dict = NULL;
+ GVariantIter iter;
+ const char *key;
+ gboolean full_connection;
+ int success_detail;
+
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE);
+ g_return_val_if_fail ( g_variant_is_of_type (secrets, NM_VARIANT_TYPE_SETTING)
+ || g_variant_is_of_type (secrets, NM_VARIANT_TYPE_CONNECTION), FALSE);
+ if (error)
+ g_return_val_if_fail (*error == NULL, FALSE);
+
+ full_connection = g_variant_is_of_type (secrets, NM_VARIANT_TYPE_CONNECTION);
+ g_return_val_if_fail (setting_name != NULL || full_connection, FALSE);
+
+ /* Empty @secrets means success */
+ if (g_variant_n_children (secrets) == 0)
+ return TRUE;
+
+ if (setting_name) {
+ /* 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);
+ return FALSE;
+ }
+
+ if (full_connection) {
+ setting_dict = g_variant_lookup_value (secrets, setting_name, NM_VARIANT_TYPE_SETTING);
+ if (!setting_dict) {
+ /* The connection dictionary didn't contain any secrets for
+ * @setting_name; just return success.
+ */
+ return TRUE;
+ }
+ }
+
+ g_signal_handlers_block_by_func (setting, (GCallback) setting_changed_cb, connection);
+ success_detail = _nm_setting_update_secrets (setting,
+ setting_dict ? setting_dict : secrets,
+ error);
+ g_signal_handlers_unblock_by_func (setting, (GCallback) setting_changed_cb, connection);
+
+ g_clear_pointer (&setting_dict, g_variant_unref);
+
+ if (success_detail == NM_SETTING_UPDATE_SECRET_ERROR)
+ return FALSE;
+ if (success_detail == NM_SETTING_UPDATE_SECRET_SUCCESS_MODIFIED)
+ updated = TRUE;
+ } else {
+ /* check first, whether all the settings exist... */
+ g_variant_iter_init (&iter, secrets);
+ while (g_variant_iter_next (&iter, "{&s@a{sv}}", &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,
+ key);
+ return FALSE;
+ }
+ }
+
+ /* Update each setting with any secrets from the connection dictionary */
+ g_variant_iter_init (&iter, secrets);
+ while (g_variant_iter_next (&iter, "{&s@a{sv}}", &key, &setting_dict)) {
+ /* Update the secrets for this setting */
+ 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_dict, error);
+ g_signal_handlers_unblock_by_func (setting, (GCallback) setting_changed_cb, connection);
+
+ g_variant_unref (setting_dict);
+
+ if (success_detail == NM_SETTING_UPDATE_SECRET_ERROR) {
+ success = FALSE;
+ break;
+ }
+ if (success_detail == NM_SETTING_UPDATE_SECRET_SUCCESS_MODIFIED)
+ updated = TRUE;
+ }
+ }
+
+ if (updated) {
+ g_signal_emit (connection, signals[SECRETS_UPDATED], 0, setting_name);
+ g_signal_emit (connection, signals[CHANGED], 0);
+ }
+
+ return success;
+}
+
+/**
+ * nm_connection_need_secrets:
+ * @connection: the #NMConnection
+ * @hints: (out) (element-type utf8) (allow-none) (transfer container):
+ * the address of a pointer to a #GPtrArray, initialized to %NULL, which on
+ * return points to an allocated #GPtrArray containing the property names of
+ * secrets of the #NMSetting which may be required; the caller owns the array
+ * and must free the array itself with g_ptr_array_free(), but not free its
+ * elements
+ *
+ * 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.
+ *
+ * Returns: the setting name of the #NMSetting object which has invalid or
+ * missing secrets
+ **/
+const char *
+nm_connection_need_secrets (NMConnection *connection,
+ GPtrArray **hints)
+{
+ NMConnectionPrivate *priv;
+ GHashTableIter hiter;
+ GSList *settings = NULL;
+ GSList *iter;
+ const char *name = NULL;
+ NMSetting *setting;
+
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
+ if (hints)
+ g_return_val_if_fail (*hints == NULL, NULL);
+
+ priv = NM_CONNECTION_GET_PRIVATE (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, _nm_setting_compare_priority);
+
+ for (iter = settings; iter; iter = g_slist_next (iter)) {
+ GPtrArray *secrets;
+
+ setting = NM_SETTING (iter->data);
+ secrets = _nm_setting_need_secrets (setting);
+ if (secrets) {
+ if (hints)
+ *hints = secrets;
+ else
+ g_ptr_array_free (secrets, TRUE);
+
+ name = nm_setting_get_name (setting);
+ break;
+ }
+ }
+
+ g_slist_free (settings);
+ return name;
+}
+
+/**
+ * nm_connection_clear_secrets:
+ * @connection: the #NMConnection
+ *
+ * Clears and frees any secrets that may be stored in the connection, to avoid
+ * keeping secret data in memory when not needed.
+ **/
+void
+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)) {
+ 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);
+}
+
+/**
+ * nm_connection_clear_secrets_with_flags:
+ * @connection: the #NMConnection
+ * @func: (scope call): function to be called to determine whether a
+ * specific secret should be cleared or not
+ * @user_data: caller-supplied data passed to @func
+ *
+ * Clears and frees secrets determined by @func.
+ **/
+void
+nm_connection_clear_secrets_with_flags (NMConnection *connection,
+ NMSettingClearSecretsWithFlagsFn func,
+ gpointer user_data)
+{
+ 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)) {
+ 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);
+}
+
+/**
+ * nm_connection_to_dbus:
+ * @connection: the #NMConnection
+ * @flags: serialization flags, e.g. %NM_CONNECTION_SERIALIZE_ALL
+ *
+ * Converts the #NMConnection into a #GVariant of type
+ * %NM_VARIANT_TYPE_CONNECTION describing the connection, suitable for
+ * marshalling over D-Bus or otherwise serializing.
+ *
+ * Returns: (transfer none): a new floating #GVariant describing the connection,
+ * its settings, and each setting's properties.
+ **/
+GVariant *
+nm_connection_to_dbus (NMConnection *connection,
+ NMConnectionSerializationFlags flags)
+{
+ NMConnectionPrivate *priv;
+ GVariantBuilder builder;
+ GHashTableIter iter;
+ gpointer key, data;
+ GVariant *setting_dict, *ret;
+
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
+ priv = NM_CONNECTION_GET_PRIVATE (connection);
+
+ g_variant_builder_init (&builder, NM_VARIANT_TYPE_CONNECTION);
+
+ /* Add each setting's hash to the main hash */
+ g_hash_table_iter_init (&iter, priv->settings);
+ while (g_hash_table_iter_next (&iter, &key, &data)) {
+ NMSetting *setting = NM_SETTING (data);
+
+ setting_dict = _nm_setting_to_dbus (setting, connection, flags);
+ if (setting_dict)
+ g_variant_builder_add (&builder, "{s@a{sv}}", nm_setting_get_name (setting), setting_dict);
+ }
+
+ ret = g_variant_builder_end (&builder);
+
+ /* Don't send empty hashes */
+ if (g_variant_n_children (ret) == 0) {
+ g_variant_unref (ret);
+ ret = NULL;
+ }
+
+ return ret;
+}
+
+/**
+ * nm_connection_is_type:
+ * @connection: the #NMConnection
+ * @type: a setting name to check the connection's type against (like
+ * %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, 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
+ **/
+gboolean
+nm_connection_is_type (NMConnection *connection, const char *type)
+{
+ NMSettingConnection *s_con;
+ const char *type2;
+
+ 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);
+ if (!s_con)
+ return FALSE;
+
+ type2 = nm_setting_connection_get_connection_type (s_con);
+
+ return (g_strcmp0 (type2, type) == 0);
+}
+
+/**
+ * nm_connection_for_each_setting_value:
+ * @connection: the #NMConnection
+ * @func: (scope call): user-supplied function called for each setting's property
+ * @user_data: user data passed to @func at each invocation
+ *
+ * Iterates over the properties of each #NMSetting object in the #NMConnection,
+ * calling the supplied user function for each property.
+ **/
+void
+nm_connection_for_each_setting_value (NMConnection *connection,
+ NMSettingValueIterFn func,
+ gpointer user_data)
+{
+ GHashTableIter iter;
+ gpointer value;
+
+ g_return_if_fail (NM_IS_CONNECTION (connection));
+ g_return_if_fail (func != NULL);
+
+ g_hash_table_iter_init (&iter, NM_CONNECTION_GET_PRIVATE (connection)->settings);
+ while (g_hash_table_iter_next (&iter, NULL, &value))
+ nm_setting_enumerate_values (NM_SETTING (value), func, user_data);
+}
+
+/**
+ * nm_connection_dump:
+ * @connection: the #NMConnection
+ *
+ * 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.
+ **/
+void
+nm_connection_dump (NMConnection *connection)
+{
+ GHashTableIter iter;
+ NMSetting *setting;
+ const char *setting_name;
+ char *str;
+
+ if (!connection)
+ return;
+
+ 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);
+ }
+}
+
+/**
+ * nm_connection_set_path:
+ * @connection: the #NMConnection
+ * @path: the D-Bus path of the connection as given by the settings service
+ * which provides the connection
+ *
+ * Sets the D-Bus path of the connection. This property is not serialized, and
+ * is only for the reference of the caller. Sets the #NMConnection:path
+ * property.
+ **/
+void
+nm_connection_set_path (NMConnection *connection, const char *path)
+{
+ NMConnectionPrivate *priv;
+
+ g_return_if_fail (NM_IS_CONNECTION (connection));
+
+ priv = NM_CONNECTION_GET_PRIVATE (connection);
+
+ g_free (priv->path);
+ priv->path = NULL;
+
+ if (path)
+ priv->path = g_strdup (path);
+}
+
+/**
+ * nm_connection_get_path:
+ * @connection: the #NMConnection
+ *
+ * Returns the connection's D-Bus path.
+ *
+ * Returns: the D-Bus path of the connection, previously set by a call to
+ * nm_connection_set_path().
+ **/
+const char *
+nm_connection_get_path (NMConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
+
+ return NM_CONNECTION_GET_PRIVATE (connection)->path;
+}
+
+/**
+ * nm_connection_get_interface_name:
+ * @connection: The #NMConnection
+ *
+ * Returns the interface name as stored in NMSettingConnection:interface_name.
+ * If the connection contains no NMSettingConnection, it will return %NULL.
+ *
+ * For hardware devices and software devices created outside of NetworkManager,
+ * this name is used to match the device. for software devices created by
+ * NetworkManager, this is the name of the created interface.
+ *
+ * Returns: Name of the kernel interface or %NULL
+ */
+const char *
+nm_connection_get_interface_name (NMConnection *connection)
+{
+ NMSettingConnection *s_con;
+
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
+
+ s_con = nm_connection_get_setting_connection (connection);
+
+ return s_con ? nm_setting_connection_get_interface_name (s_con) : NULL;
+}
+
+gboolean
+_nm_connection_verify_required_interface_name (NMConnection *connection,
+ GError **error)
+{
+ const char *interface_name;
+
+ interface_name = nm_connection_get_interface_name (connection);
+ if (interface_name)
+ return TRUE;
+
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_MISSING_PROPERTY,
+ _("property is missing"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_INTERFACE_NAME);
+ return FALSE;
+}
+
+/**
+ * nm_connection_get_uuid:
+ * @connection: the #NMConnection
+ *
+ * A shortcut to return the UUID from the connection's #NMSettingConnection.
+ *
+ * Returns: the UUID from the connection's 'connection' setting
+ **/
+const char *
+nm_connection_get_uuid (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_uuid (s_con);
+}
+
+/**
+ * nm_connection_get_id:
+ * @connection: the #NMConnection
+ *
+ * A shortcut to return the ID from the connection's #NMSettingConnection.
+ *
+ * Returns: the ID from the connection's 'connection' setting
+ **/
+const char *
+nm_connection_get_id (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_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
+ **/
+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_is_virtual:
+ * @connection: an #NMConnection
+ *
+ * Checks if @connection refers to a virtual device (and thus can potentially be
+ * activated even if the device it refers to doesn't exist).
+ *
+ * Returns: whether @connection refers to a virtual device
+ */
+gboolean
+nm_connection_is_virtual (NMConnection *connection)
+{
+ const char *type;
+
+ type = nm_connection_get_connection_type (connection);
+ g_return_val_if_fail (type != NULL, FALSE);
+
+ if ( !strcmp (type, NM_SETTING_BOND_SETTING_NAME)
+ || !strcmp (type, NM_SETTING_TEAM_SETTING_NAME)
+ || !strcmp (type, NM_SETTING_BRIDGE_SETTING_NAME)
+ || !strcmp (type, NM_SETTING_VLAN_SETTING_NAME))
+ return TRUE;
+
+ if (!strcmp (type, NM_SETTING_INFINIBAND_SETTING_NAME)) {
+ NMSettingInfiniband *s_ib;
+
+ s_ib = nm_connection_get_setting_infiniband (connection);
+ g_return_val_if_fail (s_ib != NULL, FALSE);
+ return nm_setting_infiniband_get_virtual_interface_name (s_ib) != NULL;
+ }
+
+ return FALSE;
+}
+
+/**
+ * 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
+ */
+char *
+nm_connection_get_virtual_device_description (NMConnection *connection)
+{
+ const char *type;
+ const char *iface = NULL, *display_type = NULL;
+
+ iface = nm_connection_get_interface_name (connection);
+
+ type = nm_connection_get_connection_type (connection);
+ g_return_val_if_fail (type != NULL, FALSE);
+
+ 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 if (!strcmp (type, NM_SETTING_INFINIBAND_SETTING_NAME)) {
+ display_type = _("InfiniBand");
+ iface = nm_setting_infiniband_get_virtual_interface_name (nm_connection_get_setting_infiniband (connection));
+ }
+
+ if (!iface || !display_type)
+ return NULL;
+
+ return g_strdup_printf ("%s (%s)", display_type, iface);
+}
+
+/*************************************************************/
+
+/**
+ * nm_connection_get_setting_802_1x:
+ * @connection: the #NMConnection
+ *
+ * A shortcut to return any #NMSetting8021x the connection might contain.
+ *
+ * Returns: (transfer none): an #NMSetting8021x if the connection contains one, otherwise %NULL
+ **/
+NMSetting8021x *
+nm_connection_get_setting_802_1x (NMConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
+
+ return (NMSetting8021x *) nm_connection_get_setting (connection, NM_TYPE_SETTING_802_1X);
+}
+
+/**
+ * nm_connection_get_setting_bluetooth:
+ * @connection: the #NMConnection
+ *
+ * A shortcut to return any #NMSettingBluetooth the connection might contain.
+ *
+ * Returns: (transfer none): an #NMSettingBluetooth if the connection contains one, otherwise %NULL
+ **/
+NMSettingBluetooth *
+nm_connection_get_setting_bluetooth (NMConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
+
+ return (NMSettingBluetooth *) nm_connection_get_setting (connection, NM_TYPE_SETTING_BLUETOOTH);
+}
+
+/**
+ * nm_connection_get_setting_bond:
+ * @connection: the #NMConnection
+ *
+ * A shortcut to return any #NMSettingBond the connection might contain.
+ *
+ * Returns: (transfer none): an #NMSettingBond if the connection contains one, otherwise %NULL
+ **/
+NMSettingBond *
+nm_connection_get_setting_bond (NMConnection *connection)
+{
+ 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
+ **/
+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
+ **/
+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
+ *
+ * A shortcut to return any #NMSettingBridge the connection might contain.
+ *
+ * Returns: (transfer none): an #NMSettingBridge if the connection contains one, otherwise %NULL
+ **/
+NMSettingBridge *
+nm_connection_get_setting_bridge (NMConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
+
+ return (NMSettingBridge *) nm_connection_get_setting (connection, NM_TYPE_SETTING_BRIDGE);
+}
+
+/**
+ * nm_connection_get_setting_cdma:
+ * @connection: the #NMConnection
+ *
+ * A shortcut to return any #NMSettingCdma the connection might contain.
+ *
+ * Returns: (transfer none): an #NMSettingCdma if the connection contains one, otherwise %NULL
+ **/
+NMSettingCdma *
+nm_connection_get_setting_cdma (NMConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
+
+ return (NMSettingCdma *) nm_connection_get_setting (connection, NM_TYPE_SETTING_CDMA);
+}
+
+/**
+ * nm_connection_get_setting_connection:
+ * @connection: the #NMConnection
+ *
+ * A shortcut to return any #NMSettingConnection the connection might contain.
+ *
+ * Returns: (transfer none): an #NMSettingConnection if the connection contains one, otherwise %NULL
+ **/
+NMSettingConnection *
+nm_connection_get_setting_connection (NMConnection *connection)
+{
+ 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
+ **/
+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
+ **/
+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
+ *
+ * A shortcut to return any #NMSettingGsm the connection might contain.
+ *
+ * Returns: (transfer none): an #NMSettingGsm if the connection contains one, otherwise %NULL
+ **/
+NMSettingGsm *
+nm_connection_get_setting_gsm (NMConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
+
+ return (NMSettingGsm *) nm_connection_get_setting (connection, NM_TYPE_SETTING_GSM);
+}
+
+/**
+ * nm_connection_get_setting_infiniband:
+ * @connection: the #NMConnection
+ *
+ * A shortcut to return any #NMSettingInfiniband the connection might contain.
+ *
+ * Returns: (transfer none): an #NMSettingInfiniband if the connection contains one, otherwise %NULL
+ **/
+NMSettingInfiniband *
+nm_connection_get_setting_infiniband (NMConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
+
+ return (NMSettingInfiniband *) nm_connection_get_setting (connection, NM_TYPE_SETTING_INFINIBAND);
+}
+
+/**
+ * nm_connection_get_setting_ip4_config:
+ * @connection: the #NMConnection
+ *
+ * A shortcut to return any #NMSettingIP4Config the connection might contain.
+ *
+ * Note that it returns the value as type #NMSettingIPConfig, since the vast
+ * majority of IPv4-setting-related methods are on that type, not
+ * #NMSettingIP4Config.
+ *
+ * Returns: (type NMSettingIP4Config) (transfer none): an #NMSettingIP4Config if the
+ * connection contains one, otherwise %NULL
+ **/
+NMSettingIPConfig *
+nm_connection_get_setting_ip4_config (NMConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
+
+ return (NMSettingIPConfig *) nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG);
+}
+
+/**
+ * nm_connection_get_setting_ip6_config:
+ * @connection: the #NMConnection
+ *
+ * A shortcut to return any #NMSettingIP6Config the connection might contain.
+ *
+ * Note that it returns the value as type #NMSettingIPConfig, since the vast
+ * majority of IPv6-setting-related methods are on that type, not
+ * #NMSettingIP6Config.
+ *
+ * Returns: (type NMSettingIP6Config) (transfer none): an #NMSettingIP6Config if the
+ * connection contains one, otherwise %NULL
+ **/
+NMSettingIPConfig *
+nm_connection_get_setting_ip6_config (NMConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
+
+ return (NMSettingIPConfig *) nm_connection_get_setting (connection, NM_TYPE_SETTING_IP6_CONFIG);
+}
+
+/**
+ * nm_connection_get_setting_olpc_mesh:
+ * @connection: the #NMConnection
+ *
+ * A shortcut to return any #NMSettingOlpcMesh the connection might contain.
+ *
+ * Returns: (transfer none): an #NMSettingOlpcMesh if the connection contains one, otherwise %NULL
+ **/
+NMSettingOlpcMesh *
+nm_connection_get_setting_olpc_mesh (NMConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
+
+ return (NMSettingOlpcMesh *) nm_connection_get_setting (connection, NM_TYPE_SETTING_OLPC_MESH);
+}
+
+/**
+ * nm_connection_get_setting_ppp:
+ * @connection: the #NMConnection
+ *
+ * A shortcut to return any #NMSettingPpp the connection might contain.
+ *
+ * Returns: (transfer none): an #NMSettingPpp if the connection contains one, otherwise %NULL
+ **/
+NMSettingPpp *
+nm_connection_get_setting_ppp (NMConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
+
+ return (NMSettingPpp *) nm_connection_get_setting (connection, NM_TYPE_SETTING_PPP);
+}
+
+/**
+ * nm_connection_get_setting_pppoe:
+ * @connection: the #NMConnection
+ *
+ * A shortcut to return any #NMSettingPppoe the connection might contain.
+ *
+ * Returns: (transfer none): an #NMSettingPppoe if the connection contains one, otherwise %NULL
+ **/
+NMSettingPppoe *
+nm_connection_get_setting_pppoe (NMConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
+
+ return (NMSettingPppoe *) nm_connection_get_setting (connection, NM_TYPE_SETTING_PPPOE);
+}
+
+/**
+ * nm_connection_get_setting_serial:
+ * @connection: the #NMConnection
+ *
+ * A shortcut to return any #NMSettingSerial the connection might contain.
+ *
+ * Returns: (transfer none): an #NMSettingSerial if the connection contains one, otherwise %NULL
+ **/
+NMSettingSerial *
+nm_connection_get_setting_serial (NMConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
+
+ return (NMSettingSerial *) nm_connection_get_setting (connection, NM_TYPE_SETTING_SERIAL);
+}
+
+/**
+ * nm_connection_get_setting_vpn:
+ * @connection: the #NMConnection
+ *
+ * A shortcut to return any #NMSettingVpn the connection might contain.
+ *
+ * Returns: (transfer none): an #NMSettingVpn if the connection contains one, otherwise %NULL
+ **/
+NMSettingVpn *
+nm_connection_get_setting_vpn (NMConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
+
+ return (NMSettingVpn *) nm_connection_get_setting (connection, NM_TYPE_SETTING_VPN);
+}
+
+/**
+ * nm_connection_get_setting_wimax:
+ * @connection: the #NMConnection
+ *
+ * A shortcut to return any #NMSettingWimax the connection might contain.
+ *
+ * Returns: (transfer none): an #NMSettingWimax if the connection contains one, otherwise %NULL
+ **/
+NMSettingWimax *
+nm_connection_get_setting_wimax (NMConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
+
+ return (NMSettingWimax *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIMAX);
+}
+
+/**
+ * nm_connection_get_setting_wired:
+ * @connection: the #NMConnection
+ *
+ * A shortcut to return any #NMSettingWired the connection might contain.
+ *
+ * Returns: (transfer none): an #NMSettingWired if the connection contains one, otherwise %NULL
+ **/
+NMSettingWired *
+nm_connection_get_setting_wired (NMConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
+
+ return (NMSettingWired *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED);
+}
+
+/**
+ * nm_connection_get_setting_adsl:
+ * @connection: the #NMConnection
+ *
+ * A shortcut to return any #NMSettingAdsl the connection might contain.
+ *
+ * Returns: (transfer none): an #NMSettingAdsl if the connection contains one, otherwise %NULL
+ **/
+NMSettingAdsl *
+nm_connection_get_setting_adsl (NMConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
+
+ return (NMSettingAdsl *) nm_connection_get_setting (connection, NM_TYPE_SETTING_ADSL);
+}
+
+/**
+ * nm_connection_get_setting_wireless:
+ * @connection: the #NMConnection
+ *
+ * A shortcut to return any #NMSettingWireless the connection might contain.
+ *
+ * Returns: (transfer none): an #NMSettingWireless if the connection contains one, otherwise %NULL
+ **/
+NMSettingWireless *
+nm_connection_get_setting_wireless (NMConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
+
+ return (NMSettingWireless *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS);
+}
+
+/**
+ * nm_connection_get_setting_wireless_security:
+ * @connection: the #NMConnection
+ *
+ * A shortcut to return any #NMSettingWirelessSecurity the connection might contain.
+ *
+ * Returns: (transfer none): an #NMSettingWirelessSecurity if the connection contains one, otherwise %NULL
+ **/
+NMSettingWirelessSecurity *
+nm_connection_get_setting_wireless_security (NMConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
+
+ return (NMSettingWirelessSecurity *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
+}
+
+/**
+ * nm_connection_get_setting_bridge_port:
+ * @connection: the #NMConnection
+ *
+ * A shortcut to return any #NMSettingBridgePort the connection might contain.
+ *
+ * Returns: (transfer none): an #NMSettingBridgePort if the connection contains one, otherwise %NULL
+ **/
+NMSettingBridgePort *
+nm_connection_get_setting_bridge_port (NMConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
+
+ return (NMSettingBridgePort *) nm_connection_get_setting (connection, NM_TYPE_SETTING_BRIDGE_PORT);
+}
+
+/**
+ * nm_connection_get_setting_vlan:
+ * @connection: the #NMConnection
+ *
+ * A shortcut to return any #NMSettingVlan the connection might contain.
+ *
+ * Returns: (transfer none): an #NMSettingVlan if the connection contains one, otherwise %NULL
+ **/
+NMSettingVlan *
+nm_connection_get_setting_vlan (NMConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
+
+ return (NMSettingVlan *) nm_connection_get_setting (connection, NM_TYPE_SETTING_VLAN);
+}
+
+/*************************************************************/
+
+static void
+nm_connection_private_free (NMConnectionPrivate *priv)
+{
+ NMConnection *self = priv->self;
+
+ g_hash_table_foreach_remove (priv->settings, _setting_release, self);
+ g_hash_table_destroy (priv->settings);
+ g_free (priv->path);
+
+ g_slice_free (NMConnectionPrivate, priv);
+}
+
+static NMConnectionPrivate *
+nm_connection_get_private (NMConnection *connection)
+{
+ NMConnectionPrivate *priv;
+
+ priv = g_object_get_data (G_OBJECT (connection), "NMConnectionPrivate");
+ if (!priv) {
+ priv = g_slice_new0 (NMConnectionPrivate);
+ g_object_set_data_full (G_OBJECT (connection), "NMConnectionPrivate",
+ priv, (GDestroyNotify) nm_connection_private_free);
+
+ priv->self = connection;
+ priv->settings = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_object_unref);
+ }
+
+ return priv;
+}
+
+static void
+nm_connection_default_init (NMConnectionInterface *iface)
+{
+ /* Signals */
+
+ /**
+ * NMConnection::secrets-updated:
+ * @connection: the object on which the signal is emitted
+ * @setting_name: the setting name of the #NMSetting for which secrets were
+ * updated
+ *
+ * The ::secrets-updated signal is emitted when the secrets of a setting
+ * have been changed.
+ */
+ signals[SECRETS_UPDATED] =
+ g_signal_new (NM_CONNECTION_SECRETS_UPDATED,
+ NM_TYPE_CONNECTION,
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMConnectionInterface, secrets_updated),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__STRING,
+ G_TYPE_NONE, 1,
+ G_TYPE_STRING);
+
+ /**
+ * NMConnection::secrets-cleared:
+ * @connection: the object on which the signal is emitted
+ *
+ * The ::secrets-cleared signal is emitted when the secrets of a connection
+ * are cleared.
+ */
+ signals[SECRETS_CLEARED] =
+ g_signal_new (NM_CONNECTION_SECRETS_CLEARED,
+ NM_TYPE_CONNECTION,
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMConnectionInterface, secrets_cleared),
+ 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.
+ */
+ signals[CHANGED] =
+ g_signal_new (NM_CONNECTION_CHANGED,
+ NM_TYPE_CONNECTION,
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMConnectionInterface, changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+}
diff --git a/libnm-core/nm-connection.h b/libnm-core/nm-connection.h
new file mode 100644
index 000000000..c76ad6076
--- /dev/null
+++ b/libnm-core/nm-connection.h
@@ -0,0 +1,219 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+
+/*
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * 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 2007 - 2013 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ */
+
+#ifndef __NM_CONNECTION_H__
+#define __NM_CONNECTION_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-core-types.h>
+#include <nm-setting.h>
+#include <nm-errors.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_CONNECTION (nm_connection_get_type ())
+#define NM_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_CONNECTION, NMConnection))
+#define NM_IS_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_CONNECTION))
+#define NM_CONNECTION_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((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"
+
+/*
+ * NM_CONNECTION_NORMALIZE_PARAM_IP6_CONFIG_METHOD: overwrite the ip6 method
+ * when normalizing ip6 configuration. If omited, this defaults to
+ * @NM_SETTING_IP6_CONFIG_METHOD_AUTO.
+ */
+#define NM_CONNECTION_NORMALIZE_PARAM_IP6_CONFIG_METHOD "ip6-config-method"
+
+/**
+ * NMConnection:
+ *
+ * NMConnection is the interface implemented by #NMRemoteConnection on the
+ * client side, and #NMSettingsConnection on the daemon side.
+ */
+
+/**
+ * NMConnectionInterface:
+ * @parent: the parent interace struct
+ * @secrets_updated: emitted when the connection's secrets are updated
+ * @secrets_cleared: emitted when the connection's secrets are cleared
+ * @changed: emitted when any change to the connection's settings occurs
+ */
+typedef struct {
+ GTypeInterface parent;
+
+ /* Signals */
+ void (*secrets_updated) (NMConnection *connection,
+ const char *setting);
+ void (*secrets_cleared) (NMConnection *connection);
+ void (*changed) (NMConnection *connection);
+
+} NMConnectionInterface;
+
+GType nm_connection_get_type (void);
+
+void nm_connection_add_setting (NMConnection *connection,
+ NMSetting *setting);
+
+void nm_connection_remove_setting (NMConnection *connection,
+ GType setting_type);
+
+NMSetting *nm_connection_get_setting (NMConnection *connection,
+ GType setting_type);
+
+NMSetting *nm_connection_get_setting_by_name (NMConnection *connection,
+ const char *name);
+
+/**
+ * NM_VARIANT_TYPE_CONNECTION:
+ *
+ * #GVariantType for a dictionary mapping from setting names to
+ * %NM_VARIANT_TYPE_SETTING variants. This is used to represent an
+ * #NMConnection, and is the type taken by nm_simple_connection_new_from_dbus()
+ * and returned from nm_connection_to_dbus().
+ */
+#define NM_VARIANT_TYPE_CONNECTION (G_VARIANT_TYPE ("a{sa{sv}}"))
+
+/**
+ * NM_VARIANT_TYPE_SETTING:
+ *
+ * #GVariantType for a dictionary mapping from property names to values. This is
+ * an alias for %G_VARIANT_TYPE_VARDICT, and is the type of each element of
+ * an %NM_VARIANT_TYPE_CONNECTION dictionary.
+ */
+#define NM_VARIANT_TYPE_SETTING G_VARIANT_TYPE_VARDICT
+
+/**
+ * NMConnectionSerializationFlags:
+ * @NM_CONNECTION_SERIALIZE_ALL: serialize all properties (including secrets)
+ * @NM_CONNECTION_SERIALIZE_NO_SECRETS: do not include secrets
+ * @NM_CONNECTION_SERIALIZE_ONLY_SECRETS: only serialize secrets
+ *
+ * These flags determine which properties are serialized when calling when
+ * calling nm_connection_to_dbus().
+ **/
+typedef enum { /*< flags >*/
+ NM_CONNECTION_SERIALIZE_ALL = 0x00000000,
+ NM_CONNECTION_SERIALIZE_NO_SECRETS = 0x00000001,
+ NM_CONNECTION_SERIALIZE_ONLY_SECRETS = 0x00000002,
+} NMConnectionSerializationFlags;
+
+GVariant *nm_connection_to_dbus (NMConnection *connection,
+ NMConnectionSerializationFlags flags);
+
+gboolean nm_connection_replace_settings (NMConnection *connection,
+ GVariant *new_settings,
+ GError **error);
+
+void nm_connection_replace_settings_from_connection (NMConnection *connection,
+ NMConnection *new_connection);
+
+void nm_connection_clear_settings (NMConnection *connection);
+
+gboolean nm_connection_compare (NMConnection *a,
+ NMConnection *b,
+ NMSettingCompareFlags flags);
+
+gboolean nm_connection_diff (NMConnection *a,
+ NMConnection *b,
+ NMSettingCompareFlags flags,
+ GHashTable **out_settings);
+
+gboolean nm_connection_verify (NMConnection *connection, GError **error);
+gboolean nm_connection_normalize (NMConnection *connection,
+ GHashTable *parameters,
+ gboolean *modified,
+ GError **error);
+
+const char * nm_connection_need_secrets (NMConnection *connection,
+ GPtrArray **hints);
+
+void nm_connection_clear_secrets (NMConnection *connection);
+
+void nm_connection_clear_secrets_with_flags (NMConnection *connection,
+ NMSettingClearSecretsWithFlagsFn func,
+ gpointer user_data);
+
+gboolean nm_connection_update_secrets (NMConnection *connection,
+ const char *setting_name,
+ GVariant *secrets,
+ GError **error);
+
+void nm_connection_set_path (NMConnection *connection,
+ const char *path);
+
+const char * nm_connection_get_path (NMConnection *connection);
+
+const char * nm_connection_get_interface_name (NMConnection *connection);
+
+gboolean nm_connection_is_type (NMConnection *connection, const char *type);
+
+void nm_connection_for_each_setting_value (NMConnection *connection,
+ NMSettingValueIterFn func,
+ gpointer user_data);
+
+void nm_connection_dump (NMConnection *connection);
+
+/* Helpers */
+const char * nm_connection_get_uuid (NMConnection *connection);
+const char * nm_connection_get_id (NMConnection *connection);
+const char * nm_connection_get_connection_type (NMConnection *connection);
+
+gboolean nm_connection_is_virtual (NMConnection *connection);
+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);
+NMSettingTeam * nm_connection_get_setting_team (NMConnection *connection);
+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);
+NMSettingDcb * nm_connection_get_setting_dcb (NMConnection *connection);
+NMSettingGeneric * nm_connection_get_setting_generic (NMConnection *connection);
+NMSettingGsm * nm_connection_get_setting_gsm (NMConnection *connection);
+NMSettingInfiniband * nm_connection_get_setting_infiniband (NMConnection *connection);
+NMSettingIPConfig * nm_connection_get_setting_ip4_config (NMConnection *connection);
+NMSettingIPConfig * nm_connection_get_setting_ip6_config (NMConnection *connection);
+NMSettingOlpcMesh * nm_connection_get_setting_olpc_mesh (NMConnection *connection);
+NMSettingPpp * nm_connection_get_setting_ppp (NMConnection *connection);
+NMSettingPppoe * nm_connection_get_setting_pppoe (NMConnection *connection);
+NMSettingSerial * nm_connection_get_setting_serial (NMConnection *connection);
+NMSettingVpn * nm_connection_get_setting_vpn (NMConnection *connection);
+NMSettingWimax * nm_connection_get_setting_wimax (NMConnection *connection);
+NMSettingAdsl * nm_connection_get_setting_adsl (NMConnection *connection);
+NMSettingWired * nm_connection_get_setting_wired (NMConnection *connection);
+NMSettingWireless * nm_connection_get_setting_wireless (NMConnection *connection);
+NMSettingWirelessSecurity *nm_connection_get_setting_wireless_security (NMConnection *connection);
+NMSettingVlan * nm_connection_get_setting_vlan (NMConnection *connection);
+
+G_END_DECLS
+
+#endif /* __NM_CONNECTION_H__ */
diff --git a/libnm-core/nm-core-enum-types.c b/libnm-core/nm-core-enum-types.c
new file mode 100644
index 000000000..d7d4291bc
--- /dev/null
+++ b/libnm-core/nm-core-enum-types.c
@@ -0,0 +1,1031 @@
+
+
+
+/* Generated by glib-mkenums. Do not edit */
+
+#include "nm-core-enum-types.h"
+
+#include "nm-version.h"
+#include "nm-connection.h"
+#include "nm-core-types.h"
+#include "nm-dbus-interface.h"
+#include "nm-errors.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-port.h"
+#include "nm-setting-bridge.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-ip-config.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-port.h"
+#include "nm-setting-team.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-security.h"
+#include "nm-setting-wireless.h"
+#include "nm-setting.h"
+#include "nm-simple-connection.h"
+#include "nm-utils.h"
+#include "nm-vpn-dbus-interface.h"
+
+GType
+nm_connection_serialization_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 GFlagsValue values[] = {
+ { NM_CONNECTION_SERIALIZE_ALL, "NM_CONNECTION_SERIALIZE_ALL", "all" },
+ { NM_CONNECTION_SERIALIZE_NO_SECRETS, "NM_CONNECTION_SERIALIZE_NO_SECRETS", "no-secrets" },
+ { NM_CONNECTION_SERIALIZE_ONLY_SECRETS, "NM_CONNECTION_SERIALIZE_ONLY_SECRETS", "only-secrets" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_flags_register_static (g_intern_static_string ("NMConnectionSerializationFlags"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
+nm_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_STATE_UNKNOWN, "NM_STATE_UNKNOWN", "unknown" },
+ { NM_STATE_ASLEEP, "NM_STATE_ASLEEP", "asleep" },
+ { NM_STATE_DISCONNECTED, "NM_STATE_DISCONNECTED", "disconnected" },
+ { NM_STATE_DISCONNECTING, "NM_STATE_DISCONNECTING", "disconnecting" },
+ { NM_STATE_CONNECTING, "NM_STATE_CONNECTING", "connecting" },
+ { NM_STATE_CONNECTED_LOCAL, "NM_STATE_CONNECTED_LOCAL", "connected-local" },
+ { NM_STATE_CONNECTED_SITE, "NM_STATE_CONNECTED_SITE", "connected-site" },
+ { NM_STATE_CONNECTED_GLOBAL, "NM_STATE_CONNECTED_GLOBAL", "connected-global" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMState"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
+nm_connectivity_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_CONNECTIVITY_UNKNOWN, "NM_CONNECTIVITY_UNKNOWN", "unknown" },
+ { NM_CONNECTIVITY_NONE, "NM_CONNECTIVITY_NONE", "none" },
+ { NM_CONNECTIVITY_PORTAL, "NM_CONNECTIVITY_PORTAL", "portal" },
+ { NM_CONNECTIVITY_LIMITED, "NM_CONNECTIVITY_LIMITED", "limited" },
+ { NM_CONNECTIVITY_FULL, "NM_CONNECTIVITY_FULL", "full" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMConnectivityState"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
+nm_device_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_DEVICE_TYPE_UNKNOWN, "NM_DEVICE_TYPE_UNKNOWN", "unknown" },
+ { NM_DEVICE_TYPE_ETHERNET, "NM_DEVICE_TYPE_ETHERNET", "ethernet" },
+ { NM_DEVICE_TYPE_WIFI, "NM_DEVICE_TYPE_WIFI", "wifi" },
+ { NM_DEVICE_TYPE_UNUSED1, "NM_DEVICE_TYPE_UNUSED1", "unused1" },
+ { NM_DEVICE_TYPE_UNUSED2, "NM_DEVICE_TYPE_UNUSED2", "unused2" },
+ { NM_DEVICE_TYPE_BT, "NM_DEVICE_TYPE_BT", "bt" },
+ { NM_DEVICE_TYPE_OLPC_MESH, "NM_DEVICE_TYPE_OLPC_MESH", "olpc-mesh" },
+ { NM_DEVICE_TYPE_WIMAX, "NM_DEVICE_TYPE_WIMAX", "wimax" },
+ { NM_DEVICE_TYPE_MODEM, "NM_DEVICE_TYPE_MODEM", "modem" },
+ { NM_DEVICE_TYPE_INFINIBAND, "NM_DEVICE_TYPE_INFINIBAND", "infiniband" },
+ { NM_DEVICE_TYPE_BOND, "NM_DEVICE_TYPE_BOND", "bond" },
+ { NM_DEVICE_TYPE_VLAN, "NM_DEVICE_TYPE_VLAN", "vlan" },
+ { NM_DEVICE_TYPE_ADSL, "NM_DEVICE_TYPE_ADSL", "adsl" },
+ { NM_DEVICE_TYPE_BRIDGE, "NM_DEVICE_TYPE_BRIDGE", "bridge" },
+ { NM_DEVICE_TYPE_GENERIC, "NM_DEVICE_TYPE_GENERIC", "generic" },
+ { NM_DEVICE_TYPE_TEAM, "NM_DEVICE_TYPE_TEAM", "team" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMDeviceType"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
+nm_device_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_DEVICE_CAP_NONE, "NM_DEVICE_CAP_NONE", "none" },
+ { NM_DEVICE_CAP_NM_SUPPORTED, "NM_DEVICE_CAP_NM_SUPPORTED", "nm-supported" },
+ { NM_DEVICE_CAP_CARRIER_DETECT, "NM_DEVICE_CAP_CARRIER_DETECT", "carrier-detect" },
+ { NM_DEVICE_CAP_IS_SOFTWARE, "NM_DEVICE_CAP_IS_SOFTWARE", "is-software" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_flags_register_static (g_intern_static_string ("NMDeviceCapabilities"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
+nm_device_wifi_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_WIFI_DEVICE_CAP_NONE, "NM_WIFI_DEVICE_CAP_NONE", "none" },
+ { NM_WIFI_DEVICE_CAP_CIPHER_WEP40, "NM_WIFI_DEVICE_CAP_CIPHER_WEP40", "cipher-wep40" },
+ { NM_WIFI_DEVICE_CAP_CIPHER_WEP104, "NM_WIFI_DEVICE_CAP_CIPHER_WEP104", "cipher-wep104" },
+ { NM_WIFI_DEVICE_CAP_CIPHER_TKIP, "NM_WIFI_DEVICE_CAP_CIPHER_TKIP", "cipher-tkip" },
+ { NM_WIFI_DEVICE_CAP_CIPHER_CCMP, "NM_WIFI_DEVICE_CAP_CIPHER_CCMP", "cipher-ccmp" },
+ { NM_WIFI_DEVICE_CAP_WPA, "NM_WIFI_DEVICE_CAP_WPA", "wpa" },
+ { NM_WIFI_DEVICE_CAP_RSN, "NM_WIFI_DEVICE_CAP_RSN", "rsn" },
+ { NM_WIFI_DEVICE_CAP_AP, "NM_WIFI_DEVICE_CAP_AP", "ap" },
+ { NM_WIFI_DEVICE_CAP_ADHOC, "NM_WIFI_DEVICE_CAP_ADHOC", "adhoc" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_flags_register_static (g_intern_static_string ("NMDeviceWifiCapabilities"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
+nm_802_11_ap_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 GFlagsValue values[] = {
+ { NM_802_11_AP_FLAGS_NONE, "NM_802_11_AP_FLAGS_NONE", "none" },
+ { NM_802_11_AP_FLAGS_PRIVACY, "NM_802_11_AP_FLAGS_PRIVACY", "privacy" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_flags_register_static (g_intern_static_string ("NM80211ApFlags"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
+nm_802_11_ap_security_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 GFlagsValue values[] = {
+ { NM_802_11_AP_SEC_NONE, "NM_802_11_AP_SEC_NONE", "none" },
+ { NM_802_11_AP_SEC_PAIR_WEP40, "NM_802_11_AP_SEC_PAIR_WEP40", "pair-wep40" },
+ { NM_802_11_AP_SEC_PAIR_WEP104, "NM_802_11_AP_SEC_PAIR_WEP104", "pair-wep104" },
+ { NM_802_11_AP_SEC_PAIR_TKIP, "NM_802_11_AP_SEC_PAIR_TKIP", "pair-tkip" },
+ { NM_802_11_AP_SEC_PAIR_CCMP, "NM_802_11_AP_SEC_PAIR_CCMP", "pair-ccmp" },
+ { NM_802_11_AP_SEC_GROUP_WEP40, "NM_802_11_AP_SEC_GROUP_WEP40", "group-wep40" },
+ { NM_802_11_AP_SEC_GROUP_WEP104, "NM_802_11_AP_SEC_GROUP_WEP104", "group-wep104" },
+ { NM_802_11_AP_SEC_GROUP_TKIP, "NM_802_11_AP_SEC_GROUP_TKIP", "group-tkip" },
+ { NM_802_11_AP_SEC_GROUP_CCMP, "NM_802_11_AP_SEC_GROUP_CCMP", "group-ccmp" },
+ { NM_802_11_AP_SEC_KEY_MGMT_PSK, "NM_802_11_AP_SEC_KEY_MGMT_PSK", "key-mgmt-psk" },
+ { NM_802_11_AP_SEC_KEY_MGMT_802_1X, "NM_802_11_AP_SEC_KEY_MGMT_802_1X", "key-mgmt-802-1x" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_flags_register_static (g_intern_static_string ("NM80211ApSecurityFlags"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
+nm_802_11_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_802_11_MODE_UNKNOWN, "NM_802_11_MODE_UNKNOWN", "unknown" },
+ { NM_802_11_MODE_ADHOC, "NM_802_11_MODE_ADHOC", "adhoc" },
+ { NM_802_11_MODE_INFRA, "NM_802_11_MODE_INFRA", "infra" },
+ { NM_802_11_MODE_AP, "NM_802_11_MODE_AP", "ap" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NM80211Mode"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
+nm_bluetooth_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_BT_CAPABILITY_NONE, "NM_BT_CAPABILITY_NONE", "none" },
+ { NM_BT_CAPABILITY_DUN, "NM_BT_CAPABILITY_DUN", "dun" },
+ { NM_BT_CAPABILITY_NAP, "NM_BT_CAPABILITY_NAP", "nap" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_flags_register_static (g_intern_static_string ("NMBluetoothCapabilities"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
+nm_device_modem_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_DEVICE_MODEM_CAPABILITY_NONE, "NM_DEVICE_MODEM_CAPABILITY_NONE", "none" },
+ { NM_DEVICE_MODEM_CAPABILITY_POTS, "NM_DEVICE_MODEM_CAPABILITY_POTS", "pots" },
+ { NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO, "NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO", "cdma-evdo" },
+ { NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS, "NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS", "gsm-umts" },
+ { NM_DEVICE_MODEM_CAPABILITY_LTE, "NM_DEVICE_MODEM_CAPABILITY_LTE", "lte" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_flags_register_static (g_intern_static_string ("NMDeviceModemCapabilities"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
+nm_device_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_DEVICE_STATE_UNKNOWN, "NM_DEVICE_STATE_UNKNOWN", "unknown" },
+ { NM_DEVICE_STATE_UNMANAGED, "NM_DEVICE_STATE_UNMANAGED", "unmanaged" },
+ { NM_DEVICE_STATE_UNAVAILABLE, "NM_DEVICE_STATE_UNAVAILABLE", "unavailable" },
+ { NM_DEVICE_STATE_DISCONNECTED, "NM_DEVICE_STATE_DISCONNECTED", "disconnected" },
+ { NM_DEVICE_STATE_PREPARE, "NM_DEVICE_STATE_PREPARE", "prepare" },
+ { NM_DEVICE_STATE_CONFIG, "NM_DEVICE_STATE_CONFIG", "config" },
+ { NM_DEVICE_STATE_NEED_AUTH, "NM_DEVICE_STATE_NEED_AUTH", "need-auth" },
+ { NM_DEVICE_STATE_IP_CONFIG, "NM_DEVICE_STATE_IP_CONFIG", "ip-config" },
+ { NM_DEVICE_STATE_IP_CHECK, "NM_DEVICE_STATE_IP_CHECK", "ip-check" },
+ { NM_DEVICE_STATE_SECONDARIES, "NM_DEVICE_STATE_SECONDARIES", "secondaries" },
+ { NM_DEVICE_STATE_ACTIVATED, "NM_DEVICE_STATE_ACTIVATED", "activated" },
+ { NM_DEVICE_STATE_DEACTIVATING, "NM_DEVICE_STATE_DEACTIVATING", "deactivating" },
+ { NM_DEVICE_STATE_FAILED, "NM_DEVICE_STATE_FAILED", "failed" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMDeviceState"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
+nm_device_state_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_DEVICE_STATE_REASON_NONE, "NM_DEVICE_STATE_REASON_NONE", "none" },
+ { NM_DEVICE_STATE_REASON_UNKNOWN, "NM_DEVICE_STATE_REASON_UNKNOWN", "unknown" },
+ { NM_DEVICE_STATE_REASON_NOW_MANAGED, "NM_DEVICE_STATE_REASON_NOW_MANAGED", "now-managed" },
+ { NM_DEVICE_STATE_REASON_NOW_UNMANAGED, "NM_DEVICE_STATE_REASON_NOW_UNMANAGED", "now-unmanaged" },
+ { NM_DEVICE_STATE_REASON_CONFIG_FAILED, "NM_DEVICE_STATE_REASON_CONFIG_FAILED", "config-failed" },
+ { NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE, "NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE", "ip-config-unavailable" },
+ { NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED, "NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED", "ip-config-expired" },
+ { NM_DEVICE_STATE_REASON_NO_SECRETS, "NM_DEVICE_STATE_REASON_NO_SECRETS", "no-secrets" },
+ { NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT, "NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT", "supplicant-disconnect" },
+ { NM_DEVICE_STATE_REASON_SUPPLICANT_CONFIG_FAILED, "NM_DEVICE_STATE_REASON_SUPPLICANT_CONFIG_FAILED", "supplicant-config-failed" },
+ { NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED, "NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED", "supplicant-failed" },
+ { NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT, "NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT", "supplicant-timeout" },
+ { NM_DEVICE_STATE_REASON_PPP_START_FAILED, "NM_DEVICE_STATE_REASON_PPP_START_FAILED", "ppp-start-failed" },
+ { NM_DEVICE_STATE_REASON_PPP_DISCONNECT, "NM_DEVICE_STATE_REASON_PPP_DISCONNECT", "ppp-disconnect" },
+ { NM_DEVICE_STATE_REASON_PPP_FAILED, "NM_DEVICE_STATE_REASON_PPP_FAILED", "ppp-failed" },
+ { NM_DEVICE_STATE_REASON_DHCP_START_FAILED, "NM_DEVICE_STATE_REASON_DHCP_START_FAILED", "dhcp-start-failed" },
+ { NM_DEVICE_STATE_REASON_DHCP_ERROR, "NM_DEVICE_STATE_REASON_DHCP_ERROR", "dhcp-error" },
+ { NM_DEVICE_STATE_REASON_DHCP_FAILED, "NM_DEVICE_STATE_REASON_DHCP_FAILED", "dhcp-failed" },
+ { NM_DEVICE_STATE_REASON_SHARED_START_FAILED, "NM_DEVICE_STATE_REASON_SHARED_START_FAILED", "shared-start-failed" },
+ { NM_DEVICE_STATE_REASON_SHARED_FAILED, "NM_DEVICE_STATE_REASON_SHARED_FAILED", "shared-failed" },
+ { NM_DEVICE_STATE_REASON_AUTOIP_START_FAILED, "NM_DEVICE_STATE_REASON_AUTOIP_START_FAILED", "autoip-start-failed" },
+ { NM_DEVICE_STATE_REASON_AUTOIP_ERROR, "NM_DEVICE_STATE_REASON_AUTOIP_ERROR", "autoip-error" },
+ { NM_DEVICE_STATE_REASON_AUTOIP_FAILED, "NM_DEVICE_STATE_REASON_AUTOIP_FAILED", "autoip-failed" },
+ { NM_DEVICE_STATE_REASON_MODEM_BUSY, "NM_DEVICE_STATE_REASON_MODEM_BUSY", "modem-busy" },
+ { NM_DEVICE_STATE_REASON_MODEM_NO_DIAL_TONE, "NM_DEVICE_STATE_REASON_MODEM_NO_DIAL_TONE", "modem-no-dial-tone" },
+ { NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER, "NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER", "modem-no-carrier" },
+ { NM_DEVICE_STATE_REASON_MODEM_DIAL_TIMEOUT, "NM_DEVICE_STATE_REASON_MODEM_DIAL_TIMEOUT", "modem-dial-timeout" },
+ { NM_DEVICE_STATE_REASON_MODEM_DIAL_FAILED, "NM_DEVICE_STATE_REASON_MODEM_DIAL_FAILED", "modem-dial-failed" },
+ { NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED, "NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED", "modem-init-failed" },
+ { NM_DEVICE_STATE_REASON_GSM_APN_FAILED, "NM_DEVICE_STATE_REASON_GSM_APN_FAILED", "gsm-apn-failed" },
+ { NM_DEVICE_STATE_REASON_GSM_REGISTRATION_NOT_SEARCHING, "NM_DEVICE_STATE_REASON_GSM_REGISTRATION_NOT_SEARCHING", "gsm-registration-not-searching" },
+ { NM_DEVICE_STATE_REASON_GSM_REGISTRATION_DENIED, "NM_DEVICE_STATE_REASON_GSM_REGISTRATION_DENIED", "gsm-registration-denied" },
+ { NM_DEVICE_STATE_REASON_GSM_REGISTRATION_TIMEOUT, "NM_DEVICE_STATE_REASON_GSM_REGISTRATION_TIMEOUT", "gsm-registration-timeout" },
+ { NM_DEVICE_STATE_REASON_GSM_REGISTRATION_FAILED, "NM_DEVICE_STATE_REASON_GSM_REGISTRATION_FAILED", "gsm-registration-failed" },
+ { NM_DEVICE_STATE_REASON_GSM_PIN_CHECK_FAILED, "NM_DEVICE_STATE_REASON_GSM_PIN_CHECK_FAILED", "gsm-pin-check-failed" },
+ { NM_DEVICE_STATE_REASON_FIRMWARE_MISSING, "NM_DEVICE_STATE_REASON_FIRMWARE_MISSING", "firmware-missing" },
+ { NM_DEVICE_STATE_REASON_REMOVED, "NM_DEVICE_STATE_REASON_REMOVED", "removed" },
+ { NM_DEVICE_STATE_REASON_SLEEPING, "NM_DEVICE_STATE_REASON_SLEEPING", "sleeping" },
+ { NM_DEVICE_STATE_REASON_CONNECTION_REMOVED, "NM_DEVICE_STATE_REASON_CONNECTION_REMOVED", "connection-removed" },
+ { NM_DEVICE_STATE_REASON_USER_REQUESTED, "NM_DEVICE_STATE_REASON_USER_REQUESTED", "user-requested" },
+ { NM_DEVICE_STATE_REASON_CARRIER, "NM_DEVICE_STATE_REASON_CARRIER", "carrier" },
+ { NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED, "NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED", "connection-assumed" },
+ { NM_DEVICE_STATE_REASON_SUPPLICANT_AVAILABLE, "NM_DEVICE_STATE_REASON_SUPPLICANT_AVAILABLE", "supplicant-available" },
+ { NM_DEVICE_STATE_REASON_MODEM_NOT_FOUND, "NM_DEVICE_STATE_REASON_MODEM_NOT_FOUND", "modem-not-found" },
+ { NM_DEVICE_STATE_REASON_BT_FAILED, "NM_DEVICE_STATE_REASON_BT_FAILED", "bt-failed" },
+ { NM_DEVICE_STATE_REASON_GSM_SIM_NOT_INSERTED, "NM_DEVICE_STATE_REASON_GSM_SIM_NOT_INSERTED", "gsm-sim-not-inserted" },
+ { NM_DEVICE_STATE_REASON_GSM_SIM_PIN_REQUIRED, "NM_DEVICE_STATE_REASON_GSM_SIM_PIN_REQUIRED", "gsm-sim-pin-required" },
+ { NM_DEVICE_STATE_REASON_GSM_SIM_PUK_REQUIRED, "NM_DEVICE_STATE_REASON_GSM_SIM_PUK_REQUIRED", "gsm-sim-puk-required" },
+ { NM_DEVICE_STATE_REASON_GSM_SIM_WRONG, "NM_DEVICE_STATE_REASON_GSM_SIM_WRONG", "gsm-sim-wrong" },
+ { NM_DEVICE_STATE_REASON_INFINIBAND_MODE, "NM_DEVICE_STATE_REASON_INFINIBAND_MODE", "infiniband-mode" },
+ { NM_DEVICE_STATE_REASON_DEPENDENCY_FAILED, "NM_DEVICE_STATE_REASON_DEPENDENCY_FAILED", "dependency-failed" },
+ { NM_DEVICE_STATE_REASON_BR2684_FAILED, "NM_DEVICE_STATE_REASON_BR2684_FAILED", "br2684-failed" },
+ { NM_DEVICE_STATE_REASON_MODEM_MANAGER_UNAVAILABLE, "NM_DEVICE_STATE_REASON_MODEM_MANAGER_UNAVAILABLE", "modem-manager-unavailable" },
+ { NM_DEVICE_STATE_REASON_SSID_NOT_FOUND, "NM_DEVICE_STATE_REASON_SSID_NOT_FOUND", "ssid-not-found" },
+ { NM_DEVICE_STATE_REASON_SECONDARY_CONNECTION_FAILED, "NM_DEVICE_STATE_REASON_SECONDARY_CONNECTION_FAILED", "secondary-connection-failed" },
+ { NM_DEVICE_STATE_REASON_DCB_FCOE_FAILED, "NM_DEVICE_STATE_REASON_DCB_FCOE_FAILED", "dcb-fcoe-failed" },
+ { NM_DEVICE_STATE_REASON_TEAMD_CONTROL_FAILED, "NM_DEVICE_STATE_REASON_TEAMD_CONTROL_FAILED", "teamd-control-failed" },
+ { NM_DEVICE_STATE_REASON_MODEM_FAILED, "NM_DEVICE_STATE_REASON_MODEM_FAILED", "modem-failed" },
+ { NM_DEVICE_STATE_REASON_MODEM_AVAILABLE, "NM_DEVICE_STATE_REASON_MODEM_AVAILABLE", "modem-available" },
+ { NM_DEVICE_STATE_REASON_SIM_PIN_INCORRECT, "NM_DEVICE_STATE_REASON_SIM_PIN_INCORRECT", "sim-pin-incorrect" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMDeviceStateReason"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
+nm_active_connection_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_ACTIVE_CONNECTION_STATE_UNKNOWN, "NM_ACTIVE_CONNECTION_STATE_UNKNOWN", "unknown" },
+ { NM_ACTIVE_CONNECTION_STATE_ACTIVATING, "NM_ACTIVE_CONNECTION_STATE_ACTIVATING", "activating" },
+ { NM_ACTIVE_CONNECTION_STATE_ACTIVATED, "NM_ACTIVE_CONNECTION_STATE_ACTIVATED", "activated" },
+ { NM_ACTIVE_CONNECTION_STATE_DEACTIVATING, "NM_ACTIVE_CONNECTION_STATE_DEACTIVATING", "deactivating" },
+ { NM_ACTIVE_CONNECTION_STATE_DEACTIVATED, "NM_ACTIVE_CONNECTION_STATE_DEACTIVATED", "deactivated" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMActiveConnectionState"), 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;
+
+ if (g_once_init_enter (&g_define_type_id__volatile))
+ {
+ static const GFlagsValue values[] = {
+ { NM_SECRET_AGENT_GET_SECRETS_FLAG_NONE, "NM_SECRET_AGENT_GET_SECRETS_FLAG_NONE", "none" },
+ { NM_SECRET_AGENT_GET_SECRETS_FLAG_ALLOW_INTERACTION, "NM_SECRET_AGENT_GET_SECRETS_FLAG_ALLOW_INTERACTION", "allow-interaction" },
+ { NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW, "NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW", "request-new" },
+ { NM_SECRET_AGENT_GET_SECRETS_FLAG_USER_REQUESTED, "NM_SECRET_AGENT_GET_SECRETS_FLAG_USER_REQUESTED", "user-requested" },
+ { NM_SECRET_AGENT_GET_SECRETS_FLAG_ONLY_SYSTEM, "NM_SECRET_AGENT_GET_SECRETS_FLAG_ONLY_SYSTEM", "only-system" },
+ { NM_SECRET_AGENT_GET_SECRETS_FLAG_NO_ERRORS, "NM_SECRET_AGENT_GET_SECRETS_FLAG_NO_ERRORS", "no-errors" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_flags_register_static (g_intern_static_string ("NMSecretAgentGetSecretsFlags"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ 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_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[] = {
+ { NM_AGENT_MANAGER_ERROR_FAILED, "NM_AGENT_MANAGER_ERROR_FAILED", "Failed" },
+ { NM_AGENT_MANAGER_ERROR_PERMISSION_DENIED, "NM_AGENT_MANAGER_ERROR_PERMISSION_DENIED", "PermissionDenied" },
+ { 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_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 ("NMAgentManagerError"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
+nm_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_CONNECTION_ERROR_FAILED, "NM_CONNECTION_ERROR_FAILED", "Failed" },
+ { NM_CONNECTION_ERROR_SETTING_NOT_FOUND, "NM_CONNECTION_ERROR_SETTING_NOT_FOUND", "SettingNotFound" },
+ { NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND, "NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND", "PropertyNotFound" },
+ { NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET, "NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET", "PropertyNotSecret" },
+ { NM_CONNECTION_ERROR_MISSING_SETTING, "NM_CONNECTION_ERROR_MISSING_SETTING", "MissingSetting" },
+ { NM_CONNECTION_ERROR_INVALID_SETTING, "NM_CONNECTION_ERROR_INVALID_SETTING", "InvalidSetting" },
+ { NM_CONNECTION_ERROR_MISSING_PROPERTY, "NM_CONNECTION_ERROR_MISSING_PROPERTY", "MissingProperty" },
+ { NM_CONNECTION_ERROR_INVALID_PROPERTY, "NM_CONNECTION_ERROR_INVALID_PROPERTY", "InvalidProperty" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMConnectionError"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
+nm_crypto_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_CRYPTO_ERROR_FAILED, "NM_CRYPTO_ERROR_FAILED", "failed" },
+ { NM_CRYPTO_ERROR_INVALID_DATA, "NM_CRYPTO_ERROR_INVALID_DATA", "invalid-data" },
+ { NM_CRYPTO_ERROR_INVALID_PASSWORD, "NM_CRYPTO_ERROR_INVALID_PASSWORD", "invalid-password" },
+ { NM_CRYPTO_ERROR_UNKNOWN_CIPHER, "NM_CRYPTO_ERROR_UNKNOWN_CIPHER", "unknown-cipher" },
+ { NM_CRYPTO_ERROR_DECRYPTION_FAILED, "NM_CRYPTO_ERROR_DECRYPTION_FAILED", "decryption-failed" },
+ { NM_CRYPTO_ERROR_ENCRYPTION_FAILED, "NM_CRYPTO_ERROR_ENCRYPTION_FAILED", "encryption-failed" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMCryptoError"), 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_FAILED, "NM_DEVICE_ERROR_FAILED", "Failed" },
+ { NM_DEVICE_ERROR_CREATION_FAILED, "NM_DEVICE_ERROR_CREATION_FAILED", "CreationFailed" },
+ { NM_DEVICE_ERROR_INVALID_CONNECTION, "NM_DEVICE_ERROR_INVALID_CONNECTION", "InvalidConnection" },
+ { NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION, "NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION", "IncompatibleConnection" },
+ { NM_DEVICE_ERROR_NOT_ACTIVE, "NM_DEVICE_ERROR_NOT_ACTIVE", "NotActive" },
+ { NM_DEVICE_ERROR_NOT_SOFTWARE, "NM_DEVICE_ERROR_NOT_SOFTWARE", "NotSoftware" },
+ { NM_DEVICE_ERROR_NOT_ALLOWED, "NM_DEVICE_ERROR_NOT_ALLOWED", "NotAllowed" },
+ { NM_DEVICE_ERROR_SPECIFIC_OBJECT_NOT_FOUND, "NM_DEVICE_ERROR_SPECIFIC_OBJECT_NOT_FOUND", "SpecificObjectNotFound" },
+ { 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_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_FAILED, "NM_MANAGER_ERROR_FAILED", "Failed" },
+ { NM_MANAGER_ERROR_PERMISSION_DENIED, "NM_MANAGER_ERROR_PERMISSION_DENIED", "PermissionDenied" },
+ { 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_CONNECTION_NOT_AVAILABLE, "NM_MANAGER_ERROR_CONNECTION_NOT_AVAILABLE", "ConnectionNotAvailable" },
+ { NM_MANAGER_ERROR_CONNECTION_NOT_ACTIVE, "NM_MANAGER_ERROR_CONNECTION_NOT_ACTIVE", "ConnectionNotActive" },
+ { NM_MANAGER_ERROR_CONNECTION_ALREADY_ACTIVE, "NM_MANAGER_ERROR_CONNECTION_ALREADY_ACTIVE", "ConnectionAlreadyActive" },
+ { NM_MANAGER_ERROR_DEPENDENCY_FAILED, "NM_MANAGER_ERROR_DEPENDENCY_FAILED", "DependencyFailed" },
+ { 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_UNKNOWN_LOG_LEVEL, "NM_MANAGER_ERROR_UNKNOWN_LOG_LEVEL", "UnknownLogLevel" },
+ { NM_MANAGER_ERROR_UNKNOWN_LOG_DOMAIN, "NM_MANAGER_ERROR_UNKNOWN_LOG_DOMAIN", "UnknownLogDomain" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ 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_secret_agent_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_SECRET_AGENT_ERROR_FAILED, "NM_SECRET_AGENT_ERROR_FAILED", "Failed" },
+ { NM_SECRET_AGENT_ERROR_PERMISSION_DENIED, "NM_SECRET_AGENT_ERROR_PERMISSION_DENIED", "PermissionDenied" },
+ { NM_SECRET_AGENT_ERROR_INVALID_CONNECTION, "NM_SECRET_AGENT_ERROR_INVALID_CONNECTION", "InvalidConnection" },
+ { NM_SECRET_AGENT_ERROR_USER_CANCELED, "NM_SECRET_AGENT_ERROR_USER_CANCELED", "UserCanceled" },
+ { NM_SECRET_AGENT_ERROR_AGENT_CANCELED, "NM_SECRET_AGENT_ERROR_AGENT_CANCELED", "AgentCanceled" },
+ { NM_SECRET_AGENT_ERROR_NO_SECRETS, "NM_SECRET_AGENT_ERROR_NO_SECRETS", "NoSecrets" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMSecretAgentError"), 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)
+{
+ 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_FAILED, "NM_SETTINGS_ERROR_FAILED", "Failed" },
+ { NM_SETTINGS_ERROR_PERMISSION_DENIED, "NM_SETTINGS_ERROR_PERMISSION_DENIED", "PermissionDenied" },
+ { NM_SETTINGS_ERROR_NOT_SUPPORTED, "NM_SETTINGS_ERROR_NOT_SUPPORTED", "NotSupported" },
+ { 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_UUID_EXISTS, "NM_SETTINGS_ERROR_UUID_EXISTS", "UuidExists" },
+ { NM_SETTINGS_ERROR_INVALID_HOSTNAME, "NM_SETTINGS_ERROR_INVALID_HOSTNAME", "InvalidHostname" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ 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_vpn_plugin_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_VPN_PLUGIN_ERROR_FAILED, "NM_VPN_PLUGIN_ERROR_FAILED", "Failed" },
+ { NM_VPN_PLUGIN_ERROR_STARTING_IN_PROGRESS, "NM_VPN_PLUGIN_ERROR_STARTING_IN_PROGRESS", "StartingInProgress" },
+ { NM_VPN_PLUGIN_ERROR_ALREADY_STARTED, "NM_VPN_PLUGIN_ERROR_ALREADY_STARTED", "AlreadyStarted" },
+ { NM_VPN_PLUGIN_ERROR_STOPPING_IN_PROGRESS, "NM_VPN_PLUGIN_ERROR_STOPPING_IN_PROGRESS", "StoppingInProgress" },
+ { NM_VPN_PLUGIN_ERROR_ALREADY_STOPPED, "NM_VPN_PLUGIN_ERROR_ALREADY_STOPPED", "AlreadyStopped" },
+ { NM_VPN_PLUGIN_ERROR_WRONG_STATE, "NM_VPN_PLUGIN_ERROR_WRONG_STATE", "WrongState" },
+ { 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_INVALID_CONNECTION, "NM_VPN_PLUGIN_ERROR_INVALID_CONNECTION", "InvalidConnection" },
+ { NM_VPN_PLUGIN_ERROR_INTERACTIVE_NOT_SUPPORTED, "NM_VPN_PLUGIN_ERROR_INTERACTIVE_NOT_SUPPORTED", "InteractiveNotSupported" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMVpnPluginError"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
+nm_setting_802_1x_ck_format_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_802_1X_CK_FORMAT_UNKNOWN, "NM_SETTING_802_1X_CK_FORMAT_UNKNOWN", "unknown" },
+ { NM_SETTING_802_1X_CK_FORMAT_X509, "NM_SETTING_802_1X_CK_FORMAT_X509", "x509" },
+ { NM_SETTING_802_1X_CK_FORMAT_RAW_KEY, "NM_SETTING_802_1X_CK_FORMAT_RAW_KEY", "raw-key" },
+ { NM_SETTING_802_1X_CK_FORMAT_PKCS12, "NM_SETTING_802_1X_CK_FORMAT_PKCS12", "pkcs12" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMSetting8021xCKFormat"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
+nm_setting_802_1x_ck_scheme_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_802_1X_CK_SCHEME_UNKNOWN, "NM_SETTING_802_1X_CK_SCHEME_UNKNOWN", "unknown" },
+ { NM_SETTING_802_1X_CK_SCHEME_BLOB, "NM_SETTING_802_1X_CK_SCHEME_BLOB", "blob" },
+ { NM_SETTING_802_1X_CK_SCHEME_PATH, "NM_SETTING_802_1X_CK_SCHEME_PATH", "path" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMSetting8021xCKScheme"), 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 GFlagsValue 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_flags_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_ip6_config_privacy_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_IP6_CONFIG_PRIVACY_UNKNOWN, "NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN", "unknown" },
+ { NM_SETTING_IP6_CONFIG_PRIVACY_DISABLED, "NM_SETTING_IP6_CONFIG_PRIVACY_DISABLED", "disabled" },
+ { NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_PUBLIC_ADDR, "NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_PUBLIC_ADDR", "prefer-public-addr" },
+ { NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR, "NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR", "prefer-temp-addr" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMSettingIP6ConfigPrivacy"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
+nm_setting_serial_parity_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_SERIAL_PARITY_NONE, "NM_SETTING_SERIAL_PARITY_NONE", "none" },
+ { NM_SETTING_SERIAL_PARITY_EVEN, "NM_SETTING_SERIAL_PARITY_EVEN", "even" },
+ { NM_SETTING_SERIAL_PARITY_ODD, "NM_SETTING_SERIAL_PARITY_ODD", "odd" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMSettingSerialParity"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
+nm_vlan_priority_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_VLAN_INGRESS_MAP, "NM_VLAN_INGRESS_MAP", "ingress-map" },
+ { NM_VLAN_EGRESS_MAP, "NM_VLAN_EGRESS_MAP", "egress-map" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMVlanPriorityMap"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
+nm_vlan_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 GFlagsValue values[] = {
+ { NM_VLAN_FLAG_REORDER_HEADERS, "NM_VLAN_FLAG_REORDER_HEADERS", "reorder-headers" },
+ { NM_VLAN_FLAG_GVRP, "NM_VLAN_FLAG_GVRP", "gvrp" },
+ { NM_VLAN_FLAG_LOOSE_BINDING, "NM_VLAN_FLAG_LOOSE_BINDING", "loose-binding" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_flags_register_static (g_intern_static_string ("NMVlanFlags"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
+nm_wep_key_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_WEP_KEY_TYPE_UNKNOWN, "NM_WEP_KEY_TYPE_UNKNOWN", "unknown" },
+ { NM_WEP_KEY_TYPE_KEY, "NM_WEP_KEY_TYPE_KEY", "key" },
+ { NM_WEP_KEY_TYPE_PASSPHRASE, "NM_WEP_KEY_TYPE_PASSPHRASE", "passphrase" },
+ { NM_WEP_KEY_TYPE_LAST, "NM_WEP_KEY_TYPE_LAST", "last" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMWepKeyType"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
+nm_setting_secret_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 GFlagsValue values[] = {
+ { NM_SETTING_SECRET_FLAG_NONE, "NM_SETTING_SECRET_FLAG_NONE", "none" },
+ { NM_SETTING_SECRET_FLAG_AGENT_OWNED, "NM_SETTING_SECRET_FLAG_AGENT_OWNED", "agent-owned" },
+ { NM_SETTING_SECRET_FLAG_NOT_SAVED, "NM_SETTING_SECRET_FLAG_NOT_SAVED", "not-saved" },
+ { NM_SETTING_SECRET_FLAG_NOT_REQUIRED, "NM_SETTING_SECRET_FLAG_NOT_REQUIRED", "not-required" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_flags_register_static (g_intern_static_string ("NMSettingSecretFlags"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
+nm_setting_compare_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_COMPARE_FLAG_EXACT, "NM_SETTING_COMPARE_FLAG_EXACT", "exact" },
+ { NM_SETTING_COMPARE_FLAG_FUZZY, "NM_SETTING_COMPARE_FLAG_FUZZY", "fuzzy" },
+ { NM_SETTING_COMPARE_FLAG_IGNORE_ID, "NM_SETTING_COMPARE_FLAG_IGNORE_ID", "ignore-id" },
+ { NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS, "NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS", "ignore-secrets" },
+ { NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS, "NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS", "ignore-agent-owned-secrets" },
+ { NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS, "NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS", "ignore-not-saved-secrets" },
+ { NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT, "NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT", "diff-result-with-default" },
+ { NM_SETTING_COMPARE_FLAG_DIFF_RESULT_NO_DEFAULT, "NM_SETTING_COMPARE_FLAG_DIFF_RESULT_NO_DEFAULT", "diff-result-no-default" },
+ { NM_SETTING_COMPARE_FLAG_IGNORE_TIMESTAMP, "NM_SETTING_COMPARE_FLAG_IGNORE_TIMESTAMP", "ignore-timestamp" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMSettingCompareFlags"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
+nm_setting_diff_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_SETTING_DIFF_RESULT_UNKNOWN, "NM_SETTING_DIFF_RESULT_UNKNOWN", "unknown" },
+ { NM_SETTING_DIFF_RESULT_IN_A, "NM_SETTING_DIFF_RESULT_IN_A", "in-a" },
+ { NM_SETTING_DIFF_RESULT_IN_B, "NM_SETTING_DIFF_RESULT_IN_B", "in-b" },
+ { NM_SETTING_DIFF_RESULT_IN_A_DEFAULT, "NM_SETTING_DIFF_RESULT_IN_A_DEFAULT", "in-a-default" },
+ { NM_SETTING_DIFF_RESULT_IN_B_DEFAULT, "NM_SETTING_DIFF_RESULT_IN_B_DEFAULT", "in-b-default" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMSettingDiffResult"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
+nm_utils_security_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[] = {
+ { NMU_SEC_INVALID, "NMU_SEC_INVALID", "invalid" },
+ { NMU_SEC_NONE, "NMU_SEC_NONE", "none" },
+ { NMU_SEC_STATIC_WEP, "NMU_SEC_STATIC_WEP", "static-wep" },
+ { NMU_SEC_LEAP, "NMU_SEC_LEAP", "leap" },
+ { NMU_SEC_DYNAMIC_WEP, "NMU_SEC_DYNAMIC_WEP", "dynamic-wep" },
+ { NMU_SEC_WPA_PSK, "NMU_SEC_WPA_PSK", "wpa-psk" },
+ { NMU_SEC_WPA_ENTERPRISE, "NMU_SEC_WPA_ENTERPRISE", "wpa-enterprise" },
+ { NMU_SEC_WPA2_PSK, "NMU_SEC_WPA2_PSK", "wpa2-psk" },
+ { NMU_SEC_WPA2_ENTERPRISE, "NMU_SEC_WPA2_ENTERPRISE", "wpa2-enterprise" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMUtilsSecurityType"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
+nm_vpn_service_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_VPN_SERVICE_STATE_UNKNOWN, "NM_VPN_SERVICE_STATE_UNKNOWN", "unknown" },
+ { NM_VPN_SERVICE_STATE_INIT, "NM_VPN_SERVICE_STATE_INIT", "init" },
+ { NM_VPN_SERVICE_STATE_SHUTDOWN, "NM_VPN_SERVICE_STATE_SHUTDOWN", "shutdown" },
+ { NM_VPN_SERVICE_STATE_STARTING, "NM_VPN_SERVICE_STATE_STARTING", "starting" },
+ { NM_VPN_SERVICE_STATE_STARTED, "NM_VPN_SERVICE_STATE_STARTED", "started" },
+ { NM_VPN_SERVICE_STATE_STOPPING, "NM_VPN_SERVICE_STATE_STOPPING", "stopping" },
+ { NM_VPN_SERVICE_STATE_STOPPED, "NM_VPN_SERVICE_STATE_STOPPED", "stopped" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMVpnServiceState"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
+nm_vpn_connection_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_VPN_CONNECTION_STATE_UNKNOWN, "NM_VPN_CONNECTION_STATE_UNKNOWN", "unknown" },
+ { NM_VPN_CONNECTION_STATE_PREPARE, "NM_VPN_CONNECTION_STATE_PREPARE", "prepare" },
+ { NM_VPN_CONNECTION_STATE_NEED_AUTH, "NM_VPN_CONNECTION_STATE_NEED_AUTH", "need-auth" },
+ { NM_VPN_CONNECTION_STATE_CONNECT, "NM_VPN_CONNECTION_STATE_CONNECT", "connect" },
+ { NM_VPN_CONNECTION_STATE_IP_CONFIG_GET, "NM_VPN_CONNECTION_STATE_IP_CONFIG_GET", "ip-config-get" },
+ { NM_VPN_CONNECTION_STATE_ACTIVATED, "NM_VPN_CONNECTION_STATE_ACTIVATED", "activated" },
+ { NM_VPN_CONNECTION_STATE_FAILED, "NM_VPN_CONNECTION_STATE_FAILED", "failed" },
+ { NM_VPN_CONNECTION_STATE_DISCONNECTED, "NM_VPN_CONNECTION_STATE_DISCONNECTED", "disconnected" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMVpnConnectionState"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
+nm_vpn_connection_state_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_VPN_CONNECTION_STATE_REASON_UNKNOWN, "NM_VPN_CONNECTION_STATE_REASON_UNKNOWN", "unknown" },
+ { NM_VPN_CONNECTION_STATE_REASON_NONE, "NM_VPN_CONNECTION_STATE_REASON_NONE", "none" },
+ { NM_VPN_CONNECTION_STATE_REASON_USER_DISCONNECTED, "NM_VPN_CONNECTION_STATE_REASON_USER_DISCONNECTED", "user-disconnected" },
+ { NM_VPN_CONNECTION_STATE_REASON_DEVICE_DISCONNECTED, "NM_VPN_CONNECTION_STATE_REASON_DEVICE_DISCONNECTED", "device-disconnected" },
+ { NM_VPN_CONNECTION_STATE_REASON_SERVICE_STOPPED, "NM_VPN_CONNECTION_STATE_REASON_SERVICE_STOPPED", "service-stopped" },
+ { NM_VPN_CONNECTION_STATE_REASON_IP_CONFIG_INVALID, "NM_VPN_CONNECTION_STATE_REASON_IP_CONFIG_INVALID", "ip-config-invalid" },
+ { NM_VPN_CONNECTION_STATE_REASON_CONNECT_TIMEOUT, "NM_VPN_CONNECTION_STATE_REASON_CONNECT_TIMEOUT", "connect-timeout" },
+ { NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_TIMEOUT, "NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_TIMEOUT", "service-start-timeout" },
+ { NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_FAILED, "NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_FAILED", "service-start-failed" },
+ { NM_VPN_CONNECTION_STATE_REASON_NO_SECRETS, "NM_VPN_CONNECTION_STATE_REASON_NO_SECRETS", "no-secrets" },
+ { NM_VPN_CONNECTION_STATE_REASON_LOGIN_FAILED, "NM_VPN_CONNECTION_STATE_REASON_LOGIN_FAILED", "login-failed" },
+ { NM_VPN_CONNECTION_STATE_REASON_CONNECTION_REMOVED, "NM_VPN_CONNECTION_STATE_REASON_CONNECTION_REMOVED", "connection-removed" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMVpnConnectionStateReason"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
+nm_vpn_plugin_failure_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_PLUGIN_FAILURE_LOGIN_FAILED, "NM_VPN_PLUGIN_FAILURE_LOGIN_FAILED", "login-failed" },
+ { NM_VPN_PLUGIN_FAILURE_CONNECT_FAILED, "NM_VPN_PLUGIN_FAILURE_CONNECT_FAILED", "connect-failed" },
+ { NM_VPN_PLUGIN_FAILURE_BAD_IP_CONFIG, "NM_VPN_PLUGIN_FAILURE_BAD_IP_CONFIG", "bad-ip-config" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMVpnPluginFailure"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+
+
+
diff --git a/libnm-core/nm-core-enum-types.h b/libnm-core/nm-core-enum-types.h
new file mode 100644
index 000000000..162b704eb
--- /dev/null
+++ b/libnm-core/nm-core-enum-types.h
@@ -0,0 +1,97 @@
+
+
+
+/* Generated by glib-mkenums. Do not edit */
+
+#ifndef __NM_CORE_ENUM_TYPES_H__
+#define __NM_CORE_ENUM_TYPES_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+GType nm_connection_serialization_flags_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_CONNECTION_SERIALIZATION_FLAGS (nm_connection_serialization_flags_get_type ())
+GType nm_state_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_STATE (nm_state_get_type ())
+GType nm_connectivity_state_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_CONNECTIVITY_STATE (nm_connectivity_state_get_type ())
+GType nm_device_type_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_DEVICE_TYPE (nm_device_type_get_type ())
+GType nm_device_capabilities_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_DEVICE_CAPABILITIES (nm_device_capabilities_get_type ())
+GType nm_device_wifi_capabilities_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_DEVICE_WIFI_CAPABILITIES (nm_device_wifi_capabilities_get_type ())
+GType nm_802_11_ap_flags_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_802_11_AP_FLAGS (nm_802_11_ap_flags_get_type ())
+GType nm_802_11_ap_security_flags_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_802_11_AP_SECURITY_FLAGS (nm_802_11_ap_security_flags_get_type ())
+GType nm_802_11_mode_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_802_11_MODE (nm_802_11_mode_get_type ())
+GType nm_bluetooth_capabilities_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_BLUETOOTH_CAPABILITIES (nm_bluetooth_capabilities_get_type ())
+GType nm_device_modem_capabilities_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_DEVICE_MODEM_CAPABILITIES (nm_device_modem_capabilities_get_type ())
+GType nm_device_state_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_DEVICE_STATE (nm_device_state_get_type ())
+GType nm_device_state_reason_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_DEVICE_STATE_REASON (nm_device_state_reason_get_type ())
+GType nm_active_connection_state_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_ACTIVE_CONNECTION_STATE (nm_active_connection_state_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_secret_agent_capabilities_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_SECRET_AGENT_CAPABILITIES (nm_secret_agent_capabilities_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_connection_error_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_CONNECTION_ERROR (nm_connection_error_get_type ())
+GType nm_crypto_error_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_CRYPTO_ERROR (nm_crypto_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_manager_error_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_MANAGER_ERROR (nm_manager_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_settings_error_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_SETTINGS_ERROR (nm_settings_error_get_type ())
+GType nm_vpn_plugin_error_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_VPN_PLUGIN_ERROR (nm_vpn_plugin_error_get_type ())
+GType nm_setting_802_1x_ck_format_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_SETTING_802_1X_CK_FORMAT (nm_setting_802_1x_ck_format_get_type ())
+GType nm_setting_802_1x_ck_scheme_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_SETTING_802_1X_CK_SCHEME (nm_setting_802_1x_ck_scheme_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_ip6_config_privacy_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_SETTING_IP6_CONFIG_PRIVACY (nm_setting_ip6_config_privacy_get_type ())
+GType nm_setting_serial_parity_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_SETTING_SERIAL_PARITY (nm_setting_serial_parity_get_type ())
+GType nm_vlan_priority_map_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_VLAN_PRIORITY_MAP (nm_vlan_priority_map_get_type ())
+GType nm_vlan_flags_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_VLAN_FLAGS (nm_vlan_flags_get_type ())
+GType nm_wep_key_type_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_WEP_KEY_TYPE (nm_wep_key_type_get_type ())
+GType nm_setting_secret_flags_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_SETTING_SECRET_FLAGS (nm_setting_secret_flags_get_type ())
+GType nm_setting_compare_flags_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_SETTING_COMPARE_FLAGS (nm_setting_compare_flags_get_type ())
+GType nm_setting_diff_result_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_SETTING_DIFF_RESULT (nm_setting_diff_result_get_type ())
+GType nm_utils_security_type_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_UTILS_SECURITY_TYPE (nm_utils_security_type_get_type ())
+GType nm_vpn_service_state_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_VPN_SERVICE_STATE (nm_vpn_service_state_get_type ())
+GType nm_vpn_connection_state_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_VPN_CONNECTION_STATE (nm_vpn_connection_state_get_type ())
+GType nm_vpn_connection_state_reason_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_VPN_CONNECTION_STATE_REASON (nm_vpn_connection_state_reason_get_type ())
+GType nm_vpn_plugin_failure_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_VPN_PLUGIN_FAILURE (nm_vpn_plugin_failure_get_type ())
+G_END_DECLS
+
+#endif /* __NM_CORE_ENUM_TYPES_H__ */
+
+
+
diff --git a/libnm-core/nm-core-internal.h b/libnm-core/nm-core-internal.h
new file mode 100644
index 000000000..5af90267a
--- /dev/null
+++ b/libnm-core/nm-core-internal.h
@@ -0,0 +1,135 @@
+/* -*- 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_CORE_NM_INTERNAL_H
+#define NM_CORE_NM_INTERNAL_H
+
+/* This header file contain functions that are provided as private API
+ * by libnm-core. It will contain functions to give privileged access to
+ * libnm-core. This can be useful for NetworkManager and libnm.so
+ * which both are special users of libnm-core.
+ * It also exposes some utility functions for reuse.
+ *
+ * These functions are not exported and are only available to components that link
+ * statically against libnm-core. This basically means libnm-core, libnm, NetworkManager
+ * and some test programs.
+ **/
+
+#include "nm-connection.h"
+#include "nm-core-enum-types.h"
+#include "nm-dbus-interface.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-port.h"
+#include "nm-setting-bridge.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"
+#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-port.h"
+#include "nm-setting-team.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-security.h"
+#include "nm-setting-wireless.h"
+#include "nm-setting.h"
+#include "nm-simple-connection.h"
+#include "nm-utils.h"
+#include "nm-version.h"
+#include "nm-vpn-dbus-interface.h"
+
+#define NM_UTILS_CLEAR_CANCELLABLE(c) \
+ if (c) { \
+ g_cancellable_cancel (c); \
+ g_clear_object (&c); \
+ }
+
+/* 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
+
+
+
+#define NM_SETTING_SECRET_FLAGS_ALL \
+ (NM_SETTING_SECRET_FLAG_NONE | \
+ NM_SETTING_SECRET_FLAG_AGENT_OWNED | \
+ NM_SETTING_SECRET_FLAG_NOT_SAVED | \
+ NM_SETTING_SECRET_FLAG_NOT_REQUIRED)
+
+guint32 _nm_setting_get_setting_priority (NMSetting *setting);
+
+gboolean _nm_setting_get_property (NMSetting *setting, const char *name, GValue *value);
+
+GSList * _nm_utils_hash_values_to_slist (GHashTable *hash);
+
+GHashTable *_nm_utils_copy_strdict (GHashTable *strdict);
+
+typedef gpointer (*NMUtilsCopyFunc) (gpointer);
+
+GPtrArray *_nm_utils_copy_slist_to_array (const GSList *list,
+ NMUtilsCopyFunc copy_func,
+ GDestroyNotify unref_func);
+GSList *_nm_utils_copy_array_to_slist (const GPtrArray *array,
+ NMUtilsCopyFunc copy_func);
+
+GPtrArray *_nm_utils_copy_array (const GPtrArray *array,
+ NMUtilsCopyFunc copy_func,
+ GDestroyNotify free_func);
+GPtrArray *_nm_utils_copy_object_array (const GPtrArray *array);
+
+gboolean _nm_utils_string_in_list (const char *str,
+ const char **valid_strings);
+
+char ** _nm_utils_strsplit_set (const char *str,
+ const char *delimiters,
+ int max_tokens);
+
+#define NM_UTILS_UUID_TYPE_LEGACY 0
+#define NM_UTILS_UUID_TYPE_VARIANT3 1
+
+char *nm_utils_uuid_generate_from_string (const char *s, gssize slen, int uuid_type, gpointer type_args);
+
+void _nm_dbus_errors_init (void);
+
+extern gboolean _nm_utils_is_manager_process;
+
+GByteArray *nm_utils_rsa_key_encrypt (const guint8 *data,
+ gsize len,
+ const char *in_password,
+ char **out_password,
+ GError **error);
+
+#endif
diff --git a/libnm-core/nm-core-types.h b/libnm-core/nm-core-types.h
new file mode 100644
index 000000000..524d6396c
--- /dev/null
+++ b/libnm-core/nm-core-types.h
@@ -0,0 +1,60 @@
+/* -*- 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 2014 Red Hat, Inc.
+ */
+
+#ifndef __NM_CORE_TYPES_H__
+#define __NM_CORE_TYPES_H__
+
+#include <glib-object.h>
+
+#include <nm-dbus-interface.h>
+#include <nm-core-enum-types.h>
+
+typedef struct _NMConnection NMConnection;
+typedef struct _NMSetting NMSetting;
+typedef struct _NMSetting8021x NMSetting8021x;
+typedef struct _NMSettingAdsl NMSettingAdsl;
+typedef struct _NMSettingBluetooth NMSettingBluetooth;
+typedef struct _NMSettingBond NMSettingBond;
+typedef struct _NMSettingBridge NMSettingBridge;
+typedef struct _NMSettingBridgePort NMSettingBridgePort;
+typedef struct _NMSettingCdma NMSettingCdma;
+typedef struct _NMSettingConnection NMSettingConnection;
+typedef struct _NMSettingDcb NMSettingDcb;
+typedef struct _NMSettingGeneric NMSettingGeneric;
+typedef struct _NMSettingGsm NMSettingGsm;
+typedef struct _NMSettingInfiniband NMSettingInfiniband;
+typedef struct _NMSettingIPConfig NMSettingIPConfig;
+typedef struct _NMSettingIP4Config NMSettingIP4Config;
+typedef struct _NMSettingIP6Config NMSettingIP6Config;
+typedef struct _NMSettingOlpcMesh NMSettingOlpcMesh;
+typedef struct _NMSettingPpp NMSettingPpp;
+typedef struct _NMSettingPppoe NMSettingPppoe;
+typedef struct _NMSettingSerial NMSettingSerial;
+typedef struct _NMSettingTeam NMSettingTeam;
+typedef struct _NMSettingTeamPort NMSettingTeamPort;
+typedef struct _NMSettingVlan NMSettingVlan;
+typedef struct _NMSettingVpn NMSettingVpn;
+typedef struct _NMSettingWimax NMSettingWimax;
+typedef struct _NMSettingWired NMSettingWired;
+typedef struct _NMSettingWireless NMSettingWireless;
+typedef struct _NMSettingWirelessSecurity NMSettingWirelessSecurity;
+typedef struct _NMSimpleConnection NMSimpleConnection;
+
+#endif /* __NM_CORE_TYPES_H__ */
diff --git a/libnm-core/nm-dbus-interface.h b/libnm-core/nm-dbus-interface.h
new file mode 100644
index 000000000..dd2b70a0d
--- /dev/null
+++ b/libnm-core/nm-dbus-interface.h
@@ -0,0 +1,611 @@
+/* -*- 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, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright 2004 - 2014 Red Hat, Inc.
+ */
+
+/* Definitions related to NetworkManager's D-Bus interfaces.
+ *
+ * Note that although this header is installed as part of libnm, it is also
+ * used by some external code that does not link to libnm.
+ */
+
+#ifndef __NM_DBUS_INTERFACE_H__
+#define __NM_DBUS_INTERFACE_H__
+
+#include "nm-version.h"
+
+/*
+ * dbus services details
+ */
+#define NM_DBUS_SERVICE "org.freedesktop.NetworkManager"
+
+#define NM_DBUS_PATH "/org/freedesktop/NetworkManager"
+#define NM_DBUS_INTERFACE "org.freedesktop.NetworkManager"
+#define NM_DBUS_INTERFACE_DEVICE NM_DBUS_INTERFACE ".Device"
+#define NM_DBUS_INTERFACE_DEVICE_WIRED NM_DBUS_INTERFACE_DEVICE ".Wired"
+#define NM_DBUS_INTERFACE_DEVICE_ADSL NM_DBUS_INTERFACE_DEVICE ".Adsl"
+#define NM_DBUS_INTERFACE_DEVICE_WIRELESS NM_DBUS_INTERFACE_DEVICE ".Wireless"
+#define NM_DBUS_INTERFACE_DEVICE_BLUETOOTH NM_DBUS_INTERFACE_DEVICE ".Bluetooth"
+#define NM_DBUS_INTERFACE_DEVICE_OLPC_MESH NM_DBUS_INTERFACE_DEVICE ".OlpcMesh"
+#define NM_DBUS_PATH_ACCESS_POINT NM_DBUS_PATH "/AccessPoint"
+#define NM_DBUS_INTERFACE_ACCESS_POINT NM_DBUS_INTERFACE ".AccessPoint"
+#define NM_DBUS_INTERFACE_DEVICE_MODEM NM_DBUS_INTERFACE_DEVICE ".Modem"
+#define NM_DBUS_INTERFACE_DEVICE_WIMAX NM_DBUS_INTERFACE_DEVICE ".WiMax"
+#define NM_DBUS_INTERFACE_WIMAX_NSP NM_DBUS_INTERFACE ".WiMax.Nsp"
+#define NM_DBUS_PATH_WIMAX_NSP NM_DBUS_PATH "/Nsp"
+#define NM_DBUS_INTERFACE_ACTIVE_CONNECTION NM_DBUS_INTERFACE ".Connection.Active"
+#define NM_DBUS_INTERFACE_IP4_CONFIG NM_DBUS_INTERFACE ".IP4Config"
+#define NM_DBUS_INTERFACE_DHCP4_CONFIG NM_DBUS_INTERFACE ".DHCP4Config"
+#define NM_DBUS_INTERFACE_IP6_CONFIG NM_DBUS_INTERFACE ".IP6Config"
+#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_INTERFACE_SETTINGS "org.freedesktop.NetworkManager.Settings"
+#define NM_DBUS_PATH_SETTINGS "/org/freedesktop/NetworkManager/Settings"
+
+#define NM_DBUS_INTERFACE_SETTINGS_CONNECTION "org.freedesktop.NetworkManager.Settings.Connection"
+#define NM_DBUS_PATH_SETTINGS_CONNECTION "/org/freedesktop/NetworkManager/Settings/Connection"
+#define NM_DBUS_INTERFACE_SETTINGS_CONNECTION_SECRETS "org.freedesktop.NetworkManager.Settings.Connection.Secrets"
+
+#define NM_DBUS_INTERFACE_AGENT_MANAGER NM_DBUS_INTERFACE ".AgentManager"
+#define NM_DBUS_PATH_AGENT_MANAGER "/org/freedesktop/NetworkManager/AgentManager"
+
+#define NM_DBUS_INTERFACE_SECRET_AGENT NM_DBUS_INTERFACE ".SecretAgent"
+#define NM_DBUS_PATH_SECRET_AGENT "/org/freedesktop/NetworkManager/SecretAgent"
+
+/**
+ * NMState:
+ * @NM_STATE_UNKNOWN: networking state is unknown
+ * @NM_STATE_ASLEEP: networking is not enabled
+ * @NM_STATE_DISCONNECTED: there is no active network connection
+ * @NM_STATE_DISCONNECTING: network connections are being cleaned up
+ * @NM_STATE_CONNECTING: a network connection is being started
+ * @NM_STATE_CONNECTED_LOCAL: there is only local IPv4 and/or IPv6 connectivity
+ * @NM_STATE_CONNECTED_SITE: there is only site-wide IPv4 and/or IPv6 connectivity
+ * @NM_STATE_CONNECTED_GLOBAL: there is global IPv4 and/or IPv6 Internet connectivity
+ *
+ * #NMState values indicate the current overall networking state.
+ *
+ * (Corresponds to the NM_STATE type in nm-manager.xml.)
+ **/
+typedef enum {
+ 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
+} NMState;
+
+/**
+ * NMConnectivityState:
+ * @NM_CONNECTIVITY_UNKNOWN: Network connectivity is unknown.
+ * @NM_CONNECTIVITY_NONE: The host is not connected to any network.
+ * @NM_CONNECTIVITY_PORTAL: The host is behind a captive portal and
+ * cannot reach the full Internet.
+ * @NM_CONNECTIVITY_LIMITED: The host is connected to a network, but
+ * does not appear to be able to reach the full Internet.
+ * @NM_CONNECTIVITY_FULL: The host is connected to a network, and
+ * appears to be able to reach the full Internet.
+ *
+ * (Corresponds to the NM_CONNECTIVITY type in nm-manager.xml.)
+ */
+typedef enum {
+ NM_CONNECTIVITY_UNKNOWN,
+ NM_CONNECTIVITY_NONE,
+ NM_CONNECTIVITY_PORTAL,
+ NM_CONNECTIVITY_LIMITED,
+ NM_CONNECTIVITY_FULL
+} NMConnectivityState;
+
+/**
+ * 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
+ * @NM_DEVICE_TYPE_UNUSED2: not used
+ * @NM_DEVICE_TYPE_BT: a Bluetooth device supporting PAN or DUN access protocols
+ * @NM_DEVICE_TYPE_OLPC_MESH: an OLPC XO mesh networking device
+ * @NM_DEVICE_TYPE_WIMAX: an 802.16e Mobile WiMAX broadband device
+ * @NM_DEVICE_TYPE_MODEM: a modem supporting analog telephone, CDMA/EVDO,
+ * GSM/UMTS, or LTE network access protocols
+ * @NM_DEVICE_TYPE_INFINIBAND: an IP-over-InfiniBand device
+ * @NM_DEVICE_TYPE_BOND: a bond master interface
+ * @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.
+ *
+ * (Corresponds to the NM_DEVICE_TYPE type in nm-device.xml.)
+ **/
+typedef enum {
+ 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, /* Bluetooth */
+ 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,
+} NMDeviceType;
+
+/**
+ * NMDeviceCapabilities:
+ * @NM_DEVICE_CAP_NONE: device has no special capabilities
+ * @NM_DEVICE_CAP_NM_SUPPORTED: NetworkManager supports this device
+ * @NM_DEVICE_CAP_CARRIER_DETECT: this device can indicate carrier status
+ * @NM_DEVICE_CAP_IS_SOFTWARE: this device is a software device
+ *
+ * General device capability flags.
+ *
+ * (Corresponds to the NM_DEVICE_CAP type in nm-device-wifi.xml.)
+ **/
+typedef enum { /*< flags >*/
+ NM_DEVICE_CAP_NONE = 0x00000000,
+ NM_DEVICE_CAP_NM_SUPPORTED = 0x00000001,
+ NM_DEVICE_CAP_CARRIER_DETECT = 0x00000002,
+ NM_DEVICE_CAP_IS_SOFTWARE = 0x00000004,
+} NMDeviceCapabilities;
+
+
+/**
+ * NMDeviceWifiCapabilities:
+ * @NM_WIFI_DEVICE_CAP_NONE: device has no encryption/authentication capabilities
+ * @NM_WIFI_DEVICE_CAP_CIPHER_WEP40: device supports 40/64-bit WEP encryption
+ * @NM_WIFI_DEVICE_CAP_CIPHER_WEP104: device supports 104/128-bit WEP encryption
+ * @NM_WIFI_DEVICE_CAP_CIPHER_TKIP: device supports TKIP encryption
+ * @NM_WIFI_DEVICE_CAP_CIPHER_CCMP: device supports AES/CCMP encryption
+ * @NM_WIFI_DEVICE_CAP_WPA: device supports WPA1 authentication
+ * @NM_WIFI_DEVICE_CAP_RSN: device supports WPA2/RSN authentication
+ * @NM_WIFI_DEVICE_CAP_AP: device supports Access Point mode
+ * @NM_WIFI_DEVICE_CAP_ADHOC: device supports Ad-Hoc mode
+ *
+ * 802.11 specific device encryption and authentication capabilities.
+ *
+ * (Corresponds to the NM_802_11_DEVICE_CAP type in nm-device-wifi.xml.)
+ **/
+typedef enum { /*< flags >*/
+ NM_WIFI_DEVICE_CAP_NONE = 0x00000000,
+ NM_WIFI_DEVICE_CAP_CIPHER_WEP40 = 0x00000001,
+ NM_WIFI_DEVICE_CAP_CIPHER_WEP104 = 0x00000002,
+ NM_WIFI_DEVICE_CAP_CIPHER_TKIP = 0x00000004,
+ NM_WIFI_DEVICE_CAP_CIPHER_CCMP = 0x00000008,
+ NM_WIFI_DEVICE_CAP_WPA = 0x00000010,
+ NM_WIFI_DEVICE_CAP_RSN = 0x00000020,
+ NM_WIFI_DEVICE_CAP_AP = 0x00000040,
+ NM_WIFI_DEVICE_CAP_ADHOC = 0x00000080
+} NMDeviceWifiCapabilities;
+
+
+/**
+ * NM80211ApFlags:
+ * @NM_802_11_AP_FLAGS_NONE: access point has no special capabilities
+ * @NM_802_11_AP_FLAGS_PRIVACY: access point requires authentication and
+ * encryption (usually means WEP)
+ *
+ * 802.11 access point flags.
+ *
+ * (Corresponds to the NM_802_11_AP_FLAGS type in nm-access-point.xml.)
+ **/
+typedef enum { /*< underscore_name=nm_802_11_ap_flags, flags >*/
+ NM_802_11_AP_FLAGS_NONE = 0x00000000,
+ NM_802_11_AP_FLAGS_PRIVACY = 0x00000001
+} NM80211ApFlags;
+
+/**
+ * NM80211ApSecurityFlags:
+ * @NM_802_11_AP_SEC_NONE: the access point has no special security requirements
+ * @NM_802_11_AP_SEC_PAIR_WEP40: 40/64-bit WEP is supported for
+ * pairwise/unicast encryption
+ * @NM_802_11_AP_SEC_PAIR_WEP104: 104/128-bit WEP is supported for
+ * pairwise/unicast encryption
+ * @NM_802_11_AP_SEC_PAIR_TKIP: TKIP is supported for pairwise/unicast encryption
+ * @NM_802_11_AP_SEC_PAIR_CCMP: AES/CCMP is supported for pairwise/unicast encryption
+ * @NM_802_11_AP_SEC_GROUP_WEP40: 40/64-bit WEP is supported for group/broadcast
+ * encryption
+ * @NM_802_11_AP_SEC_GROUP_WEP104: 104/128-bit WEP is supported for
+ * group/broadcast encryption
+ * @NM_802_11_AP_SEC_GROUP_TKIP: TKIP is supported for group/broadcast encryption
+ * @NM_802_11_AP_SEC_GROUP_CCMP: AES/CCMP is supported for group/broadcast
+ * encryption
+ * @NM_802_11_AP_SEC_KEY_MGMT_PSK: WPA/RSN Pre-Shared Key encryption is
+ * supported
+ * @NM_802_11_AP_SEC_KEY_MGMT_802_1X: 802.1x authentication and key management
+ * is supported
+ *
+ * 802.11 access point security and authentication flags. These flags describe
+ * the current security requirements of an access point as determined from the
+ * access point's beacon.
+ *
+ * (Corresponds to the NM_802_11_AP_SEC type in nm-access-point.xml.)
+ **/
+typedef enum { /*< underscore_name=nm_802_11_ap_security_flags, flags >*/
+ NM_802_11_AP_SEC_NONE = 0x00000000,
+ NM_802_11_AP_SEC_PAIR_WEP40 = 0x00000001,
+ NM_802_11_AP_SEC_PAIR_WEP104 = 0x00000002,
+ NM_802_11_AP_SEC_PAIR_TKIP = 0x00000004,
+ NM_802_11_AP_SEC_PAIR_CCMP = 0x00000008,
+ NM_802_11_AP_SEC_GROUP_WEP40 = 0x00000010,
+ NM_802_11_AP_SEC_GROUP_WEP104 = 0x00000020,
+ NM_802_11_AP_SEC_GROUP_TKIP = 0x00000040,
+ NM_802_11_AP_SEC_GROUP_CCMP = 0x00000080,
+ NM_802_11_AP_SEC_KEY_MGMT_PSK = 0x00000100,
+ NM_802_11_AP_SEC_KEY_MGMT_802_1X = 0x00000200
+} NM80211ApSecurityFlags;
+
+/**
+ * NM80211Mode:
+ * @NM_802_11_MODE_UNKNOWN: the device or access point mode is unknown
+ * @NM_802_11_MODE_ADHOC: for both devices and access point objects, indicates
+ * the object is part of an Ad-Hoc 802.11 network without a central
+ * coordinating access point.
+ * @NM_802_11_MODE_INFRA: the device or access point is in infrastructure mode.
+ * For devices, this indicates the device is an 802.11 client/station. For
+ * access point objects, this indicates the object is an access point that
+ * provides connectivity to clients.
+ * @NM_802_11_MODE_AP: the device is an access point/hotspot. Not valid for
+ * access point objects; used only for hotspot mode on the local machine.
+ *
+ * Indicates the 802.11 mode an access point or device is currently in.
+ *
+ * (Corresponds to the NM_802_11_MODE type in generic-types.xml.)
+ **/
+typedef enum { /*< underscore_name=nm_802_11_mode >*/
+ NM_802_11_MODE_UNKNOWN = 0,
+ NM_802_11_MODE_ADHOC,
+ NM_802_11_MODE_INFRA,
+ NM_802_11_MODE_AP
+} NM80211Mode;
+
+/**
+ * NMBluetoothCapabilities:
+ * @NM_BT_CAPABILITY_NONE: device has no usable capabilities
+ * @NM_BT_CAPABILITY_DUN: device provides Dial-Up Networking capability
+ * @NM_BT_CAPABILITY_NAP: device provides Network Access Point capability
+ *
+ * #NMBluetoothCapabilities values indicate the usable capabilities of a
+ * Bluetooth device.
+ *
+ * (Corresponds to the NM_BT_CAPABILITY type in nm-device-bt.xml.)
+ **/
+typedef enum { /*< flags >*/
+ NM_BT_CAPABILITY_NONE = 0x00000000,
+ NM_BT_CAPABILITY_DUN = 0x00000001,
+ NM_BT_CAPABILITY_NAP = 0x00000002,
+} NMBluetoothCapabilities;
+
+/**
+ * NMDeviceModemCapabilities:
+ * @NM_DEVICE_MODEM_CAPABILITY_NONE: modem has no usable capabilities
+ * @NM_DEVICE_MODEM_CAPABILITY_POTS: modem uses the analog wired telephone
+ * network and is not a wireless/cellular device
+ * @NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO: modem supports at least one of CDMA
+ * 1xRTT, EVDO revision 0, EVDO revision A, or EVDO revision B
+ * @NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS: modem supports at least one of GSM,
+ * GPRS, EDGE, UMTS, HSDPA, HSUPA, or HSPA+ packet switched data capability
+ * @NM_DEVICE_MODEM_CAPABILITY_LTE: modem has LTE data capability
+ *
+ * #NMDeviceModemCapabilities values indicate the generic radio access
+ * technology families a modem device supports. For more information on the
+ * specific access technologies the device supports use the ModemManager D-Bus
+ * API.
+ *
+ * (Corresponds to the NM_DEVICE_MODEM_CAPABILITY type in nm-device-modem.xml.)
+ **/
+typedef enum { /*< flags >*/
+ NM_DEVICE_MODEM_CAPABILITY_NONE = 0x00000000,
+ NM_DEVICE_MODEM_CAPABILITY_POTS = 0x00000001,
+ NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO = 0x00000002,
+ NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS = 0x00000004,
+ NM_DEVICE_MODEM_CAPABILITY_LTE = 0x00000008,
+} NMDeviceModemCapabilities;
+
+
+/**
+ * NMDeviceState:
+ * @NM_DEVICE_STATE_UNKNOWN: the device's state is unknown
+ * @NM_DEVICE_STATE_UNMANAGED: the device is recognized, but not managed by
+ * NetworkManager
+ * @NM_DEVICE_STATE_UNAVAILABLE: the device is managed by NetworkManager, but
+ * is not available for use. Reasons may include the wireless switched off,
+ * missing firmware, no ethernet carrier, missing supplicant or modem manager,
+ * etc.
+ * @NM_DEVICE_STATE_DISCONNECTED: the device can be activated, but is currently
+ * idle and not connected to a network.
+ * @NM_DEVICE_STATE_PREPARE: the device is preparing the connection to the
+ * network. This may include operations like changing the MAC address,
+ * setting physical link properties, and anything else required to connect
+ * to the requested network.
+ * @NM_DEVICE_STATE_CONFIG: the device is connecting to the requested network.
+ * This may include operations like associating with the WiFi AP, dialing
+ * the modem, connecting to the remote Bluetooth device, etc.
+ * @NM_DEVICE_STATE_NEED_AUTH: the device requires more information to continue
+ * connecting to the requested network. This includes secrets like WiFi
+ * passphrases, login passwords, PIN codes, etc.
+ * @NM_DEVICE_STATE_IP_CONFIG: the device is requesting IPv4 and/or IPv6
+ * addresses and routing information from the network.
+ * @NM_DEVICE_STATE_IP_CHECK: the device is checking whether further action is
+ * required for the requested network connection. This may include checking
+ * whether only local network access is available, whether a captive portal
+ * is blocking access to the Internet, etc.
+ * @NM_DEVICE_STATE_SECONDARIES: the device is waiting for a secondary
+ * connection (like a VPN) which must activated before the device can be
+ * activated
+ * @NM_DEVICE_STATE_ACTIVATED: the device has a network connection, either local
+ * or global.
+ * @NM_DEVICE_STATE_DEACTIVATING: a disconnection from the current network
+ * connection was requested, and the device is cleaning up resources used for
+ * that connection. The network connection may still be valid.
+ * @NM_DEVICE_STATE_FAILED: the device failed to connect to the requested
+ * network and is cleaning up the connection request
+ *
+ * (Corresponds to the NM_DEVICE_STATE type in nm-device.xml.)
+ **/
+typedef enum {
+ 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
+} NMDeviceState;
+
+
+/**
+ * NMDeviceStateReason:
+ * @NM_DEVICE_STATE_REASON_NONE: No reason given
+ * @NM_DEVICE_STATE_REASON_UNKNOWN: Unknown error
+ * @NM_DEVICE_STATE_REASON_NOW_MANAGED: Device is now managed
+ * @NM_DEVICE_STATE_REASON_NOW_UNMANAGED: Device is now unmanaged
+ * @NM_DEVICE_STATE_REASON_CONFIG_FAILED: The device could not be readied for configuration
+ * @NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE: IP configuration could not be reserved (no available address, timeout, etc)
+ * @NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED: The IP config is no longer valid
+ * @NM_DEVICE_STATE_REASON_NO_SECRETS: Secrets were required, but not provided
+ * @NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT: 802.1x supplicant disconnected
+ * @NM_DEVICE_STATE_REASON_SUPPLICANT_CONFIG_FAILED: 802.1x supplicant configuration failed
+ * @NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED: 802.1x supplicant failed
+ * @NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT: 802.1x supplicant took too long to authenticate
+ * @NM_DEVICE_STATE_REASON_PPP_START_FAILED: PPP service failed to start
+ * @NM_DEVICE_STATE_REASON_PPP_DISCONNECT: PPP service disconnected
+ * @NM_DEVICE_STATE_REASON_PPP_FAILED: PPP failed
+ * @NM_DEVICE_STATE_REASON_DHCP_START_FAILED: DHCP client failed to start
+ * @NM_DEVICE_STATE_REASON_DHCP_ERROR: DHCP client error
+ * @NM_DEVICE_STATE_REASON_DHCP_FAILED: DHCP client failed
+ * @NM_DEVICE_STATE_REASON_SHARED_START_FAILED: Shared connection service failed to start
+ * @NM_DEVICE_STATE_REASON_SHARED_FAILED: Shared connection service failed
+ * @NM_DEVICE_STATE_REASON_AUTOIP_START_FAILED: AutoIP service failed to start
+ * @NM_DEVICE_STATE_REASON_AUTOIP_ERROR: AutoIP service error
+ * @NM_DEVICE_STATE_REASON_AUTOIP_FAILED: AutoIP service failed
+ * @NM_DEVICE_STATE_REASON_MODEM_BUSY: The line is busy
+ * @NM_DEVICE_STATE_REASON_MODEM_NO_DIAL_TONE: No dial tone
+ * @NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER: No carrier could be established
+ * @NM_DEVICE_STATE_REASON_MODEM_DIAL_TIMEOUT: The dialing request timed out
+ * @NM_DEVICE_STATE_REASON_MODEM_DIAL_FAILED: The dialing attempt failed
+ * @NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED: Modem initialization failed
+ * @NM_DEVICE_STATE_REASON_GSM_APN_FAILED: Failed to select the specified APN
+ * @NM_DEVICE_STATE_REASON_GSM_REGISTRATION_NOT_SEARCHING: Not searching for networks
+ * @NM_DEVICE_STATE_REASON_GSM_REGISTRATION_DENIED: Network registration denied
+ * @NM_DEVICE_STATE_REASON_GSM_REGISTRATION_TIMEOUT: Network registration timed out
+ * @NM_DEVICE_STATE_REASON_GSM_REGISTRATION_FAILED: Failed to register with the requested network
+ * @NM_DEVICE_STATE_REASON_GSM_PIN_CHECK_FAILED: PIN check failed
+ * @NM_DEVICE_STATE_REASON_FIRMWARE_MISSING: Necessary firmware for the device may be missing
+ * @NM_DEVICE_STATE_REASON_REMOVED: The device was removed
+ * @NM_DEVICE_STATE_REASON_SLEEPING: NetworkManager went to sleep
+ * @NM_DEVICE_STATE_REASON_CONNECTION_REMOVED: The device's active connection disappeared
+ * @NM_DEVICE_STATE_REASON_USER_REQUESTED: Device disconnected by user or client
+ * @NM_DEVICE_STATE_REASON_CARRIER: Carrier/link changed
+ * @NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED: The device's existing connection was assumed
+ * @NM_DEVICE_STATE_REASON_SUPPLICANT_AVAILABLE: The supplicant is now available
+ * @NM_DEVICE_STATE_REASON_MODEM_NOT_FOUND: The modem could not be found
+ * @NM_DEVICE_STATE_REASON_BT_FAILED: The Bluetooth connection failed or timed out
+ * @NM_DEVICE_STATE_REASON_GSM_SIM_NOT_INSERTED: GSM Modem's SIM Card not inserted
+ * @NM_DEVICE_STATE_REASON_GSM_SIM_PIN_REQUIRED: GSM Modem's SIM Pin required
+ * @NM_DEVICE_STATE_REASON_GSM_SIM_PUK_REQUIRED: GSM Modem's SIM Puk required
+ * @NM_DEVICE_STATE_REASON_GSM_SIM_WRONG: GSM Modem's SIM wrong
+ * @NM_DEVICE_STATE_REASON_INFINIBAND_MODE: InfiniBand device does not support connected mode
+ * @NM_DEVICE_STATE_REASON_DEPENDENCY_FAILED: A dependency of the connection failed
+ * @NM_DEVICE_STATE_REASON_BR2684_FAILED: Problem with the RFC 2684 Ethernet over ADSL bridge
+ * @NM_DEVICE_STATE_REASON_MODEM_MANAGER_UNAVAILABLE: ModemManager not running
+ * @NM_DEVICE_STATE_REASON_SSID_NOT_FOUND: The WiFi network could not be found
+ * @NM_DEVICE_STATE_REASON_SECONDARY_CONNECTION_FAILED: A secondary connection of the base connection failed
+ * @NM_DEVICE_STATE_REASON_DCB_FCOE_FAILED: DCB or FCoE setup failed
+ * @NM_DEVICE_STATE_REASON_TEAMD_CONTROL_FAILED: teamd control failed
+ * @NM_DEVICE_STATE_REASON_MODEM_FAILED: Modem failed or no longer available
+ * @NM_DEVICE_STATE_REASON_MODEM_AVAILABLE: Modem now ready and available
+ * @NM_DEVICE_STATE_REASON_SIM_PIN_INCORRECT: SIM PIN was incorrect
+ *
+ * Device state change reason codes
+ *
+ * (Corresponds to the NM_DEVICE_STATE_REASON type in nm-device.xml.)
+ */
+typedef enum {
+ NM_DEVICE_STATE_REASON_NONE = 0,
+ NM_DEVICE_STATE_REASON_UNKNOWN = 1,
+ NM_DEVICE_STATE_REASON_NOW_MANAGED = 2,
+ NM_DEVICE_STATE_REASON_NOW_UNMANAGED = 3,
+ NM_DEVICE_STATE_REASON_CONFIG_FAILED = 4,
+ NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE = 5,
+ NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED = 6,
+ NM_DEVICE_STATE_REASON_NO_SECRETS = 7,
+ NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT = 8,
+ NM_DEVICE_STATE_REASON_SUPPLICANT_CONFIG_FAILED = 9,
+ NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED = 10,
+ NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT = 11,
+ NM_DEVICE_STATE_REASON_PPP_START_FAILED = 12,
+ NM_DEVICE_STATE_REASON_PPP_DISCONNECT = 13,
+ NM_DEVICE_STATE_REASON_PPP_FAILED = 14,
+ NM_DEVICE_STATE_REASON_DHCP_START_FAILED = 15,
+ NM_DEVICE_STATE_REASON_DHCP_ERROR = 16,
+ NM_DEVICE_STATE_REASON_DHCP_FAILED = 17,
+ NM_DEVICE_STATE_REASON_SHARED_START_FAILED = 18,
+ NM_DEVICE_STATE_REASON_SHARED_FAILED = 19,
+ NM_DEVICE_STATE_REASON_AUTOIP_START_FAILED = 20,
+ NM_DEVICE_STATE_REASON_AUTOIP_ERROR = 21,
+ NM_DEVICE_STATE_REASON_AUTOIP_FAILED = 22,
+ NM_DEVICE_STATE_REASON_MODEM_BUSY = 23,
+ NM_DEVICE_STATE_REASON_MODEM_NO_DIAL_TONE = 24,
+ NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER = 25,
+ NM_DEVICE_STATE_REASON_MODEM_DIAL_TIMEOUT = 26,
+ NM_DEVICE_STATE_REASON_MODEM_DIAL_FAILED = 27,
+ NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED = 28,
+ NM_DEVICE_STATE_REASON_GSM_APN_FAILED = 29,
+ NM_DEVICE_STATE_REASON_GSM_REGISTRATION_NOT_SEARCHING = 30,
+ NM_DEVICE_STATE_REASON_GSM_REGISTRATION_DENIED = 31,
+ NM_DEVICE_STATE_REASON_GSM_REGISTRATION_TIMEOUT = 32,
+ NM_DEVICE_STATE_REASON_GSM_REGISTRATION_FAILED = 33,
+ NM_DEVICE_STATE_REASON_GSM_PIN_CHECK_FAILED = 34,
+ NM_DEVICE_STATE_REASON_FIRMWARE_MISSING = 35,
+ NM_DEVICE_STATE_REASON_REMOVED = 36,
+ NM_DEVICE_STATE_REASON_SLEEPING = 37,
+ NM_DEVICE_STATE_REASON_CONNECTION_REMOVED = 38,
+ NM_DEVICE_STATE_REASON_USER_REQUESTED = 39,
+ NM_DEVICE_STATE_REASON_CARRIER = 40,
+ NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED = 41,
+ NM_DEVICE_STATE_REASON_SUPPLICANT_AVAILABLE = 42,
+ NM_DEVICE_STATE_REASON_MODEM_NOT_FOUND = 43,
+ NM_DEVICE_STATE_REASON_BT_FAILED = 44,
+ NM_DEVICE_STATE_REASON_GSM_SIM_NOT_INSERTED = 45,
+ NM_DEVICE_STATE_REASON_GSM_SIM_PIN_REQUIRED = 46,
+ NM_DEVICE_STATE_REASON_GSM_SIM_PUK_REQUIRED = 47,
+ NM_DEVICE_STATE_REASON_GSM_SIM_WRONG = 48,
+ NM_DEVICE_STATE_REASON_INFINIBAND_MODE = 49,
+ NM_DEVICE_STATE_REASON_DEPENDENCY_FAILED = 50,
+ NM_DEVICE_STATE_REASON_BR2684_FAILED = 51,
+ NM_DEVICE_STATE_REASON_MODEM_MANAGER_UNAVAILABLE = 52,
+ NM_DEVICE_STATE_REASON_SSID_NOT_FOUND = 53,
+ NM_DEVICE_STATE_REASON_SECONDARY_CONNECTION_FAILED = 54,
+ NM_DEVICE_STATE_REASON_DCB_FCOE_FAILED = 55,
+ NM_DEVICE_STATE_REASON_TEAMD_CONTROL_FAILED = 56,
+ NM_DEVICE_STATE_REASON_MODEM_FAILED = 57,
+ NM_DEVICE_STATE_REASON_MODEM_AVAILABLE = 58,
+ NM_DEVICE_STATE_REASON_SIM_PIN_INCORRECT = 59,
+} NMDeviceStateReason;
+
+
+/**
+ * NMActiveConnectionState:
+ * @NM_ACTIVE_CONNECTION_STATE_UNKNOWN: the state of the connection is unknown
+ * @NM_ACTIVE_CONNECTION_STATE_ACTIVATING: a network connection is being prepared
+ * @NM_ACTIVE_CONNECTION_STATE_ACTIVATED: there is a connection to the network
+ * @NM_ACTIVE_CONNECTION_STATE_DEACTIVATING: the network connection is being
+ * torn down and cleaned up
+ * @NM_ACTIVE_CONNECTION_STATE_DEACTIVATED: the network connection is disconnected
+ * and will be removed
+ *
+ * #NMActiveConnectionState values indicate the state of a connection to a
+ * specific network while it is starting, connected, or disconnecting from that
+ * network.
+ *
+ * (Corresponds to the NM_ACTIVE_CONNECTION_STATE type in nm-active-connection.xml.)
+ **/
+typedef enum {
+ NM_ACTIVE_CONNECTION_STATE_UNKNOWN = 0,
+ NM_ACTIVE_CONNECTION_STATE_ACTIVATING,
+ NM_ACTIVE_CONNECTION_STATE_ACTIVATED,
+ NM_ACTIVE_CONNECTION_STATE_DEACTIVATING,
+ NM_ACTIVE_CONNECTION_STATE_DEACTIVATED
+} NMActiveConnectionState;
+
+/**
+ * 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
+ * persistent storage, or if no secrets are available an error is returned.
+ * @NM_SECRET_AGENT_GET_SECRETS_FLAG_ALLOW_INTERACTION: 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.
+ * @NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW: 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.
+ * @NM_SECRET_AGENT_GET_SECRETS_FLAG_USER_REQUESTED: 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.
+ * @NM_SECRET_AGENT_GET_SECRETS_FLAG_ONLY_SYSTEM: Internal flag, not part of
+ * the D-Bus API.
+ * @NM_SECRET_AGENT_GET_SECRETS_FLAG_NO_ERRORS: Internal flag, not part of
+ * the D-Bus API.
+ *
+ * #NMSecretAgentGetSecretsFlags values modify the behavior of a GetSecrets request.
+ *
+ * (Corresponds to the NM_SECRET_AGENT_GET_SECRETS_FLAGS type in nm-secret-agent.xml.)
+ */
+typedef enum { /*< flags >*/
+ 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,
+
+ /* Internal to NM; not part of the D-Bus API */
+ NM_SECRET_AGENT_GET_SECRETS_FLAG_ONLY_SYSTEM = 0x80000000,
+ NM_SECRET_AGENT_GET_SECRETS_FLAG_NO_ERRORS = 0x40000000,
+} NMSecretAgentGetSecretsFlags;
+
+/**
+ * NMSecretAgentCapabilities:
+ * @NM_SECRET_AGENT_CAPABILITY_NONE: the agent supports no special capabilities
+ * @NM_SECRET_AGENT_CAPABILITY_VPN_HINTS: the agent supports passing hints to
+ * VPN plugin authentication dialogs.
+ * @NM_SECRET_AGENT_CAPABILITY_LAST: bounds checking value; should not be used.
+ *
+ * #NMSecretAgentCapabilities indicate various capabilities of the agent.
+ *
+ * (Corresponds to the NM_SECRET_AGENT_CAPABILITIES type in nm-secret-agent.xml.)
+ */
+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;
+
+#endif /* __NM_DBUS_INTERFACE_H__ */
diff --git a/libnm-core/nm-errors.c b/libnm-core/nm-errors.c
new file mode 100644
index 000000000..229f14a00
--- /dev/null
+++ b/libnm-core/nm-errors.c
@@ -0,0 +1,90 @@
+/* -*- 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 2004 - 2014 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <gio/gio.h>
+
+#include "nm-errors.h"
+#include "nm-glib-compat.h"
+#include "nm-dbus-interface.h"
+#include "nm-vpn-dbus-interface.h"
+#include "nm-core-internal.h"
+
+G_DEFINE_QUARK (nm-agent-manager-error-quark, nm_agent_manager_error)
+G_DEFINE_QUARK (nm-connection-error-quark, nm_connection_error)
+G_DEFINE_QUARK (nm-crypto-error-quark, nm_crypto_error)
+G_DEFINE_QUARK (nm-device-error-quark, nm_device_error)
+G_DEFINE_QUARK (nm-manager-error-quark, nm_manager_error)
+G_DEFINE_QUARK (nm-secret-agent-error-quark, nm_secret_agent_error)
+G_DEFINE_QUARK (nm-settings-error-quark, nm_settings_error)
+G_DEFINE_QUARK (nm-vpn-plugin-error-quark, nm_vpn_plugin_error)
+
+static void
+register_error_domain (GQuark domain,
+ const char *interface,
+ GType enum_type)
+{
+ GEnumClass *enum_class;
+ GEnumValue *e;
+ char *error_name;
+ int i;
+
+ enum_class = g_type_class_ref (enum_type);
+ for (i = 0; i < enum_class->n_values; i++) {
+ e = &enum_class->values[i];
+ g_assert (strchr (e->value_nick, '-') == NULL);
+ error_name = g_strdup_printf ("%s.%s", interface, e->value_nick);
+ g_dbus_error_register_error (domain, e->value, error_name);
+ g_free (error_name);
+ }
+
+ g_type_class_unref (enum_class);
+}
+
+void
+_nm_dbus_errors_init (void)
+{
+ register_error_domain (NM_AGENT_MANAGER_ERROR,
+ NM_DBUS_INTERFACE_AGENT_MANAGER,
+ NM_TYPE_AGENT_MANAGER_ERROR);
+ register_error_domain (NM_CONNECTION_ERROR,
+ NM_DBUS_INTERFACE_SETTINGS_CONNECTION,
+ NM_TYPE_CONNECTION_ERROR);
+ register_error_domain (NM_DEVICE_ERROR,
+ NM_DBUS_INTERFACE_DEVICE,
+ NM_TYPE_DEVICE_ERROR);
+ register_error_domain (NM_MANAGER_ERROR,
+ NM_DBUS_INTERFACE,
+ NM_TYPE_MANAGER_ERROR);
+ register_error_domain (NM_SECRET_AGENT_ERROR,
+ NM_DBUS_INTERFACE_SECRET_AGENT,
+ NM_TYPE_SECRET_AGENT_ERROR);
+ register_error_domain (NM_SETTINGS_ERROR,
+ NM_DBUS_INTERFACE_SETTINGS,
+ NM_TYPE_SETTINGS_ERROR);
+ register_error_domain (NM_SETTINGS_ERROR,
+ NM_DBUS_INTERFACE_SETTINGS,
+ NM_TYPE_SETTINGS_ERROR);
+ register_error_domain (NM_VPN_PLUGIN_ERROR,
+ NM_VPN_DBUS_PLUGIN_INTERFACE,
+ NM_TYPE_VPN_PLUGIN_ERROR);
+}
diff --git a/libnm-core/nm-errors.h b/libnm-core/nm-errors.h
new file mode 100644
index 000000000..a9857445b
--- /dev/null
+++ b/libnm-core/nm-errors.h
@@ -0,0 +1,319 @@
+/* -*- 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, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright 2004 - 2014 Red Hat, Inc.
+ */
+
+#ifndef __NM_ERRORS_H__
+#define __NM_ERRORS_H__
+
+/**
+ * NMAgentManagerError:
+ * @NM_AGENT_MANAGER_ERROR_FAILED: unknown or unspecified error
+ * @NM_AGENT_MANAGER_ERROR_PERMISSION_DENIED: The caller does not have permission
+ * to register a secret agent, or is trying to register the same secret agent
+ * twice.
+ * @NM_AGENT_MANAGER_ERROR_INVALID_IDENTIFIER: The identifier is not a valid
+ * secret agent identifier.
+ * @NM_AGENT_MANAGER_ERROR_NOT_REGISTERED: The caller tried to unregister an agent
+ * that was not registered.
+ * @NM_AGENT_MANAGER_ERROR_NO_SECRETS: No secret agent returned secrets for this
+ * request
+ * @NM_AGENT_MANAGER_ERROR_USER_CANCELED: The user canceled the secrets request.
+ *
+ * Errors returned from the secret-agent manager.
+ *
+ * These errors may be returned from operations that could cause secrets to be
+ * requested (such as nm_client_activate_connection()), and correspond to D-Bus
+ * errors in the "org.freedesktop.NetworkManager.AgentManager" namespace.
+ */
+typedef enum {
+ NM_AGENT_MANAGER_ERROR_FAILED = 0, /*< nick=Failed >*/
+ NM_AGENT_MANAGER_ERROR_PERMISSION_DENIED, /*< nick=PermissionDenied >*/
+ NM_AGENT_MANAGER_ERROR_INVALID_IDENTIFIER, /*< nick=InvalidIdentifier >*/
+ NM_AGENT_MANAGER_ERROR_NOT_REGISTERED, /*< nick=NotRegistered >*/
+ NM_AGENT_MANAGER_ERROR_NO_SECRETS, /*< nick=NoSecrets >*/
+ NM_AGENT_MANAGER_ERROR_USER_CANCELED, /*< nick=UserCanceled >*/
+} NMAgentManagerError;
+
+GQuark nm_agent_manager_error_quark (void);
+#define NM_AGENT_MANAGER_ERROR (nm_agent_manager_error_quark ())
+
+/**
+ * NMConnectionError:
+ * @NM_CONNECTION_ERROR_FAILED: unknown or unclassified error
+ * @NM_CONNECTION_ERROR_SETTING_NOT_FOUND: the #NMConnection object
+ * did not contain the specified #NMSetting object
+ * @NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND: the #NMConnection did not contain the
+ * requested #NMSetting property
+ * @NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET: an operation which requires a secret
+ * was attempted on a non-secret property
+ * @NM_CONNECTION_ERROR_MISSING_SETTING: the #NMConnection object is missing an
+ * #NMSetting which is required for its configuration. The error message will
+ * always be prefixed with "&lt;setting-name>: ", where "&lt;setting-name>" is the
+ * name of the setting that is missing.
+ * @NM_CONNECTION_ERROR_INVALID_SETTING: the #NMConnection object contains an
+ * invalid or inappropriate #NMSetting. The error message will always be
+ * prefixed with "&lt;setting-name>: ", where "&lt;setting-name>" is the name of the
+ * setting that is invalid.
+ * @NM_CONNECTION_ERROR_MISSING_PROPERTY: the #NMConnection object is invalid
+ * because it is missing a required property. The error message will always be
+ * prefixed with "&lt;setting-name>.&lt;property-name>: ", where "&lt;setting-name>" is
+ * the name of the setting with the missing property, and "&lt;property-name>" is
+ * the property that is missing.
+ * @NM_CONNECTION_ERROR_INVALID_PROPERTY: the #NMConnection object is invalid
+ * because a property has an invalid value. The error message will always be
+ * prefixed with "&lt;setting-name>.&lt;property-name>: ", where "&lt;setting-name>" is
+ * the name of the setting with the invalid property, and "&lt;property-name>" is
+ * the property that is invalid.
+ *
+ * Describes errors that may result from operations involving a #NMConnection
+ * or its #NMSettings.
+ *
+ * These errors may be returned directly from #NMConnection and #NMSetting
+ * methods, or may be returned from D-Bus operations (eg on #NMClient or
+ * #NMDevice), where they correspond to errors in the
+ * "org.freedesktop.NetworkManager.Settings.Connection" namespace.
+ */
+typedef enum {
+ NM_CONNECTION_ERROR_FAILED = 0, /*< nick=Failed >*/
+ NM_CONNECTION_ERROR_SETTING_NOT_FOUND, /*< nick=SettingNotFound >*/
+ NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND, /*< nick=PropertyNotFound >*/
+ NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET, /*< nick=PropertyNotSecret >*/
+ NM_CONNECTION_ERROR_MISSING_SETTING, /*< nick=MissingSetting >*/
+ NM_CONNECTION_ERROR_INVALID_SETTING, /*< nick=InvalidSetting >*/
+ NM_CONNECTION_ERROR_MISSING_PROPERTY, /*< nick=MissingProperty >*/
+ NM_CONNECTION_ERROR_INVALID_PROPERTY, /*< nick=InvalidProperty >*/
+} NMConnectionError;
+
+#define NM_CONNECTION_ERROR nm_connection_error_quark ()
+GQuark nm_connection_error_quark (void);
+
+/**
+ * NMCryptoError:
+ * @NM_CRYPTO_ERROR_FAILED: generic failure
+ * @NM_CRYPTO_ERROR_INVALID_DATA: the certificate or key data provided
+ * was invalid
+ * @NM_CRYPTO_ERROR_INVALID_PASSWORD: the password was invalid
+ * @NM_CRYPTO_ERROR_UNKNOWN_CIPHER: the data uses an unknown cipher
+ * @NM_CRYPTO_ERROR_DECRYPTION_FAILED: decryption failed
+ * @NM_CRYPTO_ERROR_ENCRYPTION_FAILED: encryption failed
+ *
+ * Cryptography-related errors that can be returned from some nm-utils methods,
+ * and some #NMSetting8021x operations.
+ */
+typedef enum {
+ NM_CRYPTO_ERROR_FAILED = 0,
+ NM_CRYPTO_ERROR_INVALID_DATA,
+ NM_CRYPTO_ERROR_INVALID_PASSWORD,
+ NM_CRYPTO_ERROR_UNKNOWN_CIPHER,
+ NM_CRYPTO_ERROR_DECRYPTION_FAILED,
+ NM_CRYPTO_ERROR_ENCRYPTION_FAILED,
+} NMCryptoError;
+
+#define NM_CRYPTO_ERROR nm_crypto_error_quark ()
+GQuark nm_crypto_error_quark (void);
+
+/**
+ * NMDeviceError:
+ * @NM_DEVICE_ERROR_FAILED: unknown or unclassified error
+ * @NM_DEVICE_ERROR_CREATION_FAILED: NetworkManager failed to create the device
+ * @NM_DEVICE_ERROR_INVALID_CONNECTION: the specified connection is not valid
+ * @NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION: the specified connection is not
+ * compatible with this device.
+ * @NM_DEVICE_ERROR_NOT_ACTIVE: the device does not have an active connection
+ * @NM_DEVICE_ERROR_NOT_SOFTWARE: the requested operation is only valid on
+ * software devices.
+ * @NM_DEVICE_ERROR_NOT_ALLOWED: the requested operation is not allowed at
+ * this time.
+ * @NM_DEVICE_ERROR_SPECIFIC_OBJECT_NOT_FOUND: the "specific object" in the
+ * activation request (eg, the #NMAccessPoint or #NMWimaxNsp) was not
+ * found.
+ *
+ * Device-related errors.
+ *
+ * These errors may be returned directly from #NMDevice methods, or may be
+ * returned from D-Bus operations (where they correspond to errors in the
+ * "org.freedesktop.NetworkManager.Device" namespace).
+ */
+typedef enum {
+ NM_DEVICE_ERROR_FAILED = 0, /*< nick=Failed >*/
+ NM_DEVICE_ERROR_CREATION_FAILED, /*< nick=CreationFailed >*/
+ NM_DEVICE_ERROR_INVALID_CONNECTION, /*< nick=InvalidConnection >*/
+ NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION, /*< nick=IncompatibleConnection >*/
+ NM_DEVICE_ERROR_NOT_ACTIVE, /*< nick=NotActive >*/
+ NM_DEVICE_ERROR_NOT_SOFTWARE, /*< nick=NotSoftware >*/
+ NM_DEVICE_ERROR_NOT_ALLOWED, /*< nick=NotAllowed >*/
+ NM_DEVICE_ERROR_SPECIFIC_OBJECT_NOT_FOUND, /*< nick=SpecificObjectNotFound >*/
+} NMDeviceError;
+
+#define NM_DEVICE_ERROR nm_device_error_quark ()
+GQuark nm_device_error_quark (void);
+
+/**
+ * NMManagerError:
+ * @NM_MANAGER_ERROR_FAILED: unknown or unclassified error
+ * @NM_MANAGER_ERROR_PERMISSION_DENIED: Permission denied.
+ * @NM_MANAGER_ERROR_UNKNOWN_CONNECTION: The requested connection is not known.
+ * @NM_MANAGER_ERROR_UNKNOWN_DEVICE: The requested device is not known.
+ * @NM_MANAGER_ERROR_CONNECTION_NOT_AVAILABLE: The requested connection cannot be
+ * activated at this time.
+ * @NM_MANAGER_ERROR_CONNECTION_NOT_ACTIVE: The request could not be completed
+ * because a required connection is not active.
+ * @NM_MANAGER_ERROR_CONNECTION_ALREADY_ACTIVE: The connection to be activated was
+ * already active on another device.
+ * @NM_MANAGER_ERROR_DEPENDENCY_FAILED: An activation request failed due to a
+ * dependency being unavailable.
+ * @NM_MANAGER_ERROR_ALREADY_ASLEEP_OR_AWAKE: The manager is already in the requested
+ * sleep/wake state.
+ * @NM_MANAGER_ERROR_ALREADY_ENABLED_OR_DISABLED: The network is already
+ * enabled/disabled.
+ * @NM_MANAGER_ERROR_UNKNOWN_LOG_LEVEL: Unknown log level in SetLogging
+ * @NM_MANAGER_ERROR_UNKNOWN_LOG_DOMAIN: Unknown log domain in SetLogging
+ *
+ * Errors related to the main "network management" interface of NetworkManager.
+ * These may be returned from #NMClient methods that invoke D-Bus operations on
+ * the "org.freedesktop.NetworkManager" interface, and correspond to D-Bus
+ * errors in that namespace.
+ */
+typedef enum {
+ NM_MANAGER_ERROR_FAILED = 0, /*< nick=Failed >*/
+ NM_MANAGER_ERROR_PERMISSION_DENIED, /*< nick=PermissionDenied >*/
+ NM_MANAGER_ERROR_UNKNOWN_CONNECTION, /*< nick=UnknownConnection >*/
+ NM_MANAGER_ERROR_UNKNOWN_DEVICE, /*< nick=UnknownDevice >*/
+ NM_MANAGER_ERROR_CONNECTION_NOT_AVAILABLE, /*< nick=ConnectionNotAvailable >*/
+ NM_MANAGER_ERROR_CONNECTION_NOT_ACTIVE, /*< nick=ConnectionNotActive >*/
+ NM_MANAGER_ERROR_CONNECTION_ALREADY_ACTIVE, /*< nick=ConnectionAlreadyActive >*/
+ NM_MANAGER_ERROR_DEPENDENCY_FAILED, /*< nick=DependencyFailed >*/
+ NM_MANAGER_ERROR_ALREADY_ASLEEP_OR_AWAKE, /*< nick=AlreadyAsleepOrAwake >*/
+ NM_MANAGER_ERROR_ALREADY_ENABLED_OR_DISABLED, /*< nick=AlreadyEnabledOrDisabled >*/
+ NM_MANAGER_ERROR_UNKNOWN_LOG_LEVEL, /*< nick=UnknownLogLevel >*/
+ NM_MANAGER_ERROR_UNKNOWN_LOG_DOMAIN, /*< nick=UnknownLogDomain >*/
+} NMManagerError;
+
+GQuark nm_manager_error_quark (void);
+#define NM_MANAGER_ERROR (nm_manager_error_quark ())
+
+/**
+ * NMSecretAgentError:
+ * @NM_SECRET_AGENT_ERROR_FAILED: unknown or unclassified error
+ * @NM_SECRET_AGENT_ERROR_PERMISSION_DENIED: the caller (ie, NetworkManager) is
+ * not authorized to make this request
+ * @NM_SECRET_AGENT_ERROR_INVALID_CONNECTION: the connection for which secrets
+ * were requested is invalid
+ * @NM_SECRET_AGENT_ERROR_USER_CANCELED: the request was canceled by the user
+ * @NM_SECRET_AGENT_ERROR_AGENT_CANCELED: the agent canceled the request
+ * because it was requested to do so by NetworkManager
+ * @NM_SECRET_AGENT_ERROR_NO_SECRETS: the agent cannot find any secrets for this
+ * connection
+ *
+ * #NMSecretAgentError values are passed by secret agents back to NetworkManager
+ * when they encounter problems retrieving secrets on behalf of NM. They
+ * correspond to errors in the "org.freedesktop.NetworkManager.SecretManager"
+ * namespace.
+ *
+ * Client APIs such as nm_client_activate_connection() will not see these error
+ * codes; instead, the secret agent manager will translate them to the
+ * corresponding #NMAgentManagerError codes.
+ */
+typedef enum {
+ NM_SECRET_AGENT_ERROR_FAILED = 0, /*< nick=Failed >*/
+ NM_SECRET_AGENT_ERROR_PERMISSION_DENIED, /*< nick=PermissionDenied >*/
+ NM_SECRET_AGENT_ERROR_INVALID_CONNECTION, /*< nick=InvalidConnection >*/
+ NM_SECRET_AGENT_ERROR_USER_CANCELED, /*< nick=UserCanceled >*/
+ NM_SECRET_AGENT_ERROR_AGENT_CANCELED, /*< nick=AgentCanceled >*/
+ NM_SECRET_AGENT_ERROR_NO_SECRETS, /*< nick=NoSecrets >*/
+} NMSecretAgentError;
+
+GQuark nm_secret_agent_error_quark (void);
+#define NM_SECRET_AGENT_ERROR (nm_secret_agent_error_quark ())
+
+/**
+ * NMSettingsError:
+ * @NM_SETTINGS_ERROR_FAILED: unknown or unclassified error
+ * @NM_SETTINGS_ERROR_PERMISSION_DENIED: permission denied
+ * @NM_SETTINGS_ERROR_NOT_SUPPORTED: the requested operation is not supported by any
+ * active settings backend
+ * @NM_SETTINGS_ERROR_INVALID_CONNECTION: the connection was invalid
+ * @NM_SETTINGS_ERROR_READ_ONLY_CONNECTION: attempted to modify a read-only connection
+ * @NM_SETTINGS_ERROR_UUID_EXISTS: a connection with that UUID already exists
+ * @NM_SETTINGS_ERROR_INVALID_HOSTNAME: attempted to set an invalid hostname
+ *
+ * Errors related to the settings/persistent configuration interface of
+ * NetworkManager.
+ *
+ * These may be returned from #NMClient methods that invoke D-Bus operations on
+ * the "org.freedesktop.NetworkManager.Settings" interface, and correspond to
+ * D-Bus errors in that namespace.
+ */
+typedef enum {
+ NM_SETTINGS_ERROR_FAILED = 0, /*< nick=Failed >*/
+ NM_SETTINGS_ERROR_PERMISSION_DENIED, /*< nick=PermissionDenied >*/
+ NM_SETTINGS_ERROR_NOT_SUPPORTED, /*< nick=NotSupported >*/
+ NM_SETTINGS_ERROR_INVALID_CONNECTION, /*< nick=InvalidConnection >*/
+ NM_SETTINGS_ERROR_READ_ONLY_CONNECTION, /*< nick=ReadOnlyConnection >*/
+ NM_SETTINGS_ERROR_UUID_EXISTS, /*< nick=UuidExists >*/
+ NM_SETTINGS_ERROR_INVALID_HOSTNAME, /*< nick=InvalidHostname >*/
+} NMSettingsError;
+
+GQuark nm_settings_error_quark (void);
+#define NM_SETTINGS_ERROR (nm_settings_error_quark ())
+
+/**
+ * NMVpnPluginError:
+ * @NM_VPN_PLUGIN_ERROR_FAILED: unknown or unclassified error
+ * @NM_VPN_PLUGIN_ERROR_STARTING_IN_PROGRESS: the plugin is already starting,
+ * and another connect request was received
+ * @NM_VPN_PLUGIN_ERROR_ALREADY_STARTED: the plugin is already connected, and
+ * another connect request was received
+ * @NM_VPN_PLUGIN_ERROR_STOPPING_IN_PROGRESS: the plugin is already stopping,
+ * and another stop request was received
+ * @NM_VPN_PLUGIN_ERROR_ALREADY_STOPPED: the plugin is already stopped, and
+ * another disconnect request was received
+ * @NM_VPN_PLUGIN_ERROR_WRONG_STATE: the operation could not be performed in
+ * this state
+ * @NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS: 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).
+ * @NM_VPN_PLUGIN_ERROR_LAUNCH_FAILED: a child process failed to launch
+ * @NM_VPN_PLUGIN_ERROR_INVALID_CONNECTION: 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. These codes correspond
+ * to errors in the "org.freedesktop.NetworkManager.VPN.Error" namespace.
+ **/
+typedef enum {
+ NM_VPN_PLUGIN_ERROR_FAILED, /*< nick=Failed >*/
+ 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_INVALID_CONNECTION, /*< nick=InvalidConnection >*/
+ NM_VPN_PLUGIN_ERROR_INTERACTIVE_NOT_SUPPORTED, /*< nick=InteractiveNotSupported >*/
+} NMVpnPluginError;
+
+#define NM_VPN_PLUGIN_ERROR (nm_vpn_plugin_error_quark ())
+GQuark nm_vpn_plugin_error_quark (void);
+
+#endif /* __NM_ERRORS_H__ */
diff --git a/libnm-core/nm-property-compare.c b/libnm-core/nm-property-compare.c
new file mode 100644
index 000000000..5d270706e
--- /dev/null
+++ b/libnm-core/nm-property-compare.c
@@ -0,0 +1,122 @@
+/* -*- 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 2007 - 2014 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ */
+
+#include "config.h"
+
+#include "nm-property-compare.h"
+#include "nm-glib-compat.h"
+
+#include <string.h>
+#include <math.h>
+#include <netinet/in.h>
+#include <gio/gio.h>
+
+static gint
+_nm_property_compare_collection (GVariant *value1, GVariant *value2)
+{
+ GVariant *child1, *child2;
+ int i, len1, len2;
+ int ret;
+
+ len1 = g_variant_n_children (value1);
+ len2 = g_variant_n_children (value2);
+
+ if (len1 != len2)
+ return len1 < len2 ? -1 : len1 > len2;
+
+ for (i = 0; i < len1; i++) {
+ child1 = g_variant_get_child_value (value1, i);
+ child2 = g_variant_get_child_value (value2, i);
+
+ ret = nm_property_compare (child1, child2);
+ g_variant_unref (child1);
+ g_variant_unref (child2);
+
+ if (ret)
+ return ret;
+ }
+
+ return 0;
+}
+
+static gint
+_nm_property_compare_strdict (GVariant *value1, GVariant *value2)
+{
+ GVariantIter iter;
+ int len1, len2;
+ const char *key, *val1, *val2;
+ int ret;
+
+ len1 = g_variant_n_children (value1);
+ len2 = g_variant_n_children (value2);
+
+ if (len1 != len2)
+ return len1 < len2 ? -1 : len1 > len2;
+
+ g_variant_iter_init (&iter, value1);
+ while (g_variant_iter_next (&iter, "{&s&s}", &key, &val1)) {
+ if (!g_variant_lookup (value2, key, "&s", &val2))
+ return -1;
+
+ ret = strcmp (val1, val2);
+ if (ret)
+ return ret;
+ }
+
+ return 0;
+}
+
+int
+nm_property_compare (GVariant *value1, GVariant *value2)
+{
+ const GVariantType *type1;
+ const GVariantType *type2;
+ gint ret;
+
+ if (value1 == value2)
+ return 0;
+ if (!value1)
+ return 1;
+ if (!value2)
+ return -1;
+
+ type1 = g_variant_get_type (value1);
+ type2 = g_variant_get_type (value2);
+
+ if (!g_variant_type_equal (type1, type2))
+ return type1 < type2 ? -1 : type1 > type2;
+
+ if (g_variant_type_is_basic (type1))
+ ret = g_variant_compare (value1, value2);
+ else if (g_variant_is_of_type (value1, G_VARIANT_TYPE ("a{ss}")))
+ ret = _nm_property_compare_strdict (value1, value2);
+ else if (g_variant_type_is_array (type1))
+ ret = _nm_property_compare_collection (value1, value2);
+ else if (g_variant_type_is_tuple (type1))
+ ret = _nm_property_compare_collection (value1, value2);
+ else {
+ g_warning ("Don't know how to compare variant type '%s'", (const char *) type1);
+ ret = value1 == value2;
+ }
+
+ return ret;
+}
diff --git a/libnm-core/nm-property-compare.h b/libnm-core/nm-property-compare.h
new file mode 100644
index 000000000..33016787f
--- /dev/null
+++ b/libnm-core/nm-property-compare.h
@@ -0,0 +1,30 @@
+/* -*- 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 2007 - 2014 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ */
+
+#ifndef __NM_PROPERTY_COMPARE_H__
+#define __NM_PROPERTY_COMPARE_H__
+
+#include <glib.h>
+
+int nm_property_compare (GVariant *value1, GVariant *value2);
+
+#endif /* __NM_PROPERTY_COMPARE_H__ */
diff --git a/libnm-core/nm-setting-8021x.c b/libnm-core/nm-setting-8021x.c
new file mode 100644
index 000000000..f739f2c72
--- /dev/null
+++ b/libnm-core/nm-setting-8021x.c
@@ -0,0 +1,3864 @@
+/* -*- 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 2007 - 2013 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <glib/gi18n-lib.h>
+
+#include "nm-setting-8021x.h"
+#include "nm-utils.h"
+#include "crypto.h"
+#include "nm-utils-private.h"
+#include "nm-setting-private.h"
+#include "nm-core-enum-types.h"
+
+/**
+ * SECTION:nm-setting-8021x
+ * @short_description: Describes 802.1x-authenticated connection properties
+ *
+ * The #NMSetting8021x object is a #NMSetting 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.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 802.11 Wireless Networks: The Definitive Guide, Second Edition
+ * Author: Matthew Gast
+ * ISBN: 978-0596100520
+ *
+ * Cisco Wireless LAN Security
+ * Authors: Krishna Sankar, Sri Sundaralingam, Darrin Miller, and Andrew Balinsky
+ * ISBN: 978-1587051548
+ **/
+
+#define SCHEME_PATH "file://"
+
+G_DEFINE_TYPE_WITH_CODE (NMSetting8021x, nm_setting_802_1x, NM_TYPE_SETTING,
+ _nm_register_setting (802_1X, 2))
+NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_802_1X)
+
+#define NM_SETTING_802_1X_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_802_1X, NMSetting8021xPrivate))
+
+G_STATIC_ASSERT ( (NM_SETTING_802_1X_CK_FORMAT_UNKNOWN == (NMSetting8021xCKFormat) NM_CRYPTO_FILE_FORMAT_UNKNOWN) );
+G_STATIC_ASSERT ( (NM_SETTING_802_1X_CK_FORMAT_X509 == (NMSetting8021xCKFormat) NM_CRYPTO_FILE_FORMAT_X509) );
+G_STATIC_ASSERT ( (NM_SETTING_802_1X_CK_FORMAT_RAW_KEY == (NMSetting8021xCKFormat) NM_CRYPTO_FILE_FORMAT_RAW_KEY) );
+G_STATIC_ASSERT ( (NM_SETTING_802_1X_CK_FORMAT_PKCS12 == (NMSetting8021xCKFormat) NM_CRYPTO_FILE_FORMAT_PKCS12) );
+
+typedef struct {
+ GSList *eap; /* GSList of strings */
+ char *identity;
+ char *anonymous_identity;
+ char *pac_file;
+ GBytes *ca_cert;
+ char *ca_path;
+ char *subject_match;
+ GSList *altsubject_matches;
+ GBytes *client_cert;
+ char *phase1_peapver;
+ char *phase1_peaplabel;
+ char *phase1_fast_provisioning;
+ char *phase2_auth;
+ char *phase2_autheap;
+ GBytes *phase2_ca_cert;
+ char *phase2_ca_path;
+ char *phase2_subject_match;
+ GSList *phase2_altsubject_matches;
+ GBytes *phase2_client_cert;
+ char *password;
+ NMSettingSecretFlags password_flags;
+ GBytes *password_raw;
+ NMSettingSecretFlags password_raw_flags;
+ char *pin;
+ NMSettingSecretFlags pin_flags;
+ GBytes *private_key;
+ char *private_key_password;
+ NMSettingSecretFlags private_key_password_flags;
+ GBytes *phase2_private_key;
+ char *phase2_private_key_password;
+ NMSettingSecretFlags phase2_private_key_password_flags;
+ gboolean system_ca_certs;
+} NMSetting8021xPrivate;
+
+enum {
+ PROP_0,
+ PROP_EAP,
+ PROP_IDENTITY,
+ PROP_ANONYMOUS_IDENTITY,
+ PROP_PAC_FILE,
+ PROP_CA_CERT,
+ PROP_CA_PATH,
+ PROP_SUBJECT_MATCH,
+ PROP_ALTSUBJECT_MATCHES,
+ PROP_CLIENT_CERT,
+ PROP_PHASE1_PEAPVER,
+ PROP_PHASE1_PEAPLABEL,
+ PROP_PHASE1_FAST_PROVISIONING,
+ PROP_PHASE2_AUTH,
+ PROP_PHASE2_AUTHEAP,
+ PROP_PHASE2_CA_CERT,
+ PROP_PHASE2_CA_PATH,
+ PROP_PHASE2_SUBJECT_MATCH,
+ PROP_PHASE2_ALTSUBJECT_MATCHES,
+ PROP_PHASE2_CLIENT_CERT,
+ PROP_PASSWORD,
+ PROP_PASSWORD_FLAGS,
+ PROP_PASSWORD_RAW,
+ PROP_PASSWORD_RAW_FLAGS,
+ PROP_PRIVATE_KEY,
+ PROP_PRIVATE_KEY_PASSWORD,
+ PROP_PRIVATE_KEY_PASSWORD_FLAGS,
+ PROP_PHASE2_PRIVATE_KEY,
+ PROP_PHASE2_PRIVATE_KEY_PASSWORD,
+ PROP_PHASE2_PRIVATE_KEY_PASSWORD_FLAGS,
+ PROP_PIN,
+ PROP_PIN_FLAGS,
+ PROP_SYSTEM_CA_CERTS,
+
+ LAST_PROP
+};
+
+/**
+ * nm_setting_802_1x_new:
+ *
+ * Creates a new #NMSetting8021x object with default values.
+ *
+ * Returns: the new empty #NMSetting8021x object
+ **/
+NMSetting *
+nm_setting_802_1x_new (void)
+{
+ return (NMSetting *) g_object_new (NM_TYPE_SETTING_802_1X, NULL);
+}
+
+/**
+ * nm_setting_802_1x_get_num_eap_methods:
+ * @setting: the #NMSetting8021x
+ *
+ * Returns the number of eap methods allowed for use when connecting to the
+ * network. Generally only one EAP method is used. Use the functions
+ * nm_setting_802_1x_get_eap_method(), nm_setting_802_1x_add_eap_method(),
+ * and nm_setting_802_1x_remove_eap_method() for adding, removing, and retrieving
+ * allowed EAP methods.
+ *
+ * Returns: the number of allowed EAP methods
+ **/
+guint32
+nm_setting_802_1x_get_num_eap_methods (NMSetting8021x *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), 0);
+
+ return g_slist_length (NM_SETTING_802_1X_GET_PRIVATE (setting)->eap);
+}
+
+/**
+ * nm_setting_802_1x_get_eap_method:
+ * @setting: the #NMSetting8021x
+ * @i: the index of the EAP method name to return
+ *
+ * Returns the name of the allowed EAP method at index @i.
+ *
+ * Returns: the name of the allowed EAP method at index @i
+ **/
+const char *
+nm_setting_802_1x_get_eap_method (NMSetting8021x *setting, guint32 i)
+{
+ NMSetting8021xPrivate *priv;
+
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
+
+ priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
+ g_return_val_if_fail (i <= g_slist_length (priv->eap), NULL);
+
+ return (const char *) g_slist_nth_data (priv->eap, i);
+}
+
+/**
+ * nm_setting_802_1x_add_eap_method:
+ * @setting: the #NMSetting8021x
+ * @eap: the name of the EAP method to allow for this connection
+ *
+ * Adds an allowed EAP method. The setting is not valid until at least one
+ * EAP method has been added. See #NMSetting8021x:eap property for a list of
+ * allowed EAP methods.
+ *
+ * Returns: %TRUE if the EAP method was successfully added, %FALSE if it was
+ * not a valid method or if it was already allowed.
+ **/
+gboolean
+nm_setting_802_1x_add_eap_method (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))
+ return FALSE;
+ }
+
+ 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;
+}
+
+/**
+ * nm_setting_802_1x_remove_eap_method:
+ * @setting: the #NMSetting8021x
+ * @i: the index of the EAP method to remove
+ *
+ * Removes the allowed EAP method at the specified index.
+ **/
+void
+nm_setting_802_1x_remove_eap_method (NMSetting8021x *setting, guint32 i)
+{
+ NMSetting8021xPrivate *priv;
+ GSList *elt;
+
+ g_return_if_fail (NM_IS_SETTING_802_1X (setting));
+
+ priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
+ elt = g_slist_nth (priv->eap, i);
+ g_return_if_fail (elt != NULL);
+
+ 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.
+ **/
+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;
+}
+
+/**
+ * nm_setting_802_1x_clear_eap_methods:
+ * @setting: the #NMSetting8021x
+ *
+ * Clears all allowed EAP methods.
+ **/
+void
+nm_setting_802_1x_clear_eap_methods (NMSetting8021x *setting)
+{
+ NMSetting8021xPrivate *priv;
+
+ g_return_if_fail (NM_IS_SETTING_802_1X (setting));
+
+ priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
+ g_slist_free_full (priv->eap, g_free);
+ priv->eap = NULL;
+ g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_EAP);
+}
+
+/**
+ * nm_setting_802_1x_get_identity:
+ * @setting: the #NMSetting8021x
+ *
+ * Returns the identifier used by some EAP methods (like TLS) to
+ * authenticate the user. Often this is a username or login name.
+ *
+ * Returns: the user identifier
+ **/
+const char *
+nm_setting_802_1x_get_identity (NMSetting8021x *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
+
+ return NM_SETTING_802_1X_GET_PRIVATE (setting)->identity;
+}
+
+/**
+ * nm_setting_802_1x_get_anonymous_identity:
+ * @setting: the #NMSetting8021x
+ *
+ * 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 #NMSetting8021x:identity in
+ * a secure form, if applicable for that EAP method.
+ *
+ * Returns: the anonymous identifier
+ **/
+const char *
+nm_setting_802_1x_get_anonymous_identity (NMSetting8021x *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
+
+ return NM_SETTING_802_1X_GET_PRIVATE (setting)->anonymous_identity;
+}
+
+/**
+ * nm_setting_802_1x_get_pac_file:
+ * @setting: the #NMSetting8021x
+ *
+ * Returns the file containing PAC credentials used by EAP-FAST method.
+ *
+ * Returns: the PAC file
+ **/
+const char *
+nm_setting_802_1x_get_pac_file (NMSetting8021x *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
+
+ return NM_SETTING_802_1X_GET_PRIVATE (setting)->pac_file;
+}
+
+/**
+ * nm_setting_802_1x_get_ca_path:
+ * @setting: the #NMSetting8021x
+ *
+ * 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 #NMSetting8021x:ca-cert property to add more CA
+ * certificates for verifying the network to client.
+ *
+ * Returns: the CA certificate directory path
+ **/
+const char *
+nm_setting_802_1x_get_ca_path (NMSetting8021x *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
+
+ return NM_SETTING_802_1X_GET_PRIVATE (setting)->ca_path;
+}
+
+/**
+ * nm_setting_802_1x_get_system_ca_certs:
+ * @setting: the #NMSetting8021x
+ *
+ * Sets the #NMSetting8021x:system-ca-certs property. The
+ * #NMSetting8021x:ca-path and #NMSetting8021x:phase2-ca-path
+ * properties are ignored if the #NMSetting8021x:system-ca-certs property is
+ * %TRUE, 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.
+ *
+ * Returns: %TRUE if a system CA certificate path should be used, %FALSE if not
+ **/
+gboolean
+nm_setting_802_1x_get_system_ca_certs (NMSetting8021x *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), FALSE);
+
+ return NM_SETTING_802_1X_GET_PRIVATE (setting)->system_ca_certs;
+}
+
+static NMSetting8021xCKScheme
+get_cert_scheme (GBytes *bytes)
+{
+ gconstpointer data;
+ gsize length;
+
+ if (!bytes)
+ return NM_SETTING_802_1X_CK_SCHEME_UNKNOWN;
+
+ data = g_bytes_get_data (bytes, &length);
+ if (!length)
+ return NM_SETTING_802_1X_CK_SCHEME_UNKNOWN;
+
+ if ( (length > strlen (SCHEME_PATH))
+ && !memcmp (data, SCHEME_PATH, strlen (SCHEME_PATH)))
+ return NM_SETTING_802_1X_CK_SCHEME_PATH;
+
+ return NM_SETTING_802_1X_CK_SCHEME_BLOB;
+}
+
+/**
+ * nm_setting_802_1x_get_ca_cert_scheme:
+ * @setting: the #NMSetting8021x
+ *
+ * Returns the scheme used to store the CA certificate. If the returned scheme
+ * is %NM_SETTING_802_1X_CK_SCHEME_BLOB, use nm_setting_802_1x_get_ca_cert_blob();
+ * if %NM_SETTING_802_1X_CK_SCHEME_PATH, use nm_setting_802_1x_get_ca_cert_path().
+ *
+ * Returns: scheme used to store the CA certificate (blob or path)
+ **/
+NMSetting8021xCKScheme
+nm_setting_802_1x_get_ca_cert_scheme (NMSetting8021x *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NM_SETTING_802_1X_CK_SCHEME_UNKNOWN);
+
+ return get_cert_scheme (NM_SETTING_802_1X_GET_PRIVATE (setting)->ca_cert);
+}
+
+/**
+ * nm_setting_802_1x_get_ca_cert_blob:
+ * @setting: the #NMSetting8021x
+ *
+ * Returns the CA certificate blob if the CA certificate is stored using the
+ * %NM_SETTING_802_1X_CK_SCHEME_BLOB 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.
+ *
+ * Returns: (transfer none): the CA certificate data
+ **/
+GBytes *
+nm_setting_802_1x_get_ca_cert_blob (NMSetting8021x *setting)
+{
+ NMSetting8021xCKScheme scheme;
+
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
+
+ scheme = nm_setting_802_1x_get_ca_cert_scheme (setting);
+ g_return_val_if_fail (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB, NULL);
+
+ return NM_SETTING_802_1X_GET_PRIVATE (setting)->ca_cert;
+}
+
+/**
+ * nm_setting_802_1x_get_ca_cert_path:
+ * @setting: the #NMSetting8021x
+ *
+ * Returns the CA certificate path if the CA certificate is stored using the
+ * %NM_SETTING_802_1X_CK_SCHEME_PATH 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.
+ *
+ * Returns: path to the CA certificate file
+ **/
+const char *
+nm_setting_802_1x_get_ca_cert_path (NMSetting8021x *setting)
+{
+ NMSetting8021xCKScheme scheme;
+ gconstpointer data;
+
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
+
+ scheme = nm_setting_802_1x_get_ca_cert_scheme (setting);
+ g_return_val_if_fail (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH, NULL);
+
+ data = g_bytes_get_data (NM_SETTING_802_1X_GET_PRIVATE (setting)->ca_cert, NULL);
+ return (const char *)data + strlen (SCHEME_PATH);
+}
+
+static GBytes *
+path_to_scheme_value (const char *path)
+{
+ GByteArray *array;
+
+ g_return_val_if_fail (path != NULL, NULL);
+
+ /* Add the path scheme tag to the front, then the fielname */
+ array = g_byte_array_sized_new (strlen (path) + strlen (SCHEME_PATH) + 1);
+ g_byte_array_append (array, (const guint8 *) SCHEME_PATH, strlen (SCHEME_PATH));
+ g_byte_array_append (array, (const guint8 *) path, strlen (path));
+ g_byte_array_append (array, (const guint8 *) "\0", 1);
+
+ return g_byte_array_free_to_bytes (array);
+}
+
+/**
+ * nm_setting_802_1x_set_ca_cert:
+ * @setting: the #NMSetting8021x
+ * @cert_path: when @scheme is set to either %NM_SETTING_802_1X_CK_SCHEME_PATH
+ * or %NM_SETTING_802_1X_CK_SCHEME_BLOB, pass the path of the CA certificate
+ * file (PEM or DER format). The path must be UTF-8 encoded; use
+ * g_filename_to_utf8() to convert if needed. Passing %NULL with any @scheme
+ * clears the CA certificate.
+ * @scheme: desired storage scheme for the certificate
+ * @out_format: on successful return, the type of the certificate added
+ * @error: on unsuccessful return, an error
+ *
+ * Reads a certificate from disk and sets the #NMSetting8021x:ca-cert property
+ * with the raw certificate data if using the %NM_SETTING_802_1X_CK_SCHEME_BLOB
+ * scheme, or with the path to the certificate file if using the
+ * %NM_SETTING_802_1X_CK_SCHEME_PATH scheme.
+ *
+ * Returns: %TRUE if the operation succeeded, %FALSE if it was unsuccessful
+ **/
+gboolean
+nm_setting_802_1x_set_ca_cert (NMSetting8021x *setting,
+ const char *cert_path,
+ NMSetting8021xCKScheme scheme,
+ NMSetting8021xCKFormat *out_format,
+ GError **error)
+{
+ NMSetting8021xPrivate *priv;
+ NMCryptoFileFormat format = NM_CRYPTO_FILE_FORMAT_UNKNOWN;
+ GByteArray *data;
+
+ 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);
+ g_return_val_if_fail ( scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB
+ || scheme == NM_SETTING_802_1X_CK_SCHEME_PATH,
+ FALSE);
+ }
+
+ 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 (setting);
+
+ g_clear_pointer (&priv->ca_cert, g_bytes_unref);
+
+ 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) {
+ /* wpa_supplicant can only use raw x509 CA certs */
+ if (format == NM_CRYPTO_FILE_FORMAT_X509) {
+ if (out_format)
+ *out_format = NM_SETTING_802_1X_CK_FORMAT_X509;
+
+ if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) {
+ priv->ca_cert = g_byte_array_free_to_bytes (data);
+ data = NULL;
+ } else if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH)
+ priv->ca_cert = path_to_scheme_value (cert_path);
+ else
+ g_assert_not_reached ();
+ } else {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("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);
+ }
+ if (data)
+ g_byte_array_unref (data);
+ }
+
+ g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_CA_CERT);
+ return priv->ca_cert != NULL;
+}
+
+/**
+ * nm_setting_802_1x_get_subject_match:
+ * @setting: the #NMSetting8021x
+ *
+ * Returns: the #NMSetting8021x:subject-match property. This is the
+ * substring to be matched against the subject of the authentication
+ * server certificate, or %NULL no subject verification is to be
+ * performed.
+ **/
+const char *
+nm_setting_802_1x_get_subject_match (NMSetting8021x *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
+
+ return NM_SETTING_802_1X_GET_PRIVATE (setting)->subject_match;
+}
+
+/**
+ * nm_setting_802_1x_get_num_altsubject_matches:
+ * @setting: the #NMSetting8021x
+ *
+ * Returns the number of entries in the
+ * #NMSetting8021x:altsubject-matches property of this setting.
+ *
+ * Returns: the number of altsubject-matches entries.
+ **/
+guint32
+nm_setting_802_1x_get_num_altsubject_matches (NMSetting8021x *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), 0);
+
+ return g_slist_length (NM_SETTING_802_1X_GET_PRIVATE (setting)->altsubject_matches);
+}
+
+/**
+ * nm_setting_802_1x_get_altsubject_match:
+ * @setting: the #NMSettingConnection
+ * @i: the zero-based index of the array of altSubjectName matches
+ *
+ * Returns the altSubjectName match at index @i.
+ *
+ * Returns: the altSubjectName match at index @i
+ **/
+const char *
+nm_setting_802_1x_get_altsubject_match (NMSetting8021x *setting, guint32 i)
+{
+ NMSetting8021xPrivate *priv;
+
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
+
+ priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
+ g_return_val_if_fail (i <= g_slist_length (priv->altsubject_matches), NULL);
+
+ return (const char *) g_slist_nth_data (priv->altsubject_matches, i);
+}
+
+/**
+ * nm_setting_802_1x_add_altsubject_match:
+ * @setting: the #NMSetting8021x
+ * @altsubject_match: the altSubjectName to allow for this connection
+ *
+ * Adds an allowed alternate subject name match. Until at least one
+ * match is added, the altSubjectName of the remote authentication
+ * server is not verified.
+ *
+ * Returns: %TRUE if the alternative subject name match was
+ * successfully added, %FALSE if it was already allowed.
+ **/
+gboolean
+nm_setting_802_1x_add_altsubject_match (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))
+ return FALSE;
+ }
+
+ 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;
+}
+
+/**
+ * nm_setting_802_1x_remove_altsubject_match:
+ * @setting: the #NMSetting8021x
+ * @i: the index of the altSubjectName match to remove
+ *
+ * Removes the allowed altSubjectName at the specified index.
+ **/
+void
+nm_setting_802_1x_remove_altsubject_match (NMSetting8021x *setting, guint32 i)
+{
+ NMSetting8021xPrivate *priv;
+ GSList *elt;
+
+ g_return_if_fail (NM_IS_SETTING_802_1X (setting));
+
+ priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
+ elt = g_slist_nth (priv->altsubject_matches, i);
+ g_return_if_fail (elt != NULL);
+
+ 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.
+ **/
+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;
+}
+
+/**
+ * nm_setting_802_1x_clear_altsubject_matches:
+ * @setting: the #NMSetting8021x
+ *
+ * Clears all altSubjectName matches.
+ **/
+void
+nm_setting_802_1x_clear_altsubject_matches (NMSetting8021x *setting)
+{
+ NMSetting8021xPrivate *priv;
+
+ g_return_if_fail (NM_IS_SETTING_802_1X (setting));
+
+ priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
+ 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);
+}
+
+/**
+ * nm_setting_802_1x_get_client_cert_scheme:
+ * @setting: the #NMSetting8021x
+ *
+ * Returns the scheme used to store the client certificate. If the returned scheme
+ * is %NM_SETTING_802_1X_CK_SCHEME_BLOB, use nm_setting_802_1x_get_client_cert_blob();
+ * if %NM_SETTING_802_1X_CK_SCHEME_PATH, use nm_setting_802_1x_get_client_cert_path().
+ *
+ * Returns: scheme used to store the client certificate (blob or path)
+ **/
+NMSetting8021xCKScheme
+nm_setting_802_1x_get_client_cert_scheme (NMSetting8021x *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NM_SETTING_802_1X_CK_SCHEME_UNKNOWN);
+
+ return get_cert_scheme (NM_SETTING_802_1X_GET_PRIVATE (setting)->client_cert);
+}
+
+/**
+ * nm_setting_802_1x_get_client_cert_blob:
+ * @setting: the #NMSetting8021x
+ *
+ * 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.
+ *
+ * Returns: (transfer none): the client certificate data
+ **/
+GBytes *
+nm_setting_802_1x_get_client_cert_blob (NMSetting8021x *setting)
+{
+ NMSetting8021xCKScheme scheme;
+
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
+
+ scheme = nm_setting_802_1x_get_client_cert_scheme (setting);
+ g_return_val_if_fail (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB, NULL);
+
+ return NM_SETTING_802_1X_GET_PRIVATE (setting)->client_cert;
+}
+
+/**
+ * nm_setting_802_1x_get_client_cert_path:
+ * @setting: the #NMSetting8021x
+ *
+ * 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.
+ *
+ * Returns: path to the client certificate file
+ **/
+const char *
+nm_setting_802_1x_get_client_cert_path (NMSetting8021x *setting)
+{
+ NMSetting8021xCKScheme scheme;
+ gconstpointer data;
+
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
+
+ scheme = nm_setting_802_1x_get_client_cert_scheme (setting);
+ g_return_val_if_fail (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH, NULL);
+
+ data = g_bytes_get_data (NM_SETTING_802_1X_GET_PRIVATE (setting)->client_cert, NULL);
+ return (const char *)data + strlen (SCHEME_PATH);
+}
+
+/**
+ * nm_setting_802_1x_set_client_cert:
+ * @setting: the #NMSetting8021x
+ * @cert_path: when @scheme is set to either %NM_SETTING_802_1X_CK_SCHEME_PATH
+ * or %NM_SETTING_802_1X_CK_SCHEME_BLOB, pass the path of the client
+ * certificate file (PEM, DER, or PKCS#<!-- -->12 format). The path must be UTF-8
+ * encoded; use g_filename_to_utf8() to convert if needed. Passing %NULL with
+ * any @scheme clears the client certificate.
+ * @scheme: desired storage scheme for the certificate
+ * @out_format: on successful return, the type of the certificate added
+ * @error: on unsuccessful return, an error
+ *
+ * Reads a certificate from disk and sets the #NMSetting8021x:client-cert
+ * property with the raw certificate data if using the
+ * %NM_SETTING_802_1X_CK_SCHEME_BLOB scheme, or with the path to the certificate
+ * file if using the %NM_SETTING_802_1X_CK_SCHEME_PATH scheme.
+ *
+ * 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.
+ *
+ * Returns: %TRUE if the operation succeeded, %FALSE if it was unsuccessful
+ **/
+gboolean
+nm_setting_802_1x_set_client_cert (NMSetting8021x *setting,
+ const char *cert_path,
+ NMSetting8021xCKScheme scheme,
+ NMSetting8021xCKFormat *out_format,
+ GError **error)
+{
+ NMSetting8021xPrivate *priv;
+ NMCryptoFileFormat format = NM_CRYPTO_FILE_FORMAT_UNKNOWN;
+ GByteArray *data;
+
+ 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);
+ g_return_val_if_fail ( scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB
+ || scheme == NM_SETTING_802_1X_CK_SCHEME_PATH,
+ FALSE);
+ }
+
+ 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 (setting);
+
+ g_clear_pointer (&priv->client_cert, g_bytes_unref);
+
+ 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) {
+ gboolean valid = FALSE;
+
+ switch (format) {
+ case NM_CRYPTO_FILE_FORMAT_X509:
+ if (out_format)
+ *out_format = NM_SETTING_802_1X_CK_FORMAT_X509;
+ valid = TRUE;
+ break;
+ case NM_CRYPTO_FILE_FORMAT_PKCS12:
+ if (out_format)
+ *out_format = NM_SETTING_802_1X_CK_FORMAT_PKCS12;
+ valid = TRUE;
+ break;
+ default:
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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;
+ }
+
+ if (valid) {
+ if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) {
+ priv->client_cert = g_byte_array_free_to_bytes (data);
+ data = NULL;
+ } else if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH)
+ priv->client_cert = path_to_scheme_value (cert_path);
+ else
+ g_assert_not_reached ();
+ }
+ if (data)
+ g_byte_array_unref (data);
+ }
+
+ g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_CLIENT_CERT);
+ return priv->client_cert != NULL;
+}
+
+/**
+ * nm_setting_802_1x_get_phase1_peapver:
+ * @setting: the #NMSetting8021x
+ *
+ * Returns: the "phase 1" PEAP version to be used when authenticating with
+ * EAP-PEAP as contained in the #NMSetting8021x:phase1-peapver property. Valid
+ * values are %NULL (unset), "0" (PEAP version 0), and "1" (PEAP version 1).
+ **/
+const char *
+nm_setting_802_1x_get_phase1_peapver (NMSetting8021x *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
+
+ return NM_SETTING_802_1X_GET_PRIVATE (setting)->phase1_peapver;
+}
+
+/**
+ * nm_setting_802_1x_get_phase1_peaplabel:
+ * @setting: the #NMSetting8021x
+ *
+ * Returns: whether the "phase 1" PEAP label is new-style or old-style, to be
+ * used when authenticating with EAP-PEAP, as contained in the
+ * #NMSetting8021x:phase1-peaplabel property. Valid values are %NULL (unset),
+ * "0" (use old-style label), and "1" (use new-style label). See the
+ * wpa_supplicant documentation for more details.
+ **/
+const char *
+nm_setting_802_1x_get_phase1_peaplabel (NMSetting8021x *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
+
+ return NM_SETTING_802_1X_GET_PRIVATE (setting)->phase1_peaplabel;
+}
+
+/**
+ * nm_setting_802_1x_get_phase1_fast_provisioning:
+ * @setting: the #NMSetting8021x
+ *
+ * Returns: whether "phase 1" PEAP fast provisioning should be used, as specified
+ * by the #NMSetting8021x:phase1-fast-provisioning property. See the
+ * wpa_supplicant documentation for more details.
+ **/
+const char *
+nm_setting_802_1x_get_phase1_fast_provisioning (NMSetting8021x *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
+
+ return NM_SETTING_802_1X_GET_PRIVATE (setting)->phase1_fast_provisioning;
+}
+
+/**
+ * nm_setting_802_1x_get_phase2_auth:
+ * @setting: the #NMSetting8021x
+ *
+ * Returns: the "phase 2" non-EAP (ex MD5) allowed authentication method as
+ * specified by the #NMSetting8021x:phase2-auth property.
+ **/
+const char *
+nm_setting_802_1x_get_phase2_auth (NMSetting8021x *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
+
+ return NM_SETTING_802_1X_GET_PRIVATE (setting)->phase2_auth;
+}
+
+/**
+ * nm_setting_802_1x_get_phase2_autheap:
+ * @setting: the #NMSetting8021x
+ *
+ * Returns: the "phase 2" EAP-based (ex TLS) allowed authentication method as
+ * specified by the #NMSetting8021x:phase2-autheap property.
+ **/
+const char *
+nm_setting_802_1x_get_phase2_autheap (NMSetting8021x *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
+
+ return NM_SETTING_802_1X_GET_PRIVATE (setting)->phase2_autheap;
+}
+
+/**
+ * nm_setting_802_1x_get_phase2_ca_path:
+ * @setting: the #NMSetting8021x
+ *
+ * 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 #NMSetting8021x:phase2-ca-cert property
+ * to add more CA certificates for verifying the network to client.
+ *
+ * Returns: the "phase 2" CA certificate directory path
+ **/
+const char *
+nm_setting_802_1x_get_phase2_ca_path (NMSetting8021x *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
+
+ return NM_SETTING_802_1X_GET_PRIVATE (setting)->phase2_ca_path;
+}
+
+/**
+ * nm_setting_802_1x_get_phase2_ca_cert_scheme:
+ * @setting: the #NMSetting8021x
+ *
+ * Returns the scheme used to store the "phase 2" CA certificate. If the
+ * returned scheme is %NM_SETTING_802_1X_CK_SCHEME_BLOB, use
+ * nm_setting_802_1x_get_ca_cert_blob(); if %NM_SETTING_802_1X_CK_SCHEME_PATH,
+ * use nm_setting_802_1x_get_ca_cert_path().
+ *
+ * Returns: scheme used to store the "phase 2" CA certificate (blob or path)
+ **/
+NMSetting8021xCKScheme
+nm_setting_802_1x_get_phase2_ca_cert_scheme (NMSetting8021x *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NM_SETTING_802_1X_CK_SCHEME_UNKNOWN);
+
+ return get_cert_scheme (NM_SETTING_802_1X_GET_PRIVATE (setting)->phase2_ca_cert);
+}
+
+/**
+ * nm_setting_802_1x_get_phase2_ca_cert_blob:
+ * @setting: the #NMSetting8021x
+ *
+ * Returns the "phase 2" CA certificate blob if the CA certificate is stored
+ * using the %NM_SETTING_802_1X_CK_SCHEME_BLOB 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.
+ *
+ * Returns: (transfer none): the "phase 2" CA certificate data
+ **/
+GBytes *
+nm_setting_802_1x_get_phase2_ca_cert_blob (NMSetting8021x *setting)
+{
+ NMSetting8021xCKScheme scheme;
+
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
+
+ scheme = nm_setting_802_1x_get_phase2_ca_cert_scheme (setting);
+ g_return_val_if_fail (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB, NULL);
+
+ return NM_SETTING_802_1X_GET_PRIVATE (setting)->phase2_ca_cert;
+}
+
+/**
+ * nm_setting_802_1x_get_phase2_ca_cert_path:
+ * @setting: the #NMSetting8021x
+ *
+ * Returns the "phase 2" CA certificate path if the CA certificate is stored
+ * using the %NM_SETTING_802_1X_CK_SCHEME_PATH 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.
+ *
+ * Returns: path to the "phase 2" CA certificate file
+ **/
+const char *
+nm_setting_802_1x_get_phase2_ca_cert_path (NMSetting8021x *setting)
+{
+ NMSetting8021xCKScheme scheme;
+ gconstpointer data;
+
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
+
+ scheme = nm_setting_802_1x_get_phase2_ca_cert_scheme (setting);
+ g_return_val_if_fail (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH, NULL);
+
+ data = g_bytes_get_data (NM_SETTING_802_1X_GET_PRIVATE (setting)->phase2_ca_cert, NULL);
+ return (const char *)data + strlen (SCHEME_PATH);
+}
+
+/**
+ * nm_setting_802_1x_set_phase2_ca_cert:
+ * @setting: the #NMSetting8021x
+ * @cert_path: when @scheme is set to either %NM_SETTING_802_1X_CK_SCHEME_PATH
+ * or %NM_SETTING_802_1X_CK_SCHEME_BLOB, pass the path of the "phase2" CA
+ * certificate file (PEM or DER format). The path must be UTF-8 encoded; use
+ * g_filename_to_utf8() to convert if needed. Passing %NULL with any @scheme
+ * clears the "phase2" CA certificate.
+ * @scheme: desired storage scheme for the certificate
+ * @out_format: on successful return, the type of the certificate added
+ * @error: on unsuccessful return, an error
+ *
+ * Reads a certificate from disk and sets the #NMSetting8021x:phase2-ca-cert
+ * property with the raw certificate data if using the
+ * %NM_SETTING_802_1X_CK_SCHEME_BLOB scheme, or with the path to the certificate
+ * file if using the %NM_SETTING_802_1X_CK_SCHEME_PATH scheme.
+ *
+ * Returns: %TRUE if the operation succeeded, %FALSE if it was unsuccessful
+ **/
+gboolean
+nm_setting_802_1x_set_phase2_ca_cert (NMSetting8021x *setting,
+ const char *cert_path,
+ NMSetting8021xCKScheme scheme,
+ NMSetting8021xCKFormat *out_format,
+ GError **error)
+{
+ NMSetting8021xPrivate *priv;
+ NMCryptoFileFormat format = NM_CRYPTO_FILE_FORMAT_UNKNOWN;
+ GByteArray *data;
+
+ 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);
+ g_return_val_if_fail ( scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB
+ || scheme == NM_SETTING_802_1X_CK_SCHEME_PATH,
+ FALSE);
+ }
+
+ 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 (setting);
+
+ g_clear_pointer (&priv->phase2_ca_cert, g_bytes_unref);
+
+ 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) {
+ /* wpa_supplicant can only use raw x509 CA certs */
+ if (format == NM_CRYPTO_FILE_FORMAT_X509) {
+ if (out_format)
+ *out_format = NM_SETTING_802_1X_CK_FORMAT_X509;
+
+ if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) {
+ priv->phase2_ca_cert = g_byte_array_free_to_bytes (data);
+ data = NULL;
+ } else if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH)
+ priv->phase2_ca_cert = path_to_scheme_value (cert_path);
+ else
+ g_assert_not_reached ();
+ } else {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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);
+ }
+ if (data)
+ g_byte_array_unref (data);
+ }
+
+ g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_PHASE2_CA_CERT);
+ return priv->phase2_ca_cert != NULL;
+}
+
+/**
+ * nm_setting_802_1x_get_phase2_subject_match:
+ * @setting: the #NMSetting8021x
+ *
+ * Returns: the #NMSetting8021x:phase2-subject-match property. This is
+ * the substring to be matched against the subject of the "phase 2"
+ * authentication server certificate, or %NULL no subject verification
+ * is to be performed.
+ **/
+const char *
+nm_setting_802_1x_get_phase2_subject_match (NMSetting8021x *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
+
+ return NM_SETTING_802_1X_GET_PRIVATE (setting)->phase2_subject_match;
+}
+
+/**
+ * nm_setting_802_1x_get_num_phase2_altsubject_matches:
+ * @setting: the #NMSetting8021x
+ *
+ * Returns the number of entries in the
+ * #NMSetting8021x:phase2-altsubject-matches property of this setting.
+ *
+ * Returns: the number of phase2-altsubject-matches entries.
+ **/
+guint32
+nm_setting_802_1x_get_num_phase2_altsubject_matches (NMSetting8021x *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), 0);
+
+ return g_slist_length (NM_SETTING_802_1X_GET_PRIVATE (setting)->phase2_altsubject_matches);
+}
+
+/**
+ * nm_setting_802_1x_get_phase2_altsubject_match:
+ * @setting: the #NMSettingConnection
+ * @i: the zero-based index of the array of "phase 2" altSubjectName matches
+ *
+ * Returns the "phase 2" altSubjectName match at index @i.
+ *
+ * Returns: the "phase 2" altSubjectName match at index @i
+ **/
+const char *
+nm_setting_802_1x_get_phase2_altsubject_match (NMSetting8021x *setting, guint32 i)
+{
+ NMSetting8021xPrivate *priv;
+
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
+
+ priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
+ g_return_val_if_fail (i <= g_slist_length (priv->phase2_altsubject_matches), NULL);
+
+ return (const char *) g_slist_nth_data (priv->phase2_altsubject_matches, i);
+}
+
+/**
+ * nm_setting_802_1x_add_phase2_altsubject_match:
+ * @setting: the #NMSetting8021x
+ * @phase2_altsubject_match: the "phase 2" altSubjectName to allow for this
+ * connection
+ *
+ * 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.
+ *
+ * Returns: %TRUE if the "phase 2" alternative subject name match was
+ * successfully added, %FALSE if it was already allowed.
+ **/
+gboolean
+nm_setting_802_1x_add_phase2_altsubject_match (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))
+ return FALSE;
+ }
+
+ 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;
+}
+
+/**
+ * nm_setting_802_1x_remove_phase2_altsubject_match:
+ * @setting: the #NMSetting8021x
+ * @i: the index of the "phase 2" altSubjectName match to remove
+ *
+ * Removes the allowed "phase 2" altSubjectName at the specified index.
+ **/
+void
+nm_setting_802_1x_remove_phase2_altsubject_match (NMSetting8021x *setting, guint32 i)
+{
+ NMSetting8021xPrivate *priv;
+ GSList *elt;
+
+ g_return_if_fail (NM_IS_SETTING_802_1X (setting));
+
+ priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
+ elt = g_slist_nth (priv->phase2_altsubject_matches, i);
+ g_return_if_fail (elt != NULL);
+
+ 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.
+ **/
+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;
+}
+
+/**
+ * nm_setting_802_1x_clear_phase2_altsubject_matches:
+ * @setting: the #NMSetting8021x
+ *
+ * Clears all "phase 2" altSubjectName matches.
+ **/
+void
+nm_setting_802_1x_clear_phase2_altsubject_matches (NMSetting8021x *setting)
+{
+ NMSetting8021xPrivate *priv;
+
+ g_return_if_fail (NM_IS_SETTING_802_1X (setting));
+
+ priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
+ 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);
+}
+
+/**
+ * nm_setting_802_1x_get_phase2_client_cert_scheme:
+ * @setting: the #NMSetting8021x
+ *
+ * Returns the scheme used to store the "phase 2" client certificate. If the
+ * returned scheme is %NM_SETTING_802_1X_CK_SCHEME_BLOB, use
+ * nm_setting_802_1x_get_client_cert_blob(); if
+ * %NM_SETTING_802_1X_CK_SCHEME_PATH, use
+ * nm_setting_802_1x_get_client_cert_path().
+ *
+ * Returns: scheme used to store the "phase 2" client certificate (blob or path)
+ **/
+NMSetting8021xCKScheme
+nm_setting_802_1x_get_phase2_client_cert_scheme (NMSetting8021x *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NM_SETTING_802_1X_CK_SCHEME_UNKNOWN);
+
+ return get_cert_scheme (NM_SETTING_802_1X_GET_PRIVATE (setting)->phase2_client_cert);
+}
+
+/**
+ * nm_setting_802_1x_get_phase2_client_cert_blob:
+ * @setting: the #NMSetting8021x
+ *
+ * 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.
+ *
+ * Returns: (transfer none): the "phase 2" client certificate data
+ **/
+GBytes *
+nm_setting_802_1x_get_phase2_client_cert_blob (NMSetting8021x *setting)
+{
+ NMSetting8021xCKScheme scheme;
+
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
+
+ scheme = nm_setting_802_1x_get_phase2_client_cert_scheme (setting);
+ g_return_val_if_fail (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB, NULL);
+
+ return NM_SETTING_802_1X_GET_PRIVATE (setting)->phase2_client_cert;
+}
+
+/**
+ * nm_setting_802_1x_get_phase2_client_cert_path:
+ * @setting: the #NMSetting8021x
+ *
+ * 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.
+ *
+ * Returns: path to the "phase 2" client certificate file
+ **/
+const char *
+nm_setting_802_1x_get_phase2_client_cert_path (NMSetting8021x *setting)
+{
+ NMSetting8021xCKScheme scheme;
+ gconstpointer data;
+
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
+
+ scheme = nm_setting_802_1x_get_phase2_client_cert_scheme (setting);
+ g_return_val_if_fail (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH, NULL);
+
+ data = g_bytes_get_data (NM_SETTING_802_1X_GET_PRIVATE (setting)->phase2_client_cert, NULL);
+ return (const char *)data + strlen (SCHEME_PATH);
+}
+
+/**
+ * nm_setting_802_1x_set_phase2_client_cert:
+ * @setting: the #NMSetting8021x
+ * @cert_path: when @scheme is set to either %NM_SETTING_802_1X_CK_SCHEME_PATH
+ * or %NM_SETTING_802_1X_CK_SCHEME_BLOB, pass the path of the "phase2" client
+ * certificate file (PEM, DER, or PKCS#<!-- -->12 format). The path must be UTF-8
+ * encoded; use g_filename_to_utf8() to convert if needed. Passing %NULL with
+ * any @scheme clears the "phase2" client certificate.
+ * @scheme: desired storage scheme for the certificate
+ * @out_format: on successful return, the type of the certificate added
+ * @error: on unsuccessful return, an error
+ *
+ * Reads a certificate from disk and sets the #NMSetting8021x:phase2-client-cert
+ * property with the raw certificate data if using the
+ * %NM_SETTING_802_1X_CK_SCHEME_BLOB scheme, or with the path to the certificate
+ * file if using the %NM_SETTING_802_1X_CK_SCHEME_PATH scheme.
+ *
+ * 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.
+ *
+ * Returns: %TRUE if the operation succeeded, %FALSE if it was unsuccessful
+ **/
+gboolean
+nm_setting_802_1x_set_phase2_client_cert (NMSetting8021x *setting,
+ const char *cert_path,
+ NMSetting8021xCKScheme scheme,
+ NMSetting8021xCKFormat *out_format,
+ GError **error)
+{
+ NMSetting8021xPrivate *priv;
+ NMCryptoFileFormat format = NM_CRYPTO_FILE_FORMAT_UNKNOWN;
+ GByteArray *data;
+
+ 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);
+ g_return_val_if_fail ( scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB
+ || scheme == NM_SETTING_802_1X_CK_SCHEME_PATH,
+ FALSE);
+ }
+
+ 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 (setting);
+
+ g_clear_pointer (&priv->phase2_client_cert, g_bytes_unref);
+
+ 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) {
+ gboolean valid = FALSE;
+
+ /* wpa_supplicant can only use raw x509 CA certs */
+ switch (format) {
+ case NM_CRYPTO_FILE_FORMAT_X509:
+ if (out_format)
+ *out_format = NM_SETTING_802_1X_CK_FORMAT_X509;
+ valid = TRUE;
+ break;
+ case NM_CRYPTO_FILE_FORMAT_PKCS12:
+ if (out_format)
+ *out_format = NM_SETTING_802_1X_CK_FORMAT_PKCS12;
+ valid = TRUE;
+ break;
+ default:
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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;
+ }
+
+ if (valid) {
+ if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) {
+ priv->phase2_client_cert = g_byte_array_free_to_bytes (data);
+ data = NULL;
+ } else if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH)
+ priv->phase2_client_cert = path_to_scheme_value (cert_path);
+ else
+ g_assert_not_reached ();
+ }
+ if (data)
+ g_byte_array_unref (data);
+ }
+
+ g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_PHASE2_CLIENT_CERT);
+ return priv->phase2_client_cert != NULL;
+}
+
+/**
+ * nm_setting_802_1x_get_password:
+ * @setting: the #NMSetting8021x
+ *
+ * Returns: the password used by the authentication method, if any, as specified
+ * by the #NMSetting8021x:password property
+ **/
+const char *
+nm_setting_802_1x_get_password (NMSetting8021x *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
+
+ return NM_SETTING_802_1X_GET_PRIVATE (setting)->password;
+}
+
+/**
+ * nm_setting_802_1x_get_password_flags:
+ * @setting: the #NMSetting8021x
+ *
+ * Returns: the #NMSettingSecretFlags pertaining to the #NMSetting8021x:password
+ **/
+NMSettingSecretFlags
+nm_setting_802_1x_get_password_flags (NMSetting8021x *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NM_SETTING_SECRET_FLAG_NONE);
+
+ return NM_SETTING_802_1X_GET_PRIVATE (setting)->password_flags;
+}
+
+/**
+ * nm_setting_802_1x_get_password_raw:
+ * @setting: the #NMSetting8021x
+ *
+ * Returns: (transfer none): the password used by the authentication method as a
+ * UTF-8-encoded array of bytes, as specified by the
+ * #NMSetting8021x:password-raw property
+ **/
+GBytes *
+nm_setting_802_1x_get_password_raw (NMSetting8021x *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
+
+ return NM_SETTING_802_1X_GET_PRIVATE (setting)->password_raw;
+}
+
+/**
+ * nm_setting_802_1x_get_password_raw_flags:
+ * @setting: the #NMSetting8021x
+ *
+ * Returns: the #NMSettingSecretFlags pertaining to the
+ * #NMSetting8021x:password-raw
+ **/
+NMSettingSecretFlags
+nm_setting_802_1x_get_password_raw_flags (NMSetting8021x *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NM_SETTING_SECRET_FLAG_NONE);
+
+ return NM_SETTING_802_1X_GET_PRIVATE (setting)->password_raw_flags;
+}
+
+/**
+ * nm_setting_802_1x_get_pin:
+ * @setting: the #NMSetting8021x
+ *
+ * Returns: the PIN used by the authentication method, if any, as specified
+ * by the #NMSetting8021x:pin property
+ **/
+const char *
+nm_setting_802_1x_get_pin (NMSetting8021x *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
+
+ return NM_SETTING_802_1X_GET_PRIVATE (setting)->pin;
+}
+
+/**
+ * nm_setting_802_1x_get_pin_flags:
+ * @setting: the #NMSetting8021x
+ *
+ * Returns: the #NMSettingSecretFlags pertaining to the
+ * #NMSetting8021x:pin
+ **/
+NMSettingSecretFlags
+nm_setting_802_1x_get_pin_flags (NMSetting8021x *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NM_SETTING_SECRET_FLAG_NONE);
+
+ return NM_SETTING_802_1X_GET_PRIVATE (setting)->pin_flags;
+}
+
+/**
+ * nm_setting_802_1x_get_private_key_scheme:
+ * @setting: the #NMSetting8021x
+ *
+ * Returns the scheme used to store the private key. If the returned scheme is
+ * %NM_SETTING_802_1X_CK_SCHEME_BLOB, use
+ * nm_setting_802_1x_get_client_cert_blob(); if
+ * %NM_SETTING_802_1X_CK_SCHEME_PATH, use
+ * nm_setting_802_1x_get_client_cert_path().
+ *
+ * Returns: scheme used to store the private key (blob or path)
+ **/
+NMSetting8021xCKScheme
+nm_setting_802_1x_get_private_key_scheme (NMSetting8021x *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NM_SETTING_802_1X_CK_SCHEME_UNKNOWN);
+
+ return get_cert_scheme (NM_SETTING_802_1X_GET_PRIVATE (setting)->private_key);
+}
+
+/**
+ * nm_setting_802_1x_get_private_key_blob:
+ * @setting: the #NMSetting8021x
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * Returns: (transfer none): the private key data
+ **/
+GBytes *
+nm_setting_802_1x_get_private_key_blob (NMSetting8021x *setting)
+{
+ NMSetting8021xCKScheme scheme;
+
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
+
+ scheme = nm_setting_802_1x_get_private_key_scheme (setting);
+ g_return_val_if_fail (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB, NULL);
+
+ return NM_SETTING_802_1X_GET_PRIVATE (setting)->private_key;
+}
+
+/**
+ * nm_setting_802_1x_get_private_key_path:
+ * @setting: the #NMSetting8021x
+ *
+ * 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.
+ *
+ * Returns: path to the private key file
+ **/
+const char *
+nm_setting_802_1x_get_private_key_path (NMSetting8021x *setting)
+{
+ NMSetting8021xCKScheme scheme;
+ gconstpointer data;
+
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
+
+ scheme = nm_setting_802_1x_get_private_key_scheme (setting);
+ g_return_val_if_fail (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH, NULL);
+
+ data = g_bytes_get_data (NM_SETTING_802_1X_GET_PRIVATE (setting)->private_key, NULL);
+ return (const char *)data + strlen (SCHEME_PATH);
+}
+
+static void
+free_secure_bytes (gpointer data)
+{
+ GByteArray *array = data;
+
+ memset (array->data, 0, array->len);
+ g_byte_array_unref (array);
+}
+
+static GBytes *
+file_to_secure_bytes (const char *filename)
+{
+ char *contents;
+ GByteArray *array = NULL;
+ gsize length = 0;
+
+ if (g_file_get_contents (filename, &contents, &length, NULL)) {
+ array = g_byte_array_sized_new (length);
+ g_byte_array_append (array, (guint8 *) contents, length);
+ g_assert (array->len == length);
+ g_free (contents);
+ return g_bytes_new_with_free_func (array->data, array->len, free_secure_bytes, array);
+ }
+ return NULL;
+}
+
+/**
+ * nm_setting_802_1x_set_private_key:
+ * @setting: the #NMSetting8021x
+ * @key_path: when @scheme is set to either %NM_SETTING_802_1X_CK_SCHEME_PATH or
+ * %NM_SETTING_802_1X_CK_SCHEME_BLOB, pass the path of the private key file
+ * (PEM, DER, or PKCS#<!-- -->12 format). The path must be UTF-8 encoded; use
+ * g_filename_to_utf8() to convert if needed. Passing %NULL with any @scheme
+ * clears the private key.
+ * @password: password used to decrypt the private key, or %NULL if the password
+ * is unknown. If the password is given but fails to decrypt the private key,
+ * an error is returned.
+ * @scheme: desired storage scheme for the private key
+ * @out_format: on successful return, the type of the private key added
+ * @error: on unsuccessful return, an error
+ *
+ * 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.
+ *
+ * This function reads a private key from disk and sets the
+ * #NMSetting8021x:private-key property with the private key file data if using
+ * the %NM_SETTING_802_1X_CK_SCHEME_BLOB scheme, or with the path to the private
+ * key file if using the %NM_SETTING_802_1X_CK_SCHEME_PATH scheme.
+ *
+ * If @password is given, this function attempts to decrypt the private key to
+ * verify that @password is correct, and if it is, updates the
+ * #NMSetting8021x:private-key-password property with the given @password. If
+ * the decryption is unsuccessful, %FALSE is returned, @error is set, and no
+ * internal data is changed. If no @password is given, the private key is
+ * assumed to be valid, no decryption is performed, and the password may be set
+ * at a later time.
+ *
+ * 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.
+ *
+ * Returns: %TRUE if the operation succeeded, %FALSE if it was unsuccessful
+ **/
+gboolean
+nm_setting_802_1x_set_private_key (NMSetting8021x *setting,
+ const char *key_path,
+ const char *password,
+ NMSetting8021xCKScheme scheme,
+ NMSetting8021xCKFormat *out_format,
+ GError **error)
+{
+ 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 (setting), FALSE);
+
+ if (key_path) {
+ g_return_val_if_fail (g_utf8_validate (key_path, -1, NULL), FALSE);
+ g_return_val_if_fail ( scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB
+ || scheme == NM_SETTING_802_1X_CK_SCHEME_PATH,
+ FALSE);
+ }
+
+ if (out_format)
+ g_return_val_if_fail (*out_format == NM_SETTING_802_1X_CK_FORMAT_UNKNOWN, FALSE);
+
+ /* Ensure the private key is a recognized format and if the password was
+ * given, that it decrypts the private key.
+ */
+ if (key_path) {
+ format = crypto_verify_private_key (key_path, password, NULL, &local_err);
+ if (format == NM_CRYPTO_FILE_FORMAT_UNKNOWN) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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 (setting);
+
+ /* Clear out any previous private key data */
+ if (priv->private_key) {
+ g_bytes_unref (priv->private_key);
+ priv->private_key = NULL;
+ key_cleared = TRUE;
+ }
+
+ 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_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) {
+ /* Shouldn't fail this since we just verified the private key above */
+ priv->private_key = file_to_secure_bytes (key_path);
+ g_assert (priv->private_key);
+ } else if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH)
+ priv->private_key = path_to_scheme_value (key_path);
+ else
+ g_assert_not_reached ();
+
+ /* As required by NM and wpa_supplicant, set the client-cert
+ * property to the same PKCS#12 data.
+ */
+ g_assert (format != NM_CRYPTO_FILE_FORMAT_UNKNOWN);
+ if (format == NM_CRYPTO_FILE_FORMAT_PKCS12) {
+ if (priv->client_cert)
+ g_bytes_unref (priv->client_cert);
+ priv->client_cert = g_bytes_ref (priv->private_key);
+ 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 = (NMSetting8021xCKFormat) format;
+ return priv->private_key != NULL;
+}
+
+/**
+ * nm_setting_802_1x_get_private_key_password:
+ * @setting: the #NMSetting8021x
+ *
+ * Returns: the private key password used to decrypt the private key if
+ * previously set with nm_setting_802_1x_set_private_key(), or the
+ * #NMSetting8021x:private-key-password property.
+ **/
+const char *
+nm_setting_802_1x_get_private_key_password (NMSetting8021x *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
+
+ return NM_SETTING_802_1X_GET_PRIVATE (setting)->private_key_password;
+}
+
+/**
+ * nm_setting_802_1x_get_private_key_password_flags:
+ * @setting: the #NMSetting8021x
+ *
+ * Returns: the #NMSettingSecretFlags pertaining to the
+ * #NMSetting8021x:private-key-password
+ **/
+NMSettingSecretFlags
+nm_setting_802_1x_get_private_key_password_flags (NMSetting8021x *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NM_SETTING_SECRET_FLAG_NONE);
+
+ return NM_SETTING_802_1X_GET_PRIVATE (setting)->private_key_password_flags;
+}
+
+/**
+ * nm_setting_802_1x_get_private_key_format:
+ * @setting: the #NMSetting8021x
+ *
+ * Returns: the data format of the private key data stored in the
+ * #NMSetting8021x:private-key property
+ **/
+NMSetting8021xCKFormat
+nm_setting_802_1x_get_private_key_format (NMSetting8021x *setting)
+{
+ NMSetting8021xPrivate *priv;
+ const char *path;
+ GError *error = NULL;
+
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NM_SETTING_802_1X_CK_FORMAT_UNKNOWN);
+ priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
+
+ if (!priv->private_key)
+ return NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
+
+ switch (nm_setting_802_1x_get_private_key_scheme (setting)) {
+ case NM_SETTING_802_1X_CK_SCHEME_BLOB:
+ if (crypto_is_pkcs12_data (g_bytes_get_data (priv->private_key, NULL),
+ g_bytes_get_size (priv->private_key),
+ NULL))
+ return NM_SETTING_802_1X_CK_FORMAT_PKCS12;
+ return NM_SETTING_802_1X_CK_FORMAT_RAW_KEY;
+ case NM_SETTING_802_1X_CK_SCHEME_PATH:
+ path = nm_setting_802_1x_get_private_key_path (setting);
+ if (crypto_is_pkcs12_file (path, &error))
+ return NM_SETTING_802_1X_CK_FORMAT_PKCS12;
+ if (error && error->domain == G_FILE_ERROR) {
+ g_error_free (error);
+ return NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
+ }
+ return NM_SETTING_802_1X_CK_FORMAT_RAW_KEY;
+ default:
+ break;
+ }
+
+ return NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
+}
+
+/**
+ * nm_setting_802_1x_get_phase2_private_key_password:
+ * @setting: the #NMSetting8021x
+ *
+ * Returns: the private key password used to decrypt the private key if
+ * previously set with nm_setting_802_1x_set_phase2_private_key() or the
+ * #NMSetting8021x:phase2-private-key-password property.
+ **/
+const char *
+nm_setting_802_1x_get_phase2_private_key_password (NMSetting8021x *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
+
+ return NM_SETTING_802_1X_GET_PRIVATE (setting)->phase2_private_key_password;
+}
+
+/**
+ * nm_setting_802_1x_get_phase2_private_key_password_flags:
+ * @setting: the #NMSetting8021x
+ *
+ * Returns: the #NMSettingSecretFlags pertaining to the
+ * #NMSetting8021x:phase2-private-key-password
+ **/
+NMSettingSecretFlags
+nm_setting_802_1x_get_phase2_private_key_password_flags (NMSetting8021x *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NM_SETTING_SECRET_FLAG_NONE);
+
+ return NM_SETTING_802_1X_GET_PRIVATE (setting)->phase2_private_key_password_flags;
+}
+
+/**
+ * nm_setting_802_1x_get_phase2_private_key_scheme:
+ * @setting: the #NMSetting8021x
+ *
+ * Returns the scheme used to store the "phase 2" private key. If the returned
+ * scheme is %NM_SETTING_802_1X_CK_SCHEME_BLOB, use
+ * nm_setting_802_1x_get_client_cert_blob(); if
+ * %NM_SETTING_802_1X_CK_SCHEME_PATH, use
+ * nm_setting_802_1x_get_client_cert_path().
+ *
+ * Returns: scheme used to store the "phase 2" private key (blob or path)
+ **/
+NMSetting8021xCKScheme
+nm_setting_802_1x_get_phase2_private_key_scheme (NMSetting8021x *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NM_SETTING_802_1X_CK_SCHEME_UNKNOWN);
+
+ return get_cert_scheme (NM_SETTING_802_1X_GET_PRIVATE (setting)->phase2_private_key);
+}
+
+/**
+ * nm_setting_802_1x_get_phase2_private_key_blob:
+ * @setting: the #NMSetting8021x
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * Returns: (transfer none): the "phase 2" private key data
+ **/
+GBytes *
+nm_setting_802_1x_get_phase2_private_key_blob (NMSetting8021x *setting)
+{
+ NMSetting8021xCKScheme scheme;
+
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
+
+ scheme = nm_setting_802_1x_get_phase2_private_key_scheme (setting);
+ g_return_val_if_fail (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB, NULL);
+
+ return NM_SETTING_802_1X_GET_PRIVATE (setting)->phase2_private_key;
+}
+
+/**
+ * nm_setting_802_1x_get_phase2_private_key_path:
+ * @setting: the #NMSetting8021x
+ *
+ * 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.
+ *
+ * Returns: path to the "phase 2" private key file
+ **/
+const char *
+nm_setting_802_1x_get_phase2_private_key_path (NMSetting8021x *setting)
+{
+ NMSetting8021xCKScheme scheme;
+ gconstpointer data;
+
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NULL);
+
+ scheme = nm_setting_802_1x_get_phase2_private_key_scheme (setting);
+ g_return_val_if_fail (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH, NULL);
+
+ data = g_bytes_get_data (NM_SETTING_802_1X_GET_PRIVATE (setting)->phase2_private_key, NULL);
+ return (const char *)data + strlen (SCHEME_PATH);
+}
+
+/**
+ * nm_setting_802_1x_set_phase2_private_key:
+ * @setting: the #NMSetting8021x
+ * @key_path: when @scheme is set to either %NM_SETTING_802_1X_CK_SCHEME_PATH or
+ * %NM_SETTING_802_1X_CK_SCHEME_BLOB, pass the path of the "phase2" private
+ * key file (PEM, DER, or PKCS#<!-- -->12 format). The path must be UTF-8 encoded;
+ * use g_filename_to_utf8() to convert if needed. Passing %NULL with any
+ * @scheme clears the private key.
+ * @password: password used to decrypt the private key, or %NULL if the password
+ * is unknown. If the password is given but fails to decrypt the private key,
+ * an error is returned.
+ * @scheme: desired storage scheme for the private key
+ * @out_format: on successful return, the type of the private key added
+ * @error: on unsuccessful return, an error
+ *
+ * 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.
+ *
+ * This function reads a private key from disk and sets the
+ * #NMSetting8021x:phase2-private-key property with the private key file data if
+ * using the %NM_SETTING_802_1X_CK_SCHEME_BLOB scheme, or with the path to the
+ * private key file if using the %NM_SETTING_802_1X_CK_SCHEME_PATH scheme.
+ *
+ * If @password is given, this function attempts to decrypt the private key to
+ * verify that @password is correct, and if it is, updates the
+ * #NMSetting8021x:phase2-private-key-password property with the given
+ * @password. If the decryption is unsuccessful, %FALSE is returned, @error is
+ * set, and no internal data is changed. If no @password is given, the private
+ * key is assumed to be valid, no decryption is performed, and the password may
+ * be set at a later time.
+ *
+ * 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.
+ *
+ * Returns: %TRUE if the operation succeeded, %FALSE if it was unsuccessful
+ **/
+gboolean
+nm_setting_802_1x_set_phase2_private_key (NMSetting8021x *setting,
+ const char *key_path,
+ const char *password,
+ NMSetting8021xCKScheme scheme,
+ NMSetting8021xCKFormat *out_format,
+ GError **error)
+{
+ 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 (setting), FALSE);
+
+ if (key_path) {
+ g_return_val_if_fail (g_utf8_validate (key_path, -1, NULL), FALSE);
+ g_return_val_if_fail ( scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB
+ || scheme == NM_SETTING_802_1X_CK_SCHEME_PATH,
+ FALSE);
+ }
+
+ if (out_format)
+ g_return_val_if_fail (*out_format == NM_SETTING_802_1X_CK_FORMAT_UNKNOWN, FALSE);
+
+ /* Ensure the private key is a recognized format and if the password was
+ * given, that it decrypts the private key.
+ */
+ if (key_path) {
+ format = crypto_verify_private_key (key_path, password, NULL, &local_err);
+ if (format == NM_CRYPTO_FILE_FORMAT_UNKNOWN) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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 (setting);
+
+ /* Clear out any previous private key data */
+ if (priv->phase2_private_key) {
+ g_bytes_unref (priv->phase2_private_key);
+ priv->phase2_private_key = NULL;
+ key_cleared = TRUE;
+ }
+
+ 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_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) {
+ /* Shouldn't fail this since we just verified the private key above */
+ priv->phase2_private_key = file_to_secure_bytes (key_path);
+ g_assert (priv->phase2_private_key);
+ } else if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH)
+ priv->phase2_private_key = path_to_scheme_value (key_path);
+ else
+ g_assert_not_reached ();
+
+ /* As required by NM and wpa_supplicant, set the client-cert
+ * property to the same PKCS#12 data.
+ */
+ g_assert (format != NM_CRYPTO_FILE_FORMAT_UNKNOWN);
+ if (format == NM_CRYPTO_FILE_FORMAT_PKCS12) {
+ if (priv->phase2_client_cert)
+ g_bytes_unref (priv->phase2_client_cert);
+
+ priv->phase2_client_cert = g_bytes_ref (priv->phase2_private_key);
+ 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 = (NMSetting8021xCKFormat) format;
+ return priv->phase2_private_key != NULL;
+}
+
+/**
+ * nm_setting_802_1x_get_phase2_private_key_format:
+ * @setting: the #NMSetting8021x
+ *
+ * Returns: the data format of the "phase 2" private key data stored in the
+ * #NMSetting8021x:phase2-private-key property
+ **/
+NMSetting8021xCKFormat
+nm_setting_802_1x_get_phase2_private_key_format (NMSetting8021x *setting)
+{
+ NMSetting8021xPrivate *priv;
+ const char *path;
+ GError *error = NULL;
+
+ g_return_val_if_fail (NM_IS_SETTING_802_1X (setting), NM_SETTING_802_1X_CK_FORMAT_UNKNOWN);
+ priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
+
+ if (!priv->phase2_private_key)
+ return NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
+
+ switch (nm_setting_802_1x_get_phase2_private_key_scheme (setting)) {
+ case NM_SETTING_802_1X_CK_SCHEME_BLOB:
+ if (crypto_is_pkcs12_data (g_bytes_get_data (priv->phase2_private_key, NULL),
+ g_bytes_get_size (priv->phase2_private_key),
+ NULL))
+ return NM_SETTING_802_1X_CK_FORMAT_PKCS12;
+ return NM_SETTING_802_1X_CK_FORMAT_RAW_KEY;
+ case NM_SETTING_802_1X_CK_SCHEME_PATH:
+ path = nm_setting_802_1x_get_phase2_private_key_path (setting);
+ if (crypto_is_pkcs12_file (path, &error))
+ return NM_SETTING_802_1X_CK_FORMAT_PKCS12;
+ if (error && error->domain == G_FILE_ERROR) {
+ g_error_free (error);
+ return NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
+ }
+ return NM_SETTING_802_1X_CK_FORMAT_RAW_KEY;
+ default:
+ break;
+ }
+
+ return NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
+}
+
+static void
+need_secrets_password (NMSetting8021x *self,
+ GPtrArray *secrets,
+ gboolean phase2)
+{
+ NMSetting8021xPrivate *priv = NM_SETTING_802_1X_GET_PRIVATE (self);
+
+ if ( (!priv->password || !strlen (priv->password))
+ && (!priv->password_raw || !g_bytes_get_size (priv->password_raw))) {
+ g_ptr_array_add (secrets, NM_SETTING_802_1X_PASSWORD);
+ g_ptr_array_add (secrets, NM_SETTING_802_1X_PASSWORD_RAW);
+ }
+}
+
+static void
+need_secrets_sim (NMSetting8021x *self,
+ GPtrArray *secrets,
+ gboolean phase2)
+{
+ NMSetting8021xPrivate *priv = NM_SETTING_802_1X_GET_PRIVATE (self);
+
+ if (!priv->pin || !strlen (priv->pin))
+ g_ptr_array_add (secrets, NM_SETTING_802_1X_PIN);
+}
+
+static gboolean
+need_private_key_password (GBytes *blob,
+ const char *path,
+ const char *password)
+{
+ NMCryptoFileFormat format = NM_CRYPTO_FILE_FORMAT_UNKNOWN;
+
+ /* Private key password is required */
+ if (password) {
+ if (path)
+ format = crypto_verify_private_key (path, password, NULL, NULL);
+ else if (blob)
+ format = crypto_verify_private_key_data (g_bytes_get_data (blob, NULL),
+ g_bytes_get_size (blob),
+ password, NULL, NULL);
+ else
+ g_warning ("%s: unknown private key password scheme", __func__);
+ }
+
+ return (format == NM_CRYPTO_FILE_FORMAT_UNKNOWN);
+}
+
+static void
+need_secrets_tls (NMSetting8021x *self,
+ GPtrArray *secrets,
+ gboolean phase2)
+{
+ NMSetting8021xPrivate *priv = NM_SETTING_802_1X_GET_PRIVATE (self);
+ NMSetting8021xCKScheme scheme;
+ GBytes *blob = NULL;
+ const char *path = NULL;
+
+ if (phase2) {
+ scheme = nm_setting_802_1x_get_phase2_private_key_scheme (self);
+ if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH)
+ path = nm_setting_802_1x_get_phase2_private_key_path (self);
+ else if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB)
+ blob = nm_setting_802_1x_get_phase2_private_key_blob (self);
+ else {
+ g_warning ("%s: unknown phase2 private key scheme %d", __func__, scheme);
+ g_ptr_array_add (secrets, NM_SETTING_802_1X_PHASE2_PRIVATE_KEY);
+ return;
+ }
+
+ if (need_private_key_password (blob, path, priv->phase2_private_key_password))
+ g_ptr_array_add (secrets, NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD);
+ } else {
+ scheme = nm_setting_802_1x_get_private_key_scheme (self);
+ if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH)
+ path = nm_setting_802_1x_get_private_key_path (self);
+ else if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB)
+ blob = nm_setting_802_1x_get_private_key_blob (self);
+ else {
+ g_warning ("%s: unknown private key scheme %d", __func__, scheme);
+ g_ptr_array_add (secrets, NM_SETTING_802_1X_PRIVATE_KEY);
+ return;
+ }
+
+ if (need_private_key_password (blob, path, priv->private_key_password))
+ g_ptr_array_add (secrets, NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD);
+ }
+}
+
+static gboolean
+verify_tls (NMSetting8021x *self, gboolean phase2, GError **error)
+{
+ NMSetting8021xPrivate *priv = NM_SETTING_802_1X_GET_PRIVATE (self);
+
+ if (phase2) {
+ if (!priv->phase2_client_cert) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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 (!g_bytes_get_size (priv->phase2_client_cert)) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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 (!g_bytes_get_size (priv->phase2_private_key)) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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;
+ }
+
+ /* If the private key is PKCS#12, check that it matches the client cert */
+ if (crypto_is_pkcs12_data (g_bytes_get_data (priv->phase2_private_key, NULL),
+ g_bytes_get_size (priv->phase2_private_key),
+ NULL)) {
+ if (!g_bytes_equal (priv->phase2_private_key, priv->phase2_client_cert)) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("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_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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 (!g_bytes_get_size (priv->client_cert)) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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 (!g_bytes_get_size (priv->private_key)) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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;
+ }
+
+ /* If the private key is PKCS#12, check that it matches the client cert */
+ if (crypto_is_pkcs12_data (g_bytes_get_data (priv->private_key, NULL),
+ g_bytes_get_size (priv->private_key),
+ NULL)) {
+ if (!g_bytes_equal (priv->private_key, priv->client_cert)) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("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;
+ }
+ }
+ }
+
+ return TRUE;
+}
+
+static gboolean
+verify_ttls (NMSetting8021x *self, gboolean phase2, GError **error)
+{
+ NMSetting8021xPrivate *priv = NM_SETTING_802_1X_GET_PRIVATE (self);
+
+ if ( (!priv->identity || !strlen (priv->identity))
+ && (!priv->anonymous_identity || !strlen (priv->anonymous_identity))) {
+ if (!priv->identity) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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;
+ }
+
+ if ( (!priv->phase2_auth || !strlen (priv->phase2_auth))
+ && (!priv->phase2_autheap || !strlen (priv->phase2_autheap))) {
+ if (!priv->phase2_auth) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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;
+ }
+
+ return TRUE;
+}
+
+static gboolean
+verify_identity (NMSetting8021x *self, gboolean phase2, GError **error)
+{
+ NMSetting8021xPrivate *priv = NM_SETTING_802_1X_GET_PRIVATE (self);
+
+ if (!priv->identity) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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;
+ }
+
+ return TRUE;
+}
+
+/* Implemented below... */
+static void need_secrets_phase2 (NMSetting8021x *self,
+ GPtrArray *secrets,
+ gboolean phase2);
+
+
+typedef void (*EAPMethodNeedSecretsFunc) (NMSetting8021x *self,
+ GPtrArray *secrets,
+ gboolean phase2);
+
+typedef gboolean (*EAPMethodValidateFunc)(NMSetting8021x *self,
+ gboolean phase2,
+ GError **error);
+
+typedef struct {
+ const char *method;
+ EAPMethodNeedSecretsFunc ns_func;
+ EAPMethodValidateFunc v_func;
+} EAPMethodsTable;
+
+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 },
+ { "mschap", need_secrets_password, verify_identity },
+ { "mschapv2", need_secrets_password, verify_identity },
+ { "fast", need_secrets_password, verify_identity },
+ { "tls", need_secrets_tls, verify_tls },
+ { "peap", need_secrets_phase2, verify_ttls },
+ { "ttls", need_secrets_phase2, verify_ttls },
+ { "sim", need_secrets_sim, NULL },
+ { "gtc", need_secrets_password, verify_identity },
+ { "otp", NULL, NULL }, // FIXME: implement
+ { NULL, NULL, NULL }
+};
+
+static void
+need_secrets_phase2 (NMSetting8021x *self,
+ GPtrArray *secrets,
+ gboolean phase2)
+{
+ NMSetting8021xPrivate *priv = NM_SETTING_802_1X_GET_PRIVATE (self);
+ char *method = NULL;
+ int i;
+
+ g_return_if_fail (phase2 == FALSE);
+
+ /* Check phase2_auth and phase2_autheap */
+ method = priv->phase2_auth;
+ if (!method && priv->phase2_autheap)
+ method = priv->phase2_autheap;
+
+ if (!method) {
+ g_warning ("Couldn't find EAP method.");
+ g_assert_not_reached();
+ return;
+ }
+
+ /* Ask the configured phase2 method if it needs secrets */
+ for (i = 0; eap_methods_table[i].method; i++) {
+ if (eap_methods_table[i].ns_func == NULL)
+ continue;
+ if (!strcmp (eap_methods_table[i].method, method)) {
+ (*eap_methods_table[i].ns_func) (self, secrets, TRUE);
+ break;
+ }
+ }
+}
+
+
+static GPtrArray *
+need_secrets (NMSetting *setting)
+{
+ NMSetting8021x *self = NM_SETTING_802_1X (setting);
+ NMSetting8021xPrivate *priv = NM_SETTING_802_1X_GET_PRIVATE (self);
+ GSList *iter;
+ GPtrArray *secrets;
+ gboolean eap_method_found = FALSE;
+
+ secrets = g_ptr_array_sized_new (4);
+
+ /* Ask each configured EAP method if it needs secrets */
+ for (iter = priv->eap; iter && !eap_method_found; iter = g_slist_next (iter)) {
+ const char *method = (const char *) iter->data;
+ int i;
+
+ for (i = 0; eap_methods_table[i].method; i++) {
+ if (eap_methods_table[i].ns_func == NULL)
+ continue;
+ if (!strcmp (eap_methods_table[i].method, method)) {
+ (*eap_methods_table[i].ns_func) (self, secrets, FALSE);
+
+ /* Only break out of the outer loop if this EAP method
+ * needed secrets.
+ */
+ if (secrets->len > 0)
+ eap_method_found = TRUE;
+ break;
+ }
+ }
+ }
+
+ if (secrets->len == 0) {
+ g_ptr_array_free (secrets, TRUE);
+ secrets = NULL;
+ }
+
+ return secrets;
+}
+
+static gboolean
+verify_cert (GBytes *bytes, const char *prop_name, GError **error)
+{
+ gconstpointer data;
+ gsize length;
+
+ if (!bytes)
+ return TRUE;
+
+ switch (get_cert_scheme (bytes)) {
+ case NM_SETTING_802_1X_CK_SCHEME_BLOB:
+ return TRUE;
+ case NM_SETTING_802_1X_CK_SCHEME_PATH:
+ /* For path-based schemes, verify that the path is zero-terminated */
+ data = g_bytes_get_data (bytes, &length);
+ if (((const guchar *)data)[length - 1] == '\0') {
+ /* And ensure it's UTF-8 valid too so we can pass it through
+ * D-Bus and stuff like that.
+ */
+ if (g_utf8_validate ((const char *)data + strlen (SCHEME_PATH), -1, NULL))
+ return TRUE;
+ }
+ break;
+ default:
+ break;
+ }
+
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("property is invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_802_1X_SETTING_NAME, prop_name);
+ return FALSE;
+}
+
+static gboolean
+verify (NMSetting *setting, NMConnection *connection, 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", "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 };
+ const char *valid_phase2_auth[] = { "pap", "chap", "mschap", "mschapv2", "gtc", "otp", "md5", "tls", NULL };
+ const char *valid_phase2_autheap[] = { "md5", "mschapv2", "otp", "gtc", "tls", NULL };
+ GSList *iter;
+
+ if (error)
+ g_return_val_if_fail (*error == NULL, FALSE);
+
+ if (!priv->eap) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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;
+ }
+
+ /* Ask each configured EAP method if its valid */
+ for (iter = priv->eap; iter; iter = g_slist_next (iter)) {
+ const char *method = (const char *) iter->data;
+ int i;
+
+ for (i = 0; eap_methods_table[i].method; i++) {
+ if (eap_methods_table[i].v_func == NULL)
+ continue;
+ if (!strcmp (eap_methods_table[i].method, method)) {
+ if (!(*eap_methods_table[i].v_func) (self, FALSE, error))
+ return FALSE;
+ break;
+ }
+ }
+ }
+
+ if (priv->phase1_peapver && !_nm_utils_string_in_list (priv->phase1_peapver, valid_phase1_peapver)) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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;
+ }
+
+ if (priv->phase1_peaplabel && !_nm_utils_string_in_list (priv->phase1_peaplabel, valid_phase1_peaplabel)) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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;
+ }
+
+ if (priv->phase1_fast_provisioning && !_nm_utils_string_in_list (priv->phase1_fast_provisioning, valid_phase1_fast_pac)) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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;
+ }
+
+ if (priv->phase2_auth && !_nm_utils_string_in_list (priv->phase2_auth, valid_phase2_auth)) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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;
+ }
+
+ if (priv->phase2_autheap && !_nm_utils_string_in_list (priv->phase2_autheap, valid_phase2_autheap)) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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;
+ }
+
+ if (!verify_cert (priv->ca_cert, NM_SETTING_802_1X_CA_CERT, error))
+ return FALSE;
+ if (!verify_cert (priv->phase2_ca_cert, NM_SETTING_802_1X_PHASE2_CA_CERT, error))
+ return FALSE;
+
+ if (!verify_cert (priv->client_cert, NM_SETTING_802_1X_CLIENT_CERT, error))
+ return FALSE;
+ if (!verify_cert (priv->phase2_client_cert, NM_SETTING_802_1X_PHASE2_CLIENT_CERT, error))
+ return FALSE;
+
+ if (!verify_cert (priv->private_key, NM_SETTING_802_1X_PRIVATE_KEY, error))
+ return FALSE;
+ if (!verify_cert (priv->phase2_private_key, NM_SETTING_802_1X_PHASE2_PRIVATE_KEY, error))
+ return FALSE;
+
+ /* FIXME: finish */
+
+ return TRUE;
+}
+
+static void
+nm_setting_802_1x_init (NMSetting8021x *setting)
+{
+}
+
+static void
+finalize (GObject *object)
+{
+ NMSetting8021x *self = NM_SETTING_802_1X (object);
+ NMSetting8021xPrivate *priv = NM_SETTING_802_1X_GET_PRIVATE (self);
+
+ /* Strings first. g_free() already checks for NULLs so we don't have to */
+
+ g_free (priv->identity);
+ g_free (priv->anonymous_identity);
+ g_free (priv->ca_path);
+ g_free (priv->subject_match);
+ g_free (priv->phase1_peapver);
+ g_free (priv->phase1_peaplabel);
+ g_free (priv->phase1_fast_provisioning);
+ g_free (priv->phase2_auth);
+ g_free (priv->phase2_autheap);
+ g_free (priv->phase2_ca_path);
+ g_free (priv->phase2_subject_match);
+ g_free (priv->password);
+ if (priv->password_raw)
+ g_bytes_unref (priv->password_raw);
+ g_free (priv->pin);
+
+ 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_bytes_unref (priv->ca_cert);
+ if (priv->client_cert)
+ g_bytes_unref (priv->client_cert);
+ if (priv->private_key)
+ g_bytes_unref (priv->private_key);
+ g_free (priv->private_key_password);
+ if (priv->phase2_ca_cert)
+ g_bytes_unref (priv->phase2_ca_cert);
+ if (priv->phase2_client_cert)
+ g_bytes_unref (priv->phase2_client_cert);
+ if (priv->phase2_private_key)
+ g_bytes_unref (priv->phase2_private_key);
+ g_free (priv->phase2_private_key_password);
+
+ G_OBJECT_CLASS (nm_setting_802_1x_parent_class)->finalize (object);
+}
+
+static GBytes *
+set_cert_prop_helper (const GValue *value, const char *prop_name, GError **error)
+{
+ gboolean valid;
+ GBytes *bytes = NULL;
+
+ bytes = g_value_dup_boxed (value);
+ /* Verify the new data */
+ if (bytes) {
+ valid = verify_cert (bytes, prop_name, error);
+ if (!valid)
+ g_clear_pointer (&bytes, g_bytes_unref);
+ }
+ return bytes;
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ NMSetting8021x *setting = NM_SETTING_802_1X (object);
+ NMSetting8021xPrivate *priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
+ GError *error = NULL;
+
+ switch (prop_id) {
+ case PROP_EAP:
+ g_slist_free_full (priv->eap, g_free);
+ priv->eap = _nm_utils_strv_to_slist (g_value_get_boxed (value));
+ break;
+ case PROP_IDENTITY:
+ g_free (priv->identity);
+ priv->identity = g_value_dup_string (value);
+ break;
+ case PROP_ANONYMOUS_IDENTITY:
+ g_free (priv->anonymous_identity);
+ priv->anonymous_identity = g_value_dup_string (value);
+ break;
+ case PROP_PAC_FILE:
+ g_free (priv->pac_file);
+ priv->pac_file = g_value_dup_string (value);
+ break;
+ case PROP_CA_CERT:
+ if (priv->ca_cert)
+ g_bytes_unref (priv->ca_cert);
+ priv->ca_cert = set_cert_prop_helper (value, NM_SETTING_802_1X_CA_CERT, &error);
+ if (error) {
+ g_warning ("Error setting certificate (invalid data): (%d) %s",
+ error->code, error->message);
+ g_error_free (error);
+ }
+ break;
+ case PROP_CA_PATH:
+ g_free (priv->ca_path);
+ priv->ca_path = g_value_dup_string (value);
+ break;
+ case PROP_SUBJECT_MATCH:
+ g_free (priv->subject_match);
+ priv->subject_match = g_value_dup_string (value);
+ break;
+ case PROP_ALTSUBJECT_MATCHES:
+ g_slist_free_full (priv->altsubject_matches, g_free);
+ priv->altsubject_matches = _nm_utils_strv_to_slist (g_value_get_boxed (value));
+ break;
+ case PROP_CLIENT_CERT:
+ if (priv->client_cert)
+ g_bytes_unref (priv->client_cert);
+ priv->client_cert = set_cert_prop_helper (value, NM_SETTING_802_1X_CLIENT_CERT, &error);
+ if (error) {
+ g_warning ("Error setting certificate (invalid data): (%d) %s",
+ error->code, error->message);
+ g_error_free (error);
+ }
+ break;
+ case PROP_PHASE1_PEAPVER:
+ g_free (priv->phase1_peapver);
+ priv->phase1_peapver = g_value_dup_string (value);
+ break;
+ case PROP_PHASE1_PEAPLABEL:
+ g_free (priv->phase1_peaplabel);
+ priv->phase1_peaplabel = g_value_dup_string (value);
+ break;
+ case PROP_PHASE1_FAST_PROVISIONING:
+ g_free (priv->phase1_fast_provisioning);
+ priv->phase1_fast_provisioning = g_value_dup_string (value);
+ break;
+ case PROP_PHASE2_AUTH:
+ g_free (priv->phase2_auth);
+ priv->phase2_auth = g_value_dup_string (value);
+ break;
+ case PROP_PHASE2_AUTHEAP:
+ g_free (priv->phase2_autheap);
+ priv->phase2_autheap = g_value_dup_string (value);
+ break;
+ case PROP_PHASE2_CA_CERT:
+ if (priv->phase2_ca_cert)
+ g_bytes_unref (priv->phase2_ca_cert);
+ priv->phase2_ca_cert = set_cert_prop_helper (value, NM_SETTING_802_1X_PHASE2_CA_CERT, &error);
+ if (error) {
+ g_warning ("Error setting certificate (invalid data): (%d) %s",
+ error->code, error->message);
+ g_error_free (error);
+ }
+ break;
+ case PROP_PHASE2_CA_PATH:
+ g_free (priv->phase2_ca_path);
+ priv->phase2_ca_path = g_value_dup_string (value);
+ break;
+ case PROP_PHASE2_SUBJECT_MATCH:
+ g_free (priv->phase2_subject_match);
+ priv->phase2_subject_match = g_value_dup_string (value);
+ break;
+ case PROP_PHASE2_ALTSUBJECT_MATCHES:
+ g_slist_free_full (priv->phase2_altsubject_matches, g_free);
+ priv->phase2_altsubject_matches = _nm_utils_strv_to_slist (g_value_get_boxed (value));
+ break;
+ case PROP_PHASE2_CLIENT_CERT:
+ if (priv->phase2_client_cert)
+ g_bytes_unref (priv->phase2_client_cert);
+ priv->phase2_client_cert = set_cert_prop_helper (value, NM_SETTING_802_1X_PHASE2_CLIENT_CERT, &error);
+ if (error) {
+ g_warning ("Error setting certificate (invalid data): (%d) %s",
+ error->code, error->message);
+ g_error_free (error);
+ }
+ break;
+ case PROP_PASSWORD:
+ g_free (priv->password);
+ priv->password = g_value_dup_string (value);
+ break;
+ case PROP_PASSWORD_FLAGS:
+ priv->password_flags = g_value_get_flags (value);
+ break;
+ case PROP_PASSWORD_RAW:
+ if (priv->password_raw)
+ g_bytes_unref (priv->password_raw);
+ priv->password_raw = g_value_dup_boxed (value);
+ break;
+ case PROP_PASSWORD_RAW_FLAGS:
+ priv->password_raw_flags = g_value_get_flags (value);
+ break;
+ case PROP_PRIVATE_KEY:
+ if (priv->private_key)
+ g_bytes_unref (priv->private_key);
+ priv->private_key = set_cert_prop_helper (value, NM_SETTING_802_1X_PRIVATE_KEY, &error);
+ if (error) {
+ g_warning ("Error setting private key (invalid data): (%d) %s",
+ error->code, error->message);
+ g_error_free (error);
+ }
+ break;
+ case PROP_PRIVATE_KEY_PASSWORD:
+ g_free (priv->private_key_password);
+ priv->private_key_password = g_value_dup_string (value);
+ break;
+ case PROP_PRIVATE_KEY_PASSWORD_FLAGS:
+ priv->private_key_password_flags = g_value_get_flags (value);
+ break;
+ case PROP_PHASE2_PRIVATE_KEY:
+ if (priv->phase2_private_key)
+ g_bytes_unref (priv->phase2_private_key);
+ priv->phase2_private_key = set_cert_prop_helper (value, NM_SETTING_802_1X_PHASE2_PRIVATE_KEY, &error);
+ if (error) {
+ g_warning ("Error setting private key (invalid data): (%d) %s",
+ error->code, error->message);
+ g_error_free (error);
+ }
+ break;
+ case PROP_PHASE2_PRIVATE_KEY_PASSWORD:
+ g_free (priv->phase2_private_key_password);
+ priv->phase2_private_key_password = g_value_dup_string (value);
+ break;
+ case PROP_PHASE2_PRIVATE_KEY_PASSWORD_FLAGS:
+ priv->phase2_private_key_password_flags = g_value_get_flags (value);
+ break;
+ case PROP_PIN:
+ g_free (priv->pin);
+ priv->pin = g_value_dup_string (value);
+ break;
+ case PROP_PIN_FLAGS:
+ priv->pin_flags = g_value_get_flags (value);
+ break;
+ case PROP_SYSTEM_CA_CERTS:
+ priv->system_ca_certs = g_value_get_boolean (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)
+{
+ NMSetting8021x *setting = NM_SETTING_802_1X (object);
+ NMSetting8021xPrivate *priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
+
+ switch (prop_id) {
+ case PROP_EAP:
+ g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->eap));
+ break;
+ case PROP_IDENTITY:
+ g_value_set_string (value, priv->identity);
+ break;
+ case PROP_ANONYMOUS_IDENTITY:
+ g_value_set_string (value, priv->anonymous_identity);
+ break;
+ case PROP_PAC_FILE:
+ g_value_set_string (value, priv->pac_file);
+ break;
+ case PROP_CA_CERT:
+ g_value_set_boxed (value, priv->ca_cert);
+ break;
+ case PROP_CA_PATH:
+ g_value_set_string (value, priv->ca_path);
+ break;
+ case PROP_SUBJECT_MATCH:
+ g_value_set_string (value, priv->subject_match);
+ break;
+ case PROP_ALTSUBJECT_MATCHES:
+ g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->altsubject_matches));
+ break;
+ case PROP_CLIENT_CERT:
+ g_value_set_boxed (value, priv->client_cert);
+ break;
+ case PROP_PHASE1_PEAPVER:
+ g_value_set_string (value, priv->phase1_peapver);
+ break;
+ case PROP_PHASE1_PEAPLABEL:
+ g_value_set_string (value, priv->phase1_peaplabel);
+ break;
+ case PROP_PHASE1_FAST_PROVISIONING:
+ g_value_set_string (value, priv->phase1_fast_provisioning);
+ break;
+ case PROP_PHASE2_AUTH:
+ g_value_set_string (value, priv->phase2_auth);
+ break;
+ case PROP_PHASE2_AUTHEAP:
+ g_value_set_string (value, priv->phase2_autheap);
+ break;
+ case PROP_PHASE2_CA_CERT:
+ g_value_set_boxed (value, priv->phase2_ca_cert);
+ break;
+ case PROP_PHASE2_CA_PATH:
+ g_value_set_string (value, priv->phase2_ca_path);
+ break;
+ case PROP_PHASE2_SUBJECT_MATCH:
+ g_value_set_string (value, priv->phase2_subject_match);
+ break;
+ case PROP_PHASE2_ALTSUBJECT_MATCHES:
+ g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->phase2_altsubject_matches));
+ break;
+ case PROP_PHASE2_CLIENT_CERT:
+ g_value_set_boxed (value, priv->phase2_client_cert);
+ break;
+ case PROP_PASSWORD:
+ g_value_set_string (value, priv->password);
+ break;
+ case PROP_PASSWORD_FLAGS:
+ g_value_set_flags (value, priv->password_flags);
+ break;
+ case PROP_PASSWORD_RAW:
+ g_value_set_boxed (value, priv->password_raw);
+ break;
+ case PROP_PASSWORD_RAW_FLAGS:
+ g_value_set_flags (value, priv->password_raw_flags);
+ break;
+ case PROP_PRIVATE_KEY:
+ g_value_set_boxed (value, priv->private_key);
+ break;
+ case PROP_PRIVATE_KEY_PASSWORD:
+ g_value_set_string (value, priv->private_key_password);
+ break;
+ case PROP_PRIVATE_KEY_PASSWORD_FLAGS:
+ g_value_set_flags (value, priv->private_key_password_flags);
+ break;
+ case PROP_PHASE2_PRIVATE_KEY:
+ g_value_set_boxed (value, priv->phase2_private_key);
+ break;
+ case PROP_PHASE2_PRIVATE_KEY_PASSWORD:
+ g_value_set_string (value, priv->phase2_private_key_password);
+ break;
+ case PROP_PHASE2_PRIVATE_KEY_PASSWORD_FLAGS:
+ g_value_set_flags (value, priv->phase2_private_key_password_flags);
+ break;
+ case PROP_PIN:
+ g_value_set_string (value, priv->pin);
+ break;
+ case PROP_PIN_FLAGS:
+ g_value_set_flags (value, priv->pin_flags);
+ break;
+ case PROP_SYSTEM_CA_CERTS:
+ g_value_set_boolean (value, priv->system_ca_certs);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_setting_802_1x_class_init (NMSetting8021xClass *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 (NMSetting8021xPrivate));
+
+ /* virtual methods */
+ object_class->set_property = set_property;
+ object_class->get_property = get_property;
+ object_class->finalize = finalize;
+
+ parent_class->verify = verify;
+ parent_class->need_secrets = need_secrets;
+
+ /* Properties */
+
+ /**
+ * 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", "pwd",
+ * and "fast". Each method requires different configuration using the
+ * properties of this setting; refer to wpa_supplicant documentation for the
+ * allowed combinations.
+ **/
+ /* ---ifcfg-rh---
+ * property: eap
+ * variable: IEEE_8021X_EAP_METHODS(+)
+ * values: "LEAP", "PWD", "TLS", "PEAP", "TTLS", "FAST"
+ * description: EAP method for 802.1X authentication.
+ * example: IEEE_8021X_EAP_METHODS=PEAP
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_EAP,
+ g_param_spec_boxed (NM_SETTING_802_1X_EAP, "", "",
+ G_TYPE_STRV,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSetting8021x:identity:
+ *
+ * Identity string for EAP authentication methods. Often the user's user or
+ * login name.
+ **/
+ /* ---ifcfg-rh---
+ * property: identity
+ * variable: IEEE_8021X_IDENTITY(+)
+ * description: Identity for EAP authentication methods.
+ * example: IEEE_8021X_IDENTITY=itsme
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_IDENTITY,
+ g_param_spec_string (NM_SETTING_802_1X_IDENTITY, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSetting8021x:anonymous-identity:
+ *
+ * Anonymous identity string for EAP authentication methods. Used as the
+ * unencrypted identity with EAP types that support different tunneled
+ * identity like EAP-TTLS.
+ **/
+ /* ---ifcfg-rh---
+ * property: anonymous-identity
+ * variable: IEEE_8021X_ANON_IDENTITY(+)
+ * description: Anonymous identity for EAP authentication methods.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_ANONYMOUS_IDENTITY,
+ g_param_spec_string (NM_SETTING_802_1X_ANONYMOUS_IDENTITY, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSetting8021x:pac-file:
+ *
+ * UTF-8 encoded file path containing PAC for EAP-FAST.
+ **/
+ /* ---ifcfg-rh---
+ * property: pac-file
+ * variable: IEEE_8021X_PAC_FILE(+)
+ * description: File with PAC (Protected Access Credential) for EAP-FAST.
+ * example: IEEE_8021X_PAC_FILE=/home/joe/my-fast.pac
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PAC_FILE,
+ g_param_spec_string (NM_SETTING_802_1X_PAC_FILE, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSetting8021x:ca-cert:
+ *
+ * Contains the CA certificate if used by the EAP method specified in 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. 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: ca-cert
+ * variable: IEEE_8021X_CA_CERT(+)
+ * description: CA certificate for EAP.
+ * example: IEEE_8021X_CA_CERT=/home/joe/cacert.crt
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_CA_CERT,
+ g_param_spec_boxed (NM_SETTING_802_1X_CA_CERT, "", "",
+ G_TYPE_BYTES,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSetting8021x:ca-path:
+ *
+ * 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 #NMSetting8021x:ca-cert property.
+ **/
+ /* ---ifcfg-rh---
+ * property: ca-path
+ * variable: (none)
+ * description: The property is not handled by ifcfg-rh plugin.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_CA_PATH,
+ g_param_spec_string (NM_SETTING_802_1X_CA_PATH, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: subject-match
+ * variable: IEEE_8021X_SUBJECT_MATCH(+)
+ * description: Substring to match subject of server certificate against.
+ * example: IEEE_8021X_SUBJECT_MATCH="Red Hat"
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_SUBJECT_MATCH,
+ g_param_spec_string (NM_SETTING_802_1X_SUBJECT_MATCH, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: altubject-matches
+ * variable: IEEE_8021X_AlTSUBJECT_MATCHES(+)
+ * description: List of strings to be matched against the altSubjectName.
+ * example: IEEE_8021X_ALTSUBJECT_MATCHES="s1.domain.cc"
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_ALTSUBJECT_MATCHES,
+ g_param_spec_boxed (NM_SETTING_802_1X_ALTSUBJECT_MATCHES, "", "",
+ G_TYPE_STRV,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSetting8021x:client-cert:
+ *
+ * Contains the client certificate if used by the EAP method specified in
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: client-cert
+ * variable: IEEE_8021X_CLIENT_CERT(+)
+ * description: Client certificate for EAP.
+ * example: IEEE_8021X_CLIENT_CERT=/home/joe/mycert.crt
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_CLIENT_CERT,
+ g_param_spec_boxed (NM_SETTING_802_1X_CLIENT_CERT, "", "",
+ G_TYPE_BYTES,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSetting8021x:phase1-peapver:
+ *
+ * Forces which PEAP version is used when PEAP is set as the EAP method in
+ * the #NMSetting8021x: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.
+ **/
+ /* ---ifcfg-rh---
+ * property: phase1-peapver
+ * variable: IEEE_8021X_PEAP_VERSION(+)
+ * values: 0, 1
+ * description: Use to force a specific PEAP version.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PHASE1_PEAPVER,
+ g_param_spec_string (NM_SETTING_802_1X_PHASE1_PEAPVER, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSetting8021x:phase1-peaplabel:
+ *
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: phase1-peaplabel
+ * variable: IEEE_8021X_PEAP_FORCE_NEW_LABEL(+)
+ * values: yes, no
+ * default: no
+ * description: Use to force the new PEAP label during key derivation.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PHASE1_PEAPLABEL,
+ g_param_spec_string (NM_SETTING_802_1X_PHASE1_PEAPLABEL, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSetting8021x:phase1-fast-provisioning:
+ *
+ * Enables or disables in-line provisioning of EAP-FAST credentials when
+ * FAST is specified as the EAP method in the #NMSetting8021x:eap 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: phase1-fast-provisioning
+ * variable: IEEE_8021X_FAST_PROVISIONING(+)
+ * values: space-separated list of these values [allow-auth, allow-unauth]
+ * description: Enable in-line provisioning of EAP-FAST credentials.
+ * example: IEEE_8021X_FAST_PROVISIONING="allow-auth allow-unauth"
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PHASE1_FAST_PROVISIONING,
+ g_param_spec_string (NM_SETTING_802_1X_PHASE1_FAST_PROVISIONING, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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 "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.
+ **/
+ /* ---ifcfg-rh---
+ * property: phase2-auth
+ * variable: IEEE_8021X_INNER_AUTH_METHODS(+)
+ * values: "PAP", "CHAP", "MSCHAP", "MSCHAPV2", "GTC", "OTP", "MD5" and "TLS"
+ * description: Inner non-EAP authentication methods. IEEE_8021X_INNER_AUTH_METHODS
+ * can contain values both for 'phase2-auth' and 'phase2-autheap' properties.
+ * example: IEEE_8021X_INNER_AUTH_METHODS=PAP
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PHASE2_AUTH,
+ g_param_spec_string (NM_SETTING_802_1X_PHASE2_AUTH, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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 "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.
+ **/
+ /* ---ifcfg-rh---
+ * property: phase2-autheap
+ * variable: IEEE_8021X_INNER_AUTH_METHODS(+)
+ * values: "EAP-MD5", "EAP-MSCHAPV2", "EAP-GTC", "EAP-OTP" and "EAP-TLS"
+ * description: Inner EAP-based authentication methods. Note that
+ * IEEE_8021X_INNER_AUTH_METHODS is also used for 'phase2-auth' values.
+ * example: IEEE_8021X_INNER_AUTH_METHODS="MSCHAPV2 EAP-TLS"
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PHASE2_AUTHEAP,
+ g_param_spec_string (NM_SETTING_802_1X_PHASE2_AUTHEAP, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSetting8021x:phase2-ca-cert:
+ *
+ * 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.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_PHASE2_CA_CERT,
+ g_param_spec_boxed (NM_SETTING_802_1X_PHASE2_CA_CERT, "", "",
+ G_TYPE_BYTES,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSetting8021x:phase2-ca-path:
+ *
+ * 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 #NMSetting8021x:phase2-ca-cert property.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_PHASE2_CA_PATH,
+ g_param_spec_string (NM_SETTING_802_1X_PHASE2_CA_PATH, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: phase2-subject-match
+ * variable: IEEE_8021X_PHASE2_SUBJECT_MATCH(+)
+ * description: Substring to match subject of server certificate against.
+ * example: IEEE_8021X_PHASE2_SUBJECT_MATCH="Red Hat"
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PHASE2_SUBJECT_MATCH,
+ g_param_spec_string (NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: phase2-altsubject-matches
+ * variable: IEEE_8021X_PHASE2_ALTSUBJECT_MATCHES(+)
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PHASE2_ALTSUBJECT_MATCHES,
+ g_param_spec_boxed (NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES, "", "",
+ G_TYPE_STRV,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSetting8021x:phase2-client-cert:
+ *
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: phase2-client-cert
+ * variable: IEEE_8021X_INNER_CLIENT_CERT(+)
+ * description: Client certificate for inner EAP method.
+ * example: IEEE_8021X_INNER_CLIENT_CERT=/home/joe/mycert.crt
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PHASE2_CLIENT_CERT,
+ g_param_spec_boxed (NM_SETTING_802_1X_PHASE2_CLIENT_CERT, "", "",
+ G_TYPE_BYTES,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSetting8021x:password:
+ *
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: password
+ * variable: IEEE_8021X_PASSWORD(+)
+ * description: UTF-8 encoded password used for EAP. It can also go to "key-"
+ * lookaside file, or it can be owned by a secret agent.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PASSWORD,
+ g_param_spec_string (NM_SETTING_802_1X_PASSWORD, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_SECRET |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSetting8021x:password-flags:
+ *
+ * Flags indicating how to handle the #NMSetting8021x:password property.
+ **/
+ /* ---ifcfg-rh---
+ * property: password-flags
+ * variable: IEEE_8021X_PASSWORD_FLAGS(+)
+ * format: NMSettingSecretFlags
+ * description: Password flags for IEEE_8021X_PASSWORD password.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PASSWORD_FLAGS,
+ g_param_spec_flags (NM_SETTING_802_1X_PASSWORD_FLAGS, "", "",
+ NM_TYPE_SETTING_SECRET_FLAGS,
+ NM_SETTING_SECRET_FLAG_NONE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSetting8021x:password-raw:
+ *
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: password-raw
+ * variable: (none)
+ * description: The property is not handled by ifcfg-rh plugin.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PASSWORD_RAW,
+ g_param_spec_boxed (NM_SETTING_802_1X_PASSWORD_RAW, "", "",
+ G_TYPE_BYTES,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_SECRET |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSetting8021x:password-raw-flags:
+ *
+ * Flags indicating how to handle the #NMSetting8021x:password-raw property.
+ **/
+ /* ---ifcfg-rh---
+ * property: password-raw-flags
+ * variable: (none)
+ * description: The property is not handled by ifcfg-rh plugin.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PASSWORD_RAW_FLAGS,
+ g_param_spec_flags (NM_SETTING_802_1X_PASSWORD_RAW_FLAGS, "", "",
+ NM_TYPE_SETTING_SECRET_FLAGS,
+ NM_SETTING_SECRET_FLAG_NONE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSetting8021x:private-key:
+ *
+ * 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
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: private-key
+ * variable: IEEE_8021X_PRIVATE_KEY(+)
+ * description: Private key for EAP-TLS.
+ * example: IEEE_8021X_PRIVATE_KEY=/home/joe/mykey.p12
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PRIVATE_KEY,
+ g_param_spec_boxed (NM_SETTING_802_1X_PRIVATE_KEY, "", "",
+ G_TYPE_BYTES,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSetting8021x:private-key-password:
+ *
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: private-key-password
+ * variable: IEEE_8021X_PRIVATE_KEY_PASSWORD(+)
+ * description: Password for IEEE_8021X_PRIVATE_KEY. It can also go to "key-"
+ * lookaside file, or it can be owned by a secret agent.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PRIVATE_KEY_PASSWORD,
+ g_param_spec_string (NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_SECRET |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSetting8021x:private-key-password-flags:
+ *
+ * Flags indicating how to handle the #NMSetting8021x:private-key-password
+ * property.
+ **/
+ /* ---ifcfg-rh---
+ * property: private-key-password-flags
+ * variable: IEEE_8021X_PRIVATE_KEY_PASSWORD_FLAGS(+)
+ * format: NMSettingSecretFlags
+ * description: Password flags for IEEE_8021X_PRIVATE_KEY_PASSWORD password.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PRIVATE_KEY_PASSWORD_FLAGS,
+ g_param_spec_flags (NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD_FLAGS, "", "",
+ NM_TYPE_SETTING_SECRET_FLAGS,
+ NM_SETTING_SECRET_FLAG_NONE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSetting8021x:phase2-private-key:
+ *
+ * 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.
+ *
+ * Setting this property directly is discouraged; use the
+ * nm_setting_802_1x_set_phase2_private_key() function instead.
+ **/
+ /* ---ifcfg-rh---
+ * property: phase2-private-key
+ * variable: IEEE_8021X_INNER_PRIVATE_KEY(+)
+ * description: Private key for inner authentication method for EAP-TLS.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PHASE2_PRIVATE_KEY,
+ g_param_spec_boxed (NM_SETTING_802_1X_PHASE2_PRIVATE_KEY, "", "",
+ G_TYPE_BYTES,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSetting8021x:phase2-private-key-password:
+ *
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: phase2-private-key-password
+ * variable: IEEE_8021X_INNER_PRIVATE_KEY_PASSWORD(+)
+ * description: Password for IEEE_8021X_INNER_PRIVATE_KEY. It can also go to "key-"
+ * lookaside file, or it can be owned by a secret agent.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PHASE2_PRIVATE_KEY_PASSWORD,
+ g_param_spec_string (NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_SECRET |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSetting8021x:phase2-private-key-password-flags:
+ *
+ * Flags indicating how to handle the
+ * #NMSetting8021x:phase2-private-key-password property.
+ **/
+ /* ---ifcfg-rh---
+ * property: phase2-private-key-password-flags
+ * variable: IEEE_8021X_INNER_PRIVATE_KEY_PASSWORD_FLAGS(+)
+ * format: NMSettingSecretFlags
+ * description: Password flags for IEEE_8021X_INNER_PRIVATE_KEY_PASSWORD password.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PHASE2_PRIVATE_KEY_PASSWORD_FLAGS,
+ g_param_spec_flags (NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD_FLAGS, "", "",
+ NM_TYPE_SETTING_SECRET_FLAGS,
+ NM_SETTING_SECRET_FLAG_NONE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSetting8021x:pin:
+ *
+ * PIN used for EAP authentication methods.
+ **/
+ /* ---ifcfg-rh---
+ * property: pin
+ * variable: (none)
+ * description: The property is not handled by ifcfg-rh plugin.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PIN,
+ g_param_spec_string (NM_SETTING_802_1X_PIN, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_SECRET |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSetting8021x:pin-flags:
+ *
+ * Flags indicating how to handle the #NMSetting8021x:pin property.
+ **/
+ /* ---ifcfg-rh---
+ * property: pin-flags
+ * variable: (none)
+ * description: The property is not handled by ifcfg-rh plugin.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PIN_FLAGS,
+ g_param_spec_flags (NM_SETTING_802_1X_PIN_FLAGS, "", "",
+ NM_TYPE_SETTING_SECRET_FLAGS,
+ NM_SETTING_SECRET_FLAG_NONE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSetting8021x:system-ca-certs:
+ *
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: system-ca-certs
+ * variable: (none)
+ * description: The property is not handled by ifcfg-rh plugin.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_SYSTEM_CA_CERTS,
+ g_param_spec_boolean (NM_SETTING_802_1X_SYSTEM_CA_CERTS, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/libnm-core/nm-setting-8021x.h b/libnm-core/nm-setting-8021x.h
new file mode 100644
index 000000000..43885daaa
--- /dev/null
+++ b/libnm-core/nm-setting-8021x.h
@@ -0,0 +1,278 @@
+/* -*- 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 2007 - 2014 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ */
+
+#ifndef __NM_SETTING_8021X_H__
+#define __NM_SETTING_8021X_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-setting.h>
+
+G_BEGIN_DECLS
+
+/**
+ * NMSetting8021xCKFormat:
+ * @NM_SETTING_802_1X_CK_FORMAT_UNKNOWN: unknown file format
+ * @NM_SETTING_802_1X_CK_FORMAT_X509: file contains an X.509 format certificate
+ * @NM_SETTING_802_1X_CK_FORMAT_RAW_KEY: file contains an old-style OpenSSL PEM
+ * or DER private key
+ * @NM_SETTING_802_1X_CK_FORMAT_PKCS12: file contains a PKCS#<!-- -->12 certificate
+ * and private key
+ *
+ * #NMSetting8021xCKFormat values indicate the general type of a certificate
+ * or private key
+ */
+typedef enum { /*< underscore_name=nm_setting_802_1x_ck_format >*/
+ 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;
+
+/**
+ * NMSetting8021xCKScheme:
+ * @NM_SETTING_802_1X_CK_SCHEME_UNKNOWN: unknown certificate or private key
+ * scheme
+ * @NM_SETTING_802_1X_CK_SCHEME_BLOB: certificate or key is stored as the raw
+ * item data
+ * @NM_SETTING_802_1X_CK_SCHEME_PATH: certificate or key is stored as a path
+ * to a file containing the certificate or key data
+ *
+ * #NMSetting8021xCKScheme 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
+ */
+typedef enum { /*< underscore_name=nm_setting_802_1x_ck_scheme >*/
+ NM_SETTING_802_1X_CK_SCHEME_UNKNOWN = 0,
+ NM_SETTING_802_1X_CK_SCHEME_BLOB,
+ NM_SETTING_802_1X_CK_SCHEME_PATH
+} NMSetting8021xCKScheme;
+
+
+#define NM_TYPE_SETTING_802_1X (nm_setting_802_1x_get_type ())
+#define NM_SETTING_802_1X(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SETTING_802_1X, NMSetting8021x))
+#define NM_SETTING_802_1X_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SETTING_802_1X, NMSetting8021xClass))
+#define NM_IS_SETTING_802_1X(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SETTING_802_1X))
+#define NM_IS_SETTING_802_1X_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_SETTING_802_1X))
+#define NM_SETTING_802_1X_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SETTING_802_1X, NMSetting8021xClass))
+
+#define NM_SETTING_802_1X_SETTING_NAME "802-1x"
+
+#define NM_SETTING_802_1X_EAP "eap"
+#define NM_SETTING_802_1X_IDENTITY "identity"
+#define NM_SETTING_802_1X_ANONYMOUS_IDENTITY "anonymous-identity"
+#define NM_SETTING_802_1X_PAC_FILE "pac-file"
+#define NM_SETTING_802_1X_CA_CERT "ca-cert"
+#define NM_SETTING_802_1X_CA_PATH "ca-path"
+#define NM_SETTING_802_1X_SUBJECT_MATCH "subject-match"
+#define NM_SETTING_802_1X_ALTSUBJECT_MATCHES "altsubject-matches"
+#define NM_SETTING_802_1X_CLIENT_CERT "client-cert"
+#define NM_SETTING_802_1X_PHASE1_PEAPVER "phase1-peapver"
+#define NM_SETTING_802_1X_PHASE1_PEAPLABEL "phase1-peaplabel"
+#define NM_SETTING_802_1X_PHASE1_FAST_PROVISIONING "phase1-fast-provisioning"
+#define NM_SETTING_802_1X_PHASE2_AUTH "phase2-auth"
+#define NM_SETTING_802_1X_PHASE2_AUTHEAP "phase2-autheap"
+#define NM_SETTING_802_1X_PHASE2_CA_CERT "phase2-ca-cert"
+#define NM_SETTING_802_1X_PHASE2_CA_PATH "phase2-ca-path"
+#define NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH "phase2-subject-match"
+#define NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES "phase2-altsubject-matches"
+#define NM_SETTING_802_1X_PHASE2_CLIENT_CERT "phase2-client-cert"
+#define NM_SETTING_802_1X_PASSWORD "password"
+#define NM_SETTING_802_1X_PASSWORD_FLAGS "password-flags"
+#define NM_SETTING_802_1X_PASSWORD_RAW "password-raw"
+#define NM_SETTING_802_1X_PASSWORD_RAW_FLAGS "password-raw-flags"
+#define NM_SETTING_802_1X_PRIVATE_KEY "private-key"
+#define NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD "private-key-password"
+#define NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD_FLAGS "private-key-password-flags"
+#define NM_SETTING_802_1X_PHASE2_PRIVATE_KEY "phase2-private-key"
+#define NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD "phase2-private-key-password"
+#define NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD_FLAGS "phase2-private-key-password-flags"
+#define NM_SETTING_802_1X_PIN "pin"
+#define NM_SETTING_802_1X_PIN_FLAGS "pin-flags"
+#define NM_SETTING_802_1X_SYSTEM_CA_CERTS "system-ca-certs"
+
+/* PRIVATE KEY NOTE: when setting PKCS#12 private keys directly via properties
+ * using the "blob" scheme, the data must be passed in PKCS#12 binary format.
+ * In this case, the appropriate "client-cert" (or "phase2-client-cert")
+ * property of the NMSetting8021x object must also contain the exact same
+ * PKCS#12 binary data that the private key does. This is because the
+ * PKCS#12 file contains both the private key and client certificate, so both
+ * properties need to be set to the same thing. When using the "path" scheme,
+ * just set both the private-key and client-cert properties to the same path.
+ *
+ * When setting OpenSSL-derived "traditional" format (ie S/MIME style, not
+ * PKCS#8) RSA and DSA keys directly via properties with the "blob" scheme, they
+ * should be passed to NetworkManager in PEM format with the "DEK-Info" and
+ * "Proc-Type" tags intact. Decrypted private keys should not be used as this
+ * is insecure and could allow unprivileged users to access the decrypted
+ * private key data.
+ *
+ * When using the "path" scheme, just set the private-key and client-cert
+ * properties to the paths to their respective objects.
+ */
+
+struct _NMSetting8021x {
+ NMSetting parent;
+};
+
+typedef struct {
+ NMSettingClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMSetting8021xClass;
+
+GType nm_setting_802_1x_get_type (void);
+
+NMSetting *nm_setting_802_1x_new (void);
+
+guint32 nm_setting_802_1x_get_num_eap_methods (NMSetting8021x *setting);
+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);
+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);
+
+const char * nm_setting_802_1x_get_anonymous_identity (NMSetting8021x *setting);
+
+const char * nm_setting_802_1x_get_pac_file (NMSetting8021x *setting);
+
+gboolean nm_setting_802_1x_get_system_ca_certs (NMSetting8021x *setting);
+const char * nm_setting_802_1x_get_ca_path (NMSetting8021x *setting);
+const char * nm_setting_802_1x_get_phase2_ca_path (NMSetting8021x *setting);
+
+NMSetting8021xCKScheme nm_setting_802_1x_get_ca_cert_scheme (NMSetting8021x *setting);
+GBytes * nm_setting_802_1x_get_ca_cert_blob (NMSetting8021x *setting);
+const char * nm_setting_802_1x_get_ca_cert_path (NMSetting8021x *setting);
+gboolean nm_setting_802_1x_set_ca_cert (NMSetting8021x *setting,
+ const char *cert_path,
+ NMSetting8021xCKScheme scheme,
+ NMSetting8021xCKFormat *out_format,
+ GError **error);
+
+const char * nm_setting_802_1x_get_subject_match (NMSetting8021x *setting);
+
+guint32 nm_setting_802_1x_get_num_altsubject_matches (NMSetting8021x *setting);
+const char * nm_setting_802_1x_get_altsubject_match (NMSetting8021x *setting,
+ guint32 i);
+gboolean nm_setting_802_1x_add_altsubject_match (NMSetting8021x *setting,
+ const char *altsubject_match);
+void nm_setting_802_1x_remove_altsubject_match (NMSetting8021x *setting,
+ guint32 i);
+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);
+GBytes * nm_setting_802_1x_get_client_cert_blob (NMSetting8021x *setting);
+const char * nm_setting_802_1x_get_client_cert_path (NMSetting8021x *setting);
+gboolean nm_setting_802_1x_set_client_cert (NMSetting8021x *setting,
+ const char *cert_path,
+ NMSetting8021xCKScheme scheme,
+ NMSetting8021xCKFormat *out_format,
+ GError **error);
+
+const char * nm_setting_802_1x_get_phase1_peapver (NMSetting8021x *setting);
+
+const char * nm_setting_802_1x_get_phase1_peaplabel (NMSetting8021x *setting);
+
+const char * nm_setting_802_1x_get_phase1_fast_provisioning (NMSetting8021x *setting);
+
+const char * nm_setting_802_1x_get_phase2_auth (NMSetting8021x *setting);
+
+const char * nm_setting_802_1x_get_phase2_autheap (NMSetting8021x *setting);
+
+NMSetting8021xCKScheme nm_setting_802_1x_get_phase2_ca_cert_scheme (NMSetting8021x *setting);
+GBytes * nm_setting_802_1x_get_phase2_ca_cert_blob (NMSetting8021x *setting);
+const char * nm_setting_802_1x_get_phase2_ca_cert_path (NMSetting8021x *setting);
+gboolean nm_setting_802_1x_set_phase2_ca_cert (NMSetting8021x *setting,
+ const char *cert_path,
+ NMSetting8021xCKScheme scheme,
+ NMSetting8021xCKFormat *out_format,
+ GError **error);
+
+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);
+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);
+GBytes * nm_setting_802_1x_get_phase2_client_cert_blob (NMSetting8021x *setting);
+const char * nm_setting_802_1x_get_phase2_client_cert_path (NMSetting8021x *setting);
+gboolean nm_setting_802_1x_set_phase2_client_cert (NMSetting8021x *setting,
+ const char *cert_path,
+ NMSetting8021xCKScheme scheme,
+ NMSetting8021xCKFormat *out_format,
+ GError **error);
+
+const char * nm_setting_802_1x_get_password (NMSetting8021x *setting);
+NMSettingSecretFlags nm_setting_802_1x_get_password_flags (NMSetting8021x *setting);
+GBytes * nm_setting_802_1x_get_password_raw (NMSetting8021x *setting);
+NMSettingSecretFlags nm_setting_802_1x_get_password_raw_flags (NMSetting8021x *setting);
+
+const char * nm_setting_802_1x_get_pin (NMSetting8021x *setting);
+NMSettingSecretFlags nm_setting_802_1x_get_pin_flags (NMSetting8021x *setting);
+
+NMSetting8021xCKScheme nm_setting_802_1x_get_private_key_scheme (NMSetting8021x *setting);
+GBytes * nm_setting_802_1x_get_private_key_blob (NMSetting8021x *setting);
+const char * nm_setting_802_1x_get_private_key_path (NMSetting8021x *setting);
+gboolean nm_setting_802_1x_set_private_key (NMSetting8021x *setting,
+ const char *key_path,
+ const char *password,
+ NMSetting8021xCKScheme scheme,
+ NMSetting8021xCKFormat *out_format,
+ GError **error);
+const char * nm_setting_802_1x_get_private_key_password (NMSetting8021x *setting);
+NMSettingSecretFlags nm_setting_802_1x_get_private_key_password_flags (NMSetting8021x *setting);
+
+NMSetting8021xCKFormat nm_setting_802_1x_get_private_key_format (NMSetting8021x *setting);
+
+NMSetting8021xCKScheme nm_setting_802_1x_get_phase2_private_key_scheme (NMSetting8021x *setting);
+GBytes * nm_setting_802_1x_get_phase2_private_key_blob (NMSetting8021x *setting);
+const char * nm_setting_802_1x_get_phase2_private_key_path (NMSetting8021x *setting);
+gboolean nm_setting_802_1x_set_phase2_private_key (NMSetting8021x *setting,
+ const char *key_path,
+ const char *password,
+ NMSetting8021xCKScheme scheme,
+ NMSetting8021xCKFormat *out_format,
+ GError **error);
+const char * nm_setting_802_1x_get_phase2_private_key_password (NMSetting8021x *setting);
+NMSettingSecretFlags nm_setting_802_1x_get_phase2_private_key_password_flags (NMSetting8021x *setting);
+
+NMSetting8021xCKFormat nm_setting_802_1x_get_phase2_private_key_format (NMSetting8021x *setting);
+
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_8021X_H__ */
diff --git a/libnm-core/nm-setting-adsl.c b/libnm-core/nm-setting-adsl.c
new file mode 100644
index 000000000..00bcef543
--- /dev/null
+++ b/libnm-core/nm-setting-adsl.c
@@ -0,0 +1,448 @@
+/* -*- 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 2011 - 2013 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <glib/gi18n-lib.h>
+
+#include "nm-setting-adsl.h"
+#include "nm-setting-ppp.h"
+#include "nm-setting-private.h"
+#include "nm-utils.h"
+#include "nm-core-enum-types.h"
+
+/**
+ * SECTION:nm-setting-adsl
+ * @short_description: Describes ADSL-based properties
+ *
+ * The #NMSettingAdsl object is a #NMSetting subclass that describes
+ * properties of ADSL connections.
+ */
+
+G_DEFINE_TYPE_WITH_CODE (NMSettingAdsl, nm_setting_adsl, NM_TYPE_SETTING,
+ _nm_register_setting (ADSL, 1))
+NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_ADSL)
+
+#define NM_SETTING_ADSL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_ADSL, NMSettingAdslPrivate))
+
+typedef struct {
+ char * username;
+ char * password;
+ NMSettingSecretFlags password_flags;
+ char * protocol;
+ char * encapsulation;
+ guint32 vpi;
+ guint32 vci;
+} NMSettingAdslPrivate;
+
+enum {
+ PROP_0,
+ PROP_USERNAME,
+ PROP_PASSWORD,
+ PROP_PASSWORD_FLAGS,
+ PROP_PROTOCOL,
+ PROP_ENCAPSULATION,
+ PROP_VPI,
+ PROP_VCI,
+
+ LAST_PROP
+};
+
+/**
+ * nm_setting_adsl_new:
+ *
+ * Creates a new #NMSettingAdsl object with default values.
+ *
+ * Returns: the new empty #NMSettingAdsl object
+ **/
+NMSetting *
+nm_setting_adsl_new (void)
+{
+ return (NMSetting *) g_object_new (NM_TYPE_SETTING_ADSL, NULL);
+}
+
+/**
+ * nm_setting_adsl_get_username:
+ * @setting: the #NMSettingAdsl
+ *
+ * Returns: the #NMSettingAdsl:username property of the setting
+ **/
+const char *
+nm_setting_adsl_get_username (NMSettingAdsl *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_ADSL (setting), NULL);
+
+ return NM_SETTING_ADSL_GET_PRIVATE (setting)->username;
+}
+
+/**
+ * nm_setting_adsl_get_password:
+ * @setting: the #NMSettingAdsl
+ *
+ * Returns: the #NMSettingAdsl:password property of the setting
+ **/
+const char *
+nm_setting_adsl_get_password (NMSettingAdsl *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_ADSL (setting), NULL);
+
+ return NM_SETTING_ADSL_GET_PRIVATE (setting)->password;
+}
+
+/**
+ * nm_setting_adsl_get_password_flags:
+ * @setting: the #NMSettingAdsl
+ *
+ * Returns: the #NMSettingSecretFlags pertaining to the #NMSettingAdsl:password
+ **/
+NMSettingSecretFlags
+nm_setting_adsl_get_password_flags (NMSettingAdsl *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_ADSL (setting), NM_SETTING_SECRET_FLAG_NONE);
+
+ return NM_SETTING_ADSL_GET_PRIVATE (setting)->password_flags;
+}
+
+/**
+ * nm_setting_adsl_get_protocol:
+ * @setting: the #NMSettingAdsl
+ *
+ * Returns: the #NMSettingAdsl:protocol property of the setting
+ **/
+const char *
+nm_setting_adsl_get_protocol (NMSettingAdsl *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_ADSL (setting), NULL);
+
+ return NM_SETTING_ADSL_GET_PRIVATE (setting)->protocol;
+}
+
+/**
+ * nm_setting_adsl_get_encapsulation:
+ * @setting: the #NMSettingAdsl
+ *
+ * Returns: the #NMSettingAdsl:encapsulation property of the setting
+ **/
+const char *
+nm_setting_adsl_get_encapsulation (NMSettingAdsl *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_ADSL (setting), NULL);
+
+ return NM_SETTING_ADSL_GET_PRIVATE (setting)->encapsulation;
+}
+
+/**
+ * nm_setting_adsl_get_vpi:
+ * @setting: the #NMSettingAdsl
+ *
+ * Returns: the #NMSettingAdsl:vpi property of the setting
+ **/
+guint32
+nm_setting_adsl_get_vpi (NMSettingAdsl *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_ADSL (setting), 0);
+
+ return NM_SETTING_ADSL_GET_PRIVATE (setting)->vpi;
+}
+
+/**
+ * nm_setting_adsl_get_vci:
+ * @setting: the #NMSettingAdsl
+ *
+ * Returns: the #NMSettingAdsl:vci property of the setting
+ **/
+guint32
+nm_setting_adsl_get_vci (NMSettingAdsl *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_ADSL (setting), 0);
+
+ return NM_SETTING_ADSL_GET_PRIVATE (setting)->vci;
+}
+
+static gboolean
+verify (NMSetting *setting, NMConnection *connection, GError **error)
+{
+ NMSettingAdslPrivate *priv = NM_SETTING_ADSL_GET_PRIVATE (setting);
+
+ if (!priv->username) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("property is empty"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_ADSL_SETTING_NAME, NM_SETTING_ADSL_PASSWORD);
+ return FALSE;
+ }
+
+ if ( !priv->protocol
+ || ( strcmp (priv->protocol, NM_SETTING_ADSL_PROTOCOL_PPPOA)
+ && strcmp (priv->protocol, NM_SETTING_ADSL_PROTOCOL_PPPOE)
+ && strcmp (priv->protocol, NM_SETTING_ADSL_PROTOCOL_IPOATM))){
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%s' is not a valid value for the property"),
+ priv->protocol ? priv->protocol : "(null)");
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_ADSL_SETTING_NAME, NM_SETTING_ADSL_PROTOCOL);
+ return FALSE;
+ }
+
+ if ( priv->encapsulation
+ && ( strcmp (priv->encapsulation, NM_SETTING_ADSL_ENCAPSULATION_VCMUX)
+ && strcmp (priv->encapsulation, NM_SETTING_ADSL_ENCAPSULATION_LLC) )) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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;
+ }
+
+ return TRUE;
+}
+
+static GPtrArray *
+need_secrets (NMSetting *setting)
+{
+ NMSettingAdslPrivate *priv = NM_SETTING_ADSL_GET_PRIVATE (setting);
+ GPtrArray *secrets = NULL;
+
+ if (priv->password)
+ return NULL;
+
+ if (!(priv->password_flags & NM_SETTING_SECRET_FLAG_NOT_REQUIRED)) {
+ secrets = g_ptr_array_sized_new (1);
+ g_ptr_array_add (secrets, NM_SETTING_ADSL_PASSWORD);
+ }
+
+ return secrets;
+}
+
+static void
+nm_setting_adsl_init (NMSettingAdsl *setting)
+{
+}
+
+static void
+finalize (GObject *object)
+{
+ NMSettingAdslPrivate *priv = NM_SETTING_ADSL_GET_PRIVATE (object);
+
+ g_free (priv->username);
+ g_free (priv->password);
+ g_free (priv->protocol);
+ g_free (priv->encapsulation);
+
+ G_OBJECT_CLASS (nm_setting_adsl_parent_class)->finalize (object);
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ NMSettingAdslPrivate *priv = NM_SETTING_ADSL_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_USERNAME:
+ g_free (priv->username);
+ priv->username = g_value_dup_string (value);
+ break;
+ case PROP_PASSWORD:
+ g_free (priv->password);
+ priv->password = g_value_dup_string (value);
+ break;
+ case PROP_PASSWORD_FLAGS:
+ priv->password_flags = g_value_get_flags (value);
+ break;
+ case PROP_PROTOCOL:
+ g_free (priv->protocol);
+ priv->protocol = g_ascii_strdown (g_value_get_string (value), -1);
+ break;
+ case PROP_ENCAPSULATION:
+ g_free (priv->encapsulation);
+ priv->encapsulation = g_ascii_strdown (g_value_get_string (value), -1);
+ break;
+ case PROP_VPI:
+ priv->vpi = g_value_get_uint (value);
+ break;
+ case PROP_VCI:
+ priv->vci = g_value_get_uint (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)
+{
+ NMSettingAdsl *setting = NM_SETTING_ADSL (object);
+
+ switch (prop_id) {
+ case PROP_USERNAME:
+ g_value_set_string (value, nm_setting_adsl_get_username (setting));
+ break;
+ case PROP_PASSWORD:
+ g_value_set_string (value, nm_setting_adsl_get_password (setting));
+ break;
+ case PROP_PASSWORD_FLAGS:
+ g_value_set_flags (value, nm_setting_adsl_get_password_flags (setting));
+ break;
+ case PROP_PROTOCOL:
+ g_value_set_string (value, nm_setting_adsl_get_protocol (setting));
+ break;
+ case PROP_ENCAPSULATION:
+ g_value_set_string (value, nm_setting_adsl_get_encapsulation (setting));
+ break;
+ case PROP_VPI:
+ g_value_set_uint (value, nm_setting_adsl_get_vpi (setting));
+ break;
+ case PROP_VCI:
+ g_value_set_uint (value, nm_setting_adsl_get_vci (setting));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_setting_adsl_class_init (NMSettingAdslClass *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 (NMSettingAdslPrivate));
+
+ /* virtual methods */
+ object_class->set_property = set_property;
+ object_class->get_property = get_property;
+ object_class->finalize = finalize;
+ parent_class->verify = verify;
+ parent_class->need_secrets = need_secrets;
+
+ /* Properties */
+
+ /**
+ * NMSettingAdsl:username:
+ *
+ * Username used to authenticate with the ADSL service.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_USERNAME,
+ g_param_spec_string (NM_SETTING_ADSL_USERNAME, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingAdsl:password:
+ *
+ * Password used to authenticate with the ADSL service.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_PASSWORD,
+ g_param_spec_string (NM_SETTING_ADSL_PASSWORD, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_SECRET |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingAdsl:password-flags:
+ *
+ * Flags indicating how to handle the #NMSettingAdsl:password property.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_PASSWORD_FLAGS,
+ g_param_spec_flags (NM_SETTING_ADSL_PASSWORD_FLAGS, "", "",
+ NM_TYPE_SETTING_SECRET_FLAGS,
+ NM_SETTING_SECRET_FLAG_NONE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingAdsl:protocol:
+ *
+ * ADSL connection protocol. Can be "pppoa", "pppoe" or "ipoatm".
+ **/
+ g_object_class_install_property
+ (object_class, PROP_PROTOCOL,
+ g_param_spec_string (NM_SETTING_ADSL_PROTOCOL, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingAdsl:encapsulation:
+ *
+ * Encapsulation of ADSL connection. Can be "vcmux" or "llc".
+ **/
+ g_object_class_install_property
+ (object_class, PROP_ENCAPSULATION,
+ g_param_spec_string (NM_SETTING_ADSL_ENCAPSULATION, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingAdsl:vpi:
+ *
+ * VPI of ADSL connection
+ **/
+ g_object_class_install_property
+ (object_class, PROP_VPI,
+ g_param_spec_uint (NM_SETTING_ADSL_VPI, "", "",
+ 0, 65536, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingAdsl:vci:
+ *
+ * VCI of ADSL connection
+ **/
+ g_object_class_install_property
+ (object_class, PROP_VCI,
+ g_param_spec_uint (NM_SETTING_ADSL_VCI, "", "",
+ 0, 65536, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/libnm-core/nm-setting-adsl.h b/libnm-core/nm-setting-adsl.h
new file mode 100644
index 000000000..2b44d6868
--- /dev/null
+++ b/libnm-core/nm-setting-adsl.h
@@ -0,0 +1,81 @@
+/* -*- 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 2007 - 2008 Red Hat, Inc.
+ */
+
+#ifndef __NM_SETTING_ADSL_H__
+#define __NM_SETTING_ADSL_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-setting.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_ADSL (nm_setting_adsl_get_type ())
+#define NM_SETTING_ADSL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SETTING_ADSL, NMSettingAdsl))
+#define NM_SETTING_ADSL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SETTING_ADSL, NMSettingAdslClass))
+#define NM_IS_SETTING_ADSL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SETTING_ADSL))
+#define NM_IS_SETTING_ADSL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_SETTING_ADSL))
+#define NM_SETTING_ADSL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SETTING_ADSL, NMSettingAdslClass))
+
+#define NM_SETTING_ADSL_SETTING_NAME "adsl"
+
+#define NM_SETTING_ADSL_USERNAME "username"
+#define NM_SETTING_ADSL_PASSWORD "password"
+#define NM_SETTING_ADSL_PASSWORD_FLAGS "password-flags"
+#define NM_SETTING_ADSL_PROTOCOL "protocol"
+#define NM_SETTING_ADSL_ENCAPSULATION "encapsulation"
+#define NM_SETTING_ADSL_VPI "vpi"
+#define NM_SETTING_ADSL_VCI "vci"
+
+#define NM_SETTING_ADSL_PROTOCOL_PPPOA "pppoa"
+#define NM_SETTING_ADSL_PROTOCOL_PPPOE "pppoe"
+#define NM_SETTING_ADSL_PROTOCOL_IPOATM "ipoatm"
+
+#define NM_SETTING_ADSL_ENCAPSULATION_VCMUX "vcmux"
+#define NM_SETTING_ADSL_ENCAPSULATION_LLC "llc"
+
+struct _NMSettingAdsl {
+ NMSetting parent;
+};
+
+typedef struct {
+ NMSettingClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMSettingAdslClass;
+
+GType nm_setting_adsl_get_type (void);
+
+NMSetting *nm_setting_adsl_new (void);
+const char *nm_setting_adsl_get_username (NMSettingAdsl *setting);
+const char *nm_setting_adsl_get_password (NMSettingAdsl *setting);
+const char *nm_setting_adsl_get_protocol (NMSettingAdsl *setting);
+const char *nm_setting_adsl_get_encapsulation (NMSettingAdsl *setting);
+guint32 nm_setting_adsl_get_vpi (NMSettingAdsl *setting);
+guint32 nm_setting_adsl_get_vci (NMSettingAdsl *setting);
+NMSettingSecretFlags nm_setting_adsl_get_password_flags (NMSettingAdsl *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_ADSL_H__ */
diff --git a/libnm-core/nm-setting-bluetooth.c b/libnm-core/nm-setting-bluetooth.c
new file mode 100644
index 000000000..41a0b4c2f
--- /dev/null
+++ b/libnm-core/nm-setting-bluetooth.c
@@ -0,0 +1,285 @@
+/* -*- 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 2007 - 2013 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <net/ethernet.h>
+#include <glib/gi18n-lib.h>
+
+#include "nm-setting-bluetooth.h"
+#include "nm-setting-cdma.h"
+#include "nm-setting-gsm.h"
+#include "nm-setting-private.h"
+#include "nm-utils.h"
+#include "nm-utils-private.h"
+
+/**
+ * SECTION:nm-setting-bluetooth
+ * @short_description: Describes Bluetooth connection properties
+ *
+ * The #NMSettingBluetooth object is a #NMSetting 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.
+ **/
+
+G_DEFINE_TYPE_WITH_CODE (NMSettingBluetooth, nm_setting_bluetooth, NM_TYPE_SETTING,
+ _nm_register_setting (BLUETOOTH, 1))
+NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_BLUETOOTH)
+
+#define NM_SETTING_BLUETOOTH_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_BLUETOOTH, NMSettingBluetoothPrivate))
+
+typedef struct {
+ char *bdaddr;
+ char *type;
+} NMSettingBluetoothPrivate;
+
+enum {
+ PROP_0,
+ PROP_BDADDR,
+ PROP_TYPE,
+
+ LAST_PROP
+};
+
+/**
+ * nm_setting_bluetooth_new:
+ *
+ * Creates a new #NMSettingBluetooth object with default values.
+ *
+ * Returns: (transfer full): the new empty #NMSettingBluetooth object
+ **/
+NMSetting *nm_setting_bluetooth_new (void)
+{
+ return (NMSetting *) g_object_new (NM_TYPE_SETTING_BLUETOOTH, NULL);
+}
+
+/**
+ * nm_setting_bluetooth_get_connection_type:
+ * @setting: the #NMSettingBluetooth
+ *
+ * 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).
+ *
+ * Returns: the type, either %NM_SETTING_BLUETOOTH_TYPE_PANU or
+ * %NM_SETTING_BLUETOOTH_TYPE_DUN
+ **/
+const char *
+nm_setting_bluetooth_get_connection_type (NMSettingBluetooth *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_BLUETOOTH (setting), NULL);
+
+ return NM_SETTING_BLUETOOTH_GET_PRIVATE (setting)->type;
+}
+
+/**
+ * nm_setting_bluetooth_get_bdaddr:
+ * @setting: the #NMSettingBluetooth
+ *
+ * Gets the Bluetooth address of the remote device which this setting
+ * describes a connection to.
+ *
+ * Returns: the Bluetooth address
+ **/
+const char *
+nm_setting_bluetooth_get_bdaddr (NMSettingBluetooth *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_BLUETOOTH (setting), NULL);
+
+ return NM_SETTING_BLUETOOTH_GET_PRIVATE (setting)->bdaddr;
+}
+
+static gboolean
+verify (NMSetting *setting, NMConnection *connection, GError **error)
+{
+ NMSettingBluetoothPrivate *priv = NM_SETTING_BLUETOOTH_GET_PRIVATE (setting);
+
+ if (!priv->bdaddr) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_MISSING_PROPERTY,
+ _("property is missing"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_BLUETOOTH_SETTING_NAME, NM_SETTING_BLUETOOTH_BDADDR);
+ return FALSE;
+ }
+
+ if (!nm_utils_hwaddr_valid (priv->bdaddr, ETH_ALEN)) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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;
+ }
+
+ /* Make sure the corresponding 'type' setting is present */
+ if ( connection
+ && !strcmp (priv->type, NM_SETTING_BLUETOOTH_TYPE_DUN)) {
+ gboolean gsm = FALSE, cdma = FALSE;
+
+ gsm = !!nm_connection_get_setting_gsm (connection);
+ cdma = !!nm_connection_get_setting_cdma (connection);
+
+ if (!gsm && !cdma) {
+ /* We can't return MISSING_SETTING here, because we don't know
+ * whether to prefix the message with NM_SETTING_GSM_SETTING_NAME or
+ * NM_SETTING_CDMA_SETTING_NAME.
+ */
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_SETTING,
+ _("'%s' connection requires '%s' or '%s' setting"),
+ NM_SETTING_BLUETOOTH_TYPE_DUN,
+ NM_SETTING_GSM_SETTING_NAME, NM_SETTING_CDMA_SETTING_NAME);
+ g_prefix_error (error, "%s: ", NM_SETTING_BLUETOOTH_SETTING_NAME);
+ return FALSE;
+ }
+ }
+ /* PANU doesn't need a 'type' setting since no further configuration
+ * is required at the interface level.
+ */
+
+ return TRUE;
+}
+
+static void
+nm_setting_bluetooth_init (NMSettingBluetooth *setting)
+{
+}
+
+static void
+finalize (GObject *object)
+{
+ NMSettingBluetoothPrivate *priv = NM_SETTING_BLUETOOTH_GET_PRIVATE (object);
+
+ g_free (priv->bdaddr);
+ g_free (priv->type);
+
+ G_OBJECT_CLASS (nm_setting_bluetooth_parent_class)->finalize (object);
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ NMSettingBluetoothPrivate *priv = NM_SETTING_BLUETOOTH_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_BDADDR:
+ g_free (priv->bdaddr);
+ priv->bdaddr = g_value_dup_string (value);
+ break;
+ case PROP_TYPE:
+ g_free (priv->type);
+ priv->type = 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)
+{
+ NMSettingBluetooth *setting = NM_SETTING_BLUETOOTH (object);
+
+ switch (prop_id) {
+ case PROP_BDADDR:
+ g_value_set_string (value, nm_setting_bluetooth_get_bdaddr (setting));
+ break;
+ case PROP_TYPE:
+ g_value_set_string (value, nm_setting_bluetooth_get_connection_type (setting));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_setting_bluetooth_class_init (NMSettingBluetoothClass *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 (NMSettingBluetoothPrivate));
+
+ /* virtual methods */
+ object_class->set_property = set_property;
+ object_class->get_property = get_property;
+ object_class->finalize = finalize;
+ parent_class->verify = verify;
+
+ /* Properties */
+
+ /**
+ * NMSettingBluetooth:bdaddr:
+ *
+ * The Bluetooth address of the device.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_BDADDR,
+ g_param_spec_string (NM_SETTING_BLUETOOTH_BDADDR, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+ _nm_setting_class_transform_property (parent_class, NM_SETTING_BLUETOOTH_BDADDR,
+ G_VARIANT_TYPE_BYTESTRING,
+ _nm_utils_hwaddr_to_dbus,
+ _nm_utils_hwaddr_from_dbus);
+
+ /**
+ * NMSettingBluetooth:type:
+ *
+ * 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
+ (object_class, PROP_TYPE,
+ g_param_spec_string (NM_SETTING_BLUETOOTH_TYPE, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/libnm-core/nm-setting-bluetooth.h b/libnm-core/nm-setting-bluetooth.h
new file mode 100644
index 000000000..6bb5ce80a
--- /dev/null
+++ b/libnm-core/nm-setting-bluetooth.h
@@ -0,0 +1,81 @@
+/* -*- 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 2007 - 2009 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ */
+
+#ifndef __NM_SETTING_BLUETOOTH_H__
+#define __NM_SETTING_BLUETOOTH_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_BLUETOOTH (nm_setting_bluetooth_get_type ())
+#define NM_SETTING_BLUETOOTH(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SETTING_BLUETOOTH, NMSettingBluetooth))
+#define NM_SETTING_BLUETOOTH_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SETTING_BLUETOOTH, NMSettingBluetoothClass))
+#define NM_IS_SETTING_BLUETOOTH(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SETTING_BLUETOOTH))
+#define NM_IS_SETTING_BLUETOOTH_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_SETTING_BLUETOOTH))
+#define NM_SETTING_BLUETOOTH_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SETTING_BLUETOOTH, NMSettingBluetoothClass))
+
+#define NM_SETTING_BLUETOOTH_SETTING_NAME "bluetooth"
+
+#define NM_SETTING_BLUETOOTH_BDADDR "bdaddr"
+#define NM_SETTING_BLUETOOTH_TYPE "type"
+
+/**
+ * NM_SETTING_BLUETOOTH_TYPE_DUN:
+ *
+ * Connection type describing a connection to devices that support the Bluetooth
+ * DUN profile.
+ */
+#define NM_SETTING_BLUETOOTH_TYPE_DUN "dun"
+
+/**
+ * NM_SETTING_BLUETOOTH_TYPE_PANU:
+ *
+ * Connection type describing a connection to devices that support the Bluetooth
+ * NAP (Network Access Point) protocol, which accepts connections via PANU.
+ */
+#define NM_SETTING_BLUETOOTH_TYPE_PANU "panu"
+
+struct _NMSettingBluetooth {
+ NMSetting parent;
+};
+
+typedef struct {
+ NMSettingClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMSettingBluetoothClass;
+
+GType nm_setting_bluetooth_get_type (void);
+
+NMSetting * nm_setting_bluetooth_new (void);
+const char * nm_setting_bluetooth_get_bdaddr (NMSettingBluetooth *setting);
+const char * nm_setting_bluetooth_get_connection_type (NMSettingBluetooth *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_BLUETOOTH_H__ */
diff --git a/libnm-core/nm-setting-bond.c b/libnm-core/nm-setting-bond.c
new file mode 100644
index 000000000..bb0531253
--- /dev/null
+++ b/libnm-core/nm-setting-bond.c
@@ -0,0 +1,760 @@
+/* -*- 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 2011 - 2013 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <glib/gi18n-lib.h>
+
+#include "nm-setting-bond.h"
+#include "nm-utils.h"
+#include "nm-utils-private.h"
+#include "nm-connection-private.h"
+#include "nm-setting-infiniband.h"
+
+/**
+ * SECTION:nm-setting-bond
+ * @short_description: Describes connection properties for bonds
+ *
+ * The #NMSettingBond object is a #NMSetting subclass that describes properties
+ * necessary for bond connections.
+ **/
+
+G_DEFINE_TYPE_WITH_CODE (NMSettingBond, nm_setting_bond, NM_TYPE_SETTING,
+ _nm_register_setting (BOND, 1))
+NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_BOND)
+
+#define NM_SETTING_BOND_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_BOND, NMSettingBondPrivate))
+
+typedef struct {
+ GHashTable *options;
+} NMSettingBondPrivate;
+
+enum {
+ PROP_0,
+ PROP_OPTIONS,
+ 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", 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 },
+ { NM_SETTING_BOND_OPTION_LACP_RATE, "0", TYPE_BOTH, 0, 1,
+ { "slow", "fast", NULL } },
+};
+
+/**
+ * nm_setting_bond_new:
+ *
+ * Creates a new #NMSettingBond object with default values.
+ *
+ * Returns: (transfer full): the new empty #NMSettingBond object
+ **/
+NMSetting *
+nm_setting_bond_new (void)
+{
+ return (NMSetting *) g_object_new (NM_TYPE_SETTING_BOND, NULL);
+}
+
+/**
+ * nm_setting_bond_get_num_options:
+ * @setting: the #NMSettingBond
+ *
+ * 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 nm_setting_bond_get_option().
+ *
+ * Returns: the number of bonding options
+ **/
+guint32
+nm_setting_bond_get_num_options (NMSettingBond *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_BOND (setting), 0);
+
+ return g_hash_table_size (NM_SETTING_BOND_GET_PRIVATE (setting)->options);
+}
+
+/**
+ * nm_setting_bond_get_option:
+ * @setting: the #NMSettingBond
+ * @idx: index of the desired option, from 0 to
+ * nm_setting_bond_get_num_options() - 1
+ * @out_name: (out) (transfer none): on return, the name of the bonding option;
+ * this value is owned by the setting and should not be modified
+ * @out_value: (out) (transfer none): on return, the value of the name of the
+ * bonding option; this value is owned by the setting and should not be
+ * modified
+ *
+ * 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
+ * nm_setting_bond_add_option() and nm_setting_bond_remove_option(),
+ * and should not be used to refer to options except for short periods of time
+ * such as during option iteration.
+ *
+ * Returns: %TRUE on success if the index was valid and an option was found,
+ * %FALSE if the index was invalid (ie, greater than the number of options
+ * currently held by the setting)
+ **/
+gboolean
+nm_setting_bond_get_option (NMSettingBond *setting,
+ guint32 idx,
+ const char **out_name,
+ const char **out_value)
+{
+ NMSettingBondPrivate *priv;
+ GList *keys;
+ const char *_key = NULL, *_value = NULL;
+
+ g_return_val_if_fail (NM_IS_SETTING_BOND (setting), FALSE);
+
+ priv = NM_SETTING_BOND_GET_PRIVATE (setting);
+
+ if (idx >= nm_setting_bond_get_num_options (setting))
+ return FALSE;
+
+ keys = g_hash_table_get_keys (priv->options);
+ _key = g_list_nth_data (keys, idx);
+ _value = g_hash_table_lookup (priv->options, _key);
+
+ if (out_name)
+ *out_name = _key;
+ if (out_value)
+ *out_value = _value;
+
+ g_list_free (keys);
+ return TRUE;
+}
+
+static gboolean
+validate_int (const char *name, const char *value, const BondDefault *def)
+{
+ glong num;
+ guint i;
+
+ for (i = 0; i < strlen (value); i++) {
+ if (!g_ascii_isdigit (value[i]) && value[i] != '-')
+ return FALSE;
+ }
+
+ 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.
+ **/
+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;
+}
+
+/**
+ * nm_setting_bond_get_option_by_name:
+ * @setting: the #NMSettingBond
+ * @name: the option name for which to retrieve the value
+ *
+ * Returns the value associated with the bonding option specified by
+ * @name, if it exists.
+ *
+ * Returns: the value, or %NULL if the key/value pair was never added to the
+ * setting; the value is owned by the setting and must not be modified
+ **/
+const char *
+nm_setting_bond_get_option_by_name (NMSettingBond *setting,
+ const char *name)
+{
+ g_return_val_if_fail (NM_IS_SETTING_BOND (setting), NULL);
+
+ if (!nm_setting_bond_validate_option (name, NULL))
+ return NULL;
+
+ return g_hash_table_lookup (NM_SETTING_BOND_GET_PRIVATE (setting)->options, name);
+}
+
+/**
+ * nm_setting_bond_add_option:
+ * @setting: the #NMSettingBond
+ * @name: name for the option
+ * @value: value for the option
+ *
+ * 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.
+ *
+ * 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)
+{
+ NMSettingBondPrivate *priv;
+
+ g_return_val_if_fail (NM_IS_SETTING_BOND (setting), FALSE);
+
+ if (!value || !nm_setting_bond_validate_option (name, value))
+ return FALSE;
+
+ priv = NM_SETTING_BOND_GET_PRIVATE (setting);
+
+ g_hash_table_insert (priv->options, g_strdup (name), g_strdup (value));
+
+ if ( !strcmp (name, NM_SETTING_BOND_OPTION_MIIMON)
+ && strcmp (value, "0") != 0) {
+ g_hash_table_remove (priv->options, NM_SETTING_BOND_OPTION_ARP_INTERVAL);
+ g_hash_table_remove (priv->options, NM_SETTING_BOND_OPTION_ARP_IP_TARGET);
+ } else if ( !strcmp (name, NM_SETTING_BOND_OPTION_ARP_INTERVAL)
+ && strcmp (value, "0") != 0) {
+ g_hash_table_remove (priv->options, NM_SETTING_BOND_OPTION_MIIMON);
+ g_hash_table_remove (priv->options, NM_SETTING_BOND_OPTION_DOWNDELAY);
+ g_hash_table_remove (priv->options, NM_SETTING_BOND_OPTION_UPDELAY);
+ }
+
+ g_object_notify (G_OBJECT (setting), NM_SETTING_BOND_OPTIONS);
+
+ return TRUE;
+}
+
+/**
+ * nm_setting_bond_remove_option:
+ * @setting: the #NMSettingBond
+ * @name: name of the option to remove
+ *
+ * Remove the bonding option referenced by @name from the internal option
+ * list.
+ *
+ * Returns: %TRUE if the option was found and removed from the internal option
+ * list, %FALSE if it was not.
+ **/
+gboolean
+nm_setting_bond_remove_option (NMSettingBond *setting,
+ const char *name)
+{
+ gboolean found;
+
+ g_return_val_if_fail (NM_IS_SETTING_BOND (setting), FALSE);
+
+ 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;
+}
+
+/**
+ * nm_setting_bond_get_valid_options:
+ * @setting: the #NMSettingBond
+ *
+ * Returns a list of valid bond options.
+ *
+ * Returns: (transfer none): a %NULL-terminated array of strings of valid bond options.
+ **/
+const char **
+nm_setting_bond_get_valid_options (NMSettingBond *setting)
+{
+ static const char *array[G_N_ELEMENTS (defaults) + 1] = { NULL };
+ int i;
+
+ /* initialize the array once */
+ if (G_UNLIKELY (array[0] == NULL)) {
+ for (i = 0; i < G_N_ELEMENTS (defaults); i++)
+ array[i] = defaults[i].opt;
+ array[i] = NULL;
+ }
+ return array;
+}
+
+/**
+ * nm_setting_bond_get_option_default:
+ * @setting: the #NMSettingBond
+ * @name: the name of the option
+ *
+ * Returns: the value of the bond option if not overridden by an entry in
+ * the #NMSettingBond:options property.
+ **/
+const char *
+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 (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 nm_setting_bond_validate_option() should also be found in defaults */
+ g_assert_not_reached ();
+}
+
+static gboolean
+verify (NMSetting *setting, NMConnection *connection, GError **error)
+{
+ NMSettingBondPrivate *priv = NM_SETTING_BOND_GET_PRIVATE (setting);
+ GHashTableIter iter;
+ const char *key, *value;
+ const char *valid_modes[] = { "balance-rr",
+ "active-backup",
+ "balance-xor",
+ "broadcast",
+ "802.3ad",
+ "balance-tlb",
+ "balance-alb",
+ NULL };
+ int miimon = 0, arp_interval = 0;
+ const char *arp_ip_target = NULL;
+ const char *lacp_rate;
+ const char *primary;
+
+ g_hash_table_iter_init (&iter, priv->options);
+ while (g_hash_table_iter_next (&iter, (gpointer) &key, (gpointer) &value)) {
+ if (!value[0] || !nm_setting_bond_validate_option (key, value)) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("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;
+ }
+ }
+
+ value = g_hash_table_lookup (priv->options, NM_SETTING_BOND_OPTION_MIIMON);
+ if (value)
+ miimon = atoi (value);
+ value = g_hash_table_lookup (priv->options, NM_SETTING_BOND_OPTION_ARP_INTERVAL);
+ if (value)
+ arp_interval = atoi (value);
+
+ /* Can only set one of miimon and arp_interval */
+ if (miimon > 0 && arp_interval > 0) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("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);
+ if (!value) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("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_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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;
+ }
+
+ /* Make sure mode is compatible with other settings */
+ if ( strcmp (value, "balance-alb") == 0
+ || strcmp (value, "balance-tlb") == 0) {
+ if (arp_interval > 0) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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;
+ }
+ }
+
+ 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_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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_connection_get_setting_infiniband (connection)) {
+ if (strcmp (value, "active-backup") != 0) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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;
+ }
+ }
+
+ if (miimon == 0) {
+ /* updelay and downdelay can only be used with miimon */
+ if (g_hash_table_lookup (priv->options, NM_SETTING_BOND_OPTION_UPDELAY)) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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;
+ }
+ }
+
+ /* arp_ip_target can only be used with arp_interval, and must
+ * contain a comma-separated list of IPv4 addresses.
+ */
+ arp_ip_target = g_hash_table_lookup (priv->options, NM_SETTING_BOND_OPTION_ARP_IP_TARGET);
+ if (arp_interval > 0) {
+ char **addrs;
+ guint32 addr;
+ int i;
+
+ if (!arp_ip_target) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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;
+ }
+ }
+ g_strfreev (addrs);
+ } else {
+ if (arp_ip_target) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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;
+ }
+ }
+
+ lacp_rate = g_hash_table_lookup (priv->options, NM_SETTING_BOND_OPTION_LACP_RATE);
+ if ( lacp_rate
+ && (g_strcmp0 (value, "802.3ad") != 0 && g_strcmp0 (value, "4") != 0)
+ && (strcmp (lacp_rate, "slow") != 0 && strcmp (lacp_rate, "0") != 0)) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%s' option is only valid with mode '%s'"),
+ NM_SETTING_BOND_OPTION_LACP_RATE, "802.3ad");
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_BOND_SETTING_NAME, NM_SETTING_BOND_OPTIONS);
+ return FALSE;
+ }
+
+ return _nm_connection_verify_required_interface_name (connection, error);
+}
+
+static void
+nm_setting_bond_init (NMSettingBond *setting)
+{
+ NMSettingBondPrivate *priv = NM_SETTING_BOND_GET_PRIVATE (setting);
+
+ 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");
+}
+
+static void
+finalize (GObject *object)
+{
+ NMSettingBondPrivate *priv = NM_SETTING_BOND_GET_PRIVATE (object);
+
+ g_hash_table_destroy (priv->options);
+
+ G_OBJECT_CLASS (nm_setting_bond_parent_class)->finalize (object);
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ NMSettingBondPrivate *priv = NM_SETTING_BOND_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_OPTIONS:
+ g_hash_table_unref (priv->options);
+ priv->options = _nm_utils_copy_strdict (g_value_get_boxed (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)
+{
+ NMSettingBondPrivate *priv = NM_SETTING_BOND_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_OPTIONS:
+ g_value_take_boxed (value, _nm_utils_copy_strdict (priv->options));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_setting_bond_class_init (NMSettingBondClass *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 (NMSettingBondPrivate));
+
+ /* virtual methods */
+ object_class->set_property = set_property;
+ object_class->get_property = get_property;
+ object_class->finalize = finalize;
+ parent_class->verify = verify;
+
+ /* Properties */
+ /**
+ * 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]).
+ *
+ * Type: GHashTable(utf8,utf8)
+ **/
+ /* ---ifcfg-rh---
+ * property: options
+ * variable: BONDING_OPTS
+ * description: Bonding options.
+ * example: BONDING_OPTS="miimon=100 mode=broadcast"
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_OPTIONS,
+ g_param_spec_boxed (NM_SETTING_BOND_OPTIONS, "", "",
+ G_TYPE_HASH_TABLE,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+ _nm_setting_class_transform_property (parent_class, NM_SETTING_BOND_OPTIONS,
+ G_VARIANT_TYPE ("a{ss}"),
+ _nm_utils_strdict_to_dbus,
+ _nm_utils_strdict_from_dbus);
+
+ /* ---dbus---
+ * property: interface-name
+ * format: string
+ * description: Deprecated in favor of connection.interface-name, but can
+ * be used for backward-compatibility with older daemons, to set the
+ * bond's interface name.
+ * ---end---
+ */
+ _nm_setting_class_add_dbus_only_property (parent_class, "interface-name",
+ G_VARIANT_TYPE_STRING,
+ _nm_setting_get_deprecated_virtual_interface_name,
+ NULL);
+}
diff --git a/libnm-core/nm-setting-bond.h b/libnm-core/nm-setting-bond.h
new file mode 100644
index 000000000..055801a59
--- /dev/null
+++ b/libnm-core/nm-setting-bond.h
@@ -0,0 +1,98 @@
+/* -*- 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 2011 - 2013 Red Hat, Inc.
+ */
+
+#ifndef __NM_SETTING_BOND_H__
+#define __NM_SETTING_BOND_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-setting.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_BOND (nm_setting_bond_get_type ())
+#define NM_SETTING_BOND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SETTING_BOND, NMSettingBond))
+#define NM_SETTING_BOND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SETTING_BOND, NMSettingBondClass))
+#define NM_IS_SETTING_BOND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SETTING_BOND))
+#define NM_IS_SETTING_BOND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_SETTING_BOND))
+#define NM_SETTING_BOND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SETTING_BOND, NMSettingBondClass))
+
+#define NM_SETTING_BOND_SETTING_NAME "bond"
+
+#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_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"
+#define NM_SETTING_BOND_OPTION_LACP_RATE "lacp_rate"
+
+struct _NMSettingBond {
+ NMSetting parent;
+};
+
+typedef struct {
+ NMSettingClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMSettingBondClass;
+
+GType nm_setting_bond_get_type (void);
+
+NMSetting * nm_setting_bond_new (void);
+guint32 nm_setting_bond_get_num_options (NMSettingBond *setting);
+gboolean nm_setting_bond_get_option (NMSettingBond *setting,
+ guint32 idx,
+ const char **out_name,
+ const char **out_value);
+const char * nm_setting_bond_get_option_by_name (NMSettingBond *setting,
+ const char *name);
+gboolean nm_setting_bond_add_option (NMSettingBond *setting,
+ const char *name,
+ const char *value);
+gboolean nm_setting_bond_remove_option (NMSettingBond *setting,
+ const char *name);
+
+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,
+ const char *name);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_BOND_H__ */
diff --git a/libnm-core/nm-setting-bridge-port.c b/libnm-core/nm-setting-bridge-port.c
new file mode 100644
index 000000000..763af37bc
--- /dev/null
+++ b/libnm-core/nm-setting-bridge-port.c
@@ -0,0 +1,321 @@
+/* -*- 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 2012 - 2013 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <ctype.h>
+#include <stdlib.h>
+#include <glib/gi18n-lib.h>
+
+#include "nm-setting-bridge-port.h"
+#include "nm-utils.h"
+#include "nm-utils-private.h"
+#include "nm-connection-private.h"
+#include "nm-setting-connection.h"
+#include "nm-setting-bridge.h"
+
+/**
+ * SECTION:nm-setting-bridge-port
+ * @short_description: Describes connection properties for bridge ports
+ *
+ * The #NMSettingBridgePort object is a #NMSetting subclass that describes
+ * optional properties that apply to bridge ports.
+ **/
+
+G_DEFINE_TYPE_WITH_CODE (NMSettingBridgePort, nm_setting_bridge_port, NM_TYPE_SETTING,
+ _nm_register_setting (BRIDGE_PORT, 3))
+NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_BRIDGE_PORT)
+
+#define NM_SETTING_BRIDGE_PORT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_BRIDGE_PORT, NMSettingBridgePortPrivate))
+
+typedef struct {
+ guint16 priority;
+ guint16 path_cost;
+ gboolean hairpin_mode;
+} NMSettingBridgePortPrivate;
+
+enum {
+ PROP_0,
+ PROP_PRIORITY,
+ PROP_PATH_COST,
+ PROP_HAIRPIN_MODE,
+ LAST_PROP
+};
+
+/**************************************************************************/
+
+/**
+ * nm_setting_bridge_port_get_priority:
+ * @setting: the #NMSettingBridgePort
+ *
+ * Returns: the #NMSettingBridgePort:priority property of the setting
+ **/
+guint16
+nm_setting_bridge_port_get_priority (NMSettingBridgePort *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_BRIDGE_PORT (setting), 0);
+
+ return NM_SETTING_BRIDGE_PORT_GET_PRIVATE (setting)->priority;
+}
+
+/**
+ * nm_setting_bridge_port_get_path_cost:
+ * @setting: the #NMSettingBridgePort
+ *
+ * Returns: the #NMSettingBridgePort:path-cost property of the setting
+ **/
+guint16
+nm_setting_bridge_port_get_path_cost (NMSettingBridgePort *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_BRIDGE_PORT (setting), 0);
+
+ return NM_SETTING_BRIDGE_PORT_GET_PRIVATE (setting)->path_cost;
+}
+
+/**
+ * nm_setting_bridge_port_get_hairpin_mode:
+ * @setting: the #NMSettingBridgePort
+ *
+ * Returns: the #NMSettingBridgePort:hairpin-mode property of the setting
+ **/
+gboolean
+nm_setting_bridge_port_get_hairpin_mode (NMSettingBridgePort *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_BRIDGE_PORT (setting), FALSE);
+
+ return NM_SETTING_BRIDGE_PORT_GET_PRIVATE (setting)->hairpin_mode;
+}
+
+/**************************************************************************/
+
+#define BR_MAX_PORT_PRIORITY 63
+#define BR_DEF_PRIORITY 32
+
+#define BR_MIN_PATH_COST 1
+#define BR_MAX_PATH_COST 65535
+
+static gboolean
+verify (NMSetting *setting, NMConnection *connection, GError **error)
+{
+ NMSettingBridgePortPrivate *priv = NM_SETTING_BRIDGE_PORT_GET_PRIVATE (setting);
+
+ if (priv->priority > BR_MAX_PORT_PRIORITY) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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;
+ }
+
+ if (priv->path_cost > BR_MAX_PATH_COST) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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;
+ }
+
+
+ if (connection) {
+ NMSettingConnection *s_con;
+ const char *slave_type;
+
+ s_con = nm_connection_get_setting_connection (connection);
+ if (!s_con) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_MISSING_SETTING,
+ _("missing setting"));
+ g_prefix_error (error, "%s: ", NM_SETTING_CONNECTION_SETTING_NAME);
+ return FALSE;
+ }
+
+ slave_type = nm_setting_connection_get_slave_type (s_con);
+ if ( slave_type
+ && strcmp (slave_type, NM_SETTING_BRIDGE_SETTING_NAME)) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("A connection with a '%s' setting must have the slave-type set to '%s'. Instead it is '%s'"),
+ NM_SETTING_BRIDGE_PORT_SETTING_NAME,
+ NM_SETTING_BRIDGE_SETTING_NAME,
+ slave_type);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_SLAVE_TYPE);
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+/**************************************************************************/
+
+/**
+ * nm_setting_bridge_port_new:
+ *
+ * Creates a new #NMSettingBridgePort object with default values.
+ *
+ * Returns: (transfer full): the new empty #NMSettingBridgePort object
+ **/
+NMSetting *
+nm_setting_bridge_port_new (void)
+{
+ return (NMSetting *) g_object_new (NM_TYPE_SETTING_BRIDGE_PORT, NULL);
+}
+
+static void
+nm_setting_bridge_port_init (NMSettingBridgePort *setting)
+{
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ NMSettingBridgePortPrivate *priv = NM_SETTING_BRIDGE_PORT_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_PRIORITY:
+ priv->priority = (guint16) (g_value_get_uint (value) & 0xFFFF);
+ break;
+ case PROP_PATH_COST:
+ priv->path_cost = (guint16) (g_value_get_uint (value) & 0xFFFF);
+ break;
+ case PROP_HAIRPIN_MODE:
+ priv->hairpin_mode = g_value_get_boolean (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)
+{
+ NMSettingBridgePortPrivate *priv = NM_SETTING_BRIDGE_PORT_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_PRIORITY:
+ g_value_set_uint (value, priv->priority);
+ break;
+ case PROP_PATH_COST:
+ g_value_set_uint (value, priv->path_cost);
+ break;
+ case PROP_HAIRPIN_MODE:
+ g_value_set_boolean (value, priv->hairpin_mode);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_setting_bridge_port_class_init (NMSettingBridgePortClass *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 (NMSettingBridgePortPrivate));
+
+ /* virtual methods */
+ object_class->set_property = set_property;
+ object_class->get_property = get_property;
+ parent_class->verify = verify;
+
+ /* Properties */
+ /**
+ * NMSettingBridgePort:priority:
+ *
+ * The Spanning Tree Protocol (STP) priority of this bridge port.
+ **/
+ /* ---ifcfg-rh---
+ * property: priority
+ * variable: BRIDGING_OPTS: priority=
+ * values: 0 - 63
+ * default: 32
+ * description: STP priority.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PRIORITY,
+ g_param_spec_uint (NM_SETTING_BRIDGE_PORT_PRIORITY, "", "",
+ 0, BR_MAX_PORT_PRIORITY, BR_DEF_PRIORITY,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingBridgePort:path-cost:
+ *
+ * The Spanning Tree Protocol (STP) port cost for destinations via this
+ * port.
+ **/
+ /* ---ifcfg-rh---
+ * property: path-cost
+ * variable: BRIDGING_OPTS: path_cost=
+ * values: 1 - 65535
+ * default: 100
+ * description: STP cost.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PATH_COST,
+ g_param_spec_uint (NM_SETTING_BRIDGE_PORT_PATH_COST, "", "",
+ 0, BR_MAX_PATH_COST, 100,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingBridgePort:hairpin-mode:
+ *
+ * Enables or disabled "hairpin mode" for the port, which allows frames to
+ * be sent back out through the port the frame was received on.
+ **/
+ /* ---ifcfg-rh---
+ * property: hairpin-mode
+ * variable: BRIDGING_OPTS: hairpin_mode=
+ * default: yes
+ * description: Hairpin mode of the bridge port.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_HAIRPIN_MODE,
+ g_param_spec_boolean (NM_SETTING_BRIDGE_PORT_HAIRPIN_MODE, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/libnm-core/nm-setting-bridge-port.h b/libnm-core/nm-setting-bridge-port.h
new file mode 100644
index 000000000..49ca38b34
--- /dev/null
+++ b/libnm-core/nm-setting-bridge-port.h
@@ -0,0 +1,69 @@
+/* -*- 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 2012 Red Hat, Inc.
+ */
+
+#ifndef __NM_SETTING_BRIDGE_PORT_H__
+#define __NM_SETTING_BRIDGE_PORT_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-setting.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_BRIDGE_PORT (nm_setting_bridge_port_get_type ())
+#define NM_SETTING_BRIDGE_PORT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SETTING_BRIDGE_PORT, NMSettingBridgePort))
+#define NM_SETTING_BRIDGE_PORT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SETTING_BRIDGE_PORT, NMSettingBridgePortClass))
+#define NM_IS_SETTING_BRIDGE_PORT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SETTING_BRIDGE_PORT))
+#define NM_IS_SETTING_BRIDGE_PORT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_SETTING_BRIDGE_PORT))
+#define NM_SETTING_BRIDGE_PORT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SETTING_BRIDGE_PORT, NMSettingBridgePortClass))
+
+#define NM_SETTING_BRIDGE_PORT_SETTING_NAME "bridge-port"
+
+#define NM_SETTING_BRIDGE_PORT_PRIORITY "priority"
+#define NM_SETTING_BRIDGE_PORT_PATH_COST "path-cost"
+#define NM_SETTING_BRIDGE_PORT_HAIRPIN_MODE "hairpin-mode"
+
+struct _NMSettingBridgePort {
+ NMSetting parent;
+};
+
+typedef struct {
+ NMSettingClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMSettingBridgePortClass;
+
+GType nm_setting_bridge_port_get_type (void);
+
+NMSetting * nm_setting_bridge_port_new (void);
+
+guint16 nm_setting_bridge_port_get_priority (NMSettingBridgePort *setting);
+
+guint16 nm_setting_bridge_port_get_path_cost (NMSettingBridgePort *setting);
+
+gboolean nm_setting_bridge_port_get_hairpin_mode (NMSettingBridgePort *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_BRIDGE_PORT_H__ */
diff --git a/libnm-core/nm-setting-bridge.c b/libnm-core/nm-setting-bridge.c
new file mode 100644
index 000000000..51c6ac5a0
--- /dev/null
+++ b/libnm-core/nm-setting-bridge.c
@@ -0,0 +1,540 @@
+/* -*- 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 2011 - 2013 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <ctype.h>
+#include <stdlib.h>
+#include <glib/gi18n-lib.h>
+
+#include "nm-setting-bridge.h"
+#include "nm-connection-private.h"
+#include "nm-utils.h"
+#include "nm-utils-private.h"
+
+/**
+ * SECTION:nm-setting-bridge
+ * @short_description: Describes connection properties for bridges
+ *
+ * The #NMSettingBridge object is a #NMSetting subclass that describes properties
+ * necessary for bridging connections.
+ **/
+
+G_DEFINE_TYPE_WITH_CODE (NMSettingBridge, nm_setting_bridge, NM_TYPE_SETTING,
+ _nm_register_setting (BRIDGE, 1))
+NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_BRIDGE)
+
+#define NM_SETTING_BRIDGE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_BRIDGE, NMSettingBridgePrivate))
+
+typedef struct {
+ char * mac_address;
+ gboolean stp;
+ guint16 priority;
+ guint16 forward_delay;
+ guint16 hello_time;
+ guint16 max_age;
+ guint32 ageing_time;
+} NMSettingBridgePrivate;
+
+enum {
+ PROP_0,
+ PROP_MAC_ADDRESS,
+ PROP_STP,
+ PROP_PRIORITY,
+ PROP_FORWARD_DELAY,
+ PROP_HELLO_TIME,
+ PROP_MAX_AGE,
+ PROP_AGEING_TIME,
+ LAST_PROP
+};
+
+/**
+ * nm_setting_bridge_new:
+ *
+ * Creates a new #NMSettingBridge object with default values.
+ *
+ * Returns: (transfer full): the new empty #NMSettingBridge object
+ **/
+NMSetting *
+nm_setting_bridge_new (void)
+{
+ return (NMSetting *) g_object_new (NM_TYPE_SETTING_BRIDGE, NULL);
+}
+
+/**
+ * nm_setting_bridge_get_mac_address:
+ * @setting: the #NMSettingBridge
+ *
+ * Returns: the #NMSettingBridge:mac-address property of the setting
+ **/
+const char *
+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
+ *
+ * Returns: the #NMSettingBridge:stp property of the setting
+ **/
+gboolean
+nm_setting_bridge_get_stp (NMSettingBridge *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_BRIDGE (setting), FALSE);
+
+ return NM_SETTING_BRIDGE_GET_PRIVATE (setting)->stp;
+}
+
+/**
+ * nm_setting_bridge_get_priority:
+ * @setting: the #NMSettingBridge
+ *
+ * Returns: the #NMSettingBridge:priority property of the setting
+ **/
+guint16
+nm_setting_bridge_get_priority (NMSettingBridge *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_BRIDGE (setting), 0);
+
+ return NM_SETTING_BRIDGE_GET_PRIVATE (setting)->priority;
+}
+
+/**
+ * nm_setting_bridge_get_forward_delay:
+ * @setting: the #NMSettingBridge
+ *
+ * Returns: the #NMSettingBridge:forward-delay property of the setting
+ **/
+guint16
+nm_setting_bridge_get_forward_delay (NMSettingBridge *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_BRIDGE (setting), 0);
+
+ return NM_SETTING_BRIDGE_GET_PRIVATE (setting)->forward_delay;
+}
+
+/**
+ * nm_setting_bridge_get_hello_time:
+ * @setting: the #NMSettingBridge
+ *
+ * Returns: the #NMSettingBridge:hello-time property of the setting
+ **/
+guint16
+nm_setting_bridge_get_hello_time (NMSettingBridge *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_BRIDGE (setting), 0);
+
+ return NM_SETTING_BRIDGE_GET_PRIVATE (setting)->hello_time;
+}
+
+/**
+ * nm_setting_bridge_get_max_age:
+ * @setting: the #NMSettingBridge
+ *
+ * Returns: the #NMSettingBridge:max-age property of the setting
+ **/
+guint16
+nm_setting_bridge_get_max_age (NMSettingBridge *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_BRIDGE (setting), 0);
+
+ return NM_SETTING_BRIDGE_GET_PRIVATE (setting)->max_age;
+}
+
+/**
+ * nm_setting_bridge_get_ageing_time:
+ * @setting: the #NMSettingBridge
+ *
+ * Returns: the #NMSettingBridge:ageing-time property of the setting
+ **/
+guint
+nm_setting_bridge_get_ageing_time (NMSettingBridge *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_BRIDGE (setting), 0);
+
+ return NM_SETTING_BRIDGE_GET_PRIVATE (setting)->ageing_time;
+}
+
+/* IEEE 802.1D-1998 timer values */
+#define BR_MIN_HELLO_TIME 1
+#define BR_MAX_HELLO_TIME 10
+
+#define BR_MIN_FORWARD_DELAY 2
+#define BR_MAX_FORWARD_DELAY 30
+
+#define BR_MIN_MAX_AGE 6
+#define BR_MAX_MAX_AGE 40
+
+/* IEEE 802.1D-1998 Table 7.4 */
+#define BR_MIN_AGEING_TIME 0
+#define BR_MAX_AGEING_TIME 1000000
+
+static inline gboolean
+check_range (guint32 val,
+ guint32 min,
+ guint32 max,
+ const char *prop,
+ GError **error)
+{
+ if ((val != 0) && (val < min || val > max)) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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;
+}
+
+static gboolean
+verify (NMSetting *setting, NMConnection *connection, GError **error)
+{
+ NMSettingBridgePrivate *priv = NM_SETTING_BRIDGE_GET_PRIVATE (setting);
+
+ if (priv->mac_address && !nm_utils_hwaddr_valid (priv->mac_address, ETH_ALEN)) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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;
+ }
+
+ if (!check_range (priv->forward_delay,
+ BR_MIN_FORWARD_DELAY,
+ BR_MAX_FORWARD_DELAY,
+ NM_SETTING_BRIDGE_FORWARD_DELAY,
+ error))
+ return FALSE;
+
+ if (!check_range (priv->hello_time,
+ BR_MIN_HELLO_TIME,
+ BR_MAX_HELLO_TIME,
+ NM_SETTING_BRIDGE_HELLO_TIME,
+ error))
+ return FALSE;
+
+ if (!check_range (priv->max_age,
+ BR_MIN_MAX_AGE,
+ BR_MAX_MAX_AGE,
+ NM_SETTING_BRIDGE_MAX_AGE,
+ error))
+ return FALSE;
+
+ if (!check_range (priv->ageing_time,
+ BR_MIN_AGEING_TIME,
+ BR_MAX_AGEING_TIME,
+ NM_SETTING_BRIDGE_AGEING_TIME,
+ error))
+ return FALSE;
+
+ return _nm_connection_verify_required_interface_name (connection, error);
+}
+
+static void
+nm_setting_bridge_init (NMSettingBridge *setting)
+{
+}
+
+static void
+finalize (GObject *object)
+{
+ NMSettingBridgePrivate *priv = NM_SETTING_BRIDGE_GET_PRIVATE (object);
+
+ g_free (priv->mac_address);
+
+ G_OBJECT_CLASS (nm_setting_bridge_parent_class)->finalize (object);
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ NMSettingBridgePrivate *priv = NM_SETTING_BRIDGE_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_MAC_ADDRESS:
+ g_free (priv->mac_address);
+ priv->mac_address = _nm_utils_hwaddr_canonical_or_invalid (g_value_get_string (value),
+ ETH_ALEN);
+ break;
+ case PROP_STP:
+ priv->stp = g_value_get_boolean (value);
+ break;
+ case PROP_PRIORITY:
+ priv->priority = (guint16) g_value_get_uint (value);
+ break;
+ case PROP_FORWARD_DELAY:
+ priv->forward_delay = (guint16) g_value_get_uint (value);
+ break;
+ case PROP_HELLO_TIME:
+ priv->hello_time = (guint16) g_value_get_uint (value);
+ break;
+ case PROP_MAX_AGE:
+ priv->max_age = (guint16) g_value_get_uint (value);
+ break;
+ case PROP_AGEING_TIME:
+ priv->ageing_time = g_value_get_uint (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)
+{
+ NMSettingBridgePrivate *priv = NM_SETTING_BRIDGE_GET_PRIVATE (object);
+ NMSettingBridge *setting = NM_SETTING_BRIDGE (object);
+
+ switch (prop_id) {
+ case PROP_MAC_ADDRESS:
+ g_value_set_string (value, nm_setting_bridge_get_mac_address (setting));
+ break;
+ case PROP_STP:
+ g_value_set_boolean (value, priv->stp);
+ break;
+ case PROP_PRIORITY:
+ g_value_set_uint (value, priv->priority);
+ break;
+ case PROP_FORWARD_DELAY:
+ g_value_set_uint (value, priv->forward_delay);
+ break;
+ case PROP_HELLO_TIME:
+ g_value_set_uint (value, priv->hello_time);
+ break;
+ case PROP_MAX_AGE:
+ g_value_set_uint (value, priv->max_age);
+ break;
+ case PROP_AGEING_TIME:
+ g_value_set_uint (value, priv->ageing_time);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_setting_bridge_class_init (NMSettingBridgeClass *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 (NMSettingBridgePrivate));
+
+ /* virtual methods */
+ object_class->set_property = set_property;
+ object_class->get_property = get_property;
+ object_class->finalize = finalize;
+ parent_class->verify = verify;
+
+ /* Properties */
+ /**
+ * 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.
+ **/
+ /* ---keyfile---
+ * property: mac-address
+ * format: ususal hex-digits-and-colons notation
+ * description: MAC address in traditional hex-digits-and-colons notation,
+ * or semicolon separated list of 6 decimal bytes (obsolete)
+ * example: mac-address=00:22:68:12:79:A2
+ * mac-address=0;34;104;18;121;162;
+ * ---end---
+ * ---ifcfg-rh---
+ * property: mac-address
+ * variable: MACADDR(+)
+ * description: MAC address of the bridge. Note that this requires a recent
+ * kernel support, originally introduced in 3.15 upstream kernel)
+ * MACADDR for bridges is an NM extension.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_MAC_ADDRESS,
+ g_param_spec_string (NM_SETTING_BRIDGE_MAC_ADDRESS, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+ _nm_setting_class_transform_property (parent_class, NM_SETTING_BRIDGE_MAC_ADDRESS,
+ G_VARIANT_TYPE_BYTESTRING,
+ _nm_utils_hwaddr_to_dbus,
+ _nm_utils_hwaddr_from_dbus);
+
+ /**
+ * NMSettingBridge:stp:
+ *
+ * Controls whether Spanning Tree Protocol (STP) is enabled for this bridge.
+ **/
+ /* ---ifcfg-rh---
+ * property: stp
+ * variable: STP
+ * default: no
+ * description: Span tree protocol participation.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_STP,
+ g_param_spec_boolean (NM_SETTING_BRIDGE_STP, "", "",
+ TRUE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingBridge:priority:
+ *
+ * Sets the Spanning Tree Protocol (STP) priority for this bridge. Lower
+ * values are "better"; the lowest priority bridge will be elected the root
+ * bridge.
+ **/
+ /* ---ifcfg-rh---
+ * property: priority
+ * variable: BRIDGING_OPTS: priority=
+ * values: 0 - 32768
+ * default: 32768
+ * description: STP priority.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PRIORITY,
+ g_param_spec_uint (NM_SETTING_BRIDGE_PRIORITY, "", "",
+ 0, G_MAXUINT16, 0x8000,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingBridge:forward-delay:
+ *
+ * The Spanning Tree Protocol (STP) forwarding delay, in seconds.
+ **/
+ /* ---ifcfg-rh---
+ * property: forward-delay
+ * variable: DELAY
+ * values: 2 - 30
+ * default: 15
+ * description: STP forwarding delay.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_FORWARD_DELAY,
+ g_param_spec_uint (NM_SETTING_BRIDGE_FORWARD_DELAY, "", "",
+ 0, BR_MAX_FORWARD_DELAY, 15,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingBridge:hello-time:
+ *
+ * The Spanning Tree Protocol (STP) hello time, in seconds.
+ **/
+ /* ---ifcfg-rh---
+ * property: hello-time
+ * variable: BRIDGING_OPTS: hello_time=
+ * values: 1 - 10
+ * default: 2
+ * description: STP hello time.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_HELLO_TIME,
+ g_param_spec_uint (NM_SETTING_BRIDGE_HELLO_TIME, "", "",
+ 0, BR_MAX_HELLO_TIME, 2,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingBridge:max-age:
+ *
+ * The Spanning Tree Protocol (STP) maximum message age, in seconds.
+ **/
+ /* ---ifcfg-rh---
+ * property: max-age
+ * variable: BRIDGING_OPTS: max_age=
+ * values: 6 - 40
+ * default: 20
+ * description: STP maximum message age.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_MAX_AGE,
+ g_param_spec_uint (NM_SETTING_BRIDGE_MAX_AGE, "", "",
+ 0, BR_MAX_MAX_AGE, 20,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingBridge:ageing-time:
+ *
+ * The Ethernet MAC address aging time, in seconds.
+ **/
+ /* ---ifcfg-rh---
+ * property: ageing-time
+ * variable: BRIDGING_OPTS: ageing_time=
+ * values: 0 - 1000000
+ * default: 300
+ * description: Ethernet MAC ageing time.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_AGEING_TIME,
+ g_param_spec_uint (NM_SETTING_BRIDGE_AGEING_TIME, "", "",
+ 0, BR_MAX_AGEING_TIME, 300,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /* ---dbus---
+ * property: interface-name
+ * format: string
+ * description: Deprecated in favor of connection.interface-name, but can
+ * be used for backward-compatibility with older daemons, to set the
+ * bridge's interface name.
+ * ---end---
+ */
+ _nm_setting_class_add_dbus_only_property (parent_class, "interface-name",
+ G_VARIANT_TYPE_STRING,
+ _nm_setting_get_deprecated_virtual_interface_name,
+ NULL);
+}
diff --git a/libnm-core/nm-setting-bridge.h b/libnm-core/nm-setting-bridge.h
new file mode 100644
index 000000000..b4fe74772
--- /dev/null
+++ b/libnm-core/nm-setting-bridge.h
@@ -0,0 +1,81 @@
+/* -*- 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 2011 - 2012 Red Hat, Inc.
+ */
+
+#ifndef __NM_SETTING_BRIDGE_H__
+#define __NM_SETTING_BRIDGE_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-setting.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_BRIDGE (nm_setting_bridge_get_type ())
+#define NM_SETTING_BRIDGE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SETTING_BRIDGE, NMSettingBridge))
+#define NM_SETTING_BRIDGE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SETTING_BRIDGE, NMSettingBridgeClass))
+#define NM_IS_SETTING_BRIDGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SETTING_BRIDGE))
+#define NM_IS_SETTING_BRIDGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_SETTING_BRIDGE))
+#define NM_SETTING_BRIDGE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SETTING_BRIDGE, NMSettingBridgeClass))
+
+#define NM_SETTING_BRIDGE_SETTING_NAME "bridge"
+
+#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"
+#define NM_SETTING_BRIDGE_HELLO_TIME "hello-time"
+#define NM_SETTING_BRIDGE_MAX_AGE "max-age"
+#define NM_SETTING_BRIDGE_AGEING_TIME "ageing-time"
+
+struct _NMSettingBridge {
+ NMSetting parent;
+};
+
+typedef struct {
+ NMSettingClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMSettingBridgeClass;
+
+GType nm_setting_bridge_get_type (void);
+
+NMSetting * nm_setting_bridge_new (void);
+
+const char * nm_setting_bridge_get_mac_address (NMSettingBridge *setting);
+
+gboolean nm_setting_bridge_get_stp (NMSettingBridge *setting);
+
+guint16 nm_setting_bridge_get_priority (NMSettingBridge *setting);
+
+guint16 nm_setting_bridge_get_forward_delay (NMSettingBridge *setting);
+
+guint16 nm_setting_bridge_get_hello_time (NMSettingBridge *setting);
+
+guint16 nm_setting_bridge_get_max_age (NMSettingBridge *setting);
+
+guint32 nm_setting_bridge_get_ageing_time (NMSettingBridge *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_BRIDGE_H__ */
diff --git a/libnm-core/nm-setting-cdma.c b/libnm-core/nm-setting-cdma.c
new file mode 100644
index 000000000..ebbbda740
--- /dev/null
+++ b/libnm-core/nm-setting-cdma.c
@@ -0,0 +1,336 @@
+/* -*- 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 2007 - 2013 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <glib/gi18n-lib.h>
+
+#include "nm-setting-cdma.h"
+#include "nm-utils.h"
+#include "nm-setting-private.h"
+#include "nm-core-enum-types.h"
+
+/**
+ * SECTION:nm-setting-cdma
+ * @short_description: Describes CDMA-based mobile broadband properties
+ *
+ * The #NMSettingCdma object is a #NMSetting subclass that describes
+ * properties that allow connections to IS-95-based mobile broadband
+ * networks, including those using CDMA2000/EVDO technology.
+ */
+
+G_DEFINE_TYPE_WITH_CODE (NMSettingCdma, nm_setting_cdma, NM_TYPE_SETTING,
+ _nm_register_setting (CDMA, 1))
+NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_CDMA)
+
+#define NM_SETTING_CDMA_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_CDMA, NMSettingCdmaPrivate))
+
+typedef struct {
+ char *number; /* For dialing, duh */
+ char *username;
+ char *password;
+ NMSettingSecretFlags password_flags;
+} NMSettingCdmaPrivate;
+
+enum {
+ PROP_0,
+ PROP_NUMBER,
+ PROP_USERNAME,
+ PROP_PASSWORD,
+ PROP_PASSWORD_FLAGS,
+
+ LAST_PROP
+};
+
+/**
+ * nm_setting_cdma_new:
+ *
+ * Creates a new #NMSettingCdma object with default values.
+ *
+ * Returns: the new empty #NMSettingCdma object
+ **/
+NMSetting *
+nm_setting_cdma_new (void)
+{
+ return (NMSetting *) g_object_new (NM_TYPE_SETTING_CDMA, NULL);
+}
+
+/**
+ * nm_setting_cdma_get_number:
+ * @setting: the #NMSettingCdma
+ *
+ * Returns: the #NMSettingCdma:number property of the setting
+ **/
+const char *
+nm_setting_cdma_get_number (NMSettingCdma *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_CDMA (setting), NULL);
+
+ return NM_SETTING_CDMA_GET_PRIVATE (setting)->number;
+}
+
+/**
+ * nm_setting_cdma_get_username:
+ * @setting: the #NMSettingCdma
+ *
+ * Returns: the #NMSettingCdma:username property of the setting
+ **/
+const char *
+nm_setting_cdma_get_username (NMSettingCdma *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_CDMA (setting), NULL);
+
+ return NM_SETTING_CDMA_GET_PRIVATE (setting)->username;
+}
+
+/**
+ * nm_setting_cdma_get_password:
+ * @setting: the #NMSettingCdma
+ *
+ * Returns: the #NMSettingCdma:password property of the setting
+ **/
+const char *
+nm_setting_cdma_get_password (NMSettingCdma *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_CDMA (setting), NULL);
+
+ return NM_SETTING_CDMA_GET_PRIVATE (setting)->password;
+}
+
+/**
+ * nm_setting_cdma_get_password_flags:
+ * @setting: the #NMSettingCdma
+ *
+ * Returns: the #NMSettingSecretFlags pertaining to the #NMSettingCdma:password
+ **/
+NMSettingSecretFlags
+nm_setting_cdma_get_password_flags (NMSettingCdma *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_CDMA (setting), NM_SETTING_SECRET_FLAG_NONE);
+
+ return NM_SETTING_CDMA_GET_PRIVATE (setting)->password_flags;
+}
+
+static gboolean
+verify (NMSetting *setting, NMConnection *connection, GError **error)
+{
+ NMSettingCdmaPrivate *priv = NM_SETTING_CDMA_GET_PRIVATE (setting);
+
+ if (!priv->number) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("property is empty"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_CDMA_SETTING_NAME, NM_SETTING_CDMA_PASSWORD);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static GPtrArray *
+need_secrets (NMSetting *setting)
+{
+ NMSettingCdmaPrivate *priv = NM_SETTING_CDMA_GET_PRIVATE (setting);
+ GPtrArray *secrets = NULL;
+
+ if (priv->password)
+ return NULL;
+
+ if (priv->username) {
+ if (!(priv->password_flags & NM_SETTING_SECRET_FLAG_NOT_REQUIRED)) {
+ secrets = g_ptr_array_sized_new (1);
+ g_ptr_array_add (secrets, NM_SETTING_CDMA_PASSWORD);
+ }
+ }
+
+ return secrets;
+}
+
+static void
+nm_setting_cdma_init (NMSettingCdma *setting)
+{
+}
+
+static void
+finalize (GObject *object)
+{
+ NMSettingCdmaPrivate *priv = NM_SETTING_CDMA_GET_PRIVATE (object);
+
+ g_free (priv->number);
+ g_free (priv->username);
+ g_free (priv->password);
+
+ G_OBJECT_CLASS (nm_setting_cdma_parent_class)->finalize (object);
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ NMSettingCdmaPrivate *priv = NM_SETTING_CDMA_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_NUMBER:
+ g_free (priv->number);
+ priv->number = g_value_dup_string (value);
+ break;
+ case PROP_USERNAME:
+ g_free (priv->username);
+ priv->username = g_value_dup_string (value);
+ break;
+ case PROP_PASSWORD:
+ g_free (priv->password);
+ priv->password = g_value_dup_string (value);
+ break;
+ case PROP_PASSWORD_FLAGS:
+ priv->password_flags = g_value_get_flags (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)
+{
+ NMSettingCdma *setting = NM_SETTING_CDMA (object);
+
+ switch (prop_id) {
+ case PROP_NUMBER:
+ g_value_set_string (value, nm_setting_cdma_get_number (setting));
+ break;
+ case PROP_USERNAME:
+ g_value_set_string (value, nm_setting_cdma_get_username (setting));
+ break;
+ case PROP_PASSWORD:
+ g_value_set_string (value, nm_setting_cdma_get_password (setting));
+ break;
+ case PROP_PASSWORD_FLAGS:
+ g_value_set_flags (value, nm_setting_cdma_get_password_flags (setting));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_setting_cdma_class_init (NMSettingCdmaClass *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 (NMSettingCdmaPrivate));
+
+ /* virtual methods */
+ object_class->set_property = set_property;
+ object_class->get_property = get_property;
+ object_class->finalize = finalize;
+ parent_class->verify = verify;
+ parent_class->need_secrets = need_secrets;
+
+ /* Properties */
+
+ /**
+ * NMSettingCdma:number:
+ *
+ * The number to dial to establish the connection to the CDMA-based mobile
+ * broadband network, if any. If not specified, the default number (#777)
+ * is used when required.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_NUMBER,
+ g_param_spec_string (NM_SETTING_CDMA_NUMBER, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingCdma:username:
+ *
+ * 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.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_USERNAME,
+ g_param_spec_string (NM_SETTING_CDMA_USERNAME, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingCdma:password:
+ *
+ * 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.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_PASSWORD,
+ g_param_spec_string (NM_SETTING_CDMA_PASSWORD, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_SECRET |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingCdma:password-flags:
+ *
+ * Flags indicating how to handle the #NMSettingCdma:password property.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_PASSWORD_FLAGS,
+ g_param_spec_flags (NM_SETTING_CDMA_PASSWORD_FLAGS, "", "",
+ NM_TYPE_SETTING_SECRET_FLAGS,
+ NM_SETTING_SECRET_FLAG_NONE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/libnm-core/nm-setting-cdma.h b/libnm-core/nm-setting-cdma.h
new file mode 100644
index 000000000..6e333dccc
--- /dev/null
+++ b/libnm-core/nm-setting-cdma.h
@@ -0,0 +1,69 @@
+/* -*- 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 2007 - 2011 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ */
+
+#ifndef __NM_SETTING_CDMA_H__
+#define __NM_SETTING_CDMA_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-setting.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_CDMA (nm_setting_cdma_get_type ())
+#define NM_SETTING_CDMA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SETTING_CDMA, NMSettingCdma))
+#define NM_SETTING_CDMA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SETTING_CDMA, NMSettingCdmaClass))
+#define NM_IS_SETTING_CDMA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SETTING_CDMA))
+#define NM_IS_SETTING_CDMA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_SETTING_CDMA))
+#define NM_SETTING_CDMA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SETTING_CDMA, NMSettingCdmaClass))
+
+#define NM_SETTING_CDMA_SETTING_NAME "cdma"
+
+#define NM_SETTING_CDMA_NUMBER "number"
+#define NM_SETTING_CDMA_USERNAME "username"
+#define NM_SETTING_CDMA_PASSWORD "password"
+#define NM_SETTING_CDMA_PASSWORD_FLAGS "password-flags"
+
+struct _NMSettingCdma {
+ NMSetting parent;
+};
+
+typedef struct {
+ NMSettingClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMSettingCdmaClass;
+
+GType nm_setting_cdma_get_type (void);
+
+NMSetting *nm_setting_cdma_new (void);
+const char *nm_setting_cdma_get_number (NMSettingCdma *setting);
+const char *nm_setting_cdma_get_username (NMSettingCdma *setting);
+const char *nm_setting_cdma_get_password (NMSettingCdma *setting);
+NMSettingSecretFlags nm_setting_cdma_get_password_flags (NMSettingCdma *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_CDMA_H__ */
diff --git a/libnm-core/nm-setting-connection.c b/libnm-core/nm-setting-connection.c
new file mode 100644
index 000000000..01f5d423c
--- /dev/null
+++ b/libnm-core/nm-setting-connection.c
@@ -0,0 +1,1569 @@
+/* -*- 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 2007 - 2013 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <glib/gi18n-lib.h>
+
+#include "nm-utils.h"
+#include "nm-utils-private.h"
+#include "nm-setting-connection.h"
+#include "nm-connection-private.h"
+#include "nm-setting-bond.h"
+#include "nm-setting-bridge.h"
+#include "nm-setting-team.h"
+#include "nm-setting-vlan.h"
+
+/**
+ * SECTION:nm-setting-connection
+ * @short_description: Describes general connection properties
+ *
+ * The #NMSettingConnection object is a #NMSetting subclass that describes
+ * properties that apply to all #NMConnection objects, regardless of what type
+ * of network connection they describe. Each #NMConnection object must contain
+ * a #NMSettingConnection setting.
+ **/
+
+G_DEFINE_TYPE_WITH_CODE (NMSettingConnection, nm_setting_connection, NM_TYPE_SETTING,
+ _nm_register_setting (CONNECTION, 0))
+NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_CONNECTION)
+
+#define NM_SETTING_CONNECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_CONNECTION, NMSettingConnectionPrivate))
+
+typedef enum {
+ PERM_TYPE_USER = 0,
+} PermType;
+
+typedef struct {
+ guint8 ptype;
+ char *item;
+} Permission;
+
+typedef struct {
+ char *id;
+ char *uuid;
+ char *interface_name;
+ char *type;
+ char *master;
+ char *slave_type;
+ GSList *permissions; /* list of Permission structs */
+ gboolean autoconnect;
+ gint autoconnect_priority;
+ guint64 timestamp;
+ 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,
+ PROP_AUTOCONNECT_PRIORITY,
+ PROP_TIMESTAMP,
+ PROP_READ_ONLY,
+ PROP_ZONE,
+ PROP_MASTER,
+ PROP_SLAVE_TYPE,
+ PROP_SECONDARIES,
+ PROP_GATEWAY_PING_TIMEOUT,
+
+ LAST_PROP
+};
+
+/***********************************************************************/
+
+#define PERM_USER_PREFIX "user:"
+
+static Permission *
+permission_new_from_str (const char *str)
+{
+ Permission *p;
+ const char *last_colon;
+ size_t ulen = 0, i;
+
+ g_return_val_if_fail (strncmp (str, PERM_USER_PREFIX, strlen (PERM_USER_PREFIX)) == 0, NULL);
+ str += strlen (PERM_USER_PREFIX);
+
+ last_colon = strrchr (str, ':');
+ if (last_colon) {
+ /* Ensure that somebody didn't pass "user::" */
+ g_return_val_if_fail (last_colon > str, NULL);
+
+ /* Reject :[detail] for now */
+ g_return_val_if_fail (*(last_colon + 1) == '\0', NULL);
+
+ /* Make sure we don't include detail in the username */
+ ulen = last_colon - str;
+ } else
+ ulen = strlen (str);
+
+ /* Sanity check the length of the username */
+ g_return_val_if_fail (ulen < 100, NULL);
+
+ /* Make sure there's no ':' in the username */
+ for (i = 0; i < ulen; i++)
+ g_return_val_if_fail (str[i] != ':', NULL);
+
+ /* And the username must be valid UTF-8 */
+ g_return_val_if_fail (g_utf8_validate (str, -1, NULL) == TRUE, NULL);
+
+ /* Yay, valid... create the new permission */
+ p = g_slice_new0 (Permission);
+ p->ptype = PERM_TYPE_USER;
+ if (last_colon) {
+ p->item = g_malloc (ulen + 1);
+ memcpy (p->item, str, ulen);
+ p->item[ulen] = '\0';
+ } else
+ p->item = g_strdup (str);
+
+ return p;
+}
+
+static Permission *
+permission_new (const char *uname)
+{
+ Permission *p;
+
+ g_return_val_if_fail (uname, NULL);
+ g_return_val_if_fail (uname[0] != '\0', NULL);
+ g_return_val_if_fail (strchr (uname, ':') == NULL, NULL);
+ g_return_val_if_fail (g_utf8_validate (uname, -1, NULL) == TRUE, NULL);
+
+ /* Yay, valid... create the new permission */
+ p = g_slice_new0 (Permission);
+ p->ptype = PERM_TYPE_USER;
+ p->item = g_strdup (uname);
+ return p;
+}
+
+static char *
+permission_to_string (Permission *p)
+{
+ return g_strdup_printf (PERM_USER_PREFIX "%s:", p->item);
+}
+
+static void
+permission_free (Permission *p)
+{
+ g_free (p->item);
+ memset (p, 0, sizeof (*p));
+ g_slice_free (Permission, p);
+}
+
+/***********************************************************************/
+
+/**
+ * nm_setting_connection_new:
+ *
+ * Creates a new #NMSettingConnection object with default values.
+ *
+ * Returns: the new empty #NMSettingConnection object
+ **/
+NMSetting *nm_setting_connection_new (void)
+{
+ return (NMSetting *) g_object_new (NM_TYPE_SETTING_CONNECTION, NULL);
+}
+
+/**
+ * nm_setting_connection_get_id:
+ * @setting: the #NMSettingConnection
+ *
+ * Returns the #NMSettingConnection:id property of the connection.
+ *
+ * Returns: the connection ID
+ **/
+const char *
+nm_setting_connection_get_id (NMSettingConnection *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_CONNECTION (setting), NULL);
+
+ return NM_SETTING_CONNECTION_GET_PRIVATE (setting)->id;
+}
+
+/**
+ * nm_setting_connection_get_uuid:
+ * @setting: the #NMSettingConnection
+ *
+ * Returns the #NMSettingConnection:uuid property of the connection.
+ *
+ * Returns: the connection UUID
+ **/
+const char *
+nm_setting_connection_get_uuid (NMSettingConnection *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_CONNECTION (setting), NULL);
+
+ return NM_SETTING_CONNECTION_GET_PRIVATE (setting)->uuid;
+}
+
+/**
+ * nm_setting_connection_get_interface_name:
+ * @setting: the #NMSettingConnection
+ *
+ * Returns the #NMSettingConnection:interface-name property of the connection.
+ *
+ * Returns: the connection's interface name
+ **/
+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
+ *
+ * Returns the #NMSettingConnection:type property of the connection.
+ *
+ * Returns: the connection type
+ **/
+const char *
+nm_setting_connection_get_connection_type (NMSettingConnection *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_CONNECTION (setting), NULL);
+
+ return NM_SETTING_CONNECTION_GET_PRIVATE (setting)->type;
+}
+
+
+/**
+ * nm_setting_connection_get_num_permissions:
+ * @setting: the #NMSettingConnection
+ *
+ * Returns the number of entires in the #NMSettingConnection:permissions
+ * property of this setting.
+ *
+ * Returns: the number of permissions entires
+ */
+guint32
+nm_setting_connection_get_num_permissions (NMSettingConnection *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_CONNECTION (setting), 0);
+
+ return g_slist_length (NM_SETTING_CONNECTION_GET_PRIVATE (setting)->permissions);
+}
+
+/**
+ * nm_setting_connection_get_permission:
+ * @setting: the #NMSettingConnection
+ * @idx: the zero-based index of the permissions entry
+ * @out_ptype: on return, the permission type (at this time, always "user")
+ * @out_pitem: on return, the permission item (formatted accoring to @ptype, see
+ * #NMSettingConnection:permissions for more detail
+ * @out_detail: on return, the permission detail (at this time, always %NULL)
+ *
+ * Retrieve one of the entries of the #NMSettingConnection:permissions property
+ * of this setting.
+ *
+ * Returns: %TRUE if a permission was returned, %FALSE if @idx was invalid
+ */
+gboolean
+nm_setting_connection_get_permission (NMSettingConnection *setting,
+ guint32 idx,
+ const char **out_ptype,
+ const char **out_pitem,
+ const char **out_detail)
+{
+ NMSettingConnectionPrivate *priv;
+ Permission *p;
+
+ g_return_val_if_fail (NM_IS_SETTING_CONNECTION (setting), FALSE);
+
+ priv = NM_SETTING_CONNECTION_GET_PRIVATE (setting);
+
+ g_return_val_if_fail (idx < g_slist_length (priv->permissions), FALSE);
+
+ p = g_slist_nth_data (priv->permissions, idx);
+ if (out_ptype)
+ *out_ptype = "user";
+ if (out_pitem)
+ *out_pitem = p->item;
+ if (out_detail)
+ *out_detail = NULL;
+
+ return TRUE;
+}
+
+/**
+ * nm_setting_connection_permissions_user_allowed:
+ * @setting: the #NMSettingConnection
+ * @uname: the user name to check permissions for
+ *
+ * Checks whether the given username is allowed to view/access this connection.
+ *
+ * Returns: %TRUE if the requested user is allowed to view this connection,
+ * %FALSE if the given user is not allowed to view this connection
+ */
+gboolean
+nm_setting_connection_permissions_user_allowed (NMSettingConnection *setting,
+ const char *uname)
+{
+ NMSettingConnectionPrivate *priv;
+ GSList *iter;
+
+ g_return_val_if_fail (NM_IS_SETTING_CONNECTION (setting), FALSE);
+ g_return_val_if_fail (uname != NULL, FALSE);
+ g_return_val_if_fail (*uname != '\0', FALSE);
+
+ priv = NM_SETTING_CONNECTION_GET_PRIVATE (setting);
+
+ /* If no permissions, visible to all */
+ if (priv->permissions == NULL)
+ return TRUE;
+
+ /* Find the username in the permissions list */
+ for (iter = priv->permissions; iter; iter = g_slist_next (iter)) {
+ Permission *p = iter->data;
+
+ if (strcmp (uname, p->item) == 0)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/**
+ * nm_setting_connection_add_permission:
+ * @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
+ *
+ * Adds a permission to the connection's permission list. 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 unique and was successfully added to the
+ * list, %FALSE if @ptype or @pitem was invalid or it the permission was already
+ * present in the list
+ */
+gboolean
+nm_setting_connection_add_permission (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);
+
+ /* No dupes */
+ for (iter = priv->permissions; iter; iter = g_slist_next (iter)) {
+ p = iter->data;
+ if (strcmp (pitem, p->item) == 0)
+ return FALSE;
+ }
+
+ 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;
+}
+
+/**
+ * nm_setting_connection_remove_permission:
+ * @setting: the #NMSettingConnection
+ * @idx: the zero-based index of the permission to remove
+ *
+ * Removes the permission at index @idx from the connection.
+ */
+void
+nm_setting_connection_remove_permission (NMSettingConnection *setting,
+ guint32 idx)
+{
+ NMSettingConnectionPrivate *priv;
+ GSList *iter;
+
+ g_return_if_fail (NM_IS_SETTING_CONNECTION (setting));
+
+ priv = NM_SETTING_CONNECTION_GET_PRIVATE (setting);
+ iter = g_slist_nth (priv->permissions, idx);
+ g_return_if_fail (iter != NULL);
+
+ 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.
+ */
+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:
+ * @setting: the #NMSettingConnection
+ *
+ * Returns the #NMSettingConnection:autoconnect property of the connection.
+ *
+ * Returns: the connection's autoconnect behavior
+ **/
+gboolean
+nm_setting_connection_get_autoconnect (NMSettingConnection *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_CONNECTION (setting), FALSE);
+
+ return NM_SETTING_CONNECTION_GET_PRIVATE (setting)->autoconnect;
+}
+
+/**
+ * nm_setting_connection_get_autoconnect_priority:
+ * @setting: the #NMSettingConnection
+ *
+ * Returns the #NMSettingConnection:autoconnect-priority property of the connection.
+ * The higher number, the higher priority.
+ *
+ * Returns: the connection's autoconnect priority
+ **/
+gint
+nm_setting_connection_get_autoconnect_priority (NMSettingConnection *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_CONNECTION (setting), 0);
+
+ return NM_SETTING_CONNECTION_GET_PRIVATE (setting)->autoconnect_priority;
+}
+
+/**
+ * nm_setting_connection_get_timestamp:
+ * @setting: the #NMSettingConnection
+ *
+ * Returns the #NMSettingConnection:timestamp property of the connection.
+ *
+ * Returns: the connection's timestamp
+ **/
+guint64
+nm_setting_connection_get_timestamp (NMSettingConnection *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_CONNECTION (setting), 0);
+
+ return NM_SETTING_CONNECTION_GET_PRIVATE (setting)->timestamp;
+}
+
+/**
+ * nm_setting_connection_get_read_only:
+ * @setting: the #NMSettingConnection
+ *
+ * Returns the #NMSettingConnection:read-only property of the connection.
+ *
+ * Returns: %TRUE if the connection is read-only, %FALSE if it is not
+ **/
+gboolean
+nm_setting_connection_get_read_only (NMSettingConnection *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_CONNECTION (setting), TRUE);
+
+ return NM_SETTING_CONNECTION_GET_PRIVATE (setting)->read_only;
+}
+
+/**
+ * nm_setting_connection_get_zone:
+ * @setting: the #NMSettingConnection
+ *
+ * Returns the #NMSettingConnection:zone property of the connection.
+ *
+ * Returns: the trust level of a connection
+ **/
+const char *
+nm_setting_connection_get_zone (NMSettingConnection *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_CONNECTION (setting), NULL);
+
+ return NM_SETTING_CONNECTION_GET_PRIVATE (setting)->zone;
+}
+
+/**
+ * nm_setting_connection_get_master:
+ * @setting: the #NMSettingConnection
+ *
+ * Returns the #NMSettingConnection:master property of the connection.
+ *
+ * Returns: interface name of the master device or UUID of the master
+ * connection.
+ */
+const char *
+nm_setting_connection_get_master (NMSettingConnection *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_CONNECTION (setting), NULL);
+
+ return NM_SETTING_CONNECTION_GET_PRIVATE (setting)->master;
+}
+
+/**
+ * nm_setting_connection_get_slave_type:
+ * @setting: the #NMSettingConnection
+ *
+ * Returns the #NMSettingConnection:slave-type property of the connection.
+ *
+ * Returns: the type of slave this connection is, if any
+ */
+const char *
+nm_setting_connection_get_slave_type (NMSettingConnection *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_CONNECTION (setting), NULL);
+
+ return NM_SETTING_CONNECTION_GET_PRIVATE (setting)->slave_type;
+}
+
+/**
+ * nm_setting_connection_is_slave_type:
+ * @setting: the #NMSettingConnection
+ * @type: the setting name (ie #NM_SETTING_BOND_SETTING_NAME) to be matched
+ * against @setting's slave type
+ *
+ * Returns: %TRUE if connection is of the given slave @type
+ */
+gboolean
+nm_setting_connection_is_slave_type (NMSettingConnection *setting,
+ const char *type)
+{
+ g_return_val_if_fail (NM_IS_SETTING_CONNECTION (setting), FALSE);
+
+ return !g_strcmp0 (NM_SETTING_CONNECTION_GET_PRIVATE (setting)->slave_type, type);
+}
+
+/**
+ * nm_setting_connection_get_num_secondaries:
+ * @setting: the #NMSettingConnection
+ *
+ * Returns: the number of configured secondary connection UUIDs
+ **/
+guint32
+nm_setting_connection_get_num_secondaries (NMSettingConnection *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_CONNECTION (setting), 0);
+
+ return g_slist_length (NM_SETTING_CONNECTION_GET_PRIVATE (setting)->secondaries);
+}
+
+/**
+ * nm_setting_connection_get_secondary:
+ * @setting: the #NMSettingConnection
+ * @idx: the zero-based index of the secondary connection UUID entry
+ *
+ * Returns: the secondary connection UUID at index @idx
+ **/
+const char *
+nm_setting_connection_get_secondary (NMSettingConnection *setting, guint32 idx)
+{
+ NMSettingConnectionPrivate *priv;
+
+ g_return_val_if_fail (NM_IS_SETTING_CONNECTION (setting), NULL);
+
+ priv = NM_SETTING_CONNECTION_GET_PRIVATE (setting);
+ g_return_val_if_fail (idx <= g_slist_length (priv->secondaries), NULL);
+
+ return (const char *) g_slist_nth_data (priv->secondaries, idx);
+}
+
+/**
+ * nm_setting_connection_add_secondary:
+ * @setting: the #NMSettingConnection
+ * @sec_uuid: the secondary connection UUID to add
+ *
+ * Adds a new secondary connetion UUID to the setting.
+ *
+ * Returns: %TRUE if the secondary connection UUID was added; %FALSE if the UUID
+ * was already present
+ **/
+gboolean
+nm_setting_connection_add_secondary (NMSettingConnection *setting,
+ const char *sec_uuid)
+{
+ NMSettingConnectionPrivate *priv;
+ GSList *iter;
+
+ 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))
+ return FALSE;
+ }
+
+ priv->secondaries = g_slist_append (priv->secondaries, g_strdup (sec_uuid));
+ g_object_notify (G_OBJECT (setting), NM_SETTING_CONNECTION_SECONDARIES);
+ return TRUE;
+}
+
+/**
+ * nm_setting_connection_remove_secondary:
+ * @setting: the #NMSettingConnection
+ * @idx: index number of the secondary connection UUID
+ *
+ * Removes the secondary coonnection UUID at index @idx.
+ **/
+void
+nm_setting_connection_remove_secondary (NMSettingConnection *setting, guint32 idx)
+{
+ NMSettingConnectionPrivate *priv;
+ GSList *elt;
+
+ g_return_if_fail (NM_IS_SETTING_CONNECTION (setting));
+
+ priv = NM_SETTING_CONNECTION_GET_PRIVATE (setting);
+ elt = g_slist_nth (priv->secondaries, idx);
+ g_return_if_fail (elt != NULL);
+
+ g_free (elt->data);
+ priv->secondaries = g_slist_delete_link (priv->secondaries, elt);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_CONNECTION_SECONDARIES);
+}
+
+/**
+ * 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.
+ **/
+gboolean
+nm_setting_connection_remove_secondary_by_value (NMSettingConnection *setting,
+ const char *sec_uuid)
+{
+ NMSettingConnectionPrivate *priv;
+ GSList *iter;
+
+ 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.
+ **/
+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 void
+_set_error_missing_base_setting (GError **error, const char *type)
+{
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_MISSING_SETTING,
+ _("setting required for connection of type '%s'"),
+ type);
+ g_prefix_error (error, "%s: ", type);
+}
+
+static gboolean
+verify (NMSetting *setting, NMConnection *connection, GError **error)
+{
+ NMSettingConnectionPrivate *priv = NM_SETTING_CONNECTION_GET_PRIVATE (setting);
+ gboolean is_slave;
+ const char *slave_setting_type = NULL;
+ NMSetting *normerr_base_type = NULL;
+ const char *normerr_slave_setting_type = NULL;
+ const char *normerr_missing_slave_type = NULL;
+ const char *normerr_missing_slave_type_port = NULL;
+ gboolean normerr_base_setting = FALSE;
+
+ if (!priv->id) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_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 (!priv->id[0]) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_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 && !nm_utils_is_uuid (priv->uuid)) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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 (priv->interface_name) {
+ if (!nm_utils_iface_valid_name (priv->interface_name)) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_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) {
+ if (!connection || !(normerr_base_type = _nm_connection_find_base_type_setting (connection))) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_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 {
+ GType base_type;
+
+ if (!priv->type[0]) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("property is empty"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_TYPE);
+ return FALSE;
+ }
+
+ base_type = nm_setting_lookup_type (priv->type);
+ if (base_type == G_TYPE_INVALID || !_nm_setting_type_is_base_type (base_type)) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("connection type '%s' is not valid"),
+ priv->type);
+ 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 ( connection
+ && !nm_connection_get_setting_by_name (connection, priv->type)) {
+ NMSetting *s_base;
+ NMConnection *connection2;
+
+ s_base = g_object_new (base_type, NULL);
+ connection2 = nm_simple_connection_new_clone (connection);
+ nm_connection_add_setting (connection2, s_base);
+
+ normerr_base_setting = nm_setting_verify (s_base, connection2, NULL);
+
+ g_object_unref (connection2);
+
+ if (!normerr_base_setting) {
+ _set_error_missing_base_setting (error, priv->type);
+ return FALSE;
+ }
+ }
+ }
+
+ is_slave = FALSE;
+ if (priv->slave_type)
+ is_slave = _nm_setting_slave_type_is_valid (priv->slave_type, &slave_setting_type);
+
+ if (priv->slave_type && !is_slave) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("Unknown slave type '%s'"), priv->slave_type);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_SLAVE_TYPE);
+ return FALSE;
+ }
+
+ if (is_slave) {
+ if (!priv->master) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_MISSING_PROPERTY,
+ _("Slave connections need a valid '%s' property"), NM_SETTING_CONNECTION_MASTER);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_MASTER);
+ return FALSE;
+ }
+ if ( slave_setting_type
+ && connection
+ && !nm_connection_get_setting_by_name (connection, slave_setting_type))
+ normerr_slave_setting_type = slave_setting_type;
+ } else {
+ if (priv->master) {
+ const char *slave_type;
+ NMSetting *s_port;
+
+ if ( connection
+ && (slave_type = _nm_connection_detect_slave_type (connection, &s_port))) {
+ normerr_missing_slave_type = slave_type;
+ normerr_missing_slave_type_port = nm_setting_get_name (s_port);
+ } else {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_MISSING_PROPERTY,
+ _("Cannot set '%s' without '%s'"),
+ NM_SETTING_CONNECTION_MASTER, NM_SETTING_CONNECTION_SLAVE_TYPE);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_SLAVE_TYPE);
+ return FALSE;
+ }
+ }
+ }
+
+ /* *** errors above here should be always fatal, below NORMALIZABLE_ERROR *** */
+
+ if (!priv->uuid) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_MISSING_PROPERTY,
+ _("property is missing"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_UUID);
+ return NM_SETTING_VERIFY_NORMALIZABLE_ERROR;
+ }
+
+ if (normerr_base_type) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_MISSING_PROPERTY,
+ _("property type should be set to '%s'"),
+ nm_setting_get_name (normerr_base_type));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_TYPE);
+ return NM_SETTING_VERIFY_NORMALIZABLE_ERROR;
+ }
+
+ if (normerr_base_setting) {
+ _set_error_missing_base_setting (error, priv->type);
+ return NM_SETTING_VERIFY_NORMALIZABLE_ERROR;
+ }
+
+ if (normerr_slave_setting_type) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_MISSING_SETTING,
+ _("slave-type '%s' requires a '%s' setting in the connection"),
+ priv->slave_type, normerr_slave_setting_type);
+ g_prefix_error (error, "%s: ", normerr_slave_setting_type);
+ return NM_SETTING_VERIFY_NORMALIZABLE_ERROR;
+ }
+
+ if (normerr_missing_slave_type) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_MISSING_PROPERTY,
+ _("Detect a slave connection with '%s' set and a port type '%s'. '%s' should be set to '%s'"),
+ NM_SETTING_CONNECTION_MASTER, normerr_missing_slave_type_port,
+ NM_SETTING_CONNECTION_SLAVE_TYPE, normerr_missing_slave_type);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_SLAVE_TYPE);
+ return NM_SETTING_VERIFY_NORMALIZABLE_ERROR;
+ }
+
+ return TRUE;
+}
+
+static const char *
+find_virtual_interface_name (GVariant *connection_dict)
+{
+ GVariant *setting_dict;
+ const char *interface_name;
+
+ setting_dict = g_variant_lookup_value (connection_dict, NM_SETTING_BOND_SETTING_NAME, NM_VARIANT_TYPE_SETTING);
+ if (!setting_dict)
+ setting_dict = g_variant_lookup_value (connection_dict, NM_SETTING_BRIDGE_SETTING_NAME, NM_VARIANT_TYPE_SETTING);
+ if (!setting_dict)
+ setting_dict = g_variant_lookup_value (connection_dict, NM_SETTING_TEAM_SETTING_NAME, NM_VARIANT_TYPE_SETTING);
+ if (!setting_dict)
+ setting_dict = g_variant_lookup_value (connection_dict, NM_SETTING_VLAN_SETTING_NAME, NM_VARIANT_TYPE_SETTING);
+
+ if (!setting_dict)
+ return NULL;
+
+ /* All of the deprecated virtual interface name properties were named "interface-name". */
+ if (!g_variant_lookup (setting_dict, "interface-name", "&s", &interface_name))
+ return NULL;
+
+ return interface_name;
+}
+
+static void
+nm_setting_connection_set_interface_name (NMSetting *setting,
+ GVariant *connection_dict,
+ const char *property,
+ GVariant *value)
+{
+ const char *interface_name;
+
+ /* For compatibility reasons, if there is an invalid virtual interface name,
+ * we need to make verification fail, even if that virtual name would be
+ * overridden by a valid connection.interface-name.
+ */
+ interface_name = find_virtual_interface_name (connection_dict);
+ if (!interface_name || nm_utils_iface_valid_name (interface_name))
+ interface_name = g_variant_get_string (value, NULL);
+
+ g_object_set (G_OBJECT (setting),
+ NM_SETTING_CONNECTION_INTERFACE_NAME, interface_name,
+ NULL);
+}
+
+static void
+nm_setting_connection_no_interface_name (NMSetting *setting,
+ GVariant *connection_dict,
+ const char *property)
+{
+ const char *virtual_interface_name;
+
+ virtual_interface_name = find_virtual_interface_name (connection_dict);
+ g_object_set (G_OBJECT (setting),
+ NM_SETTING_CONNECTION_INTERFACE_NAME, virtual_interface_name,
+ NULL);
+}
+
+static gboolean
+compare_property (NMSetting *setting,
+ NMSetting *other,
+ const GParamSpec *prop_spec,
+ NMSettingCompareFlags flags)
+{
+ /* Handle ignore ID */
+ if ( (flags & NM_SETTING_COMPARE_FLAG_IGNORE_ID)
+ && g_strcmp0 (prop_spec->name, NM_SETTING_CONNECTION_ID) == 0)
+ return TRUE;
+
+ /* Handle ignore timestamp */
+ if ( (flags & NM_SETTING_COMPARE_FLAG_IGNORE_TIMESTAMP)
+ && g_strcmp0 (prop_spec->name, NM_SETTING_CONNECTION_TIMESTAMP) == 0)
+ return TRUE;
+
+ /* Otherwise chain up to parent to handle generic compare */
+ return NM_SETTING_CLASS (nm_setting_connection_parent_class)->compare_property (setting, other, prop_spec, flags);
+}
+
+static void
+nm_setting_connection_init (NMSettingConnection *setting)
+{
+}
+
+static void
+finalize (GObject *object)
+{
+ NMSettingConnectionPrivate *priv = NM_SETTING_CONNECTION_GET_PRIVATE (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);
+ 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);
+}
+
+static GSList *
+perm_strv_to_permlist (char **strv)
+{
+ GSList *list = NULL;
+ int i;
+
+ if (!strv)
+ return NULL;
+
+ for (i = 0; strv[i]; i++) {
+ Permission *p;
+
+ p = permission_new_from_str (strv[i]);
+ if (p)
+ list = g_slist_append (list, p);
+ }
+
+ return list;
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ NMSettingConnectionPrivate *priv = NM_SETTING_CONNECTION_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_ID:
+ g_free (priv->id);
+ priv->id = g_value_dup_string (value);
+ break;
+ case PROP_UUID:
+ 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:
+ g_slist_free_full (priv->permissions, (GDestroyNotify) permission_free);
+ priv->permissions = perm_strv_to_permlist (g_value_get_boxed (value));
+ break;
+ case PROP_AUTOCONNECT:
+ priv->autoconnect = g_value_get_boolean (value);
+ break;
+ case PROP_AUTOCONNECT_PRIORITY:
+ priv->autoconnect_priority = g_value_get_int (value);
+ break;
+ case PROP_TIMESTAMP:
+ priv->timestamp = g_value_get_uint64 (value);
+ break;
+ case PROP_READ_ONLY:
+ priv->read_only = g_value_get_boolean (value);
+ break;
+ case PROP_ZONE:
+ g_free (priv->zone);
+ priv->zone = g_value_dup_string (value);
+ break;
+ case PROP_MASTER:
+ g_free (priv->master);
+ priv->master = g_value_dup_string (value);
+ break;
+ case PROP_SLAVE_TYPE:
+ g_free (priv->slave_type);
+ priv->slave_type = g_value_dup_string (value);
+ break;
+ case PROP_SECONDARIES:
+ g_slist_free_full (priv->secondaries, g_free);
+ priv->secondaries = _nm_utils_strv_to_slist (g_value_get_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;
+ }
+}
+
+static char **
+perm_permlist_to_strv (GSList *permlist)
+{
+ GPtrArray *strings;
+ GSList *iter;
+
+ strings = g_ptr_array_new ();
+ for (iter = permlist; iter; iter = g_slist_next (iter))
+ g_ptr_array_add (strings, permission_to_string ((Permission *) iter->data));
+ g_ptr_array_add (strings, NULL);
+
+ return (char **) g_ptr_array_free (strings, FALSE);
+}
+
+static void
+get_property (GObject *object, guint prop_id,
+ GValue *value, GParamSpec *pspec)
+{
+ NMSettingConnection *setting = NM_SETTING_CONNECTION (object);
+ NMSettingConnectionPrivate *priv = NM_SETTING_CONNECTION_GET_PRIVATE (setting);
+
+ switch (prop_id) {
+ case PROP_ID:
+ g_value_set_string (value, nm_setting_connection_get_id (setting));
+ break;
+ 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;
+ case PROP_PERMISSIONS:
+ g_value_take_boxed (value, perm_permlist_to_strv (priv->permissions));
+ break;
+ case PROP_AUTOCONNECT:
+ g_value_set_boolean (value, nm_setting_connection_get_autoconnect (setting));
+ break;
+ case PROP_AUTOCONNECT_PRIORITY:
+ g_value_set_int (value, nm_setting_connection_get_autoconnect_priority (setting));
+ break;
+ case PROP_TIMESTAMP:
+ g_value_set_uint64 (value, nm_setting_connection_get_timestamp (setting));
+ break;
+ case PROP_READ_ONLY:
+ g_value_set_boolean (value, nm_setting_connection_get_read_only (setting));
+ break;
+ case PROP_ZONE:
+ g_value_set_string (value, nm_setting_connection_get_zone (setting));
+ break;
+ case PROP_MASTER:
+ g_value_set_string (value, nm_setting_connection_get_master (setting));
+ break;
+ case PROP_SLAVE_TYPE:
+ g_value_set_string (value, nm_setting_connection_get_slave_type (setting));
+ break;
+ case PROP_SECONDARIES:
+ g_value_take_boxed (value, _nm_utils_slist_to_strv (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;
+ }
+}
+
+static void
+nm_setting_connection_class_init (NMSettingConnectionClass *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 (NMSettingConnectionPrivate));
+
+ /* virtual methods */
+ object_class->set_property = set_property;
+ object_class->get_property = get_property;
+ object_class->finalize = finalize;
+ parent_class->verify = verify;
+ parent_class->compare_property = compare_property;
+
+ /* Properties */
+
+ /**
+ * NMSettingConnection:id:
+ *
+ * A human readable unique identifier for the connection, like "Work Wi-Fi"
+ * or "T-Mobile 3G".
+ **/
+ /* ---ifcfg-rh---
+ * property: id
+ * variable: NAME(+)
+ * description: User friendly name for the connection profile.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_ID,
+ g_param_spec_string (NM_SETTING_CONNECTION_ID, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingConnection:uuid:
+ *
+ * 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, 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
+ * be generated by nm_utils_uuid_generate() or
+ * nm_utils_uuid_generate_from_string().
+ **/
+ /* ---ifcfg-rh---
+ * property: uuid
+ * variable: UUID(+)
+ * description: UUID for the connection profile. When missing, NetworkManager
+ * creates the UUID itself (by hashing the file).
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_UUID,
+ g_param_spec_string (NM_SETTING_CONNECTION_UUID, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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 software devices this specifies the name of the created device.
+ *
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: interface-name
+ * variable: DEVICE
+ * description: Interface name of the device this profile is bound to. The variable
+ * can be left out when the profile should apply for more devices. Note that DEVICE
+ * can be required for some connection types.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_INTERFACE_NAME,
+ g_param_spec_string (NM_SETTING_CONNECTION_INTERFACE_NAME, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+ _nm_setting_class_override_property (parent_class, NM_SETTING_CONNECTION_INTERFACE_NAME,
+ G_VARIANT_TYPE_STRING,
+ NULL,
+ nm_setting_connection_set_interface_name,
+ nm_setting_connection_no_interface_name);
+
+ /**
+ * NMSettingConnection:type:
+ *
+ * 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).
+ **/
+ /* ---ifcfg-rh---
+ * property: type
+ * variable: TYPE (DEVICETYPE, DEVICE)
+ * values: Ethernet, Wireless, InfiniBand, Bridge, Bond, Vlan, Team, TeamPort
+ * description: Base type of the connection. DEVICETYPE is used for teaming
+ * connections.
+ * example: TYPE=Ethernet; TYPE=Bond; TYPE=Bridge; DEVICETYPE=TeamPort
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_TYPE,
+ g_param_spec_string (NM_SETTING_CONNECTION_TYPE, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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
+ * 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".
+ *
+ * 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.
+ */
+ /* ---ifcfg-rh---
+ * property: permissions
+ * variable: USERS(+)
+ * description: USERS restrict the access for this conenction to certain
+ * users only.
+ * example: USERS="joe bob"
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PERMISSIONS,
+ g_param_spec_boxed (NM_SETTING_CONNECTION_PERMISSIONS, "", "",
+ G_TYPE_STRV,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingConnection:autoconnect:
+ *
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: autoconnect
+ * variable: ONBOOT
+ * default: yes
+ * description: Whether the connection should be autoconnected (not only while booting).
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_AUTOCONNECT,
+ g_param_spec_boolean (NM_SETTING_CONNECTION_AUTOCONNECT, "", "",
+ TRUE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingConnection:autoconnect-priority:
+ *
+ * The autoconnect priority. If the connection is set to autoconnect,
+ * connections with higher priority will be preferred. Defaults to 0.
+ * The higher number means higher priority.
+ **/
+ /* ---ifcfg-rh---
+ * property: autoconnect-priority
+ * variable: AUTOCONNECT_PRIORITY(+)
+ * values: -999 to 999
+ * default: 0
+ * description: Connection priority for automatic activation. Connections with
+ * higher numbers are preferred when selecting profiles for automatic activation.
+ * example: AUTOCONNECT_PRIORITY=20
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_AUTOCONNECT_PRIORITY,
+ g_param_spec_int (NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY, "", "",
+ NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_MIN,
+ NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_MAX,
+ NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_DEFAULT,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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, "", "",
+ 0, G_MAXUINT64, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingConnection:read-only:
+ *
+ * %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,
+ g_param_spec_boolean (NM_SETTING_CONNECTION_READ_ONLY, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: zone
+ * variable: ZONE(+)
+ * description: Trust level of this connection. The string is usually used
+ * for a firewall.
+ * example: ZONE=Work
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_ZONE,
+ g_param_spec_string (NM_SETTING_CONNECTION_ZONE, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingConnection:master:
+ *
+ * Interface name of the master device or UUID of the master connection.
+ **/
+ /* ---ifcfg-rh---
+ * property: master
+ * variable: MASTER, TEAM_MASTER, BRIDGE
+ * description: Reference to master connection. The variable used depends on
+ * the connection type.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_MASTER,
+ g_param_spec_string (NM_SETTING_CONNECTION_MASTER, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingConnection:slave-type:
+ *
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: slave-type
+ * variable: MASTER, TEAM_MASTER, DEVICETYPE, BRIDGE
+ * description: Slave type doesn't map directly to a variable, but it is
+ * recognized using different variables. MASTER for bonding,
+ * TEAM_MASTER and DEVICETYPE for teaming, BRIDGE for bridging.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_SLAVE_TYPE,
+ g_param_spec_string (NM_SETTING_CONNECTION_SLAVE_TYPE, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingConnection:secondaries:
+ *
+ * List of connection UUIDs that should be activated when the base
+ * connection itself is activated. Currently only VPN connections are
+ * supported.
+ **/
+ /* ---ifcfg-rh---
+ * property: secondaries
+ * variable: SECONDARY_UUIDS(+)
+ * description: UUID of VPN connections that should be activated
+ * together with this connection.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_SECONDARIES,
+ g_param_spec_boxed (NM_SETTING_CONNECTION_SECONDARIES, "", "",
+ G_TYPE_STRV,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: gateway-ping-timeout
+ * variable: GATEWAY_PING_TIMEOUT(+)
+ * default: 0
+ * description: If greater than zero, the IP connectivity will be checked by
+ * pinging the gateway and waiting for the specified timeout (in seconds).
+ * example: GATEWAY_PING_TIMEOUT=5
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_GATEWAY_PING_TIMEOUT,
+ g_param_spec_uint (NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT, "", "",
+ 0, 30, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/libnm-core/nm-setting-connection.h b/libnm-core/nm-setting-connection.h
new file mode 100644
index 000000000..d1ad0fe1e
--- /dev/null
+++ b/libnm-core/nm-setting-connection.h
@@ -0,0 +1,125 @@
+/* -*- 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 2007 - 2014 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ */
+
+#ifndef __NM_SETTING_CONNECTION_H__
+#define __NM_SETTING_CONNECTION_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_CONNECTION (nm_setting_connection_get_type ())
+#define NM_SETTING_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SETTING_CONNECTION, NMSettingConnection))
+#define NM_SETTING_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SETTING_CONNECTION, NMSettingConnectionClass))
+#define NM_IS_SETTING_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SETTING_CONNECTION))
+#define NM_IS_SETTING_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_SETTING_CONNECTION))
+#define NM_SETTING_CONNECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SETTING_CONNECTION, NMSettingConnectionClass))
+
+#define NM_SETTING_CONNECTION_SETTING_NAME "connection"
+
+#define NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_MIN -999
+#define NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_MAX 999
+#define NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_DEFAULT 0
+
+#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_AUTOCONNECT_PRIORITY "autoconnect-priority"
+#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:
+ *
+ * The NMSettingConnection struct contains only private data.
+ * It should only be accessed through the functions described below.
+ */
+struct _NMSettingConnection {
+ NMSetting parent;
+};
+
+typedef struct {
+ NMSettingClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMSettingConnectionClass;
+
+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);
+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);
+gint nm_setting_connection_get_autoconnect_priority (NMSettingConnection *setting);
+guint64 nm_setting_connection_get_timestamp (NMSettingConnection *setting);
+gboolean nm_setting_connection_get_read_only (NMSettingConnection *setting);
+
+guint32 nm_setting_connection_get_num_permissions (NMSettingConnection *setting);
+gboolean nm_setting_connection_get_permission (NMSettingConnection *setting,
+ guint32 idx,
+ const char **out_ptype,
+ const char **out_pitem,
+ const char **out_detail);
+const char *nm_setting_connection_get_zone (NMSettingConnection *setting);
+gboolean nm_setting_connection_permissions_user_allowed (NMSettingConnection *setting, const char *uname);
+gboolean nm_setting_connection_add_permission (NMSettingConnection *setting,
+ const char *ptype,
+ const char *pitem,
+ const char *detail);
+void nm_setting_connection_remove_permission (NMSettingConnection *setting,
+ guint32 idx);
+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);
+gboolean nm_setting_connection_remove_secondary_by_value (NMSettingConnection *setting, const char *sec_uuid);
+
+guint32 nm_setting_connection_get_gateway_ping_timeout (NMSettingConnection *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_CONNECTION_H__ */
diff --git a/libnm-core/nm-setting-dcb.c b/libnm-core/nm-setting-dcb.c
new file mode 100644
index 000000000..a4fa00c84
--- /dev/null
+++ b/libnm-core/nm-setting-dcb.c
@@ -0,0 +1,1280 @@
+/* -*- 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 <string.h>
+#include <glib/gi18n-lib.h>
+
+#include "nm-setting-dcb.h"
+#include "nm-utils.h"
+#include "nm-utils-private.h"
+#include "nm-setting-private.h"
+#include "nm-core-enum-types.h"
+
+/**
+ * SECTION:nm-setting-dcb
+ * @short_description: Connection properties for Data Center Bridging
+ *
+ * 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.
+ **/
+
+G_DEFINE_TYPE_WITH_CODE (NMSettingDcb, nm_setting_dcb, NM_TYPE_SETTING,
+ _nm_register_setting (DCB, 2))
+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
+ **/
+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
+ **/
+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
+ **/
+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
+ **/
+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
+ **/
+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
+ **/
+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
+ **/
+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
+ **/
+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
+ **/
+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
+ **/
+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.
+ **/
+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
+ **/
+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.
+ **/
+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.
+ **/
+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.
+ **/
+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.
+ **/
+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.
+ **/
+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.
+ **/
+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.
+ **/
+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.
+ **/
+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.
+ **/
+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.
+ **/
+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_CONNECTION_ERROR,
+ NM_CONNECTION_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_CONNECTION_ERROR,
+ NM_CONNECTION_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_CONNECTION_ERROR,
+ NM_CONNECTION_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_CONNECTION_ERROR,
+ NM_CONNECTION_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_CONNECTION_ERROR,
+ NM_CONNECTION_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_CONNECTION_ERROR,
+ NM_CONNECTION_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_CONNECTION_ERROR,
+ NM_CONNECTION_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, NMConnection *connection, 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_CONNECTION_ERROR,
+ NM_CONNECTION_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_CONNECTION_ERROR,
+ NM_CONNECTION_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)
+{
+}
+
+G_STATIC_ASSERT (sizeof (guint) == sizeof (gboolean));
+
+static inline void
+set_array_from_gvalue (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_ARRAY_FROM_GVALUE(v, a) set_array_from_gvalue (v, a, G_N_ELEMENTS (a))
+
+static inline void
+set_gvalue_from_array (GValue *v, uint *a, size_t len)
+{
+ GArray *src = g_array_sized_new (FALSE, TRUE, sizeof (guint), len);
+
+ g_array_append_vals (src, a, len);
+ g_value_take_boxed (v, src);
+}
+
+#define SET_GVALUE_FROM_ARRAY(v, a) set_gvalue_from_array (v, a, G_N_ELEMENTS (a))
+
+static GVariant *
+_nm_setting_dcb_uint_array_to_dbus (const GValue *prop_value)
+{
+ GArray *src = g_value_get_boxed (prop_value);
+
+ return g_variant_new_fixed_array (G_VARIANT_TYPE_UINT32, src->data, src->len, sizeof (guint32));
+}
+
+static void
+_nm_setting_dcb_uint_array_from_dbus (GVariant *dbus_value,
+ GValue *prop_value)
+{
+ gconstpointer array;
+ gsize length;
+
+ array = g_variant_get_fixed_array (dbus_value, &length, sizeof (guint32));
+ set_gvalue_from_array (prop_value, (guint *) array, length);
+}
+
+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_flags (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_flags (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_flags (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_flags (value);
+ break;
+ case PROP_PFC:
+ SET_ARRAY_FROM_GVALUE (value, priv->pfc);
+ break;
+ case PROP_PRIORITY_GROUP_FLAGS:
+ priv->priority_group_flags = g_value_get_flags (value);
+ break;
+ case PROP_PRIORITY_GROUP_ID:
+ SET_ARRAY_FROM_GVALUE (value, priv->priority_group_id);
+ break;
+ case PROP_PRIORITY_GROUP_BANDWIDTH:
+ SET_ARRAY_FROM_GVALUE (value, priv->priority_group_bandwidth);
+ break;
+ case PROP_PRIORITY_BANDWIDTH:
+ SET_ARRAY_FROM_GVALUE (value, priv->priority_bandwidth);
+ break;
+ case PROP_PRIORITY_STRICT:
+ SET_ARRAY_FROM_GVALUE (value, priv->priority_strict);
+ break;
+ case PROP_PRIORITY_TRAFFIC_CLASS:
+ SET_ARRAY_FROM_GVALUE (value, priv->priority_traffic_class);
+ 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)
+{
+ 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_flags (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_flags (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_flags (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_flags (value, priv->pfc_flags);
+ break;
+ case PROP_PFC:
+ SET_GVALUE_FROM_ARRAY (value, priv->pfc);
+ break;
+ case PROP_PRIORITY_GROUP_FLAGS:
+ g_value_set_flags (value, priv->priority_group_flags);
+ break;
+ case PROP_PRIORITY_GROUP_ID:
+ SET_GVALUE_FROM_ARRAY (value, priv->priority_group_id);
+ break;
+ case PROP_PRIORITY_GROUP_BANDWIDTH:
+ SET_GVALUE_FROM_ARRAY (value, priv->priority_group_bandwidth);
+ break;
+ case PROP_PRIORITY_BANDWIDTH:
+ SET_GVALUE_FROM_ARRAY (value, priv->priority_bandwidth);
+ break;
+ case PROP_PRIORITY_STRICT:
+ SET_GVALUE_FROM_ARRAY (value, priv->priority_strict);
+ break;
+ case PROP_PRIORITY_TRAFFIC_CLASS:
+ SET_GVALUE_FROM_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.
+ **/
+ /* ---ifcfg-rh---
+ * property: app-fcoe-flags
+ * variable: DCB_APP_FCOE_ENABLE, DCB_APP_FCOE_ADVERTISE, DCB_APP_FCOE_WILLING
+ * description: FCOE flags.
+ * default: no
+ * example: DCB_APP_FCOE_ENABLE=yes DCB_APP_FCOE_ADVERTISE=yes
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_APP_FCOE_FLAGS,
+ g_param_spec_flags (NM_SETTING_DCB_APP_FCOE_FLAGS, "", "",
+ NM_TYPE_SETTING_DCB_FLAGS,
+ NM_SETTING_DCB_FLAG_NONE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: app-fcoe-priority
+ * variable: DCB_APP_FCOE_PRIORITY
+ * values: 0 - 7
+ * description: Priority of FCoE frames.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_APP_FCOE_PRIORITY,
+ g_param_spec_int (NM_SETTING_DCB_APP_FCOE_PRIORITY, "", "",
+ -1, 7, -1,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingDcb:app-fcoe-mode:
+ *
+ * The FCoE controller mode; either %NM_SETTING_DCB_FCOE_MODE_FABRIC
+ * (default) or %NM_SETTING_DCB_FCOE_MODE_VN2VN.
+ **/
+ /* ---ifcfg-rh---
+ * property: app-fcoe-mode
+ * variable: DCB_APP_FCOE_MODE
+ * values: fabric, vn2vn
+ * default: fabric
+ * description: FCoE controller mode.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_APP_FCOE_MODE,
+ g_param_spec_string (NM_SETTING_DCB_APP_FCOE_MODE, "", "",
+ NM_SETTING_DCB_FCOE_MODE_FABRIC,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: app-iscsi-flags
+ * variable: DCB_APP_ISCSI_ENABLE, DCB_APP_ISCSI_ADVERTISE, DCB_APP_ISCSI_WILLING
+ * default: no
+ * description: iSCSI flags.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_APP_ISCSI_FLAGS,
+ g_param_spec_flags (NM_SETTING_DCB_APP_ISCSI_FLAGS, "", "",
+ NM_TYPE_SETTING_DCB_FLAGS,
+ NM_SETTING_DCB_FLAG_NONE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: app-iscsi-priority
+ * variable: DCB_APP_ISCSI_PRIORITY
+ * values: 0 - 7
+ * description: Priority of iSCSI frames.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_APP_ISCSI_PRIORITY,
+ g_param_spec_int (NM_SETTING_DCB_APP_ISCSI_PRIORITY, "", "",
+ -1, 7, -1,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: app-fip-flags
+ * variable: DCB_APP_FIP_ENABLE, DCB_APP_FIP_ADVERTISE, DCB_APP_FIP_WILLING
+ * default: no
+ * description: FIP flags.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_APP_FIP_FLAGS,
+ g_param_spec_flags (NM_SETTING_DCB_APP_FIP_FLAGS, "", "",
+ NM_TYPE_SETTING_DCB_FLAGS,
+ NM_SETTING_DCB_FLAG_NONE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: app-fip-priority
+ * variable: DCB_APP_FIP_PRIORITY
+ * values: 0 - 7
+ * description: Priority of FIP frames.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_APP_FIP_PRIORITY,
+ g_param_spec_int (NM_SETTING_DCB_APP_FIP_PRIORITY, "", "",
+ -1, 7, -1,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: priority-flow-control-flags
+ * variable: DCB_PFC_ENABLE, DCB_PFC_ADVERTISE, DCB_PFC_WILLING
+ * default: no
+ * description: Priority flow control flags.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PFC_FLAGS,
+ g_param_spec_flags (NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS, "", "",
+ NM_TYPE_SETTING_DCB_FLAGS,
+ NM_SETTING_DCB_FLAG_NONE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingDcb:priority-flow-control:
+ *
+ * An array of 8 boolean 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.
+ *
+ * Element-type: gboolean
+ **/
+ /* ---ifcfg-rh---
+ * property: priority-flow-control
+ * variable: DCB_PFC_UP
+ * description: Priority flow control values. String of 8 "0" and "1", where "0".
+ * means "do not transmit priority pause", "1" means "transmit pause".
+ * example: DCB_PFC_UP=01101110
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PFC,
+ g_param_spec_boxed (NM_SETTING_DCB_PRIORITY_FLOW_CONTROL, "", "",
+ G_TYPE_ARRAY,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ _nm_setting_class_transform_property (parent_class, NM_SETTING_DCB_PRIORITY_FLOW_CONTROL,
+ G_VARIANT_TYPE ("au"),
+ _nm_setting_dcb_uint_array_to_dbus,
+ _nm_setting_dcb_uint_array_from_dbus);
+
+ /**
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: priority-group-flags
+ * variable: DCB_PG_ENABLE, DCB_PG_ADVERTISE, DCB_PG_WILLING
+ * default: no
+ * description: Priority groups flags.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PRIORITY_GROUP_FLAGS,
+ g_param_spec_flags (NM_SETTING_DCB_PRIORITY_GROUP_FLAGS, "", "",
+ NM_TYPE_SETTING_DCB_FLAGS,
+ NM_SETTING_DCB_FLAG_NONE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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.
+ *
+ * Element-type: guint
+ **/
+ /* ---ifcfg-rh---
+ * property: priority-group-id
+ * variable: DCB_PG_ID
+ * description: Priority groups values. String of eight priorities (0 - 7) or "f"
+ * (unrestricted).
+ * example: DCB_PG_ID=1205f173
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PRIORITY_GROUP_ID,
+ g_param_spec_boxed (NM_SETTING_DCB_PRIORITY_GROUP_ID, "", "",
+ G_TYPE_ARRAY,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ _nm_setting_class_transform_property (parent_class, NM_SETTING_DCB_PRIORITY_GROUP_ID,
+ G_VARIANT_TYPE ("au"),
+ _nm_setting_dcb_uint_array_to_dbus,
+ _nm_setting_dcb_uint_array_from_dbus);
+
+ /**
+ * 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.
+ *
+ * Element-type: guint
+ **/
+ /* ---ifcfg-rh---
+ * property: priority-group-bandwidth
+ * variable: DCB_PG_PCT
+ * description: Priority groups values. Eight bandwidths (in percent), separated with commas.
+ * example: DCB_PG_PCT=10,5,10,15,10,10,10,30
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PRIORITY_GROUP_BANDWIDTH,
+ g_param_spec_boxed (NM_SETTING_DCB_PRIORITY_GROUP_BANDWIDTH, "", "",
+ G_TYPE_ARRAY,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ _nm_setting_class_transform_property (parent_class, NM_SETTING_DCB_PRIORITY_GROUP_BANDWIDTH,
+ G_VARIANT_TYPE ("au"),
+ _nm_setting_dcb_uint_array_to_dbus,
+ _nm_setting_dcb_uint_array_from_dbus);
+
+ /**
+ * 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.
+ *
+ * Element-type: guint
+ **/
+ /* ---ifcfg-rh---
+ * property: priority-bandwidth
+ * variable: DCB_PG_UPPCT
+ * description: Priority values. Eight bandwidths (in percent), separated with commas.
+ * The sum of the numbers must be 100.
+ * example: DCB_PG_UPPCT=7,13,10,10,15,15,10,20
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PRIORITY_BANDWIDTH,
+ g_param_spec_boxed (NM_SETTING_DCB_PRIORITY_BANDWIDTH, "", "",
+ G_TYPE_ARRAY,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ _nm_setting_class_transform_property (parent_class, NM_SETTING_DCB_PRIORITY_BANDWIDTH,
+ G_VARIANT_TYPE ("au"),
+ _nm_setting_dcb_uint_array_to_dbus,
+ _nm_setting_dcb_uint_array_from_dbus);
+
+ /**
+ * NMSettingDcb:priority-strict-bandwidth:
+ *
+ * An array of 8 boolean 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.
+ *
+ * Element-type: gboolean
+ **/
+ /* ---ifcfg-rh---
+ * property: priority-strict-bandwidth
+ * variable: DCB_PG_STRICT
+ * description: Priority values. String of eight "0" or "1", where "0" means
+ * "may not utilize all bandwidth", "1" means "may utilize all bandwidth".
+ * example: DCB_PG_STRICT=01101110
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PRIORITY_STRICT,
+ g_param_spec_boxed (NM_SETTING_DCB_PRIORITY_STRICT_BANDWIDTH, "", "",
+ G_TYPE_ARRAY,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ _nm_setting_class_transform_property (parent_class, NM_SETTING_DCB_PRIORITY_STRICT_BANDWIDTH,
+ G_VARIANT_TYPE ("au"),
+ _nm_setting_dcb_uint_array_to_dbus,
+ _nm_setting_dcb_uint_array_from_dbus);
+
+ /**
+ * 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.
+ *
+ * Element-type: guint
+ **/
+ /* ---ifcfg-rh---
+ * property: priority-traffic-class
+ * variable: DCB_PG_UP2TC
+ * description: Priority values. String of eight trafic class values (0 - 7).
+ * example: DCB_PG_UP2TC=01623701
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PRIORITY_TRAFFIC_CLASS,
+ g_param_spec_boxed (NM_SETTING_DCB_PRIORITY_TRAFFIC_CLASS, "", "",
+ G_TYPE_ARRAY,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ _nm_setting_class_transform_property (parent_class, NM_SETTING_DCB_PRIORITY_TRAFFIC_CLASS,
+ G_VARIANT_TYPE ("au"),
+ _nm_setting_dcb_uint_array_to_dbus,
+ _nm_setting_dcb_uint_array_from_dbus);
+}
diff --git a/libnm-core/nm-setting-dcb.h b/libnm-core/nm-setting-dcb.h
new file mode 100644
index 000000000..e5bc4bcfa
--- /dev/null
+++ b/libnm-core/nm-setting-dcb.h
@@ -0,0 +1,164 @@
+/* -*- 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_DCB_H__
+#define __NM_SETTING_DCB_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#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"
+
+/**
+ * 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.
+ **/
+typedef enum { /*< flags >*/
+ 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)
+ */
+#define NM_SETTING_DCB_FCOE_MODE_FABRIC "fabric"
+
+/**
+ * NM_SETTING_DCB_FCOE_MODE_VN2VN:
+ *
+ * Indicates that the FCoE controller should use "VN2VN" mode.
+ */
+#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"
+
+
+struct _NMSettingDcb {
+ NMSetting parent;
+};
+
+typedef struct {
+ NMSettingClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMSettingDcbClass;
+
+GType nm_setting_dcb_get_type (void);
+
+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-core/nm-setting-generic.c b/libnm-core/nm-setting-generic.c
new file mode 100644
index 000000000..35deb2de0
--- /dev/null
+++ b/libnm-core/nm-setting-generic.c
@@ -0,0 +1,73 @@
+/* -*- 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
+ *
+ * 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.
+ **/
+
+G_DEFINE_TYPE_WITH_CODE (NMSettingGeneric, nm_setting_generic, NM_TYPE_SETTING,
+ _nm_register_setting (GENERIC, 1))
+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
+ **/
+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-core/nm-setting-generic.h b/libnm-core/nm-setting-generic.h
new file mode 100644
index 000000000..7a209da25
--- /dev/null
+++ b/libnm-core/nm-setting-generic.h
@@ -0,0 +1,59 @@
+/* -*- 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__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#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"
+
+struct _NMSettingGeneric {
+ NMSetting parent;
+};
+
+typedef struct {
+ NMSettingClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMSettingGenericClass;
+
+GType nm_setting_generic_get_type (void);
+
+NMSetting * nm_setting_generic_new (void);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_GENERIC_H__ */
diff --git a/libnm-core/nm-setting-gsm.c b/libnm-core/nm-setting-gsm.c
new file mode 100644
index 000000000..22f8cdbad
--- /dev/null
+++ b/libnm-core/nm-setting-gsm.c
@@ -0,0 +1,616 @@
+/* -*- 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 2007 - 2013 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <glib/gi18n-lib.h>
+
+#include "nm-setting-gsm.h"
+#include "nm-utils.h"
+#include "nm-setting-private.h"
+#include "nm-core-enum-types.h"
+
+/**
+ * SECTION:nm-setting-gsm
+ * @short_description: Describes GSM/3GPP-based mobile broadband properties
+ *
+ * The #NMSettingGsm object is a #NMSetting subclass that describes
+ * properties that allow connections to 3GPP-based mobile broadband
+ * networks, including those using GPRS/EDGE and UMTS/HSPA technology.
+ */
+
+G_DEFINE_TYPE_WITH_CODE (NMSettingGsm, nm_setting_gsm, NM_TYPE_SETTING,
+ _nm_register_setting (GSM, 1))
+NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_GSM)
+
+#define NM_SETTING_GSM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_GSM, NMSettingGsmPrivate))
+
+typedef struct {
+ char *number; /* For dialing, duh */
+ char *username;
+ char *password;
+ NMSettingSecretFlags password_flags;
+
+ char *apn; /* NULL for dynamic */
+ char *network_id; /* for manual registration or NULL for automatic */
+
+ char *pin;
+ NMSettingSecretFlags pin_flags;
+
+ gboolean home_only;
+} NMSettingGsmPrivate;
+
+enum {
+ PROP_0,
+ PROP_NUMBER,
+ PROP_USERNAME,
+ PROP_PASSWORD,
+ PROP_PASSWORD_FLAGS,
+ PROP_APN,
+ PROP_NETWORK_ID,
+ PROP_PIN,
+ PROP_PIN_FLAGS,
+ PROP_HOME_ONLY,
+
+ LAST_PROP
+};
+
+/**
+ * nm_setting_gsm_new:
+ *
+ * Creates a new #NMSettingGsm object with default values.
+ *
+ * Returns: the new empty #NMSettingGsm object
+ **/
+NMSetting *
+nm_setting_gsm_new (void)
+{
+ return (NMSetting *) g_object_new (NM_TYPE_SETTING_GSM, NULL);
+}
+
+/**
+ * nm_setting_gsm_get_number:
+ * @setting: the #NMSettingGsm
+ *
+ * Returns: the #NMSettingGsm:number property of the setting
+ **/
+const char *
+nm_setting_gsm_get_number (NMSettingGsm *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_GSM (setting), NULL);
+
+ return NM_SETTING_GSM_GET_PRIVATE (setting)->number;
+}
+
+/**
+ * nm_setting_gsm_get_username:
+ * @setting: the #NMSettingGsm
+ *
+ * Returns: the #NMSettingGsm:username property of the setting
+ **/
+const char *
+nm_setting_gsm_get_username (NMSettingGsm *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_GSM (setting), NULL);
+
+ return NM_SETTING_GSM_GET_PRIVATE (setting)->username;
+}
+
+/**
+ * nm_setting_gsm_get_password:
+ * @setting: the #NMSettingGsm
+ *
+ * Returns: the #NMSettingGsm:password property of the setting
+ **/
+const char *
+nm_setting_gsm_get_password (NMSettingGsm *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_GSM (setting), NULL);
+
+ return NM_SETTING_GSM_GET_PRIVATE (setting)->password;
+}
+
+/**
+ * nm_setting_gsm_get_password_flags:
+ * @setting: the #NMSettingGsm
+ *
+ * Returns: the #NMSettingSecretFlags pertaining to the #NMSettingGsm:password
+ **/
+NMSettingSecretFlags
+nm_setting_gsm_get_password_flags (NMSettingGsm *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_GSM (setting), NM_SETTING_SECRET_FLAG_NONE);
+
+ return NM_SETTING_GSM_GET_PRIVATE (setting)->password_flags;
+}
+
+/**
+ * nm_setting_gsm_get_apn:
+ * @setting: the #NMSettingGsm
+ *
+ * Returns: the #NMSettingGsm:apn property of the setting
+ **/
+const char *
+nm_setting_gsm_get_apn (NMSettingGsm *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_GSM (setting), NULL);
+
+ return NM_SETTING_GSM_GET_PRIVATE (setting)->apn;
+}
+
+/**
+ * nm_setting_gsm_get_network_id:
+ * @setting: the #NMSettingGsm
+ *
+ * Returns: the #NMSettingGsm:network-id property of the setting
+ **/
+const char *
+nm_setting_gsm_get_network_id (NMSettingGsm *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_GSM (setting), NULL);
+
+ return NM_SETTING_GSM_GET_PRIVATE (setting)->network_id;
+}
+
+/**
+ * nm_setting_gsm_get_pin:
+ * @setting: the #NMSettingGsm
+ *
+ * Returns: the #NMSettingGsm:pin property of the setting
+ **/
+const char *
+nm_setting_gsm_get_pin (NMSettingGsm *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_GSM (setting), NULL);
+
+ return NM_SETTING_GSM_GET_PRIVATE (setting)->pin;
+}
+
+/**
+ * nm_setting_gsm_get_pin_flags:
+ * @setting: the #NMSettingGsm
+ *
+ * Returns: the #NMSettingSecretFlags pertaining to the #NMSettingGsm:pin
+ **/
+NMSettingSecretFlags
+nm_setting_gsm_get_pin_flags (NMSettingGsm *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_GSM (setting), NM_SETTING_SECRET_FLAG_NONE);
+
+ return NM_SETTING_GSM_GET_PRIVATE (setting)->pin_flags;
+}
+
+/**
+ * nm_setting_gsm_get_home_only:
+ * @setting: the #NMSettingGsm
+ *
+ * Returns: the #NMSettingGsm:home-only property of the setting
+ **/
+gboolean
+nm_setting_gsm_get_home_only (NMSettingGsm *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_GSM (setting), FALSE);
+
+ return NM_SETTING_GSM_GET_PRIVATE (setting)->home_only;
+}
+
+static gboolean
+verify (NMSetting *setting, NMConnection *connection, GError **error)
+{
+ NMSettingGsmPrivate *priv = NM_SETTING_GSM_GET_PRIVATE (setting);
+
+ if (priv->number && !priv->number[0]) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("property is empty"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_GSM_SETTING_NAME, NM_SETTING_GSM_NUMBER);
+ return FALSE;
+ }
+
+ if (priv->apn) {
+ guint32 apn_len = strlen (priv->apn);
+ guint32 i;
+
+ if (apn_len < 1 || apn_len > 64) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("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;
+ }
+
+ /* APNs roughly follow the same rules as DNS domain names. Allowed
+ * characters are a-z, 0-9, . and -. GSM 03.03 Section 9.1 states:
+ *
+ * The syntax of the APN shall follow the Name Syntax defined in
+ * RFC 2181 [14] and RFC 1035 [15]. The APN consists of one or
+ * more labels. Each label is coded as one octet length field
+ * followed by that number of octets coded as 8 bit ASCII characters.
+ * Following RFC 1035 [15] the labels should consist only of the
+ * alphabetic characters (A-Z and a-z), digits (0-9) and the
+ * dash (-). The case of alphabetic characters is not significant.
+ *
+ * A dot (.) is commonly used to separate parts of the APN, and
+ * apparently the underscore (_) is used as well. RFC 2181 indicates
+ * that no restrictions of any kind are placed on DNS labels, and thus
+ * it would appear that none are placed on APNs either, but many modems
+ * and networks will fail to accept APNs that include odd characters
+ * like space ( ) and such.
+ */
+ for (i = 0; i < apn_len; i++) {
+ if ( !g_ascii_isalnum (priv->apn[i])
+ && (priv->apn[i] != '.')
+ && (priv->apn[i] != '_')
+ && (priv->apn[i] != '-')) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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->network_id) {
+ guint32 nid_len = strlen (priv->network_id);
+ guint32 i;
+
+ /* Accept both 5 and 6 digit MCC/MNC codes */
+ if ((nid_len < 5) || (nid_len > 6)) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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;
+ }
+
+ for (i = 0; i < nid_len; i++) {
+ if (!g_ascii_isdigit (priv->network_id[i])) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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;
+ }
+ }
+ }
+
+ return TRUE;
+}
+
+static GPtrArray *
+need_secrets (NMSetting *setting)
+{
+ NMSettingGsmPrivate *priv = NM_SETTING_GSM_GET_PRIVATE (setting);
+ GPtrArray *secrets = NULL;
+
+ if (priv->password)
+ return NULL;
+
+ if (priv->username) {
+ if (!(priv->password_flags & NM_SETTING_SECRET_FLAG_NOT_REQUIRED)) {
+ secrets = g_ptr_array_sized_new (1);
+ g_ptr_array_add (secrets, NM_SETTING_GSM_PASSWORD);
+ }
+ }
+
+ return secrets;
+}
+
+static void
+nm_setting_gsm_init (NMSettingGsm *setting)
+{
+}
+
+static void
+finalize (GObject *object)
+{
+ NMSettingGsmPrivate *priv = NM_SETTING_GSM_GET_PRIVATE (object);
+
+ g_free (priv->number);
+ g_free (priv->username);
+ g_free (priv->password);
+ g_free (priv->apn);
+ g_free (priv->network_id);
+ g_free (priv->pin);
+
+ G_OBJECT_CLASS (nm_setting_gsm_parent_class)->finalize (object);
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ NMSettingGsmPrivate *priv = NM_SETTING_GSM_GET_PRIVATE (object);
+ char *tmp;
+
+ switch (prop_id) {
+ case PROP_NUMBER:
+ g_free (priv->number);
+ priv->number = g_value_dup_string (value);
+ break;
+ case PROP_USERNAME:
+ g_free (priv->username);
+ priv->username = g_value_dup_string (value);
+ break;
+ case PROP_PASSWORD:
+ g_free (priv->password);
+ priv->password = g_value_dup_string (value);
+ break;
+ case PROP_PASSWORD_FLAGS:
+ priv->password_flags = g_value_get_flags (value);
+ break;
+ case PROP_APN:
+ g_free (priv->apn);
+ priv->apn = NULL;
+ tmp = g_value_dup_string (value);
+ if (tmp)
+ priv->apn = g_strstrip (tmp);
+ break;
+ case PROP_NETWORK_ID:
+ g_free (priv->network_id);
+ priv->network_id = NULL;
+ tmp = g_value_dup_string (value);
+ if (tmp)
+ priv->network_id = g_strstrip (tmp);
+ break;
+ case PROP_PIN:
+ g_free (priv->pin);
+ priv->pin = g_value_dup_string (value);
+ break;
+ case PROP_PIN_FLAGS:
+ priv->pin_flags = g_value_get_flags (value);
+ break;
+ case PROP_HOME_ONLY:
+ priv->home_only = g_value_get_boolean (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)
+{
+ NMSettingGsm *setting = NM_SETTING_GSM (object);
+
+ switch (prop_id) {
+ case PROP_NUMBER:
+ g_value_set_string (value, nm_setting_gsm_get_number (setting));
+ break;
+ case PROP_USERNAME:
+ g_value_set_string (value, nm_setting_gsm_get_username (setting));
+ break;
+ case PROP_PASSWORD:
+ g_value_set_string (value, nm_setting_gsm_get_password (setting));
+ break;
+ case PROP_PASSWORD_FLAGS:
+ g_value_set_flags (value, nm_setting_gsm_get_password_flags (setting));
+ break;
+ case PROP_APN:
+ g_value_set_string (value, nm_setting_gsm_get_apn (setting));
+ break;
+ case PROP_NETWORK_ID:
+ g_value_set_string (value, nm_setting_gsm_get_network_id (setting));
+ break;
+ case PROP_PIN:
+ g_value_set_string (value, nm_setting_gsm_get_pin (setting));
+ break;
+ case PROP_PIN_FLAGS:
+ g_value_set_flags (value, nm_setting_gsm_get_pin_flags (setting));
+ break;
+ case PROP_HOME_ONLY:
+ g_value_set_boolean (value, nm_setting_gsm_get_home_only (setting));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_setting_gsm_class_init (NMSettingGsmClass *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 (NMSettingGsmPrivate));
+
+ /* virtual methods */
+ object_class->set_property = set_property;
+ object_class->get_property = get_property;
+ object_class->finalize = finalize;
+ parent_class->verify = verify;
+ parent_class->need_secrets = need_secrets;
+
+ /* Properties */
+
+ /**
+ * NMSettingGsm:number:
+ *
+ * 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.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_NUMBER,
+ g_param_spec_string (NM_SETTING_GSM_NUMBER, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingGsm:username:
+ *
+ * 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.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_USERNAME,
+ g_param_spec_string (NM_SETTING_GSM_USERNAME, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingGsm:password:
+ *
+ * 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.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_PASSWORD,
+ g_param_spec_string (NM_SETTING_GSM_PASSWORD, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_SECRET |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingGsm:password-flags:
+ *
+ * Flags indicating how to handle the #NMSettingGsm:password property.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_PASSWORD_FLAGS,
+ g_param_spec_flags (NM_SETTING_GSM_PASSWORD_FLAGS, "", "",
+ NM_TYPE_SETTING_SECRET_FLAGS,
+ NM_SETTING_SECRET_FLAG_NONE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingGsm:apn:
+ *
+ * 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.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_APN,
+ g_param_spec_string (NM_SETTING_GSM_APN, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingGsm:network-id:
+ *
+ * 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.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_NETWORK_ID,
+ g_param_spec_string (NM_SETTING_GSM_NETWORK_ID, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_PIN,
+ g_param_spec_string (NM_SETTING_GSM_PIN, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_SECRET |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingGsm:pin-flags:
+ *
+ * Flags indicating how to handle the #NMSettingGsm:pin property.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_PIN_FLAGS,
+ g_param_spec_flags (NM_SETTING_GSM_PIN_FLAGS, "", "",
+ NM_TYPE_SETTING_SECRET_FLAGS,
+ NM_SETTING_SECRET_FLAG_NONE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingGsm:home-only:
+ *
+ * When %TRUE, only connections to the home network will be allowed.
+ * Connections to roaming networks will not be made.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_HOME_ONLY,
+ g_param_spec_boolean (NM_SETTING_GSM_HOME_ONLY, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /* Ignore incoming deprecated properties */
+ _nm_setting_class_add_dbus_only_property (parent_class, "allowed-bands",
+ G_VARIANT_TYPE_UINT32,
+ NULL, NULL);
+ _nm_setting_class_add_dbus_only_property (parent_class, "network-type",
+ G_VARIANT_TYPE_INT32,
+ NULL, NULL);
+}
diff --git a/libnm-core/nm-setting-gsm.h b/libnm-core/nm-setting-gsm.h
new file mode 100644
index 000000000..907567381
--- /dev/null
+++ b/libnm-core/nm-setting-gsm.h
@@ -0,0 +1,80 @@
+/* -*- 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 2007 - 2011 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ */
+
+#ifndef __NM_SETTING_GSM_H__
+#define __NM_SETTING_GSM_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-setting.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_GSM (nm_setting_gsm_get_type ())
+#define NM_SETTING_GSM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SETTING_GSM, NMSettingGsm))
+#define NM_SETTING_GSM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SETTING_GSM, NMSettingGsmClass))
+#define NM_IS_SETTING_GSM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SETTING_GSM))
+#define NM_IS_SETTING_GSM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_SETTING_GSM))
+#define NM_SETTING_GSM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SETTING_GSM, NMSettingGsmClass))
+
+#define NM_SETTING_GSM_SETTING_NAME "gsm"
+
+#define NM_SETTING_GSM_NUMBER "number"
+#define NM_SETTING_GSM_USERNAME "username"
+#define NM_SETTING_GSM_PASSWORD "password"
+#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_PIN "pin"
+#define NM_SETTING_GSM_PIN_FLAGS "pin-flags"
+#define NM_SETTING_GSM_HOME_ONLY "home-only"
+
+struct _NMSettingGsm {
+ NMSetting parent;
+};
+
+typedef struct {
+ NMSettingClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMSettingGsmClass;
+
+GType nm_setting_gsm_get_type (void);
+
+NMSetting *nm_setting_gsm_new (void);
+const char *nm_setting_gsm_get_number (NMSettingGsm *setting);
+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);
+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);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_GSM_H__ */
diff --git a/libnm-core/nm-setting-infiniband.c b/libnm-core/nm-setting-infiniband.c
new file mode 100644
index 000000000..b0afe04f1
--- /dev/null
+++ b/libnm-core/nm-setting-infiniband.c
@@ -0,0 +1,522 @@
+/* -*- 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 2011 - 2013 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <glib/gi18n-lib.h>
+
+#include "nm-setting-infiniband.h"
+#include "nm-utils.h"
+#include "nm-utils-private.h"
+#include "nm-setting-private.h"
+#include "nm-setting-connection.h"
+
+/**
+ * SECTION:nm-setting-infiniband
+ * @short_description: Describes connection properties for IP-over-InfiniBand networks
+ *
+ * The #NMSettingInfiniband object is a #NMSetting subclass that describes properties
+ * necessary for connection to IP-over-InfiniBand networks.
+ **/
+
+G_DEFINE_TYPE_WITH_CODE (NMSettingInfiniband, nm_setting_infiniband, NM_TYPE_SETTING,
+ _nm_register_setting (INFINIBAND, 1))
+NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_INFINIBAND)
+
+#define NM_SETTING_INFINIBAND_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_INFINIBAND, NMSettingInfinibandPrivate))
+
+typedef struct {
+ char *mac_address;
+ char *transport_mode;
+ guint32 mtu;
+ int p_key;
+ char *parent, *virtual_iface_name;
+} NMSettingInfinibandPrivate;
+
+enum {
+ PROP_0,
+ PROP_MAC_ADDRESS,
+ PROP_MTU,
+ PROP_TRANSPORT_MODE,
+ PROP_P_KEY,
+ PROP_PARENT,
+
+ LAST_PROP
+};
+
+/**
+ * nm_setting_infiniband_new:
+ *
+ * Creates a new #NMSettingInfiniband object with default values.
+ *
+ * Returns: (transfer full): the new empty #NMSettingInfiniband object
+ **/
+NMSetting *
+nm_setting_infiniband_new (void)
+{
+ return (NMSetting *) g_object_new (NM_TYPE_SETTING_INFINIBAND, NULL);
+}
+
+/**
+ * nm_setting_infiniband_get_mac_address:
+ * @setting: the #NMSettingInfiniband
+ *
+ * Returns: the #NMSettingInfiniband:mac-address property of the setting
+ **/
+const char *
+nm_setting_infiniband_get_mac_address (NMSettingInfiniband *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_INFINIBAND (setting), NULL);
+
+ return NM_SETTING_INFINIBAND_GET_PRIVATE (setting)->mac_address;
+}
+
+/**
+ * nm_setting_infiniband_get_mtu:
+ * @setting: the #NMSettingInfiniband
+ *
+ * Returns: the #NMSettingInfiniband:mtu property of the setting
+ **/
+guint32
+nm_setting_infiniband_get_mtu (NMSettingInfiniband *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_INFINIBAND (setting), 0);
+
+ return NM_SETTING_INFINIBAND_GET_PRIVATE (setting)->mtu;
+}
+
+/**
+ * nm_setting_infiniband_get_transport_mode:
+ * @setting: the #NMSettingInfiniband
+ *
+ * Returns the transport mode for this device. Either 'datagram' or
+ * 'connected'.
+ *
+ * Returns: the IPoIB transport mode
+ **/
+const char *
+nm_setting_infiniband_get_transport_mode (NMSettingInfiniband *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_INFINIBAND (setting), NULL);
+
+ 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;
+}
+
+/**
+ * nm_setting_infiniband_get_virtual_interface_name:
+ * @setting: the #NMSettingInfiniband
+ *
+ * Returns the interface name created by combining #NMSettingInfiniband:parent
+ * and #NMSettingInfiniband:p-key. (If either property is unset, this will
+ * return %NULL.)
+ *
+ * Returns: the interface name, or %NULL
+ **/
+const char *
+nm_setting_infiniband_get_virtual_interface_name (NMSettingInfiniband *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, NMConnection *connection, GError **error)
+{
+ NMSettingConnection *s_con;
+ NMSettingInfinibandPrivate *priv = NM_SETTING_INFINIBAND_GET_PRIVATE (setting);
+ guint32 normerr_max_mtu = 0;
+
+ if (priv->mac_address && !nm_utils_hwaddr_valid (priv->mac_address, INFINIBAND_ALEN)) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("property is invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_INFINIBAND_SETTING_NAME, NM_SETTING_INFINIBAND_MAC_ADDRESS);
+ return FALSE;
+ }
+
+ if (!g_strcmp0 (priv->transport_mode, "datagram")) {
+ if (priv->mtu > 2044)
+ normerr_max_mtu = 2044;
+ } else if (!g_strcmp0 (priv->transport_mode, "connected")) {
+ if (priv->mtu > 65520)
+ normerr_max_mtu = 65520;
+ } else {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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_CONNECTION_ERROR,
+ NM_CONNECTION_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_CONNECTION_ERROR,
+ NM_CONNECTION_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_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_MISSING_PROPERTY,
+ _("InfiniBand P_Key connection did not specify parent interface name"));
+ g_prefix_error (error, "%s: ", NM_SETTING_INFINIBAND_PARENT);
+ return FALSE;
+ }
+ }
+
+ s_con = nm_connection_get_setting_connection (connection);
+ if (s_con) {
+ const char *interface_name = nm_setting_connection_get_interface_name (s_con);
+
+ if (!interface_name)
+ ;
+ else if (!nm_utils_iface_valid_name (interface_name)) {
+ /* report the error for NMSettingConnection:interface-name, because
+ * it's that property that is invalid -- although we currently verify()
+ * NMSettingInfiniband.
+ **/
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%s' is not a valid interface name"),
+ interface_name);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_INTERFACE_NAME);
+ return FALSE;
+ } else {
+ if (priv->p_key != -1) {
+ if (!priv->virtual_iface_name)
+ priv->virtual_iface_name = g_strdup_printf ("%s.%04x", priv->parent, priv->p_key);
+
+ if (strcmp (interface_name, priv->virtual_iface_name) != 0) {
+ /* We don't support renaming software infiniband devices. Later we might, but
+ * for now just reject such connections.
+ **/
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("interface name of software infiniband device must be '%s' or unset (instead it is '%s')"),
+ priv->virtual_iface_name, interface_name);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_INTERFACE_NAME);
+ return FALSE;
+ }
+ }
+ }
+ }
+
+ /* *** errors above here should be always fatal, below NORMALIZABLE_ERROR *** */
+
+ if (normerr_max_mtu > 0) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("mtu for transport mode '%s' can be at most %d but it is %d"),
+ priv->transport_mode, normerr_max_mtu, priv->mtu);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_INFINIBAND_SETTING_NAME, NM_SETTING_INFINIBAND_MTU);
+ return NM_SETTING_VERIFY_NORMALIZABLE_ERROR;
+ }
+
+ return TRUE;
+}
+
+static void
+nm_setting_infiniband_init (NMSettingInfiniband *setting)
+{
+}
+
+static void
+finalize (GObject *object)
+{
+ NMSettingInfinibandPrivate *priv = NM_SETTING_INFINIBAND_GET_PRIVATE (object);
+
+ g_free (priv->transport_mode);
+ g_free (priv->mac_address);
+ g_free (priv->parent);
+ g_free (priv->virtual_iface_name);
+
+ G_OBJECT_CLASS (nm_setting_infiniband_parent_class)->finalize (object);
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ NMSettingInfinibandPrivate *priv = NM_SETTING_INFINIBAND_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_MAC_ADDRESS:
+ g_free (priv->mac_address);
+ priv->mac_address = _nm_utils_hwaddr_canonical_or_invalid (g_value_get_string (value),
+ INFINIBAND_ALEN);
+ break;
+ case PROP_MTU:
+ priv->mtu = g_value_get_uint (value);
+ break;
+ case PROP_TRANSPORT_MODE:
+ 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;
+ }
+}
+
+static void
+get_property (GObject *object, guint prop_id,
+ GValue *value, GParamSpec *pspec)
+{
+ NMSettingInfiniband *setting = NM_SETTING_INFINIBAND (object);
+
+ switch (prop_id) {
+ case PROP_MAC_ADDRESS:
+ g_value_set_string (value, nm_setting_infiniband_get_mac_address (setting));
+ break;
+ case PROP_MTU:
+ g_value_set_uint (value, nm_setting_infiniband_get_mtu (setting));
+ break;
+ 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;
+ }
+}
+
+static void
+nm_setting_infiniband_class_init (NMSettingInfinibandClass *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 (NMSettingInfinibandPrivate));
+
+ /* virtual methods */
+ object_class->set_property = set_property;
+ object_class->get_property = get_property;
+ object_class->finalize = finalize;
+
+ parent_class->verify = verify;
+
+ /* 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).
+ **/
+ /* ---keyfile---
+ * property: mac-address
+ * format: ususal hex-digits-and-colons notation
+ * description: MAC address in traditional hex-digits-and-colons notation, or
+ * or semicolon separated list of 20 decimal bytes (obsolete)
+ * example: mac-address= 80:00:00:6d:fe:80:00:00:00:00:00:00:00:02:55:00:70:33:cf:01
+ * ---end---
+ * ---ifcfg-rh---
+ * property: mac-address
+ * variable: HWADDR
+ * description: IBoIP 20-byte hardware address of the device (in traditional
+ * hex-digits-and-colons notation).
+ * example: HWADDR=01:02:03:04:05:06:07:08:09:0A:01:02:03:04:05:06:07:08:09:11
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_MAC_ADDRESS,
+ g_param_spec_string (NM_SETTING_INFINIBAND_MAC_ADDRESS, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+ _nm_setting_class_transform_property (parent_class, NM_SETTING_INFINIBAND_MAC_ADDRESS,
+ G_VARIANT_TYPE_BYTESTRING,
+ _nm_utils_hwaddr_to_dbus,
+ _nm_utils_hwaddr_from_dbus);
+
+ /**
+ * NMSettingInfiniband:mtu:
+ *
+ * If non-zero, only transmit packets of the specified size or smaller,
+ * breaking larger packets up into multiple frames.
+ **/
+ /* ---ifcfg-rh---
+ * property: mtu
+ * variable: MTU
+ * description: MTU of the interface.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_MTU,
+ g_param_spec_uint (NM_SETTING_INFINIBAND_MTU, "", "",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingInfiniband:transport-mode:
+ *
+ * The IP-over-InfiniBand transport mode. Either "datagram" or
+ * "connected".
+ **/
+ /* ---ifcfg-rh---
+ * property: transport-mode
+ * variable: CONNECTED_MODE
+ * default: CONNECTED_MODE=no
+ * description: CONNECTED_MODE=yes for "connected" mode, CONNECTED_MODE=no for
+ * "datagram" mode
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_TRANSPORT_MODE,
+ g_param_spec_string (NM_SETTING_INFINIBAND_TRANSPORT_MODE, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: p-key
+ * variable: PKEY_ID (and PKEY=yes)
+ * default: PKEY=no
+ * description: InfiniBand P_Key. The value can be a hex number prefixed with "0x"
+ * or a decimal number.
+ * When PKEY_ID is specified, PHYSDEV and DEVICE also must be specified.
+ * example: PKEY=yes PKEY_ID=2 PHYSDEV=mlx4_ib0 DEVICE=mlx4_ib0.8002
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_P_KEY,
+ g_param_spec_int (NM_SETTING_INFINIBAND_P_KEY, "", "",
+ -1, 0xFFFF, -1,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: parent
+ * variable: PHYSDEV (PKEY=yes)
+ * default: PKEY=no
+ * description: InfiniBand parent device.
+ * example: PHYSDEV=ib0
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PARENT,
+ g_param_spec_string (NM_SETTING_INFINIBAND_PARENT, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+
+}
diff --git a/libnm-core/nm-setting-infiniband.h b/libnm-core/nm-setting-infiniband.h
new file mode 100644
index 000000000..c5ad418b2
--- /dev/null
+++ b/libnm-core/nm-setting-infiniband.h
@@ -0,0 +1,72 @@
+/* -*- 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 2011 Red Hat, Inc.
+ */
+
+#ifndef __NM_SETTING_INFINIBAND_H__
+#define __NM_SETTING_INFINIBAND_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-setting.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_INFINIBAND (nm_setting_infiniband_get_type ())
+#define NM_SETTING_INFINIBAND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SETTING_INFINIBAND, NMSettingInfiniband))
+#define NM_SETTING_INFINIBAND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SETTING_INFINIBAND, NMSettingInfinibandClass))
+#define NM_IS_SETTING_INFINIBAND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SETTING_INFINIBAND))
+#define NM_IS_SETTING_INFINIBAND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_SETTING_INFINIBAND))
+#define NM_SETTING_INFINIBAND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SETTING_INFINIBAND, NMSettingInfinibandClass))
+
+#define NM_SETTING_INFINIBAND_SETTING_NAME "infiniband"
+
+#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"
+
+struct _NMSettingInfiniband {
+ NMSetting parent;
+};
+
+typedef struct {
+ NMSettingClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMSettingInfinibandClass;
+
+GType nm_setting_infiniband_get_type (void);
+
+NMSetting * nm_setting_infiniband_new (void);
+const char * 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);
+
+const char * nm_setting_infiniband_get_virtual_interface_name (NMSettingInfiniband *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_INFINIBAND_H__ */
diff --git a/libnm-core/nm-setting-ip-config.c b/libnm-core/nm-setting-ip-config.c
new file mode 100644
index 000000000..e6f0401a0
--- /dev/null
+++ b/libnm-core/nm-setting-ip-config.c
@@ -0,0 +1,2363 @@
+/* -*- 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 2007 - 2014 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <arpa/inet.h>
+#include <glib/gi18n-lib.h>
+
+#include "nm-setting-ip-config.h"
+#include "nm-setting-ip4-config.h"
+#include "nm-setting-ip6-config.h"
+#include "nm-utils.h"
+#include "nm-glib-compat.h"
+#include "nm-setting-private.h"
+#include "nm-utils-private.h"
+
+/**
+ * SECTION:nm-setting-ip-config
+ * @short_description: Abstract base class for IPv4 and IPv6
+ * addressing, routing, and name service properties
+ * @include: nm-setting-ip-config.h
+ * @see_also: #NMSettingIP4Config, #NMSettingIP6Config
+ *
+ * #NMSettingIPConfig is the abstract base class of
+ * #NMSettingIP4Config and #NMSettingIP6Config, providing properties
+ * related to IP addressing, routing, and Domain Name Service.
+ **/
+
+static char *
+canonicalize_ip (int family, const char *ip, gboolean null_any)
+{
+ guint8 addr_bytes[sizeof (struct in6_addr)];
+ char addr_str[NM_UTILS_INET_ADDRSTRLEN];
+ int ret;
+
+ if (!ip) {
+ g_return_val_if_fail (null_any == TRUE, NULL);
+ return NULL;
+ }
+
+ ret = inet_pton (family, ip, addr_bytes);
+ g_return_val_if_fail (ret == 1, NULL);
+
+ if (null_any) {
+ int addrlen = (family == AF_INET ? sizeof (struct in_addr) : sizeof (struct in6_addr));
+
+ if (!memcmp (addr_bytes, &in6addr_any, addrlen))
+ return NULL;
+ }
+
+ return g_strdup (inet_ntop (family, addr_bytes, addr_str, sizeof (addr_str)));
+}
+
+static gboolean
+valid_ip (int family, const char *ip, GError **error)
+{
+ if (!nm_utils_ipaddr_valid (family, ip)) {
+ g_set_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_FAILED,
+ family == AF_INET ? _("Invalid IPv4 address '%s'") : _("Invalid IPv6 address '%s"),
+ ip);
+ return FALSE;
+ } else
+ return TRUE;
+}
+
+static gboolean
+valid_prefix (int family, guint prefix, GError **error, gboolean allow_zero_prefix)
+{
+ if ( (family == AF_INET && prefix > 32)
+ || (family == AF_INET6 && prefix > 128)
+ || (!allow_zero_prefix && prefix == 0)) {
+ g_set_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_FAILED,
+ family == AF_INET ? _("Invalid IPv4 address prefix '%u'") : _("Invalid IPv6 address prefix '%u"),
+ prefix);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static gboolean
+valid_metric (gint64 metric, GError **error)
+{
+ if (metric < -1 || metric > G_MAXUINT32) {
+ if (error) {
+ char buf[64];
+
+ /* We can't concatenate G_GINT64_FORMAT into a translatable string */
+ g_snprintf (buf, sizeof (buf), "%" G_GINT64_FORMAT, metric);
+ g_set_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_FAILED,
+ _("Invalid routing metric '%s'"), buf);
+ }
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+
+G_DEFINE_BOXED_TYPE (NMIPAddress, nm_ip_address, nm_ip_address_dup, nm_ip_address_unref)
+
+struct NMIPAddress {
+ guint refcount;
+
+ char *address;
+ int prefix, family;
+
+ GHashTable *attributes;
+};
+
+/**
+ * nm_ip_address_new:
+ * @family: the IP address family (<literal>AF_INET</literal> or
+ * <literal>AF_INET6</literal>)
+ * @addr: the IP address
+ * @prefix: the address prefix length
+ * @error: location to store error, or %NULL
+ *
+ * Creates a new #NMIPAddress object.
+ *
+ * Returns: (transfer full): the new #NMIPAddress object, or %NULL on error
+ **/
+NMIPAddress *
+nm_ip_address_new (int family,
+ const char *addr, guint prefix,
+ GError **error)
+{
+ NMIPAddress *address;
+
+ g_return_val_if_fail (family == AF_INET || family == AF_INET6, NULL);
+ g_return_val_if_fail (addr != NULL, NULL);
+
+ if (!valid_ip (family, addr, error))
+ return NULL;
+ if (!valid_prefix (family, prefix, error, FALSE))
+ return NULL;
+
+ address = g_slice_new0 (NMIPAddress);
+ address->refcount = 1;
+
+ address->family = family;
+ address->address = canonicalize_ip (family, addr, FALSE);
+ address->prefix = prefix;
+
+ return address;
+}
+
+/**
+ * nm_ip_address_new_binary:
+ * @family: the IP address family (<literal>AF_INET</literal> or
+ * <literal>AF_INET6</literal>)
+ * @addr: the IP address
+ * @prefix: the address prefix length
+ * @error: location to store error, or %NULL
+ *
+ * Creates a new #NMIPAddress object. @addr must point to a buffer of the
+ * correct size for @family.
+ *
+ * Returns: (transfer full): the new #NMIPAddress object, or %NULL on error
+ **/
+NMIPAddress *
+nm_ip_address_new_binary (int family,
+ gconstpointer addr, guint prefix,
+ GError **error)
+{
+ NMIPAddress *address;
+ char string[NM_UTILS_INET_ADDRSTRLEN];
+
+ g_return_val_if_fail (family == AF_INET || family == AF_INET6, NULL);
+ g_return_val_if_fail (addr != NULL, NULL);
+
+ if (!valid_prefix (family, prefix, error, FALSE))
+ return NULL;
+
+ address = g_slice_new0 (NMIPAddress);
+ address->refcount = 1;
+
+ address->family = family;
+ address->address = g_strdup (inet_ntop (family, addr, string, sizeof (string)));
+ address->prefix = prefix;
+
+ return address;
+}
+
+/**
+ * nm_ip_address_ref:
+ * @address: the #NMIPAddress
+ *
+ * Increases the reference count of the object.
+ **/
+void
+nm_ip_address_ref (NMIPAddress *address)
+{
+ g_return_if_fail (address != NULL);
+ g_return_if_fail (address->refcount > 0);
+
+ address->refcount++;
+}
+
+/**
+ * nm_ip_address_unref:
+ * @address: the #NMIPAddress
+ *
+ * Decreases the reference count of the object. If the reference count
+ * reaches zero, the object will be destroyed.
+ **/
+void
+nm_ip_address_unref (NMIPAddress *address)
+{
+ g_return_if_fail (address != NULL);
+ g_return_if_fail (address->refcount > 0);
+
+ address->refcount--;
+ if (address->refcount == 0) {
+ g_free (address->address);
+ if (address->attributes)
+ g_hash_table_unref (address->attributes);
+ g_slice_free (NMIPAddress, address);
+ }
+}
+
+/**
+ * nm_ip_address_equal:
+ * @address: the #NMIPAddress
+ * @other: the #NMIPAddress to compare @address to.
+ *
+ * Determines if two #NMIPAddress objects contain the same address and prefix
+ * (attributes are not compared).
+ *
+ * Returns: %TRUE if the objects contain the same values, %FALSE if they do not.
+ **/
+gboolean
+nm_ip_address_equal (NMIPAddress *address, NMIPAddress *other)
+{
+ g_return_val_if_fail (address != NULL, FALSE);
+ g_return_val_if_fail (address->refcount > 0, FALSE);
+
+ g_return_val_if_fail (other != NULL, FALSE);
+ g_return_val_if_fail (other->refcount > 0, FALSE);
+
+ if ( address->family != other->family
+ || address->prefix != other->prefix
+ || strcmp (address->address, other->address) != 0)
+ return FALSE;
+ return TRUE;
+}
+
+/**
+ * nm_ip_address_dup:
+ * @address: the #NMIPAddress
+ *
+ * Creates a copy of @address
+ *
+ * Returns: (transfer full): a copy of @address
+ **/
+NMIPAddress *
+nm_ip_address_dup (NMIPAddress *address)
+{
+ NMIPAddress *copy;
+
+ g_return_val_if_fail (address != NULL, NULL);
+ g_return_val_if_fail (address->refcount > 0, NULL);
+
+ copy = nm_ip_address_new (address->family,
+ address->address, address->prefix,
+ NULL);
+ if (address->attributes) {
+ GHashTableIter iter;
+ const char *key;
+ GVariant *value;
+
+ g_hash_table_iter_init (&iter, address->attributes);
+ while (g_hash_table_iter_next (&iter, (gpointer *) &key, (gpointer *) &value))
+ nm_ip_address_set_attribute (copy, key, value);
+ }
+
+ return copy;
+}
+
+/**
+ * nm_ip_address_get_family:
+ * @address: the #NMIPAddress
+ *
+ * Gets the IP address family (eg, AF_INET) property of this address
+ * object.
+ *
+ * Returns: the IP address family
+ **/
+int
+nm_ip_address_get_family (NMIPAddress *address)
+{
+ g_return_val_if_fail (address != NULL, 0);
+ g_return_val_if_fail (address->refcount > 0, 0);
+
+ return address->family;
+}
+
+/**
+ * nm_ip_address_get_address:
+ * @address: the #NMIPAddress
+ *
+ * Gets the IP address property of this address object.
+ *
+ * Returns: the IP address
+ **/
+const char *
+nm_ip_address_get_address (NMIPAddress *address)
+{
+ g_return_val_if_fail (address != NULL, NULL);
+ g_return_val_if_fail (address->refcount > 0, NULL);
+
+ return address->address;
+}
+
+/**
+ * nm_ip_address_set_address:
+ * @address: the #NMIPAddress
+ * @addr: the IP address, as a string
+ *
+ * Sets the IP address property of this address object.
+ *
+ * @addr must be a valid address of @address's family. If you aren't sure you
+ * have a valid address, use nm_utils_ipaddr_valid() to check it.
+ **/
+void
+nm_ip_address_set_address (NMIPAddress *address,
+ const char *addr)
+{
+ g_return_if_fail (address != NULL);
+ g_return_if_fail (addr != NULL);
+ g_return_if_fail (nm_utils_ipaddr_valid (address->family, addr));
+
+ g_free (address->address);
+ address->address = canonicalize_ip (address->family, addr, FALSE);
+}
+
+/**
+ * nm_ip_address_get_address_binary: (skip)
+ * @address: the #NMIPAddress
+ * @addr: a buffer in which to store the address in binary format.
+ *
+ * Gets the IP address property of this address object.
+ *
+ * @addr must point to a buffer that is the correct size for @address's family.
+ **/
+void
+nm_ip_address_get_address_binary (NMIPAddress *address,
+ gpointer addr)
+{
+ g_return_if_fail (address != NULL);
+ g_return_if_fail (addr != NULL);
+
+ inet_pton (address->family, address->address, addr);
+}
+
+/**
+ * nm_ip_address_set_address_binary: (skip)
+ * @address: the #NMIPAddress
+ * @addr: the address, in binary format
+ *
+ * Sets the IP address property of this address object.
+ *
+ * @addr must point to a buffer that is the correct size for @address's family.
+ **/
+void
+nm_ip_address_set_address_binary (NMIPAddress *address,
+ gconstpointer addr)
+{
+ char string[NM_UTILS_INET_ADDRSTRLEN];
+
+ g_return_if_fail (address != NULL);
+ g_return_if_fail (addr != NULL);
+
+ g_free (address->address);
+ address->address = g_strdup (inet_ntop (address->family, addr, string, sizeof (string)));
+}
+
+/**
+ * nm_ip_address_get_prefix:
+ * @address: the #NMIPAddress
+ *
+ * Gets the IP address prefix (ie "24" or "30" etc) property of this address
+ * object.
+ *
+ * Returns: the IP address prefix
+ **/
+guint
+nm_ip_address_get_prefix (NMIPAddress *address)
+{
+ g_return_val_if_fail (address != NULL, 0);
+ g_return_val_if_fail (address->refcount > 0, 0);
+
+ return address->prefix;
+}
+
+/**
+ * nm_ip_address_set_prefix:
+ * @address: the #NMIPAddress
+ * @prefix: the IP address prefix
+ *
+ * Sets the IP address prefix property of this address object.
+ **/
+void
+nm_ip_address_set_prefix (NMIPAddress *address,
+ guint prefix)
+{
+ g_return_if_fail (address != NULL);
+ g_return_if_fail (valid_prefix (address->family, prefix, NULL, FALSE));
+
+ address->prefix = prefix;
+}
+
+/**
+ * nm_ip_address_get_attribute_names:
+ * @address: the #NMIPAddress
+ *
+ * Gets an array of attribute names defined on @address.
+ *
+ * Returns: (transfer full): a %NULL-terminated array of attribute names,
+ **/
+char **
+nm_ip_address_get_attribute_names (NMIPAddress *address)
+{
+ GHashTableIter iter;
+ const char *key;
+ GPtrArray *names;
+
+ g_return_val_if_fail (address != NULL, NULL);
+
+ names = g_ptr_array_new ();
+
+ if (address->attributes) {
+ g_hash_table_iter_init (&iter, address->attributes);
+ while (g_hash_table_iter_next (&iter, (gpointer *) &key, NULL))
+ g_ptr_array_add (names, g_strdup (key));
+ }
+ g_ptr_array_add (names, NULL);
+
+ return (char **) g_ptr_array_free (names, FALSE);
+}
+
+/**
+ * nm_ip_address_get_attribute:
+ * @address: the #NMIPAddress
+ * @name: the name of an address attribute
+ *
+ * Gets the value of the attribute with name @name on @address
+ *
+ * Returns: (transfer none): the value of the attribute with name @name on
+ * @address, or %NULL if @address has no such attribute.
+ **/
+GVariant *
+nm_ip_address_get_attribute (NMIPAddress *address, const char *name)
+{
+ g_return_val_if_fail (address != NULL, NULL);
+ g_return_val_if_fail (name != NULL && *name != '\0', NULL);
+
+ if (address->attributes)
+ return g_hash_table_lookup (address->attributes, name);
+ else
+ return NULL;
+}
+
+/**
+ * nm_ip_address_set_attribute:
+ * @address: the #NMIPAddress
+ * @name: the name of an address attribute
+ * @value: (transfer none) (allow-none): the value
+ *
+ * Sets or clears the named attribute on @address to the given value.
+ **/
+void
+nm_ip_address_set_attribute (NMIPAddress *address, const char *name, GVariant *value)
+{
+ g_return_if_fail (address != NULL);
+ g_return_if_fail (name != NULL && *name != '\0');
+ g_return_if_fail (strcmp (name, "address") != 0 && strcmp (name, "prefix") != 0);
+
+ if (!address->attributes) {
+ address->attributes = g_hash_table_new_full (g_str_hash, g_str_equal,
+ g_free, (GDestroyNotify) g_variant_unref);
+ }
+
+ if (value)
+ g_hash_table_insert (address->attributes, g_strdup (name), g_variant_ref_sink (value));
+ else
+ g_hash_table_remove (address->attributes, name);
+}
+
+
+G_DEFINE_BOXED_TYPE (NMIPRoute, nm_ip_route, nm_ip_route_dup, nm_ip_route_unref)
+
+struct NMIPRoute {
+ guint refcount;
+
+ int family;
+ char *dest;
+ guint prefix;
+ char *next_hop;
+ gint64 metric;
+
+ GHashTable *attributes;
+};
+
+/**
+ * nm_ip_route_new:
+ * @family: the IP address family (<literal>AF_INET</literal> or
+ * <literal>AF_INET6</literal>)
+ * @dest: the IP address of the route's destination
+ * @prefix: the address prefix length
+ * @next_hop: (allow-none): the IP address of the next hop (or %NULL)
+ * @metric: the route metric (or -1 for "default")
+ * @error: location to store error, or %NULL
+ *
+ * Creates a new #NMIPRoute object.
+ *
+ * Returns: (transfer full): the new #NMIPRoute object, or %NULL on error
+ **/
+NMIPRoute *
+nm_ip_route_new (int family,
+ const char *dest,
+ guint prefix,
+ const char *next_hop,
+ gint64 metric,
+ GError **error)
+{
+ NMIPRoute *route;
+
+ g_return_val_if_fail (family == AF_INET || family == AF_INET6, NULL);
+
+ if (!valid_ip (family, dest, error))
+ return NULL;
+ if (!valid_prefix (family, prefix, error, TRUE))
+ return NULL;
+ if (next_hop && !valid_ip (family, next_hop, error))
+ return NULL;
+ if (!valid_metric (metric, error))
+ return NULL;
+
+ route = g_slice_new0 (NMIPRoute);
+ route->refcount = 1;
+
+ route->family = family;
+ route->dest = canonicalize_ip (family, dest, FALSE);
+ route->prefix = prefix;
+ route->next_hop = canonicalize_ip (family, next_hop, TRUE);
+ route->metric = metric;
+
+ return route;
+}
+
+/**
+ * nm_ip_route_new_binary:
+ * @family: the IP address family (<literal>AF_INET</literal> or
+ * <literal>AF_INET6</literal>)
+ * @dest: the IP address of the route's destination
+ * @prefix: the address prefix length
+ * @next_hop: (allow-none): the IP address of the next hop (or %NULL)
+ * @metric: the route metric (or -1 for "default")
+ * @error: location to store error, or %NULL
+ *
+ * Creates a new #NMIPRoute object. @dest and @next_hop (if non-%NULL) must
+ * point to buffers of the correct size for @family.
+ *
+ * Returns: (transfer full): the new #NMIPRoute object, or %NULL on error
+ **/
+NMIPRoute *
+nm_ip_route_new_binary (int family,
+ gconstpointer dest,
+ guint prefix,
+ gconstpointer next_hop,
+ gint64 metric,
+ GError **error)
+{
+ NMIPRoute *route;
+ char string[NM_UTILS_INET_ADDRSTRLEN];
+
+ g_return_val_if_fail (family == AF_INET || family == AF_INET6, NULL);
+
+ if (!valid_prefix (family, prefix, error, TRUE))
+ return NULL;
+ if (!valid_metric (metric, error))
+ return NULL;
+
+ route = g_slice_new0 (NMIPRoute);
+ route->refcount = 1;
+
+ route->family = family;
+ route->dest = g_strdup (inet_ntop (family, dest, string, sizeof (string)));
+ route->prefix = prefix;
+ if (next_hop)
+ route->next_hop = g_strdup (inet_ntop (family, next_hop, string, sizeof (string)));
+ route->metric = metric;
+
+ return route;
+}
+
+/**
+ * nm_ip_route_ref:
+ * @route: the #NMIPRoute
+ *
+ * Increases the reference count of the object.
+ **/
+void
+nm_ip_route_ref (NMIPRoute *route)
+{
+ g_return_if_fail (route != NULL);
+ g_return_if_fail (route->refcount > 0);
+
+ route->refcount++;
+}
+
+/**
+ * nm_ip_route_unref:
+ * @route: the #NMIPRoute
+ *
+ * Decreases the reference count of the object. If the reference count
+ * reaches zero, the object will be destroyed.
+ **/
+void
+nm_ip_route_unref (NMIPRoute *route)
+{
+ g_return_if_fail (route != NULL);
+ g_return_if_fail (route->refcount > 0);
+
+ route->refcount--;
+ if (route->refcount == 0) {
+ g_free (route->dest);
+ g_free (route->next_hop);
+ if (route->attributes)
+ g_hash_table_unref (route->attributes);
+ g_slice_free (NMIPRoute, route);
+ }
+}
+
+/**
+ * nm_ip_route_equal:
+ * @route: the #NMIPRoute
+ * @other: the #NMIPRoute to compare @route to.
+ *
+ * Determines if two #NMIPRoute objects contain the same destination, prefix,
+ * next hop, and metric. (Attributes are not compared.)
+ *
+ * Returns: %TRUE if the objects contain the same values, %FALSE if they do not.
+ **/
+gboolean
+nm_ip_route_equal (NMIPRoute *route, NMIPRoute *other)
+{
+ g_return_val_if_fail (route != NULL, FALSE);
+ g_return_val_if_fail (route->refcount > 0, FALSE);
+
+ g_return_val_if_fail (other != NULL, FALSE);
+ g_return_val_if_fail (other->refcount > 0, FALSE);
+
+ if ( route->prefix != other->prefix
+ || route->metric != other->metric
+ || strcmp (route->dest, other->dest) != 0
+ || g_strcmp0 (route->next_hop, other->next_hop) != 0)
+ return FALSE;
+ return TRUE;
+}
+
+/**
+ * nm_ip_route_dup:
+ * @route: the #NMIPRoute
+ *
+ * Creates a copy of @route
+ *
+ * Returns: (transfer full): a copy of @route
+ **/
+NMIPRoute *
+nm_ip_route_dup (NMIPRoute *route)
+{
+ NMIPRoute *copy;
+
+ g_return_val_if_fail (route != NULL, NULL);
+ g_return_val_if_fail (route->refcount > 0, NULL);
+
+ copy = nm_ip_route_new (route->family,
+ route->dest, route->prefix,
+ route->next_hop, route->metric,
+ NULL);
+ if (route->attributes) {
+ GHashTableIter iter;
+ const char *key;
+ GVariant *value;
+
+ g_hash_table_iter_init (&iter, route->attributes);
+ while (g_hash_table_iter_next (&iter, (gpointer *) &key, (gpointer *) &value))
+ nm_ip_route_set_attribute (copy, key, value);
+ }
+
+ return copy;
+}
+
+/**
+ * nm_ip_route_get_family:
+ * @route: the #NMIPRoute
+ *
+ * Gets the IP address family (eg, AF_INET) property of this route
+ * object.
+ *
+ * Returns: the IP address family
+ **/
+int
+nm_ip_route_get_family (NMIPRoute *route)
+{
+ g_return_val_if_fail (route != NULL, 0);
+ g_return_val_if_fail (route->refcount > 0, 0);
+
+ return route->family;
+}
+
+/**
+ * nm_ip_route_get_dest:
+ * @route: the #NMIPRoute
+ *
+ * Gets the IP destination address property of this route object.
+ *
+ * Returns: the IP address of the route's destination
+ **/
+const char *
+nm_ip_route_get_dest (NMIPRoute *route)
+{
+ g_return_val_if_fail (route != NULL, NULL);
+ g_return_val_if_fail (route->refcount > 0, NULL);
+
+ return route->dest;
+}
+
+/**
+ * nm_ip_route_set_dest:
+ * @route: the #NMIPRoute
+ * @dest: the route's destination, as a string
+ *
+ * Sets the destination property of this route object.
+ *
+ * @dest must be a valid address of @route's family. If you aren't sure you
+ * have a valid address, use nm_utils_ipaddr_valid() to check it.
+ **/
+void
+nm_ip_route_set_dest (NMIPRoute *route,
+ const char *dest)
+{
+ g_return_if_fail (route != NULL);
+ g_return_if_fail (dest != NULL);
+ g_return_if_fail (nm_utils_ipaddr_valid (route->family, dest));
+
+ g_free (route->dest);
+ route->dest = canonicalize_ip (route->family, dest, FALSE);
+}
+
+/**
+ * nm_ip_route_get_dest_binary: (skip)
+ * @route: the #NMIPRoute
+ * @dest: a buffer in which to store the destination in binary format.
+ *
+ * Gets the destination property of this route object.
+ *
+ * @dest must point to a buffer that is the correct size for @route's family.
+ **/
+void
+nm_ip_route_get_dest_binary (NMIPRoute *route,
+ gpointer dest)
+{
+ g_return_if_fail (route != NULL);
+ g_return_if_fail (dest != NULL);
+
+ inet_pton (route->family, route->dest, dest);
+}
+
+/**
+ * nm_ip_route_set_dest_binary: (skip)
+ * @route: the #NMIPRoute
+ * @dest: the route's destination, in binary format
+ *
+ * Sets the destination property of this route object.
+ *
+ * @dest must point to a buffer that is the correct size for @route's family.
+ **/
+void
+nm_ip_route_set_dest_binary (NMIPRoute *route,
+ gconstpointer dest)
+{
+ char string[NM_UTILS_INET_ADDRSTRLEN];
+
+ g_return_if_fail (route != NULL);
+ g_return_if_fail (dest != NULL);
+
+ g_free (route->dest);
+ route->dest = g_strdup (inet_ntop (route->family, dest, string, sizeof (string)));
+}
+
+/**
+ * nm_ip_route_get_prefix:
+ * @route: the #NMIPRoute
+ *
+ * Gets the IP prefix (ie "24" or "30" etc) of this route.
+ *
+ * Returns: the IP prefix
+ **/
+guint
+nm_ip_route_get_prefix (NMIPRoute *route)
+{
+ g_return_val_if_fail (route != NULL, 0);
+ g_return_val_if_fail (route->refcount > 0, 0);
+
+ return route->prefix;
+}
+
+/**
+ * nm_ip_route_set_prefix:
+ * @route: the #NMIPRoute
+ * @prefix: the route prefix
+ *
+ * Sets the prefix property of this route object.
+ **/
+void
+nm_ip_route_set_prefix (NMIPRoute *route,
+ guint prefix)
+{
+ g_return_if_fail (route != NULL);
+ g_return_if_fail (valid_prefix (route->family, prefix, NULL, TRUE));
+
+ route->prefix = prefix;
+}
+
+/**
+ * nm_ip_route_get_next_hop:
+ * @route: the #NMIPRoute
+ *
+ * Gets the IP address of the next hop of this route; this will be %NULL if the
+ * route has no next hop.
+ *
+ * Returns: the IP address of the next hop, or %NULL if this is a device route.
+ **/
+const char *
+nm_ip_route_get_next_hop (NMIPRoute *route)
+{
+ g_return_val_if_fail (route != NULL, NULL);
+ g_return_val_if_fail (route->refcount > 0, NULL);
+
+ return route->next_hop;
+}
+
+/**
+ * nm_ip_route_set_next_hop:
+ * @route: the #NMIPRoute
+ * @next_hop: (allow-none): the route's next hop, as a string
+ *
+ * Sets the next-hop property of this route object.
+ *
+ * @next_hop (if non-%NULL) must be a valid address of @route's family. If you
+ * aren't sure you have a valid address, use nm_utils_ipaddr_valid() to check
+ * it.
+ **/
+void
+nm_ip_route_set_next_hop (NMIPRoute *route,
+ const char *next_hop)
+{
+ g_return_if_fail (route != NULL);
+ g_return_if_fail (!next_hop || nm_utils_ipaddr_valid (route->family, next_hop));
+
+ g_free (route->next_hop);
+ route->next_hop = canonicalize_ip (route->family, next_hop, TRUE);
+}
+
+/**
+ * nm_ip_route_get_next_hop_binary: (skip)
+ * @route: the #NMIPRoute
+ * @next_hop: a buffer in which to store the next hop in binary format.
+ *
+ * Gets the next hop property of this route object.
+ *
+ * @next_hop must point to a buffer that is the correct size for @route's family.
+ *
+ * Returns: %TRUE if @route has a next hop, %FALSE if not (in which case
+ * @next_hop will be zeroed out)
+ **/
+gboolean
+nm_ip_route_get_next_hop_binary (NMIPRoute *route,
+ gpointer next_hop)
+{
+ g_return_val_if_fail (route != NULL, FALSE);
+ g_return_val_if_fail (next_hop != NULL, FALSE);
+
+ if (route->next_hop) {
+ inet_pton (route->family, route->next_hop, next_hop);
+ return TRUE;
+ } else {
+ memset (next_hop, 0,
+ route->family == AF_INET ? sizeof (struct in_addr) : sizeof (struct in6_addr));
+ return FALSE;
+ }
+}
+
+/**
+ * nm_ip_route_set_next_hop_binary: (skip)
+ * @route: the #NMIPRoute
+ * @next_hop: the route's next hop, in binary format
+ *
+ * Sets the destination property of this route object.
+ *
+ * @next_hop (if non-%NULL) must point to a buffer that is the correct size for
+ * @route's family.
+ **/
+void
+nm_ip_route_set_next_hop_binary (NMIPRoute *route,
+ gconstpointer next_hop)
+{
+ char string[NM_UTILS_INET_ADDRSTRLEN];
+
+ g_return_if_fail (route != NULL);
+
+ g_free (route->next_hop);
+ if (next_hop)
+ route->next_hop = g_strdup (inet_ntop (route->family, next_hop, string, sizeof (string)));
+ else
+ route->next_hop = NULL;
+}
+
+/**
+ * nm_ip_route_get_metric:
+ * @route: the #NMIPRoute
+ *
+ * Gets the route metric property of this route object; lower values
+ * indicate "better" or more preferred routes; -1 indicates "default"
+ * (meaning NetworkManager will set it appropriately).
+ *
+ * Returns: the route metric
+ **/
+gint64
+nm_ip_route_get_metric (NMIPRoute *route)
+{
+ g_return_val_if_fail (route != NULL, 0);
+ g_return_val_if_fail (route->refcount > 0, 0);
+
+ return route->metric;
+}
+
+/**
+ * nm_ip_route_set_metric:
+ * @route: the #NMIPRoute
+ * @metric: the route metric (or -1 for "default")
+ *
+ * Sets the metric property of this route object.
+ **/
+void
+nm_ip_route_set_metric (NMIPRoute *route,
+ gint64 metric)
+{
+ g_return_if_fail (route != NULL);
+ g_return_if_fail (valid_metric (metric, NULL));
+
+ route->metric = metric;
+}
+
+/**
+ * nm_ip_route_get_attribute_names:
+ * @route: the #NMIPRoute
+ *
+ * Gets an array of attribute names defined on @route.
+ *
+ * Returns: (transfer full): a %NULL-terminated array of attribute names
+ **/
+char **
+nm_ip_route_get_attribute_names (NMIPRoute *route)
+{
+ GHashTableIter iter;
+ const char *key;
+ GPtrArray *names;
+
+ g_return_val_if_fail (route != NULL, NULL);
+
+ names = g_ptr_array_new ();
+
+ if (route->attributes) {
+ g_hash_table_iter_init (&iter, route->attributes);
+ while (g_hash_table_iter_next (&iter, (gpointer *) &key, NULL))
+ g_ptr_array_add (names, g_strdup (key));
+ }
+ g_ptr_array_add (names, NULL);
+
+ return (char **) g_ptr_array_free (names, FALSE);
+}
+
+/**
+ * nm_ip_route_get_attribute:
+ * @route: the #NMIPRoute
+ * @name: the name of an route attribute
+ *
+ * Gets the value of the attribute with name @name on @route
+ *
+ * Returns: (transfer none): the value of the attribute with name @name on
+ * @route, or %NULL if @route has no such attribute.
+ **/
+GVariant *
+nm_ip_route_get_attribute (NMIPRoute *route, const char *name)
+{
+ g_return_val_if_fail (route != NULL, NULL);
+ g_return_val_if_fail (name != NULL && *name != '\0', NULL);
+
+ if (route->attributes)
+ return g_hash_table_lookup (route->attributes, name);
+ else
+ return NULL;
+}
+
+/**
+ * nm_ip_route_set_attribute:
+ * @route: the #NMIPRoute
+ * @name: the name of a route attribute
+ * @value: (transfer none) (allow-none): the value
+ *
+ * Sets the named attribute on @route to the given value.
+ **/
+void
+nm_ip_route_set_attribute (NMIPRoute *route, const char *name, GVariant *value)
+{
+ g_return_if_fail (route != NULL);
+ g_return_if_fail (name != NULL && *name != '\0');
+ g_return_if_fail ( strcmp (name, "dest") != 0 && strcmp (name, "prefix") != 0
+ && strcmp (name, "next-hop") != 0 && strcmp (name, "metric") != 0);
+
+ if (!route->attributes) {
+ route->attributes = g_hash_table_new_full (g_str_hash, g_str_equal,
+ g_free, (GDestroyNotify) g_variant_unref);
+ }
+
+ if (value)
+ g_hash_table_insert (route->attributes, g_strdup (name), g_variant_ref_sink (value));
+ else
+ g_hash_table_remove (route->attributes, name);
+}
+
+
+G_DEFINE_ABSTRACT_TYPE (NMSettingIPConfig, nm_setting_ip_config, NM_TYPE_SETTING)
+
+#define NM_SETTING_IP_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_IP_CONFIG, NMSettingIPConfigPrivate))
+
+typedef struct {
+ char *method;
+ GPtrArray *dns; /* array of IP address strings */
+ GPtrArray *dns_search; /* array of domain name strings */
+ GPtrArray *addresses; /* array of NMIPAddress */
+ GPtrArray *routes; /* array of NMIPRoute */
+ gint64 route_metric;
+ char *gateway;
+ gboolean ignore_auto_routes;
+ gboolean ignore_auto_dns;
+ char *dhcp_hostname;
+ gboolean dhcp_send_hostname;
+ gboolean never_default;
+ gboolean may_fail;
+} NMSettingIPConfigPrivate;
+
+enum {
+ PROP_0,
+ PROP_METHOD,
+ PROP_DNS,
+ PROP_DNS_SEARCH,
+ PROP_ADDRESSES,
+ PROP_GATEWAY,
+ PROP_ROUTES,
+ PROP_ROUTE_METRIC,
+ PROP_IGNORE_AUTO_ROUTES,
+ PROP_IGNORE_AUTO_DNS,
+ PROP_DHCP_HOSTNAME,
+ PROP_DHCP_SEND_HOSTNAME,
+ PROP_NEVER_DEFAULT,
+ PROP_MAY_FAIL,
+
+ LAST_PROP
+};
+
+#define NM_SETTING_IP_CONFIG_GET_FAMILY(setting) (NM_IS_SETTING_IP4_CONFIG (setting) ? AF_INET : AF_INET6)
+
+/**
+ * nm_setting_ip_config_get_method:
+ * @setting: the #NMSettingIPConfig
+ *
+ * Returns: the #NMSettingIPConfig:method property of the setting; see
+ * #NMSettingIP4Config and #NMSettingIP6Config for details of the
+ * methods available with each type.
+ **/
+const char *
+nm_setting_ip_config_get_method (NMSettingIPConfig *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_IP_CONFIG (setting), NULL);
+
+ return NM_SETTING_IP_CONFIG_GET_PRIVATE (setting)->method;
+}
+
+/**
+ * nm_setting_ip_config_get_num_dns:
+ * @setting: the #NMSettingIPConfig
+ *
+ * Returns: the number of configured DNS servers
+ **/
+guint
+nm_setting_ip_config_get_num_dns (NMSettingIPConfig *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_IP_CONFIG (setting), 0);
+
+ return NM_SETTING_IP_CONFIG_GET_PRIVATE (setting)->dns->len;
+}
+
+/**
+ * nm_setting_ip_config_get_dns:
+ * @setting: the #NMSettingIPConfig
+ * @i: index number of the DNS server to return
+ *
+ * Returns: the IP address of the DNS server at index @i
+ **/
+const char *
+nm_setting_ip_config_get_dns (NMSettingIPConfig *setting, int i)
+{
+ NMSettingIPConfigPrivate *priv;
+
+ g_return_val_if_fail (NM_IS_SETTING_IP_CONFIG (setting), NULL);
+
+ priv = NM_SETTING_IP_CONFIG_GET_PRIVATE (setting);
+ g_return_val_if_fail (i < priv->dns->len, NULL);
+
+ return priv->dns->pdata[i];
+}
+
+/**
+ * nm_setting_ip_config_add_dns:
+ * @setting: the #NMSettingIPConfig
+ * @dns: the IP address of the DNS server to add
+ *
+ * Adds a new DNS server to the setting.
+ *
+ * Returns: %TRUE if the DNS server was added; %FALSE if the server was already
+ * known
+ **/
+gboolean
+nm_setting_ip_config_add_dns (NMSettingIPConfig *setting, const char *dns)
+{
+ NMSettingIPConfigPrivate *priv;
+ char *dns_canonical;
+ int i;
+
+ g_return_val_if_fail (NM_IS_SETTING_IP_CONFIG (setting), FALSE);
+ g_return_val_if_fail (dns != NULL, FALSE);
+ g_return_val_if_fail (nm_utils_ipaddr_valid (NM_SETTING_IP_CONFIG_GET_FAMILY (setting), dns), FALSE);
+
+ priv = NM_SETTING_IP_CONFIG_GET_PRIVATE (setting);
+
+ dns_canonical = canonicalize_ip (NM_SETTING_IP_CONFIG_GET_FAMILY (setting), dns, FALSE);
+ for (i = 0; i < priv->dns->len; i++) {
+ if (!strcmp (dns_canonical, priv->dns->pdata[i])) {
+ g_free (dns_canonical);
+ return FALSE;
+ }
+ }
+
+ g_ptr_array_add (priv->dns, dns_canonical);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP_CONFIG_DNS);
+ return TRUE;
+}
+
+/**
+ * nm_setting_ip_config_remove_dns:
+ * @setting: the #NMSettingIPConfig
+ * @i: index number of the DNS server to remove
+ *
+ * Removes the DNS server at index @i.
+ **/
+void
+nm_setting_ip_config_remove_dns (NMSettingIPConfig *setting, int i)
+{
+ NMSettingIPConfigPrivate *priv;
+
+ g_return_if_fail (NM_IS_SETTING_IP_CONFIG (setting));
+
+ priv = NM_SETTING_IP_CONFIG_GET_PRIVATE (setting);
+ g_return_if_fail (i < priv->dns->len);
+
+ g_ptr_array_remove_index (priv->dns, i);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP_CONFIG_DNS);
+}
+
+/**
+ * nm_setting_ip_config_remove_dns_by_value:
+ * @setting: the #NMSettingIPConfig
+ * @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.
+ **/
+gboolean
+nm_setting_ip_config_remove_dns_by_value (NMSettingIPConfig *setting, const char *dns)
+{
+ NMSettingIPConfigPrivate *priv;
+ char *dns_canonical;
+ int i;
+
+ g_return_val_if_fail (NM_IS_SETTING_IP_CONFIG (setting), FALSE);
+ g_return_val_if_fail (dns != NULL, FALSE);
+ g_return_val_if_fail (nm_utils_ipaddr_valid (NM_SETTING_IP_CONFIG_GET_FAMILY (setting), dns), FALSE);
+
+ priv = NM_SETTING_IP_CONFIG_GET_PRIVATE (setting);
+
+ dns_canonical = canonicalize_ip (NM_SETTING_IP_CONFIG_GET_FAMILY (setting), dns, FALSE);
+ for (i = 0; i < priv->dns->len; i++) {
+ if (!strcmp (dns_canonical, priv->dns->pdata[i])) {
+ g_ptr_array_remove_index (priv->dns, i);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP_CONFIG_DNS);
+ g_free (dns_canonical);
+ return TRUE;
+ }
+ }
+ g_free (dns_canonical);
+ return FALSE;
+}
+
+/**
+ * nm_setting_ip_config_clear_dns:
+ * @setting: the #NMSettingIPConfig
+ *
+ * Removes all configured DNS servers.
+ **/
+void
+nm_setting_ip_config_clear_dns (NMSettingIPConfig *setting)
+{
+ NMSettingIPConfigPrivate *priv;
+
+ g_return_if_fail (NM_IS_SETTING_IP_CONFIG (setting));
+
+ priv = NM_SETTING_IP_CONFIG_GET_PRIVATE (setting);
+ g_ptr_array_set_size (priv->dns, 0);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP_CONFIG_DNS);
+}
+
+/**
+ * nm_setting_ip_config_get_num_dns_searches:
+ * @setting: the #NMSettingIPConfig
+ *
+ * Returns: the number of configured DNS search domains
+ **/
+guint
+nm_setting_ip_config_get_num_dns_searches (NMSettingIPConfig *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_IP_CONFIG (setting), 0);
+
+ return NM_SETTING_IP_CONFIG_GET_PRIVATE (setting)->dns_search->len;
+}
+
+/**
+ * nm_setting_ip_config_get_dns_search:
+ * @setting: the #NMSettingIPConfig
+ * @i: index number of the DNS search domain to return
+ *
+ * Returns: the DNS search domain at index @i
+ **/
+const char *
+nm_setting_ip_config_get_dns_search (NMSettingIPConfig *setting, int i)
+{
+ NMSettingIPConfigPrivate *priv;
+
+ g_return_val_if_fail (NM_IS_SETTING_IP_CONFIG (setting), NULL);
+
+ priv = NM_SETTING_IP_CONFIG_GET_PRIVATE (setting);
+ g_return_val_if_fail (i < priv->dns_search->len, NULL);
+
+ return priv->dns_search->pdata[i];
+}
+
+/**
+ * nm_setting_ip_config_add_dns_search:
+ * @setting: the #NMSettingIPConfig
+ * @dns_search: the search domain to add
+ *
+ * Adds a new DNS search domain to the setting.
+ *
+ * Returns: %TRUE if the DNS search domain was added; %FALSE if the search
+ * domain was already known
+ **/
+gboolean
+nm_setting_ip_config_add_dns_search (NMSettingIPConfig *setting,
+ const char *dns_search)
+{
+ NMSettingIPConfigPrivate *priv;
+ int i;
+
+ g_return_val_if_fail (NM_IS_SETTING_IP_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_IP_CONFIG_GET_PRIVATE (setting);
+ for (i = 0; i < priv->dns_search->len; i++) {
+ if (!strcmp (dns_search, priv->dns_search->pdata[i]))
+ return FALSE;
+ }
+
+ g_ptr_array_add (priv->dns_search, g_strdup (dns_search));
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP_CONFIG_DNS_SEARCH);
+ return TRUE;
+}
+
+/**
+ * nm_setting_ip_config_remove_dns_search:
+ * @setting: the #NMSettingIPConfig
+ * @i: index number of the DNS search domain
+ *
+ * Removes the DNS search domain at index @i.
+ **/
+void
+nm_setting_ip_config_remove_dns_search (NMSettingIPConfig *setting, int i)
+{
+ NMSettingIPConfigPrivate *priv;
+
+ g_return_if_fail (NM_IS_SETTING_IP_CONFIG (setting));
+
+ priv = NM_SETTING_IP_CONFIG_GET_PRIVATE (setting);
+ g_return_if_fail (i < priv->dns_search->len);
+
+ g_ptr_array_remove_index (priv->dns_search, i);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP_CONFIG_DNS_SEARCH);
+}
+
+/**
+ * nm_setting_ip_config_remove_dns_search_by_value:
+ * @setting: the #NMSettingIPConfig
+ * @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_ip_config_remove_dns_search_by_value (NMSettingIPConfig *setting,
+ const char *dns_search)
+{
+ NMSettingIPConfigPrivate *priv;
+ int i;
+
+ g_return_val_if_fail (NM_IS_SETTING_IP_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_IP_CONFIG_GET_PRIVATE (setting);
+ for (i = 0; i < priv->dns_search->len; i++) {
+ if (!strcmp (dns_search, priv->dns_search->pdata[i])) {
+ g_ptr_array_remove_index (priv->dns_search, i);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP_CONFIG_DNS_SEARCH);
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+/**
+ * nm_setting_ip_config_clear_dns_searches:
+ * @setting: the #NMSettingIPConfig
+ *
+ * Removes all configured DNS search domains.
+ **/
+void
+nm_setting_ip_config_clear_dns_searches (NMSettingIPConfig *setting)
+{
+ NMSettingIPConfigPrivate *priv;
+
+ g_return_if_fail (NM_IS_SETTING_IP_CONFIG (setting));
+
+ priv = NM_SETTING_IP_CONFIG_GET_PRIVATE (setting);
+ g_ptr_array_set_size (priv->dns_search, 0);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP_CONFIG_DNS_SEARCH);
+}
+
+/**
+ * nm_setting_ip_config_get_num_addresses:
+ * @setting: the #NMSettingIPConfig
+ *
+ * Returns: the number of configured addresses
+ **/
+guint
+nm_setting_ip_config_get_num_addresses (NMSettingIPConfig *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_IP_CONFIG (setting), 0);
+
+ return NM_SETTING_IP_CONFIG_GET_PRIVATE (setting)->addresses->len;
+}
+
+/**
+ * nm_setting_ip_config_get_address:
+ * @setting: the #NMSettingIPConfig
+ * @i: index number of the address to return
+ *
+ * Returns: the address at index @i
+ **/
+NMIPAddress *
+nm_setting_ip_config_get_address (NMSettingIPConfig *setting, int i)
+{
+ NMSettingIPConfigPrivate *priv;
+
+ g_return_val_if_fail (NM_IS_SETTING_IP_CONFIG (setting), NULL);
+
+ priv = NM_SETTING_IP_CONFIG_GET_PRIVATE (setting);
+ g_return_val_if_fail (i < priv->addresses->len, NULL);
+
+ return priv->addresses->pdata[i];
+}
+
+/**
+ * nm_setting_ip_config_add_address:
+ * @setting: the #NMSettingIPConfig
+ * @address: the new address to add
+ *
+ * Adds a new IP address and associated information to the setting. The
+ * given address is duplicated internally and is not changed by this function.
+ *
+ * Returns: %TRUE if the address was added; %FALSE if the address was already
+ * known.
+ **/
+gboolean
+nm_setting_ip_config_add_address (NMSettingIPConfig *setting,
+ NMIPAddress *address)
+{
+ NMSettingIPConfigPrivate *priv;
+ int i;
+
+ g_return_val_if_fail (NM_IS_SETTING_IP_CONFIG (setting), FALSE);
+ g_return_val_if_fail (address != NULL, FALSE);
+ g_return_val_if_fail (address->family == NM_SETTING_IP_CONFIG_GET_FAMILY (setting), FALSE);
+
+ priv = NM_SETTING_IP_CONFIG_GET_PRIVATE (setting);
+ for (i = 0; i < priv->addresses->len; i++) {
+ if (nm_ip_address_equal (priv->addresses->pdata[i], address))
+ return FALSE;
+ }
+
+ g_ptr_array_add (priv->addresses, nm_ip_address_dup (address));
+
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP_CONFIG_ADDRESSES);
+ return TRUE;
+}
+
+/**
+ * nm_setting_ip_config_remove_address:
+ * @setting: the #NMSettingIPConfig
+ * @i: index number of the address to remove
+ *
+ * Removes the address at index @i.
+ **/
+void
+nm_setting_ip_config_remove_address (NMSettingIPConfig *setting, int i)
+{
+ NMSettingIPConfigPrivate *priv;
+
+ g_return_if_fail (NM_IS_SETTING_IP_CONFIG (setting));
+
+ priv = NM_SETTING_IP_CONFIG_GET_PRIVATE (setting);
+ g_return_if_fail (i < priv->addresses->len);
+
+ g_ptr_array_remove_index (priv->addresses, i);
+
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP_CONFIG_ADDRESSES);
+}
+
+/**
+ * nm_setting_ip_config_remove_address_by_value:
+ * @setting: the #NMSettingIPConfig
+ * @address: the IP address to remove
+ *
+ * Removes the address @address.
+ *
+ * Returns: %TRUE if the address was found and removed; %FALSE if it was not.
+ **/
+gboolean
+nm_setting_ip_config_remove_address_by_value (NMSettingIPConfig *setting,
+ NMIPAddress *address)
+{
+ NMSettingIPConfigPrivate *priv;
+ int i;
+
+ g_return_val_if_fail (NM_IS_SETTING_IP_CONFIG (setting), FALSE);
+ g_return_val_if_fail (address != NULL, FALSE);
+
+ priv = NM_SETTING_IP_CONFIG_GET_PRIVATE (setting);
+ for (i = 0; i < priv->addresses->len; i++) {
+ if (nm_ip_address_equal (priv->addresses->pdata[i], address)) {
+ g_ptr_array_remove_index (priv->addresses, i);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP_CONFIG_ADDRESSES);
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+/**
+ * nm_setting_ip_config_clear_addresses:
+ * @setting: the #NMSettingIPConfig
+ *
+ * Removes all configured addresses.
+ **/
+void
+nm_setting_ip_config_clear_addresses (NMSettingIPConfig *setting)
+{
+ NMSettingIPConfigPrivate *priv = NM_SETTING_IP_CONFIG_GET_PRIVATE (setting);
+
+ g_return_if_fail (NM_IS_SETTING_IP_CONFIG (setting));
+
+ g_ptr_array_set_size (priv->addresses, 0);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP_CONFIG_ADDRESSES);
+}
+
+/**
+ * nm_setting_ip_config_get_gateway:
+ * @setting: the #NMSettingIPConfig
+ *
+ * Returns: the IP address of the gateway associated with this configuration, or
+ * %NULL.
+ **/
+const char *
+nm_setting_ip_config_get_gateway (NMSettingIPConfig *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_IP_CONFIG (setting), NULL);
+
+ return NM_SETTING_IP_CONFIG_GET_PRIVATE (setting)->gateway;
+}
+
+/**
+ * nm_setting_ip_config_get_num_routes:
+ * @setting: the #NMSettingIPConfig
+ *
+ * Returns: the number of configured routes
+ **/
+guint
+nm_setting_ip_config_get_num_routes (NMSettingIPConfig *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_IP_CONFIG (setting), 0);
+
+ return NM_SETTING_IP_CONFIG_GET_PRIVATE (setting)->routes->len;
+}
+
+/**
+ * nm_setting_ip_config_get_route:
+ * @setting: the #NMSettingIPConfig
+ * @i: index number of the route to return
+ *
+ * Returns: the route at index @i
+ **/
+NMIPRoute *
+nm_setting_ip_config_get_route (NMSettingIPConfig *setting, int i)
+{
+ NMSettingIPConfigPrivate *priv;
+
+ g_return_val_if_fail (NM_IS_SETTING_IP_CONFIG (setting), NULL);
+
+ priv = NM_SETTING_IP_CONFIG_GET_PRIVATE (setting);
+ g_return_val_if_fail (i < priv->routes->len, NULL);
+
+ return priv->routes->pdata[i];
+}
+
+/**
+ * nm_setting_ip_config_add_route:
+ * @setting: the #NMSettingIPConfig
+ * @route: the route to add
+ *
+ * Adds a new route and associated information to the setting. The
+ * given route is duplicated internally and is not changed by this function.
+ *
+ * Returns: %TRUE if the route was added; %FALSE if the route was already known.
+ **/
+gboolean
+nm_setting_ip_config_add_route (NMSettingIPConfig *setting,
+ NMIPRoute *route)
+{
+ NMSettingIPConfigPrivate *priv;
+ int i;
+
+ g_return_val_if_fail (NM_IS_SETTING_IP_CONFIG (setting), FALSE);
+ g_return_val_if_fail (route != NULL, FALSE);
+ g_return_val_if_fail (route->family == NM_SETTING_IP_CONFIG_GET_FAMILY (setting), FALSE);
+
+ priv = NM_SETTING_IP_CONFIG_GET_PRIVATE (setting);
+ for (i = 0; i < priv->routes->len; i++) {
+ if (nm_ip_route_equal (priv->routes->pdata[i], route))
+ return FALSE;
+ }
+
+ g_ptr_array_add (priv->routes, nm_ip_route_dup (route));
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP_CONFIG_ROUTES);
+ return TRUE;
+}
+
+/**
+ * nm_setting_ip_config_remove_route:
+ * @setting: the #NMSettingIPConfig
+ * @i: index number of the route
+ *
+ * Removes the route at index @i.
+ **/
+void
+nm_setting_ip_config_remove_route (NMSettingIPConfig *setting, int i)
+{
+ NMSettingIPConfigPrivate *priv;
+
+ g_return_if_fail (NM_IS_SETTING_IP_CONFIG (setting));
+
+ priv = NM_SETTING_IP_CONFIG_GET_PRIVATE (setting);
+ g_return_if_fail (i < priv->routes->len);
+
+ g_ptr_array_remove_index (priv->routes, i);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP_CONFIG_ROUTES);
+}
+
+/**
+ * nm_setting_ip_config_remove_route_by_value:
+ * @setting: the #NMSettingIPConfig
+ * @route: the route to remove
+ *
+ * Removes the route @route.
+ *
+ * Returns: %TRUE if the route was found and removed; %FALSE if it was not.
+ **/
+gboolean
+nm_setting_ip_config_remove_route_by_value (NMSettingIPConfig *setting,
+ NMIPRoute *route)
+{
+ NMSettingIPConfigPrivate *priv;
+ int i;
+
+ g_return_val_if_fail (NM_IS_SETTING_IP_CONFIG (setting), FALSE);
+ g_return_val_if_fail (route != NULL, FALSE);
+
+ priv = NM_SETTING_IP_CONFIG_GET_PRIVATE (setting);
+ for (i = 0; i < priv->routes->len; i++) {
+ if (nm_ip_route_equal (priv->routes->pdata[i], route)) {
+ g_ptr_array_remove_index (priv->routes, i);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP_CONFIG_ROUTES);
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+/**
+ * nm_setting_ip_config_clear_routes:
+ * @setting: the #NMSettingIPConfig
+ *
+ * Removes all configured routes.
+ **/
+void
+nm_setting_ip_config_clear_routes (NMSettingIPConfig *setting)
+{
+ NMSettingIPConfigPrivate *priv = NM_SETTING_IP_CONFIG_GET_PRIVATE (setting);
+
+ g_return_if_fail (NM_IS_SETTING_IP_CONFIG (setting));
+
+ g_ptr_array_set_size (priv->routes, 0);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_IP_CONFIG_ROUTES);
+}
+
+/**
+ * nm_setting_ip_config_get_route_metric:
+ * @setting: the #NMSettingIPConfig
+ *
+ * Returns the value contained in the #NMSettingIPConfig:route-metric
+ * property.
+ *
+ * Returns: the route metric that is used for routes that don't explicitly
+ * specify a metric. See #NMSettingIPConfig:route-metric for more details.
+ **/
+gint64
+nm_setting_ip_config_get_route_metric (NMSettingIPConfig *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_IP_CONFIG (setting), -1);
+
+ return NM_SETTING_IP_CONFIG_GET_PRIVATE (setting)->route_metric;
+}
+
+
+/**
+ * nm_setting_ip_config_get_ignore_auto_routes:
+ * @setting: the #NMSettingIPConfig
+ *
+ * Returns the value contained in the #NMSettingIPConfig:ignore-auto-routes
+ * property.
+ *
+ * Returns: %TRUE if automatically configured (ie via DHCP) routes should be
+ * ignored.
+ **/
+gboolean
+nm_setting_ip_config_get_ignore_auto_routes (NMSettingIPConfig *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_IP_CONFIG (setting), FALSE);
+
+ return NM_SETTING_IP_CONFIG_GET_PRIVATE (setting)->ignore_auto_routes;
+}
+
+/**
+ * nm_setting_ip_config_get_ignore_auto_dns:
+ * @setting: the #NMSettingIPConfig
+ *
+ * Returns the value contained in the #NMSettingIPConfig:ignore-auto-dns
+ * property.
+ *
+ * Returns: %TRUE if automatically configured (ie via DHCP) DNS information
+ * should be ignored.
+ **/
+gboolean
+nm_setting_ip_config_get_ignore_auto_dns (NMSettingIPConfig *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_IP_CONFIG (setting), FALSE);
+
+ return NM_SETTING_IP_CONFIG_GET_PRIVATE (setting)->ignore_auto_dns;
+}
+
+/**
+ * nm_setting_ip_config_get_dhcp_hostname:
+ * @setting: the #NMSettingIPConfig
+ *
+ * Returns the value contained in the #NMSettingIPConfig:dhcp-hostname
+ * property.
+ *
+ * Returns: the configured hostname to send to the DHCP server
+ **/
+const char *
+nm_setting_ip_config_get_dhcp_hostname (NMSettingIPConfig *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_IP_CONFIG (setting), NULL);
+
+ return NM_SETTING_IP_CONFIG_GET_PRIVATE (setting)->dhcp_hostname;
+}
+
+/**
+ * nm_setting_ip_config_get_dhcp_send_hostname:
+ * @setting: the #NMSettingIPConfig
+ *
+ * Returns the value contained in the #NMSettingIPConfig:dhcp-send-hostname
+ * property.
+ *
+ * Returns: %TRUE 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.
+ **/
+gboolean
+nm_setting_ip_config_get_dhcp_send_hostname (NMSettingIPConfig *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_IP_CONFIG (setting), FALSE);
+
+ return NM_SETTING_IP_CONFIG_GET_PRIVATE (setting)->dhcp_send_hostname;
+}
+
+/**
+ * nm_setting_ip_config_get_never_default:
+ * @setting: the #NMSettingIPConfig
+ *
+ * Returns the value contained in the #NMSettingIPConfig:never-default
+ * property.
+ *
+ * Returns: %TRUE if this connection should never be the default
+ * connection
+ **/
+gboolean
+nm_setting_ip_config_get_never_default (NMSettingIPConfig *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_IP_CONFIG (setting), FALSE);
+
+ return NM_SETTING_IP_CONFIG_GET_PRIVATE (setting)->never_default;
+}
+
+/**
+ * nm_setting_ip_config_get_may_fail:
+ * @setting: the #NMSettingIPConfig
+ *
+ * Returns the value contained in the #NMSettingIPConfig:may-fail
+ * property.
+ *
+ * Returns: %TRUE if this connection doesn't require this type of IP
+ * addressing to complete for the connection to succeed.
+ **/
+gboolean
+nm_setting_ip_config_get_may_fail (NMSettingIPConfig *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_IP_CONFIG (setting), FALSE);
+
+ return NM_SETTING_IP_CONFIG_GET_PRIVATE (setting)->may_fail;
+}
+
+static gboolean
+verify_label (const char *label)
+{
+ 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);
+
+ for (p++; *p; p++) {
+ if (!g_ascii_isalnum (*p) && *p != '_')
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static gboolean
+verify (NMSetting *setting, NMConnection *connection, GError **error)
+{
+ NMSettingIPConfigPrivate *priv = NM_SETTING_IP_CONFIG_GET_PRIVATE (setting);
+ int i;
+
+ if (!priv->method) {
+ g_set_error_literal (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_PROPERTY,
+ _("property is missing"));
+ g_prefix_error (error, "%s.%s: ", nm_setting_get_name (setting), NM_SETTING_IP_CONFIG_METHOD);
+ return FALSE;
+ }
+
+ if (priv->dhcp_hostname && !*priv->dhcp_hostname) {
+ g_set_error_literal (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("property is empty"));
+ g_prefix_error (error, "%s.%s: ", nm_setting_get_name (setting), NM_SETTING_IP_CONFIG_DHCP_HOSTNAME);
+ return FALSE;
+ }
+
+ /* Validate DNS */
+ for (i = 0; i < priv->dns->len; i++) {
+ const char *dns = priv->dns->pdata[i];
+
+ if (!nm_utils_ipaddr_valid (NM_SETTING_IP_CONFIG_GET_FAMILY (setting), dns)) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("%d. DNS server address is invalid"),
+ i+1);
+ g_prefix_error (error, "%s.%s: ", nm_setting_get_name (setting), NM_SETTING_IP_CONFIG_DNS);
+ return FALSE;
+ }
+ }
+
+ /* Validate addresses */
+ for (i = 0; i < priv->addresses->len; i++) {
+ NMIPAddress *addr = (NMIPAddress *) priv->addresses->pdata[i];
+ GVariant *label;
+
+ if (nm_ip_address_get_family (addr) != NM_SETTING_IP_CONFIG_GET_FAMILY (setting)) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("%d. IP address is invalid"),
+ i+1);
+ g_prefix_error (error, "%s.%s: ", nm_setting_get_name (setting), NM_SETTING_IP_CONFIG_ADDRESSES);
+ return FALSE;
+ }
+
+ label = nm_ip_address_get_attribute (addr, "label");
+ if (label) {
+ if (!g_variant_is_of_type (label, G_VARIANT_TYPE_STRING)) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("%d. IP address has 'label' property with invalid type"),
+ i+1);
+ g_prefix_error (error, "%s.%s: ", nm_setting_get_name (setting), NM_SETTING_IP_CONFIG_ADDRESSES);
+ return FALSE;
+ }
+ if (!verify_label (g_variant_get_string (label, NULL))) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("%d. IP address has invalid label '%s'"),
+ i+1, g_variant_get_string (label, NULL));
+ g_prefix_error (error, "%s.%s: ", nm_setting_get_name (setting), NM_SETTING_IP_CONFIG_ADDRESSES);
+ return FALSE;
+ }
+ }
+ }
+
+ /* Validate gateway */
+ if (priv->gateway) {
+ if (!priv->addresses->len) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("gateway cannot be set if there are no addresses configured"));
+ g_prefix_error (error, "%s.%s: ", nm_setting_get_name (setting), NM_SETTING_IP_CONFIG_GATEWAY);
+ return FALSE;
+ }
+
+ if (!nm_utils_ipaddr_valid (NM_SETTING_IP_CONFIG_GET_FAMILY (setting), priv->gateway)) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("gateway is invalid"));
+ g_prefix_error (error, "%s.%s: ", nm_setting_get_name (setting), NM_SETTING_IP_CONFIG_GATEWAY);
+ return FALSE;
+ }
+ }
+
+ /* Validate routes */
+ for (i = 0; i < priv->routes->len; i++) {
+ NMIPRoute *route = (NMIPRoute *) priv->routes->pdata[i];
+
+ if (nm_ip_route_get_family (route) != NM_SETTING_IP_CONFIG_GET_FAMILY (setting)) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("%d. route is invalid"),
+ i+1);
+ g_prefix_error (error, "%s.%s: ", nm_setting_get_name (setting), NM_SETTING_IP_CONFIG_ROUTES);
+ return FALSE;
+ }
+ if (nm_ip_route_get_prefix (route) == 0) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("%d. route cannot be a default route"),
+ i+1);
+ g_prefix_error (error, "%s.%s: ", nm_setting_get_name (setting), NM_SETTING_IP_CONFIG_ROUTES);
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+
+static void
+nm_setting_ip_config_init (NMSettingIPConfig *setting)
+{
+ NMSettingIPConfigPrivate *priv = NM_SETTING_IP_CONFIG_GET_PRIVATE (setting);
+
+ priv->dns = g_ptr_array_new_with_free_func (g_free);
+ priv->dns_search = g_ptr_array_new_with_free_func (g_free);
+ priv->addresses = g_ptr_array_new_with_free_func ((GDestroyNotify) nm_ip_address_unref);
+ priv->routes = g_ptr_array_new_with_free_func ((GDestroyNotify) nm_ip_route_unref);
+}
+
+static void
+finalize (GObject *object)
+{
+ NMSettingIPConfig *self = NM_SETTING_IP_CONFIG (object);
+ NMSettingIPConfigPrivate *priv = NM_SETTING_IP_CONFIG_GET_PRIVATE (self);
+
+ g_free (priv->method);
+ g_free (priv->gateway);
+ g_free (priv->dhcp_hostname);
+
+ g_ptr_array_unref (priv->dns);
+ g_ptr_array_unref (priv->dns_search);
+ g_ptr_array_unref (priv->addresses);
+ g_ptr_array_unref (priv->routes);
+
+ G_OBJECT_CLASS (nm_setting_ip_config_parent_class)->finalize (object);
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ NMSettingIPConfig *setting = NM_SETTING_IP_CONFIG (object);
+ NMSettingIPConfigPrivate *priv = NM_SETTING_IP_CONFIG_GET_PRIVATE (setting);
+ const char *gateway;
+
+ switch (prop_id) {
+ case PROP_METHOD:
+ g_free (priv->method);
+ priv->method = g_value_dup_string (value);
+ break;
+ case PROP_DNS:
+ g_ptr_array_unref (priv->dns);
+ priv->dns = _nm_utils_strv_to_ptrarray (g_value_get_boxed (value));
+ break;
+ case PROP_DNS_SEARCH:
+ g_ptr_array_unref (priv->dns_search);
+ priv->dns_search = _nm_utils_strv_to_ptrarray (g_value_get_boxed (value));
+ break;
+ case PROP_ADDRESSES:
+ g_ptr_array_unref (priv->addresses);
+ priv->addresses = _nm_utils_copy_array (g_value_get_boxed (value),
+ (NMUtilsCopyFunc) nm_ip_address_dup,
+ (GDestroyNotify) nm_ip_address_unref);
+ break;
+ case PROP_GATEWAY:
+ gateway = g_value_get_string (value);
+ g_return_if_fail (!gateway || nm_utils_ipaddr_valid (NM_SETTING_IP_CONFIG_GET_FAMILY (setting), gateway));
+ g_free (priv->gateway);
+ priv->gateway = canonicalize_ip (NM_SETTING_IP_CONFIG_GET_FAMILY (setting), gateway, TRUE);
+ break;
+ case PROP_ROUTES:
+ g_ptr_array_unref (priv->routes);
+ priv->routes = _nm_utils_copy_array (g_value_get_boxed (value),
+ (NMUtilsCopyFunc) nm_ip_route_dup,
+ (GDestroyNotify) nm_ip_route_unref);
+ break;
+ case PROP_ROUTE_METRIC:
+ priv->route_metric = g_value_get_int64 (value);
+ break;
+ case PROP_IGNORE_AUTO_ROUTES:
+ priv->ignore_auto_routes = g_value_get_boolean (value);
+ break;
+ case PROP_IGNORE_AUTO_DNS:
+ priv->ignore_auto_dns = g_value_get_boolean (value);
+ break;
+ case PROP_DHCP_HOSTNAME:
+ g_free (priv->dhcp_hostname);
+ priv->dhcp_hostname = g_value_dup_string (value);
+ break;
+ case PROP_DHCP_SEND_HOSTNAME:
+ priv->dhcp_send_hostname = g_value_get_boolean (value);
+ break;
+ case PROP_NEVER_DEFAULT:
+ priv->never_default = g_value_get_boolean (value);
+ break;
+ case PROP_MAY_FAIL:
+ priv->may_fail = g_value_get_boolean (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)
+{
+ NMSettingIPConfig *setting = NM_SETTING_IP_CONFIG (object);
+ NMSettingIPConfigPrivate *priv = NM_SETTING_IP_CONFIG_GET_PRIVATE (setting);
+
+ switch (prop_id) {
+ case PROP_METHOD:
+ g_value_set_string (value, nm_setting_ip_config_get_method (setting));
+ break;
+ case PROP_DNS:
+ g_value_take_boxed (value, _nm_utils_ptrarray_to_strv (priv->dns));
+ break;
+ case PROP_DNS_SEARCH:
+ g_value_take_boxed (value, _nm_utils_ptrarray_to_strv (priv->dns_search));
+ break;
+ case PROP_ADDRESSES:
+ g_value_take_boxed (value, _nm_utils_copy_array (priv->addresses,
+ (NMUtilsCopyFunc) nm_ip_address_dup,
+ (GDestroyNotify) nm_ip_address_unref));
+ break;
+ case PROP_GATEWAY:
+ g_value_set_string (value, nm_setting_ip_config_get_gateway (setting));
+ break;
+ case PROP_ROUTES:
+ g_value_take_boxed (value, _nm_utils_copy_array (priv->routes,
+ (NMUtilsCopyFunc) nm_ip_route_dup,
+ (GDestroyNotify) nm_ip_route_unref));
+ break;
+ case PROP_ROUTE_METRIC:
+ g_value_set_int64 (value, priv->route_metric);
+ break;
+ case PROP_IGNORE_AUTO_ROUTES:
+ g_value_set_boolean (value, nm_setting_ip_config_get_ignore_auto_routes (setting));
+ break;
+ case PROP_IGNORE_AUTO_DNS:
+ g_value_set_boolean (value, nm_setting_ip_config_get_ignore_auto_dns (setting));
+ break;
+ case PROP_DHCP_HOSTNAME:
+ g_value_set_string (value, nm_setting_ip_config_get_dhcp_hostname (setting));
+ break;
+ case PROP_DHCP_SEND_HOSTNAME:
+ g_value_set_boolean (value, nm_setting_ip_config_get_dhcp_send_hostname (setting));
+ break;
+ case PROP_NEVER_DEFAULT:
+ g_value_set_boolean (value, priv->never_default);
+ break;
+ case PROP_MAY_FAIL:
+ g_value_set_boolean (value, priv->may_fail);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+ip_gateway_set (NMSetting *setting,
+ GVariant *connection_dict,
+ const char *property,
+ GVariant *value)
+{
+ /* Don't set from 'gateway' if we're going to use the gateway in 'addresses' */
+ if (_nm_setting_use_legacy_property (setting, connection_dict, "addresses", "gateway"))
+ return;
+
+ g_object_set (setting, property, g_variant_get_string (value, NULL), NULL);
+}
+
+static void
+nm_setting_ip_config_class_init (NMSettingIPConfigClass *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 (NMSettingIPConfigPrivate));
+
+ /* virtual methods */
+ object_class->set_property = set_property;
+ object_class->get_property = get_property;
+ object_class->finalize = finalize;
+ parent_class->verify = verify;
+
+ /* Properties */
+
+ /**
+ * NMSettingIPConfig:method:
+ *
+ * IP configuration method.
+ *
+ * #NMSettingIP4Config and #NMSettingIP6Config both support "auto",
+ * "manual", and "link-local". See the subclass-specific documentation for
+ * other values.
+ *
+ * In general, for the "auto" method, properties such as
+ * #NMSettingIPConfig:dns and #NMSettingIPConfig:routes specify information
+ * that is added on to the information returned from automatic
+ * configuration. The #NMSettingIPConfig:ignore-auto-routes and
+ * #NMSettingIPConfig:ignore-auto-dns properties modify this behavior.
+ *
+ * For methods that imply no upstream network, such as "shared" or
+ * "link-local", these properties must be empty.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_METHOD,
+ g_param_spec_string (NM_SETTING_IP_CONFIG_METHOD, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingIPConfig:dns:
+ *
+ * Array of IP addresses of DNS servers.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_DNS,
+ g_param_spec_boxed (NM_SETTING_IP_CONFIG_DNS, "", "",
+ G_TYPE_STRV,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingIPConfig:dns-search:
+ *
+ * Array of DNS search domains.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_DNS_SEARCH,
+ g_param_spec_boxed (NM_SETTING_IP_CONFIG_DNS_SEARCH, "", "",
+ G_TYPE_STRV,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingIPConfig:addresses:
+ *
+ * Array of IP addresses.
+ *
+ * Element-Type: NMIPAddress
+ **/
+ g_object_class_install_property
+ (object_class, PROP_ADDRESSES,
+ g_param_spec_boxed (NM_SETTING_IP_CONFIG_ADDRESSES, "", "",
+ G_TYPE_PTR_ARRAY,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ /* "addresses" is a legacy D-Bus property, because the
+ * "addresses" GObject property normally gets set from
+ * the "address-data" D-Bus property...
+ */
+ NM_SETTING_PARAM_LEGACY |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingIPConfig:gateway:
+ *
+ * The gateway associated with this configuration. This is only meaningful
+ * if #NMSettingIPConfig:addresses is also set.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_GATEWAY,
+ g_param_spec_string (NM_SETTING_IP_CONFIG_GATEWAY, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ _nm_setting_class_override_property (parent_class,
+ NM_SETTING_IP_CONFIG_GATEWAY,
+ G_VARIANT_TYPE_STRING,
+ NULL,
+ ip_gateway_set,
+ NULL);
+
+ /**
+ * NMSettingIPConfig:routes:
+ *
+ * Array of IP routes.
+ *
+ * Element-Type: NMIPRoute
+ **/
+ g_object_class_install_property
+ (object_class, PROP_ROUTES,
+ g_param_spec_boxed (NM_SETTING_IP_CONFIG_ROUTES, "", "",
+ G_TYPE_PTR_ARRAY,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ /* See :addresses above Re: LEGACY */
+ NM_SETTING_PARAM_LEGACY |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingIPConfig:route-metric:
+ *
+ * The default metric for routes that don't explicitly specify a metric.
+ * The default value -1 means that the metric is choosen automatically
+ * based on the device type.
+ * The metric applies to dynamic routes, manual (static) routes that
+ * don't have an explicit metric setting, address prefix routes, and
+ * the default route.
+ * Note that for IPv6, the kernel accepts zero (0) but coerces it to
+ * 1024 (user default). Hence, setting this property to zero effectively
+ * mean setting it to 1024.
+ * For IPv4, zero is a regular value for the metric.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_ROUTE_METRIC,
+ g_param_spec_int64 (NM_SETTING_IP_CONFIG_ROUTE_METRIC, "", "",
+ -1, G_MAXUINT32, -1,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingIPConfig:ignore-auto-routes:
+ *
+ * When #NMSettingIPConfig:method is set to "auto" and this property to
+ * %TRUE, automatically configured routes are ignored and only routes
+ * specified in the #NMSettingIPConfig:routes property, if any, are used.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_IGNORE_AUTO_ROUTES,
+ g_param_spec_boolean (NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingIPConfig:ignore-auto-dns:
+ *
+ * When #NMSettingIPConfig: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
+ * #NMSettingIPConfig:dns and #NMSettingIPConfig:dns-search properties, if
+ * any, are used.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_IGNORE_AUTO_DNS,
+ g_param_spec_boolean (NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingIPConfig:dhcp-hostname:
+ *
+ * If the #NMSettingIPConfig: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
+ (object_class, PROP_DHCP_HOSTNAME,
+ g_param_spec_string (NM_SETTING_IP_CONFIG_DHCP_HOSTNAME, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingIPConfig:dhcp-send-hostname:
+ *
+ * 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
+ * #NMSettingIPConfig:dhcp-hostname property is %NULL 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,
+ g_param_spec_boolean (NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME, "", "",
+ TRUE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingIPConfig:never-default:
+ *
+ * If %TRUE, this connection will never be the default connection for this
+ * IP type, meaning it will never be assigned the default route by
+ * NetworkManager.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_NEVER_DEFAULT,
+ g_param_spec_boolean (NM_SETTING_IP_CONFIG_NEVER_DEFAULT, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingIPConfig:may-fail:
+ *
+ * If %TRUE, allow overall network configuration to proceed even if the
+ * configuration specified by this property 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 on the #NMSettingIP4Config 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,
+ g_param_spec_boolean (NM_SETTING_IP_CONFIG_MAY_FAIL, "", "",
+ TRUE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/libnm-core/nm-setting-ip-config.h b/libnm-core/nm-setting-ip-config.h
new file mode 100644
index 000000000..12763fa85
--- /dev/null
+++ b/libnm-core/nm-setting-ip-config.h
@@ -0,0 +1,221 @@
+/* -*- 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 2007 - 2014 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ */
+
+#ifndef NM_SETTING_IP_CONFIG_H
+#define NM_SETTING_IP_CONFIG_H
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+
+G_BEGIN_DECLS
+
+typedef struct NMIPAddress NMIPAddress;
+
+GType nm_ip_address_get_type (void);
+
+NMIPAddress *nm_ip_address_new (int family,
+ const char *addr,
+ guint prefix,
+ GError **error);
+NMIPAddress *nm_ip_address_new_binary (int family,
+ gconstpointer addr,
+ guint prefix,
+ GError **error);
+
+void nm_ip_address_ref (NMIPAddress *address);
+void nm_ip_address_unref (NMIPAddress *address);
+gboolean nm_ip_address_equal (NMIPAddress *address,
+ NMIPAddress *other);
+NMIPAddress *nm_ip_address_dup (NMIPAddress *address);
+
+int nm_ip_address_get_family (NMIPAddress *address);
+const char *nm_ip_address_get_address (NMIPAddress *address);
+void nm_ip_address_set_address (NMIPAddress *address,
+ const char *addr);
+void nm_ip_address_get_address_binary (NMIPAddress *address,
+ gpointer addr);
+void nm_ip_address_set_address_binary (NMIPAddress *address,
+ gconstpointer addr);
+guint nm_ip_address_get_prefix (NMIPAddress *address);
+void nm_ip_address_set_prefix (NMIPAddress *address,
+ guint prefix);
+
+char **nm_ip_address_get_attribute_names (NMIPAddress *address);
+GVariant *nm_ip_address_get_attribute (NMIPAddress *address,
+ const char *name);
+void nm_ip_address_set_attribute (NMIPAddress *address,
+ const char *name,
+ GVariant *value);
+
+
+typedef struct NMIPRoute NMIPRoute;
+
+GType nm_ip_route_get_type (void);
+
+NMIPRoute *nm_ip_route_new (int family,
+ const char *dest,
+ guint prefix,
+ const char *next_hop,
+ gint64 metric,
+ GError **error);
+NMIPRoute *nm_ip_route_new_binary (int family,
+ gconstpointer dest,
+ guint prefix,
+ gconstpointer next_hop,
+ gint64 metric,
+ GError **error);
+
+void nm_ip_route_ref (NMIPRoute *route);
+void nm_ip_route_unref (NMIPRoute *route);
+gboolean nm_ip_route_equal (NMIPRoute *route,
+ NMIPRoute *other);
+NMIPRoute *nm_ip_route_dup (NMIPRoute *route);
+
+int nm_ip_route_get_family (NMIPRoute *route);
+const char *nm_ip_route_get_dest (NMIPRoute *route);
+void nm_ip_route_set_dest (NMIPRoute *route,
+ const char *dest);
+void nm_ip_route_get_dest_binary (NMIPRoute *route,
+ gpointer dest);
+void nm_ip_route_set_dest_binary (NMIPRoute *route,
+ gconstpointer dest);
+guint nm_ip_route_get_prefix (NMIPRoute *route);
+void nm_ip_route_set_prefix (NMIPRoute *route,
+ guint prefix);
+const char *nm_ip_route_get_next_hop (NMIPRoute *route);
+void nm_ip_route_set_next_hop (NMIPRoute *route,
+ const char *next_hop);
+gboolean nm_ip_route_get_next_hop_binary (NMIPRoute *route,
+ gpointer next_hop);
+void nm_ip_route_set_next_hop_binary (NMIPRoute *route,
+ gconstpointer next_hop);
+gint64 nm_ip_route_get_metric (NMIPRoute *route);
+void nm_ip_route_set_metric (NMIPRoute *route,
+ gint64 metric);
+
+char **nm_ip_route_get_attribute_names (NMIPRoute *route);
+GVariant *nm_ip_route_get_attribute (NMIPRoute *route,
+ const char *name);
+void nm_ip_route_set_attribute (NMIPRoute *route,
+ const char *name,
+ GVariant *value);
+
+
+#define NM_TYPE_SETTING_IP_CONFIG (nm_setting_ip_config_get_type ())
+#define NM_SETTING_IP_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SETTING_IP_CONFIG, NMSettingIPConfig))
+#define NM_SETTING_IP_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SETTING_IPCONFIG, NMSettingIPConfigClass))
+#define NM_IS_SETTING_IP_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SETTING_IP_CONFIG))
+#define NM_IS_SETTING_IP_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_SETTING_IP_CONFIG))
+#define NM_SETTING_IP_CONFIG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SETTING_IP_CONFIG, NMSettingIPConfigClass))
+
+#define NM_SETTING_IP_CONFIG_METHOD "method"
+#define NM_SETTING_IP_CONFIG_DNS "dns"
+#define NM_SETTING_IP_CONFIG_DNS_SEARCH "dns-search"
+#define NM_SETTING_IP_CONFIG_ADDRESSES "addresses"
+#define NM_SETTING_IP_CONFIG_GATEWAY "gateway"
+#define NM_SETTING_IP_CONFIG_ROUTES "routes"
+#define NM_SETTING_IP_CONFIG_ROUTE_METRIC "route-metric"
+#define NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES "ignore-auto-routes"
+#define NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS "ignore-auto-dns"
+#define NM_SETTING_IP_CONFIG_DHCP_HOSTNAME "dhcp-hostname"
+#define NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME "dhcp-send-hostname"
+#define NM_SETTING_IP_CONFIG_NEVER_DEFAULT "never-default"
+#define NM_SETTING_IP_CONFIG_MAY_FAIL "may-fail"
+
+struct _NMSettingIPConfig {
+ NMSetting parent;
+};
+
+typedef struct {
+ NMSettingClass parent;
+
+ /* Padding for future expansion */
+ gpointer padding[8];
+} NMSettingIPConfigClass;
+
+GType nm_setting_ip_config_get_type (void);
+
+const char *nm_setting_ip_config_get_method (NMSettingIPConfig *setting);
+
+guint nm_setting_ip_config_get_num_dns (NMSettingIPConfig *setting);
+const char *nm_setting_ip_config_get_dns (NMSettingIPConfig *setting,
+ int i);
+gboolean nm_setting_ip_config_add_dns (NMSettingIPConfig *setting,
+ const char *dns);
+void nm_setting_ip_config_remove_dns (NMSettingIPConfig *setting,
+ int i);
+gboolean nm_setting_ip_config_remove_dns_by_value (NMSettingIPConfig *setting,
+ const char *dns);
+void nm_setting_ip_config_clear_dns (NMSettingIPConfig *setting);
+
+guint nm_setting_ip_config_get_num_dns_searches (NMSettingIPConfig *setting);
+const char *nm_setting_ip_config_get_dns_search (NMSettingIPConfig *setting,
+ int i);
+gboolean nm_setting_ip_config_add_dns_search (NMSettingIPConfig *setting,
+ const char *dns_search);
+void nm_setting_ip_config_remove_dns_search (NMSettingIPConfig *setting,
+ int i);
+gboolean nm_setting_ip_config_remove_dns_search_by_value (NMSettingIPConfig *setting,
+ const char *dns_search);
+void nm_setting_ip_config_clear_dns_searches (NMSettingIPConfig *setting);
+
+guint nm_setting_ip_config_get_num_addresses (NMSettingIPConfig *setting);
+NMIPAddress *nm_setting_ip_config_get_address (NMSettingIPConfig *setting,
+ int i);
+gboolean nm_setting_ip_config_add_address (NMSettingIPConfig *setting,
+ NMIPAddress *address);
+void nm_setting_ip_config_remove_address (NMSettingIPConfig *setting,
+ int i);
+gboolean nm_setting_ip_config_remove_address_by_value (NMSettingIPConfig *setting,
+ NMIPAddress *address);
+void nm_setting_ip_config_clear_addresses (NMSettingIPConfig *setting);
+
+const char *nm_setting_ip_config_get_gateway (NMSettingIPConfig *setting);
+
+guint nm_setting_ip_config_get_num_routes (NMSettingIPConfig *setting);
+NMIPRoute *nm_setting_ip_config_get_route (NMSettingIPConfig *setting,
+ int i);
+gboolean nm_setting_ip_config_add_route (NMSettingIPConfig *setting,
+ NMIPRoute *route);
+void nm_setting_ip_config_remove_route (NMSettingIPConfig *setting,
+ int i);
+gboolean nm_setting_ip_config_remove_route_by_value (NMSettingIPConfig *setting,
+ NMIPRoute *route);
+void nm_setting_ip_config_clear_routes (NMSettingIPConfig *setting);
+
+gint64 nm_setting_ip_config_get_route_metric (NMSettingIPConfig *setting);
+
+gboolean nm_setting_ip_config_get_ignore_auto_routes (NMSettingIPConfig *setting);
+gboolean nm_setting_ip_config_get_ignore_auto_dns (NMSettingIPConfig *setting);
+
+const char *nm_setting_ip_config_get_dhcp_hostname (NMSettingIPConfig *setting);
+gboolean nm_setting_ip_config_get_dhcp_send_hostname (NMSettingIPConfig *setting);
+
+gboolean nm_setting_ip_config_get_never_default (NMSettingIPConfig *setting);
+gboolean nm_setting_ip_config_get_may_fail (NMSettingIPConfig *setting);
+
+G_END_DECLS
+
+#endif /* NM_SETTING_IP_CONFIG_H */
diff --git a/libnm-core/nm-setting-ip4-config.c b/libnm-core/nm-setting-ip4-config.c
new file mode 100644
index 000000000..686192678
--- /dev/null
+++ b/libnm-core/nm-setting-ip4-config.c
@@ -0,0 +1,695 @@
+/* -*- 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 2014 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <glib/gi18n-lib.h>
+
+#include "nm-setting-ip4-config.h"
+#include "nm-setting-private.h"
+
+/**
+ * SECTION:nm-setting-ip4-config
+ * @short_description: Describes IPv4 addressing, routing, and name service properties
+ *
+ * The #NMSettingIP4Config object is a #NMSetting subclass that describes
+ * properties related to IPv4 addressing, routing, and Domain Name Service.
+ *
+ * #NMSettingIP4Config has few properties or methods of its own; it inherits
+ * almost everything from #NMSettingIPConfig.
+ *
+ * NetworkManager supports 5 values for the #NMSettingIPConfig:method property
+ * for IPv4. 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.
+ **/
+
+G_DEFINE_TYPE_WITH_CODE (NMSettingIP4Config, nm_setting_ip4_config, NM_TYPE_SETTING_IP_CONFIG,
+ _nm_register_setting (IP4_CONFIG, 4))
+NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_IP4_CONFIG)
+
+#define NM_SETTING_IP4_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_IP4_CONFIG, NMSettingIP4ConfigPrivate))
+
+typedef struct {
+ char *dhcp_client_id;
+} NMSettingIP4ConfigPrivate;
+
+enum {
+ PROP_0,
+ PROP_DHCP_CLIENT_ID,
+
+ LAST_PROP
+};
+
+/**
+ * nm_setting_ip4_config_new:
+ *
+ * Creates a new #NMSettingIP4Config object with default values.
+ *
+ * Returns: (transfer full): the new empty #NMSettingIP4Config object
+ **/
+NMSetting *
+nm_setting_ip4_config_new (void)
+{
+ return (NMSetting *) g_object_new (NM_TYPE_SETTING_IP4_CONFIG, NULL);
+}
+
+/**
+ * nm_setting_ip4_config_get_dhcp_client_id:
+ * @setting: the #NMSettingIP4Config
+ *
+ * Returns the value contained in the #NMSettingIP4Config:dhcp-client-id
+ * property.
+ *
+ * Returns: the configured Client ID to send to the DHCP server when requesting
+ * addresses via DHCP.
+ **/
+const char *
+nm_setting_ip4_config_get_dhcp_client_id (NMSettingIP4Config *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_IP4_CONFIG (setting), NULL);
+
+ return NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting)->dhcp_client_id;
+}
+
+static gboolean
+verify (NMSetting *setting, NMConnection *connection, GError **error)
+{
+ NMSettingIP4ConfigPrivate *priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting);
+ NMSettingIPConfig *s_ip = NM_SETTING_IP_CONFIG (setting);
+ NMSettingVerifyResult ret;
+ const char *method;
+
+ ret = NM_SETTING_CLASS (nm_setting_ip4_config_parent_class)->verify (setting, connection, error);
+ if (ret != NM_SETTING_VERIFY_SUCCESS)
+ return ret;
+
+ method = nm_setting_ip_config_get_method (s_ip);
+ /* Base class already checked that it exists */
+ g_assert (method);
+
+ if (!strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_MANUAL)) {
+ if (nm_setting_ip_config_get_num_addresses (s_ip) == 0) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_MISSING_PROPERTY,
+ _("this property cannot be empty for '%s=%s'"),
+ NM_SETTING_IP_CONFIG_METHOD, method);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP_CONFIG_ADDRESSES);
+ return FALSE;
+ }
+ } else if ( !strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL)
+ || !strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_SHARED)
+ || !strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED)) {
+ if (nm_setting_ip_config_get_num_dns (s_ip) > 0) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("this property is not allowed for '%s=%s'"),
+ NM_SETTING_IP_CONFIG_METHOD, method);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP_CONFIG_DNS);
+ return FALSE;
+ }
+
+ if (nm_setting_ip_config_get_num_dns_searches (s_ip) > 0) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("this property is not allowed for '%s=%s'"),
+ NM_SETTING_IP_CONFIG_METHOD, method);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP_CONFIG_DNS_SEARCH);
+ return FALSE;
+ }
+
+ /* Shared allows IP addresses; link-local and disabled do not */
+ if (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_SHARED) != 0) {
+ if (nm_setting_ip_config_get_num_addresses (s_ip) > 0) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("this property is not allowed for '%s=%s'"),
+ NM_SETTING_IP_CONFIG_METHOD, method);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP_CONFIG_ADDRESSES);
+ return FALSE;
+ }
+ }
+ } else if (!strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_AUTO)) {
+ /* nothing to do */
+ } else {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("property is invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP_CONFIG_METHOD);
+ return FALSE;
+ }
+
+ if (priv->dhcp_client_id && !strlen (priv->dhcp_client_id)) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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;
+ }
+
+ return TRUE;
+}
+
+static void
+nm_setting_ip4_config_init (NMSettingIP4Config *setting)
+{
+}
+
+static void
+finalize (GObject *object)
+{
+ NMSettingIP4ConfigPrivate *priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (object);
+
+ g_free (priv->dhcp_client_id);
+
+ G_OBJECT_CLASS (nm_setting_ip4_config_parent_class)->finalize (object);
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ NMSettingIP4ConfigPrivate *priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_DHCP_CLIENT_ID:
+ g_free (priv->dhcp_client_id);
+ priv->dhcp_client_id = 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)
+{
+ NMSettingIP4Config *s_ip4 = NM_SETTING_IP4_CONFIG (object);
+
+ switch (prop_id) {
+ case PROP_DHCP_CLIENT_ID:
+ g_value_set_string (value, nm_setting_ip4_config_get_dhcp_client_id (s_ip4));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static GVariant *
+ip4_dns_to_dbus (const GValue *prop_value)
+{
+ return nm_utils_ip4_dns_to_variant (g_value_get_boxed (prop_value));
+}
+
+static void
+ip4_dns_from_dbus (GVariant *dbus_value,
+ GValue *prop_value)
+{
+ g_value_take_boxed (prop_value, nm_utils_ip4_dns_from_variant (dbus_value));
+}
+
+static GVariant *
+ip4_addresses_get (NMSetting *setting,
+ const char *property)
+{
+ GPtrArray *addrs;
+ const char *gateway;
+ GVariant *ret;
+
+ g_object_get (setting, property, &addrs, NULL);
+ gateway = nm_setting_ip_config_get_gateway (NM_SETTING_IP_CONFIG (setting));
+ ret = nm_utils_ip4_addresses_to_variant (addrs, gateway);
+ g_ptr_array_unref (addrs);
+
+ return ret;
+}
+
+static void
+ip4_addresses_set (NMSetting *setting,
+ GVariant *connection_dict,
+ const char *property,
+ GVariant *value)
+{
+ GPtrArray *addrs;
+ GVariant *s_ip4;
+ char **labels, *gateway = NULL;
+ int i;
+
+ if (!_nm_setting_use_legacy_property (setting, connection_dict, "addresses", "address-data"))
+ return;
+
+ addrs = nm_utils_ip4_addresses_from_variant (value, &gateway);
+
+ s_ip4 = g_variant_lookup_value (connection_dict, NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_VARIANT_TYPE_SETTING);
+ if (g_variant_lookup (s_ip4, "address-labels", "^as", &labels)) {
+ for (i = 0; i < addrs->len && labels[i]; i++)
+ if (*labels[i])
+ nm_ip_address_set_attribute (addrs->pdata[i], "label", g_variant_new_string (labels[i]));
+ g_strfreev (labels);
+ }
+ g_variant_unref (s_ip4);
+
+ g_object_set (setting,
+ NM_SETTING_IP_CONFIG_ADDRESSES, addrs,
+ NM_SETTING_IP_CONFIG_GATEWAY, gateway,
+ NULL);
+ g_ptr_array_unref (addrs);
+ g_free (gateway);
+}
+
+static GVariant *
+ip4_address_labels_get (NMSetting *setting,
+ NMConnection *connection,
+ const char *property)
+{
+ NMSettingIPConfig *s_ip = NM_SETTING_IP_CONFIG (setting);
+ gboolean have_labels = FALSE;
+ GPtrArray *labels;
+ GVariant *ret;
+ int num_addrs, i;
+
+ num_addrs = nm_setting_ip_config_get_num_addresses (s_ip);
+ for (i = 0; i < num_addrs; i++) {
+ NMIPAddress *addr = nm_setting_ip_config_get_address (s_ip, i);
+ GVariant *label = nm_ip_address_get_attribute (addr, "label");
+
+ if (label) {
+ have_labels = TRUE;
+ break;
+ }
+ }
+ if (!have_labels)
+ return NULL;
+
+ labels = g_ptr_array_sized_new (num_addrs);
+ for (i = 0; i < num_addrs; i++) {
+ NMIPAddress *addr = nm_setting_ip_config_get_address (s_ip, i);
+ GVariant *label = nm_ip_address_get_attribute (addr, "label");
+
+ g_ptr_array_add (labels, (char *) (label ? g_variant_get_string (label, NULL) : ""));
+ }
+
+ ret = g_variant_new_strv ((const char * const *) labels->pdata, labels->len);
+ g_ptr_array_unref (labels);
+
+ return ret;
+}
+
+static GVariant *
+ip4_address_data_get (NMSetting *setting,
+ NMConnection *connection,
+ const char *property)
+{
+ GPtrArray *addrs;
+ GVariant *ret;
+
+ g_object_get (setting, NM_SETTING_IP_CONFIG_ADDRESSES, &addrs, NULL);
+ ret = nm_utils_ip_addresses_to_variant (addrs);
+ g_ptr_array_unref (addrs);
+
+ return ret;
+}
+
+static void
+ip4_address_data_set (NMSetting *setting,
+ GVariant *connection_dict,
+ const char *property,
+ GVariant *value)
+{
+ GPtrArray *addrs;
+
+ /* Ignore 'address-data' if we're going to process 'addresses' */
+ if (_nm_setting_use_legacy_property (setting, connection_dict, "addresses", "address-data"))
+ return;
+
+ addrs = nm_utils_ip_addresses_from_variant (value, AF_INET);
+ g_object_set (setting, NM_SETTING_IP_CONFIG_ADDRESSES, addrs, NULL);
+ g_ptr_array_unref (addrs);
+}
+
+static GVariant *
+ip4_routes_get (NMSetting *setting,
+ const char *property)
+{
+ GPtrArray *routes;
+ GVariant *ret;
+
+ g_object_get (setting, property, &routes, NULL);
+ ret = nm_utils_ip4_routes_to_variant (routes);
+ g_ptr_array_unref (routes);
+
+ return ret;
+}
+
+static void
+ip4_routes_set (NMSetting *setting,
+ GVariant *connection_dict,
+ const char *property,
+ GVariant *value)
+{
+ GPtrArray *routes;
+
+ if (!_nm_setting_use_legacy_property (setting, connection_dict, "routes", "route-data"))
+ return;
+
+ routes = nm_utils_ip4_routes_from_variant (value);
+ g_object_set (setting, property, routes, NULL);
+ g_ptr_array_unref (routes);
+}
+
+static GVariant *
+ip4_route_data_get (NMSetting *setting,
+ NMConnection *connection,
+ const char *property)
+{
+ GPtrArray *routes;
+ GVariant *ret;
+
+ g_object_get (setting, NM_SETTING_IP_CONFIG_ROUTES, &routes, NULL);
+ ret = nm_utils_ip_routes_to_variant (routes);
+ g_ptr_array_unref (routes);
+
+ return ret;
+}
+
+static void
+ip4_route_data_set (NMSetting *setting,
+ GVariant *connection_dict,
+ const char *property,
+ GVariant *value)
+{
+ GPtrArray *routes;
+
+ /* Ignore 'route-data' if we're going to process 'routes' */
+ if (_nm_setting_use_legacy_property (setting, connection_dict, "routes", "route-data"))
+ return;
+
+ routes = nm_utils_ip_routes_from_variant (value, AF_INET);
+ g_object_set (setting, NM_SETTING_IP_CONFIG_ROUTES, routes, NULL);
+ g_ptr_array_unref (routes);
+}
+
+
+static void
+nm_setting_ip4_config_class_init (NMSettingIP4ConfigClass *ip4_class)
+{
+ NMSettingClass *setting_class = NM_SETTING_CLASS (ip4_class);
+ GObjectClass *object_class = G_OBJECT_CLASS (ip4_class);
+
+ g_type_class_add_private (setting_class, sizeof (NMSettingIP4ConfigPrivate));
+
+ /* virtual methods */
+ object_class->set_property = set_property;
+ object_class->get_property = get_property;
+ object_class->finalize = finalize;
+ setting_class->verify = verify;
+
+ /* properties */
+
+ /* ---ifcfg-rh---
+ * property: method
+ * variable: BOOTPROTO
+ * format: string
+ * values: none, dhcp (bootp), static, ibft, autoip, shared
+ * default: none
+ * description: Method used for IPv4 protocol configuration.
+ * ---end---
+ */
+
+ /* ---keyfile---
+ * property: dns
+ * format: list of DNS IP addresses
+ * description: List of DNS servers.
+ * example: dns=1.2.3.4;8.8.8.8;8.8.4.4;
+ * ---end---
+ * ---ifcfg-rh---
+ * property: dns
+ * variable: DNS1, DNS2, ...
+ * format: string
+ * description: List of DNS servers. Even if NetworkManager supports many DNS
+ * servers, initscripts and resolver only care about the first three, usually.
+ * example: DNS1=1.2.3.4 DNS2=10.0.0.254 DNS3=8.8.8.8
+ * ---end---
+ */
+
+ /* ---ifcfg-rh---
+ * property: dns-search
+ * variable: DOMAIN
+ * format: string (space-separated domains)
+ * description: List of DNS search domains.
+ * ---end---
+ */
+
+ /* ---keyfile---
+ * property: addresses
+ * variable: address1, address2, ...
+ * format: address/plen
+ * description: List of static IP addresses.
+ * example: address1=192.168.100.100/24 address2=10.1.1.5/24
+ * ---end---
+ * ---ifcfg-rh---
+ * property: addresses
+ * variable: IPADDR, PREFIX, IPADDR1, PREFIX1, ...
+ * description: List of static IP addresses.
+ * example: IPADDR=10.5.5.23 PREFIX=24 IPADDR1=1.1.1.2 PREFIX1=16
+ * ---end---
+ */
+
+ /* ---keyfile---
+ * property: gateway
+ * variable: gateway
+ * format: string
+ * description: Gateway IP addresses as a string.
+ * example: gateway=192.168.100.1
+ * ---end---
+ * ---ifcfg-rh---
+ * property: gateway
+ * variable: GATEWAY
+ * description: Gateway IP address.
+ * example: GATEWAY=10.5.5.1
+ * ---end---
+ */
+
+ /* ---keyfile---
+ * property: routes
+ * variable: route1, route2, ...
+ * format: route/plen[,gateway,metric]
+ * description: List of IP routes.
+ * example: route1=8.8.8.0/24,10.1.1.1,77
+ * route2=7.7.0.0/16
+ * ---end---
+ * ---ifcfg-rh---
+ * property: routes
+ * variable: ADDRESS1, NETMASK1, GATEWAY1, METRIC1, ...
+ * description: List of static routes. They are not stored in ifcfg-* file,
+ * but in route-* file instead.
+ * ---end---
+ */
+
+ /* ---ifcfg-rh---
+ * property: ignore-auto-routes
+ * variable: PEERROUTES(+)
+ * default: yes
+ * description: PEERROUTES has the opposite meaning as 'ignore-auto-routes' property.
+ * ---end---
+ */
+
+ /* ---ifcfg-rh---
+ * property: ignore-auto-dns
+ * variable: PEERDNS
+ * default: yes
+ * description: PEERDNS has the opposite meaning as 'ignore-auto-dns' property.
+ * ---end---
+ */
+
+ /* ---ifcfg-rh---
+ * property: dhcp-send-hostname
+ * variable: DHCP_SEND_HOSTNAME(+)
+ * default: yes
+ * description: Whether DHCP_HOSTNAME should be sent to the DHCP server.
+ * ---end---
+ */
+
+ /* ---ifcfg-rh---
+ * property: dhcp-hostname
+ * variable: DHCP_HOSTNAME
+ * description: Hostname to send to the DHCP server.
+ * ---end---
+ */
+
+ /* ---ifcfg-rh---
+ * property: never-default
+ * variable: DEFROUTE (GATEWAYDEV in /etc/sysconfig/network)
+ * default: yes
+ * description: DEFROUTE=no tells NetworkManager that this connection
+ * should not be assigned the default route. DEFROUTE has the opposite
+ * meaning as 'never-default' property.
+ * ---end---
+ */
+
+ /* ---ifcfg-rh---
+ * property: may-fail
+ * variable: IPV4_FAILURE_FATAL(+)
+ * default: no
+ * description: IPV4_FAILURE_FATAL has the opposite meaning as 'may-fail' property.
+ * ---end---
+ */
+
+ /**
+ * NMSettingIP4Config:dhcp-client-id:
+ *
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: dhcp-client-id
+ * variable: DHCP_CLIENT_ID(+)
+ * description: A string sent to the DHCP server to identify the local machine.
+ * example: DHCP_CLIENT_ID=ax-srv-1
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_DHCP_CLIENT_ID,
+ g_param_spec_string (NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /* IP4-specific property overrides */
+
+ /* ---dbus---
+ * property: dns
+ * format: array of uint32
+ * description: Array of IP addresses of DNS servers (as network-byte-order
+ * integers)
+ * ---end---
+ */
+ _nm_setting_class_transform_property (setting_class,
+ NM_SETTING_IP_CONFIG_DNS,
+ G_VARIANT_TYPE ("au"),
+ ip4_dns_to_dbus,
+ ip4_dns_from_dbus);
+
+ /* ---dbus---
+ * property: addresses
+ * format: array of array of uint32
+ * description: Deprecated in favor of the 'address-data' and 'gateway'
+ * properties, but this can be used for backward-compatibility with older
+ * daemons. Note that if you send this property the daemon will ignore
+ * 'address-data' and 'gateway'.
+ *
+ * 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.
+ * ---end---
+ */
+ _nm_setting_class_override_property (setting_class,
+ NM_SETTING_IP_CONFIG_ADDRESSES,
+ G_VARIANT_TYPE ("aau"),
+ ip4_addresses_get,
+ ip4_addresses_set,
+ NULL);
+
+ _nm_setting_class_add_dbus_only_property (setting_class,
+ "address-labels",
+ G_VARIANT_TYPE_STRING_ARRAY,
+ ip4_address_labels_get,
+ NULL);
+
+ /* ---dbus---
+ * property: address-data
+ * format: array of vardict
+ * description: Array of IPv4 addresses. Each address dictionary contains at
+ * least 'address' and 'prefix' entries, containing the IP address as a
+ * string, and the prefix length as a uint32. Additional attributes may
+ * also exist on some addresses.
+ * ---end---
+ */
+ _nm_setting_class_add_dbus_only_property (setting_class,
+ "address-data",
+ G_VARIANT_TYPE ("aa{sv}"),
+ ip4_address_data_get,
+ ip4_address_data_set);
+
+ /* ---dbus---
+ * property: routes
+ * format: array of array of uint32
+ * description: Deprecated in favor of the 'route-data' property, but this
+ * can be used for backward-compatibility with older daemons. Note that if
+ * you send this property the daemon will ignore 'route-data'.
+ *
+ * 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. If the metric is
+ * 0, NM will choose an appropriate default metric for the device. (There
+ * is no way to explicitly specify an actual metric of 0 with this
+ * property.)
+ * ---end---
+ */
+ _nm_setting_class_override_property (setting_class,
+ NM_SETTING_IP_CONFIG_ROUTES,
+ G_VARIANT_TYPE ("aau"),
+ ip4_routes_get,
+ ip4_routes_set,
+ NULL);
+
+ /* ---dbus---
+ * property: route-data
+ * format: array of vardict
+ * description: Array of IPv4 routes. Each route dictionary contains at
+ * least 'dest' and 'prefix' entries, containing the destination IP
+ * address as a string, and the prefix length as a uint32. Most routes
+ * will also have a 'gateway' entry, containing the gateway IP address as
+ * a string. If the route has a 'metric' entry (containing a uint32), that
+ * will be used as the metric for the route (otherwise NM will pick a
+ * default value appropriate to the device). Additional attributes may
+ * also exist on some routes.
+ * ---end---
+ */
+ _nm_setting_class_add_dbus_only_property (setting_class,
+ "route-data",
+ G_VARIANT_TYPE ("aa{sv}"),
+ ip4_route_data_get,
+ ip4_route_data_set);
+
+}
diff --git a/libnm-core/nm-setting-ip4-config.h b/libnm-core/nm-setting-ip4-config.h
new file mode 100644
index 000000000..e944dfe39
--- /dev/null
+++ b/libnm-core/nm-setting-ip4-config.h
@@ -0,0 +1,108 @@
+/* -*- 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 2007 - 2014 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ */
+
+#ifndef __NM_SETTING_IP4_CONFIG_H__
+#define __NM_SETTING_IP4_CONFIG_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting-ip-config.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_IP4_CONFIG (nm_setting_ip4_config_get_type ())
+#define NM_SETTING_IP4_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SETTING_IP4_CONFIG, NMSettingIP4Config))
+#define NM_SETTING_IP4_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SETTING_IP4CONFIG, NMSettingIP4ConfigClass))
+#define NM_IS_SETTING_IP4_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SETTING_IP4_CONFIG))
+#define NM_IS_SETTING_IP4_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_SETTING_IP4_CONFIG))
+#define NM_SETTING_IP4_CONFIG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SETTING_IP4_CONFIG, NMSettingIP4ConfigClass))
+
+#define NM_SETTING_IP4_CONFIG_SETTING_NAME "ipv4"
+
+#define NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID "dhcp-client-id"
+
+/**
+ * NM_SETTING_IP4_CONFIG_METHOD_AUTO:
+ *
+ * IPv4 configuration should be automatically determined via a method appropriate
+ * for the hardware interface, ie DHCP or PPP or some other device-specific
+ * manner.
+ */
+#define NM_SETTING_IP4_CONFIG_METHOD_AUTO "auto"
+
+/**
+ * NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL:
+ *
+ * IPv4 configuration should be automatically configured for link-local-only
+ * operation.
+ */
+#define NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL "link-local"
+
+/**
+ * NM_SETTING_IP4_CONFIG_METHOD_MANUAL:
+ *
+ * All necessary IPv4 configuration (addresses, prefix, DNS, etc) is specified
+ * in the setting's properties.
+ */
+#define NM_SETTING_IP4_CONFIG_METHOD_MANUAL "manual"
+
+/**
+ * NM_SETTING_IP4_CONFIG_METHOD_SHARED:
+ *
+ * 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.
+ */
+#define NM_SETTING_IP4_CONFIG_METHOD_SHARED "shared"
+
+/**
+ * NM_SETTING_IP4_CONFIG_METHOD_DISABLED:
+ *
+ * This connection does not use or require IPv4 address and it should be disabled.
+ */
+#define NM_SETTING_IP4_CONFIG_METHOD_DISABLED "disabled"
+
+struct _NMSettingIP4Config {
+ NMSettingIPConfig parent;
+};
+
+typedef struct {
+ NMSettingIPConfigClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMSettingIP4ConfigClass;
+
+GType nm_setting_ip4_config_get_type (void);
+
+NMSetting *nm_setting_ip4_config_new (void);
+
+const char *nm_setting_ip4_config_get_dhcp_client_id (NMSettingIP4Config *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_IP4_CONFIG_H__ */
diff --git a/libnm-core/nm-setting-ip6-config.c b/libnm-core/nm-setting-ip6-config.c
new file mode 100644
index 000000000..f5d903340
--- /dev/null
+++ b/libnm-core/nm-setting-ip6-config.c
@@ -0,0 +1,610 @@
+/* -*- 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 2007 - 2014 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <glib/gi18n-lib.h>
+
+#include "nm-setting-ip6-config.h"
+#include "nm-setting-private.h"
+#include "nm-core-enum-types.h"
+
+/**
+ * SECTION:nm-setting-ip6-config
+ * @short_description: Describes IPv6 addressing, routing, and name service properties
+ *
+ * The #NMSettingIP6Config object is a #NMSetting subclass that describes
+ * properties related to IPv6 addressing, routing, and Domain Name Service
+ *
+ * #NMSettingIP6Config has few properties or methods of its own; it inherits
+ * almost everything from #NMSettingIPConfig.
+ *
+ * NetworkManager supports 6 values for the #NMSettingIPConfig:method property
+ * for IPv6. 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. Note: the "shared" method is not yet
+ * supported.
+ **/
+
+G_DEFINE_TYPE_WITH_CODE (NMSettingIP6Config, nm_setting_ip6_config, NM_TYPE_SETTING_IP_CONFIG,
+ _nm_register_setting (IP6_CONFIG, 4))
+NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_IP6_CONFIG)
+
+#define NM_SETTING_IP6_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_IP6_CONFIG, NMSettingIP6ConfigPrivate))
+
+typedef struct {
+ NMSettingIP6ConfigPrivacy ip6_privacy;
+} NMSettingIP6ConfigPrivate;
+
+
+enum {
+ PROP_0,
+ PROP_IP6_PRIVACY,
+
+ LAST_PROP
+};
+
+/**
+ * nm_setting_ip6_config_new:
+ *
+ * Creates a new #NMSettingIP6Config object with default values.
+ *
+ * Returns: (transfer full): the new empty #NMSettingIP6Config object
+ **/
+NMSetting *
+nm_setting_ip6_config_new (void)
+{
+ return (NMSetting *) g_object_new (NM_TYPE_SETTING_IP6_CONFIG, NULL);
+}
+
+/**
+ * nm_setting_ip6_config_get_ip6_privacy:
+ * @setting: the #NMSettingIP6Config
+ *
+ * Returns the value contained in the #NMSettingIP6Config:ip6-privacy
+ * property.
+ *
+ * Returns: IPv6 Privacy Extensions configuration value (#NMSettingIP6ConfigPrivacy).
+ **/
+NMSettingIP6ConfigPrivacy
+nm_setting_ip6_config_get_ip6_privacy (NMSettingIP6Config *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_IP6_CONFIG (setting), NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN);
+
+ return NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting)->ip6_privacy;
+}
+
+static gboolean
+verify (NMSetting *setting, NMConnection *connection, GError **error)
+{
+ NMSettingIPConfig *s_ip = NM_SETTING_IP_CONFIG (setting);
+ NMSettingVerifyResult ret;
+ const char *method;
+
+ ret = NM_SETTING_CLASS (nm_setting_ip6_config_parent_class)->verify (setting, connection, error);
+ if (ret != NM_SETTING_VERIFY_SUCCESS)
+ return ret;
+
+ method = nm_setting_ip_config_get_method (s_ip);
+ /* Base class already checked that it exists */
+ g_assert (method);
+
+ if (!strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_MANUAL)) {
+ if (nm_setting_ip_config_get_num_addresses (s_ip) == 0) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_MISSING_PROPERTY,
+ _("this property cannot be empty for '%s=%s'"),
+ NM_SETTING_IP_CONFIG_METHOD, method);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_IP6_CONFIG_SETTING_NAME, NM_SETTING_IP_CONFIG_ADDRESSES);
+ return FALSE;
+ }
+ } else if ( !strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_IGNORE)
+ || !strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL)
+ || !strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_SHARED)) {
+ if (nm_setting_ip_config_get_num_dns (s_ip) > 0) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%s' not allowed for %s=%s"),
+ _("this property is not allowed for '%s=%s'"),
+ NM_SETTING_IP_CONFIG_METHOD, method);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_IP6_CONFIG_SETTING_NAME, NM_SETTING_IP_CONFIG_DNS);
+ return FALSE;
+ }
+
+ if (nm_setting_ip_config_get_num_dns_searches (s_ip) > 0) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("this property is not allowed for '%s=%s'"),
+ NM_SETTING_IP_CONFIG_METHOD, method);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_IP6_CONFIG_SETTING_NAME, NM_SETTING_IP_CONFIG_DNS_SEARCH);
+ return FALSE;
+ }
+
+ if (nm_setting_ip_config_get_num_addresses (s_ip) > 0) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("this property is not allowed for '%s=%s'"),
+ NM_SETTING_IP_CONFIG_METHOD, method);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_IP6_CONFIG_SETTING_NAME, NM_SETTING_IP_CONFIG_ADDRESSES);
+ return FALSE;
+ }
+ } else if ( !strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_AUTO)
+ || !strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_DHCP)) {
+ /* nothing to do */
+ } else {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("property is invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_IP6_CONFIG_SETTING_NAME, NM_SETTING_IP_CONFIG_METHOD);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+
+static void
+nm_setting_ip6_config_init (NMSettingIP6Config *setting)
+{
+}
+
+static GVariant *
+ip6_dns_to_dbus (const GValue *prop_value)
+{
+ return nm_utils_ip6_dns_to_variant (g_value_get_boxed (prop_value));
+}
+
+static void
+ip6_dns_from_dbus (GVariant *dbus_value,
+ GValue *prop_value)
+{
+ g_value_take_boxed (prop_value, nm_utils_ip6_dns_from_variant (dbus_value));
+}
+
+static GVariant *
+ip6_addresses_get (NMSetting *setting,
+ const char *property)
+{
+ GPtrArray *addrs;
+ const char *gateway;
+ GVariant *ret;
+
+ g_object_get (setting, property, &addrs, NULL);
+ gateway = nm_setting_ip_config_get_gateway (NM_SETTING_IP_CONFIG (setting));
+ ret = nm_utils_ip6_addresses_to_variant (addrs, gateway);
+ g_ptr_array_unref (addrs);
+
+ return ret;
+}
+
+static void
+ip6_addresses_set (NMSetting *setting,
+ GVariant *connection_dict,
+ const char *property,
+ GVariant *value)
+{
+ GPtrArray *addrs;
+ char *gateway = NULL;
+
+ if (!_nm_setting_use_legacy_property (setting, connection_dict, "addresses", "address-data"))
+ return;
+
+ addrs = nm_utils_ip6_addresses_from_variant (value, &gateway);
+
+ g_object_set (setting,
+ NM_SETTING_IP_CONFIG_ADDRESSES, addrs,
+ NM_SETTING_IP_CONFIG_GATEWAY, gateway,
+ NULL);
+ g_ptr_array_unref (addrs);
+ g_free (gateway);
+}
+
+static GVariant *
+ip6_address_data_get (NMSetting *setting,
+ NMConnection *connection,
+ const char *property)
+{
+ GPtrArray *addrs;
+ GVariant *ret;
+
+ g_object_get (setting, NM_SETTING_IP_CONFIG_ADDRESSES, &addrs, NULL);
+ ret = nm_utils_ip_addresses_to_variant (addrs);
+ g_ptr_array_unref (addrs);
+
+ return ret;
+}
+
+static void
+ip6_address_data_set (NMSetting *setting,
+ GVariant *connection_dict,
+ const char *property,
+ GVariant *value)
+{
+ GPtrArray *addrs;
+
+ /* Ignore 'address-data' if we're going to process 'addresses' */
+ if (_nm_setting_use_legacy_property (setting, connection_dict, "addresses", "address-data"))
+ return;
+
+ addrs = nm_utils_ip_addresses_from_variant (value, AF_INET6);
+ g_object_set (setting, NM_SETTING_IP_CONFIG_ADDRESSES, addrs, NULL);
+ g_ptr_array_unref (addrs);
+}
+
+static GVariant *
+ip6_routes_get (NMSetting *setting,
+ const char *property)
+{
+ GPtrArray *routes;
+ GVariant *ret;
+
+ g_object_get (setting, property, &routes, NULL);
+ ret = nm_utils_ip6_routes_to_variant (routes);
+ g_ptr_array_unref (routes);
+
+ return ret;
+}
+
+static void
+ip6_routes_set (NMSetting *setting,
+ GVariant *connection_dict,
+ const char *property,
+ GVariant *value)
+{
+ GPtrArray *routes;
+
+ if (!_nm_setting_use_legacy_property (setting, connection_dict, "routes", "route-data"))
+ return;
+
+ routes = nm_utils_ip6_routes_from_variant (value);
+ g_object_set (setting, property, routes, NULL);
+ g_ptr_array_unref (routes);
+}
+
+static GVariant *
+ip6_route_data_get (NMSetting *setting,
+ NMConnection *connection,
+ const char *property)
+{
+ GPtrArray *routes;
+ GVariant *ret;
+
+ g_object_get (setting, NM_SETTING_IP_CONFIG_ROUTES, &routes, NULL);
+ ret = nm_utils_ip_routes_to_variant (routes);
+ g_ptr_array_unref (routes);
+
+ return ret;
+}
+
+static void
+ip6_route_data_set (NMSetting *setting,
+ GVariant *connection_dict,
+ const char *property,
+ GVariant *value)
+{
+ GPtrArray *routes;
+
+ /* Ignore 'route-data' if we're going to process 'routes' */
+ if (_nm_setting_use_legacy_property (setting, connection_dict, "routes", "route-data"))
+ return;
+
+ routes = nm_utils_ip_routes_from_variant (value, AF_INET6);
+ g_object_set (setting, NM_SETTING_IP_CONFIG_ROUTES, routes, NULL);
+ g_ptr_array_unref (routes);
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ NMSettingIP6ConfigPrivate *priv = NM_SETTING_IP6_CONFIG_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_IP6_PRIVACY:
+ priv->ip6_privacy = g_value_get_enum (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)
+{
+ NMSettingIP6ConfigPrivate *priv = NM_SETTING_IP6_CONFIG_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_IP6_PRIVACY:
+ g_value_set_enum (value, priv->ip6_privacy);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_setting_ip6_config_class_init (NMSettingIP6ConfigClass *ip6_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (ip6_class);
+ NMSettingClass *setting_class = NM_SETTING_CLASS (ip6_class);
+
+ g_type_class_add_private (ip6_class, sizeof (NMSettingIP6ConfigPrivate));
+
+ /* virtual methods */
+ object_class->set_property = set_property;
+ object_class->get_property = get_property;
+ setting_class->verify = verify;
+
+ /* Properties */
+
+ /* ---ifcfg-rh---
+ * property: method
+ * variable: IPV6INIT, IPV6FORWARDING, IPV6_AUTOCONF, DHCPV6C
+ * default: IPV6INIT=yes; IPV6FORWARDING=no; IPV6_AUTOCONF=!IPV6FORWARDING, DHCPV6=no
+ * description: Method used for IPv6 protocol configuration.
+ * ignore ~ IPV6INIT=no; auto ~ IPV6_AUTOCONF=yes; dhcp ~ IPV6_AUTOCONF=no and DHCPV6C=yes
+ * ---end---
+ */
+
+ /* ---keyfile---
+ * property: dns
+ * format: list of DNS IP addresses
+ * description: List of DNS servers.
+ * example: dns=2001:4860:4860::8888;2001:4860:4860::8844;
+ * ---end---
+ * ---ifcfg-rh---
+ * property: dns
+ * variable: DNS1, DNS2, ...
+ * format: string
+ * description: List of DNS servers. NetworkManager uses the variables both
+ * for IPv4 and IPv6.
+ * ---end---
+ */
+
+ /* ---ifcfg-rh---
+ * property: dns-search
+ * variable: DOMAIN
+ * format: string (space-separated domains)
+ * description: List of DNS search domains.
+ * ---end---
+ */
+
+ /* ---keyfile---
+ * property: addresses
+ * variable: address1, address2, ...
+ * format: address/plen
+ * description: List of static IP addresses.
+ * example: address1=abbe::cafe/96 address2=2001::1234
+ * ---end---
+ * ---ifcfg-rh---
+ * property: addresses
+ * variable: IPV6ADDR, IPV6ADDR_SECONDARIES
+ * description: List of static IP addresses.
+ * example: IPV6ADDR=ab12:9876::1
+ * IPV6ADDR_SECONDARIES="ab12:9876::2 ab12:9876::3"
+ * ---end---
+ */
+
+ /* ---keyfile---
+ * property: gateway
+ * variable: gateway
+ * format: string
+ * description: Gateway IP addresses as a string.
+ * example: gateway=abbe::1
+ * ---end---
+ * ---ifcfg-rh---
+ * property: gateway
+ * variable: IPV6_DEFAULTGW
+ * description: Gateway IP address.
+ * example: IPV6_DEFAULTGW=abbe::1
+ * ---end---
+ */
+
+ /* ---keyfile---
+ * property: routes
+ * variable: route1, route2, ...
+ * format: route/plen[,gateway,metric]
+ * description: List of IP routes.
+ * example: route1=2001:4860:4860::/64,2620:52:0:2219:222:68ff:fe11:5403
+ * ---end---
+ * ---ifcfg-rh---
+ * property: routes
+ * variable: (none)
+ * description: List of static routes. They are not stored in ifcfg-* file,
+ * but in route6-* file instead in the form of command line for 'ip route add'.
+ * ---end---
+ */
+
+ /* ---ifcfg-rh---
+ * property: ignore-auto-routes
+ * variable: IPV6_PEERROUTES(+)
+ * default: yes
+ * description: IPV6_PEERROUTES has the opposite meaning as 'ignore-auto-routes' property.
+ * ---end---
+ */
+
+ /* ---ifcfg-rh---
+ * property: ignore-auto-dns
+ * variable: IPV6_PEERDNS(+)
+ * default: yes
+ * description: IPV6_PEERDNS has the opposite meaning as 'ignore-auto-dns' property.
+ * ---end---
+ */
+
+ /* ---ifcfg-rh---
+ * property: dhcp-hostname
+ * variable: DHCP_HOSTNAME
+ * description: Hostname to send the DHCP server.
+ * ---end---
+ */
+
+ /* ---ifcfg-rh---
+ * property: never-default
+ * variable: IPV6_DEFROUTE(+), (and IPV6_DEFAULTGW, IPV6_DEFAULTDEV in /etc/sysconfig/network)
+ * default: IPV6_DEFROUTE=yes (when no variable specified)
+ * description: IPV6_DEFROUTE=no tells NetworkManager that this connection
+ * should not be assigned the default IPv6 route. IPV6_DEFROUTE has the opposite
+ * meaning as 'never-default' property.
+ * ---end---
+ */
+
+ /* ---ifcfg-rh---
+ * property: may-fail
+ * variable: IPV6_FAILURE_FATAL(+)
+ * default: no
+ * description: IPV6_FAILURE_FATAL has the opposite meaning as 'may-fail' property.
+ * ---end---
+ */
+
+ /**
+ * 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).
+ **/
+ /* ---ifcfg-rh---
+ * property: ip6-privacy
+ * variable: IPV6_PRIVACY, IPV6_PRIVACY_PREFER_PUBLIC_IP(+)
+ * values: IPV6_PRIVACY: no, yes (rfc3041 or rfc4941);
+ * IPV6_PRIVACY_PREFER_PUBLIC_IP: yes, no
+ * default: no
+ * description: Configure IPv6 Privacy Extensions for SLAAC (RFC4941).
+ * example: IPV6_PRIVACY=rfc3041 IPV6_PRIVACY_PREFER_PUBLIC_IP=yes
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_IP6_PRIVACY,
+ g_param_spec_enum (NM_SETTING_IP6_CONFIG_IP6_PRIVACY, "", "",
+ NM_TYPE_SETTING_IP6_CONFIG_PRIVACY,
+ NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+
+ /* IP6-specific property overrides */
+
+ /* ---dbus---
+ * property: dns
+ * format: array of byte array
+ * description: Array of IP addresses of DNS servers (in network byte order)
+ * ---end---
+ */
+ _nm_setting_class_transform_property (setting_class,
+ NM_SETTING_IP_CONFIG_DNS,
+ G_VARIANT_TYPE ("aay"),
+ ip6_dns_to_dbus,
+ ip6_dns_from_dbus);
+
+ /* ---dbus---
+ * property: addresses
+ * format: array of legacy IPv6 address struct (a(ayuay))
+ * description: Deprecated in favor of the 'address-data' and 'gateway'
+ * properties, but this can be used for backward-compatibility with older
+ * daemons. Note that if you send this property the daemon will ignore
+ * 'address-data' and 'gateway'.
+ *
+ * Array of IPv6 address structures. Each IPv6 address structure is
+ * composed of an IPv6 address, a prefix length (1 - 128), and an IPv6
+ * gateway address. The gateway may be zeroed out if no gateway exists for
+ * that subnet.
+ * ---end---
+ */
+ _nm_setting_class_override_property (setting_class,
+ NM_SETTING_IP_CONFIG_ADDRESSES,
+ G_VARIANT_TYPE ("a(ayuay)"),
+ ip6_addresses_get,
+ ip6_addresses_set,
+ NULL);
+
+ /* ---dbus---
+ * property: address-data
+ * format: array of vardict
+ * description: Array of IPv6 addresses. Each address dictionary contains at
+ * least 'address' and 'prefix' entries, containing the IP address as a
+ * string, and the prefix length as a uint32. Additional attributes may
+ * also exist on some addresses.
+ * ---end---
+ */
+ _nm_setting_class_add_dbus_only_property (setting_class,
+ "address-data",
+ G_VARIANT_TYPE ("aa{sv}"),
+ ip6_address_data_get,
+ ip6_address_data_set);
+
+ /* ---dbus---
+ * property: routes
+ * format: array of legacy IPv6 route struct (a(ayuayu))
+ * description: Deprecated in favor of the 'route-data' property, but this
+ * can be used for backward-compatibility with older daemons. Note that if
+ * you send this property the daemon will ignore 'route-data'.
+ *
+ * Array of IPv6 route structures. Each IPv6 route structure is
+ * composed of an IPv6 address, a prefix length (1 - 128), an IPv6
+ * next hop address (which may be zeroed out if there is no next hop),
+ * and a metric. If the metric is 0, NM will choose an appropriate
+ * default metric for the device.
+ * ---end---
+ */
+ _nm_setting_class_override_property (setting_class,
+ NM_SETTING_IP_CONFIG_ROUTES,
+ G_VARIANT_TYPE ("a(ayuayu)"),
+ ip6_routes_get,
+ ip6_routes_set,
+ NULL);
+
+ /* ---dbus---
+ * property: route-data
+ * format: array of vardict
+ * description: Array of IPv6 routes. Each route dictionary contains at
+ * least 'dest' and 'prefix' entries, containing the destination IP
+ * address as a string, and the prefix length as a uint32. Most routes
+ * will also have a 'next-hop' entry, containing the next hop IP address as
+ * a string. If the route has a 'metric' entry (containing a uint32), that
+ * will be used as the metric for the route (otherwise NM will pick a
+ * default value appropriate to the device). Additional attributes may
+ * also exist on some routes.
+ * ---end---
+ */
+ _nm_setting_class_add_dbus_only_property (setting_class,
+ "route-data",
+ G_VARIANT_TYPE ("aa{sv}"),
+ ip6_route_data_get,
+ ip6_route_data_set);
+}
diff --git a/libnm-core/nm-setting-ip6-config.h b/libnm-core/nm-setting-ip6-config.h
new file mode 100644
index 000000000..b791e937b
--- /dev/null
+++ b/libnm-core/nm-setting-ip6-config.h
@@ -0,0 +1,136 @@
+/* -*- 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 2007 - 2014 Red Hat, Inc.
+ */
+
+#ifndef __NM_SETTING_IP6_CONFIG_H__
+#define __NM_SETTING_IP6_CONFIG_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting-ip-config.h"
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_IP6_CONFIG (nm_setting_ip6_config_get_type ())
+#define NM_SETTING_IP6_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SETTING_IP6_CONFIG, NMSettingIP6Config))
+#define NM_SETTING_IP6_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SETTING_IP6CONFIG, NMSettingIP6ConfigClass))
+#define NM_IS_SETTING_IP6_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SETTING_IP6_CONFIG))
+#define NM_IS_SETTING_IP6_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_SETTING_IP6_CONFIG))
+#define NM_SETTING_IP6_CONFIG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SETTING_IP6_CONFIG, NMSettingIP6ConfigClass))
+
+#define NM_SETTING_IP6_CONFIG_SETTING_NAME "ipv6"
+
+#define NM_SETTING_IP6_CONFIG_IP6_PRIVACY "ip6-privacy"
+
+/**
+ * NM_SETTING_IP6_CONFIG_METHOD_IGNORE:
+ *
+ * IPv6 is not required or is handled by some other mechanism, and NetworkManager
+ * should not configure IPv6 for this connection.
+ */
+#define NM_SETTING_IP6_CONFIG_METHOD_IGNORE "ignore"
+
+/**
+ * NM_SETTING_IP6_CONFIG_METHOD_AUTO:
+ *
+ * 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.
+ */
+#define NM_SETTING_IP6_CONFIG_METHOD_AUTO "auto"
+
+/**
+ * NM_SETTING_IP6_CONFIG_METHOD_DHCP:
+ *
+ * IPv6 configuration should be automatically determined via DHCPv6 only and
+ * router advertisements should be ignored.
+ */
+#define NM_SETTING_IP6_CONFIG_METHOD_DHCP "dhcp"
+
+/**
+ * NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL:
+ *
+ * IPv6 configuration should be automatically configured for link-local-only
+ * operation.
+ */
+#define NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL "link-local"
+
+/**
+ * NM_SETTING_IP6_CONFIG_METHOD_MANUAL:
+ *
+ * All necessary IPv6 configuration (addresses, prefix, DNS, etc) is specified
+ * in the setting's properties.
+ */
+#define NM_SETTING_IP6_CONFIG_METHOD_MANUAL "manual"
+
+/**
+ * NM_SETTING_IP6_CONFIG_METHOD_SHARED:
+ *
+ * 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)
+ */
+#define NM_SETTING_IP6_CONFIG_METHOD_SHARED "shared"
+
+/**
+ * NMSettingIP6ConfigPrivacy:
+ * @NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN: unknown or no value specified
+ * @NM_SETTING_IP6_CONFIG_PRIVACY_DISABLED: IPv6 Privacy Extensions are disabled
+ * @NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_PUBLIC_ADDR: IPv6 Privacy Extensions
+ * are enabled, but public addresses are preferred over temporary addresses
+ * @NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR: IPv6 Privacy Extensions
+ * are enabled and temporary addresses are preferred over public addresses
+ *
+ * #NMSettingIP6ConfigPrivacy values indicate if and how IPv6 Privacy
+ * Extensions are used (RFC4941).
+ */
+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;
+
+struct _NMSettingIP6Config {
+ NMSettingIPConfig parent;
+};
+
+typedef struct {
+ NMSettingIPConfigClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMSettingIP6ConfigClass;
+
+GType nm_setting_ip6_config_get_type (void);
+
+NMSetting *nm_setting_ip6_config_new (void);
+
+NMSettingIP6ConfigPrivacy nm_setting_ip6_config_get_ip6_privacy (NMSettingIP6Config *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_IP6_CONFIG_H__ */
diff --git a/libnm-core/nm-setting-olpc-mesh.c b/libnm-core/nm-setting-olpc-mesh.c
new file mode 100644
index 000000000..c1d54bee8
--- /dev/null
+++ b/libnm-core/nm-setting-olpc-mesh.c
@@ -0,0 +1,268 @@
+/* -*- 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 2007 - 2013 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2009 One Laptop per Child
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <glib/gi18n-lib.h>
+
+#include "nm-setting-olpc-mesh.h"
+#include "nm-dbus-interface.h"
+#include "nm-utils.h"
+#include "nm-utils-private.h"
+#include "nm-setting-private.h"
+
+static void nm_setting_olpc_mesh_init (NMSettingOlpcMesh *setting);
+
+G_DEFINE_TYPE_WITH_CODE (NMSettingOlpcMesh, nm_setting_olpc_mesh, NM_TYPE_SETTING,
+ _nm_register_setting (OLPC_MESH, 1))
+NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_OLPC_MESH)
+
+#define NM_SETTING_OLPC_MESH_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_OLPC_MESH, NMSettingOlpcMeshPrivate))
+
+typedef struct {
+ GBytes *ssid;
+ guint32 channel;
+ char *dhcp_anycast_addr;
+} NMSettingOlpcMeshPrivate;
+
+enum {
+ PROP_0,
+ PROP_SSID,
+ PROP_CHANNEL,
+ PROP_DHCP_ANYCAST_ADDRESS,
+
+ LAST_PROP
+};
+
+/**
+ * nm_setting_olpc_mesh_new:
+ *
+ * Creates a new #NMSettingOlpcMesh object with default values.
+ *
+ * Returns: the new empty #NMSettingOlpcMesh object
+ **/
+NMSetting *nm_setting_olpc_mesh_new (void)
+{
+ return (NMSetting *) g_object_new (NM_TYPE_SETTING_OLPC_MESH, NULL);
+}
+
+static void
+nm_setting_olpc_mesh_init (NMSettingOlpcMesh *setting)
+{
+}
+
+/**
+ * nm_setting_olpc_mesh_get_ssid:
+ *
+ * Returns: (transfer none):
+ */
+GBytes *
+nm_setting_olpc_mesh_get_ssid (NMSettingOlpcMesh *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_OLPC_MESH (setting), NULL);
+
+ return NM_SETTING_OLPC_MESH_GET_PRIVATE (setting)->ssid;
+}
+
+guint32
+nm_setting_olpc_mesh_get_channel (NMSettingOlpcMesh *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_OLPC_MESH (setting), 0);
+
+ return NM_SETTING_OLPC_MESH_GET_PRIVATE (setting)->channel;
+}
+
+const char *
+nm_setting_olpc_mesh_get_dhcp_anycast_address (NMSettingOlpcMesh *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_OLPC_MESH (setting), NULL);
+
+ return NM_SETTING_OLPC_MESH_GET_PRIVATE (setting)->dhcp_anycast_addr;
+}
+
+static gboolean
+verify (NMSetting *setting, NMConnection *connection, GError **error)
+{
+ NMSettingOlpcMeshPrivate *priv = NM_SETTING_OLPC_MESH_GET_PRIVATE (setting);
+ gsize length;
+
+ if (!priv->ssid) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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;
+ }
+
+ length = g_bytes_get_size (priv->ssid);
+ if (length == 0 || length > 32) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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;
+ }
+
+ if (priv->channel == 0 || priv->channel > 13) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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 && !nm_utils_hwaddr_valid (priv->dhcp_anycast_addr, ETH_ALEN)) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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;
+ }
+
+ return TRUE;
+}
+
+static void
+finalize (GObject *object)
+{
+ NMSettingOlpcMeshPrivate *priv = NM_SETTING_OLPC_MESH_GET_PRIVATE (object);
+
+ if (priv->ssid)
+ g_bytes_unref (priv->ssid);
+ g_free (priv->dhcp_anycast_addr);
+
+ G_OBJECT_CLASS (nm_setting_olpc_mesh_parent_class)->finalize (object);
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ NMSettingOlpcMeshPrivate *priv = NM_SETTING_OLPC_MESH_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_SSID:
+ if (priv->ssid)
+ g_bytes_unref (priv->ssid);
+ priv->ssid = g_value_dup_boxed (value);
+ break;
+ case PROP_CHANNEL:
+ priv->channel = g_value_get_uint (value);
+ break;
+ case PROP_DHCP_ANYCAST_ADDRESS:
+ g_free (priv->dhcp_anycast_addr);
+ priv->dhcp_anycast_addr = 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)
+{
+ NMSettingOlpcMesh *setting = NM_SETTING_OLPC_MESH (object);
+
+ switch (prop_id) {
+ case PROP_SSID:
+ g_value_set_boxed (value, nm_setting_olpc_mesh_get_ssid (setting));
+ break;
+ case PROP_CHANNEL:
+ g_value_set_uint (value, nm_setting_olpc_mesh_get_channel (setting));
+ break;
+ case PROP_DHCP_ANYCAST_ADDRESS:
+ g_value_set_string (value, nm_setting_olpc_mesh_get_dhcp_anycast_address (setting));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_setting_olpc_mesh_class_init (NMSettingOlpcMeshClass *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 (NMSettingOlpcMeshPrivate));
+
+ /* virtual methods */
+ object_class->set_property = set_property;
+ object_class->get_property = get_property;
+ object_class->finalize = finalize;
+ parent_class->verify = verify;
+
+ /* Properties */
+ /**
+ * NMSettingOlpcMesh:ssid:
+ *
+ * SSID of the mesh network to join.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_SSID,
+ g_param_spec_boxed (NM_SETTING_OLPC_MESH_SSID, "", "",
+ G_TYPE_BYTES,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingOlpcMesh:channel:
+ *
+ * Channel on which the mesh network to join is located.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_CHANNEL,
+ g_param_spec_uint (NM_SETTING_OLPC_MESH_CHANNEL, "", "",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingOlpcMesh:dhcp-anycast-address:
+ *
+ * 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,
+ g_param_spec_string (NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ _nm_setting_class_transform_property (parent_class, NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS,
+ G_VARIANT_TYPE_BYTESTRING,
+ _nm_utils_hwaddr_to_dbus,
+ _nm_utils_hwaddr_from_dbus);
+}
diff --git a/libnm-core/nm-setting-olpc-mesh.h b/libnm-core/nm-setting-olpc-mesh.h
new file mode 100644
index 000000000..6a1656514
--- /dev/null
+++ b/libnm-core/nm-setting-olpc-mesh.h
@@ -0,0 +1,67 @@
+/* -*- 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 2007 - 2008 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2009 One Laptop per Child
+ */
+
+#ifndef __NM_SETTING_OLPC_MESH_H__
+#define __NM_SETTING_OLPC_MESH_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-setting.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_OLPC_MESH (nm_setting_olpc_mesh_get_type ())
+#define NM_SETTING_OLPC_MESH(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SETTING_OLPC_MESH, NMSettingOlpcMesh))
+#define NM_SETTING_OLPC_MESH_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SETTING_OLPC_MESH, NMSettingOlpcMeshClass))
+#define NM_IS_SETTING_OLPC_MESH(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SETTING_OLPC_MESH))
+#define NM_IS_SETTING_OLPC_MESH_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_SETTING_OLPC_MESH))
+#define NM_SETTING_OLPC_MESH_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SETTING_OLPC_MESH, NMSettingOlpcMeshClass))
+
+#define NM_SETTING_OLPC_MESH_SETTING_NAME "802-11-olpc-mesh"
+
+#define NM_SETTING_OLPC_MESH_SSID "ssid"
+#define NM_SETTING_OLPC_MESH_CHANNEL "channel"
+#define NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS "dhcp-anycast-address"
+
+struct _NMSettingOlpcMesh {
+ NMSetting parent;
+};
+
+typedef struct {
+ NMSettingClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMSettingOlpcMeshClass;
+
+GType nm_setting_olpc_mesh_get_type (void);
+
+NMSetting * nm_setting_olpc_mesh_new (void);
+GBytes * nm_setting_olpc_mesh_get_ssid (NMSettingOlpcMesh *setting);
+guint32 nm_setting_olpc_mesh_get_channel (NMSettingOlpcMesh *setting);
+const char * nm_setting_olpc_mesh_get_dhcp_anycast_address (NMSettingOlpcMesh *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_OLPC_MESH_H__ */
diff --git a/libnm-core/nm-setting-ppp.c b/libnm-core/nm-setting-ppp.c
new file mode 100644
index 000000000..01f798ea7
--- /dev/null
+++ b/libnm-core/nm-setting-ppp.c
@@ -0,0 +1,803 @@
+/* -*- 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 2007 - 2013 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ */
+
+#include "config.h"
+
+#include <glib/gi18n-lib.h>
+
+#include "nm-setting-ppp.h"
+#include "nm-setting-private.h"
+
+/**
+ * SECTION:nm-setting-ppp
+ * @short_description: Describes connection properties for devices/networks
+ * that require PPP to deliver IP capability
+ *
+ * The #NMSettingPpp object is a #NMSetting subclass that describes properties
+ * necessary for connection to networks that require PPP transport, like PPPoE
+ * cable and DSL modems and some mobile broadband devices.
+ **/
+
+G_DEFINE_TYPE_WITH_CODE (NMSettingPpp, nm_setting_ppp, NM_TYPE_SETTING,
+ _nm_register_setting (PPP, 3))
+NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_PPP)
+
+#define NM_SETTING_PPP_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_PPP, NMSettingPppPrivate))
+
+typedef struct {
+ gboolean noauth;
+ gboolean refuse_eap;
+ gboolean refuse_pap;
+ gboolean refuse_chap;
+ gboolean refuse_mschap;
+ gboolean refuse_mschapv2;
+ gboolean nobsdcomp;
+ gboolean nodeflate;
+ gboolean no_vj_comp;
+ gboolean require_mppe;
+ gboolean require_mppe_128;
+ gboolean mppe_stateful;
+ gboolean crtscts;
+ guint32 baud;
+ guint32 mru;
+ guint32 mtu;
+ guint32 lcp_echo_failure;
+ guint32 lcp_echo_interval;
+} NMSettingPppPrivate;
+
+enum {
+ PROP_0,
+ PROP_NOAUTH,
+ PROP_REFUSE_EAP,
+ PROP_REFUSE_PAP,
+ PROP_REFUSE_CHAP,
+ PROP_REFUSE_MSCHAP,
+ PROP_REFUSE_MSCHAPV2,
+ PROP_NOBSDCOMP,
+ PROP_NODEFLATE,
+ PROP_NO_VJ_COMP,
+ PROP_REQUIRE_MPPE,
+ PROP_REQUIRE_MPPE_128,
+ PROP_MPPE_STATEFUL,
+ PROP_CRTSCTS,
+ PROP_BAUD,
+ PROP_MRU,
+ PROP_MTU,
+ PROP_LCP_ECHO_FAILURE,
+ PROP_LCP_ECHO_INTERVAL,
+
+ LAST_PROP
+};
+
+/**
+ * nm_setting_ppp_new:
+ *
+ * Creates a new #NMSettingPpp object with default values.
+ *
+ * Returns: (transfer full): the new empty #NMSettingPpp object
+ **/
+NMSetting *
+nm_setting_ppp_new (void)
+{
+ return (NMSetting *) g_object_new (NM_TYPE_SETTING_PPP, NULL);
+}
+
+/**
+ * nm_setting_ppp_get_noauth:
+ * @setting: the #NMSettingPpp
+ *
+ * Returns: the #NMSettingPpp:noauth property of the setting
+ **/
+gboolean
+nm_setting_ppp_get_noauth (NMSettingPpp *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_PPP (setting), FALSE);
+
+ return NM_SETTING_PPP_GET_PRIVATE (setting)->noauth;
+}
+
+/**
+ * nm_setting_ppp_get_refuse_eap:
+ * @setting: the #NMSettingPpp
+ *
+ * Returns: the #NMSettingPpp:refuse-eap property of the setting
+ **/
+gboolean
+nm_setting_ppp_get_refuse_eap (NMSettingPpp *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_PPP (setting), FALSE);
+
+ return NM_SETTING_PPP_GET_PRIVATE (setting)->refuse_eap;
+}
+
+/**
+ * nm_setting_ppp_get_refuse_pap:
+ * @setting: the #NMSettingPpp
+ *
+ * Returns: the #NMSettingPpp:refuse-pap property of the setting
+ **/
+gboolean
+nm_setting_ppp_get_refuse_pap (NMSettingPpp *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_PPP (setting), FALSE);
+
+ return NM_SETTING_PPP_GET_PRIVATE (setting)->refuse_pap;
+}
+
+/**
+ * nm_setting_ppp_get_refuse_chap:
+ * @setting: the #NMSettingPpp
+ *
+ * Returns: the #NMSettingPpp:refuse-chap property of the setting
+ **/
+gboolean
+nm_setting_ppp_get_refuse_chap (NMSettingPpp *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_PPP (setting), FALSE);
+
+ return NM_SETTING_PPP_GET_PRIVATE (setting)->refuse_chap;
+}
+
+/**
+ * nm_setting_ppp_get_refuse_mschap:
+ * @setting: the #NMSettingPpp
+ *
+ * Returns: the #NMSettingPpp:refuse-mschap property of the setting
+ **/
+gboolean
+nm_setting_ppp_get_refuse_mschap (NMSettingPpp *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_PPP (setting), FALSE);
+
+ return NM_SETTING_PPP_GET_PRIVATE (setting)->refuse_mschap;
+}
+
+/**
+ * nm_setting_ppp_get_refuse_mschapv2:
+ * @setting: the #NMSettingPpp
+ *
+ * Returns: the #NMSettingPpp:refuse-mschapv2 property of the setting
+ **/
+gboolean
+nm_setting_ppp_get_refuse_mschapv2 (NMSettingPpp *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_PPP (setting), FALSE);
+
+ return NM_SETTING_PPP_GET_PRIVATE (setting)->refuse_mschapv2;
+}
+
+/**
+ * nm_setting_ppp_get_nobsdcomp:
+ * @setting: the #NMSettingPpp
+ *
+ * Returns: the #NMSettingPpp:nobsdcomp property of the setting
+ **/
+gboolean
+nm_setting_ppp_get_nobsdcomp (NMSettingPpp *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_PPP (setting), FALSE);
+
+ return NM_SETTING_PPP_GET_PRIVATE (setting)->nobsdcomp;
+}
+
+/**
+ * nm_setting_ppp_get_nodeflate:
+ * @setting: the #NMSettingPpp
+ *
+ * Returns: the #NMSettingPpp:nodeflate property of the setting
+ **/
+gboolean
+nm_setting_ppp_get_nodeflate (NMSettingPpp *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_PPP (setting), FALSE);
+
+ return NM_SETTING_PPP_GET_PRIVATE (setting)->nodeflate;
+}
+
+/**
+ * nm_setting_ppp_get_no_vj_comp:
+ * @setting: the #NMSettingPpp
+ *
+ * Returns: the #NMSettingPpp:no-vj-comp property of the setting
+ **/
+gboolean
+nm_setting_ppp_get_no_vj_comp (NMSettingPpp *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_PPP (setting), FALSE);
+
+ return NM_SETTING_PPP_GET_PRIVATE (setting)->no_vj_comp;
+}
+
+/**
+ * nm_setting_ppp_get_require_mppe:
+ * @setting: the #NMSettingPpp
+ *
+ * Returns: the #NMSettingPpp:require-mppe property of the setting
+ **/
+gboolean
+nm_setting_ppp_get_require_mppe (NMSettingPpp *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_PPP (setting), FALSE);
+
+ return NM_SETTING_PPP_GET_PRIVATE (setting)->require_mppe;
+}
+
+/**
+ * nm_setting_ppp_get_require_mppe_128:
+ * @setting: the #NMSettingPpp
+ *
+ * Returns: the #NMSettingPpp:require-mppe-128 property of the setting
+ **/
+gboolean
+nm_setting_ppp_get_require_mppe_128 (NMSettingPpp *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_PPP (setting), FALSE);
+
+ return NM_SETTING_PPP_GET_PRIVATE (setting)->require_mppe_128;
+}
+
+/**
+ * nm_setting_ppp_get_mppe_stateful:
+ * @setting: the #NMSettingPpp
+ *
+ * Returns: the #NMSettingPpp:mppe-stateful property of the setting
+ **/
+gboolean
+nm_setting_ppp_get_mppe_stateful (NMSettingPpp *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_PPP (setting), FALSE);
+
+ return NM_SETTING_PPP_GET_PRIVATE (setting)->mppe_stateful;
+}
+
+/**
+ * nm_setting_ppp_get_crtscts:
+ * @setting: the #NMSettingPpp
+ *
+ * Returns: the #NMSettingPpp:crtscts property of the setting
+ **/
+gboolean
+nm_setting_ppp_get_crtscts (NMSettingPpp *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_PPP (setting), FALSE);
+
+ return NM_SETTING_PPP_GET_PRIVATE (setting)->crtscts;
+}
+
+/**
+ * nm_setting_ppp_get_baud:
+ * @setting: the #NMSettingPpp
+ *
+ * Returns: the #NMSettingPpp:baud property of the setting
+ **/
+guint32
+nm_setting_ppp_get_baud (NMSettingPpp *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_PPP (setting), 0);
+
+ return NM_SETTING_PPP_GET_PRIVATE (setting)->baud;
+}
+
+/**
+ * nm_setting_ppp_get_mru:
+ * @setting: the #NMSettingPpp
+ *
+ * Returns: the #NMSettingPpp:mru property of the setting
+ **/
+guint32
+nm_setting_ppp_get_mru (NMSettingPpp *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_PPP (setting), 0);
+
+ return NM_SETTING_PPP_GET_PRIVATE (setting)->mru;
+}
+
+/**
+ * nm_setting_ppp_get_mtu:
+ * @setting: the #NMSettingPpp
+ *
+ * Returns: the #NMSettingPpp:mtu property of the setting
+ **/
+guint32
+nm_setting_ppp_get_mtu (NMSettingPpp *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_PPP (setting), 0);
+
+ return NM_SETTING_PPP_GET_PRIVATE (setting)->mtu;
+}
+
+/**
+ * nm_setting_ppp_get_lcp_echo_failure:
+ * @setting: the #NMSettingPpp
+ *
+ * Returns: the #NMSettingPpp:lcp-echo-failure property of the setting
+ **/
+guint32
+nm_setting_ppp_get_lcp_echo_failure (NMSettingPpp *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_PPP (setting), 0);
+
+ return NM_SETTING_PPP_GET_PRIVATE (setting)->lcp_echo_failure;
+}
+
+/**
+ * nm_setting_ppp_get_lcp_echo_interval:
+ * @setting: the #NMSettingPpp
+ *
+ * Returns: the #NMSettingPpp:lcp-echo-interval property of the setting
+ **/
+guint32
+nm_setting_ppp_get_lcp_echo_interval (NMSettingPpp *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_PPP (setting), 0);
+
+ return NM_SETTING_PPP_GET_PRIVATE (setting)->lcp_echo_interval;
+}
+
+static gboolean
+verify (NMSetting *setting, NMConnection *connection, GError **error)
+{
+ NMSettingPppPrivate *priv = NM_SETTING_PPP_GET_PRIVATE (setting);
+
+ /* FIXME: Do we even want this or can we just let pppd evaluate the options? */
+ if (priv->mru > 0) {
+ if (priv->mru < 128 || priv->mru > 16384) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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;
+ }
+ }
+
+ if (priv->lcp_echo_failure > 0) {
+ /* lcp_echo_interval must also be non-zero */
+ if (priv->lcp_echo_interval == 0) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("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;
+ }
+ }
+
+ return TRUE;
+}
+
+static void
+nm_setting_ppp_init (NMSettingPpp *setting)
+{
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ NMSettingPppPrivate *priv = NM_SETTING_PPP_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_NOAUTH:
+ priv->noauth = g_value_get_boolean (value);
+ break;
+ case PROP_REFUSE_EAP:
+ priv->refuse_eap = g_value_get_boolean (value);
+ break;
+ case PROP_REFUSE_PAP:
+ priv->refuse_pap = g_value_get_boolean (value);
+ break;
+ case PROP_REFUSE_CHAP:
+ priv->refuse_chap = g_value_get_boolean (value);
+ break;
+ case PROP_REFUSE_MSCHAP:
+ priv->refuse_mschap = g_value_get_boolean (value);
+ break;
+ case PROP_REFUSE_MSCHAPV2:
+ priv->refuse_mschapv2 = g_value_get_boolean (value);
+ break;
+ case PROP_NOBSDCOMP:
+ priv->nobsdcomp = g_value_get_boolean (value);
+ break;
+ case PROP_NODEFLATE:
+ priv->nodeflate = g_value_get_boolean (value);
+ break;
+ case PROP_NO_VJ_COMP:
+ priv->no_vj_comp = g_value_get_boolean (value);
+ break;
+ case PROP_REQUIRE_MPPE:
+ priv->require_mppe = g_value_get_boolean (value);
+ break;
+ case PROP_REQUIRE_MPPE_128:
+ priv->require_mppe_128 = g_value_get_boolean (value);
+ break;
+ case PROP_MPPE_STATEFUL:
+ priv->mppe_stateful = g_value_get_boolean (value);
+ break;
+ case PROP_CRTSCTS:
+ priv->crtscts = g_value_get_boolean (value);
+ break;
+ case PROP_BAUD:
+ priv->baud = g_value_get_uint (value);
+ break;
+ case PROP_MRU:
+ priv->mru = g_value_get_uint (value);
+ break;
+ case PROP_MTU:
+ priv->mtu = g_value_get_uint (value);
+ break;
+ case PROP_LCP_ECHO_FAILURE:
+ priv->lcp_echo_failure = g_value_get_uint (value);
+ break;
+ case PROP_LCP_ECHO_INTERVAL:
+ priv->lcp_echo_interval = g_value_get_uint (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)
+{
+ NMSettingPpp *setting = NM_SETTING_PPP (object);
+
+ switch (prop_id) {
+ case PROP_NOAUTH:
+ g_value_set_boolean (value, nm_setting_ppp_get_noauth (setting));
+ break;
+ case PROP_REFUSE_EAP:
+ g_value_set_boolean (value, nm_setting_ppp_get_refuse_eap (setting));
+ break;
+ case PROP_REFUSE_PAP:
+ g_value_set_boolean (value, nm_setting_ppp_get_refuse_pap (setting));
+ break;
+ case PROP_REFUSE_CHAP:
+ g_value_set_boolean (value, nm_setting_ppp_get_refuse_chap (setting));
+ break;
+ case PROP_REFUSE_MSCHAP:
+ g_value_set_boolean (value, nm_setting_ppp_get_refuse_mschap (setting));
+ break;
+ case PROP_REFUSE_MSCHAPV2:
+ g_value_set_boolean (value, nm_setting_ppp_get_refuse_mschapv2 (setting));
+ break;
+ case PROP_NOBSDCOMP:
+ g_value_set_boolean (value, nm_setting_ppp_get_nobsdcomp (setting));
+ break;
+ case PROP_NODEFLATE:
+ g_value_set_boolean (value, nm_setting_ppp_get_nodeflate (setting));
+ break;
+ case PROP_NO_VJ_COMP:
+ g_value_set_boolean (value, nm_setting_ppp_get_no_vj_comp (setting));
+ break;
+ case PROP_REQUIRE_MPPE:
+ g_value_set_boolean (value, nm_setting_ppp_get_require_mppe (setting));
+ break;
+ case PROP_REQUIRE_MPPE_128:
+ g_value_set_boolean (value, nm_setting_ppp_get_require_mppe_128 (setting));
+ break;
+ case PROP_MPPE_STATEFUL:
+ g_value_set_boolean (value, nm_setting_ppp_get_mppe_stateful (setting));
+ break;
+ case PROP_CRTSCTS:
+ g_value_set_boolean (value, nm_setting_ppp_get_crtscts (setting));
+ break;
+ case PROP_BAUD:
+ g_value_set_uint (value, nm_setting_ppp_get_baud (setting));
+ break;
+ case PROP_MRU:
+ g_value_set_uint (value, nm_setting_ppp_get_mru (setting));
+ break;
+ case PROP_MTU:
+ g_value_set_uint (value, nm_setting_ppp_get_mtu (setting));
+ break;
+ case PROP_LCP_ECHO_FAILURE:
+ g_value_set_uint (value, nm_setting_ppp_get_lcp_echo_failure (setting));
+ break;
+ case PROP_LCP_ECHO_INTERVAL:
+ g_value_set_uint (value, nm_setting_ppp_get_lcp_echo_interval (setting));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_setting_ppp_class_init (NMSettingPppClass *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 (NMSettingPppPrivate));
+
+ /* virtual methods */
+ object_class->set_property = set_property;
+ object_class->get_property = get_property;
+ parent_class->verify = verify;
+
+ /* Properties */
+ /**
+ * 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.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_NOAUTH,
+ g_param_spec_boolean (NM_SETTING_PPP_NOAUTH, "", "",
+ TRUE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingPpp:refuse-eap:
+ *
+ * If %TRUE, the EAP authentication method will not be used.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_REFUSE_EAP,
+ g_param_spec_boolean (NM_SETTING_PPP_REFUSE_EAP, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingPpp:refuse-pap:
+ *
+ * If %TRUE, the PAP authentication method will not be used.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_REFUSE_PAP,
+ g_param_spec_boolean (NM_SETTING_PPP_REFUSE_PAP, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingPpp:refuse-chap:
+ *
+ * If %TRUE, the CHAP authentication method will not be used.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_REFUSE_CHAP,
+ g_param_spec_boolean (NM_SETTING_PPP_REFUSE_CHAP, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingPpp:refuse-mschap:
+ *
+ * If %TRUE, the MSCHAP authentication method will not be used.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_REFUSE_MSCHAP,
+ g_param_spec_boolean (NM_SETTING_PPP_REFUSE_MSCHAP, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingPpp:refuse-mschapv2:
+ *
+ * If %TRUE, the MSCHAPv2 authentication method will not be used.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_REFUSE_MSCHAPV2,
+ g_param_spec_boolean (NM_SETTING_PPP_REFUSE_MSCHAPV2, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingPpp:nobsdcomp:
+ *
+ * If %TRUE, BSD compression will not be requested.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_NOBSDCOMP,
+ g_param_spec_boolean (NM_SETTING_PPP_NOBSDCOMP, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingPpp:nodeflate:
+ *
+ * If %TRUE, "deflate" compression will not be requested.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_NODEFLATE,
+ g_param_spec_boolean (NM_SETTING_PPP_NODEFLATE, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingPpp:no-vj-comp:
+ *
+ * If %TRUE, Van Jacobsen TCP header compression will not be requested.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_NO_VJ_COMP,
+ g_param_spec_boolean (NM_SETTING_PPP_NO_VJ_COMP, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingPpp:require-mppe:
+ *
+ * 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.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_REQUIRE_MPPE,
+ g_param_spec_boolean (NM_SETTING_PPP_REQUIRE_MPPE, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_REQUIRE_MPPE_128,
+ g_param_spec_boolean (NM_SETTING_PPP_REQUIRE_MPPE_128, "", "",
+ FALSE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingPpp:mppe-stateful:
+ *
+ * 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,
+ g_param_spec_boolean (NM_SETTING_PPP_MPPE_STATEFUL, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_CRTSCTS,
+ g_param_spec_boolean (NM_SETTING_PPP_CRTSCTS, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingPpp:baud:
+ *
+ * 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.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_BAUD,
+ g_param_spec_uint (NM_SETTING_PPP_BAUD, "", "",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingPpp:mru:
+ *
+ * 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.
+ */
+ g_object_class_install_property
+ (object_class, PROP_MRU,
+ g_param_spec_uint (NM_SETTING_PPP_MRU, "", "",
+ 0, 16384, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingPpp:mtu:
+ *
+ * If non-zero, instruct pppd to send packets no larger than the specified
+ * size.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_MTU,
+ g_param_spec_uint (NM_SETTING_PPP_MTU, "", "",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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
+ * value if this property is used.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_LCP_ECHO_FAILURE,
+ g_param_spec_uint (NM_SETTING_PPP_LCP_ECHO_FAILURE, "", "",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingPpp:lcp-echo-interval:
+ *
+ * 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.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_LCP_ECHO_INTERVAL,
+ g_param_spec_uint (NM_SETTING_PPP_LCP_ECHO_INTERVAL, "", "",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/libnm-core/nm-setting-ppp.h b/libnm-core/nm-setting-ppp.h
new file mode 100644
index 000000000..2e0162cc5
--- /dev/null
+++ b/libnm-core/nm-setting-ppp.h
@@ -0,0 +1,97 @@
+/* -*- 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 2007 - 2008 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ */
+
+#ifndef __NM_SETTING_PPP_H__
+#define __NM_SETTING_PPP_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-setting.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_PPP (nm_setting_ppp_get_type ())
+#define NM_SETTING_PPP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SETTING_PPP, NMSettingPpp))
+#define NM_SETTING_PPP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SETTING_PPP, NMSettingPppClass))
+#define NM_IS_SETTING_PPP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SETTING_PPP))
+#define NM_IS_SETTING_PPP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_SETTING_PPP))
+#define NM_SETTING_PPP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SETTING_PPP, NMSettingPppClass))
+
+#define NM_SETTING_PPP_SETTING_NAME "ppp"
+
+#define NM_SETTING_PPP_NOAUTH "noauth"
+#define NM_SETTING_PPP_REFUSE_EAP "refuse-eap"
+#define NM_SETTING_PPP_REFUSE_PAP "refuse-pap"
+#define NM_SETTING_PPP_REFUSE_CHAP "refuse-chap"
+#define NM_SETTING_PPP_REFUSE_MSCHAP "refuse-mschap"
+#define NM_SETTING_PPP_REFUSE_MSCHAPV2 "refuse-mschapv2"
+#define NM_SETTING_PPP_NOBSDCOMP "nobsdcomp"
+#define NM_SETTING_PPP_NODEFLATE "nodeflate"
+#define NM_SETTING_PPP_NO_VJ_COMP "no-vj-comp"
+#define NM_SETTING_PPP_REQUIRE_MPPE "require-mppe"
+#define NM_SETTING_PPP_REQUIRE_MPPE_128 "require-mppe-128"
+#define NM_SETTING_PPP_MPPE_STATEFUL "mppe-stateful"
+#define NM_SETTING_PPP_CRTSCTS "crtscts"
+#define NM_SETTING_PPP_BAUD "baud"
+#define NM_SETTING_PPP_MRU "mru"
+#define NM_SETTING_PPP_MTU "mtu"
+#define NM_SETTING_PPP_LCP_ECHO_FAILURE "lcp-echo-failure"
+#define NM_SETTING_PPP_LCP_ECHO_INTERVAL "lcp-echo-interval"
+
+struct _NMSettingPpp {
+ NMSetting parent;
+};
+
+typedef struct {
+ NMSettingClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMSettingPppClass;
+
+GType nm_setting_ppp_get_type (void);
+
+NMSetting *nm_setting_ppp_new (void);
+gboolean nm_setting_ppp_get_noauth (NMSettingPpp *setting);
+gboolean nm_setting_ppp_get_refuse_eap (NMSettingPpp *setting);
+gboolean nm_setting_ppp_get_refuse_pap (NMSettingPpp *setting);
+gboolean nm_setting_ppp_get_refuse_chap (NMSettingPpp *setting);
+gboolean nm_setting_ppp_get_refuse_mschap (NMSettingPpp *setting);
+gboolean nm_setting_ppp_get_refuse_mschapv2 (NMSettingPpp *setting);
+gboolean nm_setting_ppp_get_nobsdcomp (NMSettingPpp *setting);
+gboolean nm_setting_ppp_get_nodeflate (NMSettingPpp *setting);
+gboolean nm_setting_ppp_get_no_vj_comp (NMSettingPpp *setting);
+gboolean nm_setting_ppp_get_require_mppe (NMSettingPpp *setting);
+gboolean nm_setting_ppp_get_require_mppe_128 (NMSettingPpp *setting);
+gboolean nm_setting_ppp_get_mppe_stateful (NMSettingPpp *setting);
+gboolean nm_setting_ppp_get_crtscts (NMSettingPpp *setting);
+guint32 nm_setting_ppp_get_baud (NMSettingPpp *setting);
+guint32 nm_setting_ppp_get_mru (NMSettingPpp *setting);
+guint32 nm_setting_ppp_get_mtu (NMSettingPpp *setting);
+guint32 nm_setting_ppp_get_lcp_echo_failure (NMSettingPpp *setting);
+guint32 nm_setting_ppp_get_lcp_echo_interval (NMSettingPpp *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_PPP_H__ */
diff --git a/libnm-core/nm-setting-pppoe.c b/libnm-core/nm-setting-pppoe.c
new file mode 100644
index 000000000..ac6764d06
--- /dev/null
+++ b/libnm-core/nm-setting-pppoe.c
@@ -0,0 +1,322 @@
+/* -*- 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 2007 - 2013 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <glib/gi18n-lib.h>
+
+#include "nm-setting-pppoe.h"
+#include "nm-setting-ppp.h"
+#include "nm-setting-private.h"
+#include "nm-core-enum-types.h"
+
+/**
+ * SECTION:nm-setting-pppoe
+ * @short_description: Describes PPPoE connection properties
+ *
+ * The #NMSettingPppoe object is a #NMSetting subclass that describes
+ * properties necessary for connection to networks that require PPPoE connections
+ * to provide IP transport, for example cable or DSL modems.
+ **/
+
+G_DEFINE_TYPE_WITH_CODE (NMSettingPppoe, nm_setting_pppoe, NM_TYPE_SETTING,
+ _nm_register_setting (PPPOE, 3))
+NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_PPPOE)
+
+#define NM_SETTING_PPPOE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_PPPOE, NMSettingPppoePrivate))
+
+typedef struct {
+ char *service;
+ char *username;
+ char *password;
+ NMSettingSecretFlags password_flags;
+} NMSettingPppoePrivate;
+
+enum {
+ PROP_0,
+ PROP_SERVICE,
+ PROP_USERNAME,
+ PROP_PASSWORD,
+ PROP_PASSWORD_FLAGS,
+
+ LAST_PROP
+};
+
+/**
+ * nm_setting_pppoe_new:
+ *
+ * Creates a new #NMSettingPppoe object with default values.
+ *
+ * Returns: (transfer full): the new empty #NMSettingPppoe object
+ **/
+NMSetting *
+nm_setting_pppoe_new (void)
+{
+ return (NMSetting *) g_object_new (NM_TYPE_SETTING_PPPOE, NULL);
+}
+
+/**
+ * nm_setting_pppoe_get_service:
+ * @setting: the #NMSettingPppoe
+ *
+ * Returns: the #NMSettingPppoe:service property of the setting
+ **/
+const char *
+nm_setting_pppoe_get_service (NMSettingPppoe *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_PPPOE (setting), NULL);
+
+ return NM_SETTING_PPPOE_GET_PRIVATE (setting)->service;
+}
+
+/**
+ * nm_setting_pppoe_get_username:
+ * @setting: the #NMSettingPppoe
+ *
+ * Returns: the #NMSettingPppoe:username property of the setting
+ **/
+const char *
+nm_setting_pppoe_get_username (NMSettingPppoe *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_PPPOE (setting), NULL);
+
+ return NM_SETTING_PPPOE_GET_PRIVATE (setting)->username;
+}
+
+/**
+ * nm_setting_pppoe_get_password:
+ * @setting: the #NMSettingPppoe
+ *
+ * Returns: the #NMSettingPppoe:password property of the setting
+ **/
+const char *
+nm_setting_pppoe_get_password (NMSettingPppoe *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_PPPOE (setting), NULL);
+
+ return NM_SETTING_PPPOE_GET_PRIVATE (setting)->password;
+}
+
+/**
+ * nm_setting_pppoe_get_password_flags:
+ * @setting: the #NMSettingPppoe
+ *
+ * Returns: the #NMSettingSecretFlags pertaining to the #NMSettingPppoe:password
+ **/
+NMSettingSecretFlags
+nm_setting_pppoe_get_password_flags (NMSettingPppoe *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_PPPOE (setting), NM_SETTING_SECRET_FLAG_NONE);
+
+ return NM_SETTING_PPPOE_GET_PRIVATE (setting)->password_flags;
+}
+
+static gboolean
+verify (NMSetting *setting, NMConnection *connection, GError **error)
+{
+ NMSettingPppoePrivate *priv = NM_SETTING_PPPOE_GET_PRIVATE (setting);
+
+ if (!priv->username) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("property is empty"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_PPPOE_SETTING_NAME, NM_SETTING_PPPOE_SERVICE);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static GPtrArray *
+need_secrets (NMSetting *setting)
+{
+ NMSettingPppoePrivate *priv = NM_SETTING_PPPOE_GET_PRIVATE (setting);
+ GPtrArray *secrets = NULL;
+
+ if (priv->password)
+ return NULL;
+
+ if (!(priv->password_flags & NM_SETTING_SECRET_FLAG_NOT_REQUIRED)) {
+ secrets = g_ptr_array_sized_new (1);
+ g_ptr_array_add (secrets, NM_SETTING_PPPOE_PASSWORD);
+ }
+
+ return secrets;
+}
+
+static void
+nm_setting_pppoe_init (NMSettingPppoe *setting)
+{
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ NMSettingPppoePrivate *priv = NM_SETTING_PPPOE_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_SERVICE:
+ g_free (priv->service);
+ priv->service = g_value_dup_string (value);
+ break;
+ case PROP_USERNAME:
+ g_free (priv->username);
+ priv->username = g_value_dup_string (value);
+ break;
+ case PROP_PASSWORD:
+ g_free (priv->password);
+ priv->password = g_value_dup_string (value);
+ break;
+ case PROP_PASSWORD_FLAGS:
+ priv->password_flags = g_value_get_flags (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)
+{
+ NMSettingPppoe *setting = NM_SETTING_PPPOE (object);
+
+ switch (prop_id) {
+ case PROP_SERVICE:
+ g_value_set_string (value, nm_setting_pppoe_get_service (setting));
+ break;
+ case PROP_USERNAME:
+ g_value_set_string (value, nm_setting_pppoe_get_username (setting));
+ break;
+ case PROP_PASSWORD:
+ g_value_set_string (value, nm_setting_pppoe_get_password (setting));
+ break;
+ case PROP_PASSWORD_FLAGS:
+ g_value_set_flags (value, nm_setting_pppoe_get_password_flags (setting));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+finalize (GObject *object)
+{
+ NMSettingPppoePrivate *priv = NM_SETTING_PPPOE_GET_PRIVATE (object);
+
+ g_free (priv->username);
+ g_free (priv->password);
+ g_free (priv->service);
+
+ G_OBJECT_CLASS (nm_setting_pppoe_parent_class)->finalize (object);
+}
+
+static void
+nm_setting_pppoe_class_init (NMSettingPppoeClass *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 (NMSettingPppoePrivate));
+
+ /* virtual methods */
+ object_class->set_property = set_property;
+ object_class->get_property = get_property;
+ object_class->finalize = finalize;
+ parent_class->verify = verify;
+ parent_class->need_secrets = need_secrets;
+
+ /* Properties */
+ /**
+ * NMSettingPppoe:service:
+ *
+ * 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.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_SERVICE,
+ g_param_spec_string (NM_SETTING_PPPOE_SERVICE, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingPppoe:username:
+ *
+ * Username used to authenticate with the PPPoE service.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_USERNAME,
+ g_param_spec_string (NM_SETTING_PPPOE_USERNAME, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingPppoe:password:
+ *
+ * Password used to authenticate with the PPPoE service.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_PASSWORD,
+ g_param_spec_string (NM_SETTING_PPPOE_PASSWORD, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_SECRET |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingPppoe:password-flags:
+ *
+ * Flags indicating how to handle the #NMSettingPppoe:password property.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_PASSWORD_FLAGS,
+ g_param_spec_flags (NM_SETTING_PPPOE_PASSWORD_FLAGS, "", "",
+ NM_TYPE_SETTING_SECRET_FLAGS,
+ NM_SETTING_SECRET_FLAG_NONE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/libnm-core/nm-setting-pppoe.h b/libnm-core/nm-setting-pppoe.h
new file mode 100644
index 000000000..b1e0d92fe
--- /dev/null
+++ b/libnm-core/nm-setting-pppoe.h
@@ -0,0 +1,69 @@
+/* -*- 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 2007 - 2011 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ */
+
+#ifndef __NM_SETTING_PPPOE_H__
+#define __NM_SETTING_PPPOE_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-setting.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_PPPOE (nm_setting_pppoe_get_type ())
+#define NM_SETTING_PPPOE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SETTING_PPPOE, NMSettingPppoe))
+#define NM_SETTING_PPPOE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SETTING_PPPOE, NMSettingPppoeClass))
+#define NM_IS_SETTING_PPPOE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SETTING_PPPOE))
+#define NM_IS_SETTING_PPPOE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_SETTING_PPPOE))
+#define NM_SETTING_PPPOE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SETTING_PPPOE, NMSettingPppoeClass))
+
+#define NM_SETTING_PPPOE_SETTING_NAME "pppoe"
+
+#define NM_SETTING_PPPOE_SERVICE "service"
+#define NM_SETTING_PPPOE_USERNAME "username"
+#define NM_SETTING_PPPOE_PASSWORD "password"
+#define NM_SETTING_PPPOE_PASSWORD_FLAGS "password-flags"
+
+struct _NMSettingPppoe {
+ NMSetting parent;
+};
+
+typedef struct {
+ NMSettingClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMSettingPppoeClass;
+
+GType nm_setting_pppoe_get_type (void);
+
+NMSetting *nm_setting_pppoe_new (void);
+const char *nm_setting_pppoe_get_service (NMSettingPppoe *setting);
+const char *nm_setting_pppoe_get_username (NMSettingPppoe *setting);
+const char *nm_setting_pppoe_get_password (NMSettingPppoe *setting);
+NMSettingSecretFlags nm_setting_pppoe_get_password_flags (NMSettingPppoe *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_PPPOE_H__ */
diff --git a/libnm-core/nm-setting-private.h b/libnm-core/nm-setting-private.h
new file mode 100644
index 000000000..2d34d509a
--- /dev/null
+++ b/libnm-core/nm-setting-private.h
@@ -0,0 +1,158 @@
+/* -*- 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 2011 Red Hat, Inc.
+ */
+
+#ifndef __NM_SETTING_PRIVATE_H__
+#define __NM_SETTING_PRIVATE_H__
+
+#include "nm-setting.h"
+#include "nm-connection.h"
+#include "nm-core-enum-types.h"
+#include "nm-glib-compat.h"
+
+#include "nm-core-internal.h"
+
+/**
+ * NMSettingVerifyResult:
+ * @NM_SETTING_VERIFY_SUCCESS: the setting verifies successfully
+ * @NM_SETTING_VERIFY_ERROR: the setting has a serious misconfiguration
+ * @NM_SETTING_VERIFY_NORMALIZABLE: the setting is valid but has properties
+ * that should be normalized
+ * @NM_SETTING_VERIFY_NORMALIZABLE_ERROR: the setting is invalid but the
+ * errors can be fixed by nm_connection_normalize().
+ */
+typedef enum {
+ NM_SETTING_VERIFY_SUCCESS = TRUE,
+ NM_SETTING_VERIFY_ERROR = FALSE,
+ NM_SETTING_VERIFY_NORMALIZABLE = 2,
+ NM_SETTING_VERIFY_NORMALIZABLE_ERROR = 3,
+} NMSettingVerifyResult;
+
+void _nm_register_setting (const char *name,
+ const GType type,
+ const guint32 priority);
+
+#define _nm_register_setting(name, priority) \
+ G_STMT_START { \
+ _nm_register_setting (NM_SETTING_ ## name ## _SETTING_NAME "", g_define_type_id, priority); \
+ } G_STMT_END
+
+gboolean _nm_setting_is_base_type (NMSetting *setting);
+gboolean _nm_setting_type_is_base_type (GType type);
+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,
+ GVariant *secrets,
+ GError **error);
+gboolean _nm_setting_clear_secrets (NMSetting *setting);
+gboolean _nm_setting_clear_secrets_with_flags (NMSetting *setting,
+ NMSettingClearSecretsWithFlagsFn func,
+ gpointer user_data);
+
+
+/* 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))
+
+/* This is a legacy property, which clients should not send to the daemon. */
+#define NM_SETTING_PARAM_LEGACY (1 << (5 + 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); }
+
+GVariant *_nm_setting_get_deprecated_virtual_interface_name (NMSetting *setting,
+ NMConnection *connection,
+ const char *property);
+
+NMSettingVerifyResult _nm_setting_verify (NMSetting *setting,
+ NMConnection *connection,
+ GError **error);
+
+gboolean _nm_setting_slave_type_is_valid (const char *slave_type, const char **out_port_type);
+
+GVariant *_nm_setting_to_dbus (NMSetting *setting,
+ NMConnection *connection,
+ NMConnectionSerializationFlags flags);
+
+NMSetting *_nm_setting_new_from_dbus (GType setting_type,
+ GVariant *setting_dict,
+ GVariant *connection_dict,
+ GError **error);
+
+typedef GVariant * (*NMSettingPropertyGetFunc) (NMSetting *setting,
+ const char *property);
+typedef GVariant * (*NMSettingPropertySynthFunc) (NMSetting *setting,
+ NMConnection *connection,
+ const char *property);
+typedef void (*NMSettingPropertySetFunc) (NMSetting *setting,
+ GVariant *connection_dict,
+ const char *property,
+ GVariant *value);
+typedef void (*NMSettingPropertyNotSetFunc) (NMSetting *setting,
+ GVariant *connection_dict,
+ const char *property);
+
+void _nm_setting_class_add_dbus_only_property (NMSettingClass *setting_class,
+ const char *property_name,
+ const GVariantType *dbus_type,
+ NMSettingPropertySynthFunc synth_func,
+ NMSettingPropertySetFunc set_func);
+
+void _nm_setting_class_override_property (NMSettingClass *setting_class,
+ const char *property_name,
+ const GVariantType *dbus_type,
+ NMSettingPropertyGetFunc get_func,
+ NMSettingPropertySetFunc set_func,
+ NMSettingPropertyNotSetFunc not_set_func);
+
+typedef GVariant * (*NMSettingPropertyTransformToFunc) (const GValue *from);
+typedef void (*NMSettingPropertyTransformFromFunc) (GVariant *from, GValue *to);
+
+void _nm_setting_class_transform_property (NMSettingClass *setting_class,
+ const char *property_name,
+ const GVariantType *dbus_type,
+ NMSettingPropertyTransformToFunc to_dbus,
+ NMSettingPropertyTransformFromFunc from_dbus);
+
+gboolean _nm_setting_use_legacy_property (NMSetting *setting,
+ GVariant *connection_dict,
+ const char *legacy_property,
+ const char *new_property);
+
+GPtrArray *_nm_setting_need_secrets (NMSetting *setting);
+
+#endif /* NM_SETTING_PRIVATE_H */
diff --git a/libnm-core/nm-setting-serial.c b/libnm-core/nm-setting-serial.c
new file mode 100644
index 000000000..3fd780c83
--- /dev/null
+++ b/libnm-core/nm-setting-serial.c
@@ -0,0 +1,351 @@
+/* -*- 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 2007 - 2011 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "nm-setting-serial.h"
+#include "nm-glib-compat.h"
+#include "nm-setting-private.h"
+
+/**
+ * SECTION:nm-setting-serial
+ * @short_description: Describes connection properties for devices that use
+ * serial communications
+ *
+ * The #NMSettingSerial object is a #NMSetting subclass that describes
+ * properties necessary for connections that may use serial communications,
+ * such as mobile broadband or analog telephone connections.
+ **/
+
+G_DEFINE_TYPE_WITH_CODE (NMSettingSerial, nm_setting_serial, NM_TYPE_SETTING,
+ _nm_register_setting (SERIAL, 2))
+NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_SERIAL)
+
+#define NM_SETTING_SERIAL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_SERIAL, NMSettingSerialPrivate))
+
+typedef struct {
+ guint baud;
+ guint bits;
+ char parity;
+ guint stopbits;
+ guint64 send_delay;
+} NMSettingSerialPrivate;
+
+
+enum {
+ PROP_0,
+ PROP_BAUD,
+ PROP_BITS,
+ PROP_PARITY,
+ PROP_STOPBITS,
+ PROP_SEND_DELAY,
+
+ LAST_PROP
+};
+
+/**
+ * nm_setting_serial_new:
+ *
+ * Creates a new #NMSettingSerial object with default values.
+ *
+ * Returns: (transfer full): the new empty #NMSettingSerial object
+ **/
+NMSetting *
+nm_setting_serial_new (void)
+{
+ return (NMSetting *) g_object_new (NM_TYPE_SETTING_SERIAL, NULL);
+}
+
+/**
+ * nm_setting_serial_get_baud:
+ * @setting: the #NMSettingSerial
+ *
+ * Returns: the #NMSettingSerial:baud property of the setting
+ **/
+guint
+nm_setting_serial_get_baud (NMSettingSerial *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_SERIAL (setting), 0);
+
+ return NM_SETTING_SERIAL_GET_PRIVATE (setting)->baud;
+}
+
+/**
+ * nm_setting_serial_get_bits:
+ * @setting: the #NMSettingSerial
+ *
+ * Returns: the #NMSettingSerial:bits property of the setting
+ **/
+guint
+nm_setting_serial_get_bits (NMSettingSerial *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_SERIAL (setting), 0);
+
+ return NM_SETTING_SERIAL_GET_PRIVATE (setting)->bits;
+}
+
+/**
+ * nm_setting_serial_get_parity:
+ * @setting: the #NMSettingSerial
+ *
+ * Returns: the #NMSettingSerial:parity property of the setting
+ **/
+NMSettingSerialParity
+nm_setting_serial_get_parity (NMSettingSerial *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_SERIAL (setting), 0);
+
+ return NM_SETTING_SERIAL_GET_PRIVATE (setting)->parity;
+}
+
+/**
+ * nm_setting_serial_get_stopbits:
+ * @setting: the #NMSettingSerial
+ *
+ * Returns: the #NMSettingSerial:stopbits property of the setting
+ **/
+guint
+nm_setting_serial_get_stopbits (NMSettingSerial *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_SERIAL (setting), 0);
+
+ return NM_SETTING_SERIAL_GET_PRIVATE (setting)->stopbits;
+}
+
+/**
+ * nm_setting_serial_get_send_delay:
+ * @setting: the #NMSettingSerial
+ *
+ * Returns: the #NMSettingSerial:send-delay property of the setting
+ **/
+guint64
+nm_setting_serial_get_send_delay (NMSettingSerial *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_SERIAL (setting), 0);
+
+ return NM_SETTING_SERIAL_GET_PRIVATE (setting)->send_delay;
+}
+
+static gboolean
+verify (NMSetting *setting, NMConnection *connection, GError **error)
+{
+ return TRUE;
+}
+
+static void
+nm_setting_serial_init (NMSettingSerial *setting)
+{
+}
+
+static GVariant *
+parity_to_dbus (const GValue *from)
+{
+ switch (g_value_get_enum (from)) {
+ case NM_SETTING_SERIAL_PARITY_EVEN:
+ return g_variant_new_byte ('E');
+ case NM_SETTING_SERIAL_PARITY_ODD:
+ return g_variant_new_byte ('o');
+ case NM_SETTING_SERIAL_PARITY_NONE:
+ default:
+ return g_variant_new_byte ('n');
+ }
+}
+
+static void
+parity_from_dbus (GVariant *from, GValue *to)
+{
+ switch (g_variant_get_byte (from)) {
+ case 'E':
+ g_value_set_enum (to, NM_SETTING_SERIAL_PARITY_EVEN);
+ break;
+ case 'o':
+ g_value_set_enum (to, NM_SETTING_SERIAL_PARITY_ODD);
+ break;
+ case 'n':
+ default:
+ g_value_set_enum (to, NM_SETTING_SERIAL_PARITY_NONE);
+ break;
+ }
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ NMSettingSerialPrivate *priv = NM_SETTING_SERIAL_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_BAUD:
+ priv->baud = g_value_get_uint (value);
+ break;
+ case PROP_BITS:
+ priv->bits = g_value_get_uint (value);
+ break;
+ case PROP_PARITY:
+ priv->parity = g_value_get_enum (value);
+ break;
+ case PROP_STOPBITS:
+ priv->stopbits = g_value_get_uint (value);
+ break;
+ case PROP_SEND_DELAY:
+ priv->send_delay = g_value_get_uint64 (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)
+{
+ NMSettingSerial *setting = NM_SETTING_SERIAL (object);
+
+ switch (prop_id) {
+ case PROP_BAUD:
+ g_value_set_uint (value, nm_setting_serial_get_baud (setting));
+ break;
+ case PROP_BITS:
+ g_value_set_uint (value, nm_setting_serial_get_bits (setting));
+ break;
+ case PROP_PARITY:
+ g_value_set_enum (value, nm_setting_serial_get_parity (setting));
+ break;
+ case PROP_STOPBITS:
+ g_value_set_uint (value, nm_setting_serial_get_stopbits (setting));
+ break;
+ case PROP_SEND_DELAY:
+ g_value_set_uint64 (value, nm_setting_serial_get_send_delay (setting));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_setting_serial_class_init (NMSettingSerialClass *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 (NMSettingSerialPrivate));
+
+ /* virtual methods */
+ object_class->set_property = set_property;
+ object_class->get_property = get_property;
+ parent_class->verify = verify;
+
+ /* Properties */
+
+ /**
+ * 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
+ * ignore speed settings and use the highest available speed.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_BAUD,
+ g_param_spec_uint (NM_SETTING_SERIAL_BAUD, "", "",
+ 0, G_MAXUINT, 57600,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingSerial:bits:
+ *
+ * Byte-width of the serial communication. The 8 in "8n1" for example.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_BITS,
+ g_param_spec_uint (NM_SETTING_SERIAL_BITS, "", "",
+ 5, 8, 8,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingSerial:parity:
+ *
+ * Parity setting of the serial port.
+ **/
+ /* ---keyfile---
+ * property: parity
+ * format: 'e', 'o', or 'n'
+ * description: The connection parity; even, odd, or none. Note that older
+ * versions of NetworkManager stored this as an integer: 69 ('E') for even,
+ * 111 ('o') for odd, or 110 ('n') for none.
+ * example: parity=n
+ * ---end---
+ * ---dbus---
+ * property: parity
+ * format: byte
+ * description: The connection parity: 69 (ASCII 'E') for even parity,
+ * 111 (ASCII 'o') for odd, 110 (ASCII 'n') for none.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PARITY,
+ g_param_spec_enum (NM_SETTING_SERIAL_PARITY, "", "",
+ NM_TYPE_SETTING_SERIAL_PARITY,
+ NM_SETTING_SERIAL_PARITY_NONE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+ _nm_setting_class_transform_property (parent_class,
+ NM_SETTING_SERIAL_PARITY,
+ G_VARIANT_TYPE_BYTE,
+ parity_to_dbus,
+ parity_from_dbus);
+
+ /**
+ * NMSettingSerial:stopbits:
+ *
+ * Number of stop bits for communication on the serial port. Either 1 or 2.
+ * The 1 in "8n1" for example.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_STOPBITS,
+ g_param_spec_uint (NM_SETTING_SERIAL_STOPBITS, "", "",
+ 1, 2, 1,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingSerial:send-delay:
+ *
+ * Time to delay between each byte sent to the modem, in microseconds.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_SEND_DELAY,
+ g_param_spec_uint64 (NM_SETTING_SERIAL_SEND_DELAY, "", "",
+ 0, G_MAXUINT64, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/libnm-core/nm-setting-serial.h b/libnm-core/nm-setting-serial.h
new file mode 100644
index 000000000..582892277
--- /dev/null
+++ b/libnm-core/nm-setting-serial.h
@@ -0,0 +1,85 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+
+/*
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ * Copyright 2007 - 2008 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ */
+
+#ifndef __NM_SETTING_SERIAL_H__
+#define __NM_SETTING_SERIAL_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-setting.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_SERIAL (nm_setting_serial_get_type ())
+#define NM_SETTING_SERIAL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SETTING_SERIAL, NMSettingSerial))
+#define NM_SETTING_SERIAL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SETTING_SERIAL, NMSettingSerialClass))
+#define NM_IS_SETTING_SERIAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SETTING_SERIAL))
+#define NM_IS_SETTING_SERIAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_SETTING_SERIAL))
+#define NM_SETTING_SERIAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SETTING_SERIAL, NMSettingSerialClass))
+
+#define NM_SETTING_SERIAL_SETTING_NAME "serial"
+
+/**
+ * NMSettingSerialParity:
+ * @NM_SETTING_SERIAL_PARITY_NONE: No parity bits (default)
+ * @NM_SETTING_SERIAL_PARITY_EVEN: Even parity
+ * @NM_SETTING_SERIAL_PARITY_ODD: Odd parity
+ *
+ * The parity setting of a serial port.
+ */
+typedef enum {
+ NM_SETTING_SERIAL_PARITY_NONE = 0,
+ NM_SETTING_SERIAL_PARITY_EVEN,
+ NM_SETTING_SERIAL_PARITY_ODD
+} NMSettingSerialParity;
+
+#define NM_SETTING_SERIAL_BAUD "baud"
+#define NM_SETTING_SERIAL_BITS "bits"
+#define NM_SETTING_SERIAL_PARITY "parity"
+#define NM_SETTING_SERIAL_STOPBITS "stopbits"
+#define NM_SETTING_SERIAL_SEND_DELAY "send-delay"
+
+struct _NMSettingSerial {
+ NMSetting parent;
+};
+
+typedef struct {
+ NMSettingClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMSettingSerialClass;
+
+GType nm_setting_serial_get_type (void);
+
+NMSetting *nm_setting_serial_new (void);
+guint nm_setting_serial_get_baud (NMSettingSerial *setting);
+guint nm_setting_serial_get_bits (NMSettingSerial *setting);
+NMSettingSerialParity nm_setting_serial_get_parity (NMSettingSerial *setting);
+guint nm_setting_serial_get_stopbits (NMSettingSerial *setting);
+guint64 nm_setting_serial_get_send_delay (NMSettingSerial *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_SERIAL_H__ */
diff --git a/libnm-core/nm-setting-team-port.c b/libnm-core/nm-setting-team-port.c
new file mode 100644
index 000000000..b5125753c
--- /dev/null
+++ b/libnm-core/nm-setting-team-port.c
@@ -0,0 +1,192 @@
+/* -*- 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 Jiri Pirko <jiri@resnulli.us>
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <ctype.h>
+#include <stdlib.h>
+#include <glib/gi18n-lib.h>
+
+#include "nm-setting-team-port.h"
+#include "nm-utils.h"
+#include "nm-utils-private.h"
+#include "nm-connection-private.h"
+#include "nm-setting-connection.h"
+#include "nm-setting-team.h"
+
+/**
+ * SECTION:nm-setting-team-port
+ * @short_description: Describes connection properties for team ports
+ *
+ * The #NMSettingTeamPort object is a #NMSetting subclass that describes
+ * optional properties that apply to team ports.
+ **/
+
+G_DEFINE_TYPE_WITH_CODE (NMSettingTeamPort, nm_setting_team_port, NM_TYPE_SETTING,
+ _nm_register_setting (TEAM_PORT, 3))
+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
+ **/
+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
+ **/
+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, NMConnection *connection, GError **error)
+{
+ if (connection) {
+ NMSettingConnection *s_con;
+ const char *slave_type;
+
+ s_con = nm_connection_get_setting_connection (connection);
+ if (!s_con) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_MISSING_SETTING,
+ _("missing setting"));
+ g_prefix_error (error, "%s: ", NM_SETTING_CONNECTION_SETTING_NAME);
+ return FALSE;
+ }
+
+ slave_type = nm_setting_connection_get_slave_type (s_con);
+ if ( slave_type
+ && strcmp (slave_type, NM_SETTING_TEAM_SETTING_NAME)) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("A connection with a '%s' setting must have the slave-type set to '%s'. Instead it is '%s'"),
+ NM_SETTING_TEAM_PORT_SETTING_NAME,
+ NM_SETTING_TEAM_SETTING_NAME,
+ slave_type);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_SLAVE_TYPE);
+ return FALSE;
+ }
+ }
+ 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: config
+ * variable: TEAM_PORT_CONFIG
+ * description: Team port configuration in JSON. See man teamd.conf for details.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_CONFIG,
+ g_param_spec_string (NM_SETTING_TEAM_PORT_CONFIG, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/libnm-core/nm-setting-team-port.h b/libnm-core/nm-setting-team-port.h
new file mode 100644
index 000000000..86efb97c4
--- /dev/null
+++ b/libnm-core/nm-setting-team-port.h
@@ -0,0 +1,62 @@
+/* -*- 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 Jiri Pirko <jiri@resnulli.us>
+ */
+
+#ifndef __NM_SETTING_TEAM_PORT_H__
+#define __NM_SETTING_TEAM_PORT_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#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"
+
+#define NM_SETTING_TEAM_PORT_CONFIG "config"
+
+struct _NMSettingTeamPort {
+ NMSetting parent;
+};
+
+typedef struct {
+ NMSettingClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMSettingTeamPortClass;
+
+GType nm_setting_team_port_get_type (void);
+
+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-core/nm-setting-team.c b/libnm-core/nm-setting-team.c
new file mode 100644
index 000000000..04b98243f
--- /dev/null
+++ b/libnm-core/nm-setting-team.c
@@ -0,0 +1,186 @@
+/* -*- 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 Jiri Pirko <jiri@resnulli.us>
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <stdlib.h>
+#include <glib/gi18n-lib.h>
+
+#include "nm-setting-team.h"
+#include "nm-utils.h"
+#include "nm-utils-private.h"
+#include "nm-connection-private.h"
+
+/**
+ * SECTION:nm-setting-team
+ * @short_description: Describes connection properties for teams
+ *
+ * The #NMSettingTeam object is a #NMSetting subclass that describes properties
+ * necessary for team connections.
+ **/
+
+G_DEFINE_TYPE_WITH_CODE (NMSettingTeam, nm_setting_team, NM_TYPE_SETTING,
+ _nm_register_setting (TEAM, 1))
+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 *config;
+} NMSettingTeamPrivate;
+
+enum {
+ PROP_0,
+ PROP_CONFIG,
+ LAST_PROP
+};
+
+/**
+ * nm_setting_team_new:
+ *
+ * Creates a new #NMSettingTeam object with default values.
+ *
+ * Returns: (transfer full): the new empty #NMSettingTeam object
+ **/
+NMSetting *
+nm_setting_team_new (void)
+{
+ return (NMSetting *) g_object_new (NM_TYPE_SETTING_TEAM, NULL);
+}
+
+/**
+ * nm_setting_team_get_config:
+ * @setting: the #NMSettingTeam
+ *
+ * Returns: the #NMSettingTeam:config property of the setting
+ **/
+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, NMConnection *connection, GError **error)
+{
+ return _nm_connection_verify_required_interface_name (connection, error);
+}
+
+static void
+nm_setting_team_init (NMSettingTeam *setting)
+{
+}
+
+static void
+finalize (GObject *object)
+{
+ NMSettingTeamPrivate *priv = NM_SETTING_TEAM_GET_PRIVATE (object);
+
+ 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_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_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;
+
+ /* Properties */
+ /**
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: config
+ * variable: TEAM_CONFIG
+ * description: Team configuration in JSON. See man teamd.conf for details.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_CONFIG,
+ g_param_spec_string (NM_SETTING_TEAM_CONFIG, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /* ---dbus---
+ * property: interface-name
+ * format: string
+ * description: Deprecated in favor of connection.interface-name, but can
+ * be used for backward-compatibility with older daemons, to set the
+ * team's interface name.
+ * ---end---
+ */
+ _nm_setting_class_add_dbus_only_property (parent_class, "interface-name",
+ G_VARIANT_TYPE_STRING,
+ _nm_setting_get_deprecated_virtual_interface_name,
+ NULL);
+}
diff --git a/libnm-core/nm-setting-team.h b/libnm-core/nm-setting-team.h
new file mode 100644
index 000000000..d66eb6858
--- /dev/null
+++ b/libnm-core/nm-setting-team.h
@@ -0,0 +1,62 @@
+/* -*- 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 Jiri Pirko <jiri@resnulli.us>
+ */
+
+#ifndef __NM_SETTING_TEAM_H__
+#define __NM_SETTING_TEAM_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#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"
+
+#define NM_SETTING_TEAM_CONFIG "config"
+
+struct _NMSettingTeam {
+ NMSetting parent;
+};
+
+typedef struct {
+ NMSettingClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMSettingTeamClass;
+
+GType nm_setting_team_get_type (void);
+
+NMSetting * nm_setting_team_new (void);
+
+const char * nm_setting_team_get_config (NMSettingTeam *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_TEAM_H__ */
diff --git a/libnm-core/nm-setting-vlan.c b/libnm-core/nm-setting-vlan.c
new file mode 100644
index 000000000..f622ddcbf
--- /dev/null
+++ b/libnm-core/nm-setting-vlan.c
@@ -0,0 +1,822 @@
+/* -*- 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 2011 - 2014 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <glib/gi18n-lib.h>
+
+#include "nm-setting-vlan.h"
+#include "nm-utils.h"
+#include "nm-setting-connection.h"
+#include "nm-setting-private.h"
+#include "nm-setting-wired.h"
+#include "nm-connection-private.h"
+
+/**
+ * SECTION:nm-setting-vlan
+ * @short_description: Describes connection properties for VLAN interfaces
+ *
+ * The #NMSettingVlan object is a #NMSetting subclass that describes properties
+ * necessary for connection to VLAN interfaces.
+ **/
+
+G_DEFINE_TYPE_WITH_CODE (NMSettingVlan, nm_setting_vlan, NM_TYPE_SETTING,
+ _nm_register_setting (VLAN, 1))
+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 *parent;
+ guint32 id;
+ guint32 flags;
+ GSList *ingress_priority_map;
+ GSList *egress_priority_map;
+} NMSettingVlanPrivate;
+
+enum {
+ PROP_0,
+ PROP_PARENT,
+ PROP_ID,
+ PROP_FLAGS,
+ PROP_INGRESS_PRIORITY_MAP,
+ PROP_EGRESS_PRIORITY_MAP,
+ LAST_PROP
+};
+
+#define MAX_SKB_PRIO G_MAXUINT32
+#define MAX_8021P_PRIO 7 /* Max 802.1p priority */
+
+typedef struct {
+ guint32 from;
+ guint32 to;
+} PriorityMap;
+
+/**
+ * nm_setting_vlan_new:
+ *
+ * Creates a new #NMSettingVlan object with default values.
+ *
+ * Returns: (transfer full): the new empty #NMSettingVlan object
+ **/
+NMSetting *
+nm_setting_vlan_new (void)
+{
+ return (NMSetting *) g_object_new (NM_TYPE_SETTING_VLAN, NULL);
+}
+
+/**
+ * nm_setting_vlan_get_parent:
+ * @setting: the #NMSettingVlan
+ *
+ * Returns: the #NMSettingVlan:parent property of the setting
+ **/
+const char *
+nm_setting_vlan_get_parent (NMSettingVlan *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_VLAN (setting), NULL);
+ return NM_SETTING_VLAN_GET_PRIVATE (setting)->parent;
+}
+
+/**
+ * nm_setting_vlan_get_id:
+ * @setting: the #NMSettingVlan
+ *
+ * Returns: the #NMSettingVlan:id property of the setting
+ **/
+guint32
+nm_setting_vlan_get_id (NMSettingVlan *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_VLAN (setting), 0);
+ return NM_SETTING_VLAN_GET_PRIVATE (setting)->id;
+}
+
+/**
+ * nm_setting_vlan_get_flags:
+ * @setting: the #NMSettingVlan
+ *
+ * Returns: the #NMSettingVlan:flags property of the setting
+ **/
+guint32
+nm_setting_vlan_get_flags (NMSettingVlan *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_VLAN (setting), 0);
+ return NM_SETTING_VLAN_GET_PRIVATE (setting)->flags;
+}
+
+static guint32
+get_max_prio (NMVlanPriorityMap map, gboolean from)
+{
+ if (map == NM_VLAN_INGRESS_MAP)
+ return from ? MAX_8021P_PRIO : MAX_SKB_PRIO;
+ else if (map == NM_VLAN_EGRESS_MAP)
+ return from ? MAX_SKB_PRIO : MAX_8021P_PRIO;
+ g_assert_not_reached ();
+}
+
+static PriorityMap *
+priority_map_new_from_str (NMVlanPriorityMap map, const char *str)
+{
+ PriorityMap *p = NULL;
+ gchar **t = NULL;
+ guint32 len;
+ guint64 from, to;
+
+ g_return_val_if_fail (str && str[0], NULL);
+
+ t = g_strsplit (str, ":", 0);
+ len = g_strv_length (t);
+ if (len == 2) {
+ from = g_ascii_strtoull (t[0], NULL, 10);
+ to = g_ascii_strtoull (t[1], NULL, 10);
+
+ if ((from <= get_max_prio (map, TRUE)) && (to <= get_max_prio (map, FALSE))) {
+ p = g_malloc0 (sizeof (PriorityMap));
+ p->from = from;
+ p->to = to;
+ }
+ } else {
+ /* Warn */
+ g_warn_if_fail (len == 2);
+ }
+
+ g_strfreev (t);
+ return p;
+}
+
+static void
+priority_map_free (PriorityMap *map)
+{
+ g_return_if_fail (map != NULL);
+ g_free (map);
+}
+
+static GSList *
+get_map (NMSettingVlan *self, NMVlanPriorityMap map)
+{
+ if (map == NM_VLAN_INGRESS_MAP)
+ return NM_SETTING_VLAN_GET_PRIVATE (self)->ingress_priority_map;
+ else if (map == NM_VLAN_EGRESS_MAP)
+ return NM_SETTING_VLAN_GET_PRIVATE (self)->egress_priority_map;
+ g_assert_not_reached ();
+ return NULL;
+}
+
+static void
+set_map (NMSettingVlan *self, NMVlanPriorityMap map, GSList *list)
+{
+ if (map == NM_VLAN_INGRESS_MAP) {
+ NM_SETTING_VLAN_GET_PRIVATE (self)->ingress_priority_map = list;
+ 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;
+ g_object_notify (G_OBJECT (self), NM_SETTING_VLAN_EGRESS_PRIORITY_MAP);
+ } else
+ g_assert_not_reached ();
+}
+
+/**
+ * nm_setting_vlan_add_priority_str:
+ * @setting: the #NMSettingVlan
+ * @map: the type of priority map
+ * @str: the string which contains a priority map, like "3:7"
+ *
+ * Adds a priority map entry into either the #NMSettingVlan:ingress_priority_map
+ * or the #NMSettingVlan:egress_priority_map properties. The priority map maps
+ * the Linux SKB priorities to 802.1p priorities.
+ *
+ * Returns: %TRUE if the entry was successfully added to the list, or it
+ * overwrote the old value, %FALSE if error
+ */
+gboolean
+nm_setting_vlan_add_priority_str (NMSettingVlan *setting,
+ NMVlanPriorityMap map,
+ const char *str)
+{
+ GSList *list = NULL, *iter = NULL;
+ PriorityMap *item = NULL;
+
+ 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);
+ g_return_val_if_fail (str && str[0], FALSE);
+
+ list = get_map (setting, map);
+
+ item = priority_map_new_from_str (map, str);
+ if (!item)
+ g_return_val_if_reached (FALSE);
+
+ /* Duplicates get replaced */
+ for (iter = list; iter; iter = g_slist_next (iter)) {
+ PriorityMap *p = iter->data;
+
+ 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;
+ }
+ }
+
+ set_map (setting, map, g_slist_append (list, item));
+ return TRUE;
+}
+
+/**
+ * nm_setting_vlan_get_num_priorities:
+ * @setting: the #NMSettingVlan
+ * @map: the type of priority map
+ *
+ * Returns the number of entires in the
+ * #NMSettingVlan:ingress_priority_map or #NMSettingVlan:egress_priority_map
+ * properties of this setting.
+ *
+ * Returns: return the number of ingress/egress priority entries, -1 if error
+ **/
+gint32
+nm_setting_vlan_get_num_priorities (NMSettingVlan *setting, NMVlanPriorityMap map)
+{
+ g_return_val_if_fail (NM_IS_SETTING_VLAN (setting), -1);
+ g_return_val_if_fail (map == NM_VLAN_INGRESS_MAP || map == NM_VLAN_EGRESS_MAP, -1);
+
+ return g_slist_length (get_map (setting, map));
+}
+
+/**
+ * nm_setting_vlan_get_priority:
+ * @setting: the #NMSettingVlan
+ * @map: the type of priority map
+ * @idx: the zero-based index of the ingress/egress priority map entry
+ * @out_from: (out): on return the value of the priority map's 'from' item
+ * @out_to: (out): on return the value of priority map's 'to' item
+ *
+ * Retrieve one of the entries of the #NMSettingVlan:ingress_priority_map
+ * or #NMSettingVlan:egress_priority_map properties of this setting.
+ *
+ * Returns: %TRUE if a priority map was returned, %FALSE if error
+ **/
+gboolean
+nm_setting_vlan_get_priority (NMSettingVlan *setting,
+ NMVlanPriorityMap map,
+ guint32 idx,
+ guint32 *out_from,
+ guint32 *out_to)
+{
+ GSList *list = NULL;
+ PriorityMap *item = NULL;
+
+ 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);
+ g_return_val_if_fail (out_from != NULL, FALSE);
+ g_return_val_if_fail (out_to != NULL, FALSE);
+
+ list = get_map (setting, map);
+ g_return_val_if_fail (idx < g_slist_length (list), FALSE);
+
+ item = g_slist_nth_data (list, idx);
+ g_assert (item);
+ *out_from = item->from;
+ *out_to = item->to;
+ return TRUE;
+}
+
+/**
+ * nm_setting_vlan_add_priority:
+ * @setting: the #NMSettingVlan
+ * @map: the type of priority map
+ * @from: the priority to map to @to
+ * @to: the priority to map @from to
+ *
+ * Adds a priority mapping to the #NMSettingVlan:ingress_priority_map or
+ * #NMSettingVlan:egress_priority_map properties of the setting. If @from is
+ * already in the given priority map, this function will overwrite the
+ * existing entry with the new @to.
+ *
+ * If @map is #NM_VLAN_INGRESS_MAP then @from is the incoming 802.1q VLAN
+ * Priority Code Point (PCP) value, and @to is the Linux SKB priority value.
+ *
+ * If @map is #NM_VLAN_EGRESS_MAP then @from is the Linux SKB priority value and
+ * @to is the outgoing 802.1q VLAN Priority Code Point (PCP) value.
+ *
+ * Returns: %TRUE if the new priority mapping was successfully added to the
+ * list, %FALSE if error
+ */
+gboolean
+nm_setting_vlan_add_priority (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;
+ 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;
+ }
+ }
+
+ item = g_malloc0 (sizeof (PriorityMap));
+ item->from = from;
+ item->to = to;
+ set_map (setting, map, g_slist_append (list, item));
+
+ return TRUE;
+}
+
+/**
+ * nm_setting_vlan_remove_priority:
+ * @setting: the #NMSettingVlan
+ * @map: the type of priority map
+ * @idx: the zero-based index of the priority map to remove
+ *
+ * Removes the priority map at index @idx from the
+ * #NMSettingVlan:ingress_priority_map or #NMSettingVlan:egress_priority_map
+ * properties.
+ */
+void
+nm_setting_vlan_remove_priority (NMSettingVlan *setting,
+ NMVlanPriorityMap map,
+ guint32 idx)
+{
+ GSList *list = NULL, *item = NULL;
+
+ g_return_if_fail (NM_IS_SETTING_VLAN (setting));
+ g_return_if_fail (map == NM_VLAN_INGRESS_MAP || map == NM_VLAN_EGRESS_MAP);
+
+ list = get_map (setting, map);
+ g_return_if_fail (idx < g_slist_length (list));
+
+ item = g_slist_nth (list, idx);
+ priority_map_free ((PriorityMap *) (item->data));
+ set_map (setting, map, g_slist_delete_link (list, item));
+}
+
+/**
+ * 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.
+ */
+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.
+ */
+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
+ *
+ * Clear all the entires from #NMSettingVlan:ingress_priority_map or
+ * #NMSettingVlan:egress_priority_map properties.
+ */
+void
+nm_setting_vlan_clear_priorities (NMSettingVlan *setting, NMVlanPriorityMap map)
+{
+ GSList *list = NULL;
+
+ g_return_if_fail (NM_IS_SETTING_VLAN (setting));
+ g_return_if_fail (map == NM_VLAN_INGRESS_MAP || map == NM_VLAN_EGRESS_MAP);
+
+ list = get_map (setting, map);
+ g_slist_free_full (list, g_free);
+ set_map (setting, map, NULL);
+}
+
+/*********************************************************************/
+
+static void
+nm_setting_vlan_init (NMSettingVlan *setting)
+{
+}
+
+static gboolean
+verify (NMSetting *setting, NMConnection *connection, GError **error)
+{
+ NMSettingVlanPrivate *priv = NM_SETTING_VLAN_GET_PRIVATE (setting);
+ NMSettingConnection *s_con;
+ NMSettingWired *s_wired;
+
+ if (connection) {
+ s_con = nm_connection_get_setting_connection (connection);
+ s_wired = nm_connection_get_setting_wired (connection);
+ } else {
+ s_con = NULL;
+ s_wired = NULL;
+ }
+
+ if (priv->parent) {
+ if (nm_utils_is_uuid (priv->parent)) {
+ /* If we have an NMSettingConnection:master with slave-type="vlan",
+ * then it must be the same UUID.
+ */
+ if (s_con) {
+ const char *master = NULL, *slave_type = NULL;
+
+ slave_type = nm_setting_connection_get_slave_type (s_con);
+ if (!g_strcmp0 (slave_type, NM_SETTING_VLAN_SETTING_NAME))
+ master = nm_setting_connection_get_master (s_con);
+
+ if (master && g_strcmp0 (priv->parent, master) != 0) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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;
+ }
+ }
+ } else if (!nm_utils_iface_valid_name (priv->parent)) {
+ /* parent must be either a UUID or an interface name */
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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 {
+ /* If parent is NULL, the parent must be specified via
+ * NMSettingWired:mac-address.
+ */
+ if ( connection
+ && (!s_wired || !nm_setting_wired_get_mac_address (s_wired))) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_MISSING_PROPERTY,
+ _("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;
+ }
+ }
+
+ if (priv->flags & ~(NM_VLAN_FLAG_REORDER_HEADERS |
+ NM_VLAN_FLAG_GVRP |
+ NM_VLAN_FLAG_LOOSE_BINDING)) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("flags are invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_VLAN_SETTING_NAME, NM_SETTING_VLAN_FLAGS);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static GSList *
+priority_strv_to_maplist (NMVlanPriorityMap map, char **strv)
+{
+ GSList *list = NULL;
+ int i;
+
+ for (i = 0; strv[i]; i++) {
+ PriorityMap *item;
+
+ item = priority_map_new_from_str (map, strv[i]);
+ if (item)
+ list = g_slist_prepend (list, item);
+ }
+ return g_slist_reverse (list);
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ NMSettingVlan *setting = NM_SETTING_VLAN (object);
+ NMSettingVlanPrivate *priv = NM_SETTING_VLAN_GET_PRIVATE (setting);
+
+ switch (prop_id) {
+ case PROP_PARENT:
+ g_free (priv->parent);
+ priv->parent = g_value_dup_string (value);
+ break;
+ case PROP_ID:
+ priv->id = g_value_get_uint (value);
+ break;
+ case PROP_FLAGS:
+ priv->flags = g_value_get_flags (value);
+ break;
+ case PROP_INGRESS_PRIORITY_MAP:
+ g_slist_free_full (priv->ingress_priority_map, g_free);
+ priv->ingress_priority_map =
+ priority_strv_to_maplist (NM_VLAN_INGRESS_MAP, g_value_get_boxed (value));
+ break;
+ case PROP_EGRESS_PRIORITY_MAP:
+ g_slist_free_full (priv->egress_priority_map, g_free);
+ priv->egress_priority_map =
+ priority_strv_to_maplist (NM_VLAN_EGRESS_MAP, g_value_get_boxed (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static char **
+priority_maplist_to_strv (GSList *list)
+{
+ GSList *iter;
+ GPtrArray *strv;
+
+ strv = g_ptr_array_new ();
+
+ for (iter = list; iter; iter = g_slist_next (iter)) {
+ PriorityMap *item = iter->data;
+
+ g_ptr_array_add (strv, g_strdup_printf ("%d:%d", item->from, item->to));
+ }
+ g_ptr_array_add (strv, NULL);
+
+ return (char **) g_ptr_array_free (strv, FALSE);
+}
+
+static void
+get_property (GObject *object, guint prop_id,
+ GValue *value, GParamSpec *pspec)
+{
+ NMSettingVlan *setting = NM_SETTING_VLAN (object);
+ NMSettingVlanPrivate *priv = NM_SETTING_VLAN_GET_PRIVATE (setting);
+
+ switch (prop_id) {
+ case PROP_PARENT:
+ g_value_set_string (value, priv->parent);
+ break;
+ case PROP_ID:
+ g_value_set_uint (value, priv->id);
+ break;
+ case PROP_FLAGS:
+ g_value_set_flags (value, priv->flags);
+ break;
+ case PROP_INGRESS_PRIORITY_MAP:
+ g_value_take_boxed (value, priority_maplist_to_strv (priv->ingress_priority_map));
+ break;
+ case PROP_EGRESS_PRIORITY_MAP:
+ g_value_take_boxed (value, priority_maplist_to_strv (priv->egress_priority_map));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+finalize (GObject *object)
+{
+ NMSettingVlan *setting = NM_SETTING_VLAN (object);
+ NMSettingVlanPrivate *priv = NM_SETTING_VLAN_GET_PRIVATE (setting);
+
+ g_free (priv->parent);
+ 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);
+}
+
+static void
+nm_setting_vlan_class_init (NMSettingVlanClass *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 (NMSettingVlanPrivate));
+
+ /* virtual methods */
+ object_class->set_property = set_property;
+ object_class->get_property = get_property;
+ object_class->finalize = finalize;
+ parent_class->verify = verify;
+
+ /* Properties */
+
+ /**
+ * 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 an #NMSettingWired setting
+ * with a #NMSettingWired:mac-address property.
+ **/
+ /* ---ifcfg-rh---
+ * property: parent
+ * variable: DEVICE or PHYSDEV
+ * description: Parent interface of the VLAN.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PARENT,
+ g_param_spec_string (NM_SETTING_VLAN_PARENT, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingVlan:id:
+ *
+ * The VLAN identifier that the interface created by this connection should
+ * be assigned.
+ **/
+ /* ---ifcfg-rh---
+ * property: id
+ * variable: VLAN_ID or DEVICE
+ * description: VLAN identifier.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_ID,
+ g_param_spec_uint (NM_SETTING_VLAN_ID, "", "",
+ 0, 4095, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingVlan:flags:
+ *
+ * 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).
+ **/
+ /* ---ifcfg-rh---
+ * property: flags
+ * variable: VLAN_FLAGS, REORDER_HDR
+ * values: "GVRP", "LOOSE_BINDING" for VLAN_FLAGS; 0 or 1 for REORDER_HDR
+ * description: Parent interface of the VLAN.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_FLAGS,
+ g_param_spec_flags (NM_SETTING_VLAN_FLAGS, "", "",
+ NM_TYPE_VLAN_FLAGS,
+ 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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".
+ **/
+ /* ---ifcfg-rh---
+ * property: ingress-property-map
+ * variable: VLAN_INGRESS_PRIORITY_MAP
+ * description: Ingress priority mapping.
+ * example: VLAN_INGRESS_PRIORITY_MAP=4:2,3:5
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_INGRESS_PRIORITY_MAP,
+ g_param_spec_boxed (NM_SETTING_VLAN_INGRESS_PRIORITY_MAP, "", "",
+ G_TYPE_STRV,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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".
+ **/
+ /* ---ifcfg-rh---
+ * property: egress-property-map
+ * variable: VLAN_EGRESS_PRIORITY_MAP
+ * description: Egress priority mapping.
+ * example: VLAN_EGRESS_PRIORITY_MAP=5:4,4:1,3:7
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_EGRESS_PRIORITY_MAP,
+ g_param_spec_boxed (NM_SETTING_VLAN_EGRESS_PRIORITY_MAP, "", "",
+ G_TYPE_STRV,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /* ---ifcfg-rh---
+ * property: interface-name
+ * variable: PHYSDEV and VLAN_ID, or DEVICE
+ * description: VLAN interface name.
+ * If all variables are set, parent device from PHYSDEV takes precedence over DEVICE,
+ * but VLAN id from DEVICE takes precedence over VLAN_ID.
+ * example: PHYSDEV=eth0, VLAN_ID=12; or DEVICE=eth0.12
+ * ---end---
+ * ---dbus---
+ * property: interface-name
+ * format: string
+ * description: Deprecated in favor of connection.interface-name, but can
+ * be used for backward-compatibility with older daemons, to set the
+ * vlan's interface name.
+ * ---end---
+ */
+ _nm_setting_class_add_dbus_only_property (parent_class, "interface-name",
+ G_VARIANT_TYPE_STRING,
+ _nm_setting_get_deprecated_virtual_interface_name,
+ NULL);
+}
diff --git a/libnm-core/nm-setting-vlan.h b/libnm-core/nm-setting-vlan.h
new file mode 100644
index 000000000..30305d327
--- /dev/null
+++ b/libnm-core/nm-setting-vlan.h
@@ -0,0 +1,134 @@
+/* -*- 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 2011 - 2014 Red Hat, Inc.
+ */
+
+#ifndef __NM_SETTING_VLAN_H__
+#define __NM_SETTING_VLAN_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include "nm-setting.h"
+#include <linux/if_vlan.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_VLAN (nm_setting_vlan_get_type ())
+#define NM_SETTING_VLAN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SETTING_VLAN, NMSettingVlan))
+#define NM_SETTING_VLAN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SETTING_VLANCONFIG, NMSettingVlanClass))
+#define NM_IS_SETTING_VLAN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SETTING_VLAN))
+#define NM_IS_SETTING_VLAN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_SETTING_VLAN))
+#define NM_SETTING_VLAN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SETTING_VLAN, NMSettingVlanClass))
+
+#define NM_SETTING_VLAN_SETTING_NAME "vlan"
+
+#define NM_SETTING_VLAN_PARENT "parent"
+#define NM_SETTING_VLAN_ID "id"
+#define NM_SETTING_VLAN_FLAGS "flags"
+#define NM_SETTING_VLAN_INGRESS_PRIORITY_MAP "ingress-priority-map"
+#define NM_SETTING_VLAN_EGRESS_PRIORITY_MAP "egress-priority-map"
+
+struct _NMSettingVlan {
+ NMSetting parent;
+};
+
+typedef struct {
+ NMSettingClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMSettingVlanClass;
+
+/**
+ * NMVlanPriorityMap:
+ * @NM_VLAN_INGRESS_MAP: map for incoming data
+ * @NM_VLAN_EGRESS_MAP: map for outgoing data
+ *
+ * A selector for traffic priority maps; these map Linux SKB priorities
+ * to 802.1p priorities used in VLANs.
+ **/
+typedef enum {
+ NM_VLAN_INGRESS_MAP,
+ NM_VLAN_EGRESS_MAP
+} NMVlanPriorityMap;
+
+/**
+ * NMVlanFlags:
+ * @NM_VLAN_FLAG_REORDER_HEADERS: indicates that this interface should reorder
+ * 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
+ * state is tied to the underlying network interface but other details
+ * (like routing) are not.
+ *
+ * #NMVlanFlags values control the behavior of the VLAN interface.
+ **/
+typedef enum { /*< flags >*/
+ 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;
+
+GType nm_setting_vlan_get_type (void);
+NMSetting *nm_setting_vlan_new (void);
+
+const char *nm_setting_vlan_get_parent (NMSettingVlan *setting);
+guint32 nm_setting_vlan_get_id (NMSettingVlan *setting);
+guint32 nm_setting_vlan_get_flags (NMSettingVlan *setting);
+
+gint32 nm_setting_vlan_get_num_priorities (NMSettingVlan *setting, NMVlanPriorityMap map);
+
+gboolean nm_setting_vlan_get_priority (NMSettingVlan *setting,
+ NMVlanPriorityMap map,
+ guint32 idx,
+ guint32 *out_from,
+ guint32 *out_to);
+
+gboolean nm_setting_vlan_add_priority (NMSettingVlan *setting,
+ NMVlanPriorityMap map,
+ guint32 from,
+ guint32 to);
+
+void nm_setting_vlan_remove_priority (NMSettingVlan *setting,
+ NMVlanPriorityMap map,
+ guint32 idx);
+
+gboolean nm_setting_vlan_remove_priority_by_value (NMSettingVlan *setting,
+ NMVlanPriorityMap map,
+ guint32 from,
+ guint32 to);
+
+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,
+ NMVlanPriorityMap map,
+ const char *str);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_VLAN_H__ */
diff --git a/libnm-core/nm-setting-vpn.c b/libnm-core/nm-setting-vpn.c
new file mode 100644
index 000000000..e6fffa879
--- /dev/null
+++ b/libnm-core/nm-setting-vpn.c
@@ -0,0 +1,913 @@
+/* -*- 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 2007 - 2013 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <glib/gi18n-lib.h>
+
+#include "nm-setting-vpn.h"
+#include "nm-utils.h"
+#include "nm-utils-private.h"
+#include "nm-setting-private.h"
+
+/**
+ * SECTION:nm-setting-vpn
+ * @short_description: Describes connection properties for Virtual Private Networks
+ *
+ * The #NMSettingVpn object is a #NMSetting 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.
+ **/
+
+G_DEFINE_TYPE_WITH_CODE (NMSettingVpn, nm_setting_vpn, NM_TYPE_SETTING,
+ _nm_register_setting (VPN, 1))
+NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_VPN)
+
+#define NM_SETTING_VPN_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_VPN, NMSettingVpnPrivate))
+
+typedef struct {
+ char *service_type;
+
+ /* username of the user requesting this connection, thus
+ * it's really only valid for user connections, and it also
+ * should never be saved out to persistent config.
+ */
+ char *user_name;
+
+ /* Whether the VPN stays up across link changes, until the user
+ * explicitly disconnects it.
+ */
+ gboolean persistent;
+
+ /* The hash table is created at setting object
+ * init time and should not be replaced. It is
+ * a char * -> char * mapping, and both the key
+ * and value are owned by the hash table, and should
+ * be allocated with functions whose value can be
+ * freed with g_free(). Should not contain secrets.
+ */
+ GHashTable *data;
+
+ /* The hash table is created at setting object
+ * init time and should not be replaced. It is
+ * a char * -> char * mapping, and both the key
+ * and value are owned by the hash table, and should
+ * be allocated with functions whose value can be
+ * freed with g_free(). Should contain secrets only.
+ */
+ GHashTable *secrets;
+} NMSettingVpnPrivate;
+
+enum {
+ PROP_0,
+ PROP_SERVICE_TYPE,
+ PROP_USER_NAME,
+ PROP_PERSISTENT,
+ PROP_DATA,
+ PROP_SECRETS,
+
+ LAST_PROP
+};
+
+/**
+ * nm_setting_vpn_new:
+ *
+ * Creates a new #NMSettingVpn object with default values.
+ *
+ * Returns: (transfer full): the new empty #NMSettingVpn object
+ **/
+NMSetting *
+nm_setting_vpn_new (void)
+{
+ return (NMSetting *) g_object_new (NM_TYPE_SETTING_VPN, NULL);
+}
+
+/**
+ * nm_setting_vpn_get_service_type:
+ * @setting: the #NMSettingVpn
+ *
+ * Returns the service name of the VPN, which identifies the specific VPN
+ * plugin that should be used to connect to this VPN.
+ *
+ * Returns: the VPN plugin's service name
+ **/
+const char *
+nm_setting_vpn_get_service_type (NMSettingVpn *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_VPN (setting), NULL);
+
+ return NM_SETTING_VPN_GET_PRIVATE (setting)->service_type;
+}
+
+/**
+ * nm_setting_vpn_get_user_name:
+ * @setting: the #NMSettingVpn
+ *
+ * Returns: the #NMSettingVpn:user-name property of the setting
+ **/
+const char *
+nm_setting_vpn_get_user_name (NMSettingVpn *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_VPN (setting), NULL);
+
+ return NM_SETTING_VPN_GET_PRIVATE (setting)->user_name;
+}
+
+/**
+ * nm_setting_vpn_get_persistent:
+ * @setting: the #NMSettingVpn
+ *
+ * Returns: the #NMSettingVpn:persistent property of the setting
+ **/
+gboolean
+nm_setting_vpn_get_persistent (NMSettingVpn *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_VPN (setting), FALSE);
+
+ return NM_SETTING_VPN_GET_PRIVATE (setting)->persistent;
+}
+
+/**
+ * nm_setting_vpn_get_num_data_items:
+ * @setting: the #NMSettingVpn
+ *
+ * Gets number of key/value pairs of VPN configuration data.
+ *
+ * Returns: the number of VPN plugin specific configuration data items
+ **/
+guint32
+nm_setting_vpn_get_num_data_items (NMSettingVpn *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_VPN (setting), 0);
+
+ return g_hash_table_size (NM_SETTING_VPN_GET_PRIVATE (setting)->data);
+}
+
+/**
+ * nm_setting_vpn_add_data_item:
+ * @setting: the #NMSettingVpn
+ * @key: a name that uniquely identifies the given value @item
+ * @item: the value to be referenced by @key
+ *
+ * Establishes a relationship between @key and @item internally in the
+ * setting which may be retrieved later. Should not be used to store passwords
+ * or other secrets, which is what nm_setting_vpn_add_secret() is for.
+ **/
+void
+nm_setting_vpn_add_data_item (NMSettingVpn *setting,
+ const char *key,
+ const char *item)
+{
+ g_return_if_fail (NM_IS_SETTING_VPN (setting));
+ g_return_if_fail (key != NULL);
+ g_return_if_fail (strlen (key) > 0);
+ g_return_if_fail (item != NULL);
+ g_return_if_fail (strlen (item) > 0);
+
+ 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);
+}
+
+/**
+ * nm_setting_vpn_get_data_item:
+ * @setting: the #NMSettingVpn
+ * @key: the name of the data item to retrieve
+ *
+ * Retrieves the data item of a key/value relationship previously established
+ * by nm_setting_vpn_add_data_item().
+ *
+ * Returns: the data item, if any
+ **/
+const char *
+nm_setting_vpn_get_data_item (NMSettingVpn *setting, const char *key)
+{
+ g_return_val_if_fail (NM_IS_SETTING_VPN (setting), NULL);
+
+ return (const char *) g_hash_table_lookup (NM_SETTING_VPN_GET_PRIVATE (setting)->data, key);
+}
+
+/**
+ * nm_setting_vpn_remove_data_item:
+ * @setting: the #NMSettingVpn
+ * @key: the name of the data item to remove
+ *
+ * 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.
+ **/
+gboolean
+nm_setting_vpn_remove_data_item (NMSettingVpn *setting, const char *key)
+{
+ gboolean found;
+
+ 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
+foreach_item_helper (GHashTable *hash,
+ NMVpnIterFunc func,
+ gpointer user_data)
+{
+ GList *keys, *liter;
+ GSList *copied = NULL, *siter;
+
+ g_return_if_fail (hash != NULL);
+
+ /* Grab keys and copy them so that the callback func can modify
+ * the hash table items if it wants to.
+ */
+ keys = g_hash_table_get_keys (hash);
+ for (liter = keys; liter; liter = g_list_next (liter))
+ copied = g_slist_prepend (copied, g_strdup (liter->data));
+ copied = g_slist_reverse (copied);
+ g_list_free (keys);
+
+ for (siter = copied; siter; siter = g_slist_next (siter)) {
+ gpointer value;
+
+ value = g_hash_table_lookup (hash, siter->data);
+ func (siter->data, value, user_data);
+ }
+
+ g_slist_free_full (copied, g_free);
+}
+
+/**
+ * nm_setting_vpn_foreach_data_item:
+ * @setting: a #NMSettingVpn
+ * @func: (scope call): an user provided function
+ * @user_data: data to be passed to @func
+ *
+ * Iterates all data items stored in this setting. It is safe to add, remove,
+ * and modify data items inside @func, though any additions or removals made
+ * during iteration will not be part of the iteration.
+ */
+void
+nm_setting_vpn_foreach_data_item (NMSettingVpn *setting,
+ NMVpnIterFunc func,
+ gpointer user_data)
+{
+ g_return_if_fail (NM_IS_SETTING_VPN (setting));
+
+ foreach_item_helper (NM_SETTING_VPN_GET_PRIVATE (setting)->data, func, user_data);
+}
+
+/**
+ * nm_setting_vpn_get_num_secrets:
+ * @setting: the #NMSettingVpn
+ *
+ * Gets number of VPN plugin specific secrets in the setting.
+ *
+ * Returns: the number of VPN plugin specific secrets
+ **/
+guint32
+nm_setting_vpn_get_num_secrets (NMSettingVpn *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_VPN (setting), 0);
+
+ return g_hash_table_size (NM_SETTING_VPN_GET_PRIVATE (setting)->secrets);
+}
+
+/**
+ * nm_setting_vpn_add_secret:
+ * @setting: the #NMSettingVpn
+ * @key: a name that uniquely identifies the given secret @secret
+ * @secret: the secret to be referenced by @key
+ *
+ * Establishes a relationship between @key and @secret internally in the
+ * setting which may be retrieved later.
+ **/
+void
+nm_setting_vpn_add_secret (NMSettingVpn *setting,
+ const char *key,
+ const char *secret)
+{
+ g_return_if_fail (NM_IS_SETTING_VPN (setting));
+ g_return_if_fail (key != NULL);
+ g_return_if_fail (strlen (key) > 0);
+ g_return_if_fail (secret != NULL);
+ g_return_if_fail (strlen (secret) > 0);
+
+ 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);
+}
+
+/**
+ * nm_setting_vpn_get_secret:
+ * @setting: the #NMSettingVpn
+ * @key: the name of the secret to retrieve
+ *
+ * Retrieves the secret of a key/value relationship previously established
+ * by nm_setting_vpn_add_secret().
+ *
+ * Returns: the secret, if any
+ **/
+const char *
+nm_setting_vpn_get_secret (NMSettingVpn *setting, const char *key)
+{
+ g_return_val_if_fail (NM_IS_SETTING_VPN (setting), NULL);
+
+ return (const char *) g_hash_table_lookup (NM_SETTING_VPN_GET_PRIVATE (setting)->secrets, key);
+}
+
+/**
+ * nm_setting_vpn_remove_secret:
+ * @setting: the #NMSettingVpn
+ * @key: the name of the secret to remove
+ *
+ * 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.
+ **/
+gboolean
+nm_setting_vpn_remove_secret (NMSettingVpn *setting, const char *key)
+{
+ gboolean found;
+
+ 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;
+}
+
+/**
+ * nm_setting_vpn_foreach_secret:
+ * @setting: a #NMSettingVpn
+ * @func: (scope call): an user provided function
+ * @user_data: data to be passed to @func
+ *
+ * Iterates all secrets stored in this setting. It is safe to add, remove,
+ * and modify secrets inside @func, though any additions or removals made during
+ * iteration will not be part of the iteration.
+ */
+void
+nm_setting_vpn_foreach_secret (NMSettingVpn *setting,
+ NMVpnIterFunc func,
+ gpointer user_data)
+{
+ g_return_if_fail (NM_IS_SETTING_VPN (setting));
+
+ foreach_item_helper (NM_SETTING_VPN_GET_PRIVATE (setting)->secrets, func, user_data);
+}
+
+static gboolean
+verify (NMSetting *setting, NMConnection *connection, GError **error)
+{
+ NMSettingVpnPrivate *priv = NM_SETTING_VPN_GET_PRIVATE (setting);
+
+ if (!priv->service_type) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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 NMSettingUpdateSecretResult
+update_secret_string (NMSetting *setting,
+ const char *key,
+ const char *value,
+ GError **error)
+{
+ NMSettingVpnPrivate *priv = NM_SETTING_VPN_GET_PRIVATE (setting);
+
+ 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_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("secret was empty"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_VPN_SETTING_NAME, key);
+ 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 NM_SETTING_UPDATE_SECRET_SUCCESS_MODIFIED;
+}
+
+static NMSettingUpdateSecretResult
+update_secret_dict (NMSetting *setting,
+ GVariant *secrets,
+ GError **error)
+{
+ NMSettingVpnPrivate *priv = NM_SETTING_VPN_GET_PRIVATE (setting);
+ GVariantIter iter;
+ const char *name, *value;
+ NMSettingUpdateSecretResult result = NM_SETTING_UPDATE_SECRET_SUCCESS_UNCHANGED;
+
+ g_return_val_if_fail (secrets != NULL, NM_SETTING_UPDATE_SECRET_ERROR);
+
+ /* Make sure the items are valid */
+ g_variant_iter_init (&iter, secrets);
+ while (g_variant_iter_next (&iter, "{&s&s}", &name, &value)) {
+ if (!name || !strlen (name)) {
+ g_set_error_literal (error, NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_SETTING,
+ _("setting contained a secret with an empty name"));
+ g_prefix_error (error, "%s: ", NM_SETTING_VPN_SETTING_NAME);
+ return NM_SETTING_UPDATE_SECRET_ERROR;
+ }
+
+ if (!value || !strlen (value)) {
+ g_set_error (error, NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("secret value was empty"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_VPN_SETTING_NAME, name);
+ return NM_SETTING_UPDATE_SECRET_ERROR;
+ }
+ }
+
+ /* Now add the items to the settings' secrets list */
+ g_variant_iter_init (&iter, secrets);
+ while (g_variant_iter_next (&iter, "{&s&s}", &name, &value)) {
+ if (value == NULL) {
+ g_warn_if_fail (value != NULL);
+ continue;
+ }
+ if (strlen (value) == 0) {
+ g_warn_if_fail (strlen (value) > 0);
+ 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 result;
+}
+
+static int
+update_one_secret (NMSetting *setting, const char *key, GVariant *value, GError **error)
+{
+ NMSettingUpdateSecretResult success = NM_SETTING_UPDATE_SECRET_ERROR;
+
+ 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_variant_is_of_type (value, G_VARIANT_TYPE_STRING)) {
+ /* Passing the string properties individually isn't correct, and won't
+ * produce the correct result, but for some reason that's how it used
+ * to be done. So even though it's not correct, keep the code around
+ * for compatibility's sake.
+ */
+ success = update_secret_string (setting, key, g_variant_get_string (value, NULL), error);
+ } else if (g_variant_is_of_type (value, G_VARIANT_TYPE ("a{ss}"))) {
+ if (strcmp (key, NM_SETTING_VPN_SECRETS) != 0) {
+ g_set_error_literal (error, NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET,
+ _("not a secret property"));
+ g_prefix_error (error, "%s.%s ", NM_SETTING_VPN_SETTING_NAME, key);
+ } else
+ success = update_secret_dict (setting, value, error);
+ } else {
+ g_set_error_literal (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("secret is not of correct type"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_VPN_SETTING_NAME, key);
+ }
+
+ if (success == NM_SETTING_UPDATE_SECRET_SUCCESS_MODIFIED)
+ g_object_notify (G_OBJECT (setting), NM_SETTING_VPN_SECRETS);
+
+ return success;
+}
+
+static gboolean
+get_secret_flags (NMSetting *setting,
+ const char *secret_name,
+ gboolean verify_secret,
+ NMSettingSecretFlags *out_flags,
+ GError **error)
+{
+ NMSettingVpnPrivate *priv = NM_SETTING_VPN_GET_PRIVATE (setting);
+ gboolean success = FALSE;
+ char *flags_key;
+ gpointer val;
+ unsigned long tmp;
+ NMSettingSecretFlags flags = NM_SETTING_SECRET_FLAG_NONE;
+
+ flags_key = g_strdup_printf ("%s-flags", secret_name);
+ if (g_hash_table_lookup_extended (priv->data, flags_key, NULL, &val)) {
+ errno = 0;
+ tmp = strtoul ((const char *) val, NULL, 10);
+ if ((errno == 0) && (tmp <= NM_SETTING_SECRET_FLAGS_ALL)) {
+ flags = (NMSettingSecretFlags) tmp;
+ success = TRUE;
+ } else {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("failed to convert value '%s' to uint"),
+ (const char *) val);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_VPN_SETTING_NAME, flags_key);
+ }
+ } else {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_MISSING_PROPERTY,
+ _("secret flags property not found"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_VPN_SETTING_NAME, flags_key);
+ }
+ g_free (flags_key);
+ if (out_flags)
+ *out_flags = flags;
+ return success;
+}
+
+static gboolean
+set_secret_flags (NMSetting *setting,
+ const char *secret_name,
+ gboolean verify_secret,
+ NMSettingSecretFlags flags,
+ GError **error)
+{
+ 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;
+}
+
+static GPtrArray *
+need_secrets (NMSetting *setting)
+{
+ /* Assume that VPN connections need secrets since they almost always will */
+ return g_ptr_array_sized_new (1);
+}
+
+static gboolean
+compare_one_secret (NMSettingVpn *a,
+ NMSettingVpn *b,
+ NMSettingCompareFlags flags)
+{
+ GHashTable *a_secrets, *b_secrets;
+ GHashTableIter iter;
+ const char *key, *val;
+
+ a_secrets = NM_SETTING_VPN_GET_PRIVATE (a)->secrets;
+ b_secrets = NM_SETTING_VPN_GET_PRIVATE (b)->secrets;
+
+ g_hash_table_iter_init (&iter, a_secrets);
+ while (g_hash_table_iter_next (&iter, (gpointer) &key, (gpointer) &val)) {
+ NMSettingSecretFlags a_secret_flags = NM_SETTING_SECRET_FLAG_NONE;
+ NMSettingSecretFlags b_secret_flags = NM_SETTING_SECRET_FLAG_NONE;
+
+ nm_setting_get_secret_flags (NM_SETTING (a), key, &a_secret_flags, NULL);
+ nm_setting_get_secret_flags (NM_SETTING (b), key, &b_secret_flags, NULL);
+
+ /* If the secret flags aren't the same, the settings aren't the same */
+ if (a_secret_flags != b_secret_flags)
+ return FALSE;
+
+ if ( (flags & NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS)
+ && (a_secret_flags & NM_SETTING_SECRET_FLAG_AGENT_OWNED))
+ continue;
+
+ if ( (flags & NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS)
+ && (a_secret_flags & NM_SETTING_SECRET_FLAG_NOT_SAVED))
+ continue;
+
+ /* Now compare the values themselves */
+ if (g_strcmp0 (val, nm_setting_vpn_get_secret (b, key)) != 0)
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static gboolean
+compare_property (NMSetting *setting,
+ NMSetting *other,
+ const GParamSpec *prop_spec,
+ NMSettingCompareFlags flags)
+{
+ gboolean same;
+
+ /* We only need to treat the 'secrets' property specially */
+ if (g_strcmp0 (prop_spec->name, NM_SETTING_VPN_SECRETS) != 0)
+ return NM_SETTING_CLASS (nm_setting_vpn_parent_class)->compare_property (setting, other, prop_spec, flags);
+
+ /* Compare A to B to ensure everything in A is found in B */
+ same = compare_one_secret (NM_SETTING_VPN (setting), NM_SETTING_VPN (other), flags);
+ if (same) {
+ /* And then B to A to ensure everything in B is also found in A */
+ same = compare_one_secret (NM_SETTING_VPN (other), NM_SETTING_VPN (setting), flags);
+ }
+
+ return same;
+}
+
+static gboolean
+clear_secrets_with_flags (NMSetting *setting,
+ GParamSpec *pspec,
+ NMSettingClearSecretsWithFlagsFn func,
+ gpointer user_data)
+{
+ NMSettingVpnPrivate *priv = NM_SETTING_VPN_GET_PRIVATE (setting);
+ GHashTableIter iter;
+ const char *secret;
+ gboolean changed = TRUE;
+
+ if (priv->secrets == NULL)
+ return FALSE;
+
+ /* Iterate through secrets hash and check each entry */
+ g_hash_table_iter_init (&iter, priv->secrets);
+ while (g_hash_table_iter_next (&iter, (gpointer) &secret, NULL)) {
+ 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) {
+ g_hash_table_iter_remove (&iter);
+ changed = TRUE;
+ }
+ }
+
+ if (changed)
+ g_object_notify (G_OBJECT (setting), NM_SETTING_VPN_SECRETS);
+
+ return changed;
+}
+
+static void
+destroy_one_secret (gpointer data)
+{
+ char *secret = (char *) data;
+
+ /* Don't leave the secret lying around in memory */
+ memset (secret, 0, strlen (secret));
+ g_free (secret);
+}
+
+static void
+nm_setting_vpn_init (NMSettingVpn *setting)
+{
+ NMSettingVpnPrivate *priv = NM_SETTING_VPN_GET_PRIVATE (setting);
+
+ 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);
+}
+
+static void
+finalize (GObject *object)
+{
+ NMSettingVpnPrivate *priv = NM_SETTING_VPN_GET_PRIVATE (object);
+
+ g_free (priv->service_type);
+ g_free (priv->user_name);
+ g_hash_table_destroy (priv->data);
+ g_hash_table_destroy (priv->secrets);
+
+ G_OBJECT_CLASS (nm_setting_vpn_parent_class)->finalize (object);
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ NMSettingVpnPrivate *priv = NM_SETTING_VPN_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_SERVICE_TYPE:
+ g_free (priv->service_type);
+ priv->service_type = g_value_dup_string (value);
+ break;
+ case PROP_USER_NAME:
+ g_free (priv->user_name);
+ priv->user_name = g_value_dup_string (value);
+ break;
+ case PROP_PERSISTENT:
+ priv->persistent = g_value_get_boolean (value);
+ break;
+ case PROP_DATA:
+ g_hash_table_unref (priv->data);
+ priv->data = _nm_utils_copy_strdict (g_value_get_boxed (value));
+ break;
+ case PROP_SECRETS:
+ g_hash_table_unref (priv->secrets);
+ priv->secrets = _nm_utils_copy_strdict (g_value_get_boxed (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)
+{
+ NMSettingVpn *setting = NM_SETTING_VPN (object);
+ NMSettingVpnPrivate *priv = NM_SETTING_VPN_GET_PRIVATE (setting);
+
+ switch (prop_id) {
+ case PROP_SERVICE_TYPE:
+ g_value_set_string (value, nm_setting_vpn_get_service_type (setting));
+ break;
+ case PROP_USER_NAME:
+ g_value_set_string (value, nm_setting_vpn_get_user_name (setting));
+ break;
+ case PROP_PERSISTENT:
+ g_value_set_boolean (value, priv->persistent);
+ break;
+ case PROP_DATA:
+ g_value_take_boxed (value, _nm_utils_copy_strdict (priv->data));
+ break;
+ case PROP_SECRETS:
+ g_value_take_boxed (value, _nm_utils_copy_strdict (priv->secrets));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_setting_vpn_class_init (NMSettingVpnClass *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 (NMSettingVpnPrivate));
+
+ /* virtual methods */
+ object_class->set_property = set_property;
+ object_class->get_property = get_property;
+ object_class->finalize = finalize;
+
+ parent_class->verify = verify;
+ parent_class->update_one_secret = update_one_secret;
+ parent_class->get_secret_flags = get_secret_flags;
+ parent_class->set_secret_flags = set_secret_flags;
+ parent_class->need_secrets = need_secrets;
+ parent_class->compare_property = compare_property;
+ parent_class->clear_secrets_with_flags = clear_secrets_with_flags;
+
+ /* Properties */
+ /**
+ * 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
+ * plugin.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_SERVICE_TYPE,
+ g_param_spec_string (NM_SETTING_VPN_SERVICE_TYPE, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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
+ * leave this property empty. If this property is empty, NetworkManager
+ * will automatically supply the username of the user which requested the
+ * VPN connection.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_USER_NAME,
+ g_param_spec_string (NM_SETTING_VPN_USER_NAME, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingVpn:persistent:
+ *
+ * If the VPN service supports persistence, and this property is %TRUE,
+ * the VPN will attempt to stay connected across link changes and outages,
+ * until explicitly disconnected.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_PERSISTENT,
+ g_param_spec_boolean (NM_SETTING_VPN_PERSISTENT, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingVpn:data:
+ *
+ * Dictionary of key/value pairs of VPN plugin specific data. Both keys and
+ * values must be strings.
+ *
+ * Type: GHashTable(utf8,utf8)
+ **/
+ /* ---keyfile---
+ * property: data
+ * variable: separate variables named after keys of the dictionary
+ * description: The keys of the data dictionary are used as variable names directly
+ * under [vpn] section.
+ * example: remote=ovpn.corp.com cipher=AES-256-CBC username=joe
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_DATA,
+ g_param_spec_boxed (NM_SETTING_VPN_DATA, "", "",
+ G_TYPE_HASH_TABLE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ _nm_setting_class_transform_property (parent_class, NM_SETTING_VPN_DATA,
+ G_VARIANT_TYPE ("a{ss}"),
+ _nm_utils_strdict_to_dbus,
+ _nm_utils_strdict_from_dbus);
+
+ /**
+ * NMSettingVpn:secrets:
+ *
+ * Dictionary of key/value pairs of VPN plugin specific secrets like
+ * passwords or private keys. Both keys and values must be strings.
+ *
+ * Type: GHashTable(utf8,utf8)
+ **/
+ /* ---keyfile---
+ * property: secrets
+ * variable: separate variables named after keys of the dictionary
+ * description: The keys of the secrets dictionary are used as variable names directly
+ * under [vpn-secrets] section.
+ * example: password=Popocatepetl
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_SECRETS,
+ g_param_spec_boxed (NM_SETTING_VPN_SECRETS, "", "",
+ G_TYPE_HASH_TABLE,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_SECRET |
+ G_PARAM_STATIC_STRINGS));
+ _nm_setting_class_transform_property (parent_class, NM_SETTING_VPN_SECRETS,
+ G_VARIANT_TYPE ("a{ss}"),
+ _nm_utils_strdict_to_dbus,
+ _nm_utils_strdict_from_dbus);
+}
diff --git a/libnm-core/nm-setting-vpn.h b/libnm-core/nm-setting-vpn.h
new file mode 100644
index 000000000..487549afa
--- /dev/null
+++ b/libnm-core/nm-setting-vpn.h
@@ -0,0 +1,102 @@
+/* -*- 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 2007 - 2013 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ */
+
+#ifndef __NM_SETTING_VPN_H__
+#define __NM_SETTING_VPN_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-setting.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_VPN (nm_setting_vpn_get_type ())
+#define NM_SETTING_VPN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SETTING_VPN, NMSettingVpn))
+#define NM_SETTING_VPN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SETTING_VPN, NMSettingVpnClass))
+#define NM_IS_SETTING_VPN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SETTING_VPN))
+#define NM_IS_SETTING_VPN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_SETTING_VPN))
+#define NM_SETTING_VPN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SETTING_VPN, NMSettingVpnClass))
+
+#define NM_SETTING_VPN_SETTING_NAME "vpn"
+
+#define NM_SETTING_VPN_SERVICE_TYPE "service-type"
+#define NM_SETTING_VPN_USER_NAME "user-name"
+#define NM_SETTING_VPN_PERSISTENT "persistent"
+#define NM_SETTING_VPN_DATA "data"
+#define NM_SETTING_VPN_SECRETS "secrets"
+
+struct _NMSettingVpn {
+ NMSetting parent;
+};
+
+typedef struct {
+ NMSettingClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMSettingVpnClass;
+
+/**
+ * NMVpnIterFunc:
+ * @key: the name of the data or secret item
+ * @value: the value of the data or secret item
+ * @user_data: User data passed to nm_setting_vpn_foreach_data_item() or
+ * nm_setting_vpn_foreach_secret()
+ **/
+typedef void (*NMVpnIterFunc) (const char *key, const char *value, gpointer user_data);
+
+GType nm_setting_vpn_get_type (void);
+
+NMSetting *nm_setting_vpn_new (void);
+const char *nm_setting_vpn_get_service_type (NMSettingVpn *setting);
+const char *nm_setting_vpn_get_user_name (NMSettingVpn *setting);
+gboolean nm_setting_vpn_get_persistent (NMSettingVpn *setting);
+
+guint32 nm_setting_vpn_get_num_data_items (NMSettingVpn *setting);
+void nm_setting_vpn_add_data_item (NMSettingVpn *setting,
+ const char *key,
+ const char *item);
+const char * nm_setting_vpn_get_data_item (NMSettingVpn *setting,
+ const char *key);
+gboolean nm_setting_vpn_remove_data_item (NMSettingVpn *setting,
+ const char *key);
+void nm_setting_vpn_foreach_data_item (NMSettingVpn *setting,
+ NMVpnIterFunc func,
+ gpointer user_data);
+
+guint32 nm_setting_vpn_get_num_secrets (NMSettingVpn *setting);
+void nm_setting_vpn_add_secret (NMSettingVpn *setting,
+ const char *key,
+ const char *secret);
+const char * nm_setting_vpn_get_secret (NMSettingVpn *setting,
+ const char *key);
+gboolean nm_setting_vpn_remove_secret (NMSettingVpn *setting,
+ const char *key);
+void nm_setting_vpn_foreach_secret (NMSettingVpn *setting,
+ NMVpnIterFunc func,
+ gpointer user_data);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_VPN_H__ */
diff --git a/libnm-core/nm-setting-wimax.c b/libnm-core/nm-setting-wimax.c
new file mode 100644
index 000000000..541c0bbfe
--- /dev/null
+++ b/libnm-core/nm-setting-wimax.c
@@ -0,0 +1,245 @@
+/* -*- 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 2011 - 2013 Red Hat, Inc.
+ * Copyright 2009 Novell, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <net/ethernet.h>
+#include <glib/gi18n-lib.h>
+
+#include "nm-setting-wimax.h"
+#include "nm-setting-private.h"
+#include "nm-utils.h"
+#include "nm-utils-private.h"
+
+/**
+ * SECTION:nm-setting-wimax
+ * @short_description: Describes 802.16e Mobile WiMAX connection properties
+ *
+ * The #NMSettingWimax object is a #NMSetting subclass that describes properties
+ * necessary for connection to 802.16e Mobile WiMAX networks.
+ **/
+
+G_DEFINE_TYPE_WITH_CODE (NMSettingWimax, nm_setting_wimax, NM_TYPE_SETTING,
+ _nm_register_setting (WIMAX, 1))
+NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_WIMAX)
+
+#define NM_SETTING_WIMAX_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_WIMAX, NMSettingWimaxPrivate))
+
+typedef struct {
+ char *network_name;
+ char *mac_address;
+} NMSettingWimaxPrivate;
+
+enum {
+ PROP_0,
+ PROP_NETWORK_NAME,
+ PROP_MAC_ADDRESS,
+
+ LAST_PROP
+};
+
+/**
+ * nm_setting_wimax_new:
+ *
+ * Creates a new #NMSettingWimax object with default values.
+ *
+ * Returns: the new empty #NMSettingWimax object
+ **/
+NMSetting *
+nm_setting_wimax_new (void)
+{
+ return (NMSetting *) g_object_new (NM_TYPE_SETTING_WIMAX, NULL);
+}
+
+/**
+ * nm_setting_wimax_get_network_name:
+ * @setting: the #NMSettingWimax
+ *
+ * Returns the WiMAX NSP name (ex "Sprint" or "CLEAR") which identifies the
+ * specific WiMAX network this setting describes a connection to.
+ *
+ * Returns: the WiMAX NSP name
+ **/
+const char *
+nm_setting_wimax_get_network_name (NMSettingWimax *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIMAX (setting), NULL);
+
+ return NM_SETTING_WIMAX_GET_PRIVATE (setting)->network_name;
+}
+
+/**
+ * nm_setting_wimax_get_mac_address:
+ * @setting: the #NMSettingWimax
+ *
+ * Returns the MAC address of a WiMAX device which this connection is locked
+ * to.
+ *
+ * Returns: the MAC address
+ **/
+const char *
+nm_setting_wimax_get_mac_address (NMSettingWimax *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIMAX (setting), NULL);
+
+ return NM_SETTING_WIMAX_GET_PRIVATE (setting)->mac_address;
+}
+
+static gboolean
+verify (NMSetting *setting, NMConnection *connection, GError **error)
+{
+ NMSettingWimaxPrivate *priv = NM_SETTING_WIMAX_GET_PRIVATE (setting);
+
+ if (!priv->network_name) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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 && !nm_utils_hwaddr_valid (priv->mac_address, ETH_ALEN)) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("property is invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIMAX_SETTING_NAME, NM_SETTING_WIMAX_MAC_ADDRESS);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static void
+nm_setting_wimax_init (NMSettingWimax *setting)
+{
+}
+
+static void
+finalize (GObject *object)
+{
+ NMSettingWimaxPrivate *priv = NM_SETTING_WIMAX_GET_PRIVATE (object);
+
+ g_free (priv->network_name);
+ g_free (priv->mac_address);
+
+ G_OBJECT_CLASS (nm_setting_wimax_parent_class)->finalize (object);
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ NMSettingWimaxPrivate *priv = NM_SETTING_WIMAX_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_NETWORK_NAME:
+ g_free (priv->network_name);
+ priv->network_name = g_value_dup_string (value);
+ break;
+ case PROP_MAC_ADDRESS:
+ g_free (priv->mac_address);
+ priv->mac_address = _nm_utils_hwaddr_canonical_or_invalid (g_value_get_string (value),
+ ETH_ALEN);
+ 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)
+{
+ NMSettingWimax *setting = NM_SETTING_WIMAX (object);
+
+ switch (prop_id) {
+ case PROP_NETWORK_NAME:
+ g_value_set_string (value, nm_setting_wimax_get_network_name (setting));
+ break;
+ case PROP_MAC_ADDRESS:
+ g_value_set_string (value, nm_setting_wimax_get_mac_address (setting));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_setting_wimax_class_init (NMSettingWimaxClass *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 (NMSettingWimaxPrivate));
+
+ /* virtual methods */
+ object_class->set_property = set_property;
+ object_class->get_property = get_property;
+ object_class->finalize = finalize;
+ parent_class->verify = verify;
+
+ /* Properties */
+ /**
+ * NMSettingWimax:network-name:
+ *
+ * Network Service Provider (NSP) name of the WiMAX network this connection
+ * should use.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_NETWORK_NAME,
+ g_param_spec_string (NM_SETTING_WIMAX_NETWORK_NAME, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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).
+ **/
+ g_object_class_install_property
+ (object_class, PROP_MAC_ADDRESS,
+ g_param_spec_string (NM_SETTING_WIMAX_MAC_ADDRESS, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ _nm_setting_class_transform_property (parent_class, NM_SETTING_WIMAX_MAC_ADDRESS,
+ G_VARIANT_TYPE_BYTESTRING,
+ _nm_utils_hwaddr_to_dbus,
+ _nm_utils_hwaddr_from_dbus);
+}
diff --git a/libnm-core/nm-setting-wimax.h b/libnm-core/nm-setting-wimax.h
new file mode 100644
index 000000000..0a5850466
--- /dev/null
+++ b/libnm-core/nm-setting-wimax.h
@@ -0,0 +1,64 @@
+/* -*- 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 2009 Novell, Inc.
+ */
+
+#ifndef __NM_SETTING_WIMAX_H__
+#define __NM_SETTING_WIMAX_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-setting.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_WIMAX (nm_setting_wimax_get_type ())
+#define NM_SETTING_WIMAX(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SETTING_WIMAX, NMSettingWimax))
+#define NM_SETTING_WIMAX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SETTING_WIMAX, NMSettingWimaxClass))
+#define NM_IS_SETTING_WIMAX(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SETTING_WIMAX))
+#define NM_IS_SETTING_WIMAX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_SETTING_WIMAX))
+#define NM_SETTING_WIMAX_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SETTING_WIMAX, NMSettingWimaxClass))
+
+#define NM_SETTING_WIMAX_SETTING_NAME "wimax"
+
+#define NM_SETTING_WIMAX_NETWORK_NAME "network-name"
+#define NM_SETTING_WIMAX_MAC_ADDRESS "mac-address"
+
+struct _NMSettingWimax {
+ NMSetting parent;
+};
+
+typedef struct {
+ NMSettingClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMSettingWimaxClass;
+
+GType nm_setting_wimax_get_type (void);
+
+NMSetting *nm_setting_wimax_new (void);
+const char *nm_setting_wimax_get_network_name (NMSettingWimax *setting);
+const char *nm_setting_wimax_get_mac_address (NMSettingWimax *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_WIMAX_H__ */
diff --git a/libnm-core/nm-setting-wired.c b/libnm-core/nm-setting-wired.c
new file mode 100644
index 000000000..ac143e45d
--- /dev/null
+++ b/libnm-core/nm-setting-wired.c
@@ -0,0 +1,1103 @@
+/* -*- 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 2007 - 2014 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <net/ethernet.h>
+#include <glib/gi18n-lib.h>
+
+#include "nm-setting-wired.h"
+#include "nm-utils.h"
+#include "nm-utils-private.h"
+#include "nm-setting-private.h"
+
+/**
+ * SECTION:nm-setting-wired
+ * @short_description: Describes connection properties for Ethernet-based networks
+ *
+ * The #NMSettingWired object is a #NMSetting subclass that describes properties
+ * necessary for connection to Ethernet networks.
+ **/
+
+G_DEFINE_TYPE_WITH_CODE (NMSettingWired, nm_setting_wired, NM_TYPE_SETTING,
+ _nm_register_setting (WIRED, 1))
+NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_WIRED)
+
+#define NM_SETTING_WIRED_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_WIRED, NMSettingWiredPrivate))
+
+typedef struct {
+ char *port;
+ guint32 speed;
+ char *duplex;
+ gboolean auto_negotiate;
+ char *device_mac_address;
+ char *cloned_mac_address;
+ GArray *mac_address_blacklist;
+ guint32 mtu;
+ char **s390_subchannels;
+ char *s390_nettype;
+ GHashTable *s390_options;
+} NMSettingWiredPrivate;
+
+enum {
+ PROP_0,
+ PROP_PORT,
+ PROP_SPEED,
+ PROP_DUPLEX,
+ PROP_AUTO_NEGOTIATE,
+ PROP_MAC_ADDRESS,
+ PROP_CLONED_MAC_ADDRESS,
+ PROP_MAC_ADDRESS_BLACKLIST,
+ PROP_MTU,
+ PROP_S390_SUBCHANNELS,
+ PROP_S390_NETTYPE,
+ PROP_S390_OPTIONS,
+
+ LAST_PROP
+};
+
+static const char *valid_s390_opts[] = {
+ "portno", "layer2", "portname", "protocol", "priority_queueing",
+ "buffer_count", "isolation", "total", "inter", "inter_jumbo", "route4",
+ "route6", "fake_broadcast", "broadcast_mode", "canonical_macaddr",
+ "checksumming", "sniffer", "large_send", "ipato_enable", "ipato_invert4",
+ "ipato_add4", "ipato_invert6", "ipato_add6", "vipa_add4", "vipa_add6",
+ "rxip_add4", "rxip_add6", "lancmd_timeout", "ctcprot",
+ NULL
+};
+
+/**
+ * nm_setting_wired_new:
+ *
+ * Creates a new #NMSettingWired object with default values.
+ *
+ * Returns: (transfer full): the new empty #NMSettingWired object
+ **/
+NMSetting *
+nm_setting_wired_new (void)
+{
+ return (NMSetting *) g_object_new (NM_TYPE_SETTING_WIRED, NULL);
+}
+
+/**
+ * nm_setting_wired_get_port:
+ * @setting: the #NMSettingWired
+ *
+ * Returns: the #NMSettingWired:port property of the setting
+ **/
+const char *
+nm_setting_wired_get_port (NMSettingWired *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), NULL);
+
+ return NM_SETTING_WIRED_GET_PRIVATE (setting)->port;
+}
+
+/**
+ * nm_setting_wired_get_speed:
+ * @setting: the #NMSettingWired
+ *
+ * Returns: the #NMSettingWired:speed property of the setting
+ **/
+guint32
+nm_setting_wired_get_speed (NMSettingWired *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), 0);
+
+ return NM_SETTING_WIRED_GET_PRIVATE (setting)->speed;
+}
+
+/**
+ * nm_setting_wired_get_duplex:
+ * @setting: the #NMSettingWired
+ *
+ * Returns: the #NMSettingWired:duplex property of the setting
+ **/
+const char *
+nm_setting_wired_get_duplex (NMSettingWired *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), NULL);
+
+ return NM_SETTING_WIRED_GET_PRIVATE (setting)->duplex;
+}
+
+/**
+ * nm_setting_wired_get_auto_negotiate:
+ * @setting: the #NMSettingWired
+ *
+ * Returns: the #NMSettingWired:auto-negotiate property of the setting
+ **/
+gboolean
+nm_setting_wired_get_auto_negotiate (NMSettingWired *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), FALSE);
+
+ return NM_SETTING_WIRED_GET_PRIVATE (setting)->auto_negotiate;
+}
+
+/**
+ * nm_setting_wired_get_mac_address:
+ * @setting: the #NMSettingWired
+ *
+ * Returns: the #NMSettingWired:mac-address property of the setting
+ **/
+const char *
+nm_setting_wired_get_mac_address (NMSettingWired *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), NULL);
+
+ return NM_SETTING_WIRED_GET_PRIVATE (setting)->device_mac_address;
+}
+
+/**
+ * nm_setting_wired_get_cloned_mac_address:
+ * @setting: the #NMSettingWired
+ *
+ * Returns: the #NMSettingWired:cloned-mac-address property of the setting
+ **/
+const char *
+nm_setting_wired_get_cloned_mac_address (NMSettingWired *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), NULL);
+
+ return NM_SETTING_WIRED_GET_PRIVATE (setting)->cloned_mac_address;
+}
+
+/**
+ * nm_setting_wired_get_mac_address_blacklist:
+ * @setting: the #NMSettingWired
+ *
+ * Returns: the #NMSettingWired:mac-address-blacklist property of the setting
+ **/
+const char * const *
+nm_setting_wired_get_mac_address_blacklist (NMSettingWired *setting)
+{
+ NMSettingWiredPrivate *priv;
+
+ g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), NULL);
+
+ priv = NM_SETTING_WIRED_GET_PRIVATE (setting);
+ return (const char * const *) priv->mac_address_blacklist->data;
+}
+
+/**
+ * nm_setting_wired_get_num_mac_blacklist_items:
+ * @setting: the #NMSettingWired
+ *
+ * Returns: the number of blacklisted MAC addresses
+ **/
+guint32
+nm_setting_wired_get_num_mac_blacklist_items (NMSettingWired *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), 0);
+
+ return NM_SETTING_WIRED_GET_PRIVATE (setting)->mac_address_blacklist->len;
+}
+
+/**
+ * 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
+ **/
+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 <= priv->mac_address_blacklist->len, NULL);
+
+ return g_array_index (priv->mac_address_blacklist, const char *, 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
+ **/
+gboolean
+nm_setting_wired_add_mac_blacklist_item (NMSettingWired *setting, const char *mac)
+{
+ NMSettingWiredPrivate *priv;
+ const char *candidate;
+ int i;
+
+ g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), FALSE);
+ g_return_val_if_fail (mac != NULL, FALSE);
+
+ if (!nm_utils_hwaddr_valid (mac, ETH_ALEN))
+ return FALSE;
+
+ priv = NM_SETTING_WIRED_GET_PRIVATE (setting);
+ for (i = 0; i < priv->mac_address_blacklist->len; i++) {
+ candidate = g_array_index (priv->mac_address_blacklist, char *, i);
+ if (nm_utils_hwaddr_matches (mac, -1, candidate, -1))
+ return FALSE;
+ }
+
+ mac = nm_utils_hwaddr_canonical (mac, ETH_ALEN);
+ g_array_append_val (priv->mac_address_blacklist, mac);
+ 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.
+ **/
+void
+nm_setting_wired_remove_mac_blacklist_item (NMSettingWired *setting, guint32 idx)
+{
+ NMSettingWiredPrivate *priv;
+
+ g_return_if_fail (NM_IS_SETTING_WIRED (setting));
+
+ priv = NM_SETTING_WIRED_GET_PRIVATE (setting);
+ g_return_if_fail (idx < priv->mac_address_blacklist->len);
+
+ g_array_remove_index (priv->mac_address_blacklist, idx);
+ 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.
+ **/
+gboolean
+nm_setting_wired_remove_mac_blacklist_item_by_value (NMSettingWired *setting, const char *mac)
+{
+ NMSettingWiredPrivate *priv;
+ const char *candidate;
+ int i;
+
+ g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), FALSE);
+ g_return_val_if_fail (mac != NULL, FALSE);
+
+ priv = NM_SETTING_WIRED_GET_PRIVATE (setting);
+ for (i = 0; i < priv->mac_address_blacklist->len; i++) {
+ candidate = g_array_index (priv->mac_address_blacklist, char *, i);
+ if (!nm_utils_hwaddr_matches (mac, -1, candidate, -1)) {
+ g_array_remove_index (priv->mac_address_blacklist, i);
+ 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.
+ **/
+void
+nm_setting_wired_clear_mac_blacklist_items (NMSettingWired *setting)
+{
+ g_return_if_fail (NM_IS_SETTING_WIRED (setting));
+
+ g_array_set_size (NM_SETTING_WIRED_GET_PRIVATE (setting)->mac_address_blacklist, 0);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST);
+}
+
+/**
+ * nm_setting_wired_get_mtu:
+ * @setting: the #NMSettingWired
+ *
+ * Returns: the #NMSettingWired:mtu property of the setting
+ **/
+guint32
+nm_setting_wired_get_mtu (NMSettingWired *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), 0);
+
+ return NM_SETTING_WIRED_GET_PRIVATE (setting)->mtu;
+}
+
+/**
+ * nm_setting_wired_get_s390_subchannels:
+ * @setting: the #NMSettingWired
+ *
+ * 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.
+ *
+ * Returns: (transfer none) (element-type utf8): array of strings, each specifying
+ * one subchannel the s390 device uses to communicate to the host.
+ **/
+const char * const *
+nm_setting_wired_get_s390_subchannels (NMSettingWired *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), NULL);
+
+ return (const char * const *) NM_SETTING_WIRED_GET_PRIVATE (setting)->s390_subchannels;
+}
+
+/**
+ * nm_setting_wired_get_s390_nettype:
+ * @setting: the #NMSettingWired
+ *
+ * Returns the s390 device type this connection should apply to. Will be one
+ * of 'qeth', 'lcs', or 'ctc'.
+ *
+ * Returns: the s390 device type
+ **/
+const char *
+nm_setting_wired_get_s390_nettype (NMSettingWired *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), NULL);
+
+ return NM_SETTING_WIRED_GET_PRIVATE (setting)->s390_nettype;
+}
+
+/**
+ * nm_setting_wired_get_num_s390_options:
+ * @setting: the #NMSettingWired
+ *
+ * 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 nm_setting_wired_get_s390_option().
+ *
+ * Returns: the number of s390-specific device options
+ **/
+guint32
+nm_setting_wired_get_num_s390_options (NMSettingWired *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), 0);
+
+ return g_hash_table_size (NM_SETTING_WIRED_GET_PRIVATE (setting)->s390_options);
+}
+
+/**
+ * nm_setting_wired_get_s390_option:
+ * @setting: the #NMSettingWired
+ * @idx: index of the desired option, from 0 to
+ * nm_setting_wired_get_num_s390_options() - 1
+ * @out_key: (out) (transfer none): on return, the key name of the s390 specific
+ * option; this value is owned by the setting and should not be modified
+ * @out_value: (out) (transfer none): on return, the value of the key of the
+ * s390 specific option; this value is owned by the setting and should not be
+ * modified
+ *
+ * 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
+ * nm_setting_wired_add_s390_option() and nm_setting_wired_remove_s390_option(),
+ * and should not be used to refer to options except for short periods of time
+ * such as during option iteration.
+ *
+ * Returns: %TRUE on success if the index was valid and an option was found,
+ * %FALSE if the index was invalid (ie, greater than the number of options
+ * currently held by the setting)
+ **/
+gboolean
+nm_setting_wired_get_s390_option (NMSettingWired *setting,
+ guint32 idx,
+ const char **out_key,
+ const char **out_value)
+{
+ NMSettingWiredPrivate *priv;
+ guint32 num_keys;
+ GList *keys;
+ const char *_key = NULL, *_value = NULL;
+
+ g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), FALSE);
+
+ priv = NM_SETTING_WIRED_GET_PRIVATE (setting);
+
+ num_keys = nm_setting_wired_get_num_s390_options (setting);
+ g_return_val_if_fail (idx < num_keys, FALSE);
+
+ keys = g_hash_table_get_keys (priv->s390_options);
+ _key = g_list_nth_data (keys, idx);
+ _value = g_hash_table_lookup (priv->s390_options, _key);
+
+ if (out_key)
+ *out_key = _key;
+ if (out_value)
+ *out_value = _value;
+ return TRUE;
+}
+
+/**
+ * nm_setting_wired_get_s390_option_by_key:
+ * @setting: the #NMSettingWired
+ * @key: the key for which to retrieve the value
+ *
+ * Returns the value associated with the s390-specific option specified by
+ * @key, if it exists.
+ *
+ * Returns: the value, or %NULL if the key/value pair was never added to the
+ * setting; the value is owned by the setting and must not be modified
+ **/
+const char *
+nm_setting_wired_get_s390_option_by_key (NMSettingWired *setting,
+ const char *key)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), NULL);
+ g_return_val_if_fail (key != NULL, NULL);
+ g_return_val_if_fail (strlen (key), NULL);
+
+ return g_hash_table_lookup (NM_SETTING_WIRED_GET_PRIVATE (setting)->s390_options, key);
+}
+
+/**
+ * nm_setting_wired_add_s390_option:
+ * @setting: the #NMSettingWired
+ * @key: key name for the option
+ * @value: value for the option
+ *
+ * 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.
+ *
+ * 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)
+{
+ size_t value_len;
+
+ 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);
+ g_return_val_if_fail (_nm_utils_string_in_list (key, valid_s390_opts), FALSE);
+ g_return_val_if_fail (value != NULL, FALSE);
+
+ value_len = strlen (value);
+ g_return_val_if_fail (value_len > 0 && value_len < 200, FALSE);
+
+ 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_option:
+ * @setting: the #NMSettingWired
+ * @key: key name for the option to remove
+ *
+ * Remove the s390-specific option referenced by @key from the internal option
+ * list.
+ *
+ * Returns: %TRUE if the option was found and removed from the internal option
+ * list, %FALSE if it was not.
+ **/
+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);
+
+ 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.
+ **/
+const char **
+nm_setting_wired_get_valid_s390_options (NMSettingWired *setting)
+{
+ return valid_s390_opts;
+}
+
+static gboolean
+verify (NMSetting *setting, NMConnection *connection, GError **error)
+{
+ NMSettingWiredPrivate *priv = NM_SETTING_WIRED_GET_PRIVATE (setting);
+ const char *valid_ports[] = { "tp", "aui", "bnc", "mii", NULL };
+ const char *valid_duplex[] = { "half", "full", NULL };
+ const char *valid_nettype[] = { "qeth", "lcs", "ctc", NULL };
+ GHashTableIter iter;
+ const char *key, *value;
+ int i;
+
+ if (priv->port && !_nm_utils_string_in_list (priv->port, valid_ports)) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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;
+ }
+
+ if (priv->duplex && !_nm_utils_string_in_list (priv->duplex, valid_duplex)) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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 && !nm_utils_hwaddr_valid (priv->device_mac_address, ETH_ALEN)) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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;
+ }
+
+ for (i = 0; i < priv->mac_address_blacklist->len; i++) {
+ const char *mac = g_array_index (priv->mac_address_blacklist, const char *, i);
+
+ if (!nm_utils_hwaddr_valid (mac, ETH_ALEN)) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%s' is not a valid MAC address"),
+ mac);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRED_SETTING_NAME, NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST);
+ return FALSE;
+ }
+ }
+
+ if (priv->s390_subchannels) {
+ int len = g_strv_length (priv->s390_subchannels);
+
+ if (len != 2 && len != 3) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("property is invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRED_SETTING_NAME, NM_SETTING_WIRED_S390_NETTYPE);
+ return FALSE;
+ }
+
+ g_hash_table_iter_init (&iter, priv->s390_options);
+ while (g_hash_table_iter_next (&iter, (gpointer) &key, (gpointer) &value)) {
+ if ( !_nm_utils_string_in_list (key, valid_s390_opts)
+ || !strlen (value)
+ || (strlen (value) > 200)) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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 && !nm_utils_hwaddr_valid (priv->cloned_mac_address, ETH_ALEN)) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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;
+ }
+
+ return TRUE;
+}
+
+static void
+clear_blacklist_item (char **item_p)
+{
+ g_free (*item_p);
+}
+
+static void
+nm_setting_wired_init (NMSettingWired *setting)
+{
+ NMSettingWiredPrivate *priv = NM_SETTING_WIRED_GET_PRIVATE (setting);
+
+ priv->s390_options = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+
+ /* We use GArray rather than GPtrArray so it will automatically be NULL-terminated */
+ priv->mac_address_blacklist = g_array_new (TRUE, FALSE, sizeof (char *));
+ g_array_set_clear_func (priv->mac_address_blacklist, (GDestroyNotify) clear_blacklist_item);
+}
+
+static void
+finalize (GObject *object)
+{
+ NMSettingWiredPrivate *priv = NM_SETTING_WIRED_GET_PRIVATE (object);
+
+ g_free (priv->port);
+ g_free (priv->duplex);
+ g_free (priv->s390_nettype);
+
+ g_hash_table_destroy (priv->s390_options);
+
+ g_free (priv->device_mac_address);
+ g_free (priv->cloned_mac_address);
+ g_array_unref (priv->mac_address_blacklist);
+
+ if (priv->s390_subchannels)
+ g_strfreev (priv->s390_subchannels);
+
+ G_OBJECT_CLASS (nm_setting_wired_parent_class)->finalize (object);
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ NMSettingWiredPrivate *priv = NM_SETTING_WIRED_GET_PRIVATE (object);
+ const char * const *blacklist;
+ const char *mac;
+ int i;
+
+ switch (prop_id) {
+ case PROP_PORT:
+ g_free (priv->port);
+ priv->port = g_value_dup_string (value);
+ break;
+ case PROP_SPEED:
+ priv->speed = g_value_get_uint (value);
+ break;
+ case PROP_DUPLEX:
+ g_free (priv->duplex);
+ priv->duplex = g_value_dup_string (value);
+ break;
+ case PROP_AUTO_NEGOTIATE:
+ priv->auto_negotiate = g_value_get_boolean (value);
+ break;
+ case PROP_MAC_ADDRESS:
+ g_free (priv->device_mac_address);
+ priv->device_mac_address = _nm_utils_hwaddr_canonical_or_invalid (g_value_get_string (value),
+ ETH_ALEN);
+ break;
+ case PROP_CLONED_MAC_ADDRESS:
+ g_free (priv->cloned_mac_address);
+ priv->cloned_mac_address = _nm_utils_hwaddr_canonical_or_invalid (g_value_get_string (value),
+ ETH_ALEN);
+ break;
+ case PROP_MAC_ADDRESS_BLACKLIST:
+ blacklist = g_value_get_boxed (value);
+ g_array_set_size (priv->mac_address_blacklist, 0);
+ if (blacklist && *blacklist) {
+ for (i = 0; blacklist[i]; i++) {
+ mac = _nm_utils_hwaddr_canonical_or_invalid (blacklist[i], ETH_ALEN);
+ g_array_append_val (priv->mac_address_blacklist, mac);
+ }
+ }
+ break;
+ case PROP_MTU:
+ priv->mtu = g_value_get_uint (value);
+ break;
+ case PROP_S390_SUBCHANNELS:
+ if (priv->s390_subchannels)
+ g_strfreev (priv->s390_subchannels);
+ priv->s390_subchannels = g_value_dup_boxed (value);
+ break;
+ case PROP_S390_NETTYPE:
+ g_free (priv->s390_nettype);
+ priv->s390_nettype = g_value_dup_string (value);
+ break;
+ case PROP_S390_OPTIONS:
+ g_hash_table_unref (priv->s390_options);
+ priv->s390_options = _nm_utils_copy_strdict (g_value_get_boxed (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)
+{
+ NMSettingWired *setting = NM_SETTING_WIRED (object);
+ NMSettingWiredPrivate *priv = NM_SETTING_WIRED_GET_PRIVATE (setting);
+
+ switch (prop_id) {
+ case PROP_PORT:
+ g_value_set_string (value, nm_setting_wired_get_port (setting));
+ break;
+ case PROP_SPEED:
+ g_value_set_uint (value, nm_setting_wired_get_speed (setting));
+ break;
+ case PROP_DUPLEX:
+ g_value_set_string (value, nm_setting_wired_get_duplex (setting));
+ break;
+ case PROP_AUTO_NEGOTIATE:
+ g_value_set_boolean (value, nm_setting_wired_get_auto_negotiate (setting));
+ break;
+ case PROP_MAC_ADDRESS:
+ g_value_set_string (value, nm_setting_wired_get_mac_address (setting));
+ break;
+ case PROP_CLONED_MAC_ADDRESS:
+ g_value_set_string (value, nm_setting_wired_get_cloned_mac_address (setting));
+ break;
+ case PROP_MAC_ADDRESS_BLACKLIST:
+ g_value_set_boxed (value, (char **) priv->mac_address_blacklist->data);
+ break;
+ case PROP_MTU:
+ g_value_set_uint (value, nm_setting_wired_get_mtu (setting));
+ break;
+ case PROP_S390_SUBCHANNELS:
+ g_value_set_boxed (value, priv->s390_subchannels);
+ break;
+ case PROP_S390_NETTYPE:
+ g_value_set_string (value, nm_setting_wired_get_s390_nettype (setting));
+ break;
+ case PROP_S390_OPTIONS:
+ g_value_take_boxed (value, _nm_utils_copy_strdict (priv->s390_options));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_setting_wired_class_init (NMSettingWiredClass *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 (NMSettingWiredPrivate));
+
+ /* virtual methods */
+ object_class->set_property = set_property;
+ object_class->get_property = get_property;
+ object_class->finalize = finalize;
+ parent_class->verify = verify;
+
+ /* Properties */
+ /**
+ * 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.
+ * If the device supports only one port type, this setting is ignored.
+ **/
+ /* ---ifcfg-rh---
+ * property: port
+ * variable: (none)
+ * description: The property is not saved by the plugin.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PORT,
+ g_param_spec_string (NM_SETTING_WIRED_PORT, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingWired:speed:
+ *
+ * If non-zero, request that the device use only the specified speed. In
+ * Mbit/s, ie 100 == 100Mbit/s.
+ **/
+ /* ---ifcfg-rh---
+ * property: speed
+ * variable: (none)
+ * description: The property is not saved by the plugin.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_SPEED,
+ g_param_spec_uint (NM_SETTING_WIRED_SPEED, "", "",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingWired:duplex:
+ *
+ * If specified, request that the device only use the specified duplex mode.
+ * Either "half" or "full".
+ **/
+ /* ---ifcfg-rh---
+ * property: duplex
+ * variable: (none)
+ * description: The property is not saved by the plugin.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_DUPLEX,
+ g_param_spec_string (NM_SETTING_WIRED_DUPLEX, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: auto-negotiate
+ * variable: (none)
+ * description: The property is not saved by the plugin.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_AUTO_NEGOTIATE,
+ g_param_spec_boolean (NM_SETTING_WIRED_AUTO_NEGOTIATE, "", "",
+ TRUE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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).
+ **/
+ /* ---keyfile---
+ * property: mac-address
+ * format: ususal hex-digits-and-colons notation
+ * description: MAC address in traditional hex-digits-and-colons notation
+ * (e.g. 00:22:68:12:79:A2), or semicolon separated list of 6 bytes (obsolete)
+ * (e.g. 0;34;104;18;121;162)
+ * ---end---
+ * ---ifcfg-rh---
+ * property: mac-address
+ * variable: HWADDR
+ * description: Hardware address of the device in traditional hex-digits-and-colons
+ * notation (e.g. 00:22:68:14:5A:05).
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_MAC_ADDRESS,
+ g_param_spec_string (NM_SETTING_WIRED_MAC_ADDRESS, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+ _nm_setting_class_transform_property (parent_class, NM_SETTING_WIRED_MAC_ADDRESS,
+ G_VARIANT_TYPE_BYTESTRING,
+ _nm_utils_hwaddr_to_dbus,
+ _nm_utils_hwaddr_from_dbus);
+
+ /**
+ * NMSettingWired:cloned-mac-address:
+ *
+ * If specified, request that the device use this MAC address instead of its
+ * permanent MAC address. This is known as MAC cloning or spoofing.
+ **/
+ /* ---keyfile---
+ * property: cloned-mac-address
+ * format: ususal hex-digits-and-colons notation
+ * description: Cloned MAC address in traditional hex-digits-and-colons notation
+ * (e.g. 00:22:68:12:79:B2), or semicolon separated list of 6 bytes (obsolete)
+ * (e.g. 0;34;104;18;121;178).
+ * ---end---
+ * ---ifcfg-rh---
+ * property: cloned-mac-address
+ * variable: MACADDR
+ * description: Cloned (spoofed) MAC address in traditional hex-digits-and-colons
+ * notation (e.g. 00:22:68:14:5A:99).
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_CLONED_MAC_ADDRESS,
+ g_param_spec_string (NM_SETTING_WIRED_CLONED_MAC_ADDRESS, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+ _nm_setting_class_transform_property (parent_class, NM_SETTING_WIRED_CLONED_MAC_ADDRESS,
+ G_VARIANT_TYPE_BYTESTRING,
+ _nm_utils_hwaddr_to_dbus,
+ _nm_utils_hwaddr_from_dbus);
+
+ /**
+ * 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
+ * (00:11:22:33:44:55).
+ **/
+ /* ---keyfile---
+ * property: mac-address-blacklist
+ * format: list of MACs (separated with semicolons)
+ * description: MAC address blacklist.
+ * example: mac-address-blacklist= 00:22:68:12:79:A6;00:22:68:12:79:78
+ * ---end---
+ * ---ifcfg-rh---
+ * property: mac-address-blacklist
+ * variable: HWADDR_BLACKLIST(+)
+ * description: It denies usage of the connection for any device whose address
+ * is listed.
+ * example: HWADDR_BLACKLIST="00:22:68:11:69:08 00:11:22:11:44:55"
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_MAC_ADDRESS_BLACKLIST,
+ g_param_spec_boxed (NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST, "", "",
+ G_TYPE_STRV,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingWired:mtu:
+ *
+ * If non-zero, only transmit packets of the specified size or smaller,
+ * breaking larger packets up into multiple Ethernet frames.
+ **/
+ /* ---ifcfg-rh---
+ * property: mtu
+ * variable: MTU
+ * description: MTU of the interface.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_MTU,
+ g_param_spec_uint (NM_SETTING_WIRED_MTU, "", "",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingWired:s390-subchannels:
+ *
+ * Identifies specific subchannels that this network device uses for
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: s390-subchannels
+ * variable: SUBCHANNELS
+ * description: Subchannels for IBM S390 hosts.
+ * example: SUBCHANNELS=0.0.b00a,0.0.b00b,0.0.b00c
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_S390_SUBCHANNELS,
+ g_param_spec_boxed (NM_SETTING_WIRED_S390_SUBCHANNELS, "", "",
+ G_TYPE_STRV,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingWired:s390-nettype:
+ *
+ * s390 network device type; one of "qeth", "lcs", or "ctc", representing
+ * the different types of virtual network devices available on s390 systems.
+ **/
+ /* ---ifcfg-rh---
+ * property: s390-nettype
+ * variable: NETTYPE
+ * values: "qeth", "lcs" or "ctc"
+ * description: Network type of the S390 host.
+ * example: NETTYPE=qeth
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_S390_NETTYPE,
+ g_param_spec_string (NM_SETTING_WIRED_S390_NETTYPE, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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
+ * alphanumeric characters (ie, [a-zA-Z0-9]).
+ *
+ * Type: GHashTable(utf8,utf8)
+ **/
+ /* ---ifcfg-rh---
+ * property: s390-options
+ * variable: OPTIONS and PORTNAME, CTCPROTO,
+ * description: S390 device options. All options go to OPTIONS, except for
+ * "portname" and "ctcprot" that have their own variables.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_S390_OPTIONS,
+ g_param_spec_boxed (NM_SETTING_WIRED_S390_OPTIONS, "", "",
+ G_TYPE_HASH_TABLE,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+ _nm_setting_class_transform_property (parent_class, NM_SETTING_WIRED_S390_OPTIONS,
+ G_VARIANT_TYPE ("a{ss}"),
+ _nm_utils_strdict_to_dbus,
+ _nm_utils_strdict_from_dbus);
+}
diff --git a/libnm-core/nm-setting-wired.h b/libnm-core/nm-setting-wired.h
new file mode 100644
index 000000000..4189b6896
--- /dev/null
+++ b/libnm-core/nm-setting-wired.h
@@ -0,0 +1,109 @@
+/* -*- 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 2007 - 2014 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ */
+
+#ifndef __NM_SETTING_WIRED_H__
+#define __NM_SETTING_WIRED_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-setting.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_WIRED (nm_setting_wired_get_type ())
+#define NM_SETTING_WIRED(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SETTING_WIRED, NMSettingWired))
+#define NM_SETTING_WIRED_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SETTING_WIRED, NMSettingWiredClass))
+#define NM_IS_SETTING_WIRED(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SETTING_WIRED))
+#define NM_IS_SETTING_WIRED_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_SETTING_WIRED))
+#define NM_SETTING_WIRED_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SETTING_WIRED, NMSettingWiredClass))
+
+#define NM_SETTING_WIRED_SETTING_NAME "802-3-ethernet"
+
+#define NM_SETTING_WIRED_PORT "port"
+#define NM_SETTING_WIRED_SPEED "speed"
+#define NM_SETTING_WIRED_DUPLEX "duplex"
+#define NM_SETTING_WIRED_AUTO_NEGOTIATE "auto-negotiate"
+#define NM_SETTING_WIRED_MAC_ADDRESS "mac-address"
+#define NM_SETTING_WIRED_CLONED_MAC_ADDRESS "cloned-mac-address"
+#define NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST "mac-address-blacklist"
+#define NM_SETTING_WIRED_MTU "mtu"
+#define NM_SETTING_WIRED_S390_SUBCHANNELS "s390-subchannels"
+#define NM_SETTING_WIRED_S390_NETTYPE "s390-nettype"
+#define NM_SETTING_WIRED_S390_OPTIONS "s390-options"
+
+struct _NMSettingWired {
+ NMSetting parent;
+};
+
+typedef struct {
+ NMSettingClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMSettingWiredClass;
+
+GType nm_setting_wired_get_type (void);
+
+NMSetting * nm_setting_wired_new (void);
+const char * nm_setting_wired_get_port (NMSettingWired *setting);
+guint32 nm_setting_wired_get_speed (NMSettingWired *setting);
+const char * nm_setting_wired_get_duplex (NMSettingWired *setting);
+gboolean nm_setting_wired_get_auto_negotiate (NMSettingWired *setting);
+const char * nm_setting_wired_get_mac_address (NMSettingWired *setting);
+const char * nm_setting_wired_get_cloned_mac_address (NMSettingWired *setting);
+
+const char * const *nm_setting_wired_get_mac_address_blacklist (NMSettingWired *setting);
+guint32 nm_setting_wired_get_num_mac_blacklist_items (NMSettingWired *setting);
+const char * nm_setting_wired_get_mac_blacklist_item (NMSettingWired *setting,
+ guint32 idx);
+gboolean nm_setting_wired_add_mac_blacklist_item (NMSettingWired *setting,
+ const char *mac);
+void nm_setting_wired_remove_mac_blacklist_item (NMSettingWired *setting,
+ guint32 idx);
+gboolean nm_setting_wired_remove_mac_blacklist_item_by_value (NMSettingWired *setting,
+ const char *mac);
+void nm_setting_wired_clear_mac_blacklist_items (NMSettingWired *setting);
+
+guint32 nm_setting_wired_get_mtu (NMSettingWired *setting);
+
+const char * const *nm_setting_wired_get_s390_subchannels (NMSettingWired *setting);
+const char * nm_setting_wired_get_s390_nettype (NMSettingWired *setting);
+
+guint32 nm_setting_wired_get_num_s390_options (NMSettingWired *setting);
+gboolean nm_setting_wired_get_s390_option (NMSettingWired *setting,
+ guint32 idx,
+ const char **out_key,
+ const char **out_value);
+const char * nm_setting_wired_get_s390_option_by_key (NMSettingWired *setting,
+ const char *key);
+gboolean nm_setting_wired_add_s390_option (NMSettingWired *setting,
+ const char *key,
+ const char *value);
+gboolean nm_setting_wired_remove_s390_option (NMSettingWired *setting,
+ const char *key);
+const char ** nm_setting_wired_get_valid_s390_options (NMSettingWired *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_WIRED_H__ */
diff --git a/libnm-core/nm-setting-wireless-security.c b/libnm-core/nm-setting-wireless-security.c
new file mode 100644
index 000000000..c95f92435
--- /dev/null
+++ b/libnm-core/nm-setting-wireless-security.c
@@ -0,0 +1,1704 @@
+/* -*- 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 2007 - 2014 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <glib/gi18n-lib.h>
+
+#include "nm-setting-wireless-security.h"
+#include "nm-setting-8021x.h"
+#include "nm-utils.h"
+#include "nm-utils-private.h"
+#include "nm-setting-private.h"
+#include "nm-setting-wireless.h"
+
+/**
+ * SECTION:nm-setting-wireless-security
+ * @short_description: Describes connection properties for Wi-Fi networks that
+ * use WEP, LEAP, WPA or WPA2/RSN security
+ *
+ * The #NMSettingWirelessSecurity object is a #NMSetting subclass that describes
+ * 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 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
+ * ISBN: 978-0596100520
+ *
+ * Cisco Wireless LAN Security
+ * Authors: Krishna Sankar, Sri Sundaralingam, Darrin Miller, and Andrew Balinsky
+ * ISBN: 978-1587051548
+ **/
+
+G_DEFINE_TYPE_WITH_CODE (NMSettingWirelessSecurity, nm_setting_wireless_security, NM_TYPE_SETTING,
+ _nm_register_setting (WIRELESS_SECURITY, 2))
+NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_WIRELESS_SECURITY)
+
+#define NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_WIRELESS_SECURITY, NMSettingWirelessSecurityPrivate))
+
+typedef struct {
+ char *key_mgmt;
+ char *auth_alg;
+ GSList *proto; /* GSList of strings */
+ GSList *pairwise; /* GSList of strings */
+ GSList *group; /* GSList of strings */
+
+ /* LEAP */
+ char *leap_username;
+ char *leap_password;
+ NMSettingSecretFlags leap_password_flags;
+
+ /* WEP */
+ char *wep_key0;
+ char *wep_key1;
+ char *wep_key2;
+ char *wep_key3;
+ NMSettingSecretFlags wep_key_flags;
+ NMWepKeyType wep_key_type;
+ guint32 wep_tx_keyidx;
+
+ /* WPA-PSK */
+ char *psk;
+ NMSettingSecretFlags psk_flags;
+} NMSettingWirelessSecurityPrivate;
+
+enum {
+ PROP_0,
+ PROP_KEY_MGMT,
+ PROP_WEP_TX_KEYIDX,
+ PROP_AUTH_ALG,
+ PROP_PROTO,
+ PROP_PAIRWISE,
+ PROP_GROUP,
+ PROP_LEAP_USERNAME,
+ PROP_WEP_KEY0,
+ PROP_WEP_KEY1,
+ PROP_WEP_KEY2,
+ PROP_WEP_KEY3,
+ PROP_WEP_KEY_FLAGS,
+ PROP_WEP_KEY_TYPE,
+ PROP_PSK,
+ PROP_PSK_FLAGS,
+ PROP_LEAP_PASSWORD,
+ PROP_LEAP_PASSWORD_FLAGS,
+
+ LAST_PROP
+};
+
+/**
+ * nm_setting_wireless_security_new:
+ *
+ * Creates a new #NMSettingWirelessSecurity object with default values.
+ *
+ * Returns: (transfer full): the new empty #NMSettingWirelessSecurity object
+ **/
+NMSetting *
+nm_setting_wireless_security_new (void)
+{
+ return (NMSetting *) g_object_new (NM_TYPE_SETTING_WIRELESS_SECURITY, NULL);
+}
+
+/**
+ * nm_setting_wireless_security_get_key_mgmt:
+ * @setting: the #NMSettingWirelessSecurity
+ *
+ * Returns: the #NMSettingWirelessSecurity:key-mgmt property of the setting
+ **/
+const char *
+nm_setting_wireless_security_get_key_mgmt (NMSettingWirelessSecurity *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS_SECURITY (setting), NULL);
+
+ return NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting)->key_mgmt;
+}
+
+/**
+ * nm_setting_wireless_security_get_num_protos:
+ * @setting: the #NMSettingWirelessSecurity
+ *
+ * Returns: the number of security protocols this connection allows when
+ * connecting to secure Wi-Fi networks
+ **/
+guint32
+nm_setting_wireless_security_get_num_protos (NMSettingWirelessSecurity *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS_SECURITY (setting), 0);
+
+ return g_slist_length (NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting)->proto);
+}
+
+/**
+ * nm_setting_wireless_security_get_proto:
+ * @setting: the #NMSettingWirelessSecurity
+ * @i: an index into the protocol list
+ *
+ * Returns: the protocol at index @i
+ **/
+const char *
+nm_setting_wireless_security_get_proto (NMSettingWirelessSecurity *setting, guint32 i)
+{
+ NMSettingWirelessSecurityPrivate *priv;
+
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS_SECURITY (setting), NULL);
+
+ priv = NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting);
+ g_return_val_if_fail (i <= g_slist_length (priv->proto), NULL);
+
+ return (const char *) g_slist_nth_data (priv->proto, i);
+}
+
+/**
+ * nm_setting_wireless_security_add_proto:
+ * @setting: the #NMSettingWirelessSecurity
+ * @proto: the protocol to add, one of "wpa" or "rsn"
+ *
+ * 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.
+ *
+ * Returns: %TRUE if the protocol was new and and was added to the allowed
+ * protocol list, or %FALSE if it was already in the list
+ **/
+gboolean
+nm_setting_wireless_security_add_proto (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)
+ return FALSE;
+ }
+
+ 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;
+}
+
+/**
+ * nm_setting_wireless_security_remove_proto:
+ * @setting: the #NMSettingWirelessSecurity
+ * @i: index of the protocol to remove
+ *
+ * Removes a protocol from the allowed protocol list.
+ **/
+void
+nm_setting_wireless_security_remove_proto (NMSettingWirelessSecurity *setting, guint32 i)
+{
+ NMSettingWirelessSecurityPrivate *priv;
+ GSList *elt;
+
+ g_return_if_fail (NM_IS_SETTING_WIRELESS_SECURITY (setting));
+
+ priv = NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting);
+ elt = g_slist_nth (priv->proto, i);
+ g_return_if_fail (elt != NULL);
+
+ 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.
+ **/
+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;
+}
+
+/**
+ * nm_setting_wireless_security_clear_protos:
+ * @setting: the #NMSettingWirelessSecurity
+ *
+ * Removes all protocols from the allowed list. If there are no protocols
+ * specified then all protocols are allowed.
+ **/
+void
+nm_setting_wireless_security_clear_protos (NMSettingWirelessSecurity *setting)
+{
+ NMSettingWirelessSecurityPrivate *priv;
+
+ g_return_if_fail (NM_IS_SETTING_WIRELESS_SECURITY (setting));
+
+ priv = NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting);
+ g_slist_free_full (priv->proto, g_free);
+ priv->proto = NULL;
+ g_object_notify (G_OBJECT (setting), NM_SETTING_WIRELESS_SECURITY_PROTO);
+}
+
+/**
+ * nm_setting_wireless_security_get_num_pairwise:
+ * @setting: the #NMSettingWirelessSecurity
+ *
+ * Returns: the number of pairwise encryption algorithms in the allowed list
+ **/
+guint32
+nm_setting_wireless_security_get_num_pairwise (NMSettingWirelessSecurity *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS_SECURITY (setting), 0);
+
+ return g_slist_length (NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting)->pairwise);
+}
+
+/**
+ * nm_setting_wireless_security_get_pairwise:
+ * @setting: the #NMSettingWirelessSecurity
+ * @i: index of an item in the allowed pairwise encryption algorithm list
+ *
+ * Returns the allowed pairwise encryption algorithm from allowed algorithm
+ * list.
+ *
+ * Returns: the pairwise encryption algorithm at index @i
+ **/
+const char *
+nm_setting_wireless_security_get_pairwise (NMSettingWirelessSecurity *setting, guint32 i)
+{
+ NMSettingWirelessSecurityPrivate *priv;
+
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS_SECURITY (setting), NULL);
+
+ priv = NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting);
+ g_return_val_if_fail (i <= g_slist_length (priv->pairwise), NULL);
+
+ return (const char *) g_slist_nth_data (priv->pairwise, i);
+}
+
+/**
+ * nm_setting_wireless_security_add_pairwise:
+ * @setting: the #NMSettingWirelessSecurity
+ * @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
+ * one or more of the encryption algorithms in the list will be considered
+ * compatible with this connection.
+ *
+ * Returns: %TRUE if the algorithm was added to the list, %FALSE if it was
+ * already in the list
+ **/
+gboolean
+nm_setting_wireless_security_add_pairwise (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)
+ return FALSE;
+ }
+
+ 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;
+}
+
+/**
+ * nm_setting_wireless_security_remove_pairwise:
+ * @setting: the #NMSettingWirelessSecurity
+ * @i: the index of an item in the allowed pairwise encryption algorithm list
+ *
+ * Removes an encryption algorithm from the allowed pairwise encryption
+ * algorithm list.
+ **/
+void
+nm_setting_wireless_security_remove_pairwise (NMSettingWirelessSecurity *setting, guint32 i)
+{
+ NMSettingWirelessSecurityPrivate *priv;
+ GSList *elt;
+
+ g_return_if_fail (NM_IS_SETTING_WIRELESS_SECURITY (setting));
+
+ priv = NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting);
+ elt = g_slist_nth (priv->pairwise, i);
+ g_return_if_fail (elt != NULL);
+
+ 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.
+ **/
+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;
+}
+
+/**
+ * nm_setting_wireless_security_clear_pairwise:
+ * @setting: the #NMSettingWirelessSecurity
+ *
+ * Removes all algorithms from the allowed list. If there are no algorithms
+ * specified then all pairwise encryption algorithms are allowed.
+ **/
+void
+nm_setting_wireless_security_clear_pairwise (NMSettingWirelessSecurity *setting)
+{
+ NMSettingWirelessSecurityPrivate *priv;
+
+ g_return_if_fail (NM_IS_SETTING_WIRELESS_SECURITY (setting));
+
+ priv = NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting);
+ g_slist_free_full (priv->pairwise, g_free);
+ priv->pairwise = NULL;
+ g_object_notify (G_OBJECT (setting), NM_SETTING_WIRELESS_SECURITY_PAIRWISE);
+}
+
+/**
+ * nm_setting_wireless_security_get_num_groups:
+ * @setting: the #NMSettingWirelessSecurity
+ *
+ * Returns: the number of groupwise encryption algorithms in the allowed list
+ **/
+guint32
+nm_setting_wireless_security_get_num_groups (NMSettingWirelessSecurity *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS_SECURITY (setting), 0);
+
+ return g_slist_length (NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting)->group);
+}
+
+/**
+ * nm_setting_wireless_security_get_group:
+ * @setting: the #NMSettingWirelessSecurity
+ * @i: index of an item in the allowed groupwise encryption algorithm list
+ *
+ * Returns the allowed groupwise encryption algorithm from allowed algorithm
+ * list.
+ *
+ * Returns: the groupwise encryption algorithm at index @i
+ **/
+const char *
+nm_setting_wireless_security_get_group (NMSettingWirelessSecurity *setting, guint32 i)
+{
+ NMSettingWirelessSecurityPrivate *priv;
+
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS_SECURITY (setting), NULL);
+
+ priv = NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting);
+ g_return_val_if_fail (i <= g_slist_length (priv->group), NULL);
+
+ return (const char *) g_slist_nth_data (priv->group, i);
+}
+
+/**
+ * nm_setting_wireless_security_add_group:
+ * @setting: the #NMSettingWirelessSecurity
+ * @group: the encryption algorithm to add, one of "wep40", "wep104",
+ * "tkip", or "ccmp"
+ *
+ * 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.
+ *
+ * Returns: %TRUE if the algorithm was added to the list, %FALSE if it was
+ * already in the list
+ **/
+gboolean
+nm_setting_wireless_security_add_group (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)
+ return FALSE;
+ }
+
+ 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;
+}
+
+/**
+ * nm_setting_wireless_security_remove_group:
+ * @setting: the #NMSettingWirelessSecurity
+ * @i: the index of an item in the allowed groupwise encryption algorithm list
+ *
+ * Removes an encryption algorithm from the allowed groupwise encryption
+ * algorithm list.
+ **/
+void
+nm_setting_wireless_security_remove_group (NMSettingWirelessSecurity *setting, guint32 i)
+{
+ NMSettingWirelessSecurityPrivate *priv;
+ GSList *elt;
+
+ g_return_if_fail (NM_IS_SETTING_WIRELESS_SECURITY (setting));
+
+ priv = NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting);
+ elt = g_slist_nth (priv->group, i);
+ g_return_if_fail (elt != NULL);
+
+ 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.
+ **/
+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;
+}
+
+/**
+ * nm_setting_wireless_security_clear_groups:
+ * @setting: the #NMSettingWirelessSecurity
+ *
+ * Removes all algorithms from the allowed list. If there are no algorithms
+ * specified then all groupwise encryption algorithms are allowed.
+ **/
+void
+nm_setting_wireless_security_clear_groups (NMSettingWirelessSecurity *setting)
+{
+ NMSettingWirelessSecurityPrivate *priv;
+
+ g_return_if_fail (NM_IS_SETTING_WIRELESS_SECURITY (setting));
+
+ priv = NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting);
+ g_slist_free_full (priv->group, g_free);
+ priv->group = NULL;
+ g_object_notify (G_OBJECT (setting), NM_SETTING_WIRELESS_SECURITY_GROUP);
+}
+
+/**
+ * nm_setting_wireless_security_get_psk:
+ * @setting: the #NMSettingWirelessSecurity
+ *
+ * Returns: the #NMSettingWirelessSecurity:psk property of the setting
+ **/
+const char *
+nm_setting_wireless_security_get_psk (NMSettingWirelessSecurity *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS_SECURITY (setting), NULL);
+
+ return NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting)->psk;
+}
+
+/**
+ * nm_setting_wireless_security_get_psk_flags:
+ * @setting: the #NMSettingWirelessSecurity
+ *
+ * Returns: the #NMSettingSecretFlags pertaining to the
+ * #NMSettingWirelessSecurity:psk
+ **/
+NMSettingSecretFlags
+nm_setting_wireless_security_get_psk_flags (NMSettingWirelessSecurity *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS_SECURITY (setting), NM_SETTING_SECRET_FLAG_NONE);
+
+ return NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting)->psk_flags;
+}
+
+/**
+ * nm_setting_wireless_security_get_leap_username:
+ * @setting: the #NMSettingWirelessSecurity
+ *
+ * Returns: the #NMSettingWirelessSecurity:leap-username property of the setting
+ **/
+const char *
+nm_setting_wireless_security_get_leap_username (NMSettingWirelessSecurity *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS_SECURITY (setting), NULL);
+
+ return NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting)->leap_username;
+}
+
+/**
+ * nm_setting_wireless_security_get_leap_password:
+ * @setting: the #NMSettingWirelessSecurity
+ *
+ * Returns: the #NMSettingWirelessSecurity:leap-password property of the setting
+ **/
+const char *
+nm_setting_wireless_security_get_leap_password (NMSettingWirelessSecurity *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS_SECURITY (setting), NULL);
+
+ return NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting)->leap_password;
+}
+
+/**
+ * nm_setting_wireless_security_get_leap_password_flags:
+ * @setting: the #NMSettingWirelessSecurity
+ *
+ * Returns: the #NMSettingSecretFlags pertaining to the
+ * #NMSettingWirelessSecurity:leap-password
+ **/
+NMSettingSecretFlags
+nm_setting_wireless_security_get_leap_password_flags (NMSettingWirelessSecurity *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS_SECURITY (setting), NM_SETTING_SECRET_FLAG_NONE);
+
+ return NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting)->leap_password_flags;
+}
+
+/**
+ * nm_setting_wireless_security_get_wep_key:
+ * @setting: the #NMSettingWirelessSecurity
+ * @idx: the WEP key index (0..3 inclusive)
+ *
+ * Returns: the WEP key at the given index
+ **/
+const char *
+nm_setting_wireless_security_get_wep_key (NMSettingWirelessSecurity *setting, guint32 idx)
+{
+ NMSettingWirelessSecurityPrivate *priv;
+
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS_SECURITY (setting), NULL);
+ g_return_val_if_fail (idx < 4, NULL);
+
+ priv = NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting);
+ if (idx == 0)
+ return priv->wep_key0;
+ else if (idx == 1)
+ return priv->wep_key1;
+ else if (idx == 2)
+ return priv->wep_key2;
+ else if (idx == 3)
+ return priv->wep_key3;
+
+ g_assert_not_reached ();
+ return NULL;
+}
+
+/**
+ * nm_setting_wireless_security_set_wep_key:
+ * @setting: the #NMSettingWirelessSecurity
+ * @idx: the index of the key (0..3 inclusive)
+ * @key: the WEP key as a string, in either hexadecimal, ASCII, or passphrase
+ * form as determiend by the value of the #NMSettingWirelessSecurity:wep-key-type
+ * property.
+ *
+ * Sets a WEP key in the given index.
+ **/
+void
+nm_setting_wireless_security_set_wep_key (NMSettingWirelessSecurity *setting, guint32 idx, const char *key)
+{
+ NMSettingWirelessSecurityPrivate *priv;
+
+ g_return_if_fail (NM_IS_SETTING_WIRELESS_SECURITY (setting));
+ g_return_if_fail (idx < 4);
+
+ priv = NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting);
+ switch (idx) {
+ 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 ();
+ }
+}
+
+/**
+ * nm_setting_wireless_security_get_wep_tx_keyidx:
+ * @setting: the #NMSettingWirelessSecurity
+ *
+ * Returns: the #NMSettingWirelessSecurity:wep-tx-keyidx property of the setting
+ **/
+guint32
+nm_setting_wireless_security_get_wep_tx_keyidx (NMSettingWirelessSecurity *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS_SECURITY (setting), 0);
+
+ return NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting)->wep_tx_keyidx;
+}
+
+/**
+ * nm_setting_wireless_security_get_auth_alg:
+ * @setting: the #NMSettingWirelessSecurity
+ *
+ * Returns: the #NMSettingWirelessSecurity:auth-alg property of the setting
+ **/
+const char *
+nm_setting_wireless_security_get_auth_alg (NMSettingWirelessSecurity *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS_SECURITY (setting), NULL);
+
+ return NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting)->auth_alg;
+}
+
+/**
+ * nm_setting_wireless_security_get_wep_key_flags:
+ * @setting: the #NMSettingWirelessSecurity
+ *
+ * Returns: the #NMSettingSecretFlags pertaining to the all WEP keys
+ **/
+NMSettingSecretFlags
+nm_setting_wireless_security_get_wep_key_flags (NMSettingWirelessSecurity *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS_SECURITY (setting), NM_SETTING_SECRET_FLAG_NONE);
+
+ return NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting)->wep_key_flags;
+}
+
+/**
+ * nm_setting_wireless_security_get_wep_key_type:
+ * @setting: the #NMSettingWirelessSecurity
+ *
+ * Returns: the #NMSettingWirelessSecurity:wep-key-type property of the setting
+ **/
+NMWepKeyType
+nm_setting_wireless_security_get_wep_key_type (NMSettingWirelessSecurity *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS_SECURITY (setting), 0);
+
+ return NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting)->wep_key_type;
+}
+
+static GPtrArray *
+need_secrets (NMSetting *setting)
+{
+ NMSettingWirelessSecurity *self = NM_SETTING_WIRELESS_SECURITY (setting);
+ NMSettingWirelessSecurityPrivate *priv = NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (self);
+ GPtrArray *secrets;
+
+ secrets = g_ptr_array_sized_new (4);
+
+ g_assert (priv->key_mgmt);
+
+ /* Static WEP */
+ if (strcmp (priv->key_mgmt, "none") == 0) {
+ if ((priv->wep_tx_keyidx == 0) && !nm_utils_wep_key_valid (priv->wep_key0, priv->wep_key_type)) {
+ g_ptr_array_add (secrets, NM_SETTING_WIRELESS_SECURITY_WEP_KEY0);
+ return secrets;
+ }
+ if ((priv->wep_tx_keyidx == 1) && !nm_utils_wep_key_valid (priv->wep_key1, priv->wep_key_type)) {
+ g_ptr_array_add (secrets, NM_SETTING_WIRELESS_SECURITY_WEP_KEY1);
+ return secrets;
+ }
+ if ((priv->wep_tx_keyidx == 2) && !nm_utils_wep_key_valid (priv->wep_key2, priv->wep_key_type)) {
+ g_ptr_array_add (secrets, NM_SETTING_WIRELESS_SECURITY_WEP_KEY2);
+ return secrets;
+ }
+ if ((priv->wep_tx_keyidx == 3) && !nm_utils_wep_key_valid (priv->wep_key3, priv->wep_key_type)) {
+ g_ptr_array_add (secrets, NM_SETTING_WIRELESS_SECURITY_WEP_KEY3);
+ return secrets;
+ }
+ goto no_secrets;
+ }
+
+ /* WPA-PSK infrastructure and adhoc */
+ if ( (strcmp (priv->key_mgmt, "wpa-none") == 0)
+ || (strcmp (priv->key_mgmt, "wpa-psk") == 0)) {
+ if (!nm_utils_wpa_psk_valid (priv->psk)) {
+ g_ptr_array_add (secrets, NM_SETTING_WIRELESS_SECURITY_PSK);
+ return secrets;
+ }
+ goto no_secrets;
+ }
+
+ /* LEAP */
+ if ( priv->auth_alg
+ && !strcmp (priv->auth_alg, "leap")
+ && !strcmp (priv->key_mgmt, "ieee8021x")) {
+ if (!priv->leap_password || !strlen (priv->leap_password)) {
+ g_ptr_array_add (secrets, NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD);
+ return secrets;
+ }
+ goto no_secrets;
+ }
+
+ if ( (strcmp (priv->key_mgmt, "ieee8021x") == 0)
+ || (strcmp (priv->key_mgmt, "wpa-eap") == 0)) {
+ /* Let caller check the 802.1x setting for secrets */
+ goto no_secrets;
+ }
+
+ g_assert_not_reached ();
+ return secrets;
+
+no_secrets:
+ if (secrets)
+ g_ptr_array_free (secrets, TRUE);
+ return NULL;
+}
+
+static gboolean
+verify (NMSetting *setting, NMConnection *connection, GError **error)
+{
+ NMSettingWirelessSecurity *self = NM_SETTING_WIRELESS_SECURITY (setting);
+ NMSettingWirelessSecurityPrivate *priv = NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (self);
+ 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[] = { "tkip", "ccmp", NULL };
+ const char *valid_groups[] = { "wep40", "wep104", "tkip", "ccmp", NULL };
+
+ if (!priv->key_mgmt) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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;
+ }
+
+ if (!_nm_utils_string_in_list (priv->key_mgmt, valid_key_mgmt)) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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;
+ }
+
+ if (priv->auth_alg && !strcmp (priv->auth_alg, "leap")) {
+ /* LEAP must use ieee8021x key management */
+ if (strcmp (priv->key_mgmt, "ieee8021x")) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_MISSING_PROPERTY,
+ _("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_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_MISSING_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 (connection && !nm_connection_get_setting_802_1x (connection)) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_MISSING_SETTING,
+ _("'%s' security requires '%s' setting presence"),
+ priv->key_mgmt, NM_SETTING_802_1X_SETTING_NAME);
+ g_prefix_error (error, "%s: ", NM_SETTING_802_1X_SETTING_NAME);
+ return FALSE;
+ }
+ }
+ }
+
+ if (priv->leap_username && !strlen (priv->leap_username)) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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;
+ }
+
+ if (priv->wep_tx_keyidx > 3) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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;
+ }
+
+ if (priv->pairwise) {
+ const char *wpa_none[] = { "wpa-none", NULL };
+
+ /* For ad-hoc connections, pairwise must be "none" */
+ if (_nm_utils_string_in_list (priv->key_mgmt, wpa_none)) {
+ GSList *iter;
+ gboolean found = FALSE;
+
+ for (iter = priv->pairwise; iter; iter = g_slist_next (iter)) {
+ if (!strcmp ((char *) iter->data, "none")) {
+ found = TRUE;
+ break;
+ }
+ }
+
+ /* pairwise cipher list didn't contain "none", which is invalid
+ * for WPA adhoc connections.
+ */
+ if (!found) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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;
+ }
+
+ /* Shared Key auth can only be used with WEP */
+ if (priv->auth_alg && !strcmp (priv->auth_alg, "shared")) {
+ if (priv->key_mgmt && strcmp (priv->key_mgmt, "none")) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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;
+ }
+ }
+
+ return TRUE;
+}
+
+static gboolean
+get_secret_flags (NMSetting *setting,
+ const char *secret_name,
+ gboolean verify_secret,
+ NMSettingSecretFlags *out_flags,
+ GError **error)
+{
+ NMSettingClass *setting_class;
+ gboolean verify_override = verify_secret;
+
+ /* There's only one 'flags' property for WEP keys, so alias all the WEP key
+ * property names to that flags property.
+ */
+ if ( !g_strcmp0 (secret_name, NM_SETTING_WIRELESS_SECURITY_WEP_KEY0)
+ || !g_strcmp0 (secret_name, NM_SETTING_WIRELESS_SECURITY_WEP_KEY1)
+ || !g_strcmp0 (secret_name, NM_SETTING_WIRELESS_SECURITY_WEP_KEY2)
+ || !g_strcmp0 (secret_name, NM_SETTING_WIRELESS_SECURITY_WEP_KEY3)) {
+ secret_name = "wep-key";
+ verify_override = FALSE; /* Already know it's a secret */
+ }
+
+ /* Chain up to superclass with modified key name */
+ setting_class = NM_SETTING_CLASS (nm_setting_wireless_security_parent_class);
+ return setting_class->get_secret_flags (setting, secret_name, verify_override, out_flags, error);
+}
+
+static gboolean
+set_secret_flags (NMSetting *setting,
+ const char *secret_name,
+ gboolean verify_secret,
+ NMSettingSecretFlags flags,
+ GError **error)
+{
+ NMSettingClass *setting_class;
+ gboolean verify_override = verify_secret;
+
+ /* There's only one 'flags' property for WEP keys, so alias all the WEP key
+ * property names to that flags property.
+ */
+ if ( !g_strcmp0 (secret_name, NM_SETTING_WIRELESS_SECURITY_WEP_KEY0)
+ || !g_strcmp0 (secret_name, NM_SETTING_WIRELESS_SECURITY_WEP_KEY1)
+ || !g_strcmp0 (secret_name, NM_SETTING_WIRELESS_SECURITY_WEP_KEY2)
+ || !g_strcmp0 (secret_name, NM_SETTING_WIRELESS_SECURITY_WEP_KEY3)) {
+ secret_name = "wep-key";
+ verify_override = FALSE; /* Already know it's a secret */
+ }
+
+ /* Chain up to superclass with modified key name */
+ setting_class = NM_SETTING_CLASS (nm_setting_wireless_security_parent_class);
+ return setting_class->set_secret_flags (setting, secret_name, verify_override, flags, error);
+}
+
+static void
+nm_setting_wireless_security_init (NMSettingWirelessSecurity *setting)
+{
+}
+
+static void
+finalize (GObject *object)
+{
+ NMSettingWirelessSecurity *self = NM_SETTING_WIRELESS_SECURITY (object);
+ NMSettingWirelessSecurityPrivate *priv = NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (self);
+
+ /* Strings first. g_free() already checks for NULLs so we don't have to */
+
+ g_free (priv->key_mgmt);
+ g_free (priv->auth_alg);
+ g_free (priv->leap_username);
+ g_free (priv->wep_key0);
+ g_free (priv->wep_key1);
+ g_free (priv->wep_key2);
+ g_free (priv->wep_key3);
+ g_free (priv->psk);
+ g_free (priv->leap_password);
+
+ 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);
+}
+
+/* NMSettingWirelessSecurity:wep-key-type is an enum, but needs to be marshalled
+ * as 'u', not 'i', for backward-compatibility.
+ */
+static GVariant *
+wep_key_type_to_dbus (const GValue *from)
+{
+ return g_variant_new_uint32 (g_value_get_enum (from));
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ NMSettingWirelessSecurity *setting = NM_SETTING_WIRELESS_SECURITY (object);
+ NMSettingWirelessSecurityPrivate *priv = NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting);
+ const char *str;
+
+ switch (prop_id) {
+ case PROP_KEY_MGMT:
+ g_free (priv->key_mgmt);
+ str = g_value_get_string (value);
+ priv->key_mgmt = str ? g_ascii_strdown (str, -1) : NULL;
+ break;
+ case PROP_WEP_TX_KEYIDX:
+ priv->wep_tx_keyidx = g_value_get_uint (value);
+ break;
+ case PROP_AUTH_ALG:
+ g_free (priv->auth_alg);
+ str = g_value_get_string (value);
+ priv->auth_alg = str ? g_ascii_strdown (str, -1) : NULL;
+ break;
+ case PROP_PROTO:
+ g_slist_free_full (priv->proto, g_free);
+ priv->proto = _nm_utils_strv_to_slist (g_value_get_boxed (value));
+ break;
+ case PROP_PAIRWISE:
+ g_slist_free_full (priv->pairwise, g_free);
+ priv->pairwise = _nm_utils_strv_to_slist (g_value_get_boxed (value));
+ break;
+ case PROP_GROUP:
+ g_slist_free_full (priv->group, g_free);
+ priv->group = _nm_utils_strv_to_slist (g_value_get_boxed (value));
+ break;
+ case PROP_LEAP_USERNAME:
+ g_free (priv->leap_username);
+ priv->leap_username = g_value_dup_string (value);
+ break;
+ case PROP_WEP_KEY0:
+ g_free (priv->wep_key0);
+ priv->wep_key0 = g_value_dup_string (value);
+ break;
+ case PROP_WEP_KEY1:
+ g_free (priv->wep_key1);
+ priv->wep_key1 = g_value_dup_string (value);
+ break;
+ case PROP_WEP_KEY2:
+ g_free (priv->wep_key2);
+ priv->wep_key2 = g_value_dup_string (value);
+ break;
+ case PROP_WEP_KEY3:
+ 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_flags (value);
+ break;
+ case PROP_PSK:
+ g_free (priv->psk);
+ priv->psk = g_value_dup_string (value);
+ break;
+ case PROP_PSK_FLAGS:
+ priv->psk_flags = g_value_get_flags (value);
+ break;
+ case PROP_LEAP_PASSWORD:
+ g_free (priv->leap_password);
+ priv->leap_password = g_value_dup_string (value);
+ break;
+ case PROP_LEAP_PASSWORD_FLAGS:
+ priv->leap_password_flags = g_value_get_flags (value);
+ break;
+ case PROP_WEP_KEY_TYPE:
+ priv->wep_key_type = g_value_get_enum (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)
+{
+ NMSettingWirelessSecurity *setting = NM_SETTING_WIRELESS_SECURITY (object);
+ NMSettingWirelessSecurityPrivate *priv = NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting);
+
+ switch (prop_id) {
+ case PROP_KEY_MGMT:
+ g_value_set_string (value, priv->key_mgmt);
+ break;
+ case PROP_WEP_TX_KEYIDX:
+ g_value_set_uint (value, priv->wep_tx_keyidx);
+ break;
+ case PROP_AUTH_ALG:
+ g_value_set_string (value, priv->auth_alg);
+ break;
+ case PROP_PROTO:
+ g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->proto));
+ break;
+ case PROP_PAIRWISE:
+ g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->pairwise));
+ break;
+ case PROP_GROUP:
+ g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->group));
+ break;
+ case PROP_LEAP_USERNAME:
+ g_value_set_string (value, priv->leap_username);
+ break;
+ case PROP_WEP_KEY0:
+ g_value_set_string (value, priv->wep_key0);
+ break;
+ case PROP_WEP_KEY1:
+ g_value_set_string (value, priv->wep_key1);
+ break;
+ case PROP_WEP_KEY2:
+ g_value_set_string (value, priv->wep_key2);
+ break;
+ case PROP_WEP_KEY3:
+ g_value_set_string (value, priv->wep_key3);
+ break;
+ case PROP_WEP_KEY_FLAGS:
+ g_value_set_flags (value, priv->wep_key_flags);
+ break;
+ case PROP_PSK:
+ g_value_set_string (value, priv->psk);
+ break;
+ case PROP_PSK_FLAGS:
+ g_value_set_flags (value, priv->psk_flags);
+ break;
+ case PROP_LEAP_PASSWORD:
+ g_value_set_string (value, priv->leap_password);
+ break;
+ case PROP_LEAP_PASSWORD_FLAGS:
+ g_value_set_flags (value, priv->leap_password_flags);
+ break;
+ case PROP_WEP_KEY_TYPE:
+ g_value_set_enum (value, priv->wep_key_type);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *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 (NMSettingWirelessSecurityPrivate));
+
+ /* virtual methods */
+ object_class->set_property = set_property;
+ object_class->get_property = get_property;
+ object_class->finalize = finalize;
+
+ parent_class->verify = verify;
+ parent_class->need_secrets = need_secrets;
+ parent_class->get_secret_flags = get_secret_flags;
+ parent_class->set_secret_flags = set_secret_flags;
+
+ /* Properties */
+ /**
+ * 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 Wi-Fi connection that uses security.
+ **/
+ /* ---ifcfg-rh---
+ * property: key-mgmt
+ * variable: KEY_MGMT(+)
+ * values: IEEE8021X, WPA-PSK, WPA-EAP
+ * description: Key management menthod.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_KEY_MGMT,
+ g_param_spec_string (NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_REQUIRED |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingWirelessSecurity:wep-tx-keyidx:
+ *
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: wep-tx-keyidx
+ * variable: DEFAULTKEY
+ * values: 1, 2, 3, 4
+ * default: 1
+ * description: Index of active WEP key.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_WEP_TX_KEYIDX,
+ g_param_spec_uint (NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX, "", "",
+ 0, 3, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: auth-alg
+ * variable: SECURITYMODE(+)
+ * values: restricted, open, leap
+ * description: Authentication algorithm for WEP.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_AUTH_ALG,
+ g_param_spec_string (NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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
+ * not specified, both WPA and RSN connections are allowed.
+ **/
+ /* ---ifcfg-rh---
+ * property: proto
+ * variable: WPA_ALLOW_WPA(+), WPA_ALLOW_WPA2(+)
+ * values: yes, no
+ * default: no
+ * description: Allowed WPA protocols, WPA and WPA2 (RSN).
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PROTO,
+ g_param_spec_boxed (NM_SETTING_WIRELESS_SECURITY_PROTO, "", "",
+ G_TYPE_STRV,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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 "tkip" or "ccmp".
+ **/
+ /* ---ifcfg-rh---
+ * property: pairwise
+ * variable: CIPHER_PAIRWISE(+)
+ * values: CCMP, TKIP
+ * description: Restrict pairwise encryption algorithms, specified as a space
+ * separated list.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PAIRWISE,
+ g_param_spec_boxed (NM_SETTING_WIRELESS_SECURITY_PAIRWISE, "", "",
+ G_TYPE_STRV,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingWirelessSecurity:group:
+ *
+ * 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".
+ **/
+ /* ---ifcfg-rh---
+ * property: group
+ * variable: CIPHER_GROUP(+)
+ * values: CCMP, TKIP, WEP40, WEP104
+ * description: Restrict group/broadcast encryption algorithms, specified as a space
+ * separated list.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_GROUP,
+ g_param_spec_boxed (NM_SETTING_WIRELESS_SECURITY_GROUP, "", "",
+ G_TYPE_STRV,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingWirelessSecurity:leap-username:
+ *
+ * The login username for legacy LEAP connections (ie, key-mgmt =
+ * "ieee8021x" and auth-alg = "leap").
+ **/
+ /* ---ifcfg-rh---
+ * property: leap-username
+ * variable: IEEE_8021X_IDENTITY(+)
+ * description: Login name for LEAP.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_LEAP_USERNAME,
+ g_param_spec_string (NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: wep-key0
+ * variable: KEY1, KEY_PASSPHRASE1(+)
+ * description: The first WEP key (used in most networks). See also DEFAULTKEY for key index.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_WEP_KEY0,
+ g_param_spec_string (NM_SETTING_WIRELESS_SECURITY_WEP_KEY0, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_SECRET |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: wep-key1
+ * variable: KEY2, KEY_PASSPHRASE2(+)
+ * description: WEP key with index 1. See also DEFAULTKEY for key index.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_WEP_KEY1,
+ g_param_spec_string (NM_SETTING_WIRELESS_SECURITY_WEP_KEY1, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_SECRET |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: wep-key2
+ * variable: KEY3, KEY_PASSPHRASE3(+)
+ * description: WEP key with index 2. See also DEFAULTKEY for key index.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_WEP_KEY2,
+ g_param_spec_string (NM_SETTING_WIRELESS_SECURITY_WEP_KEY2, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_SECRET |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: wep-key3
+ * variable: KEY4, KEY_PASSPHRASE4(+)
+ * description: WEP key with index 3. See also DEFAULTKEY for key index.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_WEP_KEY3,
+ g_param_spec_string (NM_SETTING_WIRELESS_SECURITY_WEP_KEY3, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_SECRET |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingWirelessSecurity:wep-key-flags:
+ *
+ * Flags indicating how to handle the #NMSettingWirelessSecurity:wep-key0,
+ * #NMSettingWirelessSecurity:wep-key1, #NMSettingWirelessSecurity:wep-key2,
+ * and #NMSettingWirelessSecurity:wep-key3 properties.
+ **/
+ /* ---ifcfg-rh---
+ * property: wep-key-flags
+ * variable: WEP_KEY_FLAGS(+)
+ * format: NMSettingSecretFlags
+ * description: Password flags for KEY<i>, KEY_PASSPHRASE<i> password.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_WEP_KEY_FLAGS,
+ g_param_spec_flags (NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS, "", "",
+ NM_TYPE_SETTING_SECRET_FLAGS,
+ NM_SETTING_SECRET_FLAG_NONE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingWirelessSecurity:psk:
+ *
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: psk
+ * variable: WPA_PSK
+ * description: Pre-Shared-Key for WPA networks.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PSK,
+ g_param_spec_string (NM_SETTING_WIRELESS_SECURITY_PSK, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_SECRET |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingWirelessSecurity:psk-flags:
+ *
+ * Flags indicating how to handle the #NMSettingWirelessSecurity:psk
+ * property.
+ **/
+ /* ---ifcfg-rh---
+ * property: psk-flags
+ * variable: WPA_PSK_FLAGS(+)
+ * format: NMSettingSecretFlags
+ * description: Password flags for WPA_PSK_FLAGS.
+ * example: WPA_PSK_FLAGS=user
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_PSK_FLAGS,
+ g_param_spec_flags (NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS, "", "",
+ NM_TYPE_SETTING_SECRET_FLAGS,
+ NM_SETTING_SECRET_FLAG_NONE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingWirelessSecurity:leap-password:
+ *
+ * The login password for legacy LEAP connections (ie, key-mgmt =
+ * "ieee8021x" and auth-alg = "leap").
+ **/
+ /* ---ifcfg-rh---
+ * property: leap-password
+ * variable: IEEE_8021X_PASSWORD(+)
+ * description: Password for LEAP. It can also go to "key-"
+ * lookaside file, or it can be owned by a secret agent.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_LEAP_PASSWORD,
+ g_param_spec_string (NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_SECRET |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingWirelessSecurity:leap-password-flags:
+ *
+ * Flags indicating how to handle the
+ * #NMSettingWirelessSecurity:leap-password property.
+ **/
+ /* ---ifcfg-rh---
+ * property: leap-password-flags
+ * variable: IEEE_8021X_PASSWORD_FLAGS(+)
+ * format: NMSettingSecretFlags
+ * description: Password flags for IEEE_8021X_PASSWORD_FLAGS.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_LEAP_PASSWORD_FLAGS,
+ g_param_spec_flags (NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS, "", "",
+ NM_TYPE_SETTING_SECRET_FLAGS,
+ NM_SETTING_SECRET_FLAG_NONE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingWirelessSecurity:wep-key-type:
+ *
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: wep-key-type
+ * variable: KEY<i> or KEY_PASSPHRASE<i>(+)
+ * description: KEY is used for "key" type (10 or 26 hexadecimal characters,
+ * or 5 or 13 character string prefixed with "s:"). KEY_PASSPHRASE is used
+ * for WEP passphrases.
+ * example: KEY1=s:ahoj, KEY1=0a1c45bc02, KEY_PASSPHRASE1=mysupersecretkey
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_WEP_KEY_TYPE,
+ g_param_spec_enum (NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE, "", "",
+ NM_TYPE_WEP_KEY_TYPE,
+ NM_WEP_KEY_TYPE_UNKNOWN,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+ _nm_setting_class_transform_property (parent_class,
+ NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE,
+ G_VARIANT_TYPE_UINT32,
+ wep_key_type_to_dbus,
+ NULL);
+}
diff --git a/libnm-core/nm-setting-wireless-security.h b/libnm-core/nm-setting-wireless-security.h
new file mode 100644
index 000000000..8c4e1f038
--- /dev/null
+++ b/libnm-core/nm-setting-wireless-security.h
@@ -0,0 +1,147 @@
+/* -*- 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 2007 - 2014 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ */
+
+#ifndef __NM_SETTING_WIRELESS_SECURITY_H__
+#define __NM_SETTING_WIRELESS_SECURITY_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-setting.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_WIRELESS_SECURITY (nm_setting_wireless_security_get_type ())
+#define NM_SETTING_WIRELESS_SECURITY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SETTING_WIRELESS_SECURITY, NMSettingWirelessSecurity))
+#define NM_SETTING_WIRELESS_SECURITY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SETTING_WIRELESS_SECURITY, NMSettingWirelessSecurityClass))
+#define NM_IS_SETTING_WIRELESS_SECURITY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SETTING_WIRELESS_SECURITY))
+#define NM_IS_SETTING_WIRELESS_SECURITY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_SETTING_WIRELESS_SECURITY))
+#define NM_SETTING_WIRELESS_SECURITY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SETTING_WIRELESS_SECURITY, NMSettingWirelessSecurityClass))
+
+#define NM_SETTING_WIRELESS_SECURITY_SETTING_NAME "802-11-wireless-security"
+
+/**
+ * NMWepKeyType:
+ * @NM_WEP_KEY_TYPE_UNKNOWN: unknown WEP key type
+ * @NM_WEP_KEY_TYPE_KEY: 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").
+ * @NM_WEP_KEY_TYPE_PASSPHRASE: indicates a WEP passphrase (ex "I bought a duck
+ * on my way back from the market 235Q&^%^*%") 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.
+ * @NM_WEP_KEY_TYPE_LAST: placeholder value for bounds-checking
+ *
+ * The #NMWepKeyType 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.
+ */
+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;
+
+#define NM_SETTING_WIRELESS_SECURITY_KEY_MGMT "key-mgmt"
+#define NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX "wep-tx-keyidx"
+#define NM_SETTING_WIRELESS_SECURITY_AUTH_ALG "auth-alg"
+#define NM_SETTING_WIRELESS_SECURITY_PROTO "proto"
+#define NM_SETTING_WIRELESS_SECURITY_PAIRWISE "pairwise"
+#define NM_SETTING_WIRELESS_SECURITY_GROUP "group"
+#define NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME "leap-username"
+#define NM_SETTING_WIRELESS_SECURITY_WEP_KEY0 "wep-key0"
+#define NM_SETTING_WIRELESS_SECURITY_WEP_KEY1 "wep-key1"
+#define NM_SETTING_WIRELESS_SECURITY_WEP_KEY2 "wep-key2"
+#define NM_SETTING_WIRELESS_SECURITY_WEP_KEY3 "wep-key3"
+#define NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS "wep-key-flags"
+#define NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE "wep-key-type"
+#define NM_SETTING_WIRELESS_SECURITY_PSK "psk"
+#define NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS "psk-flags"
+#define NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD "leap-password"
+#define NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS "leap-password-flags"
+
+struct _NMSettingWirelessSecurity {
+ NMSetting parent;
+};
+
+typedef struct {
+ NMSettingClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMSettingWirelessSecurityClass;
+
+GType nm_setting_wireless_security_get_type (void);
+
+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);
+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);
+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);
+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);
+
+const char *nm_setting_wireless_security_get_leap_username (NMSettingWirelessSecurity *setting);
+const char *nm_setting_wireless_security_get_leap_password (NMSettingWirelessSecurity *setting);
+NMSettingSecretFlags nm_setting_wireless_security_get_leap_password_flags (NMSettingWirelessSecurity *setting);
+
+const char *nm_setting_wireless_security_get_wep_key (NMSettingWirelessSecurity *setting, guint32 idx);
+void nm_setting_wireless_security_set_wep_key (NMSettingWirelessSecurity *setting, guint32 idx, const char *key);
+guint32 nm_setting_wireless_security_get_wep_tx_keyidx (NMSettingWirelessSecurity *setting);
+const char *nm_setting_wireless_security_get_auth_alg (NMSettingWirelessSecurity *setting);
+
+NMSettingSecretFlags nm_setting_wireless_security_get_wep_key_flags (NMSettingWirelessSecurity *setting);
+NMWepKeyType nm_setting_wireless_security_get_wep_key_type (NMSettingWirelessSecurity *setting);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_WIRELESS_SECURITY_H__ */
diff --git a/libnm-core/nm-setting-wireless.c b/libnm-core/nm-setting-wireless.c
new file mode 100644
index 000000000..f8d22c2d0
--- /dev/null
+++ b/libnm-core/nm-setting-wireless.c
@@ -0,0 +1,1335 @@
+/* -*- 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 2007 - 2014 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <net/ethernet.h>
+#include <glib/gi18n-lib.h>
+
+#include "nm-setting-wireless.h"
+#include "nm-dbus-interface.h"
+#include "nm-utils.h"
+#include "nm-utils-private.h"
+#include "nm-setting-private.h"
+
+/**
+ * SECTION:nm-setting-wireless
+ * @short_description: Describes connection properties for 802.11 Wi-Fi networks
+ *
+ * The #NMSettingWireless object is a #NMSetting subclass that describes properties
+ * necessary for connection to 802.11 Wi-Fi networks.
+ **/
+
+G_DEFINE_TYPE_WITH_CODE (NMSettingWireless, nm_setting_wireless, NM_TYPE_SETTING,
+ _nm_register_setting (WIRELESS, 1))
+NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_WIRELESS)
+
+#define NM_SETTING_WIRELESS_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_WIRELESS, NMSettingWirelessPrivate))
+
+typedef struct {
+ GBytes *ssid;
+ char *mode;
+ char *band;
+ guint32 channel;
+ char *bssid;
+ guint32 rate;
+ guint32 tx_power;
+ char *device_mac_address;
+ char *cloned_mac_address;
+ GArray *mac_address_blacklist;
+ guint32 mtu;
+ GSList *seen_bssids;
+ gboolean hidden;
+} NMSettingWirelessPrivate;
+
+enum {
+ PROP_0,
+ PROP_SSID,
+ PROP_MODE,
+ PROP_BAND,
+ PROP_CHANNEL,
+ PROP_BSSID,
+ PROP_RATE,
+ PROP_TX_POWER,
+ PROP_MAC_ADDRESS,
+ PROP_CLONED_MAC_ADDRESS,
+ PROP_MAC_ADDRESS_BLACKLIST,
+ PROP_MTU,
+ PROP_SEEN_BSSIDS,
+ PROP_HIDDEN,
+
+ LAST_PROP
+};
+
+static gboolean
+match_cipher (const char *cipher,
+ const char *expected,
+ guint32 wpa_flags,
+ guint32 rsn_flags,
+ guint32 flag)
+{
+ if (strcmp (cipher, expected) != 0)
+ return FALSE;
+
+ if (!(wpa_flags & flag) && !(rsn_flags & flag))
+ return FALSE;
+
+ return TRUE;
+}
+
+/**
+ * nm_setting_wireless_ap_security_compatible:
+ * @s_wireless: a #NMSettingWireless
+ * @s_wireless_sec: a #NMSettingWirelessSecurity or %NULL
+ * @ap_flags: the %NM80211ApFlags of the given access point
+ * @ap_wpa: the %NM80211ApSecurityFlags of the given access point's WPA
+ * capabilities
+ * @ap_rsn: the %NM80211ApSecurityFlags of the given access point's WPA2/RSN
+ * capabilities
+ * @ap_mode: the 802.11 mode of the AP, either Ad-Hoc or Infrastructure
+ *
+ * Given a #NMSettingWireless and an optional #NMSettingWirelessSecurity,
+ * 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.
+ *
+ * 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,
+ NM80211ApFlags ap_flags,
+ NM80211ApSecurityFlags ap_wpa,
+ NM80211ApSecurityFlags ap_rsn,
+ NM80211Mode ap_mode)
+{
+ const char *key_mgmt = NULL, *cipher;
+ guint32 num, i;
+ gboolean found = FALSE;
+
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS (s_wireless), FALSE);
+
+ 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))
+ return FALSE;
+ return TRUE;
+ }
+
+ key_mgmt = nm_setting_wireless_security_get_key_mgmt (s_wireless_sec);
+ if (!key_mgmt)
+ return FALSE;
+
+ /* Static WEP */
+ if (!strcmp (key_mgmt, "none")) {
+ 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))
+ return FALSE;
+ return TRUE;
+ }
+
+ /* Adhoc WPA */
+ if (!strcmp (key_mgmt, "wpa-none")) {
+ if (ap_mode != NM_802_11_MODE_ADHOC)
+ return FALSE;
+ /* FIXME: validate ciphers if they're in the beacon */
+ return TRUE;
+ }
+
+ /* Adhoc WPA2 (ie, RSN IBSS) */
+ if (ap_mode == NM_802_11_MODE_ADHOC) {
+ if (strcmp (key_mgmt, "wpa-psk"))
+ return FALSE;
+
+ /* Ensure the AP has RSN PSK capability */
+ if (!(ap_rsn & NM_802_11_AP_SEC_KEY_MGMT_PSK))
+ return FALSE;
+
+ /* Fall through and check ciphers in generic WPA-PSK code */
+ }
+
+ /* Dynamic WEP or LEAP */
+ if (!strcmp (key_mgmt, "ieee8021x")) {
+ if (!(ap_flags & NM_802_11_AP_FLAGS_PRIVACY))
+ return FALSE;
+
+ /* If the AP is advertising a WPA IE, make sure it supports WEP ciphers */
+ if (ap_wpa != NM_802_11_AP_SEC_NONE) {
+ if (!(ap_wpa & NM_802_11_AP_SEC_KEY_MGMT_802_1X))
+ return FALSE;
+
+ /* quick check; can't use AP if it doesn't support at least one
+ * WEP cipher in both pairwise and group suites.
+ */
+ if ( !(ap_wpa & (NM_802_11_AP_SEC_PAIR_WEP40 | NM_802_11_AP_SEC_PAIR_WEP104))
+ || !(ap_wpa & (NM_802_11_AP_SEC_GROUP_WEP40 | NM_802_11_AP_SEC_GROUP_WEP104)))
+ return FALSE;
+
+ /* Match at least one pairwise cipher with AP's capability if the
+ * wireless-security setting explicitly lists pairwise ciphers
+ */
+ num = nm_setting_wireless_security_get_num_pairwise (s_wireless_sec);
+ for (i = 0, found = FALSE; i < num; i++) {
+ cipher = nm_setting_wireless_security_get_pairwise (s_wireless_sec, i);
+ if ((found = match_cipher (cipher, "wep40", ap_wpa, ap_wpa, NM_802_11_AP_SEC_PAIR_WEP40)))
+ break;
+ if ((found = match_cipher (cipher, "wep104", ap_wpa, ap_wpa, NM_802_11_AP_SEC_PAIR_WEP104)))
+ break;
+ }
+ if (!found && num)
+ return FALSE;
+
+ /* Match at least one group cipher with AP's capability if the
+ * wireless-security setting explicitly lists group ciphers
+ */
+ num = nm_setting_wireless_security_get_num_groups (s_wireless_sec);
+ for (i = 0, found = FALSE; i < num; i++) {
+ cipher = nm_setting_wireless_security_get_group (s_wireless_sec, i);
+ if ((found = match_cipher (cipher, "wep40", ap_wpa, ap_wpa, NM_802_11_AP_SEC_GROUP_WEP40)))
+ break;
+ if ((found = match_cipher (cipher, "wep104", ap_wpa, ap_wpa, NM_802_11_AP_SEC_GROUP_WEP104)))
+ break;
+ }
+ if (!found && num)
+ return FALSE;
+ }
+ return TRUE;
+ }
+
+ /* WPA[2]-PSK and WPA[2] Enterprise */
+ if ( !strcmp (key_mgmt, "wpa-psk")
+ || !strcmp (key_mgmt, "wpa-eap")) {
+
+ if (!strcmp (key_mgmt, "wpa-psk")) {
+ if ( !(ap_wpa & NM_802_11_AP_SEC_KEY_MGMT_PSK)
+ && !(ap_rsn & NM_802_11_AP_SEC_KEY_MGMT_PSK))
+ return FALSE;
+ } else if (!strcmp (key_mgmt, "wpa-eap")) {
+ if ( !(ap_wpa & NM_802_11_AP_SEC_KEY_MGMT_802_1X)
+ && !(ap_rsn & NM_802_11_AP_SEC_KEY_MGMT_802_1X))
+ return FALSE;
+ }
+
+ // FIXME: should handle WPA and RSN separately here to ensure that
+ // if the Connection only uses WPA we don't match a cipher against
+ // the AP's RSN IE instead
+
+ /* Match at least one pairwise cipher with AP's capability if the
+ * wireless-security setting explicitly lists pairwise ciphers
+ */
+ num = nm_setting_wireless_security_get_num_pairwise (s_wireless_sec);
+ for (i = 0, found = FALSE; i < num; i++) {
+ cipher = nm_setting_wireless_security_get_pairwise (s_wireless_sec, i);
+ if ((found = match_cipher (cipher, "tkip", ap_wpa, ap_rsn, NM_802_11_AP_SEC_PAIR_TKIP)))
+ break;
+ if ((found = match_cipher (cipher, "ccmp", ap_wpa, ap_rsn, NM_802_11_AP_SEC_PAIR_CCMP)))
+ break;
+ }
+ if (!found && num)
+ return FALSE;
+
+ /* Match at least one group cipher with AP's capability if the
+ * wireless-security setting explicitly lists group ciphers
+ */
+ num = nm_setting_wireless_security_get_num_groups (s_wireless_sec);
+ for (i = 0, found = FALSE; i < num; i++) {
+ cipher = nm_setting_wireless_security_get_group (s_wireless_sec, i);
+
+ if ((found = match_cipher (cipher, "wep40", ap_wpa, ap_rsn, NM_802_11_AP_SEC_GROUP_WEP40)))
+ break;
+ if ((found = match_cipher (cipher, "wep104", ap_wpa, ap_rsn, NM_802_11_AP_SEC_GROUP_WEP104)))
+ break;
+ if ((found = match_cipher (cipher, "tkip", ap_wpa, ap_rsn, NM_802_11_AP_SEC_GROUP_TKIP)))
+ break;
+ if ((found = match_cipher (cipher, "ccmp", ap_wpa, ap_rsn, NM_802_11_AP_SEC_GROUP_CCMP)))
+ break;
+ }
+ if (!found && num)
+ return FALSE;
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/**
+ * nm_setting_wireless_new:
+ *
+ * Creates a new #NMSettingWireless object with default values.
+ *
+ * Returns: (transfer full): the new empty #NMSettingWireless object
+ **/
+NMSetting *
+nm_setting_wireless_new (void)
+{
+ return (NMSetting *) g_object_new (NM_TYPE_SETTING_WIRELESS, NULL);
+}
+
+/**
+ * nm_setting_wireless_get_ssid:
+ * @setting: the #NMSettingWireless
+ *
+ * Returns: (transfer none): the #NMSettingWireless:ssid property of the setting
+ **/
+GBytes *
+nm_setting_wireless_get_ssid (NMSettingWireless *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS (setting), NULL);
+
+ return NM_SETTING_WIRELESS_GET_PRIVATE (setting)->ssid;
+}
+
+/**
+ * nm_setting_wireless_get_mode:
+ * @setting: the #NMSettingWireless
+ *
+ * Returns: the #NMSettingWireless:mode property of the setting
+ **/
+const char *
+nm_setting_wireless_get_mode (NMSettingWireless *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS (setting), NULL);
+
+ return NM_SETTING_WIRELESS_GET_PRIVATE (setting)->mode;
+}
+
+/**
+ * nm_setting_wireless_get_band:
+ * @setting: the #NMSettingWireless
+ *
+ * Returns: the #NMSettingWireless:band property of the setting
+ **/
+const char *
+nm_setting_wireless_get_band (NMSettingWireless *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS (setting), NULL);
+
+ return NM_SETTING_WIRELESS_GET_PRIVATE (setting)->band;
+}
+
+/**
+ * nm_setting_wireless_get_channel:
+ * @setting: the #NMSettingWireless
+ *
+ * Returns: the #NMSettingWireless:channel property of the setting
+ **/
+guint32
+nm_setting_wireless_get_channel (NMSettingWireless *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS (setting), 0);
+
+ return NM_SETTING_WIRELESS_GET_PRIVATE (setting)->channel;
+}
+
+/**
+ * nm_setting_wireless_get_bssid:
+ * @setting: the #NMSettingWireless
+ *
+ * Returns: the #NMSettingWireless:bssid property of the setting
+ **/
+const char *
+nm_setting_wireless_get_bssid (NMSettingWireless *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS (setting), NULL);
+
+ return NM_SETTING_WIRELESS_GET_PRIVATE (setting)->bssid;
+}
+
+/**
+ * nm_setting_wireless_get_rate:
+ * @setting: the #NMSettingWireless
+ *
+ * Returns: the #NMSettingWireless:rate property of the setting
+ **/
+guint32
+nm_setting_wireless_get_rate (NMSettingWireless *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS (setting), 0);
+
+ return NM_SETTING_WIRELESS_GET_PRIVATE (setting)->rate;
+}
+
+/**
+ * nm_setting_wireless_get_tx_power:
+ * @setting: the #NMSettingWireless
+ *
+ * Returns: the #NMSettingWireless:tx-power property of the setting
+ **/
+guint32
+nm_setting_wireless_get_tx_power (NMSettingWireless *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS (setting), 0);
+
+ return NM_SETTING_WIRELESS_GET_PRIVATE (setting)->tx_power;
+}
+
+/**
+ * nm_setting_wireless_get_mac_address:
+ * @setting: the #NMSettingWireless
+ *
+ * Returns: the #NMSettingWireless:mac-address property of the setting
+ **/
+const char *
+nm_setting_wireless_get_mac_address (NMSettingWireless *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS (setting), NULL);
+
+ return NM_SETTING_WIRELESS_GET_PRIVATE (setting)->device_mac_address;
+}
+
+/**
+ * nm_setting_wireless_get_cloned_mac_address:
+ * @setting: the #NMSettingWireless
+ *
+ * Returns: the #NMSettingWireless:cloned-mac-address property of the setting
+ **/
+const char *
+nm_setting_wireless_get_cloned_mac_address (NMSettingWireless *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS (setting), NULL);
+
+ return NM_SETTING_WIRELESS_GET_PRIVATE (setting)->cloned_mac_address;
+}
+
+/**
+ * nm_setting_wireless_get_mac_address_blacklist:
+ * @setting: the #NMSettingWireless
+ *
+ * Returns: the #NMSettingWireless:mac-address-blacklist property of the setting
+ **/
+const char * const *
+nm_setting_wireless_get_mac_address_blacklist (NMSettingWireless *setting)
+{
+ NMSettingWirelessPrivate *priv;
+
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS (setting), NULL);
+
+ priv = NM_SETTING_WIRELESS_GET_PRIVATE (setting);
+ return (const char * const *) priv->mac_address_blacklist->data;
+}
+
+/**
+ * nm_setting_wireless_get_num_mac_blacklist_items:
+ * @setting: the #NMSettingWireless
+ *
+ * Returns: the number of blacklisted MAC addresses
+ **/
+guint32
+nm_setting_wireless_get_num_mac_blacklist_items (NMSettingWireless *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS (setting), 0);
+
+ return NM_SETTING_WIRELESS_GET_PRIVATE (setting)->mac_address_blacklist->len;
+}
+
+/**
+ * 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
+ **/
+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 <= priv->mac_address_blacklist->len, NULL);
+
+ return g_array_index (priv->mac_address_blacklist, const char *, 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
+ **/
+gboolean
+nm_setting_wireless_add_mac_blacklist_item (NMSettingWireless *setting, const char *mac)
+{
+ NMSettingWirelessPrivate *priv;
+ const char *candidate;
+ int i;
+
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS (setting), FALSE);
+ g_return_val_if_fail (mac != NULL, FALSE);
+
+ if (!nm_utils_hwaddr_valid (mac, ETH_ALEN))
+ return FALSE;
+
+ priv = NM_SETTING_WIRELESS_GET_PRIVATE (setting);
+ for (i = 0; i < priv->mac_address_blacklist->len; i++) {
+ candidate = g_array_index (priv->mac_address_blacklist, char *, i);
+ if (nm_utils_hwaddr_matches (mac, -1, candidate, -1))
+ return FALSE;
+ }
+
+ mac = nm_utils_hwaddr_canonical (mac, ETH_ALEN);
+ g_array_append_val (priv->mac_address_blacklist, mac);
+ 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.
+ **/
+void
+nm_setting_wireless_remove_mac_blacklist_item (NMSettingWireless *setting, guint32 idx)
+{
+ NMSettingWirelessPrivate *priv;
+
+ g_return_if_fail (NM_IS_SETTING_WIRELESS (setting));
+
+ priv = NM_SETTING_WIRELESS_GET_PRIVATE (setting);
+ g_return_if_fail (idx < priv->mac_address_blacklist->len);
+
+ g_array_remove_index (priv->mac_address_blacklist, idx);
+ 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.
+ **/
+gboolean
+nm_setting_wireless_remove_mac_blacklist_item_by_value (NMSettingWireless *setting, const char *mac)
+{
+ NMSettingWirelessPrivate *priv;
+ const char *candidate;
+ int i;
+
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS (setting), FALSE);
+ g_return_val_if_fail (mac != NULL, FALSE);
+
+ priv = NM_SETTING_WIRELESS_GET_PRIVATE (setting);
+ for (i = 0; i < priv->mac_address_blacklist->len; i++) {
+ candidate = g_array_index (priv->mac_address_blacklist, char *, i);
+ if (!nm_utils_hwaddr_matches (mac, -1, candidate, -1)) {
+ g_array_remove_index (priv->mac_address_blacklist, i);
+ 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.
+ **/
+void
+nm_setting_wireless_clear_mac_blacklist_items (NMSettingWireless *setting)
+{
+ g_return_if_fail (NM_IS_SETTING_WIRELESS (setting));
+
+ g_array_set_size (NM_SETTING_WIRELESS_GET_PRIVATE (setting)->mac_address_blacklist, 0);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST);
+}
+
+/**
+ * nm_setting_wireless_get_mtu:
+ * @setting: the #NMSettingWireless
+ *
+ * Returns: the #NMSettingWireless:mtu property of the setting
+ **/
+guint32
+nm_setting_wireless_get_mtu (NMSettingWireless *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS (setting), 0);
+
+ return NM_SETTING_WIRELESS_GET_PRIVATE (setting)->mtu;
+}
+
+/**
+ * nm_setting_wireless_get_hidden:
+ * @setting: the #NMSettingWireless
+ *
+ * Returns: the #NMSettingWireless:hidden property of the setting
+ **/
+gboolean
+nm_setting_wireless_get_hidden (NMSettingWireless *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS (setting), FALSE);
+
+ return NM_SETTING_WIRELESS_GET_PRIVATE (setting)->hidden;
+}
+
+/**
+ * nm_setting_wireless_add_seen_bssid:
+ * @setting: the #NMSettingWireless
+ * @bssid: the new BSSID to add to the list
+ *
+ * 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.
+ *
+ * Returns: %TRUE if @bssid was already known, %FALSE if not
+ **/
+gboolean
+nm_setting_wireless_add_seen_bssid (NMSettingWireless *setting,
+ const char *bssid)
+{
+ NMSettingWirelessPrivate *priv;
+ char *lower_bssid;
+ GSList *iter;
+ gboolean found = FALSE;
+
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS (setting), FALSE);
+ g_return_val_if_fail (bssid != NULL, FALSE);
+
+ lower_bssid = g_ascii_strdown (bssid, -1);
+ if (!lower_bssid)
+ return FALSE;
+
+ priv = NM_SETTING_WIRELESS_GET_PRIVATE (setting);
+
+ for (iter = priv->seen_bssids; iter; iter = iter->next) {
+ if (!strcmp ((char *) iter->data, lower_bssid)) {
+ found = TRUE;
+ break;
+ }
+ }
+
+ if (!found) {
+ priv->seen_bssids = g_slist_prepend (priv->seen_bssids, lower_bssid);
+ g_object_notify (G_OBJECT (setting), NM_SETTING_WIRELESS_SEEN_BSSIDS);
+ } else
+ g_free (lower_bssid);
+
+ return !found;
+}
+
+/**
+ * nm_setting_wireless_get_num_seen_bssids:
+ * @setting: the #NMSettingWireless
+ *
+ * Returns: the number of BSSIDs in the previously seen BSSID list
+ **/
+guint32
+nm_setting_wireless_get_num_seen_bssids (NMSettingWireless *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS (setting), 0);
+
+ return g_slist_length (NM_SETTING_WIRELESS_GET_PRIVATE (setting)->seen_bssids);
+}
+
+/**
+ * nm_setting_wireless_get_seen_bssid:
+ * @setting: the #NMSettingWireless
+ * @i: index of a BSSID in the previously seen BSSID list
+ *
+ * Returns: the BSSID at index @i
+ **/
+const char *
+nm_setting_wireless_get_seen_bssid (NMSettingWireless *setting,
+ guint32 i)
+{
+ g_return_val_if_fail (NM_IS_SETTING_WIRELESS (setting), NULL);
+
+ return (const char *) g_slist_nth_data (NM_SETTING_WIRELESS_GET_PRIVATE (setting)->seen_bssids, i);
+}
+
+static gboolean
+verify (NMSetting *setting, NMConnection *connection, GError **error)
+{
+ NMSettingWirelessPrivate *priv = NM_SETTING_WIRELESS_GET_PRIVATE (setting);
+ const char *valid_modes[] = { NM_SETTING_WIRELESS_MODE_INFRA, NM_SETTING_WIRELESS_MODE_ADHOC, NM_SETTING_WIRELESS_MODE_AP, NULL };
+ const char *valid_bands[] = { "a", "bg", NULL };
+ GSList *iter;
+ int i;
+ gsize length;
+
+ if (!priv->ssid) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_MISSING_PROPERTY,
+ _("property is missing"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SETTING_NAME, NM_SETTING_WIRELESS_SSID);
+ return FALSE;
+ }
+
+ length = g_bytes_get_size (priv->ssid);
+ if (length == 0 || length > 32) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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;
+ }
+
+ if (priv->mode && !_nm_utils_string_in_list (priv->mode, valid_modes)) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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;
+ }
+
+ if (priv->band && !_nm_utils_string_in_list (priv->band, valid_bands)) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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;
+ }
+
+ if (priv->channel && !priv->band) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_MISSING_PROPERTY,
+ _("'%s' requires setting '%s' property"),
+ NM_SETTING_WIRELESS_CHANNEL, NM_SETTING_WIRELESS_BAND);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SETTING_NAME, NM_SETTING_WIRELESS_BAND);
+ return FALSE;
+ }
+
+ if (priv->channel) {
+ if (!nm_utils_wifi_is_channel_valid (priv->channel, priv->band)) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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 && !nm_utils_hwaddr_valid (priv->bssid, ETH_ALEN)) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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 && !nm_utils_hwaddr_valid (priv->device_mac_address, ETH_ALEN)) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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 && !nm_utils_hwaddr_valid (priv->cloned_mac_address, ETH_ALEN)) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_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;
+ }
+
+ for (i = 0; i < priv->mac_address_blacklist->len; i++) {
+ const char *mac = g_array_index (priv->mac_address_blacklist, const char *, i);
+
+ if (!nm_utils_hwaddr_valid (mac, ETH_ALEN)) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%s' is not a valid MAC address"),
+ mac);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SETTING_NAME, NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST);
+ return FALSE;
+ }
+ }
+
+ for (iter = priv->seen_bssids; iter; iter = iter->next) {
+ if (!nm_utils_hwaddr_valid (iter->data, ETH_ALEN)) {
+ g_set_error (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%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;
+ }
+ }
+
+ return TRUE;
+}
+
+static GVariant *
+nm_setting_wireless_get_security (NMSetting *setting,
+ NMConnection *connection,
+ const char *property_name)
+{
+ if (nm_connection_get_setting_wireless_security (connection))
+ return g_variant_new_string (NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
+ else
+ return NULL;
+}
+
+static void
+clear_blacklist_item (char **item_p)
+{
+ g_free (*item_p);
+}
+
+static void
+nm_setting_wireless_init (NMSettingWireless *setting)
+{
+ NMSettingWirelessPrivate *priv = NM_SETTING_WIRELESS_GET_PRIVATE (setting);
+
+ /* We use GArray rather than GPtrArray so it will automatically be NULL-terminated */
+ priv->mac_address_blacklist = g_array_new (TRUE, FALSE, sizeof (char *));
+ g_array_set_clear_func (priv->mac_address_blacklist, (GDestroyNotify) clear_blacklist_item);
+}
+
+static void
+finalize (GObject *object)
+{
+ NMSettingWirelessPrivate *priv = NM_SETTING_WIRELESS_GET_PRIVATE (object);
+
+ g_free (priv->mode);
+ g_free (priv->band);
+
+ if (priv->ssid)
+ g_bytes_unref (priv->ssid);
+ g_free (priv->bssid);
+ g_free (priv->device_mac_address);
+ g_free (priv->cloned_mac_address);
+ g_array_unref (priv->mac_address_blacklist);
+ g_slist_free_full (priv->seen_bssids, g_free);
+
+ G_OBJECT_CLASS (nm_setting_wireless_parent_class)->finalize (object);
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ NMSettingWirelessPrivate *priv = NM_SETTING_WIRELESS_GET_PRIVATE (object);
+ const char * const *blacklist;
+ const char *mac;
+ int i;
+
+ switch (prop_id) {
+ case PROP_SSID:
+ if (priv->ssid)
+ g_bytes_unref (priv->ssid);
+ priv->ssid = g_value_dup_boxed (value);
+ break;
+ case PROP_MODE:
+ g_free (priv->mode);
+ priv->mode = g_value_dup_string (value);
+ break;
+ case PROP_BAND:
+ g_free (priv->band);
+ priv->band = g_value_dup_string (value);
+ break;
+ case PROP_CHANNEL:
+ priv->channel = g_value_get_uint (value);
+ break;
+ case PROP_BSSID:
+ g_free (priv->bssid);
+ priv->bssid = g_value_dup_string (value);
+ break;
+ case PROP_RATE:
+ priv->rate = g_value_get_uint (value);
+ break;
+ case PROP_TX_POWER:
+ priv->tx_power = g_value_get_uint (value);
+ break;
+ case PROP_MAC_ADDRESS:
+ g_free (priv->device_mac_address);
+ priv->device_mac_address = _nm_utils_hwaddr_canonical_or_invalid (g_value_get_string (value),
+ ETH_ALEN);
+ break;
+ case PROP_CLONED_MAC_ADDRESS:
+ g_free (priv->cloned_mac_address);
+ priv->cloned_mac_address = _nm_utils_hwaddr_canonical_or_invalid (g_value_get_string (value),
+ ETH_ALEN);
+ break;
+ case PROP_MAC_ADDRESS_BLACKLIST:
+ blacklist = g_value_get_boxed (value);
+ g_array_set_size (priv->mac_address_blacklist, 0);
+ if (blacklist && *blacklist) {
+ for (i = 0; blacklist[i]; i++) {
+ mac = _nm_utils_hwaddr_canonical_or_invalid (blacklist[i], ETH_ALEN);
+ g_array_append_val (priv->mac_address_blacklist, mac);
+ }
+ }
+ break;
+ case PROP_MTU:
+ priv->mtu = g_value_get_uint (value);
+ break;
+ case PROP_SEEN_BSSIDS:
+ g_slist_free_full (priv->seen_bssids, g_free);
+ priv->seen_bssids = _nm_utils_strv_to_slist (g_value_get_boxed (value));
+ break;
+ case PROP_HIDDEN:
+ priv->hidden = g_value_get_boolean (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)
+{
+ NMSettingWireless *setting = NM_SETTING_WIRELESS (object);
+ NMSettingWirelessPrivate *priv = NM_SETTING_WIRELESS_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_SSID:
+ g_value_set_boxed (value, nm_setting_wireless_get_ssid (setting));
+ break;
+ case PROP_MODE:
+ g_value_set_string (value, nm_setting_wireless_get_mode (setting));
+ break;
+ case PROP_BAND:
+ g_value_set_string (value, nm_setting_wireless_get_band (setting));
+ break;
+ case PROP_CHANNEL:
+ g_value_set_uint (value, nm_setting_wireless_get_channel (setting));
+ break;
+ case PROP_BSSID:
+ g_value_set_string (value, nm_setting_wireless_get_bssid (setting));
+ break;
+ case PROP_RATE:
+ g_value_set_uint (value, nm_setting_wireless_get_rate (setting));
+ break;
+ case PROP_TX_POWER:
+ g_value_set_uint (value, nm_setting_wireless_get_tx_power (setting));
+ break;
+ case PROP_MAC_ADDRESS:
+ g_value_set_string (value, nm_setting_wireless_get_mac_address (setting));
+ break;
+ case PROP_CLONED_MAC_ADDRESS:
+ g_value_set_string (value, nm_setting_wireless_get_cloned_mac_address (setting));
+ break;
+ case PROP_MAC_ADDRESS_BLACKLIST:
+ g_value_set_boxed (value, (char **) priv->mac_address_blacklist->data);
+ break;
+ case PROP_MTU:
+ g_value_set_uint (value, nm_setting_wireless_get_mtu (setting));
+ break;
+ case PROP_SEEN_BSSIDS:
+ g_value_take_boxed (value, _nm_utils_slist_to_strv (priv->seen_bssids));
+ break;
+ case PROP_HIDDEN:
+ g_value_set_boolean (value, nm_setting_wireless_get_hidden (setting));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_setting_wireless_class_init (NMSettingWirelessClass *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 (NMSettingWirelessPrivate));
+
+ /* virtual methods */
+ object_class->set_property = set_property;
+ object_class->get_property = get_property;
+ object_class->finalize = finalize;
+ parent_class->verify = verify;
+
+ /* Properties */
+ /**
+ * NMSettingWireless:ssid:
+ *
+ * SSID of the Wi-Fi network. Must be specified.
+ **/
+ /* ---keyfile---
+ * property: ssid
+ * format: string (or decimal-byte list - obsolete)
+ * description: SSID of Wi-Fi network.
+ * example: ssid=Quick Net
+ * ---end---
+ * ---ifcfg-rh---
+ * property: ssid
+ * variable: ESSID
+ * description: SSID of Wi-Fi network.
+ * example: ESSID="Quick Net"
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_SSID,
+ g_param_spec_boxed (NM_SETTING_WIRELESS_SSID, "", "",
+ G_TYPE_BYTES,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingWireless:mode:
+ *
+ * Wi-Fi network mode; one of "infrastructure", "adhoc" or "ap". If blank,
+ * infrastructure is assumed.
+ **/
+ /* ---ifcfg-rh---
+ * property: mode
+ * variable: MODE
+ * values: Ad-Hoc, Managed (Auto) [case insensitive]
+ * description: Wi-Fi network mode.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_MODE,
+ g_param_spec_string (NM_SETTING_WIRELESS_MODE, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: band
+ * variable: BAND(+)
+ * values: a, bg
+ * description: BAND alone is honored, but CHANNEL overrides BAND since it
+ * implies a band.
+ * example: BAND=bg
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_BAND,
+ g_param_spec_string (NM_SETTING_WIRELESS_BAND, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingWireless:channel:
+ *
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: channel
+ * variable: CHANNEL
+ * description: Channel used for the Wi-Fi communication.
+ * Channels greater than 14 mean "a" band, otherwise the
+ * band is "bg".
+ * example: CHANNEL=6
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_CHANNEL,
+ g_param_spec_uint (NM_SETTING_WIRELESS_CHANNEL, "", "",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingWireless:bssid:
+ *
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: bssid
+ * variable: BSSID(+)
+ * description: Restricts association only to a single AP.
+ * example: BSSID=00:1E:BD:64:83:21
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_BSSID,
+ g_param_spec_string (NM_SETTING_WIRELESS_BSSID, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ _nm_setting_class_transform_property (parent_class, NM_SETTING_WIRELESS_BSSID,
+ G_VARIANT_TYPE_BYTESTRING,
+ _nm_utils_hwaddr_to_dbus,
+ _nm_utils_hwaddr_from_dbus);
+
+ /**
+ * NMSettingWireless:rate:
+ *
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: rate
+ * variable: (none)
+ * description: This property is not handled by ifcfg-rh plugin.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_RATE,
+ g_param_spec_uint (NM_SETTING_WIRELESS_RATE, "", "",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingWireless:tx-power:
+ *
+ * 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.
+ **/
+ /* ---ifcfg-rh---
+ * property: tx-power
+ * variable: (none)
+ * description: This property is not handled by ifcfg-rh plugin.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_TX_POWER,
+ g_param_spec_uint (NM_SETTING_WIRELESS_TX_POWER, "", "",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingWireless:mac-address:
+ *
+ * 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).
+ **/
+ /* ---keyfile---
+ * property: mac-address
+ * format: ususal hex-digits-and-colons notation
+ * description: MAC address in traditional hex-digits-and-colons notation
+ * (e.g. 00:22:68:12:79:A2), or semicolon separated list of 6 bytes (obsolete)
+ * (e.g. 0;34;104;18;121;162).
+ * ---end---
+ * ---ifcfg-rh---
+ * property: mac-address
+ * variable: HWADDR
+ * description: Hardware address of the device in traditional hex-digits-and-colons
+ * notation (e.g. 00:22:68:14:5A:05).
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_MAC_ADDRESS,
+ g_param_spec_string (NM_SETTING_WIRELESS_MAC_ADDRESS, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ _nm_setting_class_transform_property (parent_class, NM_SETTING_WIRELESS_MAC_ADDRESS,
+ G_VARIANT_TYPE_BYTESTRING,
+ _nm_utils_hwaddr_to_dbus,
+ _nm_utils_hwaddr_from_dbus);
+
+ /**
+ * NMSettingWireless:cloned-mac-address:
+ *
+ * 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.
+ **/
+ /* ---keyfile---
+ * property: cloned-mac-address
+ * format: ususal hex-digits-and-colons notation
+ * description: Cloned MAC address in traditional hex-digits-and-colons notation
+ * (e.g. 00:22:68:12:79:B2), or semicolon separated list of 6 bytes (obsolete)
+ * (e.g. 0;34;104;18;121;178).
+ * ---end---
+ * ---ifcfg-rh---
+ * property: cloned-mac-address
+ * variable: MACADDR
+ * description: Cloned (spoofed) MAC address in traditional hex-digits-and-colons
+ * notation (e.g. 00:22:68:14:5A:99).
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_CLONED_MAC_ADDRESS,
+ g_param_spec_string (NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ _nm_setting_class_transform_property (parent_class, NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS,
+ G_VARIANT_TYPE_BYTESTRING,
+ _nm_utils_hwaddr_to_dbus,
+ _nm_utils_hwaddr_from_dbus);
+
+ /**
+ * 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").
+ **/
+ /* ---keyfile---
+ * property: mac-address-blacklist
+ * format: list of MACs (separated with semicolons)
+ * description: MAC address blacklist.
+ * example: mac-address-blacklist= 00:22:68:12:79:A6;00:22:68:12:79:78
+ * ---end---
+ * ---ifcfg-rh---
+ * property: mac-address-blacklist
+ * variable: HWADDR_BLACKLIST(+)
+ * description: It denies usage of the connection for any device whose address
+ * is listed.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_MAC_ADDRESS_BLACKLIST,
+ g_param_spec_boxed (NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST, "", "",
+ G_TYPE_STRV,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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 BSSID list of
+ * NetworkManager. The changes you make to this property will not be
+ * preserved.
+ **/
+ /* ---ifcfg-rh---
+ * property: seen-bssids
+ * variable: (none)
+ * description: This property is not handled by ifcfg-rh plugin.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_SEEN_BSSIDS,
+ g_param_spec_boxed (NM_SETTING_WIRELESS_SEEN_BSSIDS, "", "",
+ G_TYPE_STRV,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingWireless:mtu:
+ *
+ * If non-zero, only transmit packets of the specified size or smaller,
+ * breaking larger packets up into multiple Ethernet frames.
+ **/
+ /* ---ifcfg-rh---
+ * property: mtu
+ * variable: MTU
+ * description: MTU of the wireless interface.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_MTU,
+ g_param_spec_uint (NM_SETTING_WIRELESS_MTU, "", "",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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,
+ * these workarounds expose inherent insecurities with hidden SSID networks,
+ * and thus hidden SSID networks should be used with caution.
+ **/
+ /* ---ifcfg-rh---
+ * property: hidden
+ * variable: SSID_HIDDEN(+)
+ * description: Whether the network hides the SSID.
+ * ---end---
+ */
+ g_object_class_install_property
+ (object_class, PROP_HIDDEN,
+ g_param_spec_boolean (NM_SETTING_WIRELESS_HIDDEN, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /* Compatibility for deprecated property */
+ /* ---ifcfg-rh---
+ * property: security
+ * variable: (none)
+ * description: This property is deprecated and not handled by ifcfg-rh-plugin.
+ * ---end---
+ * ---dbus---
+ * property: security
+ * description: This property is deprecated, but can be set to the value
+ * '802-11-wireless-security' when a wireless security setting is also
+ * present in the connection dictionary, for compatibility with very old
+ * NetworkManager daemons.
+ * ---end---
+ */
+ _nm_setting_class_add_dbus_only_property (parent_class, "security",
+ G_VARIANT_TYPE_STRING,
+ nm_setting_wireless_get_security, NULL);
+}
diff --git a/libnm-core/nm-setting-wireless.h b/libnm-core/nm-setting-wireless.h
new file mode 100644
index 000000000..98fa98dc6
--- /dev/null
+++ b/libnm-core/nm-setting-wireless.h
@@ -0,0 +1,138 @@
+/* -*- 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 2007 - 2014 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ */
+
+#ifndef __NM_SETTING_WIRELESS_H__
+#define __NM_SETTING_WIRELESS_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-setting.h>
+#include <nm-setting-wireless-security.h>
+#include <nm-dbus-interface.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING_WIRELESS (nm_setting_wireless_get_type ())
+#define NM_SETTING_WIRELESS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SETTING_WIRELESS, NMSettingWireless))
+#define NM_SETTING_WIRELESS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SETTING_WIRELESS, NMSettingWirelessClass))
+#define NM_IS_SETTING_WIRELESS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SETTING_WIRELESS))
+#define NM_IS_SETTING_WIRELESS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_SETTING_WIRELESS))
+#define NM_SETTING_WIRELESS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SETTING_WIRELESS, NMSettingWirelessClass))
+
+#define NM_SETTING_WIRELESS_SETTING_NAME "802-11-wireless"
+
+#define NM_SETTING_WIRELESS_SSID "ssid"
+#define NM_SETTING_WIRELESS_MODE "mode"
+#define NM_SETTING_WIRELESS_BAND "band"
+#define NM_SETTING_WIRELESS_CHANNEL "channel"
+#define NM_SETTING_WIRELESS_BSSID "bssid"
+#define NM_SETTING_WIRELESS_RATE "rate"
+#define NM_SETTING_WIRELESS_TX_POWER "tx-power"
+#define NM_SETTING_WIRELESS_MAC_ADDRESS "mac-address"
+#define NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS "cloned-mac-address"
+#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_HIDDEN "hidden"
+
+/**
+ * NM_SETTING_WIRELESS_MODE_ADHOC:
+ *
+ * Indicates Ad-Hoc mode where no access point is expected to be present.
+ */
+#define NM_SETTING_WIRELESS_MODE_ADHOC "adhoc"
+
+/**
+ * NM_SETTING_WIRELESS_MODE_AP:
+ *
+ * Indicates AP/master mode where the wireless device is started as an access
+ * point/hotspot.
+ */
+#define NM_SETTING_WIRELESS_MODE_AP "ap"
+
+/**
+ * NM_SETTING_WIRELESS_MODE_INFRA:
+ *
+ * Indicates infrastructure mode where an access point is expected to be present
+ * for this connection.
+ */
+#define NM_SETTING_WIRELESS_MODE_INFRA "infrastructure"
+
+struct _NMSettingWireless {
+ NMSetting parent;
+};
+
+typedef struct {
+ NMSettingClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMSettingWirelessClass;
+
+GType nm_setting_wireless_get_type (void);
+
+NMSetting *nm_setting_wireless_new (void);
+
+GBytes *nm_setting_wireless_get_ssid (NMSettingWireless *setting);
+const char *nm_setting_wireless_get_mode (NMSettingWireless *setting);
+const char *nm_setting_wireless_get_band (NMSettingWireless *setting);
+guint32 nm_setting_wireless_get_channel (NMSettingWireless *setting);
+const char *nm_setting_wireless_get_bssid (NMSettingWireless *setting);
+guint32 nm_setting_wireless_get_rate (NMSettingWireless *setting);
+guint32 nm_setting_wireless_get_tx_power (NMSettingWireless *setting);
+const char *nm_setting_wireless_get_mac_address (NMSettingWireless *setting);
+const char *nm_setting_wireless_get_cloned_mac_address (NMSettingWireless *setting);
+
+const char * const *nm_setting_wireless_get_mac_address_blacklist (NMSettingWireless *setting);
+guint32 nm_setting_wireless_get_num_mac_blacklist_items (NMSettingWireless *setting);
+const char * nm_setting_wireless_get_mac_blacklist_item (NMSettingWireless *setting,
+ guint32 idx);
+gboolean nm_setting_wireless_add_mac_blacklist_item (NMSettingWireless *setting,
+ const char *mac);
+void nm_setting_wireless_remove_mac_blacklist_item (NMSettingWireless *setting,
+ guint32 idx);
+gboolean nm_setting_wireless_remove_mac_blacklist_item_by_value (NMSettingWireless *setting,
+ const char *mac);
+void nm_setting_wireless_clear_mac_blacklist_items (NMSettingWireless *setting);
+
+guint32 nm_setting_wireless_get_mtu (NMSettingWireless *setting);
+gboolean nm_setting_wireless_get_hidden (NMSettingWireless *setting);
+
+gboolean nm_setting_wireless_add_seen_bssid (NMSettingWireless *setting,
+ const char *bssid);
+
+guint32 nm_setting_wireless_get_num_seen_bssids (NMSettingWireless *setting);
+const char *nm_setting_wireless_get_seen_bssid (NMSettingWireless *setting,
+ guint32 i);
+
+gboolean nm_setting_wireless_ap_security_compatible (NMSettingWireless *s_wireless,
+ NMSettingWirelessSecurity *s_wireless_sec,
+ NM80211ApFlags ap_flags,
+ NM80211ApSecurityFlags ap_wpa,
+ NM80211ApSecurityFlags ap_rsn,
+ NM80211Mode ap_mode);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_WIRELESS_H__ */
diff --git a/libnm-core/nm-setting.c b/libnm-core/nm-setting.c
new file mode 100644
index 000000000..037baa6b5
--- /dev/null
+++ b/libnm-core/nm-setting.c
@@ -0,0 +1,1818 @@
+/* -*- 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 2007 - 2011 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <glib/gi18n-lib.h>
+#include <gio/gio.h>
+
+#include "nm-setting.h"
+#include "nm-setting-private.h"
+#include "nm-utils.h"
+#include "nm-core-internal.h"
+#include "nm-utils-private.h"
+#include "nm-property-compare.h"
+
+#include "nm-setting-connection.h"
+#include "nm-setting-bond.h"
+#include "nm-setting-bridge.h"
+#include "nm-setting-bridge-port.h"
+#include "nm-setting-pppoe.h"
+#include "nm-setting-team.h"
+#include "nm-setting-team-port.h"
+#include "nm-setting-vpn.h"
+
+/**
+ * SECTION:nm-setting
+ * @short_description: Describes related configuration information
+ *
+ * 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 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.
+ */
+
+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 {
+ const char *name;
+ GType type;
+ guint32 priority;
+} SettingInfo;
+
+typedef struct {
+ const SettingInfo *info;
+} NMSettingPrivate;
+
+enum {
+ PROP_0,
+ PROP_NAME,
+
+ 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
+ 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
+ *
+ * INTERNAL ONLY: registers a setting's internal properties with libnm.
+ *
+ * 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)
+{
+ 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 (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->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->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;
+}
+
+guint32
+_nm_setting_get_setting_priority (NMSetting *setting)
+{
+ NMSettingPrivate *priv;
+
+ g_return_val_if_fail (NM_IS_SETTING (setting), G_MAXUINT32);
+ priv = NM_SETTING_GET_PRIVATE (setting);
+ _ensure_setting_info (setting, priv);
+ return priv->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));
+}
+
+/**
+ * nm_setting_lookup_type:
+ * @name: a setting name
+ *
+ * Returns the #GType of the setting's class for a given setting name.
+ *
+ * Returns: the #GType of the setting's class, or %G_TYPE_INVALID if
+ * @name is not recognized.
+ **/
+GType
+nm_setting_lookup_type (const char *name)
+{
+ SettingInfo *info;
+
+ g_return_val_if_fail (name != NULL, G_TYPE_INVALID);
+
+ _ensure_registered ();
+
+ info = g_hash_table_lookup (registered_settings, name);
+ return info ? info->type : G_TYPE_INVALID;
+}
+
+gint
+_nm_setting_compare_priority (gconstpointer a, gconstpointer b)
+{
+ guint32 prio_a, prio_b;
+
+ prio_a = _nm_setting_get_setting_priority ((NMSetting *) a);
+ prio_b = _nm_setting_get_setting_priority ((NMSetting *) b);
+
+ if (prio_a < prio_b)
+ return -1;
+ else if (prio_a == prio_b)
+ return 0;
+ return 1;
+}
+
+/*************************************************************/
+
+gboolean
+_nm_setting_slave_type_is_valid (const char *slave_type, const char **out_port_type)
+{
+ const char *port_type = NULL;
+ gboolean found = TRUE;
+
+ if (!slave_type)
+ found = FALSE;
+ else if (!strcmp (slave_type, NM_SETTING_BOND_SETTING_NAME))
+ ;
+ else if (!strcmp (slave_type, NM_SETTING_BRIDGE_SETTING_NAME))
+ port_type = NM_SETTING_BRIDGE_PORT_SETTING_NAME;
+ else if (!strcmp (slave_type, NM_SETTING_TEAM_SETTING_NAME))
+ port_type = NM_SETTING_TEAM_PORT_SETTING_NAME;
+ else
+ found = FALSE;
+
+ if (out_port_type)
+ *out_port_type = port_type;
+ return found;
+}
+
+/*************************************************************/
+
+typedef struct {
+ const char *name;
+ GParamSpec *param_spec;
+ const GVariantType *dbus_type;
+
+ NMSettingPropertyGetFunc get_func;
+ NMSettingPropertySynthFunc synth_func;
+ NMSettingPropertySetFunc set_func;
+ NMSettingPropertyNotSetFunc not_set_func;
+
+ NMSettingPropertyTransformToFunc to_dbus;
+ NMSettingPropertyTransformFromFunc from_dbus;
+} NMSettingProperty;
+
+static GQuark setting_property_overrides_quark;
+static GQuark setting_properties_quark;
+
+static NMSettingProperty *
+find_property (GArray *properties, const char *name)
+{
+ NMSettingProperty *property;
+ int i;
+
+ if (!properties)
+ return NULL;
+
+ for (i = 0; i < properties->len; i++) {
+ property = &g_array_index (properties, NMSettingProperty, i);
+ if (strcmp (name, property->name) == 0)
+ return property;
+ }
+
+ return NULL;
+}
+
+static void
+add_property_override (NMSettingClass *setting_class,
+ const char *property_name,
+ GParamSpec *param_spec,
+ const GVariantType *dbus_type,
+ NMSettingPropertyGetFunc get_func,
+ NMSettingPropertySynthFunc synth_func,
+ NMSettingPropertySetFunc set_func,
+ NMSettingPropertyNotSetFunc not_set_func,
+ NMSettingPropertyTransformToFunc to_dbus,
+ NMSettingPropertyTransformFromFunc from_dbus)
+{
+ GType setting_type = G_TYPE_FROM_CLASS (setting_class);
+ GArray *overrides;
+ NMSettingProperty override;
+
+ g_return_if_fail (g_type_get_qdata (setting_type, setting_properties_quark) == NULL);
+
+ memset (&override, 0, sizeof (override));
+ override.name = property_name;
+ override.param_spec = param_spec;
+ override.dbus_type = dbus_type;
+ override.get_func = get_func;
+ override.synth_func = synth_func;
+ override.set_func = set_func;
+ override.not_set_func = not_set_func;
+ override.to_dbus = to_dbus;
+ override.from_dbus = from_dbus;
+
+ overrides = g_type_get_qdata (setting_type, setting_property_overrides_quark);
+ if (!overrides) {
+ overrides = g_array_new (FALSE, FALSE, sizeof (NMSettingProperty));
+ g_type_set_qdata (setting_type, setting_property_overrides_quark, overrides);
+ }
+ g_return_if_fail (find_property (overrides, property_name) == NULL);
+
+ g_array_append_val (overrides, override);
+}
+
+/**
+ * _nm_setting_class_add_dbus_only_property:
+ * @setting_class: the setting class
+ * @property_name: the name of the property to override
+ * @dbus_type: the type of the property (in its D-Bus representation)
+ * @synth_func: (allow-none): function to call to synthesize a value for the property
+ * @set_func: (allow-none): function to call to set the value of the property
+ *
+ * Registers a property named @property_name, which will be used in the D-Bus
+ * serialization of objects of @setting_class, but which does not correspond to
+ * a #GObject property.
+ *
+ * When serializing a setting to D-Bus, @synth_func will be called to synthesize
+ * a value for the property. (If it returns %NULL, no value will be added to the
+ * serialization. If @synth_func is %NULL, the property will always be omitted
+ * in the serialization.)
+ *
+ * When deserializing a D-Bus representation into a setting, if @property_name
+ * is present, then @set_func will be called to set it. (If @set_func is %NULL
+ * then the property will be ignored when deserializing.)
+ */
+void
+_nm_setting_class_add_dbus_only_property (NMSettingClass *setting_class,
+ const char *property_name,
+ const GVariantType *dbus_type,
+ NMSettingPropertySynthFunc synth_func,
+ NMSettingPropertySetFunc set_func)
+{
+ g_return_if_fail (NM_IS_SETTING_CLASS (setting_class));
+ g_return_if_fail (property_name != NULL);
+
+ /* Must not match any GObject property. */
+ g_return_if_fail (!g_object_class_find_property (G_OBJECT_CLASS (setting_class), property_name));
+
+ add_property_override (setting_class,
+ property_name, NULL, dbus_type,
+ NULL, synth_func, set_func, NULL,
+ NULL, NULL);
+}
+
+/**
+ * _nm_setting_class_override_property:
+ * @setting_class: the setting class
+ * @property_name: the name of the property to override
+ * @dbus_type: the type of the property (in its D-Bus representation)
+ * @get_func: (allow-none): function to call to get the value of the property
+ * @set_func: (allow-none): function to call to set the value of the property
+ * @not_set_func: (allow-none): function to call to indicate the property was not set
+ *
+ * Overrides the D-Bus representation of the #GObject property named
+ * @property_name on @setting_class.
+ *
+ * When serializing a setting to D-Bus, if @get_func is non-%NULL, then it will
+ * be called to get the property's value. If it returns a #GVariant, the
+ * property will be added to the hash, and if it returns %NULL, the property
+ * will be omitted. (If @get_func is %NULL, the property will be read normally
+ * with g_object_get_property(), and added to the hash if it is not the default
+ * value.)
+ *
+ * When deserializing a D-Bus representation into a setting, if @property_name
+ * is present, then @set_func will be called to set it. (If @set_func is %NULL
+ * then the property will be set normally with g_object_set_property().)
+ *
+ * If @not_set_func is non-%NULL, then it will be called when deserializing a
+ * representation that does NOT contain @property_name. This can be used, eg, if
+ * a new property needs to be initialized from some older deprecated property
+ * when it is not present.
+ */
+void
+_nm_setting_class_override_property (NMSettingClass *setting_class,
+ const char *property_name,
+ const GVariantType *dbus_type,
+ NMSettingPropertyGetFunc get_func,
+ NMSettingPropertySetFunc set_func,
+ NMSettingPropertyNotSetFunc not_set_func)
+{
+ GParamSpec *param_spec;
+
+ param_spec = g_object_class_find_property (G_OBJECT_CLASS (setting_class), property_name);
+ g_return_if_fail (param_spec != NULL);
+
+ add_property_override (setting_class,
+ property_name, param_spec, dbus_type,
+ get_func, NULL, set_func, not_set_func,
+ NULL, NULL);
+}
+
+/**
+ * _nm_setting_class_transform_property:
+ * @setting_class: the setting class
+ * @property: the name of the property to transform
+ * @dbus_type: the type of the property (in its D-Bus representation)
+ * @to_dbus: function to convert from object to D-Bus format
+ * @from_dbus: function to convert from D-Bus to object format
+ *
+ * Indicates that @property on @setting_class does not have the same format as
+ * its corresponding D-Bus representation, and so must be transformed when
+ * serializing/deserializing.
+ *
+ * The transformation will also be used by nm_setting_compare(), meaning that
+ * the underlying object property does not need to be of a type that
+ * nm_property_compare() recognizes, as long as it recognizes @dbus_type.
+ */
+void
+_nm_setting_class_transform_property (NMSettingClass *setting_class,
+ const char *property,
+ const GVariantType *dbus_type,
+ NMSettingPropertyTransformToFunc to_dbus,
+ NMSettingPropertyTransformFromFunc from_dbus)
+{
+ GParamSpec *param_spec;
+
+ param_spec = g_object_class_find_property (G_OBJECT_CLASS (setting_class), property);
+ g_return_if_fail (param_spec != NULL);
+
+ add_property_override (setting_class,
+ property, param_spec, dbus_type,
+ NULL, NULL, NULL, NULL,
+ to_dbus, from_dbus);
+}
+
+gboolean
+_nm_setting_use_legacy_property (NMSetting *setting,
+ GVariant *connection_dict,
+ const char *legacy_property,
+ const char *new_property)
+{
+ GVariant *setting_dict, *value;
+
+ setting_dict = g_variant_lookup_value (connection_dict, nm_setting_get_name (NM_SETTING (setting)), NM_VARIANT_TYPE_SETTING);
+ g_return_val_if_fail (setting_dict != NULL, FALSE);
+
+ /* If the new property isn't set, we have to use the legacy property. */
+ value = g_variant_lookup_value (setting_dict, new_property, NULL);
+ if (!value) {
+ g_variant_unref (setting_dict);
+ return TRUE;
+ }
+ g_variant_unref (value);
+
+ /* Otherwise, clients always prefer new properties sent from the daemon. */
+ if (!_nm_utils_is_manager_process) {
+ g_variant_unref (setting_dict);
+ return FALSE;
+ }
+
+ /* The daemon prefers the legacy property if it exists. */
+ value = g_variant_lookup_value (setting_dict, legacy_property, NULL);
+ g_variant_unref (setting_dict);
+
+ if (value) {
+ g_variant_unref (value);
+ return TRUE;
+ } else
+ return FALSE;
+}
+
+static GArray *
+nm_setting_class_ensure_properties (NMSettingClass *setting_class)
+{
+ GType type = G_TYPE_FROM_CLASS (setting_class), otype;
+ NMSettingProperty property, *override;
+ GArray *overrides, *type_overrides, *properties;
+ GParamSpec **property_specs;
+ guint n_property_specs, i;
+
+ properties = g_type_get_qdata (type, setting_properties_quark);
+ if (properties)
+ return properties;
+
+ /* Build overrides array from @setting_class and its superclasses */
+ overrides = g_array_new (FALSE, FALSE, sizeof (NMSettingProperty));
+ for (otype = type; otype != G_TYPE_OBJECT; otype = g_type_parent (otype)) {
+ type_overrides = g_type_get_qdata (otype, setting_property_overrides_quark);
+ if (type_overrides)
+ g_array_append_vals (overrides, (NMSettingProperty *)type_overrides->data, type_overrides->len);
+ }
+
+ /* Build the properties array from the GParamSpecs, obeying overrides */
+ properties = g_array_new (FALSE, FALSE, sizeof (NMSettingProperty));
+
+ property_specs = g_object_class_list_properties (G_OBJECT_CLASS (setting_class),
+ &n_property_specs);
+ for (i = 0; i < n_property_specs; i++) {
+ override = find_property (overrides, property_specs[i]->name);
+ if (override)
+ property = *override;
+ else {
+ memset (&property, 0, sizeof (property));
+ property.name = property_specs[i]->name;
+ property.param_spec = property_specs[i];
+ }
+ g_array_append_val (properties, property);
+ }
+ g_free (property_specs);
+
+ /* Add any remaining overrides not corresponding to GObject properties */
+ for (i = 0; i < overrides->len; i++) {
+ override = &g_array_index (overrides, NMSettingProperty, i);
+ if (!g_object_class_find_property (G_OBJECT_CLASS (setting_class), override->name))
+ g_array_append_val (properties, *override);
+ }
+ g_array_unref (overrides);
+
+ g_type_set_qdata (type, setting_properties_quark, properties);
+ return properties;
+}
+
+static const NMSettingProperty *
+nm_setting_class_get_properties (NMSettingClass *setting_class, guint *n_properties)
+{
+ GArray *properties;
+
+ properties = nm_setting_class_ensure_properties (setting_class);
+
+ *n_properties = properties->len;
+ return (NMSettingProperty *) properties->data;
+}
+
+static const NMSettingProperty *
+nm_setting_class_find_property (NMSettingClass *setting_class, const char *property_name)
+{
+ GArray *properties;
+
+ properties = nm_setting_class_ensure_properties (setting_class);
+ return find_property (properties, property_name);
+}
+
+/*************************************************************/
+
+static const GVariantType *
+variant_type_for_gtype (GType type)
+{
+ if (type == G_TYPE_BOOLEAN)
+ return G_VARIANT_TYPE_BOOLEAN;
+ else if (type == G_TYPE_UCHAR)
+ return G_VARIANT_TYPE_BYTE;
+ else if (type == G_TYPE_INT)
+ return G_VARIANT_TYPE_INT32;
+ else if (type == G_TYPE_UINT)
+ return G_VARIANT_TYPE_UINT32;
+ else if (type == G_TYPE_INT64)
+ return G_VARIANT_TYPE_INT64;
+ else if (type == G_TYPE_UINT64)
+ return G_VARIANT_TYPE_UINT64;
+ else if (type == G_TYPE_STRING)
+ return G_VARIANT_TYPE_STRING;
+ else if (type == G_TYPE_DOUBLE)
+ return G_VARIANT_TYPE_DOUBLE;
+ else if (type == G_TYPE_STRV)
+ return G_VARIANT_TYPE_STRING_ARRAY;
+ else if (type == G_TYPE_BYTES)
+ return G_VARIANT_TYPE_BYTESTRING;
+ else if (g_type_is_a (type, G_TYPE_ENUM))
+ return G_VARIANT_TYPE_INT32;
+ else if (g_type_is_a (type, G_TYPE_FLAGS))
+ return G_VARIANT_TYPE_UINT32;
+ else
+ g_assert_not_reached ();
+}
+
+static GVariant *
+get_property_for_dbus (NMSetting *setting,
+ const NMSettingProperty *property,
+ gboolean ignore_default)
+{
+ GValue prop_value = { 0, };
+ GVariant *dbus_value;
+
+ if (property->get_func)
+ return property->get_func (setting, property->name);
+ else
+ g_return_val_if_fail (property->param_spec != NULL, NULL);
+
+ g_value_init (&prop_value, property->param_spec->value_type);
+ g_object_get_property (G_OBJECT (setting), property->param_spec->name, &prop_value);
+
+ if (ignore_default && g_param_value_defaults (property->param_spec, &prop_value)) {
+ g_value_unset (&prop_value);
+ return NULL;
+ }
+
+ if (property->to_dbus)
+ dbus_value = property->to_dbus (&prop_value);
+ else if (property->dbus_type)
+ dbus_value = g_dbus_gvalue_to_gvariant (&prop_value, property->dbus_type);
+ else if (g_type_is_a (prop_value.g_type, G_TYPE_ENUM))
+ dbus_value = g_variant_new_int32 (g_value_get_enum (&prop_value));
+ else if (g_type_is_a (prop_value.g_type, G_TYPE_FLAGS))
+ dbus_value = g_variant_new_uint32 (g_value_get_flags (&prop_value));
+ else if (prop_value.g_type == G_TYPE_BYTES)
+ dbus_value = _nm_utils_bytes_to_dbus (&prop_value);
+ else
+ dbus_value = g_dbus_gvalue_to_gvariant (&prop_value, variant_type_for_gtype (prop_value.g_type));
+ g_value_unset (&prop_value);
+
+ return dbus_value;
+}
+
+static void
+set_property_from_dbus (const NMSettingProperty *property, GVariant *src_value, GValue *dst_value)
+{
+ g_return_if_fail (property->param_spec != NULL);
+
+ if (property->from_dbus)
+ property->from_dbus (src_value, dst_value);
+ else if (dst_value->g_type == G_TYPE_BYTES)
+ _nm_utils_bytes_from_dbus (src_value, dst_value);
+ else
+ g_dbus_gvariant_to_gvalue (src_value, dst_value);
+}
+
+
+/**
+ * _nm_setting_to_dbus:
+ * @setting: the #NMSetting
+ * @connection: the #NMConnection containing @setting
+ * @flags: hash flags, e.g. %NM_CONNECTION_SERIALIZE_ALL
+ *
+ * Converts the #NMSetting into a #GVariant of type #NM_VARIANT_TYPE_SETTING
+ * mapping each setting property name to a value describing that property,
+ * suitable for marshalling over D-Bus or serializing.
+ *
+ * Returns: (transfer none): a new floating #GVariant describing the setting's
+ * properties
+ **/
+GVariant *
+_nm_setting_to_dbus (NMSetting *setting, NMConnection *connection, NMConnectionSerializationFlags flags)
+{
+ GVariantBuilder builder;
+ GVariant *dbus_value;
+ const NMSettingProperty *properties;
+ guint n_properties, i;
+
+ g_return_val_if_fail (NM_IS_SETTING (setting), NULL);
+
+ properties = nm_setting_class_get_properties (NM_SETTING_GET_CLASS (setting), &n_properties);
+
+ g_variant_builder_init (&builder, NM_VARIANT_TYPE_SETTING);
+
+ for (i = 0; i < n_properties; i++) {
+ const NMSettingProperty *property = &properties[i];
+ GParamSpec *prop_spec = property->param_spec;
+
+ if (!prop_spec && !property->synth_func) {
+ /* D-Bus-only property with no synth_func, so we skip it. */
+ continue;
+ }
+
+ if (prop_spec && !(prop_spec->flags & G_PARAM_WRITABLE))
+ continue;
+
+ if ( prop_spec && (prop_spec->flags & NM_SETTING_PARAM_LEGACY)
+ && !_nm_utils_is_manager_process)
+ continue;
+
+ if ( (flags & NM_CONNECTION_SERIALIZE_NO_SECRETS)
+ && (prop_spec && (prop_spec->flags & NM_SETTING_PARAM_SECRET)))
+ continue;
+
+ if ( (flags & NM_CONNECTION_SERIALIZE_ONLY_SECRETS)
+ && !(prop_spec && (prop_spec->flags & NM_SETTING_PARAM_SECRET)))
+ continue;
+
+ if (property->synth_func)
+ dbus_value = property->synth_func (setting, connection, property->name);
+ else
+ dbus_value = get_property_for_dbus (setting, property, TRUE);
+ if (dbus_value) {
+ /* Allow dbus_value to be either floating or not. */
+ g_variant_take_ref (dbus_value);
+
+ g_variant_builder_add (&builder, "{sv}", property->name, dbus_value);
+ g_variant_unref (dbus_value);
+ }
+ }
+
+ return g_variant_builder_end (&builder);
+}
+
+/**
+ * _nm_setting_new_from_dbus:
+ * @setting_type: the #NMSetting type which the hash contains properties for
+ * @setting_dict: the #GVariant containing an %NM_VARIANT_TYPE_SETTING dictionary
+ * mapping property names to values
+ * @connection_dict: the #GVariant containing an %NM_VARIANT_TYPE_CONNECTION
+ * dictionary mapping setting names to dictionaries.
+ * @error: location to store error, or %NULL
+ *
+ * Creates a new #NMSetting object and populates that object with the properties
+ * contained in @setting_dict, using each key as the property to set, and each
+ * value as the value to set that property to. Setting properties are strongly
+ * typed, thus the #GVariantType of the dict value must be correct. See the
+ * documentation on each #NMSetting object subclass for the correct property
+ * names and value types.
+ *
+ * Returns: a new #NMSetting object populated with the properties from the
+ * hash table, or %NULL if @setting_hash could not be deserialized.
+ **/
+NMSetting *
+_nm_setting_new_from_dbus (GType setting_type,
+ GVariant *setting_dict,
+ GVariant *connection_dict,
+ GError **error)
+{
+ NMSettingClass *class;
+ NMSetting *setting;
+ const NMSettingProperty *properties;
+ guint n_properties;
+ guint i;
+
+ g_return_val_if_fail (G_TYPE_IS_INSTANTIATABLE (setting_type), NULL);
+ g_return_val_if_fail (g_variant_is_of_type (setting_dict, NM_VARIANT_TYPE_SETTING), NULL);
+
+ /* connection_dict is not technically optional, but some tests in test-general
+ * don't bother with it in cases where they know it's not needed.
+ */
+ if (connection_dict)
+ g_return_val_if_fail (g_variant_is_of_type (connection_dict, NM_VARIANT_TYPE_CONNECTION), NULL);
+
+ /* g_type_class_ref() ensures the setting class is created if it hasn't
+ * already been used.
+ */
+ class = g_type_class_ref (setting_type);
+
+ /* Build the setting object from the properties we know about; we assume
+ * that any propreties in @setting_dict that we don't know about can
+ * either be ignored or else has a backward-compatibility equivalent
+ * that we do know about.
+ */
+ setting = (NMSetting *) g_object_new (setting_type, NULL);
+
+ properties = nm_setting_class_get_properties (class, &n_properties);
+ for (i = 0; i < n_properties; i++) {
+ const NMSettingProperty *property = &properties[i];
+ GVariant *value = g_variant_lookup_value (setting_dict, property->name, NULL);
+
+ if (value && property->set_func) {
+ property->set_func (setting,
+ connection_dict,
+ property->name,
+ value);
+ } else if (!value && property->not_set_func) {
+ property->not_set_func (setting,
+ connection_dict,
+ property->name);
+ } else if (value && property->param_spec) {
+ GValue object_value = { 0, };
+
+ if (!(property->param_spec->flags & G_PARAM_WRITABLE))
+ continue;
+
+ g_value_init (&object_value, property->param_spec->value_type);
+ set_property_from_dbus (property, value, &object_value);
+ g_object_set_property (G_OBJECT (setting), property->param_spec->name, &object_value);
+ g_value_unset (&object_value);
+ }
+
+ if (value)
+ g_variant_unref (value);
+ }
+
+ g_type_class_unref (class);
+
+ return setting;
+}
+
+/**
+ * nm_setting_get_dbus_property_type:
+ * @setting: an #NMSetting
+ * @property_name: the property of @setting to get the type of
+ *
+ * Gets the D-Bus marshalling type of a property. @property_name is a D-Bus
+ * property name, which may not necessarily be a #GObject property.
+ *
+ * Returns: the D-Bus marshalling type of @property on @setting.
+ */
+const GVariantType *
+nm_setting_get_dbus_property_type (NMSetting *setting,
+ const char *property_name)
+{
+ const NMSettingProperty *property;
+
+ g_return_val_if_fail (NM_IS_SETTING (setting), NULL);
+ g_return_val_if_fail (property_name != NULL, NULL);
+
+ property = nm_setting_class_find_property (NM_SETTING_GET_CLASS (setting), property_name);
+ g_return_val_if_fail (property != NULL, NULL);
+
+ if (property->dbus_type)
+ return property->dbus_type;
+ else
+ return variant_type_for_gtype (property->param_spec->value_type);
+}
+
+gboolean
+_nm_setting_get_property (NMSetting *setting, const char *property_name, GValue *value)
+{
+ GParamSpec *prop_spec;
+
+ g_return_val_if_fail (NM_IS_SETTING (setting), FALSE);
+ g_return_val_if_fail (property_name, FALSE);
+ g_return_val_if_fail (value, FALSE);
+
+ prop_spec = g_object_class_find_property (G_OBJECT_GET_CLASS (setting), property_name);
+
+ if (!prop_spec) {
+ g_value_unset (value);
+ return FALSE;
+ }
+
+ g_value_init (value, prop_spec->value_type);
+ g_object_get_property (G_OBJECT (setting), property_name, value);
+ return TRUE;
+}
+
+static void
+duplicate_setting (NMSetting *setting,
+ const char *name,
+ const GValue *value,
+ GParamFlags flags,
+ gpointer user_data)
+{
+ if ((flags & (G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)) == G_PARAM_WRITABLE)
+ g_object_set_property (G_OBJECT (user_data), name, value);
+}
+
+/**
+ * nm_setting_duplicate:
+ * @setting: the #NMSetting to duplicate
+ *
+ * Duplicates a #NMSetting.
+ *
+ * Returns: (transfer full): a new #NMSetting containing the same properties and values as the
+ * source #NMSetting
+ **/
+NMSetting *
+nm_setting_duplicate (NMSetting *setting)
+{
+ GObject *dup;
+
+ g_return_val_if_fail (NM_IS_SETTING (setting), NULL);
+
+ dup = g_object_new (G_OBJECT_TYPE (setting), NULL);
+
+ g_object_freeze_notify (dup);
+ nm_setting_enumerate_values (setting, duplicate_setting, dup);
+ g_object_thaw_notify (dup);
+
+ return NM_SETTING (dup);
+}
+
+/**
+ * nm_setting_get_name:
+ * @setting: the #NMSetting
+ *
+ * Returns the type name of the #NMSetting object
+ *
+ * Returns: a string containing the type name of the #NMSetting object,
+ * like 'ppp' or 'wireless' or 'wired'.
+ **/
+const char *
+nm_setting_get_name (NMSetting *setting)
+{
+ NMSettingPrivate *priv;
+
+ 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;
+}
+
+/**
+ * nm_setting_verify:
+ * @setting: the #NMSetting to verify
+ * @connection: (allow-none): the #NMConnection that @setting came from, or
+ * %NULL if @setting is being verified in isolation.
+ * @error: location to store error, or %NULL
+ *
+ * Validates the setting. Each setting's properties have allowed values, and
+ * some are dependent on other values (hence the need for @connection). The
+ * returned #GError contains information about which property of the setting
+ * failed validation, and in what way that property failed validation.
+ *
+ * Returns: %TRUE if the setting is valid, %FALSE if it is not
+ **/
+gboolean
+nm_setting_verify (NMSetting *setting, NMConnection *connection, GError **error)
+{
+ NMSettingVerifyResult result = _nm_setting_verify (setting, connection, error);
+
+ if (result == NM_SETTING_VERIFY_NORMALIZABLE)
+ g_clear_error (error);
+
+ return result == NM_SETTING_VERIFY_SUCCESS || result == NM_SETTING_VERIFY_NORMALIZABLE;
+}
+
+NMSettingVerifyResult
+_nm_setting_verify (NMSetting *setting, NMConnection *connection, GError **error)
+{
+ g_return_val_if_fail (NM_IS_SETTING (setting), NM_SETTING_VERIFY_ERROR);
+ g_return_val_if_fail (!connection || NM_IS_CONNECTION (connection), NM_SETTING_VERIFY_ERROR);
+ g_return_val_if_fail (!error || *error == NULL, NM_SETTING_VERIFY_ERROR);
+
+ if (NM_SETTING_GET_CLASS (setting)->verify)
+ return NM_SETTING_GET_CLASS (setting)->verify (setting, connection, error);
+
+ return NM_SETTING_VERIFY_SUCCESS;
+}
+
+static gboolean
+compare_property (NMSetting *setting,
+ NMSetting *other,
+ const GParamSpec *prop_spec,
+ NMSettingCompareFlags flags)
+{
+ const NMSettingProperty *property;
+ GVariant *value1, *value2;
+ int cmp;
+
+ /* Handle compare flags */
+ if (prop_spec->flags & NM_SETTING_PARAM_SECRET) {
+ NMSettingSecretFlags a_secret_flags = NM_SETTING_SECRET_FLAG_NONE;
+ NMSettingSecretFlags b_secret_flags = NM_SETTING_SECRET_FLAG_NONE;
+
+ g_return_val_if_fail (!NM_IS_SETTING_VPN (setting), FALSE);
+
+ if (!nm_setting_get_secret_flags (setting, prop_spec->name, &a_secret_flags, NULL))
+ g_return_val_if_reached (FALSE);
+ if (!nm_setting_get_secret_flags (other, prop_spec->name, &b_secret_flags, NULL))
+ g_return_val_if_reached (FALSE);
+
+ /* If the secret flags aren't the same the settings aren't the same */
+ if (a_secret_flags != b_secret_flags)
+ return FALSE;
+
+ /* Check for various secret flags that might cause us to ignore comparing
+ * this property.
+ */
+ if ( (flags & NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS)
+ && (a_secret_flags & NM_SETTING_SECRET_FLAG_AGENT_OWNED))
+ return TRUE;
+
+ if ( (flags & NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS)
+ && (a_secret_flags & NM_SETTING_SECRET_FLAG_NOT_SAVED))
+ return TRUE;
+ }
+
+ property = nm_setting_class_find_property (NM_SETTING_GET_CLASS (setting), prop_spec->name);
+ g_return_val_if_fail (property != NULL, FALSE);
+
+ value1 = get_property_for_dbus (setting, property, FALSE);
+ value2 = get_property_for_dbus (other, property, FALSE);
+
+ cmp = nm_property_compare (value1, value2);
+
+ g_variant_unref (value1);
+ g_variant_unref (value2);
+
+ return cmp == 0;
+}
+
+/**
+ * nm_setting_compare:
+ * @a: a #NMSetting
+ * @b: a second #NMSetting to compare with the first
+ * @flags: compare flags, e.g. %NM_SETTING_COMPARE_FLAG_EXACT
+ *
+ * Compares two #NMSetting objects for similarity, with comparison behavior
+ * modified by a set of flags. See the documentation for #NMSettingCompareFlags
+ * for a description of each flag's behavior.
+ *
+ * Returns: %TRUE if the comparison succeeds, %FALSE if it does not
+ **/
+gboolean
+nm_setting_compare (NMSetting *a,
+ NMSetting *b,
+ NMSettingCompareFlags flags)
+{
+ GParamSpec **property_specs;
+ guint n_property_specs;
+ gint same = TRUE;
+ guint i;
+
+ g_return_val_if_fail (NM_IS_SETTING (a), FALSE);
+ g_return_val_if_fail (NM_IS_SETTING (b), FALSE);
+
+ /* First check that both have the same type */
+ if (G_OBJECT_TYPE (a) != G_OBJECT_TYPE (b))
+ return FALSE;
+
+ /* And now all properties */
+ property_specs = g_object_class_list_properties (G_OBJECT_GET_CLASS (a), &n_property_specs);
+ for (i = 0; i < n_property_specs && same; i++) {
+ GParamSpec *prop_spec = property_specs[i];
+
+ /* Fuzzy compare ignores secrets and properties defined with the FUZZY_IGNORE flag */
+ if ( (flags & NM_SETTING_COMPARE_FLAG_FUZZY)
+ && (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;
+
+ same = NM_SETTING_GET_CLASS (a)->compare_property (a, b, prop_spec, flags);
+ }
+ g_free (property_specs);
+
+ return same;
+}
+
+static inline gboolean
+should_compare_prop (NMSetting *setting,
+ const char *prop_name,
+ NMSettingCompareFlags comp_flags,
+ GParamFlags prop_flags)
+{
+ /* Fuzzy compare ignores secrets and properties defined with the FUZZY_IGNORE flag */
+ if ( (comp_flags & NM_SETTING_COMPARE_FLAG_FUZZY)
+ && (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;
+
+ if (comp_flags & NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS)
+ return FALSE;
+
+ if ( NM_IS_SETTING_VPN (setting)
+ && g_strcmp0 (prop_name, NM_SETTING_VPN_SECRETS) == 0) {
+ /* FIXME: NMSettingVPN:NM_SETTING_VPN_SECRETS has NM_SETTING_PARAM_SECRET.
+ * nm_setting_get_secret_flags() quite possibly fails, but it might succeed if the
+ * setting accidently uses a key "secrets". */
+ return TRUE;
+ }
+
+ if (!nm_setting_get_secret_flags (setting, prop_name, &secret_flags, NULL))
+ g_return_val_if_reached (FALSE);
+
+ if ( (comp_flags & NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS)
+ && (secret_flags & NM_SETTING_SECRET_FLAG_AGENT_OWNED))
+ return FALSE;
+
+ if ( (comp_flags & NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS)
+ && (secret_flags & NM_SETTING_SECRET_FLAG_NOT_SAVED))
+ return FALSE;
+ }
+
+ if ( (comp_flags & NM_SETTING_COMPARE_FLAG_IGNORE_ID)
+ && NM_IS_SETTING_CONNECTION (setting)
+ && !strcmp (prop_name, NM_SETTING_CONNECTION_ID))
+ return FALSE;
+
+ if ( (comp_flags & NM_SETTING_COMPARE_FLAG_IGNORE_TIMESTAMP)
+ && NM_IS_SETTING_CONNECTION (setting)
+ && !strcmp (prop_name, NM_SETTING_CONNECTION_TIMESTAMP))
+ return FALSE;
+
+ return TRUE;
+}
+
+/**
+ * nm_setting_diff:
+ * @a: a #NMSetting
+ * @b: a second #NMSetting to compare with the first
+ * @flags: compare flags, e.g. %NM_SETTING_COMPARE_FLAG_EXACT
+ * @invert_results: this parameter is used internally by libnm and should
+ * be set to %FALSE. If %TRUE inverts the meaning of the #NMSettingDiffResult.
+ * @results: (inout) (transfer full) (element-type utf8 guint32): if the
+ * settings differ, on return a hash table mapping the differing keys to one or
+ * more %NMSettingDiffResult 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.
+ *
+ * Compares two #NMSetting objects for similarity, with comparison behavior
+ * modified by a set of flags. See the documentation for #NMSettingCompareFlags
+ * 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 @results, mapped to
+ * one or more #NMSettingDiffResult values.
+ *
+ * Returns: %TRUE if the settings contain the same values, %FALSE if they do not
+ **/
+gboolean
+nm_setting_diff (NMSetting *a,
+ NMSetting *b,
+ NMSettingCompareFlags flags,
+ gboolean invert_results,
+ GHashTable **results)
+{
+ GParamSpec **property_specs;
+ guint n_property_specs;
+ guint i;
+ NMSettingDiffResult a_result = NM_SETTING_DIFF_RESULT_IN_A;
+ NMSettingDiffResult b_result = NM_SETTING_DIFF_RESULT_IN_B;
+ NMSettingDiffResult a_result_default = NM_SETTING_DIFF_RESULT_IN_A_DEFAULT;
+ NMSettingDiffResult b_result_default = NM_SETTING_DIFF_RESULT_IN_B_DEFAULT;
+ gboolean results_created = FALSE;
+
+ g_return_val_if_fail (results != NULL, FALSE);
+ g_return_val_if_fail (NM_IS_SETTING (a), FALSE);
+ if (b) {
+ g_return_val_if_fail (NM_IS_SETTING (b), FALSE);
+ g_return_val_if_fail (G_OBJECT_TYPE (a) == G_OBJECT_TYPE (b), FALSE);
+ }
+
+ if ((flags & (NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT | NM_SETTING_COMPARE_FLAG_DIFF_RESULT_NO_DEFAULT)) ==
+ (NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT | NM_SETTING_COMPARE_FLAG_DIFF_RESULT_NO_DEFAULT)) {
+ /* conflicting flags: default to WITH_DEFAULT (clearing NO_DEFAULT). */
+ flags &= ~NM_SETTING_COMPARE_FLAG_DIFF_RESULT_NO_DEFAULT;
+ }
+
+ /* If the caller is calling this function in a pattern like this to get
+ * complete diffs:
+ *
+ * nm_setting_diff (A, B, FALSE, &results);
+ * nm_setting_diff (B, A, TRUE, &results);
+ *
+ * and wants us to invert the results so that the second invocation comes
+ * out correctly, do that here.
+ */
+ if (invert_results) {
+ a_result = NM_SETTING_DIFF_RESULT_IN_B;
+ b_result = NM_SETTING_DIFF_RESULT_IN_A;
+ a_result_default = NM_SETTING_DIFF_RESULT_IN_B_DEFAULT;
+ b_result_default = NM_SETTING_DIFF_RESULT_IN_A_DEFAULT;
+ }
+
+ if (*results == NULL) {
+ *results = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+ results_created = TRUE;
+ }
+
+ /* And now all properties */
+ property_specs = g_object_class_list_properties (G_OBJECT_GET_CLASS (a), &n_property_specs);
+
+ for (i = 0; i < n_property_specs; i++) {
+ GParamSpec *prop_spec = property_specs[i];
+ NMSettingDiffResult r = NM_SETTING_DIFF_RESULT_UNKNOWN;
+
+ /* Handle compare flags */
+ if (!should_compare_prop (a, prop_spec->name, flags, prop_spec->flags))
+ continue;
+ if (strcmp (prop_spec->name, NM_SETTING_NAME) == 0)
+ continue;
+
+ if (b) {
+ gboolean different;
+
+ different = !NM_SETTING_GET_CLASS (a)->compare_property (a, b, prop_spec, flags);
+ if (different) {
+ gboolean a_is_default, b_is_default;
+ GValue value = G_VALUE_INIT;
+
+ g_value_init (&value, prop_spec->value_type);
+ g_object_get_property (G_OBJECT (a), prop_spec->name, &value);
+ a_is_default = g_param_value_defaults (prop_spec, &value);
+
+ g_value_reset (&value);
+ g_object_get_property (G_OBJECT (b), prop_spec->name, &value);
+ b_is_default = g_param_value_defaults (prop_spec, &value);
+
+ g_value_unset (&value);
+ if ((flags & NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT) == 0) {
+ if (!a_is_default)
+ r |= a_result;
+ if (!b_is_default)
+ r |= b_result;
+ } else {
+ r |= a_result | b_result;
+ if (a_is_default)
+ r |= a_result_default;
+ if (b_is_default)
+ r |= b_result_default;
+ }
+ }
+ } else if ((flags & (NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT | NM_SETTING_COMPARE_FLAG_DIFF_RESULT_NO_DEFAULT)) == 0)
+ r = a_result; /* only in A */
+ else {
+ 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;
+ else if (flags & NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT)
+ r |= a_result | a_result_default;
+
+ g_value_unset (&value);
+ }
+
+ if (r != NM_SETTING_DIFF_RESULT_UNKNOWN) {
+ void *p;
+
+ if (g_hash_table_lookup_extended (*results, prop_spec->name, NULL, &p)) {
+ if ((r & GPOINTER_TO_UINT (p)) != r)
+ g_hash_table_insert (*results, g_strdup (prop_spec->name), GUINT_TO_POINTER (r | GPOINTER_TO_UINT (p)));
+ } else
+ g_hash_table_insert (*results, g_strdup (prop_spec->name), GUINT_TO_POINTER (r));
+ }
+ }
+ g_free (property_specs);
+
+ /* Don't return an empty hash table */
+ if (results_created && !g_hash_table_size (*results)) {
+ g_hash_table_destroy (*results);
+ *results = NULL;
+ }
+
+ return !(*results);
+}
+
+/**
+ * nm_setting_enumerate_values:
+ * @setting: the #NMSetting
+ * @func: (scope call): user-supplied function called for each property of the setting
+ * @user_data: user data passed to @func at each invocation
+ *
+ * Iterates over each property of the #NMSetting object, calling the supplied
+ * user function for each property.
+ **/
+void
+nm_setting_enumerate_values (NMSetting *setting,
+ NMSettingValueIterFn func,
+ gpointer user_data)
+{
+ GParamSpec **property_specs;
+ guint n_property_specs;
+ int i;
+
+ g_return_if_fail (NM_IS_SETTING (setting));
+ g_return_if_fail (func != NULL);
+
+ 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 = 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);
+ func (setting, prop_spec->name, &value, prop_spec->flags, user_data);
+ g_value_unset (&value);
+ }
+
+ g_free (property_specs);
+}
+
+/**
+ * _nm_setting_clear_secrets:
+ * @setting: the #NMSetting
+ *
+ * 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.
+ *
+ * Returns: %TRUE if the setting changed at all
+ **/
+gboolean
+_nm_setting_clear_secrets (NMSetting *setting)
+{
+ GParamSpec **property_specs;
+ guint n_property_specs;
+ guint i;
+ gboolean changed = FALSE;
+
+ 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];
+
+ if (prop_spec->flags & NM_SETTING_PARAM_SECRET) {
+ GValue value = G_VALUE_INIT;
+
+ g_value_init (&value, prop_spec->value_type);
+ 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 gboolean
+clear_secrets_with_flags (NMSetting *setting,
+ GParamSpec *pspec,
+ NMSettingClearSecretsWithFlagsFn func,
+ gpointer user_data)
+{
+ NMSettingSecretFlags flags = NM_SETTING_SECRET_FLAG_NONE;
+ gboolean changed = FALSE;
+
+ g_return_val_if_fail (!NM_IS_SETTING_VPN (setting), FALSE);
+
+ /* Clear the secret if the user function says to do so */
+ if (!nm_setting_get_secret_flags (setting, pspec->name, &flags, NULL))
+ g_return_val_if_reached (FALSE);
+
+ if (func (setting, pspec->name, flags, user_data) == TRUE) {
+ GValue value = G_VALUE_INIT;
+
+ g_value_init (&value, pspec->value_type);
+ 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;
+}
+
+/**
+ * _nm_setting_clear_secrets_with_flags:
+ * @setting: the #NMSetting
+ * @func: (scope call): function to be called to determine whether a
+ * specific secret should be cleared or not
+ * @user_data: caller-supplied data passed to @func
+ *
+ * Clears and frees secrets determined by @func.
+ *
+ * Returns: %TRUE if the setting changed at all
+ **/
+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_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) {
+ changed |= NM_SETTING_GET_CLASS (setting)->clear_secrets_with_flags (setting,
+ property_specs[i],
+ func,
+ user_data);
+ }
+ }
+
+ g_free (property_specs);
+ return changed;
+}
+
+/**
+ * _nm_setting_need_secrets:
+ * @setting: the #NMSetting
+ *
+ * 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.
+ *
+ * Returns: (transfer container) (element-type utf8): a #GPtrArray containing
+ * the property names of secrets of the #NMSetting which may be required; the
+ * caller owns the array and must free it with g_ptr_array_free(), but must not
+ * free the elements.
+ **/
+GPtrArray *
+_nm_setting_need_secrets (NMSetting *setting)
+{
+ GPtrArray *secrets = NULL;
+
+ g_return_val_if_fail (NM_IS_SETTING (setting), NULL);
+
+ if (NM_SETTING_GET_CLASS (setting)->need_secrets)
+ secrets = NM_SETTING_GET_CLASS (setting)->need_secrets (setting);
+
+ return secrets;
+}
+
+static int
+update_one_secret (NMSetting *setting, const char *key, GVariant *value, GError **error)
+{
+ const NMSettingProperty *property;
+ GParamSpec *prop_spec;
+ GValue prop_value = { 0, };
+
+ property = nm_setting_class_find_property (NM_SETTING_GET_CLASS (setting), key);
+ if (!property) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND,
+ _("secret not found"));
+ g_prefix_error (error, "%s.%s: ", nm_setting_get_name (setting), key);
+ return NM_SETTING_UPDATE_SECRET_ERROR;
+ }
+
+ /* Silently ignore non-secrets */
+ prop_spec = property->param_spec;
+ if (!prop_spec || !(prop_spec->flags & NM_SETTING_PARAM_SECRET))
+ return NM_SETTING_UPDATE_SECRET_SUCCESS_UNCHANGED;
+
+ if ( g_variant_is_of_type (value, G_VARIANT_TYPE_STRING)
+ && 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_variant_get_string (value, NULL)) == 0) {
+ g_free (v);
+ return NM_SETTING_UPDATE_SECRET_SUCCESS_UNCHANGED;
+ }
+ g_free (v);
+ }
+
+ g_value_init (&prop_value, prop_spec->value_type);
+ set_property_from_dbus (property, value, &prop_value);
+ g_object_set_property (G_OBJECT (setting), prop_spec->name, &prop_value);
+ g_value_unset (&prop_value);
+
+ return NM_SETTING_UPDATE_SECRET_SUCCESS_MODIFIED;
+}
+
+/**
+ * _nm_setting_update_secrets:
+ * @setting: the #NMSetting
+ * @secrets: a #GVariant of type #NM_VARIANT_TYPE_SETTING, mapping property
+ * names to secrets.
+ * @error: location to store error, or %NULL
+ *
+ * Update the setting's secrets, given a dictionary of secrets intended for that
+ * setting (deserialized from D-Bus for example).
+ *
+ * Returns: an #NMSettingUpdateSecretResult
+ **/
+NMSettingUpdateSecretResult
+_nm_setting_update_secrets (NMSetting *setting, GVariant *secrets, GError **error)
+{
+ GVariantIter iter;
+ const char *secret_key;
+ GVariant *secret_value;
+ GError *tmp_error = NULL;
+ NMSettingUpdateSecretResult result = NM_SETTING_UPDATE_SECRET_SUCCESS_UNCHANGED;
+
+ g_return_val_if_fail (NM_IS_SETTING (setting), NM_SETTING_UPDATE_SECRET_ERROR);
+ g_return_val_if_fail (g_variant_is_of_type (secrets, NM_VARIANT_TYPE_SETTING), NM_SETTING_UPDATE_SECRET_ERROR);
+ if (error)
+ g_return_val_if_fail (*error == NULL, NM_SETTING_UPDATE_SECRET_ERROR);
+
+ g_variant_iter_init (&iter, secrets);
+ while (g_variant_iter_next (&iter, "{&sv}", &secret_key, &secret_value)) {
+ int success;
+
+ 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)));
+
+ g_variant_unref (secret_value);
+
+ if (success == NM_SETTING_UPDATE_SECRET_ERROR) {
+ g_propagate_error (error, tmp_error);
+ return NM_SETTING_UPDATE_SECRET_ERROR;
+ }
+
+ if (success == NM_SETTING_UPDATE_SECRET_SUCCESS_MODIFIED)
+ result = NM_SETTING_UPDATE_SECRET_SUCCESS_MODIFIED;
+ }
+
+ return result;
+}
+
+static gboolean
+is_secret_prop (NMSetting *setting, const char *secret_name, GError **error)
+{
+ const NMSettingProperty *property;
+ GParamSpec *pspec;
+
+ property = nm_setting_class_find_property (NM_SETTING_GET_CLASS (setting), secret_name);
+ if (!property) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND,
+ _("secret is not set"));
+ g_prefix_error (error, "%s.%s: ", nm_setting_get_name (setting), secret_name);
+ return FALSE;
+ }
+
+ pspec = property->param_spec;
+ if (!pspec || !(pspec->flags & NM_SETTING_PARAM_SECRET)) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET,
+ _("not a secret property"));
+ g_prefix_error (error, "%s.%s: ", nm_setting_get_name (setting), secret_name);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static gboolean
+get_secret_flags (NMSetting *setting,
+ const char *secret_name,
+ gboolean verify_secret,
+ NMSettingSecretFlags *out_flags,
+ GError **error)
+{
+ char *flags_prop;
+ NMSettingSecretFlags flags = NM_SETTING_SECRET_FLAG_NONE;
+
+ if (verify_secret && !is_secret_prop (setting, secret_name, error)) {
+ if (out_flags)
+ *out_flags = NM_SETTING_SECRET_FLAG_NONE;
+ return FALSE;
+ }
+
+ flags_prop = g_strdup_printf ("%s-flags", secret_name);
+ g_object_get (G_OBJECT (setting), flags_prop, &flags, NULL);
+ g_free (flags_prop);
+
+ if (out_flags)
+ *out_flags = flags;
+ return TRUE;
+}
+
+/**
+ * nm_setting_get_secret_flags:
+ * @setting: the #NMSetting
+ * @secret_name: the secret key name to get flags for
+ * @out_flags: on success, the #NMSettingSecretFlags for the secret
+ * @error: location to store error, or %NULL
+ *
+ * For a given secret, retrieves the #NMSettingSecretFlags describing how to
+ * handle that secret.
+ *
+ * Returns: %TRUE on success (if the given secret name was a valid property of
+ * this setting, and if that property is secret), %FALSE if not
+ **/
+gboolean
+nm_setting_get_secret_flags (NMSetting *setting,
+ const char *secret_name,
+ NMSettingSecretFlags *out_flags,
+ GError **error)
+{
+ g_return_val_if_fail (NM_IS_SETTING (setting), FALSE);
+ g_return_val_if_fail (secret_name != NULL, FALSE);
+
+ return NM_SETTING_GET_CLASS (setting)->get_secret_flags (setting, secret_name, TRUE, out_flags, error);
+}
+
+static gboolean
+set_secret_flags (NMSetting *setting,
+ const char *secret_name,
+ gboolean verify_secret,
+ NMSettingSecretFlags flags,
+ GError **error)
+{
+ char *flags_prop;
+
+ if (verify_secret)
+ g_return_val_if_fail (is_secret_prop (setting, secret_name, error), FALSE);
+
+ flags_prop = g_strdup_printf ("%s-flags", secret_name);
+ g_object_set (G_OBJECT (setting), flags_prop, flags, NULL);
+ g_free (flags_prop);
+ return TRUE;
+}
+
+/**
+ * nm_setting_set_secret_flags:
+ * @setting: the #NMSetting
+ * @secret_name: the secret key name to set flags for
+ * @flags: the #NMSettingSecretFlags for the secret
+ * @error: location to store error, or %NULL
+ *
+ * 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
+ * this setting, and if that property is secret), %FALSE if not
+ **/
+gboolean
+nm_setting_set_secret_flags (NMSetting *setting,
+ const char *secret_name,
+ NMSettingSecretFlags flags,
+ GError **error)
+{
+ 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);
+
+ return NM_SETTING_GET_CLASS (setting)->set_secret_flags (setting, secret_name, TRUE, flags, error);
+}
+
+/**
+ * nm_setting_to_string:
+ * @setting: the #NMSetting
+ *
+ * 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.
+ *
+ * Returns: an allocated string containing a textual representation of the
+ * setting's properties and values (including secrets!), which the caller should
+ * free with g_free()
+ **/
+char *
+nm_setting_to_string (NMSetting *setting)
+{
+ GString *string;
+ GParamSpec **property_specs;
+ guint n_property_specs;
+ guint i;
+
+ 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);
+
+ string = g_string_new (nm_setting_get_name (setting));
+ g_string_append_c (string, '\n');
+
+ for (i = 0; i < n_property_specs; i++) {
+ GParamSpec *prop_spec = property_specs[i];
+ GValue value = G_VALUE_INIT;
+ char *value_str;
+ 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);
+
+ value_str = g_strdup_value_contents (&value);
+ g_string_append_printf (string, "\t%s : %s", prop_spec->name, value_str);
+ g_free (value_str);
+
+ is_default = g_param_value_defaults (prop_spec, &value);
+ g_value_unset (&value);
+
+ 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');
+ }
+
+ g_free (property_specs);
+ g_string_append_c (string, '\n');
+
+ return g_string_free (string, FALSE);
+}
+
+GVariant *
+_nm_setting_get_deprecated_virtual_interface_name (NMSetting *setting,
+ NMConnection *connection,
+ const char *property)
+{
+ NMSettingConnection *s_con;
+
+ s_con = nm_connection_get_setting_connection (connection);
+ g_return_val_if_fail (s_con != NULL, NULL);
+
+ if (nm_setting_connection_get_interface_name (s_con))
+ return g_variant_new_string (nm_setting_connection_get_interface_name (s_con));
+ else
+ return NULL;
+}
+
+/*****************************************************************************/
+
+static void
+nm_setting_init (NMSetting *setting)
+{
+}
+
+static void
+constructed (GObject *object)
+{
+ _ensure_setting_info (object, NM_SETTING_GET_PRIVATE (object));
+
+ G_OBJECT_CLASS (nm_setting_parent_class)->constructed (object);
+}
+
+static void
+get_property (GObject *object, guint prop_id,
+ GValue *value, GParamSpec *pspec)
+{
+ NMSetting *setting = NM_SETTING (object);
+
+ switch (prop_id) {
+ case PROP_NAME:
+ g_value_set_string (value, nm_setting_get_name (setting));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_setting_class_init (NMSettingClass *setting_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (setting_class);
+
+ if (!setting_property_overrides_quark)
+ setting_property_overrides_quark = g_quark_from_static_string ("nm-setting-property-overrides");
+ if (!setting_properties_quark)
+ setting_properties_quark = g_quark_from_static_string ("nm-setting-properties");
+
+ g_type_class_add_private (setting_class, sizeof (NMSettingPrivate));
+
+ /* virtual methods */
+ object_class->constructed = constructed;
+ object_class->get_property = get_property;
+
+ setting_class->update_one_secret = update_one_secret;
+ setting_class->get_secret_flags = get_secret_flags;
+ setting_class->set_secret_flags = set_secret_flags;
+ setting_class->compare_property = compare_property;
+ setting_class->clear_secrets_with_flags = clear_secrets_with_flags;
+
+ /* Properties */
+
+ /**
+ * NMSetting:name:
+ *
+ * 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".
+ **/
+ g_object_class_install_property
+ (object_class, PROP_NAME,
+ g_param_spec_string (NM_SETTING_NAME, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/libnm-core/nm-setting.h b/libnm-core/nm-setting.h
new file mode 100644
index 000000000..3601fce30
--- /dev/null
+++ b/libnm-core/nm-setting.h
@@ -0,0 +1,282 @@
+/* -*- 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 2007 - 2011 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ */
+
+#ifndef __NM_SETTING_H__
+#define __NM_SETTING_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-core-types.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SETTING (nm_setting_get_type ())
+#define NM_SETTING(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SETTING, NMSetting))
+#define NM_SETTING_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SETTING, NMSettingClass))
+#define NM_IS_SETTING(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SETTING))
+#define NM_IS_SETTING_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_SETTING))
+#define NM_SETTING_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SETTING, NMSettingClass))
+
+/* The property of the #NMSetting is required for the setting to be valid */
+#define NM_SETTING_PARAM_REQUIRED (1 << (1 + G_PARAM_USER_SHIFT))
+
+/* The property of the #NMSetting is a secret */
+#define NM_SETTING_PARAM_SECRET (1 << (2 + G_PARAM_USER_SHIFT))
+
+/* The property of the #NMSetting should be ignored during comparisons that
+ * use the %NM_SETTING_COMPARE_FLAG_FUZZY flag.
+ */
+#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"
+
+/**
+ * NMSettingSecretFlags:
+ * @NM_SETTING_SECRET_FLAG_NONE: the system is responsible for providing and
+ * storing this secret (default)
+ * @NM_SETTING_SECRET_FLAG_AGENT_OWNED: a user secret agent is responsible
+ * for providing and storing this secret; when it is required agents will be
+ * asked to retrieve it
+ * @NM_SETTING_SECRET_FLAG_NOT_SAVED: this secret should not be saved, but
+ * should be requested from the user each time it is needed
+ * @NM_SETTING_SECRET_FLAG_NOT_REQUIRED: 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
+ *
+ * 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.
+ *
+ **/
+typedef enum { /*< flags >*/
+ 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-core-internal.h as well */
+} NMSettingSecretFlags;
+
+/**
+ * NMSettingCompareFlags:
+ * @NM_SETTING_COMPARE_FLAG_EXACT: match all properties exactly
+ * @NM_SETTING_COMPARE_FLAG_FUZZY: match only important attributes, like SSID,
+ * type, security settings, etc. Does not match, for example, connection ID
+ * or UUID.
+ * @NM_SETTING_COMPARE_FLAG_IGNORE_ID: ignore the connection's ID
+ * @NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS: ignore all secrets
+ * @NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS: ignore secrets for which
+ * the secret's flags indicate the secret is owned by a user secret agent
+ * (ie, the secret's flag includes @NM_SETTING_SECRET_FLAG_AGENT_OWNED)
+ * @NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS: ignore secrets for which
+ * the secret's flags indicate the secret should not be saved to persistent
+ * storage (ie, the secret's flag includes @NM_SETTING_SECRET_FLAG_NOT_SAVED)
+ * @NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT: if this flag is set,
+ * nm_setting_diff() and nm_connection_diff() will also include properties that
+ * are set to their default value. See also @NM_SETTING_COMPARE_FLAG_DIFF_RESULT_NO_DEFAULT.
+ * @NM_SETTING_COMPARE_FLAG_DIFF_RESULT_NO_DEFAULT: if this flag is set,
+ * nm_setting_diff() and nm_connection_diff() will not include properties that
+ * are set to their default value. This is the opposite of
+ * @NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT. If both flags are set together,
+ * @NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT wins. If both flags are unset,
+ * this means to exclude default properties if there is a setting to compare,
+ * but include all properties, if the setting 'b' is missing. This is the legacy
+ * behaviour of libnm-util, where nm_setting_diff() behaved differently depending
+ * on whether the setting 'b' was available. If @NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT
+ * is set, nm_setting_diff() will also set the flags @NM_SETTING_DIFF_RESULT_IN_A_DEFAULT
+ * and @NM_SETTING_DIFF_RESULT_IN_B_DEFAULT, if the values are default values.
+ * @NM_SETTING_COMPARE_FLAG_IGNORE_TIMESTAMP: ignore the connection's timestamp
+ *
+ * These flags modify the comparison behavior when comparing two settings or
+ * two connections.
+ *
+ **/
+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,
+ NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT = 0x00000020,
+ NM_SETTING_COMPARE_FLAG_DIFF_RESULT_NO_DEFAULT = 0x00000040,
+ NM_SETTING_COMPARE_FLAG_IGNORE_TIMESTAMP = 0x00000080,
+
+ /* 0x80000000 is used for a private flag */
+} NMSettingCompareFlags;
+
+
+/**
+ * NMSetting:
+ *
+ * The NMSetting struct contains only private data.
+ * It should only be accessed through the functions described below.
+ */
+struct _NMSetting {
+ GObject parent;
+};
+
+
+/**
+ * NMSettingClearSecretsWithFlagsFn:
+ * @setting: The setting for which secrets are being iterated
+ * @secret: The secret's name
+ * @flags: The secret's flags, eg %NM_SETTING_SECRET_FLAG_AGENT_OWNED
+ * @user_data: User data passed to nm_connection_clear_secrets_with_flags()
+ *
+ * Returns: %TRUE to clear the secret, %FALSE to not clear the secret
+ */
+typedef gboolean (*NMSettingClearSecretsWithFlagsFn) (NMSetting *setting,
+ const char *secret,
+ NMSettingSecretFlags flags,
+ gpointer user_data);
+
+typedef struct {
+ GObjectClass parent;
+
+ /* Virtual functions */
+ gint (*verify) (NMSetting *setting,
+ NMConnection *connection,
+ GError **error);
+
+ GPtrArray *(*need_secrets) (NMSetting *setting);
+
+ int (*update_one_secret) (NMSetting *setting,
+ const char *key,
+ GVariant *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);
+
+ gboolean (*clear_secrets_with_flags) (NMSetting *setting,
+ GParamSpec *pspec,
+ NMSettingClearSecretsWithFlagsFn func,
+ gpointer user_data);
+
+ /* 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);
+
+ /*< private >*/
+ gpointer padding[8];
+} NMSettingClass;
+
+/**
+ * NMSettingValueIterFn:
+ * @setting: The setting for which properties are being iterated, given to
+ * nm_setting_enumerate_values()
+ * @key: The value/property name
+ * @value: The property's value
+ * @flags: The property's flags, like %NM_SETTING_PARAM_SECRET
+ * @user_data: User data passed to nm_setting_enumerate_values()
+ */
+typedef void (*NMSettingValueIterFn) (NMSetting *setting,
+ const char *key,
+ const GValue *value,
+ GParamFlags flags,
+ gpointer user_data);
+
+
+GType nm_setting_get_type (void);
+
+GType nm_setting_lookup_type (const char *name);
+
+NMSetting *nm_setting_duplicate (NMSetting *setting);
+
+const char *nm_setting_get_name (NMSetting *setting);
+
+gboolean nm_setting_verify (NMSetting *setting,
+ NMConnection *connection,
+ GError **error);
+
+gboolean nm_setting_compare (NMSetting *a,
+ NMSetting *b,
+ NMSettingCompareFlags flags);
+
+/**
+ * NMSettingDiffResult:
+ * @NM_SETTING_DIFF_RESULT_UNKNOWN: unknown result
+ * @NM_SETTING_DIFF_RESULT_IN_A: the property is present in setting A
+ * @NM_SETTING_DIFF_RESULT_IN_B: the property is present in setting B
+ * @NM_SETTING_DIFF_RESULT_IN_A_DEFAULT: the property is present in
+ * setting A but is set to the default value. This flag is only set,
+ * if you specify @NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT.
+ * @NM_SETTING_DIFF_RESULT_IN_B_DEFAULT: analog to @NM_SETTING_DIFF_RESULT_IN_A_DEFAULT.
+ *
+ * These values indicate the result of a setting difference operation.
+ **/
+typedef enum {
+ NM_SETTING_DIFF_RESULT_UNKNOWN = 0x00000000,
+ NM_SETTING_DIFF_RESULT_IN_A = 0x00000001,
+ NM_SETTING_DIFF_RESULT_IN_B = 0x00000002,
+ NM_SETTING_DIFF_RESULT_IN_A_DEFAULT = 0x00000004,
+ NM_SETTING_DIFF_RESULT_IN_B_DEFAULT = 0x00000004,
+} NMSettingDiffResult;
+
+gboolean nm_setting_diff (NMSetting *a,
+ NMSetting *b,
+ NMSettingCompareFlags flags,
+ gboolean invert_results,
+ GHashTable **results);
+
+void nm_setting_enumerate_values (NMSetting *setting,
+ NMSettingValueIterFn func,
+ gpointer user_data);
+
+char *nm_setting_to_string (NMSetting *setting);
+
+/* Secrets */
+gboolean nm_setting_get_secret_flags (NMSetting *setting,
+ const char *secret_name,
+ NMSettingSecretFlags *out_flags,
+ GError **error);
+
+gboolean nm_setting_set_secret_flags (NMSetting *setting,
+ const char *secret_name,
+ NMSettingSecretFlags flags,
+ GError **error);
+
+/* Properties */
+const GVariantType *nm_setting_get_dbus_property_type (NMSetting *setting,
+ const char *property_name);
+
+G_END_DECLS
+
+#endif /* __NM_SETTING_H__ */
diff --git a/libnm-core/nm-simple-connection.c b/libnm-core/nm-simple-connection.c
new file mode 100644
index 000000000..c67f62445
--- /dev/null
+++ b/libnm-core/nm-simple-connection.c
@@ -0,0 +1,123 @@
+/* -*- 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 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2014 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include "nm-simple-connection.h"
+#include "nm-setting-private.h"
+
+static void nm_simple_connection_interface_init (NMConnectionInterface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (NMSimpleConnection, nm_simple_connection, G_TYPE_OBJECT,
+ G_IMPLEMENT_INTERFACE (NM_TYPE_CONNECTION, nm_simple_connection_interface_init);
+ )
+
+static void
+nm_simple_connection_init (NMSimpleConnection *self)
+{
+}
+
+/**
+ * nm_simple_connection_new:
+ *
+ * Creates a new #NMSimpleConnection object with no #NMSetting objects. An
+ * #NMSimpleConnection does not directly represent a D-Bus-exported connection,
+ * but might be used in the process of creating a new one.
+ *
+ * Returns: (transfer full): the new empty #NMConnection object
+ **/
+NMConnection *
+nm_simple_connection_new (void)
+{
+ return (NMConnection *) g_object_new (NM_TYPE_SIMPLE_CONNECTION, NULL);
+}
+
+/**
+ * nm_simple_connection_new_from_dbus:
+ * @dict: a #GVariant of type %NM_VARIANT_TYPE_CONNECTION describing the connection
+ * @error: on unsuccessful return, an error
+ *
+ * Creates a new #NMSimpleConnection from a hash table describing the
+ * connection. See nm_connection_to_dbus() for a description of the expected
+ * hash table.
+ *
+ * Returns: (transfer full): the new #NMSimpleConnection object, populated with
+ * settings created from the values in the hash table, or %NULL if the
+ * connection failed to validate
+ **/
+NMConnection *
+nm_simple_connection_new_from_dbus (GVariant *dict, GError **error)
+{
+ NMConnection *connection;
+
+ g_return_val_if_fail (dict != NULL, NULL);
+ g_return_val_if_fail (g_variant_is_of_type (dict, NM_VARIANT_TYPE_CONNECTION), NULL);
+
+ connection = nm_simple_connection_new ();
+ if ( !nm_connection_replace_settings (connection, dict, error)
+ || !nm_connection_normalize (connection, NULL, NULL, error))
+ g_clear_object (&connection);
+ return connection;
+}
+
+/**
+ * nm_simple_connection_new_clone:
+ * @connection: the #NMConnection to clone
+ *
+ * Clones an #NMConnection as an #NMSimpleConnection.
+ *
+ * Returns: (transfer full): a new #NMConnection containing the same settings
+ * and properties as the source #NMConnection
+ **/
+NMConnection *
+nm_simple_connection_new_clone (NMConnection *connection)
+{
+ NMConnection *clone;
+
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
+
+ clone = nm_simple_connection_new ();
+ nm_connection_set_path (clone, nm_connection_get_path (connection));
+ nm_connection_replace_settings_from_connection (clone, connection);
+
+ return clone;
+}
+
+static void
+dispose (GObject *object)
+{
+ nm_connection_clear_secrets (NM_CONNECTION (object));
+
+ G_OBJECT_CLASS (nm_simple_connection_parent_class)->dispose (object);
+}
+
+static void
+nm_simple_connection_class_init (NMSimpleConnectionClass *simple_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (simple_class);
+
+ object_class->dispose = dispose;
+}
+
+static void
+nm_simple_connection_interface_init (NMConnectionInterface *iface)
+{
+}
diff --git a/libnm-core/nm-simple-connection.h b/libnm-core/nm-simple-connection.h
new file mode 100644
index 000000000..da6030a88
--- /dev/null
+++ b/libnm-core/nm-simple-connection.h
@@ -0,0 +1,61 @@
+/* -*- 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 2014 Red Hat, Inc.
+ */
+
+#ifndef __NM_SIMPLE_CONNECTION_H__
+#define __NM_SIMPLE_CONNECTION_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-connection.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SIMPLE_CONNECTION (nm_simple_connection_get_type ())
+#define NM_SIMPLE_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SIMPLE_CONNECTION, NMSimpleConnection))
+#define NM_SIMPLE_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SIMPLE_CONNECTION, NMSimpleConnectionClass))
+#define NM_IS_SIMPLE_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SIMPLE_CONNECTION))
+#define NM_IS_SIMPLE_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_SIMPLE_CONNECTION))
+#define NM_SIMPLE_CONNECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SIMPLE_CONNECTION, NMSimpleConnectionClass))
+
+struct _NMSimpleConnection {
+ GObject parent;
+};
+
+typedef struct {
+ GObjectClass parent_class;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMSimpleConnectionClass;
+
+GType nm_simple_connection_get_type (void);
+
+NMConnection *nm_simple_connection_new (void);
+
+NMConnection *nm_simple_connection_new_from_dbus (GVariant *dict,
+ GError **error);
+
+NMConnection *nm_simple_connection_new_clone (NMConnection *connection);
+
+G_END_DECLS
+
+#endif /* __NM_SIMPLE_CONNECTION__ */
diff --git a/libnm-core/nm-utils-private.h b/libnm-core/nm-utils-private.h
new file mode 100644
index 000000000..3854d6795
--- /dev/null
+++ b/libnm-core/nm-utils-private.h
@@ -0,0 +1,51 @@
+/* -*- 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 2005 - 2014 Red Hat, Inc.
+ */
+
+#ifndef __NM_UTILS_PRIVATE_H__
+#define __NM_UTILS_PRIVATE_H__
+
+#include "nm-setting-private.h"
+
+gboolean _nm_utils_string_slist_validate (GSList *list,
+ const char **valid_values);
+
+/* D-Bus transform funcs */
+
+GVariant * _nm_utils_hwaddr_to_dbus (const GValue *prop_value);
+void _nm_utils_hwaddr_from_dbus (GVariant *dbus_value,
+ GValue *prop_value);
+
+GVariant * _nm_utils_strdict_to_dbus (const GValue *prop_value);
+void _nm_utils_strdict_from_dbus (GVariant *dbus_value,
+ GValue *prop_value);
+
+GVariant * _nm_utils_bytes_to_dbus (const GValue *prop_value);
+void _nm_utils_bytes_from_dbus (GVariant *dbus_value,
+ GValue *prop_value);
+
+GSList * _nm_utils_strv_to_slist (char **strv);
+char ** _nm_utils_slist_to_strv (GSList *slist);
+
+GPtrArray * _nm_utils_strv_to_ptrarray (char **strv);
+char ** _nm_utils_ptrarray_to_strv (GPtrArray *ptrarray);
+
+char * _nm_utils_hwaddr_canonical_or_invalid (const char *mac, gssize length);
+
+#endif
diff --git a/libnm-core/nm-utils.c b/libnm-core/nm-utils.c
new file mode 100644
index 000000000..e14775ff2
--- /dev/null
+++ b/libnm-core/nm-utils.c
@@ -0,0 +1,3215 @@
+/* -*- 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 2005 - 2014 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <stdlib.h>
+#include <netinet/ether.h>
+#include <arpa/inet.h>
+#include <uuid/uuid.h>
+#include <libintl.h>
+#include <gmodule.h>
+#include <glib/gi18n-lib.h>
+
+#include "nm-utils.h"
+#include "nm-utils-private.h"
+#include "nm-glib-compat.h"
+#include "nm-setting-private.h"
+#include "crypto.h"
+#include "gsystem-local-alloc.h"
+#include "nm-utils-internal.h"
+
+#include "nm-setting-bond.h"
+#include "nm-setting-bridge.h"
+#include "nm-setting-infiniband.h"
+#include "nm-setting-ip6-config.h"
+#include "nm-setting-team.h"
+#include "nm-setting-vlan.h"
+#include "nm-setting-wired.h"
+#include "nm-setting-wireless.h"
+
+/* Embed the commit id in the build binary */
+static const char *const __nm_git_sha = STRLEN (NM_GIT_SHA) > 0 ? "NM_GIT_SHA:"NM_GIT_SHA : "";
+
+/**
+ * SECTION:nm-utils
+ * @short_description: Utility functions
+ *
+ * A collection of utility functions for working with SSIDs, IP addresses, Wi-Fi
+ * access points and devices, among other things.
+ */
+
+struct EncodingTriplet
+{
+ const char *encoding1;
+ const char *encoding2;
+ const char *encoding3;
+};
+
+struct IsoLangToEncodings
+{
+ const char * lang;
+ struct EncodingTriplet encodings;
+};
+
+/* 5-letter language codes */
+static const struct IsoLangToEncodings isoLangEntries5[] =
+{
+ /* Simplified Chinese */
+ { "zh_cn", {"euc-cn", "gb2312", "gb18030"} }, /* PRC */
+ { "zh_sg", {"euc-cn", "gb2312", "gb18030"} }, /* Singapore */
+
+ /* Traditional Chinese */
+ { "zh_tw", {"big5", "euc-tw", NULL} }, /* Taiwan */
+ { "zh_hk", {"big5", "euc-tw", "big5-hkcs"} },/* Hong Kong */
+ { "zh_mo", {"big5", "euc-tw", NULL} }, /* Macau */
+
+ /* Table end */
+ { NULL, {NULL, NULL, NULL} }
+};
+
+/* 2-letter language codes; we don't care about the other 3 in this table */
+static const struct IsoLangToEncodings isoLangEntries2[] =
+{
+ /* Japanese */
+ { "ja", {"euc-jp", "shift_jis", "iso-2022-jp"} },
+
+ /* Korean */
+ { "ko", {"euc-kr", "iso-2022-kr", "johab"} },
+
+ /* Thai */
+ { "th", {"iso-8859-11","windows-874", NULL} },
+
+ /* Central European */
+ { "hu", {"iso-8859-2", "windows-1250", NULL} }, /* Hungarian */
+ { "cs", {"iso-8859-2", "windows-1250", NULL} }, /* Czech */
+ { "hr", {"iso-8859-2", "windows-1250", NULL} }, /* Croatian */
+ { "pl", {"iso-8859-2", "windows-1250", NULL} }, /* Polish */
+ { "ro", {"iso-8859-2", "windows-1250", NULL} }, /* Romanian */
+ { "sk", {"iso-8859-2", "windows-1250", NULL} }, /* Slovakian */
+ { "sl", {"iso-8859-2", "windows-1250", NULL} }, /* Slovenian */
+ { "sh", {"iso-8859-2", "windows-1250", NULL} }, /* Serbo-Croatian */
+
+ /* Cyrillic */
+ { "ru", {"koi8-r", "windows-1251", "iso-8859-5"} }, /* Russian */
+ { "be", {"koi8-r", "windows-1251", "iso-8859-5"} }, /* Belorussian */
+ { "bg", {"windows-1251","koi8-r", "iso-8859-5"} }, /* Bulgarian */
+ { "mk", {"koi8-r", "windows-1251", "iso-8859-5"} }, /* Macedonian */
+ { "sr", {"koi8-r", "windows-1251", "iso-8859-5"} }, /* Serbian */
+ { "uk", {"koi8-u", "koi8-r", "windows-1251"} }, /* Ukranian */
+
+ /* Arabic */
+ { "ar", {"iso-8859-6", "windows-1256", NULL} },
+
+ /* Baltic */
+ { "et", {"iso-8859-4", "windows-1257", NULL} }, /* Estonian */
+ { "lt", {"iso-8859-4", "windows-1257", NULL} }, /* Lithuanian */
+ { "lv", {"iso-8859-4", "windows-1257", NULL} }, /* Latvian */
+
+ /* Greek */
+ { "el", {"iso-8859-7", "windows-1253", NULL} },
+
+ /* Hebrew */
+ { "he", {"iso-8859-8", "windows-1255", NULL} },
+ { "iw", {"iso-8859-8", "windows-1255", NULL} },
+
+ /* Turkish */
+ { "tr", {"iso-8859-9", "windows-1254", NULL} },
+
+ /* Table end */
+ { NULL, {NULL, NULL, NULL} }
+};
+
+
+static GHashTable * langToEncodings5 = NULL;
+static GHashTable * langToEncodings2 = NULL;
+
+static void
+init_lang_to_encodings_hash (void)
+{
+ struct IsoLangToEncodings *enc;
+
+ if (G_UNLIKELY (langToEncodings5 == NULL)) {
+ /* Five-letter codes */
+ enc = (struct IsoLangToEncodings *) &isoLangEntries5[0];
+ langToEncodings5 = g_hash_table_new (g_str_hash, g_str_equal);
+ while (enc->lang) {
+ g_hash_table_insert (langToEncodings5, (gpointer) enc->lang,
+ (gpointer) &enc->encodings);
+ enc++;
+ }
+ }
+
+ if (G_UNLIKELY (langToEncodings2 == NULL)) {
+ /* Two-letter codes */
+ enc = (struct IsoLangToEncodings *) &isoLangEntries2[0];
+ langToEncodings2 = g_hash_table_new (g_str_hash, g_str_equal);
+ while (enc->lang) {
+ g_hash_table_insert (langToEncodings2, (gpointer) enc->lang,
+ (gpointer) &enc->encodings);
+ enc++;
+ }
+ }
+}
+
+
+static gboolean
+get_encodings_for_lang (const char *lang,
+ char **encoding1,
+ char **encoding2,
+ char **encoding3)
+{
+ struct EncodingTriplet * encodings;
+ gboolean success = FALSE;
+ char * tmp_lang;
+
+ g_return_val_if_fail (lang != NULL, FALSE);
+ g_return_val_if_fail (encoding1 != NULL, FALSE);
+ g_return_val_if_fail (encoding2 != NULL, FALSE);
+ g_return_val_if_fail (encoding3 != NULL, FALSE);
+
+ *encoding1 = "iso-8859-1";
+ *encoding2 = "windows-1251";
+ *encoding3 = NULL;
+
+ init_lang_to_encodings_hash ();
+
+ tmp_lang = g_strdup (lang);
+ if ((encodings = g_hash_table_lookup (langToEncodings5, tmp_lang))) {
+ *encoding1 = (char *) encodings->encoding1;
+ *encoding2 = (char *) encodings->encoding2;
+ *encoding3 = (char *) encodings->encoding3;
+ success = TRUE;
+ }
+
+ /* Truncate tmp_lang to length of 2 */
+ if (strlen (tmp_lang) > 2)
+ tmp_lang[2] = '\0';
+ if (!success && (encodings = g_hash_table_lookup (langToEncodings2, tmp_lang))) {
+ *encoding1 = (char *) encodings->encoding1;
+ *encoding2 = (char *) encodings->encoding2;
+ *encoding3 = (char *) encodings->encoding3;
+ success = TRUE;
+ }
+
+ g_free (tmp_lang);
+ return success;
+}
+
+/* init libnm */
+
+static gboolean initialized = FALSE;
+
+static void __attribute__((constructor))
+_nm_utils_init (void)
+{
+ GModule *self;
+ gpointer func;
+
+ (void) __nm_git_sha;
+
+ if (initialized)
+ return;
+ initialized = TRUE;
+
+ self = g_module_open (NULL, 0);
+ if (g_module_symbol (self, "nm_util_get_private", &func))
+ g_error ("libnm-util symbols detected; Mixing libnm with libnm-util/libnm-glib is not supported");
+ g_module_close (self);
+
+ bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
+ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+
+ g_type_init ();
+
+ _nm_dbus_errors_init ();
+}
+
+gboolean _nm_utils_is_manager_process;
+
+/* ssid helpers */
+
+/**
+ * nm_utils_ssid_to_utf8:
+ * @ssid: (array length=len): pointer to a buffer containing the SSID data
+ * @len: length of the SSID data in @ssid
+ *
+ * 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.
+ *
+ * This function does almost everything humanly possible to convert the input
+ * into a printable UTF-8 string, using roughly the following procedure:
+ *
+ * 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 '?'.
+ *
+ * Again, this function should be used for debugging and display purposes
+ * _only_.
+ *
+ * Returns: (transfer full): an allocated string containing a UTF-8
+ * representation of the SSID, which must be freed by the caller using g_free().
+ * Returns %NULL on errors.
+ **/
+char *
+nm_utils_ssid_to_utf8 (const guint8 *ssid, gsize len)
+{
+ char *converted = NULL;
+ char *lang, *e1 = NULL, *e2 = NULL, *e3 = NULL;
+
+ g_return_val_if_fail (ssid != NULL, NULL);
+
+ if (g_utf8_validate ((const gchar *) ssid, len, NULL))
+ return g_strndup ((const gchar *) ssid, len);
+
+ /* LANG may be a good encoding hint */
+ g_get_charset ((const char **)(&e1));
+ if ((lang = getenv ("LANG"))) {
+ char * dot;
+
+ lang = g_ascii_strdown (lang, -1);
+ if ((dot = strchr (lang, '.')))
+ *dot = '\0';
+
+ get_encodings_for_lang (lang, &e1, &e2, &e3);
+ g_free (lang);
+ }
+
+ converted = g_convert ((const gchar *) ssid, len, "UTF-8", e1, NULL, NULL, NULL);
+ if (!converted && e2)
+ converted = g_convert ((const gchar *) ssid, len, "UTF-8", e2, NULL, NULL, NULL);
+
+ if (!converted && e3)
+ converted = g_convert ((const gchar *) ssid, len, "UTF-8", e3, NULL, NULL, NULL);
+
+ if (!converted) {
+ converted = g_convert_with_fallback ((const gchar *) ssid, len,
+ "UTF-8", e1, "?", NULL, NULL, NULL);
+ }
+
+ return converted;
+}
+
+/* Shamelessly ripped from the Linux kernel ieee80211 stack */
+/**
+ * nm_utils_is_empty_ssid:
+ * @ssid: (array length=len): pointer to a buffer containing the SSID data
+ * @len: length of the SSID data in @ssid
+ *
+ * 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.
+ *
+ * Returns: %TRUE if the SSID is "empty", %FALSE if it is not
+ **/
+gboolean
+nm_utils_is_empty_ssid (const guint8 *ssid, gsize len)
+{
+ /* Single white space is for Linksys APs */
+ if (len == 1 && ssid[0] == ' ')
+ return TRUE;
+
+ /* Otherwise, if the entire ssid is 0, we assume it is hidden */
+ while (len--) {
+ if (ssid[len] != '\0')
+ return FALSE;
+ }
+ return TRUE;
+}
+
+#define ESSID_MAX_SIZE 32
+
+/**
+ * nm_utils_escape_ssid:
+ * @ssid: (array length=len): pointer to a buffer containing the SSID data
+ * @len: length of the SSID data in @ssid
+ *
+ * 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.
+ *
+ * Returns: pointer to the escaped SSID, which uses an internal static buffer
+ * and will be overwritten by subsequent calls to this function
+ **/
+const char *
+nm_utils_escape_ssid (const guint8 *ssid, gsize len)
+{
+ static char escaped[ESSID_MAX_SIZE * 2 + 1];
+ const guint8 *s = ssid;
+ char *d = escaped;
+
+ if (nm_utils_is_empty_ssid (ssid, len)) {
+ memcpy (escaped, "<hidden>", sizeof ("<hidden>"));
+ return escaped;
+ }
+
+ len = MIN (len, (guint32) ESSID_MAX_SIZE);
+ while (len--) {
+ if (*s == '\0') {
+ *d++ = '\\';
+ *d++ = '0';
+ s++;
+ } else {
+ *d++ = *s++;
+ }
+ }
+ *d = '\0';
+ return escaped;
+}
+
+/**
+ * nm_utils_same_ssid:
+ * @ssid1: (array length=len1): the first SSID to compare
+ * @len1: length of the SSID data in @ssid1
+ * @ssid2: (array length=len2): the second SSID to compare
+ * @len2: length of the SSID data in @ssid2
+ * @ignore_trailing_null: %TRUE to ignore one trailing NULL byte
+ *
+ * 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.
+ *
+ * Returns: %TRUE if the SSIDs are the same, %FALSE if they are not
+ **/
+gboolean
+nm_utils_same_ssid (const guint8 *ssid1, gsize len1,
+ const guint8 *ssid2, gsize len2,
+ gboolean ignore_trailing_null)
+{
+ g_return_val_if_fail (ssid1 != NULL || len1 == 0, FALSE);
+ g_return_val_if_fail (ssid2 != NULL || len2 == 0, FALSE);
+
+ if (ssid1 == ssid2 && len1 == len2)
+ return TRUE;
+ if (!ssid1 || !ssid2)
+ return FALSE;
+
+ if (ignore_trailing_null) {
+ if (len1 && ssid1[len1 - 1] == '\0')
+ len1--;
+ if (len2 && ssid2[len2 - 1] == '\0')
+ len2--;
+ }
+
+ if (len1 != len2)
+ return FALSE;
+
+ return memcmp (ssid1, ssid2, len1) == 0 ? TRUE : FALSE;
+}
+
+gboolean
+_nm_utils_string_in_list (const char *str, const char **valid_strings)
+{
+ int i;
+
+ for (i = 0; valid_strings[i]; i++)
+ if (strcmp (str, valid_strings[i]) == 0)
+ break;
+
+ return valid_strings[i] != NULL;
+}
+
+gboolean
+_nm_utils_string_slist_validate (GSList *list, const char **valid_values)
+{
+ GSList *iter;
+
+ for (iter = list; iter; iter = iter->next) {
+ if (!_nm_utils_string_in_list ((char *) iter->data, valid_values))
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/**
+ * _nm_utils_hash_values_to_slist:
+ * @hash: a #GHashTable
+ *
+ * Utility function to iterate over a hash table and return
+ * it's values as a #GSList.
+ *
+ * Returns: (element-type gpointer) (transfer container): a newly allocated #GSList
+ * containing the values of the hash table. The caller must free the
+ * returned list with g_slist_free(). The hash values are not owned
+ * by the returned list.
+ **/
+GSList *
+_nm_utils_hash_values_to_slist (GHashTable *hash)
+{
+ GSList *list = NULL;
+ GHashTableIter iter;
+ void *value;
+
+ g_return_val_if_fail (hash, NULL);
+
+ g_hash_table_iter_init (&iter, hash);
+ while (g_hash_table_iter_next (&iter, NULL, &value))
+ list = g_slist_prepend (list, value);
+
+ return list;
+}
+
+GVariant *
+_nm_utils_strdict_to_dbus (const GValue *prop_value)
+{
+ GHashTable *hash;
+ GHashTableIter iter;
+ gpointer key, value;
+ GVariantBuilder builder;
+
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{ss}"));
+ hash = g_value_get_boxed (prop_value);
+ if (hash) {
+ g_hash_table_iter_init (&iter, hash);
+ while (g_hash_table_iter_next (&iter, &key, &value))
+ g_variant_builder_add (&builder, "{ss}", key, value);
+ }
+
+ return g_variant_builder_end (&builder);
+}
+
+void
+_nm_utils_strdict_from_dbus (GVariant *dbus_value,
+ GValue *prop_value)
+{
+ GVariantIter iter;
+ const char *key, *value;
+ GHashTable *hash;
+
+ hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ g_variant_iter_init (&iter, dbus_value);
+ while (g_variant_iter_next (&iter, "{&s&s}", &key, &value))
+ g_hash_table_insert (hash, g_strdup (key), g_strdup (value));
+
+ g_value_take_boxed (prop_value, hash);
+}
+
+GHashTable *
+_nm_utils_copy_strdict (GHashTable *strdict)
+{
+ GHashTable *copy;
+ GHashTableIter iter;
+ gpointer key, value;
+
+ copy = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ if (strdict) {
+ g_hash_table_iter_init (&iter, strdict);
+ while (g_hash_table_iter_next (&iter, &key, &value))
+ g_hash_table_insert (copy, g_strdup (key), g_strdup (value));
+ }
+ return copy;
+}
+
+GPtrArray *
+_nm_utils_copy_slist_to_array (const GSList *list,
+ NMUtilsCopyFunc copy_func,
+ GDestroyNotify unref_func)
+{
+ const GSList *iter;
+ GPtrArray *array;
+
+ array = g_ptr_array_new_with_free_func (unref_func);
+ for (iter = list; iter; iter = iter->next)
+ g_ptr_array_add (array, copy_func ? copy_func (iter->data) : iter->data);
+ return array;
+}
+
+GSList *
+_nm_utils_copy_array_to_slist (const GPtrArray *array,
+ NMUtilsCopyFunc copy_func)
+{
+ GSList *slist = NULL;
+ gpointer item;
+ int i;
+
+ if (!array)
+ return NULL;
+
+ for (i = 0; i < array->len; i++) {
+ item = array->pdata[i];
+ slist = g_slist_prepend (slist, copy_func (item));
+ }
+
+ return g_slist_reverse (slist);
+}
+
+GPtrArray *
+_nm_utils_copy_array (const GPtrArray *array,
+ NMUtilsCopyFunc copy_func,
+ GDestroyNotify free_func)
+{
+ GPtrArray *copy;
+ int i;
+
+ if (!array)
+ return g_ptr_array_new_with_free_func (free_func);
+
+ copy = g_ptr_array_new_full (array->len, free_func);
+ for (i = 0; i < array->len; i++)
+ g_ptr_array_add (copy, copy_func (array->pdata[i]));
+ return copy;
+}
+
+GPtrArray *
+_nm_utils_copy_object_array (const GPtrArray *array)
+{
+ return _nm_utils_copy_array (array, g_object_ref, g_object_unref);
+}
+
+GVariant *
+_nm_utils_bytes_to_dbus (const GValue *prop_value)
+{
+ GBytes *bytes = g_value_get_boxed (prop_value);
+
+ if (bytes) {
+ return g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
+ g_bytes_get_data (bytes, NULL),
+ g_bytes_get_size (bytes),
+ 1);
+ } else {
+ return g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
+ NULL, 0,
+ 1);
+ }
+}
+
+void
+_nm_utils_bytes_from_dbus (GVariant *dbus_value,
+ GValue *prop_value)
+{
+ GBytes *bytes;
+
+ if (g_variant_n_children (dbus_value)) {
+ gconstpointer data;
+ gsize length;
+
+ data = g_variant_get_fixed_array (dbus_value, &length, 1);
+ bytes = g_bytes_new (data, length);
+ } else
+ bytes = NULL;
+ g_value_take_boxed (prop_value, bytes);
+}
+
+GSList *
+_nm_utils_strv_to_slist (char **strv)
+{
+ int i;
+ GSList *list = NULL;
+
+ if (strv) {
+ for (i = 0; strv[i]; i++)
+ list = g_slist_prepend (list, g_strdup (strv[i]));
+ }
+
+ return g_slist_reverse (list);
+}
+
+char **
+_nm_utils_slist_to_strv (GSList *slist)
+{
+ GSList *iter;
+ char **strv;
+ int len, i;
+
+ len = g_slist_length (slist);
+ strv = g_new (char *, len + 1);
+
+ for (i = 0, iter = slist; iter; iter = iter->next, i++)
+ strv[i] = g_strdup (iter->data);
+ strv[i] = NULL;
+
+ return strv;
+}
+
+GPtrArray *
+_nm_utils_strv_to_ptrarray (char **strv)
+{
+ GPtrArray *ptrarray;
+ int i;
+
+ ptrarray = g_ptr_array_new_with_free_func (g_free);
+
+ if (strv) {
+ for (i = 0; strv[i]; i++)
+ g_ptr_array_add (ptrarray, g_strdup (strv[i]));
+ }
+
+ return ptrarray;
+}
+
+char **
+_nm_utils_ptrarray_to_strv (GPtrArray *ptrarray)
+{
+ char **strv;
+ int i;
+
+ if (!ptrarray)
+ return g_new0 (char *, 1);
+
+ strv = g_new (char *, ptrarray->len + 1);
+
+ for (i = 0; i < ptrarray->len; i++)
+ strv[i] = g_strdup (ptrarray->pdata[i]);
+ strv[i] = NULL;
+
+ return strv;
+}
+
+/**
+ * _nm_utils_strsplit_set:
+ * @str: string to split
+ * @delimiters: string of delimiter characters
+ * @max_tokens: the maximum number of tokens to split string into. When it is
+ * less than 1, the @str is split completely.
+ *
+ * Utility function for splitting string into a string array. It is a wrapper
+ * for g_strsplit_set(), but it also removes empty strings from the vector as
+ * they are not useful in most cases.
+ *
+ * Returns: (transfer full): a newly allocated NULL-terminated array of strings.
+ * The caller must free the returned array with g_strfreev().
+ **/
+char **
+_nm_utils_strsplit_set (const char *str, const char *delimiters, int max_tokens)
+{
+ char **result;
+ uint i;
+ uint j;
+
+ result = g_strsplit_set (str, delimiters, 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;
+}
+
+static gboolean
+device_supports_ap_ciphers (guint32 dev_caps,
+ guint32 ap_flags,
+ gboolean static_wep)
+{
+ gboolean have_pair = FALSE;
+ gboolean have_group = FALSE;
+ /* Device needs to support at least one pairwise and one group cipher */
+
+ /* Pairwise */
+ if (static_wep) {
+ /* Static WEP only uses group ciphers */
+ have_pair = TRUE;
+ } else {
+ if (dev_caps & NM_WIFI_DEVICE_CAP_CIPHER_WEP40)
+ if (ap_flags & NM_802_11_AP_SEC_PAIR_WEP40)
+ have_pair = TRUE;
+ if (dev_caps & NM_WIFI_DEVICE_CAP_CIPHER_WEP104)
+ if (ap_flags & NM_802_11_AP_SEC_PAIR_WEP104)
+ have_pair = TRUE;
+ if (dev_caps & NM_WIFI_DEVICE_CAP_CIPHER_TKIP)
+ if (ap_flags & NM_802_11_AP_SEC_PAIR_TKIP)
+ have_pair = TRUE;
+ if (dev_caps & NM_WIFI_DEVICE_CAP_CIPHER_CCMP)
+ if (ap_flags & NM_802_11_AP_SEC_PAIR_CCMP)
+ have_pair = TRUE;
+ }
+
+ /* Group */
+ if (dev_caps & NM_WIFI_DEVICE_CAP_CIPHER_WEP40)
+ if (ap_flags & NM_802_11_AP_SEC_GROUP_WEP40)
+ have_group = TRUE;
+ if (dev_caps & NM_WIFI_DEVICE_CAP_CIPHER_WEP104)
+ if (ap_flags & NM_802_11_AP_SEC_GROUP_WEP104)
+ have_group = TRUE;
+ if (!static_wep) {
+ if (dev_caps & NM_WIFI_DEVICE_CAP_CIPHER_TKIP)
+ if (ap_flags & NM_802_11_AP_SEC_GROUP_TKIP)
+ have_group = TRUE;
+ if (dev_caps & NM_WIFI_DEVICE_CAP_CIPHER_CCMP)
+ if (ap_flags & NM_802_11_AP_SEC_GROUP_CCMP)
+ have_group = TRUE;
+ }
+
+ return (have_pair && have_group);
+}
+
+/**
+ * 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 Wi-Fi device, e.g.
+ * #NM_WIFI_DEVICE_CAP_CIPHER_WEP40
+ *
+ * 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.
+ *
+ * Returns: %TRUE if the device capabilities are compatible with the desired
+ * @type, %FALSE if they are not.
+ **/
+gboolean
+nm_utils_ap_mode_security_valid (NMUtilsSecurityType type,
+ NMDeviceWifiCapabilities wifi_caps)
+{
+ if (!(wifi_caps & NM_WIFI_DEVICE_CAP_AP))
+ return FALSE;
+
+ /* Return TRUE for any security that wpa_supplicant's lightweight AP
+ * mode can handle: which is open, WEP, and WPA/WPA2 PSK.
+ */
+ switch (type) {
+ case NMU_SEC_NONE:
+ case NMU_SEC_STATIC_WEP:
+ case NMU_SEC_WPA_PSK:
+ case NMU_SEC_WPA2_PSK:
+ return TRUE;
+ default:
+ break;
+ }
+ return FALSE;
+}
+
+/**
+ * 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 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)
+ * @ap_flags: bitfield of AP capabilities, e.g. #NM_802_11_AP_FLAGS_PRIVACY
+ * @ap_wpa: bitfield of AP capabilties derived from the AP's WPA beacon,
+ * e.g. (#NM_802_11_AP_SEC_PAIR_TKIP | #NM_802_11_AP_SEC_KEY_MGMT_PSK)
+ * @ap_rsn: bitfield of AP capabilties derived from the AP's RSN/WPA2 beacon,
+ * e.g. (#NM_802_11_AP_SEC_PAIR_CCMP | #NM_802_11_AP_SEC_PAIR_TKIP)
+ *
+ * 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.
+ *
+ * NOTE: this function cannot handle checking security for AP/Hotspot mode;
+ * use nm_utils_ap_mode_security_valid() instead.
+ *
+ * Returns: %TRUE if the device capabilities and AP capabilties intersect and are
+ * compatible with the desired @type, %FALSE if they are not
+ **/
+gboolean
+nm_utils_security_valid (NMUtilsSecurityType type,
+ NMDeviceWifiCapabilities wifi_caps,
+ gboolean have_ap,
+ gboolean adhoc,
+ NM80211ApFlags ap_flags,
+ NM80211ApSecurityFlags ap_wpa,
+ NM80211ApSecurityFlags ap_rsn)
+{
+ gboolean good = TRUE;
+
+ if (!have_ap) {
+ if (type == NMU_SEC_NONE)
+ return TRUE;
+ if ( (type == NMU_SEC_STATIC_WEP)
+ || ((type == NMU_SEC_DYNAMIC_WEP) && !adhoc)
+ || ((type == NMU_SEC_LEAP) && !adhoc)) {
+ if (wifi_caps & (NM_WIFI_DEVICE_CAP_CIPHER_WEP40 | NM_WIFI_DEVICE_CAP_CIPHER_WEP104))
+ return TRUE;
+ else
+ return FALSE;
+ }
+ }
+
+ switch (type) {
+ case NMU_SEC_NONE:
+ g_assert (have_ap);
+ if (ap_flags & NM_802_11_AP_FLAGS_PRIVACY)
+ return FALSE;
+ if (ap_wpa || ap_rsn)
+ return FALSE;
+ break;
+ case NMU_SEC_LEAP: /* require PRIVACY bit for LEAP? */
+ if (adhoc)
+ return FALSE;
+ /* Fall through */
+ case NMU_SEC_STATIC_WEP:
+ g_assert (have_ap);
+ if (!(ap_flags & NM_802_11_AP_FLAGS_PRIVACY))
+ return FALSE;
+ if (ap_wpa || ap_rsn) {
+ if (!device_supports_ap_ciphers (wifi_caps, ap_wpa, TRUE))
+ if (!device_supports_ap_ciphers (wifi_caps, ap_rsn, TRUE))
+ return FALSE;
+ }
+ break;
+ case NMU_SEC_DYNAMIC_WEP:
+ if (adhoc)
+ return FALSE;
+ g_assert (have_ap);
+ if (ap_rsn || !(ap_flags & NM_802_11_AP_FLAGS_PRIVACY))
+ return FALSE;
+ /* Some APs broadcast minimal WPA-enabled beacons that must be handled */
+ if (ap_wpa) {
+ if (!(ap_wpa & NM_802_11_AP_SEC_KEY_MGMT_802_1X))
+ return FALSE;
+ if (!device_supports_ap_ciphers (wifi_caps, ap_wpa, FALSE))
+ return FALSE;
+ }
+ break;
+ case NMU_SEC_WPA_PSK:
+ if (adhoc)
+ return FALSE; /* FIXME: Kernel WPA Ad-Hoc support is buggy */
+ if (!(wifi_caps & NM_WIFI_DEVICE_CAP_WPA))
+ return FALSE;
+ if (have_ap) {
+ /* 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;
+ if ( (ap_wpa & NM_802_11_AP_SEC_GROUP_CCMP)
+ && (wifi_caps & NM_WIFI_DEVICE_CAP_CIPHER_CCMP))
+ return TRUE;
+ } else {
+ if (ap_wpa & NM_802_11_AP_SEC_KEY_MGMT_PSK) {
+ if ( (ap_wpa & NM_802_11_AP_SEC_PAIR_TKIP)
+ && (wifi_caps & NM_WIFI_DEVICE_CAP_CIPHER_TKIP))
+ return TRUE;
+ if ( (ap_wpa & NM_802_11_AP_SEC_PAIR_CCMP)
+ && (wifi_caps & NM_WIFI_DEVICE_CAP_CIPHER_CCMP))
+ return TRUE;
+ }
+ }
+ return FALSE;
+ }
+ break;
+ case NMU_SEC_WPA2_PSK:
+ if (adhoc)
+ return FALSE; /* FIXME: Kernel WPA Ad-Hoc support is buggy */
+ if (!(wifi_caps & NM_WIFI_DEVICE_CAP_RSN))
+ return FALSE;
+ if (have_ap) {
+ /* 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)
+ return TRUE;
+ } else {
+ if (ap_rsn & NM_802_11_AP_SEC_KEY_MGMT_PSK) {
+ if ( (ap_rsn & NM_802_11_AP_SEC_PAIR_TKIP)
+ && (wifi_caps & NM_WIFI_DEVICE_CAP_CIPHER_TKIP))
+ return TRUE;
+ if ( (ap_rsn & NM_802_11_AP_SEC_PAIR_CCMP)
+ && (wifi_caps & NM_WIFI_DEVICE_CAP_CIPHER_CCMP))
+ return TRUE;
+ }
+ }
+ return FALSE;
+ }
+ break;
+ case NMU_SEC_WPA_ENTERPRISE:
+ if (adhoc)
+ return FALSE;
+ if (!(wifi_caps & NM_WIFI_DEVICE_CAP_WPA))
+ return FALSE;
+ if (have_ap) {
+ if (!(ap_wpa & NM_802_11_AP_SEC_KEY_MGMT_802_1X))
+ return FALSE;
+ /* Ensure at least one WPA cipher is supported */
+ if (!device_supports_ap_ciphers (wifi_caps, ap_wpa, FALSE))
+ return FALSE;
+ }
+ break;
+ case NMU_SEC_WPA2_ENTERPRISE:
+ if (adhoc)
+ return FALSE;
+ if (!(wifi_caps & NM_WIFI_DEVICE_CAP_RSN))
+ return FALSE;
+ if (have_ap) {
+ if (!(ap_rsn & NM_802_11_AP_SEC_KEY_MGMT_802_1X))
+ return FALSE;
+ /* Ensure at least one WPA cipher is supported */
+ if (!device_supports_ap_ciphers (wifi_caps, ap_rsn, FALSE))
+ return FALSE;
+ }
+ break;
+ default:
+ good = FALSE;
+ break;
+ }
+
+ return good;
+}
+
+/**
+ * nm_utils_wep_key_valid:
+ * @key: a string that might be a WEP key
+ * @wep_type: the #NMWepKeyType type of the WEP key
+ *
+ * Checks if @key is a valid WEP key
+ *
+ * Returns: %TRUE if @key is a WEP key, %FALSE if not
+ */
+gboolean
+nm_utils_wep_key_valid (const char *key, NMWepKeyType wep_type)
+{
+ int keylen, i;
+
+ if (!key)
+ return FALSE;
+
+ keylen = strlen (key);
+ if ( wep_type == NM_WEP_KEY_TYPE_KEY
+ || wep_type == NM_WEP_KEY_TYPE_UNKNOWN) {
+ if (keylen == 10 || keylen == 26) {
+ /* Hex key */
+ for (i = 0; i < keylen; i++) {
+ if (!g_ascii_isxdigit (key[i]))
+ return FALSE;
+ }
+ } else if (keylen == 5 || keylen == 13) {
+ /* ASCII key */
+ for (i = 0; i < keylen; i++) {
+ if (!g_ascii_isprint (key[i]))
+ return FALSE;
+ }
+ } else
+ return FALSE;
+
+ } else if (wep_type == NM_WEP_KEY_TYPE_PASSPHRASE) {
+ if (!keylen || keylen > 64)
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/**
+ * nm_utils_wpa_psk_valid:
+ * @psk: a string that might be a WPA PSK
+ *
+ * Checks if @psk is a valid WPA PSK
+ *
+ * Returns: %TRUE if @psk is a WPA PSK, %FALSE if not
+ */
+gboolean
+nm_utils_wpa_psk_valid (const char *psk)
+{
+ int psklen, i;
+
+ if (!psk)
+ return FALSE;
+
+ psklen = strlen (psk);
+ if (psklen < 8 || psklen > 64)
+ return FALSE;
+
+ if (psklen == 64) {
+ /* Hex PSK */
+ for (i = 0; i < psklen; i++) {
+ if (!g_ascii_isxdigit (psk[i]))
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+/**
+ * nm_utils_ip4_dns_to_variant:
+ * @dns: (type utf8): an array of IP address strings
+ *
+ * Utility function to convert an array of IP address strings int a #GVariant of
+ * type 'au' representing an array of IPv4 addresses.
+ *
+ * Returns: (transfer none): a new floating #GVariant representing @dns.
+ **/
+GVariant *
+nm_utils_ip4_dns_to_variant (char **dns)
+{
+ GVariantBuilder builder;
+ int i;
+
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("au"));
+
+ if (dns) {
+ for (i = 0; dns[i]; i++) {
+ guint32 ip = 0;
+
+ inet_pton (AF_INET, dns[i], &ip);
+ g_variant_builder_add (&builder, "u", ip);
+ }
+ }
+
+ return g_variant_builder_end (&builder);
+}
+
+/**
+ * nm_utils_ip4_dns_from_variant:
+ * @value: a #GVariant of type 'au'
+ *
+ * Utility function to convert a #GVariant of type 'au' representing a list of
+ * IPv4 addresses into an array of IP address strings.
+ *
+ * Returns: (transfer full) (type utf8): a %NULL-terminated array of IP address strings.
+ **/
+char **
+nm_utils_ip4_dns_from_variant (GVariant *value)
+{
+ const guint32 *array;
+ gsize length;
+ char **dns;
+ int i;
+
+ g_return_val_if_fail (g_variant_is_of_type (value, G_VARIANT_TYPE ("au")), NULL);
+
+ array = g_variant_get_fixed_array (value, &length, sizeof (guint32));
+ dns = g_new (char *, length + 1);
+
+ for (i = 0; i < length; i++)
+ dns[i] = g_strdup (nm_utils_inet4_ntop (array[i], NULL));
+ dns[i] = NULL;
+
+ return dns;
+}
+
+/**
+ * nm_utils_ip4_addresses_to_variant:
+ * @addresses: (element-type NMIPAddress): an array of #NMIPAddress objects
+ * @gateway: (allow-none): the gateway IP address
+ *
+ * Utility function to convert a #GPtrArray of #NMIPAddress objects representing
+ * IPv4 addresses into a #GVariant of type 'aau' representing an array of
+ * NetworkManager IPv4 addresses (which are tuples of address, prefix, and
+ * gateway). The "gateway" field of the first address will get the value of
+ * @gateway (if non-%NULL). In all of the other addresses, that field will be 0.
+ *
+ * Returns: (transfer none): a new floating #GVariant representing @addresses.
+ **/
+GVariant *
+nm_utils_ip4_addresses_to_variant (GPtrArray *addresses, const char *gateway)
+{
+ GVariantBuilder builder;
+ int i;
+
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("aau"));
+
+ if (addresses) {
+ for (i = 0; i < addresses->len; i++) {
+ NMIPAddress *addr = addresses->pdata[i];
+ guint32 array[3];
+
+ if (nm_ip_address_get_family (addr) != AF_INET)
+ continue;
+
+ nm_ip_address_get_address_binary (addr, &array[0]);
+ array[1] = nm_ip_address_get_prefix (addr);
+ if (i == 0 && gateway)
+ inet_pton (AF_INET, gateway, &array[2]);
+ else
+ array[2] = 0;
+
+ g_variant_builder_add (&builder, "@au",
+ g_variant_new_fixed_array (G_VARIANT_TYPE_UINT32,
+ array, 3, sizeof (guint32)));
+ }
+ }
+
+ return g_variant_builder_end (&builder);
+}
+
+/**
+ * nm_utils_ip4_addresses_from_variant:
+ * @value: a #GVariant of type 'aau'
+ * @out_gateway: (out) (allow-none) (transfer full): on return, will contain the IP gateway
+ *
+ * Utility function to convert a #GVariant of type 'aau' representing a list of
+ * NetworkManager IPv4 addresses (which are tuples of address, prefix, and
+ * gateway) into a #GPtrArray of #NMIPAddress objects. The "gateway" field of
+ * the first address (if set) will be returned in @out_gateway; the "gateway" fields
+ * of the other addresses are ignored.
+ *
+ * Returns: (transfer full) (element-type NMIPAddress): a newly allocated
+ * #GPtrArray of #NMIPAddress objects
+ **/
+GPtrArray *
+nm_utils_ip4_addresses_from_variant (GVariant *value, char **out_gateway)
+{
+ GPtrArray *addresses;
+ GVariantIter iter;
+ GVariant *addr_var;
+
+ g_return_val_if_fail (g_variant_is_of_type (value, G_VARIANT_TYPE ("aau")), NULL);
+
+ if (out_gateway)
+ *out_gateway = NULL;
+
+ g_variant_iter_init (&iter, value);
+ addresses = g_ptr_array_new_with_free_func ((GDestroyNotify) nm_ip_address_unref);
+
+ while (g_variant_iter_next (&iter, "@au", &addr_var)) {
+ const guint32 *addr_array;
+ gsize length;
+ NMIPAddress *addr;
+ GError *error = NULL;
+
+ addr_array = g_variant_get_fixed_array (addr_var, &length, sizeof (guint32));
+ if (length < 3) {
+ g_warning ("Ignoring invalid IP4 address");
+ g_variant_unref (addr_var);
+ continue;
+ }
+
+ addr = nm_ip_address_new_binary (AF_INET, &addr_array[0], addr_array[1], &error);
+ if (addr) {
+ g_ptr_array_add (addresses, addr);
+
+ if (addr_array[2] && out_gateway && !*out_gateway)
+ *out_gateway = g_strdup (nm_utils_inet4_ntop (addr_array[2], NULL));
+ } else {
+ g_warning ("Ignoring invalid IP4 address: %s", error->message);
+ g_clear_error (&error);
+ }
+
+ g_variant_unref (addr_var);
+ }
+
+ return addresses;
+}
+
+/**
+ * nm_utils_ip4_routes_to_variant:
+ * @routes: (element-type NMIPRoute): an array of #NMIP4Route objects
+ *
+ * Utility function to convert a #GPtrArray of #NMIPRoute objects representing
+ * IPv4 routes into a #GVariant of type 'aau' representing an array of
+ * NetworkManager IPv4 routes (which are tuples of route, prefix, next hop, and
+ * metric).
+ *
+ * Returns: (transfer none): a new floating #GVariant representing @routes.
+ **/
+GVariant *
+nm_utils_ip4_routes_to_variant (GPtrArray *routes)
+{
+ GVariantBuilder builder;
+ int i;
+
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("aau"));
+
+ if (routes) {
+ for (i = 0; i < routes->len; i++) {
+ NMIPRoute *route = routes->pdata[i];
+ guint32 array[4];
+
+ if (nm_ip_route_get_family (route) != AF_INET)
+ continue;
+
+ nm_ip_route_get_dest_binary (route, &array[0]);
+ array[1] = nm_ip_route_get_prefix (route);
+ nm_ip_route_get_next_hop_binary (route, &array[2]);
+ /* The old routes format uses "0" for default, not "-1" */
+ array[3] = MAX (0, nm_ip_route_get_metric (route));
+
+ g_variant_builder_add (&builder, "@au",
+ g_variant_new_fixed_array (G_VARIANT_TYPE_UINT32,
+ array, 4, sizeof (guint32)));
+ }
+ }
+
+ return g_variant_builder_end (&builder);
+}
+
+/**
+ * nm_utils_ip4_routes_from_variant:
+ * @value: #GVariant of type 'aau'
+ *
+ * Utility function to convert a #GVariant of type 'aau' representing an array
+ * of NetworkManager IPv4 routes (which are tuples of route, prefix, next hop,
+ * and metric) into a #GPtrArray of #NMIPRoute objects.
+ *
+ * Returns: (transfer full) (element-type NMIPRoute): a newly allocated
+ * #GPtrArray of #NMIPRoute objects
+ **/
+GPtrArray *
+nm_utils_ip4_routes_from_variant (GVariant *value)
+{
+ GVariantIter iter;
+ GVariant *route_var;
+ GPtrArray *routes;
+
+ g_return_val_if_fail (g_variant_is_of_type (value, G_VARIANT_TYPE ("aau")), NULL);
+
+ g_variant_iter_init (&iter, value);
+ routes = g_ptr_array_new_with_free_func ((GDestroyNotify) nm_ip_route_unref);
+
+ while (g_variant_iter_next (&iter, "@au", &route_var)) {
+ const guint32 *route_array;
+ gsize length;
+ NMIPRoute *route;
+ GError *error = NULL;
+
+ route_array = g_variant_get_fixed_array (route_var, &length, sizeof (guint32));
+ if (length < 4) {
+ g_warning ("Ignoring invalid IP4 route");
+ g_variant_unref (route_var);
+ continue;
+ }
+
+ route = nm_ip_route_new_binary (AF_INET,
+ &route_array[0],
+ route_array[1],
+ &route_array[2],
+ /* The old routes format uses "0" for default, not "-1" */
+ route_array[3] ? (gint64) route_array[3] : -1,
+ &error);
+ if (route)
+ g_ptr_array_add (routes, route);
+ else {
+ g_warning ("Ignoring invalid IP4 route: %s", error->message);
+ g_clear_error (&error);
+ }
+ g_variant_unref (route_var);
+ }
+
+ return routes;
+}
+
+/**
+ * nm_utils_ip4_netmask_to_prefix:
+ * @netmask: an IPv4 netmask in network byte order
+ *
+ * Returns: the CIDR prefix represented by the netmask
+ **/
+guint32
+nm_utils_ip4_netmask_to_prefix (guint32 netmask)
+{
+ guint32 prefix;
+ guint8 v;
+ const guint8 *p = (guint8 *) &netmask;
+
+ if (p[3]) {
+ prefix = 24;
+ v = p[3];
+ } else if (p[2]) {
+ prefix = 16;
+ v = p[2];
+ } else if (p[1]) {
+ prefix = 8;
+ v = p[1];
+ } else {
+ prefix = 0;
+ v = p[0];
+ }
+
+ while (v) {
+ prefix++;
+ v <<= 1;
+ }
+
+ return prefix;
+}
+
+/**
+ * nm_utils_ip4_prefix_to_netmask:
+ * @prefix: a CIDR prefix
+ *
+ * Returns: the netmask represented by the prefix, in network byte order
+ **/
+guint32
+nm_utils_ip4_prefix_to_netmask (guint32 prefix)
+{
+ return prefix < 32 ? ~htonl(0xFFFFFFFF >> prefix) : 0xFFFFFFFF;
+}
+
+
+/**
+ * nm_utils_ip4_get_default_prefix:
+ * @ip: an IPv4 address (in network byte order)
+ *
+ * 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.
+ *
+ * Returns: the default class prefix for the given IP
+ **/
+/* The function is originally from ipcalc.c of Red Hat's initscripts. */
+guint32
+nm_utils_ip4_get_default_prefix (guint32 ip)
+{
+ if (((ntohl (ip) & 0xFF000000) >> 24) <= 127)
+ return 8; /* Class A - 255.0.0.0 */
+ else if (((ntohl (ip) & 0xFF000000) >> 24) <= 191)
+ return 16; /* Class B - 255.255.0.0 */
+
+ return 24; /* Class C - 255.255.255.0 */
+}
+
+/**
+ * nm_utils_ip6_dns_to_variant:
+ * @dns: (type utf8): an array of IP address strings
+ *
+ * Utility function to convert an array of IP address strings int a #GVariant of
+ * type 'aay' representing an array of IPv6 addresses.
+ *
+ * Returns: (transfer none): a new floating #GVariant representing @dns.
+ **/
+GVariant *
+nm_utils_ip6_dns_to_variant (char **dns)
+{
+ GVariantBuilder builder;
+ int i;
+
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("aay"));
+
+ if (dns) {
+ for (i = 0; dns[i]; i++) {
+ struct in6_addr ip;
+
+ inet_pton (AF_INET6, dns[i], &ip);
+ g_variant_builder_add (&builder, "@ay",
+ g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
+ &ip, sizeof (ip), 1));
+ }
+ }
+
+ return g_variant_builder_end (&builder);
+}
+
+/**
+ * nm_utils_ip6_dns_from_variant:
+ * @value: a #GVariant of type 'aay'
+ *
+ * Utility function to convert a #GVariant of type 'aay' representing a list of
+ * IPv6 addresses into an array of IP address strings.
+ *
+ * Returns: (transfer full) (type utf8): a %NULL-terminated array of IP address strings.
+ **/
+char **
+nm_utils_ip6_dns_from_variant (GVariant *value)
+{
+ GVariantIter iter;
+ GVariant *ip_var;
+ char **dns;
+ int i;
+
+ g_return_val_if_fail (g_variant_is_of_type (value, G_VARIANT_TYPE ("aay")), NULL);
+
+ dns = g_new (char *, g_variant_n_children (value) + 1);
+
+ g_variant_iter_init (&iter, value);
+ i = 0;
+ while (g_variant_iter_next (&iter, "@ay", &ip_var)) {
+ gsize length;
+ const struct in6_addr *ip = g_variant_get_fixed_array (ip_var, &length, 1);
+
+ if (length != sizeof (struct in6_addr)) {
+ g_warning ("%s: ignoring invalid IP6 address of length %d",
+ __func__, (int) length);
+ g_variant_unref (ip_var);
+ continue;
+ }
+
+ dns[i++] = g_strdup (nm_utils_inet6_ntop (ip, NULL));
+ g_variant_unref (ip_var);
+ }
+ dns[i] = NULL;
+
+ return dns;
+}
+
+/**
+ * nm_utils_ip6_addresses_to_variant:
+ * @addresses: (element-type NMIPAddress): an array of #NMIPAddress objects
+ * @gateway: (allow-none): the gateway IP address
+ *
+ * Utility function to convert a #GPtrArray of #NMIPAddress objects representing
+ * IPv6 addresses into a #GVariant of type 'a(ayuay)' representing an array of
+ * NetworkManager IPv6 addresses (which are tuples of address, prefix, and
+ * gateway). The "gateway" field of the first address will get the value of
+ * @gateway (if non-%NULL). In all of the other addresses, that field will be
+ * all 0s.
+ *
+ * Returns: (transfer none): a new floating #GVariant representing @addresses.
+ **/
+GVariant *
+nm_utils_ip6_addresses_to_variant (GPtrArray *addresses, const char *gateway)
+{
+ GVariantBuilder builder;
+ int i;
+
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a(ayuay)"));
+
+ if (addresses) {
+ for (i = 0; i < addresses->len; i++) {
+ NMIPAddress *addr = addresses->pdata[i];
+ struct in6_addr ip_bytes, gateway_bytes;
+ GVariant *ip_var, *gateway_var;
+ guint32 prefix;
+
+ if (nm_ip_address_get_family (addr) != AF_INET6)
+ continue;
+
+ nm_ip_address_get_address_binary (addr, &ip_bytes);
+ ip_var = g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE, &ip_bytes, 16, 1);
+
+ prefix = nm_ip_address_get_prefix (addr);
+
+ if (i == 0 && gateway)
+ inet_pton (AF_INET6, gateway, &gateway_bytes);
+ else
+ memset (&gateway_bytes, 0, sizeof (gateway_bytes));
+ gateway_var = g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE, &gateway_bytes, 16, 1);
+
+ g_variant_builder_add (&builder, "(@ayu@ay)", ip_var, prefix, gateway_var);
+ }
+ }
+
+ return g_variant_builder_end (&builder);
+}
+
+/**
+ * nm_utils_ip6_addresses_from_variant:
+ * @value: a #GVariant of type 'a(ayuay)'
+ * @out_gateway: (out) (allow-none) (transfer full): on return, will contain the IP gateway
+ *
+ * Utility function to convert a #GVariant of type 'a(ayuay)' representing a
+ * list of NetworkManager IPv6 addresses (which are tuples of address, prefix,
+ * and gateway) into a #GPtrArray of #NMIPAddress objects. The "gateway" field
+ * of the first address (if set) will be returned in @out_gateway; the "gateway"
+ * fields of the other addresses are ignored.
+ *
+ * Returns: (transfer full) (element-type NMIPAddress): a newly allocated
+ * #GPtrArray of #NMIPAddress objects
+ **/
+GPtrArray *
+nm_utils_ip6_addresses_from_variant (GVariant *value, char **out_gateway)
+{
+ GVariantIter iter;
+ GVariant *addr_var, *gateway_var;
+ guint32 prefix;
+ GPtrArray *addresses;
+
+ g_return_val_if_fail (g_variant_is_of_type (value, G_VARIANT_TYPE ("a(ayuay)")), NULL);
+
+ if (out_gateway)
+ *out_gateway = NULL;
+
+ g_variant_iter_init (&iter, value);
+ addresses = g_ptr_array_new_with_free_func ((GDestroyNotify) nm_ip_address_unref);
+
+ while (g_variant_iter_next (&iter, "(@ayu@ay)", &addr_var, &prefix, &gateway_var)) {
+ NMIPAddress *addr;
+ const struct in6_addr *addr_bytes, *gateway_bytes;
+ gsize addr_len, gateway_len;
+ GError *error = NULL;
+
+ if ( !g_variant_is_of_type (addr_var, G_VARIANT_TYPE_BYTESTRING)
+ || !g_variant_is_of_type (gateway_var, G_VARIANT_TYPE_BYTESTRING)) {
+ g_warning ("%s: ignoring invalid IP6 address structure", __func__);
+ goto next;
+ }
+
+ addr_bytes = g_variant_get_fixed_array (addr_var, &addr_len, 1);
+ if (addr_len != 16) {
+ g_warning ("%s: ignoring invalid IP6 address of length %d",
+ __func__, (int) addr_len);
+ goto next;
+ }
+
+ addr = nm_ip_address_new_binary (AF_INET6, addr_bytes, prefix, &error);
+ if (addr) {
+ g_ptr_array_add (addresses, addr);
+
+ if (out_gateway && !*out_gateway) {
+ gateway_bytes = g_variant_get_fixed_array (gateway_var, &gateway_len, 1);
+ if (gateway_len != 16) {
+ g_warning ("%s: ignoring invalid IP6 address of length %d",
+ __func__, (int) gateway_len);
+ goto next;
+ }
+ if (!IN6_IS_ADDR_UNSPECIFIED (gateway_bytes))
+ *out_gateway = g_strdup (nm_utils_inet6_ntop (gateway_bytes, NULL));
+ }
+ } else {
+ g_warning ("Ignoring invalid IP4 address: %s", error->message);
+ g_clear_error (&error);
+ }
+
+ next:
+ g_variant_unref (addr_var);
+ g_variant_unref (gateway_var);
+ }
+
+ return addresses;
+}
+
+/**
+ * nm_utils_ip6_routes_to_variant:
+ * @routes: (element-type NMIPRoute): an array of #NMIPRoute objects
+ *
+ * Utility function to convert a #GPtrArray of #NMIPRoute objects representing
+ * IPv6 routes into a #GVariant of type 'a(ayuayu)' representing an array of
+ * NetworkManager IPv6 routes (which are tuples of route, prefix, next hop, and
+ * metric).
+ *
+ * Returns: (transfer none): a new floating #GVariant representing @routes.
+ **/
+GVariant *
+nm_utils_ip6_routes_to_variant (GPtrArray *routes)
+{
+ GVariantBuilder builder;
+ int i;
+
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a(ayuayu)"));
+
+ if (routes) {
+ for (i = 0; i < routes->len; i++) {
+ NMIPRoute *route = routes->pdata[i];
+ struct in6_addr dest_bytes, next_hop_bytes;
+ GVariant *dest, *next_hop;
+ guint32 prefix, metric;
+
+ if (nm_ip_route_get_family (route) != AF_INET6)
+ continue;
+
+ nm_ip_route_get_dest_binary (route, &dest_bytes);
+ dest = g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE, &dest_bytes, 16, 1);
+ prefix = nm_ip_route_get_prefix (route);
+ nm_ip_route_get_next_hop_binary (route, &next_hop_bytes);
+ next_hop = g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE, &next_hop_bytes, 16, 1);
+ /* The old routes format uses "0" for default, not "-1" */
+ metric = MAX (0, nm_ip_route_get_metric (route));
+
+ g_variant_builder_add (&builder, "(@ayu@ayu)", dest, prefix, next_hop, metric);
+ }
+ }
+
+ return g_variant_builder_end (&builder);
+}
+
+/**
+ * nm_utils_ip6_routes_from_variant:
+ * @value: #GVariant of type 'a(ayuayu)'
+ *
+ * Utility function to convert a #GVariant of type 'a(ayuayu)' representing an
+ * array of NetworkManager IPv6 routes (which are tuples of route, prefix, next
+ * hop, and metric) into a #GPtrArray of #NMIPRoute objects.
+ *
+ * Returns: (transfer full) (element-type NMIPRoute): a newly allocated
+ * #GPtrArray of #NMIPRoute objects
+ **/
+GPtrArray *
+nm_utils_ip6_routes_from_variant (GVariant *value)
+{
+ GPtrArray *routes;
+ GVariantIter iter;
+ GVariant *dest_var, *next_hop_var;
+ const struct in6_addr *dest, *next_hop;
+ gsize dest_len, next_hop_len;
+ guint32 prefix, metric;
+
+ g_return_val_if_fail (g_variant_is_of_type (value, G_VARIANT_TYPE ("a(ayuayu)")), NULL);
+
+ routes = g_ptr_array_new_with_free_func ((GDestroyNotify) nm_ip_route_unref);
+
+ g_variant_iter_init (&iter, value);
+ while (g_variant_iter_next (&iter, "(@ayu@ayu)", &dest_var, &prefix, &next_hop_var, &metric)) {
+ NMIPRoute *route;
+ GError *error = NULL;
+
+ if ( !g_variant_is_of_type (dest_var, G_VARIANT_TYPE_BYTESTRING)
+ || !g_variant_is_of_type (next_hop_var, G_VARIANT_TYPE_BYTESTRING)) {
+ g_warning ("%s: ignoring invalid IP6 address structure", __func__);
+ goto next;
+ }
+
+ dest = g_variant_get_fixed_array (dest_var, &dest_len, 1);
+ if (dest_len != 16) {
+ g_warning ("%s: ignoring invalid IP6 address of length %d",
+ __func__, (int) dest_len);
+ goto next;
+ }
+
+ next_hop = g_variant_get_fixed_array (next_hop_var, &next_hop_len, 1);
+ if (next_hop_len != 16) {
+ g_warning ("%s: ignoring invalid IP6 address of length %d",
+ __func__, (int) next_hop_len);
+ goto next;
+ }
+
+ route = nm_ip_route_new_binary (AF_INET6, dest, prefix, next_hop,
+ metric ? (gint64) metric : -1,
+ &error);
+ if (route)
+ g_ptr_array_add (routes, route);
+ else {
+ g_warning ("Ignoring invalid IP6 route: %s", error->message);
+ g_clear_error (&error);
+ }
+
+ next:
+ g_variant_unref (dest_var);
+ g_variant_unref (next_hop_var);
+ }
+
+ return routes;
+}
+
+/**
+ * nm_utils_ip_addresses_to_variant:
+ * @addresses: (element-type NMIPAddress): an array of #NMIPAddress objects
+ *
+ * Utility function to convert a #GPtrArray of #NMIPAddress objects representing
+ * IPv4 or IPv6 addresses into a #GVariant of type 'aa{sv}' representing an
+ * array of new-style NetworkManager IP addresses. All addresses will include
+ * "address" (an IP address string), and "prefix" (a uint). Some addresses may
+ * include additional attributes.
+ *
+ * Returns: (transfer none): a new floating #GVariant representing @addresses.
+ **/
+GVariant *
+nm_utils_ip_addresses_to_variant (GPtrArray *addresses)
+{
+ GVariantBuilder builder;
+ int i;
+
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{sv}"));
+
+ if (addresses) {
+ for (i = 0; i < addresses->len; i++) {
+ NMIPAddress *addr = addresses->pdata[i];
+ GVariantBuilder addr_builder;
+ char **names;
+ int n;
+
+ g_variant_builder_init (&addr_builder, G_VARIANT_TYPE ("a{sv}"));
+ g_variant_builder_add (&addr_builder, "{sv}",
+ "address",
+ g_variant_new_string (nm_ip_address_get_address (addr)));
+ g_variant_builder_add (&addr_builder, "{sv}",
+ "prefix",
+ g_variant_new_uint32 (nm_ip_address_get_prefix (addr)));
+
+ names = nm_ip_address_get_attribute_names (addr);
+ for (n = 0; names[n]; n++) {
+ g_variant_builder_add (&addr_builder, "{sv}",
+ names[n],
+ nm_ip_address_get_attribute (addr, names[n]));
+ }
+ g_strfreev (names);
+
+ g_variant_builder_add (&builder, "a{sv}", &addr_builder);
+ }
+ }
+
+ return g_variant_builder_end (&builder);
+}
+
+/**
+ * nm_utils_ip_addresses_from_variant:
+ * @value: a #GVariant of type 'aa{sv}'
+ * @family: an IP address family
+ *
+ * Utility function to convert a #GVariant representing a list of new-style
+ * NetworkManager IPv4 or IPv6 addresses (as described in the documentation for
+ * nm_utils_ip_addresses_to_variant()) into a #GPtrArray of #NMIPAddress
+ * objects.
+ *
+ * Returns: (transfer full) (element-type NMIPAddress): a newly allocated
+ * #GPtrArray of #NMIPAddress objects
+ **/
+GPtrArray *
+nm_utils_ip_addresses_from_variant (GVariant *value,
+ int family)
+{
+ GPtrArray *addresses;
+ GVariantIter iter, attrs_iter;
+ GVariant *addr_var;
+ const char *ip;
+ guint32 prefix;
+ const char *attr_name;
+ GVariant *attr_val;
+ NMIPAddress *addr;
+ GError *error = NULL;
+
+ g_return_val_if_fail (g_variant_is_of_type (value, G_VARIANT_TYPE ("aa{sv}")), NULL);
+
+ g_variant_iter_init (&iter, value);
+ addresses = g_ptr_array_new_with_free_func ((GDestroyNotify) nm_ip_address_unref);
+
+ while (g_variant_iter_next (&iter, "@a{sv}", &addr_var)) {
+ if ( !g_variant_lookup (addr_var, "address", "&s", &ip)
+ || !g_variant_lookup (addr_var, "prefix", "u", &prefix)) {
+ g_warning ("Ignoring invalid address");
+ g_variant_unref (addr_var);
+ continue;
+ }
+
+ addr = nm_ip_address_new (family, ip, prefix, &error);
+ if (!addr) {
+ g_warning ("Ignoring invalid address: %s", error->message);
+ g_clear_error (&error);
+ g_variant_unref (addr_var);
+ continue;
+ }
+
+ g_variant_iter_init (&attrs_iter, addr_var);
+ while (g_variant_iter_next (&attrs_iter, "{&sv}", &attr_name, &attr_val)) {
+ if ( strcmp (attr_name, "address") != 0
+ && strcmp (attr_name, "prefix") != 0)
+ nm_ip_address_set_attribute (addr, attr_name, attr_val);
+ g_variant_unref (attr_val);
+ }
+
+ g_ptr_array_add (addresses, addr);
+ }
+
+ return addresses;
+}
+
+/**
+ * nm_utils_ip_routes_to_variant:
+ * @routes: (element-type NMIPRoute): an array of #NMIPRoute objects
+ *
+ * Utility function to convert a #GPtrArray of #NMIPRoute objects representing
+ * IPv4 or IPv6 routes into a #GVariant of type 'aa{sv}' representing an array
+ * of new-style NetworkManager IP routes (which are tuples of destination,
+ * prefix, next hop, metric, and additional attributes).
+ *
+ * Returns: (transfer none): a new floating #GVariant representing @routes.
+ **/
+GVariant *
+nm_utils_ip_routes_to_variant (GPtrArray *routes)
+{
+ GVariantBuilder builder;
+ int i;
+
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("aa{sv}"));
+
+ if (routes) {
+ for (i = 0; i < routes->len; i++) {
+ NMIPRoute *route = routes->pdata[i];
+ GVariantBuilder route_builder;
+ char **names;
+ int n;
+
+ g_variant_builder_init (&route_builder, G_VARIANT_TYPE ("a{sv}"));
+ g_variant_builder_add (&route_builder, "{sv}",
+ "dest",
+ g_variant_new_string (nm_ip_route_get_dest (route)));
+ g_variant_builder_add (&route_builder, "{sv}",
+ "prefix",
+ g_variant_new_uint32 (nm_ip_route_get_prefix (route)));
+ if (nm_ip_route_get_next_hop (route)) {
+ g_variant_builder_add (&route_builder, "{sv}",
+ "next-hop",
+ g_variant_new_string (nm_ip_route_get_next_hop (route)));
+ }
+ if (nm_ip_route_get_metric (route) != -1) {
+ g_variant_builder_add (&route_builder, "{sv}",
+ "metric",
+ g_variant_new_uint32 ((guint32) nm_ip_route_get_metric (route)));
+ }
+
+ names = nm_ip_route_get_attribute_names (route);
+ for (n = 0; names[n]; n++) {
+ g_variant_builder_add (&route_builder, "{sv}",
+ names[n],
+ nm_ip_route_get_attribute (route, names[n]));
+ }
+ g_strfreev (names);
+
+ g_variant_builder_add (&builder, "a{sv}", &route_builder);
+ }
+ }
+
+ return g_variant_builder_end (&builder);
+}
+
+/**
+ * nm_utils_ip_routes_from_variant:
+ * @value: a #GVariant of type 'aa{sv}'
+ * @family: an IP address family
+ *
+ * Utility function to convert a #GVariant representing a list of new-style
+ * NetworkManager IPv4 or IPv6 addresses (which are tuples of destination,
+ * prefix, next hop, metric, and additional attributes) into a #GPtrArray of
+ * #NMIPRoute objects.
+ *
+ * Returns: (transfer full) (element-type NMIPRoute): a newly allocated
+ * #GPtrArray of #NMIPRoute objects
+ **/
+GPtrArray *
+nm_utils_ip_routes_from_variant (GVariant *value,
+ int family)
+{
+ GPtrArray *routes;
+ GVariantIter iter, attrs_iter;
+ GVariant *route_var;
+ const char *dest, *next_hop;
+ guint32 prefix, metric32;
+ gint64 metric;
+ const char *attr_name;
+ GVariant *attr_val;
+ NMIPRoute *route;
+ GError *error = NULL;
+
+ g_return_val_if_fail (g_variant_is_of_type (value, G_VARIANT_TYPE ("aa{sv}")), NULL);
+
+ g_variant_iter_init (&iter, value);
+ routes = g_ptr_array_new_with_free_func ((GDestroyNotify) nm_ip_route_unref);
+
+ while (g_variant_iter_next (&iter, "@a{sv}", &route_var)) {
+ if ( !g_variant_lookup (route_var, "dest", "&s", &dest)
+ || !g_variant_lookup (route_var, "prefix", "u", &prefix)) {
+ g_warning ("Ignoring invalid address");
+ g_variant_unref (route_var);
+ continue;
+ }
+ if (!g_variant_lookup (route_var, "next-hop", "&s", &next_hop))
+ next_hop = NULL;
+ if (g_variant_lookup (route_var, "metric", "u", &metric32))
+ metric = metric32;
+ else
+ metric = -1;
+
+ route = nm_ip_route_new (family, dest, prefix, next_hop, metric, &error);
+ if (!route) {
+ g_warning ("Ignoring invalid route: %s", error->message);
+ g_clear_error (&error);
+ g_variant_unref (route_var);
+ continue;
+ }
+
+ g_variant_iter_init (&attrs_iter, route_var);
+ while (g_variant_iter_next (&attrs_iter, "{&sv}", &attr_name, &attr_val)) {
+ if ( strcmp (attr_name, "dest") != 0
+ && strcmp (attr_name, "prefix") != 0
+ && strcmp (attr_name, "next-hop") != 0
+ && strcmp (attr_name, "metric") != 0)
+ nm_ip_route_set_attribute (route, attr_name, attr_val);
+ g_variant_unref (attr_val);
+ }
+
+ g_ptr_array_add (routes, route);
+ }
+
+ return routes;
+}
+
+/**
+ * nm_utils_uuid_generate:
+ *
+ * Returns: a newly allocated UUID suitable for use as the #NMSettingConnection
+ * object's #NMSettingConnection:id: property. Should be freed with g_free()
+ **/
+char *
+nm_utils_uuid_generate (void)
+{
+ uuid_t uuid;
+ char *buf;
+
+ buf = g_malloc0 (37);
+ uuid_generate_random (uuid);
+ uuid_unparse_lower (uuid, &buf[0]);
+ return buf;
+}
+
+/**
+ * nm_utils_uuid_generate_from_string:
+ * @s: a string to use as the seed for the UUID
+ * @slen: if negative, treat @s as zero terminated C string.
+ * Otherwise, assume the length as given (and allow @s to be
+ * non-null terminated or contain '\0').
+ * @uuid_type: a type identifier which UUID format to generate.
+ * @type_args: additional arguments, depending on the uuid_type
+ *
+ * For a given @s, this function will always return the same UUID.
+ *
+ * Returns: a newly allocated UUID suitable for use as the #NMSettingConnection
+ * object's #NMSettingConnection:id: property
+ **/
+char *
+nm_utils_uuid_generate_from_string (const char *s, gssize slen, int uuid_type, gpointer type_args)
+{
+ uuid_t uuid;
+ char *buf;
+
+ g_return_val_if_fail (slen == 0 || s, FALSE);
+
+ g_return_val_if_fail (uuid_type == NM_UTILS_UUID_TYPE_LEGACY || uuid_type == NM_UTILS_UUID_TYPE_VARIANT3, NULL);
+ g_return_val_if_fail (!type_args || uuid_type == NM_UTILS_UUID_TYPE_VARIANT3, NULL);
+
+ switch (uuid_type) {
+ case NM_UTILS_UUID_TYPE_LEGACY:
+ crypto_md5_hash (NULL, 0, s, slen, (char *) uuid, sizeof (uuid));
+ break;
+ case NM_UTILS_UUID_TYPE_VARIANT3: {
+ uuid_t ns_uuid = { 0 };
+
+ if (type_args) {
+ /* type_args can be a name space UUID. Interpret it as (char *) */
+ if (uuid_parse ((char *) type_args, ns_uuid) != 0)
+ g_return_val_if_reached (NULL);
+ }
+
+ crypto_md5_hash (s, slen, (char *) ns_uuid, sizeof (ns_uuid), (char *) uuid, sizeof (uuid));
+
+ uuid[6] = (uuid[6] & 0x0F) | 0x30;
+ uuid[8] = (uuid[8] & 0x3F) | 0x80;
+ break;
+ }
+ default:
+ g_return_val_if_reached (NULL);
+ }
+
+ buf = g_malloc0 (37);
+ uuid_unparse_lower (uuid, &buf[0]);
+
+ return buf;
+}
+
+/**
+ * nm_utils_rsa_key_encrypt:
+ * @data: (array length=len): RSA private key data to be encrypted
+ * @len: length of @data
+ * @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 guint8 *data,
+ gsize len,
+ 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;
+ char *tmp, *tmp_password = NULL;
+ int left;
+ const char *p;
+ GByteArray *ret = NULL;
+
+ g_return_val_if_fail (data != NULL, NULL);
+ g_return_val_if_fail (len > 0, NULL);
+ if (out_password)
+ g_return_val_if_fail (*out_password == NULL, NULL);
+
+ /* Make the password if needed */
+ if (!in_password) {
+ if (!crypto_randomize (pw_buf, sizeof (pw_buf), error))
+ return NULL;
+ in_password = tmp_password = nm_utils_bin2hexstr (pw_buf, sizeof (pw_buf), -1);
+ }
+
+ salt_len = 8;
+ if (!crypto_randomize (salt, salt_len, error))
+ goto out;
+
+ key = crypto_make_des_aes_key (CIPHER_DES_EDE3_CBC, &salt[0], salt_len, in_password, &key_len, NULL);
+ if (!key)
+ g_return_val_if_reached (NULL);
+
+ enc = crypto_encrypt (CIPHER_DES_EDE3_CBC, data, len, salt, salt_len, key, key_len, &enc_len, error);
+ if (!enc)
+ goto out;
+
+ pem = g_string_sized_new (enc_len * 2 + 100);
+ 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 = nm_utils_bin2hexstr (salt, salt_len, salt_len * 2);
+ g_string_append_printf (pem, "DEK-Info: %s,%s\n\n", CIPHER_DES_EDE3_CBC, tmp);
+ g_free (tmp);
+
+ /* Convert the encrypted key to a base64 string */
+ p = tmp = g_base64_encode ((const guchar *) enc, enc_len);
+ left = strlen (tmp);
+ while (left > 0) {
+ g_string_append_len (pem, p, (left < 64) ? left : 64);
+ g_string_append_c (pem, '\n');
+ left -= 64;
+ p += 64;
+ }
+ g_free (tmp);
+
+ g_string_append (pem, "-----END RSA PRIVATE KEY-----\n");
+
+ ret = g_byte_array_sized_new (pem->len);
+ g_byte_array_append (ret, (const unsigned char *) pem->str, pem->len);
+ if (tmp_password && out_password)
+ *out_password = g_strdup (tmp_password);
+
+out:
+ if (key) {
+ memset (key, 0, key_len);
+ g_free (key);
+ }
+ if (enc) {
+ memset (enc, 0, enc_len);
+ g_free (enc);
+ }
+ if (pem)
+ g_string_free (pem, TRUE);
+
+ if (tmp_password) {
+ memset (tmp_password, 0, strlen (tmp_password));
+ g_free (tmp_password);
+ }
+
+ return ret;
+}
+
+static gboolean
+file_has_extension (const char *filename, const char *extensions[])
+{
+ const char *ext;
+ int i;
+
+ ext = strrchr (filename, '.');
+ if (!ext)
+ return FALSE;
+
+ for (i = 0; extensions[i]; i++) {
+ if (!g_ascii_strcasecmp (ext, extensions[i]))
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/**
+ * nm_utils_file_is_certificate:
+ * @filename: name of the file to test
+ *
+ * Tests if @filename has a valid extension for an X.509 certificate file
+ * (".cer", ".crt", ".der", or ".pem"), and contains a certificate in a format
+ * recognized by NetworkManager.
+ *
+ * Returns: %TRUE if the file is a certificate, %FALSE if it is not
+ **/
+gboolean
+nm_utils_file_is_certificate (const char *filename)
+{
+ const char *extensions[] = { ".der", ".pem", ".crt", ".cer", NULL };
+ NMCryptoFileFormat file_format = NM_CRYPTO_FILE_FORMAT_UNKNOWN;
+ GByteArray *cert;
+
+ g_return_val_if_fail (filename != NULL, FALSE);
+
+ if (!file_has_extension (filename, extensions))
+ return FALSE;
+
+ cert = crypto_load_and_verify_certificate (filename, &file_format, NULL);
+ if (cert)
+ g_byte_array_unref (cert);
+
+ return file_format = NM_CRYPTO_FILE_FORMAT_X509;
+}
+
+/**
+ * nm_utils_file_is_private_key:
+ * @filename: name of the file to test
+ * @out_encrypted: (out): on return, whether the file is encrypted
+ *
+ * Tests if @filename has a valid extension for an X.509 private key file
+ * (".der", ".key", ".pem", or ".p12"), and contains a private key in a format
+ * recognized by NetworkManager.
+ *
+ * Returns: %TRUE if the file is a private key, %FALSE if it is not
+ **/
+gboolean
+nm_utils_file_is_private_key (const char *filename, gboolean *out_encrypted)
+{
+ const char *extensions[] = { ".der", ".pem", ".p12", ".key", NULL };
+
+ g_return_val_if_fail (filename != NULL, FALSE);
+ g_return_val_if_fail (out_encrypted == NULL || *out_encrypted == FALSE, FALSE);
+
+ if (!file_has_extension (filename, extensions))
+ return FALSE;
+
+ return crypto_verify_private_key (filename, NULL, out_encrypted, NULL) != NM_CRYPTO_FILE_FORMAT_UNKNOWN;
+}
+
+/**
+ * nm_utils_file_is_pkcs12:
+ * @filename: name of the file to test
+ *
+ * Tests if @filename is a PKCS#<!-- -->12 file.
+ *
+ * Returns: %TRUE if the file is PKCS#<!-- -->12, %FALSE if it is not
+ **/
+gboolean
+nm_utils_file_is_pkcs12 (const char *filename)
+{
+ g_return_val_if_fail (filename != NULL, FALSE);
+
+ return crypto_is_pkcs12_file (filename, NULL);
+}
+
+/**********************************************************************************************/
+
+/**
+ * nm_utils_file_search_in_paths:
+ * @progname: the helper program name, like "iptables"
+ * Must be a non-empty string, without path separator (/).
+ * @try_first: (allow-none): a custom path to try first before searching.
+ * It is silently ignored if it is empty or not an absolute path.
+ * @paths: (allow-none): a %NULL terminated list of search paths.
+ * Can be empty or %NULL, in which case only @try_first is checked.
+ * @file_test_flags: the flags passed to g_file_test() when searching
+ * for @progname. Set it to 0 to skip the g_file_test().
+ * @predicate: (scope call): if given, pass the file name to this function
+ * for additional checks. This check is performed after the check for
+ * @file_test_flags. You cannot omit both @file_test_flags and @predicate.
+ * @user_data: (closure): (allow-none): user data for @predicate function.
+ * @error: on failure, a "not found" error using @error_domain and @error_code
+ *
+ * Searches for a @progname file in a list of search @paths.
+ *
+ * Returns: (transfer none): the full path to the helper, if found, or %NULL if not found.
+ * The returned string is not owned by the caller, but later
+ * invocations of the function might overwrite it.
+ */
+const char *
+nm_utils_file_search_in_paths (const char *progname,
+ const char *try_first,
+ const char *const *paths,
+ GFileTest file_test_flags,
+ NMUtilsFileSearchInPathsPredicate predicate,
+ gpointer user_data,
+ GError **error)
+{
+ GString *tmp;
+ const char *ret;
+
+ g_return_val_if_fail (!error || !*error, NULL);
+ g_return_val_if_fail (progname && progname[0] && !strchr (progname, '/'), NULL);
+ g_return_val_if_fail (file_test_flags || predicate, NULL);
+
+ /* Only consider @try_first if it is a valid, absolute path. This makes
+ * it simpler to pass in a path from configure checks. */
+ if ( try_first
+ && try_first[0] == '/'
+ && (file_test_flags == 0 || g_file_test (try_first, file_test_flags))
+ && (!predicate || predicate (try_first, user_data)))
+ return g_intern_string (try_first);
+
+ if (!paths || !*paths)
+ goto NOT_FOUND;
+
+ tmp = g_string_sized_new (50);
+ for (; *paths; paths++) {
+ if (!*paths)
+ continue;
+ g_string_append (tmp, *paths);
+ if (tmp->str[tmp->len - 1] != '/')
+ g_string_append_c (tmp, '/');
+ g_string_append (tmp, progname);
+ if ( (file_test_flags == 0 || g_file_test (tmp->str, file_test_flags))
+ && (!predicate || predicate (tmp->str, user_data))) {
+ ret = g_intern_string (tmp->str);
+ g_string_free (tmp, TRUE);
+ return ret;
+ }
+ g_string_set_size (tmp, 0);
+ }
+ g_string_free (tmp, TRUE);
+
+NOT_FOUND:
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND, _("Could not find \"%s\" binary"), progname);
+ return NULL;
+}
+
+/**********************************************************************************************/
+
+/* Band, channel/frequency stuff for wireless */
+struct cf_pair {
+ guint32 chan;
+ guint32 freq;
+};
+
+static struct cf_pair a_table[] = {
+ /* A band */
+ { 7, 5035 },
+ { 8, 5040 },
+ { 9, 5045 },
+ { 11, 5055 },
+ { 12, 5060 },
+ { 16, 5080 },
+ { 34, 5170 },
+ { 36, 5180 },
+ { 38, 5190 },
+ { 40, 5200 },
+ { 42, 5210 },
+ { 44, 5220 },
+ { 46, 5230 },
+ { 48, 5240 },
+ { 50, 5250 },
+ { 52, 5260 },
+ { 56, 5280 },
+ { 58, 5290 },
+ { 60, 5300 },
+ { 64, 5320 },
+ { 100, 5500 },
+ { 104, 5520 },
+ { 108, 5540 },
+ { 112, 5560 },
+ { 116, 5580 },
+ { 120, 5600 },
+ { 124, 5620 },
+ { 128, 5640 },
+ { 132, 5660 },
+ { 136, 5680 },
+ { 140, 5700 },
+ { 149, 5745 },
+ { 152, 5760 },
+ { 153, 5765 },
+ { 157, 5785 },
+ { 160, 5800 },
+ { 161, 5805 },
+ { 165, 5825 },
+ { 183, 4915 },
+ { 184, 4920 },
+ { 185, 4925 },
+ { 187, 4935 },
+ { 188, 4945 },
+ { 192, 4960 },
+ { 196, 4980 },
+ { 0, -1 }
+};
+
+static struct cf_pair bg_table[] = {
+ /* B/G band */
+ { 1, 2412 },
+ { 2, 2417 },
+ { 3, 2422 },
+ { 4, 2427 },
+ { 5, 2432 },
+ { 6, 2437 },
+ { 7, 2442 },
+ { 8, 2447 },
+ { 9, 2452 },
+ { 10, 2457 },
+ { 11, 2462 },
+ { 12, 2467 },
+ { 13, 2472 },
+ { 14, 2484 },
+ { 0, -1 }
+};
+
+/**
+ * nm_utils_wifi_freq_to_channel:
+ * @freq: frequency
+ *
+ * Utility function to translate a Wi-Fi frequency to its corresponding channel.
+ *
+ * Returns: the channel represented by the frequency or 0
+ **/
+guint32
+nm_utils_wifi_freq_to_channel (guint32 freq)
+{
+ int i = 0;
+
+ if (freq > 4900) {
+ while (a_table[i].chan && (a_table[i].freq != freq))
+ i++;
+ return a_table[i].chan;
+ } else {
+ while (bg_table[i].chan && (bg_table[i].freq != freq))
+ i++;
+ return bg_table[i].chan;
+ }
+
+ return 0;
+}
+
+/**
+ * nm_utils_wifi_channel_to_freq:
+ * @channel: channel
+ * @band: frequency band for wireless ("a" or "bg")
+ *
+ * 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
+ * is invalid
+ **/
+guint32
+nm_utils_wifi_channel_to_freq (guint32 channel, const char *band)
+{
+ int i = 0;
+
+ if (!strcmp (band, "a")) {
+ while (a_table[i].chan && (a_table[i].chan != channel))
+ i++;
+ return a_table[i].freq;
+ } else if (!strcmp (band, "bg")) {
+ while (bg_table[i].chan && (bg_table[i].chan != channel))
+ i++;
+ return bg_table[i].freq;
+ }
+
+ return 0;
+}
+
+/**
+ * nm_utils_wifi_find_next_channel:
+ * @channel: current channel
+ * @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 Wi-Fi channel for a channel.
+ *
+ * Returns: the next channel in the specified direction or 0
+ **/
+guint32
+nm_utils_wifi_find_next_channel (guint32 channel, int direction, char *band)
+{
+ size_t a_size = sizeof (a_table) / sizeof (struct cf_pair);
+ size_t bg_size = sizeof (bg_table) / sizeof (struct cf_pair);
+ struct cf_pair *pair = NULL;
+
+ if (!strcmp (band, "a")) {
+ if (channel < a_table[0].chan)
+ return a_table[0].chan;
+ if (channel > a_table[a_size - 2].chan)
+ return a_table[a_size - 2].chan;
+ pair = &a_table[0];
+ } else if (!strcmp (band, "bg")) {
+ if (channel < bg_table[0].chan)
+ return bg_table[0].chan;
+ if (channel > bg_table[bg_size - 2].chan)
+ return bg_table[bg_size - 2].chan;
+ pair = &bg_table[0];
+ } else {
+ g_assert_not_reached ();
+ return 0;
+ }
+
+ while (pair->chan) {
+ if (channel == pair->chan)
+ return channel;
+ if ((channel < (pair+1)->chan) && (channel > pair->chan)) {
+ if (direction > 0)
+ return (pair+1)->chan;
+ else
+ return pair->chan;
+ }
+ pair++;
+ }
+ return 0;
+}
+
+/**
+ * nm_utils_wifi_is_channel_valid:
+ * @channel: channel
+ * @band: frequency band for wireless ("a" or "bg")
+ *
+ * Utility function to verify Wi-Fi channel validity.
+ *
+ * Returns: %TRUE or %FALSE
+ **/
+gboolean
+nm_utils_wifi_is_channel_valid (guint32 channel, const char *band)
+{
+ struct cf_pair *table = NULL;
+ int i = 0;
+
+ if (!strcmp (band, "a"))
+ table = a_table;
+ else if (!strcmp (band, "bg"))
+ table = bg_table;
+ else
+ return FALSE;
+
+ while (table[i].chan && (table[i].chan != channel))
+ i++;
+
+ if (table[i].chan != 0)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+/**
+ * nm_utils_wifi_strength_bars:
+ * @strength: the access point strength, from 0 to 100
+ *
+ * Converts @strength into a 4-character-wide graphical representation of
+ * strength suitable for printing to stdout. If the current locale and terminal
+ * support it, this will use unicode graphics characters to represent
+ * "bars". Otherwise it will use 0 to 4 asterisks.
+ *
+ * Returns: the graphical representation of the access point strength
+ */
+const char *
+nm_utils_wifi_strength_bars (guint8 strength)
+{
+ static const char *strength_full, *strength_high, *strength_med, *strength_low, *strength_none;
+
+ if (G_UNLIKELY (strength_full == NULL)) {
+ gboolean can_show_graphics = TRUE;
+ char *locale_str;
+
+ if (!g_get_charset (NULL)) {
+ /* Non-UTF-8 locale */
+ locale_str = g_locale_from_utf8 ("\342\226\202\342\226\204\342\226\206\342\226\210", -1, NULL, NULL, NULL);
+ if (locale_str)
+ g_free (locale_str);
+ else
+ can_show_graphics = FALSE;
+ }
+
+ /* The linux console font doesn't have these characters */
+ if (g_strcmp0 (g_getenv ("TERM"), "linux") == 0)
+ can_show_graphics = FALSE;
+
+ if (can_show_graphics) {
+ strength_full = /* ▂▄▆█ */ "\342\226\202\342\226\204\342\226\206\342\226\210";
+ strength_high = /* â–‚â–„â–†_ */ "\342\226\202\342\226\204\342\226\206_";
+ strength_med = /* â–‚â–„__ */ "\342\226\202\342\226\204__";
+ strength_low = /* â–‚___ */ "\342\226\202___";
+ strength_none = /* ____ */ "____";
+ } else {
+ strength_full = "****";
+ strength_high = "*** ";
+ strength_med = "** ";
+ strength_low = "* ";
+ strength_none = " ";
+ }
+ }
+
+ if (strength > 80)
+ return strength_full;
+ else if (strength > 55)
+ return strength_high;
+ else if (strength > 30)
+ return strength_med;
+ else if (strength > 5)
+ return strength_low;
+ else
+ return strength_none;
+}
+
+/**
+ * nm_utils_hwaddr_len:
+ * @type: the type of address; either <literal>ARPHRD_ETHER</literal> or
+ * <literal>ARPHRD_INFINIBAND</literal>
+ *
+ * Returns the length in octets of a hardware address of type @type.
+ *
+ * It is an error to call this function with any value other than
+ * <literal>ARPHRD_ETHER</literal> or <literal>ARPHRD_INFINIBAND</literal>.
+ *
+ * Return value: the length.
+ */
+gsize
+nm_utils_hwaddr_len (int type)
+{
+ g_return_val_if_fail (type == ARPHRD_ETHER || type == ARPHRD_INFINIBAND, 0);
+
+ if (type == ARPHRD_ETHER)
+ return ETH_ALEN;
+ else if (type == ARPHRD_INFINIBAND)
+ return INFINIBAND_ALEN;
+
+ g_assert_not_reached ();
+}
+
+#define HEXVAL(c) ((c) <= '9' ? (c) - '0' : ((c) & 0x4F) - 'A' + 10)
+
+/**
+ * nm_utils_hwaddr_atoba:
+ * @asc: the ASCII representation of a hardware address
+ * @length: the expected length in bytes of the result
+ *
+ * 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, gsize length)
+{
+ GByteArray *ba;
+
+ g_return_val_if_fail (asc != NULL, NULL);
+ g_return_val_if_fail (length > 0 && length <= NM_UTILS_HWADDR_LEN_MAX, NULL);
+
+ ba = g_byte_array_sized_new (length);
+ g_byte_array_set_size (ba, length);
+ if (!nm_utils_hwaddr_aton (asc, ba->data, length)) {
+ g_byte_array_unref (ba);
+ return NULL;
+ }
+
+ return ba;
+}
+
+/**
+ * nm_utils_hwaddr_aton:
+ * @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.
+ */
+guint8 *
+nm_utils_hwaddr_aton (const char *asc, gpointer buffer, gsize length)
+{
+ const char *in = asc;
+ guint8 *out = (guint8 *)buffer;
+ char delimiter = '\0';
+
+ g_return_val_if_fail (asc != NULL, NULL);
+ g_return_val_if_fail (buffer != NULL, NULL);
+ g_return_val_if_fail (length > 0 && length <= NM_UTILS_HWADDR_LEN_MAX, NULL);
+
+ while (length && *in) {
+ guint8 d1 = in[0], d2 = in[1];
+
+ if (!g_ascii_isxdigit (d1))
+ return NULL;
+
+ /* If there's no leading zero (ie "aa:b:cc") then fake it */
+ if (d2 && g_ascii_isxdigit (d2)) {
+ *out++ = (HEXVAL (d1) << 4) + HEXVAL (d2);
+ in += 2;
+ } else {
+ /* Fake leading zero */
+ *out++ = (HEXVAL ('0') << 4) + HEXVAL (d1);
+ in += 1;
+ }
+
+ length--;
+ if (*in) {
+ if (delimiter == '\0') {
+ if (*in == ':' || *in == '-')
+ delimiter = *in;
+ else
+ return NULL;
+ } else {
+ if (*in != delimiter)
+ return NULL;
+ }
+ in++;
+ }
+ }
+
+ if (length == 0 && !*in)
+ return buffer;
+ else
+ return NULL;
+}
+
+/**
+ * nm_utils_hwaddr_ntoa:
+ * @addr: (type guint8) (array length=length): a binary hardware address
+ * @length: the length of @addr
+ *
+ * Converts @addr to textual form.
+ *
+ * Return value: (transfer full): the textual form of @addr
+ */
+char *
+nm_utils_hwaddr_ntoa (gconstpointer addr, gsize length)
+{
+ const guint8 *in = addr;
+ char *out, *result;
+ const char *LOOKUP = "0123456789ABCDEF";
+
+ g_return_val_if_fail (addr != NULL, g_strdup (""));
+ g_return_val_if_fail (length > 0 && length <= NM_UTILS_HWADDR_LEN_MAX, g_strdup (""));
+
+ result = out = g_malloc (length * 3);
+ while (length--) {
+ guint8 v = *in++;
+
+ *out++ = LOOKUP[v >> 4];
+ *out++ = LOOKUP[v & 0x0F];
+ if (length)
+ *out++ = ':';
+ }
+
+ *out = 0;
+ return result;
+}
+
+static int
+hwaddr_binary_len (const char *asc)
+{
+ int octets = 1;
+
+ if (!*asc)
+ return 0;
+
+ for (; *asc; asc++) {
+ if (*asc == ':' || *asc == '-')
+ octets++;
+ }
+ return octets;
+}
+
+/**
+ * nm_utils_hwaddr_valid:
+ * @asc: the ASCII representation of a hardware address
+ * @length: the length of address that @asc is expected to convert to
+ * (or -1 to accept any length up to %NM_UTILS_HWADDR_LEN_MAX)
+ *
+ * Parses @asc to see if it is a valid hardware address of the given
+ * length.
+ *
+ * Return value: %TRUE if @asc appears to be a valid hardware address
+ * of the indicated length, %FALSE if not.
+ */
+gboolean
+nm_utils_hwaddr_valid (const char *asc, gssize length)
+{
+ guint8 buf[NM_UTILS_HWADDR_LEN_MAX];
+
+ g_return_val_if_fail (asc != NULL, FALSE);
+ g_return_val_if_fail (length == -1 || (length > 0 && length <= NM_UTILS_HWADDR_LEN_MAX), FALSE);
+
+ if (length == -1) {
+ length = hwaddr_binary_len (asc);
+ if (length == 0 || length > NM_UTILS_HWADDR_LEN_MAX)
+ return FALSE;
+ }
+
+ return nm_utils_hwaddr_aton (asc, buf, length) != NULL;
+}
+
+/**
+ * nm_utils_hwaddr_canonical:
+ * @asc: the ASCII representation of a hardware address
+ * @length: the length of address that @asc is expected to convert to
+ * (or -1 to accept any length up to %NM_UTILS_HWADDR_LEN_MAX)
+ *
+ * Parses @asc to see if it is a valid hardware address of the given
+ * length, and if so, returns it in canonical form (uppercase, with
+ * leading 0s as needed, and with colons rather than hyphens).
+ *
+ * Return value: (transfer full): the canonicalized address if @asc appears to
+ * be a valid hardware address of the indicated length, %NULL if not.
+ */
+char *
+nm_utils_hwaddr_canonical (const char *asc, gssize length)
+{
+ guint8 buf[NM_UTILS_HWADDR_LEN_MAX];
+
+ g_return_val_if_fail (asc != NULL, NULL);
+ g_return_val_if_fail (length == -1 || (length > 0 && length <= NM_UTILS_HWADDR_LEN_MAX), NULL);
+
+ if (length == -1) {
+ length = hwaddr_binary_len (asc);
+ if (length == 0 || length > NM_UTILS_HWADDR_LEN_MAX)
+ return NULL;
+ }
+
+ if (nm_utils_hwaddr_aton (asc, buf, length) == NULL)
+ return NULL;
+
+ return g_strdup (nm_utils_hwaddr_ntoa (buf, length));
+}
+
+/* This is used to possibly canonicalize values passed to MAC address property
+ * setters. Unlike nm_utils_hwaddr_canonical(), it accepts %NULL, and if you
+ * pass it an invalid MAC address, it just returns that string rather than
+ * returning %NULL (so that we can return a proper error from verify() later).
+ */
+char *
+_nm_utils_hwaddr_canonical_or_invalid (const char *mac, gssize length)
+{
+ char *canonical;
+
+ if (!mac)
+ return NULL;
+
+ canonical = nm_utils_hwaddr_canonical (mac, length);
+ if (canonical)
+ return canonical;
+ else
+ return g_strdup (mac);
+}
+
+/**
+ * nm_utils_hwaddr_matches:
+ * @hwaddr1: pointer to a binary or ASCII hardware address, or %NULL
+ * @hwaddr1_len: size of @hwaddr1, or -1 if @hwaddr1 is ASCII
+ * @hwaddr2: pointer to a binary or ASCII hardware address, or %NULL
+ * @hwaddr2_len: size of @hwaddr2, or -1 if @hwaddr2 is ASCII
+ *
+ * Generalized hardware address comparison function. Tests if @hwaddr1 and
+ * @hwaddr2 "equal" (or more precisely, "equivalent"), with several advantages
+ * over a simple memcmp():
+ *
+ * 1. If @hwaddr1_len or @hwaddr2_len is -1, then the corresponding address is
+ * assumed to be ASCII rather than binary, and will be converted to binary
+ * before being compared.
+ *
+ * 2. If @hwaddr1 or @hwaddr2 is %NULL, it is treated instead as though it was
+ * a zero-filled buffer @hwaddr1_len or @hwaddr2_len bytes long.
+ *
+ * 3. If @hwaddr1 and @hwaddr2 are InfiniBand hardware addresses (that is, if
+ * they are <literal>INFINIBAND_ALEN</literal> bytes long in binary form)
+ * then only the last 8 bytes are compared, since those are the only bytes
+ * that actually identify the hardware. (The other 12 bytes will change
+ * depending on the configuration of the InfiniBand fabric that the device
+ * is connected to.)
+ *
+ * If a passed-in ASCII hardware address cannot be parsed, or would parse to an
+ * address larger than %NM_UTILS_HWADDR_LEN_MAX, then it will silently fail to
+ * match. (This means that externally-provided address strings do not need to be
+ * sanity-checked before comparing them against known good addresses; they are
+ * guaranteed to not match if they are invalid.)
+ *
+ * Return value: %TRUE if @hwaddr1 and @hwaddr2 are equivalent, %FALSE if they are
+ * different (or either of them is invalid).
+ */
+gboolean
+nm_utils_hwaddr_matches (gconstpointer hwaddr1,
+ gssize hwaddr1_len,
+ gconstpointer hwaddr2,
+ gssize hwaddr2_len)
+{
+ guint8 buf1[NM_UTILS_HWADDR_LEN_MAX], buf2[NM_UTILS_HWADDR_LEN_MAX];
+
+ if (hwaddr1_len == -1) {
+ g_return_val_if_fail (hwaddr1 != NULL, FALSE);
+
+ hwaddr1_len = hwaddr_binary_len (hwaddr1);
+ if (hwaddr1_len == 0 || hwaddr1_len > NM_UTILS_HWADDR_LEN_MAX)
+ return FALSE;
+ if (!nm_utils_hwaddr_aton (hwaddr1, buf1, hwaddr1_len))
+ return FALSE;
+
+ hwaddr1 = buf1;
+ } else {
+ g_return_val_if_fail (hwaddr1_len > 0 && hwaddr1_len <= NM_UTILS_HWADDR_LEN_MAX, FALSE);
+
+ if (!hwaddr1) {
+ memset (buf1, 0, hwaddr1_len);
+ hwaddr1 = buf1;
+ }
+ }
+
+ if (hwaddr2_len == -1) {
+ g_return_val_if_fail (hwaddr2 != NULL, FALSE);
+
+ if (!nm_utils_hwaddr_aton (hwaddr2, buf2, hwaddr1_len))
+ return FALSE;
+
+ hwaddr2 = buf2;
+ hwaddr2_len = hwaddr1_len;
+ } else {
+ g_return_val_if_fail (hwaddr2_len > 0 && hwaddr2_len <= NM_UTILS_HWADDR_LEN_MAX, FALSE);
+
+ if (!hwaddr2) {
+ memset (buf2, 0, hwaddr2_len);
+ hwaddr2 = buf2;
+ }
+ }
+
+ if (hwaddr1_len != hwaddr2_len)
+ return FALSE;
+
+ if (hwaddr1_len == INFINIBAND_ALEN) {
+ hwaddr1 = (guint8 *)hwaddr1 + INFINIBAND_ALEN - 8;
+ hwaddr2 = (guint8 *)hwaddr2 + INFINIBAND_ALEN - 8;
+ hwaddr1_len = hwaddr2_len = 8;
+ }
+
+ return !memcmp (hwaddr1, hwaddr2, hwaddr1_len);
+}
+
+GVariant *
+_nm_utils_hwaddr_to_dbus (const GValue *prop_value)
+{
+ const char *str = g_value_get_string (prop_value);
+ guint8 buf[NM_UTILS_HWADDR_LEN_MAX];
+ int len;
+
+ if (str) {
+ len = hwaddr_binary_len (str);
+ g_return_val_if_fail (len > 0 && len <= NM_UTILS_HWADDR_LEN_MAX, NULL);
+ if (!nm_utils_hwaddr_aton (str, buf, len))
+ len = 0;
+ } else
+ len = 0;
+
+ return g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE, buf, len, 1);
+}
+
+void
+_nm_utils_hwaddr_from_dbus (GVariant *dbus_value,
+ GValue *prop_value)
+{
+ gsize length = 0;
+ const guint8 *array = g_variant_get_fixed_array (dbus_value, &length, 1);
+ char *str;
+
+ str = length ? nm_utils_hwaddr_ntoa (array, length) : NULL;
+ g_value_take_string (prop_value, str);
+}
+
+/**
+ * nm_utils_bin2hexstr:
+ * @src: (type guint8) (array length=len): an array of bytes
+ * @len: the length of the @src array
+ * @final_len: an index where to cut off the returned string, or -1
+ *
+ * Converts the byte array @src 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 @bytes
+ */
+/*
+ * Code originally by Alex Larsson <alexl@redhat.com> and
+ * copyright Red Hat, Inc. under terms of the LGPL.
+ */
+char *
+nm_utils_bin2hexstr (gconstpointer src, gsize len, int final_len)
+{
+ static char hex_digits[] = "0123456789abcdef";
+ const guint8 *bytes = src;
+ 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_hexstr2bin:
+ * @hex: a string of hexadecimal characters with optional ':' separators
+ *
+ * Converts a hexadecimal string @hex into an array of bytes. The optional
+ * separator ':' may be used between single or pairs of hexadecimal characters,
+ * eg "00:11" or "0:1". Any "0x" at the beginning of @hex is ignored. @hex
+ * may not start or end with ':'.
+ *
+ * Return value: (transfer full): the converted bytes, or %NULL on error
+ */
+GBytes *
+nm_utils_hexstr2bin (const char *hex)
+{
+ guint i = 0, x = 0;
+ gs_free guint8 *c = NULL;
+ int a, b;
+ gboolean found_colon = FALSE;
+
+ g_return_val_if_fail (hex != NULL, NULL);
+
+ if (strncasecmp (hex, "0x", 2) == 0)
+ hex += 2;
+ found_colon = !!strchr (hex, ':');
+
+ c = g_malloc (strlen (hex) / 2 + 1);
+ for (;;) {
+ a = g_ascii_xdigit_value (hex[i++]);
+ if (a < 0)
+ return NULL;
+
+ if (hex[i] && hex[i] != ':') {
+ b = g_ascii_xdigit_value (hex[i++]);
+ if (b < 0)
+ return NULL;
+ c[x++] = ((guint) a << 4) | ((guint) b);
+ } else
+ c[x++] = (guint) a;
+
+ if (!hex[i])
+ break;
+ if (hex[i] == ':') {
+ if (!hex[i + 1]) {
+ /* trailing ':' is invalid */
+ return NULL;
+ }
+ i++;
+ } else if (found_colon) {
+ /* If colons exist, they must delimit 1 or 2 hex chars */
+ return NULL;
+ }
+ }
+
+ return g_bytes_new (c, x);
+}
+
+/**
+ * nm_utils_iface_valid_name:
+ * @name: Name of interface
+ *
+ * This function is a 1:1 copy of the kernel's interface validation
+ * function in net/core/dev.c.
+ *
+ * Returns: %TRUE if interface name is valid, otherwise %FALSE is returned.
+ */
+gboolean
+nm_utils_iface_valid_name (const char *name)
+{
+ g_return_val_if_fail (name != NULL, FALSE);
+
+ if (*name == '\0')
+ return FALSE;
+
+ if (strlen (name) >= 16)
+ return FALSE;
+
+ if (!strcmp (name, ".") || !strcmp (name, ".."))
+ return FALSE;
+
+ while (*name) {
+ if (*name == '/' || g_ascii_isspace (*name))
+ return FALSE;
+ name++;
+ }
+
+ return TRUE;
+}
+
+/**
+ * nm_utils_is_uuid:
+ * @str: a string that might be a UUID
+ *
+ * Checks if @str is a UUID
+ *
+ * Returns: %TRUE if @str is a UUID, %FALSE if not
+ */
+gboolean
+nm_utils_is_uuid (const char *str)
+{
+ const char *p = str;
+ int num_dashes = 0;
+
+ while (*p) {
+ if (*p == '-')
+ num_dashes++;
+ else if (!g_ascii_isxdigit (*p))
+ return FALSE;
+ p++;
+ }
+
+ if ((num_dashes == 4) && (p - str == 36))
+ return TRUE;
+
+ /* Backwards compat for older configurations */
+ if ((num_dashes == 0) && (p - str == 40))
+ return TRUE;
+
+ 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
+ * <literal>INET_ADDRSTRLEN</literal> 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.
+ **/
+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
+ * <literal>INET6_ADDRSTRLEN</literal> 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.
+ **/
+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_ipaddr_valid:
+ * @family: <literal>AF_INET</literal> or <literal>AF_INET6</literal>, or
+ * <literal>AF_UNSPEC</literal> to accept either
+ * @ip: an IP address
+ *
+ * Checks if @ip contains a valid IP address of the given family.
+ *
+ * Return value: %TRUE or %FALSE
+ */
+gboolean
+nm_utils_ipaddr_valid (int family, const char *ip)
+{
+ guint8 buf[sizeof (struct in6_addr)];
+
+ g_return_val_if_fail (family == AF_INET || family == AF_INET6 || family == AF_UNSPEC, FALSE);
+
+ if (family == AF_UNSPEC)
+ family = strchr (ip, ':') ? AF_INET6 : AF_INET;
+
+ return inet_pton (family, ip, buf) == 1;
+}
+
+/**
+ * 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
+ */
+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;
+ }
+}
diff --git a/libnm-core/nm-utils.h b/libnm-core/nm-utils.h
new file mode 100644
index 000000000..8c22cfd16
--- /dev/null
+++ b/libnm-core/nm-utils.h
@@ -0,0 +1,190 @@
+/* -*- 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 2005 - 2013 Red Hat, Inc.
+ */
+
+#ifndef __NM_UTILS_H__
+#define __NM_UTILS_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <glib.h>
+
+#include <netinet/in.h>
+
+/* For ETH_ALEN and INFINIBAND_ALEN */
+#include <linux/if_ether.h>
+#include <linux/if_infiniband.h>
+
+#include "nm-dbus-interface.h"
+#include "nm-core-enum-types.h"
+#include "nm-setting-wireless-security.h"
+
+G_BEGIN_DECLS
+
+/* SSID helpers */
+gboolean nm_utils_is_empty_ssid (const guint8 *ssid, gsize len);
+const char *nm_utils_escape_ssid (const guint8 *ssid, gsize len);
+gboolean nm_utils_same_ssid (const guint8 *ssid1, gsize len1,
+ const guint8 *ssid2, gsize len2,
+ gboolean ignore_trailing_null);
+char * nm_utils_ssid_to_utf8 (const guint8 *ssid, gsize len);
+
+/**
+ * NMUtilsSecurityType:
+ * @NMU_SEC_INVALID: unknown or invalid security, placeholder and not used
+ * @NMU_SEC_NONE: unencrypted and open
+ * @NMU_SEC_STATIC_WEP: static WEP keys are used for encryption
+ * @NMU_SEC_LEAP: Cisco LEAP is used for authentication and for generating the
+ * dynamic WEP keys automatically
+ * @NMU_SEC_DYNAMIC_WEP: standard 802.1x is used for authentication and
+ * generating the dynamic WEP keys automatically
+ * @NMU_SEC_WPA_PSK: WPA1 is used with Pre-Shared Keys (PSK)
+ * @NMU_SEC_WPA_ENTERPRISE: WPA1 is used with 802.1x authentication
+ * @NMU_SEC_WPA2_PSK: WPA2/RSN is used with Pre-Shared Keys (PSK)
+ * @NMU_SEC_WPA2_ENTERPRISE: WPA2 is used with 802.1x authentication
+ *
+ * Describes generic security mechanisms that 802.11 access points may offer.
+ * Used with nm_utils_security_valid() for checking whether a given access
+ * point is compatible with a network device.
+ **/
+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;
+
+gboolean nm_utils_security_valid (NMUtilsSecurityType type,
+ NMDeviceWifiCapabilities wifi_caps,
+ gboolean have_ap,
+ gboolean adhoc,
+ NM80211ApFlags ap_flags,
+ NM80211ApSecurityFlags ap_wpa,
+ NM80211ApSecurityFlags ap_rsn);
+
+gboolean nm_utils_ap_mode_security_valid (NMUtilsSecurityType type,
+ NMDeviceWifiCapabilities wifi_caps);
+
+gboolean nm_utils_wep_key_valid (const char *key, NMWepKeyType wep_type);
+gboolean nm_utils_wpa_psk_valid (const char *psk);
+
+GVariant *nm_utils_ip4_dns_to_variant (char **dns);
+char **nm_utils_ip4_dns_from_variant (GVariant *value);
+GVariant *nm_utils_ip4_addresses_to_variant (GPtrArray *addresses,
+ const char *gateway);
+GPtrArray *nm_utils_ip4_addresses_from_variant (GVariant *value,
+ char **out_gateway);
+GVariant *nm_utils_ip4_routes_to_variant (GPtrArray *routes);
+GPtrArray *nm_utils_ip4_routes_from_variant (GVariant *value);
+
+guint32 nm_utils_ip4_netmask_to_prefix (guint32 netmask);
+guint32 nm_utils_ip4_prefix_to_netmask (guint32 prefix);
+guint32 nm_utils_ip4_get_default_prefix (guint32 ip);
+
+GVariant *nm_utils_ip6_dns_to_variant (char **dns);
+char **nm_utils_ip6_dns_from_variant (GVariant *value);
+GVariant *nm_utils_ip6_addresses_to_variant (GPtrArray *addresses,
+ const char *gateway);
+GPtrArray *nm_utils_ip6_addresses_from_variant (GVariant *value,
+ char **out_gateway);
+GVariant *nm_utils_ip6_routes_to_variant (GPtrArray *routes);
+GPtrArray *nm_utils_ip6_routes_from_variant (GVariant *value);
+
+GVariant *nm_utils_ip_addresses_to_variant (GPtrArray *addresses);
+GPtrArray *nm_utils_ip_addresses_from_variant (GVariant *value,
+ int family);
+GVariant *nm_utils_ip_routes_to_variant (GPtrArray *routes);
+GPtrArray *nm_utils_ip_routes_from_variant (GVariant *value,
+ int family);
+
+char *nm_utils_uuid_generate (void);
+
+gboolean nm_utils_file_is_certificate (const char *filename);
+gboolean nm_utils_file_is_private_key (const char *filename, gboolean *out_encrypted);
+gboolean nm_utils_file_is_pkcs12 (const char *filename);
+
+typedef gboolean (*NMUtilsFileSearchInPathsPredicate) (const char *filename, gpointer user_data);
+
+const char *nm_utils_file_search_in_paths (const char *progname,
+ const char *try_first,
+ const char *const *paths,
+ GFileTest file_test_flags,
+ NMUtilsFileSearchInPathsPredicate predicate,
+ gpointer user_data,
+ GError **error);
+
+guint32 nm_utils_wifi_freq_to_channel (guint32 freq);
+guint32 nm_utils_wifi_channel_to_freq (guint32 channel, const char *band);
+guint32 nm_utils_wifi_find_next_channel (guint32 channel, int direction, char *band);
+gboolean nm_utils_wifi_is_channel_valid (guint32 channel, const char *band);
+
+const char *nm_utils_wifi_strength_bars (guint8 strength);
+
+/**
+ * NM_UTILS_HWADDR_LEN_MAX:
+ *
+ * The maximum length of hardware addresses handled by NetworkManager itself,
+ * nm_utils_hwaddr_len(), and nm_utils_hwaddr_aton().
+ */
+#define NM_UTILS_HWADDR_LEN_MAX 20 /* INFINIBAND_ALEN */
+
+gsize nm_utils_hwaddr_len (int type) G_GNUC_PURE;
+
+char *nm_utils_hwaddr_ntoa (gconstpointer addr, gsize length);
+GByteArray *nm_utils_hwaddr_atoba (const char *asc, gsize length);
+guint8 *nm_utils_hwaddr_aton (const char *asc, gpointer buffer, gsize length);
+
+gboolean nm_utils_hwaddr_valid (const char *asc, gssize length);
+char *nm_utils_hwaddr_canonical (const char *asc, gssize length);
+gboolean nm_utils_hwaddr_matches (gconstpointer hwaddr1,
+ gssize hwaddr1_len,
+ gconstpointer hwaddr2,
+ gssize hwaddr2_len);
+
+char *nm_utils_bin2hexstr (gconstpointer src, gsize len, int final_len);
+GBytes *nm_utils_hexstr2bin (const char *hex);
+
+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
+const char *nm_utils_inet4_ntop (in_addr_t inaddr, char *dst);
+const char *nm_utils_inet6_ntop (const struct in6_addr *in6addr, char *dst);
+
+gboolean nm_utils_ipaddr_valid (int family, const char *ip);
+
+gboolean nm_utils_check_virtual_device_compatibility (GType virtual_type, GType other_type);
+
+G_END_DECLS
+
+#endif /* __NM_UTILS_H__ */
diff --git a/include/nm-version.h b/libnm-core/nm-version.h
index 5769156ce..39cfd63f5 100644
--- a/include/nm-version.h
+++ b/libnm-core/nm-version.h
@@ -15,7 +15,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2011 Red Hat, Inc.
+ * Copyright 2011 Red Hat, Inc.
*/
#ifndef NM_VERSION_H
@@ -27,7 +27,7 @@
* Evaluates to the major version number of NetworkManager which this source
* is compiled against.
*/
-#define NM_MAJOR_VERSION (0)
+#define NM_MAJOR_VERSION (1)
/**
* NM_MINOR_VERSION:
@@ -35,7 +35,7 @@
* Evaluates to the minor version number of NetworkManager which this source
* is compiled against.
*/
-#define NM_MINOR_VERSION (9)
+#define NM_MINOR_VERSION (0)
/**
* NM_MICRO_VERSION:
@@ -43,7 +43,7 @@
* Evaluates to the micro version number of NetworkManager which this source
* compiled against.
*/
-#define NM_MICRO_VERSION (10)
+#define NM_MICRO_VERSION (0)
/**
* NM_CHECK_VERSION:
@@ -51,7 +51,7 @@
* @minor: minor version (e.g. 2 for version 1.2.5)
* @micro: micro version (e.g. 5 for version 1.2.5)
*
- * Returns %TRUE if the version of the NetworkManager header files
+ * Returns: %TRUE if the version of the NetworkManager header files
* is the same as or newer than the passed-in version.
*/
#define NM_CHECK_VERSION(major,minor,micro) \
@@ -66,18 +66,10 @@
#define NM_VERSION_0_9_8 (NM_ENCODE_VERSION (0, 9, 8))
#define NM_VERSION_0_9_10 (NM_ENCODE_VERSION (0, 9, 10))
+#define NM_VERSION_1_0 (NM_ENCODE_VERSION (1, 0, 0))
-#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
+#define NM_VERSION_CUR_STABLE NM_VERSION_0_9_10
+#define NM_VERSION_NEXT_STABLE NM_VERSION_1_0
#if !defined (NM_VERSION_MIN_REQUIRED) || (NM_VERSION_MIN_REQUIRED == 0)
# undef NM_VERSION_MIN_REQUIRED
@@ -108,11 +100,24 @@
# define NM_DEPRECATED_IN_0_9_10_FOR(f)
#endif
+#if NM_VERSION_MIN_REQUIRED >= NM_VERSION_1_0
+# define NM_DEPRECATED_IN_1_0 G_DEPRECATED
+# define NM_DEPRECATED_IN_1_0_FOR(f) G_DEPRECATED_FOR(f)
+#else
+# define NM_DEPRECATED_IN_1_0
+# define NM_DEPRECATED_IN_1_0_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 */
+#if NM_VERSION_MAX_ALLOWED < NM_VERSION_1_0
+# define NM_AVAILABLE_IN_1_0 G_UNAVAILABLE(1,0)
+#else
+# define NM_AVAILABLE_IN_1_0
+#endif
+#endif /* NM_VERSION_H */
diff --git a/include/nm-version.h.in b/libnm-core/nm-version.h.in
index 711bfa9f0..0a33ac295 100644
--- a/include/nm-version.h.in
+++ b/libnm-core/nm-version.h.in
@@ -15,7 +15,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2011 Red Hat, Inc.
+ * Copyright 2011 Red Hat, Inc.
*/
#ifndef NM_VERSION_H
@@ -51,7 +51,7 @@
* @minor: minor version (e.g. 2 for version 1.2.5)
* @micro: micro version (e.g. 5 for version 1.2.5)
*
- * Returns %TRUE if the version of the NetworkManager header files
+ * Returns: %TRUE if the version of the NetworkManager header files
* is the same as or newer than the passed-in version.
*/
#define NM_CHECK_VERSION(major,minor,micro) \
@@ -66,18 +66,10 @@
#define NM_VERSION_0_9_8 (NM_ENCODE_VERSION (0, 9, 8))
#define NM_VERSION_0_9_10 (NM_ENCODE_VERSION (0, 9, 10))
+#define NM_VERSION_1_0 (NM_ENCODE_VERSION (1, 0, 0))
-#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
+#define NM_VERSION_CUR_STABLE NM_VERSION_0_9_10
+#define NM_VERSION_NEXT_STABLE NM_VERSION_1_0
#if !defined (NM_VERSION_MIN_REQUIRED) || (NM_VERSION_MIN_REQUIRED == 0)
# undef NM_VERSION_MIN_REQUIRED
@@ -108,11 +100,24 @@
# define NM_DEPRECATED_IN_0_9_10_FOR(f)
#endif
+#if NM_VERSION_MIN_REQUIRED >= NM_VERSION_1_0
+# define NM_DEPRECATED_IN_1_0 G_DEPRECATED
+# define NM_DEPRECATED_IN_1_0_FOR(f) G_DEPRECATED_FOR(f)
+#else
+# define NM_DEPRECATED_IN_1_0
+# define NM_DEPRECATED_IN_1_0_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 */
+#if NM_VERSION_MAX_ALLOWED < NM_VERSION_1_0
+# define NM_AVAILABLE_IN_1_0 G_UNAVAILABLE(1,0)
+#else
+# define NM_AVAILABLE_IN_1_0
+#endif
+#endif /* NM_VERSION_H */
diff --git a/libnm-core/nm-vpn-dbus-interface.h b/libnm-core/nm-vpn-dbus-interface.h
new file mode 100644
index 000000000..c4099be2a
--- /dev/null
+++ b/libnm-core/nm-vpn-dbus-interface.h
@@ -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, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright 2004 Red Hat, Inc.
+ */
+
+/* D-Bus-related definitions for NetworkManager VPN plugins.
+ *
+ * Note that although this header is installed as part of libnm, it is also
+ * used by some external code that does not link to libnm.
+ */
+
+#ifndef __NM_VPN_DBUS_INTERFACE_H__
+#define __NM_VPN_DBUS_INTERFACE_H__
+
+/*
+ * dbus services details
+ */
+#define NM_DBUS_PATH_VPN "/org/freedesktop/NetworkManager/VPN/Manager"
+#define NM_DBUS_INTERFACE_VPN "org.freedesktop.NetworkManager.VPN.Manager"
+
+#define NM_DBUS_PATH_VPN_CONNECTION "/org/freedesktop/NetworkManager/VPN/Connection"
+#define NM_DBUS_INTERFACE_VPN_CONNECTION "org.freedesktop.NetworkManager.VPN.Connection"
+
+#define NM_VPN_DBUS_PLUGIN_PATH "/org/freedesktop/NetworkManager/VPN/Plugin"
+#define NM_VPN_DBUS_PLUGIN_INTERFACE "org.freedesktop.NetworkManager.VPN.Plugin"
+
+/*
+ * VPN Errors
+ */
+#define NM_DBUS_NO_ACTIVE_VPN_CONNECTION "org.freedesktop.NetworkManager.VPNConnections.NoActiveVPNConnection"
+#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"
+
+
+/*
+ * VPN daemon signals
+ */
+#define NM_DBUS_VPN_SIGNAL_LOGIN_BANNER "LoginBanner"
+#define NM_DBUS_VPN_SIGNAL_LOGIN_FAILED "LoginFailed"
+#define NM_DBUS_VPN_SIGNAL_LAUNCH_FAILED "LaunchFailed"
+#define NM_DBUS_VPN_SIGNAL_CONNECT_FAILED "ConnectFailed"
+#define NM_DBUS_VPN_SIGNAL_VPN_CONFIG_BAD "VPNConfigBad"
+#define NM_DBUS_VPN_SIGNAL_IP_CONFIG_BAD "IPConfigBad"
+#define NM_DBUS_VPN_SIGNAL_STATE_CHANGE "StateChange"
+#define NM_DBUS_VPN_SIGNAL_IP4_CONFIG "IP4Config"
+
+/**
+ * NMVpnServiceState:
+ * @NM_VPN_SERVICE_STATE_UNKNOWN: The state of the VPN plugin is unknown.
+ * @NM_VPN_SERVICE_STATE_INIT: The VPN plugin is initialized.
+ * @NM_VPN_SERVICE_STATE_SHUTDOWN: Not used.
+ * @NM_VPN_SERVICE_STATE_STARTING: The plugin is attempting to connect to a VPN server.
+ * @NM_VPN_SERVICE_STATE_STARTED: The plugin has connected to a VPN server.
+ * @NM_VPN_SERVICE_STATE_STOPPING: The plugin is disconnecting from the VPN server.
+ * @NM_VPN_SERVICE_STATE_STOPPED: The plugin has disconnected from the VPN server.
+ *
+ * VPN daemon states
+ *
+ * (Corresponds to the NM_VPN_SERVICE_STATE type in nm-vpn-connection.xml.)
+ */
+typedef enum {
+ NM_VPN_SERVICE_STATE_UNKNOWN = 0,
+ NM_VPN_SERVICE_STATE_INIT,
+ NM_VPN_SERVICE_STATE_SHUTDOWN,
+ NM_VPN_SERVICE_STATE_STARTING,
+ NM_VPN_SERVICE_STATE_STARTED,
+ NM_VPN_SERVICE_STATE_STOPPING,
+ NM_VPN_SERVICE_STATE_STOPPED
+} NMVpnServiceState;
+
+
+/**
+ * NMVpnConnectionState:
+ * @NM_VPN_CONNECTION_STATE_UNKNOWN: The state of the VPN connection is
+ * unknown.
+ * @NM_VPN_CONNECTION_STATE_PREPARE: The VPN connection is preparing to
+ * connect.
+ * @NM_VPN_CONNECTION_STATE_NEED_AUTH: The VPN connection needs authorization
+ * credentials.
+ * @NM_VPN_CONNECTION_STATE_CONNECT: The VPN connection is being established.
+ * @NM_VPN_CONNECTION_STATE_IP_CONFIG_GET: The VPN connection is getting an IP
+ * address.
+ * @NM_VPN_CONNECTION_STATE_ACTIVATED: The VPN connection is active.
+ * @NM_VPN_CONNECTION_STATE_FAILED: The VPN connection failed.
+ * @NM_VPN_CONNECTION_STATE_DISCONNECTED: The VPN connection is disconnected.
+ *
+ * VPN connection states
+ *
+ * (Corresponds to the NM_VPN_CONNECTION_STATE type in nm-vpn-connection.xml.)
+ */
+typedef enum {
+ NM_VPN_CONNECTION_STATE_UNKNOWN = 0,
+ NM_VPN_CONNECTION_STATE_PREPARE,
+ NM_VPN_CONNECTION_STATE_NEED_AUTH,
+ NM_VPN_CONNECTION_STATE_CONNECT,
+ NM_VPN_CONNECTION_STATE_IP_CONFIG_GET,
+ NM_VPN_CONNECTION_STATE_ACTIVATED,
+ NM_VPN_CONNECTION_STATE_FAILED,
+ NM_VPN_CONNECTION_STATE_DISCONNECTED
+} NMVpnConnectionState;
+
+/**
+ * NMVpnConnectionStateReason:
+ * @NM_VPN_CONNECTION_STATE_REASON_UNKNOWN: The reason for the VPN connection
+ * state change is unknown.
+ * @NM_VPN_CONNECTION_STATE_REASON_NONE: No reason was given for the VPN
+ * connection state change.
+ * @NM_VPN_CONNECTION_STATE_REASON_USER_DISCONNECTED: The VPN connection changed
+ * state because the user disconnected it.
+ * @NM_VPN_CONNECTION_STATE_REASON_DEVICE_DISCONNECTED: The VPN connection
+ * changed state because the device it was using was disconnected.
+ * @NM_VPN_CONNECTION_STATE_REASON_SERVICE_STOPPED: The service providing the
+ * VPN connection was stopped.
+ * @NM_VPN_CONNECTION_STATE_REASON_IP_CONFIG_INVALID: The IP config of the VPN
+ * connection was invalid.
+ * @NM_VPN_CONNECTION_STATE_REASON_CONNECT_TIMEOUT: The connection attempt to
+ * the VPN service timed out.
+ * @NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_TIMEOUT: A timeout occurred
+ * while starting the service providing the VPN connection.
+ * @NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_FAILED: Starting the service
+ * starting the service providing the VPN connection failed.
+ * @NM_VPN_CONNECTION_STATE_REASON_NO_SECRETS: Necessary secrets for the VPN
+ * connection were not provided.
+ * @NM_VPN_CONNECTION_STATE_REASON_LOGIN_FAILED: Authentication to the VPN
+ * server failed.
+ * @NM_VPN_CONNECTION_STATE_REASON_CONNECTION_REMOVED: The connection was
+ * deleted from settings.
+ *
+ * VPN connection state reasons
+ *
+ * (Corresponds to the NM_VPN_CONNECTION_STATE_REASON type in nm-vpn-connection.xml.)
+ */
+typedef enum {
+ NM_VPN_CONNECTION_STATE_REASON_UNKNOWN = 0,
+ NM_VPN_CONNECTION_STATE_REASON_NONE,
+ NM_VPN_CONNECTION_STATE_REASON_USER_DISCONNECTED,
+ NM_VPN_CONNECTION_STATE_REASON_DEVICE_DISCONNECTED,
+ NM_VPN_CONNECTION_STATE_REASON_SERVICE_STOPPED,
+ NM_VPN_CONNECTION_STATE_REASON_IP_CONFIG_INVALID,
+ NM_VPN_CONNECTION_STATE_REASON_CONNECT_TIMEOUT,
+ NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_TIMEOUT,
+ NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_FAILED,
+ NM_VPN_CONNECTION_STATE_REASON_NO_SECRETS,
+ NM_VPN_CONNECTION_STATE_REASON_LOGIN_FAILED,
+ NM_VPN_CONNECTION_STATE_REASON_CONNECTION_REMOVED
+} NMVpnConnectionStateReason;
+
+/**
+ * NMVpnPluginFailure:
+ * @NM_VPN_PLUGIN_FAILURE_LOGIN_FAILED: Login failed.
+ * @NM_VPN_PLUGIN_FAILURE_CONNECT_FAILED: Connect failed.
+ * @NM_VPN_PLUGIN_FAILURE_BAD_IP_CONFIG: Invalid IP configuration returned from
+ * the VPN plugin.
+ *
+ * VPN plugin failure reasons
+ *
+ * (Corresponds to the NM_VPN_PLUGIN_FAILURE type in nm-vpn-plugin.xml.)
+ */
+typedef enum {
+ NM_VPN_PLUGIN_FAILURE_LOGIN_FAILED,
+ NM_VPN_PLUGIN_FAILURE_CONNECT_FAILED,
+ NM_VPN_PLUGIN_FAILURE_BAD_IP_CONFIG
+} NMVpnPluginFailure;
+
+
+/*** Generic config ***/
+
+/* string: VPN interface name (tun0, tap0, etc) */
+#define NM_VPN_PLUGIN_CONFIG_TUNDEV "tundev"
+
+/* string: Login message */
+#define NM_VPN_PLUGIN_CONFIG_BANNER "banner"
+
+/* uint32 / array of uint8: IP address of the public external VPN gateway (network byte order) */
+#define NM_VPN_PLUGIN_CONFIG_EXT_GATEWAY "gateway"
+
+/* uint32: Maximum Transfer Unit that the VPN interface should use */
+#define NM_VPN_PLUGIN_CONFIG_MTU "mtu"
+
+/* boolean: Has IP4 configuration? */
+#define NM_VPN_PLUGIN_CONFIG_HAS_IP4 "has-ip4"
+
+/* boolean: Has IP6 configuration? */
+#define NM_VPN_PLUGIN_CONFIG_HAS_IP6 "has-ip6"
+
+/* boolean: If %TRUE the VPN plugin can persist/reconnect the connection over
+ * link changes and VPN server dropouts.
+ */
+#define NM_VPN_PLUGIN_CAN_PERSIST "can-persist"
+
+
+/*** Ip4Config ***/
+
+/* uint32: IP address of the internal gateway of the subnet the VPN interface is
+ * on, if the VPN uses subnet configuration (network byte order)
+ */
+#define NM_VPN_PLUGIN_IP4_CONFIG_INT_GATEWAY "internal-gateway"
+
+/* uint32: internal IP address of the local VPN interface (network byte order) */
+#define NM_VPN_PLUGIN_IP4_CONFIG_ADDRESS "address"
+
+/* uint32: IP address of the other side of Point-to-Point connection if the VPN
+ * uses Point-to-Point configuration. (network byte order)
+ */
+#define NM_VPN_PLUGIN_IP4_CONFIG_PTP "ptp"
+
+/* uint32: IP prefix of the VPN interface; 1 - 32 inclusive */
+#define NM_VPN_PLUGIN_IP4_CONFIG_PREFIX "prefix"
+
+/* array of uint32: IP addresses of DNS servers for the VPN (network byte order) */
+#define NM_VPN_PLUGIN_IP4_CONFIG_DNS "dns"
+
+/* array of uint32: IP addresses of NBNS/WINS servers for the VPN (network byte order) */
+#define NM_VPN_PLUGIN_IP4_CONFIG_NBNS "nbns"
+
+/* uint32: Message Segment Size that the VPN interface should use */
+#define NM_VPN_PLUGIN_IP4_CONFIG_MSS "mss"
+
+/* string: DNS domain name */
+#define NM_VPN_PLUGIN_IP4_CONFIG_DOMAIN "domain"
+
+/* array of strings: DNS domain names */
+#define NM_VPN_PLUGIN_IP4_CONFIG_DOMAINS "domains"
+
+/* [ip4 routes]: custom routes the client should apply, in the format used
+ * by nm_utils_ip4_routes_to/from_gvalue
+ */
+#define NM_VPN_PLUGIN_IP4_CONFIG_ROUTES "routes"
+
+/* boolean: prevent this VPN connection from ever getting the default route */
+#define NM_VPN_PLUGIN_IP4_CONFIG_NEVER_DEFAULT "never-default"
+
+/* Deprecated */
+#define NM_VPN_PLUGIN_IP4_CONFIG_GATEWAY NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY
+
+/* Legacy IP4 items; these are included in the IP4 config by older plugins,
+ * but in the generic config by newer plugins.
+ */
+
+#define NM_VPN_PLUGIN_IP4_CONFIG_BANNER NM_VPN_PLUGIN_CONFIG_BANNER
+#define NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY NM_VPN_PLUGIN_CONFIG_EXT_GATEWAY
+#define NM_VPN_PLUGIN_IP4_CONFIG_MTU NM_VPN_PLUGIN_CONFIG_MTU
+#define NM_VPN_PLUGIN_IP4_CONFIG_TUNDEV NM_VPN_PLUGIN_CONFIG_TUNDEV
+
+
+/*** Ip6Config ***/
+
+/* array of uint8: IP address of the internal gateway of the subnet the VPN interface is
+ * on, if the VPN uses subnet configuration (network byte order)
+ */
+#define NM_VPN_PLUGIN_IP6_CONFIG_INT_GATEWAY "internal-gateway"
+
+/* array of uint8: internal IP address of the local VPN interface (network byte order) */
+#define NM_VPN_PLUGIN_IP6_CONFIG_ADDRESS "address"
+
+/* array of uint8: IP address of the other side of Point-to-Point connection if the VPN
+ * uses Point-to-Point configuration. (network byte order)
+ */
+#define NM_VPN_PLUGIN_IP6_CONFIG_PTP "ptp"
+
+/* uint32: prefix length of the VPN interface; 1 - 128 inclusive */
+#define NM_VPN_PLUGIN_IP6_CONFIG_PREFIX "prefix"
+
+/* array of array of uint8: IP addresses of DNS servers for the VPN (network byte order) */
+#define NM_VPN_PLUGIN_IP6_CONFIG_DNS "dns"
+
+/* uint32: Message Segment Size that the VPN interface should use */
+#define NM_VPN_PLUGIN_IP6_CONFIG_MSS "mss"
+
+/* string: DNS domain name */
+#define NM_VPN_PLUGIN_IP6_CONFIG_DOMAIN "domain"
+
+/* array of strings: DNS domain names */
+#define NM_VPN_PLUGIN_IP6_CONFIG_DOMAINS "domains"
+
+/* [ip6 routes]: custom routes the client should apply, in the format used
+ * by nm_utils_ip6_routes_to/from_gvalue
+ */
+#define NM_VPN_PLUGIN_IP6_CONFIG_ROUTES "routes"
+
+/* boolean: prevent this VPN connection from ever getting the default route */
+#define NM_VPN_PLUGIN_IP6_CONFIG_NEVER_DEFAULT "never-default"
+
+#endif /* __NM_VPN_DBUS_INTERFACE_H__ */
diff --git a/libnm-core/tests/Makefile.am b/libnm-core/tests/Makefile.am
new file mode 100644
index 000000000..a21c131cb
--- /dev/null
+++ b/libnm-core/tests/Makefile.am
@@ -0,0 +1,56 @@
+if ENABLE_TESTS
+
+certsdir = $(srcdir)/certs
+
+AM_CPPFLAGS = \
+ -I${top_srcdir}/include \
+ -I$(top_srcdir)/libnm-core \
+ -I$(top_builddir)/libnm-core \
+ -DNETWORKMANAGER_COMPILATION \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ $(GLIB_CFLAGS) \
+ -DTEST_CERT_DIR=\"$(certsdir)\"
+
+noinst_PROGRAMS = \
+ test-compare \
+ test-crypto \
+ test-general \
+ test-secrets \
+ test-setting-8021x \
+ test-setting-dcb \
+ test-settings-defaults
+
+LDADD = \
+ $(top_builddir)/libnm-core/libnm-core.la \
+ $(GLIB_LIBS)
+
+TESTS = $(noinst_PROGRAMS)
+
+endif
+
+# test-cert.p12 created with:
+#
+# openssl pkcs12 -export \
+# -in test_key_and_cert.pem \
+# -inkey test_key_and_cert.pem \
+# -certfile test_ca_cert.pem \
+# -name "test-pkcs12" \
+# -out test-cert.p12
+
+EXTRA_DIST = \
+ certs/test_ca_cert.pem \
+ certs/test_ca_cert.der \
+ certs/test_key_and_cert.pem \
+ certs/test-cert.p12 \
+ certs/test2_ca_cert.pem \
+ certs/test2_key_and_cert.pem \
+ certs/test2-cert.p12 \
+ certs/ca-no-ending-newline.pem \
+ certs/test-key-only.pem \
+ certs/test-key-only-decrypted.der \
+ certs/test-key-only-decrypted.pem \
+ certs/pkcs8-enc-key.pem \
+ certs/pkcs8-noenc-key.pem \
+ certs/pkcs8-decrypted.der \
+ certs/test-aes-key.pem
+
diff --git a/libnm-core/tests/Makefile.in b/libnm-core/tests/Makefile.in
new file mode 100644
index 000000000..b62df8b45
--- /dev/null
+++ b/libnm-core/tests/Makefile.in
@@ -0,0 +1,959 @@
+# 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@
+@ENABLE_TESTS_TRUE@noinst_PROGRAMS = test-compare$(EXEEXT) \
+@ENABLE_TESTS_TRUE@ test-crypto$(EXEEXT) test-general$(EXEEXT) \
+@ENABLE_TESTS_TRUE@ test-secrets$(EXEEXT) \
+@ENABLE_TESTS_TRUE@ test-setting-8021x$(EXEEXT) \
+@ENABLE_TESTS_TRUE@ test-setting-dcb$(EXEEXT) \
+@ENABLE_TESTS_TRUE@ test-settings-defaults$(EXEEXT)
+subdir = libnm-core/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)
+test_compare_SOURCES = test-compare.c
+test_compare_OBJECTS = test-compare.$(OBJEXT)
+test_compare_LDADD = $(LDADD)
+am__DEPENDENCIES_1 =
+@ENABLE_TESTS_TRUE@test_compare_DEPENDENCIES = \
+@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-core/libnm-core.la \
+@ENABLE_TESTS_TRUE@ $(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 =
+test_crypto_SOURCES = test-crypto.c
+test_crypto_OBJECTS = test-crypto.$(OBJEXT)
+test_crypto_LDADD = $(LDADD)
+@ENABLE_TESTS_TRUE@test_crypto_DEPENDENCIES = \
+@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-core/libnm-core.la \
+@ENABLE_TESTS_TRUE@ $(am__DEPENDENCIES_1)
+test_general_SOURCES = test-general.c
+test_general_OBJECTS = test-general.$(OBJEXT)
+test_general_LDADD = $(LDADD)
+@ENABLE_TESTS_TRUE@test_general_DEPENDENCIES = \
+@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-core/libnm-core.la \
+@ENABLE_TESTS_TRUE@ $(am__DEPENDENCIES_1)
+test_secrets_SOURCES = test-secrets.c
+test_secrets_OBJECTS = test-secrets.$(OBJEXT)
+test_secrets_LDADD = $(LDADD)
+@ENABLE_TESTS_TRUE@test_secrets_DEPENDENCIES = \
+@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-core/libnm-core.la \
+@ENABLE_TESTS_TRUE@ $(am__DEPENDENCIES_1)
+test_setting_8021x_SOURCES = test-setting-8021x.c
+test_setting_8021x_OBJECTS = test-setting-8021x.$(OBJEXT)
+test_setting_8021x_LDADD = $(LDADD)
+@ENABLE_TESTS_TRUE@test_setting_8021x_DEPENDENCIES = \
+@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-core/libnm-core.la \
+@ENABLE_TESTS_TRUE@ $(am__DEPENDENCIES_1)
+test_setting_dcb_SOURCES = test-setting-dcb.c
+test_setting_dcb_OBJECTS = test-setting-dcb.$(OBJEXT)
+test_setting_dcb_LDADD = $(LDADD)
+@ENABLE_TESTS_TRUE@test_setting_dcb_DEPENDENCIES = \
+@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-core/libnm-core.la \
+@ENABLE_TESTS_TRUE@ $(am__DEPENDENCIES_1)
+test_settings_defaults_SOURCES = test-settings-defaults.c
+test_settings_defaults_OBJECTS = test-settings-defaults.$(OBJEXT)
+test_settings_defaults_LDADD = $(LDADD)
+@ENABLE_TESTS_TRUE@test_settings_defaults_DEPENDENCIES = \
+@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-core/libnm-core.la \
+@ENABLE_TESTS_TRUE@ $(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
+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 = test-compare.c test-crypto.c test-general.c test-secrets.c \
+ test-setting-8021x.c test-setting-dcb.c \
+ test-settings-defaults.c
+DIST_SOURCES = test-compare.c test-crypto.c test-general.c \
+ test-secrets.c test-setting-8021x.c test-setting-dcb.c \
+ test-settings-defaults.c
+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@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
+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_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
+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@
+PERL = @PERL@
+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_DIR = @UDEV_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@
+@ENABLE_TESTS_TRUE@certsdir = $(srcdir)/certs
+@ENABLE_TESTS_TRUE@AM_CPPFLAGS = \
+@ENABLE_TESTS_TRUE@ -I${top_srcdir}/include \
+@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/libnm-core \
+@ENABLE_TESTS_TRUE@ -I$(top_builddir)/libnm-core \
+@ENABLE_TESTS_TRUE@ -DNETWORKMANAGER_COMPILATION \
+@ENABLE_TESTS_TRUE@ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+@ENABLE_TESTS_TRUE@ $(GLIB_CFLAGS) \
+@ENABLE_TESTS_TRUE@ -DTEST_CERT_DIR=\"$(certsdir)\"
+
+@ENABLE_TESTS_TRUE@LDADD = \
+@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-core/libnm-core.la \
+@ENABLE_TESTS_TRUE@ $(GLIB_LIBS)
+
+@ENABLE_TESTS_TRUE@TESTS = $(noinst_PROGRAMS)
+
+# test-cert.p12 created with:
+#
+# openssl pkcs12 -export \
+# -in test_key_and_cert.pem \
+# -inkey test_key_and_cert.pem \
+# -certfile test_ca_cert.pem \
+# -name "test-pkcs12" \
+# -out test-cert.p12
+EXTRA_DIST = \
+ certs/test_ca_cert.pem \
+ certs/test_ca_cert.der \
+ certs/test_key_and_cert.pem \
+ certs/test-cert.p12 \
+ certs/test2_ca_cert.pem \
+ certs/test2_key_and_cert.pem \
+ certs/test2-cert.p12 \
+ certs/ca-no-ending-newline.pem \
+ certs/test-key-only.pem \
+ certs/test-key-only-decrypted.der \
+ certs/test-key-only-decrypted.pem \
+ certs/pkcs8-enc-key.pem \
+ certs/pkcs8-noenc-key.pem \
+ certs/pkcs8-decrypted.der \
+ certs/test-aes-key.pem
+
+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 libnm-core/tests/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu libnm-core/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
+
+test-compare$(EXEEXT): $(test_compare_OBJECTS) $(test_compare_DEPENDENCIES) $(EXTRA_test_compare_DEPENDENCIES)
+ @rm -f test-compare$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_compare_OBJECTS) $(test_compare_LDADD) $(LIBS)
+
+test-crypto$(EXEEXT): $(test_crypto_OBJECTS) $(test_crypto_DEPENDENCIES) $(EXTRA_test_crypto_DEPENDENCIES)
+ @rm -f test-crypto$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_crypto_OBJECTS) $(test_crypto_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-secrets$(EXEEXT): $(test_secrets_OBJECTS) $(test_secrets_DEPENDENCIES) $(EXTRA_test_secrets_DEPENDENCIES)
+ @rm -f test-secrets$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_secrets_OBJECTS) $(test_secrets_LDADD) $(LIBS)
+
+test-setting-8021x$(EXEEXT): $(test_setting_8021x_OBJECTS) $(test_setting_8021x_DEPENDENCIES) $(EXTRA_test_setting_8021x_DEPENDENCIES)
+ @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)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-compare.Po@am__quote@
+@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@
+
+.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 $@ $<
+
+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
+
+
+# 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/ca-no-ending-newline.pem b/libnm-core/tests/certs/ca-no-ending-newline.pem
index 664e299aa..664e299aa 100644
--- a/libnm-util/tests/certs/ca-no-ending-newline.pem
+++ b/libnm-core/tests/certs/ca-no-ending-newline.pem
diff --git a/libnm-util/tests/certs/pkcs8-decrypted.der b/libnm-core/tests/certs/pkcs8-decrypted.der
index 2cbdeb5e3..2cbdeb5e3 100644
--- a/libnm-util/tests/certs/pkcs8-decrypted.der
+++ b/libnm-core/tests/certs/pkcs8-decrypted.der
Binary files differ
diff --git a/libnm-util/tests/certs/pkcs8-enc-key.pem b/libnm-core/tests/certs/pkcs8-enc-key.pem
index 0d08f2d29..0d08f2d29 100644
--- a/libnm-util/tests/certs/pkcs8-enc-key.pem
+++ b/libnm-core/tests/certs/pkcs8-enc-key.pem
diff --git a/libnm-util/tests/certs/pkcs8-noenc-key.pem b/libnm-core/tests/certs/pkcs8-noenc-key.pem
index f73fb55ab..f73fb55ab 100644
--- a/libnm-util/tests/certs/pkcs8-noenc-key.pem
+++ b/libnm-core/tests/certs/pkcs8-noenc-key.pem
diff --git a/libnm-util/tests/certs/test-aes-key.pem b/libnm-core/tests/certs/test-aes-key.pem
index aab8f463c..aab8f463c 100644
--- a/libnm-util/tests/certs/test-aes-key.pem
+++ b/libnm-core/tests/certs/test-aes-key.pem
diff --git a/libnm-util/tests/certs/test-cert.p12 b/libnm-core/tests/certs/test-cert.p12
index ae4a68304..ae4a68304 100644
--- a/libnm-util/tests/certs/test-cert.p12
+++ b/libnm-core/tests/certs/test-cert.p12
Binary files differ
diff --git a/libnm-util/tests/certs/test-key-only-decrypted.der b/libnm-core/tests/certs/test-key-only-decrypted.der
index c8652537a..c8652537a 100644
--- a/libnm-util/tests/certs/test-key-only-decrypted.der
+++ b/libnm-core/tests/certs/test-key-only-decrypted.der
Binary files differ
diff --git a/libnm-core/tests/certs/test-key-only-decrypted.pem b/libnm-core/tests/certs/test-key-only-decrypted.pem
new file mode 100644
index 000000000..1a25da5e7
--- /dev/null
+++ b/libnm-core/tests/certs/test-key-only-decrypted.pem
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpAIBAAKCAQEAztLp+/SkzmaHzIst0sO4+r7qUwiVnidKBHgxoTbS5UL1dvck
+cbjTEP23V4ZoKQIb6ZMrr8B+PVgWNBAlhX4oLUL8NH/WTwrntrlAUcjliWDNc1Fj
+Z+FZNjFe0IdLXZeKQiLTQvKDYnmERVvYIJfi0TQjXuy/ikF8rYBQ85scUV3kKRzB
+xnyhAHAP9nl3AyL1S6t2yiCr4U5TbIZo6dYPbpVLtbXP02zUc9vAPR0gIHKrPiW7
+P81fLXf91wuo6wxzwD90JxdWzzGaqe3BOSfHqul3SPRtVok1XHlb9i+Mn5O8ExzQ
+dF8wGxVDcY7/Gt9lZWnCilqrBEqA3iApjUgcgwIDAQABAoIBAQC77HCmepf04ryp
+Yhz00NoXG7mWUMqBtXlPrlaKAWKG5dxbiBwZKLK/UYlxgbLK8BuklBCx1Nnfq1Yh
+YDp3nTWsSp0WpsF3eJUqNhD3Pu8xcD+9dEo6bUu+LgXUu9oC5Fq/1RzYS7qNk5RX
+4Sf0FY4GQLWS3tL7MJ20mE71yg5k7qRbDydOyhTh1m1CpRYONWxSsWVLM8KGRDJp
+iF0cdPfD5yoPFpgDk8gwzrnXJH2Wqzv8GvyYykRK5AW7tE50y0rTAM42WZ7YS6aZ
+FNMmtYxeyzXLY3LgPP0uko5anz3OXRcqCfHfFANG0y7B9MehbrjMgI6S1BbzFl07
+V1zVQVqhAoGBAPIfrWMlh1fHlRh4iRGXK2Hvxyv2oNz9KvQ4qRaLV9ejRDzdt7Pi
+/utbi5LGBuDw9016nXM3I77b6PukHzsHFnWGRnyRSbkMMt6mE17nggmNqcpFWfE8
+E7HcKMhk4gbuo5AHD3Ee1Gac2AUDnzYiE+sS6WI3O9d77cc5ych5jZ+nAoGBANqt
+VZCttjY0E+hEyTP37eaE8u0jfdK8AflTJlNUHWKXglES525iu8I/Bso8KaQYsYF3
+SezGRd3KQepQhtMjFKfSpF+tbnboP57Y3XGo8xhbxqV4kRX+XGsVoW3Vg2nPKBrR
++dIY5nMwua+gkHWp9RDcemD2reiIZBVx95fK8dfFAoGAdCSH2pBs/MlrFqLzNTHr
+iH4pb0hN39O9YAsx6POMfo79s6izbyHLIID4Ub6WHB7ashrIHjVr+yin+NXAeWMr
+/dIcS7Kxx4c3e5/0mMi6kvSWZsWfoF0uIVo3YfEqjyK36OXKHXwpbNN9t+IF5ESy
+g0e+FfPiy7nR1Ig+5+CO8+8CgYEAp/75+Ug677FaidouaMpT7gC9UAkwJLFjItQK
+YYIBgTi8WOSY/2jCrhwVb1CA/RwrYjbuiARasGUt9oEe0x3kRHnC5e4rKxaJqdMZ
+bLRK7a+0EHNrouXiwjG/7s1VQ/ht6wzdS9btVBlezdogoQSMzQNU0SExwa7mlMMV
+X3v+B7ECgYAK+Yt4jnLH1LNWoDTU0Ug5hyXsQXV8lVBSnrkvS7GtP6ZA/4OqG7lJ
+/bTYFZGoiAGzOnC+YlAqSIu45CEnpr2xBsThQiWUVxspmQD1lEWWFcd77DPUwn3C
+59pLgx0AqJE3n6lBOwehiXbFKBdVzX8PfPZpuCK6qc/RiTILktwURA==
+-----END RSA PRIVATE KEY-----
diff --git a/libnm-util/tests/certs/test-key-only.pem b/libnm-core/tests/certs/test-key-only.pem
index 5ef530e9a..5ef530e9a 100644
--- a/libnm-util/tests/certs/test-key-only.pem
+++ b/libnm-core/tests/certs/test-key-only.pem
diff --git a/libnm-util/tests/certs/test2-cert.p12 b/libnm-core/tests/certs/test2-cert.p12
index 9d5732b0a..9d5732b0a 100644
--- a/libnm-util/tests/certs/test2-cert.p12
+++ b/libnm-core/tests/certs/test2-cert.p12
Binary files differ
diff --git a/libnm-util/tests/certs/test2_ca_cert.pem b/libnm-core/tests/certs/test2_ca_cert.pem
index 9a487ca4b..9a487ca4b 100644
--- a/libnm-util/tests/certs/test2_ca_cert.pem
+++ b/libnm-core/tests/certs/test2_ca_cert.pem
diff --git a/libnm-util/tests/certs/test2_key_and_cert.pem b/libnm-core/tests/certs/test2_key_and_cert.pem
index a668596ee..a668596ee 100644
--- a/libnm-util/tests/certs/test2_key_and_cert.pem
+++ b/libnm-core/tests/certs/test2_key_and_cert.pem
diff --git a/libnm-util/tests/certs/test_ca_cert.der b/libnm-core/tests/certs/test_ca_cert.der
index e844f65b2..e844f65b2 100644
--- a/libnm-util/tests/certs/test_ca_cert.der
+++ b/libnm-core/tests/certs/test_ca_cert.der
Binary files differ
diff --git a/libnm-util/tests/certs/test_ca_cert.pem b/libnm-core/tests/certs/test_ca_cert.pem
index faa3fc290..faa3fc290 100644
--- a/libnm-util/tests/certs/test_ca_cert.pem
+++ b/libnm-core/tests/certs/test_ca_cert.pem
diff --git a/libnm-util/tests/certs/test_key_and_cert.pem b/libnm-core/tests/certs/test_key_and_cert.pem
index c00495d0b..c00495d0b 100644
--- a/libnm-util/tests/certs/test_key_and_cert.pem
+++ b/libnm-core/tests/certs/test_key_and_cert.pem
diff --git a/libnm-core/tests/test-compare.c b/libnm-core/tests/test-compare.c
new file mode 100644
index 000000000..12db9c23b
--- /dev/null
+++ b/libnm-core/tests/test-compare.c
@@ -0,0 +1,248 @@
+/* -*- 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 2007 - 2014 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ */
+
+#include "config.h"
+
+#include <arpa/inet.h>
+#include <netinet/in.h>
+
+#include "nm-glib-compat.h"
+
+#include "nm-property-compare.h"
+
+#include "nm-test-utils.h"
+
+static void
+compare_ints (void)
+{
+ GVariant *value1, *value2;
+
+ value1 = g_variant_new_int32 (5);
+ value2 = g_variant_new_int32 (5);
+ g_assert (nm_property_compare (value1, value2) == 0);
+
+ g_variant_unref (value2);
+ value2 = g_variant_new_int32 (10);
+ g_assert (nm_property_compare (value1, value2) < 0);
+
+ g_variant_unref (value2);
+ value2 = g_variant_new_int32 (-1);
+ g_assert (nm_property_compare (value1, value2) > 0);
+
+ g_variant_unref (value1);
+ g_variant_unref (value2);
+}
+
+static void
+compare_strings (void)
+{
+ GVariant *value1, *value2;
+ const char *str1 = "hello";
+ const char *str2 = "world";
+
+ value1 = g_variant_new_string (str1);
+ value2 = g_variant_new_string (str1);
+ g_assert (nm_property_compare (value1, value2) == 0);
+
+ g_variant_unref (value2);
+ value2 = g_variant_new_string (str2);
+ g_assert (nm_property_compare (value1, value2) < 0);
+
+ g_assert (nm_property_compare (value2, value1) > 0);
+
+ g_variant_unref (value1);
+ g_variant_unref (value2);
+}
+
+static void
+compare_strv (void)
+{
+ GVariant *value1, *value2;
+ const char * const strv1[] = { "foo", "bar", "baz", NULL };
+ const char * const strv2[] = { "foo", "bar", "bar", NULL };
+ const char * const strv3[] = { "foo", "bar", NULL };
+ const char * const strv4[] = { "foo", "bar", "baz", "bam", NULL };
+
+ value1 = g_variant_new_strv (strv1, -1);
+ value2 = g_variant_new_strv (strv1, -1);
+ g_assert (nm_property_compare (value1, value2) == 0);
+
+ g_variant_unref (value2);
+ value2 = g_variant_new_strv (strv2, -1);
+ g_assert (nm_property_compare (value1, value2) != 0);
+
+ g_variant_unref (value2);
+ value2 = g_variant_new_strv (strv3, -1);
+ g_assert (nm_property_compare (value1, value2) != 0);
+
+ g_variant_unref (value2);
+ value2 = g_variant_new_strv (strv4, -1);
+ g_assert (nm_property_compare (value1, value2) != 0);
+
+ g_variant_unref (value1);
+ g_variant_unref (value2);
+}
+
+static void
+compare_arrays (void)
+{
+ GVariant *value1, *value2;
+ guint32 array[] = { 0, 1, 2, 3, 4 };
+
+ value1 = g_variant_new_fixed_array (G_VARIANT_TYPE_UINT32,
+ array, G_N_ELEMENTS (array),
+ sizeof (guint32));
+ value2 = g_variant_new_fixed_array (G_VARIANT_TYPE_UINT32,
+ array, G_N_ELEMENTS (array),
+ sizeof (guint32));
+
+ g_assert (nm_property_compare (value1, value2) == 0);
+
+ g_variant_unref (value2);
+ value2 = g_variant_new_fixed_array (G_VARIANT_TYPE_UINT32,
+ array + 1, G_N_ELEMENTS (array) - 1,
+ sizeof (guint32));
+ g_assert (nm_property_compare (value1, value2) != 0);
+
+ array[0] = 7;
+ g_variant_unref (value2);
+ value2 = g_variant_new_fixed_array (G_VARIANT_TYPE_UINT32,
+ array, G_N_ELEMENTS (array),
+ sizeof (guint32));
+ g_assert (nm_property_compare (value1, value2) != 0);
+
+ g_variant_unref (value1);
+ g_variant_unref (value2);
+}
+
+static void
+compare_str_hash (void)
+{
+ GVariant *value1, *value2;
+ GVariantBuilder builder;
+
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{ss}"));
+ g_variant_builder_add (&builder, "{ss}", "key1", "hello");
+ g_variant_builder_add (&builder, "{ss}", "key2", "world");
+ g_variant_builder_add (&builder, "{ss}", "key3", "!");
+ value1 = g_variant_builder_end (&builder);
+
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{ss}"));
+ g_variant_builder_add (&builder, "{ss}", "key3", "!");
+ g_variant_builder_add (&builder, "{ss}", "key2", "world");
+ g_variant_builder_add (&builder, "{ss}", "key1", "hello");
+ value2 = g_variant_builder_end (&builder);
+
+ g_assert (nm_property_compare (value1, value2) == 0);
+
+ g_variant_unref (value2);
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{ss}"));
+ g_variant_builder_add (&builder, "{ss}", "key1", "hello");
+ g_variant_builder_add (&builder, "{ss}", "key3", "!");
+ value2 = g_variant_builder_end (&builder);
+
+ g_assert (nm_property_compare (value1, value2) != 0);
+ g_assert (nm_property_compare (value2, value1) != 0);
+
+ g_variant_unref (value2);
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{ss}"));
+ g_variant_builder_add (&builder, "{ss}", "key1", "hello");
+ g_variant_builder_add (&builder, "{ss}", "key2", "moon");
+ g_variant_builder_add (&builder, "{ss}", "key3", "!");
+ value2 = g_variant_builder_end (&builder);
+
+ g_assert (nm_property_compare (value1, value2) != 0);
+
+ g_variant_unref (value1);
+ g_variant_unref (value2);
+}
+
+static void
+compare_ip6_addresses (void)
+{
+ GVariant *value1, *value2;
+ struct in6_addr addr1;
+ struct in6_addr addr2;
+ struct in6_addr addr3;
+ guint32 prefix1 = 64;
+ guint32 prefix2 = 64;
+ guint32 prefix3 = 0;
+
+ inet_pton (AF_INET6, "1:2:3:4:5:6:7:8", &addr1);
+ inet_pton (AF_INET6, "ffff:2:3:4:5:6:7:8", &addr2);
+ inet_pton (AF_INET6, "::", &addr3);
+
+ value1 = g_variant_new ("(@ayu@ay)",
+ g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
+ (guint8 *) addr1.s6_addr, 16, 1),
+ prefix1,
+ g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
+ (guint8 *) addr3.s6_addr, 16, 1));
+
+ value2 = g_variant_new ("(@ayu@ay)",
+ g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
+ (guint8 *) addr1.s6_addr, 16, 1),
+ prefix1,
+ g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
+ (guint8 *) addr3.s6_addr, 16, 1));
+
+ g_assert (nm_property_compare (value1, value2) == 0);
+
+ g_variant_unref (value2);
+ value2 = g_variant_new ("(@ayu@ay)",
+ g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
+ (guint8 *) addr2.s6_addr, 16, 1),
+ prefix2,
+ g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
+ (guint8 *) addr3.s6_addr, 16, 1));
+
+ g_assert (nm_property_compare (value1, value2) != 0);
+
+ g_variant_unref (value2);
+ value2 = g_variant_new ("(@ayu@ay)",
+ g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
+ (guint8 *) addr3.s6_addr, 16, 1),
+ prefix3,
+ g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
+ (guint8 *) addr3.s6_addr, 16, 1));
+
+ g_assert (nm_property_compare (value1, value2) != 0);
+
+ g_variant_unref (value1);
+ g_variant_unref (value2);
+}
+
+NMTST_DEFINE ();
+
+int
+main (int argc, char *argv[])
+{
+ nmtst_init (&argc, &argv, TRUE);
+
+ g_test_add_func ("/libnm/compare/ints", compare_ints);
+ g_test_add_func ("/libnm/compare/strings", compare_strings);
+ g_test_add_func ("/libnm/compare/strv", compare_strv);
+ g_test_add_func ("/libnm/compare/arrays", compare_arrays);
+ g_test_add_func ("/libnm/compare/str_hash", compare_str_hash);
+ g_test_add_func ("/libnm/compare/ip6_addresses", compare_ip6_addresses);
+
+ return g_test_run ();
+}
diff --git a/libnm-core/tests/test-crypto.c b/libnm-core/tests/test-crypto.c
new file mode 100644
index 000000000..1c8ae4773
--- /dev/null
+++ b/libnm-core/tests/test-crypto.c
@@ -0,0 +1,501 @@
+/* -*- 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.
+ *
+ * Copyright 2007 - 2011 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <glib/gi18n.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "crypto.h"
+#include "nm-utils.h"
+#include "nm-errors.h"
+#include "nm-core-internal.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-----";
+
+static const char *pem_dsa_key_begin = "-----BEGIN DSA PRIVATE KEY-----";
+static const char *pem_dsa_key_end = "-----END DSA PRIVATE KEY-----";
+
+static void
+dump_key_to_pem (const char *key, gsize key_len, int key_type)
+{
+ char *b64 = NULL;
+ GString *str = NULL;
+ const char *start_tag;
+ const char *end_tag;
+ char *p;
+
+ switch (key_type) {
+ case NM_CRYPTO_KEY_TYPE_RSA:
+ start_tag = pem_rsa_key_begin;
+ end_tag = pem_rsa_key_end;
+ break;
+ case NM_CRYPTO_KEY_TYPE_DSA:
+ start_tag = pem_dsa_key_begin;
+ end_tag = pem_dsa_key_end;
+ break;
+ default:
+ g_warning ("Unknown key type %d", key_type);
+ return;
+ }
+
+ b64 = g_base64_encode ((const unsigned char *) key, key_len);
+ if (!b64) {
+ g_warning ("Couldn't base64 encode the key.");
+ goto out;
+ }
+
+ str = g_string_new (NULL);
+
+ g_string_append (str, start_tag);
+ g_string_append_c (str, '\n');
+
+ for (p = b64; p < (b64 + strlen (b64)); p += 64) {
+ g_string_append_len (str, p, strnlen (p, 64));
+ g_string_append_c (str, '\n');
+ }
+
+ g_string_append (str, end_tag);
+ g_string_append_c (str, '\n');
+
+ g_message ("Decrypted private key:\n\n%s", str->str);
+
+out:
+ g_free (b64);
+ if (str)
+ g_string_free (str, TRUE);
+}
+#endif
+
+static void
+test_cert (gconstpointer test_data)
+{
+ char *path;
+ GByteArray *array;
+ NMCryptoFileFormat format = NM_CRYPTO_FILE_FORMAT_UNKNOWN;
+ GError *error = NULL;
+
+ path = g_build_filename (TEST_CERT_DIR, (const char *) test_data, NULL);
+
+ array = crypto_load_and_verify_certificate (path, &format, &error);
+ g_assert_no_error (error);
+ g_assert_cmpint (format, ==, NM_CRYPTO_FILE_FORMAT_X509);
+
+ g_byte_array_free (array, TRUE);
+
+ g_assert (nm_utils_file_is_certificate (path));
+}
+
+static GByteArray *
+file_to_byte_array (const char *filename)
+{
+ char *contents;
+ GByteArray *array = NULL;
+ gsize length = 0;
+
+ if (g_file_get_contents (filename, &contents, &length, NULL)) {
+ array = g_byte_array_sized_new (length);
+ g_byte_array_append (array, (guint8 *) contents, length);
+ g_assert (array->len == length);
+ g_free (contents);
+ }
+ return array;
+}
+
+static void
+test_load_private_key (const char *path,
+ const char *password,
+ const char *decrypted_path,
+ int expected_error)
+{
+ NMCryptoKeyType key_type = NM_CRYPTO_KEY_TYPE_UNKNOWN;
+ gboolean is_encrypted = FALSE;
+ GByteArray *array, *decrypted;
+ GError *error = NULL;
+
+ g_assert (nm_utils_file_is_private_key (path, &is_encrypted));
+ g_assert (is_encrypted);
+
+ array = crypto_decrypt_openssl_private_key (path, password, &key_type, &error);
+ /* Even if the password is wrong, we should determine the key type */
+ g_assert_cmpint (key_type, ==, NM_CRYPTO_KEY_TYPE_RSA);
+
+ if (expected_error != -1) {
+ g_assert (array == NULL);
+ g_assert_error (error, NM_CRYPTO_ERROR, expected_error);
+ g_clear_error (&error);
+ return;
+ }
+
+ if (password == NULL) {
+ g_assert (array == NULL);
+ g_assert_no_error (error);
+ return;
+ }
+
+ g_assert (array != NULL);
+
+ if (decrypted_path) {
+ /* Compare the crypto decrypted key against a known-good decryption */
+ decrypted = file_to_byte_array (decrypted_path);
+ g_assert (decrypted != NULL);
+ g_assert (decrypted->len == array->len);
+ g_assert (memcmp (decrypted->data, array->data, array->len) == 0);
+
+ g_byte_array_free (decrypted, TRUE);
+ }
+
+ g_byte_array_free (array, TRUE);
+}
+
+static void
+test_load_pkcs12 (const char *path,
+ const char *password,
+ int expected_error)
+{
+ NMCryptoFileFormat format = NM_CRYPTO_FILE_FORMAT_UNKNOWN;
+ gboolean is_encrypted = FALSE;
+ GError *error = NULL;
+
+ g_assert (nm_utils_file_is_private_key (path, NULL));
+
+ format = crypto_verify_private_key (path, password, &is_encrypted, &error);
+ if (expected_error != -1) {
+ g_assert_error (error, NM_CRYPTO_ERROR, expected_error);
+ g_assert_cmpint (format, ==, NM_CRYPTO_FILE_FORMAT_UNKNOWN);
+ g_clear_error (&error);
+ } else {
+ g_assert_no_error (error);
+ g_assert_cmpint (format, ==, NM_CRYPTO_FILE_FORMAT_PKCS12);
+ g_assert (is_encrypted);
+ }
+}
+
+static void
+test_load_pkcs12_no_password (const char *path)
+{
+ NMCryptoFileFormat format = NM_CRYPTO_FILE_FORMAT_UNKNOWN;
+ gboolean is_encrypted = FALSE;
+ GError *error = NULL;
+
+ g_assert (nm_utils_file_is_private_key (path, NULL));
+
+ /* We should still get a valid returned crypto file format */
+ format = crypto_verify_private_key (path, NULL, &is_encrypted, &error);
+ g_assert_no_error (error);
+ g_assert_cmpint (format, ==, NM_CRYPTO_FILE_FORMAT_PKCS12);
+ g_assert (is_encrypted);
+}
+
+static void
+test_is_pkcs12 (const char *path, gboolean expect_fail)
+{
+ gboolean is_pkcs12;
+ GError *error = NULL;
+
+ is_pkcs12 = crypto_is_pkcs12_file (path, &error);
+
+ if (expect_fail) {
+ g_assert_error (error, NM_CRYPTO_ERROR, NM_CRYPTO_ERROR_INVALID_DATA);
+ g_assert (!is_pkcs12);
+ } else {
+ g_assert_no_error (error);
+ g_assert (is_pkcs12);
+ }
+}
+
+static void
+test_load_pkcs8 (const char *path,
+ const char *password,
+ int expected_error)
+{
+ NMCryptoFileFormat format = NM_CRYPTO_FILE_FORMAT_UNKNOWN;
+ gboolean is_encrypted = FALSE;
+ GError *error = NULL;
+
+ g_assert (nm_utils_file_is_private_key (path, NULL));
+
+ format = crypto_verify_private_key (path, password, &is_encrypted, &error);
+ if (expected_error != -1) {
+ g_assert_error (error, NM_CRYPTO_ERROR, expected_error);
+ g_assert_cmpint (format, ==, NM_CRYPTO_FILE_FORMAT_UNKNOWN);
+ g_clear_error (&error);
+ } else {
+ g_assert_no_error (error);
+ g_assert_cmpint (format, ==, NM_CRYPTO_FILE_FORMAT_RAW_KEY);
+ g_assert (is_encrypted);
+ }
+}
+
+static void
+test_encrypt_private_key (const char *path,
+ const char *password)
+{
+ NMCryptoKeyType key_type = NM_CRYPTO_KEY_TYPE_UNKNOWN;
+ GByteArray *array, *encrypted, *re_decrypted;
+ GError *error = NULL;
+
+ array = crypto_decrypt_openssl_private_key (path, password, &key_type, &error);
+ g_assert_no_error (error);
+ g_assert (array != NULL);
+ g_assert_cmpint (key_type, ==, NM_CRYPTO_KEY_TYPE_RSA);
+
+ /* Now re-encrypt the private key */
+ encrypted = nm_utils_rsa_key_encrypt (array->data, array->len, password, NULL, &error);
+ g_assert_no_error (error);
+ g_assert (encrypted != NULL);
+
+ /* Then re-decrypt the private key */
+ key_type = NM_CRYPTO_KEY_TYPE_UNKNOWN;
+ re_decrypted = crypto_decrypt_openssl_private_key_data (encrypted->data, encrypted->len,
+ password, &key_type, &error);
+ g_assert_no_error (error);
+ g_assert (re_decrypted != NULL);
+ g_assert_cmpint (key_type, ==, NM_CRYPTO_KEY_TYPE_RSA);
+
+ /* Compare the original decrypted key with the re-decrypted key */
+ g_assert_cmpint (array->len, ==, re_decrypted->len);
+ g_assert (!memcmp (array->data, re_decrypted->data, array->len));
+
+ g_byte_array_free (re_decrypted, TRUE);
+ g_byte_array_free (encrypted, TRUE);
+ g_byte_array_free (array, TRUE);
+}
+
+static void
+test_key (gconstpointer test_data)
+{
+ char **parts, *path, *password, *decrypted_path;
+ int len;
+
+ parts = g_strsplit ((const char *) test_data, ", ", -1);
+ len = g_strv_length (parts);
+ if (len != 2 && len != 3)
+ g_error ("wrong number of arguments (<key file>, <password>, [<decrypted key file>])");
+
+ path = g_build_filename (TEST_CERT_DIR, parts[0], NULL);
+ password = parts[1];
+ decrypted_path = parts[2] ? g_build_filename (TEST_CERT_DIR, parts[2], NULL) : NULL;
+
+ test_is_pkcs12 (path, TRUE);
+ test_load_private_key (path, password, decrypted_path, -1);
+ test_load_private_key (path, "blahblahblah", NULL, NM_CRYPTO_ERROR_DECRYPTION_FAILED);
+ test_load_private_key (path, NULL, NULL, -1);
+ test_encrypt_private_key (path, password);
+
+ g_free (path);
+ g_free (decrypted_path);
+ g_strfreev (parts);
+}
+
+static void
+test_key_decrypted (gconstpointer test_data)
+{
+ const char *file = (const char *) test_data;
+ gboolean is_encrypted = FALSE;
+ char *path;
+
+ path = g_build_filename (TEST_CERT_DIR, file, NULL);
+
+ g_assert (nm_utils_file_is_private_key (path, &is_encrypted));
+ g_assert (!is_encrypted);
+
+ g_free (path);
+}
+
+static void
+test_pkcs12 (gconstpointer test_data)
+{
+ char **parts, *path, *password;
+
+ parts = g_strsplit ((const char *) test_data, ", ", -1);
+ if (g_strv_length (parts) != 2)
+ g_error ("wrong number of arguments (<file>, <password>)");
+
+ path = g_build_filename (TEST_CERT_DIR, parts[0], NULL);
+ password = parts[1];
+
+ test_is_pkcs12 (path, FALSE);
+ test_load_pkcs12 (path, password, -1);
+ test_load_pkcs12 (path, "blahblahblah", NM_CRYPTO_ERROR_DECRYPTION_FAILED);
+ test_load_pkcs12_no_password (path);
+
+ g_free (path);
+ g_strfreev (parts);
+}
+
+static void
+test_pkcs8 (gconstpointer test_data)
+{
+ char **parts, *path, *password;
+
+ parts = g_strsplit ((const char *) test_data, ", ", -1);
+ if (g_strv_length (parts) != 2)
+ g_error ("wrong number of arguments (<file>, <password>)");
+
+ path = g_build_filename (TEST_CERT_DIR, parts[0], NULL);
+ password = parts[1];
+
+ test_is_pkcs12 (path, TRUE);
+ test_load_pkcs8 (path, password, -1);
+ /* Until gnutls and NSS grow support for all the ciphers that openssl
+ * can use with PKCS#8, we can't actually verify the password. So we
+ * expect a bad password to work for the time being.
+ */
+ test_load_pkcs8 (path, "blahblahblah", -1);
+
+ g_free (path);
+ g_strfreev (parts);
+}
+
+#define SALT "sodium chloride"
+#define SHORT_PASSWORD "short"
+#define LONG_PASSWORD "this is a longer password than the short one"
+#define SHORT_DIGEST 16
+#define LONG_DIGEST 57
+
+struct {
+ const char *salt, *password;
+ gsize digest_size;
+ const char *result;
+} md5_tests[] = {
+ { NULL, SHORT_PASSWORD, SHORT_DIGEST,
+ "4f09daa9d95bcb166a302407a0e0babe" },
+ { NULL, SHORT_PASSWORD, LONG_DIGEST,
+ "4f09daa9d95bcb166a302407a0e0babeb7d62e5baf706830d007c253f0fe7584ad7e92dc00a599ec277293c298ae70ee3904c348e23be61c91" },
+ { SALT, SHORT_PASSWORD, SHORT_DIGEST,
+ "774771f7292210233b5724991d1f9894" },
+ { SALT, SHORT_PASSWORD, LONG_DIGEST,
+ "774771f7292210233b5724991d1f98941a6ffdb45e4dc7fa04b1fa6aceed379c1ade0577bc8f261d109942ed5736921c052664d72e0d5bade9" },
+ { NULL, LONG_PASSWORD, SHORT_DIGEST,
+ "e9c03517f81ff29bb777dac21fb1699c" },
+ { NULL, LONG_PASSWORD, LONG_DIGEST,
+ "e9c03517f81ff29bb777dac21fb1699c50968c7ccd8db4f0a59d00ffd87b05876d45f25a927d51a8400c35af60fbd64584349a8b7435d62fd9" },
+ { SALT, LONG_PASSWORD, SHORT_DIGEST,
+ "4e5c076e2f85f5e03994acbf3a9e10d6" },
+ { SALT, LONG_PASSWORD, LONG_DIGEST,
+ "4e5c076e2f85f5e03994acbf3a9e10d61a6969c9fdf47ae8b1f7e2725b3767b05cc974bfcb5344b630c91761e015e09d7794b5065662533bc9" },
+ { NULL, "", SHORT_DIGEST,
+ "d41d8cd98f00b204e9800998ecf8427e" },
+ { SALT, "", SHORT_DIGEST,
+ "7df1e0494c977195005d82a1809685e4" },
+};
+
+static void
+test_md5 (void)
+{
+ char digest[LONG_DIGEST], *hex;
+ int i;
+
+ for (i = 0; i < G_N_ELEMENTS (md5_tests); i++) {
+ memset (digest, 0, sizeof (digest));
+ crypto_md5_hash (md5_tests[i].salt,
+ /* crypto_md5_hash() used to clamp salt_len to 8. It
+ * doesn't any more, so we need to do it here now to
+ * get output that matches md5_tests[i].result.
+ */
+ md5_tests[i].salt ? 8 : 0,
+ md5_tests[i].password,
+ strlen (md5_tests[i].password),
+ digest, md5_tests[i].digest_size);
+
+ hex = nm_utils_bin2hexstr (digest, md5_tests[i].digest_size, -1);
+ g_assert_cmpstr (hex, ==, md5_tests[i].result);
+ g_free (hex);
+ }
+}
+
+NMTST_DEFINE ();
+
+int
+main (int argc, char **argv)
+{
+ GError *error = NULL;
+ int ret;
+
+ nmtst_init (&argc, &argv, TRUE);
+
+ if (!crypto_init (&error))
+ FAIL ("crypto-init", "failed to initialize crypto: %s", error->message);
+
+ g_test_add_data_func ("/libnm/crypto/cert/pem",
+ "test_ca_cert.pem",
+ test_cert);
+ g_test_add_data_func ("/libnm/crypto/cert/pem-2",
+ "test2_ca_cert.pem",
+ test_cert);
+ g_test_add_data_func ("/libnm/crypto/cert/der",
+ "test_ca_cert.der",
+ test_cert);
+ g_test_add_data_func ("/libnm/crypto/cert/pem-no-ending-newline",
+ "ca-no-ending-newline.pem",
+ test_cert);
+ g_test_add_data_func ("/libnm/crypto/cert/pem-combined",
+ "test_key_and_cert.pem",
+ test_cert);
+ g_test_add_data_func ("/libnm/crypto/cert/pem-combined-2",
+ "test2_key_and_cert.pem",
+ test_cert);
+
+ g_test_add_data_func ("/libnm/crypto/key/padding-6",
+ "test_key_and_cert.pem, test, test-key-only-decrypted.der",
+ test_key);
+ g_test_add_data_func ("/libnm/crypto/key/key-only",
+ "test-key-only.pem, test, test-key-only-decrypted.der",
+ test_key);
+ g_test_add_data_func ("/libnm/crypto/key/padding-8",
+ "test2_key_and_cert.pem, 12345testing",
+ test_key);
+ g_test_add_data_func ("/libnm/crypto/key/aes",
+ "test-aes-key.pem, test-aes-password",
+ test_key);
+ g_test_add_data_func ("/libnm/crypto/key/decrypted",
+ "test-key-only-decrypted.pem",
+ test_key_decrypted);
+
+ g_test_add_data_func ("/libnm/crypto/PKCS#12/1",
+ "test-cert.p12, test",
+ test_pkcs12);
+ g_test_add_data_func ("/libnm/crypto/PKCS#12/2",
+ "test2-cert.p12, 12345testing",
+ test_pkcs12);
+
+ g_test_add_data_func ("/libnm/crypto/PKCS#8",
+ "pkcs8-enc-key.pem, 1234567890",
+ test_pkcs8);
+
+ g_test_add_func ("/libnm/crypto/md5", test_md5);
+
+ ret = g_test_run ();
+
+ return ret;
+}
+
diff --git a/libnm-core/tests/test-general.c b/libnm-core/tests/test-general.c
new file mode 100644
index 000000000..d309c8005
--- /dev/null
+++ b/libnm-core/tests/test-general.c
@@ -0,0 +1,3961 @@
+/* -*- 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 2008 - 2011 Red Hat, Inc.
+ *
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <string.h>
+
+#include <nm-utils.h>
+
+#include "nm-setting-private.h"
+#include "nm-utils.h"
+#include "nm-core-internal.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-generic.h"
+#include "nm-setting-gsm.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-simple-connection.h"
+
+#include "nm-test-utils.h"
+
+static void
+vpn_check_func (const char *key, const char *value, gpointer user_data)
+{
+ const char *test = user_data;
+
+ if (!strcmp (key, "foobar1")) {
+ ASSERT (strcmp (value, "blahblah1") == 0,
+ test, "unexpected vpn item '%s' / '%s'", key, value);
+ return;
+ }
+
+ if (!strcmp (key, "foobar2")) {
+ ASSERT (strcmp (value, "blahblah2") == 0,
+ test, "unexpected vpn item '%s' / '%s'", key, value);
+ return;
+ }
+
+ if (!strcmp (key, "foobar3")) {
+ ASSERT (strcmp (value, "blahblah3") == 0,
+ test, "unexpected vpn item '%s' / '%s'", key, value);
+ return;
+ }
+
+ if (!strcmp (key, "foobar4")) {
+ ASSERT (strcmp (value, "blahblah4") == 0,
+ test, "unexpected vpn item '%s' / '%s'", key, value);
+ return;
+ }
+
+ ASSERT (FALSE, test, "unexpected vpn item '%s'", key);
+}
+
+static void
+vpn_check_empty_func (const char *key, const char *value, gpointer user_data)
+{
+ const char *test = user_data;
+
+ /* We don't expect any values */
+ ASSERT (FALSE, test, "unexpected vpn item '%s'", key);
+}
+
+static void
+test_setting_vpn_items (void)
+{
+ NMSettingVpn *s_vpn;
+
+ s_vpn = (NMSettingVpn *) nm_setting_vpn_new ();
+ ASSERT (s_vpn != NULL,
+ "vpn-items",
+ "error creating vpn setting");
+
+ nm_setting_vpn_add_data_item (s_vpn, "foobar1", "blahblah1");
+ nm_setting_vpn_add_data_item (s_vpn, "foobar2", "blahblah2");
+ nm_setting_vpn_add_data_item (s_vpn, "foobar3", "blahblah3");
+ nm_setting_vpn_add_data_item (s_vpn, "foobar4", "blahblah4");
+
+ /* Ensure that added values are all present */
+ nm_setting_vpn_foreach_data_item (s_vpn, vpn_check_func, "vpn-data");
+ nm_setting_vpn_remove_data_item (s_vpn, "foobar1");
+ nm_setting_vpn_remove_data_item (s_vpn, "foobar2");
+ nm_setting_vpn_remove_data_item (s_vpn, "foobar3");
+ nm_setting_vpn_remove_data_item (s_vpn, "foobar4");
+
+ nm_setting_vpn_add_secret (s_vpn, "foobar1", "blahblah1");
+ nm_setting_vpn_add_secret (s_vpn, "foobar2", "blahblah2");
+ nm_setting_vpn_add_secret (s_vpn, "foobar3", "blahblah3");
+ nm_setting_vpn_add_secret (s_vpn, "foobar4", "blahblah4");
+
+ /* Ensure that added values are all present */
+ nm_setting_vpn_foreach_secret (s_vpn, vpn_check_func, "vpn-secrets");
+ nm_setting_vpn_remove_secret (s_vpn, "foobar1");
+ nm_setting_vpn_remove_secret (s_vpn, "foobar2");
+ nm_setting_vpn_remove_secret (s_vpn, "foobar3");
+ 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", 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", 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", 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", 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", 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", 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", 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", G_LOG_LEVEL_CRITICAL, "*strlen (key) > 0*");
+ nm_setting_vpn_add_secret (s_vpn, "", "");
+ g_test_assert_expected_messages ();
+
+ g_test_expect_message ("libnm", 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", 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", 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", 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");
+
+ g_object_unref (s_vpn);
+}
+
+static void
+test_setting_vpn_update_secrets (void)
+{
+ NMConnection *connection;
+ NMSettingVpn *s_vpn;
+ GVariantBuilder settings_builder, vpn_builder, secrets_builder;
+ GVariant *settings;
+ gboolean success;
+ GError *error = NULL;
+ const char *tmp;
+ const char *key1 = "foobar";
+ const char *key2 = "blahblah";
+ const char *val1 = "value1";
+ const char *val2 = "value2";
+
+ connection = nm_simple_connection_new ();
+ ASSERT (connection != NULL,
+ "vpn-update-secrets",
+ "error creating connection");
+
+ s_vpn = (NMSettingVpn *) nm_setting_vpn_new ();
+ ASSERT (s_vpn != NULL,
+ "vpn-update-secrets",
+ "error creating vpn setting");
+ nm_connection_add_setting (connection, NM_SETTING (s_vpn));
+
+ g_variant_builder_init (&settings_builder, NM_VARIANT_TYPE_CONNECTION);
+ g_variant_builder_init (&vpn_builder, NM_VARIANT_TYPE_SETTING);
+ g_variant_builder_init (&secrets_builder, G_VARIANT_TYPE ("a{ss}"));
+
+ g_variant_builder_add (&secrets_builder, "{ss}", key1, val1);
+ g_variant_builder_add (&secrets_builder, "{ss}", key2, val2);
+
+ g_variant_builder_add (&vpn_builder, "{sv}",
+ NM_SETTING_VPN_SECRETS,
+ g_variant_builder_end (&secrets_builder));
+ g_variant_builder_add (&settings_builder, "{sa{sv}}",
+ NM_SETTING_VPN_SETTING_NAME,
+ &vpn_builder);
+ settings = g_variant_builder_end (&settings_builder);
+
+ success = nm_connection_update_secrets (connection, NM_SETTING_VPN_SETTING_NAME, settings, &error);
+ ASSERT (success == TRUE,
+ "vpn-update-secrets", "failed to update VPN secrets: %s", error->message);
+
+ /* Read the secrets back out */
+ tmp = nm_setting_vpn_get_secret (s_vpn, key1);
+ ASSERT (tmp != NULL,
+ "vpn-update-secrets", "unexpected failure getting key #1");
+ ASSERT (strcmp (tmp, val1) == 0,
+ "vpn-update-secrets", "unexpected key #1 value");
+
+ tmp = nm_setting_vpn_get_secret (s_vpn, key2);
+ ASSERT (tmp != NULL,
+ "vpn-update-secrets", "unexpected failure getting key #2");
+ ASSERT (strcmp (tmp, val2) == 0,
+ "vpn-update-secrets", "unexpected key #2 value");
+
+ g_variant_unref (settings);
+ g_object_unref (connection);
+}
+
+#define TO_DEL_NUM 50
+typedef struct {
+ NMSettingVpn *s_vpn;
+ char *to_del[TO_DEL_NUM];
+ guint called;
+} IterInfo;
+
+static void
+del_iter_func (const char *key, const char *value, gpointer user_data)
+{
+ IterInfo *info = user_data;
+ int i;
+
+ /* Record how many times this function gets called; it should get called
+ * exactly as many times as there are keys in the hash table, regardless
+ * of what keys we delete from the table.
+ */
+ info->called++;
+
+ /* During the iteration, remove a bunch of stuff from the table */
+ if (info->called == 1) {
+ for (i = 0; i < TO_DEL_NUM; i++)
+ nm_setting_vpn_remove_data_item (info->s_vpn, info->to_del[i]);
+ }
+}
+
+static void
+test_setting_vpn_modify_during_foreach (void)
+{
+ NMSettingVpn *s_vpn;
+ IterInfo info;
+ char *key, *val;
+ int i, u = 0;
+
+ s_vpn = (NMSettingVpn *) nm_setting_vpn_new ();
+ g_assert (s_vpn);
+
+ for (i = 0; i < TO_DEL_NUM * 2; i++) {
+ key = g_strdup_printf ("adsfasdfadf%d", i);
+ val = g_strdup_printf ("42263236236awt%d", i);
+ nm_setting_vpn_add_data_item (s_vpn, key, val);
+
+ /* Cache some keys to delete */
+ if (i % 2)
+ info.to_del[u++] = g_strdup (key);
+
+ g_free (key);
+ g_free (val);
+ }
+
+ /* Iterate over current table keys */
+ info.s_vpn = s_vpn;
+ info.called = 0;
+ nm_setting_vpn_foreach_data_item (s_vpn, del_iter_func, &info);
+
+ /* Make sure all the things we removed during iteration are really gone */
+ for (i = 0; i < TO_DEL_NUM; i++) {
+ g_assert_cmpstr (nm_setting_vpn_get_data_item (s_vpn, info.to_del[i]), ==, NULL);
+ g_free (info.to_del[i]);
+ }
+
+ /* And make sure the foreach callback was called the same number of times
+ * as there were keys in the table at the beginning of the foreach.
+ */
+ g_assert_cmpint (info.called, ==, TO_DEL_NUM * 2);
+
+ g_object_unref (s_vpn);
+}
+
+static void
+test_setting_ip4_config_labels (void)
+{
+ NMSettingIPConfig *s_ip4;
+ NMIPAddress *addr;
+ GVariant *label;
+ GPtrArray *addrs;
+ char **labels;
+ NMConnection *conn;
+ GVariant *dict, *dict2, *setting_dict, *value;
+ GError *error = NULL;
+
+ s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new ();
+ g_object_set (G_OBJECT (s_ip4),
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
+ NULL);
+
+ /* addr 1 */
+ addr = nm_ip_address_new (AF_INET, "1.2.3.4", 24, &error);
+ g_assert_no_error (error);
+
+ nm_setting_ip_config_add_address (s_ip4, addr);
+ nm_ip_address_unref (addr);
+ nmtst_assert_setting_verifies (NM_SETTING (s_ip4));
+
+ addr = nm_setting_ip_config_get_address (s_ip4, 0);
+ label = nm_ip_address_get_attribute (addr, "label");
+ g_assert (label == NULL);
+
+ /* The 'address-labels' property should be omitted from the serialization if
+ * there are no non-NULL labels.
+ */
+ conn = nmtst_create_minimal_connection ("label test", NULL, NM_SETTING_WIRED_SETTING_NAME, NULL);
+ nm_connection_add_setting (conn, nm_setting_duplicate (NM_SETTING (s_ip4)));
+ dict = nm_connection_to_dbus (conn, NM_CONNECTION_SERIALIZE_ALL);
+ g_object_unref (conn);
+
+ setting_dict = g_variant_lookup_value (dict, NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_VARIANT_TYPE_SETTING);
+ g_assert (setting_dict != NULL);
+
+ value = g_variant_lookup_value (setting_dict, "address-labels", NULL);
+ g_assert (value == NULL);
+
+ g_variant_unref (setting_dict);
+ g_variant_unref (dict);
+
+ /* Now back to constructing the original s_ip4... */
+
+ /* addr 2 */
+ addr = nm_ip_address_new (AF_INET, "2.3.4.5", 24, &error);
+ g_assert_no_error (error);
+ nm_ip_address_set_attribute (addr, "label", g_variant_new_string ("eth0:1"));
+
+ nm_setting_ip_config_add_address (s_ip4, addr);
+ nm_ip_address_unref (addr);
+ nmtst_assert_setting_verifies (NM_SETTING (s_ip4));
+
+ addr = nm_setting_ip_config_get_address (s_ip4, 1);
+ label = nm_ip_address_get_attribute (addr, "label");
+ g_assert (label != NULL);
+ g_assert_cmpstr (g_variant_get_string (label, NULL), ==, "eth0:1");
+
+ /* addr 3 */
+ addr = nm_ip_address_new (AF_INET, "3.4.5.6", 24, &error);
+ g_assert_no_error (error);
+ nm_ip_address_set_attribute (addr, "label", NULL);
+
+ nm_setting_ip_config_add_address (s_ip4, addr);
+ nm_ip_address_unref (addr);
+ nmtst_assert_setting_verifies (NM_SETTING (s_ip4));
+
+ addr = nm_setting_ip_config_get_address (s_ip4, 2);
+ label = nm_ip_address_get_attribute (addr, "label");
+ g_assert (label == NULL);
+
+ /* Remove addr 1 and re-verify remaining addresses */
+ nm_setting_ip_config_remove_address (s_ip4, 0);
+ nmtst_assert_setting_verifies (NM_SETTING (s_ip4));
+
+ addr = nm_setting_ip_config_get_address (s_ip4, 0);
+ g_assert_cmpstr (nm_ip_address_get_address (addr), ==, "2.3.4.5");
+ label = nm_ip_address_get_attribute (addr, "label");
+ g_assert (label != NULL);
+ g_assert_cmpstr (g_variant_get_string (label, NULL), ==, "eth0:1");
+
+ addr = nm_setting_ip_config_get_address (s_ip4, 1);
+ g_assert_cmpstr (nm_ip_address_get_address (addr), ==, "3.4.5.6");
+ label = nm_ip_address_get_attribute (addr, "label");
+ g_assert (label == NULL);
+
+ /* If we serialize as the daemon, the labels should appear in the D-Bus
+ * serialization under both 'address-labels' and 'address-data'.
+ */
+ conn = nmtst_create_minimal_connection ("label test", NULL, NM_SETTING_WIRED_SETTING_NAME, NULL);
+ nm_connection_add_setting (conn, NM_SETTING (s_ip4));
+ _nm_utils_is_manager_process = TRUE;
+ dict = nm_connection_to_dbus (conn, NM_CONNECTION_SERIALIZE_ALL);
+ _nm_utils_is_manager_process = FALSE;
+ g_object_unref (conn);
+
+ setting_dict = g_variant_lookup_value (dict, NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_VARIANT_TYPE_SETTING);
+ g_assert (setting_dict != NULL);
+
+ value = g_variant_lookup_value (setting_dict, "address-labels", G_VARIANT_TYPE_STRING_ARRAY);
+ g_assert (value != NULL);
+ g_variant_get (value, "^as", &labels);
+ g_assert_cmpint (g_strv_length (labels), ==, 2);
+ g_assert_cmpstr (labels[0], ==, "eth0:1");
+ g_assert_cmpstr (labels[1], ==, "");
+ g_variant_unref (value);
+ g_strfreev (labels);
+
+ value = g_variant_lookup_value (setting_dict, "address-data", G_VARIANT_TYPE ("aa{sv}"));
+ addrs = nm_utils_ip_addresses_from_variant (value, AF_INET);
+ g_variant_unref (value);
+ g_assert (addrs != NULL);
+ g_assert_cmpint (addrs->len, ==, 2);
+ addr = addrs->pdata[0];
+ label = nm_ip_address_get_attribute (addr, "label");
+ g_assert (label != NULL);
+ g_assert_cmpstr (g_variant_get_string (label, NULL), ==, "eth0:1");
+ addr = addrs->pdata[1];
+ label = nm_ip_address_get_attribute (addr, "label");
+ g_assert (label == NULL);
+ g_ptr_array_unref (addrs);
+
+ g_variant_unref (setting_dict);
+
+ /* We should be able to deserialize the labels from either 'address-labels'
+ * or 'address-data'.
+ */
+ dict2 = g_variant_ref (dict);
+
+ NMTST_VARIANT_EDITOR (dict,
+ NMTST_VARIANT_DROP_PROPERTY (NM_SETTING_IP4_CONFIG_SETTING_NAME,
+ "address-data");
+ );
+ conn = nm_simple_connection_new_from_dbus (dict, &error);
+ g_assert_no_error (error);
+ g_variant_unref (dict);
+
+ s_ip4 = nm_connection_get_setting_ip4_config (conn);
+
+ addr = nm_setting_ip_config_get_address (s_ip4, 0);
+ g_assert_cmpstr (nm_ip_address_get_address (addr), ==, "2.3.4.5");
+ label = nm_ip_address_get_attribute (addr, "label");
+ g_assert (label != NULL);
+ g_assert_cmpstr (g_variant_get_string (label, NULL), ==, "eth0:1");
+
+ addr = nm_setting_ip_config_get_address (s_ip4, 1);
+ g_assert_cmpstr (nm_ip_address_get_address (addr), ==, "3.4.5.6");
+ label = nm_ip_address_get_attribute (addr, "label");
+ g_assert (label == NULL);
+
+ g_object_unref (conn);
+
+ NMTST_VARIANT_EDITOR (dict2,
+ NMTST_VARIANT_DROP_PROPERTY (NM_SETTING_IP4_CONFIG_SETTING_NAME,
+ "address-labels");
+ );
+ conn = nm_simple_connection_new_from_dbus (dict2, &error);
+ g_assert_no_error (error);
+ g_variant_unref (dict2);
+
+ s_ip4 = nm_connection_get_setting_ip4_config (conn);
+
+ addr = nm_setting_ip_config_get_address (s_ip4, 0);
+ g_assert_cmpstr (nm_ip_address_get_address (addr), ==, "2.3.4.5");
+ label = nm_ip_address_get_attribute (addr, "label");
+ g_assert_cmpstr (g_variant_get_string (label, NULL), ==, "eth0:1");
+
+ addr = nm_setting_ip_config_get_address (s_ip4, 1);
+ g_assert_cmpstr (nm_ip_address_get_address (addr), ==, "3.4.5.6");
+ label = nm_ip_address_get_attribute (addr, "label");
+ g_assert (label == NULL);
+
+ /* Test explicit property assignment */
+ g_object_get (G_OBJECT (s_ip4),
+ NM_SETTING_IP_CONFIG_ADDRESSES, &addrs,
+ NULL);
+
+ nm_setting_ip_config_clear_addresses (s_ip4);
+ g_assert_cmpint (nm_setting_ip_config_get_num_addresses (s_ip4), ==, 0);
+
+ g_object_set (G_OBJECT (s_ip4),
+ NM_SETTING_IP_CONFIG_ADDRESSES, addrs,
+ NULL);
+ g_ptr_array_unref (addrs);
+ nmtst_assert_setting_verifies (NM_SETTING (s_ip4));
+ g_assert_cmpint (nm_setting_ip_config_get_num_addresses (s_ip4), ==, 2);
+
+ addr = nm_setting_ip_config_get_address (s_ip4, 0);
+ g_assert_cmpstr (nm_ip_address_get_address (addr), ==, "2.3.4.5");
+ label = nm_ip_address_get_attribute (addr, "label");
+ g_assert (label != NULL);
+ g_assert_cmpstr (g_variant_get_string (label, NULL), ==, "eth0:1");
+
+ addr = nm_setting_ip_config_get_address (s_ip4, 1);
+ g_assert_cmpstr (nm_ip_address_get_address (addr), ==, "3.4.5.6");
+ label = nm_ip_address_get_attribute (addr, "label");
+ g_assert (label == NULL);
+
+ g_object_unref (conn);
+}
+
+static void
+test_setting_ip4_config_address_data (void)
+{
+ NMSettingIPConfig *s_ip4;
+ NMIPAddress *addr;
+ GPtrArray *addrs;
+ NMConnection *conn;
+ GVariant *dict, *setting_dict, *value;
+ GError *error = NULL;
+
+ s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new ();
+ g_object_set (G_OBJECT (s_ip4),
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
+ NULL);
+
+ /* addr 1 */
+ addr = nm_ip_address_new (AF_INET, "1.2.3.4", 24, &error);
+ g_assert_no_error (error);
+ nm_ip_address_set_attribute (addr, "one", g_variant_new_string ("foo"));
+ nm_ip_address_set_attribute (addr, "two", g_variant_new_int32 (42));
+
+ nm_setting_ip_config_add_address (s_ip4, addr);
+ nm_ip_address_unref (addr);
+ nmtst_assert_setting_verifies (NM_SETTING (s_ip4));
+
+ /* addr 2 */
+ addr = nm_ip_address_new (AF_INET, "2.3.4.5", 24, &error);
+ g_assert_no_error (error);
+
+ nm_setting_ip_config_add_address (s_ip4, addr);
+ nm_ip_address_unref (addr);
+ nmtst_assert_setting_verifies (NM_SETTING (s_ip4));
+
+ /* The client-side D-Bus serialization should include the attributes in
+ * "address-data", and should not have an "addresses" property.
+ */
+ conn = nmtst_create_minimal_connection ("address-data test", NULL, NM_SETTING_WIRED_SETTING_NAME, NULL);
+ nm_connection_add_setting (conn, NM_SETTING (s_ip4));
+ dict = nm_connection_to_dbus (conn, NM_CONNECTION_SERIALIZE_ALL);
+
+ setting_dict = g_variant_lookup_value (dict, NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_VARIANT_TYPE_SETTING);
+ g_assert (setting_dict != NULL);
+
+ value = g_variant_lookup_value (setting_dict, "addresses", NULL);
+ g_assert (value == NULL);
+
+ value = g_variant_lookup_value (setting_dict, "address-data", G_VARIANT_TYPE ("aa{sv}"));
+ addrs = nm_utils_ip_addresses_from_variant (value, AF_INET);
+ g_variant_unref (value);
+ g_assert (addrs != NULL);
+ g_assert_cmpint (addrs->len, ==, 2);
+
+ addr = addrs->pdata[0];
+ g_assert_cmpstr (nm_ip_address_get_address (addr), ==, "1.2.3.4");
+ value = nm_ip_address_get_attribute (addr, "one");
+ g_assert (value != NULL);
+ g_assert_cmpstr (g_variant_get_string (value, NULL), ==, "foo");
+ value = nm_ip_address_get_attribute (addr, "two");
+ g_assert (value != NULL);
+ g_assert_cmpint (g_variant_get_int32 (value), ==, 42);
+
+ g_ptr_array_unref (addrs);
+ g_variant_unref (setting_dict);
+ g_variant_unref (dict);
+
+ /* The daemon-side serialization should include both 'addresses' and 'address-data' */
+ _nm_utils_is_manager_process = TRUE;
+ dict = nm_connection_to_dbus (conn, NM_CONNECTION_SERIALIZE_ALL);
+ _nm_utils_is_manager_process = FALSE;
+
+ setting_dict = g_variant_lookup_value (dict, NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_VARIANT_TYPE_SETTING);
+ g_assert (setting_dict != NULL);
+
+ value = g_variant_lookup_value (setting_dict, "addresses", G_VARIANT_TYPE ("aau"));
+ g_assert (value != NULL);
+ g_variant_unref (value);
+
+ value = g_variant_lookup_value (setting_dict, "address-data", G_VARIANT_TYPE ("aa{sv}"));
+ g_assert (value != NULL);
+ g_variant_unref (value);
+
+ g_variant_unref (setting_dict);
+ g_object_unref (conn);
+
+ /* When we reserialize that dictionary as a client, 'address-data' will be preferred. */
+ conn = nm_simple_connection_new_from_dbus (dict, &error);
+ g_assert_no_error (error);
+
+ s_ip4 = nm_connection_get_setting_ip4_config (conn);
+
+ addr = nm_setting_ip_config_get_address (s_ip4, 0);
+ g_assert_cmpstr (nm_ip_address_get_address (addr), ==, "1.2.3.4");
+ value = nm_ip_address_get_attribute (addr, "one");
+ g_assert (value != NULL);
+ g_assert_cmpstr (g_variant_get_string (value, NULL), ==, "foo");
+ value = nm_ip_address_get_attribute (addr, "two");
+ g_assert (value != NULL);
+ g_assert_cmpint (g_variant_get_int32 (value), ==, 42);
+
+ /* But on the server side, 'addresses' will have precedence. */
+ _nm_utils_is_manager_process = TRUE;
+ conn = nm_simple_connection_new_from_dbus (dict, &error);
+ _nm_utils_is_manager_process = FALSE;
+ g_assert_no_error (error);
+ g_variant_unref (dict);
+
+ s_ip4 = nm_connection_get_setting_ip4_config (conn);
+
+ addr = nm_setting_ip_config_get_address (s_ip4, 0);
+ g_assert_cmpstr (nm_ip_address_get_address (addr), ==, "1.2.3.4");
+ value = nm_ip_address_get_attribute (addr, "one");
+ g_assert (value == NULL);
+ value = nm_ip_address_get_attribute (addr, "two");
+ g_assert (value == NULL);
+
+ g_object_unref (conn);
+}
+
+static void
+test_setting_gsm_apn_spaces (void)
+{
+ NMSettingGsm *s_gsm;
+ const char *tmp;
+
+ s_gsm = (NMSettingGsm *) nm_setting_gsm_new ();
+ ASSERT (s_gsm != NULL,
+ "gsm-apn-spaces",
+ "error creating GSM setting");
+
+ /* Trailing space */
+ g_object_set (s_gsm, NM_SETTING_GSM_APN, "foobar ", NULL);
+ tmp = nm_setting_gsm_get_apn (s_gsm);
+ ASSERT (tmp != NULL,
+ "gsm-apn-spaces", "empty APN");
+ ASSERT (strcmp (tmp, "foobar") == 0,
+ "gsm-apn-spaces", "unexpected APN");
+
+ /* Leading space */
+ g_object_set (s_gsm, NM_SETTING_GSM_APN, " foobar", NULL);
+ tmp = nm_setting_gsm_get_apn (s_gsm);
+ ASSERT (tmp != NULL,
+ "gsm-apn-spaces", "empty APN");
+ ASSERT (strcmp (tmp, "foobar") == 0,
+ "gsm-apn-spaces", "unexpected APN");
+}
+
+static void
+test_setting_gsm_apn_bad_chars (void)
+{
+ NMSettingGsm *s_gsm;
+
+ s_gsm = (NMSettingGsm *) nm_setting_gsm_new ();
+ ASSERT (s_gsm != NULL,
+ "gsm-apn-bad-chars",
+ "error creating GSM setting");
+
+ g_object_set (s_gsm, NM_SETTING_GSM_NUMBER, "*99#", NULL);
+
+ /* Make sure a valid APN works */
+ g_object_set (s_gsm, NM_SETTING_GSM_APN, "foobar123.-baz", NULL);
+ ASSERT (nm_setting_verify (NM_SETTING (s_gsm), NULL, NULL) == TRUE,
+ "gsm-apn-bad-chars", "unexpectedly invalid GSM setting");
+
+ /* Random invalid chars */
+ g_object_set (s_gsm, NM_SETTING_GSM_APN, "@#%$@#%@#%", NULL);
+ ASSERT (nm_setting_verify (NM_SETTING (s_gsm), NULL, NULL) == FALSE,
+ "gsm-apn-bad-chars", "unexpectedly valid GSM setting");
+
+ /* Spaces */
+ g_object_set (s_gsm, NM_SETTING_GSM_APN, "foobar baz", NULL);
+ ASSERT (nm_setting_verify (NM_SETTING (s_gsm), NULL, NULL) == FALSE,
+ "gsm-apn-bad-chars", "unexpectedly valid GSM setting");
+
+ /* 0 characters long */
+ g_object_set (s_gsm, NM_SETTING_GSM_APN, "", NULL);
+ ASSERT (nm_setting_verify (NM_SETTING (s_gsm), NULL, NULL) == FALSE,
+ "gsm-apn-bad-chars", "unexpectedly valid GSM setting");
+
+ /* 65-character long */
+ g_object_set (s_gsm, NM_SETTING_GSM_APN, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkl1", NULL);
+ ASSERT (nm_setting_verify (NM_SETTING (s_gsm), NULL, NULL) == FALSE,
+ "gsm-apn-bad-chars", "unexpectedly valid GSM setting");
+}
+
+static void
+test_setting_gsm_apn_underscore (void)
+{
+ NMSettingGsm *s_gsm;
+
+ s_gsm = (NMSettingGsm *) nm_setting_gsm_new ();
+ g_assert (s_gsm);
+
+ g_object_set (s_gsm, NM_SETTING_GSM_NUMBER, "*99#", NULL);
+
+ /* 65-character long */
+ g_object_set (s_gsm, NM_SETTING_GSM_APN, "foobar_baz", NULL);
+ nmtst_assert_setting_verifies (NM_SETTING (s_gsm));
+}
+
+static void
+test_setting_gsm_without_number (void)
+{
+ NMSettingGsm *s_gsm;
+
+ s_gsm = (NMSettingGsm *) nm_setting_gsm_new ();
+ g_assert (s_gsm);
+
+ g_object_set (s_gsm, NM_SETTING_GSM_NUMBER, NULL, NULL);
+ nmtst_assert_setting_verifies (NM_SETTING (s_gsm));
+
+ g_object_set (s_gsm, NM_SETTING_GSM_NUMBER, "", NULL);
+ nmtst_assert_setting_verify_fails (NM_SETTING (s_gsm), NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY);
+}
+
+static NMSettingWirelessSecurity *
+make_test_wsec_setting (const char *detail)
+{
+ NMSettingWirelessSecurity *s_wsec;
+
+ s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
+ ASSERT (s_wsec != NULL, detail, "error creating setting");
+
+ g_object_set (s_wsec,
+ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-psk",
+ NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME, "foobarbaz",
+ NM_SETTING_WIRELESS_SECURITY_PSK, "random psk",
+ NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS, NM_SETTING_SECRET_FLAG_NOT_SAVED,
+ NM_SETTING_WIRELESS_SECURITY_WEP_KEY0, "aaaaaaaaaa",
+ NULL);
+
+ return s_wsec;
+}
+
+#define ASSERT_CONTAINS(vardict, key, test_name, msg) \
+ { \
+ GVariant *value; \
+ value = g_variant_lookup_value (vardict, key, NULL); \
+ ASSERT (value != NULL, test_name, msg); \
+ g_variant_unref (value); \
+ }
+
+#define ASSERT_NOT_CONTAINS(vardict, key, test_name, msg) \
+ { \
+ GVariant *value; \
+ value = g_variant_lookup_value (vardict, key, NULL); \
+ ASSERT (value == NULL, test_name, msg); \
+ }
+
+static void
+test_setting_to_dbus_all (void)
+{
+ NMSettingWirelessSecurity *s_wsec;
+ GVariant *dict;
+
+ s_wsec = make_test_wsec_setting ("setting-to-dbus-all");
+
+ dict = _nm_setting_to_dbus (NM_SETTING (s_wsec), NULL, NM_CONNECTION_SERIALIZE_ALL);
+
+ /* Make sure all keys are there */
+ ASSERT_CONTAINS (dict, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT,
+ "setting-to-dbus-all", "unexpectedly missing " NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
+ ASSERT_CONTAINS (dict, NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME,
+ "setting-to-dbus-all", "unexpectedly missing " NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME);
+ ASSERT_CONTAINS (dict, NM_SETTING_WIRELESS_SECURITY_PSK,
+ "setting-to-dbus-all", "unexpectedly missing " NM_SETTING_WIRELESS_SECURITY_PSK);
+ ASSERT_CONTAINS (dict, NM_SETTING_WIRELESS_SECURITY_WEP_KEY0,
+ "setting-to-dbus-all", "unexpectedly missing " NM_SETTING_WIRELESS_SECURITY_WEP_KEY0);
+
+ g_variant_unref (dict);
+ g_object_unref (s_wsec);
+}
+
+static void
+test_setting_to_dbus_no_secrets (void)
+{
+ NMSettingWirelessSecurity *s_wsec;
+ GVariant *dict;
+
+ s_wsec = make_test_wsec_setting ("setting-to-dbus-no-secrets");
+
+ dict = _nm_setting_to_dbus (NM_SETTING (s_wsec), NULL, NM_CONNECTION_SERIALIZE_NO_SECRETS);
+
+ /* Make sure non-secret keys are there */
+ ASSERT_CONTAINS (dict, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT,
+ "setting-to-dbus-no-secrets", "unexpectedly missing " NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
+ ASSERT_CONTAINS (dict, NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME,
+ "setting-to-dbus-no-secrets", "unexpectedly missing " NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME);
+
+ /* Make sure secrets are not there */
+ ASSERT_NOT_CONTAINS (dict, NM_SETTING_WIRELESS_SECURITY_PSK,
+ "setting-to-dbus-no-secrets", "unexpectedly present " NM_SETTING_WIRELESS_SECURITY_PSK);
+ ASSERT_NOT_CONTAINS (dict, NM_SETTING_WIRELESS_SECURITY_WEP_KEY0,
+ "setting-to-dbus-no-secrets", "unexpectedly present " NM_SETTING_WIRELESS_SECURITY_WEP_KEY0);
+
+ g_variant_unref (dict);
+ g_object_unref (s_wsec);
+}
+
+static void
+test_setting_to_dbus_only_secrets (void)
+{
+ NMSettingWirelessSecurity *s_wsec;
+ GVariant *dict;
+
+ s_wsec = make_test_wsec_setting ("setting-to-dbus-only-secrets");
+
+ dict = _nm_setting_to_dbus (NM_SETTING (s_wsec), NULL, NM_CONNECTION_SERIALIZE_ONLY_SECRETS);
+
+ /* Make sure non-secret keys are not there */
+ ASSERT_NOT_CONTAINS (dict, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT,
+ "setting-to-dbus-only-secrets", "unexpectedly present " NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
+ ASSERT_NOT_CONTAINS (dict, NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME,
+ "setting-to-dbus-only-secrets", "unexpectedly present " NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME);
+
+ /* Make sure secrets are there */
+ ASSERT_CONTAINS (dict, NM_SETTING_WIRELESS_SECURITY_PSK,
+ "setting-to-dbus-only-secrets", "unexpectedly missing " NM_SETTING_WIRELESS_SECURITY_PSK);
+ ASSERT_CONTAINS (dict, NM_SETTING_WIRELESS_SECURITY_WEP_KEY0,
+ "setting-to-dbus-only-secrets", "unexpectedly missing " NM_SETTING_WIRELESS_SECURITY_WEP_KEY0);
+
+ g_variant_unref (dict);
+ g_object_unref (s_wsec);
+}
+
+static void
+test_setting_to_dbus_transform (void)
+{
+ NMSetting *s_wired;
+ GVariant *dict, *val;
+ const char *test_mac_address = "11:22:33:44:55:66";
+ const guint8 *dbus_mac_address;
+ guint8 cmp_mac_address[ETH_ALEN];
+ gsize len;
+
+ s_wired = nm_setting_wired_new ();
+ g_object_set (s_wired,
+ NM_SETTING_WIRED_MAC_ADDRESS, test_mac_address,
+ NULL);
+
+ g_assert_cmpstr (nm_setting_wired_get_mac_address (NM_SETTING_WIRED (s_wired)), ==, test_mac_address);
+
+ dict = _nm_setting_to_dbus (s_wired, NULL, NM_CONNECTION_SERIALIZE_ALL);
+ g_assert (dict != NULL);
+
+ val = g_variant_lookup_value (dict, NM_SETTING_WIRED_MAC_ADDRESS, G_VARIANT_TYPE_BYTESTRING);
+ g_assert (val != NULL);
+
+ dbus_mac_address = g_variant_get_fixed_array (val, &len, 1);
+ g_assert_cmpint (len, ==, ETH_ALEN);
+
+ nm_utils_hwaddr_aton (test_mac_address, cmp_mac_address, ETH_ALEN);
+ g_assert (memcmp (dbus_mac_address, cmp_mac_address, ETH_ALEN) == 0);
+
+ g_variant_unref (val);
+ g_variant_unref (dict);
+ g_object_unref (s_wired);
+}
+
+static void
+test_setting_to_dbus_enum (void)
+{
+ NMSetting *s_ip6, *s_wsec, *s_serial;
+ GVariant *dict, *val;
+
+ /* enum */
+ s_ip6 = nm_setting_ip6_config_new ();
+ g_object_set (s_ip6,
+ NM_SETTING_IP6_CONFIG_IP6_PRIVACY, NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR,
+ NULL);
+
+ dict = _nm_setting_to_dbus (s_ip6, NULL, NM_CONNECTION_SERIALIZE_ALL);
+ g_assert (dict != NULL);
+
+ val = g_variant_lookup_value (dict, NM_SETTING_IP6_CONFIG_IP6_PRIVACY, G_VARIANT_TYPE_INT32);
+ g_assert (val != NULL);
+ g_assert_cmpint (g_variant_get_int32 (val), ==, NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR);
+ g_variant_unref (val);
+
+ g_variant_unref (dict);
+ g_object_unref (s_ip6);
+
+ /* flags (and a transformed enum) */
+ s_wsec = nm_setting_wireless_security_new ();
+ g_object_set (s_wsec,
+ NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE, NM_WEP_KEY_TYPE_KEY,
+ NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS, (NM_SETTING_SECRET_FLAG_AGENT_OWNED |
+ NM_SETTING_SECRET_FLAG_NOT_SAVED),
+ NULL);
+
+ dict = _nm_setting_to_dbus (s_wsec, NULL, NM_CONNECTION_SERIALIZE_ALL);
+ g_assert (dict != NULL);
+
+ val = g_variant_lookup_value (dict, NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE, G_VARIANT_TYPE_UINT32);
+ g_assert (val != NULL);
+ g_assert_cmpint (g_variant_get_uint32 (val), ==, NM_WEP_KEY_TYPE_KEY);
+ g_variant_unref (val);
+
+ val = g_variant_lookup_value (dict, NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS, G_VARIANT_TYPE_UINT32);
+ g_assert (val != NULL);
+ g_assert_cmpint (g_variant_get_uint32 (val), ==, (NM_SETTING_SECRET_FLAG_AGENT_OWNED |
+ NM_SETTING_SECRET_FLAG_NOT_SAVED));
+ g_variant_unref (val);
+
+ g_variant_unref (dict);
+ g_object_unref (s_wsec);
+
+ /* another transformed enum */
+ s_serial = nm_setting_serial_new ();
+ g_object_set (s_serial,
+ NM_SETTING_SERIAL_PARITY, NM_SETTING_SERIAL_PARITY_ODD,
+ NULL);
+
+ dict = _nm_setting_to_dbus (s_serial, NULL, NM_CONNECTION_SERIALIZE_ALL);
+ g_assert (dict != NULL);
+
+ val = g_variant_lookup_value (dict, NM_SETTING_SERIAL_PARITY, G_VARIANT_TYPE_BYTE);
+ g_assert (val != NULL);
+ g_assert_cmpint (g_variant_get_byte (val), ==, 'o');
+ g_variant_unref (val);
+
+ g_variant_unref (dict);
+ g_object_unref (s_serial);
+}
+
+static void
+test_connection_to_dbus_setting_name (void)
+{
+ NMConnection *connection;
+ NMSettingWirelessSecurity *s_wsec;
+ GVariant *dict;
+
+ connection = nm_simple_connection_new ();
+ s_wsec = make_test_wsec_setting ("connection-to-dbus-setting-name");
+ nm_connection_add_setting (connection, NM_SETTING (s_wsec));
+
+ dict = nm_connection_to_dbus (connection, NM_CONNECTION_SERIALIZE_ALL);
+
+ /* Make sure the keys of the first level dict are setting names, not
+ * the GType name of the setting objects.
+ */
+ ASSERT_CONTAINS (dict, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ "connection-to-dbus-setting-name", "unexpectedly missing " NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
+
+ g_variant_unref (dict);
+ g_object_unref (connection);
+}
+
+static void
+test_connection_to_dbus_deprecated_props (void)
+{
+ NMConnection *connection;
+ NMSetting *s_wireless;
+ GBytes *ssid;
+ NMSettingWirelessSecurity *s_wsec;
+ GVariant *dict, *wireless_dict, *sec_val;
+
+ connection = nmtst_create_minimal_connection ("test-connection-to-dbus-deprecated-props",
+ NULL,
+ NM_SETTING_WIRELESS_SETTING_NAME,
+ NULL);
+
+ s_wireless = nm_setting_wireless_new ();
+ ssid = g_bytes_new ("1234567", 7);
+ g_object_set (s_wireless,
+ NM_SETTING_WIRELESS_SSID, ssid,
+ NULL);
+ g_bytes_unref (ssid);
+ nm_connection_add_setting (connection, s_wireless);
+
+ /* Serialization should not have an 802-11-wireless.security property */
+ dict = nm_connection_to_dbus (connection, NM_CONNECTION_SERIALIZE_ALL);
+ g_assert (dict != NULL);
+
+ wireless_dict = g_variant_lookup_value (dict, NM_SETTING_WIRELESS_SETTING_NAME, NM_VARIANT_TYPE_SETTING);
+ g_assert (wireless_dict != NULL);
+
+ sec_val = g_variant_lookup_value (wireless_dict, "security", NULL);
+ g_assert (sec_val == NULL);
+
+ g_variant_unref (wireless_dict);
+ g_variant_unref (dict);
+
+ /* Now add an NMSettingWirelessSecurity and try again */
+ s_wsec = make_test_wsec_setting ("test-connection-to-dbus-deprecated-props");
+ nm_connection_add_setting (connection, NM_SETTING (s_wsec));
+
+ dict = nm_connection_to_dbus (connection, NM_CONNECTION_SERIALIZE_ALL);
+ g_assert (dict != NULL);
+
+ wireless_dict = g_variant_lookup_value (dict, NM_SETTING_WIRELESS_SETTING_NAME, NM_VARIANT_TYPE_SETTING);
+ g_assert (wireless_dict != NULL);
+
+ sec_val = g_variant_lookup_value (wireless_dict, "security", NULL);
+ g_assert (g_variant_is_of_type (sec_val, G_VARIANT_TYPE_STRING));
+ g_assert_cmpstr (g_variant_get_string (sec_val, NULL), ==, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
+
+ g_variant_unref (sec_val);
+ g_variant_unref (wireless_dict);
+ g_variant_unref (dict);
+ g_object_unref (connection);
+}
+
+static void
+test_setting_new_from_dbus (void)
+{
+ NMSettingWirelessSecurity *s_wsec;
+ GVariant *dict;
+
+ s_wsec = make_test_wsec_setting ("setting-new-from-dbus");
+ dict = _nm_setting_to_dbus (NM_SETTING (s_wsec), NULL, NM_CONNECTION_SERIALIZE_ALL);
+ g_object_unref (s_wsec);
+
+ s_wsec = (NMSettingWirelessSecurity *) _nm_setting_new_from_dbus (NM_TYPE_SETTING_WIRELESS_SECURITY, dict, NULL, NULL);
+ g_variant_unref (dict);
+
+ 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 void
+test_setting_new_from_dbus_transform (void)
+{
+ NMSetting *s_wired;
+ GVariant *dict;
+ GVariantBuilder builder;
+ const char *test_mac_address = "11:22:33:44:55:66";
+ guint8 dbus_mac_address[ETH_ALEN];
+ GError *error = NULL;
+
+ nm_utils_hwaddr_aton (test_mac_address, dbus_mac_address, ETH_ALEN);
+
+ g_variant_builder_init (&builder, NM_VARIANT_TYPE_SETTING);
+ g_variant_builder_add (&builder, "{sv}",
+ NM_SETTING_WIRED_MAC_ADDRESS,
+ g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
+ dbus_mac_address, ETH_ALEN, 1));
+ dict = g_variant_builder_end (&builder);
+
+ s_wired = _nm_setting_new_from_dbus (NM_TYPE_SETTING_WIRED, dict, NULL, &error);
+ g_assert_no_error (error);
+
+ g_assert_cmpstr (nm_setting_wired_get_mac_address (NM_SETTING_WIRED (s_wired)), ==, test_mac_address);
+
+ g_variant_unref (dict);
+ g_object_unref (s_wired);
+}
+
+static void
+test_setting_new_from_dbus_enum (void)
+{
+ NMSettingIP6Config *s_ip6;
+ NMSettingWirelessSecurity *s_wsec;
+ NMSettingSerial *s_serial;
+ GVariant *dict;
+ GVariantBuilder builder;
+ GError *error = NULL;
+
+ /* enum */
+ g_variant_builder_init (&builder, NM_VARIANT_TYPE_SETTING);
+ g_variant_builder_add (&builder, "{sv}",
+ NM_SETTING_IP6_CONFIG_IP6_PRIVACY,
+ g_variant_new_int32 (NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR));
+ dict = g_variant_builder_end (&builder);
+
+ s_ip6 = (NMSettingIP6Config *) _nm_setting_new_from_dbus (NM_TYPE_SETTING_IP6_CONFIG, dict, NULL, &error);
+ g_assert_no_error (error);
+
+ g_assert_cmpint (nm_setting_ip6_config_get_ip6_privacy (s_ip6), ==, NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR);
+
+ g_variant_unref (dict);
+ g_object_unref (s_ip6);
+
+ /* flags (and a transformed enum) */
+ g_variant_builder_init (&builder, NM_VARIANT_TYPE_SETTING);
+ g_variant_builder_add (&builder, "{sv}",
+ NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE,
+ g_variant_new_uint32 (NM_WEP_KEY_TYPE_KEY));
+ g_variant_builder_add (&builder, "{sv}",
+ NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS,
+ g_variant_new_uint32 (NM_SETTING_SECRET_FLAG_AGENT_OWNED |
+ NM_SETTING_SECRET_FLAG_NOT_SAVED));
+ dict = g_variant_builder_end (&builder);
+
+ s_wsec = (NMSettingWirelessSecurity *) _nm_setting_new_from_dbus (NM_TYPE_SETTING_WIRELESS_SECURITY, dict, NULL, &error);
+ g_assert_no_error (error);
+
+ g_assert_cmpint (nm_setting_wireless_security_get_wep_key_type (s_wsec), ==, NM_WEP_KEY_TYPE_KEY);
+ g_assert_cmpint (nm_setting_wireless_security_get_wep_key_flags (s_wsec), ==, (NM_SETTING_SECRET_FLAG_AGENT_OWNED |
+ NM_SETTING_SECRET_FLAG_NOT_SAVED));
+
+ g_variant_unref (dict);
+ g_object_unref (s_wsec);
+
+ /* another transformed enum */
+ g_variant_builder_init (&builder, NM_VARIANT_TYPE_SETTING);
+ g_variant_builder_add (&builder, "{sv}",
+ NM_SETTING_SERIAL_PARITY,
+ g_variant_new_byte ('E'));
+ dict = g_variant_builder_end (&builder);
+
+ s_serial = (NMSettingSerial *) _nm_setting_new_from_dbus (NM_TYPE_SETTING_SERIAL, dict, NULL, &error);
+ g_assert_no_error (error);
+
+ g_assert_cmpint (nm_setting_serial_get_parity (s_serial), ==, NM_SETTING_SERIAL_PARITY_EVEN);
+
+ g_variant_unref (dict);
+ g_object_unref (s_serial);
+}
+
+static NMConnection *
+new_test_connection (void)
+{
+ NMConnection *connection;
+ NMSetting *setting;
+ char *uuid;
+ guint64 timestamp = time (NULL);
+
+ connection = nm_simple_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_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
+ NM_SETTING_IP_CONFIG_DHCP_HOSTNAME, "eyeofthetiger",
+ NULL);
+ nm_connection_add_setting (connection, setting);
+
+ return connection;
+}
+
+static GVariant *
+new_connection_dict (char **out_uuid,
+ const char **out_expected_id,
+ const char **out_expected_ip6_method)
+{
+ GVariantBuilder conn_builder, setting_builder;
+
+ g_variant_builder_init (&conn_builder, NM_VARIANT_TYPE_CONNECTION);
+
+ *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 */
+ g_variant_builder_init (&setting_builder, NM_VARIANT_TYPE_SETTING);
+ g_variant_builder_add (&setting_builder, "{sv}",
+ NM_SETTING_NAME,
+ g_variant_new_string (NM_SETTING_CONNECTION_SETTING_NAME));
+ g_variant_builder_add (&setting_builder, "{sv}",
+ NM_SETTING_CONNECTION_ID,
+ g_variant_new_string (*out_expected_id));
+ g_variant_builder_add (&setting_builder, "{sv}",
+ NM_SETTING_CONNECTION_UUID,
+ g_variant_new_string (*out_uuid));
+ g_variant_builder_add (&setting_builder, "{sv}",
+ NM_SETTING_CONNECTION_TYPE,
+ g_variant_new_string (NM_SETTING_WIRED_SETTING_NAME));
+
+ g_variant_builder_add (&conn_builder, "{sa{sv}}",
+ NM_SETTING_CONNECTION_SETTING_NAME,
+ &setting_builder);
+
+ /* Wired setting */
+ g_variant_builder_init (&setting_builder, NM_VARIANT_TYPE_SETTING);
+ g_variant_builder_add (&conn_builder, "{sa{sv}}",
+ NM_SETTING_WIRED_SETTING_NAME,
+ &setting_builder);
+
+ /* IP6 */
+ g_variant_builder_init (&setting_builder, NM_VARIANT_TYPE_SETTING);
+ g_variant_builder_add (&setting_builder, "{sv}",
+ NM_SETTING_IP_CONFIG_METHOD,
+ g_variant_new_string (*out_expected_ip6_method));
+ g_variant_builder_add (&conn_builder, "{sa{sv}}",
+ NM_SETTING_IP6_CONFIG_SETTING_NAME,
+ &setting_builder);
+
+ return g_variant_builder_end (&conn_builder);
+}
+
+static void
+test_connection_replace_settings (void)
+{
+ NMConnection *connection;
+ GVariant *new_settings;
+ GError *error = NULL;
+ gboolean success;
+ NMSettingConnection *s_con;
+ NMSettingIPConfig *s_ip6;
+ char *uuid = NULL;
+ const char *expected_id = NULL, *expected_method = NULL;
+
+ connection = new_test_connection ();
+
+ new_settings = new_connection_dict (&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_ip_config_get_method (s_ip6), ==, expected_method);
+
+ g_free (uuid);
+ g_variant_unref (new_settings);
+ g_object_unref (connection);
+}
+
+static void
+test_connection_replace_settings_from_connection (void)
+{
+ NMConnection *connection, *replacement;
+ NMSettingConnection *s_con;
+ NMSetting *setting;
+ GBytes *ssid;
+ char *uuid = NULL;
+ const char *expected_id = "Awesome connection";
+
+ connection = new_test_connection ();
+ g_assert (connection);
+
+ replacement = nm_simple_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_bytes_new ("1234567", 7);
+ g_object_set (setting,
+ NM_SETTING_WIRELESS_SSID, ssid,
+ NM_SETTING_WIRELESS_MODE, "infrastructure",
+ NULL);
+ g_bytes_unref (ssid);
+ nm_connection_add_setting (replacement, setting);
+
+ /* Replace settings and test */
+ nm_connection_replace_settings_from_connection (connection, replacement);
+
+ 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_replace_settings_bad (void)
+{
+ NMConnection *connection, *new_connection;
+ GVariant *new_settings;
+ GVariantBuilder builder, setting_builder;
+ GError *error = NULL;
+ gboolean success;
+ NMSettingConnection *s_con;
+
+ new_connection = new_test_connection ();
+ g_assert (nm_connection_verify (new_connection, NULL));
+ s_con = nm_connection_get_setting_connection (new_connection);
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_UUID, NULL,
+ NM_SETTING_CONNECTION_ID, "bad-connection",
+ NULL);
+ g_assert (!nm_connection_verify (new_connection, NULL));
+
+ /* nm_connection_replace_settings_from_connection() should succeed */
+ connection = new_test_connection ();
+ nm_connection_replace_settings_from_connection (connection, new_connection);
+ g_assert_cmpstr (nm_connection_get_id (connection), ==, "bad-connection");
+ g_assert (!nm_connection_verify (connection, NULL));
+ g_object_unref (connection);
+
+ /* nm_connection_replace_settings() should succeed */
+ new_settings = nm_connection_to_dbus (new_connection, NM_CONNECTION_SERIALIZE_ALL);
+ g_assert (new_settings != NULL);
+
+ connection = new_test_connection ();
+ success = nm_connection_replace_settings (connection, new_settings, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ g_assert_cmpstr (nm_connection_get_id (connection), ==, "bad-connection");
+ g_assert (!nm_connection_verify (connection, NULL));
+ g_object_unref (connection);
+ g_variant_unref (new_settings);
+
+ /* But given an invalid dict, it should fail */
+ g_variant_builder_init (&builder, NM_VARIANT_TYPE_CONNECTION);
+ g_variant_builder_init (&setting_builder, NM_VARIANT_TYPE_SETTING);
+ g_variant_builder_add (&builder, "{sa{sv}}",
+ "ip-over-avian-carrier",
+ &setting_builder);
+ new_settings = g_variant_builder_end (&builder);
+
+ connection = new_test_connection ();
+ success = nm_connection_replace_settings (connection, new_settings, &error);
+ g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_SETTING);
+ g_assert (!success);
+
+ g_assert (nm_connection_verify (connection, NULL));
+ g_object_unref (connection);
+
+ g_variant_unref (new_settings);
+ g_object_unref (new_connection);
+}
+
+static void
+test_connection_new_from_dbus (void)
+{
+ NMConnection *connection;
+ GVariant *new_settings;
+ GError *error = NULL;
+ NMSettingConnection *s_con;
+ NMSettingIPConfig *s_ip6;
+ char *uuid = NULL;
+ const char *expected_id = NULL, *expected_method = NULL;
+
+ new_settings = new_connection_dict (&uuid, &expected_id, &expected_method);
+ g_assert (new_settings);
+
+ /* Replace settings and test */
+ connection = nm_simple_connection_new_from_dbus (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_ip_config_get_method (s_ip6), ==, expected_method);
+
+ g_free (uuid);
+ g_variant_unref (new_settings);
+ g_object_unref (connection);
+}
+
+static void
+check_permission (NMSettingConnection *s_con,
+ guint32 idx,
+ const char *expected_uname,
+ const char *tag)
+{
+ gboolean success;
+ const char *ptype = NULL, *pitem = NULL, *detail = NULL;
+
+ success = nm_setting_connection_get_permission (s_con, 0, &ptype, &pitem, &detail);
+ ASSERT (success == TRUE, tag, "unexpected failure getting added permission");
+
+ /* Permission type */
+ ASSERT (ptype != NULL, tag, "unexpected failure getting permission type");
+ ASSERT (strcmp (ptype, "user") == 0, tag, "retrieved unexpected permission type");
+
+ /* Permission item */
+ ASSERT (pitem != NULL, tag, "unexpected failure getting permission item");
+ ASSERT (strcmp (pitem, expected_uname) == 0, tag, "retrieved unexpected permission item");
+
+ ASSERT (detail == NULL, tag, "unexpected success getting permission detail");
+}
+
+#define TEST_UNAME "asdfasfasdf"
+
+static void
+test_setting_connection_permissions_helpers (void)
+{
+ NMSettingConnection *s_con;
+ gboolean success;
+ char buf[9] = { 0x61, 0x62, 0x63, 0xff, 0xfe, 0xfd, 0x23, 0x01, 0x00 };
+ char **perms;
+ const char *expected_perm = "user:" TEST_UNAME ":";
+
+ s_con = NM_SETTING_CONNECTION (nm_setting_connection_new ());
+
+ /* Ensure a bad [type] is rejected */
+ g_test_expect_message ("libnm", 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", 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", G_LOG_LEVEL_CRITICAL, "*uname*");
+ g_test_expect_message ("libnm", 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", G_LOG_LEVEL_CRITICAL, "*uname[0] != '\\0'*");
+ g_test_expect_message ("libnm", 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", G_LOG_LEVEL_CRITICAL, "*strchr (uname, ':')*");
+ g_test_expect_message ("libnm", 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", G_LOG_LEVEL_CRITICAL, "*g_utf8_validate (uname, -1, NULL)*");
+ g_test_expect_message ("libnm", 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", 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");
+
+ /* Ensure a valid call results in success */
+ success = nm_setting_connection_add_permission (s_con, "user", TEST_UNAME, NULL);
+ ASSERT (success == TRUE,
+ "setting-connection-permissions-helpers", "unexpected failure adding valid user permisson");
+
+ ASSERT (nm_setting_connection_get_num_permissions (s_con) == 1,
+ "setting-connection-permissions-helpers", "unexpected failure getting number of permissions");
+
+ check_permission (s_con, 0, TEST_UNAME, "setting-connection-permissions-helpers");
+
+ /* Check the actual GObject property just to be paranoid */
+ g_object_get (G_OBJECT (s_con), NM_SETTING_CONNECTION_PERMISSIONS, &perms, NULL);
+ ASSERT (perms != NULL,
+ "setting-connection-permissions-helpers", "unexpected failure getting permissions");
+ ASSERT (g_strv_length (perms) == 1,
+ "setting-connection-permissions-helpers", "unexpected failure getting number of permissions");
+ ASSERT (strcmp (perms[0], expected_perm) == 0,
+ "setting-connection-permissions-helpers", "unexpected permission property data");
+ g_strfreev (perms);
+
+ /* Now remove that permission and ensure we have 0 permissions */
+ nm_setting_connection_remove_permission (s_con, 0);
+ ASSERT (nm_setting_connection_get_num_permissions (s_con) == 0,
+ "setting-connection-permissions-helpers", "unexpected failure removing permission");
+
+ g_object_unref (s_con);
+}
+
+static void
+add_permission_property (NMSettingConnection *s_con,
+ const char *ptype,
+ const char *pitem,
+ int pitem_len,
+ const char *detail)
+{
+ GString *str;
+ char *perms[2];
+
+ str = g_string_sized_new (50);
+ if (ptype)
+ g_string_append (str, ptype);
+ g_string_append_c (str, ':');
+
+ if (pitem) {
+ if (pitem_len >= 0)
+ g_string_append_len (str, pitem, pitem_len);
+ else
+ g_string_append (str, pitem);
+ }
+
+ g_string_append_c (str, ':');
+
+ if (detail)
+ g_string_append (str, detail);
+
+ perms[0] = str->str;
+ perms[1] = NULL;
+ g_object_set (G_OBJECT (s_con), NM_SETTING_CONNECTION_PERMISSIONS, perms, NULL);
+
+ g_string_free (str, TRUE);
+}
+
+static void
+test_setting_connection_permissions_property (void)
+{
+ NMSettingConnection *s_con;
+ gboolean success;
+ char buf[9] = { 0x61, 0x62, 0x63, 0xff, 0xfe, 0xfd, 0x23, 0x01, 0x00 };
+
+ s_con = NM_SETTING_CONNECTION (nm_setting_connection_new ());
+
+ /* Ensure a bad [type] is rejected */
+ g_test_expect_message ("libnm", 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", 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", 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", 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", 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", 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", 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", 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");
+
+ /* Ensure a valid call results in success */
+ success = nm_setting_connection_add_permission (s_con, "user", TEST_UNAME, NULL);
+ ASSERT (nm_setting_connection_get_num_permissions (s_con) == 1,
+ "setting-connection-permissions-property", "unexpected failure adding valid user permisson");
+
+ check_permission (s_con, 0, TEST_UNAME, "setting-connection-permissions-property");
+
+ /* Now remove that permission and ensure we have 0 permissions */
+ nm_setting_connection_remove_permission (s_con, 0);
+ ASSERT (nm_setting_connection_get_num_permissions (s_con) == 0,
+ "setting-connection-permissions-property", "unexpected failure removing permission");
+
+ g_object_unref (s_con);
+}
+
+static void
+test_connection_compare_same (void)
+{
+ NMConnection *a, *b;
+
+ a = new_test_connection ();
+ b = nm_simple_connection_new_clone (a);
+ 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_a (void)
+{
+ NMConnection *a, *b;
+ NMSettingConnection *s_con;
+
+ a = new_test_connection ();
+ b = nm_simple_connection_new_clone (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_a (void)
+{
+ NMConnection *a, *b;
+
+ a = new_test_connection ();
+ b = nm_simple_connection_new_clone (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_simple_connection_new_clone (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_simple_connection_new_clone (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 {
+ const char *key_name;
+ guint32 result;
+} DiffKey;
+
+typedef struct {
+ const char *name;
+ DiffKey keys[30];
+} DiffSetting;
+
+#define ARRAY_LEN(a) (sizeof (a) / sizeof (a[0]))
+
+static void
+ensure_diffs (GHashTable *diffs, const DiffSetting *check, gsize n_check)
+{
+ guint i;
+
+ g_assert (g_hash_table_size (diffs) == n_check);
+
+ /* Loop through the settings */
+ for (i = 0; i < n_check; i++) {
+ GHashTable *setting_hash;
+ guint z = 0;
+
+ setting_hash = g_hash_table_lookup (diffs, check[i].name);
+ g_assert (setting_hash);
+
+ /* Get the number of keys to check */
+ while (check[i].keys[z].key_name)
+ z++;
+ g_assert (g_hash_table_size (setting_hash) == z);
+
+ /* Now compare the actual keys */
+ for (z = 0; check[i].keys[z].key_name; z++) {
+ NMSettingDiffResult result;
+
+ result = GPOINTER_TO_UINT (g_hash_table_lookup (setting_hash, check[i].keys[z].key_name));
+ g_assert (result == check[i].keys[z].result);
+ }
+ }
+}
+
+static void
+test_connection_diff_a_only (void)
+{
+ NMConnection *connection;
+ GHashTable *out_diffs = NULL;
+ 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_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_AUTOCONNECT_PRIORITY, 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, {
+ { NM_SETTING_WIRED_PORT, NM_SETTING_DIFF_RESULT_IN_A },
+ { NM_SETTING_WIRED_SPEED, NM_SETTING_DIFF_RESULT_IN_A },
+ { NM_SETTING_WIRED_DUPLEX, NM_SETTING_DIFF_RESULT_IN_A },
+ { NM_SETTING_WIRED_AUTO_NEGOTIATE, NM_SETTING_DIFF_RESULT_IN_A },
+ { NM_SETTING_WIRED_MAC_ADDRESS, NM_SETTING_DIFF_RESULT_IN_A },
+ { NM_SETTING_WIRED_CLONED_MAC_ADDRESS, NM_SETTING_DIFF_RESULT_IN_A },
+ { NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST, NM_SETTING_DIFF_RESULT_IN_A },
+ { NM_SETTING_WIRED_MTU, NM_SETTING_DIFF_RESULT_IN_A },
+ { NM_SETTING_WIRED_S390_SUBCHANNELS, NM_SETTING_DIFF_RESULT_IN_A },
+ { NM_SETTING_WIRED_S390_NETTYPE, NM_SETTING_DIFF_RESULT_IN_A },
+ { NM_SETTING_WIRED_S390_OPTIONS, NM_SETTING_DIFF_RESULT_IN_A },
+ { NULL, NM_SETTING_DIFF_RESULT_UNKNOWN },
+ } },
+ { NM_SETTING_IP4_CONFIG_SETTING_NAME, {
+ { NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_DIFF_RESULT_IN_A },
+ { NM_SETTING_IP_CONFIG_DNS, NM_SETTING_DIFF_RESULT_IN_A },
+ { NM_SETTING_IP_CONFIG_DNS_SEARCH, NM_SETTING_DIFF_RESULT_IN_A },
+ { NM_SETTING_IP_CONFIG_ADDRESSES, NM_SETTING_DIFF_RESULT_IN_A },
+ { NM_SETTING_IP_CONFIG_GATEWAY, NM_SETTING_DIFF_RESULT_IN_A },
+ { NM_SETTING_IP_CONFIG_ROUTES, NM_SETTING_DIFF_RESULT_IN_A },
+ { NM_SETTING_IP_CONFIG_ROUTE_METRIC, NM_SETTING_DIFF_RESULT_IN_A },
+ { NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES, NM_SETTING_DIFF_RESULT_IN_A },
+ { NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS, NM_SETTING_DIFF_RESULT_IN_A },
+ { NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID, NM_SETTING_DIFF_RESULT_IN_A },
+ { NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME, NM_SETTING_DIFF_RESULT_IN_A },
+ { NM_SETTING_IP_CONFIG_DHCP_HOSTNAME, NM_SETTING_DIFF_RESULT_IN_A },
+ { NM_SETTING_IP_CONFIG_NEVER_DEFAULT, NM_SETTING_DIFF_RESULT_IN_A },
+ { NM_SETTING_IP_CONFIG_MAY_FAIL, NM_SETTING_DIFF_RESULT_IN_A },
+ { NULL, NM_SETTING_DIFF_RESULT_UNKNOWN },
+ } },
+ };
+
+ connection = new_test_connection ();
+
+ same = nm_connection_diff (connection, NULL, NM_SETTING_COMPARE_FLAG_EXACT, &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 (connection);
+}
+
+static void
+test_connection_diff_same (void)
+{
+ NMConnection *a, *b;
+ GHashTable *out_diffs = NULL;
+ gboolean same;
+
+ a = new_test_connection ();
+ b = nm_simple_connection_new_clone (a);
+
+ same = nm_connection_diff (a, b, NM_SETTING_COMPARE_FLAG_EXACT, &out_diffs);
+ g_assert (same == TRUE);
+ g_assert (out_diffs == NULL);
+ g_object_unref (a);
+ g_object_unref (b);
+}
+
+static void
+test_connection_diff_different (void)
+{
+ NMConnection *a, *b;
+ GHashTable *out_diffs = NULL;
+ NMSettingIPConfig *s_ip4;
+ gboolean same;
+ const DiffSetting settings[] = {
+ { NM_SETTING_IP4_CONFIG_SETTING_NAME, {
+ { NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_DIFF_RESULT_IN_A | NM_SETTING_DIFF_RESULT_IN_B },
+ { NULL, NM_SETTING_DIFF_RESULT_UNKNOWN },
+ } },
+ };
+
+ a = new_test_connection ();
+ b = nm_simple_connection_new_clone (a);
+ s_ip4 = nm_connection_get_setting_ip4_config (a);
+ g_assert (s_ip4);
+ g_object_set (G_OBJECT (s_ip4),
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
+ NULL);
+
+ same = nm_connection_diff (a, b, NM_SETTING_COMPARE_FLAG_EXACT, &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);
+}
+
+static void
+test_connection_diff_no_secrets (void)
+{
+ NMConnection *a, *b;
+ GHashTable *out_diffs = NULL;
+ NMSetting *s_pppoe;
+ gboolean same;
+ const DiffSetting settings[] = {
+ { NM_SETTING_PPPOE_SETTING_NAME, {
+ { NM_SETTING_PPPOE_PASSWORD, NM_SETTING_DIFF_RESULT_IN_B },
+ { NULL, NM_SETTING_DIFF_RESULT_UNKNOWN },
+ } },
+ };
+
+ a = new_test_connection ();
+ s_pppoe = nm_setting_pppoe_new ();
+ g_object_set (G_OBJECT (s_pppoe),
+ NM_SETTING_PPPOE_USERNAME, "thomas",
+ NULL);
+ nm_connection_add_setting (a, s_pppoe);
+
+ b = nm_simple_connection_new_clone (a);
+
+ /* Add a secret to B */
+ s_pppoe = NM_SETTING (nm_connection_get_setting_pppoe (b));
+ g_assert (s_pppoe);
+ g_object_set (G_OBJECT (s_pppoe),
+ NM_SETTING_PPPOE_PASSWORD, "secretpassword",
+ NULL);
+
+ /* Make sure the diff returns no results as secrets are ignored */
+ same = nm_connection_diff (a, b, NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS, &out_diffs);
+ g_assert (same == TRUE);
+ g_assert (out_diffs == NULL);
+
+ /* Now make sure the diff returns results if secrets are not ignored */
+ same = nm_connection_diff (a, b, NM_SETTING_COMPARE_FLAG_EXACT, &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);
+}
+
+static void
+test_connection_diff_inferrable (void)
+{
+ NMConnection *a, *b;
+ GHashTable *out_diffs = NULL;
+ gboolean same;
+ NMSettingConnection *s_con;
+ NMSettingWired *s_wired;
+ NMSettingIPConfig *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_simple_connection_new_clone (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_IP_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);
+}
+
+static void
+add_generic_settings (NMConnection *connection, const char *ctype)
+{
+ NMSetting *setting;
+ char *uuid;
+
+ uuid = nm_utils_uuid_generate ();
+
+ setting = nm_setting_connection_new ();
+ g_object_set (setting,
+ NM_SETTING_CONNECTION_ID, "asdfasdfadf",
+ NM_SETTING_CONNECTION_TYPE, ctype,
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NULL);
+ nm_connection_add_setting (connection, setting);
+
+ g_free (uuid);
+
+ setting = nm_setting_ip4_config_new ();
+ g_object_set (setting, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
+ nm_connection_add_setting (connection, setting);
+
+ setting = nm_setting_ip6_config_new ();
+ g_object_set (setting, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO, NULL);
+ nm_connection_add_setting (connection, setting);
+}
+
+static void
+test_connection_good_base_types (void)
+{
+ NMConnection *connection;
+ NMSetting *setting;
+ gboolean success;
+ GError *error = NULL;
+ GBytes *ssid;
+ const char *bdaddr = "11:22:33:44:55:66";
+
+ /* Try a basic wired connection */
+ connection = nm_simple_connection_new ();
+ add_generic_settings (connection, NM_SETTING_WIRED_SETTING_NAME);
+ setting = nm_setting_wired_new ();
+ nm_connection_add_setting (connection, setting);
+
+ success = nm_connection_verify (connection, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+ g_object_unref (connection);
+
+ /* Try a wired PPPoE connection */
+ connection = nm_simple_connection_new ();
+ add_generic_settings (connection, NM_SETTING_PPPOE_SETTING_NAME);
+ setting = nm_setting_pppoe_new ();
+ g_object_set (setting, NM_SETTING_PPPOE_USERNAME, "bob smith", NULL);
+ nm_connection_add_setting (connection, setting);
+
+ success = nm_connection_verify (connection, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+ g_object_unref (connection);
+
+ /* Wifi connection */
+ connection = nm_simple_connection_new ();
+ add_generic_settings (connection, NM_SETTING_WIRELESS_SETTING_NAME);
+
+ setting = nm_setting_wireless_new ();
+ ssid = g_bytes_new ("1234567", 7);
+ g_object_set (setting,
+ NM_SETTING_WIRELESS_SSID, ssid,
+ NM_SETTING_WIRELESS_MODE, "infrastructure",
+ NULL);
+ g_bytes_unref (ssid);
+ nm_connection_add_setting (connection, setting);
+
+ success = nm_connection_verify (connection, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+ g_object_unref (connection);
+
+ /* Bluetooth connection */
+ connection = nm_simple_connection_new ();
+ add_generic_settings (connection, NM_SETTING_BLUETOOTH_SETTING_NAME);
+
+ setting = nm_setting_bluetooth_new ();
+ g_object_set (setting,
+ NM_SETTING_BLUETOOTH_BDADDR, bdaddr,
+ NM_SETTING_CONNECTION_TYPE, NM_SETTING_BLUETOOTH_TYPE_PANU,
+ NULL);
+ nm_connection_add_setting (connection, setting);
+
+ success = nm_connection_verify (connection, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+ g_object_unref (connection);
+
+ /* WiMAX connection */
+ connection = nm_simple_connection_new ();
+ add_generic_settings (connection, NM_SETTING_WIMAX_SETTING_NAME);
+ setting = nm_setting_wimax_new ();
+ g_object_set (setting, NM_SETTING_WIMAX_NETWORK_NAME, "CLEAR", NULL);
+ nm_connection_add_setting (connection, setting);
+
+ success = nm_connection_verify (connection, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+ g_object_unref (connection);
+
+ /* GSM connection */
+ connection = nm_simple_connection_new ();
+ add_generic_settings (connection, NM_SETTING_GSM_SETTING_NAME);
+
+ setting = nm_setting_gsm_new ();
+ g_object_set (setting,
+ NM_SETTING_GSM_NUMBER, "*99#",
+ NM_SETTING_GSM_APN, "metered.billing.sucks",
+ NULL);
+ nm_connection_add_setting (connection, setting);
+
+ /* CDMA connection */
+ connection = nm_simple_connection_new ();
+ add_generic_settings (connection, NM_SETTING_CDMA_SETTING_NAME);
+
+ setting = nm_setting_cdma_new ();
+ g_object_set (setting,
+ NM_SETTING_CDMA_NUMBER, "#777",
+ NM_SETTING_CDMA_USERNAME, "foobar@vzw.com",
+ NULL);
+ nm_connection_add_setting (connection, setting);
+
+ success = nm_connection_verify (connection, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+ g_object_unref (connection);
+}
+
+static void
+test_connection_bad_base_types (void)
+{
+ NMConnection *connection;
+ NMSetting *setting;
+ gboolean success;
+ GError *error = NULL;
+
+ /* Test various non-base connection types to make sure they are rejected;
+ * using a fake 'wired' connection so the rest of it verifies
+ */
+
+ /* Connection setting */
+ connection = nm_simple_connection_new ();
+ add_generic_settings (connection, NM_SETTING_CONNECTION_SETTING_NAME);
+ setting = nm_setting_wired_new ();
+ nm_connection_add_setting (connection, setting);
+
+ success = nm_connection_verify (connection, &error);
+ g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
+ g_assert (g_str_has_prefix (error->message, "connection.type: "));
+ g_assert (success == FALSE);
+ g_object_unref (connection);
+ g_clear_error (&error);
+
+ /* PPP setting */
+ connection = nm_simple_connection_new ();
+ add_generic_settings (connection, NM_SETTING_PPP_SETTING_NAME);
+ setting = nm_setting_wired_new ();
+ nm_connection_add_setting (connection, setting);
+ setting = nm_setting_ppp_new ();
+ nm_connection_add_setting (connection, setting);
+
+ success = nm_connection_verify (connection, &error);
+ g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
+ g_assert (g_str_has_prefix (error->message, "connection.type: "));
+ g_assert (success == FALSE);
+ g_object_unref (connection);
+ g_clear_error (&error);
+
+ /* Serial setting */
+ connection = nm_simple_connection_new ();
+ add_generic_settings (connection, NM_SETTING_SERIAL_SETTING_NAME);
+ setting = nm_setting_wired_new ();
+ nm_connection_add_setting (connection, setting);
+ setting = nm_setting_serial_new ();
+ nm_connection_add_setting (connection, setting);
+
+ success = nm_connection_verify (connection, &error);
+ g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
+ g_assert (g_str_has_prefix (error->message, "connection.type: "));
+ g_assert (success == FALSE);
+ g_object_unref (connection);
+ g_clear_error (&error);
+
+ /* IP4 setting */
+ connection = nm_simple_connection_new ();
+ add_generic_settings (connection, NM_SETTING_IP4_CONFIG_SETTING_NAME);
+ setting = nm_setting_wired_new ();
+ nm_connection_add_setting (connection, setting);
+
+ success = nm_connection_verify (connection, &error);
+ g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
+ g_assert (g_str_has_prefix (error->message, "connection.type: "));
+ g_assert (success == FALSE);
+ g_object_unref (connection);
+ g_clear_error (&error);
+
+ /* IP6 setting */
+ connection = nm_simple_connection_new ();
+ add_generic_settings (connection, NM_SETTING_IP6_CONFIG_SETTING_NAME);
+ setting = nm_setting_wired_new ();
+ nm_connection_add_setting (connection, setting);
+
+ success = nm_connection_verify (connection, &error);
+ g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
+ g_assert (g_str_has_prefix (error->message, "connection.type: "));
+ g_assert (success == FALSE);
+ g_object_unref (connection);
+ g_clear_error (&error);
+}
+
+static void
+test_setting_compare_id (void)
+{
+ NMSetting *old, *new;
+ gboolean success;
+
+ old = nm_setting_connection_new ();
+ g_object_set (old,
+ NM_SETTING_CONNECTION_ID, "really awesome cool connection",
+ NM_SETTING_CONNECTION_UUID, "fbbd59d5-acab-4e30-8f86-258d272617e7",
+ NM_SETTING_CONNECTION_AUTOCONNECT, FALSE,
+ NULL);
+
+ new = nm_setting_duplicate (old);
+ g_object_set (new, NM_SETTING_CONNECTION_ID, "some different connection id", NULL);
+
+ /* First make sure they are different */
+ success = nm_setting_compare (old, new, NM_SETTING_COMPARE_FLAG_EXACT);
+ g_assert (success == FALSE);
+
+ success = nm_setting_compare (old, new, NM_SETTING_COMPARE_FLAG_IGNORE_ID);
+ g_assert (success);
+}
+
+static void
+test_setting_compare_timestamp (void)
+{
+ NMSetting *old, *new;
+ gboolean success;
+
+ old = nm_setting_connection_new ();
+ g_object_set (old,
+ NM_SETTING_CONNECTION_ID, "ignore timestamp connection",
+ NM_SETTING_CONNECTION_UUID, "b047a198-0e0a-4f0e-a653-eea09bb35e40",
+ NM_SETTING_CONNECTION_AUTOCONNECT, FALSE,
+ NM_SETTING_CONNECTION_TIMESTAMP, (guint64) 1234567890,
+ NULL);
+
+ new = nm_setting_duplicate (old);
+ g_object_set (new, NM_SETTING_CONNECTION_TIMESTAMP, (guint64) 1416316539, NULL);
+
+ /* First make sure they are different */
+ success = nm_setting_compare (old, new, NM_SETTING_COMPARE_FLAG_EXACT);
+ g_assert (success == FALSE);
+
+ success = nm_setting_compare (old, new, NM_SETTING_COMPARE_FLAG_IGNORE_TIMESTAMP);
+ g_assert (success);
+}
+
+typedef struct {
+ NMSettingSecretFlags secret_flags;
+ NMSettingCompareFlags comp_flags;
+ gboolean remove_secret;
+} TestDataCompareSecrets;
+
+static TestDataCompareSecrets *
+test_data_compare_secrets_new (NMSettingSecretFlags secret_flags,
+ NMSettingCompareFlags comp_flags,
+ gboolean remove_secret)
+{
+ TestDataCompareSecrets *data = g_new0 (TestDataCompareSecrets, 1);
+
+ data->secret_flags = secret_flags;
+ data->comp_flags = comp_flags;
+ data->remove_secret = remove_secret;
+ return data;
+}
+
+static void
+test_setting_compare_secrets (gconstpointer test_data)
+{
+ const TestDataCompareSecrets *data = test_data;
+ NMSetting *old, *new;
+ gboolean success;
+
+ /* Make sure that a connection with transient/unsaved secrets compares
+ * successfully to the same connection without those secrets.
+ */
+
+ old = nm_setting_wireless_security_new ();
+ g_object_set (old,
+ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-psk",
+ NM_SETTING_WIRELESS_SECURITY_PSK, "really cool psk",
+ NULL);
+ nm_setting_set_secret_flags (old, NM_SETTING_WIRELESS_SECURITY_PSK, data->secret_flags, NULL);
+
+ /* Clear the PSK from the duplicated setting */
+ new = nm_setting_duplicate (old);
+ if (data->remove_secret) {
+ g_object_set (new, NM_SETTING_WIRELESS_SECURITY_PSK, NULL, NULL);
+
+ success = nm_setting_compare (old, new, NM_SETTING_COMPARE_FLAG_EXACT);
+ g_assert (success == FALSE);
+ }
+
+ success = nm_setting_compare (old, new, data->comp_flags);
+ g_assert (success);
+}
+
+static void
+test_setting_compare_vpn_secrets (gconstpointer test_data)
+{
+ const TestDataCompareSecrets *data = test_data;
+ NMSetting *old, *new;
+ gboolean success;
+
+ /* Make sure that a connection with transient/unsaved secrets compares
+ * successfully to the same connection without those secrets.
+ */
+
+ old = nm_setting_vpn_new ();
+ nm_setting_vpn_add_secret (NM_SETTING_VPN (old), "foobarbaz", "really secret password");
+ nm_setting_vpn_add_secret (NM_SETTING_VPN (old), "asdfasdfasdf", "really adfasdfasdfasdf");
+ nm_setting_vpn_add_secret (NM_SETTING_VPN (old), "0123456778", "abcdefghijklmnpqrstuvqxyz");
+ nm_setting_vpn_add_secret (NM_SETTING_VPN (old), "borkbork", "yet another really secret password");
+ nm_setting_set_secret_flags (old, "borkbork", data->secret_flags, NULL);
+
+ /* Clear "borkbork" from the duplicated setting */
+ new = nm_setting_duplicate (old);
+ if (data->remove_secret) {
+ nm_setting_vpn_remove_secret (NM_SETTING_VPN (new), "borkbork");
+
+ /* First make sure they are different */
+ success = nm_setting_compare (old, new, NM_SETTING_COMPARE_FLAG_EXACT);
+ g_assert (success == FALSE);
+ }
+
+ success = nm_setting_compare (old, new, data->comp_flags);
+ g_assert (success);
+}
+
+static void
+test_hwaddr_aton_ether_normal (void)
+{
+ guint8 buf[100];
+ guint8 expected[ETH_ALEN] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55 };
+
+ g_assert (nm_utils_hwaddr_aton ("00:11:22:33:44:55", buf, ETH_ALEN) != NULL);
+ g_assert (memcmp (buf, expected, sizeof (expected)) == 0);
+}
+
+static void
+test_hwaddr_aton_ib_normal (void)
+{
+ guint8 buf[100];
+ const char *source = "00:11:22:33:44:55:66:77:88:99:01:12:23:34:45:56:67:78:89:90";
+ guint8 expected[INFINIBAND_ALEN] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66,
+ 0x77, 0x88, 0x99, 0x01, 0x12, 0x23, 0x34, 0x45, 0x56, 0x67, 0x78, 0x89,
+ 0x90 };
+
+ g_assert (nm_utils_hwaddr_aton (source, buf, INFINIBAND_ALEN) != NULL);
+ g_assert (memcmp (buf, expected, sizeof (expected)) == 0);
+}
+
+static void
+test_hwaddr_aton_no_leading_zeros (void)
+{
+ guint8 buf[100];
+ guint8 expected[ETH_ALEN] = { 0x00, 0x1A, 0x2B, 0x03, 0x44, 0x05 };
+
+ g_assert (nm_utils_hwaddr_aton ("0:1a:2B:3:44:5", buf, ETH_ALEN) != NULL);
+ g_assert (memcmp (buf, expected, sizeof (expected)) == 0);
+}
+
+static void
+test_hwaddr_aton_malformed (void)
+{
+ guint8 buf[100];
+
+ g_assert (nm_utils_hwaddr_aton ("0:1a:2B:3:a@%%", buf, ETH_ALEN) == NULL);
+}
+
+static void
+test_hwaddr_equal (void)
+{
+ const char *string = "00:1a:2b:03:44:05";
+ const char *upper_string = "00:1A:2B:03:44:05";
+ const char *bad_string = "0:1a:2b:3:44:5";
+ const guint8 binary[ETH_ALEN] = { 0x00, 0x1A, 0x2B, 0x03, 0x44, 0x05 };
+ const char *other_string = "1a:2b:03:44:05:00";
+ const guint8 other_binary[ETH_ALEN] = { 0x1A, 0x2B, 0x03, 0x44, 0x05, 0x00 };
+ const char *long_string = "00:1a:2b:03:44:05:06:07";
+ const guint8 long_binary[8] = { 0x00, 0x1A, 0x2B, 0x03, 0x44, 0x05, 0x06, 0x07 };
+ const char *null_string = "00:00:00:00:00:00";
+ const guint8 null_binary[ETH_ALEN] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+
+ g_assert (nm_utils_hwaddr_matches (string, -1, string, -1));
+ g_assert (nm_utils_hwaddr_matches (string, -1, upper_string, -1));
+ g_assert (nm_utils_hwaddr_matches (string, -1, bad_string, -1));
+ g_assert (nm_utils_hwaddr_matches (string, -1, binary, sizeof (binary)));
+ g_assert (!nm_utils_hwaddr_matches (string, -1, other_string, -1));
+ g_assert (!nm_utils_hwaddr_matches (string, -1, other_binary, sizeof (other_binary)));
+ g_assert (!nm_utils_hwaddr_matches (string, -1, long_string, -1));
+ g_assert (!nm_utils_hwaddr_matches (string, -1, long_binary, sizeof (long_binary)));
+ g_assert (!nm_utils_hwaddr_matches (string, -1, null_string, -1));
+ g_assert (!nm_utils_hwaddr_matches (string, -1, null_binary, sizeof (null_binary)));
+ g_assert (!nm_utils_hwaddr_matches (string, -1, NULL, ETH_ALEN));
+
+ g_assert (nm_utils_hwaddr_matches (binary, sizeof (binary), string, -1));
+ g_assert (nm_utils_hwaddr_matches (binary, sizeof (binary), upper_string, -1));
+ g_assert (nm_utils_hwaddr_matches (binary, sizeof (binary), bad_string, -1));
+ g_assert (nm_utils_hwaddr_matches (binary, sizeof (binary), binary, sizeof (binary)));
+ g_assert (!nm_utils_hwaddr_matches (binary, sizeof (binary), other_string, -1));
+ g_assert (!nm_utils_hwaddr_matches (binary, sizeof (binary), other_binary, sizeof (other_binary)));
+ g_assert (!nm_utils_hwaddr_matches (binary, sizeof (binary), long_string, -1));
+ g_assert (!nm_utils_hwaddr_matches (binary, sizeof (binary), long_binary, sizeof (long_binary)));
+ g_assert (!nm_utils_hwaddr_matches (binary, sizeof (binary), null_string, -1));
+ g_assert (!nm_utils_hwaddr_matches (binary, sizeof (binary), null_binary, sizeof (null_binary)));
+ g_assert (!nm_utils_hwaddr_matches (binary, sizeof (binary), NULL, ETH_ALEN));
+
+ g_assert (!nm_utils_hwaddr_matches (null_string, -1, string, -1));
+ g_assert (!nm_utils_hwaddr_matches (null_string, -1, upper_string, -1));
+ g_assert (!nm_utils_hwaddr_matches (null_string, -1, bad_string, -1));
+ g_assert (!nm_utils_hwaddr_matches (null_string, -1, binary, sizeof (binary)));
+ g_assert (!nm_utils_hwaddr_matches (null_string, -1, other_string, -1));
+ g_assert (!nm_utils_hwaddr_matches (null_string, -1, other_binary, sizeof (other_binary)));
+ g_assert (!nm_utils_hwaddr_matches (null_string, -1, long_string, -1));
+ g_assert (!nm_utils_hwaddr_matches (null_string, -1, long_binary, sizeof (long_binary)));
+ g_assert (nm_utils_hwaddr_matches (null_string, -1, null_string, -1));
+ g_assert (nm_utils_hwaddr_matches (null_string, -1, null_binary, sizeof (null_binary)));
+ g_assert (nm_utils_hwaddr_matches (null_string, -1, NULL, ETH_ALEN));
+
+ g_assert (!nm_utils_hwaddr_matches (null_binary, sizeof (null_binary), string, -1));
+ g_assert (!nm_utils_hwaddr_matches (null_binary, sizeof (null_binary), upper_string, -1));
+ g_assert (!nm_utils_hwaddr_matches (null_binary, sizeof (null_binary), bad_string, -1));
+ g_assert (!nm_utils_hwaddr_matches (null_binary, sizeof (null_binary), binary, sizeof (binary)));
+ g_assert (!nm_utils_hwaddr_matches (null_binary, sizeof (null_binary), other_string, -1));
+ g_assert (!nm_utils_hwaddr_matches (null_binary, sizeof (null_binary), other_binary, sizeof (other_binary)));
+ g_assert (!nm_utils_hwaddr_matches (null_binary, sizeof (null_binary), long_string, -1));
+ g_assert (!nm_utils_hwaddr_matches (null_binary, sizeof (null_binary), long_binary, sizeof (long_binary)));
+ g_assert (nm_utils_hwaddr_matches (null_binary, sizeof (null_binary), null_string, -1));
+ g_assert (nm_utils_hwaddr_matches (null_binary, sizeof (null_binary), null_binary, sizeof (null_binary)));
+ g_assert (nm_utils_hwaddr_matches (null_binary, sizeof (null_binary), NULL, ETH_ALEN));
+}
+
+static void
+test_hwaddr_canonical (void)
+{
+ const char *string = "00:1A:2B:03:44:05";
+ const char *lower_string = "00:1a:2b:03:44:05";
+ const char *short_string = "0:1a:2b:3:44:5";
+ const char *hyphen_string = "00-1a-2b-03-44-05";
+ const char *invalid_string = "00:1A:2B";
+ char *canonical;
+
+ canonical = nm_utils_hwaddr_canonical (string, ETH_ALEN);
+ g_assert_cmpstr (canonical, ==, string);
+ g_free (canonical);
+
+ canonical = nm_utils_hwaddr_canonical (lower_string, ETH_ALEN);
+ g_assert_cmpstr (canonical, ==, string);
+ g_free (canonical);
+
+ canonical = nm_utils_hwaddr_canonical (short_string, ETH_ALEN);
+ g_assert_cmpstr (canonical, ==, string);
+ g_free (canonical);
+
+ canonical = nm_utils_hwaddr_canonical (hyphen_string, ETH_ALEN);
+ g_assert_cmpstr (canonical, ==, string);
+ g_free (canonical);
+
+ canonical = nm_utils_hwaddr_canonical (invalid_string, ETH_ALEN);
+ g_assert_cmpstr (canonical, ==, NULL);
+
+ canonical = nm_utils_hwaddr_canonical (invalid_string, -1);
+ g_assert_cmpstr (canonical, ==, invalid_string);
+ g_free (canonical);
+}
+
+static void
+test_connection_changed_cb (NMConnection *connection, gboolean *data)
+{
+ *data = TRUE;
+}
+
+static void
+test_ip4_prefix_to_netmask (void)
+{
+ int i;
+
+ for (i = 0; i<=32; i++) {
+ guint32 netmask = nm_utils_ip4_prefix_to_netmask (i);
+ int plen = nm_utils_ip4_netmask_to_prefix (netmask);
+
+ g_assert_cmpint (i, ==, plen);
+ {
+ guint32 msk = 0x80000000;
+ guint32 netmask2 = 0;
+ guint32 prefix = i;
+ while (prefix > 0) {
+ netmask2 |= msk;
+ msk >>= 1;
+ prefix--;
+ }
+ g_assert_cmpint (netmask, ==, (guint32) htonl (netmask2));
+ }
+ }
+}
+
+static void
+test_ip4_netmask_to_prefix (void)
+{
+ int i, j;
+
+ GRand *rand = g_rand_new ();
+
+ g_rand_set_seed (rand, 1);
+
+ for (i = 2; i<=32; i++) {
+ guint32 netmask = nm_utils_ip4_prefix_to_netmask (i);
+ guint32 netmask_lowest_bit = netmask & ~nm_utils_ip4_prefix_to_netmask (i-1);
+
+ g_assert_cmpint (i, ==, nm_utils_ip4_netmask_to_prefix (netmask));
+
+ for (j = 0; j < 2*i; j++) {
+ guint32 r = g_rand_int (rand);
+ guint32 netmask_holey;
+ guint32 prefix_holey;
+
+ netmask_holey = (netmask & r) | netmask_lowest_bit;
+
+ if (netmask_holey == netmask)
+ continue;
+
+ /* create an invalid netmask with holes and check that the function
+ * returns the longest prefix. */
+ prefix_holey = nm_utils_ip4_netmask_to_prefix (netmask_holey);
+
+ g_assert_cmpint (i, ==, prefix_holey);
+ }
+ }
+
+ 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_simple_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", 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", 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_simple_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;
+ NMSettingIPConfig *s_ip4;
+ NMIPAddress *addr;
+ NMIPRoute *route;
+ GError *error = NULL;
+
+ connection = nm_simple_connection_new ();
+ g_signal_connect (connection,
+ NM_CONNECTION_CHANGED,
+ (GCallback) test_connection_changed_cb,
+ &changed);
+
+ s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_ip4));
+
+ ASSERT_CHANGED (nm_setting_ip_config_add_dns (s_ip4, "11.22.0.0"));
+ ASSERT_CHANGED (nm_setting_ip_config_remove_dns (s_ip4, 0));
+
+ g_test_expect_message ("libnm", G_LOG_LEVEL_CRITICAL, "*i < priv->dns->len*");
+ ASSERT_UNCHANGED (nm_setting_ip_config_remove_dns (s_ip4, 1));
+ g_test_assert_expected_messages ();
+
+ nm_setting_ip_config_add_dns (s_ip4, "33.44.0.0");
+ ASSERT_CHANGED (nm_setting_ip_config_clear_dns (s_ip4));
+
+ ASSERT_CHANGED (nm_setting_ip_config_add_dns_search (s_ip4, "foobar.com"));
+ ASSERT_CHANGED (nm_setting_ip_config_remove_dns_search (s_ip4, 0));
+
+ g_test_expect_message ("libnm", G_LOG_LEVEL_CRITICAL, "*i < priv->dns_search->len*");
+ ASSERT_UNCHANGED (nm_setting_ip_config_remove_dns_search (s_ip4, 1));
+ g_test_assert_expected_messages ();
+
+ ASSERT_CHANGED (nm_setting_ip_config_add_dns_search (s_ip4, "foobar.com"));
+ ASSERT_CHANGED (nm_setting_ip_config_clear_dns_searches (s_ip4));
+
+ addr = nm_ip_address_new (AF_INET, "22.33.0.0", 24, &error);
+ g_assert_no_error (error);
+ ASSERT_CHANGED (nm_setting_ip_config_add_address (s_ip4, addr));
+ ASSERT_CHANGED (nm_setting_ip_config_remove_address (s_ip4, 0));
+
+ g_test_expect_message ("libnm", G_LOG_LEVEL_CRITICAL, "*i < priv->addresses->len*");
+ ASSERT_UNCHANGED (nm_setting_ip_config_remove_address (s_ip4, 1));
+ g_test_assert_expected_messages ();
+
+ nm_setting_ip_config_add_address (s_ip4, addr);
+ ASSERT_CHANGED (nm_setting_ip_config_clear_addresses (s_ip4));
+
+ route = nm_ip_route_new (AF_INET, "22.33.0.0", 24, NULL, 0, &error);
+ g_assert_no_error (error);
+
+ ASSERT_CHANGED (nm_setting_ip_config_add_route (s_ip4, route));
+ ASSERT_CHANGED (nm_setting_ip_config_remove_route (s_ip4, 0));
+
+ g_test_expect_message ("libnm", G_LOG_LEVEL_CRITICAL, "*i < priv->routes->len*");
+ ASSERT_UNCHANGED (nm_setting_ip_config_remove_route (s_ip4, 1));
+ g_test_assert_expected_messages ();
+
+ nm_setting_ip_config_add_route (s_ip4, route);
+ ASSERT_CHANGED (nm_setting_ip_config_clear_routes (s_ip4));
+
+ nm_ip_address_unref (addr);
+ nm_ip_route_unref (route);
+ g_object_unref (connection);
+}
+
+static void
+test_setting_ip6_changed_signal (void)
+{
+ NMConnection *connection;
+ gboolean changed = FALSE;
+ NMSettingIPConfig *s_ip6;
+ NMIPAddress *addr;
+ NMIPRoute *route;
+ GError *error = NULL;
+
+ connection = nm_simple_connection_new ();
+ g_signal_connect (connection,
+ NM_CONNECTION_CHANGED,
+ (GCallback) test_connection_changed_cb,
+ &changed);
+
+ s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_ip6));
+
+ ASSERT_CHANGED (nm_setting_ip_config_add_dns (s_ip6, "1:2:3::4:5:6"));
+ ASSERT_CHANGED (nm_setting_ip_config_remove_dns (s_ip6, 0));
+
+ g_test_expect_message ("libnm", G_LOG_LEVEL_CRITICAL, "*i < priv->dns->len*");
+ ASSERT_UNCHANGED (nm_setting_ip_config_remove_dns (s_ip6, 1));
+ g_test_assert_expected_messages ();
+
+ nm_setting_ip_config_add_dns (s_ip6, "1:2:3::4:5:6");
+ ASSERT_CHANGED (nm_setting_ip_config_clear_dns (s_ip6));
+
+ ASSERT_CHANGED (nm_setting_ip_config_add_dns_search (s_ip6, "foobar.com"));
+ ASSERT_CHANGED (nm_setting_ip_config_remove_dns_search (s_ip6, 0));
+
+ g_test_expect_message ("libnm", G_LOG_LEVEL_CRITICAL, "*i < priv->dns_search->len*");
+ ASSERT_UNCHANGED (nm_setting_ip_config_remove_dns_search (s_ip6, 1));
+ g_test_assert_expected_messages ();
+
+ nm_setting_ip_config_add_dns_search (s_ip6, "foobar.com");
+ ASSERT_CHANGED (nm_setting_ip_config_clear_dns_searches (s_ip6));
+
+ addr = nm_ip_address_new (AF_INET6, "1:2:3::4:5:6", 64, &error);
+ g_assert_no_error (error);
+
+ ASSERT_CHANGED (nm_setting_ip_config_add_address (s_ip6, addr));
+ ASSERT_CHANGED (nm_setting_ip_config_remove_address (s_ip6, 0));
+
+ g_test_expect_message ("libnm", G_LOG_LEVEL_CRITICAL, "*i < priv->addresses->len*");
+ ASSERT_UNCHANGED (nm_setting_ip_config_remove_address (s_ip6, 1));
+ g_test_assert_expected_messages ();
+
+ nm_setting_ip_config_add_address (s_ip6, addr);
+ ASSERT_CHANGED (nm_setting_ip_config_clear_addresses (s_ip6));
+
+ route = nm_ip_route_new (AF_INET6, "1:2:3::4:5:6", 128, NULL, 0, &error);
+ g_assert_no_error (error);
+
+ ASSERT_CHANGED (nm_setting_ip_config_add_route (s_ip6, route));
+ ASSERT_CHANGED (nm_setting_ip_config_remove_route (s_ip6, 0));
+
+ g_test_expect_message ("libnm", G_LOG_LEVEL_CRITICAL, "*i < priv->routes->len*");
+ ASSERT_UNCHANGED (nm_setting_ip_config_remove_route (s_ip6, 1));
+ g_test_assert_expected_messages ();
+
+ nm_setting_ip_config_add_route (s_ip6, route);
+ ASSERT_CHANGED (nm_setting_ip_config_clear_routes (s_ip6));
+
+ nm_ip_address_unref (addr);
+ nm_ip_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_simple_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", 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", 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_simple_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_simple_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_simple_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_simple_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", 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", 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", 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_simple_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", 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", 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", 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)
+{
+ NMSetting *setting;
+
+ /* NetworkManager-0.9.4.0 generated 40-character UUIDs with no dashes,
+ * like this one. Test that we maintain compatibility. */
+ const char *uuid = "f43bec2cdd60e5da381ebb1eb1fa39f3cc52660c";
+
+ setting = nm_setting_connection_new ();
+ g_object_set (G_OBJECT (setting),
+ NM_SETTING_CONNECTION_ID, "uuidtest",
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
+ NULL);
+
+ nmtst_assert_setting_verifies (NM_SETTING (setting));
+}
+
+/******************************************************************************/
+
+static void
+test_connection_normalize_uuid (void)
+{
+ gs_unref_object NMConnection *con = NULL;
+
+ con = nmtst_create_minimal_connection ("test1", NULL, NM_SETTING_WIRED_SETTING_NAME, NULL);
+
+ nmtst_assert_connection_verifies_and_normalizable (con);
+
+ g_object_set (nm_connection_get_setting_connection (con),
+ NM_SETTING_CONNECTION_UUID, NULL,
+ NULL);
+ nmtst_assert_connection_verifies_after_normalization (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_PROPERTY);
+}
+
+/******************************************************************************/
+
+/*
+ * Test normalization of interface-name
+ */
+static void
+test_connection_normalize_virtual_iface_name (void)
+{
+ NMConnection *con = NULL;
+ NMSettingConnection *s_con;
+ NMSettingVlan *s_vlan;
+ GVariant *connection_dict, *setting_dict, *var;
+ GError *error = NULL;
+ const char *IFACE_NAME = "iface";
+ const char *IFACE_VIRT = "iface-X";
+
+ con = nmtst_create_minimal_connection ("test1",
+ "22001632-bbb4-4616-b277-363dce3dfb5b",
+ NM_SETTING_VLAN_SETTING_NAME,
+ &s_con);
+
+ nm_connection_add_setting (con,
+ g_object_new (NM_TYPE_SETTING_IP4_CONFIG,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
+ NULL));
+
+ nm_connection_add_setting (con,
+ g_object_new (NM_TYPE_SETTING_IP6_CONFIG,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
+ NULL));
+
+ s_vlan = nm_connection_get_setting_vlan (con);
+
+ g_object_set (G_OBJECT (s_vlan),
+ NM_SETTING_VLAN_PARENT, "eth0",
+ NULL);
+
+ g_object_set (G_OBJECT (s_con), NM_SETTING_CONNECTION_INTERFACE_NAME, IFACE_NAME, NULL);
+
+ g_assert_cmpstr (nm_connection_get_interface_name (con), ==, IFACE_NAME);
+
+ connection_dict = nm_connection_to_dbus (con, NM_CONNECTION_SERIALIZE_ALL);
+ g_object_unref (con);
+
+ /* Serialized form should include vlan.interface-name as well. */
+ setting_dict = g_variant_lookup_value (connection_dict, NM_SETTING_VLAN_SETTING_NAME, NM_VARIANT_TYPE_SETTING);
+ g_assert (setting_dict != NULL);
+ var = g_variant_lookup_value (setting_dict, "interface-name", NULL);
+ g_assert (var != NULL);
+ g_assert (g_variant_is_of_type (var, G_VARIANT_TYPE_STRING));
+ g_assert_cmpstr (g_variant_get_string (var, NULL), ==, IFACE_NAME);
+
+ g_variant_unref (setting_dict);
+ g_variant_unref (var);
+
+ /* If vlan.interface-name is invalid, deserialization will fail. */
+ NMTST_VARIANT_EDITOR (connection_dict,
+ NMTST_VARIANT_CHANGE_PROPERTY (NM_SETTING_VLAN_SETTING_NAME,
+ "interface-name",
+ "s",
+ ":::this-is-not-a-valid-interface-name:::");
+ );
+
+ con = nm_simple_connection_new_from_dbus (connection_dict, &error);
+ g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
+ g_clear_error (&error);
+
+ /* If vlan.interface-name is valid, but doesn't match, it will be ignored. */
+ NMTST_VARIANT_EDITOR (connection_dict,
+ NMTST_VARIANT_CHANGE_PROPERTY (NM_SETTING_VLAN_SETTING_NAME,
+ "interface-name",
+ "s",
+ IFACE_VIRT);
+ );
+
+ con = nm_simple_connection_new_from_dbus (connection_dict, &error);
+ g_assert_no_error (error);
+
+ g_assert_cmpstr (nm_connection_get_interface_name (con), ==, IFACE_NAME);
+ s_con = nm_connection_get_setting_connection (con);
+ g_assert_cmpstr (nm_setting_connection_get_interface_name (s_con), ==, IFACE_NAME);
+ g_object_unref (con);
+
+ /* But removing connection.interface-name should result in vlan.connection-name
+ * being "promoted".
+ */
+ NMTST_VARIANT_EDITOR (connection_dict,
+ NMTST_VARIANT_DROP_PROPERTY (NM_SETTING_CONNECTION_SETTING_NAME,
+ NM_SETTING_CONNECTION_INTERFACE_NAME);
+ );
+
+ con = nm_simple_connection_new_from_dbus (connection_dict, &error);
+ g_assert_no_error (error);
+
+ g_assert_cmpstr (nm_connection_get_interface_name (con), ==, IFACE_VIRT);
+ s_con = nm_connection_get_setting_connection (con);
+ g_assert_cmpstr (nm_setting_connection_get_interface_name (s_con), ==, IFACE_VIRT);
+ g_object_unref (con);
+
+ g_variant_unref (connection_dict);
+}
+
+static void
+_test_connection_normalize_type_normalizable_setting (const char *type,
+ void (*prepare_normalizable_fcn) (NMConnection *con))
+{
+ NMSettingConnection *s_con;
+ NMSetting *s_base;
+ GType base_type;
+ gs_unref_object NMConnection *con = NULL;
+ gs_free char *id = g_strdup_printf ("%s[%s]", G_STRFUNC, type);
+
+ base_type = nm_setting_lookup_type (type);
+ g_assert (base_type != G_TYPE_INVALID);
+ g_assert (_nm_setting_type_is_base_type (base_type));
+
+ con = nmtst_create_minimal_connection (id, NULL, NULL, &s_con);
+
+ nmtst_assert_connection_unnormalizable (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_PROPERTY);
+
+ g_object_set (s_con, NM_SETTING_CONNECTION_TYPE, type, NULL);
+
+ if (prepare_normalizable_fcn)
+ prepare_normalizable_fcn (con);
+
+ g_assert (!nm_connection_get_setting_by_name (con, type));
+ nmtst_assert_connection_verifies_after_normalization (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_SETTING);
+
+ s_base = nm_connection_get_setting_by_name (con, type);
+ g_assert (s_base);
+ g_assert (G_OBJECT_TYPE (s_base) == base_type);
+}
+
+static void
+_test_connection_normalize_type_unnormalizable_setting (const char *type)
+{
+ NMSettingConnection *s_con;
+ GType base_type;
+ gs_unref_object NMConnection *con = NULL;
+ gs_free char *id = g_strdup_printf ("%s[%s]", G_STRFUNC, type);
+
+ base_type = nm_setting_lookup_type (type);
+ g_assert (base_type != G_TYPE_INVALID);
+ g_assert (_nm_setting_type_is_base_type (base_type));
+
+ con = nmtst_create_minimal_connection (id, NULL, NULL, &s_con);
+
+ nmtst_assert_connection_unnormalizable (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_PROPERTY);
+
+ g_object_set (s_con, NM_SETTING_CONNECTION_TYPE, type, NULL);
+
+ nmtst_assert_connection_unnormalizable (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_SETTING);
+}
+
+static void
+_test_connection_normalize_type_normalizable_type (const char *type,
+ NMSetting *(*add_setting_fcn) (NMConnection *con))
+{
+ NMSettingConnection *s_con;
+ NMSetting *s_base;
+ GType base_type;
+ gs_unref_object NMConnection *con = NULL;
+ gs_free char *id = g_strdup_printf ("%s[%s]", G_STRFUNC, type);
+
+ base_type = nm_setting_lookup_type (type);
+ g_assert (base_type != G_TYPE_INVALID);
+ g_assert (_nm_setting_type_is_base_type (base_type));
+
+ con = nmtst_create_minimal_connection (id, NULL, NULL, &s_con);
+
+ nmtst_assert_connection_unnormalizable (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_PROPERTY);
+
+ if (add_setting_fcn)
+ s_base = add_setting_fcn (con);
+ else {
+ s_base = NM_SETTING (g_object_new (base_type, NULL));
+ nm_connection_add_setting (con, s_base);
+ }
+
+ g_assert (!nm_connection_get_connection_type (con));
+ g_assert (nm_connection_get_setting_by_name (con, type) == s_base);
+
+ nmtst_assert_connection_verifies_after_normalization (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_PROPERTY);
+
+ g_assert_cmpstr (nm_connection_get_connection_type (con), ==, type);
+ g_assert (nm_connection_get_setting_by_name (con, type) == s_base);
+}
+
+static NMSetting *
+_add_setting_fcn_adsl (NMConnection *con)
+{
+ NMSetting *setting;
+
+ setting = g_object_new (NM_TYPE_SETTING_ADSL,
+ NM_SETTING_ADSL_USERNAME, "test-user",
+ NM_SETTING_ADSL_PROTOCOL, NM_SETTING_ADSL_PROTOCOL_PPPOA,
+ NM_SETTING_ADSL_ENCAPSULATION, NM_SETTING_ADSL_ENCAPSULATION_VCMUX,
+ NULL);
+
+ nm_connection_add_setting (con, setting);
+ return setting;
+}
+
+static NMSetting *
+_add_setting_fcn_bluetooth (NMConnection *con)
+{
+ NMSetting *setting;
+
+ setting = g_object_new (NM_TYPE_SETTING_BLUETOOTH,
+ NM_SETTING_BLUETOOTH_BDADDR, "11:22:33:44:55:66",
+ NM_SETTING_BLUETOOTH_TYPE, NM_SETTING_BLUETOOTH_TYPE_PANU,
+ NULL);
+
+ nm_connection_add_setting (con, setting);
+ return setting;
+}
+
+static NMSetting *
+_add_setting_fcn_bond (NMConnection *con)
+{
+ NMSetting *setting;
+ NMSettingConnection *s_con;
+
+ setting = g_object_new (NM_TYPE_SETTING_BOND, NULL);
+
+ nm_connection_add_setting (con, setting);
+
+ s_con = nm_connection_get_setting_connection (con);
+
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_INTERFACE_NAME, "test-bond",
+ NULL);
+
+ return setting;
+}
+
+static NMSetting *
+_add_setting_fcn_bridge (NMConnection *con)
+{
+ NMSetting *setting;
+ NMSettingConnection *s_con;
+
+ setting = g_object_new (NM_TYPE_SETTING_BRIDGE, NULL);
+
+ nm_connection_add_setting (con, setting);
+
+ s_con = nm_connection_get_setting_connection (con);
+
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_INTERFACE_NAME, "test-bridge",
+ NULL);
+
+ return setting;
+}
+
+static NMSetting *
+_add_setting_fcn_cdma (NMConnection *con)
+{
+ NMSetting *setting;
+
+ setting = g_object_new (NM_TYPE_SETTING_CDMA,
+ NM_SETTING_CDMA_NUMBER, "test-number",
+ NULL);
+
+ nm_connection_add_setting (con, setting);
+ return setting;
+}
+
+static NMSetting *
+_add_setting_fcn_infiniband (NMConnection *con)
+{
+ NMSetting *setting;
+
+ setting = g_object_new (NM_TYPE_SETTING_INFINIBAND,
+ NM_SETTING_INFINIBAND_TRANSPORT_MODE, "connected",
+ NULL);
+
+ nm_connection_add_setting (con, setting);
+ return setting;
+}
+
+static NMSetting *
+_add_setting_fcn_olpc_mesh (NMConnection *con)
+{
+ NMSetting *setting;
+ const char *ssid_data = "ssid-test";
+ GBytes *ssid;
+
+ ssid = g_bytes_new (ssid_data, strlen (ssid_data));
+ setting = g_object_new (NM_TYPE_SETTING_OLPC_MESH,
+ NM_SETTING_OLPC_MESH_SSID, ssid,
+ NM_SETTING_OLPC_MESH_CHANNEL, 1,
+ NULL);
+ g_bytes_unref (ssid);
+
+ nm_connection_add_setting (con, setting);
+ return setting;
+}
+
+static NMSetting *
+_add_setting_fcn_team (NMConnection *con)
+{
+ NMSetting *setting;
+ NMSettingConnection *s_con;
+
+ setting = g_object_new (NM_TYPE_SETTING_TEAM, NULL);
+
+ nm_connection_add_setting (con, setting);
+
+ s_con = nm_connection_get_setting_connection (con);
+
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_INTERFACE_NAME, "test-team",
+ NULL);
+
+ return setting;
+}
+
+static NMSetting *
+_add_setting_fcn_vlan (NMConnection *con)
+{
+ NMSetting *setting;
+
+ setting = g_object_new (NM_TYPE_SETTING_VLAN,
+ NM_SETTING_VLAN_PARENT, "test-parent",
+ NULL);
+
+ nm_connection_add_setting (con, setting);
+ return setting;
+}
+
+static NMSetting *
+_add_setting_fcn_vpn (NMConnection *con)
+{
+ NMSetting *setting;
+
+ setting = g_object_new (NM_TYPE_SETTING_VPN,
+ NM_SETTING_VPN_SERVICE_TYPE, "test-vpn-service-type",
+ NULL);
+
+ nm_connection_add_setting (con, setting);
+ return setting;
+}
+
+static NMSetting *
+_add_setting_fcn_wimax (NMConnection *con)
+{
+ NMSetting *setting;
+
+ setting = g_object_new (NM_TYPE_SETTING_WIMAX,
+ NM_SETTING_WIMAX_NETWORK_NAME, "test-network",
+ NULL);
+
+ nm_connection_add_setting (con, setting);
+ return setting;
+}
+
+static NMSetting *
+_add_setting_fcn_wireless (NMConnection *con)
+{
+ NMSetting *setting;
+ const char *ssid_data = "ssid-test";
+ GBytes *ssid;
+
+ ssid = g_bytes_new (ssid_data, strlen (ssid_data));
+ setting = g_object_new (NM_TYPE_SETTING_WIRELESS,
+ NM_SETTING_WIRELESS_SSID, ssid,
+ NULL);
+ g_bytes_unref (ssid);
+
+ nm_connection_add_setting (con, setting);
+ return setting;
+}
+
+static void
+_prepare_normalizable_fcn_vlan (NMConnection *con)
+{
+ nm_connection_add_setting (con, g_object_new (NM_TYPE_SETTING_WIRED,
+ NM_SETTING_WIRED_MAC_ADDRESS, "11:22:33:44:55:66",
+ NULL));
+}
+
+static void
+test_connection_normalize_type (void)
+{
+ guint i;
+ struct {
+ const char *type;
+ gboolean normalizable;
+ NMSetting *(*add_setting_fcn) (NMConnection *con);
+ void (*prepare_normalizable_fcn) (NMConnection *con);
+ } types[] = {
+ { NM_SETTING_GENERIC_SETTING_NAME, TRUE },
+ { NM_SETTING_GSM_SETTING_NAME, TRUE },
+ { NM_SETTING_WIRED_SETTING_NAME, TRUE },
+ { NM_SETTING_VLAN_SETTING_NAME, TRUE, _add_setting_fcn_vlan, _prepare_normalizable_fcn_vlan },
+
+ { NM_SETTING_ADSL_SETTING_NAME, FALSE, _add_setting_fcn_adsl },
+ { NM_SETTING_BLUETOOTH_SETTING_NAME, FALSE, _add_setting_fcn_bluetooth },
+ { NM_SETTING_BOND_SETTING_NAME, FALSE, _add_setting_fcn_bond },
+ { NM_SETTING_BRIDGE_SETTING_NAME, FALSE, _add_setting_fcn_bridge },
+ { NM_SETTING_CDMA_SETTING_NAME, FALSE, _add_setting_fcn_cdma },
+ { NM_SETTING_INFINIBAND_SETTING_NAME, FALSE, _add_setting_fcn_infiniband },
+ { NM_SETTING_OLPC_MESH_SETTING_NAME, FALSE, _add_setting_fcn_olpc_mesh },
+ { NM_SETTING_TEAM_SETTING_NAME, FALSE, _add_setting_fcn_team },
+ { NM_SETTING_VLAN_SETTING_NAME, FALSE, _add_setting_fcn_vlan },
+ { NM_SETTING_VPN_SETTING_NAME, FALSE, _add_setting_fcn_vpn },
+ { NM_SETTING_WIMAX_SETTING_NAME, FALSE, _add_setting_fcn_wimax },
+ { NM_SETTING_WIRELESS_SETTING_NAME, FALSE, _add_setting_fcn_wireless },
+ { 0 },
+ };
+
+ for (i = 0; types[i].type; i++) {
+ const char *type = types[i].type;
+
+ if (types[i].normalizable)
+ _test_connection_normalize_type_normalizable_setting (type, types[i].prepare_normalizable_fcn);
+ else
+ _test_connection_normalize_type_unnormalizable_setting (type);
+ _test_connection_normalize_type_normalizable_type (type, types[i].add_setting_fcn);
+ }
+}
+
+static void
+test_connection_normalize_slave_type_1 (void)
+{
+ gs_unref_object NMConnection *con = NULL;
+ NMSettingConnection *s_con;
+
+ con = nmtst_create_minimal_connection ("test_connection_normalize_slave_type_1",
+ "cc4cd5df-45dc-483e-b291-6b76c2338ecb",
+ NM_SETTING_WIRED_SETTING_NAME, &s_con);
+
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_MASTER, "master0",
+ NM_SETTING_CONNECTION_SLAVE_TYPE, "invalid-type",
+ NULL);
+
+ nmtst_assert_connection_unnormalizable (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
+ g_assert (!nm_connection_get_setting_by_name (con, NM_SETTING_BRIDGE_PORT_SETTING_NAME));
+
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_SLAVE_TYPE, "bridge",
+ NULL);
+
+ g_assert (!nm_connection_get_setting_by_name (con, NM_SETTING_BRIDGE_PORT_SETTING_NAME));
+ nmtst_assert_connection_verifies_after_normalization (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_SETTING);
+ g_assert (nm_connection_get_setting_by_name (con, NM_SETTING_BRIDGE_PORT_SETTING_NAME));
+ g_assert_cmpstr (nm_setting_connection_get_slave_type (s_con), ==, NM_SETTING_BRIDGE_SETTING_NAME);
+}
+
+static void
+test_connection_normalize_slave_type_2 (void)
+{
+ gs_unref_object NMConnection *con = NULL;
+ NMSettingConnection *s_con;
+
+ con = nmtst_create_minimal_connection ("test_connection_normalize_slave_type_2",
+ "40bea008-ca72-439a-946b-e65f827656f9",
+ NM_SETTING_WIRED_SETTING_NAME, &s_con);
+
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_MASTER, "master0",
+ NM_SETTING_CONNECTION_SLAVE_TYPE, "invalid-type",
+ NULL);
+
+ nmtst_assert_connection_unnormalizable (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
+ g_assert (!nm_connection_get_setting_by_name (con, NM_SETTING_BRIDGE_PORT_SETTING_NAME));
+
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_SLAVE_TYPE, NULL,
+ NULL);
+ nm_connection_add_setting (con, nm_setting_bridge_port_new ());
+
+ g_assert (nm_connection_get_setting_by_name (con, NM_SETTING_BRIDGE_PORT_SETTING_NAME));
+ g_assert_cmpstr (nm_setting_connection_get_slave_type (s_con), ==, NULL);
+ nmtst_assert_connection_verifies_after_normalization (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_PROPERTY);
+ g_assert (nm_connection_get_setting_by_name (con, NM_SETTING_BRIDGE_PORT_SETTING_NAME));
+ g_assert_cmpstr (nm_setting_connection_get_slave_type (s_con), ==, NM_SETTING_BRIDGE_SETTING_NAME);
+}
+
+static void
+test_connection_normalize_infiniband_mtu (void)
+{
+ gs_unref_object NMConnection *con = NULL;
+ NMSettingInfiniband *s_infini;
+
+ con = nmtst_create_minimal_connection ("test_connection_normalize_infiniband_mtu", NULL,
+ NM_SETTING_INFINIBAND_SETTING_NAME, NULL);
+
+ s_infini = nm_connection_get_setting_infiniband (con);
+ g_object_set (s_infini,
+ NM_SETTING_INFINIBAND_TRANSPORT_MODE, "connected",
+ NULL);
+ nmtst_assert_connection_verifies_and_normalizable (con);
+
+ g_object_set (s_infini,
+ NM_SETTING_INFINIBAND_TRANSPORT_MODE, "datagram",
+ NM_SETTING_INFINIBAND_MTU, (guint) 2044,
+ NULL);
+ nmtst_assert_connection_verifies_without_normalization (con);
+ g_assert_cmpint (2044, ==, nm_setting_infiniband_get_mtu (s_infini));
+
+ g_object_set (s_infini,
+ NM_SETTING_INFINIBAND_TRANSPORT_MODE, "datagram",
+ NM_SETTING_INFINIBAND_MTU, (guint) 2045,
+ NULL);
+ nmtst_assert_connection_verifies_after_normalization (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
+ g_assert_cmpint (2044, ==, nm_setting_infiniband_get_mtu (s_infini));
+
+ g_object_set (s_infini,
+ NM_SETTING_INFINIBAND_TRANSPORT_MODE, "connected",
+ NM_SETTING_INFINIBAND_MTU, (guint) 65520,
+ NULL);
+ nmtst_assert_connection_verifies_without_normalization (con);
+ g_assert_cmpint (65520, ==, nm_setting_infiniband_get_mtu (s_infini));
+
+ g_object_set (s_infini,
+ NM_SETTING_INFINIBAND_TRANSPORT_MODE, "connected",
+ NM_SETTING_INFINIBAND_MTU, (guint) 65521,
+ NULL);
+ nmtst_assert_connection_verifies_after_normalization (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
+ g_assert_cmpint (65520, ==, nm_setting_infiniband_get_mtu (s_infini));
+}
+
+static void
+test_setting_ip4_gateway (void)
+{
+ NMConnection *conn;
+ NMSettingIPConfig *s_ip4;
+ NMIPAddress *addr;
+ GVariant *conn_dict, *ip4_dict, *value;
+ GVariantIter iter;
+ GVariant *addr_var;
+ guint32 addr_vals_0[] = { htonl (0xc0a8010a), 0x00000018, htonl (0x00000000) };
+ guint32 addr_vals_1[] = { htonl (0xc0a8010b), 0x00000018, htonl (0xc0a80101) };
+ GVariantBuilder addrs_builder;
+ GError *error = NULL;
+
+ g_assert_cmpstr (nm_utils_inet4_ntop (addr_vals_0[0], NULL), ==, "192.168.1.10");
+
+ /* When serializing on the daemon side, ipv4.gateway is copied to the first
+ * entry of ipv4.addresses
+ */
+ conn = nmtst_create_minimal_connection ("test_setting_ip4_gateway", NULL,
+ NM_SETTING_WIRED_SETTING_NAME, NULL);
+ s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new ();
+ g_object_set (s_ip4,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
+ NM_SETTING_IP_CONFIG_GATEWAY, "192.168.1.1",
+ NULL);
+ nm_connection_add_setting (conn, NM_SETTING (s_ip4));
+
+ addr = nm_ip_address_new (AF_INET, "192.168.1.10", 24, &error);
+ g_assert_no_error (error);
+ nm_setting_ip_config_add_address (s_ip4, addr);
+ nm_ip_address_unref (addr);
+
+ _nm_utils_is_manager_process = TRUE;
+ conn_dict = nm_connection_to_dbus (conn, NM_CONNECTION_SERIALIZE_ALL);
+ _nm_utils_is_manager_process = FALSE;
+ g_object_unref (conn);
+
+ ip4_dict = g_variant_lookup_value (conn_dict, NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_VARIANT_TYPE_SETTING);
+ g_assert (ip4_dict != NULL);
+
+ value = g_variant_lookup_value (ip4_dict, NM_SETTING_IP_CONFIG_GATEWAY, G_VARIANT_TYPE_STRING);
+ g_assert (value != NULL);
+ g_assert_cmpstr (g_variant_get_string (value, NULL), ==, "192.168.1.1");
+ g_variant_unref (value);
+
+ value = g_variant_lookup_value (ip4_dict, NM_SETTING_IP_CONFIG_ADDRESSES, G_VARIANT_TYPE ("aau"));
+ g_assert (value != NULL);
+
+ g_variant_iter_init (&iter, value);
+ while (g_variant_iter_next (&iter, "@au", &addr_var)) {
+ const guint32 *addr_array;
+ gsize length;
+
+ addr_array = g_variant_get_fixed_array (addr_var, &length, sizeof (guint32));
+ g_assert_cmpint (length, ==, 3);
+ g_assert_cmpstr (nm_utils_inet4_ntop (addr_array[2], NULL), ==, "192.168.1.1");
+ g_variant_unref (addr_var);
+ }
+ g_variant_unref (value);
+
+ g_variant_unref (ip4_dict);
+
+ /* When deserializing an old-style connection, the first non-0 gateway in
+ * ipv4.addresses is copied to :gateway.
+ */
+ NMTST_VARIANT_EDITOR (conn_dict,
+ NMTST_VARIANT_DROP_PROPERTY (NM_SETTING_IP4_CONFIG_SETTING_NAME,
+ NM_SETTING_IP_CONFIG_GATEWAY);
+ NMTST_VARIANT_DROP_PROPERTY (NM_SETTING_IP4_CONFIG_SETTING_NAME,
+ "address-data");
+ );
+
+ conn = nm_simple_connection_new_from_dbus (conn_dict, &error);
+ g_assert_no_error (error);
+
+ s_ip4 = (NMSettingIPConfig *) nm_connection_get_setting_ip4_config (conn);
+ g_assert_cmpstr (nm_setting_ip_config_get_gateway (s_ip4), ==, "192.168.1.1");
+
+ g_object_unref (conn);
+
+ /* Try again with the gateway in the second address. */
+ g_variant_builder_init (&addrs_builder, G_VARIANT_TYPE ("aau"));
+ g_variant_builder_add (&addrs_builder, "@au",
+ g_variant_new_fixed_array (G_VARIANT_TYPE_UINT32,
+ addr_vals_0, 3, 4));
+ g_variant_builder_add (&addrs_builder, "@au",
+ g_variant_new_fixed_array (G_VARIANT_TYPE_UINT32,
+ addr_vals_1, 3, 4));
+
+ NMTST_VARIANT_EDITOR (conn_dict,
+ NMTST_VARIANT_CHANGE_PROPERTY (NM_SETTING_IP4_CONFIG_SETTING_NAME,
+ "addresses", "aau", &addrs_builder);
+ );
+
+ conn = nm_simple_connection_new_from_dbus (conn_dict, &error);
+ g_assert_no_error (error);
+ g_variant_unref (conn_dict);
+
+ s_ip4 = (NMSettingIPConfig *) nm_connection_get_setting_ip4_config (conn);
+ g_assert_cmpstr (nm_setting_ip_config_get_gateway (s_ip4), ==, "192.168.1.1");
+
+ g_object_unref (conn);
+}
+
+static void
+test_setting_ip6_gateway (void)
+{
+ NMConnection *conn;
+ NMSettingIPConfig *s_ip6;
+ NMIPAddress *addr;
+ GVariant *conn_dict, *ip6_dict, *value;
+ GVariantIter iter;
+ GVariant *gateway_var;
+ GVariantBuilder addrs_builder;
+ guint8 addr_bytes_0[] = { 0xab, 0xcd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a };
+ guint8 addr_bytes_1[] = { 0xab, 0xcd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b };
+ guint8 gateway_bytes_1[] = { 0xab, 0xcd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 };
+ GError *error = NULL;
+
+ /* When serializing on the daemon side, ipv6.gateway is copied to the first
+ * entry of ipv6.addresses
+ */
+ conn = nmtst_create_minimal_connection ("test_setting_ip6_gateway", NULL,
+ NM_SETTING_WIRED_SETTING_NAME, NULL);
+ s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new ();
+ g_object_set (s_ip6,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_MANUAL,
+ NM_SETTING_IP_CONFIG_GATEWAY, "abcd::1",
+ NULL);
+ nm_connection_add_setting (conn, NM_SETTING (s_ip6));
+
+ addr = nm_ip_address_new (AF_INET6, "abcd::10", 64, &error);
+ g_assert_no_error (error);
+ nm_setting_ip_config_add_address (s_ip6, addr);
+ nm_ip_address_unref (addr);
+
+ _nm_utils_is_manager_process = TRUE;
+ conn_dict = nm_connection_to_dbus (conn, NM_CONNECTION_SERIALIZE_ALL);
+ _nm_utils_is_manager_process = FALSE;
+ g_object_unref (conn);
+
+ ip6_dict = g_variant_lookup_value (conn_dict, NM_SETTING_IP6_CONFIG_SETTING_NAME, NM_VARIANT_TYPE_SETTING);
+ g_assert (ip6_dict != NULL);
+
+ value = g_variant_lookup_value (ip6_dict, NM_SETTING_IP_CONFIG_GATEWAY, G_VARIANT_TYPE_STRING);
+ g_assert (value != NULL);
+ g_assert_cmpstr (g_variant_get_string (value, NULL), ==, "abcd::1");
+
+ value = g_variant_lookup_value (ip6_dict, NM_SETTING_IP_CONFIG_ADDRESSES, G_VARIANT_TYPE ("a(ayuay)"));
+ g_assert (value != NULL);
+
+ g_variant_iter_init (&iter, value);
+ while (g_variant_iter_next (&iter, "(@ayu@ay)", NULL, NULL, &gateway_var)) {
+ const guint8 *gateway_bytes;
+ gsize length;
+
+ gateway_bytes = g_variant_get_fixed_array (gateway_var, &length, 1);
+ g_assert_cmpint (length, ==, 16);
+ g_assert_cmpstr (nm_utils_inet6_ntop ((struct in6_addr *) gateway_bytes, NULL), ==, "abcd::1");
+ g_variant_unref (gateway_var);
+ }
+ g_variant_unref (value);
+
+ g_variant_unref (ip6_dict);
+
+ /* When deserializing an old-style connection, the first non-0 gateway in
+ * ipv6.addresses is copied to :gateway.
+ */
+ NMTST_VARIANT_EDITOR (conn_dict,
+ NMTST_VARIANT_DROP_PROPERTY (NM_SETTING_IP6_CONFIG_SETTING_NAME,
+ NM_SETTING_IP_CONFIG_GATEWAY);
+ NMTST_VARIANT_DROP_PROPERTY (NM_SETTING_IP6_CONFIG_SETTING_NAME,
+ "address-data");
+ );
+
+ conn = nm_simple_connection_new_from_dbus (conn_dict, &error);
+ g_assert_no_error (error);
+
+ s_ip6 = (NMSettingIPConfig *) nm_connection_get_setting_ip6_config (conn);
+ g_assert_cmpstr (nm_setting_ip_config_get_gateway (s_ip6), ==, "abcd::1");
+
+ g_object_unref (conn);
+
+ /* Try again with the gateway in the second address. */
+ g_variant_builder_init (&addrs_builder, G_VARIANT_TYPE ("a(ayuay)"));
+ g_variant_builder_add (&addrs_builder, "(@ayu@ay)",
+ g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
+ addr_bytes_0, 16, 1),
+ 64,
+ g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
+ &in6addr_any, 16, 1));
+ g_variant_builder_add (&addrs_builder, "(@ayu@ay)",
+ g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
+ addr_bytes_1, 16, 1),
+ 64,
+ g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
+ gateway_bytes_1, 16, 1));
+
+ NMTST_VARIANT_EDITOR (conn_dict,
+ NMTST_VARIANT_CHANGE_PROPERTY (NM_SETTING_IP6_CONFIG_SETTING_NAME,
+ "addresses", "a(ayuay)", &addrs_builder);
+ );
+
+ conn = nm_simple_connection_new_from_dbus (conn_dict, &error);
+ g_assert_no_error (error);
+ g_variant_unref (conn_dict);
+
+ s_ip6 = (NMSettingIPConfig *) nm_connection_get_setting_ip6_config (conn);
+ g_assert_cmpstr (nm_setting_ip_config_get_gateway (s_ip6), ==, "abcd::1");
+
+ g_object_unref (conn);
+}
+
+typedef struct {
+ const char *str;
+ const guint8 expected[20];
+ const guint expected_len;
+} HexItem;
+
+static void
+test_hexstr2bin (void)
+{
+ static const HexItem items[] = {
+ { "aaBBCCddDD10496a", { 0xaa, 0xbb, 0xcc, 0xdd, 0xdd, 0x10, 0x49, 0x6a }, 8 },
+ { "aa:bb:cc:dd:10:49:6a", { 0xaa, 0xbb, 0xcc, 0xdd, 0x10, 0x49, 0x6a }, 7 },
+ { "0xccddeeff", { 0xcc, 0xdd, 0xee, 0xff }, 4 },
+ { "1:2:66:77:80", { 0x01, 0x02, 0x66, 0x77, 0x80 }, 5 },
+ { "e", { 0x0e }, 1 },
+ { "aabb1199:" },
+ { ":aabb1199" },
+ { "aabb$$dd" },
+ { "aab:ccc:ddd" },
+ { "aab::ccc:ddd" },
+ };
+ GBytes *b;
+ guint i;
+
+ for (i = 0; i < G_N_ELEMENTS (items); i++) {
+ b = nm_utils_hexstr2bin (items[i].str);
+ if (items[i].expected_len) {
+ g_assert (b);
+ g_assert_cmpint (g_bytes_get_size (b), ==, items[i].expected_len);
+ g_assert (memcmp (g_bytes_get_data (b, NULL), items[i].expected, g_bytes_get_size (b)) == 0);
+ } else
+ g_assert (b == NULL);
+ }
+}
+
+/******************************************************************************/
+
+#define UUID_NIL "00000000-0000-0000-0000-000000000000"
+#define UUID_NS_DNS "6ba7b810-9dad-11d1-80b4-00c04fd430c8"
+
+static void
+_test_uuid (int uuid_type, const char *expected_uuid, const char *str, gssize slen, gpointer type_args)
+{
+ gs_free char *uuid_test = NULL;
+
+ uuid_test = nm_utils_uuid_generate_from_string (str, slen, uuid_type, type_args);
+
+ g_assert (uuid_test);
+ g_assert (nm_utils_is_uuid (uuid_test));
+
+ if (strcmp (uuid_test, expected_uuid)) {
+ g_error ("UUID test failed: type=%d; text=%s, len=%lld, uuid=%s, expected=%s", uuid_type,
+ str, (long long) slen, uuid_test, expected_uuid);
+ }
+
+ if (slen < 0) {
+ /* also test that passing slen==-1 yields the same result as passing strlen(str). */
+ _test_uuid (uuid_type, expected_uuid, str, strlen (str), type_args);
+ } else if (str && slen == 0) {
+ /* also test if we accept NULL for slen==0 */
+ _test_uuid (uuid_type, expected_uuid, NULL, 0, type_args);
+ }
+
+ if (uuid_type == NM_UTILS_UUID_TYPE_VARIANT3 && !type_args) {
+ /* For NM_UTILS_UUID_TYPE_VARIANT3, a missing @type_args is equal to UUID_NIL */
+ _test_uuid (uuid_type, expected_uuid, str, slen, UUID_NIL);
+ }
+}
+
+static void
+test_nm_utils_uuid_generate_from_string (void)
+{
+ _test_uuid (NM_UTILS_UUID_TYPE_LEGACY, "d41d8cd9-8f00-b204-e980-0998ecf8427e", "", -1, NULL);
+ _test_uuid (NM_UTILS_UUID_TYPE_LEGACY, "0cc175b9-c0f1-b6a8-31c3-99e269772661", "a", -1, NULL);
+ _test_uuid (NM_UTILS_UUID_TYPE_LEGACY, "098f6bcd-4621-d373-cade-4e832627b4f6", "test", -1, NULL);
+ _test_uuid (NM_UTILS_UUID_TYPE_LEGACY, "70350f60-27bc-e371-3f6b-76473084309b", "a\0b", 3, NULL);
+ _test_uuid (NM_UTILS_UUID_TYPE_LEGACY, "59c0547b-7fe2-1c15-2cce-e328e8bf6742", "/etc/NetworkManager/system-connections/em1", -1, NULL);
+
+ _test_uuid (NM_UTILS_UUID_TYPE_VARIANT3, "4ae71336-e44b-39bf-b9d2-752e234818a5", "", -1, NULL);
+ _test_uuid (NM_UTILS_UUID_TYPE_VARIANT3, "0531103a-d8fc-3dd4-b972-d98e4750994e", "a", -1, NULL);
+ _test_uuid (NM_UTILS_UUID_TYPE_VARIANT3, "96e17d7a-ac89-38cf-95e1-bf5098da34e1", "test", -1, NULL);
+ _test_uuid (NM_UTILS_UUID_TYPE_VARIANT3, "8156568e-4ae6-3f34-a93e-18e2c6cbbf78", "a\0b", 3, NULL);
+
+ _test_uuid (NM_UTILS_UUID_TYPE_VARIANT3, "c87ee674-4ddc-3efe-a74e-dfe25da5d7b3", "", -1, UUID_NS_DNS);
+ _test_uuid (NM_UTILS_UUID_TYPE_VARIANT3, "4c104dd0-4821-30d5-9ce3-0e7a1f8b7c0d", "a", -1, UUID_NS_DNS);
+ _test_uuid (NM_UTILS_UUID_TYPE_VARIANT3, "45a113ac-c7f2-30b0-90a5-a399ab912716", "test", -1, UUID_NS_DNS);
+ _test_uuid (NM_UTILS_UUID_TYPE_VARIANT3, "002a0ada-f547-375a-bab5-896a11d1927e", "a\0b", 3, UUID_NS_DNS);
+}
+
+/******************************************************************************/
+
+NMTST_DEFINE ();
+
+int main (int argc, char **argv)
+{
+ nmtst_init (&argc, &argv, TRUE);
+
+ /* The tests */
+ g_test_add_func ("/core/general/test_setting_vpn_items", test_setting_vpn_items);
+ g_test_add_func ("/core/general/test_setting_vpn_update_secrets", test_setting_vpn_update_secrets);
+ g_test_add_func ("/core/general/test_setting_vpn_modify_during_foreach", test_setting_vpn_modify_during_foreach);
+ g_test_add_func ("/core/general/test_setting_ip4_config_labels", test_setting_ip4_config_labels);
+ g_test_add_func ("/core/general/test_setting_ip4_config_address_data", test_setting_ip4_config_address_data);
+ g_test_add_func ("/core/general/test_setting_gsm_apn_spaces", test_setting_gsm_apn_spaces);
+ g_test_add_func ("/core/general/test_setting_gsm_apn_bad_chars", test_setting_gsm_apn_bad_chars);
+ g_test_add_func ("/core/general/test_setting_gsm_apn_underscore", test_setting_gsm_apn_underscore);
+ g_test_add_func ("/core/general/test_setting_gsm_without_number", test_setting_gsm_without_number);
+ g_test_add_func ("/core/general/test_setting_to_dbus_all", test_setting_to_dbus_all);
+ g_test_add_func ("/core/general/test_setting_to_dbus_no_secrets", test_setting_to_dbus_no_secrets);
+ g_test_add_func ("/core/general/test_setting_to_dbus_only_secrets", test_setting_to_dbus_only_secrets);
+ g_test_add_func ("/core/general/test_setting_to_dbus_transform", test_setting_to_dbus_transform);
+ g_test_add_func ("/core/general/test_setting_to_dbus_enum", test_setting_to_dbus_enum);
+ g_test_add_func ("/core/general/test_setting_compare_id", test_setting_compare_id);
+ g_test_add_func ("/core/general/test_setting_compare_timestamp", test_setting_compare_timestamp);
+#define ADD_FUNC(func, secret_flags, comp_flags, remove_secret) \
+ g_test_add_data_func_full ("/core/general/" G_STRINGIFY (func), \
+ test_data_compare_secrets_new (secret_flags, comp_flags, remove_secret), \
+ func, g_free)
+ ADD_FUNC (test_setting_compare_secrets, NM_SETTING_SECRET_FLAG_AGENT_OWNED, NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS, TRUE);
+ ADD_FUNC (test_setting_compare_secrets, NM_SETTING_SECRET_FLAG_NOT_SAVED, NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS, TRUE);
+ ADD_FUNC (test_setting_compare_secrets, NM_SETTING_SECRET_FLAG_NONE, NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS, TRUE);
+ ADD_FUNC (test_setting_compare_secrets, NM_SETTING_SECRET_FLAG_NONE, NM_SETTING_COMPARE_FLAG_EXACT, FALSE);
+ ADD_FUNC (test_setting_compare_vpn_secrets, NM_SETTING_SECRET_FLAG_AGENT_OWNED, NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS, TRUE);
+ ADD_FUNC (test_setting_compare_vpn_secrets, NM_SETTING_SECRET_FLAG_NOT_SAVED, NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS, TRUE);
+ ADD_FUNC (test_setting_compare_vpn_secrets, NM_SETTING_SECRET_FLAG_NONE, NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS, TRUE);
+ ADD_FUNC (test_setting_compare_vpn_secrets, NM_SETTING_SECRET_FLAG_NONE, NM_SETTING_COMPARE_FLAG_EXACT, FALSE);
+ g_test_add_func ("/core/general/test_setting_old_uuid", test_setting_old_uuid);
+
+ g_test_add_func ("/core/general/test_connection_to_dbus_setting_name", test_connection_to_dbus_setting_name);
+ g_test_add_func ("/core/general/test_connection_to_dbus_deprecated_props", test_connection_to_dbus_deprecated_props);
+ g_test_add_func ("/core/general/test_setting_new_from_dbus", test_setting_new_from_dbus);
+ g_test_add_func ("/core/general/test_setting_new_from_dbus_transform", test_setting_new_from_dbus_transform);
+ g_test_add_func ("/core/general/test_setting_new_from_dbus_enum", test_setting_new_from_dbus_enum);
+ g_test_add_func ("/core/general/test_connection_replace_settings", test_connection_replace_settings);
+ g_test_add_func ("/core/general/test_connection_replace_settings_from_connection", test_connection_replace_settings_from_connection);
+ g_test_add_func ("/core/general/test_connection_replace_settings_bad", test_connection_replace_settings_bad);
+ g_test_add_func ("/core/general/test_connection_new_from_dbus", test_connection_new_from_dbus);
+ g_test_add_func ("/core/general/test_connection_normalize_virtual_iface_name", test_connection_normalize_virtual_iface_name);
+ g_test_add_func ("/core/general/test_connection_normalize_uuid", test_connection_normalize_uuid);
+ g_test_add_func ("/core/general/test_connection_normalize_type", test_connection_normalize_type);
+ g_test_add_func ("/core/general/test_connection_normalize_slave_type_1", test_connection_normalize_slave_type_1);
+ g_test_add_func ("/core/general/test_connection_normalize_slave_type_2", test_connection_normalize_slave_type_2);
+ g_test_add_func ("/core/general/test_connection_normalize_infiniband_mtu", test_connection_normalize_infiniband_mtu);
+
+ g_test_add_func ("/core/general/test_setting_connection_permissions_helpers", test_setting_connection_permissions_helpers);
+ g_test_add_func ("/core/general/test_setting_connection_permissions_property", test_setting_connection_permissions_property);
+
+ g_test_add_func ("/core/general/test_connection_compare_same", test_connection_compare_same);
+ g_test_add_func ("/core/general/test_connection_compare_key_only_in_a", test_connection_compare_key_only_in_a);
+ g_test_add_func ("/core/general/test_connection_compare_setting_only_in_a", test_connection_compare_setting_only_in_a);
+ g_test_add_func ("/core/general/test_connection_compare_key_only_in_b", test_connection_compare_key_only_in_b);
+ g_test_add_func ("/core/general/test_connection_compare_setting_only_in_b", test_connection_compare_setting_only_in_b);
+
+ g_test_add_func ("/core/general/test_connection_diff_a_only", test_connection_diff_a_only);
+ g_test_add_func ("/core/general/test_connection_diff_same", test_connection_diff_same);
+ g_test_add_func ("/core/general/test_connection_diff_different", test_connection_diff_different);
+ g_test_add_func ("/core/general/test_connection_diff_no_secrets", test_connection_diff_no_secrets);
+ g_test_add_func ("/core/general/test_connection_diff_inferrable", test_connection_diff_inferrable);
+ g_test_add_func ("/core/general/test_connection_good_base_types", test_connection_good_base_types);
+ g_test_add_func ("/core/general/test_connection_bad_base_types", test_connection_bad_base_types);
+
+ g_test_add_func ("/core/general/test_hwaddr_aton_ether_normal", test_hwaddr_aton_ether_normal);
+ g_test_add_func ("/core/general/test_hwaddr_aton_ib_normal", test_hwaddr_aton_ib_normal);
+ g_test_add_func ("/core/general/test_hwaddr_aton_no_leading_zeros", test_hwaddr_aton_no_leading_zeros);
+ g_test_add_func ("/core/general/test_hwaddr_aton_malformed", test_hwaddr_aton_malformed);
+ g_test_add_func ("/core/general/test_hwaddr_equal", test_hwaddr_equal);
+ g_test_add_func ("/core/general/test_hwaddr_canonical", test_hwaddr_canonical);
+
+ g_test_add_func ("/core/general/test_ip4_prefix_to_netmask", test_ip4_prefix_to_netmask);
+ g_test_add_func ("/core/general/test_ip4_netmask_to_prefix", test_ip4_netmask_to_prefix);
+
+ g_test_add_func ("/core/general/test_connection_changed_signal", test_connection_changed_signal);
+ g_test_add_func ("/core/general/test_setting_connection_changed_signal", test_setting_connection_changed_signal);
+ g_test_add_func ("/core/general/test_setting_bond_changed_signal", test_setting_bond_changed_signal);
+ g_test_add_func ("/core/general/test_setting_ip4_changed_signal", test_setting_ip4_changed_signal);
+ g_test_add_func ("/core/general/test_setting_ip6_changed_signal", test_setting_ip6_changed_signal);
+ g_test_add_func ("/core/general/test_setting_vlan_changed_signal", test_setting_vlan_changed_signal);
+ g_test_add_func ("/core/general/test_setting_vpn_changed_signal", test_setting_vpn_changed_signal);
+ g_test_add_func ("/core/general/test_setting_wired_changed_signal", test_setting_wired_changed_signal);
+ g_test_add_func ("/core/general/test_setting_wireless_changed_signal", test_setting_wireless_changed_signal);
+ g_test_add_func ("/core/general/test_setting_wireless_security_changed_signal", test_setting_wireless_security_changed_signal);
+ g_test_add_func ("/core/general/test_setting_802_1x_changed_signal", test_setting_802_1x_changed_signal);
+ g_test_add_func ("/core/general/test_setting_ip4_gateway", test_setting_ip4_gateway);
+ g_test_add_func ("/core/general/test_setting_ip6_gateway", test_setting_ip6_gateway);
+
+ g_test_add_func ("/core/general/hexstr2bin", test_hexstr2bin);
+ g_test_add_func ("/core/general/test_nm_utils_uuid_generate_from_string", test_nm_utils_uuid_generate_from_string);
+
+ return g_test_run ();
+}
+
diff --git a/libnm-core/tests/test-secrets.c b/libnm-core/tests/test-secrets.c
new file mode 100644
index 000000000..1254dfffe
--- /dev/null
+++ b/libnm-core/tests/test-secrets.c
@@ -0,0 +1,766 @@
+/* -*- 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 2008 - 2011 Red Hat, Inc.
+ *
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <string.h>
+
+#include "nm-setting-8021x.h"
+#include "nm-setting-cdma.h"
+#include "nm-setting-connection.h"
+#include "nm-setting-gsm.h"
+#include "nm-setting-ip4-config.h"
+#include "nm-setting-ppp.h"
+#include "nm-setting-pppoe.h"
+#include "nm-setting-vpn.h"
+#include "nm-setting-wired.h"
+#include "nm-setting-wireless-security.h"
+#include "nm-setting-wireless.h"
+#include "nm-simple-connection.h"
+#include "nm-utils.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"
+#define TEST_NEED_SECRETS_EAP_TLS_PRIVATE_KEY TEST_CERT_DIR "/test_key_and_cert.pem"
+
+static gboolean
+find_hints_item (GPtrArray *hints, const char *item)
+{
+ int i;
+
+ for (i = 0; i < hints->len; i++) {
+ if (!strcmp (item, (const char *) g_ptr_array_index (hints, i)))
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static NMConnection *
+make_tls_connection (const char *detail, NMSetting8021xCKScheme scheme)
+{
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+ NMSetting8021x *s_8021x;
+ NMSettingWired *s_wired;
+ NMSettingIP4Config *s_ip4;
+ char *uuid;
+ gboolean success;
+ GError *error = NULL;
+
+ connection = nm_simple_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 Need TLS Secrets",
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
+ 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));
+
+ /* Wireless security setting */
+ s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_8021x));
+
+ g_object_set (s_8021x, NM_SETTING_802_1X_IDENTITY, "Bill Smith", NULL);
+
+ nm_setting_802_1x_add_eap_method (s_8021x, "tls");
+
+ success = nm_setting_802_1x_set_ca_cert (s_8021x,
+ TEST_NEED_SECRETS_EAP_TLS_CA_CERT,
+ scheme,
+ NULL,
+ &error);
+ ASSERT (success == TRUE,
+ detail, "failed to set CA certificate '%s': %s",
+ TEST_NEED_SECRETS_EAP_TLS_CA_CERT, error->message);
+
+ success = nm_setting_802_1x_set_client_cert (s_8021x,
+ TEST_NEED_SECRETS_EAP_TLS_CLIENT_CERT,
+ scheme,
+ NULL,
+ &error);
+ ASSERT (success == TRUE,
+ detail, "failed to set client certificate '%s': %s",
+ TEST_NEED_SECRETS_EAP_TLS_CLIENT_CERT, error->message);
+
+ success = nm_setting_802_1x_set_private_key (s_8021x,
+ TEST_NEED_SECRETS_EAP_TLS_PRIVATE_KEY,
+ "test",
+ scheme,
+ NULL,
+ &error);
+ ASSERT (success == TRUE,
+ detail, "failed to set private key '%s': %s",
+ TEST_NEED_SECRETS_EAP_TLS_PRIVATE_KEY, error->message);
+
+ /* 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_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
+
+ ASSERT (nm_connection_verify (connection, &error) == TRUE,
+ detail, "failed to verify connection: %s",
+ (error && error->message) ? error->message : "(unknown)");
+
+ return connection;
+}
+
+static void
+test_need_tls_secrets_path (void)
+{
+ NMConnection *connection;
+ const char *setting_name;
+ GPtrArray *hints = NULL;
+
+ connection = make_tls_connection ("need-tls-secrets-path-key", NM_SETTING_802_1X_CK_SCHEME_PATH);
+ ASSERT (connection != NULL,
+ "need-tls-secrets-path-key",
+ "error creating test connection");
+
+ /* Ensure we don't need any secrets since we just set up the connection */
+ setting_name = nm_connection_need_secrets (connection, &hints);
+ ASSERT (setting_name == NULL,
+ "need-tls-secrets-path-key",
+ "secrets are unexpectedly required");
+ ASSERT (hints == NULL,
+ "need-tls-secrets-path-key",
+ "hints should be NULL since no secrets were required");
+
+ /* Connection is good; clear secrets and ensure private key password is then required */
+ nm_connection_clear_secrets (connection);
+
+ hints = NULL;
+ setting_name = nm_connection_need_secrets (connection, &hints);
+ ASSERT (setting_name != NULL,
+ "need-tls-secrets-path-key-password",
+ "unexpected secrets success");
+ ASSERT (strcmp (setting_name, NM_SETTING_802_1X_SETTING_NAME) == 0,
+ "need-tls-secrets-path-key-password",
+ "unexpected setting secrets required");
+
+ ASSERT (hints != NULL,
+ "need-tls-secrets-path-key-password",
+ "expected returned secrets hints");
+ ASSERT (find_hints_item (hints, NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD),
+ "need-tls-secrets-path-key-password",
+ "expected to require private key password, but it wasn't");
+
+ g_object_unref (connection);
+}
+
+static void
+test_need_tls_secrets_blob (void)
+{
+ NMConnection *connection;
+ const char *setting_name;
+ GPtrArray *hints = NULL;
+
+ connection = make_tls_connection ("need-tls-secrets-blob-key", NM_SETTING_802_1X_CK_SCHEME_BLOB);
+ ASSERT (connection != NULL,
+ "need-tls-secrets-blob-key",
+ "error creating test connection");
+
+ /* Ensure we don't need any secrets since we just set up the connection */
+ setting_name = nm_connection_need_secrets (connection, &hints);
+ ASSERT (setting_name == NULL,
+ "need-tls-secrets-blob-key",
+ "secrets are unexpectedly required");
+ ASSERT (hints == NULL,
+ "need-tls-secrets-blob-key",
+ "hints should be NULL since no secrets were required");
+
+ /* Clear secrets and ensure password is again required */
+ nm_connection_clear_secrets (connection);
+
+ hints = NULL;
+ setting_name = nm_connection_need_secrets (connection, &hints);
+ ASSERT (setting_name != NULL,
+ "need-tls-secrets-blob-key-password",
+ "unexpected secrets success");
+ ASSERT (strcmp (setting_name, NM_SETTING_802_1X_SETTING_NAME) == 0,
+ "need-tls-secrets-blob-key-password",
+ "unexpected setting secrets required");
+
+ ASSERT (hints != NULL,
+ "need-tls-secrets-blob-key-password",
+ "expected returned secrets hints");
+ ASSERT (find_hints_item (hints, NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD),
+ "need-tls-secrets-blob-key-password",
+ "expected to require private key password, but it wasn't");
+
+ g_object_unref (connection);
+}
+
+static NMConnection *
+make_tls_phase2_connection (const char *detail, NMSetting8021xCKScheme scheme)
+{
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+ NMSetting8021x *s_8021x;
+ NMSettingWired *s_wired;
+ NMSettingIP4Config *s_ip4;
+ char *uuid;
+ gboolean success;
+ GError *error = NULL;
+
+ connection = nm_simple_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 Need TLS Secrets",
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
+ 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));
+
+ /* Wireless security setting */
+ s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
+ nm_connection_add_setting (connection, NM_SETTING (s_8021x));
+
+ g_object_set (s_8021x, NM_SETTING_802_1X_ANONYMOUS_IDENTITY, "blahblah", NULL);
+ g_object_set (s_8021x, NM_SETTING_802_1X_IDENTITY, "Bill Smith", NULL);
+
+ nm_setting_802_1x_add_eap_method (s_8021x, "ttls");
+ g_object_set (s_8021x, NM_SETTING_802_1X_PHASE2_AUTH, "tls", NULL);
+
+ success = nm_setting_802_1x_set_phase2_ca_cert (s_8021x,
+ TEST_NEED_SECRETS_EAP_TLS_CA_CERT,
+ scheme,
+ NULL,
+ &error);
+ ASSERT (success == TRUE,
+ detail, "failed to set phase2 CA certificate '%s': %s",
+ TEST_NEED_SECRETS_EAP_TLS_CA_CERT, error->message);
+
+ success = nm_setting_802_1x_set_phase2_client_cert (s_8021x,
+ TEST_NEED_SECRETS_EAP_TLS_CLIENT_CERT,
+ scheme,
+ NULL,
+ &error);
+ ASSERT (success == TRUE,
+ detail, "failed to set phase2 client certificate '%s': %s",
+ TEST_NEED_SECRETS_EAP_TLS_CLIENT_CERT, error->message);
+
+ success = nm_setting_802_1x_set_phase2_private_key (s_8021x,
+ TEST_NEED_SECRETS_EAP_TLS_PRIVATE_KEY,
+ "test",
+ scheme,
+ NULL,
+ &error);
+ ASSERT (success == TRUE,
+ detail, "failed to set phase2 private key '%s': %s",
+ TEST_NEED_SECRETS_EAP_TLS_PRIVATE_KEY, error->message);
+
+ /* 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_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
+
+ ASSERT (nm_connection_verify (connection, &error) == TRUE,
+ detail, "failed to verify connection: %s",
+ (error && error->message) ? error->message : "(unknown)");
+
+ return connection;
+}
+
+static void
+test_need_tls_phase2_secrets_path (void)
+{
+ NMConnection *connection;
+ const char *setting_name;
+ GPtrArray *hints = NULL;
+
+ connection = make_tls_phase2_connection ("need-tls-phase2-secrets-path-key",
+ NM_SETTING_802_1X_CK_SCHEME_PATH);
+ ASSERT (connection != NULL,
+ "need-tls-phase2-secrets-path-key",
+ "error creating test connection");
+
+ /* Ensure we don't need any secrets since we just set up the connection */
+ setting_name = nm_connection_need_secrets (connection, &hints);
+ ASSERT (setting_name == NULL,
+ "need-tls-phase2-secrets-path-key",
+ "secrets are unexpectedly required");
+ ASSERT (hints == NULL,
+ "need-tls-phase2-secrets-path-key",
+ "hints should be NULL since no secrets were required");
+
+ /* Connection is good; clear secrets and ensure private key password is then required */
+ nm_connection_clear_secrets (connection);
+
+ hints = NULL;
+ setting_name = nm_connection_need_secrets (connection, &hints);
+ ASSERT (setting_name != NULL,
+ "need-tls-phase2-secrets-path-key-password",
+ "unexpected secrets success");
+ ASSERT (strcmp (setting_name, NM_SETTING_802_1X_SETTING_NAME) == 0,
+ "need-tls-phase2-secrets-path-key-password",
+ "unexpected setting secrets required");
+
+ ASSERT (hints != NULL,
+ "need-tls-phase2-secrets-path-key-password",
+ "expected returned secrets hints");
+ ASSERT (find_hints_item (hints, NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD),
+ "need-tls-phase2-secrets-path-key-password",
+ "expected to require private key password, but it wasn't");
+
+ g_object_unref (connection);
+}
+
+static void
+test_need_tls_phase2_secrets_blob (void)
+{
+ NMConnection *connection;
+ const char *setting_name;
+ GPtrArray *hints = NULL;
+
+ connection = make_tls_phase2_connection ("need-tls-phase2-secrets-blob-key",
+ NM_SETTING_802_1X_CK_SCHEME_BLOB);
+ ASSERT (connection != NULL,
+ "need-tls-phase2-secrets-blob-key",
+ "error creating test connection");
+
+ /* Ensure we don't need any secrets since we just set up the connection */
+ setting_name = nm_connection_need_secrets (connection, &hints);
+ ASSERT (setting_name == NULL,
+ "need-tls-phase2-secrets-blob-key",
+ "secrets are unexpectedly required");
+ ASSERT (hints == NULL,
+ "need-tls-phase2-secrets-blob-key",
+ "hints should be NULL since no secrets were required");
+
+ /* Connection is good; clear secrets and ensure private key password is then required */
+ nm_connection_clear_secrets (connection);
+
+ hints = NULL;
+ setting_name = nm_connection_need_secrets (connection, &hints);
+ ASSERT (setting_name != NULL,
+ "need-tls-phase2-secrets-blob-key-password",
+ "unexpected secrets success");
+ ASSERT (strcmp (setting_name, NM_SETTING_802_1X_SETTING_NAME) == 0,
+ "need-tls-phase2-secrets-blob-key-password",
+ "unexpected setting secrets required");
+
+ ASSERT (hints != NULL,
+ "need-tls-phase2-secrets-blob-key-password",
+ "expected returned secrets hints");
+ ASSERT (find_hints_item (hints, NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD),
+ "need-tls-phase2-secrets-blob-key-password",
+ "expected to require private key password, but it wasn't");
+
+ g_object_unref (connection);
+}
+
+static NMConnection *
+wifi_connection_new (void)
+{
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+ NMSettingWireless *s_wifi;
+ NMSettingWirelessSecurity *s_wsec;
+ unsigned char tmpssid[] = { 0x31, 0x33, 0x33, 0x37 };
+ char *uuid;
+ GBytes *ssid;
+
+ connection = nm_simple_connection_new ();
+ g_assert (connection);
+
+ /* Connection setting */
+ s_con = (NMSettingConnection *) nm_setting_connection_new ();
+ g_assert (s_con);
+
+ uuid = nm_utils_uuid_generate ();
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_ID, "Test Wireless",
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NM_SETTING_CONNECTION_AUTOCONNECT, FALSE,
+ NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
+ NULL);
+ g_free (uuid);
+ nm_connection_add_setting (connection, NM_SETTING (s_con));
+
+ /* Wireless setting */
+ s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
+ g_assert (s_wifi);
+
+ ssid = g_bytes_new (tmpssid, sizeof (tmpssid));
+ g_object_set (s_wifi,
+ NM_SETTING_WIRELESS_SSID, ssid,
+ NULL);
+ g_bytes_unref (ssid);
+ nm_connection_add_setting (connection, NM_SETTING (s_wifi));
+
+ /* Wifi security */
+ s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
+ g_assert (s_wsec);
+
+ g_object_set (G_OBJECT (s_wsec),
+ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "none",
+ NULL);
+ nm_connection_add_setting (connection, NM_SETTING (s_wsec));
+
+ return connection;
+}
+
+static GVariant *
+build_wep_secrets (const char *wepkey)
+{
+ GVariantBuilder builder;
+
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
+ g_variant_builder_add (&builder, "{sv}",
+ NM_SETTING_WIRELESS_SECURITY_WEP_KEY0,
+ g_variant_new_string (wepkey));
+ g_variant_builder_add (&builder, "{sv}",
+ NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE,
+ g_variant_new_uint32 (NM_WEP_KEY_TYPE_KEY));
+
+ return g_variant_builder_end (&builder);
+}
+
+static void
+test_update_secrets_wifi_single_setting (void)
+{
+ NMConnection *connection;
+ NMSettingWirelessSecurity *s_wsec;
+ GVariant *secrets;
+ GError *error = NULL;
+ gboolean success;
+ const char *wepkey = "11111111111111111111111111";
+ const char *tmp;
+
+ /* Test update with a hashed setting of 802-11-wireless secrets */
+
+ connection = wifi_connection_new ();
+
+ secrets = build_wep_secrets (wepkey);
+ success = nm_connection_update_secrets (connection,
+ NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ secrets,
+ &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ g_variant_unref (secrets);
+
+ /* Make sure the secret is now in the connection */
+ s_wsec = nm_connection_get_setting_wireless_security (connection);
+ g_assert (s_wsec);
+ tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 0);
+ g_assert_cmpstr (tmp, ==, wepkey);
+
+ g_object_unref (connection);
+}
+
+static void
+test_update_secrets_wifi_full_hash (void)
+{
+ NMConnection *connection;
+ NMSettingWirelessSecurity *s_wsec;
+ GVariantBuilder builder;
+ GVariant *all;
+ GError *error = NULL;
+ gboolean success;
+ 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 ();
+
+ g_variant_builder_init (&builder, NM_VARIANT_TYPE_CONNECTION);
+ g_variant_builder_add (&builder, "{s@a{sv}}",
+ NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ build_wep_secrets (wepkey));
+ all = g_variant_builder_end (&builder);
+
+ success = nm_connection_update_secrets (connection,
+ NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ all,
+ &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ g_variant_unref (all);
+
+ /* Make sure the secret is now in the connection */
+ s_wsec = nm_connection_get_setting_wireless_security (connection);
+ g_assert (s_wsec);
+ tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 0);
+ g_assert_cmpstr (tmp, ==, wepkey);
+
+ g_object_unref (connection);
+}
+
+static void
+test_update_secrets_wifi_bad_setting_name (void)
+{
+ NMConnection *connection;
+ GVariant *secrets;
+ GError *error = NULL;
+ 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 ();
+
+ secrets = build_wep_secrets (wepkey);
+
+ success = nm_connection_update_secrets (connection,
+ "asdfasdfasdfasf",
+ secrets,
+ &error);
+ g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_SETTING_NOT_FOUND);
+ g_assert (success == FALSE);
+
+ g_variant_unref (secrets);
+
+ g_object_unref (connection);
+}
+
+static void
+test_update_secrets_whole_connection (void)
+{
+ NMConnection *connection;
+ NMSettingWirelessSecurity *s_wsec;
+ GVariant *secrets;
+ GError *error = NULL;
+ 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 dictionary */
+ secrets = nm_connection_to_dbus (connection, NM_CONNECTION_SERIALIZE_ALL);
+ NMTST_VARIANT_EDITOR (secrets,
+ NMTST_VARIANT_ADD_PROPERTY (NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NM_SETTING_WIRELESS_SECURITY_WEP_KEY0,
+ "s",
+ wepkey);
+ );
+
+ success = nm_connection_update_secrets (connection, NULL, secrets, &error);
+ g_assert_no_error (error);
+ g_assert (success == TRUE);
+
+ g_variant_unref (secrets);
+
+ s_wsec = nm_connection_get_setting_wireless_security (connection);
+ g_assert (s_wsec);
+ g_assert_cmpstr (nm_setting_wireless_security_get_wep_key (s_wsec, 0), ==, wepkey);
+
+ g_object_unref (connection);
+}
+
+static void
+test_update_secrets_whole_connection_empty_hash (void)
+{
+ NMConnection *connection;
+ GVariant *secrets;
+ GError *error = NULL;
+ gboolean success;
+
+ /* Test that updating secrets with an empty connection hash returns success */
+
+ connection = wifi_connection_new ();
+ secrets = g_variant_new_array (G_VARIANT_TYPE ("{sa{sv}}"), NULL, 0);
+ success = nm_connection_update_secrets (connection, NULL, secrets, &error);
+ g_assert_no_error (error);
+ g_assert (success == TRUE);
+ g_variant_unref (secrets);
+ g_object_unref (connection);
+}
+
+static void
+test_update_secrets_whole_connection_bad_setting (void)
+{
+ NMConnection *connection;
+ NMSettingWirelessSecurity *s_wsec;
+ GVariant *secrets, *copy, *setting_hash;
+ const char *setting_name;
+ GVariantBuilder conn_builder;
+ GVariantIter conn_iter;
+ GError *error = NULL;
+ 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 ();
+ s_wsec = nm_connection_get_setting_wireless_security (connection);
+ g_assert (s_wsec != NULL);
+ g_object_set (G_OBJECT (s_wsec),
+ NM_SETTING_WIRELESS_SECURITY_WEP_KEY0, wepkey,
+ NULL);
+
+ /* Build up the secrets hash */
+ secrets = nm_connection_to_dbus (connection, NM_CONNECTION_SERIALIZE_ALL);
+
+ /* Copy the dict, renaming the wireless-security setting in the process
+ * (so we ensure libnm is returning the right error when it finds an entry
+ * in the connection hash that doesn't match any setting in the connection).
+ */
+ g_variant_builder_init (&conn_builder, NM_VARIANT_TYPE_CONNECTION);
+ g_variant_iter_init (&conn_iter, secrets);
+ while (g_variant_iter_next (&conn_iter, "{&s@a{sv}}", &setting_name, &setting_hash)) {
+ if (strcmp (setting_name, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME) == 0)
+ setting_name = "asdfasdfasdfasdf";
+
+ g_variant_builder_add (&conn_builder, "{s@a{sv}}", setting_name, setting_hash);
+ g_variant_unref (setting_hash);
+ }
+ copy = g_variant_builder_end (&conn_builder);
+ g_variant_unref (secrets);
+
+ success = nm_connection_update_secrets (connection, NULL, copy, &error);
+ g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_SETTING_NOT_FOUND);
+ g_assert (success == FALSE);
+
+ g_variant_unref (copy);
+ g_object_unref (connection);
+}
+
+static void
+test_update_secrets_whole_connection_empty_base_setting (void)
+{
+ NMConnection *connection;
+ GVariant *secrets, *setting;
+ 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_dbus (connection, NM_CONNECTION_SERIALIZE_ONLY_SECRETS);
+ g_assert_cmpint (g_variant_n_children (secrets), ==, 3);
+
+ setting = g_variant_lookup_value (secrets, NM_SETTING_WIRELESS_SETTING_NAME, NULL);
+ g_assert (setting != NULL);
+ g_variant_unref (setting);
+
+ success = nm_connection_update_secrets (connection,
+ NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ secrets,
+ &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ g_variant_unref (secrets);
+ g_object_unref (connection);
+}
+
+static void
+test_update_secrets_null_setting_name_with_setting_hash (void)
+{
+ NMConnection *connection;
+ GVariant *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 = build_wep_secrets (wepkey);
+
+ g_test_expect_message ("libnm", G_LOG_LEVEL_CRITICAL,
+ "*nm_connection_update_secrets*setting_name != NULL || full_connection*");
+ success = nm_connection_update_secrets (connection, NULL, secrets, &error);
+ g_test_assert_expected_messages ();
+ g_assert_no_error (error);
+ g_assert (!success);
+
+ g_variant_unref (secrets);
+ g_object_unref (connection);
+}
+
+NMTST_DEFINE ();
+
+int
+main (int argc, char **argv)
+{
+ char *base;
+
+#if !GLIB_CHECK_VERSION (2, 35, 0)
+ g_type_init ();
+#endif
+
+ nmtst_init (&argc, &argv, TRUE);
+
+ /* The tests */
+ test_need_tls_secrets_path ();
+ test_need_tls_secrets_blob ();
+ test_need_tls_phase2_secrets_path ();
+ test_need_tls_phase2_secrets_blob ();
+
+ test_update_secrets_wifi_single_setting ();
+ test_update_secrets_wifi_full_hash ();
+ test_update_secrets_wifi_bad_setting_name ();
+
+ test_update_secrets_whole_connection ();
+ test_update_secrets_whole_connection_empty_hash ();
+ test_update_secrets_whole_connection_bad_setting ();
+ 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);
+ g_free (base);
+ return 0;
+}
+
diff --git a/libnm-core/tests/test-setting-8021x.c b/libnm-core/tests/test-setting-8021x.c
new file mode 100644
index 000000000..637ab81c1
--- /dev/null
+++ b/libnm-core/tests/test-setting-8021x.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, 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 2008 - 2011 Red Hat, Inc.
+ *
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <string.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,
+ GBytes *key)
+{
+ char *contents = NULL;
+ gsize len = 0;
+ GError *error = NULL;
+ gboolean success;
+
+ success = g_file_get_contents (key_path, &contents, &len, &error);
+ ASSERT (success == TRUE,
+ test, "failed to read blob key file: %s", error->message);
+
+ ASSERT (len > 0, test, "blob key file invalid (size 0)");
+
+ ASSERT (len == g_bytes_get_size (key),
+ test, "blob key file (%d) and setting key data (%d) lengths don't match",
+ len, g_bytes_get_size (key));
+
+ ASSERT (memcmp (contents, g_bytes_get_data (key, NULL), len) == 0,
+ test, "blob key file and blob key data don't match");
+
+ g_free (contents);
+}
+
+#define SCHEME_PATH "file://"
+
+static void
+check_scheme_path (GBytes *value, const char *path)
+{
+ const guint8 *p = g_bytes_get_data (value, NULL);
+
+ g_assert (memcmp (p, SCHEME_PATH, strlen (SCHEME_PATH)) == 0);
+ p += strlen (SCHEME_PATH);
+ g_assert (memcmp (p, path, strlen (path)) == 0);
+ p += strlen (path);
+ g_assert (*p == '\0');
+}
+
+static void
+test_private_key_import (const char *path,
+ const char *password,
+ NMSetting8021xCKScheme scheme)
+{
+ NMSetting8021x *s_8021x;
+ gboolean success;
+ NMSetting8021xCKFormat format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
+ NMSetting8021xCKFormat tmp_fmt;
+ GError *error = NULL;
+ GBytes *tmp_key = NULL, *client_cert = NULL;
+ const char *pw;
+
+ s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
+ ASSERT (s_8021x != NULL, "private-key-import", "setting was NULL");
+
+ success = nm_setting_802_1x_set_private_key (s_8021x,
+ path,
+ password,
+ scheme,
+ &format,
+ &error);
+ ASSERT (success == TRUE,
+ "private-key-import", "error reading private key: %s", error->message);
+ ASSERT (format != NM_SETTING_802_1X_CK_FORMAT_UNKNOWN,
+ "private-key-import", "unexpected private key format (got %d)", format);
+ tmp_fmt = nm_setting_802_1x_get_private_key_format (s_8021x);
+ ASSERT (tmp_fmt == format,
+ "private-key-import", "unexpected re-read private key format (expected %d, got %d)",
+ format, tmp_fmt);
+
+ /* Make sure the password is what we expect */
+ pw = nm_setting_802_1x_get_private_key_password (s_8021x);
+ ASSERT (pw != NULL,
+ "private-key-import", "failed to get previous private key password");
+ ASSERT (strcmp (pw, password) == 0,
+ "private-key-import", "failed to compare private key password");
+
+ if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) {
+ tmp_key = nm_setting_802_1x_get_private_key_blob (s_8021x);
+ ASSERT (tmp_key != NULL, "private-key-import", "missing private key blob");
+ compare_blob_data ("private-key-import", path, tmp_key);
+ } else if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH) {
+ g_object_get (s_8021x, NM_SETTING_802_1X_PRIVATE_KEY, &tmp_key, NULL);
+ ASSERT (tmp_key != NULL, "private-key-import", "missing private key value");
+ check_scheme_path (tmp_key, path);
+ g_bytes_unref (tmp_key);
+ } else
+ g_assert_not_reached ();
+
+ /* If it's PKCS#12 ensure the client cert is the same value */
+ if (format == NM_SETTING_802_1X_CK_FORMAT_PKCS12) {
+ g_object_get (s_8021x, NM_SETTING_802_1X_PRIVATE_KEY, &tmp_key, NULL);
+ ASSERT (tmp_key != NULL, "private-key-import", "missing private key value");
+
+ g_object_get (s_8021x, NM_SETTING_802_1X_CLIENT_CERT, &client_cert, NULL);
+ ASSERT (client_cert != NULL, "private-key-import", "missing client certificate value");
+
+ /* make sure they are the same */
+ ASSERT (g_bytes_equal (tmp_key, client_cert),
+ "private-key-import", "unexpected different private key and client cert data");
+
+ g_bytes_unref (tmp_key);
+ g_bytes_unref (client_cert);
+ }
+
+ g_object_unref (s_8021x);
+}
+
+static void
+test_phase2_private_key_import (const char *path,
+ const char *password,
+ NMSetting8021xCKScheme scheme)
+{
+ NMSetting8021x *s_8021x;
+ gboolean success;
+ NMSetting8021xCKFormat format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
+ NMSetting8021xCKFormat tmp_fmt;
+ GError *error = NULL;
+ GBytes *tmp_key = NULL, *client_cert = NULL;
+ const char *pw;
+
+ s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
+ ASSERT (s_8021x != NULL, "phase2-private-key-import", "setting was NULL");
+
+ success = nm_setting_802_1x_set_phase2_private_key (s_8021x,
+ path,
+ password,
+ scheme,
+ &format,
+ &error);
+ ASSERT (success == TRUE,
+ "phase2-private-key-import", "error reading private key: %s", error->message);
+ ASSERT (format != NM_SETTING_802_1X_CK_FORMAT_UNKNOWN,
+ "phase2-private-key-import", "unexpected private key format");
+ tmp_fmt = nm_setting_802_1x_get_phase2_private_key_format (s_8021x);
+ ASSERT (tmp_fmt == format,
+ "phase2-private-key-import", "unexpected re-read private key format (expected %d, got %d)",
+ format, tmp_fmt);
+
+ /* Make sure the password is what we expect */
+ pw = nm_setting_802_1x_get_phase2_private_key_password (s_8021x);
+ ASSERT (pw != NULL,
+ "phase2-private-key-import", "failed to get previous private key password");
+ ASSERT (strcmp (pw, password) == 0,
+ "phase2-private-key-import", "failed to compare private key password");
+
+ if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) {
+ tmp_key = nm_setting_802_1x_get_phase2_private_key_blob (s_8021x);
+ ASSERT (tmp_key != NULL, "phase2-private-key-import", "missing private key blob");
+ compare_blob_data ("phase2-private-key-import", path, tmp_key);
+ } else if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH) {
+ g_object_get (s_8021x, NM_SETTING_802_1X_PHASE2_PRIVATE_KEY, &tmp_key, NULL);
+ ASSERT (tmp_key != NULL, "phase2-private-key-import", "missing private key value");
+ check_scheme_path (tmp_key, path);
+ } else
+ g_assert_not_reached ();
+
+ /* If it's PKCS#12 ensure the client cert is the same value */
+ if (format == NM_SETTING_802_1X_CK_FORMAT_PKCS12) {
+ g_object_get (s_8021x, NM_SETTING_802_1X_PHASE2_PRIVATE_KEY, &tmp_key, NULL);
+ ASSERT (tmp_key != NULL, "private-key-import", "missing private key value");
+
+ g_object_get (s_8021x, NM_SETTING_802_1X_PHASE2_CLIENT_CERT, &client_cert, NULL);
+ ASSERT (client_cert != NULL, "private-key-import", "missing client certificate value");
+
+ /* make sure they are the same */
+ ASSERT (g_bytes_equal (tmp_key, client_cert),
+ "private-key-import", "unexpected different private key and client cert data");
+
+ g_bytes_unref (tmp_key);
+ g_bytes_unref (client_cert);
+ }
+
+ g_object_unref (s_8021x);
+}
+
+static void
+test_wrong_password_keeps_data (const char *path, const char *password)
+{
+ NMSetting8021x *s_8021x;
+ gboolean success;
+ NMSetting8021xCKFormat format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
+ GError *error = NULL;
+ const char *pw;
+
+ s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
+ ASSERT (s_8021x != NULL, "wrong-password-keeps-data", "setting was NULL");
+
+ success = nm_setting_802_1x_set_private_key (s_8021x,
+ path,
+ password,
+ NM_SETTING_802_1X_CK_SCHEME_BLOB,
+ &format,
+ &error);
+ ASSERT (success == TRUE,
+ "wrong-password-keeps-data", "error reading private key: %s", error->message);
+ ASSERT (format != NM_SETTING_802_1X_CK_FORMAT_UNKNOWN,
+ "wrong-password-keeps-data", "unexpected private key format (got %d)", format);
+
+ /* Now try to set it to something that's not a certificate */
+ format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
+ success = nm_setting_802_1x_set_private_key (s_8021x,
+ "Makefile.am",
+ password,
+ NM_SETTING_802_1X_CK_SCHEME_BLOB,
+ &format,
+ &error);
+ ASSERT (success == FALSE,
+ "wrong-password-keeps-data", "unexpected success reading private key");
+ ASSERT (error != NULL,
+ "wrong-password-keeps-data", "unexpected missing error");
+ ASSERT (format == NM_SETTING_802_1X_CK_FORMAT_UNKNOWN,
+ "wrong-password-keeps-data", "unexpected success reading private key format");
+
+ /* Make sure the password hasn't changed */
+ pw = nm_setting_802_1x_get_private_key_password (s_8021x);
+ ASSERT (pw != NULL,
+ "wrong-password-keeps-data", "failed to get previous private key password");
+ ASSERT (strcmp (pw, password) == 0,
+ "wrong-password-keeps-data", "failed to compare private key password");
+
+ g_object_unref (s_8021x);
+}
+
+static void
+test_clear_private_key (const char *path, const char *password)
+{
+ NMSetting8021x *s_8021x;
+ gboolean success;
+ NMSetting8021xCKFormat format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
+ GError *error = NULL;
+ const char *pw;
+
+ s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
+ ASSERT (s_8021x != NULL, "clear-private-key", "setting was NULL");
+
+ success = nm_setting_802_1x_set_private_key (s_8021x,
+ path,
+ password,
+ NM_SETTING_802_1X_CK_SCHEME_BLOB,
+ &format,
+ &error);
+ ASSERT (success == TRUE,
+ "clear-private-key", "error reading private key: %s", error->message);
+ ASSERT (format != NM_SETTING_802_1X_CK_FORMAT_UNKNOWN,
+ "clear-private-key", "unexpected private key format (got %d)", format);
+
+ /* Make sure the password is what we expect */
+ pw = nm_setting_802_1x_get_private_key_password (s_8021x);
+ ASSERT (pw != NULL,
+ "clear-private-key", "failed to get previous private key password");
+ ASSERT (strcmp (pw, password) == 0,
+ "clear-private-key", "failed to compare private key password");
+
+ /* Now clear it */
+ success = nm_setting_802_1x_set_private_key (s_8021x,
+ NULL,
+ NULL,
+ NM_SETTING_802_1X_CK_SCHEME_BLOB,
+ NULL,
+ &error);
+ ASSERT (success == TRUE,
+ "clear-private-key", "unexpected failure clearing private key");
+ ASSERT (error == NULL,
+ "clear-private-key", "unexpected error clearing private key");
+
+ /* Ensure the password is also now clear */
+ ASSERT (nm_setting_802_1x_get_private_key_password (s_8021x) == NULL,
+ "clear-private-key", "unexpected private key password");
+
+ g_object_unref (s_8021x);
+}
+
+static void
+test_wrong_phase2_password_keeps_data (const char *path, const char *password)
+{
+ NMSetting8021x *s_8021x;
+ gboolean success;
+ NMSetting8021xCKFormat format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
+ GError *error = NULL;
+ const char *pw;
+
+ s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
+ ASSERT (s_8021x != NULL, "wrong-phase2-password-keeps-data", "setting was NULL");
+
+ success = nm_setting_802_1x_set_phase2_private_key (s_8021x,
+ path,
+ password,
+ NM_SETTING_802_1X_CK_SCHEME_BLOB,
+ &format,
+ &error);
+ ASSERT (success == TRUE,
+ "wrong-phase2-password-keeps-data", "error reading private key: %s", error->message);
+ ASSERT (format != NM_SETTING_802_1X_CK_FORMAT_UNKNOWN,
+ "wrong-phase2-password-keeps-data", "unexpected private key format (got %d)", format);
+
+ /* Now try to set it to something that's not a certificate */
+ format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
+ success = nm_setting_802_1x_set_phase2_private_key (s_8021x,
+ "Makefile.am",
+ password,
+ NM_SETTING_802_1X_CK_SCHEME_BLOB,
+ &format,
+ &error);
+ ASSERT (success == FALSE,
+ "wrong-phase2-password-keeps-data", "unexpected success reading private key");
+ ASSERT (error != NULL,
+ "wrong-phase2-password-keeps-data", "unexpected missing error");
+ ASSERT (format == NM_SETTING_802_1X_CK_FORMAT_UNKNOWN,
+ "wrong-phase2-password-keeps-data", "unexpected success reading private key format");
+
+ /* Make sure the password hasn't changed */
+ pw = nm_setting_802_1x_get_phase2_private_key_password (s_8021x);
+ ASSERT (pw != NULL,
+ "wrong-phase2-password-keeps-data", "failed to get previous private key password");
+ ASSERT (strcmp (pw, password) == 0,
+ "wrong-phase2-password-keeps-data", "failed to compare private key password");
+
+ g_object_unref (s_8021x);
+}
+
+static void
+test_clear_phase2_private_key (const char *path, const char *password)
+{
+ NMSetting8021x *s_8021x;
+ gboolean success;
+ NMSetting8021xCKFormat format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
+ GError *error = NULL;
+ const char *pw;
+
+ s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
+ ASSERT (s_8021x != NULL, "clear-phase2-private-key", "setting was NULL");
+
+ success = nm_setting_802_1x_set_phase2_private_key (s_8021x,
+ path,
+ password,
+ NM_SETTING_802_1X_CK_SCHEME_BLOB,
+ &format,
+ &error);
+ ASSERT (success == TRUE,
+ "clear-phase2-private-key", "error reading private key: %s", error->message);
+ ASSERT (format != NM_SETTING_802_1X_CK_FORMAT_UNKNOWN,
+ "clear-phase2-private-key", "unexpected private key format (got %d)", format);
+
+ /* Make sure the password is what we expect */
+ pw = nm_setting_802_1x_get_phase2_private_key_password (s_8021x);
+ ASSERT (pw != NULL,
+ "clear-phase2-private-key", "failed to get previous private key password");
+ ASSERT (strcmp (pw, password) == 0,
+ "clear-phase2-private-key", "failed to compare private key password");
+
+ /* Now clear it */
+ success = nm_setting_802_1x_set_phase2_private_key (s_8021x,
+ NULL,
+ NULL,
+ NM_SETTING_802_1X_CK_SCHEME_BLOB,
+ NULL,
+ &error);
+ ASSERT (success == TRUE,
+ "clear-phase2-private-key", "unexpected failure clearing private key");
+ ASSERT (error == NULL,
+ "clear-phase2-private-key", "unexpected error clearing private key");
+
+ /* Ensure the password is also now clear */
+ ASSERT (nm_setting_802_1x_get_phase2_private_key_password (s_8021x) == NULL,
+ "clear-phase2-private-key", "unexpected private key password");
+
+ g_object_unref (s_8021x);
+}
+
+static void
+do_8021x_test (gconstpointer test_data)
+{
+ char **parts, *path, *password;
+
+ parts = g_strsplit ((const char *) test_data, ", ", -1);
+ g_assert_cmpint (g_strv_length (parts), ==, 2);
+
+ path = g_build_filename (TEST_CERT_DIR, parts[0], NULL);
+ password = parts[1];
+
+ /* Test phase1 and phase2 path scheme */
+ test_private_key_import (path, password, NM_SETTING_802_1X_CK_SCHEME_PATH);
+ test_phase2_private_key_import (path, password, NM_SETTING_802_1X_CK_SCHEME_PATH);
+
+ /* Test phase1 and phase2 blob scheme */
+ test_private_key_import (path, password, NM_SETTING_802_1X_CK_SCHEME_BLOB);
+ test_phase2_private_key_import (path, password, NM_SETTING_802_1X_CK_SCHEME_BLOB);
+
+ /* Test that using a wrong password does not change existing data */
+ test_wrong_password_keeps_data (path, password);
+ test_wrong_phase2_password_keeps_data (path, password);
+
+ /* Test clearing the private key */
+ test_clear_private_key (path, password);
+ test_clear_phase2_private_key (path, password);
+
+ g_free (path);
+ g_strfreev (parts);
+}
+
+NMTST_DEFINE ();
+
+int
+main (int argc, char **argv)
+{
+ nmtst_init (&argc, &argv, TRUE);
+
+ g_test_add_data_func ("/libnm/setting-8021x/key-and-cert",
+ "test_key_and_cert.pem, test",
+ do_8021x_test);
+ g_test_add_data_func ("/libnm/setting-8021x/key-only",
+ "test-key-only.pem, test",
+ do_8021x_test);
+ g_test_add_data_func ("/libnm/setting-8021x/pkcs8-enc-key",
+ "pkcs8-enc-key.pem, 1234567890",
+ do_8021x_test);
+ g_test_add_data_func ("/libnm/setting-8021x/pkcs12",
+ "test-cert.p12, test",
+ do_8021x_test);
+
+ return g_test_run ();
+}
+
diff --git a/libnm-core/tests/test-setting-dcb.c b/libnm-core/tests/test-setting-dcb.c
new file mode 100644
index 000000000..8adab8ce8
--- /dev/null
+++ b/libnm-core/tests/test-setting-dcb.c
@@ -0,0 +1,326 @@
+/* -*- 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 <glib.h>
+#include <string.h>
+#include <nm-utils.h>
+#include <nm-glib-compat.h>
+#include "nm-setting-dcb.h"
+#include "nm-connection.h"
+#include "nm-errors.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_CONNECTION_ERROR, NM_CONNECTION_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_CONNECTION_ERROR, NM_CONNECTION_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_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
+ g_assert (success == FALSE);
+ g_clear_error (&error);
+}
+
+#define TPATH "/libnm/settings/dcb/"
+
+int
+main (int argc, char **argv)
+{
+ g_test_init (&argc, &argv, NULL);
+
+#if !GLIB_CHECK_VERSION (2, 35, 0)
+ g_type_init ();
+#endif
+
+#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-core/tests/test-settings-defaults.c b/libnm-core/tests/test-settings-defaults.c
new file mode 100644
index 000000000..0e7861872
--- /dev/null
+++ b/libnm-core/tests/test-settings-defaults.c
@@ -0,0 +1,133 @@
+/* -*- 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 2008 - 2011 Red Hat, Inc.
+ *
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <string.h>
+
+#include <nm-utils.h>
+
+#include "nm-setting-8021x.h"
+#include "nm-setting-cdma.h"
+#include "nm-setting-connection.h"
+#include "nm-setting-gsm.h"
+#include "nm-setting-ip4-config.h"
+#include "nm-setting-ip6-config.h"
+#include "nm-setting-ppp.h"
+#include "nm-setting-pppoe.h"
+#include "nm-setting-serial.h"
+#include "nm-setting-vpn.h"
+#include "nm-setting-wired.h"
+#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)
+{
+ GParamSpec **property_specs;
+ guint n_property_specs;
+ GObject *setting;
+ int i;
+
+ setting = g_object_new (type, NULL);
+
+ property_specs = g_object_class_list_properties (G_OBJECT_GET_CLASS (setting), &n_property_specs);
+ ASSERT (property_specs != NULL,
+ name, "couldn't find property specs for object of type '%s'",
+ g_type_name (G_OBJECT_TYPE (setting)));
+
+ for (i = 0; i < n_property_specs; i++) {
+ GParamSpec *prop_spec = property_specs[i];
+ GValue value = G_VALUE_INIT;
+ GValue defvalue = G_VALUE_INIT;
+ char *actual, *expected;
+ gboolean ok = FALSE;
+
+ /* Ignore non-fundamental types since they won't really have
+ * defaults.
+ */
+ if (!G_TYPE_IS_FUNDAMENTAL (prop_spec->value_type))
+ continue;
+
+ g_value_init (&value, prop_spec->value_type);
+ g_object_get_property (G_OBJECT (setting), prop_spec->name, &value);
+
+ g_value_init (&defvalue, prop_spec->value_type);
+ g_param_value_set_default (prop_spec, &defvalue);
+
+ actual = g_strdup_value_contents (&value);
+ expected = g_strdup_value_contents (&defvalue);
+
+ if (!strcmp (prop_spec->name, NM_SETTING_NAME)) {
+ /* 'name' is always the setting name, not the default value */
+ ok = !strcmp (nm_setting_get_name (NM_SETTING (setting)), name);
+ g_free (expected);
+ expected = g_strdup (name);
+ } else
+ ok = g_param_value_defaults (prop_spec, &value);
+
+ ASSERT (ok,
+ name, "property '%s' value '%s' not the expected default value '%s'",
+ prop_spec->name, actual, expected);
+
+ g_free (actual);
+ g_free (expected);
+ g_value_unset (&value);
+ g_value_unset (&defvalue);
+ }
+
+ g_free (property_specs);
+ g_object_unref (setting);
+}
+
+int
+main (int argc, char **argv)
+{
+ char *base;
+
+#if !GLIB_CHECK_VERSION (2, 35, 0)
+ g_type_init ();
+#endif
+
+ /* The tests */
+ test_defaults (NM_TYPE_SETTING_CONNECTION, NM_SETTING_CONNECTION_SETTING_NAME);
+ test_defaults (NM_TYPE_SETTING_802_1X, NM_SETTING_802_1X_SETTING_NAME);
+ test_defaults (NM_TYPE_SETTING_CDMA, NM_SETTING_CDMA_SETTING_NAME);
+ test_defaults (NM_TYPE_SETTING_GSM, NM_SETTING_GSM_SETTING_NAME);
+ test_defaults (NM_TYPE_SETTING_IP4_CONFIG, NM_SETTING_IP4_CONFIG_SETTING_NAME);
+ test_defaults (NM_TYPE_SETTING_IP6_CONFIG, NM_SETTING_IP6_CONFIG_SETTING_NAME);
+ test_defaults (NM_TYPE_SETTING_PPP, NM_SETTING_PPP_SETTING_NAME);
+ test_defaults (NM_TYPE_SETTING_PPPOE, NM_SETTING_PPPOE_SETTING_NAME);
+ test_defaults (NM_TYPE_SETTING_SERIAL, NM_SETTING_SERIAL_SETTING_NAME);
+ test_defaults (NM_TYPE_SETTING_VPN, NM_SETTING_VPN_SETTING_NAME);
+ test_defaults (NM_TYPE_SETTING_WIRED, NM_SETTING_WIRED_SETTING_NAME);
+ test_defaults (NM_TYPE_SETTING_WIRELESS, NM_SETTING_WIRELESS_SETTING_NAME);
+ test_defaults (NM_TYPE_SETTING_WIRELESS_SECURITY, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
+
+ base = g_path_get_basename (argv[0]);
+ fprintf (stdout, "%s: SUCCESS\n", base);
+ g_free (base);
+ return 0;
+}
+
diff --git a/libnm-glib/Makefile.am b/libnm-glib/Makefile.am
index 623bf45d1..20a248112 100644
--- a/libnm-glib/Makefile.am
+++ b/libnm-glib/Makefile.am
@@ -4,7 +4,6 @@ SUBDIRS = . tests
AM_CPPFLAGS = \
-I$(top_srcdir)/include \
- -I$(top_builddir)/include \
-I$(top_srcdir)/libnm-util \
-I$(top_builddir)/libnm-util \
-DG_LOG_DOMAIN=\""libnm-glib"\" \
@@ -18,8 +17,7 @@ BUILT_SOURCES = \
noinst_LTLIBRARIES = \
- libdeprecated-nm-glib.la \
- libnm-glib-test.la
+ libdeprecated-nm-glib.la
#####################################################
# Deprecated original libnm_glib bits
@@ -153,7 +151,7 @@ libnm_glib_la_LIBADD = \
SYMBOL_VIS_FILE=$(srcdir)/libnm-glib.ver
libnm_glib_la_LDFLAGS = -Wl,--version-script=$(SYMBOL_VIS_FILE) \
- -version-info "12:0:8"
+ -version-info "13:0:9"
noinst_PROGRAMS = libnm-glib-test
@@ -177,27 +175,6 @@ libnm_glib_vpn_la_LDFLAGS = -Wl,--version-script=$(srcdir)/libnm-glib-vpn.ver \
BUILT_SOURCES += $(GLIB_GENERATED)
#####################################################
-# Test libnm-glib stuff
-#####################################################
-
-libnm_glib_test_la_CFLAGS = \
- $(GLIB_CFLAGS) \
- $(DBUS_CFLAGS) \
- $(GUDEV_CFLAGS) \
- -DLIBNM_GLIB_TEST \
- -DNMRUNDIR=\"$(nmrundir)\"
-
-libnm_glib_test_la_SOURCES = \
- $(libnminclude_HEADERS) \
- $(libnm_glib_la_SOURCES)
-
-libnm_glib_test_la_LIBADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(GLIB_LIBS) \
- $(DBUS_LIBS) \
- $(GUDEV_LIBS)
-
-#####################################################
nm-vpn-plugin-glue.h: $(top_srcdir)/introspection/nm-vpn-plugin.xml
$(AM_V_GEN) dbus-binding-tool --prefix=nm_vpn_plugin --mode=glib-server --output=$@ $<
diff --git a/libnm-glib/Makefile.in b/libnm-glib/Makefile.in
index 4b169f40c..a6c5d03ad 100644
--- a/libnm-glib/Makefile.in
+++ b/libnm-glib/Makefile.in
@@ -152,48 +152,6 @@ 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_glib_test_la_DEPENDENCIES = \
- $(top_builddir)/libnm-util/libnm-util.la $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
-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 \
- libnm_glib_test_la-nm-device-infiniband.lo \
- libnm_glib_test_la-nm-device-adsl.lo \
- libnm_glib_test_la-nm-device-wifi.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 \
- libnm_glib_test_la-nm-vpn-connection.lo \
- libnm_glib_test_la-nm-types.lo \
- libnm_glib_test_la-nm-object-cache.lo \
- libnm_glib_test_la-nm-active-connection.lo \
- libnm_glib_test_la-nm-dhcp4-config.lo \
- libnm_glib_test_la-nm-ip6-config.lo \
- libnm_glib_test_la-nm-dhcp6-config.lo \
- libnm_glib_test_la-nm-remote-connection.lo \
- libnm_glib_test_la-nm-remote-settings.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
-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) \
- $(libnm_glib_test_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
- $(LDFLAGS) -o $@
libnm_glib_vpn_la_DEPENDENCIES = \
$(top_builddir)/libnm-util/libnm-util.la $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1)
@@ -209,7 +167,7 @@ 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 \
+am__objects_1 = 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 \
@@ -235,7 +193,8 @@ am__objects_4 = libnm_glib_la-nm-object.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
-am_libnm_glib_la_OBJECTS = $(am__objects_4) $(am__objects_1)
+am__objects_2 =
+am_libnm_glib_la_OBJECTS = $(am__objects_1) $(am__objects_2)
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) \
@@ -286,11 +245,11 @@ am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = $(libdeprecated_nm_glib_la_SOURCES) \
- $(libnm_glib_test_la_SOURCES) $(libnm_glib_vpn_la_SOURCES) \
- $(libnm_glib_la_SOURCES) $(libnm_glib_test_SOURCES)
+ $(libnm_glib_vpn_la_SOURCES) $(libnm_glib_la_SOURCES) \
+ $(libnm_glib_test_SOURCES)
DIST_SOURCES = $(libdeprecated_nm_glib_la_SOURCES) \
- $(libnm_glib_test_la_SOURCES) $(libnm_glib_vpn_la_SOURCES) \
- $(libnm_glib_la_SOURCES) $(libnm_glib_test_SOURCES)
+ $(libnm_glib_vpn_la_SOURCES) $(libnm_glib_la_SOURCES) \
+ $(libnm_glib_test_SOURCES)
RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
ctags-recursive dvi-recursive html-recursive info-recursive \
install-data-recursive install-dvi-recursive \
@@ -370,6 +329,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -493,6 +454,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -512,6 +474,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -538,7 +501,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -620,7 +583,6 @@ 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 \
-DG_LOG_DOMAIN=\""libnm-glib"\" \
@@ -631,8 +593,7 @@ AM_CPPFLAGS = \
BUILT_SOURCES = nm-vpn-plugin-glue.h nm-secret-agent-glue.h \
$(GLIB_GENERATED)
noinst_LTLIBRARIES = \
- libdeprecated-nm-glib.la \
- libnm-glib-test.la
+ libdeprecated-nm-glib.la
#####################################################
@@ -762,7 +723,7 @@ libnm_glib_la_LIBADD = \
SYMBOL_VIS_FILE = $(srcdir)/libnm-glib.ver
libnm_glib_la_LDFLAGS = -Wl,--version-script=$(SYMBOL_VIS_FILE) \
- -version-info "12:0:8"
+ -version-info "13:0:9"
libnm_glib_test_SOURCES = libnm-glib-test.c
libnm_glib_test_CFLAGS = $(GLIB_CFLAGS) $(DBUS_CFLAGS)
@@ -779,27 +740,6 @@ libnm_glib_vpn_la_LIBADD = $(top_builddir)/libnm-util/libnm-util.la $(GLIB_LIBS)
libnm_glib_vpn_la_LDFLAGS = -Wl,--version-script=$(srcdir)/libnm-glib-vpn.ver \
-version-info "3:0:2"
-
-#####################################################
-# Test libnm-glib stuff
-#####################################################
-libnm_glib_test_la_CFLAGS = \
- $(GLIB_CFLAGS) \
- $(DBUS_CFLAGS) \
- $(GUDEV_CFLAGS) \
- -DLIBNM_GLIB_TEST \
- -DNMRUNDIR=\"$(nmrundir)\"
-
-libnm_glib_test_la_SOURCES = \
- $(libnminclude_HEADERS) \
- $(libnm_glib_la_SOURCES)
-
-libnm_glib_test_la_LIBADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(GLIB_LIBS) \
- $(DBUS_LIBS) \
- $(GUDEV_LIBS)
-
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libnm-glib.pc libnm-glib-vpn.pc
DISTCLEANFILES = libnm-glib.pc libnm-glib.pc
@@ -908,9 +848,6 @@ clean-noinstLTLIBRARIES:
libdeprecated-nm-glib.la: $(libdeprecated_nm_glib_la_OBJECTS) $(libdeprecated_nm_glib_la_DEPENDENCIES) $(EXTRA_libdeprecated_nm_glib_la_DEPENDENCIES)
$(AM_V_CCLD)$(LINK) $(libdeprecated_nm_glib_la_OBJECTS) $(libdeprecated_nm_glib_la_LIBADD) $(LIBS)
-libnm-glib-test.la: $(libnm_glib_test_la_OBJECTS) $(libnm_glib_test_la_DEPENDENCIES) $(EXTRA_libnm_glib_test_la_DEPENDENCIES)
- $(AM_V_CCLD)$(libnm_glib_test_la_LINK) $(libnm_glib_test_la_OBJECTS) $(libnm_glib_test_la_LIBADD) $(LIBS)
-
libnm-glib-vpn.la: $(libnm_glib_vpn_la_OBJECTS) $(libnm_glib_vpn_la_DEPENDENCIES) $(EXTRA_libnm_glib_vpn_la_DEPENDENCIES)
$(AM_V_CCLD)$(libnm_glib_vpn_la_LINK) -rpath $(libdir) $(libnm_glib_vpn_la_OBJECTS) $(libnm_glib_vpn_la_LIBADD) $(LIBS)
@@ -969,37 +906,6 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-vpn-connection.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_la-nm-wimax-nsp.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test-libnm-glib-test.Po@am__quote@
-@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@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-device.Plo@am__quote@
-@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-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@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-object.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-remote-connection.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-remote-settings.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-secret-agent.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-types.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-vpn-connection.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_test_la-nm-wimax-nsp.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_vpn_la-nm-vpn-enum-types.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_vpn_la-nm-vpn-plugin-ui-interface.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libnm_glib_vpn_la-nm-vpn-plugin-utils.Plo@am__quote@
@@ -1033,223 +939,6 @@ libdeprecated_nm_glib_la-libnm_glib.lo: libnm_glib.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) $(libdeprecated_nm_glib_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libdeprecated_nm_glib_la-libnm_glib.lo `test -f 'libnm_glib.c' || echo '$(srcdir)/'`libnm_glib.c
-libnm_glib_test_la-nm-object.lo: nm-object.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-object.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-object.Tpo -c -o libnm_glib_test_la-nm-object.lo `test -f 'nm-object.c' || echo '$(srcdir)/'`nm-object.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-object.Tpo $(DEPDIR)/libnm_glib_test_la-nm-object.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-object.c' object='libnm_glib_test_la-nm-object.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-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
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-client.c' object='libnm_glib_test_la-nm-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) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-client.lo `test -f 'nm-client.c' || echo '$(srcdir)/'`nm-client.c
-
-libnm_glib_test_la-nm-device.lo: 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) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-device.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-device.Tpo -c -o libnm_glib_test_la-nm-device.lo `test -f 'nm-device.c' || echo '$(srcdir)/'`nm-device.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-device.Tpo $(DEPDIR)/libnm_glib_test_la-nm-device.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device.c' object='libnm_glib_test_la-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) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-device.lo `test -f 'nm-device.c' || echo '$(srcdir)/'`nm-device.c
-
-libnm_glib_test_la-nm-device-ethernet.lo: 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) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-device-ethernet.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-device-ethernet.Tpo -c -o libnm_glib_test_la-nm-device-ethernet.lo `test -f 'nm-device-ethernet.c' || echo '$(srcdir)/'`nm-device-ethernet.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-device-ethernet.Tpo $(DEPDIR)/libnm_glib_test_la-nm-device-ethernet.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-ethernet.c' object='libnm_glib_test_la-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) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-device-ethernet.lo `test -f 'nm-device-ethernet.c' || echo '$(srcdir)/'`nm-device-ethernet.c
-
-libnm_glib_test_la-nm-device-infiniband.lo: 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) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-device-infiniband.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-device-infiniband.Tpo -c -o libnm_glib_test_la-nm-device-infiniband.lo `test -f 'nm-device-infiniband.c' || echo '$(srcdir)/'`nm-device-infiniband.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-device-infiniband.Tpo $(DEPDIR)/libnm_glib_test_la-nm-device-infiniband.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-infiniband.c' object='libnm_glib_test_la-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@)$(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-infiniband.lo `test -f 'nm-device-infiniband.c' || echo '$(srcdir)/'`nm-device-infiniband.c
-
-libnm_glib_test_la-nm-device-adsl.lo: nm-device-adsl.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-adsl.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-device-adsl.Tpo -c -o libnm_glib_test_la-nm-device-adsl.lo `test -f 'nm-device-adsl.c' || echo '$(srcdir)/'`nm-device-adsl.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-device-adsl.Tpo $(DEPDIR)/libnm_glib_test_la-nm-device-adsl.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-adsl.c' object='libnm_glib_test_la-nm-device-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) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-device-adsl.lo `test -f 'nm-device-adsl.c' || echo '$(srcdir)/'`nm-device-adsl.c
-
-libnm_glib_test_la-nm-device-wifi.lo: nm-device-wifi.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-wifi.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-device-wifi.Tpo -c -o libnm_glib_test_la-nm-device-wifi.lo `test -f 'nm-device-wifi.c' || echo '$(srcdir)/'`nm-device-wifi.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-device-wifi.Tpo $(DEPDIR)/libnm_glib_test_la-nm-device-wifi.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-wifi.c' object='libnm_glib_test_la-nm-device-wifi.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-wifi.lo `test -f 'nm-device-wifi.c' || echo '$(srcdir)/'`nm-device-wifi.c
-
-libnm_glib_test_la-nm-device-bt.lo: nm-device-bt.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-bt.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-device-bt.Tpo -c -o libnm_glib_test_la-nm-device-bt.lo `test -f 'nm-device-bt.c' || echo '$(srcdir)/'`nm-device-bt.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-device-bt.Tpo $(DEPDIR)/libnm_glib_test_la-nm-device-bt.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-bt.c' object='libnm_glib_test_la-nm-device-bt.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-bt.lo `test -f 'nm-device-bt.c' || echo '$(srcdir)/'`nm-device-bt.c
-
-libnm_glib_test_la-nm-device-olpc-mesh.lo: nm-device-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) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-device-olpc-mesh.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-device-olpc-mesh.Tpo -c -o libnm_glib_test_la-nm-device-olpc-mesh.lo `test -f 'nm-device-olpc-mesh.c' || echo '$(srcdir)/'`nm-device-olpc-mesh.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-device-olpc-mesh.Tpo $(DEPDIR)/libnm_glib_test_la-nm-device-olpc-mesh.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-olpc-mesh.c' object='libnm_glib_test_la-nm-device-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) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-device-olpc-mesh.lo `test -f 'nm-device-olpc-mesh.c' || echo '$(srcdir)/'`nm-device-olpc-mesh.c
-
-libnm_glib_test_la-nm-device-bond.lo: 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) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-device-bond.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-device-bond.Tpo -c -o libnm_glib_test_la-nm-device-bond.lo `test -f 'nm-device-bond.c' || echo '$(srcdir)/'`nm-device-bond.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-device-bond.Tpo $(DEPDIR)/libnm_glib_test_la-nm-device-bond.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-bond.c' object='libnm_glib_test_la-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) $(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
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-bridge.c' object='libnm_glib_test_la-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) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-device-bridge.lo `test -f 'nm-device-bridge.c' || echo '$(srcdir)/'`nm-device-bridge.c
-
-libnm_glib_test_la-nm-device-vlan.lo: 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) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-device-vlan.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-device-vlan.Tpo -c -o libnm_glib_test_la-nm-device-vlan.lo `test -f 'nm-device-vlan.c' || echo '$(srcdir)/'`nm-device-vlan.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-device-vlan.Tpo $(DEPDIR)/libnm_glib_test_la-nm-device-vlan.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-vlan.c' object='libnm_glib_test_la-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@)$(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
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-access-point.c' object='libnm_glib_test_la-nm-access-point.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-access-point.lo `test -f 'nm-access-point.c' || echo '$(srcdir)/'`nm-access-point.c
-
-libnm_glib_test_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) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-ip4-config.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-ip4-config.Tpo -c -o libnm_glib_test_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)/libnm_glib_test_la-nm-ip4-config.Tpo $(DEPDIR)/libnm_glib_test_la-nm-ip4-config.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-ip4-config.c' object='libnm_glib_test_la-nm-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) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-ip4-config.lo `test -f 'nm-ip4-config.c' || echo '$(srcdir)/'`nm-ip4-config.c
-
-libnm_glib_test_la-nm-device-modem.lo: nm-device-modem.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-modem.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-device-modem.Tpo -c -o libnm_glib_test_la-nm-device-modem.lo `test -f 'nm-device-modem.c' || echo '$(srcdir)/'`nm-device-modem.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-device-modem.Tpo $(DEPDIR)/libnm_glib_test_la-nm-device-modem.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-modem.c' object='libnm_glib_test_la-nm-device-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) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-device-modem.lo `test -f 'nm-device-modem.c' || echo '$(srcdir)/'`nm-device-modem.c
-
-libnm_glib_test_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) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-vpn-connection.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-vpn-connection.Tpo -c -o libnm_glib_test_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)/libnm_glib_test_la-nm-vpn-connection.Tpo $(DEPDIR)/libnm_glib_test_la-nm-vpn-connection.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-vpn-connection.c' object='libnm_glib_test_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) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-vpn-connection.lo `test -f 'nm-vpn-connection.c' || echo '$(srcdir)/'`nm-vpn-connection.c
-
-libnm_glib_test_la-nm-types.lo: nm-types.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-types.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-types.Tpo -c -o libnm_glib_test_la-nm-types.lo `test -f 'nm-types.c' || echo '$(srcdir)/'`nm-types.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-types.Tpo $(DEPDIR)/libnm_glib_test_la-nm-types.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-types.c' object='libnm_glib_test_la-nm-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) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-types.lo `test -f 'nm-types.c' || echo '$(srcdir)/'`nm-types.c
-
-libnm_glib_test_la-nm-object-cache.lo: nm-object-cache.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-object-cache.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-object-cache.Tpo -c -o libnm_glib_test_la-nm-object-cache.lo `test -f 'nm-object-cache.c' || echo '$(srcdir)/'`nm-object-cache.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-object-cache.Tpo $(DEPDIR)/libnm_glib_test_la-nm-object-cache.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-object-cache.c' object='libnm_glib_test_la-nm-object-cache.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-object-cache.lo `test -f 'nm-object-cache.c' || echo '$(srcdir)/'`nm-object-cache.c
-
-libnm_glib_test_la-nm-active-connection.lo: nm-active-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) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-active-connection.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-active-connection.Tpo -c -o libnm_glib_test_la-nm-active-connection.lo `test -f 'nm-active-connection.c' || echo '$(srcdir)/'`nm-active-connection.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-active-connection.Tpo $(DEPDIR)/libnm_glib_test_la-nm-active-connection.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-active-connection.c' object='libnm_glib_test_la-nm-active-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) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-active-connection.lo `test -f 'nm-active-connection.c' || echo '$(srcdir)/'`nm-active-connection.c
-
-libnm_glib_test_la-nm-dhcp4-config.lo: nm-dhcp4-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) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-dhcp4-config.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-dhcp4-config.Tpo -c -o libnm_glib_test_la-nm-dhcp4-config.lo `test -f 'nm-dhcp4-config.c' || echo '$(srcdir)/'`nm-dhcp4-config.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-dhcp4-config.Tpo $(DEPDIR)/libnm_glib_test_la-nm-dhcp4-config.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-dhcp4-config.c' object='libnm_glib_test_la-nm-dhcp4-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) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-dhcp4-config.lo `test -f 'nm-dhcp4-config.c' || echo '$(srcdir)/'`nm-dhcp4-config.c
-
-libnm_glib_test_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) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-ip6-config.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-ip6-config.Tpo -c -o libnm_glib_test_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)/libnm_glib_test_la-nm-ip6-config.Tpo $(DEPDIR)/libnm_glib_test_la-nm-ip6-config.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-ip6-config.c' object='libnm_glib_test_la-nm-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) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-ip6-config.lo `test -f 'nm-ip6-config.c' || echo '$(srcdir)/'`nm-ip6-config.c
-
-libnm_glib_test_la-nm-dhcp6-config.lo: nm-dhcp6-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) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-dhcp6-config.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-dhcp6-config.Tpo -c -o libnm_glib_test_la-nm-dhcp6-config.lo `test -f 'nm-dhcp6-config.c' || echo '$(srcdir)/'`nm-dhcp6-config.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-dhcp6-config.Tpo $(DEPDIR)/libnm_glib_test_la-nm-dhcp6-config.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-dhcp6-config.c' object='libnm_glib_test_la-nm-dhcp6-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) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-dhcp6-config.lo `test -f 'nm-dhcp6-config.c' || echo '$(srcdir)/'`nm-dhcp6-config.c
-
-libnm_glib_test_la-nm-remote-connection.lo: nm-remote-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) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-remote-connection.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-remote-connection.Tpo -c -o libnm_glib_test_la-nm-remote-connection.lo `test -f 'nm-remote-connection.c' || echo '$(srcdir)/'`nm-remote-connection.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-remote-connection.Tpo $(DEPDIR)/libnm_glib_test_la-nm-remote-connection.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-remote-connection.c' object='libnm_glib_test_la-nm-remote-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) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-remote-connection.lo `test -f 'nm-remote-connection.c' || echo '$(srcdir)/'`nm-remote-connection.c
-
-libnm_glib_test_la-nm-remote-settings.lo: nm-remote-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) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-remote-settings.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-remote-settings.Tpo -c -o libnm_glib_test_la-nm-remote-settings.lo `test -f 'nm-remote-settings.c' || echo '$(srcdir)/'`nm-remote-settings.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-remote-settings.Tpo $(DEPDIR)/libnm_glib_test_la-nm-remote-settings.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-remote-settings.c' object='libnm_glib_test_la-nm-remote-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) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-remote-settings.lo `test -f 'nm-remote-settings.c' || echo '$(srcdir)/'`nm-remote-settings.c
-
-libnm_glib_test_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) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-secret-agent.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-secret-agent.Tpo -c -o libnm_glib_test_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)/libnm_glib_test_la-nm-secret-agent.Tpo $(DEPDIR)/libnm_glib_test_la-nm-secret-agent.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-secret-agent.c' object='libnm_glib_test_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) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-secret-agent.lo `test -f 'nm-secret-agent.c' || echo '$(srcdir)/'`nm-secret-agent.c
-
-libnm_glib_test_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) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-device-wimax.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-device-wimax.Tpo -c -o libnm_glib_test_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_glib_test_la-nm-device-wimax.Tpo $(DEPDIR)/libnm_glib_test_la-nm-device-wimax.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-device-wimax.c' object='libnm_glib_test_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) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-device-wimax.lo `test -f 'nm-device-wimax.c' || echo '$(srcdir)/'`nm-device-wimax.c
-
-libnm_glib_test_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) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-wimax-nsp.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-wimax-nsp.Tpo -c -o libnm_glib_test_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_glib_test_la-nm-wimax-nsp.Tpo $(DEPDIR)/libnm_glib_test_la-nm-wimax-nsp.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-wimax-nsp.c' object='libnm_glib_test_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) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -c -o libnm_glib_test_la-nm-wimax-nsp.lo `test -f 'nm-wimax-nsp.c' || echo '$(srcdir)/'`nm-wimax-nsp.c
-
-libnm_glib_test_la-nm-glib-enum-types.lo: nm-glib-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) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnm_glib_test_la_CFLAGS) $(CFLAGS) -MT libnm_glib_test_la-nm-glib-enum-types.lo -MD -MP -MF $(DEPDIR)/libnm_glib_test_la-nm-glib-enum-types.Tpo -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
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libnm_glib_test_la-nm-glib-enum-types.Tpo $(DEPDIR)/libnm_glib_test_la-nm-glib-enum-types.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nm-glib-enum-types.c' object='libnm_glib_test_la-nm-glib-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) $(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_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
diff --git a/libnm-glib/libnm-glib-test.c b/libnm-glib/libnm-glib-test.c
index e38457f06..7dc6823e2 100644
--- a/libnm-glib/libnm-glib-test.c
+++ b/libnm-glib/libnm-glib-test.c
@@ -20,6 +20,8 @@
* Copyright (C) 2007 - 2008 Red Hat, Inc.
*/
+#include "config.h"
+
#include <stdlib.h>
#include <signal.h>
#include <string.h>
diff --git a/libnm-glib/libnm-glib.ver b/libnm-glib/libnm-glib.ver
index 982288e50..9219c4a2b 100644
--- a/libnm-glib/libnm-glib.ver
+++ b/libnm-glib/libnm-glib.ver
@@ -104,6 +104,7 @@ global:
nm_device_bt_new;
nm_device_connection_compatible;
nm_device_connection_valid;
+ nm_device_delete;
nm_device_disambiguate_names;
nm_device_disconnect;
nm_device_error_get_type;
@@ -156,6 +157,7 @@ global:
nm_device_infiniband_get_hw_address;
nm_device_infiniband_get_type;
nm_device_infiniband_new;
+ nm_device_is_software;
nm_device_modem_error_get_type;
nm_device_modem_error_quark;
nm_device_modem_get_current_capabilities;
@@ -181,6 +183,7 @@ global:
nm_device_vlan_error_quark;
nm_device_vlan_get_carrier;
nm_device_vlan_get_hw_address;
+ nm_device_vlan_get_parent;
nm_device_vlan_get_type;
nm_device_vlan_get_vlan_id;
nm_device_vlan_new;
diff --git a/libnm-glib/libnm_glib.c b/libnm-glib/libnm_glib.c
index a2a6d26ed..fed801606 100644
--- a/libnm-glib/libnm_glib.c
+++ b/libnm-glib/libnm_glib.c
@@ -21,6 +21,8 @@
* Copyright (C) 2005 - 2008 Novell, Inc.
*/
+#include "config.h"
+
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
diff --git a/libnm-glib/nm-access-point.c b/libnm-glib/nm-access-point.c
index ca3f1bf2d..abf61cc92 100644
--- a/libnm-glib/nm-access-point.c
+++ b/libnm-glib/nm-access-point.c
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,11 +15,12 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2011 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2011 Red Hat, Inc.
*/
-#include <config.h>
+#include "config.h"
+
#include <string.h>
#include <netinet/ether.h>
@@ -88,9 +87,9 @@ nm_access_point_new (DBusGConnection *connection, const char *path)
g_return_val_if_fail (path != NULL, NULL);
return (GObject *) g_object_new (NM_TYPE_ACCESS_POINT,
- NM_OBJECT_DBUS_CONNECTION, connection,
- NM_OBJECT_DBUS_PATH, path,
- NULL);
+ NM_OBJECT_DBUS_CONNECTION, connection,
+ NM_OBJECT_DBUS_PATH, path,
+ NULL);
}
/**
@@ -377,7 +376,7 @@ nm_access_point_connection_valid (NMAccessPoint *ap, NMConnection *connection)
/**
* nm_access_point_filter_connections:
* @ap: an #NMAccessPoint to filter connections for
- * @connections: (element-type NetworkManager.Connection): a list of
+ * @connections: (element-type NMConnection): a list of
* #NMConnection objects to filter
*
* Filters a given list of connections for a given #NMAccessPoint object and
@@ -390,7 +389,7 @@ nm_access_point_connection_valid (NMAccessPoint *ap, NMConnection *connection)
* for a given #NMDevice using nm_device_filter_connections() and finally
* filter that list with this function.
*
- * Returns: (transfer container) (element-type NetworkManager.Connection): a
+ * Returns: (transfer container) (element-type NMConnection): a
* list of #NMConnection objects that could be activated with the given @ap.
* 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
@@ -556,13 +555,12 @@ nm_access_point_class_init (NMAccessPointClass *ap_class)
**/
g_object_class_install_property
(object_class, PROP_FLAGS,
- g_param_spec_uint (NM_ACCESS_POINT_FLAGS,
- "Flags",
- "Flags",
+ g_param_spec_uint (NM_ACCESS_POINT_FLAGS, "", "",
NM_802_11_AP_FLAGS_NONE,
NM_802_11_AP_FLAGS_PRIVACY,
NM_802_11_AP_FLAGS_NONE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMAccessPoint:wpa-flags:
@@ -571,11 +569,10 @@ nm_access_point_class_init (NMAccessPointClass *ap_class)
**/
g_object_class_install_property
(object_class, PROP_WPA_FLAGS,
- g_param_spec_uint (NM_ACCESS_POINT_WPA_FLAGS,
- "WPA Flags",
- "WPA Flags",
+ g_param_spec_uint (NM_ACCESS_POINT_WPA_FLAGS, "", "",
0, G_MAXUINT32, 0,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMAccessPoint:rsn-flags:
@@ -584,11 +581,10 @@ nm_access_point_class_init (NMAccessPointClass *ap_class)
**/
g_object_class_install_property
(object_class, PROP_RSN_FLAGS,
- g_param_spec_uint (NM_ACCESS_POINT_RSN_FLAGS,
- "RSN Flags",
- "RSN Flags",
+ g_param_spec_uint (NM_ACCESS_POINT_RSN_FLAGS, "", "",
0, G_MAXUINT32, 0,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMAccessPoint:ssid:
@@ -597,11 +593,10 @@ nm_access_point_class_init (NMAccessPointClass *ap_class)
**/
g_object_class_install_property
(object_class, PROP_SSID,
- g_param_spec_boxed (NM_ACCESS_POINT_SSID,
- "SSID",
- "SSID",
- NM_TYPE_SSID,
- G_PARAM_READABLE));
+ g_param_spec_boxed (NM_ACCESS_POINT_SSID, "", "",
+ NM_TYPE_SSID,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMAccessPoint:frequency:
@@ -610,11 +605,10 @@ nm_access_point_class_init (NMAccessPointClass *ap_class)
**/
g_object_class_install_property
(object_class, PROP_FREQUENCY,
- g_param_spec_uint (NM_ACCESS_POINT_FREQUENCY,
- "Frequency",
- "Frequency",
- 0, 10000, 0,
- G_PARAM_READABLE));
+ g_param_spec_uint (NM_ACCESS_POINT_FREQUENCY, "", "",
+ 0, 10000, 0,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMAccessPoint:bssid:
@@ -623,11 +617,10 @@ nm_access_point_class_init (NMAccessPointClass *ap_class)
**/
g_object_class_install_property
(object_class, PROP_BSSID,
- g_param_spec_string (NM_ACCESS_POINT_BSSID,
- "BSSID",
- "BSSID",
- NULL,
- G_PARAM_READABLE));
+ g_param_spec_string (NM_ACCESS_POINT_BSSID, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMAccessPoint:hw-address:
@@ -636,11 +629,10 @@ nm_access_point_class_init (NMAccessPointClass *ap_class)
**/
g_object_class_install_property
(object_class, PROP_HW_ADDRESS,
- g_param_spec_string (NM_ACCESS_POINT_HW_ADDRESS,
- "MAC Address",
- "Hardware MAC address",
- NULL,
- G_PARAM_READABLE));
+ g_param_spec_string (NM_ACCESS_POINT_HW_ADDRESS, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMAccessPoint:mode:
@@ -651,11 +643,10 @@ nm_access_point_class_init (NMAccessPointClass *ap_class)
**/
g_object_class_install_property
(object_class, PROP_MODE,
- g_param_spec_uint (NM_ACCESS_POINT_MODE,
- "Mode",
- "Mode",
- NM_802_11_MODE_ADHOC, NM_802_11_MODE_INFRA, NM_802_11_MODE_INFRA,
- G_PARAM_READABLE));
+ g_param_spec_uint (NM_ACCESS_POINT_MODE, "", "",
+ NM_802_11_MODE_ADHOC, NM_802_11_MODE_INFRA, NM_802_11_MODE_INFRA,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMAccessPoint:max-bitrate:
@@ -664,11 +655,10 @@ nm_access_point_class_init (NMAccessPointClass *ap_class)
**/
g_object_class_install_property
(object_class, PROP_MAX_BITRATE,
- g_param_spec_uint (NM_ACCESS_POINT_MAX_BITRATE,
- "Max Bitrate",
- "Max Bitrate",
- 0, G_MAXUINT32, 0,
- G_PARAM_READABLE));
+ g_param_spec_uint (NM_ACCESS_POINT_MAX_BITRATE, "", "",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMAccessPoint:strength:
@@ -677,9 +667,8 @@ nm_access_point_class_init (NMAccessPointClass *ap_class)
**/
g_object_class_install_property
(object_class, PROP_STRENGTH,
- g_param_spec_uchar (NM_ACCESS_POINT_STRENGTH,
- "Strength",
- "Strength",
- 0, G_MAXUINT8, 0,
- G_PARAM_READABLE));
+ g_param_spec_uchar (NM_ACCESS_POINT_STRENGTH, "", "",
+ 0, G_MAXUINT8, 0,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
}
diff --git a/libnm-glib/nm-access-point.h b/libnm-glib/nm-access-point.h
index 4862e6b70..d3150f8ee 100644
--- a/libnm-glib/nm-access-point.h
+++ b/libnm-glib/nm-access-point.h
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,8 +15,8 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2011 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2011 Red Hat, Inc.
*/
#ifndef NM_ACCESS_POINT_H
diff --git a/libnm-glib/nm-active-connection.c b/libnm-glib/nm-active-connection.c
index bca21b4d6..7067a1100 100644
--- a/libnm-glib/nm-active-connection.c
+++ b/libnm-glib/nm-active-connection.c
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,10 +15,12 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2007 - 2014 Red Hat, Inc.
- * Copyright (C) 2008 Novell, Inc.
+ * Copyright 2007 - 2014 Red Hat, Inc.
+ * Copyright 2008 Novell, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include "NetworkManager.h"
@@ -106,9 +106,9 @@ nm_active_connection_new (DBusGConnection *connection, const char *path)
g_return_val_if_fail (path != NULL, NULL);
return g_object_new (NM_TYPE_ACTIVE_CONNECTION,
- NM_OBJECT_DBUS_CONNECTION, connection,
- NM_OBJECT_DBUS_PATH, path,
- NULL);
+ NM_OBJECT_DBUS_CONNECTION, connection,
+ NM_OBJECT_DBUS_PATH, path,
+ NULL);
}
static GType
@@ -308,7 +308,7 @@ nm_active_connection_get_specific_object (NMActiveConnection *connection)
*
* Gets the #NMDevices used for the active connections.
*
- * Returns: (element-type NMClient.Device): the #GPtrArray containing #NMDevices.
+ * Returns: (element-type NMDevice): the #GPtrArray containing #NMDevices.
* This is the internal copy used by the connection, and must not be modified.
**/
const GPtrArray *
@@ -662,11 +662,10 @@ nm_active_connection_class_init (NMActiveConnectionClass *ap_class)
**/
g_object_class_install_property
(object_class, PROP_CONNECTION,
- g_param_spec_string (NM_ACTIVE_CONNECTION_CONNECTION,
- "Connection",
- "Connection",
- NULL,
- G_PARAM_READABLE));
+ g_param_spec_string (NM_ACTIVE_CONNECTION_CONNECTION, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMActiveConnection:id:
@@ -677,11 +676,10 @@ nm_active_connection_class_init (NMActiveConnectionClass *ap_class)
**/
g_object_class_install_property
(object_class, PROP_ID,
- g_param_spec_string (NM_ACTIVE_CONNECTION_ID,
- "ID",
- "ID",
- NULL,
- G_PARAM_READABLE));
+ g_param_spec_string (NM_ACTIVE_CONNECTION_ID, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMActiveConnection:uuid:
@@ -690,11 +688,10 @@ nm_active_connection_class_init (NMActiveConnectionClass *ap_class)
**/
g_object_class_install_property
(object_class, PROP_UUID,
- g_param_spec_string (NM_ACTIVE_CONNECTION_UUID,
- "UUID",
- "UUID",
- NULL,
- G_PARAM_READABLE));
+ g_param_spec_string (NM_ACTIVE_CONNECTION_UUID, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMActiveConnection:type:
@@ -705,11 +702,10 @@ nm_active_connection_class_init (NMActiveConnectionClass *ap_class)
**/
g_object_class_install_property
(object_class, PROP_TYPE,
- g_param_spec_string (NM_ACTIVE_CONNECTION_TYPE,
- "Type",
- "Type",
- NULL,
- G_PARAM_READABLE));
+ g_param_spec_string (NM_ACTIVE_CONNECTION_TYPE, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMActiveConnection:specific-object:
@@ -718,11 +714,10 @@ nm_active_connection_class_init (NMActiveConnectionClass *ap_class)
**/
g_object_class_install_property
(object_class, PROP_SPECIFIC_OBJECT,
- g_param_spec_string (NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT,
- "Specific object",
- "Specific object",
- NULL,
- G_PARAM_READABLE));
+ g_param_spec_string (NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMActiveConnection:device:
@@ -731,11 +726,10 @@ nm_active_connection_class_init (NMActiveConnectionClass *ap_class)
**/
g_object_class_install_property
(object_class, PROP_DEVICES,
- g_param_spec_boxed (NM_ACTIVE_CONNECTION_DEVICES,
- "Devices",
- "Devices",
- NM_TYPE_OBJECT_ARRAY,
- G_PARAM_READABLE));
+ g_param_spec_boxed (NM_ACTIVE_CONNECTION_DEVICES, "", "",
+ NM_TYPE_OBJECT_ARRAY,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMActiveConnection:state:
@@ -744,13 +738,12 @@ nm_active_connection_class_init (NMActiveConnectionClass *ap_class)
**/
g_object_class_install_property
(object_class, PROP_STATE,
- g_param_spec_uint (NM_ACTIVE_CONNECTION_STATE,
- "State",
- "State",
- NM_ACTIVE_CONNECTION_STATE_UNKNOWN,
- NM_ACTIVE_CONNECTION_STATE_DEACTIVATING,
- NM_ACTIVE_CONNECTION_STATE_UNKNOWN,
- G_PARAM_READABLE));
+ g_param_spec_uint (NM_ACTIVE_CONNECTION_STATE, "", "",
+ NM_ACTIVE_CONNECTION_STATE_UNKNOWN,
+ NM_ACTIVE_CONNECTION_STATE_DEACTIVATING,
+ NM_ACTIVE_CONNECTION_STATE_UNKNOWN,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMActiveConnection:default:
@@ -759,11 +752,10 @@ nm_active_connection_class_init (NMActiveConnectionClass *ap_class)
**/
g_object_class_install_property
(object_class, PROP_DEFAULT,
- g_param_spec_boolean (NM_ACTIVE_CONNECTION_DEFAULT,
- "Default",
- "Is the default IPv4 active connection",
- FALSE,
- G_PARAM_READABLE));
+ g_param_spec_boolean (NM_ACTIVE_CONNECTION_DEFAULT, "", "",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMActiveConnection:ip4-config:
@@ -774,11 +766,10 @@ nm_active_connection_class_init (NMActiveConnectionClass *ap_class)
**/
g_object_class_install_property
(object_class, PROP_IP4_CONFIG,
- g_param_spec_object (NM_ACTIVE_CONNECTION_IP4_CONFIG,
- "IP4 Config",
- "IP4 Config",
+ g_param_spec_object (NM_ACTIVE_CONNECTION_IP4_CONFIG, "", "",
NM_TYPE_IP4_CONFIG,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMActiveConnection:dhcp4-config:
@@ -789,11 +780,10 @@ nm_active_connection_class_init (NMActiveConnectionClass *ap_class)
**/
g_object_class_install_property
(object_class, PROP_DHCP4_CONFIG,
- g_param_spec_object (NM_ACTIVE_CONNECTION_DHCP4_CONFIG,
- "DHCP4 Config",
- "DHCP4 Config",
+ g_param_spec_object (NM_ACTIVE_CONNECTION_DHCP4_CONFIG, "", "",
NM_TYPE_DHCP4_CONFIG,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMActiveConnection:default6:
@@ -802,11 +792,10 @@ nm_active_connection_class_init (NMActiveConnectionClass *ap_class)
**/
g_object_class_install_property
(object_class, PROP_DEFAULT6,
- g_param_spec_boolean (NM_ACTIVE_CONNECTION_DEFAULT6,
- "Default6",
- "Is the default IPv6 active connection",
- FALSE,
- G_PARAM_READABLE));
+ g_param_spec_boolean (NM_ACTIVE_CONNECTION_DEFAULT6, "", "",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMActiveConnection:ip6-config:
@@ -817,11 +806,10 @@ nm_active_connection_class_init (NMActiveConnectionClass *ap_class)
**/
g_object_class_install_property
(object_class, PROP_IP6_CONFIG,
- g_param_spec_object (NM_ACTIVE_CONNECTION_IP6_CONFIG,
- "IP6 Config",
- "IP6 Config",
+ g_param_spec_object (NM_ACTIVE_CONNECTION_IP6_CONFIG, "", "",
NM_TYPE_IP6_CONFIG,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMActiveConnection:dhcp6-config:
@@ -832,11 +820,10 @@ nm_active_connection_class_init (NMActiveConnectionClass *ap_class)
**/
g_object_class_install_property
(object_class, PROP_DHCP6_CONFIG,
- g_param_spec_object (NM_ACTIVE_CONNECTION_DHCP6_CONFIG,
- "DHCP6 Config",
- "DHCP6 Config",
+ g_param_spec_object (NM_ACTIVE_CONNECTION_DHCP6_CONFIG, "", "",
NM_TYPE_DHCP6_CONFIG,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMActiveConnection:vpn:
@@ -847,11 +834,10 @@ nm_active_connection_class_init (NMActiveConnectionClass *ap_class)
**/
g_object_class_install_property
(object_class, PROP_VPN,
- g_param_spec_boolean (NM_ACTIVE_CONNECTION_VPN,
- "VPN",
- "Is a VPN connection",
+ g_param_spec_boolean (NM_ACTIVE_CONNECTION_VPN, "", "",
FALSE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMActiveConnection:master:
@@ -860,9 +846,8 @@ nm_active_connection_class_init (NMActiveConnectionClass *ap_class)
**/
g_object_class_install_property
(object_class, PROP_MASTER,
- g_param_spec_string (NM_ACTIVE_CONNECTION_MASTER,
- "Master",
- "Path of the master device",
- NULL,
- G_PARAM_READABLE));
+ g_param_spec_string (NM_ACTIVE_CONNECTION_MASTER, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
}
diff --git a/libnm-glib/nm-active-connection.h b/libnm-glib/nm-active-connection.h
index b15e8340c..e29415649 100644
--- a/libnm-glib/nm-active-connection.h
+++ b/libnm-glib/nm-active-connection.h
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,8 +15,8 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2007 - 2014 Red Hat, Inc.
- * Copyright (C) 2008 Novell, Inc.
+ * Copyright 2007 - 2014 Red Hat, Inc.
+ * Copyright 2008 Novell, Inc.
*/
#ifndef NM_ACTIVE_CONNECTION_H
diff --git a/libnm-glib/nm-client.c b/libnm-glib/nm-client.c
index 379c78790..a29664c6b 100644
--- a/libnm-glib/nm-client.c
+++ b/libnm-glib/nm-client.c
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,10 +15,12 @@
* 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.
+ * Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2013 Red Hat, Inc.
*/
+#include "config.h"
+
#include <dbus/dbus-glib.h>
#include <string.h>
#include <nm-utils.h>
@@ -116,10 +116,10 @@ enum {
static guint signals[LAST_SIGNAL] = { 0 };
static void proxy_name_owner_changed (DBusGProxy *proxy,
- const char *name,
- const char *old_owner,
- const char *new_owner,
- gpointer user_data);
+ const char *name,
+ const char *old_owner,
+ const char *new_owner,
+ gpointer user_data);
/**********************************************************************/
@@ -360,11 +360,11 @@ client_recheck_permissions (DBusGProxy *proxy, gpointer user_data)
* @client: a #NMClient
*
* Gets all the known network devices. Use nm_device_get_type() or the
- * NM_IS_DEVICE_XXXX() functions to determine what kind of device member of the
- * returned array is, and then you may use device-specific methods such as
- * nm_device_ethernet_get_hw_address().
+ * <literal>NM_IS_DEVICE_XXXX</literal> functions to determine what kind of
+ * device member of the returned array is, and then you may use device-specific
+ * methods such as nm_device_ethernet_get_hw_address().
*
- * Returns: (transfer none) (element-type NMClient.Device): a #GPtrArray
+ * Returns: (transfer none) (element-type NMDevice): a #GPtrArray
* containing all the #NMDevices. The returned array is owned by the
* #NMClient object and should not be modified.
**/
@@ -607,6 +607,11 @@ activate_nm_not_running (gpointer user_data)
*
* If @connection is not given for a device-based activation, NetworkManager
* picks the best available connection for the device and activates it.
+ *
+ * Note that the callback is invoked when NetworkManager has started activating
+ * the new connection, not when it finishes. You can used the returned
+ * #NMActiveConnection object (in particular, #NMActiveConnection:state) to
+ * track the activation to its completion.
**/
void
nm_client_activate_connection (NMClient *client,
@@ -691,6 +696,11 @@ add_activate_cb (DBusGProxy *proxy,
* 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.
+ *
+ * Note that the callback is invoked when NetworkManager has started activating
+ * the new connection, not when it finishes. You can used the returned
+ * #NMActiveConnection object (in particular, #NMActiveConnection:state) to
+ * track the activation to its completion.
**/
void
nm_client_add_and_activate_connection (NMClient *client,
@@ -783,11 +793,11 @@ nm_client_deactivate_connection (NMClient *client, NMActiveConnection *active)
*
* Gets the active connections.
*
- * Returns: (transfer none) (element-type NMClient.ActiveConnection): a #GPtrArray
+ * Returns: (transfer none) (element-type NMActiveConnection): a #GPtrArray
* containing all the active #NMActiveConnections.
* The returned array is owned by the client and should not be modified.
**/
-const GPtrArray *
+const GPtrArray *
nm_client_get_active_connections (NMClient *client)
{
NMClientPrivate *priv;
@@ -1341,10 +1351,10 @@ updated_properties (GObject *object, GAsyncResult *result, gpointer user_data)
static void
proxy_name_owner_changed (DBusGProxy *proxy,
- const char *name,
- const char *old_owner,
- const char *new_owner,
- gpointer user_data)
+ const char *name,
+ const char *old_owner,
+ const char *new_owner,
+ gpointer user_data)
{
NMClient *client = NM_CLIENT (user_data);
NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (client);
@@ -1385,7 +1395,7 @@ proxy_name_owner_changed (DBusGProxy *proxy,
/* Clear object cache to ensure bad refcounting by clients doesn't
* keep objects in the cache.
*/
- _nm_object_cache_clear (NM_OBJECT (client));
+ _nm_object_cache_clear ();
} else {
_nm_object_suppress_property_updates (NM_OBJECT (client), FALSE);
_nm_object_reload_properties_async (NM_OBJECT (client), updated_properties, client);
@@ -1483,6 +1493,11 @@ check_connectivity_cb (DBusGProxy *proxy,
CheckConnectivityData *ccd = g_simple_async_result_get_op_res_gpointer (simple);
GError *error = NULL;
+ if (ccd->cancellable) {
+ g_signal_handler_disconnect (ccd->cancellable, ccd->cancelled_id);
+ ccd->cancelled_id = 0;
+ }
+
if (!dbus_g_proxy_end_call (proxy, call, &error,
G_TYPE_UINT, &ccd->connectivity,
G_TYPE_INVALID))
@@ -1702,50 +1717,6 @@ nm_client_new_finish (GAsyncResult *result, GError **error)
}
/*
- * Validate D-Bus object path.
- * The function is copied and adjusted version of
- * g_variant_serialiser_is_object_path() from glib.
- * FIXME: The function can be replaced by g_variant_is_object_path()
- * when we start using GLib >= 2.24
- */
-static gboolean
-_nm_client_is_object_path (const char *string)
-{
- gsize i;
-
- if (!g_utf8_validate (string, -1, NULL))
- return FALSE;
-
- /* The path must begin with an ASCII '/' (integer 47) character */
- if (string[0] != '/')
- return FALSE;
-
- for (i = 1; string[i]; i++) {
- /* Each element must only contain the ASCII characters
- * "[A-Z][a-z][0-9]_"
- */
- if (g_ascii_isalnum (string[i]) || string[i] == '_')
- ;
- /* must consist of elements separated by slash characters. */
- else if (string[i] == '/') {
- /* No element may be the empty string. */
- /* Multiple '/' characters cannot occur in sequence. */
- if (string[i - 1] == '/')
- return FALSE;
- } else
- return FALSE;
- }
-
- /* A trailing '/' character is not allowed unless the path is the
- * root path (a single '/' character).
- */
- if (i > 1 && string[i - 1] == '/')
- return FALSE;
-
- return TRUE;
-}
-
-/*
* constructor() shouldn't be overriden in most cases, rather constructed()
* method is preferred and more useful.
* But, this serves as a workaround for bindings (use) calling the constructor()
@@ -1782,9 +1753,9 @@ constructor (GType type,
if (dbus_path == NULL) {
g_value_set_static_string (construct_params[i].value, NM_DBUS_PATH);
} else {
- if (!_nm_client_is_object_path (dbus_path)) {
- g_warning ("Passsed D-Bus object path '%s' is invalid; using default '%s' instead",
- dbus_path, NM_DBUS_PATH);
+ if (!g_variant_is_object_path (dbus_path)) {
+ g_warning ("Passed D-Bus object path '%s' is invalid; using default '%s' instead",
+ dbus_path, NM_DBUS_PATH);
g_value_set_static_string (construct_params[i].value, NM_DBUS_PATH);
}
}
@@ -1968,8 +1939,8 @@ init_async_got_manager_running (DBusGProxy *proxy, DBusGProxyCall *call,
static void
init_async (GAsyncInitable *initable, int io_priority,
- GCancellable *cancellable, GAsyncReadyCallback callback,
- gpointer user_data)
+ GCancellable *cancellable, GAsyncReadyCallback callback,
+ gpointer user_data)
{
NMClientInitData *init_data;
NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (initable);
@@ -1985,10 +1956,10 @@ init_async (GAsyncInitable *initable, int io_priority,
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);
+ init_async_got_manager_running,
+ init_data, NULL,
+ G_TYPE_STRING, NM_DBUS_SERVICE,
+ G_TYPE_INVALID);
}
}
@@ -2043,7 +2014,7 @@ finalize (GObject *object)
static void
set_property (GObject *object, guint prop_id,
- const GValue *value, GParamSpec *pspec)
+ const GValue *value, GParamSpec *pspec)
{
NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (object);
gboolean b;
@@ -2171,12 +2142,12 @@ nm_client_class_init (NMClientClass *client_class)
*
* The NetworkManager version.
**/
- g_object_class_install_property (object_class, PROP_VERSION,
- g_param_spec_string (NM_CLIENT_VERSION,
- "Version",
- "NetworkManager version",
- NULL,
- G_PARAM_READABLE));
+ g_object_class_install_property
+ (object_class, PROP_VERSION,
+ g_param_spec_string (NM_CLIENT_VERSION, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMClient:state:
@@ -2185,11 +2156,10 @@ nm_client_class_init (NMClientClass *client_class)
**/
g_object_class_install_property
(object_class, PROP_STATE,
- g_param_spec_uint (NM_CLIENT_STATE,
- "State",
- "NetworkManager state",
- NM_STATE_UNKNOWN, NM_STATE_CONNECTED_GLOBAL, NM_STATE_UNKNOWN,
- G_PARAM_READABLE));
+ g_param_spec_uint (NM_CLIENT_STATE, "", "",
+ NM_STATE_UNKNOWN, NM_STATE_CONNECTED_GLOBAL, NM_STATE_UNKNOWN,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMClient:startup:
@@ -2200,129 +2170,119 @@ nm_client_class_init (NMClientClass *client_class)
**/
g_object_class_install_property
(object_class, PROP_STARTUP,
- g_param_spec_boolean (NM_CLIENT_STARTUP,
- "Startup",
- "Whether the daemon is still starting up",
+ g_param_spec_boolean (NM_CLIENT_STARTUP, "", "",
FALSE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
- * NMClient::manager-running:
+ * NMClient:manager-running:
*
* Whether the daemon is running.
**/
g_object_class_install_property
(object_class, PROP_MANAGER_RUNNING,
- g_param_spec_boolean (NM_CLIENT_MANAGER_RUNNING,
- "ManagerRunning",
- "Whether NetworkManager is running",
- FALSE,
- G_PARAM_READABLE));
+ g_param_spec_boolean (NM_CLIENT_MANAGER_RUNNING, "", "",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
- * NMClient::networking-enabled:
+ * NMClient:networking-enabled:
*
* Whether networking is enabled.
**/
g_object_class_install_property
(object_class, PROP_NETWORKING_ENABLED,
- g_param_spec_boolean (NM_CLIENT_NETWORKING_ENABLED,
- "NetworkingEnabled",
- "Is networking enabled",
- TRUE,
- G_PARAM_READWRITE));
+ g_param_spec_boolean (NM_CLIENT_NETWORKING_ENABLED, "", "",
+ TRUE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
- * NMClient::wireless-enabled:
+ * NMClient:wireless-enabled:
*
* Whether wireless is enabled.
**/
g_object_class_install_property
(object_class, PROP_WIRELESS_ENABLED,
- g_param_spec_boolean (NM_CLIENT_WIRELESS_ENABLED,
- "WirelessEnabled",
- "Is wireless enabled",
- FALSE,
- G_PARAM_READWRITE));
+ g_param_spec_boolean (NM_CLIENT_WIRELESS_ENABLED, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
- * NMClient::wireless-hardware-enabled:
+ * NMClient:wireless-hardware-enabled:
*
* Whether the wireless hardware is enabled.
**/
g_object_class_install_property
(object_class, PROP_WIRELESS_HARDWARE_ENABLED,
- g_param_spec_boolean (NM_CLIENT_WIRELESS_HARDWARE_ENABLED,
- "WirelessHardwareEnabled",
- "Is wireless hardware enabled",
- TRUE,
- G_PARAM_READABLE));
+ g_param_spec_boolean (NM_CLIENT_WIRELESS_HARDWARE_ENABLED, "", "",
+ TRUE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
- * NMClient::wwan-enabled:
+ * NMClient:wwan-enabled:
*
* Whether WWAN functionality is enabled.
**/
g_object_class_install_property
(object_class, PROP_WWAN_ENABLED,
- g_param_spec_boolean (NM_CLIENT_WWAN_ENABLED,
- "WwanEnabled",
- "Is WWAN enabled",
+ g_param_spec_boolean (NM_CLIENT_WWAN_ENABLED, "", "",
FALSE,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
- * NMClient::wwan-hardware-enabled:
+ * NMClient:wwan-hardware-enabled:
*
* Whether the WWAN hardware is enabled.
**/
g_object_class_install_property
(object_class, PROP_WWAN_HARDWARE_ENABLED,
- g_param_spec_boolean (NM_CLIENT_WWAN_HARDWARE_ENABLED,
- "WwanHardwareEnabled",
- "Is WWAN hardware enabled",
+ g_param_spec_boolean (NM_CLIENT_WWAN_HARDWARE_ENABLED, "", "",
FALSE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
- * NMClient::wimax-enabled:
+ * NMClient:wimax-enabled:
*
* Whether WiMAX functionality is enabled.
**/
g_object_class_install_property
(object_class, PROP_WIMAX_ENABLED,
- g_param_spec_boolean (NM_CLIENT_WIMAX_ENABLED,
- "WimaxEnabled",
- "Is WiMAX enabled",
+ g_param_spec_boolean (NM_CLIENT_WIMAX_ENABLED, "", "",
FALSE,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
- * NMClient::wimax-hardware-enabled:
+ * NMClient:wimax-hardware-enabled:
*
* Whether the WiMAX hardware is enabled.
**/
g_object_class_install_property
(object_class, PROP_WIMAX_HARDWARE_ENABLED,
- g_param_spec_boolean (NM_CLIENT_WIMAX_HARDWARE_ENABLED,
- "WimaxHardwareEnabled",
- "Is WiMAX hardware enabled",
+ g_param_spec_boolean (NM_CLIENT_WIMAX_HARDWARE_ENABLED, "", "",
FALSE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
- * NMClient::active-connections:
+ * NMClient:active-connections:
*
* The active connections.
- * Type: GPtrArray<NMClient.ActiveConnection>
+ * Type: GLib.PtrArray
**/
g_object_class_install_property
(object_class, PROP_ACTIVE_CONNECTIONS,
- g_param_spec_boxed (NM_CLIENT_ACTIVE_CONNECTIONS,
- "Active connections",
- "Active connections",
- NM_TYPE_OBJECT_ARRAY,
- G_PARAM_READABLE));
+ g_param_spec_boxed (NM_CLIENT_ACTIVE_CONNECTIONS, "", "",
+ NM_TYPE_OBJECT_ARRAY,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMClient:connectivity:
@@ -2333,11 +2293,10 @@ nm_client_class_init (NMClientClass *client_class)
*/
g_object_class_install_property
(object_class, PROP_CONNECTIVITY,
- g_param_spec_uint (NM_CLIENT_CONNECTIVITY,
- "Connectivity",
- "Connectivity state",
+ g_param_spec_uint (NM_CLIENT_CONNECTIVITY, "", "",
NM_CONNECTIVITY_UNKNOWN, NM_CONNECTIVITY_FULL, NM_CONNECTIVITY_UNKNOWN,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMClient:primary-connection:
@@ -2349,11 +2308,10 @@ nm_client_class_init (NMClientClass *client_class)
**/
g_object_class_install_property
(object_class, PROP_PRIMARY_CONNECTION,
- g_param_spec_object (NM_CLIENT_PRIMARY_CONNECTION,
- "Primary connection",
- "Primary connection",
+ g_param_spec_object (NM_CLIENT_PRIMARY_CONNECTION, "", "",
NM_TYPE_ACTIVE_CONNECTION,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMClient:activating-connection:
@@ -2365,11 +2323,10 @@ nm_client_class_init (NMClientClass *client_class)
**/
g_object_class_install_property
(object_class, PROP_ACTIVATING_CONNECTION,
- g_param_spec_object (NM_CLIENT_ACTIVATING_CONNECTION,
- "Activating connection",
- "Activating connection",
+ g_param_spec_object (NM_CLIENT_ACTIVATING_CONNECTION, "", "",
NM_TYPE_ACTIVE_CONNECTION,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMClient:devices:
@@ -2380,34 +2337,33 @@ nm_client_class_init (NMClientClass *client_class)
**/
g_object_class_install_property
(object_class, PROP_DEVICES,
- g_param_spec_boxed (NM_CLIENT_DEVICES,
- "Devices",
- "Devices",
+ g_param_spec_boxed (NM_CLIENT_DEVICES, "", "",
NM_TYPE_OBJECT_ARRAY,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/* signals */
/**
* NMClient::device-added:
* @client: the client that received the signal
- * @device: (type NMClient.Device): the new device
+ * @device: (type NMDevice): the new device
*
* Notifies that a #NMDevice is added.
**/
signals[DEVICE_ADDED] =
g_signal_new ("device-added",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (NMClientClass, device_added),
- NULL, NULL, NULL,
- G_TYPE_NONE, 1,
- G_TYPE_OBJECT);
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMClientClass, device_added),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 1,
+ G_TYPE_OBJECT);
/**
* NMClient::device-removed:
* @client: the client that received the signal
- * @device: (type NMClient.Device): the removed device
+ * @device: (type NMDevice): the removed device
*
* Notifies that a #NMDevice is removed.
**/
diff --git a/libnm-glib/nm-client.h b/libnm-glib/nm-client.h
index 1baabecce..ffe513cb0 100644
--- a/libnm-glib/nm-client.h
+++ b/libnm-glib/nm-client.h
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,8 +15,8 @@
* 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.
+ * Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2012 Red Hat, Inc.
*/
#ifndef NM_CLIENT_H
diff --git a/libnm-glib/nm-dbus-helpers-private.h b/libnm-glib/nm-dbus-helpers-private.h
index 81c772033..8a350e783 100644
--- a/libnm-glib/nm-dbus-helpers-private.h
+++ b/libnm-glib/nm-dbus-helpers-private.h
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,7 +15,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2013 Red Hat, Inc.
+ * Copyright 2013 Red Hat, Inc.
*/
#ifndef NM_DBUS_HELPERS_PRIVATE_H
diff --git a/libnm-glib/nm-dbus-helpers.c b/libnm-glib/nm-dbus-helpers.c
index 731ad0c8f..00e04ab43 100644
--- a/libnm-glib/nm-dbus-helpers.c
+++ b/libnm-glib/nm-dbus-helpers.c
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,11 +15,12 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2013 Red Hat, Inc.
+ * Copyright 2013 Red Hat, Inc.
*/
+#include "config.h"
+
#include <string.h>
-#include <config.h>
#include <gio/gio.h>
#include <dbus/dbus.h>
#include <dbus/dbus-glib-lowlevel.h>
@@ -70,13 +69,8 @@ _nm_dbus_new_connection (GError **error)
}
#endif
- if (connection == NULL) {
-#ifdef LIBNM_GLIB_TEST
- connection = dbus_g_bus_get (DBUS_BUS_SESSION, error);
-#else
+ if (connection == NULL)
connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, error);
-#endif
- }
return connection;
}
@@ -104,4 +98,3 @@ _nm_dbus_new_proxy_for_connection (DBusGConnection *connection,
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 b3f9691ee..681216837 100644
--- a/libnm-glib/nm-device-adsl.c
+++ b/libnm-glib/nm-device-adsl.c
@@ -1,7 +1,5 @@
/* -*- 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
@@ -21,6 +19,8 @@
* Copyright 2009 - 2011 Red Hat, Inc.
*/
+#include "config.h"
+
#include "nm-device-adsl.h"
#include "nm-device-private.h"
#include "nm-object-private.h"
@@ -237,9 +237,8 @@ nm_device_adsl_class_init (NMDeviceAdslClass *adsl_class)
**/
g_object_class_install_property
(object_class, PROP_CARRIER,
- g_param_spec_boolean (NM_DEVICE_ADSL_CARRIER,
- "Carrier",
- "Carrier",
+ g_param_spec_boolean (NM_DEVICE_ADSL_CARRIER, "", "",
FALSE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
}
diff --git a/libnm-glib/nm-device-adsl.h b/libnm-glib/nm-device-adsl.h
index 702d16dca..35d2731a2 100644
--- a/libnm-glib/nm-device-adsl.h
+++ b/libnm-glib/nm-device-adsl.h
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,7 +15,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2011 Pantelis Koukousoulas <pktoss@gmail.com>
+ * Copyright 2011 Pantelis Koukousoulas <pktoss@gmail.com>
*/
#ifndef NM_DEVICE_ADSL_H
diff --git a/libnm-glib/nm-device-bond.c b/libnm-glib/nm-device-bond.c
index b2af2ec34..786d4f168 100644
--- a/libnm-glib/nm-device-bond.c
+++ b/libnm-glib/nm-device-bond.c
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,10 +15,11 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2012 Red Hat, Inc.
+ * Copyright 2012 Red Hat, Inc.
*/
-#include <config.h>
+#include "config.h"
+
#include <string.h>
#include <netinet/ether.h>
@@ -91,9 +90,9 @@ nm_device_bond_new (DBusGConnection *connection, const char *path)
g_return_val_if_fail (path != NULL, NULL);
device = g_object_new (NM_TYPE_DEVICE_BOND,
- NM_OBJECT_DBUS_CONNECTION, connection,
- NM_OBJECT_DBUS_PATH, path,
- NULL);
+ NM_OBJECT_DBUS_CONNECTION, connection,
+ NM_OBJECT_DBUS_PATH, path,
+ NULL);
_nm_object_ensure_inited (NM_OBJECT (device));
return device;
}
@@ -139,7 +138,7 @@ nm_device_bond_get_carrier (NMDeviceBond *device)
*
* Gets the devices currently slaved to @device.
*
- * Returns: (element-type NMClient.Device): the #GPtrArray containing
+ * Returns: (element-type NMDevice): the #GPtrArray containing
* #NMDevices that are slaves of @device. This is the internal
* copy used by the device, and must not be modified.
*
@@ -291,12 +290,12 @@ get_property (GObject *object,
}
static void
-nm_device_bond_class_init (NMDeviceBondClass *eth_class)
+nm_device_bond_class_init (NMDeviceBondClass *bond_class)
{
- GObjectClass *object_class = G_OBJECT_CLASS (eth_class);
- NMDeviceClass *device_class = NM_DEVICE_CLASS (eth_class);
+ GObjectClass *object_class = G_OBJECT_CLASS (bond_class);
+ NMDeviceClass *device_class = NM_DEVICE_CLASS (bond_class);
- g_type_class_add_private (eth_class, sizeof (NMDeviceBondPrivate));
+ g_type_class_add_private (bond_class, sizeof (NMDeviceBondPrivate));
/* virtual methods */
object_class->constructed = constructed;
@@ -316,11 +315,10 @@ nm_device_bond_class_init (NMDeviceBondClass *eth_class)
**/
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",
+ g_param_spec_string (NM_DEVICE_BOND_HW_ADDRESS, "", "",
NULL,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDeviceBond:carrier:
@@ -329,11 +327,10 @@ nm_device_bond_class_init (NMDeviceBondClass *eth_class)
**/
g_object_class_install_property
(object_class, PROP_CARRIER,
- g_param_spec_boolean (NM_DEVICE_BOND_CARRIER,
- "Carrier",
- "Carrier",
+ g_param_spec_boolean (NM_DEVICE_BOND_CARRIER, "", "",
FALSE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDeviceBond:slaves:
@@ -344,9 +341,8 @@ nm_device_bond_class_init (NMDeviceBondClass *eth_class)
**/
g_object_class_install_property
(object_class, PROP_SLAVES,
- g_param_spec_boxed (NM_DEVICE_BOND_SLAVES,
- "Slaves",
- "Slaves",
+ g_param_spec_boxed (NM_DEVICE_BOND_SLAVES, "", "",
NM_TYPE_OBJECT_ARRAY,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
}
diff --git a/libnm-glib/nm-device-bond.h b/libnm-glib/nm-device-bond.h
index a495689a9..cd1a60271 100644
--- a/libnm-glib/nm-device-bond.h
+++ b/libnm-glib/nm-device-bond.h
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,7 +15,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2012 Red Hat, Inc.
+ * Copyright 2012 Red Hat, Inc.
*/
#ifndef NM_DEVICE_BOND_H
diff --git a/libnm-glib/nm-device-bridge.c b/libnm-glib/nm-device-bridge.c
index c8967e203..ef69fb264 100644
--- a/libnm-glib/nm-device-bridge.c
+++ b/libnm-glib/nm-device-bridge.c
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,10 +15,11 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2012 Red Hat, Inc.
+ * Copyright 2012 Red Hat, Inc.
*/
-#include <config.h>
+#include "config.h"
+
#include <string.h>
#include <netinet/ether.h>
@@ -147,7 +146,7 @@ nm_device_bridge_get_carrier (NMDeviceBridge *device)
*
* Gets the devices currently slaved to @device.
*
- * Returns: (element-type NMClient.Device): the #GPtrArray containing
+ * Returns: (element-type NMDevice): the #GPtrArray containing
* #NMDevices that are slaves of @device. This is the internal
* copy used by the device, and must not be modified.
*
@@ -326,11 +325,10 @@ nm_device_bridge_class_init (NMDeviceBridgeClass *bridge_class)
**/
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",
+ g_param_spec_string (NM_DEVICE_BRIDGE_HW_ADDRESS, "", "",
NULL,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDeviceBridge:carrier:
@@ -341,11 +339,10 @@ nm_device_bridge_class_init (NMDeviceBridgeClass *bridge_class)
**/
g_object_class_install_property
(object_class, PROP_CARRIER,
- g_param_spec_boolean (NM_DEVICE_BRIDGE_CARRIER,
- "Carrier",
- "Carrier",
+ g_param_spec_boolean (NM_DEVICE_BRIDGE_CARRIER, "", "",
FALSE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDeviceBridge:slaves:
@@ -356,9 +353,8 @@ nm_device_bridge_class_init (NMDeviceBridgeClass *bridge_class)
**/
g_object_class_install_property
(object_class, PROP_SLAVES,
- g_param_spec_boxed (NM_DEVICE_BRIDGE_SLAVES,
- "Slaves",
- "Slaves",
+ g_param_spec_boxed (NM_DEVICE_BRIDGE_SLAVES, "", "",
NM_TYPE_OBJECT_ARRAY,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
}
diff --git a/libnm-glib/nm-device-bridge.h b/libnm-glib/nm-device-bridge.h
index 67e08df71..2eaf475d8 100644
--- a/libnm-glib/nm-device-bridge.h
+++ b/libnm-glib/nm-device-bridge.h
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,7 +15,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2012 Red Hat, Inc.
+ * Copyright 2012 Red Hat, Inc.
*/
#ifndef NM_DEVICE_BRIDGE_H
diff --git a/libnm-glib/nm-device-bt.c b/libnm-glib/nm-device-bt.c
index 4c39ad049..58d483443 100644
--- a/libnm-glib/nm-device-bt.c
+++ b/libnm-glib/nm-device-bt.c
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,11 +15,12 @@
* 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.
+ * Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2012 Red Hat, Inc.
*/
-#include <config.h>
+#include "config.h"
+
#include <string.h>
#include <netinet/ether.h>
@@ -343,11 +342,10 @@ nm_device_bt_class_init (NMDeviceBtClass *bt_class)
**/
g_object_class_install_property
(object_class, PROP_HW_ADDRESS,
- g_param_spec_string (NM_DEVICE_BT_HW_ADDRESS,
- "MAC Address",
- "Hardware MAC address",
+ g_param_spec_string (NM_DEVICE_BT_HW_ADDRESS, "", "",
NULL,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDeviceBt:name:
@@ -356,11 +354,10 @@ nm_device_bt_class_init (NMDeviceBtClass *bt_class)
**/
g_object_class_install_property
(object_class, PROP_NAME,
- g_param_spec_string (NM_DEVICE_BT_NAME,
- "Name",
- "Device name",
+ g_param_spec_string (NM_DEVICE_BT_NAME, "", "",
NULL,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDeviceBt:bt-capabilities:
@@ -369,11 +366,9 @@ nm_device_bt_class_init (NMDeviceBtClass *bt_class)
**/
g_object_class_install_property
(object_class, PROP_BT_CAPABILITIES,
- g_param_spec_uint (NM_DEVICE_BT_CAPABILITIES,
- "BtCapabilities",
- "Bluetooth capabilities",
+ g_param_spec_uint (NM_DEVICE_BT_CAPABILITIES, "", "",
NM_BT_CAPABILITY_NONE, G_MAXUINT32, NM_BT_CAPABILITY_NONE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
}
-
diff --git a/libnm-glib/nm-device-bt.h b/libnm-glib/nm-device-bt.h
index 113b5eca2..51dc86e39 100644
--- a/libnm-glib/nm-device-bt.h
+++ b/libnm-glib/nm-device-bt.h
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,8 +15,8 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2008 - 2012 Red Hat, Inc.
- * Copyright (C) 2008 Novell, Inc.
+ * Copyright 2008 - 2012 Red Hat, Inc.
+ * Copyright 2008 Novell, Inc.
*/
#ifndef NM_DEVICE_BT_H
diff --git a/libnm-glib/nm-device-ethernet.c b/libnm-glib/nm-device-ethernet.c
index 8f3171154..d27a980fe 100644
--- a/libnm-glib/nm-device-ethernet.c
+++ b/libnm-glib/nm-device-ethernet.c
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,11 +15,12 @@
* 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.
+ * Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2012 Red Hat, Inc.
*/
-#include <config.h>
+#include "config.h"
+
#include <string.h>
#include <netinet/ether.h>
@@ -93,9 +92,9 @@ nm_device_ethernet_new (DBusGConnection *connection, const char *path)
g_return_val_if_fail (path != NULL, NULL);
device = g_object_new (NM_TYPE_DEVICE_ETHERNET,
- NM_OBJECT_DBUS_CONNECTION, connection,
- NM_OBJECT_DBUS_PATH, path,
- NULL);
+ NM_OBJECT_DBUS_CONNECTION, connection,
+ NM_OBJECT_DBUS_PATH, path,
+ NULL);
_nm_object_ensure_inited (NM_OBJECT (device));
return device;
}
@@ -350,11 +349,10 @@ nm_device_ethernet_class_init (NMDeviceEthernetClass *eth_class)
**/
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_param_spec_string (NM_DEVICE_ETHERNET_HW_ADDRESS, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDeviceEthernet:perm-hw-address:
@@ -363,11 +361,10 @@ nm_device_ethernet_class_init (NMDeviceEthernetClass *eth_class)
**/
g_object_class_install_property
(object_class, PROP_PERM_HW_ADDRESS,
- g_param_spec_string (NM_DEVICE_ETHERNET_PERMANENT_HW_ADDRESS,
- "Permanent MAC Address",
- "Permanent hardware MAC address",
- NULL,
- G_PARAM_READABLE));
+ g_param_spec_string (NM_DEVICE_ETHERNET_PERMANENT_HW_ADDRESS, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDeviceEthernet:speed:
@@ -376,11 +373,10 @@ nm_device_ethernet_class_init (NMDeviceEthernetClass *eth_class)
**/
g_object_class_install_property
(object_class, PROP_SPEED,
- g_param_spec_uint (NM_DEVICE_ETHERNET_SPEED,
- "Speed",
- "Speed",
- 0, G_MAXUINT32, 0,
- G_PARAM_READABLE));
+ g_param_spec_uint (NM_DEVICE_ETHERNET_SPEED, "", "",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDeviceEthernet:carrier:
@@ -389,11 +385,9 @@ nm_device_ethernet_class_init (NMDeviceEthernetClass *eth_class)
**/
g_object_class_install_property
(object_class, PROP_CARRIER,
- g_param_spec_boolean (NM_DEVICE_ETHERNET_CARRIER,
- "Carrier",
- "Carrier",
- FALSE,
- G_PARAM_READABLE));
+ g_param_spec_boolean (NM_DEVICE_ETHERNET_CARRIER, "", "",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
}
-
diff --git a/libnm-glib/nm-device-ethernet.h b/libnm-glib/nm-device-ethernet.h
index a68a97ecc..be289cdfc 100644
--- a/libnm-glib/nm-device-ethernet.h
+++ b/libnm-glib/nm-device-ethernet.h
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,8 +15,8 @@
* 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.
+ * Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2012 Red Hat, Inc.
*/
#ifndef NM_DEVICE_ETHERNET_H
diff --git a/libnm-glib/nm-device-generic.c b/libnm-glib/nm-device-generic.c
index 2a45294f3..a17a67355 100644
--- a/libnm-glib/nm-device-generic.c
+++ b/libnm-glib/nm-device-generic.c
@@ -1,7 +1,5 @@
/* -*- 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
@@ -20,7 +18,7 @@
* Copyright 2013 Red Hat, Inc.
*/
-#include <config.h>
+#include "config.h"
#include <string.h>
@@ -266,11 +264,10 @@ nm_device_generic_class_init (NMDeviceGenericClass *klass)
**/
g_object_class_install_property
(object_class, PROP_HW_ADDRESS,
- g_param_spec_string (NM_DEVICE_GENERIC_HW_ADDRESS,
- "Hardware Address",
- "Hardware address",
+ g_param_spec_string (NM_DEVICE_GENERIC_HW_ADDRESS, "", "",
NULL,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDeviceGeneric:type-description:
@@ -280,10 +277,8 @@ nm_device_generic_class_init (NMDeviceGenericClass *klass)
**/
g_object_class_install_property
(object_class, PROP_TYPE_DESCRIPTION,
- g_param_spec_string (NM_DEVICE_GENERIC_TYPE_DESCRIPTION,
- "Type Description",
- "Type description",
+ g_param_spec_string (NM_DEVICE_GENERIC_TYPE_DESCRIPTION, "", "",
NULL,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
}
-
diff --git a/libnm-glib/nm-device-generic.h b/libnm-glib/nm-device-generic.h
index a343d988d..5bff1e3f5 100644
--- a/libnm-glib/nm-device-generic.h
+++ b/libnm-glib/nm-device-generic.h
@@ -1,7 +1,5 @@
/* -*- 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
diff --git a/libnm-glib/nm-device-infiniband.c b/libnm-glib/nm-device-infiniband.c
index b60b2d821..663b36516 100644
--- a/libnm-glib/nm-device-infiniband.c
+++ b/libnm-glib/nm-device-infiniband.c
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,10 +15,11 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2011 - 2012 Red Hat, Inc.
+ * Copyright 2011 - 2012 Red Hat, Inc.
*/
-#include <config.h>
+#include "config.h"
+
#include <string.h>
#include <linux/if_infiniband.h>
#include <netinet/ether.h>
@@ -89,9 +88,9 @@ nm_device_infiniband_new (DBusGConnection *connection, const char *path)
g_return_val_if_fail (path != NULL, NULL);
device = g_object_new (NM_TYPE_DEVICE_INFINIBAND,
- NM_OBJECT_DBUS_CONNECTION, connection,
- NM_OBJECT_DBUS_PATH, path,
- NULL);
+ NM_OBJECT_DBUS_CONNECTION, connection,
+ NM_OBJECT_DBUS_PATH, path,
+ NULL);
_nm_object_ensure_inited (NM_OBJECT (device));
return device;
}
@@ -268,12 +267,12 @@ get_property (GObject *object,
}
static void
-nm_device_infiniband_class_init (NMDeviceInfinibandClass *eth_class)
+nm_device_infiniband_class_init (NMDeviceInfinibandClass *ib_class)
{
- GObjectClass *object_class = G_OBJECT_CLASS (eth_class);
- NMDeviceClass *device_class = NM_DEVICE_CLASS (eth_class);
+ GObjectClass *object_class = G_OBJECT_CLASS (ib_class);
+ NMDeviceClass *device_class = NM_DEVICE_CLASS (ib_class);
- g_type_class_add_private (eth_class, sizeof (NMDeviceInfinibandPrivate));
+ g_type_class_add_private (ib_class, sizeof (NMDeviceInfinibandPrivate));
/* virtual methods */
object_class->constructed = constructed;
@@ -293,11 +292,10 @@ nm_device_infiniband_class_init (NMDeviceInfinibandClass *eth_class)
**/
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",
+ g_param_spec_string (NM_DEVICE_INFINIBAND_HW_ADDRESS, "", "",
NULL,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDeviceInfiniband:carrier:
@@ -306,11 +304,9 @@ nm_device_infiniband_class_init (NMDeviceInfinibandClass *eth_class)
**/
g_object_class_install_property
(object_class, PROP_CARRIER,
- g_param_spec_boolean (NM_DEVICE_INFINIBAND_CARRIER,
- "Carrier",
- "Carrier",
+ g_param_spec_boolean (NM_DEVICE_INFINIBAND_CARRIER, "", "",
FALSE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
}
-
diff --git a/libnm-glib/nm-device-infiniband.h b/libnm-glib/nm-device-infiniband.h
index 72d8fc6c3..ba587d93b 100644
--- a/libnm-glib/nm-device-infiniband.h
+++ b/libnm-glib/nm-device-infiniband.h
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,7 +15,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2011 - 2012 Red Hat, Inc.
+ * Copyright 2011 - 2012 Red Hat, Inc.
*/
#ifndef NM_DEVICE_INFINIBAND_H
diff --git a/libnm-glib/nm-device-modem.c b/libnm-glib/nm-device-modem.c
index b3b357cff..524d86cea 100644
--- a/libnm-glib/nm-device-modem.c
+++ b/libnm-glib/nm-device-modem.c
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,11 +15,12 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2011 - 2012 Red Hat, Inc.
- * Copyright (C) 2008 Novell, Inc.
+ * Copyright 2011 - 2012 Red Hat, Inc.
+ * Copyright 2008 Novell, Inc.
*/
-#include <config.h>
+#include "config.h"
+
#include <string.h>
#include "nm-glib-compat.h"
@@ -36,9 +35,7 @@
G_DEFINE_TYPE (NMDeviceModem, nm_device_modem, NM_TYPE_DEVICE)
-#define NM_DEVICE_MODEM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
- NM_TYPE_DEVICE_MODEM, \
- NMDeviceModemPrivate))
+#define NM_DEVICE_MODEM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_MODEM, NMDeviceModemPrivate))
typedef struct {
DBusGProxy *proxy;
@@ -273,12 +270,12 @@ nm_device_modem_class_init (NMDeviceModemClass *modem_class)
* a firmware reload or other reinitialization to switch between eg
* CDMA/EVDO and GSM/UMTS.
**/
- g_object_class_install_property (object_class, PROP_MODEM_CAPS,
- g_param_spec_uint (NM_DEVICE_MODEM_MODEM_CAPABILITIES,
- "Modem capabilities",
- "Modem capabilities",
- 0, G_MAXUINT32, 0,
- G_PARAM_READABLE));
+ g_object_class_install_property
+ (object_class, PROP_MODEM_CAPS,
+ g_param_spec_uint (NM_DEVICE_MODEM_MODEM_CAPABILITIES, "", "",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDeviceModem:current-capabilities:
@@ -286,11 +283,10 @@ nm_device_modem_class_init (NMDeviceModemClass *modem_class)
* The generic family of access technologies the modem currently supports
* without a firmware reload or reinitialization.
**/
- g_object_class_install_property (object_class, PROP_CURRENT_CAPS,
- g_param_spec_uint (NM_DEVICE_MODEM_CURRENT_CAPABILITIES,
- "Current capabilities",
- "Current capabilities",
- 0, G_MAXUINT32, 0,
- G_PARAM_READABLE));
+ g_object_class_install_property
+ (object_class, PROP_CURRENT_CAPS,
+ g_param_spec_uint (NM_DEVICE_MODEM_CURRENT_CAPABILITIES, "", "",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
}
-
diff --git a/libnm-glib/nm-device-modem.h b/libnm-glib/nm-device-modem.h
index 62719e2b9..226cd0469 100644
--- a/libnm-glib/nm-device-modem.h
+++ b/libnm-glib/nm-device-modem.h
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,8 +15,8 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2011 - 2012 Red Hat, Inc.
- * Copyright (C) 2008 Novell, Inc.
+ * Copyright 2011 - 2012 Red Hat, Inc.
+ * Copyright 2008 Novell, Inc.
*/
#ifndef NM_DEVICE_MODEM_H
diff --git a/libnm-glib/nm-device-olpc-mesh.c b/libnm-glib/nm-device-olpc-mesh.c
index d1789eb94..e68fda626 100644
--- a/libnm-glib/nm-device-olpc-mesh.c
+++ b/libnm-glib/nm-device-olpc-mesh.c
@@ -1,8 +1,5 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* vim: set ft=c ts=4 sts=4 sw=4 noexpandtab smartindent: */
/*
- * 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
@@ -18,10 +15,11 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2012 Red Hat, Inc.
+ * Copyright 2012 Red Hat, Inc.
*/
-#include <config.h>
+#include "config.h"
+
#include <string.h>
#include "nm-glib-compat.h"
@@ -90,9 +88,9 @@ nm_device_olpc_mesh_new (DBusGConnection *connection, const char *path)
g_return_val_if_fail (path != NULL, NULL);
device = g_object_new (NM_TYPE_DEVICE_OLPC_MESH,
- NM_OBJECT_DBUS_CONNECTION, connection,
- NM_OBJECT_DBUS_PATH, path,
- NULL);
+ NM_OBJECT_DBUS_CONNECTION, connection,
+ NM_OBJECT_DBUS_PATH, path,
+ NULL);
_nm_object_ensure_inited (NM_OBJECT (device));
return device;
@@ -297,11 +295,10 @@ nm_device_olpc_mesh_class_init (NMDeviceOlpcMeshClass *olpc_mesh_class)
**/
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",
+ g_param_spec_string (NM_DEVICE_OLPC_MESH_HW_ADDRESS, "", "",
NULL,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDeviceOlpcMesh:companion:
@@ -310,11 +307,10 @@ nm_device_olpc_mesh_class_init (NMDeviceOlpcMeshClass *olpc_mesh_class)
**/
g_object_class_install_property
(object_class, PROP_COMPANION,
- g_param_spec_object (NM_DEVICE_OLPC_MESH_COMPANION,
- "Companion device",
- "Companion device",
- NM_TYPE_DEVICE_WIFI,
- G_PARAM_READABLE));
+ g_param_spec_object (NM_DEVICE_OLPC_MESH_COMPANION, "", "",
+ NM_TYPE_DEVICE_WIFI,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDeviceOlpcMesh:active-channel:
@@ -323,11 +319,9 @@ nm_device_olpc_mesh_class_init (NMDeviceOlpcMeshClass *olpc_mesh_class)
**/
g_object_class_install_property
(object_class, PROP_ACTIVE_CHANNEL,
- g_param_spec_uint (NM_DEVICE_OLPC_MESH_ACTIVE_CHANNEL,
- "Active channel",
- "Active channel",
+ g_param_spec_uint (NM_DEVICE_OLPC_MESH_ACTIVE_CHANNEL, "", "",
0, G_MAXUINT32, 0,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
}
-
diff --git a/libnm-glib/nm-device-olpc-mesh.h b/libnm-glib/nm-device-olpc-mesh.h
index 93cb2cdeb..fcef83bcd 100644
--- a/libnm-glib/nm-device-olpc-mesh.h
+++ b/libnm-glib/nm-device-olpc-mesh.h
@@ -1,8 +1,5 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* vim: set ft=c ts=4 sts=4 sw=4 noexpandtab smartindent: */
/*
- * 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
@@ -18,7 +15,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2012 Red Hat, Inc.
+ * Copyright 2012 Red Hat, Inc.
*/
#ifndef NM_DEVICE_OLPC_MESH_H
diff --git a/libnm-glib/nm-device-private.h b/libnm-glib/nm-device-private.h
index 5c674f2f7..82d676f92 100644
--- a/libnm-glib/nm-device-private.h
+++ b/libnm-glib/nm-device-private.h
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,7 +15,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2007 - 2012 Red Hat, Inc.
+ * Copyright 2007 - 2012 Red Hat, Inc.
*/
#ifndef NM_DEVICE_PRIVATE_H
diff --git a/libnm-glib/nm-device-team.c b/libnm-glib/nm-device-team.c
index f739e1d84..d9a5fce08 100644
--- a/libnm-glib/nm-device-team.c
+++ b/libnm-glib/nm-device-team.c
@@ -1,7 +1,5 @@
/* -*- 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
@@ -16,9 +14,12 @@
* 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 Jiri Pirko <jiri@resnulli.us>
*/
-#include <config.h>
+#include "config.h"
+
#include <string.h>
#include <netinet/ether.h>
@@ -93,9 +94,9 @@ nm_device_team_new (DBusGConnection *connection, const char *path)
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_DBUS_CONNECTION, connection,
+ NM_OBJECT_DBUS_PATH, path,
+ NULL);
_nm_object_ensure_inited (NM_OBJECT (device));
return device;
}
@@ -145,7 +146,7 @@ nm_device_team_get_carrier (NMDeviceTeam *device)
*
* Gets the devices currently enslaved to @device.
*
- * Returns: (element-type NMClient.Device): the #GPtrArray containing
+ * Returns: (element-type NMDevice): the #GPtrArray containing
* #NMDevices that are slaves of @device. This is the internal
* copy used by the device, and must not be modified.
*
@@ -297,12 +298,12 @@ get_property (GObject *object,
}
static void
-nm_device_team_class_init (NMDeviceTeamClass *eth_class)
+nm_device_team_class_init (NMDeviceTeamClass *team_class)
{
- GObjectClass *object_class = G_OBJECT_CLASS (eth_class);
- NMDeviceClass *device_class = NM_DEVICE_CLASS (eth_class);
+ GObjectClass *object_class = G_OBJECT_CLASS (team_class);
+ NMDeviceClass *device_class = NM_DEVICE_CLASS (team_class);
- g_type_class_add_private (eth_class, sizeof (NMDeviceTeamPrivate));
+ g_type_class_add_private (team_class, sizeof (NMDeviceTeamPrivate));
/* virtual methods */
object_class->constructed = constructed;
@@ -322,11 +323,10 @@ nm_device_team_class_init (NMDeviceTeamClass *eth_class)
**/
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",
+ g_param_spec_string (NM_DEVICE_TEAM_HW_ADDRESS, "", "",
NULL,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDeviceTeam:carrier:
@@ -335,11 +335,10 @@ nm_device_team_class_init (NMDeviceTeamClass *eth_class)
**/
g_object_class_install_property
(object_class, PROP_CARRIER,
- g_param_spec_boolean (NM_DEVICE_TEAM_CARRIER,
- "Carrier",
- "Carrier",
+ g_param_spec_boolean (NM_DEVICE_TEAM_CARRIER, "", "",
FALSE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDeviceTeam:slaves:
@@ -348,9 +347,8 @@ nm_device_team_class_init (NMDeviceTeamClass *eth_class)
**/
g_object_class_install_property
(object_class, PROP_SLAVES,
- g_param_spec_boxed (NM_DEVICE_TEAM_SLAVES,
- "Slaves",
- "Slaves",
+ g_param_spec_boxed (NM_DEVICE_TEAM_SLAVES, "", "",
NM_TYPE_OBJECT_ARRAY,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
}
diff --git a/libnm-glib/nm-device-team.h b/libnm-glib/nm-device-team.h
index 054f9ae2b..46e910bad 100644
--- a/libnm-glib/nm-device-team.h
+++ b/libnm-glib/nm-device-team.h
@@ -1,7 +1,5 @@
/* -*- 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
@@ -16,6 +14,8 @@
* 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 Jiri Pirko <jiri@resnulli.us>
*/
#ifndef NM_DEVICE_TEAM_H
diff --git a/libnm-glib/nm-device-vlan.c b/libnm-glib/nm-device-vlan.c
index 2a84b9465..26c234bdd 100644
--- a/libnm-glib/nm-device-vlan.c
+++ b/libnm-glib/nm-device-vlan.c
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,10 +15,11 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2012 Red Hat, Inc.
+ * Copyright 2012 Red Hat, Inc.
*/
-#include <config.h>
+#include "config.h"
+
#include <string.h>
#include <netinet/ether.h>
@@ -43,6 +42,7 @@ typedef struct {
char *hw_address;
gboolean carrier;
+ NMDevice *parent;
guint vlan_id;
} NMDeviceVlanPrivate;
@@ -50,6 +50,7 @@ enum {
PROP_0,
PROP_HW_ADDRESS,
PROP_CARRIER,
+ PROP_PARENT,
PROP_VLAN_ID,
LAST_PROP
@@ -133,6 +134,23 @@ nm_device_vlan_get_carrier (NMDeviceVlan *device)
}
/**
+ * nm_device_vlan_get_parent:
+ * @device: a #NMDeviceVlan
+ *
+ * Returns: (transfer none): the device's parent device
+ *
+ * Since: 1.0
+ **/
+NMDevice *
+nm_device_vlan_get_parent (NMDeviceVlan *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_VLAN (device), FALSE);
+
+ _nm_object_ensure_inited (NM_OBJECT (device));
+ return NM_DEVICE_VLAN_GET_PRIVATE (device)->parent;
+}
+
+/**
* nm_device_vlan_get_vlan_id:
* @device: a #NMDeviceVlan
*
@@ -232,6 +250,7 @@ register_properties (NMDeviceVlan *device)
const NMPropertiesInfo property_info[] = {
{ NM_DEVICE_VLAN_HW_ADDRESS, &priv->hw_address },
{ NM_DEVICE_VLAN_CARRIER, &priv->carrier },
+ { NM_DEVICE_VLAN_PARENT, &priv->parent, NULL, NM_TYPE_DEVICE },
{ NM_DEVICE_VLAN_VLAN_ID, &priv->vlan_id },
{ NULL },
};
@@ -257,6 +276,7 @@ dispose (GObject *object)
{
NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (object);
+ g_clear_object (&priv->parent);
g_clear_object (&priv->proxy);
G_OBJECT_CLASS (nm_device_vlan_parent_class)->dispose (object);
@@ -289,6 +309,9 @@ get_property (GObject *object,
case PROP_CARRIER:
g_value_set_boolean (value, nm_device_vlan_get_carrier (device));
break;
+ case PROP_PARENT:
+ g_value_set_object (value, nm_device_vlan_get_parent (device));
+ break;
case PROP_VLAN_ID:
g_value_set_uint (value, nm_device_vlan_get_vlan_id (device));
break;
@@ -299,12 +322,12 @@ get_property (GObject *object,
}
static void
-nm_device_vlan_class_init (NMDeviceVlanClass *eth_class)
+nm_device_vlan_class_init (NMDeviceVlanClass *vlan_class)
{
- GObjectClass *object_class = G_OBJECT_CLASS (eth_class);
- NMDeviceClass *device_class = NM_DEVICE_CLASS (eth_class);
+ GObjectClass *object_class = G_OBJECT_CLASS (vlan_class);
+ NMDeviceClass *device_class = NM_DEVICE_CLASS (vlan_class);
- g_type_class_add_private (eth_class, sizeof (NMDeviceVlanPrivate));
+ g_type_class_add_private (vlan_class, sizeof (NMDeviceVlanPrivate));
/* virtual methods */
object_class->constructed = constructed;
@@ -324,11 +347,10 @@ nm_device_vlan_class_init (NMDeviceVlanClass *eth_class)
**/
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",
+ g_param_spec_string (NM_DEVICE_VLAN_HW_ADDRESS, "", "",
NULL,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDeviceVlan:carrier:
@@ -337,11 +359,24 @@ nm_device_vlan_class_init (NMDeviceVlanClass *eth_class)
**/
g_object_class_install_property
(object_class, PROP_CARRIER,
- g_param_spec_boolean (NM_DEVICE_VLAN_CARRIER,
- "Carrier",
- "Carrier",
+ g_param_spec_boolean (NM_DEVICE_VLAN_CARRIER, "", "",
FALSE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDeviceVlan:parent:
+ *
+ * The devices's parent device.
+ *
+ * Since: 1.0
+ **/
+ g_object_class_install_property
+ (object_class, PROP_PARENT,
+ g_param_spec_object (NM_DEVICE_VLAN_PARENT, "", "",
+ NM_TYPE_DEVICE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDeviceVlan:vlan-id:
@@ -350,9 +385,8 @@ nm_device_vlan_class_init (NMDeviceVlanClass *eth_class)
**/
g_object_class_install_property
(object_class, PROP_VLAN_ID,
- g_param_spec_uint (NM_DEVICE_VLAN_VLAN_ID,
- "VLAN ID",
- "VLAN ID",
+ g_param_spec_uint (NM_DEVICE_VLAN_VLAN_ID, "", "",
0, 4095, 0,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
}
diff --git a/libnm-glib/nm-device-vlan.h b/libnm-glib/nm-device-vlan.h
index 960871093..107cfea88 100644
--- a/libnm-glib/nm-device-vlan.h
+++ b/libnm-glib/nm-device-vlan.h
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,7 +15,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2012 Red Hat, Inc.
+ * Copyright 2012 - 2014 Red Hat, Inc.
*/
#ifndef NM_DEVICE_VLAN_H
@@ -57,6 +55,7 @@ GQuark nm_device_vlan_error_quark (void);
#define NM_DEVICE_VLAN_HW_ADDRESS "hw-address"
#define NM_DEVICE_VLAN_CARRIER "carrier"
+#define NM_DEVICE_VLAN_PARENT "parent"
#define NM_DEVICE_VLAN_VLAN_ID "vlan-id"
typedef struct {
@@ -81,6 +80,8 @@ GObject *nm_device_vlan_new (DBusGConnection *connection, const char *path);
const char * nm_device_vlan_get_hw_address (NMDeviceVlan *device);
gboolean nm_device_vlan_get_carrier (NMDeviceVlan *device);
+NM_AVAILABLE_IN_1_0
+NMDevice * nm_device_vlan_get_parent (NMDeviceVlan *device);
guint nm_device_vlan_get_vlan_id (NMDeviceVlan *device);
G_END_DECLS
diff --git a/libnm-glib/nm-device-wifi.c b/libnm-glib/nm-device-wifi.c
index b9cc31d8f..28609c79d 100644
--- a/libnm-glib/nm-device-wifi.c
+++ b/libnm-glib/nm-device-wifi.c
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,11 +15,12 @@
* 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.
+ * Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2012 Red Hat, Inc.
*/
-#include <config.h>
+#include "config.h"
+
#include <string.h>
#include <netinet/ether.h>
@@ -270,7 +269,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
+ * Returns: (element-type NMAccessPoint): a #GPtrArray containing all the
* scanned #NMAccessPoints.
* The returned array is owned by the client and should not be modified.
**/
@@ -419,7 +418,7 @@ clean_up_aps (NMDeviceWifi *self, gboolean notify)
**/
void
_nm_device_wifi_set_wireless_enabled (NMDeviceWifi *device,
- gboolean enabled)
+ gboolean enabled)
{
g_return_if_fail (NM_IS_DEVICE_WIFI (device));
@@ -723,11 +722,10 @@ nm_device_wifi_class_init (NMDeviceWifiClass *wifi_class)
**/
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_param_spec_string (NM_DEVICE_WIFI_HW_ADDRESS, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDeviceWifi:perm-hw-address:
@@ -736,11 +734,10 @@ nm_device_wifi_class_init (NMDeviceWifiClass *wifi_class)
**/
g_object_class_install_property
(object_class, PROP_PERM_HW_ADDRESS,
- g_param_spec_string (NM_DEVICE_WIFI_PERMANENT_HW_ADDRESS,
- "Permanent MAC Address",
- "Permanent hardware MAC address",
- NULL,
- G_PARAM_READABLE));
+ g_param_spec_string (NM_DEVICE_WIFI_PERMANENT_HW_ADDRESS, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDeviceWifi:mode:
@@ -749,11 +746,10 @@ nm_device_wifi_class_init (NMDeviceWifiClass *wifi_class)
**/
g_object_class_install_property
(object_class, PROP_MODE,
- g_param_spec_uint (NM_DEVICE_WIFI_MODE,
- "Mode",
- "Mode",
- NM_802_11_MODE_UNKNOWN, NM_802_11_MODE_AP, NM_802_11_MODE_INFRA,
- G_PARAM_READABLE));
+ g_param_spec_uint (NM_DEVICE_WIFI_MODE, "", "",
+ NM_802_11_MODE_UNKNOWN, NM_802_11_MODE_AP, NM_802_11_MODE_INFRA,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDeviceWifi:bitrate:
@@ -762,11 +758,10 @@ nm_device_wifi_class_init (NMDeviceWifiClass *wifi_class)
**/
g_object_class_install_property
(object_class, PROP_BITRATE,
- g_param_spec_uint (NM_DEVICE_WIFI_BITRATE,
- "Bit Rate",
- "Bit Rate",
- 0, G_MAXUINT32, 0,
- G_PARAM_READABLE));
+ g_param_spec_uint (NM_DEVICE_WIFI_BITRATE, "", "",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDeviceWifi:active-access-point:
@@ -775,11 +770,10 @@ nm_device_wifi_class_init (NMDeviceWifiClass *wifi_class)
**/
g_object_class_install_property
(object_class, PROP_ACTIVE_ACCESS_POINT,
- g_param_spec_object (NM_DEVICE_WIFI_ACTIVE_ACCESS_POINT,
- "Active Access Point",
- "Active Access Point",
- NM_TYPE_ACCESS_POINT,
- G_PARAM_READABLE));
+ g_param_spec_object (NM_DEVICE_WIFI_ACTIVE_ACCESS_POINT, "", "",
+ NM_TYPE_ACCESS_POINT,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDeviceWifi:wireless-capabilities:
@@ -788,11 +782,10 @@ nm_device_wifi_class_init (NMDeviceWifiClass *wifi_class)
**/
g_object_class_install_property
(object_class, PROP_WIRELESS_CAPABILITIES,
- g_param_spec_uint (NM_DEVICE_WIFI_CAPABILITIES,
- "Wireless Capabilities",
- "Wireless Capabilities",
+ g_param_spec_uint (NM_DEVICE_WIFI_CAPABILITIES, "", "",
0, G_MAXUINT32, 0,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDeviceWifi:access-points:
@@ -803,11 +796,10 @@ nm_device_wifi_class_init (NMDeviceWifiClass *wifi_class)
**/
g_object_class_install_property
(object_class, PROP_ACCESS_POINTS,
- g_param_spec_boxed (NM_DEVICE_WIFI_ACCESS_POINTS,
- "AccessPoints",
- "Access Points",
+ g_param_spec_boxed (NM_DEVICE_WIFI_ACCESS_POINTS, "", "",
NM_TYPE_OBJECT_ARRAY,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/* signals */
@@ -820,13 +812,13 @@ nm_device_wifi_class_init (NMDeviceWifiClass *wifi_class)
**/
signals[ACCESS_POINT_ADDED] =
g_signal_new ("access-point-added",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (NMDeviceWifiClass, access_point_added),
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
- G_TYPE_NONE, 1,
- G_TYPE_OBJECT);
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMDeviceWifiClass, access_point_added),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE, 1,
+ G_TYPE_OBJECT);
/**
* NMDeviceWifi::access-point-removed:
@@ -837,11 +829,11 @@ nm_device_wifi_class_init (NMDeviceWifiClass *wifi_class)
**/
signals[ACCESS_POINT_REMOVED] =
g_signal_new ("access-point-removed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (NMDeviceWifiClass, access_point_removed),
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
- G_TYPE_NONE, 1,
- G_TYPE_OBJECT);
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMDeviceWifiClass, access_point_removed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE, 1,
+ G_TYPE_OBJECT);
}
diff --git a/libnm-glib/nm-device-wifi.h b/libnm-glib/nm-device-wifi.h
index f9b30d92b..2bb432a7b 100644
--- a/libnm-glib/nm-device-wifi.h
+++ b/libnm-glib/nm-device-wifi.h
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,8 +15,8 @@
* 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.
+ * Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2012 Red Hat, Inc.
*/
#ifndef NM_DEVICE_WIFI_H
diff --git a/libnm-glib/nm-device-wimax.c b/libnm-glib/nm-device-wimax.c
index 0b0528044..f0187fdc1 100644
--- a/libnm-glib/nm-device-wimax.c
+++ b/libnm-glib/nm-device-wimax.c
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,11 +15,12 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2011 - 2012 Red Hat, Inc.
- * Copyright (C) 2009 Novell, Inc.
+ * Copyright 2011 - 2012 Red Hat, Inc.
+ * Copyright 2009 Novell, Inc.
*/
-#include <config.h>
+#include "config.h"
+
#include <string.h>
#include <netinet/ether.h>
@@ -114,9 +113,9 @@ nm_device_wimax_new (DBusGConnection *connection, const char *path)
g_return_val_if_fail (path != NULL, NULL);
device = g_object_new (NM_TYPE_DEVICE_WIMAX,
- NM_OBJECT_DBUS_CONNECTION, connection,
- NM_OBJECT_DBUS_PATH, path,
- NULL);
+ NM_OBJECT_DBUS_CONNECTION, connection,
+ NM_OBJECT_DBUS_PATH, path,
+ NULL);
_nm_object_ensure_inited (NM_OBJECT (device));
return device;
}
@@ -180,7 +179,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
+ * Returns: (element-type NMWimaxNsp): a #GPtrArray containing
* all the scanned #NMWimaxNsps.
* The returned array is owned by the client and should not be modified.
**/
@@ -204,7 +203,7 @@ nm_device_wimax_get_nsps (NMDeviceWimax *wimax)
**/
NMWimaxNsp *
nm_device_wimax_get_nsp_by_path (NMDeviceWimax *wimax,
- const char *path)
+ const char *path)
{
const GPtrArray *nsps;
int i;
@@ -618,11 +617,10 @@ nm_device_wimax_class_init (NMDeviceWimaxClass *wimax_class)
**/
g_object_class_install_property
(object_class, PROP_HW_ADDRESS,
- g_param_spec_string (NM_DEVICE_WIMAX_HW_ADDRESS,
- "MAC Address",
- "Hardware MAC address",
+ g_param_spec_string (NM_DEVICE_WIMAX_HW_ADDRESS, "", "",
NULL,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDeviceWimax:active-nsp:
@@ -631,11 +629,10 @@ nm_device_wimax_class_init (NMDeviceWimaxClass *wimax_class)
**/
g_object_class_install_property
(object_class, PROP_ACTIVE_NSP,
- g_param_spec_object (NM_DEVICE_WIMAX_ACTIVE_NSP,
- "Active NSP",
- "Active NSP",
- NM_TYPE_WIMAX_NSP,
- G_PARAM_READABLE));
+ g_param_spec_object (NM_DEVICE_WIMAX_ACTIVE_NSP, "", "",
+ NM_TYPE_WIMAX_NSP,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDeviceWimax:center-frequency:
@@ -646,11 +643,10 @@ nm_device_wimax_class_init (NMDeviceWimaxClass *wimax_class)
**/
g_object_class_install_property
(object_class, PROP_CENTER_FREQ,
- g_param_spec_uint (NM_DEVICE_WIMAX_CENTER_FREQUENCY,
- "Center frequency",
- "Center frequency",
+ g_param_spec_uint (NM_DEVICE_WIMAX_CENTER_FREQUENCY, "", "",
0, G_MAXUINT, 0,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDeviceWimax:rssi:
@@ -662,11 +658,10 @@ nm_device_wimax_class_init (NMDeviceWimaxClass *wimax_class)
**/
g_object_class_install_property
(object_class, PROP_RSSI,
- g_param_spec_int (NM_DEVICE_WIMAX_RSSI,
- "RSSI",
- "RSSI",
+ g_param_spec_int (NM_DEVICE_WIMAX_RSSI, "", "",
G_MININT, G_MAXINT, 0,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDeviceWimax:cinr:
@@ -677,11 +672,10 @@ nm_device_wimax_class_init (NMDeviceWimaxClass *wimax_class)
**/
g_object_class_install_property
(object_class, PROP_CINR,
- g_param_spec_int (NM_DEVICE_WIMAX_CINR,
- "CINR",
- "CINR",
+ g_param_spec_int (NM_DEVICE_WIMAX_CINR, "", "",
G_MININT, G_MAXINT, 0,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDeviceWimax:tx-power:
@@ -692,11 +686,10 @@ nm_device_wimax_class_init (NMDeviceWimaxClass *wimax_class)
**/
g_object_class_install_property
(object_class, PROP_TX_POWER,
- g_param_spec_int (NM_DEVICE_WIMAX_TX_POWER,
- "TX Power",
- "TX Power",
+ g_param_spec_int (NM_DEVICE_WIMAX_TX_POWER, "", "",
G_MININT, G_MAXINT, 0,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDeviceWimax:bsid:
@@ -706,11 +699,10 @@ nm_device_wimax_class_init (NMDeviceWimaxClass *wimax_class)
**/
g_object_class_install_property
(object_class, PROP_BSID,
- g_param_spec_string (NM_DEVICE_WIMAX_BSID,
- "BSID",
- "BSID",
+ g_param_spec_string (NM_DEVICE_WIMAX_BSID, "", "",
NULL,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDeviceWimax:nsps:
@@ -721,11 +713,10 @@ nm_device_wimax_class_init (NMDeviceWimaxClass *wimax_class)
**/
g_object_class_install_property
(object_class, PROP_NSPS,
- g_param_spec_boxed (NM_DEVICE_WIMAX_NSPS,
- "NSPs",
- "Network Service Providers",
+ g_param_spec_boxed (NM_DEVICE_WIMAX_NSPS, "", "",
NM_TYPE_OBJECT_ARRAY,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/* signals */
@@ -738,13 +729,13 @@ nm_device_wimax_class_init (NMDeviceWimaxClass *wimax_class)
**/
signals[NSP_ADDED] =
g_signal_new ("nsp-added",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (NMDeviceWimaxClass, nsp_added),
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
- G_TYPE_NONE, 1,
- G_TYPE_OBJECT);
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMDeviceWimaxClass, nsp_added),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE, 1,
+ G_TYPE_OBJECT);
/**
* NMDeviceWimax::nsp-removed:
@@ -755,11 +746,11 @@ nm_device_wimax_class_init (NMDeviceWimaxClass *wimax_class)
**/
signals[NSP_REMOVED] =
g_signal_new ("nsp-removed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (NMDeviceWimaxClass, nsp_removed),
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
- G_TYPE_NONE, 1,
- G_TYPE_OBJECT);
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMDeviceWimaxClass, nsp_removed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE, 1,
+ G_TYPE_OBJECT);
}
diff --git a/libnm-glib/nm-device-wimax.h b/libnm-glib/nm-device-wimax.h
index b2282d4f1..1b889d95f 100644
--- a/libnm-glib/nm-device-wimax.h
+++ b/libnm-glib/nm-device-wimax.h
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,8 +15,8 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2011 - 2012 Red Hat, Inc.
- * Copyright (C) 2009 Novell, Inc.
+ * Copyright 2011 - 2012 Red Hat, Inc.
+ * Copyright 2009 Novell, Inc.
*/
#ifndef NM_DEVICE_WIMAX_H
@@ -79,12 +77,12 @@ typedef struct {
GType nm_device_wimax_get_type (void);
GObject *nm_device_wimax_new (DBusGConnection *connection,
- const char *path);
+ const char *path);
const char *nm_device_wimax_get_hw_address (NMDeviceWimax *wimax);
NMWimaxNsp *nm_device_wimax_get_active_nsp (NMDeviceWimax *wimax);
NMWimaxNsp *nm_device_wimax_get_nsp_by_path (NMDeviceWimax *wimax,
- const char *path);
+ const char *path);
const GPtrArray *nm_device_wimax_get_nsps (NMDeviceWimax *wimax);
diff --git a/libnm-glib/nm-device.c b/libnm-glib/nm-device.c
index b328ba3bb..bd5d16374 100644
--- a/libnm-glib/nm-device.c
+++ b/libnm-glib/nm-device.c
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,13 +15,15 @@
* 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.
+ * Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2012 Red Hat, Inc.
*/
+#include "config.h"
+
#include <string.h>
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
#include <gudev/gudev.h>
#include "NetworkManager.h"
@@ -346,9 +346,9 @@ constructed (GObject *object)
register_properties (NM_DEVICE (object));
dbus_g_object_register_marshaller (g_cclosure_marshal_generic,
- G_TYPE_NONE,
- G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT,
- G_TYPE_INVALID);
+ G_TYPE_NONE,
+ G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT,
+ G_TYPE_INVALID);
dbus_g_proxy_add_signal (priv->proxy,
"StateChanged",
@@ -356,9 +356,9 @@ constructed (GObject *object)
G_TYPE_INVALID);
dbus_g_proxy_connect_signal (priv->proxy, "StateChanged",
- G_CALLBACK (device_state_changed),
- NM_DEVICE (object),
- NULL);
+ G_CALLBACK (device_state_changed),
+ NM_DEVICE (object),
+ NULL);
}
static void
@@ -552,11 +552,10 @@ nm_device_class_init (NMDeviceClass *device_class)
**/
g_object_class_install_property
(object_class, PROP_INTERFACE,
- g_param_spec_string (NM_DEVICE_INTERFACE,
- "Interface",
- "Interface name",
- NULL,
- G_PARAM_READABLE));
+ g_param_spec_string (NM_DEVICE_INTERFACE, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDevice:ip-interface:
@@ -566,11 +565,10 @@ nm_device_class_init (NMDeviceClass *device_class)
**/
g_object_class_install_property
(object_class, PROP_IP_INTERFACE,
- g_param_spec_string (NM_DEVICE_IP_INTERFACE,
- "IP Interface",
- "IP Interface name",
- NULL,
- G_PARAM_READABLE));
+ g_param_spec_string (NM_DEVICE_IP_INTERFACE, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDevice:device-type:
@@ -579,11 +577,10 @@ nm_device_class_init (NMDeviceClass *device_class)
**/
g_object_class_install_property
(object_class, PROP_DEVICE_TYPE,
- g_param_spec_uint (NM_DEVICE_DEVICE_TYPE,
- "Device Type",
- "Numeric device type (ie Ethernet, Wi-Fi, etc)",
- NM_DEVICE_TYPE_UNKNOWN, G_MAXUINT32, NM_DEVICE_TYPE_UNKNOWN,
- G_PARAM_READABLE));
+ g_param_spec_uint (NM_DEVICE_DEVICE_TYPE, "", "",
+ NM_DEVICE_TYPE_UNKNOWN, G_MAXUINT32, NM_DEVICE_TYPE_UNKNOWN,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDevice:udi:
*
@@ -596,11 +593,10 @@ nm_device_class_init (NMDeviceClass *device_class)
**/
g_object_class_install_property
(object_class, PROP_UDI,
- g_param_spec_string (NM_DEVICE_UDI,
- "UDI",
- "Unique Device Identifier",
- NULL,
- G_PARAM_READABLE));
+ g_param_spec_string (NM_DEVICE_UDI, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDevice:driver:
@@ -609,11 +605,10 @@ nm_device_class_init (NMDeviceClass *device_class)
**/
g_object_class_install_property
(object_class, PROP_DRIVER,
- g_param_spec_string (NM_DEVICE_DRIVER,
- "Driver",
- "Driver",
- NULL,
- G_PARAM_READABLE));
+ g_param_spec_string (NM_DEVICE_DRIVER, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDevice:driver-version:
@@ -622,11 +617,10 @@ nm_device_class_init (NMDeviceClass *device_class)
**/
g_object_class_install_property
(object_class, PROP_DRIVER_VERSION,
- g_param_spec_string (NM_DEVICE_DRIVER_VERSION,
- "Driver Version",
- "Driver Version",
+ g_param_spec_string (NM_DEVICE_DRIVER_VERSION, "", "",
NULL,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDevice:firmware-version:
@@ -635,11 +629,10 @@ nm_device_class_init (NMDeviceClass *device_class)
**/
g_object_class_install_property
(object_class, PROP_FIRMWARE_VERSION,
- g_param_spec_string (NM_DEVICE_FIRMWARE_VERSION,
- "Firmware Version",
- "Firmware Version",
+ g_param_spec_string (NM_DEVICE_FIRMWARE_VERSION, "", "",
NULL,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDevice:capabilities:
@@ -648,11 +641,10 @@ nm_device_class_init (NMDeviceClass *device_class)
**/
g_object_class_install_property
(object_class, PROP_CAPABILITIES,
- g_param_spec_uint (NM_DEVICE_CAPABILITIES,
- "Capabilities",
- "Capabilities",
- 0, G_MAXUINT32, 0,
- G_PARAM_READABLE));
+ g_param_spec_uint (NM_DEVICE_CAPABILITIES, "", "",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDevice:managed:
@@ -661,11 +653,10 @@ nm_device_class_init (NMDeviceClass *device_class)
**/
g_object_class_install_property
(object_class, PROP_MANAGED,
- g_param_spec_boolean (NM_DEVICE_MANAGED,
- "Managed",
- "Managed",
- FALSE,
- G_PARAM_READABLE));
+ g_param_spec_boolean (NM_DEVICE_MANAGED, "", "",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDevice:autoconnect:
@@ -674,11 +665,10 @@ nm_device_class_init (NMDeviceClass *device_class)
**/
g_object_class_install_property
(object_class, PROP_AUTOCONNECT,
- g_param_spec_boolean (NM_DEVICE_AUTOCONNECT,
- "Autoconnect",
- "Autoconnect",
+ g_param_spec_boolean (NM_DEVICE_AUTOCONNECT, "", "",
TRUE,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDevice:firmware-missing:
@@ -688,11 +678,10 @@ nm_device_class_init (NMDeviceClass *device_class)
**/
g_object_class_install_property
(object_class, PROP_FIRMWARE_MISSING,
- g_param_spec_boolean (NM_DEVICE_FIRMWARE_MISSING,
- "FirmwareMissing",
- "Firmware missing",
- FALSE,
- G_PARAM_READABLE));
+ g_param_spec_boolean (NM_DEVICE_FIRMWARE_MISSING, "", "",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDevice:ip4-config:
@@ -701,11 +690,10 @@ nm_device_class_init (NMDeviceClass *device_class)
**/
g_object_class_install_property
(object_class, PROP_IP4_CONFIG,
- g_param_spec_object (NM_DEVICE_IP4_CONFIG,
- "IP4 Config",
- "IP4 Config",
- NM_TYPE_IP4_CONFIG,
- G_PARAM_READABLE));
+ g_param_spec_object (NM_DEVICE_IP4_CONFIG, "", "",
+ NM_TYPE_IP4_CONFIG,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDevice:dhcp4-config:
@@ -714,11 +702,10 @@ nm_device_class_init (NMDeviceClass *device_class)
**/
g_object_class_install_property
(object_class, PROP_DHCP4_CONFIG,
- g_param_spec_object (NM_DEVICE_DHCP4_CONFIG,
- "DHCP4 Config",
- "DHCP4 Config",
- NM_TYPE_DHCP4_CONFIG,
- G_PARAM_READABLE));
+ g_param_spec_object (NM_DEVICE_DHCP4_CONFIG, "", "",
+ NM_TYPE_DHCP4_CONFIG,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDevice:ip6-config:
@@ -727,11 +714,10 @@ nm_device_class_init (NMDeviceClass *device_class)
**/
g_object_class_install_property
(object_class, PROP_IP6_CONFIG,
- g_param_spec_object (NM_DEVICE_IP6_CONFIG,
- "IP6 Config",
- "IP6 Config",
+ g_param_spec_object (NM_DEVICE_IP6_CONFIG, "", "",
NM_TYPE_IP6_CONFIG,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDevice:dhcp6-config:
@@ -740,11 +726,10 @@ nm_device_class_init (NMDeviceClass *device_class)
**/
g_object_class_install_property
(object_class, PROP_DHCP6_CONFIG,
- g_param_spec_object (NM_DEVICE_DHCP6_CONFIG,
- "DHCP6 Config",
- "DHCP6 Config",
- NM_TYPE_DHCP6_CONFIG,
- G_PARAM_READABLE));
+ g_param_spec_object (NM_DEVICE_DHCP6_CONFIG, "", "",
+ NM_TYPE_DHCP6_CONFIG,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDevice:state:
@@ -753,11 +738,10 @@ nm_device_class_init (NMDeviceClass *device_class)
**/
g_object_class_install_property
(object_class, PROP_STATE,
- g_param_spec_uint (NM_DEVICE_STATE,
- "State",
- "State",
- 0, G_MAXUINT32, 0,
- G_PARAM_READABLE));
+ g_param_spec_uint (NM_DEVICE_STATE, "", "",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDevice:state-reason:
@@ -766,11 +750,10 @@ nm_device_class_init (NMDeviceClass *device_class)
**/
g_object_class_install_property
(object_class, PROP_STATE_REASON,
- g_param_spec_boxed (NM_DEVICE_STATE_REASON,
- "StateReason",
- "StateReason",
+ g_param_spec_boxed (NM_DEVICE_STATE_REASON, "", "",
DBUS_G_TYPE_UINT_STRUCT,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDevice:active-connection:
@@ -779,11 +762,10 @@ nm_device_class_init (NMDeviceClass *device_class)
**/
g_object_class_install_property
(object_class, PROP_ACTIVE_CONNECTION,
- g_param_spec_object (NM_DEVICE_ACTIVE_CONNECTION,
- "ActiveConnection",
- "Active Connection",
+ g_param_spec_object (NM_DEVICE_ACTIVE_CONNECTION, "", "",
NM_TYPE_ACTIVE_CONNECTION,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDevice:available-connections:
@@ -794,11 +776,10 @@ nm_device_class_init (NMDeviceClass *device_class)
**/
g_object_class_install_property
(object_class, PROP_AVAILABLE_CONNECTIONS,
- g_param_spec_boxed (NM_DEVICE_AVAILABLE_CONNECTIONS,
- "AvailableConnections",
- "Available Connections",
- NM_TYPE_OBJECT_ARRAY,
- G_PARAM_READABLE));
+ g_param_spec_boxed (NM_DEVICE_AVAILABLE_CONNECTIONS, "", "",
+ NM_TYPE_OBJECT_ARRAY,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDevice:vendor:
@@ -807,11 +788,10 @@ nm_device_class_init (NMDeviceClass *device_class)
**/
g_object_class_install_property
(object_class, PROP_VENDOR,
- g_param_spec_string (NM_DEVICE_VENDOR,
- "Vendor",
- "Vendor string",
- NULL,
- G_PARAM_READABLE));
+ g_param_spec_string (NM_DEVICE_VENDOR, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDevice:product:
@@ -820,11 +800,10 @@ nm_device_class_init (NMDeviceClass *device_class)
**/
g_object_class_install_property
(object_class, PROP_PRODUCT,
- g_param_spec_string (NM_DEVICE_PRODUCT,
- "Product",
- "Product string",
- NULL,
- G_PARAM_READABLE));
+ g_param_spec_string (NM_DEVICE_PRODUCT, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDevice:physical-port-id:
@@ -836,11 +815,10 @@ nm_device_class_init (NMDeviceClass *device_class)
**/
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",
+ g_param_spec_string (NM_DEVICE_PHYSICAL_PORT_ID, "", "",
NULL,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMDevice:mtu:
@@ -851,11 +829,10 @@ nm_device_class_init (NMDeviceClass *device_class)
**/
g_object_class_install_property
(object_class, PROP_MTU,
- g_param_spec_uint (NM_DEVICE_MTU,
- "MTU",
- "MTU",
+ g_param_spec_uint (NM_DEVICE_MTU, "", "",
0, G_MAXUINT32, 1500,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/* signals */
@@ -870,12 +847,12 @@ nm_device_class_init (NMDeviceClass *device_class)
**/
signals[STATE_CHANGED] =
g_signal_new ("state-changed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (NMDeviceClass, state_changed),
- NULL, NULL, NULL,
- G_TYPE_NONE, 3,
- G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT);
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMDeviceClass, state_changed),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 3,
+ G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT);
}
/**
@@ -1448,7 +1425,7 @@ nm_device_get_active_connection (NMDevice *device)
* Gets the #NMRemoteConnections currently known to the daemon that could
* be activated on @device.
*
- * Returns: (element-type NMClient.RemoteConnection): the #GPtrArray
+ * Returns: (element-type NMRemoteConnection): the #GPtrArray
* containing #NMRemoteConnections. This is the internal copy used by
* the connection, and must not be modified.
*
@@ -1782,8 +1759,7 @@ get_short_vendor (NMDevice *device)
* 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().
+ * Gets a description of @device, based on its vendor and product names.
*
* Returns: a description of @device. If either the vendor or the
* product name is unknown, this returns the interface name.
@@ -2090,18 +2066,38 @@ nm_device_get_mtu (NMDevice *device)
return NM_DEVICE_GET_PRIVATE (device)->mtu;
}
+/**
+ * nm_device_is_software:
+ * @device: a #NMDevice
+ *
+ * Whether the device is a software device.
+ *
+ * Returns: %TRUE if @device is a software device, %FALSE if it is a hardware device.
+ *
+ * Since: 1.0
+ **/
+gboolean
+nm_device_is_software (NMDevice *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (device), FALSE);
+
+ _nm_object_ensure_inited (NM_OBJECT (device));
+ return !!(NM_DEVICE_GET_PRIVATE (device)->capabilities & NM_DEVICE_CAP_IS_SOFTWARE);
+}
+
typedef struct {
NMDevice *device;
- NMDeviceDeactivateFn fn;
+ NMDeviceCallbackFn fn;
gpointer user_data;
-} DeactivateInfo;
+ const char *method;
+} DeviceCallbackInfo;
static void
-deactivate_cb (DBusGProxy *proxy,
- DBusGProxyCall *call,
- gpointer user_data)
+device_operation_cb (DBusGProxy *proxy,
+ DBusGProxyCall *call,
+ gpointer user_data)
{
- DeactivateInfo *info = user_data;
+ DeviceCallbackInfo *info = user_data;
GError *error = NULL;
dbus_g_proxy_end_call (proxy, call, &error,
@@ -2109,16 +2105,17 @@ deactivate_cb (DBusGProxy *proxy,
if (info->fn)
info->fn (info->device, error, info->user_data);
else if (error) {
- g_warning ("%s: device %s deactivation failed: (%d) %s",
+ g_warning ("%s: device %s %s failed: (%d) %s",
__func__,
nm_object_get_path (NM_OBJECT (info->device)),
+ info->method,
error ? error->code : -1,
error && error->message ? error->message : "(unknown)");
}
g_clear_error (&error);
g_object_unref (info->device);
- g_slice_free (DeactivateInfo, info);
+ g_slice_free (DeviceCallbackInfo, info);
}
/**
@@ -2134,20 +2131,52 @@ deactivate_cb (DBusGProxy *proxy,
**/
void
nm_device_disconnect (NMDevice *device,
- NMDeviceDeactivateFn callback,
+ NMDeviceCallbackFn callback,
gpointer user_data)
{
- DeactivateInfo *info;
+ DeviceCallbackInfo *info;
g_return_if_fail (NM_IS_DEVICE (device));
- info = g_slice_new (DeactivateInfo);
+ info = g_slice_new (DeviceCallbackInfo);
info->fn = callback;
info->user_data = user_data;
+ info->method = "Disconnect";
info->device = g_object_ref (device);
dbus_g_proxy_begin_call (NM_DEVICE_GET_PRIVATE (device)->proxy, "Disconnect",
- deactivate_cb, info, NULL,
+ device_operation_cb, info, NULL,
+ G_TYPE_INVALID);
+}
+
+/**
+ * nm_device_delete:
+ * @device: a #NMDevice
+ * @callback: (scope async) (allow-none): callback to be called when delete
+ * operation completes
+ * @user_data: (closure): caller-specific data passed to @callback
+ *
+ * Deletes the software device. Hardware devices can't be deleted.
+ *
+ * Since: 1.0
+ **/
+void
+nm_device_delete (NMDevice *device,
+ NMDeviceCallbackFn callback,
+ gpointer user_data)
+{
+ DeviceCallbackInfo *info;
+
+ g_return_if_fail (NM_IS_DEVICE (device));
+
+ info = g_slice_new (DeviceCallbackInfo);
+ info->fn = callback;
+ info->user_data = user_data;
+ info->method = "Delete";
+ info->device = g_object_ref (device);
+
+ dbus_g_proxy_begin_call (NM_DEVICE_GET_PRIVATE (device)->proxy, "Delete",
+ device_operation_cb, info, NULL,
G_TYPE_INVALID);
}
@@ -2186,7 +2215,7 @@ connection_compatible (NMDevice *device, NMConnection *connection, GError **erro
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.");
+ "The interface names of the device and the connection didn't match.");
return FALSE;
}
@@ -2227,7 +2256,7 @@ nm_device_connection_compatible (NMDevice *device, NMConnection *connection, GEr
/**
* nm_device_filter_connections:
* @device: an #NMDevice to filter connections for
- * @connections: (element-type NetworkManager.Connection): a list of #NMConnection objects to filter
+ * @connections: (element-type NMConnection): a list of #NMConnection objects to filter
*
* 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
@@ -2238,7 +2267,7 @@ nm_device_connection_compatible (NMDevice *device, NMConnection *connection, GEr
* incompatible with the device. To get the full list of connections see
* nm_remote_settings_list_connections().
*
- * Returns: (transfer container) (element-type NetworkManager.Connection): a
+ * Returns: (transfer container) (element-type NMConnection): a
* list of #NMConnection objects that could be activated with the given @device.
* 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
diff --git a/libnm-glib/nm-device.h b/libnm-glib/nm-device.h
index ed0f68767..707fddf82 100644
--- a/libnm-glib/nm-device.h
+++ b/libnm-glib/nm-device.h
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,8 +15,8 @@
* 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.
+ * Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2013 Red Hat, Inc.
*/
#ifndef NM_DEVICE_H
@@ -144,6 +142,8 @@ 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);
+NM_AVAILABLE_IN_1_0
+gboolean nm_device_is_software (NMDevice *device);
const char * nm_device_get_product (NMDevice *device);
const char * nm_device_get_vendor (NMDevice *device);
@@ -153,10 +153,15 @@ 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);
+typedef void (*NMDeviceCallbackFn) (NMDevice *device, GError *error, gpointer user_data);
void nm_device_disconnect (NMDevice *device,
- NMDeviceDeactivateFn callback,
+ NMDeviceCallbackFn callback,
+ gpointer user_data);
+
+NM_AVAILABLE_IN_1_0
+void nm_device_delete (NMDevice *device,
+ NMDeviceCallbackFn callback,
gpointer user_data);
GSList * nm_device_filter_connections (NMDevice *device,
@@ -172,6 +177,10 @@ gboolean nm_device_connection_compatible (NMDevice *device,
NM_AVAILABLE_IN_0_9_10
GType nm_device_get_setting_type (NMDevice *device);
+/* Deprecated */
+NM_DEPRECATED_IN_1_0
+typedef void (*NMDeviceDeactivateFn) (NMDevice *device, GError *error, gpointer user_data);
+
G_END_DECLS
#endif /* NM_DEVICE_H */
diff --git a/libnm-glib/nm-dhcp4-config.c b/libnm-glib/nm-dhcp4-config.c
index a861d9820..584793742 100644
--- a/libnm-glib/nm-dhcp4-config.c
+++ b/libnm-glib/nm-dhcp4-config.c
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,10 +15,12 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2008 - 2011 Red Hat, Inc.
- * Copyright (C) 2008 Novell, Inc.
+ * Copyright 2008 - 2011 Red Hat, Inc.
+ * Copyright 2008 Novell, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include "nm-dhcp4-config.h"
@@ -156,11 +156,10 @@ nm_dhcp4_config_class_init (NMDHCP4ConfigClass *config_class)
**/
g_object_class_install_property
(object_class, PROP_OPTIONS,
- g_param_spec_boxed (NM_DHCP4_CONFIG_OPTIONS,
- "Options",
- "Options",
- G_TYPE_HASH_TABLE,
- G_PARAM_READABLE));
+ g_param_spec_boxed (NM_DHCP4_CONFIG_OPTIONS, "", "",
+ G_TYPE_HASH_TABLE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
}
/**
@@ -176,9 +175,9 @@ GObject *
nm_dhcp4_config_new (DBusGConnection *connection, const char *object_path)
{
return (GObject *) g_object_new (NM_TYPE_DHCP4_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);
}
/**
@@ -216,4 +215,3 @@ nm_dhcp4_config_get_one_option (NMDHCP4Config *config, const char *option)
return g_hash_table_lookup (nm_dhcp4_config_get_options (config), option);
}
-
diff --git a/libnm-glib/nm-dhcp4-config.h b/libnm-glib/nm-dhcp4-config.h
index 9ca1a7695..c64e9a9c8 100644
--- a/libnm-glib/nm-dhcp4-config.h
+++ b/libnm-glib/nm-dhcp4-config.h
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,8 +15,8 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2008 Red Hat, Inc.
- * Copyright (C) 2008 Novell, Inc.
+ * Copyright 2008 Red Hat, Inc.
+ * Copyright 2008 Novell, Inc.
*/
#ifndef NM_DHCP4_CONFIG_H
diff --git a/libnm-glib/nm-dhcp6-config.c b/libnm-glib/nm-dhcp6-config.c
index ef6006b05..e55c14166 100644
--- a/libnm-glib/nm-dhcp6-config.c
+++ b/libnm-glib/nm-dhcp6-config.c
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,10 +15,12 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2008 - 2011 Red Hat, Inc.
- * Copyright (C) 2008 Novell, Inc.
+ * Copyright 2008 - 2011 Red Hat, Inc.
+ * Copyright 2008 Novell, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include "nm-dhcp6-config.h"
@@ -156,11 +156,10 @@ nm_dhcp6_config_class_init (NMDHCP6ConfigClass *config_class)
**/
g_object_class_install_property
(object_class, PROP_OPTIONS,
- g_param_spec_boxed (NM_DHCP6_CONFIG_OPTIONS,
- "Options",
- "Options",
- G_TYPE_HASH_TABLE,
- G_PARAM_READABLE));
+ g_param_spec_boxed (NM_DHCP6_CONFIG_OPTIONS, "", "",
+ G_TYPE_HASH_TABLE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
}
/**
@@ -176,9 +175,9 @@ GObject *
nm_dhcp6_config_new (DBusGConnection *connection, const char *object_path)
{
return (GObject *) g_object_new (NM_TYPE_DHCP6_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);
}
/**
@@ -216,4 +215,3 @@ nm_dhcp6_config_get_one_option (NMDHCP6Config *config, const char *option)
return g_hash_table_lookup (nm_dhcp6_config_get_options (config), option);
}
-
diff --git a/libnm-glib/nm-dhcp6-config.h b/libnm-glib/nm-dhcp6-config.h
index 44002940b..939b3fdbe 100644
--- a/libnm-glib/nm-dhcp6-config.h
+++ b/libnm-glib/nm-dhcp6-config.h
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,8 +15,8 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2008 - 2010 Red Hat, Inc.
- * Copyright (C) 2008 Novell, Inc.
+ * Copyright 2008 - 2010 Red Hat, Inc.
+ * Copyright 2008 Novell, Inc.
*/
#ifndef NM_DHCP6_CONFIG_H
diff --git a/libnm-glib/nm-ip4-config.c b/libnm-glib/nm-ip4-config.c
index ec523a033..ffaef7416 100644
--- a/libnm-glib/nm-ip4-config.c
+++ b/libnm-glib/nm-ip4-config.c
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,10 +15,12 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2007 - 2011 Novell, Inc.
- * Copyright (C) 2008 Red Hat, Inc.
+ * Copyright 2007 - 2011 Novell, Inc.
+ * Copyright 2008 Red Hat, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include <nm-setting-ip4-config.h>
@@ -240,11 +240,10 @@ nm_ip4_config_class_init (NMIP4ConfigClass *config_class)
**/
g_object_class_install_property
(object_class, PROP_GATEWAY,
- g_param_spec_string (NM_IP4_CONFIG_GATEWAY,
- "Gateway",
- "Gateway",
+ g_param_spec_string (NM_IP4_CONFIG_GATEWAY, "", "",
NULL,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMIP4Config:addresses:
@@ -253,10 +252,9 @@ nm_ip4_config_class_init (NMIP4ConfigClass *config_class)
**/
g_object_class_install_property
(object_class, PROP_ADDRESSES,
- g_param_spec_pointer (NM_IP4_CONFIG_ADDRESSES,
- "Addresses",
- "Addresses",
- G_PARAM_READABLE));
+ g_param_spec_pointer (NM_IP4_CONFIG_ADDRESSES, "", "",
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMIP4Config:routes:
@@ -265,10 +263,9 @@ nm_ip4_config_class_init (NMIP4ConfigClass *config_class)
**/
g_object_class_install_property
(object_class, PROP_ROUTES,
- g_param_spec_pointer (NM_IP4_CONFIG_ROUTES,
- "Routes",
- "Routes",
- G_PARAM_READABLE));
+ g_param_spec_pointer (NM_IP4_CONFIG_ROUTES, "", "",
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMIP4Config:nameservers:
@@ -277,11 +274,10 @@ nm_ip4_config_class_init (NMIP4ConfigClass *config_class)
**/
g_object_class_install_property
(object_class, PROP_NAMESERVERS,
- g_param_spec_boxed (NM_IP4_CONFIG_NAMESERVERS,
- "Nameservers",
- "Nameservers",
+ g_param_spec_boxed (NM_IP4_CONFIG_NAMESERVERS, "", "",
NM_TYPE_UINT_ARRAY,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMIP4Config:domains:
@@ -290,11 +286,10 @@ nm_ip4_config_class_init (NMIP4ConfigClass *config_class)
**/
g_object_class_install_property
(object_class, PROP_DOMAINS,
- g_param_spec_boxed (NM_IP4_CONFIG_DOMAINS,
- "Domains",
- "Domains",
+ g_param_spec_boxed (NM_IP4_CONFIG_DOMAINS, "", "",
NM_TYPE_STRING_ARRAY,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMIP4Config:searches:
@@ -305,11 +300,10 @@ nm_ip4_config_class_init (NMIP4ConfigClass *config_class)
**/
g_object_class_install_property
(object_class, PROP_SEARCHES,
- g_param_spec_boxed (NM_IP4_CONFIG_SEARCHES,
- "Searches",
- "DNS searches",
+ g_param_spec_boxed (NM_IP4_CONFIG_SEARCHES, "", "",
NM_TYPE_STRING_ARRAY,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMIP4Config:wins-servers:
@@ -318,11 +312,10 @@ nm_ip4_config_class_init (NMIP4ConfigClass *config_class)
**/
g_object_class_install_property
(object_class, PROP_WINS_SERVERS,
- g_param_spec_boxed (NM_IP4_CONFIG_WINS_SERVERS,
- "WINS Servers",
- "WINS Servers",
+ g_param_spec_boxed (NM_IP4_CONFIG_WINS_SERVERS, "", "",
NM_TYPE_UINT_ARRAY,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
}
/**
@@ -368,7 +361,7 @@ nm_ip4_config_get_gateway (NMIP4Config *config)
*
* Gets the IP4 addresses (containing the address, prefix, and gateway).
*
- * Returns: (element-type NetworkManager.IP4Address): the #GSList containing #NMIP4Address<!-- -->es.
+ * Returns: (element-type NMIP4Address): the #GSList containing #NMIP4Address<!-- -->es.
* This is the internal copy used by the configuration and must not be modified.
**/
const GSList *
@@ -405,7 +398,7 @@ nm_ip4_config_get_nameservers (NMIP4Config *config)
*
* Gets the domain names.
*
- * Returns: (element-type utf8): the #GPtrArray containing domains as strings. This is the
+ * Returns: (element-type utf8): the #GPtrArray containing domains as strings. This is the
* internal copy used by the configuration, and must not be modified.
**/
const GPtrArray *
@@ -462,7 +455,7 @@ nm_ip4_config_get_wins_servers (NMIP4Config *config)
*
* Gets the routes.
*
- * Returns: (element-type NetworkManager.IP4Route): the #GSList containing
+ * Returns: (element-type NMIP4Route): the #GSList containing
* #NMIP4Routes. This is the internal copy used by the configuration,
* and must not be modified.
**/
@@ -474,4 +467,3 @@ nm_ip4_config_get_routes (NMIP4Config *config)
_nm_object_ensure_inited (NM_OBJECT (config));
return NM_IP4_CONFIG_GET_PRIVATE (config)->routes;
}
-
diff --git a/libnm-glib/nm-ip4-config.h b/libnm-glib/nm-ip4-config.h
index aa2e66eb8..58b6b3714 100644
--- a/libnm-glib/nm-ip4-config.h
+++ b/libnm-glib/nm-ip4-config.h
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,8 +15,8 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2008 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2008 Red Hat, Inc.
*/
#ifndef NM_IP4_CONFIG_H
diff --git a/libnm-glib/nm-ip6-config.c b/libnm-glib/nm-ip6-config.c
index 7c9cfca74..d44056a1c 100644
--- a/libnm-glib/nm-ip6-config.c
+++ b/libnm-glib/nm-ip6-config.c
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,10 +15,12 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2008 - 2014 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2008 - 2014 Red Hat, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include <nm-setting-ip6-config.h>
@@ -70,9 +70,9 @@ GObject *
nm_ip6_config_new (DBusGConnection *connection, const char *object_path)
{
return (GObject *) g_object_new (NM_TYPE_IP6_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);
}
static gboolean
@@ -179,7 +179,7 @@ nm_ip6_config_get_gateway (NMIP6Config *config)
*
* Gets the IP6 addresses (containing the address, prefix, and gateway).
*
- * Returns: (element-type NetworkManager.IP6Address): the #GSList containing
+ * Returns: (element-type NMIP6Address): the #GSList containing
* #NMIP6Address<!-- -->es. This is the internal copy used by the configuration
* and must not be modified.
**/
@@ -306,7 +306,7 @@ nm_ip6_config_get_searches (NMIP6Config *config)
*
* Gets the routes.
*
- * Returns: (element-type NetworkManager.IP6Route): the #GSList containing
+ * Returns: (element-type NMIP6Route): the #GSList containing
* #NMIP6Routes. This is the internal copy used by the configuration,
* and must not be modified.
**/
@@ -420,11 +420,10 @@ nm_ip6_config_class_init (NMIP6ConfigClass *config_class)
**/
g_object_class_install_property
(object_class, PROP_GATEWAY,
- g_param_spec_string (NM_IP6_CONFIG_GATEWAY,
- "Gateway",
- "Gateway",
+ g_param_spec_string (NM_IP6_CONFIG_GATEWAY, "", "",
NULL,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMIP6Config:addresses:
@@ -435,11 +434,10 @@ nm_ip6_config_class_init (NMIP6ConfigClass *config_class)
**/
g_object_class_install_property
(object_class, PROP_ADDRESSES,
- g_param_spec_boxed (NM_IP6_CONFIG_ADDRESSES,
- "Addresses",
- "Addresses",
+ g_param_spec_boxed (NM_IP6_CONFIG_ADDRESSES, "", "",
NM_TYPE_IP6_ADDRESS_OBJECT_ARRAY,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMIP6Config:routes:
@@ -450,11 +448,10 @@ nm_ip6_config_class_init (NMIP6ConfigClass *config_class)
**/
g_object_class_install_property
(object_class, PROP_ROUTES,
- g_param_spec_boxed (NM_IP6_CONFIG_ROUTES,
- "Routes",
- "Routes",
+ g_param_spec_boxed (NM_IP6_CONFIG_ROUTES, "", "",
NM_TYPE_IP6_ROUTE_OBJECT_ARRAY,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMIP6Config:nameservers:
@@ -464,11 +461,10 @@ nm_ip6_config_class_init (NMIP6ConfigClass *config_class)
**/
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));
+ g_param_spec_boxed (NM_IP6_CONFIG_NAMESERVERS, "", "",
+ NM_TYPE_IP6_ADDRESS_ARRAY,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMIP6Config:domains:
@@ -477,11 +473,10 @@ nm_ip6_config_class_init (NMIP6ConfigClass *config_class)
**/
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));
+ g_param_spec_boxed (NM_IP6_CONFIG_DOMAINS, "", "",
+ NM_TYPE_STRING_ARRAY,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMIP6Config:searches:
@@ -492,11 +487,9 @@ nm_ip6_config_class_init (NMIP6ConfigClass *config_class)
**/
g_object_class_install_property
(object_class, PROP_SEARCHES,
- g_param_spec_boxed (NM_IP6_CONFIG_SEARCHES,
- "Searches",
- "DNS Searches",
- NM_TYPE_STRING_ARRAY,
- G_PARAM_READABLE));
+ g_param_spec_boxed (NM_IP6_CONFIG_SEARCHES, "", "",
+ NM_TYPE_STRING_ARRAY,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
}
-
diff --git a/libnm-glib/nm-ip6-config.h b/libnm-glib/nm-ip6-config.h
index feef69f19..7a64805b6 100644
--- a/libnm-glib/nm-ip6-config.h
+++ b/libnm-glib/nm-ip6-config.h
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,8 +15,8 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2008 - 2014 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2008 - 2014 Red Hat, Inc.
*/
#ifndef NM_IP6_CONFIG_H
diff --git a/libnm-glib/nm-object-cache.c b/libnm-glib/nm-object-cache.c
index 2748b1df3..752c606a9 100644
--- a/libnm-glib/nm-object-cache.c
+++ b/libnm-glib/nm-object-cache.c
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,9 +15,11 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2008 Red Hat, Inc.
+ * Copyright 2008 Red Hat, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include <glib.h>
#include "nm-object-cache.h"
@@ -65,27 +65,26 @@ _nm_object_cache_get (const char *path)
}
void
-_nm_object_cache_clear (NMObject *except)
+_nm_object_cache_clear (void)
{
GHashTableIter iter;
- NMObject *obj;
+ GObject *obj;
const char *path;
char *foo;
- _init_cache ();
+ if (!cache)
+ return;
+
g_hash_table_iter_init (&iter, cache);
while (g_hash_table_iter_next (&iter, (gpointer) &path, (gpointer) &obj)) {
- if (obj != except) {
- /* Remove the callback so that if the object isn't yet released
- * by a client, when it does finally get unrefed, it won't trigger
- * the cache removal for a new object with the same path as the
- * one being released.
- */
- foo = g_object_steal_data (G_OBJECT (obj), "nm-object-cache-tag");
- g_free (foo);
+ /* Remove the callback so that if the object isn't yet released
+ * by a client, when it does finally get unrefed, it won't trigger
+ * the cache removal for a new object with the same path as the
+ * one being released.
+ */
+ foo = g_object_steal_data (obj, "nm-object-cache-tag");
+ g_free (foo);
- g_hash_table_iter_remove (&iter);
- }
+ g_hash_table_iter_remove (&iter);
}
}
-
diff --git a/libnm-glib/nm-object-cache.h b/libnm-glib/nm-object-cache.h
index 84752134b..7aca3b4fb 100644
--- a/libnm-glib/nm-object-cache.h
+++ b/libnm-glib/nm-object-cache.h
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,7 +15,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2008 Red Hat, Inc.
+ * Copyright 2008 Red Hat, Inc.
*/
#ifndef NM_OBJECT_CACHE_H
@@ -32,7 +30,7 @@ G_BEGIN_DECLS
/* Returns referenced object from the cache */
NMObject *_nm_object_cache_get (const char *path);
void _nm_object_cache_add (NMObject *object);
-void _nm_object_cache_clear (NMObject *except);
+void _nm_object_cache_clear (void);
G_END_DECLS
diff --git a/libnm-glib/nm-object-private.h b/libnm-glib/nm-object-private.h
index 3253c2ec2..75e63b2e7 100644
--- a/libnm-glib/nm-object-private.h
+++ b/libnm-glib/nm-object-private.h
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,7 +15,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2008 - 2011 Red Hat, Inc.
+ * Copyright 2008 - 2011 Red Hat, Inc.
*/
#ifndef NM_OBJECT_PRIVATE_H
@@ -47,8 +45,8 @@ DBusGProxy *_nm_object_new_proxy (NMObject *self,
gboolean _nm_object_is_connection_private (NMObject *self);
void _nm_object_register_properties (NMObject *object,
- DBusGProxy *proxy,
- const NMPropertiesInfo *info);
+ DBusGProxy *proxy,
+ const NMPropertiesInfo *info);
gboolean _nm_object_reload_properties (NMObject *object, GError **error);
diff --git a/libnm-glib/nm-object.c b/libnm-glib/nm-object.c
index 61282cfbe..fb25c1ac4 100644
--- a/libnm-glib/nm-object.c
+++ b/libnm-glib/nm-object.c
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,10 +15,12 @@
* 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.
+ * Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2012 Red Hat, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include <gio/gio.h>
#include <stdlib.h>
@@ -41,15 +41,17 @@ static gboolean debug = FALSE;
static void nm_object_initable_iface_init (GInitableIface *iface);
static void nm_object_async_initable_iface_init (GAsyncInitableIface *iface);
+static GHashTable *type_funcs, *type_async_funcs;
+
G_DEFINE_ABSTRACT_TYPE_WITH_CODE (NMObject, nm_object, G_TYPE_OBJECT,
+ type_funcs = g_hash_table_new (NULL, NULL);
+ type_async_funcs = g_hash_table_new (NULL, NULL);
G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, nm_object_initable_iface_init);
G_IMPLEMENT_INTERFACE (G_TYPE_ASYNC_INITABLE, nm_object_async_initable_iface_init);
)
#define NM_OBJECT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_OBJECT, NMObjectPrivate))
-static GHashTable *type_funcs, *type_async_funcs;
-
typedef struct {
PropertyMarshalFunc func;
GType object_type;
@@ -82,8 +84,8 @@ typedef struct {
enum {
PROP_0,
- PROP_CONNECTION,
- PROP_PATH,
+ PROP_DBUS_CONNECTION,
+ PROP_DBUS_PATH,
LAST_PROP
};
@@ -159,8 +161,6 @@ constructor (GType type,
return NULL;
}
- _nm_object_cache_add (NM_OBJECT (object));
-
return object;
}
@@ -336,18 +336,18 @@ finalize (GObject *object)
static void
set_property (GObject *object, guint prop_id,
- const GValue *value, GParamSpec *pspec)
+ const GValue *value, GParamSpec *pspec)
{
NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object);
switch (prop_id) {
- case PROP_CONNECTION:
+ case PROP_DBUS_CONNECTION:
/* Construct only */
priv->connection = g_value_dup_boxed (value);
if (!priv->connection)
priv->connection = _nm_dbus_new_connection (NULL);
break;
- case PROP_PATH:
+ case PROP_DBUS_PATH:
/* Construct only */
priv->path = g_value_dup_string (value);
break;
@@ -359,15 +359,15 @@ set_property (GObject *object, guint prop_id,
static void
get_property (GObject *object, guint prop_id,
- GValue *value, GParamSpec *pspec)
+ GValue *value, GParamSpec *pspec)
{
NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object);
switch (prop_id) {
- case PROP_CONNECTION:
+ case PROP_DBUS_CONNECTION:
g_value_set_boxed (value, priv->connection);
break;
- case PROP_PATH:
+ case PROP_DBUS_PATH:
g_value_set_string (value, priv->path);
break;
default:
@@ -383,11 +383,6 @@ nm_object_class_init (NMObjectClass *nm_object_class)
g_type_class_add_private (nm_object_class, sizeof (NMObjectPrivate));
- if (!type_funcs) {
- type_funcs = g_hash_table_new (NULL, NULL);
- type_async_funcs = g_hash_table_new (NULL, NULL);
- }
-
/* virtual methods */
object_class->constructor = constructor;
object_class->constructed = constructed;
@@ -396,7 +391,7 @@ nm_object_class_init (NMObjectClass *nm_object_class)
object_class->dispose = dispose;
object_class->finalize = finalize;
- /* porperties */
+ /* Properties */
/**
* NMObject:connection:
@@ -404,12 +399,12 @@ nm_object_class_init (NMObjectClass *nm_object_class)
* The #DBusGConnection of the object.
**/
g_object_class_install_property
- (object_class, PROP_CONNECTION,
- g_param_spec_boxed (NM_OBJECT_DBUS_CONNECTION,
- "Connection",
- "Connection",
- DBUS_TYPE_G_CONNECTION,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ (object_class, PROP_DBUS_CONNECTION,
+ g_param_spec_boxed (NM_OBJECT_DBUS_CONNECTION, "", "",
+ DBUS_TYPE_G_CONNECTION,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
/**
* NMObject:path:
@@ -417,12 +412,12 @@ nm_object_class_init (NMObjectClass *nm_object_class)
* The DBus object path.
**/
g_object_class_install_property
- (object_class, PROP_PATH,
- g_param_spec_string (NM_OBJECT_DBUS_PATH,
- "Object Path",
- "DBus Object Path",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ (object_class, PROP_DBUS_PATH,
+ g_param_spec_string (NM_OBJECT_DBUS_PATH, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
/* signals */
@@ -578,6 +573,8 @@ _nm_object_create (GType type, DBusGConnection *connection, const char *path)
NM_OBJECT_DBUS_CONNECTION, connection,
NM_OBJECT_DBUS_PATH, path,
NULL);
+ if (NM_IS_OBJECT (object))
+ _nm_object_cache_add (NM_OBJECT (object));
if (!g_initable_init (G_INITABLE (object), NULL, &error)) {
dbgmsg ("Could not create object for %s: %s", path, error->message);
g_error_free (error);
@@ -661,6 +658,8 @@ async_got_type (GType type, gpointer user_data)
NM_OBJECT_DBUS_PATH, async_data->path,
NULL);
g_warn_if_fail (object != NULL);
+ if (NM_IS_OBJECT (object))
+ _nm_object_cache_add (NM_OBJECT (object));
g_async_initable_init_async (G_ASYNC_INITABLE (object), G_PRIORITY_DEFAULT,
NULL, async_inited, async_data);
}
@@ -1189,10 +1188,10 @@ _nm_object_register_properties (NMObject *object,
dbus_g_proxy_add_signal (proxy, "PropertiesChanged", DBUS_TYPE_G_MAP_OF_VARIANT, G_TYPE_INVALID);
dbus_g_proxy_connect_signal (proxy,
- "PropertiesChanged",
- G_CALLBACK (properties_changed_proxy),
- object,
- NULL);
+ "PropertiesChanged",
+ G_CALLBACK (properties_changed_proxy),
+ object,
+ NULL);
instance = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
priv->property_tables = g_slist_prepend (priv->property_tables, instance);
@@ -1446,4 +1445,3 @@ _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 ae97184f3..07348f249 100644
--- a/libnm-glib/nm-object.h
+++ b/libnm-glib/nm-object.h
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,8 +15,8 @@
* 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.
+ * Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2012 Red Hat, Inc.
*/
#ifndef NM_OBJECT_H
diff --git a/libnm-glib/nm-remote-connection-private.h b/libnm-glib/nm-remote-connection-private.h
index 3df576062..e3f35428c 100644
--- a/libnm-glib/nm-remote-connection-private.h
+++ b/libnm-glib/nm-remote-connection-private.h
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,7 +15,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2009 Red Hat, Inc.
+ * Copyright 2009 Red Hat, Inc.
*/
#ifndef __NM_REMOTE_CONNECTION_PRIVATE_H__
@@ -33,4 +31,3 @@ typedef enum {
} NMRemoteConnectionInitResult;
#endif /* __NM_REMOTE_CONNECTION_PRIVATE__ */
-
diff --git a/libnm-glib/nm-remote-connection.c b/libnm-glib/nm-remote-connection.c
index 38911a43b..3a70e81ed 100644
--- a/libnm-glib/nm-remote-connection.c
+++ b/libnm-glib/nm-remote-connection.c
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,13 +15,15 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2011 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2011 Red Hat, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include <gio/gio.h>
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
#include <NetworkManager.h>
#include <nm-utils.h>
@@ -70,13 +70,13 @@ typedef struct RemoteCall RemoteCall;
typedef void (*RemoteCallFetchResultCb) (RemoteCall *call, DBusGProxyCall *proxy_call, GError *error);
-typedef struct RemoteCall {
+struct RemoteCall {
NMRemoteConnection *self;
DBusGProxyCall *call;
RemoteCallFetchResultCb fetch_result_cb;
GFunc callback;
gpointer user_data;
-} RemoteCall;
+};
typedef struct {
DBusGConnection *bus;
@@ -125,7 +125,7 @@ _nm_remote_connection_ensure_inited (NMRemoteConnection *self)
*/
if (!g_error_matches (error, DBUS_GERROR, DBUS_GERROR_NO_REPLY)) {
g_warning ("%s: (NMRemoteConnection) error initializing: %s\n",
- __func__, error->message);
+ __func__, error->message);
}
g_error_free (error);
}
@@ -712,8 +712,8 @@ init_get_settings_cb (DBusGProxy *proxy,
static void
init_async (GAsyncInitable *initable, int io_priority,
- GCancellable *cancellable, GAsyncReadyCallback callback,
- gpointer user_data)
+ GCancellable *cancellable, GAsyncReadyCallback callback,
+ gpointer user_data)
{
NMRemoteConnectionInitData *init_data;
NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (initable);
@@ -864,29 +864,34 @@ nm_remote_connection_class_init (NMRemoteConnectionClass *remote_class)
object_class->constructed = constructed;
/* Properties */
+ /**
+ * NMRemoteConnection:bus:
+ *
+ * The #DBusGConnection that the #NMRemoteConnection is connected to.
+ */
g_object_class_install_property
(object_class, PROP_BUS,
- g_param_spec_boxed (NM_REMOTE_CONNECTION_BUS,
- "DBusGConnection",
- "DBusGConnection",
- DBUS_TYPE_G_CONNECTION,
- G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
+ g_param_spec_boxed (NM_REMOTE_CONNECTION_BUS, "", "",
+ DBUS_TYPE_G_CONNECTION,
+ G_PARAM_WRITABLE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
/* These are needed so _nm_object_create() can create NMRemoteConnections */
g_object_class_install_property
(object_class, PROP_DBUS_CONNECTION,
- g_param_spec_boxed (NM_REMOTE_CONNECTION_DBUS_CONNECTION,
- "DBusGConnection",
- "DBusGConnection",
+ g_param_spec_boxed (NM_REMOTE_CONNECTION_DBUS_CONNECTION, "", "",
DBUS_TYPE_G_CONNECTION,
- G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
+ G_PARAM_WRITABLE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_DBUS_PATH,
- g_param_spec_string (NM_REMOTE_CONNECTION_DBUS_PATH,
- "Object Path",
- "DBus Object Path",
+ g_param_spec_string (NM_REMOTE_CONNECTION_DBUS_PATH, "", "",
NULL,
- G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
+ G_PARAM_WRITABLE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
/**
* NMRemoteConnection:unsaved:
@@ -896,12 +901,12 @@ nm_remote_connection_class_init (NMRemoteConnectionClass *remote_class)
*
* Since: 0.9.10
**/
- g_object_class_install_property (object_class, PROP_UNSAVED,
- g_param_spec_boolean (NM_REMOTE_CONNECTION_UNSAVED,
- "Unsaved",
- "Unsaved",
+ g_object_class_install_property
+ (object_class, PROP_UNSAVED,
+ g_param_spec_boolean (NM_REMOTE_CONNECTION_UNSAVED, "", "",
FALSE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/* Signals */
/**
@@ -911,7 +916,7 @@ nm_remote_connection_class_init (NMRemoteConnectionClass *remote_class)
* This signal is emitted when a connection changes, and it is
* still visible to the user.
*/
- signals[UPDATED] =
+ signals[UPDATED] =
g_signal_new (NM_REMOTE_CONNECTION_UPDATED,
G_TYPE_FROM_CLASS (remote_class),
G_SIGNAL_RUN_FIRST,
@@ -927,12 +932,12 @@ nm_remote_connection_class_init (NMRemoteConnectionClass *remote_class)
* This signal is emitted when a connection is either deleted or becomes
* invisible to the current user.
*/
- signals[REMOVED] =
+ signals[REMOVED] =
g_signal_new (NM_REMOTE_CONNECTION_REMOVED,
G_TYPE_FROM_CLASS (remote_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMRemoteConnectionClass, removed),
- NULL, NULL,
+ NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
diff --git a/libnm-glib/nm-remote-connection.h b/libnm-glib/nm-remote-connection.h
index 911885c47..8292c2354 100644
--- a/libnm-glib/nm-remote-connection.h
+++ b/libnm-glib/nm-remote-connection.h
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,8 +15,8 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2011 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2011 Red Hat, Inc.
*/
#ifndef __NM_REMOTE_CONNECTION_H__
@@ -149,4 +147,3 @@ 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 3a2a3e688..74ed083f9 100644
--- a/libnm-glib/nm-remote-settings.c
+++ b/libnm-glib/nm-remote-settings.c
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,10 +15,12 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2008 Novell, Inc.
- * Copyright (C) 2009 - 2012 Red Hat, Inc.
+ * Copyright 2008 Novell, Inc.
+ * Copyright 2009 - 2012 Red Hat, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include <NetworkManager.h>
#include <nm-connection.h>
@@ -143,7 +143,7 @@ typedef struct {
/* AddConnectionInfo objects that are waiting for the connection to become initialized */
GSList *add_list;
-
+
DBusGProxy *props_proxy;
char *hostname;
gboolean can_modify;
@@ -206,7 +206,7 @@ _nm_remote_settings_ensure_inited (NMRemoteSettings *self)
*/
if (!g_error_matches (error, DBUS_GERROR, DBUS_GERROR_NO_REPLY)) {
g_warning ("%s: (NMRemoteSettings) error initializing: %s\n",
- __func__, error->message);
+ __func__, error->message);
}
g_error_free (error);
}
@@ -559,7 +559,7 @@ fetch_connections_done (DBusGProxy *proxy,
g_warn_if_fail (priv->listcon_call == call);
priv->listcon_call = NULL;
- if (!dbus_g_proxy_end_call (proxy, call, &error,
+ if (!dbus_g_proxy_end_call (proxy, call, &error,
DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH, &connections,
G_TYPE_INVALID)) {
if ( !g_error_matches (error, DBUS_GERROR, DBUS_GERROR_SERVICE_UNKNOWN)
@@ -567,8 +567,8 @@ fetch_connections_done (DBusGProxy *proxy,
&& priv->service_running) {
g_warning ("%s: error fetching connections: (%d) %s.",
__func__,
- error->code,
- error->message ? error->message : "(unknown)");
+ error->code,
+ error->message ? error->message : "(unknown)");
}
g_clear_error (&error);
@@ -597,7 +597,7 @@ fetch_connections_done (DBusGProxy *proxy,
* nm_remote_settings_list_connections:
* @settings: the %NMRemoteSettings
*
- * Returns: (transfer container) (element-type NMClient.RemoteConnection): a
+ * Returns: (transfer container) (element-type NMRemoteConnection): a
* list containing all connections provided by the remote settings service.
* Each element of the returned list is a %NMRemoteConnection instance, which is
* owned by the %NMRemoteSettings object and should not be freed by the caller.
@@ -939,7 +939,7 @@ nm_remote_settings_save_hostname (NMRemoteSettings *settings,
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);
-
+
priv = NM_REMOTE_SETTINGS_GET_PRIVATE (settings);
_nm_remote_settings_ensure_inited (settings);
@@ -1354,8 +1354,8 @@ init_async_got_manager_running (DBusGProxy *proxy, DBusGProxyCall *call,
static void
init_async (GAsyncInitable *initable, int io_priority,
- GCancellable *cancellable, GAsyncReadyCallback callback,
- gpointer user_data)
+ GCancellable *cancellable, GAsyncReadyCallback callback,
+ gpointer user_data)
{
NMRemoteSettingsInitData *init_data;
NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (initable);
@@ -1365,9 +1365,10 @@ init_async (GAsyncInitable *initable, int io_priority,
init_data->result = g_simple_async_result_new (G_OBJECT (initable), callback,
user_data, init_async);
- if (priv->private_bus)
+ if (priv->private_bus) {
+ priv->service_running = TRUE;
init_get_properties (init_data);
- else {
+ } else {
/* Check if NM is running */
dbus_g_proxy_begin_call (priv->dbus_proxy, "NameHasOwner",
init_async_got_manager_running,
@@ -1484,54 +1485,74 @@ nm_remote_settings_class_init (NMRemoteSettingsClass *class)
object_class->dispose = dispose;
/* Properties */
+
+ /**
+ * NMRemoteSettings:bus:
+ *
+ * The #DBusGConnection that the #NMRemoteSettings is connected to. Defaults
+ * to the system bus if not specified.
+ */
g_object_class_install_property
(object_class, PROP_BUS,
- g_param_spec_boxed (NM_REMOTE_SETTINGS_BUS,
- "DBusGConnection",
- "DBusGConnection",
+ g_param_spec_boxed (NM_REMOTE_SETTINGS_BUS, "", "",
DBUS_TYPE_G_CONNECTION,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMRemoteSettings:service-running:
+ *
+ * Whether the settings service is running.
+ */
g_object_class_install_property
(object_class, PROP_SERVICE_RUNNING,
- g_param_spec_boolean (NM_REMOTE_SETTINGS_SERVICE_RUNNING,
- "Service running",
- "Is service running",
+ g_param_spec_boolean (NM_REMOTE_SETTINGS_SERVICE_RUNNING, "", "",
FALSE,
- G_PARAM_READABLE));
-
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMRemoteSettings:hostname:
+ *
+ * The machine hostname stored in persistent configuration. This can be
+ * modified by calling nm_remote_settings_save_hostname().
+ */
g_object_class_install_property
(object_class, PROP_HOSTNAME,
- g_param_spec_string (NM_REMOTE_SETTINGS_HOSTNAME,
- "Hostname",
- "Persistent hostname",
+ g_param_spec_string (NM_REMOTE_SETTINGS_HOSTNAME, "", "",
NULL,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NMRemoteSettings:can-modify:
+ *
+ * If %TRUE, adding and modifying connections is supported.
+ */
g_object_class_install_property
(object_class, PROP_CAN_MODIFY,
- g_param_spec_boolean (NM_REMOTE_SETTINGS_CAN_MODIFY,
- "CanModify",
- "Can modify anything (hostname, connections, etc)",
+ g_param_spec_boolean (NM_REMOTE_SETTINGS_CAN_MODIFY, "", "",
FALSE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/* Signals */
- signals[NEW_CONNECTION] =
- g_signal_new (NM_REMOTE_SETTINGS_NEW_CONNECTION,
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (NMRemoteSettingsClass, new_connection),
- NULL, NULL, NULL,
- G_TYPE_NONE, 1, G_TYPE_OBJECT);
-
- signals[CONNECTIONS_READ] =
- g_signal_new (NM_REMOTE_SETTINGS_CONNECTIONS_READ,
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (NMRemoteSettingsClass, connections_read),
- NULL, NULL, NULL,
- G_TYPE_NONE, 0);
+ signals[NEW_CONNECTION] =
+ g_signal_new (NM_REMOTE_SETTINGS_NEW_CONNECTION,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMRemoteSettingsClass, new_connection),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 1, G_TYPE_OBJECT);
+
+ signals[CONNECTIONS_READ] =
+ g_signal_new (NM_REMOTE_SETTINGS_CONNECTIONS_READ,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMRemoteSettingsClass, connections_read),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 0);
}
static void
diff --git a/libnm-glib/nm-remote-settings.h b/libnm-glib/nm-remote-settings.h
index 5ca646e66..92049adee 100644
--- a/libnm-glib/nm-remote-settings.h
+++ b/libnm-glib/nm-remote-settings.h
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,8 +15,8 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2008 Novell, Inc.
- * Copyright (C) 2009 - 2011 Red Hat, Inc.
+ * Copyright 2008 Novell, Inc.
+ * Copyright 2009 - 2011 Red Hat, Inc.
*/
#ifndef NM_REMOTE_SETTINGS_H
diff --git a/libnm-glib/nm-secret-agent.c b/libnm-glib/nm-secret-agent.c
index f58f95fe0..04f8dd8b1 100644
--- a/libnm-glib/nm-secret-agent.c
+++ b/libnm-glib/nm-secret-agent.c
@@ -15,10 +15,11 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2010 - 2011 Red Hat, Inc.
+ * Copyright 2010 - 2011 Red Hat, Inc.
*/
-#include <config.h>
+#include "config.h"
+
#include <string.h>
#include <dbus/dbus-glib-lowlevel.h>
@@ -55,9 +56,7 @@ static void impl_secret_agent_delete_secrets (NMSecretAgent *self,
G_DEFINE_ABSTRACT_TYPE (NMSecretAgent, nm_secret_agent, G_TYPE_OBJECT)
-#define NM_SECRET_AGENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
- NM_TYPE_SECRET_AGENT, \
- NMSecretAgentPrivate))
+#define NM_SECRET_AGENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SECRET_AGENT, NMSecretAgentPrivate))
static gboolean auto_register_cb (gpointer user_data);
@@ -124,11 +123,11 @@ get_nm_owner (NMSecretAgent *self)
if (!priv->nm_owner) {
if (!dbus_g_proxy_call_with_timeout (priv->dbus_proxy,
- "GetNameOwner", 2000, &error,
- G_TYPE_STRING, NM_DBUS_SERVICE,
- G_TYPE_INVALID,
- G_TYPE_STRING, &owner,
- G_TYPE_INVALID))
+ "GetNameOwner", 2000, &error,
+ G_TYPE_STRING, NM_DBUS_SERVICE,
+ G_TYPE_INVALID,
+ G_TYPE_STRING, &owner,
+ G_TYPE_INVALID))
return NULL;
priv->nm_owner = g_strdup (owner);
@@ -704,7 +703,8 @@ auto_register_cb (gpointer user_data)
NMSecretAgentPrivate *priv = NM_SECRET_AGENT_GET_PRIVATE (self);
priv->auto_register_id = 0;
- if (priv->auto_register && !priv->suppress_auto && (priv->reg_call == NULL))
+ if (priv->auto_register && !priv->suppress_auto &&
+ (priv->reg_call == NULL && !priv->registered))
nm_secret_agent_register (self);
return FALSE;
}
@@ -1004,11 +1004,11 @@ nm_secret_agent_class_init (NMSecretAgentClass *class)
**/
g_object_class_install_property
(object_class, PROP_IDENTIFIER,
- g_param_spec_string (NM_SECRET_AGENT_IDENTIFIER,
- "Identifier",
- "Identifier",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ g_param_spec_string (NM_SECRET_AGENT_IDENTIFIER, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSecretAgent:auto-register:
@@ -1023,11 +1023,11 @@ nm_secret_agent_class_init (NMSecretAgentClass *class)
**/
g_object_class_install_property
(object_class, PROP_AUTO_REGISTER,
- g_param_spec_boolean (NM_SECRET_AGENT_AUTO_REGISTER,
- "Auto Register",
- "Auto Register",
- TRUE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_param_spec_boolean (NM_SECRET_AGENT_AUTO_REGISTER, "", "",
+ TRUE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSecretAgent:registered:
@@ -1036,11 +1036,10 @@ nm_secret_agent_class_init (NMSecretAgentClass *class)
**/
g_object_class_install_property
(object_class, PROP_REGISTERED,
- g_param_spec_boolean (NM_SECRET_AGENT_REGISTERED,
- "Registered",
- "Registered",
+ g_param_spec_boolean (NM_SECRET_AGENT_REGISTERED, "", "",
FALSE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSecretAgent:capabilities:
@@ -1049,12 +1048,12 @@ nm_secret_agent_class_init (NMSecretAgentClass *class)
**/
g_object_class_install_property
(object_class, PROP_CAPABILITIES,
- g_param_spec_flags (NM_SECRET_AGENT_CAPABILITIES,
- "Capabilities",
- "Capabilities",
+ g_param_spec_flags (NM_SECRET_AGENT_CAPABILITIES, "", "",
NM_TYPE_SECRET_AGENT_CAPABILITIES,
NM_SECRET_AGENT_CAPABILITY_NONE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSecretAgent::registration-result:
@@ -1066,10 +1065,10 @@ nm_secret_agent_class_init (NMSecretAgentClass *class)
**/
signals[REGISTRATION_RESULT] =
g_signal_new (NM_SECRET_AGENT_REGISTRATION_RESULT,
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- 0, NULL, NULL, NULL,
- G_TYPE_NONE, 1, G_TYPE_POINTER);
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ 0, NULL, NULL, NULL,
+ G_TYPE_NONE, 1, G_TYPE_POINTER);
dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (class),
&dbus_glib_nm_secret_agent_object_info);
@@ -1078,4 +1077,3 @@ nm_secret_agent_class_init (NMSecretAgentClass *class)
NM_DBUS_INTERFACE_SECRET_AGENT,
NM_TYPE_SECRET_AGENT_ERROR);
}
-
diff --git a/libnm-glib/nm-secret-agent.h b/libnm-glib/nm-secret-agent.h
index c70f8d076..b7df87453 100644
--- a/libnm-glib/nm-secret-agent.h
+++ b/libnm-glib/nm-secret-agent.h
@@ -1,5 +1,5 @@
/* -*- 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
@@ -15,7 +15,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2010 - 2011 Red Hat, Inc.
+ * Copyright 2010 - 2011 Red Hat, Inc.
*/
#ifndef NM_SECRET_AGENT_H
@@ -59,7 +59,7 @@ typedef enum {
* 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
+ * by the <literal>get_secrets</literal> class method to VPN plugin
* authentication dialogs.
* @NM_SECRET_AGENT_CAPABILITY_LAST: bounds checking value; should not be used.
*
diff --git a/libnm-glib/nm-types-private.h b/libnm-glib/nm-types-private.h
index 178890da1..c34d9a8f7 100644
--- a/libnm-glib/nm-types-private.h
+++ b/libnm-glib/nm-types-private.h
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,7 +15,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2007 - 2008 Red Hat, Inc.
+ * Copyright 2007 - 2008 Red Hat, Inc.
*/
#ifndef NM_TYPES_PRIVATE_H
@@ -31,9 +29,9 @@ gboolean _nm_ssid_demarshal (GValue *value, GByteArray **dest);
gboolean _nm_uint_array_demarshal (GValue *value, GArray **dest);
gboolean _nm_string_array_demarshal (GValue *value, GPtrArray **dest);
gboolean _nm_object_array_demarshal (GValue *value,
- GPtrArray **dest,
- DBusGConnection *connection,
- NMObjectCreatorFunc func);
+ GPtrArray **dest,
+ DBusGConnection *connection,
+ NMObjectCreatorFunc func);
gboolean _nm_ip6_address_array_demarshal (GValue *value, GSList **dest);
#endif /* NM_TYPES_PRIVATE_H */
diff --git a/libnm-glib/nm-types.c b/libnm-glib/nm-types.c
index f9ba6d240..5b434aa97 100644
--- a/libnm-glib/nm-types.c
+++ b/libnm-glib/nm-types.c
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,9 +15,11 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2008 Red Hat, Inc.
+ * Copyright 2008 Red Hat, Inc.
*/
+#include "config.h"
+
#include <glib.h>
#include <dbus/dbus-glib.h>
#include <string.h>
@@ -232,9 +232,9 @@ nm_object_array_get_type (void)
gboolean
_nm_object_array_demarshal (GValue *value,
- GPtrArray **dest,
- DBusGConnection *connection,
- NMObjectCreatorFunc func)
+ GPtrArray **dest,
+ DBusGConnection *connection,
+ NMObjectCreatorFunc func)
{
GPtrArray *temp = NULL;
GPtrArray *array;
@@ -419,4 +419,3 @@ nm_ip6_route_object_array_get_type (void)
(GBoxedFreeFunc) _nm_ip6_route_object_array_free);
return our_type;
}
-
diff --git a/libnm-glib/nm-types.h b/libnm-glib/nm-types.h
index adccafb72..81bd299e6 100644
--- a/libnm-glib/nm-types.h
+++ b/libnm-glib/nm-types.h
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,7 +15,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2008 Red Hat, Inc.
+ * Copyright 2008 Red Hat, Inc.
*/
#ifndef NM_TYPES_H
diff --git a/libnm-glib/nm-vpn-connection.c b/libnm-glib/nm-vpn-connection.c
index 12814cf25..16e8db5e9 100644
--- a/libnm-glib/nm-vpn-connection.c
+++ b/libnm-glib/nm-vpn-connection.c
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,10 +15,12 @@
* 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.
+ * Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2012 Red Hat, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include "nm-vpn-connection.h"
#include "NetworkManager.h"
@@ -70,7 +70,7 @@ nm_vpn_connection_new (DBusGConnection *connection, const char *path)
g_return_val_if_fail (connection != NULL, NULL);
g_return_val_if_fail (path != NULL, NULL);
- return g_object_new (NM_TYPE_VPN_CONNECTION,
+ return g_object_new (NM_TYPE_VPN_CONNECTION,
NM_OBJECT_DBUS_CONNECTION, connection,
NM_OBJECT_DBUS_PATH, path,
NULL);
@@ -176,10 +176,10 @@ constructed (GObject *object)
G_TYPE_INVALID);
dbus_g_proxy_add_signal (priv->proxy, "VpnStateChanged", G_TYPE_UINT, G_TYPE_UINT, G_TYPE_INVALID);
dbus_g_proxy_connect_signal (priv->proxy,
- "VpnStateChanged",
- G_CALLBACK (vpn_state_changed_proxy),
- object,
- NULL);
+ "VpnStateChanged",
+ G_CALLBACK (vpn_state_changed_proxy),
+ object,
+ NULL);
register_properties (NM_VPN_CONNECTION (object));
}
@@ -237,34 +237,34 @@ nm_vpn_connection_class_init (NMVPNConnectionClass *connection_class)
*
* The VPN state of the active VPN connection.
**/
- g_object_class_install_property (object_class, PROP_VPN_STATE,
- g_param_spec_uint (NM_VPN_CONNECTION_VPN_STATE,
- "VpnState",
- "Current VPN state",
- NM_VPN_CONNECTION_STATE_UNKNOWN,
- NM_VPN_CONNECTION_STATE_DISCONNECTED,
- NM_VPN_CONNECTION_STATE_UNKNOWN,
- G_PARAM_READABLE));
+ g_object_class_install_property
+ (object_class, PROP_VPN_STATE,
+ g_param_spec_uint (NM_VPN_CONNECTION_VPN_STATE, "", "",
+ NM_VPN_CONNECTION_STATE_UNKNOWN,
+ NM_VPN_CONNECTION_STATE_DISCONNECTED,
+ NM_VPN_CONNECTION_STATE_UNKNOWN,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMVPNConnection:banner:
*
* The VPN login banner of the active VPN connection.
**/
- g_object_class_install_property (object_class, PROP_BANNER,
- g_param_spec_string (NM_VPN_CONNECTION_BANNER,
- "Banner",
- "Login Banner",
- NULL,
- G_PARAM_READABLE));
+ g_object_class_install_property
+ (object_class, PROP_BANNER,
+ g_param_spec_string (NM_VPN_CONNECTION_BANNER, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/* signals */
signals[VPN_STATE_CHANGED] =
g_signal_new ("vpn-state-changed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (NMVPNConnectionClass, vpn_state_changed),
- NULL, NULL, NULL,
- G_TYPE_NONE, 2,
- G_TYPE_UINT, G_TYPE_UINT);
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMVPNConnectionClass, vpn_state_changed),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 2,
+ G_TYPE_UINT, G_TYPE_UINT);
}
diff --git a/libnm-glib/nm-vpn-connection.h b/libnm-glib/nm-vpn-connection.h
index 8727bb86d..0495310f3 100644
--- a/libnm-glib/nm-vpn-connection.h
+++ b/libnm-glib/nm-vpn-connection.h
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,8 +15,8 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2010 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2010 Red Hat, Inc.
*/
#ifndef NM_VPN_CONNECTION_H
diff --git a/libnm-glib/nm-vpn-plugin-ui-interface.c b/libnm-glib/nm-vpn-plugin-ui-interface.c
index f82c1270f..b94084e2b 100644
--- a/libnm-glib/nm-vpn-plugin-ui-interface.c
+++ b/libnm-glib/nm-vpn-plugin-ui-interface.c
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,10 +15,12 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2008 - 2010 Red Hat, Inc.
- * Copyright (C) 2008 Novell, Inc.
+ * Copyright 2008 - 2010 Red Hat, Inc.
+ * Copyright 2008 Novell, Inc.
*/
+#include "config.h"
+
#include "nm-vpn-plugin-ui-interface.h"
static void
@@ -32,26 +32,39 @@ interface_init (gpointer g_iface)
return;
/* Properties */
- g_object_interface_install_property (g_iface,
- g_param_spec_string (NM_VPN_PLUGIN_UI_INTERFACE_NAME,
- "Name",
- "VPN Plugin name",
- NULL,
- G_PARAM_READABLE));
+ /**
+ * NMVPNPluginUiInterface:name:
+ *
+ * Short display name of the VPN plugin.
+ */
g_object_interface_install_property (g_iface,
- g_param_spec_string (NM_VPN_PLUGIN_UI_INTERFACE_DESC,
- "Desc",
- "VPN Plugin description",
- NULL,
- G_PARAM_READABLE));
-
+ g_param_spec_string (NM_VPN_PLUGIN_UI_INTERFACE_NAME, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMVPNPluginUiInterface:desc:
+ *
+ * Longer description of the VPN plugin.
+ */
+ g_object_interface_install_property (g_iface,
+ g_param_spec_string (NM_VPN_PLUGIN_UI_INTERFACE_DESC, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMVPNPluginUiInterface:service:
+ *
+ * D-Bus service name of the plugin's VPN service.
+ */
g_object_interface_install_property (g_iface,
- g_param_spec_string (NM_VPN_PLUGIN_UI_INTERFACE_SERVICE,
- "Service",
- "VPN Plugin D-Bus service name",
- NULL,
- G_PARAM_READABLE));
+ g_param_spec_string (NM_VPN_PLUGIN_UI_INTERFACE_SERVICE, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
initialized = TRUE;
}
@@ -76,9 +89,9 @@ nm_vpn_plugin_ui_interface_get_type (void)
};
vpn_plugin_ui_interface_type = g_type_register_static (G_TYPE_INTERFACE,
- "NMVpnPluginUiInterface",
- &vpn_plugin_ui_interface_info,
- 0);
+ "NMVpnPluginUiInterface",
+ &vpn_plugin_ui_interface_info,
+ 0);
g_type_interface_add_prerequisite (vpn_plugin_ui_interface_type, G_TYPE_OBJECT);
}
@@ -166,12 +179,12 @@ widget_interface_init (gpointer g_iface)
/* Signals */
g_signal_new ("changed",
- iface_type,
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (NMVpnPluginUiWidgetInterface, changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
+ iface_type,
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMVpnPluginUiWidgetInterface, changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
initialized = TRUE;
}
@@ -234,4 +247,3 @@ nm_vpn_plugin_ui_widget_interface_save_secrets (NMVpnPluginUiWidgetInterface *if
/* Deprecated and no longer used */
return TRUE;
}
-
diff --git a/libnm-glib/nm-vpn-plugin-ui-interface.h b/libnm-glib/nm-vpn-plugin-ui-interface.h
index 2753de446..9c6e49ebe 100644
--- a/libnm-glib/nm-vpn-plugin-ui-interface.h
+++ b/libnm-glib/nm-vpn-plugin-ui-interface.h
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,8 +15,8 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2008 - 2010 Red Hat, Inc.
- * Copyright (C) 2008 Novell, Inc.
+ * Copyright 2008 - 2010 Red Hat, Inc.
+ * Copyright 2008 Novell, Inc.
*/
#ifndef NM_VPN_PLUGIN_UI_INTERFACE_H
diff --git a/libnm-glib/nm-vpn-plugin-utils.c b/libnm-glib/nm-vpn-plugin-utils.c
index b9838df93..9aafb19f0 100644
--- a/libnm-glib/nm-vpn-plugin-utils.c
+++ b/libnm-glib/nm-vpn-plugin-utils.c
@@ -15,9 +15,11 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2011 Red Hat, Inc.
+ * Copyright 2011 Red Hat, Inc.
*/
+#include "config.h"
+
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
diff --git a/libnm-glib/nm-vpn-plugin-utils.h b/libnm-glib/nm-vpn-plugin-utils.h
index aab73c4e6..d87ef16aa 100644
--- a/libnm-glib/nm-vpn-plugin-utils.h
+++ b/libnm-glib/nm-vpn-plugin-utils.h
@@ -15,7 +15,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2011 Red Hat, Inc.
+ * Copyright 2011 Red Hat, Inc.
*/
#ifndef NM_VPN_PLUGIN_UTILS_H
diff --git a/libnm-glib/nm-vpn-plugin.c b/libnm-glib/nm-vpn-plugin.c
index d52416969..7848c131c 100644
--- a/libnm-glib/nm-vpn-plugin.c
+++ b/libnm-glib/nm-vpn-plugin.c
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,10 +15,12 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2007 - 2008 Novell, Inc.
- * Copyright (C) 2007 - 2008 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2008 Red Hat, Inc.
*/
+#include "config.h"
+
#include <signal.h>
#include "nm-glib-compat.h"
#include "nm-vpn-plugin.h"
@@ -125,7 +125,7 @@ GQuark
nm_vpn_plugin_error_quark (void)
{
static GQuark quark = 0;
-
+
if (!quark)
quark = g_quark_from_static_string ("nm_vpn_plugin_error");
@@ -729,8 +729,8 @@ nm_vpn_plugin_init (NMVPNPlugin *plugin)
{
active_plugins = g_slist_append (active_plugins, plugin);
g_object_weak_ref (G_OBJECT (plugin),
- one_plugin_destroyed,
- NULL);
+ one_plugin_destroyed,
+ NULL);
}
static GObject *
@@ -747,8 +747,8 @@ constructor (GType type,
GError *err = NULL;
object = G_OBJECT_CLASS (nm_vpn_plugin_parent_class)->constructor (type,
- n_construct_params,
- construct_params);
+ n_construct_params,
+ construct_params);
if (!object)
return NULL;
@@ -823,7 +823,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)
{
NMVPNPluginPrivate *priv = NM_VPN_PLUGIN_GET_PRIVATE (object);
@@ -953,23 +953,33 @@ nm_vpn_plugin_class_init (NMVPNPluginClass *plugin_class)
plugin_class->state_changed = state_changed;
/* properties */
+
+ /**
+ * NMVPNPlugin:service-name:
+ *
+ * The D-Bus service name of this plugin.
+ */
g_object_class_install_property
(object_class, PROP_DBUS_SERVICE_NAME,
- g_param_spec_string (NM_VPN_PLUGIN_DBUS_SERVICE_NAME,
- "DBus service name",
- "DBus service name",
+ g_param_spec_string (NM_VPN_PLUGIN_DBUS_SERVICE_NAME, "", "",
NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMVPNPlugin:state:
+ *
+ * The state of the plugin.
+ */
g_object_class_install_property
(object_class, PROP_STATE,
- g_param_spec_uint (NM_VPN_PLUGIN_STATE,
- "State",
- "Current VPN service state",
+ g_param_spec_uint (NM_VPN_PLUGIN_STATE, "", "",
NM_VPN_SERVICE_STATE_UNKNOWN,
NM_VPN_SERVICE_STATE_STOPPED,
NM_VPN_SERVICE_STATE_INIT,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/* signals */
signals[STATE_CHANGED] =
diff --git a/libnm-glib/nm-vpn-plugin.h b/libnm-glib/nm-vpn-plugin.h
index 4f020f31f..323017f03 100644
--- a/libnm-glib/nm-vpn-plugin.h
+++ b/libnm-glib/nm-vpn-plugin.h
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,8 +15,8 @@
* 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.
+ * Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2013 Red Hat, Inc.
*/
#ifndef NM_VPN_PLUGIN_H
diff --git a/libnm-glib/nm-wimax-nsp.c b/libnm-glib/nm-wimax-nsp.c
index f747aff3e..1735ab3ee 100644
--- a/libnm-glib/nm-wimax-nsp.c
+++ b/libnm-glib/nm-wimax-nsp.c
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,10 +15,11 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2011 Red Hat, Inc.
+ * Copyright 2011 Red Hat, Inc.
*/
-#include <config.h>
+#include "config.h"
+
#include <string.h>
#include "nm-glib-compat.h"
@@ -71,9 +70,9 @@ nm_wimax_nsp_new (DBusGConnection *connection, const char *path)
g_return_val_if_fail (path != NULL, NULL);
return (GObject *) g_object_new (NM_TYPE_WIMAX_NSP,
- NM_OBJECT_DBUS_CONNECTION, connection,
- NM_OBJECT_DBUS_PATH, path,
- NULL);
+ NM_OBJECT_DBUS_CONNECTION, connection,
+ NM_OBJECT_DBUS_PATH, path,
+ NULL);
}
/**
@@ -173,14 +172,14 @@ nm_wimax_nsp_connection_valid (NMWimaxNsp *nsp, NMConnection *connection)
/**
* nm_wimax_nsp_filter_connections:
* @nsp: an #NMWimaxNsp to filter connections for
- * @connections: (element-type NetworkManager.Connection): a list of
+ * @connections: (element-type NMConnection): a list of
* #NMConnection objects to filter
*
* Filters a given list of connections for a given #NMWimaxNsp object and
* return connections which may be activated with the access point. Any
* returned connections will match the @nsp's network name and other attributes.
*
- * Returns: (transfer container) (element-type NetworkManager.Connection): a
+ * Returns: (transfer container) (element-type NMConnection): a
* list of #NMConnection objects that could be activated with the given @nsp.
* 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
@@ -305,11 +304,10 @@ nm_wimax_nsp_class_init (NMWimaxNspClass *nsp_class)
**/
g_object_class_install_property
(object_class, PROP_NAME,
- g_param_spec_string (NM_WIMAX_NSP_NAME,
- "Name",
- "Name",
- NULL,
- G_PARAM_READABLE));
+ g_param_spec_string (NM_WIMAX_NSP_NAME, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMWimaxNsp:signal-quality:
@@ -318,11 +316,10 @@ nm_wimax_nsp_class_init (NMWimaxNspClass *nsp_class)
**/
g_object_class_install_property
(object_class, PROP_SIGNAL_QUALITY,
- g_param_spec_uint (NM_WIMAX_NSP_SIGNAL_QUALITY,
- "Signal Quality",
- "Signal Quality",
+ g_param_spec_uint (NM_WIMAX_NSP_SIGNAL_QUALITY, "", "",
0, 100, 0,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMWimaxNsp:network-type:
@@ -331,9 +328,8 @@ nm_wimax_nsp_class_init (NMWimaxNspClass *nsp_class)
**/
g_object_class_install_property
(object_class, PROP_NETWORK_TYPE,
- g_param_spec_uint (NM_WIMAX_NSP_NETWORK_TYPE,
- "Network Type",
- "Network Type",
+ g_param_spec_uint (NM_WIMAX_NSP_NETWORK_TYPE, "", "",
0, G_MAXUINT32, 0,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
}
diff --git a/libnm-glib/nm-wimax-nsp.h b/libnm-glib/nm-wimax-nsp.h
index b8e91079d..74008d18e 100644
--- a/libnm-glib/nm-wimax-nsp.h
+++ b/libnm-glib/nm-wimax-nsp.h
@@ -1,7 +1,5 @@
/* -*- 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
@@ -17,8 +15,8 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2011 Red Hat, Inc.
- * Copyright (C) 2009 Novell, Inc.
+ * Copyright 2011 Red Hat, Inc.
+ * Copyright 2009 Novell, Inc.
*/
#ifndef NM_WIMAX_NSP_H
@@ -42,6 +40,15 @@ G_BEGIN_DECLS
#define NM_WIMAX_NSP_SIGNAL_QUALITY "signal-quality"
#define NM_WIMAX_NSP_NETWORK_TYPE "network-type"
+/**
+ * NMWimaxNspNetworkType:
+ * @NM_WIMAX_NSP_NETWORK_TYPE_UNKNOWN: unknown network type
+ * @NM_WIMAX_NSP_NETWORK_TYPE_HOME: home network
+ * @NM_WIMAX_NSP_NETWORK_TYPE_PARTNER: partner network
+ * @NM_WIMAX_NSP_NETWORK_TYPE_ROAMING_PARTNER: roaming partner network
+ *
+ * WiMAX network type.
+ */
typedef enum {
NM_WIMAX_NSP_NETWORK_TYPE_UNKNOWN = 0,
NM_WIMAX_NSP_NETWORK_TYPE_HOME = 1,
diff --git a/libnm-glib/tests/Makefile.am b/libnm-glib/tests/Makefile.am
index 38f449ac1..7b8f3627e 100644
--- a/libnm-glib/tests/Makefile.am
+++ b/libnm-glib/tests/Makefile.am
@@ -2,52 +2,48 @@ 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)/libnm-glib \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ -DTEST_NM_SERVICE=\"$(abs_top_srcdir)/tools/test-networkmanager-service.py\" \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS)
-noinst_PROGRAMS = test-nm-client test-remote-settings-client
+noinst_PROGRAMS = $(TESTS)
+
+TESTS = test-nm-client test-remote-settings-client
####### NMClient and non-settings tests #######
test_nm_client_SOURCES = \
+ common.c \
+ common.h \
test-nm-client.c
test_nm_client_LDADD = \
$(top_builddir)/libnm-util/libnm-util.la \
- $(top_builddir)/libnm-glib/libnm-glib-test.la \
+ $(top_builddir)/libnm-glib/libnm-glib.la \
$(GLIB_LIBS) \
$(DBUS_LIBS)
####### remote settings client test #######
test_remote_settings_client_SOURCES = \
+ common.c \
+ common.h \
test-remote-settings-client.c
test_remote_settings_client_LDADD = \
$(top_builddir)/libnm-util/libnm-util.la \
- $(top_builddir)/libnm-glib/libnm-glib-test.la \
+ $(top_builddir)/libnm-glib/libnm-glib.la \
$(GLIB_LIBS) \
$(DBUS_LIBS)
###########################################
-TEST_NM_BIN = test-fake-nm.py
-TEST_RSS_BIN = test-remote-settings-service.py
-
-EXTRA_DIST = $(TEST_RSS_BIN) $(TEST_NM_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;
+TESTS_ENVIRONMENT = $(srcdir)/libnm-glib-test-launch.sh
endif
+
+EXTRA_DIST = libnm-glib-test-launch.sh
diff --git a/libnm-glib/tests/Makefile.in b/libnm-glib/tests/Makefile.in
index 28acdea03..7dd74031c 100644
--- a/libnm-glib/tests/Makefile.in
+++ b/libnm-glib/tests/Makefile.in
@@ -78,7 +78,8 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-@ENABLE_TESTS_TRUE@noinst_PROGRAMS = test-nm-client$(EXEEXT) \
+@ENABLE_TESTS_TRUE@noinst_PROGRAMS = $(am__EXEEXT_1)
+@ENABLE_TESTS_TRUE@TESTS = test-nm-client$(EXEEXT) \
@ENABLE_TESTS_TRUE@ test-remote-settings-client$(EXEEXT)
subdir = libnm-glib/tests
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
@@ -103,29 +104,32 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
+@ENABLE_TESTS_TRUE@am__EXEEXT_1 = test-nm-client$(EXEEXT) \
+@ENABLE_TESTS_TRUE@ test-remote-settings-client$(EXEEXT)
PROGRAMS = $(noinst_PROGRAMS)
-am__test_nm_client_SOURCES_DIST = test-nm-client.c
-@ENABLE_TESTS_TRUE@am_test_nm_client_OBJECTS = \
+am__test_nm_client_SOURCES_DIST = common.c common.h test-nm-client.c
+@ENABLE_TESTS_TRUE@am_test_nm_client_OBJECTS = common.$(OBJEXT) \
@ENABLE_TESTS_TRUE@ test-nm-client.$(OBJEXT)
test_nm_client_OBJECTS = $(am_test_nm_client_OBJECTS)
am__DEPENDENCIES_1 =
@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@ $(top_builddir)/libnm-glib/libnm-glib.la \
@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
am__v_lt_1 =
-am__test_remote_settings_client_SOURCES_DIST = \
+am__test_remote_settings_client_SOURCES_DIST = common.c common.h \
test-remote-settings-client.c
@ENABLE_TESTS_TRUE@am_test_remote_settings_client_OBJECTS = \
+@ENABLE_TESTS_TRUE@ common.$(OBJEXT) \
@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@ $(top_builddir)/libnm-glib/libnm-glib.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@)
@@ -189,6 +193,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,6 +225,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -322,6 +350,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -341,6 +370,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -367,7 +397,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -448,41 +478,44 @@ 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@ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+@ENABLE_TESTS_TRUE@ -DTEST_NM_SERVICE=\"$(abs_top_srcdir)/tools/test-networkmanager-service.py\" \
@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@ common.c \
+@ENABLE_TESTS_TRUE@ common.h \
@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@ $(top_builddir)/libnm-glib/libnm-glib.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@ common.c \
+@ENABLE_TESTS_TRUE@ common.h \
@ENABLE_TESTS_TRUE@ test-remote-settings-client.c
@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 \
+@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-glib/libnm-glib.la \
@ENABLE_TESTS_TRUE@ $(GLIB_LIBS) \
@ENABLE_TESTS_TRUE@ $(DBUS_LIBS)
###########################################
-@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) $(TEST_NM_BIN)
+@ENABLE_TESTS_TRUE@TESTS_ENVIRONMENT = $(srcdir)/libnm-glib-test-launch.sh
+EXTRA_DIST = libnm-glib-test-launch.sh
all: all-am
.SUFFIXES:
@@ -541,6 +574,7 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/common.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@
@@ -623,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'`; \
@@ -653,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:
@@ -762,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 \
@@ -777,15 +903,6 @@ uninstall-am:
tags tags-am uninstall uninstall-am
-@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.
.NOEXPORT:
diff --git a/libnm-glib/tests/common.c b/libnm-glib/tests/common.c
new file mode 100644
index 000000000..540d43afa
--- /dev/null
+++ b/libnm-glib/tests/common.c
@@ -0,0 +1,121 @@
+/* -*- 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 2010 - 2014 Red Hat, Inc.
+ *
+ */
+
+#include "config.h"
+
+#include <dbus/dbus.h>
+#include <glib.h>
+#include <string.h>
+
+#include "NetworkManager.h"
+
+#include "common.h"
+
+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;
+}
+
+NMTestServiceInfo *
+nm_test_service_init (void)
+{
+ NMTestServiceInfo *info;
+ const char *args[2] = { TEST_NM_SERVICE, NULL };
+ GError *error = NULL;
+ int i;
+
+ info = g_malloc0 (sizeof (*info));
+
+ info->bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
+ g_assert_no_error (error);
+
+ /* Spawn the test service. info->keepalive_fd will be a pipe to the service's
+ * stdin; if it closes, the service will exit immediately. We use this to
+ * make sure the service exits if the test program crashes.
+ */
+ g_spawn_async_with_pipes (NULL, (char **) args, NULL, 0, NULL, NULL,
+ &info->pid, &info->keepalive_fd, NULL, NULL, &error);
+ g_assert_no_error (error);
+
+ /* Wait until the service is registered on the bus */
+ for (i = 100; i > 0; i--) {
+ if (name_exists (info->bus, "org.freedesktop.NetworkManager"))
+ break;
+ g_usleep (G_USEC_PER_SEC / 50);
+ }
+ g_assert (i > 0);
+
+ /* Grab a proxy to our fake NM service to trigger tests */
+ info->proxy = g_dbus_proxy_new_sync (info->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, &error);
+ g_assert_no_error (error);
+
+ return info;
+}
+
+void
+nm_test_service_cleanup (NMTestServiceInfo *info)
+{
+ int i;
+
+ g_object_unref (info->proxy);
+ kill (info->pid, SIGTERM);
+
+ /* Wait until the bus notices the service is gone */
+ for (i = 100; i > 0; i--) {
+ if (!name_exists (info->bus, "org.freedesktop.NetworkManager"))
+ break;
+ g_usleep (G_USEC_PER_SEC / 50);
+ }
+ g_assert (i > 0);
+
+ g_object_unref (info->bus);
+ close (info->keepalive_fd);
+
+ memset (info, 0, sizeof (*info));
+ g_free (info);
+}
diff --git a/libnm-glib/tests/common.h b/libnm-glib/tests/common.h
new file mode 100644
index 000000000..7c49d2532
--- /dev/null
+++ b/libnm-glib/tests/common.h
@@ -0,0 +1,31 @@
+/* -*- 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 2014 Red Hat, Inc.
+ */
+
+#include <gio/gio.h>
+
+typedef struct {
+ GDBusConnection *bus;
+ GDBusProxy *proxy;
+ GPid pid;
+ int keepalive_fd;
+} NMTestServiceInfo;
+
+NMTestServiceInfo *nm_test_service_init (void);
+void nm_test_service_cleanup (NMTestServiceInfo *info);
diff --git a/libnm-glib/tests/libnm-glib-test-launch.sh b/libnm-glib/tests/libnm-glib-test-launch.sh
new file mode 100755
index 000000000..42d9fbe26
--- /dev/null
+++ b/libnm-glib/tests/libnm-glib-test-launch.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+# Spawn DBus if there's none
+if [ -z "$DBUS_SESSION_BUS_ADDRESS" ]; then
+ eval `dbus-launch --sh-syntax`
+ trap "kill $DBUS_SESSION_BUS_PID" EXIT
+fi
+
+"$@"
diff --git a/libnm-glib/tests/test-nm-client.c b/libnm-glib/tests/test-nm-client.c
index b181c8fa3..af3722eba 100644
--- a/libnm-glib/tests/test-nm-client.c
+++ b/libnm-glib/tests/test-nm-client.c
@@ -14,10 +14,12 @@
* 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.
+ * Copyright 2010 - 2014 Red Hat, Inc.
*
*/
+#include "config.h"
+
#include <dbus/dbus.h>
#include <dbus/dbus-glib.h>
#include <dbus/dbus-glib-lowlevel.h>
@@ -33,153 +35,39 @@
#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;
+#include "common.h"
+
static GMainLoop *loop = NULL;
+static NMTestServiceInfo *sinfo;
/*******************************************************************/
-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)
+static NMClient *
+test_client_new (void)
{
- ServiceInfo *sinfo;
- const char *args[2] = { fake_exec, NULL };
+ NMClient *client;
+ DBusGConnection *bus;
GError *error = NULL;
- int i = 100;
+ gboolean success;
- g_assert (!sinfo_static);
+ bus = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
+ g_assert_no_error (error);
- sinfo = g_malloc0 (sizeof (*sinfo));
+ client = g_object_new (NM_TYPE_CLIENT,
+ NM_OBJECT_DBUS_CONNECTION, bus,
+ NM_OBJECT_DBUS_PATH, NM_DBUS_PATH,
+ NULL);
+ g_assert (client != NULL);
- sinfo_static = sinfo;
+ dbus_g_connection_unref (bus);
- sinfo->bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL);
- test_assert (sinfo->bus);
+ success = g_initable_init (G_INITABLE (client), NULL, &error);
+ g_assert_no_error (error);
+ g_assert (success == TRUE);
- 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;
+ return client;
}
-#define _sinfo (service_get ())
-
/*******************************************************************/
static gboolean
@@ -195,16 +83,16 @@ add_device (const char *method, const char *ifname, char **out_path)
GError *error = NULL;
GVariant *ret;
- ret = g_dbus_proxy_call_sync (_sinfo->proxy,
+ 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)");
+ g_assert_no_error (error);
+ g_assert (ret);
+ g_assert_cmpstr (g_variant_get_type_string (ret), ==, "(o)");
if (out_path)
g_variant_get (ret, "(o)", out_path);
g_variant_unref (ret);
@@ -237,8 +125,8 @@ device_added_cb (NMClient *c,
NMDevice *device,
DeviceAddedInfo *info)
{
- test_assert (device);
- test_assert_cmpstr (nm_device_get_iface (device), ==, "eth0");
+ g_assert (device);
+ g_assert_cmpstr (nm_device_get_iface (device), ==, "eth0");
info->signaled = TRUE;
device_add_check_quit (info);
}
@@ -252,12 +140,12 @@ devices_notify_cb (NMClient *c,
NMDevice *device;
devices = nm_client_get_devices (c);
- test_assert (devices);
- test_assert_cmpint (devices->len, ==, 1);
+ g_assert (devices);
+ g_assert_cmpint (devices->len, ==, 1);
device = g_ptr_array_index (devices, 0);
- test_assert (device);
- test_assert_cmpstr (nm_device_get_iface (device), ==, "eth0");
+ g_assert (device);
+ g_assert_cmpstr (nm_device_get_iface (device), ==, "eth0");
info->notified = TRUE;
@@ -267,29 +155,27 @@ devices_notify_cb (NMClient *c,
static void
test_device_added (void)
{
+ NMClient *client;
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);
+ sinfo = nm_test_service_init ();
+ client = test_client_new ();
- devices = nm_client_get_devices (_sinfo->client);
- test_assert (devices == NULL);
+ devices = nm_client_get_devices (client);
+ g_assert (devices == NULL);
/* Tell the test service to add a new device */
add_device ("AddWiredDevice", "eth0", NULL);
- g_signal_connect (_sinfo->client,
+ g_signal_connect (client,
"device-added",
(GCallback) device_added_cb,
&info);
info.quit_count++;
- g_signal_connect (_sinfo->client,
+ g_signal_connect (client,
"notify::devices",
(GCallback) devices_notify_cb,
&info);
@@ -299,21 +185,22 @@ test_device_added (void)
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_assert (info.signaled);
+ g_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);
+ g_signal_handlers_disconnect_by_func (client, device_added_cb, &info);
+ g_signal_handlers_disconnect_by_func (client, devices_notify_cb, &info);
- devices = nm_client_get_devices (_sinfo->client);
- test_assert (devices);
- test_assert_cmpint (devices->len, ==, 1);
+ devices = nm_client_get_devices (client);
+ g_assert (devices);
+ g_assert_cmpint (devices->len, ==, 1);
device = g_ptr_array_index (devices, 0);
- test_assert (device);
- test_assert_cmpstr (nm_device_get_iface (device), ==, "eth0");
+ g_assert (device);
+ g_assert_cmpstr (nm_device_get_iface (device), ==, "eth0");
- service_cleanup ();
+ g_object_unref (client);
+ g_clear_pointer (&sinfo, nm_test_service_cleanup);
}
/*******************************************************************/
@@ -346,7 +233,7 @@ wifi_device_added_cb (NMClient *c,
NMDevice *device,
WifiApInfo *info)
{
- test_assert_cmpstr (nm_device_get_iface (device), ==, "wlan0");
+ g_assert_cmpstr (nm_device_get_iface (device), ==, "wlan0");
info->found = TRUE;
wifi_check_quit (info);
}
@@ -355,7 +242,7 @@ static void
got_ap_path (WifiApInfo *info, const char *path)
{
if (info->ap_path)
- test_assert_cmpstr (info->ap_path, ==, path);
+ g_assert_cmpstr (info->ap_path, ==, path);
else
info->ap_path = g_strdup (path);
}
@@ -365,8 +252,8 @@ wifi_ap_added_cb (NMDeviceWifi *w,
NMAccessPoint *ap,
WifiApInfo *info)
{
- test_assert (ap);
- test_assert_cmpstr (nm_access_point_get_bssid (ap), ==, expected_bssid);
+ g_assert (ap);
+ g_assert_cmpstr (nm_access_point_get_bssid (ap), ==, expected_bssid);
got_ap_path (info, nm_object_get_path (NM_OBJECT (ap)));
info->signaled = TRUE;
@@ -382,12 +269,12 @@ wifi_ap_add_notify_cb (NMDeviceWifi *w,
NMAccessPoint *ap;
aps = nm_device_wifi_get_access_points (w);
- test_assert (aps);
- test_assert_cmpint (aps->len, ==, 1);
+ g_assert (aps);
+ g_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");
+ g_assert (ap);
+ g_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;
@@ -399,8 +286,8 @@ 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)));
+ g_assert (ap);
+ g_assert_cmpstr (info->ap_path, ==, nm_object_get_path (NM_OBJECT (ap)));
info->signaled = TRUE;
wifi_check_quit (info);
@@ -414,7 +301,7 @@ wifi_ap_remove_notify_cb (NMDeviceWifi *w,
const GPtrArray *aps;
aps = nm_device_wifi_get_access_points (w);
- test_assert (aps == NULL);
+ g_assert (aps == NULL);
info->notified = TRUE;
wifi_check_quit (info);
@@ -423,23 +310,21 @@ wifi_ap_remove_notify_cb (NMDeviceWifi *w,
static void
test_wifi_ap_added_removed (void)
{
+ NMClient *client;
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);
+ sinfo = nm_test_service_init ();
+ client = test_client_new ();
/*************************************/
/* Add the wifi device */
add_device ("AddWifiDevice", "wlan0", NULL);
- g_signal_connect (_sinfo->client,
+ g_signal_connect (client,
"device-added",
(GCallback) wifi_device_added_cb,
&info);
@@ -449,11 +334,11 @@ test_wifi_ap_added_removed (void)
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);
+ g_assert (info.found);
+ g_signal_handlers_disconnect_by_func (client, wifi_device_added_cb, &info);
- wifi = (NMDeviceWifi *) nm_client_get_device_by_iface (_sinfo->client, "wlan0");
- test_assert (NM_IS_DEVICE_WIFI (wifi));
+ wifi = (NMDeviceWifi *) nm_client_get_device_by_iface (client, "wlan0");
+ g_assert (NM_IS_DEVICE_WIFI (wifi));
/*************************************/
/* Add the wifi device */
@@ -461,16 +346,16 @@ test_wifi_ap_added_removed (void)
info.notified = FALSE;
info.quit_id = 0;
- ret = g_dbus_proxy_call_sync (_sinfo->proxy,
+ 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_assert_no_error (error);
+ g_assert (ret);
+ g_assert_cmpstr (g_variant_get_type_string (ret), ==, "(o)");
g_variant_get (ret, "(o)", &expected_path);
g_variant_unref (ret);
@@ -490,10 +375,10 @@ test_wifi_ap_added_removed (void)
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_assert (info.signaled);
+ g_assert (info.notified);
+ g_assert (info.ap_path);
+ g_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);
@@ -503,14 +388,14 @@ test_wifi_ap_added_removed (void)
info.notified = FALSE;
info.quit_id = 0;
- ret = g_dbus_proxy_call_sync (_sinfo->proxy,
+ 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_assert_no_error (error);
g_clear_pointer (&ret, g_variant_unref);
g_signal_connect (wifi,
@@ -529,14 +414,16 @@ test_wifi_ap_added_removed (void)
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_assert (info.signaled);
+ g_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 ();
+
+ g_object_unref (client);
+ g_clear_pointer (&sinfo, nm_test_service_cleanup);
}
/*******************************************************************/
@@ -569,7 +456,7 @@ wimax_device_added_cb (NMClient *c,
NMDevice *device,
WimaxNspInfo *info)
{
- test_assert_cmpstr (nm_device_get_iface (device), ==, "wmx0");
+ g_assert_cmpstr (nm_device_get_iface (device), ==, "wmx0");
info->found = TRUE;
wimax_check_quit (info);
}
@@ -578,7 +465,7 @@ static void
got_nsp_path (WimaxNspInfo *info, const char *path)
{
if (info->nsp_path)
- test_assert_cmpstr (info->nsp_path, ==, path);
+ g_assert_cmpstr (info->nsp_path, ==, path);
else
info->nsp_path = g_strdup (path);
}
@@ -588,8 +475,8 @@ 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);
+ g_assert (nsp);
+ g_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;
@@ -605,12 +492,12 @@ wimax_nsp_add_notify_cb (NMDeviceWimax *w,
NMWimaxNsp *nsp;
nsps = nm_device_wimax_get_nsps (w);
- test_assert (nsps);
- test_assert_cmpint (nsps->len, ==, 1);
+ g_assert (nsps);
+ g_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);
+ g_assert (nsp);
+ g_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;
@@ -622,8 +509,8 @@ 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)));
+ g_assert (nsp);
+ g_assert_cmpstr (info->nsp_path, ==, nm_object_get_path (NM_OBJECT (nsp)));
info->signaled = TRUE;
wimax_check_quit (info);
@@ -637,7 +524,7 @@ wimax_nsp_remove_notify_cb (NMDeviceWimax *w,
const GPtrArray *nsps;
nsps = nm_device_wimax_get_nsps (w);
- test_assert (nsps == NULL);
+ g_assert (nsps == NULL);
info->notified = TRUE;
wimax_check_quit (info);
@@ -646,23 +533,21 @@ wimax_nsp_remove_notify_cb (NMDeviceWimax *w,
static void
test_wimax_nsp_added_removed (void)
{
+ NMClient *client;
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);
+ sinfo = nm_test_service_init ();
+ client = test_client_new ();
/*************************************/
/* Add the wimax device */
add_device ("AddWimaxDevice", "wmx0", NULL);
- g_signal_connect (_sinfo->client,
+ g_signal_connect (client,
"device-added",
(GCallback) wimax_device_added_cb,
&info);
@@ -672,11 +557,11 @@ test_wimax_nsp_added_removed (void)
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);
+ g_assert (info.found);
+ g_signal_handlers_disconnect_by_func (client, wimax_device_added_cb, &info);
- wimax = (NMDeviceWimax *) nm_client_get_device_by_iface (_sinfo->client, "wmx0");
- test_assert (NM_IS_DEVICE_WIMAX (wimax));
+ wimax = (NMDeviceWimax *) nm_client_get_device_by_iface (client, "wmx0");
+ g_assert (NM_IS_DEVICE_WIMAX (wimax));
/*************************************/
/* Add the wimax NSP */
@@ -684,16 +569,16 @@ test_wimax_nsp_added_removed (void)
info.notified = FALSE;
info.quit_id = 0;
- ret = g_dbus_proxy_call_sync (_sinfo->proxy,
+ 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_assert_no_error (error);
+ g_assert (ret);
+ g_assert_cmpstr (g_variant_get_type_string (ret), ==, "(o)");
g_variant_get (ret, "(o)", &expected_path);
g_variant_unref (ret);
@@ -713,10 +598,10 @@ test_wimax_nsp_added_removed (void)
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_assert (info.signaled);
+ g_assert (info.notified);
+ g_assert (info.nsp_path);
+ g_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);
@@ -726,14 +611,14 @@ test_wimax_nsp_added_removed (void)
info.notified = FALSE;
info.quit_id = 0;
- ret = g_dbus_proxy_call_sync (_sinfo->proxy,
+ 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_assert_no_error (error);
g_clear_pointer (&ret, g_variant_unref);
g_signal_connect (wimax,
@@ -752,14 +637,16 @@ test_wimax_nsp_added_removed (void)
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_assert (info.signaled);
+ g_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 ();
+
+ g_object_unref (client);
+ g_clear_pointer (&sinfo, nm_test_service_cleanup);
}
/*******************************************************************/
@@ -796,7 +683,7 @@ da_device_removed_cb (NMClient *c,
NMDevice *device,
DaInfo *info)
{
- test_assert_cmpstr (nm_device_get_iface (device), ==, "eth0");
+ g_assert_cmpstr (nm_device_get_iface (device), ==, "eth0");
info->signaled = TRUE;
da_check_quit (info);
}
@@ -812,14 +699,14 @@ da_devices_notify_cb (NMClient *c,
const char *iface;
devices = nm_client_get_devices (c);
- test_assert (devices);
- test_assert_cmpint (devices->len, ==, 2);
+ g_assert (devices);
+ g_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"));
+ g_assert (!strcmp (iface, "wlan0") || !strcmp (iface, "eth1"));
}
info->notified = TRUE;
@@ -829,6 +716,7 @@ da_devices_notify_cb (NMClient *c,
static void
test_devices_array (void)
{
+ NMClient *client;
DaInfo info = { loop };
char *paths[3] = { NULL, NULL, NULL };
NMDevice *device;
@@ -836,11 +724,8 @@ test_devices_array (void)
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);
+ sinfo = nm_test_service_init ();
+ client = test_client_new ();
/*************************************/
/* Add some devices */
@@ -849,7 +734,7 @@ test_devices_array (void)
add_device ("AddWiredDevice", "eth1", &paths[2]);
info.quit_count = 3;
- g_signal_connect (_sinfo->client,
+ g_signal_connect (client,
"device-added",
(GCallback) da_device_added_cb,
&info);
@@ -858,42 +743,42 @@ test_devices_array (void)
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);
+ g_assert_cmpint (info.quit_count, ==, 0);
+ g_signal_handlers_disconnect_by_func (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);
+ devices = nm_client_get_devices (client);
+ g_assert (devices);
+ g_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 (client, "wlan0");
+ g_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 (client, "eth0");
+ g_assert (NM_IS_DEVICE_ETHERNET (device));
- device = nm_client_get_device_by_iface (_sinfo->client, "eth1");
- test_assert (NM_IS_DEVICE_ETHERNET (device));
+ device = nm_client_get_device_by_iface (client, "eth1");
+ g_assert (NM_IS_DEVICE_ETHERNET (device));
/********************************/
/* Now remove the device in the middle */
- ret = g_dbus_proxy_call_sync (_sinfo->proxy,
+ 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_assert_no_error (error);
+ g_assert (ret);
g_variant_unref (ret);
- g_signal_connect (_sinfo->client,
+ g_signal_connect (client,
"device-removed",
(GCallback) da_device_removed_cb,
&info);
- g_signal_connect (_sinfo->client,
+ g_signal_connect (client,
"notify::devices",
(GCallback) da_devices_notify_cb,
&info);
@@ -903,25 +788,94 @@ test_devices_array (void)
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);
+ g_assert_cmpint (info.quit_count, ==, 0);
+ g_signal_handlers_disconnect_by_func (client, da_device_removed_cb, &info);
+ g_signal_handlers_disconnect_by_func (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);
+ devices = nm_client_get_devices (client);
+ g_assert (devices);
+ g_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 (client, "wlan0");
+ g_assert (NM_IS_DEVICE_WIFI (device));
- device = nm_client_get_device_by_iface (_sinfo->client, "eth1");
- test_assert (NM_IS_DEVICE_ETHERNET (device));
+ device = nm_client_get_device_by_iface (client, "eth1");
+ g_assert (NM_IS_DEVICE_ETHERNET (device));
g_free (paths[0]);
g_free (paths[1]);
g_free (paths[2]);
- service_cleanup ();
+
+ g_object_unref (client);
+ g_clear_pointer (&sinfo, nm_test_service_cleanup);
+}
+
+static void
+manager_running_changed (GObject *client,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ int *running_changed = user_data;
+
+ (*running_changed)++;
+ g_main_loop_quit (loop);
+}
+
+static void
+test_client_manager_running (void)
+{
+ NMClient *client1, *client2;
+ guint quit_id;
+ int running_changed = 0;
+ GError *error = NULL;
+
+ client1 = test_client_new ();
+
+ g_assert (!nm_client_get_manager_running (client1));
+ g_assert_cmpstr (nm_client_get_version (client1), ==, NULL);
+
+ g_assert (!nm_client_networking_get_enabled (client1));
+ /* This will have no effect, but it shouldn't cause any warnings either. */
+ nm_client_networking_set_enabled (client1, TRUE);
+ g_assert (!nm_client_networking_get_enabled (client1));
+
+ /* OTOH, this should result in an error */
+ nm_client_set_logging (client1, "DEFAULT", "INFO", &error);
+ g_assert_error (error, NM_CLIENT_ERROR, NM_CLIENT_ERROR_MANAGER_NOT_RUNNING);
+ g_clear_error (&error);
+
+ /* Now start the test service. */
+ sinfo = nm_test_service_init ();
+ client2 = test_client_new ();
+
+ /* client2 should know that NM is running, but the previously-created
+ * client1 hasn't gotten the news yet.
+ */
+ g_assert (!nm_client_get_manager_running (client1));
+ g_assert (nm_client_get_manager_running (client2));
+
+ g_signal_connect (client1, "notify::" NM_CLIENT_MANAGER_RUNNING,
+ G_CALLBACK (manager_running_changed), &running_changed);
+ quit_id = g_timeout_add_seconds (5, loop_quit, loop);
+ g_main_loop_run (loop);
+ g_assert_cmpint (running_changed, ==, 1);
+ g_assert (nm_client_get_manager_running (client1));
+ g_source_remove (quit_id);
+
+ /* And kill it */
+ g_clear_pointer (&sinfo, nm_test_service_cleanup);
+
+ g_assert (nm_client_get_manager_running (client1));
+
+ quit_id = g_timeout_add_seconds (5, loop_quit, loop);
+ g_main_loop_run (loop);
+ g_assert_cmpint (running_changed, ==, 2);
+ g_assert (!nm_client_get_manager_running (client1));
+ g_source_remove (quit_id);
+
+ g_object_unref (client1);
+ g_object_unref (client2);
}
/*******************************************************************/
@@ -929,24 +883,19 @@ test_devices_array (void)
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);
+ g_test_add_func ("/libnm-glib/client-manager-running", test_client_manager_running);
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 e3ef7f22e..237e287f8 100644
--- a/libnm-glib/tests/test-remote-settings-client.c
+++ b/libnm-glib/tests/test-remote-settings-client.c
@@ -14,10 +14,12 @@
* 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 2010 - 2011 Red Hat, Inc.
*
*/
+#include "config.h"
+
#include <dbus/dbus.h>
#include <dbus/dbus-glib.h>
#include <dbus/dbus-glib-lowlevel.h>
@@ -33,8 +35,9 @@
#include <nm-utils.h>
#include "nm-remote-settings.h"
+#include "common.h"
-static GPid spid = 0;
+static NMTestServiceInfo *sinfo;
static NMRemoteSettings *settings = NULL;
DBusGConnection *bus = NULL;
NMRemoteConnection *remote = NULL;
@@ -42,23 +45,6 @@ NMRemoteConnection *remote = NULL;
/*******************************************************************/
static void
-cleanup (void)
-{
- if (settings)
- g_object_unref (settings);
- kill (spid, SIGTERM);
-}
-
-#define test_assert(condition) \
-do { \
- if (!G_LIKELY (condition)) \
- cleanup (); \
- g_assert (condition); \
-} while (0)
-
-/*******************************************************************/
-
-static void
add_cb (NMRemoteSettings *s,
NMRemoteConnection *connection,
GError *error,
@@ -69,6 +55,7 @@ add_cb (NMRemoteSettings *s,
*((gboolean *) user_data) = TRUE;
remote = connection;
+ g_object_add_weak_pointer (G_OBJECT (connection), (void **) &remote);
}
#define TEST_CON_ID "blahblahblah"
@@ -103,20 +90,20 @@ test_add_connection (void)
connection,
add_cb,
&done);
- test_assert (success == TRUE);
+ g_assert (success == TRUE);
start = time (NULL);
do {
now = time (NULL);
g_main_context_iteration (NULL, FALSE);
} while ((done == FALSE) && (now - start < 5));
- test_assert (done == TRUE);
- test_assert (remote != NULL);
+ g_assert (done == TRUE);
+ g_assert (remote != NULL);
/* Make sure the connection is the same as what we added */
- test_assert (nm_connection_compare (connection,
- NM_CONNECTION (remote),
- NM_SETTING_COMPARE_FLAG_EXACT) == TRUE);
+ g_assert (nm_connection_compare (connection,
+ NM_CONNECTION (remote),
+ NM_SETTING_COMPARE_FLAG_EXACT) == TRUE);
}
/*******************************************************************/
@@ -130,10 +117,8 @@ set_visible_cb (DBusGProxy *proxy,
gboolean success;
success = dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID);
- if (!success)
- g_warning ("Failed to change connection visibility: %s", error->message);
- test_assert (success == TRUE);
- test_assert (error == NULL);
+ g_assert_no_error (error);
+ g_assert (success == TRUE);
}
static void
@@ -161,7 +146,7 @@ test_make_invisible (void)
gboolean done = FALSE, has_settings = FALSE;
char *path;
- test_assert (remote != NULL);
+ g_assert (remote != NULL);
/* Listen for the remove event when the connection becomes invisible */
g_signal_connect (remote, "removed", G_CALLBACK (invis_removed_cb), &done);
@@ -171,7 +156,7 @@ test_make_invisible (void)
NM_DBUS_SERVICE,
path,
NM_DBUS_IFACE_SETTINGS_CONNECTION);
- test_assert (proxy != NULL);
+ g_assert (proxy != NULL);
/* Bypass the NMRemoteSettings object so we can test it independently */
dbus_g_proxy_begin_call (proxy, "SetVisible", set_visible_cb, NULL, NULL,
@@ -183,22 +168,26 @@ test_make_invisible (void)
now = time (NULL);
g_main_context_iteration (NULL, FALSE);
} while ((done == FALSE) && (now - start < 5));
- test_assert (done == TRUE);
+ g_assert (done == TRUE);
+
+ g_assert (remote);
+ g_signal_handlers_disconnect_by_func (remote, G_CALLBACK (invis_removed_cb), &done);
/* Ensure NMRemoteSettings no longer has the connection */
list = nm_remote_settings_list_connections (settings);
for (iter = list; iter; iter = g_slist_next (iter)) {
NMConnection *candidate = NM_CONNECTION (iter->data);
- test_assert ((gpointer) remote != (gpointer) candidate);
- test_assert (strcmp (path, nm_connection_get_path (candidate)) != 0);
+ g_assert ((gpointer) remote != (gpointer) candidate);
+ g_assert (strcmp (path, nm_connection_get_path (candidate)) != 0);
}
/* And ensure the invisible connection no longer has any settings */
+ g_assert (remote);
nm_connection_for_each_setting_value (NM_CONNECTION (remote),
invis_has_settings_cb,
&has_settings);
- test_assert (has_settings == FALSE);
+ g_assert (has_settings == FALSE);
g_free (path);
g_object_unref (proxy);
@@ -224,7 +213,7 @@ test_make_visible (void)
char *path;
NMRemoteConnection *new = NULL;
- test_assert (remote != NULL);
+ g_assert (remote != NULL);
/* Wait for the new-connection signal when the connection is visible again */
g_signal_connect (settings, NM_REMOTE_SETTINGS_NEW_CONNECTION,
@@ -235,7 +224,7 @@ test_make_visible (void)
NM_DBUS_SERVICE,
path,
NM_DBUS_IFACE_SETTINGS_CONNECTION);
- test_assert (proxy != NULL);
+ g_assert (proxy != NULL);
/* Bypass the NMRemoteSettings object so we can test it independently */
dbus_g_proxy_begin_call (proxy, "SetVisible", set_visible_cb, NULL, NULL,
@@ -250,7 +239,10 @@ test_make_visible (void)
} while ((new == NULL) && (now - start < 5));
/* Ensure the new connection is the same as the one we made visible again */
- test_assert (new == remote);
+ g_assert (new);
+ g_assert (new == remote);
+
+ g_signal_handlers_disconnect_by_func (settings, G_CALLBACK (vis_new_connection_cb), &new);
/* Ensure NMRemoteSettings has the connection */
list = nm_remote_settings_list_connections (settings);
@@ -258,13 +250,13 @@ test_make_visible (void)
NMConnection *candidate = NM_CONNECTION (iter->data);
if ((gpointer) remote == (gpointer) candidate) {
- test_assert (strcmp (path, nm_connection_get_path (candidate)) == 0);
- test_assert (strcmp (TEST_CON_ID, nm_connection_get_id (candidate)) == 0);
+ g_assert_cmpstr (path, ==, nm_connection_get_path (candidate));
+ g_assert_cmpstr (TEST_CON_ID, ==, nm_connection_get_id (candidate));
found = TRUE;
break;
}
}
- test_assert (found == TRUE);
+ g_assert (found == TRUE);
g_free (path);
g_object_unref (proxy);
@@ -281,10 +273,8 @@ deleted_cb (DBusGProxy *proxy,
gboolean success;
success = dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID);
- if (!success)
- g_warning ("Failed to delete connection: %s", error->message);
- test_assert (success == TRUE);
- test_assert (error == NULL);
+ g_assert_no_error (error);
+ g_assert (success == TRUE);
}
static void
@@ -305,9 +295,11 @@ test_remove_connection (void)
/* Find a connection to delete */
list = nm_remote_settings_list_connections (settings);
- test_assert (g_slist_length (list) > 0);
+ g_assert_cmpint (g_slist_length (list), >, 0);
connection = NM_REMOTE_CONNECTION (list->data);
+ g_assert (connection);
+ g_assert (remote == connection);
path = g_strdup (nm_connection_get_path (NM_CONNECTION (connection)));
g_signal_connect (connection, "removed", G_CALLBACK (removed_cb), &done);
@@ -315,7 +307,7 @@ test_remove_connection (void)
NM_DBUS_SERVICE,
path,
NM_DBUS_IFACE_SETTINGS_CONNECTION);
- test_assert (proxy != NULL);
+ g_assert (proxy != NULL);
/* Bypass the NMRemoteSettings object so we can test it independently */
dbus_g_proxy_begin_call (proxy, "Delete", deleted_cb, NULL, NULL, G_TYPE_INVALID);
@@ -325,15 +317,17 @@ test_remove_connection (void)
now = time (NULL);
g_main_context_iteration (NULL, FALSE);
} while ((done == FALSE) && (now - start < 5));
- test_assert (done == TRUE);
+ g_assert (done == TRUE);
+
+ g_assert (!remote);
/* Ensure NMRemoteSettings no longer has the connection */
list = nm_remote_settings_list_connections (settings);
for (iter = list; iter; iter = g_slist_next (iter)) {
NMConnection *candidate = NM_CONNECTION (iter->data);
- test_assert ((gpointer) connection != (gpointer) candidate);
- test_assert (strcmp (path, nm_connection_get_path (candidate)) != 0);
+ g_assert ((gpointer) connection != (gpointer) candidate);
+ g_assert_cmpstr (path, ==, nm_connection_get_path (candidate));
}
g_free (path);
@@ -342,15 +336,93 @@ test_remove_connection (void)
/*******************************************************************/
+static GMainLoop *loop;
+
+static gboolean
+loop_quit (gpointer user_data)
+{
+ g_main_loop_quit (loop);
+ return G_SOURCE_REMOVE;
+}
+
+static void
+settings_service_running_changed (GObject *client,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ int *running_changed = user_data;
+
+ (*running_changed)++;
+ g_main_loop_quit (loop);
+}
+
+static void
+test_service_running (void)
+{
+ NMRemoteSettings *settings2;
+ guint quit_id;
+ int running_changed = 0;
+ gboolean running;
+
+ loop = g_main_loop_new (NULL, FALSE);
+
+ g_object_get (G_OBJECT (settings),
+ NM_REMOTE_SETTINGS_SERVICE_RUNNING, &running,
+ NULL);
+ g_assert (running == TRUE);
+
+ /* Now kill the test service. */
+ nm_test_service_cleanup (sinfo);
+
+ settings2 = nm_remote_settings_new (bus);
+
+ /* settings2 should know that NM is running, but the previously-created
+ * settings hasn't gotten the news yet.
+ */
+ g_object_get (G_OBJECT (settings2),
+ NM_REMOTE_SETTINGS_SERVICE_RUNNING, &running,
+ NULL);
+ g_assert (running == FALSE);
+ g_object_get (G_OBJECT (settings),
+ NM_REMOTE_SETTINGS_SERVICE_RUNNING, &running,
+ NULL);
+ g_assert (running == TRUE);
+
+ g_signal_connect (settings, "notify::" NM_REMOTE_SETTINGS_SERVICE_RUNNING,
+ G_CALLBACK (settings_service_running_changed), &running_changed);
+ quit_id = g_timeout_add_seconds (5, loop_quit, loop);
+ g_main_loop_run (loop);
+ g_assert_cmpint (running_changed, ==, 1);
+ g_source_remove (quit_id);
+
+ g_object_get (G_OBJECT (settings2),
+ NM_REMOTE_SETTINGS_SERVICE_RUNNING, &running,
+ NULL);
+ g_assert (running == FALSE);
+
+ /* Now restart it */
+ sinfo = nm_test_service_init ();
+
+ quit_id = g_timeout_add_seconds (5, loop_quit, loop);
+ g_main_loop_run (loop);
+ g_assert_cmpint (running_changed, ==, 2);
+ g_source_remove (quit_id);
+
+ g_object_get (G_OBJECT (settings2),
+ NM_REMOTE_SETTINGS_SERVICE_RUNNING, &running,
+ NULL);
+ g_assert (running == TRUE);
+
+ g_object_unref (settings2);
+}
+
+/*******************************************************************/
+
int
main (int argc, char **argv)
{
- char *service_argv[3] = { NULL, NULL, NULL };
int ret;
GError *error = NULL;
- int i = 100;
-
- g_assert (argc == 3);
#if !GLIB_CHECK_VERSION (2, 35, 0)
g_type_init ();
@@ -359,39 +431,27 @@ main (int argc, char **argv)
g_test_init (&argc, &argv, NULL);
bus = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
- if (!bus) {
- g_warning ("Error connecting to D-Bus: %s", error->message);
- g_assert (error == NULL);
- }
-
- service_argv[0] = g_strdup_printf ("%s/%s", argv[1], argv[2]);
- if (!g_spawn_async (argv[1], service_argv, NULL, 0, NULL, NULL, &spid, &error)) {
- g_warning ("Error spawning %s: %s", argv[2], error->message);
- g_assert (error == NULL);
- }
+ g_assert_no_error (error);
- /* Wait until the service is registered on the bus */
- while (i > 0) {
- g_usleep (G_USEC_PER_SEC / 50);
- if (dbus_bus_name_has_owner (dbus_g_connection_get_connection (bus),
- "org.freedesktop.NetworkManager",
- NULL))
- break;
- i--;
- }
- test_assert (i > 0);
+ sinfo = nm_test_service_init ();
settings = nm_remote_settings_new (bus);
- test_assert (settings != NULL);
+ g_assert (settings != NULL);
+ /* FIXME: these tests assume that they get run in order, but g_test_run()
+ * does not actually guarantee that!
+ */
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);
+ g_test_add_func ("/remote_settings/service_running", test_service_running);
ret = g_test_run ();
- cleanup ();
+ nm_test_service_cleanup (sinfo);
+ g_object_unref (settings);
+ dbus_g_connection_unref (bus);
return ret;
}
diff --git a/libnm-glib/tests/test-remote-settings-service.py b/libnm-glib/tests/test-remote-settings-service.py
deleted file mode 100755
index 439073ad2..000000000
--- a/libnm-glib/tests/test-remote-settings-service.py
+++ /dev/null
@@ -1,150 +0,0 @@
-#!/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
-
-IFACE_SETTINGS = 'org.freedesktop.NetworkManager.Settings'
-IFACE_CONNECTION = 'org.freedesktop.NetworkManager.Settings.Connection'
-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'
-
-class PermissionDeniedException(dbus.DBusException):
- _dbus_error_name = IFACE_SETTINGS + '.PermissionDenied'
-
-mainloop = GObject.MainLoop()
-
-class Connection(dbus.service.Object):
- def __init__(self, bus, object_path, settings, remove_func):
- dbus.service.Object.__init__(self, bus, object_path)
- self.path = object_path
- 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:
- raise PermissionDeniedException()
- return self.settings
-
- @dbus.service.method(dbus_interface=IFACE_CONNECTION, in_signature='b', out_signature='')
- def SetVisible(self, vis):
- self.visible = vis
- self.Updated()
-
- @dbus.service.method(dbus_interface=IFACE_CONNECTION, in_signature='', out_signature='')
- def Delete(self):
- self.remove_func(self)
- self.Removed()
-
- @dbus.service.signal(IFACE_CONNECTION, signature='')
- def Removed(self):
- pass
-
- @dbus.service.signal(IFACE_CONNECTION, signature='')
- def Updated(self):
- pass
-
-class Settings(dbus.service.Object):
- def __init__(self, bus, object_path):
- dbus.service.Object.__init__(self, bus, object_path)
- self.connections = {}
- self.bus = bus
- self.counter = 1
- self.props = {}
- self.props['Hostname'] = "foobar.baz"
- self.props['CanModify'] = True
-
- @dbus.service.method(dbus_interface=IFACE_SETTINGS, in_signature='', out_signature='ao')
- def ListConnections(self):
- connections = []
- return self.connections.keys()
-
- @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/{0}".format(self.counter)
- self.counter = self.counter + 1
- self.connections[path] = Connection(self.bus, path, settings, self.delete_connection)
- print("Added connection {0}".format(path))
- return path
-
- def delete_connection(self, connection):
- del self.connections[connection.path]
-
- @dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE, in_signature='s', out_signature='a{sv}')
- def GetAll(self, iface):
- if iface != IFACE_SETTINGS:
- 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_SETTINGS:
- raise UnknownInterfaceException()
- if not name in self.props.keys():
- raise UnknownPropertyException()
- return self.props[name]
-
- @dbus.service.signal(IFACE_SETTINGS, signature='o')
- def NewConnection(self, path):
- pass
-
- @dbus.service.method(IFACE_SETTINGS, in_signature='', out_signature='')
- def Quit(self):
- mainloop.quit()
-
-def quit_cb(user_data):
- mainloop.quit()
-
-def main():
- dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
-
- bus = dbus.SessionBus()
- obj = Settings(bus, "/org/freedesktop/NetworkManager/Settings")
- if not bus.request_name("org.freedesktop.NetworkManager"):
- sys.exit(1)
-
- print("Service started")
-
- GLib.timeout_add_seconds(20, quit_cb, None)
-
- try:
- mainloop.run()
- except Exception as e:
- pass
-
- print("Service stopped")
- sys.exit(0)
-
-if __name__ == '__main__':
- main()
-
diff --git a/libnm-util/Makefile.am b/libnm-util/Makefile.am
index 01b2026ab..3fdc79e50 100644
--- a/libnm-util/Makefile.am
+++ b/libnm-util/Makefile.am
@@ -5,8 +5,8 @@ SUBDIRS = . tests
AM_CPPFLAGS = \
-I${top_srcdir} \
-I${top_srcdir}/include \
- -I${top_builddir}/include \
-DG_LOG_DOMAIN=\""libnm-util"\" \
+ -DLOCALEDIR=\"$(datadir)/locale\" \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS) \
@@ -23,6 +23,8 @@ endif
lib_LTLIBRARIES=libnm-util.la
libnm_util_include_HEADERS = \
+ NetworkManager.h \
+ NetworkManagerVPN.h \
nm-connection.h \
nm-setting.h \
nm-setting-8021x.h \
@@ -51,9 +53,12 @@ libnm_util_include_HEADERS = \
nm-setting-wireless.h \
nm-setting-wireless-security.h \
nm-setting-vpn.h \
- nm-utils-enum-types.h \
nm-utils.h
+nodist_libnm_util_include_HEADERS = \
+ nm-utils-enum-types.h \
+ nm-version.h
+
libnm_util_la_private_headers = \
crypto.h \
nm-param-spec-specialized.h \
@@ -101,7 +106,7 @@ libnm_util_la_SOURCES = \
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)
+nm_utils_enum_types_sources = $(filter-out NetworkManager%,$(libnm_util_include_HEADERS))
GLIB_MKENUMS_H_FLAGS = --identifier-prefix NM
GLIB_MKENUMS_C_FLAGS = --identifier-prefix NM
@@ -110,7 +115,7 @@ 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 "8:0:6"
+ -version-info "9:0:7"
if WITH_GNUTLS
libnm_util_la_SOURCES += crypto_gnutls.c
@@ -150,9 +155,9 @@ pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libnm-util.pc
DISTCLEANFILES = libnm-util.pc
-CLEANFILES =
+CLEANFILES = nm-version.h
-EXTRA_DIST = libnm-util.pc.in libnm-util.ver
+EXTRA_DIST = libnm-util.pc.in libnm-util.ver nm-version.h.in
-include $(INTROSPECTION_MAKEFILE)
INTROSPECTION_GIRS =
@@ -160,7 +165,7 @@ INTROSPECTION_SCANNER_ARGS = --add-include-path=$(srcdir)
INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
if HAVE_INTROSPECTION
-introspection_sources = $(libnm_util_include_HEADERS) $(libnm_util_la_csources) $(top_srcdir)/include/NetworkManager.h $(top_srcdir)/include/NetworkManagerVPN.h
+introspection_sources = $(libnm_util_include_HEADERS) $(nodist_libnm_util_include_HEADERS) $(libnm_util_la_csources)
NetworkManager-1.0.gir: libnm-util.la
NetworkManager_1_0_gir_INCLUDES = GObject-2.0 DBusGLib-1.0
@@ -179,6 +184,7 @@ typelibdir = $(libdir)/girepository-1.0
typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib)
CLEANFILES += $(gir_DATA) $(typelib_DATA)
+
endif
if ENABLE_TESTS
diff --git a/libnm-util/Makefile.in b/libnm-util/Makefile.in
index fa461f1ff..5dea1b42b 100644
--- a/libnm-util/Makefile.in
+++ b/libnm-util/Makefile.in
@@ -94,8 +94,9 @@ host_triplet = @host@
@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
+ $(srcdir)/libnm-util.pc.in $(srcdir)/nm-version.h.in \
+ $(top_srcdir)/build-aux/depcomp $(libnm_util_include_HEADERS) \
+ COPYING
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
$(top_srcdir)/m4/compiler_warnings.m4 \
@@ -114,7 +115,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 = libnm-util.pc
+CONFIG_CLEAN_FILES = libnm-util.pc nm-version.h
CONFIG_CLEAN_VPATH_FILES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
@@ -145,6 +146,7 @@ am__uninstall_files_from_dir = { \
}
am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" \
"$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(typelibdir)" \
+ "$(DESTDIR)$(libnm_util_includedir)" \
"$(DESTDIR)$(libnm_util_includedir)"
LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -253,7 +255,8 @@ am__can_run_installinfo = \
*) (install-info --version) >/dev/null 2>&1;; \
esac
DATA = $(gir_DATA) $(pkgconfig_DATA) $(typelib_DATA)
-HEADERS = $(libnm_util_include_HEADERS)
+HEADERS = $(libnm_util_include_HEADERS) \
+ $(nodist_libnm_util_include_HEADERS)
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
distclean-recursive maintainer-clean-recursive
am__recursive_targets = \
@@ -317,6 +320,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -440,6 +445,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -459,6 +465,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -485,7 +492,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -566,11 +573,14 @@ with_resolvconf = @with_resolvconf@
with_valgrind = @with_valgrind@
SUBDIRS = . tests
AM_CPPFLAGS = -I${top_srcdir} -I${top_srcdir}/include \
- -I${top_builddir}/include -DG_LOG_DOMAIN=\""libnm-util"\" \
+ -DG_LOG_DOMAIN=\""libnm-util"\" \
+ -DLOCALEDIR=\"$(datadir)/locale\" \
-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_include_HEADERS = \
+ NetworkManager.h \
+ NetworkManagerVPN.h \
nm-connection.h \
nm-setting.h \
nm-setting-8021x.h \
@@ -599,9 +609,12 @@ libnm_util_include_HEADERS = \
nm-setting-wireless.h \
nm-setting-wireless-security.h \
nm-setting-vpn.h \
- nm-utils-enum-types.h \
nm-utils.h
+nodist_libnm_util_include_HEADERS = \
+ nm-utils-enum-types.h \
+ nm-version.h
+
libnm_util_la_private_headers = \
crypto.h \
nm-param-spec-specialized.h \
@@ -648,14 +661,14 @@ libnm_util_la_SOURCES = $(libnm_util_la_csources) \
$(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)
+nm_utils_enum_types_sources = $(filter-out NetworkManager%,$(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_4) $(am__append_6)
SYMBOL_VIS_FILE = $(srcdir)/libnm-util.ver
libnm_util_la_LDFLAGS = -Wl,--version-script=$(SYMBOL_VIS_FILE) \
- -version-info "8:0:6"
+ -version-info "9:0:7"
libnm_util_includedir = $(includedir)/NetworkManager
@@ -669,12 +682,12 @@ libtest_crypto_la_LIBADD = $(GLIB_LIBS) $(am__append_8) \
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libnm-util.pc
DISTCLEANFILES = libnm-util.pc
-CLEANFILES = $(am__append_12)
-EXTRA_DIST = libnm-util.pc.in libnm-util.ver
+CLEANFILES = nm-version.h $(am__append_12)
+EXTRA_DIST = libnm-util.pc.in libnm-util.ver nm-version.h.in
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
+@HAVE_INTROSPECTION_TRUE@introspection_sources = $(libnm_util_include_HEADERS) $(nodist_libnm_util_include_HEADERS) $(libnm_util_la_csources)
@HAVE_INTROSPECTION_TRUE@NetworkManager_1_0_gir_INCLUDES = GObject-2.0 DBusGLib-1.0
@HAVE_INTROSPECTION_TRUE@NetworkManager_1_0_gir_PACKAGES = gobject-2.0 dbus-glib-1
@HAVE_INTROSPECTION_TRUE@NetworkManager_1_0_gir_EXPORT_PACKAGES = libnm-util
@@ -723,6 +736,8 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
$(am__aclocal_m4_deps):
libnm-util.pc: $(top_builddir)/config.status $(srcdir)/libnm-util.pc.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+nm-version.h: $(top_builddir)/config.status $(srcdir)/nm-version.h.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
install-libLTLIBRARIES: $(lib_LTLIBRARIES)
@$(NORMAL_INSTALL)
@@ -928,6 +943,27 @@ uninstall-libnm_util_includeHEADERS:
@list='$(libnm_util_include_HEADERS)'; test -n "$(libnm_util_includedir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
dir='$(DESTDIR)$(libnm_util_includedir)'; $(am__uninstall_files_from_dir)
+install-nodist_libnm_util_includeHEADERS: $(nodist_libnm_util_include_HEADERS)
+ @$(NORMAL_INSTALL)
+ @list='$(nodist_libnm_util_include_HEADERS)'; test -n "$(libnm_util_includedir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(libnm_util_includedir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(libnm_util_includedir)" || 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_HEADER) $$files '$(DESTDIR)$(libnm_util_includedir)'"; \
+ $(INSTALL_HEADER) $$files "$(DESTDIR)$(libnm_util_includedir)" || exit $$?; \
+ done
+
+uninstall-nodist_libnm_util_includeHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(nodist_libnm_util_include_HEADERS)'; test -n "$(libnm_util_includedir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(libnm_util_includedir)'; $(am__uninstall_files_from_dir)
# This directory's subdirectories are mostly independent; you can cd
# into them and run 'make' without going through this Makefile.
@@ -1091,7 +1127,7 @@ check: $(BUILT_SOURCES)
all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS)
installdirs: installdirs-recursive
installdirs-am:
- for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(typelibdir)" "$(DESTDIR)$(libnm_util_includedir)"; do \
+ for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(typelibdir)" "$(DESTDIR)$(libnm_util_includedir)" "$(DESTDIR)$(libnm_util_includedir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: $(BUILT_SOURCES)
@@ -1152,7 +1188,8 @@ info: info-recursive
info-am:
install-data-am: install-girDATA install-libnm_util_includeHEADERS \
- install-pkgconfigDATA install-typelibDATA
+ install-nodist_libnm_util_includeHEADERS install-pkgconfigDATA \
+ install-typelibDATA
install-dvi: install-dvi-recursive
@@ -1199,8 +1236,9 @@ ps: ps-recursive
ps-am:
uninstall-am: uninstall-girDATA uninstall-libLTLIBRARIES \
- uninstall-libnm_util_includeHEADERS uninstall-pkgconfigDATA \
- uninstall-typelibDATA
+ uninstall-libnm_util_includeHEADERS \
+ uninstall-nodist_libnm_util_includeHEADERS \
+ uninstall-pkgconfigDATA uninstall-typelibDATA
.MAKE: $(am__recursive_targets) all check check-am install install-am \
install-strip
@@ -1214,7 +1252,8 @@ uninstall-am: uninstall-girDATA uninstall-libLTLIBRARIES \
install-data-am install-dvi install-dvi-am install-exec \
install-exec-am install-girDATA install-html install-html-am \
install-info install-info-am install-libLTLIBRARIES \
- install-libnm_util_includeHEADERS install-man install-pdf \
+ install-libnm_util_includeHEADERS install-man \
+ install-nodist_libnm_util_includeHEADERS install-pdf \
install-pdf-am install-pkgconfigDATA install-ps install-ps-am \
install-strip install-typelibDATA installcheck installcheck-am \
installdirs installdirs-am maintainer-clean \
@@ -1222,6 +1261,7 @@ uninstall-am: uninstall-girDATA uninstall-libLTLIBRARIES \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags tags-am uninstall uninstall-am uninstall-girDATA \
uninstall-libLTLIBRARIES uninstall-libnm_util_includeHEADERS \
+ uninstall-nodist_libnm_util_includeHEADERS \
uninstall-pkgconfigDATA uninstall-typelibDATA
include $(GLIB_MAKEFILE)
diff --git a/include/NetworkManager.h b/libnm-util/NetworkManager.h
index 3fee1af00..08b4e6cf6 100644
--- a/include/NetworkManager.h
+++ b/libnm-util/NetworkManager.h
@@ -1,8 +1,5 @@
/* -*- 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
@@ -17,7 +14,13 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2004 - 2013 Red Hat, Inc.
+ * Copyright 2004 - 2014 Red Hat, Inc.
+ */
+
+/* Definitions related to NetworkManager's D-Bus interfaces.
+ *
+ * Note that although this header is installed as part of libnm-util, it is also
+ * used by some external code that does not link to libnm-util.
*/
#ifndef NETWORK_MANAGER_H
@@ -28,11 +31,11 @@
/*
* dbus services details
*/
-#define NM_DBUS_SERVICE "org.freedesktop.NetworkManager"
+#define NM_DBUS_SERVICE "org.freedesktop.NetworkManager"
-#define NM_DBUS_PATH "/org/freedesktop/NetworkManager"
-#define NM_DBUS_INTERFACE "org.freedesktop.NetworkManager"
-#define NM_DBUS_INTERFACE_DEVICE NM_DBUS_INTERFACE ".Device"
+#define NM_DBUS_PATH "/org/freedesktop/NetworkManager"
+#define NM_DBUS_INTERFACE "org.freedesktop.NetworkManager"
+#define NM_DBUS_INTERFACE_DEVICE NM_DBUS_INTERFACE ".Device"
#define NM_DBUS_INTERFACE_DEVICE_WIRED NM_DBUS_INTERFACE_DEVICE ".Wired"
#define NM_DBUS_INTERFACE_DEVICE_ADSL NM_DBUS_INTERFACE_DEVICE ".Adsl"
#define NM_DBUS_INTERFACE_DEVICE_WIRELESS NM_DBUS_INTERFACE_DEVICE ".Wireless"
@@ -87,6 +90,8 @@
* @NM_STATE_CONNECTED_GLOBAL: there is global IPv4 and/or IPv6 Internet connectivity
*
* #NMState values indicate the current overall networking state.
+ *
+ * (Corresponds to the NM_STATE type in nm-manager.xml.)
**/
typedef enum {
NM_STATE_UNKNOWN = 0,
@@ -113,6 +118,8 @@ typedef enum {
* @NM_CONNECTIVITY_FULL: The host is connected to a network, and
* appears to be able to reach the full Internet.
*
+ * (Corresponds to the NM_CONNECTIVITY type in nm-manager.xml.)
+ *
* Since: 0.9.8.6
*/
typedef enum {
@@ -145,6 +152,8 @@ typedef enum {
*
* #NMDeviceType values indicate the type of hardware represented by
* an #NMDevice.
+ *
+ * (Corresponds to the NM_DEVICE_TYPE type in nm-device.xml.)
**/
typedef enum {
NM_DEVICE_TYPE_UNKNOWN = 0,
@@ -170,13 +179,17 @@ typedef enum {
* @NM_DEVICE_CAP_NONE: device has no special capabilities
* @NM_DEVICE_CAP_NM_SUPPORTED: NetworkManager supports this device
* @NM_DEVICE_CAP_CARRIER_DETECT: this device can indicate carrier status
+ * @NM_DEVICE_CAP_IS_SOFTWARE: this device is a software device
*
* General device capability flags.
+ *
+ * (Corresponds to the NM_DEVICE_CAP type in nm-device-wifi.xml.)
**/
typedef enum {
NM_DEVICE_CAP_NONE = 0x00000000,
NM_DEVICE_CAP_NM_SUPPORTED = 0x00000001,
- NM_DEVICE_CAP_CARRIER_DETECT = 0x00000002
+ NM_DEVICE_CAP_CARRIER_DETECT = 0x00000002,
+ NM_DEVICE_CAP_IS_SOFTWARE = 0x00000004,
} NMDeviceCapabilities;
@@ -193,6 +206,8 @@ typedef enum {
* @NM_WIFI_DEVICE_CAP_ADHOC: device supports Ad-Hoc mode
*
* 802.11 specific device encryption and authentication capabilities.
+ *
+ * (Corresponds to the NM_802_11_DEVICE_CAP type in nm-device-wifi.xml.)
**/
typedef enum {
NM_WIFI_DEVICE_CAP_NONE = 0x00000000,
@@ -213,7 +228,9 @@ typedef enum {
* @NM_802_11_AP_FLAGS_PRIVACY: access point requires authentication and
* encryption (usually means WEP)
*
- * 802.11 access point flags.
+ * 802.11 access point flags.
+ *
+ * (Corresponds to the NM_802_11_AP_FLAGS type in nm-access-point.xml.)
**/
typedef enum {
NM_802_11_AP_FLAGS_NONE = 0x00000000,
@@ -236,7 +253,7 @@ typedef enum {
* @NM_802_11_AP_SEC_GROUP_TKIP: TKIP is supported for group/broadcast encryption
* @NM_802_11_AP_SEC_GROUP_CCMP: AES/CCMP is supported for group/broadcast
* encryption
- * @NM_802_11_AP_SEC_KEY_MGMT_PSK: WPA/RSN Pre-Shared Key encryption is
+ * @NM_802_11_AP_SEC_KEY_MGMT_PSK: WPA/RSN Pre-Shared Key encryption is
* supported
* @NM_802_11_AP_SEC_KEY_MGMT_802_1X: 802.1x authentication and key management
* is supported
@@ -244,6 +261,8 @@ typedef enum {
* 802.11 access point security and authentication flags. These flags describe
* the current security requirements of an access point as determined from the
* access point's beacon.
+ *
+ * (Corresponds to the NM_802_11_AP_SEC type in nm-access-point.xml.)
**/
typedef enum {
NM_802_11_AP_SEC_NONE = 0x00000000,
@@ -273,6 +292,8 @@ typedef enum {
* access point objects; used only for hotspot mode on the local machine.
*
* Indicates the 802.11 mode an access point or device is currently in.
+ *
+ * (Corresponds to the NM_802_11_MODE type in generic-types.xml.)
**/
typedef enum {
NM_802_11_MODE_UNKNOWN = 0,
@@ -289,6 +310,8 @@ typedef enum {
*
* #NMBluetoothCapabilities values indicate the usable capabilities of a
* Bluetooth device.
+ *
+ * (Corresponds to the NM_BT_CAPABILITY type in nm-device-bt.xml.)
**/
typedef enum {
NM_BT_CAPABILITY_NONE = 0x00000000,
@@ -311,6 +334,8 @@ typedef enum {
* technology families a modem device supports. For more information on the
* specific access technologies the device supports use the ModemManager D-Bus
* API.
+ *
+ * (Corresponds to the NM_DEVICE_MODEM_CAPABILITY type in nm-device-modem.xml.)
**/
typedef enum {
NM_DEVICE_MODEM_CAPABILITY_NONE = 0x00000000,
@@ -359,6 +384,7 @@ typedef enum {
* @NM_DEVICE_STATE_FAILED: the device failed to connect to the requested
* network and is cleaning up the connection request
*
+ * (Corresponds to the NM_DEVICE_STATE type in nm-device.xml.)
**/
typedef enum {
NM_DEVICE_STATE_UNKNOWN = 0,
@@ -377,191 +403,135 @@ typedef enum {
} NMDeviceState;
-/*
+/**
+ * NMDeviceStateReason:
+ * @NM_DEVICE_STATE_REASON_NONE: No reason given
+ * @NM_DEVICE_STATE_REASON_UNKNOWN: Unknown error
+ * @NM_DEVICE_STATE_REASON_NOW_MANAGED: Device is now managed
+ * @NM_DEVICE_STATE_REASON_NOW_UNMANAGED: Device is now unmanaged
+ * @NM_DEVICE_STATE_REASON_CONFIG_FAILED: The device could not be readied for configuration
+ * @NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE: IP configuration could not be reserved (no available address, timeout, etc)
+ * @NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED: The IP config is no longer valid
+ * @NM_DEVICE_STATE_REASON_NO_SECRETS: Secrets were required, but not provided
+ * @NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT: 802.1x supplicant disconnected
+ * @NM_DEVICE_STATE_REASON_SUPPLICANT_CONFIG_FAILED: 802.1x supplicant configuration failed
+ * @NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED: 802.1x supplicant failed
+ * @NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT: 802.1x supplicant took too long to authenticate
+ * @NM_DEVICE_STATE_REASON_PPP_START_FAILED: PPP service failed to start
+ * @NM_DEVICE_STATE_REASON_PPP_DISCONNECT: PPP service disconnected
+ * @NM_DEVICE_STATE_REASON_PPP_FAILED: PPP failed
+ * @NM_DEVICE_STATE_REASON_DHCP_START_FAILED: DHCP client failed to start
+ * @NM_DEVICE_STATE_REASON_DHCP_ERROR: DHCP client error
+ * @NM_DEVICE_STATE_REASON_DHCP_FAILED: DHCP client failed
+ * @NM_DEVICE_STATE_REASON_SHARED_START_FAILED: Shared connection service failed to start
+ * @NM_DEVICE_STATE_REASON_SHARED_FAILED: Shared connection service failed
+ * @NM_DEVICE_STATE_REASON_AUTOIP_START_FAILED: AutoIP service failed to start
+ * @NM_DEVICE_STATE_REASON_AUTOIP_ERROR: AutoIP service error
+ * @NM_DEVICE_STATE_REASON_AUTOIP_FAILED: AutoIP service failed
+ * @NM_DEVICE_STATE_REASON_MODEM_BUSY: The line is busy
+ * @NM_DEVICE_STATE_REASON_MODEM_NO_DIAL_TONE: No dial tone
+ * @NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER: No carrier could be established
+ * @NM_DEVICE_STATE_REASON_MODEM_DIAL_TIMEOUT: The dialing request timed out
+ * @NM_DEVICE_STATE_REASON_MODEM_DIAL_FAILED: The dialing attempt failed
+ * @NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED: Modem initialization failed
+ * @NM_DEVICE_STATE_REASON_GSM_APN_FAILED: Failed to select the specified APN
+ * @NM_DEVICE_STATE_REASON_GSM_REGISTRATION_NOT_SEARCHING: Not searching for networks
+ * @NM_DEVICE_STATE_REASON_GSM_REGISTRATION_DENIED: Network registration denied
+ * @NM_DEVICE_STATE_REASON_GSM_REGISTRATION_TIMEOUT: Network registration timed out
+ * @NM_DEVICE_STATE_REASON_GSM_REGISTRATION_FAILED: Failed to register with the requested network
+ * @NM_DEVICE_STATE_REASON_GSM_PIN_CHECK_FAILED: PIN check failed
+ * @NM_DEVICE_STATE_REASON_FIRMWARE_MISSING: Necessary firmware for the device may be missing
+ * @NM_DEVICE_STATE_REASON_REMOVED: The device was removed
+ * @NM_DEVICE_STATE_REASON_SLEEPING: NetworkManager went to sleep
+ * @NM_DEVICE_STATE_REASON_CONNECTION_REMOVED: The device's active connection disappeared
+ * @NM_DEVICE_STATE_REASON_USER_REQUESTED: Device disconnected by user or client
+ * @NM_DEVICE_STATE_REASON_CARRIER: Carrier/link changed
+ * @NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED: The device's existing connection was assumed
+ * @NM_DEVICE_STATE_REASON_SUPPLICANT_AVAILABLE: The supplicant is now available
+ * @NM_DEVICE_STATE_REASON_MODEM_NOT_FOUND: The modem could not be found
+ * @NM_DEVICE_STATE_REASON_BT_FAILED: The Bluetooth connection failed or timed out
+ * @NM_DEVICE_STATE_REASON_GSM_SIM_NOT_INSERTED: GSM Modem's SIM Card not inserted
+ * @NM_DEVICE_STATE_REASON_GSM_SIM_PIN_REQUIRED: GSM Modem's SIM Pin required
+ * @NM_DEVICE_STATE_REASON_GSM_SIM_PUK_REQUIRED: GSM Modem's SIM Puk required
+ * @NM_DEVICE_STATE_REASON_GSM_SIM_WRONG: GSM Modem's SIM wrong
+ * @NM_DEVICE_STATE_REASON_INFINIBAND_MODE: InfiniBand device does not support connected mode
+ * @NM_DEVICE_STATE_REASON_DEPENDENCY_FAILED: A dependency of the connection failed
+ * @NM_DEVICE_STATE_REASON_BR2684_FAILED: Problem with the RFC 2684 Ethernet over ADSL bridge
+ * @NM_DEVICE_STATE_REASON_MODEM_MANAGER_UNAVAILABLE: ModemManager not running
+ * @NM_DEVICE_STATE_REASON_SSID_NOT_FOUND: The WiFi network could not be found
+ * @NM_DEVICE_STATE_REASON_SECONDARY_CONNECTION_FAILED: A secondary connection of the base connection failed
+ * @NM_DEVICE_STATE_REASON_DCB_FCOE_FAILED: DCB or FCoE setup failed
+ * @NM_DEVICE_STATE_REASON_TEAMD_CONTROL_FAILED: teamd control failed
+ * @NM_DEVICE_STATE_REASON_MODEM_FAILED: Modem failed or no longer available
+ * @NM_DEVICE_STATE_REASON_MODEM_AVAILABLE: Modem now ready and available
+ * @NM_DEVICE_STATE_REASON_SIM_PIN_INCORRECT: SIM PIN was incorrect
+ *
* Device state change reason codes
+ *
+ * (Corresponds to the NM_DEVICE_STATE_REASON type in nm-device.xml.)
*/
typedef enum {
- /* No reason given */
NM_DEVICE_STATE_REASON_NONE = 0,
-
- /* Unknown error */
NM_DEVICE_STATE_REASON_UNKNOWN = 1,
-
- /* Device is now managed */
NM_DEVICE_STATE_REASON_NOW_MANAGED = 2,
-
- /* Device is now unmanaged */
NM_DEVICE_STATE_REASON_NOW_UNMANAGED = 3,
-
- /* The device could not be readied for configuration */
NM_DEVICE_STATE_REASON_CONFIG_FAILED = 4,
-
- /* IP configuration could not be reserved (no available address, timeout, etc) */
NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE = 5,
-
- /* The IP config is no longer valid */
NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED = 6,
-
- /* Secrets were required, but not provided */
NM_DEVICE_STATE_REASON_NO_SECRETS = 7,
-
- /* 802.1x supplicant disconnected */
NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT = 8,
-
- /* 802.1x supplicant configuration failed */
NM_DEVICE_STATE_REASON_SUPPLICANT_CONFIG_FAILED = 9,
-
- /* 802.1x supplicant failed */
NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED = 10,
-
- /* 802.1x supplicant took too long to authenticate */
NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT = 11,
-
- /* PPP service failed to start */
NM_DEVICE_STATE_REASON_PPP_START_FAILED = 12,
-
- /* PPP service disconnected */
NM_DEVICE_STATE_REASON_PPP_DISCONNECT = 13,
-
- /* PPP failed */
NM_DEVICE_STATE_REASON_PPP_FAILED = 14,
-
- /* DHCP client failed to start */
NM_DEVICE_STATE_REASON_DHCP_START_FAILED = 15,
-
- /* DHCP client error */
NM_DEVICE_STATE_REASON_DHCP_ERROR = 16,
-
- /* DHCP client failed */
NM_DEVICE_STATE_REASON_DHCP_FAILED = 17,
-
- /* Shared connection service failed to start */
NM_DEVICE_STATE_REASON_SHARED_START_FAILED = 18,
-
- /* Shared connection service failed */
NM_DEVICE_STATE_REASON_SHARED_FAILED = 19,
-
- /* AutoIP service failed to start */
NM_DEVICE_STATE_REASON_AUTOIP_START_FAILED = 20,
-
- /* AutoIP service error */
NM_DEVICE_STATE_REASON_AUTOIP_ERROR = 21,
-
- /* AutoIP service failed */
NM_DEVICE_STATE_REASON_AUTOIP_FAILED = 22,
-
- /* The line is busy */
NM_DEVICE_STATE_REASON_MODEM_BUSY = 23,
-
- /* No dial tone */
NM_DEVICE_STATE_REASON_MODEM_NO_DIAL_TONE = 24,
-
- /* No carrier could be established */
NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER = 25,
-
- /* The dialing request timed out */
NM_DEVICE_STATE_REASON_MODEM_DIAL_TIMEOUT = 26,
-
- /* The dialing attempt failed */
NM_DEVICE_STATE_REASON_MODEM_DIAL_FAILED = 27,
-
- /* Modem initialization failed */
NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED = 28,
-
- /* Failed to select the specified APN */
NM_DEVICE_STATE_REASON_GSM_APN_FAILED = 29,
-
- /* Not searching for networks */
NM_DEVICE_STATE_REASON_GSM_REGISTRATION_NOT_SEARCHING = 30,
-
- /* Network registration denied */
NM_DEVICE_STATE_REASON_GSM_REGISTRATION_DENIED = 31,
-
- /* Network registration timed out */
NM_DEVICE_STATE_REASON_GSM_REGISTRATION_TIMEOUT = 32,
-
- /* Failed to register with the requested network */
NM_DEVICE_STATE_REASON_GSM_REGISTRATION_FAILED = 33,
-
- /* PIN check failed */
NM_DEVICE_STATE_REASON_GSM_PIN_CHECK_FAILED = 34,
-
- /* Necessary firmware for the device may be missing */
NM_DEVICE_STATE_REASON_FIRMWARE_MISSING = 35,
-
- /* The device was removed */
NM_DEVICE_STATE_REASON_REMOVED = 36,
-
- /* NetworkManager went to sleep */
NM_DEVICE_STATE_REASON_SLEEPING = 37,
-
- /* The device's active connection disappeared */
NM_DEVICE_STATE_REASON_CONNECTION_REMOVED = 38,
-
- /* Device disconnected by user or client */
NM_DEVICE_STATE_REASON_USER_REQUESTED = 39,
-
- /* Carrier/link changed */
NM_DEVICE_STATE_REASON_CARRIER = 40,
-
- /* The device's existing connection was assumed */
NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED = 41,
-
- /* The supplicant is now available */
NM_DEVICE_STATE_REASON_SUPPLICANT_AVAILABLE = 42,
-
- /* The modem could not be found */
NM_DEVICE_STATE_REASON_MODEM_NOT_FOUND = 43,
-
- /* The Bluetooth connection failed or timed out */
NM_DEVICE_STATE_REASON_BT_FAILED = 44,
-
- /* GSM Modem's SIM Card not inserted */
NM_DEVICE_STATE_REASON_GSM_SIM_NOT_INSERTED = 45,
-
- /* GSM Modem's SIM Pin required */
NM_DEVICE_STATE_REASON_GSM_SIM_PIN_REQUIRED = 46,
-
- /* GSM Modem's SIM Puk required */
NM_DEVICE_STATE_REASON_GSM_SIM_PUK_REQUIRED = 47,
-
- /* GSM Modem's SIM wrong */
NM_DEVICE_STATE_REASON_GSM_SIM_WRONG = 48,
-
- /* InfiniBand device does not support connected mode */
NM_DEVICE_STATE_REASON_INFINIBAND_MODE = 49,
-
- /* A dependency of the connection failed */
NM_DEVICE_STATE_REASON_DEPENDENCY_FAILED = 50,
-
- /* Problem with the RFC 2684 Ethernet over ADSL bridge */
NM_DEVICE_STATE_REASON_BR2684_FAILED = 51,
-
- /* ModemManager not running */
NM_DEVICE_STATE_REASON_MODEM_MANAGER_UNAVAILABLE = 52,
-
- /* The WiFi network could not be found */
NM_DEVICE_STATE_REASON_SSID_NOT_FOUND = 53,
-
- /* 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;
@@ -579,6 +549,8 @@ typedef enum {
* #NMActiveConnectionState values indicate the state of a connection to a
* specific network while it is starting, connected, or disconnecting from that
* network.
+ *
+ * (Corresponds to the NM_ACTIVE_CONNECTION_STATE type in nm-active-connection.xml.)
**/
typedef enum {
NM_ACTIVE_CONNECTION_STATE_UNKNOWN = 0,
@@ -589,4 +561,3 @@ typedef enum {
} NMActiveConnectionState;
#endif /* NETWORK_MANAGER_H */
-
diff --git a/include/NetworkManagerVPN.h b/libnm-util/NetworkManagerVPN.h
index 5997c99f9..882d39739 100644
--- a/include/NetworkManagerVPN.h
+++ b/libnm-util/NetworkManagerVPN.h
@@ -1,7 +1,5 @@
-/* NetworkManager -- Network link manager
- *
- * Dan Williams <dcbw@redhat.com>
- *
+/* -*- 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
@@ -16,7 +14,13 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2004 Red Hat, Inc.
+ * Copyright 2004 Red Hat, Inc.
+ */
+
+/* D-Bus-related definitions for NetworkManager VPN plugins.
+ *
+ * Note that although this header is installed as part of libnm-util, it is also
+ * used by some external code that does not link to libnm-util.
*/
#ifndef NETWORK_MANAGER_VPN_H
@@ -25,11 +29,11 @@
/*
* dbus services details
*/
-#define NM_DBUS_PATH_VPN "/org/freedesktop/NetworkManager/VPN/Manager"
-#define NM_DBUS_INTERFACE_VPN "org.freedesktop.NetworkManager.VPN.Manager"
+#define NM_DBUS_PATH_VPN "/org/freedesktop/NetworkManager/VPN/Manager"
+#define NM_DBUS_INTERFACE_VPN "org.freedesktop.NetworkManager.VPN.Manager"
-#define NM_DBUS_PATH_VPN_CONNECTION "/org/freedesktop/NetworkManager/VPN/Connection"
-#define NM_DBUS_INTERFACE_VPN_CONNECTION "org.freedesktop.NetworkManager.VPN.Connection"
+#define NM_DBUS_PATH_VPN_CONNECTION "/org/freedesktop/NetworkManager/VPN/Connection"
+#define NM_DBUS_INTERFACE_VPN_CONNECTION "org.freedesktop.NetworkManager.VPN.Connection"
#define NM_VPN_DBUS_PLUGIN_PATH "/org/freedesktop/NetworkManager/VPN/Plugin"
#define NM_VPN_DBUS_PLUGIN_INTERFACE "org.freedesktop.NetworkManager.VPN.Plugin"
@@ -37,37 +41,47 @@
/*
* VPN Errors
*/
-#define NM_DBUS_NO_ACTIVE_VPN_CONNECTION "org.freedesktop.NetworkManager.VPNConnections.NoActiveVPNConnection"
-#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_NO_ACTIVE_VPN_CONNECTION "org.freedesktop.NetworkManager.VPNConnections.NoActiveVPNConnection"
+#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"
+#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"
/*
* VPN daemon signals
*/
-#define NM_DBUS_VPN_SIGNAL_LOGIN_BANNER "LoginBanner"
-#define NM_DBUS_VPN_SIGNAL_LOGIN_FAILED "LoginFailed"
-#define NM_DBUS_VPN_SIGNAL_LAUNCH_FAILED "LaunchFailed"
-#define NM_DBUS_VPN_SIGNAL_CONNECT_FAILED "ConnectFailed"
-#define NM_DBUS_VPN_SIGNAL_VPN_CONFIG_BAD "VPNConfigBad"
-#define NM_DBUS_VPN_SIGNAL_IP_CONFIG_BAD "IPConfigBad"
-#define NM_DBUS_VPN_SIGNAL_STATE_CHANGE "StateChange"
-#define NM_DBUS_VPN_SIGNAL_IP4_CONFIG "IP4Config"
-
-/*
+#define NM_DBUS_VPN_SIGNAL_LOGIN_BANNER "LoginBanner"
+#define NM_DBUS_VPN_SIGNAL_LOGIN_FAILED "LoginFailed"
+#define NM_DBUS_VPN_SIGNAL_LAUNCH_FAILED "LaunchFailed"
+#define NM_DBUS_VPN_SIGNAL_CONNECT_FAILED "ConnectFailed"
+#define NM_DBUS_VPN_SIGNAL_VPN_CONFIG_BAD "VPNConfigBad"
+#define NM_DBUS_VPN_SIGNAL_IP_CONFIG_BAD "IPConfigBad"
+#define NM_DBUS_VPN_SIGNAL_STATE_CHANGE "StateChange"
+#define NM_DBUS_VPN_SIGNAL_IP4_CONFIG "IP4Config"
+
+/**
+ * NMVPNServiceState:
+ * @NM_VPN_SERVICE_STATE_UNKNOWN: The state of the VPN plugin is unknown.
+ * @NM_VPN_SERVICE_STATE_INIT: The VPN plugin is initialized.
+ * @NM_VPN_SERVICE_STATE_SHUTDOWN: Not used.
+ * @NM_VPN_SERVICE_STATE_STARTING: The plugin is attempting to connect to a VPN server.
+ * @NM_VPN_SERVICE_STATE_STARTED: The plugin has connected to a VPN server.
+ * @NM_VPN_SERVICE_STATE_STOPPING: The plugin is disconnecting from the VPN server.
+ * @NM_VPN_SERVICE_STATE_STOPPED: The plugin has disconnected from the VPN server.
+ *
* VPN daemon states
+ *
+ * (Corresponds to the NM_VPN_SERVICE_STATE type in nm-vpn-connection.xml.)
*/
-typedef enum NMVPNServiceState
-{
+typedef enum NMVPNServiceState {
NM_VPN_SERVICE_STATE_UNKNOWN = 0,
NM_VPN_SERVICE_STATE_INIT,
NM_VPN_SERVICE_STATE_SHUTDOWN,
@@ -78,11 +92,26 @@ typedef enum NMVPNServiceState
} NMVPNServiceState;
-/*
+/**
+ * NMVPNConnectionState:
+ * @NM_VPN_CONNECTION_STATE_UNKNOWN: The state of the VPN connection is
+ * unknown.
+ * @NM_VPN_CONNECTION_STATE_PREPARE: The VPN connection is preparing to
+ * connect.
+ * @NM_VPN_CONNECTION_STATE_NEED_AUTH: The VPN connection needs authorization
+ * credentials.
+ * @NM_VPN_CONNECTION_STATE_CONNECT: The VPN connection is being established.
+ * @NM_VPN_CONNECTION_STATE_IP_CONFIG_GET: The VPN connection is getting an IP
+ * address.
+ * @NM_VPN_CONNECTION_STATE_ACTIVATED: The VPN connection is active.
+ * @NM_VPN_CONNECTION_STATE_FAILED: The VPN connection failed.
+ * @NM_VPN_CONNECTION_STATE_DISCONNECTED: The VPN connection is disconnected.
+ *
* VPN connection states
+ *
+ * (Corresponds to the NM_VPN_CONNECTION_STATE type in nm-vpn-connection.xml.)
*/
-typedef enum NMVPNConnectionState
-{
+typedef enum NMVPNConnectionState {
NM_VPN_CONNECTION_STATE_UNKNOWN = 0,
NM_VPN_CONNECTION_STATE_PREPARE,
NM_VPN_CONNECTION_STATE_NEED_AUTH,
@@ -93,8 +122,38 @@ typedef enum NMVPNConnectionState
NM_VPN_CONNECTION_STATE_DISCONNECTED
} NMVPNConnectionState;
-typedef enum NMVPNConnectionStateReason
-{
+/**
+ * NMVPNConnectionStateReason:
+ * @NM_VPN_CONNECTION_STATE_REASON_UNKNOWN: The reason for the VPN connection
+ * state change is unknown.
+ * @NM_VPN_CONNECTION_STATE_REASON_NONE: No reason was given for the VPN
+ * connection state change.
+ * @NM_VPN_CONNECTION_STATE_REASON_USER_DISCONNECTED: The VPN connection changed
+ * state because the user disconnected it.
+ * @NM_VPN_CONNECTION_STATE_REASON_DEVICE_DISCONNECTED: The VPN connection
+ * changed state because the device it was using was disconnected.
+ * @NM_VPN_CONNECTION_STATE_REASON_SERVICE_STOPPED: The service providing the
+ * VPN connection was stopped.
+ * @NM_VPN_CONNECTION_STATE_REASON_IP_CONFIG_INVALID: The IP config of the VPN
+ * connection was invalid.
+ * @NM_VPN_CONNECTION_STATE_REASON_CONNECT_TIMEOUT: The connection attempt to
+ * the VPN service timed out.
+ * @NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_TIMEOUT: A timeout occurred
+ * while starting the service providing the VPN connection.
+ * @NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_FAILED: Starting the service
+ * starting the service providing the VPN connection failed.
+ * @NM_VPN_CONNECTION_STATE_REASON_NO_SECRETS: Necessary secrets for the VPN
+ * connection were not provided.
+ * @NM_VPN_CONNECTION_STATE_REASON_LOGIN_FAILED: Authentication to the VPN
+ * server failed.
+ * @NM_VPN_CONNECTION_STATE_REASON_CONNECTION_REMOVED: The connection was
+ * deleted from settings.
+ *
+ * VPN connection state reasons
+ *
+ * (Corresponds to the NM_VPN_CONNECTION_STATE_REASON type in nm-vpn-connection.xml.)
+ */
+typedef enum NMVPNConnectionStateReason {
NM_VPN_CONNECTION_STATE_REASON_UNKNOWN = 0,
NM_VPN_CONNECTION_STATE_REASON_NONE,
NM_VPN_CONNECTION_STATE_REASON_USER_DISCONNECTED,
@@ -109,6 +168,17 @@ typedef enum NMVPNConnectionStateReason
NM_VPN_CONNECTION_STATE_REASON_CONNECTION_REMOVED
} NMVPNConnectionStateReason;
+/**
+ * NMVPNPluginFailure:
+ * @NM_VPN_PLUGIN_FAILURE_LOGIN_FAILED: Login failed.
+ * @NM_VPN_PLUGIN_FAILURE_CONNECT_FAILED: Connect failed.
+ * @NM_VPN_PLUGIN_FAILURE_BAD_IP_CONFIG: Invalid IP configuration returned from
+ * the VPN plugin.
+ *
+ * VPN plugin failure reasons
+ *
+ * (Corresponds to the NM_VPN_PLUGIN_FAILURE type in nm-vpn-plugin.xml.)
+ */
typedef enum {
NM_VPN_PLUGIN_FAILURE_LOGIN_FAILED,
NM_VPN_PLUGIN_FAILURE_CONNECT_FAILED,
@@ -136,6 +206,11 @@ typedef enum {
/* boolean: Has IP6 configuration? */
#define NM_VPN_PLUGIN_CONFIG_HAS_IP6 "has-ip6"
+/* boolean: If %TRUE the VPN plugin can persist/reconnect the connection over
+ * link changes and VPN server dropouts.
+ */
+#define NM_VPN_PLUGIN_CAN_PERSIST "can-persist"
+
/*** Ip4Config ***/
diff --git a/libnm-util/crypto.c b/libnm-util/crypto.c
index 0ac4fbacd..8a10af945 100644
--- a/libnm-util/crypto.c
+++ b/libnm-util/crypto.c
@@ -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.
+ * Copyright 2007 - 2011 Red Hat, Inc.
*/
#include "config.h"
@@ -28,7 +28,7 @@
#include <strings.h>
#include <unistd.h>
#include <stdlib.h>
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
#include "crypto.h"
@@ -360,8 +360,8 @@ convert_iv (const char *src,
conv[2] = '\0';
for (i = 0; i < num; i++) {
- conv[0] = src[(i * 2)];
- conv[1] = src[(i * 2) + 1];
+ conv[0] = src[(i * 2)];
+ conv[1] = src[(i * 2) + 1];
if (!g_ascii_isxdigit (conv[0]) || !g_ascii_isxdigit (conv[1])) {
g_set_error (error, NM_CRYPTO_ERROR,
NM_CRYPTO_ERR_RAW_IV_INVALID,
@@ -526,11 +526,11 @@ crypto_decrypt_private_key_data (const GByteArray *contents,
if (password) {
decrypted = decrypt_key (cipher,
- key_type,
- data,
- iv,
- password,
- error);
+ key_type,
+ data,
+ iv,
+ password,
+ error);
}
g_byte_array_free (data, TRUE);
}
@@ -569,18 +569,18 @@ extract_pem_cert_data (GByteArray *contents, GError **error)
if (!find_tag (PEM_CERT_BEGIN, contents, 0, &start)) {
g_set_error (error, NM_CRYPTO_ERROR,
- NM_CRYPTO_ERR_FILE_FORMAT_INVALID,
- _("PEM certificate had no start tag '%s'."),
- PEM_CERT_BEGIN);
+ NM_CRYPTO_ERR_FILE_FORMAT_INVALID,
+ _("PEM certificate had no start tag '%s'."),
+ PEM_CERT_BEGIN);
goto done;
}
start += strlen (PEM_CERT_BEGIN);
if (!find_tag (PEM_CERT_END, contents, start, &end)) {
g_set_error (error, NM_CRYPTO_ERROR,
- NM_CRYPTO_ERR_FILE_FORMAT_INVALID,
- _("PEM certificate had no end tag '%s'."),
- PEM_CERT_END);
+ NM_CRYPTO_ERR_FILE_FORMAT_INVALID,
+ _("PEM certificate had no end tag '%s'."),
+ PEM_CERT_END);
goto done;
}
@@ -596,8 +596,8 @@ extract_pem_cert_data (GByteArray *contents, GError **error)
g_assert (cert->len == length);
} else {
g_set_error (error, NM_CRYPTO_ERROR,
- NM_CRYPTO_ERR_DECODE_FAILED,
- _("Failed to decode certificate."));
+ NM_CRYPTO_ERR_DECODE_FAILED,
+ _("Failed to decode certificate."));
}
done:
@@ -747,4 +747,3 @@ crypto_verify_private_key (const char *filename,
}
return format;
}
-
diff --git a/libnm-util/crypto.h b/libnm-util/crypto.h
index 1cbf61c12..315d8fec8 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 - 2014 Red Hat, Inc.
+ * Copyright 2007 - 2014 Red Hat, Inc.
*/
#ifndef __CRYPTO_H__
@@ -70,8 +70,6 @@ GQuark _nm_crypto_error_quark (void);
gboolean crypto_init (GError **error);
-void crypto_deinit (void);
-
GByteArray *crypto_decrypt_private_key_data (const GByteArray *contents,
const char *password,
NMCryptoKeyType *out_key_type,
diff --git a/libnm-util/crypto_gnutls.c b/libnm-util/crypto_gnutls.c
index e829c23c1..3bec24ad6 100644
--- a/libnm-util/crypto_gnutls.c
+++ b/libnm-util/crypto_gnutls.c
@@ -18,12 +18,13 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2009 Red Hat, Inc.
+ * Copyright 2007 - 2009 Red Hat, Inc.
*/
#include "config.h"
+
#include <glib.h>
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
#include <gcrypt.h>
#include <gnutls/gnutls.h>
@@ -55,11 +56,6 @@ crypto_init (GError **error)
return TRUE;
}
-void
-crypto_deinit (void)
-{
-}
-
gboolean
crypto_md5_hash (const char *salt,
const gsize salt_len,
@@ -105,7 +101,7 @@ crypto_md5_hash (const char *salt,
gcry_md_final (ctx);
memcpy (digest, gcry_md_read (ctx, 0), digest_len);
gcry_md_reset (ctx);
-
+
while (nkey && (i < digest_len)) {
*(p++) = digest[i++];
nkey--;
@@ -347,7 +343,7 @@ crypto_verify_cert (const unsigned char *data,
GError **error)
{
gnutls_x509_crt_t der;
- gnutls_datum dt;
+ gnutls_datum_t dt;
int err;
err = gnutls_x509_crt_init (&der);
@@ -387,7 +383,7 @@ crypto_verify_pkcs12 (const GByteArray *data,
GError **error)
{
gnutls_pkcs12_t p12;
- gnutls_datum dt;
+ gnutls_datum_t dt;
gboolean success = FALSE;
int err;
@@ -441,7 +437,7 @@ crypto_verify_pkcs8 (const GByteArray *data,
GError **error)
{
gnutls_x509_privkey_t p8;
- gnutls_datum dt;
+ gnutls_datum_t dt;
int err;
g_return_val_if_fail (data != NULL, FALSE);
@@ -475,9 +471,9 @@ crypto_verify_pkcs8 (const GByteArray *data,
*/
} else {
g_set_error (error, NM_CRYPTO_ERROR,
- NM_CRYPTO_ERR_FILE_FORMAT_INVALID,
- _("Couldn't decode PKCS#8 file: %s"),
- gnutls_strerror (err));
+ NM_CRYPTO_ERR_FILE_FORMAT_INVALID,
+ _("Couldn't decode PKCS#8 file: %s"),
+ gnutls_strerror (err));
return FALSE;
}
}
@@ -491,4 +487,3 @@ crypto_randomize (void *buffer, gsize buffer_len, GError **error)
gcry_randomize (buffer, buffer_len, GCRY_STRONG_RANDOM);
return TRUE;
}
-
diff --git a/libnm-util/crypto_nss.c b/libnm-util/crypto_nss.c
index af3de6664..edd19b54f 100644
--- a/libnm-util/crypto_nss.c
+++ b/libnm-util/crypto_nss.c
@@ -18,13 +18,13 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2009 Red Hat, Inc.
+ * Copyright 2007 - 2009 Red Hat, Inc.
*/
#include "config.h"
#include <glib.h>
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
#include <prinit.h>
#include <nss.h>
@@ -71,11 +71,6 @@ crypto_init (GError **error)
return TRUE;
}
-void
-crypto_deinit (void)
-{
-}
-
gboolean
crypto_md5_hash (const char *salt,
const gsize salt_len,
@@ -560,4 +555,3 @@ crypto_randomize (void *buffer, gsize buffer_len, GError **error)
}
return TRUE;
}
-
diff --git a/libnm-util/libnm-util.ver b/libnm-util/libnm-util.ver
index e14f08d90..9d78e5024 100644
--- a/libnm-util/libnm-util.ver
+++ b/libnm-util/libnm-util.ver
@@ -13,6 +13,7 @@ global:
nm_connection_for_each_setting_value;
nm_connection_get_connection_type;
nm_connection_get_id;
+ nm_connection_get_interface_name;
nm_connection_get_path;
nm_connection_get_setting;
nm_connection_get_setting_802_1x;
@@ -52,6 +53,7 @@ global:
nm_connection_need_secrets;
nm_connection_new;
nm_connection_new_from_hash;
+ nm_connection_normalize;
nm_connection_remove_setting;
nm_connection_replace_settings;
nm_connection_replace_settings_from_connection;
@@ -365,6 +367,7 @@ global:
nm_setting_ip4_config_get_num_dns_searches;
nm_setting_ip4_config_get_num_routes;
nm_setting_ip4_config_get_route;
+ nm_setting_ip4_config_get_route_metric;
nm_setting_ip4_config_get_type;
nm_setting_ip4_config_new;
nm_setting_ip4_config_remove_address;
@@ -400,6 +403,7 @@ global:
nm_setting_ip6_config_get_num_dns_searches;
nm_setting_ip6_config_get_num_routes;
nm_setting_ip6_config_get_route;
+ nm_setting_ip6_config_get_route_metric;
nm_setting_ip6_config_get_type;
nm_setting_ip6_config_new;
nm_setting_ip6_config_privacy_get_type;
@@ -608,6 +612,7 @@ global:
nm_utils_deinit;
nm_utils_escape_ssid;
nm_utils_file_is_pkcs12;
+ nm_utils_file_search_in_paths;
nm_utils_get_private;
nm_utils_gvalue_hash_dup;
nm_utils_hex2byte;
diff --git a/libnm-util/nm-connection.c b/libnm-util/nm-connection.c
index b0b683bd5..a1350f544 100644
--- a/libnm-util/nm-connection.c
+++ b/libnm-util/nm-connection.c
@@ -1,9 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Dan Williams <dcbw@redhat.com>
- * Tambet Ingo <tambet@gmail.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
@@ -19,12 +16,14 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2013 Red Hat, Inc.
- * (C) Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2013 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
*/
+#include "config.h"
+
#include <glib-object.h>
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
#include <dbus/dbus-glib.h>
#include <string.h>
#include "nm-connection.h"
@@ -122,6 +121,10 @@ enum {
static guint signals[LAST_SIGNAL] = { 0 };
+
+static NMSettingVerifyResult _nm_connection_verify (NMConnection *connection, GError **error);
+
+
/*************************************************************/
/**
@@ -184,12 +187,23 @@ setting_changed_cb (NMSetting *setting,
g_signal_emit (self, signals[CHANGED], 0);
}
+static gboolean
+_setting_release (gpointer key, gpointer value, gpointer user_data)
+{
+ g_signal_handlers_disconnect_by_func (user_data, setting_changed_cb, value);
+ return TRUE;
+}
+
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);
+ NMConnectionPrivate *priv = NM_CONNECTION_GET_PRIVATE (connection);
+ const char *name = G_OBJECT_TYPE_NAME (setting);
+ NMSetting *s_old;
+
+ if ((s_old = g_hash_table_lookup (priv->settings, (gpointer) name)))
+ g_signal_handlers_disconnect_by_func (s_old, setting_changed_cb, connection);
+ g_hash_table_insert (priv->settings, (gpointer) name, setting);
/* Listen for property changes so we can emit the 'changed' signal */
g_signal_connect (setting, "notify", (GCallback) setting_changed_cb, connection);
}
@@ -346,7 +360,7 @@ hash_to_connection (NMConnection *connection, GHashTable *new, GError **error)
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_foreach_remove (priv->settings, _setting_release, connection);
g_hash_table_iter_init (&iter, new);
while (g_hash_table_iter_next (&iter, (gpointer) &setting_name, (gpointer) &setting_hash)) {
@@ -434,7 +448,7 @@ nm_connection_replace_settings_from_connection (NMConnection *connection,
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_foreach_remove (priv->settings, _setting_release, connection);
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);
@@ -476,7 +490,7 @@ nm_connection_compare (NMConnection *a,
/* 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))
+ g_hash_table_size (NM_CONNECTION_GET_PRIVATE (b)->settings))
return FALSE;
/* A / B: ensure all settings in A match corresponding ones in B */
@@ -575,6 +589,113 @@ nm_connection_diff (NMConnection *a,
return *out_settings ? FALSE : TRUE;
}
+static gboolean
+_normalize_virtual_iface_name (NMConnection *self)
+{
+ NMConnectionPrivate *priv = NM_CONNECTION_GET_PRIVATE (self);
+ GHashTableIter h_iter;
+ NMSetting *setting;
+ NMSettingConnection *s_con;
+ const char *interface_name;
+ char *virtual_iface_name = NULL;
+ gboolean was_modified = FALSE;
+ const char *prop_name = NULL;
+
+ /* search for settings that might need normalization of the interface name. */
+ g_hash_table_iter_init (&h_iter, priv->settings);
+ while ( !prop_name
+ && g_hash_table_iter_next (&h_iter, NULL, (void **) &setting)) {
+ if (NM_IS_SETTING_BOND (setting))
+ prop_name = NM_SETTING_BOND_INTERFACE_NAME;
+ else if (NM_IS_SETTING_BRIDGE (setting))
+ prop_name = NM_SETTING_BRIDGE_INTERFACE_NAME;
+ else if (NM_IS_SETTING_TEAM (setting))
+ prop_name = NM_SETTING_TEAM_INTERFACE_NAME;
+ else if (NM_IS_SETTING_VLAN (setting))
+ prop_name = NM_SETTING_VLAN_INTERFACE_NAME;
+ }
+ if (!prop_name)
+ return FALSE;
+
+ s_con = nm_connection_get_setting_connection (self);
+ g_return_val_if_fail (s_con, FALSE);
+
+ interface_name = nm_setting_connection_get_interface_name (s_con);
+
+ /* read the potential virtual_iface_name from the setting. */
+ g_object_get (setting, prop_name, &virtual_iface_name, NULL);
+
+ if (g_strcmp0 (interface_name, virtual_iface_name) != 0) {
+ if (interface_name) {
+ /* interface_name is set and overwrites the virtual_iface_name. */
+ g_object_set (setting, prop_name, interface_name, NULL);
+ } else {
+ /* interface in NMSettingConnection must be set. */
+ g_object_set (s_con, NM_SETTING_CONNECTION_INTERFACE_NAME, virtual_iface_name, NULL);
+ }
+ was_modified = TRUE;
+ }
+
+ g_free (virtual_iface_name);
+
+ return was_modified;
+}
+
+static gboolean
+_normalize_ip_config (NMConnection *self, GHashTable *parameters)
+{
+ NMSettingConnection *s_con = nm_connection_get_setting_connection (self);
+ const char *default_ip4_method = NM_SETTING_IP4_CONFIG_METHOD_AUTO;
+ const char *default_ip6_method = NULL;
+ NMSettingIP4Config *s_ip4;
+ NMSettingIP6Config *s_ip6;
+ NMSetting *setting;
+
+ if (parameters)
+ default_ip6_method = g_hash_table_lookup (parameters, NM_CONNECTION_NORMALIZE_PARAM_IP6_CONFIG_METHOD);
+ if (!default_ip6_method)
+ default_ip6_method = NM_SETTING_IP6_CONFIG_METHOD_AUTO;
+
+ s_ip4 = nm_connection_get_setting_ip4_config (self);
+ s_ip6 = nm_connection_get_setting_ip6_config (self);
+
+ if (nm_setting_connection_get_master (s_con)) {
+ /* Slave connections don't have IP configuration. */
+
+ if (s_ip4)
+ nm_connection_remove_setting (self, NM_TYPE_SETTING_IP4_CONFIG);
+
+ if (s_ip6)
+ nm_connection_remove_setting (self, NM_TYPE_SETTING_IP6_CONFIG);
+
+ return s_ip4 || s_ip6;
+ } 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 ();
+
+ g_object_set (setting,
+ NM_SETTING_IP4_CONFIG_METHOD, default_ip4_method,
+ NULL);
+ nm_connection_add_setting (self, setting);
+ }
+ if (!s_ip6) {
+ setting = nm_setting_ip6_config_new ();
+
+ g_object_set (setting,
+ NM_SETTING_IP6_CONFIG_METHOD, default_ip6_method,
+ NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
+ NULL);
+ nm_connection_add_setting (self, setting);
+ }
+ return !s_ip4 || !s_ip6;
+ }
+}
+
/**
* nm_connection_verify:
* @connection: the #NMConnection to verify
@@ -584,7 +705,7 @@ nm_connection_diff (NMConnection *a,
* have allowed values, and some values are dependent on other values. For
* 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
+ * #NMSettingWirelessSecurity object, which must also be present in the
* connection for the connection to be valid. As another example, the
* #NMSettingWired object's 'mac-address' property must be a validly formatted
* MAC address. The returned #GError contains information about which
@@ -595,24 +716,42 @@ nm_connection_diff (NMConnection *a,
gboolean
nm_connection_verify (NMConnection *connection, GError **error)
{
+ NMSettingVerifyResult result;
+
+ result = _nm_connection_verify (connection, error);
+
+ /* we treat normalizable connections as valid. */
+ if (result == NM_SETTING_VERIFY_NORMALIZABLE)
+ g_clear_error (error);
+
+ return result == NM_SETTING_VERIFY_SUCCESS || result == NM_SETTING_VERIFY_NORMALIZABLE;
+}
+
+static NMSettingVerifyResult
+_nm_connection_verify (NMConnection *connection, GError **error)
+{
NMConnectionPrivate *priv;
NMSettingConnection *s_con;
+ NMSettingIP4Config *s_ip4;
+ NMSettingIP6Config *s_ip6;
GHashTableIter iter;
gpointer value;
- GSList *all_settings = NULL;
- gboolean success = TRUE;
+ GSList *all_settings = NULL, *setting_i;
+ NMSettingVerifyResult success = NM_SETTING_VERIFY_ERROR;
NMSetting *base;
const char *ctype;
+ GError *normalizable_error = NULL;
+ NMSettingVerifyResult normalizable_error_type = NM_SETTING_VERIFY_SUCCESS;
if (error)
- g_return_val_if_fail (*error == NULL, FALSE);
+ g_return_val_if_fail (*error == NULL, NM_SETTING_VERIFY_ERROR);
if (!NM_IS_CONNECTION (connection)) {
g_set_error_literal (error,
NM_SETTING_CONNECTION_ERROR,
NM_SETTING_CONNECTION_ERROR_UNKNOWN,
"invalid connection; failed verification");
- g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE);
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NM_SETTING_VERIFY_ERROR);
}
priv = NM_CONNECTION_GET_PRIVATE (connection);
@@ -624,23 +763,62 @@ nm_connection_verify (NMConnection *connection, GError **error)
NM_CONNECTION_ERROR,
NM_CONNECTION_ERROR_CONNECTION_SETTING_NOT_FOUND,
"connection setting not found");
- return FALSE;
+ goto EXIT;
}
/* Build up the list of settings */
g_hash_table_iter_init (&iter, priv->settings);
- while (g_hash_table_iter_next (&iter, NULL, &value))
- all_settings = g_slist_append (all_settings, value);
+ while (g_hash_table_iter_next (&iter, NULL, &value)) {
+ /* Order NMSettingConnection so that it will be verified first.
+ * The reason is, that NMSettingConnection:verify() modifies the connection
+ * by setting NMSettingConnection:interface_name. So we want to call that
+ * verify() first, because the order can affect the outcome.
+ * Another reason is, that errors in this setting might be more fundamental
+ * and should be checked and reported with higher priority.
+ * Another reason is, that some settings look especially at the
+ * NMSettingConnection, so they find it first in the all_settings list. */
+ if (value == s_con)
+ all_settings = g_slist_append (all_settings, value);
+ else
+ all_settings = g_slist_prepend (all_settings, value);
+ }
+ all_settings = g_slist_reverse (all_settings);
/* Now, run the verify function of each setting */
- g_hash_table_iter_init (&iter, priv->settings);
- while (g_hash_table_iter_next (&iter, NULL, &value) && success)
- success = nm_setting_verify (NM_SETTING (value), all_settings, error);
+ for (setting_i = all_settings; setting_i; setting_i = setting_i->next) {
+ GError *verify_error = NULL;
+ NMSettingVerifyResult verify_result;
+
+ /* verify all settings. We stop if we find the first non-normalizable
+ * @NM_SETTING_VERIFY_ERROR. If we find normalizable errors we continue
+ * but remember the error to return it to the user.
+ * @NM_SETTING_VERIFY_NORMALIZABLE_ERROR has a higher priority then
+ * @NM_SETTING_VERIFY_NORMALIZABLE, so, if we encounter such an error type,
+ * we remember it instead (to return it as output).
+ **/
+ verify_result = _nm_setting_verify (NM_SETTING (setting_i->data), all_settings, &verify_error);
+ if (verify_result == NM_SETTING_VERIFY_NORMALIZABLE ||
+ verify_result == NM_SETTING_VERIFY_NORMALIZABLE_ERROR) {
+ if ( verify_result == NM_SETTING_VERIFY_NORMALIZABLE_ERROR
+ && normalizable_error_type == NM_SETTING_VERIFY_NORMALIZABLE) {
+ /* NORMALIZABLE_ERROR has higher priority. */
+ g_clear_error (&normalizable_error);
+ }
+ if (!normalizable_error) {
+ g_propagate_error (&normalizable_error, verify_error);
+ verify_error = NULL;
+ normalizable_error_type = verify_result;
+ }
+ } else if (verify_result != NM_SETTING_VERIFY_SUCCESS) {
+ g_propagate_error (error, verify_error);
+ g_slist_free (all_settings);
+ g_return_val_if_fail (verify_result == NM_SETTING_VERIFY_ERROR, success);
+ goto EXIT;
+ }
+ g_clear_error (&verify_error);
+ }
g_slist_free (all_settings);
- if (success == FALSE)
- return FALSE;
-
/* Now make sure the given 'type' setting can actually be the base setting
* of the connection. Can't have type=ppp for example.
*/
@@ -650,7 +828,7 @@ nm_connection_verify (NMConnection *connection, GError **error)
NM_CONNECTION_ERROR,
NM_CONNECTION_ERROR_CONNECTION_TYPE_INVALID,
"connection type missing");
- return FALSE;
+ goto EXIT;
}
base = nm_connection_get_setting_by_name (connection, ctype);
@@ -659,19 +837,125 @@ nm_connection_verify (NMConnection *connection, GError **error)
NM_CONNECTION_ERROR,
NM_CONNECTION_ERROR_CONNECTION_TYPE_INVALID,
"base setting GType not found");
- return FALSE;
+ goto EXIT;
}
if (!_nm_setting_is_base_type (base)) {
g_set_error (error,
- NM_CONNECTION_ERROR,
- NM_CONNECTION_ERROR_CONNECTION_TYPE_INVALID,
- "connection type '%s' is not a base type",
- ctype);
- return FALSE;
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_CONNECTION_TYPE_INVALID,
+ "connection type '%s' is not a base type",
+ ctype);
+ goto EXIT;
}
- return TRUE;
+ 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)) {
+ if ((normalizable_error_type == NM_SETTING_VERIFY_SUCCESS ||
+ (normalizable_error_type == NM_SETTING_VERIFY_NORMALIZABLE)) && (s_ip4 || s_ip6)) {
+ g_clear_error (&normalizable_error);
+ g_set_error (&normalizable_error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_SETTING,
+ "slave connection cannot have an IP%c setting",
+ s_ip4 ? '4' : '6');
+ /* having a slave with IP config *was* and is a verify() error. */
+ normalizable_error_type = NM_SETTING_VERIFY_NORMALIZABLE_ERROR;
+ }
+ } else {
+ if (normalizable_error_type == NM_SETTING_VERIFY_SUCCESS && (!s_ip4 || !s_ip6)) {
+ g_set_error (&normalizable_error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_SETTING_NOT_FOUND,
+ "connection needs an IP%c setting",
+ !s_ip4 ? '4' : '6');
+ /* having a master without IP config was not a verify() error, accept
+ * it for backward compatibility. */
+ normalizable_error_type = NM_SETTING_VERIFY_NORMALIZABLE;
+ }
+ }
+
+ if (normalizable_error_type != NM_SETTING_VERIFY_SUCCESS) {
+ g_propagate_error (error, normalizable_error);
+ normalizable_error = NULL;
+ success = normalizable_error_type;
+ } else
+ success = NM_SETTING_VERIFY_SUCCESS;
+
+EXIT:
+ g_clear_error (&normalizable_error);
+ return success;
+}
+
+/**
+ * nm_connection_normalize:
+ * @connection: the #NMConnection to normalize
+ * @parameters: (allow-none) (element-type utf8 gpointer): a #GHashTable with
+ * normalization parameters to allow customization of the normalization by providing
+ * specific arguments. Unknown arguments will be ignored and the default will be
+ * used. The keys must be strings, hashed by g_str_hash() and g_str_equal() functions.
+ * The values are opaque and depend on the parameter name.
+ * @modified: (out) (allow-none): outputs whether any settings were modified.
+ * @error: location to store error, or %NULL. Contains the reason,
+ * why the connection is invalid, if the function returns an error.
+ *
+ * Does some basic normalization and fixup of well known inconsistencies
+ * and deprecated fields. If the connection was modified in any way,
+ * the output parameter @modified is set %TRUE.
+ *
+ * Finally the connection will be verified and %TRUE returns if the connection
+ * is valid. As this function only performs some specific normalization steps
+ * it cannot repair all connections. If the connection has errors that
+ * cannot be normalized, the connection will not be modified.
+ *
+ * Returns: %TRUE if the connection is valid, %FALSE if it is not
+ *
+ * Since: 1.0
+ **/
+gboolean
+nm_connection_normalize (NMConnection *connection,
+ GHashTable *parameters,
+ gboolean *modified,
+ GError **error)
+{
+ NMSettingVerifyResult success;
+ gboolean was_modified = FALSE;
+ GError *normalizable_error = NULL;
+
+ success = _nm_connection_verify (connection, &normalizable_error);
+
+ if (success == NM_SETTING_VERIFY_ERROR ||
+ success == NM_SETTING_VERIFY_SUCCESS) {
+ if (normalizable_error)
+ g_propagate_error (error, normalizable_error);
+ goto EXIT;
+ }
+ g_assert (success == NM_SETTING_VERIFY_NORMALIZABLE || success == NM_SETTING_VERIFY_NORMALIZABLE_ERROR);
+ g_clear_error (&normalizable_error);
+
+ /* Try to perform all kind of normalizations on the settings to fix it.
+ * We only do this, after verifying that the connection contains no un-normalizable
+ * errors, because in that case we rather fail without touching the settings. */
+
+ was_modified |= _normalize_virtual_iface_name (connection);
+ was_modified |= _normalize_ip_config (connection, parameters);
+
+ /* Verify anew. */
+ success = _nm_connection_verify (connection, error);
+
+ /* we would expect, that after normalization, the connection can be verified. */
+ g_return_val_if_fail (success == NM_SETTING_VERIFY_SUCCESS, success);
+
+ /* we would expect, that the connection was modified during normalization. */
+ g_return_val_if_fail (was_modified, success);
+
+EXIT:
+ if (modified)
+ *modified = was_modified;
+
+ return success == NM_SETTING_VERIFY_SUCCESS;
}
/**
@@ -751,8 +1035,8 @@ nm_connection_update_secrets (NMConnection *connection,
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);
+ 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)
@@ -983,7 +1267,7 @@ nm_connection_to_hash (NMConnection *connection, NMSettingHashFlags flags)
/**
* nm_connection_is_type:
* @connection: the #NMConnection
- * @type: a setting name to check the connection's type against (like
+ * @type: a setting name to check the connection's type against (like
* %NM_SETTING_WIRELESS_SETTING_NAME or %NM_SETTING_WIRED_SETTING_NAME)
*
* A convenience function to check if the given @connection is a particular
@@ -1106,6 +1390,33 @@ nm_connection_get_path (NMConnection *connection)
}
/**
+ * nm_connection_get_interface_name:
+ * @connection: The #NMConnection
+ *
+ * Returns the interface name as stored in NMSettingConnection:interface_name.
+ * If the connection contains no NMSettingConnection, it will return %NULL.
+ *
+ * For hardware devices and software devices created outside of NetworkManager,
+ * this name is used to match the device. for software devices created by
+ * NetworkManager, this is the name of the created interface.
+ *
+ * Returns: Name of the kernel interface or %NULL
+ *
+ * Since: 1.0
+ */
+const char *
+nm_connection_get_interface_name (NMConnection *connection)
+{
+ NMSettingConnection *s_con;
+
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
+
+ s_con = nm_connection_get_setting_connection (connection);
+
+ return s_con ? nm_setting_connection_get_interface_name (s_con) : NULL;
+}
+
+/**
* nm_connection_get_virtual_iface_name:
* @connection: The #NMConnection
*
@@ -1196,7 +1507,7 @@ nm_connection_duplicate (NMConnection *connection)
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));
+ _nm_connection_add_setting (dup, nm_setting_duplicate (setting));
return dup;
}
@@ -1750,14 +2061,8 @@ 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_hash_table_foreach_remove (priv->settings, _setting_release, self);
G_OBJECT_CLASS (nm_connection_parent_class)->dispose (object);
}
@@ -1768,6 +2073,7 @@ finalize (GObject *object)
NMConnection *connection = NM_CONNECTION (object);
NMConnectionPrivate *priv = NM_CONNECTION_GET_PRIVATE (connection);
+ g_assert (g_hash_table_size (priv->settings) == 0);
g_hash_table_destroy (priv->settings);
g_free (priv->path);
@@ -1776,7 +2082,7 @@ finalize (GObject *object)
static void
set_property (GObject *object, guint prop_id,
- const GValue *value, GParamSpec *pspec)
+ const GValue *value, GParamSpec *pspec)
{
NMConnection *connection = NM_CONNECTION (object);
@@ -1792,7 +2098,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)
{
NMConnection *connection = NM_CONNECTION (object);
@@ -1829,40 +2135,40 @@ nm_connection_class_init (NMConnectionClass *klass)
**/
g_object_class_install_property
(object_class, PROP_PATH,
- g_param_spec_string (NM_CONNECTION_PATH,
- "Path",
- "Path",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_param_spec_string (NM_CONNECTION_PATH, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/* Signals */
/**
- * NMConnection::secrets-updated:
- * @connection: the object on which the signal is emitted
- * @setting_name: the setting name of the #NMSetting for which secrets were
- * updated
- *
- * The ::secrets-updated signal is emitted when the secrets of a setting
- * have been changed.
- */
+ * NMConnection::secrets-updated:
+ * @connection: the object on which the signal is emitted
+ * @setting_name: the setting name of the #NMSetting for which secrets were
+ * updated
+ *
+ * The ::secrets-updated signal is emitted when the secrets of a setting
+ * have been changed.
+ */
signals[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),
- NULL, NULL,
- g_cclosure_marshal_VOID__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMConnectionClass, secrets_updated),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__STRING,
+ G_TYPE_NONE, 1,
+ G_TYPE_STRING);
/**
- * NMConnection::secrets-cleared:
- * @connection: the object on which the signal is emitted
- *
- * The ::secrets-cleared signal is emitted when the secrets of a connection
- * are cleared.
- */
+ * NMConnection::secrets-cleared:
+ * @connection: the object on which the signal is emitted
+ *
+ * The ::secrets-cleared signal is emitted when the secrets of a connection
+ * are cleared.
+ */
signals[SECRETS_CLEARED] =
g_signal_new (NM_CONNECTION_SECRETS_CLEARED,
G_OBJECT_CLASS_TYPE (object_class),
@@ -1872,15 +2178,15 @@ nm_connection_class_init (NMConnectionClass *klass)
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
- */
+ * 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),
@@ -1889,4 +2195,3 @@ nm_connection_class_init (NMConnectionClass *klass)
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
}
-
diff --git a/libnm-util/nm-connection.h b/libnm-util/nm-connection.h
index 4524c8f62..2cee2be56 100644
--- a/libnm-util/nm-connection.h
+++ b/libnm-util/nm-connection.h
@@ -1,9 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Dan Williams <dcbw@redhat.com>
- * Tambet Ingo <tambet@gmail.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
@@ -19,8 +16,8 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2013 Red Hat, Inc.
- * (C) Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2013 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
*/
#ifndef NM_CONNECTION_H
@@ -86,6 +83,8 @@ G_BEGIN_DECLS
* #NMSettingWireless.
* @NM_CONNECTION_ERROR_SETTING_NOT_FOUND: the #NMConnection object
* did not contain the specified #NMSetting object
+ *@NM_CONNECTION_ERROR_INVALID_SETTING: the #NMConnection object contains
+ * a conflicting setting object
*
* Describes errors that may result from operations involving a #NMConnection.
*
@@ -95,9 +94,17 @@ typedef enum
NM_CONNECTION_ERROR_UNKNOWN = 0, /*< nick=UnknownError >*/
NM_CONNECTION_ERROR_CONNECTION_SETTING_NOT_FOUND, /*< nick=ConnectionSettingNotFound >*/
NM_CONNECTION_ERROR_CONNECTION_TYPE_INVALID, /*< nick=ConnectionTypeInvalid >*/
- NM_CONNECTION_ERROR_SETTING_NOT_FOUND /*< nick=SettingNotFound >*/
+ NM_CONNECTION_ERROR_SETTING_NOT_FOUND, /*< nick=SettingNotFound >*/
+ NM_CONNECTION_ERROR_INVALID_SETTING, /*< nick=InvalidSetting >*/
} NMConnectionError;
+/*
+ * NM_CONNECTION_NORMALIZE_PARAM_IP6_CONFIG_METHOD: overwrite the ip6 method
+ * when normalizing ip6 configuration. If omited, this defaults to
+ * @NM_SETTING_IP6_CONFIG_METHOD_AUTO.
+ */
+#define NM_CONNECTION_NORMALIZE_PARAM_IP6_CONFIG_METHOD "ip6-config-method"
+
#define NM_CONNECTION_ERROR nm_connection_error_quark ()
GQuark nm_connection_error_quark (void);
@@ -159,6 +166,11 @@ gboolean nm_connection_diff (NMConnection *a,
GHashTable **out_settings);
gboolean nm_connection_verify (NMConnection *connection, GError **error);
+NM_AVAILABLE_IN_1_0
+gboolean nm_connection_normalize (NMConnection *connection,
+ GHashTable *parameters,
+ gboolean *modified,
+ GError **error);
const char * nm_connection_need_secrets (NMConnection *connection,
GPtrArray **hints);
@@ -181,6 +193,9 @@ const char * nm_connection_get_path (NMConnection *connection);
const char * nm_connection_get_virtual_iface_name (NMConnection *connection);
+NM_AVAILABLE_IN_1_0
+const char * nm_connection_get_interface_name (NMConnection *connection);
+
gboolean nm_connection_is_type (NMConnection *connection, const char *type);
void nm_connection_for_each_setting_value (NMConnection *connection,
diff --git a/libnm-util/nm-param-spec-specialized.c b/libnm-util/nm-param-spec-specialized.c
index 27e498b5b..acb8aec33 100644
--- a/libnm-util/nm-param-spec-specialized.c
+++ b/libnm-util/nm-param-spec-specialized.c
@@ -1,9 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Dan Williams <dcbw@redhat.com>
- * Tambet Ingo <tambet@gmail.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
@@ -19,10 +16,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 - 2008 Novell, Inc.
+ * Copyright 2007 - 2011 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
*/
+#include "config.h"
+
#include "nm-param-spec-specialized.h"
#include "nm-glib-compat.h"
@@ -246,7 +245,7 @@ static void
iterate_collection (const GValue *value, gpointer user_data)
{
GSList **list = (GSList **) user_data;
-
+
*list = g_slist_prepend (*list, _gvalue_dup (value));
}
@@ -286,8 +285,8 @@ _gvalues_compare_collection (const GValue *value1, const GValue *value2)
GSList *iter2;
for (iter1 = list1, iter2 = list2, ret = 0;
- ret == 0 && iter1 && iter2;
- iter1 = iter1->next, iter2 = iter2->next)
+ ret == 0 && iter1 && iter2;
+ iter1 = iter1->next, iter2 = iter2->next)
ret = _gvalues_compare ((GValue *) iter1->data, (GValue *) iter2->data);
}
@@ -300,8 +299,8 @@ _gvalues_compare_collection (const GValue *value1, const GValue *value2)
static void
iterate_map (const GValue *key_val,
- const GValue *value_val,
- gpointer user_data)
+ const GValue *value_val,
+ gpointer user_data)
{
GHashTable **hash = (GHashTable **) user_data;
@@ -340,7 +339,7 @@ _gvalues_compare_map (const GValue *value1, const GValue *value2)
if (dbus_g_type_get_map_key_specialization (G_VALUE_TYPE (value1)) != G_TYPE_STRING) {
g_warning ("Can not compare maps with '%s' for keys",
- g_type_name (dbus_g_type_get_map_key_specialization (G_VALUE_TYPE (value1))));
+ g_type_name (dbus_g_type_get_map_key_specialization (G_VALUE_TYPE (value1))));
return 0;
}
@@ -528,7 +527,7 @@ _gvalues_compare (const GValue *value1, const GValue *value2)
if (type_is_fixed_size (type1, NULL))
ret = _gvalues_compare_fixed (value1, value2);
- else if (type1 == G_TYPE_STRING)
+ else if (type1 == G_TYPE_STRING)
ret = _gvalues_compare_string (value1, value2);
else if (G_VALUE_HOLDS_BOXED (value1)) {
gpointer p1 = g_value_get_boxed (value1);
@@ -592,8 +591,8 @@ param_specialized_validate (GParamSpec *pspec, GValue *value)
static gint
param_specialized_values_cmp (GParamSpec *pspec,
- const GValue *value1,
- const GValue *value2)
+ const GValue *value1,
+ const GValue *value2)
{
return _gvalues_compare (value1, value2);
}
@@ -622,17 +621,17 @@ _nm_param_spec_specialized_get_type (void)
GParamSpec *
_nm_param_spec_specialized (const char *name,
- const char *nick,
- const char *blurb,
- GType specialized_type,
- GParamFlags flags)
+ const char *nick,
+ const char *blurb,
+ GType specialized_type,
+ GParamFlags flags)
{
NMParamSpecSpecialized *pspec;
g_return_val_if_fail (g_type_is_a (specialized_type, G_TYPE_BOXED), NULL);
pspec = g_param_spec_internal (NM_TYPE_PARAM_SPEC_SPECIALIZED,
- name, nick, blurb, flags);
+ name, nick, blurb, flags);
G_PARAM_SPEC (pspec)->value_type = specialized_type;
diff --git a/libnm-util/nm-param-spec-specialized.h b/libnm-util/nm-param-spec-specialized.h
index a6173674d..7803e919a 100644
--- a/libnm-util/nm-param-spec-specialized.h
+++ b/libnm-util/nm-param-spec-specialized.h
@@ -1,9 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Dan Williams <dcbw@redhat.com>
- * Tambet Ingo <tambet@gmail.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
@@ -19,8 +16,8 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2008 Red Hat, Inc.
- * (C) Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2008 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
*/
#ifndef NM_PARAM_SPEC_SPECIALIZED_H
@@ -38,9 +35,9 @@ typedef struct _NMParamSpecSpecialized NMParamSpecSpecialized;
GType _nm_param_spec_specialized_get_type (void);
GParamSpec *_nm_param_spec_specialized (const char *name,
- const char *nick,
- const char *blurb,
- GType specialized_type,
- GParamFlags flags);
+ const char *nick,
+ const char *blurb,
+ GType specialized_type,
+ GParamFlags flags);
#endif /* NM_PARAM_SPEC_SPECIALIZED_H */
diff --git a/libnm-util/nm-setting-8021x.c b/libnm-util/nm-setting-8021x.c
index d85b87b89..6d5268a17 100644
--- a/libnm-util/nm-setting-8021x.c
+++ b/libnm-util/nm-setting-8021x.c
@@ -1,9 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Dan Williams <dcbw@redhat.com>
- * Tambet Ingo <tambet@gmail.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
@@ -19,13 +16,15 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2013 Red Hat, Inc.
- * (C) Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2013 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include <dbus/dbus-glib.h>
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
#include "nm-setting-8021x.h"
#include "nm-param-spec-specialized.h"
@@ -92,6 +91,11 @@ NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_802_1X)
#define NM_SETTING_802_1X_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_802_1X, NMSetting8021xPrivate))
+G_STATIC_ASSERT ( (NM_SETTING_802_1X_CK_FORMAT_UNKNOWN == (NMSetting8021xCKFormat) NM_CRYPTO_FILE_FORMAT_UNKNOWN) );
+G_STATIC_ASSERT ( (NM_SETTING_802_1X_CK_FORMAT_X509 == (NMSetting8021xCKFormat) NM_CRYPTO_FILE_FORMAT_X509) );
+G_STATIC_ASSERT ( (NM_SETTING_802_1X_CK_FORMAT_RAW_KEY == (NMSetting8021xCKFormat) NM_CRYPTO_FILE_FORMAT_RAW_KEY) );
+G_STATIC_ASSERT ( (NM_SETTING_802_1X_CK_FORMAT_PKCS12 == (NMSetting8021xCKFormat) NM_CRYPTO_FILE_FORMAT_PKCS12) );
+
typedef struct {
GSList *eap; /* GSList of strings */
char *identity;
@@ -408,7 +412,7 @@ nm_setting_802_1x_get_ca_path (NMSetting8021x *setting)
* properties are ignored if the #NMSetting8021x:system-ca-certs property is
* %TRUE, 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.
+ * of these properties.
*
* Returns: %TRUE if a system CA certificate path should be used, %FALSE if not
**/
@@ -836,7 +840,7 @@ nm_setting_802_1x_get_client_cert_path (NMSetting8021x *setting)
* @setting: the #NMSetting8021x
* @cert_path: when @scheme is set to either %NM_SETTING_802_1X_CK_SCHEME_PATH
* or %NM_SETTING_802_1X_CK_SCHEME_BLOB, pass the path of the client
- * certificate file (PEM, DER, or PKCS#12 format). The path must be UTF-8
+ * certificate file (PEM, DER, or PKCS#<!-- -->12 format). The path must be UTF-8
* encoded; use g_filename_to_utf8() to convert if needed. Passing %NULL with
* any @scheme clears the client certificate.
* @scheme: desired storage scheme for the certificate
@@ -1421,7 +1425,7 @@ nm_setting_802_1x_get_phase2_client_cert_path (NMSetting8021x *setting)
* @setting: the #NMSetting8021x
* @cert_path: when @scheme is set to either %NM_SETTING_802_1X_CK_SCHEME_PATH
* or %NM_SETTING_802_1X_CK_SCHEME_BLOB, pass the path of the "phase2" client
- * certificate file (PEM, DER, or PKCS#12 format). The path must be UTF-8
+ * certificate file (PEM, DER, or PKCS#<!-- -->12 format). The path must be UTF-8
* encoded; use g_filename_to_utf8() to convert if needed. Passing %NULL with
* any @scheme clears the "phase2" client certificate.
* @scheme: desired storage scheme for the certificate
@@ -1696,7 +1700,7 @@ file_to_byte_array (const char *filename)
* @setting: the #NMSetting8021x
* @key_path: when @scheme is set to either %NM_SETTING_802_1X_CK_SCHEME_PATH or
* %NM_SETTING_802_1X_CK_SCHEME_BLOB, pass the path of the private key file
- * (PEM, DER, or PKCS#12 format). The path must be UTF-8 encoded; use
+ * (PEM, DER, or PKCS#<!-- -->12 format). The path must be UTF-8 encoded; use
* g_filename_to_utf8() to convert if needed. Passing %NULL with any @scheme
* clears the private key.
* @password: password used to decrypt the private key, or %NULL if the password
@@ -1824,7 +1828,7 @@ nm_setting_802_1x_set_private_key (NMSetting8021x *setting,
g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD);
if (out_format)
- *out_format = format;
+ *out_format = (NMSetting8021xCKFormat) format;
return priv->private_key != NULL;
}
@@ -2007,7 +2011,7 @@ nm_setting_802_1x_get_phase2_private_key_path (NMSetting8021x *setting)
* @setting: the #NMSetting8021x
* @key_path: when @scheme is set to either %NM_SETTING_802_1X_CK_SCHEME_PATH or
* %NM_SETTING_802_1X_CK_SCHEME_BLOB, pass the path of the "phase2" private
- * key file (PEM, DER, or PKCS#12 format). The path must be UTF-8 encoded;
+ * key file (PEM, DER, or PKCS#<!-- -->12 format). The path must be UTF-8 encoded;
* use g_filename_to_utf8() to convert if needed. Passing %NULL with any
* @scheme clears the private key.
* @password: password used to decrypt the private key, or %NULL if the password
@@ -2135,7 +2139,7 @@ nm_setting_802_1x_set_phase2_private_key (NMSetting8021x *setting,
g_object_notify (G_OBJECT (setting), NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD);
if (out_format)
- *out_format = format;
+ *out_format = (NMSetting8021xCKFormat) format;
return priv->phase2_private_key != NULL;
}
@@ -2819,7 +2823,7 @@ set_cert_prop_helper (const GValue *value, const char *prop_name, GError **error
static void
set_property (GObject *object, guint prop_id,
- const GValue *value, GParamSpec *pspec)
+ const GValue *value, GParamSpec *pspec)
{
NMSetting8021x *setting = NM_SETTING_802_1X (object);
NMSetting8021xPrivate *priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
@@ -3005,7 +3009,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)
{
NMSetting8021x *setting = NM_SETTING_802_1X (object);
NMSetting8021xPrivate *priv = NM_SETTING_802_1X_GET_PRIVATE (setting);
@@ -3143,17 +3147,10 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_EAP,
- _nm_param_spec_specialized (NM_SETTING_802_1X_EAP,
- "EAP",
- "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.",
- DBUS_TYPE_G_LIST_OF_STRING,
- G_PARAM_READWRITE));
+ _nm_param_spec_specialized (NM_SETTING_802_1X_EAP, "", "",
+ DBUS_TYPE_G_LIST_OF_STRING,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSetting8021x:identity:
@@ -3163,12 +3160,10 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_IDENTITY,
- g_param_spec_string (NM_SETTING_802_1X_IDENTITY,
- "Identity",
- "Identity string for EAP authentication methods. "
- "Often the user's user or login name.",
- NULL,
- G_PARAM_READWRITE));
+ g_param_spec_string (NM_SETTING_802_1X_IDENTITY, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSetting8021x:anonymous-identity:
@@ -3179,14 +3174,10 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_ANONYMOUS_IDENTITY,
- g_param_spec_string (NM_SETTING_802_1X_ANONYMOUS_IDENTITY,
- "Anonymous identity",
- "Anonymous identity string for EAP authentication "
- "methods. Used as the unencrypted identity with EAP "
- "types that support different tunneled identity like "
- "EAP-TTLS.",
- NULL,
- G_PARAM_READWRITE));
+ g_param_spec_string (NM_SETTING_802_1X_ANONYMOUS_IDENTITY, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSetting8021x:pac-file:
@@ -3195,11 +3186,10 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_PAC_FILE,
- g_param_spec_string (NM_SETTING_802_1X_PAC_FILE,
- "PAC file",
- "UTF-8 encoded file path containing PAC for EAP-FAST.",
- NULL,
- G_PARAM_READWRITE));
+ g_param_spec_string (NM_SETTING_802_1X_PAC_FILE, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSetting8021x:ca-cert:
@@ -3221,24 +3211,10 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_CA_CERT,
- _nm_param_spec_specialized (NM_SETTING_802_1X_CA_CERT,
- "CA certificate",
- "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.",
- DBUS_TYPE_G_UCHAR_ARRAY,
- G_PARAM_READWRITE));
+ _nm_param_spec_specialized (NM_SETTING_802_1X_CA_CERT, "", "",
+ DBUS_TYPE_G_UCHAR_ARRAY,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSetting8021x:ca-path:
@@ -3249,14 +3225,10 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_CA_PATH,
- g_param_spec_string (NM_SETTING_802_1X_CA_PATH,
- "CA path",
- "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.",
- NULL,
- G_PARAM_READWRITE));
+ g_param_spec_string (NM_SETTING_802_1X_CA_PATH, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSetting8021x:subject-match:
@@ -3267,15 +3239,10 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_SUBJECT_MATCH,
- g_param_spec_string (NM_SETTING_802_1X_SUBJECT_MATCH,
- "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.",
- NULL,
- G_PARAM_READWRITE));
+ g_param_spec_string (NM_SETTING_802_1X_SUBJECT_MATCH, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSetting8021x:altsubject-matches:
@@ -3284,18 +3251,12 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
* 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,
- _nm_param_spec_specialized (NM_SETTING_802_1X_ALTSUBJECT_MATCHES,
- "altSubjectName 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.",
- DBUS_TYPE_G_LIST_OF_STRING,
- G_PARAM_READWRITE));
+ g_object_class_install_property
+ (object_class, PROP_ALTSUBJECT_MATCHES,
+ _nm_param_spec_specialized (NM_SETTING_802_1X_ALTSUBJECT_MATCHES, "", "",
+ DBUS_TYPE_G_LIST_OF_STRING,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSetting8021x:client-cert:
@@ -3315,21 +3276,10 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_CLIENT_CERT,
- _nm_param_spec_specialized (NM_SETTING_802_1X_CLIENT_CERT,
- "Client certificate",
- "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.",
- DBUS_TYPE_G_UCHAR_ARRAY,
- G_PARAM_READWRITE));
+ _nm_param_spec_specialized (NM_SETTING_802_1X_CLIENT_CERT, "", "",
+ DBUS_TYPE_G_UCHAR_ARRAY,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSetting8021x:phase1-peapver:
@@ -3343,17 +3293,10 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_PHASE1_PEAPVER,
- g_param_spec_string (NM_SETTING_802_1X_PHASE1_PEAPVER,
- "Phase1 PEAPVER",
- "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.",
- NULL,
- G_PARAM_READWRITE));
+ g_param_spec_string (NM_SETTING_802_1X_PHASE1_PEAPVER, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSetting8021x:phase1-peaplabel:
@@ -3365,15 +3308,10 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_PHASE1_PEAPLABEL,
- g_param_spec_string (NM_SETTING_802_1X_PHASE1_PEAPLABEL,
- "Phase1 PEAP label",
- "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.",
- NULL,
- G_PARAM_READWRITE));
+ g_param_spec_string (NM_SETTING_802_1X_PHASE1_PEAPLABEL, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSetting8021x:phase1-fast-provisioning:
@@ -3387,18 +3325,10 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_PHASE1_FAST_PROVISIONING,
- g_param_spec_string (NM_SETTING_802_1X_PHASE1_FAST_PROVISIONING,
- "Phase1 fast provisioning",
- "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.",
- NULL,
- G_PARAM_READWRITE));
+ g_param_spec_string (NM_SETTING_802_1X_PHASE1_FAST_PROVISIONING, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSetting8021x:phase2-auth:
@@ -3412,18 +3342,10 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_PHASE2_AUTH,
- g_param_spec_string (NM_SETTING_802_1X_PHASE2_AUTH,
- "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 '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.",
- NULL,
- G_PARAM_READWRITE));
+ g_param_spec_string (NM_SETTING_802_1X_PHASE2_AUTH, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSetting8021x:phase2-autheap:
@@ -3437,18 +3359,10 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_PHASE2_AUTHEAP,
- g_param_spec_string (NM_SETTING_802_1X_PHASE2_AUTHEAP,
- "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 '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.",
- NULL,
- G_PARAM_READWRITE));
+ g_param_spec_string (NM_SETTING_802_1X_PHASE2_AUTHEAP, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSetting8021x:phase2-ca-cert:
@@ -3471,25 +3385,10 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_PHASE2_CA_CERT,
- _nm_param_spec_specialized (NM_SETTING_802_1X_PHASE2_CA_CERT,
- "Phase2 CA certificate",
- "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 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.",
- DBUS_TYPE_G_UCHAR_ARRAY,
- G_PARAM_READWRITE));
+ _nm_param_spec_specialized (NM_SETTING_802_1X_PHASE2_CA_CERT, "", "",
+ DBUS_TYPE_G_UCHAR_ARRAY,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSetting8021x:phase2-ca-path:
@@ -3500,14 +3399,10 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_PHASE2_CA_PATH,
- g_param_spec_string (NM_SETTING_802_1X_PHASE2_CA_PATH,
- "Phase2 auth CA path",
- "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.",
- NULL,
- G_PARAM_READWRITE));
+ g_param_spec_string (NM_SETTING_802_1X_PHASE2_CA_PATH, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSetting8021x:phase2-subject-match:
@@ -3519,16 +3414,10 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_PHASE2_SUBJECT_MATCH,
- g_param_spec_string (NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH,
- "Phase2 subject match",
- "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.",
- NULL,
- G_PARAM_READWRITE));
+ g_param_spec_string (NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSetting8021x:phase2-altsubject-matches:
@@ -3538,20 +3427,12 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
* "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,
- _nm_param_spec_specialized (NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES,
- "altSubjectName matches",
- "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.",
- DBUS_TYPE_G_LIST_OF_STRING,
- G_PARAM_READWRITE));
+ g_object_class_install_property
+ (object_class, PROP_PHASE2_ALTSUBJECT_MATCHES,
+ _nm_param_spec_specialized (NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES, "", "",
+ DBUS_TYPE_G_LIST_OF_STRING,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSetting8021x:phase2-client-cert:
@@ -3574,22 +3455,10 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_PHASE2_CLIENT_CERT,
- _nm_param_spec_specialized (NM_SETTING_802_1X_PHASE2_CLIENT_CERT,
- "Phase2 client certificate",
- "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.",
- DBUS_TYPE_G_UCHAR_ARRAY,
- G_PARAM_READWRITE));
+ _nm_param_spec_specialized (NM_SETTING_802_1X_PHASE2_CLIENT_CERT, "", "",
+ DBUS_TYPE_G_UCHAR_ARRAY,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSetting8021x:password:
@@ -3600,25 +3469,25 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_PASSWORD,
- g_param_spec_string (NM_SETTING_802_1X_PASSWORD,
- "Password",
- "UTF-8 encoded password used for EAP authentication methods.",
- NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SECRET));
+ g_param_spec_string (NM_SETTING_802_1X_PASSWORD, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_SECRET |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSetting8021x:password-flags:
*
* 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,
- "Password Flags",
- "Flags indicating how to handle the 802.1x password.",
+ g_object_class_install_property
+ (object_class, PROP_PASSWORD_FLAGS,
+ g_param_spec_uint (NM_SETTING_802_1X_PASSWORD_FLAGS, "", "",
NM_SETTING_SECRET_FLAG_NONE,
NM_SETTING_SECRET_FLAGS_ALL,
NM_SETTING_SECRET_FLAG_NONE,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSetting8021x:password-raw:
@@ -3630,30 +3499,25 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_PASSWORD_RAW,
- _nm_param_spec_specialized (NM_SETTING_802_1X_PASSWORD_RAW,
- "Password byte array",
- "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.",
+ _nm_param_spec_specialized (NM_SETTING_802_1X_PASSWORD_RAW, "", "",
DBUS_TYPE_G_UCHAR_ARRAY,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SECRET));
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_SECRET |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSetting8021x:password-raw-flags:
*
* 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,
- "Password byte array Flags",
- "Flags indicating how to handle the 802.1x password byte array.",
+ g_object_class_install_property
+ (object_class, PROP_PASSWORD_RAW_FLAGS,
+ g_param_spec_uint (NM_SETTING_802_1X_PASSWORD_RAW_FLAGS, "", "",
NM_SETTING_SECRET_FLAG_NONE,
NM_SETTING_SECRET_FLAGS_ALL,
NM_SETTING_SECRET_FLAG_NONE,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSetting8021x:private-key:
@@ -3666,15 +3530,15 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
* 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
+ * 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
+ * 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.
+ * 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.
@@ -3687,54 +3551,28 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_PRIVATE_KEY,
- _nm_param_spec_specialized (NM_SETTING_802_1X_PRIVATE_KEY,
- "Private key",
- "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.",
- DBUS_TYPE_G_UCHAR_ARRAY,
- G_PARAM_READWRITE));
+ _nm_param_spec_specialized (NM_SETTING_802_1X_PRIVATE_KEY, "", "",
+ DBUS_TYPE_G_UCHAR_ARRAY,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSetting8021x:private-key-password:
*
* 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
+ * 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.
**/
g_object_class_install_property
(object_class, PROP_PRIVATE_KEY_PASSWORD,
- g_param_spec_string (NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD,
- "Private key password",
- "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.",
- NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SECRET));
+ g_param_spec_string (NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_SECRET |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSetting8021x:private-key-password-flags:
@@ -3742,15 +3580,14 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
* 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,
- "Private Key Password Flags",
- "Flags indicating how to handle the 802.1x private "
- "key password.",
+ g_object_class_install_property
+ (object_class, PROP_PRIVATE_KEY_PASSWORD_FLAGS,
+ g_param_spec_uint (NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD_FLAGS, "", "",
NM_SETTING_SECRET_FLAG_NONE,
NM_SETTING_SECRET_FLAGS_ALL,
NM_SETTING_SECRET_FLAG_NONE,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSetting8021x:phase2-private-key:
@@ -3764,70 +3601,43 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
* 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
+ * 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
+ * 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.
+ * 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_phase2_private_key() function instead.
**/
g_object_class_install_property
(object_class, PROP_PHASE2_PRIVATE_KEY,
- _nm_param_spec_specialized (NM_SETTING_802_1X_PHASE2_PRIVATE_KEY,
- "Phase2 private key",
- "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.",
- DBUS_TYPE_G_UCHAR_ARRAY,
- G_PARAM_READWRITE));
+ _nm_param_spec_specialized (NM_SETTING_802_1X_PHASE2_PRIVATE_KEY, "", "",
+ DBUS_TYPE_G_UCHAR_ARRAY,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSetting8021x:phase2-private-key-password:
*
* 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
+ * 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,
- g_param_spec_string (NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD,
- "Phase2 private key password",
- "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.",
- NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SECRET));
+ g_param_spec_string (NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_SECRET |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSetting8021x:phase2-private-key-password-flags:
@@ -3835,15 +3645,14 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
* 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,
- "Phase2 Private Key Password Flags",
- "Flags indicating how to handle the 802.1x phase2 "
- "private key password.",
+ 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, "", "",
NM_SETTING_SECRET_FLAG_NONE,
NM_SETTING_SECRET_FLAGS_ALL,
NM_SETTING_SECRET_FLAG_NONE,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSetting8021x:pin:
@@ -3852,25 +3661,25 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_PIN,
- g_param_spec_string (NM_SETTING_802_1X_PIN,
- "PIN",
- "PIN used for EAP authentication methods.",
+ g_param_spec_string (NM_SETTING_802_1X_PIN, "", "",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SECRET));
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_SECRET |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSetting8021x:pin-flags:
*
* 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,
- "PIN Flags",
- "Flags indicating how to handle the 802.1x PIN.",
+ g_object_class_install_property
+ (object_class, PROP_PIN_FLAGS,
+ g_param_spec_uint (NM_SETTING_802_1X_PIN_FLAGS, "", "",
NM_SETTING_SECRET_FLAG_NONE,
NM_SETTING_SECRET_FLAGS_ALL,
NM_SETTING_SECRET_FLAG_NONE,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSetting8021x:system-ca-certs:
@@ -3884,17 +3693,11 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_SYSTEM_CA_CERTS,
- g_param_spec_boolean (NM_SETTING_802_1X_SYSTEM_CA_CERTS,
- "Use system CA certificates",
- "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.",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_param_spec_boolean (NM_SETTING_802_1X_SYSTEM_CA_CERTS, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/* Initialize crypto lbrary. */
if (!nm_utils_init (&error)) {
@@ -3902,5 +3705,4 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class)
error->code, error->message);
g_error_free (error);
}
-
}
diff --git a/libnm-util/nm-setting-8021x.h b/libnm-util/nm-setting-8021x.h
index 263630ec0..62b439050 100644
--- a/libnm-util/nm-setting-8021x.h
+++ b/libnm-util/nm-setting-8021x.h
@@ -1,9 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Dan Williams <dcbw@redhat.com>
- * Tambet Ingo <tambet@gmail.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
@@ -19,8 +16,8 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2014 Red Hat, Inc.
- * (C) Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2014 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
*/
#ifndef NM_SETTING_8021X_H
@@ -36,7 +33,7 @@ G_BEGIN_DECLS
* @NM_SETTING_802_1X_CK_FORMAT_X509: file contains an X.509 format certificate
* @NM_SETTING_802_1X_CK_FORMAT_RAW_KEY: file contains an old-style OpenSSL PEM
* or DER private key
- * @NM_SETTING_802_1X_CK_FORMAT_PKCS12: file contains a PKCS#12 certificate
+ * @NM_SETTING_802_1X_CK_FORMAT_PKCS12: file contains a PKCS#<!-- -->12 certificate
* and private key
*
* #NMSetting8021xCKFormat values indicate the general type of a certificate
diff --git a/libnm-util/nm-setting-adsl.c b/libnm-util/nm-setting-adsl.c
index 00cbb4aff..601ebc2b2 100644
--- a/libnm-util/nm-setting-adsl.c
+++ b/libnm-util/nm-setting-adsl.c
@@ -1,10 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Dan Williams <dcbw@redhat.com>
- * Hicham HAOUARI <hicham.haouari@gmail.com>
- * Pantelis Koukousoulas <pktoss@gmail.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
@@ -20,11 +16,13 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2011 - 2013 Red Hat, Inc.
+ * Copyright 2011 - 2013 Red Hat, Inc.
*/
+#include "config.h"
+
#include <string.h>
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
#include "nm-setting-adsl.h"
#include "nm-setting-ppp.h"
@@ -230,20 +228,22 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
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)) {
+ if ( !priv->protocol
+ || ( strcmp (priv->protocol, NM_SETTING_ADSL_PROTOCOL_PPPOA)
+ && 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,
_("'%s' is not a valid value for the property"),
- priv->protocol);
+ priv->protocol ? priv->protocol : "(null)");
g_prefix_error (error, "%s.%s: ", NM_SETTING_ADSL_SETTING_NAME, NM_SETTING_ADSL_PROTOCOL);
return FALSE;
}
- if (strcmp (priv->encapsulation, NM_SETTING_ADSL_ENCAPSULATION_VCMUX) &&
- strcmp (priv->encapsulation, NM_SETTING_ADSL_ENCAPSULATION_LLC) ) {
+ if ( priv->encapsulation
+ && ( strcmp (priv->encapsulation, NM_SETTING_ADSL_ENCAPSULATION_VCMUX)
+ && strcmp (priv->encapsulation, NM_SETTING_ADSL_ENCAPSULATION_LLC) )) {
g_set_error (error,
NM_SETTING_ADSL_ERROR,
NM_SETTING_ADSL_ERROR_INVALID_PROPERTY,
@@ -387,11 +387,10 @@ nm_setting_adsl_class_init (NMSettingAdslClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_USERNAME,
- g_param_spec_string (NM_SETTING_ADSL_USERNAME,
- "Username",
- "Username used to authenticate with the pppoa service.",
- NULL,
- G_PARAM_READWRITE));
+ g_param_spec_string (NM_SETTING_ADSL_USERNAME, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingAdsl:password:
@@ -400,25 +399,25 @@ nm_setting_adsl_class_init (NMSettingAdslClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_PASSWORD,
- g_param_spec_string (NM_SETTING_ADSL_PASSWORD,
- "Password",
- "Password used to authenticate with the pppoa service.",
- NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SECRET));
+ g_param_spec_string (NM_SETTING_ADSL_PASSWORD, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_SECRET |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingAdsl:password-flags:
*
* 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,
- "Password Flags",
- "Flags indicating how to handle the ADSL password.",
+ g_object_class_install_property
+ (object_class, PROP_PASSWORD_FLAGS,
+ g_param_spec_uint (NM_SETTING_ADSL_PASSWORD_FLAGS, "", "",
NM_SETTING_SECRET_FLAG_NONE,
NM_SETTING_SECRET_FLAGS_ALL,
NM_SETTING_SECRET_FLAG_NONE,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingAdsl:protocol:
@@ -427,11 +426,10 @@ nm_setting_adsl_class_init (NMSettingAdslClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_PROTOCOL,
- g_param_spec_string (NM_SETTING_ADSL_PROTOCOL,
- "Protocol",
- "ADSL connection protocol.",
- NULL,
- G_PARAM_READWRITE));
+ g_param_spec_string (NM_SETTING_ADSL_PROTOCOL, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingAdsl:encapsulation:
@@ -440,11 +438,10 @@ nm_setting_adsl_class_init (NMSettingAdslClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_ENCAPSULATION,
- g_param_spec_string (NM_SETTING_ADSL_ENCAPSULATION,
- "Encapsulation",
- "Encapsulation of ADSL connection",
- NULL,
- G_PARAM_READWRITE));
+ g_param_spec_string (NM_SETTING_ADSL_ENCAPSULATION, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingAdsl:vpi:
@@ -453,11 +450,10 @@ nm_setting_adsl_class_init (NMSettingAdslClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_VPI,
- g_param_spec_uint (NM_SETTING_ADSL_VPI,
- "VPI",
- "VPI of ADSL connection",
- 0, 65536, 0,
- G_PARAM_READWRITE));
+ g_param_spec_uint (NM_SETTING_ADSL_VPI, "", "",
+ 0, 65536, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingAdsl:vci:
@@ -466,9 +462,8 @@ nm_setting_adsl_class_init (NMSettingAdslClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_VCI,
- g_param_spec_uint (NM_SETTING_ADSL_VCI,
- "VCI",
- "VCI of ADSL connection",
- 0, 65536, 0,
- G_PARAM_READWRITE));
+ g_param_spec_uint (NM_SETTING_ADSL_VCI, "", "",
+ 0, 65536, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
}
diff --git a/libnm-util/nm-setting-adsl.h b/libnm-util/nm-setting-adsl.h
index 484e8a395..82af6ebdd 100644
--- a/libnm-util/nm-setting-adsl.h
+++ b/libnm-util/nm-setting-adsl.h
@@ -1,10 +1,6 @@
/* -*- mode: c; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Dan Williams <dcbw@redhat.com>
- * Hicham HAOUARI <hicham.haouari@gmail.com>
- * Pantelis Koukousoulas <pantelis@gmail.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
@@ -20,7 +16,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2008 Red Hat, Inc.
+ * Copyright 2007 - 2008 Red Hat, Inc.
*/
#ifndef NM_SETTING_ADSL_H
diff --git a/libnm-util/nm-setting-bluetooth.c b/libnm-util/nm-setting-bluetooth.c
index 5c13257c4..2867d73ba 100644
--- a/libnm-util/nm-setting-bluetooth.c
+++ b/libnm-util/nm-setting-bluetooth.c
@@ -1,10 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Bastien Nocera <hadess@hadess.net>
- * Dan Williams <dcbw@redhat.com>
- * Tambet Ingo <tambet@gmail.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
@@ -20,13 +16,15 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2013 Red Hat, Inc.
- * (C) Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2013 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include <net/ethernet.h>
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
#include "nm-param-spec-specialized.h"
#include "nm-dbus-glib-types.h"
@@ -105,7 +103,8 @@ NMSetting *nm_setting_bluetooth_new (void)
* 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).
*
- * Returns: the type, either %NM_SETTING_BLUETOOTH_PANU or %NM_SETTING_BLUETOOTH_DUN
+ * Returns: the type, either %NM_SETTING_BLUETOOTH_TYPE_PANU or
+ * %NM_SETTING_BLUETOOTH_TYPE_DUN
**/
const char *
nm_setting_bluetooth_get_connection_type (NMSettingBluetooth *setting)
@@ -163,7 +162,7 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
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_str_equal (priv->type, NM_SETTING_BLUETOOTH_TYPE_PANU)) {
g_set_error (error,
NM_SETTING_BLUETOOTH_ERROR,
NM_SETTING_BLUETOOTH_ERROR_INVALID_PROPERTY,
@@ -217,7 +216,7 @@ finalize (GObject *object)
static void
set_property (GObject *object, guint prop_id,
- const GValue *value, GParamSpec *pspec)
+ const GValue *value, GParamSpec *pspec)
{
NMSettingBluetoothPrivate *priv = NM_SETTING_BLUETOOTH_GET_PRIVATE (object);
@@ -239,7 +238,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)
{
NMSettingBluetooth *setting = NM_SETTING_BLUETOOTH (object);
@@ -279,11 +278,11 @@ nm_setting_bluetooth_class_init (NMSettingBluetoothClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_BDADDR,
- _nm_param_spec_specialized (NM_SETTING_BLUETOOTH_BDADDR,
- "Bluetooth address",
- "The Bluetooth address of the device",
+ _nm_param_spec_specialized (NM_SETTING_BLUETOOTH_BDADDR, "", "",
DBUS_TYPE_G_UCHAR_ARRAY,
- G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingBluetooth:type:
@@ -293,12 +292,9 @@ nm_setting_bluetooth_class_init (NMSettingBluetoothClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_TYPE,
- g_param_spec_string (NM_SETTING_BLUETOOTH_TYPE,
- "Connection type",
- "Either '" NM_SETTING_BLUETOOTH_TYPE_DUN "' for "
- "Dial-Up Networking connections or "
- "'" NM_SETTING_BLUETOOTH_TYPE_PANU "' for "
- "Personal Area Networking connections.",
- NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
+ g_param_spec_string (NM_SETTING_BLUETOOTH_TYPE, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
}
diff --git a/libnm-util/nm-setting-bluetooth.h b/libnm-util/nm-setting-bluetooth.h
index 95a8852ab..caf12158c 100644
--- a/libnm-util/nm-setting-bluetooth.h
+++ b/libnm-util/nm-setting-bluetooth.h
@@ -1,10 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Bastien Nocera <hadess@hadess.net>
- * Dan Williams <dcbw@redhat.com>
- * Tambet Ingo <tambet@gmail.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
@@ -20,8 +16,8 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2009 Red Hat, Inc.
- * (C) Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2009 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
*/
#ifndef NM_SETTING_BLUETOOTH_H
diff --git a/libnm-util/nm-setting-bond.c b/libnm-util/nm-setting-bond.c
index 5f919027d..fa12cf0ea 100644
--- a/libnm-util/nm-setting-bond.c
+++ b/libnm-util/nm-setting-bond.c
@@ -1,8 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Thomas Graf <tgraf@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
@@ -18,16 +16,18 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2011 - 2013 Red Hat, Inc.
+ * Copyright 2011 - 2013 Red Hat, Inc.
*/
+#include "config.h"
+
#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 <glib/gi18n-lib.h>
#include "nm-setting-bond.h"
#include "nm-param-spec-specialized.h"
@@ -122,6 +122,8 @@ static const BondDefault defaults[] = {
{ 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 },
+ { NM_SETTING_BOND_OPTION_LACP_RATE, "0", TYPE_BOTH, 0, 1,
+ { "slow", "fast", NULL } },
};
/**
@@ -313,8 +315,8 @@ nm_setting_bond_validate_option (const char *name,
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]);
+ return ( validate_int (name, value, &defaults[i])
+ || validate_list (name, value, &defaults[i]));
case TYPE_IP:
return validate_ip (name, value);
case TYPE_IFNAME:
@@ -489,26 +491,9 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
NULL };
int miimon = 0, arp_interval = 0;
const char *arp_ip_target = NULL;
+ const char *lacp_rate;
const char *primary;
- if (!priv->interface_name || !strlen(priv->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_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 (!value[0] || !nm_setting_bond_validate_option (key, value)) {
@@ -688,7 +673,26 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
}
}
- return TRUE;
+ lacp_rate = g_hash_table_lookup (priv->options, NM_SETTING_BOND_OPTION_LACP_RATE);
+ if ( lacp_rate
+ && (g_strcmp0 (value, "802.3ad") != 0 && g_strcmp0 (value, "4") != 0)
+ && (strcmp (lacp_rate, "slow") != 0 && strcmp (lacp_rate, "0") != 0)) {
+ g_set_error (error,
+ NM_SETTING_BOND_ERROR,
+ NM_SETTING_BOND_ERROR_INVALID_OPTION,
+ _("'%s' option is only valid with mode '%s'"),
+ NM_SETTING_BOND_OPTION_LACP_RATE, "802.3ad");
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_BOND_SETTING_NAME, NM_SETTING_BOND_OPTIONS);
+ return FALSE;
+ }
+
+ return _nm_setting_verify_deprecated_virtual_iface_name (
+ priv->interface_name, FALSE,
+ NM_SETTING_BOND_SETTING_NAME, NM_SETTING_BOND_INTERFACE_NAME,
+ NM_SETTING_BOND_ERROR,
+ NM_SETTING_BOND_ERROR_INVALID_PROPERTY,
+ NM_SETTING_BOND_ERROR_MISSING_PROPERTY,
+ all_settings, error);
}
static const char *
@@ -765,7 +769,7 @@ get_property (GObject *object, guint prop_id,
break;
case PROP_OPTIONS:
g_value_set_boxed (value, priv->options);
- break;
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -795,11 +799,11 @@ nm_setting_bond_class_init (NMSettingBondClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_INTERFACE_NAME,
- g_param_spec_string (NM_SETTING_BOND_INTERFACE_NAME,
- "InterfaceName",
- "The name of the virtual in-kernel bonding network interface",
+ g_param_spec_string (NM_SETTING_BOND_INTERFACE_NAME, "", "",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingBond:options:
@@ -810,12 +814,9 @@ nm_setting_bond_class_init (NMSettingBondClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_OPTIONS,
- _nm_param_spec_specialized (NM_SETTING_BOND_OPTIONS,
- "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]).",
+ _nm_param_spec_specialized (NM_SETTING_BOND_OPTIONS, "", "",
DBUS_TYPE_G_MAP_OF_STRING,
- G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
}
diff --git a/libnm-util/nm-setting-bond.h b/libnm-util/nm-setting-bond.h
index f3358c7f8..cf969995e 100644
--- a/libnm-util/nm-setting-bond.h
+++ b/libnm-util/nm-setting-bond.h
@@ -1,8 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Thomas Graf <tgraf@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
@@ -18,7 +16,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2011 - 2013 Red Hat, Inc.
+ * Copyright 2011 - 2013 Red Hat, Inc.
*/
#ifndef NM_SETTING_BOND_H
@@ -73,6 +71,7 @@ GQuark nm_setting_bond_error_quark (void);
#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"
+#define NM_SETTING_BOND_OPTION_LACP_RATE "lacp_rate"
typedef struct {
NMSetting parent;
diff --git a/libnm-util/nm-setting-bridge-port.c b/libnm-util/nm-setting-bridge-port.c
index 64be56627..b3afa5005 100644
--- a/libnm-util/nm-setting-bridge-port.c
+++ b/libnm-util/nm-setting-bridge-port.c
@@ -1,8 +1,6 @@
/* -*- 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
@@ -18,14 +16,16 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2012 - 2013 Red Hat, Inc.
+ * Copyright 2012 - 2013 Red Hat, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include <dbus/dbus-glib.h>
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
#include "nm-setting-bridge-port.h"
#include "nm-utils.h"
@@ -264,11 +264,12 @@ nm_setting_bridge_port_class_init (NMSettingBridgePortClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_PRIORITY,
- g_param_spec_uint (NM_SETTING_BRIDGE_PORT_PRIORITY,
- "Priority",
- "The Spanning Tree Protocol (STP) priority of this bridge port",
+ g_param_spec_uint (NM_SETTING_BRIDGE_PORT_PRIORITY, "", "",
0, BR_MAX_PORT_PRIORITY, BR_DEF_PRIORITY,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_INFERRABLE));
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingBridgePort:path-cost:
@@ -278,14 +279,14 @@ nm_setting_bridge_port_class_init (NMSettingBridgePortClass *setting_class)
*
* Since: 0.9.8
**/
- g_object_class_install_property
- (object_class, PROP_PATH_COST,
- g_param_spec_uint (NM_SETTING_BRIDGE_PORT_PATH_COST,
- "Path Cost",
- "The Spanning Tree Protocol (STP) port cost for "
- "destinations via this port.",
+ g_object_class_install_property
+ (object_class, PROP_PATH_COST,
+ g_param_spec_uint (NM_SETTING_BRIDGE_PORT_PATH_COST, "", "",
0, BR_MAX_PATH_COST, 100,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_INFERRABLE));
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingBridgePort:hairpin-mode:
@@ -295,13 +296,11 @@ nm_setting_bridge_port_class_init (NMSettingBridgePortClass *setting_class)
*
* Since: 0.9.8
**/
- g_object_class_install_property
- (object_class, PROP_HAIRPIN_MODE,
- g_param_spec_boolean (NM_SETTING_BRIDGE_PORT_HAIRPIN_MODE,
- "Hairpin Mode",
- "Enables or disabled 'hairpin mode' for the "
- "port, which allows frames to be sent back out "
- "through the port the frame was received on.",
+ g_object_class_install_property
+ (object_class, PROP_HAIRPIN_MODE,
+ g_param_spec_boolean (NM_SETTING_BRIDGE_PORT_HAIRPIN_MODE, "", "",
FALSE,
- G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
}
diff --git a/libnm-util/nm-setting-bridge-port.h b/libnm-util/nm-setting-bridge-port.h
index 7848b75ff..fcaf22ed0 100644
--- a/libnm-util/nm-setting-bridge-port.h
+++ b/libnm-util/nm-setting-bridge-port.h
@@ -1,8 +1,6 @@
/* -*- 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
@@ -18,7 +16,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2012 Red Hat, Inc.
+ * Copyright 2012 Red Hat, Inc.
*/
#ifndef NM_SETTING_BRIDGE_PORT_H
diff --git a/libnm-util/nm-setting-bridge.c b/libnm-util/nm-setting-bridge.c
index 0908573d2..bdaa75f97 100644
--- a/libnm-util/nm-setting-bridge.c
+++ b/libnm-util/nm-setting-bridge.c
@@ -1,8 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Thomas Graf <tgraf@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
@@ -18,14 +16,16 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2011 - 2013 Red Hat, Inc.
+ * Copyright 2011 - 2013 Red Hat, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include <dbus/dbus-glib.h>
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
#include <linux/if_ether.h>
#include "nm-setting-bridge.h"
@@ -280,25 +280,6 @@ 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_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;
- }
-
- if (!nm_utils_iface_valid_name (priv->interface_name)) {
- g_set_error (error,
- NM_SETTING_BRIDGE_ERROR,
- NM_SETTING_BRIDGE_ERROR_INVALID_PROPERTY,
- _("'%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,
@@ -336,7 +317,13 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
error))
return FALSE;
- return TRUE;
+ return _nm_setting_verify_deprecated_virtual_iface_name (
+ priv->interface_name, FALSE,
+ NM_SETTING_BRIDGE_SETTING_NAME, NM_SETTING_BRIDGE_INTERFACE_NAME,
+ NM_SETTING_BRIDGE_ERROR,
+ NM_SETTING_BRIDGE_ERROR_INVALID_PROPERTY,
+ NM_SETTING_BRIDGE_ERROR_MISSING_PROPERTY,
+ all_settings, error);
}
static const char *
@@ -468,11 +455,11 @@ nm_setting_bridge_class_init (NMSettingBridgeClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_INTERFACE_NAME,
- g_param_spec_string (NM_SETTING_BRIDGE_INTERFACE_NAME,
- "InterfaceName",
- "The name of the virtual in-kernel bridging network interface",
+ g_param_spec_string (NM_SETTING_BRIDGE_INTERFACE_NAME, "", "",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingBridge:mac-address:
@@ -484,12 +471,12 @@ nm_setting_bridge_class_init (NMSettingBridgeClass *setting_class)
* 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));
+ (object_class, PROP_MAC_ADDRESS,
+ _nm_param_spec_specialized (NM_SETTING_BRIDGE_MAC_ADDRESS, "", "",
+ DBUS_TYPE_G_UCHAR_ARRAY,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingBridge:stp:
@@ -498,14 +485,14 @@ nm_setting_bridge_class_init (NMSettingBridgeClass *setting_class)
*
* Since: 0.9.8
**/
- g_object_class_install_property
- (object_class, PROP_STP,
- g_param_spec_boolean (NM_SETTING_BRIDGE_STP,
- "STP",
- "Controls whether Spanning Tree Protocol (STP) "
- "is enabled for this bridge.",
- TRUE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_INFERRABLE));
+ g_object_class_install_property
+ (object_class, PROP_STP,
+ g_param_spec_boolean (NM_SETTING_BRIDGE_STP, "", "",
+ TRUE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingBridge:priority:
@@ -516,16 +503,14 @@ nm_setting_bridge_class_init (NMSettingBridgeClass *setting_class)
*
* Since: 0.9.8
**/
- g_object_class_install_property
- (object_class, PROP_PRIORITY,
- g_param_spec_uint (NM_SETTING_BRIDGE_PRIORITY,
- "Priority",
- "Sets the Spanning Tree Protocol (STP) priority "
- "for this bridge. Lower values are 'better'; the "
- "lowest priority bridge will be elected the root "
- "bridge.",
- 0, G_MAXUINT16, 0x8000,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_INFERRABLE));
+ g_object_class_install_property
+ (object_class, PROP_PRIORITY,
+ g_param_spec_uint (NM_SETTING_BRIDGE_PRIORITY, "", "",
+ 0, G_MAXUINT16, 0x8000,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingBridge:forward-delay:
@@ -534,14 +519,14 @@ nm_setting_bridge_class_init (NMSettingBridgeClass *setting_class)
*
* Since: 0.9.8
**/
- g_object_class_install_property
- (object_class, PROP_FORWARD_DELAY,
- g_param_spec_uint (NM_SETTING_BRIDGE_FORWARD_DELAY,
- "ForwardDelay",
- "The Spanning Tree Protocol (STP) forwarding "
- "delay, in seconds.",
- 0, BR_MAX_FORWARD_DELAY, 15,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_INFERRABLE));
+ g_object_class_install_property
+ (object_class, PROP_FORWARD_DELAY,
+ g_param_spec_uint (NM_SETTING_BRIDGE_FORWARD_DELAY, "", "",
+ 0, BR_MAX_FORWARD_DELAY, 15,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingBridge:hello-time:
@@ -550,14 +535,14 @@ nm_setting_bridge_class_init (NMSettingBridgeClass *setting_class)
*
* Since: 0.9.8
**/
- g_object_class_install_property
- (object_class, PROP_HELLO_TIME,
- g_param_spec_uint (NM_SETTING_BRIDGE_HELLO_TIME,
- "HelloTime",
- "The Spanning Tree Protocol (STP) hello time, in "
- "seconds.",
- 0, BR_MAX_HELLO_TIME, 2,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_INFERRABLE));
+ g_object_class_install_property
+ (object_class, PROP_HELLO_TIME,
+ g_param_spec_uint (NM_SETTING_BRIDGE_HELLO_TIME, "", "",
+ 0, BR_MAX_HELLO_TIME, 2,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingBridge:max-age:
@@ -566,14 +551,14 @@ nm_setting_bridge_class_init (NMSettingBridgeClass *setting_class)
*
* Since: 0.9.8
**/
- g_object_class_install_property
- (object_class, PROP_MAX_AGE,
- g_param_spec_uint (NM_SETTING_BRIDGE_MAX_AGE,
- "MaxAge",
- "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_INFERRABLE));
+ g_object_class_install_property
+ (object_class, PROP_MAX_AGE,
+ g_param_spec_uint (NM_SETTING_BRIDGE_MAX_AGE, "", "",
+ 0, BR_MAX_MAX_AGE, 20,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingBridge:ageing-time:
@@ -582,12 +567,12 @@ nm_setting_bridge_class_init (NMSettingBridgeClass *setting_class)
*
* Since: 0.9.8
**/
- g_object_class_install_property
- (object_class, PROP_AGEING_TIME,
- g_param_spec_uint (NM_SETTING_BRIDGE_AGEING_TIME,
- "AgeingTime",
- "The Ethernet MAC address aging time, in seconds.",
- 0, BR_MAX_AGEING_TIME, 300,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_INFERRABLE));
+ g_object_class_install_property
+ (object_class, PROP_AGEING_TIME,
+ g_param_spec_uint (NM_SETTING_BRIDGE_AGEING_TIME, "", "",
+ 0, BR_MAX_AGEING_TIME, 300,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
}
-
diff --git a/libnm-util/nm-setting-bridge.h b/libnm-util/nm-setting-bridge.h
index 1e8957045..f6b59262b 100644
--- a/libnm-util/nm-setting-bridge.h
+++ b/libnm-util/nm-setting-bridge.h
@@ -1,8 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Thomas Graf <tgraf@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
@@ -18,7 +16,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2011 - 2012 Red Hat, Inc.
+ * Copyright 2011 - 2012 Red Hat, Inc.
*/
#ifndef NM_SETTING_BRIDGE_H
diff --git a/libnm-util/nm-setting-cdma.c b/libnm-util/nm-setting-cdma.c
index 7acfe8520..44a893c7b 100644
--- a/libnm-util/nm-setting-cdma.c
+++ b/libnm-util/nm-setting-cdma.c
@@ -1,8 +1,6 @@
/* -*- 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
@@ -18,11 +16,13 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2013 Red Hat, Inc.
+ * Copyright 2007 - 2013 Red Hat, Inc.
*/
+#include "config.h"
+
#include <string.h>
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
#include "nm-setting-cdma.h"
#include "nm-utils.h"
@@ -231,7 +231,7 @@ finalize (GObject *object)
static void
set_property (GObject *object, guint prop_id,
- const GValue *value, GParamSpec *pspec)
+ const GValue *value, GParamSpec *pspec)
{
NMSettingCdmaPrivate *priv = NM_SETTING_CDMA_GET_PRIVATE (object);
@@ -259,7 +259,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)
{
NMSettingCdma *setting = NM_SETTING_CDMA (object);
@@ -308,14 +308,10 @@ nm_setting_cdma_class_init (NMSettingCdmaClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_NUMBER,
- g_param_spec_string (NM_SETTING_CDMA_NUMBER,
- "Number",
- "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.",
- NULL,
- G_PARAM_READWRITE));
+ g_param_spec_string (NM_SETTING_CDMA_NUMBER, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingCdma:username:
@@ -326,13 +322,10 @@ nm_setting_cdma_class_init (NMSettingCdmaClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_USERNAME,
- g_param_spec_string (NM_SETTING_CDMA_USERNAME,
- "Username",
- "Username used to authenticate with the network, if "
- "required. Note that many providers do not require "
- "a username or accept any username.",
- NULL,
- G_PARAM_READWRITE));
+ g_param_spec_string (NM_SETTING_CDMA_USERNAME, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingCdma:password:
@@ -343,25 +336,23 @@ nm_setting_cdma_class_init (NMSettingCdmaClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_PASSWORD,
- g_param_spec_string (NM_SETTING_CDMA_PASSWORD,
- "Password",
- "Password used to authenticate with the network, if "
- "required. Note that many providers do not require "
- "a password or accept any password.",
- NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SECRET));
+ g_param_spec_string (NM_SETTING_CDMA_PASSWORD, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_SECRET |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingCdma:password-flags:
*
* 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,
- "Password Flags",
- "Flags indicating how to handle the CDMA password.",
+ g_object_class_install_property
+ (object_class, PROP_PASSWORD_FLAGS,
+ g_param_spec_uint (NM_SETTING_CDMA_PASSWORD_FLAGS, "", "",
NM_SETTING_SECRET_FLAG_NONE,
NM_SETTING_SECRET_FLAGS_ALL,
NM_SETTING_SECRET_FLAG_NONE,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
}
diff --git a/libnm-util/nm-setting-cdma.h b/libnm-util/nm-setting-cdma.h
index 0dc290dac..eee442059 100644
--- a/libnm-util/nm-setting-cdma.h
+++ b/libnm-util/nm-setting-cdma.h
@@ -1,9 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Dan Williams <dcbw@redhat.com>
- * Tambet Ingo <tambet@gmail.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
@@ -19,8 +16,8 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2011 Red Hat, Inc.
- * (C) Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2011 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
*/
#ifndef NM_SETTING_CDMA_H
diff --git a/libnm-util/nm-setting-connection.c b/libnm-util/nm-setting-connection.c
index 56e87a4df..162ae7cb0 100644
--- a/libnm-util/nm-setting-connection.c
+++ b/libnm-util/nm-setting-connection.c
@@ -1,9 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Dan Williams <dcbw@redhat.com>
- * Tambet Ingo <tambet@gmail.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
@@ -19,12 +16,14 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2013 Red Hat, Inc.
- * (C) Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2013 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
*/
+#include "config.h"
+
#include <string.h>
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
#include "nm-utils.h"
#include "nm-dbus-glib-types.h"
@@ -459,7 +458,7 @@ nm_setting_connection_remove_permission (NMSettingConnection *setting,
* 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
@@ -796,29 +795,35 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
return FALSE;
}
- /* If the connection has a virtual interface name, it must match
- * the connection setting's interface name.
+ /* FIXME: previously, verify() set the NMSettingConnection:interface_name property,
+ * thus modifying the setting. verify() should not do this, but keep this not to change
+ * behaviour.
*/
- 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;
+ if (!priv->interface_name) {
+ for (iter = all_settings; iter; iter = iter->next) {
+ NMSetting *s_current = iter->data;
+ char *virtual_iface_name = NULL;
+
+ if (NM_IS_SETTING_BOND (s_current))
+ g_object_get (s_current, NM_SETTING_BOND_INTERFACE_NAME, &virtual_iface_name, NULL);
+ else if (NM_IS_SETTING_BRIDGE (s_current))
+ g_object_get (s_current, NM_SETTING_BRIDGE_INTERFACE_NAME, &virtual_iface_name, NULL);
+ else if (NM_IS_SETTING_TEAM (s_current))
+ g_object_get (s_current, NM_SETTING_TEAM_INTERFACE_NAME, &virtual_iface_name, NULL);
+ else if (NM_IS_SETTING_VLAN (s_current))
+ g_object_get (s_current, NM_SETTING_VLAN_INTERFACE_NAME, &virtual_iface_name, NULL);
+ /* For NMSettingInfiniband, virtual_iface_name has no backing field.
+ * No need to set the (unset) interface_name to the default value.
+ **/
+
+ if (virtual_iface_name) {
+ if (nm_utils_iface_valid_name (virtual_iface_name)) {
+ /* found a new interface name. */
+ priv->interface_name = virtual_iface_name;
+ break;
}
- } else
- priv->interface_name = g_strdup (virtual_iface);
- break;
+ g_free (virtual_iface_name);
+ }
}
}
@@ -861,39 +866,37 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
return FALSE;
}
- 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));
+ is_slave = ( priv->slave_type
+ && ( !strcmp (priv->slave_type, NM_SETTING_BOND_SETTING_NAME)
+ || !strcmp (priv->slave_type, NM_SETTING_BRIDGE_SETTING_NAME)
+ || !strcmp (priv->slave_type, NM_SETTING_TEAM_SETTING_NAME)));
+
+ if (priv->slave_type && !is_slave) {
+ g_set_error (error,
+ NM_SETTING_CONNECTION_ERROR,
+ NM_SETTING_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("Unknown slave type '%s'"), priv->slave_type);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_SLAVE_TYPE);
+ return NM_SETTING_VERIFY_ERROR;
+ }
- /* 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_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;
- }
+ if (!priv->master) {
+ g_set_error_literal (error,
+ NM_SETTING_CONNECTION_ERROR,
+ NM_SETTING_CONNECTION_ERROR_MISSING_PROPERTY,
+ _("Slave connections need a valid '" NM_SETTING_CONNECTION_MASTER "' property"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_MASTER);
+ return NM_SETTING_VERIFY_ERROR;
}
-
- 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_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;
- }
+ } else {
+ if (priv->master) {
+ g_set_error_literal (error,
+ NM_SETTING_CONNECTION_ERROR,
+ NM_SETTING_CONNECTION_ERROR_MISSING_PROPERTY,
+ _("Cannot set '" NM_SETTING_CONNECTION_MASTER "' without '" NM_SETTING_CONNECTION_SLAVE_TYPE "'"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_SLAVE_TYPE);
+ return NM_SETTING_VERIFY_ERROR;
}
}
@@ -1103,13 +1106,11 @@ nm_setting_connection_class_init (NMSettingConnectionClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_ID,
- g_param_spec_string (NM_SETTING_CONNECTION_ID,
- "ID",
- "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.",
- NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_FUZZY_IGNORE));
+ g_param_spec_string (NM_SETTING_CONNECTION_ID, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingConnection:uuid:
@@ -1129,20 +1130,11 @@ nm_setting_connection_class_init (NMSettingConnectionClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_UUID,
- g_param_spec_string (NM_SETTING_CONNECTION_UUID,
- "UUID",
- "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.",
- NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_FUZZY_IGNORE));
+ g_param_spec_string (NM_SETTING_CONNECTION_UUID, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingConnection:interface-name:
@@ -1151,6 +1143,8 @@ nm_setting_connection_class_init (NMSettingConnectionClass *setting_class)
* set, then the connection can be attached to any interface of the
* appropriate type (subject to restrictions imposed by other settings).
*
+ * For software devices this specifies the name of the created device.
+ *
* 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
@@ -1161,21 +1155,11 @@ nm_setting_connection_class_init (NMSettingConnectionClass *setting_class)
**/
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.",
+ g_param_spec_string (NM_SETTING_CONNECTION_INTERFACE_NAME, "", "",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingConnection:type:
@@ -1188,21 +1172,15 @@ nm_setting_connection_class_init (NMSettingConnectionClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_TYPE,
- g_param_spec_string (NM_SETTING_CONNECTION_TYPE,
- "Type",
- "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).",
- NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
+ g_param_spec_string (NM_SETTING_CONNECTION_TYPE, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* 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
* this connection. Otherwise a user is allowed to access this connection
@@ -1217,25 +1195,10 @@ nm_setting_connection_class_init (NMSettingConnectionClass *setting_class)
*/
g_object_class_install_property
(object_class, PROP_PERMISSIONS,
- _nm_param_spec_specialized (NM_SETTING_CONNECTION_PERMISSIONS,
- "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 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.",
- DBUS_TYPE_G_LIST_OF_STRING,
- G_PARAM_READWRITE));
+ _nm_param_spec_specialized (NM_SETTING_CONNECTION_PERMISSIONS, "", "",
+ DBUS_TYPE_G_LIST_OF_STRING,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingConnection:autoconnect:
@@ -1247,14 +1210,12 @@ nm_setting_connection_class_init (NMSettingConnectionClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_AUTOCONNECT,
- g_param_spec_boolean (NM_SETTING_CONNECTION_AUTOCONNECT,
- "Autoconnect",
- "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.",
- TRUE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_FUZZY_IGNORE));
+ g_param_spec_boolean (NM_SETTING_CONNECTION_AUTOCONNECT, "", "",
+ TRUE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingConnection:timestamp:
@@ -1269,16 +1230,12 @@ nm_setting_connection_class_init (NMSettingConnectionClass *setting_class)
**/
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. 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_param_spec_uint64 (NM_SETTING_CONNECTION_TIMESTAMP, "", "",
0, G_MAXUINT64, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_FUZZY_IGNORE));
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingConnection:read-only:
@@ -1288,15 +1245,13 @@ nm_setting_connection_class_init (NMSettingConnectionClass *setting_class)
* connection is read-only and cannot be modified.
**/
g_object_class_install_property
- (object_class, PROP_READ_ONLY,
- g_param_spec_boolean (NM_SETTING_CONNECTION_READ_ONLY,
- "Read-Only",
- "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.",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_FUZZY_IGNORE));
+ (object_class, PROP_READ_ONLY,
+ g_param_spec_boolean (NM_SETTING_CONNECTION_READ_ONLY, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingConnection:zone:
@@ -1308,16 +1263,12 @@ nm_setting_connection_class_init (NMSettingConnectionClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_ZONE,
- g_param_spec_string (NM_SETTING_CONNECTION_ZONE,
- "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.",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_FUZZY_IGNORE));
+ g_param_spec_string (NM_SETTING_CONNECTION_ZONE, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingConnection:master:
@@ -1326,12 +1277,12 @@ nm_setting_connection_class_init (NMSettingConnectionClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_MASTER,
- g_param_spec_string (NM_SETTING_CONNECTION_MASTER,
- "Master",
- "Interface name of the master device or UUID of "
- "the master connection",
+ g_param_spec_string (NM_SETTING_CONNECTION_MASTER, "", "",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_FUZZY_IGNORE | NM_SETTING_PARAM_INFERRABLE));
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingConnection:slave-type:
@@ -1342,13 +1293,12 @@ nm_setting_connection_class_init (NMSettingConnectionClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_SLAVE_TYPE,
- g_param_spec_string (NM_SETTING_CONNECTION_SLAVE_TYPE,
- "Slave-Type",
- "Setting name describing the type of slave "
- "this connection is (ie, 'bond') or NULL if this "
- "connection is not a slave.",
+ g_param_spec_string (NM_SETTING_CONNECTION_SLAVE_TYPE, "", "",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_FUZZY_IGNORE | NM_SETTING_PARAM_INFERRABLE));
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingConnection:secondaries:
@@ -1361,13 +1311,11 @@ nm_setting_connection_class_init (NMSettingConnectionClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_SECONDARIES,
- _nm_param_spec_specialized (NM_SETTING_CONNECTION_SECONDARIES,
- "Secondaries",
- "List of connection UUIDs that should be activated "
- "when the base connection itself is activated. "
- "Currently only VPN connections are supported.",
+ _nm_param_spec_specialized (NM_SETTING_CONNECTION_SECONDARIES, "", "",
DBUS_TYPE_G_LIST_OF_STRING,
- G_PARAM_READWRITE | NM_SETTING_PARAM_FUZZY_IGNORE));
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingConnection:gateway-ping-timeout:
@@ -1379,11 +1327,9 @@ nm_setting_connection_class_init (NMSettingConnectionClass *setting_class)
**/
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.",
+ g_param_spec_uint (NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT, "", "",
0, 30, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
}
diff --git a/libnm-util/nm-setting-connection.h b/libnm-util/nm-setting-connection.h
index ff2af7a2c..143fa11d5 100644
--- a/libnm-util/nm-setting-connection.h
+++ b/libnm-util/nm-setting-connection.h
@@ -1,9 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Dan Williams <dcbw@redhat.com>
- * Tambet Ingo <tambet@gmail.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
@@ -19,8 +16,8 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2014 Red Hat, Inc.
- * (C) Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2014 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
*/
#ifndef NM_SETTING_CONNECTION_H
@@ -136,7 +133,7 @@ gboolean nm_setting_connection_remove_permission_by_value (NMSettingConnectio
const char *nm_setting_connection_get_master (NMSettingConnection *setting);
gboolean nm_setting_connection_is_slave_type (NMSettingConnection *setting,
- const char *type);
+ const char *type);
const char *nm_setting_connection_get_slave_type (NMSettingConnection *setting);
guint32 nm_setting_connection_get_num_secondaries (NMSettingConnection *setting);
diff --git a/libnm-util/nm-setting-dcb.c b/libnm-util/nm-setting-dcb.c
index 54b115dd4..2376581e7 100644
--- a/libnm-util/nm-setting-dcb.c
+++ b/libnm-util/nm-setting-dcb.c
@@ -1,8 +1,6 @@
/* -*- 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
@@ -18,12 +16,14 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2013 Red Hat, Inc.
+ * Copyright 2013 Red Hat, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include <dbus/dbus-glib.h>
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
#include "nm-setting-dcb.h"
#include "nm-param-spec-specialized.h"
@@ -969,13 +969,10 @@ nm_setting_dcb_class_init (NMSettingDcbClass *setting_class)
**/
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).",
+ g_param_spec_uint (NM_SETTING_DCB_APP_FCOE_FLAGS, "", "",
0, DCB_FLAGS_ALL, 0,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingDcb:app-fcoe-priority:
@@ -988,14 +985,11 @@ nm_setting_dcb_class_init (NMSettingDcbClass *setting_class)
**/
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.",
+ g_param_spec_int (NM_SETTING_DCB_APP_FCOE_PRIORITY, "", "",
-1, 7, -1,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingDcb:app-fcoe-mode:
@@ -1007,12 +1001,11 @@ nm_setting_dcb_class_init (NMSettingDcbClass *setting_class)
**/
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'.",
+ g_param_spec_string (NM_SETTING_DCB_APP_FCOE_MODE, "", "",
NM_SETTING_DCB_FCOE_MODE_FABRIC,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingDcb:app-iscsi-flags:
@@ -1025,13 +1018,10 @@ nm_setting_dcb_class_init (NMSettingDcbClass *setting_class)
**/
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).",
+ g_param_spec_uint (NM_SETTING_DCB_APP_ISCSI_FLAGS, "", "",
0, DCB_FLAGS_ALL, 0,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingDcb:app-iscsi-priority:
@@ -1044,14 +1034,11 @@ nm_setting_dcb_class_init (NMSettingDcbClass *setting_class)
**/
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.",
+ g_param_spec_int (NM_SETTING_DCB_APP_ISCSI_PRIORITY, "", "",
-1, 7, -1,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingDcb:app-fip-flags:
@@ -1064,13 +1051,10 @@ nm_setting_dcb_class_init (NMSettingDcbClass *setting_class)
**/
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).",
+ g_param_spec_uint (NM_SETTING_DCB_APP_FIP_FLAGS, "", "",
0, DCB_FLAGS_ALL, 0,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingDcb:app-fip-priority:
@@ -1083,14 +1067,11 @@ nm_setting_dcb_class_init (NMSettingDcbClass *setting_class)
**/
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.",
+ g_param_spec_int (NM_SETTING_DCB_APP_FIP_PRIORITY, "", "",
-1, 7, -1,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingDcb:priority-flow-control-flags:
@@ -1103,13 +1084,10 @@ nm_setting_dcb_class_init (NMSettingDcbClass *setting_class)
**/
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).",
+ g_param_spec_uint (NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS, "", "",
0, DCB_FLAGS_ALL, 0,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingDcb:priority-flow-control:
@@ -1123,16 +1101,10 @@ nm_setting_dcb_class_init (NMSettingDcbClass *setting_class)
**/
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).",
+ _nm_param_spec_specialized (NM_SETTING_DCB_PRIORITY_FLOW_CONTROL, "", "",
DBUS_TYPE_G_UINT_ARRAY,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingDcb:priority-group-flags:
@@ -1145,13 +1117,10 @@ nm_setting_dcb_class_init (NMSettingDcbClass *setting_class)
**/
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).",
+ g_param_spec_uint (NM_SETTING_DCB_PRIORITY_GROUP_FLAGS, "", "",
0, DCB_FLAGS_ALL, 0,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingDcb:priority-group-id:
@@ -1164,15 +1133,10 @@ nm_setting_dcb_class_init (NMSettingDcbClass *setting_class)
**/
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.",
+ _nm_param_spec_specialized (NM_SETTING_DCB_PRIORITY_GROUP_ID, "", "",
DBUS_TYPE_G_UINT_ARRAY,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingDcb:priority-group-bandwidth:
@@ -1186,15 +1150,10 @@ nm_setting_dcb_class_init (NMSettingDcbClass *setting_class)
**/
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.",
+ _nm_param_spec_specialized (NM_SETTING_DCB_PRIORITY_GROUP_BANDWIDTH, "", "",
DBUS_TYPE_G_UINT_ARRAY,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingDcb:priority-bandwidth:
@@ -1209,16 +1168,10 @@ nm_setting_dcb_class_init (NMSettingDcbClass *setting_class)
**/
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.",
+ _nm_param_spec_specialized (NM_SETTING_DCB_PRIORITY_BANDWIDTH, "", "",
DBUS_TYPE_G_UINT_ARRAY,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingDcb:priority-strict-bandwidth:
@@ -1233,17 +1186,10 @@ nm_setting_dcb_class_init (NMSettingDcbClass *setting_class)
**/
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).",
+ _nm_param_spec_specialized (NM_SETTING_DCB_PRIORITY_STRICT_BANDWIDTH, "", "",
DBUS_TYPE_G_UINT_ARRAY,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingDcb:priority-traffic-class:
@@ -1256,13 +1202,8 @@ nm_setting_dcb_class_init (NMSettingDcbClass *setting_class)
**/
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.",
+ _nm_param_spec_specialized (NM_SETTING_DCB_PRIORITY_TRAFFIC_CLASS, "", "",
DBUS_TYPE_G_UINT_ARRAY,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
}
-
diff --git a/libnm-util/nm-setting-dcb.h b/libnm-util/nm-setting-dcb.h
index 37dd36e7b..ac34521e0 100644
--- a/libnm-util/nm-setting-dcb.h
+++ b/libnm-util/nm-setting-dcb.h
@@ -1,8 +1,6 @@
/* -*- 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
@@ -18,7 +16,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2013 Red Hat, Inc.
+ * Copyright 2013 Red Hat, Inc.
*/
#ifndef NM_SETTING_DCB_H
diff --git a/libnm-util/nm-setting-gsm.c b/libnm-util/nm-setting-gsm.c
index f96a997b8..a17d18b7e 100644
--- a/libnm-util/nm-setting-gsm.c
+++ b/libnm-util/nm-setting-gsm.c
@@ -1,9 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Dan Williams <dcbw@redhat.com>
- * Tambet Ingo <tambet@gmail.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
@@ -19,12 +16,14 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2013 Red Hat, Inc.
- * (C) Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2013 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
*/
+#include "config.h"
+
#include <string.h>
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
#include "nm-setting-gsm.h"
#include "nm-utils.h"
@@ -424,7 +423,7 @@ finalize (GObject *object)
static void
set_property (GObject *object, guint prop_id,
- const GValue *value, GParamSpec *pspec)
+ const GValue *value, GParamSpec *pspec)
{
NMSettingGsmPrivate *priv = NM_SETTING_GSM_GET_PRIVATE (object);
char *tmp;
@@ -483,7 +482,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)
{
NMSettingGsm *setting = NM_SETTING_GSM (object);
@@ -554,16 +553,10 @@ nm_setting_gsm_class_init (NMSettingGsmClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_NUMBER,
- g_param_spec_string (NM_SETTING_GSM_NUMBER,
- "Number",
- "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.",
- NULL,
- G_PARAM_READWRITE));
+ g_param_spec_string (NM_SETTING_GSM_NUMBER, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingGsm:username:
@@ -574,13 +567,10 @@ nm_setting_gsm_class_init (NMSettingGsmClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_USERNAME,
- g_param_spec_string (NM_SETTING_GSM_USERNAME,
- "Username",
- "Username used to authenticate with the network, if "
- "required. Note that many providers do not require "
- "a username or accept any username.",
- NULL,
- G_PARAM_READWRITE));
+ g_param_spec_string (NM_SETTING_GSM_USERNAME, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingGsm:password:
@@ -591,27 +581,25 @@ nm_setting_gsm_class_init (NMSettingGsmClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_PASSWORD,
- g_param_spec_string (NM_SETTING_GSM_PASSWORD,
- "Password",
- "Password used to authenticate with the network, if "
- "required. Note that many providers do not require "
- "a password or accept any password.",
- NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SECRET));
+ g_param_spec_string (NM_SETTING_GSM_PASSWORD, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_SECRET |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingGsm:password-flags:
*
* 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,
- "Password Flags",
- "Flags indicating how to handle the GSM password.",
+ g_object_class_install_property
+ (object_class, PROP_PASSWORD_FLAGS,
+ g_param_spec_uint (NM_SETTING_GSM_PASSWORD_FLAGS, "", "",
NM_SETTING_SECRET_FLAG_NONE,
NM_SETTING_SECRET_FLAGS_ALL,
NM_SETTING_SECRET_FLAG_NONE,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingGsm:apn:
@@ -626,19 +614,10 @@ nm_setting_gsm_class_init (NMSettingGsmClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_APN,
- g_param_spec_string (NM_SETTING_GSM_APN,
- "APN",
- "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.",
- NULL,
- G_PARAM_READWRITE));
+ g_param_spec_string (NM_SETTING_GSM_APN, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingGsm:network-id:
@@ -651,17 +630,10 @@ nm_setting_gsm_class_init (NMSettingGsmClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_NETWORK_ID,
- g_param_spec_string (NM_SETTING_GSM_NETWORK_ID,
- "Network ID",
- "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.",
- NULL,
- G_PARAM_READWRITE));
+ g_param_spec_string (NM_SETTING_GSM_NETWORK_ID, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingGsm:network-type:
@@ -681,19 +653,13 @@ nm_setting_gsm_class_init (NMSettingGsmClass *setting_class)
**/
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. "
- "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.",
+ g_param_spec_int (NM_SETTING_GSM_NETWORK_TYPE, "", "",
NM_SETTING_GSM_NETWORK_TYPE_ANY,
NM_SETTING_GSM_NETWORK_TYPE_4G,
NM_SETTING_GSM_NETWORK_TYPE_ANY,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingGsm:allowed-bands:
@@ -707,16 +673,13 @@ nm_setting_gsm_class_init (NMSettingGsmClass *setting_class)
**/
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."
- "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.",
+ g_param_spec_uint (NM_SETTING_GSM_ALLOWED_BANDS, "", "",
NM_SETTING_GSM_BAND_UNKNOWN,
NM_SETTING_GSM_BANDS_MAX,
NM_SETTING_GSM_BAND_ANY,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingGsm:pin:
@@ -727,27 +690,25 @@ nm_setting_gsm_class_init (NMSettingGsmClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_PIN,
- g_param_spec_string (NM_SETTING_GSM_PIN,
- "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.",
- NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SECRET));
+ g_param_spec_string (NM_SETTING_GSM_PIN, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_SECRET |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingGsm:pin-flags:
*
* 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,
- "PIN Flags",
- "Flags indicating how to handle the GSM SIM PIN.",
+ g_object_class_install_property
+ (object_class, PROP_PIN_FLAGS,
+ g_param_spec_uint (NM_SETTING_GSM_PIN_FLAGS, "", "",
NM_SETTING_SECRET_FLAG_NONE,
NM_SETTING_SECRET_FLAGS_ALL,
NM_SETTING_SECRET_FLAG_NONE,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingGsm:home-only:
@@ -757,11 +718,8 @@ nm_setting_gsm_class_init (NMSettingGsmClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_HOME_ONLY,
- g_param_spec_boolean (NM_SETTING_GSM_HOME_ONLY,
- "Home Only",
- "When TRUE, only connections to the home network will "
- "be allowed. Connections to roaming networks will "
- "not be made.",
- FALSE,
- G_PARAM_READWRITE));
+ g_param_spec_boolean (NM_SETTING_GSM_HOME_ONLY, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
}
diff --git a/libnm-util/nm-setting-gsm.h b/libnm-util/nm-setting-gsm.h
index 6d8e46d0a..564a8b4b9 100644
--- a/libnm-util/nm-setting-gsm.h
+++ b/libnm-util/nm-setting-gsm.h
@@ -1,9 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Dan Williams <dcbw@redhat.com>
- * Tambet Ingo <tambet@gmail.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
@@ -19,8 +16,8 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2011 Red Hat, Inc.
- * (C) Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2011 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
*/
#ifndef NM_SETTING_GSM_H
diff --git a/libnm-util/nm-setting-infiniband.c b/libnm-util/nm-setting-infiniband.c
index 5af504483..1036702fe 100644
--- a/libnm-util/nm-setting-infiniband.c
+++ b/libnm-util/nm-setting-infiniband.c
@@ -19,10 +19,12 @@
* Copyright 2011 - 2013 Red Hat, Inc.
*/
+#include "config.h"
+
#include <stdlib.h>
#include <dbus/dbus-glib.h>
#include <linux/if_infiniband.h>
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
#include "nm-setting-infiniband.h"
#include "nm-param-spec-specialized.h"
@@ -194,6 +196,7 @@ get_virtual_iface_name (NMSetting *setting)
static gboolean
verify (NMSetting *setting, GSList *all_settings, GError **error)
{
+ NMSettingConnection *s_con;
NMSettingInfinibandPrivate *priv = NM_SETTING_INFINIBAND_GET_PRIVATE (setting);
if (priv->mac_address && priv->mac_address->len != INFINIBAND_ALEN) {
@@ -205,6 +208,7 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
return FALSE;
}
+ /* FIXME: verify() should not modify the setting, but return NORMALIZABLE success. */
if (!g_strcmp0 (priv->transport_mode, "datagram")) {
if (priv->mtu > 2044)
priv->mtu = 2044;
@@ -249,6 +253,45 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
}
}
+ s_con = NM_SETTING_CONNECTION (nm_setting_find_in_list (all_settings, NM_SETTING_CONNECTION_SETTING_NAME));
+ if (s_con) {
+ const char *interface_name = nm_setting_connection_get_interface_name (s_con);
+
+ if (!interface_name)
+ ;
+ else if (!nm_utils_iface_valid_name (interface_name)) {
+ /* report the error for NMSettingConnection:interface-name, because
+ * it's that property that is invalid -- although we currently verify()
+ * NMSettingInfiniband.
+ **/
+ g_set_error (error,
+ NM_SETTING_CONNECTION_ERROR,
+ NM_SETTING_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("'%s' is not a valid interface name"),
+ interface_name);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_INTERFACE_NAME);
+ return FALSE;
+ } else {
+ if (priv->p_key != -1) {
+ if (!priv->virtual_iface_name)
+ priv->virtual_iface_name = g_strdup_printf ("%s.%04x", priv->parent, priv->p_key);
+
+ if (strcmp (interface_name, priv->virtual_iface_name) != 0) {
+ /* We don't support renaming software infiniband devices. Later we might, but
+ * for now just reject such connections.
+ **/
+ g_set_error (error,
+ NM_SETTING_CONNECTION_ERROR,
+ NM_SETTING_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("interface name of software infiniband device must be '%s' or unset (instead it is '%s')"),
+ priv->virtual_iface_name, interface_name);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_INTERFACE_NAME);
+ return FALSE;
+ }
+ }
+ }
+ }
+
return TRUE;
}
@@ -359,14 +402,11 @@ nm_setting_infiniband_class_init (NMSettingInfinibandClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_MAC_ADDRESS,
- _nm_param_spec_specialized (NM_SETTING_INFINIBAND_MAC_ADDRESS,
- "Device 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).",
+ _nm_param_spec_specialized (NM_SETTING_INFINIBAND_MAC_ADDRESS, "", "",
DBUS_TYPE_G_UCHAR_ARRAY,
- G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingInfiniband:mtu:
@@ -376,13 +416,12 @@ nm_setting_infiniband_class_init (NMSettingInfinibandClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_MTU,
- g_param_spec_uint (NM_SETTING_INFINIBAND_MTU,
- "MTU",
- "If non-zero, only transmit packets of the specified "
- "size or smaller, breaking larger packets up into "
- "multiple frames.",
+ g_param_spec_uint (NM_SETTING_INFINIBAND_MTU, "", "",
0, G_MAXUINT32, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_FUZZY_IGNORE));
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingInfiniband:transport-mode:
@@ -392,11 +431,12 @@ nm_setting_infiniband_class_init (NMSettingInfinibandClass *setting_class)
**/
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'.",
+ g_param_spec_string (NM_SETTING_INFINIBAND_TRANSPORT_MODE, "", "",
NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_INFERRABLE));
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingInfiniband:p-key:
@@ -408,12 +448,12 @@ nm_setting_infiniband_class_init (NMSettingInfinibandClass *setting_class)
**/
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.",
+ g_param_spec_int (NM_SETTING_INFINIBAND_P_KEY, "", "",
-1, 0xFFFF, -1,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_INFERRABLE));
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingInfiniband:parent:
@@ -425,10 +465,11 @@ nm_setting_infiniband_class_init (NMSettingInfinibandClass *setting_class)
**/
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",
+ g_param_spec_string (NM_SETTING_INFINIBAND_PARENT, "", "",
NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_INFERRABLE));
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
}
diff --git a/libnm-util/nm-setting-ip4-config.c b/libnm-util/nm-setting-ip4-config.c
index a2c104d53..532231ab4 100644
--- a/libnm-util/nm-setting-ip4-config.c
+++ b/libnm-util/nm-setting-ip4-config.c
@@ -1,9 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Dan Williams <dcbw@redhat.com>
- * Tambet Ingo <tambet@gmail.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
@@ -19,13 +16,15 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2014 Red Hat, Inc.
- * (C) Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2014 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include <dbus/dbus-glib.h>
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
#include "nm-setting-ip4-config.h"
#include "nm-param-spec-specialized.h"
@@ -78,8 +77,8 @@ 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 */
+ gint64 route_metric;
gboolean ignore_auto_routes;
gboolean ignore_auto_dns;
char *dhcp_client_id;
@@ -95,8 +94,8 @@ enum {
PROP_DNS,
PROP_DNS_SEARCH,
PROP_ADDRESSES,
- PROP_ADDRESS_LABELS,
PROP_ROUTES,
+ PROP_ROUTE_METRIC,
PROP_IGNORE_AUTO_ROUTES,
PROP_IGNORE_AUTO_DNS,
PROP_DHCP_CLIENT_ID,
@@ -442,19 +441,6 @@ 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
@@ -470,14 +456,6 @@ 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;
@@ -493,8 +471,6 @@ nm_setting_ip4_config_add_address_with_label (NMSettingIP4Config *setting,
copy = nm_ip4_address_dup (address);
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;
}
@@ -510,21 +486,16 @@ void
nm_setting_ip4_config_remove_address (NMSettingIP4Config *setting, guint32 i)
{
NMSettingIP4ConfigPrivate *priv;
- GSList *addr, *label;
+ GSList *elt;
g_return_if_fail (NM_IS_SETTING_IP4_CONFIG (setting));
priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting);
- 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);
+ elt = g_slist_nth (priv->addresses, i);
+ g_return_if_fail (elt != NULL);
+ 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);
}
@@ -576,8 +547,6 @@ nm_setting_ip4_config_clear_addresses (NMSettingIP4Config *setting)
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);
}
@@ -724,6 +693,26 @@ nm_setting_ip4_config_clear_routes (NMSettingIP4Config *setting)
}
/**
+ * nm_setting_ip4_config_get_route_metric:
+ * @setting: the #NMSettingIP4Config
+ *
+ * Returns the value contained in the #NMSettingIP4Config:route-metric
+ * property.
+ *
+ * Returns: the route metric that is used for IPv4 routes that don't explicitly
+ * specify a metric. See #NMSettingIP4Config:route-metric for more details.
+ *
+ * Since: 1.0
+ **/
+gint64
+nm_setting_ip4_config_get_route_metric (NMSettingIP4Config *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_IP4_CONFIG (setting), -1);
+
+ return NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting)->route_metric;
+}
+
+/**
* nm_setting_ip4_config_get_ignore_auto_routes:
* @setting: the #NMSettingIP4Config
*
@@ -850,34 +839,10 @@ nm_setting_ip4_config_get_may_fail (NMSettingIP4Config *setting)
}
static gboolean
-verify_label (const char *label)
-{
- 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);
-
- 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, *l_iter;
+ GSList *iter;
int i;
if (!priv->method) {
@@ -964,11 +929,8 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
}
/* Validate addresses */
- 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++) {
+ for (iter = priv->addresses, i = 0; iter; iter = g_slist_next (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)) {
@@ -990,27 +952,6 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
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 */
@@ -1066,7 +1007,6 @@ finalize (GObject *object)
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);
@@ -1074,11 +1014,10 @@ finalize (GObject *object)
static void
set_property (GObject *object, guint prop_id,
- const GValue *value, GParamSpec *pspec)
+ const GValue *value, GParamSpec *pspec)
{
NMSettingIP4Config *setting = NM_SETTING_IP4_CONFIG (object);
NMSettingIP4ConfigPrivate *priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting);
- GSList *iter;
switch (prop_id) {
case PROP_METHOD:
@@ -1098,29 +1037,14 @@ set_property (GObject *object, guint prop_id,
case PROP_ADDRESSES:
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:
g_slist_free_full (priv->routes, (GDestroyNotify) nm_ip4_route_unref);
priv->routes = nm_utils_ip4_routes_from_gvalue (value);
break;
+ case PROP_ROUTE_METRIC:
+ priv->route_metric = g_value_get_int64 (value);
+ break;
case PROP_IGNORE_AUTO_ROUTES:
priv->ignore_auto_routes = g_value_get_boolean (value);
break;
@@ -1152,7 +1076,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)
{
NMSettingIP4Config *setting = NM_SETTING_IP4_CONFIG (object);
NMSettingIP4ConfigPrivate *priv = NM_SETTING_IP4_CONFIG_GET_PRIVATE (setting);
@@ -1170,12 +1094,12 @@ 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;
+ case PROP_ROUTE_METRIC:
+ g_value_set_int64 (value, priv->route_metric);
+ break;
case PROP_IGNORE_AUTO_ROUTES:
g_value_set_boolean (value, nm_setting_ip4_config_get_ignore_auto_routes (setting));
break;
@@ -1236,27 +1160,11 @@ nm_setting_ip4_config_class_init (NMSettingIP4ConfigClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_METHOD,
- g_param_spec_string (NM_SETTING_IP4_CONFIG_METHOD,
- "Method",
- "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.",
- NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
+ g_param_spec_string (NM_SETTING_IP4_CONFIG_METHOD, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingIP4Config:dns:
@@ -1270,18 +1178,10 @@ nm_setting_ip4_config_class_init (NMSettingIP4ConfigClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_DNS,
- _nm_param_spec_specialized (NM_SETTING_IP4_CONFIG_DNS,
- "DNS",
- "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.",
- DBUS_TYPE_G_UINT_ARRAY,
- G_PARAM_READWRITE));
+ _nm_param_spec_specialized (NM_SETTING_IP4_CONFIG_DNS, "", "",
+ DBUS_TYPE_G_UINT_ARRAY,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingIP4Config:dns-search:
@@ -1294,18 +1194,10 @@ nm_setting_ip4_config_class_init (NMSettingIP4ConfigClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_DNS_SEARCH,
- _nm_param_spec_specialized (NM_SETTING_IP4_CONFIG_DNS_SEARCH,
- "DNS search",
- "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.",
- DBUS_TYPE_G_LIST_OF_STRING,
- G_PARAM_READWRITE));
+ _nm_param_spec_specialized (NM_SETTING_IP4_CONFIG_DNS_SEARCH, "", "",
+ DBUS_TYPE_G_LIST_OF_STRING,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingIP4Config:addresses:
@@ -1321,35 +1213,11 @@ nm_setting_ip4_config_class_init (NMSettingIP4ConfigClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_ADDRESSES,
- _nm_param_spec_specialized (NM_SETTING_IP4_CONFIG_ADDRESSES,
- "Addresses",
- "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.",
- DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UINT,
- 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));
+ _nm_param_spec_specialized (NM_SETTING_IP4_CONFIG_ADDRESSES, "", "",
+ DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UINT,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingIP4Config:routes:
@@ -1365,22 +1233,33 @@ nm_setting_ip4_config_class_init (NMSettingIP4ConfigClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_ROUTES,
- _nm_param_spec_specialized (NM_SETTING_IP4_CONFIG_ROUTES,
- "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 "
- "as there is no upstream network.",
- DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UINT,
- G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
+ _nm_param_spec_specialized (NM_SETTING_IP4_CONFIG_ROUTES, "", "",
+ DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UINT,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingIP4Config:route-metric:
+ *
+ * The default metric for routes that don't explicitly specify a metric.
+ * The default value -1 means that the metric is choosen automatically
+ * based on the device type.
+ * The metric applies to dynamic routes, manual (static) routes that
+ * don't have an explicit metric setting, address prefix routes, and
+ * the default route.
+ * As the linux kernel accepts zero (0) as a valid metric, zero is
+ * a valid value.
+ *
+ * Since: 1.0
+ **/
+ g_object_class_install_property
+ (object_class, PROP_ROUTE_METRIC,
+ g_param_spec_int64 (NM_SETTING_IP4_CONFIG_ROUTE_METRIC, "", "",
+ -1, G_MAXUINT32, -1,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingIP4Config:ignore-auto-routes:
@@ -1391,14 +1270,11 @@ nm_setting_ip4_config_class_init (NMSettingIP4ConfigClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_IGNORE_AUTO_ROUTES,
- g_param_spec_boolean (NM_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES,
- "Ignore automatic routes",
- "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.",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_param_spec_boolean (NM_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingIP4Config:ignore-auto-dns:
@@ -1411,15 +1287,11 @@ nm_setting_ip4_config_class_init (NMSettingIP4ConfigClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_IGNORE_AUTO_DNS,
- g_param_spec_boolean (NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS,
- "Ignore automatic 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 the 'dns' and 'dns-search' "
- "properties, if any, are used.",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_param_spec_boolean (NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingIP4Config:dhcp-client-id:
@@ -1429,13 +1301,10 @@ nm_setting_ip4_config_class_init (NMSettingIP4ConfigClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_DHCP_CLIENT_ID,
- g_param_spec_string (NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID,
- "DHCP Client ID",
- "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.",
- NULL,
- G_PARAM_READWRITE));
+ g_param_spec_string (NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingIP4Config:dhcp-send-hostname:
@@ -1448,17 +1317,11 @@ nm_setting_ip4_config_class_init (NMSettingIP4ConfigClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_DHCP_SEND_HOSTNAME,
- g_param_spec_boolean (NM_SETTING_IP4_CONFIG_DHCP_SEND_HOSTNAME,
- "Send DHCP hostname",
- "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.",
- TRUE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_param_spec_boolean (NM_SETTING_IP4_CONFIG_DHCP_SEND_HOSTNAME, "", "",
+ TRUE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingIP4Config:dhcp-hostname:
@@ -1468,13 +1331,11 @@ nm_setting_ip4_config_class_init (NMSettingIP4ConfigClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_DHCP_HOSTNAME,
- g_param_spec_string (NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME,
- "DHCP Hostname",
- "If the 'dhcp-send-hostname' property is TRUE, then "
- "the specified name will be sent to the DHCP server "
- "when acquiring a lease.",
- NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
+ g_param_spec_string (NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingIP4Config:never-default:
@@ -1484,13 +1345,11 @@ nm_setting_ip4_config_class_init (NMSettingIP4ConfigClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_NEVER_DEFAULT,
- g_param_spec_boolean (NM_SETTING_IP4_CONFIG_NEVER_DEFAULT,
- "Never default",
- "If TRUE, this connection will never be the default "
- "IPv4 connection, meaning it will never be assigned "
- "the default route by NetworkManager.",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_param_spec_boolean (NM_SETTING_IP4_CONFIG_NEVER_DEFAULT, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingIP4Config:may-fail:
@@ -1504,18 +1363,11 @@ nm_setting_ip4_config_class_init (NMSettingIP4ConfigClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_MAY_FAIL,
- g_param_spec_boolean (NM_SETTING_IP4_CONFIG_MAY_FAIL,
- "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.",
- TRUE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_param_spec_boolean (NM_SETTING_IP4_CONFIG_MAY_FAIL, "", "",
+ TRUE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
}
@@ -1977,4 +1829,3 @@ nm_ip4_route_set_metric (NMIP4Route *route, guint32 metric)
route->metric = metric;
}
-
diff --git a/libnm-util/nm-setting-ip4-config.h b/libnm-util/nm-setting-ip4-config.h
index 3f0d006bf..6e9a9a227 100644
--- a/libnm-util/nm-setting-ip4-config.h
+++ b/libnm-util/nm-setting-ip4-config.h
@@ -1,9 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Dan Williams <dcbw@redhat.com>
- * Tambet Ingo <tambet@gmail.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
@@ -19,8 +16,8 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2014 Red Hat, Inc.
- * (C) Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2014 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
*/
#ifndef NM_SETTING_IP4_CONFIG_H
@@ -63,6 +60,7 @@ GQuark nm_setting_ip4_config_error_quark (void);
#define NM_SETTING_IP4_CONFIG_DNS_SEARCH "dns-search"
#define NM_SETTING_IP4_CONFIG_ADDRESSES "addresses"
#define NM_SETTING_IP4_CONFIG_ROUTES "routes"
+#define NM_SETTING_IP4_CONFIG_ROUTE_METRIC "route-metric"
#define NM_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES "ignore-auto-routes"
#define NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS "ignore-auto-dns"
#define NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID "dhcp-client-id"
@@ -217,6 +215,9 @@ 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);
+NM_AVAILABLE_IN_1_0
+gint64 nm_setting_ip4_config_get_route_metric (NMSettingIP4Config *setting);
+
gboolean nm_setting_ip4_config_get_ignore_auto_routes (NMSettingIP4Config *setting);
gboolean nm_setting_ip4_config_get_ignore_auto_dns (NMSettingIP4Config *setting);
const char * nm_setting_ip4_config_get_dhcp_client_id (NMSettingIP4Config *setting);
diff --git a/libnm-util/nm-setting-ip6-config.c b/libnm-util/nm-setting-ip6-config.c
index b027ee96a..654f04962 100644
--- a/libnm-util/nm-setting-ip6-config.c
+++ b/libnm-util/nm-setting-ip6-config.c
@@ -1,9 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Dan Williams <dcbw@redhat.com>
- * David Cantrell <dcantrel@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
@@ -19,12 +16,14 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2014 Red Hat, Inc.
+ * Copyright 2007 - 2014 Red Hat, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include <dbus/dbus-glib.h>
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
#include "nm-setting-ip6-config.h"
#include "nm-param-spec-specialized.h"
@@ -78,6 +77,7 @@ typedef struct {
GSList *dns_search; /* list of strings */
GSList *addresses; /* array of NMIP6Address */
GSList *routes; /* array of NMIP6Route */
+ gint64 route_metric;
gboolean ignore_auto_routes;
gboolean ignore_auto_dns;
gboolean never_default;
@@ -94,6 +94,7 @@ enum {
PROP_DNS_SEARCH,
PROP_ADDRESSES,
PROP_ROUTES,
+ PROP_ROUTE_METRIC,
PROP_IGNORE_AUTO_ROUTES,
PROP_IGNORE_AUTO_DNS,
PROP_NEVER_DEFAULT,
@@ -174,7 +175,7 @@ const struct in6_addr *
nm_setting_ip6_config_get_dns (NMSettingIP6Config *setting, guint32 i)
{
NMSettingIP6ConfigPrivate *priv;
-
+
g_return_val_if_fail (NM_IS_SETTING_IP6_CONFIG (setting), NULL);
@@ -712,6 +713,26 @@ nm_setting_ip6_config_clear_routes (NMSettingIP6Config *setting)
}
/**
+ * nm_setting_ip6_config_get_route_metric:
+ * @setting: the #NMSettingIP6Config
+ *
+ * Returns the value contained in the #NMSettingIP6Config:route-metric
+ * property.
+ *
+ * Returns: the route metric that is used for IPv6 routes that don't explicitly
+ * specify a metric. See #NMSettingIP6Config:route-metric for more details.
+ *
+ * Since: 1.0
+ **/
+gint64
+nm_setting_ip6_config_get_route_metric (NMSettingIP6Config *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_IP6_CONFIG (setting), -1);
+
+ return NM_SETTING_IP6_CONFIG_GET_PRIVATE (setting)->route_metric;
+}
+
+/**
* nm_setting_ip6_config_get_ignore_auto_routes:
* @setting: the #NMSettingIP6Config
*
@@ -905,7 +926,7 @@ finalize (GObject *object)
static void
set_property (GObject *object, guint prop_id,
- const GValue *value, GParamSpec *pspec)
+ const GValue *value, GParamSpec *pspec)
{
NMSettingIP6ConfigPrivate *priv = NM_SETTING_IP6_CONFIG_GET_PRIVATE (object);
@@ -930,6 +951,9 @@ set_property (GObject *object, guint prop_id,
g_slist_free_full (priv->routes, g_free);
priv->routes = nm_utils_ip6_routes_from_gvalue (value);
break;
+ case PROP_ROUTE_METRIC:
+ priv->route_metric = g_value_get_int64 (value);
+ break;
case PROP_IGNORE_AUTO_ROUTES:
priv->ignore_auto_routes = g_value_get_boolean (value);
break;
@@ -957,7 +981,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)
{
NMSettingIP6ConfigPrivate *priv = NM_SETTING_IP6_CONFIG_GET_PRIVATE (object);
@@ -977,6 +1001,9 @@ get_property (GObject *object, guint prop_id,
case PROP_ROUTES:
nm_utils_ip6_routes_to_gvalue (priv->routes, value);
break;
+ case PROP_ROUTE_METRIC:
+ g_value_set_int64 (value, priv->route_metric);
+ break;
case PROP_IGNORE_AUTO_ROUTES:
g_value_set_boolean (value, priv->ignore_auto_routes);
break;
@@ -1032,24 +1059,11 @@ nm_setting_ip6_config_class_init (NMSettingIP6ConfigClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_METHOD,
- g_param_spec_string (NM_SETTING_IP6_CONFIG_METHOD,
- "Method",
- "IPv6 configuration method. If 'auto' is specified "
- "then the appropriate automatic method (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.",
- NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
+ g_param_spec_string (NM_SETTING_IP6_CONFIG_METHOD, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingIP6Config:dhcp-hostname:
@@ -1061,12 +1075,10 @@ nm_setting_ip6_config_class_init (NMSettingIP6ConfigClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_DHCP_HOSTNAME,
- g_param_spec_string (NM_SETTING_IP6_CONFIG_DHCP_HOSTNAME,
- "DHCP Hostname",
- "The specified name will be sent to the DHCP server "
- "when acquiring a lease.",
+ g_param_spec_string (NM_SETTING_IP6_CONFIG_DHCP_HOSTNAME, "", "",
NULL,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingIP6Config:dns:
@@ -1081,20 +1093,10 @@ nm_setting_ip6_config_class_init (NMSettingIP6ConfigClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_DNS,
- _nm_param_spec_specialized (NM_SETTING_IP6_CONFIG_DNS,
- "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 this connection.",
- DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UCHAR,
- G_PARAM_READWRITE));
+ _nm_param_spec_specialized (NM_SETTING_IP6_CONFIG_DNS, "", "",
+ DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UCHAR,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingIP6Config:dns-search:
@@ -1107,18 +1109,10 @@ nm_setting_ip6_config_class_init (NMSettingIP6ConfigClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_DNS_SEARCH,
- _nm_param_spec_specialized (NM_SETTING_IP6_CONFIG_DNS_SEARCH,
- "DNS search",
- "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.",
- DBUS_TYPE_G_LIST_OF_STRING,
- G_PARAM_READWRITE));
+ _nm_param_spec_specialized (NM_SETTING_IP6_CONFIG_DNS_SEARCH, "", "",
+ DBUS_TYPE_G_LIST_OF_STRING,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingIP6Config:addresses:
@@ -1136,25 +1130,11 @@ nm_setting_ip6_config_class_init (NMSettingIP6ConfigClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_ADDRESSES,
- _nm_param_spec_specialized (NM_SETTING_IP6_CONFIG_ADDRESSES,
- "Addresses",
- "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.",
- DBUS_TYPE_G_ARRAY_OF_IP6_ADDRESS,
- G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
+ _nm_param_spec_specialized (NM_SETTING_IP6_CONFIG_ADDRESSES, "", "",
+ DBUS_TYPE_G_ARRAY_OF_IP6_ADDRESS,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingIP6Config:routes:
@@ -1170,22 +1150,33 @@ nm_setting_ip6_config_class_init (NMSettingIP6ConfigClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_ROUTES,
- _nm_param_spec_specialized (NM_SETTING_IP6_CONFIG_ROUTES,
- "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 "
- "(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.",
- DBUS_TYPE_G_ARRAY_OF_IP6_ROUTE,
- G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
+ _nm_param_spec_specialized (NM_SETTING_IP6_CONFIG_ROUTES, "", "",
+ DBUS_TYPE_G_ARRAY_OF_IP6_ROUTE,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingIP6Config:route-metric:
+ *
+ * The default metric for routes that don't explicitly specify a metric.
+ * The default value -1 means that the metric is choosen automatically
+ * based on the device type.
+ * The metric applies to dynamic routes, manual (static) routes that
+ * don't have an explicit metric setting, address prefix routes, and
+ * the default route.
+ * As the linux kernel replaces zero (0) by 1024 (user-default), setting
+ * this property to 0 means effectively setting it to 1024.
+ *
+ * Since: 1.0
+ **/
+ g_object_class_install_property
+ (object_class, PROP_ROUTE_METRIC,
+ g_param_spec_int64 (NM_SETTING_IP6_CONFIG_ROUTE_METRIC, "", "",
+ -1, G_MAXUINT32, -1,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingIP6Config:ignore-auto-routes:
@@ -1196,14 +1187,11 @@ nm_setting_ip6_config_class_init (NMSettingIP6ConfigClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_IGNORE_AUTO_ROUTES,
- g_param_spec_boolean (NM_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES,
- "Ignore automatic routes",
- "When the method is set to 'auto' or 'dhcp' and this "
- "property is set to TRUE, automatically configured "
- "routes are ignored and only routes specified in the "
- "'routes' property, if any, are used.",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_param_spec_boolean (NM_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingIP6Config:ignore-auto-dns:
@@ -1216,15 +1204,11 @@ nm_setting_ip6_config_class_init (NMSettingIP6ConfigClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_IGNORE_AUTO_DNS,
- g_param_spec_boolean (NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS,
- "Ignore DHCPv6/RDNSS DNS",
- "When the method is set to 'auto' or 'dhcp' and this "
- "property is set to TRUE, automatically configured "
- "nameservers and search domains are ignored and only "
- "nameservers and search domains specified in the 'dns' "
- "and 'dns-search' properties, if any, are used.",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_param_spec_boolean (NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingIP6Config:never-default:
@@ -1235,13 +1219,11 @@ nm_setting_ip6_config_class_init (NMSettingIP6ConfigClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_NEVER_DEFAULT,
- g_param_spec_boolean (NM_SETTING_IP6_CONFIG_NEVER_DEFAULT,
- "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.",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_param_spec_boolean (NM_SETTING_IP6_CONFIG_NEVER_DEFAULT, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingIP6Config:may-fail:
@@ -1255,18 +1237,11 @@ nm_setting_ip6_config_class_init (NMSettingIP6ConfigClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_MAY_FAIL,
- g_param_spec_boolean (NM_SETTING_IP6_CONFIG_MAY_FAIL,
- "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.",
- TRUE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_param_spec_boolean (NM_SETTING_IP6_CONFIG_MAY_FAIL, "", "",
+ TRUE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingIP6Config:ip6-privacy:
@@ -1281,20 +1256,13 @@ nm_setting_ip6_config_class_init (NMSettingIP6ConfigClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_IP6_PRIVACY,
- g_param_spec_int (NM_SETTING_IP6_CONFIG_IP6_PRIVACY,
- "Configure IPv6 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).",
+ g_param_spec_int (NM_SETTING_IP6_CONFIG_IP6_PRIVACY, "", "",
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));
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
}
/********************************************************************/
diff --git a/libnm-util/nm-setting-ip6-config.h b/libnm-util/nm-setting-ip6-config.h
index d1f4ca842..0a2f00ddc 100644
--- a/libnm-util/nm-setting-ip6-config.h
+++ b/libnm-util/nm-setting-ip6-config.h
@@ -1,9 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Dan Williams <dcbw@redhat.com>
- * David Cantrell <dcantrel@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
@@ -19,7 +16,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2014 Red Hat, Inc.
+ * Copyright 2007 - 2014 Red Hat, Inc.
*/
#ifndef NM_SETTING_IP6_CONFIG_H
@@ -64,6 +61,7 @@ GQuark nm_setting_ip6_config_error_quark (void);
#define NM_SETTING_IP6_CONFIG_DNS_SEARCH "dns-search"
#define NM_SETTING_IP6_CONFIG_ADDRESSES "addresses"
#define NM_SETTING_IP6_CONFIG_ROUTES "routes"
+#define NM_SETTING_IP6_CONFIG_ROUTE_METRIC "route-metric"
#define NM_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES "ignore-auto-routes"
#define NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS "ignore-auto-dns"
#define NM_SETTING_IP6_CONFIG_NEVER_DEFAULT "never-default"
@@ -186,7 +184,7 @@ void nm_ip6_route_set_dest (NMIP6Route *route,
guint32 nm_ip6_route_get_prefix (NMIP6Route *route);
void nm_ip6_route_set_prefix (NMIP6Route *route,
- guint32 prefix);
+ guint32 prefix);
const struct in6_addr *nm_ip6_route_get_next_hop (NMIP6Route *route);
void nm_ip6_route_set_next_hop (NMIP6Route *route,
@@ -248,6 +246,9 @@ gboolean nm_setting_ip6_config_remove_route_by_value (NMSettingIP
void nm_setting_ip6_config_clear_routes (NMSettingIP6Config *setting);
gboolean nm_setting_ip6_config_get_ignore_auto_routes (NMSettingIP6Config *setting);
+NM_AVAILABLE_IN_1_0
+gint64 nm_setting_ip6_config_get_route_metric (NMSettingIP6Config *setting);
+
gboolean nm_setting_ip6_config_get_ignore_auto_dns (NMSettingIP6Config *setting);
const char * nm_setting_ip6_config_get_dhcp_hostname (NMSettingIP6Config *setting);
gboolean nm_setting_ip6_config_get_never_default (NMSettingIP6Config *setting);
diff --git a/libnm-util/nm-setting-olpc-mesh.c b/libnm-util/nm-setting-olpc-mesh.c
index d344fa043..e4b6dae5b 100644
--- a/libnm-util/nm-setting-olpc-mesh.c
+++ b/libnm-util/nm-setting-olpc-mesh.c
@@ -1,10 +1,5 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Dan Williams <dcbw@redhat.com>
- * Tambet Ingo <tambet@gmail.com>
- * Sjoerd Simons <sjoerd.simons@collabora.co.uk>
- * Daniel Drake <dsd@laptop.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
@@ -20,15 +15,17 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2013 Red Hat, Inc.
- * (C) Copyright 2007 - 2008 Novell, Inc.
- * (C) Copyright 2009 One Laptop per Child
+ * Copyright 2007 - 2013 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2009 One Laptop per Child
*/
+#include "config.h"
+
#include <string.h>
#include <netinet/ether.h>
#include <dbus/dbus-glib.h>
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
#include "NetworkManager.h"
#include "nm-setting-olpc-mesh.h"
@@ -175,7 +172,7 @@ finalize (GObject *object)
static void
set_property (GObject *object, guint prop_id,
- const GValue *value, GParamSpec *pspec)
+ const GValue *value, GParamSpec *pspec)
{
NMSettingOlpcMeshPrivate *priv = NM_SETTING_OLPC_MESH_GET_PRIVATE (object);
@@ -201,7 +198,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)
{
NMSettingOlpcMesh *setting = NM_SETTING_OLPC_MESH (object);
@@ -243,11 +240,11 @@ nm_setting_olpc_mesh_class_init (NMSettingOlpcMeshClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_SSID,
- _nm_param_spec_specialized (NM_SETTING_OLPC_MESH_SSID,
- "SSID",
- "SSID of the mesh network to join.",
+ _nm_param_spec_specialized (NM_SETTING_OLPC_MESH_SSID, "", "",
DBUS_TYPE_G_UCHAR_ARRAY,
- G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingOlpcMesh:channel:
@@ -256,11 +253,12 @@ nm_setting_olpc_mesh_class_init (NMSettingOlpcMeshClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_CHANNEL,
- g_param_spec_uint (NM_SETTING_OLPC_MESH_CHANNEL,
- "Channel",
- "Channel on which the mesh network to join is located.",
+ g_param_spec_uint (NM_SETTING_OLPC_MESH_CHANNEL, "", "",
0, G_MAXUINT32, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_INFERRABLE));
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingOlpcMesh:dhcp-anycast-address:
@@ -271,13 +269,8 @@ nm_setting_olpc_mesh_class_init (NMSettingOlpcMeshClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_DHCP_ANYCAST_ADDRESS,
- _nm_param_spec_specialized (NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS,
- "Anycast DHCP MAC address",
- "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.",
+ _nm_param_spec_specialized (NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS, "", "",
DBUS_TYPE_G_UCHAR_ARRAY,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
}
diff --git a/libnm-util/nm-setting-olpc-mesh.h b/libnm-util/nm-setting-olpc-mesh.h
index 59c03b485..54b268e2c 100644
--- a/libnm-util/nm-setting-olpc-mesh.h
+++ b/libnm-util/nm-setting-olpc-mesh.h
@@ -1,10 +1,5 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Dan Williams <dcbw@redhat.com>
- * Tambet Ingo <tambet@gmail.com>
- * Sjoerd Simons <sjoerd.simons@collabora.co.uk>
- * Daniel Drake <dsd@laptop.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
@@ -20,9 +15,9 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2008 Red Hat, Inc.
- * (C) Copyright 2007 - 2008 Novell, Inc.
- * (C) Copyright 2009 One Laptop per Child
+ * Copyright 2007 - 2008 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2009 One Laptop per Child
*/
#ifndef NM_SETTING_OLPC_MESH_H
diff --git a/libnm-util/nm-setting-ppp.c b/libnm-util/nm-setting-ppp.c
index 237af9c89..a01d3e106 100644
--- a/libnm-util/nm-setting-ppp.c
+++ b/libnm-util/nm-setting-ppp.c
@@ -1,9 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Dan Williams <dcbw@redhat.com>
- * Tambet Ingo <tambet@gmail.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
@@ -19,11 +16,13 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2013 Red Hat, Inc.
- * (C) Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2013 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
*/
-#include <glib/gi18n.h>
+#include "config.h"
+
+#include <glib/gi18n-lib.h>
#include "nm-setting-ppp.h"
#include "nm-setting-private.h"
@@ -417,7 +416,7 @@ nm_setting_ppp_init (NMSettingPPP *setting)
static void
set_property (GObject *object, guint prop_id,
- const GValue *value, GParamSpec *pspec)
+ const GValue *value, GParamSpec *pspec)
{
NMSettingPPPPrivate *priv = NM_SETTING_PPP_GET_PRIVATE (object);
@@ -484,7 +483,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)
{
NMSettingPPP *setting = NM_SETTING_PPP (object);
@@ -572,14 +571,11 @@ nm_setting_ppp_class_init (NMSettingPPPClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_NOAUTH,
- g_param_spec_boolean (NM_SETTING_PPP_NOAUTH,
- "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.",
- TRUE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_param_spec_boolean (NM_SETTING_PPP_NOAUTH, "", "",
+ TRUE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingPPP:refuse-eap:
@@ -588,11 +584,11 @@ nm_setting_ppp_class_init (NMSettingPPPClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_REFUSE_EAP,
- g_param_spec_boolean (NM_SETTING_PPP_REFUSE_EAP,
- "Refuse EAP",
- "If TRUE, the EAP authentication method will not be used.",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_param_spec_boolean (NM_SETTING_PPP_REFUSE_EAP, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingPPP:refuse-pap:
@@ -601,11 +597,11 @@ nm_setting_ppp_class_init (NMSettingPPPClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_REFUSE_PAP,
- g_param_spec_boolean (NM_SETTING_PPP_REFUSE_PAP,
- "Refuse PAP",
- "If TRUE, the PAP authentication method will not be used.",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_param_spec_boolean (NM_SETTING_PPP_REFUSE_PAP, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingPPP:refuse-chap:
@@ -614,11 +610,11 @@ nm_setting_ppp_class_init (NMSettingPPPClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_REFUSE_CHAP,
- g_param_spec_boolean (NM_SETTING_PPP_REFUSE_CHAP,
- "Refuse CHAP",
- "If TRUE, the CHAP authentication method will not be used.",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_param_spec_boolean (NM_SETTING_PPP_REFUSE_CHAP, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingPPP:refuse-mschap:
@@ -627,11 +623,11 @@ nm_setting_ppp_class_init (NMSettingPPPClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_REFUSE_MSCHAP,
- g_param_spec_boolean (NM_SETTING_PPP_REFUSE_MSCHAP,
- "Refuse MSCHAP",
- "If TRUE, the MSCHAP authentication method will not be used.",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_param_spec_boolean (NM_SETTING_PPP_REFUSE_MSCHAP, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingPPP:refuse-mschapv2:
@@ -640,11 +636,11 @@ nm_setting_ppp_class_init (NMSettingPPPClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_REFUSE_MSCHAPV2,
- g_param_spec_boolean (NM_SETTING_PPP_REFUSE_MSCHAPV2,
- "Refuse MSCHAPv2",
- "If TRUE, the MSCHAPv2 authentication method will not be used.",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_param_spec_boolean (NM_SETTING_PPP_REFUSE_MSCHAPV2, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingPPP:nobsdcomp:
@@ -653,11 +649,12 @@ nm_setting_ppp_class_init (NMSettingPPPClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_NOBSDCOMP,
- g_param_spec_boolean (NM_SETTING_PPP_NOBSDCOMP,
- "No BSD compression",
- "If TRUE, BSD compression will not be requested.",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_FUZZY_IGNORE));
+ g_param_spec_boolean (NM_SETTING_PPP_NOBSDCOMP, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingPPP:nodeflate:
@@ -666,11 +663,12 @@ nm_setting_ppp_class_init (NMSettingPPPClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_NODEFLATE,
- g_param_spec_boolean (NM_SETTING_PPP_NODEFLATE,
- "No deflate",
- "If TRUE, 'deflate' compression will not be requested.",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_FUZZY_IGNORE));
+ g_param_spec_boolean (NM_SETTING_PPP_NODEFLATE, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingPPP:no-vj-comp:
@@ -679,11 +677,12 @@ nm_setting_ppp_class_init (NMSettingPPPClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_NO_VJ_COMP,
- g_param_spec_boolean (NM_SETTING_PPP_NO_VJ_COMP,
- "No VJ compression",
- "If TRUE, Van Jacobsen TCP header compression will not be requested.",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_FUZZY_IGNORE));
+ g_param_spec_boolean (NM_SETTING_PPP_NO_VJ_COMP, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingPPP:require-mppe:
@@ -695,15 +694,11 @@ nm_setting_ppp_class_init (NMSettingPPPClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_REQUIRE_MPPE,
- g_param_spec_boolean (NM_SETTING_PPP_REQUIRE_MPPE,
- "Require MPPE",
- "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.",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_param_spec_boolean (NM_SETTING_PPP_REQUIRE_MPPE, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingPPP:require-mppe-128:
@@ -714,15 +709,10 @@ nm_setting_ppp_class_init (NMSettingPPPClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_REQUIRE_MPPE_128,
- g_param_spec_boolean (NM_SETTING_PPP_REQUIRE_MPPE_128,
- "Require MPPE 128",
- "If TRUE, 128-bit MPPE (Microsoft Point-to-Point "
- "Encrpytion) will be required for the PPP session, "
- "and the '" NM_SETTING_PPP_REQUIRE_MPPE "' property "
- "must also be set to TRUE. If 128-bit MPPE is not "
- "available the session will fail.",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_param_spec_boolean (NM_SETTING_PPP_REQUIRE_MPPE_128, "", "",
+ FALSE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingPPP:mppe-stateful:
@@ -732,12 +722,11 @@ nm_setting_ppp_class_init (NMSettingPPPClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_MPPE_STATEFUL,
- g_param_spec_boolean (NM_SETTING_PPP_MPPE_STATEFUL,
- "MPPE stateful",
- "If TRUE, stateful MPPE is used. See pppd documentation "
- "for more information on stateful MPPE.",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_param_spec_boolean (NM_SETTING_PPP_MPPE_STATEFUL, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingPPP:crtscts:
@@ -748,14 +737,11 @@ nm_setting_ppp_class_init (NMSettingPPPClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_CRTSCTS,
- g_param_spec_boolean (NM_SETTING_PPP_CRTSCTS,
- "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.",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_param_spec_boolean (NM_SETTING_PPP_CRTSCTS, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingPPP:baud:
@@ -766,13 +752,12 @@ nm_setting_ppp_class_init (NMSettingPPPClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_BAUD,
- g_param_spec_uint (NM_SETTING_PPP_BAUD,
- "Baud",
- "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.",
- 0, G_MAXUINT32, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_FUZZY_IGNORE));
+ g_param_spec_uint (NM_SETTING_PPP_BAUD, "", "",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingPPP:mru:
@@ -783,13 +768,11 @@ nm_setting_ppp_class_init (NMSettingPPPClass *setting_class)
*/
g_object_class_install_property
(object_class, PROP_MRU,
- g_param_spec_uint (NM_SETTING_PPP_MRU,
- "MRU",
- "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.",
- 0, 16384, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_param_spec_uint (NM_SETTING_PPP_MRU, "", "",
+ 0, 16384, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingPPP:mtu:
@@ -799,12 +782,12 @@ nm_setting_ppp_class_init (NMSettingPPPClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_MTU,
- g_param_spec_uint (NM_SETTING_PPP_MTU,
- "MTU",
- "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_FUZZY_IGNORE));
+ g_param_spec_uint (NM_SETTING_PPP_MTU, "", "",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingPPP:lcp-echo-failure:
@@ -816,16 +799,12 @@ nm_setting_ppp_class_init (NMSettingPPPClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_LCP_ECHO_FAILURE,
- g_param_spec_uint (NM_SETTING_PPP_LCP_ECHO_FAILURE,
- "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 "
- "'" NM_SETTING_PPP_LCP_ECHO_INTERVAL "' property must "
- "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_FUZZY_IGNORE));
+ g_param_spec_uint (NM_SETTING_PPP_LCP_ECHO_FAILURE, "", "",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingPPP:lcp-echo-interval:
@@ -837,13 +816,10 @@ nm_setting_ppp_class_init (NMSettingPPPClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_LCP_ECHO_INTERVAL,
- g_param_spec_uint (NM_SETTING_PPP_LCP_ECHO_INTERVAL,
- "LCP echo interval",
- "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.",
- 0, G_MAXUINT32, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_FUZZY_IGNORE));
+ g_param_spec_uint (NM_SETTING_PPP_LCP_ECHO_INTERVAL, "", "",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
}
diff --git a/libnm-util/nm-setting-ppp.h b/libnm-util/nm-setting-ppp.h
index 17a7181db..5733902b8 100644
--- a/libnm-util/nm-setting-ppp.h
+++ b/libnm-util/nm-setting-ppp.h
@@ -1,9 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Dan Williams <dcbw@redhat.com>
- * Tambet Ingo <tambet@gmail.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
@@ -19,8 +16,8 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2008 Red Hat, Inc.
- * (C) Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2008 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
*/
#ifndef NM_SETTING_PPP_H
diff --git a/libnm-util/nm-setting-pppoe.c b/libnm-util/nm-setting-pppoe.c
index fdae691b2..deaeb2e88 100644
--- a/libnm-util/nm-setting-pppoe.c
+++ b/libnm-util/nm-setting-pppoe.c
@@ -1,9 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Dan Williams <dcbw@redhat.com>
- * Tambet Ingo <tambet@gmail.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
@@ -19,12 +16,14 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2013 Red Hat, Inc.
- * (C) Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2013 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
*/
+#include "config.h"
+
#include <string.h>
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
#include "nm-setting-pppoe.h"
#include "nm-setting-ppp.h"
@@ -210,7 +209,7 @@ nm_setting_pppoe_init (NMSettingPPPOE *setting)
static void
set_property (GObject *object, guint prop_id,
- const GValue *value, GParamSpec *pspec)
+ const GValue *value, GParamSpec *pspec)
{
NMSettingPPPOEPrivate *priv = NM_SETTING_PPPOE_GET_PRIVATE (object);
@@ -238,7 +237,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)
{
NMSettingPPPOE *setting = NM_SETTING_PPPOE (object);
@@ -299,16 +298,10 @@ nm_setting_pppoe_class_init (NMSettingPPPOEClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_SERVICE,
- g_param_spec_string (NM_SETTING_PPPOE_SERVICE,
- "Service",
- "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.",
- NULL,
- G_PARAM_READWRITE));
+ g_param_spec_string (NM_SETTING_PPPOE_SERVICE, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingPPPOE:username:
@@ -317,11 +310,10 @@ nm_setting_pppoe_class_init (NMSettingPPPOEClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_USERNAME,
- g_param_spec_string (NM_SETTING_PPPOE_USERNAME,
- "Username",
- "Username used to authenticate with the PPPoE service.",
- NULL,
- G_PARAM_READWRITE));
+ g_param_spec_string (NM_SETTING_PPPOE_USERNAME, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingPPPOE:password:
@@ -330,23 +322,23 @@ nm_setting_pppoe_class_init (NMSettingPPPOEClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_PASSWORD,
- g_param_spec_string (NM_SETTING_PPPOE_PASSWORD,
- "Password",
- "Password used to authenticate with the PPPoE service.",
- NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SECRET));
+ g_param_spec_string (NM_SETTING_PPPOE_PASSWORD, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_SECRET |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingPPPOE:password-flags:
*
* 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,
- "Password Flags",
- "Flags indicating how to handle the PPPoE password.",
+ g_object_class_install_property
+ (object_class, PROP_PASSWORD_FLAGS,
+ g_param_spec_uint (NM_SETTING_PPPOE_PASSWORD_FLAGS, "", "",
NM_SETTING_SECRET_FLAG_NONE,
NM_SETTING_SECRET_FLAGS_ALL,
NM_SETTING_SECRET_FLAG_NONE,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
}
diff --git a/libnm-util/nm-setting-pppoe.h b/libnm-util/nm-setting-pppoe.h
index 9be90ddb5..9d04af9e2 100644
--- a/libnm-util/nm-setting-pppoe.h
+++ b/libnm-util/nm-setting-pppoe.h
@@ -1,9 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Dan Williams <dcbw@redhat.com>
- * Tambet Ingo <tambet@gmail.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
@@ -19,8 +16,8 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2011 Red Hat, Inc.
- * (C) Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2011 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
*/
#ifndef NM_SETTING_PPPOE_H
diff --git a/libnm-util/nm-setting-private.h b/libnm-util/nm-setting-private.h
index c3ec9d199..1b271d0c7 100644
--- a/libnm-util/nm-setting-private.h
+++ b/libnm-util/nm-setting-private.h
@@ -15,13 +15,12 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2011 Red Hat, Inc.
+ * Copyright 2011 Red Hat, Inc.
*/
#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 \
@@ -30,6 +29,22 @@
NM_SETTING_SECRET_FLAG_NOT_SAVED | \
NM_SETTING_SECRET_FLAG_NOT_REQUIRED)
+/**
+ * NMSettingVerifyResult:
+ * @NM_SETTING_VERIFY_SUCCESS: the setting verifies successfully
+ * @NM_SETTING_VERIFY_ERROR: the setting has a serious misconfiguration
+ * @NM_SETTING_VERIFY_NORMALIZABLE: the setting is valid but has properties
+ * that should be normalized
+ * @NM_SETTING_VERIFY_NORMALIZABLE_ERROR: the setting is invalid but the
+ * errors can be fixed by nm_connection_normalize().
+ */
+typedef enum {
+ NM_SETTING_VERIFY_SUCCESS = TRUE,
+ NM_SETTING_VERIFY_ERROR = FALSE,
+ NM_SETTING_VERIFY_NORMALIZABLE = 2,
+ NM_SETTING_VERIFY_NORMALIZABLE_ERROR = 3,
+} NMSettingVerifyResult;
+
void _nm_register_setting (const char *name,
const GType type,
const guint32 priority,
@@ -40,10 +55,13 @@ void _nm_register_setting (const char *name,
gboolean _nm_setting_is_base_type (NMSetting *setting);
gboolean _nm_setting_type_is_base_type (GType type);
+guint32 _nm_setting_get_setting_priority (NMSetting *setting);
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);
+gboolean _nm_setting_get_property (NMSetting *setting, const char *name, GValue *value);
+
typedef enum NMSettingUpdateSecretResult {
NM_SETTING_UPDATE_SECRET_ERROR = FALSE,
NM_SETTING_UPDATE_SECRET_SUCCESS_MODIFIED = TRUE,
@@ -87,10 +105,18 @@ static void __attribute__((constructor)) register_setting (void) \
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);
+NMSettingVerifyResult _nm_setting_verify_deprecated_virtual_iface_name (const char *interface_name,
+ gboolean allow_missing,
+ const char *setting_name,
+ const char *setting_property,
+ GQuark error_quark,
+ gint e_invalid_property,
+ gint e_missing_property,
+ GSList *all_settings,
+ GError **error);
-#endif /* NM_SETTING_PRIVATE_H */
+NMSettingVerifyResult _nm_setting_verify (NMSetting *setting,
+ GSList *all_settings,
+ GError **error);
+#endif /* NM_SETTING_PRIVATE_H */
diff --git a/libnm-util/nm-setting-serial.c b/libnm-util/nm-setting-serial.c
index 70152bb3c..24f2c8980 100644
--- a/libnm-util/nm-setting-serial.c
+++ b/libnm-util/nm-setting-serial.c
@@ -1,9 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Dan Williams <dcbw@redhat.com>
- * Tambet Ingo <tambet@gmail.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
@@ -19,10 +16,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 - 2008 Novell, Inc.
+ * Copyright 2007 - 2011 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include "nm-setting-serial.h"
@@ -183,7 +182,7 @@ nm_setting_serial_init (NMSettingSerial *setting)
static void
set_property (GObject *object, guint prop_id,
- const GValue *value, GParamSpec *pspec)
+ const GValue *value, GParamSpec *pspec)
{
NMSettingSerialPrivate *priv = NM_SETTING_SERIAL_GET_PRIVATE (object);
@@ -211,7 +210,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)
{
NMSettingSerial *setting = NM_SETTING_SERIAL (object);
@@ -261,14 +260,11 @@ nm_setting_serial_class_init (NMSettingSerialClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_BAUD,
- g_param_spec_uint (NM_SETTING_SERIAL_BAUD,
- "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 ignore speed "
- "settings and use the highest available speed.",
- 0, G_MAXUINT, 57600,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_param_spec_uint (NM_SETTING_SERIAL_BAUD, "", "",
+ 0, G_MAXUINT, 57600,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingSerial:bits:
@@ -277,12 +273,11 @@ nm_setting_serial_class_init (NMSettingSerialClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_BITS,
- g_param_spec_uint (NM_SETTING_SERIAL_BITS,
- "Bits",
- "Byte-width of the serial communication. The 8 in "
- "'8n1' for example.",
- 5, 8, 8,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_param_spec_uint (NM_SETTING_SERIAL_BITS, "", "",
+ 5, 8, 8,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingSerial:parity:
@@ -292,12 +287,11 @@ nm_setting_serial_class_init (NMSettingSerialClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_PARITY,
- g_param_spec_char (NM_SETTING_SERIAL_PARITY,
- "Parity",
- "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));
+ g_param_spec_char (NM_SETTING_SERIAL_PARITY, "", "",
+ 'E', 'o', 'n',
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingSerial:stopbits:
@@ -307,12 +301,11 @@ nm_setting_serial_class_init (NMSettingSerialClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_STOPBITS,
- g_param_spec_uint (NM_SETTING_SERIAL_STOPBITS,
- "Stopbits",
- "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));
+ g_param_spec_uint (NM_SETTING_SERIAL_STOPBITS, "", "",
+ 1, 2, 1,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingSerial:send-delay:
@@ -321,10 +314,9 @@ nm_setting_serial_class_init (NMSettingSerialClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_SEND_DELAY,
- g_param_spec_uint64 (NM_SETTING_SERIAL_SEND_DELAY,
- "SendDelay",
- "Time to delay between each byte sent to the modem, "
- "in microseconds.",
- 0, G_MAXUINT64, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_param_spec_uint64 (NM_SETTING_SERIAL_SEND_DELAY, "", "",
+ 0, G_MAXUINT64, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
}
diff --git a/libnm-util/nm-setting-serial.h b/libnm-util/nm-setting-serial.h
index 5a73d1030..44d46cf37 100644
--- a/libnm-util/nm-setting-serial.h
+++ b/libnm-util/nm-setting-serial.h
@@ -1,9 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Dan Williams <dcbw@redhat.com>
- * Tambet Ingo <tambet@gmail.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
@@ -19,8 +16,8 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2008 Red Hat, Inc.
- * (C) Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2008 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
*/
#ifndef NM_SETTING_SERIAL_H
diff --git a/libnm-util/nm-setting-team-port.c b/libnm-util/nm-setting-team-port.c
index c0b7748bd..6bc71c981 100644
--- a/libnm-util/nm-setting-team-port.c
+++ b/libnm-util/nm-setting-team-port.c
@@ -1,7 +1,5 @@
/* -*- 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
@@ -16,13 +14,17 @@
* 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 Jiri Pirko <jiri@resnulli.us>
*/
+#include "config.h"
+
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include <dbus/dbus-glib.h>
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
#include "nm-setting-team-port.h"
#include "nm-utils.h"
@@ -176,13 +178,9 @@ nm_setting_team_port_class_init (NMSettingTeamPortClass *setting_class)
**/
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.",
+ g_param_spec_string (NM_SETTING_TEAM_PORT_CONFIG, "", "",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
}
diff --git a/libnm-util/nm-setting-team-port.h b/libnm-util/nm-setting-team-port.h
index 50b9f7e36..4e8022202 100644
--- a/libnm-util/nm-setting-team-port.h
+++ b/libnm-util/nm-setting-team-port.h
@@ -1,7 +1,5 @@
/* -*- 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
@@ -16,6 +14,8 @@
* 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 Jiri Pirko <jiri@resnulli.us>
*/
#ifndef NM_SETTING_TEAM_PORT_H
diff --git a/libnm-util/nm-setting-team.c b/libnm-util/nm-setting-team.c
index af9da62c0..19bc95965 100644
--- a/libnm-util/nm-setting-team.c
+++ b/libnm-util/nm-setting-team.c
@@ -1,7 +1,5 @@
/* -*- 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
@@ -16,12 +14,16 @@
* 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 Jiri Pirko <jiri@resnulli.us>
*/
+#include "config.h"
+
#include <string.h>
#include <stdlib.h>
#include <dbus/dbus-glib.h>
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
#include "nm-setting-team.h"
#include "nm-param-spec-specialized.h"
@@ -134,25 +136,13 @@ 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;
+ return _nm_setting_verify_deprecated_virtual_iface_name (
+ priv->interface_name, FALSE,
+ NM_SETTING_TEAM_SETTING_NAME, NM_SETTING_TEAM_INTERFACE_NAME,
+ NM_SETTING_TEAM_ERROR,
+ NM_SETTING_TEAM_ERROR_INVALID_PROPERTY,
+ NM_SETTING_TEAM_ERROR_MISSING_PROPERTY,
+ all_settings, error);
}
static const char *
@@ -242,11 +232,11 @@ nm_setting_team_class_init (NMSettingTeamClass *setting_class)
**/
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",
+ g_param_spec_string (NM_SETTING_TEAM_INTERFACE_NAME, "", "",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingTeam:config:
@@ -258,13 +248,9 @@ nm_setting_team_class_init (NMSettingTeamClass *setting_class)
**/
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.",
+ g_param_spec_string (NM_SETTING_TEAM_CONFIG, "", "",
NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
}
diff --git a/libnm-util/nm-setting-team.h b/libnm-util/nm-setting-team.h
index 978eed07b..d67c8c71b 100644
--- a/libnm-util/nm-setting-team.h
+++ b/libnm-util/nm-setting-team.h
@@ -1,7 +1,5 @@
/* -*- 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
@@ -16,6 +14,8 @@
* 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 Jiri Pirko <jiri@resnulli.us>
*/
#ifndef NM_SETTING_TEAM_H
diff --git a/libnm-util/nm-setting-vlan.c b/libnm-util/nm-setting-vlan.c
index ef91b5f12..43b6a91c1 100644
--- a/libnm-util/nm-setting-vlan.c
+++ b/libnm-util/nm-setting-vlan.c
@@ -1,8 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Weiping Pan <wpan@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
@@ -18,13 +16,15 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2011 - 2014 Red Hat, Inc.
+ * Copyright 2011 - 2014 Red Hat, Inc.
*/
+#include "config.h"
+
#include <stdlib.h>
#include <string.h>
#include <dbus/dbus-glib.h>
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
#include "nm-setting-vlan.h"
#include "nm-param-spec-specialized.h"
@@ -260,7 +260,8 @@ nm_setting_vlan_add_priority_str (NMSettingVlan *setting,
list = get_map (setting, map);
item = priority_map_new_from_str (map, str);
- g_return_val_if_fail (item != NULL, FALSE);
+ if (!item)
+ g_return_val_if_reached (FALSE);
/* Duplicates get replaced */
for (iter = list; iter; iter = g_slist_next (iter)) {
@@ -537,20 +538,6 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
s_wired = iter->data;
}
- /* 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->interface_name && !nm_utils_iface_valid_name (priv->interface_name)) {
- g_set_error (error,
- NM_SETTING_VLAN_ERROR,
- NM_SETTING_VLAN_ERROR_INVALID_PROPERTY,
- _("'%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;
- }
-
if (priv->parent) {
if (nm_utils_is_uuid (priv->parent)) {
/* If we have an NMSettingConnection:master with slave-type="vlan",
@@ -582,7 +569,7 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
priv->parent);
g_prefix_error (error, "%s.%s: ", NM_SETTING_VLAN_SETTING_NAME, NM_SETTING_VLAN_PARENT);
return FALSE;
- }
+ }
} else {
/* If parent is NULL, the parent must be specified via
* NMSettingWired:mac-address.
@@ -609,7 +596,17 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
return FALSE;
}
- return TRUE;
+ /* 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 allow
+ * renaming vlans to arbitrary names.
+ */
+ return _nm_setting_verify_deprecated_virtual_iface_name (
+ priv->interface_name, TRUE,
+ NM_SETTING_VLAN_SETTING_NAME, NM_SETTING_VLAN_INTERFACE_NAME,
+ NM_SETTING_VLAN_ERROR,
+ NM_SETTING_VLAN_ERROR_INVALID_PROPERTY,
+ NM_SETTING_VLAN_ERROR_MISSING_PROPERTY,
+ all_settings, error);
}
static const char *
@@ -758,17 +755,12 @@ nm_setting_vlan_class_init (NMSettingVlanClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_INTERFACE_NAME,
- g_param_spec_string (NM_SETTING_VLAN_INTERFACE_NAME,
- "InterfaceName",
- "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.",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_INFERRABLE));
+ g_param_spec_string (NM_SETTING_VLAN_INTERFACE_NAME, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingVlan:parent:
@@ -780,15 +772,12 @@ nm_setting_vlan_class_init (NMSettingVlanClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_PARENT,
- g_param_spec_string (NM_SETTING_VLAN_PARENT,
- "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 "
- "'wired' setting with a 'mac-address' property.",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_INFERRABLE));
+ g_param_spec_string (NM_SETTING_VLAN_PARENT, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingVlan:id:
@@ -798,12 +787,12 @@ nm_setting_vlan_class_init (NMSettingVlanClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_ID,
- g_param_spec_uint (NM_SETTING_VLAN_ID,
- "VLAN ID",
- "The VLAN indentifier the interface created by "
- "this connection should be assigned.",
+ g_param_spec_uint (NM_SETTING_VLAN_ID, "", "",
0, 4095, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_INFERRABLE));
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingVlan:flags:
@@ -816,16 +805,12 @@ nm_setting_vlan_class_init (NMSettingVlanClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_FLAGS,
- g_param_spec_uint (NM_SETTING_VLAN_FLAGS,
- "VLAN flags",
- "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).",
+ g_param_spec_uint (NM_SETTING_VLAN_FLAGS, "", "",
0, G_MAXUINT32, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_INFERRABLE));
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingVlan:ingress-priority-map:
@@ -836,15 +821,11 @@ nm_setting_vlan_class_init (NMSettingVlanClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_INGRESS_PRIORITY_MAP,
- _nm_param_spec_specialized (NM_SETTING_VLAN_INGRESS_PRIORITY_MAP,
- "VLAN ingress priority mapping",
- "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'.",
- DBUS_TYPE_G_LIST_OF_STRING,
- G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
+ _nm_param_spec_specialized (NM_SETTING_VLAN_INGRESS_PRIORITY_MAP, "", "",
+ DBUS_TYPE_G_LIST_OF_STRING,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingVlan:egress-priority-map:
@@ -855,13 +836,9 @@ nm_setting_vlan_class_init (NMSettingVlanClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_EGRESS_PRIORITY_MAP,
- _nm_param_spec_specialized (NM_SETTING_VLAN_EGRESS_PRIORITY_MAP,
- "VLAN egress priority mapping",
- "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'.",
- DBUS_TYPE_G_LIST_OF_STRING,
- G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
+ _nm_param_spec_specialized (NM_SETTING_VLAN_EGRESS_PRIORITY_MAP, "", "",
+ DBUS_TYPE_G_LIST_OF_STRING,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
}
diff --git a/libnm-util/nm-setting-vlan.h b/libnm-util/nm-setting-vlan.h
index ca77f6fed..3e209480c 100644
--- a/libnm-util/nm-setting-vlan.h
+++ b/libnm-util/nm-setting-vlan.h
@@ -1,8 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Weiping Pan <wpan@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
@@ -18,7 +16,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2011 - 2014 Red Hat, Inc.
+ * Copyright 2011 - 2014 Red Hat, Inc.
*/
#ifndef NM_SETTING_VLAN_H
diff --git a/libnm-util/nm-setting-vpn.c b/libnm-util/nm-setting-vpn.c
index 4b479b8f3..1feeb588a 100644
--- a/libnm-util/nm-setting-vpn.c
+++ b/libnm-util/nm-setting-vpn.c
@@ -1,8 +1,5 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Dan Williams <dcbw@redhat.com>
- * Tambet Ingo <tambet@gmail.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
@@ -18,15 +15,17 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2013 Red Hat, Inc.
- * (C) Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2013 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include <errno.h>
#include <stdlib.h>
#include <dbus/dbus-glib.h>
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
#include "nm-setting-vpn.h"
#include "nm-param-spec-specialized.h"
@@ -84,6 +83,11 @@ typedef struct {
*/
char *user_name;
+ /* Whether the VPN stays up across link changes, until the user
+ * explicitly disconnects it.
+ */
+ gboolean persistent;
+
/* The hash table is created at setting object
* init time and should not be replaced. It is
* a char * -> char * mapping, and both the key
@@ -107,6 +111,7 @@ enum {
PROP_0,
PROP_SERVICE_TYPE,
PROP_USER_NAME,
+ PROP_PERSISTENT,
PROP_DATA,
PROP_SECRETS,
@@ -158,6 +163,20 @@ nm_setting_vpn_get_user_name (NMSettingVPN *setting)
}
/**
+ * nm_setting_vpn_get_persistent:
+ * @setting: the #NMSettingVPN
+ *
+ * Returns: the #NMSettingVPN:persistent property of the setting
+ **/
+gboolean
+nm_setting_vpn_get_persistent (NMSettingVPN *setting)
+{
+ g_return_val_if_fail (NM_IS_SETTING_VPN (setting), FALSE);
+
+ return NM_SETTING_VPN_GET_PRIVATE (setting)->persistent;
+}
+
+/**
* nm_setting_vpn_get_num_data_items:
* @setting: the #NMSettingVPN
*
@@ -479,7 +498,7 @@ update_secret_hash (NMSetting *setting,
if (!value || !strlen (value)) {
g_set_error (error, NM_SETTING_ERROR,
NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH,
- "Secret %s value was empty", name);
+ "Secret %s value was empty", name);
return NM_SETTING_UPDATE_SECRET_ERROR;
}
}
@@ -548,29 +567,31 @@ get_secret_flags (NMSetting *setting,
char *flags_key;
gpointer val;
unsigned long tmp;
+ NMSettingSecretFlags flags = NM_SETTING_SECRET_FLAG_NONE;
flags_key = g_strdup_printf ("%s-flags", secret_name);
if (g_hash_table_lookup_extended (priv->data, flags_key, NULL, &val)) {
errno = 0;
tmp = strtoul ((const char *) val, NULL, 10);
if ((errno == 0) && (tmp <= NM_SETTING_SECRET_FLAGS_ALL)) {
- if (out_flags)
- *out_flags = (guint32) tmp;
+ flags = (NMSettingSecretFlags) tmp;
success = TRUE;
} else {
g_set_error (error,
NM_SETTING_ERROR,
NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH,
- "Failed to convert '%s' value '%s' to uint",
+ _("Failed to convert '%s' value '%s' to uint"),
flags_key, (const char *) val);
}
} else {
g_set_error (error,
NM_SETTING_ERROR,
NM_SETTING_ERROR_PROPERTY_NOT_FOUND,
- "Secret flags property '%s' not found", flags_key);
+ _("Secret flags property '%s' not found"), flags_key);
}
g_free (flags_key);
+ if (out_flags)
+ *out_flags = flags;
return success;
}
@@ -659,9 +680,9 @@ compare_property (NMSetting *setting,
static gboolean
clear_secrets_with_flags (NMSetting *setting,
- GParamSpec *pspec,
- NMSettingClearSecretsWithFlagsFn func,
- gpointer user_data)
+ GParamSpec *pspec,
+ NMSettingClearSecretsWithFlagsFn func,
+ gpointer user_data)
{
NMSettingVPNPrivate *priv = NM_SETTING_VPN_GET_PRIVATE (setting);
GHashTableIter iter;
@@ -731,7 +752,7 @@ copy_hash (gpointer key, gpointer value, gpointer user_data)
static void
set_property (GObject *object, guint prop_id,
- const GValue *value, GParamSpec *pspec)
+ const GValue *value, GParamSpec *pspec)
{
NMSettingVPNPrivate *priv = NM_SETTING_VPN_GET_PRIVATE (object);
GHashTable *new_hash;
@@ -745,6 +766,9 @@ set_property (GObject *object, guint prop_id,
g_free (priv->user_name);
priv->user_name = g_value_dup_string (value);
break;
+ case PROP_PERSISTENT:
+ priv->persistent = g_value_get_boolean (value);
+ break;
case PROP_DATA:
/* Must make a deep copy of the hash table here... */
g_hash_table_remove_all (priv->data);
@@ -767,7 +791,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)
{
NMSettingVPN *setting = NM_SETTING_VPN (object);
NMSettingVPNPrivate *priv = NM_SETTING_VPN_GET_PRIVATE (setting);
@@ -779,6 +803,9 @@ get_property (GObject *object, guint prop_id,
case PROP_USER_NAME:
g_value_set_string (value, nm_setting_vpn_get_user_name (setting));
break;
+ case PROP_PERSISTENT:
+ g_value_set_boolean (value, priv->persistent);
+ break;
case PROP_DATA:
g_value_set_boxed (value, priv->data);
break;
@@ -822,14 +849,10 @@ nm_setting_vpn_class_init (NMSettingVPNClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_SERVICE_TYPE,
- g_param_spec_string (NM_SETTING_VPN_SERVICE_TYPE,
- "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 "
- "plugin.",
- NULL,
- G_PARAM_READWRITE));
+ g_param_spec_string (NM_SETTING_VPN_SERVICE_TYPE, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingVPN:user-name:
@@ -843,18 +866,24 @@ nm_setting_vpn_class_init (NMSettingVPNClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_USER_NAME,
- g_param_spec_string (NM_SETTING_VPN_USER_NAME,
- "User name",
- "If the VPN connection requires a user name for "
- "authentication, that name should be provided here. "
- "If the connection is available to more than one "
- "user, and the VPN requires each user to supply a "
- "different name, then leave this property empty. If "
- "this property is empty, NetworkManager will "
- "automatically supply the username of the user which "
- "requested the VPN connection.",
+ g_param_spec_string (NM_SETTING_VPN_USER_NAME, "", "",
NULL,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSettingVPN:persistent:
+ *
+ * If the VPN service supports persistence, and this property is %TRUE,
+ * the VPN will attempt to stay connected across link changes and outages,
+ * until explicitly disconnected.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_PERSISTENT,
+ g_param_spec_boolean (NM_SETTING_VPN_PERSISTENT, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingVPN:data:
@@ -864,13 +893,10 @@ nm_setting_vpn_class_init (NMSettingVPNClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_DATA,
- _nm_param_spec_specialized (NM_SETTING_VPN_DATA,
- "Data",
- "Dictionary of key/value pairs of VPN plugin "
- "specific data. Both keys and values must be "
- "strings.",
- DBUS_TYPE_G_MAP_OF_STRING,
- G_PARAM_READWRITE));
+ _nm_param_spec_specialized (NM_SETTING_VPN_DATA, "", "",
+ DBUS_TYPE_G_MAP_OF_STRING,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingVPN:secrets:
@@ -880,12 +906,9 @@ nm_setting_vpn_class_init (NMSettingVPNClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_SECRETS,
- _nm_param_spec_specialized (NM_SETTING_VPN_SECRETS,
- "Secrets",
- "Dictionary of key/value pairs of VPN plugin "
- "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_SECRET));
+ _nm_param_spec_specialized (NM_SETTING_VPN_SECRETS, "", "",
+ DBUS_TYPE_G_MAP_OF_STRING,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_SECRET |
+ G_PARAM_STATIC_STRINGS));
}
-
diff --git a/libnm-util/nm-setting-vpn.h b/libnm-util/nm-setting-vpn.h
index 259384bfd..fbc9fe34f 100644
--- a/libnm-util/nm-setting-vpn.h
+++ b/libnm-util/nm-setting-vpn.h
@@ -1,9 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Dan Williams <dcbw@redhat.com>
- * Tambet Ingo <tambet@gmail.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
@@ -19,8 +16,8 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2013 Red Hat, Inc.
- * (C) Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2013 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
*/
#ifndef NM_SETTING_VPN_H
@@ -57,6 +54,7 @@ GQuark nm_setting_vpn_error_quark (void);
#define NM_SETTING_VPN_SERVICE_TYPE "service-type"
#define NM_SETTING_VPN_USER_NAME "user-name"
+#define NM_SETTING_VPN_PERSISTENT "persistent"
#define NM_SETTING_VPN_DATA "data"
#define NM_SETTING_VPN_SECRETS "secrets"
@@ -88,6 +86,7 @@ GType nm_setting_vpn_get_type (void);
NMSetting *nm_setting_vpn_new (void);
const char *nm_setting_vpn_get_service_type (NMSettingVPN *setting);
const char *nm_setting_vpn_get_user_name (NMSettingVPN *setting);
+gboolean nm_setting_vpn_get_persistent (NMSettingVPN *setting);
guint32 nm_setting_vpn_get_num_data_items (NMSettingVPN *setting);
void nm_setting_vpn_add_data_item (NMSettingVPN *setting,
diff --git a/libnm-util/nm-setting-wimax.c b/libnm-util/nm-setting-wimax.c
index 8bf16b3de..acb00f5e9 100644
--- a/libnm-util/nm-setting-wimax.c
+++ b/libnm-util/nm-setting-wimax.c
@@ -16,14 +16,16 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2011 - 2013 Red Hat, Inc.
- * (C) Copyright 2009 Novell, Inc.
+ * Copyright 2011 - 2013 Red Hat, Inc.
+ * Copyright 2009 Novell, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include <net/ethernet.h>
#include <dbus/dbus-glib.h>
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
#include "nm-setting-wimax.h"
#include "nm-param-spec-specialized.h"
@@ -179,7 +181,7 @@ finalize (GObject *object)
static void
set_property (GObject *object, guint prop_id,
- const GValue *value, GParamSpec *pspec)
+ const GValue *value, GParamSpec *pspec)
{
NMSettingWimaxPrivate *priv = NM_SETTING_WIMAX_GET_PRIVATE (object);
@@ -201,7 +203,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)
{
NMSettingWimax *setting = NM_SETTING_WIMAX (object);
@@ -241,12 +243,10 @@ nm_setting_wimax_class_init (NMSettingWimaxClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_NETWORK_NAME,
- g_param_spec_string (NM_SETTING_WIMAX_NETWORK_NAME,
- "NetworkName",
- "Network Service Provider (NSP) name of the WiMAX "
- "network this connection should use.",
- NULL,
- G_PARAM_READWRITE));
+ g_param_spec_string (NM_SETTING_WIMAX_NETWORK_NAME, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWimax:mac-address:
@@ -257,12 +257,8 @@ nm_setting_wimax_class_init (NMSettingWimaxClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_MAC_ADDRESS,
- _nm_param_spec_specialized (NM_SETTING_WIMAX_MAC_ADDRESS,
- "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).",
- DBUS_TYPE_G_UCHAR_ARRAY,
- G_PARAM_READWRITE));
+ _nm_param_spec_specialized (NM_SETTING_WIMAX_MAC_ADDRESS, "", "",
+ DBUS_TYPE_G_UCHAR_ARRAY,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
}
diff --git a/libnm-util/nm-setting-wimax.h b/libnm-util/nm-setting-wimax.h
index 935960d8f..781d717c2 100644
--- a/libnm-util/nm-setting-wimax.h
+++ b/libnm-util/nm-setting-wimax.h
@@ -16,7 +16,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2009 Novell, Inc.
+ * Copyright 2009 Novell, Inc.
*/
#ifndef NM_SETTING_WIMAX_H
diff --git a/libnm-util/nm-setting-wired.c b/libnm-util/nm-setting-wired.c
index a956a52f0..8d927921d 100644
--- a/libnm-util/nm-setting-wired.c
+++ b/libnm-util/nm-setting-wired.c
@@ -1,9 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Dan Williams <dcbw@redhat.com>
- * Tambet Ingo <tambet@gmail.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
@@ -19,15 +16,17 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2014 Red Hat, Inc.
- * (C) Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2014 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include <net/ethernet.h>
#include <netinet/ether.h>
#include <dbus/dbus-glib.h>
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
#include "nm-setting-wired.h"
#include "nm-param-spec-specialized.h"
@@ -877,16 +876,10 @@ nm_setting_wired_class_init (NMSettingWiredClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_PORT,
- g_param_spec_string (NM_SETTING_WIRED_PORT,
- "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. If the device supports only one port "
- "type, this setting is ignored.",
- NULL,
- G_PARAM_READWRITE));
+ g_param_spec_string (NM_SETTING_WIRED_PORT, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWired:speed:
@@ -896,12 +889,11 @@ nm_setting_wired_class_init (NMSettingWiredClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_SPEED,
- g_param_spec_uint (NM_SETTING_WIRED_SPEED,
- "Speed",
- "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));
+ g_param_spec_uint (NM_SETTING_WIRED_SPEED, "", "",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWired:duplex:
@@ -911,12 +903,10 @@ nm_setting_wired_class_init (NMSettingWiredClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_DUPLEX,
- g_param_spec_string (NM_SETTING_WIRED_DUPLEX,
- "Duplex",
- "If specified, request that the device only use the "
- "specified duplex mode. Either 'half' or 'full'.",
- NULL,
- G_PARAM_READWRITE));
+ g_param_spec_string (NM_SETTING_WIRED_DUPLEX, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWired:auto-negotiate:
@@ -927,14 +917,11 @@ nm_setting_wired_class_init (NMSettingWiredClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_AUTO_NEGOTIATE,
- g_param_spec_boolean (NM_SETTING_WIRED_AUTO_NEGOTIATE,
- "AutoNegotiate",
- "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.",
- TRUE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_param_spec_boolean (NM_SETTING_WIRED_AUTO_NEGOTIATE, "", "",
+ TRUE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWired:mac-address:
@@ -945,14 +932,11 @@ nm_setting_wired_class_init (NMSettingWiredClass *setting_class)
**/
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. "
- "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_INFERRABLE));
+ _nm_param_spec_specialized (NM_SETTING_WIRED_MAC_ADDRESS, "", "",
+ DBUS_TYPE_G_UCHAR_ARRAY,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWired:cloned-mac-address:
@@ -962,13 +946,11 @@ nm_setting_wired_class_init (NMSettingWiredClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_CLONED_MAC_ADDRESS,
- _nm_param_spec_specialized (NM_SETTING_WIRED_CLONED_MAC_ADDRESS,
- "Cloned MAC Address",
- "If specified, request that the 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_INFERRABLE));
+ _nm_param_spec_specialized (NM_SETTING_WIRED_CLONED_MAC_ADDRESS, "", "",
+ DBUS_TYPE_G_UCHAR_ARRAY,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWired:mac-address-blacklist:
@@ -980,14 +962,11 @@ nm_setting_wired_class_init (NMSettingWiredClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_MAC_ADDRESS_BLACKLIST,
- _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 "
- "an address in the list. Each MAC address is in the "
- "standard hex-digits-and-colons notation (00:11:22:33:44:55).",
+ _nm_param_spec_specialized (NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST, "", "",
DBUS_TYPE_G_LIST_OF_STRING,
- G_PARAM_READWRITE | NM_SETTING_PARAM_FUZZY_IGNORE));
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWired:mtu:
@@ -997,13 +976,12 @@ nm_setting_wired_class_init (NMSettingWiredClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_MTU,
- g_param_spec_uint (NM_SETTING_WIRED_MTU,
- "MTU",
- "If non-zero, only transmit packets of the specified "
- "size or smaller, breaking larger packets up into "
- "multiple Ethernet frames.",
- 0, G_MAXUINT32, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_FUZZY_IGNORE));
+ g_param_spec_uint (NM_SETTING_WIRED_MTU, "", "",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWired:s390-subchannels:
@@ -1018,19 +996,11 @@ nm_setting_wired_class_init (NMSettingWiredClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_S390_SUBCHANNELS,
- _nm_param_spec_specialized (NM_SETTING_WIRED_S390_SUBCHANNELS,
- "z/VM Subchannels",
- "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.",
- DBUS_TYPE_G_ARRAY_OF_STRING,
- G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
+ _nm_param_spec_specialized (NM_SETTING_WIRED_S390_SUBCHANNELS, "", "",
+ DBUS_TYPE_G_ARRAY_OF_STRING,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWired:s390-nettype:
@@ -1040,13 +1010,11 @@ nm_setting_wired_class_init (NMSettingWiredClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_S390_NETTYPE,
- g_param_spec_string (NM_SETTING_WIRED_S390_NETTYPE,
- "s390 Net Type",
- "s390 network device type; one of 'qeth', 'lcs', or "
- "'ctc', representing the different types of virtual "
- "network devices available on s390 systems.",
- NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
+ g_param_spec_string (NM_SETTING_WIRED_S390_NETTYPE, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWired:s390-options:
@@ -1058,13 +1026,9 @@ nm_setting_wired_class_init (NMSettingWiredClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_S390_OPTIONS,
- _nm_param_spec_specialized (NM_SETTING_WIRED_S390_OPTIONS,
- "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.",
- DBUS_TYPE_G_MAP_OF_STRING,
- G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE));
+ _nm_param_spec_specialized (NM_SETTING_WIRED_S390_OPTIONS, "", "",
+ DBUS_TYPE_G_MAP_OF_STRING,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_INFERRABLE |
+ G_PARAM_STATIC_STRINGS));
}
-
diff --git a/libnm-util/nm-setting-wired.h b/libnm-util/nm-setting-wired.h
index 9580b0a8b..33d6d54dd 100644
--- a/libnm-util/nm-setting-wired.h
+++ b/libnm-util/nm-setting-wired.h
@@ -1,9 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Dan Williams <dcbw@redhat.com>
- * Tambet Ingo <tambet@gmail.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
@@ -19,8 +16,8 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2014 Red Hat, Inc.
- * (C) Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2014 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
*/
#ifndef NM_SETTING_WIRED_H
diff --git a/libnm-util/nm-setting-wireless-security.c b/libnm-util/nm-setting-wireless-security.c
index 40c561813..5e3456ceb 100644
--- a/libnm-util/nm-setting-wireless-security.c
+++ b/libnm-util/nm-setting-wireless-security.c
@@ -1,9 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Dan Williams <dcbw@redhat.com>
- * Tambet Ingo <tambet@gmail.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
@@ -19,14 +16,15 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2014 Red Hat, Inc.
- * (C) Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2014 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
*/
-#include <config.h>
+#include "config.h"
+
#include <string.h>
#include <dbus/dbus-glib.h>
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
#include "nm-setting-wireless-security.h"
#include "nm-setting-8021x.h"
@@ -1068,7 +1066,7 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
g_set_error_literal (error,
NM_SETTING_WIRELESS_SECURITY_ERROR,
NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- _("property is invalid"));
+ _("property is invalid"));
g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, NM_SETTING_WIRELESS_SECURITY_PAIRWISE);
return FALSE;
}
@@ -1183,7 +1181,7 @@ finalize (GObject *object)
static void
set_property (GObject *object, guint prop_id,
- const GValue *value, GParamSpec *pspec)
+ const GValue *value, GParamSpec *pspec)
{
NMSettingWirelessSecurity *setting = NM_SETTING_WIRELESS_SECURITY (object);
NMSettingWirelessSecurityPrivate *priv = NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting);
@@ -1263,7 +1261,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)
{
NMSettingWirelessSecurity *setting = NM_SETTING_WIRELESS_SECURITY (object);
NMSettingWirelessSecurityPrivate *priv = NM_SETTING_WIRELESS_SECURITY_GET_PRIVATE (setting);
@@ -1355,15 +1353,11 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
**/
g_object_class_install_property
(object_class, PROP_KEY_MGMT,
- g_param_spec_string (NM_SETTING_WIRELESS_SECURITY_KEY_MGMT,
- "Key management",
- "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.",
- NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_REQUIRED));
+ g_param_spec_string (NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_REQUIRED |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWirelessSecurity:wep-tx-keyidx:
@@ -1375,15 +1369,11 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
**/
g_object_class_install_property
(object_class, PROP_WEP_TX_KEYIDX,
- g_param_spec_uint (NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX,
- "WEP TX key index",
- "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.",
- 0, 3, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_param_spec_uint (NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX, "", "",
+ 0, 3, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWirelessSecurity:auth-alg:
@@ -1396,17 +1386,10 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
**/
g_object_class_install_property
(object_class, PROP_AUTH_ALG,
- g_param_spec_string (NM_SETTING_WIRELESS_SECURITY_AUTH_ALG,
- "AuthAlg",
- "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.",
- NULL,
- G_PARAM_READWRITE));
+ g_param_spec_string (NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWirelessSecurity:proto:
@@ -1417,15 +1400,10 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
**/
g_object_class_install_property
(object_class, PROP_PROTO,
- _nm_param_spec_specialized (NM_SETTING_WIRELESS_SECURITY_PROTO,
- "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 not specified, both WPA and RSN "
- "connections are allowed.",
- DBUS_TYPE_G_LIST_OF_STRING,
- G_PARAM_READWRITE));
+ _nm_param_spec_specialized (NM_SETTING_WIRELESS_SECURITY_PROTO, "", "",
+ DBUS_TYPE_G_LIST_OF_STRING,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWirelessSecurity:pairwise:
@@ -1437,16 +1415,10 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
**/
g_object_class_install_property
(object_class, PROP_PAIRWISE,
- _nm_param_spec_specialized (NM_SETTING_WIRELESS_SECURITY_PAIRWISE,
- "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 'tkip' "
- "or 'ccmp'.",
- DBUS_TYPE_G_LIST_OF_STRING,
- G_PARAM_READWRITE));
+ _nm_param_spec_specialized (NM_SETTING_WIRELESS_SECURITY_PAIRWISE, "", "",
+ DBUS_TYPE_G_LIST_OF_STRING,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWirelessSecurity:group:
@@ -1458,16 +1430,10 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
**/
g_object_class_install_property
(object_class, PROP_GROUP,
- _nm_param_spec_specialized (NM_SETTING_WIRELESS_SECURITY_GROUP,
- "Group",
- "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'.",
- DBUS_TYPE_G_LIST_OF_STRING,
- G_PARAM_READWRITE));
+ _nm_param_spec_specialized (NM_SETTING_WIRELESS_SECURITY_GROUP, "", "",
+ DBUS_TYPE_G_LIST_OF_STRING,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWirelessSecurity:leap-username:
@@ -1477,12 +1443,10 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
**/
g_object_class_install_property
(object_class, PROP_LEAP_USERNAME,
- g_param_spec_string (NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME,
- "LEAP Username",
- "The login username for legacy LEAP connections "
- "(ie, key-mgmt = 'ieee8021x' and auth-alg = 'leap').",
- NULL,
- G_PARAM_READWRITE));
+ g_param_spec_string (NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWirelessSecurity:wep-key0:
@@ -1492,13 +1456,11 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
**/
g_object_class_install_property
(object_class, PROP_WEP_KEY0,
- g_param_spec_string (NM_SETTING_WIRELESS_SECURITY_WEP_KEY0,
- "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.",
- NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SECRET));
+ g_param_spec_string (NM_SETTING_WIRELESS_SECURITY_WEP_KEY0, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_SECRET |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWirelessSecurity:wep-key1:
@@ -1508,13 +1470,11 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
**/
g_object_class_install_property
(object_class, PROP_WEP_KEY1,
- g_param_spec_string (NM_SETTING_WIRELESS_SECURITY_WEP_KEY1,
- "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.",
- NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SECRET));
+ g_param_spec_string (NM_SETTING_WIRELESS_SECURITY_WEP_KEY1, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_SECRET |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWirelessSecurity:wep-key2:
@@ -1524,13 +1484,11 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
**/
g_object_class_install_property
(object_class, PROP_WEP_KEY2,
- g_param_spec_string (NM_SETTING_WIRELESS_SECURITY_WEP_KEY2,
- "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.",
- NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SECRET));
+ g_param_spec_string (NM_SETTING_WIRELESS_SECURITY_WEP_KEY2, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_SECRET |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWirelessSecurity:wep-key3:
@@ -1540,13 +1498,11 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
**/
g_object_class_install_property
(object_class, PROP_WEP_KEY3,
- g_param_spec_string (NM_SETTING_WIRELESS_SECURITY_WEP_KEY3,
- "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.",
- NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SECRET));
+ g_param_spec_string (NM_SETTING_WIRELESS_SECURITY_WEP_KEY3, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_SECRET |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWirelessSecurity:wep-key-flags:
@@ -1555,14 +1511,14 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
* #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,
- "WEP Key Flags",
- "Flags indicating how to handle the WEP keys.",
+ g_object_class_install_property
+ (object_class, PROP_WEP_KEY_FLAGS,
+ g_param_spec_uint (NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS, "", "",
NM_SETTING_SECRET_FLAG_NONE,
NM_SETTING_SECRET_FLAGS_ALL,
NM_SETTING_SECRET_FLAG_NONE,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWirelessSecurity:psk:
@@ -1576,18 +1532,11 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
**/
g_object_class_install_property
(object_class, PROP_PSK,
- g_param_spec_string (NM_SETTING_WIRELESS_SECURITY_PSK,
- "PSK",
- "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.",
- NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SECRET));
+ g_param_spec_string (NM_SETTING_WIRELESS_SECURITY_PSK, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_SECRET |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWirelessSecurity:psk-flags:
@@ -1595,14 +1544,14 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
* 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,
- "PSK Flags",
- "Flags indicating how to handle the WPA PSK key.",
+ g_object_class_install_property
+ (object_class, PROP_PSK_FLAGS,
+ g_param_spec_uint (NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS, "", "",
NM_SETTING_SECRET_FLAG_NONE,
NM_SETTING_SECRET_FLAGS_ALL,
NM_SETTING_SECRET_FLAG_NONE,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWirelessSecurity:leap-password:
@@ -1612,12 +1561,11 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
**/
g_object_class_install_property
(object_class, PROP_LEAP_PASSWORD,
- g_param_spec_string (NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD,
- "LEAP Password",
- "The login password for legacy LEAP connections "
- "(ie, key-mgmt = 'ieee8021x' and auth-alg = 'leap').",
- NULL,
- G_PARAM_READWRITE | NM_SETTING_PARAM_SECRET));
+ g_param_spec_string (NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_SECRET |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWirelessSecurity:leap-password-flags:
@@ -1625,14 +1573,14 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
* 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,
- "LEAP Password Flags",
- "Flags indicating how to handle the LEAP password.",
+ g_object_class_install_property
+ (object_class, PROP_LEAP_PASSWORD_FLAGS,
+ g_param_spec_uint (NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS, "", "",
NM_SETTING_SECRET_FLAG_NONE,
NM_SETTING_SECRET_FLAGS_ALL,
NM_SETTING_SECRET_FLAG_NONE,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWirelessSecurity:wep-key-type:
@@ -1646,18 +1594,11 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting
**/
g_object_class_install_property
(object_class, PROP_WEP_KEY_TYPE,
- g_param_spec_uint (NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE,
- "WEP Key Type",
- "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.",
- NM_WEP_KEY_TYPE_UNKNOWN,
- NM_WEP_KEY_TYPE_LAST,
- NM_WEP_KEY_TYPE_UNKNOWN,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_param_spec_uint (NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE, "", "",
+ NM_WEP_KEY_TYPE_UNKNOWN,
+ NM_WEP_KEY_TYPE_LAST,
+ NM_WEP_KEY_TYPE_UNKNOWN,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
}
diff --git a/libnm-util/nm-setting-wireless-security.h b/libnm-util/nm-setting-wireless-security.h
index df5d77aba..97a456b04 100644
--- a/libnm-util/nm-setting-wireless-security.h
+++ b/libnm-util/nm-setting-wireless-security.h
@@ -1,9 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Dan Williams <dcbw@redhat.com>
- * Tambet Ingo <tambet@gmail.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
@@ -19,8 +16,8 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2014 Red Hat, Inc.
- * (C) Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2014 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
*/
#ifndef NM_SETTING_WIRELESS_SECURITY_H
diff --git a/libnm-util/nm-setting-wireless.c b/libnm-util/nm-setting-wireless.c
index ca53d6f95..99f4c9b14 100644
--- a/libnm-util/nm-setting-wireless.c
+++ b/libnm-util/nm-setting-wireless.c
@@ -1,9 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Dan Williams <dcbw@redhat.com>
- * Tambet Ingo <tambet@gmail.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
@@ -19,15 +16,17 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2014 Red Hat, Inc.
- * (C) Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2014 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include <net/ethernet.h>
#include <netinet/ether.h>
#include <dbus/dbus-glib.h>
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
#include "NetworkManager.h"
#include "nm-setting-wireless.h"
@@ -731,7 +730,7 @@ nm_setting_wireless_get_num_seen_bssids (NMSettingWireless *setting)
**/
const char *
nm_setting_wireless_get_seen_bssid (NMSettingWireless *setting,
- guint32 i)
+ guint32 i)
{
g_return_val_if_fail (NM_IS_SETTING_WIRELESS (setting), NULL);
@@ -894,7 +893,7 @@ finalize (GObject *object)
static void
set_property (GObject *object, guint prop_id,
- const GValue *value, GParamSpec *pspec)
+ const GValue *value, GParamSpec *pspec)
{
NMSettingWirelessPrivate *priv = NM_SETTING_WIRELESS_GET_PRIVATE (object);
@@ -962,7 +961,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)
{
NMSettingWireless *setting = NM_SETTING_WIRELESS (object);
@@ -1037,11 +1036,10 @@ nm_setting_wireless_class_init (NMSettingWirelessClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_SSID,
- _nm_param_spec_specialized (NM_SETTING_WIRELESS_SSID,
- "SSID",
- "SSID of the Wi-Fi network. Must be specified.",
- DBUS_TYPE_G_UCHAR_ARRAY,
- G_PARAM_READWRITE));
+ _nm_param_spec_specialized (NM_SETTING_WIRELESS_SSID, "", "",
+ DBUS_TYPE_G_UCHAR_ARRAY,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWireless:mode:
@@ -1051,12 +1049,10 @@ nm_setting_wireless_class_init (NMSettingWirelessClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_MODE,
- g_param_spec_string (NM_SETTING_WIRELESS_MODE,
- "Mode",
- "Wi-Fi network mode; one of 'infrastructure', "
- "'adhoc' or 'ap'. If blank, infrastructure is assumed.",
- NULL,
- G_PARAM_READWRITE));
+ g_param_spec_string (NM_SETTING_WIRELESS_MODE, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWireless:band:
@@ -1070,18 +1066,10 @@ nm_setting_wireless_class_init (NMSettingWirelessClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_BAND,
- g_param_spec_string (NM_SETTING_WIRELESS_BAND,
- "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 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));
+ g_param_spec_string (NM_SETTING_WIRELESS_BAND, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWireless:channel:
@@ -1093,15 +1081,11 @@ nm_setting_wireless_class_init (NMSettingWirelessClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_CHANNEL,
- g_param_spec_uint (NM_SETTING_WIRELESS_CHANNEL,
- "Channel",
- "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.",
- 0, G_MAXUINT32, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_param_spec_uint (NM_SETTING_WIRELESS_CHANNEL, "", "",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWireless:bssid:
@@ -1113,16 +1097,10 @@ nm_setting_wireless_class_init (NMSettingWirelessClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_BSSID,
- _nm_param_spec_specialized (NM_SETTING_WIRELESS_BSSID,
- "BSSID",
- "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.",
- DBUS_TYPE_G_UCHAR_ARRAY,
- G_PARAM_READWRITE));
+ _nm_param_spec_specialized (NM_SETTING_WIRELESS_BSSID, "", "",
+ DBUS_TYPE_G_UCHAR_ARRAY,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWireless:rate:
@@ -1134,15 +1112,12 @@ nm_setting_wireless_class_init (NMSettingWirelessClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_RATE,
- g_param_spec_uint (NM_SETTING_WIRELESS_RATE,
- "Rate",
- "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.",
- 0, G_MAXUINT32, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_FUZZY_IGNORE));
+ g_param_spec_uint (NM_SETTING_WIRELESS_RATE, "", "",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWireless:tx-power:
@@ -1153,14 +1128,12 @@ nm_setting_wireless_class_init (NMSettingWirelessClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_TX_POWER,
- g_param_spec_uint (NM_SETTING_WIRELESS_TX_POWER,
- "TX Power",
- "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.",
- 0, G_MAXUINT32, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_FUZZY_IGNORE));
+ g_param_spec_uint (NM_SETTING_WIRELESS_TX_POWER, "", "",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWireless:mac-address:
@@ -1171,14 +1144,10 @@ nm_setting_wireless_class_init (NMSettingWirelessClass *setting_class)
**/
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 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_param_spec_specialized (NM_SETTING_WIRELESS_MAC_ADDRESS, "", "",
+ DBUS_TYPE_G_UCHAR_ARRAY,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWireless:cloned-mac-address:
@@ -1188,13 +1157,10 @@ nm_setting_wireless_class_init (NMSettingWirelessClass *setting_class)
**/
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 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_param_spec_specialized (NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, "", "",
+ DBUS_TYPE_G_UCHAR_ARRAY,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWireless:mac-address-blacklist:
@@ -1205,15 +1171,11 @@ nm_setting_wireless_class_init (NMSettingWirelessClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_MAC_ADDRESS_BLACKLIST,
- _nm_param_spec_specialized (NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST,
- "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').",
+ _nm_param_spec_specialized (NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST, "", "",
DBUS_TYPE_G_LIST_OF_STRING,
- G_PARAM_READWRITE | NM_SETTING_PARAM_FUZZY_IGNORE));
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWireless:seen-bssids:
@@ -1227,18 +1189,11 @@ nm_setting_wireless_class_init (NMSettingWirelessClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_SEEN_BSSIDS,
- _nm_param_spec_specialized (NM_SETTING_WIRELESS_SEEN_BSSIDS,
- "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 BSSID list of NetworkManager. "
- "The changes you make to this property will not be "
- "preserved.",
+ _nm_param_spec_specialized (NM_SETTING_WIRELESS_SEEN_BSSIDS, "", "",
DBUS_TYPE_G_LIST_OF_STRING,
- G_PARAM_READWRITE | NM_SETTING_PARAM_FUZZY_IGNORE));
+ G_PARAM_READWRITE |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWireless:mtu:
@@ -1248,13 +1203,12 @@ nm_setting_wireless_class_init (NMSettingWirelessClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_MTU,
- g_param_spec_uint (NM_SETTING_WIRELESS_MTU,
- "MTU",
- "If non-zero, only transmit packets of the specified "
- "size or smaller, breaking larger packets up into "
- "multiple Ethernet frames.",
- 0, G_MAXUINT32, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_FUZZY_IGNORE));
+ g_param_spec_uint (NM_SETTING_WIRELESS_MTU, "", "",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ NM_SETTING_PARAM_FUZZY_IGNORE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWireless:security:
@@ -1270,15 +1224,10 @@ nm_setting_wireless_class_init (NMSettingWirelessClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_SEC,
- g_param_spec_string (NM_SETTING_WIRELESS_SEC,
- "Security",
- "If the wireless connection has any security "
- "restrictions, like 802.1x, WEP, or WPA, set this "
- "property to '" NM_SETTING_WIRELESS_SECURITY_SETTING_NAME "' "
- "and ensure the connection contains a valid "
- NM_SETTING_WIRELESS_SECURITY_SETTING_NAME " setting.",
- NULL,
- G_PARAM_READWRITE));
+ g_param_spec_string (NM_SETTING_WIRELESS_SEC, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/**
* NMSettingWireless:hidden:
@@ -1291,15 +1240,8 @@ nm_setting_wireless_class_init (NMSettingWirelessClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_HIDDEN,
- g_param_spec_boolean (NM_SETTING_WIRELESS_HIDDEN,
- "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, these workarounds expose inherent "
- "insecurities with hidden SSID networks, and thus "
- "hidden SSID networks should be used with caution.",
+ g_param_spec_boolean (NM_SETTING_WIRELESS_HIDDEN, "", "",
FALSE,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
}
diff --git a/libnm-util/nm-setting-wireless.h b/libnm-util/nm-setting-wireless.h
index 221a921a3..18f78cff6 100644
--- a/libnm-util/nm-setting-wireless.h
+++ b/libnm-util/nm-setting-wireless.h
@@ -1,9 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Dan Williams <dcbw@redhat.com>
- * Tambet Ingo <tambet@gmail.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
@@ -19,8 +16,8 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2014 Red Hat, Inc.
- * (C) Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2014 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
*/
#ifndef NM_SETTING_WIRELESS_H
@@ -155,11 +152,11 @@ guint32 nm_setting_wireless_get_mtu (NMSettingWireless
gboolean nm_setting_wireless_get_hidden (NMSettingWireless *setting);
gboolean nm_setting_wireless_add_seen_bssid (NMSettingWireless *setting,
- const char *bssid);
+ const char *bssid);
guint32 nm_setting_wireless_get_num_seen_bssids (NMSettingWireless *setting);
const char *nm_setting_wireless_get_seen_bssid (NMSettingWireless *setting,
- guint32 i);
+ guint32 i);
gboolean nm_setting_wireless_ap_security_compatible (NMSettingWireless *s_wireless,
NMSettingWirelessSecurity *s_wireless_sec,
diff --git a/libnm-util/nm-setting.c b/libnm-util/nm-setting.c
index 0e8a06c4d..105981bc3 100644
--- a/libnm-util/nm-setting.c
+++ b/libnm-util/nm-setting.c
@@ -1,9 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Dan Williams <dcbw@redhat.com>
- * Tambet Ingo <tambet@gmail.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
@@ -19,11 +16,14 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2011 Red Hat, Inc.
- * (C) Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2011 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
*/
+#include "config.h"
+
#include <string.h>
+#include <glib/gi18n-lib.h>
#include "nm-setting.h"
#include "nm-setting-private.h"
@@ -211,6 +211,17 @@ _get_setting_type_priority (GType type)
return info->priority;
}
+guint32
+_nm_setting_get_setting_priority (NMSetting *setting)
+{
+ NMSettingPrivate *priv;
+
+ g_return_val_if_fail (NM_IS_SETTING (setting), G_MAXUINT32);
+ priv = NM_SETTING_GET_PRIVATE (setting);
+ _ensure_setting_info (setting, priv);
+ return priv->info->priority;
+}
+
gboolean
_nm_setting_type_is_base_type (GType type)
{
@@ -262,8 +273,8 @@ _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));
+ prio_a = _nm_setting_get_setting_priority ((NMSetting *) a);
+ prio_b = _nm_setting_get_setting_priority ((NMSetting *) b);
if (prio_a < prio_b)
return -1;
@@ -291,7 +302,7 @@ destroy_gvalue (gpointer data)
* Converts the #NMSetting into a #GHashTable 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.
- *
+ *
* Returns: (transfer full) (element-type utf8 GObject.Value): a new #GHashTable
* describing the setting's properties
**/
@@ -306,11 +317,6 @@ nm_setting_to_hash (NMSetting *setting, NMSettingHashFlags flags)
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);
- if (!property_specs) {
- g_warning ("%s: couldn't find property specs for object of type '%s'",
- __func__, g_type_name (G_OBJECT_TYPE (setting)));
- return NULL;
- }
hash = g_hash_table_new_full (g_str_hash, g_str_equal,
(GDestroyNotify) g_free, destroy_gvalue);
@@ -343,12 +349,6 @@ nm_setting_to_hash (NMSetting *setting, NMSettingHashFlags flags)
}
g_free (property_specs);
- /* 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;
- }
-
return hash;
}
@@ -364,7 +364,7 @@ nm_setting_to_hash (NMSetting *setting, NMSettingHashFlags flags)
* are strongly typed, thus the GValue type of the hash value must be correct.
* See the documentation on each #NMSetting object subclass for the correct
* property names and value types.
- *
+ *
* Returns: a new #NMSetting object populated with the properties from the
* hash table, or %NULL on failure
**/
@@ -396,19 +396,16 @@ nm_setting_new_from_hash (GType setting_type, GHashTable *hash)
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);
+ /* Assume that any unrecognized property either can be ignored, or
+ * else has a backward-compatibility equivalent.
+ */
+ g_debug ("Ignoring unrecognized property '%s'", prop_name);
continue;
}
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);
- }
+ g_value_copy (src_value, dst_value);
+ params[n_params++].name = prop_name;
}
setting = (NMSetting *) g_object_newv (setting_type, n_params, params);
@@ -422,6 +419,27 @@ nm_setting_new_from_hash (GType setting_type, GHashTable *hash)
return setting;
}
+gboolean
+_nm_setting_get_property (NMSetting *setting, const char *property_name, GValue *value)
+{
+ GParamSpec *prop_spec;
+
+ g_return_val_if_fail (NM_IS_SETTING (setting), FALSE);
+ g_return_val_if_fail (property_name, FALSE);
+ g_return_val_if_fail (value, FALSE);
+
+ prop_spec = g_object_class_find_property (G_OBJECT_GET_CLASS (setting), property_name);
+
+ if (!prop_spec) {
+ g_value_unset (value);
+ return FALSE;
+ }
+
+ g_value_init (value, prop_spec->value_type);
+ g_object_get_property (G_OBJECT (setting), property_name, value);
+ return TRUE;
+}
+
static void
duplicate_setting (NMSetting *setting,
const char *name,
@@ -517,20 +535,31 @@ nm_setting_get_name (NMSetting *setting)
gboolean
nm_setting_verify (NMSetting *setting, GSList *all_settings, GError **error)
{
- g_return_val_if_fail (NM_IS_SETTING (setting), FALSE);
- g_return_val_if_fail (!error || *error == NULL, FALSE);
+ NMSettingVerifyResult result = _nm_setting_verify (setting, all_settings, error);
+
+ if (result == NM_SETTING_VERIFY_NORMALIZABLE)
+ g_clear_error (error);
+
+ return result == NM_SETTING_VERIFY_SUCCESS || result == NM_SETTING_VERIFY_NORMALIZABLE;
+}
+
+NMSettingVerifyResult
+_nm_setting_verify (NMSetting *setting, GSList *all_settings, GError **error)
+{
+ g_return_val_if_fail (NM_IS_SETTING (setting), NM_SETTING_VERIFY_ERROR);
+ g_return_val_if_fail (!error || *error == NULL, NM_SETTING_VERIFY_ERROR);
if (NM_SETTING_GET_CLASS (setting)->verify)
return NM_SETTING_GET_CLASS (setting)->verify (setting, all_settings, error);
- return TRUE;
+ return NM_SETTING_VERIFY_SUCCESS;
}
static gboolean
compare_property (NMSetting *setting,
- NMSetting *other,
- const GParamSpec *prop_spec,
- NMSettingCompareFlags flags)
+ NMSetting *other,
+ const GParamSpec *prop_spec,
+ NMSettingCompareFlags flags)
{
GValue value1 = G_VALUE_INIT;
GValue value2 = G_VALUE_INIT;
@@ -541,8 +570,12 @@ compare_property (NMSetting *setting,
NMSettingSecretFlags a_secret_flags = NM_SETTING_SECRET_FLAG_NONE;
NMSettingSecretFlags b_secret_flags = NM_SETTING_SECRET_FLAG_NONE;
- nm_setting_get_secret_flags (setting, prop_spec->name, &a_secret_flags, NULL);
- nm_setting_get_secret_flags (other, prop_spec->name, &b_secret_flags, NULL);
+ g_return_val_if_fail (!NM_IS_SETTING_VPN (setting), FALSE);
+
+ if (!nm_setting_get_secret_flags (setting, prop_spec->name, &a_secret_flags, NULL))
+ g_return_val_if_reached (FALSE);
+ if (!nm_setting_get_secret_flags (other, prop_spec->name, &b_secret_flags, NULL))
+ g_return_val_if_reached (FALSE);
/* If the secret flags aren't the same the settings aren't the same */
if (a_secret_flags != b_secret_flags)
@@ -610,7 +643,7 @@ nm_setting_compare (NMSetting *a,
/* Fuzzy compare ignores secrets and properties defined with the FUZZY_IGNORE flag */
if ( (flags & NM_SETTING_COMPARE_FLAG_FUZZY)
- && (prop_spec->flags & (NM_SETTING_PARAM_FUZZY_IGNORE | NM_SETTING_PARAM_SECRET)))
+ && (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))
@@ -647,7 +680,16 @@ should_compare_prop (NMSetting *setting,
if (comp_flags & NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS)
return FALSE;
- nm_setting_get_secret_flags (setting, prop_name, &secret_flags, NULL);
+ if ( NM_IS_SETTING_VPN (setting)
+ && g_strcmp0 (prop_name, NM_SETTING_VPN_SECRETS) == 0) {
+ /* FIXME: NMSettingVPN:NM_SETTING_VPN_SECRETS has NM_SETTING_PARAM_SECRET.
+ * nm_setting_get_secret_flags() quite possibly fails, but it might succeed if the
+ * setting accidently uses a key "secrets". */
+ return FALSE;
+ }
+
+ if (!nm_setting_get_secret_flags (setting, prop_name, &secret_flags, NULL))
+ g_return_val_if_reached (FALSE);
if ( (comp_flags & NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS)
&& (secret_flags & NM_SETTING_SECRET_FLAG_AGENT_OWNED))
@@ -699,6 +741,8 @@ nm_setting_diff (NMSetting *a,
guint i;
NMSettingDiffResult a_result = NM_SETTING_DIFF_RESULT_IN_A;
NMSettingDiffResult b_result = NM_SETTING_DIFF_RESULT_IN_B;
+ NMSettingDiffResult a_result_default = NM_SETTING_DIFF_RESULT_IN_A_DEFAULT;
+ NMSettingDiffResult b_result_default = NM_SETTING_DIFF_RESULT_IN_B_DEFAULT;
gboolean results_created = FALSE;
g_return_val_if_fail (results != NULL, FALSE);
@@ -708,6 +752,12 @@ nm_setting_diff (NMSetting *a,
g_return_val_if_fail (G_OBJECT_TYPE (a) == G_OBJECT_TYPE (b), FALSE);
}
+ if ((flags & (NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT | NM_SETTING_COMPARE_FLAG_DIFF_RESULT_NO_DEFAULT)) ==
+ (NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT | NM_SETTING_COMPARE_FLAG_DIFF_RESULT_NO_DEFAULT)) {
+ /* conflicting flags: default to WITH_DEFAULT (clearing NO_DEFAULT). */
+ flags &= ~NM_SETTING_COMPARE_FLAG_DIFF_RESULT_NO_DEFAULT;
+ }
+
/* If the caller is calling this function in a pattern like this to get
* complete diffs:
*
@@ -720,6 +770,8 @@ nm_setting_diff (NMSetting *a,
if (invert_results) {
a_result = NM_SETTING_DIFF_RESULT_IN_B;
b_result = NM_SETTING_DIFF_RESULT_IN_A;
+ a_result_default = NM_SETTING_DIFF_RESULT_IN_B_DEFAULT;
+ b_result_default = NM_SETTING_DIFF_RESULT_IN_A_DEFAULT;
}
if (*results == NULL) {
@@ -732,8 +784,7 @@ nm_setting_diff (NMSetting *a,
for (i = 0; i < n_property_specs; i++) {
GParamSpec *prop_spec = property_specs[i];
- NMSettingDiffResult r = NM_SETTING_DIFF_RESULT_UNKNOWN, tmp;
- gboolean different = TRUE;
+ NMSettingDiffResult r = NM_SETTING_DIFF_RESULT_UNKNOWN;
/* Handle compare flags */
if (!should_compare_prop (a, prop_spec->name, flags, prop_spec->flags))
@@ -742,28 +793,58 @@ nm_setting_diff (NMSetting *a,
continue;
if (b) {
+ gboolean different;
+
different = !NM_SETTING_GET_CLASS (a)->compare_property (a, b, prop_spec, flags);
if (different) {
+ gboolean a_is_default, b_is_default;
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;
+ a_is_default = g_param_value_defaults (prop_spec, &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;
+ b_is_default = g_param_value_defaults (prop_spec, &value);
g_value_unset (&value);
+ if ((flags & NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT) == 0) {
+ if (!a_is_default)
+ r |= a_result;
+ if (!b_is_default)
+ r |= b_result;
+ } else {
+ r |= a_result | b_result;
+ if (a_is_default)
+ r |= a_result_default;
+ if (b_is_default)
+ r |= b_result_default;
+ }
}
- } else
+ } else if ((flags & (NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT | NM_SETTING_COMPARE_FLAG_DIFF_RESULT_NO_DEFAULT)) == 0)
r = a_result; /* only in A */
+ else {
+ GValue value = G_VALUE_INIT;
- if (different) {
- tmp = GPOINTER_TO_UINT (g_hash_table_lookup (*results, prop_spec->name));
- g_hash_table_insert (*results, g_strdup (prop_spec->name), GUINT_TO_POINTER (tmp | r));
+ 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;
+ else if (flags & NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT)
+ r |= a_result | a_result_default;
+
+ g_value_unset (&value);
+ }
+
+ if (r != NM_SETTING_DIFF_RESULT_UNKNOWN) {
+ void *p;
+
+ if (g_hash_table_lookup_extended (*results, prop_spec->name, NULL, &p)) {
+ if ((r & GPOINTER_TO_UINT (p)) != r)
+ g_hash_table_insert (*results, g_strdup (prop_spec->name), GUINT_TO_POINTER (r | GPOINTER_TO_UINT (p)));
+ } else
+ g_hash_table_insert (*results, g_strdup (prop_spec->name), GUINT_TO_POINTER (r));
}
}
g_free (property_specs);
@@ -788,8 +869,8 @@ nm_setting_diff (NMSetting *a,
**/
void
nm_setting_enumerate_values (NMSetting *setting,
- NMSettingValueIterFn func,
- gpointer user_data)
+ NMSettingValueIterFn func,
+ gpointer user_data)
{
GParamSpec **property_specs;
guint n_property_specs;
@@ -862,15 +943,19 @@ _nm_setting_clear_secrets (NMSetting *setting)
static gboolean
clear_secrets_with_flags (NMSetting *setting,
- GParamSpec *pspec,
- NMSettingClearSecretsWithFlagsFn func,
- gpointer user_data)
+ GParamSpec *pspec,
+ NMSettingClearSecretsWithFlagsFn func,
+ gpointer user_data)
{
NMSettingSecretFlags flags = NM_SETTING_SECRET_FLAG_NONE;
gboolean changed = FALSE;
+ g_return_val_if_fail (!NM_IS_SETTING_VPN (setting), FALSE);
+
/* Clear the secret if the user function says to do so */
- nm_setting_get_secret_flags (setting, pspec->name, &flags, NULL);
+ if (!nm_setting_get_secret_flags (setting, pspec->name, &flags, NULL))
+ g_return_val_if_reached (FALSE);
+
if (func (setting, pspec->name, flags, user_data) == TRUE) {
GValue value = G_VALUE_INIT;
@@ -963,7 +1048,6 @@ static int
update_one_secret (NMSetting *setting, const char *key, GValue *value, GError **error)
{
GParamSpec *prop_spec;
- GValue transformed_value = G_VALUE_INIT;
prop_spec = g_object_class_find_property (G_OBJECT_GET_CLASS (setting), key);
if (!prop_spec) {
@@ -995,11 +1079,6 @@ update_one_secret (NMSetting *setting, const char *key, GValue *value, GError **
g_object_set_property (G_OBJECT (setting), prop_spec->name, 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);
- return NM_SETTING_UPDATE_SECRET_SUCCESS_MODIFIED;
- }
g_set_error (error,
NM_SETTING_ERROR,
NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH,
@@ -1016,7 +1095,7 @@ update_one_secret (NMSetting *setting, const char *key, GValue *value, GError **
*
* Update the setting's secrets, given a hash table of secrets intended for that
* setting (deserialized from D-Bus for example).
- *
+ *
* Returns: %TRUE if the secrets were successfully updated, %FALSE on failure to
* update one or more of the secrets.
**/
@@ -1095,8 +1174,11 @@ get_secret_flags (NMSetting *setting,
char *flags_prop;
NMSettingSecretFlags flags = NM_SETTING_SECRET_FLAG_NONE;
- if (verify_secret)
- g_return_val_if_fail (is_secret_prop (setting, secret_name, error), FALSE);
+ if (verify_secret && !is_secret_prop (setting, secret_name, error)) {
+ if (out_flags)
+ *out_flags = NM_SETTING_SECRET_FLAG_NONE;
+ return FALSE;
+ }
flags_prop = g_strdup_printf ("%s-flags", secret_name);
g_object_get (G_OBJECT (setting), flags_prop, &flags, NULL);
@@ -1199,8 +1281,6 @@ nm_setting_to_string (NMSetting *setting)
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);
- if (!property_specs)
- return NULL;
string = g_string_new (nm_setting_get_name (setting));
g_string_append_c (string, '\n');
@@ -1259,6 +1339,87 @@ nm_setting_get_virtual_iface_name (NMSetting *setting)
return NULL;
}
+
+NMSettingVerifyResult
+_nm_setting_verify_deprecated_virtual_iface_name (const char *interface_name,
+ gboolean allow_missing,
+ const char *setting_name,
+ const char *setting_property,
+ GQuark error_quark,
+ gint e_invalid_property,
+ gint e_missing_property,
+ GSList *all_settings,
+ GError **error)
+{
+ NMSettingConnection *s_con;
+ const char *con_name;
+
+ s_con = NM_SETTING_CONNECTION (nm_setting_find_in_list (all_settings, NM_SETTING_CONNECTION_SETTING_NAME));
+ con_name = s_con ? nm_setting_connection_get_interface_name (s_con) : NULL;
+ if (!interface_name && !con_name) {
+ if (allow_missing)
+ return NM_SETTING_VERIFY_SUCCESS;
+
+ 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_INTERFACE_NAME);
+ return NM_SETTING_VERIFY_ERROR;
+ }
+ if (!con_name && !nm_utils_iface_valid_name (interface_name)) {
+ /* the interface_name is invalid, we cannot normalize it. Only do this if !con_name,
+ * because if con_name is set, it can overwrite interface_name. */
+ g_set_error_literal (error,
+ error_quark,
+ e_invalid_property,
+ _("property is invalid"));
+ g_prefix_error (error, "%s.%s: ", setting_name, setting_property);
+ return NM_SETTING_VERIFY_ERROR;
+ }
+ if (!con_name) {
+ /* NMSettingConnection has interface not set, it should be normalized to interface_name */
+ 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_INTERFACE_NAME);
+ return NM_SETTING_VERIFY_NORMALIZABLE;
+ }
+ if (!nm_utils_iface_valid_name (con_name)) {
+ /* NMSettingConnection:interface_name is invalid, we cannot normalize it. */
+ g_set_error_literal (error,
+ NM_SETTING_CONNECTION_ERROR,
+ NM_SETTING_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("property is invalid"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_INTERFACE_NAME);
+ return NM_SETTING_VERIFY_ERROR;
+ }
+ if (!interface_name) {
+ /* Normalize by setting NMSettingConnection:interface_name. */
+ g_set_error_literal (error,
+ error_quark,
+ e_missing_property,
+ _("property is missing"));
+ g_prefix_error (error, "%s.%s: ", setting_name, setting_property);
+ return NM_SETTING_VERIFY_NORMALIZABLE;
+ }
+ if (strcmp (con_name, interface_name) != 0) {
+ /* con_name and interface_name are different. It can be normalized by setting interface_name
+ * to con_name. */
+ g_set_error_literal (error,
+ error_quark,
+ e_invalid_property,
+ _("property is invalid"));
+ g_prefix_error (error, "%s.%s: ", setting_name, setting_property);
+ /* we would like to make this a NORMALIZEABLE_ERROR, but that might
+ * break older connections. */
+ return NM_SETTING_VERIFY_NORMALIZABLE;
+ }
+
+ return NM_SETTING_VERIFY_SUCCESS;
+}
+
/*****************************************************************************/
static void
@@ -1348,13 +1509,8 @@ nm_setting_class_init (NMSettingClass *setting_class)
**/
g_object_class_install_property
(object_class, PROP_NAME,
- g_param_spec_string (NM_SETTING_NAME,
- "Name",
- "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.",
- NULL,
- G_PARAM_READWRITE));
+ g_param_spec_string (NM_SETTING_NAME, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
}
-
diff --git a/libnm-util/nm-setting.h b/libnm-util/nm-setting.h
index 51e7de48a..28c6975a8 100644
--- a/libnm-util/nm-setting.h
+++ b/libnm-util/nm-setting.h
@@ -1,9 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
- * Dan Williams <dcbw@redhat.com>
- * Tambet Ingo <tambet@gmail.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
@@ -19,8 +16,8 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2011 Red Hat, Inc.
- * (C) Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2011 Red Hat, Inc.
+ * Copyright 2007 - 2008 Novell, Inc.
*/
#ifndef NM_SETTING_H
@@ -127,6 +124,20 @@ typedef enum {
* @NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS: ignore secrets for which
* the secret's flags indicate the secret should not be saved to persistent
* storage (ie, the secret's flag includes @NM_SETTING_SECRET_FLAG_NOT_SAVED)
+ * @NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT: if this flag is set,
+ * nm_setting_diff() and nm_connection_diff() will also include properties that
+ * are set to their default value. See also @NM_SETTING_COMPARE_FLAG_DIFF_RESULT_NO_DEFAULT.
+ * @NM_SETTING_COMPARE_FLAG_DIFF_RESULT_NO_DEFAULT: if this flag is set,
+ * nm_setting_diff() and nm_connection_diff() will not include properties that
+ * are set to their default value. This is the opposite of
+ * @NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT. If both flags are set together,
+ * @NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT wins. If both flags are unset,
+ * this means to exclude default properties if there is a setting to compare,
+ * but include all properties, if the setting 'b' is missing. This is the legacy
+ * behaviour of libnm-util, where nm_setting_diff() behaved differently depending
+ * on whether the setting 'b' was available. If @NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT
+ * is set, nm_setting_diff() will also set the flags @NM_SETTING_DIFF_RESULT_IN_A_DEFAULT
+ * and @NM_SETTING_DIFF_RESULT_IN_B_DEFAULT, if the values are default values.
*
* These flags modify the comparison behavior when comparing two settings or
* two connections.
@@ -138,7 +149,9 @@ typedef enum {
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
+ NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS = 0x00000010,
+ NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT = 0x00000020,
+ NM_SETTING_COMPARE_FLAG_DIFF_RESULT_NO_DEFAULT = 0x00000040,
/* 0x80000000 is used for a private flag */
} NMSettingCompareFlags;
@@ -173,7 +186,7 @@ typedef struct {
GObjectClass parent;
/* Virtual functions */
- gboolean (*verify) (NMSetting *setting,
+ gint (*verify) (NMSetting *setting,
GSList *all_settings,
GError **error);
@@ -270,6 +283,10 @@ gboolean nm_setting_compare (NMSetting *a,
* @NM_SETTING_DIFF_RESULT_UNKNOWN: unknown result
* @NM_SETTING_DIFF_RESULT_IN_A: the property is present in setting A
* @NM_SETTING_DIFF_RESULT_IN_B: the property is present in setting B
+ * @NM_SETTING_DIFF_RESULT_IN_A_DEFAULT: the property is present in
+ * setting A but is set to the default value. This flag is only set,
+ * if you specify @NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT.
+ * @NM_SETTING_DIFF_RESULT_IN_B_DEFAULT: analog to @NM_SETTING_DIFF_RESULT_IN_A_DEFAULT.
*
* These values indicate the result of a setting difference operation.
**/
@@ -277,6 +294,8 @@ typedef enum {
NM_SETTING_DIFF_RESULT_UNKNOWN = 0x00000000,
NM_SETTING_DIFF_RESULT_IN_A = 0x00000001,
NM_SETTING_DIFF_RESULT_IN_B = 0x00000002,
+ NM_SETTING_DIFF_RESULT_IN_A_DEFAULT = 0x00000004,
+ NM_SETTING_DIFF_RESULT_IN_B_DEFAULT = 0x00000004,
} NMSettingDiffResult;
gboolean nm_setting_diff (NMSetting *a,
@@ -318,4 +337,3 @@ const char *nm_setting_get_virtual_iface_name (NMSetting *setting);
G_END_DECLS
#endif /* NM_SETTING_H */
-
diff --git a/libnm-util/nm-utils-enum-types.c b/libnm-util/nm-utils-enum-types.c
index 9b3eb4f4d..6ef157da3 100644
--- a/libnm-util/nm-utils-enum-types.c
+++ b/libnm-util/nm-utils-enum-types.c
@@ -47,6 +47,7 @@ nm_connection_error_get_type (void)
{ NM_CONNECTION_ERROR_CONNECTION_SETTING_NOT_FOUND, "NM_CONNECTION_ERROR_CONNECTION_SETTING_NOT_FOUND", "ConnectionSettingNotFound" },
{ NM_CONNECTION_ERROR_CONNECTION_TYPE_INVALID, "NM_CONNECTION_ERROR_CONNECTION_TYPE_INVALID", "ConnectionTypeInvalid" },
{ NM_CONNECTION_ERROR_SETTING_NOT_FOUND, "NM_CONNECTION_ERROR_SETTING_NOT_FOUND", "SettingNotFound" },
+ { NM_CONNECTION_ERROR_INVALID_SETTING, "NM_CONNECTION_ERROR_INVALID_SETTING", "InvalidSetting" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
@@ -112,6 +113,8 @@ nm_setting_compare_flags_get_type (void)
{ NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS, "NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS", "ignore-secrets" },
{ NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS, "NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS", "ignore-agent-owned-secrets" },
{ NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS, "NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS", "ignore-not-saved-secrets" },
+ { NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT, "NM_SETTING_COMPARE_FLAG_DIFF_RESULT_WITH_DEFAULT", "diff-result-with-default" },
+ { NM_SETTING_COMPARE_FLAG_DIFF_RESULT_NO_DEFAULT, "NM_SETTING_COMPARE_FLAG_DIFF_RESULT_NO_DEFAULT", "diff-result-no-default" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
@@ -152,6 +155,8 @@ nm_setting_diff_result_get_type (void)
{ NM_SETTING_DIFF_RESULT_UNKNOWN, "NM_SETTING_DIFF_RESULT_UNKNOWN", "unknown" },
{ NM_SETTING_DIFF_RESULT_IN_A, "NM_SETTING_DIFF_RESULT_IN_A", "in-a" },
{ NM_SETTING_DIFF_RESULT_IN_B, "NM_SETTING_DIFF_RESULT_IN_B", "in-b" },
+ { NM_SETTING_DIFF_RESULT_IN_A_DEFAULT, "NM_SETTING_DIFF_RESULT_IN_A_DEFAULT", "in-a-default" },
+ { NM_SETTING_DIFF_RESULT_IN_B_DEFAULT, "NM_SETTING_DIFF_RESULT_IN_B_DEFAULT", "in-b-default" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
diff --git a/libnm-util/nm-utils-enum-types.h b/libnm-util/nm-utils-enum-types.h
deleted file mode 100644
index 9b14a5d3c..000000000
--- a/libnm-util/nm-utils-enum-types.h
+++ /dev/null
@@ -1,101 +0,0 @@
-
-
-
-/* Generated by glib-mkenums. Do not edit */
-
-#ifndef __NM_UTILS_ENUM_TYPES_H__
-#define __NM_UTILS_ENUM_TYPES_H__
-
-#include <glib-object.h>
-
-G_BEGIN_DECLS
-GType nm_connection_error_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_CONNECTION_ERROR (nm_connection_error_get_type ())
-GType nm_setting_error_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_SETTING_ERROR (nm_setting_error_get_type ())
-GType nm_setting_secret_flags_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_SETTING_SECRET_FLAGS (nm_setting_secret_flags_get_type ())
-GType nm_setting_compare_flags_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_SETTING_COMPARE_FLAGS (nm_setting_compare_flags_get_type ())
-GType nm_setting_hash_flags_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_SETTING_HASH_FLAGS (nm_setting_hash_flags_get_type ())
-GType nm_setting_diff_result_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_SETTING_DIFF_RESULT (nm_setting_diff_result_get_type ())
-GType nm_setting_802_1x_ck_format_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_SETTING_802_1X_CK_FORMAT (nm_setting_802_1x_ck_format_get_type ())
-GType nm_setting_802_1x_ck_scheme_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_SETTING_802_1X_CK_SCHEME (nm_setting_802_1x_ck_scheme_get_type ())
-GType nm_setting_802_1x_error_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_SETTING_802_1X_ERROR (nm_setting_802_1x_error_get_type ())
-GType nm_setting_adsl_error_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_SETTING_ADSL_ERROR (nm_setting_adsl_error_get_type ())
-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;
-#define NM_TYPE_SETTING_IP4_CONFIG_ERROR (nm_setting_ip4_config_error_get_type ())
-GType nm_setting_vlan_error_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_SETTING_VLAN_ERROR (nm_setting_vlan_error_get_type ())
-GType nm_vlan_priority_map_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_VLAN_PRIORITY_MAP (nm_vlan_priority_map_get_type ())
-GType nm_vlan_flags_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_VLAN_FLAGS (nm_vlan_flags_get_type ())
-GType nm_setting_ip6_config_error_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_SETTING_IP6_CONFIG_ERROR (nm_setting_ip6_config_error_get_type ())
-GType nm_setting_ip6_config_privacy_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_SETTING_IP6_CONFIG_PRIVACY (nm_setting_ip6_config_privacy_get_type ())
-GType nm_setting_ppp_error_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_SETTING_PPP_ERROR (nm_setting_ppp_error_get_type ())
-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;
-#define NM_TYPE_SETTING_GSM_NETWORK_TYPE (nm_setting_gsm_network_type_get_type ())
-GType nm_setting_gsm_network_band_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_SETTING_GSM_NETWORK_BAND (nm_setting_gsm_network_band_get_type ())
-GType nm_setting_cdma_error_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_SETTING_CDMA_ERROR (nm_setting_cdma_error_get_type ())
-GType nm_setting_olpc_mesh_error_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_SETTING_OLPC_MESH_ERROR (nm_setting_olpc_mesh_error_get_type ())
-GType nm_setting_wimax_error_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_SETTING_WIMAX_ERROR (nm_setting_wimax_error_get_type ())
-GType nm_setting_wired_error_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_SETTING_WIRED_ERROR (nm_setting_wired_error_get_type ())
-GType nm_setting_wireless_error_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_SETTING_WIRELESS_ERROR (nm_setting_wireless_error_get_type ())
-GType nm_setting_wireless_security_error_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_SETTING_WIRELESS_SECURITY_ERROR (nm_setting_wireless_security_error_get_type ())
-GType nm_wep_key_type_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_WEP_KEY_TYPE (nm_wep_key_type_get_type ())
-GType nm_setting_vpn_error_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_SETTING_VPN_ERROR (nm_setting_vpn_error_get_type ())
-GType nm_utils_security_type_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_UTILS_SECURITY_TYPE (nm_utils_security_type_get_type ())
-G_END_DECLS
-
-#endif /* __NM_UTILS_ENUM_TYPES_H__ */
-
-
-
diff --git a/libnm-util/nm-utils-private.h b/libnm-util/nm-utils-private.h
index 9d73a939f..0e7be21e2 100644
--- a/libnm-util/nm-utils-private.h
+++ b/libnm-util/nm-utils-private.h
@@ -1,10 +1,5 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
- *
- * Ray Strode <rstrode@redhat.com>
- * Dan Williams <dcbw@redhat.com>
- * Tambet Ingo <tambet@gmail.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
@@ -20,7 +15,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2005 - 2008 Red Hat, Inc.
+ * Copyright 2005 - 2008 Red Hat, Inc.
*/
#ifndef __NM_UTILS_PRIVATE_H__
@@ -39,32 +34,4 @@ gboolean _nm_utils_gvalue_array_validate (GValueArray *elements,
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 0176d9c3c..203803f23 100644
--- a/libnm-util/nm-utils.c
+++ b/libnm-util/nm-utils.c
@@ -1,11 +1,6 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
- *
- * Ray Strode <rstrode@redhat.com>
- * Dan Williams <dcbw@redhat.com>
- * Tambet Ingo <tambet@gmail.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
@@ -21,7 +16,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2005 - 2013 Red Hat, Inc.
+ * Copyright 2005 - 2013 Red Hat, Inc.
*/
#include "config.h"
@@ -31,6 +26,10 @@
#include <netinet/ether.h>
#include <linux/if_infiniband.h>
#include <uuid/uuid.h>
+#include <libintl.h>
+#include <gmodule.h>
+#include <gio/gio.h>
+#include <glib/gi18n-lib.h>
#include "nm-utils.h"
#include "nm-utils-private.h"
@@ -38,13 +37,17 @@
#include "nm-dbus-glib-types.h"
#include "nm-setting-private.h"
#include "crypto.h"
+#include "nm-utils-internal.h"
+
+/* Embed the commit id in the build binary */
+static const char *const __nm_git_sha = STRLEN (NM_GIT_SHA) > 0 ? "NM_GIT_SHA:"NM_GIT_SHA : "";
/**
* SECTION:nm-utils
* @short_description: Utility functions
* @include: nm-utils.h
*
- * A collection of utility functions for working SSIDs, IP addresses, Wi-Fi
+ * A collection of utility functions for working with SSIDs, IP addresses, Wi-Fi
* access points and devices, among other things.
*/
@@ -144,7 +147,7 @@ init_lang_to_encodings_hash (void)
langToEncodings5 = g_hash_table_new (g_str_hash, g_str_equal);
while (enc->lang) {
g_hash_table_insert (langToEncodings5, (gpointer) enc->lang,
- (gpointer) &enc->encodings);
+ (gpointer) &enc->encodings);
enc++;
}
}
@@ -155,7 +158,7 @@ init_lang_to_encodings_hash (void)
langToEncodings2 = g_hash_table_new (g_str_hash, g_str_equal);
while (enc->lang) {
g_hash_table_insert (langToEncodings2, (gpointer) enc->lang,
- (gpointer) &enc->encodings);
+ (gpointer) &enc->encodings);
enc++;
}
}
@@ -184,8 +187,7 @@ get_encodings_for_lang (const char *lang,
init_lang_to_encodings_hash ();
tmp_lang = g_strdup (lang);
- if ((encodings = g_hash_table_lookup (langToEncodings5, tmp_lang)))
- {
+ if ((encodings = g_hash_table_lookup (langToEncodings5, tmp_lang))) {
*encoding1 = (char *) encodings->encoding1;
*encoding2 = (char *) encodings->encoding2;
*encoding3 = (char *) encodings->encoding3;
@@ -195,8 +197,7 @@ get_encodings_for_lang (const char *lang,
/* Truncate tmp_lang to length of 2 */
if (strlen (tmp_lang) > 2)
tmp_lang[2] = '\0';
- if (!success && (encodings = g_hash_table_lookup (langToEncodings2, tmp_lang)))
- {
+ if (!success && (encodings = g_hash_table_lookup (langToEncodings2, tmp_lang))) {
*encoding1 = (char *) encodings->encoding1;
*encoding2 = (char *) encodings->encoding2;
*encoding3 = (char *) encodings->encoding3;
@@ -209,25 +210,40 @@ get_encodings_for_lang (const char *lang,
/* init, deinit for libnm_util */
+static void __attribute__((constructor))
+_check_symbols (void)
+{
+ GModule *self;
+ gpointer func;
+
+ self = g_module_open (NULL, 0);
+ if (g_module_symbol (self, "nm_device_state_get_type", &func))
+ g_error ("libnm symbols detected; Mixing libnm with libnm-util/libnm-glib is not supported");
+ g_module_close (self);
+}
+
static gboolean initialized = FALSE;
/**
* nm_utils_init:
* @error: location to store error, or %NULL
*
- * Initializes libnm-util; should be called when starting and program that
- * uses libnm-util. Sets up an atexit() handler to ensure de-initialization
- * is performed, but calling nm_utils_deinit() to explicitly deinitialize
- * libnm-util can also be done. This function can be called more than once.
- *
+ * Initializes libnm-util; should be called when starting any program that
+ * uses libnm-util. This function can be called more than once.
+ *
* Returns: %TRUE if the initialization was successful, %FALSE on failure.
**/
gboolean
nm_utils_init (GError **error)
{
+ (void) __nm_git_sha;
+
if (!initialized) {
initialized = TRUE;
+ bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
+ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+
if (!crypto_init (error))
return FALSE;
@@ -239,18 +255,12 @@ nm_utils_init (GError **error)
/**
* nm_utils_deinit:
*
- * Frees all resources used internally by libnm-util. This function is called
- * from an atexit() handler, set up by nm_utils_init(), but is safe to be called
- * more than once. Subsequent calls have no effect until nm_utils_init() is
- * called again.
+ * No-op. Although this function still exists for ABI compatibility reasons, it
+ * does not have any effect, and does not ever need to be called.
**/
void
nm_utils_deinit (void)
{
- if (initialized) {
- crypto_deinit ();
- initialized = FALSE;
- }
}
/* ssid helpers */
@@ -340,16 +350,16 @@ nm_utils_ssid_to_utf8 (const GByteArray *ssid)
gboolean
nm_utils_is_empty_ssid (const guint8 * ssid, int len)
{
- /* Single white space is for Linksys APs */
- if (len == 1 && ssid[0] == ' ')
- return TRUE;
+ /* Single white space is for Linksys APs */
+ if (len == 1 && ssid[0] == ' ')
+ return TRUE;
- /* Otherwise, if the entire ssid is 0, we assume it is hidden */
- while (len--) {
- if (ssid[len] != '\0')
- return FALSE;
- }
- return TRUE;
+ /* Otherwise, if the entire ssid is 0, we assume it is hidden */
+ while (len--) {
+ if (ssid[len] != '\0')
+ return FALSE;
+ }
+ return TRUE;
}
#define ESSID_MAX_SIZE 32
@@ -475,8 +485,8 @@ nm_utils_gvalue_hash_dup (GHashTable *hash)
g_return_val_if_fail (hash != NULL, NULL);
table = g_hash_table_new_full (g_str_hash, g_str_equal,
- (GDestroyNotify) g_free,
- value_destroy);
+ (GDestroyNotify) g_free,
+ value_destroy);
g_hash_table_foreach (hash, value_dup, table);
@@ -675,7 +685,7 @@ nm_utils_security_valid (NMUtilsSecurityType type,
|| ((type == NMU_SEC_LEAP) && !adhoc)) {
if (wifi_caps & (NM_WIFI_DEVICE_CAP_CIPHER_WEP40 | NM_WIFI_DEVICE_CAP_CIPHER_WEP104))
return TRUE;
- else
+ else
return FALSE;
}
}
@@ -894,7 +904,7 @@ nm_utils_wpa_psk_valid (const char *psk)
* this serialization is not guaranteed to be stable and the #GArray may be
* extended in the future.
*
- * Returns: (transfer full) (element-type NetworkManager.IP4Address): a newly allocated #GSList of #NMIP4Address objects
+ * Returns: (transfer full) (element-type NMIP4Address): a newly allocated #GSList of #NMIP4Address objects
**/
GSList *
nm_utils_ip4_addresses_from_gvalue (const GValue *value)
@@ -912,7 +922,7 @@ nm_utils_ip4_addresses_from_gvalue (const GValue *value)
g_warning ("Ignoring invalid IP4 address");
continue;
}
-
+
addr = nm_ip4_address_new ();
nm_ip4_address_set_address (addr, g_array_index (array, guint32, 0));
nm_ip4_address_set_prefix (addr, g_array_index (array, guint32, 1));
@@ -976,7 +986,7 @@ nm_utils_ip4_addresses_to_gvalue (GSList *list, GValue *value)
* format of this serialization is not guaranteed to be stable and may be
* extended in the future.
*
- * Returns: (transfer full) (element-type NetworkManager.IP4Route): a newly allocated #GSList of #NMIP4Route objects
+ * Returns: (transfer full) (element-type NMIP4Route): a newly allocated #GSList of #NMIP4Route objects
**/
GSList *
nm_utils_ip4_routes_from_gvalue (const GValue *value)
@@ -1133,7 +1143,7 @@ nm_utils_ip4_get_default_prefix (guint32 ip)
* this serialization is not guaranteed to be stable and the #GValueArray may be
* extended in the future.
*
- * Returns: (transfer full) (element-type NetworkManager.IP6Address): a newly allocated #GSList of #NMIP6Address objects
+ * Returns: (transfer full) (element-type NMIP6Address): a newly allocated #GSList of #NMIP6Address objects
**/
GSList *
nm_utils_ip6_addresses_from_gvalue (const GValue *value)
@@ -1168,7 +1178,7 @@ nm_utils_ip6_addresses_from_gvalue (const GValue *value)
ba_addr = g_value_get_boxed (tmp);
if (ba_addr->len != 16) {
g_warning ("%s: ignoring invalid IP6 address of length %d",
- __func__, ba_addr->len);
+ __func__, ba_addr->len);
continue;
}
@@ -1176,7 +1186,7 @@ nm_utils_ip6_addresses_from_gvalue (const GValue *value)
prefix = g_value_get_uint (tmp);
if (prefix > 128) {
g_warning ("%s: ignoring invalid IP6 prefix %d",
- __func__, prefix);
+ __func__, prefix);
continue;
}
@@ -1185,7 +1195,7 @@ nm_utils_ip6_addresses_from_gvalue (const GValue *value)
ba_gw = g_value_get_boxed (tmp);
if (ba_gw->len != 16) {
g_warning ("%s: ignoring invalid IP6 gateway address of length %d",
- __func__, ba_gw->len);
+ __func__, ba_gw->len);
continue;
}
}
@@ -1270,7 +1280,7 @@ nm_utils_ip6_addresses_to_gvalue (GSList *list, GValue *value)
* 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
+ * Returns: (transfer full) (element-type NMIP6Route): a newly allocated #GSList of #NMIP6Route objects
**/
GSList *
nm_utils_ip6_routes_from_gvalue (const GValue *value)
@@ -1298,7 +1308,7 @@ nm_utils_ip6_routes_from_gvalue (const GValue *value)
dest = g_value_get_boxed (g_value_array_get_nth (route_values, 0));
if (dest->len != 16) {
g_warning ("%s: ignoring invalid IP6 dest address of length %d",
- __func__, dest->len);
+ __func__, dest->len);
continue;
}
@@ -1307,7 +1317,7 @@ nm_utils_ip6_routes_from_gvalue (const GValue *value)
next_hop = g_value_get_boxed (g_value_array_get_nth (route_values, 2));
if (next_hop->len != 16) {
g_warning ("%s: ignoring invalid IP6 next_hop address of length %d",
- __func__, next_hop->len);
+ __func__, next_hop->len);
continue;
}
@@ -1334,7 +1344,7 @@ nm_utils_ip6_routes_from_gvalue (const GValue *value)
* 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
+ * prefix, next hop, and metric). The specific format of this serialization is not
* guaranteed to be stable and may be extended in the future.
**/
void
@@ -1485,9 +1495,11 @@ char *
nm_utils_uuid_generate_from_string (const char *s)
{
GError *error = NULL;
- uuid_t *uuid;
+ uuid_t uuid;
char *buf = NULL;
+ g_return_val_if_fail (s && *s, NULL);
+
if (!nm_utils_init (&error)) {
g_warning ("error initializing crypto: (%d) %s",
error ? error->code : 0,
@@ -1497,21 +1509,18 @@ nm_utils_uuid_generate_from_string (const char *s)
return NULL;
}
- uuid = g_malloc0 (sizeof (*uuid));
- if (!crypto_md5_hash (NULL, 0, s, strlen (s), (char *) uuid, sizeof (*uuid), &error)) {
+ if (!crypto_md5_hash (NULL, 0, s, strlen (s), (char *) uuid, sizeof (uuid), &error)) {
g_warning ("error generating UUID: (%d) %s",
error ? error->code : 0,
error ? error->message : "unknown");
if (error)
g_error_free (error);
- goto out;
+ return NULL;
}
buf = g_malloc0 (37);
- uuid_unparse_lower (*uuid, &buf[0]);
+ uuid_unparse_lower (uuid, &buf[0]);
-out:
- g_free (uuid);
return buf;
}
@@ -1721,9 +1730,9 @@ nm_utils_rsa_key_encrypt_aes (const GByteArray *data,
* nm_utils_file_is_pkcs12:
* @filename: name of the file to test
*
- * Utility function to find out if the @filename is in PKCS#12 format.
+ * Utility function to find out if the @filename is in PKCS#<!-- -->12 format.
*
- * Returns: %TRUE if the file is PKCS#12, %FALSE if it is not
+ * Returns: %TRUE if the file is PKCS#<!-- -->12, %FALSE if it is not
**/
gboolean
nm_utils_file_is_pkcs12 (const char *filename)
@@ -1731,6 +1740,82 @@ nm_utils_file_is_pkcs12 (const char *filename)
return crypto_is_pkcs12_file (filename, NULL);
}
+/**********************************************************************************************/
+
+/**
+ * nm_utils_file_search_in_paths:
+ * @progname: the helper program name, like "iptables"
+ * Must be a non-empty string, without path separator (/).
+ * @try_first: (allow-none): a custom path to try first before searching.
+ * It is silently ignored if it is empty or not an absolute path.
+ * @paths: (allow-none): a %NULL terminated list of search paths.
+ * Can be empty or %NULL, in which case only @try_first is checked.
+ * @file_test_flags: the flags passed to g_file_test() when searching
+ * for @progname. Set it to 0 to skip the g_file_test().
+ * @predicate: (scope call): if given, pass the file name to this function
+ * for additional checks. This check is performed after the check for
+ * @file_test_flags. You cannot omit both @file_test_flags and @predicate.
+ * @user_data: (closure): (allow-none): user data for @predicate function.
+ * @error: on failure, a "not found" error using @error_domain and @error_code
+ *
+ * Searches for a @progname file in a list of search @paths.
+ *
+ * Returns: (transfer none): the full path to the helper, if found, or %NULL if not found.
+ * The returned string is not owned by the caller, but later
+ * invocations of the function might overwrite it.
+ */
+const char *
+nm_utils_file_search_in_paths (const char *progname,
+ const char *try_first,
+ const char *const *paths,
+ GFileTest file_test_flags,
+ NMUtilsFileSearchInPathsPredicate predicate,
+ gpointer user_data,
+ GError **error)
+{
+ GString *tmp;
+ const char *ret;
+
+ g_return_val_if_fail (!error || !*error, NULL);
+ g_return_val_if_fail (progname && progname[0] && !strchr (progname, '/'), NULL);
+ g_return_val_if_fail (file_test_flags || predicate, NULL);
+
+ /* Only consider @try_first if it is a valid, absolute path. This makes
+ * it simpler to pass in a path from configure checks. */
+ if ( try_first
+ && try_first[0] == '/'
+ && (file_test_flags == 0 || g_file_test (try_first, file_test_flags))
+ && (!predicate || predicate (try_first, user_data)))
+ return g_intern_string (try_first);
+
+ if (!paths || !*paths)
+ goto NOT_FOUND;
+
+ tmp = g_string_sized_new (50);
+ for (; *paths; paths++) {
+ if (!*paths)
+ continue;
+ g_string_append (tmp, *paths);
+ if (tmp->str[tmp->len - 1] != '/')
+ g_string_append_c (tmp, '/');
+ g_string_append (tmp, progname);
+ if ( (file_test_flags == 0 || g_file_test (tmp->str, file_test_flags))
+ && (!predicate || predicate (tmp->str, user_data))) {
+ ret = g_intern_string (tmp->str);
+ g_string_free (tmp, TRUE);
+ return ret;
+ }
+ g_string_set_size (tmp, 0);
+ }
+ g_string_free (tmp, TRUE);
+
+NOT_FOUND:
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND, _("Could not find \"%s\" binary"), progname);
+ return NULL;
+}
+
+/**********************************************************************************************/
+
/* Band, channel/frequency stuff for wireless */
struct cf_pair {
guint32 chan;
@@ -1899,7 +1984,7 @@ nm_utils_wifi_find_next_channel (guint32 channel, int direction, char *band)
if (channel == pair->chan)
return channel;
if ((channel < (pair+1)->chan) && (channel > pair->chan)) {
- if (direction > 0)
+ if (direction > 0)
return (pair+1)->chan;
else
return pair->chan;
@@ -1942,7 +2027,8 @@ nm_utils_wifi_is_channel_valid (guint32 channel, const char *band)
/**
* nm_utils_hwaddr_len:
- * @type: the type of address; either %ARPHRD_ETHER or %ARPHRD_INFINIBAND
+ * @type: the type of address; either <literal>ARPHRD_ETHER</literal> or
+ * <literal>ARPHRD_INFINIBAND</literal>
*
* Returns the length in octets of a hardware address of type @type.
*
@@ -1963,11 +2049,12 @@ nm_utils_hwaddr_len (int type)
* 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 <literal>ARPHRD_ETHER</literal> or
+ * <literal>ARPHRD_INFINIBAND</literal>) 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 <literal>ARPHRD_ETHER</literal> or
+ * <literal>ARPHRD_INFINIBAND</literal>. If the length is unexpected, return -1
+ * (unsupported type/length).
*
* Deprecated: This could not be extended to cover other types, since
* there is not a one-to-one mapping between types and lengths. This
@@ -1992,7 +2079,8 @@ nm_utils_hwaddr_type (int len)
/**
* nm_utils_hwaddr_aton:
* @asc: the ASCII representation of a hardware address
- * @type: the type of address; either %ARPHRD_ETHER or %ARPHRD_INFINIBAND
+ * @type: the type of address; either <literal>ARPHRD_ETHER</literal> or
+ * <literal>ARPHRD_INFINIBAND</literal>
* @buffer: buffer to store the result into
*
* Parses @asc and converts it to binary form in @buffer. See
@@ -2019,7 +2107,8 @@ nm_utils_hwaddr_aton (const char *asc, int type, gpointer buffer)
/**
* nm_utils_hwaddr_atoba:
* @asc: the ASCII representation of a hardware address
- * @type: the type of address; either %ARPHRD_ETHER or %ARPHRD_INFINIBAND
+ * @type: the type of address; either <literal>ARPHRD_ETHER</literal> or
+ * <literal>ARPHRD_INFINIBAND</literal>
*
* Parses @asc and converts it to binary form in a #GByteArray. See
* nm_utils_hwaddr_aton() if you don't want a #GByteArray.
@@ -2051,7 +2140,8 @@ nm_utils_hwaddr_atoba (const char *asc, int type)
/**
* nm_utils_hwaddr_ntoa:
* @addr: a binary hardware address
- * @type: the type of address; either %ARPHRD_ETHER or %ARPHRD_INFINIBAND
+ * @type: the type of address; either <literal>ARPHRD_ETHER</literal> or
+ * <literal>ARPHRD_INFINIBAND</literal>
*
* Converts @addr to textual form.
*
@@ -2235,8 +2325,7 @@ nm_utils_bin2hexstr (const char *bytes, int len, int final_len)
g_return_val_if_fail (final_len < buflen, NULL);
result = g_malloc0 (buflen);
- for (i = 0; i < len; i++)
- {
+ for (i = 0; i < len; i++) {
result[2*i] = hex_digits[(bytes[i] >> 4) & 0xf];
result[2*i+1] = hex_digits[bytes[i] & 0xf];
}
@@ -2385,13 +2474,14 @@ 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.
+ * @dst: the destination buffer, it must contain at least
+ * <literal>INET_ADDRSTRLEN</literal> 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.
*
@@ -2410,13 +2500,14 @@ nm_utils_inet4_ntop (in_addr_t inaddr, char *dst)
/**
* 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.
+ * @dst: the destination buffer, it must contain at least
+ * <literal>INET6_ADDRSTRLEN</literal> 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.
*
@@ -2498,13 +2589,10 @@ nm_utils_check_virtual_device_compatibility (GType virtual_type, GType other_typ
/***********************************************************/
-/* Unused prototype to make the compiler happy */
-const NMUtilsPrivateData *nm_util_get_private (void);
+/* Unused prototypes to make the compiler happy */
+gconstpointer nm_utils_get_private (void);
+gconstpointer 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:
@@ -2516,10 +2604,11 @@ static const NMUtilsPrivateData data = {
*
* Since: 0.9.10
*/
-const NMUtilsPrivateData *
+gconstpointer
nm_utils_get_private (void)
{
- return &data;
+ /* We told you not to use it! */
+ g_assert_not_reached ();
}
/**
@@ -2531,9 +2620,9 @@ nm_utils_get_private (void)
*
* Since: 0.9.10
*/
-const NMUtilsPrivateData *
+gconstpointer
nm_util_get_private (void)
{
- /* Compat function to preserve ABI */
- return nm_utils_get_private ();
+ /* We told you not to use it! */
+ g_assert_not_reached ();
}
diff --git a/libnm-util/nm-utils.h b/libnm-util/nm-utils.h
index bb8786a14..530fe8332 100644
--- a/libnm-util/nm-utils.h
+++ b/libnm-util/nm-utils.h
@@ -1,10 +1,5 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager -- Network link manager
- *
- * Ray Strode <rstrode@redhat.com>
- * Dan Williams <dcbw@redhat.com>
- * Tambet Ingo <tambet@gmail.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
@@ -20,7 +15,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2005 - 2013 Red Hat, Inc.
+ * Copyright 2005 - 2013 Red Hat, Inc.
*/
#ifndef NM_UTILS_H
@@ -126,6 +121,16 @@ GByteArray *nm_utils_rsa_key_encrypt_aes (const GByteArray *data,
GError **error);
gboolean nm_utils_file_is_pkcs12 (const char *filename);
+typedef gboolean (*NMUtilsFileSearchInPathsPredicate) (const char *filename, gpointer user_data);
+
+const char *nm_utils_file_search_in_paths (const char *progname,
+ const char *try_first,
+ const char *const *paths,
+ GFileTest file_test_flags,
+ NMUtilsFileSearchInPathsPredicate predicate,
+ gpointer user_data,
+ GError **error);
+
guint32 nm_utils_wifi_freq_to_channel (guint32 freq);
guint32 nm_utils_wifi_channel_to_freq (guint32 channel, const char *band);
guint32 nm_utils_wifi_find_next_channel (guint32 channel, int direction, char *band);
@@ -134,9 +139,8 @@ gboolean nm_utils_wifi_is_channel_valid (guint32 channel, const char *band);
/**
* NM_UTILS_HWADDR_LEN_MAX:
*
- * The maximum length of a hardware address of a type known by
- * nm_utils_hwaddr_len() or nm_utils_hwaddr_aton(). This can be used
- * as the size of the buffer passed to nm_utils_hwaddr_aton().
+ * The maximum length of hardware addresses handled by NetworkManager itself,
+ * nm_utils_hwaddr_len(), and nm_utils_hwaddr_aton().
*/
#define NM_UTILS_HWADDR_LEN_MAX 20 /* INFINIBAND_ALEN */
diff --git a/libnm-util/nm-value-transforms.c b/libnm-util/nm-value-transforms.c
index f92596dc6..00e7e7757 100644
--- a/libnm-util/nm-value-transforms.c
+++ b/libnm-util/nm-value-transforms.c
@@ -1,7 +1,6 @@
/* -*- 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
@@ -115,7 +114,7 @@ static void
_string_array_to_string (const GPtrArray *strings, GValue *dest_value)
{
GString *printable;
- int i;
+ guint i;
printable = g_string_new (NULL);
for (i = 0; strings && i < strings->len; i++) {
@@ -544,7 +543,7 @@ _nm_value_transforms_register (void)
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,
+ 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,
@@ -554,7 +553,7 @@ _nm_value_transforms_register (void)
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,
+ G_TYPE_STRING,
_nm_utils_convert_string_list_to_string);
g_value_register_transform_func (DBUS_TYPE_G_ARRAY_OF_STRING,
G_TYPE_STRING,
@@ -563,28 +562,28 @@ _nm_value_transforms_register (void)
G_TYPE_STRING,
_nm_utils_convert_op_array_to_string);
g_value_register_transform_func (DBUS_TYPE_G_UINT_ARRAY,
- G_TYPE_STRING,
+ 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,
+ 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,
+ G_TYPE_STRING,
_nm_utils_convert_gvalue_hash_to_string);
g_value_register_transform_func (DBUS_TYPE_G_MAP_OF_STRING,
- G_TYPE_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,
+ 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,
+ 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,
+ 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,
diff --git a/libnm-util/nm-version.h.in b/libnm-util/nm-version.h.in
new file mode 100644
index 000000000..0a33ac295
--- /dev/null
+++ b/libnm-util/nm-version.h.in
@@ -0,0 +1,123 @@
+/* -*- 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 2011 Red Hat, Inc.
+ */
+
+#ifndef NM_VERSION_H
+#define NM_VERSION_H
+
+/**
+ * NM_MAJOR_VERSION:
+ *
+ * Evaluates to the major version number of NetworkManager which this source
+ * is compiled against.
+ */
+#define NM_MAJOR_VERSION (@NM_MAJOR_VERSION@)
+
+/**
+ * NM_MINOR_VERSION:
+ *
+ * Evaluates to the minor version number of NetworkManager which this source
+ * is compiled against.
+ */
+#define NM_MINOR_VERSION (@NM_MINOR_VERSION@)
+
+/**
+ * NM_MICRO_VERSION:
+ *
+ * Evaluates to the micro version number of NetworkManager which this source
+ * compiled against.
+ */
+#define NM_MICRO_VERSION (@NM_MICRO_VERSION@)
+
+/**
+ * NM_CHECK_VERSION:
+ * @major: major version (e.g. 1 for version 1.2.5)
+ * @minor: minor version (e.g. 2 for version 1.2.5)
+ * @micro: micro version (e.g. 5 for version 1.2.5)
+ *
+ * Returns: %TRUE if the version of the NetworkManager header files
+ * is the same as or newer than the passed-in version.
+ */
+#define NM_CHECK_VERSION(major,minor,micro) \
+ (NM_MAJOR_VERSION > (major) || \
+ (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))
+#define NM_VERSION_1_0 (NM_ENCODE_VERSION (1, 0, 0))
+
+#define NM_VERSION_CUR_STABLE NM_VERSION_0_9_10
+#define NM_VERSION_NEXT_STABLE NM_VERSION_1_0
+
+#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_MIN_REQUIRED >= NM_VERSION_1_0
+# define NM_DEPRECATED_IN_1_0 G_DEPRECATED
+# define NM_DEPRECATED_IN_1_0_FOR(f) G_DEPRECATED_FOR(f)
+#else
+# define NM_DEPRECATED_IN_1_0
+# define NM_DEPRECATED_IN_1_0_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
+
+#if NM_VERSION_MAX_ALLOWED < NM_VERSION_1_0
+# define NM_AVAILABLE_IN_1_0 G_UNAVAILABLE(1,0)
+#else
+# define NM_AVAILABLE_IN_1_0
+#endif
+
+#endif /* NM_VERSION_H */
diff --git a/libnm-util/tests/Makefile.am b/libnm-util/tests/Makefile.am
index 6d3d225ef..690bdbf65 100644
--- a/libnm-util/tests/Makefile.am
+++ b/libnm-util/tests/Makefile.am
@@ -1,18 +1,16 @@
if ENABLE_TESTS
-SUBDIRS=certs
-
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) \
- -DTEST_CERT_DIR=\"$(top_srcdir)/libnm-util/tests/certs/\"
+ -DBUILD_DIR=\"$(abs_builddir)\" \
+ -DTEST_CERT_DIR=\"$(top_srcdir)/libnm-core/tests/certs/\"
-noinst_PROGRAMS = \
+TESTS = \
test-settings-defaults \
test-crypto \
test-secrets \
@@ -20,6 +18,10 @@ noinst_PROGRAMS = \
test-setting-8021x \
test-setting-dcb
+noinst_PROGRAMS = \
+ $(TESTS) \
+ test-libnm-linking
+
test_settings_defaults_SOURCES = \
test-settings-defaults.c
@@ -52,6 +54,8 @@ test_general_LDADD = \
$(GLIB_LIBS) \
$(DBUS_LIBS)
+test_general_DEPENDENCIES = test-libnm-linking
+
test_setting_8021x_SOURCES = \
test-setting-8021x.c
@@ -68,66 +72,13 @@ test_setting_dcb_LDADD = \
$(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"
-
-# Private key by itself (PEM)
- $(abs_builddir)/test-setting-8021x $(srcdir)/certs/test-key-only.pem "test"
-
-# PKCS#8 private key by itself (PEM)
- $(abs_builddir)/test-setting-8021x $(srcdir)/certs/pkcs8-enc-key.pem "1234567890"
-
-# Private key and CA certificate in the same file (pkcs12)
- $(abs_builddir)/test-setting-8021x $(srcdir)/certs/test-cert.p12 "test"
-
-# Normal CA certificate
- $(abs_builddir)/test-crypto --cert $(srcdir)/certs/test_ca_cert.pem
-
-# Another CA certificate
- $(abs_builddir)/test-crypto --cert $(srcdir)/certs/test2_ca_cert.pem
-
-# Normal CA certificate (DER format)
- $(abs_builddir)/test-crypto --cert $(srcdir)/certs/test_ca_cert.der
-
-# CA certificate without an ending newline
- $(abs_builddir)/test-crypto --cert $(srcdir)/certs/ca-no-ending-newline.pem
+test_libnm_linking_SOURCES = \
+ test-libnm-linking.c
-# Combined user cert and private key
- $(abs_builddir)/test-crypto --cert $(srcdir)/certs/test_key_and_cert.pem
-
-# Another combined user cert and private key
- $(abs_builddir)/test-crypto --cert $(srcdir)/certs/test2_key_and_cert.pem
-
-# Private key with 8 bytes of tail padding
- $(abs_builddir)/test-crypto --key \
- $(srcdir)/certs/test_key_and_cert.pem \
- "test" \
- $(srcdir)/certs/test-key-only-decrypted.der
-
-# Private key only (not combined with a cert)
- $(abs_builddir)/test-crypto --key \
- $(srcdir)/certs/test-key-only.pem \
- "test" \
- $(srcdir)/certs/test-key-only-decrypted.der
-
-# Private key with 6 bytes of tail padding
- $(abs_builddir)/test-crypto --key $(srcdir)/certs/test2_key_and_cert.pem "12345testing"
-
-# PKCS#12 file
- $(abs_builddir)/test-crypto --p12 $(srcdir)/certs/test-cert.p12 "test"
-
-# Another PKCS#12 file
- $(abs_builddir)/test-crypto --p12 $(srcdir)/certs/test2-cert.p12 "12345testing"
-
-# PKCS#8 encrypted private key
- $(abs_builddir)/test-crypto --pkcs8 \
- $(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
+test_libnm_linking_LDADD = \
+ $(top_builddir)/libnm/libnm.la \
+ $(top_builddir)/libnm-util/libnm-util.la \
+ $(GLIB_LIBS) \
+ $(DBUS_LIBS)
endif
diff --git a/libnm-util/tests/Makefile.in b/libnm-util/tests/Makefile.in
index de57f25a5..9ef02e8c8 100644
--- a/libnm-util/tests/Makefile.in
+++ b/libnm-util/tests/Makefile.in
@@ -78,14 +78,13 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-@ENABLE_TESTS_TRUE@noinst_PROGRAMS = test-settings-defaults$(EXEEXT) \
+@ENABLE_TESTS_TRUE@TESTS = 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-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)
+@ENABLE_TESTS_TRUE@noinst_PROGRAMS = $(am__EXEEXT_1) \
+@ENABLE_TESTS_TRUE@ test-libnm-linking$(EXEEXT)
subdir = libnm-util/tests
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
@@ -109,6 +108,11 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
+@ENABLE_TESTS_TRUE@am__EXEEXT_1 = 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-dcb$(EXEEXT)
PROGRAMS = $(noinst_PROGRAMS)
am__test_crypto_SOURCES_DIST = test-crypto.c
@ENABLE_TESTS_TRUE@am_test_crypto_OBJECTS = test-crypto.$(OBJEXT)
@@ -124,7 +128,12 @@ am__v_lt_1 =
am__test_general_SOURCES_DIST = test-general.c
@ENABLE_TESTS_TRUE@am_test_general_OBJECTS = test-general.$(OBJEXT)
test_general_OBJECTS = $(am_test_general_OBJECTS)
-@ENABLE_TESTS_TRUE@test_general_DEPENDENCIES = \
+am__test_libnm_linking_SOURCES_DIST = test-libnm-linking.c
+@ENABLE_TESTS_TRUE@am_test_libnm_linking_OBJECTS = \
+@ENABLE_TESTS_TRUE@ test-libnm-linking.$(OBJEXT)
+test_libnm_linking_OBJECTS = $(am_test_libnm_linking_OBJECTS)
+@ENABLE_TESTS_TRUE@test_libnm_linking_DEPENDENCIES = \
+@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm/libnm.la \
@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
@@ -189,35 +198,21 @@ am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
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_setting_dcb_SOURCES) $(test_settings_defaults_SOURCES)
+ $(test_libnm_linking_SOURCES) $(test_secrets_SOURCES) \
+ $(test_setting_8021x_SOURCES) $(test_setting_dcb_SOURCES) \
+ $(test_settings_defaults_SOURCES)
DIST_SOURCES = $(am__test_crypto_SOURCES_DIST) \
$(am__test_general_SOURCES_DIST) \
+ $(am__test_libnm_linking_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 \
- 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
@@ -259,33 +254,7 @@ am__tty_colors = { \
std=''; \
fi; \
}
-DIST_SUBDIRS = certs
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@
@@ -295,6 +264,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -418,6 +389,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -437,6 +409,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -463,7 +436,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -542,16 +515,15 @@ 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@ -DTEST_CERT_DIR=\"$(top_srcdir)/libnm-util/tests/certs/\"
+@ENABLE_TESTS_TRUE@ -DBUILD_DIR=\"$(abs_builddir)\" \
+@ENABLE_TESTS_TRUE@ -DTEST_CERT_DIR=\"$(top_srcdir)/libnm-core/tests/certs/\"
@ENABLE_TESTS_TRUE@test_settings_defaults_SOURCES = \
@ENABLE_TESTS_TRUE@ test-settings-defaults.c
@@ -585,6 +557,7 @@ with_valgrind = @with_valgrind@
@ENABLE_TESTS_TRUE@ $(GLIB_LIBS) \
@ENABLE_TESTS_TRUE@ $(DBUS_LIBS)
+@ENABLE_TESTS_TRUE@test_general_DEPENDENCIES = test-libnm-linking
@ENABLE_TESTS_TRUE@test_setting_8021x_SOURCES = \
@ENABLE_TESTS_TRUE@ test-setting-8021x.c
@@ -601,7 +574,16 @@ with_valgrind = @with_valgrind@
@ENABLE_TESTS_TRUE@ $(GLIB_LIBS) \
@ENABLE_TESTS_TRUE@ $(DBUS_LIBS)
-all: all-recursive
+@ENABLE_TESTS_TRUE@test_libnm_linking_SOURCES = \
+@ENABLE_TESTS_TRUE@ test-libnm-linking.c
+
+@ENABLE_TESTS_TRUE@test_libnm_linking_LDADD = \
+@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm/libnm.la \
+@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm-util/libnm-util.la \
+@ENABLE_TESTS_TRUE@ $(GLIB_LIBS) \
+@ENABLE_TESTS_TRUE@ $(DBUS_LIBS)
+
+all: all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
@@ -653,6 +635,10 @@ test-general$(EXEEXT): $(test_general_OBJECTS) $(test_general_DEPENDENCIES) $(EX
@rm -f test-general$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_general_OBJECTS) $(test_general_LDADD) $(LIBS)
+test-libnm-linking$(EXEEXT): $(test_libnm_linking_OBJECTS) $(test_libnm_linking_DEPENDENCIES) $(EXTRA_test_libnm_linking_DEPENDENCIES)
+ @rm -f test-libnm-linking$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_libnm_linking_OBJECTS) $(test_libnm_linking_LDADD) $(LIBS)
+
test-secrets$(EXEEXT): $(test_secrets_OBJECTS) $(test_secrets_DEPENDENCIES) $(EXTRA_test_secrets_DEPENDENCIES)
@rm -f test-secrets$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_secrets_OBJECTS) $(test_secrets_LDADD) $(LIBS)
@@ -677,6 +663,7 @@ 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-libnm-linking.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@
@@ -709,61 +696,14 @@ mostlyclean-libtool:
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-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 \
@@ -776,7 +716,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)
@@ -789,7 +729,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)'; \
@@ -931,47 +871,20 @@ 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
-@ENABLE_TESTS_FALSE@check-local:
check-am: all-am
- $(MAKE) $(AM_MAKEFLAGS) check-TESTS check-local
-check: check-recursive
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
all-am: Makefile $(PROGRAMS)
-installdirs: installdirs-recursive
-installdirs-am:
-install: install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
+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-recursive
+installcheck: installcheck-am
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
@@ -993,155 +906,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-noinstPROGRAMS \
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-dvi: install-dvi-recursive
+install-dvi: install-dvi-am
install-dvi-am:
install-exec-am:
-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:
-.MAKE: $(am__recursive_targets) check-am install-am install-strip
+.MAKE: check-am install-am install-strip
-.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
- check-TESTS check-am check-local clean clean-generic \
- clean-libtool clean-noinstPROGRAMS 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 \
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 \
+ 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
-@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"
-
-# Private key by itself (PEM)
-@ENABLE_TESTS_TRUE@ $(abs_builddir)/test-setting-8021x $(srcdir)/certs/test-key-only.pem "test"
-
-# PKCS#8 private key by itself (PEM)
-@ENABLE_TESTS_TRUE@ $(abs_builddir)/test-setting-8021x $(srcdir)/certs/pkcs8-enc-key.pem "1234567890"
-
-# Private key and CA certificate in the same file (pkcs12)
-@ENABLE_TESTS_TRUE@ $(abs_builddir)/test-setting-8021x $(srcdir)/certs/test-cert.p12 "test"
-
-# Normal CA certificate
-@ENABLE_TESTS_TRUE@ $(abs_builddir)/test-crypto --cert $(srcdir)/certs/test_ca_cert.pem
-
-# Another CA certificate
-@ENABLE_TESTS_TRUE@ $(abs_builddir)/test-crypto --cert $(srcdir)/certs/test2_ca_cert.pem
-
-# Normal CA certificate (DER format)
-@ENABLE_TESTS_TRUE@ $(abs_builddir)/test-crypto --cert $(srcdir)/certs/test_ca_cert.der
-
-# CA certificate without an ending newline
-@ENABLE_TESTS_TRUE@ $(abs_builddir)/test-crypto --cert $(srcdir)/certs/ca-no-ending-newline.pem
-
-# Combined user cert and private key
-@ENABLE_TESTS_TRUE@ $(abs_builddir)/test-crypto --cert $(srcdir)/certs/test_key_and_cert.pem
-
-# Another combined user cert and private key
-@ENABLE_TESTS_TRUE@ $(abs_builddir)/test-crypto --cert $(srcdir)/certs/test2_key_and_cert.pem
-
-# Private key with 8 bytes of tail padding
-@ENABLE_TESTS_TRUE@ $(abs_builddir)/test-crypto --key \
-@ENABLE_TESTS_TRUE@ $(srcdir)/certs/test_key_and_cert.pem \
-@ENABLE_TESTS_TRUE@ "test" \
-@ENABLE_TESTS_TRUE@ $(srcdir)/certs/test-key-only-decrypted.der
-
-# Private key only (not combined with a cert)
-@ENABLE_TESTS_TRUE@ $(abs_builddir)/test-crypto --key \
-@ENABLE_TESTS_TRUE@ $(srcdir)/certs/test-key-only.pem \
-@ENABLE_TESTS_TRUE@ "test" \
-@ENABLE_TESTS_TRUE@ $(srcdir)/certs/test-key-only-decrypted.der
-
-# Private key with 6 bytes of tail padding
-@ENABLE_TESTS_TRUE@ $(abs_builddir)/test-crypto --key $(srcdir)/certs/test2_key_and_cert.pem "12345testing"
-
-# PKCS#12 file
-@ENABLE_TESTS_TRUE@ $(abs_builddir)/test-crypto --p12 $(srcdir)/certs/test-cert.p12 "test"
-
-# Another PKCS#12 file
-@ENABLE_TESTS_TRUE@ $(abs_builddir)/test-crypto --p12 $(srcdir)/certs/test2-cert.p12 "12345testing"
-
-# PKCS#8 encrypted private key
-@ENABLE_TESTS_TRUE@ $(abs_builddir)/test-crypto --pkcs8 \
-@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
deleted file mode 100644
index 309925174..000000000
--- a/libnm-util/tests/certs/Makefile.am
+++ /dev/null
@@ -1,25 +0,0 @@
-# test-cert.p12 created with:
-#
-# openssl pkcs12 -export \
-# -in test_key_and_cert.pem \
-# -inkey test_key_and_cert.pem \
-# -certfile test_ca_cert.pem \
-# -name "test-pkcs12" \
-# -out test-cert.p12
-
-EXTRA_DIST = \
- test_ca_cert.pem \
- test_ca_cert.der \
- test_key_and_cert.pem \
- test-cert.p12 \
- test2_ca_cert.pem \
- test2_key_and_cert.pem \
- test2-cert.p12 \
- ca-no-ending-newline.pem \
- test-key-only.pem \
- test-key-only-decrypted.der \
- pkcs8-enc-key.pem \
- pkcs8-noenc-key.pem \
- pkcs8-decrypted.der \
- test-aes-key.pem
-
diff --git a/libnm-util/tests/certs/Makefile.in b/libnm-util/tests/certs/Makefile.in
deleted file mode 100644
index 218cb48d2..000000000
--- a/libnm-util/tests/certs/Makefile.in
+++ /dev/null
@@ -1,597 +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@
-
-# test-cert.p12 created with:
-#
-# openssl pkcs12 -export \
-# -in test_key_and_cert.pem \
-# -inkey test_key_and_cert.pem \
-# -certfile test_ca_cert.pem \
-# -name "test-pkcs12" \
-# -out test-cert.p12
-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 = 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/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 = \
- test_ca_cert.pem \
- test_ca_cert.der \
- test_key_and_cert.pem \
- test-cert.p12 \
- test2_ca_cert.pem \
- test2_key_and_cert.pem \
- test2-cert.p12 \
- ca-no-ending-newline.pem \
- test-key-only.pem \
- test-key-only-decrypted.der \
- pkcs8-enc-key.pem \
- pkcs8-noenc-key.pem \
- pkcs8-decrypted.der \
- test-aes-key.pem
-
-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 libnm-util/tests/certs/Makefile'; \
- $(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu libnm-util/tests/certs/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/libnm-util/tests/test-crypto.c b/libnm-util/tests/test-crypto.c
index c11b6392f..4bf2b3be7 100644
--- a/libnm-util/tests/test-crypto.c
+++ b/libnm-util/tests/test-crypto.c
@@ -18,9 +18,11 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * (C) Copyright 2007 - 2011 Red Hat, Inc.
+ * Copyright 2007 - 2011 Red Hat, Inc.
*/
+#include "config.h"
+
#include <glib.h>
#include <unistd.h>
#include <stdlib.h>
@@ -92,18 +94,21 @@ out:
#endif
static void
-test_load_cert (const char *path, const char *desc)
+test_cert (gconstpointer test_data)
{
+ char *path;
GByteArray *array;
NMCryptoFileFormat format = NM_CRYPTO_FILE_FORMAT_UNKNOWN;
GError *error = NULL;
+ path = g_build_filename (TEST_CERT_DIR, (const char *) test_data, NULL);
+
array = crypto_load_and_verify_certificate (path, &format, &error);
- ASSERT (array != NULL, desc,
+ ASSERT (array != NULL, "cert",
"couldn't read certificate file '%s': %d %s",
path, error->code, error->message);
- ASSERT (format == NM_CRYPTO_FILE_FORMAT_X509, desc,
+ ASSERT (format == NM_CRYPTO_FILE_FORMAT_X509, "cert",
"%s: unexpected certificate format (expected %d, got %d)",
path, NM_CRYPTO_FILE_FORMAT_X509, format);
@@ -275,7 +280,7 @@ is_cipher_aes (const char *path)
}
g_free (contents);
- return is_aes;
+ return is_aes;
}
static void
@@ -330,55 +335,132 @@ test_encrypt_private_key (const char *path,
g_byte_array_free (array, TRUE);
}
-int main (int argc, char **argv)
+static void
+test_key (gconstpointer test_data)
+{
+ char **parts, *path, *password, *decrypted_path;
+ int len;
+
+ parts = g_strsplit ((const char *) test_data, ", ", -1);
+ len = g_strv_length (parts);
+ ASSERT (len == 2 || len == 3, "test-crypto",
+ "wrong number of arguments (<key file>, <password>, [<decrypted key file>])");
+
+ path = g_build_filename (TEST_CERT_DIR, parts[0], NULL);
+ password = parts[1];
+ decrypted_path = parts[2] ? g_build_filename (TEST_CERT_DIR, parts[2], NULL) : NULL;
+
+ test_is_pkcs12 (path, TRUE, "not-pkcs12");
+ test_load_private_key (path, password, decrypted_path, FALSE, "private-key");
+ test_load_private_key (path, "blahblahblah", NULL, TRUE, "private-key-bad-password");
+ test_load_private_key (path, NULL, NULL, TRUE, "private-key-no-password");
+ test_encrypt_private_key (path, password, "private-key-rencrypt");
+
+ g_free (path);
+ g_free (decrypted_path);
+ g_strfreev (parts);
+}
+
+static void
+test_pkcs12 (gconstpointer test_data)
+{
+ char **parts, *path, *password;
+
+ parts = g_strsplit ((const char *) test_data, ", ", -1);
+ ASSERT (g_strv_length (parts) == 2, "test-crypto",
+ "wrong number of arguments (<file>, <password>)");
+
+ path = g_build_filename (TEST_CERT_DIR, parts[0], NULL);
+ password = parts[1];
+
+ test_is_pkcs12 (path, FALSE, "is-pkcs12");
+ test_load_pkcs12 (path, password, FALSE, "pkcs12-private-key");
+ test_load_pkcs12 (path, "blahblahblah", TRUE, "pkcs12-private-key-bad-password");
+ test_load_pkcs12_no_password (path, "pkcs12-private-key-no-password");
+
+ g_free (path);
+ g_strfreev (parts);
+}
+
+static void
+test_pkcs8 (gconstpointer test_data)
+{
+ char **parts, *path, *password;
+
+ parts = g_strsplit ((const char *) test_data, ", ", -1);
+ ASSERT (g_strv_length (parts) == 2, "test-crypto",
+ "wrong number of arguments (<file>, <password>)");
+
+ path = g_build_filename (TEST_CERT_DIR, parts[0], NULL);
+ password = parts[1];
+
+ test_is_pkcs12 (path, TRUE, "not-pkcs12");
+ test_load_pkcs8 (path, password, FALSE, "pkcs8-private-key");
+ /* Until gnutls and NSS grow support for all the ciphers that openssl
+ * can use with PKCS#8, we can't actually verify the password. So we
+ * expect a bad password to work for the time being.
+ */
+ test_load_pkcs8 (path, "blahblahblah", FALSE, "pkcs8-private-key-bad-password");
+
+ g_free (path);
+ g_strfreev (parts);
+}
+
+NMTST_DEFINE ();
+
+int
+main (int argc, char **argv)
{
GError *error = NULL;
- char *progname;
- ASSERT (argc > 2, "test-crypto",
- "wrong number of arguments (expected at least an operation and an object)");
+ nmtst_init (&argc, &argv, TRUE);
if (!crypto_init (&error))
FAIL ("crypto-init", "failed to initialize crypto: %s", error->message);
- if (!strcmp (argv[1], "--cert"))
- test_load_cert (argv[2], "cert");
- else if (!strcmp (argv[1], "--key")) {
- const char *decrypted_path = (argc == 5) ? argv[4] : NULL;
-
- ASSERT (argc == 4 || argc == 5, "test-crypto",
- "wrong number of arguments (--key <key file> <password> [<decrypted key file>])");
-
- test_is_pkcs12 (argv[2], TRUE, "not-pkcs12");
- test_load_private_key (argv[2], argv[3], decrypted_path, FALSE, "private-key");
- test_load_private_key (argv[2], "blahblahblah", NULL, TRUE, "private-key-bad-password");
- test_load_private_key (argv[2], NULL, NULL, TRUE, "private-key-no-password");
- test_encrypt_private_key (argv[2], argv[3], "private-key-rencrypt");
- } else if (!strcmp (argv[1], "--p12")) {
- test_is_pkcs12 (argv[2], FALSE, "is-pkcs12");
- test_load_pkcs12 (argv[2], argv[3], FALSE, "pkcs12-private-key");
- test_load_pkcs12 (argv[2], "blahblahblah", TRUE, "pkcs12-private-key-bad-password");
- test_load_pkcs12_no_password (argv[2], "pkcs12-private-key-no-password");
- } else if (!strcmp (argv[1], "--pkcs8")) {
- ASSERT (argc == 4, "test-crypto",
- "wrong number of arguments (--pkcs8 <key file> <password>)");
-
- test_is_pkcs12 (argv[2], TRUE, "not-pkcs12");
- test_load_pkcs8 (argv[2], argv[3], FALSE, "pkcs8-private-key");
- /* Until gnutls and NSS grow support for all the ciphers that openssl
- * can use with PKCS#8, we can't actually verify the password. So we
- * expect a bad password to work for the time being.
- */
- test_load_pkcs8 (argv[2], "blahblahblah", FALSE, "pkcs8-private-key-bad-password");
- } else {
- ASSERT (argc > 2, "test-crypto", "unknown test type (not --cert, --key, or --p12)");
- }
-
- crypto_deinit ();
-
- progname = g_path_get_basename (argv[0]);
- fprintf (stdout, "%s: SUCCESS\n", progname);
- g_free (progname);
- return 0;
+ g_test_add_data_func ("/libnm/crypto/cert/pem",
+ "test_ca_cert.pem",
+ test_cert);
+ g_test_add_data_func ("/libnm/crypto/cert/pem-2",
+ "test2_ca_cert.pem",
+ test_cert);
+ g_test_add_data_func ("/libnm/crypto/cert/der",
+ "test_ca_cert.der",
+ test_cert);
+ g_test_add_data_func ("/libnm/crypto/cert/pem-no-ending-newline",
+ "ca-no-ending-newline.pem",
+ test_cert);
+ g_test_add_data_func ("/libnm/crypto/cert/pem-combined",
+ "test_key_and_cert.pem",
+ test_cert);
+ g_test_add_data_func ("/libnm/crypto/cert/pem-combined-2",
+ "test2_key_and_cert.pem",
+ test_cert);
+
+ g_test_add_data_func ("/libnm/crypto/key/padding-6",
+ "test_key_and_cert.pem, test, test-key-only-decrypted.der",
+ test_key);
+ g_test_add_data_func ("/libnm/crypto/key/key-only",
+ "test-key-only.pem, test, test-key-only-decrypted.der",
+ test_key);
+ g_test_add_data_func ("/libnm/crypto/key/padding-8",
+ "test2_key_and_cert.pem, 12345testing",
+ test_key);
+ g_test_add_data_func ("/libnm/crypto/key/aes",
+ "test-aes-key.pem, test-aes-password",
+ test_key);
+
+ g_test_add_data_func ("/libnm/crypto/PKCS#12/1",
+ "test-cert.p12, test",
+ test_pkcs12);
+ g_test_add_data_func ("/libnm/crypto/PKCS#12/2",
+ "test2-cert.p12, 12345testing",
+ test_pkcs12);
+
+ g_test_add_data_func ("/libnm/crypto/PKCS#8",
+ "pkcs8-enc-key.pem, 1234567890",
+ test_pkcs8);
+
+ return g_test_run ();
}
diff --git a/libnm-util/tests/test-general.c b/libnm-util/tests/test-general.c
index 97625605c..f748fcf59 100644
--- a/libnm-util/tests/test-general.c
+++ b/libnm-util/tests/test-general.c
@@ -15,15 +15,19 @@
* 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 2008 - 2011 Red Hat, Inc.
*
*/
+#include "config.h"
+
#include <glib.h>
#include <dbus/dbus-glib.h>
#include <string.h>
#include <netinet/ether.h>
#include <linux/if_infiniband.h>
+#include <sys/wait.h>
+#include <sys/resource.h>
#include <nm-utils.h>
@@ -41,7 +45,6 @@
#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"
@@ -307,156 +310,6 @@ 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))
@@ -893,7 +746,7 @@ new_connection_hash (char **out_uuid,
}
static void
-test_connection_replace_settings ()
+test_connection_replace_settings (void)
{
NMConnection *connection;
GHashTable *new_settings;
@@ -932,7 +785,7 @@ test_connection_replace_settings ()
}
static void
-test_connection_replace_settings_from_connection ()
+test_connection_replace_settings_from_connection (void)
{
NMConnection *connection, *replacement;
GError *error = NULL;
@@ -994,7 +847,7 @@ test_connection_replace_settings_from_connection ()
}
static void
-test_connection_new_from_hash ()
+test_connection_new_from_hash (void)
{
NMConnection *connection;
GHashTable *new_settings;
@@ -1416,8 +1269,8 @@ 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_ROUTE_METRIC, 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 },
{ NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID, NM_SETTING_DIFF_RESULT_IN_A },
@@ -1980,9 +1833,9 @@ test_ip4_netmask_to_prefix (void)
{
int i, j;
- GRand *rand = g_rand_new ();
+ GRand *r = g_rand_new ();
- g_rand_set_seed (rand, 1);
+ g_rand_set_seed (r, 1);
for (i = 2; i<=32; i++) {
guint32 netmask = nm_utils_ip4_prefix_to_netmask (i);
@@ -1991,11 +1844,11 @@ test_ip4_netmask_to_prefix (void)
g_assert_cmpint (i, ==, nm_utils_ip4_netmask_to_prefix (netmask));
for (j = 0; j < 2*i; j++) {
- guint32 r = g_rand_int (rand);
+ guint32 n = g_rand_int (r);
guint32 netmask_holey;
guint32 prefix_holey;
- netmask_holey = (netmask & r) | netmask_lowest_bit;
+ netmask_holey = (netmask & n) | netmask_lowest_bit;
if (netmask_holey == netmask)
continue;
@@ -2008,7 +1861,7 @@ test_ip4_netmask_to_prefix (void)
}
}
- g_rand_free (rand);
+ g_rand_free (r);
}
#define ASSERT_CHANGED(statement) \
@@ -2153,7 +2006,7 @@ test_setting_ip4_changed_signal (void)
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*");
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*elt != NULL*");
ASSERT_UNCHANGED (nm_setting_ip4_config_remove_address (s_ip4, 1));
g_test_assert_expected_messages ();
@@ -2484,6 +2337,201 @@ test_setting_old_uuid (void)
g_assert (success == TRUE);
}
+/*
+ * nm_connection_verify() modifies the connection by setting
+ * the interface-name property to the virtual_iface_name of
+ * the type specific settings.
+ *
+ * It would be preferable of verify() not to touch the connection,
+ * but as it is now, stick with it and test it.
+ **/
+static void
+test_connection_verify_sets_interface_name (void)
+{
+ NMConnection *con;
+ NMSettingConnection *s_con;
+ NMSettingBond *s_bond;
+ GError *error = NULL;
+ gboolean success;
+
+ s_con = (NMSettingConnection *) nm_setting_connection_new ();
+ g_object_set (G_OBJECT (s_con),
+ NM_SETTING_CONNECTION_ID, "test1",
+ NM_SETTING_CONNECTION_UUID, "22001632-bbb4-4616-b277-363dce3dfb5b",
+ NM_SETTING_CONNECTION_TYPE, NM_SETTING_BOND_SETTING_NAME,
+ NULL);
+ s_bond = (NMSettingBond *) nm_setting_bond_new ();
+ g_object_set (G_OBJECT (s_bond),
+ NM_SETTING_BOND_INTERFACE_NAME, "bond-x",
+ NULL);
+
+ con = nm_connection_new ();
+ nm_connection_add_setting (con, NM_SETTING (s_con));
+ nm_connection_add_setting (con, NM_SETTING (s_bond));
+
+ g_assert_cmpstr (nm_connection_get_interface_name (con), ==, NULL);
+
+ /* for backward compatiblity, normalizes the interface name */
+ success = nm_connection_verify (con, &error);
+ g_assert (success && !error);
+
+ g_assert_cmpstr (nm_connection_get_interface_name (con), ==, "bond-x");
+
+ g_object_unref (con);
+}
+
+/*
+ * Test normalization of interface-name
+ **/
+static void
+test_connection_normalize_virtual_iface_name (void)
+{
+ NMConnection *con;
+ NMSettingConnection *s_con;
+ NMSettingVlan *s_vlan;
+ NMSetting *setting;
+ GError *error = NULL;
+ gboolean success;
+ const char *IFACE_NAME = "iface";
+ const char *IFACE_VIRT = "iface-X";
+ gboolean modified = FALSE;
+
+ con = nm_connection_new ();
+
+ setting = nm_setting_ip4_config_new ();
+ g_object_set (setting,
+ NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
+ NULL);
+ nm_connection_add_setting (con, setting);
+
+ setting = nm_setting_ip6_config_new ();
+ g_object_set (setting,
+ NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO,
+ NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
+ NULL);
+ nm_connection_add_setting (con, setting);
+
+ s_con = (NMSettingConnection *) nm_setting_connection_new ();
+ g_object_set (G_OBJECT (s_con),
+ NM_SETTING_CONNECTION_ID, "test1",
+ NM_SETTING_CONNECTION_UUID, "22001632-bbb4-4616-b277-363dce3dfb5b",
+ NM_SETTING_CONNECTION_TYPE, NM_SETTING_VLAN_SETTING_NAME,
+ NM_SETTING_CONNECTION_INTERFACE_NAME, IFACE_NAME,
+ NULL);
+ s_vlan = (NMSettingVlan *) nm_setting_vlan_new ();
+ g_object_set (G_OBJECT (s_vlan),
+ NM_SETTING_VLAN_INTERFACE_NAME, IFACE_VIRT,
+ NM_SETTING_VLAN_PARENT, "eth0",
+ NULL);
+
+ nm_connection_add_setting (con, NM_SETTING (s_con));
+ nm_connection_add_setting (con, NM_SETTING (s_vlan));
+
+ g_assert_cmpstr (nm_connection_get_interface_name (con), ==, IFACE_NAME);
+ g_assert_cmpstr (nm_setting_vlan_get_interface_name (s_vlan), ==, IFACE_VIRT);
+
+ /* for backward compatiblity, normalizes the interface name */
+ success = nm_connection_verify (con, &error);
+ g_assert (success && !error);
+
+ g_assert_cmpstr (nm_connection_get_interface_name (con), ==, IFACE_NAME);
+ g_assert_cmpstr (nm_setting_vlan_get_interface_name (s_vlan), ==, IFACE_VIRT);
+
+ success = nm_connection_normalize (con, NULL, &modified, &error);
+ g_assert (success && !error);
+ g_assert (modified);
+
+ g_assert_cmpstr (nm_connection_get_interface_name (con), ==, IFACE_NAME);
+ g_assert_cmpstr (nm_setting_vlan_get_interface_name (s_vlan), ==, IFACE_NAME);
+
+ success = nm_connection_verify (con, &error);
+ g_assert (success && !error);
+
+ g_object_unref (con);
+}
+
+static void
+_test_libnm_linking_setup_child_process (gpointer user_data)
+{
+ int val;
+ struct rlimit limit;
+
+ /* the child process is supposed to crash. We don't want it
+ * to write a core dump. */
+
+ val = getrlimit (RLIMIT_CORE, &limit);
+ if (val == 0) {
+ limit.rlim_cur = 0;
+ val = setrlimit (RLIMIT_CORE, &limit);
+ if (val == 0)
+ return;
+ }
+ /* on error, do not crash or fail assertion. Instead just exit */
+ exit (1);
+}
+
+static void
+test_libnm_linking (void)
+{
+ char *argv[] = { "./test-libnm-linking", NULL };
+ char *out, *err;
+ int status;
+ GError *error = NULL;
+
+ g_spawn_sync (BUILD_DIR, argv, NULL, 0 /*G_SPAWN_DEFAULT*/,
+ _test_libnm_linking_setup_child_process, NULL,
+ &out, &err, &status, &error);
+ g_assert_no_error (error);
+
+ g_assert (WIFSIGNALED (status));
+
+ g_assert (strstr (err, "Mixing libnm") != NULL);
+ g_free (out);
+ g_free (err);
+}
+
+/******************************************************************************/
+
+static void
+_test_uuid (const char *expected_uuid, const char *str)
+{
+ gs_free char *uuid_test = NULL;
+
+ g_assert (str);
+
+ uuid_test = nm_utils_uuid_generate_from_string (str);
+
+ g_assert (uuid_test);
+ g_assert (nm_utils_is_uuid (uuid_test));
+
+ if (strcmp (uuid_test, expected_uuid)) {
+ g_error ("UUID test failed: text=%s, uuid=%s, expected=%s",
+ str, uuid_test, expected_uuid);
+ }
+}
+
+static void
+test_nm_utils_uuid_generate_from_string (void)
+{
+ gs_free char *uuid_test = NULL;
+
+ _test_uuid ("0cc175b9-c0f1-b6a8-31c3-99e269772661", "a");
+ _test_uuid ("098f6bcd-4621-d373-cade-4e832627b4f6", "test");
+ _test_uuid ("59c0547b-7fe2-1c15-2cce-e328e8bf6742", "/etc/NetworkManager/system-connections/em1");
+
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*nm_utils_uuid_generate_from_string*: *s && *s*");
+ uuid_test = nm_utils_uuid_generate_from_string ("");
+ g_assert (uuid_test == NULL);
+ g_test_assert_expected_messages ();
+
+ g_test_expect_message ("libnm-util", G_LOG_LEVEL_CRITICAL, "*nm_utils_uuid_generate_from_string*: *s && *s*");
+ uuid_test = nm_utils_uuid_generate_from_string (NULL);
+ g_assert (uuid_test == NULL);
+ g_test_assert_expected_messages ();
+}
+
+/******************************************************************************/
+
NMTST_DEFINE ();
int main (int argc, char **argv)
@@ -2496,7 +2544,6 @@ int main (int argc, char **argv)
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 ();
@@ -2521,6 +2568,8 @@ int main (int argc, char **argv)
test_connection_replace_settings ();
test_connection_replace_settings_from_connection ();
test_connection_new_from_hash ();
+ test_connection_verify_sets_interface_name ();
+ test_connection_normalize_virtual_iface_name ();
test_setting_connection_permissions_helpers ();
test_setting_connection_permissions_property ();
@@ -2558,6 +2607,10 @@ int main (int argc, char **argv)
test_setting_wireless_security_changed_signal ();
test_setting_802_1x_changed_signal ();
+ test_libnm_linking ();
+
+ test_nm_utils_uuid_generate_from_string ();
+
base = g_path_get_basename (argv[0]);
fprintf (stdout, "%s: SUCCESS\n", base);
g_free (base);
diff --git a/libnm-util/tests/test-libnm-linking.c b/libnm-util/tests/test-libnm-linking.c
new file mode 100644
index 000000000..9738d44d7
--- /dev/null
+++ b/libnm-util/tests/test-libnm-linking.c
@@ -0,0 +1,48 @@
+/* -*- 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 2014 Red Hat, Inc.
+ *
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <nm-utils.h>
+
+#include "nm-glib-compat.h"
+
+extern GType nm_state_get_type (void);
+
+int
+main (int argc, char **argv)
+{
+ /* If we reach main(), then the test has failed. */
+ g_printerr ("libnm/libnm-util constructor failed to detect symbol mixing\n");
+
+ /* This is just to ensure that both libnm.so and libnm-util.so get pulled
+ * in; libnm-util doesn't have "nm_state_get_type" and libnm doesn't have
+ * "nm_utils_slist_free". (We intentionally choose different symbols than the
+ * ones that the libraries check for.)
+ */
+ nm_state_get_type ();
+ G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
+ nm_utils_slist_free (NULL, g_free);
+ G_GNUC_END_IGNORE_DEPRECATIONS;
+
+ g_assert_not_reached ();
+}
diff --git a/libnm-util/tests/test-secrets.c b/libnm-util/tests/test-secrets.c
index 73fc9224b..fb0ad4c7e 100644
--- a/libnm-util/tests/test-secrets.c
+++ b/libnm-util/tests/test-secrets.c
@@ -15,10 +15,12 @@
* 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 2008 - 2011 Red Hat, Inc.
*
*/
+#include "config.h"
+
#include <glib.h>
#include <string.h>
@@ -679,7 +681,7 @@ test_update_secrets_whole_connection_empty_base_setting (void)
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_cmpint (g_hash_table_size (secrets), ==, 3);
g_assert (g_hash_table_lookup (secrets, NM_SETTING_WIRELESS_SETTING_NAME));
success = nm_connection_update_secrets (connection,
diff --git a/libnm-util/tests/test-setting-8021x.c b/libnm-util/tests/test-setting-8021x.c
index 62889c61f..4b37d92b7 100644
--- a/libnm-util/tests/test-setting-8021x.c
+++ b/libnm-util/tests/test-setting-8021x.c
@@ -15,10 +15,12 @@
* 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 2008 - 2011 Red Hat, Inc.
*
*/
+#include "config.h"
+
#include <glib.h>
#include <string.h>
@@ -404,40 +406,57 @@ test_clear_phase2_private_key (const char *path, const char *password)
g_object_unref (s_8021x);
}
-int main (int argc, char **argv)
+static void
+do_8021x_test (gconstpointer test_data)
{
- GError *error = NULL;
- char *base;
-
- if (argc < 3)
- FAIL ("init", "need at least two arguments: <path> <password>");
+ char **parts, *path, *password;
-#if !GLIB_CHECK_VERSION (2, 35, 0)
- g_type_init ();
-#endif
+ parts = g_strsplit ((const char *) test_data, ", ", -1);
+ g_assert_cmpint (g_strv_length (parts), ==, 2);
- if (!nm_utils_init (&error))
- FAIL ("nm-utils-init", "failed to initialize libnm-util: %s", error->message);
+ path = g_build_filename (TEST_CERT_DIR, parts[0], NULL);
+ password = parts[1];
/* Test phase1 and phase2 path scheme */
- test_private_key_import (argv[1], argv[2], NM_SETTING_802_1X_CK_SCHEME_PATH);
- test_phase2_private_key_import (argv[1], argv[2], NM_SETTING_802_1X_CK_SCHEME_PATH);
+ test_private_key_import (path, password, NM_SETTING_802_1X_CK_SCHEME_PATH);
+ test_phase2_private_key_import (path, password, NM_SETTING_802_1X_CK_SCHEME_PATH);
/* Test phase1 and phase2 blob scheme */
- test_private_key_import (argv[1], argv[2], NM_SETTING_802_1X_CK_SCHEME_BLOB);
- test_phase2_private_key_import (argv[1], argv[2], NM_SETTING_802_1X_CK_SCHEME_BLOB);
+ test_private_key_import (path, password, NM_SETTING_802_1X_CK_SCHEME_BLOB);
+ test_phase2_private_key_import (path, password, NM_SETTING_802_1X_CK_SCHEME_BLOB);
/* Test that using a wrong password does not change existing data */
- test_wrong_password_keeps_data (argv[1], argv[2]);
- test_wrong_phase2_password_keeps_data (argv[1], argv[2]);
+ test_wrong_password_keeps_data (path, password);
+ test_wrong_phase2_password_keeps_data (path, password);
/* Test clearing the private key */
- test_clear_private_key (argv[1], argv[2]);
- test_clear_phase2_private_key (argv[1], argv[2]);
+ test_clear_private_key (path, password);
+ test_clear_phase2_private_key (path, password);
- base = g_path_get_basename (argv[0]);
- fprintf (stdout, "%s: SUCCESS\n", base);
- g_free (base);
- return 0;
+ g_free (path);
+ g_strfreev (parts);
+}
+
+NMTST_DEFINE ();
+
+int
+main (int argc, char **argv)
+{
+ nmtst_init (&argc, &argv, TRUE);
+
+ g_test_add_data_func ("/libnm-utils/setting-8021x/key-and-cert",
+ "test_key_and_cert.pem, test",
+ do_8021x_test);
+ g_test_add_data_func ("/libnm-utils/setting-8021x/key-only",
+ "test-key-only.pem, test",
+ do_8021x_test);
+ g_test_add_data_func ("/libnm-utils/setting-8021x/pkcs8-enc-key",
+ "pkcs8-enc-key.pem, 1234567890",
+ do_8021x_test);
+ g_test_add_data_func ("/libnm-utils/setting-8021x/pkcs12",
+ "test-cert.p12, test",
+ do_8021x_test);
+
+ return g_test_run ();
}
diff --git a/libnm-util/tests/test-setting-dcb.c b/libnm-util/tests/test-setting-dcb.c
index de07f2c2a..1c7d78b8c 100644
--- a/libnm-util/tests/test-setting-dcb.c
+++ b/libnm-util/tests/test-setting-dcb.c
@@ -15,10 +15,12 @@
* 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.
+ * Copyright 2013 Red Hat, Inc.
*
*/
+#include "config.h"
+
#include <glib.h>
#include <string.h>
#include <nm-utils.h>
diff --git a/libnm-util/tests/test-settings-defaults.c b/libnm-util/tests/test-settings-defaults.c
index 15412fed5..7441e1ff5 100644
--- a/libnm-util/tests/test-settings-defaults.c
+++ b/libnm-util/tests/test-settings-defaults.c
@@ -15,10 +15,12 @@
* 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 2008 - 2011 Red Hat, Inc.
*
*/
+#include "config.h"
+
#include <glib.h>
#include <string.h>
diff --git a/libnm/Makefile.am b/libnm/Makefile.am
new file mode 100644
index 000000000..e8915b426
--- /dev/null
+++ b/libnm/Makefile.am
@@ -0,0 +1,224 @@
+include $(GLIB_MAKEFILE)
+
+SUBDIRS = . tests
+
+AM_CPPFLAGS = \
+ -I$(top_srcdir)/include \
+ -I$(top_builddir)/introspection \
+ -I$(top_srcdir)/libnm-core \
+ -I$(top_builddir)/libnm-core \
+ -I$(top_srcdir)/libnm \
+ -I$(top_builddir)/libnm \
+ -DG_LOG_DOMAIN=\""libnm"\" \
+ -DNETWORKMANAGER_COMPILATION \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ $(GLIB_CFLAGS) \
+ $(GUDEV_CFLAGS) \
+ -DNMRUNDIR=\"$(nmrundir)\"
+
+include $(top_srcdir)/libnm-core/Makefile.libnm-core
+
+# libnm
+
+lib_LTLIBRARIES = libnm.la
+
+libnmincludedir = $(includedir)/libnm
+
+libnminclude_hfiles = \
+ NetworkManager.h \
+ nm-access-point.h \
+ nm-active-connection.h \
+ nm-client.h \
+ nm-device-adsl.h \
+ nm-device-bond.h \
+ nm-device-bridge.h \
+ nm-device-bt.h \
+ nm-device-ethernet.h \
+ nm-device-generic.h \
+ nm-device-infiniband.h \
+ nm-device-modem.h \
+ nm-device-olpc-mesh.h \
+ nm-device-team.h \
+ nm-device-vlan.h \
+ nm-device-wifi.h \
+ nm-device-wimax.h \
+ nm-device.h \
+ nm-dhcp-config.h \
+ nm-enum-types.h \
+ nm-ip-config.h \
+ nm-object.h \
+ nm-remote-connection.h \
+ nm-types.h \
+ nm-vpn-connection.h \
+ nm-vpn-editor-plugin.h \
+ nm-wimax-nsp.h
+
+libnminclude_nointrospect_hfiles = \
+ nm-secret-agent-old.h \
+ nm-vpn-plugin-old.h
+
+libnminclude_HEADERS = \
+ $(libnminclude_hfiles) \
+ $(libnminclude_nointrospect_hfiles)
+
+libnm_la_private_headers = \
+ nm-dbus-helpers.h \
+ nm-device-private.h \
+ nm-dhcp4-config.h \
+ nm-dhcp6-config.h \
+ nm-ip4-config.h \
+ nm-ip6-config.h \
+ nm-manager.h \
+ nm-object-cache.h \
+ nm-object-private.h \
+ nm-remote-connection-private.h \
+ nm-remote-settings.h
+
+libnm_la_csources = \
+ nm-access-point.c \
+ nm-active-connection.c \
+ nm-client.c \
+ nm-dbus-helpers.c \
+ nm-device-adsl.c \
+ nm-device-bond.c \
+ nm-device-bridge.c \
+ nm-device-bt.c \
+ nm-device-ethernet.c \
+ nm-device-generic.c \
+ nm-device-infiniband.c \
+ nm-device-modem.c \
+ nm-device-olpc-mesh.c \
+ nm-device-team.c \
+ nm-device-vlan.c \
+ nm-device-wifi.c \
+ nm-device-wimax.c \
+ nm-device.c \
+ nm-dhcp-config.c \
+ nm-dhcp4-config.c \
+ nm-dhcp6-config.c \
+ nm-enum-types.c \
+ nm-ip-config.c \
+ nm-ip4-config.c \
+ nm-ip6-config.c \
+ nm-manager.c \
+ nm-object-cache.c \
+ nm-object.c \
+ nm-remote-connection.c \
+ nm-remote-settings.c \
+ nm-secret-agent-old.c \
+ nm-vpn-connection.c \
+ nm-vpn-plugin-old.c \
+ nm-vpn-editor-plugin.c \
+ nm-wimax-nsp.c
+
+libnm_la_SOURCES = \
+ $(libnm_la_csources) \
+ $(libnm_la_private_headers)
+
+GLIB_GENERATED = nm-enum-types.h nm-enum-types.c
+nm_enum_types_sources = $(libnminclude_HEADERS)
+GLIB_MKENUMS_H_FLAGS = --identifier-prefix NM --fhead '\#include <nm-core-enum-types.h>\n'
+GLIB_MKENUMS_C_FLAGS = --identifier-prefix NM
+
+libnm_la_LIBADD = \
+ $(top_builddir)/libnm-core/libnm-core.la \
+ $(top_builddir)/introspection/libnmdbus.la \
+ $(GLIB_LIBS) \
+ $(UUID_LIBS) \
+ $(GUDEV_LIBS)
+
+SYMBOL_VIS_FILE=$(srcdir)/libnm.ver
+
+libnm_la_LDFLAGS = -Wl,--version-script=$(SYMBOL_VIS_FILE) \
+ -version-info "0:0:0"
+
+###
+
+BUILT_SOURCES = $(GLIB_GENERATED)
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = libnm.pc
+
+DISTCLEANFILES = libnm.pc
+
+EXTRA_DIST = libnm.pc.in libnm.ver
+
+CLEANFILES = $(BUILT_SOURCES)
+
+-include $(INTROSPECTION_MAKEFILE)
+INTROSPECTION_GIRS =
+INTROSPECTION_COMPILER_ARGS = \
+ --includedir=$(top_srcdir)/libnm-core \
+ --includedir=$(top_builddir)/libnm-core \
+ --includedir=$(top_srcdir)/libnm \
+ --includedir=$(top_builddir)/libnm
+
+if HAVE_INTROSPECTION
+introspection_sources = \
+ $(libnm_core_headers) \
+ $(libnminclude_hfiles) \
+ $(libnm_core_sources) \
+ $(libnm_la_csources)
+
+NM-1.0.gir: libnm.la
+NM_1_0_gir_INCLUDES = Gio-2.0
+NM_1_0_gir_PACKAGES = gio-2.0 gudev-1.0
+NM_1_0_gir_EXPORT_PACKAGES = libnm
+NM_1_0_gir_CFLAGS = $(AM_CPPFLAGS)
+NM_1_0_gir_LIBS = libnm.la
+NM_1_0_gir_FILES = $(introspection_sources)
+NM_1_0_gir_SCANNERFLAGS = --warn-all --identifier-prefix=NM --symbol-prefix=nm
+INTROSPECTION_GIRS += NM-1.0.gir
+
+girdir = $(datadir)/gir-1.0
+gir_DATA = $(INTROSPECTION_GIRS)
+
+typelibdir = $(libdir)/girepository-1.0
+typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib)
+
+CLEANFILES += $(gir_DATA) $(typelib_DATA)
+endif
+
+check-local:
+ $(top_srcdir)/tools/check-exports.sh $(builddir)/.libs/libnm.so $(SYMBOL_VIS_FILE)
+
+if BUILD_SETTING_DOCS
+
+noinst_DATA = \
+ nm-property-docs.xml \
+ nm-setting-docs-overrides.xml \
+ nm-setting-docs.xml \
+ nm-keyfile-docs.xml \
+ nm-ifcfg-rh-docs.xml
+
+docs_sources = $(filter-out %/nm-core-enum-types.c,$(libnm_core_sources))
+
+nm-setting-docs-overrides.xml: generate-plugin-docs.pl $(docs_sources)
+ $(srcdir)/generate-plugin-docs.pl dbus $(top_srcdir)/libnm-core $@
+
+nm-property-docs.xml: generate-setting-docs.py $(docs_sources) | NM-1.0.gir NM-1.0.typelib libnm.la
+ export GI_TYPELIB_PATH=$(abs_builddir)$${GI_TYPELIB_PATH:+:$$GI_TYPELIB_PATH}; \
+ export LD_LIBRARY_PATH=$(abs_builddir)/.libs$${LD_LIBRARY_PATH:+:$$LD_LIBRARY_PATH}; \
+ $(srcdir)/generate-setting-docs.py \
+ --gir $(builddir)/NM-1.0.gir \
+ --output $@
+
+nm-setting-docs.xml: generate-setting-docs.py $(docs_sources) nm-setting-docs-overrides.xml | NM-1.0.gir NM-1.0.typelib libnm.la
+ export GI_TYPELIB_PATH=$(abs_builddir)$${GI_TYPELIB_PATH:+:$$GI_TYPELIB_PATH}; \
+ export LD_LIBRARY_PATH=$(abs_builddir)/.libs$${LD_LIBRARY_PATH:+:$$LD_LIBRARY_PATH}; \
+ $(srcdir)/generate-setting-docs.py \
+ --gir $(builddir)/NM-1.0.gir \
+ --overrides $(builddir)/nm-setting-docs-overrides.xml \
+ --output $@
+
+nm-keyfile-docs.xml: generate-plugin-docs.pl $(docs_sources)
+ $(srcdir)/generate-plugin-docs.pl keyfile $(top_srcdir)/libnm-core $@
+nm-ifcfg-rh-docs.xml: generate-plugin-docs.pl $(docs_sources)
+ $(srcdir)/generate-plugin-docs.pl ifcfg-rh $(top_srcdir)/libnm-core $@
+
+CLEANFILES += $(noinst_DATA)
+EXTRA_DIST += $(noinst_DATA)
+
+endif
+
+EXTRA_DIST += generate-setting-docs.py generate-plugin-docs.pl
diff --git a/libnm/Makefile.in b/libnm/Makefile.in
new file mode 100644
index 000000000..6e1fad476
--- /dev/null
+++ b/libnm/Makefile.in
@@ -0,0 +1,1349 @@
+# 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@
+
+# In order for this to work correctly from both libnm-core/ and libnm/,
+# we have to specify full pathnames. (We can't just use $(addprefix) from
+# libnm/, because that's incompatible with the Makefile.introspection rules.)
+
+
+
+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@
+DIST_COMMON = $(top_srcdir)/libnm-core/Makefile.libnm-core \
+ $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+ $(srcdir)/libnm.pc.in $(top_srcdir)/build-aux/depcomp \
+ $(libnminclude_HEADERS)
+@HAVE_INTROSPECTION_TRUE@am__append_1 = NM-1.0.gir
+@HAVE_INTROSPECTION_TRUE@am__append_2 = $(gir_DATA) $(typelib_DATA)
+@BUILD_SETTING_DOCS_TRUE@am__append_3 = $(noinst_DATA)
+@BUILD_SETTING_DOCS_TRUE@am__append_4 = $(noinst_DATA)
+subdir = libnm
+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 = libnm.pc
+CONFIG_CLEAN_VPATH_FILES =
+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)$(libdir)" "$(DESTDIR)$(girdir)" \
+ "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(typelibdir)" \
+ "$(DESTDIR)$(libnmincludedir)"
+LTLIBRARIES = $(lib_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libnm_la_DEPENDENCIES = $(top_builddir)/libnm-core/libnm-core.la \
+ $(top_builddir)/introspection/libnmdbus.la \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+am__objects_1 = nm-access-point.lo nm-active-connection.lo \
+ nm-client.lo nm-dbus-helpers.lo nm-device-adsl.lo \
+ nm-device-bond.lo nm-device-bridge.lo nm-device-bt.lo \
+ nm-device-ethernet.lo nm-device-generic.lo \
+ nm-device-infiniband.lo nm-device-modem.lo \
+ nm-device-olpc-mesh.lo nm-device-team.lo nm-device-vlan.lo \
+ nm-device-wifi.lo nm-device-wimax.lo nm-device.lo \
+ nm-dhcp-config.lo nm-dhcp4-config.lo nm-dhcp6-config.lo \
+ nm-enum-types.lo nm-ip-config.lo nm-ip4-config.lo \
+ nm-ip6-config.lo nm-manager.lo nm-object-cache.lo nm-object.lo \
+ nm-remote-connection.lo nm-remote-settings.lo \
+ nm-secret-agent-old.lo nm-vpn-connection.lo \
+ nm-vpn-plugin-old.lo nm-vpn-editor-plugin.lo nm-wimax-nsp.lo
+am__objects_2 =
+am_libnm_la_OBJECTS = $(am__objects_1) $(am__objects_2)
+libnm_la_OBJECTS = $(am_libnm_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_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(libnm_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
+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 = $(libnm_la_SOURCES)
+DIST_SOURCES = $(libnm_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
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+DATA = $(gir_DATA) $(noinst_DATA) $(pkgconfig_DATA) $(typelib_DATA)
+HEADERS = $(libnminclude_HEADERS)
+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@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
+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_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
+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@
+PERL = @PERL@
+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_DIR = @UDEV_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
+AM_CPPFLAGS = \
+ -I$(top_srcdir)/include \
+ -I$(top_builddir)/introspection \
+ -I$(top_srcdir)/libnm-core \
+ -I$(top_builddir)/libnm-core \
+ -I$(top_srcdir)/libnm \
+ -I$(top_builddir)/libnm \
+ -DG_LOG_DOMAIN=\""libnm"\" \
+ -DNETWORKMANAGER_COMPILATION \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ $(GLIB_CFLAGS) \
+ $(GUDEV_CFLAGS) \
+ -DNMRUNDIR=\"$(nmrundir)\"
+
+core = $(top_srcdir)/libnm-core
+core_build = $(top_builddir)/libnm-core
+libnm_core_headers = \
+ $(core_build)/nm-core-enum-types.h \
+ $(core_build)/nm-version.h \
+ $(core)/nm-connection.h \
+ $(core)/nm-core-types.h \
+ $(core)/nm-dbus-interface.h \
+ $(core)/nm-errors.h \
+ $(core)/nm-setting-8021x.h \
+ $(core)/nm-setting-adsl.h \
+ $(core)/nm-setting-bluetooth.h \
+ $(core)/nm-setting-bond.h \
+ $(core)/nm-setting-bridge-port.h \
+ $(core)/nm-setting-bridge.h \
+ $(core)/nm-setting-cdma.h \
+ $(core)/nm-setting-connection.h \
+ $(core)/nm-setting-dcb.h \
+ $(core)/nm-setting-generic.h \
+ $(core)/nm-setting-gsm.h \
+ $(core)/nm-setting-infiniband.h \
+ $(core)/nm-setting-ip-config.h \
+ $(core)/nm-setting-ip4-config.h \
+ $(core)/nm-setting-ip6-config.h \
+ $(core)/nm-setting-olpc-mesh.h \
+ $(core)/nm-setting-ppp.h \
+ $(core)/nm-setting-pppoe.h \
+ $(core)/nm-setting-serial.h \
+ $(core)/nm-setting-team-port.h \
+ $(core)/nm-setting-team.h \
+ $(core)/nm-setting-vlan.h \
+ $(core)/nm-setting-vpn.h \
+ $(core)/nm-setting-wimax.h \
+ $(core)/nm-setting-wired.h \
+ $(core)/nm-setting-wireless-security.h \
+ $(core)/nm-setting-wireless.h \
+ $(core)/nm-setting.h \
+ $(core)/nm-simple-connection.h \
+ $(core)/nm-utils.h \
+ $(core)/nm-vpn-dbus-interface.h
+
+libnm_core_private_headers = \
+ $(core)/crypto.h \
+ $(core)/nm-connection-private.h \
+ $(core)/nm-core-internal.h \
+ $(core)/nm-property-compare.h \
+ $(core)/nm-setting-private.h \
+ $(core)/nm-utils-private.h
+
+libnm_core_sources = \
+ $(core_build)/nm-core-enum-types.c \
+ $(core)/crypto.c \
+ $(core)/nm-connection.c \
+ $(core)/nm-errors.c \
+ $(core)/nm-property-compare.c \
+ $(core)/nm-setting-8021x.c \
+ $(core)/nm-setting-adsl.c \
+ $(core)/nm-setting-bluetooth.c \
+ $(core)/nm-setting-bond.c \
+ $(core)/nm-setting-bridge-port.c \
+ $(core)/nm-setting-bridge.c \
+ $(core)/nm-setting-cdma.c \
+ $(core)/nm-setting-connection.c \
+ $(core)/nm-setting-dcb.c \
+ $(core)/nm-setting-generic.c \
+ $(core)/nm-setting-gsm.c \
+ $(core)/nm-setting-infiniband.c \
+ $(core)/nm-setting-ip-config.c \
+ $(core)/nm-setting-ip4-config.c \
+ $(core)/nm-setting-ip6-config.c \
+ $(core)/nm-setting-olpc-mesh.c \
+ $(core)/nm-setting-ppp.c \
+ $(core)/nm-setting-pppoe.c \
+ $(core)/nm-setting-serial.c \
+ $(core)/nm-setting-team-port.c \
+ $(core)/nm-setting-team.c \
+ $(core)/nm-setting-vlan.c \
+ $(core)/nm-setting-vpn.c \
+ $(core)/nm-setting-wimax.c \
+ $(core)/nm-setting-wired.c \
+ $(core)/nm-setting-wireless-security.c \
+ $(core)/nm-setting-wireless.c \
+ $(core)/nm-setting.c \
+ $(core)/nm-simple-connection.c \
+ $(core)/nm-utils.c
+
+
+# libnm
+lib_LTLIBRARIES = libnm.la
+libnmincludedir = $(includedir)/libnm
+libnminclude_hfiles = \
+ NetworkManager.h \
+ nm-access-point.h \
+ nm-active-connection.h \
+ nm-client.h \
+ nm-device-adsl.h \
+ nm-device-bond.h \
+ nm-device-bridge.h \
+ nm-device-bt.h \
+ nm-device-ethernet.h \
+ nm-device-generic.h \
+ nm-device-infiniband.h \
+ nm-device-modem.h \
+ nm-device-olpc-mesh.h \
+ nm-device-team.h \
+ nm-device-vlan.h \
+ nm-device-wifi.h \
+ nm-device-wimax.h \
+ nm-device.h \
+ nm-dhcp-config.h \
+ nm-enum-types.h \
+ nm-ip-config.h \
+ nm-object.h \
+ nm-remote-connection.h \
+ nm-types.h \
+ nm-vpn-connection.h \
+ nm-vpn-editor-plugin.h \
+ nm-wimax-nsp.h
+
+libnminclude_nointrospect_hfiles = \
+ nm-secret-agent-old.h \
+ nm-vpn-plugin-old.h
+
+libnminclude_HEADERS = \
+ $(libnminclude_hfiles) \
+ $(libnminclude_nointrospect_hfiles)
+
+libnm_la_private_headers = \
+ nm-dbus-helpers.h \
+ nm-device-private.h \
+ nm-dhcp4-config.h \
+ nm-dhcp6-config.h \
+ nm-ip4-config.h \
+ nm-ip6-config.h \
+ nm-manager.h \
+ nm-object-cache.h \
+ nm-object-private.h \
+ nm-remote-connection-private.h \
+ nm-remote-settings.h
+
+libnm_la_csources = \
+ nm-access-point.c \
+ nm-active-connection.c \
+ nm-client.c \
+ nm-dbus-helpers.c \
+ nm-device-adsl.c \
+ nm-device-bond.c \
+ nm-device-bridge.c \
+ nm-device-bt.c \
+ nm-device-ethernet.c \
+ nm-device-generic.c \
+ nm-device-infiniband.c \
+ nm-device-modem.c \
+ nm-device-olpc-mesh.c \
+ nm-device-team.c \
+ nm-device-vlan.c \
+ nm-device-wifi.c \
+ nm-device-wimax.c \
+ nm-device.c \
+ nm-dhcp-config.c \
+ nm-dhcp4-config.c \
+ nm-dhcp6-config.c \
+ nm-enum-types.c \
+ nm-ip-config.c \
+ nm-ip4-config.c \
+ nm-ip6-config.c \
+ nm-manager.c \
+ nm-object-cache.c \
+ nm-object.c \
+ nm-remote-connection.c \
+ nm-remote-settings.c \
+ nm-secret-agent-old.c \
+ nm-vpn-connection.c \
+ nm-vpn-plugin-old.c \
+ nm-vpn-editor-plugin.c \
+ nm-wimax-nsp.c
+
+libnm_la_SOURCES = \
+ $(libnm_la_csources) \
+ $(libnm_la_private_headers)
+
+GLIB_GENERATED = nm-enum-types.h nm-enum-types.c
+nm_enum_types_sources = $(libnminclude_HEADERS)
+GLIB_MKENUMS_H_FLAGS = --identifier-prefix NM --fhead '\#include <nm-core-enum-types.h>\n'
+GLIB_MKENUMS_C_FLAGS = --identifier-prefix NM
+libnm_la_LIBADD = \
+ $(top_builddir)/libnm-core/libnm-core.la \
+ $(top_builddir)/introspection/libnmdbus.la \
+ $(GLIB_LIBS) \
+ $(UUID_LIBS) \
+ $(GUDEV_LIBS)
+
+SYMBOL_VIS_FILE = $(srcdir)/libnm.ver
+libnm_la_LDFLAGS = -Wl,--version-script=$(SYMBOL_VIS_FILE) \
+ -version-info "0:0:0"
+
+
+###
+BUILT_SOURCES = $(GLIB_GENERATED)
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = libnm.pc
+DISTCLEANFILES = libnm.pc
+EXTRA_DIST = libnm.pc.in libnm.ver $(am__append_4) \
+ generate-setting-docs.py generate-plugin-docs.pl
+CLEANFILES = $(BUILT_SOURCES) $(am__append_2) $(am__append_3)
+INTROSPECTION_GIRS = $(am__append_1)
+INTROSPECTION_COMPILER_ARGS = \
+ --includedir=$(top_srcdir)/libnm-core \
+ --includedir=$(top_builddir)/libnm-core \
+ --includedir=$(top_srcdir)/libnm \
+ --includedir=$(top_builddir)/libnm
+
+@HAVE_INTROSPECTION_TRUE@introspection_sources = \
+@HAVE_INTROSPECTION_TRUE@ $(libnm_core_headers) \
+@HAVE_INTROSPECTION_TRUE@ $(libnminclude_hfiles) \
+@HAVE_INTROSPECTION_TRUE@ $(libnm_core_sources) \
+@HAVE_INTROSPECTION_TRUE@ $(libnm_la_csources)
+
+@HAVE_INTROSPECTION_TRUE@NM_1_0_gir_INCLUDES = Gio-2.0
+@HAVE_INTROSPECTION_TRUE@NM_1_0_gir_PACKAGES = gio-2.0 gudev-1.0
+@HAVE_INTROSPECTION_TRUE@NM_1_0_gir_EXPORT_PACKAGES = libnm
+@HAVE_INTROSPECTION_TRUE@NM_1_0_gir_CFLAGS = $(AM_CPPFLAGS)
+@HAVE_INTROSPECTION_TRUE@NM_1_0_gir_LIBS = libnm.la
+@HAVE_INTROSPECTION_TRUE@NM_1_0_gir_FILES = $(introspection_sources)
+@HAVE_INTROSPECTION_TRUE@NM_1_0_gir_SCANNERFLAGS = --warn-all --identifier-prefix=NM --symbol-prefix=nm
+@HAVE_INTROSPECTION_TRUE@girdir = $(datadir)/gir-1.0
+@HAVE_INTROSPECTION_TRUE@gir_DATA = $(INTROSPECTION_GIRS)
+@HAVE_INTROSPECTION_TRUE@typelibdir = $(libdir)/girepository-1.0
+@HAVE_INTROSPECTION_TRUE@typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib)
+@BUILD_SETTING_DOCS_TRUE@noinst_DATA = \
+@BUILD_SETTING_DOCS_TRUE@ nm-property-docs.xml \
+@BUILD_SETTING_DOCS_TRUE@ nm-setting-docs-overrides.xml \
+@BUILD_SETTING_DOCS_TRUE@ nm-setting-docs.xml \
+@BUILD_SETTING_DOCS_TRUE@ nm-keyfile-docs.xml \
+@BUILD_SETTING_DOCS_TRUE@ nm-ifcfg-rh-docs.xml
+
+@BUILD_SETTING_DOCS_TRUE@docs_sources = $(filter-out %/nm-core-enum-types.c,$(libnm_core_sources))
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/libnm-core/Makefile.libnm-core $(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 libnm/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu libnm/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_srcdir)/libnm-core/Makefile.libnm-core:
+
+$(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):
+libnm.pc: $(top_builddir)/config.status $(srcdir)/libnm.pc.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || 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)$(libdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+ }
+
+uninstall-libLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+ done
+
+clean-libLTLIBRARIES:
+ -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+ @list='$(lib_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}; \
+ }
+
+libnm.la: $(libnm_la_OBJECTS) $(libnm_la_DEPENDENCIES) $(EXTRA_libnm_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libnm_la_LINK) -rpath $(libdir) $(libnm_la_OBJECTS) $(libnm_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-access-point.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-active-connection.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-client.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-dbus-helpers.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-device-adsl.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-bt.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-generic.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-modem.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-team.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-wifi.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-device-wimax.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-device.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-dhcp-config.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-enum-types.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-ip-config.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-manager.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-object-cache.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-object.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-remote-connection.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-remote-settings.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-secret-agent-old.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-editor-plugin.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-vpn-plugin-old.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-wimax-nsp.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 $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-girDATA: $(gir_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(gir_DATA)'; test -n "$(girdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(girdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(girdir)" || 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)$(girdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(girdir)" || exit $$?; \
+ done
+
+uninstall-girDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(gir_DATA)'; test -n "$(girdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(girdir)'; $(am__uninstall_files_from_dir)
+install-pkgconfigDATA: $(pkgconfig_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || 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)$(pkgconfigdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
+ done
+
+uninstall-pkgconfigDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir)
+install-typelibDATA: $(typelib_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(typelib_DATA)'; test -n "$(typelibdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(typelibdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(typelibdir)" || 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)$(typelibdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(typelibdir)" || exit $$?; \
+ done
+
+uninstall-typelibDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(typelib_DATA)'; test -n "$(typelibdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(typelibdir)'; $(am__uninstall_files_from_dir)
+install-libnmincludeHEADERS: $(libnminclude_HEADERS)
+ @$(NORMAL_INSTALL)
+ @list='$(libnminclude_HEADERS)'; test -n "$(libnmincludedir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(libnmincludedir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(libnmincludedir)" || 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_HEADER) $$files '$(DESTDIR)$(libnmincludedir)'"; \
+ $(INSTALL_HEADER) $$files "$(DESTDIR)$(libnmincludedir)" || exit $$?; \
+ done
+
+uninstall-libnmincludeHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(libnminclude_HEADERS)'; test -n "$(libnmincludedir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(libnmincludedir)'; $(am__uninstall_files_from_dir)
+
+# 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
+ $(MAKE) $(AM_MAKEFLAGS) check-local
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-recursive
+all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(typelibdir)" "$(DESTDIR)$(libnmincludedir)"; 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
+
+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:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+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)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+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-libLTLIBRARIES clean-libtool \
+ mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-girDATA install-libnmincludeHEADERS \
+ install-pkgconfigDATA install-typelibDATA
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am: install-libLTLIBRARIES
+
+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 -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-girDATA uninstall-libLTLIBRARIES \
+ uninstall-libnmincludeHEADERS uninstall-pkgconfigDATA \
+ uninstall-typelibDATA
+
+.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 check-local clean clean-generic clean-libLTLIBRARIES \
+ 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-dvi \
+ install-dvi-am install-exec install-exec-am install-girDATA \
+ install-html install-html-am install-info install-info-am \
+ install-libLTLIBRARIES install-libnmincludeHEADERS install-man \
+ install-pdf install-pdf-am install-pkgconfigDATA install-ps \
+ install-ps-am install-strip install-typelibDATA 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-girDATA \
+ uninstall-libLTLIBRARIES uninstall-libnmincludeHEADERS \
+ uninstall-pkgconfigDATA uninstall-typelibDATA
+
+include $(GLIB_MAKEFILE)
+
+-include $(INTROSPECTION_MAKEFILE)
+
+@HAVE_INTROSPECTION_TRUE@NM-1.0.gir: libnm.la
+
+check-local:
+ $(top_srcdir)/tools/check-exports.sh $(builddir)/.libs/libnm.so $(SYMBOL_VIS_FILE)
+
+@BUILD_SETTING_DOCS_TRUE@nm-setting-docs-overrides.xml: generate-plugin-docs.pl $(docs_sources)
+@BUILD_SETTING_DOCS_TRUE@ $(srcdir)/generate-plugin-docs.pl dbus $(top_srcdir)/libnm-core $@
+
+@BUILD_SETTING_DOCS_TRUE@nm-property-docs.xml: generate-setting-docs.py $(docs_sources) | NM-1.0.gir NM-1.0.typelib libnm.la
+@BUILD_SETTING_DOCS_TRUE@ export GI_TYPELIB_PATH=$(abs_builddir)$${GI_TYPELIB_PATH:+:$$GI_TYPELIB_PATH}; \
+@BUILD_SETTING_DOCS_TRUE@ export LD_LIBRARY_PATH=$(abs_builddir)/.libs$${LD_LIBRARY_PATH:+:$$LD_LIBRARY_PATH}; \
+@BUILD_SETTING_DOCS_TRUE@ $(srcdir)/generate-setting-docs.py \
+@BUILD_SETTING_DOCS_TRUE@ --gir $(builddir)/NM-1.0.gir \
+@BUILD_SETTING_DOCS_TRUE@ --output $@
+
+@BUILD_SETTING_DOCS_TRUE@nm-setting-docs.xml: generate-setting-docs.py $(docs_sources) nm-setting-docs-overrides.xml | NM-1.0.gir NM-1.0.typelib libnm.la
+@BUILD_SETTING_DOCS_TRUE@ export GI_TYPELIB_PATH=$(abs_builddir)$${GI_TYPELIB_PATH:+:$$GI_TYPELIB_PATH}; \
+@BUILD_SETTING_DOCS_TRUE@ export LD_LIBRARY_PATH=$(abs_builddir)/.libs$${LD_LIBRARY_PATH:+:$$LD_LIBRARY_PATH}; \
+@BUILD_SETTING_DOCS_TRUE@ $(srcdir)/generate-setting-docs.py \
+@BUILD_SETTING_DOCS_TRUE@ --gir $(builddir)/NM-1.0.gir \
+@BUILD_SETTING_DOCS_TRUE@ --overrides $(builddir)/nm-setting-docs-overrides.xml \
+@BUILD_SETTING_DOCS_TRUE@ --output $@
+
+@BUILD_SETTING_DOCS_TRUE@nm-keyfile-docs.xml: generate-plugin-docs.pl $(docs_sources)
+@BUILD_SETTING_DOCS_TRUE@ $(srcdir)/generate-plugin-docs.pl keyfile $(top_srcdir)/libnm-core $@
+@BUILD_SETTING_DOCS_TRUE@nm-ifcfg-rh-docs.xml: generate-plugin-docs.pl $(docs_sources)
+@BUILD_SETTING_DOCS_TRUE@ $(srcdir)/generate-plugin-docs.pl ifcfg-rh $(top_srcdir)/libnm-core $@
+
+# 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/NetworkManager.h b/libnm/NetworkManager.h
new file mode 100644
index 000000000..251a04221
--- /dev/null
+++ b/libnm/NetworkManager.h
@@ -0,0 +1,89 @@
+/* -*- 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 2014 Red Hat, Inc.
+ */
+
+#ifndef __NETWORKMANAGER_H__
+#define __NETWORKMANAGER_H__
+
+#define __NETWORKMANAGER_H_INSIDE__
+
+#include <nm-access-point.h>
+#include <nm-active-connection.h>
+#include <nm-client.h>
+#include <nm-connection.h>
+#include <nm-core-enum-types.h>
+#include <nm-dbus-interface.h>
+#include <nm-device-adsl.h>
+#include <nm-device-bond.h>
+#include <nm-device-bridge.h>
+#include <nm-device-bt.h>
+#include <nm-device-ethernet.h>
+#include <nm-device-generic.h>
+#include <nm-device-infiniband.h>
+#include <nm-device-modem.h>
+#include <nm-device-olpc-mesh.h>
+#include <nm-device-team.h>
+#include <nm-device-vlan.h>
+#include <nm-device-wifi.h>
+#include <nm-device-wimax.h>
+#include <nm-device.h>
+#include <nm-dhcp-config.h>
+#include <nm-enum-types.h>
+#include <nm-ip-config.h>
+#include <nm-object.h>
+#include <nm-remote-connection.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-port.h>
+#include <nm-setting-bridge.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-ip-config.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-port.h>
+#include <nm-setting-team.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-security.h>
+#include <nm-setting-wireless.h>
+#include <nm-setting.h>
+#include <nm-simple-connection.h>
+#include <nm-utils.h>
+#include <nm-version.h>
+#include <nm-vpn-connection.h>
+#include <nm-vpn-dbus-interface.h>
+#include <nm-vpn-editor-plugin.h>
+#include <nm-wimax-nsp.h>
+
+#undef __NETWORKMANAGER_H_INSIDE__
+
+#endif /* __NETWORKMANAGER_H__ */
diff --git a/libnm/generate-plugin-docs.pl b/libnm/generate-plugin-docs.pl
new file mode 100755
index 000000000..35cfdfc6a
--- /dev/null
+++ b/libnm/generate-plugin-docs.pl
@@ -0,0 +1,198 @@
+#!/usr/bin/env perl
+# vim: ft=perl ts=2 sts=2 sw=2 et ai
+# -*- Mode: perl; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+
+#
+# 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 2014 Red Hat, Inc.
+#
+
+#
+# The script parses nm-setting-*.c files and extracts documentation related
+# to setting plugins. The documentation is in a simple format of lines
+# "keyword: value". The documentation is enclosed between tags
+# ---<plugin-name>--- and ---end---
+# Recognized keywords are:
+# "property: " - property name
+# "variable: " - name of the variable used by the plugin
+# "format: " - format of the value in 'keyfile' plugin
+# "default: " - default value when variable is not used
+# "values: " - allowed values (e.g. for enumerations)
+# "example: " - example(s)
+# "description: " - description text
+# Value is an arbitrary string that can span over multiple lines.
+#
+# ifcfg-rh specifics:
+# - mark NM extension variables with (+), e.g. variable: UUID(+)
+#
+
+use strict;
+use warnings;
+use v5.10;
+#YAML:XS is based on libyaml C library and it is a good and fast YAML implementation.
+#However it may not be present everywhere. So use YAML instead.
+#use YAML::XS qw(Load);
+use YAML qw(Load);
+
+# global variables
+my @keywords = ("property", "variable", "format", "values", "default", "example", "description");
+my @source_files;
+my @data;
+my $fo;
+
+(scalar @ARGV == 3) or die "Usage: $0 <plugin> <srcdir> <output-xml-file>\n";
+my ($plugin, $srcdir, $output) = @ARGV;
+my $start_tag = "---$plugin---\\s*\$";
+my $end_tag = '---end---';
+
+# get source files to scan for documentation comments (nm-setting-<something>.c)
+my $file = "$srcdir/Makefile.libnm-core";
+open my $fh, '<', $file or die "Can't open $file: $!";
+while (my $line = <$fh>) {
+ chomp $line;
+ my @strings = $line =~ /\/(nm-setting-[^.]*\.c)(?:\s|$)/g;
+ push @source_files, @strings
+}
+close $fh;
+
+# open output file
+open $fo, '>', $output or die "Can't open $output: $!";
+
+# write XML header
+write_header();
+
+# write generated documenation for each setting
+foreach my $c_file (@source_files) {
+ my $path = "$srcdir/$c_file";
+ my $setting_name = get_setting_name($path);
+ write_item("<setting name=\"$setting_name\">");
+ scan_doc_comments($path, $start_tag, $end_tag);
+ write_item("</setting>");
+}
+
+# write XML footer
+write_footer();
+
+# close output file
+close $fo;
+
+
+### --- subroutines --- ###
+
+# get setting name from NM_SETTING_*_SETTING_NAME constant in C header file
+sub get_setting_name {
+ my $path = $_[0];
+ $path =~ s/c$/h/; # use header file to find out setting name
+ open my $fh, '<', $path or die "Can't open $path: $!";
+ while (my $line = <$fh>) {
+ if ($line =~ /NM_SETTING_.+SETTING_NAME\s+\"(\S+)\"/) {
+ return $1;
+ }
+ }
+}
+
+# scan source setting file for documentation tags and write them to XML
+sub scan_doc_comments {
+ my($setting_file, $start, $end) = @_;
+ open my $fi, '<', $setting_file or die "Can't open $setting_file: $!";
+ while (<$fi>) {
+ if (/$start/ .. /$end/) {
+ next if /$start/;
+ if (/$end/) {
+ process_data();
+ } else {
+ push @data, $_;
+ }
+ next;
+ }
+ # ignore text not inside marks
+ }
+ close $fi;
+}
+
+# process plugin property documentation comments (as a YAML document)
+sub process_data {
+ return if not @data;
+ my $kwd_pat = join("|", @keywords);
+ my $yaml_literal_seq = "|\n";
+
+ foreach (@data) {
+ # make a proper YAML document from @data
+ $_ =~ s/^\s*\**\s+|\s+$//; # remove leading spaces and *, and traling spaces
+ # Properly indent the text so that it is a valid YAML, and insert | (for literal text)
+ if ($_ =~ /^($kwd_pat):\s+/) {
+ # add | after "keyword:" that allows using literal text (YAML won't break on special character)
+ # http://learnxinyminutes.com/docs/yaml/ and http://www.yaml.org/spec/1.2/spec.html#id2795688
+ $_ =~ s/(^($kwd_pat):)/$1 $yaml_literal_seq/;
+ } else {
+ $_ = " " . $_; # indent the text
+ }
+ }
+ my $str = join ("", @data);
+ my $yaml_data = Load($str);
+
+ # now write a line into the XML
+ my $name = $yaml_data->{property} // "";
+ my $var = $yaml_data->{variable} // $name; # fallback to "property: "
+ my $format = $yaml_data->{format} // "";
+ my $values = $yaml_data->{values} // "";
+ my $def = $yaml_data->{default} // "";
+ my $exam = $yaml_data->{example} // "";
+ my $desc = $yaml_data->{description} // "";
+
+ chomp($name, $var, $format, $values, $def, $exam, $desc);
+ escape_xml_chars($name, $var, $format, $values, $def, $exam, $desc);
+ my $foo = sprintf("<property name=\"%s\" variable=\"%s\" format=\"%s\" values=\"%s\" ".
+ "default=\"%s\" example=\"%s\" description=\"%s\"/>",
+ $name, $var, $format, $values, $def, $exam, $desc);
+ write_item($foo);
+ @data = ();
+}
+
+# - XML handling -
+sub write_header {
+ (my $header =
+ qq{<?xml version=\"1.0\"?>
+ <!DOCTYPE nm-$plugin-docs [
+ ]>
+
+ <nm-$plugin-docs>
+ }) =~ s/^ {7}//mg;
+ print {$fo} $header;
+}
+
+sub write_footer {
+ my $footer = "</nm-$plugin-docs>";
+ print {$fo} $footer;
+}
+
+sub write_item {
+ my $str = join("", @_);
+ print {$fo} $str, "\n";
+}
+
+sub escape_xml_chars {
+ # http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Predefined%5Fentities%5Fin%5FXML
+ foreach my $val (@_) {
+ $val =~ s/&/&amp;/sg;
+ $val =~ s/</&lt;/sg;
+ $val =~ s/>/&gt;/sg;
+ $val =~ s/"/&quot;/sg;
+ $val =~ s/'/&apos;/sg;
+ }
+}
+
diff --git a/libnm/generate-setting-docs.py b/libnm/generate-setting-docs.py
new file mode 100755
index 000000000..e1e35a86d
--- /dev/null
+++ b/libnm/generate-setting-docs.py
@@ -0,0 +1,235 @@
+#!/usr/bin/env python
+# 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 2009 - 2014 Red Hat, Inc.
+
+from __future__ import print_function
+
+from gi.repository import NM, GObject
+import argparse, datetime, re, sys
+import xml.etree.ElementTree as ET
+
+dbus_type_name_map = {
+ 'b': 'boolean',
+ 's': 'string',
+ 'i': 'int32',
+ 'u': 'uint32',
+ 't': 'uint64',
+ 'x': 'int64',
+ 'y': 'byte',
+ 'as': 'array of string',
+ 'au': 'array of uint32',
+ 'ay': 'byte array',
+ 'a{ss}': 'dict of string to string',
+ 'a{sv}': 'vardict',
+ 'aau': 'array of array of uint32',
+ 'aay': 'array of byte array',
+ 'a(ayuay)': 'array of legacy IPv6 address struct',
+ 'a(ayuayu)': 'array of legacy IPv6 route struct',
+}
+
+ns_map = {
+ 'c': 'http://www.gtk.org/introspection/c/1.0',
+ 'gi': 'http://www.gtk.org/introspection/core/1.0',
+ 'glib': 'http://www.gtk.org/introspection/glib/1.0'
+}
+identifier_key = '{%s}identifier' % ns_map['c']
+nick_key = '{%s}nick' % ns_map['glib']
+symbol_prefix_key = '{%s}symbol-prefix' % ns_map['c']
+
+constants = {
+ 'TRUE': 'TRUE',
+ 'FALSE': 'FALSE',
+ 'G_MAXUINT32': 'G_MAXUINT32',
+ 'NULL': 'NULL' }
+setting_names = {}
+
+def init_constants(girxml, settings):
+ for const in girxml.findall('./gi:namespace/gi:constant', ns_map):
+ cname = const.attrib['{%s}type' % ns_map['c']]
+ cvalue = const.attrib['value']
+ if const.find('./gi:type[@name="utf8"]', ns_map) is not None:
+ cvalue = '"%s"' % cvalue
+ constants[cname] = cvalue
+
+ for enum in girxml.findall('./gi:namespace/gi:enumeration', ns_map):
+ for enumval in enum.findall('./gi:member', ns_map):
+ cname = enumval.attrib[identifier_key]
+ cvalue = '%s (%s)' % (cname, enumval.attrib['value'])
+ constants[cname] = cvalue
+
+ for enum in girxml.findall('./gi:namespace/gi:bitfield', ns_map):
+ for enumval in enum.findall('./gi:member', ns_map):
+ cname = enumval.attrib[identifier_key]
+ cvalue = '%s (0x%x)' % (cname, int(enumval.attrib['value']))
+ constants[cname] = cvalue
+
+ for setting in settings:
+ setting_type_name = 'NM' + setting.attrib['name'];
+ setting_name_symbol = 'NM_' + setting.attrib[symbol_prefix_key].upper() + '_SETTING_NAME'
+ if constants.has_key(setting_name_symbol):
+ setting_name = constants[setting_name_symbol]
+ setting_names[setting_type_name] = setting_name
+
+def get_prop_type(setting, pspec, propxml):
+ dbus_type = setting.get_dbus_property_type(pspec.name).dup_string()
+ prop_type = dbus_type_name_map[dbus_type]
+
+ if GObject.type_is_a(pspec.value_type, GObject.TYPE_ENUM) or GObject.type_is_a(pspec.value_type, GObject.TYPE_FLAGS):
+ prop_type = "%s (%s)" % (pspec.value_type.name, prop_type)
+
+ return prop_type
+
+def get_docs(setting, pspec, propxml):
+ doc_xml = propxml.find('gi:doc', ns_map)
+ if doc_xml is None:
+ return None
+
+ doc = doc_xml.text
+ if 'deprecated' in propxml.attrib:
+ doc = doc + ' Deprecated: ' + propxml.attrib['deprecated']
+
+ doc = re.sub(r'\n\s*', r' ', doc)
+
+ # Expand constants
+ doc = re.sub(r'%([^%]\w*)', lambda match: constants[match.group(1)], doc)
+
+ # #NMSettingWired:mac-address -> "mac-address"
+ doc = re.sub(r'#[A-Za-z0-9_]*:([A-Za-z0-9_-]*)', r'"\1"', doc)
+
+ # #NMSettingWired setting -> "802-3-ethernet" setting
+ doc = re.sub(r'#([A-Z]\w*) setting', lambda match: setting_names[match.group(1)] + ' setting', doc)
+
+ # remaining gtk-doc cleanup
+ doc = doc.replace('%%', '%')
+ doc = doc.replace('<!-- -->', '')
+ doc = re.sub(r' Element-.ype:.*', '', doc)
+ doc = re.sub(r'#([A-Z]\w*)', r'\1', doc)
+
+ # Remove sentences that refer to functions
+ doc = re.sub(r'\.\s+[^.]*\w\(\)[^.]*\.', r'.', doc)
+
+ return doc
+
+def get_default_value(setting, pspec, propxml):
+ default_value = setting.get_property(pspec.name.replace('-', '_'))
+ if default_value is None:
+ return default_value
+
+ value_type = get_prop_type(setting, pspec, propxml)
+ if value_type == 'string' and default_value != '' and pspec.name != 'name':
+ default_value = '"%s"' % default_value
+ elif value_type == 'gchar' and default_value != '':
+ default_value = "'%s'" % default_value
+ elif value_type == 'boolean':
+ default_value = str(default_value).upper()
+ elif value_type == 'byte array':
+ default_value = '[]'
+ elif str(default_value).startswith('<'):
+ default_value = None
+
+ return default_value
+
+def escape(val):
+ return str(val).replace('"', '&quot;')
+
+def usage():
+ print("Usage: %s --gir FILE --output FILE" % sys.argv[0])
+ exit()
+
+parser = argparse.ArgumentParser()
+parser.add_argument('-g', '--gir', metavar='FILE', help='NM-1.0.gir file')
+parser.add_argument('-x', '--overrides', metavar='FILE', help='documentation overrides file')
+parser.add_argument('-o', '--output', metavar='FILE', help='output file')
+
+args = parser.parse_args()
+if args.gir is None or args.output is None:
+ usage()
+
+girxml = ET.parse(args.gir).getroot()
+outfile = open(args.output, mode='w')
+
+basexml = girxml.find('./gi:namespace/gi:class[@name="Setting"]', ns_map)
+settings = girxml.findall('./gi:namespace/gi:class[@parent="Setting"]', ns_map)
+# Hack. Need a better way to do this
+ipxml = girxml.find('./gi:namespace/gi:class[@name="SettingIPConfig"]', ns_map)
+settings.extend(girxml.findall('./gi:namespace/gi:class[@parent="SettingIPConfig"]', ns_map))
+settings = sorted(settings, key=lambda setting: setting.attrib['{%s}symbol-prefix' % ns_map['c']])
+
+init_constants(girxml, settings)
+
+if args.overrides is not None:
+ overrides = ET.parse(args.overrides).getroot()
+
+outfile.write("""<?xml version=\"1.0\"?>
+<!DOCTYPE nm-setting-docs [
+<!ENTITY quot "&#34;">
+]>
+<nm-setting-docs>
+""")
+
+for settingxml in settings:
+ if settingxml.attrib.has_key('abstract'):
+ continue
+
+ new_func = NM.__getattr__(settingxml.attrib['name'])
+ setting = new_func()
+
+ outfile.write(" <setting name=\"%s\">\n" % setting.props.name)
+
+ setting_properties = { prop.name: prop for prop in GObject.list_properties(setting) }
+ if args.overrides is None:
+ setting_overrides = {}
+ else:
+ setting_overrides = { override.attrib['name']: override for override in overrides.findall('./setting[@name="%s"]/property' % setting.props.name) }
+
+ properties = sorted(set.union(set(setting_properties.keys()), set(setting_overrides.keys())))
+
+ for prop in properties:
+ value_type = None
+ value_desc = None
+ default_value = None
+
+ if prop in setting_properties:
+ pspec = setting_properties[prop]
+ propxml = settingxml.find('./gi:property[@name="%s"]' % pspec.name, ns_map)
+ if propxml is None:
+ propxml = basexml.find('./gi:property[@name="%s"]' % pspec.name, ns_map)
+ if propxml is None:
+ propxml = ipxml.find('./gi:property[@name="%s"]' % pspec.name, ns_map)
+
+ value_type = get_prop_type(setting, pspec, propxml)
+ value_desc = get_docs(setting, pspec, propxml)
+ default_value = get_default_value(setting, pspec, propxml)
+
+ if prop in setting_overrides:
+ override = setting_overrides[prop]
+ if override.attrib['format'] != '':
+ value_type = override.attrib['format']
+ if override.attrib['description'] != '':
+ value_desc = override.attrib['description']
+
+ if default_value is not None:
+ outfile.write(" <property name=\"%s\" type=\"%s\" default=\"%s\" description=\"%s\" />\n" %
+ (prop, value_type, escape(default_value), escape(value_desc)))
+ else:
+ outfile.write(" <property name=\"%s\" type=\"%s\" description=\"%s\" />\n" %
+ (prop, value_type, escape(value_desc)))
+
+ outfile.write(" </setting>\n")
+
+outfile.write("</nm-setting-docs>\n")
+outfile.close()
diff --git a/libnm/libnm.pc.in b/libnm/libnm.pc.in
new file mode 100644
index 000000000..6392799a7
--- /dev/null
+++ b/libnm/libnm.pc.in
@@ -0,0 +1,13 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: libnm
+Description: Convenience library for clients of NetworkManager
+Version: @VERSION@
+Requires: gio-2.0 dbus-glib-1
+Cflags: -I${includedir}/libnm
+Libs: -L${libdir} -lnm
+
+
diff --git a/libnm/libnm.ver b/libnm/libnm.ver
new file mode 100644
index 000000000..82bcdb9f0
--- /dev/null
+++ b/libnm/libnm.ver
@@ -0,0 +1,846 @@
+libnm_1_0_0 {
+global:
+ nm_802_11_ap_flags_get_type;
+ nm_802_11_ap_security_flags_get_type;
+ nm_802_11_mode_get_type;
+ nm_access_point_connection_valid;
+ nm_access_point_filter_connections;
+ nm_access_point_get_bssid;
+ nm_access_point_get_flags;
+ nm_access_point_get_frequency;
+ nm_access_point_get_max_bitrate;
+ nm_access_point_get_mode;
+ nm_access_point_get_rsn_flags;
+ nm_access_point_get_ssid;
+ nm_access_point_get_strength;
+ nm_access_point_get_type;
+ nm_access_point_get_wpa_flags;
+ 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_path;
+ nm_active_connection_get_state;
+ nm_active_connection_get_type;
+ nm_active_connection_get_uuid;
+ nm_active_connection_get_vpn;
+ nm_active_connection_state_get_type;
+ nm_agent_manager_error_get_type;
+ nm_agent_manager_error_quark;
+ nm_bluetooth_capabilities_get_type;
+ nm_client_activate_connection_async;
+ nm_client_activate_connection_finish;
+ nm_client_add_and_activate_connection_async;
+ nm_client_add_and_activate_connection_finish;
+ nm_client_add_connection_async;
+ nm_client_add_connection_finish;
+ nm_client_check_connectivity;
+ nm_client_check_connectivity_async;
+ nm_client_check_connectivity_finish;
+ nm_client_deactivate_connection;
+ nm_client_deactivate_connection_async;
+ nm_client_deactivate_connection_finish;
+ nm_client_error_get_type;
+ nm_client_error_quark;
+ nm_client_get_activating_connection;
+ nm_client_get_active_connections;
+ nm_client_get_connection_by_id;
+ nm_client_get_connection_by_path;
+ nm_client_get_connection_by_uuid;
+ nm_client_get_connections;
+ nm_client_get_connectivity;
+ nm_client_get_device_by_iface;
+ nm_client_get_device_by_path;
+ nm_client_get_devices;
+ nm_client_get_logging;
+ nm_client_get_nm_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;
+ nm_client_load_connections;
+ nm_client_load_connections_async;
+ nm_client_load_connections_finish;
+ nm_client_networking_get_enabled;
+ nm_client_networking_set_enabled;
+ nm_client_new;
+ nm_client_new_async;
+ nm_client_new_finish;
+ nm_client_permission_get_type;
+ nm_client_permission_result_get_type;
+ nm_client_reload_connections;
+ nm_client_reload_connections_async;
+ nm_client_reload_connections_finish;
+ nm_client_save_hostname;
+ nm_client_save_hostname_async;
+ nm_client_save_hostname_finish;
+ nm_client_set_logging;
+ nm_client_wimax_get_enabled;
+ nm_client_wimax_hardware_get_enabled;
+ nm_client_wimax_set_enabled;
+ nm_client_wireless_get_enabled;
+ nm_client_wireless_hardware_get_enabled;
+ nm_client_wireless_set_enabled;
+ nm_client_wwan_get_enabled;
+ nm_client_wwan_hardware_get_enabled;
+ nm_client_wwan_set_enabled;
+ nm_connection_add_setting;
+ nm_connection_clear_secrets;
+ nm_connection_clear_secrets_with_flags;
+ nm_connection_clear_settings;
+ nm_connection_compare;
+ nm_connection_diff;
+ nm_connection_dump;
+ 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_interface_name;
+ nm_connection_get_path;
+ nm_connection_get_setting;
+ nm_connection_get_setting_802_1x;
+ nm_connection_get_setting_adsl;
+ nm_connection_get_setting_bluetooth;
+ nm_connection_get_setting_bond;
+ nm_connection_get_setting_bridge;
+ nm_connection_get_setting_bridge_port;
+ 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;
+ nm_connection_get_setting_ip6_config;
+ nm_connection_get_setting_olpc_mesh;
+ 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;
+ nm_connection_get_setting_wired;
+ nm_connection_get_setting_wireless;
+ nm_connection_get_setting_wireless_security;
+ nm_connection_get_type;
+ nm_connection_get_uuid;
+ nm_connection_get_virtual_device_description;
+ nm_connection_is_type;
+ nm_connection_is_virtual;
+ nm_connection_need_secrets;
+ nm_connection_normalize;
+ nm_connection_remove_setting;
+ nm_connection_replace_settings;
+ nm_connection_replace_settings_from_connection;
+ nm_connection_serialization_flags_get_type;
+ nm_connection_set_path;
+ nm_connection_to_dbus;
+ nm_connection_update_secrets;
+ nm_connection_verify;
+ nm_connectivity_state_get_type;
+ nm_crypto_error_get_type;
+ nm_crypto_error_quark;
+ nm_device_adsl_get_carrier;
+ nm_device_adsl_get_type;
+ nm_device_bond_get_carrier;
+ nm_device_bond_get_hw_address;
+ nm_device_bond_get_slaves;
+ nm_device_bond_get_type;
+ nm_device_bridge_get_carrier;
+ nm_device_bridge_get_hw_address;
+ nm_device_bridge_get_slaves;
+ nm_device_bridge_get_type;
+ nm_device_bt_get_capabilities;
+ nm_device_bt_get_hw_address;
+ nm_device_bt_get_name;
+ nm_device_bt_get_type;
+ nm_device_capabilities_get_type;
+ nm_device_connection_compatible;
+ nm_device_connection_valid;
+ nm_device_delete;
+ nm_device_delete_async;
+ nm_device_delete_finish;
+ nm_device_disambiguate_names;
+ nm_device_disconnect;
+ nm_device_disconnect_async;
+ nm_device_disconnect_finish;
+ nm_device_error_get_type;
+ nm_device_error_quark;
+ nm_device_ethernet_get_carrier;
+ nm_device_ethernet_get_hw_address;
+ nm_device_ethernet_get_permanent_hw_address;
+ nm_device_ethernet_get_speed;
+ nm_device_ethernet_get_type;
+ nm_device_filter_connections;
+ nm_device_generic_get_hw_address;
+ nm_device_generic_get_type;
+ 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;
+ nm_device_get_driver;
+ 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_get_carrier;
+ nm_device_infiniband_get_hw_address;
+ nm_device_infiniband_get_type;
+ nm_device_is_software;
+ nm_device_modem_capabilities_get_type;
+ nm_device_modem_get_current_capabilities;
+ nm_device_modem_get_modem_capabilities;
+ nm_device_modem_get_type;
+ nm_device_olpc_mesh_get_active_channel;
+ nm_device_olpc_mesh_get_companion;
+ nm_device_olpc_mesh_get_hw_address;
+ nm_device_olpc_mesh_get_type;
+ nm_device_set_autoconnect;
+ nm_device_state_get_type;
+ nm_device_state_reason_get_type;
+ nm_device_team_get_carrier;
+ nm_device_team_get_hw_address;
+ nm_device_team_get_slaves;
+ nm_device_team_get_type;
+ nm_device_type_get_type;
+ nm_device_vlan_get_carrier;
+ nm_device_vlan_get_hw_address;
+ nm_device_vlan_get_parent;
+ nm_device_vlan_get_type;
+ nm_device_vlan_get_vlan_id;
+ nm_device_wifi_capabilities_get_type;
+ nm_device_wifi_get_access_point_by_path;
+ nm_device_wifi_get_access_points;
+ nm_device_wifi_get_active_access_point;
+ nm_device_wifi_get_bitrate;
+ nm_device_wifi_get_capabilities;
+ nm_device_wifi_get_hw_address;
+ nm_device_wifi_get_mode;
+ nm_device_wifi_get_permanent_hw_address;
+ nm_device_wifi_get_type;
+ nm_device_wifi_request_scan;
+ nm_device_wifi_request_scan_async;
+ nm_device_wifi_request_scan_finish;
+ nm_device_wimax_get_active_nsp;
+ nm_device_wimax_get_bsid;
+ nm_device_wimax_get_center_frequency;
+ nm_device_wimax_get_cinr;
+ nm_device_wimax_get_hw_address;
+ nm_device_wimax_get_nsp_by_path;
+ nm_device_wimax_get_nsps;
+ nm_device_wimax_get_rssi;
+ nm_device_wimax_get_tx_power;
+ nm_device_wimax_get_type;
+ nm_dhcp_config_get_family;
+ nm_dhcp_config_get_one_option;
+ nm_dhcp_config_get_options;
+ nm_dhcp_config_get_type;
+ nm_ip_address_equal;
+ nm_ip_address_get_address;
+ nm_ip_address_get_address_binary;
+ nm_ip_address_get_attribute;
+ nm_ip_address_get_attribute_names;
+ nm_ip_address_get_family;
+ nm_ip_address_get_prefix;
+ nm_ip_address_get_type;
+ nm_ip_address_new;
+ nm_ip_address_new_binary;
+ nm_ip_address_ref;
+ nm_ip_address_set_address;
+ nm_ip_address_set_address_binary;
+ nm_ip_address_set_attribute;
+ nm_ip_address_set_prefix;
+ nm_ip_address_unref;
+ nm_ip_config_get_addresses;
+ nm_ip_config_get_domains;
+ nm_ip_config_get_family;
+ nm_ip_config_get_gateway;
+ nm_ip_config_get_nameservers;
+ nm_ip_config_get_routes;
+ nm_ip_config_get_searches;
+ nm_ip_config_get_type;
+ nm_ip_config_get_wins_servers;
+ nm_ip_route_equal;
+ nm_ip_route_get_attribute;
+ nm_ip_route_get_attribute_names;
+ nm_ip_route_get_dest;
+ nm_ip_route_get_dest_binary;
+ nm_ip_route_get_family;
+ nm_ip_route_get_metric;
+ nm_ip_route_get_next_hop;
+ nm_ip_route_get_next_hop_binary;
+ nm_ip_route_get_prefix;
+ nm_ip_route_get_type;
+ nm_ip_route_new;
+ nm_ip_route_new_binary;
+ nm_ip_route_ref;
+ nm_ip_route_set_attribute;
+ nm_ip_route_set_dest;
+ nm_ip_route_set_dest_binary;
+ nm_ip_route_set_metric;
+ nm_ip_route_set_next_hop;
+ nm_ip_route_set_next_hop_binary;
+ nm_ip_route_set_prefix;
+ nm_ip_route_unref;
+ nm_manager_error_get_type;
+ nm_manager_error_quark;
+ nm_object_get_path;
+ nm_object_get_type;
+ nm_remote_connection_commit_changes;
+ nm_remote_connection_commit_changes_async;
+ nm_remote_connection_commit_changes_finish;
+ nm_remote_connection_delete;
+ nm_remote_connection_delete_async;
+ nm_remote_connection_delete_finish;
+ nm_remote_connection_get_secrets;
+ nm_remote_connection_get_secrets_async;
+ nm_remote_connection_get_secrets_finish;
+ nm_remote_connection_get_type;
+ nm_remote_connection_get_unsaved;
+ nm_remote_connection_get_visible;
+ nm_remote_connection_save;
+ nm_remote_connection_save_async;
+ nm_remote_connection_save_finish;
+ nm_secret_agent_capabilities_get_type;
+ nm_secret_agent_error_get_type;
+ nm_secret_agent_error_quark;
+ nm_secret_agent_get_secrets_flags_get_type;
+ nm_secret_agent_old_delete_secrets;
+ nm_secret_agent_old_get_registered;
+ nm_secret_agent_old_get_secrets;
+ nm_secret_agent_old_get_type;
+ nm_secret_agent_old_register;
+ nm_secret_agent_old_register_async;
+ nm_secret_agent_old_register_finish;
+ nm_secret_agent_old_save_secrets;
+ nm_secret_agent_old_unregister;
+ nm_secret_agent_old_unregister_async;
+ nm_secret_agent_old_unregister_finish;
+ nm_setting_802_1x_add_altsubject_match;
+ nm_setting_802_1x_add_eap_method;
+ nm_setting_802_1x_add_phase2_altsubject_match;
+ nm_setting_802_1x_ck_format_get_type;
+ nm_setting_802_1x_ck_scheme_get_type;
+ nm_setting_802_1x_clear_altsubject_matches;
+ nm_setting_802_1x_clear_eap_methods;
+ nm_setting_802_1x_clear_phase2_altsubject_matches;
+ nm_setting_802_1x_get_altsubject_match;
+ nm_setting_802_1x_get_anonymous_identity;
+ nm_setting_802_1x_get_ca_cert_blob;
+ nm_setting_802_1x_get_ca_cert_path;
+ nm_setting_802_1x_get_ca_cert_scheme;
+ nm_setting_802_1x_get_ca_path;
+ nm_setting_802_1x_get_client_cert_blob;
+ nm_setting_802_1x_get_client_cert_path;
+ nm_setting_802_1x_get_client_cert_scheme;
+ nm_setting_802_1x_get_eap_method;
+ nm_setting_802_1x_get_identity;
+ nm_setting_802_1x_get_num_altsubject_matches;
+ nm_setting_802_1x_get_num_eap_methods;
+ nm_setting_802_1x_get_num_phase2_altsubject_matches;
+ nm_setting_802_1x_get_pac_file;
+ nm_setting_802_1x_get_password;
+ nm_setting_802_1x_get_password_flags;
+ nm_setting_802_1x_get_password_raw;
+ nm_setting_802_1x_get_password_raw_flags;
+ nm_setting_802_1x_get_phase1_fast_provisioning;
+ nm_setting_802_1x_get_phase1_peaplabel;
+ nm_setting_802_1x_get_phase1_peapver;
+ nm_setting_802_1x_get_phase2_altsubject_match;
+ nm_setting_802_1x_get_phase2_auth;
+ nm_setting_802_1x_get_phase2_autheap;
+ nm_setting_802_1x_get_phase2_ca_cert_blob;
+ nm_setting_802_1x_get_phase2_ca_cert_path;
+ nm_setting_802_1x_get_phase2_ca_cert_scheme;
+ nm_setting_802_1x_get_phase2_ca_path;
+ nm_setting_802_1x_get_phase2_client_cert_blob;
+ nm_setting_802_1x_get_phase2_client_cert_path;
+ nm_setting_802_1x_get_phase2_client_cert_scheme;
+ nm_setting_802_1x_get_phase2_private_key_blob;
+ nm_setting_802_1x_get_phase2_private_key_format;
+ 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_path;
+ nm_setting_802_1x_get_phase2_private_key_scheme;
+ nm_setting_802_1x_get_phase2_subject_match;
+ nm_setting_802_1x_get_pin;
+ nm_setting_802_1x_get_pin_flags;
+ nm_setting_802_1x_get_private_key_blob;
+ nm_setting_802_1x_get_private_key_format;
+ nm_setting_802_1x_get_private_key_password;
+ nm_setting_802_1x_get_private_key_password_flags;
+ nm_setting_802_1x_get_private_key_path;
+ nm_setting_802_1x_get_private_key_scheme;
+ nm_setting_802_1x_get_subject_match;
+ nm_setting_802_1x_get_system_ca_certs;
+ 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;
+ nm_setting_802_1x_set_phase2_client_cert;
+ nm_setting_802_1x_set_phase2_private_key;
+ nm_setting_802_1x_set_private_key;
+ nm_setting_adsl_get_encapsulation;
+ nm_setting_adsl_get_password;
+ nm_setting_adsl_get_password_flags;
+ nm_setting_adsl_get_protocol;
+ nm_setting_adsl_get_type;
+ nm_setting_adsl_get_username;
+ nm_setting_adsl_get_vci;
+ nm_setting_adsl_get_vpi;
+ nm_setting_adsl_new;
+ nm_setting_bluetooth_get_bdaddr;
+ nm_setting_bluetooth_get_connection_type;
+ nm_setting_bluetooth_get_type;
+ nm_setting_bluetooth_new;
+ nm_setting_bond_add_option;
+ nm_setting_bond_get_num_options;
+ nm_setting_bond_get_option;
+ nm_setting_bond_get_option_by_name;
+ nm_setting_bond_get_option_default;
+ nm_setting_bond_get_type;
+ nm_setting_bond_get_valid_options;
+ nm_setting_bond_new;
+ nm_setting_bond_remove_option;
+ nm_setting_bond_validate_option;
+ nm_setting_bridge_get_ageing_time;
+ nm_setting_bridge_get_forward_delay;
+ nm_setting_bridge_get_hello_time;
+ nm_setting_bridge_get_mac_address;
+ nm_setting_bridge_get_max_age;
+ nm_setting_bridge_get_priority;
+ nm_setting_bridge_get_stp;
+ nm_setting_bridge_get_type;
+ nm_setting_bridge_new;
+ nm_setting_bridge_port_get_hairpin_mode;
+ nm_setting_bridge_port_get_path_cost;
+ nm_setting_bridge_port_get_priority;
+ nm_setting_bridge_port_get_type;
+ nm_setting_bridge_port_new;
+ nm_setting_cdma_get_number;
+ nm_setting_cdma_get_password;
+ nm_setting_cdma_get_password_flags;
+ nm_setting_cdma_get_type;
+ nm_setting_cdma_get_username;
+ nm_setting_cdma_new;
+ nm_setting_compare;
+ nm_setting_compare_flags_get_type;
+ nm_setting_connection_add_permission;
+ nm_setting_connection_add_secondary;
+ nm_setting_connection_get_autoconnect;
+ nm_setting_connection_get_autoconnect_priority;
+ 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;
+ nm_setting_connection_get_permission;
+ nm_setting_connection_get_read_only;
+ nm_setting_connection_get_secondary;
+ nm_setting_connection_get_slave_type;
+ nm_setting_connection_get_timestamp;
+ nm_setting_connection_get_type;
+ nm_setting_connection_get_uuid;
+ nm_setting_connection_get_zone;
+ nm_setting_connection_is_slave_type;
+ 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_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_generic_get_type;
+ nm_setting_generic_new;
+ nm_setting_get_dbus_property_type;
+ nm_setting_get_name;
+ nm_setting_get_secret_flags;
+ nm_setting_get_type;
+ nm_setting_gsm_get_apn;
+ nm_setting_gsm_get_home_only;
+ nm_setting_gsm_get_network_id;
+ nm_setting_gsm_get_number;
+ nm_setting_gsm_get_password;
+ nm_setting_gsm_get_password_flags;
+ nm_setting_gsm_get_pin;
+ nm_setting_gsm_get_pin_flags;
+ nm_setting_gsm_get_type;
+ nm_setting_gsm_get_username;
+ nm_setting_gsm_new;
+ 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_get_virtual_interface_name;
+ nm_setting_infiniband_new;
+ nm_setting_ip4_config_get_dhcp_client_id;
+ nm_setting_ip4_config_get_type;
+ nm_setting_ip4_config_new;
+ nm_setting_ip6_config_get_ip6_privacy;
+ nm_setting_ip6_config_get_type;
+ nm_setting_ip6_config_new;
+ nm_setting_ip6_config_privacy_get_type;
+ nm_setting_ip_config_add_address;
+ nm_setting_ip_config_add_dns;
+ nm_setting_ip_config_add_dns_search;
+ nm_setting_ip_config_add_route;
+ nm_setting_ip_config_clear_addresses;
+ nm_setting_ip_config_clear_dns;
+ nm_setting_ip_config_clear_dns_searches;
+ nm_setting_ip_config_clear_routes;
+ nm_setting_ip_config_get_address;
+ nm_setting_ip_config_get_dhcp_hostname;
+ nm_setting_ip_config_get_dhcp_send_hostname;
+ nm_setting_ip_config_get_dns;
+ nm_setting_ip_config_get_dns_search;
+ nm_setting_ip_config_get_gateway;
+ nm_setting_ip_config_get_ignore_auto_dns;
+ nm_setting_ip_config_get_ignore_auto_routes;
+ nm_setting_ip_config_get_may_fail;
+ nm_setting_ip_config_get_method;
+ nm_setting_ip_config_get_never_default;
+ nm_setting_ip_config_get_num_addresses;
+ nm_setting_ip_config_get_num_dns;
+ nm_setting_ip_config_get_num_dns_searches;
+ nm_setting_ip_config_get_num_routes;
+ nm_setting_ip_config_get_route;
+ nm_setting_ip_config_get_route_metric;
+ nm_setting_ip_config_get_type;
+ nm_setting_ip_config_remove_address;
+ nm_setting_ip_config_remove_address_by_value;
+ nm_setting_ip_config_remove_dns;
+ nm_setting_ip_config_remove_dns_by_value;
+ nm_setting_ip_config_remove_dns_search;
+ nm_setting_ip_config_remove_dns_search_by_value;
+ nm_setting_ip_config_remove_route;
+ nm_setting_ip_config_remove_route_by_value;
+ nm_setting_lookup_type;
+ nm_setting_olpc_mesh_get_channel;
+ nm_setting_olpc_mesh_get_dhcp_anycast_address;
+ nm_setting_olpc_mesh_get_ssid;
+ nm_setting_olpc_mesh_get_type;
+ nm_setting_olpc_mesh_new;
+ nm_setting_ppp_get_baud;
+ nm_setting_ppp_get_crtscts;
+ nm_setting_ppp_get_lcp_echo_failure;
+ nm_setting_ppp_get_lcp_echo_interval;
+ nm_setting_ppp_get_mppe_stateful;
+ nm_setting_ppp_get_mru;
+ nm_setting_ppp_get_mtu;
+ nm_setting_ppp_get_no_vj_comp;
+ nm_setting_ppp_get_noauth;
+ nm_setting_ppp_get_nobsdcomp;
+ nm_setting_ppp_get_nodeflate;
+ nm_setting_ppp_get_refuse_chap;
+ nm_setting_ppp_get_refuse_eap;
+ nm_setting_ppp_get_refuse_mschap;
+ nm_setting_ppp_get_refuse_mschapv2;
+ nm_setting_ppp_get_refuse_pap;
+ nm_setting_ppp_get_require_mppe;
+ nm_setting_ppp_get_require_mppe_128;
+ nm_setting_ppp_get_type;
+ nm_setting_ppp_new;
+ nm_setting_pppoe_get_password;
+ nm_setting_pppoe_get_password_flags;
+ nm_setting_pppoe_get_service;
+ nm_setting_pppoe_get_type;
+ nm_setting_pppoe_get_username;
+ nm_setting_pppoe_new;
+ nm_setting_secret_flags_get_type;
+ nm_setting_serial_get_baud;
+ nm_setting_serial_get_bits;
+ nm_setting_serial_get_parity;
+ nm_setting_serial_get_send_delay;
+ nm_setting_serial_get_stopbits;
+ nm_setting_serial_get_type;
+ nm_setting_serial_new;
+ nm_setting_serial_parity_get_type;
+ nm_setting_set_secret_flags;
+ nm_setting_team_get_config;
+ nm_setting_team_get_type;
+ nm_setting_team_new;
+ nm_setting_team_port_get_config;
+ nm_setting_team_port_get_type;
+ nm_setting_team_port_new;
+ nm_setting_to_string;
+ nm_setting_verify;
+ nm_setting_vlan_add_priority;
+ nm_setting_vlan_add_priority_str;
+ nm_setting_vlan_clear_priorities;
+ nm_setting_vlan_get_flags;
+ nm_setting_vlan_get_id;
+ nm_setting_vlan_get_num_priorities;
+ nm_setting_vlan_get_parent;
+ nm_setting_vlan_get_priority;
+ 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_foreach_data_item;
+ nm_setting_vpn_foreach_secret;
+ nm_setting_vpn_get_data_item;
+ nm_setting_vpn_get_num_data_items;
+ nm_setting_vpn_get_num_secrets;
+ nm_setting_vpn_get_secret;
+ nm_setting_vpn_get_service_type;
+ nm_setting_vpn_get_type;
+ nm_setting_vpn_get_user_name;
+ nm_setting_vpn_new;
+ nm_setting_vpn_remove_data_item;
+ nm_setting_vpn_remove_secret;
+ nm_setting_wimax_get_mac_address;
+ 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_get_auto_negotiate;
+ nm_setting_wired_get_cloned_mac_address;
+ 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;
+ nm_setting_wired_get_s390_option;
+ nm_setting_wired_get_s390_option_by_key;
+ 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_get_band;
+ nm_setting_wireless_get_bssid;
+ nm_setting_wireless_get_channel;
+ nm_setting_wireless_get_cloned_mac_address;
+ 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_seen_bssid;
+ nm_setting_wireless_get_ssid;
+ 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;
+ nm_setting_wireless_security_clear_groups;
+ nm_setting_wireless_security_clear_pairwise;
+ nm_setting_wireless_security_clear_protos;
+ nm_setting_wireless_security_get_auth_alg;
+ nm_setting_wireless_security_get_group;
+ nm_setting_wireless_security_get_key_mgmt;
+ nm_setting_wireless_security_get_leap_password;
+ nm_setting_wireless_security_get_leap_password_flags;
+ nm_setting_wireless_security_get_leap_username;
+ nm_setting_wireless_security_get_num_groups;
+ nm_setting_wireless_security_get_num_pairwise;
+ nm_setting_wireless_security_get_num_protos;
+ nm_setting_wireless_security_get_pairwise;
+ nm_setting_wireless_security_get_proto;
+ nm_setting_wireless_security_get_psk;
+ nm_setting_wireless_security_get_psk_flags;
+ nm_setting_wireless_security_get_type;
+ nm_setting_wireless_security_get_wep_key;
+ nm_setting_wireless_security_get_wep_key_flags;
+ nm_setting_wireless_security_get_wep_key_type;
+ 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_settings_error_get_type;
+ nm_settings_error_quark;
+ nm_simple_connection_get_type;
+ nm_simple_connection_new;
+ nm_simple_connection_new_clone;
+ nm_simple_connection_new_from_dbus;
+ nm_state_get_type;
+ nm_utils_ap_mode_security_valid;
+ nm_utils_bin2hexstr;
+ nm_utils_check_virtual_device_compatibility;
+ nm_utils_escape_ssid;
+ nm_utils_file_is_certificate;
+ nm_utils_file_is_pkcs12;
+ nm_utils_file_is_private_key;
+ nm_utils_file_search_in_paths;
+ nm_utils_hexstr2bin;
+ nm_utils_hwaddr_atoba;
+ nm_utils_hwaddr_aton;
+ nm_utils_hwaddr_canonical;
+ nm_utils_hwaddr_len;
+ nm_utils_hwaddr_matches;
+ nm_utils_hwaddr_ntoa;
+ nm_utils_hwaddr_valid;
+ nm_utils_iface_valid_name;
+ nm_utils_inet4_ntop;
+ nm_utils_inet6_ntop;
+ nm_utils_ip4_addresses_from_variant;
+ nm_utils_ip4_addresses_to_variant;
+ nm_utils_ip4_dns_from_variant;
+ nm_utils_ip4_dns_to_variant;
+ nm_utils_ip4_get_default_prefix;
+ nm_utils_ip4_netmask_to_prefix;
+ nm_utils_ip4_prefix_to_netmask;
+ nm_utils_ip4_routes_from_variant;
+ nm_utils_ip4_routes_to_variant;
+ nm_utils_ip6_addresses_from_variant;
+ nm_utils_ip6_addresses_to_variant;
+ nm_utils_ip6_dns_from_variant;
+ nm_utils_ip6_dns_to_variant;
+ nm_utils_ip6_routes_from_variant;
+ nm_utils_ip6_routes_to_variant;
+ nm_utils_ipaddr_valid;
+ nm_utils_is_empty_ssid;
+ nm_utils_is_uuid;
+ nm_utils_same_ssid;
+ nm_utils_security_type_get_type;
+ nm_utils_security_valid;
+ nm_utils_ssid_to_utf8;
+ nm_utils_uuid_generate;
+ nm_utils_wep_key_valid;
+ nm_utils_wifi_channel_to_freq;
+ nm_utils_wifi_find_next_channel;
+ nm_utils_wifi_freq_to_channel;
+ nm_utils_wifi_is_channel_valid;
+ nm_utils_wifi_strength_bars;
+ nm_utils_wpa_psk_valid;
+ nm_vlan_flags_get_type;
+ nm_vlan_priority_map_get_type;
+ nm_vpn_connection_get_banner;
+ nm_vpn_connection_get_type;
+ nm_vpn_connection_get_vpn_state;
+ nm_vpn_connection_state_get_type;
+ nm_vpn_connection_state_reason_get_type;
+ nm_vpn_editor_get_type;
+ nm_vpn_editor_get_widget;
+ nm_vpn_editor_plugin_capability_get_type;
+ nm_vpn_editor_plugin_export;
+ nm_vpn_editor_plugin_get_capabilities;
+ nm_vpn_editor_plugin_get_editor;
+ nm_vpn_editor_plugin_get_suggested_filename;
+ nm_vpn_editor_plugin_get_type;
+ nm_vpn_editor_plugin_import;
+ nm_vpn_editor_update_connection;
+ nm_vpn_plugin_error_get_type;
+ nm_vpn_plugin_error_quark;
+ nm_vpn_plugin_failure_get_type;
+ nm_vpn_plugin_old_disconnect;
+ nm_vpn_plugin_old_failure;
+ nm_vpn_plugin_old_get_connection;
+ nm_vpn_plugin_old_get_secret_flags;
+ nm_vpn_plugin_old_get_state;
+ nm_vpn_plugin_old_get_type;
+ nm_vpn_plugin_old_read_vpn_details;
+ nm_vpn_plugin_old_secrets_required;
+ nm_vpn_plugin_old_set_ip4_config;
+ nm_vpn_plugin_old_set_login_banner;
+ nm_vpn_plugin_old_set_state;
+ nm_vpn_service_state_get_type;
+ nm_wep_key_type_get_type;
+ nm_wimax_nsp_connection_valid;
+ nm_wimax_nsp_filter_connections;
+ nm_wimax_nsp_get_name;
+ nm_wimax_nsp_get_network_type;
+ nm_wimax_nsp_get_signal_quality;
+ nm_wimax_nsp_get_type;
+ nm_wimax_nsp_network_type_get_type;
+local:
+ *;
+};
diff --git a/libnm/nm-access-point.c b/libnm/nm-access-point.c
new file mode 100644
index 000000000..e20cd9971
--- /dev/null
+++ b/libnm/nm-access-point.c
@@ -0,0 +1,598 @@
+/* -*- 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 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2011 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "nm-glib-compat.h"
+
+#include <nm-connection.h>
+#include <nm-setting-connection.h>
+#include <nm-setting-wireless.h>
+#include <nm-setting-wireless-security.h>
+#include <nm-utils.h>
+
+#include "nm-access-point.h"
+#include "nm-dbus-interface.h"
+#include "nm-object-private.h"
+
+G_DEFINE_TYPE (NMAccessPoint, nm_access_point, NM_TYPE_OBJECT)
+
+#define NM_ACCESS_POINT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_ACCESS_POINT, NMAccessPointPrivate))
+
+typedef struct {
+ NM80211ApFlags flags;
+ NM80211ApSecurityFlags wpa_flags;
+ NM80211ApSecurityFlags rsn_flags;
+ GBytes *ssid;
+ guint32 frequency;
+ char *bssid;
+ NM80211Mode mode;
+ guint32 max_bitrate;
+ guint8 strength;
+} NMAccessPointPrivate;
+
+enum {
+ PROP_0,
+ PROP_FLAGS,
+ PROP_WPA_FLAGS,
+ PROP_RSN_FLAGS,
+ PROP_SSID,
+ PROP_FREQUENCY,
+ PROP_HW_ADDRESS,
+ PROP_MODE,
+ PROP_MAX_BITRATE,
+ PROP_STRENGTH,
+ PROP_BSSID,
+
+ LAST_PROP
+};
+
+/**
+ * nm_access_point_get_flags:
+ * @ap: a #NMAccessPoint
+ *
+ * Gets the flags of the access point.
+ *
+ * Returns: the flags
+ **/
+NM80211ApFlags
+nm_access_point_get_flags (NMAccessPoint *ap)
+{
+ g_return_val_if_fail (NM_IS_ACCESS_POINT (ap), NM_802_11_AP_FLAGS_NONE);
+
+ return NM_ACCESS_POINT_GET_PRIVATE (ap)->flags;
+}
+
+/**
+ * nm_access_point_get_wpa_flags:
+ * @ap: a #NMAccessPoint
+ *
+ * Gets the WPA (version 1) flags of the access point.
+ *
+ * Returns: the WPA flags
+ **/
+NM80211ApSecurityFlags
+nm_access_point_get_wpa_flags (NMAccessPoint *ap)
+{
+ g_return_val_if_fail (NM_IS_ACCESS_POINT (ap), NM_802_11_AP_SEC_NONE);
+
+ return NM_ACCESS_POINT_GET_PRIVATE (ap)->wpa_flags;
+}
+
+/**
+ * nm_access_point_get_rsn_flags:
+ * @ap: a #NMAccessPoint
+ *
+ * Gets the RSN (Robust Secure Network, ie WPA version 2) flags of the access
+ * point.
+ *
+ * Returns: the RSN flags
+ **/
+NM80211ApSecurityFlags
+nm_access_point_get_rsn_flags (NMAccessPoint *ap)
+{
+ g_return_val_if_fail (NM_IS_ACCESS_POINT (ap), NM_802_11_AP_SEC_NONE);
+
+ return NM_ACCESS_POINT_GET_PRIVATE (ap)->rsn_flags;
+}
+
+/**
+ * nm_access_point_get_ssid:
+ * @ap: a #NMAccessPoint
+ *
+ * Gets the SSID of the access point.
+ *
+ * Returns: (transfer none): the #GBytes containing the SSID, or %NULL if the
+ * SSID is unknown.
+ **/
+GBytes *
+nm_access_point_get_ssid (NMAccessPoint *ap)
+{
+ NMAccessPointPrivate *priv;
+
+ g_return_val_if_fail (NM_IS_ACCESS_POINT (ap), NULL);
+
+ priv = NM_ACCESS_POINT_GET_PRIVATE (ap);
+ if (!priv->ssid || g_bytes_get_size (priv->ssid) == 0)
+ return NULL;
+
+ return priv->ssid;
+}
+
+/**
+ * nm_access_point_get_frequency:
+ * @ap: a #NMAccessPoint
+ *
+ * Gets the frequency of the access point.
+ *
+ * Returns: the frequency
+ **/
+guint32
+nm_access_point_get_frequency (NMAccessPoint *ap)
+{
+ g_return_val_if_fail (NM_IS_ACCESS_POINT (ap), 0);
+
+ return NM_ACCESS_POINT_GET_PRIVATE (ap)->frequency;
+}
+
+/**
+ * nm_access_point_get_bssid:
+ * @ap: a #NMAccessPoint
+ *
+ * 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.
+ **/
+const char *
+nm_access_point_get_bssid (NMAccessPoint *ap)
+{
+ g_return_val_if_fail (NM_IS_ACCESS_POINT (ap), NULL);
+
+ return NM_ACCESS_POINT_GET_PRIVATE (ap)->bssid;
+}
+
+/**
+ * nm_access_point_get_mode:
+ * @ap: a #NMAccessPoint
+ *
+ * Gets the mode of the access point.
+ *
+ * Returns: the mode
+ **/
+NM80211Mode
+nm_access_point_get_mode (NMAccessPoint *ap)
+{
+ g_return_val_if_fail (NM_IS_ACCESS_POINT (ap), 0);
+
+ return NM_ACCESS_POINT_GET_PRIVATE (ap)->mode;
+}
+
+/**
+ * nm_access_point_get_max_bitrate:
+ * @ap: a #NMAccessPoint
+ *
+ * Gets the maximum bit rate of the access point in kbit/s.
+ *
+ * Returns: the maximum bit rate (kbit/s)
+ **/
+guint32
+nm_access_point_get_max_bitrate (NMAccessPoint *ap)
+{
+ g_return_val_if_fail (NM_IS_ACCESS_POINT (ap), 0);
+
+ return NM_ACCESS_POINT_GET_PRIVATE (ap)->max_bitrate;
+}
+
+/**
+ * nm_access_point_get_strength:
+ * @ap: a #NMAccessPoint
+ *
+ * Gets the current signal strength of the access point.
+ *
+ * Returns: the signal strength
+ **/
+guint8
+nm_access_point_get_strength (NMAccessPoint *ap)
+{
+ g_return_val_if_fail (NM_IS_ACCESS_POINT (ap), 0);
+
+ return NM_ACCESS_POINT_GET_PRIVATE (ap)->strength;
+}
+
+/**
+ * nm_access_point_connection_valid:
+ * @ap: an #NMAccessPoint to validate @connection against
+ * @connection: an #NMConnection to validate against @ap
+ *
+ * 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 Wi-Fi AP,
+ * %FALSE if it cannot be.
+ **/
+gboolean
+nm_access_point_connection_valid (NMAccessPoint *ap, NMConnection *connection)
+{
+ NMSettingConnection *s_con;
+ NMSettingWireless *s_wifi;
+ NMSettingWirelessSecurity *s_wsec;
+ const char *ctype, *ap_bssid;
+ GBytes *setting_ssid;
+ GBytes *ap_ssid;
+ const char *setting_bssid;
+ const char *setting_mode;
+ NM80211Mode ap_mode;
+ const char *setting_band;
+ guint32 ap_freq, setting_chan, ap_chan;
+
+ 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_WIRELESS_SETTING_NAME) != 0)
+ return FALSE;
+
+ s_wifi = nm_connection_get_setting_wireless (connection);
+ if (!s_wifi)
+ return FALSE;
+
+ /* SSID checks */
+ ap_ssid = nm_access_point_get_ssid (ap);
+ g_warn_if_fail (ap_ssid != NULL);
+ setting_ssid = nm_setting_wireless_get_ssid (s_wifi);
+ if (!setting_ssid || !ap_ssid)
+ return FALSE;
+ if (!g_bytes_equal (ap_ssid, setting_ssid))
+ return FALSE;
+
+ /* BSSID checks */
+ ap_bssid = nm_access_point_get_bssid (ap);
+ g_warn_if_fail (ap_bssid);
+ setting_bssid = nm_setting_wireless_get_bssid (s_wifi);
+ if (setting_bssid && ap_bssid) {
+ if (!nm_utils_hwaddr_matches (ap_bssid, -1, setting_bssid, -1))
+ return FALSE;
+ }
+
+ /* Mode */
+ ap_mode = nm_access_point_get_mode (ap);
+ g_warn_if_fail (ap_mode != NM_802_11_MODE_UNKNOWN);
+ setting_mode = nm_setting_wireless_get_mode (s_wifi);
+ if (setting_mode && ap_mode) {
+ if (!strcmp (setting_mode, "infrastructure") && (ap_mode != NM_802_11_MODE_INFRA))
+ return FALSE;
+ if (!strcmp (setting_mode, "adhoc") && (ap_mode != NM_802_11_MODE_ADHOC))
+ return FALSE;
+ /* Hotspot never matches against APs as it's a device-specific mode. */
+ if (!strcmp (setting_mode, "ap"))
+ return FALSE;
+ }
+
+ /* Band and Channel/Frequency */
+ ap_freq = nm_access_point_get_frequency (ap);
+ if (ap_freq) {
+ setting_band = nm_setting_wireless_get_band (s_wifi);
+ if (g_strcmp0 (setting_band, "a") == 0) {
+ if (ap_freq < 4915 || ap_freq > 5825)
+ return FALSE;
+ } else if (g_strcmp0 (setting_band, "bg") == 0) {
+ if (ap_freq < 2412 || ap_freq > 2484)
+ return FALSE;
+ }
+
+ setting_chan = nm_setting_wireless_get_channel (s_wifi);
+ if (setting_chan) {
+ ap_chan = nm_utils_wifi_freq_to_channel (ap_freq);
+ if (setting_chan != ap_chan)
+ return FALSE;
+ }
+ }
+
+ s_wsec = nm_connection_get_setting_wireless_security (connection);
+ if (!nm_setting_wireless_ap_security_compatible (s_wifi,
+ s_wsec,
+ nm_access_point_get_flags (ap),
+ nm_access_point_get_wpa_flags (ap),
+ nm_access_point_get_rsn_flags (ap),
+ ap_mode))
+ return FALSE;
+
+ return TRUE;
+}
+
+/**
+ * nm_access_point_filter_connections:
+ * @ap: an #NMAccessPoint to filter connections for
+ * @connections: (element-type NMConnection): an array of #NMConnections to
+ * filter
+ *
+ * Filters a given array of connections for a given #NMAccessPoint object and
+ * returns connections which may be activated with the access point. Any
+ * returned connections will match the @ap's SSID and (if given) BSSID and
+ * other attributes like security settings, channel, etc.
+ *
+ * To obtain the list of connections that are compatible with this access point,
+ * use nm_client_get_connections() and then filter the returned list for a given
+ * #NMDevice using nm_device_filter_connections() and finally filter that list
+ * with this function.
+ *
+ * Returns: (transfer container) (element-type NMConnection): an array of
+ * #NMConnections that could be activated with the given @ap. The array should
+ * be freed with g_ptr_array_unref() when it is no longer required.
+ **/
+GPtrArray *
+nm_access_point_filter_connections (NMAccessPoint *ap, const GPtrArray *connections)
+{
+ GPtrArray *filtered;
+ int i;
+
+ filtered = g_ptr_array_new_with_free_func (g_object_unref);
+ for (i = 0; i < connections->len; i++) {
+ NMConnection *candidate = connections->pdata[i];
+
+ if (nm_access_point_connection_valid (ap, candidate))
+ g_ptr_array_add (filtered, g_object_ref (candidate));
+ }
+
+ return filtered;
+}
+
+/************************************************************/
+
+static void
+nm_access_point_init (NMAccessPoint *ap)
+{
+}
+
+static void
+finalize (GObject *object)
+{
+ NMAccessPointPrivate *priv = NM_ACCESS_POINT_GET_PRIVATE (object);
+
+ if (priv->ssid)
+ g_bytes_unref (priv->ssid);
+
+ g_free (priv->bssid);
+
+ G_OBJECT_CLASS (nm_access_point_parent_class)->finalize (object);
+}
+
+static void
+get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NMAccessPoint *ap = NM_ACCESS_POINT (object);
+
+ switch (prop_id) {
+ case PROP_FLAGS:
+ g_value_set_flags (value, nm_access_point_get_flags (ap));
+ break;
+ case PROP_WPA_FLAGS:
+ g_value_set_flags (value, nm_access_point_get_wpa_flags (ap));
+ break;
+ case PROP_RSN_FLAGS:
+ g_value_set_flags (value, nm_access_point_get_rsn_flags (ap));
+ break;
+ case PROP_SSID:
+ g_value_set_boxed (value, nm_access_point_get_ssid (ap));
+ break;
+ case PROP_FREQUENCY:
+ g_value_set_uint (value, nm_access_point_get_frequency (ap));
+ break;
+ case PROP_HW_ADDRESS:
+ g_value_set_string (value, nm_access_point_get_bssid (ap));
+ break;
+ case PROP_BSSID:
+ g_value_set_string (value, nm_access_point_get_bssid (ap));
+ break;
+ case PROP_MODE:
+ g_value_set_enum (value, nm_access_point_get_mode (ap));
+ break;
+ case PROP_MAX_BITRATE:
+ g_value_set_uint (value, nm_access_point_get_max_bitrate (ap));
+ break;
+ case PROP_STRENGTH:
+ g_value_set_uchar (value, nm_access_point_get_strength (ap));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+init_dbus (NMObject *object)
+{
+ NMAccessPointPrivate *priv = NM_ACCESS_POINT_GET_PRIVATE (object);
+ const NMPropertiesInfo property_info[] = {
+ { NM_ACCESS_POINT_FLAGS, &priv->flags },
+ { NM_ACCESS_POINT_WPA_FLAGS, &priv->wpa_flags },
+ { NM_ACCESS_POINT_RSN_FLAGS, &priv->rsn_flags },
+ { NM_ACCESS_POINT_SSID, &priv->ssid },
+ { NM_ACCESS_POINT_FREQUENCY, &priv->frequency },
+ /* The D-Bus property is HwAddress, but the GObject property is "bssid" */
+ { NM_ACCESS_POINT_HW_ADDRESS, &priv->bssid },
+ { NM_ACCESS_POINT_MODE, &priv->mode },
+ { NM_ACCESS_POINT_MAX_BITRATE, &priv->max_bitrate },
+ { NM_ACCESS_POINT_STRENGTH, &priv->strength },
+ { NULL },
+ };
+
+ NM_OBJECT_CLASS (nm_access_point_parent_class)->init_dbus (object);
+
+ _nm_object_register_properties (object,
+ NM_DBUS_INTERFACE_ACCESS_POINT,
+ property_info);
+}
+
+
+static void
+nm_access_point_class_init (NMAccessPointClass *ap_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (ap_class);
+ NMObjectClass *nm_object_class = NM_OBJECT_CLASS (ap_class);
+
+ g_type_class_add_private (ap_class, sizeof (NMAccessPointPrivate));
+
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_ACCESS_POINT);
+
+ /* virtual methods */
+ object_class->get_property = get_property;
+ object_class->finalize = finalize;
+
+ nm_object_class->init_dbus = init_dbus;
+
+ /* properties */
+
+ /**
+ * NMAccessPoint:flags:
+ *
+ * The flags of the access point.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_FLAGS,
+ g_param_spec_flags (NM_ACCESS_POINT_FLAGS, "", "",
+ NM_TYPE_802_11_AP_FLAGS,
+ NM_802_11_AP_FLAGS_NONE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMAccessPoint:wpa-flags:
+ *
+ * The WPA flags of the access point.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_WPA_FLAGS,
+ g_param_spec_flags (NM_ACCESS_POINT_WPA_FLAGS, "", "",
+ NM_TYPE_802_11_AP_SECURITY_FLAGS,
+ NM_802_11_AP_SEC_NONE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMAccessPoint:rsn-flags:
+ *
+ * The RSN flags of the access point.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_RSN_FLAGS,
+ g_param_spec_flags (NM_ACCESS_POINT_RSN_FLAGS, "", "",
+ NM_TYPE_802_11_AP_SECURITY_FLAGS,
+ NM_802_11_AP_SEC_NONE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMAccessPoint:ssid:
+ *
+ * The SSID of the access point, or %NULL if it is not known.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_SSID,
+ g_param_spec_boxed (NM_ACCESS_POINT_SSID, "", "",
+ G_TYPE_BYTES,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMAccessPoint:frequency:
+ *
+ * The frequency of the access point.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_FREQUENCY,
+ g_param_spec_uint (NM_ACCESS_POINT_FREQUENCY, "", "",
+ 0, 10000, 0,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMAccessPoint:bssid:
+ *
+ * The BSSID of the access point.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_BSSID,
+ g_param_spec_string (NM_ACCESS_POINT_BSSID, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMAccessPoint:hw-address:
+ *
+ * Alias for #NMAccessPoint:bssid.
+ *
+ * Deprecated: 1.0: use #NMAccessPoint:bssid.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_HW_ADDRESS,
+ g_param_spec_string (NM_ACCESS_POINT_HW_ADDRESS, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMAccessPoint:mode:
+ *
+ * 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).
+ **/
+ g_object_class_install_property
+ (object_class, PROP_MODE,
+ g_param_spec_enum (NM_ACCESS_POINT_MODE, "", "",
+ NM_TYPE_802_11_MODE,
+ NM_802_11_MODE_INFRA,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMAccessPoint:max-bitrate:
+ *
+ * The maximum bit rate of the access point in kbit/s.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_MAX_BITRATE,
+ g_param_spec_uint (NM_ACCESS_POINT_MAX_BITRATE, "", "",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMAccessPoint:strength:
+ *
+ * The current signal strength of the access point.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_STRENGTH,
+ g_param_spec_uchar (NM_ACCESS_POINT_STRENGTH, "", "",
+ 0, G_MAXUINT8, 0,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/libnm/nm-access-point.h b/libnm/nm-access-point.h
new file mode 100644
index 000000000..6991c19ac
--- /dev/null
+++ b/libnm/nm-access-point.h
@@ -0,0 +1,85 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ * Copyright 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2011 Red Hat, Inc.
+ */
+
+#ifndef __NM_ACCESS_POINT_H__
+#define __NM_ACCESS_POINT_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-object.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_ACCESS_POINT (nm_access_point_get_type ())
+#define NM_ACCESS_POINT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_ACCESS_POINT, NMAccessPoint))
+#define NM_ACCESS_POINT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_ACCESS_POINT, NMAccessPointClass))
+#define NM_IS_ACCESS_POINT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_ACCESS_POINT))
+#define NM_IS_ACCESS_POINT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_ACCESS_POINT))
+#define NM_ACCESS_POINT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_ACCESS_POINT, NMAccessPointClass))
+
+#define NM_ACCESS_POINT_FLAGS "flags"
+#define NM_ACCESS_POINT_WPA_FLAGS "wpa-flags"
+#define NM_ACCESS_POINT_RSN_FLAGS "rsn-flags"
+#define NM_ACCESS_POINT_SSID "ssid"
+#define NM_ACCESS_POINT_BSSID "bssid"
+#define NM_ACCESS_POINT_FREQUENCY "frequency"
+#define NM_ACCESS_POINT_MODE "mode"
+#define NM_ACCESS_POINT_MAX_BITRATE "max-bitrate"
+#define NM_ACCESS_POINT_STRENGTH "strength"
+
+/* DEPRECATED */
+#define NM_ACCESS_POINT_HW_ADDRESS "hw-address"
+
+
+struct _NMAccessPoint {
+ NMObject parent;
+};
+
+typedef struct {
+ NMObjectClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMAccessPointClass;
+
+GType nm_access_point_get_type (void);
+
+NM80211ApFlags nm_access_point_get_flags (NMAccessPoint *ap);
+NM80211ApSecurityFlags nm_access_point_get_wpa_flags (NMAccessPoint *ap);
+NM80211ApSecurityFlags nm_access_point_get_rsn_flags (NMAccessPoint *ap);
+GBytes * nm_access_point_get_ssid (NMAccessPoint *ap);
+const char * nm_access_point_get_bssid (NMAccessPoint *ap);
+guint32 nm_access_point_get_frequency (NMAccessPoint *ap);
+NM80211Mode nm_access_point_get_mode (NMAccessPoint *ap);
+guint32 nm_access_point_get_max_bitrate (NMAccessPoint *ap);
+guint8 nm_access_point_get_strength (NMAccessPoint *ap);
+
+GPtrArray * nm_access_point_filter_connections (NMAccessPoint *ap,
+ const GPtrArray *connections);
+
+gboolean nm_access_point_connection_valid (NMAccessPoint *ap,
+ NMConnection *connection);
+
+G_END_DECLS
+
+#endif /* __NM_ACCESS_POINT_H__ */
diff --git a/libnm/nm-active-connection.c b/libnm/nm-active-connection.c
new file mode 100644
index 000000000..31f513280
--- /dev/null
+++ b/libnm/nm-active-connection.c
@@ -0,0 +1,714 @@
+/* -*- 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 2007 - 2014 Red Hat, Inc.
+ * Copyright 2008 Novell, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "nm-dbus-interface.h"
+#include "nm-active-connection.h"
+#include "nm-object-private.h"
+#include "nm-core-internal.h"
+#include "nm-device.h"
+#include "nm-device-private.h"
+#include "nm-connection.h"
+#include "nm-vpn-connection.h"
+#include "nm-glib-compat.h"
+#include "nm-dbus-helpers.h"
+#include "nm-dhcp4-config.h"
+#include "nm-dhcp6-config.h"
+#include "nm-ip4-config.h"
+#include "nm-ip6-config.h"
+#include "nm-remote-connection.h"
+
+static GType _nm_active_connection_decide_type (GVariant *value);
+
+G_DEFINE_TYPE_WITH_CODE (NMActiveConnection, nm_active_connection, NM_TYPE_OBJECT,
+ _nm_object_register_type_func (g_define_type_id,
+ _nm_active_connection_decide_type,
+ NM_DBUS_INTERFACE_ACTIVE_CONNECTION,
+ "Vpn");
+ )
+
+#define NM_ACTIVE_CONNECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_ACTIVE_CONNECTION, NMActiveConnectionPrivate))
+
+typedef struct {
+ NMRemoteConnection *connection;
+ char *id;
+ char *uuid;
+ char *type;
+ char *specific_object_path;
+ GPtrArray *devices;
+ NMActiveConnectionState state;
+ gboolean is_default;
+ NMIPConfig *ip4_config;
+ NMDhcpConfig *dhcp4_config;
+ gboolean is_default6;
+ NMIPConfig *ip6_config;
+ NMDhcpConfig *dhcp6_config;
+ gboolean is_vpn;
+ NMDevice *master;
+} NMActiveConnectionPrivate;
+
+enum {
+ PROP_0,
+ PROP_CONNECTION,
+ PROP_ID,
+ PROP_UUID,
+ PROP_TYPE,
+ PROP_SPECIFIC_OBJECT_PATH,
+ 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
+};
+
+static GType
+_nm_active_connection_decide_type (GVariant *value)
+{
+ /* @value is the value of the o.fd.NM.ActiveConnection property "VPN" */
+ if (g_variant_get_boolean (value))
+ return NM_TYPE_VPN_CONNECTION;
+ else
+ return NM_TYPE_ACTIVE_CONNECTION;
+}
+
+/**
+ * nm_active_connection_get_connection:
+ * @connection: a #NMActiveConnection
+ *
+ * Gets the #NMRemoteConnection associated with @connection.
+ *
+ * Returns: (transfer none): the #NMRemoteConnection which this
+ * #NMActiveConnection is an active instance of.
+ **/
+NMRemoteConnection *
+nm_active_connection_get_connection (NMActiveConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (connection), NULL);
+
+ return NM_ACTIVE_CONNECTION_GET_PRIVATE (connection)->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.
+ **/
+const char *
+nm_active_connection_get_id (NMActiveConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (connection), NULL);
+
+ return NM_ACTIVE_CONNECTION_GET_PRIVATE (connection)->id;
+}
+
+/**
+ * nm_active_connection_get_uuid:
+ * @connection: a #NMActiveConnection
+ *
+ * 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.
+ **/
+const char *
+nm_active_connection_get_uuid (NMActiveConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (connection), NULL);
+
+ return NM_ACTIVE_CONNECTION_GET_PRIVATE (connection)->uuid;
+}
+
+/**
+ * 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.
+ **/
+const char *
+nm_active_connection_get_connection_type (NMActiveConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (connection), NULL);
+
+ return NM_ACTIVE_CONNECTION_GET_PRIVATE (connection)->type;
+}
+
+/**
+ * nm_active_connection_get_specific_object_path:
+ * @connection: a #NMActiveConnection
+ *
+ * Gets the path of the "specific object" used at activation.
+ *
+ * Currently there is no single method that will allow you to automatically turn
+ * this into an appropriate #NMObject; you need to know what kind of object it
+ * is based on other information. (Eg, if @connection corresponds to a Wi-Fi
+ * connection, then the specific object will be an #NMAccessPoint, and you can
+ * resolve it with nm_device_wifi_get_access_point_by_path().)
+ *
+ * Returns: the specific object's D-Bus path. This is the internal string used
+ * by the connection, and must not be modified.
+ **/
+const char *
+nm_active_connection_get_specific_object_path (NMActiveConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (connection), NULL);
+
+ return NM_ACTIVE_CONNECTION_GET_PRIVATE (connection)->specific_object_path;
+}
+
+/**
+ * nm_active_connection_get_devices:
+ * @connection: a #NMActiveConnection
+ *
+ * Gets the #NMDevices used for the active connections.
+ *
+ * Returns: (element-type NMDevice): the #GPtrArray containing #NMDevices.
+ * This is the internal copy used by the connection, and must not be modified.
+ **/
+const GPtrArray *
+nm_active_connection_get_devices (NMActiveConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (connection), NULL);
+
+ return NM_ACTIVE_CONNECTION_GET_PRIVATE (connection)->devices;
+}
+
+/**
+ * nm_active_connection_get_state:
+ * @connection: a #NMActiveConnection
+ *
+ * Gets the active connection's state.
+ *
+ * Returns: the state
+ **/
+NMActiveConnectionState
+nm_active_connection_get_state (NMActiveConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (connection), NM_ACTIVE_CONNECTION_STATE_UNKNOWN);
+
+ return NM_ACTIVE_CONNECTION_GET_PRIVATE (connection)->state;
+}
+
+/**
+ * nm_active_connection_get_default:
+ * @connection: a #NMActiveConnection
+ *
+ * Whether the active connection is the default IPv4 one (that is, is used for
+ * the default IPv4 route and DNS information).
+ *
+ * Returns: %TRUE if the active connection is the default IPv4 connection
+ **/
+gboolean
+nm_active_connection_get_default (NMActiveConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (connection), FALSE);
+
+ return NM_ACTIVE_CONNECTION_GET_PRIVATE (connection)->is_default;
+}
+
+/**
+ * nm_active_connection_get_ip4_config:
+ * @connection: an #NMActiveConnection
+ *
+ * Gets the current IPv4 #NMIPConfig associated with the #NMActiveConnection.
+ *
+ * Returns: (transfer none): the IPv4 #NMIPConfig, or %NULL if the connection is
+ * not in the %NM_ACTIVE_CONNECTION_STATE_ACTIVATED state.
+ **/
+NMIPConfig *
+nm_active_connection_get_ip4_config (NMActiveConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (connection), NULL);
+
+ return NM_ACTIVE_CONNECTION_GET_PRIVATE (connection)->ip4_config;
+}
+
+/**
+ * nm_active_connection_get_dhcp4_config:
+ * @connection: an #NMActiveConnection
+ *
+ * Gets the current IPv4 #NMDhcpConfig (if any) associated with the
+ * #NMActiveConnection.
+ *
+ * Returns: (transfer none): the IPv4 #NMDhcpConfig, or %NULL if the connection
+ * does not use DHCP, or is not in the %NM_ACTIVE_CONNECTION_STATE_ACTIVATED
+ * state.
+ **/
+NMDhcpConfig *
+nm_active_connection_get_dhcp4_config (NMActiveConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (connection), NULL);
+
+ return NM_ACTIVE_CONNECTION_GET_PRIVATE (connection)->dhcp4_config;
+}
+
+/**
+ * nm_active_connection_get_default6:
+ * @connection: a #NMActiveConnection
+ *
+ * Whether the active connection is the default IPv6 one (that is, is used for
+ * the default IPv6 route and DNS information).
+ *
+ * Returns: %TRUE if the active connection is the default IPv6 connection
+ **/
+gboolean
+nm_active_connection_get_default6 (NMActiveConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (connection), FALSE);
+
+ return NM_ACTIVE_CONNECTION_GET_PRIVATE (connection)->is_default6;
+}
+
+/**
+ * nm_active_connection_get_ip6_config:
+ * @connection: an #NMActiveConnection
+ *
+ * Gets the current IPv6 #NMIPConfig associated with the #NMActiveConnection.
+ *
+ * Returns: (transfer none): the IPv6 #NMIPConfig, or %NULL if the connection is
+ * not in the %NM_ACTIVE_CONNECTION_STATE_ACTIVATED state.
+ **/
+NMIPConfig *
+nm_active_connection_get_ip6_config (NMActiveConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (connection), NULL);
+
+ return NM_ACTIVE_CONNECTION_GET_PRIVATE (connection)->ip6_config;
+}
+
+/**
+ * nm_active_connection_get_dhcp6_config:
+ * @connection: an #NMActiveConnection
+ *
+ * Gets the current IPv6 #NMDhcpConfig (if any) associated with the
+ * #NMActiveConnection.
+ *
+ * Returns: (transfer none): the IPv6 #NMDhcpConfig, or %NULL if the connection
+ * does not use DHCPv6, or is not in the %NM_ACTIVE_CONNECTION_STATE_ACTIVATED
+ * state.
+ **/
+NMDhcpConfig *
+nm_active_connection_get_dhcp6_config (NMActiveConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (connection), NULL);
+
+ 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
+ **/
+gboolean
+nm_active_connection_get_vpn (NMActiveConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (connection), FALSE);
+
+ return NM_ACTIVE_CONNECTION_GET_PRIVATE (connection)->is_vpn;
+}
+
+/**
+ * nm_active_connection_get_master:
+ * @connection: a #NMActiveConnection
+ *
+ * Gets the master #NMDevice of the connection.
+ *
+ * Returns: (transfer none): the master #NMDevice of the #NMActiveConnection.
+ **/
+NMDevice *
+nm_active_connection_get_master (NMActiveConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (connection), NULL);
+
+ return NM_ACTIVE_CONNECTION_GET_PRIVATE (connection)->master;
+}
+
+static void
+nm_active_connection_init (NMActiveConnection *connection)
+{
+ NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (connection);
+
+ priv->devices = g_ptr_array_new ();
+}
+
+static void
+dispose (GObject *object)
+{
+ NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (object);
+
+ g_clear_pointer (&priv->devices, g_ptr_array_unref);
+
+ g_clear_object (&priv->connection);
+ g_clear_object (&priv->master);
+ 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_OBJECT_CLASS (nm_active_connection_parent_class)->dispose (object);
+}
+
+static void
+finalize (GObject *object)
+{
+ NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (object);
+
+ g_free (priv->id);
+ g_free (priv->uuid);
+ g_free (priv->type);
+ g_free (priv->specific_object_path);
+
+ G_OBJECT_CLASS (nm_active_connection_parent_class)->finalize (object);
+}
+
+static void
+get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NMActiveConnection *self = NM_ACTIVE_CONNECTION (object);
+
+ switch (prop_id) {
+ case PROP_CONNECTION:
+ g_value_set_object (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_PATH:
+ g_value_set_string (value, nm_active_connection_get_specific_object_path (self));
+ break;
+ case PROP_DEVICES:
+ g_value_take_boxed (value, _nm_utils_copy_object_array (nm_active_connection_get_devices (self)));
+ break;
+ case PROP_STATE:
+ g_value_set_enum (value, nm_active_connection_get_state (self));
+ break;
+ 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_object (value, nm_active_connection_get_master (self));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static gboolean
+demarshal_specific_object_path (NMObject *object, GParamSpec *pspec, GVariant *value, gpointer field)
+{
+ char **param = (char **) field;
+
+ /* We have to demarshal this manually, because the D-Bus property name
+ * ("SpecificObject"), doesn't match the object property name
+ * ("specific-object-path"). (The name "specific-object" is reserved for
+ * future use as an NMObject-valued property.)
+ */
+ if (!g_variant_is_of_type (value, G_VARIANT_TYPE_OBJECT_PATH))
+ return FALSE;
+
+ g_free (*param);
+ *param = g_variant_dup_string (value, NULL);
+ return TRUE;
+}
+
+static void
+init_dbus (NMObject *object)
+{
+ NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (object);
+ const NMPropertiesInfo property_info[] = {
+ { NM_ACTIVE_CONNECTION_CONNECTION, &priv->connection, NULL, NM_TYPE_REMOTE_CONNECTION },
+ { NM_ACTIVE_CONNECTION_ID, &priv->id },
+ { NM_ACTIVE_CONNECTION_UUID, &priv->uuid },
+ { NM_ACTIVE_CONNECTION_TYPE, &priv->type },
+ { "specific-object", &priv->specific_object_path, demarshal_specific_object_path },
+ { 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, NULL, NM_TYPE_DEVICE },
+
+ { NULL },
+ };
+
+ NM_OBJECT_CLASS (nm_active_connection_parent_class)->init_dbus (object);
+
+ _nm_object_register_properties (object,
+ NM_DBUS_INTERFACE_ACTIVE_CONNECTION,
+ property_info);
+}
+
+
+static void
+nm_active_connection_class_init (NMActiveConnectionClass *ap_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (ap_class);
+ NMObjectClass *nm_object_class = NM_OBJECT_CLASS (ap_class);
+
+ g_type_class_add_private (ap_class, sizeof (NMActiveConnectionPrivate));
+
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_ACTIVE_CONNECTION);
+
+ /* virtual methods */
+ object_class->get_property = get_property;
+ object_class->dispose = dispose;
+ object_class->finalize = finalize;
+
+ nm_object_class->init_dbus = init_dbus;
+
+ /* properties */
+
+ /**
+ * NMActiveConnection:connection:
+ *
+ * The connection that this is an active instance of.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_CONNECTION,
+ g_param_spec_object (NM_ACTIVE_CONNECTION_CONNECTION, "", "",
+ NM_TYPE_REMOTE_CONNECTION,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMActiveConnection:id:
+ *
+ * The active connection's ID
+ **/
+ g_object_class_install_property
+ (object_class, PROP_ID,
+ g_param_spec_string (NM_ACTIVE_CONNECTION_ID, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMActiveConnection:uuid:
+ *
+ * The active connection's UUID
+ **/
+ g_object_class_install_property
+ (object_class, PROP_UUID,
+ g_param_spec_string (NM_ACTIVE_CONNECTION_UUID, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMActiveConnection:type:
+ *
+ * The active connection's type
+ **/
+ g_object_class_install_property
+ (object_class, PROP_TYPE,
+ g_param_spec_string (NM_ACTIVE_CONNECTION_TYPE, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMActiveConnection:specific-object-path:
+ *
+ * The path to the "specific object" of the active connection; see
+ * nm_active_connection_get_specific_object_path() for more details.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_SPECIFIC_OBJECT_PATH,
+ g_param_spec_string (NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT_PATH, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMActiveConnection:devices:
+ *
+ * The devices of the active connection.
+ *
+ * Element-type: NMDevice
+ **/
+ g_object_class_install_property
+ (object_class, PROP_DEVICES,
+ g_param_spec_boxed (NM_ACTIVE_CONNECTION_DEVICES, "", "",
+ G_TYPE_PTR_ARRAY,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMActiveConnection:state:
+ *
+ * The state of the active connection.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_STATE,
+ g_param_spec_enum (NM_ACTIVE_CONNECTION_STATE, "", "",
+ NM_TYPE_ACTIVE_CONNECTION_STATE,
+ NM_ACTIVE_CONNECTION_STATE_UNKNOWN,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMActiveConnection:default:
+ *
+ * Whether the active connection is the default IPv4 one.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_DEFAULT,
+ g_param_spec_boolean (NM_ACTIVE_CONNECTION_DEFAULT, "", "",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMActiveConnection:ip4-config:
+ *
+ * The IPv4 #NMIPConfig of the connection.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_IP4_CONFIG,
+ g_param_spec_object (NM_ACTIVE_CONNECTION_IP4_CONFIG, "", "",
+ NM_TYPE_IP_CONFIG,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMActiveConnection:dhcp4-config:
+ *
+ * The IPv4 #NMDhcpConfig of the connection.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_DHCP4_CONFIG,
+ g_param_spec_object (NM_ACTIVE_CONNECTION_DHCP4_CONFIG, "", "",
+ NM_TYPE_DHCP_CONFIG,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMActiveConnection:default6:
+ *
+ * Whether the active connection is the default IPv6 one.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_DEFAULT6,
+ g_param_spec_boolean (NM_ACTIVE_CONNECTION_DEFAULT6, "", "",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMActiveConnection:ip6-config:
+ *
+ * The IPv6 #NMIPConfig of the connection.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_IP6_CONFIG,
+ g_param_spec_object (NM_ACTIVE_CONNECTION_IP6_CONFIG, "", "",
+ NM_TYPE_IP_CONFIG,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMActiveConnection:dhcp6-config:
+ *
+ * The IPv6 #NMDhcpConfig of the connection.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_DHCP6_CONFIG,
+ g_param_spec_object (NM_ACTIVE_CONNECTION_DHCP6_CONFIG, "", "",
+ NM_TYPE_DHCP_CONFIG,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMActiveConnection:vpn:
+ *
+ * Whether the active connection is a VPN connection.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_VPN,
+ g_param_spec_boolean (NM_ACTIVE_CONNECTION_VPN, "", "",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMActiveConnection:master:
+ *
+ * The master device if one exists.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_MASTER,
+ g_param_spec_object (NM_ACTIVE_CONNECTION_MASTER, "", "",
+ NM_TYPE_DEVICE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/libnm/nm-active-connection.h b/libnm/nm-active-connection.h
new file mode 100644
index 000000000..4bc841482
--- /dev/null
+++ b/libnm/nm-active-connection.h
@@ -0,0 +1,87 @@
+/* -*- 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 2007 - 2014 Red Hat, Inc.
+ * Copyright 2008 Novell, Inc.
+ */
+
+#ifndef __NM_ACTIVE_CONNECTION_H__
+#define __NM_ACTIVE_CONNECTION_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-object.h>
+
+G_BEGIN_DECLS
+
+#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))
+#define NM_ACTIVE_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_ACTIVE_CONNECTION, NMActiveConnectionClass))
+#define NM_IS_ACTIVE_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_ACTIVE_CONNECTION))
+#define NM_IS_ACTIVE_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_ACTIVE_CONNECTION))
+#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_PATH "specific-object-path"
+#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"
+
+struct _NMActiveConnection {
+ NMObject parent;
+};
+
+typedef struct {
+ NMObjectClass parent;
+
+ /*< private >*/
+ gpointer padding[8];
+} NMActiveConnectionClass;
+
+GType nm_active_connection_get_type (void);
+
+NMRemoteConnection *nm_active_connection_get_connection (NMActiveConnection *connection);
+const char *nm_active_connection_get_id (NMActiveConnection *connection);
+const char *nm_active_connection_get_uuid (NMActiveConnection *connection);
+const char *nm_active_connection_get_connection_type (NMActiveConnection *connection);
+const char *nm_active_connection_get_specific_object_path (NMActiveConnection *connection);
+const GPtrArray *nm_active_connection_get_devices (NMActiveConnection *connection);
+NMActiveConnectionState nm_active_connection_get_state (NMActiveConnection *connection);
+NMDevice *nm_active_connection_get_master (NMActiveConnection *connection);
+gboolean nm_active_connection_get_default (NMActiveConnection *connection);
+NMIPConfig *nm_active_connection_get_ip4_config (NMActiveConnection *connection);
+NMDhcpConfig *nm_active_connection_get_dhcp4_config (NMActiveConnection *connection);
+gboolean nm_active_connection_get_default6 (NMActiveConnection *connection);
+NMIPConfig *nm_active_connection_get_ip6_config (NMActiveConnection *connection);
+NMDhcpConfig *nm_active_connection_get_dhcp6_config (NMActiveConnection *connection);
+gboolean nm_active_connection_get_vpn (NMActiveConnection *connection);
+
+G_END_DECLS
+
+#endif /* __NM_ACTIVE_CONNECTION_H__ */
diff --git a/libnm/nm-client.c b/libnm/nm-client.c
new file mode 100644
index 000000000..ef73e329b
--- /dev/null
+++ b/libnm/nm-client.c
@@ -0,0 +1,2238 @@
+/* -*- 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 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2014 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <nm-utils.h>
+
+#include "nm-client.h"
+#include "nm-manager.h"
+#include "nm-remote-settings.h"
+#include "nm-device-ethernet.h"
+#include "nm-device-wifi.h"
+#include "nm-device-private.h"
+#include "nm-core-internal.h"
+#include "nm-active-connection.h"
+#include "nm-vpn-connection.h"
+#include "nm-remote-connection.h"
+#include "nm-object-cache.h"
+#include "nm-glib-compat.h"
+#include "nm-dbus-helpers.h"
+
+void _nm_device_wifi_set_wireless_enabled (NMDeviceWifi *device, gboolean enabled);
+
+static void nm_client_initable_iface_init (GInitableIface *iface);
+static void nm_client_async_initable_iface_init (GAsyncInitableIface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (NMClient, nm_client, G_TYPE_OBJECT,
+ G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, nm_client_initable_iface_init);
+ G_IMPLEMENT_INTERFACE (G_TYPE_ASYNC_INITABLE, nm_client_async_initable_iface_init);
+ )
+
+#define NM_CLIENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_CLIENT, NMClientPrivate))
+
+typedef struct {
+ NMManager *manager;
+ NMRemoteSettings *settings;
+} NMClientPrivate;
+
+enum {
+ PROP_0,
+ PROP_VERSION,
+ PROP_STATE,
+ PROP_STARTUP,
+ PROP_NM_RUNNING,
+ PROP_NETWORKING_ENABLED,
+ PROP_WIRELESS_ENABLED,
+ PROP_WIRELESS_HARDWARE_ENABLED,
+ PROP_WWAN_ENABLED,
+ PROP_WWAN_HARDWARE_ENABLED,
+ PROP_WIMAX_ENABLED,
+ PROP_WIMAX_HARDWARE_ENABLED,
+ PROP_ACTIVE_CONNECTIONS,
+ PROP_CONNECTIVITY,
+ PROP_PRIMARY_CONNECTION,
+ PROP_ACTIVATING_CONNECTION,
+ PROP_DEVICES,
+ PROP_CONNECTIONS,
+ PROP_HOSTNAME,
+ PROP_CAN_MODIFY,
+
+ LAST_PROP
+};
+
+enum {
+ DEVICE_ADDED,
+ DEVICE_REMOVED,
+ PERMISSION_CHANGED,
+ CONNECTION_ADDED,
+ CONNECTION_REMOVED,
+
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+/**********************************************************************/
+
+/**
+ * nm_client_error_quark:
+ *
+ * Registers an error quark for #NMClient if necessary.
+ *
+ * Returns: the error quark used for #NMClient errors.
+ **/
+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)
+{
+}
+
+static gboolean
+_nm_client_check_nm_running (NMClient *client, GError **error)
+{
+ if (nm_client_get_nm_running (client))
+ return TRUE;
+ else {
+ g_set_error_literal (error,
+ NM_CLIENT_ERROR,
+ NM_CLIENT_ERROR_MANAGER_NOT_RUNNING,
+ "NetworkManager is not running");
+ return FALSE;
+ }
+}
+
+/**
+ * nm_client_get_version:
+ * @client: a #NMClient
+ *
+ * Gets NetworkManager version.
+ *
+ * Returns: string with the version (or %NULL if NetworkManager is not running)
+ **/
+const char *
+nm_client_get_version (NMClient *client)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), NULL);
+
+ return nm_manager_get_version (NM_CLIENT_GET_PRIVATE (client)->manager);
+}
+
+/**
+ * nm_client_get_state:
+ * @client: a #NMClient
+ *
+ * Gets the current daemon state.
+ *
+ * Returns: the current %NMState
+ **/
+NMState
+nm_client_get_state (NMClient *client)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), NM_STATE_UNKNOWN);
+
+ return nm_manager_get_state (NM_CLIENT_GET_PRIVATE (client)->manager);
+}
+
+/**
+ * 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
+ **/
+gboolean
+nm_client_get_startup (NMClient *client)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), NM_STATE_UNKNOWN);
+
+ return nm_manager_get_startup (NM_CLIENT_GET_PRIVATE (client)->manager);
+}
+
+/**
+ * nm_client_get_nm_running:
+ * @client: a #NMClient
+ *
+ * Determines whether the daemon is running.
+ *
+ * Returns: %TRUE if the daemon is running
+ **/
+gboolean
+nm_client_get_nm_running (NMClient *client)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), FALSE);
+
+ return nm_manager_get_nm_running (NM_CLIENT_GET_PRIVATE (client)->manager);
+}
+
+/**
+ * nm_client_networking_get_enabled:
+ * @client: a #NMClient
+ *
+ * Whether networking is enabled or disabled.
+ *
+ * Returns: %TRUE if networking is enabled, %FALSE if networking is disabled
+ **/
+gboolean
+nm_client_networking_get_enabled (NMClient *client)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), FALSE);
+
+ return nm_manager_networking_get_enabled (NM_CLIENT_GET_PRIVATE (client)->manager);
+}
+
+/**
+ * nm_client_networking_set_enabled:
+ * @client: a #NMClient
+ * @enabled: %TRUE to set networking enabled, %FALSE to set networking disabled
+ * @error: (allow-none): return location for a #GError, or %NULL
+ *
+ * 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.
+ *
+ * Returns: %TRUE on success, %FALSE otherwise
+ **/
+gboolean
+nm_client_networking_set_enabled (NMClient *client, gboolean enable, GError **error)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), FALSE);
+
+ if (!_nm_client_check_nm_running (client, error))
+ return FALSE;
+
+ return nm_manager_networking_set_enabled (NM_CLIENT_GET_PRIVATE (client)->manager,
+ enable, error);
+}
+
+/**
+ * nm_client_wireless_get_enabled:
+ * @client: a #NMClient
+ *
+ * Determines whether the wireless is enabled.
+ *
+ * Returns: %TRUE if wireless is enabled
+ **/
+gboolean
+nm_client_wireless_get_enabled (NMClient *client)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), FALSE);
+
+ return nm_manager_wireless_get_enabled (NM_CLIENT_GET_PRIVATE (client)->manager);
+}
+
+/**
+ * nm_client_wireless_set_enabled:
+ * @client: a #NMClient
+ * @enabled: %TRUE to enable wireless
+ *
+ * Enables or disables wireless devices.
+ **/
+void
+nm_client_wireless_set_enabled (NMClient *client, gboolean enabled)
+{
+ g_return_if_fail (NM_IS_CLIENT (client));
+
+ if (!_nm_client_check_nm_running (client, NULL))
+ return;
+
+ nm_manager_wireless_set_enabled (NM_CLIENT_GET_PRIVATE (client)->manager, enabled);
+}
+
+/**
+ * nm_client_wireless_hardware_get_enabled:
+ * @client: a #NMClient
+ *
+ * Determines whether the wireless hardware is enabled.
+ *
+ * Returns: %TRUE if the wireless hardware is enabled
+ **/
+gboolean
+nm_client_wireless_hardware_get_enabled (NMClient *client)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), FALSE);
+
+ return nm_manager_wireless_hardware_get_enabled (NM_CLIENT_GET_PRIVATE (client)->manager);
+}
+
+/**
+ * nm_client_wwan_get_enabled:
+ * @client: a #NMClient
+ *
+ * Determines whether WWAN is enabled.
+ *
+ * Returns: %TRUE if WWAN is enabled
+ **/
+gboolean
+nm_client_wwan_get_enabled (NMClient *client)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), FALSE);
+
+ return nm_manager_wwan_get_enabled (NM_CLIENT_GET_PRIVATE (client)->manager);
+}
+
+/**
+ * nm_client_wwan_set_enabled:
+ * @client: a #NMClient
+ * @enabled: %TRUE to enable WWAN
+ *
+ * Enables or disables WWAN devices.
+ **/
+void
+nm_client_wwan_set_enabled (NMClient *client, gboolean enabled)
+{
+ g_return_if_fail (NM_IS_CLIENT (client));
+
+ if (!_nm_client_check_nm_running (client, NULL))
+ return;
+
+ nm_manager_wwan_set_enabled (NM_CLIENT_GET_PRIVATE (client)->manager, enabled);
+}
+
+/**
+ * nm_client_wwan_hardware_get_enabled:
+ * @client: a #NMClient
+ *
+ * Determines whether the WWAN hardware is enabled.
+ *
+ * Returns: %TRUE if the WWAN hardware is enabled
+ **/
+gboolean
+nm_client_wwan_hardware_get_enabled (NMClient *client)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), FALSE);
+
+ return nm_manager_wwan_hardware_get_enabled (NM_CLIENT_GET_PRIVATE (client)->manager);
+}
+
+/**
+ * nm_client_wimax_get_enabled:
+ * @client: a #NMClient
+ *
+ * Determines whether WiMAX is enabled.
+ *
+ * Returns: %TRUE if WiMAX is enabled
+ **/
+gboolean
+nm_client_wimax_get_enabled (NMClient *client)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), FALSE);
+
+ return nm_manager_wimax_get_enabled (NM_CLIENT_GET_PRIVATE (client)->manager);
+}
+
+/**
+ * nm_client_wimax_set_enabled:
+ * @client: a #NMClient
+ * @enabled: %TRUE to enable WiMAX
+ *
+ * Enables or disables WiMAX devices.
+ **/
+void
+nm_client_wimax_set_enabled (NMClient *client, gboolean enabled)
+{
+ g_return_if_fail (NM_IS_CLIENT (client));
+
+ if (!_nm_client_check_nm_running (client, NULL))
+ return;
+
+ nm_manager_wimax_set_enabled (NM_CLIENT_GET_PRIVATE (client)->manager, enabled);
+}
+
+/**
+ * nm_client_wimax_hardware_get_enabled:
+ * @client: a #NMClient
+ *
+ * Determines whether the WiMAX hardware is enabled.
+ *
+ * Returns: %TRUE if the WiMAX hardware is enabled
+ **/
+gboolean
+nm_client_wimax_hardware_get_enabled (NMClient *client)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), FALSE);
+
+ return nm_manager_wimax_hardware_get_enabled (NM_CLIENT_GET_PRIVATE (client)->manager);
+}
+
+/**
+ * nm_client_get_logging:
+ * @client: a #NMClient
+ * @level: (allow-none): return location for logging level string
+ * @domains: (allow-none): return location for log domains string. The string is
+ * a list of domains separated by ","
+ * @error: (allow-none): return location for a #GError, or %NULL
+ *
+ * Gets NetworkManager current logging level and domains.
+ *
+ * Returns: %TRUE on success, %FALSE otherwise
+ **/
+gboolean
+nm_client_get_logging (NMClient *client, char **level, char **domains, GError **error)
+{
+ 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 (!_nm_client_check_nm_running (client, error))
+ return FALSE;
+
+ return nm_manager_get_logging (NM_CLIENT_GET_PRIVATE (client)->manager,
+ level, domains, error);
+}
+
+/**
+ * nm_client_set_logging:
+ * @client: a #NMClient
+ * @level: (allow-none): logging level to set (%NULL or an empty string for no change)
+ * @domains: (allow-none): logging domains to set. The string should be a list of log
+ * domains separated by ",". (%NULL or an empty string for no change)
+ * @error: (allow-none): return location for a #GError, or %NULL
+ *
+ * Sets NetworkManager logging level and/or domains.
+ *
+ * Returns: %TRUE on success, %FALSE otherwise
+ **/
+gboolean
+nm_client_set_logging (NMClient *client, const char *level, const char *domains, GError **error)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), FALSE);
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ if (!_nm_client_check_nm_running (client, error))
+ return FALSE;
+
+ return nm_manager_set_logging (NM_CLIENT_GET_PRIVATE (client)->manager,
+ level, domains, error);
+}
+
+/**
+ * nm_client_get_permission_result:
+ * @client: a #NMClient
+ * @permission: the permission for which to return the result, one of #NMClientPermission
+ *
+ * Requests the result of a specific permission, which indicates whether the
+ * client can or cannot perform the action the permission represents
+ *
+ * Returns: the permission's result, one of #NMClientPermissionResult
+ **/
+NMClientPermissionResult
+nm_client_get_permission_result (NMClient *client, NMClientPermission permission)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), NM_CLIENT_PERMISSION_RESULT_UNKNOWN);
+
+ return nm_manager_get_permission_result (NM_CLIENT_GET_PRIVATE (client)->manager, permission);
+}
+
+/**
+ * nm_client_get_connectivity:
+ * @client: an #NMClient
+ *
+ * Gets the current network connectivity state. Contrast
+ * nm_client_check_connectivity() and
+ * nm_client_check_connectivity_async(), which re-check the
+ * connectivity state first before returning any information.
+ *
+ * Returns: the current connectivity state
+ */
+NMConnectivityState
+nm_client_get_connectivity (NMClient *client)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), NM_STATE_UNKNOWN);
+
+ return nm_manager_get_connectivity (NM_CLIENT_GET_PRIVATE (client)->manager);
+}
+
+/**
+ * nm_client_check_connectivity:
+ * @client: an #NMClient
+ * @cancellable: a #GCancellable
+ * @error: return location for a #GError
+ *
+ * Updates the network connectivity state and returns the (new)
+ * current state. Contrast nm_client_get_connectivity(), which returns
+ * the most recent known state without re-checking.
+ *
+ * This is a blocking call; use nm_client_check_connectivity_async()
+ * if you do not want to block.
+ *
+ * Returns: the (new) current connectivity state
+ */
+NMConnectivityState
+nm_client_check_connectivity (NMClient *client,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), NM_CONNECTIVITY_UNKNOWN);
+
+ if (!_nm_client_check_nm_running (client, error))
+ return NM_CONNECTIVITY_UNKNOWN;
+
+ return nm_manager_check_connectivity (NM_CLIENT_GET_PRIVATE (client)->manager,
+ cancellable, error);
+}
+
+static void
+check_connectivity_cb (GObject *object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *simple = user_data;
+ NMConnectivityState connectivity;
+ GError *error = NULL;
+
+ connectivity = nm_manager_check_connectivity_finish (NM_MANAGER (object),
+ result, &error);
+ if (!error)
+ g_simple_async_result_set_op_res_gssize (simple, connectivity);
+ else
+ g_simple_async_result_take_error (simple, error);
+
+ g_simple_async_result_complete (simple);
+ g_object_unref (simple);
+}
+
+/**
+ * nm_client_check_connectivity_async:
+ * @client: an #NMClient
+ * @cancellable: a #GCancellable
+ * @callback: callback to call with the result
+ * @user_data: data for @callback.
+ *
+ * Asynchronously updates the network connectivity state and invokes
+ * @callback when complete. Contrast nm_client_get_connectivity(),
+ * which (immediately) returns the most recent known state without
+ * re-checking, and nm_client_check_connectivity(), which blocks.
+ */
+void
+nm_client_check_connectivity_async (NMClient *client,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *simple;
+ GError *error = NULL;
+
+ g_return_if_fail (NM_IS_CLIENT (client));
+
+ if (!_nm_client_check_nm_running (client, &error)) {
+ g_simple_async_report_take_gerror_in_idle (G_OBJECT (client), callback, user_data, error);
+ return;
+ }
+
+ simple = g_simple_async_result_new (G_OBJECT (client), callback, user_data,
+ nm_client_check_connectivity_async);
+ nm_manager_check_connectivity_async (NM_CLIENT_GET_PRIVATE (client)->manager,
+ cancellable, check_connectivity_cb, simple);
+}
+
+/**
+ * nm_client_check_connectivity_finish:
+ * @client: an #NMClient
+ * @result: the #GAsyncResult
+ * @error: return location for a #GError
+ *
+ * Retrieves the result of an nm_client_check_connectivity_async()
+ * call.
+ *
+ * Returns: the (new) current connectivity state
+ */
+NMConnectivityState
+nm_client_check_connectivity_finish (NMClient *client,
+ GAsyncResult *result,
+ GError **error)
+{
+ GSimpleAsyncResult *simple;
+
+ g_return_val_if_fail (NM_IS_CLIENT (client), NM_CONNECTIVITY_UNKNOWN);
+ g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (result), NM_CONNECTIVITY_UNKNOWN);
+
+ simple = G_SIMPLE_ASYNC_RESULT (result);
+
+ if (g_simple_async_result_propagate_error (simple, error))
+ return NM_CONNECTIVITY_UNKNOWN;
+ return (NMConnectivityState) g_simple_async_result_get_op_res_gssize (simple);
+}
+
+
+/**
+ * nm_client_save_hostname:
+ * @client: the %NMClient
+ * @hostname: (allow-none): the new persistent hostname to set, or %NULL to
+ * clear any existing persistent hostname
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: return location for #GError
+ *
+ * Requests that the machine's persistent hostname be set to the specified value
+ * or cleared.
+ *
+ * Returns: %TRUE if the request was successful, %FALSE if it failed
+ **/
+gboolean
+nm_client_save_hostname (NMClient *client,
+ const char *hostname,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), FALSE);
+
+ return nm_remote_settings_save_hostname (NM_CLIENT_GET_PRIVATE (client)->settings,
+ hostname, cancellable, error);
+}
+
+static void
+save_hostname_cb (GObject *object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *simple = user_data;
+ GError *error = NULL;
+
+ if (nm_remote_settings_save_hostname_finish (NM_REMOTE_SETTINGS (object), result, &error))
+ g_simple_async_result_set_op_res_gboolean (simple, TRUE);
+ else
+ g_simple_async_result_take_error (simple, error);
+
+ g_simple_async_result_complete (simple);
+ g_object_unref (simple);
+}
+
+/**
+ * nm_client_save_hostname_async:
+ * @client: the %NMClient
+ * @hostname: (allow-none): the new persistent hostname to set, or %NULL to
+ * clear any existing persistent hostname
+ * @cancellable: a #GCancellable, or %NULL
+ * @callback: (scope async): callback to be called when the operation completes
+ * @user_data: (closure): caller-specific data passed to @callback
+ *
+ * Requests that the machine's persistent hostname be set to the specified value
+ * or cleared.
+ **/
+void
+nm_client_save_hostname_async (NMClient *client,
+ const char *hostname,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *simple;
+ GError *error = NULL;
+
+ g_return_if_fail (NM_IS_CLIENT (client));
+
+ if (!_nm_client_check_nm_running (client, &error)) {
+ g_simple_async_report_take_gerror_in_idle (G_OBJECT (client), callback, user_data, error);
+ return;
+ }
+
+ simple = g_simple_async_result_new (G_OBJECT (client), callback, user_data,
+ nm_client_save_hostname_async);
+ nm_remote_settings_save_hostname_async (NM_CLIENT_GET_PRIVATE (client)->settings,
+ hostname,
+ cancellable, save_hostname_cb, simple);
+}
+
+/**
+ * nm_client_save_hostname_finish:
+ * @client: the %NMClient
+ * @result: the result passed to the #GAsyncReadyCallback
+ * @error: return location for #GError
+ *
+ * Gets the result of an nm_client_save_hostname_async() call.
+ *
+ * Returns: %TRUE if the request was successful, %FALSE if it failed
+ **/
+gboolean
+nm_client_save_hostname_finish (NMClient *client,
+ GAsyncResult *result,
+ GError **error)
+{
+ GSimpleAsyncResult *simple;
+
+ g_return_val_if_fail (NM_IS_CLIENT (client), FALSE);
+ g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (result), FALSE);
+
+ simple = G_SIMPLE_ASYNC_RESULT (result);
+ if (g_simple_async_result_propagate_error (simple, error))
+ return FALSE;
+ else
+ return g_simple_async_result_get_op_res_gboolean (simple);
+}
+
+/****************************************************************/
+/* Devices */
+/****************************************************************/
+
+/**
+ * nm_client_get_devices:
+ * @client: a #NMClient
+ *
+ * Gets all the known network devices. Use nm_device_get_type() or the
+ * <literal>NM_IS_DEVICE_XXXX</literal> functions to determine what kind of
+ * device member of the returned array is, and then you may use device-specific
+ * methods such as nm_device_ethernet_get_hw_address().
+ *
+ * Returns: (transfer none) (element-type NMDevice): a #GPtrArray
+ * containing all the #NMDevices. The returned array is owned by the
+ * #NMClient object and should not be modified.
+ **/
+const GPtrArray *
+nm_client_get_devices (NMClient *client)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), NULL);
+
+ return nm_manager_get_devices (NM_CLIENT_GET_PRIVATE (client)->manager);
+}
+
+/**
+ * nm_client_get_device_by_path:
+ * @client: a #NMClient
+ * @object_path: the object path to search for
+ *
+ * Gets a #NMDevice from a #NMClient.
+ *
+ * Returns: (transfer none): the #NMDevice for the given @object_path or %NULL if none is found.
+ **/
+NMDevice *
+nm_client_get_device_by_path (NMClient *client, const char *object_path)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), NULL);
+ g_return_val_if_fail (object_path, NULL);
+
+ return nm_manager_get_device_by_path (NM_CLIENT_GET_PRIVATE (client)->manager, object_path);
+}
+
+/**
+ * nm_client_get_device_by_iface:
+ * @client: a #NMClient
+ * @iface: the interface name to search for
+ *
+ * Gets a #NMDevice from a #NMClient.
+ *
+ * Returns: (transfer none): the #NMDevice for the given @iface or %NULL if none is found.
+ **/
+NMDevice *
+nm_client_get_device_by_iface (NMClient *client, const char *iface)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), NULL);
+ g_return_val_if_fail (iface, NULL);
+
+ return nm_manager_get_device_by_iface (NM_CLIENT_GET_PRIVATE (client)->manager, iface);
+}
+
+/****************************************************************/
+/* Active Connections */
+/****************************************************************/
+
+/**
+ * nm_client_get_active_connections:
+ * @client: a #NMClient
+ *
+ * Gets the active connections.
+ *
+ * Returns: (transfer none) (element-type NMActiveConnection): a #GPtrArray
+ * containing all the active #NMActiveConnections.
+ * The returned array is owned by the client and should not be modified.
+ **/
+const GPtrArray *
+nm_client_get_active_connections (NMClient *client)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), NULL);
+
+ return nm_manager_get_active_connections (NM_CLIENT_GET_PRIVATE (client)->manager);
+}
+
+/**
+ * nm_client_get_primary_connection:
+ * @client: an #NMClient
+ *
+ * Gets the #NMActiveConnection corresponding to the primary active
+ * network device.
+ *
+ * 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.
+ *
+ * If there is no default route, or the default route is over a
+ * non-NetworkManager-recognized device, this will return %NULL.
+ *
+ * Returns: (transfer none): the appropriate #NMActiveConnection, if
+ * any
+ */
+NMActiveConnection *
+nm_client_get_primary_connection (NMClient *client)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), NULL);
+
+ return nm_manager_get_primary_connection (NM_CLIENT_GET_PRIVATE (client)->manager);
+}
+
+/**
+ * nm_client_get_activating_connection:
+ * @client: an #NMClient
+ *
+ * Gets the #NMActiveConnection corresponding to a
+ * currently-activating connection that is expected to become the new
+ * #NMClient:primary-connection upon successful activation.
+ *
+ * Returns: (transfer none): the appropriate #NMActiveConnection, if
+ * any.
+ */
+NMActiveConnection *
+nm_client_get_activating_connection (NMClient *client)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), NULL);
+
+ return nm_manager_get_activating_connection (NM_CLIENT_GET_PRIVATE (client)->manager);
+}
+
+static void
+activate_cb (GObject *object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *simple = user_data;
+ NMActiveConnection *ac;
+ GError *error = NULL;
+
+ ac = nm_manager_activate_connection_finish (NM_MANAGER (object), result, &error);
+ if (ac)
+ g_simple_async_result_set_op_res_gpointer (simple, ac, g_object_unref);
+ else
+ g_simple_async_result_take_error (simple, error);
+
+ g_simple_async_result_complete (simple);
+ g_object_unref (simple);
+}
+
+/**
+ * nm_client_activate_connection_async:
+ * @client: a #NMClient
+ * @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 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.
+ * @cancellable: a #GCancellable, or %NULL
+ * @callback: callback to be called when the activation has started
+ * @user_data: caller-specific data passed to @callback
+ *
+ * Asynchronously 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 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.
+ *
+ * Note that the callback is invoked when NetworkManager has started activating
+ * the new connection, not when it finishes. You can used the returned
+ * #NMActiveConnection object (in particular, #NMActiveConnection:state) to
+ * track the activation to its completion.
+ **/
+void
+nm_client_activate_connection_async (NMClient *client,
+ NMConnection *connection,
+ NMDevice *device,
+ const char *specific_object,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *simple;
+ GError *error = NULL;
+
+ g_return_if_fail (NM_IS_CLIENT (client));
+ if (device)
+ g_return_if_fail (NM_IS_DEVICE (device));
+ if (connection)
+ g_return_if_fail (NM_IS_CONNECTION (connection));
+
+ if (!_nm_client_check_nm_running (client, &error)) {
+ g_simple_async_report_take_gerror_in_idle (G_OBJECT (client), callback, user_data, error);
+ return;
+ }
+
+ simple = g_simple_async_result_new (G_OBJECT (client), callback, user_data,
+ nm_client_activate_connection_async);
+ nm_manager_activate_connection_async (NM_CLIENT_GET_PRIVATE (client)->manager,
+ connection, device, specific_object,
+ cancellable, activate_cb, simple);
+}
+
+/**
+ * nm_client_activate_connection_finish:
+ * @client: an #NMClient
+ * @result: the result passed to the #GAsyncReadyCallback
+ * @error: location for a #GError, or %NULL
+ *
+ * Gets the result of a call to nm_client_activate_connection_async().
+ *
+ * Returns: (transfer full): the new #NMActiveConnection on success, %NULL on
+ * failure, in which case @error will be set.
+ **/
+NMActiveConnection *
+nm_client_activate_connection_finish (NMClient *client,
+ GAsyncResult *result,
+ GError **error)
+{
+ GSimpleAsyncResult *simple;
+
+ g_return_val_if_fail (NM_IS_CLIENT (client), NULL);
+ g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (result), NULL);
+
+ simple = G_SIMPLE_ASYNC_RESULT (result);
+ if (g_simple_async_result_propagate_error (simple, error))
+ return NULL;
+ else
+ return g_object_ref (g_simple_async_result_get_op_res_gpointer (simple));
+}
+
+static void
+add_activate_cb (GObject *object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *simple = user_data;
+ NMActiveConnection *ac;
+ GError *error = NULL;
+
+ ac = nm_manager_add_and_activate_connection_finish (NM_MANAGER (object), result, &error);
+ if (ac)
+ g_simple_async_result_set_op_res_gpointer (simple, ac, g_object_unref);
+ else
+ g_simple_async_result_take_error (simple, error);
+
+ g_simple_async_result_complete (simple);
+ g_object_unref (simple);
+}
+
+/**
+ * nm_client_add_and_activate_connection_async:
+ * @client: a #NMClient
+ * @partial: (allow-none): an #NMConnection to add; the connection may be
+ * partially filled (or even %NULL) and will be completed by NetworkManager
+ * using the given @device and @specific_object before being added
+ * @device: 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 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.
+ * @cancellable: a #GCancellable, or %NULL
+ * @callback: callback to be called when the activation has started
+ * @user_data: caller-specific data passed to @callback
+ *
+ * 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 asynchronously
+ * activated as with nm_client_activate_connection_async(). Cannot be used for
+ * VPN connections at this time.
+ *
+ * Note that the callback is invoked when NetworkManager has started activating
+ * the new connection, not when it finishes. You can used the returned
+ * #NMActiveConnection object (in particular, #NMActiveConnection:state) to
+ * track the activation to its completion.
+ **/
+void
+nm_client_add_and_activate_connection_async (NMClient *client,
+ NMConnection *partial,
+ NMDevice *device,
+ const char *specific_object,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *simple;
+ GError *error = NULL;
+
+ g_return_if_fail (NM_IS_CLIENT (client));
+ g_return_if_fail (NM_IS_DEVICE (device));
+ if (partial)
+ g_return_if_fail (NM_IS_CONNECTION (partial));
+
+ if (!_nm_client_check_nm_running (client, &error)) {
+ g_simple_async_report_take_gerror_in_idle (G_OBJECT (client), callback, user_data, error);
+ return;
+ }
+
+ simple = g_simple_async_result_new (G_OBJECT (client), callback, user_data,
+ nm_client_add_and_activate_connection_async);
+ nm_manager_add_and_activate_connection_async (NM_CLIENT_GET_PRIVATE (client)->manager,
+ partial, device, specific_object,
+ cancellable, add_activate_cb, simple);
+}
+
+/**
+ * nm_client_add_and_activate_connection_finish:
+ * @client: an #NMClient
+ * @result: the result passed to the #GAsyncReadyCallback
+ * @error: location for a #GError, or %NULL
+ *
+ * Gets the result of a call to nm_client_add_and_activate_connection_async().
+ *
+ * You can call nm_active_connection_get_connection() on the returned
+ * #NMActiveConnection to find the path of the created #NMConnection.
+ *
+ * Returns: (transfer full): the new #NMActiveConnection on success, %NULL on
+ * failure, in which case @error will be set.
+ **/
+NMActiveConnection *
+nm_client_add_and_activate_connection_finish (NMClient *client,
+ GAsyncResult *result,
+ GError **error)
+{
+ GSimpleAsyncResult *simple;
+
+ g_return_val_if_fail (NM_IS_CLIENT (client), NULL);
+ g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (result), NULL);
+
+ simple = G_SIMPLE_ASYNC_RESULT (result);
+ if (g_simple_async_result_propagate_error (simple, error))
+ return NULL;
+ else
+ return g_object_ref (g_simple_async_result_get_op_res_gpointer (simple));
+}
+
+/**
+ * nm_client_deactivate_connection:
+ * @client: a #NMClient
+ * @active: the #NMActiveConnection to deactivate
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: location for a #GError, or %NULL
+ *
+ * Deactivates an active #NMActiveConnection.
+ *
+ * Returns: success or failure
+ **/
+gboolean
+nm_client_deactivate_connection (NMClient *client,
+ NMActiveConnection *active,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), FALSE);
+ g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (active), FALSE);
+
+ if (!_nm_client_check_nm_running (client, NULL))
+ return TRUE;
+
+ return nm_manager_deactivate_connection (NM_CLIENT_GET_PRIVATE (client)->manager,
+ active, cancellable, error);
+}
+
+static void
+deactivated_cb (GObject *object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *simple = user_data;
+ GError *error = NULL;
+
+ if (nm_manager_deactivate_connection_finish (NM_MANAGER (object), result, &error))
+ g_simple_async_result_set_op_res_gboolean (simple, TRUE);
+ else
+ g_simple_async_result_take_error (simple, error);
+ g_simple_async_result_complete (simple);
+ g_object_unref (simple);
+}
+
+/**
+ * nm_client_deactivate_connection_async:
+ * @client: a #NMClient
+ * @active: the #NMActiveConnection to deactivate
+ * @cancellable: a #GCancellable, or %NULL
+ * @callback: callback to be called when the deactivation has completed
+ * @user_data: caller-specific data passed to @callback
+ *
+ * Asynchronously deactivates an active #NMActiveConnection.
+ **/
+void
+nm_client_deactivate_connection_async (NMClient *client,
+ NMActiveConnection *active,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *simple;
+
+ g_return_if_fail (NM_IS_CLIENT (client));
+ g_return_if_fail (NM_IS_ACTIVE_CONNECTION (active));
+
+ simple = g_simple_async_result_new (G_OBJECT (client), callback, user_data,
+ nm_client_deactivate_connection_async);
+
+ if (!_nm_client_check_nm_running (client, NULL)) {
+ g_simple_async_result_set_op_res_gboolean (simple, TRUE);
+ g_simple_async_result_complete_in_idle (simple);
+ g_object_unref (simple);
+ return;
+ }
+
+ nm_manager_deactivate_connection_async (NM_CLIENT_GET_PRIVATE (client)->manager,
+ active,
+ cancellable, deactivated_cb, simple);
+}
+
+/**
+ * nm_client_deactivate_connection_finish:
+ * @client: a #NMClient
+ * @result: the result passed to the #GAsyncReadyCallback
+ * @error: location for a #GError, or %NULL
+ *
+ * Gets the result of a call to nm_client_deactivate_connection_async().
+ *
+ * Returns: success or failure
+ **/
+gboolean
+nm_client_deactivate_connection_finish (NMClient *client,
+ GAsyncResult *result,
+ GError **error)
+{
+ GSimpleAsyncResult *simple;
+
+ g_return_val_if_fail (NM_IS_CLIENT (client), FALSE);
+ g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (result), FALSE);
+
+ simple = G_SIMPLE_ASYNC_RESULT (result);
+ if (g_simple_async_result_propagate_error (simple, error))
+ return FALSE;
+ else
+ return g_simple_async_result_get_op_res_gboolean (simple);
+}
+
+/****************************************************************/
+/* Connections */
+/****************************************************************/
+
+/**
+ * nm_client_get_connections:
+ * @client: the %NMClient
+ *
+ * Returns: (transfer none) (element-type NMRemoteConnection): an array
+ * containing all connections provided by the remote settings service. The
+ * returned array is owned by the #NMClient object and should not be modified.
+ **/
+const GPtrArray *
+nm_client_get_connections (NMClient *client)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), NULL);
+
+ return nm_remote_settings_get_connections (NM_CLIENT_GET_PRIVATE (client)->settings);
+}
+
+/**
+ * nm_client_get_connection_by_id:
+ * @client: the %NMClient
+ * @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.
+ **/
+NMRemoteConnection *
+nm_client_get_connection_by_id (NMClient *client, const char *id)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), NULL);
+ g_return_val_if_fail (id != NULL, NULL);
+
+ return nm_remote_settings_get_connection_by_id (NM_CLIENT_GET_PRIVATE (client)->settings, id);
+}
+
+/**
+ * nm_client_get_connection_by_path:
+ * @client: the %NMClient
+ * @path: the D-Bus object path of the remote connection
+ *
+ * Returns the %NMRemoteConnection representing the connection at @path.
+ *
+ * Returns: (transfer none): the remote connection object on success, or %NULL if the object was
+ * not known
+ **/
+NMRemoteConnection *
+nm_client_get_connection_by_path (NMClient *client, const char *path)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), NULL);
+ g_return_val_if_fail (path != NULL, NULL);
+
+ return nm_remote_settings_get_connection_by_path (NM_CLIENT_GET_PRIVATE (client)->settings, path);
+}
+
+/**
+ * nm_client_get_connection_by_uuid:
+ * @client: the %NMClient
+ * @uuid: the UUID of the remote connection
+ *
+ * Returns the %NMRemoteConnection identified by @uuid.
+ *
+ * Returns: (transfer none): the remote connection object on success, or %NULL if the object was
+ * not known
+ **/
+NMRemoteConnection *
+nm_client_get_connection_by_uuid (NMClient *client, const char *uuid)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), NULL);
+ g_return_val_if_fail (uuid != NULL, NULL);
+
+ return nm_remote_settings_get_connection_by_uuid (NM_CLIENT_GET_PRIVATE (client)->settings, uuid);
+}
+
+static void
+add_connection_cb (GObject *object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *simple = user_data;
+ NMRemoteConnection *conn;
+ GError *error = NULL;
+
+ conn = nm_remote_settings_add_connection_finish (NM_REMOTE_SETTINGS (object), result, &error);
+ if (conn)
+ g_simple_async_result_set_op_res_gpointer (simple, conn, g_object_unref);
+ else
+ g_simple_async_result_take_error (simple, error);
+
+ g_simple_async_result_complete (simple);
+ g_object_unref (simple);
+}
+
+/**
+ * nm_client_add_connection_async:
+ * @client: the %NMClient
+ * @connection: the connection to add. Note that this object's settings will be
+ * added, not the object itself
+ * @save_to_disk: whether to immediately save the connection to disk
+ * @cancellable: a #GCancellable, or %NULL
+ * @callback: (scope async): callback to be called when the add operation completes
+ * @user_data: (closure): caller-specific data passed to @callback
+ *
+ * Requests that the remote settings service add the given settings to a new
+ * connection. If @save_to_disk is %TRUE, the connection is immediately written
+ * to disk; otherwise it is initially only stored in memory, but may be saved
+ * later by calling the connection's nm_remote_connection_commit_changes()
+ * method.
+ *
+ * @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.
+ **/
+void
+nm_client_add_connection_async (NMClient *client,
+ NMConnection *connection,
+ gboolean save_to_disk,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *simple;
+ GError *error = NULL;
+
+ g_return_if_fail (NM_IS_CLIENT (client));
+ g_return_if_fail (NM_IS_CONNECTION (connection));
+
+ if (!_nm_client_check_nm_running (client, &error)) {
+ g_simple_async_report_take_gerror_in_idle (G_OBJECT (client), callback, user_data, error);
+ return;
+ }
+
+ simple = g_simple_async_result_new (G_OBJECT (client), callback, user_data,
+ nm_client_deactivate_connection_async);
+ nm_remote_settings_add_connection_async (NM_CLIENT_GET_PRIVATE (client)->settings,
+ connection, save_to_disk,
+ cancellable, add_connection_cb, simple);
+}
+
+/**
+ * nm_client_add_connection_finish:
+ * @client: an #NMClient
+ * @result: the result passed to the #GAsyncReadyCallback
+ * @error: location for a #GError, or %NULL
+ *
+ * Gets the result of a call to nm_client_add_connection_async().
+ *
+ * Returns: (transfer full): the new #NMRemoteConnection on success, %NULL on
+ * failure, in which case @error will be set.
+ **/
+NMRemoteConnection *
+nm_client_add_connection_finish (NMClient *client,
+ GAsyncResult *result,
+ GError **error)
+{
+ GSimpleAsyncResult *simple;
+
+ g_return_val_if_fail (NM_IS_CLIENT (client), NULL);
+ g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (result), NULL);
+
+ simple = G_SIMPLE_ASYNC_RESULT (result);
+ if (g_simple_async_result_propagate_error (simple, error))
+ return NULL;
+ else
+ return g_object_ref (g_simple_async_result_get_op_res_gpointer (simple));
+}
+
+/**
+ * nm_client_load_connections:
+ * @client: the %NMClient
+ * @filenames: %NULL-terminated array of filenames to load
+ * @failures: (out) (transfer full): on return, a %NULL-terminated array of
+ * filenames that failed to load
+ * @cancellable: a #GCancellable, or %NULL
+ * @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
+ * @client'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).
+ **/
+gboolean
+nm_client_load_connections (NMClient *client,
+ char **filenames,
+ char ***failures,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), FALSE);
+ g_return_val_if_fail (filenames != NULL, FALSE);
+
+ if (!_nm_client_check_nm_running (client, error))
+ return FALSE;
+
+ return nm_remote_settings_load_connections (NM_CLIENT_GET_PRIVATE (client)->settings,
+ filenames, failures,
+ cancellable, error);
+}
+
+static void
+load_connections_cb (GObject *object, GAsyncResult *result, gpointer user_data)
+{
+ GSimpleAsyncResult *simple = user_data;
+ GError *error = NULL;
+ char **failures = NULL;
+
+ if (nm_remote_settings_load_connections_finish (NM_REMOTE_SETTINGS (object),
+ &failures, result, &error))
+ g_simple_async_result_set_op_res_gpointer (simple, failures, (GDestroyNotify) g_strfreev);
+ else
+ g_simple_async_result_take_error (simple, error);
+
+ g_simple_async_result_complete (simple);
+ g_object_unref (simple);
+}
+
+/**
+ * nm_client_load_connections_async:
+ * @client: the %NMClient
+ * @filenames: %NULL-terminated array of filenames to load
+ * @cancellable: a #GCancellable, or %NULL
+ * @callback: (scope async): callback to be called when the operation completes
+ * @user_data: (closure): caller-specific data passed to @callback
+ *
+ * Requests that the remote settings service asynchronously load or reload the
+ * given files, adding or updating the connections described within.
+ *
+ * See nm_client_load_connections() for more details.
+ **/
+void
+nm_client_load_connections_async (NMClient *client,
+ char **filenames,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *simple;
+ GError *error = NULL;
+
+ g_return_if_fail (NM_IS_CLIENT (client));
+ g_return_if_fail (filenames != NULL);
+
+ if (!_nm_client_check_nm_running (client, &error)) {
+ g_simple_async_report_take_gerror_in_idle (G_OBJECT (client), callback, user_data, error);
+ return;
+ }
+
+ simple = g_simple_async_result_new (G_OBJECT (client), callback, user_data,
+ nm_client_load_connections_async);
+ nm_remote_settings_load_connections_async (NM_CLIENT_GET_PRIVATE (client)->settings,
+ filenames,
+ cancellable, load_connections_cb, simple);
+}
+
+/**
+ * nm_client_load_connections_finish:
+ * @client: the %NMClient
+ * @failures: (out) (transfer full): on return, a %NULL-terminated array of
+ * filenames that failed to load
+ * @result: the result passed to the #GAsyncReadyCallback
+ * @error: location for a #GError, or %NULL
+ *
+ * Gets the result of an nm_client_load_connections_async() call.
+
+ * See nm_client_load_connections() for more details.
+ *
+ * Returns: %TRUE if NetworkManager at least tried to load @filenames,
+ * %FALSE if an error occurred (eg, permission denied).
+ **/
+gboolean
+nm_client_load_connections_finish (NMClient *client,
+ char ***failures,
+ GAsyncResult *result,
+ GError **error)
+{
+ GSimpleAsyncResult *simple;
+
+ g_return_val_if_fail (NM_IS_CLIENT (client), FALSE);
+ g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (result), FALSE);
+
+ simple = G_SIMPLE_ASYNC_RESULT (result);
+ if (g_simple_async_result_propagate_error (simple, error))
+ return FALSE;
+ else {
+ if (failures)
+ *failures = g_strdupv (g_simple_async_result_get_op_res_gpointer (simple));
+ return TRUE;
+ }
+}
+
+/**
+ * nm_client_reload_connections:
+ * @client: the #NMClient
+ * @cancellable: a #GCancellable, or %NULL
+ * @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
+ **/
+gboolean
+nm_client_reload_connections (NMClient *client,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), FALSE);
+
+ if (!_nm_client_check_nm_running (client, error))
+ return FALSE;
+
+ return nm_remote_settings_reload_connections (NM_CLIENT_GET_PRIVATE (client)->settings,
+ cancellable, error);
+}
+
+static void
+reload_connections_cb (GObject *object, GAsyncResult *result, gpointer user_data)
+{
+ GSimpleAsyncResult *simple = user_data;
+ GError *error = NULL;
+
+ if (nm_remote_settings_reload_connections_finish (NM_REMOTE_SETTINGS (object),
+ result, &error))
+ g_simple_async_result_set_op_res_gboolean (simple, TRUE);
+ else
+ g_simple_async_result_take_error (simple, error);
+
+ g_simple_async_result_complete (simple);
+ g_object_unref (simple);
+}
+
+/**
+ * nm_client_reload_connections_async:
+ * @client: the #NMClient
+ * @cancellable: a #GCancellable, or %NULL
+ * @callback: (scope async): callback to be called when the reload operation completes
+ * @user_data: (closure): caller-specific data passed to @callback
+ *
+ * Requests that the remote settings service begin reloading all connection
+ * files from disk, adding, updating, and removing connections until the
+ * in-memory state matches the on-disk state.
+ **/
+void
+nm_client_reload_connections_async (NMClient *client,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *simple;
+ GError *error = NULL;
+
+ g_return_if_fail (NM_IS_CLIENT (client));
+
+ if (!_nm_client_check_nm_running (client, &error)) {
+ g_simple_async_report_take_gerror_in_idle (G_OBJECT (client), callback, user_data, error);
+ return;
+ }
+
+ simple = g_simple_async_result_new (G_OBJECT (client), callback, user_data,
+ nm_client_reload_connections_async);
+ nm_remote_settings_reload_connections_async (NM_CLIENT_GET_PRIVATE (client)->settings,
+ cancellable, reload_connections_cb, simple);
+}
+
+/**
+ * nm_client_reload_connections_finish:
+ * @client: the #NMClient
+ * @result: the result passed to the #GAsyncReadyCallback
+ * @error: return location for #GError
+ *
+ * Gets the result of an nm_client_reload_connections_async() call.
+ *
+ * Return value: %TRUE on success, %FALSE on failure
+ **/
+gboolean
+nm_client_reload_connections_finish (NMClient *client,
+ GAsyncResult *result,
+ GError **error)
+{
+ GSimpleAsyncResult *simple;
+
+ g_return_val_if_fail (NM_IS_CLIENT (client), FALSE);
+ g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (result), FALSE);
+
+ simple = G_SIMPLE_ASYNC_RESULT (result);
+ if (g_simple_async_result_propagate_error (simple, error))
+ return FALSE;
+ else
+ return g_simple_async_result_get_op_res_gboolean (simple);
+}
+
+/****************************************************************/
+
+/**
+ * nm_client_new:
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: location for a #GError, or %NULL
+ *
+ * Creates a new #NMClient.
+ *
+ * Note that this will do blocking D-Bus calls to initialize the
+ * client. You can use nm_client_new_async() if you want to avoid
+ * that.
+ *
+ * Returns: a new #NMClient or NULL on an error
+ **/
+NMClient *
+nm_client_new (GCancellable *cancellable,
+ GError **error)
+{
+ return g_initable_new (NM_TYPE_CLIENT, cancellable, error,
+ NULL);
+}
+
+static void
+client_inited (GObject *source, GAsyncResult *result, gpointer user_data)
+{
+ GSimpleAsyncResult *simple = user_data;
+ GError *error = NULL;
+
+ if (!g_async_initable_new_finish (G_ASYNC_INITABLE (source), result, &error))
+ g_simple_async_result_take_error (simple, error);
+ else
+ g_simple_async_result_set_op_res_gpointer (simple, source, g_object_unref);
+ g_simple_async_result_complete (simple);
+ g_object_unref (simple);
+}
+
+/**
+ * nm_client_new_async:
+ * @cancellable: a #GCancellable, or %NULL
+ * @callback: callback to call when the client is created
+ * @user_data: data for @callback
+ *
+ * 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. Note that on an error,
+ * the callback can be invoked with two first parameters as NULL.
+ **/
+void
+nm_client_new_async (GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *simple;
+
+ simple = g_simple_async_result_new (NULL, callback, user_data, nm_client_new_async);
+
+ g_async_initable_new_async (NM_TYPE_CLIENT, G_PRIORITY_DEFAULT,
+ cancellable, client_inited, simple,
+ NULL);
+}
+
+/**
+ * nm_client_new_finish:
+ * @result: a #GAsyncResult
+ * @error: location for a #GError, or %NULL
+ *
+ * Gets the result of an nm_client_new_async() call.
+ *
+ * Returns: a new #NMClient, or %NULL on error
+ **/
+NMClient *
+nm_client_new_finish (GAsyncResult *result, GError **error)
+{
+ GSimpleAsyncResult *simple;
+
+ g_return_val_if_fail (g_simple_async_result_is_valid (result, NULL, nm_client_new_async), NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ simple = G_SIMPLE_ASYNC_RESULT (result);
+ if (g_simple_async_result_propagate_error (simple, error))
+ return NULL;
+ else
+ return g_object_ref (g_simple_async_result_get_op_res_gpointer (simple));
+}
+
+static void
+subobject_notify (GObject *object,
+ GParamSpec *pspec,
+ gpointer client)
+{
+ if (!g_str_has_suffix (pspec->name, "-internal"))
+ g_object_notify (client, pspec->name);
+}
+
+static void
+manager_device_added (NMManager *manager,
+ NMDevice *device,
+ gpointer client)
+{
+ g_signal_emit (client, signals[DEVICE_ADDED], 0, device);
+}
+static void
+manager_device_removed (NMManager *manager,
+ NMDevice *device,
+ gpointer client)
+{
+ g_signal_emit (client, signals[DEVICE_REMOVED], 0, device);
+}
+
+static void
+manager_permission_changed (NMManager *manager,
+ NMClientPermission permission,
+ NMClientPermissionResult result,
+ gpointer client)
+{
+ g_signal_emit (client, signals[PERMISSION_CHANGED], 0, permission, result);
+}
+
+static void
+settings_connection_added (NMRemoteSettings *manager,
+ NMRemoteConnection *connection,
+ gpointer client)
+{
+ g_signal_emit (client, signals[CONNECTION_ADDED], 0, connection);
+}
+static void
+settings_connection_removed (NMRemoteSettings *manager,
+ NMRemoteConnection *connection,
+ gpointer client)
+{
+ g_signal_emit (client, signals[CONNECTION_REMOVED], 0, connection);
+}
+
+static void
+constructed (GObject *object)
+{
+ NMClient *client = NM_CLIENT (object);
+ NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (client);
+
+ priv->manager = g_object_new (NM_TYPE_MANAGER,
+ NM_OBJECT_PATH, NM_DBUS_PATH,
+ NULL);
+ g_signal_connect (priv->manager, "notify",
+ G_CALLBACK (subobject_notify), client);
+ g_signal_connect (priv->manager, "device-added",
+ G_CALLBACK (manager_device_added), client);
+ g_signal_connect (priv->manager, "device-removed",
+ G_CALLBACK (manager_device_removed), client);
+ g_signal_connect (priv->manager, "permission-changed",
+ G_CALLBACK (manager_permission_changed), client);
+
+ priv->settings = g_object_new (NM_TYPE_REMOTE_SETTINGS,
+ NM_OBJECT_PATH, NM_DBUS_PATH_SETTINGS,
+ NULL);
+ g_signal_connect (priv->settings, "notify",
+ G_CALLBACK (subobject_notify), client);
+ g_signal_connect (priv->settings, "connection-added",
+ G_CALLBACK (settings_connection_added), client);
+ g_signal_connect (priv->settings, "connection-removed",
+ G_CALLBACK (settings_connection_removed), client);
+
+ G_OBJECT_CLASS (nm_client_parent_class)->constructed (object);
+}
+
+static gboolean
+init_sync (GInitable *initable, GCancellable *cancellable, GError **error)
+{
+ NMClient *client = NM_CLIENT (initable);
+ NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (client);
+
+ if (!g_initable_init (G_INITABLE (priv->manager), cancellable, error))
+ return FALSE;
+ if (!g_initable_init (G_INITABLE (priv->settings), cancellable, error))
+ return FALSE;
+
+ return TRUE;
+}
+
+typedef struct {
+ NMClient *client;
+ GCancellable *cancellable;
+ GSimpleAsyncResult *result;
+ gboolean manager_inited;
+ gboolean settings_inited;
+} NMClientInitData;
+
+static void
+init_async_complete (NMClientInitData *init_data)
+{
+ g_simple_async_result_complete (init_data->result);
+ g_object_unref (init_data->result);
+ g_clear_object (&init_data->cancellable);
+ g_slice_free (NMClientInitData, init_data);
+}
+
+static void
+init_async_inited_manager (GObject *object, GAsyncResult *result, gpointer user_data)
+{
+ NMClientInitData *init_data = user_data;
+ GError *error = NULL;
+
+ if (!g_async_initable_init_finish (G_ASYNC_INITABLE (object), result, &error))
+ g_simple_async_result_take_error (init_data->result, error);
+
+ init_data->manager_inited = TRUE;
+ if (init_data->settings_inited)
+ init_async_complete (init_data);
+}
+
+static void
+init_async_inited_settings (GObject *object, GAsyncResult *result, gpointer user_data)
+{
+ NMClientInitData *init_data = user_data;
+ GError *error = NULL;
+
+ if (!g_async_initable_init_finish (G_ASYNC_INITABLE (object), result, &error))
+ g_simple_async_result_take_error (init_data->result, error);
+
+ init_data->settings_inited = TRUE;
+ if (init_data->manager_inited)
+ init_async_complete (init_data);
+}
+
+static void
+init_async (GAsyncInitable *initable, int io_priority,
+ GCancellable *cancellable, GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (initable);
+ NMClientInitData *init_data;
+
+ init_data = g_slice_new0 (NMClientInitData);
+ init_data->client = NM_CLIENT (initable);
+ init_data->cancellable = cancellable ? g_object_ref (cancellable) : NULL;
+ init_data->result = g_simple_async_result_new (G_OBJECT (initable), callback,
+ user_data, init_async);
+ g_simple_async_result_set_op_res_gboolean (init_data->result, TRUE);
+
+ g_async_initable_init_async (G_ASYNC_INITABLE (priv->manager),
+ G_PRIORITY_DEFAULT, init_data->cancellable,
+ init_async_inited_manager, init_data);
+ g_async_initable_init_async (G_ASYNC_INITABLE (priv->settings),
+ G_PRIORITY_DEFAULT, init_data->cancellable,
+ init_async_inited_settings, init_data);
+}
+
+static gboolean
+init_finish (GAsyncInitable *initable, GAsyncResult *result, GError **error)
+{
+ GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
+
+ if (g_simple_async_result_propagate_error (simple, error))
+ return FALSE;
+ else
+ return TRUE;
+}
+
+static void
+dispose (GObject *object)
+{
+ NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (object);
+
+ if (priv->manager) {
+ g_signal_handlers_disconnect_by_data (priv->manager, object);
+ g_clear_object (&priv->manager);
+ }
+ if (priv->settings) {
+ g_signal_handlers_disconnect_by_data (priv->settings, object);
+ g_clear_object (&priv->settings);
+ }
+
+ G_OBJECT_CLASS (nm_client_parent_class)->dispose (object);
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ switch (prop_id) {
+ case PROP_NETWORKING_ENABLED:
+ case PROP_WIRELESS_ENABLED:
+ case PROP_WWAN_ENABLED:
+ case PROP_WIMAX_ENABLED:
+ g_object_set_property (G_OBJECT (NM_CLIENT_GET_PRIVATE (object)->manager),
+ pspec->name, 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)
+{
+ switch (prop_id) {
+ case PROP_VERSION:
+ case PROP_STATE:
+ case PROP_STARTUP:
+ case PROP_NM_RUNNING:
+ case PROP_NETWORKING_ENABLED:
+ case PROP_WIRELESS_ENABLED:
+ case PROP_WIRELESS_HARDWARE_ENABLED:
+ case PROP_WWAN_ENABLED:
+ case PROP_WWAN_HARDWARE_ENABLED:
+ case PROP_WIMAX_ENABLED:
+ case PROP_WIMAX_HARDWARE_ENABLED:
+ case PROP_ACTIVE_CONNECTIONS:
+ case PROP_CONNECTIVITY:
+ case PROP_PRIMARY_CONNECTION:
+ case PROP_ACTIVATING_CONNECTION:
+ case PROP_DEVICES:
+ g_object_get_property (G_OBJECT (NM_CLIENT_GET_PRIVATE (object)->manager),
+ pspec->name, value);
+ break;
+ case PROP_CONNECTIONS:
+ case PROP_HOSTNAME:
+ case PROP_CAN_MODIFY:
+ g_object_get_property (G_OBJECT (NM_CLIENT_GET_PRIVATE (object)->settings),
+ pspec->name, value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_client_class_init (NMClientClass *client_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (client_class);
+
+ g_type_class_add_private (client_class, sizeof (NMClientPrivate));
+
+ /* virtual methods */
+ object_class->constructed = constructed;
+ object_class->set_property = set_property;
+ object_class->get_property = get_property;
+ object_class->dispose = dispose;
+
+ /* properties */
+
+ /**
+ * NMClient:version:
+ *
+ * The NetworkManager version.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_VERSION,
+ g_param_spec_string (NM_CLIENT_VERSION, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMClient:state:
+ *
+ * The current daemon state.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_STATE,
+ g_param_spec_enum (NM_CLIENT_STATE, "", "",
+ NM_TYPE_STATE,
+ NM_STATE_UNKNOWN,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMClient:startup:
+ *
+ * Whether the daemon is still starting up.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_STARTUP,
+ g_param_spec_boolean (NM_CLIENT_STARTUP, "", "",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMClient:nm-running:
+ *
+ * Whether the daemon is running.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_NM_RUNNING,
+ g_param_spec_boolean (NM_CLIENT_NM_RUNNING, "", "",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMClient:networking-enabled:
+ *
+ * Whether networking is enabled.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_NETWORKING_ENABLED,
+ g_param_spec_boolean (NM_CLIENT_NETWORKING_ENABLED, "", "",
+ TRUE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMClient:wireless-enabled:
+ *
+ * Whether wireless is enabled.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_WIRELESS_ENABLED,
+ g_param_spec_boolean (NM_CLIENT_WIRELESS_ENABLED, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMClient:wireless-hardware-enabled:
+ *
+ * Whether the wireless hardware is enabled.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_WIRELESS_HARDWARE_ENABLED,
+ g_param_spec_boolean (NM_CLIENT_WIRELESS_HARDWARE_ENABLED, "", "",
+ TRUE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMClient:wwan-enabled:
+ *
+ * Whether WWAN functionality is enabled.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_WWAN_ENABLED,
+ g_param_spec_boolean (NM_CLIENT_WWAN_ENABLED, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMClient:wwan-hardware-enabled:
+ *
+ * Whether the WWAN hardware is enabled.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_WWAN_HARDWARE_ENABLED,
+ g_param_spec_boolean (NM_CLIENT_WWAN_HARDWARE_ENABLED, "", "",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMClient:wimax-enabled:
+ *
+ * Whether WiMAX functionality is enabled.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_WIMAX_ENABLED,
+ g_param_spec_boolean (NM_CLIENT_WIMAX_ENABLED, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMClient:wimax-hardware-enabled:
+ *
+ * Whether the WiMAX hardware is enabled.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_WIMAX_HARDWARE_ENABLED,
+ g_param_spec_boolean (NM_CLIENT_WIMAX_HARDWARE_ENABLED, "", "",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMClient:active-connections:
+ *
+ * The active connections.
+ *
+ * Element-type: NMActiveConnection
+ **/
+ g_object_class_install_property
+ (object_class, PROP_ACTIVE_CONNECTIONS,
+ g_param_spec_boxed (NM_CLIENT_ACTIVE_CONNECTIONS, "", "",
+ G_TYPE_PTR_ARRAY,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMClient:connectivity:
+ *
+ * The network connectivity state.
+ */
+ g_object_class_install_property
+ (object_class, PROP_CONNECTIVITY,
+ g_param_spec_enum (NM_CLIENT_CONNECTIVITY, "", "",
+ NM_TYPE_CONNECTIVITY_STATE,
+ NM_CONNECTIVITY_UNKNOWN,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMClient:primary-connection:
+ *
+ * The #NMActiveConnection of the device with the default route;
+ * see nm_client_get_primary_connection() for more details.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_PRIMARY_CONNECTION,
+ g_param_spec_object (NM_CLIENT_PRIMARY_CONNECTION, "", "",
+ NM_TYPE_ACTIVE_CONNECTION,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMClient:activating-connection:
+ *
+ * The #NMActiveConnection of the activating connection that is
+ * likely to become the new #NMClient:primary-connection.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_ACTIVATING_CONNECTION,
+ g_param_spec_object (NM_CLIENT_ACTIVATING_CONNECTION, "", "",
+ NM_TYPE_ACTIVE_CONNECTION,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMClient:devices:
+ *
+ * List of known network devices.
+ *
+ * Element-type: NMDevice
+ **/
+ g_object_class_install_property
+ (object_class, PROP_DEVICES,
+ g_param_spec_boxed (NM_CLIENT_DEVICES, "", "",
+ G_TYPE_PTR_ARRAY,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMClient:connections:
+ *
+ * The list of configured connections that are available to the user. (Note
+ * that this differs from the underlying D-Bus property, which may also
+ * contain the object paths of connections that the user does not have
+ * permission to read the details of.)
+ *
+ * Element-type: NMRemoteConnection
+ */
+ g_object_class_install_property
+ (object_class, PROP_CONNECTIONS,
+ g_param_spec_boxed (NM_CLIENT_CONNECTIONS, "", "",
+ G_TYPE_PTR_ARRAY,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMClient:hostname:
+ *
+ * The machine hostname stored in persistent configuration. This can be
+ * modified by calling nm_client_save_hostname().
+ */
+ g_object_class_install_property
+ (object_class, PROP_HOSTNAME,
+ g_param_spec_string (NM_CLIENT_HOSTNAME, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMClient:can-modify:
+ *
+ * If %TRUE, adding and modifying connections is supported.
+ */
+ g_object_class_install_property
+ (object_class, PROP_CAN_MODIFY,
+ g_param_spec_boolean (NM_CLIENT_CAN_MODIFY, "", "",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /* signals */
+
+ /**
+ * NMClient::device-added:
+ * @client: the client that received the signal
+ * @device: (type NMDevice): the new device
+ *
+ * Notifies that a #NMDevice is added.
+ **/
+ signals[DEVICE_ADDED] =
+ g_signal_new (NM_CLIENT_DEVICE_ADDED,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMClientClass, device_added),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 1,
+ G_TYPE_OBJECT);
+
+ /**
+ * NMClient::device-removed:
+ * @client: the client that received the signal
+ * @device: (type NMDevice): the removed device
+ *
+ * Notifies that a #NMDevice is removed.
+ **/
+ signals[DEVICE_REMOVED] =
+ g_signal_new (NM_CLIENT_DEVICE_REMOVED,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMClientClass, device_removed),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 1,
+ G_TYPE_OBJECT);
+
+ /**
+ * NMClient::permission-changed:
+ * @client: the client that received the signal
+ * @permission: a permission from #NMClientPermission
+ * @result: the permission's result, one of #NMClientPermissionResult
+ *
+ * Notifies that a permission has changed
+ **/
+ signals[PERMISSION_CHANGED] =
+ g_signal_new (NM_CLIENT_PERMISSION_CHANGED,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ 0, NULL, NULL, NULL,
+ G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_UINT);
+ /**
+ * NMClient::connection-added:
+ * @client: the settings object that received the signal
+ * @connection: the new connection
+ *
+ * Notifies that a #NMConnection has been added.
+ **/
+ signals[CONNECTION_ADDED] =
+ g_signal_new (NM_CLIENT_CONNECTION_ADDED,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMClientClass, connection_added),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 1,
+ NM_TYPE_REMOTE_CONNECTION);
+
+ /**
+ * NMClient::connection-removed:
+ * @client: the settings object that received the signal
+ * @connection: the removed connection
+ *
+ * Notifies that a #NMConnection has been removed.
+ **/
+ signals[CONNECTION_REMOVED] =
+ g_signal_new (NM_CLIENT_CONNECTION_REMOVED,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMClientClass, connection_removed),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 1,
+ NM_TYPE_REMOTE_CONNECTION);
+}
+
+static void
+nm_client_initable_iface_init (GInitableIface *iface)
+{
+ iface->init = init_sync;
+}
+
+static void
+nm_client_async_initable_iface_init (GAsyncInitableIface *iface)
+{
+ iface->init_async = init_async;
+ iface->init_finish = init_finish;
+}
diff --git a/libnm/nm-client.h b/libnm/nm-client.h
new file mode 100644
index 000000000..619ad8585
--- /dev/null
+++ b/libnm/nm-client.h
@@ -0,0 +1,341 @@
+/* -*- 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 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2014 Red Hat, Inc.
+ */
+
+#ifndef __NM_CLIENT_H__
+#define __NM_CLIENT_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-types.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_CLIENT (nm_client_get_type ())
+#define NM_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_CLIENT, NMClient))
+#define NM_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_CLIENT, NMClientClass))
+#define NM_IS_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_CLIENT))
+#define NM_IS_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_CLIENT))
+#define NM_CLIENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_CLIENT, NMClientClass))
+
+#define NM_CLIENT_VERSION "version"
+#define NM_CLIENT_STATE "state"
+#define NM_CLIENT_STARTUP "startup"
+#define NM_CLIENT_NM_RUNNING "nm-running"
+#define NM_CLIENT_NETWORKING_ENABLED "networking-enabled"
+#define NM_CLIENT_WIRELESS_ENABLED "wireless-enabled"
+#define NM_CLIENT_WIRELESS_HARDWARE_ENABLED "wireless-hardware-enabled"
+#define NM_CLIENT_WWAN_ENABLED "wwan-enabled"
+#define NM_CLIENT_WWAN_HARDWARE_ENABLED "wwan-hardware-enabled"
+#define NM_CLIENT_WIMAX_ENABLED "wimax-enabled"
+#define NM_CLIENT_WIMAX_HARDWARE_ENABLED "wimax-hardware-enabled"
+#define NM_CLIENT_ACTIVE_CONNECTIONS "active-connections"
+#define NM_CLIENT_CONNECTIVITY "connectivity"
+#define NM_CLIENT_PRIMARY_CONNECTION "primary-connection"
+#define NM_CLIENT_ACTIVATING_CONNECTION "activating-connection"
+#define NM_CLIENT_DEVICES "devices"
+#define NM_CLIENT_CONNECTIONS "connections"
+#define NM_CLIENT_HOSTNAME "hostname"
+#define NM_CLIENT_CAN_MODIFY "can-modify"
+
+#define NM_CLIENT_DEVICE_ADDED "device-added"
+#define NM_CLIENT_DEVICE_REMOVED "device-removed"
+#define NM_CLIENT_PERMISSION_CHANGED "permission-changed"
+#define NM_CLIENT_CONNECTION_ADDED "connection-added"
+#define NM_CLIENT_CONNECTION_REMOVED "connection-removed"
+
+/**
+ * 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 Wi-Fi can be
+ * globally enabled or disabled
+ * @NM_CLIENT_PERMISSION_ENABLE_DISABLE_WWAN: controls whether WWAN (3G) can be
+ * globally enabled or disabled
+ * @NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIMAX: controls whether WiMAX can be
+ * globally enabled or disabled
+ * @NM_CLIENT_PERMISSION_SLEEP_WAKE: controls whether the client can ask
+ * NetworkManager to sleep and wake
+ * @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 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
+ * @NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN: controls whether connections
+ * owned by the current user can be modified
+ * @NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME: controls whether the
+ * persistent hostname can be changed
+ * @NM_CLIENT_PERMISSION_LAST: a reserved boundary value
+ *
+ * #NMClientPermission values indicate various permissions that NetworkManager
+ * clients can obtain to perform certain tasks on behalf of the current user.
+ **/
+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;
+
+/**
+ * NMClientPermissionResult:
+ * @NM_CLIENT_PERMISSION_RESULT_UNKNOWN: unknown or no authorization
+ * @NM_CLIENT_PERMISSION_RESULT_YES: the permission is available
+ * @NM_CLIENT_PERMISSION_RESULT_AUTH: authorization is necessary before the
+ * permission is available
+ * @NM_CLIENT_PERMISSION_RESULT_NO: permission to perform the operation is
+ * denied by system policy
+ *
+ * #NMClientPermissionResult values indicate what authorizations and permissions
+ * the user requires to obtain a given #NMClientPermission
+ **/
+typedef enum {
+ NM_CLIENT_PERMISSION_RESULT_UNKNOWN = 0,
+ NM_CLIENT_PERMISSION_RESULT_YES,
+ NM_CLIENT_PERMISSION_RESULT_AUTH,
+ NM_CLIENT_PERMISSION_RESULT_NO
+} NMClientPermissionResult;
+
+/**
+ * NMClientError:
+ * @NM_CLIENT_ERROR_FAILED: unknown or unclassified error
+ * @NM_CLIENT_ERROR_MANAGER_NOT_RUNNING: an operation that requires NetworkManager
+ * failed because NetworkManager is not running
+ * @NM_CLIENT_ERROR_OBJECT_CREATION_FAILED: NetworkManager claimed that an
+ * operation succeeded, but the object that was allegedly created (eg,
+ * #NMRemoteConnection, #NMActiveConnection) was apparently destroyed before
+ * #NMClient could create a representation of it.
+ *
+ * Describes errors that may result from operations involving a #NMClient.
+ *
+ * D-Bus operations may also return errors from other domains, including
+ * #NMManagerError, #NMSettingsError, #NMAgentManagerError, and #NMConnectionError.
+ **/
+typedef enum {
+ NM_CLIENT_ERROR_FAILED = 0,
+ NM_CLIENT_ERROR_MANAGER_NOT_RUNNING,
+ NM_CLIENT_ERROR_OBJECT_CREATION_FAILED,
+} NMClientError;
+
+#define NM_CLIENT_ERROR nm_client_error_quark ()
+GQuark nm_client_error_quark (void);
+
+struct _NMClient {
+ GObject parent;
+};
+
+typedef struct {
+ GObjectClass 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);
+ void (*connection_added) (NMClient *client, NMRemoteConnection *connection);
+ void (*connection_removed) (NMClient *client, NMRemoteConnection *connection);
+
+ /*< private >*/
+ gpointer padding[8];
+} NMClientClass;
+
+GType nm_client_get_type (void);
+
+NMClient *nm_client_new (GCancellable *cancellable,
+ GError **error);
+
+void nm_client_new_async (GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+NMClient *nm_client_new_finish (GAsyncResult *result,
+ GError **error);
+
+const char *nm_client_get_version (NMClient *client);
+NMState nm_client_get_state (NMClient *client);
+gboolean nm_client_get_startup (NMClient *client);
+gboolean nm_client_get_nm_running (NMClient *client);
+
+gboolean nm_client_networking_get_enabled (NMClient *client);
+gboolean nm_client_networking_set_enabled (NMClient *client,
+ gboolean enabled,
+ GError **error);
+
+gboolean nm_client_wireless_get_enabled (NMClient *client);
+void nm_client_wireless_set_enabled (NMClient *client, gboolean enabled);
+gboolean nm_client_wireless_hardware_get_enabled (NMClient *client);
+
+gboolean nm_client_wwan_get_enabled (NMClient *client);
+void nm_client_wwan_set_enabled (NMClient *client, gboolean enabled);
+gboolean nm_client_wwan_hardware_get_enabled (NMClient *client);
+
+gboolean nm_client_wimax_get_enabled (NMClient *client);
+void nm_client_wimax_set_enabled (NMClient *client, gboolean enabled);
+gboolean nm_client_wimax_hardware_get_enabled (NMClient *client);
+
+gboolean nm_client_get_logging (NMClient *client,
+ char **level,
+ char **domains,
+ GError **error);
+gboolean nm_client_set_logging (NMClient *client,
+ const char *level,
+ const char *domains,
+ GError **error);
+
+NMClientPermissionResult nm_client_get_permission_result (NMClient *client,
+ NMClientPermission permission);
+
+NMConnectivityState nm_client_get_connectivity (NMClient *client);
+
+NMConnectivityState nm_client_check_connectivity (NMClient *client,
+ GCancellable *cancellable,
+ GError **error);
+void nm_client_check_connectivity_async (NMClient *client,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+NMConnectivityState nm_client_check_connectivity_finish (NMClient *client,
+ GAsyncResult *result,
+ GError **error);
+
+gboolean nm_client_save_hostname (NMClient *client,
+ const char *hostname,
+ GCancellable *cancellable,
+ GError **error);
+void nm_client_save_hostname_async (NMClient *client,
+ const char *hostname,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+gboolean nm_client_save_hostname_finish (NMClient *client,
+ GAsyncResult *result,
+ GError **error);
+
+/* Devices */
+
+const GPtrArray *nm_client_get_devices (NMClient *client);
+NMDevice *nm_client_get_device_by_path (NMClient *client, const char *object_path);
+NMDevice *nm_client_get_device_by_iface (NMClient *client, const char *iface);
+
+/* Active Connections */
+
+const GPtrArray *nm_client_get_active_connections (NMClient *client);
+
+NMActiveConnection *nm_client_get_primary_connection (NMClient *client);
+NMActiveConnection *nm_client_get_activating_connection (NMClient *client);
+
+void nm_client_activate_connection_async (NMClient *client,
+ NMConnection *connection,
+ NMDevice *device,
+ const char *specific_object,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+NMActiveConnection *nm_client_activate_connection_finish (NMClient *client,
+ GAsyncResult *result,
+ GError **error);
+
+void nm_client_add_and_activate_connection_async (NMClient *client,
+ NMConnection *partial,
+ NMDevice *device,
+ const char *specific_object,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+NMActiveConnection *nm_client_add_and_activate_connection_finish (NMClient *client,
+ GAsyncResult *result,
+ GError **error);
+
+gboolean nm_client_deactivate_connection (NMClient *client,
+ NMActiveConnection *active,
+ GCancellable *cancellable,
+ GError **error);
+void nm_client_deactivate_connection_async (NMClient *client,
+ NMActiveConnection *active,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+gboolean nm_client_deactivate_connection_finish (NMClient *client,
+ GAsyncResult *result,
+ GError **error);
+
+/* Connections */
+
+const GPtrArray *nm_client_get_connections (NMClient *client);
+
+NMRemoteConnection *nm_client_get_connection_by_id (NMClient *client, const char *id);
+NMRemoteConnection *nm_client_get_connection_by_path (NMClient *client, const char *path);
+NMRemoteConnection *nm_client_get_connection_by_uuid (NMClient *client, const char *uuid);
+
+void nm_client_add_connection_async (NMClient *client,
+ NMConnection *connection,
+ gboolean save_to_disk,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+NMRemoteConnection *nm_client_add_connection_finish (NMClient *client,
+ GAsyncResult *result,
+ GError **error);
+
+gboolean nm_client_load_connections (NMClient *client,
+ char **filenames,
+ char ***failures,
+ GCancellable *cancellable,
+ GError **error);
+void nm_client_load_connections_async (NMClient *client,
+ char **filenames,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+gboolean nm_client_load_connections_finish (NMClient *client,
+ char ***failures,
+ GAsyncResult *result,
+ GError **error);
+
+gboolean nm_client_reload_connections (NMClient *client,
+ GCancellable *cancellable,
+ GError **error);
+void nm_client_reload_connections_async (NMClient *client,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+gboolean nm_client_reload_connections_finish (NMClient *client,
+ GAsyncResult *result,
+ GError **error);
+
+G_END_DECLS
+
+#endif /* __NM_CLIENT_H__ */
diff --git a/libnm/nm-dbus-helpers.c b/libnm/nm-dbus-helpers.c
new file mode 100644
index 000000000..7a99e70d2
--- /dev/null
+++ b/libnm/nm-dbus-helpers.c
@@ -0,0 +1,405 @@
+/* -*- 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 <string.h>
+#include <gio/gio.h>
+#include "nm-dbus-helpers.h"
+#include "nm-dbus-interface.h"
+
+static GBusType nm_bus = G_BUS_TYPE_SYSTEM;
+
+GBusType
+_nm_dbus_bus_type (void)
+{
+ static gsize init_value = 0;
+
+ if (g_once_init_enter (&init_value)) {
+ if (g_getenv ("LIBNM_USE_SESSION_BUS"))
+ nm_bus = G_BUS_TYPE_SESSION;
+
+ g_once_init_leave (&init_value, 1);
+ }
+
+ return nm_bus;
+}
+
+static struct {
+ GMutex mutex;
+ GWeakRef weak_ref;
+} private_connection;
+
+static void
+_private_dbus_connection_closed_cb (GDBusConnection *connection,
+ gboolean remote_peer_vanished,
+ GError *error,
+ gpointer user_data)
+{
+ GDBusConnection *p;
+
+ g_mutex_lock (&private_connection.mutex);
+ p = g_weak_ref_get (&private_connection.weak_ref);
+ if (connection == p) {
+ g_signal_handlers_disconnect_by_func (G_OBJECT (connection), G_CALLBACK (_private_dbus_connection_closed_cb), NULL);
+ g_weak_ref_set (&private_connection.weak_ref, NULL);
+ }
+ if (p)
+ g_object_unref (p);
+ g_mutex_unlock (&private_connection.mutex);
+}
+
+static GDBusConnection *
+_private_dbus_connection_internalize (GDBusConnection *connection)
+{
+ GDBusConnection *p;
+
+ g_return_val_if_fail (G_IS_DBUS_CONNECTION (connection), NULL);
+ g_return_val_if_fail (!g_dbus_connection_is_closed (connection), NULL);
+
+ g_mutex_lock (&private_connection.mutex);
+ p = g_weak_ref_get (&private_connection.weak_ref);
+ if (p) {
+ g_object_unref (connection);
+ connection = p;
+ } else {
+ g_weak_ref_set (&private_connection.weak_ref, connection);
+ g_signal_connect (connection, "closed", G_CALLBACK (_private_dbus_connection_closed_cb), NULL);
+ }
+ g_mutex_unlock (&private_connection.mutex);
+ return connection;
+}
+
+GDBusConnection *
+_nm_dbus_new_connection (GCancellable *cancellable, GError **error)
+{
+ GDBusConnection *connection = NULL;
+
+ /* If running as root try the private bus first */
+ if (0 == geteuid ()) {
+ GError *local = NULL;
+ GDBusConnection *p;
+
+ p = g_weak_ref_get (&private_connection.weak_ref);
+ if (p)
+ return p;
+
+ connection = g_dbus_connection_new_for_address_sync ("unix:path=" NMRUNDIR "/private",
+ G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT,
+ NULL, cancellable, &local);
+ if (connection)
+ return _private_dbus_connection_internalize (connection);
+
+ if (g_error_matches (local, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+ g_propagate_error (error, local);
+ return NULL;
+ }
+ g_error_free (local);
+ }
+
+ return g_bus_get_sync (_nm_dbus_bus_type (), cancellable, error);
+}
+
+static void
+new_connection_async_got_system (GObject *source, GAsyncResult *result, gpointer user_data)
+{
+ GSimpleAsyncResult *simple = user_data;
+ GDBusConnection *connection;
+ GError *error = NULL;
+
+ connection = g_bus_get_finish (result, &error);
+ if (connection)
+ g_simple_async_result_set_op_res_gpointer (simple, connection, g_object_unref);
+ else
+ g_simple_async_result_take_error (simple, error);
+
+ g_simple_async_result_complete (simple);
+ g_object_unref (simple);
+}
+
+static void
+new_connection_async_got_private (GObject *source, GAsyncResult *result, gpointer user_data)
+{
+ GSimpleAsyncResult *simple = user_data;
+ GDBusConnection *connection;
+ GError *error = NULL;
+
+ connection = g_dbus_connection_new_for_address_finish (result, &error);
+ if (connection) {
+ connection = _private_dbus_connection_internalize (connection);
+ g_simple_async_result_set_op_res_gpointer (simple, connection, g_object_unref);
+ g_simple_async_result_complete (simple);
+ g_object_unref (simple);
+ return;
+ }
+
+ if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+ g_simple_async_result_take_error (simple, error);
+ g_simple_async_result_complete (simple);
+ g_object_unref (simple);
+ return;
+ }
+
+ g_clear_error (&error);
+ g_bus_get (_nm_dbus_bus_type (),
+ g_object_get_data (G_OBJECT (simple), "cancellable"),
+ new_connection_async_got_system, simple);
+}
+
+static void
+_nm_dbus_new_connection_async_do (GSimpleAsyncResult *simple, GCancellable *cancellable)
+{
+ g_dbus_connection_new_for_address ("unix:path=" NMRUNDIR "/private",
+ G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT,
+ NULL,
+ cancellable,
+ new_connection_async_got_private, simple);
+}
+
+static gboolean
+_nm_dbus_new_connection_async_get_private (gpointer user_data)
+{
+ GSimpleAsyncResult *simple = user_data;
+ GDBusConnection *p;
+
+ p = g_weak_ref_get (&private_connection.weak_ref);
+ if (!p) {
+ /* The connection is gone. Create a new one async... */
+ _nm_dbus_new_connection_async_do (simple,
+ g_object_get_data (G_OBJECT (simple), "cancellable"));
+ } else {
+ g_simple_async_result_set_op_res_gpointer (simple, p, g_object_unref);
+ g_simple_async_result_complete (simple);
+ g_object_unref (simple);
+ }
+
+ return G_SOURCE_REMOVE;
+}
+
+void
+_nm_dbus_new_connection_async (GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *simple;
+
+ simple = g_simple_async_result_new (NULL, callback, user_data, _nm_dbus_new_connection_async);
+
+ /* If running as root try the private bus first */
+ if (0 == geteuid ()) {
+ GDBusConnection *p;
+
+ if (cancellable) {
+ g_object_set_data_full (G_OBJECT (simple), "cancellable",
+ g_object_ref (cancellable), g_object_unref);
+ }
+ p = g_weak_ref_get (&private_connection.weak_ref);
+ if (p) {
+ g_object_unref (p);
+ g_idle_add (_nm_dbus_new_connection_async_get_private, simple);
+ } else
+ _nm_dbus_new_connection_async_do (simple, cancellable);
+ } else {
+ g_bus_get (_nm_dbus_bus_type (),
+ cancellable,
+ new_connection_async_got_system, simple);
+ }
+}
+
+GDBusConnection *
+_nm_dbus_new_connection_finish (GAsyncResult *result,
+ GError **error)
+{
+ GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
+
+ if (g_simple_async_result_propagate_error (simple, error))
+ return NULL;
+
+ return g_object_ref (g_simple_async_result_get_op_res_gpointer (simple));
+}
+
+gboolean
+_nm_dbus_is_connection_private (GDBusConnection *connection)
+{
+ return g_dbus_connection_get_unique_name (connection) == NULL;
+}
+
+static GHashTable *proxy_types;
+
+#undef _nm_dbus_register_proxy_type
+void
+_nm_dbus_register_proxy_type (const char *interface,
+ GType proxy_type)
+{
+ if (!proxy_types)
+ proxy_types = g_hash_table_new (g_str_hash, g_str_equal);
+
+ g_assert (g_hash_table_lookup (proxy_types, interface) == NULL);
+ g_hash_table_insert (proxy_types, (char *) interface, GSIZE_TO_POINTER (proxy_type));
+}
+
+/* We don't (currently) use GDBus's property-handling code */
+#define NM_DBUS_PROXY_FLAGS (G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES | \
+ G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START)
+
+GDBusProxy *
+_nm_dbus_new_proxy_for_connection (GDBusConnection *connection,
+ const char *path,
+ const char *interface,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GType proxy_type;
+ const char *name;
+
+ proxy_type = GPOINTER_TO_SIZE (g_hash_table_lookup (proxy_types, interface));
+ if (!proxy_type)
+ proxy_type = G_TYPE_DBUS_PROXY;
+
+ if (_nm_dbus_is_connection_private (connection))
+ name = NULL;
+ else
+ name = NM_DBUS_SERVICE;
+
+ return g_initable_new (proxy_type, cancellable, error,
+ "g-connection", connection,
+ "g-flags", NM_DBUS_PROXY_FLAGS,
+ "g-name", name,
+ "g-object-path", path,
+ "g-interface-name", interface,
+ NULL);
+}
+
+void
+_nm_dbus_new_proxy_for_connection_async (GDBusConnection *connection,
+ const char *path,
+ const char *interface,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GType proxy_type;
+ const char *name;
+
+ proxy_type = GPOINTER_TO_SIZE (g_hash_table_lookup (proxy_types, interface));
+ if (!proxy_type)
+ proxy_type = G_TYPE_DBUS_PROXY;
+
+ if (_nm_dbus_is_connection_private (connection))
+ name = NULL;
+ else
+ name = NM_DBUS_SERVICE;
+
+ g_async_initable_new_async (proxy_type, G_PRIORITY_DEFAULT,
+ cancellable, callback, user_data,
+ "g-connection", connection,
+ "g-flags", NM_DBUS_PROXY_FLAGS,
+ "g-name", name,
+ "g-object-path", path,
+ "g-interface-name", interface,
+ NULL);
+}
+
+GDBusProxy *
+_nm_dbus_new_proxy_for_connection_finish (GAsyncResult *result,
+ GError **error)
+{
+ GObject *source, *proxy;
+
+ source = g_async_result_get_source_object (result);
+ proxy = g_async_initable_new_finish (G_ASYNC_INITABLE (source), result, error);
+ g_object_unref (source);
+
+ return G_DBUS_PROXY (proxy);
+}
+
+/* Binds the properties on a generated server-side GDBus object to the
+ * corresponding properties on the public object.
+ */
+void
+_nm_dbus_bind_properties (gpointer object, gpointer skeleton)
+{
+ GParamSpec **properties;
+ guint n_properties;
+ int i;
+
+ properties = g_object_class_list_properties (G_OBJECT_GET_CLASS (skeleton), &n_properties);
+ for (i = 0; i < n_properties; i++) {
+ if (g_str_has_prefix (properties[i]->name, "g-"))
+ continue;
+
+ g_object_bind_property (object, properties[i]->name,
+ skeleton, properties[i]->name,
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+ }
+}
+
+static char *
+signal_name_from_method_name (const char *method_name)
+{
+ GString *signal_name;
+ const char *p;
+
+ signal_name = g_string_new ("handle");
+ for (p = method_name; *p; p++) {
+ if (g_ascii_isupper (*p))
+ g_string_append_c (signal_name, '-');
+ g_string_append_c (signal_name, g_ascii_tolower (*p));
+ }
+
+ return g_string_free (signal_name, FALSE);
+}
+
+static void
+_nm_dbus_method_meta_marshal (GClosure *closure, GValue *return_value,
+ guint n_param_values, const GValue *param_values,
+ gpointer invocation_hint, gpointer marshal_data)
+{
+ closure->marshal (closure, return_value, n_param_values,
+ param_values, invocation_hint,
+ ((GCClosure *)closure)->callback);
+
+ g_value_set_boolean (return_value, TRUE);
+}
+
+/* Takes (method_name, handler_func) pairs and connects the handlers to the
+ * signals on skeleton, with object as the user_data, but swapped so it comes
+ * first in the argument list, and handling the return value automatically.
+ */
+void
+_nm_dbus_bind_methods (gpointer object, gpointer skeleton, ...)
+{
+ va_list ap;
+ const char *method_name;
+ char *signal_name;
+ GCallback handler;
+ GClosure *closure;
+
+ va_start (ap, skeleton);
+ while ( (method_name = va_arg (ap, const char *))
+ && (handler = va_arg (ap, GCallback))) {
+ signal_name = signal_name_from_method_name (method_name);
+ closure = g_cclosure_new_swap (handler, object, NULL);
+ g_closure_set_meta_marshal (closure, NULL, _nm_dbus_method_meta_marshal);
+ g_signal_connect_closure (skeleton, signal_name, closure, FALSE);
+ g_free (signal_name);
+ }
+ va_end (ap);
+}
diff --git a/libnm/nm-dbus-helpers.h b/libnm/nm-dbus-helpers.h
new file mode 100644
index 000000000..ca779d3a3
--- /dev/null
+++ b/libnm/nm-dbus-helpers.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_DBUS_HELPERS_PRIVATE_H__
+#define __NM_DBUS_HELPERS_PRIVATE_H__
+
+#include <gio/gio.h>
+
+/* Copied from dbus/dbus-shared.h */
+#define DBUS_SERVICE_DBUS "org.freedesktop.DBus"
+#define DBUS_PATH_DBUS "/org/freedesktop/DBus"
+#define DBUS_PATH_LOCAL "/org/freedesktop/DBus/Local"
+
+#define DBUS_INTERFACE_DBUS "org.freedesktop.DBus"
+#define DBUS_INTERFACE_INTROSPECTABLE "org.freedesktop.DBus.Introspectable"
+#define DBUS_INTERFACE_PROPERTIES "org.freedesktop.DBus.Properties"
+#define DBUS_INTERFACE_PEER "org.freedesktop.DBus.Peer"
+
+
+GBusType _nm_dbus_bus_type (void);
+
+GDBusConnection *_nm_dbus_new_connection (GCancellable *cancellable,
+ GError **error);
+
+void _nm_dbus_new_connection_async (GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+GDBusConnection *_nm_dbus_new_connection_finish (GAsyncResult *result,
+ GError **error);
+
+gboolean _nm_dbus_is_connection_private (GDBusConnection *connection);
+
+void _nm_dbus_register_proxy_type (const char *interface,
+ GType proxy_type);
+/* Guarantee that @interface is a static string */
+#define _nm_dbus_register_proxy_type(interface, proxy_type) \
+ _nm_dbus_register_proxy_type (interface "", proxy_type) \
+
+GDBusProxy *_nm_dbus_new_proxy_for_connection (GDBusConnection *connection,
+ const char *path,
+ const char *interface,
+ GCancellable *cancellable,
+ GError **error);
+
+void _nm_dbus_new_proxy_for_connection_async (GDBusConnection *connection,
+ const char *path,
+ const char *interface,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+GDBusProxy *_nm_dbus_new_proxy_for_connection_finish (GAsyncResult *result,
+ GError **error);
+
+void _nm_dbus_bind_properties (gpointer object,
+ gpointer skeleton);
+
+void _nm_dbus_bind_methods (gpointer object,
+ gpointer skeleton,
+ ...) G_GNUC_NULL_TERMINATED;
+
+#endif /* __NM_DBUS_HELPERS_PRIVATE_H__ */
diff --git a/libnm/nm-device-adsl.c b/libnm/nm-device-adsl.c
new file mode 100644
index 000000000..99771548f
--- /dev/null
+++ b/libnm/nm-device-adsl.c
@@ -0,0 +1,159 @@
+/* -*- 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.
+ *
+ * author: Pantelis Koukousoulas <pktoss@gmail.com>
+ * Copyright 2009 - 2011 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include "nm-device-adsl.h"
+#include "nm-device-private.h"
+#include "nm-object-private.h"
+
+#include "nm-setting-adsl.h"
+#include "nm-setting-connection.h"
+
+#include <string.h>
+#include <glib/gi18n-lib.h>
+
+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))
+
+typedef struct {
+ gboolean carrier;
+
+} NMDeviceAdslPrivate;
+
+enum {
+ PROP_0,
+ PROP_CARRIER,
+ LAST_PROP
+};
+
+/**
+ * nm_device_adsl_get_carrier:
+ * @device: a #NMDeviceAdsl
+ *
+ * Whether the device has carrier.
+ *
+ * Returns: %TRUE if the device has carrier
+ **/
+gboolean
+nm_device_adsl_get_carrier (NMDeviceAdsl *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_ADSL (device), FALSE);
+
+ return NM_DEVICE_ADSL_GET_PRIVATE (device)->carrier;
+}
+
+static gboolean
+connection_compatible (NMDevice *device, NMConnection *connection, GError **error)
+{
+ if (!NM_DEVICE_CLASS (nm_device_adsl_parent_class)->connection_compatible (device, connection, error))
+ return FALSE;
+
+ if (!nm_connection_is_type (connection, NM_SETTING_ADSL_SETTING_NAME)) {
+ g_set_error_literal (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION,
+ _("The connection was not an ADSL connection."));
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static GType
+get_setting_type (NMDevice *device)
+{
+ return NM_TYPE_SETTING_ADSL;
+}
+
+/******************************************************************/
+
+static void
+nm_device_adsl_init (NMDeviceAdsl *device)
+{
+ _nm_device_set_device_type (NM_DEVICE (device), NM_DEVICE_TYPE_ADSL);
+}
+
+static void
+init_dbus (NMObject *object)
+{
+ NMDeviceAdslPrivate *priv = NM_DEVICE_ADSL_GET_PRIVATE (object);
+ const NMPropertiesInfo property_info[] = {
+ { NM_DEVICE_ADSL_CARRIER, &priv->carrier },
+ { NULL },
+ };
+
+ NM_OBJECT_CLASS (nm_device_adsl_parent_class)->init_dbus (object);
+
+ _nm_object_register_properties (object,
+ NM_DBUS_INTERFACE_DEVICE_ADSL,
+ property_info);
+}
+
+static void
+get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NMDeviceAdsl *device = NM_DEVICE_ADSL (object);
+
+ switch (prop_id) {
+ case PROP_CARRIER:
+ g_value_set_boolean (value, nm_device_adsl_get_carrier (device));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_device_adsl_class_init (NMDeviceAdslClass *adsl_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (adsl_class);
+ NMObjectClass *nm_object_class = NM_OBJECT_CLASS (adsl_class);
+ NMDeviceClass *device_class = NM_DEVICE_CLASS (adsl_class);
+
+ g_type_class_add_private (object_class, sizeof (NMDeviceAdslPrivate));
+
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_ADSL);
+
+ /* virtual methods */
+ object_class->get_property = get_property;
+
+ nm_object_class->init_dbus = init_dbus;
+
+ device_class->connection_compatible = connection_compatible;
+ device_class->get_setting_type = get_setting_type;
+
+ /* properties */
+ /**
+ * NMDeviceAdsl:carrier:
+ *
+ * Whether the device has carrier.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_CARRIER,
+ g_param_spec_boolean (NM_DEVICE_ADSL_CARRIER, "", "",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/libnm/nm-device-adsl.h b/libnm/nm-device-adsl.h
new file mode 100644
index 000000000..d01745148
--- /dev/null
+++ b/libnm/nm-device-adsl.h
@@ -0,0 +1,58 @@
+/* -*- 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 2011 Pantelis Koukousoulas <pktoss@gmail.com>
+ */
+
+#ifndef __NM_DEVICE_ADSL_H__
+#define __NM_DEVICE_ADSL_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-device.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_DEVICE_ADSL (nm_device_adsl_get_type ())
+#define NM_DEVICE_ADSL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEVICE_ADSL, NMDeviceAdsl))
+#define NM_DEVICE_ADSL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DEVICE_ADSL, NMDeviceAdslClass))
+#define NM_IS_DEVICE_ADSL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEVICE_ADSL))
+#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))
+
+#define NM_DEVICE_ADSL_CARRIER "carrier"
+
+struct _NMDeviceAdsl {
+ NMDevice parent;
+};
+
+typedef struct {
+ NMDeviceClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMDeviceAdslClass;
+
+GType nm_device_adsl_get_type (void);
+
+gboolean nm_device_adsl_get_carrier (NMDeviceAdsl *device);
+
+G_END_DECLS
+
+#endif /* __NM_DEVICE_ADSL_H__ */
diff --git a/libnm/nm-device-bond.c b/libnm/nm-device-bond.c
new file mode 100644
index 000000000..6bb673233
--- /dev/null
+++ b/libnm/nm-device-bond.c
@@ -0,0 +1,271 @@
+/* -*- 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 2012 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <glib/gi18n-lib.h>
+
+#include "nm-glib-compat.h"
+
+#include <nm-setting-connection.h>
+#include <nm-setting-bond.h>
+#include <nm-utils.h>
+
+#include "nm-device-bond.h"
+#include "nm-device-private.h"
+#include "nm-object-private.h"
+#include "nm-core-internal.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))
+
+typedef struct {
+ char *hw_address;
+ gboolean carrier;
+ GPtrArray *slaves;
+} NMDeviceBondPrivate;
+
+enum {
+ PROP_0,
+ PROP_HW_ADDRESS,
+ PROP_CARRIER,
+ PROP_SLAVES,
+
+ LAST_PROP
+};
+
+/**
+ * nm_device_bond_get_hw_address:
+ * @device: a #NMDeviceBond
+ *
+ * Gets the hardware (MAC) address of the #NMDeviceBond
+ *
+ * Returns: the hardware address. This is the internal string used by the
+ * device, and must not be modified.
+ **/
+const char *
+nm_device_bond_get_hw_address (NMDeviceBond *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_BOND (device), NULL);
+
+ return NM_DEVICE_BOND_GET_PRIVATE (device)->hw_address;
+}
+
+/**
+ * nm_device_bond_get_carrier:
+ * @device: a #NMDeviceBond
+ *
+ * Whether the device has carrier.
+ *
+ * Returns: %TRUE if the device has carrier
+ **/
+gboolean
+nm_device_bond_get_carrier (NMDeviceBond *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_BOND (device), FALSE);
+
+ return NM_DEVICE_BOND_GET_PRIVATE (device)->carrier;
+}
+
+/**
+ * nm_device_bond_get_slaves:
+ * @device: a #NMDeviceBond
+ *
+ * Gets the devices currently slaved to @device.
+ *
+ * Returns: (element-type NMDevice): the #GPtrArray containing
+ * #NMDevices that are slaves of @device. This is the internal
+ * copy used by the device, and must not be modified.
+ **/
+const GPtrArray *
+nm_device_bond_get_slaves (NMDeviceBond *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_BOND (device), FALSE);
+
+ return NM_DEVICE_BOND_GET_PRIVATE (device)->slaves;
+}
+
+static gboolean
+connection_compatible (NMDevice *device, NMConnection *connection, GError **error)
+{
+ if (!NM_DEVICE_CLASS (nm_device_bond_parent_class)->connection_compatible (device, connection, error))
+ return FALSE;
+
+ if (!nm_connection_is_type (connection, NM_SETTING_BOND_SETTING_NAME)) {
+ g_set_error_literal (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION,
+ _("The connection was not a bond connection."));
+ return FALSE;
+ }
+
+ /* FIXME: check slaves? */
+
+ return TRUE;
+}
+
+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));
+}
+
+/***********************************************************/
+
+static void
+nm_device_bond_init (NMDeviceBond *device)
+{
+ NMDeviceBondPrivate *priv = NM_DEVICE_BOND_GET_PRIVATE (device);
+
+ _nm_device_set_device_type (NM_DEVICE (device), NM_DEVICE_TYPE_BOND);
+
+ priv->slaves = g_ptr_array_new ();
+}
+
+static void
+init_dbus (NMObject *object)
+{
+ NMDeviceBondPrivate *priv = NM_DEVICE_BOND_GET_PRIVATE (object);
+ const NMPropertiesInfo property_info[] = {
+ { NM_DEVICE_BOND_HW_ADDRESS, &priv->hw_address },
+ { NM_DEVICE_BOND_CARRIER, &priv->carrier },
+ { NM_DEVICE_BOND_SLAVES, &priv->slaves, NULL, NM_TYPE_DEVICE },
+ { NULL },
+ };
+
+ NM_OBJECT_CLASS (nm_device_bond_parent_class)->init_dbus (object);
+
+ _nm_object_register_properties (object,
+ NM_DBUS_INTERFACE_DEVICE_BOND,
+ property_info);
+}
+
+static void
+dispose (GObject *object)
+{
+ NMDeviceBondPrivate *priv = NM_DEVICE_BOND_GET_PRIVATE (object);
+
+ g_clear_pointer (&priv->slaves, g_ptr_array_unref);
+
+ G_OBJECT_CLASS (nm_device_bond_parent_class)->dispose (object);
+}
+
+static void
+finalize (GObject *object)
+{
+ NMDeviceBondPrivate *priv = NM_DEVICE_BOND_GET_PRIVATE (object);
+
+ g_free (priv->hw_address);
+
+ G_OBJECT_CLASS (nm_device_bond_parent_class)->finalize (object);
+}
+
+static void
+get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NMDeviceBond *device = NM_DEVICE_BOND (object);
+
+ switch (prop_id) {
+ case PROP_HW_ADDRESS:
+ g_value_set_string (value, nm_device_bond_get_hw_address (device));
+ break;
+ case PROP_CARRIER:
+ g_value_set_boolean (value, nm_device_bond_get_carrier (device));
+ break;
+ case PROP_SLAVES:
+ g_value_take_boxed (value, _nm_utils_copy_object_array (nm_device_bond_get_slaves (device)));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_device_bond_class_init (NMDeviceBondClass *bond_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (bond_class);
+ NMObjectClass *nm_object_class = NM_OBJECT_CLASS (bond_class);
+ NMDeviceClass *device_class = NM_DEVICE_CLASS (bond_class);
+
+ g_type_class_add_private (bond_class, sizeof (NMDeviceBondPrivate));
+
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_BOND);
+
+ /* virtual methods */
+ object_class->dispose = dispose;
+ object_class->finalize = finalize;
+ object_class->get_property = get_property;
+
+ nm_object_class->init_dbus = init_dbus;
+
+ device_class->connection_compatible = connection_compatible;
+ device_class->get_setting_type = get_setting_type;
+ device_class->get_hw_address = get_hw_address;
+
+ /* properties */
+
+ /**
+ * NMDeviceBond: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_BOND_HW_ADDRESS, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDeviceBond:carrier:
+ *
+ * Whether the device has carrier.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_CARRIER,
+ g_param_spec_boolean (NM_DEVICE_BOND_CARRIER, "", "",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDeviceBond:slaves:
+ *
+ * The devices slaved to the bond device.
+ *
+ * Element-type: NMDevice
+ **/
+ g_object_class_install_property
+ (object_class, PROP_SLAVES,
+ g_param_spec_boxed (NM_DEVICE_BOND_SLAVES, "", "",
+ G_TYPE_PTR_ARRAY,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/libnm/nm-device-bond.h b/libnm/nm-device-bond.h
new file mode 100644
index 000000000..b7a0b1131
--- /dev/null
+++ b/libnm/nm-device-bond.h
@@ -0,0 +1,62 @@
+/* -*- 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 2012 Red Hat, Inc.
+ */
+
+#ifndef __NM_DEVICE_BOND_H__
+#define __NM_DEVICE_BOND_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-device.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_DEVICE_BOND (nm_device_bond_get_type ())
+#define NM_DEVICE_BOND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEVICE_BOND, NMDeviceBond))
+#define NM_DEVICE_BOND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DEVICE_BOND, NMDeviceBondClass))
+#define NM_IS_DEVICE_BOND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEVICE_BOND))
+#define NM_IS_DEVICE_BOND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_BOND))
+#define NM_DEVICE_BOND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_BOND, NMDeviceBondClass))
+
+#define NM_DEVICE_BOND_HW_ADDRESS "hw-address"
+#define NM_DEVICE_BOND_CARRIER "carrier"
+#define NM_DEVICE_BOND_SLAVES "slaves"
+
+struct _NMDeviceBond {
+ NMDevice parent;
+};
+
+typedef struct {
+ NMDeviceClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMDeviceBondClass;
+
+GType nm_device_bond_get_type (void);
+
+const char *nm_device_bond_get_hw_address (NMDeviceBond *device);
+gboolean nm_device_bond_get_carrier (NMDeviceBond *device);
+const GPtrArray *nm_device_bond_get_slaves (NMDeviceBond *device);
+
+G_END_DECLS
+
+#endif /* __NM_DEVICE_BOND_H__ */
diff --git a/libnm/nm-device-bridge.c b/libnm/nm-device-bridge.c
new file mode 100644
index 000000000..ce28f2c2f
--- /dev/null
+++ b/libnm/nm-device-bridge.c
@@ -0,0 +1,271 @@
+/* -*- 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 2012 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <glib/gi18n-lib.h>
+
+#include "nm-glib-compat.h"
+
+#include <nm-setting-connection.h>
+#include <nm-setting-bridge.h>
+#include <nm-utils.h>
+
+#include "nm-device-bridge.h"
+#include "nm-device-private.h"
+#include "nm-object-private.h"
+#include "nm-core-internal.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))
+
+typedef struct {
+ char *hw_address;
+ gboolean carrier;
+ GPtrArray *slaves;
+} NMDeviceBridgePrivate;
+
+enum {
+ PROP_0,
+ PROP_HW_ADDRESS,
+ PROP_CARRIER,
+ PROP_SLAVES,
+
+ LAST_PROP
+};
+
+/**
+ * nm_device_bridge_get_hw_address:
+ * @device: a #NMDeviceBridge
+ *
+ * Gets the hardware (MAC) address of the #NMDeviceBridge
+ *
+ * Returns: the hardware address. This is the internal string used by the
+ * device, and must not be modified.
+ **/
+const char *
+nm_device_bridge_get_hw_address (NMDeviceBridge *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_BRIDGE (device), NULL);
+
+ return NM_DEVICE_BRIDGE_GET_PRIVATE (device)->hw_address;
+}
+
+/**
+ * nm_device_bridge_get_carrier:
+ * @device: a #NMDeviceBridge
+ *
+ * Whether the device has carrier.
+ *
+ * Returns: %TRUE if the device has carrier
+ **/
+gboolean
+nm_device_bridge_get_carrier (NMDeviceBridge *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_BRIDGE (device), FALSE);
+
+ return NM_DEVICE_BRIDGE_GET_PRIVATE (device)->carrier;
+}
+
+/**
+ * nm_device_bridge_get_slaves:
+ * @device: a #NMDeviceBridge
+ *
+ * Gets the devices currently slaved to @device.
+ *
+ * Returns: (element-type NMDevice): the #GPtrArray containing
+ * #NMDevices that are slaves of @device. This is the internal
+ * copy used by the device, and must not be modified.
+ **/
+const GPtrArray *
+nm_device_bridge_get_slaves (NMDeviceBridge *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_BRIDGE (device), FALSE);
+
+ return NM_DEVICE_BRIDGE_GET_PRIVATE (device)->slaves;
+}
+
+static gboolean
+connection_compatible (NMDevice *device, NMConnection *connection, GError **error)
+{
+ if (!NM_DEVICE_CLASS (nm_device_bridge_parent_class)->connection_compatible (device, connection, error))
+ return FALSE;
+
+ if (!nm_connection_is_type (connection, NM_SETTING_BRIDGE_SETTING_NAME)) {
+ g_set_error_literal (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION,
+ _("The connection was not a bridge connection."));
+ return FALSE;
+ }
+
+ /* FIXME: check ports? */
+
+ return TRUE;
+}
+
+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));
+}
+
+/***********************************************************/
+
+static void
+nm_device_bridge_init (NMDeviceBridge *device)
+{
+ NMDeviceBridgePrivate *priv = NM_DEVICE_BRIDGE_GET_PRIVATE (device);
+
+ _nm_device_set_device_type (NM_DEVICE (device), NM_DEVICE_TYPE_BRIDGE);
+
+ priv->slaves = g_ptr_array_new ();
+}
+
+static void
+init_dbus (NMObject *object)
+{
+ NMDeviceBridgePrivate *priv = NM_DEVICE_BRIDGE_GET_PRIVATE (object);
+ const NMPropertiesInfo property_info[] = {
+ { NM_DEVICE_BRIDGE_HW_ADDRESS, &priv->hw_address },
+ { NM_DEVICE_BRIDGE_CARRIER, &priv->carrier },
+ { NM_DEVICE_BRIDGE_SLAVES, &priv->slaves, NULL, NM_TYPE_DEVICE },
+ { NULL },
+ };
+
+ NM_OBJECT_CLASS (nm_device_bridge_parent_class)->init_dbus (object);
+
+ _nm_object_register_properties (object,
+ NM_DBUS_INTERFACE_DEVICE_BRIDGE,
+ property_info);
+}
+
+static void
+dispose (GObject *object)
+{
+ NMDeviceBridgePrivate *priv = NM_DEVICE_BRIDGE_GET_PRIVATE (object);
+
+ g_clear_pointer (&priv->slaves, g_ptr_array_unref);
+
+ G_OBJECT_CLASS (nm_device_bridge_parent_class)->dispose (object);
+}
+
+static void
+finalize (GObject *object)
+{
+ NMDeviceBridgePrivate *priv = NM_DEVICE_BRIDGE_GET_PRIVATE (object);
+
+ g_free (priv->hw_address);
+
+ G_OBJECT_CLASS (nm_device_bridge_parent_class)->finalize (object);
+}
+
+static void
+get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NMDeviceBridge *device = NM_DEVICE_BRIDGE (object);
+
+ switch (prop_id) {
+ case PROP_HW_ADDRESS:
+ g_value_set_string (value, nm_device_bridge_get_hw_address (device));
+ break;
+ case PROP_CARRIER:
+ g_value_set_boolean (value, nm_device_bridge_get_carrier (device));
+ break;
+ case PROP_SLAVES:
+ g_value_take_boxed (value, _nm_utils_copy_object_array (nm_device_bridge_get_slaves (device)));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_device_bridge_class_init (NMDeviceBridgeClass *bridge_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (bridge_class);
+ NMObjectClass *nm_object_class = NM_OBJECT_CLASS (bridge_class);
+ NMDeviceClass *device_class = NM_DEVICE_CLASS (bridge_class);
+
+ g_type_class_add_private (bridge_class, sizeof (NMDeviceBridgePrivate));
+
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_BRIDGE);
+
+ /* virtual methods */
+ object_class->dispose = dispose;
+ object_class->finalize = finalize;
+ object_class->get_property = get_property;
+
+ nm_object_class->init_dbus = init_dbus;
+
+ device_class->connection_compatible = connection_compatible;
+ device_class->get_setting_type = get_setting_type;
+ device_class->get_hw_address = get_hw_address;
+
+ /* properties */
+
+ /**
+ * NMDeviceBridge: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_BRIDGE_HW_ADDRESS, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDeviceBridge:carrier:
+ *
+ * Whether the device has carrier.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_CARRIER,
+ g_param_spec_boolean (NM_DEVICE_BRIDGE_CARRIER, "", "",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDeviceBridge:slaves:
+ *
+ * The devices slaved to the bridge device.
+ *
+ * Element-type: NMDevice
+ **/
+ g_object_class_install_property
+ (object_class, PROP_SLAVES,
+ g_param_spec_boxed (NM_DEVICE_BRIDGE_SLAVES, "", "",
+ G_TYPE_PTR_ARRAY,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/libnm/nm-device-bridge.h b/libnm/nm-device-bridge.h
new file mode 100644
index 000000000..42a0b3a51
--- /dev/null
+++ b/libnm/nm-device-bridge.h
@@ -0,0 +1,62 @@
+/* -*- 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 2012 Red Hat, Inc.
+ */
+
+#ifndef __NM_DEVICE_BRIDGE_H__
+#define __NM_DEVICE_BRIDGE_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-device.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_DEVICE_BRIDGE (nm_device_bridge_get_type ())
+#define NM_DEVICE_BRIDGE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEVICE_BRIDGE, NMDeviceBridge))
+#define NM_DEVICE_BRIDGE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DEVICE_BRIDGE, NMDeviceBridgeClass))
+#define NM_IS_DEVICE_BRIDGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEVICE_BRIDGE))
+#define NM_IS_DEVICE_BRIDGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_BRIDGE))
+#define NM_DEVICE_BRIDGE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_BRIDGE, NMDeviceBridgeClass))
+
+#define NM_DEVICE_BRIDGE_HW_ADDRESS "hw-address"
+#define NM_DEVICE_BRIDGE_CARRIER "carrier"
+#define NM_DEVICE_BRIDGE_SLAVES "slaves"
+
+struct _NMDeviceBridge {
+ NMDevice parent;
+};
+
+typedef struct {
+ NMDeviceClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMDeviceBridgeClass;
+
+GType nm_device_bridge_get_type (void);
+
+const char *nm_device_bridge_get_hw_address (NMDeviceBridge *device);
+gboolean nm_device_bridge_get_carrier (NMDeviceBridge *device);
+const GPtrArray *nm_device_bridge_get_slaves (NMDeviceBridge *device);
+
+G_END_DECLS
+
+#endif /* __NM_DEVICE_BRIDGE_H__ */
diff --git a/libnm/nm-device-bt.c b/libnm/nm-device-bt.c
new file mode 100644
index 000000000..775264645
--- /dev/null
+++ b/libnm/nm-device-bt.c
@@ -0,0 +1,305 @@
+/* -*- 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 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2012 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <glib/gi18n-lib.h>
+
+#include "nm-glib-compat.h"
+
+#include <nm-setting-connection.h>
+#include <nm-setting-bluetooth.h>
+#include <nm-utils.h>
+
+#include "nm-device-bt.h"
+#include "nm-device-private.h"
+#include "nm-object-private.h"
+#include "nm-enum-types.h"
+
+G_DEFINE_TYPE (NMDeviceBt, nm_device_bt, NM_TYPE_DEVICE)
+
+#define NM_DEVICE_BT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_BT, NMDeviceBtPrivate))
+
+typedef struct {
+ char *hw_address;
+ char *name;
+ guint32 bt_capabilities;
+} NMDeviceBtPrivate;
+
+enum {
+ PROP_0,
+ PROP_HW_ADDRESS,
+ PROP_NAME,
+ PROP_BT_CAPABILITIES,
+
+ LAST_PROP
+};
+
+/**
+ * nm_device_bt_get_hw_address:
+ * @device: a #NMDeviceBt
+ *
+ * Gets the hardware (MAC) address of the #NMDeviceBt
+ *
+ * Returns: the hardware address. This is the internal string used by the
+ * device, and must not be modified.
+ **/
+const char *
+nm_device_bt_get_hw_address (NMDeviceBt *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_BT (device), NULL);
+
+ return NM_DEVICE_BT_GET_PRIVATE (device)->hw_address;
+}
+
+/**
+ * nm_device_bt_get_name:
+ * @device: a #NMDeviceBt
+ *
+ * Gets the name of the #NMDeviceBt.
+ *
+ * Returns: the name of the device
+ **/
+const char *
+nm_device_bt_get_name (NMDeviceBt *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_BT (device), NULL);
+
+ return NM_DEVICE_BT_GET_PRIVATE (device)->name;
+}
+
+/**
+ * nm_device_bt_get_capabilities:
+ * @device: a #NMDeviceBt
+ *
+ * Returns the Bluetooth device's usable capabilities.
+ *
+ * Returns: a combination of #NMBluetoothCapabilities
+ **/
+NMBluetoothCapabilities
+nm_device_bt_get_capabilities (NMDeviceBt *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_BT (device), NM_BT_CAPABILITY_NONE);
+
+ return NM_DEVICE_BT_GET_PRIVATE (device)->bt_capabilities;
+}
+
+static NMBluetoothCapabilities
+get_connection_bt_type (NMConnection *connection)
+{
+ NMSettingBluetooth *s_bt;
+ const char *bt_type;
+
+ s_bt = nm_connection_get_setting_bluetooth (connection);
+ if (!s_bt)
+ return NM_BT_CAPABILITY_NONE;
+
+ bt_type = nm_setting_bluetooth_get_connection_type (s_bt);
+ g_assert (bt_type);
+
+ if (!strcmp (bt_type, NM_SETTING_BLUETOOTH_TYPE_DUN))
+ return NM_BT_CAPABILITY_DUN;
+ else if (!strcmp (bt_type, NM_SETTING_BLUETOOTH_TYPE_PANU))
+ return NM_BT_CAPABILITY_NAP;
+
+ return NM_BT_CAPABILITY_NONE;
+}
+
+static gboolean
+connection_compatible (NMDevice *device, NMConnection *connection, GError **error)
+{
+ NMSettingBluetooth *s_bt;
+ const char *hw_addr, *setting_addr;
+ NMBluetoothCapabilities dev_caps;
+ NMBluetoothCapabilities bt_type;
+
+ if (!NM_DEVICE_CLASS (nm_device_bt_parent_class)->connection_compatible (device, connection, error))
+ return FALSE;
+
+ if (!nm_connection_is_type (connection, NM_SETTING_BLUETOOTH_SETTING_NAME)) {
+ g_set_error (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION,
+ _("The connection was not a Bluetooth connection."));
+ return FALSE;
+ }
+
+ /* Check BT address */
+ hw_addr = nm_device_bt_get_hw_address (NM_DEVICE_BT (device));
+ if (hw_addr) {
+ if (!nm_utils_hwaddr_valid (hw_addr, ETH_ALEN)) {
+ g_set_error_literal (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_FAILED,
+ _("Invalid device Bluetooth address."));
+ return FALSE;
+ }
+ s_bt = nm_connection_get_setting_bluetooth (connection);
+ setting_addr = nm_setting_bluetooth_get_bdaddr (s_bt);
+ if (setting_addr && !nm_utils_hwaddr_matches (setting_addr, -1, hw_addr, -1)) {
+ g_set_error_literal (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION,
+ _("The Bluetooth addresses of the device and the connection didn't match."));
+ return FALSE;
+ }
+ }
+
+ dev_caps = nm_device_bt_get_capabilities (NM_DEVICE_BT (device));
+ bt_type = get_connection_bt_type (connection);
+ if (!(bt_type & dev_caps)) {
+ g_set_error_literal (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION,
+ _("The device is lacking Bluetooth capabilities required by the connection."));
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+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));
+}
+
+/************************************************************/
+
+static void
+nm_device_bt_init (NMDeviceBt *device)
+{
+ _nm_device_set_device_type (NM_DEVICE (device), NM_DEVICE_TYPE_BT);
+}
+
+static void
+init_dbus (NMObject *object)
+{
+ NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (object);
+ const NMPropertiesInfo property_info[] = {
+ { NM_DEVICE_BT_HW_ADDRESS, &priv->hw_address },
+ { NM_DEVICE_BT_NAME, &priv->name },
+ { NM_DEVICE_BT_CAPABILITIES, &priv->bt_capabilities },
+ { NULL },
+ };
+
+ NM_OBJECT_CLASS (nm_device_bt_parent_class)->init_dbus (object);
+
+ _nm_object_register_properties (object,
+ NM_DBUS_INTERFACE_DEVICE_BLUETOOTH,
+ property_info);
+}
+
+static void
+finalize (GObject *object)
+{
+ NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (object);
+
+ g_free (priv->hw_address);
+ g_free (priv->name);
+
+ G_OBJECT_CLASS (nm_device_bt_parent_class)->finalize (object);
+}
+
+static void
+get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NMDeviceBt *device = NM_DEVICE_BT (object);
+
+ switch (prop_id) {
+ case PROP_HW_ADDRESS:
+ g_value_set_string (value, nm_device_bt_get_hw_address (device));
+ break;
+ case PROP_NAME:
+ g_value_set_string (value, nm_device_bt_get_name (device));
+ break;
+ case PROP_BT_CAPABILITIES:
+ g_value_set_flags (value, nm_device_bt_get_capabilities (device));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_device_bt_class_init (NMDeviceBtClass *bt_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (bt_class);
+ NMObjectClass *nm_object_class = NM_OBJECT_CLASS (bt_class);
+ NMDeviceClass *device_class = NM_DEVICE_CLASS (bt_class);
+
+ g_type_class_add_private (bt_class, sizeof (NMDeviceBtPrivate));
+
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_BLUETOOTH);
+
+ /* virtual methods */
+ object_class->finalize = finalize;
+ object_class->get_property = get_property;
+
+ nm_object_class->init_dbus = init_dbus;
+
+ device_class->connection_compatible = connection_compatible;
+ device_class->get_setting_type = get_setting_type;
+ device_class->get_hw_address = get_hw_address;
+
+ /* properties */
+
+ /**
+ * NMDeviceBt: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_BT_HW_ADDRESS, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDeviceBt:name:
+ *
+ * The name of the bluetooth device.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_NAME,
+ g_param_spec_string (NM_DEVICE_BT_NAME, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDeviceBt:bt-capabilities:
+ *
+ * The device's bluetooth capabilities, a combination of #NMBluetoothCapabilities.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_BT_CAPABILITIES,
+ g_param_spec_flags (NM_DEVICE_BT_CAPABILITIES, "", "",
+ NM_TYPE_BLUETOOTH_CAPABILITIES,
+ NM_BT_CAPABILITY_NONE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+}
diff --git a/libnm/nm-device-bt.h b/libnm/nm-device-bt.h
new file mode 100644
index 000000000..e066cbcd8
--- /dev/null
+++ b/libnm/nm-device-bt.h
@@ -0,0 +1,65 @@
+/* -*- 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 2008 - 2012 Red Hat, Inc.
+ * Copyright 2008 Novell, Inc.
+ */
+
+#ifndef __NM_DEVICE_BT_H__
+#define __NM_DEVICE_BT_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-device.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_DEVICE_BT (nm_device_bt_get_type ())
+#define NM_DEVICE_BT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEVICE_BT, NMDeviceBt))
+#define NM_DEVICE_BT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DEVICE_BT, NMDeviceBtClass))
+#define NM_IS_DEVICE_BT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEVICE_BT))
+#define NM_IS_DEVICE_BT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_BT))
+#define NM_DEVICE_BT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_BT, NMDeviceBtClass))
+
+#define NM_DEVICE_BT_HW_ADDRESS "hw-address"
+#define NM_DEVICE_BT_NAME "name"
+#define NM_DEVICE_BT_CAPABILITIES "bt-capabilities"
+
+struct _NMDeviceBt {
+ NMDevice parent;
+};
+
+typedef struct {
+ NMDeviceClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMDeviceBtClass;
+
+GType nm_device_bt_get_type (void);
+
+const char *nm_device_bt_get_hw_address (NMDeviceBt *device);
+
+const char *nm_device_bt_get_name (NMDeviceBt *device);
+
+NMBluetoothCapabilities nm_device_bt_get_capabilities (NMDeviceBt *device);
+
+G_END_DECLS
+
+#endif /* __NM_DEVICE_BT_H__ */
diff --git a/libnm/nm-device-ethernet.c b/libnm/nm-device-ethernet.c
new file mode 100644
index 000000000..be2cb4dc4
--- /dev/null
+++ b/libnm/nm-device-ethernet.c
@@ -0,0 +1,317 @@
+/* -*- 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 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2012 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <glib/gi18n-lib.h>
+
+#include "nm-glib-compat.h"
+
+#include <nm-setting-connection.h>
+#include <nm-setting-wired.h>
+#include <nm-setting-pppoe.h>
+#include <nm-utils.h>
+
+#include "nm-device-ethernet.h"
+#include "nm-device-private.h"
+#include "nm-object-private.h"
+
+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))
+
+typedef struct {
+ char *hw_address;
+ char *perm_hw_address;
+ guint32 speed;
+ gboolean carrier;
+} NMDeviceEthernetPrivate;
+
+enum {
+ PROP_0,
+ PROP_HW_ADDRESS,
+ PROP_PERM_HW_ADDRESS,
+ PROP_SPEED,
+ PROP_CARRIER,
+
+ LAST_PROP
+};
+
+/**
+ * nm_device_ethernet_get_hw_address:
+ * @device: a #NMDeviceEthernet
+ *
+ * Gets the active hardware (MAC) address of the #NMDeviceEthernet
+ *
+ * Returns: the active hardware address. This is the internal string used by the
+ * device, and must not be modified.
+ **/
+const char *
+nm_device_ethernet_get_hw_address (NMDeviceEthernet *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_ETHERNET (device), NULL);
+
+ return NM_DEVICE_ETHERNET_GET_PRIVATE (device)->hw_address;
+}
+
+/**
+ * nm_device_ethernet_get_permanent_hw_address:
+ * @device: a #NMDeviceEthernet
+ *
+ * Gets the permanent hardware (MAC) address of the #NMDeviceEthernet
+ *
+ * Returns: the permanent hardware address. This is the internal string used by the
+ * device, and must not be modified.
+ **/
+const char *
+nm_device_ethernet_get_permanent_hw_address (NMDeviceEthernet *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_ETHERNET (device), NULL);
+
+ return NM_DEVICE_ETHERNET_GET_PRIVATE (device)->perm_hw_address;
+}
+
+/**
+ * nm_device_ethernet_get_speed:
+ * @device: a #NMDeviceEthernet
+ *
+ * Gets the speed of the #NMDeviceEthernet.
+ *
+ * Returns: the speed of the device
+ **/
+guint32
+nm_device_ethernet_get_speed (NMDeviceEthernet *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_ETHERNET (device), 0);
+
+ return NM_DEVICE_ETHERNET_GET_PRIVATE (device)->speed;
+}
+
+/**
+ * nm_device_ethernet_get_carrier:
+ * @device: a #NMDeviceEthernet
+ *
+ * Whether the device has carrier.
+ *
+ * Returns: %TRUE if the device has carrier
+ **/
+gboolean
+nm_device_ethernet_get_carrier (NMDeviceEthernet *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_ETHERNET (device), FALSE);
+
+ return NM_DEVICE_ETHERNET_GET_PRIVATE (device)->carrier;
+}
+
+static gboolean
+connection_compatible (NMDevice *device, NMConnection *connection, GError **error)
+{
+ NMSettingWired *s_wired;
+ gboolean is_pppoe = FALSE;
+
+ if (!NM_DEVICE_CLASS (nm_device_ethernet_parent_class)->connection_compatible (device, connection, error))
+ return FALSE;
+
+ if (nm_connection_is_type (connection, NM_SETTING_PPPOE_SETTING_NAME))
+ is_pppoe = TRUE;
+ else if (!nm_connection_is_type (connection, NM_SETTING_WIRED_SETTING_NAME)) {
+ g_set_error_literal (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION,
+ _("The connection was not an Ethernet or PPPoE connection."));
+ return FALSE;
+ }
+
+ s_wired = nm_connection_get_setting_wired (connection);
+ /* Wired setting optional for PPPoE */
+ if (s_wired) {
+ const char *perm_addr, *setting_addr;
+
+ /* FIXME: filter using s390 subchannels when they are exported over the bus */
+
+ /* Check MAC address */
+ perm_addr = nm_device_ethernet_get_permanent_hw_address (NM_DEVICE_ETHERNET (device));
+ if (perm_addr) {
+ if (!nm_utils_hwaddr_valid (perm_addr, ETH_ALEN)) {
+ g_set_error_literal (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_FAILED,
+ _("Invalid device MAC address."));
+ return FALSE;
+ }
+ setting_addr = nm_setting_wired_get_mac_address (s_wired);
+ if (setting_addr && !nm_utils_hwaddr_matches (setting_addr, -1, perm_addr, -1)) {
+ g_set_error_literal (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION,
+ _("The MACs of the device and the connection didn't match."));
+ return FALSE;
+ }
+ }
+ }
+
+ return TRUE;
+}
+
+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));
+}
+
+/***********************************************************/
+
+static void
+nm_device_ethernet_init (NMDeviceEthernet *device)
+{
+ _nm_device_set_device_type (NM_DEVICE (device), NM_DEVICE_TYPE_ETHERNET);
+}
+
+static void
+init_dbus (NMObject *object)
+{
+ NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (object);
+ const NMPropertiesInfo property_info[] = {
+ { NM_DEVICE_ETHERNET_HW_ADDRESS, &priv->hw_address },
+ { NM_DEVICE_ETHERNET_PERMANENT_HW_ADDRESS, &priv->perm_hw_address },
+ { NM_DEVICE_ETHERNET_SPEED, &priv->speed },
+ { NM_DEVICE_ETHERNET_CARRIER, &priv->carrier },
+ { NULL },
+ };
+
+ NM_OBJECT_CLASS (nm_device_ethernet_parent_class)->init_dbus (object);
+
+ _nm_object_register_properties (object,
+ NM_DBUS_INTERFACE_DEVICE_WIRED,
+ property_info);
+}
+
+static void
+finalize (GObject *object)
+{
+ NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (object);
+
+ g_free (priv->hw_address);
+ g_free (priv->perm_hw_address);
+
+ G_OBJECT_CLASS (nm_device_ethernet_parent_class)->finalize (object);
+}
+
+static void
+get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NMDeviceEthernet *device = NM_DEVICE_ETHERNET (object);
+
+ switch (prop_id) {
+ case PROP_HW_ADDRESS:
+ g_value_set_string (value, nm_device_ethernet_get_hw_address (device));
+ break;
+ case PROP_PERM_HW_ADDRESS:
+ g_value_set_string (value, nm_device_ethernet_get_permanent_hw_address (device));
+ break;
+ case PROP_SPEED:
+ g_value_set_uint (value, nm_device_ethernet_get_speed (device));
+ break;
+ case PROP_CARRIER:
+ g_value_set_boolean (value, nm_device_ethernet_get_carrier (device));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_device_ethernet_class_init (NMDeviceEthernetClass *eth_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (eth_class);
+ NMObjectClass *nm_object_class = NM_OBJECT_CLASS (eth_class);
+ NMDeviceClass *device_class = NM_DEVICE_CLASS (eth_class);
+
+ g_type_class_add_private (eth_class, sizeof (NMDeviceEthernetPrivate));
+
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_WIRED);
+
+ /* virtual methods */
+ object_class->finalize = finalize;
+ object_class->get_property = get_property;
+
+ nm_object_class->init_dbus = init_dbus;
+
+ device_class->connection_compatible = connection_compatible;
+ device_class->get_setting_type = get_setting_type;
+ device_class->get_hw_address = get_hw_address;
+
+ /* properties */
+
+ /**
+ * NMDeviceEthernet:hw-address:
+ *
+ * The active hardware (MAC) address of the device.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_HW_ADDRESS,
+ g_param_spec_string (NM_DEVICE_ETHERNET_HW_ADDRESS, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDeviceEthernet:perm-hw-address:
+ *
+ * The permanent hardware (MAC) address of the device.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_PERM_HW_ADDRESS,
+ g_param_spec_string (NM_DEVICE_ETHERNET_PERMANENT_HW_ADDRESS, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDeviceEthernet:speed:
+ *
+ * The speed of the device.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_SPEED,
+ g_param_spec_uint (NM_DEVICE_ETHERNET_SPEED, "", "",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDeviceEthernet:carrier:
+ *
+ * Whether the device has carrier.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_CARRIER,
+ g_param_spec_boolean (NM_DEVICE_ETHERNET_CARRIER, "", "",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+}
diff --git a/libnm/nm-device-ethernet.h b/libnm/nm-device-ethernet.h
new file mode 100644
index 000000000..09286e73a
--- /dev/null
+++ b/libnm/nm-device-ethernet.h
@@ -0,0 +1,65 @@
+/* -*- 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 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2012 Red Hat, Inc.
+ */
+
+#ifndef __NM_DEVICE_ETHERNET_H__
+#define __NM_DEVICE_ETHERNET_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-device.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_DEVICE_ETHERNET (nm_device_ethernet_get_type ())
+#define NM_DEVICE_ETHERNET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEVICE_ETHERNET, NMDeviceEthernet))
+#define NM_DEVICE_ETHERNET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DEVICE_ETHERNET, NMDeviceEthernetClass))
+#define NM_IS_DEVICE_ETHERNET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEVICE_ETHERNET))
+#define NM_IS_DEVICE_ETHERNET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_ETHERNET))
+#define NM_DEVICE_ETHERNET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_ETHERNET, NMDeviceEthernetClass))
+
+#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"
+
+struct _NMDeviceEthernet {
+ NMDevice parent;
+};
+
+typedef struct {
+ NMDeviceClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMDeviceEthernetClass;
+
+GType nm_device_ethernet_get_type (void);
+
+const char * nm_device_ethernet_get_hw_address (NMDeviceEthernet *device);
+const char * nm_device_ethernet_get_permanent_hw_address (NMDeviceEthernet *device);
+guint32 nm_device_ethernet_get_speed (NMDeviceEthernet *device);
+gboolean nm_device_ethernet_get_carrier (NMDeviceEthernet *device);
+
+G_END_DECLS
+
+#endif /* __NM_DEVICE_ETHERNET_H__ */
diff --git a/libnm/nm-device-generic.c b/libnm/nm-device-generic.c
new file mode 100644
index 000000000..3ed0fa7e6
--- /dev/null
+++ b/libnm/nm-device-generic.c
@@ -0,0 +1,214 @@
+/* -*- 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 <string.h>
+#include <glib/gi18n-lib.h>
+
+#include "nm-device-generic.h"
+#include "nm-device-private.h"
+#include "nm-object-private.h"
+#include "nm-setting-generic.h"
+#include "nm-setting-connection.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 *hw_address;
+ char *type_description;
+} NMDeviceGenericPrivate;
+
+enum {
+ PROP_0,
+ PROP_HW_ADDRESS,
+ PROP_TYPE_DESCRIPTION,
+
+ LAST_PROP
+};
+
+/**
+ * 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.
+ **/
+const char *
+nm_device_generic_get_hw_address (NMDeviceGeneric *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_GENERIC (device), NULL);
+
+ 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);
+
+ 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)
+{
+ const char *iface_name;
+
+ if (!NM_DEVICE_CLASS (nm_device_generic_parent_class)->connection_compatible (device, connection, error))
+ return FALSE;
+
+ if (!nm_connection_is_type (connection, NM_SETTING_GENERIC_SETTING_NAME)) {
+ g_set_error_literal (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION,
+ _("The connection was not a generic connection."));
+ return FALSE;
+ }
+
+ iface_name = nm_connection_get_interface_name (connection);
+ if (!iface_name) {
+ g_set_error_literal (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_INVALID_CONNECTION,
+ _("The connection did not specify an interface name."));
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+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
+init_dbus (NMObject *object)
+{
+ NMDeviceGenericPrivate *priv = NM_DEVICE_GENERIC_GET_PRIVATE (object);
+ const NMPropertiesInfo property_info[] = {
+ { NM_DEVICE_GENERIC_HW_ADDRESS, &priv->hw_address },
+ { NM_DEVICE_GENERIC_TYPE_DESCRIPTION, &priv->type_description },
+ { NULL },
+ };
+
+ NM_OBJECT_CLASS (nm_device_generic_parent_class)->init_dbus (object);
+
+ _nm_object_register_properties (object,
+ NM_DBUS_INTERFACE_DEVICE_GENERIC,
+ property_info);
+}
+
+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);
+
+ 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);
+ NMObjectClass *nm_object_class = NM_OBJECT_CLASS (klass);
+ NMDeviceClass *device_class = NM_DEVICE_CLASS (klass);
+
+ g_type_class_add_private (klass, sizeof (NMDeviceGenericPrivate));
+
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_GENERIC);
+
+ object_class->finalize = finalize;
+ object_class->get_property = get_property;
+
+ nm_object_class->init_dbus = init_dbus;
+
+ 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, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * 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, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/libnm/nm-device-generic.h b/libnm/nm-device-generic.h
new file mode 100644
index 000000000..457a88403
--- /dev/null
+++ b/libnm/nm-device-generic.h
@@ -0,0 +1,59 @@
+/* -*- 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_DEVICE_GENERIC_H__
+#define __NM_DEVICE_GENERIC_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#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))
+
+#define NM_DEVICE_GENERIC_HW_ADDRESS "hw-address"
+#define NM_DEVICE_GENERIC_TYPE_DESCRIPTION "type-description"
+
+struct _NMDeviceGeneric {
+ NMDevice parent;
+};
+
+typedef struct {
+ NMDeviceClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMDeviceGenericClass;
+
+GType nm_device_generic_get_type (void);
+
+const char *nm_device_generic_get_hw_address (NMDeviceGeneric *device);
+
+G_END_DECLS
+
+#endif /* __NM_DEVICE_GENERIC_H__ */
diff --git a/libnm/nm-device-infiniband.c b/libnm/nm-device-infiniband.c
new file mode 100644
index 000000000..bce8a87aa
--- /dev/null
+++ b/libnm/nm-device-infiniband.c
@@ -0,0 +1,236 @@
+/* -*- 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 2011 - 2012 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <glib/gi18n-lib.h>
+
+#include "nm-glib-compat.h"
+
+#include <nm-setting-connection.h>
+#include <nm-setting-infiniband.h>
+#include <nm-utils.h>
+
+#include "nm-device-infiniband.h"
+#include "nm-device-private.h"
+#include "nm-object-private.h"
+
+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))
+
+typedef struct {
+ char *hw_address;
+ gboolean carrier;
+} NMDeviceInfinibandPrivate;
+
+enum {
+ PROP_0,
+ PROP_HW_ADDRESS,
+ PROP_CARRIER,
+
+ LAST_PROP
+};
+
+/**
+ * nm_device_infiniband_get_hw_address:
+ * @device: a #NMDeviceInfiniband
+ *
+ * Gets the hardware (MAC) address of the #NMDeviceInfiniband
+ *
+ * Returns: the hardware address. This is the internal string used by the
+ * device, and must not be modified.
+ **/
+const char *
+nm_device_infiniband_get_hw_address (NMDeviceInfiniband *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_INFINIBAND (device), NULL);
+
+ return NM_DEVICE_INFINIBAND_GET_PRIVATE (device)->hw_address;
+}
+
+/**
+ * nm_device_infiniband_get_carrier:
+ * @device: a #NMDeviceInfiniband
+ *
+ * Whether the device has carrier.
+ *
+ * Returns: %TRUE if the device has carrier
+ **/
+gboolean
+nm_device_infiniband_get_carrier (NMDeviceInfiniband *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_INFINIBAND (device), FALSE);
+
+ return NM_DEVICE_INFINIBAND_GET_PRIVATE (device)->carrier;
+}
+
+static gboolean
+connection_compatible (NMDevice *device, NMConnection *connection, GError **error)
+{
+ NMSettingInfiniband *s_infiniband;
+ const char *hwaddr, *setting_hwaddr;
+
+ if (!NM_DEVICE_CLASS (nm_device_infiniband_parent_class)->connection_compatible (device, connection, error))
+ return FALSE;
+
+ if (!nm_connection_is_type (connection, NM_SETTING_INFINIBAND_SETTING_NAME)) {
+ g_set_error_literal (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION,
+ _("The connection was not an InfiniBand connection."));
+ return FALSE;
+ }
+
+ hwaddr = nm_device_infiniband_get_hw_address (NM_DEVICE_INFINIBAND (device));
+ if (hwaddr) {
+ if (!nm_utils_hwaddr_valid (hwaddr, INFINIBAND_ALEN)) {
+ g_set_error_literal (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_FAILED,
+ _("Invalid device MAC address."));
+ return FALSE;
+ }
+
+ s_infiniband = nm_connection_get_setting_infiniband (connection);
+ setting_hwaddr = nm_setting_infiniband_get_mac_address (s_infiniband);
+ if (setting_hwaddr && !nm_utils_hwaddr_matches (setting_hwaddr, -1, hwaddr, -1)) {
+ g_set_error_literal (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION,
+ _("The MACs of the device and the connection didn't match."));
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+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));
+}
+
+/***********************************************************/
+
+static void
+nm_device_infiniband_init (NMDeviceInfiniband *device)
+{
+ _nm_device_set_device_type (NM_DEVICE (device), NM_DEVICE_TYPE_INFINIBAND);
+}
+
+static void
+init_dbus (NMObject *object)
+{
+ NMDeviceInfinibandPrivate *priv = NM_DEVICE_INFINIBAND_GET_PRIVATE (object);
+ const NMPropertiesInfo property_info[] = {
+ { NM_DEVICE_INFINIBAND_HW_ADDRESS, &priv->hw_address },
+ { NM_DEVICE_INFINIBAND_CARRIER, &priv->carrier },
+ { NULL },
+ };
+
+ NM_OBJECT_CLASS (nm_device_infiniband_parent_class)->init_dbus (object);
+
+ _nm_object_register_properties (object,
+ NM_DBUS_INTERFACE_DEVICE_INFINIBAND,
+ property_info);
+}
+
+static void
+finalize (GObject *object)
+{
+ NMDeviceInfinibandPrivate *priv = NM_DEVICE_INFINIBAND_GET_PRIVATE (object);
+
+ g_free (priv->hw_address);
+
+ G_OBJECT_CLASS (nm_device_infiniband_parent_class)->finalize (object);
+}
+
+static void
+get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NMDeviceInfiniband *device = NM_DEVICE_INFINIBAND (object);
+
+ switch (prop_id) {
+ case PROP_HW_ADDRESS:
+ g_value_set_string (value, nm_device_infiniband_get_hw_address (device));
+ break;
+ case PROP_CARRIER:
+ g_value_set_boolean (value, nm_device_infiniband_get_carrier (device));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_device_infiniband_class_init (NMDeviceInfinibandClass *ib_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (ib_class);
+ NMObjectClass *nm_object_class = NM_OBJECT_CLASS (ib_class);
+ NMDeviceClass *device_class = NM_DEVICE_CLASS (ib_class);
+
+ g_type_class_add_private (ib_class, sizeof (NMDeviceInfinibandPrivate));
+
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_INFINIBAND);
+
+ /* virtual methods */
+ object_class->finalize = finalize;
+ object_class->get_property = get_property;
+
+ nm_object_class->init_dbus = init_dbus;
+
+ device_class->connection_compatible = connection_compatible;
+ device_class->get_setting_type = get_setting_type;
+ device_class->get_hw_address = get_hw_address;
+
+ /* properties */
+
+ /**
+ * NMDeviceInfiniband: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_INFINIBAND_HW_ADDRESS, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDeviceInfiniband:carrier:
+ *
+ * Whether the device has carrier.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_CARRIER,
+ g_param_spec_boolean (NM_DEVICE_INFINIBAND_CARRIER, "", "",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+}
diff --git a/libnm/nm-device-infiniband.h b/libnm/nm-device-infiniband.h
new file mode 100644
index 000000000..c1f9be073
--- /dev/null
+++ b/libnm/nm-device-infiniband.h
@@ -0,0 +1,60 @@
+/* -*- 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 2011 - 2012 Red Hat, Inc.
+ */
+
+#ifndef __NM_DEVICE_INFINIBAND_H__
+#define __NM_DEVICE_INFINIBAND_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-device.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_DEVICE_INFINIBAND (nm_device_infiniband_get_type ())
+#define NM_DEVICE_INFINIBAND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEVICE_INFINIBAND, NMDeviceInfiniband))
+#define NM_DEVICE_INFINIBAND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DEVICE_INFINIBAND, NMDeviceInfinibandClass))
+#define NM_IS_DEVICE_INFINIBAND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEVICE_INFINIBAND))
+#define NM_IS_DEVICE_INFINIBAND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_INFINIBAND))
+#define NM_DEVICE_INFINIBAND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_INFINIBAND, NMDeviceInfinibandClass))
+
+#define NM_DEVICE_INFINIBAND_HW_ADDRESS "hw-address"
+#define NM_DEVICE_INFINIBAND_CARRIER "carrier"
+
+struct _NMDeviceInfiniband {
+ NMDevice parent;
+};
+
+typedef struct {
+ NMDeviceClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMDeviceInfinibandClass;
+
+GType nm_device_infiniband_get_type (void);
+
+const char * nm_device_infiniband_get_hw_address (NMDeviceInfiniband *device);
+gboolean nm_device_infiniband_get_carrier (NMDeviceInfiniband *device);
+
+G_END_DECLS
+
+#endif /* __NM_DEVICE_INFINIBAND_H__ */
diff --git a/libnm/nm-device-modem.c b/libnm/nm-device-modem.c
new file mode 100644
index 000000000..dcbb447a2
--- /dev/null
+++ b/libnm/nm-device-modem.c
@@ -0,0 +1,254 @@
+/* -*- 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 2011 - 2012 Red Hat, Inc.
+ * Copyright 2008 Novell, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <glib/gi18n-lib.h>
+
+#include "nm-glib-compat.h"
+
+#include <nm-setting-connection.h>
+#include <nm-setting-gsm.h>
+#include <nm-setting-cdma.h>
+
+#include "nm-device-modem.h"
+#include "nm-device-private.h"
+#include "nm-object-private.h"
+#include "nm-enum-types.h"
+
+G_DEFINE_TYPE (NMDeviceModem, nm_device_modem, NM_TYPE_DEVICE)
+
+#define NM_DEVICE_MODEM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_MODEM, NMDeviceModemPrivate))
+
+typedef struct {
+ NMDeviceModemCapabilities caps;
+ NMDeviceModemCapabilities current_caps;
+} NMDeviceModemPrivate;
+
+enum {
+ PROP_0,
+ PROP_MODEM_CAPS,
+ PROP_CURRENT_CAPS,
+ LAST_PROP
+};
+
+/**
+ * nm_device_modem_get_modem_capabilities:
+ * @self: a #NMDeviceModem
+ *
+ * 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.
+ *
+ * Returns: the generic access technology families the modem supports
+ **/
+NMDeviceModemCapabilities
+nm_device_modem_get_modem_capabilities (NMDeviceModem *self)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_MODEM (self), NM_DEVICE_MODEM_CAPABILITY_NONE);
+
+ return NM_DEVICE_MODEM_GET_PRIVATE (self)->caps;
+}
+
+/**
+ * nm_device_modem_get_current_capabilities:
+ * @self: a #NMDeviceModem
+ *
+ * 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.
+ *
+ * Returns: the generic access technology families the modem supports without
+ * a firmware reload or other reinitialization
+ **/
+NMDeviceModemCapabilities
+nm_device_modem_get_current_capabilities (NMDeviceModem *self)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_MODEM (self), NM_DEVICE_MODEM_CAPABILITY_NONE);
+
+ 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)
+{
+ NMSettingGsm *s_gsm;
+ NMSettingCdma *s_cdma;
+ NMDeviceModemCapabilities current_caps;
+
+ if (!NM_DEVICE_CLASS (nm_device_modem_parent_class)->connection_compatible (device, connection, error))
+ return FALSE;
+
+ if ( !nm_connection_is_type (connection, NM_SETTING_GSM_SETTING_NAME)
+ && !nm_connection_is_type (connection, NM_SETTING_CDMA_SETTING_NAME)) {
+ g_set_error_literal (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION,
+ _("The connection was not a modem connection."));
+ return FALSE;
+ }
+
+ s_gsm = nm_connection_get_setting_gsm (connection);
+ s_cdma = nm_connection_get_setting_cdma (connection);
+ if (!s_cdma && !s_gsm) {
+ g_set_error_literal (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_INVALID_CONNECTION,
+ _("The connection was not a valid modem connection."));
+ return FALSE;
+ }
+
+ current_caps = nm_device_modem_get_current_capabilities (NM_DEVICE_MODEM (device));
+ if (!(s_gsm && MODEM_CAPS_3GPP (current_caps)) && !(s_cdma && MODEM_CAPS_3GPP2 (current_caps))) {
+ g_set_error_literal (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION,
+ _("The device is lacking capabilities required by the connection."));
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+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;
+}
+
+/*******************************************************************/
+
+static void
+nm_device_modem_init (NMDeviceModem *device)
+{
+ _nm_device_set_device_type (NM_DEVICE (device), NM_DEVICE_TYPE_MODEM);
+}
+
+static void
+init_dbus (NMObject *object)
+{
+ NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (object);
+ const NMPropertiesInfo property_info[] = {
+ { NM_DEVICE_MODEM_MODEM_CAPABILITIES, &priv->caps },
+ { NM_DEVICE_MODEM_CURRENT_CAPABILITIES, &priv->current_caps },
+ { NULL },
+ };
+
+ NM_OBJECT_CLASS (nm_device_modem_parent_class)->init_dbus (object);
+
+ _nm_object_register_properties (object,
+ NM_DBUS_INTERFACE_DEVICE_MODEM,
+ property_info);
+}
+
+static void
+get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NMDeviceModem *self = NM_DEVICE_MODEM (object);
+
+ switch (prop_id) {
+ case PROP_MODEM_CAPS:
+ g_value_set_flags (value, nm_device_modem_get_modem_capabilities (self));
+ break;
+ case PROP_CURRENT_CAPS:
+ g_value_set_flags (value, nm_device_modem_get_current_capabilities (self));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_device_modem_class_init (NMDeviceModemClass *modem_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (modem_class);
+ NMObjectClass *nm_object_class = NM_OBJECT_CLASS (modem_class);
+ NMDeviceClass *device_class = NM_DEVICE_CLASS (modem_class);
+
+ g_type_class_add_private (modem_class, sizeof (NMDeviceModemPrivate));
+
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_MODEM);
+
+ /* virtual methods */
+ object_class->get_property = get_property;
+
+ nm_object_class->init_dbus = init_dbus;
+
+ 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:
+ *
+ * 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.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_MODEM_CAPS,
+ g_param_spec_flags (NM_DEVICE_MODEM_MODEM_CAPABILITIES, "", "",
+ NM_TYPE_DEVICE_MODEM_CAPABILITIES,
+ NM_DEVICE_MODEM_CAPABILITY_NONE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDeviceModem:current-capabilities:
+ *
+ * The generic family of access technologies the modem currently supports
+ * without a firmware reload or reinitialization.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_CURRENT_CAPS,
+ g_param_spec_flags (NM_DEVICE_MODEM_CURRENT_CAPABILITIES, "", "",
+ NM_TYPE_DEVICE_MODEM_CAPABILITIES,
+ NM_DEVICE_MODEM_CAPABILITY_NONE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/libnm/nm-device-modem.h b/libnm/nm-device-modem.h
new file mode 100644
index 000000000..38a4ddbb7
--- /dev/null
+++ b/libnm/nm-device-modem.h
@@ -0,0 +1,61 @@
+/* -*- 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 2011 - 2012 Red Hat, Inc.
+ * Copyright 2008 Novell, Inc.
+ */
+
+#ifndef __NM_DEVICE_MODEM_H__
+#define __NM_DEVICE_MODEM_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-device.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_DEVICE_MODEM (nm_device_modem_get_type ())
+#define NM_DEVICE_MODEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEVICE_MODEM, NMDeviceModem))
+#define NM_DEVICE_MODEM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DEVICE_MODEM, NMDeviceModemClass))
+#define NM_IS_DEVICE_MODEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEVICE_MODEM))
+#define NM_IS_DEVICE_MODEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_MODEM))
+#define NM_DEVICE_MODEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_MODEM, NMDeviceModemClass))
+
+#define NM_DEVICE_MODEM_MODEM_CAPABILITIES "modem-capabilities"
+#define NM_DEVICE_MODEM_CURRENT_CAPABILITIES "current-capabilities"
+
+struct _NMDeviceModem {
+ NMDevice parent;
+};
+
+typedef struct {
+ NMDeviceClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMDeviceModemClass;
+
+GType nm_device_modem_get_type (void);
+
+NMDeviceModemCapabilities nm_device_modem_get_modem_capabilities (NMDeviceModem *self);
+NMDeviceModemCapabilities nm_device_modem_get_current_capabilities (NMDeviceModem *self);
+
+G_END_DECLS
+
+#endif /* __NM_DEVICE_MODEM_H__ */
diff --git a/libnm/nm-device-olpc-mesh.c b/libnm/nm-device-olpc-mesh.c
new file mode 100644
index 000000000..108e53398
--- /dev/null
+++ b/libnm/nm-device-olpc-mesh.c
@@ -0,0 +1,261 @@
+/* -*- 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 2012 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <glib/gi18n-lib.h>
+
+#include "nm-glib-compat.h"
+
+#include <nm-setting-connection.h>
+#include <nm-setting-olpc-mesh.h>
+
+#include "nm-device-olpc-mesh.h"
+#include "nm-device-private.h"
+#include "nm-object-private.h"
+#include "nm-device-wifi.h"
+
+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))
+
+typedef struct {
+ char *hw_address;
+ NMDeviceWifi *companion;
+ guint32 active_channel;
+} NMDeviceOlpcMeshPrivate;
+
+enum {
+ PROP_0,
+ PROP_HW_ADDRESS,
+ PROP_COMPANION,
+ PROP_ACTIVE_CHANNEL,
+
+ LAST_PROP
+};
+
+/**
+ * nm_device_olpc_mesh_get_hw_address:
+ * @device: a #NMDeviceOlpcMesh
+ *
+ * Gets the hardware (MAC) address of the #NMDeviceOlpcMesh
+ *
+ * Returns: the hardware address. This is the internal string used by the
+ * device, and must not be modified.
+ **/
+const char *
+nm_device_olpc_mesh_get_hw_address (NMDeviceOlpcMesh *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_OLPC_MESH (device), NULL);
+
+ return NM_DEVICE_OLPC_MESH_GET_PRIVATE (device)->hw_address;
+}
+
+/**
+ * nm_device_olpc_mesh_get_companion:
+ * @device: a #NMDeviceOlpcMesh
+ *
+ * Gets the companion device of the #NMDeviceOlpcMesh.
+ *
+ * Returns: (transfer none): the companion of the device of %NULL
+ **/
+NMDeviceWifi *
+nm_device_olpc_mesh_get_companion (NMDeviceOlpcMesh *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_OLPC_MESH (device), NULL);
+
+ return NM_DEVICE_OLPC_MESH_GET_PRIVATE (device)->companion;
+}
+
+/**
+ * nm_device_olpc_mesh_get_active_channel:
+ * @device: a #NMDeviceOlpcMesh
+ *
+ * Returns the active channel of the #NMDeviceOlpcMesh device.
+ *
+ * Returns: active channel of the device
+ **/
+guint32
+nm_device_olpc_mesh_get_active_channel (NMDeviceOlpcMesh *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_OLPC_MESH (device), 0);
+
+ 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)
+{
+ if (!NM_DEVICE_CLASS (nm_device_olpc_mesh_parent_class)->connection_compatible (device, connection, error))
+ return FALSE;
+
+ if (!nm_connection_is_type (connection, NM_SETTING_OLPC_MESH_SETTING_NAME)) {
+ g_set_error_literal (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION,
+ _("The connection was not an OLPC Mesh connection."));
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static GType
+get_setting_type (NMDevice *device)
+{
+ return NM_TYPE_SETTING_OLPC_MESH;
+}
+
+/**************************************************************/
+
+static void
+nm_device_olpc_mesh_init (NMDeviceOlpcMesh *device)
+{
+ _nm_device_set_device_type (NM_DEVICE (device), NM_DEVICE_TYPE_OLPC_MESH);
+}
+
+static void
+init_dbus (NMObject *object)
+{
+ NMDeviceOlpcMeshPrivate *priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (object);
+ const NMPropertiesInfo property_info[] = {
+ { NM_DEVICE_OLPC_MESH_HW_ADDRESS, &priv->hw_address },
+ { NM_DEVICE_OLPC_MESH_COMPANION, &priv->companion, NULL, NM_TYPE_DEVICE_WIFI },
+ { NM_DEVICE_OLPC_MESH_ACTIVE_CHANNEL, &priv->active_channel },
+ { NULL },
+ };
+
+ NM_OBJECT_CLASS (nm_device_olpc_mesh_parent_class)->init_dbus (object);
+
+ _nm_object_register_properties (object,
+ NM_DBUS_INTERFACE_DEVICE_OLPC_MESH,
+ property_info);
+}
+
+static void
+dispose (GObject *object)
+{
+ NMDeviceOlpcMeshPrivate *priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (object);
+
+ g_clear_object (&priv->companion);
+
+ G_OBJECT_CLASS (nm_device_olpc_mesh_parent_class)->dispose (object);
+}
+
+static void
+finalize (GObject *object)
+{
+ NMDeviceOlpcMeshPrivate *priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (object);
+
+ g_free (priv->hw_address);
+
+ G_OBJECT_CLASS (nm_device_olpc_mesh_parent_class)->finalize (object);
+}
+
+static void
+get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NMDeviceOlpcMesh *device = NM_DEVICE_OLPC_MESH (object);
+
+ switch (prop_id) {
+ case PROP_HW_ADDRESS:
+ g_value_set_string (value, nm_device_olpc_mesh_get_hw_address (device));
+ break;
+ case PROP_COMPANION:
+ g_value_set_object (value, nm_device_olpc_mesh_get_companion (device));
+ break;
+ case PROP_ACTIVE_CHANNEL:
+ g_value_set_uint (value, nm_device_olpc_mesh_get_active_channel (device));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_device_olpc_mesh_class_init (NMDeviceOlpcMeshClass *olpc_mesh_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (olpc_mesh_class);
+ NMObjectClass *nm_object_class = NM_OBJECT_CLASS (olpc_mesh_class);
+ NMDeviceClass *device_class = NM_DEVICE_CLASS (olpc_mesh_class);
+
+ g_type_class_add_private (olpc_mesh_class, sizeof (NMDeviceOlpcMeshPrivate));
+
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_OLPC_MESH);
+
+ /* virtual methods */
+ object_class->dispose = dispose;
+ object_class->finalize = finalize;
+ object_class->get_property = get_property;
+
+ nm_object_class->init_dbus = init_dbus;
+
+ device_class->connection_compatible = connection_compatible;
+ device_class->get_setting_type = get_setting_type;
+ device_class->get_hw_address = get_hw_address;
+
+ /* properties */
+
+ /**
+ * NMDeviceOlpcMesh: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_OLPC_MESH_HW_ADDRESS, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDeviceOlpcMesh:companion:
+ *
+ * The companion device.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_COMPANION,
+ g_param_spec_object (NM_DEVICE_OLPC_MESH_COMPANION, "", "",
+ NM_TYPE_DEVICE_WIFI,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDeviceOlpcMesh:active-channel:
+ *
+ * The device's active channel.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_ACTIVE_CHANNEL,
+ g_param_spec_uint (NM_DEVICE_OLPC_MESH_ACTIVE_CHANNEL, "", "",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+}
diff --git a/libnm/nm-device-olpc-mesh.h b/libnm/nm-device-olpc-mesh.h
new file mode 100644
index 000000000..b58994456
--- /dev/null
+++ b/libnm/nm-device-olpc-mesh.h
@@ -0,0 +1,62 @@
+/* -*- 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 2012 Red Hat, Inc.
+ */
+
+#ifndef __NM_DEVICE_OLPC_MESH_H__
+#define __NM_DEVICE_OLPC_MESH_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-device.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_DEVICE_OLPC_MESH (nm_device_olpc_mesh_get_type ())
+#define NM_DEVICE_OLPC_MESH(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEVICE_OLPC_MESH, NMDeviceOlpcMesh))
+#define NM_DEVICE_OLPC_MESH_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DEVICE_OLPC_MESH, NMDeviceOlpcMeshClass))
+#define NM_IS_DEVICE_OLPC_MESH(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEVICE_OLPC_MESH))
+#define NM_IS_DEVICE_OLPC_MESH_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_OLPC_MESH))
+#define NM_DEVICE_OLPC_MESH_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_OLPC_MESH, NMDeviceOlpcMeshClass))
+
+#define NM_DEVICE_OLPC_MESH_HW_ADDRESS "hw-address"
+#define NM_DEVICE_OLPC_MESH_COMPANION "companion"
+#define NM_DEVICE_OLPC_MESH_ACTIVE_CHANNEL "active-channel"
+
+struct _NMDeviceOlpcMesh {
+ NMDevice parent;
+};
+
+typedef struct {
+ NMDeviceClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMDeviceOlpcMeshClass;
+
+GType nm_device_olpc_mesh_get_type (void);
+
+const char *nm_device_olpc_mesh_get_hw_address (NMDeviceOlpcMesh *device);
+NMDeviceWifi *nm_device_olpc_mesh_get_companion (NMDeviceOlpcMesh *device);
+guint32 nm_device_olpc_mesh_get_active_channel (NMDeviceOlpcMesh *device);
+
+G_END_DECLS
+
+#endif /* __NM_DEVICE_OLPC_MESH_H__ */
diff --git a/libnm/nm-device-private.h b/libnm/nm-device-private.h
new file mode 100644
index 000000000..66fc6b6b4
--- /dev/null
+++ b/libnm/nm-device-private.h
@@ -0,0 +1,26 @@
+/* -*- 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 2007 - 2012 Red Hat, Inc.
+ */
+
+#ifndef __NM_DEVICE_PRIVATE_H__
+#define __NM_DEVICE_PRIVATE_H__
+
+void _nm_device_set_device_type (NMDevice *device, NMDeviceType dtype);
+
+#endif /* __NM_DEVICE_PRIVATE_H__ */
diff --git a/libnm/nm-device-team.c b/libnm/nm-device-team.c
new file mode 100644
index 000000000..cff1d7184
--- /dev/null
+++ b/libnm/nm-device-team.c
@@ -0,0 +1,271 @@
+/* -*- 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 Jiri Pirko <jiri@resnulli.us>
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <glib/gi18n-lib.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-core-internal.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 {
+ char *hw_address;
+ gboolean carrier;
+ GPtrArray *slaves;
+} NMDeviceTeamPrivate;
+
+enum {
+ PROP_0,
+ PROP_HW_ADDRESS,
+ PROP_CARRIER,
+ PROP_SLAVES,
+
+ LAST_PROP
+};
+
+/**
+ * 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.
+ **/
+const char *
+nm_device_team_get_hw_address (NMDeviceTeam *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_TEAM (device), NULL);
+
+ 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
+ **/
+gboolean
+nm_device_team_get_carrier (NMDeviceTeam *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_TEAM (device), FALSE);
+
+ 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 NMDevice): the #GPtrArray containing
+ * #NMDevices that are slaves of @device. This is the internal
+ * copy used by the device, and must not be modified.
+ **/
+const GPtrArray *
+nm_device_team_get_slaves (NMDeviceTeam *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_TEAM (device), FALSE);
+
+ 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)
+{
+ if (!NM_DEVICE_CLASS (nm_device_team_parent_class)->connection_compatible (device, connection, error))
+ return FALSE;
+
+ if (!nm_connection_is_type (connection, NM_SETTING_TEAM_SETTING_NAME)) {
+ g_set_error_literal (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_INVALID_CONNECTION,
+ _("The connection was not a team connection."));
+ return FALSE;
+ }
+
+ /* FIXME: check slaves? */
+
+ return TRUE;
+}
+
+static GType
+get_setting_type (NMDevice *device)
+{
+ return NM_TYPE_SETTING_TEAM;
+}
+
+/***********************************************************/
+
+static void
+nm_device_team_init (NMDeviceTeam *device)
+{
+ NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (device);
+
+ _nm_device_set_device_type (NM_DEVICE (device), NM_DEVICE_TYPE_TEAM);
+
+ priv->slaves = g_ptr_array_new ();
+}
+
+static void
+init_dbus (NMObject *object)
+{
+ NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (object);
+ 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_CLASS (nm_device_team_parent_class)->init_dbus (object);
+
+ _nm_object_register_properties (object,
+ NM_DBUS_INTERFACE_DEVICE_TEAM,
+ property_info);
+}
+
+static void
+dispose (GObject *object)
+{
+ NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (object);
+
+ g_clear_pointer (&priv->slaves, g_ptr_array_unref);
+
+ 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);
+
+ 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_take_boxed (value, _nm_utils_copy_object_array (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 *team_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (team_class);
+ NMObjectClass *nm_object_class = NM_OBJECT_CLASS (team_class);
+ NMDeviceClass *device_class = NM_DEVICE_CLASS (team_class);
+
+ g_type_class_add_private (team_class, sizeof (NMDeviceTeamPrivate));
+
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_TEAM);
+
+ /* virtual methods */
+ object_class->dispose = dispose;
+ object_class->finalize = finalize;
+ object_class->get_property = get_property;
+
+ nm_object_class->init_dbus = init_dbus;
+
+ 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, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDeviceTeam:carrier:
+ *
+ * Whether the device has carrier.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_CARRIER,
+ g_param_spec_boolean (NM_DEVICE_TEAM_CARRIER, "", "",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDeviceTeam:slaves:
+ *
+ * The devices enslaved to the team device.
+ *
+ * Element-type: NMDevice
+ **/
+ g_object_class_install_property
+ (object_class, PROP_SLAVES,
+ g_param_spec_boxed (NM_DEVICE_TEAM_SLAVES, "", "",
+ G_TYPE_PTR_ARRAY,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/libnm/nm-device-team.h b/libnm/nm-device-team.h
new file mode 100644
index 000000000..a71857958
--- /dev/null
+++ b/libnm/nm-device-team.h
@@ -0,0 +1,62 @@
+/* -*- 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 Jiri Pirko <jiri@resnulli.us>
+ */
+
+#ifndef __NM_DEVICE_TEAM_H__
+#define __NM_DEVICE_TEAM_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#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))
+
+#define NM_DEVICE_TEAM_HW_ADDRESS "hw-address"
+#define NM_DEVICE_TEAM_CARRIER "carrier"
+#define NM_DEVICE_TEAM_SLAVES "slaves"
+
+struct _NMDeviceTeam {
+ NMDevice parent;
+};
+
+typedef struct {
+ NMDeviceClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMDeviceTeamClass;
+
+GType nm_device_team_get_type (void);
+
+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/nm-device-vlan.c b/libnm/nm-device-vlan.c
new file mode 100644
index 000000000..fb6e3bd7b
--- /dev/null
+++ b/libnm/nm-device-vlan.c
@@ -0,0 +1,305 @@
+/* -*- 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 2012 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <glib/gi18n-lib.h>
+
+#include "nm-glib-compat.h"
+
+#include <nm-setting-connection.h>
+#include <nm-setting-vlan.h>
+#include <nm-setting-wired.h>
+#include <nm-utils.h>
+
+#include "nm-device-vlan.h"
+#include "nm-device-private.h"
+#include "nm-object-private.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))
+
+typedef struct {
+ char *hw_address;
+ gboolean carrier;
+ NMDevice *parent;
+ guint vlan_id;
+} NMDeviceVlanPrivate;
+
+enum {
+ PROP_0,
+ PROP_HW_ADDRESS,
+ PROP_CARRIER,
+ PROP_PARENT,
+ PROP_VLAN_ID,
+
+ LAST_PROP
+};
+
+/**
+ * nm_device_vlan_get_hw_address:
+ * @device: a #NMDeviceVlan
+ *
+ * Gets the hardware (MAC) address of the #NMDeviceVlan
+ *
+ * Returns: the hardware address. This is the internal string used by the
+ * device, and must not be modified.
+ **/
+const char *
+nm_device_vlan_get_hw_address (NMDeviceVlan *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_VLAN (device), NULL);
+
+ return NM_DEVICE_VLAN_GET_PRIVATE (device)->hw_address;
+}
+
+/**
+ * nm_device_vlan_get_carrier:
+ * @device: a #NMDeviceVlan
+ *
+ * Whether the device has carrier.
+ *
+ * Returns: %TRUE if the device has carrier
+ **/
+gboolean
+nm_device_vlan_get_carrier (NMDeviceVlan *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_VLAN (device), FALSE);
+
+ return NM_DEVICE_VLAN_GET_PRIVATE (device)->carrier;
+}
+
+/**
+ * nm_device_vlan_get_parent:
+ * @device: a #NMDeviceVlan
+ *
+ * Returns: (transfer none): the device's parent device
+ **/
+NMDevice *
+nm_device_vlan_get_parent (NMDeviceVlan *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_VLAN (device), FALSE);
+
+ return NM_DEVICE_VLAN_GET_PRIVATE (device)->parent;
+}
+
+/**
+ * nm_device_vlan_get_vlan_id:
+ * @device: a #NMDeviceVlan
+ *
+ * Returns: the device's VLAN ID
+ **/
+guint
+nm_device_vlan_get_vlan_id (NMDeviceVlan *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_VLAN (device), FALSE);
+
+ return NM_DEVICE_VLAN_GET_PRIVATE (device)->vlan_id;
+}
+
+static gboolean
+connection_compatible (NMDevice *device, NMConnection *connection, GError **error)
+{
+ NMSettingVlan *s_vlan;
+ NMSettingWired *s_wired;
+ const char *setting_hwaddr;
+
+ if (!NM_DEVICE_CLASS (nm_device_vlan_parent_class)->connection_compatible (device, connection, error))
+ return FALSE;
+
+ if (!nm_connection_is_type (connection, NM_SETTING_VLAN_SETTING_NAME)) {
+ g_set_error_literal (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION,
+ _("The connection was not a VLAN connection."));
+ return FALSE;
+ }
+
+ s_vlan = nm_connection_get_setting_vlan (connection);
+ if (nm_setting_vlan_get_id (s_vlan) != nm_device_vlan_get_vlan_id (NM_DEVICE_VLAN (device))) {
+ g_set_error_literal (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION,
+ _("The VLAN identifiers of the device and the connection didn't match."));
+ return FALSE;
+ }
+
+ s_wired = nm_connection_get_setting_wired (connection);
+ if (s_wired)
+ setting_hwaddr = nm_setting_wired_get_mac_address (s_wired);
+ else
+ setting_hwaddr = NULL;
+ if (setting_hwaddr) {
+ if (!nm_utils_hwaddr_matches (setting_hwaddr, -1,
+ NM_DEVICE_VLAN_GET_PRIVATE (device)->hw_address, -1)) {
+ g_set_error_literal (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION,
+ _("The hardware address of the device and the connection didn't match."));
+ }
+ }
+
+ return TRUE;
+}
+
+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));
+}
+
+/***********************************************************/
+
+static void
+nm_device_vlan_init (NMDeviceVlan *device)
+{
+ _nm_device_set_device_type (NM_DEVICE (device), NM_DEVICE_TYPE_VLAN);
+}
+
+static void
+init_dbus (NMObject *object)
+{
+ NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (object);
+ const NMPropertiesInfo property_info[] = {
+ { NM_DEVICE_VLAN_HW_ADDRESS, &priv->hw_address },
+ { NM_DEVICE_VLAN_CARRIER, &priv->carrier },
+ { NM_DEVICE_VLAN_PARENT, &priv->parent, NULL, NM_TYPE_DEVICE },
+ { NM_DEVICE_VLAN_VLAN_ID, &priv->vlan_id },
+ { NULL },
+ };
+
+ NM_OBJECT_CLASS (nm_device_vlan_parent_class)->init_dbus (object);
+
+ _nm_object_register_properties (object,
+ NM_DBUS_INTERFACE_DEVICE_VLAN,
+ property_info);
+}
+
+static void
+finalize (GObject *object)
+{
+ NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (object);
+
+ g_free (priv->hw_address);
+ g_clear_object (&priv->parent);
+
+ G_OBJECT_CLASS (nm_device_vlan_parent_class)->finalize (object);
+}
+
+static void
+get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NMDeviceVlan *device = NM_DEVICE_VLAN (object);
+
+ switch (prop_id) {
+ case PROP_HW_ADDRESS:
+ g_value_set_string (value, nm_device_vlan_get_hw_address (device));
+ break;
+ case PROP_CARRIER:
+ g_value_set_boolean (value, nm_device_vlan_get_carrier (device));
+ break;
+ case PROP_PARENT:
+ g_value_set_object (value, nm_device_vlan_get_parent (device));
+ break;
+ case PROP_VLAN_ID:
+ g_value_set_uint (value, nm_device_vlan_get_vlan_id (device));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_device_vlan_class_init (NMDeviceVlanClass *vlan_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (vlan_class);
+ NMObjectClass *nm_object_class = NM_OBJECT_CLASS (vlan_class);
+ NMDeviceClass *device_class = NM_DEVICE_CLASS (vlan_class);
+
+ g_type_class_add_private (vlan_class, sizeof (NMDeviceVlanPrivate));
+
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_VLAN);
+
+ /* virtual methods */
+ object_class->finalize = finalize;
+ object_class->get_property = get_property;
+
+ nm_object_class->init_dbus = init_dbus;
+
+ device_class->connection_compatible = connection_compatible;
+ device_class->get_setting_type = get_setting_type;
+ device_class->get_hw_address = get_hw_address;
+
+ /* properties */
+
+ /**
+ * NMDeviceVlan: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_VLAN_HW_ADDRESS, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDeviceVlan:carrier:
+ *
+ * Whether the device has carrier.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_CARRIER,
+ g_param_spec_boolean (NM_DEVICE_VLAN_CARRIER, "", "",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDeviceVlan:parent:
+ *
+ * The devices's parent device.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_PARENT,
+ g_param_spec_object (NM_DEVICE_VLAN_PARENT, "", "",
+ NM_TYPE_DEVICE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDeviceVlan:vlan-id:
+ *
+ * The device's VLAN ID.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_VLAN_ID,
+ g_param_spec_uint (NM_DEVICE_VLAN_VLAN_ID, "", "",
+ 0, 4095, 0,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/libnm/nm-device-vlan.h b/libnm/nm-device-vlan.h
new file mode 100644
index 000000000..6ab242022
--- /dev/null
+++ b/libnm/nm-device-vlan.h
@@ -0,0 +1,64 @@
+/* -*- 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 2012 - 2014 Red Hat, Inc.
+ */
+
+#ifndef __NM_DEVICE_VLAN_H__
+#define __NM_DEVICE_VLAN_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-device.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_DEVICE_VLAN (nm_device_vlan_get_type ())
+#define NM_DEVICE_VLAN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEVICE_VLAN, NMDeviceVlan))
+#define NM_DEVICE_VLAN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DEVICE_VLAN, NMDeviceVlanClass))
+#define NM_IS_DEVICE_VLAN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEVICE_VLAN))
+#define NM_IS_DEVICE_VLAN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_VLAN))
+#define NM_DEVICE_VLAN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_VLAN, NMDeviceVlanClass))
+
+#define NM_DEVICE_VLAN_HW_ADDRESS "hw-address"
+#define NM_DEVICE_VLAN_CARRIER "carrier"
+#define NM_DEVICE_VLAN_PARENT "parent"
+#define NM_DEVICE_VLAN_VLAN_ID "vlan-id"
+
+struct _NMDeviceVlan {
+ NMDevice parent;
+};
+
+typedef struct {
+ NMDeviceClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMDeviceVlanClass;
+
+GType nm_device_vlan_get_type (void);
+
+const char * nm_device_vlan_get_hw_address (NMDeviceVlan *device);
+gboolean nm_device_vlan_get_carrier (NMDeviceVlan *device);
+NMDevice * nm_device_vlan_get_parent (NMDeviceVlan *device);
+guint nm_device_vlan_get_vlan_id (NMDeviceVlan *device);
+
+G_END_DECLS
+
+#endif /* __NM_DEVICE_VLAN_H__ */
diff --git a/libnm/nm-device-wifi.c b/libnm/nm-device-wifi.c
new file mode 100644
index 000000000..4a19f2e5a
--- /dev/null
+++ b/libnm/nm-device-wifi.c
@@ -0,0 +1,837 @@
+/* -*- 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 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2014 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <glib/gi18n-lib.h>
+
+#include "nm-glib-compat.h"
+
+#include <nm-setting-connection.h>
+#include <nm-setting-wireless.h>
+#include <nm-setting-wireless-security.h>
+#include <nm-utils.h>
+
+#include "nm-device-wifi.h"
+#include "nm-access-point.h"
+#include "nm-device-private.h"
+#include "nm-object-private.h"
+#include "nm-object-cache.h"
+#include "nm-core-internal.h"
+#include "nm-dbus-helpers.h"
+
+#include "nmdbus-device-wifi.h"
+
+G_DEFINE_TYPE (NMDeviceWifi, nm_device_wifi, NM_TYPE_DEVICE)
+
+#define NM_DEVICE_WIFI_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_WIFI, NMDeviceWifiPrivate))
+
+void _nm_device_wifi_set_wireless_enabled (NMDeviceWifi *device, gboolean enabled);
+static void state_changed_cb (NMDevice *device, GParamSpec *pspec, gpointer user_data);
+
+typedef struct {
+ NMDeviceWifi *device;
+ GSimpleAsyncResult *simple;
+} RequestScanInfo;
+
+typedef struct {
+ NMDBusDeviceWifi *proxy;
+
+ char *hw_address;
+ char *perm_hw_address;
+ NM80211Mode mode;
+ guint32 rate;
+ NMAccessPoint *active_ap;
+ NMDeviceWifiCapabilities wireless_caps;
+ GPtrArray *aps;
+
+ RequestScanInfo *scan_info;
+} NMDeviceWifiPrivate;
+
+enum {
+ PROP_0,
+ PROP_HW_ADDRESS,
+ PROP_PERM_HW_ADDRESS,
+ PROP_MODE,
+ PROP_BITRATE,
+ PROP_ACTIVE_ACCESS_POINT,
+ PROP_WIRELESS_CAPABILITIES,
+ PROP_ACCESS_POINTS,
+
+ LAST_PROP
+};
+
+enum {
+ ACCESS_POINT_ADDED,
+ ACCESS_POINT_REMOVED,
+
+ LAST_SIGNAL
+};
+static guint signals[LAST_SIGNAL] = { 0 };
+
+/**
+ * nm_device_wifi_get_hw_address:
+ * @device: a #NMDeviceWifi
+ *
+ * Gets the actual hardware (MAC) address of the #NMDeviceWifi
+ *
+ * Returns: the actual hardware address. This is the internal string used by the
+ * device, and must not be modified.
+ **/
+const char *
+nm_device_wifi_get_hw_address (NMDeviceWifi *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_WIFI (device), NULL);
+
+ return NM_DEVICE_WIFI_GET_PRIVATE (device)->hw_address;
+}
+
+/**
+ * nm_device_wifi_get_permanent_hw_address:
+ * @device: a #NMDeviceWifi
+ *
+ * Gets the permanent hardware (MAC) address of the #NMDeviceWifi
+ *
+ * Returns: the permanent hardware address. This is the internal string used by the
+ * device, and must not be modified.
+ **/
+const char *
+nm_device_wifi_get_permanent_hw_address (NMDeviceWifi *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_WIFI (device), NULL);
+
+ return NM_DEVICE_WIFI_GET_PRIVATE (device)->perm_hw_address;
+}
+
+/**
+ * nm_device_wifi_get_mode:
+ * @device: a #NMDeviceWifi
+ *
+ * Gets the #NMDeviceWifi mode.
+ *
+ * Returns: the mode
+ **/
+NM80211Mode
+nm_device_wifi_get_mode (NMDeviceWifi *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_WIFI (device), 0);
+
+ return NM_DEVICE_WIFI_GET_PRIVATE (device)->mode;
+}
+
+/**
+ * nm_device_wifi_get_bitrate:
+ * @device: a #NMDeviceWifi
+ *
+ * Gets the bit rate of the #NMDeviceWifi in kbit/s.
+ *
+ * Returns: the bit rate (kbit/s)
+ **/
+guint32
+nm_device_wifi_get_bitrate (NMDeviceWifi *device)
+{
+ NMDeviceState state;
+
+ g_return_val_if_fail (NM_IS_DEVICE_WIFI (device), 0);
+
+ state = nm_device_get_state (NM_DEVICE (device));
+ switch (state) {
+ case NM_DEVICE_STATE_IP_CONFIG:
+ case NM_DEVICE_STATE_IP_CHECK:
+ case NM_DEVICE_STATE_SECONDARIES:
+ case NM_DEVICE_STATE_ACTIVATED:
+ case NM_DEVICE_STATE_DEACTIVATING:
+ break;
+ default:
+ return 0;
+ }
+
+ return NM_DEVICE_WIFI_GET_PRIVATE (device)->rate;
+}
+
+/**
+ * nm_device_wifi_get_capabilities:
+ * @device: a #NMDeviceWifi
+ *
+ * Gets the Wi-Fi capabilities of the #NMDeviceWifi.
+ *
+ * Returns: the capabilities
+ **/
+NMDeviceWifiCapabilities
+nm_device_wifi_get_capabilities (NMDeviceWifi *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_WIFI (device), 0);
+
+ return NM_DEVICE_WIFI_GET_PRIVATE (device)->wireless_caps;
+}
+
+/**
+ * nm_device_wifi_get_active_access_point:
+ * @device: a #NMDeviceWifi
+ *
+ * Gets the active #NMAccessPoint.
+ *
+ * Returns: (transfer none): the access point or %NULL if none is active
+ **/
+NMAccessPoint *
+nm_device_wifi_get_active_access_point (NMDeviceWifi *device)
+{
+ NMDeviceState state;
+
+ g_return_val_if_fail (NM_IS_DEVICE_WIFI (device), NULL);
+
+ state = nm_device_get_state (NM_DEVICE (device));
+ switch (state) {
+ case NM_DEVICE_STATE_PREPARE:
+ case NM_DEVICE_STATE_CONFIG:
+ case NM_DEVICE_STATE_NEED_AUTH:
+ case NM_DEVICE_STATE_IP_CONFIG:
+ case NM_DEVICE_STATE_IP_CHECK:
+ case NM_DEVICE_STATE_SECONDARIES:
+ case NM_DEVICE_STATE_ACTIVATED:
+ case NM_DEVICE_STATE_DEACTIVATING:
+ break;
+ default:
+ return NULL;
+ break;
+ }
+
+ return NM_DEVICE_WIFI_GET_PRIVATE (device)->active_ap;
+}
+
+/**
+ * nm_device_wifi_get_access_points:
+ * @device: a #NMDeviceWifi
+ *
+ * Gets all the scanned access points of the #NMDeviceWifi.
+ *
+ * Returns: (element-type NMAccessPoint): a #GPtrArray containing all the
+ * scanned #NMAccessPoints.
+ * The returned array is owned by the client and should not be modified.
+ **/
+const GPtrArray *
+nm_device_wifi_get_access_points (NMDeviceWifi *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_WIFI (device), NULL);
+
+ return NM_DEVICE_WIFI_GET_PRIVATE (device)->aps;
+}
+
+/**
+ * nm_device_wifi_get_access_point_by_path:
+ * @device: a #NMDeviceWifi
+ * @path: the object path of the access point
+ *
+ * Gets a #NMAccessPoint by path.
+ *
+ * Returns: (transfer none): the access point or %NULL if none is found.
+ **/
+NMAccessPoint *
+nm_device_wifi_get_access_point_by_path (NMDeviceWifi *device,
+ const char *path)
+{
+ const GPtrArray *aps;
+ int i;
+ NMAccessPoint *ap = NULL;
+
+ g_return_val_if_fail (NM_IS_DEVICE_WIFI (device), NULL);
+ g_return_val_if_fail (path != NULL, NULL);
+
+ aps = nm_device_wifi_get_access_points (device);
+ if (!aps)
+ return NULL;
+
+ for (i = 0; i < aps->len; i++) {
+ NMAccessPoint *candidate = g_ptr_array_index (aps, i);
+ if (!strcmp (nm_object_get_path (NM_OBJECT (candidate)), path)) {
+ ap = candidate;
+ break;
+ }
+ }
+
+ return ap;
+}
+
+/**
+ * nm_device_wifi_request_scan:
+ * @device: a #NMDeviceWifi
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: location for a #GError, or %NULL
+ *
+ * Request NM to scan for access points on @device. Note that the function
+ * returns immediately after requesting the scan, and it may take some time
+ * after that for the scan to complete.
+ *
+ * Returns: %TRUE on success, %FALSE on error, in which case @error will be
+ * set.
+ **/
+gboolean
+nm_device_wifi_request_scan (NMDeviceWifi *device,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean ret;
+
+ g_return_val_if_fail (NM_IS_DEVICE_WIFI (device), FALSE);
+
+ ret = nmdbus_device_wifi_call_request_scan_sync (NM_DEVICE_WIFI_GET_PRIVATE (device)->proxy,
+ g_variant_new_array (G_VARIANT_TYPE ("{sv}"),
+ NULL, 0),
+ cancellable, error);
+ if (error && *error)
+ g_dbus_error_strip_remote_error (*error);
+ return ret;
+}
+
+static void
+request_scan_cb (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ RequestScanInfo *info = user_data;
+ NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (info->device);
+ GError *error = NULL;
+
+ priv->scan_info = NULL;
+
+ if (nmdbus_device_wifi_call_request_scan_finish (NMDBUS_DEVICE_WIFI (source),
+ result, &error))
+ g_simple_async_result_set_op_res_gboolean (info->simple, TRUE);
+ else {
+ g_dbus_error_strip_remote_error (error);
+ g_simple_async_result_take_error (info->simple, error);
+ }
+
+ g_simple_async_result_complete (info->simple);
+ g_object_unref (info->simple);
+ g_slice_free (RequestScanInfo, info);
+}
+
+/**
+ * nm_device_wifi_request_scan_async:
+ * @device: a #NMDeviceWifi
+ * @cancellable: a #GCancellable, or %NULL
+ * @callback: callback to be called when the scan has been requested
+ * @user_data: caller-specific data passed to @callback
+ *
+ * Request NM to scan for access points on @device. Note that @callback will be
+ * called immediately after requesting the scan, and it may take some time after
+ * that for the scan to complete.
+ **/
+void
+nm_device_wifi_request_scan_async (NMDeviceWifi *device,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (device);
+ RequestScanInfo *info;
+ GSimpleAsyncResult *simple;
+
+ g_return_if_fail (NM_IS_DEVICE_WIFI (device));
+
+ simple = g_simple_async_result_new (G_OBJECT (device), callback, user_data,
+ nm_device_wifi_request_scan_async);
+
+ /* If a scan is in progress, just return */
+ if (priv->scan_info) {
+ g_simple_async_result_set_op_res_gboolean (simple, TRUE);
+ g_simple_async_result_complete_in_idle (simple);
+ g_object_unref (simple);
+ return;
+ }
+
+ info = g_slice_new0 (RequestScanInfo);
+ info->device = device;
+ info->simple = simple;
+
+ priv->scan_info = info;
+ nmdbus_device_wifi_call_request_scan (NM_DEVICE_WIFI_GET_PRIVATE (device)->proxy,
+ g_variant_new_array (G_VARIANT_TYPE ("{sv}"), NULL, 0),
+ cancellable, request_scan_cb, info);
+}
+
+/**
+ * nm_device_wifi_request_scan_finish:
+ * @device: a #NMDeviceWifi
+ * @result: the result passed to the #GAsyncReadyCallback
+ * @error: location for a #GError, or %NULL
+ *
+ * Gets the result of a call to nm_device_wifi_request_scan_async().
+ *
+ * Returns: %TRUE on success, %FALSE on error, in which case @error will be
+ * set.
+ **/
+gboolean
+nm_device_wifi_request_scan_finish (NMDeviceWifi *device,
+ GAsyncResult *result,
+ GError **error)
+{
+ GSimpleAsyncResult *simple;
+
+ g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (device), nm_device_wifi_request_scan_async), FALSE);
+
+ simple = G_SIMPLE_ASYNC_RESULT (result);
+ if (g_simple_async_result_propagate_error (simple, error))
+ return FALSE;
+ else
+ return g_simple_async_result_get_op_res_gboolean (simple);
+}
+
+static void
+clean_up_aps (NMDeviceWifi *self, gboolean in_dispose)
+{
+ NMDeviceWifiPrivate *priv;
+ GPtrArray *aps;
+ int i;
+
+ g_return_if_fail (NM_IS_DEVICE_WIFI (self));
+
+ priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
+
+ if (priv->active_ap) {
+ g_object_unref (priv->active_ap);
+ priv->active_ap = NULL;
+ }
+
+ aps = priv->aps;
+
+ if (in_dispose)
+ priv->aps = NULL;
+ else {
+ priv->aps = g_ptr_array_new ();
+
+ for (i = 0; i < aps->len; i++) {
+ NMAccessPoint *ap = NM_ACCESS_POINT (g_ptr_array_index (aps, i));
+
+ g_signal_emit (self, signals[ACCESS_POINT_REMOVED], 0, ap);
+ }
+ }
+
+ g_ptr_array_unref (aps);
+}
+
+/**
+ * _nm_device_wifi_set_wireless_enabled:
+ * @device: a #NMDeviceWifi
+ * @enabled: %TRUE to enable the device
+ *
+ * Enables or disables the wireless device.
+ **/
+void
+_nm_device_wifi_set_wireless_enabled (NMDeviceWifi *device,
+ gboolean enabled)
+{
+ g_return_if_fail (NM_IS_DEVICE_WIFI (device));
+
+ if (!enabled)
+ clean_up_aps (device, FALSE);
+}
+
+#define WPA_CAPS (NM_WIFI_DEVICE_CAP_CIPHER_TKIP | \
+ NM_WIFI_DEVICE_CAP_CIPHER_CCMP | \
+ NM_WIFI_DEVICE_CAP_WPA | \
+ NM_WIFI_DEVICE_CAP_RSN)
+
+#define RSN_CAPS (NM_WIFI_DEVICE_CAP_CIPHER_CCMP | NM_WIFI_DEVICE_CAP_RSN)
+
+static gboolean
+has_proto (NMSettingWirelessSecurity *s_wsec, const char *proto)
+{
+ int i;
+
+ for (i = 0; i < nm_setting_wireless_security_get_num_protos (s_wsec); i++) {
+ if (g_strcmp0 (proto, nm_setting_wireless_security_get_proto (s_wsec, i)) == 0)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static gboolean
+connection_compatible (NMDevice *device, NMConnection *connection, GError **error)
+{
+ NMSettingWireless *s_wifi;
+ NMSettingWirelessSecurity *s_wsec;
+ const char *hwaddr, *setting_hwaddr;
+ NMDeviceWifiCapabilities wifi_caps;
+ const char *key_mgmt;
+
+ if (!NM_DEVICE_CLASS (nm_device_wifi_parent_class)->connection_compatible (device, connection, error))
+ return FALSE;
+
+ if (!nm_connection_is_type (connection, NM_SETTING_WIRELESS_SETTING_NAME)) {
+ g_set_error_literal (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION,
+ _("The connection was not a Wi-Fi connection."));
+ return FALSE;
+ }
+
+ /* Check MAC address */
+ hwaddr = nm_device_wifi_get_permanent_hw_address (NM_DEVICE_WIFI (device));
+ if (hwaddr) {
+ if (!nm_utils_hwaddr_valid (hwaddr, ETH_ALEN)) {
+ g_set_error_literal (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_FAILED,
+ _("Invalid device MAC address."));
+ return FALSE;
+ }
+ s_wifi = nm_connection_get_setting_wireless (connection);
+ setting_hwaddr = nm_setting_wireless_get_mac_address (s_wifi);
+ if (setting_hwaddr && !nm_utils_hwaddr_matches (setting_hwaddr, -1, hwaddr, -1)) {
+ g_set_error_literal (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION,
+ _("The MACs of the device and the connection didn't match."));
+ return FALSE;
+ }
+ }
+
+ /* Check device capabilities; we assume all devices can do WEP at least */
+
+ s_wsec = nm_connection_get_setting_wireless_security (connection);
+ if (s_wsec) {
+ /* Connection has security, verify it against the device's capabilities */
+ key_mgmt = nm_setting_wireless_security_get_key_mgmt (s_wsec);
+ if ( !g_strcmp0 (key_mgmt, "wpa-none")
+ || !g_strcmp0 (key_mgmt, "wpa-psk")
+ || !g_strcmp0 (key_mgmt, "wpa-eap")) {
+
+ wifi_caps = nm_device_wifi_get_capabilities (NM_DEVICE_WIFI (device));
+
+ /* Is device only WEP capable? */
+ if (!(wifi_caps & WPA_CAPS)) {
+ g_set_error_literal (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION,
+ _("The device is lacking WPA capabilities required by the connection."));
+ return FALSE;
+ }
+
+ /* Make sure WPA2/RSN-only connections don't get chosen for WPA-only cards */
+ if (has_proto (s_wsec, "rsn") && !has_proto (s_wsec, "wpa") && !(wifi_caps & RSN_CAPS)) {
+ g_set_error_literal (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION,
+ _("The device is lacking WPA2/RSN capabilities required by the connection."));
+ return FALSE;
+ }
+ }
+ }
+
+ return TRUE;
+}
+
+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));
+}
+
+/**************************************************************/
+
+static void
+nm_device_wifi_init (NMDeviceWifi *device)
+{
+ NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (device);
+
+ _nm_device_set_device_type (NM_DEVICE (device), NM_DEVICE_TYPE_WIFI);
+
+ g_signal_connect (device,
+ "notify::" NM_DEVICE_STATE,
+ G_CALLBACK (state_changed_cb),
+ NULL);
+
+ priv->aps = g_ptr_array_new ();
+}
+
+static void
+get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NMDeviceWifi *self = NM_DEVICE_WIFI (object);
+
+ switch (prop_id) {
+ case PROP_HW_ADDRESS:
+ g_value_set_string (value, nm_device_wifi_get_hw_address (self));
+ break;
+ case PROP_PERM_HW_ADDRESS:
+ g_value_set_string (value, nm_device_wifi_get_permanent_hw_address (self));
+ break;
+ case PROP_MODE:
+ g_value_set_enum (value, nm_device_wifi_get_mode (self));
+ break;
+ case PROP_BITRATE:
+ g_value_set_uint (value, nm_device_wifi_get_bitrate (self));
+ break;
+ case PROP_ACTIVE_ACCESS_POINT:
+ g_value_set_object (value, nm_device_wifi_get_active_access_point (self));
+ break;
+ case PROP_WIRELESS_CAPABILITIES:
+ g_value_set_flags (value, nm_device_wifi_get_capabilities (self));
+ break;
+ case PROP_ACCESS_POINTS:
+ g_value_take_boxed (value, _nm_utils_copy_object_array (nm_device_wifi_get_access_points (self)));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+state_changed_cb (NMDevice *device, GParamSpec *pspec, gpointer user_data)
+{
+ NMDeviceWifi *self = NM_DEVICE_WIFI (device);
+ NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
+
+ switch (nm_device_get_state (device)) {
+ case NM_DEVICE_STATE_UNKNOWN:
+ case NM_DEVICE_STATE_UNMANAGED:
+ case NM_DEVICE_STATE_UNAVAILABLE:
+ case NM_DEVICE_STATE_DISCONNECTED:
+ case NM_DEVICE_STATE_FAILED:
+ /* Just clear active AP; don't clear the AP list unless wireless is disabled completely */
+ if (priv->active_ap) {
+ g_object_unref (priv->active_ap);
+ priv->active_ap = NULL;
+ }
+ _nm_object_queue_notify (NM_OBJECT (device), NM_DEVICE_WIFI_ACTIVE_ACCESS_POINT);
+ priv->rate = 0;
+ _nm_object_queue_notify (NM_OBJECT (device), NM_DEVICE_WIFI_BITRATE);
+ break;
+ default:
+ break;
+ }
+}
+
+static void
+init_dbus (NMObject *object)
+{
+ NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (object);
+ const NMPropertiesInfo property_info[] = {
+ { NM_DEVICE_WIFI_HW_ADDRESS, &priv->hw_address },
+ { NM_DEVICE_WIFI_PERMANENT_HW_ADDRESS, &priv->perm_hw_address },
+ { NM_DEVICE_WIFI_MODE, &priv->mode },
+ { 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_CLASS (nm_device_wifi_parent_class)->init_dbus (object);
+
+ priv->proxy = NMDBUS_DEVICE_WIFI (_nm_object_get_proxy (object, NM_DBUS_INTERFACE_DEVICE_WIRELESS));
+ _nm_object_register_properties (object,
+ NM_DBUS_INTERFACE_DEVICE_WIRELESS,
+ 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);
+
+ priv->rate = 0;
+ _nm_object_queue_notify (NM_OBJECT (self), NM_DEVICE_WIFI_BITRATE);
+ }
+}
+
+static void
+dispose (GObject *object)
+{
+ NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (object);
+
+ if (priv->aps)
+ clean_up_aps (NM_DEVICE_WIFI (object), TRUE);
+
+ G_OBJECT_CLASS (nm_device_wifi_parent_class)->dispose (object);
+}
+
+static void
+finalize (GObject *object)
+{
+ NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (object);
+
+ g_free (priv->hw_address);
+ g_free (priv->perm_hw_address);
+
+ G_OBJECT_CLASS (nm_device_wifi_parent_class)->finalize (object);
+}
+
+static void
+nm_device_wifi_class_init (NMDeviceWifiClass *wifi_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (wifi_class);
+ NMObjectClass *nm_object_class = NM_OBJECT_CLASS (wifi_class);
+ NMDeviceClass *device_class = NM_DEVICE_CLASS (wifi_class);
+
+ g_type_class_add_private (wifi_class, sizeof (NMDeviceWifiPrivate));
+
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_WIRELESS);
+ _nm_dbus_register_proxy_type (NM_DBUS_INTERFACE_DEVICE_WIRELESS,
+ NMDBUS_TYPE_DEVICE_WIFI_PROXY);
+
+ /* virtual methods */
+ object_class->get_property = get_property;
+ object_class->dispose = dispose;
+ object_class->finalize = finalize;
+
+ nm_object_class->init_dbus = init_dbus;
+
+ 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 */
+
+ /**
+ * NMDeviceWifi: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_WIFI_HW_ADDRESS, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDeviceWifi:perm-hw-address:
+ *
+ * The hardware (MAC) address of the device.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_PERM_HW_ADDRESS,
+ g_param_spec_string (NM_DEVICE_WIFI_PERMANENT_HW_ADDRESS, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDeviceWifi:mode:
+ *
+ * The mode of the device.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_MODE,
+ g_param_spec_enum (NM_DEVICE_WIFI_MODE, "", "",
+ NM_TYPE_802_11_MODE,
+ NM_802_11_MODE_UNKNOWN,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDeviceWifi:bitrate:
+ *
+ * The bit rate of the device in kbit/s.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_BITRATE,
+ g_param_spec_uint (NM_DEVICE_WIFI_BITRATE, "", "",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDeviceWifi:active-access-point:
+ *
+ * The active #NMAccessPoint of the device.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_ACTIVE_ACCESS_POINT,
+ g_param_spec_object (NM_DEVICE_WIFI_ACTIVE_ACCESS_POINT, "", "",
+ NM_TYPE_ACCESS_POINT,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDeviceWifi:wireless-capabilities:
+ *
+ * The wireless capabilities of the device.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_WIRELESS_CAPABILITIES,
+ g_param_spec_flags (NM_DEVICE_WIFI_CAPABILITIES, "", "",
+ NM_TYPE_DEVICE_WIFI_CAPABILITIES,
+ NM_WIFI_DEVICE_CAP_NONE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDeviceWifi:access-points:
+ *
+ * List of all Wi-Fi access points the device can see.
+ *
+ * Element-type: NMAccessPoint
+ **/
+ g_object_class_install_property
+ (object_class, PROP_ACCESS_POINTS,
+ g_param_spec_boxed (NM_DEVICE_WIFI_ACCESS_POINTS, "", "",
+ G_TYPE_PTR_ARRAY,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /* signals */
+
+ /**
+ * NMDeviceWifi::access-point-added:
+ * @device: the Wi-Fi device that received the signal
+ * @ap: the new access point
+ *
+ * Notifies that a #NMAccessPoint is added to the Wi-Fi device.
+ **/
+ signals[ACCESS_POINT_ADDED] =
+ g_signal_new ("access-point-added",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMDeviceWifiClass, access_point_added),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE, 1,
+ G_TYPE_OBJECT);
+
+ /**
+ * NMDeviceWifi::access-point-removed:
+ * @device: the Wi-Fi device that received the signal
+ * @ap: the removed access point
+ *
+ * Notifies that a #NMAccessPoint is removed from the Wi-Fi device.
+ **/
+ signals[ACCESS_POINT_REMOVED] =
+ g_signal_new ("access-point-removed",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMDeviceWifiClass, access_point_removed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE, 1,
+ G_TYPE_OBJECT);
+}
diff --git a/libnm/nm-device-wifi.h b/libnm/nm-device-wifi.h
new file mode 100644
index 000000000..24339fd3d
--- /dev/null
+++ b/libnm/nm-device-wifi.h
@@ -0,0 +1,91 @@
+/* -*- 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 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2012 Red Hat, Inc.
+ */
+
+#ifndef __NM_DEVICE_WIFI_H__
+#define __NM_DEVICE_WIFI_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-device.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_DEVICE_WIFI (nm_device_wifi_get_type ())
+#define NM_DEVICE_WIFI(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEVICE_WIFI, NMDeviceWifi))
+#define NM_DEVICE_WIFI_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DEVICE_WIFI, NMDeviceWifiClass))
+#define NM_IS_DEVICE_WIFI(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEVICE_WIFI))
+#define NM_IS_DEVICE_WIFI_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_WIFI))
+#define NM_DEVICE_WIFI_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_WIFI, NMDeviceWifiClass))
+
+#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_ACTIVE_ACCESS_POINT "active-access-point"
+#define NM_DEVICE_WIFI_CAPABILITIES "wireless-capabilities"
+#define NM_DEVICE_WIFI_ACCESS_POINTS "access-points"
+
+struct _NMDeviceWifi {
+ NMDevice parent;
+};
+
+typedef struct {
+ NMDeviceClass parent;
+
+ /* Signals */
+ void (*access_point_added) (NMDeviceWifi *device, NMAccessPoint *ap);
+ void (*access_point_removed) (NMDeviceWifi *device, NMAccessPoint *ap);
+
+ /*< private >*/
+ gpointer padding[4];
+} NMDeviceWifiClass;
+
+GType nm_device_wifi_get_type (void);
+
+const char * nm_device_wifi_get_hw_address (NMDeviceWifi *device);
+const char * nm_device_wifi_get_permanent_hw_address (NMDeviceWifi *device);
+NM80211Mode nm_device_wifi_get_mode (NMDeviceWifi *device);
+guint32 nm_device_wifi_get_bitrate (NMDeviceWifi *device);
+NMDeviceWifiCapabilities nm_device_wifi_get_capabilities (NMDeviceWifi *device);
+NMAccessPoint * nm_device_wifi_get_active_access_point (NMDeviceWifi *device);
+
+NMAccessPoint * nm_device_wifi_get_access_point_by_path (NMDeviceWifi *device,
+ const char *path);
+
+const GPtrArray * nm_device_wifi_get_access_points (NMDeviceWifi *device);
+
+gboolean nm_device_wifi_request_scan (NMDeviceWifi *device,
+ GCancellable *cancellable,
+ GError **error);
+
+void nm_device_wifi_request_scan_async (NMDeviceWifi *device,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+gboolean nm_device_wifi_request_scan_finish (NMDeviceWifi *device,
+ GAsyncResult *result,
+ GError **error);
+
+G_END_DECLS
+
+#endif /* __NM_DEVICE_WIFI_H__ */
diff --git a/libnm/nm-device-wimax.c b/libnm/nm-device-wimax.c
new file mode 100644
index 000000000..f199b669f
--- /dev/null
+++ b/libnm/nm-device-wimax.c
@@ -0,0 +1,678 @@
+/* -*- 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 2011 - 2012 Red Hat, Inc.
+ * Copyright 2009 Novell, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <glib/gi18n-lib.h>
+
+#include "nm-glib-compat.h"
+
+#include <nm-setting-connection.h>
+#include <nm-setting-wimax.h>
+#include <nm-utils.h>
+
+#include "nm-device-wimax.h"
+#include "nm-wimax-nsp.h"
+#include "nm-object-private.h"
+#include "nm-object-cache.h"
+#include "nm-core-internal.h"
+#include "nm-device-private.h"
+
+G_DEFINE_TYPE (NMDeviceWimax, nm_device_wimax, NM_TYPE_DEVICE)
+
+#define NM_DEVICE_WIMAX_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_WIMAX, NMDeviceWimaxPrivate))
+
+void _nm_device_wimax_set_wireless_enabled (NMDeviceWimax *wimax, gboolean enabled);
+static void state_changed_cb (NMDevice *device, GParamSpec *pspec, gpointer user_data);
+
+typedef struct {
+ char *hw_address;
+ NMWimaxNsp *active_nsp;
+ GPtrArray *nsps;
+
+ guint center_freq;
+ gint rssi;
+ gint cinr;
+ gint tx_power;
+ char *bsid;
+} NMDeviceWimaxPrivate;
+
+enum {
+ PROP_0,
+ PROP_HW_ADDRESS,
+ PROP_ACTIVE_NSP,
+ PROP_CENTER_FREQ,
+ PROP_RSSI,
+ PROP_CINR,
+ PROP_TX_POWER,
+ PROP_BSID,
+ PROP_NSPS,
+
+ LAST_PROP
+};
+
+enum {
+ NSP_ADDED,
+ NSP_REMOVED,
+
+ LAST_SIGNAL
+};
+static guint signals[LAST_SIGNAL] = { 0 };
+
+/**
+ * nm_device_wimax_get_hw_address:
+ * @wimax: a #NMDeviceWimax
+ *
+ * Gets the hardware (MAC) address of the #NMDeviceWimax
+ *
+ * Returns: the hardware address. This is the internal string used by the
+ * device, and must not be modified.
+ **/
+const char *
+nm_device_wimax_get_hw_address (NMDeviceWimax *wimax)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_WIMAX (wimax), NULL);
+
+ return NM_DEVICE_WIMAX_GET_PRIVATE (wimax)->hw_address;
+}
+
+/**
+ * nm_device_wimax_get_active_nsp:
+ * @wimax: a #NMDeviceWimax
+ *
+ * Gets the active #NMWimaxNsp.
+ *
+ * Returns: (transfer full): the access point or %NULL if none is active
+ **/
+NMWimaxNsp *
+nm_device_wimax_get_active_nsp (NMDeviceWimax *wimax)
+{
+ NMDeviceState state;
+
+ g_return_val_if_fail (NM_IS_DEVICE_WIMAX (wimax), NULL);
+
+ state = nm_device_get_state (NM_DEVICE (wimax));
+ switch (state) {
+ case NM_DEVICE_STATE_PREPARE:
+ case NM_DEVICE_STATE_CONFIG:
+ case NM_DEVICE_STATE_NEED_AUTH:
+ case NM_DEVICE_STATE_IP_CONFIG:
+ case NM_DEVICE_STATE_IP_CHECK:
+ case NM_DEVICE_STATE_SECONDARIES:
+ case NM_DEVICE_STATE_ACTIVATED:
+ case NM_DEVICE_STATE_DEACTIVATING:
+ break;
+ default:
+ return NULL;
+ break;
+ }
+
+ return NM_DEVICE_WIMAX_GET_PRIVATE (wimax)->active_nsp;
+}
+
+/**
+ * nm_device_wimax_get_nsps:
+ * @wimax: a #NMDeviceWimax
+ *
+ * Gets all the scanned NSPs of the #NMDeviceWimax.
+ *
+ * Returns: (element-type NMWimaxNsp): a #GPtrArray containing
+ * all the scanned #NMWimaxNsps.
+ * The returned array is owned by the client and should not be modified.
+ **/
+const GPtrArray *
+nm_device_wimax_get_nsps (NMDeviceWimax *wimax)
+{
+ g_return_val_if_fail (NM_IS_DEVICE_WIMAX (wimax), NULL);
+
+ return NM_DEVICE_WIMAX_GET_PRIVATE (wimax)->nsps;
+}
+
+/**
+ * nm_device_wimax_get_nsp_by_path:
+ * @wimax: a #NMDeviceWimax
+ * @path: the object path of the NSP
+ *
+ * Gets a #NMWimaxNsp by path.
+ *
+ * Returns: (transfer none): the access point or %NULL if none is found.
+ **/
+NMWimaxNsp *
+nm_device_wimax_get_nsp_by_path (NMDeviceWimax *wimax,
+ const char *path)
+{
+ const GPtrArray *nsps;
+ int i;
+ NMWimaxNsp *nsp = NULL;
+
+ g_return_val_if_fail (NM_IS_DEVICE_WIMAX (wimax), NULL);
+ g_return_val_if_fail (path != NULL, NULL);
+
+ nsps = nm_device_wimax_get_nsps (wimax);
+ if (!nsps)
+ return NULL;
+
+ for (i = 0; i < nsps->len; i++) {
+ NMWimaxNsp *candidate = g_ptr_array_index (nsps, i);
+ if (!strcmp (nm_object_get_path (NM_OBJECT (candidate)), path)) {
+ nsp = candidate;
+ break;
+ }
+ }
+
+ return nsp;
+}
+
+static void
+clean_up_nsps (NMDeviceWimax *self)
+{
+ NMDeviceWimaxPrivate *priv;
+
+ g_return_if_fail (NM_IS_DEVICE_WIMAX (self));
+
+ priv = NM_DEVICE_WIMAX_GET_PRIVATE (self);
+
+ if (priv->active_nsp) {
+ g_object_unref (priv->active_nsp);
+ priv->active_nsp = NULL;
+ }
+
+ g_clear_pointer (&priv->nsps, g_ptr_array_unref);
+}
+
+/**
+ * nm_device_wimax_get_center_frequency:
+ * @self: a #NMDeviceWimax
+ *
+ * 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.
+ *
+ * Returns: the center frequency in KHz, or 0
+ **/
+guint
+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;
+}
+
+/**
+ * nm_device_wimax_get_rssi:
+ * @self: a #NMDeviceWimax
+ *
+ * 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.
+ *
+ * Returns: the RSSI in dBm, or 0
+ **/
+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;
+}
+
+/**
+ * nm_device_wimax_get_cinr:
+ * @self: a #NMDeviceWimax
+ *
+ * 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.
+ *
+ * Returns: the CINR in dB, or 0
+ **/
+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;
+}
+
+/**
+ * nm_device_wimax_get_tx_power:
+ * @self: a #NMDeviceWimax
+ *
+ * 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.
+ *
+ * Returns: the TX power in dBm, or 0
+ **/
+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;
+}
+
+/**
+ * nm_device_wimax_get_bsid:
+ * @self: a #NMDeviceWimax
+ *
+ * Gets the ID of the serving Base Station when the device is connected.
+ *
+ * Returns: the ID of the serving Base Station, or %NULL
+ **/
+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
+connection_compatible (NMDevice *device, NMConnection *connection, GError **error)
+{
+ NMSettingWimax *s_wimax;
+ const char *hwaddr, *setting_hwaddr;
+
+ if (!NM_DEVICE_CLASS (nm_device_wimax_parent_class)->connection_compatible (device, connection, error))
+ return FALSE;
+
+ if (!nm_connection_is_type (connection, NM_SETTING_WIMAX_SETTING_NAME)) {
+ g_set_error_literal (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION,
+ _("The connection was not a WiMAX connection."));
+ return FALSE;
+ }
+
+ /* Check MAC address */
+ hwaddr = nm_device_wimax_get_hw_address (NM_DEVICE_WIMAX (device));
+ if (hwaddr) {
+ if (!nm_utils_hwaddr_valid (hwaddr, ETH_ALEN)) {
+ g_set_error_literal (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_FAILED,
+ _("Invalid device MAC address."));
+ return FALSE;
+ }
+ s_wimax = nm_connection_get_setting_wimax (connection);
+ setting_hwaddr = nm_setting_wimax_get_mac_address (s_wimax);
+ if (setting_hwaddr && !nm_utils_hwaddr_matches (setting_hwaddr, -1, hwaddr, -1)) {
+ g_set_error_literal (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION,
+ _("The MACs of the device and the connection didn't match."));
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+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));
+}
+
+/**************************************************************/
+
+static void
+nm_device_wimax_init (NMDeviceWimax *device)
+{
+ _nm_device_set_device_type (NM_DEVICE (device), NM_DEVICE_TYPE_WIMAX);
+
+ g_signal_connect (device,
+ "notify::" NM_DEVICE_STATE,
+ G_CALLBACK (state_changed_cb),
+ NULL);
+}
+
+static void
+get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NMDeviceWimax *self = NM_DEVICE_WIMAX (object);
+
+ switch (prop_id) {
+ case PROP_HW_ADDRESS:
+ g_value_set_string (value, nm_device_wimax_get_hw_address (self));
+ break;
+ case PROP_ACTIVE_NSP:
+ g_value_set_object (value, nm_device_wimax_get_active_nsp (self));
+ break;
+ case PROP_CENTER_FREQ:
+ g_value_set_uint (value, nm_device_wimax_get_center_frequency (self));
+ break;
+ case PROP_RSSI:
+ g_value_set_int (value, nm_device_wimax_get_rssi (self));
+ break;
+ case PROP_CINR:
+ g_value_set_int (value, nm_device_wimax_get_cinr (self));
+ break;
+ case PROP_TX_POWER:
+ g_value_set_int (value, nm_device_wimax_get_tx_power (self));
+ break;
+ case PROP_BSID:
+ g_value_set_string (value, nm_device_wimax_get_bsid (self));
+ break;
+ case PROP_NSPS:
+ g_value_take_boxed (value, _nm_utils_copy_object_array (nm_device_wimax_get_nsps (self)));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+clear_link_status (NMDeviceWimax *self)
+{
+ NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (self);
+
+ if (priv->center_freq) {
+ priv->center_freq = 0;
+ _nm_object_queue_notify (NM_OBJECT (self), NM_DEVICE_WIMAX_CENTER_FREQUENCY);
+ }
+
+ if (priv->rssi) {
+ priv->rssi = 0;
+ _nm_object_queue_notify (NM_OBJECT (self), NM_DEVICE_WIMAX_RSSI);
+ }
+
+ if (priv->cinr) {
+ priv->cinr = 0;
+ _nm_object_queue_notify (NM_OBJECT (self), NM_DEVICE_WIMAX_CINR);
+ }
+
+ if (priv->tx_power) {
+ priv->tx_power = 0;
+ _nm_object_queue_notify (NM_OBJECT (self), NM_DEVICE_WIMAX_TX_POWER);
+ }
+
+ if (priv->bsid) {
+ g_free (priv->bsid);
+ priv->bsid = NULL;
+ _nm_object_queue_notify (NM_OBJECT (self), NM_DEVICE_WIMAX_BSID);
+ }
+}
+
+static void
+state_changed_cb (NMDevice *device, GParamSpec *pspec, gpointer user_data)
+{
+ NMDeviceWimax *self = NM_DEVICE_WIMAX (device);
+ NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (self);
+ NMDeviceState state;
+
+ state = nm_device_get_state (device);
+ switch (state) {
+ case NM_DEVICE_STATE_UNKNOWN:
+ case NM_DEVICE_STATE_UNMANAGED:
+ case NM_DEVICE_STATE_UNAVAILABLE:
+ case NM_DEVICE_STATE_DISCONNECTED:
+ case NM_DEVICE_STATE_FAILED:
+ if (priv->active_nsp) {
+ g_object_unref (priv->active_nsp);
+ priv->active_nsp = NULL;
+ }
+ _nm_object_queue_notify (NM_OBJECT (device), NM_DEVICE_WIMAX_ACTIVE_NSP);
+ clear_link_status (self);
+ break;
+ case NM_DEVICE_STATE_PREPARE:
+ case NM_DEVICE_STATE_CONFIG:
+ case NM_DEVICE_STATE_NEED_AUTH:
+ case NM_DEVICE_STATE_IP_CONFIG:
+ clear_link_status (self);
+ break;
+ default:
+ break;
+ }
+}
+
+static void
+init_dbus (NMObject *object)
+{
+ NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (object);
+ 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_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_NSPS, &priv->nsps, NULL, NM_TYPE_WIMAX_NSP, "nsp" },
+ { NULL },
+ };
+
+ NM_OBJECT_CLASS (nm_device_wimax_parent_class)->init_dbus (object);
+
+ _nm_object_register_properties (object,
+ NM_DBUS_INTERFACE_DEVICE_WIMAX,
+ property_info);
+}
+
+static void
+nsp_removed (NMDeviceWimax *self, NMWimaxNsp *nsp)
+{
+ NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (self);
+
+ 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
+dispose (GObject *object)
+{
+ NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (object);
+
+ if (priv->hw_address) {
+ g_free (priv->hw_address);
+ priv->hw_address = NULL;
+ }
+
+ if (priv->bsid) {
+ g_free (priv->bsid);
+ priv->bsid = NULL;
+ }
+
+ if (priv->nsps)
+ clean_up_nsps (NM_DEVICE_WIMAX (object));
+
+ G_OBJECT_CLASS (nm_device_wimax_parent_class)->dispose (object);
+}
+
+static void
+nm_device_wimax_class_init (NMDeviceWimaxClass *wimax_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (wimax_class);
+ NMObjectClass *nm_object_class = NM_OBJECT_CLASS (wimax_class);
+ NMDeviceClass *device_class = NM_DEVICE_CLASS (wimax_class);
+
+ g_type_class_add_private (wimax_class, sizeof (NMDeviceWimaxPrivate));
+
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_WIMAX);
+
+ /* virtual methods */
+ object_class->get_property = get_property;
+ object_class->dispose = dispose;
+
+ nm_object_class->init_dbus = init_dbus;
+
+ 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 */
+
+ /**
+ * NMDeviceWimax: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_WIMAX_HW_ADDRESS, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDeviceWimax:active-nsp:
+ *
+ * The active #NMWimaxNsp of the device.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_ACTIVE_NSP,
+ g_param_spec_object (NM_DEVICE_WIMAX_ACTIVE_NSP, "", "",
+ NM_TYPE_WIMAX_NSP,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDeviceWimax:center-frequency:
+ *
+ * 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.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_CENTER_FREQ,
+ g_param_spec_uint (NM_DEVICE_WIMAX_CENTER_FREQUENCY, "", "",
+ 0, G_MAXUINT, 0,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDeviceWimax:rssi:
+ *
+ * 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.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_RSSI,
+ g_param_spec_int (NM_DEVICE_WIMAX_RSSI, "", "",
+ G_MININT, G_MAXINT, 0,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDeviceWimax:cinr:
+ *
+ * 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.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_CINR,
+ g_param_spec_int (NM_DEVICE_WIMAX_CINR, "", "",
+ G_MININT, G_MAXINT, 0,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDeviceWimax:tx-power:
+ *
+ * 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.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_TX_POWER,
+ g_param_spec_int (NM_DEVICE_WIMAX_TX_POWER, "", "",
+ G_MININT, G_MAXINT, 0,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDeviceWimax:bsid:
+ *
+ * The ID of the serving base station as received from the network. Has
+ * no meaning when the device is not connected.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_BSID,
+ g_param_spec_string (NM_DEVICE_WIMAX_BSID, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDeviceWimax:nsps:
+ *
+ * List of all WiMAX Network Service Providers the device can see.
+ *
+ * Element-type: NMWimaxNsp
+ **/
+ g_object_class_install_property
+ (object_class, PROP_NSPS,
+ g_param_spec_boxed (NM_DEVICE_WIMAX_NSPS, "", "",
+ G_TYPE_PTR_ARRAY,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /* signals */
+
+ /**
+ * NMDeviceWimax::nsp-added:
+ * @self: the wimax device that received the signal
+ * @nsp: the new NSP
+ *
+ * Notifies that a #NMWimaxNsp is added to the wimax device.
+ **/
+ signals[NSP_ADDED] =
+ g_signal_new ("nsp-added",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMDeviceWimaxClass, nsp_added),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE, 1,
+ G_TYPE_OBJECT);
+
+ /**
+ * NMDeviceWimax::nsp-removed:
+ * @self: the wimax device that received the signal
+ * @nsp: the removed NSP
+ *
+ * Notifies that a #NMWimaxNsp is removed from the wimax device.
+ **/
+ signals[NSP_REMOVED] =
+ g_signal_new ("nsp-removed",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMDeviceWimaxClass, nsp_removed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE, 1,
+ G_TYPE_OBJECT);
+}
diff --git a/libnm/nm-device-wimax.h b/libnm/nm-device-wimax.h
new file mode 100644
index 000000000..60910984c
--- /dev/null
+++ b/libnm/nm-device-wimax.h
@@ -0,0 +1,81 @@
+/* -*- 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 2011 - 2012 Red Hat, Inc.
+ * Copyright 2009 Novell, Inc.
+ */
+
+#ifndef __NM_DEVICE_WIMAX_H__
+#define __NM_DEVICE_WIMAX_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-device.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_DEVICE_WIMAX (nm_device_wimax_get_type ())
+#define NM_DEVICE_WIMAX(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEVICE_WIMAX, NMDeviceWimax))
+#define NM_DEVICE_WIMAX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DEVICE_WIMAX, NMDeviceWimaxClass))
+#define NM_IS_DEVICE_WIMAX(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEVICE_WIMAX))
+#define NM_IS_DEVICE_WIMAX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_WIMAX))
+#define NM_DEVICE_WIMAX_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_WIMAX, NMDeviceWimaxClass))
+
+#define NM_DEVICE_WIMAX_HW_ADDRESS "hw-address"
+#define NM_DEVICE_WIMAX_ACTIVE_NSP "active-nsp"
+#define NM_DEVICE_WIMAX_CENTER_FREQUENCY "center-frequency"
+#define NM_DEVICE_WIMAX_RSSI "rssi"
+#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"
+
+struct _NMDeviceWimax {
+ NMDevice parent;
+};
+
+typedef struct {
+ NMDeviceClass parent;
+
+ /* Signals */
+ void (*nsp_added) (NMDeviceWimax *self, NMWimaxNsp *nsp);
+ void (*nsp_removed) (NMDeviceWimax *self, NMWimaxNsp *nsp);
+
+ /*< private >*/
+ gpointer padding[4];
+} NMDeviceWimaxClass;
+
+GType nm_device_wimax_get_type (void);
+
+const char *nm_device_wimax_get_hw_address (NMDeviceWimax *wimax);
+NMWimaxNsp *nm_device_wimax_get_active_nsp (NMDeviceWimax *wimax);
+NMWimaxNsp *nm_device_wimax_get_nsp_by_path (NMDeviceWimax *wimax,
+ const char *path);
+
+const GPtrArray *nm_device_wimax_get_nsps (NMDeviceWimax *wimax);
+
+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);
+
+G_END_DECLS
+
+#endif /* __NM_DEVICE_WIMAX_H__ */
diff --git a/libnm/nm-device.c b/libnm/nm-device.c
new file mode 100644
index 000000000..e80ac707d
--- /dev/null
+++ b/libnm/nm-device.c
@@ -0,0 +1,2232 @@
+/* -*- 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 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2012 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include <glib/gi18n-lib.h>
+#include <gudev/gudev.h>
+
+#include "nm-dbus-interface.h"
+#include "nm-active-connection.h"
+#include "nm-device-ethernet.h"
+#include "nm-device-adsl.h"
+#include "nm-device-wifi.h"
+#include "nm-device-modem.h"
+#include "nm-device-bt.h"
+#include "nm-device-olpc-mesh.h"
+#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-dhcp4-config.h"
+#include "nm-dhcp6-config.h"
+#include "nm-ip4-config.h"
+#include "nm-ip6-config.h"
+#include "nm-object-private.h"
+#include "nm-object-cache.h"
+#include "nm-remote-connection.h"
+#include "nm-core-internal.h"
+#include "nm-glib-compat.h"
+#include "nm-utils.h"
+#include "nm-dbus-helpers.h"
+#include "nm-setting-connection.h"
+
+#include "nmdbus-device.h"
+
+static GType _nm_device_decide_type (GVariant *value);
+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_decide_type,
+ NM_DBUS_INTERFACE_DEVICE,
+ "DeviceType");
+ )
+
+#define NM_DEVICE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE, NMDevicePrivate))
+
+typedef struct {
+ NMDBusDevice *proxy;
+
+ char *iface;
+ char *ip_iface;
+ NMDeviceType device_type;
+ char *udi;
+ char *driver;
+ char *driver_version;
+ char *firmware_version;
+ char *type_description;
+ NMDeviceCapabilities capabilities;
+ gboolean managed;
+ gboolean firmware_missing;
+ gboolean autoconnect;
+ NMIPConfig *ip4_config;
+ NMDhcpConfig *dhcp4_config;
+ NMIPConfig *ip6_config;
+ NMDhcpConfig *dhcp6_config;
+ NMDeviceState state;
+ NMDeviceState last_seen_state;
+ NMDeviceStateReason reason;
+
+ NMActiveConnection *active_connection;
+ GPtrArray *available_connections;
+
+ GUdevClient *client;
+ char *product, *short_product;
+ char *vendor, *short_vendor;
+ char *description, *bus_name;
+
+ char *physical_port_id;
+ guint32 mtu;
+} NMDevicePrivate;
+
+enum {
+ PROP_0,
+ PROP_INTERFACE,
+ PROP_UDI,
+ PROP_DRIVER,
+ PROP_DRIVER_VERSION,
+ PROP_FIRMWARE_VERSION,
+ PROP_CAPABILITIES,
+ PROP_MANAGED,
+ PROP_AUTOCONNECT,
+ PROP_FIRMWARE_MISSING,
+ PROP_IP4_CONFIG,
+ PROP_DHCP4_CONFIG,
+ PROP_IP6_CONFIG,
+ PROP_STATE,
+ PROP_STATE_REASON,
+ PROP_PRODUCT,
+ PROP_VENDOR,
+ PROP_DHCP6_CONFIG,
+ PROP_IP_INTERFACE,
+ PROP_DEVICE_TYPE,
+ PROP_ACTIVE_CONNECTION,
+ PROP_AVAILABLE_CONNECTIONS,
+ PROP_PHYSICAL_PORT_ID,
+ PROP_MTU,
+
+ LAST_PROP
+};
+
+enum {
+ STATE_CHANGED,
+
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+static void
+nm_device_init (NMDevice *device)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+
+ priv->state = NM_DEVICE_STATE_UNKNOWN;
+ priv->reason = NM_DEVICE_STATE_REASON_NONE;
+}
+
+static gboolean
+demarshal_state_reason (NMObject *object, GParamSpec *pspec, GVariant *value, gpointer field)
+{
+ guint32 *reason_field = field;
+
+ g_variant_get (value, "(uu)", NULL, reason_field);
+ _nm_object_queue_notify (object, NM_DEVICE_STATE_REASON);
+ return TRUE;
+}
+
+static void
+device_state_changed (NMDBusDevice *proxy,
+ guint new_state,
+ guint old_state,
+ guint reason,
+ gpointer user_data);
+
+static void
+init_dbus (NMObject *object)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (object);
+ const NMPropertiesInfo property_info[] = {
+ { NM_DEVICE_UDI, &priv->udi },
+ { NM_DEVICE_INTERFACE, &priv->iface },
+ { NM_DEVICE_IP_INTERFACE, &priv->ip_iface },
+ { NM_DEVICE_DRIVER, &priv->driver },
+ { NM_DEVICE_DRIVER_VERSION, &priv->driver_version },
+ { NM_DEVICE_FIRMWARE_VERSION, &priv->firmware_version },
+ { NM_DEVICE_CAPABILITIES, &priv->capabilities },
+ { NM_DEVICE_MANAGED, &priv->managed },
+ { NM_DEVICE_AUTOCONNECT, &priv->autoconnect },
+ { NM_DEVICE_FIRMWARE_MISSING, &priv->firmware_missing },
+ { NM_DEVICE_IP4_CONFIG, &priv->ip4_config, NULL, NM_TYPE_IP4_CONFIG },
+ { NM_DEVICE_DHCP4_CONFIG, &priv->dhcp4_config, NULL, NM_TYPE_DHCP4_CONFIG },
+ { NM_DEVICE_IP6_CONFIG, &priv->ip6_config, NULL, NM_TYPE_IP6_CONFIG },
+ { NM_DEVICE_DHCP6_CONFIG, &priv->dhcp6_config, NULL, NM_TYPE_DHCP6_CONFIG },
+ { NM_DEVICE_STATE, &priv->state },
+ { NM_DEVICE_STATE_REASON, &priv->reason, 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 },
+ { "device-type", NULL },
+
+ { NULL },
+ };
+
+ NM_OBJECT_CLASS (nm_device_parent_class)->init_dbus (object);
+
+ priv->proxy = NMDBUS_DEVICE (_nm_object_get_proxy (object, NM_DBUS_INTERFACE_DEVICE));
+ _nm_object_register_properties (object,
+ NM_DBUS_INTERFACE_DEVICE,
+ property_info);
+
+ g_signal_connect (priv->proxy, "state-changed",
+ G_CALLBACK (device_state_changed), object);
+}
+
+typedef struct {
+ NMDeviceState old_state;
+ NMDeviceState new_state;
+ NMDeviceStateReason reason;
+} StateChangeData;
+
+static void
+device_state_change_reloaded (GObject *object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ NMDevice *self = NM_DEVICE (object);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ StateChangeData *data = user_data;
+ NMDeviceState old_state = data->old_state;
+ NMDeviceState new_state = data->new_state;
+ NMDeviceStateReason reason = data->reason;
+
+ g_slice_free (StateChangeData, data);
+
+ _nm_object_reload_properties_finish (NM_OBJECT (object), result, NULL);
+
+ /* If the device changes state several times in rapid succession, then we'll
+ * queue several reload_properties() calls, and there's no guarantee that
+ * they'll finish in the right order. In that case, only emit the signal
+ * for the last one.
+ */
+ if (priv->last_seen_state != new_state)
+ return;
+
+ /* Ensure that nm_device_get_state() will return the right value even if
+ * we haven't processed the corresponding PropertiesChanged yet.
+ */
+ priv->state = new_state;
+
+ g_signal_emit (self, signals[STATE_CHANGED], 0,
+ new_state, old_state, reason);
+}
+
+static void
+device_state_changed (NMDBusDevice *proxy,
+ guint new_state,
+ guint old_state,
+ guint reason,
+ gpointer user_data)
+{
+ NMDevice *self = NM_DEVICE (user_data);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ StateChangeData *data;
+
+ if (old_state == new_state)
+ return;
+
+ /* Our object-valued properties (eg, ip4_config) will still
+ * have their old values at this point, because NMObject is
+ * in the process of asynchronously reading the new values.
+ * Wait for that to finish before emitting the signal.
+ */
+ priv->last_seen_state = new_state;
+
+ data = g_slice_new (StateChangeData);
+ data->old_state = old_state;
+ data->new_state = new_state;
+ data->reason = reason;
+ _nm_object_reload_properties_async (NM_OBJECT (user_data),
+ NULL,
+ device_state_change_reloaded,
+ data);
+}
+
+static GType
+_nm_device_gtype_from_dtype (NMDeviceType dtype)
+{
+ switch (dtype) {
+ case NM_DEVICE_TYPE_ETHERNET:
+ return NM_TYPE_DEVICE_ETHERNET;
+ case NM_DEVICE_TYPE_WIFI:
+ return NM_TYPE_DEVICE_WIFI;
+ case NM_DEVICE_TYPE_MODEM:
+ return NM_TYPE_DEVICE_MODEM;
+ case NM_DEVICE_TYPE_BT:
+ return NM_TYPE_DEVICE_BT;
+ case NM_DEVICE_TYPE_ADSL:
+ return NM_TYPE_DEVICE_ADSL;
+ case NM_DEVICE_TYPE_OLPC_MESH:
+ return NM_TYPE_DEVICE_OLPC_MESH;
+ case NM_DEVICE_TYPE_WIMAX:
+ return NM_TYPE_DEVICE_WIMAX;
+ case NM_DEVICE_TYPE_INFINIBAND:
+ 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;
+ }
+}
+
+static void
+constructed (GObject *object)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (object);
+
+ G_OBJECT_CLASS (nm_device_parent_class)->constructed (object);
+
+ /* Catch failure of subclasses to call _nm_device_set_device_type() */
+ g_warn_if_fail (priv->device_type != NM_DEVICE_TYPE_UNKNOWN);
+ /* Catch a subclass setting the wrong type */
+ g_warn_if_fail (G_OBJECT_TYPE (object) == _nm_device_gtype_from_dtype (priv->device_type));
+}
+
+static void
+dispose (GObject *object)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (object);
+
+ 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->client);
+ g_clear_object (&priv->active_connection);
+
+ g_clear_pointer (&priv->available_connections, g_ptr_array_unref);
+
+ G_OBJECT_CLASS (nm_device_parent_class)->dispose (object);
+}
+
+static void
+finalize (GObject *object)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (object);
+
+ g_free (priv->iface);
+ g_free (priv->ip_iface);
+ g_free (priv->udi);
+ g_free (priv->driver);
+ 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);
+}
+
+static void
+get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NMDevice *device = NM_DEVICE (object);
+
+ switch (prop_id) {
+ case PROP_DEVICE_TYPE:
+ g_value_set_enum (value, nm_device_get_device_type (device));
+ break;
+ case PROP_UDI:
+ g_value_set_string (value, nm_device_get_udi (device));
+ break;
+ case PROP_INTERFACE:
+ g_value_set_string (value, nm_device_get_iface (device));
+ break;
+ case PROP_IP_INTERFACE:
+ g_value_set_string (value, nm_device_get_ip_iface (device));
+ break;
+ case PROP_DRIVER:
+ g_value_set_string (value, nm_device_get_driver (device));
+ break;
+ case PROP_DRIVER_VERSION:
+ g_value_set_string (value, nm_device_get_driver_version (device));
+ break;
+ case PROP_FIRMWARE_VERSION:
+ g_value_set_string (value, nm_device_get_firmware_version (device));
+ break;
+ case PROP_CAPABILITIES:
+ g_value_set_flags (value, nm_device_get_capabilities (device));
+ break;
+ case PROP_MANAGED:
+ g_value_set_boolean (value, nm_device_get_managed (device));
+ break;
+ case PROP_AUTOCONNECT:
+ g_value_set_boolean (value, nm_device_get_autoconnect (device));
+ break;
+ case PROP_FIRMWARE_MISSING:
+ g_value_set_boolean (value, nm_device_get_firmware_missing (device));
+ break;
+ case PROP_IP4_CONFIG:
+ g_value_set_object (value, nm_device_get_ip4_config (device));
+ break;
+ case PROP_DHCP4_CONFIG:
+ g_value_set_object (value, nm_device_get_dhcp4_config (device));
+ break;
+ case PROP_IP6_CONFIG:
+ g_value_set_object (value, nm_device_get_ip6_config (device));
+ break;
+ case PROP_DHCP6_CONFIG:
+ g_value_set_object (value, nm_device_get_dhcp6_config (device));
+ break;
+ case PROP_STATE:
+ g_value_set_enum (value, nm_device_get_state (device));
+ break;
+ case PROP_STATE_REASON:
+ g_value_set_uint (value, nm_device_get_state_reason (device));
+ break;
+ case PROP_ACTIVE_CONNECTION:
+ g_value_set_object (value, nm_device_get_active_connection (device));
+ break;
+ case PROP_AVAILABLE_CONNECTIONS:
+ g_value_take_boxed (value, _nm_utils_copy_object_array (nm_device_get_available_connections (device)));
+ break;
+ case PROP_PRODUCT:
+ g_value_set_string (value, nm_device_get_product (device));
+ break;
+ 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;
+ }
+}
+
+static void
+set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NMDevice *self = NM_DEVICE (object);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ gboolean b;
+
+ switch (prop_id) {
+ case PROP_DEVICE_TYPE:
+ /* Construct only */
+ priv->device_type = g_value_get_enum (value);
+ break;
+ case PROP_AUTOCONNECT:
+ b = g_value_get_boolean (value);
+ if (priv->autoconnect != b)
+ nm_device_set_autoconnect (NM_DEVICE (object), b);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_device_class_init (NMDeviceClass *device_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (device_class);
+ NMObjectClass *nm_object_class = NM_OBJECT_CLASS (device_class);
+
+ g_type_class_add_private (device_class, sizeof (NMDevicePrivate));
+
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE);
+ _nm_dbus_register_proxy_type (NM_DBUS_INTERFACE_DEVICE, NMDBUS_TYPE_DEVICE_PROXY);
+
+ /* virtual methods */
+ object_class->constructed = constructed;
+ object_class->get_property = get_property;
+ object_class->set_property = set_property;
+ object_class->dispose = dispose;
+ object_class->finalize = finalize;
+
+ nm_object_class->init_dbus = init_dbus;
+
+ device_class->connection_compatible = connection_compatible;
+
+ /* properties */
+
+ /**
+ * NMDevice:interface:
+ *
+ * The interface of the device.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_INTERFACE,
+ g_param_spec_string (NM_DEVICE_INTERFACE, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDevice:ip-interface:
+ *
+ * The IP interface of the device which should be used for all IP-related
+ * operations like addressing and routing.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_IP_INTERFACE,
+ g_param_spec_string (NM_DEVICE_IP_INTERFACE, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDevice:device-type:
+ *
+ * The numeric type of the device.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_DEVICE_TYPE,
+ g_param_spec_enum (NM_DEVICE_DEVICE_TYPE, "", "",
+ NM_TYPE_DEVICE_TYPE,
+ NM_DEVICE_TYPE_UNKNOWN,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+ /**
+ * NMDevice:udi:
+ *
+ * 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.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_UDI,
+ g_param_spec_string (NM_DEVICE_UDI, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDevice:driver:
+ *
+ * The driver of the device.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_DRIVER,
+ g_param_spec_string (NM_DEVICE_DRIVER, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDevice:driver-version:
+ *
+ * The version of the device driver.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_DRIVER_VERSION,
+ g_param_spec_string (NM_DEVICE_DRIVER_VERSION, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDevice:firmware-version:
+ *
+ * The firmware version of the device.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_FIRMWARE_VERSION,
+ g_param_spec_string (NM_DEVICE_FIRMWARE_VERSION, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDevice:capabilities:
+ *
+ * The capabilities of the device.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_CAPABILITIES,
+ g_param_spec_flags (NM_DEVICE_CAPABILITIES, "", "",
+ NM_TYPE_DEVICE_CAPABILITIES,
+ NM_DEVICE_CAP_NONE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDevice:managed:
+ *
+ * Whether the device is managed by NetworkManager.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_MANAGED,
+ g_param_spec_boolean (NM_DEVICE_MANAGED, "", "",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDevice:autoconnect:
+ *
+ * Whether the device can auto-activate a connection.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_AUTOCONNECT,
+ g_param_spec_boolean (NM_DEVICE_AUTOCONNECT, "", "",
+ TRUE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDevice:firmware-missing:
+ *
+ * When %TRUE indicates the device is likely missing firmware required
+ * for its operation.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_FIRMWARE_MISSING,
+ g_param_spec_boolean (NM_DEVICE_FIRMWARE_MISSING, "", "",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDevice:ip4-config:
+ *
+ * The #NMIP4Config of the device.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_IP4_CONFIG,
+ g_param_spec_object (NM_DEVICE_IP4_CONFIG, "", "",
+ NM_TYPE_IP_CONFIG,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDevice:dhcp4-config:
+ *
+ * The IPv4 #NMDhcpConfig of the device.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_DHCP4_CONFIG,
+ g_param_spec_object (NM_DEVICE_DHCP4_CONFIG, "", "",
+ NM_TYPE_DHCP_CONFIG,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDevice:ip6-config:
+ *
+ * The IPv6 #NMIPConfig of the device.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_IP6_CONFIG,
+ g_param_spec_object (NM_DEVICE_IP6_CONFIG, "", "",
+ NM_TYPE_IP_CONFIG,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDevice:dhcp6-config:
+ *
+ * The IPv6 #NMDhcpConfig of the device.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_DHCP6_CONFIG,
+ g_param_spec_object (NM_DEVICE_DHCP6_CONFIG, "", "",
+ NM_TYPE_DHCP_CONFIG,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDevice:state:
+ *
+ * The state of the device.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_STATE,
+ g_param_spec_enum (NM_DEVICE_STATE, "", "",
+ NM_TYPE_DEVICE_STATE,
+ NM_DEVICE_STATE_UNKNOWN,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDevice:state-reason:
+ *
+ * The reason for the device state.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_STATE_REASON,
+ g_param_spec_uint (NM_DEVICE_STATE_REASON, "", "",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDevice:active-connection:
+ *
+ * The #NMActiveConnection object that "owns" this device during activation.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_ACTIVE_CONNECTION,
+ g_param_spec_object (NM_DEVICE_ACTIVE_CONNECTION, "", "",
+ NM_TYPE_ACTIVE_CONNECTION,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDevice:available-connections:
+ *
+ * The available connections of the device
+ *
+ * Element-type: NMRemoteConnection
+ **/
+ g_object_class_install_property
+ (object_class, PROP_AVAILABLE_CONNECTIONS,
+ g_param_spec_boxed (NM_DEVICE_AVAILABLE_CONNECTIONS, "", "",
+ G_TYPE_PTR_ARRAY,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDevice:vendor:
+ *
+ * The vendor string of the device.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_VENDOR,
+ g_param_spec_string (NM_DEVICE_VENDOR, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDevice:product:
+ *
+ * The product string of the device.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_PRODUCT,
+ g_param_spec_string (NM_DEVICE_PRODUCT, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDevice:physical-port-id:
+ *
+ * The physical port ID of the device. (See
+ * nm_device_get_physical_port_id().)
+ **/
+ g_object_class_install_property
+ (object_class, PROP_PHYSICAL_PORT_ID,
+ g_param_spec_string (NM_DEVICE_PHYSICAL_PORT_ID, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDevice:mtu:
+ *
+ * The MTU of the device.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_MTU,
+ g_param_spec_uint (NM_DEVICE_MTU, "", "",
+ 0, G_MAXUINT32, 1500,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /* signals */
+
+ /**
+ * NMDevice::state-changed:
+ * @device: the device object that received the signal
+ * @new_state: the new state of the device
+ * @old_state: the previous state of the device
+ * @reason: the reason describing the state change
+ *
+ * Notifies the state change of a #NMDevice.
+ **/
+ signals[STATE_CHANGED] =
+ g_signal_new ("state-changed",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMDeviceClass, state_changed),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 3,
+ G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT);
+}
+
+/**
+ * _nm_device_set_device_type:
+ * @device: the device
+ * @dtype: the NM device type
+ *
+ * Sets the NM device type if it wasn't set during construction. INTERNAL
+ * ONLY METHOD.
+ **/
+void
+_nm_device_set_device_type (NMDevice *device, NMDeviceType dtype)
+{
+ NMDevicePrivate *priv;
+
+ g_return_if_fail (device != NULL);
+ g_return_if_fail (dtype != NM_DEVICE_TYPE_UNKNOWN);
+
+ priv = NM_DEVICE_GET_PRIVATE (device);
+ if (priv->device_type == NM_DEVICE_TYPE_UNKNOWN)
+ priv->device_type = dtype;
+ else
+ g_warn_if_fail (dtype == priv->device_type);
+}
+
+static GType
+_nm_device_decide_type (GVariant *value)
+{
+ return _nm_device_gtype_from_dtype (g_variant_get_uint32 (value));
+}
+
+/**
+ * nm_device_get_iface:
+ * @device: a #NMDevice
+ *
+ * Gets the interface name of the #NMDevice.
+ *
+ * Returns: the interface of the device. This is the internal string used by the
+ * device, and must not be modified.
+ **/
+const char *
+nm_device_get_iface (NMDevice *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
+
+ return NM_DEVICE_GET_PRIVATE (device)->iface;
+}
+
+/**
+ * nm_device_get_ip_iface:
+ * @device: a #NMDevice
+ *
+ * Gets the IP interface name of the #NMDevice over which IP traffic flows
+ * when the device is in the ACTIVATED state.
+ *
+ * Returns: the IP traffic interface of the device. This is the internal string
+ * used by the device, and must not be modified.
+ **/
+const char *
+nm_device_get_ip_iface (NMDevice *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
+
+ return NM_DEVICE_GET_PRIVATE (device)->ip_iface;
+}
+
+/**
+ * nm_device_get_device_type:
+ * @device: a #NMDevice
+ *
+ * Returns the numeric type of the #NMDevice, ie Ethernet, Wi-Fi, etc.
+ *
+ * Returns: the device 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)->device_type;
+}
+
+/**
+ * nm_device_get_udi:
+ * @device: a #NMDevice
+ *
+ * Gets the Unique Device Identifier of the #NMDevice.
+ *
+ * Returns: 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.
+ **/
+const char *
+nm_device_get_udi (NMDevice *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
+
+ return NM_DEVICE_GET_PRIVATE (device)->udi;
+}
+
+/**
+ * nm_device_get_driver:
+ * @device: a #NMDevice
+ *
+ * Gets the driver of the #NMDevice.
+ *
+ * Returns: the driver of the device. This is the internal string used by the
+ * device, and must not be modified.
+ **/
+const char *
+nm_device_get_driver (NMDevice *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
+
+ return NM_DEVICE_GET_PRIVATE (device)->driver;
+}
+
+/**
+ * nm_device_get_driver_version:
+ * @device: a #NMDevice
+ *
+ * Gets the driver version of the #NMDevice.
+ *
+ * Returns: the version of the device driver. This is the internal string used by the
+ * device, and must not be modified.
+ **/
+const char *
+nm_device_get_driver_version (NMDevice *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
+
+ return NM_DEVICE_GET_PRIVATE (device)->driver_version;
+}
+
+/**
+ * nm_device_get_firmware_version:
+ * @device: a #NMDevice
+ *
+ * Gets the firmware version of the #NMDevice.
+ *
+ * Returns: the firmware version of the device. This is the internal string used by the
+ * device, and must not be modified.
+ **/
+const char *
+nm_device_get_firmware_version (NMDevice *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
+
+ return NM_DEVICE_GET_PRIVATE (device)->firmware_version;
+}
+
+/**
+ * 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.
+ **/
+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.
+ **/
+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
+ *
+ * Gets the device' capabilities.
+ *
+ * Returns: the capabilities
+ **/
+NMDeviceCapabilities
+nm_device_get_capabilities (NMDevice *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (device), 0);
+
+ return NM_DEVICE_GET_PRIVATE (device)->capabilities;
+}
+
+/**
+ * nm_device_get_managed:
+ * @device: a #NMDevice
+ *
+ * Whether the #NMDevice is managed by NetworkManager.
+ *
+ * Returns: %TRUE if the device is managed by NetworkManager
+ **/
+gboolean
+nm_device_get_managed (NMDevice *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (device), 0);
+
+ return NM_DEVICE_GET_PRIVATE (device)->managed;
+}
+
+/**
+ * nm_device_get_autoconnect:
+ * @device: a #NMDevice
+ *
+ * Whether the #NMDevice can be autoconnected.
+ *
+ * Returns: %TRUE if the device is allowed to be autoconnected
+ **/
+gboolean
+nm_device_get_autoconnect (NMDevice *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (device), FALSE);
+
+ return NM_DEVICE_GET_PRIVATE (device)->autoconnect;
+}
+
+/**
+ * nm_device_set_autoconnect:
+ * @device: a #NMDevice
+ * @autoconnect: %TRUE to enable autoconnecting
+ *
+ * Enables or disables automatic activation of the #NMDevice.
+ **/
+void
+nm_device_set_autoconnect (NMDevice *device, gboolean autoconnect)
+{
+ g_return_if_fail (NM_IS_DEVICE (device));
+
+ NM_DEVICE_GET_PRIVATE (device)->autoconnect = autoconnect;
+
+ _nm_object_set_property (NM_OBJECT (device),
+ NM_DBUS_INTERFACE_DEVICE,
+ "Autoconnect",
+ "b", autoconnect);
+}
+
+/**
+ * nm_device_get_firmware_missing:
+ * @device: a #NMDevice
+ *
+ * Indicates that firmware required for the device's operation is likely
+ * to be missing.
+ *
+ * Returns: %TRUE if firmware required for the device's operation is likely
+ * to be missing.
+ **/
+gboolean
+nm_device_get_firmware_missing (NMDevice *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (device), 0);
+
+ return NM_DEVICE_GET_PRIVATE (device)->firmware_missing;
+}
+
+/**
+ * nm_device_get_ip4_config:
+ * @device: a #NMDevice
+ *
+ * Gets the current IPv4 #NMIPConfig associated with the #NMDevice.
+ *
+ * You can alternatively use nm_active_connection_get_ip4_config(), which also
+ * works with VPN connections.
+ *
+ * Returns: (transfer none): the IPv4 #NMIPConfig, or %NULL if the device is not
+ * activated.
+ **/
+NMIPConfig *
+nm_device_get_ip4_config (NMDevice *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
+
+ return NM_DEVICE_GET_PRIVATE (device)->ip4_config;
+}
+
+/**
+ * nm_device_get_dhcp4_config:
+ * @device: a #NMDevice
+ *
+ * Gets the current IPv4 #NMDhcpConfig associated with the #NMDevice.
+ *
+ * You can alternatively use nm_active_connection_get_dhcp4_config(), which also
+ * works with VPN connections.
+ *
+ * Returns: (transfer none): the IPv4 #NMDhcpConfig, or %NULL if the device is
+ * not activated or not using DHCP.
+ **/
+NMDhcpConfig *
+nm_device_get_dhcp4_config (NMDevice *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
+
+ return NM_DEVICE_GET_PRIVATE (device)->dhcp4_config;
+}
+
+/**
+ * nm_device_get_ip6_config:
+ * @device: a #NMDevice
+ *
+ * Gets the current IPv6 #NMIPConfig associated with the #NMDevice.
+ *
+ * You can alternatively use nm_active_connection_get_ip6_config(), which also
+ * works with VPN connections.
+ *
+ * Returns: (transfer none): the IPv6 #NMIPConfig or %NULL if the device is not activated.
+ **/
+NMIPConfig *
+nm_device_get_ip6_config (NMDevice *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
+
+ return NM_DEVICE_GET_PRIVATE (device)->ip6_config;
+}
+
+/**
+ * nm_device_get_dhcp6_config:
+ * @device: a #NMDevice
+ *
+ * Gets the current IPv6 #NMDhcpConfig associated with the #NMDevice.
+ *
+ * You can alternatively use nm_active_connection_get_dhcp6_config(), which also
+ * works with VPN connections.
+ *
+ * Returns: (transfer none): the IPv6 #NMDhcpConfig, or %NULL if the device is
+ * not activated or not using DHCPv6.
+ **/
+NMDhcpConfig *
+nm_device_get_dhcp6_config (NMDevice *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
+
+ return NM_DEVICE_GET_PRIVATE (device)->dhcp6_config;
+}
+
+/**
+ * nm_device_get_state:
+ * @device: a #NMDevice
+ *
+ * Gets the current #NMDevice state.
+ *
+ * Returns: the current device 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;
+}
+
+/**
+ * nm_device_get_state_reason:
+ * @device: a #NMDevice
+ *
+ * Gets the reason for entering the current #NMDevice state.
+ *
+ * Returns: the reason for entering the current device state
+ **/
+NMDeviceStateReason
+nm_device_get_state_reason (NMDevice *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (device), NM_DEVICE_STATE_REASON_UNKNOWN);
+
+ return NM_DEVICE_GET_PRIVATE (device)->reason;
+}
+
+/**
+ * nm_device_get_active_connection:
+ * @device: a #NMDevice
+ *
+ * Gets the #NMActiveConnection object which owns this device during activation.
+ *
+ * Returns: (transfer none): the #NMActiveConnection or %NULL if the device is
+ * not part of an active connection
+ **/
+NMActiveConnection *
+nm_device_get_active_connection (NMDevice *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
+
+ return NM_DEVICE_GET_PRIVATE (device)->active_connection;
+}
+
+/**
+ * nm_device_get_available_connections:
+ * @device: a #NMDevice
+ *
+ * Gets the #NMRemoteConnections currently known to the daemon that could
+ * be activated on @device.
+ *
+ * Returns: (element-type NMRemoteConnection): the #GPtrArray
+ * containing #NMRemoteConnections. This is the internal copy used by
+ * the connection, and must not be modified.
+ **/
+const GPtrArray *
+nm_device_get_available_connections (NMDevice *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
+
+ return NM_DEVICE_GET_PRIVATE (device)->available_connections;
+}
+
+static inline guint8
+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;
+}
+
+static char *
+get_decoded_property (GUdevDevice *device, const char *property)
+{
+ const char *orig, *p;
+ char *unescaped, *n;
+ guint len;
+
+ p = orig = g_udev_device_get_property (device, property);
+ if (!orig)
+ return NULL;
+
+ len = strlen (orig);
+ n = unescaped = g_malloc0 (len + 1);
+ while (*p) {
+ if ((len >= 4) && (*p == '\\') && (*(p+1) == 'x')) {
+ *n++ = (char) hex2byte (p + 2);
+ p += 4;
+ len -= 4;
+ } else {
+ *n++ = *p++;
+ len--;
+ }
+ }
+
+ 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);
+ GUdevDevice *udev_device = NULL, *tmpdev, *olddev;
+ const char *ifname;
+ guint32 count = 0;
+ char *enc_value = NULL, *db_value = NULL;
+
+ if (!ensure_udev_client (device))
+ return NULL;
+
+ ifname = nm_device_get_iface (device);
+ if (!ifname)
+ return NULL;
+
+ udev_device = g_udev_client_query_by_subsystem_and_name (priv->client, "net", ifname);
+ if (!udev_device)
+ udev_device = g_udev_client_query_by_subsystem_and_name (priv->client, "tty", ifname);
+ if (!udev_device)
+ return NULL;
+
+ /* Walk up the chain of the device and its parents a few steps to grab
+ * vendor and device ID information off it.
+ */
+
+ /* Ref the device again because we have to unref it each iteration,
+ * as g_udev_device_get_parent() returns a ref-ed object.
+ */
+ tmpdev = g_object_ref (udev_device);
+ while ((count++ < 3) && tmpdev && !enc_value) {
+ if (!enc_value)
+ enc_value = get_decoded_property (tmpdev, enc_prop);
+ if (!db_value)
+ db_value = g_strdup (g_udev_device_get_property (tmpdev, db_prop));
+
+ olddev = tmpdev;
+ tmpdev = g_udev_device_get_parent (tmpdev);
+ g_object_unref (olddev);
+ }
+
+ /* Unref the last device if we found what we needed before running out
+ * of parents.
+ */
+ if (tmpdev)
+ g_object_unref (tmpdev);
+
+ /* Balance the initial g_udev_client_query_by_subsystem_and_name() */
+ g_object_unref (udev_device);
+
+ /* Prefer the encoded value which comes directly from the device
+ * over the hwdata database value.
+ */
+ if (enc_value) {
+ g_free (db_value);
+ return enc_value;
+ }
+
+ return db_value;
+}
+
+/**
+ * nm_device_get_product:
+ * @device: a #NMDevice
+ *
+ * Gets the product string of the #NMDevice.
+ *
+ * Returns: the product name of the device. This is the internal string used by the
+ * device, and must not be modified.
+ **/
+const char *
+nm_device_get_product (NMDevice *device)
+{
+ NMDevicePrivate *priv;
+
+ g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
+
+ priv = NM_DEVICE_GET_PRIVATE (device);
+ if (!priv->product) {
+ priv->product = _get_udev_property (device, "ID_MODEL_ENC", "ID_MODEL_FROM_DATABASE");
+ if (!priv->product) {
+ /* Sometimes ID_PRODUCT_FROM_DATABASE is used? */
+ priv->product = _get_udev_property (device, "ID_MODEL_ENC", "ID_PRODUCT_FROM_DATABASE");
+ }
+ _nm_object_queue_notify (NM_OBJECT (device), NM_DEVICE_PRODUCT);
+ }
+ return priv->product;
+}
+
+/**
+ * nm_device_get_vendor:
+ * @device: a #NMDevice
+ *
+ * Gets the vendor string of the #NMDevice.
+ *
+ * Returns: the vendor name of the device. This is the internal string used by the
+ * device, and must not be modified.
+ **/
+const char *
+nm_device_get_vendor (NMDevice *device)
+{
+ NMDevicePrivate *priv;
+
+ g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
+
+ priv = NM_DEVICE_GET_PRIVATE (device);
+ if (!priv->vendor) {
+ priv->vendor = _get_udev_property (device, "ID_VENDOR_ENC", "ID_VENDOR_FROM_DATABASE");
+ _nm_object_queue_notify (NM_OBJECT (device), NM_DEVICE_VENDOR);
+ }
+ 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, based on its vendor and product names.
+ *
+ * Returns: a description of @device. If either the vendor or the
+ * product name is unknown, this returns the interface name.
+ */
+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
+ */
+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.
+ **/
+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);
+
+ 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.
+ **/
+guint32
+nm_device_get_mtu (NMDevice *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (device), 0);
+
+ return NM_DEVICE_GET_PRIVATE (device)->mtu;
+}
+
+/**
+ * nm_device_is_software:
+ * @device: a #NMDevice
+ *
+ * Whether the device is a software device.
+ *
+ * Returns: %TRUE if @device is a software device, %FALSE if it is a hardware device.
+ **/
+gboolean
+nm_device_is_software (NMDevice *device)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (device), FALSE);
+
+ return !!(NM_DEVICE_GET_PRIVATE (device)->capabilities & NM_DEVICE_CAP_IS_SOFTWARE);
+}
+
+/**
+ * nm_device_disconnect:
+ * @device: a #NMDevice
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: location for a #GError, or %NULL
+ *
+ * Disconnects the device if currently connected, and prevents the device from
+ * automatically connecting to networks until the next manual network connection
+ * request.
+ *
+ * Returns: %TRUE on success, %FALSE on error, in which case @error will be set.
+ **/
+gboolean
+nm_device_disconnect (NMDevice *device,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean ret;
+
+ g_return_val_if_fail (NM_IS_DEVICE (device), FALSE);
+
+ ret = nmdbus_device_call_disconnect_sync (NM_DEVICE_GET_PRIVATE (device)->proxy,
+ cancellable, error);
+ if (error && *error)
+ g_dbus_error_strip_remote_error (*error);
+ return ret;
+}
+
+static void
+device_disconnect_cb (GObject *proxy,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *simple = user_data;
+ GError *error = NULL;
+
+ if (nmdbus_device_call_disconnect_finish (NMDBUS_DEVICE (proxy), result, &error))
+ g_simple_async_result_set_op_res_gboolean (simple, TRUE);
+ else {
+ g_dbus_error_strip_remote_error (error);
+ g_simple_async_result_take_error (simple, error);
+ }
+
+ g_simple_async_result_complete (simple);
+ g_object_unref (simple);
+}
+
+/**
+ * nm_device_disconnect_async:
+ * @device: a #NMDevice
+ * @cancellable: a #GCancellable, or %NULL
+ * @callback: callback to be called when the disconnect operation completes
+ * @user_data: caller-specific data passed to @callback
+ *
+ * Asynchronously begins disconnecting the device if currently connected, and
+ * prevents the device from automatically connecting to networks until the next
+ * manual network connection request.
+ **/
+void
+nm_device_disconnect_async (NMDevice *device,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *simple;
+
+ g_return_if_fail (NM_IS_DEVICE (device));
+
+ simple = g_simple_async_result_new (G_OBJECT (device), callback, user_data,
+ nm_device_disconnect_async);
+
+ nmdbus_device_call_disconnect (NM_DEVICE_GET_PRIVATE (device)->proxy,
+ cancellable,
+ device_disconnect_cb, simple);
+}
+
+/**
+ * nm_device_disconnect_finish:
+ * @device: a #NMDevice
+ * @result: the result passed to the #GAsyncReadyCallback
+ * @error: location for a #GError, or %NULL
+ *
+ * Gets the result of a call to nm_device_disconnect_async().
+ *
+ * Returns: %TRUE on success, %FALSE on error, in which case @error
+ * will be set.
+ **/
+gboolean
+nm_device_disconnect_finish (NMDevice *device,
+ GAsyncResult *result,
+ GError **error)
+{
+ GSimpleAsyncResult *simple;
+
+ g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (device), nm_device_disconnect_async), FALSE);
+
+ simple = G_SIMPLE_ASYNC_RESULT (result);
+ if (g_simple_async_result_propagate_error (simple, error))
+ return FALSE;
+ else
+ return g_simple_async_result_get_op_res_gboolean (simple);
+}
+
+/**
+ * nm_device_delete:
+ * @device: a #NMDevice
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: location for a #GError, or %NULL
+ *
+ * Deletes the software device. Hardware devices can't be deleted.
+ *
+ * Returns: %TRUE on success, %FALSE on error, in which case @error
+ * will be set.
+ **/
+gboolean
+nm_device_delete (NMDevice *device,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean ret;
+
+ g_return_val_if_fail (NM_IS_DEVICE (device), FALSE);
+
+ ret = nmdbus_device_call_delete_sync (NM_DEVICE_GET_PRIVATE (device)->proxy,
+ cancellable, error);
+ if (error && *error)
+ g_dbus_error_strip_remote_error (*error);
+ return ret;
+}
+
+static void
+device_delete_cb (GObject *proxy,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *simple = user_data;
+ GError *error = NULL;
+
+ if (nmdbus_device_call_delete_finish (NMDBUS_DEVICE (proxy), result, &error))
+ g_simple_async_result_set_op_res_gboolean (simple, TRUE);
+ else {
+ g_dbus_error_strip_remote_error (error);
+ g_simple_async_result_take_error (simple, error);
+ }
+
+ g_simple_async_result_complete (simple);
+ g_object_unref (simple);
+}
+
+/**
+ * nm_device_delete_async:
+ * @device: a #NMDevice
+ * @cancellable: a #GCancellable, or %NULL
+ * @callback: callback to be called when delete operation completes
+ * @user_data: caller-specific data passed to @callback
+ *
+ * Asynchronously begins deleteing the software device. Hardware devices can't
+ * be deleted.
+ **/
+void
+nm_device_delete_async (NMDevice *device,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *simple;
+
+ g_return_if_fail (NM_IS_DEVICE (device));
+
+ simple = g_simple_async_result_new (G_OBJECT (device), callback, user_data,
+ nm_device_delete_async);
+
+ nmdbus_device_call_delete (NM_DEVICE_GET_PRIVATE (device)->proxy,
+ cancellable,
+ device_delete_cb, simple);
+}
+
+/**
+ * nm_device_delete_finish:
+ * @device: a #NMDevice
+ * @result: the result passed to the #GAsyncReadyCallback
+ * @error: location for a #GError, or %NULL
+ *
+ * Gets the result of a call to nm_device_delete_async().
+ *
+ * Returns: %TRUE on success, %FALSE on error, in which case @error
+ * will be set.
+ **/
+gboolean
+nm_device_delete_finish (NMDevice *device,
+ GAsyncResult *result,
+ GError **error)
+{
+ GSimpleAsyncResult *simple;
+
+ g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (device), nm_device_delete_async), FALSE);
+
+ simple = G_SIMPLE_ASYNC_RESULT (result);
+ if (g_simple_async_result_propagate_error (simple, error))
+ return FALSE;
+ else
+ return g_simple_async_result_get_op_res_gboolean (simple);
+}
+
+/**
+ * nm_device_connection_valid:
+ * @device: an #NMDevice to validate @connection against
+ * @connection: an #NMConnection to validate against @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 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.
+ *
+ * Returns: %TRUE if the connection may be activated with this device, %FALSE
+ * if is incompatible with the device's capabilities and characteristics.
+ **/
+gboolean
+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)
+{
+ const char *config_iface, *device_iface;
+ GError *local = NULL;
+
+ if (!nm_connection_verify (connection, &local)) {
+ g_set_error (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_INVALID_CONNECTION,
+ _("The connection was not valid: %s"), local->message);
+ g_error_free (local);
+ return FALSE;
+ }
+
+ config_iface = nm_connection_get_interface_name (connection);
+ 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_INCOMPATIBLE_CONNECTION,
+ _("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
+ * @connection: an #NMConnection to validate against @device
+ * @error: return location for a #GError, or %NULL
+ *
+ * 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 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.
+ *
+ * This function does the same as nm_device_connection_valid(), i.e. checking
+ * compatibility of the given device and connection. But, in addition, it sets
+ * GError when FALSE is returned.
+ *
+ * Returns: %TRUE if the connection may be activated with this device, %FALSE
+ * if is incompatible with the device's capabilities and characteristics.
+ **/
+gboolean
+nm_device_connection_compatible (NMDevice *device, NMConnection *connection, GError **error)
+{
+ 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);
+}
+
+/**
+ * nm_device_filter_connections:
+ * @device: an #NMDevice to filter connections for
+ * @connections: (element-type NMConnection): an array of #NMConnections to filter
+ *
+ * Filters a given array of connections for a given #NMDevice object and returns
+ * connections which may be activated with the device. For example if @device
+ * is a Wi-Fi device that supports only WEP encryption, the returned array will
+ * contain any Wi-Fi connections in @connections that allow connection to
+ * unencrypted or WEP-enabled SSIDs. The returned array will not contain
+ * 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_client_get_connections().
+ *
+ * Returns: (transfer container) (element-type NMConnection): an array of
+ * #NMConnections that could be activated with the given @device. The array
+ * should be freed with g_ptr_array_unref() when it is no longer required.
+ **/
+GPtrArray *
+nm_device_filter_connections (NMDevice *device, const GPtrArray *connections)
+{
+ GPtrArray *filtered;
+ int i;
+
+ filtered = g_ptr_array_new_with_free_func (g_object_unref);
+ for (i = 0; i < connections->len; i++) {
+ NMConnection *candidate = connections->pdata[i];
+
+ /* Connection applies to this device */
+ if (nm_device_connection_valid (device, candidate))
+ g_ptr_array_add (filtered, g_object_ref (candidate));
+ }
+
+ return 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
+ */
+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/nm-device.h b/libnm/nm-device.h
new file mode 100644
index 000000000..5cc373569
--- /dev/null
+++ b/libnm/nm-device.h
@@ -0,0 +1,161 @@
+/* -*- 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 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2013 Red Hat, Inc.
+ */
+
+#ifndef __NM_DEVICE_H__
+#define __NM_DEVICE_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-object.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_DEVICE (nm_device_get_type ())
+#define NM_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEVICE, NMDevice))
+#define NM_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DEVICE, NMDeviceClass))
+#define NM_IS_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEVICE))
+#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))
+
+#define NM_DEVICE_DEVICE_TYPE "device-type"
+#define NM_DEVICE_UDI "udi"
+#define NM_DEVICE_INTERFACE "interface"
+#define NM_DEVICE_IP_INTERFACE "ip-interface"
+#define NM_DEVICE_DRIVER "driver"
+#define NM_DEVICE_DRIVER_VERSION "driver-version"
+#define NM_DEVICE_FIRMWARE_VERSION "firmware-version"
+#define NM_DEVICE_CAPABILITIES "capabilities"
+#define NM_DEVICE_MANAGED "managed"
+#define NM_DEVICE_AUTOCONNECT "autoconnect"
+#define NM_DEVICE_FIRMWARE_MISSING "firmware-missing"
+#define NM_DEVICE_IP4_CONFIG "ip4-config"
+#define NM_DEVICE_DHCP4_CONFIG "dhcp4-config"
+#define NM_DEVICE_IP6_CONFIG "ip6-config"
+#define NM_DEVICE_DHCP6_CONFIG "dhcp6-config"
+#define NM_DEVICE_STATE "state"
+#define NM_DEVICE_STATE_REASON "state-reason"
+#define NM_DEVICE_ACTIVE_CONNECTION "active-connection"
+#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"
+
+struct _NMDevice {
+ NMObject parent;
+};
+
+typedef struct {
+ NMObjectClass parent;
+
+ /* Signals */
+ void (*state_changed) (NMDevice *device,
+ NMDeviceState new_state,
+ NMDeviceState old_state,
+ NMDeviceStateReason reason);
+
+ /* Methods */
+ 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);
+
+ /*< private >*/
+ gpointer padding[8];
+} NMDeviceClass;
+
+GType nm_device_get_type (void);
+
+const char * nm_device_get_iface (NMDevice *device);
+const char * nm_device_get_ip_iface (NMDevice *device);
+NMDeviceType nm_device_get_device_type (NMDevice *device);
+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);
+const char * nm_device_get_type_description (NMDevice *device);
+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);
+void nm_device_set_autoconnect (NMDevice *device, gboolean autoconnect);
+gboolean nm_device_get_firmware_missing (NMDevice *device);
+NMIPConfig * nm_device_get_ip4_config (NMDevice *device);
+NMDhcpConfig * nm_device_get_dhcp4_config (NMDevice *device);
+NMIPConfig * nm_device_get_ip6_config (NMDevice *device);
+NMDhcpConfig * nm_device_get_dhcp6_config (NMDevice *device);
+NMDeviceState nm_device_get_state (NMDevice *device);
+NMDeviceStateReason nm_device_get_state_reason (NMDevice *device);
+NMActiveConnection * nm_device_get_active_connection(NMDevice *device);
+const GPtrArray * nm_device_get_available_connections(NMDevice *device);
+const char * nm_device_get_physical_port_id (NMDevice *device);
+guint32 nm_device_get_mtu (NMDevice *device);
+gboolean nm_device_is_software (NMDevice *device);
+
+const char * nm_device_get_product (NMDevice *device);
+const char * nm_device_get_vendor (NMDevice *device);
+const char * nm_device_get_description (NMDevice *device);
+char ** nm_device_disambiguate_names (NMDevice **devices,
+ int num_devices);
+
+gboolean nm_device_disconnect (NMDevice *device,
+ GCancellable *cancellable,
+ GError **error);
+void nm_device_disconnect_async (NMDevice *device,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+gboolean nm_device_disconnect_finish (NMDevice *device,
+ GAsyncResult *result,
+ GError **error);
+
+gboolean nm_device_delete (NMDevice *device,
+ GCancellable *cancellable,
+ GError **error);
+void nm_device_delete_async (NMDevice *device,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+gboolean nm_device_delete_finish (NMDevice *device,
+ GAsyncResult *result,
+ GError **error);
+
+GPtrArray * nm_device_filter_connections (NMDevice *device,
+ const GPtrArray *connections);
+
+gboolean nm_device_connection_valid (NMDevice *device,
+ NMConnection *connection);
+
+gboolean nm_device_connection_compatible (NMDevice *device,
+ NMConnection *connection,
+ GError **error);
+
+GType nm_device_get_setting_type (NMDevice *device);
+
+G_END_DECLS
+
+#endif /* __NM_DEVICE_H__ */
diff --git a/libnm/nm-dhcp-config.c b/libnm/nm-dhcp-config.c
new file mode 100644
index 000000000..7227abac3
--- /dev/null
+++ b/libnm/nm-dhcp-config.c
@@ -0,0 +1,222 @@
+/* -*- 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 2008 - 2014 Red Hat, Inc.
+ * Copyright 2008 Novell, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "nm-dhcp-config.h"
+#include "nm-dhcp4-config.h"
+#include "nm-dhcp6-config.h"
+#include "nm-dbus-interface.h"
+#include "nm-object-private.h"
+#include "nm-utils.h"
+
+G_DEFINE_ABSTRACT_TYPE (NMDhcpConfig, nm_dhcp_config, NM_TYPE_OBJECT)
+
+#define NM_DHCP_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DHCP_CONFIG, NMDhcpConfigPrivate))
+
+typedef struct {
+ GHashTable *options;
+} NMDhcpConfigPrivate;
+
+enum {
+ PROP_0,
+ PROP_FAMILY,
+ PROP_OPTIONS,
+
+ LAST_PROP
+};
+
+static void
+nm_dhcp_config_init (NMDhcpConfig *config)
+{
+ NMDhcpConfigPrivate *priv = NM_DHCP_CONFIG_GET_PRIVATE (config);
+
+ priv->options = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+}
+
+static gboolean
+demarshal_dhcp_options (NMObject *object, GParamSpec *pspec, GVariant *value, gpointer field)
+{
+ NMDhcpConfigPrivate *priv = NM_DHCP_CONFIG_GET_PRIVATE (object);
+ GVariantIter iter;
+ const char *key;
+ GVariant *opt;
+
+ g_hash_table_remove_all (priv->options);
+
+ g_variant_iter_init (&iter, value);
+ while (g_variant_iter_next (&iter, "{&sv}", &key, &opt)) {
+ g_hash_table_insert (priv->options, g_strdup (key), g_variant_dup_string (opt, NULL));
+ g_variant_unref (opt);
+ }
+
+ _nm_object_queue_notify (object, NM_DHCP_CONFIG_OPTIONS);
+ return TRUE;
+}
+
+static void
+init_dbus (NMObject *object)
+{
+ NMDhcpConfigPrivate *priv = NM_DHCP_CONFIG_GET_PRIVATE (object);
+ const NMPropertiesInfo property_info[] = {
+ { NM_DHCP_CONFIG_OPTIONS, &priv->options, demarshal_dhcp_options },
+ { NULL },
+ };
+
+ NM_OBJECT_CLASS (nm_dhcp_config_parent_class)->init_dbus (object);
+
+ _nm_object_register_properties (object,
+ (NM_IS_DHCP4_CONFIG (object) ?
+ NM_DBUS_INTERFACE_DHCP4_CONFIG :
+ NM_DBUS_INTERFACE_DHCP6_CONFIG),
+ property_info);
+}
+
+static void
+finalize (GObject *object)
+{
+ NMDhcpConfigPrivate *priv = NM_DHCP_CONFIG_GET_PRIVATE (object);
+
+ if (priv->options)
+ g_hash_table_destroy (priv->options);
+
+ G_OBJECT_CLASS (nm_dhcp_config_parent_class)->finalize (object);
+}
+
+static void
+get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NMDhcpConfig *self = NM_DHCP_CONFIG (object);
+
+ switch (prop_id) {
+ case PROP_FAMILY:
+ g_value_set_int (value, nm_dhcp_config_get_family (self));
+ break;
+ case PROP_OPTIONS:
+ g_value_set_boxed (value, nm_dhcp_config_get_options (self));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_dhcp_config_class_init (NMDhcpConfigClass *config_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (config_class);
+ NMObjectClass *nm_object_class = NM_OBJECT_CLASS (config_class);
+
+ g_type_class_add_private (config_class, sizeof (NMDhcpConfigPrivate));
+
+ /* virtual methods */
+ object_class->get_property = get_property;
+ object_class->finalize = finalize;
+
+ nm_object_class->init_dbus = init_dbus;
+
+ /* properties */
+
+ /**
+ * NMDhcpConfig:family:
+ *
+ * The IP address family of the configuration; either
+ * <literal>AF_INET</literal> or <literal>AF_INET6</literal>.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_FAMILY,
+ g_param_spec_int (NM_DHCP_CONFIG_FAMILY, "", "",
+ 0, 255, AF_UNSPEC,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMDhcpConfig:options:
+ *
+ * The #GHashTable containing options of the configuration.
+ *
+ * Type: GLib.HashTable(utf8,utf8)
+ **/
+ g_object_class_install_property
+ (object_class, PROP_OPTIONS,
+ g_param_spec_boxed (NM_DHCP_CONFIG_OPTIONS, "", "",
+ G_TYPE_HASH_TABLE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+}
+
+/**
+ * nm_dhcp_config_get_family:
+ * @config: a #NMDhcpConfig
+ *
+ * Gets the IP address family of the configuration
+ *
+ * Returns: the IP address family; either <literal>AF_INET</literal> or
+ * <literal>AF_INET6</literal>
+ **/
+int
+nm_dhcp_config_get_family (NMDhcpConfig *config)
+{
+ g_return_val_if_fail (NM_IS_DHCP_CONFIG (config), AF_UNSPEC);
+
+ return NM_IS_DHCP4_CONFIG (config) ? AF_INET : AF_INET6;
+}
+
+/**
+ * nm_dhcp_config_get_options:
+ * @config: a #NMDhcpConfig
+ *
+ * Gets all the options contained in the configuration.
+ *
+ * Returns: (transfer none) (element-type utf8 utf8): the #GHashTable containing
+ * strings for keys and values. This is the internal copy used by the
+ * configuration, and must not be modified.
+ **/
+GHashTable *
+nm_dhcp_config_get_options (NMDhcpConfig *config)
+{
+ g_return_val_if_fail (NM_IS_DHCP_CONFIG (config), NULL);
+
+ return NM_DHCP_CONFIG_GET_PRIVATE (config)->options;
+}
+
+/**
+ * nm_dhcp_config_get_one_option:
+ * @config: a #NMDhcpConfig
+ * @option: the option to retrieve
+ *
+ * Gets one option by option name.
+ *
+ * Returns: the configuration option's value. This is the internal string used by the
+ * configuration, and must not be modified.
+ **/
+const char *
+nm_dhcp_config_get_one_option (NMDhcpConfig *config, const char *option)
+{
+ g_return_val_if_fail (NM_IS_DHCP_CONFIG (config), NULL);
+
+ return g_hash_table_lookup (nm_dhcp_config_get_options (config), option);
+}
diff --git a/libnm/nm-dhcp-config.h b/libnm/nm-dhcp-config.h
new file mode 100644
index 000000000..85aa3bd2c
--- /dev/null
+++ b/libnm/nm-dhcp-config.h
@@ -0,0 +1,62 @@
+/* -*- 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 2008 Red Hat, Inc.
+ * Copyright 2008 Novell, Inc.
+ */
+
+#ifndef __NM_DHCP_CONFIG_H__
+#define __NM_DHCP_CONFIG_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-object.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_DHCP_CONFIG (nm_dhcp_config_get_type ())
+#define NM_DHCP_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DHCP_CONFIG, NMDhcpConfig))
+#define NM_DHCP_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DHCP_CONFIG, NMDhcpConfigClass))
+#define NM_IS_DHCP_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DHCP_CONFIG))
+#define NM_IS_DHCP_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DHCP_CONFIG))
+
+struct _NMDhcpConfig {
+ NMObject parent;
+};
+
+typedef struct {
+ NMObjectClass parent;
+
+ /*< private >*/
+ gpointer padding[8];
+} NMDhcpConfigClass;
+
+#define NM_DHCP_CONFIG_FAMILY "family"
+#define NM_DHCP_CONFIG_OPTIONS "options"
+
+GType nm_dhcp_config_get_type (void);
+
+int nm_dhcp_config_get_family (NMDhcpConfig *config);
+
+GHashTable *nm_dhcp_config_get_options (NMDhcpConfig *config);
+const char *nm_dhcp_config_get_one_option (NMDhcpConfig *config, const char *option);
+
+G_END_DECLS
+
+#endif /* __NM_DHCP_CONFIG_H__ */
diff --git a/libnm/nm-dhcp4-config.c b/libnm/nm-dhcp4-config.c
new file mode 100644
index 000000000..808edaa64
--- /dev/null
+++ b/libnm/nm-dhcp4-config.c
@@ -0,0 +1,39 @@
+/* -*- 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 2014 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include "nm-dhcp4-config.h"
+#include "nm-object-private.h"
+
+G_DEFINE_TYPE (NMDhcp4Config, nm_dhcp4_config, NM_TYPE_DHCP_CONFIG)
+
+static void
+nm_dhcp4_config_init (NMDhcp4Config *config)
+{
+}
+
+static void
+nm_dhcp4_config_class_init (NMDhcp4ConfigClass *config_class)
+{
+ NMObjectClass *nm_object_class = NM_OBJECT_CLASS (config_class);
+
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DHCP4_CONFIG);
+}
diff --git a/libnm/nm-dhcp4-config.h b/libnm/nm-dhcp4-config.h
new file mode 100644
index 000000000..3423740db
--- /dev/null
+++ b/libnm/nm-dhcp4-config.h
@@ -0,0 +1,49 @@
+/* -*- 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 2014 Red Hat, Inc.
+ */
+
+#ifndef __NM_DHCP4_CONFIG_H__
+#define __NM_DHCP4_CONFIG_H__
+
+#include <nm-dhcp-config.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_DHCP4_CONFIG (nm_dhcp4_config_get_type ())
+#define NM_DHCP4_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DHCP4_CONFIG, NMDhcp4Config))
+#define NM_DHCP4_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DHCP4_CONFIG, NMDhcp4ConfigClass))
+#define NM_IS_DHCP4_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DHCP4_CONFIG))
+#define NM_IS_DHCP4_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DHCP4_CONFIG))
+
+typedef struct {
+ NMDhcpConfig parent;
+} NMDhcp4Config;
+
+typedef struct {
+ NMDhcpConfigClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMDhcp4ConfigClass;
+
+GType nm_dhcp4_config_get_type (void);
+
+G_END_DECLS
+
+#endif /* __NM_DHCP4_CONFIG_H__ */
diff --git a/libnm/nm-dhcp6-config.c b/libnm/nm-dhcp6-config.c
new file mode 100644
index 000000000..0bd924c40
--- /dev/null
+++ b/libnm/nm-dhcp6-config.c
@@ -0,0 +1,39 @@
+/* -*- 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 2014 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include "nm-dhcp6-config.h"
+#include "nm-object-private.h"
+
+G_DEFINE_TYPE (NMDhcp6Config, nm_dhcp6_config, NM_TYPE_OBJECT)
+
+static void
+nm_dhcp6_config_init (NMDhcp6Config *config)
+{
+}
+
+static void
+nm_dhcp6_config_class_init (NMDhcp6ConfigClass *config_class)
+{
+ NMObjectClass *nm_object_class = NM_OBJECT_CLASS (config_class);
+
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DHCP6_CONFIG);
+}
diff --git a/libnm/nm-dhcp6-config.h b/libnm/nm-dhcp6-config.h
new file mode 100644
index 000000000..abb24adfd
--- /dev/null
+++ b/libnm/nm-dhcp6-config.h
@@ -0,0 +1,49 @@
+/* -*- 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 2014 Red Hat, Inc.
+ */
+
+#ifndef __NM_DHCP6_CONFIG_H__
+#define __NM_DHCP6_CONFIG_H__
+
+#include <nm-dhcp-config.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_DHCP6_CONFIG (nm_dhcp6_config_get_type ())
+#define NM_DHCP6_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DHCP6_CONFIG, NMDhcp6Config))
+#define NM_DHCP6_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DHCP6_CONFIG, NMDhcp6ConfigClass))
+#define NM_IS_DHCP6_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DHCP6_CONFIG))
+#define NM_IS_DHCP6_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DHCP6_CONFIG))
+
+typedef struct {
+ NMDhcpConfig parent;
+} NMDhcp6Config;
+
+typedef struct {
+ NMDhcpConfigClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMDhcp6ConfigClass;
+
+GType nm_dhcp6_config_get_type (void);
+
+G_END_DECLS
+
+#endif /* __NM_DHCP6_CONFIG_H__ */
diff --git a/libnm/nm-enum-types.c b/libnm/nm-enum-types.c
new file mode 100644
index 000000000..1e5dcb0d7
--- /dev/null
+++ b/libnm/nm-enum-types.c
@@ -0,0 +1,152 @@
+
+
+
+/* Generated by glib-mkenums. Do not edit */
+
+#include "nm-enum-types.h"
+
+#include "NetworkManager.h"
+#include "nm-access-point.h"
+#include "nm-active-connection.h"
+#include "nm-client.h"
+#include "nm-device-adsl.h"
+#include "nm-device-bond.h"
+#include "nm-device-bridge.h"
+#include "nm-device-bt.h"
+#include "nm-device-ethernet.h"
+#include "nm-device-generic.h"
+#include "nm-device-infiniband.h"
+#include "nm-device-modem.h"
+#include "nm-device-olpc-mesh.h"
+#include "nm-device-team.h"
+#include "nm-device-vlan.h"
+#include "nm-device-wifi.h"
+#include "nm-device-wimax.h"
+#include "nm-device.h"
+#include "nm-dhcp-config.h"
+#include "nm-ip-config.h"
+#include "nm-object.h"
+#include "nm-remote-connection.h"
+#include "nm-types.h"
+#include "nm-vpn-connection.h"
+#include "nm-vpn-editor-plugin.h"
+#include "nm-wimax-nsp.h"
+#include "nm-secret-agent-old.h"
+#include "nm-vpn-plugin-old.h"
+
+GType
+nm_client_permission_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_PERMISSION_NONE, "NM_CLIENT_PERMISSION_NONE", "none" },
+ { NM_CLIENT_PERMISSION_ENABLE_DISABLE_NETWORK, "NM_CLIENT_PERMISSION_ENABLE_DISABLE_NETWORK", "enable-disable-network" },
+ { NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIFI, "NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIFI", "enable-disable-wifi" },
+ { NM_CLIENT_PERMISSION_ENABLE_DISABLE_WWAN, "NM_CLIENT_PERMISSION_ENABLE_DISABLE_WWAN", "enable-disable-wwan" },
+ { NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIMAX, "NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIMAX", "enable-disable-wimax" },
+ { NM_CLIENT_PERMISSION_SLEEP_WAKE, "NM_CLIENT_PERMISSION_SLEEP_WAKE", "sleep-wake" },
+ { NM_CLIENT_PERMISSION_NETWORK_CONTROL, "NM_CLIENT_PERMISSION_NETWORK_CONTROL", "network-control" },
+ { NM_CLIENT_PERMISSION_WIFI_SHARE_PROTECTED, "NM_CLIENT_PERMISSION_WIFI_SHARE_PROTECTED", "wifi-share-protected" },
+ { NM_CLIENT_PERMISSION_WIFI_SHARE_OPEN, "NM_CLIENT_PERMISSION_WIFI_SHARE_OPEN", "wifi-share-open" },
+ { NM_CLIENT_PERMISSION_SETTINGS_MODIFY_SYSTEM, "NM_CLIENT_PERMISSION_SETTINGS_MODIFY_SYSTEM", "settings-modify-system" },
+ { NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN, "NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN", "settings-modify-own" },
+ { NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME, "NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME", "settings-modify-hostname" },
+ { NM_CLIENT_PERMISSION_LAST, "NM_CLIENT_PERMISSION_LAST", "last" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMClientPermission"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
+nm_client_permission_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_CLIENT_PERMISSION_RESULT_UNKNOWN, "NM_CLIENT_PERMISSION_RESULT_UNKNOWN", "unknown" },
+ { NM_CLIENT_PERMISSION_RESULT_YES, "NM_CLIENT_PERMISSION_RESULT_YES", "yes" },
+ { NM_CLIENT_PERMISSION_RESULT_AUTH, "NM_CLIENT_PERMISSION_RESULT_AUTH", "auth" },
+ { NM_CLIENT_PERMISSION_RESULT_NO, "NM_CLIENT_PERMISSION_RESULT_NO", "no" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMClientPermissionResult"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ 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_FAILED, "NM_CLIENT_ERROR_FAILED", "failed" },
+ { NM_CLIENT_ERROR_MANAGER_NOT_RUNNING, "NM_CLIENT_ERROR_MANAGER_NOT_RUNNING", "manager-not-running" },
+ { NM_CLIENT_ERROR_OBJECT_CREATION_FAILED, "NM_CLIENT_ERROR_OBJECT_CREATION_FAILED", "object-creation-failed" },
+ { 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_vpn_editor_plugin_capability_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_VPN_EDITOR_PLUGIN_CAPABILITY_NONE, "NM_VPN_EDITOR_PLUGIN_CAPABILITY_NONE", "none" },
+ { NM_VPN_EDITOR_PLUGIN_CAPABILITY_IMPORT, "NM_VPN_EDITOR_PLUGIN_CAPABILITY_IMPORT", "import" },
+ { NM_VPN_EDITOR_PLUGIN_CAPABILITY_EXPORT, "NM_VPN_EDITOR_PLUGIN_CAPABILITY_EXPORT", "export" },
+ { NM_VPN_EDITOR_PLUGIN_CAPABILITY_IPV6, "NM_VPN_EDITOR_PLUGIN_CAPABILITY_IPV6", "ipv6" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_flags_register_static (g_intern_static_string ("NMVpnEditorPluginCapability"), 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)
+{
+ 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" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMWimaxNspNetworkType"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+
+
+
diff --git a/libnm/nm-enum-types.h b/libnm/nm-enum-types.h
new file mode 100644
index 000000000..1db04ab8e
--- /dev/null
+++ b/libnm/nm-enum-types.h
@@ -0,0 +1,28 @@
+
+
+
+/* Generated by glib-mkenums. Do not edit */
+
+#ifndef __NM_ENUM_TYPES_H__
+#define __NM_ENUM_TYPES_H__
+
+#include <nm-core-enum-types.h>
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+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_vpn_editor_plugin_capability_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_VPN_EDITOR_PLUGIN_CAPABILITY (nm_vpn_editor_plugin_capability_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/libnm/nm-ifcfg-rh-docs.xml b/libnm/nm-ifcfg-rh-docs.xml
new file mode 100644
index 000000000..96ecfde87
--- /dev/null
+++ b/libnm/nm-ifcfg-rh-docs.xml
@@ -0,0 +1,263 @@
+<?xml version="1.0"?>
+<!DOCTYPE nm-ifcfg-rh-docs [
+]>
+
+<nm-ifcfg-rh-docs>
+ <setting name="802-1x">
+<property name="eap" variable="IEEE_8021X_EAP_METHODS(+)" format="" values="&quot;LEAP&quot;, &quot;PWD&quot;, &quot;TLS&quot;, &quot;PEAP&quot;, &quot;TTLS&quot;, &quot;FAST&quot;" default="" example="IEEE_8021X_EAP_METHODS=PEAP" description="EAP method for 802.1X authentication."/>
+<property name="identity" variable="IEEE_8021X_IDENTITY(+)" format="" values="" default="" example="IEEE_8021X_IDENTITY=itsme" description="Identity for EAP authentication methods."/>
+<property name="anonymous-identity" variable="IEEE_8021X_ANON_IDENTITY(+)" format="" values="" default="" example="" description="Anonymous identity for EAP authentication methods."/>
+<property name="pac-file" variable="IEEE_8021X_PAC_FILE(+)" format="" values="" default="" example="IEEE_8021X_PAC_FILE=/home/joe/my-fast.pac" description="File with PAC (Protected Access Credential) for EAP-FAST."/>
+<property name="ca-cert" variable="IEEE_8021X_CA_CERT(+)" format="" values="" default="" example="IEEE_8021X_CA_CERT=/home/joe/cacert.crt" description="CA certificate for EAP."/>
+<property name="ca-path" variable="(none)" format="" values="" default="" example="" description="The property is not handled by ifcfg-rh plugin."/>
+<property name="subject-match" variable="IEEE_8021X_SUBJECT_MATCH(+)" format="" values="" default="" example="IEEE_8021X_SUBJECT_MATCH=&quot;Red Hat&quot;" description="Substring to match subject of server certificate against."/>
+<property name="altubject-matches" variable="IEEE_8021X_AlTSUBJECT_MATCHES(+)" format="" values="" default="" example="IEEE_8021X_ALTSUBJECT_MATCHES=&quot;s1.domain.cc&quot;" description="List of strings to be matched against the altSubjectName."/>
+<property name="client-cert" variable="IEEE_8021X_CLIENT_CERT(+)" format="" values="" default="" example="IEEE_8021X_CLIENT_CERT=/home/joe/mycert.crt" description="Client certificate for EAP."/>
+<property name="phase1-peapver" variable="IEEE_8021X_PEAP_VERSION(+)" format="" values="0, 1" default="" example="" description="Use to force a specific PEAP version."/>
+<property name="phase1-peaplabel" variable="IEEE_8021X_PEAP_FORCE_NEW_LABEL(+)" format="" values="yes, no" default="no" example="" description="Use to force the new PEAP label during key derivation."/>
+<property name="phase1-fast-provisioning" variable="IEEE_8021X_FAST_PROVISIONING(+)" format="" values="space-separated list of these values [allow-auth, allow-unauth]" default="" example="IEEE_8021X_FAST_PROVISIONING=&quot;allow-auth allow-unauth&quot;" description="Enable in-line provisioning of EAP-FAST credentials."/>
+<property name="phase2-auth" variable="IEEE_8021X_INNER_AUTH_METHODS(+)" format="" values="&quot;PAP&quot;, &quot;CHAP&quot;, &quot;MSCHAP&quot;, &quot;MSCHAPV2&quot;, &quot;GTC&quot;, &quot;OTP&quot;, &quot;MD5&quot; and &quot;TLS&quot;" default="" example="IEEE_8021X_INNER_AUTH_METHODS=PAP" description="Inner non-EAP authentication methods. IEEE_8021X_INNER_AUTH_METHODS
+can contain values both for &apos;phase2-auth&apos; and &apos;phase2-autheap&apos; properties."/>
+<property name="phase2-autheap" variable="IEEE_8021X_INNER_AUTH_METHODS(+)" format="" values="&quot;EAP-MD5&quot;, &quot;EAP-MSCHAPV2&quot;, &quot;EAP-GTC&quot;, &quot;EAP-OTP&quot; and &quot;EAP-TLS&quot;" default="" example="IEEE_8021X_INNER_AUTH_METHODS=&quot;MSCHAPV2 EAP-TLS&quot;" description="Inner EAP-based authentication methods. Note that
+IEEE_8021X_INNER_AUTH_METHODS is also used for &apos;phase2-auth&apos; values."/>
+<property name="phase2-subject-match" variable="IEEE_8021X_PHASE2_SUBJECT_MATCH(+)" format="" values="" default="" example="IEEE_8021X_PHASE2_SUBJECT_MATCH=&quot;Red Hat&quot;" description="Substring to match subject of server certificate against."/>
+<property name="phase2-altsubject-matches" variable="IEEE_8021X_PHASE2_ALTSUBJECT_MATCHES(+)" format="" values="" default="" example="" description=""/>
+<property name="phase2-client-cert" variable="IEEE_8021X_INNER_CLIENT_CERT(+)" format="" values="" default="" example="IEEE_8021X_INNER_CLIENT_CERT=/home/joe/mycert.crt" description="Client certificate for inner EAP method."/>
+<property name="password" variable="IEEE_8021X_PASSWORD(+)" format="" values="" default="" example="" description="UTF-8 encoded password used for EAP. It can also go to &quot;key-&quot;
+lookaside file, or it can be owned by a secret agent."/>
+<property name="password-flags" variable="IEEE_8021X_PASSWORD_FLAGS(+)" format="NMSettingSecretFlags" values="" default="" example="" description="Password flags for IEEE_8021X_PASSWORD password."/>
+<property name="password-raw" variable="(none)" format="" values="" default="" example="" description="The property is not handled by ifcfg-rh plugin."/>
+<property name="password-raw-flags" variable="(none)" format="" values="" default="" example="" description="The property is not handled by ifcfg-rh plugin."/>
+<property name="private-key" variable="IEEE_8021X_PRIVATE_KEY(+)" format="" values="" default="" example="IEEE_8021X_PRIVATE_KEY=/home/joe/mykey.p12" description="Private key for EAP-TLS."/>
+<property name="private-key-password" variable="IEEE_8021X_PRIVATE_KEY_PASSWORD(+)" format="" values="" default="" example="" description="Password for IEEE_8021X_PRIVATE_KEY. It can also go to &quot;key-&quot;
+lookaside file, or it can be owned by a secret agent."/>
+<property name="private-key-password-flags" variable="IEEE_8021X_PRIVATE_KEY_PASSWORD_FLAGS(+)" format="NMSettingSecretFlags" values="" default="" example="" description="Password flags for IEEE_8021X_PRIVATE_KEY_PASSWORD password."/>
+<property name="phase2-private-key" variable="IEEE_8021X_INNER_PRIVATE_KEY(+)" format="" values="" default="" example="" description="Private key for inner authentication method for EAP-TLS."/>
+<property name="phase2-private-key-password" variable="IEEE_8021X_INNER_PRIVATE_KEY_PASSWORD(+)" format="" values="" default="" example="" description="Password for IEEE_8021X_INNER_PRIVATE_KEY. It can also go to &quot;key-&quot;
+lookaside file, or it can be owned by a secret agent."/>
+<property name="phase2-private-key-password-flags" variable="IEEE_8021X_INNER_PRIVATE_KEY_PASSWORD_FLAGS(+)" format="NMSettingSecretFlags" values="" default="" example="" description="Password flags for IEEE_8021X_INNER_PRIVATE_KEY_PASSWORD password."/>
+<property name="pin" variable="(none)" format="" values="" default="" example="" description="The property is not handled by ifcfg-rh plugin."/>
+<property name="pin-flags" variable="(none)" format="" values="" default="" example="" description="The property is not handled by ifcfg-rh plugin."/>
+<property name="system-ca-certs" variable="(none)" format="" values="" default="" example="" description="The property is not handled by ifcfg-rh plugin."/>
+</setting>
+<setting name="adsl">
+</setting>
+<setting name="bluetooth">
+</setting>
+<setting name="bond">
+<property name="options" variable="BONDING_OPTS" format="" values="" default="" example="BONDING_OPTS=&quot;miimon=100 mode=broadcast&quot;" description="Bonding options."/>
+</setting>
+<setting name="bridge-port">
+<property name="priority" variable="BRIDGING_OPTS: priority=" format="" values="0 - 63" default="32" example="" description="STP priority."/>
+<property name="path-cost" variable="BRIDGING_OPTS: path_cost=" format="" values="1 - 65535" default="100" example="" description="STP cost."/>
+<property name="hairpin-mode" variable="BRIDGING_OPTS: hairpin_mode=" format="" values="" default="yes" example="" description="Hairpin mode of the bridge port."/>
+</setting>
+<setting name="bridge">
+<property name="mac-address" variable="MACADDR(+)" format="" values="" default="" example="" description="MAC address of the bridge. Note that this requires a recent
+kernel support, originally introduced in 3.15 upstream kernel)
+MACADDR for bridges is an NM extension."/>
+<property name="stp" variable="STP" format="" values="" default="no" example="" description="Span tree protocol participation."/>
+<property name="priority" variable="BRIDGING_OPTS: priority=" format="" values="0 - 32768" default="32768" example="" description="STP priority."/>
+<property name="forward-delay" variable="DELAY" format="" values="2 - 30" default="15" example="" description="STP forwarding delay."/>
+<property name="hello-time" variable="BRIDGING_OPTS: hello_time=" format="" values="1 - 10" default="2" example="" description="STP hello time."/>
+<property name="max-age" variable="BRIDGING_OPTS: max_age=" format="" values="6 - 40" default="20" example="" description="STP maximum message age."/>
+<property name="ageing-time" variable="BRIDGING_OPTS: ageing_time=" format="" values="0 - 1000000" default="300" example="" description="Ethernet MAC ageing time."/>
+</setting>
+<setting name="cdma">
+</setting>
+<setting name="connection">
+<property name="id" variable="NAME(+)" format="" values="" default="" example="" description="User friendly name for the connection profile."/>
+<property name="uuid" variable="UUID(+)" format="" values="" default="" example="" description="UUID for the connection profile. When missing, NetworkManager
+creates the UUID itself (by hashing the file)."/>
+<property name="interface-name" variable="DEVICE" format="" values="" default="" example="" description="Interface name of the device this profile is bound to. The variable
+can be left out when the profile should apply for more devices. Note that DEVICE
+can be required for some connection types."/>
+<property name="type" variable="TYPE (DEVICETYPE, DEVICE)" format="" values="Ethernet, Wireless, InfiniBand, Bridge, Bond, Vlan, Team, TeamPort" default="" example="TYPE=Ethernet; TYPE=Bond; TYPE=Bridge; DEVICETYPE=TeamPort" description="Base type of the connection. DEVICETYPE is used for teaming
+connections."/>
+<property name="permissions" variable="USERS(+)" format="" values="" default="" example="USERS=&quot;joe bob&quot;" description="USERS restrict the access for this conenction to certain
+users only."/>
+<property name="autoconnect" variable="ONBOOT" format="" values="" default="yes" example="" description="Whether the connection should be autoconnected (not only while booting)."/>
+<property name="autoconnect-priority" variable="AUTOCONNECT_PRIORITY(+)" format="" values="-999 to 999" default="0" example="AUTOCONNECT_PRIORITY=20" description="Connection priority for automatic activation. Connections with
+higher numbers are preferred when selecting profiles for automatic activation."/>
+<property name="zone" variable="ZONE(+)" format="" values="" default="" example="ZONE=Work" description="Trust level of this connection. The string is usually used
+for a firewall."/>
+<property name="master" variable="MASTER, TEAM_MASTER, BRIDGE" format="" values="" default="" example="" description="Reference to master connection. The variable used depends on
+the connection type."/>
+<property name="slave-type" variable="MASTER, TEAM_MASTER, DEVICETYPE, BRIDGE" format="" values="" default="" example="" description="Slave type doesn&apos;t map directly to a variable, but it is
+recognized using different variables. MASTER for bonding,
+TEAM_MASTER and DEVICETYPE for teaming, BRIDGE for bridging."/>
+<property name="secondaries" variable="SECONDARY_UUIDS(+)" format="" values="" default="" example="" description="UUID of VPN connections that should be activated
+together with this connection."/>
+<property name="gateway-ping-timeout" variable="GATEWAY_PING_TIMEOUT(+)" format="" values="" default="0" example="GATEWAY_PING_TIMEOUT=5" description="If greater than zero, the IP connectivity will be checked by
+pinging the gateway and waiting for the specified timeout (in seconds)."/>
+</setting>
+<setting name="dcb">
+<property name="app-fcoe-flags" variable="DCB_APP_FCOE_ENABLE, DCB_APP_FCOE_ADVERTISE, DCB_APP_FCOE_WILLING" format="" values="" default="no" example="DCB_APP_FCOE_ENABLE=yes DCB_APP_FCOE_ADVERTISE=yes" description="FCOE flags."/>
+<property name="app-fcoe-priority" variable="DCB_APP_FCOE_PRIORITY" format="" values="0 - 7" default="" example="" description="Priority of FCoE frames."/>
+<property name="app-fcoe-mode" variable="DCB_APP_FCOE_MODE" format="" values="fabric, vn2vn" default="fabric" example="" description="FCoE controller mode."/>
+<property name="app-iscsi-flags" variable="DCB_APP_ISCSI_ENABLE, DCB_APP_ISCSI_ADVERTISE, DCB_APP_ISCSI_WILLING" format="" values="" default="no" example="" description="iSCSI flags."/>
+<property name="app-iscsi-priority" variable="DCB_APP_ISCSI_PRIORITY" format="" values="0 - 7" default="" example="" description="Priority of iSCSI frames."/>
+<property name="app-fip-flags" variable="DCB_APP_FIP_ENABLE, DCB_APP_FIP_ADVERTISE, DCB_APP_FIP_WILLING" format="" values="" default="no" example="" description="FIP flags."/>
+<property name="app-fip-priority" variable="DCB_APP_FIP_PRIORITY" format="" values="0 - 7" default="" example="" description="Priority of FIP frames."/>
+<property name="priority-flow-control-flags" variable="DCB_PFC_ENABLE, DCB_PFC_ADVERTISE, DCB_PFC_WILLING" format="" values="" default="no" example="" description="Priority flow control flags."/>
+<property name="priority-flow-control" variable="DCB_PFC_UP" format="" values="" default="" example="DCB_PFC_UP=01101110" description="Priority flow control values. String of 8 &quot;0&quot; and &quot;1&quot;, where &quot;0&quot;.
+means &quot;do not transmit priority pause&quot;, &quot;1&quot; means &quot;transmit pause&quot;."/>
+<property name="priority-group-flags" variable="DCB_PG_ENABLE, DCB_PG_ADVERTISE, DCB_PG_WILLING" format="" values="" default="no" example="" description="Priority groups flags."/>
+<property name="priority-group-id" variable="DCB_PG_ID" format="" values="" default="" example="DCB_PG_ID=1205f173" description="Priority groups values. String of eight priorities (0 - 7) or &quot;f&quot;
+(unrestricted)."/>
+<property name="priority-group-bandwidth" variable="DCB_PG_PCT" format="" values="" default="" example="DCB_PG_PCT=10,5,10,15,10,10,10,30" description="Priority groups values. Eight bandwidths (in percent), separated with commas."/>
+<property name="priority-bandwidth" variable="DCB_PG_UPPCT" format="" values="" default="" example="DCB_PG_UPPCT=7,13,10,10,15,15,10,20" description="Priority values. Eight bandwidths (in percent), separated with commas.
+The sum of the numbers must be 100."/>
+<property name="priority-strict-bandwidth" variable="DCB_PG_STRICT" format="" values="" default="" example="DCB_PG_STRICT=01101110" description="Priority values. String of eight &quot;0&quot; or &quot;1&quot;, where &quot;0&quot; means
+&quot;may not utilize all bandwidth&quot;, &quot;1&quot; means &quot;may utilize all bandwidth&quot;."/>
+<property name="priority-traffic-class" variable="DCB_PG_UP2TC" format="" values="" default="" example="DCB_PG_UP2TC=01623701" description="Priority values. String of eight trafic class values (0 - 7)."/>
+</setting>
+<setting name="generic">
+</setting>
+<setting name="gsm">
+</setting>
+<setting name="infiniband">
+<property name="mac-address" variable="HWADDR" format="" values="" default="" example="HWADDR=01:02:03:04:05:06:07:08:09:0A:01:02:03:04:05:06:07:08:09:11" description="IBoIP 20-byte hardware address of the device (in traditional
+hex-digits-and-colons notation)."/>
+<property name="mtu" variable="MTU" format="" values="" default="" example="" description="MTU of the interface."/>
+<property name="transport-mode" variable="CONNECTED_MODE" format="" values="" default="CONNECTED_MODE=no" example="" description="CONNECTED_MODE=yes for &quot;connected&quot; mode, CONNECTED_MODE=no for
+&quot;datagram&quot; mode"/>
+<property name="p-key" variable="PKEY_ID (and PKEY=yes)" format="" values="" default="PKEY=no" example="PKEY=yes PKEY_ID=2 PHYSDEV=mlx4_ib0 DEVICE=mlx4_ib0.8002" description="InfiniBand P_Key. The value can be a hex number prefixed with &quot;0x&quot;
+or a decimal number.
+When PKEY_ID is specified, PHYSDEV and DEVICE also must be specified."/>
+<property name="parent" variable="PHYSDEV (PKEY=yes)" format="" values="" default="PKEY=no" example="PHYSDEV=ib0" description="InfiniBand parent device."/>
+</setting>
+<setting name="">
+</setting>
+<setting name="ipv4">
+<property name="method" variable="BOOTPROTO" format="string" values="none, dhcp (bootp), static, ibft, autoip, shared" default="none" example="" description="Method used for IPv4 protocol configuration."/>
+<property name="dns" variable="DNS1, DNS2, ..." format="string" values="" default="" example="DNS1=1.2.3.4 DNS2=10.0.0.254 DNS3=8.8.8.8" description="List of DNS servers. Even if NetworkManager supports many DNS
+servers, initscripts and resolver only care about the first three, usually."/>
+<property name="dns-search" variable="DOMAIN" format="string (space-separated domains)" values="" default="" example="" description="List of DNS search domains."/>
+<property name="addresses" variable="IPADDR, PREFIX, IPADDR1, PREFIX1, ..." format="" values="" default="" example="IPADDR=10.5.5.23 PREFIX=24 IPADDR1=1.1.1.2 PREFIX1=16" description="List of static IP addresses."/>
+<property name="gateway" variable="GATEWAY" format="" values="" default="" example="GATEWAY=10.5.5.1" description="Gateway IP address."/>
+<property name="routes" variable="ADDRESS1, NETMASK1, GATEWAY1, METRIC1, ..." format="" values="" default="" example="" description="List of static routes. They are not stored in ifcfg-* file,
+but in route-* file instead."/>
+<property name="ignore-auto-routes" variable="PEERROUTES(+)" format="" values="" default="yes" example="" description="PEERROUTES has the opposite meaning as &apos;ignore-auto-routes&apos; property."/>
+<property name="ignore-auto-dns" variable="PEERDNS" format="" values="" default="yes" example="" description="PEERDNS has the opposite meaning as &apos;ignore-auto-dns&apos; property."/>
+<property name="dhcp-send-hostname" variable="DHCP_SEND_HOSTNAME(+)" format="" values="" default="yes" example="" description="Whether DHCP_HOSTNAME should be sent to the DHCP server."/>
+<property name="dhcp-hostname" variable="DHCP_HOSTNAME" format="" values="" default="" example="" description="Hostname to send to the DHCP server."/>
+<property name="never-default" variable="DEFROUTE (GATEWAYDEV in /etc/sysconfig/network)" format="" values="" default="yes" example="" description="DEFROUTE=no tells NetworkManager that this connection
+should not be assigned the default route. DEFROUTE has the opposite
+meaning as &apos;never-default&apos; property."/>
+<property name="may-fail" variable="IPV4_FAILURE_FATAL(+)" format="" values="" default="no" example="" description="IPV4_FAILURE_FATAL has the opposite meaning as &apos;may-fail&apos; property."/>
+<property name="dhcp-client-id" variable="DHCP_CLIENT_ID(+)" format="" values="" default="" example="DHCP_CLIENT_ID=ax-srv-1" description="A string sent to the DHCP server to identify the local machine."/>
+</setting>
+<setting name="ipv6">
+<property name="method" variable="IPV6INIT, IPV6FORWARDING, IPV6_AUTOCONF, DHCPV6C" format="" values="" default="IPV6INIT=yes; IPV6FORWARDING=no; IPV6_AUTOCONF=!IPV6FORWARDING, DHCPV6=no" example="" description="Method used for IPv6 protocol configuration.
+ignore ~ IPV6INIT=no; auto ~ IPV6_AUTOCONF=yes; dhcp ~ IPV6_AUTOCONF=no and DHCPV6C=yes"/>
+<property name="dns" variable="DNS1, DNS2, ..." format="string" values="" default="" example="" description="List of DNS servers. NetworkManager uses the variables both
+for IPv4 and IPv6."/>
+<property name="dns-search" variable="DOMAIN" format="string (space-separated domains)" values="" default="" example="" description="List of DNS search domains."/>
+<property name="addresses" variable="IPV6ADDR, IPV6ADDR_SECONDARIES" format="" values="" default="" example="IPV6ADDR=ab12:9876::1
+IPV6ADDR_SECONDARIES=&quot;ab12:9876::2 ab12:9876::3&quot;" description="List of static IP addresses."/>
+<property name="gateway" variable="IPV6_DEFAULTGW" format="" values="" default="" example="IPV6_DEFAULTGW=abbe::1" description="Gateway IP address."/>
+<property name="routes" variable="(none)" format="" values="" default="" example="" description="List of static routes. They are not stored in ifcfg-* file,
+but in route6-* file instead in the form of command line for &apos;ip route add&apos;."/>
+<property name="ignore-auto-routes" variable="IPV6_PEERROUTES(+)" format="" values="" default="yes" example="" description="IPV6_PEERROUTES has the opposite meaning as &apos;ignore-auto-routes&apos; property."/>
+<property name="ignore-auto-dns" variable="IPV6_PEERDNS(+)" format="" values="" default="yes" example="" description="IPV6_PEERDNS has the opposite meaning as &apos;ignore-auto-dns&apos; property."/>
+<property name="dhcp-hostname" variable="DHCP_HOSTNAME" format="" values="" default="" example="" description="Hostname to send the DHCP server."/>
+<property name="never-default" variable="IPV6_DEFROUTE(+), (and IPV6_DEFAULTGW, IPV6_DEFAULTDEV in /etc/sysconfig/network)" format="" values="" default="IPV6_DEFROUTE=yes (when no variable specified)" example="" description="IPV6_DEFROUTE=no tells NetworkManager that this connection
+should not be assigned the default IPv6 route. IPV6_DEFROUTE has the opposite
+meaning as &apos;never-default&apos; property."/>
+<property name="may-fail" variable="IPV6_FAILURE_FATAL(+)" format="" values="" default="no" example="" description="IPV6_FAILURE_FATAL has the opposite meaning as &apos;may-fail&apos; property."/>
+<property name="ip6-privacy" variable="IPV6_PRIVACY, IPV6_PRIVACY_PREFER_PUBLIC_IP(+)" format="" values="IPV6_PRIVACY: no, yes (rfc3041 or rfc4941);
+IPV6_PRIVACY_PREFER_PUBLIC_IP: yes, no" default="no" example="IPV6_PRIVACY=rfc3041 IPV6_PRIVACY_PREFER_PUBLIC_IP=yes" description="Configure IPv6 Privacy Extensions for SLAAC (RFC4941)."/>
+</setting>
+<setting name="802-11-olpc-mesh">
+</setting>
+<setting name="ppp">
+</setting>
+<setting name="pppoe">
+</setting>
+<setting name="serial">
+</setting>
+<setting name="team-port">
+<property name="config" variable="TEAM_PORT_CONFIG" format="" values="" default="" example="" description="Team port configuration in JSON. See man teamd.conf for details."/>
+</setting>
+<setting name="team">
+<property name="config" variable="TEAM_CONFIG" format="" values="" default="" example="" description="Team configuration in JSON. See man teamd.conf for details."/>
+</setting>
+<setting name="vlan">
+<property name="parent" variable="DEVICE or PHYSDEV" format="" values="" default="" example="" description="Parent interface of the VLAN."/>
+<property name="id" variable="VLAN_ID or DEVICE" format="" values="" default="" example="" description="VLAN identifier."/>
+<property name="flags" variable="VLAN_FLAGS, REORDER_HDR" format="" values="&quot;GVRP&quot;, &quot;LOOSE_BINDING&quot; for VLAN_FLAGS; 0 or 1 for REORDER_HDR" default="" example="" description="Parent interface of the VLAN."/>
+<property name="ingress-property-map" variable="VLAN_INGRESS_PRIORITY_MAP" format="" values="" default="" example="VLAN_INGRESS_PRIORITY_MAP=4:2,3:5" description="Ingress priority mapping."/>
+<property name="egress-property-map" variable="VLAN_EGRESS_PRIORITY_MAP" format="" values="" default="" example="VLAN_EGRESS_PRIORITY_MAP=5:4,4:1,3:7" description="Egress priority mapping."/>
+<property name="interface-name" variable="PHYSDEV and VLAN_ID, or DEVICE" format="" values="" default="" example="PHYSDEV=eth0, VLAN_ID=12; or DEVICE=eth0.12" description="VLAN interface name.
+If all variables are set, parent device from PHYSDEV takes precedence over DEVICE,
+but VLAN id from DEVICE takes precedence over VLAN_ID."/>
+</setting>
+<setting name="vpn">
+</setting>
+<setting name="wimax">
+</setting>
+<setting name="802-3-ethernet">
+<property name="port" variable="(none)" format="" values="" default="" example="" description="The property is not saved by the plugin."/>
+<property name="speed" variable="(none)" format="" values="" default="" example="" description="The property is not saved by the plugin."/>
+<property name="duplex" variable="(none)" format="" values="" default="" example="" description="The property is not saved by the plugin."/>
+<property name="auto-negotiate" variable="(none)" format="" values="" default="" example="" description="The property is not saved by the plugin."/>
+<property name="mac-address" variable="HWADDR" format="" values="" default="" example="" description="Hardware address of the device in traditional hex-digits-and-colons
+notation (e.g. 00:22:68:14:5A:05)."/>
+<property name="cloned-mac-address" variable="MACADDR" format="" values="" default="" example="" description="Cloned (spoofed) MAC address in traditional hex-digits-and-colons
+notation (e.g. 00:22:68:14:5A:99)."/>
+<property name="mac-address-blacklist" variable="HWADDR_BLACKLIST(+)" format="" values="" default="" example="HWADDR_BLACKLIST=&quot;00:22:68:11:69:08 00:11:22:11:44:55&quot;" description="It denies usage of the connection for any device whose address
+is listed."/>
+<property name="mtu" variable="MTU" format="" values="" default="" example="" description="MTU of the interface."/>
+<property name="s390-subchannels" variable="SUBCHANNELS" format="" values="" default="" example="SUBCHANNELS=0.0.b00a,0.0.b00b,0.0.b00c" description="Subchannels for IBM S390 hosts."/>
+<property name="s390-nettype" variable="NETTYPE" format="" values="&quot;qeth&quot;, &quot;lcs&quot; or &quot;ctc&quot;" default="" example="NETTYPE=qeth" description="Network type of the S390 host."/>
+<property name="s390-options" variable="OPTIONS and PORTNAME, CTCPROTO," format="" values="" default="" example="" description="S390 device options. All options go to OPTIONS, except for
+&quot;portname&quot; and &quot;ctcprot&quot; that have their own variables."/>
+</setting>
+<setting name="802-11-wireless-security">
+<property name="key-mgmt" variable="KEY_MGMT(+)" format="" values="IEEE8021X, WPA-PSK, WPA-EAP" default="" example="" description="Key management menthod."/>
+<property name="wep-tx-keyidx" variable="DEFAULTKEY" format="" values="1, 2, 3, 4" default="1" example="" description="Index of active WEP key."/>
+<property name="auth-alg" variable="SECURITYMODE(+)" format="" values="restricted, open, leap" default="" example="" description="Authentication algorithm for WEP."/>
+<property name="proto" variable="WPA_ALLOW_WPA(+), WPA_ALLOW_WPA2(+)" format="" values="yes, no" default="no" example="" description="Allowed WPA protocols, WPA and WPA2 (RSN)."/>
+<property name="pairwise" variable="CIPHER_PAIRWISE(+)" format="" values="CCMP, TKIP" default="" example="" description="Restrict pairwise encryption algorithms, specified as a space
+separated list."/>
+<property name="group" variable="CIPHER_GROUP(+)" format="" values="CCMP, TKIP, WEP40, WEP104" default="" example="" description="Restrict group/broadcast encryption algorithms, specified as a space
+separated list."/>
+<property name="leap-username" variable="IEEE_8021X_IDENTITY(+)" format="" values="" default="" example="" description="Login name for LEAP."/>
+<property name="wep-key0" variable="KEY1, KEY_PASSPHRASE1(+)" format="" values="" default="" example="" description="The first WEP key (used in most networks). See also DEFAULTKEY for key index."/>
+<property name="wep-key1" variable="KEY2, KEY_PASSPHRASE2(+)" format="" values="" default="" example="" description="WEP key with index 1. See also DEFAULTKEY for key index."/>
+<property name="wep-key2" variable="KEY3, KEY_PASSPHRASE3(+)" format="" values="" default="" example="" description="WEP key with index 2. See also DEFAULTKEY for key index."/>
+<property name="wep-key3" variable="KEY4, KEY_PASSPHRASE4(+)" format="" values="" default="" example="" description="WEP key with index 3. See also DEFAULTKEY for key index."/>
+<property name="wep-key-flags" variable="WEP_KEY_FLAGS(+)" format="NMSettingSecretFlags" values="" default="" example="" description="Password flags for KEY&lt;i&gt;, KEY_PASSPHRASE&lt;i&gt; password."/>
+<property name="psk" variable="WPA_PSK" format="" values="" default="" example="" description="Pre-Shared-Key for WPA networks."/>
+<property name="psk-flags" variable="WPA_PSK_FLAGS(+)" format="NMSettingSecretFlags" values="" default="" example="WPA_PSK_FLAGS=user" description="Password flags for WPA_PSK_FLAGS."/>
+<property name="leap-password" variable="IEEE_8021X_PASSWORD(+)" format="" values="" default="" example="" description="Password for LEAP. It can also go to &quot;key-&quot;
+lookaside file, or it can be owned by a secret agent."/>
+<property name="leap-password-flags" variable="IEEE_8021X_PASSWORD_FLAGS(+)" format="NMSettingSecretFlags" values="" default="" example="" description="Password flags for IEEE_8021X_PASSWORD_FLAGS."/>
+<property name="wep-key-type" variable="KEY&lt;i&gt; or KEY_PASSPHRASE&lt;i&gt;(+)" format="" values="" default="" example="KEY1=s:ahoj, KEY1=0a1c45bc02, KEY_PASSPHRASE1=mysupersecretkey" description="KEY is used for &quot;key&quot; type (10 or 26 hexadecimal characters,
+or 5 or 13 character string prefixed with &quot;s:&quot;). KEY_PASSPHRASE is used
+for WEP passphrases."/>
+</setting>
+<setting name="802-11-wireless">
+<property name="ssid" variable="ESSID" format="" values="" default="" example="ESSID=&quot;Quick Net&quot;" description="SSID of Wi-Fi network."/>
+<property name="mode" variable="MODE" format="" values="Ad-Hoc, Managed (Auto) [case insensitive]" default="" example="" description="Wi-Fi network mode."/>
+<property name="band" variable="BAND(+)" format="" values="a, bg" default="" example="BAND=bg" description="BAND alone is honored, but CHANNEL overrides BAND since it
+implies a band."/>
+<property name="channel" variable="CHANNEL" format="" values="" default="" example="CHANNEL=6" description="Channel used for the Wi-Fi communication.
+Channels greater than 14 mean &quot;a&quot; band, otherwise the
+band is &quot;bg&quot;."/>
+<property name="bssid" variable="BSSID(+)" format="" values="" default="" example="BSSID=00:1E:BD:64:83:21" description="Restricts association only to a single AP."/>
+<property name="rate" variable="(none)" format="" values="" default="" example="" description="This property is not handled by ifcfg-rh plugin."/>
+<property name="tx-power" variable="(none)" format="" values="" default="" example="" description="This property is not handled by ifcfg-rh plugin."/>
+<property name="mac-address" variable="HWADDR" format="" values="" default="" example="" description="Hardware address of the device in traditional hex-digits-and-colons
+notation (e.g. 00:22:68:14:5A:05)."/>
+<property name="cloned-mac-address" variable="MACADDR" format="" values="" default="" example="" description="Cloned (spoofed) MAC address in traditional hex-digits-and-colons
+notation (e.g. 00:22:68:14:5A:99)."/>
+<property name="mac-address-blacklist" variable="HWADDR_BLACKLIST(+)" format="" values="" default="" example="" description="It denies usage of the connection for any device whose address
+is listed."/>
+<property name="seen-bssids" variable="(none)" format="" values="" default="" example="" description="This property is not handled by ifcfg-rh plugin."/>
+<property name="mtu" variable="MTU" format="" values="" default="" example="" description="MTU of the wireless interface."/>
+<property name="hidden" variable="SSID_HIDDEN(+)" format="" values="" default="" example="" description="Whether the network hides the SSID."/>
+<property name="security" variable="(none)" format="" values="" default="" example="" description="This property is deprecated and not handled by ifcfg-rh-plugin."/>
+</setting>
+</nm-ifcfg-rh-docs> \ No newline at end of file
diff --git a/libnm/nm-ip-config.c b/libnm/nm-ip-config.c
new file mode 100644
index 000000000..d057903e2
--- /dev/null
+++ b/libnm/nm-ip-config.c
@@ -0,0 +1,502 @@
+/* -*- 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 2007 - 2011 Novell, Inc.
+ * Copyright 2008 - 2014 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "nm-ip-config.h"
+#include "nm-ip4-config.h"
+#include "nm-ip6-config.h"
+#include "nm-setting-ip-config.h"
+#include "nm-dbus-interface.h"
+#include "nm-object-private.h"
+#include "nm-utils.h"
+#include "nm-core-internal.h"
+
+G_DEFINE_ABSTRACT_TYPE (NMIPConfig, nm_ip_config, NM_TYPE_OBJECT)
+
+#define NM_IP_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_IP_CONFIG, NMIPConfigPrivate))
+
+typedef struct {
+ char *gateway;
+ GPtrArray *addresses;
+ GPtrArray *routes;
+ char **nameservers;
+ char **domains;
+ char **searches;
+ char **wins;
+
+ gboolean new_style_data;
+} NMIPConfigPrivate;
+
+enum {
+ PROP_0,
+ PROP_FAMILY,
+ PROP_GATEWAY,
+ PROP_ADDRESSES,
+ PROP_ROUTES,
+ PROP_NAMESERVERS,
+ PROP_DOMAINS,
+ PROP_SEARCHES,
+ PROP_WINS_SERVERS,
+
+ LAST_PROP
+};
+
+static void
+nm_ip_config_init (NMIPConfig *config)
+{
+ NMIPConfigPrivate *priv = NM_IP_CONFIG_GET_PRIVATE (config);
+
+ priv->addresses = g_ptr_array_new ();
+ priv->routes = g_ptr_array_new ();
+ priv->nameservers = g_new0 (char *, 1);
+ priv->domains = g_new0 (char *, 1);
+ priv->searches = g_new0 (char *, 1);
+ priv->wins = g_new0 (char *, 1);
+}
+
+static gboolean
+demarshal_ip_addresses (NMObject *object, GParamSpec *pspec, GVariant *value, gpointer field)
+{
+ NMIPConfigPrivate *priv = NM_IP_CONFIG_GET_PRIVATE (object);
+
+ if (priv->new_style_data)
+ return TRUE;
+
+ g_ptr_array_unref (priv->addresses);
+ if (NM_IS_IP4_CONFIG (object))
+ priv->addresses = nm_utils_ip4_addresses_from_variant (value, NULL);
+ else
+ priv->addresses = nm_utils_ip6_addresses_from_variant (value, NULL);
+ _nm_object_queue_notify (object, NM_IP_CONFIG_ADDRESSES);
+
+ return TRUE;
+}
+
+static gboolean
+demarshal_ip_address_data (NMObject *object, GParamSpec *pspec, GVariant *value, gpointer field)
+{
+ NMIPConfigPrivate *priv = NM_IP_CONFIG_GET_PRIVATE (object);
+
+ priv->new_style_data = TRUE;
+
+ g_ptr_array_unref (priv->addresses);
+ if (NM_IS_IP4_CONFIG (object))
+ priv->addresses = nm_utils_ip_addresses_from_variant (value, AF_INET);
+ else
+ priv->addresses = nm_utils_ip_addresses_from_variant (value, AF_INET6);
+ _nm_object_queue_notify (object, NM_IP_CONFIG_ADDRESSES);
+
+ return TRUE;
+}
+
+static gboolean
+demarshal_ip_array (NMObject *object, GParamSpec *pspec, GVariant *value, gpointer field)
+{
+ char ***obj_field;
+
+ obj_field = field;
+ if (*obj_field)
+ g_strfreev (*obj_field);
+
+ if (NM_IS_IP4_CONFIG (object))
+ *obj_field = nm_utils_ip4_dns_from_variant (value);
+ else
+ *obj_field = nm_utils_ip6_dns_from_variant (value);
+
+ _nm_object_queue_notify (object, pspec->name);
+ return TRUE;
+}
+
+static gboolean
+demarshal_ip_routes (NMObject *object, GParamSpec *pspec, GVariant *value, gpointer field)
+{
+ NMIPConfigPrivate *priv = NM_IP_CONFIG_GET_PRIVATE (object);
+
+ if (priv->new_style_data)
+ return TRUE;
+
+ g_ptr_array_unref (priv->routes);
+ if (NM_IS_IP4_CONFIG (object))
+ priv->routes = nm_utils_ip4_routes_from_variant (value);
+ else
+ priv->routes = nm_utils_ip6_routes_from_variant (value);
+ _nm_object_queue_notify (object, NM_IP_CONFIG_ROUTES);
+
+ return TRUE;
+}
+
+static gboolean
+demarshal_ip_route_data (NMObject *object, GParamSpec *pspec, GVariant *value, gpointer field)
+{
+ NMIPConfigPrivate *priv = NM_IP_CONFIG_GET_PRIVATE (object);
+
+ priv->new_style_data = TRUE;
+
+ g_ptr_array_unref (priv->routes);
+ if (NM_IS_IP4_CONFIG (object))
+ priv->routes = nm_utils_ip_routes_from_variant (value, AF_INET);
+ else
+ priv->routes = nm_utils_ip_routes_from_variant (value, AF_INET6);
+ _nm_object_queue_notify (object, NM_IP_CONFIG_ROUTES);
+
+ return TRUE;
+}
+
+static void
+init_dbus (NMObject *object)
+{
+ NMIPConfigPrivate *priv = NM_IP_CONFIG_GET_PRIVATE (object);
+ const NMPropertiesInfo property_info[] = {
+ { NM_IP_CONFIG_GATEWAY, &priv->gateway, },
+ { NM_IP_CONFIG_ADDRESSES, &priv->addresses, demarshal_ip_addresses },
+ { "address-data", &priv->addresses, demarshal_ip_address_data },
+ { NM_IP_CONFIG_ROUTES, &priv->routes, demarshal_ip_routes },
+ { "route-data", &priv->routes, demarshal_ip_route_data },
+ { NM_IP_CONFIG_NAMESERVERS, &priv->nameservers, demarshal_ip_array },
+ { NM_IP_CONFIG_DOMAINS, &priv->domains, },
+ { NM_IP_CONFIG_SEARCHES, &priv->searches, },
+ { NM_IP_CONFIG_WINS_SERVERS, &priv->wins, demarshal_ip_array },
+ { NULL },
+ };
+
+ NM_OBJECT_CLASS (nm_ip_config_parent_class)->init_dbus (object);
+
+ _nm_object_register_properties (object,
+ (NM_IS_IP4_CONFIG (object) ?
+ NM_DBUS_INTERFACE_IP4_CONFIG :
+ NM_DBUS_INTERFACE_IP6_CONFIG),
+ property_info);
+}
+
+static void
+finalize (GObject *object)
+{
+ NMIPConfigPrivate *priv = NM_IP_CONFIG_GET_PRIVATE (object);
+
+ g_free (priv->gateway);
+
+ g_ptr_array_unref (priv->addresses);
+ g_ptr_array_unref (priv->routes);
+
+ g_strfreev (priv->nameservers);
+ g_strfreev (priv->domains);
+ g_strfreev (priv->searches);
+ g_strfreev (priv->wins);
+
+ G_OBJECT_CLASS (nm_ip_config_parent_class)->finalize (object);
+}
+
+static void
+get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NMIPConfig *self = NM_IP_CONFIG (object);
+
+ switch (prop_id) {
+ case PROP_FAMILY:
+ g_value_set_int (value, nm_ip_config_get_family (self));
+ break;
+ case PROP_GATEWAY:
+ g_value_set_string (value, nm_ip_config_get_gateway (self));
+ break;
+ case PROP_ADDRESSES:
+ g_value_take_boxed (value, _nm_utils_copy_array (nm_ip_config_get_addresses (self),
+ (NMUtilsCopyFunc) nm_ip_address_dup,
+ (GDestroyNotify) nm_ip_address_unref));
+ break;
+ case PROP_ROUTES:
+ g_value_take_boxed (value, _nm_utils_copy_array (nm_ip_config_get_routes (self),
+ (NMUtilsCopyFunc) nm_ip_route_dup,
+ (GDestroyNotify) nm_ip_route_unref));
+ break;
+ case PROP_NAMESERVERS:
+ g_value_set_boxed (value, (char **) nm_ip_config_get_nameservers (self));
+ break;
+ case PROP_DOMAINS:
+ g_value_set_boxed (value, (char **) nm_ip_config_get_domains (self));
+ break;
+ case PROP_SEARCHES:
+ g_value_set_boxed (value, (char **) nm_ip_config_get_searches (self));
+ break;
+ case PROP_WINS_SERVERS:
+ g_value_set_boxed (value, (char **) nm_ip_config_get_wins_servers (self));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_ip_config_class_init (NMIPConfigClass *config_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (config_class);
+ NMObjectClass *nm_object_class = NM_OBJECT_CLASS (config_class);
+
+ g_type_class_add_private (config_class, sizeof (NMIPConfigPrivate));
+
+ /* virtual methods */
+ object_class->get_property = get_property;
+ object_class->finalize = finalize;
+
+ nm_object_class->init_dbus = init_dbus;
+
+ /* properties */
+
+ /**
+ * NMIPConfig:family:
+ *
+ * The IP address family of the configuration; either
+ * <literal>AF_INET</literal> or <literal>AF_INET6</literal>.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_FAMILY,
+ g_param_spec_int (NM_IP_CONFIG_FAMILY, "", "",
+ 0, 255, AF_UNSPEC,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMIPConfig:gateway:
+ *
+ * The IP gateway address of the configuration as string.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_GATEWAY,
+ g_param_spec_string (NM_IP_CONFIG_GATEWAY, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMIPConfig:addresses:
+ *
+ * A #GPtrArray containing the addresses (#NMIPAddress) of the configuration.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_ADDRESSES,
+ g_param_spec_boxed (NM_IP_CONFIG_ADDRESSES, "", "",
+ G_TYPE_PTR_ARRAY,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMIPConfig:routes:
+ *
+ * A #GPtrArray containing the routes (#NMIPRoute) of the configuration.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_ROUTES,
+ g_param_spec_boxed (NM_IP_CONFIG_ROUTES, "", "",
+ G_TYPE_PTR_ARRAY,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMIPConfig:nameservers:
+ *
+ * The array containing name server IP addresses of the configuration.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_NAMESERVERS,
+ g_param_spec_boxed (NM_IP_CONFIG_NAMESERVERS, "", "",
+ G_TYPE_STRV,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMIPConfig:domains:
+ *
+ * The array containing domain strings of the configuration.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_DOMAINS,
+ g_param_spec_boxed (NM_IP_CONFIG_DOMAINS, "", "",
+ G_TYPE_STRV,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMIPConfig:searches:
+ *
+ * The array containing DNS search strings of the configuration.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_SEARCHES,
+ g_param_spec_boxed (NM_IP_CONFIG_SEARCHES, "", "",
+ G_TYPE_STRV,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMIPConfig:wins-servers:
+ *
+ * The array containing WINS server IP addresses of the configuration.
+ * (This will always be empty for IPv6 configurations.)
+ **/
+ g_object_class_install_property
+ (object_class, PROP_WINS_SERVERS,
+ g_param_spec_boxed (NM_IP_CONFIG_WINS_SERVERS, "", "",
+ G_TYPE_STRV,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+}
+
+/**
+ * nm_ip_config_get_family:
+ * @config: a #NMIPConfig
+ *
+ * Gets the IP address family
+ *
+ * Returns: the IP address family; either <literal>AF_INET</literal> or
+ * <literal>AF_INET6</literal>
+ **/
+int
+nm_ip_config_get_family (NMIPConfig *config)
+{
+ g_return_val_if_fail (NM_IS_IP_CONFIG (config), AF_UNSPEC);
+
+ return NM_IS_IP4_CONFIG (config) ? AF_INET : AF_INET6;
+}
+
+/**
+ * nm_ip_config_get_gateway:
+ * @config: a #NMIPConfig
+ *
+ * Gets the IP gateway address.
+ *
+ * Returns: (transfer none): the IP address of the gateway.
+ **/
+const char *
+nm_ip_config_get_gateway (NMIPConfig *config)
+{
+ g_return_val_if_fail (NM_IS_IP_CONFIG (config), NULL);
+
+ return NM_IP_CONFIG_GET_PRIVATE (config)->gateway;
+}
+
+/**
+ * nm_ip_config_get_addresses:
+ * @config: a #NMIPConfig
+ *
+ * Gets the IP addresses (containing the address, prefix, and gateway).
+ *
+ * Returns: (element-type NMIPAddress) (transfer none): the #GPtrArray
+ * containing #NMIPAddress<!-- -->es. This is the internal copy used by the
+ * configuration and must not be modified.
+ **/
+GPtrArray *
+nm_ip_config_get_addresses (NMIPConfig *config)
+{
+ g_return_val_if_fail (NM_IS_IP_CONFIG (config), NULL);
+
+ return NM_IP_CONFIG_GET_PRIVATE (config)->addresses;
+}
+
+/**
+ * nm_ip_config_get_nameservers:
+ * @config: a #NMIPConfig
+ *
+ * Gets the domain name servers (DNS).
+ *
+ * Returns: (transfer none): the array of nameserver IP addresses
+ **/
+const char * const *
+nm_ip_config_get_nameservers (NMIPConfig *config)
+{
+ g_return_val_if_fail (NM_IS_IP_CONFIG (config), NULL);
+
+ return (const char * const *) NM_IP_CONFIG_GET_PRIVATE (config)->nameservers;
+}
+
+/**
+ * nm_ip_config_get_domains:
+ * @config: a #NMIPConfig
+ *
+ * Gets the domain names.
+ *
+ * Returns: (transfer none): the array of domains.
+ * (This is never %NULL, though it may be 0-length).
+ **/
+const char * const *
+nm_ip_config_get_domains (NMIPConfig *config)
+{
+ g_return_val_if_fail (NM_IS_IP_CONFIG (config), NULL);
+
+ return (const char * const *) NM_IP_CONFIG_GET_PRIVATE (config)->domains;
+}
+
+/**
+ * nm_ip_config_get_searches:
+ * @config: a #NMIPConfig
+ *
+ * Gets the DNS searches.
+ *
+ * Returns: (transfer none): the array of DNS search strings.
+ * (This is never %NULL, though it may be 0-length).
+ **/
+const char * const *
+nm_ip_config_get_searches (NMIPConfig *config)
+{
+ g_return_val_if_fail (NM_IS_IP_CONFIG (config), NULL);
+
+ return (const char * const *) NM_IP_CONFIG_GET_PRIVATE (config)->searches;
+}
+
+/**
+ * nm_ip_config_get_wins_servers:
+ * @config: a #NMIPConfig
+ *
+ * Gets the Windows Internet Name Service servers (WINS).
+ *
+ * Returns: (transfer none): the arry of WINS server IP address strings.
+ * (This is never %NULL, though it may be 0-length.)
+ **/
+const char * const *
+nm_ip_config_get_wins_servers (NMIPConfig *config)
+{
+ g_return_val_if_fail (NM_IS_IP_CONFIG (config), NULL);
+
+ return (const char * const *) NM_IP_CONFIG_GET_PRIVATE (config)->wins;
+}
+
+/**
+ * nm_ip_config_get_routes:
+ * @config: a #NMIPConfig
+ *
+ * Gets the routes.
+ *
+ * Returns: (element-type NMIPRoute) (transfer none): the #GPtrArray containing
+ * #NMIPRoutes. This is the internal copy used by the configuration, and must
+ * not be modified.
+ **/
+GPtrArray *
+nm_ip_config_get_routes (NMIPConfig *config)
+{
+ g_return_val_if_fail (NM_IS_IP_CONFIG (config), NULL);
+
+ return NM_IP_CONFIG_GET_PRIVATE (config)->routes;
+}
diff --git a/libnm/nm-ip-config.h b/libnm/nm-ip-config.h
new file mode 100644
index 000000000..815135a05
--- /dev/null
+++ b/libnm/nm-ip-config.h
@@ -0,0 +1,73 @@
+/* -*- 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 2007 - 2008 Novell, Inc.
+ * Copyright 2008 - 2014 Red Hat, Inc.
+ */
+
+#ifndef __NM_IP_CONFIG_H__
+#define __NM_IP_CONFIG_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-object.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_IP_CONFIG (nm_ip_config_get_type ())
+#define NM_IP_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_IP_CONFIG, NMIPConfig))
+#define NM_IP_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_IP_CONFIG, NMIPConfigClass))
+#define NM_IS_IP_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_IP_CONFIG))
+#define NM_IS_IP_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_IP_CONFIG))
+#define NM_IP_CONFIG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_IP_CONFIG, NMIPConfigClass))
+
+struct _NMIPConfig {
+ NMObject parent;
+};
+
+typedef struct {
+ NMObjectClass parent;
+
+ /*< private >*/
+ gpointer padding[8];
+} NMIPConfigClass;
+
+#define NM_IP_CONFIG_FAMILY "family"
+#define NM_IP_CONFIG_GATEWAY "gateway"
+#define NM_IP_CONFIG_ADDRESSES "addresses"
+#define NM_IP_CONFIG_ROUTES "routes"
+#define NM_IP_CONFIG_NAMESERVERS "nameservers"
+#define NM_IP_CONFIG_DOMAINS "domains"
+#define NM_IP_CONFIG_SEARCHES "searches"
+#define NM_IP_CONFIG_WINS_SERVERS "wins-servers"
+
+GType nm_ip_config_get_type (void);
+
+int nm_ip_config_get_family (NMIPConfig *config);
+const char * nm_ip_config_get_gateway (NMIPConfig *config);
+GPtrArray * nm_ip_config_get_addresses (NMIPConfig *config);
+GPtrArray * nm_ip_config_get_routes (NMIPConfig *config);
+const char * const *nm_ip_config_get_nameservers (NMIPConfig *config);
+const char * const *nm_ip_config_get_domains (NMIPConfig *config);
+const char * const *nm_ip_config_get_searches (NMIPConfig *config);
+const char * const *nm_ip_config_get_wins_servers (NMIPConfig *config);
+
+G_END_DECLS
+
+#endif /* __NM_IP_CONFIG_H__ */
diff --git a/libnm/nm-ip4-config.c b/libnm/nm-ip4-config.c
new file mode 100644
index 000000000..26797dd7c
--- /dev/null
+++ b/libnm/nm-ip4-config.c
@@ -0,0 +1,39 @@
+/* -*- 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 2014 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include "nm-ip4-config.h"
+#include "nm-object-private.h"
+
+G_DEFINE_TYPE (NMIP4Config, nm_ip4_config, NM_TYPE_IP_CONFIG)
+
+static void
+nm_ip4_config_init (NMIP4Config *config)
+{
+}
+
+static void
+nm_ip4_config_class_init (NMIP4ConfigClass *config_class)
+{
+ NMObjectClass *nm_object_class = NM_OBJECT_CLASS (config_class);
+
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_IP4_CONFIG);
+}
diff --git a/libnm/nm-ip4-config.h b/libnm/nm-ip4-config.h
new file mode 100644
index 000000000..e2a18e0f3
--- /dev/null
+++ b/libnm/nm-ip4-config.h
@@ -0,0 +1,51 @@
+/* -*- 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 2007 - 2008 Novell, Inc.
+ * Copyright 2008 Red Hat, Inc.
+ */
+
+#ifndef __NM_IP4_CONFIG_H__
+#define __NM_IP4_CONFIG_H__
+
+#include <nm-ip-config.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_IP4_CONFIG (nm_ip4_config_get_type ())
+#define NM_IP4_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_IP4_CONFIG, NMIP4Config))
+#define NM_IP4_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_IP4_CONFIG, NMIP4ConfigClass))
+#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))
+
+typedef struct {
+ NMIPConfig parent;
+} NMIP4Config;
+
+typedef struct {
+ NMIPConfigClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMIP4ConfigClass;
+
+GType nm_ip4_config_get_type (void);
+
+G_END_DECLS
+
+#endif /* __NM_IP4_CONFIG_H__ */
diff --git a/libnm/nm-ip6-config.c b/libnm/nm-ip6-config.c
new file mode 100644
index 000000000..8a6c966c3
--- /dev/null
+++ b/libnm/nm-ip6-config.c
@@ -0,0 +1,39 @@
+/* -*- 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 2014 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include "nm-ip6-config.h"
+#include "nm-object-private.h"
+
+G_DEFINE_TYPE (NMIP6Config, nm_ip6_config, NM_TYPE_IP_CONFIG)
+
+static void
+nm_ip6_config_init (NMIP6Config *config)
+{
+}
+
+static void
+nm_ip6_config_class_init (NMIP6ConfigClass *config_class)
+{
+ NMObjectClass *nm_object_class = NM_OBJECT_CLASS (config_class);
+
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_IP6_CONFIG);
+}
diff --git a/libnm/nm-ip6-config.h b/libnm/nm-ip6-config.h
new file mode 100644
index 000000000..1953476d0
--- /dev/null
+++ b/libnm/nm-ip6-config.h
@@ -0,0 +1,51 @@
+/* -*- 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 2007 - 2008 Novell, Inc.
+ * Copyright 2008 - 2014 Red Hat, Inc.
+ */
+
+#ifndef __NM_IP6_CONFIG_H__
+#define __NM_IP6_CONFIG_H__
+
+#include <nm-ip-config.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_IP6_CONFIG (nm_ip6_config_get_type ())
+#define NM_IP6_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_IP6_CONFIG, NMIP6Config))
+#define NM_IP6_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_IP6_CONFIG, NMIP6ConfigClass))
+#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))
+
+typedef struct {
+ NMIPConfig parent;
+} NMIP6Config;
+
+typedef struct {
+ NMIPConfigClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMIP6ConfigClass;
+
+GType nm_ip6_config_get_type (void);
+
+G_END_DECLS
+
+#endif /* __NM_IP6_CONFIG_H__ */
diff --git a/libnm/nm-keyfile-docs.xml b/libnm/nm-keyfile-docs.xml
new file mode 100644
index 000000000..d080a427f
--- /dev/null
+++ b/libnm/nm-keyfile-docs.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0"?>
+<!DOCTYPE nm-keyfile-docs [
+]>
+
+<nm-keyfile-docs>
+ <setting name="802-1x">
+</setting>
+<setting name="adsl">
+</setting>
+<setting name="bluetooth">
+</setting>
+<setting name="bond">
+</setting>
+<setting name="bridge-port">
+</setting>
+<setting name="bridge">
+<property name="mac-address" variable="mac-address" format="ususal hex-digits-and-colons notation" values="" default="" example="mac-address=00:22:68:12:79:A2
+mac-address=0;34;104;18;121;162;" description="MAC address in traditional hex-digits-and-colons notation,
+or semicolon separated list of 6 decimal bytes (obsolete)"/>
+</setting>
+<setting name="cdma">
+</setting>
+<setting name="connection">
+</setting>
+<setting name="dcb">
+</setting>
+<setting name="generic">
+</setting>
+<setting name="gsm">
+</setting>
+<setting name="infiniband">
+<property name="mac-address" variable="mac-address" format="ususal hex-digits-and-colons notation" values="" default="" example="mac-address= 80:00:00:6d:fe:80:00:00:00:00:00:00:00:02:55:00:70:33:cf:01" description="MAC address in traditional hex-digits-and-colons notation, or
+or semicolon separated list of 20 decimal bytes (obsolete)"/>
+</setting>
+<setting name="">
+</setting>
+<setting name="ipv4">
+<property name="dns" variable="dns" format="list of DNS IP addresses" values="" default="" example="dns=1.2.3.4;8.8.8.8;8.8.4.4;" description="List of DNS servers."/>
+<property name="addresses" variable="address1, address2, ..." format="address/plen" values="" default="" example="address1=192.168.100.100/24 address2=10.1.1.5/24" description="List of static IP addresses."/>
+<property name="gateway" variable="gateway" format="string" values="" default="" example="gateway=192.168.100.1" description="Gateway IP addresses as a string."/>
+<property name="routes" variable="route1, route2, ..." format="route/plen[,gateway,metric]" values="" default="" example="route1=8.8.8.0/24,10.1.1.1,77
+route2=7.7.0.0/16" description="List of IP routes."/>
+</setting>
+<setting name="ipv6">
+<property name="dns" variable="dns" format="list of DNS IP addresses" values="" default="" example="dns=2001:4860:4860::8888;2001:4860:4860::8844;" description="List of DNS servers."/>
+<property name="addresses" variable="address1, address2, ..." format="address/plen" values="" default="" example="address1=abbe::cafe/96 address2=2001::1234" description="List of static IP addresses."/>
+<property name="gateway" variable="gateway" format="string" values="" default="" example="gateway=abbe::1" description="Gateway IP addresses as a string."/>
+<property name="routes" variable="route1, route2, ..." format="route/plen[,gateway,metric]" values="" default="" example="route1=2001:4860:4860::/64,2620:52:0:2219:222:68ff:fe11:5403" description="List of IP routes."/>
+</setting>
+<setting name="802-11-olpc-mesh">
+</setting>
+<setting name="ppp">
+</setting>
+<setting name="pppoe">
+</setting>
+<setting name="serial">
+<property name="parity" variable="parity" format="&apos;e&apos;, &apos;o&apos;, or &apos;n&apos;" values="" default="" example="parity=n" description="The connection parity; even, odd, or none. Note that older
+versions of NetworkManager stored this as an integer: 69 (&apos;E&apos;) for even,
+111 (&apos;o&apos;) for odd, or 110 (&apos;n&apos;) for none."/>
+</setting>
+<setting name="team-port">
+</setting>
+<setting name="team">
+</setting>
+<setting name="vlan">
+</setting>
+<setting name="vpn">
+<property name="data" variable="separate variables named after keys of the dictionary" format="" values="" default="" example="remote=ovpn.corp.com cipher=AES-256-CBC username=joe" description="The keys of the data dictionary are used as variable names directly
+under [vpn] section."/>
+<property name="secrets" variable="separate variables named after keys of the dictionary" format="" values="" default="" example="password=Popocatepetl" description="The keys of the secrets dictionary are used as variable names directly
+under [vpn-secrets] section."/>
+</setting>
+<setting name="wimax">
+</setting>
+<setting name="802-3-ethernet">
+<property name="mac-address" variable="mac-address" format="ususal hex-digits-and-colons notation" values="" default="" example="" description="MAC address in traditional hex-digits-and-colons notation
+(e.g. 00:22:68:12:79:A2), or semicolon separated list of 6 bytes (obsolete)
+(e.g. 0;34;104;18;121;162)"/>
+<property name="cloned-mac-address" variable="cloned-mac-address" format="ususal hex-digits-and-colons notation" values="" default="" example="" description="Cloned MAC address in traditional hex-digits-and-colons notation
+(e.g. 00:22:68:12:79:B2), or semicolon separated list of 6 bytes (obsolete)
+(e.g. 0;34;104;18;121;178)."/>
+<property name="mac-address-blacklist" variable="mac-address-blacklist" format="list of MACs (separated with semicolons)" values="" default="" example="mac-address-blacklist= 00:22:68:12:79:A6;00:22:68:12:79:78" description="MAC address blacklist."/>
+</setting>
+<setting name="802-11-wireless-security">
+</setting>
+<setting name="802-11-wireless">
+<property name="ssid" variable="ssid" format="string (or decimal-byte list - obsolete)" values="" default="" example="ssid=Quick Net" description="SSID of Wi-Fi network."/>
+<property name="mac-address" variable="mac-address" format="ususal hex-digits-and-colons notation" values="" default="" example="" description="MAC address in traditional hex-digits-and-colons notation
+(e.g. 00:22:68:12:79:A2), or semicolon separated list of 6 bytes (obsolete)
+(e.g. 0;34;104;18;121;162)."/>
+<property name="cloned-mac-address" variable="cloned-mac-address" format="ususal hex-digits-and-colons notation" values="" default="" example="" description="Cloned MAC address in traditional hex-digits-and-colons notation
+(e.g. 00:22:68:12:79:B2), or semicolon separated list of 6 bytes (obsolete)
+(e.g. 0;34;104;18;121;178)."/>
+<property name="mac-address-blacklist" variable="mac-address-blacklist" format="list of MACs (separated with semicolons)" values="" default="" example="mac-address-blacklist= 00:22:68:12:79:A6;00:22:68:12:79:78" description="MAC address blacklist."/>
+</setting>
+</nm-keyfile-docs> \ No newline at end of file
diff --git a/libnm/nm-manager.c b/libnm/nm-manager.c
new file mode 100644
index 000000000..1abb51302
--- /dev/null
+++ b/libnm/nm-manager.c
@@ -0,0 +1,1730 @@
+/* -*- 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 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2014 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <glib/gi18n-lib.h>
+#include <nm-utils.h>
+
+#include "nm-manager.h"
+#include "nm-device-ethernet.h"
+#include "nm-device-wifi.h"
+#include "nm-device-private.h"
+#include "nm-core-internal.h"
+#include "nm-object-private.h"
+#include "nm-active-connection.h"
+#include "nm-vpn-connection.h"
+#include "nm-object-cache.h"
+#include "nm-glib-compat.h"
+#include "nm-dbus-helpers.h"
+
+#include "nmdbus-manager.h"
+
+void _nm_device_wifi_set_wireless_enabled (NMDeviceWifi *device, gboolean enabled);
+
+static void nm_manager_initable_iface_init (GInitableIface *iface);
+static void nm_manager_async_initable_iface_init (GAsyncInitableIface *iface);
+static GInitableIface *nm_manager_parent_initable_iface;
+static GAsyncInitableIface *nm_manager_parent_async_initable_iface;
+
+G_DEFINE_TYPE_WITH_CODE (NMManager, nm_manager, NM_TYPE_OBJECT,
+ G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, nm_manager_initable_iface_init);
+ G_IMPLEMENT_INTERFACE (G_TYPE_ASYNC_INITABLE, nm_manager_async_initable_iface_init);
+ )
+
+#define NM_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_MANAGER, NMManagerPrivate))
+
+typedef struct {
+ NMDBusManager *manager_proxy;
+ GCancellable *props_cancellable;
+ char *version;
+ NMState state;
+ gboolean startup;
+ GPtrArray *devices;
+ GPtrArray *active_connections;
+ NMConnectivityState connectivity;
+ NMActiveConnection *primary_connection;
+ NMActiveConnection *activating_connection;
+
+ GCancellable *perm_call_cancellable;
+ GHashTable *permissions;
+
+ /* Activations waiting for their NMActiveConnection
+ * to appear and then their callback to be called.
+ */
+ GSList *pending_activations;
+
+ gboolean networking_enabled;
+ gboolean wireless_enabled;
+ gboolean wireless_hw_enabled;
+
+ gboolean wwan_enabled;
+ gboolean wwan_hw_enabled;
+
+ gboolean wimax_enabled;
+ gboolean wimax_hw_enabled;
+} NMManagerPrivate;
+
+enum {
+ PROP_0,
+ PROP_VERSION,
+ PROP_STATE,
+ PROP_STARTUP,
+ PROP_NM_RUNNING,
+ PROP_NETWORKING_ENABLED,
+ PROP_WIRELESS_ENABLED,
+ PROP_WIRELESS_HARDWARE_ENABLED,
+ PROP_WWAN_ENABLED,
+ PROP_WWAN_HARDWARE_ENABLED,
+ PROP_WIMAX_ENABLED,
+ PROP_WIMAX_HARDWARE_ENABLED,
+ PROP_ACTIVE_CONNECTIONS,
+ PROP_CONNECTIVITY,
+ PROP_PRIMARY_CONNECTION,
+ PROP_ACTIVATING_CONNECTION,
+ PROP_DEVICES,
+
+ LAST_PROP
+};
+
+enum {
+ DEVICE_ADDED,
+ DEVICE_REMOVED,
+ ACTIVE_CONNECTION_ADDED,
+ ACTIVE_CONNECTION_REMOVED,
+ PERMISSION_CHANGED,
+
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+static void nm_running_changed_cb (GObject *object,
+ GParamSpec *pspec,
+ gpointer user_data);
+
+/**********************************************************************/
+
+static void
+nm_manager_init (NMManager *manager)
+{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
+
+ priv->state = NM_STATE_UNKNOWN;
+ priv->connectivity = NM_CONNECTIVITY_UNKNOWN;
+
+ priv->permissions = g_hash_table_new (g_direct_hash, g_direct_equal);
+ priv->devices = g_ptr_array_new ();
+ priv->active_connections = g_ptr_array_new ();
+}
+
+static void
+poke_wireless_devices_with_rf_status (NMManager *manager)
+{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
+ int i;
+
+ for (i = 0; i < priv->devices->len; i++) {
+ NMDevice *device = g_ptr_array_index (priv->devices, i);
+
+ if (NM_IS_DEVICE_WIFI (device))
+ _nm_device_wifi_set_wireless_enabled (NM_DEVICE_WIFI (device), priv->wireless_enabled);
+ }
+}
+
+static void
+wireless_enabled_cb (GObject *object, GParamSpec *pspec, gpointer user_data)
+{
+ poke_wireless_devices_with_rf_status (NM_MANAGER (object));
+}
+
+static void manager_recheck_permissions (NMDBusManager *proxy, gpointer user_data);
+
+static void
+init_dbus (NMObject *object)
+{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (object);
+ const NMPropertiesInfo property_info[] = {
+ { NM_MANAGER_VERSION, &priv->version },
+ { NM_MANAGER_STATE, &priv->state },
+ { NM_MANAGER_STARTUP, &priv->startup },
+ { NM_MANAGER_NETWORKING_ENABLED, &priv->networking_enabled },
+ { NM_MANAGER_WIRELESS_ENABLED, &priv->wireless_enabled },
+ { NM_MANAGER_WIRELESS_HARDWARE_ENABLED, &priv->wireless_hw_enabled },
+ { NM_MANAGER_WWAN_ENABLED, &priv->wwan_enabled },
+ { NM_MANAGER_WWAN_HARDWARE_ENABLED, &priv->wwan_hw_enabled },
+ { NM_MANAGER_WIMAX_ENABLED, &priv->wimax_enabled },
+ { NM_MANAGER_WIMAX_HARDWARE_ENABLED, &priv->wimax_hw_enabled },
+ { NM_MANAGER_ACTIVE_CONNECTIONS, &priv->active_connections, NULL, NM_TYPE_ACTIVE_CONNECTION, "active-connection" },
+ { NM_MANAGER_CONNECTIVITY, &priv->connectivity },
+ { NM_MANAGER_PRIMARY_CONNECTION, &priv->primary_connection, NULL, NM_TYPE_ACTIVE_CONNECTION },
+ { NM_MANAGER_ACTIVATING_CONNECTION, &priv->activating_connection, NULL, NM_TYPE_ACTIVE_CONNECTION },
+ { NM_MANAGER_DEVICES, &priv->devices, NULL, NM_TYPE_DEVICE, "device" },
+ { NULL },
+ };
+
+ NM_OBJECT_CLASS (nm_manager_parent_class)->init_dbus (object);
+
+ priv->manager_proxy = NMDBUS_MANAGER (_nm_object_get_proxy (object, NM_DBUS_INTERFACE));
+ _nm_object_register_properties (object,
+ NM_DBUS_INTERFACE,
+ property_info);
+
+ /* Permissions */
+ g_signal_connect (priv->manager_proxy, "check-permissions",
+ G_CALLBACK (manager_recheck_permissions), object);
+}
+
+#define NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK "org.freedesktop.NetworkManager.enable-disable-network"
+#define NM_AUTH_PERMISSION_ENABLE_DISABLE_WIFI "org.freedesktop.NetworkManager.enable-disable-wifi"
+#define NM_AUTH_PERMISSION_ENABLE_DISABLE_WWAN "org.freedesktop.NetworkManager.enable-disable-wwan"
+#define NM_AUTH_PERMISSION_ENABLE_DISABLE_WIMAX "org.freedesktop.NetworkManager.enable-disable-wimax"
+#define NM_AUTH_PERMISSION_SLEEP_WAKE "org.freedesktop.NetworkManager.sleep-wake"
+#define NM_AUTH_PERMISSION_NETWORK_CONTROL "org.freedesktop.NetworkManager.network-control"
+#define NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED "org.freedesktop.NetworkManager.wifi.share.protected"
+#define NM_AUTH_PERMISSION_WIFI_SHARE_OPEN "org.freedesktop.NetworkManager.wifi.share.open"
+#define NM_AUTH_PERMISSION_SETTINGS_MODIFY_SYSTEM "org.freedesktop.NetworkManager.settings.modify.system"
+#define NM_AUTH_PERMISSION_SETTINGS_MODIFY_OWN "org.freedesktop.NetworkManager.settings.modify.own"
+#define NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME "org.freedesktop.NetworkManager.settings.modify.hostname"
+
+static NMClientPermission
+nm_permission_to_client (const char *nm)
+{
+ if (!strcmp (nm, NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK))
+ return NM_CLIENT_PERMISSION_ENABLE_DISABLE_NETWORK;
+ else if (!strcmp (nm, NM_AUTH_PERMISSION_ENABLE_DISABLE_WIFI))
+ return NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIFI;
+ else if (!strcmp (nm, NM_AUTH_PERMISSION_ENABLE_DISABLE_WWAN))
+ return NM_CLIENT_PERMISSION_ENABLE_DISABLE_WWAN;
+ else if (!strcmp (nm, NM_AUTH_PERMISSION_ENABLE_DISABLE_WIMAX))
+ return NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIMAX;
+ else if (!strcmp (nm, NM_AUTH_PERMISSION_SLEEP_WAKE))
+ return NM_CLIENT_PERMISSION_SLEEP_WAKE;
+ else if (!strcmp (nm, NM_AUTH_PERMISSION_NETWORK_CONTROL))
+ return NM_CLIENT_PERMISSION_NETWORK_CONTROL;
+ else if (!strcmp (nm, NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED))
+ return NM_CLIENT_PERMISSION_WIFI_SHARE_PROTECTED;
+ else if (!strcmp (nm, NM_AUTH_PERMISSION_WIFI_SHARE_OPEN))
+ return NM_CLIENT_PERMISSION_WIFI_SHARE_OPEN;
+ else if (!strcmp (nm, NM_AUTH_PERMISSION_SETTINGS_MODIFY_SYSTEM))
+ return NM_CLIENT_PERMISSION_SETTINGS_MODIFY_SYSTEM;
+ else if (!strcmp (nm, NM_AUTH_PERMISSION_SETTINGS_MODIFY_OWN))
+ return NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN;
+ else if (!strcmp (nm, NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME))
+ return NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME;
+
+ return NM_CLIENT_PERMISSION_NONE;
+}
+
+static NMClientPermissionResult
+nm_permission_result_to_client (const char *nm)
+{
+ if (!strcmp (nm, "yes"))
+ return NM_CLIENT_PERMISSION_RESULT_YES;
+ else if (!strcmp (nm, "no"))
+ return NM_CLIENT_PERMISSION_RESULT_NO;
+ else if (!strcmp (nm, "auth"))
+ return NM_CLIENT_PERMISSION_RESULT_AUTH;
+ return NM_CLIENT_PERMISSION_RESULT_UNKNOWN;
+}
+
+static void
+update_permissions (NMManager *self, GVariant *permissions)
+{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ GHashTableIter iter;
+ gpointer key, value;
+ NMClientPermission perm;
+ NMClientPermissionResult perm_result;
+ GList *keys, *keys_iter;
+
+ /* get list of old permissions for change notification */
+ keys = g_hash_table_get_keys (priv->permissions);
+ g_hash_table_remove_all (priv->permissions);
+
+ if (permissions) {
+ GVariantIter viter;
+ const char *pkey, *pvalue;
+
+ /* Process new permissions */
+ g_variant_iter_init (&viter, permissions);
+ while (g_variant_iter_next (&viter, "{&s&s}", &pkey, &pvalue)) {
+ perm = nm_permission_to_client (pkey);
+ perm_result = nm_permission_result_to_client (pvalue);
+ if (perm) {
+ g_hash_table_insert (priv->permissions,
+ GUINT_TO_POINTER (perm),
+ GUINT_TO_POINTER (perm_result));
+
+ /* Remove this permission from the list of previous permissions
+ * we'll be sending NM_CLIENT_PERMISSION_RESULT_UNKNOWN for
+ * in the change signal since it is still a known permission.
+ */
+ keys = g_list_remove (keys, GUINT_TO_POINTER (perm));
+ }
+ }
+ }
+
+ /* Signal changes in all updated permissions */
+ g_hash_table_iter_init (&iter, priv->permissions);
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ g_signal_emit (self, signals[PERMISSION_CHANGED], 0,
+ GPOINTER_TO_UINT (key),
+ GPOINTER_TO_UINT (value));
+ }
+
+ /* And signal changes in all permissions that used to be valid but for
+ * some reason weren't received in the last request (if any).
+ */
+ for (keys_iter = keys; keys_iter; keys_iter = g_list_next (keys_iter)) {
+ g_signal_emit (self, signals[PERMISSION_CHANGED], 0,
+ GPOINTER_TO_UINT (keys_iter->data),
+ NM_CLIENT_PERMISSION_RESULT_UNKNOWN);
+ }
+ g_list_free (keys);
+}
+
+static gboolean
+get_permissions_sync (NMManager *self, GError **error)
+{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ GVariant *permissions;
+
+ if (nmdbus_manager_call_get_permissions_sync (priv->manager_proxy,
+ &permissions,
+ NULL, error)) {
+ update_permissions (self, permissions);
+ g_variant_unref (permissions);
+ return TRUE;
+ } else {
+ if (error && *error)
+ g_dbus_error_strip_remote_error (*error);
+ update_permissions (self, NULL);
+ return FALSE;
+ }
+}
+
+static void
+get_permissions_reply (GObject *object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ NMManager *self;
+ NMManagerPrivate *priv;
+ GVariant *permissions = NULL;
+ GError *error = NULL;
+
+ /* WARNING: this may be called after the manager is disposed, so we can't
+ * look at self/priv until after we've determined that that isn't the case.
+ */
+
+ nmdbus_manager_call_get_permissions_finish (NMDBUS_MANAGER (object),
+ &permissions,
+ result, &error);
+ if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+ /* @self has been disposed. */
+ g_error_free (error);
+ return;
+ }
+
+ self = user_data;
+ priv = NM_MANAGER_GET_PRIVATE (self);
+
+ update_permissions (self, permissions);
+
+ g_clear_pointer (&permissions, g_variant_unref);
+ g_clear_error (&error);
+ g_clear_object (&priv->perm_call_cancellable);
+}
+
+static void
+manager_recheck_permissions (NMDBusManager *proxy, gpointer user_data)
+{
+ NMManager *self = NM_MANAGER (user_data);
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+
+ if (priv->perm_call_cancellable)
+ return;
+
+ priv->perm_call_cancellable = g_cancellable_new ();
+ nmdbus_manager_call_get_permissions (priv->manager_proxy,
+ priv->perm_call_cancellable,
+ get_permissions_reply,
+ self);
+}
+
+const char *
+nm_manager_get_version (NMManager *manager)
+{
+ g_return_val_if_fail (NM_IS_MANAGER (manager), NULL);
+
+ return NM_MANAGER_GET_PRIVATE (manager)->version;
+}
+
+NMState
+nm_manager_get_state (NMManager *manager)
+{
+ g_return_val_if_fail (NM_IS_MANAGER (manager), NM_STATE_UNKNOWN);
+
+ return NM_MANAGER_GET_PRIVATE (manager)->state;
+}
+
+gboolean
+nm_manager_get_startup (NMManager *manager)
+{
+ g_return_val_if_fail (NM_IS_MANAGER (manager), NM_STATE_UNKNOWN);
+
+ return NM_MANAGER_GET_PRIVATE (manager)->startup;
+}
+
+gboolean
+nm_manager_get_nm_running (NMManager *manager)
+{
+ g_return_val_if_fail (NM_IS_MANAGER (manager), FALSE);
+
+ return _nm_object_get_nm_running (NM_OBJECT (manager));
+}
+
+gboolean
+nm_manager_networking_get_enabled (NMManager *manager)
+{
+ g_return_val_if_fail (NM_IS_MANAGER (manager), FALSE);
+
+ return NM_MANAGER_GET_PRIVATE (manager)->networking_enabled;
+}
+
+gboolean
+nm_manager_networking_set_enabled (NMManager *manager, gboolean enable, GError **error)
+{
+ gboolean ret;
+
+ g_return_val_if_fail (NM_IS_MANAGER (manager), FALSE);
+
+ ret = nmdbus_manager_call_enable_sync (NM_MANAGER_GET_PRIVATE (manager)->manager_proxy,
+ enable,
+ NULL, error);
+ if (error && *error)
+ g_dbus_error_strip_remote_error (*error);
+ return ret;
+}
+
+gboolean
+nm_manager_wireless_get_enabled (NMManager *manager)
+{
+ g_return_val_if_fail (NM_IS_MANAGER (manager), FALSE);
+
+ return NM_MANAGER_GET_PRIVATE (manager)->wireless_enabled;
+}
+
+void
+nm_manager_wireless_set_enabled (NMManager *manager, gboolean enabled)
+{
+ g_return_if_fail (NM_IS_MANAGER (manager));
+
+ _nm_object_set_property (NM_OBJECT (manager),
+ NM_DBUS_INTERFACE,
+ "WirelessEnabled",
+ "b", enabled);
+}
+
+gboolean
+nm_manager_wireless_hardware_get_enabled (NMManager *manager)
+{
+ g_return_val_if_fail (NM_IS_MANAGER (manager), FALSE);
+
+ return NM_MANAGER_GET_PRIVATE (manager)->wireless_hw_enabled;
+}
+
+gboolean
+nm_manager_wwan_get_enabled (NMManager *manager)
+{
+ g_return_val_if_fail (NM_IS_MANAGER (manager), FALSE);
+
+ return NM_MANAGER_GET_PRIVATE (manager)->wwan_enabled;
+}
+
+void
+nm_manager_wwan_set_enabled (NMManager *manager, gboolean enabled)
+{
+ g_return_if_fail (NM_IS_MANAGER (manager));
+
+ _nm_object_set_property (NM_OBJECT (manager),
+ NM_DBUS_INTERFACE,
+ "WwanEnabled",
+ "b", enabled);
+}
+
+gboolean
+nm_manager_wwan_hardware_get_enabled (NMManager *manager)
+{
+ g_return_val_if_fail (NM_IS_MANAGER (manager), FALSE);
+
+ return NM_MANAGER_GET_PRIVATE (manager)->wwan_hw_enabled;
+}
+
+gboolean
+nm_manager_wimax_get_enabled (NMManager *manager)
+{
+ g_return_val_if_fail (NM_IS_MANAGER (manager), FALSE);
+
+ return NM_MANAGER_GET_PRIVATE (manager)->wimax_enabled;
+}
+
+void
+nm_manager_wimax_set_enabled (NMManager *manager, gboolean enabled)
+{
+ g_return_if_fail (NM_IS_MANAGER (manager));
+
+ _nm_object_set_property (NM_OBJECT (manager),
+ NM_DBUS_INTERFACE,
+ "WimaxEnabled",
+ "b", enabled);
+}
+
+gboolean
+nm_manager_wimax_hardware_get_enabled (NMManager *manager)
+{
+ g_return_val_if_fail (NM_IS_MANAGER (manager), FALSE);
+
+ return NM_MANAGER_GET_PRIVATE (manager)->wimax_hw_enabled;
+}
+
+gboolean
+nm_manager_get_logging (NMManager *manager, char **level, char **domains, GError **error)
+{
+ gboolean ret;
+
+ g_return_val_if_fail (NM_IS_MANAGER (manager), 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;
+
+ ret = nmdbus_manager_call_get_logging_sync (NM_MANAGER_GET_PRIVATE (manager)->manager_proxy,
+ level, domains,
+ NULL, error);
+ if (error && *error)
+ g_dbus_error_strip_remote_error (*error);
+ return ret;
+}
+
+gboolean
+nm_manager_set_logging (NMManager *manager, const char *level, const char *domains, GError **error)
+{
+ gboolean ret;
+
+ g_return_val_if_fail (NM_IS_MANAGER (manager), FALSE);
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ if (!level && !domains)
+ return TRUE;
+
+ if (!level)
+ level = "";
+ if (!domains)
+ domains = "";
+
+ ret = nmdbus_manager_call_set_logging_sync (NM_MANAGER_GET_PRIVATE (manager)->manager_proxy,
+ level, domains,
+ NULL, error);
+ if (error && *error)
+ g_dbus_error_strip_remote_error (*error);
+ return ret;
+}
+
+NMClientPermissionResult
+nm_manager_get_permission_result (NMManager *manager, NMClientPermission permission)
+{
+ gpointer result;
+
+ g_return_val_if_fail (NM_IS_MANAGER (manager), NM_CLIENT_PERMISSION_RESULT_UNKNOWN);
+
+ result = g_hash_table_lookup (NM_MANAGER_GET_PRIVATE (manager)->permissions,
+ GUINT_TO_POINTER (permission));
+ return GPOINTER_TO_UINT (result);
+}
+
+NMConnectivityState
+nm_manager_get_connectivity (NMManager *manager)
+{
+ g_return_val_if_fail (NM_IS_MANAGER (manager), NM_STATE_UNKNOWN);
+
+ return NM_MANAGER_GET_PRIVATE (manager)->connectivity;
+}
+
+NMConnectivityState
+nm_manager_check_connectivity (NMManager *manager,
+ GCancellable *cancellable,
+ GError **error)
+{
+ NMManagerPrivate *priv;
+ guint32 connectivity;
+
+ g_return_val_if_fail (NM_IS_MANAGER (manager), NM_CONNECTIVITY_UNKNOWN);
+ priv = NM_MANAGER_GET_PRIVATE (manager);
+
+ if (nmdbus_manager_call_check_connectivity_sync (priv->manager_proxy,
+ &connectivity,
+ cancellable, error))
+ return connectivity;
+ else {
+ if (error && *error)
+ g_dbus_error_strip_remote_error (*error);
+ return NM_CONNECTIVITY_UNKNOWN;
+ }
+}
+
+static void
+check_connectivity_cb (GObject *object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *simple = user_data;
+ guint32 connectivity;
+ GError *error = NULL;
+
+ if (nmdbus_manager_call_check_connectivity_finish (NMDBUS_MANAGER (object),
+ &connectivity,
+ result, &error))
+ g_simple_async_result_set_op_res_gssize (simple, connectivity);
+ else {
+ g_dbus_error_strip_remote_error (error);
+ g_simple_async_result_take_error (simple, error);
+ }
+
+ g_simple_async_result_complete (simple);
+ g_object_unref (simple);
+}
+
+void
+nm_manager_check_connectivity_async (NMManager *manager,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ NMManagerPrivate *priv;
+ GSimpleAsyncResult *simple;
+
+ g_return_if_fail (NM_IS_MANAGER (manager));
+ priv = NM_MANAGER_GET_PRIVATE (manager);
+
+ simple = g_simple_async_result_new (G_OBJECT (manager), callback, user_data,
+ nm_manager_check_connectivity_async);
+ nmdbus_manager_call_check_connectivity (priv->manager_proxy,
+ cancellable,
+ check_connectivity_cb, simple);
+}
+
+NMConnectivityState
+nm_manager_check_connectivity_finish (NMManager *manager,
+ GAsyncResult *result,
+ GError **error)
+{
+ GSimpleAsyncResult *simple;
+
+ g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (manager), nm_manager_check_connectivity_async), NM_CONNECTIVITY_UNKNOWN);
+
+ simple = G_SIMPLE_ASYNC_RESULT (result);
+
+ if (g_simple_async_result_propagate_error (simple, error))
+ return NM_CONNECTIVITY_UNKNOWN;
+ return (NMConnectivityState) g_simple_async_result_get_op_res_gssize (simple);
+}
+
+/****************************************************************/
+/* Devices */
+/****************************************************************/
+
+const GPtrArray *
+nm_manager_get_devices (NMManager *manager)
+{
+ g_return_val_if_fail (NM_IS_MANAGER (manager), NULL);
+
+ return NM_MANAGER_GET_PRIVATE (manager)->devices;
+}
+
+NMDevice *
+nm_manager_get_device_by_path (NMManager *manager, const char *object_path)
+{
+ const GPtrArray *devices;
+ int i;
+ NMDevice *device = NULL;
+
+ g_return_val_if_fail (NM_IS_MANAGER (manager), NULL);
+ g_return_val_if_fail (object_path, NULL);
+
+ devices = nm_manager_get_devices (manager);
+ for (i = 0; i < devices->len; i++) {
+ NMDevice *candidate = g_ptr_array_index (devices, i);
+ if (!strcmp (nm_object_get_path (NM_OBJECT (candidate)), object_path)) {
+ device = candidate;
+ break;
+ }
+ }
+
+ return device;
+}
+
+NMDevice *
+nm_manager_get_device_by_iface (NMManager *manager, const char *iface)
+{
+ const GPtrArray *devices;
+ int i;
+ NMDevice *device = NULL;
+
+ g_return_val_if_fail (NM_IS_MANAGER (manager), NULL);
+ g_return_val_if_fail (iface, NULL);
+
+ devices = nm_manager_get_devices (manager);
+ for (i = 0; i < devices->len; i++) {
+ NMDevice *candidate = g_ptr_array_index (devices, i);
+ if (!strcmp (nm_device_get_iface (candidate), iface)) {
+ device = candidate;
+ break;
+ }
+ }
+
+ return device;
+}
+
+/****************************************************************/
+/* Active Connections */
+/****************************************************************/
+
+const GPtrArray *
+nm_manager_get_active_connections (NMManager *manager)
+{
+ g_return_val_if_fail (NM_IS_MANAGER (manager), NULL);
+
+ return NM_MANAGER_GET_PRIVATE (manager)->active_connections;
+}
+
+NMActiveConnection *
+nm_manager_get_primary_connection (NMManager *manager)
+{
+ g_return_val_if_fail (NM_IS_MANAGER (manager), NULL);
+
+ return NM_MANAGER_GET_PRIVATE (manager)->primary_connection;
+}
+
+NMActiveConnection *
+nm_manager_get_activating_connection (NMManager *manager)
+{
+ g_return_val_if_fail (NM_IS_MANAGER (manager), NULL);
+
+ return NM_MANAGER_GET_PRIVATE (manager)->activating_connection;
+}
+
+typedef struct {
+ NMManager *manager;
+ GSimpleAsyncResult *simple;
+ GCancellable *cancellable;
+ gulong cancelled_id;
+ char *active_path;
+ char *new_connection_path;
+} ActivateInfo;
+
+static void active_removed (NMObject *object, NMActiveConnection *active, gpointer user_data);
+
+static void
+activate_info_complete (ActivateInfo *info,
+ NMActiveConnection *active,
+ GError *error)
+{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (info->manager);
+
+ g_signal_handlers_disconnect_by_func (info->manager, G_CALLBACK (active_removed), info);
+ if (active)
+ g_simple_async_result_set_op_res_gpointer (info->simple, g_object_ref (active), g_object_unref);
+ else
+ g_simple_async_result_set_from_error (info->simple, error);
+ g_simple_async_result_complete (info->simple);
+
+ priv->pending_activations = g_slist_remove (priv->pending_activations, info);
+
+ g_free (info->active_path);
+ g_free (info->new_connection_path);
+ g_object_unref (info->simple);
+ if (info->cancellable) {
+ if (info->cancelled_id)
+ g_signal_handler_disconnect (info->cancellable, info->cancelled_id);
+ g_object_unref (info->cancellable);
+ }
+ g_slice_free (ActivateInfo, info);
+}
+
+static NMActiveConnection *
+find_active_connection_by_path (NMManager *self, const char *ac_path)
+{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ int i;
+
+ for (i = 0; i < priv->active_connections->len; i++) {
+ NMActiveConnection *candidate = g_ptr_array_index (priv->active_connections, i);
+ const char *candidate_path = nm_object_get_path (NM_OBJECT (candidate));
+
+ if (g_strcmp0 (ac_path, candidate_path) == 0)
+ return candidate;
+ }
+
+ return NULL;
+}
+
+static void
+recheck_pending_activations (NMManager *self)
+{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ GSList *iter, *next;
+ NMActiveConnection *candidate;
+ const GPtrArray *devices;
+ NMDevice *device;
+
+ /* For each pending activation, look for an active connection that has the
+ * pending activation's object path, where the active connection and its
+ * device have both updated their properties to point to each other, and
+ * call the pending connection's callback.
+ */
+ for (iter = priv->pending_activations; iter; iter = next) {
+ ActivateInfo *info = iter->data;
+
+ next = g_slist_next (iter);
+
+ candidate = find_active_connection_by_path (self, info->active_path);
+ if (!candidate)
+ continue;
+
+ /* Check that the AC and device are both ready */
+ devices = nm_active_connection_get_devices (candidate);
+ if (devices->len == 0)
+ continue;
+
+ if (!NM_IS_VPN_CONNECTION (candidate)) {
+ device = devices->pdata[0];
+ if (nm_device_get_active_connection (device) != candidate)
+ continue;
+ }
+
+ activate_info_complete (info, candidate, NULL);
+ break;
+ }
+}
+
+static void
+activation_cancelled (GCancellable *cancellable,
+ gpointer user_data)
+{
+ ActivateInfo *info = user_data;
+ GError *error = NULL;
+
+ if (!g_cancellable_set_error_if_cancelled (cancellable, &error))
+ return;
+
+ activate_info_complete (info, NULL, error);
+ g_clear_error (&error);
+}
+
+static void
+active_removed (NMObject *object, NMActiveConnection *active, gpointer user_data)
+{
+ ActivateInfo *info = user_data;
+ GError *error = NULL;
+
+ if (strcmp (info->active_path, nm_object_get_path (NM_OBJECT (active))))
+ return;
+
+ error = g_error_new_literal (NM_CLIENT_ERROR,
+ NM_CLIENT_ERROR_FAILED,
+ _("Active connection could not be attached to the device"));
+ activate_info_complete (info, NULL, error);
+ g_clear_error (&error);
+}
+
+static void
+activate_cb (GObject *object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ ActivateInfo *info = user_data;
+ GError *error = NULL;
+
+ if (nmdbus_manager_call_activate_connection_finish (NMDBUS_MANAGER (object),
+ &info->active_path,
+ result, &error)) {
+ if (info->cancellable) {
+ info->cancelled_id = g_signal_connect (info->cancellable, "cancelled",
+ G_CALLBACK (activation_cancelled), info);
+ }
+
+ g_signal_connect (info->manager, "active-connection-removed",
+ G_CALLBACK (active_removed), info);
+
+ recheck_pending_activations (info->manager);
+ } else {
+ g_dbus_error_strip_remote_error (error);
+ activate_info_complete (info, NULL, error);
+ g_clear_error (&error);
+ }
+}
+
+void
+nm_manager_activate_connection_async (NMManager *manager,
+ NMConnection *connection,
+ NMDevice *device,
+ const char *specific_object,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ NMManagerPrivate *priv;
+ ActivateInfo *info;
+
+ g_return_if_fail (NM_IS_MANAGER (manager));
+ if (device)
+ g_return_if_fail (NM_IS_DEVICE (device));
+ if (connection)
+ g_return_if_fail (NM_IS_CONNECTION (connection));
+
+ info = g_slice_new0 (ActivateInfo);
+ info->manager = manager;
+ info->simple = g_simple_async_result_new (G_OBJECT (manager), callback, user_data,
+ nm_manager_activate_connection_async);
+ info->cancellable = cancellable ? g_object_ref (cancellable) : NULL;
+
+ priv = NM_MANAGER_GET_PRIVATE (manager);
+ priv->pending_activations = g_slist_prepend (priv->pending_activations, info);
+
+ nmdbus_manager_call_activate_connection (priv->manager_proxy,
+ connection ? nm_connection_get_path (connection) : "/",
+ device ? nm_object_get_path (NM_OBJECT (device)) : "/",
+ specific_object ? specific_object : "/",
+ cancellable,
+ activate_cb, info);
+}
+
+NMActiveConnection *
+nm_manager_activate_connection_finish (NMManager *manager,
+ GAsyncResult *result,
+ GError **error)
+{
+ GSimpleAsyncResult *simple;
+
+ g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (manager), nm_manager_activate_connection_async), NULL);
+
+ simple = G_SIMPLE_ASYNC_RESULT (result);
+ if (g_simple_async_result_propagate_error (simple, error))
+ return NULL;
+ else
+ return g_object_ref (g_simple_async_result_get_op_res_gpointer (simple));
+}
+
+static void
+add_activate_cb (GObject *object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ ActivateInfo *info = user_data;
+ GError *error = NULL;
+
+ if (nmdbus_manager_call_add_and_activate_connection_finish (NMDBUS_MANAGER (object),
+ NULL,
+ &info->active_path,
+ result, &error)) {
+ if (info->cancellable) {
+ info->cancelled_id = g_signal_connect (info->cancellable, "cancelled",
+ G_CALLBACK (activation_cancelled), info);
+ }
+
+ g_signal_connect (info->manager, "active-connection-removed",
+ G_CALLBACK (active_removed), info);
+
+ recheck_pending_activations (info->manager);
+ } else {
+ g_dbus_error_strip_remote_error (error);
+ activate_info_complete (info, NULL, error);
+ g_clear_error (&error);
+ }
+}
+
+void
+nm_manager_add_and_activate_connection_async (NMManager *manager,
+ NMConnection *partial,
+ NMDevice *device,
+ const char *specific_object,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ NMManagerPrivate *priv;
+ GVariant *dict = NULL;
+ ActivateInfo *info;
+
+ g_return_if_fail (NM_IS_MANAGER (manager));
+ g_return_if_fail (NM_IS_DEVICE (device));
+ if (partial)
+ g_return_if_fail (NM_IS_CONNECTION (partial));
+
+ info = g_slice_new0 (ActivateInfo);
+ info->manager = manager;
+ info->simple = g_simple_async_result_new (G_OBJECT (manager), callback, user_data,
+ nm_manager_add_and_activate_connection_async);
+ info->cancellable = cancellable ? g_object_ref (cancellable) : NULL;
+
+ priv = NM_MANAGER_GET_PRIVATE (manager);
+ priv->pending_activations = g_slist_prepend (priv->pending_activations, info);
+
+ if (partial)
+ dict = nm_connection_to_dbus (partial, NM_CONNECTION_SERIALIZE_ALL);
+ if (!dict)
+ dict = g_variant_new_array (G_VARIANT_TYPE ("{sa{sv}}"), NULL, 0);
+
+ nmdbus_manager_call_add_and_activate_connection (priv->manager_proxy,
+ dict,
+ nm_object_get_path (NM_OBJECT (device)),
+ specific_object ? specific_object : "/",
+ cancellable,
+ add_activate_cb, info);
+}
+
+NMActiveConnection *
+nm_manager_add_and_activate_connection_finish (NMManager *manager,
+ GAsyncResult *result,
+ GError **error)
+{
+ GSimpleAsyncResult *simple;
+
+ g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (manager), nm_manager_add_and_activate_connection_async), NULL);
+
+ simple = G_SIMPLE_ASYNC_RESULT (result);
+ if (g_simple_async_result_propagate_error (simple, error))
+ return NULL;
+ else
+ return g_object_ref (g_simple_async_result_get_op_res_gpointer (simple));
+}
+
+static void
+device_ac_changed (GObject *object, GParamSpec *pspec, gpointer user_data)
+{
+ NMManager *self = user_data;
+
+ recheck_pending_activations (self);
+}
+
+static void
+device_added (NMManager *self, NMDevice *device)
+{
+ g_signal_connect (device, "notify::" NM_DEVICE_ACTIVE_CONNECTION,
+ G_CALLBACK (device_ac_changed), self);
+}
+
+static void
+device_removed (NMManager *self, NMDevice *device)
+{
+ g_signal_handlers_disconnect_by_func (device, G_CALLBACK (device_ac_changed), self);
+}
+
+static void
+ac_devices_changed (GObject *object, GParamSpec *pspec, gpointer user_data)
+{
+ NMManager *self = user_data;
+
+ recheck_pending_activations (self);
+}
+
+static void
+active_connection_added (NMManager *self, NMActiveConnection *ac)
+{
+ g_signal_connect (ac, "notify::" NM_ACTIVE_CONNECTION_DEVICES,
+ G_CALLBACK (ac_devices_changed), self);
+ recheck_pending_activations (self);
+}
+
+static void
+active_connection_removed (NMManager *self, NMActiveConnection *ac)
+{
+ g_signal_handlers_disconnect_by_func (ac, G_CALLBACK (ac_devices_changed), self);
+}
+
+static void
+object_creation_failed (NMObject *object, const char *failed_path)
+{
+ NMManager *self = NM_MANAGER (object);
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ GError *error;
+ GSList *iter;
+
+ /* A newly activated connection failed due to some immediate error
+ * and disappeared from active connection list. Make sure the
+ * callback gets called.
+ */
+ error = g_error_new_literal (NM_CLIENT_ERROR,
+ NM_CLIENT_ERROR_OBJECT_CREATION_FAILED,
+ _("Active connection removed before it was initialized"));
+
+ for (iter = priv->pending_activations; iter; iter = iter->next) {
+ ActivateInfo *info = iter->data;
+
+ if (g_strcmp0 (failed_path, info->active_path) == 0) {
+ activate_info_complete (info, NULL, error);
+ g_error_free (error);
+ return;
+ }
+ }
+}
+
+gboolean
+nm_manager_deactivate_connection (NMManager *manager,
+ NMActiveConnection *active,
+ GCancellable *cancellable,
+ GError **error)
+{
+ const char *path;
+ gboolean ret;
+
+ g_return_val_if_fail (NM_IS_MANAGER (manager), FALSE);
+ g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (active), FALSE);
+
+ path = nm_object_get_path (NM_OBJECT (active));
+ ret = nmdbus_manager_call_deactivate_connection_sync (NM_MANAGER_GET_PRIVATE (manager)->manager_proxy,
+ path,
+ cancellable, error);
+ if (error && *error)
+ g_dbus_error_strip_remote_error (*error);
+ return ret;
+}
+
+static void
+deactivated_cb (GObject *object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *simple = user_data;
+ GError *error = NULL;
+
+ if (nmdbus_manager_call_deactivate_connection_finish (NMDBUS_MANAGER (object),
+ result, &error))
+ g_simple_async_result_set_op_res_gboolean (simple, TRUE);
+ else {
+ g_dbus_error_strip_remote_error (error);
+ g_simple_async_result_take_error (simple, error);
+ }
+ g_simple_async_result_complete (simple);
+ g_object_unref (simple);
+}
+
+void
+nm_manager_deactivate_connection_async (NMManager *manager,
+ NMActiveConnection *active,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ const char *path;
+ GSimpleAsyncResult *simple;
+
+ g_return_if_fail (NM_IS_MANAGER (manager));
+ g_return_if_fail (NM_IS_ACTIVE_CONNECTION (active));
+
+ simple = g_simple_async_result_new (G_OBJECT (manager), callback, user_data,
+ nm_manager_deactivate_connection_async);
+
+ path = nm_object_get_path (NM_OBJECT (active));
+ nmdbus_manager_call_deactivate_connection (NM_MANAGER_GET_PRIVATE (manager)->manager_proxy,
+ path,
+ cancellable,
+ deactivated_cb, simple);
+}
+
+gboolean
+nm_manager_deactivate_connection_finish (NMManager *manager,
+ GAsyncResult *result,
+ GError **error)
+{
+ GSimpleAsyncResult *simple;
+
+ g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (manager), nm_manager_deactivate_connection_async), FALSE);
+
+ simple = G_SIMPLE_ASYNC_RESULT (result);
+ if (g_simple_async_result_propagate_error (simple, error))
+ return FALSE;
+ else
+ return g_simple_async_result_get_op_res_gboolean (simple);
+}
+
+/****************************************************************/
+
+static void
+free_devices (NMManager *manager, gboolean in_dispose)
+{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
+ GPtrArray *devices;
+ NMDevice *device;
+ int i;
+
+ if (!priv->devices)
+ return;
+
+ devices = priv->devices;
+
+ if (in_dispose)
+ priv->devices = NULL;
+ else {
+ priv->devices = g_ptr_array_new ();
+
+ for (i = 0; i < devices->len; i++) {
+ device = devices->pdata[i];
+ g_signal_emit (manager, signals[DEVICE_REMOVED], 0, device);
+ }
+ }
+
+ g_ptr_array_unref (devices);
+}
+
+static void
+free_active_connections (NMManager *manager, gboolean in_dispose)
+{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
+ GPtrArray *active_connections;
+ NMActiveConnection *active_connection;
+ int i;
+
+ if (!priv->active_connections)
+ return;
+
+ active_connections = priv->active_connections;
+ if (in_dispose)
+ priv->active_connections = NULL;
+ else
+ priv->active_connections = g_ptr_array_new ();
+
+ for (i = 0; i < active_connections->len; i++) {
+ active_connection = active_connections->pdata[i];
+ g_signal_emit (manager, signals[ACTIVE_CONNECTION_REMOVED], 0, active_connection);
+ /* Break circular refs */
+ g_object_run_dispose (G_OBJECT (active_connection));
+ }
+ g_ptr_array_unref (active_connections);
+
+ if (!in_dispose)
+ g_object_notify (G_OBJECT (manager), NM_MANAGER_ACTIVE_CONNECTIONS);
+}
+
+static void
+updated_properties (GObject *object, GAsyncResult *result, gpointer user_data)
+{
+ NMManager *manager = NM_MANAGER (user_data);
+ GError *error = NULL;
+
+ if (!_nm_object_reload_properties_finish (NM_OBJECT (object), result, &error)) {
+ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+ g_warning ("%s: error reading NMManager properties: %s", __func__, error->message);
+ g_error_free (error);
+ }
+
+ _nm_object_queue_notify (NM_OBJECT (manager), NM_MANAGER_NM_RUNNING);
+}
+
+static void
+nm_running_changed_cb (GObject *object,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ NMManager *manager = NM_MANAGER (object);
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
+
+ if (!nm_manager_get_nm_running (manager)) {
+ NM_UTILS_CLEAR_CANCELLABLE (priv->props_cancellable);
+
+ priv->state = NM_STATE_UNKNOWN;
+ priv->startup = FALSE;
+ _nm_object_queue_notify (NM_OBJECT (manager), NM_MANAGER_NM_RUNNING);
+ _nm_object_suppress_property_updates (NM_OBJECT (manager), TRUE);
+ poke_wireless_devices_with_rf_status (manager);
+ free_devices (manager, FALSE);
+ free_active_connections (manager, FALSE);
+ update_permissions (manager, NULL);
+ priv->wireless_enabled = FALSE;
+ priv->wireless_hw_enabled = FALSE;
+ priv->wwan_enabled = FALSE;
+ priv->wwan_hw_enabled = FALSE;
+ priv->wimax_enabled = FALSE;
+ priv->wimax_hw_enabled = FALSE;
+ g_free (priv->version);
+ priv->version = NULL;
+
+ /* Clear object cache to ensure bad refcounting by managers doesn't
+ * keep objects in the cache.
+ */
+ _nm_object_cache_clear ();
+ } else {
+ _nm_object_suppress_property_updates (NM_OBJECT (manager), FALSE);
+
+ NM_UTILS_CLEAR_CANCELLABLE (priv->props_cancellable);
+ priv->props_cancellable = g_cancellable_new ();
+ _nm_object_reload_properties_async (NM_OBJECT (manager), priv->props_cancellable, updated_properties, manager);
+
+ manager_recheck_permissions (priv->manager_proxy, manager);
+ }
+}
+
+/****************************************************************/
+
+static void
+constructed (GObject *object)
+{
+ G_OBJECT_CLASS (nm_manager_parent_class)->constructed (object);
+
+ g_signal_connect (object, "notify::" NM_OBJECT_NM_RUNNING,
+ G_CALLBACK (nm_running_changed_cb), NULL);
+
+ g_signal_connect (object, "notify::" NM_MANAGER_WIRELESS_ENABLED,
+ G_CALLBACK (wireless_enabled_cb), NULL);
+}
+
+static gboolean
+init_sync (GInitable *initable, GCancellable *cancellable, GError **error)
+{
+ NMManager *manager = NM_MANAGER (initable);
+
+ if (!nm_manager_parent_initable_iface->init (initable, cancellable, error))
+ return FALSE;
+
+ if ( nm_manager_get_nm_running (manager)
+ && !get_permissions_sync (manager, error))
+ return FALSE;
+
+ return TRUE;
+}
+
+typedef struct {
+ NMManager *manager;
+ GCancellable *cancellable;
+ GSimpleAsyncResult *result;
+} NMManagerInitData;
+
+static void
+init_async_complete (NMManagerInitData *init_data)
+{
+ g_simple_async_result_complete (init_data->result);
+ g_object_unref (init_data->result);
+ g_clear_object (&init_data->cancellable);
+ g_slice_free (NMManagerInitData, init_data);
+}
+
+static void
+init_async_got_permissions (GObject *object, GAsyncResult *result, gpointer user_data)
+{
+ NMManagerInitData *init_data = user_data;
+ GVariant *permissions;
+
+ if (nmdbus_manager_call_get_permissions_finish (NMDBUS_MANAGER (object),
+ &permissions,
+ result, NULL)) {
+ update_permissions (init_data->manager, permissions);
+ g_variant_unref (permissions);
+ } else
+ update_permissions (init_data->manager, NULL);
+
+ init_async_complete (init_data);
+}
+
+static void
+init_async_parent_inited (GObject *source, GAsyncResult *result, gpointer user_data)
+{
+ NMManagerInitData *init_data = user_data;
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (init_data->manager);
+ GError *error = NULL;
+
+ if (!nm_manager_parent_async_initable_iface->init_finish (G_ASYNC_INITABLE (source), result, &error)) {
+ g_simple_async_result_take_error (init_data->result, error);
+ init_async_complete (init_data);
+ return;
+ }
+
+ if (!nm_manager_get_nm_running (init_data->manager)) {
+ init_async_complete (init_data);
+ return;
+ }
+
+ nmdbus_manager_call_get_permissions (priv->manager_proxy,
+ init_data->cancellable,
+ init_async_got_permissions, init_data);
+}
+
+static void
+init_async (GAsyncInitable *initable, int io_priority,
+ GCancellable *cancellable, GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ NMManagerInitData *init_data;
+
+ init_data = g_slice_new0 (NMManagerInitData);
+ init_data->manager = NM_MANAGER (initable);
+ init_data->cancellable = cancellable ? g_object_ref (cancellable) : NULL;
+ init_data->result = g_simple_async_result_new (G_OBJECT (initable), callback,
+ user_data, init_async);
+ g_simple_async_result_set_op_res_gboolean (init_data->result, TRUE);
+
+ nm_manager_parent_async_initable_iface->init_async (initable, io_priority, cancellable,
+ init_async_parent_inited, init_data);
+}
+
+static gboolean
+init_finish (GAsyncInitable *initable, GAsyncResult *result, GError **error)
+{
+ GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
+
+ if (g_simple_async_result_propagate_error (simple, error))
+ return FALSE;
+ else
+ return TRUE;
+}
+
+static void
+dispose (GObject *object)
+{
+ NMManager *manager = NM_MANAGER (object);
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (object);
+
+ if (priv->perm_call_cancellable) {
+ g_cancellable_cancel (priv->perm_call_cancellable);
+ g_clear_object (&priv->perm_call_cancellable);
+ }
+
+ free_devices (manager, TRUE);
+ free_active_connections (manager, TRUE);
+ g_clear_object (&priv->primary_connection);
+ g_clear_object (&priv->activating_connection);
+
+ /* Each activation should hold a ref on @manager, so if we're being disposed,
+ * there shouldn't be any pending.
+ */
+ g_warn_if_fail (priv->pending_activations == NULL);
+
+ g_hash_table_destroy (priv->permissions);
+ priv->permissions = NULL;
+
+ G_OBJECT_CLASS (nm_manager_parent_class)->dispose (object);
+}
+
+static void
+finalize (GObject *object)
+{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (object);
+
+ g_free (priv->version);
+
+ G_OBJECT_CLASS (nm_manager_parent_class)->finalize (object);
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (object);
+ gboolean b;
+
+ switch (prop_id) {
+ case PROP_NETWORKING_ENABLED:
+ b = g_value_get_boolean (value);
+ if (priv->networking_enabled != b) {
+ nm_manager_networking_set_enabled (NM_MANAGER (object), b, NULL);
+ /* Let the property value flip when we get the change signal from NM */
+ }
+ break;
+ case PROP_WIRELESS_ENABLED:
+ b = g_value_get_boolean (value);
+ if (priv->wireless_enabled != b) {
+ nm_manager_wireless_set_enabled (NM_MANAGER (object), b);
+ /* Let the property value flip when we get the change signal from NM */
+ }
+ break;
+ case PROP_WWAN_ENABLED:
+ b = g_value_get_boolean (value);
+ if (priv->wwan_enabled != b) {
+ nm_manager_wwan_set_enabled (NM_MANAGER (object), b);
+ /* Let the property value flip when we get the change signal from NM */
+ }
+ break;
+ case PROP_WIMAX_ENABLED:
+ b = g_value_get_boolean (value);
+ if (priv->wimax_enabled != b) {
+ nm_manager_wimax_set_enabled (NM_MANAGER (object), b);
+ /* Let the property value flip when we get the change signal from NM */
+ }
+ 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)
+{
+ NMManager *self = NM_MANAGER (object);
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+
+ switch (prop_id) {
+ case PROP_VERSION:
+ g_value_set_string (value, nm_manager_get_version (self));
+ break;
+ case PROP_STATE:
+ g_value_set_enum (value, nm_manager_get_state (self));
+ break;
+ case PROP_STARTUP:
+ g_value_set_boolean (value, nm_manager_get_startup (self));
+ break;
+ case PROP_NM_RUNNING:
+ g_value_set_boolean (value, nm_manager_get_nm_running (self));
+ break;
+ case PROP_NETWORKING_ENABLED:
+ g_value_set_boolean (value, nm_manager_networking_get_enabled (self));
+ break;
+ case PROP_WIRELESS_ENABLED:
+ g_value_set_boolean (value, priv->wireless_enabled);
+ break;
+ case PROP_WIRELESS_HARDWARE_ENABLED:
+ g_value_set_boolean (value, priv->wireless_hw_enabled);
+ break;
+ case PROP_WWAN_ENABLED:
+ g_value_set_boolean (value, priv->wwan_enabled);
+ break;
+ case PROP_WWAN_HARDWARE_ENABLED:
+ g_value_set_boolean (value, priv->wwan_hw_enabled);
+ break;
+ case PROP_WIMAX_ENABLED:
+ g_value_set_boolean (value, priv->wimax_enabled);
+ break;
+ case PROP_WIMAX_HARDWARE_ENABLED:
+ g_value_set_boolean (value, priv->wimax_hw_enabled);
+ break;
+ case PROP_ACTIVE_CONNECTIONS:
+ g_value_take_boxed (value, _nm_utils_copy_object_array (nm_manager_get_active_connections (self)));
+ break;
+ case PROP_CONNECTIVITY:
+ g_value_set_enum (value, priv->connectivity);
+ break;
+ case PROP_PRIMARY_CONNECTION:
+ g_value_set_object (value, priv->primary_connection);
+ break;
+ case PROP_ACTIVATING_CONNECTION:
+ g_value_set_object (value, priv->activating_connection);
+ break;
+ case PROP_DEVICES:
+ g_value_take_boxed (value, _nm_utils_copy_object_array (nm_manager_get_devices (self)));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_manager_class_init (NMManagerClass *manager_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (manager_class);
+ NMObjectClass *nm_object_class = NM_OBJECT_CLASS (manager_class);
+
+ g_type_class_add_private (manager_class, sizeof (NMManagerPrivate));
+
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE);
+ _nm_dbus_register_proxy_type (NM_DBUS_INTERFACE, NMDBUS_TYPE_MANAGER_PROXY);
+
+ /* virtual methods */
+ object_class->constructed = constructed;
+ object_class->set_property = set_property;
+ object_class->get_property = get_property;
+ object_class->dispose = dispose;
+ object_class->finalize = finalize;
+
+ nm_object_class->init_dbus = init_dbus;
+ nm_object_class->object_creation_failed = object_creation_failed;
+
+ manager_class->device_added = device_added;
+ manager_class->device_removed = device_removed;
+ manager_class->active_connection_added = active_connection_added;
+ manager_class->active_connection_removed = active_connection_removed;
+
+ /* properties */
+
+ g_object_class_install_property
+ (object_class, PROP_VERSION,
+ g_param_spec_string (NM_MANAGER_VERSION, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property
+ (object_class, PROP_STATE,
+ g_param_spec_enum (NM_CLIENT_STATE, "", "",
+ NM_TYPE_STATE,
+ NM_STATE_UNKNOWN,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property
+ (object_class, PROP_STARTUP,
+ g_param_spec_boolean (NM_MANAGER_STARTUP, "", "",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property
+ (object_class, PROP_NM_RUNNING,
+ g_param_spec_boolean (NM_MANAGER_NM_RUNNING, "", "",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property
+ (object_class, PROP_NETWORKING_ENABLED,
+ g_param_spec_boolean (NM_MANAGER_NETWORKING_ENABLED, "", "",
+ TRUE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property
+ (object_class, PROP_WIRELESS_ENABLED,
+ g_param_spec_boolean (NM_MANAGER_WIRELESS_ENABLED, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property
+ (object_class, PROP_WIRELESS_HARDWARE_ENABLED,
+ g_param_spec_boolean (NM_MANAGER_WIRELESS_HARDWARE_ENABLED, "", "",
+ TRUE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property
+ (object_class, PROP_WWAN_ENABLED,
+ g_param_spec_boolean (NM_MANAGER_WWAN_ENABLED, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property
+ (object_class, PROP_WWAN_HARDWARE_ENABLED,
+ g_param_spec_boolean (NM_MANAGER_WWAN_HARDWARE_ENABLED, "", "",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property
+ (object_class, PROP_WIMAX_ENABLED,
+ g_param_spec_boolean (NM_MANAGER_WIMAX_ENABLED, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property
+ (object_class, PROP_WIMAX_HARDWARE_ENABLED,
+ g_param_spec_boolean (NM_MANAGER_WIMAX_HARDWARE_ENABLED, "", "",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property
+ (object_class, PROP_ACTIVE_CONNECTIONS,
+ g_param_spec_boxed (NM_MANAGER_ACTIVE_CONNECTIONS, "", "",
+ G_TYPE_PTR_ARRAY,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property
+ (object_class, PROP_CONNECTIVITY,
+ g_param_spec_enum (NM_CLIENT_CONNECTIVITY, "", "",
+ NM_TYPE_CONNECTIVITY_STATE,
+ NM_CONNECTIVITY_UNKNOWN,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property
+ (object_class, PROP_PRIMARY_CONNECTION,
+ g_param_spec_object (NM_MANAGER_PRIMARY_CONNECTION, "", "",
+ NM_TYPE_ACTIVE_CONNECTION,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property
+ (object_class, PROP_ACTIVATING_CONNECTION,
+ g_param_spec_object (NM_MANAGER_ACTIVATING_CONNECTION, "", "",
+ NM_TYPE_ACTIVE_CONNECTION,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property
+ (object_class, PROP_DEVICES,
+ g_param_spec_boxed (NM_MANAGER_DEVICES, "", "",
+ G_TYPE_PTR_ARRAY,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /* signals */
+
+ signals[DEVICE_ADDED] =
+ g_signal_new ("device-added",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMManagerClass, device_added),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 1,
+ G_TYPE_OBJECT);
+ signals[DEVICE_REMOVED] =
+ g_signal_new ("device-removed",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMManagerClass, device_removed),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 1,
+ G_TYPE_OBJECT);
+ signals[ACTIVE_CONNECTION_ADDED] =
+ g_signal_new ("active-connection-added",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMManagerClass, active_connection_added),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 1,
+ G_TYPE_OBJECT);
+ signals[ACTIVE_CONNECTION_REMOVED] =
+ g_signal_new ("active-connection-removed",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMManagerClass, active_connection_removed),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 1,
+ G_TYPE_OBJECT);
+ signals[PERMISSION_CHANGED] =
+ g_signal_new ("permission-changed",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ 0, NULL, NULL, NULL,
+ G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_UINT);
+}
+
+static void
+nm_manager_initable_iface_init (GInitableIface *iface)
+{
+ nm_manager_parent_initable_iface = g_type_interface_peek_parent (iface);
+
+ iface->init = init_sync;
+}
+
+static void
+nm_manager_async_initable_iface_init (GAsyncInitableIface *iface)
+{
+ nm_manager_parent_async_initable_iface = g_type_interface_peek_parent (iface);
+
+ iface->init_async = init_async;
+ iface->init_finish = init_finish;
+}
diff --git a/libnm/nm-manager.h b/libnm/nm-manager.h
new file mode 100644
index 000000000..ca9f7dd60
--- /dev/null
+++ b/libnm/nm-manager.h
@@ -0,0 +1,170 @@
+/* -*- 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 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2014 Red Hat, Inc.
+ */
+
+#ifndef __NM_MANAGER_H__
+#define __NM_MANAGER_H__
+
+#include <nm-object.h>
+#include <nm-client.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_MANAGER (nm_manager_get_type ())
+#define NM_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_MANAGER, NMManager))
+#define NM_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_MANAGER, NMManagerClass))
+#define NM_IS_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_MANAGER))
+#define NM_IS_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_MANAGER))
+#define NM_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_MANAGER, NMManagerClass))
+
+#define NM_MANAGER_VERSION "version"
+#define NM_MANAGER_STATE "state"
+#define NM_MANAGER_STARTUP "startup"
+#define NM_MANAGER_NM_RUNNING "nm-running"
+#define NM_MANAGER_NETWORKING_ENABLED "networking-enabled"
+#define NM_MANAGER_WIRELESS_ENABLED "wireless-enabled"
+#define NM_MANAGER_WIRELESS_HARDWARE_ENABLED "wireless-hardware-enabled"
+#define NM_MANAGER_WWAN_ENABLED "wwan-enabled"
+#define NM_MANAGER_WWAN_HARDWARE_ENABLED "wwan-hardware-enabled"
+#define NM_MANAGER_WIMAX_ENABLED "wimax-enabled"
+#define NM_MANAGER_WIMAX_HARDWARE_ENABLED "wimax-hardware-enabled"
+#define NM_MANAGER_ACTIVE_CONNECTIONS "active-connections"
+#define NM_MANAGER_CONNECTIVITY "connectivity"
+#define NM_MANAGER_PRIMARY_CONNECTION "primary-connection"
+#define NM_MANAGER_ACTIVATING_CONNECTION "activating-connection"
+#define NM_MANAGER_DEVICES "devices"
+
+typedef struct {
+ NMObject parent;
+} NMManager;
+
+typedef struct {
+ NMObjectClass parent;
+
+ /* Signals */
+ void (*device_added) (NMManager *manager, NMDevice *device);
+ void (*device_removed) (NMManager *manager, NMDevice *device);
+ void (*active_connection_added) (NMManager *manager, NMActiveConnection *ac);
+ void (*active_connection_removed) (NMManager *manager, NMActiveConnection *ac);
+ void (*permission_changed) (NMManager *manager,
+ NMClientPermission permission,
+ NMClientPermissionResult result);
+} NMManagerClass;
+
+GType nm_manager_get_type (void);
+
+const char *nm_manager_get_version (NMManager *manager);
+NMState nm_manager_get_state (NMManager *manager);
+gboolean nm_manager_get_startup (NMManager *manager);
+gboolean nm_manager_get_nm_running (NMManager *manager);
+
+gboolean nm_manager_networking_get_enabled (NMManager *manager);
+gboolean nm_manager_networking_set_enabled (NMManager *manager,
+ gboolean enabled,
+ GError **error);
+
+gboolean nm_manager_wireless_get_enabled (NMManager *manager);
+void nm_manager_wireless_set_enabled (NMManager *manager, gboolean enabled);
+gboolean nm_manager_wireless_hardware_get_enabled (NMManager *manager);
+
+gboolean nm_manager_wwan_get_enabled (NMManager *manager);
+void nm_manager_wwan_set_enabled (NMManager *manager, gboolean enabled);
+gboolean nm_manager_wwan_hardware_get_enabled (NMManager *manager);
+
+gboolean nm_manager_wimax_get_enabled (NMManager *manager);
+void nm_manager_wimax_set_enabled (NMManager *manager, gboolean enabled);
+gboolean nm_manager_wimax_hardware_get_enabled (NMManager *manager);
+
+gboolean nm_manager_get_logging (NMManager *manager,
+ char **level,
+ char **domains,
+ GError **error);
+gboolean nm_manager_set_logging (NMManager *manager,
+ const char *level,
+ const char *domains,
+ GError **error);
+
+NMClientPermissionResult nm_manager_get_permission_result (NMManager *manager,
+ NMClientPermission permission);
+
+NMConnectivityState nm_manager_get_connectivity (NMManager *manager);
+
+NMConnectivityState nm_manager_check_connectivity (NMManager *manager,
+ GCancellable *cancellable,
+ GError **error);
+void nm_manager_check_connectivity_async (NMManager *manager,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+NMConnectivityState nm_manager_check_connectivity_finish (NMManager *manager,
+ GAsyncResult *result,
+ GError **error);
+
+/* Devices */
+
+const GPtrArray *nm_manager_get_devices (NMManager *manager);
+NMDevice *nm_manager_get_device_by_path (NMManager *manager, const char *object_path);
+NMDevice *nm_manager_get_device_by_iface (NMManager *manager, const char *iface);
+
+/* Active Connections */
+
+const GPtrArray *nm_manager_get_active_connections (NMManager *manager);
+
+NMActiveConnection *nm_manager_get_primary_connection (NMManager *manager);
+NMActiveConnection *nm_manager_get_activating_connection (NMManager *manager);
+
+void nm_manager_activate_connection_async (NMManager *manager,
+ NMConnection *connection,
+ NMDevice *device,
+ const char *specific_object,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+NMActiveConnection *nm_manager_activate_connection_finish (NMManager *manager,
+ GAsyncResult *result,
+ GError **error);
+
+void nm_manager_add_and_activate_connection_async (NMManager *manager,
+ NMConnection *partial,
+ NMDevice *device,
+ const char *specific_object,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+NMActiveConnection *nm_manager_add_and_activate_connection_finish (NMManager *manager,
+ GAsyncResult *result,
+ GError **error);
+
+gboolean nm_manager_deactivate_connection (NMManager *manager,
+ NMActiveConnection *active,
+ GCancellable *cancellable,
+ GError **error);
+void nm_manager_deactivate_connection_async (NMManager *manager,
+ NMActiveConnection *active,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+gboolean nm_manager_deactivate_connection_finish (NMManager *manager,
+ GAsyncResult *result,
+ GError **error);
+
+G_END_DECLS
+
+#endif /* __NM_MANAGER_H__ */
diff --git a/libnm/nm-object-cache.c b/libnm/nm-object-cache.c
new file mode 100644
index 000000000..752c606a9
--- /dev/null
+++ b/libnm/nm-object-cache.c
@@ -0,0 +1,90 @@
+/* -*- 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 2008 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <glib.h>
+#include "nm-object-cache.h"
+#include "nm-object.h"
+
+static GHashTable *cache = NULL;
+
+static void
+_init_cache (void)
+{
+ if (G_UNLIKELY (cache == NULL))
+ cache = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+}
+
+static void
+_nm_object_cache_remove_by_path (char *path)
+{
+ _init_cache ();
+ g_hash_table_remove (cache, path);
+ g_free (path);
+}
+
+void
+_nm_object_cache_add (NMObject *object)
+{
+ char *path;
+
+ _init_cache ();
+ path = g_strdup (nm_object_get_path (object));
+ g_hash_table_insert (cache, path, object);
+ g_object_set_data_full (G_OBJECT (object), "nm-object-cache-tag",
+ g_strdup (path), (GDestroyNotify) _nm_object_cache_remove_by_path);
+}
+
+NMObject *
+_nm_object_cache_get (const char *path)
+{
+ NMObject *object;
+
+ _init_cache ();
+ object = g_hash_table_lookup (cache, path);
+ return object ? g_object_ref (object) : NULL;
+}
+
+void
+_nm_object_cache_clear (void)
+{
+ GHashTableIter iter;
+ GObject *obj;
+ const char *path;
+ char *foo;
+
+ if (!cache)
+ return;
+
+ g_hash_table_iter_init (&iter, cache);
+ while (g_hash_table_iter_next (&iter, (gpointer) &path, (gpointer) &obj)) {
+ /* Remove the callback so that if the object isn't yet released
+ * by a client, when it does finally get unrefed, it won't trigger
+ * the cache removal for a new object with the same path as the
+ * one being released.
+ */
+ foo = g_object_steal_data (obj, "nm-object-cache-tag");
+ g_free (foo);
+
+ g_hash_table_iter_remove (&iter);
+ }
+}
diff --git a/libnm/nm-object-cache.h b/libnm/nm-object-cache.h
new file mode 100644
index 000000000..ebadbaa8d
--- /dev/null
+++ b/libnm/nm-object-cache.h
@@ -0,0 +1,37 @@
+/* -*- 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 2008 Red Hat, Inc.
+ */
+
+#ifndef __NM_OBJECT_CACHE_H__
+#define __NM_OBJECT_CACHE_H__
+
+#include <glib.h>
+#include <glib-object.h>
+#include "nm-object.h"
+
+G_BEGIN_DECLS
+
+/* Returns referenced object from the cache */
+NMObject *_nm_object_cache_get (const char *path);
+void _nm_object_cache_add (NMObject *object);
+void _nm_object_cache_clear (void);
+
+G_END_DECLS
+
+#endif /* __NM_OBJECT_CACHE_H__ */
diff --git a/libnm/nm-object-private.h b/libnm/nm-object-private.h
new file mode 100644
index 000000000..0b13cbb6e
--- /dev/null
+++ b/libnm/nm-object-private.h
@@ -0,0 +1,83 @@
+/* -*- 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 2008 - 2011 Red Hat, Inc.
+ */
+
+#ifndef __NM_OBJECT_PRIVATE_H__
+#define __NM_OBJECT_PRIVATE_H__
+
+#include <gio/gio.h>
+#include "nm-object.h"
+
+typedef gboolean (*PropertyMarshalFunc) (NMObject *, GParamSpec *, GVariant *, gpointer);
+
+typedef GObject * (*NMObjectCreatorFunc) (GDBusConnection *, const char *);
+
+typedef struct {
+ const char *name;
+ gpointer field;
+ PropertyMarshalFunc func;
+ GType object_type;
+ const char *signal_prefix;
+} NMPropertiesInfo;
+
+void _nm_object_register_properties (NMObject *object,
+ const char *interface,
+ const NMPropertiesInfo *info);
+
+void _nm_object_reload_properties_async (NMObject *object,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+gboolean _nm_object_reload_properties_finish (NMObject *object,
+ GAsyncResult *result,
+ GError **error);
+
+void _nm_object_queue_notify (NMObject *object, const char *property);
+
+void _nm_object_suppress_property_updates (NMObject *object, gboolean suppress);
+
+/* DBus property accessors */
+
+void _nm_object_reload_property (NMObject *object,
+ const char *interface,
+ const char *prop_name);
+
+void _nm_object_set_property (NMObject *object,
+ const char *interface,
+ const char *prop_name,
+ const char *format_string,
+ ...);
+
+/* object demarshalling support */
+typedef GType (*NMObjectDecideTypeFunc) (GVariant *);
+
+void _nm_object_register_type_func (GType base_type,
+ NMObjectDecideTypeFunc type_func,
+ const char *interface,
+ const char *property);
+
+#define NM_OBJECT_NM_RUNNING "nm-running-internal"
+gboolean _nm_object_get_nm_running (NMObject *self);
+
+void _nm_object_class_add_interface (NMObjectClass *object_class,
+ const char *interface);
+GDBusProxy *_nm_object_get_proxy (NMObject *object,
+ const char *interface);
+
+#endif /* __NM_OBJECT_PRIVATE_H__ */
diff --git a/libnm/nm-object.c b/libnm/nm-object.c
new file mode 100644
index 000000000..391166b29
--- /dev/null
+++ b/libnm/nm-object.c
@@ -0,0 +1,1761 @@
+/* -*- 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 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2012 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <gio/gio.h>
+#include <glib/gi18n-lib.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <nm-utils.h>
+#include "nm-dbus-interface.h"
+#include "nm-object.h"
+#include "nm-object-cache.h"
+#include "nm-object-private.h"
+#include "nm-glib-compat.h"
+#include "nm-dbus-helpers.h"
+#include "nm-client.h"
+
+static gboolean debug = FALSE;
+#define dbgmsg(f,...) if (G_UNLIKELY (debug)) { g_message (f, ## __VA_ARGS__ ); }
+
+static void nm_object_initable_iface_init (GInitableIface *iface);
+static void nm_object_async_initable_iface_init (GAsyncInitableIface *iface);
+
+typedef struct {
+ NMObjectDecideTypeFunc type_func;
+ char *interface;
+ char *property;
+} NMObjectTypeFuncData;
+
+static GHashTable *type_funcs;
+
+typedef struct {
+ GSList *interfaces;
+} NMObjectClassPrivate;
+
+#define NM_OBJECT_CLASS_GET_PRIVATE(k) (G_TYPE_CLASS_GET_PRIVATE ((k), NM_TYPE_OBJECT, NMObjectClassPrivate))
+
+G_DEFINE_ABSTRACT_TYPE_WITH_CODE (NMObject, nm_object, G_TYPE_OBJECT,
+ type_funcs = g_hash_table_new (NULL, NULL);
+ g_type_add_class_private (g_define_type_id, sizeof (NMObjectClassPrivate));
+ G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, nm_object_initable_iface_init);
+ G_IMPLEMENT_INTERFACE (G_TYPE_ASYNC_INITABLE, nm_object_async_initable_iface_init);
+ )
+
+#define NM_OBJECT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_OBJECT, NMObjectPrivate))
+
+typedef struct {
+ PropertyMarshalFunc func;
+ GType object_type;
+ gpointer field;
+ const char *signal_prefix;
+} PropertyInfo;
+
+static void reload_complete (NMObject *object, gboolean emit_now);
+static gboolean demarshal_generic (NMObject *object, GParamSpec *pspec, GVariant *value, gpointer field);
+
+typedef struct {
+ GDBusConnection *connection;
+ gboolean nm_running;
+
+ char *path;
+ GHashTable *proxies;
+ GDBusProxy *properties_proxy;
+ GSList *property_tables;
+ NMObject *parent;
+ gboolean suppress_property_updates;
+
+ GSList *notify_items;
+ guint32 notify_id;
+
+ GSList *reload_results;
+ guint reload_remaining;
+ GError *reload_error;
+} NMObjectPrivate;
+
+enum {
+ PROP_0,
+ PROP_PATH,
+ PROP_DBUS_CONNECTION,
+ PROP_NM_RUNNING,
+
+ LAST_PROP
+};
+
+/**
+ * _nm_object_class_add_interface:
+ * @object_class: an #NMObjectClass
+ * @interface: a D-Bus interface name
+ *
+ * Registers that @object_class implements @interface. A proxy for that
+ * interface will automatically be created at construction time, and can
+ * be retrieved with _nm_object_get_proxy().
+ */
+void
+_nm_object_class_add_interface (NMObjectClass *object_class,
+ const char *interface)
+{
+ NMObjectClassPrivate *cpriv;
+
+ g_return_if_fail (NM_IS_OBJECT_CLASS (object_class));
+ g_return_if_fail (interface);
+
+ cpriv = NM_OBJECT_CLASS_GET_PRIVATE (object_class);
+
+ g_return_if_fail (g_slist_find_custom (cpriv->interfaces, interface, (GCompareFunc) g_strcmp0) == NULL);
+
+ cpriv->interfaces = g_slist_prepend (cpriv->interfaces, g_strdup (interface));
+}
+
+/**
+ * nm_object_get_path:
+ * @object: a #NMObject
+ *
+ * Gets the DBus path of the #NMObject.
+ *
+ * Returns: the object's path. This is the internal string used by the
+ * device, and must not be modified.
+ **/
+const char *
+nm_object_get_path (NMObject *object)
+{
+ g_return_val_if_fail (NM_IS_OBJECT (object), NULL);
+
+ return NM_OBJECT_GET_PRIVATE (object)->path;
+}
+
+/**
+ * _nm_object_get_proxy:
+ * @object: an #NMObject
+ * @interface: a D-Bus interface implemented by @object
+ *
+ * Gets the D-Bus proxy for @interface on @object.
+ *
+ * Returns: (transfer none): a D-Bus proxy
+ */
+GDBusProxy *
+_nm_object_get_proxy (NMObject *object,
+ const char *interface)
+{
+ GDBusProxy *proxy;
+
+ g_return_val_if_fail (NM_IS_OBJECT (object), NULL);
+
+ proxy = g_hash_table_lookup (NM_OBJECT_GET_PRIVATE (object)->proxies, interface);
+ g_return_val_if_fail (proxy != NULL, NULL);
+ return proxy;
+}
+
+typedef enum {
+ NOTIFY_SIGNAL_PENDING_NONE,
+ NOTIFY_SIGNAL_PENDING_ADDED,
+ NOTIFY_SIGNAL_PENDING_REMOVED,
+ NOTIFY_SIGNAL_PENDING_ADDED_REMOVED,
+} NotifySignalPending;
+
+typedef struct {
+ const char *property;
+ const char *signal_prefix;
+ NotifySignalPending pending;
+ NMObject *changed;
+} NotifyItem;
+
+static void
+notify_item_free (NotifyItem *item)
+{
+ g_clear_object (&item->changed);
+ g_slice_free (NotifyItem, item);
+}
+
+static gboolean
+deferred_notify_cb (gpointer data)
+{
+ NMObject *object = NM_OBJECT (data);
+ NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object);
+ NMObjectClass *object_class = NM_OBJECT_GET_CLASS (object);
+ GSList *props, *iter;
+
+ priv->notify_id = 0;
+
+ /* Wait until all reloads are done before notifying */
+ if (priv->reload_remaining)
+ return G_SOURCE_REMOVE;
+
+ /* Clear priv->notify_items early so that an NMObject subclass that
+ * listens to property changes can queue up other property changes
+ * during the g_object_notify() call separately from the property
+ * list we're iterating.
+ */
+ props = g_slist_reverse (priv->notify_items);
+ priv->notify_items = NULL;
+
+ g_object_ref (object);
+
+ /* Emit added/removed signals first since some of our internal objects
+ * use the added/removed signals for new object processing.
+ */
+ for (iter = props; iter; iter = g_slist_next (iter)) {
+ NotifyItem *item = iter->data;
+ char buf[50];
+ gint ret = 0;
+
+ switch (item->pending) {
+ case NOTIFY_SIGNAL_PENDING_ADDED:
+ ret = g_snprintf (buf, sizeof (buf), "%s-added", item->signal_prefix);
+ break;
+ case NOTIFY_SIGNAL_PENDING_REMOVED:
+ ret = g_snprintf (buf, sizeof (buf), "%s-removed", item->signal_prefix);
+ break;
+ case NOTIFY_SIGNAL_PENDING_ADDED_REMOVED:
+ if (object_class->object_creation_failed)
+ object_class->object_creation_failed (object, nm_object_get_path (item->changed));
+ break;
+ case NOTIFY_SIGNAL_PENDING_NONE:
+ default:
+ break;
+ }
+ if (ret > 0) {
+ g_assert (ret < sizeof (buf));
+ g_signal_emit_by_name (object, buf, item->changed);
+ }
+ }
+
+ /* Emit property change notifications second */
+ for (iter = props; iter; iter = g_slist_next (iter)) {
+ NotifyItem *item = iter->data;
+
+ if (item->property)
+ g_object_notify (G_OBJECT (object), item->property);
+ }
+
+ g_object_unref (object);
+
+ g_slist_free_full (props, (GDestroyNotify) notify_item_free);
+ return G_SOURCE_REMOVE;
+}
+
+static void
+_nm_object_defer_notify (NMObject *object)
+{
+ NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object);
+
+ if (!priv->notify_id)
+ priv->notify_id = g_idle_add_full (G_PRIORITY_LOW, deferred_notify_cb, object, NULL);
+}
+
+static void
+_nm_object_queue_notify_full (NMObject *object,
+ const char *property,
+ const char *signal_prefix,
+ gboolean added,
+ NMObject *changed)
+{
+ NMObjectPrivate *priv;
+ NotifyItem *item;
+ GSList *iter;
+
+ g_return_if_fail (NM_IS_OBJECT (object));
+ g_return_if_fail (!signal_prefix != !property);
+ g_return_if_fail (!signal_prefix == !changed);
+
+ priv = NM_OBJECT_GET_PRIVATE (object);
+ _nm_object_defer_notify (object);
+
+ property = g_intern_string (property);
+ signal_prefix = g_intern_string (signal_prefix);
+ for (iter = priv->notify_items; iter; iter = g_slist_next (iter)) {
+ item = iter->data;
+
+ if (property && (property == item->property))
+ return;
+
+ /* Collapse signals for the same object (such as "added->removed") to
+ * ensure we don't emit signals when their sum should have no effect.
+ * The "added->removed->removed" sequence requires special handling,
+ * hence the addition of the ADDED_REMOVED state to ensure that no
+ * signal is emitted in this case:
+ *
+ * Without the ADDED_REMOVED state:
+ * NONE + added -> ADDED
+ * ADDED + removed -> NONE
+ * NONE + removed -> REMOVED (would emit 'removed' signal)
+ *
+ * With the ADDED_REMOVED state:
+ * NONE | ADDED_REMOVED + added -> ADDED
+ * ADDED + removed -> ADDED_REMOVED
+ * ADDED_REMOVED + removed -> ADDED_REMOVED (emits no signal)
+ */
+ if (signal_prefix && (changed == item->changed) && (item->signal_prefix == signal_prefix)) {
+ switch (item->pending) {
+ case NOTIFY_SIGNAL_PENDING_ADDED:
+ if (!added)
+ item->pending = NOTIFY_SIGNAL_PENDING_ADDED_REMOVED;
+ break;
+ case NOTIFY_SIGNAL_PENDING_REMOVED:
+ if (added)
+ item->pending = NOTIFY_SIGNAL_PENDING_NONE;
+ break;
+ case NOTIFY_SIGNAL_PENDING_ADDED_REMOVED:
+ if (added)
+ item->pending = NOTIFY_SIGNAL_PENDING_ADDED;
+ break;
+ case NOTIFY_SIGNAL_PENDING_NONE:
+ item->pending = added ? NOTIFY_SIGNAL_PENDING_ADDED : NOTIFY_SIGNAL_PENDING_REMOVED;
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+ return;
+ }
+ }
+
+ item = g_slice_new0 (NotifyItem);
+ item->property = property;
+ if (signal_prefix) {
+ item->signal_prefix = signal_prefix;
+ item->pending = added ? NOTIFY_SIGNAL_PENDING_ADDED : NOTIFY_SIGNAL_PENDING_REMOVED;
+ item->changed = changed ? g_object_ref (changed) : NULL;
+ }
+ priv->notify_items = g_slist_prepend (priv->notify_items, item);
+}
+
+void
+_nm_object_queue_notify (NMObject *object, const char *property)
+{
+ _nm_object_queue_notify_full (object, property, NULL, FALSE, NULL);
+}
+
+void
+_nm_object_register_type_func (GType base_type,
+ NMObjectDecideTypeFunc type_func,
+ const char *interface,
+ const char *property)
+{
+ NMObjectTypeFuncData *type_data;
+
+ g_return_if_fail (type_func != NULL);
+ g_return_if_fail (interface != NULL);
+ g_return_if_fail (property != NULL);
+
+ type_data = g_slice_new (NMObjectTypeFuncData);
+ type_data->type_func = type_func;
+ type_data->interface = g_strdup (interface);
+ type_data->property = g_strdup (property);
+
+ g_hash_table_insert (type_funcs,
+ GSIZE_TO_POINTER (base_type),
+ type_data);
+}
+
+static GObject *
+_nm_object_create (GType type, GDBusConnection *connection, const char *path)
+{
+ NMObjectTypeFuncData *type_data;
+ GObject *object;
+ GError *error = NULL;
+
+ type_data = g_hash_table_lookup (type_funcs, GSIZE_TO_POINTER (type));
+ if (type_data) {
+ GDBusProxy *proxy;
+ GVariant *ret, *value;
+
+ proxy = _nm_dbus_new_proxy_for_connection (connection, path,
+ DBUS_INTERFACE_PROPERTIES,
+ NULL, &error);
+ if (!proxy) {
+ g_warning ("Could not create proxy for %s: %s.", path, error->message);
+ g_error_free (error);
+ return NULL;
+ }
+
+ ret = g_dbus_proxy_call_sync (proxy,
+ "Get",
+ g_variant_new ("(ss)",
+ type_data->interface,
+ type_data->property),
+ G_DBUS_CALL_FLAGS_NONE, -1,
+ NULL, &error);
+ g_object_unref (proxy);
+ if (!ret) {
+ dbgmsg ("Could not fetch property '%s' of interface '%s' on %s: %s\n",
+ type_data->property, type_data->interface, path, error->message);
+ g_error_free (error);
+ return NULL;
+ }
+
+ g_variant_get (ret, "(v)", &value);
+ type = type_data->type_func (value);
+ g_variant_unref (value);
+ g_variant_unref (ret);
+ }
+
+ if (type == G_TYPE_INVALID) {
+ dbgmsg ("Could not create object for %s: unknown object type", path);
+ return NULL;
+ }
+
+ object = g_object_new (type,
+ NM_OBJECT_PATH, path,
+ NM_OBJECT_DBUS_CONNECTION, connection,
+ NULL);
+ /* Cache the object before initializing it (and in particular, loading its
+ * property values); this is necessary to make circular references work (eg,
+ * when creating an NMActiveConnection, it will create an NMDevice which
+ * will in turn try to create the parent NMActiveConnection). Since we don't
+ * support multi-threaded use, we know that we will have inited the object
+ * before any external code sees it.
+ */
+ _nm_object_cache_add (NM_OBJECT (object));
+ if (!g_initable_init (G_INITABLE (object), NULL, &error)) {
+ dbgmsg ("Could not create object for %s: %s", path, error->message);
+ g_error_free (error);
+ g_clear_object (&object);
+ }
+
+ return object;
+}
+
+typedef void (*NMObjectCreateCallbackFunc) (GObject *, const char *, gpointer);
+typedef struct {
+ char *path;
+ NMObjectCreateCallbackFunc callback;
+ gpointer user_data;
+ NMObjectTypeFuncData *type_data;
+ GDBusConnection *connection;
+} NMObjectTypeAsyncData;
+
+static void
+create_async_complete (GObject *object, NMObjectTypeAsyncData *async_data)
+{
+ async_data->callback (object, async_data->path, async_data->user_data);
+
+ g_free (async_data->path);
+ g_object_unref (async_data->connection);
+ g_slice_free (NMObjectTypeAsyncData, async_data);
+}
+
+static void
+create_async_inited (GObject *object, GAsyncResult *result, gpointer user_data)
+{
+ NMObjectTypeAsyncData *async_data = user_data;
+ GError *error = NULL;
+
+ if (!g_async_initable_init_finish (G_ASYNC_INITABLE (object), result, &error)) {
+ dbgmsg ("Could not create object for %s: %s",
+ nm_object_get_path (NM_OBJECT (object)),
+ error->message);
+ g_error_free (error);
+ g_clear_object (&object);
+ }
+
+ create_async_complete (object, async_data);
+}
+
+static void
+create_async_got_type (NMObjectTypeAsyncData *async_data, GType type)
+{
+ GObject *object;
+
+ /* Ensure we don't have the object already; we may get multiple type
+ * requests for the same object if there are multiple properties on
+ * other objects that refer to the object at this path. One of those
+ * other requests may have already completed.
+ */
+ object = (GObject *) _nm_object_cache_get (async_data->path);
+ if (object) {
+ create_async_complete (object, async_data);
+ return;
+ }
+
+ if (type == G_TYPE_INVALID) {
+ /* Don't know how to create this object */
+ create_async_complete (NULL, async_data);
+ return;
+ }
+
+ object = g_object_new (type,
+ NM_OBJECT_PATH, async_data->path,
+ NM_OBJECT_DBUS_CONNECTION, async_data->connection,
+ NULL);
+ _nm_object_cache_add (NM_OBJECT (object));
+ g_async_initable_init_async (G_ASYNC_INITABLE (object), G_PRIORITY_DEFAULT,
+ NULL, create_async_inited, async_data);
+}
+
+static void
+create_async_got_property (GObject *proxy, GAsyncResult *result, gpointer user_data)
+{
+ NMObjectTypeAsyncData *async_data = user_data;
+ NMObjectTypeFuncData *type_data = async_data->type_data;
+ GVariant *ret, *value;
+ GError *error = NULL;
+ GType type;
+
+ ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), result, &error);
+ if (ret) {
+ g_variant_get (ret, "(v)", &value);
+ type = type_data->type_func (value);
+ g_variant_unref (value);
+ g_variant_unref (ret);
+ } else {
+ dbgmsg ("Could not fetch property '%s' of interface '%s' on %s: %s\n",
+ type_data->property, type_data->interface, async_data->path,
+ error->message);
+ g_clear_error (&error);
+ type = G_TYPE_INVALID;
+ }
+
+ create_async_got_type (async_data, type);
+}
+
+static void
+create_async_got_proxy (GObject *object, GAsyncResult *result, gpointer user_data)
+{
+ NMObjectTypeAsyncData *async_data = user_data;
+ GDBusProxy *proxy;
+ GError *error = NULL;
+
+ proxy = _nm_dbus_new_proxy_for_connection_finish (result, &error);
+ if (!proxy) {
+ g_warning ("Could not create proxy for %s: %s.", async_data->path, error->message);
+ g_error_free (error);
+ create_async_complete (NULL, async_data);
+ return;
+ }
+
+ g_dbus_proxy_call (proxy,
+ "Get",
+ g_variant_new ("(ss)",
+ async_data->type_data->interface,
+ async_data->type_data->property),
+ G_DBUS_CALL_FLAGS_NONE, -1,
+ NULL,
+ create_async_got_property, async_data);
+}
+
+static void
+_nm_object_create_async (GType type, GDBusConnection *connection, const char *path,
+ NMObjectCreateCallbackFunc callback, gpointer user_data)
+{
+ NMObjectTypeAsyncData *async_data;
+
+ async_data = g_slice_new (NMObjectTypeAsyncData);
+ async_data->path = g_strdup (path);
+ async_data->callback = callback;
+ async_data->user_data = user_data;
+ async_data->connection = g_object_ref (connection);
+
+ async_data->type_data = g_hash_table_lookup (type_funcs, GSIZE_TO_POINTER (type));
+ if (async_data->type_data) {
+ _nm_dbus_new_proxy_for_connection_async (connection, path,
+ DBUS_INTERFACE_PROPERTIES,
+ NULL,
+ create_async_got_proxy, async_data);
+ return;
+ }
+
+ create_async_got_type (async_data, type);
+}
+
+/* Stolen from dbus-glib */
+static char*
+wincaps_to_dash (const char *caps)
+{
+ const char *p;
+ GString *str;
+
+ str = g_string_new (NULL);
+ p = caps;
+ while (*p) {
+ if (g_ascii_isupper (*p)) {
+ if (str->len > 0 && (str->len < 2 || str->str[str->len-2] != '-'))
+ g_string_append_c (str, '-');
+ g_string_append_c (str, g_ascii_tolower (*p));
+ } else
+ g_string_append_c (str, *p);
+ ++p;
+ }
+
+ return g_string_free (str, FALSE);
+}
+
+/* Adds object to array if it's not already there */
+static void
+add_to_object_array_unique (GPtrArray *array, GObject *obj)
+{
+ guint i;
+
+ g_return_if_fail (array != NULL);
+
+ if (obj != NULL) {
+ for (i = 0; i < array->len; i++) {
+ if (g_ptr_array_index (array, i) == obj) {
+ g_object_unref (obj);
+ return;
+ }
+ }
+ g_ptr_array_add (array, obj);
+ }
+}
+
+typedef struct {
+ NMObject *self;
+ PropertyInfo *pi;
+
+ GObject **objects;
+ int length, remaining;
+
+ gboolean array;
+ 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
+queue_added_removed_signal (NMObject *self,
+ const char *signal_prefix,
+ NMObject *changed,
+ gboolean added)
+{
+ _nm_object_queue_notify_full (self, NULL, signal_prefix, added, 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 *old = *((GPtrArray **) pi->field);
+ GPtrArray *new;
+ int i;
+
+ /* Build up new array */
+ new = g_ptr_array_new_full (odata->length, g_object_unref);
+ for (i = 0; i < odata->length; 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++) {
+ queue_added_removed_signal (self,
+ pi->signal_prefix,
+ g_ptr_array_index (removed, i),
+ FALSE);
+ }
+
+ for (i = 0; i < added->len; i++) {
+ queue_added_removed_signal (self,
+ pi->signal_prefix,
+ g_ptr_array_index (added, i),
+ TRUE);
+ }
+
+ different = removed->len || added->len;
+ g_ptr_array_unref (added);
+ g_ptr_array_unref (removed);
+ } 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_ptr_array_unref (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 (different && odata->property_name)
+ _nm_object_queue_notify (self, odata->property_name);
+
+ if (--priv->reload_remaining == 0)
+ reload_complete (self, FALSE);
+
+ g_object_unref (self);
+ g_free (odata->objects);
+ g_slice_free (ObjectCreatedData, odata);
+}
+
+static void
+object_created (GObject *obj, const char *path, gpointer user_data)
+{
+ ObjectCreatedData *odata = user_data;
+
+ /* We assume that on error, the creator_func printed something */
+
+ if (obj == NULL && g_strcmp0 (path, "/") != 0 ) {
+ NMObjectClass *object_class = NM_OBJECT_GET_CLASS (odata->self);
+
+ if (object_class->object_creation_failed)
+ object_class->object_creation_failed (odata->self, path);
+ }
+
+ odata->objects[--odata->remaining] = obj;
+ if (!odata->remaining)
+ object_property_complete (odata);
+}
+
+static gboolean
+handle_object_property (NMObject *self, const char *property_name, GVariant *value,
+ PropertyInfo *pi, gboolean synchronously)
+{
+ NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (self);
+ GObject *obj;
+ const char *path;
+ ObjectCreatedData *odata;
+
+ odata = g_slice_new (ObjectCreatedData);
+ odata->self = g_object_ref (self);
+ odata->pi = pi;
+ odata->objects = g_new (GObject *, 1);
+ odata->length = odata->remaining = 1;
+ odata->array = FALSE;
+ odata->property_name = property_name;
+
+ priv->reload_remaining++;
+
+ path = g_variant_get_string (value, NULL);
+
+ if (!strcmp (path, "/")) {
+ object_created (NULL, path, odata);
+ return TRUE;
+ }
+
+ obj = G_OBJECT (_nm_object_cache_get (path));
+ if (obj) {
+ object_created (obj, path, odata);
+ return TRUE;
+ } else if (synchronously) {
+ obj = _nm_object_create (pi->object_type, priv->connection, path);
+ object_created (obj, path, odata);
+ return obj != NULL;
+ } else {
+ _nm_object_create_async (pi->object_type, priv->connection, path,
+ object_created, odata);
+ /* Assume success */
+ return TRUE;
+ }
+}
+
+static gboolean
+handle_object_array_property (NMObject *self, const char *property_name, GVariant *value,
+ PropertyInfo *pi, gboolean synchronously)
+{
+ NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (self);
+ GObject *obj;
+ GVariantIter iter;
+ gsize npaths;
+ GPtrArray **array = pi->field;
+ const char *path;
+ ObjectCreatedData *odata;
+
+ npaths = g_variant_n_children (value);
+
+ odata = g_slice_new (ObjectCreatedData);
+ odata->self = g_object_ref (self);
+ odata->pi = pi;
+ odata->objects = g_new0 (GObject *, npaths);
+ odata->length = odata->remaining = npaths;
+ odata->array = TRUE;
+ odata->property_name = property_name;
+
+ priv->reload_remaining++;
+
+ if (npaths == 0) {
+ object_property_complete (odata);
+ return TRUE;
+ }
+
+ g_variant_iter_init (&iter, value);
+ while (g_variant_iter_next (&iter, "&o", &path)) {
+ if (!strcmp (path, "/")) {
+ /* FIXME: can't happen? */
+ continue;
+ }
+
+ obj = G_OBJECT (_nm_object_cache_get (path));
+ if (obj) {
+ object_created (obj, path, odata);
+ } else if (synchronously) {
+ obj = _nm_object_create (pi->object_type, priv->connection, path);
+ object_created (obj, path, odata);
+ } else {
+ _nm_object_create_async (pi->object_type, priv->connection, path,
+ object_created, odata);
+ }
+ }
+
+ if (!synchronously) {
+ /* Assume success */
+ return TRUE;
+ }
+
+ return *array && ((*array)->len == npaths);
+}
+
+static void
+handle_property_changed (NMObject *self, const char *dbus_name,
+ GVariant *value, gboolean synchronously)
+{
+ NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (self);
+ char *prop_name;
+ PropertyInfo *pi;
+ GParamSpec *pspec;
+ gboolean success = FALSE, found = FALSE;
+ GSList *iter;
+
+ prop_name = wincaps_to_dash (dbus_name);
+
+ /* Iterate through the object and its parents to find the property */
+ for (iter = priv->property_tables; iter; iter = g_slist_next (iter)) {
+ pi = g_hash_table_lookup ((GHashTable *) iter->data, prop_name);
+ if (pi) {
+ if (!pi->field) {
+ /* We know about this property but aren't tracking changes on it. */
+ goto out;
+ }
+
+ found = TRUE;
+ break;
+ }
+ }
+
+ if (!found) {
+ dbgmsg ("Property '%s' unhandled.", prop_name);
+ goto out;
+ }
+
+ pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (G_OBJECT (self)), prop_name);
+ if (!pspec && pi->func == demarshal_generic) {
+ dbgmsg ("%s: property '%s' changed but wasn't defined by object type %s.",
+ __func__,
+ prop_name,
+ G_OBJECT_TYPE_NAME (self));
+ goto out;
+ }
+
+ if (G_UNLIKELY (debug)) {
+ char *s;
+ s = g_variant_print (value, FALSE);
+ dbgmsg ("PC: (%p) %s:%s => '%s' (%s%s%s)",
+ self, G_OBJECT_TYPE_NAME (self),
+ prop_name,
+ s,
+ g_variant_get_type_string (value),
+ pi->object_type ? " / " : "",
+ pi->object_type ? g_type_name (pi->object_type) : "");
+ g_free (s);
+ }
+
+ if (pspec && pi->object_type) {
+ if (g_variant_is_of_type (value, G_VARIANT_TYPE_OBJECT_PATH))
+ success = handle_object_property (self, pspec->name, value, pi, synchronously);
+ else if (g_variant_is_of_type (value, G_VARIANT_TYPE ("ao")))
+ success = handle_object_array_property (self, pspec->name, value, pi, synchronously);
+ else {
+ g_warn_if_reached ();
+ goto out;
+ }
+ } else
+ success = (*(pi->func)) (self, pspec, value, pi->field);
+
+ if (!success) {
+ dbgmsg ("%s: failed to update property '%s' of object type %s.",
+ __func__,
+ prop_name,
+ G_OBJECT_TYPE_NAME (self));
+ }
+
+out:
+ g_free (prop_name);
+}
+
+static void
+process_properties_changed (NMObject *self, GVariant *properties, gboolean synchronously)
+{
+ NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (self);
+ GVariantIter iter;
+ const char *name;
+ GVariant *value;
+
+ if (priv->suppress_property_updates)
+ return;
+
+ g_variant_iter_init (&iter, properties);
+ while (g_variant_iter_next (&iter, "{&sv}", &name, &value))
+ handle_property_changed (self, name, value, synchronously);
+}
+
+static void
+property_proxy_signal (GDBusProxy *proxy,
+ const char *sender_name,
+ const char *signal_name,
+ GVariant *parameters,
+ gpointer user_data)
+{
+ GVariant *properties;
+
+ if (strcmp (signal_name, "PropertiesChanged") != 0)
+ return;
+
+ g_variant_get (parameters, "(@a{sv})", &properties);
+ process_properties_changed (NM_OBJECT (user_data), properties, FALSE);
+ g_variant_unref (properties);
+}
+
+#define HANDLE_TYPE(vtype, ctype, getter) \
+ G_STMT_START { \
+ if (g_variant_is_of_type (value, vtype)) { \
+ ctype *param = (ctype *) field; \
+ *param = getter (value); \
+ } else { \
+ success = FALSE; \
+ goto done; \
+ } \
+ } G_STMT_END
+
+static gboolean
+demarshal_generic (NMObject *object,
+ GParamSpec *pspec,
+ GVariant *value,
+ gpointer field)
+{
+ gboolean success = TRUE;
+
+ if (pspec->value_type == G_TYPE_STRING) {
+ if (g_variant_is_of_type (value, G_VARIANT_TYPE_STRING)) {
+ char **param = (char **) field;
+ g_free (*param);
+ *param = g_variant_dup_string (value, NULL);
+ } else if (g_variant_is_of_type (value, G_VARIANT_TYPE_OBJECT_PATH)) {
+ char **param = (char **) field;
+ g_free (*param);
+ *param = g_variant_dup_string (value, NULL);
+ /* Handle "NULL" object paths */
+ if (g_strcmp0 (*param, "/") == 0) {
+ g_free (*param);
+ *param = NULL;
+ }
+ } else {
+ success = FALSE;
+ goto done;
+ }
+ } else if (pspec->value_type == G_TYPE_STRV) {
+ char ***param = (char ***)field;
+ if (*param)
+ g_strfreev (*param);
+ *param = g_variant_dup_strv (value, NULL);
+ } else if (pspec->value_type == G_TYPE_BYTES) {
+ GBytes **param = (GBytes **)field;
+ gconstpointer val;
+ gsize length;
+
+ if (*param)
+ g_bytes_unref (*param);
+ val = g_variant_get_fixed_array (value, &length, 1);
+ if (length)
+ *param = g_bytes_new (val, length);
+ else
+ *param = NULL;
+ } else if (G_IS_PARAM_SPEC_ENUM (pspec)) {
+ int *param = (int *) field;
+
+ if (g_variant_is_of_type (value, G_VARIANT_TYPE_INT32))
+ *param = g_variant_get_int32 (value);
+ else if (g_variant_is_of_type (value, G_VARIANT_TYPE_UINT32))
+ *param = g_variant_get_uint32 (value);
+ else {
+ success = FALSE;
+ goto done;
+ }
+ } else if (G_IS_PARAM_SPEC_FLAGS (pspec)) {
+ guint *param = (guint *) field;
+
+ if (g_variant_is_of_type (value, G_VARIANT_TYPE_INT32))
+ *param = g_variant_get_int32 (value);
+ else if (g_variant_is_of_type (value, G_VARIANT_TYPE_UINT32))
+ *param = g_variant_get_uint32 (value);
+ else {
+ success = FALSE;
+ goto done;
+ }
+ } else if (pspec->value_type == G_TYPE_BOOLEAN)
+ HANDLE_TYPE (G_VARIANT_TYPE_BOOLEAN, gboolean, g_variant_get_boolean);
+ else if (pspec->value_type == G_TYPE_UCHAR)
+ HANDLE_TYPE (G_VARIANT_TYPE_BYTE, guchar, g_variant_get_byte);
+ else if (pspec->value_type == G_TYPE_DOUBLE)
+ HANDLE_TYPE (G_VARIANT_TYPE_DOUBLE, gdouble, g_variant_get_double);
+ else if (pspec->value_type == G_TYPE_INT)
+ HANDLE_TYPE (G_VARIANT_TYPE_INT32, gint, g_variant_get_int32);
+ else if (pspec->value_type == G_TYPE_UINT)
+ HANDLE_TYPE (G_VARIANT_TYPE_UINT32, guint, g_variant_get_uint32);
+ else if (pspec->value_type == G_TYPE_INT64)
+ HANDLE_TYPE (G_VARIANT_TYPE_INT64, gint, g_variant_get_int64);
+ else if (pspec->value_type == G_TYPE_UINT64)
+ HANDLE_TYPE (G_VARIANT_TYPE_UINT64, guint, g_variant_get_uint64);
+ else if (pspec->value_type == G_TYPE_LONG)
+ HANDLE_TYPE (G_VARIANT_TYPE_INT64, glong, g_variant_get_int64);
+ else if (pspec->value_type == G_TYPE_ULONG)
+ HANDLE_TYPE (G_VARIANT_TYPE_UINT64, gulong, g_variant_get_uint64);
+ else {
+ g_warning ("%s: %s:%s unhandled type %s.",
+ __func__,
+ G_OBJECT_TYPE_NAME (object),
+ pspec->name,
+ g_type_name (pspec->value_type));
+ success = FALSE;
+ }
+
+done:
+ if (success) {
+ _nm_object_queue_notify (object, pspec->name);
+ } else {
+ dbgmsg ("%s: %s:%s (type %s) couldn't be set from D-Bus type %s.",
+ __func__, G_OBJECT_TYPE_NAME (object), pspec->name,
+ g_type_name (pspec->value_type), g_variant_get_type_string (value));
+ }
+ return success;
+}
+
+void
+_nm_object_register_properties (NMObject *object,
+ const char *interface,
+ const NMPropertiesInfo *info)
+{
+ NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object);
+ GDBusProxy *proxy;
+ static gsize dval = 0;
+ const char *debugstr;
+ NMPropertiesInfo *tmp;
+ GHashTable *instance;
+
+ g_return_if_fail (NM_IS_OBJECT (object));
+ g_return_if_fail (interface != NULL);
+ g_return_if_fail (info != NULL);
+
+ if (g_once_init_enter (&dval)) {
+ debugstr = getenv ("LIBNM_GLIB_DEBUG");
+ if (debugstr && strstr (debugstr, "properties-changed"))
+ debug = TRUE;
+ g_once_init_leave (&dval, 1);
+ }
+
+ proxy = _nm_object_get_proxy (object, interface);
+ g_return_if_fail (proxy != NULL);
+
+ g_signal_connect (proxy, "g-signal",
+ G_CALLBACK (property_proxy_signal), object);
+
+ instance = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ priv->property_tables = g_slist_prepend (priv->property_tables, instance);
+
+ for (tmp = (NMPropertiesInfo *) info; tmp->name; tmp++) {
+ PropertyInfo *pi;
+
+ if (!tmp->name || (tmp->func && !tmp->field)) {
+ g_warning ("%s: missing field in NMPropertiesInfo", __func__);
+ continue;
+ }
+
+ pi = g_malloc0 (sizeof (PropertyInfo));
+ 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);
+ }
+}
+
+static gboolean
+_nm_object_reload_properties (NMObject *object, GError **error)
+{
+ NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object);
+ GVariant *ret, *props;
+ GHashTableIter iter;
+ const char *interface;
+ GDBusProxy *proxy;
+
+ if (!g_hash_table_size (priv->proxies) || !priv->nm_running)
+ return TRUE;
+
+ priv->reload_remaining++;
+
+ g_hash_table_iter_init (&iter, priv->proxies);
+ while (g_hash_table_iter_next (&iter, (gpointer *) &interface, (gpointer *) &proxy)) {
+ ret = g_dbus_proxy_call_sync (priv->properties_proxy,
+ "GetAll",
+ g_variant_new ("(s)", interface),
+ G_DBUS_CALL_FLAGS_NONE, -1,
+ NULL, error);
+ if (!ret) {
+ if (error && *error)
+ g_dbus_error_strip_remote_error (*error);
+ return FALSE;
+ }
+
+ g_variant_get (ret, "(@a{sv})", &props);
+ process_properties_changed (object, props, TRUE);
+ g_variant_unref (props);
+ g_variant_unref (ret);
+ }
+
+ if (--priv->reload_remaining == 0)
+ reload_complete (object, TRUE);
+
+ return TRUE;
+}
+
+void
+_nm_object_suppress_property_updates (NMObject *object, gboolean suppress)
+{
+ NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object);
+
+ priv->suppress_property_updates = suppress;
+}
+
+
+void
+_nm_object_reload_property (NMObject *object,
+ const char *interface,
+ const char *prop_name)
+{
+ GVariant *ret, *value;
+ 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;
+
+ ret = g_dbus_proxy_call_sync (NM_OBJECT_GET_PRIVATE (object)->properties_proxy,
+ "Get",
+ g_variant_new ("(ss)", interface, prop_name),
+ G_DBUS_CALL_FLAGS_NONE, 15000,
+ NULL, &err);
+ if (!ret) {
+ dbgmsg ("%s: Error getting '%s' for %s: (%d) %s\n",
+ __func__,
+ prop_name,
+ nm_object_get_path (object),
+ err->code,
+ err->message);
+ g_clear_error (&err);
+ return;
+ }
+
+ g_variant_get (ret, "(v)", &value);
+ handle_property_changed (object, prop_name, value, TRUE);
+ g_variant_unref (value);
+ g_variant_unref (ret);
+}
+
+void
+_nm_object_set_property (NMObject *object,
+ const char *interface,
+ const char *prop_name,
+ const char *format_string,
+ ...)
+{
+ GVariant *val, *ret;
+ va_list ap;
+
+ 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 (format_string != NULL);
+
+ if (!NM_OBJECT_GET_PRIVATE (object)->nm_running)
+ return;
+
+ va_start (ap, format_string);
+ val = g_variant_new_va (format_string, NULL, &ap);
+ va_end (ap);
+ g_return_if_fail (val != NULL);
+
+ ret = g_dbus_proxy_call_sync (NM_OBJECT_GET_PRIVATE (object)->properties_proxy,
+ "Set",
+ g_variant_new ("(ssv)", interface, prop_name, val),
+ G_DBUS_CALL_FLAGS_NONE, 2000,
+ NULL, NULL);
+ /* Ignore errors. */
+ if (ret)
+ g_variant_unref (ret);
+}
+
+static void
+reload_complete (NMObject *object, gboolean emit_now)
+{
+ NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object);
+ GSimpleAsyncResult *simple;
+ GSList *results, *iter;
+ GError *error;
+
+ if (emit_now) {
+ if (priv->notify_id) {
+ g_source_remove (priv->notify_id);
+ priv->notify_id = 0;
+ }
+ deferred_notify_cb (object);
+ } else
+ _nm_object_defer_notify (object);
+
+ results = priv->reload_results;
+ priv->reload_results = NULL;
+ error = priv->reload_error;
+ priv->reload_error = NULL;
+
+ for (iter = results; iter; iter = iter->next) {
+ simple = iter->data;
+
+ if (error)
+ g_simple_async_result_set_from_error (simple, error);
+ else
+ g_simple_async_result_set_op_res_gboolean (simple, TRUE);
+
+ g_simple_async_result_complete (simple);
+ g_object_unref (simple);
+ }
+ g_slist_free (results);
+ g_clear_error (&error);
+}
+
+static void
+reload_got_properties (GObject *proxy,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ NMObject *object = user_data;
+ NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object);
+ GVariant *ret, *props;
+ GError *error = NULL;
+
+ ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), result, &error);
+ if (ret) {
+ g_variant_get (ret, "(@a{sv})", &props);
+ process_properties_changed (object, props, FALSE);
+ g_variant_unref (props);
+ g_variant_unref (ret);
+ } else {
+ g_dbus_error_strip_remote_error (error);
+ if (priv->reload_error)
+ g_error_free (error);
+ else
+ priv->reload_error = error;
+ }
+
+ if (--priv->reload_remaining == 0)
+ reload_complete (object, FALSE);
+}
+
+void
+_nm_object_reload_properties_async (NMObject *object,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object);
+ GSimpleAsyncResult *simple;
+ GHashTableIter iter;
+ const char *interface;
+ GDBusProxy *proxy;
+
+ simple = g_simple_async_result_new (G_OBJECT (object), callback,
+ user_data, _nm_object_reload_properties_async);
+
+ if (!g_hash_table_size (priv->proxies) || !priv->nm_running) {
+ g_simple_async_result_complete_in_idle (simple);
+ g_object_unref (simple);
+ return;
+ }
+
+ priv->reload_results = g_slist_prepend (priv->reload_results, simple);
+
+ /* If there was already a reload happening, we don't need to
+ * re-read the properties again, we just need to wait for the
+ * existing reload to finish.
+ */
+ if (priv->reload_results->next)
+ return;
+
+ g_hash_table_iter_init (&iter, priv->proxies);
+ while (g_hash_table_iter_next (&iter, (gpointer *) &interface, (gpointer *) &proxy)) {
+ priv->reload_remaining++;
+ g_dbus_proxy_call (priv->properties_proxy,
+ "GetAll",
+ g_variant_new ("(s)", interface),
+ G_DBUS_CALL_FLAGS_NONE, -1,
+ cancellable,
+ reload_got_properties, object);
+ }
+}
+
+gboolean
+_nm_object_reload_properties_finish (NMObject *object, GAsyncResult *result, GError **error)
+{
+ NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object);
+ GSimpleAsyncResult *simple;
+
+ g_return_val_if_fail (NM_IS_OBJECT (object), FALSE);
+ g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (object), _nm_object_reload_properties_async), FALSE);
+
+ /* NM might have disappeared meanwhile. That would cause a NoReply error to be emitted,
+ * but we don't care if property updates were disabled. */
+ if (priv->suppress_property_updates)
+ return TRUE;
+
+ simple = G_SIMPLE_ASYNC_RESULT (result);
+ if (g_simple_async_result_propagate_error (simple, error))
+ return FALSE;
+
+ return g_simple_async_result_get_op_res_gboolean (simple);
+}
+
+gboolean
+_nm_object_get_nm_running (NMObject *self)
+{
+ return NM_OBJECT_GET_PRIVATE (self)->nm_running;
+}
+
+/**************************************************************/
+
+static void
+on_name_owner_changed (GObject *proxy,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ NMObject *self = NM_OBJECT (user_data);
+ NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (self);
+ gboolean now_running;
+ char *owner;
+
+ now_running = ((owner = g_dbus_proxy_get_name_owner (priv->properties_proxy)) != NULL);
+ g_free (owner);
+ if (now_running != priv->nm_running) {
+ priv->nm_running = now_running;
+ g_object_notify (G_OBJECT (self), NM_OBJECT_NM_RUNNING);
+ }
+}
+
+static void
+init_dbus (NMObject *object)
+{
+ NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object);
+ char *owner;
+
+ if (_nm_dbus_is_connection_private (priv->connection))
+ priv->nm_running = TRUE;
+ else {
+ priv->nm_running = ((owner = g_dbus_proxy_get_name_owner (priv->properties_proxy)) != NULL);
+ g_free (owner);
+ g_signal_connect (priv->properties_proxy, "notify::g-name-owner",
+ G_CALLBACK (on_name_owner_changed), object);
+ }
+}
+
+static gboolean
+init_sync (GInitable *initable, GCancellable *cancellable, GError **error)
+{
+ NMObject *self = NM_OBJECT (initable);
+ NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (self);
+ NMObjectClassPrivate *cpriv = NM_OBJECT_CLASS_GET_PRIVATE (NM_OBJECT_GET_CLASS (self));
+ GSList *iter;
+
+ if (!priv->path) {
+ g_set_error_literal (error, NM_CLIENT_ERROR, NM_CLIENT_ERROR_OBJECT_CREATION_FAILED,
+ _("Caller did not specify D-Bus path for object"));
+ return FALSE;
+ }
+
+ if (!priv->connection)
+ priv->connection = _nm_dbus_new_connection (cancellable, error);
+ if (!priv->connection)
+ return FALSE;
+
+ /* Create proxies */
+ for (iter = cpriv->interfaces; iter; iter = iter->next) {
+ const char *interface = iter->data;
+ GDBusProxy *proxy;
+
+ proxy = _nm_dbus_new_proxy_for_connection (priv->connection, priv->path, interface,
+ cancellable, error);
+ if (!proxy)
+ return FALSE;
+ g_hash_table_insert (priv->proxies, (char *) interface, proxy);
+ }
+
+ priv->properties_proxy = _nm_dbus_new_proxy_for_connection (priv->connection,
+ priv->path,
+ DBUS_INTERFACE_PROPERTIES,
+ cancellable, error);
+ if (!priv->properties_proxy)
+ return FALSE;
+
+ NM_OBJECT_GET_CLASS (self)->init_dbus (self);
+
+ return _nm_object_reload_properties (self, error);
+}
+
+/**************************************************************/
+
+typedef struct {
+ NMObject *object;
+ GSimpleAsyncResult *simple;
+ GCancellable *cancellable;
+ int proxies_pending;
+ GError *error;
+} NMObjectInitData;
+
+static void
+init_async_complete (NMObjectInitData *init_data)
+{
+ if (init_data->error)
+ g_simple_async_result_take_error (init_data->simple, init_data->error);
+ else
+ g_simple_async_result_set_op_res_gboolean (init_data->simple, TRUE);
+ g_simple_async_result_complete (init_data->simple);
+ g_object_unref (init_data->simple);
+ g_clear_object (&init_data->cancellable);
+ g_slice_free (NMObjectInitData, init_data);
+}
+
+static void
+init_async_got_properties (GObject *object, GAsyncResult *result, gpointer user_data)
+{
+ NMObjectInitData *init_data = user_data;
+
+ _nm_object_reload_properties_finish (NM_OBJECT (object), result, &init_data->error);
+ init_async_complete (init_data);
+}
+
+static void
+init_async_got_proxy (GObject *object, GAsyncResult *result, gpointer user_data)
+{
+ NMObjectInitData *init_data = user_data;
+ NMObject *self = init_data->object;
+ NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (self);
+ GDBusProxy *proxy;
+
+ if (!init_data->error) {
+ proxy = _nm_dbus_new_proxy_for_connection_finish (result, &init_data->error);
+ if (proxy) {
+ const char *interface = g_dbus_proxy_get_interface_name (proxy);
+
+ if (!strcmp (interface, DBUS_INTERFACE_PROPERTIES))
+ priv->properties_proxy = proxy;
+ else
+ g_hash_table_insert (priv->proxies, (char *) interface, proxy);
+ }
+ }
+
+ init_data->proxies_pending--;
+ if (init_data->proxies_pending)
+ return;
+
+ if (init_data->error) {
+ init_async_complete (init_data);
+ return;
+ }
+
+ NM_OBJECT_GET_CLASS (self)->init_dbus (self);
+
+ _nm_object_reload_properties_async (init_data->object, init_data->cancellable, init_async_got_properties, init_data);
+}
+
+static void
+init_async_got_bus (GObject *object, GAsyncResult *result, gpointer user_data)
+{
+ NMObjectInitData *init_data = user_data;
+ NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (init_data->object);
+ NMObjectClassPrivate *cpriv = NM_OBJECT_CLASS_GET_PRIVATE (NM_OBJECT_GET_CLASS (init_data->object));
+ GSList *iter;
+
+ priv->connection = _nm_dbus_new_connection_finish (result, &init_data->error);
+ if (!priv->connection) {
+ init_async_complete (init_data);
+ return;
+ }
+
+ for (iter = cpriv->interfaces; iter; iter = iter->next) {
+ const char *interface = iter->data;
+
+ _nm_dbus_new_proxy_for_connection_async (priv->connection,
+ priv->path, interface,
+ init_data->cancellable,
+ init_async_got_proxy, init_data);
+ init_data->proxies_pending++;
+ }
+
+ _nm_dbus_new_proxy_for_connection_async (priv->connection,
+ priv->path,
+ DBUS_INTERFACE_PROPERTIES,
+ init_data->cancellable,
+ init_async_got_proxy, init_data);
+ init_data->proxies_pending++;
+}
+
+static void
+init_async (GAsyncInitable *initable, int io_priority,
+ GCancellable *cancellable, GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ NMObject *self = NM_OBJECT (initable);
+ NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (self);
+ NMObjectInitData *init_data;
+
+ if (!priv->path) {
+ g_simple_async_report_error_in_idle (G_OBJECT (initable),
+ callback, user_data,
+ NM_CLIENT_ERROR,
+ NM_CLIENT_ERROR_OBJECT_CREATION_FAILED,
+ "%s",
+ _("Caller did not specify D-Bus path for object"));
+ return;
+ }
+
+ init_data = g_slice_new0 (NMObjectInitData);
+ init_data->object = self;
+ init_data->simple = g_simple_async_result_new (G_OBJECT (initable), callback, user_data, init_async);
+ init_data->cancellable = cancellable ? g_object_ref (cancellable) : NULL;
+
+ _nm_dbus_new_connection_async (cancellable, init_async_got_bus, init_data);
+}
+
+static gboolean
+init_finish (GAsyncInitable *initable, GAsyncResult *result, GError **error)
+{
+ GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
+
+ if (g_simple_async_result_propagate_error (simple, error))
+ return FALSE;
+ else
+ return TRUE;
+}
+
+/**************************************************************/
+
+static void
+nm_object_initable_iface_init (GInitableIface *iface)
+{
+ iface->init = init_sync;
+}
+
+static void
+nm_object_async_initable_iface_init (GAsyncInitableIface *iface)
+{
+ iface->init_async = init_async;
+ iface->init_finish = init_finish;
+}
+
+static void
+nm_object_init (NMObject *object)
+{
+ NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object);
+
+ priv->proxies = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_object_unref);
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_PATH:
+ /* Construct only */
+ priv->path = g_value_dup_string (value);
+ break;
+ case PROP_DBUS_CONNECTION:
+ /* Construct only */
+ priv->connection = g_value_dup_object (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)
+{
+ NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_PATH:
+ g_value_set_string (value, priv->path);
+ break;
+ case PROP_DBUS_CONNECTION:
+ g_value_set_object (value, priv->connection);
+ break;
+ case PROP_NM_RUNNING:
+ g_value_set_boolean (value, priv->nm_running);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+dispose (GObject *object)
+{
+ NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object);
+
+ if (priv->notify_id) {
+ g_source_remove (priv->notify_id);
+ priv->notify_id = 0;
+ }
+
+ g_slist_free_full (priv->notify_items, (GDestroyNotify) notify_item_free);
+ priv->notify_items = NULL;
+
+ g_clear_pointer (&priv->proxies, g_hash_table_unref);
+ g_clear_object (&priv->properties_proxy);
+
+ g_clear_object (&priv->connection);
+
+ G_OBJECT_CLASS (nm_object_parent_class)->dispose (object);
+}
+
+static void
+finalize (GObject *object)
+{
+ NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object);
+
+ g_slist_free_full (priv->property_tables, (GDestroyNotify) g_hash_table_destroy);
+ g_free (priv->path);
+
+ G_OBJECT_CLASS (nm_object_parent_class)->finalize (object);
+}
+
+static void
+nm_object_class_init (NMObjectClass *nm_object_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (nm_object_class);
+
+ g_type_class_add_private (nm_object_class, sizeof (NMObjectPrivate));
+
+ /* virtual methods */
+ object_class->set_property = set_property;
+ object_class->get_property = get_property;
+ object_class->dispose = dispose;
+ object_class->finalize = finalize;
+
+ nm_object_class->init_dbus = init_dbus;
+
+ /* Properties */
+
+ /**
+ * NMObject:path:
+ *
+ * The D-Bus object path.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_PATH,
+ g_param_spec_string (NM_OBJECT_PATH, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMObject:dbus-connection: (skip)
+ *
+ * The #GDBusConnection of the object.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_DBUS_CONNECTION,
+ g_param_spec_object (NM_OBJECT_DBUS_CONNECTION, "", "",
+ G_TYPE_DBUS_CONNECTION,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMObject:manager-running: (skip)
+ *
+ * Internal use only.
+ */
+ g_object_class_install_property
+ (object_class, PROP_NM_RUNNING,
+ g_param_spec_boolean (NM_OBJECT_NM_RUNNING, "", "",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+}
+
diff --git a/libnm/nm-object.h b/libnm/nm-object.h
new file mode 100644
index 000000000..b42f160d5
--- /dev/null
+++ b/libnm/nm-object.h
@@ -0,0 +1,70 @@
+/* -*- 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 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2012 Red Hat, Inc.
+ */
+
+#ifndef __NM_OBJECT_H__
+#define __NM_OBJECT_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-types.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_OBJECT (nm_object_get_type ())
+#define NM_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_OBJECT, NMObject))
+#define NM_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_OBJECT, NMObjectClass))
+#define NM_IS_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_OBJECT))
+#define NM_IS_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_OBJECT))
+#define NM_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_OBJECT, NMObjectClass))
+
+#define NM_OBJECT_PATH "path"
+#define NM_OBJECT_DBUS_CONNECTION "dbus-connection"
+
+struct _NMObject {
+ GObject parent;
+};
+
+typedef struct {
+ GObjectClass parent;
+
+ /* Methods */
+ void (*init_dbus) (NMObject *object);
+
+ /* The "object-creation-failed" method is PRIVATE for libnm 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,
+ const char *failed_path);
+
+ /*< private >*/
+ gpointer padding[8];
+} NMObjectClass;
+
+GType nm_object_get_type (void);
+
+const char *nm_object_get_path (NMObject *object);
+
+G_END_DECLS
+
+#endif /* __NM_OBJECT_H__ */
diff --git a/libnm/nm-property-docs.xml b/libnm/nm-property-docs.xml
new file mode 100644
index 000000000..1520e0f9f
--- /dev/null
+++ b/libnm/nm-property-docs.xml
@@ -0,0 +1,296 @@
+<?xml version="1.0"?>
+<!DOCTYPE nm-setting-docs [
+<!ENTITY quot "&#34;">
+]>
+<nm-setting-docs>
+ <setting name="802-1x">
+ <property name="altsubject-matches" type="array of string" default="[]" description="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." />
+ <property name="anonymous-identity" type="string" description="Anonymous identity string for EAP authentication methods. Used as the unencrypted identity with EAP types that support different tunneled identity like EAP-TTLS." />
+ <property name="ca-cert" type="byte array" description="Contains the CA certificate if used by the EAP method specified in the &quot;eap&quot; property. Certificate data is specified using a &quot;scheme&quot;; 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 &quot;file://&quot; 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." />
+ <property name="ca-path" type="string" description="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 &quot;ca-cert&quot; property." />
+ <property name="client-cert" type="byte array" description="Contains the client certificate if used by the EAP method specified in the &quot;eap&quot; property. Certificate data is specified using a &quot;scheme&quot;; 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 &quot;file://&quot; and ending with a terminating NUL byte." />
+ <property name="eap" type="array of string" default="[]" description="The allowed EAP method to be used when authenticating to the network with 802.1x. Valid methods are: &quot;leap&quot;, &quot;md5&quot;, &quot;tls&quot;, &quot;peap&quot;, &quot;ttls&quot;, &quot;pwd&quot;, and &quot;fast&quot;. Each method requires different configuration using the properties of this setting; refer to wpa_supplicant documentation for the allowed combinations." />
+ <property name="identity" type="string" description="Identity string for EAP authentication methods. Often the user's user or login name." />
+ <property name="name" type="string" default="802-1x" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="pac-file" type="string" description="UTF-8 encoded file path containing PAC for EAP-FAST." />
+ <property name="password" type="string" description="UTF-8 encoded password used for EAP authentication methods. If both the &quot;password&quot; property and the &quot;password-raw&quot; property are specified, &quot;password&quot; is preferred." />
+ <property name="password-flags" type="NMSettingSecretFlags (uint32)" description="Flags indicating how to handle the &quot;password&quot; property." />
+ <property name="password-raw" type="byte array" description="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 &quot;password&quot; property and the &quot;password-raw&quot; property are specified, &quot;password&quot; is preferred." />
+ <property name="password-raw-flags" type="NMSettingSecretFlags (uint32)" description="Flags indicating how to handle the &quot;password-raw&quot; property." />
+ <property name="phase1-fast-provisioning" type="string" description="Enables or disables in-line provisioning of EAP-FAST credentials when FAST is specified as the EAP method in the &quot;eap&quot; property. Recognized values are &quot;0&quot; (disabled), &quot;1&quot; (allow unauthenticated provisioning), &quot;2&quot; (allow authenticated provisioning), and &quot;3&quot; (allow both authenticated and unauthenticated provisioning). See the wpa_supplicant documentation for more details." />
+ <property name="phase1-peaplabel" type="string" description="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 &quot;1&quot; to force use of the new PEAP label. See the wpa_supplicant documentation for more details." />
+ <property name="phase1-peapver" type="string" description="Forces which PEAP version is used when PEAP is set as the EAP method in the &quot;eap&quot; 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 &quot;0&quot; or &quot;1&quot; to force that specific PEAP version." />
+ <property name="phase2-altsubject-matches" type="array of string" default="[]" description="List of strings to be matched against the altSubjectName of the certificate presented by the authentication server during the inner &quot;phase 2&quot; authentication. If the list is empty, no verification of the server certificate's altSubjectName is performed." />
+ <property name="phase2-auth" type="string" description="Specifies the allowed &quot;phase 2&quot; inner non-EAP authentication methods when an EAP method that uses an inner TLS tunnel is specified in the &quot;eap&quot; property. Recognized non-EAP &quot;phase 2&quot; methods are &quot;pap&quot;, &quot;chap&quot;, &quot;mschap&quot;, &quot;mschapv2&quot;, &quot;gtc&quot;, &quot;otp&quot;, &quot;md5&quot;, and &quot;tls&quot;. Each &quot;phase 2&quot; inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details." />
+ <property name="phase2-autheap" type="string" description="Specifies the allowed &quot;phase 2&quot; inner EAP-based authentication methods when an EAP method that uses an inner TLS tunnel is specified in the &quot;eap&quot; property. Recognized EAP-based &quot;phase 2&quot; methods are &quot;md5&quot;, &quot;mschapv2&quot;, &quot;otp&quot;, &quot;gtc&quot;, and &quot;tls&quot;. Each &quot;phase 2&quot; inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details." />
+ <property name="phase2-ca-cert" type="byte array" description="Contains the &quot;phase 2&quot; CA certificate if used by the EAP method specified in the &quot;phase2-auth&quot; or &quot;phase2-autheap&quot; properties. Certificate data is specified using a &quot;scheme&quot;; 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 &quot;file://&quot; 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." />
+ <property name="phase2-ca-path" type="string" description="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 &quot;phase2-ca-cert&quot; property." />
+ <property name="phase2-client-cert" type="byte array" description="Contains the &quot;phase 2&quot; client certificate if used by the EAP method specified in the &quot;phase2-auth&quot; or &quot;phase2-autheap&quot; properties. Certificate data is specified using a &quot;scheme&quot;; 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 &quot;file://&quot; 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." />
+ <property name="phase2-private-key" type="byte array" description="Contains the &quot;phase 2&quot; inner private key when the &quot;phase2-auth&quot; or &quot;phase2-autheap&quot; property is set to &quot;tls&quot;. Key data is specified using a &quot;scheme&quot;; 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 &quot;file://&quot; 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 &quot;phase2-private-key-password&quot; 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 &quot;file://&quot; and and ending with a terminating NUL byte, and as with the blob scheme the &quot;phase2-private-key-password&quot; property must be set to the password used to decode the PKCS#12 private key and certificate." />
+ <property name="phase2-private-key-password" type="string" description="The password used to decrypt the &quot;phase 2&quot; private key specified in the &quot;phase2-private-key&quot; property when the private key either uses the path scheme, or is a PKCS#12 format key." />
+ <property name="phase2-private-key-password-flags" type="NMSettingSecretFlags (uint32)" description="Flags indicating how to handle the &quot;phase2-private-key-password&quot; property." />
+ <property name="phase2-subject-match" type="string" description="Substring to be matched against the subject of the certificate presented by the authentication server during the inner &quot;phase 2&quot; authentication. When unset, no verification of the authentication server certificate's subject is performed." />
+ <property name="pin" type="string" description="PIN used for EAP authentication methods." />
+ <property name="pin-flags" type="NMSettingSecretFlags (uint32)" description="Flags indicating how to handle the &quot;pin&quot; property." />
+ <property name="private-key" type="byte array" description="Contains the private key when the &quot;eap&quot; property is set to &quot;tls&quot;. Key data is specified using a &quot;scheme&quot;; 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 &quot;file://&quot; 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 &quot;private-key-password&quot; 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 &quot;file://&quot; and and ending with a terminating NUL byte, and as with the blob scheme the &quot;private-key-password&quot; property must be set to the password used to decode the PKCS#12 private key and certificate. WARNING: &quot;private-key&quot; is not a &quot;secret&quot; 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." />
+ <property name="private-key-password" type="string" description="The password used to decrypt the private key specified in the &quot;private-key&quot; property when the private key either uses the path scheme, or if the private key is a PKCS#12 format key." />
+ <property name="private-key-password-flags" type="NMSettingSecretFlags (uint32)" description="Flags indicating how to handle the &quot;private-key-password&quot; property." />
+ <property name="subject-match" type="string" description="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." />
+ <property name="system-ca-certs" type="boolean" default="FALSE" description="When TRUE, overrides the &quot;ca-path&quot; and &quot;phase2-ca-path&quot; 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 &quot;ca-cert&quot; and &quot;phase2-ca-cert&quot; properties." />
+ </setting>
+ <setting name="adsl">
+ <property name="encapsulation" type="string" description="Encapsulation of ADSL connection. Can be &quot;vcmux&quot; or &quot;llc&quot;." />
+ <property name="name" type="string" default="adsl" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="password" type="string" description="Password used to authenticate with the ADSL service." />
+ <property name="password-flags" type="NMSettingSecretFlags (uint32)" description="Flags indicating how to handle the &quot;password&quot; property." />
+ <property name="protocol" type="string" description="ADSL connection protocol. Can be &quot;pppoa&quot;, &quot;pppoe&quot; or &quot;ipoatm&quot;." />
+ <property name="username" type="string" description="Username used to authenticate with the ADSL service." />
+ <property name="vci" type="uint32" default="0" description="VCI of ADSL connection" />
+ <property name="vpi" type="uint32" default="0" description="VPI of ADSL connection" />
+ </setting>
+ <setting name="bluetooth">
+ <property name="bdaddr" type="byte array" description="The Bluetooth address of the device." />
+ <property name="name" type="string" default="bluetooth" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="type" type="string" description="Either &quot;dun&quot; for Dial-Up Networking connections or &quot;panu&quot; for Personal Area Networking connections to devices supporting the NAP profile." />
+ </setting>
+ <setting name="bond">
+ <property name="name" type="string" default="bond" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="options" type="dict of string to string" description="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])." />
+ </setting>
+ <setting name="bridge">
+ <property name="ageing-time" type="uint32" default="300" description="The Ethernet MAC address aging time, in seconds." />
+ <property name="forward-delay" type="uint32" default="15" description="The Spanning Tree Protocol (STP) forwarding delay, in seconds." />
+ <property name="hello-time" type="uint32" default="2" description="The Spanning Tree Protocol (STP) hello time, in seconds." />
+ <property name="mac-address" type="byte array" description="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." />
+ <property name="max-age" type="uint32" default="20" description="The Spanning Tree Protocol (STP) maximum message age, in seconds." />
+ <property name="name" type="string" default="bridge" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="priority" type="uint32" default="32768" description="Sets the Spanning Tree Protocol (STP) priority for this bridge. Lower values are &quot;better&quot;; the lowest priority bridge will be elected the root bridge." />
+ <property name="stp" type="boolean" default="TRUE" description="Controls whether Spanning Tree Protocol (STP) is enabled for this bridge." />
+ </setting>
+ <setting name="bridge-port">
+ <property name="hairpin-mode" type="boolean" default="FALSE" description="Enables or disabled &quot;hairpin mode&quot; for the port, which allows frames to be sent back out through the port the frame was received on." />
+ <property name="name" type="string" default="bridge-port" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="path-cost" type="uint32" default="100" description="The Spanning Tree Protocol (STP) port cost for destinations via this port." />
+ <property name="priority" type="uint32" default="32" description="The Spanning Tree Protocol (STP) priority of this bridge port." />
+ </setting>
+ <setting name="cdma">
+ <property name="name" type="string" default="cdma" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="number" type="string" description="The number to dial to establish the connection to the CDMA-based mobile broadband network, if any. If not specified, the default number (#777) is used when required." />
+ <property name="password" type="string" description="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." />
+ <property name="password-flags" type="NMSettingSecretFlags (uint32)" description="Flags indicating how to handle the &quot;password&quot; property." />
+ <property name="username" type="string" description="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." />
+ </setting>
+ <setting name="connection">
+ <property name="autoconnect" type="boolean" default="TRUE" description="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." />
+ <property name="autoconnect-priority" type="int32" default="0" description="The autoconnect priority. If the connection is set to autoconnect, connections with higher priority will be preferred. Defaults to 0. The higher number means higher priority." />
+ <property name="gateway-ping-timeout" type="uint32" default="0" description="If greater than zero, delay success of IP addressing until either the timeout is reached, or an IP gateway replies to a ping." />
+ <property name="id" type="string" description="A human readable unique identifier for the connection, like &quot;Work Wi-Fi&quot; or &quot;T-Mobile 3G&quot;." />
+ <property name="interface-name" type="string" description="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 software devices this specifies the name of the created device. 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." />
+ <property name="master" type="string" description="Interface name of the master device or UUID of the master connection." />
+ <property name="name" type="string" default="connection" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="permissions" type="array of string" default="[]" description="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 list. Each entry is of the form &quot;[type]:[id]:[reserved]&quot;; for example, &quot;user:dcbw:blah&quot;. At this time only the &quot;user&quot; [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 &quot;:&quot; 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." />
+ <property name="read-only" type="boolean" default="FALSE" description="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." />
+ <property name="secondaries" type="array of string" default="[]" description="List of connection UUIDs that should be activated when the base connection itself is activated. Currently only VPN connections are supported." />
+ <property name="slave-type" type="string" description="Setting name of the device type of this slave's master connection (eg, &quot;bond&quot;), or NULL if this connection is not a slave." />
+ <property name="timestamp" type="uint64" default="0" description="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)." />
+ <property name="type" type="string" description="Base type of the connection. For hardware-dependent connections, should contain the setting name of the hardware-type specific setting (ie, &quot;802-3-ethernet&quot; or &quot;802-11-wireless&quot; or &quot;bluetooth&quot;, etc), and for non-hardware dependent connections like VPN or otherwise, should contain the setting name of that setting type (ie, &quot;vpn&quot; or &quot;bridge&quot;, etc)." />
+ <property name="uuid" type="string" description="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, it should not be changed when the &quot;id&quot; property or NMSettingIP4Config changes, but might need to be re-created when the Wi-Fi SSID, mobile broadband network provider, or &quot;type&quot; property changes. The UUID must be in the format &quot;2815492f-7e56-435e-b2e9-246bd7cdc664&quot; (ie, contains only hexadecimal characters and &quot;-&quot;)." />
+ <property name="zone" type="string" description="The trust level of a the connection. Free form case-insensitive string (for example &quot;Home&quot;, &quot;Work&quot;, &quot;Public&quot;). NULL or unspecified zone means the connection will be placed in the default zone as defined by the firewall." />
+ </setting>
+ <setting name="dcb">
+ <property name="app-fcoe-flags" type="NMSettingDcbFlags (uint32)" description="Specifies the NMSettingDcbFlags for the DCB FCoE application. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4)." />
+ <property name="app-fcoe-mode" type="string" default="&quot;fabric&quot;" description="The FCoE controller mode; either &quot;fabric&quot; (default) or &quot;vn2vn&quot;." />
+ <property name="app-fcoe-priority" type="int32" default="-1" description="The highest User Priority (0 - 7) which FCoE frames should use, or -1 for default priority. Only used when the &quot;app-fcoe-flags&quot; property includes the NM_SETTING_DCB_FLAG_ENABLE (0x1) flag." />
+ <property name="app-fip-flags" type="NMSettingDcbFlags (uint32)" description="Specifies the NMSettingDcbFlags for the DCB FIP application. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4)." />
+ <property name="app-fip-priority" type="int32" default="-1" description="The highest User Priority (0 - 7) which FIP frames should use, or -1 for default priority. Only used when the &quot;app-fip-flags&quot; property includes the NM_SETTING_DCB_FLAG_ENABLE (0x1) flag." />
+ <property name="app-iscsi-flags" type="NMSettingDcbFlags (uint32)" description="Specifies the NMSettingDcbFlags for the DCB iSCSI application. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4)." />
+ <property name="app-iscsi-priority" type="int32" default="-1" description="The highest User Priority (0 - 7) which iSCSI frames should use, or -1 for default priority. Only used when the &quot;app-iscsi-flags&quot; property includes the NM_SETTING_DCB_FLAG_ENABLE (0x1) flag." />
+ <property name="name" type="string" default="dcb" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="priority-bandwidth" type="array of uint32" description="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." />
+ <property name="priority-flow-control" type="array of uint32" description="An array of 8 boolean 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." />
+ <property name="priority-flow-control-flags" type="NMSettingDcbFlags (uint32)" description="Specifies the NMSettingDcbFlags for DCB Priority Flow Control (PFC). Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4)." />
+ <property name="priority-group-bandwidth" type="array of uint32" description="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." />
+ <property name="priority-group-flags" type="NMSettingDcbFlags (uint32)" description="Specifies the NMSettingDcbFlags for DCB Priority Groups. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4)." />
+ <property name="priority-group-id" type="array of uint32" description="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." />
+ <property name="priority-strict-bandwidth" type="array of uint32" description="An array of 8 boolean 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." />
+ <property name="priority-traffic-class" type="array of uint32" description="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." />
+ </setting>
+ <setting name="generic">
+ <property name="name" type="string" default="generic" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ </setting>
+ <setting name="gsm">
+ <property name="apn" type="string" description="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." />
+ <property name="home-only" type="boolean" default="FALSE" description="When TRUE, only connections to the home network will be allowed. Connections to roaming networks will not be made." />
+ <property name="name" type="string" default="gsm" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="network-id" type="string" description="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." />
+ <property name="number" type="string" description="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." />
+ <property name="password" type="string" description="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." />
+ <property name="password-flags" type="NMSettingSecretFlags (uint32)" description="Flags indicating how to handle the &quot;password&quot; property." />
+ <property name="pin" type="string" description="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." />
+ <property name="pin-flags" type="NMSettingSecretFlags (uint32)" description="Flags indicating how to handle the &quot;pin&quot; property." />
+ <property name="username" type="string" description="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." />
+ </setting>
+ <setting name="infiniband">
+ <property name="mac-address" type="byte array" description="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)." />
+ <property name="mtu" type="uint32" default="0" description="If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple frames." />
+ <property name="name" type="string" default="infiniband" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="p-key" type="int32" default="-1" description="The InfiniBand P_Key to use for this device. A value of -1 means to use the default P_Key (aka &quot;the P_Key at index 0&quot;). Otherwise it is a 16-bit unsigned integer, whose high bit is set if it is a &quot;full membership&quot; P_Key." />
+ <property name="parent" type="string" description="The interface name of the parent device of this device. Normally NULL, but if the &quot;p_key&quot; property is set, then you must specify the base device by setting either this property or &quot;mac-address&quot;." />
+ <property name="transport-mode" type="string" description="The IP-over-InfiniBand transport mode. Either &quot;datagram&quot; or &quot;connected&quot;." />
+ </setting>
+ <setting name="ipv4">
+ <property name="addresses" type="array of array of uint32" description="Array of IP addresses." />
+ <property name="dhcp-client-id" type="string" description="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." />
+ <property name="dhcp-hostname" type="string" description="If the &quot;dhcp-send-hostname&quot; property is TRUE, then the specified name will be sent to the DHCP server when acquiring a lease." />
+ <property name="dhcp-send-hostname" type="boolean" default="TRUE" description="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 &quot;dhcp-hostname&quot; property is NULL and this property is TRUE, the current persistent hostname of the computer is sent." />
+ <property name="dns" type="array of uint32" default="[]" description="Array of IP addresses of DNS servers." />
+ <property name="dns-search" type="array of string" default="[]" description="Array of DNS search domains." />
+ <property name="gateway" type="string" description="The gateway associated with this configuration. This is only meaningful if &quot;addresses&quot; is also set." />
+ <property name="ignore-auto-dns" type="boolean" default="FALSE" description="When &quot;method&quot; is set to &quot;auto&quot; and this property to TRUE, automatically configured nameservers and search domains are ignored and only nameservers and search domains specified in the &quot;dns&quot; and &quot;dns-search&quot; properties, if any, are used." />
+ <property name="ignore-auto-routes" type="boolean" default="FALSE" description="When &quot;method&quot; is set to &quot;auto&quot; and this property to TRUE, automatically configured routes are ignored and only routes specified in the &quot;routes&quot; property, if any, are used." />
+ <property name="may-fail" type="boolean" default="TRUE" description="If TRUE, allow overall network configuration to proceed even if the configuration specified by this property 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 on the NMSettingIP4Config allows the overall network configuration to succeed if IPv4 configuration fails but IPv6 configuration completes successfully." />
+ <property name="method" type="string" description="IP configuration method. NMSettingIP4Config and NMSettingIP6Config both support &quot;auto&quot;, &quot;manual&quot;, and &quot;link-local&quot;. See the subclass-specific documentation for other values. In general, for the &quot;auto&quot; method, properties such as &quot;dns&quot; and &quot;routes&quot; specify information that is added on to the information returned from automatic configuration. The &quot;ignore-auto-routes&quot; and &quot;ignore-auto-dns&quot; properties modify this behavior. For methods that imply no upstream network, such as &quot;shared&quot; or &quot;link-local&quot;, these properties must be empty." />
+ <property name="name" type="string" default="ipv4" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="never-default" type="boolean" default="FALSE" description="If TRUE, this connection will never be the default connection for this IP type, meaning it will never be assigned the default route by NetworkManager." />
+ <property name="route-metric" type="int64" default="-1" description="The default metric for routes that don't explicitly specify a metric. The default value -1 means that the metric is choosen automatically based on the device type. The metric applies to dynamic routes, manual (static) routes that don't have an explicit metric setting, address prefix routes, and the default route. Note that for IPv6, the kernel accepts zero (0) but coerces it to 1024 (user default). Hence, setting this property to zero effectively mean setting it to 1024. For IPv4, zero is a regular value for the metric." />
+ <property name="routes" type="array of array of uint32" description="Array of IP routes." />
+ </setting>
+ <setting name="ipv6">
+ <property name="addresses" type="array of legacy IPv6 address struct" description="Array of IP addresses." />
+ <property name="dhcp-hostname" type="string" description="If the &quot;dhcp-send-hostname&quot; property is TRUE, then the specified name will be sent to the DHCP server when acquiring a lease." />
+ <property name="dhcp-send-hostname" type="boolean" default="TRUE" description="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 &quot;dhcp-hostname&quot; property is NULL and this property is TRUE, the current persistent hostname of the computer is sent." />
+ <property name="dns" type="array of byte array" default="[]" description="Array of IP addresses of DNS servers." />
+ <property name="dns-search" type="array of string" default="[]" description="Array of DNS search domains." />
+ <property name="gateway" type="string" description="The gateway associated with this configuration. This is only meaningful if &quot;addresses&quot; is also set." />
+ <property name="ignore-auto-dns" type="boolean" default="FALSE" description="When &quot;method&quot; is set to &quot;auto&quot; and this property to TRUE, automatically configured nameservers and search domains are ignored and only nameservers and search domains specified in the &quot;dns&quot; and &quot;dns-search&quot; properties, if any, are used." />
+ <property name="ignore-auto-routes" type="boolean" default="FALSE" description="When &quot;method&quot; is set to &quot;auto&quot; and this property to TRUE, automatically configured routes are ignored and only routes specified in the &quot;routes&quot; property, if any, are used." />
+ <property name="ip6-privacy" type="NMSettingIP6ConfigPrivacy (int32)" description="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)." />
+ <property name="may-fail" type="boolean" default="TRUE" description="If TRUE, allow overall network configuration to proceed even if the configuration specified by this property 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 on the NMSettingIP4Config allows the overall network configuration to succeed if IPv4 configuration fails but IPv6 configuration completes successfully." />
+ <property name="method" type="string" description="IP configuration method. NMSettingIP4Config and NMSettingIP6Config both support &quot;auto&quot;, &quot;manual&quot;, and &quot;link-local&quot;. See the subclass-specific documentation for other values. In general, for the &quot;auto&quot; method, properties such as &quot;dns&quot; and &quot;routes&quot; specify information that is added on to the information returned from automatic configuration. The &quot;ignore-auto-routes&quot; and &quot;ignore-auto-dns&quot; properties modify this behavior. For methods that imply no upstream network, such as &quot;shared&quot; or &quot;link-local&quot;, these properties must be empty." />
+ <property name="name" type="string" default="ipv6" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="never-default" type="boolean" default="FALSE" description="If TRUE, this connection will never be the default connection for this IP type, meaning it will never be assigned the default route by NetworkManager." />
+ <property name="route-metric" type="int64" default="-1" description="The default metric for routes that don't explicitly specify a metric. The default value -1 means that the metric is choosen automatically based on the device type. The metric applies to dynamic routes, manual (static) routes that don't have an explicit metric setting, address prefix routes, and the default route. Note that for IPv6, the kernel accepts zero (0) but coerces it to 1024 (user default). Hence, setting this property to zero effectively mean setting it to 1024. For IPv4, zero is a regular value for the metric." />
+ <property name="routes" type="array of legacy IPv6 route struct" description="Array of IP routes." />
+ </setting>
+ <setting name="802-11-olpc-mesh">
+ <property name="channel" type="uint32" default="0" description="Channel on which the mesh network to join is located." />
+ <property name="dhcp-anycast-address" type="byte array" description="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." />
+ <property name="name" type="string" default="802-11-olpc-mesh" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="ssid" type="byte array" description="SSID of the mesh network to join." />
+ </setting>
+ <setting name="ppp">
+ <property name="baud" type="uint32" default="0" description="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." />
+ <property name="crtscts" type="boolean" default="FALSE" description="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." />
+ <property name="lcp-echo-failure" type="uint32" default="0" description="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 &quot;lcp-echo-interval&quot; property must also be set to a non-zero value if this property is used." />
+ <property name="lcp-echo-interval" type="uint32" default="0" description="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." />
+ <property name="mppe-stateful" type="boolean" default="FALSE" description="If TRUE, stateful MPPE is used. See pppd documentation for more information on stateful MPPE." />
+ <property name="mru" type="uint32" default="0" description="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." />
+ <property name="mtu" type="uint32" default="0" description="If non-zero, instruct pppd to send packets no larger than the specified size." />
+ <property name="name" type="string" default="ppp" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="no-vj-comp" type="boolean" default="FALSE" description="If TRUE, Van Jacobsen TCP header compression will not be requested." />
+ <property name="noauth" type="boolean" default="TRUE" description="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." />
+ <property name="nobsdcomp" type="boolean" default="FALSE" description="If TRUE, BSD compression will not be requested." />
+ <property name="nodeflate" type="boolean" default="FALSE" description="If TRUE, &quot;deflate&quot; compression will not be requested." />
+ <property name="refuse-chap" type="boolean" default="FALSE" description="If TRUE, the CHAP authentication method will not be used." />
+ <property name="refuse-eap" type="boolean" default="FALSE" description="If TRUE, the EAP authentication method will not be used." />
+ <property name="refuse-mschap" type="boolean" default="FALSE" description="If TRUE, the MSCHAP authentication method will not be used." />
+ <property name="refuse-mschapv2" type="boolean" default="FALSE" description="If TRUE, the MSCHAPv2 authentication method will not be used." />
+ <property name="refuse-pap" type="boolean" default="FALSE" description="If TRUE, the PAP authentication method will not be used." />
+ <property name="require-mppe" type="boolean" default="FALSE" description="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." />
+ <property name="require-mppe-128" type="boolean" default="FALSE" description="If TRUE, 128-bit MPPE (Microsoft Point-to-Point Encrpytion) will be required for the PPP session, and the &quot;require-mppe&quot; property must also be set to TRUE. If 128-bit MPPE is not available the session will fail." />
+ </setting>
+ <setting name="pppoe">
+ <property name="name" type="string" default="pppoe" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="password" type="string" description="Password used to authenticate with the PPPoE service." />
+ <property name="password-flags" type="NMSettingSecretFlags (uint32)" description="Flags indicating how to handle the &quot;password&quot; property." />
+ <property name="service" type="string" description="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." />
+ <property name="username" type="string" description="Username used to authenticate with the PPPoE service." />
+ </setting>
+ <setting name="serial">
+ <property name="baud" type="uint32" default="57600" description="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." />
+ <property name="bits" type="uint32" default="8" description="Byte-width of the serial communication. The 8 in &quot;8n1&quot; for example." />
+ <property name="name" type="string" default="serial" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="parity" type="NMSettingSerialParity (byte)" description="Parity setting of the serial port." />
+ <property name="send-delay" type="uint64" default="0" description="Time to delay between each byte sent to the modem, in microseconds." />
+ <property name="stopbits" type="uint32" default="1" description="Number of stop bits for communication on the serial port. Either 1 or 2. The 1 in &quot;8n1&quot; for example." />
+ </setting>
+ <setting name="team">
+ <property name="config" type="string" description="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." />
+ <property name="name" type="string" default="team" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ </setting>
+ <setting name="team-port">
+ <property name="config" type="string" description="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." />
+ <property name="name" type="string" default="team-port" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ </setting>
+ <setting name="vlan">
+ <property name="egress-priority-map" type="array of string" default="[]" description="For outgoing packets, a list of mappings from Linux SKB priorities to 802.1p priorities. The mapping is given in the format &quot;from:to&quot; where both &quot;from&quot; and &quot;to&quot; are unsigned integers, ie &quot;7:3&quot;." />
+ <property name="flags" type="NMVlanFlags (uint32)" description="One or more flags which control the behavior and features of the VLAN interface. Flags include NM_VLAN_FLAG_REORDER_HEADERS (0x1) (reordering of output packet headers), NM_VLAN_FLAG_GVRP (0x2) (use of the GVRP protocol), and NM_VLAN_FLAG_LOOSE_BINDING (0x4) (loose binding of the interface to its master device's operating state)." />
+ <property name="id" type="uint32" default="0" description="The VLAN identifier that the interface created by this connection should be assigned." />
+ <property name="ingress-priority-map" type="array of string" default="[]" description="For incoming packets, a list of mappings from 802.1p priorities to Linux SKB priorities. The mapping is given in the format &quot;from:to&quot; where both &quot;from&quot; and &quot;to&quot; are unsigned integers, ie &quot;7:3&quot;." />
+ <property name="name" type="string" default="vlan" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="parent" type="string" description="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 &quot;802-3-ethernet&quot; setting with a &quot;mac-address&quot; property." />
+ </setting>
+ <setting name="vpn">
+ <property name="data" type="dict of string to string" description="Dictionary of key/value pairs of VPN plugin specific data. Both keys and values must be strings." />
+ <property name="name" type="string" default="vpn" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="persistent" type="boolean" default="FALSE" description="If the VPN service supports persistence, and this property is TRUE, the VPN will attempt to stay connected across link changes and outages, until explicitly disconnected." />
+ <property name="secrets" type="dict of string to string" description="Dictionary of key/value pairs of VPN plugin specific secrets like passwords or private keys. Both keys and values must be strings." />
+ <property name="service-type" type="string" description="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." />
+ <property name="user-name" type="string" description="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." />
+ </setting>
+ <setting name="wimax">
+ <property name="mac-address" type="byte array" description="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)." />
+ <property name="name" type="string" default="wimax" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="network-name" type="string" description="Network Service Provider (NSP) name of the WiMAX network this connection should use." />
+ </setting>
+ <setting name="802-3-ethernet">
+ <property name="auto-negotiate" type="boolean" default="TRUE" description="If TRUE, allow auto-negotiation of port speed and duplex mode. If FALSE, do not allow auto-negotiation, in which case the &quot;speed&quot; and &quot;duplex&quot; properties should be set." />
+ <property name="cloned-mac-address" type="byte array" description="If specified, request that the device use this MAC address instead of its permanent MAC address. This is known as MAC cloning or spoofing." />
+ <property name="duplex" type="string" description="If specified, request that the device only use the specified duplex mode. Either &quot;half&quot; or &quot;full&quot;." />
+ <property name="mac-address" type="byte array" description="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)." />
+ <property name="mac-address-blacklist" type="array of string" default="[]" description="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)." />
+ <property name="mtu" type="uint32" default="0" description="If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames." />
+ <property name="name" type="string" default="802-3-ethernet" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="port" type="string" description="Specific port type to use if multiple the device supports multiple attachment methods. One of &quot;tp&quot; (Twisted Pair), &quot;aui&quot; (Attachment Unit Interface), &quot;bnc&quot; (Thin Ethernet) or &quot;mii&quot; (Media Independent Interface. If the device supports only one port type, this setting is ignored." />
+ <property name="s390-nettype" type="string" description="s390 network device type; one of &quot;qeth&quot;, &quot;lcs&quot;, or &quot;ctc&quot;, representing the different types of virtual network devices available on s390 systems." />
+ <property name="s390-options" type="dict of string to string" description="Dictionary of key/value pairs of s390-specific device options. Both keys and values must be strings. Allowed keys include &quot;portno&quot;, &quot;layer2&quot;, &quot;portname&quot;, &quot;protocol&quot;, among others. Key names must contain only alphanumeric characters (ie, [a-zA-Z0-9])." />
+ <property name="s390-subchannels" type="array of string" default="[]" description="Identifies specific subchannels that this network device uses for communication with z/VM or s390 host. Like the &quot;mac-address&quot; 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." />
+ <property name="speed" type="uint32" default="0" description="If non-zero, request that the device use only the specified speed. In Mbit/s, ie 100 == 100Mbit/s." />
+ </setting>
+ <setting name="802-11-wireless">
+ <property name="band" type="string" description="802.11 frequency band of the network. One of &quot;a&quot; for 5GHz 802.11a or &quot;bg&quot; for 2.4GHz 802.11. This will lock associations to the Wi-Fi network to the specific band, i.e. if &quot;a&quot; 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." />
+ <property name="bssid" type="byte array" description="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." />
+ <property name="channel" type="uint32" default="0" description="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 &quot;band&quot; property to be set." />
+ <property name="cloned-mac-address" type="byte array" description="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." />
+ <property name="hidden" type="boolean" default="FALSE" description="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." />
+ <property name="mac-address" type="byte array" description="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)." />
+ <property name="mac-address-blacklist" type="array of string" default="[]" description="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 &quot;00:11:22:33:44:55&quot;)." />
+ <property name="mode" type="string" description="Wi-Fi network mode; one of &quot;infrastructure&quot;, &quot;adhoc&quot; or &quot;ap&quot;. If blank, infrastructure is assumed." />
+ <property name="mtu" type="uint32" default="0" description="If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames." />
+ <property name="name" type="string" default="802-11-wireless" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="rate" type="uint32" default="0" description="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." />
+ <property name="seen-bssids" type="array of string" default="[]" description="A list of BSSIDs (each BSSID formatted as a MAC address like &quot;00:11:22:33:44:55&quot;) 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." />
+ <property name="ssid" type="byte array" description="SSID of the Wi-Fi network. Must be specified." />
+ <property name="tx-power" type="uint32" default="0" description="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." />
+ </setting>
+ <setting name="802-11-wireless-security">
+ <property name="auth-alg" type="string" description="When WEP is used (ie, key-mgmt = &quot;none&quot; or &quot;ieee8021x&quot;) indicate the 802.11 authentication algorithm required by the AP here. One of &quot;open&quot; for Open System, &quot;shared&quot; for Shared Key, or &quot;leap&quot; for Cisco LEAP. When using Cisco LEAP (ie, key-mgmt = &quot;ieee8021x&quot; and auth-alg = &quot;leap&quot;) the &quot;leap-username&quot; and &quot;leap-password&quot; properties must be specified." />
+ <property name="group" type="array of string" default="[]" description="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 &quot;wep40&quot;, &quot;wep104&quot;, &quot;tkip&quot;, or &quot;ccmp&quot;." />
+ <property name="key-mgmt" type="string" description="Key management used for the connection. One of &quot;none&quot; (WEP), &quot;ieee8021x&quot; (Dynamic WEP), &quot;wpa-none&quot; (Ad-Hoc WPA-PSK), &quot;wpa-psk&quot; (infrastructure WPA-PSK), or &quot;wpa-eap&quot; (WPA-Enterprise). This property must be set for any Wi-Fi connection that uses security." />
+ <property name="leap-password" type="string" description="The login password for legacy LEAP connections (ie, key-mgmt = &quot;ieee8021x&quot; and auth-alg = &quot;leap&quot;)." />
+ <property name="leap-password-flags" type="NMSettingSecretFlags (uint32)" description="Flags indicating how to handle the &quot;leap-password&quot; property." />
+ <property name="leap-username" type="string" description="The login username for legacy LEAP connections (ie, key-mgmt = &quot;ieee8021x&quot; and auth-alg = &quot;leap&quot;)." />
+ <property name="name" type="string" default="802-11-wireless-security" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="pairwise" type="array of string" default="[]" description="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 &quot;tkip&quot; or &quot;ccmp&quot;." />
+ <property name="proto" type="array of string" default="[]" description="List of strings specifying the allowed WPA protocol versions to use. Each element may be one &quot;wpa&quot; (allow WPA) or &quot;rsn&quot; (allow WPA2/RSN). If not specified, both WPA and RSN connections are allowed." />
+ <property name="psk" type="string" description="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." />
+ <property name="psk-flags" type="NMSettingSecretFlags (uint32)" description="Flags indicating how to handle the &quot;psk&quot; property." />
+ <property name="wep-key-flags" type="NMSettingSecretFlags (uint32)" description="Flags indicating how to handle the &quot;wep-key0&quot;, &quot;wep-key1&quot;, &quot;wep-key2&quot;, and &quot;wep-key3&quot; properties." />
+ <property name="wep-key-type" type="NMWepKeyType (uint32)" description="Controls the interpretation of WEP keys. Allowed values are NM_WEP_KEY_TYPE_KEY (1), 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 (2), 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." />
+ <property name="wep-key0" type="string" description="Index 0 WEP key. This is the WEP key used in most networks. See the &quot;wep-key-type&quot; property for a description of how this key is interpreted." />
+ <property name="wep-key1" type="string" description="Index 1 WEP key. This WEP index is not used by most networks. See the &quot;wep-key-type&quot; property for a description of how this key is interpreted." />
+ <property name="wep-key2" type="string" description="Index 2 WEP key. This WEP index is not used by most networks. See the &quot;wep-key-type&quot; property for a description of how this key is interpreted." />
+ <property name="wep-key3" type="string" description="Index 3 WEP key. This WEP index is not used by most networks. See the &quot;wep-key-type&quot; property for a description of how this key is interpreted." />
+ <property name="wep-tx-keyidx" type="uint32" default="0" description="When static WEP is used (ie, key-mgmt = &quot;none&quot;) 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." />
+ </setting>
+</nm-setting-docs>
diff --git a/libnm/nm-remote-connection-private.h b/libnm/nm-remote-connection-private.h
new file mode 100644
index 000000000..e3f35428c
--- /dev/null
+++ b/libnm/nm-remote-connection-private.h
@@ -0,0 +1,33 @@
+/* -*- 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 2009 Red Hat, Inc.
+ */
+
+#ifndef __NM_REMOTE_CONNECTION_PRIVATE_H__
+#define __NM_REMOTE_CONNECTION_PRIVATE_H__
+
+#define NM_REMOTE_CONNECTION_INIT_RESULT "init-result"
+
+typedef enum {
+ NM_REMOTE_CONNECTION_INIT_RESULT_UNKNOWN = 0,
+ NM_REMOTE_CONNECTION_INIT_RESULT_SUCCESS,
+ NM_REMOTE_CONNECTION_INIT_RESULT_ERROR,
+ NM_REMOTE_CONNECTION_INIT_RESULT_INVISIBLE,
+} NMRemoteConnectionInitResult;
+
+#endif /* __NM_REMOTE_CONNECTION_PRIVATE__ */
diff --git a/libnm/nm-remote-connection.c b/libnm/nm-remote-connection.c
new file mode 100644
index 000000000..3afe7f8eb
--- /dev/null
+++ b/libnm/nm-remote-connection.c
@@ -0,0 +1,857 @@
+/* -*- 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 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2011 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <gio/gio.h>
+#include <glib/gi18n-lib.h>
+
+#include <nm-dbus-interface.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-glib-compat.h"
+#include "nm-dbus-helpers.h"
+
+#include "nmdbus-settings-connection.h"
+
+static void nm_remote_connection_connection_iface_init (NMConnectionInterface *iface);
+static void nm_remote_connection_initable_iface_init (GInitableIface *iface);
+static void nm_remote_connection_async_initable_iface_init (GAsyncInitableIface *iface);
+static GInitableIface *nm_remote_connection_parent_initable_iface;
+static GAsyncInitableIface *nm_remote_connection_parent_async_initable_iface;
+
+G_DEFINE_TYPE_WITH_CODE (NMRemoteConnection, nm_remote_connection, NM_TYPE_OBJECT,
+ G_IMPLEMENT_INTERFACE (NM_TYPE_CONNECTION, nm_remote_connection_connection_iface_init);
+ G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, nm_remote_connection_initable_iface_init);
+ G_IMPLEMENT_INTERFACE (G_TYPE_ASYNC_INITABLE, nm_remote_connection_async_initable_iface_init);
+ )
+
+enum {
+ PROP_0,
+ PROP_UNSAVED,
+ PROP_VISIBLE,
+
+ LAST_PROP
+};
+
+typedef struct {
+ NMDBusSettingsConnection *proxy;
+
+ 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_commit_changes:
+ * @connection: the #NMRemoteConnection
+ * @save_to_disk: whether to persist the changes to disk
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: location for a #GError, or %NULL
+ *
+ * Send any local changes to the settings and properties of @connection to
+ * NetworkManager. If @save_to_disk is %TRUE, the updated connection will be saved to
+ * disk; if %FALSE, then only the in-memory representation will be changed.
+ *
+ * Returns: %TRUE on success, %FALSE on error, in which case @error will be set.
+ **/
+gboolean
+nm_remote_connection_commit_changes (NMRemoteConnection *connection,
+ gboolean save_to_disk,
+ GCancellable *cancellable,
+ GError **error)
+{
+ NMRemoteConnectionPrivate *priv;
+ GVariant *settings;
+ gboolean ret;
+
+ g_return_val_if_fail (NM_IS_REMOTE_CONNECTION (connection), FALSE);
+
+ priv = NM_REMOTE_CONNECTION_GET_PRIVATE (connection);
+
+ settings = nm_connection_to_dbus (NM_CONNECTION (connection), NM_CONNECTION_SERIALIZE_ALL);
+ if (save_to_disk) {
+ ret = nmdbus_settings_connection_call_update_sync (priv->proxy,
+ settings,
+ cancellable, error);
+ } else {
+ ret = nmdbus_settings_connection_call_update_unsaved_sync (priv->proxy,
+ settings,
+ cancellable, error);
+ }
+ if (error && *error)
+ g_dbus_error_strip_remote_error (*error);
+ return ret;
+}
+
+static void
+update_cb (GObject *proxy, GAsyncResult *result, gpointer user_data)
+{
+ GSimpleAsyncResult *simple = user_data;
+ gboolean (*finish_func) (NMDBusSettingsConnection *, GAsyncResult *, GError **);
+ GError *error = NULL;
+
+ finish_func = g_object_get_data (G_OBJECT (simple), "finish_func");
+ if (finish_func (NMDBUS_SETTINGS_CONNECTION (proxy), result, &error))
+ g_simple_async_result_set_op_res_gboolean (simple, TRUE);
+ else {
+ g_dbus_error_strip_remote_error (error);
+ g_simple_async_result_take_error (simple, error);
+ }
+ g_simple_async_result_complete (simple);
+ g_object_unref (simple);
+}
+
+/**
+ * nm_remote_connection_commit_changes_async:
+ * @connection: the #NMRemoteConnection
+ * @save_to_disk: whether to save the changes to persistent storage
+ * @cancellable: a #GCancellable, or %NULL
+ * @callback: callback to be called when the commit operation completes
+ * @user_data: caller-specific data passed to @callback
+ *
+ * Asynchronously sends any local changes to the settings and properties of
+ * @connection to NetworkManager. If @save is %TRUE, the updated connection will
+ * be saved to disk; if %FALSE, then only the in-memory representation will be
+ * changed.
+ **/
+void
+nm_remote_connection_commit_changes_async (NMRemoteConnection *connection,
+ gboolean save_to_disk,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ NMRemoteConnectionPrivate *priv;
+ GSimpleAsyncResult *simple;
+ GVariant *settings;
+
+ g_return_if_fail (NM_IS_REMOTE_CONNECTION (connection));
+
+ priv = NM_REMOTE_CONNECTION_GET_PRIVATE (connection);
+
+ simple = g_simple_async_result_new (G_OBJECT (connection), callback, user_data,
+ nm_remote_connection_commit_changes_async);
+
+ settings = nm_connection_to_dbus (NM_CONNECTION (connection), NM_CONNECTION_SERIALIZE_ALL);
+ if (save_to_disk) {
+ g_object_set_data (G_OBJECT (simple), "finish_func",
+ nmdbus_settings_connection_call_update_finish);
+ nmdbus_settings_connection_call_update (priv->proxy,
+ settings,
+ cancellable,
+ update_cb, simple);
+ } else {
+ g_object_set_data (G_OBJECT (simple), "finish_func",
+ nmdbus_settings_connection_call_update_unsaved_finish);
+ nmdbus_settings_connection_call_update_unsaved (priv->proxy,
+ settings,
+ cancellable,
+ update_cb, simple);
+ }
+}
+
+/**
+ * nm_remote_connection_commit_changes_finish:
+ * @connection: the #NMRemoteConnection
+ * @result: the result passed to the #GAsyncReadyCallback
+ * @error: location for a #GError, or %NULL
+ *
+ * Gets the result of a call to nm_remote_connection_commit_changes_async().
+ *
+ * Returns: %TRUE on success, %FALSE on error, in which case @error will be set.
+ **/
+gboolean
+nm_remote_connection_commit_changes_finish (NMRemoteConnection *connection,
+ GAsyncResult *result,
+ GError **error)
+{
+ GSimpleAsyncResult *simple;
+
+ g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (connection), nm_remote_connection_commit_changes_async), FALSE);
+
+ simple = G_SIMPLE_ASYNC_RESULT (result);
+ if (g_simple_async_result_propagate_error (simple, error))
+ return FALSE;
+ else
+ return g_simple_async_result_get_op_res_gboolean (simple);
+}
+
+/**
+ * nm_remote_connection_save:
+ * @connection: the #NMRemoteConnection
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: location for a #GError, or %NULL
+ *
+ * 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.
+ *
+ * Returns: %TRUE on success, %FALSE on error, in which case @error will be set.
+ **/
+gboolean
+nm_remote_connection_save (NMRemoteConnection *connection,
+ GCancellable *cancellable,
+ GError **error)
+{
+ NMRemoteConnectionPrivate *priv;
+ gboolean ret;
+
+ g_return_val_if_fail (NM_IS_REMOTE_CONNECTION (connection), FALSE);
+
+ priv = NM_REMOTE_CONNECTION_GET_PRIVATE (connection);
+
+ ret = nmdbus_settings_connection_call_save_sync (priv->proxy, cancellable, error);
+ if (error && *error)
+ g_dbus_error_strip_remote_error (*error);
+ return ret;
+}
+
+static void
+save_cb (GObject *proxy, GAsyncResult *result, gpointer user_data)
+{
+ GSimpleAsyncResult *simple = user_data;
+ GError *error = NULL;
+
+ if (nmdbus_settings_connection_call_save_finish (NMDBUS_SETTINGS_CONNECTION (proxy),
+ result, &error))
+ g_simple_async_result_set_op_res_gboolean (simple, TRUE);
+ else {
+ g_dbus_error_strip_remote_error (error);
+ g_simple_async_result_take_error (simple, error);
+ }
+ g_simple_async_result_complete (simple);
+ g_object_unref (simple);
+}
+
+/**
+ * nm_remote_connection_save_async:
+ * @connection: the #NMRemoteConnection
+ * @cancellable: a #GCancellable, or %NULL
+ * @callback: callback to be called when the save operation completes
+ * @user_data: caller-specific data 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.
+ **/
+void
+nm_remote_connection_save_async (NMRemoteConnection *connection,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ NMRemoteConnectionPrivate *priv;
+ GSimpleAsyncResult *simple;
+
+ g_return_if_fail (NM_IS_REMOTE_CONNECTION (connection));
+
+ priv = NM_REMOTE_CONNECTION_GET_PRIVATE (connection);
+
+ simple = g_simple_async_result_new (G_OBJECT (connection), callback, user_data,
+ nm_remote_connection_save_async);
+ nmdbus_settings_connection_call_save (priv->proxy, cancellable, save_cb, simple);
+}
+
+/**
+ * nm_remote_connection_save_finish:
+ * @connection: the #NMRemoteConnection
+ * @result: the result passed to the #GAsyncReadyCallback
+ * @error: location for a #GError, or %NULL
+ *
+ * Gets the result of a call to nm_remote_connection_save_async().
+ *
+ * Returns: %TRUE on success, %FALSE on error, in which case @error will be set.
+ **/
+gboolean
+nm_remote_connection_save_finish (NMRemoteConnection *connection,
+ GAsyncResult *result,
+ GError **error)
+{
+ GSimpleAsyncResult *simple;
+
+ g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (connection), nm_remote_connection_save_async), FALSE);
+
+ simple = G_SIMPLE_ASYNC_RESULT (result);
+ if (g_simple_async_result_propagate_error (simple, error))
+ return FALSE;
+ else
+ return g_simple_async_result_get_op_res_gboolean (simple);
+}
+
+/**
+ * nm_remote_connection_delete:
+ * @connection: the #NMRemoteConnection
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: location for a #GError, or %NULL
+ *
+ * Deletes the connection.
+ *
+ * Returns: %TRUE on success, %FALSE on error, in which case @error will be set.
+ **/
+gboolean
+nm_remote_connection_delete (NMRemoteConnection *connection,
+ GCancellable *cancellable,
+ GError **error)
+{
+ NMRemoteConnectionPrivate *priv;
+ gboolean ret;
+
+ g_return_val_if_fail (NM_IS_REMOTE_CONNECTION (connection), FALSE);
+
+ priv = NM_REMOTE_CONNECTION_GET_PRIVATE (connection);
+
+ ret = nmdbus_settings_connection_call_delete_sync (priv->proxy, cancellable, error);
+ if (error && *error)
+ g_dbus_error_strip_remote_error (*error);
+ return ret;
+}
+
+static void
+delete_cb (GObject *proxy, GAsyncResult *result, gpointer user_data)
+{
+ GSimpleAsyncResult *simple = user_data;
+ GError *error = NULL;
+
+ if (nmdbus_settings_connection_call_delete_finish (NMDBUS_SETTINGS_CONNECTION (proxy),
+ result, &error))
+ g_simple_async_result_set_op_res_gboolean (simple, TRUE);
+ else {
+ g_dbus_error_strip_remote_error (error);
+ g_simple_async_result_take_error (simple, error);
+ }
+ g_simple_async_result_complete (simple);
+ g_object_unref (simple);
+}
+
+/**
+ * nm_remote_connection_delete_async:
+ * @connection: the #NMRemoteConnection
+ * @cancellable: a #GCancellable, or %NULL
+ * @callback: callback to be called when the delete operation completes
+ * @user_data: caller-specific data passed to @callback
+ *
+ * Asynchronously deletes the connection.
+ **/
+void
+nm_remote_connection_delete_async (NMRemoteConnection *connection,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ NMRemoteConnectionPrivate *priv;
+ GSimpleAsyncResult *simple;
+
+ g_return_if_fail (NM_IS_REMOTE_CONNECTION (connection));
+
+ priv = NM_REMOTE_CONNECTION_GET_PRIVATE (connection);
+
+ simple = g_simple_async_result_new (G_OBJECT (connection), callback, user_data,
+ nm_remote_connection_delete_async);
+ nmdbus_settings_connection_call_delete (priv->proxy, cancellable, delete_cb, simple);
+}
+
+/**
+ * nm_remote_connection_delete_finish:
+ * @connection: the #NMRemoteConnection
+ * @result: the result passed to the #GAsyncReadyCallback
+ * @error: location for a #GError, or %NULL
+ *
+ * Gets the result of a call to nm_remote_connection_delete_async().
+ *
+ * Returns: %TRUE on success, %FALSE on error, in which case @error will be set.
+ **/
+gboolean
+nm_remote_connection_delete_finish (NMRemoteConnection *connection,
+ GAsyncResult *result,
+ GError **error)
+{
+ GSimpleAsyncResult *simple;
+
+ g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (connection), nm_remote_connection_delete_async), FALSE);
+
+ simple = G_SIMPLE_ASYNC_RESULT (result);
+ if (g_simple_async_result_propagate_error (simple, error))
+ return FALSE;
+ else
+ return g_simple_async_result_get_op_res_gboolean (simple);
+}
+
+/**
+ * nm_remote_connection_get_secrets:
+ * @connection: the #NMRemoteConnection
+ * @setting_name: the #NMSetting object name to get secrets for
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: location for a #GError, or %NULL
+ *
+ * Request the connection's secrets. Note that this is a blocking D-Bus call,
+ * not a simple property accessor.
+ *
+ * Returns: a #GVariant of type %NM_VARIANT_TYPE_CONNECTION containing
+ * @connection's secrets, or %NULL on error.
+ **/
+GVariant *
+nm_remote_connection_get_secrets (NMRemoteConnection *connection,
+ const char *setting_name,
+ GCancellable *cancellable,
+ GError **error)
+{
+ NMRemoteConnectionPrivate *priv;
+ GVariant *secrets;
+
+ g_return_val_if_fail (NM_IS_REMOTE_CONNECTION (connection), NULL);
+
+ priv = NM_REMOTE_CONNECTION_GET_PRIVATE (connection);
+
+ if (nmdbus_settings_connection_call_get_secrets_sync (priv->proxy,
+ setting_name,
+ &secrets,
+ cancellable, error))
+ return secrets;
+ else {
+ if (error && *error)
+ g_dbus_error_strip_remote_error (*error);
+ return NULL;
+ }
+}
+
+static void
+get_secrets_cb (GObject *proxy, GAsyncResult *result, gpointer user_data)
+{
+ GSimpleAsyncResult *simple = user_data;
+ GVariant *secrets = NULL;
+ GError *error = NULL;
+
+ if (nmdbus_settings_connection_call_get_secrets_finish (NMDBUS_SETTINGS_CONNECTION (proxy),
+ &secrets, result, &error))
+ g_simple_async_result_set_op_res_gpointer (simple, secrets, (GDestroyNotify) g_variant_unref);
+ else {
+ g_dbus_error_strip_remote_error (error);
+ g_simple_async_result_take_error (simple, error);
+ }
+
+ g_simple_async_result_complete (simple);
+ g_object_unref (simple);
+}
+
+/**
+ * nm_remote_connection_get_secrets_async:
+ * @connection: the #NMRemoteConnection
+ * @setting_name: the #NMSetting object name to get secrets for
+ * @cancellable: a #GCancellable, or %NULL
+ * @callback: callback to be called when the secret request completes
+ * @user_data: caller-specific data passed to @callback
+ *
+ * Asynchronously requests the connection's secrets.
+ **/
+void
+nm_remote_connection_get_secrets_async (NMRemoteConnection *connection,
+ const char *setting_name,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ NMRemoteConnectionPrivate *priv;
+ GSimpleAsyncResult *simple;
+
+ g_return_if_fail (NM_IS_REMOTE_CONNECTION (connection));
+
+ priv = NM_REMOTE_CONNECTION_GET_PRIVATE (connection);
+
+ simple = g_simple_async_result_new (G_OBJECT (connection), callback, user_data,
+ nm_remote_connection_get_secrets_async);
+
+ nmdbus_settings_connection_call_get_secrets (priv->proxy,
+ setting_name,
+ cancellable,
+ get_secrets_cb, simple);
+}
+
+/**
+ * nm_remote_connection_get_secrets_finish:
+ * @connection: the #NMRemoteConnection
+ * @result: the result passed to the #GAsyncReadyCallback
+ * @error: location for a #GError, or %NULL
+ *
+ * Gets the result of a call to nm_remote_connection_get_secrets_async().
+ *
+ * Returns: (transfer full): a #GVariant of type %NM_VARIANT_TYPE_CONNECTION
+ * containing @connection's secrets, or %NULL on error.
+ **/
+GVariant *
+nm_remote_connection_get_secrets_finish (NMRemoteConnection *connection,
+ GAsyncResult *result,
+ GError **error)
+{
+ GSimpleAsyncResult *simple;
+
+ g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (connection), nm_remote_connection_get_secrets_async), FALSE);
+
+ simple = G_SIMPLE_ASYNC_RESULT (result);
+ if (g_simple_async_result_propagate_error (simple, error))
+ return NULL;
+ else
+ return g_variant_ref (g_simple_async_result_get_op_res_gpointer (simple));
+}
+
+/**
+ * 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.
+ **/
+gboolean
+nm_remote_connection_get_unsaved (NMRemoteConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_REMOTE_CONNECTION (connection), FALSE);
+
+ return NM_REMOTE_CONNECTION_GET_PRIVATE (connection)->unsaved;
+}
+
+/**
+ * nm_remote_connection_get_visible:
+ * @connection: the #NMRemoteConnection
+ *
+ * Checks if the connection is visible to the current user. If the
+ * connection is not visible then it is essentially useless; it will
+ * not contain any settings, and operations such as
+ * nm_remote_connection_save() and nm_remote_connection_delete() will
+ * always fail. (#NMRemoteSettings will not normally return
+ * non-visible connections to callers, but it is possible for a
+ * connection's visibility to change after you already have a
+ * reference to it.)
+ *
+ * Returns: %TRUE if the remote connection is visible to the current
+ * user, %FALSE if not.
+ **/
+gboolean
+nm_remote_connection_get_visible (NMRemoteConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_REMOTE_CONNECTION (connection), FALSE);
+
+ return NM_REMOTE_CONNECTION_GET_PRIVATE (connection)->visible;
+}
+
+/****************************************************************/
+
+static void
+replace_settings (NMRemoteConnection *self, GVariant *new_settings)
+{
+ GError *error = NULL;
+
+ if (!nm_connection_replace_settings (NM_CONNECTION (self), new_settings, &error)) {
+ g_warning ("%s: error updating connection %s settings: (%d) %s",
+ __func__,
+ nm_connection_get_path (NM_CONNECTION (self)),
+ error ? error->code : -1,
+ (error && error->message) ? error->message : "(unknown)");
+ g_clear_error (&error);
+ }
+}
+
+static void
+updated_get_settings_cb (GObject *proxy,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ NMRemoteConnection *self = user_data;
+ NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (self);
+ GVariant *new_settings;
+ gboolean visible;
+
+ if (!nmdbus_settings_connection_call_get_settings_finish (priv->proxy, &new_settings,
+ result, NULL)) {
+ /* Connection is no longer visible to this user. */
+ nm_connection_clear_settings (NM_CONNECTION (self));
+
+ visible = FALSE;
+ } else {
+ replace_settings (self, new_settings);
+ g_variant_unref (new_settings);
+
+ visible = TRUE;
+ }
+
+ if (visible != priv->visible) {
+ priv->visible = visible;
+ g_object_notify (G_OBJECT (self), NM_REMOTE_CONNECTION_VISIBLE);
+ }
+}
+
+static void
+updated_cb (NMDBusSettingsConnection *proxy, gpointer user_data)
+{
+ NMRemoteConnection *self = NM_REMOTE_CONNECTION (user_data);
+ NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (self);
+
+ /* The connection got updated; request the replacement settings */
+ nmdbus_settings_connection_call_get_settings (priv->proxy,
+ NULL,
+ updated_get_settings_cb, self);
+}
+
+/****************************************************************/
+
+static void
+init_dbus (NMObject *object)
+{
+ NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (object);
+ const NMPropertiesInfo property_info[] = {
+ { NM_REMOTE_CONNECTION_UNSAVED, &priv->unsaved },
+ { NULL },
+ };
+
+ NM_OBJECT_CLASS (nm_remote_connection_parent_class)->init_dbus (object);
+
+ priv->proxy = NMDBUS_SETTINGS_CONNECTION (_nm_object_get_proxy (object, NM_DBUS_INTERFACE_SETTINGS_CONNECTION));
+ g_assert (priv->proxy);
+
+ _nm_object_register_properties (object,
+ NM_DBUS_INTERFACE_SETTINGS_CONNECTION,
+ property_info);
+
+ g_signal_connect (priv->proxy, "updated",
+ G_CALLBACK (updated_cb), object);
+}
+
+static gboolean
+init_sync (GInitable *initable, GCancellable *cancellable, GError **error)
+{
+ NMRemoteConnection *self = NM_REMOTE_CONNECTION (initable);
+ NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (initable);
+ GVariant *settings;
+
+ if (!nm_remote_connection_parent_initable_iface->init (initable, cancellable, error))
+ return FALSE;
+
+ if (!nmdbus_settings_connection_call_get_settings_sync (priv->proxy,
+ &settings,
+ cancellable, error)) {
+ if (error && *error)
+ g_dbus_error_strip_remote_error (*error);
+ return FALSE;
+ }
+
+ priv->visible = TRUE;
+ replace_settings (self, settings);
+ g_variant_unref (settings);
+
+ return TRUE;
+}
+
+typedef struct {
+ NMRemoteConnection *connection;
+ GCancellable *cancellable;
+ GSimpleAsyncResult *result;
+} 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);
+
+ g_simple_async_result_complete (init_data->result);
+ g_object_unref (init_data->result);
+ g_clear_object (&init_data->cancellable);
+ g_slice_free (NMRemoteConnectionInitData, init_data);
+}
+
+static void
+init_get_settings_cb (GObject *proxy,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ NMRemoteConnectionInitData *init_data = user_data;
+ NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (init_data->connection);
+ GVariant *settings;
+ GError *error = NULL;
+
+ if (!nmdbus_settings_connection_call_get_settings_finish (priv->proxy, &settings,
+ result, &error)) {
+ g_dbus_error_strip_remote_error (error);
+ init_async_complete (init_data, error);
+ return;
+ }
+
+ priv->visible = TRUE;
+ replace_settings (init_data->connection, settings);
+ g_variant_unref (settings);
+
+ init_async_complete (init_data, NULL);
+}
+
+static void
+init_async_parent_inited (GObject *source, GAsyncResult *result, gpointer user_data)
+{
+ NMRemoteConnectionInitData *init_data = user_data;
+ NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (init_data->connection);
+ GError *error = NULL;
+
+ if (!nm_remote_connection_parent_async_initable_iface->init_finish (G_ASYNC_INITABLE (source), result, &error)) {
+ init_async_complete (init_data, error);
+ return;
+ }
+
+ nmdbus_settings_connection_call_get_settings (priv->proxy,
+ init_data->cancellable,
+ init_get_settings_cb, init_data);
+}
+
+static void
+init_async (GAsyncInitable *initable, int io_priority,
+ GCancellable *cancellable, GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ NMRemoteConnectionInitData *init_data;
+
+ init_data = g_slice_new0 (NMRemoteConnectionInitData);
+ init_data->connection = NM_REMOTE_CONNECTION (initable);
+ init_data->cancellable = cancellable ? g_object_ref (cancellable) : NULL;
+ init_data->result = g_simple_async_result_new (G_OBJECT (initable), callback,
+ user_data, init_async);
+
+ nm_remote_connection_parent_async_initable_iface->
+ init_async (initable, io_priority, cancellable, init_async_parent_inited, init_data);
+}
+
+static gboolean
+init_finish (GAsyncInitable *initable, GAsyncResult *result, GError **error)
+{
+ GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
+
+ if (g_simple_async_result_propagate_error (simple, error))
+ return FALSE;
+ else
+ return TRUE;
+}
+
+static void
+nm_remote_connection_init (NMRemoteConnection *self)
+{
+}
+
+static void
+get_property (GObject *object, guint prop_id,
+ GValue *value, GParamSpec *pspec)
+{
+ switch (prop_id) {
+ case PROP_UNSAVED:
+ g_value_set_boolean (value, NM_REMOTE_CONNECTION_GET_PRIVATE (object)->unsaved);
+ break;
+ case PROP_VISIBLE:
+ g_value_set_boolean (value, NM_REMOTE_CONNECTION_GET_PRIVATE (object)->visible);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+constructed (GObject *object)
+{
+ nm_connection_set_path (NM_CONNECTION (object),
+ nm_object_get_path (NM_OBJECT (object)));
+}
+
+static void
+nm_remote_connection_class_init (NMRemoteConnectionClass *remote_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (remote_class);
+ NMObjectClass *nm_object_class = NM_OBJECT_CLASS (remote_class);
+
+ g_type_class_add_private (object_class, sizeof (NMRemoteConnectionPrivate));
+
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_SETTINGS_CONNECTION);
+ _nm_dbus_register_proxy_type (NM_DBUS_INTERFACE_SETTINGS_CONNECTION,
+ NMDBUS_TYPE_SETTINGS_CONNECTION_PROXY);
+
+ /* virtual methods */
+ object_class->constructed = constructed;
+ object_class->get_property = get_property;
+
+ nm_object_class->init_dbus = init_dbus;
+
+ /* Properties */
+ /**
+ * 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.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_UNSAVED,
+ g_param_spec_boolean (NM_REMOTE_CONNECTION_UNSAVED, "", "",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMRemoteConnection:visible:
+ *
+ * %TRUE if the remote connection is visible to the current user, %FALSE if
+ * not. If the connection is not visible then it is essentially useless; it
+ * will not contain any settings, and operations such as
+ * nm_remote_connection_save() and nm_remote_connection_delete() will always
+ * fail. (#NMRemoteSettings will not normally return non-visible connections
+ * to callers, but it is possible for a connection's visibility to change
+ * after you already have a reference to it.)
+ **/
+ g_object_class_install_property
+ (object_class, PROP_VISIBLE,
+ g_param_spec_boolean (NM_REMOTE_CONNECTION_VISIBLE, "", "",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+}
+
+static void
+nm_remote_connection_connection_iface_init (NMConnectionInterface *iface)
+{
+}
+
+static void
+nm_remote_connection_initable_iface_init (GInitableIface *iface)
+{
+ nm_remote_connection_parent_initable_iface = g_type_interface_peek_parent (iface);
+
+ iface->init = init_sync;
+}
+
+static void
+nm_remote_connection_async_initable_iface_init (GAsyncInitableIface *iface)
+{
+ nm_remote_connection_parent_async_initable_iface = g_type_interface_peek_parent (iface);
+
+ iface->init_async = init_async;
+ iface->init_finish = init_finish;
+}
diff --git a/libnm/nm-remote-connection.h b/libnm/nm-remote-connection.h
new file mode 100644
index 000000000..3ea8037fb
--- /dev/null
+++ b/libnm/nm-remote-connection.h
@@ -0,0 +1,114 @@
+/* -*- 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 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2011 Red Hat, Inc.
+ */
+
+#ifndef __NM_REMOTE_CONNECTION_H__
+#define __NM_REMOTE_CONNECTION_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-object.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_REMOTE_CONNECTION (nm_remote_connection_get_type ())
+#define NM_REMOTE_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_REMOTE_CONNECTION, NMRemoteConnection))
+#define NM_REMOTE_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_REMOTE_CONNECTION, NMRemoteConnectionClass))
+#define NM_IS_REMOTE_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_REMOTE_CONNECTION))
+#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))
+
+
+/* Properties */
+#define NM_REMOTE_CONNECTION_DBUS_CONNECTION "dbus-connection"
+#define NM_REMOTE_CONNECTION_PATH "path"
+#define NM_REMOTE_CONNECTION_UNSAVED "unsaved"
+#define NM_REMOTE_CONNECTION_VISIBLE "visible"
+
+struct _NMRemoteConnection {
+ NMObject parent;
+};
+
+typedef struct {
+ NMObjectClass parent_class;
+
+ /*< private >*/
+ gpointer padding[8];
+} NMRemoteConnectionClass;
+
+GType nm_remote_connection_get_type (void);
+
+gboolean nm_remote_connection_commit_changes (NMRemoteConnection *connection,
+ gboolean save_to_disk,
+ GCancellable *cancellable,
+ GError **error);
+void nm_remote_connection_commit_changes_async (NMRemoteConnection *connection,
+ gboolean save_to_disk,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+gboolean nm_remote_connection_commit_changes_finish (NMRemoteConnection *connection,
+ GAsyncResult *result,
+ GError **error);
+
+gboolean nm_remote_connection_save (NMRemoteConnection *connection,
+ GCancellable *cancellable,
+ GError **error);
+void nm_remote_connection_save_async (NMRemoteConnection *connection,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+gboolean nm_remote_connection_save_finish (NMRemoteConnection *connection,
+ GAsyncResult *result,
+ GError **error);
+
+gboolean nm_remote_connection_delete (NMRemoteConnection *connection,
+ GCancellable *cancellable,
+ GError **error);
+void nm_remote_connection_delete_async (NMRemoteConnection *connection,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+gboolean nm_remote_connection_delete_finish (NMRemoteConnection *connection,
+ GAsyncResult *result,
+ GError **error);
+
+GVariant *nm_remote_connection_get_secrets (NMRemoteConnection *connection,
+ const char *setting_name,
+ GCancellable *cancellable,
+ GError **error);
+void nm_remote_connection_get_secrets_async (NMRemoteConnection *connection,
+ const char *setting_name,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+GVariant *nm_remote_connection_get_secrets_finish (NMRemoteConnection *connection,
+ GAsyncResult *result,
+ GError **error);
+
+gboolean nm_remote_connection_get_unsaved (NMRemoteConnection *connection);
+
+gboolean nm_remote_connection_get_visible (NMRemoteConnection *connection);
+
+G_END_DECLS
+
+#endif /* __NM_REMOTE_CONNECTION__ */
diff --git a/libnm/nm-remote-settings.c b/libnm/nm-remote-settings.c
new file mode 100644
index 000000000..d37e36661
--- /dev/null
+++ b/libnm/nm-remote-settings.c
@@ -0,0 +1,832 @@
+/* -*- 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 2008 Novell, Inc.
+ * Copyright 2009 - 2012 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <glib/gi18n-lib.h>
+#include <nm-dbus-interface.h>
+#include <nm-connection.h>
+
+#include "nm-remote-settings.h"
+#include "nm-client.h"
+#include "nm-remote-connection.h"
+#include "nm-remote-connection-private.h"
+#include "nm-object-private.h"
+#include "nm-dbus-helpers.h"
+#include "nm-glib-compat.h"
+#include "nm-object-private.h"
+#include "nm-core-internal.h"
+
+#include "nmdbus-settings.h"
+
+G_DEFINE_TYPE (NMRemoteSettings, nm_remote_settings, NM_TYPE_OBJECT)
+
+#define NM_REMOTE_SETTINGS_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_REMOTE_SETTINGS, NMRemoteSettingsPrivate))
+
+typedef struct {
+ NMDBusSettings *proxy;
+ GPtrArray *all_connections;
+ GPtrArray *visible_connections;
+ GCancellable *props_cancellable;
+
+ /* AddConnectionInfo objects that are waiting for the connection to become initialized */
+ GSList *add_list;
+
+ char *hostname;
+ gboolean can_modify;
+} NMRemoteSettingsPrivate;
+
+enum {
+ PROP_0,
+ PROP_CONNECTIONS,
+ PROP_HOSTNAME,
+ PROP_CAN_MODIFY,
+
+ LAST_PROP
+};
+
+/* Signals */
+enum {
+ CONNECTION_ADDED,
+ CONNECTION_REMOVED,
+
+ LAST_SIGNAL
+};
+static guint signals[LAST_SIGNAL] = { 0 };
+
+/**********************************************************************/
+
+typedef struct {
+ NMRemoteSettings *self;
+ GSimpleAsyncResult *simple;
+ char *path;
+ gboolean saved;
+} AddConnectionInfo;
+
+static AddConnectionInfo *
+add_connection_info_find (NMRemoteSettings *self, const char *path)
+{
+ NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (self);
+ GSList *iter;
+
+ for (iter = priv->add_list; iter; iter = g_slist_next (iter)) {
+ AddConnectionInfo *info = iter->data;
+
+ if (!g_strcmp0 (info->path, path))
+ return info;
+ }
+
+ return NULL;
+}
+
+static void
+add_connection_info_complete (NMRemoteSettings *self,
+ AddConnectionInfo *info,
+ NMRemoteConnection *connection,
+ GError *error)
+{
+ NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (self);
+
+ g_return_if_fail (info != NULL);
+
+ if (connection) {
+ g_simple_async_result_set_op_res_gpointer (info->simple,
+ g_object_ref (connection),
+ g_object_unref);
+ } else
+ g_simple_async_result_set_from_error (info->simple, error);
+ g_simple_async_result_complete (info->simple);
+
+ g_object_unref (info->simple);
+ priv->add_list = g_slist_remove (priv->add_list, info);
+
+ g_free (info->path);
+ g_slice_free (AddConnectionInfo, info);
+}
+
+typedef const char * (*ConnectionStringGetter) (NMConnection *);
+
+static NMRemoteConnection *
+get_connection_by_string (NMRemoteSettings *settings,
+ const char *string,
+ ConnectionStringGetter get_comparison_string)
+{
+ NMRemoteSettingsPrivate *priv;
+ NMConnection *candidate;
+ int i;
+
+ if (!_nm_object_get_nm_running (NM_OBJECT (settings)))
+ return NULL;
+
+ priv = NM_REMOTE_SETTINGS_GET_PRIVATE (settings);
+
+ for (i = 0; i < priv->visible_connections->len; i++) {
+ candidate = priv->visible_connections->pdata[i];
+ if (!g_strcmp0 (string, get_comparison_string (candidate)))
+ return NM_REMOTE_CONNECTION (candidate);
+ }
+
+ return NULL;
+}
+
+NMRemoteConnection *
+nm_remote_settings_get_connection_by_id (NMRemoteSettings *settings, const char *id)
+{
+ g_return_val_if_fail (NM_IS_REMOTE_SETTINGS (settings), NULL);
+ g_return_val_if_fail (id != NULL, NULL);
+
+ return get_connection_by_string (settings, id, nm_connection_get_id);
+}
+
+NMRemoteConnection *
+nm_remote_settings_get_connection_by_path (NMRemoteSettings *settings, const char *path)
+{
+ g_return_val_if_fail (NM_IS_REMOTE_SETTINGS (settings), NULL);
+ g_return_val_if_fail (path != NULL, NULL);
+
+ return get_connection_by_string (settings, path, nm_connection_get_path);
+}
+
+NMRemoteConnection *
+nm_remote_settings_get_connection_by_uuid (NMRemoteSettings *settings, const char *uuid)
+{
+ g_return_val_if_fail (NM_IS_REMOTE_SETTINGS (settings), NULL);
+ g_return_val_if_fail (uuid != NULL, NULL);
+
+ return get_connection_by_string (settings, uuid, nm_connection_get_uuid);
+}
+
+static void
+connection_visible_changed (GObject *object,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ NMRemoteConnection *connection = NM_REMOTE_CONNECTION (object);
+ NMRemoteSettings *self = NM_REMOTE_SETTINGS (user_data);
+
+ if (nm_remote_connection_get_visible (connection))
+ g_signal_emit (self, signals[CONNECTION_ADDED], 0, connection);
+ else
+ g_signal_emit (self, signals[CONNECTION_REMOVED], 0, connection);
+}
+
+static void
+cleanup_connection (NMRemoteSettings *self,
+ NMRemoteConnection *remote)
+{
+ g_signal_handlers_disconnect_by_func (remote, G_CALLBACK (connection_visible_changed), self);
+}
+
+static void
+connection_removed (NMRemoteSettings *self,
+ NMRemoteConnection *remote)
+{
+ NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (self);
+ gboolean still_exists = FALSE;
+ int i;
+
+ /* Check if the connection was actually removed or if it just turned invisible. */
+ for (i = 0; i < priv->all_connections->len; i++) {
+ if (remote == priv->all_connections->pdata[i]) {
+ still_exists = TRUE;
+ break;
+ }
+ }
+
+ if (!still_exists)
+ cleanup_connection (self, remote);
+
+ /* Allow the signal to propagate if and only if @remote was in visible_connections */
+ if (!g_ptr_array_remove (priv->visible_connections, remote))
+ g_signal_stop_emission (self, signals[CONNECTION_REMOVED], 0);
+}
+
+static void
+connection_added (NMRemoteSettings *self,
+ NMRemoteConnection *remote)
+{
+ NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (self);
+ AddConnectionInfo *addinfo;
+ const char *path;
+
+ if (!g_signal_handler_find (remote, G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, 0, 0, NULL,
+ G_CALLBACK (connection_visible_changed), self)) {
+ g_signal_connect (remote,
+ "notify::" NM_REMOTE_CONNECTION_VISIBLE,
+ G_CALLBACK (connection_visible_changed),
+ self);
+ }
+
+ if (nm_remote_connection_get_visible (remote))
+ g_ptr_array_add (priv->visible_connections, remote);
+ else
+ g_signal_stop_emission (self, signals[CONNECTION_ADDED], 0);
+
+ path = nm_connection_get_path (NM_CONNECTION (remote));
+ addinfo = add_connection_info_find (self, path);
+ if (addinfo)
+ add_connection_info_complete (self, addinfo, remote, NULL);
+}
+
+static void
+object_creation_failed (NMObject *object, const char *failed_path)
+{
+ NMRemoteSettings *self = NM_REMOTE_SETTINGS (object);
+ AddConnectionInfo *addinfo;
+ GError *add_error;
+
+ addinfo = add_connection_info_find (self, failed_path);
+ if (addinfo) {
+ add_error = g_error_new_literal (NM_CLIENT_ERROR,
+ NM_CLIENT_ERROR_OBJECT_CREATION_FAILED,
+ _("Connection removed before it was initialized"));
+ add_connection_info_complete (self, addinfo, NULL, add_error);
+ g_error_free (add_error);
+ }
+}
+
+const GPtrArray *
+nm_remote_settings_get_connections (NMRemoteSettings *settings)
+{
+ g_return_val_if_fail (NM_IS_REMOTE_SETTINGS (settings), NULL);
+
+ return NM_REMOTE_SETTINGS_GET_PRIVATE (settings)->visible_connections;
+}
+
+static void
+add_connection_done (GObject *proxy, GAsyncResult *result, gpointer user_data)
+{
+ AddConnectionInfo *info = user_data;
+ GError *error = NULL;
+
+ if (info->saved) {
+ nmdbus_settings_call_add_connection_finish (NMDBUS_SETTINGS (proxy),
+ &info->path,
+ result, &error);
+ } else {
+ nmdbus_settings_call_add_connection_unsaved_finish (NMDBUS_SETTINGS (proxy),
+ &info->path,
+ result, &error);
+ }
+
+ if (error) {
+ g_dbus_error_strip_remote_error (error);
+ add_connection_info_complete (info->self, info, NULL, error);
+ g_clear_error (&error);
+ }
+
+ /* On success, we still have to wait until the connection is fully
+ * initialized before calling the callback.
+ */
+}
+
+void
+nm_remote_settings_add_connection_async (NMRemoteSettings *settings,
+ NMConnection *connection,
+ gboolean save_to_disk,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ NMRemoteSettingsPrivate *priv;
+ AddConnectionInfo *info;
+ GVariant *new_settings;
+
+ g_return_if_fail (NM_IS_REMOTE_SETTINGS (settings));
+ g_return_if_fail (NM_IS_CONNECTION (connection));
+
+ priv = NM_REMOTE_SETTINGS_GET_PRIVATE (settings);
+
+ info = g_slice_new0 (AddConnectionInfo);
+ info->self = settings;
+ info->simple = g_simple_async_result_new (G_OBJECT (settings), callback, user_data,
+ nm_remote_settings_add_connection_async);
+ info->saved = save_to_disk;
+
+ new_settings = nm_connection_to_dbus (connection, NM_CONNECTION_SERIALIZE_ALL);
+
+ if (save_to_disk) {
+ nmdbus_settings_call_add_connection (priv->proxy,
+ new_settings,
+ NULL,
+ add_connection_done, info);
+ } else {
+ nmdbus_settings_call_add_connection_unsaved (priv->proxy,
+ new_settings,
+ NULL,
+ add_connection_done, info);
+ }
+
+ priv->add_list = g_slist_append (priv->add_list, info);
+}
+
+NMRemoteConnection *
+nm_remote_settings_add_connection_finish (NMRemoteSettings *settings,
+ GAsyncResult *result,
+ GError **error)
+{
+ GSimpleAsyncResult *simple;
+
+ g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (settings), nm_remote_settings_add_connection_async), NULL);
+
+ simple = G_SIMPLE_ASYNC_RESULT (result);
+ if (g_simple_async_result_propagate_error (simple, error))
+ return NULL;
+ else
+ return g_object_ref (g_simple_async_result_get_op_res_gpointer (simple));
+}
+
+gboolean
+nm_remote_settings_load_connections (NMRemoteSettings *settings,
+ char **filenames,
+ char ***failures,
+ GCancellable *cancellable,
+ GError **error)
+{
+ NMRemoteSettingsPrivate *priv;
+ gboolean success;
+
+ 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);
+
+ if (!nmdbus_settings_call_load_connections_sync (priv->proxy,
+ (const char * const *) filenames,
+ &success,
+ failures,
+ cancellable, error)) {
+ if (error && *error)
+ g_dbus_error_strip_remote_error (*error);
+ success = FALSE;
+ }
+ return success;
+}
+
+static void
+load_connections_cb (GObject *proxy, GAsyncResult *result, gpointer user_data)
+{
+ GSimpleAsyncResult *simple = user_data;
+ GError *error = NULL;
+ gboolean success;
+ char **failures = NULL;
+
+ if (nmdbus_settings_call_load_connections_finish (NMDBUS_SETTINGS (proxy),
+ &success, &failures,
+ result, &error))
+ g_simple_async_result_set_op_res_gpointer (simple, failures, (GDestroyNotify) g_strfreev);
+ else {
+ g_dbus_error_strip_remote_error (error);
+ g_simple_async_result_take_error (simple, error);
+ }
+
+ g_simple_async_result_complete (simple);
+ g_object_unref (simple);
+}
+
+void
+nm_remote_settings_load_connections_async (NMRemoteSettings *settings,
+ char **filenames,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ NMRemoteSettingsPrivate *priv;
+ GSimpleAsyncResult *simple;
+
+ g_return_if_fail (NM_IS_REMOTE_SETTINGS (settings));
+ g_return_if_fail (filenames != NULL);
+
+ priv = NM_REMOTE_SETTINGS_GET_PRIVATE (settings);
+
+ simple = g_simple_async_result_new (G_OBJECT (settings), callback, user_data,
+ nm_remote_settings_load_connections_async);
+
+ nmdbus_settings_call_load_connections (priv->proxy,
+ (const char * const *) filenames,
+ cancellable, load_connections_cb, simple);
+}
+
+gboolean
+nm_remote_settings_load_connections_finish (NMRemoteSettings *settings,
+ char ***failures,
+ GAsyncResult *result,
+ GError **error)
+{
+ GSimpleAsyncResult *simple;
+
+ g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (settings), nm_remote_settings_load_connections_async), FALSE);
+
+ simple = G_SIMPLE_ASYNC_RESULT (result);
+ if (g_simple_async_result_propagate_error (simple, error))
+ return FALSE;
+ else {
+ *failures = g_strdupv (g_simple_async_result_get_op_res_gpointer (simple));
+ return TRUE;
+ }
+}
+
+gboolean
+nm_remote_settings_reload_connections (NMRemoteSettings *settings,
+ GCancellable *cancellable,
+ GError **error)
+{
+ NMRemoteSettingsPrivate *priv;
+ gboolean success;
+
+ g_return_val_if_fail (NM_IS_REMOTE_SETTINGS (settings), FALSE);
+
+ priv = NM_REMOTE_SETTINGS_GET_PRIVATE (settings);
+
+ if (!nmdbus_settings_call_reload_connections_sync (priv->proxy, &success,
+ cancellable, error)) {
+ if (error && *error)
+ g_dbus_error_strip_remote_error (*error);
+ success = FALSE;
+ }
+
+ return success;
+}
+
+static void
+reload_connections_cb (GObject *proxy, GAsyncResult *result, gpointer user_data)
+{
+ GSimpleAsyncResult *simple = user_data;
+ gboolean success;
+ GError *error = NULL;
+
+ if (nmdbus_settings_call_reload_connections_finish (NMDBUS_SETTINGS (proxy),
+ &success,
+ result, &error))
+ g_simple_async_result_set_op_res_gboolean (simple, success);
+ else {
+ g_dbus_error_strip_remote_error (error);
+ g_simple_async_result_take_error (simple, error);
+ }
+
+ g_simple_async_result_complete (simple);
+ g_object_unref (simple);
+}
+
+void
+nm_remote_settings_reload_connections_async (NMRemoteSettings *settings,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ NMRemoteSettingsPrivate *priv;
+ GSimpleAsyncResult *simple;
+
+ g_return_if_fail (NM_IS_REMOTE_SETTINGS (settings));
+
+ priv = NM_REMOTE_SETTINGS_GET_PRIVATE (settings);
+
+ simple = g_simple_async_result_new (G_OBJECT (settings), callback, user_data,
+ nm_remote_settings_reload_connections_async);
+
+ nmdbus_settings_call_reload_connections (priv->proxy, cancellable,
+ reload_connections_cb, simple);
+}
+
+gboolean
+nm_remote_settings_reload_connections_finish (NMRemoteSettings *settings,
+ GAsyncResult *result,
+ GError **error)
+{
+ GSimpleAsyncResult *simple;
+
+ g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (settings), nm_remote_settings_reload_connections_async), FALSE);
+
+ simple = G_SIMPLE_ASYNC_RESULT (result);
+ if (g_simple_async_result_propagate_error (simple, error))
+ return FALSE;
+ else
+ return g_simple_async_result_get_op_res_gboolean (simple);
+}
+
+gboolean
+nm_remote_settings_save_hostname (NMRemoteSettings *settings,
+ const char *hostname,
+ GCancellable *cancellable,
+ GError **error)
+{
+ NMRemoteSettingsPrivate *priv;
+ gboolean ret;
+
+
+ g_return_val_if_fail (NM_IS_REMOTE_SETTINGS (settings), FALSE);
+
+ priv = NM_REMOTE_SETTINGS_GET_PRIVATE (settings);
+
+ ret = nmdbus_settings_call_save_hostname_sync (priv->proxy,
+ hostname ? hostname : "",
+ cancellable, error);
+ if (error && *error)
+ g_dbus_error_strip_remote_error (*error);
+ return ret;
+}
+
+static void
+save_hostname_cb (GObject *proxy,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *simple = user_data;
+ GError *error = NULL;
+
+ if (nmdbus_settings_call_save_hostname_finish (NMDBUS_SETTINGS (proxy), result, &error))
+ g_simple_async_result_set_op_res_gboolean (simple, TRUE);
+ else {
+ g_dbus_error_strip_remote_error (error);
+ g_simple_async_result_take_error (simple, error);
+ }
+ g_simple_async_result_complete (simple);
+ g_object_unref (simple);
+}
+
+void
+nm_remote_settings_save_hostname_async (NMRemoteSettings *settings,
+ const char *hostname,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ NMRemoteSettingsPrivate *priv;
+ GSimpleAsyncResult *simple;
+
+ g_return_if_fail (NM_IS_REMOTE_SETTINGS (settings));
+
+ priv = NM_REMOTE_SETTINGS_GET_PRIVATE (settings);
+
+ simple = g_simple_async_result_new (G_OBJECT (settings), callback, user_data,
+ nm_remote_settings_save_hostname_async);
+
+ nmdbus_settings_call_save_hostname (priv->proxy,
+ hostname ? hostname : "",
+ cancellable, save_hostname_cb, simple);
+}
+
+gboolean
+nm_remote_settings_save_hostname_finish (NMRemoteSettings *settings,
+ GAsyncResult *result,
+ GError **error)
+{
+ GSimpleAsyncResult *simple;
+
+ g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (settings), nm_remote_settings_save_hostname_async), FALSE);
+
+ simple = G_SIMPLE_ASYNC_RESULT (result);
+ if (g_simple_async_result_propagate_error (simple, error))
+ return FALSE;
+ else
+ return g_simple_async_result_get_op_res_gboolean (simple);
+}
+
+static void
+updated_properties (GObject *object, GAsyncResult *result, gpointer user_data)
+{
+ GError *error = NULL;
+
+ if (!_nm_object_reload_properties_finish (NM_OBJECT (object), result, &error)) {
+ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+ g_warning ("%s: error reading NMRemoteSettings properties: %s", __func__, error->message);
+ g_error_free (error);
+ }
+}
+
+static void
+nm_running_changed (GObject *object,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ NMRemoteSettings *self = NM_REMOTE_SETTINGS (object);
+ NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (self);
+
+ g_object_freeze_notify (object);
+
+ if (!_nm_object_get_nm_running (NM_OBJECT (self))) {
+ GPtrArray *connections;
+ int i;
+
+ NM_UTILS_CLEAR_CANCELLABLE (priv->props_cancellable);
+
+ /* Clear connections */
+ connections = priv->all_connections;
+ priv->all_connections = g_ptr_array_new ();
+ for (i = 0; i < connections->len; i++)
+ g_signal_emit (self, signals[CONNECTION_REMOVED], 0, connections->pdata[i]);
+ g_ptr_array_unref (connections);
+
+ /* Clear properties */
+ if (priv->hostname) {
+ g_free (priv->hostname);
+ priv->hostname = NULL;
+ g_object_notify (G_OBJECT (self), NM_REMOTE_SETTINGS_HOSTNAME);
+ }
+
+ if (priv->can_modify) {
+ priv->can_modify = FALSE;
+ g_object_notify (G_OBJECT (self), NM_REMOTE_SETTINGS_CAN_MODIFY);
+ }
+
+ _nm_object_suppress_property_updates (NM_OBJECT (self), TRUE);
+ } else {
+ _nm_object_suppress_property_updates (NM_OBJECT (self), FALSE);
+
+ NM_UTILS_CLEAR_CANCELLABLE (priv->props_cancellable);
+ priv->props_cancellable = g_cancellable_new ();
+ _nm_object_reload_properties_async (NM_OBJECT (self), priv->props_cancellable, updated_properties, self);
+ }
+
+ g_object_thaw_notify (object);
+}
+
+/****************************************************************/
+
+static void
+nm_remote_settings_init (NMRemoteSettings *self)
+{
+ NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (self);
+
+ priv->all_connections = g_ptr_array_new ();
+ priv->visible_connections = g_ptr_array_new ();
+}
+
+static void
+init_dbus (NMObject *object)
+{
+ NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (object);
+ const NMPropertiesInfo property_info[] = {
+ { NM_REMOTE_SETTINGS_CONNECTIONS, &priv->all_connections, NULL, NM_TYPE_REMOTE_CONNECTION, "connection" },
+ { NM_REMOTE_SETTINGS_HOSTNAME, &priv->hostname },
+ { NM_REMOTE_SETTINGS_CAN_MODIFY, &priv->can_modify },
+ { NULL },
+ };
+
+ NM_OBJECT_CLASS (nm_remote_settings_parent_class)->init_dbus (object);
+
+ priv->proxy = NMDBUS_SETTINGS (_nm_object_get_proxy (object, NM_DBUS_INTERFACE_SETTINGS));
+ _nm_object_register_properties (object,
+ NM_DBUS_INTERFACE_SETTINGS,
+ property_info);
+
+ g_signal_connect (object, "notify::" NM_OBJECT_NM_RUNNING,
+ G_CALLBACK (nm_running_changed), object);
+}
+
+static GObject *
+constructor (GType type,
+ guint n_construct_params,
+ GObjectConstructParam *construct_params)
+{
+ guint i;
+ const char *dbus_path;
+
+ /* Fill in the right D-Bus path if none was specified */
+ for (i = 0; i < n_construct_params; i++) {
+ if (strcmp (construct_params[i].pspec->name, NM_OBJECT_PATH) == 0) {
+ dbus_path = g_value_get_string (construct_params[i].value);
+ if (dbus_path == NULL) {
+ g_value_set_static_string (construct_params[i].value, NM_DBUS_PATH_SETTINGS);
+ } else {
+ if (!g_variant_is_object_path (dbus_path)) {
+ g_warning ("Passed D-Bus object path '%s' is invalid; using default '%s' instead",
+ dbus_path, NM_DBUS_PATH);
+ g_value_set_static_string (construct_params[i].value, NM_DBUS_PATH_SETTINGS);
+ }
+ }
+ break;
+ }
+ }
+
+ return G_OBJECT_CLASS (nm_remote_settings_parent_class)->constructor (type,
+ n_construct_params,
+ construct_params);
+}
+
+static void
+dispose (GObject *object)
+{
+ NMRemoteSettings *self = NM_REMOTE_SETTINGS (object);
+ NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (self);
+ int i;
+
+ if (priv->all_connections) {
+ for (i = 0; i < priv->all_connections->len; i++)
+ cleanup_connection (self, priv->all_connections->pdata[i]);
+ g_clear_pointer (&priv->all_connections, g_ptr_array_unref);
+ }
+
+ g_signal_handlers_disconnect_by_func (object, G_CALLBACK (nm_running_changed), self);
+
+ g_clear_pointer (&priv->visible_connections, g_ptr_array_unref);
+ g_clear_pointer (&priv->hostname, g_free);
+
+ G_OBJECT_CLASS (nm_remote_settings_parent_class)->dispose (object);
+}
+
+static void
+get_property (GObject *object, guint prop_id,
+ GValue *value, GParamSpec *pspec)
+{
+ NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_CONNECTIONS:
+ g_value_take_boxed (value, _nm_utils_copy_object_array (priv->visible_connections));
+ break;
+ case PROP_HOSTNAME:
+ g_value_set_string (value, priv->hostname);
+ break;
+ case PROP_CAN_MODIFY:
+ g_value_set_boolean (value, priv->can_modify);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_remote_settings_class_init (NMRemoteSettingsClass *class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (class);
+ NMObjectClass *nm_object_class = NM_OBJECT_CLASS (class);
+
+ g_type_class_add_private (class, sizeof (NMRemoteSettingsPrivate));
+
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_SETTINGS);
+ _nm_dbus_register_proxy_type (NM_DBUS_INTERFACE_SETTINGS, NMDBUS_TYPE_SETTINGS_PROXY);
+
+ /* Virtual methods */
+ object_class->constructor = constructor;
+ object_class->get_property = get_property;
+ object_class->dispose = dispose;
+
+ nm_object_class->init_dbus = init_dbus;
+ nm_object_class->object_creation_failed = object_creation_failed;
+
+ class->connection_added = connection_added;
+ class->connection_removed = connection_removed;
+
+ /* Properties */
+
+ g_object_class_install_property
+ (object_class, PROP_CONNECTIONS,
+ g_param_spec_boxed (NM_REMOTE_SETTINGS_CONNECTIONS, "", "",
+ G_TYPE_PTR_ARRAY,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_HOSTNAME,
+ g_param_spec_string (NM_REMOTE_SETTINGS_HOSTNAME, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_CAN_MODIFY,
+ g_param_spec_boolean (NM_REMOTE_SETTINGS_CAN_MODIFY, "", "",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /* Signals */
+ signals[CONNECTION_ADDED] =
+ g_signal_new (NM_REMOTE_SETTINGS_CONNECTION_ADDED,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMRemoteSettingsClass, connection_added),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 1,
+ NM_TYPE_REMOTE_CONNECTION);
+
+ signals[CONNECTION_REMOVED] =
+ g_signal_new (NM_REMOTE_SETTINGS_CONNECTION_REMOVED,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMRemoteSettingsClass, connection_removed),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 1,
+ NM_TYPE_REMOTE_CONNECTION);
+}
diff --git a/libnm/nm-remote-settings.h b/libnm/nm-remote-settings.h
new file mode 100644
index 000000000..1ffc0bf20
--- /dev/null
+++ b/libnm/nm-remote-settings.h
@@ -0,0 +1,127 @@
+/* -*- 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 2008 Novell, Inc.
+ * Copyright 2009 - 2011 Red Hat, Inc.
+ */
+
+#ifndef __NM_REMOTE_SETTINGS_H__
+#define __NM_REMOTE_SETTINGS_H__
+
+#include <nm-object.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_REMOTE_SETTINGS (nm_remote_settings_get_type ())
+#define NM_REMOTE_SETTINGS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_REMOTE_SETTINGS, NMRemoteSettings))
+#define NM_REMOTE_SETTINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_REMOTE_SETTINGS, NMRemoteSettingsClass))
+#define NM_IS_REMOTE_SETTINGS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_REMOTE_SETTINGS))
+#define NM_IS_REMOTE_SETTINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_REMOTE_SETTINGS))
+#define NM_REMOTE_SETTINGS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_REMOTE_SETTINGS, NMRemoteSettingsClass))
+
+#define NM_REMOTE_SETTINGS_CONNECTIONS "connections"
+#define NM_REMOTE_SETTINGS_HOSTNAME "hostname"
+#define NM_REMOTE_SETTINGS_CAN_MODIFY "can-modify"
+
+#define NM_REMOTE_SETTINGS_CONNECTION_ADDED "connection-added"
+#define NM_REMOTE_SETTINGS_CONNECTION_REMOVED "connection-removed"
+
+typedef struct _NMRemoteSettings NMRemoteSettings;
+typedef struct _NMRemoteSettingsClass NMRemoteSettingsClass;
+
+struct _NMRemoteSettings {
+ NMObject parent;
+};
+
+struct _NMRemoteSettingsClass {
+ NMObjectClass parent;
+
+ /* Signals */
+ void (*connection_added) (NMRemoteSettings *settings,
+ NMRemoteConnection *connection);
+ void (*connection_removed) (NMRemoteSettings *settings,
+ NMRemoteConnection *connection);
+
+ /*< private >*/
+ gpointer padding[8];
+};
+
+GType nm_remote_settings_get_type (void);
+
+const GPtrArray *nm_remote_settings_get_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);
+
+NMRemoteConnection *nm_remote_settings_get_connection_by_uuid (NMRemoteSettings *settings,
+ const char *uuid);
+
+void nm_remote_settings_add_connection_async (NMRemoteSettings *settings,
+ NMConnection *connection,
+ gboolean save_to_disk,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+NMRemoteConnection *nm_remote_settings_add_connection_finish (NMRemoteSettings *settings,
+ GAsyncResult *result,
+ GError **error);
+
+gboolean nm_remote_settings_load_connections (NMRemoteSettings *settings,
+ char **filenames,
+ char ***failures,
+ GCancellable *cancellable,
+ GError **error);
+void nm_remote_settings_load_connections_async (NMRemoteSettings *settings,
+ char **filenames,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+gboolean nm_remote_settings_load_connections_finish (NMRemoteSettings *settings,
+ char ***failures,
+ GAsyncResult *result,
+ GError **error);
+
+gboolean nm_remote_settings_reload_connections (NMRemoteSettings *settings,
+ GCancellable *cancellable,
+ GError **error);
+void nm_remote_settings_reload_connections_async (NMRemoteSettings *settings,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+gboolean nm_remote_settings_reload_connections_finish (NMRemoteSettings *settings,
+ GAsyncResult *result,
+ GError **error);
+
+gboolean nm_remote_settings_save_hostname (NMRemoteSettings *settings,
+ const char *hostname,
+ GCancellable *cancellable,
+ GError **error);
+void nm_remote_settings_save_hostname_async (NMRemoteSettings *settings,
+ const char *hostname,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+gboolean nm_remote_settings_save_hostname_finish (NMRemoteSettings *settings,
+ GAsyncResult *result,
+ GError **error);
+
+G_END_DECLS
+
+#endif /* __NM_REMOTE_SETTINGS_H__ */
diff --git a/libnm/nm-secret-agent-old.c b/libnm/nm-secret-agent-old.c
new file mode 100644
index 000000000..606c40999
--- /dev/null
+++ b/libnm/nm-secret-agent-old.c
@@ -0,0 +1,1366 @@
+/* -*- 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 2010 - 2011 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "nm-glib-compat.h"
+#include "nm-dbus-interface.h"
+#include "nm-secret-agent-old.h"
+#include "nm-enum-types.h"
+#include "nm-dbus-helpers.h"
+#include "nm-simple-connection.h"
+
+#include "nmdbus-secret-agent.h"
+#include "nmdbus-agent-manager.h"
+
+static void nm_secret_agent_old_initable_iface_init (GInitableIface *iface);
+static void nm_secret_agent_old_async_initable_iface_init (GAsyncInitableIface *iface);
+G_DEFINE_ABSTRACT_TYPE_WITH_CODE (NMSecretAgentOld, nm_secret_agent_old, G_TYPE_OBJECT,
+ G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, nm_secret_agent_old_initable_iface_init);
+ G_IMPLEMENT_INTERFACE (G_TYPE_ASYNC_INITABLE, nm_secret_agent_old_async_initable_iface_init);
+ )
+
+#define NM_SECRET_AGENT_OLD_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SECRET_AGENT_OLD, NMSecretAgentOldPrivate))
+
+typedef struct {
+ gboolean registered;
+ gboolean registering;
+ NMSecretAgentCapabilities capabilities;
+
+ GDBusConnection *bus;
+ gboolean private_bus;
+ gboolean session_bus;
+ NMDBusAgentManager *manager_proxy;
+ NMDBusSecretAgent *dbus_secret_agent;
+
+ /* GetSecretsInfo structs of in-flight GetSecrets requests */
+ GSList *pending_gets;
+
+ char *identifier;
+ gboolean auto_register;
+ gboolean suppress_auto;
+} NMSecretAgentOldPrivate;
+
+enum {
+ PROP_0,
+ PROP_IDENTIFIER,
+ PROP_AUTO_REGISTER,
+ PROP_REGISTERED,
+ PROP_CAPABILITIES,
+
+ LAST_PROP
+};
+
+/*************************************************************/
+
+static void
+_internal_unregister (NMSecretAgentOld *self)
+{
+ NMSecretAgentOldPrivate *priv = NM_SECRET_AGENT_OLD_GET_PRIVATE (self);
+
+ if (priv->registered) {
+ g_dbus_interface_skeleton_unexport (G_DBUS_INTERFACE_SKELETON (priv->dbus_secret_agent));
+ priv->registered = FALSE;
+ priv->registering = FALSE;
+ g_object_notify (G_OBJECT (self), NM_SECRET_AGENT_OLD_REGISTERED);
+ }
+}
+
+typedef struct {
+ char *path;
+ char *setting_name;
+ GDBusMethodInvocation *context;
+} GetSecretsInfo;
+
+static void
+get_secrets_info_finalize (NMSecretAgentOld *self, GetSecretsInfo *info)
+{
+ NMSecretAgentOldPrivate *priv = NM_SECRET_AGENT_OLD_GET_PRIVATE (self);
+
+ g_return_if_fail (info != NULL);
+
+ priv->pending_gets = g_slist_remove (priv->pending_gets, info);
+
+ g_free (info->path);
+ g_free (info->setting_name);
+ memset (info, 0, sizeof (*info));
+ g_free (info);
+}
+
+static inline gboolean
+should_auto_register (NMSecretAgentOld *self)
+{
+ NMSecretAgentOldPrivate *priv = NM_SECRET_AGENT_OLD_GET_PRIVATE (self);
+
+ return ( priv->auto_register
+ && !priv->suppress_auto
+ && !priv->registered
+ && !priv->registering);
+}
+
+static void
+name_owner_changed (GObject *proxy,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ NMSecretAgentOld *self = NM_SECRET_AGENT_OLD (user_data);
+ NMSecretAgentOldPrivate *priv = NM_SECRET_AGENT_OLD_GET_PRIVATE (self);
+ GSList *iter;
+ char *owner;
+
+ owner = g_dbus_proxy_get_name_owner (G_DBUS_PROXY (proxy));
+ if (owner != NULL) {
+ if (should_auto_register (self))
+ nm_secret_agent_old_register_async (self, NULL, NULL, NULL);
+ g_free (owner);
+ } else {
+ /* Cancel any pending secrets requests */
+ for (iter = priv->pending_gets; iter; iter = g_slist_next (iter)) {
+ GetSecretsInfo *info = iter->data;
+
+ NM_SECRET_AGENT_OLD_GET_CLASS (self)->cancel_get_secrets (self,
+ info->path,
+ info->setting_name);
+ }
+ g_slist_free (priv->pending_gets);
+ priv->pending_gets = NULL;
+
+ _internal_unregister (self);
+ }
+}
+
+static gboolean
+verify_sender (NMSecretAgentOld *self,
+ GDBusMethodInvocation *context,
+ GError **error)
+{
+ NMSecretAgentOldPrivate *priv = NM_SECRET_AGENT_OLD_GET_PRIVATE (self);
+ char *nm_owner;
+ const char *sender;
+ guint32 sender_uid;
+ GVariant *ret;
+ GError *local = NULL;
+
+ 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 that the sender is the same as NetworkManager's bus name owner. */
+
+ nm_owner = g_dbus_proxy_get_name_owner (G_DBUS_PROXY (priv->manager_proxy));
+ if (!nm_owner) {
+ g_set_error_literal (error,
+ NM_SECRET_AGENT_ERROR,
+ NM_SECRET_AGENT_ERROR_PERMISSION_DENIED,
+ "NetworkManager bus name owner unknown.");
+ return FALSE;
+ }
+
+ sender = g_dbus_method_invocation_get_sender (context);
+ if (!sender) {
+ g_set_error_literal (error,
+ NM_SECRET_AGENT_ERROR,
+ NM_SECRET_AGENT_ERROR_PERMISSION_DENIED,
+ "Failed to get request sender.");
+ g_free (nm_owner);
+ return FALSE;
+ }
+
+ /* Check that the sender matches the current NM bus name owner */
+ if (strcmp (sender, nm_owner) != 0) {
+ g_set_error_literal (error,
+ NM_SECRET_AGENT_ERROR,
+ NM_SECRET_AGENT_ERROR_PERMISSION_DENIED,
+ "Request sender does not match NetworkManager bus name owner.");
+ g_free (nm_owner);
+ return FALSE;
+ }
+ g_free (nm_owner);
+
+ /* If we're connected to the session bus, then this must be a test program,
+ * so skip the UID check.
+ */
+ if (priv->session_bus)
+ return TRUE;
+
+ /* Check the UID of the sender */
+ ret = g_dbus_connection_call_sync (priv->bus,
+ DBUS_SERVICE_DBUS,
+ DBUS_PATH_DBUS,
+ DBUS_INTERFACE_DBUS,
+ "GetConnectionUnixUser",
+ g_variant_new ("(s)", sender),
+ G_VARIANT_TYPE ("(u)"),
+ G_DBUS_CALL_FLAGS_NONE, -1,
+ NULL, &local);
+ if (!ret) {
+ char *remote_error = g_dbus_error_get_remote_error (local);
+
+ g_dbus_error_strip_remote_error (local);
+ g_set_error (error,
+ NM_SECRET_AGENT_ERROR,
+ NM_SECRET_AGENT_ERROR_PERMISSION_DENIED,
+ "Failed to request unix user: (%s) %s.",
+ remote_error ? remote_error : "",
+ local->message);
+ g_free (remote_error);
+ g_error_free (local);
+ return FALSE;
+ }
+ g_variant_get (ret, "(u)", &sender_uid);
+ g_variant_unref (ret);
+
+ /* We only accept requests from NM, which always runs as root */
+ if (0 != sender_uid) {
+ g_set_error_literal (error,
+ NM_SECRET_AGENT_ERROR,
+ NM_SECRET_AGENT_ERROR_PERMISSION_DENIED,
+ "Request sender is not root.");
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static gboolean
+verify_request (NMSecretAgentOld *self,
+ GDBusMethodInvocation *context,
+ GVariant *connection_dict,
+ const char *connection_path,
+ NMConnection **out_connection,
+ GError **error)
+{
+ NMConnection *connection = NULL;
+ GError *local = NULL;
+
+ if (!verify_sender (self, context, error))
+ return FALSE;
+
+ /* No connection? If the sender verified, then we allow the request */
+ if (connection_dict == NULL)
+ return TRUE;
+
+ /* If we have a connection dictionary, we require a path too */
+ if (connection_path == NULL) {
+ g_set_error_literal (error,
+ NM_SECRET_AGENT_ERROR,
+ NM_SECRET_AGENT_ERROR_INVALID_CONNECTION,
+ "Invalid connection: no connection path given.");
+ return FALSE;
+ }
+
+ /* Make sure the given connection is valid */
+ g_assert (out_connection);
+ connection = nm_simple_connection_new_from_dbus (connection_dict, &local);
+ if (connection) {
+ nm_connection_set_path (connection, connection_path);
+ *out_connection = connection;
+ } else {
+ g_set_error (error,
+ NM_SECRET_AGENT_ERROR,
+ NM_SECRET_AGENT_ERROR_INVALID_CONNECTION,
+ "Invalid connection: %s", local->message);
+ g_clear_error (&local);
+ }
+
+ return !!connection;
+}
+
+static void
+get_secrets_cb (NMSecretAgentOld *self,
+ NMConnection *connection,
+ GVariant *secrets,
+ GError *error,
+ gpointer user_data)
+{
+ GetSecretsInfo *info = user_data;
+
+ if (error)
+ g_dbus_method_invocation_return_gerror (info->context, error);
+ else {
+ g_dbus_method_invocation_return_value (info->context,
+ g_variant_new ("(@a{sa{sv}})", secrets));
+ }
+
+ /* Remove the request from internal tracking */
+ get_secrets_info_finalize (self, info);
+}
+
+static void
+impl_secret_agent_old_get_secrets (NMSecretAgentOld *self,
+ GDBusMethodInvocation *context,
+ GVariant *connection_dict,
+ const char *connection_path,
+ const char *setting_name,
+ const char * const *hints,
+ guint flags,
+ gpointer user_data)
+{
+ NMSecretAgentOldPrivate *priv = NM_SECRET_AGENT_OLD_GET_PRIVATE (self);
+ GError *error = NULL;
+ NMConnection *connection = NULL;
+ GetSecretsInfo *info;
+
+ /* Make sure the request comes from NetworkManager and is valid */
+ if (!verify_request (self, context, connection_dict, connection_path, &connection, &error)) {
+ g_dbus_method_invocation_take_error (context, error);
+ return;
+ }
+
+ info = g_malloc0 (sizeof (GetSecretsInfo));
+ info->path = g_strdup (connection_path);
+ info->setting_name = g_strdup (setting_name);
+ info->context = context;
+ priv->pending_gets = g_slist_append (priv->pending_gets, info);
+
+ NM_SECRET_AGENT_OLD_GET_CLASS (self)->get_secrets (self,
+ connection,
+ connection_path,
+ setting_name,
+ (const char **) hints,
+ flags,
+ get_secrets_cb,
+ info);
+ g_object_unref (connection);
+}
+
+static GetSecretsInfo *
+find_get_secrets_info (GSList *list, const char *path, const char *setting_name)
+{
+ GSList *iter;
+
+ for (iter = list; iter; iter = g_slist_next (iter)) {
+ GetSecretsInfo *candidate = iter->data;
+
+ if ( g_strcmp0 (path, candidate->path) == 0
+ && g_strcmp0 (setting_name, candidate->setting_name) == 0)
+ return candidate;
+ }
+ return NULL;
+}
+
+static void
+impl_secret_agent_old_cancel_get_secrets (NMSecretAgentOld *self,
+ GDBusMethodInvocation *context,
+ const char *connection_path,
+ const char *setting_name,
+ gpointer user_data)
+{
+ NMSecretAgentOldPrivate *priv = NM_SECRET_AGENT_OLD_GET_PRIVATE (self);
+ GError *error = NULL;
+ GetSecretsInfo *info;
+
+ /* Make sure the request comes from NetworkManager and is valid */
+ if (!verify_request (self, context, NULL, NULL, NULL, &error)) {
+ g_dbus_method_invocation_take_error (context, error);
+ return;
+ }
+
+ info = find_get_secrets_info (priv->pending_gets, connection_path, setting_name);
+ if (!info) {
+ g_dbus_method_invocation_return_error (context,
+ NM_SECRET_AGENT_ERROR,
+ NM_SECRET_AGENT_ERROR_FAILED,
+ "No secrets request in progress for this connection.");
+ return;
+ }
+
+ /* Send the cancel request up to the subclass and finalize it */
+ NM_SECRET_AGENT_OLD_GET_CLASS (self)->cancel_get_secrets (self,
+ info->path,
+ info->setting_name);
+ g_dbus_method_invocation_return_value (context, NULL);
+}
+
+static void
+save_secrets_cb (NMSecretAgentOld *self,
+ NMConnection *connection,
+ GError *error,
+ gpointer user_data)
+{
+ GDBusMethodInvocation *context = user_data;
+
+ if (error)
+ g_dbus_method_invocation_return_gerror (context, error);
+ else
+ g_dbus_method_invocation_return_value (context, NULL);
+}
+
+static void
+impl_secret_agent_old_save_secrets (NMSecretAgentOld *self,
+ GDBusMethodInvocation *context,
+ GVariant *connection_dict,
+ const char *connection_path,
+ gpointer user_data)
+{
+ GError *error = NULL;
+ NMConnection *connection = NULL;
+
+ /* Make sure the request comes from NetworkManager and is valid */
+ if (!verify_request (self, context, connection_dict, connection_path, &connection, &error)) {
+ g_dbus_method_invocation_take_error (context, error);
+ return;
+ }
+
+ NM_SECRET_AGENT_OLD_GET_CLASS (self)->save_secrets (self,
+ connection,
+ connection_path,
+ save_secrets_cb,
+ context);
+ g_object_unref (connection);
+}
+
+static void
+delete_secrets_cb (NMSecretAgentOld *self,
+ NMConnection *connection,
+ GError *error,
+ gpointer user_data)
+{
+ GDBusMethodInvocation *context = user_data;
+
+ if (error)
+ g_dbus_method_invocation_return_gerror (context, error);
+ else
+ g_dbus_method_invocation_return_value (context, NULL);
+}
+
+static void
+impl_secret_agent_old_delete_secrets (NMSecretAgentOld *self,
+ GDBusMethodInvocation *context,
+ GVariant *connection_dict,
+ const char *connection_path,
+ gpointer user_data)
+{
+ GError *error = NULL;
+ NMConnection *connection = NULL;
+
+ /* Make sure the request comes from NetworkManager and is valid */
+ if (!verify_request (self, context, connection_dict, connection_path, &connection, &error)) {
+ g_dbus_method_invocation_take_error (context, error);
+ return;
+ }
+
+ NM_SECRET_AGENT_OLD_GET_CLASS (self)->delete_secrets (self,
+ connection,
+ connection_path,
+ delete_secrets_cb,
+ context);
+ g_object_unref (connection);
+}
+
+/**************************************************************/
+
+static gboolean
+check_nm_running (NMSecretAgentOld *self, GError **error)
+{
+ NMSecretAgentOldPrivate *priv = NM_SECRET_AGENT_OLD_GET_PRIVATE (self);
+ char *owner;
+
+ if (priv->private_bus)
+ return TRUE;
+ owner = g_dbus_proxy_get_name_owner (G_DBUS_PROXY (priv->manager_proxy));
+ if (owner) {
+ g_free (owner);
+ return TRUE;
+ }
+
+ g_set_error (error, NM_SECRET_AGENT_ERROR, NM_SECRET_AGENT_ERROR_FAILED,
+ "NetworkManager is not running");
+ return FALSE;
+}
+
+/**************************************************************/
+
+/**
+ * nm_secret_agent_old_register:
+ * @self: a #NMSecretAgentOld
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: return location for a #GError, or %NULL
+ *
+ * Registers the #NMSecretAgentOld 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.
+ *
+ * It is a programmer error to attempt to register an agent that is already
+ * registered, or in the process of registering.
+ *
+ * Returns: %TRUE if registration was successful, %FALSE on error.
+ **/
+gboolean
+nm_secret_agent_old_register (NMSecretAgentOld *self,
+ GCancellable *cancellable,
+ GError **error)
+{
+ NMSecretAgentOldPrivate *priv;
+ NMSecretAgentOldClass *class;
+
+ g_return_val_if_fail (NM_IS_SECRET_AGENT_OLD (self), FALSE);
+
+ priv = NM_SECRET_AGENT_OLD_GET_PRIVATE (self);
+
+ g_return_val_if_fail (priv->registered == FALSE, FALSE);
+ g_return_val_if_fail (priv->registering == FALSE, FALSE);
+ g_return_val_if_fail (priv->bus != NULL, FALSE);
+ g_return_val_if_fail (priv->manager_proxy != NULL, FALSE);
+
+ /* Also make sure the subclass can actually respond to secrets requests */
+ class = NM_SECRET_AGENT_OLD_GET_CLASS (self);
+ g_return_val_if_fail (class->get_secrets != NULL, FALSE);
+ g_return_val_if_fail (class->save_secrets != NULL, FALSE);
+ g_return_val_if_fail (class->delete_secrets != NULL, FALSE);
+
+ if (!check_nm_running (self, error))
+ return FALSE;
+
+ priv->suppress_auto = FALSE;
+
+ /* Export our secret agent interface before registering with the manager */
+ if (!g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (priv->dbus_secret_agent),
+ priv->bus,
+ NM_DBUS_PATH_SECRET_AGENT,
+ error))
+ return FALSE;
+
+ priv->registering = TRUE;
+ if (nmdbus_agent_manager_call_register_with_capabilities_sync (priv->manager_proxy,
+ priv->identifier,
+ priv->capabilities,
+ cancellable, NULL))
+ goto success;
+
+ /* Might be an old NetworkManager that doesn't support capabilities;
+ * fall back to old Register() method instead.
+ */
+ if (nmdbus_agent_manager_call_register_sync (priv->manager_proxy,
+ priv->identifier,
+ cancellable, NULL))
+ goto success;
+
+ /* Failure */
+ priv->registering = FALSE;
+ _internal_unregister (self);
+ return FALSE;
+
+success:
+ priv->registering = FALSE;
+ priv->registered = TRUE;
+ g_object_notify (G_OBJECT (self), NM_SECRET_AGENT_OLD_REGISTERED);
+ return TRUE;
+}
+
+static void
+reg_result (NMSecretAgentOld *self, GSimpleAsyncResult *simple, GError *error)
+{
+ NMSecretAgentOldPrivate *priv = NM_SECRET_AGENT_OLD_GET_PRIVATE (self);
+
+ priv->registering = FALSE;
+
+ if (error) {
+ g_simple_async_result_take_error (simple, error);
+ g_simple_async_result_complete (simple);
+
+ /* 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_OLD_REGISTERED);
+
+ g_simple_async_result_set_op_res_gboolean (simple, TRUE);
+ g_simple_async_result_complete (simple);
+ }
+
+ g_object_unref (simple);
+}
+
+static void
+reg_request_cb (GObject *proxy,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *simple = user_data;
+ NMSecretAgentOld *self;
+ NMSecretAgentOldPrivate *priv;
+ GError *error = NULL;
+
+ self = NM_SECRET_AGENT_OLD (g_async_result_get_source_object (G_ASYNC_RESULT (simple)));
+ g_object_unref (self); /* drop extra ref added by get_source_object() */
+ priv = NM_SECRET_AGENT_OLD_GET_PRIVATE (self);
+
+ if (!nmdbus_agent_manager_call_register_finish (NMDBUS_AGENT_MANAGER (proxy), result, &error))
+ g_dbus_error_strip_remote_error (error);
+ reg_result (self, simple, error);
+ g_clear_error (&error);
+}
+
+static void
+reg_with_caps_cb (GObject *proxy,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *simple = user_data;
+ NMSecretAgentOld *self;
+ NMSecretAgentOldPrivate *priv;
+
+ self = NM_SECRET_AGENT_OLD (g_async_result_get_source_object (G_ASYNC_RESULT (simple)));
+ g_object_unref (self); /* drop extra ref added by get_source_object() */
+ priv = NM_SECRET_AGENT_OLD_GET_PRIVATE (self);
+
+ if (nmdbus_agent_manager_call_register_with_capabilities_finish (NMDBUS_AGENT_MANAGER (proxy), result, NULL)) {
+ reg_result (self, simple, NULL);
+ return;
+ }
+
+ /* Might be an old NetworkManager that doesn't support capabilities;
+ * fall back to old Register() method instead.
+ */
+ nmdbus_agent_manager_call_register (priv->manager_proxy,
+ priv->identifier,
+ NULL, reg_request_cb, simple);
+}
+
+/**
+ * nm_secret_agent_old_register_async:
+ * @self: a #NMSecretAgentOld
+ * @cancellable: a #GCancellable, or %NULL
+ * @callback: callback to call when the agent is registered
+ * @user_data: data for @callback
+ *
+ * Asynchronously registers the #NMSecretAgentOld 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.
+ *
+ * It is a programmer error to attempt to register an agent that is already
+ * registered, or in the process of registering.
+ **/
+void
+nm_secret_agent_old_register_async (NMSecretAgentOld *self,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ NMSecretAgentOldPrivate *priv;
+ NMSecretAgentOldClass *class;
+ GSimpleAsyncResult *simple;
+ GError *error = NULL;
+
+ g_return_if_fail (NM_IS_SECRET_AGENT_OLD (self));
+
+ priv = NM_SECRET_AGENT_OLD_GET_PRIVATE (self);
+
+ g_return_if_fail (priv->registered == FALSE);
+ g_return_if_fail (priv->registering == FALSE);
+ g_return_if_fail (priv->bus != NULL);
+ g_return_if_fail (priv->manager_proxy != NULL);
+
+ /* Also make sure the subclass can actually respond to secrets requests */
+ class = NM_SECRET_AGENT_OLD_GET_CLASS (self);
+ g_return_if_fail (class->get_secrets != NULL);
+ g_return_if_fail (class->save_secrets != NULL);
+ g_return_if_fail (class->delete_secrets != NULL);
+
+ simple = g_simple_async_result_new (G_OBJECT (self), callback, user_data,
+ nm_secret_agent_old_register_async);
+
+ if (!check_nm_running (self, &error)) {
+ g_simple_async_result_take_error (simple, error);
+ g_simple_async_result_complete_in_idle (simple);
+ g_object_unref (simple);
+ return;
+ }
+
+ /* Export our secret agent interface before registering with the manager */
+ if (!g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (priv->dbus_secret_agent),
+ priv->bus,
+ NM_DBUS_PATH_SECRET_AGENT,
+ &error)) {
+ g_simple_async_result_take_error (simple, error);
+ g_simple_async_result_complete_in_idle (simple);
+ g_object_unref (simple);
+ return;
+ }
+
+ priv->suppress_auto = FALSE;
+ priv->registering = TRUE;
+
+ nmdbus_agent_manager_call_register_with_capabilities (priv->manager_proxy,
+ priv->identifier,
+ priv->capabilities,
+ NULL,
+ reg_with_caps_cb, simple);
+}
+
+/**
+ * nm_secret_agent_old_register_finish:
+ * @self: a #NMSecretAgentOld
+ * @result: the result passed to the #GAsyncReadyCallback
+ * @error: return location for a #GError, or %NULL
+ *
+ * Gets the result of a call to nm_secret_agent_old_register_async().
+ *
+ * Returns: %TRUE if registration was successful, %FALSE on error.
+ **/
+gboolean
+nm_secret_agent_old_register_finish (NMSecretAgentOld *self,
+ GAsyncResult *result,
+ GError **error)
+{
+ g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (self), nm_secret_agent_old_register_async), FALSE);
+
+ if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
+ return FALSE;
+ else
+ return TRUE;
+}
+
+/**
+ * nm_secret_agent_old_unregister:
+ * @self: a #NMSecretAgentOld
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: return location for a #GError, or %NULL
+ *
+ * Unregisters the #NMSecretAgentOld with the NetworkManager secret manager,
+ * indicating to NetworkManager that the agent will no longer provide or
+ * store secrets on behalf of this user.
+ *
+ * It is a programmer error to attempt to unregister an agent that is not
+ * registered.
+ *
+ * Returns: %TRUE if unregistration was successful, %FALSE on error
+ **/
+gboolean
+nm_secret_agent_old_unregister (NMSecretAgentOld *self,
+ GCancellable *cancellable,
+ GError **error)
+{
+ NMSecretAgentOldPrivate *priv;
+ gboolean success;
+
+ g_return_val_if_fail (NM_IS_SECRET_AGENT_OLD (self), FALSE);
+
+ priv = NM_SECRET_AGENT_OLD_GET_PRIVATE (self);
+
+ g_return_val_if_fail (priv->registered == TRUE, FALSE);
+ g_return_val_if_fail (priv->bus != NULL, FALSE);
+ g_return_val_if_fail (priv->manager_proxy != NULL, FALSE);
+
+ priv->suppress_auto = TRUE;
+
+ success = nmdbus_agent_manager_call_unregister_sync (priv->manager_proxy, cancellable, error);
+ if (error && *error)
+ g_dbus_error_strip_remote_error (*error);
+ _internal_unregister (self);
+
+ return success;
+}
+
+static void
+unregister_cb (GObject *proxy, GAsyncResult *result, gpointer user_data)
+{
+ GSimpleAsyncResult *simple = user_data;
+ NMSecretAgentOld *self;
+ GError *error = NULL;
+
+ self = NM_SECRET_AGENT_OLD (g_async_result_get_source_object (G_ASYNC_RESULT (simple)));
+ g_object_unref (self); /* drop extra ref added by get_source_object() */
+
+ _internal_unregister (self);
+
+ if (nmdbus_agent_manager_call_unregister_finish (NMDBUS_AGENT_MANAGER (proxy),
+ result, &error))
+ g_simple_async_result_set_op_res_gboolean (simple, TRUE);
+ else {
+ g_dbus_error_strip_remote_error (error);
+ g_simple_async_result_take_error (simple, error);
+ }
+
+ g_simple_async_result_complete (simple);
+ g_object_unref (simple);
+}
+
+/**
+ * nm_secret_agent_old_unregister_async:
+ * @self: a #NMSecretAgentOld
+ * @cancellable: a #GCancellable, or %NULL
+ * @callback: callback to call when the agent is unregistered
+ * @user_data: data for @callback
+ *
+ * Asynchronously unregisters the #NMSecretAgentOld with the NetworkManager secret
+ * manager, indicating to NetworkManager that the agent will no longer provide
+ * or store secrets on behalf of this user.
+ *
+ * It is a programmer error to attempt to unregister an agent that is not
+ * registered.
+ **/
+void
+nm_secret_agent_old_unregister_async (NMSecretAgentOld *self,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ NMSecretAgentOldPrivate *priv;
+ GSimpleAsyncResult *simple;
+ GError *error = NULL;
+
+ g_return_if_fail (NM_IS_SECRET_AGENT_OLD (self));
+
+ priv = NM_SECRET_AGENT_OLD_GET_PRIVATE (self);
+
+ g_return_if_fail (priv->registered == TRUE);
+ g_return_if_fail (priv->bus != NULL);
+ g_return_if_fail (priv->manager_proxy != NULL);
+
+ simple = g_simple_async_result_new (G_OBJECT (self), callback, user_data,
+ nm_secret_agent_old_unregister_async);
+
+ if (!check_nm_running (self, &error)) {
+ g_simple_async_result_take_error (simple, error);
+ g_simple_async_result_complete_in_idle (simple);
+ g_object_unref (simple);
+ return;
+ }
+
+ priv->suppress_auto = TRUE;
+
+ nmdbus_agent_manager_call_unregister (priv->manager_proxy, cancellable,
+ unregister_cb, simple);
+}
+
+/**
+ * nm_secret_agent_old_unregister_finish:
+ * @self: a #NMSecretAgentOld
+ * @result: the result passed to the #GAsyncReadyCallback
+ * @error: return location for a #GError, or %NULL
+ *
+ * Gets the result of a call to nm_secret_agent_old_unregister_async().
+ *
+ * Returns: %TRUE if unregistration was successful, %FALSE on error.
+ **/
+gboolean
+nm_secret_agent_old_unregister_finish (NMSecretAgentOld *self,
+ GAsyncResult *result,
+ GError **error)
+{
+ g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (self), nm_secret_agent_old_unregister_async), FALSE);
+
+ if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
+ return FALSE;
+ else
+ return TRUE;
+}
+
+/**
+ * nm_secret_agent_old_get_registered:
+ * @self: a #NMSecretAgentOld
+ *
+ * Returns: a %TRUE if the agent is registered, %FALSE if it is not.
+ **/
+gboolean
+nm_secret_agent_old_get_registered (NMSecretAgentOld *self)
+{
+ g_return_val_if_fail (NM_IS_SECRET_AGENT_OLD (self), FALSE);
+
+ return NM_SECRET_AGENT_OLD_GET_PRIVATE (self)->registered;
+}
+
+/**************************************************************/
+
+/**
+ * nm_secret_agent_old_get_secrets:
+ * @self: a #NMSecretAgentOld
+ * @connection: the #NMConnection for which we're asked secrets
+ * @setting_name: the name of the secret setting
+ * @hints: (array zero-terminated=1): hints to the agent
+ * @flags: flags that modify the behavior of the request
+ * @callback: (scope async): a callback, to be invoked when the operation is done
+ * @user_data: (closure): caller-specific data to be passed to @callback
+ *
+ * Asynchronously retrieves secrets belonging to @connection for the
+ * setting @setting_name. @flags 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.
+ *
+ * Virtual: get_secrets
+ */
+void
+nm_secret_agent_old_get_secrets (NMSecretAgentOld *self,
+ NMConnection *connection,
+ const char *setting_name,
+ const char **hints,
+ NMSecretAgentGetSecretsFlags flags,
+ NMSecretAgentOldGetSecretsFunc callback,
+ gpointer user_data)
+{
+ g_return_if_fail (NM_IS_SECRET_AGENT_OLD (self));
+ g_return_if_fail (NM_IS_CONNECTION (connection));
+ g_return_if_fail (nm_connection_get_path (connection));
+ g_return_if_fail (setting_name != NULL);
+ g_return_if_fail (strlen (setting_name) > 0);
+ g_return_if_fail (!(flags & NM_SECRET_AGENT_GET_SECRETS_FLAG_ONLY_SYSTEM));
+ g_return_if_fail (!(flags & NM_SECRET_AGENT_GET_SECRETS_FLAG_NO_ERRORS));
+ g_return_if_fail (callback != NULL);
+
+ NM_SECRET_AGENT_OLD_GET_CLASS (self)->get_secrets (self,
+ connection,
+ nm_connection_get_path (connection),
+ setting_name,
+ hints,
+ flags,
+ callback,
+ user_data);
+}
+
+/**
+ * nm_secret_agent_old_save_secrets:
+ * @self: a #NMSecretAgentOld
+ * @connection: a #NMConnection
+ * @callback: (scope async): a callback, to be invoked when the operation is done
+ * @user_data: (closure): caller-specific data to be passed to @callback
+ *
+ * Asynchronously ensures that all secrets inside @connection are stored to
+ * disk.
+ *
+ * Virtual: save_secrets
+ */
+void
+nm_secret_agent_old_save_secrets (NMSecretAgentOld *self,
+ NMConnection *connection,
+ NMSecretAgentOldSaveSecretsFunc callback,
+ gpointer user_data)
+{
+ g_return_if_fail (NM_IS_SECRET_AGENT_OLD (self));
+ g_return_if_fail (NM_IS_CONNECTION (connection));
+ g_return_if_fail (nm_connection_get_path (connection));
+
+ NM_SECRET_AGENT_OLD_GET_CLASS (self)->save_secrets (self,
+ connection,
+ nm_connection_get_path (connection),
+ callback,
+ user_data);
+}
+
+/**
+ * nm_secret_agent_old_delete_secrets:
+ * @self: a #NMSecretAgentOld
+ * @connection: a #NMConnection
+ * @callback: (scope async): a callback, to be invoked when the operation is done
+ * @user_data: (closure): caller-specific data to be passed to @callback
+ *
+ * Asynchronously asks the agent to delete all saved secrets belonging to
+ * @connection.
+ *
+ * Virtual: delete_secrets
+ */
+void
+nm_secret_agent_old_delete_secrets (NMSecretAgentOld *self,
+ NMConnection *connection,
+ NMSecretAgentOldDeleteSecretsFunc callback,
+ gpointer user_data)
+{
+ g_return_if_fail (NM_IS_SECRET_AGENT_OLD (self));
+ g_return_if_fail (NM_IS_CONNECTION (connection));
+ g_return_if_fail (nm_connection_get_path (connection));
+
+ NM_SECRET_AGENT_OLD_GET_CLASS (self)->delete_secrets (self,
+ connection,
+ nm_connection_get_path (connection),
+ callback,
+ user_data);
+}
+
+/**************************************************************/
+
+static gboolean
+validate_identifier (const char *identifier)
+{
+ const char *p = identifier;
+ size_t id_len;
+
+ /* Length between 3 and 255 characters inclusive */
+ id_len = strlen (identifier);
+ if (id_len < 3 || id_len > 255)
+ return FALSE;
+
+ if ((identifier[0] == '.') || (identifier[id_len - 1] == '.'))
+ return FALSE;
+
+ /* FIXME: do complete validation here */
+ while (p && *p) {
+ if (!g_ascii_isalnum (*p) && (*p != '_') && (*p != '-') && (*p != '.'))
+ return FALSE;
+ if ((*p == '.') && (*(p + 1) == '.'))
+ return FALSE;
+ p++;
+ }
+
+ return TRUE;
+}
+
+static void
+nm_secret_agent_old_init (NMSecretAgentOld *self)
+{
+ NMSecretAgentOldPrivate *priv = NM_SECRET_AGENT_OLD_GET_PRIVATE (self);
+
+ priv->dbus_secret_agent = nmdbus_secret_agent_skeleton_new ();
+ _nm_dbus_bind_properties (self, priv->dbus_secret_agent);
+ _nm_dbus_bind_methods (self, priv->dbus_secret_agent,
+ "GetSecrets", impl_secret_agent_old_get_secrets,
+ "CancelGetSecrets", impl_secret_agent_old_cancel_get_secrets,
+ "DeleteSecrets", impl_secret_agent_old_delete_secrets,
+ "SaveSecrets", impl_secret_agent_old_save_secrets,
+ NULL);
+}
+
+static void
+init_common (NMSecretAgentOld *self)
+{
+ NMSecretAgentOldPrivate *priv = NM_SECRET_AGENT_OLD_GET_PRIVATE (self);
+
+ priv->private_bus = _nm_dbus_is_connection_private (priv->bus);
+
+ if (priv->private_bus == FALSE) {
+ priv->session_bus = _nm_dbus_bus_type () == G_BUS_TYPE_SESSION;
+
+ g_signal_connect (priv->manager_proxy, "notify::g-name-owner",
+ G_CALLBACK (name_owner_changed), self);
+ }
+}
+
+static gboolean
+init_sync (GInitable *initable, GCancellable *cancellable, GError **error)
+{
+ NMSecretAgentOld *self = NM_SECRET_AGENT_OLD (initable);
+ NMSecretAgentOldPrivate *priv = NM_SECRET_AGENT_OLD_GET_PRIVATE (self);
+ GDBusProxy *proxy;
+
+ priv->bus = _nm_dbus_new_connection (cancellable, error);
+ if (!priv->bus)
+ return FALSE;
+
+ proxy = _nm_dbus_new_proxy_for_connection (priv->bus,
+ NM_DBUS_PATH_AGENT_MANAGER,
+ NM_DBUS_INTERFACE_AGENT_MANAGER,
+ cancellable, error);
+ if (!proxy)
+ return FALSE;
+ priv->manager_proxy = NMDBUS_AGENT_MANAGER (proxy);
+
+ init_common (self);
+
+ if (priv->auto_register)
+ return nm_secret_agent_old_register (self, cancellable, error);
+ else
+ return TRUE;
+}
+
+typedef struct {
+ NMSecretAgentOld *self;
+ GCancellable *cancellable;
+ GSimpleAsyncResult *simple;
+} NMSecretAgentOldInitData;
+
+static void
+init_async_complete (NMSecretAgentOldInitData *init_data, GError *error)
+{
+ if (!error)
+ g_simple_async_result_set_op_res_gboolean (init_data->simple, TRUE);
+ else
+ g_simple_async_result_take_error (init_data->simple, error);
+
+ g_simple_async_result_complete_in_idle (init_data->simple);
+
+ g_object_unref (init_data->simple);
+ g_clear_object (&init_data->cancellable);
+ g_slice_free (NMSecretAgentOldInitData, init_data);
+}
+
+static void
+init_async_registered (GObject *object, GAsyncResult *result, gpointer user_data)
+{
+ NMSecretAgentOld *self = NM_SECRET_AGENT_OLD (object);
+ NMSecretAgentOldInitData *init_data = user_data;
+ GError *error = NULL;
+
+ nm_secret_agent_old_register_finish (self, result, &error);
+ init_async_complete (init_data, error);
+}
+
+static void
+init_async_got_proxy (GObject *object, GAsyncResult *result, gpointer user_data)
+{
+ NMSecretAgentOldInitData *init_data = user_data;
+ NMSecretAgentOldPrivate *priv = NM_SECRET_AGENT_OLD_GET_PRIVATE (init_data->self);
+ GDBusProxy *proxy;
+ GError *error = NULL;
+
+ proxy = _nm_dbus_new_proxy_for_connection_finish (result, &error);
+ if (!proxy) {
+ init_async_complete (init_data, error);
+ return;
+ }
+ priv->manager_proxy = NMDBUS_AGENT_MANAGER (proxy);
+
+ init_common (init_data->self);
+
+ if (priv->auto_register) {
+ nm_secret_agent_old_register_async (init_data->self, init_data->cancellable,
+ init_async_registered, init_data);
+ } else
+ init_async_complete (init_data, NULL);
+}
+
+static void
+init_async_got_bus (GObject *initable, GAsyncResult *result, gpointer user_data)
+{
+ NMSecretAgentOldInitData *init_data = user_data;
+ NMSecretAgentOldPrivate *priv = NM_SECRET_AGENT_OLD_GET_PRIVATE (init_data->self);
+ GError *error = NULL;
+
+ priv->bus = _nm_dbus_new_connection_finish (result, &error);
+ if (!priv->bus) {
+ init_async_complete (init_data, error);
+ return;
+ }
+
+ _nm_dbus_new_proxy_for_connection_async (priv->bus,
+ NM_DBUS_PATH_AGENT_MANAGER,
+ NM_DBUS_INTERFACE_AGENT_MANAGER,
+ init_data->cancellable,
+ init_async_got_proxy, init_data);
+}
+
+static void
+init_async (GAsyncInitable *initable, int io_priority,
+ GCancellable *cancellable, GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ NMSecretAgentOld *self = NM_SECRET_AGENT_OLD (initable);
+ NMSecretAgentOldInitData *init_data;
+
+ init_data = g_slice_new (NMSecretAgentOldInitData);
+ init_data->self = self;
+ init_data->cancellable = cancellable ? g_object_ref (cancellable) : NULL;
+
+ init_data->simple = g_simple_async_result_new (G_OBJECT (initable), callback,
+ user_data, init_async);
+
+ _nm_dbus_new_connection_async (cancellable, init_async_got_bus, init_data);
+}
+
+static gboolean
+init_finish (GAsyncInitable *initable, GAsyncResult *result, GError **error)
+{
+ GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
+
+ if (g_simple_async_result_propagate_error (simple, error))
+ return FALSE;
+ else
+ return TRUE;
+}
+
+static void
+get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NMSecretAgentOldPrivate *priv = NM_SECRET_AGENT_OLD_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_IDENTIFIER:
+ g_value_set_string (value, priv->identifier);
+ break;
+ case PROP_AUTO_REGISTER:
+ g_value_set_boolean (value, priv->auto_register);
+ break;
+ 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;
+ }
+}
+
+static void
+set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NMSecretAgentOldPrivate *priv = NM_SECRET_AGENT_OLD_GET_PRIVATE (object);
+ const char *identifier;
+
+ switch (prop_id) {
+ case PROP_IDENTIFIER:
+ identifier = g_value_get_string (value);
+
+ g_return_if_fail (validate_identifier (identifier));
+
+ g_free (priv->identifier);
+ priv->identifier = g_strdup (identifier);
+ break;
+ 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;
+ }
+}
+
+static void
+dispose (GObject *object)
+{
+ NMSecretAgentOld *self = NM_SECRET_AGENT_OLD (object);
+ NMSecretAgentOldPrivate *priv = NM_SECRET_AGENT_OLD_GET_PRIVATE (self);
+
+ if (priv->registered)
+ nm_secret_agent_old_unregister_async (self, NULL, NULL, NULL);
+
+ g_clear_pointer (&priv->identifier, g_free);
+
+ while (priv->pending_gets)
+ get_secrets_info_finalize (self, priv->pending_gets->data);
+
+ g_signal_handlers_disconnect_matched (priv->dbus_secret_agent, G_SIGNAL_MATCH_DATA,
+ 0, 0, NULL, NULL, self);
+ g_object_unref (priv->dbus_secret_agent);
+
+ g_clear_object (&priv->manager_proxy);
+ g_clear_object (&priv->bus);
+
+ G_OBJECT_CLASS (nm_secret_agent_old_parent_class)->dispose (object);
+}
+
+static void
+nm_secret_agent_old_class_init (NMSecretAgentOldClass *class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (class);
+
+ g_type_class_add_private (class, sizeof (NMSecretAgentOldPrivate));
+
+ /* Virtual methods */
+ object_class->dispose = dispose;
+ object_class->get_property = get_property;
+ object_class->set_property = set_property;
+
+ /**
+ * NMSecretAgentOld:identifier:
+ *
+ * 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).
+ **/
+ g_object_class_install_property
+ (object_class, PROP_IDENTIFIER,
+ g_param_spec_string (NM_SECRET_AGENT_OLD_IDENTIFIER, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSecretAgentOld:auto-register:
+ *
+ * If %TRUE (the default), the agent will always be registered when
+ * NetworkManager is running; if NetworkManager exits and restarts, the
+ * agent will re-register itself automatically.
+ *
+ * In particular, if this property is %TRUE at construct time, then the
+ * agent will register itself with NetworkManager during
+ * construction/initialization, and initialization will fail with an error
+ * if the agent is unable to register itself.
+ *
+ * If the property is %FALSE, the agent will not automatically register with
+ * NetworkManager, and nm_secret_agent_old_register() or
+ * nm_secret_agent_old_register_async() must be called to register it.
+ *
+ * Calling nm_secret_agent_old_unregister() will suppress auto-registration
+ * until nm_secret_agent_old_register() is called, which re-enables
+ * auto-registration. This ensures that the agent remains un-registered when
+ * you expect it to be unregistered.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_AUTO_REGISTER,
+ g_param_spec_boolean (NM_SECRET_AGENT_OLD_AUTO_REGISTER, "", "",
+ TRUE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSecretAgentOld:registered:
+ *
+ * %TRUE if the agent is registered with NetworkManager, %FALSE if not.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_REGISTERED,
+ g_param_spec_boolean (NM_SECRET_AGENT_OLD_REGISTERED, "", "",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMSecretAgentOld:capabilities:
+ *
+ * A bitfield of %NMSecretAgentCapabilities.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_CAPABILITIES,
+ g_param_spec_flags (NM_SECRET_AGENT_OLD_CAPABILITIES, "", "",
+ NM_TYPE_SECRET_AGENT_CAPABILITIES,
+ NM_SECRET_AGENT_CAPABILITY_NONE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+
+ _nm_dbus_register_proxy_type (NM_DBUS_INTERFACE_AGENT_MANAGER,
+ NMDBUS_TYPE_AGENT_MANAGER_PROXY);
+}
+
+static void
+nm_secret_agent_old_initable_iface_init (GInitableIface *iface)
+{
+ iface->init = init_sync;
+}
+
+static void
+nm_secret_agent_old_async_initable_iface_init (GAsyncInitableIface *iface)
+{
+ iface->init_async = init_async;
+ iface->init_finish = init_finish;
+}
diff --git a/libnm/nm-secret-agent-old.h b/libnm/nm-secret-agent-old.h
new file mode 100644
index 000000000..6198e2c04
--- /dev/null
+++ b/libnm/nm-secret-agent-old.h
@@ -0,0 +1,238 @@
+/* -*- 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 2010 - 2011 Red Hat, Inc.
+ */
+
+#ifndef __NM_SECRET_AGENT_OLD_H__
+#define __NM_SECRET_AGENT_OLD_H__
+
+#include <nm-types.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_SECRET_AGENT_OLD (nm_secret_agent_old_get_type ())
+#define NM_SECRET_AGENT_OLD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SECRET_AGENT_OLD, NMSecretAgentOld))
+#define NM_SECRET_AGENT_OLD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SECRET_AGENT_OLD, NMSecretAgentOldClass))
+#define NM_IS_SECRET_AGENT_OLD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SECRET_AGENT_OLD))
+#define NM_IS_SECRET_AGENT_OLD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_SECRET_AGENT_OLD))
+#define NM_SECRET_AGENT_OLD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SECRET_AGENT_OLD, NMSecretAgentOldClass))
+
+#define NM_SECRET_AGENT_OLD_IDENTIFIER "identifier"
+#define NM_SECRET_AGENT_OLD_AUTO_REGISTER "auto-register"
+#define NM_SECRET_AGENT_OLD_REGISTERED "registered"
+#define NM_SECRET_AGENT_OLD_CAPABILITIES "capabilities"
+
+typedef struct {
+ GObject parent;
+} NMSecretAgentOld;
+
+/**
+ * NMSecretAgentOldGetSecretsFunc:
+ * @agent: the secret agent object
+ * @connection: (transfer none): the connection for which secrets were requested,
+ * note that this object will be unrefed after the callback has returned, use
+ * g_object_ref()/g_object_unref() if you want to use this object after the callback
+ * has returned
+ * @secrets: the #GVariant of type %NM_VARIANT_TYPE_CONNECTION containing the requested
+ * secrets (as created by nm_connection_to_dbus() for example). Each key in @secrets
+ * should be the name of a #NMSetting object (like "802-11-wireless-security")
+ * and each value should be an %NM_VARIANT_TYPE_SETTING variant. The sub-dicts
+ * map string:value, where the string is the setting property name (like "psk")
+ * and the value is the secret
+ * @error: if the secrets request failed, give a descriptive error here
+ * @user_data: caller-specific data to be passed to the function
+ *
+ * Called as a result of a request by NM to retrieve secrets. When the
+ * #NMSecretAgentOld 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.
+ *
+ * To easily create the dictionary to return the Wi-Fi PSK, you could do
+ * something like this:
+ * <example>
+ * <title>Creating a secrets dictionary</title>
+ * <programlisting>
+ * NMConnection *secrets;
+ * NMSettingWirelessSecurity *s_wsec;
+ * GVariant *secrets_dict;
+ *
+ * secrets = nm_simple_connection_new ();
+ * s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
+ * g_object_set (G_OBJECT (s_wsec),
+ * NM_SETTING_WIRELESS_SECURITY_PSK, "my really cool PSK",
+ * NULL);
+ * nm_connection_add_setting (secrets, NM_SETTING (s_wsec));
+ * secrets_dict = nm_connection_to_dbus (secrets, NM_CONNECTION_SERIALIZE_ALL);
+ *
+ * (call the NMSecretAgentOldGetSecretsFunc with secrets_dict)
+ *
+ * g_object_unref (secrets);
+ * g_variant_unref (secrets_dict);
+ * </programlisting>
+ * </example>
+ */
+typedef void (*NMSecretAgentOldGetSecretsFunc) (NMSecretAgentOld *agent,
+ NMConnection *connection,
+ GVariant *secrets,
+ GError *error,
+ gpointer user_data);
+
+/**
+ * NMSecretAgentOldSaveSecretsFunc:
+ * @agent: the secret agent object
+ * @connection: (transfer none): the connection for which secrets were to be saved,
+ * note that this object will be unrefed after the callback has returned, use
+ * g_object_ref()/g_object_unref() if you want to use this object after the callback
+ * has returned
+ * @error: if the saving secrets failed, give a descriptive error here
+ * @user_data: caller-specific data to be passed to the function
+ *
+ * Called as a result of a request by NM to save secrets. When the
+ * #NMSecretAgentOld subclass has finished saving the secrets, this function
+ * should be called.
+ */
+typedef void (*NMSecretAgentOldSaveSecretsFunc) (NMSecretAgentOld *agent,
+ NMConnection *connection,
+ GError *error,
+ gpointer user_data);
+
+/**
+ * NMSecretAgentOldDeleteSecretsFunc:
+ * @agent: the secret agent object
+ * @connection: (transfer none): the connection for which secrets were to be deleted,
+ * note that this object will be unrefed after the callback has returned, use
+ * g_object_ref()/g_object_unref() if you want to use this object after the callback
+ * has returned
+ * @error: if the deleting secrets failed, give a descriptive error here
+ * @user_data: caller-specific data to be passed to the function
+ *
+ * Called as a result of a request by NM to delete secrets. When the
+ * #NMSecretAgentOld subclass has finished deleting the secrets, this function
+ * should be called.
+ */
+typedef void (*NMSecretAgentOldDeleteSecretsFunc) (NMSecretAgentOld *agent,
+ NMConnection *connection,
+ GError *error,
+ gpointer user_data);
+
+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_OLD_ERROR_AGENT_CANCELED error.
+ */
+ void (*get_secrets) (NMSecretAgentOld *self,
+ NMConnection *connection,
+ const char *connection_path,
+ const char *setting_name,
+ const char **hints,
+ NMSecretAgentGetSecretsFlags flags,
+ NMSecretAgentOldGetSecretsFunc 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_OLD_ERROR/
+ * NM_SECRET_AGENT_OLD_ERROR_AGENT_CANCELED error to that callback.
+ */
+ void (*cancel_get_secrets) (NMSecretAgentOld *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) (NMSecretAgentOld *self,
+ NMConnection *connection,
+ const char *connection_path,
+ NMSecretAgentOldSaveSecretsFunc 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) (NMSecretAgentOld *self,
+ NMConnection *connection,
+ const char *connection_path,
+ NMSecretAgentOldDeleteSecretsFunc callback,
+ gpointer user_data);
+
+ /*< private >*/
+ gpointer padding[8];
+} NMSecretAgentOldClass;
+
+GType nm_secret_agent_old_get_type (void);
+
+gboolean nm_secret_agent_old_register (NMSecretAgentOld *self,
+ GCancellable *cancellable,
+ GError **error);
+void nm_secret_agent_old_register_async (NMSecretAgentOld *self,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+gboolean nm_secret_agent_old_register_finish (NMSecretAgentOld *self,
+ GAsyncResult *result,
+ GError **error);
+
+gboolean nm_secret_agent_old_unregister (NMSecretAgentOld *self,
+ GCancellable *cancellable,
+ GError **error);
+void nm_secret_agent_old_unregister_async (NMSecretAgentOld *self,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+gboolean nm_secret_agent_old_unregister_finish (NMSecretAgentOld *self,
+ GAsyncResult *result,
+ GError **error);
+
+gboolean nm_secret_agent_old_get_registered (NMSecretAgentOld *self);
+
+void nm_secret_agent_old_get_secrets (NMSecretAgentOld *self,
+ NMConnection *connection,
+ const char *setting_name,
+ const char **hints,
+ NMSecretAgentGetSecretsFlags flags,
+ NMSecretAgentOldGetSecretsFunc callback,
+ gpointer user_data);
+
+void nm_secret_agent_old_save_secrets (NMSecretAgentOld *self,
+ NMConnection *connection,
+ NMSecretAgentOldSaveSecretsFunc callback,
+ gpointer user_data);
+
+void nm_secret_agent_old_delete_secrets (NMSecretAgentOld *self,
+ NMConnection *connection,
+ NMSecretAgentOldDeleteSecretsFunc callback,
+ gpointer user_data);
+
+G_END_DECLS
+
+#endif /* __NM_SECRET_AGENT_OLD_H__ */
diff --git a/libnm/nm-setting-docs-overrides.xml b/libnm/nm-setting-docs-overrides.xml
new file mode 100644
index 000000000..3a52fd7c3
--- /dev/null
+++ b/libnm/nm-setting-docs-overrides.xml
@@ -0,0 +1,141 @@
+<?xml version="1.0"?>
+<!DOCTYPE nm-dbus-docs [
+]>
+
+<nm-dbus-docs>
+ <setting name="802-1x">
+</setting>
+<setting name="adsl">
+</setting>
+<setting name="bluetooth">
+</setting>
+<setting name="bond">
+<property name="interface-name" variable="interface-name" format="string" values="" default="" example="" description="Deprecated in favor of connection.interface-name, but can
+be used for backward-compatibility with older daemons, to set the
+bond&apos;s interface name."/>
+</setting>
+<setting name="bridge-port">
+</setting>
+<setting name="bridge">
+<property name="interface-name" variable="interface-name" format="string" values="" default="" example="" description="Deprecated in favor of connection.interface-name, but can
+be used for backward-compatibility with older daemons, to set the
+bridge&apos;s interface name."/>
+</setting>
+<setting name="cdma">
+</setting>
+<setting name="connection">
+</setting>
+<setting name="dcb">
+</setting>
+<setting name="generic">
+</setting>
+<setting name="gsm">
+</setting>
+<setting name="infiniband">
+</setting>
+<setting name="">
+</setting>
+<setting name="ipv4">
+<property name="dns" variable="dns" format="array of uint32" values="" default="" example="" description="Array of IP addresses of DNS servers (as network-byte-order
+integers)"/>
+<property name="addresses" variable="addresses" format="array of array of uint32" values="" default="" example="" description="Deprecated in favor of the &apos;address-data&apos; and &apos;gateway&apos;
+properties, but this can be used for backward-compatibility with older
+daemons. Note that if you send this property the daemon will ignore
+&apos;address-data&apos; and &apos;gateway&apos;.
+ 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."/>
+<property name="address-data" variable="address-data" format="array of vardict" values="" default="" example="" description="Array of IPv4 addresses. Each address dictionary contains at
+least &apos;address&apos; and &apos;prefix&apos; entries, containing the IP address as a
+string, and the prefix length as a uint32. Additional attributes may
+also exist on some addresses."/>
+<property name="routes" variable="routes" format="array of array of uint32" values="" default="" example="" description="Deprecated in favor of the &apos;route-data&apos; property, but this
+can be used for backward-compatibility with older daemons. Note that if
+you send this property the daemon will ignore &apos;route-data&apos;.
+ 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. If the metric is
+0, NM will choose an appropriate default metric for the device. (There
+is no way to explicitly specify an actual metric of 0 with this
+property.)"/>
+<property name="route-data" variable="route-data" format="array of vardict" values="" default="" example="" description="Array of IPv4 routes. Each route dictionary contains at
+least &apos;dest&apos; and &apos;prefix&apos; entries, containing the destination IP
+address as a string, and the prefix length as a uint32. Most routes
+will also have a &apos;gateway&apos; entry, containing the gateway IP address as
+a string. If the route has a &apos;metric&apos; entry (containing a uint32), that
+will be used as the metric for the route (otherwise NM will pick a
+default value appropriate to the device). Additional attributes may
+also exist on some routes."/>
+</setting>
+<setting name="ipv6">
+<property name="dns" variable="dns" format="array of byte array" values="" default="" example="" description="Array of IP addresses of DNS servers (in network byte order)"/>
+<property name="addresses" variable="addresses" format="array of legacy IPv6 address struct (a(ayuay))" values="" default="" example="" description="Deprecated in favor of the &apos;address-data&apos; and &apos;gateway&apos;
+properties, but this can be used for backward-compatibility with older
+daemons. Note that if you send this property the daemon will ignore
+&apos;address-data&apos; and &apos;gateway&apos;.
+ Array of IPv6 address structures. Each IPv6 address structure is
+composed of an IPv6 address, a prefix length (1 - 128), and an IPv6
+gateway address. The gateway may be zeroed out if no gateway exists for
+that subnet."/>
+<property name="address-data" variable="address-data" format="array of vardict" values="" default="" example="" description="Array of IPv6 addresses. Each address dictionary contains at
+least &apos;address&apos; and &apos;prefix&apos; entries, containing the IP address as a
+string, and the prefix length as a uint32. Additional attributes may
+also exist on some addresses."/>
+<property name="routes" variable="routes" format="array of legacy IPv6 route struct (a(ayuayu))" values="" default="" example="" description="Deprecated in favor of the &apos;route-data&apos; property, but this
+can be used for backward-compatibility with older daemons. Note that if
+you send this property the daemon will ignore &apos;route-data&apos;.
+ Array of IPv6 route structures. Each IPv6 route structure is
+composed of an IPv6 address, a prefix length (1 - 128), an IPv6
+next hop address (which may be zeroed out if there is no next hop),
+and a metric. If the metric is 0, NM will choose an appropriate
+default metric for the device."/>
+<property name="route-data" variable="route-data" format="array of vardict" values="" default="" example="" description="Array of IPv6 routes. Each route dictionary contains at
+least &apos;dest&apos; and &apos;prefix&apos; entries, containing the destination IP
+address as a string, and the prefix length as a uint32. Most routes
+will also have a &apos;next-hop&apos; entry, containing the next hop IP address as
+a string. If the route has a &apos;metric&apos; entry (containing a uint32), that
+will be used as the metric for the route (otherwise NM will pick a
+default value appropriate to the device). Additional attributes may
+also exist on some routes."/>
+</setting>
+<setting name="802-11-olpc-mesh">
+</setting>
+<setting name="ppp">
+</setting>
+<setting name="pppoe">
+</setting>
+<setting name="serial">
+<property name="parity" variable="parity" format="byte" values="" default="" example="" description="The connection parity: 69 (ASCII &apos;E&apos;) for even parity,
+111 (ASCII &apos;o&apos;) for odd, 110 (ASCII &apos;n&apos;) for none."/>
+</setting>
+<setting name="team-port">
+</setting>
+<setting name="team">
+<property name="interface-name" variable="interface-name" format="string" values="" default="" example="" description="Deprecated in favor of connection.interface-name, but can
+be used for backward-compatibility with older daemons, to set the
+team&apos;s interface name."/>
+</setting>
+<setting name="vlan">
+<property name="interface-name" variable="interface-name" format="string" values="" default="" example="" description="Deprecated in favor of connection.interface-name, but can
+be used for backward-compatibility with older daemons, to set the
+vlan&apos;s interface name."/>
+</setting>
+<setting name="vpn">
+</setting>
+<setting name="wimax">
+</setting>
+<setting name="802-3-ethernet">
+</setting>
+<setting name="802-11-wireless-security">
+</setting>
+<setting name="802-11-wireless">
+<property name="security" variable="security" format="" values="" default="" example="" description="This property is deprecated, but can be set to the value
+&apos;802-11-wireless-security&apos; when a wireless security setting is also
+present in the connection dictionary, for compatibility with very old
+NetworkManager daemons."/>
+</setting>
+</nm-dbus-docs> \ No newline at end of file
diff --git a/libnm/nm-setting-docs.xml b/libnm/nm-setting-docs.xml
new file mode 100644
index 000000000..50acecf17
--- /dev/null
+++ b/libnm/nm-setting-docs.xml
@@ -0,0 +1,305 @@
+<?xml version="1.0"?>
+<!DOCTYPE nm-setting-docs [
+<!ENTITY quot "&#34;">
+]>
+<nm-setting-docs>
+ <setting name="802-1x">
+ <property name="altsubject-matches" type="array of string" default="[]" description="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." />
+ <property name="anonymous-identity" type="string" description="Anonymous identity string for EAP authentication methods. Used as the unencrypted identity with EAP types that support different tunneled identity like EAP-TTLS." />
+ <property name="ca-cert" type="byte array" description="Contains the CA certificate if used by the EAP method specified in the &quot;eap&quot; property. Certificate data is specified using a &quot;scheme&quot;; 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 &quot;file://&quot; 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." />
+ <property name="ca-path" type="string" description="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 &quot;ca-cert&quot; property." />
+ <property name="client-cert" type="byte array" description="Contains the client certificate if used by the EAP method specified in the &quot;eap&quot; property. Certificate data is specified using a &quot;scheme&quot;; 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 &quot;file://&quot; and ending with a terminating NUL byte." />
+ <property name="eap" type="array of string" default="[]" description="The allowed EAP method to be used when authenticating to the network with 802.1x. Valid methods are: &quot;leap&quot;, &quot;md5&quot;, &quot;tls&quot;, &quot;peap&quot;, &quot;ttls&quot;, &quot;pwd&quot;, and &quot;fast&quot;. Each method requires different configuration using the properties of this setting; refer to wpa_supplicant documentation for the allowed combinations." />
+ <property name="identity" type="string" description="Identity string for EAP authentication methods. Often the user's user or login name." />
+ <property name="name" type="string" default="802-1x" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="pac-file" type="string" description="UTF-8 encoded file path containing PAC for EAP-FAST." />
+ <property name="password" type="string" description="UTF-8 encoded password used for EAP authentication methods. If both the &quot;password&quot; property and the &quot;password-raw&quot; property are specified, &quot;password&quot; is preferred." />
+ <property name="password-flags" type="NMSettingSecretFlags (uint32)" description="Flags indicating how to handle the &quot;password&quot; property." />
+ <property name="password-raw" type="byte array" description="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 &quot;password&quot; property and the &quot;password-raw&quot; property are specified, &quot;password&quot; is preferred." />
+ <property name="password-raw-flags" type="NMSettingSecretFlags (uint32)" description="Flags indicating how to handle the &quot;password-raw&quot; property." />
+ <property name="phase1-fast-provisioning" type="string" description="Enables or disables in-line provisioning of EAP-FAST credentials when FAST is specified as the EAP method in the &quot;eap&quot; property. Recognized values are &quot;0&quot; (disabled), &quot;1&quot; (allow unauthenticated provisioning), &quot;2&quot; (allow authenticated provisioning), and &quot;3&quot; (allow both authenticated and unauthenticated provisioning). See the wpa_supplicant documentation for more details." />
+ <property name="phase1-peaplabel" type="string" description="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 &quot;1&quot; to force use of the new PEAP label. See the wpa_supplicant documentation for more details." />
+ <property name="phase1-peapver" type="string" description="Forces which PEAP version is used when PEAP is set as the EAP method in the &quot;eap&quot; 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 &quot;0&quot; or &quot;1&quot; to force that specific PEAP version." />
+ <property name="phase2-altsubject-matches" type="array of string" default="[]" description="List of strings to be matched against the altSubjectName of the certificate presented by the authentication server during the inner &quot;phase 2&quot; authentication. If the list is empty, no verification of the server certificate's altSubjectName is performed." />
+ <property name="phase2-auth" type="string" description="Specifies the allowed &quot;phase 2&quot; inner non-EAP authentication methods when an EAP method that uses an inner TLS tunnel is specified in the &quot;eap&quot; property. Recognized non-EAP &quot;phase 2&quot; methods are &quot;pap&quot;, &quot;chap&quot;, &quot;mschap&quot;, &quot;mschapv2&quot;, &quot;gtc&quot;, &quot;otp&quot;, &quot;md5&quot;, and &quot;tls&quot;. Each &quot;phase 2&quot; inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details." />
+ <property name="phase2-autheap" type="string" description="Specifies the allowed &quot;phase 2&quot; inner EAP-based authentication methods when an EAP method that uses an inner TLS tunnel is specified in the &quot;eap&quot; property. Recognized EAP-based &quot;phase 2&quot; methods are &quot;md5&quot;, &quot;mschapv2&quot;, &quot;otp&quot;, &quot;gtc&quot;, and &quot;tls&quot;. Each &quot;phase 2&quot; inner method requires specific parameters for successful authentication; see the wpa_supplicant documentation for more details." />
+ <property name="phase2-ca-cert" type="byte array" description="Contains the &quot;phase 2&quot; CA certificate if used by the EAP method specified in the &quot;phase2-auth&quot; or &quot;phase2-autheap&quot; properties. Certificate data is specified using a &quot;scheme&quot;; 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 &quot;file://&quot; 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." />
+ <property name="phase2-ca-path" type="string" description="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 &quot;phase2-ca-cert&quot; property." />
+ <property name="phase2-client-cert" type="byte array" description="Contains the &quot;phase 2&quot; client certificate if used by the EAP method specified in the &quot;phase2-auth&quot; or &quot;phase2-autheap&quot; properties. Certificate data is specified using a &quot;scheme&quot;; 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 &quot;file://&quot; 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." />
+ <property name="phase2-private-key" type="byte array" description="Contains the &quot;phase 2&quot; inner private key when the &quot;phase2-auth&quot; or &quot;phase2-autheap&quot; property is set to &quot;tls&quot;. Key data is specified using a &quot;scheme&quot;; 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 &quot;file://&quot; 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 &quot;phase2-private-key-password&quot; 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 &quot;file://&quot; and and ending with a terminating NUL byte, and as with the blob scheme the &quot;phase2-private-key-password&quot; property must be set to the password used to decode the PKCS#12 private key and certificate." />
+ <property name="phase2-private-key-password" type="string" description="The password used to decrypt the &quot;phase 2&quot; private key specified in the &quot;phase2-private-key&quot; property when the private key either uses the path scheme, or is a PKCS#12 format key." />
+ <property name="phase2-private-key-password-flags" type="NMSettingSecretFlags (uint32)" description="Flags indicating how to handle the &quot;phase2-private-key-password&quot; property." />
+ <property name="phase2-subject-match" type="string" description="Substring to be matched against the subject of the certificate presented by the authentication server during the inner &quot;phase 2&quot; authentication. When unset, no verification of the authentication server certificate's subject is performed." />
+ <property name="pin" type="string" description="PIN used for EAP authentication methods." />
+ <property name="pin-flags" type="NMSettingSecretFlags (uint32)" description="Flags indicating how to handle the &quot;pin&quot; property." />
+ <property name="private-key" type="byte array" description="Contains the private key when the &quot;eap&quot; property is set to &quot;tls&quot;. Key data is specified using a &quot;scheme&quot;; 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 &quot;file://&quot; 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 &quot;private-key-password&quot; 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 &quot;file://&quot; and and ending with a terminating NUL byte, and as with the blob scheme the &quot;private-key-password&quot; property must be set to the password used to decode the PKCS#12 private key and certificate. WARNING: &quot;private-key&quot; is not a &quot;secret&quot; 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." />
+ <property name="private-key-password" type="string" description="The password used to decrypt the private key specified in the &quot;private-key&quot; property when the private key either uses the path scheme, or if the private key is a PKCS#12 format key." />
+ <property name="private-key-password-flags" type="NMSettingSecretFlags (uint32)" description="Flags indicating how to handle the &quot;private-key-password&quot; property." />
+ <property name="subject-match" type="string" description="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." />
+ <property name="system-ca-certs" type="boolean" default="FALSE" description="When TRUE, overrides the &quot;ca-path&quot; and &quot;phase2-ca-path&quot; 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 &quot;ca-cert&quot; and &quot;phase2-ca-cert&quot; properties." />
+ </setting>
+ <setting name="adsl">
+ <property name="encapsulation" type="string" description="Encapsulation of ADSL connection. Can be &quot;vcmux&quot; or &quot;llc&quot;." />
+ <property name="name" type="string" default="adsl" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="password" type="string" description="Password used to authenticate with the ADSL service." />
+ <property name="password-flags" type="NMSettingSecretFlags (uint32)" description="Flags indicating how to handle the &quot;password&quot; property." />
+ <property name="protocol" type="string" description="ADSL connection protocol. Can be &quot;pppoa&quot;, &quot;pppoe&quot; or &quot;ipoatm&quot;." />
+ <property name="username" type="string" description="Username used to authenticate with the ADSL service." />
+ <property name="vci" type="uint32" default="0" description="VCI of ADSL connection" />
+ <property name="vpi" type="uint32" default="0" description="VPI of ADSL connection" />
+ </setting>
+ <setting name="bluetooth">
+ <property name="bdaddr" type="byte array" description="The Bluetooth address of the device." />
+ <property name="name" type="string" default="bluetooth" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="type" type="string" description="Either &quot;dun&quot; for Dial-Up Networking connections or &quot;panu&quot; for Personal Area Networking connections to devices supporting the NAP profile." />
+ </setting>
+ <setting name="bond">
+ <property name="interface-name" type="string" description="Deprecated in favor of connection.interface-name, but can be used for backward-compatibility with older daemons, to set the bond's interface name." />
+ <property name="name" type="string" default="bond" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="options" type="dict of string to string" description="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])." />
+ </setting>
+ <setting name="bridge">
+ <property name="ageing-time" type="uint32" default="300" description="The Ethernet MAC address aging time, in seconds." />
+ <property name="forward-delay" type="uint32" default="15" description="The Spanning Tree Protocol (STP) forwarding delay, in seconds." />
+ <property name="hello-time" type="uint32" default="2" description="The Spanning Tree Protocol (STP) hello time, in seconds." />
+ <property name="interface-name" type="string" description="Deprecated in favor of connection.interface-name, but can be used for backward-compatibility with older daemons, to set the bridge's interface name." />
+ <property name="mac-address" type="byte array" description="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." />
+ <property name="max-age" type="uint32" default="20" description="The Spanning Tree Protocol (STP) maximum message age, in seconds." />
+ <property name="name" type="string" default="bridge" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="priority" type="uint32" default="32768" description="Sets the Spanning Tree Protocol (STP) priority for this bridge. Lower values are &quot;better&quot;; the lowest priority bridge will be elected the root bridge." />
+ <property name="stp" type="boolean" default="TRUE" description="Controls whether Spanning Tree Protocol (STP) is enabled for this bridge." />
+ </setting>
+ <setting name="bridge-port">
+ <property name="hairpin-mode" type="boolean" default="FALSE" description="Enables or disabled &quot;hairpin mode&quot; for the port, which allows frames to be sent back out through the port the frame was received on." />
+ <property name="name" type="string" default="bridge-port" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="path-cost" type="uint32" default="100" description="The Spanning Tree Protocol (STP) port cost for destinations via this port." />
+ <property name="priority" type="uint32" default="32" description="The Spanning Tree Protocol (STP) priority of this bridge port." />
+ </setting>
+ <setting name="cdma">
+ <property name="name" type="string" default="cdma" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="number" type="string" description="The number to dial to establish the connection to the CDMA-based mobile broadband network, if any. If not specified, the default number (#777) is used when required." />
+ <property name="password" type="string" description="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." />
+ <property name="password-flags" type="NMSettingSecretFlags (uint32)" description="Flags indicating how to handle the &quot;password&quot; property." />
+ <property name="username" type="string" description="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." />
+ </setting>
+ <setting name="connection">
+ <property name="autoconnect" type="boolean" default="TRUE" description="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." />
+ <property name="autoconnect-priority" type="int32" default="0" description="The autoconnect priority. If the connection is set to autoconnect, connections with higher priority will be preferred. Defaults to 0. The higher number means higher priority." />
+ <property name="gateway-ping-timeout" type="uint32" default="0" description="If greater than zero, delay success of IP addressing until either the timeout is reached, or an IP gateway replies to a ping." />
+ <property name="id" type="string" description="A human readable unique identifier for the connection, like &quot;Work Wi-Fi&quot; or &quot;T-Mobile 3G&quot;." />
+ <property name="interface-name" type="string" description="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 software devices this specifies the name of the created device. 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." />
+ <property name="master" type="string" description="Interface name of the master device or UUID of the master connection." />
+ <property name="name" type="string" default="connection" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="permissions" type="array of string" default="[]" description="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 list. Each entry is of the form &quot;[type]:[id]:[reserved]&quot;; for example, &quot;user:dcbw:blah&quot;. At this time only the &quot;user&quot; [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 &quot;:&quot; 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." />
+ <property name="read-only" type="boolean" default="FALSE" description="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." />
+ <property name="secondaries" type="array of string" default="[]" description="List of connection UUIDs that should be activated when the base connection itself is activated. Currently only VPN connections are supported." />
+ <property name="slave-type" type="string" description="Setting name of the device type of this slave's master connection (eg, &quot;bond&quot;), or NULL if this connection is not a slave." />
+ <property name="timestamp" type="uint64" default="0" description="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)." />
+ <property name="type" type="string" description="Base type of the connection. For hardware-dependent connections, should contain the setting name of the hardware-type specific setting (ie, &quot;802-3-ethernet&quot; or &quot;802-11-wireless&quot; or &quot;bluetooth&quot;, etc), and for non-hardware dependent connections like VPN or otherwise, should contain the setting name of that setting type (ie, &quot;vpn&quot; or &quot;bridge&quot;, etc)." />
+ <property name="uuid" type="string" description="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, it should not be changed when the &quot;id&quot; property or NMSettingIP4Config changes, but might need to be re-created when the Wi-Fi SSID, mobile broadband network provider, or &quot;type&quot; property changes. The UUID must be in the format &quot;2815492f-7e56-435e-b2e9-246bd7cdc664&quot; (ie, contains only hexadecimal characters and &quot;-&quot;)." />
+ <property name="zone" type="string" description="The trust level of a the connection. Free form case-insensitive string (for example &quot;Home&quot;, &quot;Work&quot;, &quot;Public&quot;). NULL or unspecified zone means the connection will be placed in the default zone as defined by the firewall." />
+ </setting>
+ <setting name="dcb">
+ <property name="app-fcoe-flags" type="NMSettingDcbFlags (uint32)" description="Specifies the NMSettingDcbFlags for the DCB FCoE application. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4)." />
+ <property name="app-fcoe-mode" type="string" default="&quot;fabric&quot;" description="The FCoE controller mode; either &quot;fabric&quot; (default) or &quot;vn2vn&quot;." />
+ <property name="app-fcoe-priority" type="int32" default="-1" description="The highest User Priority (0 - 7) which FCoE frames should use, or -1 for default priority. Only used when the &quot;app-fcoe-flags&quot; property includes the NM_SETTING_DCB_FLAG_ENABLE (0x1) flag." />
+ <property name="app-fip-flags" type="NMSettingDcbFlags (uint32)" description="Specifies the NMSettingDcbFlags for the DCB FIP application. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4)." />
+ <property name="app-fip-priority" type="int32" default="-1" description="The highest User Priority (0 - 7) which FIP frames should use, or -1 for default priority. Only used when the &quot;app-fip-flags&quot; property includes the NM_SETTING_DCB_FLAG_ENABLE (0x1) flag." />
+ <property name="app-iscsi-flags" type="NMSettingDcbFlags (uint32)" description="Specifies the NMSettingDcbFlags for the DCB iSCSI application. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4)." />
+ <property name="app-iscsi-priority" type="int32" default="-1" description="The highest User Priority (0 - 7) which iSCSI frames should use, or -1 for default priority. Only used when the &quot;app-iscsi-flags&quot; property includes the NM_SETTING_DCB_FLAG_ENABLE (0x1) flag." />
+ <property name="name" type="string" default="dcb" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="priority-bandwidth" type="array of uint32" description="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." />
+ <property name="priority-flow-control" type="array of uint32" description="An array of 8 boolean 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." />
+ <property name="priority-flow-control-flags" type="NMSettingDcbFlags (uint32)" description="Specifies the NMSettingDcbFlags for DCB Priority Flow Control (PFC). Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4)." />
+ <property name="priority-group-bandwidth" type="array of uint32" description="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." />
+ <property name="priority-group-flags" type="NMSettingDcbFlags (uint32)" description="Specifies the NMSettingDcbFlags for DCB Priority Groups. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4)." />
+ <property name="priority-group-id" type="array of uint32" description="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." />
+ <property name="priority-strict-bandwidth" type="array of uint32" description="An array of 8 boolean 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." />
+ <property name="priority-traffic-class" type="array of uint32" description="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." />
+ </setting>
+ <setting name="generic">
+ <property name="name" type="string" default="generic" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ </setting>
+ <setting name="gsm">
+ <property name="apn" type="string" description="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." />
+ <property name="home-only" type="boolean" default="FALSE" description="When TRUE, only connections to the home network will be allowed. Connections to roaming networks will not be made." />
+ <property name="name" type="string" default="gsm" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="network-id" type="string" description="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." />
+ <property name="number" type="string" description="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." />
+ <property name="password" type="string" description="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." />
+ <property name="password-flags" type="NMSettingSecretFlags (uint32)" description="Flags indicating how to handle the &quot;password&quot; property." />
+ <property name="pin" type="string" description="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." />
+ <property name="pin-flags" type="NMSettingSecretFlags (uint32)" description="Flags indicating how to handle the &quot;pin&quot; property." />
+ <property name="username" type="string" description="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." />
+ </setting>
+ <setting name="infiniband">
+ <property name="mac-address" type="byte array" description="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)." />
+ <property name="mtu" type="uint32" default="0" description="If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple frames." />
+ <property name="name" type="string" default="infiniband" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="p-key" type="int32" default="-1" description="The InfiniBand P_Key to use for this device. A value of -1 means to use the default P_Key (aka &quot;the P_Key at index 0&quot;). Otherwise it is a 16-bit unsigned integer, whose high bit is set if it is a &quot;full membership&quot; P_Key." />
+ <property name="parent" type="string" description="The interface name of the parent device of this device. Normally NULL, but if the &quot;p_key&quot; property is set, then you must specify the base device by setting either this property or &quot;mac-address&quot;." />
+ <property name="transport-mode" type="string" description="The IP-over-InfiniBand transport mode. Either &quot;datagram&quot; or &quot;connected&quot;." />
+ </setting>
+ <setting name="ipv4">
+ <property name="address-data" type="array of vardict" description="Array of IPv4 addresses. Each address dictionary contains at least 'address' and 'prefix' entries, containing the IP address as a string, and the prefix length as a uint32. Additional attributes may also exist on some addresses." />
+ <property name="addresses" type="array of array of uint32" description="Deprecated in favor of the 'address-data' and 'gateway' properties, but this can be used for backward-compatibility with older daemons. Note that if you send this property the daemon will ignore 'address-data' and 'gateway'. 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." />
+ <property name="dhcp-client-id" type="string" description="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." />
+ <property name="dhcp-hostname" type="string" description="If the &quot;dhcp-send-hostname&quot; property is TRUE, then the specified name will be sent to the DHCP server when acquiring a lease." />
+ <property name="dhcp-send-hostname" type="boolean" default="TRUE" description="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 &quot;dhcp-hostname&quot; property is NULL and this property is TRUE, the current persistent hostname of the computer is sent." />
+ <property name="dns" type="array of uint32" default="[]" description="Array of IP addresses of DNS servers (as network-byte-order integers)" />
+ <property name="dns-search" type="array of string" default="[]" description="Array of DNS search domains." />
+ <property name="gateway" type="string" description="The gateway associated with this configuration. This is only meaningful if &quot;addresses&quot; is also set." />
+ <property name="ignore-auto-dns" type="boolean" default="FALSE" description="When &quot;method&quot; is set to &quot;auto&quot; and this property to TRUE, automatically configured nameservers and search domains are ignored and only nameservers and search domains specified in the &quot;dns&quot; and &quot;dns-search&quot; properties, if any, are used." />
+ <property name="ignore-auto-routes" type="boolean" default="FALSE" description="When &quot;method&quot; is set to &quot;auto&quot; and this property to TRUE, automatically configured routes are ignored and only routes specified in the &quot;routes&quot; property, if any, are used." />
+ <property name="may-fail" type="boolean" default="TRUE" description="If TRUE, allow overall network configuration to proceed even if the configuration specified by this property 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 on the NMSettingIP4Config allows the overall network configuration to succeed if IPv4 configuration fails but IPv6 configuration completes successfully." />
+ <property name="method" type="string" description="IP configuration method. NMSettingIP4Config and NMSettingIP6Config both support &quot;auto&quot;, &quot;manual&quot;, and &quot;link-local&quot;. See the subclass-specific documentation for other values. In general, for the &quot;auto&quot; method, properties such as &quot;dns&quot; and &quot;routes&quot; specify information that is added on to the information returned from automatic configuration. The &quot;ignore-auto-routes&quot; and &quot;ignore-auto-dns&quot; properties modify this behavior. For methods that imply no upstream network, such as &quot;shared&quot; or &quot;link-local&quot;, these properties must be empty." />
+ <property name="name" type="string" default="ipv4" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="never-default" type="boolean" default="FALSE" description="If TRUE, this connection will never be the default connection for this IP type, meaning it will never be assigned the default route by NetworkManager." />
+ <property name="route-data" type="array of vardict" description="Array of IPv4 routes. Each route dictionary contains at least 'dest' and 'prefix' entries, containing the destination IP address as a string, and the prefix length as a uint32. Most routes will also have a 'gateway' entry, containing the gateway IP address as a string. If the route has a 'metric' entry (containing a uint32), that will be used as the metric for the route (otherwise NM will pick a default value appropriate to the device). Additional attributes may also exist on some routes." />
+ <property name="route-metric" type="int64" default="-1" description="The default metric for routes that don't explicitly specify a metric. The default value -1 means that the metric is choosen automatically based on the device type. The metric applies to dynamic routes, manual (static) routes that don't have an explicit metric setting, address prefix routes, and the default route. Note that for IPv6, the kernel accepts zero (0) but coerces it to 1024 (user default). Hence, setting this property to zero effectively mean setting it to 1024. For IPv4, zero is a regular value for the metric." />
+ <property name="routes" type="array of array of uint32" description="Deprecated in favor of the 'route-data' property, but this can be used for backward-compatibility with older daemons. Note that if you send this property the daemon will ignore 'route-data'. 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. If the metric is 0, NM will choose an appropriate default metric for the device. (There is no way to explicitly specify an actual metric of 0 with this property.)" />
+ </setting>
+ <setting name="ipv6">
+ <property name="address-data" type="array of vardict" description="Array of IPv6 addresses. Each address dictionary contains at least 'address' and 'prefix' entries, containing the IP address as a string, and the prefix length as a uint32. Additional attributes may also exist on some addresses." />
+ <property name="addresses" type="array of legacy IPv6 address struct (a(ayuay))" description="Deprecated in favor of the 'address-data' and 'gateway' properties, but this can be used for backward-compatibility with older daemons. Note that if you send this property the daemon will ignore 'address-data' and 'gateway'. Array of IPv6 address structures. Each IPv6 address structure is composed of an IPv6 address, a prefix length (1 - 128), and an IPv6 gateway address. The gateway may be zeroed out if no gateway exists for that subnet." />
+ <property name="dhcp-hostname" type="string" description="If the &quot;dhcp-send-hostname&quot; property is TRUE, then the specified name will be sent to the DHCP server when acquiring a lease." />
+ <property name="dhcp-send-hostname" type="boolean" default="TRUE" description="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 &quot;dhcp-hostname&quot; property is NULL and this property is TRUE, the current persistent hostname of the computer is sent." />
+ <property name="dns" type="array of byte array" default="[]" description="Array of IP addresses of DNS servers (in network byte order)" />
+ <property name="dns-search" type="array of string" default="[]" description="Array of DNS search domains." />
+ <property name="gateway" type="string" description="The gateway associated with this configuration. This is only meaningful if &quot;addresses&quot; is also set." />
+ <property name="ignore-auto-dns" type="boolean" default="FALSE" description="When &quot;method&quot; is set to &quot;auto&quot; and this property to TRUE, automatically configured nameservers and search domains are ignored and only nameservers and search domains specified in the &quot;dns&quot; and &quot;dns-search&quot; properties, if any, are used." />
+ <property name="ignore-auto-routes" type="boolean" default="FALSE" description="When &quot;method&quot; is set to &quot;auto&quot; and this property to TRUE, automatically configured routes are ignored and only routes specified in the &quot;routes&quot; property, if any, are used." />
+ <property name="ip6-privacy" type="NMSettingIP6ConfigPrivacy (int32)" description="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)." />
+ <property name="may-fail" type="boolean" default="TRUE" description="If TRUE, allow overall network configuration to proceed even if the configuration specified by this property 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 on the NMSettingIP4Config allows the overall network configuration to succeed if IPv4 configuration fails but IPv6 configuration completes successfully." />
+ <property name="method" type="string" description="IP configuration method. NMSettingIP4Config and NMSettingIP6Config both support &quot;auto&quot;, &quot;manual&quot;, and &quot;link-local&quot;. See the subclass-specific documentation for other values. In general, for the &quot;auto&quot; method, properties such as &quot;dns&quot; and &quot;routes&quot; specify information that is added on to the information returned from automatic configuration. The &quot;ignore-auto-routes&quot; and &quot;ignore-auto-dns&quot; properties modify this behavior. For methods that imply no upstream network, such as &quot;shared&quot; or &quot;link-local&quot;, these properties must be empty." />
+ <property name="name" type="string" default="ipv6" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="never-default" type="boolean" default="FALSE" description="If TRUE, this connection will never be the default connection for this IP type, meaning it will never be assigned the default route by NetworkManager." />
+ <property name="route-data" type="array of vardict" description="Array of IPv6 routes. Each route dictionary contains at least 'dest' and 'prefix' entries, containing the destination IP address as a string, and the prefix length as a uint32. Most routes will also have a 'next-hop' entry, containing the next hop IP address as a string. If the route has a 'metric' entry (containing a uint32), that will be used as the metric for the route (otherwise NM will pick a default value appropriate to the device). Additional attributes may also exist on some routes." />
+ <property name="route-metric" type="int64" default="-1" description="The default metric for routes that don't explicitly specify a metric. The default value -1 means that the metric is choosen automatically based on the device type. The metric applies to dynamic routes, manual (static) routes that don't have an explicit metric setting, address prefix routes, and the default route. Note that for IPv6, the kernel accepts zero (0) but coerces it to 1024 (user default). Hence, setting this property to zero effectively mean setting it to 1024. For IPv4, zero is a regular value for the metric." />
+ <property name="routes" type="array of legacy IPv6 route struct (a(ayuayu))" description="Deprecated in favor of the 'route-data' property, but this can be used for backward-compatibility with older daemons. Note that if you send this property the daemon will ignore 'route-data'. Array of IPv6 route structures. Each IPv6 route structure is composed of an IPv6 address, a prefix length (1 - 128), an IPv6 next hop address (which may be zeroed out if there is no next hop), and a metric. If the metric is 0, NM will choose an appropriate default metric for the device." />
+ </setting>
+ <setting name="802-11-olpc-mesh">
+ <property name="channel" type="uint32" default="0" description="Channel on which the mesh network to join is located." />
+ <property name="dhcp-anycast-address" type="byte array" description="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." />
+ <property name="name" type="string" default="802-11-olpc-mesh" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="ssid" type="byte array" description="SSID of the mesh network to join." />
+ </setting>
+ <setting name="ppp">
+ <property name="baud" type="uint32" default="0" description="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." />
+ <property name="crtscts" type="boolean" default="FALSE" description="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." />
+ <property name="lcp-echo-failure" type="uint32" default="0" description="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 &quot;lcp-echo-interval&quot; property must also be set to a non-zero value if this property is used." />
+ <property name="lcp-echo-interval" type="uint32" default="0" description="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." />
+ <property name="mppe-stateful" type="boolean" default="FALSE" description="If TRUE, stateful MPPE is used. See pppd documentation for more information on stateful MPPE." />
+ <property name="mru" type="uint32" default="0" description="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." />
+ <property name="mtu" type="uint32" default="0" description="If non-zero, instruct pppd to send packets no larger than the specified size." />
+ <property name="name" type="string" default="ppp" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="no-vj-comp" type="boolean" default="FALSE" description="If TRUE, Van Jacobsen TCP header compression will not be requested." />
+ <property name="noauth" type="boolean" default="TRUE" description="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." />
+ <property name="nobsdcomp" type="boolean" default="FALSE" description="If TRUE, BSD compression will not be requested." />
+ <property name="nodeflate" type="boolean" default="FALSE" description="If TRUE, &quot;deflate&quot; compression will not be requested." />
+ <property name="refuse-chap" type="boolean" default="FALSE" description="If TRUE, the CHAP authentication method will not be used." />
+ <property name="refuse-eap" type="boolean" default="FALSE" description="If TRUE, the EAP authentication method will not be used." />
+ <property name="refuse-mschap" type="boolean" default="FALSE" description="If TRUE, the MSCHAP authentication method will not be used." />
+ <property name="refuse-mschapv2" type="boolean" default="FALSE" description="If TRUE, the MSCHAPv2 authentication method will not be used." />
+ <property name="refuse-pap" type="boolean" default="FALSE" description="If TRUE, the PAP authentication method will not be used." />
+ <property name="require-mppe" type="boolean" default="FALSE" description="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." />
+ <property name="require-mppe-128" type="boolean" default="FALSE" description="If TRUE, 128-bit MPPE (Microsoft Point-to-Point Encrpytion) will be required for the PPP session, and the &quot;require-mppe&quot; property must also be set to TRUE. If 128-bit MPPE is not available the session will fail." />
+ </setting>
+ <setting name="pppoe">
+ <property name="name" type="string" default="pppoe" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="password" type="string" description="Password used to authenticate with the PPPoE service." />
+ <property name="password-flags" type="NMSettingSecretFlags (uint32)" description="Flags indicating how to handle the &quot;password&quot; property." />
+ <property name="service" type="string" description="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." />
+ <property name="username" type="string" description="Username used to authenticate with the PPPoE service." />
+ </setting>
+ <setting name="serial">
+ <property name="baud" type="uint32" default="57600" description="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." />
+ <property name="bits" type="uint32" default="8" description="Byte-width of the serial communication. The 8 in &quot;8n1&quot; for example." />
+ <property name="name" type="string" default="serial" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="parity" type="byte" description="The connection parity: 69 (ASCII 'E') for even parity, 111 (ASCII 'o') for odd, 110 (ASCII 'n') for none." />
+ <property name="send-delay" type="uint64" default="0" description="Time to delay between each byte sent to the modem, in microseconds." />
+ <property name="stopbits" type="uint32" default="1" description="Number of stop bits for communication on the serial port. Either 1 or 2. The 1 in &quot;8n1&quot; for example." />
+ </setting>
+ <setting name="team">
+ <property name="config" type="string" description="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." />
+ <property name="interface-name" type="string" description="Deprecated in favor of connection.interface-name, but can be used for backward-compatibility with older daemons, to set the team's interface name." />
+ <property name="name" type="string" default="team" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ </setting>
+ <setting name="team-port">
+ <property name="config" type="string" description="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." />
+ <property name="name" type="string" default="team-port" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ </setting>
+ <setting name="vlan">
+ <property name="egress-priority-map" type="array of string" default="[]" description="For outgoing packets, a list of mappings from Linux SKB priorities to 802.1p priorities. The mapping is given in the format &quot;from:to&quot; where both &quot;from&quot; and &quot;to&quot; are unsigned integers, ie &quot;7:3&quot;." />
+ <property name="flags" type="NMVlanFlags (uint32)" description="One or more flags which control the behavior and features of the VLAN interface. Flags include NM_VLAN_FLAG_REORDER_HEADERS (0x1) (reordering of output packet headers), NM_VLAN_FLAG_GVRP (0x2) (use of the GVRP protocol), and NM_VLAN_FLAG_LOOSE_BINDING (0x4) (loose binding of the interface to its master device's operating state)." />
+ <property name="id" type="uint32" default="0" description="The VLAN identifier that the interface created by this connection should be assigned." />
+ <property name="ingress-priority-map" type="array of string" default="[]" description="For incoming packets, a list of mappings from 802.1p priorities to Linux SKB priorities. The mapping is given in the format &quot;from:to&quot; where both &quot;from&quot; and &quot;to&quot; are unsigned integers, ie &quot;7:3&quot;." />
+ <property name="interface-name" type="string" description="Deprecated in favor of connection.interface-name, but can be used for backward-compatibility with older daemons, to set the vlan's interface name." />
+ <property name="name" type="string" default="vlan" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="parent" type="string" description="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 &quot;802-3-ethernet&quot; setting with a &quot;mac-address&quot; property." />
+ </setting>
+ <setting name="vpn">
+ <property name="data" type="dict of string to string" description="Dictionary of key/value pairs of VPN plugin specific data. Both keys and values must be strings." />
+ <property name="name" type="string" default="vpn" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="persistent" type="boolean" default="FALSE" description="If the VPN service supports persistence, and this property is TRUE, the VPN will attempt to stay connected across link changes and outages, until explicitly disconnected." />
+ <property name="secrets" type="dict of string to string" description="Dictionary of key/value pairs of VPN plugin specific secrets like passwords or private keys. Both keys and values must be strings." />
+ <property name="service-type" type="string" description="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." />
+ <property name="user-name" type="string" description="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." />
+ </setting>
+ <setting name="wimax">
+ <property name="mac-address" type="byte array" description="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)." />
+ <property name="name" type="string" default="wimax" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="network-name" type="string" description="Network Service Provider (NSP) name of the WiMAX network this connection should use." />
+ </setting>
+ <setting name="802-3-ethernet">
+ <property name="auto-negotiate" type="boolean" default="TRUE" description="If TRUE, allow auto-negotiation of port speed and duplex mode. If FALSE, do not allow auto-negotiation, in which case the &quot;speed&quot; and &quot;duplex&quot; properties should be set." />
+ <property name="cloned-mac-address" type="byte array" description="If specified, request that the device use this MAC address instead of its permanent MAC address. This is known as MAC cloning or spoofing." />
+ <property name="duplex" type="string" description="If specified, request that the device only use the specified duplex mode. Either &quot;half&quot; or &quot;full&quot;." />
+ <property name="mac-address" type="byte array" description="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)." />
+ <property name="mac-address-blacklist" type="array of string" default="[]" description="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)." />
+ <property name="mtu" type="uint32" default="0" description="If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames." />
+ <property name="name" type="string" default="802-3-ethernet" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="port" type="string" description="Specific port type to use if multiple the device supports multiple attachment methods. One of &quot;tp&quot; (Twisted Pair), &quot;aui&quot; (Attachment Unit Interface), &quot;bnc&quot; (Thin Ethernet) or &quot;mii&quot; (Media Independent Interface. If the device supports only one port type, this setting is ignored." />
+ <property name="s390-nettype" type="string" description="s390 network device type; one of &quot;qeth&quot;, &quot;lcs&quot;, or &quot;ctc&quot;, representing the different types of virtual network devices available on s390 systems." />
+ <property name="s390-options" type="dict of string to string" description="Dictionary of key/value pairs of s390-specific device options. Both keys and values must be strings. Allowed keys include &quot;portno&quot;, &quot;layer2&quot;, &quot;portname&quot;, &quot;protocol&quot;, among others. Key names must contain only alphanumeric characters (ie, [a-zA-Z0-9])." />
+ <property name="s390-subchannels" type="array of string" default="[]" description="Identifies specific subchannels that this network device uses for communication with z/VM or s390 host. Like the &quot;mac-address&quot; 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." />
+ <property name="speed" type="uint32" default="0" description="If non-zero, request that the device use only the specified speed. In Mbit/s, ie 100 == 100Mbit/s." />
+ </setting>
+ <setting name="802-11-wireless">
+ <property name="band" type="string" description="802.11 frequency band of the network. One of &quot;a&quot; for 5GHz 802.11a or &quot;bg&quot; for 2.4GHz 802.11. This will lock associations to the Wi-Fi network to the specific band, i.e. if &quot;a&quot; 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." />
+ <property name="bssid" type="byte array" description="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." />
+ <property name="channel" type="uint32" default="0" description="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 &quot;band&quot; property to be set." />
+ <property name="cloned-mac-address" type="byte array" description="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." />
+ <property name="hidden" type="boolean" default="FALSE" description="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." />
+ <property name="mac-address" type="byte array" description="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)." />
+ <property name="mac-address-blacklist" type="array of string" default="[]" description="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 &quot;00:11:22:33:44:55&quot;)." />
+ <property name="mode" type="string" description="Wi-Fi network mode; one of &quot;infrastructure&quot;, &quot;adhoc&quot; or &quot;ap&quot;. If blank, infrastructure is assumed." />
+ <property name="mtu" type="uint32" default="0" description="If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames." />
+ <property name="name" type="string" default="802-11-wireless" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="rate" type="uint32" default="0" description="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." />
+ <property name="security" type="None" description="This property is deprecated, but can be set to the value '802-11-wireless-security' when a wireless security setting is also present in the connection dictionary, for compatibility with very old NetworkManager daemons." />
+ <property name="seen-bssids" type="array of string" default="[]" description="A list of BSSIDs (each BSSID formatted as a MAC address like &quot;00:11:22:33:44:55&quot;) 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." />
+ <property name="ssid" type="byte array" description="SSID of the Wi-Fi network. Must be specified." />
+ <property name="tx-power" type="uint32" default="0" description="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." />
+ </setting>
+ <setting name="802-11-wireless-security">
+ <property name="auth-alg" type="string" description="When WEP is used (ie, key-mgmt = &quot;none&quot; or &quot;ieee8021x&quot;) indicate the 802.11 authentication algorithm required by the AP here. One of &quot;open&quot; for Open System, &quot;shared&quot; for Shared Key, or &quot;leap&quot; for Cisco LEAP. When using Cisco LEAP (ie, key-mgmt = &quot;ieee8021x&quot; and auth-alg = &quot;leap&quot;) the &quot;leap-username&quot; and &quot;leap-password&quot; properties must be specified." />
+ <property name="group" type="array of string" default="[]" description="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 &quot;wep40&quot;, &quot;wep104&quot;, &quot;tkip&quot;, or &quot;ccmp&quot;." />
+ <property name="key-mgmt" type="string" description="Key management used for the connection. One of &quot;none&quot; (WEP), &quot;ieee8021x&quot; (Dynamic WEP), &quot;wpa-none&quot; (Ad-Hoc WPA-PSK), &quot;wpa-psk&quot; (infrastructure WPA-PSK), or &quot;wpa-eap&quot; (WPA-Enterprise). This property must be set for any Wi-Fi connection that uses security." />
+ <property name="leap-password" type="string" description="The login password for legacy LEAP connections (ie, key-mgmt = &quot;ieee8021x&quot; and auth-alg = &quot;leap&quot;)." />
+ <property name="leap-password-flags" type="NMSettingSecretFlags (uint32)" description="Flags indicating how to handle the &quot;leap-password&quot; property." />
+ <property name="leap-username" type="string" description="The login username for legacy LEAP connections (ie, key-mgmt = &quot;ieee8021x&quot; and auth-alg = &quot;leap&quot;)." />
+ <property name="name" type="string" default="802-11-wireless-security" description="The setting's name, which uniquely identifies the setting within the connection. Each setting type has a name unique to that type, for example &quot;ppp&quot; or &quot;wireless&quot; or &quot;wired&quot;." />
+ <property name="pairwise" type="array of string" default="[]" description="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 &quot;tkip&quot; or &quot;ccmp&quot;." />
+ <property name="proto" type="array of string" default="[]" description="List of strings specifying the allowed WPA protocol versions to use. Each element may be one &quot;wpa&quot; (allow WPA) or &quot;rsn&quot; (allow WPA2/RSN). If not specified, both WPA and RSN connections are allowed." />
+ <property name="psk" type="string" description="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." />
+ <property name="psk-flags" type="NMSettingSecretFlags (uint32)" description="Flags indicating how to handle the &quot;psk&quot; property." />
+ <property name="wep-key-flags" type="NMSettingSecretFlags (uint32)" description="Flags indicating how to handle the &quot;wep-key0&quot;, &quot;wep-key1&quot;, &quot;wep-key2&quot;, and &quot;wep-key3&quot; properties." />
+ <property name="wep-key-type" type="NMWepKeyType (uint32)" description="Controls the interpretation of WEP keys. Allowed values are NM_WEP_KEY_TYPE_KEY (1), 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 (2), 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." />
+ <property name="wep-key0" type="string" description="Index 0 WEP key. This is the WEP key used in most networks. See the &quot;wep-key-type&quot; property for a description of how this key is interpreted." />
+ <property name="wep-key1" type="string" description="Index 1 WEP key. This WEP index is not used by most networks. See the &quot;wep-key-type&quot; property for a description of how this key is interpreted." />
+ <property name="wep-key2" type="string" description="Index 2 WEP key. This WEP index is not used by most networks. See the &quot;wep-key-type&quot; property for a description of how this key is interpreted." />
+ <property name="wep-key3" type="string" description="Index 3 WEP key. This WEP index is not used by most networks. See the &quot;wep-key-type&quot; property for a description of how this key is interpreted." />
+ <property name="wep-tx-keyidx" type="uint32" default="0" description="When static WEP is used (ie, key-mgmt = &quot;none&quot;) 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." />
+ </setting>
+</nm-setting-docs>
diff --git a/libnm/nm-types.h b/libnm/nm-types.h
new file mode 100644
index 000000000..ee1ed643e
--- /dev/null
+++ b/libnm/nm-types.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 2014 Red Hat, Inc.
+ */
+
+#ifndef __NM_TYPES_H__
+#define __NM_TYPES_H__
+
+#include <gio/gio.h>
+
+#include <nm-dbus-interface.h>
+#include <nm-connection.h>
+
+typedef struct _NMAccessPoint NMAccessPoint;
+typedef struct _NMActiveConnection NMActiveConnection;
+typedef struct _NMClient NMClient;
+typedef struct _NMDevice NMDevice;
+typedef struct _NMDeviceAdsl NMDeviceAdsl;
+typedef struct _NMDeviceBond NMDeviceBond;
+typedef struct _NMDeviceBridge NMDeviceBridge;
+typedef struct _NMDeviceBt NMDeviceBt;
+typedef struct _NMDeviceEthernet NMDeviceEthernet;
+typedef struct _NMDeviceGeneric NMDeviceGeneric;
+typedef struct _NMDeviceInfiniband NMDeviceInfiniband;
+typedef struct _NMDeviceModem NMDeviceModem;
+typedef struct _NMDeviceOlpcMesh NMDeviceOlpcMesh;
+typedef struct _NMDeviceTeam NMDeviceTeam;
+typedef struct _NMDeviceVlan NMDeviceVlan;
+typedef struct _NMDeviceWifi NMDeviceWifi;
+typedef struct _NMDeviceWimax NMDeviceWimax;
+typedef struct _NMDhcpConfig NMDhcpConfig;
+typedef struct _NMIPConfig NMIPConfig;
+typedef struct _NMObject NMObject;
+typedef struct _NMRemoteConnection NMRemoteConnection;
+typedef struct _NMVpnConnection NMVpnConnection;
+typedef struct _NMWimaxNsp NMWimaxNsp;
+
+#endif /* NM_TYPES_H */
diff --git a/libnm/nm-vpn-connection.c b/libnm/nm-vpn-connection.c
new file mode 100644
index 000000000..f46dc0ca0
--- /dev/null
+++ b/libnm/nm-vpn-connection.c
@@ -0,0 +1,233 @@
+/* -*- 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 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2012 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include "nm-vpn-connection.h"
+#include "nm-dbus-interface.h"
+#include "nm-utils.h"
+#include "nm-object-private.h"
+#include "nm-active-connection.h"
+#include "nm-dbus-helpers.h"
+
+#include "nmdbus-vpn-connection.h"
+
+G_DEFINE_TYPE (NMVpnConnection, nm_vpn_connection, NM_TYPE_ACTIVE_CONNECTION)
+
+#define NM_VPN_CONNECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_VPN_CONNECTION, NMVpnConnectionPrivate))
+
+typedef struct {
+ char *banner;
+ NMVpnConnectionState vpn_state;
+} NMVpnConnectionPrivate;
+
+enum {
+ PROP_0,
+ PROP_VPN_STATE,
+ PROP_BANNER,
+
+ LAST_PROP
+};
+
+enum {
+ VPN_STATE_CHANGED,
+
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+
+/**
+ * nm_vpn_connection_get_banner:
+ * @vpn: a #NMVpnConnection
+ *
+ * Gets the VPN login banner of the active #NMVpnConnection.
+ *
+ * Returns: the VPN login banner of the VPN connection. This is the internal
+ * string used by the connection, and must not be modified.
+ **/
+const char *
+nm_vpn_connection_get_banner (NMVpnConnection *vpn)
+{
+ NMVpnConnectionPrivate *priv;
+
+ g_return_val_if_fail (NM_IS_VPN_CONNECTION (vpn), NULL);
+
+ priv = NM_VPN_CONNECTION_GET_PRIVATE (vpn);
+
+ if (priv->vpn_state != NM_VPN_CONNECTION_STATE_ACTIVATED)
+ return NULL;
+
+ return priv->banner;
+}
+
+/**
+ * nm_vpn_connection_get_vpn_state:
+ * @vpn: a #NMVpnConnection
+ *
+ * Gets the current #NMVpnConnection state.
+ *
+ * Returns: the VPN state of the active VPN connection.
+ **/
+NMVpnConnectionState
+nm_vpn_connection_get_vpn_state (NMVpnConnection *vpn)
+{
+ g_return_val_if_fail (NM_IS_VPN_CONNECTION (vpn), NM_VPN_CONNECTION_STATE_UNKNOWN);
+
+ return NM_VPN_CONNECTION_GET_PRIVATE (vpn)->vpn_state;
+}
+
+static void
+vpn_state_changed_proxy (NMDBusVpnConnection *proxy,
+ guint vpn_state,
+ guint reason,
+ gpointer user_data)
+{
+ NMVpnConnection *connection = NM_VPN_CONNECTION (user_data);
+ NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
+
+ 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);
+ }
+}
+
+/*****************************************************************************/
+
+static void
+nm_vpn_connection_init (NMVpnConnection *connection)
+{
+ NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
+
+ priv->vpn_state = NM_VPN_CONNECTION_STATE_UNKNOWN;
+}
+
+static void
+init_dbus (NMObject *object)
+{
+ NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (object);
+ const NMPropertiesInfo property_info[] = {
+ { NM_VPN_CONNECTION_BANNER, &priv->banner },
+ { NM_VPN_CONNECTION_VPN_STATE, &priv->vpn_state },
+ { NULL },
+ };
+ GDBusProxy *proxy;
+
+ NM_OBJECT_CLASS (nm_vpn_connection_parent_class)->init_dbus (object);
+
+ _nm_object_register_properties (object,
+ NM_DBUS_INTERFACE_VPN_CONNECTION,
+ property_info);
+
+ proxy = _nm_object_get_proxy (object, NM_DBUS_INTERFACE_VPN_CONNECTION);
+ g_signal_connect (proxy, "vpn-state-changed",
+ G_CALLBACK (vpn_state_changed_proxy), object);
+}
+
+static void
+finalize (GObject *object)
+{
+ NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (object);
+
+ g_free (priv->banner);
+
+ G_OBJECT_CLASS (nm_vpn_connection_parent_class)->finalize (object);
+}
+
+static void
+get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NMVpnConnection *self = NM_VPN_CONNECTION (object);
+
+ switch (prop_id) {
+ case PROP_VPN_STATE:
+ g_value_set_enum (value, nm_vpn_connection_get_vpn_state (self));
+ break;
+ case PROP_BANNER:
+ g_value_set_string (value, nm_vpn_connection_get_banner (self));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_vpn_connection_class_init (NMVpnConnectionClass *connection_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (connection_class);
+ NMObjectClass *nm_object_class = NM_OBJECT_CLASS (connection_class);
+
+ g_type_class_add_private (connection_class, sizeof (NMVpnConnectionPrivate));
+
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_VPN_CONNECTION);
+ _nm_dbus_register_proxy_type (NM_DBUS_INTERFACE_VPN_CONNECTION,
+ NMDBUS_TYPE_VPN_CONNECTION_PROXY);
+
+ /* virtual methods */
+ object_class->get_property = get_property;
+ object_class->finalize = finalize;
+
+ nm_object_class->init_dbus = init_dbus;
+
+ /* properties */
+
+ /**
+ * NMVpnConnection:vpn-state:
+ *
+ * The VPN state of the active VPN connection.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_VPN_STATE,
+ g_param_spec_enum (NM_VPN_CONNECTION_VPN_STATE, "", "",
+ NM_TYPE_VPN_CONNECTION_STATE,
+ NM_VPN_CONNECTION_STATE_UNKNOWN,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMVpnConnection:banner:
+ *
+ * The VPN login banner of the active VPN connection.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_BANNER,
+ g_param_spec_string (NM_VPN_CONNECTION_BANNER, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /* signals */
+ signals[VPN_STATE_CHANGED] =
+ g_signal_new ("vpn-state-changed",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMVpnConnectionClass, vpn_state_changed),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 2,
+ G_TYPE_UINT, G_TYPE_UINT);
+}
diff --git a/libnm/nm-vpn-connection.h b/libnm/nm-vpn-connection.h
new file mode 100644
index 000000000..349de41ea
--- /dev/null
+++ b/libnm/nm-vpn-connection.h
@@ -0,0 +1,67 @@
+/* -*- 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 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2010 Red Hat, Inc.
+ */
+
+#ifndef __NM_VPN_CONNECTION_H__
+#define __NM_VPN_CONNECTION_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-active-connection.h>
+#include <nm-vpn-dbus-interface.h>
+
+G_BEGIN_DECLS
+
+#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))
+#define NM_VPN_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_VPN_CONNECTION, NMVpnConnectionClass))
+#define NM_IS_VPN_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_VPN_CONNECTION))
+#define NM_IS_VPN_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_VPN_CONNECTION))
+#define NM_VPN_CONNECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_VPN_CONNECTION, NMVpnConnectionClass))
+
+#define NM_VPN_CONNECTION_VPN_STATE "vpn-state"
+#define NM_VPN_CONNECTION_BANNER "banner"
+
+struct _NMVpnConnection {
+ NMActiveConnection parent;
+};
+
+typedef struct {
+ NMActiveConnectionClass parent;
+
+ /* Signals */
+ void (*vpn_state_changed) (NMVpnConnection *connection,
+ NMVpnConnectionState state,
+ NMVpnConnectionStateReason reason);
+
+ /*< private >*/
+ gpointer padding[4];
+} NMVpnConnectionClass;
+
+GType nm_vpn_connection_get_type (void);
+
+NMVpnConnectionState nm_vpn_connection_get_vpn_state (NMVpnConnection *vpn);
+const char * nm_vpn_connection_get_banner (NMVpnConnection *vpn);
+
+G_END_DECLS
+
+#endif /* __NM_VPN_CONNECTION_H__ */
diff --git a/libnm/nm-vpn-editor-plugin.c b/libnm/nm-vpn-editor-plugin.c
new file mode 100644
index 000000000..904a6be48
--- /dev/null
+++ b/libnm/nm-vpn-editor-plugin.c
@@ -0,0 +1,181 @@
+/* -*- 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 2008 - 2010 Red Hat, Inc.
+ * Copyright 2008 Novell, Inc.
+ */
+
+#include "config.h"
+
+#include "nm-vpn-editor-plugin.h"
+
+static void nm_vpn_editor_plugin_default_init (NMVpnEditorPluginInterface *iface);
+
+G_DEFINE_INTERFACE (NMVpnEditorPlugin, nm_vpn_editor_plugin, G_TYPE_OBJECT)
+
+static void
+nm_vpn_editor_plugin_default_init (NMVpnEditorPluginInterface *iface)
+{
+ /* Properties */
+
+ /**
+ * NMVpnEditorPlugin:name:
+ *
+ * Short display name of the VPN plugin.
+ */
+ g_object_interface_install_property (iface,
+ g_param_spec_string (NM_VPN_EDITOR_PLUGIN_NAME, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMVpnEditorPlugin:description:
+ *
+ * Longer description of the VPN plugin.
+ */
+ g_object_interface_install_property (iface,
+ g_param_spec_string (NM_VPN_EDITOR_PLUGIN_DESCRIPTION, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMVpnEditorPlugin:service:
+ *
+ * D-Bus service name of the plugin's VPN service.
+ */
+ g_object_interface_install_property (iface,
+ g_param_spec_string (NM_VPN_EDITOR_PLUGIN_SERVICE, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+}
+
+/**
+ * nm_vpn_editor_plugin_get_editor:
+ *
+ * Returns: (transfer full):
+ */
+NMVpnEditor *
+nm_vpn_editor_plugin_get_editor (NMVpnEditorPlugin *plugin,
+ NMConnection *connection,
+ GError **error)
+{
+ g_return_val_if_fail (NM_IS_VPN_EDITOR_PLUGIN (plugin), NULL);
+
+ return NM_VPN_EDITOR_PLUGIN_GET_INTERFACE (plugin)->get_editor (plugin, connection, error);
+}
+
+NMVpnEditorPluginCapability
+nm_vpn_editor_plugin_get_capabilities (NMVpnEditorPlugin *plugin)
+{
+ g_return_val_if_fail (NM_IS_VPN_EDITOR_PLUGIN (plugin), 0);
+
+ return NM_VPN_EDITOR_PLUGIN_GET_INTERFACE (plugin)->get_capabilities (plugin);
+}
+
+/**
+ * nm_vpn_editor_plugin_import:
+ *
+ * Returns: (transfer full):
+ */
+NMConnection *
+nm_vpn_editor_plugin_import (NMVpnEditorPlugin *plugin,
+ const char *path,
+ GError **error)
+{
+ g_return_val_if_fail (NM_IS_VPN_EDITOR_PLUGIN (plugin), NULL);
+
+ if (nm_vpn_editor_plugin_get_capabilities (plugin) & NM_VPN_EDITOR_PLUGIN_CAPABILITY_IMPORT) {
+ g_return_val_if_fail (NM_VPN_EDITOR_PLUGIN_GET_INTERFACE (plugin)->import_from_file != NULL, NULL);
+ return NM_VPN_EDITOR_PLUGIN_GET_INTERFACE (plugin)->import_from_file (plugin, path, error);
+ }
+ return NULL;
+}
+
+gboolean
+nm_vpn_editor_plugin_export (NMVpnEditorPlugin *plugin,
+ const char *path,
+ NMConnection *connection,
+ GError **error)
+{
+ g_return_val_if_fail (NM_IS_VPN_EDITOR_PLUGIN (plugin), FALSE);
+
+ if (nm_vpn_editor_plugin_get_capabilities (plugin) & NM_VPN_EDITOR_PLUGIN_CAPABILITY_EXPORT) {
+ g_return_val_if_fail (NM_VPN_EDITOR_PLUGIN_GET_INTERFACE (plugin)->export_to_file != NULL, FALSE);
+ return NM_VPN_EDITOR_PLUGIN_GET_INTERFACE (plugin)->export_to_file (plugin, path, connection, error);
+ }
+ return FALSE;
+}
+
+char *
+nm_vpn_editor_plugin_get_suggested_filename (NMVpnEditorPlugin *plugin,
+ NMConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_VPN_EDITOR_PLUGIN (plugin), NULL);
+
+ if (NM_VPN_EDITOR_PLUGIN_GET_INTERFACE (plugin)->get_suggested_filename)
+ return NM_VPN_EDITOR_PLUGIN_GET_INTERFACE (plugin)->get_suggested_filename (plugin, connection);
+ return NULL;
+}
+
+
+static void nm_vpn_editor_default_init (NMVpnEditorInterface *iface);
+
+G_DEFINE_INTERFACE (NMVpnEditor, nm_vpn_editor, G_TYPE_OBJECT)
+
+static void
+nm_vpn_editor_default_init (NMVpnEditorInterface *iface)
+{
+ GType iface_type = G_TYPE_FROM_INTERFACE (iface);
+
+ /* Signals */
+ g_signal_new ("changed",
+ iface_type,
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMVpnEditorInterface, changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+}
+
+/**
+ * nm_vpn_editor_get_widget:
+ *
+ * Returns: (transfer none):
+ */
+GObject *
+nm_vpn_editor_get_widget (NMVpnEditor *editor)
+{
+ g_return_val_if_fail (NM_IS_VPN_EDITOR (editor), NULL);
+
+ return NM_VPN_EDITOR_GET_INTERFACE (editor)->get_widget (editor);
+}
+
+gboolean
+nm_vpn_editor_update_connection (NMVpnEditor *editor,
+ NMConnection *connection,
+ GError **error)
+{
+ g_return_val_if_fail (NM_IS_VPN_EDITOR (editor), FALSE);
+
+ if (error)
+ g_return_val_if_fail (*error == NULL, FALSE);
+
+ return NM_VPN_EDITOR_GET_INTERFACE (editor)->update_connection (editor, connection, error);
+}
diff --git a/libnm/nm-vpn-editor-plugin.h b/libnm/nm-vpn-editor-plugin.h
new file mode 100644
index 000000000..5910aa365
--- /dev/null
+++ b/libnm/nm-vpn-editor-plugin.h
@@ -0,0 +1,189 @@
+/* -*- 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 2008 - 2014 Red Hat, Inc.
+ * Copyright 2008 Novell, Inc.
+ */
+
+#ifndef __NM_VPN_EDITOR_PLUGIN_H__
+#define __NM_VPN_EDITOR_PLUGIN_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <glib.h>
+#include <glib-object.h>
+#include <nm-types.h>
+
+G_BEGIN_DECLS
+
+typedef struct _NMVpnEditorPlugin NMVpnEditorPlugin;
+typedef struct _NMVpnEditor NMVpnEditor;
+
+/* Plugin's factory function that returns a GObject that implements
+ * NMVpnEditorPlugin.
+ */
+#ifndef __GI_SCANNER__
+typedef NMVpnEditorPlugin * (*NMVpnEditorPluginFactory) (GError **error);
+NMVpnEditorPlugin *nm_vpn_editor_plugin_factory (GError **error);
+#endif
+
+
+/**************************************************/
+/* Editor plugin interface */
+/**************************************************/
+
+#define NM_TYPE_VPN_EDITOR_PLUGIN (nm_vpn_editor_plugin_get_type ())
+#define NM_VPN_EDITOR_PLUGIN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_VPN_EDITOR_PLUGIN, NMVpnEditorPlugin))
+#define NM_IS_VPN_EDITOR_PLUGIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_VPN_EDITOR_PLUGIN))
+#define NM_VPN_EDITOR_PLUGIN_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), NM_TYPE_VPN_EDITOR_PLUGIN, NMVpnEditorPluginInterface))
+
+/**
+ * NMVpnEditorPluginCapability:
+ * @NM_VPN_EDITOR_PLUGIN_CAPABILITY_NONE: unknown or no capability
+ * @NM_VPN_EDITOR_PLUGIN_CAPABILITY_IMPORT: the plugin can import new connections
+ * @NM_VPN_EDITOR_PLUGIN_CAPABILITY_EXPORT: the plugin can export connections
+ * @NM_VPN_EDITOR_PLUGIN_CAPABILITY_IPV6: the plugin supports IPv6 addressing
+ *
+ * Flags that indicate certain capabilities of the plugin to editor programs.
+ **/
+typedef enum /*< flags >*/ {
+ NM_VPN_EDITOR_PLUGIN_CAPABILITY_NONE = 0x00,
+ NM_VPN_EDITOR_PLUGIN_CAPABILITY_IMPORT = 0x01,
+ NM_VPN_EDITOR_PLUGIN_CAPABILITY_EXPORT = 0x02,
+ NM_VPN_EDITOR_PLUGIN_CAPABILITY_IPV6 = 0x04
+} NMVpnEditorPluginCapability;
+
+/* Short display name of the VPN plugin */
+#define NM_VPN_EDITOR_PLUGIN_NAME "name"
+
+/* Longer description of the VPN plugin */
+#define NM_VPN_EDITOR_PLUGIN_DESCRIPTION "description"
+
+/* D-Bus service name of the plugin's VPN service */
+#define NM_VPN_EDITOR_PLUGIN_SERVICE "service"
+
+/**
+ * NMVpnEditorPluginInterface:
+ * @g_iface: the parent interface
+ * @get_editor: returns an #NMVpnEditor, pre-filled with values from @connection
+ * if non-%NULL.
+ * @get_capabilities: returns a bitmask of capabilities.
+ * @import_from_file: 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.
+ * @export_to_file: 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.
+ * @get_suggested_filename: For a given connection, return a suggested file
+ * name. Returned value will be %NULL or a suggested file name to be freed by
+ * the caller.
+ *
+ * Interface for VPN editor plugins.
+ */
+typedef struct {
+ GTypeInterface g_iface;
+
+ NMVpnEditor * (*get_editor) (NMVpnEditorPlugin *plugin,
+ NMConnection *connection,
+ GError **error);
+
+ NMVpnEditorPluginCapability (*get_capabilities) (NMVpnEditorPlugin *plugin);
+
+ NMConnection * (*import_from_file) (NMVpnEditorPlugin *plugin,
+ const char *path,
+ GError **error);
+
+ gboolean (*export_to_file) (NMVpnEditorPlugin *plugin,
+ const char *path,
+ NMConnection *connection,
+ GError **error);
+
+ char * (*get_suggested_filename) (NMVpnEditorPlugin *plugin, NMConnection *connection);
+} NMVpnEditorPluginInterface;
+
+GType nm_vpn_editor_plugin_get_type (void);
+
+NMVpnEditor *nm_vpn_editor_plugin_get_editor (NMVpnEditorPlugin *plugin,
+ NMConnection *connection,
+ GError **error);
+
+NMVpnEditorPluginCapability nm_vpn_editor_plugin_get_capabilities (NMVpnEditorPlugin *plugin);
+
+NMConnection *nm_vpn_editor_plugin_import (NMVpnEditorPlugin *plugin,
+ const char *path,
+ GError **error);
+gboolean nm_vpn_editor_plugin_export (NMVpnEditorPlugin *plugin,
+ const char *path,
+ NMConnection *connection,
+ GError **error);
+char *nm_vpn_editor_plugin_get_suggested_filename (NMVpnEditorPlugin *plugin,
+ NMConnection *connection);
+
+/**************************************************/
+/* Editor interface */
+/**************************************************/
+
+#define NM_TYPE_VPN_EDITOR (nm_vpn_editor_get_type ())
+#define NM_VPN_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_VPN_EDITOR, NMVpnEditor))
+#define NM_IS_VPN_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_VPN_EDITOR))
+#define NM_VPN_EDITOR_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), NM_TYPE_VPN_EDITOR, NMVpnEditorInterface))
+
+/**
+ * NMVpnEditorInterface:
+ * @g_iface: the parent interface
+ * @get_widget: return the #GtkWidget for the VPN editor's UI
+ * @placeholder: not currently used
+ * @update_connection: 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.
+ * @changed: emitted when the value of a UI widget changes. May trigger a
+ * validity check via @update_connection to write values to the connection.
+ *
+ * Interface for editing a specific #NMConnection
+ */
+typedef struct {
+ GTypeInterface g_iface;
+
+ GObject * (*get_widget) (NMVpnEditor *editor);
+
+ void (*placeholder) (void);
+
+ gboolean (*update_connection) (NMVpnEditor *editor,
+ NMConnection *connection,
+ GError **error);
+
+ void (*changed) (NMVpnEditor *editor);
+} NMVpnEditorInterface;
+
+GType nm_vpn_editor_get_type (void);
+
+GObject * nm_vpn_editor_get_widget (NMVpnEditor *editor);
+
+gboolean nm_vpn_editor_update_connection (NMVpnEditor *editor,
+ NMConnection *connection,
+ GError **error);
+
+G_END_DECLS
+
+#endif /* NM_VPN_EDITOR_PLUGIN_H */
diff --git a/libnm/nm-vpn-plugin-old.c b/libnm/nm-vpn-plugin-old.c
new file mode 100644
index 000000000..e6843f7e1
--- /dev/null
+++ b/libnm/nm-vpn-plugin-old.c
@@ -0,0 +1,1206 @@
+/* -*- 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 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2008 Red Hat, Inc.
+ */
+
+/* This interface is expected to be deprecated in NM 1.2, at which point there
+ * will be a new "NMVpnPlugin" class to replace it.
+ */
+
+#include "config.h"
+
+#include <errno.h>
+#include <signal.h>
+#include <stdlib.h>
+
+#include <glib/gi18n-lib.h>
+#include <gio/gio.h>
+
+#include "nm-glib-compat.h"
+#include "nm-vpn-plugin-old.h"
+#include "nm-enum-types.h"
+#include "nm-utils.h"
+#include "nm-connection.h"
+#include "nm-dbus-helpers.h"
+#include "nm-core-internal.h"
+#include "nm-simple-connection.h"
+
+#include "nmdbus-vpn-plugin.h"
+
+#define NM_VPN_PLUGIN_OLD_QUIT_TIMER 20
+
+static void nm_vpn_plugin_old_initable_iface_init (GInitableIface *iface);
+
+G_DEFINE_ABSTRACT_TYPE_WITH_CODE (NMVpnPluginOld, nm_vpn_plugin_old, G_TYPE_OBJECT,
+ G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, nm_vpn_plugin_old_initable_iface_init);
+ )
+
+typedef struct {
+ NMVpnServiceState state;
+
+ /* DBUS-y stuff */
+ GDBusConnection *connection;
+ NMDBusVpnPlugin *dbus_vpn_plugin_old;
+ char *dbus_service_name;
+
+ /* Temporary stuff */
+ guint connect_timer;
+ guint quit_timer;
+ guint fail_stop_id;
+ gboolean interactive;
+
+ gboolean got_config;
+ gboolean has_ip4, got_ip4;
+ gboolean has_ip6, got_ip6;
+
+ /* Config stuff copied from config to ip4config */
+ char *banner, *tundev, *gateway, *mtu;
+} NMVpnPluginOldPrivate;
+
+#define NM_VPN_PLUGIN_OLD_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_VPN_PLUGIN_OLD, NMVpnPluginOldPrivate))
+
+enum {
+ STATE_CHANGED,
+ CONFIG,
+ IP4_CONFIG,
+ IP6_CONFIG,
+ LOGIN_BANNER,
+ FAILURE,
+ QUIT,
+ SECRETS_REQUIRED,
+
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+enum {
+ PROP_0,
+ PROP_DBUS_SERVICE_NAME,
+ PROP_STATE,
+
+ LAST_PROP
+};
+
+static GSList *active_plugins = NULL;
+
+
+static void
+nm_vpn_plugin_old_set_connection (NMVpnPluginOld *plugin,
+ GDBusConnection *connection)
+{
+ NMVpnPluginOldPrivate *priv = NM_VPN_PLUGIN_OLD_GET_PRIVATE (plugin);
+
+ g_clear_object (&priv->connection);
+
+ priv->connection = g_object_ref (connection);
+}
+
+/**
+ * nm_vpn_plugin_old_get_connection:
+ *
+ * Returns: (transfer full):
+ */
+GDBusConnection *
+nm_vpn_plugin_old_get_connection (NMVpnPluginOld *plugin)
+{
+ GDBusConnection *connection;
+
+ g_return_val_if_fail (NM_IS_VPN_PLUGIN_OLD (plugin), NULL);
+
+ connection = NM_VPN_PLUGIN_OLD_GET_PRIVATE (plugin)->connection;
+
+ if (connection)
+ g_object_ref (connection);
+
+ return connection;
+}
+
+NMVpnServiceState
+nm_vpn_plugin_old_get_state (NMVpnPluginOld *plugin)
+{
+ g_return_val_if_fail (NM_IS_VPN_PLUGIN_OLD (plugin), NM_VPN_SERVICE_STATE_UNKNOWN);
+
+ return NM_VPN_PLUGIN_OLD_GET_PRIVATE (plugin)->state;
+}
+
+void
+nm_vpn_plugin_old_set_state (NMVpnPluginOld *plugin,
+ NMVpnServiceState state)
+{
+ NMVpnPluginOldPrivate *priv;
+
+ g_return_if_fail (NM_IS_VPN_PLUGIN_OLD (plugin));
+
+ priv = NM_VPN_PLUGIN_OLD_GET_PRIVATE (plugin);
+ if (priv->state != state) {
+ priv->state = state;
+ g_signal_emit (plugin, signals[STATE_CHANGED], 0, state);
+ }
+}
+
+void
+nm_vpn_plugin_old_set_login_banner (NMVpnPluginOld *plugin,
+ const char *banner)
+{
+ g_return_if_fail (NM_IS_VPN_PLUGIN_OLD (plugin));
+ g_return_if_fail (banner != NULL);
+
+ g_signal_emit (plugin, signals[LOGIN_BANNER], 0, banner);
+}
+
+void
+nm_vpn_plugin_old_failure (NMVpnPluginOld *plugin,
+ NMVpnPluginFailure reason)
+{
+ g_return_if_fail (NM_IS_VPN_PLUGIN_OLD (plugin));
+
+ g_signal_emit (plugin, signals[FAILURE], 0, reason);
+}
+
+gboolean
+nm_vpn_plugin_old_disconnect (NMVpnPluginOld *plugin, GError **err)
+{
+ gboolean ret = FALSE;
+ NMVpnServiceState state;
+
+ g_return_val_if_fail (NM_IS_VPN_PLUGIN_OLD (plugin), FALSE);
+
+ state = nm_vpn_plugin_old_get_state (plugin);
+ switch (state) {
+ 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 already being stopped.");
+ break;
+ case NM_VPN_SERVICE_STATE_STOPPED:
+ g_set_error (err,
+ NM_VPN_PLUGIN_ERROR,
+ NM_VPN_PLUGIN_ERROR_ALREADY_STOPPED,
+ "%s",
+ "Could not process the request because no VPN connection was active.");
+ break;
+ case NM_VPN_SERVICE_STATE_STARTING:
+ case NM_VPN_SERVICE_STATE_STARTED:
+ nm_vpn_plugin_old_set_state (plugin, NM_VPN_SERVICE_STATE_STOPPING);
+ ret = NM_VPN_PLUGIN_OLD_GET_CLASS (plugin)->disconnect (plugin, err);
+ nm_vpn_plugin_old_set_state (plugin, NM_VPN_SERVICE_STATE_STOPPED);
+ break;
+ case NM_VPN_SERVICE_STATE_INIT:
+ ret = TRUE;
+ break;
+
+ default:
+ g_warning ("Unhandled VPN service state %d", state);
+ g_assert_not_reached ();
+ break;
+ }
+
+ return ret;
+}
+
+static void
+nm_vpn_plugin_old_emit_quit (NMVpnPluginOld *plugin)
+{
+ g_signal_emit (plugin, signals[QUIT], 0);
+}
+
+static gboolean
+connect_timer_expired (gpointer data)
+{
+ NMVpnPluginOld *plugin = NM_VPN_PLUGIN_OLD (data);
+ GError *err = NULL;
+
+ g_message ("Connect timer expired, disconnecting.");
+ nm_vpn_plugin_old_disconnect (plugin, &err);
+ if (err) {
+ g_warning ("Disconnect failed: %s", err->message);
+ g_error_free (err);
+ }
+
+ return FALSE;
+}
+
+static gboolean
+quit_timer_expired (gpointer data)
+{
+ NMVpnPluginOld *plugin = NM_VPN_PLUGIN_OLD (data);
+
+ nm_vpn_plugin_old_emit_quit (plugin);
+
+ return FALSE;
+}
+
+static gboolean
+fail_stop (gpointer data)
+{
+ NMVpnPluginOld *plugin = NM_VPN_PLUGIN_OLD (data);
+
+ nm_vpn_plugin_old_set_state (plugin, NM_VPN_SERVICE_STATE_STOPPED);
+ return FALSE;
+}
+
+static void
+schedule_fail_stop (NMVpnPluginOld *plugin)
+{
+ NMVpnPluginOldPrivate *priv = NM_VPN_PLUGIN_OLD_GET_PRIVATE (plugin);
+
+ if (priv->fail_stop_id)
+ g_source_remove (priv->fail_stop_id);
+ priv->fail_stop_id = g_idle_add (fail_stop, plugin);
+}
+
+void
+nm_vpn_plugin_old_set_config (NMVpnPluginOld *plugin,
+ GVariant *config)
+{
+ NMVpnPluginOldPrivate *priv = NM_VPN_PLUGIN_OLD_GET_PRIVATE (plugin);
+
+ g_return_if_fail (NM_IS_VPN_PLUGIN_OLD (plugin));
+ g_return_if_fail (config != NULL);
+
+ priv->got_config = TRUE;
+
+ g_variant_lookup (config, NM_VPN_PLUGIN_CONFIG_HAS_IP4, "b", &priv->has_ip4);
+ g_variant_lookup (config, NM_VPN_PLUGIN_CONFIG_HAS_IP6, "b", &priv->has_ip6);
+
+ g_warn_if_fail (priv->has_ip4 || priv->has_ip6);
+
+ /* Record the items that need to also be inserted into the
+ * ip4config, for compatibility with older daemons.
+ */
+ g_clear_pointer (&priv->banner, g_free);
+ g_variant_lookup (config, NM_VPN_PLUGIN_CONFIG_BANNER, "&s", &priv->banner);
+ g_clear_pointer (&priv->tundev, g_free);
+ g_variant_lookup (config, NM_VPN_PLUGIN_CONFIG_TUNDEV, "&s", &priv->tundev);
+ g_clear_pointer (&priv->gateway, g_free);
+ g_variant_lookup (config, NM_VPN_PLUGIN_CONFIG_EXT_GATEWAY, "&s", &priv->gateway);
+ g_clear_pointer (&priv->mtu, g_free);
+ g_variant_lookup (config, NM_VPN_PLUGIN_CONFIG_MTU, "&s", &priv->mtu);
+
+ g_signal_emit (plugin, signals[CONFIG], 0, config);
+}
+
+void
+nm_vpn_plugin_old_set_ip4_config (NMVpnPluginOld *plugin,
+ GVariant *ip4_config)
+{
+ NMVpnPluginOldPrivate *priv = NM_VPN_PLUGIN_OLD_GET_PRIVATE (plugin);
+ GVariant *combined_config;
+ GVariantBuilder builder;
+ GVariantIter iter;
+ const char *key, *value;
+
+ g_return_if_fail (NM_IS_VPN_PLUGIN_OLD (plugin));
+ g_return_if_fail (ip4_config != NULL);
+
+ priv->got_ip4 = TRUE;
+
+ /* Old plugins won't send the "config" signal and thus can't send
+ * NM_VPN_PLUGIN_OLD_CONFIG_HAS_IP4 either. But since they don't support IPv6,
+ * we can safely assume that, if we don't receive a "config" signal but do
+ * receive an "ip4-config" signal, the old plugin supports IPv4.
+ */
+ if (!priv->got_config)
+ priv->has_ip4 = TRUE;
+
+ /* Older NetworkManager daemons expect all config info to be in
+ * the ip4 config, so they won't even notice the "config" signal
+ * being emitted. So just copy all of that data into the ip4
+ * config too.
+ */
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{ss}"));
+ g_variant_iter_init (&iter, ip4_config);
+ while (g_variant_iter_next (&iter, "{&s&s}", &key, &value))
+ g_variant_builder_add (&builder, "{ss}", key, value);
+
+ if (priv->banner)
+ g_variant_builder_add (&builder, "{ss}", NM_VPN_PLUGIN_IP4_CONFIG_BANNER, &priv->banner);
+ if (priv->tundev)
+ g_variant_builder_add (&builder, "{ss}", NM_VPN_PLUGIN_IP4_CONFIG_TUNDEV, &priv->tundev);
+ if (priv->gateway)
+ g_variant_builder_add (&builder, "{ss}", NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY, &priv->gateway);
+ if (priv->mtu)
+ g_variant_builder_add (&builder, "{ss}", NM_VPN_PLUGIN_IP4_CONFIG_MTU, &priv->mtu);
+
+ combined_config = g_variant_builder_end (&builder);
+ g_variant_ref_sink (combined_config);
+ g_signal_emit (plugin, signals[IP4_CONFIG], 0, combined_config);
+ g_variant_unref (combined_config);
+
+ if ( priv->has_ip4 == priv->got_ip4
+ && priv->has_ip6 == priv->got_ip6)
+ nm_vpn_plugin_old_set_state (plugin, NM_VPN_SERVICE_STATE_STARTED);
+}
+
+void
+nm_vpn_plugin_old_set_ip6_config (NMVpnPluginOld *plugin,
+ GVariant *ip6_config)
+{
+ NMVpnPluginOldPrivate *priv = NM_VPN_PLUGIN_OLD_GET_PRIVATE (plugin);
+
+ g_return_if_fail (NM_IS_VPN_PLUGIN_OLD (plugin));
+ g_return_if_fail (ip6_config != NULL);
+
+ priv->got_ip6 = TRUE;
+ g_signal_emit (plugin, signals[IP6_CONFIG], 0, ip6_config);
+
+ if ( priv->has_ip4 == priv->got_ip4
+ && priv->has_ip6 == priv->got_ip6)
+ nm_vpn_plugin_old_set_state (plugin, NM_VPN_SERVICE_STATE_STARTED);
+}
+
+static void
+connect_timer_removed (gpointer data)
+{
+ NM_VPN_PLUGIN_OLD_GET_PRIVATE (data)->connect_timer = 0;
+}
+
+static void
+connect_timer_start (NMVpnPluginOld *plugin)
+{
+ NMVpnPluginOldPrivate *priv = NM_VPN_PLUGIN_OLD_GET_PRIVATE (plugin);
+
+ priv->connect_timer = g_timeout_add_seconds_full (G_PRIORITY_DEFAULT,
+ 60,
+ connect_timer_expired,
+ plugin,
+ connect_timer_removed);
+}
+
+static void
+_connect_generic (NMVpnPluginOld *plugin,
+ GDBusMethodInvocation *context,
+ GVariant *properties,
+ GVariant *details)
+{
+ NMVpnPluginOldPrivate *priv = NM_VPN_PLUGIN_OLD_GET_PRIVATE (plugin);
+ NMVpnPluginOldClass *vpn_class = NM_VPN_PLUGIN_OLD_GET_CLASS (plugin);
+ NMConnection *connection;
+ gboolean success = FALSE;
+ GError *error = NULL;
+
+ if (priv->state != NM_VPN_SERVICE_STATE_STOPPED &&
+ priv->state != NM_VPN_SERVICE_STATE_INIT) {
+ g_dbus_method_invocation_return_error (context,
+ NM_VPN_PLUGIN_ERROR,
+ NM_VPN_PLUGIN_ERROR_WRONG_STATE,
+ "Could not start connection: wrong plugin state %d",
+ priv->state);
+ return;
+ }
+
+ connection = nm_simple_connection_new_from_dbus (properties, &error);
+ if (!connection) {
+ g_dbus_method_invocation_return_error (context,
+ NM_VPN_PLUGIN_ERROR,
+ NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS,
+ "Invalid connection: (%d) %s",
+ error->code, error->message);
+ g_clear_error (&error);
+ }
+
+ priv->interactive = FALSE;
+ if (details && !vpn_class->connect_interactive) {
+ g_dbus_method_invocation_return_error (context,
+ NM_VPN_PLUGIN_ERROR,
+ NM_VPN_PLUGIN_ERROR_INTERACTIVE_NOT_SUPPORTED,
+ "Plugin does not implement ConnectInteractive()");
+ return;
+ }
+
+ nm_vpn_plugin_old_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) {
+ g_dbus_method_invocation_return_value (context, NULL);
+
+ /* Add a timer to make sure we do not wait indefinitely for the successful connect. */
+ connect_timer_start (plugin);
+ } else {
+ g_dbus_method_invocation_take_error (context, error);
+
+ /* 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);
+}
+
+static void
+impl_vpn_plugin_old_connect (NMVpnPluginOld *plugin,
+ GDBusMethodInvocation *context,
+ GVariant *connection,
+ gpointer user_data)
+{
+ _connect_generic (plugin, context, connection, NULL);
+}
+
+static void
+impl_vpn_plugin_old_connect_interactive (NMVpnPluginOld *plugin,
+ GDBusMethodInvocation *context,
+ GVariant *connection,
+ GVariant *details,
+ gpointer user_data)
+{
+ _connect_generic (plugin, context, connection, details);
+}
+
+/***************************************************************/
+
+static void
+impl_vpn_plugin_old_need_secrets (NMVpnPluginOld *plugin,
+ GDBusMethodInvocation *context,
+ GVariant *properties,
+ gpointer user_data)
+{
+ NMConnection *connection;
+ char *setting_name;
+ gboolean needed;
+ GError *error = NULL;
+
+ connection = nm_simple_connection_new_from_dbus (properties, &error);
+ if (!connection) {
+ g_dbus_method_invocation_return_error (context,
+ NM_VPN_PLUGIN_ERROR,
+ NM_VPN_PLUGIN_ERROR_INVALID_CONNECTION,
+ "The connection was invalid: %s",
+ error->message);
+ g_error_free (error);
+ return;
+ }
+
+ if (!NM_VPN_PLUGIN_OLD_GET_CLASS (plugin)->need_secrets) {
+ g_dbus_method_invocation_return_value (context,
+ g_variant_new ("(s)", ""));
+ return;
+ }
+
+ needed = NM_VPN_PLUGIN_OLD_GET_CLASS (plugin)->need_secrets (plugin, connection, &setting_name, &error);
+ if (error) {
+ g_dbus_method_invocation_take_error (context, error);
+ return;
+ }
+
+ if (needed) {
+ g_assert (setting_name);
+ g_dbus_method_invocation_return_value (context,
+ g_variant_new ("(s)", setting_name));
+ g_free (setting_name);
+ } else {
+ /* No secrets required */
+ g_dbus_method_invocation_return_value (context,
+ g_variant_new ("(s)", ""));
+ }
+}
+
+static void
+impl_vpn_plugin_old_new_secrets (NMVpnPluginOld *plugin,
+ GDBusMethodInvocation *context,
+ GVariant *properties,
+ gpointer user_data)
+{
+ NMVpnPluginOldPrivate *priv = NM_VPN_PLUGIN_OLD_GET_PRIVATE (plugin);
+ NMConnection *connection;
+ GError *error = NULL;
+ gboolean success;
+
+ if (priv->state != NM_VPN_SERVICE_STATE_STARTING) {
+ g_dbus_method_invocation_return_error (context,
+ NM_VPN_PLUGIN_ERROR,
+ NM_VPN_PLUGIN_ERROR_WRONG_STATE,
+ "Could not accept new secrets: wrong plugin state %d",
+ priv->state);
+ return;
+ }
+
+ connection = nm_simple_connection_new_from_dbus (properties, &error);
+ if (!connection) {
+ g_dbus_method_invocation_return_error (context,
+ NM_VPN_PLUGIN_ERROR,
+ NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS,
+ "Invalid connection: (%d) %s",
+ error->code, error->message);
+ g_clear_error (&error);
+ return;
+ }
+
+ if (!NM_VPN_PLUGIN_OLD_GET_CLASS (plugin)->new_secrets) {
+ g_dbus_method_invocation_return_error (context,
+ 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;
+ }
+
+ success = NM_VPN_PLUGIN_OLD_GET_CLASS (plugin)->new_secrets (plugin, connection, &error);
+ if (success) {
+ g_dbus_method_invocation_return_value (context, NULL);
+
+ /* Add a timer to make sure we do not wait indefinitely for the successful connect. */
+ connect_timer_start (plugin);
+ } else {
+ g_dbus_method_invocation_take_error (context, error);
+
+ /* 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);
+}
+
+/**
+ * nm_vpn_plugin_old_secrets_required:
+ * @plugin: the #NMVpnPluginOld
+ * @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.
+ */
+void
+nm_vpn_plugin_old_secrets_required (NMVpnPluginOld *plugin,
+ const char *message,
+ const char **hints)
+{
+ NMVpnPluginOldPrivate *priv = NM_VPN_PLUGIN_OLD_GET_PRIVATE (plugin);
+
+ /* Plugin must be able to accept the new secrets if it calls this method */
+ g_return_if_fail (NM_VPN_PLUGIN_OLD_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);
+}
+
+/***************************************************************/
+
+#define DATA_KEY_TAG "DATA_KEY="
+#define DATA_VAL_TAG "DATA_VAL="
+#define SECRET_KEY_TAG "SECRET_KEY="
+#define SECRET_VAL_TAG "SECRET_VAL="
+
+static void
+free_secret (gpointer data)
+{
+ char *secret = data;
+
+ memset (secret, 0, strlen (secret));
+ g_free (secret);
+}
+
+/**
+ * nm_vpn_plugin_old_read_vpn_details:
+ * @fd: file descriptor to read from, usually stdin (0)
+ * @out_data: (out) (transfer full): on successful return, a hash table
+ * (mapping char*:char*) containing the key/value pairs of VPN data items
+ * @out_secrets: (out) (transfer full): on successful return, a hash table
+ * (mapping char*:char*) containing the key/value pairsof VPN secrets
+ *
+ * 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.
+ *
+ * Returns: %TRUE if reading values was successful, %FALSE if not
+ **/
+gboolean
+nm_vpn_plugin_old_read_vpn_details (int fd,
+ GHashTable **out_data,
+ GHashTable **out_secrets)
+{
+ GHashTable *data, *secrets;
+ gboolean success = FALSE;
+ char *key = NULL, *val = NULL;
+ GString *line;
+ gchar c;
+
+ if (out_data)
+ g_return_val_if_fail (*out_data == NULL, FALSE);
+ if (out_secrets)
+ g_return_val_if_fail (*out_secrets == NULL, FALSE);
+
+ data = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ secrets = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, free_secret);
+
+ line = g_string_new (NULL);
+
+ /* Read stdin for data and secret items until we get a DONE */
+ while (1) {
+ ssize_t nr;
+ GHashTable *hash = NULL;
+
+ errno = 0;
+ nr = read (fd, &c, 1);
+ if (nr == -1) {
+ if (errno == EAGAIN) {
+ g_usleep (100);
+ continue;
+ }
+ break;
+ }
+
+ if (c != '\n') {
+ g_string_append_c (line, c);
+ continue;
+ }
+
+ /* Check for the finish marker */
+ if (strcmp (line->str, "DONE") == 0)
+ break;
+
+ /* Otherwise it's a data/secret item */
+ if (strncmp (line->str, DATA_KEY_TAG, strlen (DATA_KEY_TAG)) == 0) {
+ hash = data;
+ key = g_strdup (line->str + strlen (DATA_KEY_TAG));
+ } else if (strncmp (line->str, DATA_VAL_TAG, strlen (DATA_VAL_TAG)) == 0) {
+ hash = data;
+ val = g_strdup (line->str + strlen (DATA_VAL_TAG));
+ } else if (strncmp (line->str, SECRET_KEY_TAG, strlen (SECRET_KEY_TAG)) == 0) {
+ hash = secrets;
+ key = g_strdup (line->str + strlen (SECRET_KEY_TAG));
+ } else if (strncmp (line->str, SECRET_VAL_TAG, strlen (SECRET_VAL_TAG)) == 0) {
+ hash = secrets;
+ val = g_strdup (line->str + strlen (SECRET_VAL_TAG));
+ }
+ g_string_truncate (line, 0);
+
+ if (key && val && hash) {
+ g_hash_table_insert (hash, key, val);
+ key = NULL;
+ val = NULL;
+ success = TRUE; /* Got at least one value */
+ }
+ }
+
+ if (success) {
+ if (out_data)
+ *out_data = data;
+ else
+ g_hash_table_destroy (data);
+
+ if (out_secrets)
+ *out_secrets = secrets;
+ else
+ g_hash_table_destroy (secrets);
+ } else {
+ g_hash_table_destroy (data);
+ g_hash_table_destroy (secrets);
+ }
+
+ g_string_free (line, TRUE);
+ return success;
+}
+
+/**
+ * nm_vpn_plugin_old_get_secret_flags:
+ * @data: hash table containing VPN key/value pair data items
+ * @secret_name: VPN secret key name for which to retrieve flags for
+ * @out_flags: (out): on success, the flags associated with @secret_name
+ *
+ * Given a VPN secret key name, attempts to find the corresponding flags data
+ * item in @data. If found, converts the flags data item to
+ * #NMSettingSecretFlags and returns it.
+ *
+ * Returns: %TRUE if the flag data item was found and successfully converted
+ * to flags, %FALSE if not
+ **/
+gboolean
+nm_vpn_plugin_old_get_secret_flags (GHashTable *data,
+ const char *secret_name,
+ NMSettingSecretFlags *out_flags)
+{
+ char *flag_name;
+ const char *val;
+ unsigned long tmp;
+ gboolean success = FALSE;
+
+ g_return_val_if_fail (data != NULL, FALSE);
+ g_return_val_if_fail (secret_name != NULL, FALSE);
+ g_return_val_if_fail (out_flags != NULL, FALSE);
+ g_return_val_if_fail (*out_flags == NM_SETTING_SECRET_FLAG_NONE, FALSE);
+
+ flag_name = g_strdup_printf ("%s-flags", secret_name);
+
+ /* Try new flags value first */
+ val = g_hash_table_lookup (data, flag_name);
+ if (val) {
+ errno = 0;
+ tmp = strtoul (val, NULL, 10);
+ if (errno == 0 && tmp <= NM_SETTING_SECRET_FLAGS_ALL) {
+ *out_flags = (NMSettingSecretFlags) tmp;
+ success = TRUE;
+ }
+ }
+
+ g_free (flag_name);
+ return success;
+}
+
+/***************************************************************/
+
+static void
+impl_vpn_plugin_old_disconnect (NMVpnPluginOld *plugin,
+ GDBusMethodInvocation *context,
+ gpointer user_data)
+{
+ GError *error = NULL;
+
+ if (nm_vpn_plugin_old_disconnect (plugin, &error))
+ g_dbus_method_invocation_return_value (context, NULL);
+ else
+ g_dbus_method_invocation_take_error (context, error);
+}
+
+static void
+impl_vpn_plugin_old_set_config (NMVpnPluginOld *plugin,
+ GDBusMethodInvocation *context,
+ GVariant *config,
+ gpointer user_data)
+{
+ nm_vpn_plugin_old_set_config (plugin, config);
+ g_dbus_method_invocation_return_value (context, NULL);
+}
+
+static void
+impl_vpn_plugin_old_set_ip4_config (NMVpnPluginOld *plugin,
+ GDBusMethodInvocation *context,
+ GVariant *config,
+ gpointer user_data)
+{
+ nm_vpn_plugin_old_set_ip4_config (plugin, config);
+ g_dbus_method_invocation_return_value (context, NULL);
+}
+
+static void
+impl_vpn_plugin_old_set_ip6_config (NMVpnPluginOld *plugin,
+ GDBusMethodInvocation *context,
+ GVariant *config,
+ gpointer user_data)
+{
+ nm_vpn_plugin_old_set_ip6_config (plugin, config);
+ g_dbus_method_invocation_return_value (context, NULL);
+}
+
+static void
+impl_vpn_plugin_old_set_failure (NMVpnPluginOld *plugin,
+ GDBusMethodInvocation *context,
+ char *reason,
+ gpointer user_data)
+{
+ nm_vpn_plugin_old_failure (plugin, NM_VPN_PLUGIN_FAILURE_BAD_IP_CONFIG);
+ g_dbus_method_invocation_return_value (context, NULL);
+}
+
+/*********************************************************************/
+
+static void
+sigterm_handler (int signum)
+{
+ g_slist_foreach (active_plugins, (GFunc) nm_vpn_plugin_old_emit_quit, NULL);
+}
+
+static void
+setup_unix_signal_handler (void)
+{
+ struct sigaction action;
+ sigset_t block_mask;
+
+ action.sa_handler = sigterm_handler;
+ sigemptyset (&block_mask);
+ action.sa_mask = block_mask;
+ action.sa_flags = 0;
+ sigaction (SIGINT, &action, NULL);
+ sigaction (SIGTERM, &action, NULL);
+}
+
+/*********************************************************************/
+
+static void
+one_plugin_destroyed (gpointer data,
+ GObject *object)
+{
+ active_plugins = g_slist_remove (active_plugins, object);
+}
+
+static void
+nm_vpn_plugin_old_init (NMVpnPluginOld *plugin)
+{
+ active_plugins = g_slist_append (active_plugins, plugin);
+ g_object_weak_ref (G_OBJECT (plugin),
+ one_plugin_destroyed,
+ NULL);
+}
+
+static gboolean
+init_sync (GInitable *initable, GCancellable *cancellable, GError **error)
+{
+ NMVpnPluginOld *plugin = NM_VPN_PLUGIN_OLD (initable);
+ NMVpnPluginOldPrivate *priv = NM_VPN_PLUGIN_OLD_GET_PRIVATE (plugin);
+ GDBusConnection *connection = NULL;
+ GDBusProxy *proxy;
+ GVariant *ret;
+ gboolean success = FALSE;
+
+ if (!priv->dbus_service_name) {
+ g_set_error_literal (error, NM_VPN_PLUGIN_ERROR, NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS,
+ _("No service name specified"));
+ return FALSE;
+ }
+
+ connection = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, error);
+ if (!connection)
+ return FALSE;
+
+ proxy = g_dbus_proxy_new_sync (connection,
+ G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES |
+ G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS,
+ NULL,
+ DBUS_SERVICE_DBUS,
+ DBUS_PATH_DBUS,
+ DBUS_INTERFACE_DBUS,
+ cancellable, error);
+ if (!proxy)
+ goto out;
+
+ ret = g_dbus_proxy_call_sync (proxy,
+ "RequestName",
+ g_variant_new ("(s)", priv->dbus_service_name),
+ G_DBUS_CALL_FLAGS_NONE, 0,
+ cancellable, error);
+ g_object_unref (proxy);
+ if (!ret) {
+ if (error && *error)
+ g_dbus_error_strip_remote_error (*error);
+ goto out;
+ }
+ g_variant_unref (ret);
+
+ priv->dbus_vpn_plugin_old = nmdbus_vpn_plugin_skeleton_new ();
+ if (!g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (priv->dbus_vpn_plugin_old),
+ connection,
+ NM_VPN_DBUS_PLUGIN_PATH,
+ error))
+ goto out;
+
+ _nm_dbus_bind_properties (plugin, priv->dbus_vpn_plugin_old);
+ _nm_dbus_bind_methods (plugin, priv->dbus_vpn_plugin_old,
+ "Connect", impl_vpn_plugin_old_connect,
+ "ConnectInteractive", impl_vpn_plugin_old_connect_interactive,
+ "NeedSecrets", impl_vpn_plugin_old_need_secrets,
+ "NewSecrets", impl_vpn_plugin_old_new_secrets,
+ "Disconnect", impl_vpn_plugin_old_disconnect,
+ "SetConfig", impl_vpn_plugin_old_set_config,
+ "SetIp4Config", impl_vpn_plugin_old_set_ip4_config,
+ "SetIp6Config", impl_vpn_plugin_old_set_ip6_config,
+ "SetFailure", impl_vpn_plugin_old_set_failure,
+ NULL);
+
+ nm_vpn_plugin_old_set_connection (plugin, connection);
+ nm_vpn_plugin_old_set_state (plugin, NM_VPN_SERVICE_STATE_INIT);
+
+ success = TRUE;
+
+ out:
+ g_clear_object (&connection);
+
+ return success;
+}
+
+static void
+set_property (GObject *object, guint prop_id,
+ const GValue *value, GParamSpec *pspec)
+{
+ NMVpnPluginOldPrivate *priv = NM_VPN_PLUGIN_OLD_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_DBUS_SERVICE_NAME:
+ /* Construct-only */
+ priv->dbus_service_name = g_value_dup_string (value);
+ break;
+ case PROP_STATE:
+ nm_vpn_plugin_old_set_state (NM_VPN_PLUGIN_OLD (object),
+ (NMVpnServiceState) g_value_get_enum (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)
+{
+ NMVpnPluginOldPrivate *priv = NM_VPN_PLUGIN_OLD_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_DBUS_SERVICE_NAME:
+ g_value_set_string (value, priv->dbus_service_name);
+ break;
+ case PROP_STATE:
+ g_value_set_enum (value, nm_vpn_plugin_old_get_state (NM_VPN_PLUGIN_OLD (object)));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+dispose (GObject *object)
+{
+ NMVpnPluginOld *plugin = NM_VPN_PLUGIN_OLD (object);
+ NMVpnPluginOldPrivate *priv = NM_VPN_PLUGIN_OLD_GET_PRIVATE (plugin);
+ NMVpnServiceState state;
+ GError *err = NULL;
+
+ if (priv->fail_stop_id) {
+ g_source_remove (priv->fail_stop_id);
+ priv->fail_stop_id = 0;
+ }
+
+ state = nm_vpn_plugin_old_get_state (plugin);
+
+ if (state == NM_VPN_SERVICE_STATE_STARTED ||
+ state == NM_VPN_SERVICE_STATE_STARTING)
+ nm_vpn_plugin_old_disconnect (plugin, &err);
+
+ if (err) {
+ g_warning ("Error disconnecting VPN connection: %s", err->message);
+ g_error_free (err);
+ }
+
+ G_OBJECT_CLASS (nm_vpn_plugin_old_parent_class)->dispose (object);
+}
+
+static void
+finalize (GObject *object)
+{
+ NMVpnPluginOld *plugin = NM_VPN_PLUGIN_OLD (object);
+ NMVpnPluginOldPrivate *priv = NM_VPN_PLUGIN_OLD_GET_PRIVATE (plugin);
+
+ nm_vpn_plugin_old_set_connection (plugin, NULL);
+ g_free (priv->dbus_service_name);
+
+ g_clear_pointer (&priv->banner, g_free);
+ g_clear_pointer (&priv->tundev, g_free);
+ g_clear_pointer (&priv->gateway, g_free);
+ g_clear_pointer (&priv->mtu, g_free);
+
+ G_OBJECT_CLASS (nm_vpn_plugin_old_parent_class)->finalize (object);
+}
+
+static void
+quit_timer_removed (gpointer data)
+{
+ NM_VPN_PLUGIN_OLD_GET_PRIVATE (data)->quit_timer = 0;
+}
+
+static void
+state_changed (NMVpnPluginOld *plugin, NMVpnServiceState state)
+{
+ NMVpnPluginOldPrivate *priv = NM_VPN_PLUGIN_OLD_GET_PRIVATE (plugin);
+
+ switch (state) {
+ case NM_VPN_SERVICE_STATE_STARTING:
+ /* Remove the quit timer. */
+ if (priv->quit_timer)
+ g_source_remove (priv->quit_timer);
+
+ if (priv->fail_stop_id) {
+ g_source_remove (priv->fail_stop_id);
+ priv->fail_stop_id = 0;
+ }
+ break;
+ case NM_VPN_SERVICE_STATE_STOPPED:
+ priv->quit_timer = g_timeout_add_seconds_full (G_PRIORITY_DEFAULT,
+ NM_VPN_PLUGIN_OLD_QUIT_TIMER,
+ quit_timer_expired,
+ plugin,
+ quit_timer_removed);
+ break;
+ default:
+ /* Clean up all timers we might have set up. */
+ if (priv->connect_timer)
+ g_source_remove (priv->connect_timer);
+
+ if (priv->quit_timer)
+ g_source_remove (priv->quit_timer);
+
+ if (priv->fail_stop_id) {
+ g_source_remove (priv->fail_stop_id);
+ priv->fail_stop_id = 0;
+ }
+ break;
+ }
+}
+
+static void
+nm_vpn_plugin_old_class_init (NMVpnPluginOldClass *plugin_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (plugin_class);
+
+ g_type_class_add_private (object_class, sizeof (NMVpnPluginOldPrivate));
+
+ /* virtual methods */
+ object_class->set_property = set_property;
+ object_class->get_property = get_property;
+ object_class->dispose = dispose;
+ object_class->finalize = finalize;
+
+ plugin_class->state_changed = state_changed;
+
+ /* properties */
+
+ /**
+ * NMVpnPluginOld:service-name:
+ *
+ * The D-Bus service name of this plugin.
+ */
+ g_object_class_install_property
+ (object_class, PROP_DBUS_SERVICE_NAME,
+ g_param_spec_string (NM_VPN_PLUGIN_OLD_DBUS_SERVICE_NAME, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMVpnPluginOld:state:
+ *
+ * The state of the plugin.
+ */
+ g_object_class_install_property
+ (object_class, PROP_STATE,
+ g_param_spec_enum (NM_VPN_PLUGIN_OLD_STATE, "", "",
+ NM_TYPE_VPN_SERVICE_STATE,
+ NM_VPN_SERVICE_STATE_INIT,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /* signals */
+ signals[STATE_CHANGED] =
+ g_signal_new ("state-changed",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMVpnPluginOldClass, state_changed),
+ NULL, NULL,
+ NULL,
+ 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),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMVpnPluginOldClass, config),
+ NULL, NULL,
+ NULL,
+ G_TYPE_NONE, 1,
+ G_TYPE_VARIANT);
+
+ signals[IP4_CONFIG] =
+ g_signal_new ("ip4-config",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMVpnPluginOldClass, ip4_config),
+ NULL, NULL,
+ NULL,
+ G_TYPE_NONE, 1,
+ G_TYPE_VARIANT);
+
+ signals[IP6_CONFIG] =
+ g_signal_new ("ip6-config",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMVpnPluginOldClass, ip6_config),
+ NULL, NULL,
+ NULL,
+ G_TYPE_NONE, 1,
+ G_TYPE_VARIANT);
+
+ signals[LOGIN_BANNER] =
+ g_signal_new ("login-banner",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMVpnPluginOldClass, login_banner),
+ NULL, NULL,
+ NULL,
+ G_TYPE_NONE, 1,
+ G_TYPE_STRING);
+
+ signals[FAILURE] =
+ g_signal_new ("failure",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMVpnPluginOldClass, failure),
+ NULL, NULL,
+ NULL,
+ G_TYPE_NONE, 1,
+ G_TYPE_UINT);
+
+ signals[QUIT] =
+ g_signal_new ("quit",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMVpnPluginOldClass, quit),
+ NULL, NULL,
+ NULL,
+ G_TYPE_NONE, 0,
+ G_TYPE_NONE);
+
+ setup_unix_signal_handler ();
+}
+
+static void
+nm_vpn_plugin_old_initable_iface_init (GInitableIface *iface)
+{
+ iface->init = init_sync;
+}
diff --git a/libnm/nm-vpn-plugin-old.h b/libnm/nm-vpn-plugin-old.h
new file mode 100644
index 000000000..7fcc1c1c0
--- /dev/null
+++ b/libnm/nm-vpn-plugin-old.h
@@ -0,0 +1,136 @@
+/* -*- 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 2007 - 2008 Novell, Inc.
+ * Copyright 2007 - 2013 Red Hat, Inc.
+ */
+
+#ifndef __NM_VPN_PLUGIN_OLD_H__
+#define __NM_VPN_PLUGIN_OLD_H__
+
+#include <gio/gio.h>
+#include <nm-vpn-dbus-interface.h>
+#include <nm-connection.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_VPN_PLUGIN_OLD (nm_vpn_plugin_old_get_type ())
+#define NM_VPN_PLUGIN_OLD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_VPN_PLUGIN_OLD, NMVpnPluginOld))
+#define NM_VPN_PLUGIN_OLD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_VPN_PLUGIN_OLD, NMVpnPluginOldClass))
+#define NM_IS_VPN_PLUGIN_OLD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_VPN_PLUGIN_OLD))
+#define NM_IS_VPN_PLUGIN_OLD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_VPN_PLUGIN_OLD))
+#define NM_VPN_PLUGIN_OLD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_VPN_PLUGIN_OLD, NMVpnPluginOldClass))
+
+#define NM_VPN_PLUGIN_OLD_DBUS_SERVICE_NAME "service-name"
+#define NM_VPN_PLUGIN_OLD_STATE "state"
+
+typedef struct {
+ GObject parent;
+} NMVpnPluginOld;
+
+typedef struct {
+ GObjectClass parent;
+
+ /* Signals */
+ void (*state_changed) (NMVpnPluginOld *plugin,
+ NMVpnServiceState state);
+
+ void (*ip4_config) (NMVpnPluginOld *plugin,
+ GVariant *ip4_config);
+
+ void (*login_banner) (NMVpnPluginOld *plugin,
+ const char *banner);
+
+ void (*failure) (NMVpnPluginOld *plugin,
+ NMVpnPluginFailure reason);
+
+ void (*quit) (NMVpnPluginOld *plugin);
+
+ void (*config) (NMVpnPluginOld *plugin,
+ GVariant *config);
+
+ void (*ip6_config) (NMVpnPluginOld *plugin,
+ GVariant *config);
+
+ /* virtual methods */
+ gboolean (*connect) (NMVpnPluginOld *plugin,
+ NMConnection *connection,
+ GError **err);
+
+ gboolean (*need_secrets) (NMVpnPluginOld *plugin,
+ NMConnection *connection,
+ char **setting_name,
+ GError **error);
+
+ gboolean (*disconnect) (NMVpnPluginOld *plugin,
+ GError **err);
+
+ gboolean (*new_secrets) (NMVpnPluginOld *plugin,
+ NMConnection *connection,
+ GError **error);
+
+ gboolean (*connect_interactive) (NMVpnPluginOld *plugin,
+ NMConnection *connection,
+ GVariant *details,
+ GError **error);
+
+ /*< private >*/
+ gpointer padding[8];
+} NMVpnPluginOldClass;
+
+GType nm_vpn_plugin_old_get_type (void);
+
+GDBusConnection *nm_vpn_plugin_old_get_connection (NMVpnPluginOld *plugin);
+NMVpnServiceState nm_vpn_plugin_old_get_state (NMVpnPluginOld *plugin);
+void nm_vpn_plugin_old_set_state (NMVpnPluginOld *plugin,
+ NMVpnServiceState state);
+
+void nm_vpn_plugin_old_secrets_required (NMVpnPluginOld *plugin,
+ const char *message,
+ const char **hints);
+
+void nm_vpn_plugin_old_set_login_banner (NMVpnPluginOld *plugin,
+ const char *banner);
+
+void nm_vpn_plugin_old_failure (NMVpnPluginOld *plugin,
+ NMVpnPluginFailure reason);
+
+void nm_vpn_plugin_old_set_config (NMVpnPluginOld *plugin,
+ GVariant *config);
+
+void nm_vpn_plugin_old_set_ip4_config (NMVpnPluginOld *plugin,
+ GVariant *ip4_config);
+
+void nm_vpn_plugin_old_set_ip6_config (NMVpnPluginOld *plugin,
+ GVariant *ip6_config);
+
+gboolean nm_vpn_plugin_old_disconnect (NMVpnPluginOld *plugin,
+ GError **err);
+
+/* Utility functions */
+
+gboolean nm_vpn_plugin_old_read_vpn_details (int fd,
+ GHashTable **out_data,
+ GHashTable **out_secrets);
+
+gboolean nm_vpn_plugin_old_get_secret_flags (GHashTable *data,
+ const char *secret_name,
+ NMSettingSecretFlags *out_flags);
+
+G_END_DECLS
+
+#endif /* __NM_VPN_PLUGIN_OLD_H__ */
diff --git a/libnm/nm-wimax-nsp.c b/libnm/nm-wimax-nsp.c
new file mode 100644
index 000000000..0fed1c6e4
--- /dev/null
+++ b/libnm/nm-wimax-nsp.c
@@ -0,0 +1,290 @@
+/* -*- 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 2011 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "nm-glib-compat.h"
+
+#include <nm-connection.h>
+#include <nm-setting-connection.h>
+#include <nm-setting-wimax.h>
+
+#include "nm-wimax-nsp.h"
+#include "nm-dbus-interface.h"
+#include "nm-object-private.h"
+#include "nm-enum-types.h"
+
+G_DEFINE_TYPE (NMWimaxNsp, nm_wimax_nsp, NM_TYPE_OBJECT)
+
+#define NM_WIMAX_NSP_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_WIMAX_NSP, NMWimaxNspPrivate))
+
+typedef struct {
+ char *name;
+ guint32 signal_quality;
+ NMWimaxNspNetworkType network_type;
+} NMWimaxNspPrivate;
+
+enum {
+ PROP_0,
+ PROP_NAME,
+ PROP_SIGNAL_QUALITY,
+ PROP_NETWORK_TYPE,
+
+ LAST_PROP
+};
+
+/**
+ * nm_wimax_nsp_get_name:
+ * @nsp: a #NMWimaxNsp
+ *
+ * Gets the name of the wimax NSP
+ *
+ * Returns: the name
+ **/
+const char *
+nm_wimax_nsp_get_name (NMWimaxNsp *nsp)
+{
+ g_return_val_if_fail (NM_IS_WIMAX_NSP (nsp), NULL);
+
+ return NM_WIMAX_NSP_GET_PRIVATE (nsp)->name;
+}
+
+/**
+ * nm_wimax_nsp_get_signal_quality:
+ * @nsp: a #NMWimaxNsp
+ *
+ * Gets the WPA signal quality of the wimax NSP.
+ *
+ * Returns: the signal quality
+ **/
+guint32
+nm_wimax_nsp_get_signal_quality (NMWimaxNsp *nsp)
+{
+ g_return_val_if_fail (NM_IS_WIMAX_NSP (nsp), 0);
+
+ return NM_WIMAX_NSP_GET_PRIVATE (nsp)->signal_quality;
+}
+
+/**
+ * nm_wimax_nsp_get_network_type:
+ * @nsp: a #NMWimaxNsp
+ *
+ * Gets the network type of the wimax NSP.
+ *
+ * Returns: the network type
+ **/
+NMWimaxNspNetworkType
+nm_wimax_nsp_get_network_type (NMWimaxNsp *nsp)
+{
+ g_return_val_if_fail (NM_IS_WIMAX_NSP (nsp), NM_WIMAX_NSP_NETWORK_TYPE_UNKNOWN);
+
+ return NM_WIMAX_NSP_GET_PRIVATE (nsp)->network_type;
+}
+
+/**
+ * nm_wimax_nsp_connection_valid:
+ * @nsp: an #NMWimaxNsp to validate @connection against
+ * @connection: an #NMConnection to validate against @nsp
+ *
+ * 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
+ * @nsp's network name and other attributes.
+ *
+ * Returns: %TRUE if the connection may be activated with this WiMAX NSP,
+ * %FALSE if it cannot be.
+ **/
+gboolean
+nm_wimax_nsp_connection_valid (NMWimaxNsp *nsp, NMConnection *connection)
+{
+ NMSettingConnection *s_con;
+ NMSettingWimax *s_wimax;
+ const char *ctype;
+ const char *nsp_name;
+ const char *setting_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_WIMAX_SETTING_NAME) != 0)
+ return FALSE;
+
+ s_wimax = nm_connection_get_setting_wimax (connection);
+ if (!s_wimax)
+ return FALSE;
+
+ setting_name = nm_setting_wimax_get_network_name (s_wimax);
+ if (!setting_name)
+ return FALSE;
+
+ nsp_name = nm_wimax_nsp_get_name (nsp);
+ g_warn_if_fail (nsp_name != NULL);
+ if (g_strcmp0 (nsp_name, setting_name) != 0)
+ return FALSE;
+
+ return TRUE;
+}
+
+/**
+ * nm_wimax_nsp_filter_connections:
+ * @nsp: an #NMWimaxNsp to filter connections for
+ * @connections: (element-type NMConnection): an array of #NMConnections to
+ * filter
+ *
+ * Filters a given array of connections for a given #NMWimaxNsp object and
+ * return connections which may be activated with the NSP. Any returned
+ * connections will match the @nsp's network name and other attributes.
+ *
+ * Returns: (transfer container) (element-type NMConnection): an array of
+ * #NMConnections that could be activated with the given @nsp. The array should
+ * be freed with g_ptr_array_unref() when it is no longer required.
+ **/
+GPtrArray *
+nm_wimax_nsp_filter_connections (NMWimaxNsp *nsp, const GPtrArray *connections)
+{
+ GPtrArray *filtered;
+ int i;
+
+ filtered = g_ptr_array_new_with_free_func (g_object_unref);
+ for (i = 0; i < connections->len; i++) {
+ NMConnection *candidate = connections->pdata[i];
+
+ if (nm_wimax_nsp_connection_valid (nsp, candidate))
+ g_ptr_array_add (filtered, g_object_ref (candidate));
+ }
+
+ return filtered;
+}
+
+/************************************************************/
+
+static void
+nm_wimax_nsp_init (NMWimaxNsp *nsp)
+{
+}
+
+static void
+finalize (GObject *object)
+{
+ NMWimaxNspPrivate *priv = NM_WIMAX_NSP_GET_PRIVATE (object);
+
+ g_free (priv->name);
+
+ G_OBJECT_CLASS (nm_wimax_nsp_parent_class)->finalize (object);
+}
+
+static void
+get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NMWimaxNsp *nsp = NM_WIMAX_NSP (object);
+
+ switch (prop_id) {
+ case PROP_NAME:
+ g_value_set_string (value, nm_wimax_nsp_get_name (nsp));
+ break;
+ case PROP_SIGNAL_QUALITY:
+ g_value_set_uint (value, nm_wimax_nsp_get_signal_quality (nsp));
+ break;
+ case PROP_NETWORK_TYPE:
+ g_value_set_enum (value, nm_wimax_nsp_get_network_type (nsp));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+init_dbus (NMObject *object)
+{
+ NMWimaxNspPrivate *priv = NM_WIMAX_NSP_GET_PRIVATE (object);
+ const NMPropertiesInfo property_info[] = {
+ { NM_WIMAX_NSP_NAME, &priv->name },
+ { NM_WIMAX_NSP_SIGNAL_QUALITY, &priv->signal_quality },
+ { NM_WIMAX_NSP_NETWORK_TYPE, &priv->network_type },
+ { NULL },
+ };
+
+ NM_OBJECT_CLASS (nm_wimax_nsp_parent_class)->init_dbus (object);
+
+ _nm_object_register_properties (object,
+ NM_DBUS_INTERFACE_WIMAX_NSP,
+ property_info);
+}
+
+static void
+nm_wimax_nsp_class_init (NMWimaxNspClass *nsp_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (nsp_class);
+ NMObjectClass *nm_object_class = NM_OBJECT_CLASS (nsp_class);
+
+ g_type_class_add_private (nsp_class, sizeof (NMWimaxNspPrivate));
+
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_WIMAX_NSP);
+
+ /* virtual methods */
+ object_class->get_property = get_property;
+ object_class->finalize = finalize;
+
+ nm_object_class->init_dbus = init_dbus;
+
+ /* properties */
+
+ /**
+ * NMWimaxNsp:name:
+ *
+ * The name of the WiMAX NSP.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_NAME,
+ g_param_spec_string (NM_WIMAX_NSP_NAME, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMWimaxNsp:signal-quality:
+ *
+ * The signal quality of the WiMAX NSP.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_SIGNAL_QUALITY,
+ g_param_spec_uint (NM_WIMAX_NSP_SIGNAL_QUALITY, "", "",
+ 0, 100, 0,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMWimaxNsp:network-type:
+ *
+ * The network type of the WiMAX NSP.
+ **/
+ g_object_class_install_property
+ (object_class, PROP_NETWORK_TYPE,
+ g_param_spec_enum (NM_WIMAX_NSP_NETWORK_TYPE, "", "",
+ NM_TYPE_WIMAX_NSP_NETWORK_TYPE,
+ NM_WIMAX_NSP_NETWORK_TYPE_UNKNOWN,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+}
diff --git a/libnm/nm-wimax-nsp.h b/libnm/nm-wimax-nsp.h
new file mode 100644
index 000000000..cdc7b2366
--- /dev/null
+++ b/libnm/nm-wimax-nsp.h
@@ -0,0 +1,85 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ * Copyright 2011 Red Hat, Inc.
+ * Copyright 2009 Novell, Inc.
+ */
+
+#ifndef __NM_WIMAX_NSP_H__
+#define __NM_WIMAX_NSP_H__
+
+#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
+#error "Only <NetworkManager.h> can be included directly."
+#endif
+
+#include <nm-object.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_WIMAX_NSP (nm_wimax_nsp_get_type ())
+#define NM_WIMAX_NSP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_WIMAX_NSP, NMWimaxNsp))
+#define NM_WIMAX_NSP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_WIMAX_NSP, NMWimaxNspClass))
+#define NM_IS_WIMAX_NSP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_WIMAX_NSP))
+#define NM_IS_WIMAX_NSP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_WIMAX_NSP))
+#define NM_WIMAX_NSP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_WIMAX_NSP, NMWimaxNspClass))
+
+#define NM_WIMAX_NSP_NAME "name"
+#define NM_WIMAX_NSP_SIGNAL_QUALITY "signal-quality"
+#define NM_WIMAX_NSP_NETWORK_TYPE "network-type"
+
+/**
+ * NMWimaxNspNetworkType:
+ * @NM_WIMAX_NSP_NETWORK_TYPE_UNKNOWN: unknown network type
+ * @NM_WIMAX_NSP_NETWORK_TYPE_HOME: home network
+ * @NM_WIMAX_NSP_NETWORK_TYPE_PARTNER: partner network
+ * @NM_WIMAX_NSP_NETWORK_TYPE_ROAMING_PARTNER: roaming partner network
+ *
+ * WiMAX network type.
+ */
+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;
+
+struct _NMWimaxNsp {
+ NMObject parent;
+};
+
+typedef struct {
+ NMObjectClass parent;
+
+ /*< private >*/
+ gpointer padding[4];
+} NMWimaxNspClass;
+
+GType nm_wimax_nsp_get_type (void);
+
+const char * nm_wimax_nsp_get_name (NMWimaxNsp *nsp);
+guint32 nm_wimax_nsp_get_signal_quality (NMWimaxNsp *nsp);
+NMWimaxNspNetworkType nm_wimax_nsp_get_network_type (NMWimaxNsp *nsp);
+
+GPtrArray * nm_wimax_nsp_filter_connections (NMWimaxNsp *nsp,
+ const GPtrArray *connections);
+
+gboolean nm_wimax_nsp_connection_valid (NMWimaxNsp *nsp,
+ NMConnection *connection);
+
+G_END_DECLS
+
+#endif /* __NM_WIMAX_NSP_H__ */
diff --git a/libnm/tests/Makefile.am b/libnm/tests/Makefile.am
new file mode 100644
index 000000000..38449fad0
--- /dev/null
+++ b/libnm/tests/Makefile.am
@@ -0,0 +1,41 @@
+if ENABLE_TESTS
+
+AM_CPPFLAGS = \
+ -I$(top_srcdir)/include \
+ -I$(top_srcdir)/libnm \
+ -I$(top_builddir)/libnm \
+ -I$(top_srcdir)/libnm-core \
+ -I$(top_builddir)/libnm-core \
+ -DNETWORKMANAGER_COMPILATION \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ -DTEST_NM_SERVICE=\"$(abs_top_srcdir)/tools/test-networkmanager-service.py\" \
+ $(GLIB_CFLAGS)
+
+LDADD = \
+ $(top_builddir)/libnm/libnm.la \
+ $(GLIB_LIBS)
+
+noinst_PROGRAMS = $(TESTS)
+
+TESTS = test-nm-client test-remote-settings-client test-secret-agent
+
+test_nm_client_SOURCES = \
+ common.c \
+ common.h \
+ test-nm-client.c
+
+test_remote_settings_client_SOURCES = \
+ common.c \
+ common.h \
+ test-remote-settings-client.c
+
+test_secret_agent_SOURCES = \
+ common.c \
+ common.h \
+ test-secret-agent.c
+
+TESTS_ENVIRONMENT = $(srcdir)/libnm-test-launch.sh
+
+endif
+
+EXTRA_DIST = libnm-test-launch.sh
diff --git a/libnm/tests/Makefile.in b/libnm/tests/Makefile.in
new file mode 100644
index 000000000..ab5f794c5
--- /dev/null
+++ b/libnm/tests/Makefile.in
@@ -0,0 +1,918 @@
+# 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@
+@ENABLE_TESTS_TRUE@noinst_PROGRAMS = $(am__EXEEXT_1)
+@ENABLE_TESTS_TRUE@TESTS = test-nm-client$(EXEEXT) \
+@ENABLE_TESTS_TRUE@ test-remote-settings-client$(EXEEXT) \
+@ENABLE_TESTS_TRUE@ test-secret-agent$(EXEEXT)
+subdir = libnm/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 =
+@ENABLE_TESTS_TRUE@am__EXEEXT_1 = test-nm-client$(EXEEXT) \
+@ENABLE_TESTS_TRUE@ test-remote-settings-client$(EXEEXT) \
+@ENABLE_TESTS_TRUE@ test-secret-agent$(EXEEXT)
+PROGRAMS = $(noinst_PROGRAMS)
+am__test_nm_client_SOURCES_DIST = common.c common.h test-nm-client.c
+@ENABLE_TESTS_TRUE@am_test_nm_client_OBJECTS = common.$(OBJEXT) \
+@ENABLE_TESTS_TRUE@ test-nm-client.$(OBJEXT)
+test_nm_client_OBJECTS = $(am_test_nm_client_OBJECTS)
+test_nm_client_LDADD = $(LDADD)
+am__DEPENDENCIES_1 =
+@ENABLE_TESTS_TRUE@test_nm_client_DEPENDENCIES = \
+@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm/libnm.la \
+@ENABLE_TESTS_TRUE@ $(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 =
+am__test_remote_settings_client_SOURCES_DIST = common.c common.h \
+ test-remote-settings-client.c
+@ENABLE_TESTS_TRUE@am_test_remote_settings_client_OBJECTS = \
+@ENABLE_TESTS_TRUE@ common.$(OBJEXT) \
+@ENABLE_TESTS_TRUE@ test-remote-settings-client.$(OBJEXT)
+test_remote_settings_client_OBJECTS = \
+ $(am_test_remote_settings_client_OBJECTS)
+test_remote_settings_client_LDADD = $(LDADD)
+@ENABLE_TESTS_TRUE@test_remote_settings_client_DEPENDENCIES = \
+@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm/libnm.la \
+@ENABLE_TESTS_TRUE@ $(am__DEPENDENCIES_1)
+am__test_secret_agent_SOURCES_DIST = common.c common.h \
+ test-secret-agent.c
+@ENABLE_TESTS_TRUE@am_test_secret_agent_OBJECTS = common.$(OBJEXT) \
+@ENABLE_TESTS_TRUE@ test-secret-agent.$(OBJEXT)
+test_secret_agent_OBJECTS = $(am_test_secret_agent_OBJECTS)
+test_secret_agent_LDADD = $(LDADD)
+@ENABLE_TESTS_TRUE@test_secret_agent_DEPENDENCIES = \
+@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm/libnm.la \
+@ENABLE_TESTS_TRUE@ $(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
+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 = $(test_nm_client_SOURCES) \
+ $(test_remote_settings_client_SOURCES) \
+ $(test_secret_agent_SOURCES)
+DIST_SOURCES = $(am__test_nm_client_SOURCES_DIST) \
+ $(am__test_remote_settings_client_SOURCES_DIST) \
+ $(am__test_secret_agent_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
+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@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
+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_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
+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@
+PERL = @PERL@
+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_DIR = @UDEV_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@
+@ENABLE_TESTS_TRUE@AM_CPPFLAGS = \
+@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/include \
+@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/libnm \
+@ENABLE_TESTS_TRUE@ -I$(top_builddir)/libnm \
+@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/libnm-core \
+@ENABLE_TESTS_TRUE@ -I$(top_builddir)/libnm-core \
+@ENABLE_TESTS_TRUE@ -DNETWORKMANAGER_COMPILATION \
+@ENABLE_TESTS_TRUE@ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+@ENABLE_TESTS_TRUE@ -DTEST_NM_SERVICE=\"$(abs_top_srcdir)/tools/test-networkmanager-service.py\" \
+@ENABLE_TESTS_TRUE@ $(GLIB_CFLAGS)
+
+@ENABLE_TESTS_TRUE@LDADD = \
+@ENABLE_TESTS_TRUE@ $(top_builddir)/libnm/libnm.la \
+@ENABLE_TESTS_TRUE@ $(GLIB_LIBS)
+
+@ENABLE_TESTS_TRUE@test_nm_client_SOURCES = \
+@ENABLE_TESTS_TRUE@ common.c \
+@ENABLE_TESTS_TRUE@ common.h \
+@ENABLE_TESTS_TRUE@ test-nm-client.c
+
+@ENABLE_TESTS_TRUE@test_remote_settings_client_SOURCES = \
+@ENABLE_TESTS_TRUE@ common.c \
+@ENABLE_TESTS_TRUE@ common.h \
+@ENABLE_TESTS_TRUE@ test-remote-settings-client.c
+
+@ENABLE_TESTS_TRUE@test_secret_agent_SOURCES = \
+@ENABLE_TESTS_TRUE@ common.c \
+@ENABLE_TESTS_TRUE@ common.h \
+@ENABLE_TESTS_TRUE@ test-secret-agent.c
+
+@ENABLE_TESTS_TRUE@TESTS_ENVIRONMENT = $(srcdir)/libnm-test-launch.sh
+EXTRA_DIST = libnm-test-launch.sh
+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 libnm/tests/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu libnm/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
+
+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)
+
+test-secret-agent$(EXEEXT): $(test_secret_agent_OBJECTS) $(test_secret_agent_DEPENDENCIES) $(EXTRA_test_secret_agent_DEPENDENCIES)
+ @rm -f test-secret-agent$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_secret_agent_OBJECTS) $(test_secret_agent_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/common.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@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-secret-agent.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 $@ $<
+
+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
+
+
+# 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/tests/common.c b/libnm/tests/common.c
new file mode 100644
index 000000000..a28e5112b
--- /dev/null
+++ b/libnm/tests/common.c
@@ -0,0 +1,187 @@
+/* -*- 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 2010 - 2014 Red Hat, Inc.
+ *
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <string.h>
+
+#include "NetworkManager.h"
+
+#include "common.h"
+
+static gboolean
+name_exists (GDBusConnection *c, const char *name)
+{
+ GVariant *reply;
+ gboolean exists = FALSE;
+
+ reply = g_dbus_connection_call_sync (c,
+ "org.freedesktop.DBus",
+ "/org/freedesktop/DBus",
+ "org.freedesktop.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;
+}
+
+NMTestServiceInfo *
+nm_test_service_init (void)
+{
+ NMTestServiceInfo *info;
+ const char *args[2] = { TEST_NM_SERVICE, NULL };
+ GError *error = NULL;
+ int i;
+
+ info = g_malloc0 (sizeof (*info));
+
+ info->bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
+ g_assert_no_error (error);
+
+ /* Spawn the test service. info->keepalive_fd will be a pipe to the service's
+ * stdin; if it closes, the service will exit immediately. We use this to
+ * make sure the service exits if the test program crashes.
+ */
+ g_spawn_async_with_pipes (NULL, (char **) args, NULL, 0, NULL, NULL,
+ &info->pid, &info->keepalive_fd, NULL, NULL, &error);
+ g_assert_no_error (error);
+
+ /* Wait until the service is registered on the bus */
+ for (i = 100; i > 0; i--) {
+ if (name_exists (info->bus, "org.freedesktop.NetworkManager"))
+ break;
+ g_usleep (G_USEC_PER_SEC / 50);
+ }
+ g_assert (i > 0);
+
+ /* Grab a proxy to our fake NM service to trigger tests */
+ info->proxy = g_dbus_proxy_new_sync (info->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, &error);
+ g_assert_no_error (error);
+
+ return info;
+}
+
+void
+nm_test_service_cleanup (NMTestServiceInfo *info)
+{
+ int i;
+
+ g_object_unref (info->proxy);
+ kill (info->pid, SIGTERM);
+
+ /* Wait until the bus notices the service is gone */
+ for (i = 100; i > 0; i--) {
+ if (!name_exists (info->bus, "org.freedesktop.NetworkManager"))
+ break;
+ g_usleep (G_USEC_PER_SEC / 50);
+ }
+ g_assert (i > 0);
+
+ g_object_unref (info->bus);
+ close (info->keepalive_fd);
+
+ memset (info, 0, sizeof (*info));
+ g_free (info);
+}
+
+typedef struct {
+ GMainLoop *loop;
+ const char *ifname;
+ char *path;
+ NMDevice *device;
+} AddDeviceInfo;
+
+static void
+device_added_cb (NMClient *client,
+ NMDevice *device,
+ gpointer user_data)
+{
+ AddDeviceInfo *info = user_data;
+
+ g_assert (device);
+ g_assert_cmpstr (nm_object_get_path (NM_OBJECT (device)), ==, info->path);
+ g_assert_cmpstr (nm_device_get_iface (device), ==, info->ifname);
+
+ info->device = device;
+ g_main_loop_quit (info->loop);
+}
+
+static gboolean
+timeout (gpointer user_data)
+{
+ g_assert_not_reached ();
+ return G_SOURCE_REMOVE;
+}
+
+NMDevice *
+nm_test_service_add_device (NMTestServiceInfo *sinfo, NMClient *client,
+ const char *method, const char *ifname)
+{
+ AddDeviceInfo info;
+ GError *error = NULL;
+ GVariant *ret;
+ guint timeout_id;
+
+ ret = g_dbus_proxy_call_sync (sinfo->proxy,
+ method,
+ g_variant_new ("(s)", ifname),
+ G_DBUS_CALL_FLAGS_NO_AUTO_START,
+ 3000,
+ NULL,
+ &error);
+ g_assert_no_error (error);
+ g_assert (ret);
+ g_assert_cmpstr (g_variant_get_type_string (ret), ==, "(o)");
+ g_variant_get (ret, "(o)", &info.path);
+ g_variant_unref (ret);
+
+ /* Wait for libnm to find the device */
+ info.ifname = ifname;
+ info.loop = g_main_loop_new (NULL, FALSE);
+ g_signal_connect (client, "device-added",
+ G_CALLBACK (device_added_cb), &info);
+ timeout_id = g_timeout_add_seconds (5, timeout, NULL);
+ g_main_loop_run (info.loop);
+
+ g_source_remove (timeout_id);
+ g_signal_handlers_disconnect_by_func (client, device_added_cb, &info);
+ g_free (info.path);
+ g_main_loop_unref (info.loop);
+
+ return info.device;
+}
diff --git a/libnm/tests/common.h b/libnm/tests/common.h
new file mode 100644
index 000000000..aa15167b8
--- /dev/null
+++ b/libnm/tests/common.h
@@ -0,0 +1,37 @@
+/* -*- 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 2014 Red Hat, Inc.
+ */
+
+#include <gio/gio.h>
+#include <NetworkManager.h>
+
+typedef struct {
+ GDBusConnection *bus;
+ GDBusProxy *proxy;
+ GPid pid;
+ int keepalive_fd;
+} NMTestServiceInfo;
+
+NMTestServiceInfo *nm_test_service_init (void);
+void nm_test_service_cleanup (NMTestServiceInfo *info);
+
+NMDevice *nm_test_service_add_device (NMTestServiceInfo *info,
+ NMClient *client,
+ const char *method,
+ const char *ifname);
diff --git a/libnm/tests/libnm-test-launch.sh b/libnm/tests/libnm-test-launch.sh
new file mode 100755
index 000000000..42d9fbe26
--- /dev/null
+++ b/libnm/tests/libnm-test-launch.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+# Spawn DBus if there's none
+if [ -z "$DBUS_SESSION_BUS_ADDRESS" ]; then
+ eval `dbus-launch --sh-syntax`
+ trap "kill $DBUS_SESSION_BUS_PID" EXIT
+fi
+
+"$@"
diff --git a/libnm/tests/test-nm-client.c b/libnm/tests/test-nm-client.c
new file mode 100644
index 000000000..3541c741e
--- /dev/null
+++ b/libnm/tests/test-nm-client.c
@@ -0,0 +1,1193 @@
+/* -*- 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 2010 - 2014 Red Hat, Inc.
+ *
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <signal.h>
+
+#include <NetworkManager.h>
+#include "nm-glib-compat.h"
+
+#include "common.h"
+
+#include "nm-test-utils.h"
+
+static GMainLoop *loop = NULL;
+static NMTestServiceInfo *sinfo;
+
+/*******************************************************************/
+
+static gboolean
+loop_quit (gpointer user_data)
+{
+ g_main_loop_quit ((GMainLoop *) user_data);
+ return G_SOURCE_REMOVE;
+}
+
+/*******************************************************************/
+
+static void
+devices_notify_cb (NMClient *c,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ gboolean *notified = user_data;
+ const GPtrArray *devices;
+ NMDevice *device;
+
+ devices = nm_client_get_devices (c);
+ g_assert (devices);
+ g_assert_cmpint (devices->len, ==, 1);
+
+ device = g_ptr_array_index (devices, 0);
+ g_assert (device);
+ g_assert_cmpstr (nm_device_get_iface (device), ==, "eth0");
+
+ *notified = TRUE;
+}
+
+static void
+test_device_added (void)
+{
+ NMClient *client;
+ const GPtrArray *devices;
+ NMDevice *device;
+ gboolean notified = FALSE;
+ GError *error = NULL;
+
+ sinfo = nm_test_service_init ();
+ client = nm_client_new (NULL, &error);
+ g_assert_no_error (error);
+
+ devices = nm_client_get_devices (client);
+ g_assert (devices->len == 0);
+
+ g_signal_connect (client,
+ "notify::devices",
+ (GCallback) devices_notify_cb,
+ &notified);
+
+ /* Tell the test service to add a new device */
+ nm_test_service_add_device (sinfo, client, "AddWiredDevice", "eth0");
+
+ /* coverity[loop_condition] */
+ while (!notified)
+ g_main_context_iteration (NULL, TRUE);
+
+ g_signal_handlers_disconnect_by_func (client, devices_notify_cb, &notified);
+
+ devices = nm_client_get_devices (client);
+ g_assert (devices);
+ g_assert_cmpint (devices->len, ==, 1);
+
+ device = g_ptr_array_index (devices, 0);
+ g_assert (device);
+ g_assert_cmpstr (nm_device_get_iface (device), ==, "eth0");
+
+ /* Try deleting the device via the ordinary NM interface, which should fail */
+ nm_device_delete (device, NULL, &error);
+ g_assert_error (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_NOT_SOFTWARE);
+
+ g_object_unref (client);
+ g_clear_pointer (&sinfo, nm_test_service_cleanup);
+}
+
+/*******************************************************************/
+
+typedef enum {
+ SIGNAL_FIRST = 0x01,
+ SIGNAL_SECOND = 0x02,
+ SIGNAL_MASK = 0x0F,
+ NOTIFY_FIRST = 0x10,
+ NOTIFY_SECOND = 0x20,
+ NOTIFY_MASK = 0xF0
+} DeviceSignaledAfterInitType;
+
+static void
+device_sai_added_cb (NMClient *c,
+ NMDevice *device,
+ gpointer user_data)
+{
+ guint *result = user_data;
+
+ g_assert (device);
+ g_assert_cmpstr (nm_device_get_iface (device), ==, "eth0");
+
+ g_assert ((*result & SIGNAL_MASK) == 0);
+ *result |= *result ? SIGNAL_SECOND : SIGNAL_FIRST;
+}
+
+static void
+devices_sai_notify_cb (NMClient *c,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ guint *result = user_data;
+ const GPtrArray *devices;
+ NMDevice *device;
+
+ devices = nm_client_get_devices (c);
+ g_assert (devices);
+ g_assert_cmpint (devices->len, ==, 1);
+
+ device = g_ptr_array_index (devices, 0);
+ g_assert (device);
+ g_assert_cmpstr (nm_device_get_iface (device), ==, "eth0");
+
+ g_assert ((*result & NOTIFY_MASK) == 0);
+ *result |= *result ? NOTIFY_SECOND : NOTIFY_FIRST;
+}
+
+static void
+test_device_added_signal_after_init (void)
+{
+ NMClient *client;
+ const GPtrArray *devices;
+ NMDevice *device;
+ guint result = 0;
+ GError *error = NULL;
+
+ sinfo = nm_test_service_init ();
+ client = nm_client_new (NULL, &error);
+ g_assert_no_error (error);
+
+ devices = nm_client_get_devices (client);
+ g_assert (devices->len == 0);
+
+ g_signal_connect (client,
+ NM_CLIENT_DEVICE_ADDED,
+ (GCallback) device_sai_added_cb,
+ &result);
+
+ g_signal_connect (client,
+ "notify::" NM_CLIENT_DEVICES,
+ (GCallback) devices_sai_notify_cb,
+ &result);
+
+ /* Tell the test service to add a new device */
+ nm_test_service_add_device (sinfo, client, "AddWiredDevice", "eth0");
+
+ /* Ensure the 'device-added' signal doesn't show up before
+ * the 'Devices' property change notification */
+ /* coverity[loop_condition] */
+ while (!(result & SIGNAL_MASK) && !(result & NOTIFY_MASK))
+ g_main_context_iteration (NULL, TRUE);
+
+ g_signal_handlers_disconnect_by_func (client, device_sai_added_cb, &result);
+ g_signal_handlers_disconnect_by_func (client, devices_sai_notify_cb, &result);
+
+ g_assert ((result & SIGNAL_MASK) == SIGNAL_FIRST);
+ g_assert ((result & NOTIFY_MASK) == NOTIFY_SECOND);
+
+ devices = nm_client_get_devices (client);
+ g_assert (devices);
+ g_assert_cmpint (devices->len, ==, 1);
+
+ device = g_ptr_array_index (devices, 0);
+ g_assert (device);
+ g_assert_cmpstr (nm_device_get_iface (device), ==, "eth0");
+
+ g_object_unref (client);
+ g_clear_pointer (&sinfo, nm_test_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
+got_ap_path (WifiApInfo *info, const char *path)
+{
+ if (info->ap_path)
+ g_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)
+{
+ g_assert (ap);
+ g_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);
+ g_assert (aps);
+ g_assert_cmpint (aps->len, ==, 1);
+
+ ap = g_ptr_array_index (aps, 0);
+ g_assert (ap);
+ g_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)
+{
+ g_assert (ap);
+ g_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);
+ g_assert (aps->len == 0);
+
+ info->notified = TRUE;
+ wifi_check_quit (info);
+}
+
+static void
+test_wifi_ap_added_removed (void)
+{
+ NMClient *client;
+ NMDeviceWifi *wifi;
+ WifiApInfo info = { loop, FALSE, FALSE, 0, 0 };
+ GVariant *ret;
+ GError *error = NULL;
+ char *expected_path = NULL;
+
+ sinfo = nm_test_service_init ();
+ client = nm_client_new (NULL, &error);
+ g_assert_no_error (error);
+
+ /*************************************/
+ /* Add the wifi device */
+ wifi = (NMDeviceWifi *) nm_test_service_add_device (sinfo, client, "AddWifiDevice", "wlan0");
+ g_assert (NM_IS_DEVICE_WIFI (wifi));
+
+ /*************************************/
+ /* Add the wifi AP */
+ 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);
+ g_assert_no_error (error);
+ g_assert (ret);
+ g_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 to find the AP */
+ info.quit_id = g_timeout_add_seconds (5, loop_quit, loop);
+ g_main_loop_run (loop);
+
+ g_assert (info.signaled);
+ g_assert (info.notified);
+ g_assert (info.ap_path);
+ g_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);
+ g_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 to find the AP */
+ info.quit_id = g_timeout_add_seconds (5, loop_quit, loop);
+ g_main_loop_run (loop);
+
+ g_assert (info.signaled);
+ g_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);
+
+ g_object_unref (client);
+ g_clear_pointer (&sinfo, nm_test_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
+got_nsp_path (WimaxNspInfo *info, const char *path)
+{
+ if (info->nsp_path)
+ g_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)
+{
+ g_assert (nsp);
+ g_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);
+ g_assert (nsps);
+ g_assert_cmpint (nsps->len, ==, 1);
+
+ nsp = g_ptr_array_index (nsps, 0);
+ g_assert (nsp);
+ g_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)
+{
+ g_assert (nsp);
+ g_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);
+ g_assert (nsps->len == 0);
+
+ info->notified = TRUE;
+ wimax_check_quit (info);
+}
+
+static void
+test_wimax_nsp_added_removed (void)
+{
+ NMClient *client;
+ NMDeviceWimax *wimax;
+ WimaxNspInfo info = { loop, FALSE, FALSE, 0, 0 };
+ GVariant *ret;
+ GError *error = NULL;
+ char *expected_path = NULL;
+
+ sinfo = nm_test_service_init ();
+ client = nm_client_new (NULL, &error);
+ g_assert_no_error (error);
+
+ /*************************************/
+ /* Add the wimax device */
+ wimax = (NMDeviceWimax *) nm_test_service_add_device (sinfo, client, "AddWimaxDevice", "wmx0");
+ g_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);
+ g_assert_no_error (error);
+ g_assert (ret);
+ g_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 to find the AP */
+ info.quit_id = g_timeout_add_seconds (5, loop_quit, loop);
+ g_main_loop_run (loop);
+
+ g_assert (info.signaled);
+ g_assert (info.notified);
+ g_assert (info.nsp_path);
+ g_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);
+ g_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 to find the AP */
+ info.quit_id = g_timeout_add_seconds (5, loop_quit, loop);
+ g_main_loop_run (loop);
+
+ g_assert (info.signaled);
+ g_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);
+
+ g_object_unref (client);
+ g_clear_pointer (&sinfo, nm_test_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_removed_cb (NMClient *c,
+ NMDevice *device,
+ DaInfo *info)
+{
+ g_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);
+ g_assert (devices);
+ g_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);
+
+ g_assert (!strcmp (iface, "wlan0") || !strcmp (iface, "eth1"));
+ }
+
+ info->notified = TRUE;
+ da_check_quit (info);
+}
+
+static void
+new_client_cb (GObject *object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ NMClient **out_client = user_data;
+ GError *error = NULL;
+
+ *out_client = nm_client_new_finish (result, &error);
+ g_assert_no_error (error);
+ g_assert (*out_client != NULL);
+
+ g_main_loop_quit (loop);
+}
+
+static void
+test_devices_array (void)
+{
+ NMClient *client = NULL;
+ DaInfo info = { loop };
+ NMDevice *wlan0, *eth0, *eth1, *device;
+ const GPtrArray *devices;
+ GError *error = NULL;
+ GVariant *ret;
+
+ sinfo = nm_test_service_init ();
+
+ /* Make sure that we test the async codepath in at least one test... */
+ nm_client_new_async (NULL, new_client_cb, &client);
+ g_main_loop_run (loop);
+ g_assert (client != NULL);
+
+ /*************************************/
+ /* Add some devices */
+ wlan0 = nm_test_service_add_device (sinfo, client,"AddWifiDevice", "wlan0");
+ eth0 = nm_test_service_add_device (sinfo, client, "AddWiredDevice", "eth0");
+ eth1 = nm_test_service_add_device (sinfo, client, "AddWiredDevice", "eth1");
+
+ /* Ensure the devices now exist */
+ devices = nm_client_get_devices (client);
+ g_assert (devices);
+ g_assert_cmpint (devices->len, ==, 3);
+
+ device = nm_client_get_device_by_iface (client, "wlan0");
+ g_assert (NM_IS_DEVICE_WIFI (device));
+ g_assert (device == wlan0);
+
+ device = nm_client_get_device_by_iface (client, "eth0");
+ g_assert (NM_IS_DEVICE_ETHERNET (device));
+ g_assert (device == eth0);
+
+ device = nm_client_get_device_by_iface (client, "eth1");
+ g_assert (NM_IS_DEVICE_ETHERNET (device));
+ g_assert (device == eth1);
+
+ /********************************/
+ /* Now remove the device in the middle */
+ ret = g_dbus_proxy_call_sync (sinfo->proxy,
+ "RemoveDevice",
+ g_variant_new ("(o)", nm_object_get_path (NM_OBJECT (eth0))),
+ G_DBUS_CALL_FLAGS_NO_AUTO_START,
+ 3000,
+ NULL,
+ &error);
+ g_assert_no_error (error);
+ g_assert (ret);
+ g_variant_unref (ret);
+
+ g_signal_connect (client,
+ "device-removed",
+ (GCallback) da_device_removed_cb,
+ &info);
+
+ g_signal_connect (client,
+ "notify::devices",
+ (GCallback) da_devices_notify_cb,
+ &info);
+ info.quit_count = 2;
+
+ /* Wait for libnm to notice the changes */
+ info.quit_id = g_timeout_add_seconds (5, loop_quit, loop);
+ g_main_loop_run (loop);
+
+ g_assert_cmpint (info.quit_count, ==, 0);
+ g_signal_handlers_disconnect_by_func (client, da_device_removed_cb, &info);
+ g_signal_handlers_disconnect_by_func (client, da_devices_notify_cb, &info);
+
+ /* Ensure only two are left */
+ devices = nm_client_get_devices (client);
+ g_assert (devices);
+ g_assert_cmpint (devices->len, ==, 2);
+
+ device = nm_client_get_device_by_iface (client, "wlan0");
+ g_assert (NM_IS_DEVICE_WIFI (device));
+ g_assert (device == wlan0);
+
+ device = nm_client_get_device_by_iface (client, "eth1");
+ g_assert (NM_IS_DEVICE_ETHERNET (device));
+ g_assert (device == eth1);
+
+ g_object_unref (client);
+ g_clear_pointer (&sinfo, nm_test_service_cleanup);
+}
+
+static void
+nm_running_changed (GObject *client,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ int *running_changed = user_data;
+
+ (*running_changed)++;
+ g_main_loop_quit (loop);
+}
+
+static void
+test_client_nm_running (void)
+{
+ NMClient *client1, *client2;
+ guint quit_id;
+ int running_changed = 0;
+ GError *error = NULL;
+
+ client1 = nm_client_new (NULL, &error);
+ g_assert_no_error (error);
+
+ g_assert (!nm_client_get_nm_running (client1));
+ g_assert_cmpstr (nm_client_get_version (client1), ==, NULL);
+
+ g_assert (!nm_client_networking_get_enabled (client1));
+ /* This will have no effect, but it shouldn't cause any warnings either. */
+ nm_client_networking_set_enabled (client1, TRUE, NULL);
+ g_assert (!nm_client_networking_get_enabled (client1));
+
+ /* OTOH, this should result in an error */
+ nm_client_set_logging (client1, "DEFAULT", "INFO", &error);
+ g_assert_error (error, NM_CLIENT_ERROR, NM_CLIENT_ERROR_MANAGER_NOT_RUNNING);
+ g_clear_error (&error);
+
+ /* Now start the test service. */
+ sinfo = nm_test_service_init ();
+ client2 = nm_client_new (NULL, &error);
+ g_assert_no_error (error);
+
+ /* client2 should know that NM is running, but the previously-created
+ * client1 hasn't gotten the news yet.
+ */
+ g_assert (!nm_client_get_nm_running (client1));
+ g_assert (nm_client_get_nm_running (client2));
+
+ g_signal_connect (client1, "notify::" NM_CLIENT_NM_RUNNING,
+ G_CALLBACK (nm_running_changed), &running_changed);
+ quit_id = g_timeout_add_seconds (5, loop_quit, loop);
+ g_main_loop_run (loop);
+ g_assert_cmpint (running_changed, ==, 1);
+ g_assert (nm_client_get_nm_running (client1));
+ g_source_remove (quit_id);
+
+ /* And kill it */
+ g_clear_pointer (&sinfo, nm_test_service_cleanup);
+
+ g_assert (nm_client_get_nm_running (client1));
+
+ quit_id = g_timeout_add_seconds (5, loop_quit, loop);
+ g_main_loop_run (loop);
+ g_assert_cmpint (running_changed, ==, 2);
+ g_assert (!nm_client_get_nm_running (client1));
+ g_source_remove (quit_id);
+
+ g_object_unref (client1);
+ g_object_unref (client2);
+}
+
+typedef struct {
+ GMainLoop *loop;
+ NMActiveConnection *ac;
+
+ int remaining;
+} TestACInfo;
+
+static void
+assert_ac_and_device (NMClient *client)
+{
+ const GPtrArray *devices, *acs, *ac_devices;
+ NMDevice *device, *ac_device;
+ NMActiveConnection *ac, *device_ac;
+
+ acs = nm_client_get_active_connections (client);
+ g_assert (acs != NULL);
+ g_assert_cmpint (acs->len, ==, 1);
+ devices = nm_client_get_devices (client);
+ g_assert (devices != NULL);
+ g_assert_cmpint (devices->len, >=, 1);
+
+ ac = acs->pdata[0];
+ ac_devices = nm_active_connection_get_devices (ac);
+ g_assert (ac_devices != NULL);
+ g_assert_cmpint (ac_devices->len, ==, 1);
+ ac_device = ac_devices->pdata[0];
+ g_assert (ac_device != NULL);
+
+ device = devices->pdata[0];
+ if (device != ac_device && devices->len > 1)
+ device = devices->pdata[1];
+ device_ac = nm_device_get_active_connection (device);
+ g_assert (device_ac != NULL);
+
+ g_assert_cmpstr (nm_object_get_path (NM_OBJECT (device)), ==, nm_object_get_path (NM_OBJECT (ac_device)));
+ g_assert (device == ac_device);
+ g_assert_cmpstr (nm_object_get_path (NM_OBJECT (ac)), ==, nm_object_get_path (NM_OBJECT (device_ac)));
+ g_assert (ac == device_ac);
+}
+
+static void
+add_and_activate_cb (GObject *object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ NMClient *client = NM_CLIENT (object);
+ TestACInfo *info = user_data;
+ GError *error = NULL;
+
+ info->ac = nm_client_add_and_activate_connection_finish (client, result, &error);
+ g_assert_no_error (error);
+ g_assert (info->ac != NULL);
+
+ assert_ac_and_device (client);
+
+ info->remaining--;
+ if (!info->remaining)
+ g_main_loop_quit (info->loop);
+}
+
+static void
+client_acs_changed_cb (GObject *client,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ TestACInfo *info = user_data;
+ const GPtrArray *acs;
+
+ acs = nm_client_get_active_connections (NM_CLIENT (client));
+ g_assert (acs != NULL);
+ g_assert_cmpint (acs->len, ==, 1);
+
+ info->remaining--;
+ if (!info->remaining)
+ g_main_loop_quit (info->loop);
+}
+
+static void
+device_ac_changed_cb (GObject *device,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ TestACInfo *info = user_data;
+
+ g_assert (nm_device_get_active_connection (NM_DEVICE (device)) != NULL);
+
+ info->remaining--;
+ if (!info->remaining)
+ g_main_loop_quit (info->loop);
+}
+
+static void
+test_active_connections (void)
+{
+ NMClient *client;
+ NMDevice *device;
+ NMConnection *conn;
+ TestACInfo info = { loop, NULL, 0 };
+ GError *error = NULL;
+
+ sinfo = nm_test_service_init ();
+ client = nm_client_new (NULL, &error);
+ g_assert_no_error (error);
+
+ /* Tell the test service to add a new device */
+ device = nm_test_service_add_device (sinfo, client, "AddWiredDevice", "eth0");
+
+ conn = nmtst_create_minimal_connection ("test-ac", NULL, NM_SETTING_WIRED_SETTING_NAME, NULL);
+ nm_client_add_and_activate_connection_async (client, conn, device, NULL,
+ NULL, add_and_activate_cb, &info);
+ g_object_unref (conn);
+
+ g_signal_connect (client, "notify::" NM_CLIENT_ACTIVE_CONNECTIONS,
+ G_CALLBACK (client_acs_changed_cb), &info);
+ g_signal_connect (device, "notify::" NM_DEVICE_ACTIVE_CONNECTION,
+ G_CALLBACK (device_ac_changed_cb), &info);
+
+ /* Two signals plus activate_cb */
+ info.remaining = 3;
+ g_main_loop_run (loop);
+ g_signal_handlers_disconnect_by_func (client, client_acs_changed_cb, &info);
+ g_signal_handlers_disconnect_by_func (device, device_ac_changed_cb, &info);
+
+ g_assert (info.ac != NULL);
+
+ g_object_unref (info.ac);
+ g_object_unref (client);
+
+ /* Ensure that we can correctly resolve the recursive property link between the
+ * AC and the Device in a newly-created client.
+ */
+ client = nm_client_new (NULL, &error);
+ g_assert_no_error (error);
+ assert_ac_and_device (client);
+ g_object_unref (client);
+
+ client = NULL;
+ nm_client_new_async (NULL, new_client_cb, &client);
+ g_main_loop_run (loop);
+ assert_ac_and_device (client);
+ g_object_unref (client);
+
+ g_clear_pointer (&sinfo, nm_test_service_cleanup);
+}
+
+static void
+client_devices_changed_cb (GObject *client,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ TestACInfo *info = user_data;
+ const GPtrArray *devices;
+ NMDevice *device;
+
+ devices = nm_client_get_devices (NM_CLIENT (client));
+ g_assert (devices != NULL);
+ if (devices->len < 2)
+ return;
+ g_assert_cmpint (devices->len, ==, 2);
+
+ if (NM_IS_DEVICE_VLAN (devices->pdata[0]))
+ device = devices->pdata[0];
+ else if (NM_IS_DEVICE_VLAN (devices->pdata[1]))
+ device = devices->pdata[1];
+ else
+ g_assert_not_reached ();
+
+ g_assert_cmpstr (nm_device_get_iface (device), ==, "eth0.1");
+
+ if (nm_device_get_active_connection (device))
+ info->remaining--;
+ else {
+ g_signal_connect (device, "notify::" NM_DEVICE_ACTIVE_CONNECTION,
+ G_CALLBACK (device_ac_changed_cb), info);
+ }
+
+ info->remaining--;
+ if (!info->remaining)
+ g_main_loop_quit (info->loop);
+}
+
+typedef struct {
+ GMainLoop *loop;
+ NMRemoteConnection *remote;
+} TestConnectionInfo;
+
+static void
+add_connection_cb (GObject *object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ TestConnectionInfo *info = user_data;
+ GError *error = NULL;
+
+ info->remote = nm_client_add_connection_finish (NM_CLIENT (object), result, &error);
+ g_assert_no_error (error);
+ g_main_loop_quit (info->loop);
+}
+
+static void
+activate_cb (GObject *object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ NMClient *client = NM_CLIENT (object);
+ TestACInfo *info = user_data;
+ GError *error = NULL;
+
+ info->ac = nm_client_activate_connection_finish (client, result, &error);
+ g_assert_no_error (error);
+ g_assert (info->ac != NULL);
+
+ assert_ac_and_device (client);
+
+ info->remaining--;
+ if (!info->remaining)
+ g_main_loop_quit (info->loop);
+}
+
+static void
+test_activate_virtual (void)
+{
+ NMClient *client;
+ NMConnection *conn;
+ NMSettingConnection *s_con;
+ NMSettingVlan *s_vlan;
+ TestACInfo info = { loop, NULL, 0 };
+ TestConnectionInfo conn_info = { loop, NULL };
+ GError *error = NULL;
+
+ sinfo = nm_test_service_init ();
+ client = nm_client_new (NULL, &error);
+ g_assert_no_error (error);
+
+ nm_test_service_add_device (sinfo, client, "AddWiredDevice", "eth0");
+
+ conn = nmtst_create_minimal_connection ("test-ac", NULL, NM_SETTING_VLAN_SETTING_NAME, &s_con);
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_INTERFACE_NAME, "eth0.1",
+ NULL);
+ s_vlan = nm_connection_get_setting_vlan (conn);
+ g_object_set (s_vlan,
+ NM_SETTING_VLAN_ID, 1,
+ NM_SETTING_VLAN_PARENT, "eth0",
+ NULL);
+
+ nm_client_add_connection_async (client, conn, TRUE,
+ NULL, add_connection_cb, &conn_info);
+ g_main_loop_run (loop);
+ g_object_unref (conn);
+ conn = NM_CONNECTION (conn_info.remote);
+
+ nm_client_activate_connection_async (client, conn, NULL, NULL,
+ NULL, activate_cb, &info);
+ g_object_unref (conn);
+
+ g_signal_connect (client, "notify::" NM_CLIENT_ACTIVE_CONNECTIONS,
+ G_CALLBACK (client_acs_changed_cb), &info);
+ g_signal_connect (client, "notify::" NM_CLIENT_DEVICES,
+ G_CALLBACK (client_devices_changed_cb), &info);
+
+ /* As with test_active_connections() above, except that now we're waiting
+ * for NMClient:devices to change rather than NMDevice:active-connections.
+ */
+ info.remaining = 3;
+
+ g_main_loop_run (loop);
+ g_signal_handlers_disconnect_by_func (client, client_acs_changed_cb, &info);
+ g_signal_handlers_disconnect_by_func (client, client_devices_changed_cb, &info);
+
+ g_assert (info.ac != NULL);
+
+ g_object_unref (info.ac);
+ g_object_unref (client);
+
+ g_clear_pointer (&sinfo, nm_test_service_cleanup);
+}
+
+static void
+activate_failed_cb (GObject *object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ NMClient *client = NM_CLIENT (object);
+ NMActiveConnection *ac;
+ GError *error = NULL;
+
+ ac = nm_client_activate_connection_finish (client, result, &error);
+ g_assert (ac == NULL);
+ g_assert_error (error, NM_CLIENT_ERROR, NM_CLIENT_ERROR_OBJECT_CREATION_FAILED);
+ g_clear_error (&error);
+
+ g_main_loop_quit (loop);
+}
+
+static void
+test_activate_failed (void)
+{
+ NMClient *client;
+ NMDevice *device;
+ NMConnection *conn;
+ GError *error = NULL;
+
+ sinfo = nm_test_service_init ();
+ client = nm_client_new (NULL, &error);
+ g_assert_no_error (error);
+
+ device = nm_test_service_add_device (sinfo, client, "AddWiredDevice", "eth0");
+
+ /* Note that test-networkmanager-service.py checks for this exact name */
+ conn = nmtst_create_minimal_connection ("object-creation-failed-test", NULL,
+ NM_SETTING_WIRED_SETTING_NAME, NULL);
+
+ nm_client_add_and_activate_connection_async (client, conn, device, NULL,
+ NULL, activate_failed_cb, NULL);
+ g_main_loop_run (loop);
+
+ g_object_unref (conn);
+ g_object_unref (client);
+
+ g_clear_pointer (&sinfo, nm_test_service_cleanup);
+}
+
+/*******************************************************************/
+
+NMTST_DEFINE ();
+
+int
+main (int argc, char **argv)
+{
+ g_setenv ("LIBNM_USE_SESSION_BUS", "1", TRUE);
+
+#if !GLIB_CHECK_VERSION (2, 35, 0)
+ g_type_init ();
+#endif
+
+ nmtst_init (&argc, &argv, TRUE);
+
+ loop = g_main_loop_new (NULL, FALSE);
+
+ g_test_add_func ("/libnm/device-added", test_device_added);
+ g_test_add_func ("/libnm/device-added-signal-after-init", test_device_added_signal_after_init);
+ g_test_add_func ("/libnm/wifi-ap-added-removed", test_wifi_ap_added_removed);
+ g_test_add_func ("/libnm/wimax-nsp-added-removed", test_wimax_nsp_added_removed);
+ g_test_add_func ("/libnm/devices-array", test_devices_array);
+ g_test_add_func ("/libnm/client-nm-running", test_client_nm_running);
+ g_test_add_func ("/libnm/active-connections", test_active_connections);
+ g_test_add_func ("/libnm/activate-virtual", test_activate_virtual);
+ g_test_add_func ("/libnm/activate-failed", test_activate_failed);
+
+ return g_test_run ();
+}
+
diff --git a/libnm/tests/test-remote-settings-client.c b/libnm/tests/test-remote-settings-client.c
new file mode 100644
index 000000000..8f9dc27f2
--- /dev/null
+++ b/libnm/tests/test-remote-settings-client.c
@@ -0,0 +1,547 @@
+/* -*- 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 2010 - 2011 Red Hat, Inc.
+ *
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <signal.h>
+
+#include <NetworkManager.h>
+
+#include "common.h"
+
+#include "nm-test-utils.h"
+
+static NMTestServiceInfo *sinfo;
+static NMClient *client = NULL;
+GDBusConnection *bus = NULL;
+NMRemoteConnection *remote = NULL;
+
+/*******************************************************************/
+
+static void
+add_cb (GObject *s,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ gboolean *done = user_data;
+ GError *error = NULL;
+
+ remote = nm_client_add_connection_finish (client, result, &error);
+ g_assert_no_error (error);
+
+ *done = TRUE;
+ g_object_add_weak_pointer (G_OBJECT (remote), (void **) &remote);
+
+ /* nm_client_add_connection_finish() adds a ref to @remote, but we
+ * want the weak pointer to be cleared as soon as @client drops its own ref.
+ * So drop ours.
+ */
+ g_object_unref (remote);
+}
+
+#define TEST_CON_ID "blahblahblah"
+
+static void
+test_add_connection (void)
+{
+ NMConnection *connection;
+ time_t start, now;
+ gboolean done = FALSE;
+
+ connection = nmtst_create_minimal_connection (TEST_CON_ID, NULL, NM_SETTING_WIRED_SETTING_NAME, NULL);
+
+ nm_client_add_connection_async (client,
+ connection,
+ TRUE,
+ NULL,
+ add_cb,
+ &done);
+
+ start = time (NULL);
+ do {
+ now = time (NULL);
+ g_main_context_iteration (NULL, FALSE);
+ } while ((done == FALSE) && (now - start < 5));
+ g_assert (done == TRUE);
+ g_assert (remote != NULL);
+
+ /* Make sure the connection is the same as what we added */
+ g_assert (nm_connection_compare (connection,
+ NM_CONNECTION (remote),
+ NM_SETTING_COMPARE_FLAG_EXACT) == TRUE);
+ g_object_unref (connection);
+}
+
+/*******************************************************************/
+
+static void
+set_visible_cb (GObject *proxy,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GError *error = NULL;
+ GVariant *ret;
+
+ ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), result, &error);
+ g_assert_no_error (error);
+ g_variant_unref (ret);
+}
+
+static void
+visible_changed_cb (GObject *object, GParamSpec *pspec, gboolean *done)
+{
+ if (!nm_remote_connection_get_visible (NM_REMOTE_CONNECTION (object)))
+ *done = TRUE;
+}
+
+static void
+connection_removed_cb (NMClient *s, NMRemoteConnection *connection, gboolean *done)
+{
+ if (connection == remote)
+ *done = TRUE;
+}
+
+static void
+invis_has_settings_cb (NMSetting *setting,
+ const char *key,
+ const GValue *value,
+ GParamFlags flags,
+ gpointer user_data)
+{
+ *((gboolean *) user_data) = TRUE;
+}
+
+static void
+test_make_invisible (void)
+{
+ time_t start, now;
+ const GPtrArray *conns;
+ int i;
+ GDBusProxy *proxy;
+ gboolean visible_changed = FALSE, connection_removed = FALSE;
+ gboolean has_settings = FALSE;
+ char *path;
+
+ g_assert (remote != NULL);
+
+ /* Listen for the remove event when the connection becomes invisible */
+ g_signal_connect (remote, "notify::" NM_REMOTE_CONNECTION_VISIBLE, G_CALLBACK (visible_changed_cb), &visible_changed);
+ g_signal_connect (client, "connection-removed", G_CALLBACK (connection_removed_cb), &connection_removed);
+
+ path = g_strdup (nm_connection_get_path (NM_CONNECTION (remote)));
+ proxy = g_dbus_proxy_new_sync (bus,
+ G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES,
+ NULL,
+ NM_DBUS_SERVICE,
+ path,
+ NM_DBUS_INTERFACE_SETTINGS_CONNECTION,
+ NULL,
+ NULL);
+ g_assert (proxy != NULL);
+
+ /* Bypass the NMClient object so we can test it independently */
+ g_dbus_proxy_call (proxy,
+ "SetVisible",
+ g_variant_new ("(b)", FALSE),
+ G_DBUS_CALL_FLAGS_NONE, -1,
+ NULL,
+ set_visible_cb, NULL);
+
+ /* Wait for the connection to be removed */
+ start = time (NULL);
+ do {
+ now = time (NULL);
+ g_main_context_iteration (NULL, FALSE);
+ } while ((!visible_changed || !connection_removed) && (now - start < 5));
+ g_assert (visible_changed == TRUE);
+ g_assert (connection_removed == TRUE);
+
+ g_signal_handlers_disconnect_by_func (remote, G_CALLBACK (visible_changed_cb), &visible_changed);
+ g_signal_handlers_disconnect_by_func (client, G_CALLBACK (connection_removed_cb), &connection_removed);
+
+ /* Ensure NMClient no longer has the connection */
+ conns = nm_client_get_connections (client);
+ for (i = 0; i < conns->len; i++) {
+ NMConnection *candidate = NM_CONNECTION (conns->pdata[i]);
+
+ g_assert ((gpointer) remote != (gpointer) candidate);
+ g_assert (strcmp (path, nm_connection_get_path (candidate)) != 0);
+ }
+
+ /* And ensure the invisible connection no longer has any settings */
+ g_assert (remote);
+ nm_connection_for_each_setting_value (NM_CONNECTION (remote),
+ invis_has_settings_cb,
+ &has_settings);
+ g_assert (has_settings == FALSE);
+
+ g_free (path);
+ g_object_unref (proxy);
+}
+
+/*******************************************************************/
+
+static void
+vis_new_connection_cb (NMClient *foo,
+ NMRemoteConnection *connection,
+ NMRemoteConnection **new)
+{
+ *new = connection;
+}
+
+static void
+test_make_visible (void)
+{
+ time_t start, now;
+ const GPtrArray *conns;
+ int i;
+ GDBusProxy *proxy;
+ gboolean found = FALSE;
+ char *path;
+ NMRemoteConnection *new = NULL;
+
+ g_assert (remote != NULL);
+
+ /* Wait for the new-connection signal when the connection is visible again */
+ g_signal_connect (client, NM_CLIENT_CONNECTION_ADDED,
+ G_CALLBACK (vis_new_connection_cb), &new);
+
+ path = g_strdup (nm_connection_get_path (NM_CONNECTION (remote)));
+ proxy = g_dbus_proxy_new_sync (bus,
+ G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES,
+ NULL,
+ NM_DBUS_SERVICE,
+ path,
+ NM_DBUS_INTERFACE_SETTINGS_CONNECTION,
+ NULL,
+ NULL);
+ g_assert (proxy != NULL);
+
+ /* Bypass the NMClient object so we can test it independently */
+ g_dbus_proxy_call (proxy,
+ "SetVisible",
+ g_variant_new ("(b)", TRUE),
+ G_DBUS_CALL_FLAGS_NONE, -1,
+ NULL,
+ set_visible_cb, NULL);
+
+ /* Wait for the settings service to announce the connection again */
+ start = time (NULL);
+ do {
+ now = time (NULL);
+ g_main_context_iteration (NULL, FALSE);
+ } while ((new == NULL) && (now - start < 5));
+
+ /* Ensure the new connection is the same as the one we made visible again */
+ g_assert (new);
+ g_assert (new == remote);
+
+ g_signal_handlers_disconnect_by_func (client, G_CALLBACK (vis_new_connection_cb), &new);
+
+ /* Ensure NMClient has the connection */
+ conns = nm_client_get_connections (client);
+ for (i = 0; i < conns->len; i++) {
+ NMConnection *candidate = NM_CONNECTION (conns->pdata[i]);
+
+ if ((gpointer) remote == (gpointer) candidate) {
+ g_assert_cmpstr (path, ==, nm_connection_get_path (candidate));
+ g_assert_cmpstr (TEST_CON_ID, ==, nm_connection_get_id (candidate));
+ found = TRUE;
+ break;
+ }
+ }
+ g_assert (found == TRUE);
+
+ g_free (path);
+ g_object_unref (proxy);
+}
+
+/*******************************************************************/
+
+static void
+deleted_cb (GObject *proxy,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GError *error = NULL;
+ GVariant *ret;
+
+ ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), result, &error);
+ g_assert_no_error (error);
+ g_variant_unref (ret);
+}
+
+static void
+removed_cb (NMClient *s, NMRemoteConnection *connection, gboolean *done)
+{
+ if (connection == remote)
+ *done = TRUE;
+}
+
+static void
+test_remove_connection (void)
+{
+ NMRemoteConnection *connection;
+ time_t start, now;
+ const GPtrArray *conns;
+ int i;
+ GDBusProxy *proxy;
+ gboolean done = FALSE;
+ char *path;
+
+ /* Find a connection to delete */
+ conns = nm_client_get_connections (client);
+ g_assert_cmpint (conns->len, >, 0);
+
+ connection = NM_REMOTE_CONNECTION (conns->pdata[0]);
+ g_assert (connection);
+ g_assert (remote == connection);
+ path = g_strdup (nm_connection_get_path (NM_CONNECTION (connection)));
+ g_signal_connect (client, "connection-removed", G_CALLBACK (removed_cb), &done);
+
+ proxy = g_dbus_proxy_new_sync (bus,
+ G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES,
+ NULL,
+ NM_DBUS_SERVICE,
+ path,
+ NM_DBUS_INTERFACE_SETTINGS_CONNECTION,
+ NULL,
+ NULL);
+ g_assert (proxy != NULL);
+
+ /* Bypass the NMClient object so we can test it independently */
+ g_dbus_proxy_call (proxy,
+ "Delete",
+ NULL,
+ G_DBUS_CALL_FLAGS_NONE, -1,
+ NULL,
+ deleted_cb, NULL);
+
+ start = time (NULL);
+ do {
+ now = time (NULL);
+ g_main_context_iteration (NULL, FALSE);
+ } while ((done == FALSE) && (now - start < 5));
+ g_assert (done == TRUE);
+
+ g_assert (!remote);
+
+ /* Ensure NMClient no longer has the connection */
+ conns = nm_client_get_connections (client);
+ for (i = 0; i < conns->len; i++) {
+ NMConnection *candidate = NM_CONNECTION (conns->pdata[i]);
+
+ g_assert ((gpointer) connection != (gpointer) candidate);
+ g_assert_cmpstr (path, ==, nm_connection_get_path (candidate));
+ }
+
+ g_free (path);
+ g_object_unref (proxy);
+}
+
+/*******************************************************************/
+
+#define TEST_ADD_REMOVE_ID "add-remove-test-connection"
+
+static void
+add_remove_cb (GObject *s,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ NMRemoteConnection *connection;
+ gboolean *done = user_data;
+ GError *error = NULL;
+
+ connection = nm_client_add_connection_finish (client, result, &error);
+ g_assert_error (error, NM_CLIENT_ERROR, NM_CLIENT_ERROR_OBJECT_CREATION_FAILED);
+ g_assert (connection == NULL);
+
+ *done = TRUE;
+}
+
+static void
+test_add_remove_connection (void)
+{
+ GVariant *ret;
+ GError *error = NULL;
+ NMConnection *connection;
+ time_t start, now;
+ gboolean done = FALSE;
+
+ /* This will cause the test server to immediately delete the connection
+ * after creating it.
+ */
+ ret = g_dbus_proxy_call_sync (sinfo->proxy,
+ "AutoRemoveNextConnection",
+ NULL,
+ G_DBUS_CALL_FLAGS_NONE, -1,
+ NULL,
+ &error);
+ g_assert_no_error (error);
+ g_variant_unref (ret);
+
+ connection = nmtst_create_minimal_connection (TEST_ADD_REMOVE_ID, NULL, NM_SETTING_WIRED_SETTING_NAME, NULL);
+ nm_client_add_connection_async (client,
+ connection,
+ TRUE,
+ NULL,
+ add_remove_cb,
+ &done);
+
+ start = time (NULL);
+ do {
+ now = time (NULL);
+ g_main_context_iteration (NULL, FALSE);
+ } while ((done == FALSE) && (now - start < 5));
+ g_assert (done == TRUE);
+
+ g_object_unref (connection);
+}
+
+/*******************************************************************/
+
+static void
+add_bad_cb (GObject *s,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ gboolean *done = user_data;
+ GError *error = NULL;
+
+ remote = nm_client_add_connection_finish (client, result, &error);
+ g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
+
+ *done = TRUE;
+}
+
+static void
+test_add_bad_connection (void)
+{
+ NMConnection *connection;
+ time_t start, now;
+ gboolean done = FALSE;
+
+ /* The test daemon doesn't support bond connections */
+ connection = nmtst_create_minimal_connection ("bad connection test", NULL, NM_SETTING_BOND_SETTING_NAME, NULL);
+
+ nm_client_add_connection_async (client,
+ connection,
+ TRUE,
+ NULL,
+ add_bad_cb,
+ &done);
+ g_object_unref (connection);
+
+ start = time (NULL);
+ do {
+ now = time (NULL);
+ g_main_context_iteration (NULL, FALSE);
+ } while ((done == FALSE) && (now - start < 5));
+ g_assert (done == TRUE);
+ g_assert (remote == NULL);
+}
+
+/*******************************************************************/
+
+static void
+save_hostname_cb (GObject *s,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ gboolean *done = user_data;
+ GError *error = NULL;
+
+ nm_client_save_hostname_finish (client, result, &error);
+ g_assert_no_error (error);
+
+ *done = TRUE;
+}
+
+static void
+test_save_hostname (void)
+{
+ time_t start, now;
+ gboolean done = FALSE;
+ GError *error = NULL;
+
+ /* test-networkmanager-service.py requires the hostname to contain a '.' */
+ nm_client_save_hostname (client, "foo", NULL, &error);
+ g_assert_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_HOSTNAME);
+ g_clear_error (&error);
+
+ nm_client_save_hostname_async (client, "example.com", NULL, save_hostname_cb, &done);
+
+ start = time (NULL);
+ do {
+ now = time (NULL);
+ g_main_context_iteration (NULL, FALSE);
+ } while ((done == FALSE) && (now - start < 5));
+ g_assert (done == TRUE);
+ g_assert (remote == NULL);
+}
+
+/*******************************************************************/
+
+int
+main (int argc, char **argv)
+{
+ int ret;
+ GError *error = NULL;
+
+ g_setenv ("LIBNM_USE_SESSION_BUS", "1", TRUE);
+
+#if !GLIB_CHECK_VERSION (2, 35, 0)
+ g_type_init ();
+#endif
+
+ g_test_init (&argc, &argv, NULL);
+
+ bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
+ g_assert_no_error (error);
+
+ sinfo = nm_test_service_init ();
+
+ client = nm_client_new (NULL, &error);
+ g_assert_no_error (error);
+ g_assert (client != NULL);
+
+ /* FIXME: these tests assume that they get run in order, but g_test_run()
+ * does not actually guarantee that!
+ */
+ g_test_add_func ("/client/add_connection", test_add_connection);
+ g_test_add_func ("/client/make_invisible", test_make_invisible);
+ g_test_add_func ("/client/make_visible", test_make_visible);
+ g_test_add_func ("/client/remove_connection", test_remove_connection);
+ g_test_add_func ("/client/add_remove_connection", test_add_remove_connection);
+ g_test_add_func ("/client/add_bad_connection", test_add_bad_connection);
+ g_test_add_func ("/client/save_hostname", test_save_hostname);
+
+ ret = g_test_run ();
+
+ nm_test_service_cleanup (sinfo);
+ g_object_unref (client);
+ g_object_unref (bus);
+
+ return ret;
+}
+
diff --git a/libnm/tests/test-secret-agent.c b/libnm/tests/test-secret-agent.c
new file mode 100644
index 000000000..0424b74e9
--- /dev/null
+++ b/libnm/tests/test-secret-agent.c
@@ -0,0 +1,655 @@
+/* -*- 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 2010 - 2014 Red Hat, Inc.
+ *
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <signal.h>
+
+#include <NetworkManager.h>
+#include <nm-secret-agent-old.h>
+#include "nm-glib-compat.h"
+#include "nm-test-utils.h"
+
+#include "common.h"
+
+/*******************************************************************/
+
+enum {
+ SECRET_REQUESTED,
+
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+typedef NMSecretAgentOld TestSecretAgent;
+typedef NMSecretAgentOldClass TestSecretAgentClass;
+
+GType test_secret_agent_get_type (void);
+G_DEFINE_TYPE (TestSecretAgent, test_secret_agent, NM_TYPE_SECRET_AGENT_OLD)
+
+static void
+test_secret_agent_init (TestSecretAgent *agent)
+{
+}
+
+static void
+test_secret_agent_get_secrets (NMSecretAgentOld *agent,
+ NMConnection *connection,
+ const char *connection_path,
+ const char *setting_name,
+ const char **hints,
+ NMSecretAgentGetSecretsFlags flags,
+ NMSecretAgentOldGetSecretsFunc callback,
+ gpointer callback_data)
+{
+ NMSettingWirelessSecurity *s_wsec;
+ GVariant *secrets = NULL;
+ GVariantBuilder secrets_builder, setting_builder;
+ char *secret = NULL;
+ GError *error = NULL;
+
+ g_assert_cmpstr (setting_name, ==, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
+
+ 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), ==, NULL);
+
+ g_signal_emit (agent, signals[SECRET_REQUESTED], 0,
+ connection,
+ connection_path,
+ NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NM_SETTING_WIRELESS_SECURITY_PSK,
+ &secret);
+
+ if (!secret) {
+ error = g_error_new (NM_SECRET_AGENT_ERROR, NM_SECRET_AGENT_ERROR_NO_SECRETS,
+ "No secrets");
+ goto done;
+ }
+
+ if (!strcmp (secret, "CANCEL")) {
+ error = g_error_new (NM_SECRET_AGENT_ERROR, NM_SECRET_AGENT_ERROR_USER_CANCELED,
+ "User canceled");
+ goto done;
+ }
+
+ g_variant_builder_init (&setting_builder, NM_VARIANT_TYPE_SETTING);
+ g_variant_builder_add (&setting_builder, "{sv}",
+ NM_SETTING_WIRELESS_SECURITY_PSK,
+ g_variant_new_string (secret));
+
+ g_variant_builder_init (&secrets_builder, NM_VARIANT_TYPE_CONNECTION);
+ g_variant_builder_add (&secrets_builder, "{sa{sv}}",
+ setting_name,
+ &setting_builder);
+ secrets = g_variant_ref_sink (g_variant_builder_end (&secrets_builder));
+
+done:
+ callback (agent, connection, secrets, error, callback_data);
+ g_clear_error (&error);
+ g_clear_pointer (&secrets, g_variant_unref);
+ g_free (secret);
+}
+
+static void
+test_secret_agent_cancel_get_secrets (NMSecretAgentOld *agent,
+ const gchar *connection_path,
+ const gchar *setting_name)
+{
+ g_assert_not_reached ();
+}
+
+static void
+test_secret_agent_save_secrets (NMSecretAgentOld *agent,
+ NMConnection *connection,
+ const gchar *connection_path,
+ NMSecretAgentOldSaveSecretsFunc callback,
+ gpointer callback_data)
+{
+ g_assert_not_reached ();
+}
+
+static void
+test_secret_agent_delete_secrets (NMSecretAgentOld *agent,
+ NMConnection *connection,
+ const gchar *connection_path,
+ NMSecretAgentOldDeleteSecretsFunc callback,
+ gpointer callback_data)
+{
+ g_assert_not_reached ();
+}
+
+static void
+test_secret_agent_class_init (TestSecretAgentClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ NMSecretAgentOldClass *agent_class = NM_SECRET_AGENT_OLD_CLASS (klass);
+
+ agent_class->get_secrets = test_secret_agent_get_secrets;
+ agent_class->cancel_get_secrets = test_secret_agent_cancel_get_secrets;
+ agent_class->save_secrets = test_secret_agent_save_secrets;
+ agent_class->delete_secrets = test_secret_agent_delete_secrets;
+
+ signals[SECRET_REQUESTED] =
+ g_signal_new ("secret-requested",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ 0, NULL, NULL, NULL,
+ G_TYPE_STRING, 4,
+ NM_TYPE_CONNECTION,
+ G_TYPE_STRING,
+ G_TYPE_STRING,
+ G_TYPE_STRING);
+
+}
+
+static NMSecretAgentOld *
+test_secret_agent_new (void)
+{
+ NMSecretAgentOld *agent;
+ GError *error = NULL;
+
+ agent = g_initable_new (test_secret_agent_get_type (), NULL, &error,
+ NM_SECRET_AGENT_OLD_IDENTIFIER, "test-secret-agent",
+ NM_SECRET_AGENT_OLD_AUTO_REGISTER, FALSE,
+ NULL);
+ g_assert_no_error (error);
+
+ return agent;
+}
+
+/*******************************************************************/
+
+typedef struct {
+ NMTestServiceInfo *sinfo;
+ NMClient *client;
+
+ NMSecretAgentOld *agent;
+ NMDevice *device;
+ NMConnection *connection;
+
+ GMainLoop *loop;
+ guint timeout_id;
+
+ char *ifname;
+ char *con_id;
+
+ int secrets_requested;
+} TestSecretAgentData;
+
+static gboolean
+timeout_assert (gpointer user_data)
+{
+ g_assert_not_reached ();
+}
+
+static void
+connection_added_cb (GObject *s,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ TestSecretAgentData *sadata = user_data;
+ NMRemoteConnection *connection;
+ GError *error = NULL;
+
+ connection = nm_client_add_connection_finish (sadata->client, result, &error);
+
+ g_assert_no_error (error);
+ g_assert_cmpstr (nm_connection_get_id (NM_CONNECTION (connection)), ==, sadata->con_id);
+
+ sadata->connection = NM_CONNECTION (connection);
+ g_main_loop_quit (sadata->loop);
+}
+
+static void
+register_cb (GObject *object, GAsyncResult *result, gpointer user_data)
+{
+ TestSecretAgentData *sadata = user_data;
+ GError *error = NULL;
+
+ nm_secret_agent_old_register_finish (sadata->agent, result, &error);
+ g_assert_no_error (error);
+ g_assert (nm_secret_agent_old_get_registered (sadata->agent));
+
+ g_main_loop_quit (sadata->loop);
+}
+
+#define TEST_CON_ID_PREFIX "test-secret-agent"
+
+static void
+test_setup (TestSecretAgentData *sadata, gconstpointer test_data)
+{
+ static int counter = 0;
+ const char *agent_notes = test_data;
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+ NMSettingWireless *s_wireless;
+ GBytes *ssid;
+ NMSetting *s_wsec;
+ GError *error = NULL;
+
+ sadata->sinfo = nm_test_service_init ();
+ sadata->client = nm_client_new (NULL, &error);
+ g_assert_no_error (error);
+
+ sadata->loop = g_main_loop_new (NULL, FALSE);
+ sadata->timeout_id = g_timeout_add_seconds (5, timeout_assert, NULL);
+
+ sadata->ifname = g_strdup_printf ("wlan%d", counter);
+ sadata->con_id = g_strdup_printf ("%s-%d", TEST_CON_ID_PREFIX, counter);
+ counter++;
+
+ /* Create the device */
+ sadata->device = nm_test_service_add_device (sadata->sinfo, sadata->client,
+ "AddWifiDevice", sadata->ifname);
+
+ /* Create the connection */
+ connection = nmtst_create_minimal_connection (sadata->con_id, NULL, NM_SETTING_WIRELESS_SETTING_NAME, &s_con);
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_INTERFACE_NAME, sadata->ifname,
+ NULL);
+
+ s_wireless = nm_connection_get_setting_wireless (connection);
+ ssid = g_bytes_new ("foo", 3);
+ g_object_set (s_wireless,
+ NM_SETTING_WIRELESS_SSID, ssid,
+ NULL);
+ g_bytes_unref (ssid);
+
+ s_wsec = g_object_new (NM_TYPE_SETTING_WIRELESS_SECURITY,
+ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-psk",
+ NULL);
+ nm_connection_add_setting (connection, s_wsec);
+
+ nm_client_add_connection_async (sadata->client,
+ connection,
+ TRUE,
+ NULL,
+ connection_added_cb,
+ sadata);
+ g_object_unref (connection);
+
+ g_main_loop_run (sadata->loop);
+ g_assert (sadata->connection);
+
+ if (agent_notes) {
+ sadata->agent = test_secret_agent_new ();
+
+ if (!strcmp (agent_notes, "sync")) {
+ nm_secret_agent_old_register (sadata->agent, NULL, &error);
+ g_assert_no_error (error);
+ g_assert (nm_secret_agent_old_get_registered (sadata->agent));
+ } else {
+ nm_secret_agent_old_register_async (sadata->agent, NULL,
+ register_cb, sadata);
+ g_main_loop_run (sadata->loop);
+ }
+ }
+}
+
+static void
+test_cleanup (TestSecretAgentData *sadata, gconstpointer test_data)
+{
+ GVariant *ret;
+ GError *error = NULL;
+
+ if (sadata->agent) {
+ if (nm_secret_agent_old_get_registered (sadata->agent)) {
+ nm_secret_agent_old_unregister (sadata->agent, NULL, &error);
+ g_assert_no_error (error);
+ }
+ g_object_unref (sadata->agent);
+ }
+
+ ret = g_dbus_proxy_call_sync (sadata->sinfo->proxy,
+ "RemoveDevice",
+ g_variant_new ("(s)", nm_object_get_path (NM_OBJECT (sadata->device))),
+ G_DBUS_CALL_FLAGS_NO_AUTO_START,
+ 3000,
+ NULL,
+ &error);
+ g_assert_no_error (error);
+ g_variant_unref (ret);
+
+ g_object_unref (sadata->connection);
+ g_object_unref (sadata->client);
+
+ nm_test_service_cleanup (sadata->sinfo);
+
+ g_source_remove (sadata->timeout_id);
+ g_main_loop_unref (sadata->loop);
+
+ g_free (sadata->ifname);
+ g_free (sadata->con_id);
+}
+
+/*******************************************************************/
+
+static void
+connection_activated_none_cb (GObject *c,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ TestSecretAgentData *sadata = user_data;
+ NMActiveConnection *ac;
+ GError *error = NULL;
+
+ ac = nm_client_activate_connection_finish (sadata->client, result, &error);
+ g_assert_error (error, NM_AGENT_MANAGER_ERROR, NM_AGENT_MANAGER_ERROR_NO_SECRETS);
+
+ g_main_loop_quit (sadata->loop);
+}
+
+static void
+test_secret_agent_none (TestSecretAgentData *sadata, gconstpointer test_data)
+{
+ nm_client_activate_connection_async (sadata->client,
+ sadata->connection,
+ sadata->device,
+ NULL,
+ NULL,
+ connection_activated_none_cb,
+ sadata);
+ g_main_loop_run (sadata->loop);
+}
+
+/*******************************************************************/
+
+static char *
+secrets_requested_no_secrets_cb (TestSecretAgent *agent,
+ NMConnection *connection,
+ const char *connection_path,
+ const char *setting_name,
+ const char *secret_name,
+ gpointer user_data)
+{
+ TestSecretAgentData *sadata = user_data;
+
+ g_assert_cmpstr (connection_path, ==, nm_connection_get_path (sadata->connection));
+ sadata->secrets_requested++;
+
+ return NULL;
+}
+
+static void
+connection_activated_no_secrets_cb (GObject *c,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ TestSecretAgentData *sadata = user_data;
+ NMActiveConnection *ac;
+ GError *error = NULL;
+
+ ac = nm_client_activate_connection_finish (sadata->client, result, &error);
+ g_assert_error (error, NM_AGENT_MANAGER_ERROR, NM_AGENT_MANAGER_ERROR_NO_SECRETS);
+ g_main_loop_quit (sadata->loop);
+}
+
+static void
+test_secret_agent_no_secrets (TestSecretAgentData *sadata, gconstpointer test_data)
+{
+ g_signal_connect (sadata->agent, "secret-requested",
+ G_CALLBACK (secrets_requested_no_secrets_cb),
+ sadata);
+
+ nm_client_activate_connection_async (sadata->client,
+ sadata->connection,
+ sadata->device,
+ NULL,
+ NULL,
+ connection_activated_no_secrets_cb,
+ sadata);
+ g_main_loop_run (sadata->loop);
+
+ g_assert_cmpint (sadata->secrets_requested, ==, 1);
+}
+
+/*******************************************************************/
+
+static void
+connection_activated_cancel_cb (GObject *c,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ TestSecretAgentData *sadata = user_data;
+ NMActiveConnection *ac;
+ GError *error = NULL;
+
+ ac = nm_client_activate_connection_finish (sadata->client, result, &error);
+ g_assert_error (error, NM_AGENT_MANAGER_ERROR, NM_AGENT_MANAGER_ERROR_USER_CANCELED);
+ g_main_loop_quit (sadata->loop);
+}
+
+static char *
+secrets_requested_cancel_cb (TestSecretAgent *agent,
+ NMConnection *connection,
+ const char *connection_path,
+ const char *setting_name,
+ const char *secret_name,
+ gpointer user_data)
+{
+ TestSecretAgentData *sadata = user_data;
+
+ g_assert_cmpstr (connection_path, ==, nm_connection_get_path (sadata->connection));
+ sadata->secrets_requested++;
+
+ return g_strdup ("CANCEL");
+}
+
+static void
+test_secret_agent_cancel (TestSecretAgentData *sadata, gconstpointer test_data)
+{
+ g_signal_connect (sadata->agent, "secret-requested",
+ G_CALLBACK (secrets_requested_cancel_cb),
+ sadata);
+
+ nm_client_activate_connection_async (sadata->client,
+ sadata->connection,
+ sadata->device,
+ NULL,
+ NULL,
+ connection_activated_cancel_cb,
+ sadata);
+ g_main_loop_run (sadata->loop);
+
+ g_assert_cmpint (sadata->secrets_requested, ==, 1);
+}
+
+/*******************************************************************/
+
+static void
+connection_activated_good_cb (GObject *c,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ TestSecretAgentData *sadata = user_data;
+ NMActiveConnection *ac;
+ GError *error = NULL;
+
+ ac = nm_client_activate_connection_finish (sadata->client, result, &error);
+ g_assert_no_error (error);
+
+ g_object_unref (ac);
+
+ g_main_loop_quit (sadata->loop);
+}
+
+static char *
+secrets_requested_good_cb (TestSecretAgent *agent,
+ NMConnection *connection,
+ const char *connection_path,
+ const char *setting_name,
+ const char *secret_name,
+ gpointer user_data)
+{
+ TestSecretAgentData *sadata = user_data;
+
+ g_assert_cmpstr (connection_path, ==, nm_connection_get_path (sadata->connection));
+ sadata->secrets_requested++;
+
+ return g_strdup ("password");
+}
+
+static void
+test_secret_agent_good (TestSecretAgentData *sadata, gconstpointer test_data)
+{
+ g_signal_connect (sadata->agent, "secret-requested",
+ G_CALLBACK (secrets_requested_good_cb),
+ sadata);
+
+ nm_client_activate_connection_async (sadata->client,
+ sadata->connection,
+ sadata->device,
+ NULL,
+ NULL,
+ connection_activated_good_cb,
+ sadata);
+ g_main_loop_run (sadata->loop);
+
+ g_assert_cmpint (sadata->secrets_requested, ==, 1);
+}
+
+
+static void
+async_init_cb (GObject *object, GAsyncResult *result, gpointer user_data)
+{
+ GMainLoop *loop = user_data;
+ GError *error = NULL;
+ GObject *agent;
+
+ agent = g_async_initable_new_finish (G_ASYNC_INITABLE (object), result, &error);
+ g_assert_error (error, NM_SECRET_AGENT_ERROR, NM_SECRET_AGENT_ERROR_FAILED);
+ g_assert (agent == NULL);
+ g_clear_error (&error);
+
+ g_main_loop_quit (loop);
+}
+
+static void
+test_secret_agent_nm_not_running (void)
+{
+ NMSecretAgentOld *agent;
+ GMainLoop *loop;
+ GError *error = NULL;
+
+ agent = g_initable_new (test_secret_agent_get_type (), NULL, &error,
+ NM_SECRET_AGENT_OLD_IDENTIFIER, "test-secret-agent",
+ NULL);
+ g_assert_error (error, NM_SECRET_AGENT_ERROR, NM_SECRET_AGENT_ERROR_FAILED);
+ g_assert (agent == NULL);
+ g_clear_error (&error);
+
+ loop = g_main_loop_new (NULL, FALSE);
+ g_async_initable_new_async (test_secret_agent_get_type (),
+ G_PRIORITY_DEFAULT,
+ NULL, async_init_cb, loop,
+ NM_SECRET_AGENT_OLD_IDENTIFIER, "test-secret-agent",
+ NULL);
+ g_main_loop_run (loop);
+ g_main_loop_unref (loop);
+}
+
+
+static void
+registered_changed (GObject *object, GParamSpec *pspec, gpointer user_data)
+{
+ GMainLoop *loop = user_data;
+
+ g_main_loop_quit (loop);
+}
+
+static void
+test_secret_agent_auto_register (void)
+{
+ NMTestServiceInfo *sinfo;
+ NMSecretAgentOld *agent;
+ GMainLoop *loop;
+ GError *error = NULL;
+
+ sinfo = nm_test_service_init ();
+ loop = g_main_loop_new (NULL, FALSE);
+
+ agent = test_secret_agent_new ();
+ g_object_set (agent,
+ NM_SECRET_AGENT_OLD_AUTO_REGISTER, TRUE,
+ NULL);
+ g_signal_connect (agent, "notify::" NM_SECRET_AGENT_OLD_REGISTERED,
+ G_CALLBACK (registered_changed), loop);
+
+ g_assert (!nm_secret_agent_old_get_registered (agent));
+ nm_secret_agent_old_register (agent, NULL, &error);
+ g_assert_no_error (error);
+ g_assert (nm_secret_agent_old_get_registered (agent));
+
+ /* Shut down test service */
+ nm_test_service_cleanup (sinfo);
+ g_main_loop_run (loop);
+ g_assert (!nm_secret_agent_old_get_registered (agent));
+
+ /* Restart test service */
+ sinfo = nm_test_service_init ();
+ g_main_loop_run (loop);
+ g_assert (nm_secret_agent_old_get_registered (agent));
+
+ /* Shut down test service again */
+ nm_test_service_cleanup (sinfo);
+ g_main_loop_run (loop);
+ g_assert (!nm_secret_agent_old_get_registered (agent));
+
+ g_object_unref (agent);
+ g_main_loop_unref (loop);
+}
+
+/*******************************************************************/
+
+int
+main (int argc, char **argv)
+{
+ int ret;
+
+ g_setenv ("LIBNM_USE_SESSION_BUS", "1", TRUE);
+
+#if !GLIB_CHECK_VERSION (2, 35, 0)
+ g_type_init ();
+#endif
+
+ g_test_init (&argc, &argv, NULL);
+
+ g_test_add ("/libnm/secret-agent/none", TestSecretAgentData, NULL,
+ test_setup, test_secret_agent_none, test_cleanup);
+ g_test_add ("/libnm/secret-agent/no-secrets", TestSecretAgentData, "sync",
+ test_setup, test_secret_agent_no_secrets, test_cleanup);
+ g_test_add ("/libnm/secret-agent/cancel", TestSecretAgentData, "async",
+ test_setup, test_secret_agent_cancel, test_cleanup);
+ g_test_add ("/libnm/secret-agent/good", TestSecretAgentData, "async",
+ test_setup, test_secret_agent_good, test_cleanup);
+ g_test_add_func ("/libnm/secret-agent/nm-not-running", test_secret_agent_nm_not_running);
+ g_test_add_func ("/libnm/secret-agent/auto-register", test_secret_agent_auto_register);
+
+ ret = g_test_run ();
+
+ return ret;
+}
+
diff --git a/m4/ax_lib_readline.m4 b/m4/ax_lib_readline.m4
index 72764fba5..fe56c5bfc 100644
--- a/m4/ax_lib_readline.m4
+++ b/m4/ax_lib_readline.m4
@@ -90,8 +90,11 @@ AC_DEFUN([AX_LIB_READLINE], [
AC_MSG_ERROR([readline library with terminfo support is required (one of ncurses, curses, or termcap)])
fi
+ ORIG_LIBS="$LIBS"
LIBS="$LIBS $ax_cv_lib_readline"
AC_CHECK_HEADERS(readline.h readline/readline.h)
+
+ # Check history
AC_CACHE_CHECK([whether readline supports history],
ax_cv_lib_readline_history, [
ax_cv_lib_readline_history="no"
@@ -101,6 +104,18 @@ AC_DEFUN([AX_LIB_READLINE], [
AC_MSG_ERROR(readline history support is required)
fi
AC_CHECK_HEADERS(history.h readline/history.h)
+
+ # check rl_echo_signal_char()
+ AC_CACHE_CHECK([whether readline supports rl_echo_signal_char()],
+ ax_cv_lib_readline_echo_signal_char, [
+ ax_cv_lib_readline_echo_signal_char="no"
+ AC_TRY_LINK_FUNC(rl_echo_signal_char, ax_cv_lib_readline_echo_signal_char="yes")
+ ])
+ if test "$ax_cv_lib_readline_echo_signal_char" != "yes"; then
+ AC_MSG_ERROR(rl_echo_signal_char() is required (install readline6?))
+ fi
+
+ LIBS="$ORIG_LIBS"
READLINE_LIBS="$ax_cv_lib_readline"
AC_SUBST(READLINE_LIBS)
])dnl
diff --git a/m4/compiler_warnings.m4 b/m4/compiler_warnings.m4
index 357ff0e7e..c05a26d09 100644
--- a/m4/compiler_warnings.m4
+++ b/m4/compiler_warnings.m4
@@ -5,32 +5,49 @@ AC_DEFUN([NM_COMPILER_WARNINGS],
AC_MSG_CHECKING(for more warnings)
if test "$GCC" = "yes" -a "$set_more_warnings" != "no"; then
AC_MSG_RESULT(yes)
- CFLAGS="-Wall -std=gnu89 $CFLAGS"
+ CFLAGS_SAVED="$CFLAGS"
+ CFLAGS_MORE_WARNINGS="-Wall -std=gnu89"
+
+ dnl clang only warns about unknown warnings, unless
+ dnl called with "-Werror=unknown-warning-option"
+ dnl Test if the compiler supports that, and if it does
+ dnl attach it to the CFLAGS.
+ CFLAGS_EXTRA="-Werror=unknown-warning-option"
+ CFLAGS="$CFLAGS_MORE_WARNINGS $CFLAGS_EXTRA $CFLAGS_SAVED"
+ AC_TRY_COMPILE([], [],
+ has_option=yes,
+ has_option=no,)
+ if test $has_option = no; then
+ CFLAGS_EXTRA=
+ fi
+ unset has_option
for option in -Wshadow -Wmissing-declarations -Wmissing-prototypes \
-Wdeclaration-after-statement -Wformat-security \
-Wfloat-equal -Wno-unused-parameter -Wno-sign-compare \
+ -Wstrict-prototypes \
-fno-strict-aliasing -Wno-unused-but-set-variable \
-Wundef -Wimplicit-function-declaration \
-Wpointer-arith -Winit-self \
- -Wmissing-include-dirs -Waggregate-return; do
- SAVE_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS $option"
+ -Wmissing-include-dirs; do
+ CFLAGS="$CFLAGS_MORE_WARNINGS $CFLAGS_EXTRA $option $CFLAGS_SAVED"
AC_MSG_CHECKING([whether gcc understands $option])
AC_TRY_COMPILE([], [],
has_option=yes,
has_option=no,)
- if test $has_option = no; then
- CFLAGS="$SAVE_CFLAGS"
+ if test $has_option != no; then
+ CFLAGS_MORE_WARNINGS="$CFLAGS_MORE_WARNINGS $option"
fi
AC_MSG_RESULT($has_option)
unset has_option
- unset SAVE_CFLAGS
done
unset option
+ unset CFLAGS_EXTRA
if test "x$set_more_warnings" = xerror; then
- CFLAGS="$CFLAGS -Werror"
+ CFLAGS_MORE_WARNINGS="$CFLAGS_MORE_WARNINGS -Werror"
fi
+ CFLAGS="$CFLAGS_MORE_WARNINGS $CFLAGS_SAVED"
+ unset CFLAGS_SAVED
else
AC_MSG_RESULT(no)
fi
diff --git a/man/Makefile.am b/man/Makefile.am
index 64469685a..4577cb41e 100644
--- a/man/Makefile.am
+++ b/man/Makefile.am
@@ -4,16 +4,16 @@ EXTRA_DIST =
XSLTPROC = xsltproc
-XSLTPROC_FLAGS = \
- --xinclude \
- --nonet \
+XSLTPROC_FLAGS = --xinclude --nonet
+
+XSLTPROC_MAN_FLAGS = \
+ $(XSLTPROC_FLAGS) \
--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
+ --stringparam man.copyright.section.enabled 0 \
+ http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl
if ENABLE_GTK_DOC
@@ -23,14 +23,41 @@ if ENABLE_GTK_DOC
%.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)/$@
- $(top_builddir)/tools/generate-settings-spec refentry $(builddir)/$@
+endif
+
+if BUILD_SETTING_DOCS
+
+nm-settings.xml: nm-settings.xsl $(top_builddir)/libnm/nm-setting-docs.xml
+ $(AM_V_GEN) xsltproc \
+ --output $@ \
+ --stringparam version $(NM_VERSION) \
+ --stringparam date "`date +'%d %B %Y'`" \
+ $^
+
+nm-settings-keyfile.xml: nm-settings-keyfile.xsl $(top_builddir)/libnm/nm-keyfile-docs.xml
+ $(AM_V_GEN) xsltproc \
+ --output $@ \
+ --stringparam version $(NM_VERSION) \
+ --stringparam date "`date +'%d %B %Y'`" \
+ $^
+
+nm-settings-ifcfg-rh.xml: nm-settings-ifcfg-rh.xsl $(top_builddir)/libnm/nm-ifcfg-rh-docs.xml
+ $(AM_V_GEN) xsltproc \
+ --output $@ \
+ --stringparam version $(NM_VERSION) \
+ --stringparam date "`date +'%d %B %Y'`" \
+ $^
+
+CLEANFILES += \
+ nm-settings.xml \
+ nm-settings-keyfile.xml \
+ nm-settings-ifcfg-rh.xml
endif
configure_generated_man_pages = \
nmcli.1 \
+ nmtui.1 \
nm-online.1 \
nm-system-settings.conf.5
@@ -40,29 +67,46 @@ docbook_generated_man_pages = \
nmcli-examples.5
docbook_autogenerated_man_pages = \
- nm-settings.5
-
-generated_man_pages = \
- $(docbook_generated_man_pages) \
- $(docbook_autogenerated_man_pages)
+ nm-settings.5 \
+ nm-settings-keyfile.5 \
+ nm-settings-ifcfg-rh.5
EXTRA_DIST += \
+ nm-settings.xml \
+ nm-settings.xsl \
+ nm-settings-keyfile.xml \
+ nm-settings-keyfile.xsl \
+ nm-settings-ifcfg-rh.xml \
+ nm-settings-ifcfg-rh.xsl \
$(docbook_generated_man_pages:.%=.xml) \
$(docbook_autogenerated_man_pages)
-CLEANFILES += \
- nm-settings.xml
-
man_MANS += $(configure_generated_man_pages)
+links = nmtui-edit nmtui-connect nmtui-hostname
+
+install-data-hook:
+ for link in $(links); do \
+ ln -f $(DESTDIR)$(mandir)/man1/nmtui.1 $(DESTDIR)$(mandir)/man1/$$link.1; \
+ done
+
+uninstall-hook:
+ for link in $(links); do \
+ rm -f $(DESTDIR)$(mandir)/man1/$$link.1; \
+ done
+
if ENABLE_GTK_DOC
-man_MANS += $(generated_man_pages)
-CLEANFILES += \
- $(docbook_autogenerated_man_pages) \
- $(docbook_generated_man_pages)
+man_MANS += $(docbook_generated_man_pages)
+CLEANFILES += $(docbook_generated_man_pages)
+if SETTING_DOCS_AVAILABLE
+man_MANS += $(docbook_autogenerated_man_pages)
+CLEANFILES += $(docbook_autogenerated_man_pages)
+endif
else
if INSTALL_PREGEN_MANPAGES
-man_MANS += $(generated_man_pages)
+man_MANS += \
+ $(docbook_generated_man_pages) \
+ $(docbook_autogenerated_man_pages)
endif
endif
diff --git a/man/Makefile.in b/man/Makefile.in
index a48bf6806..503b900cd 100644
--- a/man/Makefile.in
+++ b/man/Makefile.in
@@ -77,16 +77,25 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-@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)
+@BUILD_SETTING_DOCS_TRUE@am__append_1 = \
+@BUILD_SETTING_DOCS_TRUE@ nm-settings.xml \
+@BUILD_SETTING_DOCS_TRUE@ nm-settings-keyfile.xml \
+@BUILD_SETTING_DOCS_TRUE@ nm-settings-ifcfg-rh.xml
+
+@ENABLE_GTK_DOC_TRUE@am__append_2 = $(docbook_generated_man_pages)
+@ENABLE_GTK_DOC_TRUE@am__append_3 = $(docbook_generated_man_pages)
+@ENABLE_GTK_DOC_TRUE@@SETTING_DOCS_AVAILABLE_TRUE@am__append_4 = $(docbook_autogenerated_man_pages)
+@ENABLE_GTK_DOC_TRUE@@SETTING_DOCS_AVAILABLE_TRUE@am__append_5 = $(docbook_autogenerated_man_pages)
+@ENABLE_GTK_DOC_FALSE@@INSTALL_PREGEN_MANPAGES_TRUE@am__append_6 = \
+@ENABLE_GTK_DOC_FALSE@@INSTALL_PREGEN_MANPAGES_TRUE@ $(docbook_generated_man_pages) \
+@ENABLE_GTK_DOC_FALSE@@INSTALL_PREGEN_MANPAGES_TRUE@ $(docbook_autogenerated_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.conf.xml.in \
$(srcdir)/nm-system-settings.conf.5.in \
- $(srcdir)/nm-online.1.in $(srcdir)/nmcli.1.in
+ $(srcdir)/nm-online.1.in $(srcdir)/nmcli.1.in \
+ $(srcdir)/nmtui.1.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/ax_lib_readline.m4 \
$(top_srcdir)/m4/compiler_warnings.m4 \
@@ -105,7 +114,8 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES = nm-system-settings.conf.5 nm-online.1 nmcli.1
+CONFIG_CLEAN_FILES = NetworkManager.conf.xml nm-system-settings.conf.5 \
+ nm-online.1 nmcli.1 nmtui.1
CONFIG_CLEAN_VPATH_FILES =
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
@@ -171,6 +181,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -294,6 +306,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -313,6 +326,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -339,7 +353,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -418,24 +432,28 @@ with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
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) \
+man_MANS = $(configure_generated_man_pages) $(am__append_2) \
+ $(am__append_4) $(am__append_6)
+CLEANFILES = $(am__append_1) $(am__append_3) $(am__append_5)
+EXTRA_DIST = nm-settings.xml nm-settings.xsl nm-settings-keyfile.xml \
+ nm-settings-keyfile.xsl nm-settings-ifcfg-rh.xml \
+ nm-settings-ifcfg-rh.xsl \
+ $(docbook_generated_man_pages:.%=.xml) \
$(docbook_autogenerated_man_pages)
XSLTPROC = xsltproc
-XSLTPROC_FLAGS = \
- --xinclude \
- --nonet \
+XSLTPROC_FLAGS = --xinclude --nonet
+XSLTPROC_MAN_FLAGS = \
+ $(XSLTPROC_FLAGS) \
--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
+ --stringparam man.copyright.section.enabled 0 \
+ http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl
-XSLTPROC_MAN_FLAGS = $(XSLTPROC_FLAGS) http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl
configure_generated_man_pages = \
nmcli.1 \
+ nmtui.1 \
nm-online.1 \
nm-system-settings.conf.5
@@ -445,12 +463,11 @@ docbook_generated_man_pages = \
nmcli-examples.5
docbook_autogenerated_man_pages = \
- nm-settings.5
-
-generated_man_pages = \
- $(docbook_generated_man_pages) \
- $(docbook_autogenerated_man_pages)
+ nm-settings.5 \
+ nm-settings-keyfile.5 \
+ nm-settings-ifcfg-rh.5
+links = nmtui-edit nmtui-connect nmtui-hostname
all: all-am
.SUFFIXES:
@@ -484,12 +501,16 @@ $(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.conf.xml: $(top_builddir)/config.status $(srcdir)/NetworkManager.conf.xml.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-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
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+nmtui.1: $(top_builddir)/config.status $(srcdir)/nmtui.1.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
mostlyclean-libtool:
-rm -f *.lo
@@ -721,7 +742,8 @@ info: info-am
info-am:
install-data-am: install-man
-
+ @$(NORMAL_INSTALL)
+ $(MAKE) $(AM_MAKEFLAGS) install-data-hook
install-dvi: install-dvi-am
install-dvi-am:
@@ -765,24 +787,25 @@ ps: ps-am
ps-am:
uninstall-am: uninstall-man
-
+ @$(NORMAL_INSTALL)
+ $(MAKE) $(AM_MAKEFLAGS) uninstall-hook
uninstall-man: uninstall-man1 uninstall-man5 uninstall-man8
-.MAKE: install-am install-strip
+.MAKE: install-am install-data-am install-strip uninstall-am
.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-man1 install-man5 install-man8 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 uninstall-man uninstall-man1 uninstall-man5 \
- uninstall-man8
+ install install-am install-data install-data-am \
+ install-data-hook install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-man1 install-man5 \
+ install-man8 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 uninstall-hook \
+ uninstall-man uninstall-man1 uninstall-man5 uninstall-man8
@ENABLE_GTK_DOC_TRUE@%.8: %.xml
@@ -791,9 +814,36 @@ uninstall-man: uninstall-man1 uninstall-man5 uninstall-man8
@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)/$@
-@ENABLE_GTK_DOC_TRUE@ $(top_builddir)/tools/generate-settings-spec refentry $(builddir)/$@
+@BUILD_SETTING_DOCS_TRUE@nm-settings.xml: nm-settings.xsl $(top_builddir)/libnm/nm-setting-docs.xml
+@BUILD_SETTING_DOCS_TRUE@ $(AM_V_GEN) xsltproc \
+@BUILD_SETTING_DOCS_TRUE@ --output $@ \
+@BUILD_SETTING_DOCS_TRUE@ --stringparam version $(NM_VERSION) \
+@BUILD_SETTING_DOCS_TRUE@ --stringparam date "`date +'%d %B %Y'`" \
+@BUILD_SETTING_DOCS_TRUE@ $^
+
+@BUILD_SETTING_DOCS_TRUE@nm-settings-keyfile.xml: nm-settings-keyfile.xsl $(top_builddir)/libnm/nm-keyfile-docs.xml
+@BUILD_SETTING_DOCS_TRUE@ $(AM_V_GEN) xsltproc \
+@BUILD_SETTING_DOCS_TRUE@ --output $@ \
+@BUILD_SETTING_DOCS_TRUE@ --stringparam version $(NM_VERSION) \
+@BUILD_SETTING_DOCS_TRUE@ --stringparam date "`date +'%d %B %Y'`" \
+@BUILD_SETTING_DOCS_TRUE@ $^
+
+@BUILD_SETTING_DOCS_TRUE@nm-settings-ifcfg-rh.xml: nm-settings-ifcfg-rh.xsl $(top_builddir)/libnm/nm-ifcfg-rh-docs.xml
+@BUILD_SETTING_DOCS_TRUE@ $(AM_V_GEN) xsltproc \
+@BUILD_SETTING_DOCS_TRUE@ --output $@ \
+@BUILD_SETTING_DOCS_TRUE@ --stringparam version $(NM_VERSION) \
+@BUILD_SETTING_DOCS_TRUE@ --stringparam date "`date +'%d %B %Y'`" \
+@BUILD_SETTING_DOCS_TRUE@ $^
+
+install-data-hook:
+ for link in $(links); do \
+ ln -f $(DESTDIR)$(mandir)/man1/nmtui.1 $(DESTDIR)$(mandir)/man1/$$link.1; \
+ done
+
+uninstall-hook:
+ for link in $(links); do \
+ rm -f $(DESTDIR)$(mandir)/man1/$$link.1; \
+ 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/man/NetworkManager.8 b/man/NetworkManager.8
index 5022eadbd..483f61a4e 100644
--- a/man/NetworkManager.8
+++ b/man/NetworkManager.8
@@ -2,12 +2,12 @@
.\" Title: NetworkManager
.\" Author:
.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
-.\" Date: 07/03/2014
+.\" Date: 12/19/2014
.\" Manual: Network management daemons
-.\" Source: NetworkManager 0.9.10
+.\" Source: NetworkManager 1.0
.\" Language: English
.\"
-.TH "NETWORKMANAGER" "8" "" "NetworkManager 0\&.9\&.10" "Network management daemons"
+.TH "NETWORKMANAGER" "8" "" "NetworkManager 1\&.0" "Network management daemons"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -122,7 +122,7 @@ The IP interface name of the device\&.
.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)\&.
+The IPv4 address in the format "address/prefix gateway", where N is a number from 0 to (# IPv4 addresses \- 1)\&. gateway item in this variable is deprecated, use IP4_GATEWAY instead\&.
.RE
.PP
\fIIP4_NUM_ADDRESSES\fR
@@ -130,9 +130,14 @@ The IPv4 address in the format "address/prefix gateway", where N is a number fro
The variable contains the number of IPv4 addresses the script may expect\&.
.RE
.PP
+\fIIP4_GATEWAY\fR
+.RS 4
+The gateway IPv4 address in traditional numbers\-and\-dots notation\&.
+.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)\&.
+The IPv4 route in the format "address/prefix next\-hop metric", where N is a number from 0 to (# IPv4 routes \- 1)\&.
.RE
.PP
\fIIP4_NUM_ROUTES\fR
@@ -199,7 +204,7 @@ Specify file for storing state of the NetworkManager persistently\&. If not spec
.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
+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\-system\-settings\&.conf\*(Aq if located in the same directory\&. See
\fBNetworkManager.conf\fR(5)
for more information on configuration file\&.
.RE
diff --git a/man/NetworkManager.conf.5 b/man/NetworkManager.conf.5
index ef7641bc9..f34fa63a4 100644
--- a/man/NetworkManager.conf.5
+++ b/man/NetworkManager.conf.5
@@ -2,12 +2,12 @@
.\" Title: NetworkManager.conf
.\" Author:
.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
-.\" Date: 07/03/2014
+.\" Date: 12/19/2014
.\" Manual: Configuration
-.\" Source: NetworkManager 0.9.10
+.\" Source: NetworkManager 1.0
.\" Language: English
.\"
-.TH "NETWORKMANAGER\&.CON" "5" "" "NetworkManager 0\&.9\&.10" "Configuration"
+.TH "NETWORKMANAGER\&.CON" "5" "" "NetworkManager 1\&.0" "Configuration"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -87,7 +87,7 @@ Lists system settings plugin names separated by \*(Aq,\*(Aq\&. These plugins are
.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
+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 fall back to using
keyfile\&.
.RE
.PP
@@ -96,13 +96,31 @@ keyfile\&.
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
+\fIauth\-polkit\fR
+.RS 4
+Whether the system uses PolicyKit for authorization\&. If
+false, all requests will be allowed\&. If
+true, non\-root requests are authorized using PolicyKit\&. The default value is
+true\&.
+.RE
+.PP
\fIdhcp\fR
.RS 4
-This key sets up what DHCP client NetworkManager will use\&. Presently
+This key sets up what DHCP client NetworkManager will use\&. Allowed values are
+dhclient,
+dhcpcd, and
+internal\&. The
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\&.
+options require the indicated clients to be installed\&. The
+internal
+option uses a built\-in DHCP client which is not currently as featureful as the external clients (and in particular, does not yet support DHCPv6)\&.
+.sp
+If this key is missing, available DHCP clients are looked for in this order:
+dhclient,
+dhcpcd,
+internal\&.
.RE
.PP
\fIno\-auto\-default\fR
@@ -143,6 +161,14 @@ to apply to all devices\&.
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
+\fIconfigure\-and\-quit\fR
+.RS 4
+When set to
+true, NetworkManager quits after performing initial network configuration but spawns small helpers to preserve DHCP leases and IPv6 addresses\&. This is useful in environments where network setup is more or less static or it is desirable to save process time but still handle some dynamic configurations\&. When this option is
+true, network configuration for WiFi, WWAN, Bluetooth, ADSL, and PPPoE interfaces cannot be preserved due to their use of external services, and these devices will be deconfigured when NetworkManager quits even though other interface\*(Aqs configuration may be preserved\&. The default value is
+false, meaning that NetworkManager will continue running after initial network configuration and continue responding to system and hardware events, D\-Bus requests, and user commands\&.
+.RE
+.PP
\fIdns\fR
.RS 4
Set the DNS (resolv\&.conf) processing mode\&.
@@ -243,7 +269,8 @@ 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\&.
+DEBUG,
+TRACE\&. 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\&. TRACE enables even more verbose logging then DEBUG level\&. 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
@@ -447,6 +474,11 @@ This plugin is read\-only; any connections (of any type) added from within Netwo
keyfile
plugin instead\&.
.RE
+.PP
+\fIibft\fR
+.RS 4
+This plugin allows to read iBFT configuration (iSCSI Boot Firmware Table)\&. The configuration is read using /sbin/iscsiadm\&. Users are expected to configure iBFT connections via the firmware interfaces\&.
+.RE
.SH "SEE ALSO"
.PP
\fBNetworkManager\fR(8),
diff --git a/man/NetworkManager.conf.xml.in b/man/NetworkManager.conf.xml.in
new file mode 100644
index 000000000..d9d51b846
--- /dev/null
+++ b/man/NetworkManager.conf.xml.in
@@ -0,0 +1,560 @@
+<?xml version='1.0'?> <!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+
+<!--
+Copyright 2010 - 2014 Red Hat, Inc.
+-->
+
+<refentry id="NetworkManager.conf">
+ <refentryinfo>
+ <title>NetworkManager.conf</title>
+ <author>NetworkManager developers</author>
+ </refentryinfo>
+
+ <refmeta>
+ <refentrytitle>NetworkManager.conf</refentrytitle>
+ <manvolnum>5</manvolnum>
+ <refmiscinfo class="source">NetworkManager</refmiscinfo>
+ <refmiscinfo class="manual">Configuration</refmiscinfo>
+ <refmiscinfo class="version">1.0</refmiscinfo>
+ </refmeta>
+
+ <refnamediv>
+ <refname>NetworkManager.conf</refname>
+ <refpurpose>NetworkManager configuration file</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv>
+ <para><filename>/etc/NetworkManager/NetworkManager.conf</filename>,
+ <filename>/etc/NetworkManager/conf.d/<replaceable>name</replaceable>.conf</filename>
+ </para>
+ </refsynopsisdiv>
+
+ <refsect1>
+ <title>Description</title>
+ <para>This 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
+ <option>--config</option> argument for NetworkManager.
+ </para>
+ <para>If a default <literal>NetworkManager.conf</literal> is
+ provided by your distribution's packages, you should not modify
+ it, since your changes may get overwritten by package
+ updates. Instead, you can add additional <literal>.conf</literal>
+ files to the <literal>conf.d</literal> directory. These will be read in order,
+ with later files overriding earlier ones.
+ </para>
+
+ </refsect1>
+
+ <refsect1>
+ <title>File Format</title>
+ <para>
+ 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.
+ </para>
+ <para>
+ 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.
+ </para>
+ <para>
+ Minimal system settings configuration file looks like this:
+ <programlisting>
+ [main]
+ plugins=keyfile
+ </programlisting>
+ </para>
+ <para>
+ As an extension to the normal keyfile format, you can also
+ append a value to a previously-set list-valued key by doing:
+ <programlisting>
+ plugins+=another-plugin
+ </programlisting>
+ </para>
+ </refsect1>
+
+ <refsect1>
+ <title><literal>main</literal> section</title>
+ <variablelist>
+ <varlistentry>
+ <term><varname>plugins</varname></term>
+ <listitem>
+ <para>
+ Lists system settings plugin names separated by ','. 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't 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.
+ </para>
+ <para>
+ 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 <literal>keyfile</literal> plugin
+ is always appended to the end of this list (if it doesn't
+ 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 fall back to using
+ <literal>keyfile</literal>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><varname>monitor-connection-files</varname></term>
+ <listitem><para>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
+ '<literal>true</literal>', then NetworkManager will reload
+ connection files any time they changed.</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><varname>auth-polkit</varname></term>
+ <listitem><para>Whether the system uses PolicyKit for authorization.
+ If <literal>false</literal>, all requests will be allowed. If
+ <literal>true</literal>, non-root requests are authorized using PolicyKit.
+ The default value is <literal>@NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@</literal>.
+ </para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><varname>dhcp</varname></term>
+ <listitem><para>This key sets up what DHCP client
+ NetworkManager will use. Allowed values are
+ <literal>dhclient</literal>, <literal>dhcpcd</literal>, and
+ <literal>internal</literal>. The <literal>dhclient</literal>
+ and <literal>dhcpcd</literal> options require the indicated
+ clients to be installed. The <literal>internal</literal>
+ option uses a built-in DHCP client which is not currently as
+ featureful as the external clients (and in particular, does
+ not yet support DHCPv6).</para>
+ <para>If this key is missing, available DHCP clients are
+ looked for in this order: <literal>dhclient</literal>,
+ <literal>dhcpcd</literal>,
+ <literal>internal</literal>.</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><varname>no-auto-default</varname></term>
+ <listitem><para>Comma-separated list of devices for which
+ NetworkManager shouldn't create default wired connection
+ (Auto eth0). By default, NetworkManager creates a temporary
+ wired connection for any Ethernet 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. May have the special value <literal>*</literal> to
+ apply to all devices.</para>
+ <para>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
+ <filename>/var/run/NetworkManager/no-auto-default.state</filename>
+ to prevent creating the default connection for that device
+ again.</para>
+ <para>
+ <programlisting>
+ no-auto-default=00:22:68:5c:5d:c4,00:1e:65:ff:aa:ee
+ no-auto-default=eth0,eth1
+ no-auto-default=*
+ </programlisting>
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>ignore-carrier</varname></term>
+ <listitem>
+ <para>
+ 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.
+ </para>
+ <para>
+ 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.
+ </para>
+ <para>
+ May have the special value <literal>*</literal> to apply
+ to all devices.
+ </para>
+ <para>
+ Note that the "carrier" property of NMDevices and device D-Bus
+ interfaces will still reflect the actual device state; it's just
+ that NetworkManager will not make use of that information.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>configure-and-quit</varname></term>
+ <listitem>
+ <para>
+ When set to <literal>true</literal>, NetworkManager quits after
+ performing initial network configuration but spawns small helpers
+ to preserve DHCP leases and IPv6 addresses. This is useful in
+ environments where network setup is more or less static or it is
+ desirable to save process time but still handle some dynamic
+ configurations. When this option is <literal>true</literal>,
+ network configuration for WiFi, WWAN, Bluetooth, ADSL, and PPPoE
+ interfaces cannot be preserved due to their use of external
+ services, and these devices will be deconfigured when NetworkManager
+ quits even though other interface's configuration may be preserved.
+ The default value is <literal>false</literal>, meaning that
+ NetworkManager will continue running after initial network
+ configuration and continue responding to system and hardware events,
+ D-Bus requests, and user commands.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>dns</varname></term>
+ <listitem><para>Set the DNS (<filename>resolv.conf</filename>) processing mode.</para>
+ <para><literal>default</literal>: The default if the key is
+ not specified. NetworkManager will update
+ <filename>resolv.conf</filename> to reflect the nameservers
+ provided by currently active connections.</para>
+ <para><literal>dnsmasq</literal>: NetworkManager will run
+ dnsmasq as a local caching nameserver, using a "split DNS"
+ configuration if you are connected to a VPN, and then update
+ <filename>resolv.conf</filename> to point to the local
+ nameserver.</para>
+ <para><literal>unbound</literal>: 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.</para>
+ <para><literal>none</literal>: NetworkManager will not
+ modify resolv.conf.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>debug</varname></term>
+ <listitem><para>Comma separated list of options to aid
+ debugging. This value will be combined with the environment
+ variable <literal>NM_DEBUG</literal>. Currently the following
+ values are supported:</para>
+ <para>
+ <literal>RLIMIT_CORE</literal>: set ulimit -c unlimited
+ to write out core dumps.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </refsect1>
+
+ <refsect1>
+ <title><literal>keyfile</literal> section</title>
+ <para>This section contains keyfile-plugin-specific options, and
+ is normally only used when you are not using any other
+ distro-specific plugin.</para>
+
+ <para>
+ <variablelist>
+ <varlistentry>
+ <term><varname>hostname</varname></term>
+ <listitem><para>Set a persistent hostname.</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><varname>unmanaged-devices</varname></term>
+ <listitem><para>Set devices that should be ignored by
+ NetworkManager when using the <literal>keyfile</literal>
+ plugin. Devices are specified in the following
+ format:</para>
+ <para><literal>mac:&lt;hwaddr&gt;</literal> or
+ <literal>interface-name:&lt;ifname&gt;</literal>. Here
+ <literal>hwaddr</literal> is the MAC address of the device
+ to be ignored, in hex-digits-and-colons notation.
+ <literal>ifname</literal> is the interface name of the
+ ignored device.</para>
+ <para>Multiple entries are separated with semicolons. No
+ spaces are allowed in the value.</para>
+ <para>
+ Example:
+ <programlisting>
+unmanaged-devices=interface-name:em4
+unmanaged-devices=mac:00:22:68:1c:59:b1;mac:00:1E:65:30:D1:C4;interface-name:eth2
+ </programlisting>
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </refsect1>
+
+ <refsect1>
+ <title><literal>ifupdown</literal> section</title>
+ <para>This section contains ifupdown-specific options and thus only
+ has effect when using the <literal>ifupdown</literal> plugin.</para>
+
+ <para>
+ <variablelist>
+ <varlistentry>
+ <term><varname>managed</varname></term>
+ <listitem><para>If set to <literal>true</literal>, then
+ interfaces listed in
+ <filename>/etc/network/interfaces</filename> are managed by
+ NetworkManager. If set to <literal>false</literal>, then
+ any interface listed in
+ <filename>/etc/network/interfaces</filename> 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.</para>
+ <para>
+ The default value is <literal>false</literal>.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </refsect1>
+
+ <refsect1>
+ <title><literal>logging</literal> section</title>
+ <para>This section controls NetworkManager's logging. Any
+ settings here are overridden by the <option>--log-level</option>
+ and <option>--log-domains</option> command-line options.</para>
+
+ <para>
+ <variablelist>
+ <varlistentry>
+ <term><varname>level</varname></term>
+ <listitem><para>The default logging verbosity level.
+ One of <literal>ERR</literal>,
+ <literal>WARN</literal>, <literal>INFO</literal>,
+ <literal>DEBUG</literal>, <literal>TRACE</literal>. 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. TRACE enables even more
+ verbose logging then DEBUG level. Subsequent levels also log
+ all messages from earlier levels; thus setting the log level
+ to INFO also logs error and warning messages.</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><varname>domains</varname></term>
+ <listitem><para>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.</para>
+ <para>In addition, these special domains can be used: NONE,
+ ALL, DEFAULT, DHCP, IP.</para>
+ <para>You can specify per-domain log level overrides by
+ adding a colon and a log level to any domain. E.g.,
+ "<literal>WIFI:DEBUG</literal>".</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <para>Domain descriptions:
+ <simplelist type="horiz" columns="1">
+ <member>PLATFORM : OS (platform) operations</member>
+ <member>RFKILL : RFKill subsystem operations</member>
+ <member>ETHER : Ethernet device operations</member>
+ <member>WIFI : Wi-Fi device operations</member>
+ <member>BT : Bluetooth operations</member>
+ <member>MB : Mobile broadband operations</member>
+ <member>DHCP4 : DHCP for IPv4</member>
+ <member>DHCP6 : DHCP for IPv6</member>
+ <member>PPP : Point-to-point protocol operations</member>
+ <member>WIFI_SCAN : Wi-Fi scanning operations</member>
+ <member>IP4 : IPv4-related operations</member>
+ <member>IP6 : IPv6-related operations</member>
+ <member>AUTOIP4 : AutoIP (avahi) operations</member>
+ <member>DNS : Domain Name System related operations</member>
+ <member>VPN : Virtual Private Network connections and operations</member>
+ <member>SHARING : Connection sharing</member>
+ <member>SUPPLICANT : WPA supplicant related operations</member>
+ <member>AGENTS : Secret agents operations and communication</member>
+ <member>SETTINGS : Settings/config service operations</member>
+ <member>SUSPEND : Suspend/resume</member>
+ <member>CORE : Core daemon and policy operations</member>
+ <member>DEVICE : Activation and general interface operations</member>
+ <member>OLPC : OLPC Mesh device operations</member>
+ <member>WIMAX : WiMAX device operations</member>
+ <member>INFINIBAND : InfiniBand device operations</member>
+ <member>FIREWALL : FirewallD related operations</member>
+ <member>ADSL : ADSL device operations</member>
+ <member>BOND : Bonding operations</member>
+ <member>VLAN : VLAN operations</member>
+ <member>BRIDGE : Bridging operations</member>
+ <member>DBUS_PROPS : D-Bus property changes</member>
+ <member>TEAM : Teaming operations</member>
+ <member>CONCHECK : Connectivity check</member>
+ <member>DCB : Data Center Bridging (DCB) operations</member>
+ <member>DISPATCH : Dispatcher scripts</member>
+ <member> </member>
+ <member>NONE : when given by itself logging is disabled</member>
+ <member>ALL : all log domains</member>
+ <member>DEFAULT : default log domains</member>
+ <member>DHCP : shortcut for "DHCP4,DHCP6"</member>
+ <member>IP : shortcut for "IP4,IP6"</member>
+ <member> </member>
+ <member>HW : deprecated alias for "PLATFORM"</member>
+ </simplelist>
+ </para>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </refsect1>
+
+ <refsect1>
+ <title><literal>connectivity</literal> section</title>
+ <para>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.</para>
+
+ <para>
+ <variablelist>
+ <varlistentry>
+ <term><varname>uri</varname></term>
+ <listitem><para>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 <literal>response</literal>
+ option. If this option is blank or missing, connectivity
+ checking is disabled.
+ </para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><varname>interval</varname></term>
+ <listitem><para>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.</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><varname>response</varname></term>
+ <listitem><para>If set controls what body content
+ NetworkManager checks for when requesting the URI for
+ connectivity checking. If missing, defaults to
+ "NetworkManager is online" </para></listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </refsect1>
+
+ <refsect1>
+ <title>Plugins</title>
+
+ <variablelist>
+ <varlistentry>
+ <term><varname>keyfile</varname></term>
+ <listitem>
+ <para>
+ The <literal>keyfile</literal> 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.
+ </para>
+ <para>
+ 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.
+ </para>
+ <para>
+ This plugin is always active, and will automatically be
+ used to store any connections that aren't supported by any
+ other active plugin.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><varname>ifcfg-rh</varname></term>
+ <listitem>
+ <para>
+ This plugin is used on the Fedora and Red Hat Enterprise
+ Linux distributions to read and write configuration from
+ the standard
+ <filename>/etc/sysconfig/network-scripts/ifcfg-*</filename>
+ files. It currently supports reading Ethernet, Wi-Fi,
+ InfiniBand, VLAN, Bond, Bridge, and Team connections.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>ifcfg-suse</varname></term>
+ <listitem>
+ <para>
+ This plugin is only provided for simple backward
+ compatibility with SUSE and OpenSUSE configuration. Most
+ setups should be using the <literal>keyfile</literal>
+ plugin instead. The <literal>ifcfg-suse</literal> plugin
+ supports reading Ethernet and Wi-Fi connections, but does
+ not support saving any connection types.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>ifupdown</varname></term>
+ <listitem>
+ <para>
+ This plugin is used on the Debian and Ubuntu
+ distributions, and reads Ethernet and Wi-Fi connections
+ from <filename>/etc/network/interfaces</filename>.
+ </para>
+ <para>
+ 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 <literal>keyfile</literal>
+ plugin instead.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>ibft</varname></term>
+ <listitem>
+ <para>
+ This plugin allows to read iBFT configuration (iSCSI Boot Firmware Table).
+ The configuration is read using /sbin/iscsiadm. Users are expected to
+ configure iBFT connections via the firmware interfaces.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </refsect1>
+
+ <refsect1>
+ <title>See Also</title>
+ <para>
+ <citerefentry><refentrytitle>NetworkManager</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>nmcli</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>nmcli-examples</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>nm-online</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>nm-settings</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>nm-applet</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>nm-connection-editor</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/nm-settings-ifcfg-rh.5 b/man/nm-settings-ifcfg-rh.5
new file mode 100644
index 000000000..6dea364cc
--- /dev/null
+++ b/man/nm-settings-ifcfg-rh.5
@@ -0,0 +1,2325 @@
+'\" t
+.\" Title: nm-settings-ifcfg-rh
+.\" Author: [see the "AUTHOR" section]
+.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
+.\" Date: 19 December 2014
+.\" Manual: Configuration
+.\" Source: NetworkManager 1.0.0
+.\" Language: English
+.\"
+.TH "NM\-SETTINGS\-IFCFG\" "5" "" "NetworkManager 1\&.0\&.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-ifcfg-rh \- Description of \fIifcfg\-rh\fR settings plugin
+.SH "DESCRIPTION"
+.PP
+NetworkManager is based on the concept of connection profiles that contain network configuration (see
+\fBnm-settings\fR(5)
+for details)\&. The profiles can be stored in various formats\&. NetworkManager uses plugins for reading and writing the data\&. The plugins can be configured in
+\fBNetworkManager.conf\fR(5)\&.
+.PP
+The
+\fIifcfg\-rh\fR
+plugin is used on the Fedora and Red Hat Enterprise Linux distributions to read/write configuration from/to the standard
+/etc/sysconfig/network\-scripts/ifcfg\-*
+files\&. Each NetworkManager connection maps to one
+ifcfg\-*
+file, with possible usage of
+keys\-*
+for passwords,
+route\-*
+for static IPv4 routes and
+route6\-*
+for static IPv6 routes\&. The plugin currently supports reading and writing Ethernet, Wi\-Fi, InfiniBand, VLAN, Bond, Bridge, and Team connections\&. Unsupported connection types (such as WWAN, PPPoE, VPN, or ADSL are handled by
+\fIkeyfile\fR
+plugin (\fBnm-settings-keyfile\fR(5))\&. The main reason for using
+\fIifcfg\-rh\fR
+plugin is the compatibility with legacy configurations for
+\fIifup\fR
+and
+\fIifdown\fR
+(initscripts)\&.
+.SH "FILE FORMAT"
+.PP
+The
+\fIifcfg\-rh\fR
+config format is a simple text file containing VARIABLE="value" lines\&. The format is described in
+sysconfig\&.txt
+of
+\fIinitscripts\fR
+package\&. Note that the configuration files may be sourced by
+\fIinitscripts\fR, so they must be valid shell scripts\&. That means, for instance, that
+#
+character can be used for comments, strings with spaces must be quoted, special characters must be escaped, etc\&.
+.PP
+Users can create or modify the
+\fIifcfg\-rh\fR
+connection files manually, even if that is not the recommended way of managing the profiles\&. However, if they choose to do that, they must inform NetworkManager about their changes (see
+\fImonitor\-connection\-file\fR
+in
+\fBnm-settings\fR(5), and
+\fInmcli con (re)load\fR)\&.
+.PP
+\fBSome ifcfg-rh configuration examples:\fR.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBSimple DHCP ethernet configuration:\fR
+NAME=ethernet
+UUID=1c4ddf70\-01bf\-46d6\-b04f\-47e842bd98da
+TYPE=Ethernet
+BOOTPROTO=dhcp
+DEFROUTE=yes
+PEERDNS=yes
+PEERROUTES=yes
+IPV4_FAILURE_FATAL=no
+ONBOOT=yes
+
+.fi
+.if n \{\
+.RE
+.\}
+
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBSimple ethernet configuration with static IP:\fR
+TYPE=Ethernet
+BOOTPROTO=none
+IPADDR=10\&.1\&.0\&.25
+PREFIX=24
+GATEWAY=10\&.1\&.0\&.1
+DEFROUTE=yes
+IPV4_FAILURE_FATAL=no
+IPV6INIT=yes
+IPV6_AUTOCONF=yes
+IPV6_DEFROUTE=yes
+IPV6_PEERDNS=yes
+IPV6_PEERROUTES=yes
+IPV6_FAILURE_FATAL=no
+NAME=ethernet\-em2
+UUID=51bb3904\-c0fc\-4dfe\-83b2\-0a71e7928c13
+DEVICE=em2
+ONBOOT=yes
+
+.fi
+.if n \{\
+.RE
+.\}
+
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBWPA2 Enterprise WLAN (TTLS with inner MSCHAPV2 authentication):\fR
+ESSID="CompanyWLAN"
+MODE=Managed
+KEY_MGMT=WPA\-EAP
+TYPE=Wireless
+IEEE_8021X_EAP_METHODS=TTLS
+IEEE_8021X_IDENTITY=joe
+IEEE_8021X_PASSWORD_FLAGS=ask
+IEEE_8021X_INNER_AUTH_METHODS=MSCHAPV2
+IEEE_8021X_CA_CERT=/home/joe/\&.cert/company\&.crt
+BOOTPROTO=dhcp
+DEFROUTE=yes
+PEERDNS=yes
+PEERROUTES=yes
+IPV4_FAILURE_FATAL=no
+IPV6INIT=no
+NAME=MyCompany
+UUID=f79848ff\-11a6\-4810\-9e1a\-99039dea84c4
+ONBOOT=yes
+
+.fi
+.if n \{\
+.RE
+.\}
+
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBBridge and bridge port configuration:\fR
+ifcfg\-bridge: ifcfg\-bridge\-port:
+NAME=bridge NAME=bridge007\-port\-eth0
+UUID=4be99ce0\-c5b2\-4764\-8b77\-ec226e440125 UUID=3ad56c4a\-47e1\-419b\-b0d4\-8ad86eb967a3
+DEVICE=bridge007 DEVICE=eth0
+STP=yes ONBOOT=yes
+TYPE=Bridge TYPE=Ethernet
+BRIDGING_OPTS=priority=32768 BRIDGE=bridge007
+ONBOOT=yes
+BOOTPROTO=dhcp
+
+
+.fi
+.if n \{\
+.RE
+.\}
+
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBBonding configuration:\fR
+ifcfg\-BOND: ifcfg\-BOND\-slave:
+NAME=BOND NAME=BOND\-slave
+UUID=b41888aa\-924c\-450c\-b0f8\-85a4f0a51b4a UUID=9bb048e4\-286a\-4cc3\-b104\-007dbd20decb
+DEVICE=bond100 DEVICE=eth0
+BONDING_OPTS="mode=balance\-rr miimon=100" ONBOOT=yes
+TYPE=Bond TYPE=Ethernet
+BONDING_MASTER=yes MASTER=bond100
+ONBOOT=yes SLAVE=yes
+BOOTPROTO=dhcp
+
+
+.fi
+.if n \{\
+.RE
+.\}
+
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBTeam and team port configuration:\fR
+ifcfg\-my_team0:
+DEVICE=team0
+TEAM_CONFIG="{ \e"device\e": \e"team0\e", \e"runner\e": {\e"name\e": \e"roundrobin\e"}, \e"ports\e": {\e"eth1\e": {}, \e"eth2\e": {}} }"
+DEVICETYPE=Team
+BOOTPROTO=dhcp
+NAME=team0\-profile
+UUID=1d3460a0\-7b37\-457f\-a300\-fe8d92da4807
+ONBOOT=yes
+
+ifcfg\-my_team0_slave1:
+NAME=team0\-slave1
+UUID=d5aed298\-c567\-4cc1\-b808\-6d38ecef9e64
+DEVICE=eth1
+ONBOOT=yes
+TEAM_MASTER=team0
+DEVICETYPE=TeamPort
+
+ifcfg\-my_team0_slave2:
+NAME=team0\-slave2
+UUID=94e75f4e\-e5ad\-401c\-8962\-31e0ae5d2215
+DEVICE=eth2
+ONBOOT=yes
+TEAM_MASTER=team0
+DEVICETYPE=TeamPort
+
+.fi
+.if n \{\
+.RE
+.\}
+
+The UUID values in the config files must be unique\&. You can use
+\fIuuidgen\fR
+command line tool to generate such values\&. Alternatively, you can leave out UUID entirely\&. In that case NetworkManager will generate a UUID based on the file name\&.
+.SH "DIFFERENCES AGAINST INITSCRIPTS"
+.PP
+The main differences of NetworkManager ifcfg\-rh plugin and traditional initscripts are:
+.PP
+\fBNM_CONTROLLED=yes|no\fR
+.RS 4
+NM_CONTROLLED is NetworkManager\-specific variable used by NetworkManager for determining whether the device of the
+\fIifcfg\fR
+file should be managed\&. NM_CONTROLLED=yes is supposed if the variable is not present in the file\&. Note that if you have more
+\fIifcfg\fR
+files for a single device, NM_CONTROLLED=no in one of the files will cause the device not to be managed\&. The profile may not even be the active one\&.
+.RE
+.PP
+\fBNew variables\fR
+.RS 4
+NetworkManager has introduced some new variable, not present in initscripts, to be able to store data for its new features\&. The variables are marked as extensions in the tables bellows\&.
+.RE
+.PP
+\fBSemantic change of variables\fR
+.RS 4
+NetworkManager had to slightly change the semantic for a few variables\&.
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+PEERDNS
+\- initscripts interpret PEERDNS=no to mean "never touch resolv\&.conf"\&. NetworkManager interprets it to say "never add automatic (DHCP, PPP, VPN, etc\&.) nameservers to resolv\&.conf"\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+ONBOOT
+\- initscripts use ONBOOT=yes to mark the devices that are to be activated during boot\&. NetworkManager extents this to also mean that this profile can be used for auto\-connecting at any time\&.
+.RE
+.RE
+.PP
+See the next section for detailed mapping of NetworkManager properties and
+\fIifcfg\-rh\fR
+variables\&. Variable names, format and usage differences in NetworkManager and initscripts are documented in the tables bellow\&.
+.SH "DETAILS"
+.PP
+\fIifcfg\-rh\fR
+plugin variables marked with
+\fI(+)\fR
+are NetworkManager specific extensions not understood by traditional initscripts\&.
+.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{
+Property
+T}:T{
+Ifcfg\-rh Variable
+T}:T{
+Default
+T}:T{
+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.
+T{
+eap
+T}:T{
+IEEE_8021X_EAP_METHODS\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+EAP method for 802\&.1X authentication\&.\fB
+
+Example: \fRIEEE_8021X_EAP_METHODS=PEAP\fB
+
+Allowed values: \fR"LEAP", "PWD", "TLS", "PEAP", "TTLS", "FAST"
+T}
+T{
+identity
+T}:T{
+IEEE_8021X_IDENTITY\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+Identity for EAP authentication methods\&.\fB
+
+Example: \fRIEEE_8021X_IDENTITY=itsme
+T}
+T{
+anonymous\-identity
+T}:T{
+IEEE_8021X_ANON_IDENTITY\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+Anonymous identity for EAP authentication methods\&.
+T}
+T{
+pac\-file
+T}:T{
+IEEE_8021X_PAC_FILE\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+File with PAC (Protected Access Credential) for EAP\-FAST\&.\fB
+
+Example: \fRIEEE_8021X_PAC_FILE=/home/joe/my\-fast\&.pac
+T}
+T{
+ca\-cert
+T}:T{
+IEEE_8021X_CA_CERT\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+CA certificate for EAP\&.\fB
+
+Example: \fRIEEE_8021X_CA_CERT=/home/joe/cacert\&.crt
+T}
+T{
+ca\-path
+T}:T{
+(none)
+T}:T{
+\ \&
+T}:T{
+The property is not handled by ifcfg\-rh plugin\&.
+T}
+T{
+subject\-match
+T}:T{
+IEEE_8021X_SUBJECT_MATCH\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+Substring to match subject of server certificate against\&.\fB
+
+Example: \fRIEEE_8021X_SUBJECT_MATCH="Red Hat"
+T}
+T{
+altubject\-matches
+T}:T{
+IEEE_8021X_AlTSUBJECT_MATCHES\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+List of strings to be matched against the altSubjectName\&.\fB
+
+Example: \fRIEEE_8021X_ALTSUBJECT_MATCHES="s1\&.domain\&.cc"
+T}
+T{
+client\-cert
+T}:T{
+IEEE_8021X_CLIENT_CERT\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+Client certificate for EAP\&.\fB
+
+Example: \fRIEEE_8021X_CLIENT_CERT=/home/joe/mycert\&.crt
+T}
+T{
+phase1\-peapver
+T}:T{
+IEEE_8021X_PEAP_VERSION\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+Use to force a specific PEAP version\&.\fB
+
+Allowed values: \fR0, 1
+T}
+T{
+phase1\-peaplabel
+T}:T{
+IEEE_8021X_PEAP_FORCE_NEW_LABEL\fI(+)\fR
+T}:T{
+no
+T}:T{
+Use to force the new PEAP label during key derivation\&.\fB
+
+Allowed values: \fRyes, no
+T}
+T{
+phase1\-fast\-provisioning
+T}:T{
+IEEE_8021X_FAST_PROVISIONING\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+Enable in\-line provisioning of EAP\-FAST credentials\&.\fB
+
+Example: \fRIEEE_8021X_FAST_PROVISIONING="allow\-auth allow\-unauth"\fB
+
+Allowed values: \fRspace\-separated list of these values [allow\-auth, allow\-unauth]
+T}
+T{
+phase2\-auth
+T}:T{
+IEEE_8021X_INNER_AUTH_METHODS\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+Inner non\-EAP authentication methods\&. IEEE_8021X_INNER_AUTH_METHODS can contain values both for \*(Aqphase2\-auth\*(Aq and \*(Aqphase2\-autheap\*(Aq properties\&.\fB
+
+Example: \fRIEEE_8021X_INNER_AUTH_METHODS=PAP\fB
+
+Allowed values: \fR"PAP", "CHAP", "MSCHAP", "MSCHAPV2", "GTC", "OTP", "MD5" and "TLS"
+T}
+T{
+phase2\-autheap
+T}:T{
+IEEE_8021X_INNER_AUTH_METHODS\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+Inner EAP\-based authentication methods\&. Note that IEEE_8021X_INNER_AUTH_METHODS is also used for \*(Aqphase2\-auth\*(Aq values\&.\fB
+
+Example: \fRIEEE_8021X_INNER_AUTH_METHODS="MSCHAPV2 EAP\-TLS"\fB
+
+Allowed values: \fR"EAP\-MD5", "EAP\-MSCHAPV2", "EAP\-GTC", "EAP\-OTP" and "EAP\-TLS"
+T}
+T{
+phase2\-subject\-match
+T}:T{
+IEEE_8021X_PHASE2_SUBJECT_MATCH\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+Substring to match subject of server certificate against\&.\fB
+
+Example: \fRIEEE_8021X_PHASE2_SUBJECT_MATCH="Red Hat"
+T}
+T{
+phase2\-altsubject\-matches
+T}:T{
+IEEE_8021X_PHASE2_ALTSUBJECT_MATCHES\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+\ \&
+T}
+T{
+phase2\-client\-cert
+T}:T{
+IEEE_8021X_INNER_CLIENT_CERT\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+Client certificate for inner EAP method\&.\fB
+
+Example: \fRIEEE_8021X_INNER_CLIENT_CERT=/home/joe/mycert\&.crt
+T}
+T{
+password
+T}:T{
+IEEE_8021X_PASSWORD\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+UTF\-8 encoded password used for EAP\&. It can also go to "key\-" lookaside file, or it can be owned by a secret agent\&.
+T}
+T{
+password\-flags
+T}:T{
+IEEE_8021X_PASSWORD_FLAGS\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+Password flags for IEEE_8021X_PASSWORD password\&. (see the section called \(lqSecret flags\(rq for _FLAGS values)
+T}
+T{
+password\-raw
+T}:T{
+(none)
+T}:T{
+\ \&
+T}:T{
+The property is not handled by ifcfg\-rh plugin\&.
+T}
+T{
+password\-raw\-flags
+T}:T{
+(none)
+T}:T{
+\ \&
+T}:T{
+The property is not handled by ifcfg\-rh plugin\&.
+T}
+T{
+private\-key
+T}:T{
+IEEE_8021X_PRIVATE_KEY\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+Private key for EAP\-TLS\&.\fB
+
+Example: \fRIEEE_8021X_PRIVATE_KEY=/home/joe/mykey\&.p12
+T}
+T{
+private\-key\-password
+T}:T{
+IEEE_8021X_PRIVATE_KEY_PASSWORD\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+Password for IEEE_8021X_PRIVATE_KEY\&. It can also go to "key\-" lookaside file, or it can be owned by a secret agent\&.
+T}
+T{
+private\-key\-password\-flags
+T}:T{
+IEEE_8021X_PRIVATE_KEY_PASSWORD_FLAGS\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+Password flags for IEEE_8021X_PRIVATE_KEY_PASSWORD password\&. (see the section called \(lqSecret flags\(rq for _FLAGS values)
+T}
+T{
+phase2\-private\-key
+T}:T{
+IEEE_8021X_INNER_PRIVATE_KEY\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+Private key for inner authentication method for EAP\-TLS\&.
+T}
+T{
+phase2\-private\-key\-password
+T}:T{
+IEEE_8021X_INNER_PRIVATE_KEY_PASSWORD\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+Password for IEEE_8021X_INNER_PRIVATE_KEY\&. It can also go to "key\-" lookaside file, or it can be owned by a secret agent\&.
+T}
+T{
+phase2\-private\-key\-password\-flags
+T}:T{
+IEEE_8021X_INNER_PRIVATE_KEY_PASSWORD_FLAGS\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+Password flags for IEEE_8021X_INNER_PRIVATE_KEY_PASSWORD password\&. (see the section called \(lqSecret flags\(rq for _FLAGS values)
+T}
+T{
+pin
+T}:T{
+(none)
+T}:T{
+\ \&
+T}:T{
+The property is not handled by ifcfg\-rh plugin\&.
+T}
+T{
+pin\-flags
+T}:T{
+(none)
+T}:T{
+\ \&
+T}:T{
+The property is not handled by ifcfg\-rh plugin\&.
+T}
+T{
+system\-ca\-certs
+T}:T{
+(none)
+T}:T{
+\ \&
+T}:T{
+The property is not handled by ifcfg\-rh plugin\&.
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&2.\ \&bond setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Property
+T}:T{
+Ifcfg\-rh Variable
+T}:T{
+Default
+T}:T{
+Description
+T}
+.T&
+l l l l.
+T{
+options
+T}:T{
+BONDING_OPTS
+T}:T{
+\ \&
+T}:T{
+Bonding options\&.\fB
+
+Example: \fRBONDING_OPTS="miimon=100 mode=broadcast"
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&3.\ \&bridge-port setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Property
+T}:T{
+Ifcfg\-rh Variable
+T}:T{
+Default
+T}:T{
+Description
+T}
+.T&
+l l l l
+l l l l
+l l l l.
+T{
+priority
+T}:T{
+BRIDGING_OPTS: priority=
+T}:T{
+32
+T}:T{
+STP priority\&.\fB
+
+Allowed values: \fR0 \- 63
+T}
+T{
+path\-cost
+T}:T{
+BRIDGING_OPTS: path_cost=
+T}:T{
+100
+T}:T{
+STP cost\&.\fB
+
+Allowed values: \fR1 \- 65535
+T}
+T{
+hairpin\-mode
+T}:T{
+BRIDGING_OPTS: hairpin_mode=
+T}:T{
+yes
+T}:T{
+Hairpin mode of the bridge port\&.
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&4.\ \&bridge setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Property
+T}:T{
+Ifcfg\-rh Variable
+T}:T{
+Default
+T}:T{
+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{
+mac\-address
+T}:T{
+MACADDR\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+MAC address of the bridge\&. Note that this requires a recent kernel support, originally introduced in 3\&.15 upstream kernel) MACADDR for bridges is an NM extension\&.
+T}
+T{
+stp
+T}:T{
+STP
+T}:T{
+no
+T}:T{
+Span tree protocol participation\&.
+T}
+T{
+priority
+T}:T{
+BRIDGING_OPTS: priority=
+T}:T{
+32768
+T}:T{
+STP priority\&.\fB
+
+Allowed values: \fR0 \- 32768
+T}
+T{
+forward\-delay
+T}:T{
+DELAY
+T}:T{
+15
+T}:T{
+STP forwarding delay\&.\fB
+
+Allowed values: \fR2 \- 30
+T}
+T{
+hello\-time
+T}:T{
+BRIDGING_OPTS: hello_time=
+T}:T{
+2
+T}:T{
+STP hello time\&.\fB
+
+Allowed values: \fR1 \- 10
+T}
+T{
+max\-age
+T}:T{
+BRIDGING_OPTS: max_age=
+T}:T{
+20
+T}:T{
+STP maximum message age\&.\fB
+
+Allowed values: \fR6 \- 40
+T}
+T{
+ageing\-time
+T}:T{
+BRIDGING_OPTS: ageing_time=
+T}:T{
+300
+T}:T{
+Ethernet MAC ageing time\&.\fB
+
+Allowed values: \fR0 \- 1000000
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&5.\ \&connection setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Property
+T}:T{
+Ifcfg\-rh Variable
+T}:T{
+Default
+T}:T{
+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{
+id
+T}:T{
+NAME\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+User friendly name for the connection profile\&.
+T}
+T{
+uuid
+T}:T{
+UUID\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+UUID for the connection profile\&. When missing, NetworkManager creates the UUID itself (by hashing the file)\&.
+T}
+T{
+interface\-name
+T}:T{
+DEVICE
+T}:T{
+\ \&
+T}:T{
+Interface name of the device this profile is bound to\&. The variable can be left out when the profile should apply for more devices\&. Note that DEVICE can be required for some connection types\&.
+T}
+T{
+type
+T}:T{
+TYPE (DEVICETYPE, DEVICE)
+T}:T{
+\ \&
+T}:T{
+Base type of the connection\&. DEVICETYPE is used for teaming connections\&.\fB
+
+Example: \fRTYPE=Ethernet; TYPE=Bond; TYPE=Bridge; DEVICETYPE=TeamPort\fB
+
+Allowed values: \fREthernet, Wireless, InfiniBand, Bridge, Bond, Vlan, Team, TeamPort
+T}
+T{
+permissions
+T}:T{
+USERS\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+USERS restrict the access for this conenction to certain users only\&.\fB
+
+Example: \fRUSERS="joe bob"
+T}
+T{
+autoconnect
+T}:T{
+ONBOOT
+T}:T{
+yes
+T}:T{
+Whether the connection should be autoconnected (not only while booting)\&.
+T}
+T{
+autoconnect\-priority
+T}:T{
+AUTOCONNECT_PRIORITY\fI(+)\fR
+T}:T{
+0
+T}:T{
+Connection priority for automatic activation\&. Connections with higher numbers are preferred when selecting profiles for automatic activation\&.\fB
+
+Example: \fRAUTOCONNECT_PRIORITY=20\fB
+
+Allowed values: \fR\-999 to 999
+T}
+T{
+zone
+T}:T{
+ZONE\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+Trust level of this connection\&. The string is usually used for a firewall\&.\fB
+
+Example: \fRZONE=Work
+T}
+T{
+master
+T}:T{
+MASTER, TEAM_MASTER, BRIDGE
+T}:T{
+\ \&
+T}:T{
+Reference to master connection\&. The variable used depends on the connection type\&.
+T}
+T{
+slave\-type
+T}:T{
+MASTER, TEAM_MASTER, DEVICETYPE, BRIDGE
+T}:T{
+\ \&
+T}:T{
+Slave type doesn\*(Aqt map directly to a variable, but it is recognized using different variables\&. MASTER for bonding, TEAM_MASTER and DEVICETYPE for teaming, BRIDGE for bridging\&.
+T}
+T{
+secondaries
+T}:T{
+SECONDARY_UUIDS\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+UUID of VPN connections that should be activated together with this connection\&.
+T}
+T{
+gateway\-ping\-timeout
+T}:T{
+GATEWAY_PING_TIMEOUT\fI(+)\fR
+T}:T{
+0
+T}:T{
+If greater than zero, the IP connectivity will be checked by pinging the gateway and waiting for the specified timeout (in seconds)\&.\fB
+
+Example: \fRGATEWAY_PING_TIMEOUT=5
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&6.\ \&dcb setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Property
+T}:T{
+Ifcfg\-rh Variable
+T}:T{
+Default
+T}:T{
+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{
+app\-fcoe\-flags
+T}:T{
+DCB_APP_FCOE_ENABLE, DCB_APP_FCOE_ADVERTISE, DCB_APP_FCOE_WILLING
+T}:T{
+no
+T}:T{
+FCOE flags\&.\fB
+
+Example: \fRDCB_APP_FCOE_ENABLE=yes DCB_APP_FCOE_ADVERTISE=yes
+T}
+T{
+app\-fcoe\-priority
+T}:T{
+DCB_APP_FCOE_PRIORITY
+T}:T{
+\ \&
+T}:T{
+Priority of FCoE frames\&.\fB
+
+Allowed values: \fR0 \- 7
+T}
+T{
+app\-fcoe\-mode
+T}:T{
+DCB_APP_FCOE_MODE
+T}:T{
+fabric
+T}:T{
+FCoE controller mode\&.\fB
+
+Allowed values: \fRfabric, vn2vn
+T}
+T{
+app\-iscsi\-flags
+T}:T{
+DCB_APP_ISCSI_ENABLE, DCB_APP_ISCSI_ADVERTISE, DCB_APP_ISCSI_WILLING
+T}:T{
+no
+T}:T{
+iSCSI flags\&.
+T}
+T{
+app\-iscsi\-priority
+T}:T{
+DCB_APP_ISCSI_PRIORITY
+T}:T{
+\ \&
+T}:T{
+Priority of iSCSI frames\&.\fB
+
+Allowed values: \fR0 \- 7
+T}
+T{
+app\-fip\-flags
+T}:T{
+DCB_APP_FIP_ENABLE, DCB_APP_FIP_ADVERTISE, DCB_APP_FIP_WILLING
+T}:T{
+no
+T}:T{
+FIP flags\&.
+T}
+T{
+app\-fip\-priority
+T}:T{
+DCB_APP_FIP_PRIORITY
+T}:T{
+\ \&
+T}:T{
+Priority of FIP frames\&.\fB
+
+Allowed values: \fR0 \- 7
+T}
+T{
+priority\-flow\-control\-flags
+T}:T{
+DCB_PFC_ENABLE, DCB_PFC_ADVERTISE, DCB_PFC_WILLING
+T}:T{
+no
+T}:T{
+Priority flow control flags\&.
+T}
+T{
+priority\-flow\-control
+T}:T{
+DCB_PFC_UP
+T}:T{
+\ \&
+T}:T{
+Priority flow control values\&. String of 8 "0" and "1", where "0"\&. means "do not transmit priority pause", "1" means "transmit pause"\&.\fB
+
+Example: \fRDCB_PFC_UP=01101110
+T}
+T{
+priority\-group\-flags
+T}:T{
+DCB_PG_ENABLE, DCB_PG_ADVERTISE, DCB_PG_WILLING
+T}:T{
+no
+T}:T{
+Priority groups flags\&.
+T}
+T{
+priority\-group\-id
+T}:T{
+DCB_PG_ID
+T}:T{
+\ \&
+T}:T{
+Priority groups values\&. String of eight priorities (0 \- 7) or "f" (unrestricted)\&.\fB
+
+Example: \fRDCB_PG_ID=1205f173
+T}
+T{
+priority\-group\-bandwidth
+T}:T{
+DCB_PG_PCT
+T}:T{
+\ \&
+T}:T{
+Priority groups values\&. Eight bandwidths (in percent), separated with commas\&.\fB
+
+Example: \fRDCB_PG_PCT=10,5,10,15,10,10,10,30
+T}
+T{
+priority\-bandwidth
+T}:T{
+DCB_PG_UPPCT
+T}:T{
+\ \&
+T}:T{
+Priority values\&. Eight bandwidths (in percent), separated with commas\&. The sum of the numbers must be 100\&.\fB
+
+Example: \fRDCB_PG_UPPCT=7,13,10,10,15,15,10,20
+T}
+T{
+priority\-strict\-bandwidth
+T}:T{
+DCB_PG_STRICT
+T}:T{
+\ \&
+T}:T{
+Priority values\&. String of eight "0" or "1", where "0" means "may not utilize all bandwidth", "1" means "may utilize all bandwidth"\&.\fB
+
+Example: \fRDCB_PG_STRICT=01101110
+T}
+T{
+priority\-traffic\-class
+T}:T{
+DCB_PG_UP2TC
+T}:T{
+\ \&
+T}:T{
+Priority values\&. String of eight trafic class values (0 \- 7)\&.\fB
+
+Example: \fRDCB_PG_UP2TC=01623701
+T}
+.TE
+.sp 1
+.PP
+All DCB related configuration is a NetworkManager extention\&. DCB=yes must be used explicitly to enable DCB so that the rest of the DCB_* variables can apply\&.
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&7.\ \&infiniband setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Property
+T}:T{
+Ifcfg\-rh Variable
+T}:T{
+Default
+T}:T{
+Description
+T}
+.T&
+l l l l
+l l l l
+l l l l
+l l l l
+l l l l.
+T{
+mac\-address
+T}:T{
+HWADDR
+T}:T{
+\ \&
+T}:T{
+IBoIP 20\-byte hardware address of the device (in traditional hex\-digits\-and\-colons notation)\&.\fB
+
+Example: \fRHWADDR=01:02:03:04:05:06:07:08:09:0A:01:02:03:04:05:06:07:08:09:11
+T}
+T{
+mtu
+T}:T{
+MTU
+T}:T{
+\ \&
+T}:T{
+MTU of the interface\&.
+T}
+T{
+transport\-mode
+T}:T{
+CONNECTED_MODE
+T}:T{
+CONNECTED_MODE=no
+T}:T{
+CONNECTED_MODE=yes for "connected" mode, CONNECTED_MODE=no for "datagram" mode
+T}
+T{
+p\-key
+T}:T{
+PKEY_ID (and PKEY=yes)
+T}:T{
+PKEY=no
+T}:T{
+InfiniBand P_Key\&. The value can be a hex number prefixed with "0x" or a decimal number\&. When PKEY_ID is specified, PHYSDEV and DEVICE also must be specified\&.\fB
+
+Example: \fRPKEY=yes PKEY_ID=2 PHYSDEV=mlx4_ib0 DEVICE=mlx4_ib0\&.8002
+T}
+T{
+parent
+T}:T{
+PHYSDEV (PKEY=yes)
+T}:T{
+PKEY=no
+T}:T{
+InfiniBand parent device\&.\fB
+
+Example: \fRPHYSDEV=ib0
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&8.\ \&ipv4 setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Property
+T}:T{
+Ifcfg\-rh Variable
+T}:T{
+Default
+T}:T{
+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.
+T{
+method
+T}:T{
+BOOTPROTO
+T}:T{
+none
+T}:T{
+Method used for IPv4 protocol configuration\&.\fB
+
+Allowed values: \fRnone, dhcp (bootp), static, ibft, autoip, shared
+T}
+T{
+dns
+T}:T{
+DNS1, DNS2, \&.\&.\&.
+T}:T{
+\ \&
+T}:T{
+List of DNS servers\&. Even if NetworkManager supports many DNS servers, initscripts and resolver only care about the first three, usually\&.\fB
+
+Example: \fRDNS1=1\&.2\&.3\&.4 DNS2=10\&.0\&.0\&.254 DNS3=8\&.8\&.8\&.8
+T}
+T{
+dns\-search
+T}:T{
+DOMAIN
+T}:T{
+\ \&
+T}:T{
+List of DNS search domains\&.
+T}
+T{
+addresses
+T}:T{
+IPADDR, PREFIX, IPADDR1, PREFIX1, \&.\&.\&.
+T}:T{
+\ \&
+T}:T{
+List of static IP addresses\&.\fB
+
+Example: \fRIPADDR=10\&.5\&.5\&.23 PREFIX=24 IPADDR1=1\&.1\&.1\&.2 PREFIX1=16
+T}
+T{
+gateway
+T}:T{
+GATEWAY
+T}:T{
+\ \&
+T}:T{
+Gateway IP address\&.\fB
+
+Example: \fRGATEWAY=10\&.5\&.5\&.1
+T}
+T{
+routes
+T}:T{
+ADDRESS1, NETMASK1, GATEWAY1, METRIC1, \&.\&.\&.
+T}:T{
+\ \&
+T}:T{
+List of static routes\&. They are not stored in ifcfg\-* file, but in route\-* file instead\&.
+T}
+T{
+ignore\-auto\-routes
+T}:T{
+PEERROUTES\fI(+)\fR
+T}:T{
+yes
+T}:T{
+PEERROUTES has the opposite meaning as \*(Aqignore\-auto\-routes\*(Aq property\&.
+T}
+T{
+ignore\-auto\-dns
+T}:T{
+PEERDNS
+T}:T{
+yes
+T}:T{
+PEERDNS has the opposite meaning as \*(Aqignore\-auto\-dns\*(Aq property\&.
+T}
+T{
+dhcp\-send\-hostname
+T}:T{
+DHCP_SEND_HOSTNAME\fI(+)\fR
+T}:T{
+yes
+T}:T{
+Whether DHCP_HOSTNAME should be sent to the DHCP server\&.
+T}
+T{
+dhcp\-hostname
+T}:T{
+DHCP_HOSTNAME
+T}:T{
+\ \&
+T}:T{
+Hostname to send to the DHCP server\&.
+T}
+T{
+never\-default
+T}:T{
+DEFROUTE (GATEWAYDEV in /etc/sysconfig/network)
+T}:T{
+yes
+T}:T{
+DEFROUTE=no tells NetworkManager that this connection should not be assigned the default route\&. DEFROUTE has the opposite meaning as \*(Aqnever\-default\*(Aq property\&.
+T}
+T{
+may\-fail
+T}:T{
+IPV4_FAILURE_FATAL\fI(+)\fR
+T}:T{
+no
+T}:T{
+IPV4_FAILURE_FATAL has the opposite meaning as \*(Aqmay\-fail\*(Aq property\&.
+T}
+T{
+dhcp\-client\-id
+T}:T{
+DHCP_CLIENT_ID\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+A string sent to the DHCP server to identify the local machine\&.\fB
+
+Example: \fRDHCP_CLIENT_ID=ax\-srv\-1
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&9.\ \&ipv6 setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Property
+T}:T{
+Ifcfg\-rh Variable
+T}:T{
+Default
+T}:T{
+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{
+method
+T}:T{
+IPV6INIT, IPV6FORWARDING, IPV6_AUTOCONF, DHCPV6C
+T}:T{
+IPV6INIT=yes; IPV6FORWARDING=no; IPV6_AUTOCONF=!IPV6FORWARDING, DHCPV6=no
+T}:T{
+Method used for IPv6 protocol configuration\&. ignore ~ IPV6INIT=no; auto ~ IPV6_AUTOCONF=yes; dhcp ~ IPV6_AUTOCONF=no and DHCPV6C=yes
+T}
+T{
+dns
+T}:T{
+DNS1, DNS2, \&.\&.\&.
+T}:T{
+\ \&
+T}:T{
+List of DNS servers\&. NetworkManager uses the variables both for IPv4 and IPv6\&.
+T}
+T{
+dns\-search
+T}:T{
+DOMAIN
+T}:T{
+\ \&
+T}:T{
+List of DNS search domains\&.
+T}
+T{
+addresses
+T}:T{
+IPV6ADDR, IPV6ADDR_SECONDARIES
+T}:T{
+\ \&
+T}:T{
+List of static IP addresses\&.\fB
+
+Example: \fRIPV6ADDR=ab12:9876::1 IPV6ADDR_SECONDARIES="ab12:9876::2 ab12:9876::3"
+T}
+T{
+gateway
+T}:T{
+IPV6_DEFAULTGW
+T}:T{
+\ \&
+T}:T{
+Gateway IP address\&.\fB
+
+Example: \fRIPV6_DEFAULTGW=abbe::1
+T}
+T{
+routes
+T}:T{
+(none)
+T}:T{
+\ \&
+T}:T{
+List of static routes\&. They are not stored in ifcfg\-* file, but in route6\-* file instead in the form of command line for \*(Aqip route add\*(Aq\&.
+T}
+T{
+ignore\-auto\-routes
+T}:T{
+IPV6_PEERROUTES\fI(+)\fR
+T}:T{
+yes
+T}:T{
+IPV6_PEERROUTES has the opposite meaning as \*(Aqignore\-auto\-routes\*(Aq property\&.
+T}
+T{
+ignore\-auto\-dns
+T}:T{
+IPV6_PEERDNS\fI(+)\fR
+T}:T{
+yes
+T}:T{
+IPV6_PEERDNS has the opposite meaning as \*(Aqignore\-auto\-dns\*(Aq property\&.
+T}
+T{
+dhcp\-hostname
+T}:T{
+DHCP_HOSTNAME
+T}:T{
+\ \&
+T}:T{
+Hostname to send the DHCP server\&.
+T}
+T{
+never\-default
+T}:T{
+IPV6_DEFROUTE\fI(+)\fR, (and IPV6_DEFAULTGW, IPV6_DEFAULTDEV in /etc/sysconfig/network)
+T}:T{
+IPV6_DEFROUTE=yes (when no variable specified)
+T}:T{
+IPV6_DEFROUTE=no tells NetworkManager that this connection should not be assigned the default IPv6 route\&. IPV6_DEFROUTE has the opposite meaning as \*(Aqnever\-default\*(Aq property\&.
+T}
+T{
+may\-fail
+T}:T{
+IPV6_FAILURE_FATAL\fI(+)\fR
+T}:T{
+no
+T}:T{
+IPV6_FAILURE_FATAL has the opposite meaning as \*(Aqmay\-fail\*(Aq property\&.
+T}
+T{
+ip6\-privacy
+T}:T{
+IPV6_PRIVACY, IPV6_PRIVACY_PREFER_PUBLIC_IP\fI(+)\fR
+T}:T{
+no
+T}:T{
+Configure IPv6 Privacy Extensions for SLAAC (RFC4941)\&.\fB
+
+Example: \fRIPV6_PRIVACY=rfc3041 IPV6_PRIVACY_PREFER_PUBLIC_IP=yes\fB
+
+Allowed values: \fRIPV6_PRIVACY: no, yes (rfc3041 or rfc4941); IPV6_PRIVACY_PREFER_PUBLIC_IP: yes, no
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&10.\ \&team-port setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Property
+T}:T{
+Ifcfg\-rh Variable
+T}:T{
+Default
+T}:T{
+Description
+T}
+.T&
+l l l l.
+T{
+config
+T}:T{
+TEAM_PORT_CONFIG
+T}:T{
+\ \&
+T}:T{
+Team port configuration in JSON\&. See man teamd\&.conf for details\&.
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&11.\ \&team setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Property
+T}:T{
+Ifcfg\-rh Variable
+T}:T{
+Default
+T}:T{
+Description
+T}
+.T&
+l l l l.
+T{
+config
+T}:T{
+TEAM_CONFIG
+T}:T{
+\ \&
+T}:T{
+Team configuration in JSON\&. See man teamd\&.conf for details\&.
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&12.\ \&vlan setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Property
+T}:T{
+Ifcfg\-rh Variable
+T}:T{
+Default
+T}:T{
+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{
+parent
+T}:T{
+DEVICE or PHYSDEV
+T}:T{
+\ \&
+T}:T{
+Parent interface of the VLAN\&.
+T}
+T{
+id
+T}:T{
+VLAN_ID or DEVICE
+T}:T{
+\ \&
+T}:T{
+VLAN identifier\&.
+T}
+T{
+flags
+T}:T{
+VLAN_FLAGS, REORDER_HDR
+T}:T{
+\ \&
+T}:T{
+Parent interface of the VLAN\&.\fB
+
+Allowed values: \fR"GVRP", "LOOSE_BINDING" for VLAN_FLAGS; 0 or 1 for REORDER_HDR
+T}
+T{
+ingress\-property\-map
+T}:T{
+VLAN_INGRESS_PRIORITY_MAP
+T}:T{
+\ \&
+T}:T{
+Ingress priority mapping\&.\fB
+
+Example: \fRVLAN_INGRESS_PRIORITY_MAP=4:2,3:5
+T}
+T{
+egress\-property\-map
+T}:T{
+VLAN_EGRESS_PRIORITY_MAP
+T}:T{
+\ \&
+T}:T{
+Egress priority mapping\&.\fB
+
+Example: \fRVLAN_EGRESS_PRIORITY_MAP=5:4,4:1,3:7
+T}
+T{
+interface\-name
+T}:T{
+PHYSDEV and VLAN_ID, or DEVICE
+T}:T{
+\ \&
+T}:T{
+VLAN interface name\&. If all variables are set, parent device from PHYSDEV takes precedence over DEVICE, but VLAN id from DEVICE takes precedence over VLAN_ID\&.\fB
+
+Example: \fRPHYSDEV=eth0, VLAN_ID=12; or DEVICE=eth0\&.12
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&13.\ \&802-3-ethernet setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Property
+T}:T{
+Ifcfg\-rh Variable
+T}:T{
+Default
+T}:T{
+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.
+T{
+port
+T}:T{
+(none)
+T}:T{
+\ \&
+T}:T{
+The property is not saved by the plugin\&.
+T}
+T{
+speed
+T}:T{
+(none)
+T}:T{
+\ \&
+T}:T{
+The property is not saved by the plugin\&.
+T}
+T{
+duplex
+T}:T{
+(none)
+T}:T{
+\ \&
+T}:T{
+The property is not saved by the plugin\&.
+T}
+T{
+auto\-negotiate
+T}:T{
+(none)
+T}:T{
+\ \&
+T}:T{
+The property is not saved by the plugin\&.
+T}
+T{
+mac\-address
+T}:T{
+HWADDR
+T}:T{
+\ \&
+T}:T{
+Hardware address of the device in traditional hex\-digits\-and\-colons notation (e\&.g\&. 00:22:68:14:5A:05)\&.
+T}
+T{
+cloned\-mac\-address
+T}:T{
+MACADDR
+T}:T{
+\ \&
+T}:T{
+Cloned (spoofed) MAC address in traditional hex\-digits\-and\-colons notation (e\&.g\&. 00:22:68:14:5A:99)\&.
+T}
+T{
+mac\-address\-blacklist
+T}:T{
+HWADDR_BLACKLIST\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+It denies usage of the connection for any device whose address is listed\&.\fB
+
+Example: \fRHWADDR_BLACKLIST="00:22:68:11:69:08 00:11:22:11:44:55"
+T}
+T{
+mtu
+T}:T{
+MTU
+T}:T{
+\ \&
+T}:T{
+MTU of the interface\&.
+T}
+T{
+s390\-subchannels
+T}:T{
+SUBCHANNELS
+T}:T{
+\ \&
+T}:T{
+Subchannels for IBM S390 hosts\&.\fB
+
+Example: \fRSUBCHANNELS=0\&.0\&.b00a,0\&.0\&.b00b,0\&.0\&.b00c
+T}
+T{
+s390\-nettype
+T}:T{
+NETTYPE
+T}:T{
+\ \&
+T}:T{
+Network type of the S390 host\&.\fB
+
+Example: \fRNETTYPE=qeth\fB
+
+Allowed values: \fR"qeth", "lcs" or "ctc"
+T}
+T{
+s390\-options
+T}:T{
+OPTIONS and PORTNAME, CTCPROTO,
+T}:T{
+\ \&
+T}:T{
+S390 device options\&. All options go to OPTIONS, except for "portname" and "ctcprot" that have their own variables\&.
+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-wireless-security setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Property
+T}:T{
+Ifcfg\-rh Variable
+T}:T{
+Default
+T}:T{
+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.
+T{
+key\-mgmt
+T}:T{
+KEY_MGMT\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+Key management menthod\&.\fB
+
+Allowed values: \fRIEEE8021X, WPA\-PSK, WPA\-EAP
+T}
+T{
+wep\-tx\-keyidx
+T}:T{
+DEFAULTKEY
+T}:T{
+1
+T}:T{
+Index of active WEP key\&.\fB
+
+Allowed values: \fR1, 2, 3, 4
+T}
+T{
+auth\-alg
+T}:T{
+SECURITYMODE\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+Authentication algorithm for WEP\&.\fB
+
+Allowed values: \fRrestricted, open, leap
+T}
+T{
+proto
+T}:T{
+WPA_ALLOW_WPA\fI(+)\fR, WPA_ALLOW_WPA2\fI(+)\fR
+T}:T{
+no
+T}:T{
+Allowed WPA protocols, WPA and WPA2 (RSN)\&.\fB
+
+Allowed values: \fRyes, no
+T}
+T{
+pairwise
+T}:T{
+CIPHER_PAIRWISE\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+Restrict pairwise encryption algorithms, specified as a space separated list\&.\fB
+
+Allowed values: \fRCCMP, TKIP
+T}
+T{
+group
+T}:T{
+CIPHER_GROUP\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+Restrict group/broadcast encryption algorithms, specified as a space separated list\&.\fB
+
+Allowed values: \fRCCMP, TKIP, WEP40, WEP104
+T}
+T{
+leap\-username
+T}:T{
+IEEE_8021X_IDENTITY\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+Login name for LEAP\&.
+T}
+T{
+wep\-key0
+T}:T{
+KEY1, KEY_PASSPHRASE1\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+The first WEP key (used in most networks)\&. See also DEFAULTKEY for key index\&.
+T}
+T{
+wep\-key1
+T}:T{
+KEY2, KEY_PASSPHRASE2\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+WEP key with index 1\&. See also DEFAULTKEY for key index\&.
+T}
+T{
+wep\-key2
+T}:T{
+KEY3, KEY_PASSPHRASE3\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+WEP key with index 2\&. See also DEFAULTKEY for key index\&.
+T}
+T{
+wep\-key3
+T}:T{
+KEY4, KEY_PASSPHRASE4\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+WEP key with index 3\&. See also DEFAULTKEY for key index\&.
+T}
+T{
+wep\-key\-flags
+T}:T{
+WEP_KEY_FLAGS\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+Password flags for KEY<i>, KEY_PASSPHRASE<i> password\&. (see the section called \(lqSecret flags\(rq for _FLAGS values)
+T}
+T{
+psk
+T}:T{
+WPA_PSK
+T}:T{
+\ \&
+T}:T{
+Pre\-Shared\-Key for WPA networks\&.
+T}
+T{
+psk\-flags
+T}:T{
+WPA_PSK_FLAGS\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+Password flags for WPA_PSK_FLAGS\&. (see the section called \(lqSecret flags\(rq for _FLAGS values)\fB
+
+Example: \fRWPA_PSK_FLAGS=user
+T}
+T{
+leap\-password
+T}:T{
+IEEE_8021X_PASSWORD\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+Password for LEAP\&. It can also go to "key\-" lookaside file, or it can be owned by a secret agent\&.
+T}
+T{
+leap\-password\-flags
+T}:T{
+IEEE_8021X_PASSWORD_FLAGS\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+Password flags for IEEE_8021X_PASSWORD_FLAGS\&. (see the section called \(lqSecret flags\(rq for _FLAGS values)
+T}
+T{
+wep\-key\-type
+T}:T{
+KEY<i> or KEY_PASSPHRASE<i>\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+KEY is used for "key" type (10 or 26 hexadecimal characters, or 5 or 13 character string prefixed with "s:")\&. KEY_PASSPHRASE is used for WEP passphrases\&.\fB
+
+Example: \fRKEY1=s:ahoj, KEY1=0a1c45bc02, KEY_PASSPHRASE1=mysupersecretkey
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&15.\ \&802-11-wireless setting
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Property
+T}:T{
+Ifcfg\-rh Variable
+T}:T{
+Default
+T}:T{
+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{
+ssid
+T}:T{
+ESSID
+T}:T{
+\ \&
+T}:T{
+SSID of Wi\-Fi network\&.\fB
+
+Example: \fRESSID="Quick Net"
+T}
+T{
+mode
+T}:T{
+MODE
+T}:T{
+\ \&
+T}:T{
+Wi\-Fi network mode\&.\fB
+
+Allowed values: \fRAd\-Hoc, Managed (Auto) [case insensitive]
+T}
+T{
+band
+T}:T{
+BAND\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+BAND alone is honored, but CHANNEL overrides BAND since it implies a band\&.\fB
+
+Example: \fRBAND=bg\fB
+
+Allowed values: \fRa, bg
+T}
+T{
+channel
+T}:T{
+CHANNEL
+T}:T{
+\ \&
+T}:T{
+Channel used for the Wi\-Fi communication\&. Channels greater than 14 mean "a" band, otherwise the band is "bg"\&.\fB
+
+Example: \fRCHANNEL=6
+T}
+T{
+bssid
+T}:T{
+BSSID\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+Restricts association only to a single AP\&.\fB
+
+Example: \fRBSSID=00:1E:BD:64:83:21
+T}
+T{
+rate
+T}:T{
+(none)
+T}:T{
+\ \&
+T}:T{
+This property is not handled by ifcfg\-rh plugin\&.
+T}
+T{
+tx\-power
+T}:T{
+(none)
+T}:T{
+\ \&
+T}:T{
+This property is not handled by ifcfg\-rh plugin\&.
+T}
+T{
+mac\-address
+T}:T{
+HWADDR
+T}:T{
+\ \&
+T}:T{
+Hardware address of the device in traditional hex\-digits\-and\-colons notation (e\&.g\&. 00:22:68:14:5A:05)\&.
+T}
+T{
+cloned\-mac\-address
+T}:T{
+MACADDR
+T}:T{
+\ \&
+T}:T{
+Cloned (spoofed) MAC address in traditional hex\-digits\-and\-colons notation (e\&.g\&. 00:22:68:14:5A:99)\&.
+T}
+T{
+mac\-address\-blacklist
+T}:T{
+HWADDR_BLACKLIST\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+It denies usage of the connection for any device whose address is listed\&.
+T}
+T{
+seen\-bssids
+T}:T{
+(none)
+T}:T{
+\ \&
+T}:T{
+This property is not handled by ifcfg\-rh plugin\&.
+T}
+T{
+mtu
+T}:T{
+MTU
+T}:T{
+\ \&
+T}:T{
+MTU of the wireless interface\&.
+T}
+T{
+hidden
+T}:T{
+SSID_HIDDEN\fI(+)\fR
+T}:T{
+\ \&
+T}:T{
+Whether the network hides the SSID\&.
+T}
+T{
+security
+T}:T{
+(none)
+T}:T{
+\ \&
+T}:T{
+This property is deprecated and not handled by ifcfg\-rh\-plugin\&.
+T}
+.TE
+.sp 1
+.PP
+The following settings are not supported by
+\fIifcfg\-rh\fR
+plugin:
+.PP
+adsl, bluetooth, ppp, pppoe, serial, generic, gsm, cdma, 802\-11\-olpc\-mesh, wimax, vpn
+.SS "Secret flags"
+.PP
+Each secret property in a NetworkManager setting has an associated
+\fIflags\fR
+property that describes how to handle that secret\&. In the
+\fIfcfg\-rh\fR
+plugin variables for secret flags have a
+\fI_FLAGS\fR
+suffix\&. The variables contain one or more of the folowing values (space separated)\&. Missing (or empty) *_FLAGS variable means that the password is owned by NetworkManager\&.
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+user
+\- 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
+.\}
+ask
+\- the associated password is not saved but it will be requested from the user each time it is required\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+unused
+\- 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/sysconfig/network\-scripts/ifcfg\-*
+.PP
+/etc/sysconfig/network\-scripts/keys\-*
+.PP
+/etc/sysconfig/network\-scripts/route\-*
+.PP
+/etc/sysconfig/network\-scripts/route6\-*
+.PP
+/usr/share/doc/initscripts/sysconfig\&.txt
+.SH "SEE ALSO"
+.PP
+https://developer\&.gnome\&.org/NetworkManager/unstable/ref\-settings\&.html
+.PP
+nm\-settings(5), nm\-settings\-keyfile(5), NetworkManager(8), NetworkManager\&.conf(5), nmcli(1), nmcli\-examples(5)
diff --git a/man/nm-settings-ifcfg-rh.xml b/man/nm-settings-ifcfg-rh.xml
new file mode 100644
index 000000000..e578442a9
--- /dev/null
+++ b/man/nm-settings-ifcfg-rh.xml
@@ -0,0 +1,335 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
+<refentry id="nm-settings-ifcfg-rh"><refentryinfo><date>19 December 2014</date></refentryinfo><refmeta><refentrytitle>nm-settings-ifcfg-rh</refentrytitle><manvolnum>5</manvolnum><refmiscinfo class="source">NetworkManager</refmiscinfo><refmiscinfo class="manual">Configuration</refmiscinfo><refmiscinfo class="version">1.0.0</refmiscinfo></refmeta><refnamediv><refname>nm-settings-ifcfg-rh</refname><refpurpose>Description of <emphasis>ifcfg-rh</emphasis> settings plugin</refpurpose></refnamediv><refsect1><title>DESCRIPTION</title><para>
+ NetworkManager is based on the concept of connection profiles that contain
+ network configuration (see <citerefentry><refentrytitle>nm-settings</refentrytitle><manvolnum>5</manvolnum></citerefentry> for details). The profiles can be
+ stored in various formats. NetworkManager uses plugins for reading and writing
+ the data. The plugins can be configured in <citerefentry><refentrytitle>NetworkManager.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+ </para><para>
+ The <emphasis>ifcfg-rh</emphasis> plugin is used on the Fedora and Red Hat
+ Enterprise Linux distributions to read/write configuration from/to
+ the standard <filename>/etc/sysconfig/network-scripts/ifcfg-*</filename> files.
+ Each NetworkManager connection maps to one <filename>ifcfg-*</filename> file, with
+ possible usage of <filename>keys-*</filename> for passwords, <filename>route-*</filename>
+ for static IPv4 routes and <filename>route6-*</filename> for static IPv6 routes.
+ The plugin currently supports reading and writing Ethernet, Wi-Fi, InfiniBand,
+ VLAN, Bond, Bridge, and Team connections. Unsupported connection types (such as
+ WWAN, PPPoE, VPN, or ADSL are handled by <emphasis>keyfile</emphasis> plugin
+ (<citerefentry><refentrytitle>nm-settings-keyfile</refentrytitle><manvolnum>5</manvolnum></citerefentry>).
+ The main reason for using <emphasis>ifcfg-rh</emphasis> plugin is the compatibility
+ with legacy configurations for <emphasis>ifup</emphasis> and <emphasis>ifdown</emphasis>
+ (initscripts).
+ </para></refsect1><refsect1><title>File Format</title><para>
+ The <emphasis>ifcfg-rh</emphasis> config format is a simple text file containing
+ VARIABLE="value" lines. The format is described in <filename>sysconfig.txt</filename>
+ of <emphasis>initscripts</emphasis> package. Note that the configuration files
+ may be sourced by <emphasis>initscripts</emphasis>, so they must be valid shell
+ scripts. That means, for instance, that <literal>#</literal> character can be used
+ for comments, strings with spaces must be quoted, special characters must be escaped,
+ etc.
+ </para><para>
+ Users can create or modify the <emphasis>ifcfg-rh</emphasis> connection files
+ manually, even if that is not the recommended way of managing the profiles.
+ However, if they choose to do that, they must inform NetworkManager about
+ their changes (see <emphasis>monitor-connection-file</emphasis> in
+ <citerefentry><refentrytitle>nm-settings</refentrytitle><manvolnum>5</manvolnum></citerefentry>, and <emphasis>nmcli con (re)load</emphasis>).
+ </para><formalpara><title>Some <emphasis>ifcfg-rh</emphasis> configuration examples:</title><para><programlisting><emphasis role="bold">Simple DHCP ethernet configuration:</emphasis>
+NAME=ethernet
+UUID=1c4ddf70-01bf-46d6-b04f-47e842bd98da
+TYPE=Ethernet
+BOOTPROTO=dhcp
+DEFROUTE=yes
+PEERDNS=yes
+PEERROUTES=yes
+IPV4_FAILURE_FATAL=no
+ONBOOT=yes
+ </programlisting></para><para><programlisting><emphasis role="bold">Simple ethernet configuration with static IP:</emphasis>
+TYPE=Ethernet
+BOOTPROTO=none
+IPADDR=10.1.0.25
+PREFIX=24
+GATEWAY=10.1.0.1
+DEFROUTE=yes
+IPV4_FAILURE_FATAL=no
+IPV6INIT=yes
+IPV6_AUTOCONF=yes
+IPV6_DEFROUTE=yes
+IPV6_PEERDNS=yes
+IPV6_PEERROUTES=yes
+IPV6_FAILURE_FATAL=no
+NAME=ethernet-em2
+UUID=51bb3904-c0fc-4dfe-83b2-0a71e7928c13
+DEVICE=em2
+ONBOOT=yes
+ </programlisting></para><para><programlisting><emphasis role="bold">WPA2 Enterprise WLAN (TTLS with inner MSCHAPV2 authentication):</emphasis>
+ESSID="CompanyWLAN"
+MODE=Managed
+KEY_MGMT=WPA-EAP
+TYPE=Wireless
+IEEE_8021X_EAP_METHODS=TTLS
+IEEE_8021X_IDENTITY=joe
+IEEE_8021X_PASSWORD_FLAGS=ask
+IEEE_8021X_INNER_AUTH_METHODS=MSCHAPV2
+IEEE_8021X_CA_CERT=/home/joe/.cert/company.crt
+BOOTPROTO=dhcp
+DEFROUTE=yes
+PEERDNS=yes
+PEERROUTES=yes
+IPV4_FAILURE_FATAL=no
+IPV6INIT=no
+NAME=MyCompany
+UUID=f79848ff-11a6-4810-9e1a-99039dea84c4
+ONBOOT=yes
+ </programlisting></para><para><programlisting><emphasis role="bold">Bridge and bridge port configuration:</emphasis>
+ifcfg-bridge: ifcfg-bridge-port:
+NAME=bridge NAME=bridge007-port-eth0
+UUID=4be99ce0-c5b2-4764-8b77-ec226e440125 UUID=3ad56c4a-47e1-419b-b0d4-8ad86eb967a3
+DEVICE=bridge007 DEVICE=eth0
+STP=yes ONBOOT=yes
+TYPE=Bridge TYPE=Ethernet
+BRIDGING_OPTS=priority=32768 BRIDGE=bridge007
+ONBOOT=yes
+BOOTPROTO=dhcp
+
+ </programlisting></para><para><programlisting><emphasis role="bold">Bonding configuration:</emphasis>
+ifcfg-BOND: ifcfg-BOND-slave:
+NAME=BOND NAME=BOND-slave
+UUID=b41888aa-924c-450c-b0f8-85a4f0a51b4a UUID=9bb048e4-286a-4cc3-b104-007dbd20decb
+DEVICE=bond100 DEVICE=eth0
+BONDING_OPTS="mode=balance-rr miimon=100" ONBOOT=yes
+TYPE=Bond TYPE=Ethernet
+BONDING_MASTER=yes MASTER=bond100
+ONBOOT=yes SLAVE=yes
+BOOTPROTO=dhcp
+
+ </programlisting></para><para><programlisting><emphasis role="bold">Team and team port configuration:</emphasis>
+ifcfg-my_team0:
+DEVICE=team0
+TEAM_CONFIG="{ \"device\": \"team0\", \"runner\": {\"name\": \"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }"
+DEVICETYPE=Team
+BOOTPROTO=dhcp
+NAME=team0-profile
+UUID=1d3460a0-7b37-457f-a300-fe8d92da4807
+ONBOOT=yes
+
+ifcfg-my_team0_slave1:
+NAME=team0-slave1
+UUID=d5aed298-c567-4cc1-b808-6d38ecef9e64
+DEVICE=eth1
+ONBOOT=yes
+TEAM_MASTER=team0
+DEVICETYPE=TeamPort
+
+ifcfg-my_team0_slave2:
+NAME=team0-slave2
+UUID=94e75f4e-e5ad-401c-8962-31e0ae5d2215
+DEVICE=eth2
+ONBOOT=yes
+TEAM_MASTER=team0
+DEVICETYPE=TeamPort
+ </programlisting></para><para>
+ The UUID values in the config files must be unique. You can use <emphasis>uuidgen</emphasis>
+ command line tool to generate such values. Alternatively, you can leave out UUID
+ entirely. In that case NetworkManager will generate a UUID based on the file name.
+ </para></formalpara></refsect1><refsect1><title>Differences against initscripts</title><para>
+ The main differences of NetworkManager ifcfg-rh plugin and traditional
+ initscripts are:
+ <variablelist class="NM-initscripts-differences"><varlistentry><term><emphasis role="bold">NM_CONTROLLED=yes|no</emphasis></term><listitem><para>
+ NM_CONTROLLED is NetworkManager-specific variable used by NetworkManager
+ for determining whether the device of the <emphasis>ifcfg</emphasis> file
+ should be managed. NM_CONTROLLED=yes is supposed if the variable is not
+ present in the file.
+ Note that if you have more <emphasis>ifcfg</emphasis> files for a single
+ device, NM_CONTROLLED=no in one of the files will cause the device not
+ to be managed. The profile may not even be the active one.
+ </para></listitem></varlistentry><varlistentry><term><emphasis role="bold">New variables</emphasis></term><listitem><para>
+ NetworkManager has introduced some new variable, not present in initscripts,
+ to be able to store data for its new features. The variables are marked
+ as extensions in the tables bellows.
+ </para></listitem></varlistentry><varlistentry><term><emphasis role="bold">Semantic change of variables</emphasis></term><listitem><para>
+ NetworkManager had to slightly change the semantic for a few variables.
+ <itemizedlist><listitem><para><literal>PEERDNS</literal> -
+ initscripts interpret PEERDNS=no to mean "never touch resolv.conf".
+ NetworkManager interprets it to say "never add automatic (DHCP, PPP, VPN, etc.)
+ nameservers to resolv.conf".</para></listitem><listitem><para><literal>ONBOOT</literal> -
+ initscripts use ONBOOT=yes to mark the devices that are to be activated
+ during boot. NetworkManager extents this to also mean that this profile
+ can be used for auto-connecting at any time.</para></listitem></itemizedlist></para></listitem></varlistentry></variablelist></para><para>
+ See the next section for detailed mapping of NetworkManager properties and
+ <emphasis>ifcfg-rh</emphasis> variables. Variable names, format and usage
+ differences in NetworkManager and initscripts are documented in the tables bellow.
+ </para></refsect1><refsect1><title>DETAILS</title><para><emphasis>ifcfg-rh</emphasis> plugin variables marked with <emphasis>(+)</emphasis>
+ are NetworkManager specific extensions not understood by traditional initscripts.
+ </para><table><title>802-1x setting</title><tgroup cols="4"><thead><row><entry>Property</entry><entry>Ifcfg-rh Variable</entry><entry>Default</entry><entry>Description</entry></row></thead><tbody><row><entry align="left">eap</entry><entry align="left">IEEE_8021X_EAP_METHODS<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">EAP method for 802.1X authentication.<emphasis role="bold">
+
+Example: </emphasis>IEEE_8021X_EAP_METHODS=PEAP<emphasis role="bold">
+
+Allowed values: </emphasis>"LEAP", "PWD", "TLS", "PEAP", "TTLS", "FAST"</entry></row><row><entry align="left">identity</entry><entry align="left">IEEE_8021X_IDENTITY<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">Identity for EAP authentication methods.<emphasis role="bold">
+
+Example: </emphasis>IEEE_8021X_IDENTITY=itsme</entry></row><row><entry align="left">anonymous-identity</entry><entry align="left">IEEE_8021X_ANON_IDENTITY<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">Anonymous identity for EAP authentication methods.</entry></row><row><entry align="left">pac-file</entry><entry align="left">IEEE_8021X_PAC_FILE<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">File with PAC (Protected Access Credential) for EAP-FAST.<emphasis role="bold">
+
+Example: </emphasis>IEEE_8021X_PAC_FILE=/home/joe/my-fast.pac</entry></row><row><entry align="left">ca-cert</entry><entry align="left">IEEE_8021X_CA_CERT<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">CA certificate for EAP.<emphasis role="bold">
+
+Example: </emphasis>IEEE_8021X_CA_CERT=/home/joe/cacert.crt</entry></row><row><entry align="left">ca-path</entry><entry align="left">(none)</entry><entry align="left"/><entry align="left">The property is not handled by ifcfg-rh plugin.</entry></row><row><entry align="left">subject-match</entry><entry align="left">IEEE_8021X_SUBJECT_MATCH<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">Substring to match subject of server certificate against.<emphasis role="bold">
+
+Example: </emphasis>IEEE_8021X_SUBJECT_MATCH="Red Hat"</entry></row><row><entry align="left">altubject-matches</entry><entry align="left">IEEE_8021X_AlTSUBJECT_MATCHES<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">List of strings to be matched against the altSubjectName.<emphasis role="bold">
+
+Example: </emphasis>IEEE_8021X_ALTSUBJECT_MATCHES="s1.domain.cc"</entry></row><row><entry align="left">client-cert</entry><entry align="left">IEEE_8021X_CLIENT_CERT<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">Client certificate for EAP.<emphasis role="bold">
+
+Example: </emphasis>IEEE_8021X_CLIENT_CERT=/home/joe/mycert.crt</entry></row><row><entry align="left">phase1-peapver</entry><entry align="left">IEEE_8021X_PEAP_VERSION<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">Use to force a specific PEAP version.<emphasis role="bold">
+
+Allowed values: </emphasis>0, 1</entry></row><row><entry align="left">phase1-peaplabel</entry><entry align="left">IEEE_8021X_PEAP_FORCE_NEW_LABEL<emphasis>(+)</emphasis></entry><entry align="left">no</entry><entry align="left">Use to force the new PEAP label during key derivation.<emphasis role="bold">
+
+Allowed values: </emphasis>yes, no</entry></row><row><entry align="left">phase1-fast-provisioning</entry><entry align="left">IEEE_8021X_FAST_PROVISIONING<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">Enable in-line provisioning of EAP-FAST credentials.<emphasis role="bold">
+
+Example: </emphasis>IEEE_8021X_FAST_PROVISIONING="allow-auth allow-unauth"<emphasis role="bold">
+
+Allowed values: </emphasis>space-separated list of these values [allow-auth, allow-unauth]</entry></row><row><entry align="left">phase2-auth</entry><entry align="left">IEEE_8021X_INNER_AUTH_METHODS<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">Inner non-EAP authentication methods. IEEE_8021X_INNER_AUTH_METHODS can contain values both for 'phase2-auth' and 'phase2-autheap' properties.<emphasis role="bold">
+
+Example: </emphasis>IEEE_8021X_INNER_AUTH_METHODS=PAP<emphasis role="bold">
+
+Allowed values: </emphasis>"PAP", "CHAP", "MSCHAP", "MSCHAPV2", "GTC", "OTP", "MD5" and "TLS"</entry></row><row><entry align="left">phase2-autheap</entry><entry align="left">IEEE_8021X_INNER_AUTH_METHODS<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">Inner EAP-based authentication methods. Note that IEEE_8021X_INNER_AUTH_METHODS is also used for 'phase2-auth' values.<emphasis role="bold">
+
+Example: </emphasis>IEEE_8021X_INNER_AUTH_METHODS="MSCHAPV2 EAP-TLS"<emphasis role="bold">
+
+Allowed values: </emphasis>"EAP-MD5", "EAP-MSCHAPV2", "EAP-GTC", "EAP-OTP" and "EAP-TLS"</entry></row><row><entry align="left">phase2-subject-match</entry><entry align="left">IEEE_8021X_PHASE2_SUBJECT_MATCH<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">Substring to match subject of server certificate against.<emphasis role="bold">
+
+Example: </emphasis>IEEE_8021X_PHASE2_SUBJECT_MATCH="Red Hat"</entry></row><row><entry align="left">phase2-altsubject-matches</entry><entry align="left">IEEE_8021X_PHASE2_ALTSUBJECT_MATCHES<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left"/></row><row><entry align="left">phase2-client-cert</entry><entry align="left">IEEE_8021X_INNER_CLIENT_CERT<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">Client certificate for inner EAP method.<emphasis role="bold">
+
+Example: </emphasis>IEEE_8021X_INNER_CLIENT_CERT=/home/joe/mycert.crt</entry></row><row><entry align="left">password</entry><entry align="left">IEEE_8021X_PASSWORD<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">UTF-8 encoded password used for EAP. It can also go to "key-" lookaside file, or it can be owned by a secret agent.</entry></row><row><entry align="left">password-flags</entry><entry align="left">IEEE_8021X_PASSWORD_FLAGS<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">Password flags for IEEE_8021X_PASSWORD password. (see <xref linkend="secrets-flags"/> for _FLAGS values)</entry></row><row><entry align="left">password-raw</entry><entry align="left">(none)</entry><entry align="left"/><entry align="left">The property is not handled by ifcfg-rh plugin.</entry></row><row><entry align="left">password-raw-flags</entry><entry align="left">(none)</entry><entry align="left"/><entry align="left">The property is not handled by ifcfg-rh plugin.</entry></row><row><entry align="left">private-key</entry><entry align="left">IEEE_8021X_PRIVATE_KEY<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">Private key for EAP-TLS.<emphasis role="bold">
+
+Example: </emphasis>IEEE_8021X_PRIVATE_KEY=/home/joe/mykey.p12</entry></row><row><entry align="left">private-key-password</entry><entry align="left">IEEE_8021X_PRIVATE_KEY_PASSWORD<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">Password for IEEE_8021X_PRIVATE_KEY. It can also go to "key-" lookaside file, or it can be owned by a secret agent.</entry></row><row><entry align="left">private-key-password-flags</entry><entry align="left">IEEE_8021X_PRIVATE_KEY_PASSWORD_FLAGS<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">Password flags for IEEE_8021X_PRIVATE_KEY_PASSWORD password. (see <xref linkend="secrets-flags"/> for _FLAGS values)</entry></row><row><entry align="left">phase2-private-key</entry><entry align="left">IEEE_8021X_INNER_PRIVATE_KEY<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">Private key for inner authentication method for EAP-TLS.</entry></row><row><entry align="left">phase2-private-key-password</entry><entry align="left">IEEE_8021X_INNER_PRIVATE_KEY_PASSWORD<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">Password for IEEE_8021X_INNER_PRIVATE_KEY. It can also go to "key-" lookaside file, or it can be owned by a secret agent.</entry></row><row><entry align="left">phase2-private-key-password-flags</entry><entry align="left">IEEE_8021X_INNER_PRIVATE_KEY_PASSWORD_FLAGS<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">Password flags for IEEE_8021X_INNER_PRIVATE_KEY_PASSWORD password. (see <xref linkend="secrets-flags"/> for _FLAGS values)</entry></row><row><entry align="left">pin</entry><entry align="left">(none)</entry><entry align="left"/><entry align="left">The property is not handled by ifcfg-rh plugin.</entry></row><row><entry align="left">pin-flags</entry><entry align="left">(none)</entry><entry align="left"/><entry align="left">The property is not handled by ifcfg-rh plugin.</entry></row><row><entry align="left">system-ca-certs</entry><entry align="left">(none)</entry><entry align="left"/><entry align="left">The property is not handled by ifcfg-rh plugin.</entry></row></tbody></tgroup></table><table><title>bond setting</title><tgroup cols="4"><thead><row><entry>Property</entry><entry>Ifcfg-rh Variable</entry><entry>Default</entry><entry>Description</entry></row></thead><tbody><row><entry align="left">options</entry><entry align="left">BONDING_OPTS</entry><entry align="left"/><entry align="left">Bonding options.<emphasis role="bold">
+
+Example: </emphasis>BONDING_OPTS="miimon=100 mode=broadcast"</entry></row></tbody></tgroup></table><table><title>bridge-port setting</title><tgroup cols="4"><thead><row><entry>Property</entry><entry>Ifcfg-rh Variable</entry><entry>Default</entry><entry>Description</entry></row></thead><tbody><row><entry align="left">priority</entry><entry align="left">BRIDGING_OPTS: priority=</entry><entry align="left">32</entry><entry align="left">STP priority.<emphasis role="bold">
+
+Allowed values: </emphasis>0 - 63</entry></row><row><entry align="left">path-cost</entry><entry align="left">BRIDGING_OPTS: path_cost=</entry><entry align="left">100</entry><entry align="left">STP cost.<emphasis role="bold">
+
+Allowed values: </emphasis>1 - 65535</entry></row><row><entry align="left">hairpin-mode</entry><entry align="left">BRIDGING_OPTS: hairpin_mode=</entry><entry align="left">yes</entry><entry align="left">Hairpin mode of the bridge port.</entry></row></tbody></tgroup></table><table><title>bridge setting</title><tgroup cols="4"><thead><row><entry>Property</entry><entry>Ifcfg-rh Variable</entry><entry>Default</entry><entry>Description</entry></row></thead><tbody><row><entry align="left">mac-address</entry><entry align="left">MACADDR<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">MAC address of the bridge. Note that this requires a recent kernel support, originally introduced in 3.15 upstream kernel) MACADDR for bridges is an NM extension.</entry></row><row><entry align="left">stp</entry><entry align="left">STP</entry><entry align="left">no</entry><entry align="left">Span tree protocol participation.</entry></row><row><entry align="left">priority</entry><entry align="left">BRIDGING_OPTS: priority=</entry><entry align="left">32768</entry><entry align="left">STP priority.<emphasis role="bold">
+
+Allowed values: </emphasis>0 - 32768</entry></row><row><entry align="left">forward-delay</entry><entry align="left">DELAY</entry><entry align="left">15</entry><entry align="left">STP forwarding delay.<emphasis role="bold">
+
+Allowed values: </emphasis>2 - 30</entry></row><row><entry align="left">hello-time</entry><entry align="left">BRIDGING_OPTS: hello_time=</entry><entry align="left">2</entry><entry align="left">STP hello time.<emphasis role="bold">
+
+Allowed values: </emphasis>1 - 10</entry></row><row><entry align="left">max-age</entry><entry align="left">BRIDGING_OPTS: max_age=</entry><entry align="left">20</entry><entry align="left">STP maximum message age.<emphasis role="bold">
+
+Allowed values: </emphasis>6 - 40</entry></row><row><entry align="left">ageing-time</entry><entry align="left">BRIDGING_OPTS: ageing_time=</entry><entry align="left">300</entry><entry align="left">Ethernet MAC ageing time.<emphasis role="bold">
+
+Allowed values: </emphasis>0 - 1000000</entry></row></tbody></tgroup></table><table><title>connection setting</title><tgroup cols="4"><thead><row><entry>Property</entry><entry>Ifcfg-rh Variable</entry><entry>Default</entry><entry>Description</entry></row></thead><tbody><row><entry align="left">id</entry><entry align="left">NAME<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">User friendly name for the connection profile.</entry></row><row><entry align="left">uuid</entry><entry align="left">UUID<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">UUID for the connection profile. When missing, NetworkManager creates the UUID itself (by hashing the file).</entry></row><row><entry align="left">interface-name</entry><entry align="left">DEVICE</entry><entry align="left"/><entry align="left">Interface name of the device this profile is bound to. The variable can be left out when the profile should apply for more devices. Note that DEVICE can be required for some connection types.</entry></row><row><entry align="left">type</entry><entry align="left">TYPE (DEVICETYPE, DEVICE)</entry><entry align="left"/><entry align="left">Base type of the connection. DEVICETYPE is used for teaming connections.<emphasis role="bold">
+
+Example: </emphasis>TYPE=Ethernet; TYPE=Bond; TYPE=Bridge; DEVICETYPE=TeamPort<emphasis role="bold">
+
+Allowed values: </emphasis>Ethernet, Wireless, InfiniBand, Bridge, Bond, Vlan, Team, TeamPort</entry></row><row><entry align="left">permissions</entry><entry align="left">USERS<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">USERS restrict the access for this conenction to certain users only.<emphasis role="bold">
+
+Example: </emphasis>USERS="joe bob"</entry></row><row><entry align="left">autoconnect</entry><entry align="left">ONBOOT</entry><entry align="left">yes</entry><entry align="left">Whether the connection should be autoconnected (not only while booting).</entry></row><row><entry align="left">autoconnect-priority</entry><entry align="left">AUTOCONNECT_PRIORITY<emphasis>(+)</emphasis></entry><entry align="left">0</entry><entry align="left">Connection priority for automatic activation. Connections with higher numbers are preferred when selecting profiles for automatic activation.<emphasis role="bold">
+
+Example: </emphasis>AUTOCONNECT_PRIORITY=20<emphasis role="bold">
+
+Allowed values: </emphasis>-999 to 999</entry></row><row><entry align="left">zone</entry><entry align="left">ZONE<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">Trust level of this connection. The string is usually used for a firewall.<emphasis role="bold">
+
+Example: </emphasis>ZONE=Work</entry></row><row><entry align="left">master</entry><entry align="left">MASTER, TEAM_MASTER, BRIDGE</entry><entry align="left"/><entry align="left">Reference to master connection. The variable used depends on the connection type.</entry></row><row><entry align="left">slave-type</entry><entry align="left">MASTER, TEAM_MASTER, DEVICETYPE, BRIDGE</entry><entry align="left"/><entry align="left">Slave type doesn't map directly to a variable, but it is recognized using different variables. MASTER for bonding, TEAM_MASTER and DEVICETYPE for teaming, BRIDGE for bridging.</entry></row><row><entry align="left">secondaries</entry><entry align="left">SECONDARY_UUIDS<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">UUID of VPN connections that should be activated together with this connection.</entry></row><row><entry align="left">gateway-ping-timeout</entry><entry align="left">GATEWAY_PING_TIMEOUT<emphasis>(+)</emphasis></entry><entry align="left">0</entry><entry align="left">If greater than zero, the IP connectivity will be checked by pinging the gateway and waiting for the specified timeout (in seconds).<emphasis role="bold">
+
+Example: </emphasis>GATEWAY_PING_TIMEOUT=5</entry></row></tbody></tgroup></table><table><title>dcb setting</title><tgroup cols="4"><thead><row><entry>Property</entry><entry>Ifcfg-rh Variable</entry><entry>Default</entry><entry>Description</entry></row></thead><tbody><row><entry align="left">app-fcoe-flags</entry><entry align="left">DCB_APP_FCOE_ENABLE, DCB_APP_FCOE_ADVERTISE, DCB_APP_FCOE_WILLING</entry><entry align="left">no</entry><entry align="left">FCOE flags.<emphasis role="bold">
+
+Example: </emphasis>DCB_APP_FCOE_ENABLE=yes DCB_APP_FCOE_ADVERTISE=yes</entry></row><row><entry align="left">app-fcoe-priority</entry><entry align="left">DCB_APP_FCOE_PRIORITY</entry><entry align="left"/><entry align="left">Priority of FCoE frames.<emphasis role="bold">
+
+Allowed values: </emphasis>0 - 7</entry></row><row><entry align="left">app-fcoe-mode</entry><entry align="left">DCB_APP_FCOE_MODE</entry><entry align="left">fabric</entry><entry align="left">FCoE controller mode.<emphasis role="bold">
+
+Allowed values: </emphasis>fabric, vn2vn</entry></row><row><entry align="left">app-iscsi-flags</entry><entry align="left">DCB_APP_ISCSI_ENABLE, DCB_APP_ISCSI_ADVERTISE, DCB_APP_ISCSI_WILLING</entry><entry align="left">no</entry><entry align="left">iSCSI flags.</entry></row><row><entry align="left">app-iscsi-priority</entry><entry align="left">DCB_APP_ISCSI_PRIORITY</entry><entry align="left"/><entry align="left">Priority of iSCSI frames.<emphasis role="bold">
+
+Allowed values: </emphasis>0 - 7</entry></row><row><entry align="left">app-fip-flags</entry><entry align="left">DCB_APP_FIP_ENABLE, DCB_APP_FIP_ADVERTISE, DCB_APP_FIP_WILLING</entry><entry align="left">no</entry><entry align="left">FIP flags.</entry></row><row><entry align="left">app-fip-priority</entry><entry align="left">DCB_APP_FIP_PRIORITY</entry><entry align="left"/><entry align="left">Priority of FIP frames.<emphasis role="bold">
+
+Allowed values: </emphasis>0 - 7</entry></row><row><entry align="left">priority-flow-control-flags</entry><entry align="left">DCB_PFC_ENABLE, DCB_PFC_ADVERTISE, DCB_PFC_WILLING</entry><entry align="left">no</entry><entry align="left">Priority flow control flags.</entry></row><row><entry align="left">priority-flow-control</entry><entry align="left">DCB_PFC_UP</entry><entry align="left"/><entry align="left">Priority flow control values. String of 8 "0" and "1", where "0". means "do not transmit priority pause", "1" means "transmit pause".<emphasis role="bold">
+
+Example: </emphasis>DCB_PFC_UP=01101110</entry></row><row><entry align="left">priority-group-flags</entry><entry align="left">DCB_PG_ENABLE, DCB_PG_ADVERTISE, DCB_PG_WILLING</entry><entry align="left">no</entry><entry align="left">Priority groups flags.</entry></row><row><entry align="left">priority-group-id</entry><entry align="left">DCB_PG_ID</entry><entry align="left"/><entry align="left">Priority groups values. String of eight priorities (0 - 7) or "f" (unrestricted).<emphasis role="bold">
+
+Example: </emphasis>DCB_PG_ID=1205f173</entry></row><row><entry align="left">priority-group-bandwidth</entry><entry align="left">DCB_PG_PCT</entry><entry align="left"/><entry align="left">Priority groups values. Eight bandwidths (in percent), separated with commas.<emphasis role="bold">
+
+Example: </emphasis>DCB_PG_PCT=10,5,10,15,10,10,10,30</entry></row><row><entry align="left">priority-bandwidth</entry><entry align="left">DCB_PG_UPPCT</entry><entry align="left"/><entry align="left">Priority values. Eight bandwidths (in percent), separated with commas. The sum of the numbers must be 100.<emphasis role="bold">
+
+Example: </emphasis>DCB_PG_UPPCT=7,13,10,10,15,15,10,20</entry></row><row><entry align="left">priority-strict-bandwidth</entry><entry align="left">DCB_PG_STRICT</entry><entry align="left"/><entry align="left">Priority values. String of eight "0" or "1", where "0" means "may not utilize all bandwidth", "1" means "may utilize all bandwidth".<emphasis role="bold">
+
+Example: </emphasis>DCB_PG_STRICT=01101110</entry></row><row><entry align="left">priority-traffic-class</entry><entry align="left">DCB_PG_UP2TC</entry><entry align="left"/><entry align="left">Priority values. String of eight trafic class values (0 - 7).<emphasis role="bold">
+
+Example: </emphasis>DCB_PG_UP2TC=01623701</entry></row></tbody></tgroup></table><para>
+ All DCB related configuration is a NetworkManager extention. DCB=yes must be
+ used explicitly to enable DCB so that the rest of the DCB_* variables can apply.
+ </para><table><title>infiniband setting</title><tgroup cols="4"><thead><row><entry>Property</entry><entry>Ifcfg-rh Variable</entry><entry>Default</entry><entry>Description</entry></row></thead><tbody><row><entry align="left">mac-address</entry><entry align="left">HWADDR</entry><entry align="left"/><entry align="left">IBoIP 20-byte hardware address of the device (in traditional hex-digits-and-colons notation).<emphasis role="bold">
+
+Example: </emphasis>HWADDR=01:02:03:04:05:06:07:08:09:0A:01:02:03:04:05:06:07:08:09:11</entry></row><row><entry align="left">mtu</entry><entry align="left">MTU</entry><entry align="left"/><entry align="left">MTU of the interface.</entry></row><row><entry align="left">transport-mode</entry><entry align="left">CONNECTED_MODE</entry><entry align="left">CONNECTED_MODE=no</entry><entry align="left">CONNECTED_MODE=yes for "connected" mode, CONNECTED_MODE=no for "datagram" mode</entry></row><row><entry align="left">p-key</entry><entry align="left">PKEY_ID (and PKEY=yes)</entry><entry align="left">PKEY=no</entry><entry align="left">InfiniBand P_Key. The value can be a hex number prefixed with "0x" or a decimal number. When PKEY_ID is specified, PHYSDEV and DEVICE also must be specified.<emphasis role="bold">
+
+Example: </emphasis>PKEY=yes PKEY_ID=2 PHYSDEV=mlx4_ib0 DEVICE=mlx4_ib0.8002</entry></row><row><entry align="left">parent</entry><entry align="left">PHYSDEV (PKEY=yes)</entry><entry align="left">PKEY=no</entry><entry align="left">InfiniBand parent device.<emphasis role="bold">
+
+Example: </emphasis>PHYSDEV=ib0</entry></row></tbody></tgroup></table><table><title>ipv4 setting</title><tgroup cols="4"><thead><row><entry>Property</entry><entry>Ifcfg-rh Variable</entry><entry>Default</entry><entry>Description</entry></row></thead><tbody><row><entry align="left">method</entry><entry align="left">BOOTPROTO</entry><entry align="left">none</entry><entry align="left">Method used for IPv4 protocol configuration.<emphasis role="bold">
+
+Allowed values: </emphasis>none, dhcp (bootp), static, ibft, autoip, shared</entry></row><row><entry align="left">dns</entry><entry align="left">DNS1, DNS2, ...</entry><entry align="left"/><entry align="left">List of DNS servers. Even if NetworkManager supports many DNS servers, initscripts and resolver only care about the first three, usually.<emphasis role="bold">
+
+Example: </emphasis>DNS1=1.2.3.4 DNS2=10.0.0.254 DNS3=8.8.8.8</entry></row><row><entry align="left">dns-search</entry><entry align="left">DOMAIN</entry><entry align="left"/><entry align="left">List of DNS search domains.</entry></row><row><entry align="left">addresses</entry><entry align="left">IPADDR, PREFIX, IPADDR1, PREFIX1, ...</entry><entry align="left"/><entry align="left">List of static IP addresses.<emphasis role="bold">
+
+Example: </emphasis>IPADDR=10.5.5.23 PREFIX=24 IPADDR1=1.1.1.2 PREFIX1=16</entry></row><row><entry align="left">gateway</entry><entry align="left">GATEWAY</entry><entry align="left"/><entry align="left">Gateway IP address.<emphasis role="bold">
+
+Example: </emphasis>GATEWAY=10.5.5.1</entry></row><row><entry align="left">routes</entry><entry align="left">ADDRESS1, NETMASK1, GATEWAY1, METRIC1, ...</entry><entry align="left"/><entry align="left">List of static routes. They are not stored in ifcfg-* file, but in route-* file instead.</entry></row><row><entry align="left">ignore-auto-routes</entry><entry align="left">PEERROUTES<emphasis>(+)</emphasis></entry><entry align="left">yes</entry><entry align="left">PEERROUTES has the opposite meaning as 'ignore-auto-routes' property.</entry></row><row><entry align="left">ignore-auto-dns</entry><entry align="left">PEERDNS</entry><entry align="left">yes</entry><entry align="left">PEERDNS has the opposite meaning as 'ignore-auto-dns' property.</entry></row><row><entry align="left">dhcp-send-hostname</entry><entry align="left">DHCP_SEND_HOSTNAME<emphasis>(+)</emphasis></entry><entry align="left">yes</entry><entry align="left">Whether DHCP_HOSTNAME should be sent to the DHCP server.</entry></row><row><entry align="left">dhcp-hostname</entry><entry align="left">DHCP_HOSTNAME</entry><entry align="left"/><entry align="left">Hostname to send to the DHCP server.</entry></row><row><entry align="left">never-default</entry><entry align="left">DEFROUTE (GATEWAYDEV in /etc/sysconfig/network)</entry><entry align="left">yes</entry><entry align="left">DEFROUTE=no tells NetworkManager that this connection should not be assigned the default route. DEFROUTE has the opposite meaning as 'never-default' property.</entry></row><row><entry align="left">may-fail</entry><entry align="left">IPV4_FAILURE_FATAL<emphasis>(+)</emphasis></entry><entry align="left">no</entry><entry align="left">IPV4_FAILURE_FATAL has the opposite meaning as 'may-fail' property.</entry></row><row><entry align="left">dhcp-client-id</entry><entry align="left">DHCP_CLIENT_ID<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">A string sent to the DHCP server to identify the local machine.<emphasis role="bold">
+
+Example: </emphasis>DHCP_CLIENT_ID=ax-srv-1</entry></row></tbody></tgroup></table><table><title>ipv6 setting</title><tgroup cols="4"><thead><row><entry>Property</entry><entry>Ifcfg-rh Variable</entry><entry>Default</entry><entry>Description</entry></row></thead><tbody><row><entry align="left">method</entry><entry align="left">IPV6INIT, IPV6FORWARDING, IPV6_AUTOCONF, DHCPV6C</entry><entry align="left">IPV6INIT=yes; IPV6FORWARDING=no; IPV6_AUTOCONF=!IPV6FORWARDING, DHCPV6=no</entry><entry align="left">Method used for IPv6 protocol configuration. ignore ~ IPV6INIT=no; auto ~ IPV6_AUTOCONF=yes; dhcp ~ IPV6_AUTOCONF=no and DHCPV6C=yes</entry></row><row><entry align="left">dns</entry><entry align="left">DNS1, DNS2, ...</entry><entry align="left"/><entry align="left">List of DNS servers. NetworkManager uses the variables both for IPv4 and IPv6.</entry></row><row><entry align="left">dns-search</entry><entry align="left">DOMAIN</entry><entry align="left"/><entry align="left">List of DNS search domains.</entry></row><row><entry align="left">addresses</entry><entry align="left">IPV6ADDR, IPV6ADDR_SECONDARIES</entry><entry align="left"/><entry align="left">List of static IP addresses.<emphasis role="bold">
+
+Example: </emphasis>IPV6ADDR=ab12:9876::1 IPV6ADDR_SECONDARIES="ab12:9876::2 ab12:9876::3"</entry></row><row><entry align="left">gateway</entry><entry align="left">IPV6_DEFAULTGW</entry><entry align="left"/><entry align="left">Gateway IP address.<emphasis role="bold">
+
+Example: </emphasis>IPV6_DEFAULTGW=abbe::1</entry></row><row><entry align="left">routes</entry><entry align="left">(none)</entry><entry align="left"/><entry align="left">List of static routes. They are not stored in ifcfg-* file, but in route6-* file instead in the form of command line for 'ip route add'.</entry></row><row><entry align="left">ignore-auto-routes</entry><entry align="left">IPV6_PEERROUTES<emphasis>(+)</emphasis></entry><entry align="left">yes</entry><entry align="left">IPV6_PEERROUTES has the opposite meaning as 'ignore-auto-routes' property.</entry></row><row><entry align="left">ignore-auto-dns</entry><entry align="left">IPV6_PEERDNS<emphasis>(+)</emphasis></entry><entry align="left">yes</entry><entry align="left">IPV6_PEERDNS has the opposite meaning as 'ignore-auto-dns' property.</entry></row><row><entry align="left">dhcp-hostname</entry><entry align="left">DHCP_HOSTNAME</entry><entry align="left"/><entry align="left">Hostname to send the DHCP server.</entry></row><row><entry align="left">never-default</entry><entry align="left">IPV6_DEFROUTE<emphasis>(+)</emphasis>, (and IPV6_DEFAULTGW, IPV6_DEFAULTDEV in /etc/sysconfig/network)</entry><entry align="left">IPV6_DEFROUTE=yes (when no variable specified)</entry><entry align="left">IPV6_DEFROUTE=no tells NetworkManager that this connection should not be assigned the default IPv6 route. IPV6_DEFROUTE has the opposite meaning as 'never-default' property.</entry></row><row><entry align="left">may-fail</entry><entry align="left">IPV6_FAILURE_FATAL<emphasis>(+)</emphasis></entry><entry align="left">no</entry><entry align="left">IPV6_FAILURE_FATAL has the opposite meaning as 'may-fail' property.</entry></row><row><entry align="left">ip6-privacy</entry><entry align="left">IPV6_PRIVACY, IPV6_PRIVACY_PREFER_PUBLIC_IP<emphasis>(+)</emphasis></entry><entry align="left">no</entry><entry align="left">Configure IPv6 Privacy Extensions for SLAAC (RFC4941).<emphasis role="bold">
+
+Example: </emphasis>IPV6_PRIVACY=rfc3041 IPV6_PRIVACY_PREFER_PUBLIC_IP=yes<emphasis role="bold">
+
+Allowed values: </emphasis>IPV6_PRIVACY: no, yes (rfc3041 or rfc4941); IPV6_PRIVACY_PREFER_PUBLIC_IP: yes, no</entry></row></tbody></tgroup></table><table><title>team-port setting</title><tgroup cols="4"><thead><row><entry>Property</entry><entry>Ifcfg-rh Variable</entry><entry>Default</entry><entry>Description</entry></row></thead><tbody><row><entry align="left">config</entry><entry align="left">TEAM_PORT_CONFIG</entry><entry align="left"/><entry align="left">Team port configuration in JSON. See man teamd.conf for details.</entry></row></tbody></tgroup></table><table><title>team setting</title><tgroup cols="4"><thead><row><entry>Property</entry><entry>Ifcfg-rh Variable</entry><entry>Default</entry><entry>Description</entry></row></thead><tbody><row><entry align="left">config</entry><entry align="left">TEAM_CONFIG</entry><entry align="left"/><entry align="left">Team configuration in JSON. See man teamd.conf for details.</entry></row></tbody></tgroup></table><table><title>vlan setting</title><tgroup cols="4"><thead><row><entry>Property</entry><entry>Ifcfg-rh Variable</entry><entry>Default</entry><entry>Description</entry></row></thead><tbody><row><entry align="left">parent</entry><entry align="left">DEVICE or PHYSDEV</entry><entry align="left"/><entry align="left">Parent interface of the VLAN.</entry></row><row><entry align="left">id</entry><entry align="left">VLAN_ID or DEVICE</entry><entry align="left"/><entry align="left">VLAN identifier.</entry></row><row><entry align="left">flags</entry><entry align="left">VLAN_FLAGS, REORDER_HDR</entry><entry align="left"/><entry align="left">Parent interface of the VLAN.<emphasis role="bold">
+
+Allowed values: </emphasis>"GVRP", "LOOSE_BINDING" for VLAN_FLAGS; 0 or 1 for REORDER_HDR</entry></row><row><entry align="left">ingress-property-map</entry><entry align="left">VLAN_INGRESS_PRIORITY_MAP</entry><entry align="left"/><entry align="left">Ingress priority mapping.<emphasis role="bold">
+
+Example: </emphasis>VLAN_INGRESS_PRIORITY_MAP=4:2,3:5</entry></row><row><entry align="left">egress-property-map</entry><entry align="left">VLAN_EGRESS_PRIORITY_MAP</entry><entry align="left"/><entry align="left">Egress priority mapping.<emphasis role="bold">
+
+Example: </emphasis>VLAN_EGRESS_PRIORITY_MAP=5:4,4:1,3:7</entry></row><row><entry align="left">interface-name</entry><entry align="left">PHYSDEV and VLAN_ID, or DEVICE</entry><entry align="left"/><entry align="left">VLAN interface name. If all variables are set, parent device from PHYSDEV takes precedence over DEVICE, but VLAN id from DEVICE takes precedence over VLAN_ID.<emphasis role="bold">
+
+Example: </emphasis>PHYSDEV=eth0, VLAN_ID=12; or DEVICE=eth0.12</entry></row></tbody></tgroup></table><table><title>802-3-ethernet setting</title><tgroup cols="4"><thead><row><entry>Property</entry><entry>Ifcfg-rh Variable</entry><entry>Default</entry><entry>Description</entry></row></thead><tbody><row><entry align="left">port</entry><entry align="left">(none)</entry><entry align="left"/><entry align="left">The property is not saved by the plugin.</entry></row><row><entry align="left">speed</entry><entry align="left">(none)</entry><entry align="left"/><entry align="left">The property is not saved by the plugin.</entry></row><row><entry align="left">duplex</entry><entry align="left">(none)</entry><entry align="left"/><entry align="left">The property is not saved by the plugin.</entry></row><row><entry align="left">auto-negotiate</entry><entry align="left">(none)</entry><entry align="left"/><entry align="left">The property is not saved by the plugin.</entry></row><row><entry align="left">mac-address</entry><entry align="left">HWADDR</entry><entry align="left"/><entry align="left">Hardware address of the device in traditional hex-digits-and-colons notation (e.g. 00:22:68:14:5A:05).</entry></row><row><entry align="left">cloned-mac-address</entry><entry align="left">MACADDR</entry><entry align="left"/><entry align="left">Cloned (spoofed) MAC address in traditional hex-digits-and-colons notation (e.g. 00:22:68:14:5A:99).</entry></row><row><entry align="left">mac-address-blacklist</entry><entry align="left">HWADDR_BLACKLIST<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">It denies usage of the connection for any device whose address is listed.<emphasis role="bold">
+
+Example: </emphasis>HWADDR_BLACKLIST="00:22:68:11:69:08 00:11:22:11:44:55"</entry></row><row><entry align="left">mtu</entry><entry align="left">MTU</entry><entry align="left"/><entry align="left">MTU of the interface.</entry></row><row><entry align="left">s390-subchannels</entry><entry align="left">SUBCHANNELS</entry><entry align="left"/><entry align="left">Subchannels for IBM S390 hosts.<emphasis role="bold">
+
+Example: </emphasis>SUBCHANNELS=0.0.b00a,0.0.b00b,0.0.b00c</entry></row><row><entry align="left">s390-nettype</entry><entry align="left">NETTYPE</entry><entry align="left"/><entry align="left">Network type of the S390 host.<emphasis role="bold">
+
+Example: </emphasis>NETTYPE=qeth<emphasis role="bold">
+
+Allowed values: </emphasis>"qeth", "lcs" or "ctc"</entry></row><row><entry align="left">s390-options</entry><entry align="left">OPTIONS and PORTNAME, CTCPROTO,</entry><entry align="left"/><entry align="left">S390 device options. All options go to OPTIONS, except for "portname" and "ctcprot" that have their own variables.</entry></row></tbody></tgroup></table><table><title>802-11-wireless-security setting</title><tgroup cols="4"><thead><row><entry>Property</entry><entry>Ifcfg-rh Variable</entry><entry>Default</entry><entry>Description</entry></row></thead><tbody><row><entry align="left">key-mgmt</entry><entry align="left">KEY_MGMT<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">Key management menthod.<emphasis role="bold">
+
+Allowed values: </emphasis>IEEE8021X, WPA-PSK, WPA-EAP</entry></row><row><entry align="left">wep-tx-keyidx</entry><entry align="left">DEFAULTKEY</entry><entry align="left">1</entry><entry align="left">Index of active WEP key.<emphasis role="bold">
+
+Allowed values: </emphasis>1, 2, 3, 4</entry></row><row><entry align="left">auth-alg</entry><entry align="left">SECURITYMODE<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">Authentication algorithm for WEP.<emphasis role="bold">
+
+Allowed values: </emphasis>restricted, open, leap</entry></row><row><entry align="left">proto</entry><entry align="left">WPA_ALLOW_WPA<emphasis>(+)</emphasis>, WPA_ALLOW_WPA2<emphasis>(+)</emphasis></entry><entry align="left">no</entry><entry align="left">Allowed WPA protocols, WPA and WPA2 (RSN).<emphasis role="bold">
+
+Allowed values: </emphasis>yes, no</entry></row><row><entry align="left">pairwise</entry><entry align="left">CIPHER_PAIRWISE<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">Restrict pairwise encryption algorithms, specified as a space separated list.<emphasis role="bold">
+
+Allowed values: </emphasis>CCMP, TKIP</entry></row><row><entry align="left">group</entry><entry align="left">CIPHER_GROUP<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">Restrict group/broadcast encryption algorithms, specified as a space separated list.<emphasis role="bold">
+
+Allowed values: </emphasis>CCMP, TKIP, WEP40, WEP104</entry></row><row><entry align="left">leap-username</entry><entry align="left">IEEE_8021X_IDENTITY<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">Login name for LEAP.</entry></row><row><entry align="left">wep-key0</entry><entry align="left">KEY1, KEY_PASSPHRASE1<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">The first WEP key (used in most networks). See also DEFAULTKEY for key index.</entry></row><row><entry align="left">wep-key1</entry><entry align="left">KEY2, KEY_PASSPHRASE2<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">WEP key with index 1. See also DEFAULTKEY for key index.</entry></row><row><entry align="left">wep-key2</entry><entry align="left">KEY3, KEY_PASSPHRASE3<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">WEP key with index 2. See also DEFAULTKEY for key index.</entry></row><row><entry align="left">wep-key3</entry><entry align="left">KEY4, KEY_PASSPHRASE4<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">WEP key with index 3. See also DEFAULTKEY for key index.</entry></row><row><entry align="left">wep-key-flags</entry><entry align="left">WEP_KEY_FLAGS<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">Password flags for KEY&lt;i&gt;, KEY_PASSPHRASE&lt;i&gt; password. (see <xref linkend="secrets-flags"/> for _FLAGS values)</entry></row><row><entry align="left">psk</entry><entry align="left">WPA_PSK</entry><entry align="left"/><entry align="left">Pre-Shared-Key for WPA networks.</entry></row><row><entry align="left">psk-flags</entry><entry align="left">WPA_PSK_FLAGS<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">Password flags for WPA_PSK_FLAGS. (see <xref linkend="secrets-flags"/> for _FLAGS values)<emphasis role="bold">
+
+Example: </emphasis>WPA_PSK_FLAGS=user</entry></row><row><entry align="left">leap-password</entry><entry align="left">IEEE_8021X_PASSWORD<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">Password for LEAP. It can also go to "key-" lookaside file, or it can be owned by a secret agent.</entry></row><row><entry align="left">leap-password-flags</entry><entry align="left">IEEE_8021X_PASSWORD_FLAGS<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">Password flags for IEEE_8021X_PASSWORD_FLAGS. (see <xref linkend="secrets-flags"/> for _FLAGS values)</entry></row><row><entry align="left">wep-key-type</entry><entry align="left">KEY&lt;i&gt; or KEY_PASSPHRASE&lt;i&gt;<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">KEY is used for "key" type (10 or 26 hexadecimal characters, or 5 or 13 character string prefixed with "s:"). KEY_PASSPHRASE is used for WEP passphrases.<emphasis role="bold">
+
+Example: </emphasis>KEY1=s:ahoj, KEY1=0a1c45bc02, KEY_PASSPHRASE1=mysupersecretkey</entry></row></tbody></tgroup></table><table><title>802-11-wireless setting</title><tgroup cols="4"><thead><row><entry>Property</entry><entry>Ifcfg-rh Variable</entry><entry>Default</entry><entry>Description</entry></row></thead><tbody><row><entry align="left">ssid</entry><entry align="left">ESSID</entry><entry align="left"/><entry align="left">SSID of Wi-Fi network.<emphasis role="bold">
+
+Example: </emphasis>ESSID="Quick Net"</entry></row><row><entry align="left">mode</entry><entry align="left">MODE</entry><entry align="left"/><entry align="left">Wi-Fi network mode.<emphasis role="bold">
+
+Allowed values: </emphasis>Ad-Hoc, Managed (Auto) [case insensitive]</entry></row><row><entry align="left">band</entry><entry align="left">BAND<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">BAND alone is honored, but CHANNEL overrides BAND since it implies a band.<emphasis role="bold">
+
+Example: </emphasis>BAND=bg<emphasis role="bold">
+
+Allowed values: </emphasis>a, bg</entry></row><row><entry align="left">channel</entry><entry align="left">CHANNEL</entry><entry align="left"/><entry align="left">Channel used for the Wi-Fi communication. Channels greater than 14 mean "a" band, otherwise the band is "bg".<emphasis role="bold">
+
+Example: </emphasis>CHANNEL=6</entry></row><row><entry align="left">bssid</entry><entry align="left">BSSID<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">Restricts association only to a single AP.<emphasis role="bold">
+
+Example: </emphasis>BSSID=00:1E:BD:64:83:21</entry></row><row><entry align="left">rate</entry><entry align="left">(none)</entry><entry align="left"/><entry align="left">This property is not handled by ifcfg-rh plugin.</entry></row><row><entry align="left">tx-power</entry><entry align="left">(none)</entry><entry align="left"/><entry align="left">This property is not handled by ifcfg-rh plugin.</entry></row><row><entry align="left">mac-address</entry><entry align="left">HWADDR</entry><entry align="left"/><entry align="left">Hardware address of the device in traditional hex-digits-and-colons notation (e.g. 00:22:68:14:5A:05).</entry></row><row><entry align="left">cloned-mac-address</entry><entry align="left">MACADDR</entry><entry align="left"/><entry align="left">Cloned (spoofed) MAC address in traditional hex-digits-and-colons notation (e.g. 00:22:68:14:5A:99).</entry></row><row><entry align="left">mac-address-blacklist</entry><entry align="left">HWADDR_BLACKLIST<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">It denies usage of the connection for any device whose address is listed.</entry></row><row><entry align="left">seen-bssids</entry><entry align="left">(none)</entry><entry align="left"/><entry align="left">This property is not handled by ifcfg-rh plugin.</entry></row><row><entry align="left">mtu</entry><entry align="left">MTU</entry><entry align="left"/><entry align="left">MTU of the wireless interface.</entry></row><row><entry align="left">hidden</entry><entry align="left">SSID_HIDDEN<emphasis>(+)</emphasis></entry><entry align="left"/><entry align="left">Whether the network hides the SSID.</entry></row><row><entry align="left">security</entry><entry align="left">(none)</entry><entry align="left"/><entry align="left">This property is deprecated and not handled by ifcfg-rh-plugin.</entry></row></tbody></tgroup></table><para>The following settings are not supported by <emphasis>ifcfg-rh</emphasis> plugin:</para><para>adsl, bluetooth, ppp, pppoe, serial, generic, gsm, cdma, 802-11-olpc-mesh, wimax, vpn</para><refsect2 id="secrets-flags"><title>Secret flags</title><para>
+ Each secret property in a NetworkManager setting has an associated
+ <emphasis>flags</emphasis> property that describes how to handle that secret.
+ In the <emphasis>fcfg-rh</emphasis> plugin variables for secret flags have a
+ <emphasis>_FLAGS</emphasis> suffix. The variables contain one or more of the
+ folowing values (space separated). Missing (or empty) *_FLAGS variable means
+ that the password is owned by NetworkManager.
+ </para><itemizedlist><listitem><para><literal>user</literal> - a user-session secret agent is responsible for providing
+ and storing this secret; when it is required, agents will be asked to provide it.</para></listitem><listitem><para><literal>ask</literal> - the associated password is not saved but it will be
+ requested from the user each time it is required.</para></listitem><listitem><para><literal>unused</literal> - 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.</para></listitem></itemizedlist></refsect2></refsect1><refsect1><title>AUTHOR</title><para><author><firstname>NetworkManager developers</firstname></author></para></refsect1><refsect1><title>FILES</title><para><filename>/etc/sysconfig/network-scripts/ifcfg-*</filename></para><para><filename>/etc/sysconfig/network-scripts/keys-*</filename></para><para><filename>/etc/sysconfig/network-scripts/route-*</filename></para><para><filename>/etc/sysconfig/network-scripts/route6-*</filename></para><para><filename>/usr/share/doc/initscripts/sysconfig.txt</filename></para></refsect1><refsect1><title>SEE ALSO</title><para>https://developer.gnome.org/NetworkManager/unstable/ref-settings.html</para><para>nm-settings(5), nm-settings-keyfile(5), NetworkManager(8), NetworkManager.conf(5), nmcli(1), nmcli-examples(5)</para></refsect1></refentry>
diff --git a/man/nm-settings-ifcfg-rh.xsl b/man/nm-settings-ifcfg-rh.xsl
new file mode 100644
index 000000000..f76dee759
--- /dev/null
+++ b/man/nm-settings-ifcfg-rh.xsl
@@ -0,0 +1,405 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+ <!-- We need to strip whitespaces so that position() function counts correctly.
+ http://www.oxygenxml.com/archives/xsl-list/200305/msg00430.html -->
+ <xsl:strip-space elements="nm-ifcfg-rh-docs setting" />
+
+ <xsl:output
+ method="xml"
+ doctype-public="-//OASIS//DTD DocBook XML V4.3//EN"
+ doctype-system="http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"
+ />
+
+ <xsl:param name="date"/>
+ <xsl:param name="version"/>
+
+ <xsl:template match="nm-ifcfg-rh-docs">
+ <xsl:variable name="unsupported" select="'adsl, bluetooth, ppp, pppoe, serial, generic, gsm, cdma, 802-11-olpc-mesh, wimax, vpn'"/>
+ <refentry id="nm-settings-ifcfg-rh">
+ <refentryinfo>
+ <date><xsl:value-of select="$date"/></date>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>nm-settings-ifcfg-rh</refentrytitle>
+ <manvolnum>5</manvolnum>
+ <refmiscinfo class="source">NetworkManager</refmiscinfo>
+ <refmiscinfo class="manual">Configuration</refmiscinfo>
+ <refmiscinfo class="version"><xsl:value-of select="$version"/></refmiscinfo>
+ </refmeta>
+ <refnamediv>
+ <refname>nm-settings-ifcfg-rh</refname>
+ <refpurpose>Description of <emphasis>ifcfg-rh</emphasis> settings plugin</refpurpose>
+ </refnamediv>
+ <refsect1>
+ <title>DESCRIPTION</title>
+ <para>
+ NetworkManager is based on the concept of connection profiles that contain
+ network configuration (see <citerefentry><refentrytitle>nm-settings</refentrytitle>
+ <manvolnum>5</manvolnum></citerefentry> for details). The profiles can be
+ stored in various formats. NetworkManager uses plugins for reading and writing
+ the data. The plugins can be configured in <citerefentry>
+ <refentrytitle>NetworkManager.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+ </para>
+ <para>
+ The <emphasis>ifcfg-rh</emphasis> plugin is used on the Fedora and Red Hat
+ Enterprise Linux distributions to read/write configuration from/to
+ the standard <filename>/etc/sysconfig/network-scripts/ifcfg-*</filename> files.
+ Each NetworkManager connection maps to one <filename>ifcfg-*</filename> file, with
+ possible usage of <filename>keys-*</filename> for passwords, <filename>route-*</filename>
+ for static IPv4 routes and <filename>route6-*</filename> for static IPv6 routes.
+ The plugin currently supports reading and writing Ethernet, Wi-Fi, InfiniBand,
+ VLAN, Bond, Bridge, and Team connections. Unsupported connection types (such as
+ WWAN, PPPoE, VPN, or ADSL are handled by <emphasis>keyfile</emphasis> plugin
+ (<citerefentry><refentrytitle>nm-settings-keyfile</refentrytitle><manvolnum>5</manvolnum></citerefentry>).
+ The main reason for using <emphasis>ifcfg-rh</emphasis> plugin is the compatibility
+ with legacy configurations for <emphasis>ifup</emphasis> and <emphasis>ifdown</emphasis>
+ (initscripts).
+ </para>
+ </refsect1>
+ <refsect1>
+ <title>File Format</title>
+ <para>
+ The <emphasis>ifcfg-rh</emphasis> config format is a simple text file containing
+ VARIABLE="value" lines. The format is described in <filename>sysconfig.txt</filename>
+ of <emphasis>initscripts</emphasis> package. Note that the configuration files
+ may be sourced by <emphasis>initscripts</emphasis>, so they must be valid shell
+ scripts. That means, for instance, that <literal>#</literal> character can be used
+ for comments, strings with spaces must be quoted, special characters must be escaped,
+ etc.
+ </para>
+ <para>
+ Users can create or modify the <emphasis>ifcfg-rh</emphasis> connection files
+ manually, even if that is not the recommended way of managing the profiles.
+ However, if they choose to do that, they must inform NetworkManager about
+ their changes (see <emphasis>monitor-connection-file</emphasis> in
+ <citerefentry><refentrytitle>nm-settings</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>, and <emphasis>nmcli con (re)load</emphasis>).
+ </para>
+ <formalpara>
+ <title>Some <emphasis>ifcfg-rh</emphasis> configuration examples:</title>
+ <para>
+ <programlisting>
+ <emphasis role="bold">Simple DHCP ethernet configuration:</emphasis>
+NAME=ethernet
+UUID=1c4ddf70-01bf-46d6-b04f-47e842bd98da
+TYPE=Ethernet
+BOOTPROTO=dhcp
+DEFROUTE=yes
+PEERDNS=yes
+PEERROUTES=yes
+IPV4_FAILURE_FATAL=no
+ONBOOT=yes
+ </programlisting>
+ </para>
+ <para>
+ <programlisting>
+ <emphasis role="bold">Simple ethernet configuration with static IP:</emphasis>
+TYPE=Ethernet
+BOOTPROTO=none
+IPADDR=10.1.0.25
+PREFIX=24
+GATEWAY=10.1.0.1
+DEFROUTE=yes
+IPV4_FAILURE_FATAL=no
+IPV6INIT=yes
+IPV6_AUTOCONF=yes
+IPV6_DEFROUTE=yes
+IPV6_PEERDNS=yes
+IPV6_PEERROUTES=yes
+IPV6_FAILURE_FATAL=no
+NAME=ethernet-em2
+UUID=51bb3904-c0fc-4dfe-83b2-0a71e7928c13
+DEVICE=em2
+ONBOOT=yes
+ </programlisting>
+ </para>
+ <para>
+ <programlisting>
+ <emphasis role="bold">WPA2 Enterprise WLAN (TTLS with inner MSCHAPV2 authentication):</emphasis>
+ESSID="CompanyWLAN"
+MODE=Managed
+KEY_MGMT=WPA-EAP
+TYPE=Wireless
+IEEE_8021X_EAP_METHODS=TTLS
+IEEE_8021X_IDENTITY=joe
+IEEE_8021X_PASSWORD_FLAGS=ask
+IEEE_8021X_INNER_AUTH_METHODS=MSCHAPV2
+IEEE_8021X_CA_CERT=/home/joe/.cert/company.crt
+BOOTPROTO=dhcp
+DEFROUTE=yes
+PEERDNS=yes
+PEERROUTES=yes
+IPV4_FAILURE_FATAL=no
+IPV6INIT=no
+NAME=MyCompany
+UUID=f79848ff-11a6-4810-9e1a-99039dea84c4
+ONBOOT=yes
+ </programlisting>
+ </para>
+ <para>
+ <programlisting>
+ <emphasis role="bold">Bridge and bridge port configuration:</emphasis>
+ifcfg-bridge: ifcfg-bridge-port:
+NAME=bridge NAME=bridge007-port-eth0
+UUID=4be99ce0-c5b2-4764-8b77-ec226e440125 UUID=3ad56c4a-47e1-419b-b0d4-8ad86eb967a3
+DEVICE=bridge007 DEVICE=eth0
+STP=yes ONBOOT=yes
+TYPE=Bridge TYPE=Ethernet
+BRIDGING_OPTS=priority=32768 BRIDGE=bridge007
+ONBOOT=yes
+BOOTPROTO=dhcp
+
+ </programlisting>
+ </para>
+ <para>
+ <programlisting>
+ <emphasis role="bold">Bonding configuration:</emphasis>
+ifcfg-BOND: ifcfg-BOND-slave:
+NAME=BOND NAME=BOND-slave
+UUID=b41888aa-924c-450c-b0f8-85a4f0a51b4a UUID=9bb048e4-286a-4cc3-b104-007dbd20decb
+DEVICE=bond100 DEVICE=eth0
+BONDING_OPTS="mode=balance-rr miimon=100" ONBOOT=yes
+TYPE=Bond TYPE=Ethernet
+BONDING_MASTER=yes MASTER=bond100
+ONBOOT=yes SLAVE=yes
+BOOTPROTO=dhcp
+
+ </programlisting>
+ </para>
+ <para>
+ <programlisting>
+ <emphasis role="bold">Team and team port configuration:</emphasis>
+ifcfg-my_team0:
+DEVICE=team0
+TEAM_CONFIG="{ \"device\": \"team0\", \"runner\": {\"name\": \"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }"
+DEVICETYPE=Team
+BOOTPROTO=dhcp
+NAME=team0-profile
+UUID=1d3460a0-7b37-457f-a300-fe8d92da4807
+ONBOOT=yes
+
+ifcfg-my_team0_slave1:
+NAME=team0-slave1
+UUID=d5aed298-c567-4cc1-b808-6d38ecef9e64
+DEVICE=eth1
+ONBOOT=yes
+TEAM_MASTER=team0
+DEVICETYPE=TeamPort
+
+ifcfg-my_team0_slave2:
+NAME=team0-slave2
+UUID=94e75f4e-e5ad-401c-8962-31e0ae5d2215
+DEVICE=eth2
+ONBOOT=yes
+TEAM_MASTER=team0
+DEVICETYPE=TeamPort
+ </programlisting>
+ </para>
+ <para>
+ The UUID values in the config files must be unique. You can use <emphasis>uuidgen</emphasis>
+ command line tool to generate such values. Alternatively, you can leave out UUID
+ entirely. In that case NetworkManager will generate a UUID based on the file name.
+ </para>
+ </formalpara>
+ </refsect1>
+
+ <refsect1>
+ <title>Differences against initscripts</title>
+ <para>
+ The main differences of NetworkManager ifcfg-rh plugin and traditional
+ initscripts are:
+ <variablelist class="NM-initscripts-differences">
+ <varlistentry>
+ <term><emphasis role="bold">NM_CONTROLLED=yes|no</emphasis></term>
+ <listitem><para>
+ NM_CONTROLLED is NetworkManager-specific variable used by NetworkManager
+ for determining whether the device of the <emphasis>ifcfg</emphasis> file
+ should be managed. NM_CONTROLLED=yes is supposed if the variable is not
+ present in the file.
+ Note that if you have more <emphasis>ifcfg</emphasis> files for a single
+ device, NM_CONTROLLED=no in one of the files will cause the device not
+ to be managed. The profile may not even be the active one.
+ </para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><emphasis role="bold">New variables</emphasis></term>
+ <listitem><para>
+ NetworkManager has introduced some new variable, not present in initscripts,
+ to be able to store data for its new features. The variables are marked
+ as extensions in the tables bellows.
+ </para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><emphasis role="bold">Semantic change of variables</emphasis></term>
+ <listitem><para>
+ NetworkManager had to slightly change the semantic for a few variables.
+ <itemizedlist>
+ <listitem>
+ <para><literal>PEERDNS</literal> -
+ initscripts interpret PEERDNS=no to mean "never touch resolv.conf".
+ NetworkManager interprets it to say "never add automatic (DHCP, PPP, VPN, etc.)
+ nameservers to resolv.conf".</para>
+ </listitem>
+ <listitem>
+ <para><literal>ONBOOT</literal> -
+ initscripts use ONBOOT=yes to mark the devices that are to be activated
+ during boot. NetworkManager extents this to also mean that this profile
+ can be used for auto-connecting at any time.</para>
+ </listitem>
+ </itemizedlist>
+ </para></listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ <para>
+ See the next section for detailed mapping of NetworkManager properties and
+ <emphasis>ifcfg-rh</emphasis> variables. Variable names, format and usage
+ differences in NetworkManager and initscripts are documented in the tables bellow.
+ </para>
+ </refsect1>
+
+ <refsect1>
+ <title>DETAILS</title>
+ <para>
+ <emphasis>ifcfg-rh</emphasis> plugin variables marked with <emphasis>(+)</emphasis>
+ are NetworkManager specific extensions not understood by traditional initscripts.
+ </para>
+ <xsl:apply-templates />
+ <refsect2 id="secrets-flags">
+ <title>Secret flags</title>
+ <para>
+ Each secret property in a NetworkManager setting has an associated
+ <emphasis>flags</emphasis> property that describes how to handle that secret.
+ In the <emphasis>fcfg-rh</emphasis> plugin variables for secret flags have a
+ <emphasis>_FLAGS</emphasis> suffix. The variables contain one or more of the
+ folowing values (space separated). Missing (or empty) *_FLAGS variable means
+ that the password is owned by NetworkManager.
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para><literal>user</literal> - a user-session secret agent is responsible for providing
+ and storing this secret; when it is required, agents will be asked to provide it.</para>
+ </listitem>
+ <listitem>
+ <para><literal>ask</literal> - the associated password is not saved but it will be
+ requested from the user each time it is required.</para>
+ </listitem>
+ <listitem>
+ <para><literal>unused</literal> - 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.</para>
+ </listitem>
+ </itemizedlist>
+ </refsect2>
+ </refsect1>
+
+ <refsect1>
+ <title>AUTHOR</title>
+ <para>
+ <author>
+ <firstname>NetworkManager developers</firstname>
+ </author>
+ </para>
+ </refsect1>
+ <refsect1>
+ <title>FILES</title>
+ <para><filename>/etc/sysconfig/network-scripts/ifcfg-*</filename></para>
+ <para><filename>/etc/sysconfig/network-scripts/keys-*</filename></para>
+ <para><filename>/etc/sysconfig/network-scripts/route-*</filename></para>
+ <para><filename>/etc/sysconfig/network-scripts/route6-*</filename></para>
+ <para><filename>/usr/share/doc/initscripts/sysconfig.txt</filename></para>
+ </refsect1>
+ <refsect1>
+ <title>SEE ALSO</title>
+ <para>https://developer.gnome.org/NetworkManager/unstable/ref-settings.html</para>
+ <para>nm-settings(5), nm-settings-keyfile(5), NetworkManager(8), NetworkManager.conf(5), nmcli(1), nmcli-examples(5)</para>
+ </refsect1>
+ </refentry>
+ </xsl:template>
+
+ <xsl:template match="setting">
+ <xsl:variable name="setting_name" select="../@name"/>
+ <xsl:variable name="unsupported" select="'adsl, bluetooth, ppp, pppoe, serial, generic, gsm, cdma, 802-11-olpc-mesh, wimax, vpn'"/>
+ <xsl:if test="not (contains($unsupported, @name))">
+ <table>
+ <title><xsl:value-of select="@name"/> setting</title>
+ <tgroup cols="4">
+ <thead>
+ <row>
+ <entry>Property</entry>
+ <entry>Ifcfg-rh Variable</entry>
+ <entry>Default</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+ <tbody>
+ <xsl:apply-templates/>
+ </tbody>
+ </tgroup>
+ </table>
+ </xsl:if>
+
+ <xsl:if test="@name = 'dcb'">
+ <para>
+ All DCB related configuration is a NetworkManager extention. DCB=yes must be
+ used explicitly to enable DCB so that the rest of the DCB_* variables can apply.
+ </para>
+ </xsl:if>
+
+ <xsl:if test="position() = last()">
+ <para>The following settings are not supported by <emphasis>ifcfg-rh</emphasis> plugin:</para>
+ <para><xsl:value-of select="$unsupported"/></para>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template match="property">
+ <xsl:variable name="setting_name" select="../@name"/>
+
+
+ <row>
+ <entry align="left"><xsl:value-of select="@name"/></entry>
+ <entry align="left">
+ <xsl:call-template name="string-emphasize-all">
+ <xsl:with-param name="text" select="@variable"/>
+ <xsl:with-param name="emphasize" select="'(+)'"/>
+ </xsl:call-template>
+ </entry>
+ <entry align="left"><xsl:value-of select="@default"/></entry>
+ <entry align="left">
+ <xsl:value-of select="@description"/><xsl:if test="@format = 'NMSettingSecretFlags'"> (see <xref linkend="secrets-flags"/> for _FLAGS values)</xsl:if>
+
+ <xsl:if test="string-length(@example)">
+ <emphasis role="bold">
+
+Example: </emphasis><xsl:value-of select="@example"/>
+ </xsl:if>
+ <xsl:if test="string-length(@values)">
+ <emphasis role="bold">
+
+Allowed values: </emphasis><xsl:value-of select="@values"/>
+ </xsl:if>
+ </entry>
+ </row>
+ </xsl:template>
+
+ <xsl:template name="string-emphasize-all">
+ <xsl:param name="text"/>
+ <xsl:param name="emphasize"/>
+ <xsl:choose>
+ <xsl:when test="contains($text, $emphasize)">
+ <xsl:value-of select="substring-before($text,$emphasize)"/>
+ <emphasis><xsl:value-of select="$emphasize"/></emphasis>
+ <xsl:call-template name="string-emphasize-all">
+ <xsl:with-param name="text" select="substring-after($text,$emphasize)"/>
+ <xsl:with-param name="emphasize" select="$emphasize"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$text"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/man/nm-settings-keyfile.5 b/man/nm-settings-keyfile.5
new file mode 100644
index 000000000..53e9165f0
--- /dev/null
+++ b/man/nm-settings-keyfile.5
@@ -0,0 +1,698 @@
+'\" t
+.\" Title: nm-settings-keyfile
+.\" Author: [see the "AUTHOR" section]
+.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
+.\" Date: 19 December 2014
+.\" Manual: Configuration
+.\" Source: NetworkManager 1.0.0
+.\" Language: English
+.\"
+.TH "NM\-SETTINGS\-KEYFIL" "5" "" "NetworkManager 1\&.0\&.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-keyfile \- Description of \fIkeyfile\fR settings plugin
+.SH "DESCRIPTION"
+.PP
+NetworkManager is based on the concept of connection profiles that contain network configuration (see
+\fBnm-settings\fR(5)
+for details)\&. The profiles can be stored in various formats\&. NetworkManager uses plugins for reading and writing the data\&. The plugins can be configured in
+\fBNetworkManager.conf\fR(5)\&.
+.PP
+The
+\fIkeyfile\fR
+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/\&. This plugin is always enabled and will automatically be used to store any connections that are not supported by any other active plugin\&. For security, it will ignore files that are readable or writeable by any user or group other than \*(Aqroot\*(Aq since private keys and passphrases may be stored in plaintext inside the file\&.
+.SH "FILE FORMAT"
+.PP
+The
+\fIkeyfile\fR
+config format is a simple \&.ini\-style format\&. It consists of sections (groups) of key\-value pairs\&. Each section corresponds to a setting name as described in the settings specification (\fBnm-settings\fR(5))\&. Each configuration key/value pair in the section is one of the properties listed in the settings specification\&. The majority of properties of the specification is written in the same format into the
+\fIkeyfile\fR
+too\&. However some values are inconvenient for people to use\&. These are stored in the files in more readable ways\&. These properties are described bellow\&. An example could be IP addresses that are not written as integer arrays, but more reasonably as "1\&.2\&.3\&.4/12 1\&.2\&.3\&.254"\&. More information of the generic key file format can be found at
+\m[blue]\fBGLib key file format\fR\m[]\&\s-2\u[1]\d\s+2
+(Lines beginning with a \*(Aq#\*(Aq are comments, lists are separated by character
+;
+etc\&.)\&.
+.PP
+Users can create or modify the
+\fIkeyfile\fR
+connection files manually, even if that is not the recommended way of managing the profiles\&. However, if they choose to do that, they must inform NetworkManager about their changes (see
+\fImonitor\-connection\-file\fR
+in
+\fBnm-settings\fR(5)
+and
+\fInmcli con (re)load\fR)\&.
+.PP
+\fBExamples of keyfile configuration\fR.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBA sample configuration for an ethernet network:\fR
+[connection]
+id=Main eth0
+uuid=27afa607\-ee36\-43f0\-b8c3\-9d245cdc4bb3
+type=802\-3\-ethernet
+autoconnect=true
+
+[ipv4]
+method=auto
+
+[802\-3\-ethernet]
+mac\-address=00:23:5a:47:1f:71
+
+.fi
+.if n \{\
+.RE
+.\}
+
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBA sample configuration for WPA\-EAP (PEAP with MSCHAPv2) and always\-ask secret:\fR
+[connection]
+id=CompanyWIFI
+uuid=cdac6154\-a33b\-4b15\-9904\-666772cfa5ee
+type=wifi
+autoconnect=false
+
+[wifi]
+ssid=CorpWLAN
+mode=infrastructure
+security=802\-11\-wireless\-security
+
+[wifi\-security]
+key\-mgmt=wpa\-eap
+
+[ipv4]
+method=auto
+
+[ipv6]
+method=auto
+
+[802\-1x]
+eap=peap;
+identity=joe
+ca\-cert=/home/joe/\&.cert/corp\&.crt
+phase1\-peapver=1
+phase2\-auth=mschapv2
+password\-flags=2
+
+.fi
+.if n \{\
+.RE
+.\}
+
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBA sample configuration for openvpn:\fR
+[connection]
+id=RedHat\-openvpn
+uuid=7f9b3356\-b210\-4c0e\-8123\-bd116c9c280f
+type=vpn
+timestamp=1385401165
+
+[vpn]
+service\-type=org\&.freedesktop\&.NetworkManager\&.openvpn
+connection\-type=password
+password\-flags=3
+remote=ovpn\&.my\-company\&.com
+cipher=AES\-256\-CBC
+reneg\-seconds=0
+port=443
+username=joe
+ca=/etc/openvpn/ISCA\&.pem
+tls\-remote=ovpn\&.my\-company\&.com
+
+[ipv6]
+method=auto
+
+[ipv4]
+method=auto
+ignore\-auto\-dns=true
+never\-default=true
+
+.fi
+.if n \{\
+.RE
+.\}
+
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBA sample configuration for a bridge and a bridge port:\fR
+[connection] [connection]
+id=MainBridge id=br\-port\-1
+uuid=171ae855\-a0ab\-42b6\-bd0c\-60f5812eea9d uuid=d6e8ae98\-71f8\-4b3d\-9d2d\-2e26048fe794
+interface\-name=MainBridge interface\-name=em1
+type=bridge type=ethernet
+ master=MainBridge
+[bridge] slave\-type=bridge
+interface\-name=MainBridge
+
+.fi
+.if n \{\
+.RE
+.\}
+
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBA sample configuration for a VLAN:\fR
+[connection]
+id=VLAN for building 4A
+uuid=8ce1c9e0\-ce7a\-4d2c\-aa28\-077dda09dd7e
+interface\-name=VLAN\-4A
+type=vlan
+
+[vlan]
+interface\-name=VLAN\-4A
+parent=eth0
+id=4
+
+.fi
+.if n \{\
+.RE
+.\}
+.SH "DETAILS"
+.PP
+\fIkeyfile\fR
+plugin variables for the majority of NetworkManager properties have one\-to\-one mapping\&. It means a NetworkManager property is stored in the keyfile as a variable of the same name and in the same format\&. There are several exceptions to this rule, mainly for making keyfile syntax easier for humans\&. The exceptions handled specially by
+\fIkeyfile\fR
+plugin are listed bellow\&. Refer to
+\fBnm-settings\fR(5)
+for all available settings and properties and their description\&.
+.PP
+\fBName aliases\fR. Some of the NetworkManager setting names are somewhat hard to type or remember\&. Therefore
+\fIkeyfile\fR
+introduces aliases that can be used instead of the names\&.
+.RS 4
+\fIsetting name keyfile alias\fR
+.RE
+.RS 4
+802\-3\-ethernet = ethernet
+.RE
+.RS 4
+802\-11\-wireless = wifi
+.RE
+.RS 4
+802\-11\-wireless\-security = wifi\-security
+.RE
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&1.\ \&bridge setting (section)
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Property
+T}:T{
+Keyfile Variable
+T}:T{
+Format
+T}:T{
+Description
+T}
+.T&
+l l l l.
+T{
+mac\-address
+T}:T{
+mac\-address
+T}:T{
+ususal hex\-digits\-and\-colons notation
+T}:T{
+MAC address in traditional hex\-digits\-and\-colons notation, or semicolon separated list of 6 decimal bytes (obsolete)\fB
+
+Example: \fRmac\-address=00:22:68:12:79:A2 mac\-address=0;34;104;18;121;162;
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&2.\ \&infiniband setting (section)
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Property
+T}:T{
+Keyfile Variable
+T}:T{
+Format
+T}:T{
+Description
+T}
+.T&
+l l l l.
+T{
+mac\-address
+T}:T{
+mac\-address
+T}:T{
+ususal hex\-digits\-and\-colons notation
+T}:T{
+MAC address in traditional hex\-digits\-and\-colons notation, or or semicolon separated list of 20 decimal bytes (obsolete)\fB
+
+Example: \fRmac\-address= 80:00:00:6d:fe:80:00:00:00:00:00:00:00:02:55:00:70:33:cf:01
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&3.\ \&ipv4 setting (section)
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Property
+T}:T{
+Keyfile Variable
+T}:T{
+Format
+T}:T{
+Description
+T}
+.T&
+l l l l
+l l l l
+l l l l
+l l l l.
+T{
+dns
+T}:T{
+dns
+T}:T{
+list of DNS IP addresses
+T}:T{
+List of DNS servers\&.\fB
+
+Example: \fRdns=1\&.2\&.3\&.4;8\&.8\&.8\&.8;8\&.8\&.4\&.4;
+T}
+T{
+addresses
+T}:T{
+address1, address2, \&.\&.\&.
+T}:T{
+address/plen
+T}:T{
+List of static IP addresses\&.\fB
+
+Example: \fRaddress1=192\&.168\&.100\&.100/24 address2=10\&.1\&.1\&.5/24
+T}
+T{
+gateway
+T}:T{
+gateway
+T}:T{
+string
+T}:T{
+Gateway IP addresses as a string\&.\fB
+
+Example: \fRgateway=192\&.168\&.100\&.1
+T}
+T{
+routes
+T}:T{
+route1, route2, \&.\&.\&.
+T}:T{
+route/plen[,gateway,metric]
+T}:T{
+List of IP routes\&.\fB
+
+Example: \fRroute1=8\&.8\&.8\&.0/24,10\&.1\&.1\&.1,77 route2=7\&.7\&.0\&.0/16
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&4.\ \&ipv6 setting (section)
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Property
+T}:T{
+Keyfile Variable
+T}:T{
+Format
+T}:T{
+Description
+T}
+.T&
+l l l l
+l l l l
+l l l l
+l l l l.
+T{
+dns
+T}:T{
+dns
+T}:T{
+list of DNS IP addresses
+T}:T{
+List of DNS servers\&.\fB
+
+Example: \fRdns=2001:4860:4860::8888;2001:4860:4860::8844;
+T}
+T{
+addresses
+T}:T{
+address1, address2, \&.\&.\&.
+T}:T{
+address/plen
+T}:T{
+List of static IP addresses\&.\fB
+
+Example: \fRaddress1=abbe::cafe/96 address2=2001::1234
+T}
+T{
+gateway
+T}:T{
+gateway
+T}:T{
+string
+T}:T{
+Gateway IP addresses as a string\&.\fB
+
+Example: \fRgateway=abbe::1
+T}
+T{
+routes
+T}:T{
+route1, route2, \&.\&.\&.
+T}:T{
+route/plen[,gateway,metric]
+T}:T{
+List of IP routes\&.\fB
+
+Example: \fRroute1=2001:4860:4860::/64,2620:52:0:2219:222:68ff:fe11:5403
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&5.\ \&serial setting (section)
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Property
+T}:T{
+Keyfile Variable
+T}:T{
+Format
+T}:T{
+Description
+T}
+.T&
+l l l l.
+T{
+parity
+T}:T{
+parity
+T}:T{
+\*(Aqe\*(Aq, \*(Aqo\*(Aq, or \*(Aqn\*(Aq
+T}:T{
+The connection parity; even, odd, or none\&. Note that older versions of NetworkManager stored this as an integer: 69 (\*(AqE\*(Aq) for even, 111 (\*(Aqo\*(Aq) for odd, or 110 (\*(Aqn\*(Aq) for none\&.\fB
+
+Example: \fRparity=n
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&6.\ \&vpn setting (section)
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Property
+T}:T{
+Keyfile Variable
+T}:T{
+Format
+T}:T{
+Description
+T}
+.T&
+l l l l
+l l l l.
+T{
+data
+T}:T{
+separate variables named after keys of the dictionary
+T}:T{
+\ \&
+T}:T{
+The keys of the data dictionary are used as variable names directly under [vpn] section\&.\fB
+
+Example: \fRremote=ovpn\&.corp\&.com cipher=AES\-256\-CBC username=joe
+T}
+T{
+secrets
+T}:T{
+separate variables named after keys of the dictionary
+T}:T{
+\ \&
+T}:T{
+The keys of the secrets dictionary are used as variable names directly under [vpn\-secrets] section\&.\fB
+
+Example: \fRpassword=Popocatepetl
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&7.\ \&802-3-ethernet setting (section)
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Property
+T}:T{
+Keyfile Variable
+T}:T{
+Format
+T}:T{
+Description
+T}
+.T&
+l l l l
+l l l l
+l l l l.
+T{
+mac\-address
+T}:T{
+mac\-address
+T}:T{
+ususal hex\-digits\-and\-colons notation
+T}:T{
+MAC address in traditional hex\-digits\-and\-colons notation (e\&.g\&. 00:22:68:12:79:A2), or semicolon separated list of 6 bytes (obsolete) (e\&.g\&. 0;34;104;18;121;162)
+T}
+T{
+cloned\-mac\-address
+T}:T{
+cloned\-mac\-address
+T}:T{
+ususal hex\-digits\-and\-colons notation
+T}:T{
+Cloned MAC address in traditional hex\-digits\-and\-colons notation (e\&.g\&. 00:22:68:12:79:B2), or semicolon separated list of 6 bytes (obsolete) (e\&.g\&. 0;34;104;18;121;178)\&.
+T}
+T{
+mac\-address\-blacklist
+T}:T{
+mac\-address\-blacklist
+T}:T{
+list of MACs (separated with semicolons)
+T}:T{
+MAC address blacklist\&.\fB
+
+Example: \fRmac\-address\-blacklist= 00:22:68:12:79:A6;00:22:68:12:79:78
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&8.\ \&802-11-wireless setting (section)
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Property
+T}:T{
+Keyfile Variable
+T}:T{
+Format
+T}:T{
+Description
+T}
+.T&
+l l l l
+l l l l
+l l l l
+l l l l.
+T{
+ssid
+T}:T{
+ssid
+T}:T{
+string (or decimal\-byte list \- obsolete)
+T}:T{
+SSID of Wi\-Fi network\&.\fB
+
+Example: \fRssid=Quick Net
+T}
+T{
+mac\-address
+T}:T{
+mac\-address
+T}:T{
+ususal hex\-digits\-and\-colons notation
+T}:T{
+MAC address in traditional hex\-digits\-and\-colons notation (e\&.g\&. 00:22:68:12:79:A2), or semicolon separated list of 6 bytes (obsolete) (e\&.g\&. 0;34;104;18;121;162)\&.
+T}
+T{
+cloned\-mac\-address
+T}:T{
+cloned\-mac\-address
+T}:T{
+ususal hex\-digits\-and\-colons notation
+T}:T{
+Cloned MAC address in traditional hex\-digits\-and\-colons notation (e\&.g\&. 00:22:68:12:79:B2), or semicolon separated list of 6 bytes (obsolete) (e\&.g\&. 0;34;104;18;121;178)\&.
+T}
+T{
+mac\-address\-blacklist
+T}:T{
+mac\-address\-blacklist
+T}:T{
+list of MACs (separated with semicolons)
+T}:T{
+MAC address blacklist\&.\fB
+
+Example: \fRmac\-address\-blacklist= 00:22:68:12:79:A6;00:22:68:12:79:78
+T}
+.TE
+.sp 1
+.SS "Secret flags"
+.PP
+Each secret property in a NetworkManager setting has an associated
+\fIflags\fR
+property that describes how to handle that secret\&. In the
+\fIkeyfile\fR
+plugin, the value of
+\fI\-flags\fR
+variable is a decimal number (0 \- 7) defined as a sum of the following values:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+0 \- (NM owned) \- 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
+.\}
+1 \- (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
+.\}
+2 \- (not\-saved) \- this secret should not be saved but should be requested from the user each time it is required\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+4 \- (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/*
+.SH "SEE ALSO"
+.PP
+https://developer\&.gnome\&.org/NetworkManager/unstable/ref\-settings\&.html
+.PP
+nm\-settings(5), nm\-settings\-ifcfg\-rh(5), NetworkManager(8), NetworkManager\&.conf(5), nmcli(1), nmcli\-examples(5)
+.SH "NOTES"
+.IP " 1." 4
+GLib key file format
+.RS 4
+\%https://developer.gnome.org/glib/stable/glib-Key-value-file-parser.html#glib-Key-value-file-parser.description
+.RE
diff --git a/man/nm-settings-keyfile.xml b/man/nm-settings-keyfile.xml
new file mode 100644
index 000000000..45bc472b5
--- /dev/null
+++ b/man/nm-settings-keyfile.xml
@@ -0,0 +1,233 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
+<refentry id="nm-settings-keyfile"><refentryinfo><date>19 December 2014</date></refentryinfo><refmeta><refentrytitle>nm-settings-keyfile</refentrytitle><manvolnum>5</manvolnum><refmiscinfo class="source">NetworkManager</refmiscinfo><refmiscinfo class="manual">Configuration</refmiscinfo><refmiscinfo class="version">1.0.0</refmiscinfo></refmeta><refnamediv><refname>nm-settings-keyfile</refname><refpurpose>Description of <emphasis>keyfile</emphasis> settings plugin</refpurpose></refnamediv><refsect1><title>DESCRIPTION</title><para>
+ NetworkManager is based on the concept of connection profiles that contain
+ network configuration (see <citerefentry><refentrytitle>nm-settings</refentrytitle><manvolnum>5</manvolnum></citerefentry> for details). The profiles can be
+ stored in various formats. NetworkManager uses plugins for reading and writing
+ the data. The plugins can be configured in <citerefentry><refentrytitle>NetworkManager.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+ </para><para>
+ The <emphasis>keyfile</emphasis> 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 <filename>/etc/NetworkManager/system-connections/</filename>.
+ This plugin is always enabled and will automatically be used to store
+ any connections that are not supported by any other active plugin.
+ For security, it will ignore files that are readable or writeable by any user
+ or group other than 'root' since private keys and passphrases may be stored
+ in plaintext inside the file.
+ </para></refsect1><refsect1><title>File Format</title><para>
+ The <emphasis>keyfile</emphasis> config format is a simple .ini-style
+ format. It consists of sections (groups) of key-value pairs. Each section
+ corresponds to a setting name as described in the settings specification
+ (<citerefentry><refentrytitle>nm-settings</refentrytitle><manvolnum>5</manvolnum></citerefentry>). Each configuration key/value
+ pair in the section is one of the properties listed in the settings
+ specification. The majority of properties of the specification is written
+ in the same format into the <emphasis>keyfile</emphasis> too. However
+ some values are inconvenient for people to use. These are stored in the
+ files in more readable ways. These properties are described bellow.
+ An example could be IP addresses that are not written as integer arrays,
+ but more reasonably as "1.2.3.4/12 1.2.3.254".
+ More information of the generic key file format can be found at
+ <ulink url="https://developer.gnome.org/glib/stable/glib-Key-value-file-parser.html#glib-Key-value-file-parser.description">
+ GLib key file format</ulink> (Lines beginning with a '#' are comments,
+ lists are separated by character <literal>;</literal> etc.).
+ </para><para>
+ Users can create or modify the <emphasis>keyfile</emphasis> connection files
+ manually, even if that is not the recommended way of managing the profiles.
+ However, if they choose to do that, they must inform NetworkManager about
+ their changes (see <emphasis>monitor-connection-file</emphasis> in
+ <citerefentry><refentrytitle>nm-settings</refentrytitle><manvolnum>5</manvolnum></citerefentry> and <emphasis>nmcli con (re)load</emphasis>).
+ </para><formalpara><title>Examples of <emphasis>keyfile</emphasis> configuration</title><para><programlisting><emphasis role="bold">A sample configuration for an ethernet network:</emphasis>
+[connection]
+id=Main eth0
+uuid=27afa607-ee36-43f0-b8c3-9d245cdc4bb3
+type=802-3-ethernet
+autoconnect=true
+
+[ipv4]
+method=auto
+
+[802-3-ethernet]
+mac-address=00:23:5a:47:1f:71
+ </programlisting></para><para><programlisting><emphasis role="bold">A sample configuration for WPA-EAP (PEAP with MSCHAPv2) and always-ask secret:</emphasis>
+[connection]
+id=CompanyWIFI
+uuid=cdac6154-a33b-4b15-9904-666772cfa5ee
+type=wifi
+autoconnect=false
+
+[wifi]
+ssid=CorpWLAN
+mode=infrastructure
+security=802-11-wireless-security
+
+[wifi-security]
+key-mgmt=wpa-eap
+
+[ipv4]
+method=auto
+
+[ipv6]
+method=auto
+
+[802-1x]
+eap=peap;
+identity=joe
+ca-cert=/home/joe/.cert/corp.crt
+phase1-peapver=1
+phase2-auth=mschapv2
+password-flags=2
+ </programlisting></para><para><programlisting><emphasis role="bold">A sample configuration for openvpn:</emphasis>
+[connection]
+id=RedHat-openvpn
+uuid=7f9b3356-b210-4c0e-8123-bd116c9c280f
+type=vpn
+timestamp=1385401165
+
+[vpn]
+service-type=org.freedesktop.NetworkManager.openvpn
+connection-type=password
+password-flags=3
+remote=ovpn.my-company.com
+cipher=AES-256-CBC
+reneg-seconds=0
+port=443
+username=joe
+ca=/etc/openvpn/ISCA.pem
+tls-remote=ovpn.my-company.com
+
+[ipv6]
+method=auto
+
+[ipv4]
+method=auto
+ignore-auto-dns=true
+never-default=true
+ </programlisting></para><para><programlisting><emphasis role="bold">A sample configuration for a bridge and a bridge port:</emphasis>
+[connection] [connection]
+id=MainBridge id=br-port-1
+uuid=171ae855-a0ab-42b6-bd0c-60f5812eea9d uuid=d6e8ae98-71f8-4b3d-9d2d-2e26048fe794
+interface-name=MainBridge interface-name=em1
+type=bridge type=ethernet
+ master=MainBridge
+[bridge] slave-type=bridge
+interface-name=MainBridge
+ </programlisting></para><para><programlisting><emphasis role="bold">A sample configuration for a VLAN:</emphasis>
+[connection]
+id=VLAN for building 4A
+uuid=8ce1c9e0-ce7a-4d2c-aa28-077dda09dd7e
+interface-name=VLAN-4A
+type=vlan
+
+[vlan]
+interface-name=VLAN-4A
+parent=eth0
+id=4
+ </programlisting></para></formalpara></refsect1><refsect1><title>DETAILS</title><para><emphasis>keyfile</emphasis> plugin variables for the majority of NetworkManager
+ properties have one-to-one mapping. It means a NetworkManager property is stored
+ in the keyfile as a variable of the same name and in the same format.
+ There are several exceptions to this rule, mainly for making keyfile syntax easier
+ for humans. The exceptions handled specially by <emphasis>keyfile</emphasis>
+ plugin are listed bellow. Refer to
+ <citerefentry><refentrytitle>nm-settings</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+ for all available settings and properties and their description.
+ </para><formalpara><title>Name aliases</title><para>
+ Some of the NetworkManager setting names are somewhat hard to type or remember. Therefore
+ <emphasis>keyfile</emphasis> introduces aliases that can be used instead of the names.
+ <simplelist type="horiz" columns="1"><member><emphasis>setting name keyfile alias</emphasis></member><member>802-3-ethernet = ethernet</member><member>802-11-wireless = wifi</member><member>802-11-wireless-security = wifi-security</member></simplelist></para></formalpara>
+
+
+
+
+
+<table><title>bridge setting (section)</title><tgroup cols="4"><thead><row><entry>Property</entry><entry>Keyfile Variable</entry><entry>Format</entry><entry>Description</entry></row></thead><tbody>
+<row><entry align="left">mac-address</entry><entry align="left">mac-address</entry><entry align="left">ususal hex-digits-and-colons notation</entry><entry align="left">MAC address in traditional hex-digits-and-colons notation, or semicolon separated list of 6 decimal bytes (obsolete)<emphasis role="bold">
+
+Example: </emphasis>mac-address=00:22:68:12:79:A2 mac-address=0;34;104;18;121;162;</entry></row>
+</tbody></tgroup></table>
+
+
+
+
+
+<table><title>infiniband setting (section)</title><tgroup cols="4"><thead><row><entry>Property</entry><entry>Keyfile Variable</entry><entry>Format</entry><entry>Description</entry></row></thead><tbody>
+<row><entry align="left">mac-address</entry><entry align="left">mac-address</entry><entry align="left">ususal hex-digits-and-colons notation</entry><entry align="left">MAC address in traditional hex-digits-and-colons notation, or or semicolon separated list of 20 decimal bytes (obsolete)<emphasis role="bold">
+
+Example: </emphasis>mac-address= 80:00:00:6d:fe:80:00:00:00:00:00:00:00:02:55:00:70:33:cf:01</entry></row>
+</tbody></tgroup></table>
+
+<table><title>ipv4 setting (section)</title><tgroup cols="4"><thead><row><entry>Property</entry><entry>Keyfile Variable</entry><entry>Format</entry><entry>Description</entry></row></thead><tbody>
+<row><entry align="left">dns</entry><entry align="left">dns</entry><entry align="left">list of DNS IP addresses</entry><entry align="left">List of DNS servers.<emphasis role="bold">
+
+Example: </emphasis>dns=1.2.3.4;8.8.8.8;8.8.4.4;</entry></row>
+<row><entry align="left">addresses</entry><entry align="left">address1, address2, ...</entry><entry align="left">address/plen</entry><entry align="left">List of static IP addresses.<emphasis role="bold">
+
+Example: </emphasis>address1=192.168.100.100/24 address2=10.1.1.5/24</entry></row>
+<row><entry align="left">gateway</entry><entry align="left">gateway</entry><entry align="left">string</entry><entry align="left">Gateway IP addresses as a string.<emphasis role="bold">
+
+Example: </emphasis>gateway=192.168.100.1</entry></row>
+<row><entry align="left">routes</entry><entry align="left">route1, route2, ...</entry><entry align="left">route/plen[,gateway,metric]</entry><entry align="left">List of IP routes.<emphasis role="bold">
+
+Example: </emphasis>route1=8.8.8.0/24,10.1.1.1,77 route2=7.7.0.0/16</entry></row>
+</tbody></tgroup></table>
+<table><title>ipv6 setting (section)</title><tgroup cols="4"><thead><row><entry>Property</entry><entry>Keyfile Variable</entry><entry>Format</entry><entry>Description</entry></row></thead><tbody>
+<row><entry align="left">dns</entry><entry align="left">dns</entry><entry align="left">list of DNS IP addresses</entry><entry align="left">List of DNS servers.<emphasis role="bold">
+
+Example: </emphasis>dns=2001:4860:4860::8888;2001:4860:4860::8844;</entry></row>
+<row><entry align="left">addresses</entry><entry align="left">address1, address2, ...</entry><entry align="left">address/plen</entry><entry align="left">List of static IP addresses.<emphasis role="bold">
+
+Example: </emphasis>address1=abbe::cafe/96 address2=2001::1234</entry></row>
+<row><entry align="left">gateway</entry><entry align="left">gateway</entry><entry align="left">string</entry><entry align="left">Gateway IP addresses as a string.<emphasis role="bold">
+
+Example: </emphasis>gateway=abbe::1</entry></row>
+<row><entry align="left">routes</entry><entry align="left">route1, route2, ...</entry><entry align="left">route/plen[,gateway,metric]</entry><entry align="left">List of IP routes.<emphasis role="bold">
+
+Example: </emphasis>route1=2001:4860:4860::/64,2620:52:0:2219:222:68ff:fe11:5403</entry></row>
+</tbody></tgroup></table>
+
+
+
+<table><title>serial setting (section)</title><tgroup cols="4"><thead><row><entry>Property</entry><entry>Keyfile Variable</entry><entry>Format</entry><entry>Description</entry></row></thead><tbody>
+<row><entry align="left">parity</entry><entry align="left">parity</entry><entry align="left">'e', 'o', or 'n'</entry><entry align="left">The connection parity; even, odd, or none. Note that older versions of NetworkManager stored this as an integer: 69 ('E') for even, 111 ('o') for odd, or 110 ('n') for none.<emphasis role="bold">
+
+Example: </emphasis>parity=n</entry></row>
+</tbody></tgroup></table>
+
+
+
+<table><title>vpn setting (section)</title><tgroup cols="4"><thead><row><entry>Property</entry><entry>Keyfile Variable</entry><entry>Format</entry><entry>Description</entry></row></thead><tbody>
+<row><entry align="left">data</entry><entry align="left">separate variables named after keys of the dictionary</entry><entry align="left"/><entry align="left">The keys of the data dictionary are used as variable names directly under [vpn] section.<emphasis role="bold">
+
+Example: </emphasis>remote=ovpn.corp.com cipher=AES-256-CBC username=joe</entry></row>
+<row><entry align="left">secrets</entry><entry align="left">separate variables named after keys of the dictionary</entry><entry align="left"/><entry align="left">The keys of the secrets dictionary are used as variable names directly under [vpn-secrets] section.<emphasis role="bold">
+
+Example: </emphasis>password=Popocatepetl</entry></row>
+</tbody></tgroup></table>
+
+<table><title>802-3-ethernet setting (section)</title><tgroup cols="4"><thead><row><entry>Property</entry><entry>Keyfile Variable</entry><entry>Format</entry><entry>Description</entry></row></thead><tbody>
+<row><entry align="left">mac-address</entry><entry align="left">mac-address</entry><entry align="left">ususal hex-digits-and-colons notation</entry><entry align="left">MAC address in traditional hex-digits-and-colons notation (e.g. 00:22:68:12:79:A2), or semicolon separated list of 6 bytes (obsolete) (e.g. 0;34;104;18;121;162)</entry></row>
+<row><entry align="left">cloned-mac-address</entry><entry align="left">cloned-mac-address</entry><entry align="left">ususal hex-digits-and-colons notation</entry><entry align="left">Cloned MAC address in traditional hex-digits-and-colons notation (e.g. 00:22:68:12:79:B2), or semicolon separated list of 6 bytes (obsolete) (e.g. 0;34;104;18;121;178).</entry></row>
+<row><entry align="left">mac-address-blacklist</entry><entry align="left">mac-address-blacklist</entry><entry align="left">list of MACs (separated with semicolons)</entry><entry align="left">MAC address blacklist.<emphasis role="bold">
+
+Example: </emphasis>mac-address-blacklist= 00:22:68:12:79:A6;00:22:68:12:79:78</entry></row>
+</tbody></tgroup></table>
+
+<table><title>802-11-wireless setting (section)</title><tgroup cols="4"><thead><row><entry>Property</entry><entry>Keyfile Variable</entry><entry>Format</entry><entry>Description</entry></row></thead><tbody>
+<row><entry align="left">ssid</entry><entry align="left">ssid</entry><entry align="left">string (or decimal-byte list - obsolete)</entry><entry align="left">SSID of Wi-Fi network.<emphasis role="bold">
+
+Example: </emphasis>ssid=Quick Net</entry></row>
+<row><entry align="left">mac-address</entry><entry align="left">mac-address</entry><entry align="left">ususal hex-digits-and-colons notation</entry><entry align="left">MAC address in traditional hex-digits-and-colons notation (e.g. 00:22:68:12:79:A2), or semicolon separated list of 6 bytes (obsolete) (e.g. 0;34;104;18;121;162).</entry></row>
+<row><entry align="left">cloned-mac-address</entry><entry align="left">cloned-mac-address</entry><entry align="left">ususal hex-digits-and-colons notation</entry><entry align="left">Cloned MAC address in traditional hex-digits-and-colons notation (e.g. 00:22:68:12:79:B2), or semicolon separated list of 6 bytes (obsolete) (e.g. 0;34;104;18;121;178).</entry></row>
+<row><entry align="left">mac-address-blacklist</entry><entry align="left">mac-address-blacklist</entry><entry align="left">list of MACs (separated with semicolons)</entry><entry align="left">MAC address blacklist.<emphasis role="bold">
+
+Example: </emphasis>mac-address-blacklist= 00:22:68:12:79:A6;00:22:68:12:79:78</entry></row>
+</tbody></tgroup></table>
+<refsect2 id="secrets-flags"><title>Secret flags</title><para>
+ Each secret property in a NetworkManager setting has an associated <emphasis>flags</emphasis>
+ property that describes how to handle that secret. In the <emphasis>keyfile</emphasis> plugin,
+ the value of <emphasis>-flags</emphasis> variable is a decimal number (0 - 7) defined as a sum
+ of the following values:
+ </para><itemizedlist><listitem><para>0 - (NM owned) - the system is responsible for providing and storing this secret.</para></listitem><listitem><para>1 - (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.</para></listitem><listitem><para>2 - (not-saved) - this secret should not be saved but should be requested
+ from the user each time it is required.</para></listitem><listitem><para>4 - (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.</para></listitem></itemizedlist></refsect2></refsect1><refsect1><title>AUTHOR</title><para><author><firstname>NetworkManager developers</firstname></author></para></refsect1><refsect1><title>FILES</title><para><filename>/etc/NetworkManager/system-connections/*</filename></para></refsect1><refsect1><title>SEE ALSO</title><para>https://developer.gnome.org/NetworkManager/unstable/ref-settings.html</para><para>nm-settings(5), nm-settings-ifcfg-rh(5), NetworkManager(8), NetworkManager.conf(5), nmcli(1), nmcli-examples(5)</para></refsect1></refentry>
diff --git a/man/nm-settings-keyfile.xsl b/man/nm-settings-keyfile.xsl
new file mode 100644
index 000000000..b6e01a238
--- /dev/null
+++ b/man/nm-settings-keyfile.xsl
@@ -0,0 +1,308 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+ <xsl:output
+ method="xml"
+ doctype-public="-//OASIS//DTD DocBook XML V4.3//EN"
+ doctype-system="http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"
+ />
+
+ <xsl:param name="date"/>
+ <xsl:param name="version"/>
+
+ <xsl:template match="nm-keyfile-docs">
+ <refentry id="nm-settings-keyfile">
+ <refentryinfo>
+ <date><xsl:value-of select="$date"/></date>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>nm-settings-keyfile</refentrytitle>
+ <manvolnum>5</manvolnum>
+ <refmiscinfo class="source">NetworkManager</refmiscinfo>
+ <refmiscinfo class="manual">Configuration</refmiscinfo>
+ <refmiscinfo class="version"><xsl:value-of select="$version"/></refmiscinfo>
+ </refmeta>
+ <refnamediv>
+ <refname>nm-settings-keyfile</refname>
+ <refpurpose>Description of <emphasis>keyfile</emphasis> settings plugin</refpurpose>
+ </refnamediv>
+ <refsect1>
+ <title>DESCRIPTION</title>
+ <para>
+ NetworkManager is based on the concept of connection profiles that contain
+ network configuration (see <citerefentry><refentrytitle>nm-settings</refentrytitle>
+ <manvolnum>5</manvolnum></citerefentry> for details). The profiles can be
+ stored in various formats. NetworkManager uses plugins for reading and writing
+ the data. The plugins can be configured in <citerefentry>
+ <refentrytitle>NetworkManager.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+ </para>
+ <para>
+ The <emphasis>keyfile</emphasis> 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 <filename>/etc/NetworkManager/system-connections/</filename>.
+ This plugin is always enabled and will automatically be used to store
+ any connections that are not supported by any other active plugin.
+ For security, it will ignore files that are readable or writeable by any user
+ or group other than 'root' since private keys and passphrases may be stored
+ in plaintext inside the file.
+ </para>
+ </refsect1>
+ <refsect1>
+ <title>File Format</title>
+ <para>
+ The <emphasis>keyfile</emphasis> config format is a simple .ini-style
+ format. It consists of sections (groups) of key-value pairs. Each section
+ corresponds to a setting name as described in the settings specification
+ (<citerefentry><refentrytitle>nm-settings</refentrytitle>
+ <manvolnum>5</manvolnum></citerefentry>). Each configuration key/value
+ pair in the section is one of the properties listed in the settings
+ specification. The majority of properties of the specification is written
+ in the same format into the <emphasis>keyfile</emphasis> too. However
+ some values are inconvenient for people to use. These are stored in the
+ files in more readable ways. These properties are described bellow.
+ An example could be IP addresses that are not written as integer arrays,
+ but more reasonably as "1.2.3.4/12 1.2.3.254".
+ More information of the generic key file format can be found at
+ <ulink url="https://developer.gnome.org/glib/stable/glib-Key-value-file-parser.html#glib-Key-value-file-parser.description">
+ GLib key file format</ulink> (Lines beginning with a '#' are comments,
+ lists are separated by character <literal>;</literal> etc.).
+ </para>
+ <para>
+ Users can create or modify the <emphasis>keyfile</emphasis> connection files
+ manually, even if that is not the recommended way of managing the profiles.
+ However, if they choose to do that, they must inform NetworkManager about
+ their changes (see <emphasis>monitor-connection-file</emphasis> in
+ <citerefentry><refentrytitle>nm-settings</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry> and <emphasis>nmcli con (re)load</emphasis>).
+ </para>
+ <formalpara>
+ <title>Examples of <emphasis>keyfile</emphasis> configuration</title>
+ <para>
+ <programlisting>
+ <emphasis role="bold">A sample configuration for an ethernet network:</emphasis>
+[connection]
+id=Main eth0
+uuid=27afa607-ee36-43f0-b8c3-9d245cdc4bb3
+type=802-3-ethernet
+autoconnect=true
+
+[ipv4]
+method=auto
+
+[802-3-ethernet]
+mac-address=00:23:5a:47:1f:71
+ </programlisting>
+ </para>
+ <para>
+ <programlisting>
+ <emphasis role="bold">A sample configuration for WPA-EAP (PEAP with MSCHAPv2) and always-ask secret:</emphasis>
+[connection]
+id=CompanyWIFI
+uuid=cdac6154-a33b-4b15-9904-666772cfa5ee
+type=wifi
+autoconnect=false
+
+[wifi]
+ssid=CorpWLAN
+mode=infrastructure
+security=802-11-wireless-security
+
+[wifi-security]
+key-mgmt=wpa-eap
+
+[ipv4]
+method=auto
+
+[ipv6]
+method=auto
+
+[802-1x]
+eap=peap;
+identity=joe
+ca-cert=/home/joe/.cert/corp.crt
+phase1-peapver=1
+phase2-auth=mschapv2
+password-flags=2
+ </programlisting>
+ </para>
+ <para>
+ <programlisting>
+ <emphasis role="bold">A sample configuration for openvpn:</emphasis>
+[connection]
+id=RedHat-openvpn
+uuid=7f9b3356-b210-4c0e-8123-bd116c9c280f
+type=vpn
+timestamp=1385401165
+
+[vpn]
+service-type=org.freedesktop.NetworkManager.openvpn
+connection-type=password
+password-flags=3
+remote=ovpn.my-company.com
+cipher=AES-256-CBC
+reneg-seconds=0
+port=443
+username=joe
+ca=/etc/openvpn/ISCA.pem
+tls-remote=ovpn.my-company.com
+
+[ipv6]
+method=auto
+
+[ipv4]
+method=auto
+ignore-auto-dns=true
+never-default=true
+ </programlisting>
+ </para>
+ <para>
+ <programlisting>
+ <emphasis role="bold">A sample configuration for a bridge and a bridge port:</emphasis>
+[connection] [connection]
+id=MainBridge id=br-port-1
+uuid=171ae855-a0ab-42b6-bd0c-60f5812eea9d uuid=d6e8ae98-71f8-4b3d-9d2d-2e26048fe794
+interface-name=MainBridge interface-name=em1
+type=bridge type=ethernet
+ master=MainBridge
+[bridge] slave-type=bridge
+interface-name=MainBridge
+ </programlisting>
+ </para>
+ <para>
+ <programlisting>
+ <emphasis role="bold">A sample configuration for a VLAN:</emphasis>
+[connection]
+id=VLAN for building 4A
+uuid=8ce1c9e0-ce7a-4d2c-aa28-077dda09dd7e
+interface-name=VLAN-4A
+type=vlan
+
+[vlan]
+interface-name=VLAN-4A
+parent=eth0
+id=4
+ </programlisting>
+ </para>
+ </formalpara>
+ </refsect1>
+
+ <refsect1>
+ <title>DETAILS</title>
+ <para>
+ <emphasis>keyfile</emphasis> plugin variables for the majority of NetworkManager
+ properties have one-to-one mapping. It means a NetworkManager property is stored
+ in the keyfile as a variable of the same name and in the same format.
+ There are several exceptions to this rule, mainly for making keyfile syntax easier
+ for humans. The exceptions handled specially by <emphasis>keyfile</emphasis>
+ plugin are listed bellow. Refer to
+ <citerefentry><refentrytitle>nm-settings</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+ for all available settings and properties and their description.
+ </para>
+ <formalpara><title>Name aliases</title>
+ <para>
+ Some of the NetworkManager setting names are somewhat hard to type or remember. Therefore
+ <emphasis>keyfile</emphasis> introduces aliases that can be used instead of the names.
+ <!-- Hmm, why doesn't <simplelist type='horiz' columns='2'> create two columns? -->
+ <simplelist type='horiz' columns='1'>
+ <member><emphasis>setting name keyfile alias</emphasis></member>
+ <member>802-3-ethernet = ethernet</member>
+ <member>802-11-wireless = wifi</member>
+ <member>802-11-wireless-security = wifi-security</member>
+ </simplelist>
+ </para>
+ </formalpara>
+ <xsl:apply-templates/>
+ <refsect2 id="secrets-flags">
+ <title>Secret flags</title>
+ <para>
+ Each secret property in a NetworkManager setting has an associated <emphasis>flags</emphasis>
+ property that describes how to handle that secret. In the <emphasis>keyfile</emphasis> plugin,
+ the value of <emphasis>-flags</emphasis> variable is a decimal number (0 - 7) defined as a sum
+ of the following values:
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>0 - (NM owned) - the system is responsible for providing and storing this secret.</para>
+ </listitem>
+ <listitem>
+ <para>1 - (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.</para>
+ </listitem>
+ <listitem>
+ <para>2 - (not-saved) - this secret should not be saved but should be requested
+ from the user each time it is required.</para>
+ </listitem>
+ <listitem>
+ <para>4 - (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.</para>
+ </listitem>
+ </itemizedlist>
+ </refsect2>
+ </refsect1>
+
+ <refsect1>
+ <title>AUTHOR</title>
+ <para>
+ <author>
+ <firstname>NetworkManager developers</firstname>
+ </author>
+ </para>
+ </refsect1>
+ <refsect1>
+ <title>FILES</title>
+ <para><filename>/etc/NetworkManager/system-connections/*</filename></para>
+ </refsect1>
+ <refsect1>
+ <title>SEE ALSO</title>
+ <para>https://developer.gnome.org/NetworkManager/unstable/ref-settings.html</para>
+ <para>nm-settings(5), nm-settings-ifcfg-rh(5), NetworkManager(8), NetworkManager.conf(5), nmcli(1), nmcli-examples(5)</para>
+ </refsect1>
+ </refentry>
+ </xsl:template>
+
+ <xsl:template match="setting">
+ <xsl:variable name="setting_name" select="../@name"/>
+ <xsl:if test="property/@name != ''">
+ <table>
+ <title><xsl:value-of select="@name"/> setting (section)</title>
+ <tgroup cols="4">
+ <thead>
+ <row>
+ <entry>Property</entry>
+ <entry>Keyfile Variable</entry>
+ <entry>Format</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+ <tbody>
+ <xsl:apply-templates/>
+ </tbody>
+ </tgroup>
+ </table>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template match="property">
+ <row>
+ <entry align="left"><xsl:value-of select="@name"/></entry>
+ <entry align="left"><xsl:value-of select="@variable"/></entry>
+ <entry align="left"><xsl:value-of select="@format"/></entry>
+ <entry align="left">
+ <xsl:value-of select="@description"/>
+ <xsl:if test="string-length(@example)">
+ <emphasis role="bold">
+
+Example: </emphasis><xsl:value-of select="@example"/>
+ </xsl:if>
+ <xsl:if test="string-length(@values)">
+ <emphasis role="bold">
+
+Allowed values: </emphasis><xsl:value-of select="@values"/>
+ </xsl:if>
+ </entry>
+ </row>
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/man/nm-settings.5 b/man/nm-settings.5
index 6f6aaf8e1..0a90098a8 100644
--- a/man/nm-settings.5
+++ b/man/nm-settings.5
@@ -2,12 +2,12 @@
.\" Title: nm-settings
.\" Author: [see the "AUTHOR" section]
.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
-.\" Date: 03 July 2014
+.\" Date: 19 December 2014
.\" Manual: Configuration
-.\" Source: NetworkManager 0.9.10.0
+.\" Source: NetworkManager 1.0.0
.\" Language: English
.\"
-.TH "NM\-SETTINGS" "5" "" "NetworkManager 0\&.9\&.10\&.0" "Configuration"
+.TH "NM\-SETTINGS" "5" "" "NetworkManager 1\&.0\&.0" "Configuration"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -111,112 +111,121 @@ l l l l
l l l l
l l l l.
T{
-name
+altsubject\-matches
T}:T{
-string
+array of 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\&.
+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{
-eap
+anonymous\-identity
T}:T{
-array of string
+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\&.
+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{
-identity
+ca\-cert
T}:T{
-string
+byte array
T}:T{
\ \&
T}:T{
-Identity string for EAP authentication methods\&. Often the user\*(Aqs user or login name\&.
+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\*(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 "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\&.
T}
T{
-anonymous\-identity
+ca\-path
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\&.
+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\&.
T}
T{
-pac\-file
+client\-cert
T}:T{
-string
+byte array
T}:T{
\ \&
T}:T{
-UTF\-8 encoded file path containing PAC for EAP\-FAST\&.
+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\*(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 "file://" and ending with a terminating NUL byte\&.
T}
T{
-ca\-cert
+eap
T}:T{
-byte array
+array of string
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\&.
+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\&.
T}
T{
-ca\-path
+identity
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\&.
+Identity string for EAP authentication methods\&. Often the user\*(Aqs user or login name\&.
T}
T{
-subject\-match
+name
+T}:T{
+string
+T}:T{
+802\-1x
+T}:T{
+The setting\*(Aqs 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"\&.
+T}
+T{
+pac\-file
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\&.
+UTF\-8 encoded file path containing PAC for EAP\-FAST\&.
T}
T{
-altsubject\-matches
+password
T}:T{
-array of string
+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\&.
+UTF\-8 encoded password used for EAP authentication methods\&. If both the "password" property and the "password\-raw" property are specified, "password" is preferred\&.
T}
T{
-client\-cert
+password\-flags
T}:T{
-byte array
+NMSettingSecretFlags (uint32)
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\&.
+Flags indicating how to handle the "password" property\&. (see the section called \(lqSecret flag types:\(rq for flag values)
T}
T{
-phase1\-peapver
+password\-raw
T}:T{
-string
+byte array
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\&.
+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 "password" property and the "password\-raw" property are specified, "password" is preferred\&.
T}
T{
-phase1\-peaplabel
+password\-raw\-flags
T}:T{
-string
+NMSettingSecretFlags (uint32)
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\&.
+Flags indicating how to handle the "password\-raw" property\&. (see the section called \(lqSecret flag types:\(rq for flag values)
T}
T{
phase1\-fast\-provisioning
@@ -225,178 +234,169 @@ 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\&.
+Enables or disables in\-line provisioning of EAP\-FAST credentials when FAST is specified as the EAP method in the "eap" 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\&.
T}
T{
-phase2\-auth
+phase1\-peaplabel
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\&.
+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\&.
T}
T{
-phase2\-autheap
+phase1\-peapver
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\&.
+Forces which PEAP version is used when PEAP is set as the EAP method in the "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\&.
T}
T{
-phase2\-ca\-cert
+phase2\-altsubject\-matches
T}:T{
-byte array
+array of string
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\&.
+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\*(Aqs altSubjectName is performed\&.
T}
T{
-phase2\-ca\-path
+phase2\-auth
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\&.
+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 "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\&.
T}
T{
-phase2\-subject\-match
+phase2\-autheap
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\&.
+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\&.
T}
T{
-phase2\-altsubject\-matches
+phase2\-ca\-cert
T}:T{
-array of string
+byte array
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\&.
+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 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 "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\&.
T}
T{
-phase2\-client\-cert
+phase2\-ca\-path
T}:T{
-byte array
+string
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\&.
+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\&.
T}
T{
-password
+phase2\-client\-cert
T}:T{
-string
+byte array
T}:T{
\ \&
T}:T{
-UTF\-8 encoded password used for EAP authentication methods\&.
+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\*(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 "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\&.
T}
T{
-password\-flags
+phase2\-private\-key
T}:T{
-uint32
+byte array
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)
+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\*(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 "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 "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 "phase2\-private\-key\-password" property must be set to the password used to decode the PKCS#12 private key and certificate\&.
T}
T{
-password\-raw
+phase2\-private\-key\-password
T}:T{
-byte array
+string
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\&.
+The password used to decrypt the "phase 2" private key specified in the "phase2\-private\-key" property when the private key either uses the path scheme, or is a PKCS#12 format key\&.
T}
T{
-password\-raw\-flags
+phase2\-private\-key\-password\-flags
T}:T{
-uint32
+NMSettingSecretFlags (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)
+Flags indicating how to handle the "phase2\-private\-key\-password" property\&. (see the section called \(lqSecret flag types:\(rq for flag values)
T}
T{
-private\-key
+phase2\-subject\-match
T}:T{
-byte array
+string
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\&.
+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\*(Aqs subject is performed\&.
T}
T{
-private\-key\-password
+pin
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\&.
+PIN used for EAP authentication methods\&.
T}
T{
-private\-key\-password\-flags
+pin\-flags
T}:T{
-uint32
+NMSettingSecretFlags (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)
+Flags indicating how to handle the "pin" property\&. (see the section called \(lqSecret flag types:\(rq for flag values)
T}
T{
-phase2\-private\-key
+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\&.
+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\*(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 "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 "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\&. WARNING: "private\-key" 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\&.
T}
T{
-phase2\-private\-key\-password
+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\&.
+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\&.
T}
T{
-phase2\-private\-key\-password\-flags
+private\-key\-password\-flags
T}:T{
-uint32
+NMSettingSecretFlags (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)
+Flags indicating how to handle the "private\-key\-password" property\&. (see the section called \(lqSecret flag types:\(rq for flag values)
T}
T{
-pin
+subject\-match
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)
+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{
system\-ca\-certs
@@ -405,7 +405,7 @@ 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\&.
+When TRUE, overrides the "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\&.
T}
.TE
.sp 1
@@ -437,22 +437,22 @@ l l l l
l l l l
l l l l.
T{
-name
+encapsulation
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\&.
+Encapsulation of ADSL connection\&. Can be "vcmux" or "llc"\&.
T}
T{
-username
+name
T}:T{
string
T}:T{
-\ \&
+adsl
T}:T{
-Username used to authenticate with the pppoa service\&.
+The setting\*(Aqs 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"\&.
T}
T{
password
@@ -461,16 +461,16 @@ string
T}:T{
\ \&
T}:T{
-Password used to authenticate with the pppoa service\&.
+Password used to authenticate with the ADSL service\&.
T}
T{
password\-flags
T}:T{
-uint32
+NMSettingSecretFlags (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)
+Flags indicating how to handle the "password" property\&. (see the section called \(lqSecret flag types:\(rq for flag values)
T}
T{
protocol
@@ -479,34 +479,34 @@ string
T}:T{
\ \&
T}:T{
-ADSL connection protocol\&.
+ADSL connection protocol\&. Can be "pppoa", "pppoe" or "ipoatm"\&.
T}
T{
-encapsulation
+username
T}:T{
string
T}:T{
\ \&
T}:T{
-Encapsulation of ADSL connection
+Username used to authenticate with the ADSL service\&.
T}
T{
-vpi
+vci
T}:T{
uint32
T}:T{
0
T}:T{
-VPI of ADSL connection
+VCI of ADSL connection
T}
T{
-vci
+vpi
T}:T{
uint32
T}:T{
0
T}:T{
-VCI of ADSL connection
+VPI of ADSL connection
T}
.TE
.sp 1
@@ -533,22 +533,22 @@ l l l l
l l l l
l l l l.
T{
-name
+bdaddr
T}:T{
-string
+byte array
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\&.
+The Bluetooth address of the device\&.
T}
T{
-bdaddr
+name
T}:T{
-byte array
+string
T}:T{
-[]
+bluetooth
T}:T{
-The Bluetooth address of the device
+The setting\*(Aqs 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"\&.
T}
T{
type
@@ -557,7 +557,7 @@ string
T}:T{
\ \&
T}:T{
-Either \*(Aqdun\*(Aq for Dial\-Up Networking connections or \*(Aqpanu\*(Aq for Personal Area Networking connections\&.
+Either "dun" for Dial\-Up Networking connections or "panu" for Personal Area Networking connections to devices supporting the NAP profile\&.
T}
.TE
.sp 1
@@ -584,31 +584,31 @@ l l l l
l l l l
l l l l.
T{
-name
+interface\-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\&.
+Deprecated in favor of connection\&.interface\-name, but can be used for backward\-compatibility with older daemons, to set the bond\*(Aqs interface name\&.
T}
T{
-interface\-name
+name
T}:T{
string
T}:T{
-\ \&
+bond
T}:T{
-The name of the virtual in\-kernel bonding network interface
+The setting\*(Aqs 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"\&.
T}
T{
options
T}:T{
-dict of (string::string)
+dict of string to 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])\&.
+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
@@ -641,85 +641,85 @@ l l l l
l l l l
l l l l.
T{
-name
+ageing\-time
T}:T{
-string
+uint32
T}:T{
-bridge
+300
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\&.
+The Ethernet MAC address aging time, in seconds\&.
T}
T{
-interface\-name
+forward\-delay
T}:T{
-string
+uint32
T}:T{
-\ \&
+15
T}:T{
-The name of the virtual in\-kernel bridging network interface
+The Spanning Tree Protocol (STP) forwarding delay, in seconds\&.
T}
T{
-mac\-address
+hello\-time
T}:T{
-byte array
+uint32
T}:T{
-[]
+2
T}:T{
-The MAC address of the bridge
+The Spanning Tree Protocol (STP) hello time, in seconds\&.
T}
T{
-stp
+interface\-name
T}:T{
-boolean
+string
T}:T{
-TRUE
+\ \&
T}:T{
-Controls whether Spanning Tree Protocol (STP) is enabled for this bridge\&.
+Deprecated in favor of connection\&.interface\-name, but can be used for backward\-compatibility with older daemons, to set the bridge\*(Aqs interface name\&.
T}
T{
-priority
+mac\-address
T}:T{
-uint32
+byte array
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\&.
+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\&.
T}
T{
-forward\-delay
+max\-age
T}:T{
uint32
T}:T{
-15
+20
T}:T{
-The Spanning Tree Protocol (STP) forwarding delay, in seconds\&.
+The Spanning Tree Protocol (STP) maximum message age, in seconds\&.
T}
T{
-hello\-time
+name
T}:T{
-uint32
+string
T}:T{
-2
+bridge
T}:T{
-The Spanning Tree Protocol (STP) hello time, in seconds\&.
+The setting\*(Aqs 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"\&.
T}
T{
-max\-age
+priority
T}:T{
uint32
T}:T{
-20
+32768
T}:T{
-The Spanning Tree Protocol (STP) maximum message age, in seconds\&.
+Sets the Spanning Tree Protocol (STP) priority for this bridge\&. Lower values are "better"; the lowest priority bridge will be elected the root bridge\&.
T}
T{
-ageing\-time
+stp
T}:T{
-uint32
+boolean
T}:T{
-300
+TRUE
T}:T{
-The Ethernet MAC address aging time, in seconds\&.
+Controls whether Spanning Tree Protocol (STP) is enabled for this bridge\&.
T}
.TE
.sp 1
@@ -747,22 +747,22 @@ l l l l
l l l l
l l l l.
T{
-name
+hairpin\-mode
T}:T{
-string
+boolean
T}:T{
-bridge\-port
+FALSE
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\&.
+Enables or disabled "hairpin mode" for the port, which allows frames to be sent back out through the port the frame was received on\&.
T}
T{
-priority
+name
T}:T{
-uint32
+string
T}:T{
-32
+bridge\-port
T}:T{
-The Spanning Tree Protocol (STP) priority of this bridge port
+The setting\*(Aqs 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"\&.
T}
T{
path\-cost
@@ -774,13 +774,13 @@ T}:T{
The Spanning Tree Protocol (STP) port cost for destinations via this port\&.
T}
T{
-hairpin\-mode
+priority
T}:T{
-boolean
+uint32
T}:T{
-FALSE
+32
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\&.
+The Spanning Tree Protocol (STP) priority of this bridge port\&.
T}
.TE
.sp 1
@@ -815,7 +815,7 @@ 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\&.
+The setting\*(Aqs 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"\&.
T}
T{
number
@@ -824,34 +824,34 @@ 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\&.
+The number to dial to establish the connection to the CDMA\-based mobile broadband network, if any\&. If not specified, the default number (#777) is used when required\&.
T}
T{
-username
+password
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\&.
+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\&.
T}
T{
-password
+password\-flags
T}:T{
-string
+NMSettingSecretFlags (uint32)
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\&.
+Flags indicating how to handle the "password" property\&. (see the section called \(lqSecret flag types:\(rq for flag values)
T}
T{
-password\-flags
+username
T}:T{
-uint32
+string
T}:T{
-0
+\ \&
T}:T{
-Flags indicating how to handle the CDMA password\&. (see the section called \(lqSecret flag types:\(rq for flag values)
+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\&.
T}
.TE
.sp 1
@@ -887,78 +887,79 @@ 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
+autoconnect
T}:T{
-string
+boolean
T}:T{
-connection
+TRUE
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\&.
+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\&.
T}
T{
-id
+autoconnect\-priority
T}:T{
-string
+int32
T}:T{
-\ \&
+0
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\&.
+The autoconnect priority\&. If the connection is set to autoconnect, connections with higher priority will be preferred\&. Defaults to 0\&. The higher number means higher priority\&.
T}
T{
-uuid
+gateway\-ping\-timeout
T}:T{
-string
+uint32
T}:T{
-\ \&
+0
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\&.
+If greater than zero, delay success of IP addressing until either the timeout is reached, or an IP gateway replies to a ping\&.
T}
T{
-interface\-name
+id
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\&.
+A human readable unique identifier for the connection, like "Work Wi\-Fi" or "T\-Mobile 3G"\&.
T}
T{
-type
+interface\-name
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)\&.
+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 software devices this specifies the name of the created device\&. 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{
-permissions
+master
T}:T{
-array of string
+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\&.
+Interface name of the master device or UUID of the master connection\&.
T}
T{
-autoconnect
+name
T}:T{
-boolean
+string
T}:T{
-TRUE
+connection
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\&.
+The setting\*(Aqs 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"\&.
T}
T{
-timestamp
+permissions
T}:T{
-uint64
+array of string
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)\&.
+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 list\&. 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 present must be ignored and is reserved for future use\&. All of [type], [id], and [reserved] must be valid UTF\-8\&.
T}
T{
read\-only
@@ -967,52 +968,61 @@ 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\&.
+FALSE if the connection can be modified using the provided settings service\*(Aqs D\-Bus interface with the right privileges, or TRUE if the connection is read\-only and cannot be modified\&.
T}
T{
-zone
+secondaries
T}:T{
-string
+array of 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\&.
+List of connection UUIDs that should be activated when the base connection itself is activated\&. Currently only VPN connections are supported\&.
T}
T{
-master
+slave\-type
T}:T{
string
T}:T{
\ \&
T}:T{
-Interface name of the master device or UUID of the master connection
+Setting name of the device type of this slave\*(Aqs master connection (eg, "bond"), or NULL if this connection is not a slave\&.
T}
T{
-slave\-type
+timestamp
+T}:T{
+uint64
+T}:T{
+0
+T}:T{
+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)\&.
+T}
+T{
+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\&.
+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)\&.
T}
T{
-secondaries
+uuid
T}:T{
-array of string
+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\&.
+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, it should not be changed when the "id" property or NMSettingIP4Config changes, but might need to be re\-created when the Wi\-Fi SSID, mobile broadband network provider, or "type" property changes\&. The UUID must be in the format "2815492f\-7e56\-435e\-b2e9\-246bd7cdc664" (ie, contains only hexadecimal characters and "\-")\&.
T}
T{
-gateway\-ping\-timeout
+zone
T}:T{
-uint32
+string
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\&.
+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}
.TE
.sp 1
@@ -1052,22 +1062,22 @@ l l l l
l l l l
l l l l.
T{
-name
+app\-fcoe\-flags
T}:T{
-string
+NMSettingDcbFlags (uint32)
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\&.
+Specifies the NMSettingDcbFlags for the DCB FCoE application\&. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4)\&.
T}
T{
-app\-fcoe\-flags
+app\-fcoe\-mode
T}:T{
-uint32
+string
T}:T{
-0
+"fabric"
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)
+The FCoE controller mode; either "fabric" (default) or "vn2vn"\&.
T}
T{
app\-fcoe\-priority
@@ -1076,88 +1086,79 @@ 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\&.
+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 NM_SETTING_DCB_FLAG_ENABLE (0x1) flag\&.
T}
T{
-app\-iscsi\-flags
+app\-fip\-flags
T}:T{
-uint32
+NMSettingDcbFlags (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)
+Specifies the NMSettingDcbFlags for the DCB FIP application\&. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4)\&.
T}
T{
-app\-iscsi\-priority
+app\-fip\-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\&.
+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 NM_SETTING_DCB_FLAG_ENABLE (0x1) flag\&.
T}
T{
-app\-fip\-flags
+app\-iscsi\-flags
T}:T{
-uint32
+NMSettingDcbFlags (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)
+Specifies the NMSettingDcbFlags for the DCB iSCSI application\&. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4)\&.
T}
T{
-app\-fip\-priority
+app\-iscsi\-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\&.
+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 NM_SETTING_DCB_FLAG_ENABLE (0x1) flag\&.
T}
T{
-priority\-flow\-control\-flags
+name
T}:T{
-uint32
+string
T}:T{
-0
+dcb
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)
+The setting\*(Aqs 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"\&.
T}
T{
-priority\-flow\-control
+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 whether or not the corresponding priority should transmit priority pause\&. Allowed values are 0 (do not transmit pause) and 1 (transmit pause)\&.
+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\-group\-flags
+priority\-flow\-control
T}:T{
-uint32
+array of 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)
+An array of 8 boolean 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\&.
T}
T{
-priority\-group\-id
+priority\-flow\-control\-flags
T}:T{
-array of uint32
+NMSettingDcbFlags (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\&.
+Specifies the NMSettingDcbFlags for DCB Priority Flow Control (PFC)\&. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4)\&.
T}
T{
priority\-group\-bandwidth
@@ -1169,13 +1170,22 @@ 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
+priority\-group\-flags
+T}:T{
+NMSettingDcbFlags (uint32)
+T}:T{
+\ \&
+T}:T{
+Specifies the NMSettingDcbFlags for DCB Priority Groups\&. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4)\&.
+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 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\&.
+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\-strict\-bandwidth
@@ -1184,7 +1194,7 @@ 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)\&.
+An array of 8 boolean 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\&.
T}
T{
priority\-traffic\-class
@@ -1202,7 +1212,38 @@ T}
.nr an-no-space-flag 1
.nr an-break-flag 1
.br
-.B Table\ \&10.\ \&gsm setting
+.B Table\ \&10.\ \&generic 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.
+T{
+name
+T}:T{
+string
+T}:T{
+generic
+T}:T{
+The setting\*(Aqs 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"\&.
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&11.\ \&gsm setting
.TS
allbox tab(:);
lB lB lB lB.
@@ -1216,8 +1257,6 @@ 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
@@ -1229,76 +1268,67 @@ l l l l
l l l l
l l l l.
T{
-name
+apn
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\&.
+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{
-number
+home\-only
T}:T{
-string
+boolean
T}:T{
-\ \&
+FALSE
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\&.
+When TRUE, only connections to the home network will be allowed\&. Connections to roaming networks will not be made\&.
T}
T{
-username
+name
T}:T{
string
T}:T{
-\ \&
+gsm
T}:T{
-Username used to authenticate with the network, if required\&. Note that many providers do not require a username or accept any username\&.
+The setting\*(Aqs 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"\&.
T}
T{
-password
+network\-id
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\&.
+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{
-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
+number
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\&.
+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{
-network\-id
+password
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\&.
+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\&.
T}
T{
-network\-type
+password\-flags
T}:T{
-int32
+NMSettingSecretFlags (uint32)
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\&.
+Flags indicating how to handle the "password" property\&. (see the section called \(lqSecret flag types:\(rq for flag values)
T}
T{
pin
@@ -1312,29 +1342,20 @@ T}
T{
pin\-flags
T}:T{
-uint32
-T}:T{
-0
+NMSettingSecretFlags (uint32)
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\&.
+Flags indicating how to handle the "pin" property\&. (see the section called \(lqSecret flag types:\(rq for flag values)
T}
T{
-home\-only
+username
T}:T{
-boolean
+string
T}:T{
-FALSE
+\ \&
T}:T{
-When TRUE, only connections to the home network will be allowed\&. Connections to roaming networks will not be made\&.
+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\&.
T}
.TE
.sp 1
@@ -1343,7 +1364,7 @@ T}
.nr an-no-space-flag 1
.nr an-break-flag 1
.br
-.B Table\ \&11.\ \&infiniband setting
+.B Table\ \&12.\ \&infiniband setting
.TS
allbox tab(:);
lB lB lB lB.
@@ -1364,22 +1385,13 @@ 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)\&.
+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
@@ -1391,13 +1403,13 @@ 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
+name
T}:T{
string
T}:T{
-\ \&
+infiniband
T}:T{
-The IPoIB transport mode\&. Either \*(Aqdatagram\*(Aq or \*(Aqconnected\*(Aq\&.
+The setting\*(Aqs 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"\&.
T}
T{
p\-key
@@ -1406,7 +1418,7 @@ int32
T}:T{
\-1
T}:T{
-The InfiniBand P_Key\&. Either \-1 for the default, or a 16\-bit unsigned integer\&.
+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\&.
T}
T{
parent
@@ -1415,7 +1427,16 @@ string
T}:T{
\ \&
T}:T{
-The interface name of the parent device, or NULL
+The interface name of the parent device of this device\&. Normally NULL, but if the "p_key" property is set, then you must specify the base device by setting either this property or "mac\-address"\&.
+T}
+T{
+transport\-mode
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+The IP\-over\-InfiniBand transport mode\&. Either "datagram" or "connected"\&.
T}
.TE
.sp 1
@@ -1424,7 +1445,7 @@ T}
.nr an-no-space-flag 1
.nr an-break-flag 1
.br
-.B Table\ \&12.\ \&ipv4 setting
+.B Table\ \&13.\ \&ipv4 setting
.TS
allbox tab(:);
lB lB lB lB.
@@ -1451,78 +1472,81 @@ l l l l
l l l l
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
+address\-data
T}:T{
-string
+array of vardict
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\&.
+Array of IPv4 addresses\&. Each address dictionary contains at least \*(Aqaddress\*(Aq and \*(Aqprefix\*(Aq entries, containing the IP address as a string, and the prefix length as a uint32\&. Additional attributes may also exist on some addresses\&.
T}
T{
-method
+addresses
T}:T{
-string
+array of array of uint32
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\&.
+Deprecated in favor of the \*(Aqaddress\-data\*(Aq and \*(Aqgateway\*(Aq properties, but this can be used for backward\-compatibility with older daemons\&. Note that if you send this property the daemon will ignore \*(Aqaddress\-data\*(Aq and \*(Aqgateway\*(Aq\&. 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\&.
T}
T{
-dns
+dhcp\-client\-id
T}:T{
-array of uint32
+string
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\&.
+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{
-dns\-search
+dhcp\-hostname
T}:T{
-array of string
+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\&.
+If the "dhcp\-send\-hostname" property is TRUE, then the specified name will be sent to the DHCP server when acquiring a lease\&.
T}
T{
-addresses
+dhcp\-send\-hostname
T}:T{
-array of array of uint32
+boolean
T}:T{
-\ \&
+TRUE
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\&.
+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 NULL and this property is TRUE, the current persistent hostname of the computer is sent\&.
T}
T{
-address\-labels
+dns
T}:T{
-array of string
+array of uint32
T}:T{
-\ \&
+[]
T}:T{
-Internal use only
+Array of IP addresses of DNS servers (as network\-byte\-order integers)
T}
T{
-routes
+dns\-search
T}:T{
-array of array of uint32
+array of string
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\&.
+Array of DNS search domains\&.
T}
T{
-ignore\-auto\-routes
+gateway
T}:T{
-boolean
+string
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\&.
+The gateway associated with this configuration\&. This is only meaningful if "addresses" is also set\&.
T}
T{
ignore\-auto\-dns
@@ -1531,34 +1555,43 @@ 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\&.
+When "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\&.
T}
T{
-dhcp\-client\-id
+ignore\-auto\-routes
T}:T{
-string
+boolean
T}:T{
-\ \&
+FALSE
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\&.
+When "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\&.
T}
T{
-dhcp\-send\-hostname
+may\-fail
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\&.
+If TRUE, allow overall network configuration to proceed even if the configuration specified by this property 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 on the NMSettingIP4Config allows the overall network configuration to succeed if IPv4 configuration fails but IPv6 configuration completes successfully\&.
T}
T{
-dhcp\-hostname
+method
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\&.
+IP configuration method\&. NMSettingIP4Config and NMSettingIP6Config both support "auto", "manual", and "link\-local"\&. See the subclass\-specific documentation for other values\&. In general, for the "auto" method, properties such as "dns" and "routes" specify information that is added on to the information returned from automatic configuration\&. The "ignore\-auto\-routes" and "ignore\-auto\-dns" properties modify this behavior\&. For methods that imply no upstream network, such as "shared" or "link\-local", these properties must be empty\&.
+T}
+T{
+name
+T}:T{
+string
+T}:T{
+ipv4
+T}:T{
+The setting\*(Aqs 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"\&.
T}
T{
never\-default
@@ -1567,16 +1600,34 @@ 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\&.
+If TRUE, this connection will never be the default connection for this IP type, meaning it will never be assigned the default route by NetworkManager\&.
T}
T{
-may\-fail
+route\-data
T}:T{
-boolean
+array of vardict
T}:T{
-TRUE
+\ \&
+T}:T{
+Array of IPv4 routes\&. Each route dictionary contains at least \*(Aqdest\*(Aq and \*(Aqprefix\*(Aq entries, containing the destination IP address as a string, and the prefix length as a uint32\&. Most routes will also have a \*(Aqgateway\*(Aq entry, containing the gateway IP address as a string\&. If the route has a \*(Aqmetric\*(Aq entry (containing a uint32), that will be used as the metric for the route (otherwise NM will pick a default value appropriate to the device)\&. Additional attributes may also exist on some routes\&.
+T}
+T{
+route\-metric
+T}:T{
+int64
+T}:T{
+\-1
+T}:T{
+The default metric for routes that don\*(Aqt explicitly specify a metric\&. The default value \-1 means that the metric is choosen automatically based on the device type\&. The metric applies to dynamic routes, manual (static) routes that don\*(Aqt have an explicit metric setting, address prefix routes, and the default route\&. Note that for IPv6, the kernel accepts zero (0) but coerces it to 1024 (user default)\&. Hence, setting this property to zero effectively mean setting it to 1024\&. For IPv4, zero is a regular value for the metric\&.
+T}
+T{
+routes
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\&.
+array of array of uint32
+T}:T{
+\ \&
+T}:T{
+Deprecated in favor of the \*(Aqroute\-data\*(Aq property, but this can be used for backward\-compatibility with older daemons\&. Note that if you send this property the daemon will ignore \*(Aqroute\-data\*(Aq\&. 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\&. If the metric is 0, NM will choose an appropriate default metric for the device\&. (There is no way to explicitly specify an actual metric of 0 with this property\&.)
T}
.TE
.sp 1
@@ -1585,7 +1636,7 @@ T}
.nr an-no-space-flag 1
.nr an-break-flag 1
.br
-.B Table\ \&13.\ \&ipv6 setting
+.B Table\ \&14.\ \&ipv6 setting
.TS
allbox tab(:);
lB lB lB lB.
@@ -1610,24 +1661,29 @@ l l l l
l l l l
l l l l
l l l l
+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
+address\-data
T}:T{
-string
+array of vardict
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\&.
+Array of IPv6 addresses\&. Each address dictionary contains at least \*(Aqaddress\*(Aq and \*(Aqprefix\*(Aq entries, containing the IP address as a string, and the prefix length as a uint32\&. Additional attributes may also exist on some addresses\&.
T}
T{
-method
+addresses
T}:T{
-string
+array of legacy IPv6 address struct (a(ayuay))
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\&.
+Deprecated in favor of the \*(Aqaddress\-data\*(Aq and \*(Aqgateway\*(Aq properties, but this can be used for backward\-compatibility with older daemons\&. Note that if you send this property the daemon will ignore \*(Aqaddress\-data\*(Aq and \*(Aqgateway\*(Aq\&. Array of IPv6 address structures\&. Each IPv6 address structure is composed of an IPv6 address, a prefix length (1 \- 128), and an IPv6 gateway address\&. The gateway may be zeroed out if no gateway exists for that subnet\&.
T}
T{
dhcp\-hostname
@@ -1636,43 +1692,52 @@ string
T}:T{
\ \&
T}:T{
-The specified name will be sent to the DHCP server when acquiring a lease\&.
+If the "dhcp\-send\-hostname" property is TRUE, then the specified name will be sent to the DHCP server when acquiring a lease\&.
+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 "dhcp\-hostname" property is NULL and this property is TRUE, the current persistent hostname of the computer is sent\&.
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\&.
+Array of IP addresses of DNS servers (in network byte order)
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\&.
+Array of DNS search domains\&.
T}
T{
-addresses
+gateway
T}:T{
-array of (byte array, uint32, byte array)
+string
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\&.
+The gateway associated with this configuration\&. This is only meaningful if "addresses" is also set\&.
T}
T{
-routes
+ignore\-auto\-dns
T}:T{
-array of (byte array, uint32, byte array, uint32)
+boolean
T}:T{
-\ \&
+FALSE
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\&.
+When "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\&.
T}
T{
ignore\-auto\-routes
@@ -1681,16 +1746,43 @@ 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\&.
+When "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\&.
T}
T{
-ignore\-auto\-dns
+ip6\-privacy
+T}:T{
+NMSettingIP6ConfigPrivacy (int32)
+T}:T{
+\ \&
+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}
+T{
+may\-fail
T}:T{
boolean
T}:T{
-FALSE
+TRUE
+T}:T{
+If TRUE, allow overall network configuration to proceed even if the configuration specified by this property 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 on the NMSettingIP4Config allows the overall network configuration to succeed if IPv4 configuration fails but IPv6 configuration completes successfully\&.
+T}
+T{
+method
+T}:T{
+string
+T}:T{
+\ \&
+T}:T{
+IP configuration method\&. NMSettingIP4Config and NMSettingIP6Config both support "auto", "manual", and "link\-local"\&. See the subclass\-specific documentation for other values\&. In general, for the "auto" method, properties such as "dns" and "routes" specify information that is added on to the information returned from automatic configuration\&. The "ignore\-auto\-routes" and "ignore\-auto\-dns" properties modify this behavior\&. For methods that imply no upstream network, such as "shared" or "link\-local", these properties must be empty\&.
+T}
+T{
+name
+T}:T{
+string
+T}:T{
+ipv6
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\&.
+The setting\*(Aqs 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"\&.
T}
T{
never\-default
@@ -1699,25 +1791,34 @@ 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\&.
+If TRUE, this connection will never be the default connection for this IP type, meaning it will never be assigned the default route by NetworkManager\&.
T}
T{
-may\-fail
+route\-data
T}:T{
-boolean
+array of vardict
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\&.
+Array of IPv6 routes\&. Each route dictionary contains at least \*(Aqdest\*(Aq and \*(Aqprefix\*(Aq entries, containing the destination IP address as a string, and the prefix length as a uint32\&. Most routes will also have a \*(Aqnext\-hop\*(Aq entry, containing the next hop IP address as a string\&. If the route has a \*(Aqmetric\*(Aq entry (containing a uint32), that will be used as the metric for the route (otherwise NM will pick a default value appropriate to the device)\&. Additional attributes may also exist on some routes\&.
T}
T{
-ip6\-privacy
+route\-metric
T}:T{
-int32
+int64
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)\&.
+The default metric for routes that don\*(Aqt explicitly specify a metric\&. The default value \-1 means that the metric is choosen automatically based on the device type\&. The metric applies to dynamic routes, manual (static) routes that don\*(Aqt have an explicit metric setting, address prefix routes, and the default route\&. Note that for IPv6, the kernel accepts zero (0) but coerces it to 1024 (user default)\&. Hence, setting this property to zero effectively mean setting it to 1024\&. For IPv4, zero is a regular value for the metric\&.
+T}
+T{
+routes
+T}:T{
+array of legacy IPv6 route struct (a(ayuayu))
+T}:T{
+\ \&
+T}:T{
+Deprecated in favor of the \*(Aqroute\-data\*(Aq property, but this can be used for backward\-compatibility with older daemons\&. Note that if you send this property the daemon will ignore \*(Aqroute\-data\*(Aq\&. Array of IPv6 route structures\&. Each IPv6 route structure is composed of an IPv6 address, a prefix length (1 \- 128), an IPv6 next hop address (which may be zeroed out if there is no next hop), and a metric\&. If the metric is 0, NM will choose an appropriate default metric for the device\&.
T}
.TE
.sp 1
@@ -1726,7 +1827,7 @@ T}
.nr an-no-space-flag 1
.nr an-break-flag 1
.br
-.B Table\ \&14.\ \&802-11-olpc-mesh setting
+.B Table\ \&15.\ \&802-11-olpc-mesh setting
.TS
allbox tab(:);
lB lB lB lB.
@@ -1745,40 +1846,40 @@ l l l l
l l l l
l l l l.
T{
-name
+channel
T}:T{
-string
+uint32
T}:T{
-802\-11\-olpc\-mesh
+0
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\&.
+Channel on which the mesh network to join is located\&.
T}
T{
-ssid
+dhcp\-anycast\-address
T}:T{
byte array
T}:T{
-[]
+\ \&
T}:T{
-SSID of the mesh network to join\&.
+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\&.
T}
T{
-channel
+name
T}:T{
-uint32
+string
T}:T{
-0
+802\-11\-olpc\-mesh
T}:T{
-Channel on which the mesh network to join is located\&.
+The setting\*(Aqs 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"\&.
T}
T{
-dhcp\-anycast\-address
+ssid
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\&.
+SSID of the mesh network to join\&.
T}
.TE
.sp 1
@@ -1787,7 +1888,7 @@ T}
.nr an-no-space-flag 1
.nr an-break-flag 1
.br
-.B Table\ \&15.\ \&ppp setting
+.B Table\ \&16.\ \&ppp setting
.TS
allbox tab(:);
lB lB lB lB.
@@ -1821,175 +1922,175 @@ l l l l
l l l l
l l l l.
T{
-name
+baud
T}:T{
-string
+uint32
T}:T{
-ppp
+0
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\&.
+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{
-noauth
+crtscts
T}:T{
boolean
T}:T{
-TRUE
+FALSE
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\&.
+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{
-refuse\-eap
+lcp\-echo\-failure
T}:T{
-boolean
+uint32
T}:T{
-FALSE
+0
T}:T{
-If TRUE, the EAP authentication method will not be used\&.
+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\&.
T}
T{
-refuse\-pap
+lcp\-echo\-interval
T}:T{
-boolean
+uint32
T}:T{
-FALSE
+0
T}:T{
-If TRUE, the PAP authentication method will not be used\&.
+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}
T{
-refuse\-chap
+mppe\-stateful
T}:T{
boolean
T}:T{
FALSE
T}:T{
-If TRUE, the CHAP authentication method will not be used\&.
+If TRUE, stateful MPPE is used\&. See pppd documentation for more information on stateful MPPE\&.
T}
T{
-refuse\-mschap
+mru
T}:T{
-boolean
+uint32
T}:T{
-FALSE
+0
T}:T{
-If TRUE, the MSCHAP authentication method will not be used\&.
+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{
-refuse\-mschapv2
+mtu
T}:T{
-boolean
+uint32
T}:T{
-FALSE
+0
T}:T{
-If TRUE, the MSCHAPv2 authentication method will not be used\&.
+If non\-zero, instruct pppd to send packets no larger than the specified size\&.
T}
T{
-nobsdcomp
+name
T}:T{
-boolean
+string
T}:T{
-FALSE
+ppp
T}:T{
-If TRUE, BSD compression will not be requested\&.
+The setting\*(Aqs 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"\&.
T}
T{
-nodeflate
+no\-vj\-comp
T}:T{
boolean
T}:T{
FALSE
T}:T{
-If TRUE, \*(Aqdeflate\*(Aq compression will not be requested\&.
+If TRUE, Van Jacobsen TCP header compression will not be requested\&.
T}
T{
-no\-vj\-comp
+noauth
T}:T{
boolean
T}:T{
-FALSE
+TRUE
T}:T{
-If TRUE, Van Jacobsen TCP header compression will not be requested\&.
+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{
-require\-mppe
+nobsdcomp
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\&.
+If TRUE, BSD compression will not be requested\&.
T}
T{
-require\-mppe\-128
+nodeflate
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\&.
+If TRUE, "deflate" compression will not be requested\&.
T}
T{
-mppe\-stateful
+refuse\-chap
T}:T{
boolean
T}:T{
FALSE
T}:T{
-If TRUE, stateful MPPE is used\&. See pppd documentation for more information on stateful MPPE\&.
+If TRUE, the CHAP authentication method will not be used\&.
T}
T{
-crtscts
+refuse\-eap
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\&.
+If TRUE, the EAP authentication method will not be used\&.
T}
T{
-baud
+refuse\-mschap
T}:T{
-uint32
+boolean
T}:T{
-0
+FALSE
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\&.
+If TRUE, the MSCHAP authentication method will not be used\&.
T}
T{
-mru
+refuse\-mschapv2
T}:T{
-uint32
+boolean
T}:T{
-0
+FALSE
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\&.
+If TRUE, the MSCHAPv2 authentication method will not be used\&.
T}
T{
-mtu
+refuse\-pap
T}:T{
-uint32
+boolean
T}:T{
-0
+FALSE
T}:T{
-If non\-zero, instruct pppd to send packets no larger than the specified size\&.
+If TRUE, the PAP authentication method will not be used\&.
T}
T{
-lcp\-echo\-failure
+require\-mppe
T}:T{
-uint32
+boolean
T}:T{
-0
+FALSE
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\&.
+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{
-lcp\-echo\-interval
+require\-mppe\-128
T}:T{
-uint32
+boolean
T}:T{
-0
+FALSE
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\&.
+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\&.
T}
.TE
.sp 1
@@ -1998,7 +2099,7 @@ T}
.nr an-no-space-flag 1
.nr an-break-flag 1
.br
-.B Table\ \&16.\ \&pppoe setting
+.B Table\ \&17.\ \&pppoe setting
.TS
allbox tab(:);
lB lB lB lB.
@@ -2024,43 +2125,43 @@ 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\&.
+The setting\*(Aqs 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"\&.
T}
T{
-service
+password
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\&.
+Password used to authenticate with the PPPoE service\&.
T}
T{
-username
+password\-flags
T}:T{
-string
+NMSettingSecretFlags (uint32)
T}:T{
\ \&
T}:T{
-Username used to authenticate with the PPPoE service\&.
+Flags indicating how to handle the "password" property\&. (see the section called \(lqSecret flag types:\(rq for flag values)
T}
T{
-password
+service
T}:T{
string
T}:T{
\ \&
T}:T{
-Password used to authenticate with the PPPoE service\&.
+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{
-password\-flags
+username
T}:T{
-uint32
+string
T}:T{
-0
+\ \&
T}:T{
-Flags indicating how to handle the PPPoE password\&. (see the section called \(lqSecret flag types:\(rq for flag values)
+Username used to authenticate with the PPPoE service\&.
T}
.TE
.sp 1
@@ -2069,7 +2170,7 @@ T}
.nr an-no-space-flag 1
.nr an-break-flag 1
.br
-.B Table\ \&17.\ \&serial setting
+.B Table\ \&18.\ \&serial setting
.TS
allbox tab(:);
lB lB lB lB.
@@ -2090,15 +2191,6 @@ 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
@@ -2114,25 +2206,25 @@ uint32
T}:T{
8
T}:T{
-Byte\-width of the serial communication\&. The 8 in \*(Aq8n1\*(Aq for example\&.
+Byte\-width of the serial communication\&. The 8 in "8n1" for example\&.
T}
T{
-parity
+name
T}:T{
-gchar
+string
T}:T{
-110
+serial
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\&.
+The setting\*(Aqs 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"\&.
T}
T{
-stopbits
+parity
T}:T{
-uint32
+byte
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\&.
+The connection parity: 69 (ASCII \*(AqE\*(Aq) for even parity, 111 (ASCII \*(Aqo\*(Aq) for odd, 110 (ASCII \*(Aqn\*(Aq) for none\&.
T}
T{
send\-delay
@@ -2143,6 +2235,15 @@ T}:T{
T}:T{
Time to delay between each byte sent to the modem, in microseconds\&.
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 "8n1" for example\&.
+T}
.TE
.sp 1
.sp
@@ -2150,7 +2251,7 @@ T}
.nr an-no-space-flag 1
.nr an-break-flag 1
.br
-.B Table\ \&18.\ \&team setting
+.B Table\ \&19.\ \&team setting
.TS
allbox tab(:);
lB lB lB lB.
@@ -2168,13 +2269,13 @@ l l l l
l l l l
l l l l.
T{
-name
+config
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\&.
+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\&.
T}
T{
interface\-name
@@ -2183,16 +2284,16 @@ string
T}:T{
\ \&
T}:T{
-The name of the virtual in\-kernel team network interface
+Deprecated in favor of connection\&.interface\-name, but can be used for backward\-compatibility with older daemons, to set the team\*(Aqs interface name\&.
T}
T{
-config
+name
T}:T{
string
T}:T{
-\ \&
+team
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\&.
+The setting\*(Aqs 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"\&.
T}
.TE
.sp 1
@@ -2201,7 +2302,7 @@ T}
.nr an-no-space-flag 1
.nr an-break-flag 1
.br
-.B Table\ \&19.\ \&team-port setting
+.B Table\ \&20.\ \&team-port setting
.TS
allbox tab(:);
lB lB lB lB.
@@ -2218,22 +2319,22 @@ T}
l l l l
l l l l.
T{
-name
+config
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\&.
+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\&.
T}
T{
-config
+name
T}:T{
string
T}:T{
-\ \&
+team\-port
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\&.
+The setting\*(Aqs 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"\&.
T}
.TE
.sp 1
@@ -2242,7 +2343,7 @@ T}
.nr an-no-space-flag 1
.nr an-break-flag 1
.br
-.B Table\ \&20.\ \&vlan setting
+.B Table\ \&21.\ \&vlan setting
.TS
allbox tab(:);
lB lB lB lB.
@@ -2264,67 +2365,67 @@ l l l l
l l l l
l l l l.
T{
-name
+egress\-priority\-map
T}:T{
-string
+array of 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\&.
+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"\&.
T}
T{
-interface\-name
+flags
T}:T{
-string
+NMVlanFlags (uint32)
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\&.
+One or more flags which control the behavior and features of the VLAN interface\&. Flags include NM_VLAN_FLAG_REORDER_HEADERS (0x1) (reordering of output packet headers), NM_VLAN_FLAG_GVRP (0x2) (use of the GVRP protocol), and NM_VLAN_FLAG_LOOSE_BINDING (0x4) (loose binding of the interface to its master device\*(Aqs operating state)\&.
T}
T{
-parent
+id
T}:T{
-string
+uint32
T}:T{
-\ \&
+0
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\&.
+The VLAN identifier that the interface created by this connection should be assigned\&.
T}
T{
-id
+ingress\-priority\-map
T}:T{
-uint32
+array of string
T}:T{
-0
+[]
T}:T{
-The VLAN indentifier the interface created by this connection should be assigned\&.
+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"\&.
T}
T{
-flags
+interface\-name
T}:T{
-uint32
+string
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)\&.
+Deprecated in favor of connection\&.interface\-name, but can be used for backward\-compatibility with older daemons, to set the vlan\*(Aqs interface name\&.
T}
T{
-ingress\-priority\-map
+name
T}:T{
-array of string
+string
T}:T{
-\ \&
+vlan
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\&.
+The setting\*(Aqs 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"\&.
T}
T{
-egress\-priority\-map
+parent
T}:T{
-array of string
+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\&.
+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 "802\-3\-ethernet" setting with a "mac\-address" property\&.
T}
.TE
.sp 1
@@ -2333,7 +2434,7 @@ T}
.nr an-no-space-flag 1
.nr an-break-flag 1
.br
-.B Table\ \&21.\ \&vpn setting
+.B Table\ \&22.\ \&vpn setting
.TS
allbox tab(:);
lB lB lB lB.
@@ -2351,51 +2452,61 @@ 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{
+data
+T}:T{
+dict of string to string
+T}:T{
+\ \&
+T}:T{
+Dictionary of key/value pairs of VPN plugin specific data\&. Both keys and values must be strings\&.
+T}
+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\&.
+The setting\*(Aqs 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"\&.
T}
T{
-service\-type
+persistent
T}:T{
-string
+boolean
T}:T{
-\ \&
+FALSE
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\&.
+If the VPN service supports persistence, and this property is TRUE, the VPN will attempt to stay connected across link changes and outages, until explicitly disconnected\&.
T}
T{
-user\-name
+secrets
T}:T{
-string
+dict of string to 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\&.
+Dictionary of key/value pairs of VPN plugin specific secrets like passwords or private keys\&. Both keys and values must be strings\&.
T}
T{
-data
+service\-type
T}:T{
-dict of (string::string)
+string
T}:T{
\ \&
T}:T{
-Dictionary of key/value pairs of VPN plugin specific data\&. Both keys and values must be strings\&.
+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{
-secrets
+user\-name
T}:T{
-dict of (string::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\&.
+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}
.TE
.sp 1
@@ -2404,7 +2515,7 @@ T}
.nr an-no-space-flag 1
.nr an-break-flag 1
.br
-.B Table\ \&22.\ \&wimax setting
+.B Table\ \&23.\ \&wimax setting
.TS
allbox tab(:);
lB lB lB lB.
@@ -2422,13 +2533,22 @@ l l l l
l l l l
l l l l.
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}
+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\&.
+The setting\*(Aqs 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"\&.
T}
T{
network\-name
@@ -2439,15 +2559,6 @@ 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
@@ -2455,7 +2566,7 @@ T}
.nr an-no-space-flag 1
.nr an-break-flag 1
.br
-.B Table\ \&23.\ \&802-3-ethernet setting
+.B Table\ \&24.\ \&802-3-ethernet setting
.TS
allbox tab(:);
lB lB lB lB.
@@ -2482,31 +2593,22 @@ l l l l
l l l l
l l l l.
T{
-name
+auto\-negotiate
T}:T{
-string
+boolean
T}:T{
-802\-3\-ethernet
+TRUE
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\&.
+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\&.
T}
T{
-port
+cloned\-mac\-address
T}:T{
-string
+byte array
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\&.
+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{
duplex
@@ -2515,41 +2617,23 @@ 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\&.
+If specified, request that the device only use the specified duplex mode\&. Either "half" or "full"\&.
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\&.
+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{
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}
@@ -2563,13 +2647,22 @@ 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
+name
T}:T{
-array of string
+string
+T}:T{
+802\-3\-ethernet
+T}:T{
+The setting\*(Aqs 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"\&.
+T}
+T{
+port
+T}:T{
+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\&.
+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\&.
T}
T{
s390\-nettype
@@ -2578,16 +2671,34 @@ 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\&.
+s390 network device type; one of "qeth", "lcs", or "ctc", representing the different types of virtual network devices available on s390 systems\&.
T}
T{
s390\-options
T}:T{
-dict of (string::string)
+dict of string to 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\&.
+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])\&.
+T}
+T{
+s390\-subchannels
+T}:T{
+array of string
+T}:T{
+[]
+T}:T{
+Identifies specific subchannels that this network device uses for communication 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\&.
+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}
.TE
.sp 1
@@ -2596,7 +2707,7 @@ T}
.nr an-no-space-flag 1
.nr an-break-flag 1
.br
-.B Table\ \&24.\ \&802-11-wireless setting
+.B Table\ \&25.\ \&802-11-wireless setting
.TS
allbox tab(:);
lB lB lB lB.
@@ -2626,139 +2737,139 @@ l l l l
l l l l
l l l l.
T{
-name
+band
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\&.
+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\*(Aqs settings are compatible\&. This setting depends on specific driver capability and may not work with all drivers\&.
T}
T{
-ssid
+bssid
T}:T{
byte array
T}:T{
-[]
+\ \&
T}:T{
-SSID of the Wi\-Fi network\&. Must be specified\&.
+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{
-mode
+channel
T}:T{
-string
+uint32
T}:T{
-\ \&
+0
T}:T{
-Wi\-Fi network mode; one of \*(Aqinfrastructure\*(Aq, \*(Aqadhoc\*(Aq or \*(Aqap\*(Aq\&. If blank, infrastructure is assumed\&.
+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\&.
T}
T{
-band
+cloned\-mac\-address
T}:T{
-string
+byte array
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\&.
+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{
-channel
+hidden
T}:T{
-uint32
+boolean
T}:T{
-0
+FALSE
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\&.
+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}
T{
-bssid
+mac\-address
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\&.
+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{
-rate
+mac\-address\-blacklist
T}:T{
-uint32
+array of string
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\&.
+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")\&.
T}
T{
-tx\-power
+mode
T}:T{
-uint32
+string
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\&.
+Wi\-Fi network mode; one of "infrastructure", "adhoc" or "ap"\&. If blank, infrastructure is assumed\&.
T}
T{
-mac\-address
+mtu
T}:T{
-byte array
+uint32
T}:T{
-[]
+0
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)\&.
+If non\-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames\&.
T}
T{
-cloned\-mac\-address
+name
T}:T{
-byte array
+string
T}:T{
-[]
+802\-11\-wireless
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\&.
+The setting\*(Aqs 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"\&.
T}
T{
-mac\-address\-blacklist
+rate
T}:T{
-array of string
+uint32
T}:T{
-\ \&
+0
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)\&.
+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{
-mtu
+security
T}:T{
-uint32
+None
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\&.
+This property is deprecated, but can be set to the value \*(Aq802\-11\-wireless\-security\*(Aq when a wireless security setting is also present in the connection dictionary, for compatibility with very old NetworkManager daemons\&.
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\&.
+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\&.
T}
T{
-security
+ssid
T}:T{
-string
+byte array
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\&.
+SSID of the Wi\-Fi network\&. Must be specified\&.
T}
T{
-hidden
+tx\-power
T}:T{
-boolean
+uint32
T}:T{
-FALSE
+0
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\&.
+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}
.TE
.sp 1
@@ -2767,7 +2878,7 @@ T}
.nr an-no-space-flag 1
.nr an-break-flag 1
.br
-.B Table\ \&25.\ \&802-11-wireless-security setting
+.B Table\ \&26.\ \&802-11-wireless-security setting
.TS
allbox tab(:);
lB lB lB lB.
@@ -2800,166 +2911,166 @@ l l l l
l l l l
l l l l.
T{
-name
+auth\-alg
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\&.
+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\&.
T}
T{
-key\-mgmt
+group
T}:T{
-string
+array of 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\&.
+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"\&.
T}
T{
-wep\-tx\-keyidx
+key\-mgmt
T}:T{
-uint32
+string
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\&.
+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\&.
T}
T{
-auth\-alg
+leap\-password
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\&.
+The login password for legacy LEAP connections (ie, key\-mgmt = "ieee8021x" and auth\-alg = "leap")\&.
T}
T{
-proto
+leap\-password\-flags
T}:T{
-array of string
+NMSettingSecretFlags (uint32)
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\&.
+Flags indicating how to handle the "leap\-password" property\&. (see the section called \(lqSecret flag types:\(rq for flag values)
T}
T{
-pairwise
+leap\-username
T}:T{
-array of string
+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\&.
+The login username for legacy LEAP connections (ie, key\-mgmt = "ieee8021x" and auth\-alg = "leap")\&.
T}
T{
-group
+name
T}:T{
-array of string
+string
T}:T{
-\ \&
+802\-11\-wireless\-security
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\&.
+The setting\*(Aqs 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"\&.
T}
T{
-leap\-username
+pairwise
T}:T{
-string
+array of string
T}:T{
-\ \&
+[]
T}:T{
-The login username for legacy LEAP connections (ie, key\-mgmt = \*(Aqieee8021x\*(Aq and auth\-alg = \*(Aqleap\*(Aq)\&.
+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"\&.
T}
T{
-wep\-key0
+proto
T}:T{
-string
+array of 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\&.
+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\&.
T}
T{
-wep\-key1
+psk
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\&.
+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{
-wep\-key2
+psk\-flags
T}:T{
-string
+NMSettingSecretFlags (uint32)
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\&.
+Flags indicating how to handle the "psk" property\&. (see the section called \(lqSecret flag types:\(rq for flag values)
T}
T{
-wep\-key3
+wep\-key\-flags
T}:T{
-string
+NMSettingSecretFlags (uint32)
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\&.
+Flags indicating how to handle the "wep\-key0", "wep\-key1", "wep\-key2", and "wep\-key3" properties\&. (see the section called \(lqSecret flag types:\(rq for flag values)
T}
T{
-wep\-key\-flags
+wep\-key\-type
T}:T{
-uint32
+NMWepKeyType (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)
+Controls the interpretation of WEP keys\&. Allowed values are NM_WEP_KEY_TYPE_KEY (1), 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 (2), 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\&.
T}
T{
-wep\-key\-type
+wep\-key0
T}:T{
-uint32
+string
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\&.
+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\&.
T}
T{
-psk
+wep\-key1
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\&.
+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\&.
T}
T{
-psk\-flags
+wep\-key2
T}:T{
-uint32
+string
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)
+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\&.
T}
T{
-leap\-password
+wep\-key3
T}:T{
string
T}:T{
\ \&
T}:T{
-The login password for legacy LEAP connections (ie, key\-mgmt = \*(Aqieee8021x\*(Aq and auth\-alg = \*(Aqleap\*(Aq)\&.
+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\&.
T}
T{
-leap\-password\-flags
+wep\-tx\-keyidx
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)
+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\&.
T}
.TE
.sp 1
@@ -3024,6 +3135,6 @@ NetworkManager developers
or distro plugin\-specific location
.SH "SEE ALSO"
.PP
-https://live\&.gnome\&.org/NetworkManagerConfiguration
+https://wiki\&.gnome\&.org/Projects/NetworkManager/ConfigurationSpecification
.PP
NetworkManager(8), nmcli(1), nmcli\-examples(5), NetworkManager\&.conf(5)
diff --git a/man/nm-settings.xml b/man/nm-settings.xml
new file mode 100644
index 000000000..7c3dd96a5
--- /dev/null
+++ b/man/nm-settings.xml
@@ -0,0 +1,343 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
+<refentry id="nm-settings"><refentryinfo><date>19 December 2014</date></refentryinfo><refmeta><refentrytitle>nm-settings</refentrytitle><manvolnum>5</manvolnum><refmiscinfo class="source">NetworkManager</refmiscinfo><refmiscinfo class="manual">Configuration</refmiscinfo><refmiscinfo class="version">1.0.0</refmiscinfo></refmeta><refnamediv><refname>nm-settings</refname><refpurpose>Description of settings and properties of NetworkManager connection profiles</refpurpose></refnamediv><refsect1><title>DESCRIPTION</title><para>
+ 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 <emphasis>settings service</emphasis> and are exported on D-Bus
+ (<emphasis>/org/freedesktop/NetworkManager/Settings/&lt;num&gt;</emphasis> objects).
+ The conceptual objects can be described as follows:
+ <variablelist><varlistentry><term>Connection (profile)</term><listitem><para>
+ 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 <emphasis>Settings</emphasis>
+ objects.
+ </para></listitem></varlistentry></variablelist><variablelist><varlistentry><term>Setting</term><listitem><para>
+ A group of related key/value pairs describing a specific piece of a
+ <emphasis>Connection (profile)</emphasis>. 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 <function>class_init</function> functions near the bottom of
+ each setting source file.
+ </para></listitem></varlistentry></variablelist><variablelist><para>
+ 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 <emphasis>nmcli</emphasis>
+ that allows direct configuration of the settings and properties according to a connection
+ profile type. <emphasis>nmcli</emphasis> connection editor has also a built-in
+ <emphasis>describe</emphasis> command that can display description of particular settings
+ and properties of this page.
+ </para></variablelist></para>
+ <table><title>802-1x 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 align="left">altsubject-matches</entry><entry align="left">array of string</entry><entry align="left">[]</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><entry align="left">anonymous-identity</entry><entry align="left">string</entry><entry align="left"/><entry>Anonymous identity string for EAP authentication methods. Used as the unencrypted identity with EAP types that support different tunneled identity like EAP-TTLS.</entry></row>
+ <row><entry align="left">ca-cert</entry><entry align="left">byte array</entry><entry align="left"/><entry>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 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.</entry></row>
+ <row><entry align="left">ca-path</entry><entry align="left">string</entry><entry align="left"/><entry>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.</entry></row>
+ <row><entry align="left">client-cert</entry><entry align="left">byte array</entry><entry align="left"/><entry>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 NUL byte.</entry></row>
+ <row><entry align="left">eap</entry><entry align="left">array of string</entry><entry align="left">[]</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 align="left">identity</entry><entry align="left">string</entry><entry align="left"/><entry>Identity string for EAP authentication methods. Often the user's user or login name.</entry></row>
+ <row><entry align="left">name</entry><entry align="left">string</entry><entry align="left">802-1x</entry><entry>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".</entry></row>
+ <row><entry align="left">pac-file</entry><entry align="left">string</entry><entry align="left"/><entry>UTF-8 encoded file path containing PAC for EAP-FAST.</entry></row>
+ <row><entry align="left">password</entry><entry align="left">string</entry><entry align="left"/><entry>UTF-8 encoded password used for EAP authentication methods. If both the "password" property and the "password-raw" property are specified, "password" is preferred.</entry></row>
+ <row><entry align="left">password-flags</entry><entry align="left">NMSettingSecretFlags (uint32)</entry><entry align="left"/><entry>Flags indicating how to handle the "password" property. (see <xref linkend="secrets-flags"/> for flag values)</entry></row>
+ <row><entry align="left">password-raw</entry><entry align="left">byte array</entry><entry align="left"/><entry>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 "password" property and the "password-raw" property are specified, "password" is preferred.</entry></row>
+ <row><entry align="left">password-raw-flags</entry><entry align="left">NMSettingSecretFlags (uint32)</entry><entry align="left"/><entry>Flags indicating how to handle the "password-raw" property. (see <xref linkend="secrets-flags"/> for flag values)</entry></row>
+ <row><entry align="left">phase1-fast-provisioning</entry><entry align="left">string</entry><entry align="left"/><entry>Enables or disables in-line provisioning of EAP-FAST credentials when FAST is specified as the EAP method in the "eap" 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.</entry></row>
+ <row><entry align="left">phase1-peaplabel</entry><entry align="left">string</entry><entry align="left"/><entry>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.</entry></row>
+ <row><entry align="left">phase1-peapver</entry><entry align="left">string</entry><entry align="left"/><entry>Forces which PEAP version is used when PEAP is set as the EAP method in the "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.</entry></row>
+ <row><entry align="left">phase2-altsubject-matches</entry><entry align="left">array of string</entry><entry align="left">[]</entry><entry>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><entry align="left">phase2-auth</entry><entry align="left">string</entry><entry align="left"/><entry>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 "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.</entry></row>
+ <row><entry align="left">phase2-autheap</entry><entry align="left">string</entry><entry align="left"/><entry>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.</entry></row>
+ <row><entry align="left">phase2-ca-cert</entry><entry align="left">byte array</entry><entry align="left"/><entry>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 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.</entry></row>
+ <row><entry align="left">phase2-ca-path</entry><entry align="left">string</entry><entry align="left"/><entry>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.</entry></row>
+ <row><entry align="left">phase2-client-cert</entry><entry align="left">byte array</entry><entry align="left"/><entry>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 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.</entry></row>
+ <row><entry align="left">phase2-private-key</entry><entry align="left">byte array</entry><entry align="left"/><entry>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 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 "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 "phase2-private-key-password" property must be set to the password used to decode the PKCS#12 private key and certificate.</entry></row>
+ <row><entry align="left">phase2-private-key-password</entry><entry align="left">string</entry><entry align="left"/><entry>The password used to decrypt the "phase 2" private key specified in the "phase2-private-key" property when the private key either uses the path scheme, or is a PKCS#12 format key.</entry></row>
+ <row><entry align="left">phase2-private-key-password-flags</entry><entry align="left">NMSettingSecretFlags (uint32)</entry><entry align="left"/><entry>Flags indicating how to handle the "phase2-private-key-password" property. (see <xref linkend="secrets-flags"/> for flag values)</entry></row>
+ <row><entry align="left">phase2-subject-match</entry><entry align="left">string</entry><entry align="left"/><entry>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.</entry></row>
+ <row><entry align="left">pin</entry><entry align="left">string</entry><entry align="left"/><entry>PIN used for EAP authentication methods.</entry></row>
+ <row><entry align="left">pin-flags</entry><entry align="left">NMSettingSecretFlags (uint32)</entry><entry align="left"/><entry>Flags indicating how to handle the "pin" property. (see <xref linkend="secrets-flags"/> for flag values)</entry></row>
+ <row><entry align="left">private-key</entry><entry align="left">byte array</entry><entry align="left"/><entry>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 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 "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. WARNING: "private-key" 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.</entry></row>
+ <row><entry align="left">private-key-password</entry><entry align="left">string</entry><entry align="left"/><entry>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.</entry></row>
+ <row><entry align="left">private-key-password-flags</entry><entry align="left">NMSettingSecretFlags (uint32)</entry><entry align="left"/><entry>Flags indicating how to handle the "private-key-password" property. (see <xref linkend="secrets-flags"/> for flag values)</entry></row>
+ <row><entry align="left">subject-match</entry><entry align="left">string</entry><entry align="left"/><entry>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.</entry></row>
+ <row><entry align="left">system-ca-certs</entry><entry align="left">boolean</entry><entry align="left">FALSE</entry><entry>When TRUE, overrides the "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.</entry></row>
+ </tbody></tgroup></table>
+ <table><title>adsl 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 align="left">encapsulation</entry><entry align="left">string</entry><entry align="left"/><entry>Encapsulation of ADSL connection. Can be "vcmux" or "llc".</entry></row>
+ <row><entry align="left">name</entry><entry align="left">string</entry><entry align="left">adsl</entry><entry>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".</entry></row>
+ <row><entry align="left">password</entry><entry align="left">string</entry><entry align="left"/><entry>Password used to authenticate with the ADSL service.</entry></row>
+ <row><entry align="left">password-flags</entry><entry align="left">NMSettingSecretFlags (uint32)</entry><entry align="left"/><entry>Flags indicating how to handle the "password" property. (see <xref linkend="secrets-flags"/> for flag values)</entry></row>
+ <row><entry align="left">protocol</entry><entry align="left">string</entry><entry align="left"/><entry>ADSL connection protocol. Can be "pppoa", "pppoe" or "ipoatm".</entry></row>
+ <row><entry align="left">username</entry><entry align="left">string</entry><entry align="left"/><entry>Username used to authenticate with the ADSL service.</entry></row>
+ <row><entry align="left">vci</entry><entry align="left">uint32</entry><entry align="left">0</entry><entry>VCI of ADSL connection</entry></row>
+ <row><entry align="left">vpi</entry><entry align="left">uint32</entry><entry align="left">0</entry><entry>VPI of ADSL connection</entry></row>
+ </tbody></tgroup></table>
+ <table><title>bluetooth 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 align="left">bdaddr</entry><entry align="left">byte array</entry><entry align="left"/><entry>The Bluetooth address of the device.</entry></row>
+ <row><entry align="left">name</entry><entry align="left">string</entry><entry align="left">bluetooth</entry><entry>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".</entry></row>
+ <row><entry align="left">type</entry><entry align="left">string</entry><entry align="left"/><entry>Either "dun" for Dial-Up Networking connections or "panu" for Personal Area Networking connections to devices supporting the NAP profile.</entry></row>
+ </tbody></tgroup></table>
+ <table><title>bond 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 align="left">interface-name</entry><entry align="left">string</entry><entry align="left"/><entry>Deprecated in favor of connection.interface-name, but can be used for backward-compatibility with older daemons, to set the bond's interface name.</entry></row>
+ <row><entry align="left">name</entry><entry align="left">string</entry><entry align="left">bond</entry><entry>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".</entry></row>
+ <row><entry align="left">options</entry><entry align="left">dict of string to string</entry><entry align="left"/><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></tgroup></table>
+ <table><title>bridge 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 align="left">ageing-time</entry><entry align="left">uint32</entry><entry align="left">300</entry><entry>The Ethernet MAC address aging time, in seconds.</entry></row>
+ <row><entry align="left">forward-delay</entry><entry align="left">uint32</entry><entry align="left">15</entry><entry>The Spanning Tree Protocol (STP) forwarding delay, in seconds.</entry></row>
+ <row><entry align="left">hello-time</entry><entry align="left">uint32</entry><entry align="left">2</entry><entry>The Spanning Tree Protocol (STP) hello time, in seconds.</entry></row>
+ <row><entry align="left">interface-name</entry><entry align="left">string</entry><entry align="left"/><entry>Deprecated in favor of connection.interface-name, but can be used for backward-compatibility with older daemons, to set the bridge's interface name.</entry></row>
+ <row><entry align="left">mac-address</entry><entry align="left">byte array</entry><entry align="left"/><entry>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.</entry></row>
+ <row><entry align="left">max-age</entry><entry align="left">uint32</entry><entry align="left">20</entry><entry>The Spanning Tree Protocol (STP) maximum message age, in seconds.</entry></row>
+ <row><entry align="left">name</entry><entry align="left">string</entry><entry align="left">bridge</entry><entry>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".</entry></row>
+ <row><entry align="left">priority</entry><entry align="left">uint32</entry><entry align="left">32768</entry><entry>Sets the Spanning Tree Protocol (STP) priority for this bridge. Lower values are "better"; the lowest priority bridge will be elected the root bridge.</entry></row>
+ <row><entry align="left">stp</entry><entry align="left">boolean</entry><entry align="left">TRUE</entry><entry>Controls whether Spanning Tree Protocol (STP) is enabled for this bridge.</entry></row>
+ </tbody></tgroup></table>
+ <table><title>bridge-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 align="left">hairpin-mode</entry><entry align="left">boolean</entry><entry align="left">FALSE</entry><entry>Enables or disabled "hairpin mode" for the port, which allows frames to be sent back out through the port the frame was received on.</entry></row>
+ <row><entry align="left">name</entry><entry align="left">string</entry><entry align="left">bridge-port</entry><entry>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".</entry></row>
+ <row><entry align="left">path-cost</entry><entry align="left">uint32</entry><entry align="left">100</entry><entry>The Spanning Tree Protocol (STP) port cost for destinations via this port.</entry></row>
+ <row><entry align="left">priority</entry><entry align="left">uint32</entry><entry align="left">32</entry><entry>The Spanning Tree Protocol (STP) priority of this bridge port.</entry></row>
+ </tbody></tgroup></table>
+ <table><title>cdma 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 align="left">name</entry><entry align="left">string</entry><entry align="left">cdma</entry><entry>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".</entry></row>
+ <row><entry align="left">number</entry><entry align="left">string</entry><entry align="left"/><entry>The number to dial to establish the connection to the CDMA-based mobile broadband network, if any. If not specified, the default number (#777) is used when required.</entry></row>
+ <row><entry align="left">password</entry><entry align="left">string</entry><entry align="left"/><entry>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.</entry></row>
+ <row><entry align="left">password-flags</entry><entry align="left">NMSettingSecretFlags (uint32)</entry><entry align="left"/><entry>Flags indicating how to handle the "password" property. (see <xref linkend="secrets-flags"/> for flag values)</entry></row>
+ <row><entry align="left">username</entry><entry align="left">string</entry><entry align="left"/><entry>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.</entry></row>
+ </tbody></tgroup></table>
+ <table><title>connection 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 align="left">autoconnect</entry><entry align="left">boolean</entry><entry align="left">TRUE</entry><entry>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.</entry></row>
+ <row><entry align="left">autoconnect-priority</entry><entry align="left">int32</entry><entry align="left">0</entry><entry>The autoconnect priority. If the connection is set to autoconnect, connections with higher priority will be preferred. Defaults to 0. The higher number means higher priority.</entry></row>
+ <row><entry align="left">gateway-ping-timeout</entry><entry align="left">uint32</entry><entry align="left">0</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>
+ <row><entry align="left">id</entry><entry align="left">string</entry><entry align="left"/><entry>A human readable unique identifier for the connection, like "Work Wi-Fi" or "T-Mobile 3G".</entry></row>
+ <row><entry align="left">interface-name</entry><entry align="left">string</entry><entry align="left"/><entry>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 software devices this specifies the name of the created device. 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 align="left">master</entry><entry align="left">string</entry><entry align="left"/><entry>Interface name of the master device or UUID of the master connection.</entry></row>
+ <row><entry align="left">name</entry><entry align="left">string</entry><entry align="left">connection</entry><entry>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".</entry></row>
+ <row><entry align="left">permissions</entry><entry align="left">array of string</entry><entry align="left">[]</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 list. 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 present must be ignored and is reserved for future use. All of [type], [id], and [reserved] must be valid UTF-8.</entry></row>
+ <row><entry align="left">read-only</entry><entry align="left">boolean</entry><entry align="left">FALSE</entry><entry>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.</entry></row>
+ <row><entry align="left">secondaries</entry><entry align="left">array of string</entry><entry align="left">[]</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 align="left">slave-type</entry><entry align="left">string</entry><entry align="left"/><entry>Setting name of the device type of this slave's master connection (eg, "bond"), or NULL if this connection is not a slave.</entry></row>
+ <row><entry align="left">timestamp</entry><entry align="left">uint64</entry><entry align="left">0</entry><entry>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).</entry></row>
+ <row><entry align="left">type</entry><entry align="left">string</entry><entry align="left"/><entry>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).</entry></row>
+ <row><entry align="left">uuid</entry><entry align="left">string</entry><entry align="left"/><entry>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, it should not be changed when the "id" property or NMSettingIP4Config changes, but might need to be re-created when the Wi-Fi SSID, mobile broadband network provider, or "type" property changes. The UUID must be in the format "2815492f-7e56-435e-b2e9-246bd7cdc664" (ie, contains only hexadecimal characters and "-").</entry></row>
+ <row><entry align="left">zone</entry><entry align="left">string</entry><entry align="left"/><entry>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.</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 align="left">app-fcoe-flags</entry><entry align="left">NMSettingDcbFlags (uint32)</entry><entry align="left"/><entry>Specifies the NMSettingDcbFlags for the DCB FCoE application. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4).</entry></row>
+ <row><entry align="left">app-fcoe-mode</entry><entry align="left">string</entry><entry align="left">"fabric"</entry><entry>The FCoE controller mode; either "fabric" (default) or "vn2vn".</entry></row>
+ <row><entry align="left">app-fcoe-priority</entry><entry align="left">int32</entry><entry align="left">-1</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 NM_SETTING_DCB_FLAG_ENABLE (0x1) flag.</entry></row>
+ <row><entry align="left">app-fip-flags</entry><entry align="left">NMSettingDcbFlags (uint32)</entry><entry align="left"/><entry>Specifies the NMSettingDcbFlags for the DCB FIP application. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4).</entry></row>
+ <row><entry align="left">app-fip-priority</entry><entry align="left">int32</entry><entry align="left">-1</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 NM_SETTING_DCB_FLAG_ENABLE (0x1) flag.</entry></row>
+ <row><entry align="left">app-iscsi-flags</entry><entry align="left">NMSettingDcbFlags (uint32)</entry><entry align="left"/><entry>Specifies the NMSettingDcbFlags for the DCB iSCSI application. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4).</entry></row>
+ <row><entry align="left">app-iscsi-priority</entry><entry align="left">int32</entry><entry align="left">-1</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 NM_SETTING_DCB_FLAG_ENABLE (0x1) flag.</entry></row>
+ <row><entry align="left">name</entry><entry align="left">string</entry><entry align="left">dcb</entry><entry>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".</entry></row>
+ <row><entry align="left">priority-bandwidth</entry><entry align="left">array of uint32</entry><entry align="left"/><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 align="left">priority-flow-control</entry><entry align="left">array of uint32</entry><entry align="left"/><entry>An array of 8 boolean 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.</entry></row>
+ <row><entry align="left">priority-flow-control-flags</entry><entry align="left">NMSettingDcbFlags (uint32)</entry><entry align="left"/><entry>Specifies the NMSettingDcbFlags for DCB Priority Flow Control (PFC). Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4).</entry></row>
+ <row><entry align="left">priority-group-bandwidth</entry><entry align="left">array of uint32</entry><entry align="left"/><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 align="left">priority-group-flags</entry><entry align="left">NMSettingDcbFlags (uint32)</entry><entry align="left"/><entry>Specifies the NMSettingDcbFlags for DCB Priority Groups. Flags may be any combination of NM_SETTING_DCB_FLAG_ENABLE (0x1), NM_SETTING_DCB_FLAG_ADVERTISE (0x2), and NM_SETTING_DCB_FLAG_WILLING (0x4).</entry></row>
+ <row><entry align="left">priority-group-id</entry><entry align="left">array of uint32</entry><entry align="left"/><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 align="left">priority-strict-bandwidth</entry><entry align="left">array of uint32</entry><entry align="left"/><entry>An array of 8 boolean 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.</entry></row>
+ <row><entry align="left">priority-traffic-class</entry><entry align="left">array of uint32</entry><entry align="left"/><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></table>
+ <table><title>generic 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 align="left">name</entry><entry align="left">string</entry><entry align="left">generic</entry><entry>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".</entry></row>
+ </tbody></tgroup></table>
+ <table><title>gsm 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 align="left">apn</entry><entry align="left">string</entry><entry align="left"/><entry>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.</entry></row>
+ <row><entry align="left">home-only</entry><entry align="left">boolean</entry><entry align="left">FALSE</entry><entry>When TRUE, only connections to the home network will be allowed. Connections to roaming networks will not be made.</entry></row>
+ <row><entry align="left">name</entry><entry align="left">string</entry><entry align="left">gsm</entry><entry>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".</entry></row>
+ <row><entry align="left">network-id</entry><entry align="left">string</entry><entry align="left"/><entry>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.</entry></row>
+ <row><entry align="left">number</entry><entry align="left">string</entry><entry align="left"/><entry>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.</entry></row>
+ <row><entry align="left">password</entry><entry align="left">string</entry><entry align="left"/><entry>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.</entry></row>
+ <row><entry align="left">password-flags</entry><entry align="left">NMSettingSecretFlags (uint32)</entry><entry align="left"/><entry>Flags indicating how to handle the "password" property. (see <xref linkend="secrets-flags"/> for flag values)</entry></row>
+ <row><entry align="left">pin</entry><entry align="left">string</entry><entry align="left"/><entry>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.</entry></row>
+ <row><entry align="left">pin-flags</entry><entry align="left">NMSettingSecretFlags (uint32)</entry><entry align="left"/><entry>Flags indicating how to handle the "pin" property. (see <xref linkend="secrets-flags"/> for flag values)</entry></row>
+ <row><entry align="left">username</entry><entry align="left">string</entry><entry align="left"/><entry>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.</entry></row>
+ </tbody></tgroup></table>
+ <table><title>infiniband 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 align="left">mac-address</entry><entry align="left">byte array</entry><entry align="left"/><entry>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).</entry></row>
+ <row><entry align="left">mtu</entry><entry align="left">uint32</entry><entry align="left">0</entry><entry>If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple frames.</entry></row>
+ <row><entry align="left">name</entry><entry align="left">string</entry><entry align="left">infiniband</entry><entry>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".</entry></row>
+ <row><entry align="left">p-key</entry><entry align="left">int32</entry><entry align="left">-1</entry><entry>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.</entry></row>
+ <row><entry align="left">parent</entry><entry align="left">string</entry><entry align="left"/><entry>The interface name of the parent device of this device. Normally NULL, but if the "p_key" property is set, then you must specify the base device by setting either this property or "mac-address".</entry></row>
+ <row><entry align="left">transport-mode</entry><entry align="left">string</entry><entry align="left"/><entry>The IP-over-InfiniBand transport mode. Either "datagram" or "connected".</entry></row>
+ </tbody></tgroup></table>
+ <table><title>ipv4 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 align="left">address-data</entry><entry align="left">array of vardict</entry><entry align="left"/><entry>Array of IPv4 addresses. Each address dictionary contains at least 'address' and 'prefix' entries, containing the IP address as a string, and the prefix length as a uint32. Additional attributes may also exist on some addresses.</entry></row>
+ <row><entry align="left">addresses</entry><entry align="left">array of array of uint32</entry><entry align="left"/><entry>Deprecated in favor of the 'address-data' and 'gateway' properties, but this can be used for backward-compatibility with older daemons. Note that if you send this property the daemon will ignore 'address-data' and 'gateway'. 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.</entry></row>
+ <row><entry align="left">dhcp-client-id</entry><entry align="left">string</entry><entry align="left"/><entry>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.</entry></row>
+ <row><entry align="left">dhcp-hostname</entry><entry align="left">string</entry><entry align="left"/><entry>If the "dhcp-send-hostname" property is TRUE, then the specified name will be sent to the DHCP server when acquiring a lease.</entry></row>
+ <row><entry align="left">dhcp-send-hostname</entry><entry align="left">boolean</entry><entry align="left">TRUE</entry><entry>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 NULL and this property is TRUE, the current persistent hostname of the computer is sent.</entry></row>
+ <row><entry align="left">dns</entry><entry align="left">array of uint32</entry><entry align="left">[]</entry><entry>Array of IP addresses of DNS servers (as network-byte-order integers)</entry></row>
+ <row><entry align="left">dns-search</entry><entry align="left">array of string</entry><entry align="left">[]</entry><entry>Array of DNS search domains.</entry></row>
+ <row><entry align="left">gateway</entry><entry align="left">string</entry><entry align="left"/><entry>The gateway associated with this configuration. This is only meaningful if "addresses" is also set.</entry></row>
+ <row><entry align="left">ignore-auto-dns</entry><entry align="left">boolean</entry><entry align="left">FALSE</entry><entry>When "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.</entry></row>
+ <row><entry align="left">ignore-auto-routes</entry><entry align="left">boolean</entry><entry align="left">FALSE</entry><entry>When "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.</entry></row>
+ <row><entry align="left">may-fail</entry><entry align="left">boolean</entry><entry align="left">TRUE</entry><entry>If TRUE, allow overall network configuration to proceed even if the configuration specified by this property 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 on the NMSettingIP4Config allows the overall network configuration to succeed if IPv4 configuration fails but IPv6 configuration completes successfully.</entry></row>
+ <row><entry align="left">method</entry><entry align="left">string</entry><entry align="left"/><entry>IP configuration method. NMSettingIP4Config and NMSettingIP6Config both support "auto", "manual", and "link-local". See the subclass-specific documentation for other values. In general, for the "auto" method, properties such as "dns" and "routes" specify information that is added on to the information returned from automatic configuration. The "ignore-auto-routes" and "ignore-auto-dns" properties modify this behavior. For methods that imply no upstream network, such as "shared" or "link-local", these properties must be empty.</entry></row>
+ <row><entry align="left">name</entry><entry align="left">string</entry><entry align="left">ipv4</entry><entry>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".</entry></row>
+ <row><entry align="left">never-default</entry><entry align="left">boolean</entry><entry align="left">FALSE</entry><entry>If TRUE, this connection will never be the default connection for this IP type, meaning it will never be assigned the default route by NetworkManager.</entry></row>
+ <row><entry align="left">route-data</entry><entry align="left">array of vardict</entry><entry align="left"/><entry>Array of IPv4 routes. Each route dictionary contains at least 'dest' and 'prefix' entries, containing the destination IP address as a string, and the prefix length as a uint32. Most routes will also have a 'gateway' entry, containing the gateway IP address as a string. If the route has a 'metric' entry (containing a uint32), that will be used as the metric for the route (otherwise NM will pick a default value appropriate to the device). Additional attributes may also exist on some routes.</entry></row>
+ <row><entry align="left">route-metric</entry><entry align="left">int64</entry><entry align="left">-1</entry><entry>The default metric for routes that don't explicitly specify a metric. The default value -1 means that the metric is choosen automatically based on the device type. The metric applies to dynamic routes, manual (static) routes that don't have an explicit metric setting, address prefix routes, and the default route. Note that for IPv6, the kernel accepts zero (0) but coerces it to 1024 (user default). Hence, setting this property to zero effectively mean setting it to 1024. For IPv4, zero is a regular value for the metric.</entry></row>
+ <row><entry align="left">routes</entry><entry align="left">array of array of uint32</entry><entry align="left"/><entry>Deprecated in favor of the 'route-data' property, but this can be used for backward-compatibility with older daemons. Note that if you send this property the daemon will ignore 'route-data'. 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. If the metric is 0, NM will choose an appropriate default metric for the device. (There is no way to explicitly specify an actual metric of 0 with this property.)</entry></row>
+ </tbody></tgroup></table>
+ <table><title>ipv6 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 align="left">address-data</entry><entry align="left">array of vardict</entry><entry align="left"/><entry>Array of IPv6 addresses. Each address dictionary contains at least 'address' and 'prefix' entries, containing the IP address as a string, and the prefix length as a uint32. Additional attributes may also exist on some addresses.</entry></row>
+ <row><entry align="left">addresses</entry><entry align="left">array of legacy IPv6 address struct (a(ayuay))</entry><entry align="left"/><entry>Deprecated in favor of the 'address-data' and 'gateway' properties, but this can be used for backward-compatibility with older daemons. Note that if you send this property the daemon will ignore 'address-data' and 'gateway'. Array of IPv6 address structures. Each IPv6 address structure is composed of an IPv6 address, a prefix length (1 - 128), and an IPv6 gateway address. The gateway may be zeroed out if no gateway exists for that subnet.</entry></row>
+ <row><entry align="left">dhcp-hostname</entry><entry align="left">string</entry><entry align="left"/><entry>If the "dhcp-send-hostname" property is TRUE, then the specified name will be sent to the DHCP server when acquiring a lease.</entry></row>
+ <row><entry align="left">dhcp-send-hostname</entry><entry align="left">boolean</entry><entry align="left">TRUE</entry><entry>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 NULL and this property is TRUE, the current persistent hostname of the computer is sent.</entry></row>
+ <row><entry align="left">dns</entry><entry align="left">array of byte array</entry><entry align="left">[]</entry><entry>Array of IP addresses of DNS servers (in network byte order)</entry></row>
+ <row><entry align="left">dns-search</entry><entry align="left">array of string</entry><entry align="left">[]</entry><entry>Array of DNS search domains.</entry></row>
+ <row><entry align="left">gateway</entry><entry align="left">string</entry><entry align="left"/><entry>The gateway associated with this configuration. This is only meaningful if "addresses" is also set.</entry></row>
+ <row><entry align="left">ignore-auto-dns</entry><entry align="left">boolean</entry><entry align="left">FALSE</entry><entry>When "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.</entry></row>
+ <row><entry align="left">ignore-auto-routes</entry><entry align="left">boolean</entry><entry align="left">FALSE</entry><entry>When "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.</entry></row>
+ <row><entry align="left">ip6-privacy</entry><entry align="left">NMSettingIP6ConfigPrivacy (int32)</entry><entry align="left"/><entry>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).</entry></row>
+ <row><entry align="left">may-fail</entry><entry align="left">boolean</entry><entry align="left">TRUE</entry><entry>If TRUE, allow overall network configuration to proceed even if the configuration specified by this property 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 on the NMSettingIP4Config allows the overall network configuration to succeed if IPv4 configuration fails but IPv6 configuration completes successfully.</entry></row>
+ <row><entry align="left">method</entry><entry align="left">string</entry><entry align="left"/><entry>IP configuration method. NMSettingIP4Config and NMSettingIP6Config both support "auto", "manual", and "link-local". See the subclass-specific documentation for other values. In general, for the "auto" method, properties such as "dns" and "routes" specify information that is added on to the information returned from automatic configuration. The "ignore-auto-routes" and "ignore-auto-dns" properties modify this behavior. For methods that imply no upstream network, such as "shared" or "link-local", these properties must be empty.</entry></row>
+ <row><entry align="left">name</entry><entry align="left">string</entry><entry align="left">ipv6</entry><entry>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".</entry></row>
+ <row><entry align="left">never-default</entry><entry align="left">boolean</entry><entry align="left">FALSE</entry><entry>If TRUE, this connection will never be the default connection for this IP type, meaning it will never be assigned the default route by NetworkManager.</entry></row>
+ <row><entry align="left">route-data</entry><entry align="left">array of vardict</entry><entry align="left"/><entry>Array of IPv6 routes. Each route dictionary contains at least 'dest' and 'prefix' entries, containing the destination IP address as a string, and the prefix length as a uint32. Most routes will also have a 'next-hop' entry, containing the next hop IP address as a string. If the route has a 'metric' entry (containing a uint32), that will be used as the metric for the route (otherwise NM will pick a default value appropriate to the device). Additional attributes may also exist on some routes.</entry></row>
+ <row><entry align="left">route-metric</entry><entry align="left">int64</entry><entry align="left">-1</entry><entry>The default metric for routes that don't explicitly specify a metric. The default value -1 means that the metric is choosen automatically based on the device type. The metric applies to dynamic routes, manual (static) routes that don't have an explicit metric setting, address prefix routes, and the default route. Note that for IPv6, the kernel accepts zero (0) but coerces it to 1024 (user default). Hence, setting this property to zero effectively mean setting it to 1024. For IPv4, zero is a regular value for the metric.</entry></row>
+ <row><entry align="left">routes</entry><entry align="left">array of legacy IPv6 route struct (a(ayuayu))</entry><entry align="left"/><entry>Deprecated in favor of the 'route-data' property, but this can be used for backward-compatibility with older daemons. Note that if you send this property the daemon will ignore 'route-data'. Array of IPv6 route structures. Each IPv6 route structure is composed of an IPv6 address, a prefix length (1 - 128), an IPv6 next hop address (which may be zeroed out if there is no next hop), and a metric. If the metric is 0, NM will choose an appropriate default metric for the device.</entry></row>
+ </tbody></tgroup></table>
+ <table><title>802-11-olpc-mesh 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 align="left">channel</entry><entry align="left">uint32</entry><entry align="left">0</entry><entry>Channel on which the mesh network to join is located.</entry></row>
+ <row><entry align="left">dhcp-anycast-address</entry><entry align="left">byte array</entry><entry align="left"/><entry>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.</entry></row>
+ <row><entry align="left">name</entry><entry align="left">string</entry><entry align="left">802-11-olpc-mesh</entry><entry>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".</entry></row>
+ <row><entry align="left">ssid</entry><entry align="left">byte array</entry><entry align="left"/><entry>SSID of the mesh network to join.</entry></row>
+ </tbody></tgroup></table>
+ <table><title>ppp 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 align="left">baud</entry><entry align="left">uint32</entry><entry align="left">0</entry><entry>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.</entry></row>
+ <row><entry align="left">crtscts</entry><entry align="left">boolean</entry><entry align="left">FALSE</entry><entry>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.</entry></row>
+ <row><entry align="left">lcp-echo-failure</entry><entry align="left">uint32</entry><entry align="left">0</entry><entry>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.</entry></row>
+ <row><entry align="left">lcp-echo-interval</entry><entry align="left">uint32</entry><entry align="left">0</entry><entry>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.</entry></row>
+ <row><entry align="left">mppe-stateful</entry><entry align="left">boolean</entry><entry align="left">FALSE</entry><entry>If TRUE, stateful MPPE is used. See pppd documentation for more information on stateful MPPE.</entry></row>
+ <row><entry align="left">mru</entry><entry align="left">uint32</entry><entry align="left">0</entry><entry>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.</entry></row>
+ <row><entry align="left">mtu</entry><entry align="left">uint32</entry><entry align="left">0</entry><entry>If non-zero, instruct pppd to send packets no larger than the specified size.</entry></row>
+ <row><entry align="left">name</entry><entry align="left">string</entry><entry align="left">ppp</entry><entry>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".</entry></row>
+ <row><entry align="left">no-vj-comp</entry><entry align="left">boolean</entry><entry align="left">FALSE</entry><entry>If TRUE, Van Jacobsen TCP header compression will not be requested.</entry></row>
+ <row><entry align="left">noauth</entry><entry align="left">boolean</entry><entry align="left">TRUE</entry><entry>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.</entry></row>
+ <row><entry align="left">nobsdcomp</entry><entry align="left">boolean</entry><entry align="left">FALSE</entry><entry>If TRUE, BSD compression will not be requested.</entry></row>
+ <row><entry align="left">nodeflate</entry><entry align="left">boolean</entry><entry align="left">FALSE</entry><entry>If TRUE, "deflate" compression will not be requested.</entry></row>
+ <row><entry align="left">refuse-chap</entry><entry align="left">boolean</entry><entry align="left">FALSE</entry><entry>If TRUE, the CHAP authentication method will not be used.</entry></row>
+ <row><entry align="left">refuse-eap</entry><entry align="left">boolean</entry><entry align="left">FALSE</entry><entry>If TRUE, the EAP authentication method will not be used.</entry></row>
+ <row><entry align="left">refuse-mschap</entry><entry align="left">boolean</entry><entry align="left">FALSE</entry><entry>If TRUE, the MSCHAP authentication method will not be used.</entry></row>
+ <row><entry align="left">refuse-mschapv2</entry><entry align="left">boolean</entry><entry align="left">FALSE</entry><entry>If TRUE, the MSCHAPv2 authentication method will not be used.</entry></row>
+ <row><entry align="left">refuse-pap</entry><entry align="left">boolean</entry><entry align="left">FALSE</entry><entry>If TRUE, the PAP authentication method will not be used.</entry></row>
+ <row><entry align="left">require-mppe</entry><entry align="left">boolean</entry><entry align="left">FALSE</entry><entry>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.</entry></row>
+ <row><entry align="left">require-mppe-128</entry><entry align="left">boolean</entry><entry align="left">FALSE</entry><entry>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.</entry></row>
+ </tbody></tgroup></table>
+ <table><title>pppoe 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 align="left">name</entry><entry align="left">string</entry><entry align="left">pppoe</entry><entry>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".</entry></row>
+ <row><entry align="left">password</entry><entry align="left">string</entry><entry align="left"/><entry>Password used to authenticate with the PPPoE service.</entry></row>
+ <row><entry align="left">password-flags</entry><entry align="left">NMSettingSecretFlags (uint32)</entry><entry align="left"/><entry>Flags indicating how to handle the "password" property. (see <xref linkend="secrets-flags"/> for flag values)</entry></row>
+ <row><entry align="left">service</entry><entry align="left">string</entry><entry align="left"/><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 align="left">username</entry><entry align="left">string</entry><entry align="left"/><entry>Username used to authenticate with the PPPoE service.</entry></row>
+ </tbody></tgroup></table>
+ <table><title>serial 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 align="left">baud</entry><entry align="left">uint32</entry><entry align="left">57600</entry><entry>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.</entry></row>
+ <row><entry align="left">bits</entry><entry align="left">uint32</entry><entry align="left">8</entry><entry>Byte-width of the serial communication. The 8 in "8n1" for example.</entry></row>
+ <row><entry align="left">name</entry><entry align="left">string</entry><entry align="left">serial</entry><entry>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".</entry></row>
+ <row><entry align="left">parity</entry><entry align="left">byte</entry><entry align="left"/><entry>The connection parity: 69 (ASCII 'E') for even parity, 111 (ASCII 'o') for odd, 110 (ASCII 'n') for none.</entry></row>
+ <row><entry align="left">send-delay</entry><entry align="left">uint64</entry><entry align="left">0</entry><entry>Time to delay between each byte sent to the modem, in microseconds.</entry></row>
+ <row><entry align="left">stopbits</entry><entry align="left">uint32</entry><entry align="left">1</entry><entry>Number of stop bits for communication on the serial port. Either 1 or 2. The 1 in "8n1" for example.</entry></row>
+ </tbody></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 align="left">config</entry><entry align="left">string</entry><entry align="left"/><entry>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.</entry></row>
+ <row><entry align="left">interface-name</entry><entry align="left">string</entry><entry align="left"/><entry>Deprecated in favor of connection.interface-name, but can be used for backward-compatibility with older daemons, to set the team's interface name.</entry></row>
+ <row><entry align="left">name</entry><entry align="left">string</entry><entry align="left">team</entry><entry>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".</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 align="left">config</entry><entry align="left">string</entry><entry align="left"/><entry>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.</entry></row>
+ <row><entry align="left">name</entry><entry align="left">string</entry><entry align="left">team-port</entry><entry>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".</entry></row>
+ </tbody></tgroup></table>
+ <table><title>vlan 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 align="left">egress-priority-map</entry><entry align="left">array of string</entry><entry align="left">[]</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>
+ <row><entry align="left">flags</entry><entry align="left">NMVlanFlags (uint32)</entry><entry align="left"/><entry>One or more flags which control the behavior and features of the VLAN interface. Flags include NM_VLAN_FLAG_REORDER_HEADERS (0x1) (reordering of output packet headers), NM_VLAN_FLAG_GVRP (0x2) (use of the GVRP protocol), and NM_VLAN_FLAG_LOOSE_BINDING (0x4) (loose binding of the interface to its master device's operating state).</entry></row>
+ <row><entry align="left">id</entry><entry align="left">uint32</entry><entry align="left">0</entry><entry>The VLAN identifier that the interface created by this connection should be assigned.</entry></row>
+ <row><entry align="left">ingress-priority-map</entry><entry align="left">array of string</entry><entry align="left">[]</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 align="left">interface-name</entry><entry align="left">string</entry><entry align="left"/><entry>Deprecated in favor of connection.interface-name, but can be used for backward-compatibility with older daemons, to set the vlan's interface name.</entry></row>
+ <row><entry align="left">name</entry><entry align="left">string</entry><entry align="left">vlan</entry><entry>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".</entry></row>
+ <row><entry align="left">parent</entry><entry align="left">string</entry><entry align="left"/><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 an "802-3-ethernet" setting with a "mac-address" property.</entry></row>
+ </tbody></tgroup></table>
+ <table><title>vpn 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 align="left">data</entry><entry align="left">dict of string to string</entry><entry align="left"/><entry>Dictionary of key/value pairs of VPN plugin specific data. Both keys and values must be strings.</entry></row>
+ <row><entry align="left">name</entry><entry align="left">string</entry><entry align="left">vpn</entry><entry>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".</entry></row>
+ <row><entry align="left">persistent</entry><entry align="left">boolean</entry><entry align="left">FALSE</entry><entry>If the VPN service supports persistence, and this property is TRUE, the VPN will attempt to stay connected across link changes and outages, until explicitly disconnected.</entry></row>
+ <row><entry align="left">secrets</entry><entry align="left">dict of string to string</entry><entry align="left"/><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>
+ <row><entry align="left">service-type</entry><entry align="left">string</entry><entry align="left"/><entry>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.</entry></row>
+ <row><entry align="left">user-name</entry><entry align="left">string</entry><entry align="left"/><entry>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.</entry></row>
+ </tbody></tgroup></table>
+ <table><title>wimax 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 align="left">mac-address</entry><entry align="left">byte array</entry><entry align="left"/><entry>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).</entry></row>
+ <row><entry align="left">name</entry><entry align="left">string</entry><entry align="left">wimax</entry><entry>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".</entry></row>
+ <row><entry align="left">network-name</entry><entry align="left">string</entry><entry align="left"/><entry>Network Service Provider (NSP) name of the WiMAX network this connection should use.</entry></row>
+ </tbody></tgroup></table>
+ <table><title>802-3-ethernet 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 align="left">auto-negotiate</entry><entry align="left">boolean</entry><entry align="left">TRUE</entry><entry>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.</entry></row>
+ <row><entry align="left">cloned-mac-address</entry><entry align="left">byte array</entry><entry align="left"/><entry>If specified, request that the device use this MAC address instead of its permanent MAC address. This is known as MAC cloning or spoofing.</entry></row>
+ <row><entry align="left">duplex</entry><entry align="left">string</entry><entry align="left"/><entry>If specified, request that the device only use the specified duplex mode. Either "half" or "full".</entry></row>
+ <row><entry align="left">mac-address</entry><entry align="left">byte array</entry><entry align="left"/><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 align="left">mac-address-blacklist</entry><entry align="left">array of string</entry><entry align="left">[]</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 align="left">mtu</entry><entry align="left">uint32</entry><entry align="left">0</entry><entry>If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames.</entry></row>
+ <row><entry align="left">name</entry><entry align="left">string</entry><entry align="left">802-3-ethernet</entry><entry>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".</entry></row>
+ <row><entry align="left">port</entry><entry align="left">string</entry><entry align="left"/><entry>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.</entry></row>
+ <row><entry align="left">s390-nettype</entry><entry align="left">string</entry><entry align="left"/><entry>s390 network device type; one of "qeth", "lcs", or "ctc", representing the different types of virtual network devices available on s390 systems.</entry></row>
+ <row><entry align="left">s390-options</entry><entry align="left">dict of string to string</entry><entry align="left"/><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. Key names must contain only alphanumeric characters (ie, [a-zA-Z0-9]).</entry></row>
+ <row><entry align="left">s390-subchannels</entry><entry align="left">array of string</entry><entry align="left">[]</entry><entry>Identifies specific subchannels that this network device uses for communication 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><entry align="left">speed</entry><entry align="left">uint32</entry><entry align="left">0</entry><entry>If non-zero, request that the device use only the specified speed. In Mbit/s, ie 100 == 100Mbit/s.</entry></row>
+ </tbody></tgroup></table>
+ <table><title>802-11-wireless 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 align="left">band</entry><entry align="left">string</entry><entry align="left"/><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 align="left">bssid</entry><entry align="left">byte array</entry><entry align="left"/><entry>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.</entry></row>
+ <row><entry align="left">channel</entry><entry align="left">uint32</entry><entry align="left">0</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 align="left">cloned-mac-address</entry><entry align="left">byte array</entry><entry align="left"/><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 align="left">hidden</entry><entry align="left">boolean</entry><entry align="left">FALSE</entry><entry>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.</entry></row>
+ <row><entry align="left">mac-address</entry><entry align="left">byte array</entry><entry align="left"/><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 align="left">mac-address-blacklist</entry><entry align="left">array of string</entry><entry align="left">[]</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><entry align="left">mode</entry><entry align="left">string</entry><entry align="left"/><entry>Wi-Fi network mode; one of "infrastructure", "adhoc" or "ap". If blank, infrastructure is assumed.</entry></row>
+ <row><entry align="left">mtu</entry><entry align="left">uint32</entry><entry align="left">0</entry><entry>If non-zero, only transmit packets of the specified size or smaller, breaking larger packets up into multiple Ethernet frames.</entry></row>
+ <row><entry align="left">name</entry><entry align="left">string</entry><entry align="left">802-11-wireless</entry><entry>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".</entry></row>
+ <row><entry align="left">rate</entry><entry align="left">uint32</entry><entry align="left">0</entry><entry>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.</entry></row>
+ <row><entry align="left">security</entry><entry align="left">None</entry><entry align="left"/><entry>This property is deprecated, but can be set to the value '802-11-wireless-security' when a wireless security setting is also present in the connection dictionary, for compatibility with very old NetworkManager daemons.</entry></row>
+ <row><entry align="left">seen-bssids</entry><entry align="left">array of string</entry><entry align="left">[]</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 align="left">ssid</entry><entry align="left">byte array</entry><entry align="left"/><entry>SSID of the Wi-Fi network. Must be specified.</entry></row>
+ <row><entry align="left">tx-power</entry><entry align="left">uint32</entry><entry align="left">0</entry><entry>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.</entry></row>
+ </tbody></tgroup></table>
+ <table><title>802-11-wireless-security 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 align="left">auth-alg</entry><entry align="left">string</entry><entry align="left"/><entry>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.</entry></row>
+ <row><entry align="left">group</entry><entry align="left">array of string</entry><entry align="left">[]</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><entry align="left">key-mgmt</entry><entry align="left">string</entry><entry align="left"/><entry>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.</entry></row>
+ <row><entry align="left">leap-password</entry><entry align="left">string</entry><entry align="left"/><entry>The login password for legacy LEAP connections (ie, key-mgmt = "ieee8021x" and auth-alg = "leap").</entry></row>
+ <row><entry align="left">leap-password-flags</entry><entry align="left">NMSettingSecretFlags (uint32)</entry><entry align="left"/><entry>Flags indicating how to handle the "leap-password" property. (see <xref linkend="secrets-flags"/> for flag values)</entry></row>
+ <row><entry align="left">leap-username</entry><entry align="left">string</entry><entry align="left"/><entry>The login username for legacy LEAP connections (ie, key-mgmt = "ieee8021x" and auth-alg = "leap").</entry></row>
+ <row><entry align="left">name</entry><entry align="left">string</entry><entry align="left">802-11-wireless-security</entry><entry>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".</entry></row>
+ <row><entry align="left">pairwise</entry><entry align="left">array of string</entry><entry align="left">[]</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 align="left">proto</entry><entry align="left">array of string</entry><entry align="left">[]</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 align="left">psk</entry><entry align="left">string</entry><entry align="left"/><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 align="left">psk-flags</entry><entry align="left">NMSettingSecretFlags (uint32)</entry><entry align="left"/><entry>Flags indicating how to handle the "psk" property. (see <xref linkend="secrets-flags"/> for flag values)</entry></row>
+ <row><entry align="left">wep-key-flags</entry><entry align="left">NMSettingSecretFlags (uint32)</entry><entry align="left"/><entry>Flags indicating how to handle the "wep-key0", "wep-key1", "wep-key2", and "wep-key3" properties. (see <xref linkend="secrets-flags"/> for flag values)</entry></row>
+ <row><entry align="left">wep-key-type</entry><entry align="left">NMWepKeyType (uint32)</entry><entry align="left"/><entry>Controls the interpretation of WEP keys. Allowed values are NM_WEP_KEY_TYPE_KEY (1), 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 (2), 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.</entry></row>
+ <row><entry align="left">wep-key0</entry><entry align="left">string</entry><entry align="left"/><entry>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.</entry></row>
+ <row><entry align="left">wep-key1</entry><entry align="left">string</entry><entry align="left"/><entry>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.</entry></row>
+ <row><entry align="left">wep-key2</entry><entry align="left">string</entry><entry align="left"/><entry>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.</entry></row>
+ <row><entry align="left">wep-key3</entry><entry align="left">string</entry><entry align="left"/><entry>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.</entry></row>
+ <row><entry align="left">wep-tx-keyidx</entry><entry align="left">uint32</entry><entry align="left">0</entry><entry>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.</entry></row>
+ </tbody></tgroup></table>
+<refsect2 id="secrets-flags"><title>Secret flag types:</title><para>
+ Each secret property in a setting has an associated <emphasis>flags</emphasis> property
+ that describes how to handle that secret. The <emphasis>flags</emphasis> property is a bitfield
+ that contains zero or more of the following values logically OR-ed together.
+ </para><itemizedlist><listitem><para>0x0 (none) - the system is responsible for providing and storing this secret.</para></listitem><listitem><para>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.</para></listitem><listitem><para>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.</para></listitem><listitem><para>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.</para></listitem></itemizedlist></refsect2></refsect1><refsect1><title>AUTHOR</title><para><author><firstname>NetworkManager developers</firstname></author></para></refsect1><refsect1><title>FILES</title><para>/etc/NetworkManager/system-connections</para><para>or distro plugin-specific location</para></refsect1><refsect1><title>SEE ALSO</title><para>https://wiki.gnome.org/Projects/NetworkManager/ConfigurationSpecification</para><para>NetworkManager(8), nmcli(1), nmcli-examples(5), NetworkManager.conf(5)</para></refsect1></refentry>
diff --git a/man/nm-settings.xsl b/man/nm-settings.xsl
new file mode 100644
index 000000000..24e415359
--- /dev/null
+++ b/man/nm-settings.xsl
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+ <xsl:output
+ method="xml"
+ doctype-public="-//OASIS//DTD DocBook XML V4.3//EN"
+ doctype-system="http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"
+ />
+
+ <xsl:param name="date"/>
+ <xsl:param name="version"/>
+
+ <xsl:template match="nm-setting-docs">
+ <refentry id="nm-settings">
+ <refentryinfo>
+ <date><xsl:value-of select="$date"/></date>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>nm-settings</refentrytitle>
+ <manvolnum>5</manvolnum>
+ <refmiscinfo class="source">NetworkManager</refmiscinfo>
+ <refmiscinfo class="manual">Configuration</refmiscinfo>
+ <refmiscinfo class="version"><xsl:value-of select="$version"/></refmiscinfo>
+ </refmeta>
+ <refnamediv>
+ <refname>nm-settings</refname>
+ <refpurpose>Description of settings and properties of NetworkManager connection profiles</refpurpose>
+ </refnamediv>
+ <refsect1>
+ <title>DESCRIPTION</title>
+ <para>
+ 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 <emphasis>settings service</emphasis> and are exported on D-Bus
+ (<emphasis>/org/freedesktop/NetworkManager/Settings/&lt;num&gt;</emphasis> objects).
+ The conceptual objects can be described as follows:
+ <variablelist>
+ <varlistentry>
+ <term>Connection (profile)</term>
+ <listitem>
+ <para>
+ 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 <emphasis>Settings</emphasis>
+ objects.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ <variablelist>
+ <varlistentry>
+ <term>Setting</term>
+ <listitem>
+ <para>
+ A group of related key/value pairs describing a specific piece of a
+ <emphasis>Connection (profile)</emphasis>. 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 <function>class_init</function> functions near the bottom of
+ each setting source file.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ <variablelist>
+ <para>
+ 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 <emphasis>nmcli</emphasis>
+ that allows direct configuration of the settings and properties according to a connection
+ profile type. <emphasis>nmcli</emphasis> connection editor has also a built-in
+ <emphasis>describe</emphasis> command that can display description of particular settings
+ and properties of this page.
+ </para>
+ </variablelist>
+ </para>
+ <xsl:apply-templates/>
+ <refsect2 id="secrets-flags">
+ <title>Secret flag types:</title>
+ <para>
+ Each secret property in a setting has an associated <emphasis>flags</emphasis> property
+ that describes how to handle that secret. The <emphasis>flags</emphasis> property is a bitfield
+ that contains zero or more of the following values logically OR-ed together.
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>0x0 (none) - the system is responsible for providing and storing this secret.</para>
+ </listitem>
+ <listitem>
+ <para>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.</para>
+ </listitem>
+ <listitem>
+ <para>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.</para>
+ </listitem>
+ <listitem>
+ <para>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.</para>
+ </listitem>
+ </itemizedlist>
+ </refsect2>
+ </refsect1>
+ <refsect1>
+ <title>AUTHOR</title>
+ <para>
+ <author>
+ <firstname>NetworkManager developers</firstname>
+ </author>
+ </para>
+ </refsect1>
+ <refsect1>
+ <title>FILES</title>
+ <para>/etc/NetworkManager/system-connections</para>
+ <para>or distro plugin-specific location</para>
+ </refsect1>
+ <refsect1>
+ <title>SEE ALSO</title>
+ <para>https://wiki.gnome.org/Projects/NetworkManager/ConfigurationSpecification</para>
+ <para>NetworkManager(8), nmcli(1), nmcli-examples(5), NetworkManager.conf(5)</para>
+ </refsect1>
+ </refentry>
+ </xsl:template>
+
+ <xsl:template match="setting">
+ <table>
+ <title><xsl:value-of select="@name"/> 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>
+ <xsl:apply-templates/>
+ </tbody>
+ </tgroup>
+ </table>
+ </xsl:template>
+
+ <xsl:template match="property">
+ <xsl:variable name="setting_name" select="../@name"/>
+ <row>
+ <entry align="left"><xsl:value-of select="@name"/></entry>
+ <entry align="left"><xsl:value-of select="@type"/></entry>
+ <entry align="left"><xsl:value-of select="@default"/></entry>
+ <entry><xsl:value-of select="@description"/><xsl:if test="@type = 'NMSettingSecretFlags (uint32)'"> (see <xref linkend="secrets-flags"/> for flag values)</xsl:if></entry>
+ </row>
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/man/nmcli-examples.5 b/man/nmcli-examples.5
index 7145d682c..23045ecd5 100644
--- a/man/nmcli-examples.5
+++ b/man/nmcli-examples.5
@@ -2,12 +2,12 @@
.\" Title: nmcli-examples
.\" Author:
.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
-.\" Date: 16 June 2014
+.\" Date: 19 November 2014
.\" Manual: Examples
-.\" Source: NetworkManager 0.9.10
+.\" Source: NetworkManager 1.0
.\" Language: English
.\"
-.TH "NMCLI\-EXAMPLES" "5" "" "NetworkManager 0\&.9\&.10" "Examples"
+.TH "NMCLI\-EXAMPLES" "5" "" "NetworkManager 1\&.0" "Examples"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -121,6 +121,7 @@ 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\&.IS\-SOFTWARE: no
GENERAL\&.NM\-MANAGED: yes
GENERAL\&.AUTOCONNECT: yes
GENERAL\&.FIRMWARE\-MISSING: no
@@ -350,6 +351,7 @@ interface, the second to
\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 +ipv4\&.dns 1\&.2\&.3\&.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
@@ -362,7 +364,7 @@ $ nmcli \-p con show my\-con\-em1
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
+\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 will become the default route if this profile is activated on em1 interface (and there is no connection with higher priority)\&. The next two addresses do not specify a prefix, so a default prefix will be used, i\&.e\&. 32 for IPv4 and 128 for IPv6\&. The second, third and fourth 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
@@ -469,6 +471,7 @@ connection\&.uuid: de89cdeb\-a3e1\-4d53\-8fa0\-c22546c775
connection\&.interface\-name: \-\-
connection\&.type: 802\-3\-ethernet
connection\&.autoconnect: yes
+connection\&.autoconnect\-priority: 0
connection\&.timestamp: 0
connection\&.read\-only: no
connection\&.permissions:
@@ -494,7 +497,9 @@ ipv4\&.method: auto
ipv4\&.dns:
ipv4\&.dns\-search:
ipv4\&.addresses:
+ipv4\&.gateway: \-\-
ipv4\&.routes:
+ipv4\&.route\-metric: \-1
ipv4\&.ignore\-auto\-routes: no
ipv4\&.ignore\-auto\-dns: no
ipv4\&.dhcp\-client\-id: \-\-
@@ -507,7 +512,9 @@ ipv6\&.method: auto
ipv6\&.dns:
ipv6\&.dns\-search:
ipv6\&.addresses:
+ipv6\&.gateway: \-\-
ipv6\&.routes:
+ipv6\&.route\-metric: \-1
ipv6\&.ignore\-auto\-routes: no
ipv6\&.ignore\-auto\-dns: no
ipv6\&.never\-default: no
@@ -524,22 +531,23 @@ 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\&.
+Array of IP addresses\&.
[nmcli specific description]
Enter a list of IPv4 addresses formatted as:
- ip[/prefix] [gateway], ip[/prefix] [gateway],\&.\&.\&.
+ ip[/prefix], ip[/prefix],\&.\&.\&.
Missing prefix is regarded as prefix of 32\&.
-Example: 192\&.168\&.1\&.5/24 192\&.168\&.1\&.1, 10\&.0\&.0\&.11/24
+Example: 192\&.168\&.1\&.5/24, 10\&.0\&.0\&.11/24
-nmcli ipv4\&.addresses> set 192\&.168\&.1\&.100/24 192\&.168\&.1\&.1
+nmcli ipv4\&.addresses> set 192\&.168\&.1\&.100/24
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 }
+addresses: 192\&.168\&.1\&.100/24
nmcli ipv4\&.addresses> back
nmcli ipv4> b
+nmcli> set ipv4\&.gateway 192\&.168\&.1\&.1
nmcli> verify
Verify connection: OK
nmcli> print
@@ -551,6 +559,7 @@ connection\&.uuid: de89cdeb\-a3e1\-4d53\-8fa0\-c22546c775
connection\&.interface\-name: \-\-
connection\&.type: 802\-3\-ethernet
connection\&.autoconnect: yes
+connection\&.autoconnect\-priority: 0
connection\&.timestamp: 0
connection\&.read\-only: no
connection\&.permissions:
@@ -575,8 +584,10 @@ connection\&.gateway\-ping\-timeout: 0
ipv4\&.method: manual
ipv4\&.dns:
ipv4\&.dns\-search:
-ipv4\&.addresses: { ip = 192\&.168\&.1\&.100/24, gw = 192\&.168\&.1\&.1 }
+ipv4\&.addresses: 192\&.168\&.1\&.100/24
+ipv4\&.gateway: 192\&.168\&.1\&.1
ipv4\&.routes:
+ipv4\&.route\-metric: \-1
ipv4\&.ignore\-auto\-routes: no
ipv4\&.ignore\-auto\-dns: no
ipv4\&.dhcp\-client\-id: \-\-
@@ -590,6 +601,7 @@ ipv6\&.dns:
ipv6\&.dns\-search:
ipv6\&.addresses:
ipv6\&.routes:
+ipv6\&.route\-metric: \-1
ipv6\&.ignore\-auto\-routes: no
ipv6\&.ignore\-auto\-dns: no
ipv6\&.never\-default: no
@@ -607,6 +619,7 @@ connection\&.uuid: de89cdeb\-a3e1\-4d53\-8fa0\-c22546c775
connection\&.interface\-name: \-\-
connection\&.type: 802\-3\-ethernet
connection\&.autoconnect: yes
+connection\&.autoconnect\-priority: 0
connection\&.timestamp: 0
connection\&.read\-only: no
connection\&.permissions:
@@ -629,10 +642,12 @@ connection\&.gateway\-ping\-timeout: 0
802\-3\-ethernet\&.s390\-options:
\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
ipv4\&.method: manual
-ipv4\&.dns: 8\&.8\&.8\&.8, 8\&.8\&.4\&.4
+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\&.addresses: 192\&.168\&.1\&.100/24
+ipv4\&.gateway: 192\&.168\&.1\&.1
ipv4\&.routes:
+ipv4\&.route\-metric: \-1
ipv4\&.ignore\-auto\-routes: no
ipv4\&.ignore\-auto\-dns: no
ipv4\&.dhcp\-client\-id: \-\-
@@ -645,7 +660,9 @@ ipv6\&.method: auto
ipv6\&.dns:
ipv6\&.dns\-search:
ipv6\&.addresses:
+ipv6\&.gateway: \-\-
ipv6\&.routes:
+ipv6\&.route\-metric: \-1
ipv6\&.ignore\-auto\-routes: no
ipv6\&.ignore\-auto\-dns: no
ipv6\&.never\-default: no
@@ -664,7 +681,7 @@ nmcli> quit
.RE
.\}
.PP
-Example session in the nmcli interactive connection editor\&. The scenario creates an Ethernet connection (configuration) with static addressing (IPs and DNS)\&.
+Example session in the nmcli interactive connection editor\&. The scenario creates an Ethernet connection profile with static addressing (IPs and DNS)\&.
.SH "SEE ALSO"
.PP
\fBnmcli\fR(1),
diff --git a/man/nmcli.1.in b/man/nmcli.1.in
index 08f07b4ab..c9a69cb9b 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 - 2014 Red Hat, Inc.
+.\" Copyright 2010 - 2014 Red Hat, Inc.
.\"
-.TH NMCLI "1" "28 February 2014"
+.TH NMCLI "1" "3 December 2014"
.SH NAME
nmcli \- command\(hyline tool for controlling NetworkManager
@@ -33,7 +33,7 @@ nmcli \- command\(hyline tool for controlling NetworkManager
.sp
.IR OBJECT " := { "
-.BR general " | " networking " | " radio " | " connection " | " device
+.BR general " | " networking " | " radio " | " connection " | " device " | " agent
.RI " }"
.sp
@@ -131,6 +131,8 @@ incompatible versions may produce incorrect results.
.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.
+This option controls, for example, whether you will be prompted for a password
+if it is required for connecting to a network.
.TP
.B \-w, \-\-wait <seconds>
This option sets a timeout period for which \fInmcli\fP will wait for \fINetworkManager\fP
@@ -287,12 +289,12 @@ 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 show [--active] [ id | uuid | path | apath ] <ID> ...
+.B show [--active] [--show-secrets] [ 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.
+only the active profiles are taken into account. When --show-secrets option is
+specified, secrets associated with the profile will be revealed too.
\fIid\fP, \fIuuid\fP, \fIpath\fP and \fIapath\fP keywords can be used if
\fI<ID>\fP is ambiguous.
.RS
@@ -327,10 +329,10 @@ 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>]
+.B up [ id | uuid | path ] <ID> [ifname <ifname>] [ap <BSSID>] [nsp <name>] [passwd <file with passwords>]
.RE
.RS
-.B up ifname <ifname> [ap <BSSID>] [nsp <name>]
+.B up ifname <ifname> [ap <BSSID>] [nsp <name>] [passwd <file with passwords>]
.RS
.br
Activate a connection. The connection is identified by its name, UUID or D-Bus
@@ -355,18 +357,38 @@ Available options are:
\(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 \fIpasswd-file\fP 13
+\(en some networks may require credentials during activation. You can give these
+credentials using this option.
+Each line of the file should contain one password in the form of
+.br
+\fBsetting_name.property_name:the password\fP
+.br
+For example, for WPA Wi-Fi with PSK, the line would be
+.br
+\fI802-11-wireless-security.psk:secret12345\fP
+.br
+For 802.1X password, the line would be
+.br
+\fI802-1x.password:my 1X password\fP
+.br
+nmcli also accepts "wifi-sec" and "wifi" strings instead of "802-11-wireless-security".
+When NetworkManager requires a password and it is not given, nmcli will ask for it
+when run with --ask. If --ask was not passed, NetworkManager can ask another secret
+agent that may be running (typically a GUI secret agent, such as nm-applet or
+gnome-shell).
.RE
.RE
.TP
-.B down [ id | uuid | path | apath ] <ID>
+.B down [ id | uuid | path | apath ] <ID> ...
.br
Deactivate a connection from a device without preventing the device from
-further auto-activation.
+further auto-activation. Multiple connections can be passed to the command.
.sp
-Be aware that this command deactivates the specified active connection. The device
+Be aware that this command deactivates the specified active connection, but 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
+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
In most cases you may want to use \fIdevice disconnect\fP command instead.
@@ -418,6 +440,8 @@ Note: use quotes around \fB*\fP to suppress shell expansion.
\(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[mode infrastructure|ap|adhoc]\fP" 42
+\(en Wi-Fi network mode. If blank, \fIinfrastructure\fP is assumed.
.IP "\fI[mtu <MTU>]\fP" 42
\(en MTU
.RE
@@ -683,7 +707,7 @@ of its latest state.
.B device - show and manage network interfaces
.br
.TP
-.SS \fICOMMAND\fP := { status | show | connect | disconnect | wifi | wimax }
+.SS \fICOMMAND\fP := { status | show | connect | disconnect | delete | wifi | wimax }
.sp
.RS
.TP
@@ -713,6 +737,14 @@ connections without user/manual intervention.
.br
If '--wait' option is not specified, the default timeout will be 10 seconds.
.TP
+.B delete <ifname>
+.br
+Delete a device. The command removes the interface from the system. Note that
+this only works for software devices like bonds, bridges, teams, etc.
+Hardware devices (like Ethernet) cannot be deleted by the command.
+.br
+If '--wait' option is not specified, the default timeout will be 10 seconds.
+.TP
.B wifi [list [ifname <ifname>] [bssid <BSSID>]]
.br
List available Wi\(hyFi access points. The \fIifname\fP and \fIbssid\fP options
@@ -761,6 +793,39 @@ This command does not show the APs, use 'nmcli device wifi list' for that.
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.
+.RE
+
+.TP
+.B agent \- run nmcli as a NetworkManager secret agent, or polkit agent
+.br
+.TP
+.SS \fICOMMAND\fP := { secret | polkit | all }
+.sp
+.RS
+.TP
+.B secret
+.br
+Register nmcli as a NetworkManager secret agent and listen for secret requests.
+You do usually not need this command, because nmcli can handle secrets when
+connecting to networks. However, you may find the command useful when you use
+another tool for activating connections and you do not have a secret agent
+available (like nm-applet).
+.TP
+.B polkit
+.br
+Register nmcli as a polkit agent for the user session and listen for
+authorization requests. You do not usually need this command, because nmcli can
+handle polkit actions related to NetworkManager operations (when run with
+--ask). However, you may find the command useful when you want to run a simple
+text based polkit agent and you do not have an agent of a desktop environment.
+Note that running this command makes nmcli handle all polkit requests, not only
+NetworkManager related ones, because only one polkit agent can run for the
+session.
+.TP
+.B all
+.br
+Runs nmcli as both NetworkManager secret and a polkit agent.
+.RE
.SH ENVIRONMENT VARIABLES
\fInmcli\fP's behavior is affected by the following environment variables.
@@ -851,6 +916,11 @@ shows all connection profile names and their auto-connect property.
.IP
shows details for "My default em1" connection profile.
+.IP "\fB\f(CWnmcli connection show --show-secrets \(dq\&My Home WiFi\(dq\&\fP\fP"
+.IP
+shows details for "My Home WiFi" connection profile with all passwords.
+Without \fI--show-secrets\fP option, secrets would not be displayed.
+
.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
diff --git a/man/nmtui.1.in b/man/nmtui.1.in
new file mode 100644
index 000000000..32b76954e
--- /dev/null
+++ b/man/nmtui.1.in
@@ -0,0 +1,66 @@
+.\" nmtui (1) manual page
+.\"
+.\" This is free documentation; 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.
+.\"
+.\" The GNU General Public License's references to "object code"
+.\" and "executables" are to be interpreted as the output of any
+.\" document formatting or typesetting system, including
+.\" intermediate and printed output.
+.\"
+.\" This manual is distributed in the hope that 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 Licence along
+.\" with this manual; if not, write to the Free Software Foundation, Inc.,
+.\" 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+.\"
+.\" Copyright 2014 Red Hat, Inc.
+.\"
+.TH NMTUI "1" "6 November 2014"
+
+.SH NAME
+nmtui \- Text User Interface for controlling NetworkManager
+.SH SYNOPSIS
+.B nmtui
+.RI " [ " edit " | " connect " | " hostname " ] [ ... ] "
+.P
+.B nmtui\-edit
+.RI " [ " connection-id " | " connection-name " ] "
+.P
+.B nmtui\-connect
+.RI " [ " connection-name " | " connection-uuid " | " device-name " | " Wi-Fi-SSID " ] "
+.P
+.B nmtui\-hostname
+
+.SH DESCRIPTION
+.B nmtui
+is a curses\(hybased TUI application for interacting with \fINetworkManager\fP.
+.P
+When starting \fInmtui\fP, the user is prompted to choose the activity to perform
+unless it was specified as the first argument.
+.P
+The supported activities are:
+.IP \(em 4
+\fIedit\fP: show a connection editor that supports adding, modifying, viewing and deleting
+connections. It provides similar functionality as \fInm\-connection\-editor\fP.
+.IP \(em 4
+\fIconnect\fP: show a list of available connections, with the option to activate or deactivate
+them. It provides similar functionality as \fInm\-applet\fP.
+.IP \(em 4
+\fIhostname\fP: set the system hostname.
+
+.P
+Corresponding to above activities, \fInmtui\fP also comes with binaries named
+\fInmtui\-edit\fP, \fInmtui\-connect\fP, and \fInmtui-hostname\fP to skip the selection
+of the activities.
+
+.SH SEE ALSO
+.BR NetworkManager(8),
+.BR nmcli(1).
+.BR nm\-applet(1).
+.BR nm\-connection\-editor(1).
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 6368a9f59..926dd6c39 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -1,19 +1,86 @@
[encoding: UTF-8]
# List of source files containing translatable strings.
# Please keep this file sorted alphabetically.
-cli/src/common.c
-cli/src/connections.c
-cli/src/devices.c
-cli/src/network-manager.c
-cli/src/nmcli.c
-cli/src/settings.c
-cli/src/utils.c
+clients/cli/agent.c
+clients/cli/common.c
+clients/cli/connections.c
+clients/cli/devices.c
+clients/cli/general.c
+clients/cli/nmcli.c
+clients/cli/polkit-agent.c
+clients/cli/settings.c
+clients/cli/utils.c
+clients/common/nm-polkit-listener.c
+clients/common/nm-secret-agent-simple.c
+clients/nm-online.c
+clients/tui/newt/nmt-newt-utils.c
+clients/tui/nm-editor-utils.c
+clients/tui/nmt-connect-connection-list.c
+clients/tui/nmt-device-entry.c
+clients/tui/nmt-edit-connection-list.c
+clients/tui/nmt-editor-section.c
+clients/tui/nmt-editor.c
+clients/tui/nmt-mtu-entry.c
+clients/tui/nmt-page-bond.c
+clients/tui/nmt-page-bridge-port.c
+clients/tui/nmt-page-bridge.c
+clients/tui/nmt-page-dsl.c
+clients/tui/nmt-page-ethernet.c
+clients/tui/nmt-page-infiniband.c
+clients/tui/nmt-page-ip4.c
+clients/tui/nmt-page-ip6.c
+clients/tui/nmt-page-ppp.c
+clients/tui/nmt-page-team-port.c
+clients/tui/nmt-page-team.c
+clients/tui/nmt-page-vlan.c
+clients/tui/nmt-page-wifi.c
+clients/tui/nmt-password-dialog.c
+clients/tui/nmt-password-fields.c
+clients/tui/nmt-route-editor.c
+clients/tui/nmt-route-table.c
+clients/tui/nmt-slave-list.c
+clients/tui/nmt-widget-list.c
+clients/tui/nmtui-connect.c
+clients/tui/nmtui-edit.c
+clients/tui/nmtui-hostname.c
+clients/tui/nmtui.c
+libnm-core/crypto.c
+libnm-core/crypto_gnutls.c
+libnm-core/crypto_nss.c
+libnm-core/nm-connection.c
+libnm-core/nm-setting-8021x.c
+libnm-core/nm-setting-adsl.c
+libnm-core/nm-setting-bluetooth.c
+libnm-core/nm-setting-bond.c
+libnm-core/nm-setting-bridge-port.c
+libnm-core/nm-setting-bridge.c
+libnm-core/nm-setting-cdma.c
+libnm-core/nm-setting-connection.c
+libnm-core/nm-setting-dcb.c
+libnm-core/nm-setting-gsm.c
+libnm-core/nm-setting-infiniband.c
+libnm-core/nm-setting-ip-config.c
+libnm-core/nm-setting-ip4-config.c
+libnm-core/nm-setting-ip6-config.c
+libnm-core/nm-setting-olpc-mesh.c
+libnm-core/nm-setting-ppp.c
+libnm-core/nm-setting-pppoe.c
+libnm-core/nm-setting-team-port.c
+libnm-core/nm-setting-vlan.c
+libnm-core/nm-setting-vpn.c
+libnm-core/nm-setting-wimax.c
+libnm-core/nm-setting-wired.c
+libnm-core/nm-setting-wireless-security.c
+libnm-core/nm-setting-wireless.c
+libnm-core/nm-setting.c
+libnm-core/nm-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.c
libnm-util/nm-setting-8021x.c
libnm-util/nm-setting-adsl.c
libnm-util/nm-setting-bluetooth.c
@@ -38,59 +105,52 @@ libnm-util/nm-setting-wired.c
libnm-util/nm-setting-wireless-security.c
libnm-util/nm-setting-wireless.c
libnm-util/nm-utils.c
+libnm/nm-device-adsl.c
+libnm/nm-device-bond.c
+libnm/nm-device-bridge.c
+libnm/nm-device-bt.c
+libnm/nm-device-ethernet.c
+libnm/nm-device-generic.c
+libnm/nm-device-infiniband.c
+libnm/nm-device-modem.c
+libnm/nm-device-olpc-mesh.c
+libnm/nm-device-team.c
+libnm/nm-device-vlan.c
+libnm/nm-device-wifi.c
+libnm/nm-device-wimax.c
+libnm/nm-device.c
+libnm/nm-manager.c
+libnm/nm-object.c
+libnm/nm-remote-connection.c
+libnm/nm-remote-settings.c
+libnm/nm-vpn-plugin-old.c
policy/org.freedesktop.NetworkManager.policy.in.in
+src/NetworkManagerUtils.c
src/main.c
+src/main-utils.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/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-ethernet-utils.c
src/devices/nm-device-infiniband.c
-src/devices/nm-device-team.c
src/devices/nm-device-vlan.c
+src/devices/team/nm-device-team.c
src/devices/wifi/nm-device-olpc-mesh.c
+src/devices/wifi/nm-device-wifi.c
+src/devices/wifi/nm-wifi-ap-utils.c
+src/devices/wimax/nm-device-wimax.c
src/devices/wwan/nm-modem-broadband.c
-src/devices/wwan/nm-modem-old.c
+src/nm-config.c
+src/nm-iface-helper.c
+src/nm-logging.c
src/nm-manager.c
src/nm-sleep-monitor-systemd.c
+src/settings/plugins/ibft/plugin.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 461200fad..f611e4ce2 100644
--- a/po/POTFILES.skip
+++ b/po/POTFILES.skip
@@ -1,7 +1,8 @@
+clients/tui/vpn-helpers.c
examples/python/NetworkManager.py
examples/python/systray/eggtrayicon.c
policy/org.freedesktop.NetworkManager.policy.in
vpn-daemons/openvpn
vpn-daemons/pptp
vpn-daemons/vpnc
-tui/vpn-helpers.c
+contrib/fedora/rpm/
diff --git a/po/as.po b/po/as.po
index dac6acc53..dbe4a16c0 100644
--- a/po/as.po
+++ b/po/as.po
@@ -7,9 +7,9 @@ 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: 2014-01-30 15:24+0000\n"
-"PO-Revision-Date: 2014-02-06 17:17+0630\n"
+"product=NetworkManager&keywords=I18N+L10N&component=Translations\n"
+"POT-Creation-Date: 2014-10-06 22:25+0000\n"
+"PO-Revision-Date: 2014-10-07 22:48+0530\n"
"Last-Translator: Nilamdyuti Goswami <ngoswami@redhat.com>\n"
"Language-Team: Assamese <kde-i18n-doc@kde.org>\n"
"Language: as\n"
@@ -19,434 +19,473 @@ msgstr ""
"X-Generator: Lokalize 1.5\n"
"Plural-Forms: nplurals=2; plural=n != 1;\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:179
-#: ../cli/src/connections.c:201
+#: ../clients/cli/common.c:38 ../clients/cli/common.c:50
+#: ../clients/cli/common.c:58 ../clients/cli/common.c:69
+#: ../clients/cli/connections.c:169 ../clients/cli/connections.c:191
msgid "GROUP"
msgstr "দল"
#. 0
-#: ../cli/src/common.c:35 ../cli/src/common.c:55
+#: ../clients/cli/common.c:39 ../clients/cli/common.c:59
msgid "ADDRESS"
msgstr "ঠিকনা"
#. 1
-#: ../cli/src/common.c:36 ../cli/src/common.c:56
+#: ../clients/cli/common.c:40 ../clients/cli/common.c:60
msgid "ROUTE"
msgstr "পথ"
#. 2
-#: ../cli/src/common.c:37 ../cli/src/common.c:57
+#: ../clients/cli/common.c:41 ../clients/cli/common.c:61
msgid "DNS"
msgstr "DNS"
#. 3
-#: ../cli/src/common.c:38 ../cli/src/common.c:58
+#: ../clients/cli/common.c:42 ../clients/cli/common.c:62
msgid "DOMAIN"
msgstr "ডমেইন"
#. 4
-#: ../cli/src/common.c:39
+#: ../clients/cli/common.c:43
msgid "WINS"
msgstr "WINS"
#. 0
-#: ../cli/src/common.c:47 ../cli/src/common.c:66
+#: ../clients/cli/common.c:51 ../clients/cli/common.c:70
msgid "OPTION"
msgstr "বিকলà§à¦ª"
-#: ../cli/src/common.c:404 ../cli/src/settings.c:2808
+#: ../clients/cli/common.c:377 ../clients/cli/settings.c:3055
+#: ../clients/cli/settings.c:3074
#, c-format
msgid "invalid IPv4 address '%s'"
msgstr "অবৈধ IPv4 ঠিকনা '%s'"
-#: ../cli/src/common.c:412
+#: ../clients/cli/common.c:385
#, c-format
msgid "invalid prefix '%s'; <1-32> allowed"
msgstr "অবৈধ উপসৰà§à¦— '%s'; <1-32> অনà§à¦®à§‹à¦¦à¦¿à¦¤"
-#: ../cli/src/common.c:419 ../cli/src/common.c:472
+#: ../clients/cli/common.c:392 ../clients/cli/common.c:445
#, c-format
msgid "invalid gateway '%s'"
msgstr "অবৈধ গেইটৱে '%s'"
-#: ../cli/src/common.c:457 ../cli/src/settings.c:3054
+#: ../clients/cli/common.c:430 ../clients/cli/settings.c:3401
+#: ../clients/cli/settings.c:3420
#, c-format
msgid "invalid IPv6 address '%s'"
msgstr "অবৈধ IPv6 ঠিকনা '%s'"
-#: ../cli/src/common.c:465
+#: ../clients/cli/common.c:438
#, c-format
msgid "invalid prefix '%s'; <1-128> allowed"
msgstr "অবৈধ উপসৰà§à¦— '%s'; <1-128> অনà§à¦®à§‹à¦¦à¦¿à¦¤"
-#: ../cli/src/common.c:512
+#: ../clients/cli/common.c:521
#, c-format
-msgid "invalid IPv4 route '%s'"
-msgstr "অবৈধ IPv4 পথ '%s'"
+msgid "invalid route destination address '%s'"
+msgstr "অবৈধ পথ গনà§à¦¤à¦¬à§à¦¯ ঠিকনা '%s'"
-#: ../cli/src/common.c:520
+#: ../clients/cli/common.c:528
#, c-format
-msgid "invalid prefix '%s'; <0-32> allowed"
-msgstr "অবৈধ উপসৰà§à¦— '%s'; <0-32> অনà§à¦®à§‹à¦¦à¦¿à¦¤"
+msgid "invalid prefix '%s'; <1-%d> allowed"
+msgstr "অবৈধ উপসৰà§à¦— '%s'; <1-%d> অনà§à¦®à§‹à¦¦à¦¿à¦¤"
-#: ../cli/src/common.c:527 ../cli/src/common.c:590
+#: ../clients/cli/common.c:538
#, c-format
msgid "invalid next hop address '%s'"
msgstr "অবৈধ পৰৱৰà§à¦¤à§€ হপ ঠিকনা '%s'"
-#: ../cli/src/common.c:534 ../cli/src/common.c:598
+#: ../clients/cli/common.c:543
#, c-format
-msgid "invalid metric '%s'"
-msgstr "অবৈধ মেটà§à§°à¦¿à¦• '%s'"
+msgid ""
+"the second component of route ('%s') is neither a next hop address nor a "
+"metric"
+msgstr "পথ ('%s') ৰ দà§à¦¬à¦¿à¦¤à§€à§Ÿ উপাদান à¦à¦Ÿà¦¾ পৰৱৰà§à¦¤à§€ হপ ঠিকনা অথবা à¦à¦Ÿà¦¾ মেটà§à§°à¦¿à¦• নহয়"
-#: ../cli/src/common.c:575
+#: ../clients/cli/common.c:553
#, c-format
-msgid "invalid IPv6 route '%s'"
-msgstr "অবৈধ IPv6 পথ '%s'"
+msgid "invalid metric '%s'"
+msgstr "অবৈধ মেটà§à§°à¦¿à¦• '%s'"
-#: ../cli/src/common.c:583
-#, c-format
-msgid "invalid prefix '%s'; <0-128> allowed"
-msgstr "অবৈধ উপসৰà§à¦— '%s'; <0-128> অনà§à¦®à§‹à¦¦à¦¿à¦¤"
+#: ../clients/cli/common.c:562
+msgid "default route cannot be added (NetworkManager handles it by itself)"
+msgstr "অবিকলà§à¦ªà¦¿à¦¤ পথ যোগ কৰিব নোৱাৰি (NetworkManager ঠনিজেই কৰি লয়)"
-#: ../cli/src/common.c:619
+#: ../clients/cli/common.c:650
msgid "unmanaged"
msgstr "অবà§à¦¯à§±à¦¸à§à¦¥à¦¾à¦ªà¦¿à¦¤"
-#: ../cli/src/common.c:621
+#: ../clients/cli/common.c:652
msgid "unavailable"
msgstr "উপলবà§à¦§ নাই"
-#: ../cli/src/common.c:623 ../cli/src/network-manager.c:276
+#: ../clients/cli/common.c:654 ../clients/cli/general.c:259
msgid "disconnected"
msgstr "বিচà§à¦›à¦¿à¦¨à§à¦¨à¦¿à¦¤"
-#: ../cli/src/common.c:625
+#: ../clients/cli/common.c:656
msgid "connecting (prepare)"
msgstr "সংযোগ কৰা হৈছে (পà§à§°à¦¸à§à¦¤à§à¦¤ হওক)"
-#: ../cli/src/common.c:627
+#: ../clients/cli/common.c:658
msgid "connecting (configuring)"
msgstr "সংযোগ কৰা (সংৰূপণ কৰা)"
-#: ../cli/src/common.c:629
+#: ../clients/cli/common.c:660
msgid "connecting (need authentication)"
msgstr "সংযোগ কৰা (পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£à§° পà§à§°à§Ÿà§‹à¦œà¦¨)"
-#: ../cli/src/common.c:631
+#: ../clients/cli/common.c:662
msgid "connecting (getting IP configuration)"
msgstr "সংযোগ কৰা (IP সংৰূপ পà§à§°à¦¾à¦ªà§à¦¤ কৰা)"
-#: ../cli/src/common.c:633
+#: ../clients/cli/common.c:664
msgid "connecting (checking IP connectivity)"
-msgstr "সংযোগ কৰা (IP সংযোগ নীৰিকà§à¦·à¦£ কৰা)"
+msgstr "সংযোগ কৰা (IP সংযোগ নিৰীকà§à¦·à¦£ কৰা)"
-#: ../cli/src/common.c:635
+#: ../clients/cli/common.c:666
msgid "connecting (starting secondary connections)"
msgstr "সংযোগ কৰা (দà§à¦¬à¦¿à¦¤à§€à§Ÿ সংযোগসমূহ আৰমà§à¦­ কৰা)"
-#: ../cli/src/common.c:637 ../cli/src/network-manager.c:272
+#: ../clients/cli/common.c:668 ../clients/cli/general.c:255
msgid "connected"
msgstr "সংযà§à¦•à§à¦¤"
-#: ../cli/src/common.c:639 ../cli/src/connections.c:528
+#: ../clients/cli/common.c:670 ../clients/cli/connections.c:533
msgid "deactivating"
msgstr "নিষà§à¦•à§à§°à¦¿à§Ÿ কৰা হৈছে"
-#: ../cli/src/common.c:641
+#: ../clients/cli/common.c:672
msgid "connection failed"
msgstr "সংযোগ বà§à¦¯à§°à§à¦¥"
-#: ../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
+#: ../clients/cli/common.c:674 ../clients/cli/connections.c:538
+#: ../clients/cli/connections.c:561 ../clients/cli/connections.c:1622
+#: ../clients/cli/devices.c:889 ../clients/cli/general.c:262
+#: ../clients/cli/general.c:280 ../clients/cli/general.c:410
+#: ../clients/cli/general.c:426 ../clients/cli/settings.c:702
+#: ../clients/cli/settings.c:764 ../clients/cli/settings.c:1056
+#: ../clients/cli/utils.c:1123 ../src/main.c:505 ../src/main.c:533
msgid "unknown"
msgstr "অজà§à¦žà¦¾à¦¤"
-#: ../cli/src/common.c:652
+#: ../clients/cli/common.c:683
msgid "No reason given"
msgstr "কোনো কাৰণ দিয়া হোৱা নাই"
-#: ../cli/src/common.c:655 ../cli/src/connections.c:2467
+#: ../clients/cli/common.c:686 ../clients/cli/connections.c:2392
#, c-format
msgid "Unknown error"
msgstr "অজà§à¦žà¦¾à¦¤ তà§à§°à§à¦Ÿà¦¿"
-#: ../cli/src/common.c:658
+#: ../clients/cli/common.c:689
msgid "Device is now managed"
msgstr "ডিভাইচ à¦à¦¤à¦¿à§Ÿà¦¾ বà§à¦¯à§±à¦¸à§à¦¥à¦¾à¦ªà¦¿à¦¤"
-#: ../cli/src/common.c:661
+#: ../clients/cli/common.c:692
msgid "Device is now unmanaged"
msgstr "ডিভাইচ à¦à¦¤à¦¿à§Ÿà¦¾ বà§à¦¯à§±à¦¸à§à¦¥à¦¾à¦ªà¦¿à¦¤ নহয়"
-#: ../cli/src/common.c:664
+#: ../clients/cli/common.c:695
msgid "The device could not be readied for configuration"
msgstr "ডিভাইচক সংৰূপণৰ বাবে পà§à¦¿à¦¬ নোৱাৰি"
-#: ../cli/src/common.c:667
+#: ../clients/cli/common.c:698
msgid ""
"IP configuration could not be reserved (no available address, timeout, etc.)"
msgstr "IP সংৰূপ সংৰকà§à¦·à¦£ কৰিব নোৱাৰি (কোনো ঠিকনা, সময়অনà§à¦¤, ইতà§à¦¯à¦¾à¦¦à§€ উপলবà§à¦§ নাই)"
-#: ../cli/src/common.c:670
+#: ../clients/cli/common.c:701
msgid "The IP configuration is no longer valid"
msgstr "IP সংৰূপ আৰৠবৈধ নহয়"
-#: ../cli/src/common.c:673
+#: ../clients/cli/common.c:704
msgid "Secrets were required, but not provided"
msgstr "গোপনসমূহৰ পà§à§°à§Ÿà§‹à¦œà¦¨ আছিল, কিনà§à¦¤à§ পà§à§°à¦¦à¦¾à¦¨ কৰা হোৱা নাছিল"
-#: ../cli/src/common.c:676
+#: ../clients/cli/common.c:707
msgid "802.1X supplicant disconnected"
msgstr "802.1X চাপà§à¦²à¦¿à¦•à§‡à¦£à§à¦Ÿ বিচà§à¦›à¦¿à¦¨à§à¦¨à¦¿à¦¤"
-#: ../cli/src/common.c:679
+#: ../clients/cli/common.c:710
msgid "802.1X supplicant configuration failed"
msgstr "802.1X চাপà§à¦²à¦¿à¦•à§‡à¦£à§à¦Ÿ সংৰূপ বà§à¦¯à§°à§à¦¥ হল"
-#: ../cli/src/common.c:682
+#: ../clients/cli/common.c:713
msgid "802.1X supplicant failed"
msgstr "802.1X চাপà§à¦²à¦¿à¦•à§‡à¦£à§à¦Ÿ বà§à¦¯à§°à§à¦¥ হল"
-#: ../cli/src/common.c:685
+#: ../clients/cli/common.c:716
msgid "802.1X supplicant took too long to authenticate"
msgstr "802.1X চাপà§à¦²à¦¿à¦•à§‡à¦£à§à¦Ÿ পà§à§°à¦®à¦¾à¦£à§€à¦¤ হবলে বহৠসময় ললে"
-#: ../cli/src/common.c:688
+#: ../clients/cli/common.c:719
msgid "PPP service failed to start"
msgstr "PPP সেৱা আৰমà§à¦­ হবলে বà§à¦¯à§°à§à¦¥ হল"
-#: ../cli/src/common.c:691
+#: ../clients/cli/common.c:722
msgid "PPP service disconnected"
msgstr "PPP সেৱা বিচà§à¦›à¦¿à¦¨à§à¦¨à¦¿à¦¤ হল"
-#: ../cli/src/common.c:694
+#: ../clients/cli/common.c:725
msgid "PPP failed"
msgstr "PPP বà§à¦¯à§°à§à¦¥ হল"
-#: ../cli/src/common.c:697
+#: ../clients/cli/common.c:728
msgid "DHCP client failed to start"
-msgstr "DHCP কà§à¦²à¦¾à¦à¦¨à§à¦Ÿ আৰমà§à¦­ হবলে বà§à¦¯à§°à§à¦¥ হল"
+msgstr "DHCP কà§à¦²à¦¾à¦à¦£à§à¦Ÿ আৰমà§à¦­ হবলে বà§à¦¯à§°à§à¦¥ হল"
-#: ../cli/src/common.c:700
+#: ../clients/cli/common.c:731
msgid "DHCP client error"
-msgstr "DHCP কà§à¦²à¦¾à¦à¦¨à§à¦Ÿ তà§à§°à§à¦Ÿà¦¿"
+msgstr "DHCP কà§à¦²à¦¾à¦à¦£à§à¦Ÿ তà§à§°à§à¦Ÿà¦¿"
-#: ../cli/src/common.c:703
+#: ../clients/cli/common.c:734
msgid "DHCP client failed"
-msgstr "DHCP কà§à¦²à¦¾à¦à¦¨à§à¦Ÿ বà§à¦¯à§°à§à¦¥ হল"
+msgstr "DHCP কà§à¦²à¦¾à¦à¦£à§à¦Ÿ বà§à¦¯à§°à§à¦¥ হল"
-#: ../cli/src/common.c:706
+#: ../clients/cli/common.c:737
msgid "Shared connection service failed to start"
msgstr "অংশীদাৰী সংযোগ সেৱা আৰমà§à¦­ হবলে বà§à¦¯à§°à§à¦¥ হল"
-#: ../cli/src/common.c:709
+#: ../clients/cli/common.c:740
msgid "Shared connection service failed"
msgstr "অংশীদাৰী সংযোগ সেৱা বà§à¦¯à§°à§à¦¥ হল"
-#: ../cli/src/common.c:712
+#: ../clients/cli/common.c:743
msgid "AutoIP service failed to start"
msgstr "AutoIP সেৱা আৰমà§à¦­ হবলে বà§à¦¯à§°à§à¦¥ হল"
-#: ../cli/src/common.c:715
+#: ../clients/cli/common.c:746
msgid "AutoIP service error"
msgstr "AutoIP সেৱা তà§à§°à§à¦Ÿà¦¿"
-#: ../cli/src/common.c:718
+#: ../clients/cli/common.c:749
msgid "AutoIP service failed"
msgstr "AutoIP সেৱা বà§à¦¯à§°à§à¦¥ হল"
-#: ../cli/src/common.c:721
+#: ../clients/cli/common.c:752
msgid "The line is busy"
msgstr "শাৰী বà§à¦¯à¦¸à§à¦¥"
-#: ../cli/src/common.c:724
+#: ../clients/cli/common.c:755
msgid "No dial tone"
msgstr "কোনো ডায়েল শবà§à¦¦ নাই"
-#: ../cli/src/common.c:727
+#: ../clients/cli/common.c:758
msgid "No carrier could be established"
msgstr "কোনো বাহক সà§à¦¥à¦¾à¦ªà¦¨ কৰিব পৰা নগল"
-#: ../cli/src/common.c:730
+#: ../clients/cli/common.c:761
msgid "The dialing request timed out"
msgstr "ডায়লিং অনà§à§°à§‹à¦§à§° সময় অনà§à¦¤ হল"
-#: ../cli/src/common.c:733
+#: ../clients/cli/common.c:764
msgid "The dialing attempt failed"
msgstr "ডায়লিং চেষà§à¦Ÿà¦¾ বà§à¦¯à§°à§à¦¥ হল"
-#: ../cli/src/common.c:736
+#: ../clients/cli/common.c:767
msgid "Modem initialization failed"
msgstr "মডেম আৰমà§à¦­à¦•à§°à¦£ বà§à¦¯à§°à§à¦¥ হল"
-#: ../cli/src/common.c:739
+#: ../clients/cli/common.c:770
msgid "Failed to select the specified APN"
msgstr "ধাৰà§à¦¯à§à¦¯à¦¤ APN নিৰà§à¦¬à¦¾à¦šà¦¨ কৰিবলে বà§à¦¯à§°à§à¦¥"
-#: ../cli/src/common.c:742
+#: ../clients/cli/common.c:773
msgid "Not searching for networks"
-msgstr "নেটৱাৰà§à¦•à¦¸à¦®à§‚হ সনà§à¦§à¦¾à¦¨ কৰা হোৱা নাই"
+msgstr "নেটৱৰà§à¦•à¦¸à¦®à§‚হ সনà§à¦§à¦¾à¦¨ কৰা হোৱা নাই"
-#: ../cli/src/common.c:745
+#: ../clients/cli/common.c:776
msgid "Network registration denied"
-msgstr "নেটৱাৰà§à¦• ৰেজিষà§à¦Ÿà§à§°à§‡à¦·à¦£ নাকচ কৰা হৈছে"
+msgstr "নেটৱৰà§à¦• ৰেজিষà§à¦Ÿà§à§°à§‡à¦·à¦£ নাকচ কৰা হৈছে"
-#: ../cli/src/common.c:748
+#: ../clients/cli/common.c:779
msgid "Network registration timed out"
-msgstr "নেটৱাৰà§à¦• ৰেজিষà§à¦Ÿà§à§°à§‡à¦·à¦£à§° সময় অনà§à¦¤ হল"
+msgstr "নেটৱৰà§à¦• ৰেজিষà§à¦Ÿà§à§°à§‡à¦·à¦£à§° সময় অনà§à¦¤ হল"
-#: ../cli/src/common.c:751
+#: ../clients/cli/common.c:782
msgid "Failed to register with the requested network"
-msgstr "অনà§à§°à§‹à¦§ কৰা নেটৱাৰà§à¦•à§° সৈতে ৰেজিসà§à¦Ÿà¦¾à§° কৰিবলে বà§à¦¯à§°à§à¦¥ হল"
+msgstr "অনà§à§°à§‹à¦§ কৰা নেটৱৰà§à¦•à§° সৈতে ৰেজিসà§à¦Ÿà¦¾à§° কৰিবলে বà§à¦¯à§°à§à¦¥ হল"
-#: ../cli/src/common.c:754
+#: ../clients/cli/common.c:785
msgid "PIN check failed"
-msgstr "PIN নীৰিকà§à¦·à¦£ বà§à¦¯à§°à§à¦¥ হল"
+msgstr "PIN নিৰীকà§à¦·à¦£ বà§à¦¯à§°à§à¦¥ হল"
-#: ../cli/src/common.c:757
+#: ../clients/cli/common.c:788
msgid "Necessary firmware for the device may be missing"
-msgstr "ডিভাইচৰ বাবে পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿ ফাৰà§à¦®à§±à§‡à§° সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨ হব পাৰে"
+msgstr "ডিভাইচৰ বাবে পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿ ফাৰà§à¦®à§±à§‡à§° সনà§à¦§à¦¾à¦¨à¦¹à§€à¦¨ হব পাৰে"
-#: ../cli/src/common.c:760
+#: ../clients/cli/common.c:791
msgid "The device was removed"
msgstr "ডিভাইচ আতৰোৱা হৈছিল"
-#: ../cli/src/common.c:763
+#: ../clients/cli/common.c:794
msgid "NetworkManager went to sleep"
msgstr "NetworkManager নিদà§à§°à¦¾à¦¤ গল"
-#: ../cli/src/common.c:766
+#: ../clients/cli/common.c:797
msgid "The device's active connection disappeared"
msgstr "ডিভাইচৰ সকà§à§°à¦¿à§Ÿ সংযোগ অদৃশà§à¦¯ হল"
-#: ../cli/src/common.c:769
+#: ../clients/cli/common.c:800
msgid "Device disconnected by user or client"
-msgstr "ডিভাইচ বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€ অথবা কà§à¦²à¦¾à¦à¦¨à§à¦Ÿ দà§à¦¬à¦¾à§°à¦¾ বিচà§à¦›à¦¿à¦¨à§à¦¨ কৰা হল"
+msgstr "ডিভাইচ বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€ অথবা কà§à¦²à¦¾à¦à¦£à§à¦Ÿ দà§à¦¬à¦¾à§°à¦¾ বিচà§à¦›à¦¿à¦¨à§à¦¨ কৰা হল"
-#: ../cli/src/common.c:772
+#: ../clients/cli/common.c:803
msgid "Carrier/link changed"
msgstr "বাহক/সংযোগ পৰিৱৰà§à¦¤à¦¨ হল"
-#: ../cli/src/common.c:775
+#: ../clients/cli/common.c:806
msgid "The device's existing connection was assumed"
msgstr "ডিভাইচৰ সà§à¦¥à¦¾à§Ÿà§€ সংযোগ ধাৰণা কৰা হৈছিল"
-#: ../cli/src/common.c:778
+#: ../clients/cli/common.c:809
msgid "The supplicant is now available"
-msgstr "চাপà§à¦²à¦¿à¦•à§‡à¦¨à§à¦Ÿ à¦à¦¤à¦¿à§Ÿà¦¾ উপলবà§à¦§"
+msgstr "চাপà§à¦²à¦¿à¦•à§‡à¦£à§à¦Ÿ à¦à¦¤à¦¿à§Ÿà¦¾ উপলবà§à¦§"
-#: ../cli/src/common.c:781
+#: ../clients/cli/common.c:812
msgid "The modem could not be found"
msgstr "মডেম পোৱা নগল"
-#: ../cli/src/common.c:784
+#: ../clients/cli/common.c:815
msgid "The Bluetooth connection failed or timed out"
msgstr "বà§à¦²à§à¦Ÿà§à¦¥ সংযোগ বà§à¦¯à§°à§à¦¥ হল অথবা সময়অনà§à¦¤ হল"
-#: ../cli/src/common.c:787
+#: ../clients/cli/common.c:818
msgid "GSM Modem's SIM card not inserted"
msgstr "GSM মডেমৰ SIM কাৰà§à¦¡ সà§à¦®à§à§±à¦¾ হোৱা নাই"
-#: ../cli/src/common.c:790
+#: ../clients/cli/common.c:821
msgid "GSM Modem's SIM PIN required"
msgstr "GSM মডেমৰ SIM PIN ৰ পà§à§°à§Ÿà§‹à¦œà¦¨"
-#: ../cli/src/common.c:793
+#: ../clients/cli/common.c:824
msgid "GSM Modem's SIM PUK required"
msgstr "GSM মডেমৰ SIM PUK ৰ পà§à§°à§Ÿà§‹à¦œà¦¨"
-#: ../cli/src/common.c:796
+#: ../clients/cli/common.c:827
msgid "GSM Modem's SIM wrong"
msgstr "GSM মডেমৰ SIM ভূল"
-#: ../cli/src/common.c:799
+#: ../clients/cli/common.c:830
msgid "InfiniBand device does not support connected mode"
msgstr "InfiniBand ডিভাইচে সংযà§à¦•à§à¦¤ অৱসà§à¦¥à¦¾ সমৰà§à¦¥à¦¨ নকৰে"
-#: ../cli/src/common.c:802
+#: ../clients/cli/common.c:833
msgid "A dependency of the connection failed"
msgstr "সংযোগৰ à¦à¦Ÿà¦¾ নিৰà§à¦­à§°à¦¤à¦¾ বà§à¦¯à§°à§à¦¥ হল"
-#: ../cli/src/common.c:805
+#: ../clients/cli/common.c:836
msgid "A problem with the RFC 2684 Ethernet over ADSL bridge"
msgstr "ADSL বà§à§°à¦¿à¦œà§°à§‡ RFC 2684 ইথাৰনেটৰ সৈতে à¦à¦Ÿà¦¾ সমসà§à¦¯à¦¾"
-#: ../cli/src/common.c:808
+#: ../clients/cli/common.c:839
msgid "ModemManager is unavailable"
msgstr "ModemManager উপলবà§à¦§ নাই"
-#: ../cli/src/common.c:811
+#: ../clients/cli/common.c:842
msgid "The Wi-Fi network could not be found"
-msgstr "Wi-Fi নেটৱাৰà§à¦• পোৱা নগল"
+msgstr "Wi-Fi নেটৱৰà§à¦• পোৱা নগল"
-#: ../cli/src/common.c:814
+#: ../clients/cli/common.c:845
msgid "A secondary connection of the base connection failed"
msgstr "ভিতà§à¦¤à¦¿ সংযোগৰ à¦à¦Ÿà¦¾ দà§à¦¬à¦¿à¦¤à§€à§Ÿ সংযোগ বà§à¦¯à§°à§à¦¥ হল"
-#: ../cli/src/common.c:817
+#: ../clients/cli/common.c:848
msgid "DCB or FCoE setup failed"
msgstr "DCB অথবা FCoE সংসà§à¦¥à¦¾à¦ªà¦¨ বà§à¦¯à§°à§à¦¥ হল"
-#: ../cli/src/common.c:820
+#: ../clients/cli/common.c:851
msgid "teamd control failed"
msgstr "teamd নিয়নà§à¦¤à§à§°à¦£ বà§à¦¯à§°à§à¦¥ হল"
+#: ../clients/cli/common.c:854
+msgid "Modem failed or no longer available"
+msgstr "মডেম বà§à¦¯à§°à§à¦¥ হল অথবা উপলবà§à¦§ নহয়"
+
+#: ../clients/cli/common.c:857
+msgid "Modem now ready and available"
+msgstr "মডেম পà§à§°à¦¸à§à¦¤à§à¦¤ আৰৠউপলবà§à¦§"
+
+#: ../clients/cli/common.c:860
+msgid "SIM PIN was incorrect"
+msgstr "SIM PIN ভà§à¦² আছিল"
+
#. 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
+#: ../clients/cli/common.c:864 ../clients/cli/devices.c:616
+#: ../libnm-glib/nm-device.c:1812
msgid "Unknown"
msgstr "অজà§à¦žà¦¾à¦¤"
-#: ../cli/src/common.c:866
+#: ../clients/cli/common.c:906
#, c-format
msgid "invalid priority map '%s'"
msgstr "অবৈধ পà§à§°à¦¾à¦¥à¦®à¦¿à¦•à¦¤à¦¾ মেপ '%s'"
-#: ../cli/src/common.c:873 ../cli/src/common.c:879
+#: ../clients/cli/common.c:913 ../clients/cli/common.c:919
#, c-format
msgid "priority '%s' is not valid (<0-%ld>)"
msgstr "পà§à§°à¦¾à¦¥à¦®à¦¿à¦•à¦¤à¦¾ '%s' বৈধ নহয় (<0-%ld>)"
-#: ../cli/src/common.c:935
+#: ../clients/cli/common.c:986
#, 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
+#: ../clients/cli/connections.c:40
msgid "Setting name? "
msgstr "সংহতিৰ নাম?"
-#: ../cli/src/connections.c:63
+#: ../clients/cli/connections.c:41
msgid "Property name? "
msgstr "বৈশিষà§à¦Ÿà§à¦¯à§° নাম?"
-#: ../cli/src/connections.c:64
+#: ../clients/cli/connections.c:42
msgid "Enter connection type: "
msgstr "সংযোগৰ ধৰণ সà§à¦®à§à§±à¦¾à¦“ক:"
+#. define some other prompts
+#: ../clients/cli/connections.c:45
+msgid "Connection type: "
+msgstr "সংযোগৰ ধৰণ:"
+
+#: ../clients/cli/connections.c:46
+msgid "VPN type: "
+msgstr "VPN ধৰণ:"
+
+#: ../clients/cli/connections.c:47
+msgid "Bond master: "
+msgstr "বানà§à¦§à¦¨à§€ মাসà§à¦Ÿà¦¾à§°:"
+
+#: ../clients/cli/connections.c:48
+msgid "Team master: "
+msgstr "দলৰ গৰাকী:"
+
+#: ../clients/cli/connections.c:49
+msgid "Bridge master: "
+msgstr "বà§à§°à¦¿à¦œ মাসà§à¦Ÿà¦¾à§°:"
+
+#: ../clients/cli/connections.c:50
+msgid "Connection (name, UUID, or path): "
+msgstr "সংযোগ (নাম, UUID, অথবা পথ):"
+
#. 0
-#: ../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
+#: ../clients/cli/connections.c:58 ../clients/cli/connections.c:170
+#: ../clients/cli/devices.c:55 ../clients/cli/devices.c:84
+#: ../clients/cli/devices.c:94 ../clients/cli/devices.c:105
+#: ../clients/cli/devices.c:114 ../clients/cli/devices.c:129
+#: ../clients/cli/devices.c:142 ../clients/cli/devices.c:168
+#: ../clients/cli/devices.c:183 ../clients/cli/devices.c:192
+#: ../clients/cli/devices.c:201
msgid "NAME"
msgstr "নাম"
#. 0
#. 1
-#: ../cli/src/connections.c:69 ../cli/src/connections.c:181
+#: ../clients/cli/connections.c:59 ../clients/cli/connections.c:171
msgid "UUID"
msgstr "UUID"
@@ -454,29 +493,30 @@ msgstr "UUID"
#. 0
#. 1
#. 2
-#: ../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
+#: ../clients/cli/connections.c:60 ../clients/cli/connections.c:192
+#: ../clients/cli/devices.c:41 ../clients/cli/devices.c:57
+#: ../clients/cli/devices.c:171
msgid "TYPE"
msgstr "ধৰণ"
#. 2
-#: ../cli/src/connections.c:71
+#: ../clients/cli/connections.c:61
msgid "TIMESTAMP"
msgstr "টাইমসà§à¦Ÿà¦¾à¦®à§à¦ª"
#. 3
-#: ../cli/src/connections.c:72
+#: ../clients/cli/connections.c:62
msgid "TIMESTAMP-REAL"
msgstr "টাইমসà§à¦Ÿà¦¾à¦®à§à¦ª-পà§à§°à¦•à§ƒà¦¤"
#. 4
-#. 14
-#: ../cli/src/connections.c:73 ../cli/src/devices.c:101
+#. 15
+#: ../clients/cli/connections.c:63 ../clients/cli/devices.c:71
msgid "AUTOCONNECT"
msgstr "সà§à¦¬à¦¸à¦‚যোগ"
#. 5
-#: ../cli/src/connections.c:74
+#: ../clients/cli/connections.c:64
msgid "READONLY"
msgstr "কেৱলপà§à¦¿à¦¬à¦ªà§°à¦¾"
@@ -485,16 +525,17 @@ msgstr "কেৱলপà§à¦¿à¦¬à¦ªà§°à¦¾"
#. 2
#. 15
#. 5
-#: ../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
+#: ../clients/cli/connections.c:65 ../clients/cli/connections.c:178
+#: ../clients/cli/devices.c:43 ../clients/cli/devices.c:158
+#: ../clients/cli/devices.c:174
msgid "DBUS-PATH"
msgstr "DBUS-PATH"
#. 7
#. 13
#. 4
-#: ../cli/src/connections.c:76 ../cli/src/devices.c:185
-#: ../cli/src/devices.c:202
+#: ../clients/cli/connections.c:66 ../clients/cli/devices.c:156
+#: ../clients/cli/devices.c:173
msgid "ACTIVE"
msgstr "সকà§à§°à¦¿à§Ÿ"
@@ -502,8 +543,9 @@ msgstr "সকà§à§°à¦¿à§Ÿ"
#. 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
+#: ../clients/cli/connections.c:67 ../clients/cli/devices.c:40
+#: ../clients/cli/devices.c:56 ../clients/cli/devices.c:155
+#: ../clients/cli/devices.c:172
msgid "DEVICE"
msgstr "ডিভাইচ"
@@ -512,116 +554,118 @@ msgstr "ডিভাইচ"
#. 1
#. 9
#. 1
-#: ../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
+#: ../clients/cli/connections.c:68 ../clients/cli/connections.c:173
+#: ../clients/cli/devices.c:42 ../clients/cli/devices.c:65
+#: ../clients/cli/general.c:36
msgid "STATE"
msgstr "অৱসà§à¦¥à¦¾"
#. 10
-#: ../cli/src/connections.c:79
+#: ../clients/cli/connections.c:69
msgid "ACTIVE-PATH"
msgstr "ACTIVE-PATH"
#. 2
-#: ../cli/src/connections.c:182
+#: ../clients/cli/connections.c:172
msgid "DEVICES"
msgstr "ডিভাইচসমূহ"
#. 4
-#: ../cli/src/connections.c:184
+#: ../clients/cli/connections.c:174
msgid "DEFAULT"
msgstr "অবিকলà§à¦ªà¦¿à¦¤"
#. 5
-#: ../cli/src/connections.c:185
+#: ../clients/cli/connections.c:175
msgid "DEFAULT6"
msgstr "DEFAULT6"
#. 6
-#: ../cli/src/connections.c:186
+#: ../clients/cli/connections.c:176
msgid "SPEC-OBJECT"
msgstr "SPEC-OBJECT"
#. 7
#. 4
-#: ../cli/src/connections.c:187 ../cli/src/connections.c:225
-#: ../tui/nm-editor-utils.c:243 ../tui/nmt-connect-connection-list.c:342
+#. Ask for optional 'vpn' arguments.
+#: ../clients/cli/connections.c:177 ../clients/cli/connections.c:215
+#: ../clients/cli/connections.c:3446 ../clients/tui/nm-editor-utils.c:234
+#: ../clients/tui/nmt-connect-connection-list.c:407
msgid "VPN"
msgstr "VPN"
#. 9
#. 5
-#. 18
-#: ../cli/src/connections.c:189 ../cli/src/devices.c:77
-#: ../cli/src/devices.c:105
+#. 19
+#: ../clients/cli/connections.c:179 ../clients/cli/devices.c:46
+#: ../clients/cli/devices.c:75
msgid "CON-PATH"
msgstr "CON-PATH"
#. 10
-#: ../cli/src/connections.c:190
+#: ../clients/cli/connections.c:180
msgid "ZONE"
msgstr "অঞà§à¦šà¦²"
#. 11
-#: ../cli/src/connections.c:191
+#: ../clients/cli/connections.c:181
msgid "MASTER-PATH"
msgstr "মাসà§à¦Ÿà¦¾à§°-পথ"
#. 1
-#: ../cli/src/connections.c:203
+#: ../clients/cli/connections.c:193
msgid "USERNAME"
msgstr "বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€à¦¨à¦¾à¦®"
#. 2
-#: ../cli/src/connections.c:204
+#: ../clients/cli/connections.c:194
msgid "GATEWAY"
msgstr "গেইটৱে"
#. 3
-#: ../cli/src/connections.c:205
+#: ../clients/cli/connections.c:195
msgid "BANNER"
msgstr "বেনাৰ"
#. 4
-#: ../cli/src/connections.c:206
+#: ../clients/cli/connections.c:196
msgid "VPN-STATE"
msgstr "VPN-STATE"
#. 5
-#: ../cli/src/connections.c:207
+#: ../clients/cli/connections.c:197
msgid "CFG"
msgstr "CFG"
-#: ../cli/src/connections.c:220 ../cli/src/devices.c:236
+#: ../clients/cli/connections.c:210 ../clients/cli/devices.c:216
msgid "GENERAL"
msgstr "সাধাৰণ"
#. 0
#. 6
-#: ../cli/src/connections.c:221 ../cli/src/devices.c:243
+#: ../clients/cli/connections.c:211 ../clients/cli/devices.c:223
msgid "IP4"
msgstr "IP4"
#. 1
#. 7
-#: ../cli/src/connections.c:222 ../cli/src/devices.c:244
+#: ../clients/cli/connections.c:212 ../clients/cli/devices.c:224
msgid "DHCP4"
msgstr "DHCP4"
#. 2
#. 8
-#: ../cli/src/connections.c:223 ../cli/src/devices.c:245
+#: ../clients/cli/connections.c:213 ../clients/cli/devices.c:225
msgid "IP6"
msgstr "IP6"
#. 3
#. 9
-#: ../cli/src/connections.c:224 ../cli/src/devices.c:246
+#: ../clients/cli/connections.c:214 ../clients/cli/devices.c:226
msgid "DHCP6"
msgstr "DHCP6"
-#: ../cli/src/connections.c:261
+#: ../clients/cli/connections.c:248
#, c-format
msgid ""
"Usage: nmcli connection { COMMAND | help }\n"
@@ -639,7 +683,8 @@ msgid ""
"\n"
" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
"\n"
-" modify [id | uuid | path] <ID> <setting>.<property> <value>\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"
@@ -666,7 +711,8 @@ msgstr ""
"\n"
" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
"\n"
-" modify [id | uuid | path] <ID> <setting>.<property> <value>\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"
@@ -678,7 +724,7 @@ msgstr ""
" load <filename> [ <filename>... ]\n"
"\n"
-#: ../cli/src/connections.c:283
+#: ../clients/cli/connections.c:269
#, c-format
msgid ""
"Usage: nmcli connection show { ARGUMENTS | help }\n"
@@ -722,7 +768,7 @@ msgstr ""
"যেতিয়া --active বিকলà§à¦ª ধাৰà§à¦¯à§à¦¯ কৰা হয়, কেৱল সকà§à§°à¦¿à§Ÿ আলেখà§à¦¯à¦¸à¦®à§‚হ\n"
"বà§à¦¯à§±à¦¹à¦¾à§° কৰা হয়।\n"
-#: ../cli/src/connections.c:305
+#: ../clients/cli/connections.c:290
#, c-format
msgid ""
"Usage: nmcli connection up { ARGUMENTS | help }\n"
@@ -763,7 +809,7 @@ msgstr ""
"nsp - সংযোগ কৰিবলে NSP ধাৰà§à¦¯à§à¦¯ কৰে (কেৱল WiMAX ৰ বাবে বৈধ)\n"
"\n"
-#: ../cli/src/connections.c:326
+#: ../clients/cli/connections.c:310
#, c-format
msgid ""
"Usage: nmcli connection down { ARGUMENTS | help }\n"
@@ -785,7 +831,7 @@ msgstr ""
"অথবা D-Bus পথ দà§à¦¬à¦¾à§°à¦¾ চিনাকà§à¦¤ কৰা হয়।\n"
"\n"
-#: ../cli/src/connections.c:339
+#: ../clients/cli/connections.c:322
#, c-format
#| msgid ""
#| "Usage: nmcli connection add { ARGUMENTS | help }\n"
@@ -798,6 +844,8 @@ msgstr ""
#| " [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"
@@ -851,11 +899,11 @@ msgstr ""
#| " [arp-interval <num>]\n"
#| " [arp-ip-target <num>]\n"
#| "\n"
-#| " bond-slave: master <master (ifname or connection UUID)>\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)>\n"
+#| " team-slave: master <master (ifname, or connection UUID or name)>\n"
#| " [config <file>|<raw JSON data>]\n"
#| "\n"
#| " bridge: [stp yes|no]\n"
@@ -864,13 +912,15 @@ msgstr ""
#| " [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)>\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"
+#| " vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan|"
+#| "libreswan|ssh|l2tp|iodine|...\n"
#| " [user <username>]\n"
#| "\n"
#| " olpc-mesh: ssid <SSID>\n"
@@ -946,12 +996,13 @@ msgid ""
" [updelay <num>]\n"
" [arp-interval <num>]\n"
" [arp-ip-target <num>]\n"
+" [lacp-rate slow (0) | fast (1)]\n"
"\n"
-" bond-slave: master <master (ifname or connection UUID)>\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)>\n"
+" team-slave: master <master (ifname, or connection UUID or name)>\n"
" [config <file>|<raw JSON data>]\n"
"\n"
" bridge: [stp yes|no]\n"
@@ -960,13 +1011,15 @@ msgid ""
" [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)>\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"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan|libreswan|"
+"ssh|l2tp|iodine|...\n"
" [user <username>]\n"
"\n"
" olpc-mesh: ssid <SSID>\n"
@@ -1042,12 +1095,13 @@ msgstr ""
" [updelay <num>]\n"
" [arp-interval <num>]\n"
" [arp-ip-target <num>]\n"
+" [lacp-rate slow (0) | fast (1)]\n"
"\n"
-" bond-slave: master <master (ifname or connection UUID)>\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)>\n"
+" team-slave: master <master (ifname, or connection UUID or name)>\n"
" [config <file>|<raw JSON data>]\n"
"\n"
" bridge: [stp yes|no]\n"
@@ -1056,13 +1110,15 @@ msgstr ""
" [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)>\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"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan|libreswan|"
+"ssh|l2tp|iodine|...\n"
" [user <username>]\n"
"\n"
" olpc-mesh: ssid <SSID>\n"
@@ -1074,28 +1130,52 @@ msgstr ""
" [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
"\n"
-#: ../cli/src/connections.c:417
+#: ../clients/cli/connections.c:401
#, c-format
msgid ""
"Usage: nmcli connection modify { ARGUMENTS | help }\n"
"\n"
-"ARGUMENTS := [id | uuid | path] <ID> <setting name>.<property name> "
-"[<value>]\n"
+"ARGUMENTS := [id | uuid | path] <ID> ([+|-]<setting>.<property> <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"
+"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 { ARGUMENTS | help }\n"
+"Usage: nmcli connection modify { ARGUMENTS | help }\n"
"\n"
-"ARGUMENTS := [id | uuid | path] <ID> <setting name>.<property name> "
-"[<value>]\n"
+"ARGUMENTS := [id | uuid | path] <ID> ([+|-]<setting>.<property> <value>)+\n"
"\n"
-"সংযোগ আলেখà§à¦¯à¦— à¦à¦Ÿà¦¾ বৈশিষà§à¦Ÿà§à¦¯ পৰিবৰà§à¦¤à¦¨ কৰক।\n"
-"আলেখà§à¦¯à¦• তাৰ নাম, UUID অথবা D-Bus পথ দà§à¦¬à¦¾à§°à¦¾ চিনাকà§à¦¤ কৰা হয়।\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"
-#: ../cli/src/connections.c:429
+#: ../clients/cli/connections.c:424
#, c-format
msgid ""
"Usage: nmcli connection edit { ARGUMENTS | help }\n"
@@ -1122,7 +1202,7 @@ msgstr ""
"à¦à¦Ÿà¦¾ ভাৱবিনিময়ী সমà§à¦ªà¦¾à¦¦à¦•à¦¤ à¦à¦Ÿà¦¾ নতà§à¦¨ সংযোগ আলেখà§à¦¯ যোগ কৰক।\n"
"\n"
-#: ../cli/src/connections.c:445
+#: ../clients/cli/connections.c:439
#, c-format
msgid ""
"Usage: nmcli connection delete { ARGUMENTS | help }\n"
@@ -1141,7 +1221,7 @@ msgstr ""
"আলেখà§à¦¯à¦• তাৰ নাম, UUID অথবা D-Bus পথ দà§à¦¬à¦¾à§°à¦¾ চিনাকà§à¦¤ কৰা হয়।\n"
"\n"
-#: ../cli/src/connections.c:457
+#: ../clients/cli/connections.c:450
#, c-format
msgid ""
"Usage: nmcli connection reload { help }\n"
@@ -1154,7 +1234,7 @@ msgstr ""
"ডিসà§à¦•à§° পৰা সকলো সংযোগ ফাইল পà§à¦¨à§° লড কৰক\n"
"\n"
-#: ../cli/src/connections.c:466
+#: ../clients/cli/connections.c:458
#, c-format
msgid ""
"Usage: nmcli connection load { ARGUMENTS | help }\n"
@@ -1177,335 +1257,330 @@ msgstr ""
"তাৰ শেহতীয়া অৱসà§à¦¥à¦¾à§° বিষয়ে জà§à¦žà¦¾à¦¤à¥¤\n"
"\n"
-#: ../cli/src/connections.c:524
+#: ../clients/cli/connections.c:529
msgid "activating"
msgstr "সকà§à§°à¦¿à§Ÿ কৰা হৈছে"
-#: ../cli/src/connections.c:526
+#: ../clients/cli/connections.c:531
msgid "activated"
msgstr "সকà§à§°à¦¿à§Ÿ"
-#: ../cli/src/connections.c:530
+#: ../clients/cli/connections.c:535
msgid "deactivated"
msgstr "নিষà§à¦•à§à§°à¦¿à§Ÿ"
-#: ../cli/src/connections.c:542
+#: ../clients/cli/connections.c:547
msgid "VPN connecting (prepare)"
msgstr "VPN সংযোগ কৰা হৈছে (পà§à§°à¦¸à§à¦¤à§à¦¤ হওক)"
-#: ../cli/src/connections.c:544
+#: ../clients/cli/connections.c:549
msgid "VPN connecting (need authentication)"
msgstr "VPN সংযোগ কৰা হৈছে (পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£à§° পà§à§°à§Ÿà§‹à¦œà¦¨)"
-#: ../cli/src/connections.c:546
+#: ../clients/cli/connections.c:551
msgid "VPN connecting"
msgstr "VPN সংযোগ কৰা হৈছে"
-#: ../cli/src/connections.c:548
+#: ../clients/cli/connections.c:553
msgid "VPN connecting (getting IP configuration)"
msgstr "VPN সংযোগ কৰা (IP সংৰূপ পà§à§°à¦¾à¦ªà§à¦¤ কৰা)"
-#: ../cli/src/connections.c:550
+#: ../clients/cli/connections.c:555
msgid "VPN connected"
msgstr "VPN সংযà§à¦•à§à¦¤"
-#: ../cli/src/connections.c:552
+#: ../clients/cli/connections.c:557
msgid "VPN connection failed"
msgstr "VPN সংযোগ বà§à¦¯à§°à§à¦¥ হল"
-#: ../cli/src/connections.c:554
+#: ../clients/cli/connections.c:559
msgid "VPN disconnected"
msgstr "VPN বিচà§à¦›à¦¿à¦¨à§à¦¨à¦¿à¦¤"
-#: ../cli/src/connections.c:637
+#: ../clients/cli/connections.c:642
msgid "Connection profile details"
msgstr "সংযোগ আলেখà§à¦¯à§° বিৱৰণ"
-#: ../cli/src/connections.c:649 ../cli/src/connections.c:1046
+#: ../clients/cli/connections.c:654 ../clients/cli/connections.c:1006
#, c-format
msgid "Error: 'connection show': %s"
msgstr "তà§à§°à§à¦Ÿà¦¿: 'connection show': %s"
-#: ../cli/src/connections.c:843
+#: ../clients/cli/connections.c:798
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
+#: ../clients/cli/connections.c:799 ../clients/cli/connections.c:800
+#: ../clients/cli/connections.c:802 ../clients/cli/connections.c:861
+#: ../clients/cli/connections.c:862 ../clients/cli/connections.c:864
+#: ../clients/cli/connections.c:2765 ../clients/cli/connections.c:6495
+#: ../clients/cli/connections.c:6496 ../clients/cli/devices.c:586
+#: ../clients/cli/devices.c:636 ../clients/cli/devices.c:857
+#: ../clients/cli/devices.c:858 ../clients/cli/devices.c:859
+#: ../clients/cli/devices.c:860 ../clients/cli/devices.c:893
+#: ../clients/cli/devices.c:895 ../clients/cli/devices.c:923
+#: ../clients/cli/devices.c:924 ../clients/cli/devices.c:925
+#: ../clients/cli/devices.c:926 ../clients/cli/devices.c:927
+#: ../clients/cli/devices.c:928 ../clients/cli/devices.c:929
+#: ../clients/cli/general.c:420
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
+#: ../clients/cli/connections.c:799 ../clients/cli/connections.c:800
+#: ../clients/cli/connections.c:802 ../clients/cli/connections.c:861
+#: ../clients/cli/connections.c:862 ../clients/cli/connections.c:864
+#: ../clients/cli/connections.c:2766 ../clients/cli/connections.c:6495
+#: ../clients/cli/connections.c:6496 ../clients/cli/devices.c:586
+#: ../clients/cli/devices.c:636 ../clients/cli/devices.c:857
+#: ../clients/cli/devices.c:858 ../clients/cli/devices.c:859
+#: ../clients/cli/devices.c:860 ../clients/cli/devices.c:893
+#: ../clients/cli/devices.c:895 ../clients/cli/devices.c:923
+#: ../clients/cli/devices.c:924 ../clients/cli/devices.c:925
+#: ../clients/cli/devices.c:926 ../clients/cli/devices.c:927
+#: ../clients/cli/devices.c:928 ../clients/cli/devices.c:929
+#: ../clients/cli/general.c:422
msgid "no"
msgstr "নহয়"
-#: ../cli/src/connections.c:902 ../cli/src/connections.c:912
-#: ../cli/src/devices.c:596
+#: ../clients/cli/connections.c:857 ../clients/cli/connections.c:867
+#: ../clients/cli/devices.c:576
msgid "N/A"
msgstr "অপà§à§°à¦¯à§‹à¦œà§à¦¯"
-#: ../cli/src/connections.c:1034
+#: ../clients/cli/connections.c:994
msgid "Activate connection details"
msgstr "সকà§à§°à¦¿à§Ÿ সংযোগৰ বিৱৰণ"
-#: ../cli/src/connections.c:1267
+#: ../clients/cli/connections.c:1227
#, c-format
msgid "invalid field '%s'; allowed fields: %s and %s, or %s,%s"
msgstr "অবৈধ ফিলà§à¦¡ '%s'; অনà§à¦®à§‹à¦¦à¦¿à¦¤ ফিলà§à¦¡à¦¸à¦®à§‚হ: %s আৰৠ%s, অথবা %s,%s"
-#: ../cli/src/connections.c:1282 ../cli/src/connections.c:1290
+#: ../clients/cli/connections.c:1242 ../clients/cli/connections.c:1250
#, 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 চলি থকা নাই।"
+msgid "'%s' has to be alone"
+msgstr "'%s' অকলে থাকিব লাগিব"
#. Add headers
-#: ../cli/src/connections.c:1351
+#: ../clients/cli/connections.c:1304
msgid "NetworkManager active profiles"
msgstr "NetworkManager সকà§à§°à¦¿à§Ÿ আলেখà§à¦¯à¦¸à¦®à§‚হ"
-#: ../cli/src/connections.c:1352
+#: ../clients/cli/connections.c:1305
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
+#: ../clients/cli/connections.c:1342 ../clients/cli/connections.c:1946
+#: ../clients/cli/connections.c:1962 ../clients/cli/connections.c:1971
+#: ../clients/cli/connections.c:1981 ../clients/cli/connections.c:2060
+#: ../clients/cli/connections.c:8006 ../clients/cli/connections.c:8224
+#: ../clients/cli/devices.c:1887 ../clients/cli/devices.c:1895
+#: ../clients/cli/devices.c:2211 ../clients/cli/devices.c:2218
+#: ../clients/cli/devices.c:2232 ../clients/cli/devices.c:2239
+#: ../clients/cli/devices.c:2256 ../clients/cli/devices.c:2264
+#: ../clients/cli/devices.c:2453 ../clients/cli/devices.c:2549
+#: ../clients/cli/devices.c:2556
#, c-format
msgid "Error: %s argument is missing."
-msgstr "তà§à§°à§à¦Ÿà¦¿: %s তৰà§à¦• সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨à¥¤"
+msgstr "তà§à§°à§à¦Ÿà¦¿: %s তৰà§à¦• সনà§à¦§à¦¾à¦¨à¦¹à§€à¦¨à¥¤"
-#: ../cli/src/connections.c:1440
+#: ../clients/cli/connections.c:1393
#, c-format
msgid "Error: %s - no such connection profile."
msgstr "তà§à§°à§à¦Ÿà¦¿: %s - à¦à¦‡ ধৰণৰ কোনো সংযোগ আলেখà§à¦¯ নাই।"
-#: ../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
+#: ../clients/cli/connections.c:1409 ../clients/cli/connections.c:2005
+#: ../clients/cli/connections.c:8535 ../clients/cli/devices.c:2432
+#: ../clients/cli/devices.c:2897 ../clients/cli/general.c:517
+#: ../clients/cli/general.c:564 ../clients/cli/general.c:581
+#: ../clients/cli/general.c:630 ../clients/cli/general.c:644
+#: ../clients/cli/general.c:760 ../clients/cli/general.c:804
+#: ../clients/cli/general.c:824
#, c-format
msgid "Error: %s."
msgstr "তà§à§°à§à¦Ÿà¦¿: %s।"
-#: ../cli/src/connections.c:1551
+#: ../clients/cli/connections.c:1504
#, c-format
msgid "no active connection on device '%s'"
msgstr "ডিভাইচ '%s' ত কোনো সকà§à§°à¦¿à§Ÿ সংযোগ নাই"
-#: ../cli/src/connections.c:1559
+#: ../clients/cli/connections.c:1512
msgid "no active connection or device"
msgstr "কোনো সকà§à§°à¦¿à§Ÿ সংযোগ অথবা ডিভাইচ নাই"
-#: ../cli/src/connections.c:1630
+#: ../clients/cli/connections.c:1583
#, c-format
msgid "device '%s' not compatible with connection '%s'"
msgstr "ডিভাইচ '%s' সংযোগ '%s' ৰ সৈতে সংগত নহয়"
-#: ../cli/src/connections.c:1633
+#: ../clients/cli/connections.c:1586
#, c-format
msgid "no device found for connection '%s'"
msgstr "সংযোগ '%s' ৰ বাবে কোনো ডিভাইচ পোৱা নগল"
-#: ../cli/src/connections.c:1645
+#: ../clients/cli/connections.c:1598
msgid "unknown reason"
msgstr "অজà§à¦žà¦¾à¦¤ কাৰণ"
-#: ../cli/src/connections.c:1647 ../cli/src/network-manager.c:288
+#: ../clients/cli/connections.c:1600 ../clients/cli/general.c:271
msgid "none"
msgstr "কোনো নহয়"
-#: ../cli/src/connections.c:1649
+#: ../clients/cli/connections.c:1602
msgid "the user was disconnected"
msgstr "বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€à¦œà¦¨à¦• বিচà§à¦›à¦¿à¦¨à§à¦¨ কৰা হৈছিল"
-#: ../cli/src/connections.c:1651
+#: ../clients/cli/connections.c:1604
msgid "the base network connection was interrupted"
-msgstr "ভিতà§à¦¤à¦¿ নেটৱাৰà§à¦• সংযোগ বাধাগà§à§°à¦¸à§à¦¥ হৈছিল"
+msgstr "ভিতà§à¦¤à¦¿ নেটৱৰà§à¦• সংযোগ বাধাগà§à§°à¦¸à§à¦¥ হৈছিল"
-#: ../cli/src/connections.c:1653
+#: ../clients/cli/connections.c:1606
msgid "the VPN service stopped unexpectedly"
msgstr "VPN সেৱা অপà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤à¦­à¦¾à§±à§‡ বনà§à¦§ হল"
-#: ../cli/src/connections.c:1655
+#: ../clients/cli/connections.c:1608
msgid "the VPN service returned invalid configuration"
msgstr "VPN সেৱায় অবৈধ সংৰূপ ঘà§à§°à¦¾à¦‡ দিলে"
-#: ../cli/src/connections.c:1657
+#: ../clients/cli/connections.c:1610
msgid "the connection attempt timed out"
msgstr "সংযোগৰ চেষà§à¦Ÿà¦¾à§° সময় অনà§à¦¤ হল"
-#: ../cli/src/connections.c:1659
+#: ../clients/cli/connections.c:1612
msgid "the VPN service did not start in time"
msgstr "VPN সেৱা সময়ত আৰমà§à¦­ নহল"
-#: ../cli/src/connections.c:1661
+#: ../clients/cli/connections.c:1614
msgid "the VPN service failed to start"
msgstr "VPN সেৱা আৰমà§à¦­ হবলে বà§à¦¯à§°à§à¦¥ হল"
-#: ../cli/src/connections.c:1663
+#: ../clients/cli/connections.c:1616
msgid "no valid VPN secrets"
msgstr "কোনো বৈধ VPN গোপন তথà§à¦¯ নাই"
-#: ../cli/src/connections.c:1665
+#: ../clients/cli/connections.c:1618
msgid "invalid VPN secrets"
msgstr "অবৈধ VPN গোপন তথà§à¦¯"
-#: ../cli/src/connections.c:1667
+#: ../clients/cli/connections.c:1620
msgid "the connection was removed"
msgstr "সংযোগ আতৰোৱা হৈছিল"
-#: ../cli/src/connections.c:1684 ../cli/src/connections.c:1840
-#: ../cli/src/connections.c:6280
+#: ../clients/cli/connections.c:1642 ../clients/cli/connections.c:1670
+#: ../clients/cli/connections.c:1826 ../clients/cli/connections.c:6386
#, c-format
msgid "Connection successfully activated (D-Bus active path: %s)\n"
msgstr "সংযোগ সফলভাৱে সকà§à§°à¦¿à§Ÿ কৰা হৈছিল (D-Bus সকà§à§°à¦¿à§Ÿ পথ: %s)\n"
-#: ../cli/src/connections.c:1689
+#: ../clients/cli/connections.c:1649
+#, c-format
+msgid ""
+"Connection successfully activated (master waiting for slaves) (D-Bus active "
+"path: %s)\n"
+msgstr ""
+"সংযোগ সফলভাৱে সকà§à§°à¦¿à§Ÿ কৰা হৈছে (মাসà§à¦Ÿà¦¾à§°à§‡ সà§à¦²à§‡à¦‡à¦­à§° বাবে অপেকà§à¦·à¦¾ কৰি আছে) (D-Bus "
+"সকà§à§°à¦¿à§Ÿ পথ: %s)\n"
+
+#: ../clients/cli/connections.c:1653 ../clients/cli/connections.c:1676
#, c-format
msgid "Error: Connection activation failed."
msgstr "তà§à§°à§à¦Ÿà¦¿: সংযোগৰ সকà§à§°à¦¿à§Ÿà¦•à§°à¦£ বà§à¦¯à§°à§à¦¥ হল।"
-#: ../cli/src/connections.c:1714
+#: ../clients/cli/connections.c:1720
#, c-format
msgid "VPN connection successfully activated (D-Bus active path: %s)\n"
msgstr "VPN সংযোগ সফলভাৱে সকà§à§°à¦¿à§Ÿ কৰা হল (D-Bus সকà§à§°à¦¿à§Ÿ পথ: %s)\n"
-#: ../cli/src/connections.c:1721
+#: ../clients/cli/connections.c:1728
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "তà§à§°à§à¦Ÿà¦¿: সংযোগৰ সকà§à§°à¦¿à§Ÿà¦•à§°à¦£ বà§à¦¯à§°à§à¦¥ হল: %s।"
-#: ../cli/src/connections.c:1739 ../cli/src/devices.c:1296
+#: ../clients/cli/connections.c:1747 ../clients/cli/devices.c:1331
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "তà§à§°à§à¦Ÿà¦¿: সময়অনà§à¦¤ %d sec ৰ অৱসান ঘটিল"
-#: ../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
+#: ../clients/cli/connections.c:1808
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "তà§à§°à§à¦Ÿà¦¿: সংযোগৰ সকà§à§°à¦¿à§Ÿà¦•à§°à¦£ বà§à¦¯à§°à§à¦¥ হল: %s"
-#: ../cli/src/connections.c:1929 ../cli/src/connections.c:2061
+#: ../clients/cli/connections.c:1884 ../clients/cli/connections.c:2006
msgid "unknown error"
msgstr "অজà§à¦žà¦¾à¦¤ তà§à§°à§à¦Ÿà¦¿"
-#: ../cli/src/connections.c:1937
+#: ../clients/cli/connections.c:1892
#, c-format
msgid "unknown device '%s'."
msgstr "অজà§à¦žà¦¾à¦¤ ডিভাইচ '%s'।"
-#: ../cli/src/connections.c:1942
+#: ../clients/cli/connections.c:1897
msgid "neither a valid connection nor device given"
msgstr "à¦à¦Ÿà¦¾ বৈধ সংযোগ অথবা ডিভাইচ দিয়া হোৱা নাই"
-#: ../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
+#: ../clients/cli/connections.c:1990 ../clients/cli/devices.c:1230
+#: ../clients/cli/devices.c:1901 ../clients/cli/devices.c:2275
+#: ../clients/cli/devices.c:2562
#, c-format
msgid "Unknown parameter: %s\n"
msgstr "অজà§à¦žà¦¾à¦¤ পà§à§°à¦¾à¦šà¦²: %s\n"
-#: ../cli/src/connections.c:2069
+#: ../clients/cli/connections.c:2014
msgid "preparing"
msgstr "পà§à§°à¦¸à§à¦¤à§à¦¤ কৰা হৈছে"
-#: ../cli/src/connections.c:2097 ../cli/src/connections.c:8005
-#: ../cli/src/connections.c:8120
+#: ../clients/cli/connections.c:2042 ../clients/cli/connections.c:8205
+#: ../clients/cli/connections.c:8320
#, c-format
msgid "Error: No connection specified."
msgstr "তà§à§°à§à¦Ÿà¦¿: কোনো সংযোগ ধাৰà§à¦¯à§à¦¯ কৰা হোৱা নাই।"
-#: ../cli/src/connections.c:2134
+#: ../clients/cli/connections.c:2070
#, c-format
msgid "Error: '%s' is not an active connection."
msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' à¦à¦Ÿà¦¾ সকà§à§°à¦¿à§Ÿ সংযোগ নহয়।"
-#: ../cli/src/connections.c:2446 ../cli/src/utils.c:507
+#: ../clients/cli/connections.c:2371 ../clients/cli/utils.c:517
#, c-format
msgid "'%s' not among [%s]"
msgstr "'%s' [%s] ত অনà§à¦¤à§°à§à¦­à§à¦•à§à¦¤ নহয়"
-#: ../cli/src/connections.c:2528
+#: ../clients/cli/connections.c:2450
#, c-format
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
+#. Ask for optional arguments
+#: ../clients/cli/connections.c:2451 ../clients/cli/connections.c:2881
+#: ../clients/tui/nm-editor-utils.c:164 ../libnm-core/nm-connection.c:1509
+#: ../libnm-glib/nm-device.c:1800
msgid "InfiniBand"
msgstr "InfiniBand"
-#: ../cli/src/connections.c:2529 ../libnm-glib/nm-device.c:1810
-#: ../tui/nm-editor-utils.c:156
+#: ../clients/cli/connections.c:2451 ../clients/tui/nm-editor-utils.c:147
+#: ../libnm-glib/nm-device.c:1788
msgid "Ethernet"
msgstr "ইথাৰনেট"
-#: ../cli/src/connections.c:2552
+#: ../clients/cli/connections.c:2471
#, c-format
msgid "Error: 'mtu': '%s' is not a valid MTU."
msgstr "তà§à§°à§à¦Ÿà¦¿: 'mtu': '%s' à¦à¦Ÿà¦¾ বৈধ MTU।"
-#: ../cli/src/connections.c:2568
+#: ../clients/cli/connections.c:2487
#, c-format
msgid "Error: 'parent': '%s' is not a valid interface name."
msgstr "তà§à§°à§à¦Ÿà¦¿: 'parent': '%s' à¦à¦Ÿà¦¾ বৈধ আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  নাম নহয়।"
-#: ../cli/src/connections.c:2589
+#: ../clients/cli/connections.c:2508
#, 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:2605
+#: ../clients/cli/connections.c:2537
#, c-format
msgid ""
"Error: 'mode': '%s' is not a valid InfiniBand transport mode [datagram, "
@@ -1514,481 +1589,472 @@ msgstr ""
"তà§à§°à§à¦Ÿà¦¿: 'mode': '%s' à¦à¦Ÿà¦¾ বৈধ InfiniBand পৰিবহন অৱসà§à¦¥à¦¾ [datagram, connected] "
"নহয়।"
-#: ../cli/src/connections.c:2621
+#: ../clients/cli/connections.c:2551
#, c-format
msgid "Error: 'flags': '%s' is not valid; use <0-7>."
msgstr "তà§à§°à§à¦Ÿà¦¿: 'flags': '%s' বৈধ নহয়; <0-7> বà§à¦¯à§±à¦¹à¦¾à§° কৰক।"
-#: ../cli/src/connections.c:2643
+#: ../clients/cli/connections.c:2573
#, c-format
msgid "Error: '%s': '%s' is not valid; %s "
msgstr "তà§à§°à§à¦Ÿà¦¿: '%s': '%s' বৈধ নহয়; %s "
-#: ../cli/src/connections.c:2750
+#: ../clients/cli/connections.c:2756
#, c-format
msgid "Error: '%s': '%s' is not valid; use <%u-%u>."
msgstr "তà§à§°à§à¦Ÿà¦¿: '%s': '%s' বৈধ নহয়; <%u-%u> বà§à¦¯à§±à¦¹à¦¾à§° কৰক।"
-#: ../cli/src/connections.c:2764
+#. Ask for optional arguments.
+#: ../clients/cli/connections.c:2812
+#, 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] "%d বৈকলà§à¦ªà¦¿à¦• তৰà§à¦• আছে, '%s' সংযোগ ধৰণৰ বাবে।\n"
+msgstr[1] "%d বৈকলà§à¦ªà¦¿à¦• তৰà§à¦•à¦¸à¦®à§‚হ আছে, '%s' সংযোগ ধৰণৰ বাবে।\n"
+
+#: ../clients/cli/connections.c:2815
+#, c-format
+msgid "Do you want to provide it? %s"
+msgid_plural "Do you want to provide them? %s"
+msgstr[0] "আপà§à¦¨à¦¿ ইয়াক পà§à§°à¦¦à¦¾à¦¨ কৰিব খোজে নে? %s"
+msgstr[1] "আপà§à¦¨à¦¿ ইহতক পà§à§°à¦¦à¦¾à¦¨ কৰিব খোজে নে? %s"
+
+#: ../clients/cli/connections.c:2830
msgid "ethernet"
msgstr "ইথাৰনেট"
-#: ../cli/src/connections.c:2764 ../libnm-glib/nm-device.c:1812
-#: ../tui/nm-editor-utils.c:164
+#: ../clients/cli/connections.c:2830 ../clients/tui/nm-editor-utils.c:155
+#: ../libnm-glib/nm-device.c:1790
msgid "Wi-Fi"
msgstr "Wi-Fi"
-#. 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"
-
-#: ../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 "আপà§à¦¨à¦¿ সিহতক পà§à§°à¦¦à¦¾à¦¨ কৰিব খোজে নে? (হয়/নহয়) [হয়] "
-
-#: ../cli/src/connections.c:2776 ../cli/src/connections.c:2830
-#: ../cli/src/connections.c:2957 ../cli/src/connections.c:3058
+#: ../clients/cli/connections.c:2838 ../clients/cli/connections.c:2886
+#: ../clients/cli/connections.c:2995 ../clients/cli/connections.c:3074
msgid "MTU [auto]: "
msgstr "MTU [auto]: "
-#: ../cli/src/connections.c:2787 ../cli/src/connections.c:2841
-#: ../cli/src/connections.c:2920 ../cli/src/connections.c:2968
+#: ../clients/cli/connections.c:2849 ../clients/cli/connections.c:2897
+#: ../clients/cli/connections.c:2967 ../clients/cli/connections.c:3006
+#: ../clients/cli/connections.c:3378
msgid "MAC [none]: "
msgstr "MAC [none]: "
-#: ../cli/src/connections.c:2798
+#: ../clients/cli/connections.c:2860
msgid "Cloned MAC [none]: "
msgstr "কà§à¦²à§Œà¦£à§à¦¡ MAC [none]: "
-#. Ask for optional arguments
-#: ../cli/src/connections.c:2821
+#: ../clients/cli/connections.c:2908
#, c-format
-msgid "There are 5 optional arguments for 'InfiniBand' connection type.\n"
-msgstr "'InfiniBand' সংযোগ ধৰণৰ বাবে ৫ টা বৈকলà§à¦ªà¦¿à¦• তৰà§à¦• আছে।\n"
-
-#: ../cli/src/connections.c:2852
-msgid "Transport mode (datagram or connected) [datagram]: "
-msgstr "পৰিবহন অৱসà§à¦¥à¦¾ (datagram অথবা connected) [datagram]: "
+msgid "Transport mode %s"
+msgstr "পৰিৱহন অৱসà§à¦¥à¦¾ %s"
-#: ../cli/src/connections.c:2865
+#: ../clients/cli/connections.c:2921
msgid "Parent interface [none]: "
msgstr "উপধায়ক আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  [none]: "
-#: ../cli/src/connections.c:2876
+#: ../clients/cli/connections.c:2932
msgid "P_KEY [none]: "
msgstr "P_KEY [none]: "
-#: ../cli/src/connections.c:2886
+#: ../clients/cli/connections.c:2942
#, 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 "আপà§à¦¨à¦¿ ইয়াক পà§à§°à¦¦à¦¾à¦¨ কৰিব বিচাৰে নে? (হয়/নহয়) [হয়] "
+#: ../clients/cli/connections.c:2962 ../libnm-glib/nm-device.c:1796
+msgid "WiMAX"
+msgstr "WiMAX"
#. 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"
+#: ../clients/cli/connections.c:2985
+msgid "PPPoE"
+msgstr "PPPoE"
-#: ../cli/src/connections.c:2951 ../cli/src/connections.c:2999
+#: ../clients/cli/connections.c:2989 ../clients/cli/connections.c:3027
msgid "Password [none]: "
-msgstr "পাছৱাৰà§à¦¡ [none]: "
+msgstr "পাছৱৰà§à¦¡ [none]: "
-#: ../cli/src/connections.c:2953
+#: ../clients/cli/connections.c:2991
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"
+#: ../clients/cli/connections.c:3021
+msgid "mobile broadband"
+msgstr "ম'বাইল বà§à§°'ডবেণà§à¦¡"
-#: ../cli/src/connections.c:2997 ../cli/src/connections.c:3442
+#: ../clients/cli/connections.c:3025 ../clients/cli/connections.c:3450
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"
+#: ../clients/cli/connections.c:3040
+msgid "bluetooth"
+msgstr "বà§à¦²à§à¦Ÿà§à¦¥"
-#: ../cli/src/connections.c:3022
-msgid "Bluetooth type (panu, dun-gsm or dun-cdma) [panu]: "
-msgstr "বà§à¦²à§à¦Ÿà§à¦¥ ধৰণ (panu, dun-gsm or dun-cdma) [panu]: "
+#: ../clients/cli/connections.c:3047
+#, c-format
+msgid "Bluetooth type %s"
+msgstr "বà§à¦²à§à¦Ÿà§à¦¥à§° ধৰণ %s"
-#: ../cli/src/connections.c:3030
+#: ../clients/cli/connections.c:3053
#, 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"
+#. 13
+#: ../clients/cli/connections.c:3069 ../clients/cli/devices.c:230
+#: ../clients/tui/nm-editor-utils.c:218 ../clients/tui/nmt-page-vlan.c:51
+#: ../libnm-core/nm-connection.c:1507 ../libnm-glib/nm-device.c:1808
+#: ../libnm-util/nm-connection.c:1612
+msgid "VLAN"
+msgstr "VLAN"
-#: ../cli/src/connections.c:3069
+#: ../clients/cli/connections.c:3085
msgid "VLAN flags (<0-7>) [none]: "
msgstr "VLAN ফà§à¦²à§‡à¦—সমূহ (<0-7>) [none]: "
-#: ../cli/src/connections.c:3080
+#: ../clients/cli/connections.c:3096
msgid "Ingress priority maps [none]: "
msgstr "Ingress পà§à§°à¦¾à¦¥à¦®à¦¿à¦•à¦¤à¦¾ মেপসমূহ [none]: "
-#: ../cli/src/connections.c:3091
+#: ../clients/cli/connections.c:3107
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
+#: ../clients/cli/connections.c:3118
msgid "Bonding mode [balance-rr]: "
msgstr "বানà§à¦§à¦¨à§€ অৱসà§à¦¥à¦¾ [balance-rr]: "
-#: ../cli/src/connections.c:3143
+#. Ask for optional 'bond' arguments.
+#: ../clients/cli/connections.c:3134
+msgid "bond"
+msgstr "বানà§à¦§à¦¨à§€"
+
+#: ../clients/cli/connections.c:3156
msgid "Bonding primary interface [none]: "
msgstr "বানà§à¦§à¦¨à§€ পà§à§°à¦¾à¦¥à¦®à¦¿à¦• আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  [none]: "
-#: ../cli/src/connections.c:3146
+#: ../clients/cli/connections.c:3159
#, 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]: "
+#: ../clients/cli/connections.c:3167
+#, c-format
+msgid "Bonding monitoring mode %s"
+msgstr "বানà§à¦§à¦¨à§€ পৰà§à¦¯à¦¬à§‡à¦•à§à¦·à¦£ অৱসà§à¦¥à¦¾ %s"
-#: ../cli/src/connections.c:3159
+#: ../clients/cli/connections.c:3173
#, 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
+#: ../clients/cli/connections.c:3182
msgid "Bonding miimon [100]: "
msgstr "বানà§à¦§à¦¨à§€ miimon [100]: "
-#: ../cli/src/connections.c:3171
+#: ../clients/cli/connections.c:3185
#, 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
+#: ../clients/cli/connections.c:3193
msgid "Bonding downdelay [0]: "
msgstr "বানà§à¦§à¦¨à§€ downdelay [0]: "
-#: ../cli/src/connections.c:3182
+#: ../clients/cli/connections.c:3196
#, 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
+#: ../clients/cli/connections.c:3204
msgid "Bonding updelay [0]: "
msgstr "বানà§à¦§à¦¨à§€ updelay [0]: "
-#: ../cli/src/connections.c:3193
+#: ../clients/cli/connections.c:3207
#, 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
+#: ../clients/cli/connections.c:3216
msgid "Bonding arp-interval [0]: "
msgstr "বানà§à¦§à¦¨à§€ arp-interval [0]: "
-#: ../cli/src/connections.c:3205
+#: ../clients/cli/connections.c:3219
#, 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
+#: ../clients/cli/connections.c:3227
msgid "Bonding arp-ip-target [none]: "
msgstr "বানà§à¦§à¦¨à§€ arp-ip-target [none]: "
-#. Ask for optional 'team' arguments.
-#: ../cli/src/connections.c:3232
+#: ../clients/cli/connections.c:3234
+msgid "LACP rate ('slow' or 'fast') [slow]: "
+msgstr "LACP হাৰ ('slow' or 'fast') [slow]: "
+
+#: ../clients/cli/connections.c:3240
#, c-format
-msgid "There is 1 optional argument for '%s' connection type.\n"
-msgstr "'%s' সংযোগ ধৰণৰ বাবে ১ টা বৈকলà§à¦ªà¦¿à¦• তৰà§à¦• আছে।\n"
+#| msgid "Error: 'master': '%s' is not valid UUID nor interface."
+msgid "Error: 'lacp_rate': '%s' is invalid ('slow' or 'fast').\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'lacp_rate': '%s' অবৈধ ('slow' অথবা 'fast')।\n"
-#: ../cli/src/connections.c:3241
+#: ../clients/cli/connections.c:3263
msgid "Team JSON configuration [none]: "
msgstr "দল JSON সংৰূপ [à¦à¦•à§‹ নাই]: "
-#: ../cli/src/connections.c:3260
+#: ../clients/cli/connections.c:3280
msgid "team"
msgstr "দল"
-#: ../cli/src/connections.c:3266
+#: ../clients/cli/connections.c:3286
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"
+#: ../clients/cli/connections.c:3298
+msgid "bridge"
+msgstr "বà§à§°à¦¿à¦œ"
-#: ../cli/src/connections.c:3290
-msgid "Enable STP (yes/no) [yes]: "
-msgstr "STP সামৰà§à¦¥à¦¬à¦¾à¦¨ কৰিব নে (হয়/নহয়) [হয়]: "
+#: ../clients/cli/connections.c:3304
+#, c-format
+msgid "Enable STP %s"
+msgstr "STP %s সামৰà§à¦¥à¦¬à¦¾à¦¨ কৰক"
-#: ../cli/src/connections.c:3294
+#: ../clients/cli/connections.c:3309
#, c-format
-msgid "Error: 'stp': '%s'.\n"
-msgstr "তà§à§°à§à¦Ÿà¦¿: 'stp': '%s'।\n"
+msgid "Error: 'stp': %s.\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'stp': %s।\n"
-#: ../cli/src/connections.c:3302
-msgid "STP priority [128]: "
-msgstr "STP পà§à§°à¦¾à¦¥à¦®à¦¿à¦•à¦¤à¦¾ [128]: "
+#: ../clients/cli/connections.c:3317
+msgid "STP priority [32768]: "
+msgstr "STP পà§à§°à¦¾à¦¥à¦®à¦¿à¦•à¦¤à¦¾ [32768]: "
-#: ../cli/src/connections.c:3306
+#: ../clients/cli/connections.c:3321
#, 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
+#: ../clients/cli/connections.c:3329
msgid "Forward delay [15]: "
msgstr "ফৰৱাৰà§à¦¡ বিলমà§à¦¬ [15]: "
-#: ../cli/src/connections.c:3318
+#: ../clients/cli/connections.c:3333
#, 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
+#: ../clients/cli/connections.c:3342
msgid "Hello time [2]: "
msgstr "হেলà§à¦²à§‹ সময় [2]: "
-#: ../cli/src/connections.c:3331
+#: ../clients/cli/connections.c:3346
#, 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
+#: ../clients/cli/connections.c:3354
msgid "Max age [20]: "
msgstr "সৰà§à¦¬à¦¾à¦§à¦¿à¦• বয়স [20]: "
-#: ../cli/src/connections.c:3343
+#: ../clients/cli/connections.c:3358
#, 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
+#: ../clients/cli/connections.c:3366
msgid "MAC address ageing time [300]: "
msgstr "MAC ঠিকনা বয়স সময় [300]: "
-#: ../cli/src/connections.c:3355
+#: ../clients/cli/connections.c:3370
#, 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"
+#: ../clients/cli/connections.c:3397
+msgid "bridge-slave"
+msgstr "বà§à§°à¦¿à¦œ-সà§à¦²à§‡à¦‡à¦­"
-#: ../cli/src/connections.c:3385
+#: ../clients/cli/connections.c:3402
msgid "Bridge port priority [32]: "
msgstr "বà§à§°à¦¿à¦œ পৰà§à¦Ÿ পà§à§°à¦¾à¦¥à¦®à¦¿à¦•à¦¤à¦¾ [32]: "
-#: ../cli/src/connections.c:3398
+#: ../clients/cli/connections.c:3415
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
+#: ../clients/cli/connections.c:3429
#, c-format
-msgid "Error: 'hairpin': '%s'.\n"
-msgstr "তà§à§°à§à¦Ÿà¦¿: 'hairpin': '%s'।\n"
+msgid "Hairpin %s"
+msgstr "হেয়াৰপিন %s"
-#. Ask for optional 'vpn' arguments.
-#: ../cli/src/connections.c:3434
+#: ../clients/cli/connections.c:3434
#, c-format
-msgid "There is 1 optional argument for 'VPN' connection type.\n"
-msgstr "'VPN' সংযোগ ধৰণৰ বাবে ১ টা বৈকলà§à¦ªà¦¿à¦• তৰà§à¦• আছে।\n"
+msgid "Error: 'hairpin': %s.\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'hairpin': %s।\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"
+#: ../clients/cli/connections.c:3461 ../libnm-glib/nm-device.c:1794
+msgid "OLPC Mesh"
+msgstr "OLPC মেশ"
-#: ../cli/src/connections.c:3467
+#: ../clients/cli/connections.c:3466
msgid "OLPC Mesh channel [1]: "
msgstr "OLPC Mesh চেনেল [1]: "
-#: ../cli/src/connections.c:3470
+#: ../clients/cli/connections.c:3469
#, 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
+#: ../clients/cli/connections.c:3477
msgid "DHCP anycast MAC address [none]: "
msgstr "DHCP anycast MAC ঠিকনা [none]: "
-#: ../cli/src/connections.c:3526
+#: ../clients/cli/connections.c:3522
msgid "IPv4 address (IP[/plen] [gateway]) [none]: "
msgstr "IPv4 ঠিকনা (IP[/plen] [gateway]) [none]: "
-#: ../cli/src/connections.c:3528
+#: ../clients/cli/connections.c:3524
msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
msgstr "IPv6 ঠিকনা (IP[/plen] [gateway]) [none]: "
-#: ../cli/src/connections.c:3546
+#: ../clients/cli/connections.c:3542
#, c-format
msgid " Address successfully added: %s %s\n"
msgstr " ঠিকনা সফলভাৱে যোগ কৰা হল: %s %s\n"
-#: ../cli/src/connections.c:3548
+#: ../clients/cli/connections.c:3544
#, c-format
msgid " Warning: address already present: %s %s\n"
msgstr " সতৰà§à¦•à¦¬à¦¾à§°à§à¦¤à¦¾: ঠিকনা ইতিমধà§à¦¯ উপসà§à¦¥à¦¿à¦¤: %s %s\n"
-#: ../cli/src/connections.c:3550
+#: ../clients/cli/connections.c:3546
#, 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
+#: ../clients/cli/connections.c:3548 ../clients/cli/connections.c:4379
+#: ../clients/cli/connections.c:4440 ../clients/cli/connections.c:4842
+#: ../clients/cli/connections.c:4852
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 ঠিকনা যোগ কৰিব বিচাৰে নে? (হয়/নহয়) [হয়] "
+#: ../clients/cli/connections.c:3565
+#, c-format
+msgid "Do you want to add IP addresses? %s"
+msgstr "আপà§à¦¨à¦¿ IP ঠিকনাসমূহ যোগ কৰিব বিচাৰে নে? %s"
-#: ../cli/src/connections.c:3576
+#: ../clients/cli/connections.c:3572
#, c-format
msgid "Press <Enter> to finish adding addresses.\n"
msgstr "ঠিকনাসমূহ যোগ কৰা শেষ কৰিবলৈ <Enter> টিপক।\n"
-#: ../cli/src/connections.c:3722
+#: ../clients/cli/connections.c:3711
#, c-format
msgid "Error: 'parent': not valid without 'p-key'."
msgstr "তà§à§°à§à¦Ÿà¦¿: 'parent': 'p-key' ৰ অবিহনে বৈধ নহয়।"
-#: ../cli/src/connections.c:3778 ../cli/src/connections.c:4771
+#: ../clients/cli/connections.c:3763 ../clients/cli/connections.c:4761
msgid "SSID: "
msgstr "SSID: "
-#: ../cli/src/connections.c:3781 ../cli/src/connections.c:4774
+#: ../clients/cli/connections.c:3766 ../clients/cli/connections.c:4764
msgid "Error: 'ssid' is required."
msgstr "তà§à§°à§à¦Ÿà¦¿: 'ssid' পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿà¥¤"
-#: ../cli/src/connections.c:3845
+#: ../clients/cli/connections.c:3823
msgid "WiMAX NSP name: "
msgstr "WiMAX NSP নাম: "
-#: ../cli/src/connections.c:3848
+#: ../clients/cli/connections.c:3826
msgid "Error: 'nsp' is required."
msgstr "তà§à§°à§à¦Ÿà¦¿: 'nsp' পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿà¥¤"
-#: ../cli/src/connections.c:3903
+#: ../clients/cli/connections.c:3878
msgid "PPPoE username: "
msgstr "PPPoE বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€à¦¨à¦¾à¦®: "
-#: ../cli/src/connections.c:3906
+#: ../clients/cli/connections.c:3881
msgid "Error: 'username' is required."
msgstr "তà§à§°à§à¦Ÿà¦¿: 'username' পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿà¥¤"
-#: ../cli/src/connections.c:3977
+#: ../clients/cli/connections.c:3950
msgid "APN: "
msgstr "APN: "
-#: ../cli/src/connections.c:3980
+#: ../clients/cli/connections.c:3953
msgid "Error: 'apn' is required."
msgstr "তà§à§°à§à¦Ÿà¦¿: 'apn' পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿà¥¤"
-#: ../cli/src/connections.c:4039
+#: ../clients/cli/connections.c:4011
msgid "Bluetooth device address: "
msgstr "বà§à¦²à§à¦Ÿà§à¦¥ ডিভাইচ ঠিকনা:"
-#: ../cli/src/connections.c:4042
+#: ../clients/cli/connections.c:4014
msgid "Error: 'addr' is required."
msgstr "তà§à§°à§à¦Ÿà¦¿: 'addr' পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿà¥¤"
-#: ../cli/src/connections.c:4085
+#: ../clients/cli/connections.c:4055
#, 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
+#: ../clients/cli/connections.c:4099
msgid "VLAN parent device or connection UUID: "
msgstr "VLAN উপধায়ক ডিভাইচ অথবা সংযোগ UUID:"
-#: ../cli/src/connections.c:4133
+#: ../clients/cli/connections.c:4102
msgid "Error: 'dev' is required."
msgstr "তà§à§°à§à¦Ÿà¦¿: 'dev' পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿà¥¤"
-#: ../cli/src/connections.c:4137
+#: ../clients/cli/connections.c:4106
msgid "VLAN ID <0-4095>: "
msgstr "VLAN ID <0-4095>: "
-#: ../cli/src/connections.c:4140
+#: ../clients/cli/connections.c:4109
msgid "Error: 'id' is required."
msgstr "তà§à§°à§à¦Ÿà¦¿: 'id' পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿà¥¤"
-#: ../cli/src/connections.c:4146
+#: ../clients/cli/connections.c:4115
#, c-format
msgid "Error: 'id': '%s' is not valid; use <0-4095>."
msgstr "তà§à§°à§à¦Ÿà¦¿: 'id': '%s' বৈধ নহয়; <0-4095> বà§à¦¯à§±à¦¹à¦¾à§° কৰক।"
-#: ../cli/src/connections.c:4156
+#: ../clients/cli/connections.c:4125
#, c-format
msgid "Error: 'dev': '%s' is neither UUID, interface name, nor MAC."
msgstr "তà§à§°à§à¦Ÿà¦¿: 'dev': '%s' UUID, আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  না, অথবা MAC নহয়।"
-#: ../cli/src/connections.c:4291
+#: ../clients/cli/connections.c:4259
#, c-format
msgid "Error: 'mode': %s."
msgstr "তà§à§°à§à¦Ÿà¦¿: 'mode': %s."
-#: ../cli/src/connections.c:4300
+#: ../clients/cli/connections.c:4268
#, 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
+#: ../clients/cli/connections.c:4320 ../clients/cli/connections.c:4418
+#: ../clients/cli/connections.c:4620
msgid "Error: 'master' is required."
msgstr "তà§à§°à§à¦Ÿà¦¿: 'master' পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿà¥¤"
-#: ../cli/src/connections.c:4351 ../cli/src/connections.c:4448
-#: ../cli/src/connections.c:4636
+#: ../clients/cli/connections.c:4326 ../clients/cli/connections.c:4424
+#: ../clients/cli/connections.c:4626
+#, c-format
+msgid "Warning: master='%s' doesn't refer to any existing profile.\n"
+msgstr "সতৰà§à¦•à¦¬à¦¾à§°à§à¦¤à¦¾: মাসà§à¦Ÿà¦¾à§°='%s' ঠকোনো সà§à¦¥à¦¾à§Ÿà§€ আলেখà§à¦¯à¦²à§ˆ পà§à§°à¦¸à¦‚গ নকৰে।\n"
+
+#: ../clients/cli/connections.c:4329 ../clients/cli/connections.c:4432
+#: ../clients/cli/connections.c:4629
#, c-format
msgid ""
"Warning: 'type' is currently ignored. We only support ethernet slaves for "
@@ -1997,102 +2063,81 @@ msgstr ""
"সতৰà§à¦•à¦¬à¦¾à§°à§à¦¤à¦¾: 'type' বৰà§à¦¤à¦®à¦¾à¦¨à§‡ উপেকà§à¦·à¦¾ কৰা হৈছে। আমি à¦à¦¤à¦¿à§Ÿà¦¾à§° বাবে কেৱল ইথাৰনেট "
"সà§à¦²à§‡à¦‡à¦­à¦¸à¦®à§‚হ সমৰà§à¦¥à¦¨ কৰো।\n"
-#: ../cli/src/connections.c:4435
-msgid "Team master: "
-msgstr "দলৰ গৰাকী:"
-
-#: ../cli/src/connections.c:4538
+#: ../clients/cli/connections.c:4526
#, 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
+#: ../clients/cli/connections.c:4656
#, c-format
msgid "Error: 'hairpin': %s."
msgstr "তà§à§°à§à¦Ÿà¦¿: 'hairpin': %s. "
-#: ../cli/src/connections.c:4715
-msgid "VPN type: "
-msgstr "VPN ধৰণ:"
-
-#: ../cli/src/connections.c:4718
+#: ../clients/cli/connections.c:4709
msgid "Error: 'vpn-type' is required."
msgstr "তà§à§°à§à¦Ÿà¦¿: 'vpn-type' পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿà¥¤"
-#: ../cli/src/connections.c:4729
+#: ../clients/cli/connections.c:4716
#, c-format
-msgid "Error: 'vpn-type': %s."
-msgstr "তà§à§°à§à¦Ÿà¦¿: 'vpn-type': %s।"
+msgid "Warning: 'vpn-type': %s not known.\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: 'vpn-type': %s জà§à¦žà¦¾à¦¤ নহয়।\n"
-#: ../cli/src/connections.c:4787
+#: ../clients/cli/connections.c:4777
#, c-format
msgid "Error: 'channel': '%s' is not valid; use <1-13>."
msgstr "তà§à§°à§à¦Ÿà¦¿: 'channel': '%s' বৈধ নহয়; <1-13> বà§à¦¯à§±à¦¹à¦¾à§° কৰক।"
-#: ../cli/src/connections.c:4822
+#: ../clients/cli/connections.c:4809
#, c-format
msgid "Error: '%s' is not a valid connection type."
msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' à¦à¦Ÿà¦¾ বৈধ সংযোগ ধৰণ নহয়।"
-#: ../cli/src/connections.c:4920
+#: ../clients/cli/connections.c:4911
#, c-format
-msgid "Error: Failed to add '%s' connection: (%d) %s"
-msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' সংযোগ যোগ কৰিবলে বà§à¦¯à§°à§à¦¥: (%d) %s"
+#| msgid "Error: Failed to add '%s' connection: (%d) %s"
+msgid "Error: Failed to add '%s' connection: %s"
+msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' সংযোগ যোগ কৰিবলে বà§à¦¯à§°à§à¦¥: %s"
-#: ../cli/src/connections.c:4924
+#: ../clients/cli/connections.c:4916
#, 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
+#: ../clients/cli/connections.c:5127
#, c-format
msgid "Error: 'type' argument is required."
msgstr "তà§à§°à§à¦Ÿà¦¿: 'type' তৰà§à¦• পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿà¥¤"
-#: ../cli/src/connections.c:5008
+#: ../clients/cli/connections.c:5135
#, c-format
msgid "Error: invalid connection type; %s."
msgstr "তà§à§°à§à¦Ÿà¦¿: অবৈধ সংযোগ ধৰণ; %s।"
-#: ../cli/src/connections.c:5017
+#: ../clients/cli/connections.c:5144
#, c-format
msgid "Error: 'autoconnect': %s."
msgstr "তà§à§°à§à¦Ÿà¦¿: 'autoconnect': %s।"
-#: ../cli/src/connections.c:5027
+#: ../clients/cli/connections.c:5154
#, c-format
-#| msgid "Error: 'stp': %s."
msgid "Error: 'save': %s."
msgstr "তà§à§°à§à¦Ÿà¦¿: 'save': %s।"
-#: ../cli/src/connections.c:5043
+#: ../clients/cli/connections.c:5170
msgid "Interface name [*]: "
msgstr "আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦ à§° নাম [*]: "
-#: ../cli/src/connections.c:5048
+#: ../clients/cli/connections.c:5175
#, c-format
msgid "Error: 'ifname' argument is required."
msgstr "তà§à§°à§à¦Ÿà¦¿: 'ifname' তৰà§à¦• পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿà¥¤"
-#: ../cli/src/connections.c:5055
+#: ../clients/cli/connections.c:5182
#, c-format
msgid "Error: 'ifname': '%s' is not a valid interface nor '*'."
msgstr "তà§à§°à§à¦Ÿà¦¿: 'ifname': '%s' অথবা '*' à¦à¦Ÿà¦¾ বৈধ আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  নহয়।"
-#: ../cli/src/connections.c:5884
+#: ../clients/cli/connections.c:5970
#, c-format
msgid "['%s' setting values]\n"
msgstr "['%s' সংহতি মানসমূহ]\n"
@@ -2100,23 +2145,8 @@ msgstr "['%s' সংহতি মানসমূহ]\n"
#. TRANSLATORS: do not translate command names and keywords before ::
#. * However, you should translate terms enclosed in <>.
#.
-#: ../cli/src/connections.c:5965
+#: ../clients/cli/connections.c:6052
#, 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"
@@ -2124,7 +2154,7 @@ msgid ""
"value\n"
"set [<setting>.<prop> <value>] :: set property value\n"
"describe [<setting>.<prop>] :: describe property\n"
-"print [all] :: print the connection\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"
@@ -2134,22 +2164,21 @@ msgid ""
"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
+"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"
+
+#: ../clients/cli/connections.c:6079
#, c-format
msgid ""
"goto <setting>[.<prop>] | <prop> :: enter setting/property for editing\n"
@@ -2168,7 +2197,7 @@ msgstr ""
" nmcli connection> goto secondaries\n"
" nmcli> goto ipv4.addresses\n"
-#: ../cli/src/connections.c:5999
+#: ../clients/cli/connections.c:6086
#, c-format
msgid ""
"remove <setting>[.<prop>] :: remove setting or reset property value\n"
@@ -2189,7 +2218,7 @@ msgstr ""
"Examples: nmcli> remove wifi-sec\n"
" nmcli> remove eth.mtu\n"
-#: ../cli/src/connections.c:6006
+#: ../clients/cli/connections.c:6093
#, c-format
msgid ""
"set [<setting>.<prop> <value>] :: set property value\n"
@@ -2204,7 +2233,7 @@ msgstr ""
"\n"
"উদাহৰণ: nmcli> set con.id My connection\n"
-#: ../cli/src/connections.c:6011
+#: ../clients/cli/connections.c:6098
#, c-format
msgid ""
"describe [<setting>.<prop>] :: describe property\n"
@@ -2217,7 +2246,7 @@ msgstr ""
"বৈশিষà§à¦Ÿà§à¦¯à§° বিৱৰণ দেখà§à§±à¦¾à§Ÿà¥¤ সকলো NM সংহতি আৰৠবৈশিষà§à¦Ÿà§à¦¯à¦¸à¦®à§‚হ চাবলৈ আপà§à¦¨à¦¿ nm-"
"settings(5) manual চাব পাৰে।\n"
-#: ../cli/src/connections.c:6016
+#: ../clients/cli/connections.c:6103
#, c-format
msgid ""
"print [all] :: print setting or connection values\n"
@@ -2226,13 +2255,13 @@ msgid ""
"\n"
"Example: nmcli ipv4> print all\n"
msgstr ""
-"print [all] :: সংহতি অথবা সংযোগৰ মান পà§à§°à¦¿à¦¨à§à¦Ÿ কৰক\n"
+"print [all] :: সংহতি অথবা সংযোগৰ মান পà§à§°à¦¿à¦£à§à¦Ÿ কৰক\n"
"\n"
"বৰà§à¦¤à¦®à¦¾à¦¨ বৈশিষà§à¦Ÿà§à¦¯ অথবা সমà§à¦ªà§‚ৰà§à¦£ সংযোগ দেখà§à§±à¦¾à§Ÿà¥¤\n"
"\n"
"উদাহৰণ: nmcli ipv4> print all\n"
-#: ../cli/src/connections.c:6021
+#: ../clients/cli/connections.c:6108
#, c-format
msgid ""
"verify [all] :: verify setting or connection validity\n"
@@ -2243,7 +2272,7 @@ msgid ""
"Examples: nmcli> verify\n"
" nmcli bond> verify\n"
msgstr ""
-"verify [all] :: সংহতি অথবা সংযোগৰ বৈধতা সতা সতà§à¦¯ নিৰূপণ কৰক\n"
+"verify [all] :: সংহতি অথবা সংযোগৰ বৈধতা সতà§à¦¯à¦¾à¦ªà¦¨ কৰক\n"
"\n"
"সংহতি অথবা সংযোগ বৈধ নে আৰৠপিছত সংৰকà§à¦·à¦£ কৰিব পাৰি নে সতা সতà§à¦¯ নিৰূপন কৰে। ই "
"তà§à§°à§à¦Ÿà¦¿à¦¤ অবৈধ মানসমূহৰ সূচনা দিয়ে।\n"
@@ -2251,13 +2280,13 @@ msgstr ""
"উদাহৰণ: nmcli> verify\n"
" nmcli bond> verify\n"
-#: ../cli/src/connections.c:6028
+#: ../clients/cli/connections.c:6115
#, 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"
+"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"
@@ -2275,11 +2304,10 @@ msgstr ""
"পà§à¦¨à¦¾à§°à¦®à§à¦­à§°\n"
"পিছতো থাকিব। কà§à§°à¦®à¦¨à§à¦¬à§Ÿ পৰিবৰà§à¦¤à¦¨à¦¸à¦®à§‚হ অসà§à¦¥à¦¾à§Ÿà§€ অথবা সà§à¦¥à¦¾à§Ÿà§€ হব পাৰে\n"
"কিনà§à¦¤à§ কোনো অসà§à¦¥à¦¾à§Ÿà§€ পৰিবৰà§à¦¤à¦¨ পà§à¦¨à¦¾à§°à¦®à§à¦­à§° পিছত নাথাকিব।\n"
-"যদি আপà§à¦¨à¦¿ সà§à¦¥à¦¾à§Ÿà§€ সংযোগ সমà§à¦ªà§‚ৰà§à¦£à¦­à¦¾à§±à§‡ আতৰাব খোজে, "
-"সংযোগ\n"
+"যদি আপà§à¦¨à¦¿ সà§à¦¥à¦¾à§Ÿà§€ সংযোগ সমà§à¦ªà§‚ৰà§à¦£à¦­à¦¾à§±à§‡ আতৰাব খোজে, সংযোগ\n"
"আলেখà§à¦¯à¦• মচিব লাগিব।\n"
-#: ../cli/src/connections.c:6039
+#: ../clients/cli/connections.c:6126
#, c-format
msgid ""
"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
@@ -2300,7 +2328,7 @@ msgstr ""
"/<ap>|<nsp> - AP (Wi-Fi) or NSP (WiMAX) (আৰমà§à¦­à¦£à¦¿à¦¤ / যোগ কৰক যেতিয়া <ifname> "
"ধাৰà§à¦¯à§à¦¯à¦¤ নহয়)\n"
-#: ../cli/src/connections.c:6046 ../cli/src/connections.c:6196
+#: ../clients/cli/connections.c:6133 ../clients/cli/connections.c:6290
#, c-format
msgid ""
"back :: go to upper menu level\n"
@@ -2309,7 +2337,7 @@ msgstr ""
"back :: ওপৰ সà§à¦¤à§° মেনà§à¦²à§ˆ যাওক\n"
"\n"
-#: ../cli/src/connections.c:6049
+#: ../clients/cli/connections.c:6136
#, c-format
msgid ""
"help/? [<command>] :: help for the nmcli commands\n"
@@ -2318,7 +2346,7 @@ msgstr ""
"help/? [<command>] :: nmcli কমানà§à¦¡à¦¸à¦®à§‚হৰ বাবে সহায়\n"
"\n"
-#: ../cli/src/connections.c:6052
+#: ../clients/cli/connections.c:6139
#, c-format
msgid ""
"nmcli [<conf-option> <value>] :: nmcli configuration\n"
@@ -2361,7 +2389,7 @@ msgstr ""
" nmcli> nmcli save-confirmation no\n"
" nmcli> nmcli prompt-color 3\n"
-#: ../cli/src/connections.c:6072 ../cli/src/connections.c:6202
+#: ../clients/cli/connections.c:6159 ../clients/cli/connections.c:6296
#, c-format
msgid ""
"quit :: exit nmcli\n"
@@ -2374,8 +2402,8 @@ msgstr ""
"à¦à¦‡ কমানà§à¦¡à§‡ nmcli পà§à§°à¦¸à§à¦¥à¦¾à¦¨ কৰে। যেতিয়া সমà§à¦ªà¦¾à¦¦à¦¨ কৰি থকা সংযোগ সংৰকà§à¦·à¦£ কৰা নহয়, "
"বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€à¦• কাৰà§à¦¯à§à¦¯ সà§à¦¨à¦¿à¦¶à§à¦šà¦¿à¦¤ কৰিবলৈ কোৱা হয়।\n"
-#: ../cli/src/connections.c:6077 ../cli/src/connections.c:6207
-#: ../cli/src/connections.c:6581 ../cli/src/connections.c:7447
+#: ../clients/cli/connections.c:6164 ../clients/cli/connections.c:6301
+#: ../clients/cli/connections.c:6706 ../clients/cli/connections.c:7597
#, c-format
msgid "Unknown command: '%s'\n"
msgstr "অজà§à¦žà¦¾à¦¤ কমানà§à¦¡: '%s'\n"
@@ -2383,7 +2411,7 @@ msgstr "অজà§à¦žà¦¾à¦¤ কমানà§à¦¡: '%s'\n"
#. TRANSLATORS: do not translate command names and keywords before ::
#. * However, you should translate terms enclosed in <>.
#.
-#: ../cli/src/connections.c:6143
+#: ../clients/cli/connections.c:6230
#, c-format
msgid ""
"---[ Property menu ]---\n"
@@ -2404,13 +2432,13 @@ msgstr ""
"change :: বৰà§à¦¤à¦®à¦¾à¦¨ পৰিবৰà§à¦¤à¦¨ কৰক\n"
"remove [<index> | <option>] :: মান মচি পেলাওক\n"
"describe :: বৈশিষà§à¦Ÿà§à¦¯à§° বিৱৰণ দিয়ক\n"
-"print [setting | connection] :: বৈশিষà§à¦Ÿà§à¦¯ পà§à§°à¦¿à¦¨à§à¦Ÿ কৰক (সংহতি/সংয়োগ) "
+"print [setting | connection] :: বৈশিষà§à¦Ÿà§à¦¯ পà§à§°à¦¿à¦£à§à¦Ÿ কৰক (সংহতি/সংয়োগ) "
"মান(সমূহ)\n"
"back :: ওপৰ সà§à¦¤à§°à¦²à§ˆ যাওক\n"
-"help/? [<command>] :: à¦à¦‡ সহায় অথবা কমানà§à¦¡à§° বিৱৰণ পà§à§°à¦¿à¦¨à§à¦Ÿ কৰক\n"
+"help/? [<command>] :: à¦à¦‡ সহায় অথবা কমানà§à¦¡à§° বিৱৰণ পà§à§°à¦¿à¦£à§à¦Ÿ কৰক\n"
"quit :: nmcli পà§à§°à¦¸à§à¦¥à¦¾à¦¨ কৰক\n"
-#: ../cli/src/connections.c:6168
+#: ../clients/cli/connections.c:6255
#, c-format
msgid ""
"set [<value>] :: set new value\n"
@@ -2421,23 +2449,24 @@ msgstr ""
"\n"
"à¦à¦‡ কমানà§à¦¡à§‡ à¦à¦‡ বৈশিষà§à¦Ÿà§à¦¯à¦²à§ˆ পà§à§°à¦¦à¦¾à¦¨ কৰা <value> সংহতি কৰে\n"
-#: ../cli/src/connections.c:6172
+#: ../clients/cli/connections.c:6259
#, c-format
msgid ""
-"add [<value>] :: add new option to the property\n"
+"add [<value>] :: append new value 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"
+"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 [<value>] :: বৈশিষà§à¦Ÿà§à¦¯à¦²à§ˆ নতà§à¦¨ বিকলà§à¦ª যোগ কৰক\n"
"\n"
-"à¦à¦‡ কমানà§à¦¡à§‡ à¦à¦‡ বৈশিষà§à¦Ÿà§à¦¯à¦²à§ˆ পà§à§°à¦¦à¦¾à¦¨ কৰা <value> যোগ কৰে, যদি বৈশিষà§à¦Ÿà§à¦¯ à¦à¦Ÿà¦¾ বৈয়াম "
-"ধৰণৰ "
-"হয়। single-valued বৈশিষà§à¦Ÿà§à¦¯à¦¸à¦®à§‚হৰ বাবে ই মান পà§à§°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¨ কৰো ('set' ৰ নিচিনা "
+"à¦à¦‡ কমানà§à¦¡à§‡ à¦à¦‡ বৈশিষà§à¦Ÿà§à¦¯à¦²à§ˆ পà§à§°à¦¦à¦¾à¦¨ কৰা <value> যোগ কৰে, যদি বৈশিষà§à¦Ÿà§à¦¯ à¦à¦Ÿà¦¾ "
+"কনটেইনাৰ "
+"ধৰণৰ হয়। single-valued বৈশিষà§à¦Ÿà§à¦¯à¦¸à¦®à§‚হৰ বাবে ই মান পà§à§°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¨ কৰে ('set' ৰ "
+"নিচিনা "
"à¦à¦•à§‡)।\n"
-#: ../cli/src/connections.c:6178
+#: ../clients/cli/connections.c:6265
#, c-format
msgid ""
"change :: change current value\n"
@@ -2448,18 +2477,41 @@ msgstr ""
"\n"
"বৰà§à¦¤à¦®à¦¾à¦¨ মান পà§à§°à¦¦à§°à§à¦¶à¦¨ কৰে আৰৠইয়াক সমà§à¦ªà¦¾à¦¦à¦¨ কৰাৰ অনà§à¦®à¦¤à¦¿ দিয়ে।\n"
-#: ../cli/src/connections.c:6182
+#: ../clients/cli/connections.c:6269
#, c-format
msgid ""
-"remove [<index>|<option>] :: delete the value\n"
+"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"
-"Removes the property value (sets it to default).\n"
msgstr ""
-"remove [<index>|<option>] :: মান মচি পেলাওক\n"
+"remove [<value>|<index>|<option name>] :: মান মচি পেলাওক\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"
-"বৈশিষà§à¦Ÿà§à¦¯à§° মান আতৰায় (ইয়াক অবিকলà§à¦ªà¦¿à¦¤à¦²à§ˆ সংহতি কৰে)।\n"
-#: ../cli/src/connections.c:6186
+#: ../clients/cli/connections.c:6280
#, c-format
msgid ""
"describe :: describe property\n"
@@ -2473,7 +2525,7 @@ msgstr ""
"manual "
"চাওক।\n"
-#: ../cli/src/connections.c:6191
+#: ../clients/cli/connections.c:6285
#, c-format
msgid ""
"print [property|setting|connection] :: print property (setting, connection) "
@@ -2482,14 +2534,14 @@ msgid ""
"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] :: বৈশিষà§à¦Ÿà§à¦¯ পà§à§°à¦¿à¦£à§à¦Ÿ কৰক (সংহতি, সংযোগ) "
"মান(সমূহ)\n"
"\n"
"বৈশিষà§à¦Ÿà§à¦¯à§° মান দেখà§à§±à¦¾à§Ÿà¥¤ à¦à¦Ÿà¦¾ তৰà§à¦• পà§à§°à¦¦à¦¾à¦¨ কৰি আপà§à¦¨à¦¿ সমà§à¦ªà§‚ৰà§à¦£ সংহতি অথবা সংযোগৰ "
"বাবে "
"মানসমূহ পà§à§°à¦¦à§°à§à¦¶à¦¨ কৰিব পাৰিব।\n"
-#: ../cli/src/connections.c:6199
+#: ../clients/cli/connections.c:6293
#, c-format
msgid ""
"help/? [<command>] :: help for nmcli commands\n"
@@ -2498,321 +2550,313 @@ msgstr ""
"help/? [<command>] :: nmcli কমানà§à¦¡à¦¸à¦®à§‚হৰ বাবে সহায়\n"
"\n"
-#: ../cli/src/connections.c:6286
+#: ../clients/cli/connections.c:6392
#, c-format
msgid "Error: Connection activation failed.\n"
msgstr "তà§à§°à§à¦Ÿà¦¿: সংযোগ সকà§à§°à¦¿à§Ÿà¦•à§°à¦£ বà§à¦¯à§°à§à¦¥ হল।\n"
-#: ../cli/src/connections.c:6357
+#: ../clients/cli/connections.c:6475
#, 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
+#: ../clients/cli/connections.c:6493
#, 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
+#: ../clients/cli/connections.c:6528
+#, c-format
+msgid "The connection is not saved. Do you really want to quit? %s"
+msgstr "সংযোগ সংৰকà§à¦·à¦£ কৰা হোৱা নাই। আপà§à¦¨à¦¿ সà¦à¦šà¦¾à¦•à§ˆ পà§à§°à¦¸à§à¦¥à¦¾à¦¨ কৰিব খোজে নে? %s"
+
+#: ../clients/cli/connections.c:6573
#, 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
+#: ../clients/cli/connections.c:6595 ../clients/cli/connections.c:7010
+#: ../clients/cli/connections.c:7065
#, 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
+#: ../clients/cli/connections.c:6610 ../clients/cli/connections.c:6628
+#: ../clients/cli/connections.c:7014 ../clients/cli/connections.c:7070
#, c-format
msgid "Error: failed to set '%s' property: %s\n"
msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' বৈশিষà§à¦Ÿà§à¦¯ সংহতি কৰিবলৈ বà§à¦¯à§°à§à¦¥: %s\n"
-#: ../cli/src/connections.c:6489
+#: ../clients/cli/connections.c:6622
#, c-format
msgid "Edit '%s' value: "
msgstr "'%s' মান সমà§à¦ªà¦¾à¦¦à¦¨ কৰক:"
-#: ../cli/src/connections.c:6518
+#: ../clients/cli/connections.c:6649
#, c-format
msgid "Error: %s\n"
msgstr "তà§à§°à§à¦Ÿà¦¿: %s\n"
-#: ../cli/src/connections.c:6524 ../cli/src/connections.c:7029
-#: ../cli/src/connections.c:7070
+#: ../clients/cli/connections.c:6655 ../clients/cli/connections.c:7149
+#: ../clients/cli/connections.c:7190
#, c-format
msgid "Error: failed to remove value of '%s': %s\n"
msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' ৰ মান আতৰাবলৈ বà§à¦¯à§°à§à¦¥: %s\n"
-#: ../cli/src/connections.c:6545
+#: ../clients/cli/connections.c:6676
#, 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
+#: ../clients/cli/connections.c:6802
#, c-format
msgid "Available settings: %s\n"
msgstr "উপলবà§à¦§ সংহতিসমূহ: %s\n"
-#: ../cli/src/connections.c:6686
+#: ../clients/cli/connections.c:6811
#, c-format
msgid "Error: invalid setting name; %s\n"
msgstr "তà§à§°à§à¦Ÿà¦¿: অবৈধ সংহতি নাম; %s\n"
-#: ../cli/src/connections.c:6703
+#: ../clients/cli/connections.c:6828
#, c-format
msgid "Available properties: %s\n"
msgstr "উপলবà§à¦§ বৈশিষà§à¦Ÿà§à¦¯à¦¸à¦®à§‚হ: %s\n"
-#: ../cli/src/connections.c:6711
+#: ../clients/cli/connections.c:6836
#, c-format
msgid "Error: property %s\n"
msgstr "তà§à§°à§à¦Ÿà¦¿: বৈশিষà§à¦Ÿà§à¦¯ %s\n"
-#: ../cli/src/connections.c:6752
+#: ../clients/cli/connections.c:6877
+#, 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] "
+"Do you still want to save? %s"
msgstr ""
"'autoconnect=yes' ৰ সৈতে সংযোগ সংৰকà§à¦·à¦£ কৰা হৈছে। ইয়াৰ ফলসà§à¦¬à§°à§‚প সংযোগৰ "
"তৎকà§à¦·à¦¨à¦¾à¦¤ "
-"সকà§à§°à¦¿à§Ÿà¦•à§°à¦£ হব।\n"
-"আপà§à¦¨à¦¿ তথাপিও সংৰকà§à¦·à¦£ কৰিব বিচাৰে নে? [হয়]"
+"সকà§à§°à¦¿à§Ÿà¦•à§°à¦£ হব পাৰে।\n"
+"আপà§à¦¨à¦¿ তথাপিও সংৰকà§à¦·à¦£ কৰিব খোজে নে? %s"
-#: ../cli/src/connections.c:6826
+#: ../clients/cli/connections.c:6952
#, c-format
msgid "You may edit the following settings: %s\n"
msgstr "আপà§à¦¨à¦¿ নিমà§à¦¨à¦²à¦¿à¦–িত সংহতিসমূহ সমà§à¦ªà¦¾à¦¦à¦¨ কৰিব পাৰিব: %s\n"
-#: ../cli/src/connections.c:6853
+#: ../clients/cli/connections.c:6979
#, 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
+#: ../clients/cli/connections.c:7008 ../clients/cli/connections.c:7063
#, c-format
msgid "Allowed values for '%s' property: %s\n"
msgstr "'%s' বৈশিষà§à¦Ÿà§à¦¯à§° বাবে অনà§à¦®à§‹à¦¦à¦¿à¦¤ মানসমূহ: %s\n"
-#: ../cli/src/connections.c:6895 ../cli/src/connections.c:7112
+#: ../clients/cli/connections.c:7018 ../clients/cli/connections.c:7232
#, c-format
msgid "Error: no setting selected; valid are [%s]\n"
msgstr "তà§à§°à§à¦Ÿà¦¿: কোনো সংহতি নিৰà§à¦¬à¦¾à¦šà¦¨ কৰা হোৱা নাই; বৈধ হল [%s]\n"
-#: ../cli/src/connections.c:6896
+#: ../clients/cli/connections.c:7019
#, 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
+#: ../clients/cli/connections.c:7033 ../clients/cli/connections.c:7169
+#: ../clients/cli/connections.c:7249
#, c-format
msgid "Error: invalid setting argument '%s'; valid are [%s]\n"
msgstr "তà§à§°à§à¦Ÿà¦¿: অবৈধ সংহতি তৰà§à¦• '%s', বৈধ হল [%s]\n"
-#: ../cli/src/connections.c:6921
+#: ../clients/cli/connections.c:7043
#, c-format
msgid "Error: missing setting for '%s' property\n"
msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' বৈশিষà§à¦Ÿà§à¦¯à§° বাবে সংহতি নাই\n"
-#: ../cli/src/connections.c:6928
+#: ../clients/cli/connections.c:7050
#, c-format
msgid "Error: invalid property: %s\n"
msgstr "তà§à§°à§à¦Ÿà¦¿: অবৈধ বৈশিষà§à¦Ÿà§à¦¯: %s\n"
-#: ../cli/src/connections.c:6977
+#: ../clients/cli/connections.c:7097
#, c-format
msgid "Error: unknown setting '%s'\n"
msgstr "তà§à§°à§à¦Ÿà¦¿: অজà§à¦žà¦¾à¦¤ সংহতি '%s'\n"
-#: ../cli/src/connections.c:6990
+#: ../clients/cli/connections.c:7110
#, c-format
msgid "You may edit the following properties: %s\n"
msgstr "আপà§à¦¨à¦¿ নিমà§à¦¨à¦²à¦¿à¦–িত বৈশিষà§à¦Ÿà§à¦¯à¦¸à¦®à§‚হ সমà§à¦ªà¦¾à¦¦à¦¨ কৰিব পাৰিব: %s\n"
-#: ../cli/src/connections.c:7034
+#: ../clients/cli/connections.c:7154
#, c-format
msgid "Error: no argument given; valid are [%s]\n"
msgstr "তà§à§°à§à¦Ÿà¦¿: কোনো তৰà§à¦• দিয়া হোৱা নাই, বৈধ হল [%s]\n"
-#: ../cli/src/connections.c:7047
+#: ../clients/cli/connections.c:7167
#, c-format
msgid "Setting '%s' is not present in the connection.\n"
msgstr "সংহতি '%s' সংযোগত উপলবà§à¦§ নাই।\n"
-#: ../cli/src/connections.c:7088
+#: ../clients/cli/connections.c:7208
#, c-format
msgid "Error: %s properties, nor it is a setting name.\n"
msgstr "তà§à§°à§à¦Ÿà¦¿: %s বৈশিষà§à¦Ÿà§à¦¯à¦¸à¦®à§‚হ, ই à¦à¦Ÿà¦¾ সংহতি নাম নহয়।\n"
-#: ../cli/src/connections.c:7113
+#: ../clients/cli/connections.c:7233
#, c-format
msgid "use 'goto <setting>' first, or 'describe <setting>.<property>'\n"
msgstr ""
"পà§à§°à¦¥à¦®à¦¤à§‡ 'goto <setting>' বà§à¦¯à§±à¦¹à¦¾à§° কৰক, অথবা 'describe <setting>.<property>'\n"
-#: ../cli/src/connections.c:7154
+#: ../clients/cli/connections.c:7274
#, 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
+#: ../clients/cli/connections.c:7303
#, c-format
msgid "Error: unknown setting: '%s'\n"
msgstr "তà§à§°à§à¦Ÿà¦¿: অজà§à¦žà¦¾à¦¤ সংহতি: '%s'\n"
-#: ../cli/src/connections.c:7197
+#: ../clients/cli/connections.c:7308
+#, c-format
+msgid "Error: '%s' setting not present in the connection\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: সংহতি '%s' সংযোগত উপলবà§à¦§ নাই\n"
+
+#: ../clients/cli/connections.c:7333
+#, c-format
+msgid "Error: invalid property: %s%s\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: অবৈধ বৈশিষà§à¦Ÿà§à¦¯: %s%s\n"
+
+#: ../clients/cli/connections.c:7335
+msgid ", neither a valid setting name"
+msgstr ", à¦à¦Ÿà¦¾ বৈধ সংহতি নাম নহয়"
+
+#: ../clients/cli/connections.c:7355
#, c-format
msgid "Verify setting '%s': %s\n"
-msgstr "সংহতি '%s' সতা সতà§à¦¯ নিৰূপণ কৰক: %s\n"
+msgstr "সংহতি '%s' সতà§à¦¯à¦¾à¦ªà¦¨ কৰক: %s\n"
-#: ../cli/src/connections.c:7204
+#: ../clients/cli/connections.c:7362
#, c-format
msgid "Verify connection: %s\n"
-msgstr "সংযোগ সতা সতà§à¦¯ নিৰূপণ কৰক: %s\n"
+msgstr "সংযোগ সতà§à¦¯à¦¾à¦ªà¦¨ কৰক: %s\n"
-#: ../cli/src/connections.c:7222
+#: ../clients/cli/connections.c:7380
#, c-format
-#| msgid "Error: invalid extra argument '%s'."
msgid "Error: invalid argument '%s'\n"
msgstr "তà§à§°à§à¦Ÿà¦¿: অবৈধ তৰà§à¦• '%s'\n"
-#: ../cli/src/connections.c:7256
+#: ../clients/cli/connections.c:7414
#, c-format
-msgid "Error: Failed to save '%s' (%s) connection: (%d) %s\n"
-msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' (%s) সংযোগ সংৰকà§à¦·à¦£ কৰিবলৈ বà§à¦¯à§°à§à¦¥: (%d) %s\n"
+#| msgid "Error: Failed to save '%s' (%s) connection: (%d) %s\n"
+msgid "Error: Failed to save '%s' (%s) connection: %s\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' (%s) সংযোগ সংৰকà§à¦·à¦£ কৰিবলৈ বà§à¦¯à§°à§à¦¥: %s\n"
-#: ../cli/src/connections.c:7264
+#: ../clients/cli/connections.c:7421
#, c-format
msgid "Connection '%s' (%s) successfully saved.\n"
msgstr "সংযোগ '%s' (%s) সফলভাৱে সংৰকà§à¦·à¦£ কৰা হল।\n"
-#: ../cli/src/connections.c:7265
+#: ../clients/cli/connections.c:7422
#, 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
+#: ../clients/cli/connections.c:7455
#, c-format
msgid "Error: connection verification failed: %s\n"
-msgstr "তà§à§°à§à¦Ÿà¦¿: সংযোগৰ সতা সতà§à¦¯ নিৰূপণ বà§à¦¯à§°à§à¦¥ হল: %s\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: সংযোগৰ সতà§à¦¯à¦¾à¦ªà¦¨ বà§à¦¯à§°à§à¦¥ হল: %s\n"
-#: ../cli/src/connections.c:7300
+#: ../clients/cli/connections.c:7456
msgid "(unknown error)"
msgstr "(অজà§à¦žà¦¾à¦¤ তà§à§°à§à¦Ÿà¦¿)"
-#: ../cli/src/connections.c:7321
+#: ../clients/cli/connections.c:7477
#, c-format
msgid "Error: connection is not saved. Type 'save' first.\n"
msgstr "তà§à§°à§à¦Ÿà¦¿: সংযোগ সংৰকà§à¦·à¦£ হোৱা নাই। পà§à§°à¦¥à¦®à¦¤à§‡ 'save' টাইপ কৰক।\n"
-#: ../cli/src/connections.c:7325
+#: ../clients/cli/connections.c:7481
#, c-format
msgid "Error: connection is not valid: %s\n"
msgstr "তà§à§°à§à¦Ÿà¦¿: সংযোগ বৈধ নহয়: %s\n"
-#: ../cli/src/connections.c:7336
+#: ../clients/cli/connections.c:7491
#, c-format
msgid "Error: Cannot activate connection: %s.\n"
msgstr "তà§à§°à§à¦Ÿà¦¿: সংযোগ সকà§à§°à¦¿à§Ÿ কৰিব নোৱাৰি: %s।\n"
-#: ../cli/src/connections.c:7346
+#: ../clients/cli/connections.c:7502
#, c-format
-msgid "Error: Failed to activate '%s' (%s) connection: (%d) %s\n"
-msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' (%s) সংযোগ সকà§à§°à¦¿à§Ÿ কৰিবলৈ বà§à¦¯à§°à§à¦¥: (%d) %s\n"
+#| msgid "Error: Failed to activate '%s' (%s) connection: (%d) %s\n"
+msgid "Error: Failed to activate '%s' (%s) connection: %s\n"
+msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' (%s) সংযোগ সকà§à§°à¦¿à§Ÿ কৰিবলৈ বà§à¦¯à§°à§à¦¥: %s\n"
-#: ../cli/src/connections.c:7352
+#: ../clients/cli/connections.c:7508
#, c-format
msgid "Monitoring connection activation (press any key to continue)\n"
msgstr "সংযোগৰ সকà§à§°à¦¿à§Ÿà¦•à§°à¦£ পৰà§à¦¯à¦¬à§‡à¦•à§à¦·à¦£ কৰা হৈছে (আগবাà§à¦¿à¦¬à¦²à§ˆ যিকোনো কি টিপক)\n"
-#: ../cli/src/connections.c:7390
+#: ../clients/cli/connections.c:7546
#, c-format
msgid "Error: status-line: %s\n"
msgstr "তà§à§°à§à¦Ÿà¦¿: status-line: %s\n"
-#: ../cli/src/connections.c:7398
+#: ../clients/cli/connections.c:7554
#, c-format
msgid "Error: save-confirmation: %s\n"
msgstr "তà§à§°à§à¦Ÿà¦¿: save-confirmation: %s\n"
-#: ../cli/src/connections.c:7406
+#: ../clients/cli/connections.c:7562
#, c-format
msgid "Error: bad color number: '%s'; use <0-8>\n"
msgstr "তà§à§°à§à¦Ÿà¦¿: বেয়া ৰঙ সংখà§à¦¯à¦¾: '%s'; <0-8> বà§à¦¯à§±à¦¹à¦¾à§° কৰক\n"
-#: ../cli/src/connections.c:7418
+#: ../clients/cli/connections.c:7574
#, c-format
msgid "Current nmcli configuration:\n"
msgstr "বৰà§à¦¤à¦®à¦¾à¦¨ nmcli সংৰূপ:\n"
-#: ../cli/src/connections.c:7426
+#: ../clients/cli/connections.c:7582
#, 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
+#: ../clients/cli/connections.c:7824
#, 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
+#: ../clients/cli/connections.c:7836 ../clients/cli/connections.c:8021
+#: ../clients/cli/connections.c:8028
#, c-format
msgid "Error: Unknown connection '%s'."
msgstr "তà§à§°à§à¦Ÿà¦¿: অজà§à¦žà¦¾à¦¤ সংযোগ '%s'।"
-#: ../cli/src/connections.c:7702
+#: ../clients/cli/connections.c:7851
#, c-format
msgid "Warning: editing existing connection '%s'; 'type' argument is ignored\n"
msgstr ""
"সতৰà§à¦•à¦¬à¦¾à§°à§à¦¤à¦¾: অসà§à¦¤à¦¿à¦¤à§à¦¬à¦¬à¦¾à¦¨ সংযোগ '%s' সমà§à¦ªà¦¾à¦¦à¦¨ কৰা হৈছে; 'type' তৰà§à¦• উপেকà§à¦·à¦¾ কৰা "
"হৈছে\n"
-#: ../cli/src/connections.c:7705
+#: ../clients/cli/connections.c:7854
#, c-format
msgid ""
"Warning: editing existing connection '%s'; 'con-name' argument is ignored\n"
@@ -2821,409 +2865,459 @@ msgstr ""
"কৰা "
"হৈছে\n"
-#: ../cli/src/connections.c:7719
+#: ../clients/cli/connections.c:7868
#, c-format
msgid "Valid connection types: %s\n"
msgstr "বৈধ সংযোগ ধৰণসমূহ: %s\n"
-#: ../cli/src/connections.c:7721
+#: ../clients/cli/connections.c:7870
#, c-format
msgid "Error: invalid connection type; %s\n"
msgstr "তà§à§°à§à¦Ÿà¦¿: অবৈধ সংযোগ ধৰণ; %s\n"
-#: ../cli/src/connections.c:7757
+#: ../clients/cli/connections.c:7909
#, c-format
msgid "===| nmcli interactive connection editor |==="
msgstr "===| nmcli interactive connection editor |==="
-#: ../cli/src/connections.c:7760
+#: ../clients/cli/connections.c:7912
#, c-format
msgid "Editing existing '%s' connection: '%s'"
msgstr "অসà§à¦¤à¦¿à¦¤à§à¦¬à¦¬à¦¾à¦¨ '%s' সংযোগ সমà§à¦ªà¦¾à¦¦à¦¨ কৰা হৈছে: '%s'"
-#: ../cli/src/connections.c:7762
+#: ../clients/cli/connections.c:7914
#, c-format
msgid "Adding a new '%s' connection"
msgstr "à¦à¦Ÿà¦¾ নতà§à¦¨ '%s' সংযোগ যোগ কৰা হৈছে"
-#: ../cli/src/connections.c:7764
+#: ../clients/cli/connections.c:7916
#, c-format
msgid "Type 'help' or '?' for available commands."
msgstr "উপলবà§à¦§ কমানà§à¦¡à¦¸à¦®à§‚হৰ বাবে 'help' অথবা '?' টাইপ কৰক।"
-#: ../cli/src/connections.c:7766
+#: ../clients/cli/connections.c:7918
#, c-format
msgid "Type 'describe [<setting>.<prop>]' for detailed property description."
msgstr "বিৱৰিত বৈশিষà§à¦Ÿà§à¦¯à§° বিৱৰণৰ বাবে 'describe [<setting>.<prop>]' টাইপ কৰক।"
-#: ../cli/src/connections.c:7805
+#: ../clients/cli/connections.c:7957
#, c-format
-msgid "Error: Failed to modify connection '%s': (%d) %s"
-msgstr "তà§à§°à§à¦Ÿà¦¿: সংযোগ '%s' পৰিবৰà§à¦¤à¦¨ কৰিবলৈ বà§à¦¯à§°à§à¦¥: (%d) %s"
+#| msgid "Error: Failed to modify connection '%s': (%d) %s"
+msgid "Error: Failed to modify connection '%s': %s"
+msgstr "তà§à§°à§à¦Ÿà¦¿: সংযোগ '%s' পৰিবৰà§à¦¤à¦¨ কৰিবলৈ বà§à¦¯à§°à§à¦¥: %s"
-#: ../cli/src/connections.c:7811
+#: ../clients/cli/connections.c:7964
#, c-format
msgid "Connection '%s' (%s) successfully modified.\n"
msgstr "সংযোগ '%s' (%s) সফলভাৱে পৰিবৰà§à¦¤à¦¨ কৰা হৈছে।\n"
-#: ../cli/src/connections.c:7838
+#: ../clients/cli/connections.c:7996
#, c-format
msgid "Error: No arguments provided."
msgstr "তà§à§°à§à¦Ÿà¦¿: কোনো তৰà§à¦• পà§à§°à¦¦à¦¾à¦¨ কৰা হোৱা নাই।"
-#: ../cli/src/connections.c:7862
+#: ../clients/cli/connections.c:8015
#, c-format
msgid "Error: connection ID is missing."
-msgstr "তà§à§°à§à¦Ÿà¦¿: সংযোগ ID সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨à¥¤"
+msgstr "তà§à§°à§à¦Ÿà¦¿: সংযোগ ID সনà§à¦§à¦¾à¦¨à¦¹à§€à¦¨à¥¤"
-#: ../cli/src/connections.c:7867
+#: ../clients/cli/connections.c:8037 ../clients/cli/connections.c:8050
#, c-format
msgid "Error: <setting>.<property> argument is missing."
-msgstr "তà§à§°à§à¦Ÿà¦¿: <setting>.<property> তৰà§à¦• সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨à¥¤"
+msgstr "তà§à§°à§à¦Ÿà¦¿: <setting>.<property> তৰà§à¦• সনà§à¦§à¦¾à¦¨à¦¹à§€à¦¨à¥¤"
+
+#: ../clients/cli/connections.c:8055
+#, c-format
+msgid "Error: value for '%s' is missing."
+msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' ৰ বাবে মান নাই।"
-#: ../cli/src/connections.c:7890
+#: ../clients/cli/connections.c:8073
#, c-format
msgid "Error: invalid <setting>.<property> '%s'."
msgstr "তà§à§°à§à¦Ÿà¦¿: অবৈধ <setting>.<property> '%s'।"
-#: ../cli/src/connections.c:7905
+#: ../clients/cli/connections.c:8081
#, c-format
msgid "Error: invalid or not allowed setting '%s': %s."
msgstr "তà§à§°à§à¦Ÿà¦¿: অবৈধ অথবা অনà§à¦®à¦¤à¦¿ নথকা সংহতি '%s': %s।"
-#: ../cli/src/connections.c:7926
+#: ../clients/cli/connections.c:8102
#, c-format
msgid "Error: invalid property '%s': %s."
msgstr "তà§à§°à§à¦Ÿà¦¿: অবৈধ বৈশিষà§à¦Ÿà§à¦¯ '%s': %s।"
-#: ../cli/src/connections.c:7932
+#: ../clients/cli/connections.c:8113
#, c-format
msgid "Error: failed to modify %s.%s: %s."
msgstr "তà§à§°à§à¦Ÿà¦¿: %s.%s পৰিবৰà§à¦¤à¦¨ কৰিবলৈ বà§à¦¯à§°à§à¦¥: %s।"
-#: ../cli/src/connections.c:7962
+#: ../clients/cli/connections.c:8131
+#, c-format
+msgid "Error: failed to remove a value from %s.%s: %s."
+msgstr "তà§à§°à§à¦Ÿà¦¿: %s.%s ৰ পৰা à¦à¦Ÿà¦¾ মান আতৰাবলৈ বà§à¦¯à§°à§à¦¥: %s।"
+
+#: ../clients/cli/connections.c:8169
#, c-format
msgid "Error: Connection deletion failed: %s"
msgstr "তà§à§°à§à¦Ÿà¦¿: সংযোগ মচি পেলোৱা বà§à¦¯à§°à§à¦¥ হল: %s"
-#: ../cli/src/connections.c:8033
+#: ../clients/cli/connections.c:8233
#, c-format
msgid "Error: unknown connection: %s\n"
msgstr "তà§à§°à§à¦Ÿà¦¿: অজà§à¦žà¦¾à¦¤ সংযোগ: %s\n"
#. truncate trailing ", "
-#: ../cli/src/connections.c:8069
+#: ../clients/cli/connections.c:8270
#, c-format
msgid "Error: cannot delete unknown connection(s): %s."
msgstr "তà§à§°à§à¦Ÿà¦¿: অজà§à¦žà¦¾à¦¤ সংযোগ(সমূহ) মচি পেলাব নোৱাৰি: %s।"
-#: ../cli/src/connections.c:8140
+#: ../clients/cli/connections.c:8287 ../clients/cli/connections.c:8314
+#: ../clients/cli/connections.c:8451 ../clients/cli/devices.c:2808
+#: ../clients/cli/general.c:324 ../clients/cli/general.c:462
#, c-format
-msgid "Could not load file '%s'\n"
-msgstr "ফাইল '%s' লড কৰিব পৰা নগল\n"
+msgid "Error: NetworkManager is not running."
+msgstr "তà§à§°à§à¦Ÿà¦¿: NetworkManager চলি থকা নাই।"
-#: ../cli/src/connections.c:8267
+#: ../clients/cli/connections.c:8294
#, c-format
-msgid "Error: '%s' is not valid 'connection' command."
-msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' à¦à¦Ÿà¦¾ বৈধ 'connection' কমানà§à¦¡ নহয়।"
+#| msgid "Error: Failed to add '%s' connection: (%d) %s"
+msgid "Error: failed to reload connections: %s."
+msgstr "তà§à§°à§à¦Ÿà¦¿: সংযোগসমূহ পূনৰ ল'ড কৰিবলে বà§à¦¯à§°à§à¦¥: %s।"
-#: ../cli/src/connections.c:8336 ../cli/src/network-manager.c:615
+#: ../clients/cli/connections.c:8334
#, c-format
-msgid "Error: Could not get system settings."
-msgstr "তà§à§°à§à¦Ÿà¦¿: চিসà§à¦Ÿà§‡à¦® সংহতিসমূহ পà§à§°à¦¾à¦ªà§à¦¤ কৰিব নোৱাৰি।"
+#| msgid "Error: Failed to add '%s' connection: (%d) %s"
+msgid "Error: failed to load connection: %s."
+msgstr "তà§à§°à§à¦Ÿà¦¿: সংযোগ ল'ড কৰিবলৈ কৰিবলে বà§à¦¯à§°à§à¦¥: %s।"
-#: ../cli/src/connections.c:8346
+#: ../clients/cli/connections.c:8342
+#, c-format
+msgid "Could not load file '%s'\n"
+msgstr "ফাইল '%s' লড কৰিব পৰা নগল\n"
+
+#: ../clients/cli/connections.c:8462
+#, c-format
+#| msgid "Error: Could not get system settings: %s."
+msgid "Error: could not get remote settings: %s."
+msgstr "তà§à§°à§à¦Ÿà¦¿: দূৰৱৰà§à¦¤à§€ সংহতিসমূহ পà§à§°à¦¾à¦ªà§à¦¤ কৰিব পৰা নগল: %s।"
+
+#: ../clients/cli/connections.c:8473
#, c-format
msgid "Error: Can't obtain connections: settings service is not running."
msgstr "তà§à§°à§à¦Ÿà¦¿: সংযোগ পà§à§°à¦¾à¦ªà§à¦¤ কৰিব নোৱাৰি: সংহতিসমূহ সেৱা চলি থকা নাই।"
+#: ../clients/cli/connections.c:8527
+#, c-format
+msgid "Error: '%s' is not valid 'connection' command."
+msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' à¦à¦Ÿà¦¾ বৈধ 'connection' কমানà§à¦¡ নহয়।"
+
+#. define some prompts
+#: ../clients/cli/devices.c:36
+msgid "Interface: "
+msgstr "আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦ :"
+
#. 3
-#. 16
-#: ../cli/src/devices.c:75 ../cli/src/devices.c:103
+#. 17
+#: ../clients/cli/devices.c:44 ../clients/cli/devices.c:73
msgid "CONNECTION"
msgstr "সংযোগ"
#. 4
-#. 17
-#: ../cli/src/devices.c:76 ../cli/src/devices.c:104
+#. 18
+#: ../clients/cli/devices.c:45 ../clients/cli/devices.c:74
msgid "CON-UUID"
msgstr "CON-UUID"
#. 2
-#: ../cli/src/devices.c:89
+#: ../clients/cli/devices.c:58
msgid "VENDOR"
msgstr "বিকà§à§°à§‡à¦¤à¦¾"
#. 3
-#: ../cli/src/devices.c:90
+#: ../clients/cli/devices.c:59
msgid "PRODUCT"
msgstr "উৎপাদন"
#. 4
-#: ../cli/src/devices.c:91
+#: ../clients/cli/devices.c:60
msgid "DRIVER"
msgstr "ডà§à§°à¦¾à¦‡à¦­à¦¾à§°"
#. 5
-#: ../cli/src/devices.c:92
+#: ../clients/cli/devices.c:61
msgid "DRIVER-VERSION"
msgstr "ডà§à§°à¦¾à¦‡à¦­à¦¾à§°-সংসà§à¦•à§°à¦£"
#. 6
-#: ../cli/src/devices.c:93
+#: ../clients/cli/devices.c:62
msgid "FIRMWARE-VERSION"
msgstr "ফাৰà§à¦®à§±à§‡à§°-সংসà§à¦•à§°à¦£"
#. 7
-#: ../cli/src/devices.c:94
+#: ../clients/cli/devices.c:63
msgid "HWADDR"
msgstr "HWADDR"
#. 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
+#: ../clients/cli/devices.c:64 ../clients/tui/nmt-page-ethernet.c:86
+#: ../clients/tui/nmt-page-infiniband.c:96 ../clients/tui/nmt-page-vlan.c:130
+#: ../clients/tui/nmt-page-wifi.c:372
msgid "MTU"
msgstr "MTU"
#. 10
-#: ../cli/src/devices.c:97
+#: ../clients/cli/devices.c:66
msgid "REASON"
msgstr "কাৰণ"
#. 11
-#: ../cli/src/devices.c:98
+#: ../clients/cli/devices.c:67
msgid "UDI"
msgstr "UDI"
#. 12
-#: ../cli/src/devices.c:99
+#: ../clients/cli/devices.c:68
msgid "IP-IFACE"
msgstr "IP-IFACE"
#. 13
-#: ../cli/src/devices.c:100
+#. 2
+#: ../clients/cli/devices.c:69 ../clients/cli/devices.c:97
+msgid "IS-SOFTWARE"
+msgstr "IS-SOFTWARE"
+
+#. 14
+#: ../clients/cli/devices.c:70
msgid "NM-MANAGED"
msgstr "NM-বà§à¦¯à§±à¦¸à§à¦¥à¦¾à¦ªà¦¿à¦¤"
-#. 15
-#: ../cli/src/devices.c:102
+#. 16
+#: ../clients/cli/devices.c:72
msgid "FIRMWARE-MISSING"
-msgstr "ফাৰà§à¦®à§±à§‡à§°-সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨"
+msgstr "ফাৰà§à¦®à§±à§‡à§°-সনà§à¦§à¦¾à¦¨à¦¹à§€à¦¨"
#. 0
-#: ../cli/src/devices.c:115
+#: ../clients/cli/devices.c:85
msgid "AVAILABLE-CONNECTION-PATHS"
msgstr "উপলবà§à¦§-সংযোগ-পথসমূহ"
#. 1
-#: ../cli/src/devices.c:116
+#: ../clients/cli/devices.c:86
msgid "AVAILABLE-CONNECTIONS"
msgstr "উপলবà§à¦§-সংযোগসমূহ"
#. 0
-#: ../cli/src/devices.c:125
+#: ../clients/cli/devices.c:95
msgid "CARRIER-DETECT"
msgstr "পৰিবহক-চিনাকà§à¦¤"
#. 1
-#: ../cli/src/devices.c:126
+#: ../clients/cli/devices.c:96
msgid "SPEED"
msgstr "গতি"
#. 0
-#: ../cli/src/devices.c:135
+#: ../clients/cli/devices.c:106
msgid "CARRIER"
msgstr "পৰিবহক"
#. 0
-#: ../cli/src/devices.c:144 ../cli/src/devices.c:565
+#: ../clients/cli/devices.c:115 ../clients/cli/devices.c:545
msgid "WEP"
msgstr "WEP"
#. 1
-#: ../cli/src/devices.c:145
+#: ../clients/cli/devices.c:116
msgid "WPA"
msgstr "WPA"
#. 2
-#: ../cli/src/devices.c:146 ../cli/src/devices.c:573
+#: ../clients/cli/devices.c:117 ../clients/cli/devices.c:553
msgid "WPA2"
msgstr "WPA2"
#. 3
-#: ../cli/src/devices.c:147
+#: ../clients/cli/devices.c:118
msgid "TKIP"
msgstr "TKIP"
#. 4
-#: ../cli/src/devices.c:148
+#: ../clients/cli/devices.c:119
msgid "CCMP"
msgstr "CCMP"
#. 5
#. 2
-#: ../cli/src/devices.c:149 ../cli/src/devices.c:239
+#: ../clients/cli/devices.c:120 ../clients/cli/devices.c:219
msgid "AP"
msgstr "AP"
#. 6
-#: ../cli/src/devices.c:150
+#: ../clients/cli/devices.c:121
msgid "ADHOC"
msgstr "ADHOC"
#. 0
-#: ../cli/src/devices.c:159
+#: ../clients/cli/devices.c:130
msgid "CTR-FREQ"
msgstr "CTR-FREQ"
#. 1
-#: ../cli/src/devices.c:160
+#: ../clients/cli/devices.c:131
msgid "RSSI"
msgstr "RSSI"
#. 2
-#: ../cli/src/devices.c:161
+#: ../clients/cli/devices.c:132
msgid "CINR"
msgstr "CINR"
#. 3
-#: ../cli/src/devices.c:162
+#: ../clients/cli/devices.c:133
msgid "TX-POW"
msgstr "TX-POW"
#. 4
-#: ../cli/src/devices.c:163
+#: ../clients/cli/devices.c:134
msgid "BSID"
msgstr "BSID"
#. 0
-#: ../cli/src/devices.c:172 ../tui/nmt-page-wifi.c:221
+#: ../clients/cli/devices.c:143 ../clients/tui/nmt-page-wifi.c:226
msgid "SSID"
msgstr "SSID"
#. 1
-#: ../cli/src/devices.c:173
+#: ../clients/cli/devices.c:144
msgid "SSID-HEX"
msgstr "SSID-HEX"
#. 2
-#: ../cli/src/devices.c:174 ../tui/nmt-page-wifi.c:352
+#: ../clients/cli/devices.c:145 ../clients/tui/nmt-page-wifi.c:360
msgid "BSSID"
msgstr "BSSID"
#. 3
-#: ../cli/src/devices.c:175
+#: ../clients/cli/devices.c:146
msgid "MODE"
msgstr "অৱসà§à¦¥à¦¾"
#. 4
-#: ../cli/src/devices.c:176
+#: ../clients/cli/devices.c:147
msgid "CHAN"
msgstr "CHAN"
#. 5
-#: ../cli/src/devices.c:177
+#: ../clients/cli/devices.c:148
msgid "FREQ"
msgstr "FREQ"
#. 6
-#: ../cli/src/devices.c:178
+#: ../clients/cli/devices.c:149
msgid "RATE"
msgstr "হাৰ"
#. 7
#. 1
-#: ../cli/src/devices.c:179 ../cli/src/devices.c:199
+#: ../clients/cli/devices.c:150 ../clients/cli/devices.c:170
msgid "SIGNAL"
msgstr "সংকেত"
#. 8
-#: ../cli/src/devices.c:180
+#: ../clients/cli/devices.c:151
msgid "BARS"
msgstr "BARS"
#. 9
-#: ../cli/src/devices.c:181
+#: ../clients/cli/devices.c:152
msgid "SECURITY"
msgstr "সà§à§°à¦•à§à¦·à¦¾"
#. 10
-#: ../cli/src/devices.c:182
+#: ../clients/cli/devices.c:153
msgid "WPA-FLAGS"
msgstr "WPA-FLAGS"
#. 11
-#: ../cli/src/devices.c:183
+#: ../clients/cli/devices.c:154
msgid "RSN-FLAGS"
msgstr "RSN-FLAGS"
#. 14
-#: ../cli/src/devices.c:186
+#: ../clients/cli/devices.c:157
msgid "*"
msgstr "*"
#. 0
#. 5
-#: ../cli/src/devices.c:198 ../cli/src/devices.c:242
+#: ../clients/cli/devices.c:169 ../clients/cli/devices.c:222
msgid "NSP"
msgstr "NSP"
#. 0
-#: ../cli/src/devices.c:213
+#: ../clients/cli/devices.c:184
msgid "SLAVES"
msgstr "সà§à¦²à§‡à¦‡à¦­à¦¬à§‹à§°"
#. 0
-#: ../cli/src/devices.c:222
+#: ../clients/cli/devices.c:193
msgid "ID"
msgstr "ID"
#. 0
-#: ../cli/src/devices.c:237
+#: ../clients/cli/devices.c:202 ../clients/cli/devices.c:217
msgid "CAPABILITIES"
msgstr "কà§à¦·à¦®à¦¤à¦¾à¦¸à¦®à§‚হ"
#. 1
-#: ../cli/src/devices.c:238
+#: ../clients/cli/devices.c:218
msgid "WIFI-PROPERTIES"
msgstr "WIFI-বৈশিষà§à¦Ÿà§à¦¯à¦¸à¦®à§‚হ"
#. 3
-#: ../cli/src/devices.c:240
+#: ../clients/cli/devices.c:220
msgid "WIRED-PROPERTIES"
msgstr "তাà¦à§°à¦¯à§à¦•à§à¦¤-বৈশিষà§à¦Ÿà§à¦¯à¦¸à¦®à§‚হ"
#. 4
-#: ../cli/src/devices.c:241
+#: ../clients/cli/devices.c:221
msgid "WIMAX-PROPERTIES"
msgstr "WIMAX-বৈশিষà§à¦Ÿà§à¦¯à¦¸à¦®à§‚হ"
#. 10
-#: ../cli/src/devices.c:247 ../tui/nmt-page-bond.c:73
+#: ../clients/cli/devices.c:227 ../clients/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"
+#: ../clients/cli/devices.c:228 ../clients/tui/nmt-page-team.c:51
+msgid "TEAM"
+msgstr "দল"
#. 12
-#: ../cli/src/devices.c:249
+#: ../clients/cli/devices.c:229 ../clients/tui/nmt-page-bridge.c:42
+msgid "BRIDGE"
+msgstr "বà§à§°à¦¿à¦œ"
+
+#. 14
+#: ../clients/cli/devices.c:231
+msgid "BLUETOOTH"
+msgstr "বà§à¦²à§à¦Ÿà§à¦¥"
+
+#. 15
+#: ../clients/cli/devices.c:232
msgid "CONNECTIONS"
msgstr "সংযোগসমূহ"
-#: ../cli/src/devices.c:274
+#: ../clients/cli/devices.c:256
#, c-format
msgid ""
"Usage: nmcli device { COMMAND | help }\n"
"\n"
-"COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | delete | wifi | wimax }\n"
"\n"
-"COMMAND := { status | show | connect | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | delete | wifi }\n"
"\n"
" status\n"
"\n"
@@ -3233,6 +3327,8 @@ msgid ""
"\n"
" disconnect <ifname>\n"
"\n"
+" delete <ifname>\n"
+"\n"
" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
"\n"
" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
@@ -3244,11 +3340,11 @@ msgid ""
" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
msgstr ""
-"বà§à¦¯à§±à¦¹à¦¾à§°: nmcli device { COMMAND | help }\n"
+"Usage: nmcli device { COMMAND | help }\n"
"\n"
-"COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | delete | wifi | wimax }\n"
"\n"
-"COMMAND := { status | show | connect | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | delete | wifi }\n"
"\n"
" status\n"
"\n"
@@ -3258,6 +3354,8 @@ msgstr ""
"\n"
" disconnect <ifname>\n"
"\n"
+" delete <ifname>\n"
+"\n"
" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
"\n"
" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
@@ -3269,7 +3367,7 @@ msgstr ""
" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
-#: ../cli/src/devices.c:298
+#: ../clients/cli/devices.c:280
#, c-format
msgid ""
"Usage: nmcli device status { help }\n"
@@ -3300,7 +3398,7 @@ msgstr ""
"অবিকলà§à¦ªà¦¿à¦¤ কমানà§à¦¡, যাৰ অৰà§à¦¥ 'nmcli device' ঠ'nmcli device status' ক কল কৰে।\n"
"\n"
-#: ../cli/src/devices.c:314
+#: ../clients/cli/devices.c:295
#, c-format
msgid ""
"Usage: nmcli device show { ARGUMENTS | help }\n"
@@ -3319,7 +3417,7 @@ msgstr ""
"কমানà§à¦¡à§‡ সকলো ডিভাইচৰ বাবে, অথবা à¦à¦Ÿà¦¾ নিৰà§à¦¦à¦¿à¦·à§à¦Ÿ ডিভাইচৰ বাবে বিৱৰণ দেখà§à§±à¦¾à§Ÿà¥¤\n"
"\n"
-#: ../cli/src/devices.c:326
+#: ../clients/cli/devices.c:306
#, c-format
msgid ""
"Usage: nmcli device connect { ARGUMENTS | help }\n"
@@ -3341,7 +3439,7 @@ msgstr ""
"ই লগতে সà§à¦¬-সংযোগ হব নলগা সংযোগসমূহ সনà§à¦§à¦¾à¦¨ কৰিব \n"
"\n"
-#: ../cli/src/devices.c:339
+#: ../clients/cli/devices.c:318
#, c-format
msgid ""
"Usage: nmcli device disconnect { ARGUMENTS | help }\n"
@@ -3362,7 +3460,31 @@ msgstr ""
"হসà§à¦¤à¦•à§à¦·à§‡à¦ªà§° অবিহনে ততোধিক সংযোগ সà§à¦¬-সকà§à§°à¦¿à§Ÿà¦•à§°à¦£à§° পৰা পà§à§°à¦¤à¦¿à§°à§‹à¦§ কৰে\n"
"\n"
-#: ../cli/src/devices.c:352
+#: ../clients/cli/devices.c:330
+#, c-format
+msgid ""
+"Usage: nmcli device delete { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Deletes the software device.\n"
+"The command removes the interface. It only works for software devices\n"
+"(like bonds, bridges, etc.). Hardware devices cannot be deleted by the\n"
+"command.\n"
+"\n"
+msgstr ""
+"বà§à¦¯à§±à¦¹à¦¾à§°: nmcli device delete { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"চফà§à¦Ÿà§±à§‡à§° ডিভাইচ আতৰায়।\n"
+"কমানà§à¦¡à§‡ আনà§à¦¤à¦ªà§ƒà¦·à§à¦  আতৰায়। ই কেৱল চফà§à¦Ÿà§±à§‡à§° ডিভাইচসমূহৰ বাবে কাম কৰে\n"
+"(যেনে বানà§à¦§à¦¨à§€, বà§à§°à¦¿à¦œà¦¸à¦®à§‚হ, ইতà§à¦¯à¦¾à¦¦à§€)। হাৰà§à¦¡à§±à§‡à§° ডিভাইচসমূহক কমানà§à¦¡ দà§à¦¬à¦¾à§°à¦¾ মচি "
+"পেলাব\n"
+"নোৱাৰি।\n"
+"\n"
+
+#: ../clients/cli/devices.c:343
#, c-format
msgid ""
"Usage: nmcli device wifi { ARGUMENTS | help }\n"
@@ -3415,16 +3537,16 @@ msgstr ""
"SSID অথবা BSSID দà§à¦¬à¦¾à§°à¦¾ ধাৰà§à¦¯à§à¦¯ কৰা à¦à¦Ÿà¦¾ Wi-Fi নেটাৱাৰà§à¦•à¦²à§ˆ সংযোগ কৰক। কমানà§à¦¡à§‡ "
"à¦à¦Ÿà¦¾ "
"নতà§à¦¨\n"
-"সংযোগ সৃষà§à¦Ÿà¦¿ কৰে আৰৠতাৰ পিছত à¦à¦Ÿà¦¾ ডিভাইচত সকà§à§°à¦¿à§Ÿ কৰে। ই à¦à¦Ÿà¦¾ GUI কà§à¦²à¦¾à¦à¦¨à§à¦Ÿà¦¤ "
+"সংযোগ সৃষà§à¦Ÿà¦¿ কৰে আৰৠতাৰ পিছত à¦à¦Ÿà¦¾ ডিভাইচত সকà§à§°à¦¿à§Ÿ কৰে। ই à¦à¦Ÿà¦¾ GUI কà§à¦²à¦¾à¦à¦£à§à¦Ÿà¦¤ "
"SSID "
"কà§à¦²à¦¿à¦• কৰাৰ\n"
"à¦à¦Ÿà¦¾ কমানà§à¦¡-লাইন বিকলà§à¦ªà¥¤ কমানà§à¦¡à§‡ সদায় à¦à¦Ÿà¦¾ নতà§à¦¨ সংযোগ সৃষà§à¦Ÿà¦¿ কৰে আৰৠসেয়েহে ই "
"মূখà§à¦¯à§°à§‚পে "
"নতà§à¦¨\n"
-"Wi-Fi নেটৱাৰà§à¦•à§° সৈতে সংযোগ কৰাৰ বাবে উপযোগী।\n"
-"যদি নেটৱাৰà§à¦•à§° বাবে à¦à¦Ÿà¦¾ সংযোগ ইতিমধà§à¦¯à§‡ অসà§à¦¤à¦¿à¦¤à§à¦¬à¦¬à¦¾à¦¨, ইয়াক নিমà§à¦¨à¦²à¦¿à¦–িতৰূপে অনাটো\n"
+"Wi-Fi নেটৱৰà§à¦•à§° সৈতে সংযোগ কৰাৰ বাবে উপযোগী।\n"
+"যদি নেটৱৰà§à¦•à§° বাবে à¦à¦Ÿà¦¾ সংযোগ ইতিমধà§à¦¯à§‡ অসà§à¦¤à¦¿à¦¤à§à¦¬à¦¬à¦¾à¦¨, ইয়াক নিমà§à¦¨à¦²à¦¿à¦–িতৰূপে অনাটো\n"
"ভাল: nmcli con up id <name>. মন কৰিব যে\n"
-"কেৱল খোলা, WEP আৰৠWPA-PSK নেটৱাৰà§à¦•à¦¸à¦®à§‚হ বৰà§à¦¤à¦®à¦¾à¦¨à§‡ সমৰà§à¦¥à¦¿à¦¤à¥¤ লগতে à¦à¦¨à§‡à¦•à§à§±à¦¾ ভবা হয় "
+"কেৱল খোলা, WEP আৰৠWPA-PSK নেটৱৰà§à¦•à¦¸à¦®à§‚হ বৰà§à¦¤à¦®à¦¾à¦¨à§‡ সমৰà§à¦¥à¦¿à¦¤à¥¤ লগতে à¦à¦¨à§‡à¦•à§à§±à¦¾ ভবা হয় "
"যে\n"
"IP সংৰূপ DHCP দà§à¦¬à¦¾à§°à¦¾ পà§à§°à¦¾à¦ªà§à¦¤ কৰা হয়।\n"
"\n"
@@ -3433,14 +3555,14 @@ msgstr ""
"অনà§à§°à§‹à¦§ কৰক যে NetworkManager ঠউপলবà§à¦§ অভিগম বিনà§à¦¦à§à¦¬à§‹à§°à§° বাবে তৎকà§à¦·à¦¨à¦¾à¦¤ "
"পà§à¦¨à§°-সà§à¦•à§‡à¦¨ "
"কৰে।\n"
-"NetworkManager ঠWi-Fi নেটৱাৰà§à¦•à¦¸à¦®à§‚হ সময়ে সময়ে সà§à¦•à§‡à¦¨ কৰে, কিনà§à¦¤à§ কিছà§à¦®à¦¾à¦¨ "
+"NetworkManager ঠWi-Fi নেটৱৰà§à¦•à¦¸à¦®à§‚হ সময়ে সময়ে সà§à¦•à§‡à¦¨ কৰে, কিনà§à¦¤à§ কিছà§à¦®à¦¾à¦¨ "
"কà§à¦·à§‡à¦¤à§à§°à¦¤\n"
"সà§à¦•à§‡à¦¨à¦¿à¦‚ হসà§à¦¤à¦šà¦¾à¦²à¦¿à¦¤à¦­à¦¾à§±à§‡ আৰমà§à¦­ কৰাটো উপযোগী হব পাৰে। মন কৰিব যে à¦à¦‡ কমানà§à¦¡à§‡ APs "
"নেদেখà§à§±à¦¾à§Ÿ\n"
", তাৰ বাবে 'nmcli device wifi list' বà§à¦¯à§±à¦¹à¦¾à§° কৰক।\n"
"\n"
-#: ../cli/src/devices.c:386
+#: ../clients/cli/devices.c:376
#, c-format
msgid ""
"Usage: nmcli device wimax { ARGUMENTS | help }\n"
@@ -3460,354 +3582,367 @@ msgstr ""
"ARGUMENTS := [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
"উপলবà§à¦§ WiMAX NSPs দেখà§à§±à¦¾à¦“ক। 'ifname' আৰৠ'nsp' বিকলà§à¦ªà¦¸à¦®à§‚হক\n"
-"à¦à¦Ÿà¦¾ নিৰà§à¦¦à¦¿à¦·à§à¦Ÿ আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦ à§° বাবে নেটৱাৰà§à¦•à¦¸à¦®à§‚হ তালিকাভà§à¦•à§à¦¤ কৰিবলৈ বà§à¦¯à§±à¦¹à¦¾à§° কৰিব "
+"à¦à¦Ÿà¦¾ নিৰà§à¦¦à¦¿à¦·à§à¦Ÿ আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦ à§° বাবে নেটৱৰà§à¦•à¦¸à¦®à§‚হ তালিকাভà§à¦•à§à¦¤ কৰিবলৈ বà§à¦¯à§±à¦¹à¦¾à§° কৰিব "
"পাৰি, অথবা "
"à¦à¦Ÿà¦¾ নিৰà§à¦¦à¦¿à¦·à§à¦Ÿ NSP ৰ সৈতে।\n"
"\n"
-#: ../cli/src/devices.c:480
+#: ../clients/cli/devices.c:465 ../clients/cli/devices.c:656
msgid "(none)"
msgstr "(শূণà§à¦¯)"
-#: ../cli/src/devices.c:549
+#: ../clients/cli/devices.c:533
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:550
+#: ../clients/cli/devices.c:534
#, c-format
msgid "%u Mbit/s"
msgstr "%u Mbit/s"
-#: ../cli/src/devices.c:569
+#: ../clients/cli/devices.c:549
msgid "WPA1"
msgstr "WPA1"
-#: ../cli/src/devices.c:578
+#: ../clients/cli/devices.c:558
msgid "802.1X"
msgstr "802.1X"
-#: ../cli/src/devices.c:594
+#: ../clients/cli/devices.c:574
msgid "Ad-Hoc"
msgstr "Ad-Hoc"
-#: ../cli/src/devices.c:595
+#: ../clients/cli/devices.c:575
msgid "Infra"
msgstr "Infra"
-#: ../cli/src/devices.c:627
+#: ../clients/cli/devices.c:607
msgid "Home"
msgstr "ঘৰ"
-#: ../cli/src/devices.c:630
+#: ../clients/cli/devices.c:610
msgid "Partner"
msgstr "অংশীদাৰ"
-#: ../cli/src/devices.c:633
+#: ../clients/cli/devices.c:613
msgid "Roaming"
msgstr "ৰ'মিং"
-#: ../cli/src/devices.c:727
+#: ../clients/cli/devices.c:785
msgid "Device details"
msgstr "ডিভাইচৰ বিৱৰণ"
-#: ../cli/src/devices.c:739
+#: ../clients/cli/devices.c:797
#, 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
+#: ../clients/cli/devices.c:848 ../clients/cli/devices.c:851
msgid "(unknown)"
msgstr "(অজà§à¦žà¦¾à¦¤)"
-#: ../cli/src/devices.c:829
+#: ../clients/cli/devices.c:889
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
-#: ../cli/src/devices.c:915
+#: ../clients/cli/devices.c:975
msgid "on"
msgstr "অন"
-#: ../cli/src/devices.c:915
+#: ../clients/cli/devices.c:975
msgid "off"
msgstr "অফ"
-#: ../cli/src/devices.c:1190
+#: ../clients/cli/devices.c:1247
#, c-format
msgid "Error: 'device status': %s"
msgstr "তà§à§°à§à¦Ÿà¦¿: 'device status': %s"
#. Add headers
-#: ../cli/src/devices.c:1208
+#: ../clients/cli/devices.c:1254
msgid "Status of devices"
msgstr "ডিভাইচসমূহৰ অৱসà§à¦¥à¦¾"
-#: ../cli/src/devices.c:1239
+#: ../clients/cli/devices.c:1285
#, c-format
msgid "Error: invalid extra argument '%s'."
msgstr "তà§à§°à§à¦Ÿà¦¿: অবৈধ অতিৰিকà§à¦¤ তৰà§à¦• '%s'।"
-#: ../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
+#: ../clients/cli/devices.c:1302 ../clients/cli/devices.c:1584
+#: ../clients/cli/devices.c:1718 ../clients/cli/devices.c:1806
+#: ../clients/cli/devices.c:1939 ../clients/cli/devices.c:2601
#, c-format
msgid "Error: Device '%s' not found."
msgstr "তà§à§°à§à¦Ÿà¦¿: ডিভাইচ '%s' পোৱা নগল।"
-#: ../cli/src/devices.c:1321
+#: ../clients/cli/devices.c:1357
+#, c-format
+msgid "Device '%s' successfully activated with '%s'.\n"
+msgstr "ডিভাইচ '%s' সফলভাৱে '%s' ৰ সৈতে সকà§à§°à¦¿à§Ÿ কৰা হল।\n"
+
+#: ../clients/cli/devices.c:1379 ../clients/cli/devices.c:1431
+#, c-format
+msgid "Connection with UUID '%s' created and activated on device '%s'\n"
+msgstr "UUID '%s' ৰ সৈতে সংযোগ সৃষà§à¦Ÿà¦¿ কৰা হল আৰৠডিভাইচ '%s' ড সকà§à§°à¦¿à§Ÿ কৰা হল\n"
+
+#: ../clients/cli/devices.c:1384
+#, c-format
+msgid "Error: Connection activation failed: (%d) %s."
+msgstr "তà§à§°à§à¦Ÿà¦¿: সংযোগৰ সকà§à§°à¦¿à§Ÿà¦•à§°à¦£ বà§à¦¯à§°à§à¦¥ হল: (%d) %s।"
+
+#: ../clients/cli/devices.c:1412
+#, c-format
+#| msgid "Error: Failed to add/activate new connection: (%d) %s"
+msgid "Error: Failed to add/activate new connection: %s"
+msgstr "তà§à§°à§à¦Ÿà¦¿: নতà§à¦¨ সংযোগ যোগ/সকà§à§°à¦¿à§Ÿ কৰিবলে বà§à¦¯à§°à§à¦¥: %s"
+
+#: ../clients/cli/devices.c:1421
#, c-format
-msgid "Success: Device '%s' successfully activated."
-msgstr "সফল: ডিভাইচ '%s' সফলভাৱে সকà§à§°à¦¿à§Ÿ কৰা হল।"
+msgid "Error: Failed to add/activate new connection: Unknown error"
+msgstr "তà§à§°à§à¦Ÿà¦¿: নতà§à¦¨ সংযোগ যোগ/সকà§à§°à¦¿à§Ÿ কৰিবলে বà§à¦¯à§°à§à¦¥: অজà§à¦žà¦¾à¦¤ তà§à§°à§à¦Ÿà¦¿"
-#: ../cli/src/devices.c:1335
+#: ../clients/cli/devices.c:1499
#, c-format
msgid "Error: Device activation failed: %s"
msgstr "তà§à§°à§à¦Ÿà¦¿: ডিভাইচ সকà§à§°à¦¿à§Ÿà¦•à§°à¦£ বà§à¦¯à§°à§à¦¥: %s"
-#: ../cli/src/devices.c:1352
+#: ../clients/cli/devices.c:1508
+#, c-format
+msgid "Error: Device activation failed: device was disconnected"
+msgstr "তà§à§°à§à¦Ÿà¦¿: ডিভাইচ সকà§à§°à¦¿à§Ÿà¦•à§°à¦£ বà§à¦¯à§°à§à¦¥ হল: ডিভাইচ বিচà§à¦›à¦¿à¦¨à§à¦¨à¦¿à¦¤ হৈছিল"
+
+#: ../clients/cli/devices.c:1522
#, 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
+#: ../clients/cli/devices.c:1553 ../clients/cli/devices.c:1562
+#: ../clients/cli/devices.c:1687 ../clients/cli/devices.c:1696
+#: ../clients/cli/devices.c:1776 ../clients/cli/devices.c:1784
#, c-format
msgid "Error: No interface specified."
msgstr "তà§à§°à§à¦Ÿà¦¿: কোনো আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  ধাৰà§à¦¯à§à¦¯ কৰা হোৱা নাই।"
-#: ../cli/src/devices.c:1398 ../cli/src/devices.c:1533
+#: ../clients/cli/devices.c:1568 ../clients/cli/devices.c:1702
+#: ../clients/cli/devices.c:1790
#, c-format
msgid "Error: extra argument not allowed: '%s'."
msgstr "তà§à§°à§à¦Ÿà¦¿: অতিৰিকà§à¦¤ তৰà§à¦•à§° অনà§à¦®à¦¤à¦¿ নাই: '%s'।"
-#: ../cli/src/devices.c:1461
+#: ../clients/cli/devices.c:1627
#, c-format
msgid "Success: Device '%s' successfully disconnected."
msgstr "সফলতা: ডিভাইচ '%s' সফলভাৱে বিচà§à¦›à¦¿à¦¨à§à¦¨ কৰা হল।"
-#: ../cli/src/devices.c:1473
+#: ../clients/cli/devices.c:1642
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "তà§à§°à§à¦Ÿà¦¿: ডিভাইচ '%s' (%s) বিচà§à¦›à¦¿à¦¨à§à¦¨ কৰা বà§à¦¯à§°à§à¦¥ হল: %s"
-#: ../cli/src/devices.c:1487
+#: ../clients/cli/devices.c:1657
#, c-format
msgid "Device '%s' has been disconnected.\n"
msgstr "ডিভাইচ '%s' বিচà§à¦›à¦¿à¦¨à§à¦¨ কৰা হৈছে।\n"
-#: ../cli/src/devices.c:1630
+#: ../clients/cli/devices.c:1748
+#, c-format
+msgid "Error: Device '%s' (%s) deletion failed: %s"
+msgstr "তà§à§°à§à¦Ÿà¦¿: ডিভাইচ '%s' (%s) মচি পেলোৱা বà§à¦¯à§°à§à¦¥ হল: %s"
+
+#: ../clients/cli/devices.c:1812
+#, c-format
+msgid "Error: Device '%s' is a hardware device. It can't be deleted."
+msgstr "তà§à§°à§à¦Ÿà¦¿: ডিভাইচ '%s' à¦à¦Ÿà¦¾ হাৰà§à¦¡à§±à§‡à§° ডিভাইচ। ইয়াক মচি পেলাব নোৱাৰি।"
+
+#: ../clients/cli/devices.c:1882
msgid "Wi-Fi scan list"
msgstr "Wi-Fi সà§à¦•à§‡à¦¨ তালিকা"
-#: ../cli/src/devices.c:1668
+#: ../clients/cli/devices.c:1920
#, c-format
msgid "Error: 'device wifi': %s"
msgstr "তà§à§°à§à¦Ÿà¦¿: 'device wifi': %s"
-#: ../cli/src/devices.c:1721 ../cli/src/devices.c:1790
+#: ../clients/cli/devices.c:1962 ../clients/cli/devices.c:2037
#, c-format
msgid "Error: Access point with bssid '%s' not found."
msgstr "তà§à§°à§à¦Ÿà¦¿: bssid '%s' ৰ সৈতে অভিগম বিনà§à¦¦à§ পোৱা নগল।"
-#: ../cli/src/devices.c:1745 ../cli/src/devices.c:2137
-#: ../cli/src/devices.c:2299
+#: ../clients/cli/devices.c:1986 ../clients/cli/devices.c:2303
+#: ../clients/cli/devices.c:2468
#, c-format
msgid "Error: Device '%s' is not a Wi-Fi device."
msgstr "তà§à§°à§à¦Ÿà¦¿: ডিভাইচ '%s' à¦à¦Ÿà¦¾ Wi-Fi ডিভাইচ নহয়।"
-#: ../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:1831
-#, c-format
-msgid "Error: Connection activation failed: (%d) %s."
-msgstr "তà§à§°à§à¦Ÿà¦¿: সংযোগৰ সকà§à§°à¦¿à§Ÿà¦•à§°à¦£ বà§à¦¯à§°à§à¦¥ হল: (%d) %s।"
-
-#: ../cli/src/devices.c:1856
-#, c-format
-msgid "Error: Failed to add/activate new connection: (%d) %s"
-msgstr "তà§à§°à§à¦Ÿà¦¿: নতà§à¦¨ সংযোগ যোগ/সকà§à§°à¦¿à§Ÿ কৰিবলে বà§à¦¯à§°à§à¦¥: (%d) %s"
-
-#: ../cli/src/devices.c:1864
-#, c-format
-msgid "Error: Failed to add/activate new connection: Unknown error"
-msgstr "তà§à§°à§à¦Ÿà¦¿: নতà§à¦¨ সংযোগ যোগ/সকà§à§°à¦¿à§Ÿ কৰিবলে বà§à¦¯à§°à§à¦¥: অজà§à¦žà¦¾à¦¤ তà§à§°à§à¦Ÿà¦¿"
-
-#: ../cli/src/devices.c:2019
+#: ../clients/cli/devices.c:2196
msgid "SSID or BSSID: "
msgstr "SSID অথবা BSSID: "
-#: ../cli/src/devices.c:2024
+#: ../clients/cli/devices.c:2201
#, c-format
msgid "Error: SSID or BSSID are missing."
-msgstr "তà§à§°à§à¦Ÿà¦¿: SSID অথবা BSSID সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨à¥¤"
+msgstr "তà§à§°à§à¦Ÿà¦¿: SSID অথবা BSSID সনà§à¦§à¦¾à¦¨à¦¹à§€à¦¨à¥¤"
-#: ../cli/src/devices.c:2048
+#: ../clients/cli/devices.c:2225
#, c-format
msgid "Error: bssid argument value '%s' is not a valid BSSID."
msgstr "তà§à§°à§à¦Ÿà¦¿: bssid তৰà§à¦• মান '%s' à¦à¦Ÿà¦¾ বৈধ BSSID নহয়।"
-#: ../cli/src/devices.c:2072
+#: ../clients/cli/devices.c:2249
#, 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:2092
+#: ../clients/cli/devices.c:2269
#, c-format
msgid "Error: %s: %s."
msgstr "তà§à§°à§à¦Ÿà¦¿: %s: %s।"
-#: ../cli/src/devices.c:2107
+#: ../clients/cli/devices.c:2284
#, c-format
msgid "Error: BSSID to connect to (%s) differs from bssid argument (%s)."
msgstr "তà§à§°à§à¦Ÿà¦¿: (%s) লে সংযোগ কৰিব লগিয়া BSSID bssid তৰà§à¦• (%s) পৰা পৃথক।"
-#: ../cli/src/devices.c:2113
+#: ../clients/cli/devices.c:2290
#, c-format
msgid "Error: Parameter '%s' is neither SSID nor BSSID."
msgstr "তà§à§°à§à¦Ÿà¦¿: পà§à§°à¦¾à¦šà¦² '%s' SSID অথবা BSSID নহয়।"
-#: ../cli/src/devices.c:2139 ../cli/src/devices.c:2301
+#: ../clients/cli/devices.c:2305 ../clients/cli/devices.c:2470
#, c-format
msgid "Error: No Wi-Fi device found."
msgstr "তà§à§°à§à¦Ÿà¦¿: কোনো Wi-Fi ডিভাইচ পোৱা নগল।"
-#: ../cli/src/devices.c:2157
+#: ../clients/cli/devices.c:2323
#, c-format
msgid "Error: No network with SSID '%s' found."
-msgstr "তà§à§°à§à¦Ÿà¦¿: SSID '%s' ৰ সৈতে কোনো নেটৱাৰà§à¦• পোৱা নগল।"
+msgstr "তà§à§°à§à¦Ÿà¦¿: SSID '%s' ৰ সৈতে কোনো নেটৱৰà§à¦• পোৱা নগল।"
-#: ../cli/src/devices.c:2159
+#: ../clients/cli/devices.c:2325
#, c-format
msgid "Error: No access point with BSSID '%s' found."
msgstr "তà§à§°à§à¦Ÿà¦¿: BSSID '%s' ৰ সৈতে কোনো অভিগম বিনà§à¦¦à§ পোৱা নগল।"
-#: ../cli/src/devices.c:2198
+#: ../clients/cli/devices.c:2364
msgid "Password: "
-msgstr "পাছৱাৰà§à¦¡:"
+msgstr "পাছৱৰà§à¦¡:"
-#: ../cli/src/devices.c:2327
+#: ../clients/cli/devices.c:2497
#, c-format
msgid "Error: 'device wifi' command '%s' is not valid."
msgstr "তà§à§°à§à¦Ÿà¦¿: 'device wifi' কমানà§à¦¡ '%s' বৈধ নহয়।"
-#: ../cli/src/devices.c:2374
+#: ../clients/cli/devices.c:2544
msgid "WiMAX NSP list"
msgstr "WiMAX NSP তালিকা"
-#: ../cli/src/devices.c:2411
+#: ../clients/cli/devices.c:2581
#, c-format
msgid "Error: 'device wimax': %s"
msgstr "তà§à§°à§à¦Ÿà¦¿: 'device wimax': %s"
-#: ../cli/src/devices.c:2465
+#: ../clients/cli/devices.c:2624
#, c-format
msgid "Error: NSP with name '%s' not found."
msgstr "তà§à§°à§à¦Ÿà¦¿: নাম '%s' ৰ সৈতে NSP পোৱা নগল।"
-#: ../cli/src/devices.c:2478
+#: ../clients/cli/devices.c:2637
#, c-format
msgid "Error: Device '%s' is not a WiMAX device."
msgstr "তà§à§°à§à¦Ÿà¦¿: ডিভাইচ '%s' à¦à¦Ÿà¦¾ WiMAX ডিভাইচ নহয়।"
-#: ../cli/src/devices.c:2516
+#: ../clients/cli/devices.c:2681
#, c-format
msgid "Error: Access point with nsp '%s' not found."
msgstr "তà§à§°à§à¦Ÿà¦¿: nsp '%s' ৰ সৈতে অভিগম বিনà§à¦¦à§ পোৱা নগল।"
-#: ../cli/src/devices.c:2548
+#: ../clients/cli/devices.c:2718
#, c-format
msgid "Error: 'device wimax' command '%s' is not valid."
msgstr "তà§à§°à§à¦Ÿà¦¿: 'device wimax' কমানà§à¦¡ '%s' বৈধ নহয়।"
-#: ../cli/src/devices.c:2627
+#: ../clients/cli/devices.c:2888
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "তà§à§°à§à¦Ÿà¦¿: 'dev' কমানà§à¦¡ '%s' বৈধ নহয়।"
-#: ../cli/src/network-manager.c:37
+#: ../clients/cli/general.c:34
msgid "RUNNING"
msgstr "চলি থকা"
#. 0
-#: ../cli/src/network-manager.c:38
+#: ../clients/cli/general.c:35
msgid "VERSION"
msgstr "সংসà§à¦•à§°à¦£"
#. 2
-#: ../cli/src/network-manager.c:40
+#: ../clients/cli/general.c:37
msgid "STARTUP"
msgstr "আৰমà§à¦­à¦£à¦¿"
#. 3
-#: ../cli/src/network-manager.c:41
+#: ../clients/cli/general.c:38
msgid "CONNECTIVITY"
msgstr "সংযোগ"
#. 4
-#: ../cli/src/network-manager.c:42
+#: ../clients/cli/general.c:39
msgid "NETWORKING"
msgstr "নেটৱাৰà§à¦•à¦¿à¦‚"
#. 5
-#: ../cli/src/network-manager.c:43
+#: ../clients/cli/general.c:40
msgid "WIFI-HW"
msgstr "WIFI-HW"
#. 6
-#: ../cli/src/network-manager.c:44
+#: ../clients/cli/general.c:41
msgid "WIFI"
msgstr "WIFI"
#. 7
-#: ../cli/src/network-manager.c:45
+#: ../clients/cli/general.c:42
msgid "WWAN-HW"
msgstr "WWAN-HW"
#. 8
-#: ../cli/src/network-manager.c:46
+#: ../clients/cli/general.c:43
msgid "WWAN"
msgstr "WWAN"
#. 9
-#: ../cli/src/network-manager.c:47
+#: ../clients/cli/general.c:44
msgid "WIMAX-HW"
msgstr "WIMAX-HW"
#. 10
-#: ../cli/src/network-manager.c:48
+#: ../clients/cli/general.c:45
msgid "WIMAX"
msgstr "WIMAX"
-#: ../cli/src/network-manager.c:70
+#: ../clients/cli/general.c:67
msgid "PERMISSION"
msgstr "অনà§à¦®à¦¤à¦¿"
#. 0
-#: ../cli/src/network-manager.c:71
+#: ../clients/cli/general.c:68
msgid "VALUE"
msgstr "মান"
-#: ../cli/src/network-manager.c:79
+#: ../clients/cli/general.c:76
msgid "LEVEL"
msgstr "সà§à¦¤à§°"
#. 0
-#: ../cli/src/network-manager.c:80
+#: ../clients/cli/general.c:77
msgid "DOMAINS"
msgstr "ডমেইন"
-#: ../cli/src/network-manager.c:95
+#: ../clients/cli/general.c:91
#, c-format
msgid ""
"Usage: nmcli general { COMMAND | help }\n"
@@ -3836,7 +3971,7 @@ msgstr ""
" logging [level <log level>] [domains <log domains>]\n"
"\n"
-#: ../cli/src/network-manager.c:107
+#: ../clients/cli/general.c:102
#, c-format
msgid ""
"Usage: nmcli general status { help }\n"
@@ -3853,7 +3988,7 @@ msgstr ""
"কৰে\n"
"\n"
-#: ../cli/src/network-manager.c:117
+#: ../clients/cli/general.c:111
#, c-format
msgid ""
"Usage: nmcli general hostname { ARGUMENTS | help }\n"
@@ -3871,13 +4006,13 @@ msgstr ""
"ARGUMENTS := [<hostname>]\n"
"\n"
"সà§à¦¥à¦¾à§Ÿà§€ চিসà§à¦Ÿà§‡à¦® হসà§à¦Ÿà¦¨à¦¾à¦® পà§à§°à¦¾à¦ªà§à¦¤ কৰক অথবা পৰিবৰà§à¦¤à¦¨ কৰক।\n"
-"কোনো তৰà§à¦• নাথাকিলে, ই বৰà§à¦¤à¦®à¦¾à¦¨à§‡ সংৰূপিত হসà§à¦Ÿà¦¨à¦¾à¦® পà§à§°à¦¿à¦¨à§à¦Ÿ কৰে। যেতিয়া আপà§à¦¨à¦¿\n"
+"কোনো তৰà§à¦• নাথাকিলে, ই বৰà§à¦¤à¦®à¦¾à¦¨à§‡ সংৰূপিত হসà§à¦Ÿà¦¨à¦¾à¦® পà§à§°à¦¿à¦£à§à¦Ÿ কৰে। যেতিয়া আপà§à¦¨à¦¿\n"
"à¦à¦Ÿà¦¾ হসà§à¦Ÿà¦¨à¦¾à¦® পà§à§°à§‡à§°à¦£ কৰে, NetworkManager ঠইয়াক নতà§à¦¨ সà§à¦¥à¦¾à§Ÿà§€ চিসà§à¦Ÿà§‡à¦® হসà§à¦Ÿà¦¨à¦¾à¦® "
"ৰূপে "
"সংহতি কৰিব।\n"
"\n"
-#: ../cli/src/network-manager.c:130
+#: ../clients/cli/general.c:123
#, c-format
msgid ""
"Usage: nmcli general permissions { help }\n"
@@ -3890,7 +4025,7 @@ msgstr ""
"পà§à§°à¦®à¦¾à¦£à§€à¦¤ কাৰà§à¦¯à§à¦¯à¦¸à¦®à§‚হৰ বাবে কলাৰ অনà§à¦®à¦¤à¦¿ দেখà§à§±à¦¾à¦“ক।\n"
"\n"
-#: ../cli/src/network-manager.c:139
+#: ../clients/cli/general.c:131
#, c-format
msgid ""
"Usage: nmcli general logging { ARGUMENTS | help }\n"
@@ -3917,7 +4052,7 @@ msgstr ""
"man পৃষà§à¦ à¦¾ চাওক\n"
"\n"
-#: ../cli/src/network-manager.c:153
+#: ../clients/cli/general.c:144
#, c-format
msgid ""
"Usage: nmcli networking { COMMAND | help }\n"
@@ -3942,7 +4077,7 @@ msgstr ""
" connectivity [check]\n"
"\n"
-#: ../cli/src/network-manager.c:164
+#: ../clients/cli/general.c:154
#, c-format
msgid ""
"Usage: nmcli networking on { help }\n"
@@ -3955,7 +4090,7 @@ msgstr ""
"নেটৱাৰà§à¦•à¦¿à¦‚ অন কৰক।\n"
"\n"
-#: ../cli/src/network-manager.c:173
+#: ../clients/cli/general.c:162
#, c-format
msgid ""
"Usage: nmcli networking off { help }\n"
@@ -3968,7 +4103,7 @@ msgstr ""
"নেটৱাৰà§à¦•à¦¿à¦‚ অফ কৰক।\n"
"\n"
-#: ../cli/src/network-manager.c:182
+#: ../clients/cli/general.c:170
#, c-format
msgid ""
"Usage: nmcli networking connectivity { ARGUMENTS | help }\n"
@@ -3984,11 +4119,11 @@ msgstr ""
"\n"
"ARGUMENTS := [check]\n"
"\n"
-"নেটৱাৰà§à¦• সংযোগ অৱসà§à¦¥à¦¾ পà§à§°à¦¾à¦ªà§à¦¤ কৰক।\n"
+"নেটৱৰà§à¦• সংযোগ অৱসà§à¦¥à¦¾ পà§à§°à¦¾à¦ªà§à¦¤ কৰক।\n"
"বৈকলà§à¦ªà¦¿à¦• 'check' তৰà§à¦•à§Ÿ NetworkManager ক সংযোগ পà§à¦¨à§°-নিৰীকà§à¦·à¦£ কৰিব দিয়ে।\n"
"\n"
-#: ../cli/src/network-manager.c:195
+#: ../clients/cli/general.c:182
#, c-format
msgid ""
"Usage: nmcli radio { COMMAND | help }\n"
@@ -4013,7 +4148,7 @@ msgstr ""
" all | wifi | wwan [ on | off ]\n"
"\n"
-#: ../cli/src/network-manager.c:210
+#: ../clients/cli/general.c:196
#, c-format
msgid ""
"Usage: nmcli radio all { ARGUMENTS | help }\n"
@@ -4030,7 +4165,7 @@ msgstr ""
"সকলো ৰেডিঅ' চà§à¦‡à¦šà§° অৱসà§à¦¥à¦¾ পà§à§°à¦¾à¦ªà§à¦¤ কৰক, অথবা সিহতক অন/অফ কৰক।\n"
"\n"
-#: ../cli/src/network-manager.c:221
+#: ../clients/cli/general.c:206
#, c-format
msgid ""
"Usage: nmcli radio wifi { ARGUMENTS | help }\n"
@@ -4047,7 +4182,7 @@ msgstr ""
"Wi-Fi ৰেডিঅ' চà§à¦‡à¦šà§° অৱসà§à¦¥à¦¾ পà§à§°à¦¾à¦ªà§à¦¤ কৰক, অথবা ইয়াক অন/অফ কৰক।\n"
"\n"
-#: ../cli/src/network-manager.c:232
+#: ../clients/cli/general.c:216
#, c-format
msgid ""
"Usage: nmcli radio wwan { ARGUMENTS | help }\n"
@@ -4064,7 +4199,7 @@ msgstr ""
"মবাইল বà§à§°à¦¡à¦¬à§‡à¦£à§à¦¡ ৰেডিঅ' চà§à¦‡à¦šà§° অৱসà§à¦¥à¦¾ পà§à§°à¦¾à¦ªà§à¦¤ কৰক, অথবা ইয়াক অন/অফ কৰক।\n"
"\n"
-#: ../cli/src/network-manager.c:244
+#: ../clients/cli/general.c:227
#, c-format
msgid ""
"Usage: nmcli radio wimax { ARGUMENTS | help }\n"
@@ -4081,172 +4216,170 @@ msgstr ""
"WiMAX ৰেডিঅ' চà§à¦‡à¦šà§° অৱসà§à¦¥à¦¾ পà§à§°à¦¾à¦ªà§à¦¤ কৰক, অথবা ইয়াক অন/অফ কৰক।\n"
"\n"
-#: ../cli/src/network-manager.c:264
+#: ../clients/cli/general.c:247
msgid "asleep"
msgstr "নিদà§à§°à¦¿à¦¤"
-#: ../cli/src/network-manager.c:266
+#: ../clients/cli/general.c:249
msgid "connecting"
msgstr "সংযোগ কৰা হৈছে"
-#: ../cli/src/network-manager.c:268
+#: ../clients/cli/general.c:251
msgid "connected (local only)"
msgstr "সংযà§à¦•à§à¦¤ (কেৱল সà§à¦¥à¦¾à¦¨à§€à§Ÿ)"
-#: ../cli/src/network-manager.c:270
+#: ../clients/cli/general.c:253
msgid "connected (site only)"
msgstr "সংযà§à¦•à§à¦¤ (কেৱল ছাইট)"
-#: ../cli/src/network-manager.c:274
+#: ../clients/cli/general.c:257
msgid "disconnecting"
msgstr "বিচà§à¦›à¦¿à¦¨à§à¦¨ কৰা হৈছে"
-#: ../cli/src/network-manager.c:290
+#: ../clients/cli/general.c:273
msgid "portal"
msgstr "পৰà§à¦Ÿà§‡à¦²"
-#: ../cli/src/network-manager.c:292
+#: ../clients/cli/general.c:275
msgid "limited"
msgstr "সীমিত"
-#: ../cli/src/network-manager.c:294
+#: ../clients/cli/general.c:277
msgid "full"
msgstr "পূৰà§à¦£"
-#: ../cli/src/network-manager.c:332
+#: ../clients/cli/general.c:315
#, c-format
msgid "Error: only these fields are allowed: %s"
msgstr "তà§à§°à§à¦Ÿà¦¿: কেৱল à¦à¦‡ ফিলà§à¦¡à¦¸à¦®à§‚হ অনà§à¦®à§‹à¦¦à¦¿à¦¤: %s"
-#: ../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
+#: ../clients/cli/general.c:335 ../clients/cli/general.c:336
+#: ../clients/cli/general.c:337 ../clients/cli/general.c:338
+#: ../clients/cli/general.c:339 ../clients/cli/general.c:341
+#: ../clients/cli/general.c:342
msgid "enabled"
msgstr "সামৰà§à¦¥à¦¬à¦¾à¦¨"
-#: ../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
+#: ../clients/cli/general.c:335 ../clients/cli/general.c:336
+#: ../clients/cli/general.c:337 ../clients/cli/general.c:338
+#: ../clients/cli/general.c:339 ../clients/cli/general.c:341
+#: ../clients/cli/general.c:342
msgid "disabled"
msgstr "অসামৰà§à¦¥à¦¬à¦¾à¦¨"
-#: ../cli/src/network-manager.c:367
+#: ../clients/cli/general.c:345
msgid "NetworkManager status"
msgstr "NetworkManager ৰ অৱসà§à¦¥à¦¾"
-#: ../cli/src/network-manager.c:372
+#: ../clients/cli/general.c:350
msgid "running"
msgstr "চলি আছে"
-#: ../cli/src/network-manager.c:372
-msgid "not running"
-msgstr "চলি থকা নাই"
-
-#: ../cli/src/network-manager.c:375
+#: ../clients/cli/general.c:353
msgid "starting"
msgstr "আৰমà§à¦­ কৰা হৈছে"
-#: ../cli/src/network-manager.c:375
+#: ../clients/cli/general.c:353
msgid "started"
msgstr "আৰমà§à¦­ কৰা হল"
-#: ../cli/src/network-manager.c:446
+#: ../clients/cli/general.c:424
msgid "auth"
msgstr "auth"
-#: ../cli/src/network-manager.c:475
+#: ../clients/cli/general.c:453
#, c-format
msgid "Error: 'general permissions': %s"
msgstr "তà§à§°à§à¦Ÿà¦¿: 'general permissions': %s"
-#: ../cli/src/network-manager.c:489
+#: ../clients/cli/general.c:467
msgid "NetworkManager permissions"
msgstr "NetworkManager অনà§à¦®à¦¤à¦¿à¦¸à¦®à§‚হ"
-#: ../cli/src/network-manager.c:530
+#: ../clients/cli/general.c:508
#, c-format
msgid "Error: 'general logging': %s"
msgstr "তà§à§°à§à¦Ÿà¦¿: 'general logging': %s"
-#: ../cli/src/network-manager.c:545
+#: ../clients/cli/general.c:523
msgid "NetworkManager logging"
msgstr "NetworkManager লগিং"
-#: ../cli/src/network-manager.c:565
+#: ../clients/cli/general.c:546
#, c-format
-msgid "Error: failed to set hostname: (%d) %s"
-msgstr "তà§à§°à§à¦Ÿà¦¿: হসà§à¦Ÿà¦¨à¦¾à¦® সংহতি কৰিবলৈ বà§à¦¯à§°à§à¦¥: (%d) %s"
+#| msgid "Error: failed to set hostname: (%d) %s"
+msgid "Error: failed to set hostname: %s"
+msgstr "তà§à§°à§à¦Ÿà¦¿: হসà§à¦Ÿà¦¨à¦¾à¦® সংহতি কৰিবলৈ বà§à¦¯à§°à§à¦¥: %s"
-#: ../cli/src/network-manager.c:682
+#: ../clients/cli/general.c:598
#, c-format
-msgid "Error: access denied to set logging; %s"
-msgstr "তà§à§°à§à¦Ÿà¦¿: লগিং সংহতি কৰিবলৈ অভিগম নাকচ কৰা হৈছে; %s"
+msgid "Error: Could not get system settings: %s."
+msgstr "তà§à§°à§à¦Ÿà¦¿: চিসà§à¦Ÿà§‡à¦® সংহতিসমূহ পà§à§°à¦¾à¦ªà§à¦¤ কৰিব পৰা নগল: %s।"
-#: ../cli/src/network-manager.c:684
+#: ../clients/cli/general.c:667
#, c-format
-msgid "Error: %s"
-msgstr "তà§à§°à§à¦Ÿà¦¿: %s"
+#| msgid "Error: access denied to set logging; %s"
+msgid "Error: failed to set logging: %s"
+msgstr "তà§à§°à§à¦Ÿà¦¿: লগিং সংহতি কৰিবলৈ বà§à¦¯à§°à§à¦¥: %s"
-#: ../cli/src/network-manager.c:692
+#: ../clients/cli/general.c:676
#, c-format
msgid "Error: 'general' command '%s' is not valid."
msgstr "তà§à§°à§à¦Ÿà¦¿: 'general' কমানà§à¦¡ '%s' বৈধ নহয়।"
-#: ../cli/src/network-manager.c:710
+#: ../clients/cli/general.c:694
#, c-format
msgid "Error: '--fields' value '%s' is not valid here (allowed field: %s)"
msgstr "তà§à§°à§à¦Ÿà¦¿: '--fields' মান '%s' ইয়াত বৈধ নহয় (অনà§à¦®à§‹à¦¦à¦¿à¦¤ মান: %s)"
-#: ../cli/src/network-manager.c:735
+#: ../clients/cli/general.c:719
#, c-format
msgid "Error: invalid '%s' argument: '%s' (use on/off)."
msgstr "তà§à§°à§à¦Ÿà¦¿: অবৈধ '%s' তৰà§à¦•: '%s' (on/off বà§à¦¯à§±à¦¹à¦¾à§° কৰক)।"
-#: ../cli/src/network-manager.c:746
+#: ../clients/cli/general.c:730
msgid "Connectivity"
msgstr "সংযোগ"
-#: ../cli/src/network-manager.c:758
+#: ../clients/cli/general.c:742
msgid "Networking"
msgstr "নেটৱাৰà§à¦•à¦¿à¦‚"
-#: ../cli/src/network-manager.c:783
+#: ../clients/cli/general.c:767
#, c-format
msgid "Error: 'networking connectivity' command '%s' is not valid."
msgstr "তà§à§°à§à¦Ÿà¦¿: 'networking connectivity' কমানà§à¦¡ '%s' বৈধ নহয়।"
-#: ../cli/src/network-manager.c:799
+#: ../clients/cli/general.c:783
#, 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
+#: ../clients/cli/general.c:809 ../clients/cli/general.c:829
msgid "Radio switches"
msgstr "ৰেডিঅ' চà§à¦‡à¦šà¦¸à¦®à§‚হ"
#. no argument, show current WiFi state
-#: ../cli/src/network-manager.c:863
+#: ../clients/cli/general.c:847
msgid "Wi-Fi radio switch"
msgstr "Wi-Fi ৰেডিঅ' চà§à¦‡à¦š"
#. no argument, show current WWAN (mobile broadband) state
-#: ../cli/src/network-manager.c:879
+#: ../clients/cli/general.c:863
msgid "WWAN radio switch"
msgstr "WWAN ৰেডিঅ' চà§à¦‡à¦š"
#. no argument, show current WiMAX state
-#: ../cli/src/network-manager.c:896
+#: ../clients/cli/general.c:880
msgid "WiMAX radio switch"
msgstr "WiMAX ৰেডিঅ' চà§à¦‡à¦š"
-#: ../cli/src/network-manager.c:908
+#: ../clients/cli/general.c:892
#, c-format
msgid "Error: 'radio' command '%s' is not valid."
msgstr "তà§à§°à§à¦Ÿà¦¿: 'radio' কমানà§à¦¡ '%s' বৈধ নহয়।"
-#: ../cli/src/nmcli.c:78
+#: ../clients/cli/nmcli.c:81
#, c-format
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
@@ -4299,333 +4432,295 @@ msgstr ""
" d[evice] devices managed by NetworkManager\n"
"\n"
-#: ../cli/src/nmcli.c:132
+#: ../clients/cli/nmcli.c:135
#, c-format
msgid "Error: Object '%s' is unknown, try 'nmcli help'."
msgstr "তà§à§°à§à¦Ÿà¦¿: অবজেকà§à¦Ÿ '%s' অজà§à¦žà¦¾à¦¤, 'nmcli help' চেষà§à¦Ÿà¦¾ কৰি চাওক।"
-#: ../cli/src/nmcli.c:162
+#: ../clients/cli/nmcli.c:165
#, c-format
msgid "Error: Option '--terse' is specified the second time."
msgstr "তà§à§°à§à¦Ÿà¦¿: বিকলà§à¦ª '--terse' দà§à¦¬à¦¿à¦¤à§€à§Ÿà¦¬à¦¾à§° ধাৰà§à¦¯à§à¦¯ কৰা হৈছে।"
-#: ../cli/src/nmcli.c:167
+#: ../clients/cli/nmcli.c:170
#, c-format
msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
msgstr "তà§à§°à§à¦Ÿà¦¿: বিকলà§à¦ª '--terse' '--pretty' ৰ সৈতে পাৰসà§à¦ªà§°à¦¿à¦•à¦­à¦¾à§±à§‡ সà§à¦•à§€à§Ÿà¦¾à¥¤"
-#: ../cli/src/nmcli.c:175
+#: ../clients/cli/nmcli.c:178
#, c-format
msgid "Error: Option '--pretty' is specified the second time."
msgstr "তà§à§°à§à¦Ÿà¦¿: বিকলà§à¦ª '--pretty' দà§à¦¬à¦¿à¦¤à§€à§Ÿ বাৰত ধাৰà§à¦¯à§à¦¯ কৰা হয়।"
-#: ../cli/src/nmcli.c:180
+#: ../clients/cli/nmcli.c:183
#, c-format
msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
msgstr "তà§à§°à§à¦Ÿà¦¿: বিকলà§à¦ªn '--pretty' '--terse' ৰ সৈতে পাৰসà§à¦ªà§°à¦¿à¦•à¦­à¦¾à§±à§‡ সূকীয়া।"
-#: ../cli/src/nmcli.c:190 ../cli/src/nmcli.c:206 ../cli/src/nmcli.c:235
+#: ../clients/cli/nmcli.c:193 ../clients/cli/nmcli.c:209
+#: ../clients/cli/nmcli.c:238
#, c-format
msgid "Error: missing argument for '%s' option."
-msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' বিকলà§à¦ªà§° বাবে তৰà§à¦• সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨à¥¤"
+msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' বিকলà§à¦ªà§° বাবে তৰà§à¦• সনà§à¦§à¦¾à¦¨à¦¹à§€à¦¨à¥¤"
-#: ../cli/src/nmcli.c:199 ../cli/src/nmcli.c:215
+#: ../clients/cli/nmcli.c:202 ../clients/cli/nmcli.c:218
#, c-format
msgid "Error: '%s' is not valid argument for '%s' option."
msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' '%s' বিকলà§à¦ªà§° বাবে বৈধ তৰà§à¦• নহয়।"
-#: ../cli/src/nmcli.c:222
+#: ../clients/cli/nmcli.c:225
#, c-format
msgid "Error: fields for '%s' options are missing."
-msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' বিকলà§à¦ªà¦¸à¦®à§‚হৰ বাবে কà§à¦·à§‡à¦¤à§à§°à¦¸à¦®à§‚হ সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨à¥¤"
+msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' বিকলà§à¦ªà¦¸à¦®à§‚হৰ বাবে কà§à¦·à§‡à¦¤à§à§°à¦¸à¦®à§‚হ সনà§à¦§à¦¾à¦¨à¦¹à§€à¦¨à¥¤"
-#: ../cli/src/nmcli.c:240
+#: ../clients/cli/nmcli.c:243
#, c-format
msgid "Error: '%s' is not a valid timeout for '%s' option."
msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' বিকলà§à¦ªà§° বাবে '%s' à¦à¦Ÿà¦¾ বৈধ সময়অনà§à¦¤ নহয়।"
-#: ../cli/src/nmcli.c:247
+#: ../clients/cli/nmcli.c:250
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "nmcli সà¦à¦œà§à¦²à¦¿, সংসà§à¦•à§°à¦£ %s\n"
-#: ../cli/src/nmcli.c:253
+#: ../clients/cli/nmcli.c:256
#, c-format
msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
msgstr "তà§à§°à§à¦Ÿà¦¿: বিকলà§à¦ª '%s' অজà§à¦žà¦¾à¦¤, 'nmcli -help' চেষà§à¦Ÿà¦¾ কৰি চাওক।"
-#: ../cli/src/nmcli.c:288
+#: ../clients/cli/nmcli.c:336 ../clients/cli/nmcli.c:345
#, c-format
msgid ""
"\n"
-"Error: nmcli terminated by signal %d."
+"Error: nmcli terminated by signal %s (%d)\n"
msgstr ""
"\n"
-"তà§à§°à§à¦Ÿà¦¿: nmcli ক সংকেত %d দà§à¦¬à¦¾à§°à¦¾ অনà§à¦¤ কৰা হৈছে।"
+"তà§à§°à§à¦Ÿà¦¿: nmcli ক সংকেত %s (%d) দà§à¦¬à¦¾à§°à¦¾ অনà§à¦¤ কৰা হৈছে\n"
-#: ../cli/src/nmcli.c:318 ../src/main.c:130
+#: ../clients/cli/nmcli.c:376
#, c-format
-msgid "Failed to set signal mask: %d"
-msgstr "সংকেত মাসà§à¦• সংহতি কৰিবলে বà§à¦¯à§°à§à¦¥: %d"
+msgid "Failed to set signal mask: %d\n"
+msgstr "সংকেত মাসà§à¦• সংহতি কৰিবলে বà§à¦¯à§°à§à¦¥: %d\n"
-#: ../cli/src/nmcli.c:325 ../src/main.c:139
+#: ../clients/cli/nmcli.c:383
#, c-format
-msgid "Failed to create signal handling thread: %d"
-msgstr "সংকেত নিয়নà§à¦¤à§à§°à¦£ থà§à§°à§‡à¦¡ সৃষà§à¦Ÿà¦¿ কৰিবলে বà§à¦¯à§°à§à¦¥: %d"
+msgid "Failed to create signal handling thread: %d\n"
+msgstr "সংকেত নিয়নà§à¦¤à§à§°à¦£ থà§à§°à§‡à¦¡ সৃষà§à¦Ÿà¦¿ কৰিবলৈ বà§à¦¯à§°à§à¦¥: %d\n"
-#: ../cli/src/nmcli.c:338 ../test/nm-online.c:149
+#: ../clients/cli/nmcli.c:480 ../clients/nm-online.c:197
#, c-format
-msgid "Error: Could not create NMClient object."
-msgstr "তà§à§°à§à¦Ÿà¦¿: NMClient অবজেকà§à¦Ÿ সৃষà§à¦Ÿà¦¿ কৰিব পৰা নগল।"
+msgid "Error: Could not create NMClient object: %s."
+msgstr "তà§à§°à§à¦Ÿà¦¿: NMClient অবজেকà§à¦Ÿ সৃষà§à¦Ÿà¦¿ কৰিব পৰা নগল: %s।"
-#: ../cli/src/nmcli.c:354
+#: ../clients/cli/nmcli.c:497
msgid "Success"
msgstr "সফলতা"
-#: ../cli/src/settings.c:666
+#: ../clients/cli/settings.c:655
#, c-format
-msgid "%d (hex-ascii-key)"
-msgstr "%d (hex-ascii-key)"
+msgid "%d (key)"
+msgstr "%d (key)"
-#: ../cli/src/settings.c:668
+#: ../clients/cli/settings.c:657
#, c-format
-msgid "%d (104/128-bit passphrase)"
-msgstr "%d (104/128-bit পাচফà§à§°à§‡à¦‡à¦›)"
+msgid "%d (passphrase)"
+msgstr "%d (passphrase)"
-#: ../cli/src/settings.c:671 ../cli/src/settings.c:799
+#: ../clients/cli/settings.c:660 ../clients/cli/settings.c:741
#, c-format
msgid "%d (unknown)"
msgstr "%d (অজà§à¦žà¦¾à¦¤)"
-#: ../cli/src/settings.c:697
-msgid "0 (unknown)"
-msgstr "0 (অজà§à¦žà¦¾à¦¤)"
-
-#: ../cli/src/settings.c:703
-msgid "any, "
-msgstr "যিকোনো, "
-
-#: ../cli/src/settings.c:705
-msgid "900 MHz, "
-msgstr "900 MHz, "
-
-#: ../cli/src/settings.c:707
-msgid "1800 MHz, "
-msgstr "1800 MHz, "
-
-#: ../cli/src/settings.c:709
-msgid "1900 MHz, "
-msgstr "1900 MHz, "
-
-#: ../cli/src/settings.c:711
-msgid "850 MHz, "
-msgstr "850 MHz, "
-
-#: ../cli/src/settings.c:713
-msgid "WCDMA 3GPP UMTS 2100 MHz, "
-msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-
-#: ../cli/src/settings.c:715
-msgid "WCDMA 3GPP UMTS 1800 MHz, "
-msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-
-#: ../cli/src/settings.c:717
-msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
-msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-
-#: ../cli/src/settings.c:719
-msgid "WCDMA 3GPP UMTS 800 MHz, "
-msgstr "WCDMA 3GPP UMTS 800 MHz, "
-
-#: ../cli/src/settings.c:721
-msgid "WCDMA 3GPP UMTS 850 MHz, "
-msgstr "WCDMA 3GPP UMTS 850 MHz, "
-
-#: ../cli/src/settings.c:723
-msgid "WCDMA 3GPP UMTS 900 MHz, "
-msgstr "WCDMA 3GPP UMTS 900 MHz, "
-
-#: ../cli/src/settings.c:725
-msgid "WCDMA 3GPP UMTS 1700 MHz, "
-msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-
-#: ../cli/src/settings.c:727
-msgid "WCDMA 3GPP UMTS 1900 MHz, "
-msgstr "WCDMA 3GPP UMTS 1900 MHz, "
-
-#: ../cli/src/settings.c:729
-msgid "WCDMA 3GPP UMTS 2600 MHz, "
-msgstr "WCDMA 3GPP UMTS 2600 MHz, "
-
-#: ../cli/src/settings.c:747
+#: ../clients/cli/settings.c:689
msgid "0 (NONE)"
msgstr "0 (NONE)"
-#: ../cli/src/settings.c:753
+#: ../clients/cli/settings.c:695
msgid "REORDER_HEADERS, "
msgstr "REORDER_HEADERS, "
-#: ../cli/src/settings.c:755
+#: ../clients/cli/settings.c:697
msgid "GVRP, "
msgstr "GVRP, "
-#: ../cli/src/settings.c:757
+#: ../clients/cli/settings.c:699
msgid "LOOSE_BINDING, "
msgstr "LOOSE_BINDING, "
-#: ../cli/src/settings.c:793
+#: ../clients/cli/settings.c:735
#, c-format
msgid "%d (disabled)"
msgstr "%d (অসামৰà§à¦¥à¦¬à¦¾à¦¨)"
-#: ../cli/src/settings.c:795
+#: ../clients/cli/settings.c:737
#, c-format
msgid "%d (enabled, prefer public IP)"
msgstr "%d (সামৰà§à¦¥à¦¬à¦¾à¦¨, ৰাজহà§à§±à¦¾ IP পছনà§à¦¦)"
-#: ../cli/src/settings.c:797
+#: ../clients/cli/settings.c:739
#, c-format
msgid "%d (enabled, prefer temporary IP)"
msgstr "%d (সামৰà§à¦¥à¦¬à¦¾à¦¨, অসà§à¦¥à¦¾à§Ÿà§€ IP পছনà§à¦¦)"
-#: ../cli/src/settings.c:809
+#: ../clients/cli/settings.c:751
msgid "0 (none)"
msgstr "0 (à¦à¦•à§‹ নাই)"
-#: ../cli/src/settings.c:815
+#: ../clients/cli/settings.c:757
msgid "agent-owned, "
msgstr "অভিকৰà§à¦¤à¦¾-সà§à¦¬à¦¤à§à¦¬à¦¤,"
-#: ../cli/src/settings.c:817
+#: ../clients/cli/settings.c:759
msgid "not saved, "
msgstr "সংৰকà§à¦·à¦¿à¦¤ নহয়,"
-#: ../cli/src/settings.c:819
+#: ../clients/cli/settings.c:761
msgid "not required, "
msgstr "পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿ নহয়,"
-#: ../cli/src/settings.c:1124
+#: ../clients/cli/settings.c:1043
msgid "0 (disabled)"
msgstr "0 (অসামৰà§à¦¥à¦¬à¦¾à¦¨)"
-#: ../cli/src/settings.c:1130
+#: ../clients/cli/settings.c:1049
msgid "enabled, "
msgstr "সামৰà§à¦¥à¦¬à¦¾à¦¨, "
-#: ../cli/src/settings.c:1132
+#: ../clients/cli/settings.c:1051
msgid "advertise, "
msgstr "পà§à§°à¦šà¦¾à§°, "
-#: ../cli/src/settings.c:1134
+#: ../clients/cli/settings.c:1053
msgid "willing, "
msgstr "ইচà§à¦›à§à¦•, "
-#: ../cli/src/settings.c:1162
+#: ../clients/cli/settings.c:1081
msgid "-1 (unset)"
msgstr "-1 (অসংহিত)"
-#: ../cli/src/settings.c:1270 ../cli/src/settings.c:1453
-#: ../cli/src/settings.c:1493
+#: ../clients/cli/settings.c:1178 ../clients/cli/settings.c:1509
+#: ../clients/cli/settings.c:1551
msgid "auto"
msgstr "সà§à¦¬à¦šà¦¾à¦²à¦¿à¦¤"
-#: ../cli/src/settings.c:1283
+#: ../clients/cli/settings.c:1191
msgid "default"
msgstr "অবিকলà§à¦ªà¦¿à¦¤"
-#: ../cli/src/settings.c:1614
+#: ../clients/cli/settings.c:1679
#, c-format
msgid "Do you also want to set '%s' to '%s'? [yes]: "
msgstr "আপà§à¦¨à¦¿ '%s' ক '%s' লৈ সংহতি কৰিব খোজে নে? [yes]: "
-#: ../cli/src/settings.c:1616
+#: ../clients/cli/settings.c:1681
#, 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
+#: ../clients/cli/settings.c:1842
+#, c-format
+msgid ""
+"Warning: %s.%s set to '%s', but it might be ignored in infrastructure mode\n"
+msgstr ""
+"সতৰà§à¦•à¦¬à¦¾à§°à§à¦¤à¦¾: %s.%s ক '%s' লৈ সংহতি কৰা হৈছে, কিনà§à¦¤à§ ইয়াক অনà§à¦¤à¦—াথনী অৱসà§à¦¥à¦¾à¦¤ "
+"উপেকà§à¦·à¦¾ "
+"কৰিব পাৰি\n"
+
+#: ../clients/cli/settings.c:1924 ../clients/cli/settings.c:2184
+#: ../clients/cli/settings.c:4284
#, c-format
msgid "'%s' is not valid"
msgstr "'%s' বৈধ নহয়"
-#: ../cli/src/settings.c:1837
+#: ../clients/cli/settings.c:1947
#, c-format
msgid "'%d' is not valid; use <%d-%d>"
msgstr "'%d' বৈধ নহয়; <%d-%d> বà§à¦¯à§±à¦¹à¦¾à§° কৰক"
-#: ../cli/src/settings.c:1859
+#: ../clients/cli/settings.c:1969
#, c-format
msgid "'%u' is not valid; use <%d-%d>"
msgstr "'%u' বৈধ নহয়; <%d-%d> বà§à¦¯à§±à¦¹à¦¾à§° কৰক"
-#: ../cli/src/settings.c:1925
+#: ../clients/cli/settings.c:2035
#, c-format
msgid "'%s' is not valid; use <option>=<value>"
msgstr "'%s' বৈধ নহয়; <option>=<value> বà§à¦¯à§±à¦¹à¦¾à§° কৰক"
-#: ../cli/src/settings.c:1959
+#: ../clients/cli/settings.c:2069
#, c-format
msgid "index '%s' is not valid"
msgstr "সূচী '%s' বৈধ নহয়"
-#: ../cli/src/settings.c:1964
+#: ../clients/cli/settings.c:2074 ../clients/cli/settings.c:2099
msgid "no item to remove"
msgstr "আতৰাবলৈ কোনো বসà§à¦¤à§ নাই"
-#: ../cli/src/settings.c:1968
+#: ../clients/cli/settings.c:2078 ../clients/cli/settings.c:2103
#, c-format
msgid "index '%d' is not in range <0-%d>"
msgstr "সূচী '%d' বিসà§à¦¤à¦¾à§° <0-%d> ত নাই"
-#: ../cli/src/settings.c:1983
+#: ../clients/cli/settings.c:2118
#, c-format
msgid "invalid option '%s'"
msgstr "অবৈধ বিকলà§à¦ª '%s'"
-#: ../cli/src/settings.c:1985
+#: ../clients/cli/settings.c:2120
msgid "missing option"
-msgstr "সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨ বিকলà§à¦ª"
+msgstr "সনà§à¦§à¦¾à¦¨à¦¹à§€à¦¨ বিকলà§à¦ª"
-#: ../cli/src/settings.c:2015 ../cli/src/settings.c:2035
+#: ../clients/cli/settings.c:2150
#, c-format
msgid "'%s' is not a valid number (or out of range)"
msgstr "'%s' à¦à¦Ÿà¦¾ বৈধ সংখà§à¦¯à¦¾ নহয় (অথবা বিসà§à¦¤à¦¾à§°à§° বাহিৰ)"
-#: ../cli/src/settings.c:2089
+#: ../clients/cli/settings.c:2200
#, 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
+#: ../clients/cli/settings.c:2225 ../libnm-core/nm-setting-connection.c:795
+#: ../libnm-core/nm-setting-infiniband.c:271
+#: ../libnm-util/nm-setting-connection.c:833
+#: ../libnm-util/nm-setting-infiniband.c:268
#, 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
+#: ../clients/cli/settings.c:2249
#, c-format
-msgid "'%s' is not a number"
-msgstr "'%s' à¦à¦Ÿà¦¾ সংখà§à¦¯à¦¾ নহয়"
+#| msgid "'%s' is not a valid channel; use <1-13>"
+msgid "'%s' is not a valid flag number; use <0-%d>"
+msgstr "'%s' à¦à¦Ÿà¦¾ বৈধ ফà§à¦²à§‡à¦— নমà§à¦¬à§° নহয়; <0-%d> বà§à¦¯à§±à¦¹à¦¾à§° কৰক"
-#: ../cli/src/settings.c:2185
+#: ../clients/cli/settings.c:2261
+#, c-format
+msgid "Warning: '%s' sum is higher than all flags => all flags set\n"
+msgstr "সতৰà§à¦•à¦¬à¦¾à§°à§à¦¤à¦¾: '%s' যোগফল সকলো ফà§à¦²à§‡à¦— => সংহতি কৰা সকলো ফà§à¦²à§‡à¦—তকৈ অধিক\n"
+
+#: ../clients/cli/settings.c:2304
#, c-format
msgid "'%s' is not a valid hex character"
msgstr "'%s' à¦à¦Ÿà¦¾ বৈধ হেকà§à¦¸ আখৰ নহয়"
-#: ../cli/src/settings.c:2215
+#: ../clients/cli/settings.c:2334
#, c-format
msgid "'%s' is not a valid MAC"
msgstr "'%s' à¦à¦Ÿà¦¾ বৈধ MAC নহয়"
-#: ../cli/src/settings.c:2252 ../libnm-util/nm-setting-connection.c:715
+#: ../clients/cli/settings.c:2371 ../libnm-core/nm-setting-connection.c:784
+#: ../libnm-util/nm-setting-connection.c:790
#, c-format
msgid "'%s' is not a valid UUID"
msgstr "'%s' à¦à¦Ÿà¦¾ বৈধ UUID নহয়"
-#: ../cli/src/settings.c:2317
+#: ../clients/cli/settings.c:2438
+#, c-format
+msgid "the property doesn't contain permission '%s'"
+msgstr "বৈশিষà§à¦Ÿà§à¦¯à§Ÿ অনà§à¦®à¦¤à¦¿ '%s' অনà§à¦¤à§°à§à¦­à§à¦•à§à¦¤ নকৰে"
+
+#: ../clients/cli/settings.c:2450
msgid ""
"Enter a list of user permissions. This is a list of user names formatted "
"as:\n"
@@ -4642,27 +4737,88 @@ msgstr ""
"\n"
"উদাহৰণসà§à¦¬à§°à§‚প: alice bob charlie\n"
-#: ../cli/src/settings.c:2332
+#: ../clients/cli/settings.c:2469
#, c-format
msgid "'%s' is not valid master; use ifname or connection UUID"
msgstr "'%s' à¦à¦Ÿà¦¾ বৈধ মাসà§à¦Ÿà¦¾à§° নহয়; ifname অথবা সংযোগ UUID বà§à¦¯à§±à¦¹à¦¾à§° কৰক"
-#: ../cli/src/settings.c:2453
+#: ../clients/cli/settings.c:2513
+#, c-format
+msgid "Warning: %s is not an UUID of any existing connection profile\n"
+msgstr "সতৰà§à¦•à¦¬à¦¾à§°à§à¦¤à¦¾: %s কোনো সà§à¦¥à¦¾à§Ÿà§€ সংযোগ আলেখà§à¦¯à§° à¦à¦Ÿà¦¾ UUID নহয়\n"
+
+#: ../clients/cli/settings.c:2517 ../clients/cli/settings.c:2533
+#, c-format
+msgid "'%s' is not a VPN connection profile"
+msgstr "'%s' à¦à¦Ÿà¦¾ VPN সংযোগ আলেখà§à¦¯ নহয়"
+
+#: ../clients/cli/settings.c:2526
+#, c-format
+msgid "'%s' is not a name of any exiting profile"
+msgstr "'%s' কোনো সà§à¦¥à¦¾à§Ÿà§€ আলেখà§à¦¯à§° নাম নহয়"
+
+#: ../clients/cli/settings.c:2560
+#, c-format
+msgid "the value '%s' is not a valid UUID"
+msgstr "মান '%s' à¦à¦Ÿà¦¾ বৈধ UUID নহয়"
+
+#: ../clients/cli/settings.c:2567
+#, c-format
+msgid "the property doesn't contain UUID '%s'"
+msgstr "বৈশিষà§à¦Ÿà§à¦¯à§Ÿ UUID '%s' ক অনà§à¦¤à§°à§à¦­à§à¦•à§à¦¤ নকৰে"
+
+#: ../clients/cli/settings.c:2579
+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 অথবা ID (নাম) ৰ সৈতে ধাৰà§à¦¯à§à¦¯ কৰিব পাৰি। nmcli\n"
+"ঠসà§à¦¬à¦šà§à¦›à¦­à¦¾à§±à§‡ নামসমূহক UUIDs লৈ অনà§à¦¬à¦¾à¦¦ কৰে। মন কৰিব যে NetworkManager ঠà¦à¦‡ "
+"মà§à¦¹à§‚ৰà§à¦¤à¦¤\n"
+"কেৱল VPNs ক দà§à¦¬à¦¿à¦¤à§€à§Ÿ সংযোগ ৰূপে সমৰà§à¦¥à¦¨ কৰে।\n"
+"বসà§à¦¤à§à¦¬à§‹à§°à¦• কমা অথবা সà§à¦ªà§‡à¦‡à¦šà§° সৈতে পৃথক কৰিব পাৰি।\n"
+"\n"
+"উদাহৰণ: private-openvpn, fe6ba5d8-c2fc-4aae-b2e3-97efddd8d9a7\n"
+
+#: ../clients/cli/settings.c:2656
msgid "private key password not provided"
-msgstr "বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কি পাছৱাৰà§à¦¡ পà§à§°à¦¦à¦¾à¦¨ কৰা হোৱা নাই"
+msgstr "বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কি পাছৱৰà§à¦¡ পà§à§°à¦¦à¦¾à¦¨ কৰা হোৱা নাই"
+
+#: ../clients/cli/settings.c:2683
+#, c-format
+msgid "the property doesn't contain EAP method '%s'"
+msgstr "বৈশিষà§à¦Ÿà§à¦¯à§Ÿ EAP পদà§à¦§à¦¤à¦¿ '%s' ক অনà§à¦¤à§°à§à¦­à§à¦•à§à¦¤ নকৰে"
-#: ../cli/src/settings.c:2513
+#: ../clients/cli/settings.c:2708
+#, c-format
+msgid "the property doesn't contain alternative subject match '%s'"
+msgstr "বৈশিষà§à¦Ÿà§à¦¯à§Ÿ বৈকলà§à¦ªà¦¿à¦• বিষয় মিল '%s' অনà§à¦¤à§°à§à¦­à§à¦•à§à¦¤ নকৰে"
+
+#: ../clients/cli/settings.c:2737
+#, c-format
+msgid "the property doesn't contain \"phase2\" alternative subject match '%s'"
+msgstr "বৈশিষà§à¦Ÿà§à¦¯à§Ÿ \"phase2\" বৈকলà§à¦ªà¦¿à¦• বিষয় মিল '%s' অনà§à¦¤à§°à§à¦­à§à¦•à§à¦¤ নকৰে"
+
+#: ../clients/cli/settings.c:2763
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
+#: ../clients/cli/settings.c:2833
msgid ""
"Enter bytes as a list of hexadecimal values.\n"
"Two formats are accepted:\n"
@@ -4684,7 +4840,7 @@ msgstr ""
"উদাহৰণসà§à¦¬à§°à§‚প: ab0455a6ea3a74C2\n"
" ab 4 55 0xa6 ea 3a 74 C2\n"
-#: ../cli/src/settings.c:2686
+#: ../clients/cli/settings.c:2936
#, c-format
msgid ""
"Enter a list of bonding options formatted as:\n"
@@ -4715,17 +4871,22 @@ msgstr ""
"\n"
"উদাহৰণসà§à¦¬à§°à§‚প: mode=2,miimon=120\n"
-#: ../cli/src/settings.c:2727
+#: ../clients/cli/settings.c:2974
#, c-format
msgid "'%s' is not a valid InfiniBand MAC"
msgstr "'%s' à¦à¦Ÿà¦¾ বৈধ InfiniBand MAC নহয়"
-#: ../cli/src/settings.c:2765
+#: ../clients/cli/settings.c:3011
#, c-format
msgid "'%s' is not a valid IBoIP P_Key"
msgstr "'%s' à¦à¦Ÿà¦¾ বৈধ IBoIP P_Key নহয়"
-#: ../cli/src/settings.c:2825
+#: ../clients/cli/settings.c:3080 ../clients/cli/settings.c:3426
+#, c-format
+msgid "the property doesn't contain DNS server '%s'"
+msgstr "বৈশিষà§à¦Ÿà§à¦¯à§Ÿ DNS চাৰà§à¦­à¦¾à§° '%s' অনà§à¦¤à§°à§à¦­à§à¦•à§à¦¤ নকৰে"
+
+#: ../clients/cli/settings.c:3092
msgid ""
"Enter a list of IPv4 addresses of DNS servers.\n"
"\n"
@@ -4735,12 +4896,22 @@ msgstr ""
"\n"
"উদাহৰণসà§à¦¬à§°à§‚প: 8.8.8.8, 8.8.4.4\n"
-#: ../cli/src/settings.c:2871 ../cli/src/settings.c:3123
+#: ../clients/cli/settings.c:3128 ../clients/cli/settings.c:3480
+#, c-format
+msgid "the property doesn't contain DNS search domain '%s'"
+msgstr "বৈশিষà§à¦Ÿà§à¦¯à§Ÿ DNS সনà§à¦§à¦¾à¦¨ ডমেইন '%s' অনà§à¦¤à§°à§à¦­à§à¦•à§à¦¤ নকৰে"
+
+#: ../clients/cli/settings.c:3148 ../clients/cli/settings.c:3500
#, c-format
msgid "'%s' is not valid (use ip[/prefix] [gateway])"
msgstr "'%s' বৈধ নহয় (ip[/prefix] [gateway] বà§à¦¯à§±à¦¹à¦¾à§° কৰক)"
-#: ../cli/src/settings.c:2897
+#: ../clients/cli/settings.c:3197 ../clients/cli/settings.c:3548
+#, c-format
+msgid "the property doesn't contain IP address '%s'"
+msgstr "বৈশিষà§à¦Ÿà§à¦¯à§Ÿ IP ঠিকনা '%s' অনà§à¦¤à§°à§à¦­à§à¦•à§à¦¤ নকৰে"
+
+#: ../clients/cli/settings.c:3210
msgid ""
"Enter a list of IPv4 addresses formatted as:\n"
" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
@@ -4750,32 +4921,45 @@ msgid ""
msgstr ""
"নিমà§à¦¨à¦²à¦¿à¦–িত বিনà§à¦¯à¦¾à¦¸à¦¤ IPv4 ঠিকনাসমূহৰ à¦à¦Ÿà¦¾ তালিকা সà§à¦®à§à§±à¦¾à¦“ক:\n"
" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
-"সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨ উপসৰà§à¦—ক 32 ৰ উপসৰà§à¦— বà§à¦²à¦¿ ধৰা হয়।\n"
+"সনà§à¦§à¦¾à¦¨à¦¹à§€à¦¨ উপসৰà§à¦—ক 32 ৰ উপসৰà§à¦— বà§à¦²à¦¿ ধৰা হয়।\n"
"\n"
"উদাহৰণসà§à¦¬à§°à§‚প: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
-#: ../cli/src/settings.c:2954
+#: ../clients/cli/settings.c:3263 ../clients/cli/settings.c:3579
+#, c-format
+msgid "'%s' is not valid (the format is: ip[/prefix] [next-hop] [metric])"
+msgstr "'%s' বৈধ নহয় (বিনà§à¦¯à¦¾à¦¸ হল: ip[/prefix] [next-hop] [metric])"
+
+#: ../clients/cli/settings.c:3311 ../clients/cli/settings.c:3627
#, c-format
-msgid "'%s' is not valid (use ip/[prefix] next-hop [metric])"
-msgstr "'%s' বৈধ নহয় (ip/[prefix] next-hop [metric] বà§à¦¯à§±à¦¹à¦¾à§° কৰক)"
+msgid "the property doesn't contain route '%s'"
+msgstr "বৈশিষà§à¦Ÿà§à¦¯à§Ÿ পথ '%s' ক অনà§à¦¤à§°à§à¦­à§à¦•à§à¦¤ নকৰে"
-#: ../cli/src/settings.c:2980
+#: ../clients/cli/settings.c:3324
msgid ""
"Enter a list of IPv4 routes formatted as:\n"
-" ip/[prefix] next-hop [metric],...\n"
+" ip[/prefix] [next-hop] [metric],...\n"
+"\n"
"Missing prefix is regarded as a prefix of 32.\n"
-"Missing metric is regarded as a metric of 0.\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"
-"Example: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\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/[prefix] next-hop [metric],...\n"
-"সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨ উপসৰà§à¦—ক 32 ৰ উপসৰà§à¦— বà§à¦²à¦¿ ধৰা হয়।\n"
-"সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨ উপসৰà§à¦—ক 0 ৰ উপসৰà§à¦— বà§à¦²à¦¿ ধৰা হয়।\n"
+" ip[/prefix] [next-hop] [metric],...\n"
+"সনà§à¦§à¦¾à¦¨à¦¹à§€à¦¨ উপসৰà§à¦—ক 32 ৰ উপসৰà§à¦— বà§à¦²à¦¿ ধৰা হয়।\n"
+"সনà§à¦§à¦¾à¦¨à¦¹à§€à¦¨ next-hop ক 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:3071
+#: ../clients/cli/settings.c:3438
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 "
@@ -4792,15 +4976,15 @@ msgstr ""
"(যদি "
"উপলবà§à¦§)। DNS চাৰà§à¦­à¦¾à§°à¦¸à¦®à§‚হক 'shared' অথবা 'link-local' IPv6 সংৰূপ পদà§à¦§à¦¤à¦¿à¦¸à¦®à§‚হৰ "
"সৈতে "
-"বà§à¦¯à§±à¦¹à¦¾à§° কৰিব নোৱাৰি, যিহেতৠকোনো আপসà§à¦Ÿà§à§°à¦¿à¦® নেটৱাৰà§à¦• উপলবà§à¦§ নাই। অনà§à¦¯ সকলো "
-"IPv6 সংৰূপ "
+"বà§à¦¯à§±à¦¹à¦¾à§° কৰিব নোৱাৰি, যিহেতৠকোনো আপসà§à¦Ÿà§à§°à¦¿à¦® নেটৱৰà§à¦• উপলবà§à¦§ নাই। অনà§à¦¯ সকলো IPv6 "
+"সংৰূপ "
"পদà§à¦§à¦¤à¦¿à¦¸à¦®à§‚হত, à¦à¦‡ DNS চাৰà§à¦­à¦¾à§°à¦¸à¦®à§‚হক à¦à¦‡ সংযোগৰ বাবে à¦à¦•à¦®à¦¾à¦¤à§à§° উপলবà§à¦§ DNS "
"চাৰà§à¦­à¦¾à§°à¦¸à¦®à§‚হ "
"হিচাপে বà§à¦¯à§±à¦¹à¦¾à§° কৰা হয়।\n"
"\n"
"উদাহৰণসà§à¦¬à§°à§‚প: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
-#: ../cli/src/settings.c:3149
+#: ../clients/cli/settings.c:3561
msgid ""
"Enter a list of IPv6 addresses formatted as:\n"
" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
@@ -4811,50 +4995,60 @@ msgid ""
msgstr ""
"নিমà§à¦¨à¦²à¦¿à¦–িত বিনà§à¦¯à¦¾à¦¸à¦¤ IPv6 ঠিকনাসমূহৰ à¦à¦Ÿà¦¾ তালিকা সà§à¦®à§à§±à¦¾à¦“ক:\n"
" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
-"সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨ উপসৰà§à¦—ক 128 ৰ উপসৰà§à¦— বà§à¦²à¦¿ ধৰা হয়।\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
+#: ../clients/cli/settings.c:3640
msgid ""
"Enter a list of IPv6 routes formatted as:\n"
-" ip/[prefix] next-hop [metric],...\n"
+" ip[/prefix] [next-hop] [metric],...\n"
+"\n"
"Missing prefix is regarded as a prefix of 128.\n"
-"Missing metric is regarded as a metric of 0.\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"
-"Example: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
+"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/[prefix] next-hop [metric],...\n"
-"সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨ উপসৰà§à¦—ক 128 ৰ উপসৰà§à¦— বà§à¦²à¦¿ ধৰা হয়।\n"
-"সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨ উপসৰà§à¦—ক 0 ৰ উপসৰà§à¦— বà§à¦²à¦¿ ধৰা হয়।\n"
+" ip[/prefix] [next-hop] [metric],...\n"
+"\n"
+"সনà§à¦§à¦¾à¦¨à¦¹à§€à¦¨ উপসৰà§à¦—ক 128 ৰ উপসৰà§à¦— বà§à¦²à¦¿ ধৰা হয়।\n"
+"সনà§à¦§à¦¾à¦¨à¦¹à§€à¦¨ next-hop ক \"::\" বà§à¦²à¦¿ ধৰা হয়।\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"
+
+#: ../clients/cli/settings.c:3657 ../libnm-core/nm-setting-gsm.c:333
+#: ../libnm-util/nm-setting-gsm.c:372
+#, c-format
+msgid "'%s' is not a number"
+msgstr "'%s' à¦à¦Ÿà¦¾ সংখà§à¦¯à¦¾ নহয়"
-#: ../cli/src/settings.c:3219
+#: ../clients/cli/settings.c:3664
#, c-format
msgid "'%s' is not valid; use 0, 1, or 2"
msgstr "'%s' বৈধ নহয়; 0, 1, অথবা 2 বà§à¦¯à§±à¦¹à¦¾à§° কৰক"
-#: ../cli/src/settings.c:3236
+#: ../clients/cli/settings.c:3681
#, c-format
msgid "'%s' is not a valid channel; use <1-13>"
msgstr "'%s' à¦à¦Ÿà¦¾ বৈধ চেনেল নহয়; <1-13> বà§à¦¯à§±à¦¹à¦¾à§° কৰক"
-#: ../cli/src/settings.c:3257
+#: ../clients/cli/settings.c:3718
#, c-format
msgid "'%s' is not valid; use [e, o, n]"
msgstr "'%s' বৈধ নহয়; [e, o, n] বà§à¦¯à§±à¦¹à¦¾à§° কৰক"
-#: ../cli/src/settings.c:3285
+#: ../clients/cli/settings.c:3746
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 "
@@ -4872,21 +5066,49 @@ msgstr ""
"\"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n"
" set team.config /etc/my-team.conf\n"
-#: ../cli/src/settings.c:3325
+#: ../clients/cli/settings.c:3786
msgid "no priority to remove"
msgstr "আতৰাবলৈ কোনো পà§à§°à¦¾à¦¥à¦®à¦¿à¦•à¦¤à¦¾ নাই"
-#: ../cli/src/settings.c:3329
+#: ../clients/cli/settings.c:3790
#, c-format
msgid "index '%d' is not in the range of <0-%d>"
msgstr "সূচী '%d' বিসà§à¦¤à¦¾à§° <0-%d> ত নাই"
-#: ../cli/src/settings.c:3444
+#: ../clients/cli/settings.c:3829
+#, c-format
+msgid ""
+"Warning: only one mapping at a time is supported; taking the first one (%s)\n"
+msgstr ""
+"সতৰà§à¦•à¦¬à¦¾à§°à§à¦¤à¦¾: à¦à¦Ÿà¦¾ সময়ত কেৱল à¦à¦Ÿà¦¾ মেপিং সমৰà§à¦¥à¦¨ কৰা হয়; পà§à§°à¦¥à¦®à¦Ÿà§‹ (%s) লোৱা হৈছে\n"
+
+#: ../clients/cli/settings.c:3836
+#, c-format
+msgid "the property doesn't contain mapping '%s'"
+msgstr "বৈশিষà§à¦Ÿà§à¦¯à§Ÿ মেপিং '%s' অনà§à¦¤à§°à§à¦­à§à¦•à§à¦¤ নকৰে"
+
+#: ../clients/cli/settings.c:3945 ../clients/cli/settings.c:4113
+#: ../libnm-core/nm-setting-wired.c:622
+#: ../libnm-core/nm-setting-wireless.c:799
+#: ../libnm-core/nm-setting-wireless.c:811
+#: ../libnm-util/nm-setting-wired.c:648
+#: ../libnm-util/nm-setting-wireless.c:840
+#: ../libnm-util/nm-setting-wireless.c:854
+#, c-format
+msgid "'%s' is not a valid MAC address"
+msgstr "'%s' à¦à¦Ÿà¦¾ বৈধ MAC ঠিকনা নহয়"
+
+#: ../clients/cli/settings.c:3951 ../clients/cli/settings.c:4119
+#, c-format
+msgid "the property doesn't contain MAC address '%s'"
+msgstr "বৈশিষà§à¦Ÿà§à¦¯à§Ÿ MAC ঠিকনা '%s' অনà§à¦¤à§°à§à¦­à§à¦•à§à¦¤ নকৰে"
+
+#: ../clients/cli/settings.c:3970
#, c-format
msgid "'%s' is not valid; 3 strings should be provided"
msgstr "'%s' বৈধ নহয়; ৩ টা সà§à¦Ÿà§à§°à¦¿ পà§à§°à¦¦à¦¾à¦¨ কৰিব লাগিব"
-#: ../cli/src/settings.c:3463
+#: ../clients/cli/settings.c:3989
msgid ""
"Enter a list of three channels (comma or space separated).\n"
"\n"
@@ -4896,7 +5118,7 @@ msgstr ""
"\n"
"Example: 0.0.0e20 0.0.0e21 0.0.0e22\n"
-#: ../cli/src/settings.c:3513
+#: ../clients/cli/settings.c:4039
#, c-format
msgid ""
"Enter a list of S/390 options formatted as:\n"
@@ -4907,27 +5129,59 @@ msgstr ""
" option = <value>, option = <value>,...\n"
"বৈধ বিকলà§à¦ªà¦¸à¦®à§‚হ হল: %s\n"
-#: ../cli/src/settings.c:3559
+#: ../clients/cli/settings.c:4085
#, c-format
msgid "'%s' is not a valid channel"
msgstr "'%s' à¦à¦Ÿà¦¾ বৈধ চেনেল নহয়"
-#: ../cli/src/settings.c:3565
+#: ../clients/cli/settings.c:4091
#, c-format
msgid "'%ld' is not a valid channel"
msgstr "'%ld' à¦à¦Ÿà¦¾ বৈধ চেনেল নহয়"
-#: ../cli/src/settings.c:3668 ../cli/src/settings.c:3671
+#: ../clients/cli/settings.c:4178 ../clients/cli/settings.c:4216
+#: ../clients/cli/settings.c:4254
+#, c-format
+msgid "the property doesn't contain protocol '%s'"
+msgstr "বৈশিষà§à¦Ÿà§à¦¯à§Ÿ পà§à§°à¦Ÿà§‹à¦•à¦² '%s' অনà§à¦¤à§°à§à¦­à§à¦•à§à¦¤ নকৰে"
+
+#: ../clients/cli/settings.c:4293
+#, c-format
+msgid ""
+"'%s' not compatible with %s '%s', please change the key or set the right %s "
+"first."
+msgstr ""
+"'%s', %s '%s' ৰ সৈতে সংগত নহয়, অনà§à¦—à§à§°à¦¹ কৰি কি পৰিবৰà§à¦¤à¦¨ কৰক অথবা সঠিক %s "
+"পà§à§°à¦¥à¦®à¦¤à§‡ "
+"দিয়ক।"
+
+#: ../clients/cli/settings.c:4301
#, c-format
msgid "WEP key is guessed to be of '%s'\n"
msgstr "WEP কি'ক '%s' ৰ বà§à¦²à¦¿ ধৰা হয়\n"
-#: ../cli/src/settings.c:3695
+#: ../clients/cli/settings.c:4303
+#, c-format
+msgid "WEP key index set to '%d'\n"
+msgstr "WEP কি সূচী '%d' লৈ সংহতি কৰা হৈছে\n"
+
+#: ../clients/cli/settings.c:4326
#, 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
+#: ../clients/cli/settings.c:4342 ../clients/cli/settings.c:4345
+#: ../clients/cli/settings.c:4348 ../clients/cli/settings.c:4351
+#, c-format
+msgid ""
+"Warning: '%s' is not compatible with '%s' type, please change or delete the "
+"key.\n"
+msgstr ""
+"সতৰà§à¦•à¦¬à¦¾à§°à§à¦¤à¦¾: '%s', '%s' ধৰণৰ সৈতে সংগত নহয়, অনà§à¦—à§à§°à¦¹ কৰি কি পৰিবৰà§à¦¤à¦¨ কৰক অথবা "
+"মচি "
+"পেলাওক।\n"
+
+#: ../clients/cli/settings.c:4364
#, c-format
msgid ""
"Enter the type of WEP keys. The accepted values are: 0 or unknown, 1 or key, "
@@ -4937,36 +5191,36 @@ msgstr ""
"আৰৠ2 "
"অথবা পাচফà§à§°à§‡à¦‡à¦›à¥¤\n"
-#: ../cli/src/settings.c:3728
+#: ../clients/cli/settings.c:4377
#, c-format
msgid "'%s' is not a valid PSK"
msgstr "'%s' à¦à¦Ÿà¦¾ বৈধ PSK নহয়"
-#: ../cli/src/settings.c:3772
+#: ../clients/cli/settings.c:4421
#, c-format
msgid "'%s' is not a valid DCB flag"
msgstr "'%s' à¦à¦Ÿà¦¾ বৈধ DCB ফà§à¦²à§‡à¦— নহয়"
-#: ../cli/src/settings.c:3795
+#: ../clients/cli/settings.c:4444
#, c-format
msgid "'%s' is not a DCB app priority"
msgstr "'%s' à¦à¦Ÿà¦¾ DCB à¦à¦ª পà§à§°à¦¾à¦¥à¦®à¦¿à¦•à¦¤à¦¾ নহয়"
-#: ../cli/src/settings.c:3821
+#: ../clients/cli/settings.c:4470
msgid "must contain 8 comma-separated numbers"
msgstr "৮ কমা-পৃথকিত সংখà§à¦¯à¦¾ অনà§à¦¤à§°à§à¦­à§à¦•à§à¦¤ কৰিব লাগিব"
-#: ../cli/src/settings.c:3838
+#: ../clients/cli/settings.c:4487
#, c-format
msgid "'%s' not a number between 0 and %u (inclusive) or %u"
msgstr "'%s' 0 আৰৠ%u (অনà§à¦¤à§°à§à¦­à§à¦•à§à¦¤) অথবা %u মাজৰ à¦à¦Ÿà¦¾ সংখà§à¦¯à¦¾ নহয়"
-#: ../cli/src/settings.c:3841
+#: ../clients/cli/settings.c:4490
#, c-format
msgid "'%s' not a number between 0 and %u (inclusive)"
msgstr "'%s' 0 আৰৠ%u (অনà§à¦¤à§°à§à¦­à§à¦•à§à¦¤) মাজৰ à¦à¦Ÿà¦¾ সংখà§à¦¯à¦¾ নহয়"
-#: ../cli/src/settings.c:3863
+#: ../clients/cli/settings.c:4512
#, c-format
msgid ""
"Warning: changes will have no effect until '%s' includes 1 (enabled)\n"
@@ -4977,89 +5231,98 @@ msgstr ""
"নকৰে\n"
"\n"
-#: ../cli/src/settings.c:3916
+#: ../clients/cli/settings.c:4565
#, c-format
msgid "bandwidth percentages must total 100%%"
msgstr "বেণà§à¦¡à§±à¦¾à¦‡à¦¡à§à¦¥ শতাংশ হব লাগিব সৰà§à¦¬à¦®à§à¦  100%%"
-#: ../cli/src/settings.c:5594
+#: ../clients/cli/settings.c:6208
msgid "don't know how to get the property value"
msgstr "বৈশিষà§à¦Ÿà§à¦¯à§° মান কেনেকৈ পà§à§°à¦¾à¦ªà§à¦¤ কৰা হব জà§à¦žà¦¾à¦¤ নহয়"
-#: ../cli/src/settings.c:5647 ../cli/src/settings.c:5687
+#: ../clients/cli/settings.c:6261 ../clients/cli/settings.c:6301
msgid "the property can't be changed"
msgstr "বৈশিষà§à¦Ÿà§à¦¯à¦• পৰিবৰà§à¦¤à¦¨ কৰিব নোৱাৰি"
-#: ../cli/src/settings.c:5791
+#: ../clients/cli/settings.c:6384
+msgid "(not available)"
+msgstr "(উপলবà§à¦§ নহয়)"
+
+#: ../clients/cli/settings.c:6409
msgid "[NM property description]"
msgstr "[NM বৈশিষà§à¦Ÿà§à¦¯à§° বিৱৰণ]"
-#: ../cli/src/settings.c:5797
+#: ../clients/cli/settings.c:6414
msgid "[nmcli specific description]"
msgstr "[nmcli বিশেষ বিৱৰণ]"
-#: ../cli/src/utils.c:128
+#: ../clients/cli/utils.c:127
#, c-format
msgid "Error: value for '%s' argument is required."
msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' তৰà§à¦•à§° বাবে মান পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿà¥¤"
-#: ../cli/src/utils.c:153
+#: ../clients/cli/utils.c:152
#, c-format
msgid "Error: Argument '%s' was expected, but '%s' provided."
msgstr "তà§à§°à§à¦Ÿà¦¿: তৰà§à¦• '%s' আশা কৰা হৈছিল, কিনà§à¦¤à§ '%s' পà§à§°à¦¦à¦¾à¦¨ কৰা হৈছে।"
-#: ../cli/src/utils.c:156
+#: ../clients/cli/utils.c:155
#, c-format
msgid "Error: Unexpected argument '%s'"
msgstr "তà§à§°à§à¦Ÿà¦¿: অপà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤ তৰà§à¦• '%s'"
-#: ../cli/src/utils.c:206
+#: ../clients/cli/utils.c:205
#, c-format
msgid "Error converting IP4 address '0x%X' to text form"
-msgstr "IP4 ঠিকনা '0x%X' ক লিখনী বিনà§à¦¯à¦¾à¦¸à¦²à§‡ পৰিবৰà§à¦¤à¦¨ কৰোতে তà§à§°à§à¦Ÿà¦¿"
+msgstr "IP4 ঠিকনা '0x%X' ক লিখনি বিনà§à¦¯à¦¾à¦¸à¦²à§‡ পৰিবৰà§à¦¤à¦¨ কৰোতে তà§à§°à§à¦Ÿà¦¿"
-#: ../cli/src/utils.c:234
+#: ../clients/cli/utils.c:233
#, c-format
msgid "Error converting IP6 address '%s' to text form"
-msgstr "IP6 ঠিকনা '%s' ক লিখনী বিনà§à¦¯à¦¾à¦¸à¦¤ পৰিবৰà§à¦¤à¦¨ কৰোতে তà§à§°à§à¦Ÿà¦¿"
+msgstr "IP6 ঠিকনা '%s' ক লিখনি বিনà§à¦¯à¦¾à¦¸à¦¤ পৰিবৰà§à¦¤à¦¨ কৰোতে তà§à§°à§à¦Ÿà¦¿"
-#: ../cli/src/utils.c:410
+#: ../clients/cli/utils.c:410
+#, c-format
+msgid "'%s' is ambiguous (on x off)"
+msgstr "'%s' দà§à¦¬à§ˆà§°à§à¦¥à¦• (অন x অফ)"
+
+#: ../clients/cli/utils.c:420
#, c-format
msgid "'%s' is not valid; use [%s] or [%s]"
msgstr "'%s' বৈধ নহয়; [%s] অথবা [%s] বà§à¦¯à§±à¦¹à¦¾à§° কৰক"
-#: ../cli/src/utils.c:492
+#: ../clients/cli/utils.c:502
#, c-format
msgid "'%s' is ambiguous (%s x %s)"
msgstr "'%s' দà§à¦¬à§ˆà§°à§à¦¥à¦• (%s x %s)"
-#: ../cli/src/utils.c:504
+#: ../clients/cli/utils.c:514
#, c-format
msgid "missing name, try one of [%s]"
-msgstr "সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨ নাম, [%s] ৰ à¦à¦Ÿà¦¾ চেষà§à¦Ÿà¦¾ কৰি চাওক"
+msgstr "সনà§à¦§à¦¾à¦¨à¦¹à§€à¦¨ নাম, [%s] ৰ à¦à¦Ÿà¦¾ চেষà§à¦Ÿà¦¾ কৰি চাওক"
-#: ../cli/src/utils.c:721
+#: ../clients/cli/utils.c:731
#, c-format
msgid "field '%s' has to be alone"
msgstr "কà§à¦·à§‡à¦¤à§à§° '%s' অকলে থাকিব লাগিব"
-#: ../cli/src/utils.c:724
+#: ../clients/cli/utils.c:734
#, c-format
msgid "invalid field '%s'; allowed fields: %s"
msgstr "অবৈধ ফিলà§à¦¡ '%s'; অনà§à¦®à§‹à¦¦à¦¿à¦¤ ফিলà§à¦¡à¦¸à¦®à§‚হ: %s"
-#: ../cli/src/utils.c:781
+#: ../clients/cli/utils.c:791
msgid "Option '--terse' requires specifying '--fields'"
msgstr "বিকলà§à¦ªà§° '--terse' ৰ '--fields' ধাৰà§à¦¯à§à¦¯ কৰাৰ পà§à§°à§Ÿà§‹à¦œà¦¨"
-#: ../cli/src/utils.c:785
+#: ../clients/cli/utils.c:795
#, c-format
msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
msgstr ""
"বিকলà§à¦ª '--terse' ৰ বিশেষ '--fields' বিকলà§à¦ª মানসমূহ ধাৰà§à¦¯à§à¦¯ কৰাৰ পà§à§°à§Ÿà§‹à¦œà¦¨, '%s' "
"নহয়"
-#: ../cli/src/utils.c:1104
+#: ../clients/cli/utils.c:1113
#, c-format
msgid ""
"Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --"
@@ -5069,7 +5332,7 @@ msgstr ""
"সতৰà§à¦•à¦¬à¦¾à§°à§à¦¤à¦¾ "
"দবাবলে --nocheck বà§à¦¯à§±à¦¹à¦¾à§° কৰক।\n"
-#: ../cli/src/utils.c:1113
+#: ../clients/cli/utils.c:1122
#, c-format
msgid ""
"Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force "
@@ -5078,748 +5341,1849 @@ msgstr ""
"তà§à§°à§à¦Ÿà¦¿: nmcli (%s) আৰৠNetworkManager (%s) সংসà§à¦•à§°à¦£à¦¸à¦®à§‚হ মিল নাখায়। --nocheck "
"বà§à¦¯à§±à¦¹à¦¾à§° কৰি à¦à¦•à§à¦¸à¦¿à¦•à¦¿à¦‰à¦šà¦¨ বলৱৎ কৰক, কিনà§à¦¤à§ ফলাফলসমূহৰ আগজাননী দিব নোৱাৰি।"
-#: ../libnm-glib/nm-device.c:1814
-msgid "Bluetooth"
-msgstr "বà§à¦²à§à¦Ÿà§à¦¥"
+#: ../clients/nm-online.c:96
+#, c-format
+msgid "\rConnecting"
+msgstr "\rসংযোগ কৰা হৈছে"
-#: ../libnm-glib/nm-device.c:1816
-msgid "OLPC Mesh"
-msgstr "OLPC মেশ"
+#: ../clients/nm-online.c:149
+msgid ""
+"Time to wait for a connection, in seconds (without the option, default value "
+"is 30)"
+msgstr ""
+"à¦à¦Ÿà¦¾ সংযোগৰ বাবে অপেকà§à¦·à¦¾ কৰিব লগিয়া সময়, ছেকেণà§à¦¡à¦¤ (বিকলà§à¦ªà§° অবিহনে, অবিকলà§à¦ªà¦¿à¦¤ "
+"মান "
+"হল ৩০)"
-#: ../libnm-glib/nm-device.c:1818
-msgid "WiMAX"
-msgstr "WiMAX"
+#: ../clients/nm-online.c:150
+msgid "Exit immediately if NetworkManager is not running or connecting"
+msgstr ""
+"যদি NetworkManager চলি থকা নাই অথবা সংযোগ কৰা নাই তৎকà§à¦·à¦¨à¦¾à¦¤ পà§à§°à¦¸à§à¦¥à¦¾à¦¨ কৰিব"
-#: ../libnm-glib/nm-device.c:1820 ../tui/nm-editor-utils.c:182
+#: ../clients/nm-online.c:151
+msgid "Don't print anything"
+msgstr "à¦à¦•à§‹ পà§à§°à¦¿à¦£à§à¦Ÿ নকৰিব"
+
+#: ../clients/nm-online.c:152
+msgid "Wait for NetworkManager startup instead of a connection"
+msgstr "à¦à¦Ÿà¦¾ সংযোগৰ পৰিৱৰà§à¦¤à§‡ NetworkManager আৰমà§à¦­à¦£à¦¿à§° বাবে অপেকà§à¦·à¦¾ কৰক"
+
+#: ../clients/nm-online.c:173
+msgid ""
+"Waits for NetworkManager to finish activating startup network connections."
+msgstr ""
+"NetworkManager দà§à¦¬à¦¾à§°à¦¾ আৰমà§à¦­à¦£à¦¿ নেটৱৰà§à¦• সংযোগসমূহ সকà§à§°à¦¿à§Ÿ কৰা সমাপà§à¦¤ কৰিবলৈ "
+"অপেকà§à¦·à¦¾ "
+"কৰে।"
+
+#: ../clients/nm-online.c:180 ../clients/nm-online.c:186
+msgid "Invalid option. Please use --help to see a list of valid options."
+msgstr ""
+"অবৈধ বিকলà§à¦ªà¥¤ বৈধ বিকলà§à¦ªà¦¸à¦®à§‚হৰ à¦à¦Ÿà¦¾ তালিকা চাবলে অনà§à¦—à§à§°à¦¹ কৰি --help বà§à¦¯à§±à¦¹à¦¾à§° কৰক।"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:180 ../clients/tui/nmt-editor.c:245
+#: ../clients/tui/nmt-password-dialog.c:174
+#: ../clients/tui/nmt-route-editor.c:135 ../clients/tui/nmtui-hostname.c:71
+#: ../clients/tui/nmtui.c:118
+msgid "OK"
+msgstr "ঠিক আছে"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:328
+#: ../clients/tui/newt/nmt-newt-utils.c:360
+#, c-format
+msgid "Could not create temporary file: %s"
+msgstr "অসà§à¦¥à¦¾à§Ÿà§€ ফাইল সৃষà§à¦Ÿà¦¿ কৰিব পৰা নগল: %s"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:368
+#, c-format
+msgid "Editor failed: %s"
+msgstr "সমà§à¦ªà¦¾à¦¦à¦• বà§à¦¯à§°à§à¦¥ হল: %s"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:376
+#, c-format
+msgid "Editor failed with status %d"
+msgstr "সমà§à¦ªà¦¾à¦¦à¦• অৱসà§à¦¥à¦¾ %d ৰ সৈতে বà§à¦¯à§°à§à¦¥ হল"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:378
+#, c-format
+msgid "Editor failed with signal %d"
+msgstr "সমà§à¦ªà¦¾à¦¦à¦• সংকেত %d ৰ সৈতে বà§à¦¯à§°à§à¦¥ হল"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:382
+#, c-format
+msgid "Could not re-read file: %s"
+msgstr "ফাইল পà§à¦¨à§°-পà§à¦¿à¦¬ পৰা নগল: %s"
+
+#: ../clients/tui/nm-editor-utils.c:151
+#, c-format
+msgid "Ethernet connection %d"
+msgstr "ইথাৰনেট সংযোগ %d"
+
+#: ../clients/tui/nm-editor-utils.c:159
+#, c-format
+msgid "Wi-Fi connection %d"
+msgstr "Wi-Fi সংযোগ %d"
+
+#: ../clients/tui/nm-editor-utils.c:168
+#, c-format
+msgid "InfiniBand connection %d"
+msgstr "InfiniBand সংযোগ %d"
+
+#: ../clients/tui/nm-editor-utils.c:173 ../libnm-glib/nm-device.c:1798
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
+#: ../clients/tui/nm-editor-utils.c:176
+#, c-format
+msgid "Mobile broadband connection %d"
+msgstr "ম'বাইল বà§à§°'ডবেণà§à¦¡ সংযোগ %d"
+
+#: ../clients/tui/nm-editor-utils.c:182 ../clients/tui/nmt-page-dsl.c:39
+msgid "DSL"
+msgstr "DSL"
+
+#: ../clients/tui/nm-editor-utils.c:186
+#, c-format
+msgid "DSL connection %d"
+msgstr "DSL সংযোগ %d"
+
+#: ../clients/tui/nm-editor-utils.c:191 ../libnm-core/nm-connection.c:1501
+#: ../libnm-glib/nm-device.c:1802 ../libnm-util/nm-connection.c:1606
+#: ../src/settings/plugins/ifcfg-rh/reader.c:3931
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 "দল"
+#: ../clients/tui/nm-editor-utils.c:195
+#, c-format
+msgid "Bond connection %d"
+msgstr "বানà§à¦§à¦¨à§€ সংযোগ %d"
-#: ../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
+#: ../clients/tui/nm-editor-utils.c:200 ../libnm-core/nm-connection.c:1505
+#: ../libnm-glib/nm-device.c:1806 ../libnm-util/nm-connection.c:1610
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4219
msgid "Bridge"
msgstr "বà§à§°à¦¿à¦œ"
-#: ../libnm-glib/nm-device.c:1832
-msgid "ADSL"
-msgstr "ADSL"
+#: ../clients/tui/nm-editor-utils.c:205
+#, c-format
+msgid "Bridge connection %d"
+msgstr "বà§à§°à¦¿à¦œ সংযোগ %d"
-#: ../libnm-glib/nm-device.c:1860
-msgid "Wired"
-msgstr "তাà¦à§°à¦¯à§à¦•à§à¦¤"
+#: ../clients/tui/nm-editor-utils.c:209 ../libnm-core/nm-connection.c:1503
+#: ../libnm-glib/nm-device.c:1804 ../libnm-util/nm-connection.c:1608
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4035
+msgid "Team"
+msgstr "দল"
-#: ../libnm-glib/nm-device.c:1891
-msgid "PCI"
-msgstr "PCI"
+#: ../clients/tui/nm-editor-utils.c:214
+#, c-format
+msgid "Team connection %d"
+msgstr "দল সংযোগ %d"
-#: ../libnm-glib/nm-device.c:1893
-msgid "USB"
-msgstr "USB"
+#: ../clients/tui/nm-editor-utils.c:222
+#, c-format
+msgid "VLAN connection %d"
+msgstr "VLAN সংযোগ %d"
-#. 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.
+#: ../clients/tui/nm-editor-utils.c:237
+#, c-format
+msgid "VPN connection %d"
+msgstr "VPN সংযোগ %d"
+
+#: ../clients/tui/nmt-device-entry.c:371
+msgid "Select..."
+msgstr "বাছক..."
+
+#: ../clients/tui/nmt-edit-connection-list.c:129
+msgid "Add"
+msgstr "যোগ কৰক"
+
+#: ../clients/tui/nmt-edit-connection-list.c:132
+#: ../clients/tui/nmt-page-ip4.c:175 ../clients/tui/nmt-page-ip6.c:173
+#: ../clients/tui/nmt-page-team-port.c:110 ../clients/tui/nmt-page-team.c:174
+msgid "Edit..."
+msgstr "সমà§à¦ªà¦¾à¦¦à¦¨à¦¾..."
+
+#: ../clients/tui/nmt-edit-connection-list.c:135
+#: ../clients/tui/nmtui-edit.c:473
+msgid "Delete"
+msgstr "মচি পেলাওক"
+
+#: ../clients/tui/nmt-editor.c:81
+#, c-format
+msgid "Could not create editor for connection '%s' of type '%s'."
+msgstr "ধৰণ '%s' ৰ সংযোগ '%s' ৰ বাবে সমà§à¦ªà¦¾à¦¦à¦• সৃষà§à¦Ÿà¦¿ কৰিব পৰা নগল।"
+
+#: ../clients/tui/nmt-editor.c:85
+#, c-format
+msgid "Could not create editor for invalid connection '%s'."
+msgstr "অবৈধ সংযোগ '%s' ৰ বাবে সমà§à¦ªà¦¾à¦¦à¦• সৃষà§à¦Ÿà¦¿ কৰিব পৰা নগল।"
+
+#: ../clients/tui/nmt-editor.c:95
+msgid "Edit Connection"
+msgstr "সংযোগ সমà§à¦ªà¦¾à¦¦à¦¨ কৰক"
+
+#: ../clients/tui/nmt-editor.c:149
+#, c-format
+msgid "Unable to save connection: %s"
+msgstr "সংযোগ সংৰকà§à¦·à¦£ কৰিবলৈ অকà§à¦·à¦®: %s"
+
+#: ../clients/tui/nmt-editor.c:163
+#, c-format
+msgid "Unable to add new connection: %s"
+msgstr "নতà§à¦¨ সংযোগ যোগ কৰিবলৈ অকà§à¦·à¦®: %s"
+
+#: ../clients/tui/nmt-editor.c:242 ../clients/tui/nmt-password-dialog.c:171
+#: ../clients/tui/nmt-route-editor.c:128 ../clients/tui/nmtui-edit.c:192
+#: ../clients/tui/nmtui-edit.c:472 ../clients/tui/nmtui-hostname.c:69
+msgid "Cancel"
+msgstr "বাতিল কৰক"
+
+#: ../clients/tui/nmt-mtu-entry.c:86
+msgid "(default)"
+msgstr "(অবিকলà§à¦ªà¦¿à¦¤)"
+
+#: ../clients/tui/nmt-mtu-entry.c:88 ../clients/tui/nmt-mtu-entry.c:119
+msgid "bytes"
+msgstr "বাইট"
+
+#: ../clients/tui/nmt-page-bond.c:88
+msgid "Round-robin"
+msgstr "Round-robin"
+
+#: ../clients/tui/nmt-page-bond.c:89
+msgid "Active Backup"
+msgstr "সকà§à§°à¦¿à§Ÿ বেকআপ"
+
+#: ../clients/tui/nmt-page-bond.c:90
+msgid "XOR"
+msgstr "XOR"
+
+#: ../clients/tui/nmt-page-bond.c:91
+msgid "Broadcast"
+msgstr "সমà§à¦ªà§à§°à¦šà¦¾à§°"
+
+#: ../clients/tui/nmt-page-bond.c:92
+msgid "802.3ad"
+msgstr "802.3ad"
+
+#: ../clients/tui/nmt-page-bond.c:93
+msgid "Adaptive Transmit Load Balancing (tlb)"
+msgstr "à¦à¦¡à¦¾à¦ªà¦Ÿà¦¿à¦­ টà§à§°à¦¾à¦¨à§à¦¸à¦®à¦¿à¦Ÿ ল'ড বেলেঞà§à¦šà¦¿à¦‚ (tlb)"
+
+#: ../clients/tui/nmt-page-bond.c:94
+msgid "Adaptive Load Balancing (alb)"
+msgstr "à¦à¦¡à¦¾à¦ªà§à¦Ÿà¦¿à¦‚ ল'ড বেলেঞà§à¦šà¦¿à¦‚ (alb)"
+
+#: ../clients/tui/nmt-page-bond.c:100
+msgid "MII (recommended)"
+msgstr "MII (উপদেশিত)"
+
+#: ../clients/tui/nmt-page-bond.c:101
+msgid "ARP"
+msgstr "ARP"
+
+#: ../clients/tui/nmt-page-bond.c:357 ../clients/tui/nmt-page-bridge.c:80
+#: ../clients/tui/nmt-page-team.c:153
+msgid "Slaves"
+msgstr "সà§à¦²à§‡à¦‡à¦­à¦¬à§‹à§°"
+
+#: ../clients/tui/nmt-page-bond.c:369 ../clients/tui/nmt-page-wifi.c:232
+msgid "Mode"
+msgstr "অৱসà§à¦¥à¦¾"
+
+#: ../clients/tui/nmt-page-bond.c:375
+msgid "Primary"
+msgstr "পà§à§°à¦¾à¦¥à¦®à¦¿à¦•"
+
+#: ../clients/tui/nmt-page-bond.c:381
+msgid "Link monitoring"
+msgstr "লিংকৰ পৰà§à¦¯à¦¬à§‡à¦•à§à¦·à¦£"
+
+#: ../clients/tui/nmt-page-bond.c:387 ../clients/tui/nmt-page-bond.c:394
+#: ../clients/tui/nmt-page-bond.c:401 ../clients/tui/nmt-page-bond.c:408
+msgctxt "milliseconds"
+msgid "ms"
+msgstr "ms"
+
+#: ../clients/tui/nmt-page-bond.c:388 ../clients/tui/nmt-page-bond.c:409
+msgid "Monitoring frequency"
+msgstr "কমà§à¦ªà¦¨à¦¾à¦‚ক পৰà§à¦¯à¦¬à§‡à¦•à§à¦·à¦£"
+
+#: ../clients/tui/nmt-page-bond.c:395
+msgid "Link up delay"
+msgstr "লিংক আপ বিলমà§à¦¬"
+
+#: ../clients/tui/nmt-page-bond.c:402
+msgid "Link down delay"
+msgstr "লিংক ডাউন বিলমà§à¦¬"
+
+#: ../clients/tui/nmt-page-bond.c:415
+msgid "ARP targets"
+msgstr "ARP লকà§à¦·à§à¦¯"
+
+#: ../clients/tui/nmt-page-bridge-port.c:38
+msgid "BRIDGE PORT"
+msgstr "বà§à§°à¦¿à¦œ পোৰà§à¦Ÿ"
+
+#: ../clients/tui/nmt-page-bridge-port.c:69
+#: ../clients/tui/nmt-page-bridge.c:106
+msgid "Priority"
+msgstr "পà§à§°à¦¾à¦¥à¦®à¦¿à¦•à¦¤à¦¾"
+
+#: ../clients/tui/nmt-page-bridge-port.c:75
+msgid "Path cost"
+msgstr "পথ মূলà§à¦¯"
+
+#: ../clients/tui/nmt-page-bridge-port.c:77
+msgid "Hairpin mode"
+msgstr "হেয়াৰপিন অৱসà§à¦¥à¦¾"
+
+#: ../clients/tui/nmt-page-bridge.c:90 ../clients/tui/nmt-page-bridge.c:115
+#: ../clients/tui/nmt-page-bridge.c:125 ../clients/tui/nmt-page-bridge.c:135
+msgid "seconds"
+msgstr "ছেকেণà§à¦¡"
+
+#: ../clients/tui/nmt-page-bridge.c:91
+msgid "Aging time"
+msgstr "à¦à¦œà¦¿à¦‚ সময়"
+
+#: ../clients/tui/nmt-page-bridge.c:93
+msgid "Enable STP (Spanning Tree Protocol)"
+msgstr "STP সামৰà§à¦¥à¦¬à¦¾à¦¨ কৰক (সà§à¦ªà§‡à¦¨à¦¿à¦‚ টà§à§°à¦¿ পà§à§°à¦Ÿà§‹à¦•à¦²)"
+
+#: ../clients/tui/nmt-page-bridge.c:116
+msgid "Forward delay"
+msgstr "আগবà§à§‹à§±à¦¾à§° বিলমà§à¦¬"
+
+#: ../clients/tui/nmt-page-bridge.c:126
+msgid "Hello time"
+msgstr "হেলà§à¦²à§‹ সময়"
+
+#: ../clients/tui/nmt-page-bridge.c:136
+msgid "Max age"
+msgstr "সৰà§à¦¬à¦¾à¦§à¦¿à¦• আয়à§"
+
+#. 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)
#.
-#: ../libnm-glib/nm-device.c:1989 ../libnm-glib/nm-device.c:2008
+#: ../clients/tui/nmt-page-dsl.c:67 ../clients/tui/nmt-page-wifi.c:334
+#: ../clients/tui/nmt-secret-agent.c:206 ../clients/tui/nmt-secret-agent.c:301
+msgid "Username"
+msgstr "বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€à¦¨à¦¾à¦®"
+
+#: ../clients/tui/nmt-page-dsl.c:76 ../clients/tui/nmt-page-wifi.c:279
+#: ../clients/tui/nmt-page-wifi.c:310 ../clients/tui/nmt-page-wifi.c:343
+#: ../clients/tui/nmt-secret-agent.c:211 ../clients/tui/nmt-secret-agent.c:248
+#: ../clients/tui/nmt-secret-agent.c:278 ../clients/tui/nmt-secret-agent.c:311
+#: ../clients/tui/nmt-secret-agent.c:380 ../clients/tui/nmt-secret-agent.c:393
+#: ../clients/tui/nmt-secret-agent.c:409
+msgid "Password"
+msgstr "পাছৱৰà§à¦¡"
+
+#: ../clients/tui/nmt-page-dsl.c:79 ../clients/tui/nmt-secret-agent.c:306
+msgid "Service"
+msgstr "সেৱা"
+
+#: ../clients/tui/nmt-page-ethernet.c:41
+msgid "ETHERNET"
+msgstr "ইথাৰনেট"
+
+#: ../clients/tui/nmt-page-ethernet.c:80 ../clients/tui/nmt-page-vlan.c:124
+#: ../clients/tui/nmt-page-wifi.c:366
+msgid "Cloned MAC address"
+msgstr "কà§à¦²à§Œà¦¨à§à¦¡ MAC ঠিকনা"
+
+#: ../clients/tui/nmt-page-infiniband.c:40
+msgid "INFINIBAND"
+msgstr "ইনফিবেণà§à¦¡"
+
+#: ../clients/tui/nmt-page-infiniband.c:51
+msgid "Datagram"
+msgstr "ডাটাগà§à§°à¦¾à¦®"
+
+#: ../clients/tui/nmt-page-infiniband.c:52
+msgid "Connected"
+msgstr "সংযà§à¦•à§à¦¤"
+
+#: ../clients/tui/nmt-page-infiniband.c:90
+msgid "Transport mode"
+msgstr "পৰিৱহন অৱসà§à¦¥à¦¾"
+
+#: ../clients/tui/nmt-page-ip4.c:41
+msgid "Disabled"
+msgstr "অসামৰà§à¦¥à¦¬à¦¾à¦¨"
+
+#: ../clients/tui/nmt-page-ip4.c:42 ../clients/tui/nmt-page-ip6.c:42
+msgid "Automatic"
+msgstr "সà§à¦¬à¦šà¦¾à¦²à¦¿à¦¤"
+
+#: ../clients/tui/nmt-page-ip4.c:43 ../clients/tui/nmt-page-ip6.c:44
+msgid "Link-Local"
+msgstr "সà§à¦¥à¦¾à¦¨à§€à§Ÿ-সংযোগ"
+
+#: ../clients/tui/nmt-page-ip4.c:44 ../clients/tui/nmt-page-ip6.c:45
+msgid "Manual"
+msgstr "হসà§à¦¤à¦šà¦¾à¦²à¦¿à¦¤"
+
+#: ../clients/tui/nmt-page-ip4.c:45
+msgid "Shared"
+msgstr "অংশীদাৰী কৰা"
+
+#: ../clients/tui/nmt-page-ip4.c:54
+msgid "IPv4 CONFIGURATION"
+msgstr "IPv4 সংৰূপ"
+
+#: ../clients/tui/nmt-page-ip4.c:100 ../clients/tui/nmt-page-ip6.c:100
+msgid "(No custom routes)"
+msgstr "(কোনো সà§à¦¬à¦¨à¦¿à§°à§à¦¬à¦¾à¦šà¦¿à¦¤ পথ নাই)"
+
+#: ../clients/tui/nmt-page-ip4.c:103 ../clients/tui/nmt-page-ip6.c:103
#, c-format
-msgctxt "long device name"
-msgid "%s %s"
-msgstr "%s %s"
+msgid "One custom route"
+msgid_plural "%d custom routes"
+msgstr[0] "à¦à¦Ÿà¦¾ সà§à¦¬à¦¨à¦¿à§°à§à¦¬à¦¾à¦šà¦¿à¦¤ পথ"
+msgstr[1] "%d সà§à¦¬à¦¨à¦¿à§°à§à¦¬à¦¾à¦šà¦¿à¦¤ পথ"
+
+#: ../clients/tui/nmt-page-ip4.c:144 ../clients/tui/nmt-page-ip6.c:144
+msgid "Addresses"
+msgstr "ঠিকনাসমূহ"
+
+#: ../clients/tui/nmt-page-ip4.c:150 ../clients/tui/nmt-page-ip6.c:150
+msgid "Gateway"
+msgstr "গেইটৱে"
+
+#: ../clients/tui/nmt-page-ip4.c:156 ../clients/tui/nmt-page-ip6.c:156
+msgid "DNS servers"
+msgstr "DNS চাৰà§à¦­à¦¾à§°à¦¸à¦®à§‚হ"
+
+#: ../clients/tui/nmt-page-ip4.c:162 ../clients/tui/nmt-page-ip6.c:162
+msgid "Search domains"
+msgstr "সনà§à¦§à¦¾à¦¨ ডমেইন"
+
+#: ../clients/tui/nmt-page-ip4.c:177 ../clients/tui/nmt-page-ip6.c:175
+msgid "Routing"
+msgstr "ৰà§à¦Ÿà¦¿à¦‚"
+
+#: ../clients/tui/nmt-page-ip4.c:179 ../clients/tui/nmt-page-ip6.c:177
+msgid "Never use this network for default route"
+msgstr "অবিকলà§à¦ªà¦¿à¦¤ পথৰ বাবে à¦à¦‡ নেটৱৰà§à¦• কেতিয়াও বà§à¦¯à§±à¦¹à¦¾à§° নকৰিব"
+
+#: ../clients/tui/nmt-page-ip4.c:187
+msgid "Require IPv4 addressing for this connection"
+msgstr "à¦à¦‡ সংযোগ সমà§à¦ªà§‚ৰà§à¦£ হবলে IPv ঠিকনাৰ পà§à§°à§Ÿà§‹à¦œà¦¨"
+
+#: ../clients/tui/nmt-page-ip6.c:41
+msgid "Ignore"
+msgstr "উপেকà§à¦·à¦¾ কৰক"
+
+#: ../clients/tui/nmt-page-ip6.c:43
+msgid "Automatic (DHCP-only)"
+msgstr "সà§à¦¬à¦šà¦¾à¦²à¦¿à¦¤, (কেৱল DHCP)"
+
+#: ../clients/tui/nmt-page-ip6.c:54
+msgid "IPv6 CONFIGURATION"
+msgstr "IPv6 সংৰূপ"
+
+#: ../clients/tui/nmt-page-ip6.c:185
+msgid "Require IPv6 addressing for this connection"
+msgstr "à¦à¦‡ সংযোগ সমà§à¦ªà§‚ৰà§à¦£ হবলে IPv6 ঠিকনাৰ পà§à§°à§Ÿà§‹à¦œà¦¨"
+
+#: ../clients/tui/nmt-page-main.c:139
+msgid "Hide"
+msgstr "লà§à¦•à§à§±à¦¾à¦“ক"
+
+#: ../clients/tui/nmt-page-main.c:139
+msgid "Show"
+msgstr "দেখà§à§±à¦¾à¦“ক"
+
+#: ../clients/tui/nmt-page-main.c:187
+msgid "Profile name"
+msgstr "আলেখà§à¦¯à§° নাম"
+
+#: ../clients/tui/nmt-page-main.c:194
+msgid "Device"
+msgstr "ডিভাইচ"
+
+#: ../clients/tui/nmt-page-main.c:243
+msgid "Automatically connect"
+msgstr "সà§à¦¬à¦šà¦¾à¦²à¦¿à¦¤à¦­à¦¾à§±à§‡ সংযোগ কৰক"
+
+#: ../clients/tui/nmt-page-main.c:249
+msgid "Available to all users"
+msgstr "সকলো বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€à§° বাবে উপলবà§à¦§"
+
+#: ../clients/tui/nmt-page-ppp.c:49
+msgid "PPP CONFIGURATION"
+msgstr "PPP সংৰূপ"
+
+#: ../clients/tui/nmt-page-ppp.c:142
+msgid "Allowed authentication methods:"
+msgstr "অনà§à¦®à§‹à¦¦à¦¿à¦¤ পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£ পদà§à¦§à¦¤à¦¿à¦¸à¦®à§‚হ:"
+
+#: ../clients/tui/nmt-page-ppp.c:149
+msgid "EAP"
+msgstr "EAP"
+
+#: ../clients/tui/nmt-page-ppp.c:157
+msgid "PAP"
+msgstr "PAP"
+
+#: ../clients/tui/nmt-page-ppp.c:165
+msgid "CHAP"
+msgstr "CHAP"
+
+#: ../clients/tui/nmt-page-ppp.c:173
+msgid "MSCHAPv2"
+msgstr "MSCHAPv2"
+
+#: ../clients/tui/nmt-page-ppp.c:181
+msgid "MSCHAP"
+msgstr "MSCHAP"
+
+#: ../clients/tui/nmt-page-ppp.c:197
+msgid "Use point-to-point encryption (MPPE)"
+msgstr "পইণà§à¦Ÿ-টà§-পইণà§à¦Ÿ ইনকà§à§°à¦¿à¦ªà¦·à¦£ (MPPE) বà§à¦¯à§±à¦¹à¦¾à§° কৰক"
+
+#: ../clients/tui/nmt-page-ppp.c:209
+msgid "Require 128-bit encryption"
+msgstr "128-bit ইনকà§à§°à¦¿à¦ªà¦·à¦£à§° পà§à§°à§Ÿà§‹à¦œà¦¨"
+
+#: ../clients/tui/nmt-page-ppp.c:219
+msgid "Use stateful MPPE"
+msgstr "অৱসà§à¦¥à¦¾à¦ªà¦¨à§à¦¨ MPPE বà§à¦¯à§±à¦¹à¦¾à§° কৰক"
+
+#: ../clients/tui/nmt-page-ppp.c:231
+msgid "Allow BSD data compression"
+msgstr "BSD তথà§à¦¯ সংকোচনৰ অনà§à¦®à¦¤à¦¿ দিয়ক"
+
+#: ../clients/tui/nmt-page-ppp.c:239
+msgid "Allow Deflate data compression"
+msgstr "Deflate তথà§à¦¯ সংকোচনৰ অনà§à¦®à¦¤à¦¿ দিয়ক"
+
+#: ../clients/tui/nmt-page-ppp.c:247
+msgid "Use TCP header compression"
+msgstr "TCP হেডাৰ সংকোচন বà§à¦¯à§±à¦¹à¦¾à§° কৰক"
+
+#: ../clients/tui/nmt-page-ppp.c:257
+msgid "Send PPP echo packets"
+msgstr "PPP ইকো পেকেটসমূহ পঠাওক"
+
+#: ../clients/tui/nmt-page-team-port.c:45
+msgid "TEAM PORT"
+msgstr "দল পৰà§à¦Ÿ"
+
+#: ../clients/tui/nmt-page-team-port.c:100 ../clients/tui/nmt-page-team.c:164
+msgid "JSON configuration"
+msgstr "JSON সংৰূপ"
+
+#: ../clients/tui/nmt-page-vlan.c:101
+msgid "Parent"
+msgstr "উপধায়ক"
+
+#: ../clients/tui/nmt-page-vlan.c:116
+msgid "VLAN id"
+msgstr "VLAN id"
+
+#: ../clients/tui/nmt-page-wifi.c:57
+msgid "WI-FI"
+msgstr "WI-FI"
+
+#: ../clients/tui/nmt-page-wifi.c:68
+msgctxt "Wi-Fi"
+msgid "Client"
+msgstr "কà§à¦²à¦¾à¦à¦£à§à¦Ÿ"
+
+#: ../clients/tui/nmt-page-wifi.c:69
+msgid "Access Point"
+msgstr "অভিগম বিনà§à¦¦à§"
+
+#: ../clients/tui/nmt-page-wifi.c:70
+msgid "Ad-Hoc Network"
+msgstr "Ad-Hoc নেটৱৰà§à¦•"
+
+#: ../clients/tui/nmt-page-wifi.c:75
+msgctxt "Wi-Fi"
+msgid "Automatic"
+msgstr "সà§à¦¬à¦šà¦¾à¦²à¦¿à¦¤"
+
+#. 802.11a Wi-Fi network
+#: ../clients/tui/nmt-page-wifi.c:77
+msgid "A (5 GHz)"
+msgstr "A (5 GHz)"
+
+#. 802.11b / 802.11g Wi-Fi network
+#: ../clients/tui/nmt-page-wifi.c:79
+msgid "B/G (2.4 GHz)"
+msgstr "B/G (2.4 GHz)"
+
+#: ../clients/tui/nmt-page-wifi.c:84
+msgctxt "Wi-Fi security"
+msgid "None"
+msgstr "কোনো নহয়"
+
+#: ../clients/tui/nmt-page-wifi.c:85
+msgid "WPA & WPA2 Personal"
+msgstr "WPA & WPA2 বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত"
+
+#: ../clients/tui/nmt-page-wifi.c:86
+msgid "WPA & WPA2 Enterprise"
+msgstr "WPA & WPA2 à¦à¦¨à§à¦Ÿà¦¾à§°à¦ªà§à§°à¦¾à¦‡à¦œ"
+
+#: ../clients/tui/nmt-page-wifi.c:87
+msgid "WEP 40/128-bit Key (Hex or ASCII)"
+msgstr "WEP 40/128-bit কি (Hex অথবা ASCII)"
+
+#: ../clients/tui/nmt-page-wifi.c:88
+msgid "WEP 128-bit Passphrase"
+msgstr "WEP 128-বিট পাচফà§à§°à§‡à¦‡à¦›"
+
+#: ../clients/tui/nmt-page-wifi.c:89
+msgid "Dynamic WEP (802.1x)"
+msgstr "চলমান WEP (802.1x)"
+
+#: ../clients/tui/nmt-page-wifi.c:90
+msgid "LEAP"
+msgstr "LEAP"
+
+#: ../clients/tui/nmt-page-wifi.c:95
+msgctxt "WEP key index"
+msgid "1 (Default)"
+msgstr "১ (অবিকলà§à¦ªà¦¿à¦¤)"
+
+#: ../clients/tui/nmt-page-wifi.c:96
+msgctxt "WEP key index"
+msgid "2"
+msgstr "২"
+
+#: ../clients/tui/nmt-page-wifi.c:97
+msgctxt "WEP key index"
+msgid "3"
+msgstr "৩"
+
+#: ../clients/tui/nmt-page-wifi.c:98
+msgctxt "WEP key index"
+msgid "4"
+msgstr "৪"
+
+#: ../clients/tui/nmt-page-wifi.c:103
+msgid "Open System"
+msgstr "খোলা চিসà§à¦Ÿà§‡à¦®"
+
+#: ../clients/tui/nmt-page-wifi.c:104
+msgid "Shared Key"
+msgstr "অংশীদাৰী কৰা কি'"
+
+#: ../clients/tui/nmt-page-wifi.c:258
+msgid "Channel"
+msgstr "চেনেল"
+
+#: ../clients/tui/nmt-page-wifi.c:263
+msgid "Security"
+msgstr "সà§à§°à¦•à§à¦·à¦¾"
+
+#. "wpa-enterprise"
+#. FIXME
+#: ../clients/tui/nmt-page-wifi.c:284
+msgid "(No support for wpa-enterprise yet...)"
+msgstr "(wpa-enterprise ৰ বাবে কোনো সমৰà§à¦¥à¦¨ নাই...)"
+
+#: ../clients/tui/nmt-page-wifi.c:291 ../clients/tui/nmt-secret-agent.c:262
+msgid "Key"
+msgstr "কি'"
+
+#: ../clients/tui/nmt-page-wifi.c:294 ../clients/tui/nmt-page-wifi.c:313
+msgid "WEP index"
+msgstr "WEP সূচী"
+
+#: ../clients/tui/nmt-page-wifi.c:302 ../clients/tui/nmt-page-wifi.c:321
+msgid "Authentication"
+msgstr "পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£"
+
+#. "dynamic-wep"
+#. FIXME
+#: ../clients/tui/nmt-page-wifi.c:327
+msgid "(No support for dynamic-wep yet...)"
+msgstr "(dynamic-wep ৰ বাবে à¦à¦¤à¦¿à§Ÿà¦¾à¦“ কোনো সমৰà§à¦¥à¦¨ নাই...)"
+
+#: ../clients/tui/nmt-password-fields.c:130
+msgid "Ask for this password every time"
+msgstr "পà§à§°à¦¤à¦¿à¦¬à¦¾à§° à¦à¦‡ পাছৱৰà§à¦¡ বিচাৰিব"
+
+#: ../clients/tui/nmt-password-fields.c:131
+msgid "Show password"
+msgstr "পাছৱৰà§à¦¡ দেখà§à§±à¦¾à¦“ক"
+
+#: ../clients/tui/nmt-route-table.c:217
+msgid "Destination"
+msgstr "গনà§à¦¤à¦¬à§à¦¯"
+
+#: ../clients/tui/nmt-route-table.c:217
+msgid "Prefix"
+msgstr "উপসৰà§à¦—"
+
+#: ../clients/tui/nmt-route-table.c:226
+msgid "Next Hop"
+msgstr "পৰৱৰà§à¦¤à§€ বিৰাম"
+
+#: ../clients/tui/nmt-route-table.c:234
+msgid "Metric"
+msgstr "মেটà§à§°à¦¿à¦•"
+
+#: ../clients/tui/nmt-route-table.c:254
+msgid "No custom routes are defined."
+msgstr "কোনো সà§à¦¬à¦¨à¦¿à§°à§à¦¬à¦¾à¦šà¦¿à¦¤ পথ নাই।"
+
+#: ../clients/tui/nmt-secret-agent.c:220
+msgid "Identity"
+msgstr "পৰিচয়"
+
+#: ../clients/tui/nmt-secret-agent.c:225
+msgid "Private key password"
+msgstr "বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কি' পাছৱৰà§à¦¡"
+
+#: ../clients/tui/nmt-secret-agent.c:340
+msgid "Authentication required by wireless network"
+msgstr "বেতাà¦à§° নেটৱৰà§à¦•à§° দà§à¦¬à¦¾à§°à¦¾ পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£à§° পà§à§°à§Ÿà§‹à¦œà¦¨"
+
+#: ../clients/tui/nmt-secret-agent.c:341
+#, c-format
+msgid ""
+"Passwords or encryption keys are required to access the wireless network "
+"'%s'."
+msgstr ""
+"বেতাà¦à§° নেটৱৰà§à¦• '%s' অভিগম কৰিবলে পাছৱৰà§à¦¡à¦¸à¦®à§‚হ অথবা ইনকà§à§°à¦¿à¦ªà¦·à¦£ কি'সমূহৰ পà§à§°à§Ÿà§‹à¦œà¦¨à¥¤"
+
+#: ../clients/tui/nmt-secret-agent.c:349
+msgid "Wired 802.1X authentication"
+msgstr "তাà¦à§°à¦¯à§à¦•à§à¦¤ 802.1X পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£"
+
+#: ../clients/tui/nmt-secret-agent.c:352
+msgid "Network name"
+msgstr "নেটৱৰà§à¦•à§° নাম"
+
+#: ../clients/tui/nmt-secret-agent.c:359
+msgid "DSL authentication"
+msgstr "DSL পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£"
+
+#: ../clients/tui/nmt-secret-agent.c:367
+msgid "PIN code required"
+msgstr "PIN ক'ডৰ পà§à§°à§Ÿà§‹à¦œà¦¨"
+
+#: ../clients/tui/nmt-secret-agent.c:368
+msgid "PIN code is needed for the mobile broadband device"
+msgstr "মবাইল বà§à§°à¦¡à¦¬à§‡à¦£à§à¦¡ সেৱাৰ বাবে PIN ক'ডৰ পà§à§°à§Ÿà§‹à¦œà¦¨"
+
+#: ../clients/tui/nmt-secret-agent.c:370
+msgid "PIN"
+msgstr "PIN"
+
+#: ../clients/tui/nmt-secret-agent.c:376 ../clients/tui/nmt-secret-agent.c:389
+#: ../clients/tui/nmt-secret-agent.c:405
+msgid "Mobile broadband network password"
+msgstr "ম'বাইল বà§à§°'ডবেণà§à¦¡ নেটৱৰà§à¦•à§° পাছৱৰà§à¦¡"
+
+#: ../clients/tui/nmt-secret-agent.c:377 ../clients/tui/nmt-secret-agent.c:390
+#: ../clients/tui/nmt-secret-agent.c:406
+#, c-format
+msgid "A password is required to connect to '%s'."
+msgstr "'%s' লে সংযোগ কৰিবলে à¦à¦Ÿà¦¾ পাছৱৰà§à¦¡à§° পà§à§°à§Ÿà§‹à¦œà¦¨à¥¤"
+
+#: ../clients/tui/nmt-slave-list.c:137
+msgid "Select the type of slave connection you wish to add."
+msgstr "আপà§à¦¨à¦¿ যোগ কৰিব বিচৰা সà§à¦²à§‡à¦‡à¦­ সংযোগৰ ধৰণ বাছক।"
+
+#: ../clients/tui/nmt-widget-list.c:141
+msgid "Add..."
+msgstr "যোগ কৰক..."
+
+#: ../clients/tui/nmt-widget-list.c:204
+msgid "Remove"
+msgstr "আতৰাওক"
+
+#: ../clients/tui/nmtui-connect.c:90
+msgid "Activation failed"
+msgstr "সকà§à§°à¦¿à§Ÿà¦•à§°à¦£ বà§à¦¯à§°à§à¦¥ হল"
+
+#: ../clients/tui/nmtui-connect.c:145
+msgid "Connecting..."
+msgstr "সংযোগ কৰা হৈছে..."
+
+#: ../clients/tui/nmtui-connect.c:174 ../clients/tui/nmtui-connect.c:197
+#, c-format
+msgid "Could not activate connection: %s"
+msgstr "সংযোগ সকà§à§°à¦¿à§Ÿ কৰিব পৰা নগল: %s"
+
+#: ../clients/tui/nmtui-connect.c:257 ../clients/tui/nmtui-connect.c:306
+msgid "Activate"
+msgstr "সকà§à§°à¦¿à§Ÿ কৰক"
+
+#: ../clients/tui/nmtui-connect.c:259
+msgid "Deactivate"
+msgstr "নিষà§à¦•à§à§°à¦¿à§Ÿ কৰক"
+
+#: ../clients/tui/nmtui-connect.c:311 ../clients/tui/nmtui-edit.c:95
+#: ../clients/tui/nmtui.c:112
+msgid "Quit"
+msgstr "পà§à§°à¦¸à§à¦¥à¦¾à¦¨ কৰক"
+
+#: ../clients/tui/nmtui-connect.c:334
+#, c-format
+msgid "No such connection '%s'"
+msgstr "à¦à¦‡ ধৰণৰ কোনো সংযোগ '%s' নাই"
+
+#: ../clients/tui/nmtui-connect.c:336
+msgid "Connection is already active"
+msgstr "সংযোগ ইতিমধà§à¦¯à§‡ সকà§à§°à¦¿à§Ÿ"
+
+#: ../clients/tui/nmtui-edit.c:200
+msgid "Create"
+msgstr "সৃষà§à¦Ÿà¦¿ কৰক"
+
+#: ../clients/tui/nmtui-edit.c:342
+msgid "Select the type of connection you wish to create."
+msgstr "আপà§à¦¨à¦¿ সৃষà§à¦Ÿà¦¿ কৰিব বিচৰা সংযোগৰ ধৰণ বাছক।"
+
+#: ../clients/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 পà§à¦²à¦¾à¦—িন ইনসà§à¦Ÿà¦² নাই।"
+
+#: ../clients/tui/nmtui-edit.c:386 ../clients/tui/nmtui-edit.c:402
+msgid "New Connection"
+msgstr "নতà§à¦¨ সংযোগ"
-#: ../libnm-util/crypto.c:133
+#: ../clients/tui/nmtui-edit.c:441
+#, c-format
+msgid "Unable to delete connection: %s"
+msgstr "সংযোগ মচি পেলাবলৈ অকà§à¦·à¦®: %s"
+
+#: ../clients/tui/nmtui-edit.c:474
+#, c-format
+msgid "Are you sure you want to delete the connection '%s'?"
+msgstr "আপà§à¦¨à¦¿ নিশà§à¦šà¦¿à¦¤à§°à§‚পে '%s' সংযোগ মচিবলে ইচà§à¦›à§à¦• নে?"
+
+#: ../clients/tui/nmtui-edit.c:488
+#, c-format
+msgid "Could not delete connection: %s"
+msgstr "সংযোগ মচিব পৰা নগল: %s"
+
+#: ../clients/tui/nmtui-hostname.c:47
+msgid "Set Hostname"
+msgstr "হসà§à¦Ÿà¦¨à¦¾à¦® সংহতি কৰক"
+
+#: ../clients/tui/nmtui-hostname.c:55
+msgid "Hostname"
+msgstr "হসà§à¦Ÿà¦¨à¦¾à¦®"
+
+#. Translators: this indicates the result. ie, "I have set the hostname to ..."
+#: ../clients/tui/nmtui-hostname.c:118
+#, c-format
+msgid "Set hostname to '%s'"
+msgstr "হসà§à¦Ÿà¦¨à¦¾à¦®à¦• '%s' লৈ সংহতি কৰক"
+
+#: ../clients/tui/nmtui-hostname.c:120
+#, c-format
+msgid "Unable to set hostname: %s"
+msgstr "হসà§à¦Ÿà¦¨à¦¾à¦® সংহতি কৰিবলৈ অকà§à¦·à¦®: %s"
+
+#: ../clients/tui/nmtui.c:57 ../clients/tui/nmtui.c:60
+msgid "connection"
+msgstr "সংযোগ"
+
+#: ../clients/tui/nmtui.c:58
+msgid "Edit a connection"
+msgstr "à¦à¦Ÿà¦¾ সংযোগ সমà§à¦ªà¦¾à¦¦à¦¨ কৰক"
+
+#: ../clients/tui/nmtui.c:61
+msgid "Activate a connection"
+msgstr "à¦à¦Ÿà¦¾ সংযোগ সকà§à§°à¦¿à§Ÿ কৰক"
+
+#: ../clients/tui/nmtui.c:63
+msgid "new hostname"
+msgstr "নতà§à¦¨ হসà§à¦Ÿà¦¨à¦¾à¦®"
+
+#: ../clients/tui/nmtui.c:64
+msgid "Set system hostname"
+msgstr "চিসà§à¦Ÿà§‡à¦®à§° হসà§à¦Ÿà¦¨à¦¾à¦® সংহতি কৰক"
+
+#: ../clients/tui/nmtui.c:87
+msgid "NetworkManager TUI"
+msgstr "NetworkManager TUI"
+
+#: ../clients/tui/nmtui.c:95
+msgid "Please select an option"
+msgstr "অনà§à¦—à§à§°à¦¹ কৰি à¦à¦Ÿà¦¾ বিকলà§à¦ª বাছক"
+
+#: ../clients/tui/nmtui.c:147
+msgid "Usage"
+msgstr "বà§à¦¯à§±à¦¹à¦¾à§°"
+
+#: ../clients/tui/nmtui.c:228
+msgid "Could not parse arguments"
+msgstr "তৰà§à¦•à¦¸à¦®à§‚হ বিশà§à¦²à§‡à¦·à¦£ কৰিব পৰা নগল"
+
+#: ../clients/tui/nmtui.c:238 ../clients/tui/nmtui.c:249
+#, c-format
+msgid "Could not contact NetworkManager: %s.\n"
+msgstr "NetworkManager ক সংযোগ কৰিব পৰা নগল: %s।\n"
+
+#: ../clients/tui/nmtui.c:243
+msgid "NetworkManager is not running."
+msgstr "NetworkManager চলি থকা নাই।"
+
+#: ../libnm-core/crypto.c:135 ../libnm-util/crypto.c:133
#, c-format
msgid "PEM key file had no end tag '%s'."
msgstr "PEM কি' ফাইলৰ কোনো কোনো অনà§à¦¤ টেগ '%s' নাই।"
-#: ../libnm-util/crypto.c:146
+#: ../libnm-core/crypto.c:148 ../libnm-util/crypto.c:146
#, c-format
msgid "Doesn't look like a PEM private key file."
msgstr "দেখাত à¦à¦Ÿà¦¾ PEM বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কি' ফাইল যেন নালাগে।"
-#: ../libnm-util/crypto.c:163
+#: ../libnm-core/crypto.c:165 ../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:171
+#: ../libnm-core/crypto.c:173 ../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:181
+#: ../libnm-core/crypto.c:183 ../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:192
+#: ../libnm-core/crypto.c:194 ../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:199
+#: ../libnm-core/crypto.c:201 ../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:212
+#: ../libnm-core/crypto.c:216 ../libnm-util/crypto.c:214
#, c-format
msgid "Malformed PEM file: unknown private key cipher '%s'."
msgstr "কà§à¦·à¦¤à¦¿à¦—à§à§°à¦¸à§à¦¥ PEM ফাইল: অজà§à¦žà¦¾à¦¤ বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কি' চিফাৰ '%s'।"
-#: ../libnm-util/crypto.c:231
+#: ../libnm-core/crypto.c:235 ../libnm-util/crypto.c:233
#, c-format
msgid "Could not decode private key."
msgstr "বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কি' ডিক'ড কৰিব পৰা নগল।"
-#: ../libnm-util/crypto.c:283
+#: ../libnm-core/crypto.c:288 ../libnm-util/crypto.c:285
msgid "Failed to find expected PKCS#8 start tag."
msgstr "পà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤ PKCS#8 আৰমà§à¦­à¦£à¦¿ টেগ সনà§à¦§à¦¾à¦¨ কৰিবলে বà§à¦¯à§°à§à¦¥à¥¤"
-#: ../libnm-util/crypto.c:291
+#: ../libnm-core/crypto.c:296 ../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:310
+#: ../libnm-core/crypto.c:315 ../libnm-util/crypto.c:312
msgid "Failed to decode PKCS#8 private key."
msgstr "PKCS#8 বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কি' ডি'কড কৰিবলে বà§à¦¯à§°à§à¦¥à¥¤"
-#: ../libnm-util/crypto.c:352
+#: ../libnm-core/crypto.c:357 ../libnm-util/crypto.c:354
#, c-format
msgid "IV must be an even number of bytes in length."
msgstr "IV দৈৰà§à¦˜à§à¦¯à¦¤ বাইটসমূহৰ à¦à¦Ÿà¦¾ ধনাতà§à¦®à¦• সংখà§à¦¯à¦¾ হব লাগিব।"
-#: ../libnm-util/crypto.c:366
+#: ../libnm-core/crypto.c:371 ../libnm-util/crypto.c:368
#, c-format
msgid "IV contains non-hexadecimal digits."
msgstr "IV ঠনন-হেকà§à¦¸à¦¾à¦¡à§‡à¦šà¦¿à¦®à§‡à¦² ডিজিটসমূহ অনà§à¦¤à§°à§à¦­à§à¦•à§à¦¤ কৰে।"
-#: ../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
+#: ../libnm-core/crypto.c:411 ../libnm-core/crypto_gnutls.c:151
+#: ../libnm-core/crypto_gnutls.c:269 ../libnm-core/crypto_nss.c:171
+#: ../libnm-core/crypto_nss.c:333 ../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:511
+#: ../libnm-core/crypto.c:523 ../libnm-util/crypto.c:518
#, c-format
msgid "Unable to determine private key type."
msgstr "বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কি ধৰণ নিৰà§à¦§à¦¾à§°à¦£ কৰিবলে অকà§à¦·à¦®à¥¤"
-#: ../libnm-util/crypto.c:566
+#: ../libnm-core/crypto.c:580 ../libnm-util/crypto.c:573
#, c-format
msgid "PEM certificate had no start tag '%s'."
msgstr "PEM পà§à§°à¦®à¦¾à¦£à¦ªà¦¤à§à§°à§° কোনো আৰমà§à¦­à¦£à¦¿ টেগ '%s' নাই।"
-#: ../libnm-util/crypto.c:575
+#: ../libnm-core/crypto.c:589 ../libnm-util/crypto.c:582
#, c-format
msgid "PEM certificate had no end tag '%s'."
msgstr "PEM পà§à§°à¦®à¦¾à¦£à¦ªà¦¤à§à§°à§° কোনো অনà§à¦¤ টেগ '%s' নাই।"
-#: ../libnm-util/crypto.c:593
+#: ../libnm-core/crypto.c:607 ../libnm-util/crypto.c:600
#, c-format
msgid "Failed to decode certificate."
msgstr "পà§à§°à¦®à¦¾à¦£à¦ªà¦¤à§à§° ডিক'ড কৰিবলে বà§à¦¯à§°à§à¦¥à¥¤"
-#: ../libnm-util/crypto_gnutls.c:50
+#: ../libnm-core/crypto_gnutls.c:50 ../libnm-util/crypto_gnutls.c:50
msgid "Failed to initialize the crypto engine."
msgstr "কà§à§°à¦¿à¦ªà§à¦Ÿà§‹ ইঞà§à¦œà¦¿à¦¨ আৰমà§à¦­ কৰিবলে বà§à¦¯à§°à§à¦¥à¥¤"
-#: ../libnm-util/crypto_gnutls.c:92
+#: ../libnm-core/crypto_gnutls.c:92 ../libnm-util/crypto_gnutls.c:92
#, c-format
msgid "Failed to initialize the MD5 engine: %s / %s."
msgstr "MD5 ইঞà§à¦œà¦¿à¦¨ আৰমà§à¦­ কৰিবলে বà§à¦¯à§°à§à¦¥: %s / %s।"
-#: ../libnm-util/crypto_gnutls.c:155
+#: ../libnm-core/crypto_gnutls.c:159 ../libnm-util/crypto_gnutls.c:158
#, c-format
msgid "Invalid IV length (must be at least %zd)."
msgstr "অবৈধ IV দৈৰà§à¦˜à§à¦¯ (অনà§à¦¤à¦¤ %zd হব লাগিব)।"
-#: ../libnm-util/crypto_gnutls.c:166
+#: ../libnm-core/crypto_gnutls.c:170 ../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:175
+#: ../libnm-core/crypto_gnutls.c:179 ../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:184
+#: ../libnm-core/crypto_gnutls.c:188 ../libnm-util/crypto_gnutls.c:187
#, c-format
msgid "Failed to set IV for decryption: %s / %s."
msgstr "ডিকà§à§°à¦¿à¦ªà¦·à¦£à§° বাবে IV সংহতি কৰিবলে বà§à¦¯à§°à§à¦¥: %s / %s।"
-#: ../libnm-util/crypto_gnutls.c:193
+#: ../libnm-core/crypto_gnutls.c:197 ../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:203 ../libnm-util/crypto_nss.c:257
+#: ../libnm-core/crypto_gnutls.c:207 ../libnm-core/crypto_nss.c:261
+#: ../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:214 ../libnm-util/crypto_nss.c:268
+#: ../libnm-core/crypto_gnutls.c:218 ../libnm-core/crypto_nss.c:272
+#: ../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:281
+#: ../libnm-core/crypto_gnutls.c:291 ../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:290
+#: ../libnm-core/crypto_gnutls.c:300 ../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:300
+#: ../libnm-core/crypto_gnutls.c:310 ../libnm-util/crypto_gnutls.c:308
#, c-format
msgid "Failed to set IV for encryption: %s / %s."
msgstr "ইনকà§à§°à¦¿à¦ªà¦·à¦£à§° বাবে IV সংহতি কৰিবলে বà§à¦¯à§°à§à¦¥: %s / %s।"
-#: ../libnm-util/crypto_gnutls.c:309
+#: ../libnm-core/crypto_gnutls.c:319 ../libnm-util/crypto_gnutls.c:317
#, c-format
msgid "Failed to encrypt the data: %s / %s."
msgstr "তথà§à¦¯ ইনকà§à§°à¦¿à¦ªà§à¦Ÿ কৰিবলে বà§à¦¯à§°à§à¦¥: %s / %s।"
-#: ../libnm-util/crypto_gnutls.c:349
+#: ../libnm-core/crypto_gnutls.c:359 ../libnm-util/crypto_gnutls.c:357
#, c-format
msgid "Error initializing certificate data: %s"
msgstr "পà§à§°à¦®à¦¾à¦£à¦ªà¦¤à§à§° তথà§à¦¯ আৰমà§à¦­ কৰিবলে তà§à§°à§à¦Ÿà¦¿: %s"
-#: ../libnm-util/crypto_gnutls.c:371
+#: ../libnm-core/crypto_gnutls.c:381 ../libnm-util/crypto_gnutls.c:379
#, c-format
msgid "Couldn't decode certificate: %s"
msgstr "পà§à§°à¦®à¦¾à¦£à¦ªà¦¤à§à§° ডি'কড কৰিব পৰা নগল: %s"
-#: ../libnm-util/crypto_gnutls.c:395
+#: ../libnm-core/crypto_gnutls.c:406 ../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:408
+#: ../libnm-core/crypto_gnutls.c:419 ../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:420
+#: ../libnm-core/crypto_gnutls.c:431 ../libnm-util/crypto_gnutls.c:428
#, c-format
msgid "Couldn't verify PKCS#12 file: %s"
-msgstr "PKCS#12 ফাইল সতা সতà§à¦¯ নিৰূপণ কৰিব পৰা নগল: %s"
+msgstr "PKCS#12 ফাইল সতà§à¦¯à¦¾à¦ªà¦¨ কৰিব পৰা নগল: %s"
-#: ../libnm-util/crypto_gnutls.c:448
+#: ../libnm-core/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:471
+#: ../libnm-core/crypto_gnutls.c:483 ../libnm-util/crypto_gnutls.c:479
#, c-format
msgid "Couldn't decode PKCS#8 file: %s"
msgstr "PKCS#8 ফাইল ডি'কড কৰিব পৰা নগল: %s"
-#: ../libnm-util/crypto_nss.c:56
+#: ../libnm-core/crypto_nss.c:56 ../libnm-util/crypto_nss.c:56
#, c-format
msgid "Failed to initialize the crypto engine: %d."
msgstr "কà§à§°à¦¿à¦ªà§à¦Ÿà§‹ ইঞà§à¦œà¦¿à¦¨ আৰমà§à¦­ কৰিবলে বà§à¦¯à§°à§à¦¥: %d।"
-#: ../libnm-util/crypto_nss.c:107
+#: ../libnm-core/crypto_nss.c:107 ../libnm-util/crypto_nss.c:107
#, c-format
msgid "Failed to initialize the MD5 context: %d."
msgstr "MD5 পৰিপà§à§°à§‡à¦•à§à¦·à¦¤à¦¿à¦¤ আৰমà§à¦­ কৰিবলে বà§à¦¯à§°à§à¦¥: %d।"
-#: ../libnm-util/crypto_nss.c:175
+#: ../libnm-core/crypto_nss.c:179 ../libnm-util/crypto_nss.c:178
#, c-format
msgid "Invalid IV length (must be at least %d)."
msgstr "অবৈধ IV দৈৰà§à¦˜à§à¦¯ (অনà§à¦¤à¦¤ %d হব লাগিব)।"
-#: ../libnm-util/crypto_nss.c:186
+#: ../libnm-core/crypto_nss.c:190 ../libnm-util/crypto_nss.c:189
#, c-format
msgid "Failed to initialize the decryption cipher slot."
msgstr "ডিকà§à§°à¦¿à¦ªà¦·à¦£ চিফাৰ সà§à¦²à¦Ÿ আৰমà§à¦­ কৰিবলে বà§à¦¯à§°à§à¦¥à¥¤"
-#: ../libnm-util/crypto_nss.c:196
+#: ../libnm-core/crypto_nss.c:200 ../libnm-util/crypto_nss.c:199
#, c-format
msgid "Failed to set symmetric key for decryption."
msgstr "ডিকà§à§°à¦¿à¦ªà¦·à¦£à§° বাবে সমমিতি কি' সংহতি কৰিবলে বà§à¦¯à§°à§à¦¥à¥¤"
-#: ../libnm-util/crypto_nss.c:206
+#: ../libnm-core/crypto_nss.c:210 ../libnm-util/crypto_nss.c:209
#, c-format
msgid "Failed to set IV for decryption."
msgstr "ডিকà§à§°à¦¿à¦ªà¦·à¦£à§° বাবে IV সংহতি কৰিবলে বà§à¦¯à§°à§à¦¥à¥¤"
-#: ../libnm-util/crypto_nss.c:214
+#: ../libnm-core/crypto_nss.c:218 ../libnm-util/crypto_nss.c:217
#, c-format
msgid "Failed to initialize the decryption context."
msgstr "ডিকà§à§°à¦¿à¦ªà¦·à¦£ পৰিপà§à§°à§‡à¦•à§à¦·à¦¤à¦¿à¦¤ আৰমà§à¦­ কৰিবলে বà§à¦¯à§°à§à¦¥à¥¤"
-#: ../libnm-util/crypto_nss.c:227
+#: ../libnm-core/crypto_nss.c:231 ../libnm-util/crypto_nss.c:230
#, c-format
msgid "Failed to decrypt the private key: %d."
msgstr "বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কি' ডিকà§à§°à¦¿à¦ªà§à¦Ÿ কৰিবলে বà§à¦¯à§°à§à¦¥: %d।"
-#: ../libnm-util/crypto_nss.c:235
+#: ../libnm-core/crypto_nss.c:239 ../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:246
+#: ../libnm-core/crypto_nss.c:250 ../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:348
+#: ../libnm-core/crypto_nss.c:355 ../libnm-util/crypto_nss.c:353
#, c-format
msgid "Failed to initialize the encryption cipher slot."
msgstr "ইনকà§à§°à¦¿à¦ªà¦·à¦£ চিফাৰ সà§à¦²à¦Ÿ আৰমà§à¦­ কৰিবলে বà§à¦¯à§°à§à¦¥à¥¤"
-#: ../libnm-util/crypto_nss.c:356
+#: ../libnm-core/crypto_nss.c:363 ../libnm-util/crypto_nss.c:361
#, c-format
msgid "Failed to set symmetric key for encryption."
msgstr "ইনকà§à§°à¦¿à¦ªà¦·à¦£à§° বাবে সমমিতি কি' সংহতি কৰিবলে বà§à¦¯à§°à§à¦¥à¥¤"
-#: ../libnm-util/crypto_nss.c:364
+#: ../libnm-core/crypto_nss.c:371 ../libnm-util/crypto_nss.c:369
#, c-format
msgid "Failed to set IV for encryption."
msgstr "ইনকà§à§°à¦¿à¦ªà¦·à¦£à§° বাবে IV সংহতি কৰিবলে বà§à¦¯à§°à§à¦¥à¥¤"
-#: ../libnm-util/crypto_nss.c:372
+#: ../libnm-core/crypto_nss.c:379 ../libnm-util/crypto_nss.c:377
#, c-format
msgid "Failed to initialize the encryption context."
msgstr "ইনকà§à§°à¦¿à¦ªà¦·à¦£ পৰিপà§à§°à§‡à¦•à§à¦·à¦¤à¦¿à¦¤ আৰমà§à¦­ কৰিবলে বà§à¦¯à§°à§à¦¥à¥¤"
-#: ../libnm-util/crypto_nss.c:380
+#: ../libnm-core/crypto_nss.c:387 ../libnm-util/crypto_nss.c:385
#, c-format
msgid "Failed to encrypt: %d."
msgstr "ইনকà§à§°à¦¿à¦ªà§à¦Ÿ কৰিবলে বà§à¦¯à§°à§à¦¥: %d।"
-#: ../libnm-util/crypto_nss.c:388
+#: ../libnm-core/crypto_nss.c:395 ../libnm-util/crypto_nss.c:393
#, c-format
msgid "Unexpected amount of data after encrypting."
msgstr "ইনকà§à§°à¦¿à¦ªà§à¦Ÿ কৰাৰ পিছত তথà§à¦¯à§° অপà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤ পৰিমাণ।"
-#: ../libnm-util/crypto_nss.c:431
+#: ../libnm-core/crypto_nss.c:435 ../libnm-util/crypto_nss.c:433
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "পà§à§°à¦®à¦¾à¦£à¦ªà¦¤à§à§° ডিক'ড কৰিব পৰা নগল: %d"
-#: ../libnm-util/crypto_nss.c:466
+#: ../libnm-core/crypto_nss.c:471 ../libnm-util/crypto_nss.c:468
#, c-format
msgid "Couldn't convert password to UCS2: %d"
-msgstr "পাছৱাৰà§à¦¡à¦• UCS2 লে পৰিবৰà§à¦¤à¦¨ কৰিব পৰা নগল: %d"
+msgstr "পাছৱৰà§à¦¡à¦• UCS2 লে পৰিবৰà§à¦¤à¦¨ কৰিব পৰা নগল: %d"
-#: ../libnm-util/crypto_nss.c:494
+#: ../libnm-core/crypto_nss.c:499 ../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:503
+#: ../libnm-core/crypto_nss.c:508 ../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:512
+#: ../libnm-core/crypto_nss.c:517 ../libnm-util/crypto_nss.c:514
#, c-format
msgid "Couldn't verify PKCS#12 file: %d"
-msgstr "PKCS#12 ফাইল সতা সতà§à¦¯ নিৰূপণ কৰিব পৰা নগল: %d"
+msgstr "PKCS#12 ফাইল সতà§à¦¯à¦¾à¦ªà¦¨ কৰিব পৰা নগল: %d"
-#: ../libnm-util/crypto_nss.c:556
+#: ../libnm-core/crypto_nss.c:562 ../libnm-util/crypto_nss.c:558
msgid "Could not generate random data."
msgstr "যাদৃচà§à¦›à¦¿à¦• তথà§à¦¯ সৃজন কৰিব পৰা নগল।"
-#: ../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
+#: ../libnm-core/nm-connection.c:892
+msgid "Unexpected failure to verify the connection"
+msgstr "সংযোগ সতà§à¦¯à¦¾à¦ªà¦¨ কৰিবলৈ অপà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤ বà§à¦¯à§°à§à¦¥à¦¤à¦¾"
+
+#: ../libnm-core/nm-connection.c:923
+msgid "Unexpected failure to normalize the connection"
+msgstr "সংযোগ সà§à¦¬à¦¾à¦­à¦¾à§±à¦¿à¦• কৰিবলৈ অপà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤ বà§à¦¯à§°à§à¦¥à¦¤à¦¾"
+
+#: ../libnm-core/nm-connection.c:1016
+msgid ""
+"Update secrets expects a full connection, instead only a setting is provided."
+msgstr ""
+"গোপন আপডেইট কৰায় à¦à¦Ÿà¦¾ সমà§à¦ªà§‚ৰà§à¦£ সংযোগ আশা কৰে, কিনà§à¦¤à§ কেৱল à¦à¦Ÿà¦¾ সংহতি পà§à§°à¦¦à¦¾à¦¨ কৰা "
+"হৈছে।"
+
+#: ../libnm-core/nm-setting-8021x.c:594 ../libnm-util/nm-setting-8021x.c:596
+msgid "CA certificate must be in X.509 format"
+msgstr "CA পà§à§°à¦®à¦¾à¦£à¦ªà¦¤à§à§° X.509 বিনà§à¦¯à¦¾à¦¸à¦¤ হব লাগিব"
+
+#: ../libnm-core/nm-setting-8021x.c:909 ../libnm-core/nm-setting-8021x.c:1173
+#: ../libnm-core/nm-setting-8021x.c:1493 ../libnm-util/nm-setting-8021x.c:914
+#: ../libnm-util/nm-setting-8021x.c:1177 ../libnm-util/nm-setting-8021x.c:1500
+msgid "invalid certificate format"
+msgstr "অবৈধ পà§à§°à¦®à¦¾à¦£à¦ªà¦¤à§à§° বিনà§à¦¯à¦¾à¦¸"
+
+#: ../libnm-core/nm-setting-8021x.c:1775 ../libnm-util/nm-setting-8021x.c:1769
+msgid "invalid private key"
+msgstr "অবৈধ বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কি"
+
+#: ../libnm-core/nm-setting-8021x.c:2085 ../libnm-util/nm-setting-8021x.c:2080
+msgid "invalid phase2 private key"
+msgstr "অবৈধ phase2 বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কি"
+
+#: ../libnm-core/nm-setting-8021x.c:2287 ../libnm-core/nm-setting-8021x.c:2304
+#: ../libnm-core/nm-setting-8021x.c:2334 ../libnm-core/nm-setting-8021x.c:2351
+#: ../libnm-core/nm-setting-8021x.c:2392 ../libnm-core/nm-setting-8021x.c:2404
+#: ../libnm-core/nm-setting-8021x.c:2422 ../libnm-core/nm-setting-8021x.c:2434
+#: ../libnm-core/nm-setting-8021x.c:2458 ../libnm-core/nm-setting-8021x.c:2640
+#: ../libnm-core/nm-setting-adsl.c:205
+#: ../libnm-core/nm-setting-bluetooth.c:136
+#: ../libnm-core/nm-setting-bluetooth.c:154
+#: ../libnm-core/nm-setting-cdma.c:158
+#: ../libnm-core/nm-setting-connection.c:761
+#: ../libnm-core/nm-setting-connection.c:777
+#: ../libnm-core/nm-setting-connection.c:807
+#: ../libnm-core/nm-setting-ip4-config.c:897
+#: ../libnm-core/nm-setting-ip6-config.c:816
+#: ../libnm-core/nm-setting-ip6-config.c:880
+#: ../libnm-core/nm-setting-olpc-mesh.c:116
+#: ../libnm-core/nm-setting-pppoe.c:159 ../libnm-core/nm-setting-vpn.c:396
+#: ../libnm-core/nm-setting-wimax.c:133
+#: ../libnm-core/nm-setting-wireless-security.c:879
+#: ../libnm-core/nm-setting-wireless.c:710 ../libnm-core/nm-setting.c:1735
+#: ../libnm-util/nm-setting.c:1279 ../libnm-util/nm-setting.c:1298
+#: ../libnm-util/nm-setting.c:1316 ../libnm-util/nm-setting-8021x.c:2282
+#: ../libnm-util/nm-setting-8021x.c:2299 ../libnm-util/nm-setting-8021x.c:2340
+#: ../libnm-util/nm-setting-8021x.c:2357 ../libnm-util/nm-setting-8021x.c:2409
+#: ../libnm-util/nm-setting-8021x.c:2421 ../libnm-util/nm-setting-8021x.c:2439
+#: ../libnm-util/nm-setting-8021x.c:2451 ../libnm-util/nm-setting-8021x.c:2475
+#: ../libnm-util/nm-setting-8021x.c:2653 ../libnm-util/nm-setting-adsl.c:208
+#: ../libnm-util/nm-setting-bluetooth.c:140
+#: ../libnm-util/nm-setting-bluetooth.c:158
+#: ../libnm-util/nm-setting-cdma.c:161
+#: ../libnm-util/nm-setting-connection.c:767
+#: ../libnm-util/nm-setting-connection.c:783
+#: ../libnm-util/nm-setting-connection.c:844
+#: ../libnm-util/nm-setting-ip4-config.c:828
+#: ../libnm-util/nm-setting-ip6-config.c:809
+#: ../libnm-util/nm-setting-ip6-config.c:873
+#: ../libnm-util/nm-setting-olpc-mesh.c:122
+#: ../libnm-util/nm-setting-pppoe.c:162 ../libnm-util/nm-setting-vpn.c:402
+#: ../libnm-util/nm-setting-wimax.c:137
+#: ../libnm-util/nm-setting-wireless-security.c:891
+#: ../libnm-util/nm-setting-wireless.c:750
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
+msgstr "বৈশিষà§à¦Ÿà§à¦¯ সনà§à¦§à¦¾à¦¨à¦¹à§€à¦¨"
+
+#: ../libnm-core/nm-setting-8021x.c:2294 ../libnm-core/nm-setting-8021x.c:2311
+#: ../libnm-core/nm-setting-8021x.c:2341 ../libnm-core/nm-setting-8021x.c:2358
+#: ../libnm-core/nm-setting-8021x.c:2398 ../libnm-core/nm-setting-8021x.c:2410
+#: ../libnm-core/nm-setting-8021x.c:2428 ../libnm-core/nm-setting-8021x.c:2440
+#: ../libnm-core/nm-setting-8021x.c:2465 ../libnm-core/nm-setting-adsl.c:212
+#: ../libnm-core/nm-setting-adsl.c:221 ../libnm-core/nm-setting-cdma.c:174
+#: ../libnm-core/nm-setting-cdma.c:183
+#: ../libnm-core/nm-setting-connection.c:768
+#: ../libnm-core/nm-setting-connection.c:818
+#: ../libnm-core/nm-setting-gsm.c:242 ../libnm-core/nm-setting-gsm.c:299
+#: ../libnm-core/nm-setting-gsm.c:308
+#: ../libnm-core/nm-setting-ip4-config.c:962
+#: ../libnm-core/nm-setting-ip4-config.c:971
+#: ../libnm-core/nm-setting-pppoe.c:166 ../libnm-core/nm-setting-pppoe.c:175
+#: ../libnm-core/nm-setting-vpn.c:405 ../libnm-core/nm-setting-vpn.c:415
+#: ../libnm-core/nm-setting-wimax.c:142
+#: ../libnm-core/nm-setting-wireless-security.c:909
+#: ../libnm-core/nm-setting-wireless-security.c:917
+#: ../libnm-core/nm-setting-wireless-security.c:941
+#: ../libnm-util/nm-setting-8021x.c:2289 ../libnm-util/nm-setting-8021x.c:2306
+#: ../libnm-util/nm-setting-8021x.c:2347 ../libnm-util/nm-setting-8021x.c:2364
+#: ../libnm-util/nm-setting-8021x.c:2415 ../libnm-util/nm-setting-8021x.c:2427
+#: ../libnm-util/nm-setting-8021x.c:2445 ../libnm-util/nm-setting-8021x.c:2457
+#: ../libnm-util/nm-setting-8021x.c:2482 ../libnm-util/nm-setting-adsl.c:215
+#: ../libnm-util/nm-setting-adsl.c:224 ../libnm-util/nm-setting-cdma.c:177
+#: ../libnm-util/nm-setting-cdma.c:186
+#: ../libnm-util/nm-setting-connection.c:774
+#: ../libnm-util/nm-setting-connection.c:851
+#: ../libnm-util/nm-setting-gsm.c:281 ../libnm-util/nm-setting-gsm.c:338
+#: ../libnm-util/nm-setting-gsm.c:347
+#: ../libnm-util/nm-setting-ip4-config.c:893
+#: ../libnm-util/nm-setting-ip4-config.c:902
+#: ../libnm-util/nm-setting-pppoe.c:169 ../libnm-util/nm-setting-pppoe.c:178
+#: ../libnm-util/nm-setting-vpn.c:411 ../libnm-util/nm-setting-vpn.c:421
#: ../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
+#: ../libnm-util/nm-setting-wireless-security.c:921
+#: ../libnm-util/nm-setting-wireless-security.c:929
+#: ../libnm-util/nm-setting-wireless-security.c:953
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
+#: ../libnm-core/nm-setting-8021x.c:2323 ../libnm-core/nm-setting-8021x.c:2370
+#: ../libnm-util/nm-setting-8021x.c:2317 ../libnm-util/nm-setting-8021x.c:2329
+#: ../libnm-util/nm-setting-8021x.c:2375 ../libnm-util/nm-setting-8021x.c:2387
#, 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-core/nm-setting-8021x.c:2615 ../libnm-core/nm-setting-8021x.c:2649
+#: ../libnm-core/nm-setting-bluetooth.c:145
+#: ../libnm-core/nm-setting-infiniband.c:208
+#: ../libnm-core/nm-setting-infiniband.c:223
+#: ../libnm-core/nm-setting-ip4-config.c:953
+#: ../libnm-core/nm-setting-ip6-config.c:871
+#: ../libnm-core/nm-setting-olpc-mesh.c:145
+#: ../libnm-core/nm-setting-wimax.c:151 ../libnm-core/nm-setting-wired.c:636
+#: ../libnm-core/nm-setting-wired.c:646
+#: ../libnm-core/nm-setting-wireless-security.c:960
+#: ../libnm-core/nm-setting-wireless-security.c:969
+#: ../libnm-core/nm-setting-wireless-security.c:977
+#: ../libnm-core/nm-setting-wireless-security.c:985
+#: ../libnm-core/nm-setting-wireless-security.c:993
+#: ../libnm-core/nm-setting-wireless-security.c:1002
+#: ../libnm-core/nm-setting-wireless-security.c:1011
+#: ../libnm-core/nm-setting-wireless-security.c:1020
+#: ../libnm-core/nm-setting-wireless-security.c:1056
+#: ../libnm-core/nm-setting-wireless-security.c:1066
+#: ../libnm-core/nm-setting-wireless.c:771
+#: ../libnm-core/nm-setting-wireless.c:780
+#: ../libnm-core/nm-setting-wireless.c:789 ../libnm-util/nm-setting.c:1289
+#: ../libnm-util/nm-setting.c:1307 ../libnm-util/nm-setting.c:1326
+#: ../libnm-util/nm-setting-8021x.c:2628 ../libnm-util/nm-setting-8021x.c:2662
+#: ../libnm-util/nm-setting-bluetooth.c:149
+#: ../libnm-util/nm-setting-infiniband.c:204
+#: ../libnm-util/nm-setting-infiniband.c:220
+#: ../libnm-util/nm-setting-ip4-config.c:884
+#: ../libnm-util/nm-setting-ip6-config.c:864
+#: ../libnm-util/nm-setting-olpc-mesh.c:150
+#: ../libnm-util/nm-setting-wimax.c:155 ../libnm-util/nm-setting-wired.c:660
+#: ../libnm-util/nm-setting-wired.c:669
#: ../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
+#: ../libnm-util/nm-setting-wireless-security.c:981
+#: ../libnm-util/nm-setting-wireless-security.c:989
+#: ../libnm-util/nm-setting-wireless-security.c:997
+#: ../libnm-util/nm-setting-wireless-security.c:1005
+#: ../libnm-util/nm-setting-wireless-security.c:1014
+#: ../libnm-util/nm-setting-wireless-security.c:1023
+#: ../libnm-util/nm-setting-wireless-security.c:1032
+#: ../libnm-util/nm-setting-wireless-security.c:1068
+#: ../libnm-util/nm-setting-wireless-security.c:1078
+#: ../libnm-util/nm-setting-wireless.c:810
+#: ../libnm-util/nm-setting-wireless.c:819
+#: ../libnm-util/nm-setting-wireless.c:828
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
+#: ../libnm-core/nm-setting-8021x.c:2674 ../libnm-core/nm-setting-8021x.c:2684
+#: ../libnm-core/nm-setting-8021x.c:2694 ../libnm-core/nm-setting-8021x.c:2704
+#: ../libnm-core/nm-setting-8021x.c:2714 ../libnm-core/nm-setting-adsl.c:233
+#: ../libnm-core/nm-setting-adsl.c:245
+#: ../libnm-core/nm-setting-bluetooth.c:162
+#: ../libnm-core/nm-setting-wireless-security.c:888
+#: ../libnm-util/nm-setting-8021x.c:2687 ../libnm-util/nm-setting-8021x.c:2697
+#: ../libnm-util/nm-setting-8021x.c:2707 ../libnm-util/nm-setting-8021x.c:2717
+#: ../libnm-util/nm-setting-8021x.c:2727 ../libnm-util/nm-setting-adsl.c:236
+#: ../libnm-util/nm-setting-adsl.c:248
+#: ../libnm-util/nm-setting-bluetooth.c:166
+#: ../libnm-util/nm-setting-wireless-security.c:900
#, c-format
msgid "'%s' is not a valid value for the property"
msgstr "'%s' বৈশিষà§à¦Ÿà§à¦¯à§° বাবে à¦à¦Ÿà¦¾ বৈধ মান নহয়"
-#: ../libnm-util/nm-setting-bluetooth.c:188
+#: ../libnm-core/nm-setting-bluetooth.c:180
+#: ../libnm-util/nm-setting-bluetooth.c:184
#, c-format
msgid "requires '%s' or '%s' setting"
msgstr "'%s' অথবা '%s' সংহতিৰ পà§à§°à§Ÿà§‹à¦œà¦¨"
-#: ../libnm-util/nm-setting-bond.c:518
+#: ../libnm-core/nm-setting-bond.c:476 ../libnm-util/nm-setting-bond.c:501
#, c-format
msgid "invalid option '%s' or its value '%s'"
msgstr "অবৈধ বিকলà§à¦ª '%s' অথবা ইয়াৰ মান '%s'"
-#: ../libnm-util/nm-setting-bond.c:537
+#: ../libnm-core/nm-setting-bond.c:495 ../libnm-util/nm-setting-bond.c:520
#, c-format
msgid "only one of '%s' and '%s' can be set"
msgstr "কেৱল '%s' আৰৠ'%s' সংহতি কৰিব পাৰি"
-#: ../libnm-util/nm-setting-bond.c:548
+#: ../libnm-core/nm-setting-bond.c:506 ../libnm-util/nm-setting-bond.c:531
#, c-format
msgid "mandatory option '%s' is missing"
-msgstr "বাধà§à¦¯à¦¤à¦¾à¦®à§‚লক বিকলà§à¦ª '%s' সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨"
+msgstr "বাধà§à¦¯à¦¤à¦¾à¦®à§‚লক বিকলà§à¦ª '%s' সনà§à¦§à¦¾à¦¨à¦¹à§€à¦¨"
-#: ../libnm-util/nm-setting-bond.c:557
+#: ../libnm-core/nm-setting-bond.c:515 ../libnm-util/nm-setting-bond.c:540
#, c-format
msgid "'%s' is not a valid value for '%s'"
msgstr "'%s' ৰ বাবে '%s' à¦à¦Ÿà¦¾ বৈধ মান নহয়"
-#: ../libnm-util/nm-setting-bond.c:570
+#: ../libnm-core/nm-setting-bond.c:528 ../libnm-util/nm-setting-bond.c:553
#, c-format
msgid "'%s=%s' is incompatible with '%s > 0'"
msgstr "'%s > 0' ৰ সৈতে '%s=%s' সংগত নহয়"
-#: ../libnm-util/nm-setting-bond.c:583
+#: ../libnm-core/nm-setting-bond.c:541 ../libnm-util/nm-setting-bond.c:566
#, c-format
msgid "'%s' is not a valid interface name for '%s' option"
msgstr "'%s' বিকলà§à¦ª '%s' ৰ বাবে à¦à¦Ÿà¦¾ বৈধ আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  নাম নহয়"
-#: ../libnm-util/nm-setting-bond.c:593
+#: ../libnm-core/nm-setting-bond.c:551 ../libnm-util/nm-setting-bond.c:576
#, c-format
msgid "'%s' option is only valid for '%s=%s'"
msgstr "'%s' বিকলà§à¦ª কেৱল '%s=%s' ৰ বাবে বৈধ"
-#: ../libnm-util/nm-setting-bond.c:606
+#: ../libnm-core/nm-setting-bond.c:564 ../libnm-util/nm-setting-bond.c:589
#, 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
+#: ../libnm-core/nm-setting-bond.c:577 ../libnm-core/nm-setting-bond.c:586
+#: ../libnm-core/nm-setting-bond.c:606 ../libnm-core/nm-setting-bond.c:642
+#: ../libnm-util/nm-setting-bond.c:602 ../libnm-util/nm-setting-bond.c:611
+#: ../libnm-util/nm-setting-bond.c:631 ../libnm-util/nm-setting-bond.c:667
#, c-format
msgid "'%s' option requires '%s' option to be set"
msgstr "'%s' বিকলà§à¦ªà§° সংহতি হবলৈ '%s' বিকলà§à¦ª সংহতি কৰা হব লাগিব"
-#: ../libnm-util/nm-setting-bond.c:659
+#: ../libnm-core/nm-setting-bond.c:617 ../libnm-util/nm-setting-bond.c:642
#, c-format
msgid "'%s' option is empty"
msgstr "'%s' বিকলà§à¦ª ৰিকà§à¦¤"
-#: ../libnm-util/nm-setting-bond.c:671
+#: ../libnm-core/nm-setting-bond.c:629 ../libnm-util/nm-setting-bond.c:654
#, 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
+#: ../libnm-core/nm-setting-bond.c:656 ../libnm-util/nm-setting-bond.c:681
+#, c-format
+#| msgid "'%s' option is only valid for '%s=%s'"
+msgid "'%s' option is only valid with mode '%s'"
+msgstr "'%s' বিকলà§à¦ª কেৱল '%s' অৱসà§à¦¥à¦¾à§° সৈতে বৈধ"
+
+#: ../libnm-core/nm-setting-bridge-port.c:138
+#: ../libnm-core/nm-setting-bridge-port.c:150
+#: ../libnm-util/nm-setting-bridge-port.c:153
+#: ../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
+#: ../libnm-core/nm-setting-bridge-port.c:175
+#: ../libnm-core/nm-setting-team-port.c:118
+#, c-format
+msgid ""
+"A connection with a '%s' setting must have the slave-type set to '%s'. "
+"Instead it is '%s'"
+msgstr ""
+"à¦à¦Ÿà¦¾ '%s' সংহতিৰ সৈতে à¦à¦Ÿà¦¾ সংযোগৰ সà§à¦²à§‡à¦‡à¦­-ধৰণ '%s' হব লাগিব। কিনà§à¦¤à§ ই '%s'"
+
+#: ../libnm-core/nm-setting-bridge.c:222 ../libnm-util/nm-setting-bridge.c:268
#, c-format
msgid "value '%d' is out of range <%d-%d>"
msgstr "মান '%d' বিসà§à¦¤à¦¾à§°à§° বাহিৰ <%d-%d>"
-#: ../libnm-util/nm-setting-cdma.c:170
+#: ../libnm-core/nm-setting-bridge.c:239 ../libnm-core/nm-setting-wired.c:611
+#: ../libnm-core/nm-setting-wired.c:670 ../libnm-util/nm-setting-bridge.c:285
+#: ../libnm-util/nm-setting-wired.c:635 ../libnm-util/nm-setting-wired.c:693
+msgid "is not a valid MAC address"
+msgstr "à¦à¦Ÿà¦¾ বৈধ MAC ঠিকনা নহয়"
+
+#: ../libnm-core/nm-setting-cdma.c:165 ../libnm-util/nm-setting-cdma.c:168
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
+#: ../libnm-core/nm-setting-connection.c:740
+#: ../libnm-util/nm-setting-connection.c:861
#, 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-core/nm-setting-connection.c:828
+#, c-format
+msgid "connection type '%s' is not valid"
+msgstr "সংযোগ ধৰণ '%s' বৈধ নহয়"
-#: ../libnm-util/nm-setting-connection.c:815
-msgid "IPv6 configuration is not allowed for slave"
-msgstr "IPv6 সংৰূপ সà§à¦²à§‡à¦‡à¦­à§° বাবে অনà§à¦®à§‹à¦¦à¦¿à¦¤ নহয়"
+#: ../libnm-core/nm-setting-connection.c:838
+#, c-format
+msgid "connection type '%s' is not a valid base type"
+msgstr "সংযোগ ধৰণ '%s' à¦à¦Ÿà¦¾ বৈধ ভিতà§à¦¤à¦¿ ধৰণ নহয়"
-#: ../libnm-util/nm-setting-dcb.c:595
+#: ../libnm-core/nm-setting-connection.c:873
+#: ../libnm-util/nm-setting-connection.c:876
+#, c-format
+msgid "Unknown slave type '%s'"
+msgstr "অজà§à¦žà¦¾à¦¤ সà§à¦²à§‡à¦‡à¦­ ধৰণ '%s'"
+
+#: ../libnm-core/nm-setting-connection.c:883
+#: ../libnm-util/nm-setting-connection.c:886
+msgid "Slave connections need a valid '"
+msgstr "সà§à¦²à§‡à¦‡à¦­ সংযোগসমূহৰ à¦à¦Ÿà¦¾ বৈধ চিহà§à¦¨à¦¿à¦¤ বসà§à¦¤à§à§° পà§à§°à§Ÿà§‹à¦œà¦¨ '"
+
+#: ../libnm-core/nm-setting-connection.c:904
+#: ../libnm-util/nm-setting-connection.c:895
+msgid "Cannot set '"
+msgstr "সংহতি কৰিব নোৱাৰি '"
+
+#: ../libnm-core/nm-setting-connection.c:917
+#, c-format
+msgid "property type should be set to '%s'"
+msgstr "বৈশিষà§à¦Ÿà§à¦¯ ধৰণ '%s' লৈ সংহতি কৰিব লাগিব"
+
+#: ../libnm-core/nm-setting-connection.c:932
+#, c-format
+msgid "slave-type '%s' requires a '%s' setting in the connection"
+msgstr "slave-type '%s' ৰ সংযোগত à¦à¦Ÿà¦¾ '%s' সংহতিৰ পà§à§°à§Ÿà§‹à¦œà¦¨"
+
+#: ../libnm-core/nm-setting-connection.c:942
+#, c-format
+msgid "Detect a slave connection with '"
+msgstr "চিহà§à¦¨à¦¿à¦¤ বসà§à¦¤à§à§° সৈতে à¦à¦Ÿà¦¾ সà§à¦²à§‡à¦‡à¦­ সংযোগ চিনাকà§à¦¤ কৰক '"
+
+#: ../libnm-core/nm-setting-dcb.c:539 ../libnm-util/nm-setting-dcb.c:593
msgid "flags invalid"
msgstr "ফà§à¦²à§‡à¦—সমূহ অবৈধ"
-#: ../libnm-util/nm-setting-dcb.c:604
+#: ../libnm-core/nm-setting-dcb.c:548 ../libnm-util/nm-setting-dcb.c:602
msgid "flags invalid - disabled"
msgstr "ফà§à¦²à§‡à¦—সমূহ অবৈধ - অসামৰà§à¦¥à¦¬à¦¾à¦¨"
-#: ../libnm-util/nm-setting-dcb.c:630 ../libnm-util/nm-setting-dcb.c:679
+#: ../libnm-core/nm-setting-dcb.c:574 ../libnm-core/nm-setting-dcb.c:623
+#: ../libnm-util/nm-setting-dcb.c:628 ../libnm-util/nm-setting-dcb.c:677
msgid "property invalid (not enabled)"
msgstr "বৈশিষà§à¦Ÿà§à¦¯ অবৈধ (সামৰà§à¦¥à¦¬à¦¾à¦¨ নহয়)"
-#: ../libnm-util/nm-setting-dcb.c:639
+#: ../libnm-core/nm-setting-dcb.c:583 ../libnm-util/nm-setting-dcb.c:637
msgid "element invalid"
msgstr "উপাদান অবৈধ"
-#: ../libnm-util/nm-setting-dcb.c:654
+#: ../libnm-core/nm-setting-dcb.c:598 ../libnm-util/nm-setting-dcb.c:652
msgid "sum not 100%"
msgstr "ঘোগফল ১০০% নহয়"
-#: ../libnm-util/nm-setting-dcb.c:688 ../libnm-util/nm-setting-dcb.c:720
+#: ../libnm-core/nm-setting-dcb.c:632 ../libnm-core/nm-setting-dcb.c:664
+#: ../libnm-util/nm-setting-dcb.c:686 ../libnm-util/nm-setting-dcb.c:718
msgid "property invalid"
msgstr "বৈশিষà§à¦Ÿà§à¦¯ অবৈধ"
-#: ../libnm-util/nm-setting-dcb.c:710
+#: ../libnm-core/nm-setting-dcb.c:654 ../libnm-util/nm-setting-dcb.c:708
msgid "property missing"
-msgstr "বৈশিষà§à¦Ÿà§à¦¯ সনà§à¦§à¦¾à¦¨à¦¹à¦¿à¦¨"
+msgstr "বৈশিষà§à¦Ÿà§à¦¯ সনà§à¦§à¦¾à¦¨à¦¹à§€à¦¨"
-#: ../libnm-util/nm-setting-gsm.c:297
+#: ../libnm-core/nm-setting-gsm.c:255 ../libnm-util/nm-setting-gsm.c:294
#, c-format
msgid "property value '%s' is empty or too long (>64)"
msgstr "বৈশিষà§à¦Ÿà§à¦¯ মান '%s' ৰিকà§à¦¤ অথবা অতি দীঘল (>64)"
-#: ../libnm-util/nm-setting-gsm.c:329
+#: ../libnm-core/nm-setting-gsm.c:287 ../libnm-util/nm-setting-gsm.c:326
#, c-format
msgid "'%s' contains invalid char(s) (use [A-Za-z._-])"
msgstr "'%s' ঠঅবৈধ আখৰ(সমূহ) অনà§à¦¤à§°à§à¦­à§à¦•à§à¦¤ কৰে ([A-Za-z._-] বà§à¦¯à§±à¦¹à¦¾à§° কৰক)"
-#: ../libnm-util/nm-setting-gsm.c:364
+#: ../libnm-core/nm-setting-gsm.c:322 ../libnm-util/nm-setting-gsm.c:361
#, c-format
msgid "'%s' length is invalid (should be 5 or 6 digits)"
msgstr "'%s' দৈৰà§à¦˜à§à¦¯ অবৈধ (৫ অথবা ৬ ডিজিট হব লাগিব)"
-#: ../libnm-util/nm-setting-infiniband.c:228
+#: ../libnm-core/nm-setting-infiniband.c:233
+#: ../libnm-util/nm-setting-infiniband.c:230
msgid "not a valid interface name"
msgstr "à¦à¦Ÿà¦¾ বৈধ আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  নাম নহয়"
-#: ../libnm-util/nm-setting-infiniband.c:236
+#: ../libnm-core/nm-setting-infiniband.c:241
+#: ../libnm-util/nm-setting-infiniband.c:238
msgid "Must specify a P_Key if specifying parent"
msgstr "যদি উপধায়ক ধাৰà§à¦¯à§à¦¯ কৰা হৈছে à¦à¦Ÿà¦¾ P_Key ধাৰà§à¦¯à§à¦¯ কৰিব লাগিব"
-#: ../libnm-util/nm-setting-infiniband.c:246
+#: ../libnm-core/nm-setting-infiniband.c:251
+#: ../libnm-util/nm-setting-infiniband.c:248
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
+#: ../libnm-core/nm-setting-infiniband.c:287
+#: ../libnm-util/nm-setting-infiniband.c:284
+#, c-format
+msgid ""
+"interface name of software infiniband device must be '%s' or unset (instead "
+"it is '%s')"
+msgstr ""
+"চফà§à¦Ÿà§±à§‡à§° ইনফিবেণà§à¦¡ ডিভাইচৰ আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  নাম '%s' হব লাগিব অথবা অসংহিত থাকিব "
+"লাগিব "
+"(ইয়াৰ পৰিৱৰà§à¦¤à§‡ ই '%s')"
+
+#: ../libnm-core/nm-setting-infiniband.c:302
+#, c-format
+msgid "mtu for transport mode '%s' can be at most %d but it is %d"
+msgstr "পৰিবহন অৱসà§à¦¥à¦¾ '%s' ৰ বাবে mtu %d হব পাৰে কিনà§à¦¤à§ ই %d"
+
+#: ../libnm-core/nm-setting-ip4-config.c:907
+#: ../libnm-core/nm-setting-ip6-config.c:826
+#: ../libnm-util/nm-setting-ip4-config.c:838
+#: ../libnm-util/nm-setting-ip6-config.c:819
+#, c-format
+msgid "this property cannot be empty for '%s=%s'"
+msgstr "à¦à¦‡ বৈশিষà§à¦Ÿà§à¦¯ '%s=%s' ৰ বাবে ৰিকà§à¦¤ হব নোৱাৰিব"
+
+#: ../libnm-core/nm-setting-ip4-config.c:919
+#: ../libnm-core/nm-setting-ip4-config.c:929
+#: ../libnm-core/nm-setting-ip4-config.c:941
+#: ../libnm-core/nm-setting-ip6-config.c:839
+#: ../libnm-core/nm-setting-ip6-config.c:849
+#: ../libnm-core/nm-setting-ip6-config.c:859
+#: ../libnm-util/nm-setting-ip4-config.c:850
+#: ../libnm-util/nm-setting-ip4-config.c:860
+#: ../libnm-util/nm-setting-ip4-config.c:872
+#: ../libnm-util/nm-setting-ip6-config.c:832
+#: ../libnm-util/nm-setting-ip6-config.c:842
+#: ../libnm-util/nm-setting-ip6-config.c:852
#, c-format
msgid "this property is not allowed for '%s=%s'"
msgstr "à¦à¦‡ বৈশিষà§à¦Ÿà§à¦¯ '%s=%s' ৰ বাবে অনà§à¦®à§‹à¦¦à¦¿à¦¤ নহয়"
-#: ../libnm-util/nm-setting-ip4-config.c:792
+#: ../libnm-core/nm-setting-ip4-config.c:988
+#: ../libnm-util/nm-setting-ip4-config.c:916
#, c-format
msgid "%d. IPv4 address is invalid"
msgstr "%d। IPv4 ঠিকনা অবৈধ"
-#: ../libnm-util/nm-setting-ip4-config.c:802
+#: ../libnm-core/nm-setting-ip4-config.c:998
+#: ../libnm-util/nm-setting-ip4-config.c:926
#, c-format
msgid "%d. IPv4 address has invalid prefix"
msgstr "%d। IPv4 ঠিকনাৰ অবৈধ উপসৰà§à¦—"
-#: ../libnm-util/nm-setting-ip4-config.c:818
+#: ../libnm-core/nm-setting-ip4-config.c:1008
+#, c-format
+msgid "%d. IPv4 address has invalid label '%s'"
+msgstr "%d. IPv4 ঠিকনাৰ লেবেল '%s' অবৈধ"
+
+#: ../libnm-core/nm-setting-ip4-config.c:1019
+#, c-format
+msgid "IPv4 address / label count mismatch (%d vs %d)"
+msgstr "IPv4 ঠিকনা / লেবেল গণনা অমিল (%d বনাম %d)"
+
+#: ../libnm-core/nm-setting-ip4-config.c:1035
+#: ../libnm-util/nm-setting-ip4-config.c:942
#, c-format
msgid "%d. route is invalid"
msgstr "%d। পথ অবৈধ"
-#: ../libnm-util/nm-setting-ip4-config.c:828
+#: ../libnm-core/nm-setting-ip4-config.c:1045
+#: ../libnm-util/nm-setting-ip4-config.c:952
#, c-format
msgid "%d. route has invalid prefix"
msgstr "%d। পথৰ অবৈধ উপসৰà§à¦—"
-#: ../libnm-util/nm-setting-ip6-config.c:708
+#: ../libnm-core/nm-setting-ip4-config.c:1061
+#: ../libnm-core/nm-setting-ip6-config.c:893
+#, c-format
+msgid "%d. DNS server address is invalid"
+msgstr "%d। DNS চাৰà§à¦­à¦¾à§°à§° ঠিকনা অবৈধ"
+
+#: ../libnm-core/nm-setting-ip6-config.c:838
+#: ../libnm-util/nm-setting-ip6-config.c:831
#, 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
+#: ../libnm-core/nm-setting-olpc-mesh.c:126
+#: ../libnm-core/nm-setting-wireless.c:720
+#: ../libnm-util/nm-setting-olpc-mesh.c:131
+#: ../libnm-util/nm-setting-wireless.c:759
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
+#: ../libnm-core/nm-setting-olpc-mesh.c:135
+#: ../libnm-core/nm-setting-wireless.c:760
+#: ../libnm-util/nm-setting-olpc-mesh.c:140
+#: ../libnm-util/nm-setting-wireless.c:799
#, c-format
msgid "'%d' is not a valid channel"
msgstr "'%d' à¦à¦Ÿà¦¾ বৈধ চেনেল নহয়"
-#: ../libnm-util/nm-setting-ppp.c:390
+#: ../libnm-core/nm-setting-ppp.c:383 ../libnm-util/nm-setting-ppp.c:387
#, c-format
msgid "'%d' is out of valid range <128-16384>"
msgstr "'%d' বৈধ বিসà§à¦¤à¦¾à§° <128-16384> ৰ বাহিৰ"
-#: ../libnm-util/nm-setting-ppp.c:403
+#: ../libnm-core/nm-setting-ppp.c:396 ../libnm-util/nm-setting-ppp.c:400
#, c-format
msgid "setting this property requires non-zero '%s' property"
msgstr "à¦à¦‡ বৈশিষà§à¦Ÿà§à¦¯ সংহতি কৰিবলে অ-শূণà§à¦¯ '%s' বৈশিষà§à¦Ÿà§à¦¯à§° পà§à§°à§Ÿà§‹à¦œà¦¨"
-#: ../libnm-util/nm-setting-vlan.c:497
+#: ../libnm-core/nm-setting-vlan.c:529 ../libnm-util/nm-setting-vlan.c:554
#, c-format
msgid "'%s' value doesn't match '%s=%s'"
msgstr "'%s' মান '%s=%s' ৰ সৈতে মিল নাখায়"
-#: ../libnm-util/nm-setting-vlan.c:508
+#: ../libnm-core/nm-setting-vlan.c:540 ../libnm-util/nm-setting-vlan.c:565
#, c-format
msgid "'%s' is neither an UUID nor an interface name"
msgstr "'%s' à¦à¦Ÿà¦¾ UUID অথবা à¦à¦Ÿà¦¾ আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  নাম নহয়"
-#: ../libnm-util/nm-setting-vlan.c:521
+#: ../libnm-core/nm-setting-vlan.c:554 ../libnm-util/nm-setting-vlan.c:578
#, c-format
msgid "property is not specified and neither is '%s:%s'"
msgstr "বৈশিষà§à¦Ÿà§à¦¯ ধাৰà§à¦¯à§à¦¯à¦¤ নহয় আৰৠ'%s:%s' নহয়"
-#: ../libnm-util/nm-setting-vlan.c:534
+#: ../libnm-core/nm-setting-vlan.c:567 ../libnm-util/nm-setting-vlan.c:591
msgid "flags are invalid"
msgstr "ফà§à¦²à§‡à¦—সমূহ অবৈধ"
-#: ../libnm-util/nm-setting-wired.c:562
+#: ../libnm-core/nm-setting-wired.c:591 ../libnm-util/nm-setting-wired.c:615
#, c-format
-msgid "'%s' is not a valid ethernet port value"
-msgstr "'%s' à¦à¦Ÿà¦¾ বৈধ ইথাৰনেট পোৰà§à¦Ÿ মান নহয়"
+msgid "'%s' is not a valid Ethernet port value"
+msgstr "'%s' à¦à¦Ÿà¦¾ বৈধ ইথাৰনেট পৰà§à¦Ÿ মান নহয়"
-#: ../libnm-util/nm-setting-wired.c:572
+#: ../libnm-core/nm-setting-wired.c:601 ../libnm-util/nm-setting-wired.c:625
#, 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
+#: ../libnm-core/nm-setting-wired.c:659 ../libnm-util/nm-setting-wired.c:682
#, c-format
msgid "invalid '%s' or its value '%s'"
msgstr "অবৈধ '%s' অথবা ইয়াৰ মান '%s'"
-#: ../libnm-util/nm-setting-wireless-security.c:816
+#: ../libnm-core/nm-setting-wireless-security.c:900
+#: ../libnm-util/nm-setting-wireless-security.c:912
#, c-format
msgid "'%s' security requires '%s=%s'"
msgstr "'%s' সà§à§°à¦•à§à¦·à¦¾à§° বাবে '%s=%s' ৰ পà§à§°à§Ÿà§‹à¦œà¦¨"
-#: ../libnm-util/nm-setting-wireless-security.c:845
+#: ../libnm-core/nm-setting-wireless-security.c:929
+#: ../libnm-util/nm-setting-wireless-security.c:941
#, c-format
msgid "'%s' security requires '%s' setting presence"
msgstr "'%s' সà§à§°à¦•à§à¦·à¦¾à§° বাবে '%s' সংহতিৰ উপসà§à¦¥à¦¿à¦¤à¦¿ পà§à§°à§Ÿà§‹à¦œà¦¨à§€à§Ÿ"
-#: ../libnm-util/nm-setting-wireless-security.c:866
+#: ../libnm-core/nm-setting-wireless-security.c:950
+#: ../libnm-util/nm-setting-wireless-security.c:962
#, c-format
msgid "'%d' value is out of range <0-3>"
msgstr "'%d' মান বিসà§à¦¤à¦¾à§° <0-3> ৰ বাহিৰ"
-#: ../libnm-util/nm-setting-wireless-security.c:963
+#: ../libnm-core/nm-setting-wireless-security.c:1047
+#: ../libnm-util/nm-setting-wireless-security.c:1059
#, c-format
msgid "'%s' connections require '%s' in this property"
msgstr "'%s' সংযোগসমূহৰ à¦à¦‡ বৈশিষà§à¦Ÿà§à¦¯à¦¤ '%s' ৰ পà§à§°à§Ÿà§‹à¦œà¦¨"
-#: ../libnm-util/nm-setting-wireless-security.c:993
+#: ../libnm-core/nm-setting-wireless-security.c:1077
+#: ../libnm-util/nm-setting-wireless-security.c:1089
#, c-format
msgid "'%s' can only be used with '%s=%s' (WEP)"
msgstr "'%s' ক কেৱল '%s=%s' (WEP) ৰ সৈতে বà§à¦¯à§±à¦¹à¦¾à§° কৰিব পাৰি"
-#: ../libnm-util/nm-setting-wireless.c:715
+#: ../libnm-core/nm-setting-wireless.c:729
+#: ../libnm-util/nm-setting-wireless.c:768
#, c-format
msgid "'%s' is not a valid Wi-Fi mode"
msgstr "'%s' à¦à¦Ÿà¦¾ বৈধ Wi-Fi অৱসà§à¦¥à¦¾ নহয়"
-#: ../libnm-util/nm-setting-wireless.c:725
+#: ../libnm-core/nm-setting-wireless.c:739
+#: ../libnm-util/nm-setting-wireless.c:778
#, c-format
msgid "'%s' is not a valid band"
msgstr "'%s' à¦à¦Ÿà¦¾ বৈধ বেণà§à¦¡ নহয়"
-#: ../libnm-util/nm-setting-wireless.c:735
+#: ../libnm-core/nm-setting-wireless.c:749
+#: ../libnm-util/nm-setting-wireless.c:788
#, c-format
msgid "requires setting '%s' property"
msgstr "'%s' বৈশিষà§à¦Ÿà§à¦¯ সংহতি কৰাৰ পà§à§°à§Ÿà§‹à¦œà¦¨"
+#: ../libnm-core/nm-setting.c:1714
+#, c-format
+msgid "Missing '%s' setting"
+msgstr "'%s' সংহতিৰ পà§à§°à§Ÿà§‹à¦œà¦¨"
+
+#: ../libnm-glib/nm-device.c:1792
+msgid "Bluetooth"
+msgstr "বà§à¦²à§à¦Ÿà§à¦¥"
+
+#: ../libnm-glib/nm-device.c:1810
+msgid "ADSL"
+msgstr "ADSL"
+
+#: ../libnm-glib/nm-device.c:1838
+msgid "Wired"
+msgstr "তাà¦à§°à¦¯à§à¦•à§à¦¤"
+
+#: ../libnm-glib/nm-device.c:1869
+msgid "PCI"
+msgstr "PCI"
+
+#: ../libnm-glib/nm-device.c:1871
+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:1967 ../libnm-glib/nm-device.c:1986
+#, c-format
+msgctxt "long device name"
+msgid "%s %s"
+msgstr "%s %s"
+
+#: ../libnm-glib/nm-remote-connection.c:149
+msgid "Disconnected by D-Bus"
+msgstr "D-Bus দà§à¦¬à¦¾à§°à¦¾ বিচà§à¦›à¦¿à¦¨à§à¦¨à¦¿à¦¤"
+
+#: ../libnm/nm-object.c:174 ../libnm/nm-object.c:318
+msgid "Caller did not specify D-Bus path for object"
+msgstr "কলাৰে অবজেকà§à¦Ÿà§° বাবে D-Bus পথ ধাৰà§à¦¯à§à¦¯ নকৰিলে"
+
+#: ../libnm/nm-vpn-plugin.c:726
+msgid "No service name specified"
+msgstr "কোনো সেৱা নাম ধাৰà§à¦¯à§à¦¯ কৰা হোৱা নাই"
+
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:1
msgid "Enable or disable system networking"
msgstr "চিসà§à¦Ÿà§‡à¦® নেটৱাৰà§à¦•à¦¿à¦‚ সামৰà§à¦¥à¦¬à¦¾à¦¨ অথবা অসামৰà§à¦¥à¦¬à¦¾à¦¨ কৰক"
@@ -5878,47 +7242,46 @@ msgstr ""
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:11
msgid "Allow control of network connections"
-msgstr "নেটৱাৰà§à¦• সংযোগসমূহৰ নিয়নà§à¦¤à§à§°à¦£à§° অনà§à¦®à¦¤à¦¿ দিয়ক"
+msgstr "নেটৱৰà§à¦• সংযোগসমূহৰ নিয়নà§à¦¤à§à§°à¦£à§° অনà§à¦®à¦¤à¦¿ দিয়ক"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:12
msgid "System policy prevents control of network connections"
-msgstr "চিসà§à¦Ÿà§‡à¦® নীতিয়ে নেটৱাৰà§à¦• সংযোগসমূহৰ নিয়নà§à¦¤à§à§°à¦£ পà§à§°à¦¤à¦¿à§°à§‹à¦§ কৰে"
+msgstr "চিসà§à¦Ÿà§‡à¦® নীতিয়ে নেটৱৰà§à¦• সংযোগসমূহৰ নিয়নà§à¦¤à§à§°à¦£ পà§à§°à¦¤à¦¿à§°à§‹à¦§ কৰে"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:13
msgid "Connection sharing via a protected WiFi network"
-msgstr "à¦à¦Ÿà¦¾ সà§à§°à¦•à§à¦·à¦¿à¦¤ WiFi নেটৱাৰà§à¦•à§°à§‡ সংযোগ অংশীদাৰী"
+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"
-msgstr "à¦à¦Ÿà¦¾ মà§à¦•à§à¦¤ WiFi নেটৱাৰà§à¦•à§°à§‡ সংযোগৰ অংশীদাৰী"
+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 "Modify personal network connections"
-msgstr "বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত নেটৱাৰà§à¦• সংযোগসমূহ পৰিবৰà§à¦¤à¦¨ কৰক"
+msgstr "বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত নেটৱৰà§à¦• সংযোগসমূহ পৰিবৰà§à¦¤à¦¨ কৰক"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:18
msgid "System policy prevents modification of personal network settings"
-msgstr "চিসà§à¦Ÿà§‡à¦® নীতিয়ে বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত নেটৱাৰà§à¦• সংহতিসমূহৰ পৰিবৰà§à¦¤à¦¨ পà§à§°à¦¤à¦¿à§°à§‹à¦§ কৰে"
+msgstr "চিসà§à¦Ÿà§‡à¦® নীতিয়ে বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত নেটৱৰà§à¦• সংহতিসমূহৰ পৰিবৰà§à¦¤à¦¨ পà§à§°à¦¤à¦¿à§°à§‹à¦§ কৰে"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:19
msgid "Modify network connections for all users"
-msgstr "সকলো বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€à§° বাবে নেটৱাৰà§à¦• সংযোগসমূহ পৰিবৰà§à¦¤à¦¨ কৰক"
+msgstr "সকলো বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€à§° বাবে নেটৱৰà§à¦• সংযোগসমূহ পৰিবৰà§à¦¤à¦¨ কৰক"
#: ../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.in.h:21
msgid "Modify persistent system hostname"
@@ -5928,140 +7291,148 @@ msgstr "সà§à¦¥à¦¾à§Ÿà§€ চিসà§à¦Ÿà§‡à¦® হসà§à¦Ÿà¦¨à¦¾à¦® পৰি
msgid "System policy prevents modification of the persistent system hostname"
msgstr "চিসà§à¦Ÿà§‡à¦® নীতিয়ে সà§à¦¥à¦¾à§Ÿà§€ চিসà§à¦Ÿà§‡à¦® হসà§à¦Ÿà¦¨à¦¾à¦®à§° পৰিবৰà§à¦¤à¦¨ পà§à§°à¦¤à¦¿à§°à§‹à¦§ কৰে"
-#: ../src/main.c:154
+#. Translators: the first %s is a prefix for the connection id, such
+#. * as "Wired Connection" or "VPN Connection". The %d is a number
+#. * that is combined with the first argument to create a unique
+#. * connection id.
+#: ../src/NetworkManagerUtils.c:954
+#, c-format
+msgctxt "connection id fallback"
+msgid "%s %d"
+msgstr "%s %d"
+
+#: ../src/main.c:131
+#, c-format
+msgid "Failed to set signal mask: %d"
+msgstr "সংকেত মাসà§à¦• সংহতি কৰিবলে বà§à¦¯à§°à§à¦¥: %d"
+
+#: ../src/main.c:140
+#, c-format
+msgid "Failed to create signal handling thread: %d"
+msgstr "সংকেত নিয়নà§à¦¤à§à§°à¦£ থà§à§°à§‡à¦¡ সৃষà§à¦Ÿà¦¿ কৰিবলে বà§à¦¯à§°à§à¦¥: %d"
+
+#: ../src/main.c:155
#, c-format
msgid "Opening %s failed: %s\n"
msgstr "%s খোলিবলে বà§à¦¯à§°à§à¦¥: %s\n"
-#: ../src/main.c:160
+#: ../src/main.c:161
#, c-format
msgid "Writing to %s failed: %s\n"
msgstr "%s লে লিখা বà§à¦¯à§°à§à¦¥ হল: %s\n"
-#: ../src/main.c:165
+#: ../src/main.c:166
#, c-format
msgid "Closing %s failed: %s\n"
msgstr "%s বনà§à¦§ কৰা বà§à¦¯à§°à§à¦¥ হল: %s\n"
-#: ../src/main.c:208
+#: ../src/main.c:209
#, c-format
msgid "NetworkManager is already running (pid %ld)\n"
msgstr "NetworkManager ইতিমধà§à¦¯à§‡ চলি আছে (pid %ld)\n"
-#: ../src/main.c:329
+#: ../src/main.c:362
msgid "Print NetworkManager version and exit"
-msgstr "NetworkManager সংসà§à¦•à§°à¦£ পà§à§°à¦¿à¦¨à§à¦Ÿ কৰি পà§à§°à¦¸à§à¦¥à¦¾à¦¨ কৰক"
+msgstr "NetworkManager সংসà§à¦•à§°à¦£ পà§à§°à¦¿à¦£à§à¦Ÿ কৰি পà§à§°à¦¸à§à¦¥à¦¾à¦¨ কৰক"
-#: ../src/main.c:330
+#: ../src/main.c:363
msgid "Don't become a daemon"
msgstr "à¦à¦Ÿà¦¾ ডিমন নহব"
-#: ../src/main.c:331
+#: ../src/main.c:364
msgid "Don't become a daemon, and log to stderr"
msgstr "à¦à¦Ÿà¦¾ ডিমন হৈ, stderr লৈ লগ নকৰিব"
-#: ../src/main.c:332
+#: ../src/main.c:365
#, c-format
msgid "Log level: one of [%s]"
msgstr "লগ সà§à¦¤à§°: [%s] ৰ à¦à¦Ÿà¦¾"
-#: ../src/main.c:334
+#: ../src/main.c:367
#, c-format
msgid "Log domains separated by ',': any combination of [%s]"
msgstr "',' দà§à¦¬à¦¾à§°à¦¾ পৃথকিত লগ ডমেইনসমূহ: [%s] ৰ যিকোনো সংযà§à¦•à§à¦¤à¦¿"
-#: ../src/main.c:336
+#: ../src/main.c:369
msgid "Make all warnings fatal"
msgstr "সকলো সতৰà§à¦•à¦¬à¦¾à§°à§à¦¤à¦¾ মাৰাতà§à¦®à¦• কৰক"
-#: ../src/main.c:337
+#: ../src/main.c:370
msgid "Specify the location of a PID file"
msgstr "à¦à¦Ÿà¦¾ PID ফাইলৰ অৱসà§à¦¥à¦¾à¦¨ ধাৰà§à¦¯à§à¦¯ কৰক"
-#: ../src/main.c:337
+#: ../src/main.c:370
msgid "filename"
msgstr "ফাইলনাম"
-#: ../src/main.c:338
+#: ../src/main.c:371
msgid "State file location"
msgstr "ফাইলৰ অৱসà§à¦¥à¦¾à¦¨ দেখà§à§±à¦¾à¦“ক"
-#: ../src/main.c:338
+#: ../src/main.c:371
msgid "/path/to/state.file"
msgstr "/path/to/state.file"
-#: ../src/main.c:364
+#: ../src/main.c:397
#, c-format
msgid "GModules are not supported on your platform!\n"
msgstr "GModules আপোনাৰ পà§à¦²à§‡à¦Ÿà¦«à§°à§à¦®à¦¤ সমৰà§à¦¥à¦¿à¦¤ নহয়!\n"
-#: ../src/main.c:369
+#: ../src/main.c:402
#, c-format
msgid "You must be root to run NetworkManager!\n"
msgstr "NetworkManager চলাবলে আপà§à¦¨à¦¿ ৰà§à¦Ÿ হব লাগিব!\n"
-#: ../src/main.c:392
+#: ../src/main.c:425
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 ঠসকলো নেটৱাৰà§à¦• সংযোগ পৰà§à¦¯à¦¬à§‡à¦•à§à¦·à¦£ কৰে আৰৠসà§à¦¬à¦šà¦¾à¦²à¦¿à¦¤à¦­à¦¾à§±à§‡\n"
+"NetworkManager ঠসকলো নেটৱৰà§à¦• সংযোগ পৰà§à¦¯à¦¬à§‡à¦•à§à¦·à¦£ কৰে আৰৠসà§à¦¬à¦šà¦¾à¦²à¦¿à¦¤à¦­à¦¾à§±à§‡\n"
"বà§à¦¯à§±à¦¹à¦¾à§° কৰিবলে সৰà§à¦¬à§‹à¦¤à§à¦¤à¦® সংযোগ নিৰà§à¦¬à¦¾à¦šà¦¨ কৰে। ই লগতে বà§à¦¯à§±à¦¹à¦¾à§°à¦•à¦¾à§°à§€à¦œà¦¨à¦•\n"
"কমপিউটাৰত থকা বেতাà¦à§° কাৰà§à¦¡à¦¸à¦®à§‚হ সংযà§à¦•à§à¦¤ হব লগিয়া বেতাà¦à§° অভিগম বিনà§à¦¦à§ ধাৰà§à¦¯à§à¦¯ "
"কৰাৰ অনà§à¦®à¦¤à¦¿ "
"দিয়ে।"
-#: ../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:412
+#: ../src/main.c:431 ../src/main.c:447
#, c-format
msgid "%s. Please use --help to see a list of valid options.\n"
msgstr ""
"%s। বৈধ বিকলà§à¦ªà¦¸à¦®à§‚হৰ à¦à¦Ÿà¦¾ তালিকা চাবলে অনà§à¦—à§à§°à¦¹ কৰি --help বà§à¦¯à§±à¦¹à¦¾à§° কৰক।\n"
-#: ../src/main.c:417
+#: ../src/main.c:452
#, c-format
msgid "Ignoring unrecognized log domain(s) '%s' passed on command line.\n"
msgstr ""
"কমানà§à¦¡ লাইনত পà§à§°à§‡à§°à¦£ কৰা অপৰিচিত লগ ডমেইন(সমূহ) '%s' উপেকà§à¦·à¦¾ কৰা হৈছে।\n"
-#: ../src/main.c:468
+#: ../src/main.c:503
#, c-format
msgid "Failed to read configuration: (%d) %s\n"
msgstr "সংৰূপ পà§à¦¿à¦¬à¦²à§‡ বà§à¦¯à§°à§à¦¥: (%d) %s\n"
-#: ../src/main.c:482
+#: ../src/main.c:517
#, c-format
msgid "Error in configuration file: %s.\n"
msgstr "সংৰূপ ফাইলত তà§à§°à§à¦Ÿà¦¿: %s।\n"
-#: ../src/main.c:487
+#: ../src/main.c:522
#, c-format
msgid "Ignoring unrecognized log domain(s) '%s' from config files.\n"
msgstr "সংৰূপ ফাইলসমূহত অপৰিচিত লগ ডমেইন(সমূহ) '%s' উপেকà§à¦·à¦¾ কৰা হৈছে।\n"
-#: ../src/main.c:495
+#: ../src/main.c:530
#, c-format
msgid "State file %s parsing failed: (%d) %s\n"
msgstr "অৱসà§à¦¥à¦¾ ফাইল %s বিশà§à¦²à§‡à¦·à¦£ কৰাটো বà§à¦¯à§°à§à¦¥ হল: (%d) %s\n"
-#: ../src/main.c:508
+#: ../src/main.c:543
#, c-format
msgid "Could not daemonize: %s [error %u]\n"
msgstr "ডিমনাইজ কৰিব পৰা নগল: %s [error %u]\n"
-#: ../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"
@@ -6075,967 +7446,385 @@ msgstr ""
"# %s ৰ পৰা à¦à¦•à¦¤à§à§°à¦¿à¦¤ কৰা\n"
"\n"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:313
+#: ../src/dhcp-manager/nm-dhcp-manager.c:302
msgid "no usable DHCP client could be found."
-msgstr "কোনো বà§à¦¯à§±à¦¹à¦¾à§°à¦¯à§‹à¦—à§à¦¯ DHCP কà§à¦²à¦¾à¦à¦¨à§à¦Ÿ পোৱা নগল।"
+msgstr "কোনো বà§à¦¯à§±à¦¹à¦¾à§°à¦¯à§‹à¦—à§à¦¯ DHCP কà§à¦²à¦¾à¦à¦£à§à¦Ÿ পোৱা নগল।"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:322
-msgid "'dhclient' could be found."
-msgstr "'dhclient' পোৱা গল।"
+#: ../src/dhcp-manager/nm-dhcp-manager.c:311
+msgid "'dhclient' could not be found or was disabled."
+msgstr "'dhclient' পোৱা নগল অথবা অসামৰà§à¦¥à¦¬à¦¾à¦¨ কৰা আছে।"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:332
-msgid "'dhcpcd' could be found."
-msgstr "'dhcpcd' পোৱা গল।"
+#: ../src/dhcp-manager/nm-dhcp-manager.c:321
+msgid "'dhcpcd' could not be found or was disabled."
+msgstr "'dhcpcd' পোৱা নগল অথবা অসামৰà§à¦¥à¦¬à¦¾à¦¨ কৰা আছে।"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:340
+#: ../src/dhcp-manager/nm-dhcp-manager.c:329
#, c-format
msgid "unsupported DHCP client '%s'"
-msgstr "অসমৰà§à¦¥à¦¿à¦¤ DHCP কà§à¦²à¦¾à¦à¦¨à§à¦Ÿ '%s'"
+msgstr "অসমৰà§à¦¥à¦¿à¦¤ DHCP কà§à¦²à¦¾à¦à¦£à§à¦Ÿ '%s'"
-#: ../src/dns-manager/nm-dns-manager.c:400
+#: ../src/dns-manager/nm-dns-manager.c:374
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr "NOTE: libc ৰিচ'লভাৰে ৩ টাৰ অধিক নামচাৰà§à¦­à¦¾à§° সমৰà§à¦¥à¦¨ নকৰিবও পাৰে।"
-#: ../src/dns-manager/nm-dns-manager.c:402
+#: ../src/dns-manager/nm-dns-manager.c:376
msgid "The nameservers listed below may not be recognized."
msgstr "তলত তালিকাভà§à¦•à§à¦¤ নামচাৰà§à¦­à¦¾à§°à¦¸à¦®à§‚হ পৰিচিত নহবও পাৰে।"
-#: ../src/logging/nm-logging.c:149
+#: ../src/devices/adsl/nm-device-adsl.c:127
+msgid "ADSL connection"
+msgstr "ADSL সংযোগ"
+
+#: ../src/devices/bluetooth/nm-bluez-device.c:189
#, c-format
-msgid "Unknown log level '%s'"
-msgstr "অজà§à¦žà¦¾à¦¤ লগ সà§à¦¤à§° '%s'"
+msgid "%s Network"
+msgstr "%s নেটৱৰà§à¦•"
+
+#: ../src/devices/bluetooth/nm-device-bt.c:274
+msgid "PAN connection"
+msgstr "PAN সংযোগ"
+
+#: ../src/devices/bluetooth/nm-device-bt.c:299
+#: ../src/devices/wwan/nm-modem-broadband.c:483
+msgid "GSM connection"
+msgstr "GSM সংযোগ"
+
+#: ../src/devices/bluetooth/nm-device-bt.c:303
+#: ../src/devices/wwan/nm-modem-broadband.c:506
+msgid "CDMA connection"
+msgstr "CDMA সংযোগ"
+
+#: ../src/devices/bluetooth/nm-device-bt.c:307
+msgid "DUN connection"
+msgstr "DUN সংযোগ"
+
+#: ../src/devices/nm-device-bond.c:137
+msgid "Bond connection"
+msgstr "বানà§à¦§à¦¨à§€ সংযোগ"
+
+#: ../src/devices/nm-device-bridge.c:144
+msgid "Bridge connection"
+msgstr "বà§à§°à¦¿à¦œ সংযোগ"
+
+#: ../src/devices/nm-device-ethernet.c:1437
+msgid "PPPoE connection"
+msgstr "PPPoE সংযোগ"
+
+#: ../src/devices/nm-device-ethernet.c:1437
+msgid "Wired connection"
+msgstr "তাà¦à§°à¦¯à§à¦•à§à¦¤ সংযোগ"
-#: ../src/logging/nm-logging.c:226
+#: ../src/devices/nm-device-ethernet-utils.c:38
#, c-format
-msgid "Unknown log domain '%s'"
-msgstr "অজà§à¦žà¦¾à¦¤ লগ ডমেইন '%s'"
+msgid "Wired connection %d"
+msgstr "তাà¦à§°à¦¯à§à¦•à§à¦¤ সংযোগ %d"
+
+#: ../src/devices/nm-device-infiniband.c:189
+msgid "InfiniBand connection"
+msgstr "InfiniBand সংযোগ"
+
+#: ../src/devices/nm-device-vlan.c:229
+msgid "VLAN connection"
+msgstr "VLAN সংযোগ"
+
+#: ../src/devices/team/nm-device-team.c:147
+msgid "Team connection"
+msgstr "দল সংযোগ"
-#: ../src/config/nm-config.c:271
+#: ../src/devices/wifi/nm-device-olpc-mesh.c:163
+msgid "Mesh"
+msgstr "মেশà§à¦¬"
+
+#: ../src/nm-config.c:352
msgid "Config file location"
msgstr "Config ফাইলৰ অৱসà§à¦¥à¦¾à¦¨"
-#: ../src/config/nm-config.c:271
+#: ../src/nm-config.c:352
msgid "/path/to/config.file"
msgstr "/path/to/config.file"
-#: ../src/config/nm-config.c:272
+#: ../src/nm-config.c:353
msgid "Config directory location"
msgstr "Config ডাইৰেকটৰি অৱসà§à¦¥à¦¾à¦¨"
-#: ../src/config/nm-config.c:272
+#: ../src/nm-config.c:353
msgid "/path/to/config/dir"
msgstr "/path/to/config/dir"
-#: ../src/config/nm-config.c:274
+#: ../src/nm-config.c:355
msgid "List of plugins separated by ','"
msgstr "',' দà§à¦¬à¦¾à§°à¦¾ পৃথকিত পà§à¦²à¦¾à¦—িনসমূহৰ তালিকা"
-#: ../src/config/nm-config.c:274
+#: ../src/nm-config.c:355
msgid "plugin1,plugin2"
msgstr "plugin1,plugin2"
#. These three are hidden for now, and should eventually just go away.
-#: ../src/config/nm-config.c:277
+#: ../src/nm-config.c:358
msgid "An http(s) address for checking internet connectivity"
-msgstr "ইনà§à¦Ÿà¦¾à§°à¦¨à§‡à¦Ÿ সংযোগ নীৰিকà§à¦·à¦£ কৰিবলে à¦à¦Ÿà¦¾ http(s) ঠিকনা"
+msgstr "ইণà§à¦Ÿà¦¾à§°à¦¨à§‡à¦Ÿ সংযোগ নিৰীকà§à¦·à¦£ কৰিবলে à¦à¦Ÿà¦¾ http(s) ঠিকনা"
-#: ../src/config/nm-config.c:278
+#: ../src/nm-config.c:359
msgid "The interval between connectivity checks (in seconds)"
-msgstr "সংযোগ নীৰিকà§à¦·à¦£à§° মাজৰ অনà§à¦¤à§°à¦¾à¦² (ছেকেণà§à¦¡à¦¤)"
+msgstr "সংযোগ নিৰীকà§à¦·à¦£à§° মাজৰ অনà§à¦¤à§°à¦¾à¦² (ছেকেণà§à¦¡à¦¤)"
-#: ../src/config/nm-config.c:279
+#: ../src/nm-config.c:360
msgid "The expected start of the response"
msgstr "পà§à§°à¦¤à¦¿à¦•à§à§°à¦¿à§Ÿà¦¾à§° পà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤ আৰমà§à¦­à¦£à¦¿"
-#: ../src/config/nm-config.c:279
+#: ../src/nm-config.c:360
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/modem-manager/nm-modem-broadband.c:481
-#: ../src/modem-manager/nm-modem-old.c:892 ../src/devices/nm-device-bt.c:337
+#: ../src/nm-logging.c:160
#, 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/devices/nm-device-adsl.c:150
-#, c-format
-msgid "ADSL connection %d"
-msgstr "ADSL সংযোগ %d"
-
-#: ../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/devices/nm-device-bt.c:341
-#, c-format
-msgid "DUN connection %d"
-msgstr "DUN সংযোগ %d"
-
-#: ../src/devices/nm-device-ethernet.c:1254
-#, c-format
-msgid "PPPoE connection %d"
-msgstr "PPPoE সংযোগ %d"
-
-#: ../src/devices/nm-device-ethernet.c:1254
-#: ../src/settings/nm-settings-utils.c:50
-#, c-format
-msgid "Wired connection %d"
-msgstr "তাà¦à§°à¦¯à§à¦•à§à¦¤ সংযোগ %d"
-
-#: ../src/devices/nm-device-infiniband.c:270 ../tui/nm-editor-utils.c:177
-#, c-format
-msgid "InfiniBand connection %d"
-msgstr "InfiniBand সংযোগ %d"
-
-#: ../src/devices/nm-device-olpc-mesh.c:242
-#, c-format
-msgid "Mesh %d"
-msgstr "মেশ %d"
-
-#: ../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"
+msgid "Unknown log level '%s'"
+msgstr "অজà§à¦žà¦¾à¦¤ লগ সà§à¦¤à§° '%s'"
-#: ../src/nm-manager.c:3452 ../tui/nm-editor-utils.c:246
+#: ../src/nm-logging.c:242
#, c-format
-msgid "VPN connection %d"
-msgstr "VPN সংযোগ %d"
-
-#: ../src/nm-netlink-monitor.c:219
-msgid "error occurred while waiting for data on socket"
-msgstr "চকেটত তথà§à¦¯à§° বাবে অপেকà§à¦·à¦¾ কৰোতে তà§à§°à§à¦Ÿà¦¿ দেখা দিলে"
+msgid "Unknown log domain '%s'"
+msgstr "অজà§à¦žà¦¾à¦¤ লগ ডমেইন '%s'"
-#: ../src/nm-netlink-monitor.c:240
-#, c-format
-msgid "error processing netlink message: %s"
-msgstr "netlink বাৰà§à¦¤à¦¾ পà§à§°à¦•à§à§°à¦¿à§Ÿà¦¾ কৰোতে তà§à§°à§à¦Ÿà¦¿: %s"
+#: ../src/nm-manager.c:3372
+msgid "VPN connection"
+msgstr "VPN সংযোগ"
-#: ../src/nm-netlink-monitor.c:264
-#, c-format
-msgid "unable to connect to netlink for monitoring link status: %s"
-msgstr "লিংক অৱসà§à¦¥à¦¾ পৰà§à¦¯à¦¬à§‡à¦•à§à¦·à¦£ কৰিবলে netlink লে সংযোগ কৰিবলে অকà§à¦·à¦®: %s"
+#: ../src/nm-sleep-monitor-systemd.c:114
+msgid "NetworkManager needs to turn off networks"
+msgstr "NetworkManager ঠনেটৱৰà§à¦•à¦¸à¦®à§‚হ বনà§à¦§ কৰিব লাগিব"
-#: ../src/nm-netlink-monitor.c:275
+#: ../src/settings/plugins/ibft/plugin.c:67
#, c-format
-msgid "unable to enable netlink handle credential passing: %s"
-msgstr "netlink হেনà§à¦¡à§‡à¦² তথà§à¦¯ পà§à§°à§‡à§°à¦£ সামৰà§à¦¥à¦¬à¦¾à¦¨ কৰিবলে অকà§à¦·à¦®: %s"
+msgid "ibft: failed to read iscsiadm records: %s"
+msgstr "ibft: iscsiadm ৰেকৰà§à¦¡à¦¬à§‹à§° পৰিবলে বà§à¦¯à§°à§à¦¥: %s"
-#: ../src/nm-netlink-monitor.c:319 ../src/nm-netlink-monitor.c:381
+#: ../src/settings/plugins/ibft/plugin.c:75
#, c-format
-msgid "unable to allocate netlink handle for monitoring link status: %s"
-msgstr "লিংক অৱসà§à¦¥à¦¾ পৰà§à¦¯à¦¬à§‡à¦•à§à¦·à¦£ কৰিবলে netlink হপনà§à¦¡à§‡à¦² আবনà§à¦Ÿà¦¨ কৰিবলে অকà§à¦·à¦®: %s"
+msgid "ibft: read connection '%s'"
+msgstr "ibft: সংযোগ '%s' পà§à¦•"
-#: ../src/nm-netlink-monitor.c:469
+#: ../src/settings/plugins/ibft/plugin.c:81
#, c-format
-msgid "unable to join netlink group: %s"
-msgstr "netlink দলত অংশগà§à§°à¦¹à¦£ কৰিবলে অকà§à¦·à¦®: %s"
-
-#: ../src/nm-sleep-monitor-systemd.c:116
-msgid "NetworkManager needs to turn off networks"
-msgstr "NetworkManager ঠনেটৱাৰà§à¦•à¦¸à¦®à§‚হ বনà§à¦§ কৰিব লাগিব"
+msgid "ibft: failed to read iscsiadm record: %s"
+msgstr "ibft: iscsiadm ৰেকৰà§à¦¡ পà§à¦¿à¦¬à¦²à§‡ বà§à¦¯à§°à§à¦¥: %s"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:115
+#: ../src/settings/plugins/ifcfg-rh/reader.c:112
msgid "System"
msgstr "চিসà§à¦Ÿà§‡à¦®"
-#: ../test/nm-online.c:73
-#, c-format
-msgid "\rConnecting"
-msgstr "\rসংযোগ কৰা হৈছে"
-
-#: ../test/nm-online.c:104
-msgid ""
-"Time to wait for a connection, in seconds (without the option, default value "
-"is 30)"
-msgstr ""
-"à¦à¦Ÿà¦¾ সংযোগৰ বাবে অপেকà§à¦·à¦¾ কৰিব লগিয়া সময়, ছেকেণà§à¦¡à¦¤ (বিকলà§à¦ªà§° অবিহনে, অবিকলà§à¦ªà¦¿à¦¤ "
-"মান "
-"হল ৩০)"
-
-#: ../test/nm-online.c:105
-msgid "Exit immediately if NetworkManager is not running"
-msgstr "যদি NetworkManager চলি থকা নাই তৎকà§à¦·à¦¨à¦¾à¦¤ পà§à§°à¦¸à§à¦¥à¦¾à¦¨ কৰক"
-
-#: ../test/nm-online.c:106
-msgid "Don't print anything"
-msgstr "à¦à¦•à§‹ পà§à§°à¦¿à¦¨à§à¦Ÿ নকৰিব"
-
-#: ../test/nm-online.c:124
-msgid ""
-"Waits for NetworkManager to finish activating startup network connections."
-msgstr ""
-"NetworkManager দà§à¦¬à¦¾à§°à¦¾ আৰমà§à¦­à¦£à¦¿ নেটৱাৰà§à¦• সংযোগসমূহ সকà§à§°à¦¿à§Ÿ কৰা সমাপà§à¦¤ কৰিবলৈ "
-"অপেকà§à¦·à¦¾ "
-"কৰে।"
-
-#: ../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 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"
-
-#: ../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: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 ঠিকনা"
+#~ msgid "not running"
+#~ msgstr "চলি থকা নাই"
-#: ../tui/nmt-page-infiniband.c:40
-msgid "INFINIBAND"
-msgstr "ইনফিবেণà§à¦¡"
+#~ msgid "Error: %s"
+#~ msgstr "তà§à§°à§à¦Ÿà¦¿: %s"
-#: ../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 "পৰিৱহন অৱসà§à¦¥à¦¾"
+#~ msgid "Error saving connection: %s"
+#~ msgstr "সংযোগ সংৰকà§à¦·à¦£ কৰোতে তà§à§°à§à¦Ÿà¦¿: %s"
-#: ../tui/nmt-page-ip4.c:41
-msgid "Disabled"
-msgstr "অসামৰà§à¦¥à¦¬à¦¾à¦¨"
+#~| msgid "'%s' is not a valid value for the property"
+#~ msgid "invalid value in compatibility property"
+#~ msgstr "সংগতি বৈশিষà§à¦Ÿà§à¦¯à¦¤ অবৈধ মান"
-#: ../tui/nmt-page-ip4.c:42 ../tui/nmt-page-ip6.c:42
-msgid "Automatic"
-msgstr "সà§à¦¬à¦šà¦¾à¦²à¦¿à¦¤"
+#~ msgid "invalid IPv4 route '%s'"
+#~ msgstr "অবৈধ IPv4 পথ '%s'"
-#: ../tui/nmt-page-ip4.c:43 ../tui/nmt-page-ip6.c:44
-msgid "Link-Local"
-msgstr "সà§à¦¥à¦¾à¦¨à§€à§Ÿ-সংযোগ"
+#~ msgid "invalid prefix '%s'; <0-32> allowed"
+#~ msgstr "অবৈধ উপসৰà§à¦— '%s'; <0-32> অনà§à¦®à§‹à¦¦à¦¿à¦¤"
-#: ../tui/nmt-page-ip4.c:44 ../tui/nmt-page-ip6.c:45
-msgid "Manual"
-msgstr "হসà§à¦¤à¦šà¦¾à¦²à¦¿à¦¤"
+#~ msgid "invalid IPv6 route '%s'"
+#~ msgstr "অবৈধ IPv6 পথ '%s'"
-#: ../tui/nmt-page-ip4.c:45
-msgid "Shared"
-msgstr "অংশীদাৰী কৰা"
+#~ msgid "invalid prefix '%s'; <0-128> allowed"
+#~ msgstr "অবৈধ উপসৰà§à¦— '%s'; <0-128> অনà§à¦®à§‹à¦¦à¦¿à¦¤"
-#: ../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 "à¦à¦‡ সংযোগ সমà§à¦ªà§‚ৰà§à¦£ হবলে IPv ঠিকনাৰ পà§à§°à§Ÿà§‹à¦œà¦¨"
-
-#: ../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 "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 "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 "গনà§à¦¤à¦¬à§à¦¯"
+#~ 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"
-#: ../tui/nmt-route-table.c:219
-msgid "Prefix"
-msgstr "উপসৰà§à¦—"
+#~ msgid ""
+#~ "Error: Device '%s' is waiting for slaves before proceeding with "
+#~ "activation."
+#~ msgstr "তà§à§°à§à¦Ÿà¦¿: ডিভাইচ '%s' ঠসকà§à§°à¦¿à§Ÿà¦•à§°à¦£à§° আগত সà§à¦²à§‡à¦‡à¦­à¦¸à¦®à§‚হৰ বাবে অপেকà§à¦·à¦¾ কৰি আছে।"
-#: ../tui/nmt-route-table.c:228
-msgid "Next Hop"
-msgstr "পৰৱৰà§à¦¤à§€ বিৰাম"
+#~ msgid "There are 3 optional arguments for '%s' connection type.\n"
+#~ msgstr "'%s' সংযোগ ধৰণৰ বাবে ৩ টা বৈকলà§à¦ªà¦¿à¦• তৰà§à¦• আছে।\n"
-#: ../tui/nmt-route-table.c:236
-msgid "Metric"
-msgstr "মেটà§à§°à¦¿à¦•"
+#~ msgid "Do you want to provide them? (yes/no) [yes] "
+#~ msgstr "আপà§à¦¨à¦¿ সিহতক পà§à§°à¦¦à¦¾à¦¨ কৰিব খোজে নে? (হয়/নহয়) [হয়] "
-#: ../tui/nmt-route-table.c:256
-msgid "No custom routes are defined."
-msgstr "কোনো সà§à¦¬à¦¨à¦¿à§°à§à¦¬à¦¾à¦šà¦¿à¦¤ পথ নাই।"
+#~ msgid "There are 5 optional arguments for 'InfiniBand' connection type.\n"
+#~ msgstr "'InfiniBand' সংযোগ ধৰণৰ বাবে ৫ টা বৈকলà§à¦ªà¦¿à¦• তৰà§à¦• আছে।\n"
-#: ../tui/nmt-secret-agent.c:223
-msgid "Identity"
-msgstr "পৰিচয়"
+#~ msgid "Transport mode (datagram or connected) [datagram]: "
+#~ msgstr "পৰিবহন অৱসà§à¦¥à¦¾ (datagram অথবা connected) [datagram]: "
-#: ../tui/nmt-secret-agent.c:228
-msgid "Private key password"
-msgstr "বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কি' পাছৱাৰà§à¦¡"
+#~ msgid "There is 1 optional argument for 'WiMax' connection type.\n"
+#~ msgstr "'WiMax' সংযোগ ধৰণৰ বাবে ১ টা বৈকলà§à¦ªà¦¿à¦• তৰà§à¦• আছে।\n"
-#: ../tui/nmt-secret-agent.c:309
-msgid "Service"
-msgstr "সেৱা"
+#~ msgid "There are 4 optional arguments for 'PPPoE' connection type.\n"
+#~ msgstr "'PPPoE' সংযোগ ধৰণৰ বাবে ৪ টা বৈকলà§à¦ªà¦¿à¦• তৰà§à¦• আছে।\n"
-#: ../tui/nmt-secret-agent.c:340
-msgid "Authentication required by wireless network"
-msgstr "বেতাà¦à§° নেটৱাৰà§à¦•à§° দà§à¦¬à¦¾à§°à¦¾ পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£à§° পà§à§°à§Ÿà§‹à¦œà¦¨"
+#~ msgid ""
+#~ "There are 2 optional arguments for 'mobile broadband' connection type.\n"
+#~ msgstr "'মবাইল বà§à§°à¦¡à¦¬à§‡à¦£à§à¦¡' সংযোগ ধৰণৰ বাবে ২ টা বৈকলà§à¦ªà¦¿à¦• তৰà§à¦• আছে।\n"
-#: ../tui/nmt-secret-agent.c:341
-#, c-format
-msgid ""
-"Passwords or encryption keys are required to access the wireless network "
-"'%s'."
-msgstr ""
-"বেতাà¦à§° নেটৱাৰà§à¦• '%s' অভিগম কৰিবলে পাছৱাৰà§à¦¡à¦¸à¦®à§‚হ অথবা ইনকà§à§°à¦¿à¦ªà¦·à¦£ কি'সমূহৰ "
-"পà§à§°à§Ÿà§‹à¦œà¦¨à¥¤"
+#~ msgid "There is 1 optional argument for 'bluetooth' connection type.\n"
+#~ msgstr "'বà§à¦²à§à¦Ÿà§à¦¥' সংযোগ ধৰণৰ বাবে ১ টা বৈকলà§à¦ªà¦¿à¦• তৰà§à¦• আছে।\n"
-#: ../tui/nmt-secret-agent.c:349
-msgid "Wired 802.1X authentication"
-msgstr "তাà¦à§°à¦¯à§à¦•à§à¦¤ 802.1X পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£"
+#~ msgid "Bluetooth type (panu, dun-gsm or dun-cdma) [panu]: "
+#~ msgstr "বà§à¦²à§à¦Ÿà§à¦¥ ধৰণ (panu, dun-gsm or dun-cdma) [panu]: "
-#: ../tui/nmt-secret-agent.c:352
-msgid "Network name"
-msgstr "নেটৱাৰà§à¦•à§° নাম"
+#~ msgid "There are 4 optional arguments for 'VLAN' connection type.\n"
+#~ msgstr "'VLAN' সংযোগ ধৰণৰ বাবে ৪ টা বৈকলà§à¦ªà¦¿à¦• তৰà§à¦• আছে।\n"
-#: ../tui/nmt-secret-agent.c:359
-msgid "DSL authentication"
-msgstr "DSL পà§à§°à¦®à¦¾à¦£à§€à¦•à§°à¦£"
+#~ msgid "There are optional arguments for 'bond' connection type.\n"
+#~ msgstr "'বানà§à¦§à¦¨à§€' সংযোগ ধৰণৰ বাবে বৈকলà§à¦ªà¦¿à¦• তৰà§à¦•à¦¸à¦®à§‚হ আছে।\n"
-#: ../tui/nmt-secret-agent.c:367
-msgid "PIN code required"
-msgstr "PIN ক'ডৰ পà§à§°à§Ÿà§‹à¦œà¦¨"
+#~ msgid "Bonding monitoring mode (miimon or arp) [miimon]: "
+#~ msgstr "বানà§à¦§à¦¨à§€ মনিটৰিং অৱসà§à¦¥à¦¾ (miimon অথবা arp) [miimon]: "
-#: ../tui/nmt-secret-agent.c:368
-msgid "PIN code is needed for the mobile broadband device"
-msgstr "মবাইল বà§à§°à¦¡à¦¬à§‡à¦£à§à¦¡ সেৱাৰ বাবে PIN ক'ডৰ পà§à§°à§Ÿà§‹à¦œà¦¨"
+#~ msgid "There are 6 optional arguments for 'bridge' connection type.\n"
+#~ msgstr "'বà§à§°à¦¿à¦œ' সংযোগ ধৰণৰ বাবে ৬ টা বৈকলà§à¦ªà¦¿à¦• তৰà§à¦• আছে।\n"
-#: ../tui/nmt-secret-agent.c:370
-msgid "PIN"
-msgstr "PIN"
+#~ msgid "Error: 'stp': '%s'.\n"
+#~ msgstr "তà§à§°à§à¦Ÿà¦¿: 'stp': '%s'।\n"
-#: ../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 "There are 3 optional arguments for 'bridge-slave' connection type.\n"
+#~ msgstr "'bridge-slave' সংযোগ ধৰণৰ বাবে ৩ টা বৈকলà§à¦ªà¦¿à¦• তৰà§à¦• আছে।\n"
-#: ../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 "Hairpin (yes/no) [yes]: "
+#~ msgstr "হেয়াৰপিন (হয়/নহয়) [হয়]: "
-#: ../tui/nmt-slave-list.c:138
-msgid "Select the type of slave connection you wish to add."
-msgstr "আপà§à¦¨à¦¿ যোগ কৰিব বিচৰা সà§à¦²à§‡à¦‡à¦­ সংযোগৰ ধৰণ বাছক।"
+#~ msgid "Error: 'hairpin': '%s'.\n"
+#~ msgstr "তà§à§°à§à¦Ÿà¦¿: 'hairpin': '%s'।\n"
-#: ../tui/nmt-widget-list.c:142
-msgid "Add..."
-msgstr "যোগ কৰক..."
+#~ msgid "There is 1 optional argument for 'VPN' connection type.\n"
+#~ msgstr "'VPN' সংযোগ ধৰণৰ বাবে ১ টা বৈকলà§à¦ªà¦¿à¦• তৰà§à¦• আছে।\n"
-#: ../tui/nmt-widget-list.c:205
-msgid "Remove"
-msgstr "আতৰাওক"
+#~ msgid "There are 2 optional arguments for 'OLPC Mesh' connection type.\n"
+#~ msgstr "'OLPC Mesh' সংযোগ ধৰণৰ বাবে ২ টা বৈকলà§à¦ªà¦¿à¦• তৰà§à¦• আছে।\n"
-#: ../tui/nmtui-connect.c:82
-msgid "Activation failed"
-msgstr "সকà§à§°à¦¿à§Ÿà¦•à§°à¦£ বà§à¦¯à§°à§à¦¥ হল"
+#~ 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"
-#: ../tui/nmtui-connect.c:134
-msgid "Connecting..."
-msgstr "সংযোগ কৰা হৈছে..."
+#~ msgid "Error: '%s' setting not present\n"
+#~ msgstr "তà§à§°à§à¦Ÿà¦¿: '%s' সংহতি উপলবà§à¦§ নহয়\n"
-#: ../tui/nmtui-connect.c:159
-#, c-format
-msgid "Could not activate connection: %s"
-msgstr "সংযোগ সকà§à§°à¦¿à§Ÿ কৰিব পৰা নগল: %s"
+#~ 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"
-#: ../tui/nmtui-connect.c:218 ../tui/nmtui-connect.c:274
-msgid "Activate"
-msgstr "সকà§à§°à¦¿à§Ÿ কৰক"
+#~ msgid "0 (unknown)"
+#~ msgstr "0 (অজà§à¦žà¦¾à¦¤)"
-#: ../tui/nmtui-connect.c:220
-msgid "Deactivate"
-msgstr "নিষà§à¦•à§à§°à¦¿à§Ÿ কৰক"
+#~ msgid "any, "
+#~ msgstr "যিকোনো, "
-#: ../tui/nmtui-connect.c:279 ../tui/nmtui-edit.c:102 ../tui/nmtui.c:114
-msgid "Quit"
-msgstr "পà§à§°à¦¸à§à¦¥à¦¾à¦¨ কৰক"
+#~ msgid "900 MHz, "
+#~ msgstr "900 MHz, "
-#: ../tui/nmtui-connect.c:304
-#, c-format
-msgid "No such connection '%s'"
-msgstr "à¦à¦‡ ধৰণৰ কোনো সংযোগ '%s' নাই"
+#~ msgid "1800 MHz, "
+#~ msgstr "1800 MHz, "
-#: ../tui/nmtui-connect.c:306
-msgid "Connection is already active"
-msgstr "সংযোগ ইতিমধà§à¦¯à§‡ সকà§à§°à¦¿à§Ÿ"
+#~ msgid "1900 MHz, "
+#~ msgstr "1900 MHz, "
-#: ../tui/nmtui-edit.c:209
-msgid "Create"
-msgstr "সৃষà§à¦Ÿà¦¿ কৰক"
+#~ msgid "850 MHz, "
+#~ msgstr "850 MHz, "
-#: ../tui/nmtui-edit.c:350
-msgid "Select the type of connection you wish to create."
-msgstr "আপà§à¦¨à¦¿ সৃষà§à¦Ÿà¦¿ কৰিব বিচৰা সংযোগৰ ধৰণ বাছক।"
+#~ msgid "WCDMA 3GPP UMTS 2100 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../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 "WCDMA 3GPP UMTS 1800 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../tui/nmtui-edit.c:390 ../tui/nmtui-edit.c:406
-msgid "New Connection"
-msgstr "নতà§à¦¨ সংযোগ"
+#~ msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../tui/nmtui-edit.c:443
-#, c-format
-msgid "Unable to delete connection: %s"
-msgstr "সংযোগ মচি পেলাবলৈ অকà§à¦·à¦®: %s"
+#~ msgid "WCDMA 3GPP UMTS 800 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../tui/nmtui-edit.c:472
-#, c-format
-msgid "Are you sure you want to delete the connection '%s'?"
-msgstr "আপà§à¦¨à¦¿ নিশà§à¦šà¦¿à¦¤à§°à§‚পে '%s' সংযোগ মচিবলে ইচà§à¦›à§à¦• নে?"
+#~ msgid "WCDMA 3GPP UMTS 850 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../tui/nmtui-edit.c:486
-#, c-format
-msgid "Could not delete connection: %s"
-msgstr "সংযোগ মচিব পৰা নগল: %s"
+#~ msgid "WCDMA 3GPP UMTS 900 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../tui/nmtui-hostname.c:47
-msgid "Set Hostname"
-msgstr "হসà§à¦Ÿà¦¨à¦¾à¦® সংহতি কৰক"
+#~ msgid "WCDMA 3GPP UMTS 1700 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../tui/nmtui-hostname.c:55
-msgid "Hostname"
-msgstr "হসà§à¦Ÿà¦¨à¦¾à¦®"
+#~ msgid "WCDMA 3GPP UMTS 1900 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 1900 MHz, "
-#. 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 "WCDMA 3GPP UMTS 2600 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 2600 MHz, "
-#: ../tui/nmtui-hostname.c:116
-#, c-format
-msgid "Unable to set hostname: %s"
-msgstr "হসà§à¦Ÿà¦¨à¦¾à¦® সংহতি কৰিবলৈ অকà§à¦·à¦®: %s"
+#~ msgid "'%s' is not valid (use <dest IP>/prefix <next-hop IP> [metric])"
+#~ msgstr "'%s' বৈধ নহয় (<dest IP>/prefix <next-hop IP> [metric] বà§à¦¯à§±à¦¹à¦¾à§° কৰক)"
-#: ../tui/nmtui.c:59 ../tui/nmtui.c:62
-msgid "connection"
-msgstr "সংযোগ"
+#~ msgid "'%s' doesn't match the virtual interface name '%s'"
+#~ msgstr "'%s' ভাৰছà§à§±à§‡à¦² আনà§à¦¤à¦ƒà¦ªà§ƒà¦·à§à¦  নাম '%s' ৰ সৈতে মিল নাখায়"
-#: ../tui/nmtui.c:60
-msgid "Edit a connection"
-msgstr "à¦à¦Ÿà¦¾ সংযোগ সমà§à¦ªà¦¾à¦¦à¦¨ কৰক"
+#~ msgid "IPv4 configuration is not allowed for slave"
+#~ msgstr "IPv4 সংৰূপ সà§à¦²à§‡à¦‡à¦­à§° বাবে অনà§à¦®à§‹à¦¦à¦¿à¦¤ নহয়"
-#: ../tui/nmtui.c:63
-msgid "Activate a connection"
-msgstr "à¦à¦Ÿà¦¾ সংযোগ সকà§à§°à¦¿à§Ÿ কৰক"
+#~ msgid "IPv6 configuration is not allowed for slave"
+#~ msgstr "IPv6 সংৰূপ সà§à¦²à§‡à¦‡à¦­à§° বাবে অনà§à¦®à§‹à¦¦à¦¿à¦¤ নহয়"
-#: ../tui/nmtui.c:65
-msgid "new hostname"
-msgstr "নতà§à¦¨ হসà§à¦Ÿà¦¨à¦¾à¦®"
+#~ msgid "Invalid option. Please use --help to see a list of valid options.\n"
+#~ msgstr ""
+#~ "অবৈধ বিকলà§à¦ªà¥¤ বৈধ বিকলà§à¦ªà¦¸à¦®à§‚হৰ à¦à¦Ÿà¦¾ তালিকা চাবলে অনà§à¦—à§à§°à¦¹ কৰি --help বà§à¦¯à§±à¦¹à¦¾à§° কৰক।\n"
-#: ../tui/nmtui.c:66
-msgid "Set system hostname"
-msgstr "চিসà§à¦Ÿà§‡à¦®à§° হসà§à¦Ÿà¦¨à¦¾à¦® সংহতি কৰক"
+#~ msgid "error occurred while waiting for data on socket"
+#~ msgstr "চকেটত তথà§à¦¯à§° বাবে অপেকà§à¦·à¦¾ কৰোতে তà§à§°à§à¦Ÿà¦¿ দেখা দিলে"
-#: ../tui/nmtui.c:89
-msgid "NetworkManager TUI"
-msgstr "NetworkManager TUI"
+#~ msgid "error processing netlink message: %s"
+#~ msgstr "netlink বাৰà§à¦¤à¦¾ পà§à§°à¦•à§à§°à¦¿à§Ÿà¦¾ কৰোতে তà§à§°à§à¦Ÿà¦¿: %s"
-#: ../tui/nmtui.c:97
-msgid "Please select an option"
-msgstr "অনà§à¦—à§à§°à¦¹ কৰি à¦à¦Ÿà¦¾ বিকলà§à¦ª বাছক"
+#~ msgid "unable to connect to netlink for monitoring link status: %s"
+#~ msgstr "লিংক অৱসà§à¦¥à¦¾ পৰà§à¦¯à¦¬à§‡à¦•à§à¦·à¦£ কৰিবলে netlink লে সংযোগ কৰিবলে অকà§à¦·à¦®: %s"
-#: ../tui/nmtui.c:154
-msgid "Usage"
-msgstr "বà§à¦¯à§±à¦¹à¦¾à§°"
+#~ msgid "unable to enable netlink handle credential passing: %s"
+#~ msgstr "netlink হেনà§à¦¡à§‡à¦² তথà§à¦¯ পà§à§°à§‡à§°à¦£ সামৰà§à¦¥à¦¬à¦¾à¦¨ কৰিবলে অকà§à¦·à¦®: %s"
-#: ../tui/nmtui.c:221
-msgid "Could not parse arguments"
-msgstr "তৰà§à¦•à¦¸à¦®à§‚হ বিশà§à¦²à§‡à¦·à¦£ কৰিব পৰা নগল"
+#~ msgid "unable to allocate netlink handle for monitoring link status: %s"
+#~ msgstr "লিংক অৱসà§à¦¥à¦¾ পৰà§à¦¯à¦¬à§‡à¦•à§à¦·à¦£ কৰিবলে netlink হপনà§à¦¡à§‡à¦² আবণà§à¦Ÿà¦¨ কৰিবলে অকà§à¦·à¦®: %s"
-#: ../tui/nmtui.c:229
-msgid "NetworkManager is not running."
-msgstr "NetworkManager চলি থকা নাই।"
+#~ msgid "unable to join netlink group: %s"
+#~ msgstr "netlink দলত অংশগà§à§°à¦¹à¦£ কৰিবলে অকà§à¦·à¦®: %s"
#~ msgid ""
#~ "save :: save the connection\n"
@@ -7071,7 +7860,7 @@ msgstr "NetworkManager চলি থকা নাই।"
#~ "\n"
#~ "ARGUMENTS := active [[id | uuid | path | apath] <ID>]\n"
#~ "\n"
-#~ "à¦à¦Ÿà¦¾ নেটৱাৰà§à¦•à§° সৈতে সংযোগ কৰিবলৈ à¦à¦Ÿà¦¾ ডিভাইচ দà§à¦¬à¦¾à§°à¦¾ বৰà§à¦¤à¦®à¦¾à¦¨à§‡ বà§à¦¯à§±à¦¹à¦¾à§° কৰা "
+#~ "à¦à¦Ÿà¦¾ নেটৱৰà§à¦•à§° সৈতে সংযোগ কৰিবলৈ à¦à¦Ÿà¦¾ ডিভাইচ দà§à¦¬à¦¾à§°à¦¾ বৰà§à¦¤à¦®à¦¾à¦¨à§‡ বà§à¦¯à§±à¦¹à¦¾à§° কৰা "
#~ "সংযোগসমূহ দেখà§à§±à¦¾à¦“ক।\n"
#~ "à¦à¦Ÿà¦¾ পà§à§°à¦¾à¦šà¦² নহোৱাকৈ, সকলো সকà§à§°à¦¿à§Ÿ সংযোগ তালিকাভà§à¦•à§à¦¤ কৰা হয়। যেতিয়া <ID> পà§à§°à¦¦à¦¾à¦¨ "
#~ "কৰা হয়,\n"
diff --git a/po/bn_IN.po b/po/bn_IN.po
index 02a511dcf..414620d0e 100644
--- a/po/bn_IN.po
+++ b/po/bn_IN.po
@@ -4,359 +4,499 @@
# This file is distributed under the same license as the NetworkManager package.
#
# Runa Bhattacharjee <runab@redhat.com>, 2009, 2010, 2012.
+# sray <sray@redhat.com>, 2013. #zanata.
+# sray <sray@redhat.com>, 2014. #zanata.
msgid ""
msgstr ""
"Project-Id-Version: bn_IN\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-26 03:25+0000\n"
-"PO-Revision-Date: 2012-11-26 23:38+0530\n"
-"Last-Translator: Runa Bhattacharjee <runab@redhat.com>\n"
-"Language-Team: Bengali (India) <anubad@lists.ankur.org.in>\n"
-"Language: \n"
+"product=NetworkManager&keywords=I18N+L10N&component=Translations\n"
+"POT-Creation-Date: 2014-09-28 22:29+0000\n"
+"PO-Revision-Date: 2014-09-30 11:55+0000\n"
+"Last-Translator: \n"
+"Language-Team: Bengali (India) <kde-i18n-doc@kde.org>\n"
+"Language: bn-IN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 1.2\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
+#: ../clients/cli/common.c:38 ../clients/cli/common.c:50
+#: ../clients/cli/common.c:58 ../clients/cli/common.c:69
+#: ../clients/cli/connections.c:169 ../clients/cli/connections.c:191
msgid "GROUP"
msgstr "GROUP"
#. 0
-#: ../cli/src/common.c:33 ../cli/src/common.c:53
+#: ../clients/cli/common.c:39 ../clients/cli/common.c:59
msgid "ADDRESS"
msgstr "ADDRESS"
#. 1
-#: ../cli/src/common.c:34 ../cli/src/common.c:54
+#: ../clients/cli/common.c:40 ../clients/cli/common.c:60
msgid "ROUTE"
msgstr "ROUTE"
#. 2
-#: ../cli/src/common.c:35 ../cli/src/common.c:55
+#: ../clients/cli/common.c:41 ../clients/cli/common.c:61
msgid "DNS"
msgstr "DNS"
#. 3
-#: ../cli/src/common.c:36 ../cli/src/common.c:56
+#: ../clients/cli/common.c:42 ../clients/cli/common.c:62
msgid "DOMAIN"
msgstr "DOMAIN"
#. 4
-#: ../cli/src/common.c:37
+#: ../clients/cli/common.c:43
msgid "WINS"
msgstr "WINS"
#. 0
-#: ../cli/src/common.c:45 ../cli/src/common.c:64
+#: ../clients/cli/common.c:51 ../clients/cli/common.c:70
msgid "OPTION"
msgstr "OPTION"
-#: ../cli/src/common.c:366
+#: ../clients/cli/common.c:377 ../clients/cli/settings.c:3048
+#: ../clients/cli/settings.c:3067
+#, c-format
+msgid "invalid IPv4 address '%s'"
+msgstr "অবৈধ IPv4 ঠিকানা '%s'"
+
+#: ../clients/cli/common.c:385
+#, c-format
+msgid "invalid prefix '%s'; <1-32> allowed"
+msgstr "অবৈধ পà§à¦°à§‡à¦«à¦¿à¦•à§à¦¸ '%s'; <1-32> অনà§à¦®à§‹à¦¦à¦¿à¦¤"
+
+#: ../clients/cli/common.c:392 ../clients/cli/common.c:445
+#, c-format
+msgid "invalid gateway '%s'"
+msgstr "অবৈধ গেটওয়ে '%s'"
+
+#: ../clients/cli/common.c:430 ../clients/cli/settings.c:3394
+#: ../clients/cli/settings.c:3413
+#, c-format
+msgid "invalid IPv6 address '%s'"
+msgstr "অবৈধ IPv6 ঠিকানা '%s'"
+
+#: ../clients/cli/common.c:438
+#, c-format
+msgid "invalid prefix '%s'; <1-128> allowed"
+msgstr "অবৈধ পà§à¦°à§‡à¦«à¦¿à¦•à§à¦¸ '%s'; <1-128> অনà§à¦®à§‹à¦¦à¦¿à¦¤"
+
+#: ../clients/cli/common.c:521
+#, c-format
+#| msgid "invalid next hop address '%s'"
+msgid "invalid route destination address '%s'"
+msgstr "অবৈধ রাউট গনà§à¦¤à¦¬à§à¦¯à¦¸à§à¦¥à¦¾à¦¨ ঠিকানা '%s'"
+
+#: ../clients/cli/common.c:528
+#, c-format
+#| msgid "invalid prefix '%s'; <1-32> allowed"
+msgid "invalid prefix '%s'; <1-%d> allowed"
+msgstr "অবৈধ পà§à¦°à§‡à¦«à¦¿à¦•à§à¦¸ '%s'; <1-%d> অনà§à¦®à§‹à¦¦à¦¿à¦¤"
+
+#: ../clients/cli/common.c:538
+#, c-format
+msgid "invalid next hop address '%s'"
+msgstr "অবৈধ পরবরà§à¦¤à§€ হপ ঠিকানা '%s'"
+
+#: ../clients/cli/common.c:543
+#, c-format
+msgid ""
+"the second component of route ('%s') is neither a next hop address nor a "
+"metric"
+msgstr ""
+"('%s') রাউটের দà§à¦¬à¦¿à¦¤à§€à§Ÿ উপাদান à¦à¦•à¦Ÿà¦¿ পরবরà§à¦¤à§€ হপ ঠিকানা বা মেটà§à¦°à¦¿à¦• কিছà§à¦‡ নয়"
+
+#: ../clients/cli/common.c:553
+#, c-format
+msgid "invalid metric '%s'"
+msgstr "অবৈধ মেটà§à¦°à¦¿à¦• `%s'"
+
+#: ../clients/cli/common.c:562
+msgid "default route cannot be added (NetworkManager handles it by itself)"
+msgstr ""
+"ডিফলà§à¦Ÿ রাউট যোগ করা যাবে না (NetworkManager নিজেই à¦à¦Ÿà¦¿à¦° বà§à¦¯à¦¬à¦¸à§à¦¥à¦¾à¦ªà¦¨à¦¾ করে)"
+
+#: ../clients/cli/common.c:650
msgid "unmanaged"
msgstr "পরিচালিত নয়"
-#: ../cli/src/common.c:368
+#: ../clients/cli/common.c:652
msgid "unavailable"
msgstr "উপলবà§à¦§ নয়"
-#: ../cli/src/common.c:370 ../cli/src/network-manager.c:120
+#: ../clients/cli/common.c:654 ../clients/cli/network-manager.c:259
msgid "disconnected"
msgstr "বিচà§à¦›à¦¿à¦¨à§à¦¨"
-#: ../cli/src/common.c:372
+#: ../clients/cli/common.c:656
msgid "connecting (prepare)"
msgstr "সংযোগ করা হচà§à¦›à§‡ (পà§à¦°à¦¸à§à¦¤à§à¦¤à¦¿)"
-#: ../cli/src/common.c:374
+#: ../clients/cli/common.c:658
msgid "connecting (configuring)"
msgstr "সংযোগ করা হচà§à¦›à§‡ (কনফিগার করা হচà§à¦›à§‡)"
-#: ../cli/src/common.c:376
+#: ../clients/cli/common.c:660
msgid "connecting (need authentication)"
msgstr "সংযোগ করা হচà§à¦›à§‡ (অনà§à¦®à§‹à¦¦à¦¨ পà§à¦°à§Ÿà§‹à¦œà¦¨)"
-#: ../cli/src/common.c:378
+#: ../clients/cli/common.c:662
msgid "connecting (getting IP configuration)"
msgstr "সংযোগ করা হচà§à¦›à§‡ (IP কনফিগারেশন পà§à¦°à¦¾à¦ªà§à¦¤ করা হচà§à¦›à§‡)"
-#: ../cli/src/common.c:380
+#: ../clients/cli/common.c:664
msgid "connecting (checking IP connectivity)"
msgstr "সংযোগ করা হচà§à¦›à§‡ (IP সংযোগ পà§à¦°à¦¾à¦ªà§à¦¤ করা হচà§à¦›à§‡)"
-#: ../cli/src/common.c:382
+#: ../clients/cli/common.c:666
msgid "connecting (starting secondary connections)"
msgstr "সংযোগ করা হচà§à¦›à§‡ (দà§à¦¬à¦¿à¦¤à§€à§Ÿ সংযোগ আরমà§à¦­ করা হচà§à¦›à§‡)"
-#: ../cli/src/common.c:384 ../cli/src/network-manager.c:116
+#: ../clients/cli/common.c:668 ../clients/cli/network-manager.c:255
msgid "connected"
msgstr "সংযোগ সà§à¦¥à¦¾à¦ªà¦¿à¦¤"
-#: ../cli/src/common.c:386 ../cli/src/connections.c:635
+#: ../clients/cli/common.c:670 ../clients/cli/connections.c:532
msgid "deactivating"
msgstr "নিষà§à¦•à§à¦°à¦¿à§Ÿ করা হচà§à¦›à§‡"
-#: ../cli/src/common.c:388
+#: ../clients/cli/common.c:672
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:533 ../src/main.c:451
-#: ../src/main.c:470
+#: ../clients/cli/common.c:674 ../clients/cli/connections.c:537
+#: ../clients/cli/connections.c:560 ../clients/cli/connections.c:1621
+#: ../clients/cli/devices.c:889 ../clients/cli/network-manager.c:262
+#: ../clients/cli/network-manager.c:280 ../clients/cli/network-manager.c:410
+#: ../clients/cli/network-manager.c:426 ../clients/cli/settings.c:702
+#: ../clients/cli/settings.c:764 ../clients/cli/settings.c:1056
+#: ../clients/cli/utils.c:1123 ../src/main.c:504 ../src/main.c:532
msgid "unknown"
msgstr "অজানা"
-#: ../cli/src/common.c:399
+#: ../clients/cli/common.c:683
msgid "No reason given"
msgstr "কোনো কারণ পেশ করা হয়নি"
-#: ../cli/src/common.c:402
+#: ../clients/cli/common.c:686 ../clients/cli/connections.c:2389
+#, c-format
msgid "Unknown error"
msgstr "অজানা তà§à¦°à§à¦Ÿà¦¿"
-#: ../cli/src/common.c:405
+#: ../clients/cli/common.c:689
msgid "Device is now managed"
msgstr "ডিভাইস বরà§à¦¤à¦®à¦¾à¦¨à§‡ পরিচালিত হবে"
-#: ../cli/src/common.c:408
+#: ../clients/cli/common.c:692
msgid "Device is now unmanaged"
msgstr "ডিভাইস বরà§à¦¤à¦®à¦¾à¦¨à§‡ পরিচালিত নয়"
-#: ../cli/src/common.c:411
+#: ../clients/cli/common.c:695
msgid "The device could not be readied for configuration"
msgstr "কনফিগারেশনের কারণে ডিভাইসটি পà§à¦°à¦¸à§à¦¤à§à¦¤ করা যায়নি"
-#: ../cli/src/common.c:414
+#: ../clients/cli/common.c:698
msgid ""
"IP configuration could not be reserved (no available address, timeout, etc.)"
msgstr ""
"IP কনফিগারেশন সংরকà§à¦·à¦£ করা যায়নি (ঠিকানা উপলবà§à¦§ নেই, সময়সীমা উতà§à¦¤à§€à¦°à§à¦£, ইতà§à¦¯à¦¾à¦¦à¦¿ "
")"
-#: ../cli/src/common.c:417
+#: ../clients/cli/common.c:701
msgid "The IP configuration is no longer valid"
msgstr "à¦à¦‡ IP কনফিগারেশন à¦à¦–ন বৈধ নয়"
-#: ../cli/src/common.c:420
+#: ../clients/cli/common.c:704
msgid "Secrets were required, but not provided"
msgstr "গোপনীয় তথà§à¦¯ আবশà§à¦¯à¦•, কিনà§à¦¤à§ উপলবà§à¦§ নয়"
-#: ../cli/src/common.c:423
+#: ../clients/cli/common.c:707
msgid "802.1X supplicant disconnected"
msgstr "802.1X সাপà§à¦²à¦¿à¦•à§à¦¯à¦¾à¦¨à§à¦Ÿà§‡à¦° সংযোগ বিচà§à¦›à¦¿à¦¨à§à¦¨ করা হয়েছে"
-#: ../cli/src/common.c:426
+#: ../clients/cli/common.c:710
msgid "802.1X supplicant configuration failed"
msgstr "802.1X সাপà§à¦²à¦¿à¦•à§à¦¯à¦¾à¦¨à§à¦Ÿà§‡à¦° কনফিগারেশন বিফল হয়েছে"
-#: ../cli/src/common.c:429
+#: ../clients/cli/common.c:713
msgid "802.1X supplicant failed"
msgstr "802.1X সাপà§à¦²à¦¿à¦•à§à¦¯à¦¾à¦¨à§à¦Ÿ বিফল হয়েছে"
-#: ../cli/src/common.c:432
+#: ../clients/cli/common.c:716
msgid "802.1X supplicant took too long to authenticate"
msgstr "802.1X সাপà§à¦²à¦¿à¦•à§à¦¯à¦¾à¦¨à§à¦Ÿ অনà§à¦®à§‹à¦¦à¦¨ করতে অতà§à¦¯à¦¾à¦§à¦¿à¦• সময় বà§à¦¯à§Ÿ হয়েছে"
-#: ../cli/src/common.c:435
+#: ../clients/cli/common.c:719
msgid "PPP service failed to start"
msgstr "PPP পরিসেবা আরমà§à¦­ করতে বà§à¦¯à¦°à§à¦¥"
-#: ../cli/src/common.c:438
+#: ../clients/cli/common.c:722
msgid "PPP service disconnected"
msgstr "PPP পরিসেবার সাথে সংযোগ বিচà§à¦›à¦¿à¦¨à§à¦¨ হয়েছে"
-#: ../cli/src/common.c:441
+#: ../clients/cli/common.c:725
msgid "PPP failed"
msgstr "PPP বিফল"
-#: ../cli/src/common.c:444
+#: ../clients/cli/common.c:728
msgid "DHCP client failed to start"
msgstr "DHCP কà§à¦²à¦¾à§Ÿà§‡à¦¨à§à¦Ÿ আরমà§à¦­ করতে বà§à¦¯à¦°à§à¦¥"
-#: ../cli/src/common.c:447
+#: ../clients/cli/common.c:731
msgid "DHCP client error"
msgstr "DHCP কà§à¦²à¦¾à§Ÿà§‡à¦¨à§à¦Ÿ সংকà§à¦°à¦¾à¦¨à§à¦¤ তà§à¦°à§à¦Ÿà¦¿"
-#: ../cli/src/common.c:450
+#: ../clients/cli/common.c:734
msgid "DHCP client failed"
msgstr "DHCP কà§à¦²à¦¾à§Ÿà§‡à¦¨à§à¦Ÿ বিফল হয়েছে"
-#: ../cli/src/common.c:453
+#: ../clients/cli/common.c:737
msgid "Shared connection service failed to start"
msgstr "যৌথরূপে বà§à¦¯à¦¬à¦¹à§ƒà¦¤ সংযোগ পরিসেবা আরমà§à¦­ হতে বà§à¦¯à¦°à§à¦¥"
-#: ../cli/src/common.c:456
+#: ../clients/cli/common.c:740
msgid "Shared connection service failed"
msgstr "যৌথরূপে বà§à¦¯à¦¬à¦¹à§ƒà¦¤ পরিসেবা বিফল হয়েছে"
-#: ../cli/src/common.c:459
+#: ../clients/cli/common.c:743
msgid "AutoIP service failed to start"
msgstr "AutoIP পরিসেবা আরমà§à¦­ করতে বà§à¦¯à¦°à§à¦¥"
-#: ../cli/src/common.c:462
+#: ../clients/cli/common.c:746
msgid "AutoIP service error"
msgstr "AutoIP পরিসেবায় তà§à¦°à§à¦Ÿà¦¿"
-#: ../cli/src/common.c:465
+#: ../clients/cli/common.c:749
msgid "AutoIP service failed"
msgstr "AutoIP পরিসেবা বিফল"
-#: ../cli/src/common.c:468
+#: ../clients/cli/common.c:752
msgid "The line is busy"
msgstr "লাইন বরà§à¦¤à¦®à¦¾à¦¨à§‡ বà§à¦¯à¦¸à§à¦¤"
-#: ../cli/src/common.c:471
+#: ../clients/cli/common.c:755
msgid "No dial tone"
msgstr "ডায়েল টোন অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤"
-#: ../cli/src/common.c:474
+#: ../clients/cli/common.c:758
msgid "No carrier could be established"
msgstr "কোনো কেরিয়ার নিরà§à¦§à¦¾à¦°à¦£ করা যায়নি"
-#: ../cli/src/common.c:477
+#: ../clients/cli/common.c:761
msgid "The dialing request timed out"
msgstr "ডায়াল করার অনà§à¦°à§‹à¦§à§‡à¦° সময়সীমা উতà§à¦¤à§€à¦°à§à¦£ হয়েছে"
-#: ../cli/src/common.c:480
+#: ../clients/cli/common.c:764
msgid "The dialing attempt failed"
msgstr "ডায়েল করার পà§à¦°à¦šà§‡à¦·à§à¦Ÿà¦¾ বà§à¦¯à¦°à§à¦¥ হয়েছে"
-#: ../cli/src/common.c:483
+#: ../clients/cli/common.c:767
msgid "Modem initialization failed"
msgstr "মোডেম আরমà§à¦­ করতে বà§à¦¯à¦°à§à¦¥"
-#: ../cli/src/common.c:486
+#: ../clients/cli/common.c:770
msgid "Failed to select the specified APN"
msgstr "চিহà§à¦¨à¦¿à¦¤ APN নিরà§à¦¬à¦¾à¦šà¦¨ করতে বà§à¦¯à¦°à§à¦¥"
-#: ../cli/src/common.c:489
+#: ../clients/cli/common.c:773
msgid "Not searching for networks"
msgstr "নেটওয়ারà§à¦• সনà§à¦§à¦¾à¦¨ করা হচà§à¦›à§‡ না"
-#: ../cli/src/common.c:492
+#: ../clients/cli/common.c:776
msgid "Network registration denied"
msgstr "নেটওয়ারà§à¦• নিবনà§à¦§à¦¨ পà§à¦°à¦¤à§à¦¯à¦¾à¦–à§à¦¯à¦¾à¦¨ করা হয়েছে"
-#: ../cli/src/common.c:495
+#: ../clients/cli/common.c:779
msgid "Network registration timed out"
msgstr "নেটওয়ারà§à¦• নিবনà§à¦§à¦¨ করতে সময়সীমা উতà§à¦¤à§€à¦°à§à¦£ হয়েছে"
-#: ../cli/src/common.c:498
+#: ../clients/cli/common.c:782
msgid "Failed to register with the requested network"
msgstr "অনà§à¦°à§‹à¦§ করা নেটওয়ারà§à¦•à§‡ নিবনà§à¦§à¦¨ করতে বà§à¦¯à¦°à§à¦¥"
-#: ../cli/src/common.c:501
+#: ../clients/cli/common.c:785
msgid "PIN check failed"
msgstr "PIN পরীকà§à¦·à¦¾ করতে বà§à¦¯à¦°à§à¦¥"
-#: ../cli/src/common.c:504
+#: ../clients/cli/common.c:788
msgid "Necessary firmware for the device may be missing"
msgstr "ডিভাইসের জনà§à¦¯ আবশà§à¦¯à¦• ফারà§à¦®à¦“য়à§à¦¯à¦¾à¦° অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤ থাকতে পারে"
-#: ../cli/src/common.c:507
+#: ../clients/cli/common.c:791
msgid "The device was removed"
msgstr "ডিভাইসটি মà§à¦›à§‡ ফেলা হয়েছে"
-#: ../cli/src/common.c:510
+#: ../clients/cli/common.c:794
msgid "NetworkManager went to sleep"
msgstr "NetworkManager নিদà§à¦°à¦¿à¦¤ অবসà§à¦¥à¦¾à§Ÿ রয়েছে"
-#: ../cli/src/common.c:513
+#: ../clients/cli/common.c:797
msgid "The device's active connection disappeared"
msgstr "ডিভাইসের সকà§à¦°à¦¿à§Ÿ সংযোগটি আড়াল হয়ে গেছে"
-#: ../cli/src/common.c:516
+#: ../clients/cli/common.c:800
msgid "Device disconnected by user or client"
msgstr "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€ অথবা কà§à¦²à¦¾à§Ÿà§‡à¦¨à§à¦Ÿ দà§à¦¬à¦¾à¦°à¦¾ ডিভাইস বিচà§à¦›à¦¿à¦¨à§à¦¨ করা হয়েছে"
-#: ../cli/src/common.c:519
+#: ../clients/cli/common.c:803
msgid "Carrier/link changed"
msgstr "কà§à¦¯à¦¾à¦°à¦¿à§Ÿà¦¾à¦°/লিংক পরিবরà§à¦¤à¦¿à¦¤ হয়েছে"
-#: ../cli/src/common.c:522
+#: ../clients/cli/common.c:806
msgid "The device's existing connection was assumed"
msgstr "ডিভাইসের উপসà§à¦¥à¦¿à¦¤ সংযোগটি অনà§à¦®à¦¾à¦¨ করা হয়েছে"
-#: ../cli/src/common.c:525
+#: ../clients/cli/common.c:809
msgid "The supplicant is now available"
msgstr "সাপà§à¦²à¦¿à¦•à§à¦¯à¦¾à¦¨à§à¦Ÿ বরà§à¦¤à¦®à¦¾à¦¨à§‡ উপলবà§à¦§ রয়েছে"
-#: ../cli/src/common.c:528
+#: ../clients/cli/common.c:812
msgid "The modem could not be found"
msgstr "মোডেম পাওয়া যায়নি"
-#: ../cli/src/common.c:531
+#: ../clients/cli/common.c:815
msgid "The Bluetooth connection failed or timed out"
msgstr "বà§à¦²à§-টà§à¦¥ সংযোগ বিফল হয়েছে অথবা à¦à¦° মেয়াদ উতà§à¦¤à§€à¦°à§à¦£ হয়েছে"
-#: ../cli/src/common.c:534
+#: ../clients/cli/common.c:818
msgid "GSM Modem's SIM card not inserted"
msgstr "GSM মোডেমের SIM কারà§à¦¡ সà§à¦¥à¦¾à¦ªà¦¨ করা হয়নি"
-#: ../cli/src/common.c:537
+#: ../clients/cli/common.c:821
msgid "GSM Modem's SIM PIN required"
msgstr "GSM মোডেমের SIM PIN পà§à¦°à§Ÿà§‹à¦œà¦¨"
-#: ../cli/src/common.c:540
+#: ../clients/cli/common.c:824
msgid "GSM Modem's SIM PUK required"
msgstr "GSM মোডেমের SIM PUK পà§à¦°à§Ÿà§‹à¦œà¦¨"
-#: ../cli/src/common.c:543
+#: ../clients/cli/common.c:827
msgid "GSM Modem's SIM wrong"
msgstr "GSM মোডেমের SIM সঠিক নয়"
-#: ../cli/src/common.c:546
+#: ../clients/cli/common.c:830
msgid "InfiniBand device does not support connected mode"
msgstr "InfiniBand ডিভাইস দà§à¦¬à¦¾à¦°à¦¾ সংযà§à¦•à§à¦¤ মোড সমরà§à¦¥à¦¿à¦¤ হয় না"
-#: ../cli/src/common.c:549
+#: ../clients/cli/common.c:833
msgid "A dependency of the connection failed"
msgstr "সংযোগের নিরà§à¦­à¦°à¦¤à¦¾ বিফল হয়েছে"
-#: ../cli/src/common.c:552
+#: ../clients/cli/common.c:836
msgid "A problem with the RFC 2684 Ethernet over ADSL bridge"
msgstr "ADSL বà§à¦°à¦¿à¦œà§‡à¦° সাথে বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦¯à§‹à¦—à§à¦¯ RFC 2684 ইথারনেট সমà§à¦ªà¦°à§à¦•à¦¿à¦¤ সমসà§à¦¯à¦¾"
-#: ../cli/src/common.c:555
+#: ../clients/cli/common.c:839
msgid "ModemManager is unavailable"
msgstr "ModemManager উপলবà§à¦§ নেই"
-#: ../cli/src/common.c:558
+#: ../clients/cli/common.c:842
msgid "The Wi-Fi network could not be found"
msgstr "ওয়াই-ফাই নেটওয়ারà§à¦• পাওয়া যায়নি"
-#: ../cli/src/common.c:561
+#: ../clients/cli/common.c:845
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
+#: ../clients/cli/common.c:848
+msgid "DCB or FCoE setup failed"
+msgstr "DCB বা FCoE সেট অাপ বà§à¦¯à¦°à§à¦¥ হয়েছে"
+
+#: ../clients/cli/common.c:851
+msgid "teamd control failed"
+msgstr "teamd নিয়নà§à¦¤à§à¦°à¦£ বà§à¦¯à¦°à§à¦¥ হয়েছে"
+
+#: ../clients/cli/common.c:854
+#| msgid "ModemManager is unavailable"
+msgid "Modem failed or no longer available"
+msgstr "Modem বà§à¦¯à¦°à§à¦¥ হয়েছে বা অার উপলবà§à¦§ নেই"
+
+#: ../clients/cli/common.c:857
+#| msgid "ModemManager is unavailable"
+msgid "Modem now ready and available"
+msgstr "Modem à¦à¦–ন পà§à¦°à¦¸à§à¦¤à§à¦¤ à¦à¦¬à¦‚ উপলবà§à¦§"
+
+#: ../clients/cli/common.c:860
+msgid "SIM PIN was incorrect"
+msgstr "SIM PIN নিরà§à¦­à§à¦² নয়"
+
+#. TRANSLATORS: Unknown reason for a device state change (NMDeviceStateReason)
+#: ../clients/cli/common.c:864 ../clients/cli/devices.c:616
+#: ../libnm-glib/nm-device.c:1812
msgid "Unknown"
msgstr "অজানা"
+#: ../clients/cli/common.c:906
+#, c-format
+msgid "invalid priority map '%s'"
+msgstr "অবৈধ অগà§à¦°à¦¾à¦§à¦¿à¦•à¦¾à¦° মানচিতà§à¦° '%s'"
+
+#: ../clients/cli/common.c:913 ../clients/cli/common.c:919
+#, c-format
+msgid "priority '%s' is not valid (<0-%ld>)"
+msgstr "অগà§à¦°à¦¾à¦§à¦¿à¦•à¦¾à¦° '%s' বৈধ নয় (<0-%ld>)"
+
+#: ../clients/cli/common.c:986
+#, c-format
+msgid "'%s' is not a valid team configuration or file name."
+msgstr "'%s' à¦à¦•à¦Ÿà¦¿ বৈধ টিম কনফিগারেশন বা ফাইল নাম নয়।"
+
+#. define some prompts for connection editor
+#: ../clients/cli/connections.c:40
+msgid "Setting name? "
+msgstr "সেটিং নাম? "
+
+#: ../clients/cli/connections.c:41
+msgid "Property name? "
+msgstr "বিশিষà§à¦Ÿà¦¤à¦¾ নাম? "
+
+#: ../clients/cli/connections.c:42
+msgid "Enter connection type: "
+msgstr "সংযোগ ধরন দিন: "
+
+#. define some other prompts
+#: ../clients/cli/connections.c:45
+msgid "Connection type: "
+msgstr "সংযোগ ধরন: "
+
+#: ../clients/cli/connections.c:46
+msgid "VPN type: "
+msgstr "VPN ধরন: "
+
+#: ../clients/cli/connections.c:47
+msgid "Bond master: "
+msgstr "বনà§à¦¡ মাসà§à¦Ÿà¦¾à¦°: "
+
+#: ../clients/cli/connections.c:48
+msgid "Team master: "
+msgstr "টিম মাসà§à¦Ÿà¦¾à¦°: "
+
+#: ../clients/cli/connections.c:49
+msgid "Bridge master: "
+msgstr "বà§à¦°à¦¿à¦œ মাসà§à¦Ÿà¦¾à¦°: "
+
+#: ../clients/cli/connections.c:50
+msgid "Connection (name, UUID, or path): "
+msgstr "সংযোগ (নাম, UUID, বা পাথ): "
+
#. 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
+#: ../clients/cli/connections.c:58 ../clients/cli/connections.c:170
+#: ../clients/cli/devices.c:55 ../clients/cli/devices.c:84
+#: ../clients/cli/devices.c:94 ../clients/cli/devices.c:105
+#: ../clients/cli/devices.c:114 ../clients/cli/devices.c:129
+#: ../clients/cli/devices.c:142 ../clients/cli/devices.c:168
+#: ../clients/cli/devices.c:183 ../clients/cli/devices.c:192
+#: ../clients/cli/devices.c:201
msgid "NAME"
msgstr "NAME"
#. 0
#. 1
-#: ../cli/src/connections.c:60 ../cli/src/connections.c:130
+#: ../clients/cli/connections.c:59 ../clients/cli/connections.c:171
msgid "UUID"
msgstr "UUID"
@@ -364,993 +504,3407 @@ 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
+#: ../clients/cli/connections.c:60 ../clients/cli/connections.c:192
+#: ../clients/cli/devices.c:41 ../clients/cli/devices.c:57
+#: ../clients/cli/devices.c:171
msgid "TYPE"
msgstr "TYPE"
#. 2
-#: ../cli/src/connections.c:62
+#: ../clients/cli/connections.c:61
msgid "TIMESTAMP"
msgstr "TIMESTAMP"
#. 3
-#: ../cli/src/connections.c:63
+#: ../clients/cli/connections.c:62
msgid "TIMESTAMP-REAL"
msgstr "TIMESTAMP-REAL"
#. 4
-#. 13
-#: ../cli/src/connections.c:64 ../cli/src/devices.c:121
+#. 15
+#: ../clients/cli/connections.c:63 ../clients/cli/devices.c:71
msgid "AUTOCONNECT"
msgstr "AUTOCONNECT"
#. 5
-#: ../cli/src/connections.c:65
+#: ../clients/cli/connections.c:64
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
+#: ../clients/cli/connections.c:65 ../clients/cli/connections.c:178
+#: ../clients/cli/devices.c:43 ../clients/cli/devices.c:158
+#: ../clients/cli/devices.c:174
msgid "DBUS-PATH"
msgstr "DBUS-PATH"
-#. 2
-#: ../cli/src/connections.c:131
-msgid "DEVICES"
-msgstr "DEVICES"
+#. 7
+#. 13
+#. 4
+#: ../clients/cli/connections.c:66 ../clients/cli/devices.c:156
+#: ../clients/cli/devices.c:173
+msgid "ACTIVE"
+msgstr "ACTIVE"
+
+#. 8
+#. 0
+#. 12
+#. 3
+#: ../clients/cli/connections.c:67 ../clients/cli/devices.c:40
+#: ../clients/cli/devices.c:56 ../clients/cli/devices.c:155
+#: ../clients/cli/devices.c:172
+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
+#: ../clients/cli/connections.c:68 ../clients/cli/connections.c:173
+#: ../clients/cli/devices.c:42 ../clients/cli/devices.c:65
+#: ../clients/cli/network-manager.c:36
msgid "STATE"
msgstr "STATE"
+#. 10
+#: ../clients/cli/connections.c:69
+#| msgid "MASTER-PATH"
+msgid "ACTIVE-PATH"
+msgstr "ACTIVE-PATH"
+
+#. 2
+#: ../clients/cli/connections.c:172
+msgid "DEVICES"
+msgstr "DEVICES"
+
#. 4
-#: ../cli/src/connections.c:133
+#: ../clients/cli/connections.c:174
msgid "DEFAULT"
msgstr "DEFAULT"
#. 5
-#: ../cli/src/connections.c:134
+#: ../clients/cli/connections.c:175
msgid "DEFAULT6"
msgstr "DEFAULT6"
#. 6
-#: ../cli/src/connections.c:135
+#: ../clients/cli/connections.c:176
msgid "SPEC-OBJECT"
msgstr "SPEC-OBJECT"
#. 7
-#. 1
-#: ../cli/src/connections.c:136 ../cli/src/connections.c:150
+#. 4
+#. Ask for optional 'vpn' arguments.
+#: ../clients/cli/connections.c:177 ../clients/cli/connections.c:215
+#: ../clients/cli/connections.c:3426 ../clients/tui/nm-editor-utils.c:234
+#: ../clients/tui/nmt-connect-connection-list.c:407
msgid "VPN"
msgstr "VPN"
#. 9
-#: ../cli/src/connections.c:138
+#. 5
+#. 19
+#: ../clients/cli/connections.c:179 ../clients/cli/devices.c:46
+#: ../clients/cli/devices.c:75
msgid "CON-PATH"
msgstr "CON-PATH"
#. 10
-#: ../cli/src/connections.c:139
+#: ../clients/cli/connections.c:180
msgid "ZONE"
msgstr "ZONE"
#. 11
-#: ../cli/src/connections.c:140
+#: ../clients/cli/connections.c:181
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
+#: ../clients/cli/connections.c:193
msgid "USERNAME"
msgstr "USERNAME"
#. 2
-#: ../cli/src/connections.c:165
+#: ../clients/cli/connections.c:194
msgid "GATEWAY"
msgstr "GATEWAY"
#. 3
-#: ../cli/src/connections.c:166
+#: ../clients/cli/connections.c:195
msgid "BANNER"
msgstr "BANNER"
#. 4
-#: ../cli/src/connections.c:167
+#: ../clients/cli/connections.c:196
msgid "VPN-STATE"
msgstr "VPN-STATE"
#. 5
-#: ../cli/src/connections.c:168
+#: ../clients/cli/connections.c:197
msgid "CFG"
msgstr "CFG"
-#: ../cli/src/connections.c:190
-#, c-format
+#: ../clients/cli/connections.c:210 ../clients/cli/devices.c:216
+msgid "GENERAL"
+msgstr "GENERAL"
+
+#. 0
+#. 6
+#: ../clients/cli/connections.c:211 ../clients/cli/devices.c:223
+msgid "IP4"
+msgstr "IP4"
+
+#. 1
+#. 7
+#: ../clients/cli/connections.c:212 ../clients/cli/devices.c:224
+msgid "DHCP4"
+msgstr "DHCP4"
+
+#. 2
+#. 8
+#: ../clients/cli/connections.c:213 ../clients/cli/devices.c:225
+msgid "IP6"
+msgstr "IP6"
+
+#. 3
+#. 9
+#: ../clients/cli/connections.c:214 ../clients/cli/devices.c:226
+msgid "DHCP6"
+msgstr "DHCP6"
+
+#: ../clients/cli/connections.c:248
+#, 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"
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 { 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 [--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"
-" 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"
+" reload\n"
+"\n"
+" load <filename> [ <filename>... ]\n"
"\n"
-#: ../cli/src/connections.c:251 ../cli/src/connections.c:611
+#: ../clients/cli/connections.c:269
#, 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"
+"à¦à¦¬à¦‚ সকà§à¦°à¦¿à§Ÿ সংযোগ ডেটা দেখানো হয়। অাউটপà§à¦Ÿ ফিলà§à¦Ÿà¦¾à¦° করা "
+"সমà§à¦­à¦¬\n"
+"গà§à¦²à§‹à¦¬à¦¾à¦² '--fields' বিকলà§à¦ª বà§à¦¯à¦¬à¦¹à¦¾à¦° করে। অারো জানতে মà§à¦¯à¦¾à¦¨à§à¦¯à¦¼à¦¾à¦² পৃষà§à¦ à¦¾ "
+"দেখà§à¦¨à¥¤\n"
+"--active বিকলà§à¦ª নিরà§à¦¦à¦¿à¦·à§à¦Ÿ করা হলে, শà§à¦§à§à¦®à¦¾à¦¤à§à¦° সকà§à¦°à¦¿à§Ÿ পà§à¦°à§‹à¦«à¦¾à¦‡à¦²à¦—à§à¦²à¦¿\n"
+"বিবেচনা করা হয়।\n"
-#: ../cli/src/connections.c:253 ../cli/src/connections.c:613
+#: ../clients/cli/connections.c:290
#, 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"
+"à¦à¦•à¦Ÿà¦¿ সংযোগ দিয়ে à¦à¦•à¦Ÿà¦¿ ডিভাইস সকà§à¦°à¦¿à¦¯à¦¼ করà§à¦¨à¥¤ সংগà§à¦°à¦¹ পà§à¦°à§‹à¦«à¦¾à¦‡à¦² সà§à¦¬à¦¯à¦¼à¦‚কà§à¦°à¦¿à¦¯à¦¼ ভাবে\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: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 "হà§à¦¯à¦¾à¦"
+#: ../clients/cli/connections.c:310
+#, 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 "না"
+#: ../clients/cli/connections.c:322
+#, 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 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 { 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"
-#: ../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
+#: ../clients/cli/connections.c:400
#, 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 { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> ([+|-]<setting>.<property> <value>)+\n"
+"\n"
+"সংযোগ পà§à¦°à§‹à¦«à¦¾à¦‡à¦²à§‡à¦° à¦à¦• বা à¦à¦•à¦¾à¦§à¦¿à¦• বিশিষà§à¦Ÿà¦¤à¦¾ সংশোধন করà§à¦¨à¥¤\n"
+"পà§à¦°à§‹à¦«à¦¾à¦‡à¦²à¦Ÿà¦¿ তার নাম দিয়ে চিহà§à¦¨à¦¿à¦¤ হয়, UUID বা D-Bus পাথ। multi-valued\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:588
+#: ../clients/cli/connections.c:423
#, 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
+#: ../clients/cli/connections.c:438
#, 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
+#: ../clients/cli/connections.c:449
#, 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
+#: ../clients/cli/connections.c:457
#, 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
+#: ../clients/cli/connections.c:528
msgid "activating"
msgstr "সকà§à¦°à¦¿à§Ÿ করা হচà§à¦›à§‡"
-#: ../cli/src/connections.c:633
+#: ../clients/cli/connections.c:530
msgid "activated"
msgstr "সকà§à¦°à¦¿à§Ÿ করা হয়েছে"
-#: ../cli/src/connections.c:647
+#: ../clients/cli/connections.c:534
+msgid "deactivated"
+msgstr "নিষà§à¦•à§à¦°à¦¿à§Ÿ"
+
+#: ../clients/cli/connections.c:546
msgid "VPN connecting (prepare)"
msgstr "VPN সংযোগ সà§à¦¥à¦¾à¦ªà¦¨ করা হচà§à¦›à§‡ (পà§à¦°à¦¸à§à¦¤à§à¦¤à¦¿)"
-#: ../cli/src/connections.c:649
+#: ../clients/cli/connections.c:548
msgid "VPN connecting (need authentication)"
msgstr "VPN সংযোগ সà§à¦¥à¦¾à¦ªà¦¨ করা হচà§à¦›à§‡ (অনà§à¦®à§‹à¦¦à¦¨ পà§à¦°à§Ÿà§‹à¦œà¦¨)"
-#: ../cli/src/connections.c:651
+#: ../clients/cli/connections.c:550
msgid "VPN connecting"
msgstr "VPN সংযোগ সà§à¦¥à¦¾à¦ªà¦¨ করা হচà§à¦›à§‡"
-#: ../cli/src/connections.c:653
+#: ../clients/cli/connections.c:552
msgid "VPN connecting (getting IP configuration)"
msgstr "VPN সংযোগ সà§à¦¥à¦¾à¦ªà¦¨ করা হচà§à¦›à§‡ (IP কনফিগারেশন পà§à¦°à¦¾à¦ªà§à¦¤ করা হচà§à¦›à§‡)"
-#: ../cli/src/connections.c:655
+#: ../clients/cli/connections.c:554
msgid "VPN connected"
msgstr "VPN সংযোগ সà§à¦¥à¦¾à¦ªà¦¨ করা হয়েছে"
-#: ../cli/src/connections.c:657
+#: ../clients/cli/connections.c:556
msgid "VPN connection failed"
msgstr "VPN সংযোগ বিফল হয়েছে"
-#: ../cli/src/connections.c:659
+#: ../clients/cli/connections.c:558
msgid "VPN disconnected"
msgstr "VPN সংযোগ বিচà§à¦›à¦¿à¦¨à§à¦¨ করা হয়েছে"
-#: ../cli/src/connections.c:712 ../cli/src/connections.c:722
-msgid "N/A"
-msgstr "পà§à¦°à¦¯à§‹à¦œà§à¦¯ নয়"
+#: ../clients/cli/connections.c:641
+#| msgid "Connection details"
+msgid "Connection profile details"
+msgstr "সংযোগ পà§à¦°à§‹à¦«à¦¾à¦‡à¦²à§‡à¦° বিবরণ"
-#: ../cli/src/connections.c:916 ../cli/src/connections.c:1140
+#: ../clients/cli/connections.c:653 ../clients/cli/connections.c:1005
#, c-format
-msgid "Error: 'con status': %s"
-msgstr "তà§à¦°à§à¦Ÿà¦¿: 'con status': %s"
+#| msgid "Error: 'device show': %s"
+msgid "Error: 'connection show': %s"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'connection show': %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"
+#: ../clients/cli/connections.c:797
+msgid "never"
+msgstr "কখনো নয়"
-#: ../cli/src/connections.c:926
-msgid "Active connection details"
-msgstr "সকà§à¦°à¦¿à§Ÿ সংযোগের বিবরণ"
+#. "CAPABILITIES"
+#: ../clients/cli/connections.c:798 ../clients/cli/connections.c:799
+#: ../clients/cli/connections.c:801 ../clients/cli/connections.c:860
+#: ../clients/cli/connections.c:861 ../clients/cli/connections.c:863
+#: ../clients/cli/connections.c:2762 ../clients/cli/connections.c:6466
+#: ../clients/cli/connections.c:6467 ../clients/cli/devices.c:586
+#: ../clients/cli/devices.c:636 ../clients/cli/devices.c:857
+#: ../clients/cli/devices.c:858 ../clients/cli/devices.c:859
+#: ../clients/cli/devices.c:860 ../clients/cli/devices.c:893
+#: ../clients/cli/devices.c:895 ../clients/cli/devices.c:923
+#: ../clients/cli/devices.c:924 ../clients/cli/devices.c:925
+#: ../clients/cli/devices.c:926 ../clients/cli/devices.c:927
+#: ../clients/cli/devices.c:928 ../clients/cli/devices.c:929
+#: ../clients/cli/network-manager.c:420
+msgid "yes"
+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 "তà§à¦°à§à¦Ÿà¦¿: NetworkManager চলছে কিনা জানা সমà§à¦­à¦¬ নয়: %s"
+#: ../clients/cli/connections.c:798 ../clients/cli/connections.c:799
+#: ../clients/cli/connections.c:801 ../clients/cli/connections.c:860
+#: ../clients/cli/connections.c:861 ../clients/cli/connections.c:863
+#: ../clients/cli/connections.c:2763 ../clients/cli/connections.c:6466
+#: ../clients/cli/connections.c:6467 ../clients/cli/devices.c:586
+#: ../clients/cli/devices.c:636 ../clients/cli/devices.c:857
+#: ../clients/cli/devices.c:858 ../clients/cli/devices.c:859
+#: ../clients/cli/devices.c:860 ../clients/cli/devices.c:893
+#: ../clients/cli/devices.c:895 ../clients/cli/devices.c:923
+#: ../clients/cli/devices.c:924 ../clients/cli/devices.c:925
+#: ../clients/cli/devices.c:926 ../clients/cli/devices.c:927
+#: ../clients/cli/devices.c:928 ../clients/cli/devices.c:929
+#: ../clients/cli/network-manager.c:422
+msgid "no"
+msgstr "না"
-#: ../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 "Error: NetworkManager is not running."
-msgstr "তà§à¦°à§à¦Ÿà¦¿: NetworkManager চলছে না।"
+#: ../clients/cli/connections.c:856 ../clients/cli/connections.c:866
+#: ../clients/cli/devices.c:576
+msgid "N/A"
+msgstr "পà§à¦°à¦¯à§‹à¦œà§à¦¯ নয়"
-#: ../cli/src/connections.c:1098
-msgid "Active connections"
-msgstr "সকà§à¦°à¦¿à§Ÿ সংযোগ"
+#: ../clients/cli/connections.c:993
+#| msgid "Active connection details"
+msgid "Activate connection details"
+msgstr "সংযোগের বিবরণ সকà§à¦°à¦¿à§Ÿ করà§à¦¨"
+
+#: ../clients/cli/connections.c:1226
+#, c-format
+#| msgid "invalid field '%s'; allowed fields: %s"
+msgid "invalid field '%s'; allowed fields: %s and %s, or %s,%s"
+msgstr "অবৈধ ফিলà§à¦¡ '%s'; অনà§à¦®à§‹à¦¦à¦¿à¦¤ ফিলà§à¦¡: %s à¦à¦¬à¦‚ %s, অথবা %s,%s"
+
+#: ../clients/cli/connections.c:1241 ../clients/cli/connections.c:1249
+#, c-format
+#| msgid "field '%s' has to be alone"
+msgid "'%s' has to be alone"
+msgstr "'%s' à¦à¦•à¦¾ থাকা আবশà§à¦¯à¦•"
+
+#. Add headers
+#: ../clients/cli/connections.c:1303
+#| msgid "NetworkManager status"
+msgid "NetworkManager active profiles"
+msgstr "NetworkManager সকà§à¦°à¦¿à§Ÿ পà§à¦°à§‹à¦«à¦¾à¦‡à¦²à¦—à§à¦²à¦¿"
+
+#: ../clients/cli/connections.c:1304
+#| msgid "NetworkManager went to sleep"
+msgid "NetworkManager connection profiles"
+msgstr "NetworkManager সংযোগ পà§à¦°à§‹à¦«à¦¾à¦‡à¦²à¦—à§à¦²à¦¿"
+
+#: ../clients/cli/connections.c:1341 ../clients/cli/connections.c:1943
+#: ../clients/cli/connections.c:1959 ../clients/cli/connections.c:1968
+#: ../clients/cli/connections.c:1978 ../clients/cli/connections.c:2057
+#: ../clients/cli/connections.c:7975 ../clients/cli/connections.c:8191
+#: ../clients/cli/devices.c:1883 ../clients/cli/devices.c:1891
+#: ../clients/cli/devices.c:2207 ../clients/cli/devices.c:2214
+#: ../clients/cli/devices.c:2228 ../clients/cli/devices.c:2235
+#: ../clients/cli/devices.c:2252 ../clients/cli/devices.c:2260
+#: ../clients/cli/devices.c:2448 ../clients/cli/devices.c:2544
+#: ../clients/cli/devices.c:2551
+#, c-format
+msgid "Error: %s argument is missing."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: %s আরà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤à¥¤"
-#: ../cli/src/connections.c:1123
+#: ../clients/cli/connections.c:1392
#, 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:1128
+#: ../clients/cli/connections.c:1408 ../clients/cli/connections.c:2002
+#: ../clients/cli/connections.c:8260 ../clients/cli/connections.c:8301
+#: ../clients/cli/connections.c:8499 ../clients/cli/devices.c:2427
+#: ../clients/cli/devices.c:2892 ../clients/cli/network-manager.c:517
+#: ../clients/cli/network-manager.c:563 ../clients/cli/network-manager.c:580
+#: ../clients/cli/network-manager.c:627 ../clients/cli/network-manager.c:641
+#: ../clients/cli/network-manager.c:758 ../clients/cli/network-manager.c:802
+#: ../clients/cli/network-manager.c:822
#, c-format
-msgid "Error: unknown parameter: %s"
-msgstr "তà§à¦°à§à¦Ÿà¦¿: অজানা পরামিতি: %s"
+msgid "Error: %s."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: %s।"
-#: ../cli/src/connections.c:1235
+#: ../clients/cli/connections.c:1503
#, c-format
msgid "no active connection on device '%s'"
msgstr "'%s' ডিভাইসের মধà§à¦¯à§‡ কোনো সকà§à¦°à¦¿à§Ÿ সংযোগ উপসà§à¦¥à¦¿à¦¤ নেই"
-#: ../cli/src/connections.c:1243
+#: ../clients/cli/connections.c:1511
msgid "no active connection or device"
msgstr "কোনো সকà§à¦°à¦¿à§Ÿ সংযোগ অথবা ডিভাইস উপসà§à¦¥à¦¿à¦¤ নেই"
-#: ../cli/src/connections.c:1314
+#: ../clients/cli/connections.c:1582
#, c-format
msgid "device '%s' not compatible with connection '%s'"
msgstr "'%s' ডিভাইসের সাথে '%s' সংযোগটি সà§à¦¸à¦‚গত নয়"
-#: ../cli/src/connections.c:1317
+#: ../clients/cli/connections.c:1585
#, c-format
msgid "no device found for connection '%s'"
msgstr "'%s' সংযোগের জনà§à¦¯ কোনো ডিভাইস পাওয়া যায়নি"
-#: ../cli/src/connections.c:1329
+#: ../clients/cli/connections.c:1597
msgid "unknown reason"
msgstr "অজানা কারণ"
-#: ../cli/src/connections.c:1331
+#: ../clients/cli/connections.c:1599 ../clients/cli/network-manager.c:271
msgid "none"
msgstr "শূণà§à¦¯"
-#: ../cli/src/connections.c:1333
+#: ../clients/cli/connections.c:1601
msgid "the user was disconnected"
msgstr "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€à¦° সাথে সংযোগ বিচà§à¦›à¦¿à¦¨à§à¦¨ করা হয়েছে"
-#: ../cli/src/connections.c:1335
+#: ../clients/cli/connections.c:1603
msgid "the base network connection was interrupted"
msgstr "মূল নেটওয়ারà§à¦• সংযোগ বিঘà§à¦¨à¦¿à¦¤ হয়েছে"
-#: ../cli/src/connections.c:1337
+#: ../clients/cli/connections.c:1605
msgid "the VPN service stopped unexpectedly"
msgstr "অপà§à¦°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤à¦­à¦¾à¦¬à§‡ VPN পরিসেবা বনà§à¦§ করা হয়েছে"
-#: ../cli/src/connections.c:1339
+#: ../clients/cli/connections.c:1607
msgid "the VPN service returned invalid configuration"
msgstr "VPN পরিসেবা থেকে অবৈধ কনফিগারেশন পাওয়া গিয়েছে"
-#: ../cli/src/connections.c:1341
+#: ../clients/cli/connections.c:1609
msgid "the connection attempt timed out"
msgstr "সংযোগের পà§à¦°à§Ÿà¦¾à¦¸à¦•à¦¾à¦²à§‡ সময়সীমা উতà§à¦¤à§€à¦°à§à¦£ হয়েছে"
-#: ../cli/src/connections.c:1343
+#: ../clients/cli/connections.c:1611
msgid "the VPN service did not start in time"
msgstr "যথাযত সময়ে VPN পরিসেবা আরমà§à¦­ করা হয়নি"
-#: ../cli/src/connections.c:1345
+#: ../clients/cli/connections.c:1613
msgid "the VPN service failed to start"
msgstr "VPN পরিসেবা আরমà§à¦­ করা যায়নি"
-#: ../cli/src/connections.c:1347
+#: ../clients/cli/connections.c:1615
msgid "no valid VPN secrets"
msgstr "VPN-র বৈধ গোপন তথà§à¦¯ উপসà§à¦¥à¦¿à¦¤ নেই"
-#: ../cli/src/connections.c:1349
+#: ../clients/cli/connections.c:1617
msgid "invalid VPN secrets"
msgstr "VPN-র অবৈধ গোপন তথà§à¦¯"
-#: ../cli/src/connections.c:1351
+#: ../clients/cli/connections.c:1619
msgid "the connection was removed"
msgstr "সংযোগ মà§à¦›à§‡ ফেলা হয়েছে"
-#: ../cli/src/connections.c:1368 ../cli/src/connections.c:1573
+#: ../clients/cli/connections.c:1641 ../clients/cli/connections.c:1669
+#: ../clients/cli/connections.c:1823 ../clients/cli/connections.c:6357
#, 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
+#: ../clients/cli/connections.c:1648
+#, c-format
+#| msgid "Connection successfully activated (D-Bus active path: %s)\n"
+msgid ""
+"Connection successfully activated (master waiting for slaves) (D-Bus active "
+"path: %s)\n"
+msgstr ""
+"সাফলà§à¦¯à§‡à¦° সাথে সংযোগ সকà§à¦°à¦¿à§Ÿ করা হয়েছে (সà§à¦²à§‡à¦­à§‡à¦° অপেকà§à¦·à¦¾à¦°à¦¤ মাসà§à¦Ÿà¦¾à¦°) (D-Bus-র "
+"সকà§à¦°à¦¿à§Ÿ পাথ: %s)\n"
+
+#: ../clients/cli/connections.c:1652 ../clients/cli/connections.c:1675
#, c-format
msgid "Error: Connection activation failed."
msgstr "তà§à¦°à§à¦Ÿà¦¿: সংযোগ সকà§à¦°à¦¿à§Ÿ করতে বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../cli/src/connections.c:1398
+#: ../clients/cli/connections.c:1719
#, c-format
msgid "VPN connection successfully activated (D-Bus active path: %s)\n"
msgstr "সাফলà§à¦¯à§‡à¦° সাথে VPN সংযোগ সকà§à¦°à¦¿à§Ÿ করা হয়েছে (D-Bus-র সকà§à¦°à¦¿à§Ÿ পাথ: %s)\n"
-#: ../cli/src/connections.c:1406
+#: ../clients/cli/connections.c:1727
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "তà§à¦°à§à¦Ÿà¦¿: সংযোগ সকà§à¦°à¦¿à§Ÿ করতে বà§à¦¯à¦°à§à¦¥: %s।"
-#: ../cli/src/connections.c:1503 ../cli/src/devices.c:1055
+#: ../clients/cli/connections.c:1746 ../clients/cli/devices.c:1331
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "তà§à¦°à§à¦Ÿà¦¿: %d সেকেনà§à¦¡à§‡à¦° সময়সীমা উতà§à¦¤à§€à¦°à§à¦£ হয়েছে।"
-#: ../cli/src/connections.c:1564
+#: ../clients/cli/connections.c:1806
#, 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
-#, c-format
-msgid "Error: Unknown connection: %s."
-msgstr "তà§à¦°à§à¦Ÿà¦¿: অজানা সংযোগ: %s."
+#: ../clients/cli/connections.c:1881 ../clients/cli/connections.c:2003
+msgid "unknown error"
+msgstr "অজানা তà§à¦°à§à¦Ÿà¦¿"
-#: ../cli/src/connections.c:1704 ../cli/src/devices.c:1140
-#: ../cli/src/devices.c:1686
+#: ../clients/cli/connections.c:1889
#, c-format
-msgid "Error: timeout value '%s' is not valid."
-msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s' সময়সীমার মান বৈধ নয়।"
+msgid "unknown device '%s'."
+msgstr "অজানা ডিভাইস '%s'।"
-#: ../cli/src/connections.c:1717 ../cli/src/connections.c:1829
-#: ../cli/src/connections.c:1920
+#: ../clients/cli/connections.c:1894
+msgid "neither a valid connection nor device given"
+msgstr "কোনো বৈধ সংযোগ বা ডিভাইস দেওয়া হয়নি"
+
+#: ../clients/cli/connections.c:1987 ../clients/cli/devices.c:1230
+#: ../clients/cli/devices.c:1897 ../clients/cli/devices.c:2271
+#: ../clients/cli/devices.c:2557
#, c-format
-msgid "Error: id or uuid has to be specified."
-msgstr "তà§à¦°à§à¦Ÿà¦¿: id অথবা uuid নিরà§à¦§à¦¾à¦°à¦£ করা আবশà§à¦¯à¦•à¥¤"
+msgid "Unknown parameter: %s\n"
+msgstr "অজানা পরামিতি: %s\n"
+
+#: ../clients/cli/connections.c:2011
+msgid "preparing"
+msgstr "পà§à¦°à¦¸à§à¦¤à§à¦¤à¦¿"
-#: ../cli/src/connections.c:1749
+#: ../clients/cli/connections.c:2039 ../clients/cli/connections.c:8172
+#: ../clients/cli/connections.c:8288
#, c-format
-msgid "Error: No suitable device found: %s."
-msgstr "তà§à¦°à§à¦Ÿà¦¿: পà§à¦°à¦¯à§‹à¦œà§à¦¯ কোনো ডিভাইস পাওয়া যায়নি: %s."
+msgid "Error: No connection specified."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: কোনো সংযোগ নিরà§à¦¦à¦¿à¦·à§à¦Ÿ করা নেই।"
-#: ../cli/src/connections.c:1751
+#: ../clients/cli/connections.c:2067
#, c-format
-msgid "Error: No suitable device found."
-msgstr "তà§à¦°à§à¦Ÿà¦¿: কোনো পà§à¦°à¦¯à§‹à¦œà§à¦¯ ডিভাইস পাওয়া যায়নি।"
+msgid "Error: '%s' is not an active connection."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s' সকà§à¦°à¦¿à§Ÿ সংযোগ নয়।"
-#: ../cli/src/connections.c:1865
+#: ../clients/cli/connections.c:2368 ../clients/cli/utils.c:517
#, c-format
-msgid "Warning: Connection not active\n"
-msgstr "সতরà§à¦•à¦¬à¦¾à¦°à§à¦¤à¦¾: সংযোগ সকà§à¦°à¦¿à§Ÿ নয়\n"
+msgid "'%s' not among [%s]"
+msgstr "'%s' [%s] à¦à¦° মধà§à¦¯à§‡ নয়"
-#: ../cli/src/connections.c:1879
+#: ../clients/cli/connections.c:2447
#, c-format
-msgid "Error: Connection deletion failed: %s"
-msgstr "তà§à¦°à§à¦Ÿà¦¿: সংযোগ মà§à¦›à§‡ ফেলতে বà§à¦¯à¦°à§à¦¥: %s"
+msgid "Error: '%s': '%s' is not a valid %s MAC address."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s': '%s' à¦à¦•à¦Ÿà¦¿ %s MAC ঠিকানা নয়।"
-#: ../cli/src/connections.c:2000
+#. Ask for optional arguments
+#: ../clients/cli/connections.c:2448 ../clients/cli/connections.c:2878
+#: ../clients/tui/nm-editor-utils.c:164 ../libnm-core/nm-connection.c:1509
+#: ../libnm-glib/nm-device.c:1800
+msgid "InfiniBand"
+msgstr "InfiniBand"
+
+#: ../clients/cli/connections.c:2448 ../clients/tui/nm-editor-utils.c:147
+#: ../libnm-glib/nm-device.c:1788
+msgid "Ethernet"
+msgstr "Ethernet"
+
+#: ../clients/cli/connections.c:2468
#, c-format
-msgid "Error: 'con' command '%s' is not valid."
-msgstr "তà§à¦°à§à¦Ÿà¦¿: 'con' কমানà§à¦¡ '%s', বৈধ নয়।"
+msgid "Error: 'mtu': '%s' is not a valid MTU."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'mtu': '%s' à¦à¦•à¦Ÿà¦¿ বৈধ MTU নয়।"
-#: ../cli/src/connections.c:2068
+#: ../clients/cli/connections.c:2484
#, c-format
-msgid "Error: could not connect to D-Bus."
-msgstr "তà§à¦°à§à¦Ÿà¦¿: D-Bus-র সাথে সংযোগ করতে বà§à¦¯à¦°à§à¦¥à¥¤"
+msgid "Error: 'parent': '%s' is not a valid interface name."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'parent': '%s' à¦à¦•à¦Ÿà¦¿ বৈধ ইনà§à¦Ÿà¦¾à¦°à¦«à§‡à¦¸ নাম নয়।"
-#: ../cli/src/connections.c:2076
+#: ../clients/cli/connections.c:2505
#, c-format
-msgid "Error: Could not get system settings."
-msgstr "তà§à¦°à§à¦Ÿà¦¿: সিসà§à¦Ÿà§‡à¦®à§‡à¦° বৈশিষà§à¦Ÿà§à¦¯ পà§à¦°à¦¾à¦ªà§à¦¤ করতে বà§à¦¯à¦°à§à¦¥à¥¤"
+msgid "Error: 'p-key': '%s' is not a valid InfiniBand P_KEY."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'p-key': '%s' à¦à¦•à¦Ÿà¦¿ বৈধ InfiniBand P_KEY নয়।"
-#: ../cli/src/connections.c:2086
+#: ../clients/cli/connections.c:2534
#, 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 ""
-"তà§à¦°à§à¦Ÿà¦¿: সংযোগ পà§à¦°à¦¾à¦ªà§à¦¤ করতে বà§à¦¯à¦°à§à¦¥: বৈশিষà§à¦Ÿà§à¦¯à§‡à¦° পরিসেবা বরà§à¦¤à¦®à¦¾à¦¨à§‡ চলছে না।"
+"তà§à¦°à§à¦Ÿà¦¿: 'mode': '%s' à¦à¦•à¦Ÿà¦¿ বৈধ InfiniBand টà§à¦°à§à¦¯à¦¾à¦¨à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ মোড [datagram, "
+"সংযà§à¦•à§à¦¤] নয়।"
-#. 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"
+#: ../clients/cli/connections.c:2548
+#, c-format
+msgid "Error: 'flags': '%s' is not valid; use <0-7>."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'flags': '%s' বৈধ নয়; <0-7> বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨à¥¤"
-#. 0
-#: ../cli/src/devices.c:83
-msgid "CAPABILITIES"
-msgstr "CAPABILITIES"
+#: ../clients/cli/connections.c:2570
+#, c-format
+msgid "Error: '%s': '%s' is not valid; %s "
+msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s': '%s' বৈধ নয়; %s "
-#. 1
-#: ../cli/src/devices.c:84
-msgid "WIFI-PROPERTIES"
-msgstr "WIFI-PROPERTIES"
+#: ../clients/cli/connections.c:2753
+#, c-format
+msgid "Error: '%s': '%s' is not valid; use <%u-%u>."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s': '%s' বৈধ নয়; <%u-%u> বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨à¥¤"
-#. 2
-#: ../cli/src/devices.c:85
-msgid "AP"
-msgstr "AP"
+#. Ask for optional arguments.
+#: ../clients/cli/connections.c:2809
+#, 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] "%d টি বৈকলà§à¦ªà¦¿à¦• অারà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ রয়েছে, '%s' সংযোগ ধরনের জনà§à¦¯à¥¤\n"
+msgstr[1] "%d টি বৈকলà§à¦ªà¦¿à¦• অারà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ রয়েছে, '%s' সংযোগ ধরনের জনà§à¦¯à¥¤\n"
-#. 3
-#: ../cli/src/devices.c:86
-msgid "WIRED-PROPERTIES"
-msgstr "WIRED-PROPERTIES"
+#: ../clients/cli/connections.c:2812
+#, 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"
-#. 4
-#: ../cli/src/devices.c:87
-msgid "WIMAX-PROPERTIES"
-msgstr "WIMAX-PROPERTIES"
+#: ../clients/cli/connections.c:2827
+msgid "ethernet"
+msgstr "ethernet"
-#. 5
-#. 0
-#: ../cli/src/devices.c:88 ../cli/src/devices.c:202
-msgid "NSP"
-msgstr "NSP"
+#: ../clients/cli/connections.c:2827 ../clients/tui/nm-editor-utils.c:155
+#: ../libnm-glib/nm-device.c:1790
+msgid "Wi-Fi"
+msgstr "Wi-Fi"
-#. 6
-#: ../cli/src/devices.c:89
-msgid "IP4"
-msgstr "IP4"
+#: ../clients/cli/connections.c:2835 ../clients/cli/connections.c:2883
+#: ../clients/cli/connections.c:2992 ../clients/cli/connections.c:3071
+msgid "MTU [auto]: "
+msgstr "MTU [সà§à¦¬à¦¯à¦¼à¦‚কà§à¦°à¦¿à¦¯à¦¼]: "
-#. 7
-#: ../cli/src/devices.c:90
-msgid "DHCP4"
-msgstr "DHCP4"
+#: ../clients/cli/connections.c:2846 ../clients/cli/connections.c:2894
+#: ../clients/cli/connections.c:2964 ../clients/cli/connections.c:3003
+#: ../clients/cli/connections.c:3358
+msgid "MAC [none]: "
+msgstr "MAC [কিছৠনয়]: "
-#. 8
-#: ../cli/src/devices.c:91
-msgid "IP6"
-msgstr "IP6"
+#: ../clients/cli/connections.c:2857
+msgid "Cloned MAC [none]: "
+msgstr "কà§à¦²à§‹à¦¨à¦¡ MAC [কিছৠনয়]: "
-#. 9
-#: ../cli/src/devices.c:92
-msgid "DHCP6"
-msgstr "DHCP6"
+#: ../clients/cli/connections.c:2905
+#, c-format
+#| msgid "Transport mode"
+msgid "Transport mode %s"
+msgstr "পরিবহন মোড %s"
-#. 10
-#: ../cli/src/devices.c:93
-msgid "BOND"
-msgstr "BOND"
+#: ../clients/cli/connections.c:2918
+msgid "Parent interface [none]: "
+msgstr "পেরেনà§à¦Ÿ ইনà§à¦Ÿà¦¾à¦°à¦«à§‡à¦¸ [কিছৠনয়]: "
-#. 11
-#: ../cli/src/devices.c:94
+#: ../clients/cli/connections.c:2929
+msgid "P_KEY [none]: "
+msgstr "P_KEY [কিছৠনয়]: "
+
+#: ../clients/cli/connections.c:2939
+#, c-format
+msgid "Error: 'p-key' is mandatory when 'parent' is specified.\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'p-key' বাধà§à¦¯à¦¤à¦¾à¦®à§‚লক, যখন 'parent' নিরà§à¦¦à¦¿à¦·à§à¦Ÿà¥¤\n"
+
+#. Ask for optional 'wimax' arguments.
+#: ../clients/cli/connections.c:2959 ../libnm-glib/nm-device.c:1796
+msgid "WiMAX"
+msgstr "WiMAX"
+
+#. Ask for optional 'pppoe' arguments.
+#: ../clients/cli/connections.c:2982
+msgid "PPPoE"
+msgstr "PPPoE"
+
+#: ../clients/cli/connections.c:2986 ../clients/cli/connections.c:3024
+msgid "Password [none]: "
+msgstr "পাসওয়ারà§à¦¡ [কিছৠনয়]: "
+
+#: ../clients/cli/connections.c:2988
+msgid "Service [none]: "
+msgstr "পরিষেবা [à¦à¦•à¦Ÿà¦¿à¦“ নয়]: "
+
+#. Ask for optional 'gsm' or 'cdma' arguments.
+#: ../clients/cli/connections.c:3018
+#| msgid "Mobile Broadband"
+msgid "mobile broadband"
+msgstr "মোবাইল বà§à¦°à¦¡à¦¬à§à¦¯à¦¾à¦¨à§à¦¡"
+
+#: ../clients/cli/connections.c:3022 ../clients/cli/connections.c:3430
+msgid "Username [none]: "
+msgstr "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€ নাম [কিছৠনয়]: "
+
+#. Ask for optional 'bluetooth' arguments.
+#: ../clients/cli/connections.c:3037
+#| msgid "Bluetooth"
+msgid "bluetooth"
+msgstr "বà§à¦²à§à¦Ÿà§à¦¥"
+
+#: ../clients/cli/connections.c:3044
+#, c-format
+#| msgid "Bluetooth"
+msgid "Bluetooth type %s"
+msgstr "বà§à¦²à§à¦Ÿà§à¦¥ ধরন %s"
+
+#: ../clients/cli/connections.c:3050
+#, c-format
+msgid "Error: 'bt-type': '%s' is not a valid bluetooth type.\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'bt-type': '%s' à¦à¦•à¦Ÿà¦¿ বৈধ বà§à¦²à§à¦Ÿà§à¦¥ ধরন নয়।\n"
+
+#. Ask for optional 'vlan' arguments.
+#. 13
+#: ../clients/cli/connections.c:3066 ../clients/cli/devices.c:230
+#: ../clients/tui/nm-editor-utils.c:218 ../clients/tui/nmt-page-vlan.c:51
+#: ../libnm-core/nm-connection.c:1507 ../libnm-glib/nm-device.c:1808
+#: ../libnm-util/nm-connection.c:1612
msgid "VLAN"
msgstr "VLAN"
+#: ../clients/cli/connections.c:3082
+msgid "VLAN flags (<0-7>) [none]: "
+msgstr "VLAN ফà§à¦²à§à¦¯à¦¾à¦— (<0-7>) [কিছৠনয়]: "
+
+#: ../clients/cli/connections.c:3093
+msgid "Ingress priority maps [none]: "
+msgstr "Ingress অগà§à¦°à¦¾à¦§à¦¿à¦•à¦¾à¦° মানচিতà§à¦° [কিছৠনয়]: "
+
+#: ../clients/cli/connections.c:3104
+msgid "Egress priority maps [none]: "
+msgstr "Egress অগà§à¦°à¦¾à¦§à¦¿à¦•à¦¾à¦° মানচিতà§à¦° [কিছৠনয়]: "
+
+#: ../clients/cli/connections.c:3115
+msgid "Bonding mode [balance-rr]: "
+msgstr "বনà§à¦¡à¦¿à¦‚ মোড [balance-rr]: "
+
+#. Ask for optional 'bond' arguments.
+#: ../clients/cli/connections.c:3130
+msgid "bond"
+msgstr "বনà§à¦¡"
+
+#: ../clients/cli/connections.c:3152
+msgid "Bonding primary interface [none]: "
+msgstr "বনà§à¦¡à¦¿à¦‚ পà§à¦°à¦¾à¦¥à¦®à¦¿à¦• ইনà§à¦Ÿà¦¾à¦°à¦«à§‡à¦¸ [কিছৠনয়]: "
+
+#: ../clients/cli/connections.c:3155
+#, c-format
+msgid "Error: 'primary': '%s' is not a valid interface name.\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'পà§à¦°à¦¾à¦¥à¦®à¦¿à¦•': '%s' à¦à¦•à¦Ÿà¦¿ বৈধ ইনà§à¦Ÿà¦¾à¦°à¦«à§‡à¦¸ নাম নয়।\n"
+
+#: ../clients/cli/connections.c:3163
+#, c-format
+#| msgid "Link monitoring"
+msgid "Bonding monitoring mode %s"
+msgstr "বনà§à¦¡à¦¿à¦‚ নিয়নà§à¦¤à§à¦°à¦£ মোড %s"
+
+#: ../clients/cli/connections.c:3169
+#, c-format
+msgid "Error: '%s' is not a valid monitoring mode; use '%s' or '%s'.\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s' à¦à¦•à¦Ÿà¦¿ বৈধ মনিটরিং মোড নয়; '%s' বা '%s' বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨à¥¤\n"
+
+#: ../clients/cli/connections.c:3178
+msgid "Bonding miimon [100]: "
+msgstr "বনà§à¦¡à¦¿à¦‚ miimon [100]: "
+
+#: ../clients/cli/connections.c:3181
+#, c-format
+msgid "Error: 'miimon': '%s' is not a valid number <0-%u>.\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'miimon': '%s' à¦à¦•à¦Ÿà¦¿ বৈধ নমà§à¦¬à¦° নয় <0-%u>।\n"
+
+#: ../clients/cli/connections.c:3189
+msgid "Bonding downdelay [0]: "
+msgstr "বনà§à¦¡à¦¿à¦‚ downdelay [0]: "
+
+#: ../clients/cli/connections.c:3192
+#, c-format
+msgid "Error: 'downdelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'downdelay': '%s' à¦à¦•à¦Ÿà¦¿ বৈধ নমà§à¦¬à¦° নয় <0-%u>।\n"
+
+#: ../clients/cli/connections.c:3200
+msgid "Bonding updelay [0]: "
+msgstr "বনà§à¦¡à¦¿à¦‚ updelay [0]: "
+
+#: ../clients/cli/connections.c:3203
+#, c-format
+msgid "Error: 'updelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'updelay': '%s' à¦à¦•à¦Ÿà¦¿ বৈধ নমà§à¦¬à¦° নয় <0-%u>।\n"
+
+#: ../clients/cli/connections.c:3212
+msgid "Bonding arp-interval [0]: "
+msgstr "বনà§à¦¡à¦¿à¦‚ arp-interval [0]: "
+
+#: ../clients/cli/connections.c:3215
+#, 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
+#: ../clients/cli/connections.c:3223
+msgid "Bonding arp-ip-target [none]: "
+msgstr "বনà§à¦¡à¦¿à¦‚ arp-ip-target [none]: "
+
+#: ../clients/cli/connections.c:3243
+msgid "Team JSON configuration [none]: "
+msgstr "Team JSON কনফিগারেশন [à¦à¦•à¦Ÿà¦¿à¦“ নয়]: "
+
+#: ../clients/cli/connections.c:3260
+msgid "team"
+msgstr "team"
+
+#: ../clients/cli/connections.c:3266
+msgid "team-slave"
+msgstr "team-slave"
+
+#. Ask for optional 'bridge' arguments.
+#: ../clients/cli/connections.c:3278
+#| msgid "Bridge"
+msgid "bridge"
+msgstr "বà§à¦°à¦¿à¦œ"
+
+#: ../clients/cli/connections.c:3284
+#, c-format
+#| msgid "Enable STP (yes/no) [yes]: "
+msgid "Enable STP %s"
+msgstr "STP %s সকà§à¦°à¦¿à¦¯à¦¼ করà§à¦¨"
+
+#: ../clients/cli/connections.c:3289
+#, c-format
+#| msgid "Error: 'stp': %s."
+msgid "Error: 'stp': %s.\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'stp': %s.\n"
+
+#: ../clients/cli/connections.c:3297
+#| msgid "STP priority [128]: "
+msgid "STP priority [32768]: "
+msgstr "STP অগà§à¦°à¦¾à¦§à¦¿à¦•à¦¾à¦° [32768]:"
+
+#: ../clients/cli/connections.c:3301
+#, c-format
+msgid "Error: 'priority': '%s' is not a valid number <0-%d>.\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'priority': '%s' à¦à¦•à¦Ÿà¦¿ বৈধ নমà§à¦¬à¦° নয় <0-%d>।\n"
+
+#: ../clients/cli/connections.c:3309
+msgid "Forward delay [15]: "
+msgstr "ফরোয়ারà§à¦¡ বিলমà§à¦¬ [15]: "
+
+#: ../clients/cli/connections.c:3313
+#, c-format
+msgid "Error: 'forward-delay': '%s' is not a valid number <2-30>.\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'forward-delay': '%s' à¦à¦•à¦Ÿà¦¿ বৈধ নমà§à¦¬à¦° নয় <2-30>।\n"
+
+#: ../clients/cli/connections.c:3322
+msgid "Hello time [2]: "
+msgstr "হà§à¦¯à¦¾à¦²à§‹ টাইম [2]: "
+
+#: ../clients/cli/connections.c:3326
+#, c-format
+msgid "Error: 'hello-time': '%s' is not a valid number <1-10>.\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'hello-time': '%s' à¦à¦•à¦Ÿà¦¿ বৈধ নমà§à¦¬à¦° নয় <1-10>।\n"
+
+#: ../clients/cli/connections.c:3334
+msgid "Max age [20]: "
+msgstr "সরà§à¦¬à¦¾à¦§à¦¿à¦• বয়স [20]: "
+
+#: ../clients/cli/connections.c:3338
+#, c-format
+msgid "Error: 'max-age': '%s' is not a valid number <6-40>.\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'max-age': '%s' à¦à¦•à¦Ÿà¦¿ বৈধ নমà§à¦¬à¦° নয় <6-40>।\n"
+
+#: ../clients/cli/connections.c:3346
+msgid "MAC address ageing time [300]: "
+msgstr "MAC ঠিকানা বয়স সময় [300]: "
+
+#: ../clients/cli/connections.c:3350
+#, 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.
+#: ../clients/cli/connections.c:3377
+#| msgid "team-slave"
+msgid "bridge-slave"
+msgstr "bridge-slave"
+
+#: ../clients/cli/connections.c:3382
+msgid "Bridge port priority [32]: "
+msgstr "বà§à¦°à¦¿à¦œ পোরà§à¦Ÿ অগà§à¦°à¦¾à¦§à¦¿à¦•à¦¾à¦° [32]: "
+
+#: ../clients/cli/connections.c:3395
+msgid "Bridge port STP path cost [100]: "
+msgstr "বà§à¦°à¦¿à¦œ পোরà§à¦Ÿ STP পাথ বà§à¦¯à¦¯à¦¼ [100]: "
+
+#: ../clients/cli/connections.c:3409
+#, c-format
+#| msgid "Hairpin mode"
+msgid "Hairpin %s"
+msgstr "Hairpin %s"
+
+#: ../clients/cli/connections.c:3414
+#, c-format
+#| msgid "Error: 'hairpin': %s."
+msgid "Error: 'hairpin': %s.\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'hairpin': %s.\n"
+
+#. Ask for optional 'olpc' arguments.
+#: ../clients/cli/connections.c:3441 ../libnm-glib/nm-device.c:1794
+msgid "OLPC Mesh"
+msgstr "OLPC মেশ"
+
+#: ../clients/cli/connections.c:3446
+msgid "OLPC Mesh channel [1]: "
+msgstr "OLPC Mesh চà§à¦¯à¦¾à¦¨à§‡à¦² [1]: "
+
+#: ../clients/cli/connections.c:3449
+#, c-format
+msgid "Error: 'channel': '%s' is not a valid number <1-13>.\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'channel': '%s' à¦à¦•à¦Ÿà¦¿ বৈধ নমà§à¦¬à¦° নয় <1-13>।\n"
+
+#: ../clients/cli/connections.c:3457
+msgid "DHCP anycast MAC address [none]: "
+msgstr "DHCP anycast MAC ঠিকানা [কিছৠনয়]: "
+
+#: ../clients/cli/connections.c:3502
+msgid "IPv4 address (IP[/plen] [gateway]) [none]: "
+msgstr "IPv4 ঠিকানা (IP[/plen] [গেটওয়ে]) [কিছৠনয়]: "
+
+#: ../clients/cli/connections.c:3504
+msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
+msgstr "IPv6 ঠিকানা (IP[/plen] [গেটওয়ে]) [কিছৠনয়]: "
+
+#: ../clients/cli/connections.c:3522
+#, c-format
+msgid " Address successfully added: %s %s\n"
+msgstr " ঠিকানা সফল ভাবে যোগ করা হয়েছে: %s %s\n"
+
+#: ../clients/cli/connections.c:3524
+#, c-format
+msgid " Warning: address already present: %s %s\n"
+msgstr " সতরà§à¦•à¦¤à¦¾: ঠিকানা ইতিমধà§à¦¯à§‡à¦‡ উপসà§à¦¥à¦¿à¦¤: %s %s\n"
+
+#: ../clients/cli/connections.c:3526
+#, c-format
+msgid " Warning: ignoring garbage at the end: '%s'\n"
+msgstr " সতরà§à¦•à¦¤à¦¾: ignoring garbage at the end: '%s'\n"
+
+#: ../clients/cli/connections.c:3528 ../clients/cli/connections.c:4351
+#: ../clients/cli/connections.c:4412 ../clients/cli/connections.c:4814
+#: ../clients/cli/connections.c:4824
+msgid "Error: "
+msgstr "তà§à¦°à§à¦Ÿà¦¿: "
+
+#. Ask for IP addresses
+#: ../clients/cli/connections.c:3545
+#, 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"
+
+#: ../clients/cli/connections.c:3552
+#, c-format
+msgid "Press <Enter> to finish adding addresses.\n"
+msgstr "ঠিকানা যোগ করা সমাপà§à¦¤ করতে <Enter> টিপà§à¦¨à¥¤\n"
+
+#: ../clients/cli/connections.c:3691
+#, c-format
+msgid "Error: 'parent': not valid without 'p-key'."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'parent': 'p-key' ছাড়া বৈধ নয়।"
+
+#: ../clients/cli/connections.c:3743 ../clients/cli/connections.c:4733
+msgid "SSID: "
+msgstr "SSID: "
+
+#: ../clients/cli/connections.c:3746 ../clients/cli/connections.c:4736
+msgid "Error: 'ssid' is required."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'ssid' পà§à¦°à¦¯à¦¼à§‹à¦œà¦¨à§€à¦¯à¦¼à¥¤"
+
+#: ../clients/cli/connections.c:3803
+msgid "WiMAX NSP name: "
+msgstr "WiMAX NSP নাম: "
+
+#: ../clients/cli/connections.c:3806
+msgid "Error: 'nsp' is required."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'nsp' পà§à¦°à¦¯à¦¼à§‹à¦œà¦¨à§€à¦¯à¦¼à¥¤"
+
+#: ../clients/cli/connections.c:3858
+msgid "PPPoE username: "
+msgstr "PPPoE বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€ নাম: "
+
+#: ../clients/cli/connections.c:3861
+msgid "Error: 'username' is required."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'username' পà§à¦°à¦¯à¦¼à§‹à¦œà¦¨à§€à¦¯à¦¼à¥¤"
+
+#: ../clients/cli/connections.c:3930
+msgid "APN: "
+msgstr "APN: "
+
+#: ../clients/cli/connections.c:3933
+msgid "Error: 'apn' is required."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'apn' পà§à¦°à¦¯à¦¼à§‹à¦œà¦¨à§€à¦¯à¦¼à¥¤"
+
+#: ../clients/cli/connections.c:3991
+msgid "Bluetooth device address: "
+msgstr "বà§à¦²à§à¦Ÿà§à¦¥ ডিভাইস ঠিকানা: "
+
+#: ../clients/cli/connections.c:3994
+msgid "Error: 'addr' is required."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'addr' পà§à¦°à¦¯à¦¼à§‹à¦œà¦¨à§€à¦¯à¦¼à¥¤"
+
+#: ../clients/cli/connections.c:4035
+#, c-format
+msgid "Error: 'bt-type': '%s' not valid; use [%s, %s (%s), %s]."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'bt-type': '%s' বৈধ নয়; [%s, %s (%s), %s] বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨à¥¤"
+
+#: ../clients/cli/connections.c:4079
+msgid "VLAN parent device or connection UUID: "
+msgstr "VLAN পেরেনà§à¦Ÿ ডিভাইস বা সংযোগ UUID: "
+
+#: ../clients/cli/connections.c:4082
+msgid "Error: 'dev' is required."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'dev' পà§à¦°à¦¯à¦¼à§‹à¦œà¦¨à§€à¦¯à¦¼à¥¤"
+
+#: ../clients/cli/connections.c:4086
+msgid "VLAN ID <0-4095>: "
+msgstr "VLAN ID <0-4095>: "
+
+#: ../clients/cli/connections.c:4089
+msgid "Error: 'id' is required."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'id' পà§à¦°à¦¯à¦¼à§‹à¦œà¦¨à§€à¦¯à¦¼à¥¤"
+
+#: ../clients/cli/connections.c:4095
+#, c-format
+msgid "Error: 'id': '%s' is not valid; use <0-4095>."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'id': '%s' বৈধ নয়; <0-4095> বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨à¥¤"
+
+#: ../clients/cli/connections.c:4105
+#, c-format
+msgid "Error: 'dev': '%s' is neither UUID, interface name, nor MAC."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'dev': '%s' UUID, ইনà§à¦Ÿà¦¾à¦°à¦«à§‡à¦¸ নাম, বা MAC নয়।"
+
+#: ../clients/cli/connections.c:4234
+#, c-format
+msgid "Error: 'mode': %s."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'mode': %s."
+
+#: ../clients/cli/connections.c:4243
+#, c-format
+msgid "Error: 'primary': '%s' is not a valid interface name."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'পà§à¦°à¦¾à¦¥à¦®à¦¿à¦•': '%s' à¦à¦•à¦Ÿà¦¿ বৈধ ইনà§à¦Ÿà¦¾à¦°à¦«à§‡à¦¸ নাম নয়।"
+
+#: ../clients/cli/connections.c:4292 ../clients/cli/connections.c:4390
+#: ../clients/cli/connections.c:4592
+msgid "Error: 'master' is required."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'মাসà§à¦Ÿà¦¾à¦°' পà§à¦°à¦¯à¦¼à§‹à¦œà¦¨à§€à¦¯à¦¼à¥¤"
+
+#: ../clients/cli/connections.c:4298 ../clients/cli/connections.c:4396
+#: ../clients/cli/connections.c:4598
+#, c-format
+msgid "Warning: master='%s' doesn't refer to any existing profile.\n"
+msgstr "সরà§à¦¤à¦•à¦¤à¦¾: master='%s' কোনো বিদà§à¦¯à¦®à¦¾à¦¨ পà§à¦°à§‹à¦«à¦¾à¦‡à¦²à¦•à§‡ রেফার করছে না।\n"
+
+#: ../clients/cli/connections.c:4301 ../clients/cli/connections.c:4404
+#: ../clients/cli/connections.c:4601
+#, c-format
+msgid ""
+"Warning: 'type' is currently ignored. We only support ethernet slaves for "
+"now.\n"
+msgstr ""
+"সতরà§à¦•à¦¤à¦¾: 'type' বরà§à¦¤à¦®à¦¾à¦¨à§‡ উপেকà§à¦·à¦¿à¦¤à¥¤ à¦à¦–নকার মতো অামরা শà§à¦§à§à¦®à¦¾à¦¤à§à¦° ethernet slaves "
+"সমরà§à¦¥à¦¨ করি।\n"
+
+#: ../clients/cli/connections.c:4498
+#, c-format
+msgid "Error: 'stp': %s."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'stp': %s."
+
+#: ../clients/cli/connections.c:4628
+#, c-format
+msgid "Error: 'hairpin': %s."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'hairpin': %s."
+
+#: ../clients/cli/connections.c:4681
+msgid "Error: 'vpn-type' is required."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'vpn-type' পà§à¦°à¦¯à¦¼à§‹à¦œà¦¨à§€à¦¯à¦¼à¥¤"
+
+#: ../clients/cli/connections.c:4688
+#, c-format
+#| msgid "Error: 'vpn-type': %s."
+msgid "Warning: 'vpn-type': %s not known.\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'vpn-type': %s অজানা।\n"
+
+#: ../clients/cli/connections.c:4749
+#, c-format
+msgid "Error: 'channel': '%s' is not valid; use <1-13>."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'channel': '%s' বৈধ নয়; <1-13> বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨à¥¤"
+
+#: ../clients/cli/connections.c:4781
+#, c-format
+msgid "Error: '%s' is not a valid connection type."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s' à¦à¦•à¦Ÿà¦¿ বৈধ সংযোগ ধরন নয়।"
+
+#: ../clients/cli/connections.c:4882
+#, c-format
+#| msgid "Error: Failed to add '%s' connection: (%d) %s"
+msgid "Error: Failed to add '%s' connection: %s"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s' সংযোগ যোগ করতে বà§à¦¯à¦°à§à¦¥: %s"
+
+#: ../clients/cli/connections.c:4887
+#, c-format
+msgid "Connection '%s' (%s) successfully added.\n"
+msgstr "সংযোগ '%s' (%s) সফলভাবে যোগ করা হয়েছে।\n"
+
+#: ../clients/cli/connections.c:5098
+#, c-format
+msgid "Error: 'type' argument is required."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'type' অারà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ পà§à¦°à¦¯à¦¼à§‹à¦œà¦¨à§€à¦¯à¦¼à¥¤"
+
+#: ../clients/cli/connections.c:5106
+#, c-format
+msgid "Error: invalid connection type; %s."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: অবৈধ সংযোগ ধরন; %s।"
+
+#: ../clients/cli/connections.c:5115
+#, c-format
+msgid "Error: 'autoconnect': %s."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'autoconnect': %s."
+
+#: ../clients/cli/connections.c:5125
+#, c-format
+#| msgid "Error: 'stp': %s."
+msgid "Error: 'save': %s."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'save': %s।"
+
+#: ../clients/cli/connections.c:5141
+msgid "Interface name [*]: "
+msgstr "ইনà§à¦Ÿà¦¾à¦°à¦«à§‡à¦¸ নাম [*]: "
+
+#: ../clients/cli/connections.c:5146
+#, c-format
+msgid "Error: 'ifname' argument is required."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'ifname' অারà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ পà§à¦°à¦¯à¦¼à§‹à¦œà¦¨à§€à¦¯à¦¼à¥¤"
+
+#: ../clients/cli/connections.c:5153
+#, c-format
+msgid "Error: 'ifname': '%s' is not a valid interface nor '*'."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'ifname': '%s' à¦à¦•à¦Ÿà¦¿ বৈধ ইনà§à¦Ÿà¦¾à¦°à¦«à§‡à¦¸ বা '*' নয়।"
+
+#: ../clients/cli/connections.c:5941
+#, 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 <>.
+#.
+#: ../clients/cli/connections.c:6023
+#, 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 | <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 [<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"
+
+#: ../clients/cli/connections.c:6050
+#, 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"
+
+#: ../clients/cli/connections.c:6057
+#, 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"
+
+#: ../clients/cli/connections.c:6064
+#, 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"
+
+#: ../clients/cli/connections.c:6069
+#, 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"
+
+#: ../clients/cli/connections.c:6074
+#, 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"
+
+#: ../clients/cli/connections.c:6079
+#, 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"
+
+#: ../clients/cli/connections.c:6086
+#, 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] :: save the connection\n"
+"\n"
+"সংযোগ পà§à¦°à§‹à¦«à¦¾à¦‡à¦² NetworkManager ঠপাঠায়, যা হয় à¦à¦Ÿà¦¿à¦•à§‡ সংরকà§à¦·à¦£ করবে\n"
+"সà§à¦¥à¦¾à§Ÿà§€à¦­à¦¾à¦¬à§‡, বা à¦à¦Ÿà¦¿à¦•à§‡ শà§à¦§à§ মেমরিতে রেখে দেবে। à¦à¦•à¦Ÿà¦¿ অারà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ ছাড়া 'save' à¦à¦°\n"
+"অরà§à¦¥ হল 'save persistent'।\n"
+"মনে রাখবেন যে, অাপনি পà§à¦°à§‹à¦«à¦¾à¦‡à¦² à¦à¦•à¦¬à¦¾à¦° সà§à¦¥à¦¾à§Ÿà§€à¦­à¦¾à¦¬à§‡ সংরকà§à¦·à¦£ করলে সেই সেটিংগà§à¦²à¦¿\n"
+"রিবà§à¦Ÿ বা রিসà§à¦Ÿà¦¾à¦°à§à¦Ÿà§‡à¦Ÿ পরে সংরকà§à¦·à¦¿à¦¤ হয়। পরবরà§à¦¤à§€ পরিবরà§à¦¤à¦¨à¦—à§à¦²à¦¿à¦“ অসà§à¦¥à¦¾à§Ÿà§€ বা\n"
+"সà§à¦¥à¦¾à§Ÿà§€ হতে পারে, কিনà§à¦¤à§ কোনো অসà§à¦¥à¦¾à§Ÿà§€ পরিবরà§à¦¤à¦¨ রিবà§à¦Ÿ বা\n"
+"রিসà§à¦Ÿà¦¾à¦°à§à¦Ÿà§‡à¦° পরে সà§à¦¥à¦¾à§Ÿà§€ হবে না। অাপনি সà§à¦¥à¦¾à§Ÿà§€ সংযোগ সমà§à¦ªà§‚রà§à¦£ ভাবে সরাতে চাইলে, "
+"সংযোগ\n"
+"পà§à¦°à§‹à¦«à¦¾à¦‡à¦² অবশà§à¦¯à¦‡ মà§à¦›à§‡ দিতে হবে।\n"
+
+#: ../clients/cli/connections.c:6097
+#, 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"
+
+#: ../clients/cli/connections.c:6104 ../clients/cli/connections.c:6261
+#, c-format
+msgid ""
+"back :: go to upper menu level\n"
+"\n"
+msgstr ""
+"back :: go to upper menu level\n"
+"\n"
+
+#: ../clients/cli/connections.c:6107
+#, c-format
+msgid ""
+"help/? [<command>] :: help for the nmcli commands\n"
+"\n"
+msgstr ""
+"help/? [<command>] :: help for the nmcli commands\n"
+"\n"
+
+#: ../clients/cli/connections.c:6110
+#, 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. নিমà§à¦¨à¦²à¦¿à¦–িত বিকলà§à¦ª উপলবà§à¦§:\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"
+
+#: ../clients/cli/connections.c:6130 ../clients/cli/connections.c:6267
+#, 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"
+
+#: ../clients/cli/connections.c:6135 ../clients/cli/connections.c:6272
+#: ../clients/cli/connections.c:6677 ../clients/cli/connections.c:7567
+#, 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 <>.
+#.
+#: ../clients/cli/connections.c:6201
+#, 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>] :: 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"
+
+#: ../clients/cli/connections.c:6226
+#, 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"
+
+#: ../clients/cli/connections.c:6230
+#, 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"
+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 [<value>] :: append new value to the property\n"
+"\n"
+"à¦à¦‡ কমà§à¦¯à¦¾à¦¨à§à¦¡ পà§à¦°à¦¦à¦¤à§à¦¤ <value> à¦à¦‡ বিশিষà§à¦Ÿà¦¤à¦¾à§Ÿ যোগ করে, যদি বিশিষà§à¦Ÿà¦¤à¦¾ কনà§à¦Ÿà§‡à¦¨à¦¾à¦° "
+"ধরনের হয়। à¦à¦•à¦•-মান বিশিষà§à¦Ÿà¦¤à¦¾à¦° জনà§à¦¯ বিশিষà§à¦Ÿà¦¤à¦¾ মান পà§à¦°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¿à¦¤ হয় "
+"('set' à¦à¦° সমান)।\n"
+
+#: ../clients/cli/connections.c:6236
+#, 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"
+
+#: ../clients/cli/connections.c:6240
+#, 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 [<value>|<index>|<option name>] :: delete the value\n"
+"\n"
+"বিশিষà§à¦Ÿà¦¤à¦¾ মান সরিয়ে দেয়। single-valued বিশিষà§à¦Ÿà¦¤à¦¾à¦° কà§à¦·à§‡à¦¤à§à¦°à§‡, à¦à¦Ÿà¦¿\n"
+"বিশিষà§à¦Ÿà¦¤à¦¾ তার ডিফলà§à¦Ÿ মানে সেট করে। container-type বিশিষà§à¦Ÿà¦¤à¦¾à¦—à§à¦²à¦¿à¦° জনà§à¦¯, "
+"à¦à¦Ÿà¦¿\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"
+
+#: ../clients/cli/connections.c:6251
+#, 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"
+
+#: ../clients/cli/connections.c:6256
+#, 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"
+
+#: ../clients/cli/connections.c:6264
+#, c-format
+msgid ""
+"help/? [<command>] :: help for nmcli commands\n"
+"\n"
+msgstr ""
+"help/? [<command>] :: help for nmcli commands\n"
+"\n"
+
+#: ../clients/cli/connections.c:6363
+#, c-format
+msgid "Error: Connection activation failed.\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: সংযোগ সকà§à¦°à¦¿à§Ÿ করতে বà§à¦¯à¦°à§à¦¥à¥¤\n"
+
+#: ../clients/cli/connections.c:6446
+#, c-format
+msgid "Error: setting '%s' is mandatory and cannot be removed.\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s' সেট করা বাধà§à¦¯à¦¤à¦¾à¦®à§‚লক à¦à¦¬à¦‚ সরানো যায় না।\n"
+
+#. TRANSLATORS: status line in nmcli connection editor
+#: ../clients/cli/connections.c:6464
+#, 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"
+
+#: ../clients/cli/connections.c:6499
+#, 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"
+
+#: ../clients/cli/connections.c:6544
+#, 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"
+
+#: ../clients/cli/connections.c:6566 ../clients/cli/connections.c:6981
+#: ../clients/cli/connections.c:7036
+#, c-format
+msgid "Enter '%s' value: "
+msgstr "'%s' মান দিন: "
+
+#: ../clients/cli/connections.c:6581 ../clients/cli/connections.c:6599
+#: ../clients/cli/connections.c:6985 ../clients/cli/connections.c:7041
+#, c-format
+msgid "Error: failed to set '%s' property: %s\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s' বিশিষà§à¦Ÿà¦¤à¦¾ সেট করতে বà§à¦¯à¦°à§à¦¥: %s\n"
+
+#: ../clients/cli/connections.c:6593
+#, c-format
+msgid "Edit '%s' value: "
+msgstr "'%s' মান সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨: "
+
+#: ../clients/cli/connections.c:6620
+#, c-format
+msgid "Error: %s\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: %s\n"
+
+#: ../clients/cli/connections.c:6626 ../clients/cli/connections.c:7120
+#: ../clients/cli/connections.c:7161
+#, c-format
+msgid "Error: failed to remove value of '%s': %s\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s' à¦à¦° মান সরাতে বà§à¦¯à¦°à§à¦¥: %s\n"
+
+#: ../clients/cli/connections.c:6647
+#, c-format
+msgid "Unknown command argument: '%s'\n"
+msgstr "অজানা কমà§à¦¯à¦¾à¦¨à§à¦¡ অারà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ: '%s'\n"
+
+#: ../clients/cli/connections.c:6773
+#, c-format
+msgid "Available settings: %s\n"
+msgstr "উপলবà§à¦§ সেটিং: %s\n"
+
+#: ../clients/cli/connections.c:6782
+#, c-format
+msgid "Error: invalid setting name; %s\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: অবৈধ সেটিং নাম; %s\n"
+
+#: ../clients/cli/connections.c:6799
+#, c-format
+msgid "Available properties: %s\n"
+msgstr "উপলবà§à¦§ বিশিষà§à¦Ÿà¦¤à¦¾: %s\n"
+
+#: ../clients/cli/connections.c:6807
+#, c-format
+msgid "Error: property %s\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: বিশিষà§à¦Ÿà¦¤à¦¾ %s\n"
+
+#: ../clients/cli/connections.c:6848
+#, 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"
+
+#: ../clients/cli/connections.c:6923
+#, c-format
+msgid "You may edit the following settings: %s\n"
+msgstr "অাপনি নিমà§à¦¨à¦²à¦¿à¦–িত সেটিং সমà§à¦ªà¦¾à¦¦à¦¨ করতে পারেন: %s\n"
+
+#: ../clients/cli/connections.c:6950
+#, c-format
+msgid ""
+"The connection profile has been removed from another client. You may type "
+"'save' to restore it.\n"
+msgstr ""
+"সংযোগ পà§à¦°à§‹à¦«à¦¾à¦‡à¦² অপর কà§à¦²à¦¾à¦¯à¦¼à§‡à¦¨à§à¦Ÿ থেকে সরানো হয়েছে। অাপনি à¦à¦Ÿà¦¿à¦•à§‡ পà§à¦¨à¦ƒà¦¸à¦žà§à¦šà¦¯à¦¼ করতে "
+"'save' "
+"টাইপ করতে পারেন।\n"
+
+#: ../clients/cli/connections.c:6979 ../clients/cli/connections.c:7034
+#, c-format
+msgid "Allowed values for '%s' property: %s\n"
+msgstr "'%s' বিশিষà§à¦Ÿà¦¤à¦¾à¦° অনà§à¦®à§‹à¦¦à¦¿à¦¤ মান: %s\n"
+
+#: ../clients/cli/connections.c:6989 ../clients/cli/connections.c:7203
+#, c-format
+msgid "Error: no setting selected; valid are [%s]\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: কোনো সেটিং নিরà§à¦¬à¦¾à¦šà¦¨ করা হয়নি; বৈধ হল [%s]\n"
+
+#: ../clients/cli/connections.c:6990
+#, c-format
+msgid "use 'goto <setting>' first, or 'set <setting>.<property>'\n"
+msgstr "পà§à¦°à¦¥à¦®à§‡ 'goto <setting>', বা 'set <setting>.<property>' বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨\n"
+
+#: ../clients/cli/connections.c:7004 ../clients/cli/connections.c:7140
+#: ../clients/cli/connections.c:7220
+#, c-format
+msgid "Error: invalid setting argument '%s'; valid are [%s]\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: অবৈধ সেটিং অারà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ '%s'; বৈধ হল [%s]\n"
+
+#: ../clients/cli/connections.c:7014
+#, c-format
+msgid "Error: missing setting for '%s' property\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s' বিশিষà§à¦Ÿà¦¤à¦¾à¦° সেটিং অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤\n"
+
+#: ../clients/cli/connections.c:7021
+#, c-format
+msgid "Error: invalid property: %s\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: অবৈধ বিশিষà§à¦Ÿà¦¤à¦¾: %s\n"
+
+#: ../clients/cli/connections.c:7068
+#, c-format
+msgid "Error: unknown setting '%s'\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: অজানা সেটিং '%s'\n"
+
+#: ../clients/cli/connections.c:7081
+#, c-format
+msgid "You may edit the following properties: %s\n"
+msgstr "অাপনি নিমà§à¦¨à¦²à¦¿à¦–িত বিশিষà§à¦Ÿà¦¤à¦¾ সমà§à¦ªà¦¾à¦¦à¦¨ করতে পারবেন: %s\n"
+
+#: ../clients/cli/connections.c:7125
+#, c-format
+msgid "Error: no argument given; valid are [%s]\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: কোনো অারà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ দেওয়া হয়নি; বৈধ হল [%s]\n"
+
+#: ../clients/cli/connections.c:7138
+#, c-format
+msgid "Setting '%s' is not present in the connection.\n"
+msgstr "সেটিং '%s' সংগà§à¦°à¦¹à§‡ উপসà§à¦¥à¦¿à¦¤ নেই।\n"
+
+#: ../clients/cli/connections.c:7179
+#, c-format
+msgid "Error: %s properties, nor it is a setting name.\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: %s বিশিষà§à¦Ÿà¦¤à¦¾, বা à¦à¦•à¦Ÿà¦¿ সেটিং নাম নয়।\n"
+
+#: ../clients/cli/connections.c:7204
+#, c-format
+msgid "use 'goto <setting>' first, or 'describe <setting>.<property>'\n"
+msgstr ""
+"পà§à¦°à¦¥à¦®à§‡ 'goto <setting>', বা 'describe <setting>.<property>' বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨\n"
+
+#: ../clients/cli/connections.c:7245
+#, c-format
+msgid "Error: invalid property: %s, neither a valid setting name.\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: অবৈধ বিশিষà§à¦Ÿà¦¤à¦¾: %s, à¦à¦•à¦Ÿà¦¿ বৈধ সেটিং নামও নয়।\n"
+
+#: ../clients/cli/connections.c:7274
+#, c-format
+msgid "Error: unknown setting: '%s'\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: অজানা সেটিং: '%s'\n"
+
+#: ../clients/cli/connections.c:7279
+#, 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"
+
+#: ../clients/cli/connections.c:7304
+#, c-format
+#| msgid "Error: invalid property: %s\n"
+msgid "Error: invalid property: %s%s\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: অবৈধ বিশিষà§à¦Ÿà¦¤à¦¾: %s%s\n"
+
+#: ../clients/cli/connections.c:7306
+#| msgid "Error: invalid property: %s, neither a valid setting name.\n"
+msgid ", neither a valid setting name"
+msgstr ", à¦à¦•à¦Ÿà¦¿ বৈধ সà§à¦Ÿà§à¦°à§€à¦‚ নামও নয়"
+
+#: ../clients/cli/connections.c:7326
+#, c-format
+msgid "Verify setting '%s': %s\n"
+msgstr "'%s' সেটিং যাচাই করà§à¦¨: %s\n"
+
+#: ../clients/cli/connections.c:7333
+#, c-format
+msgid "Verify connection: %s\n"
+msgstr "সংযোগ যাচাই করà§à¦¨: %s\n"
+
+#: ../clients/cli/connections.c:7351
+#, c-format
+#| msgid "Error: invalid extra argument '%s'."
+msgid "Error: invalid argument '%s'\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: অবৈধ অারà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ '%s'\n"
+
+#: ../clients/cli/connections.c:7384
+#, c-format
+msgid "Error: Failed to save '%s' (%s) connection: (%d) %s\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s' (%s) সংযোগ সংরকà§à¦·à¦£ করতে বà§à¦¯à¦°à§à¦¥: (%d) %s\n"
+
+#: ../clients/cli/connections.c:7392
+#, c-format
+msgid "Connection '%s' (%s) successfully saved.\n"
+msgstr "'%s' (%s) সংযোগ সফল ভাবে সংরকà§à¦·à¦£ করা হয়েছে।\n"
+
+#: ../clients/cli/connections.c:7393
+#, c-format
+#| msgid "Connection '%s' (%s) successfully added.\n"
+msgid "Connection '%s' (%s) successfully updated.\n"
+msgstr "সংযোগ '%s' (%s) সফলভাবে অাপডেট করা হয়েছে।\n"
+
+#: ../clients/cli/connections.c:7426
+#, c-format
+msgid "Error: connection verification failed: %s\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: সংযোগ যাচাইকরণ বà§à¦¯à¦°à§à¦¥ হয়েছে: %s\n"
+
+#: ../clients/cli/connections.c:7427
+msgid "(unknown error)"
+msgstr "(অজানা তà§à¦°à§à¦Ÿà¦¿)"
+
+#: ../clients/cli/connections.c:7448
+#, c-format
+msgid "Error: connection is not saved. Type 'save' first.\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: সংযোগ সংরকà§à¦·à¦¿à¦¤ হয়নি। পà§à¦°à¦¥à¦®à§‡ 'save' টাইপ করà§à¦¨à¥¤\n"
+
+#: ../clients/cli/connections.c:7452
+#, c-format
+msgid "Error: connection is not valid: %s\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: সংযোগ বৈধ নয়: %s\n"
+
+#: ../clients/cli/connections.c:7462
+#, c-format
+msgid "Error: Cannot activate connection: %s.\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: সংযোগ সকà§à¦°à¦¿à¦¯à¦¼ করা যায় না: %s.\n"
+
+#: ../clients/cli/connections.c:7472
+#, c-format
+msgid "Error: Failed to activate '%s' (%s) connection: (%d) %s\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s' (%s) সংযোগ সকà§à¦°à¦¿à¦¯à¦¼ করতে বà§à¦¯à¦°à§à¦¥: (%d) %s\n"
+
+#: ../clients/cli/connections.c:7478
+#, c-format
+msgid "Monitoring connection activation (press any key to continue)\n"
+msgstr "সংযোগ সকà§à¦°à¦¿à¦¯à¦¼à¦•à¦°à¦£à§‡à¦° উপরে নজর রাখা (জারি রাখতে যেকোনো কী টিপà§à¦¨)\n"
+
+#: ../clients/cli/connections.c:7516
+#, c-format
+msgid "Error: status-line: %s\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: status-line: %s\n"
+
+#: ../clients/cli/connections.c:7524
+#, c-format
+msgid "Error: save-confirmation: %s\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: save-confirmation: %s\n"
+
+#: ../clients/cli/connections.c:7532
+#, c-format
+msgid "Error: bad color number: '%s'; use <0-8>\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: বাজে রঙ নমà§à¦¬à¦°: '%s'; বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨ <0-8>\n"
+
+#: ../clients/cli/connections.c:7544
+#, c-format
+msgid "Current nmcli configuration:\n"
+msgstr "বরà§à¦¤à¦®à¦¾à¦¨ nmcli কনফিগারেশন:\n"
+
+#: ../clients/cli/connections.c:7552
+#, c-format
+msgid "Invalid configuration option '%s'; allowed [%s]\n"
+msgstr "অবৈধ কনফিগারেশন বিকলà§à¦ª '%s'; অনà§à¦®à§‹à¦¦à¦¿à¦¤ [%s]\n"
+
+#: ../clients/cli/connections.c:7794
+#, c-format
+msgid "Error: only one of 'id', uuid, or 'path' can be provided."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'id', uuid, বা 'path' à¦à¦° মধà§à¦¯à§‡ à¦à¦•à¦Ÿà¦¿ পাথ দেওয়া যেতে পারে।"
+
+#: ../clients/cli/connections.c:7806 ../clients/cli/connections.c:7990
+#: ../clients/cli/connections.c:7997
+#, c-format
+msgid "Error: Unknown connection '%s'."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: অজানা সংযোগ '%s'।"
+
+#: ../clients/cli/connections.c:7821
+#, c-format
+msgid "Warning: editing existing connection '%s'; 'type' argument is ignored\n"
+msgstr ""
+"সতরà§à¦•à¦¤à¦¾: বরà§à¦¤à¦®à¦¾à¦¨ সংযোগ '%s' সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ করা হচà§à¦›à§‡; 'type' অারà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ উপেকà§à¦·à¦¿à¦¤\n"
+
+#: ../clients/cli/connections.c:7824
+#, c-format
+msgid ""
+"Warning: editing existing connection '%s'; 'con-name' argument is ignored\n"
+msgstr ""
+"সতরà§à¦•à¦¤à¦¾: বরà§à¦¤à¦®à¦¾à¦¨ সংযোগ '%s' সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ করা হচà§à¦›à§‡; 'con-name' অারà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ "
+"উপেকà§à¦·à¦¿à¦¤\n"
+
+#: ../clients/cli/connections.c:7838
+#, c-format
+msgid "Valid connection types: %s\n"
+msgstr "বৈধ সংযোগ ধরন: %s\n"
+
+#: ../clients/cli/connections.c:7840
+#, c-format
+msgid "Error: invalid connection type; %s\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: অবৈধ সংযোগ ধরন; %s।\n"
+
+#: ../clients/cli/connections.c:7879
+#, c-format
+msgid "===| nmcli interactive connection editor |==="
+msgstr "===| nmcli অানà§à¦¤à¦ƒà¦¸à¦•à§à¦°à¦¿à¦¯à¦¼ সংযোগ সমà§à¦ªà¦¾à¦¦à¦• |==="
+
+#: ../clients/cli/connections.c:7882
+#, c-format
+msgid "Editing existing '%s' connection: '%s'"
+msgstr "বিদà§à¦¯à¦®à¦¾à¦¨ '%s' সংযোগ সমà§à¦ªà¦¾à¦¦à¦¨ করা হচà§à¦›à§‡: '%s'"
+
+#: ../clients/cli/connections.c:7884
+#, c-format
+msgid "Adding a new '%s' connection"
+msgstr "à¦à¦•à¦Ÿà¦¿ নতà§à¦¨ '%s' সংযোগ যোগ করা হচà§à¦›à§‡"
+
+#: ../clients/cli/connections.c:7886
+#, c-format
+msgid "Type 'help' or '?' for available commands."
+msgstr "উপলবà§à¦§ কমà§à¦¯à¦¾à¦¨à§à¦¡à¦—à§à¦²à¦¿à¦° জনà§à¦¯ 'help' বা '?' টাইপ করà§à¦¨à¥¤"
+
+#: ../clients/cli/connections.c:7888
+#, c-format
+msgid "Type 'describe [<setting>.<prop>]' for detailed property description."
+msgstr ""
+"বিসà§à¦¤à¦¾à¦°à¦¿à¦¤ বিশিষà§à¦Ÿà¦¤à¦¾ বরà§à¦£à¦¨à¦¾à¦° জনà§à¦¯ 'describe [<setting>.<prop>]' টাইপ করà§à¦¨à¥¤"
+
+#: ../clients/cli/connections.c:7926
+#, c-format
+#| msgid "Error: Failed to modify connection '%s': (%d) %s"
+msgid "Error: Failed to modify connection '%s': %s"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s': %s সংযোগ সংশোধন করতে বà§à¦¯à¦°à§à¦¥"
+
+#: ../clients/cli/connections.c:7933
+#, c-format
+msgid "Connection '%s' (%s) successfully modified.\n"
+msgstr "সংযোগ '%s' (%s) সফলভাবে সংশোধিত হয়েছে।\n"
+
+#: ../clients/cli/connections.c:7965
+#, c-format
+msgid "Error: No arguments provided."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: কোনো অারà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ দেওয়া হয়নি।"
+
+#: ../clients/cli/connections.c:7984
+#, c-format
+msgid "Error: connection ID is missing."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: সংযোগ অাইডি অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤à¥¤"
+
+#: ../clients/cli/connections.c:8006 ../clients/cli/connections.c:8019
+#, c-format
+msgid "Error: <setting>.<property> argument is missing."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: <setting>.<property> অারà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤à¥¤"
+
+#: ../clients/cli/connections.c:8024
+#, c-format
+#| msgid "Error: fields for '%s' options are missing."
+msgid "Error: value for '%s' is missing."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s' à¦à¦° মান অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤à¥¤"
+
+#: ../clients/cli/connections.c:8042
+#, c-format
+msgid "Error: invalid <setting>.<property> '%s'."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: অবৈধ <setting>.<property> '%s'।"
+
+#: ../clients/cli/connections.c:8050
+#, c-format
+msgid "Error: invalid or not allowed setting '%s': %s."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: অবৈধ বা অননà§à¦®à§‹à¦¦à¦¿à¦¤ সেটিং '%s': %s।"
+
+#: ../clients/cli/connections.c:8071
+#, c-format
+msgid "Error: invalid property '%s': %s."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: অবৈধ বিশিষà§à¦Ÿà¦¤à¦¾ '%s': %s।"
+
+#: ../clients/cli/connections.c:8082
+#, c-format
+msgid "Error: failed to modify %s.%s: %s."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: %s.%s: %s সংশোধন করতে বà§à¦¯à¦°à§à¦¥à¥¤"
+
+#: ../clients/cli/connections.c:8100
+#, c-format
+#| msgid "Error: failed to remove value of '%s': %s\n"
+msgid "Error: failed to remove a value from %s.%s: %s."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: à¦à¦–ান থেকে à¦à¦•à¦Ÿà¦¿ মান সরাতে বà§à¦¯à¦°à§à¦¥ %s.%s: %s।"
+
+#: ../clients/cli/connections.c:8137
+#, c-format
+msgid "Error: Connection deletion failed: %s"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: সংযোগ মà§à¦›à§‡ ফেলতে বà§à¦¯à¦°à§à¦¥: %s"
+
+#: ../clients/cli/connections.c:8200
+#, c-format
+msgid "Error: unknown connection: %s\n"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: অজানা সংযোগ: %s\n"
+
+#. truncate trailing ", "
+#: ../clients/cli/connections.c:8237
+#, c-format
+msgid "Error: cannot delete unknown connection(s): %s."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: অজানা সংযোগ মোছা যায় না: %s।"
+
+#: ../clients/cli/connections.c:8254 ../clients/cli/connections.c:8282
+#: ../clients/cli/connections.c:8417 ../clients/cli/devices.c:2803
+#: ../clients/cli/network-manager.c:324 ../clients/cli/network-manager.c:462
+#, c-format
+msgid "Error: NetworkManager is not running."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: NetworkManager চলছে না।"
+
+#: ../clients/cli/connections.c:8308
+#, c-format
+msgid "Could not load file '%s'\n"
+msgstr "'%s' ফাইল লোড করা যায়নি\n"
+
+#: ../clients/cli/connections.c:8427 ../clients/cli/network-manager.c:596
+#, c-format
+#| msgid "Error: Could not get system settings."
+msgid "Error: Could not get system settings: %s."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: সিসà§à¦Ÿà§‡à¦®à§‡à¦° বৈশিষà§à¦Ÿà§à¦¯ পà§à¦°à¦¾à¦ªà§à¦¤ করতে বà§à¦¯à¦°à§à¦¥: %s।"
+
+#: ../clients/cli/connections.c:8437
+#, c-format
+msgid "Error: Can't obtain connections: settings service is not running."
+msgstr ""
+"তà§à¦°à§à¦Ÿà¦¿: সংযোগ পà§à¦°à¦¾à¦ªà§à¦¤ করতে বà§à¦¯à¦°à§à¦¥: বৈশিষà§à¦Ÿà§à¦¯à§‡à¦° পরিসেবা বরà§à¦¤à¦®à¦¾à¦¨à§‡ চলছে না।"
+
+#: ../clients/cli/connections.c:8491
+#, c-format
+msgid "Error: '%s' is not valid 'connection' command."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s' বৈধ 'connection' কমà§à¦¯à¦¾à¦¨à§à¦¡ নয়।"
+
+#. define some prompts
+#: ../clients/cli/devices.c:36
+msgid "Interface: "
+msgstr "ইনà§à¦Ÿà¦¾à¦°à¦«à§‡à¦¸:"
+
+#. 3
+#. 17
+#: ../clients/cli/devices.c:44 ../clients/cli/devices.c:73
+msgid "CONNECTION"
+msgstr "CONNECTION"
+
+#. 4
+#. 18
+#: ../clients/cli/devices.c:45 ../clients/cli/devices.c:74
+msgid "CON-UUID"
+msgstr "CON-UUID"
+
#. 2
-#: ../cli/src/devices.c:110
+#: ../clients/cli/devices.c:58
msgid "VENDOR"
msgstr "VENDOR"
#. 3
-#: ../cli/src/devices.c:111
+#: ../clients/cli/devices.c:59
msgid "PRODUCT"
msgstr "PRODUCT"
#. 4
-#: ../cli/src/devices.c:112
+#: ../clients/cli/devices.c:60
msgid "DRIVER"
msgstr "DRIVER"
#. 5
-#: ../cli/src/devices.c:113
+#: ../clients/cli/devices.c:61
msgid "DRIVER-VERSION"
msgstr "DRIVER-VERSION"
#. 6
-#: ../cli/src/devices.c:114
+#: ../clients/cli/devices.c:62
msgid "FIRMWARE-VERSION"
msgstr "FIRMWARE-VERSION"
#. 7
-#: ../cli/src/devices.c:115
+#: ../clients/cli/devices.c:63
msgid "HWADDR"
msgstr "HWADDR"
-#. 9
-#: ../cli/src/devices.c:117
+#. 8
+#: ../clients/cli/devices.c:64 ../clients/tui/nmt-page-ethernet.c:86
+#: ../clients/tui/nmt-page-infiniband.c:96 ../clients/tui/nmt-page-vlan.c:130
+#: ../clients/tui/nmt-page-wifi.c:366
+msgid "MTU"
+msgstr "MTU"
+
+#. 10
+#: ../clients/cli/devices.c:66
msgid "REASON"
msgstr "REASON"
-#. 10
-#: ../cli/src/devices.c:118
+#. 11
+#: ../clients/cli/devices.c:67
msgid "UDI"
msgstr "UDI"
-#. 11
-#: ../cli/src/devices.c:119
+#. 12
+#: ../clients/cli/devices.c:68
msgid "IP-IFACE"
msgstr "IP-IFACE"
-#. 12
-#: ../cli/src/devices.c:120
+#. 13
+#. 2
+#: ../clients/cli/devices.c:69 ../clients/cli/devices.c:97
+msgid "IS-SOFTWARE"
+msgstr "IS-SOFTWARE"
+
+#. 14
+#: ../clients/cli/devices.c:70
msgid "NM-MANAGED"
msgstr "NM-MANAGED"
-#. 14
-#: ../cli/src/devices.c:122
+#. 16
+#: ../clients/cli/devices.c:72
msgid "FIRMWARE-MISSING"
msgstr "FIRMWARE-MISSING"
-#. 15
-#: ../cli/src/devices.c:123
-msgid "CONNECTION"
-msgstr "CONNECTION"
+#. 0
+#: ../clients/cli/devices.c:85
+msgid "AVAILABLE-CONNECTION-PATHS"
+msgstr "AVAILABLE-CONNECTION-PATHS"
+
+#. 1
+#: ../clients/cli/devices.c:86
+msgid "AVAILABLE-CONNECTIONS"
+msgstr "AVAILABLE-CONNECTIONS"
#. 0
-#: ../cli/src/devices.c:132
+#: ../clients/cli/devices.c:95
msgid "CARRIER-DETECT"
msgstr "CARRIER-DETECT"
#. 1
-#: ../cli/src/devices.c:133
+#: ../clients/cli/devices.c:96
msgid "SPEED"
msgstr "SPEED"
#. 0
-#: ../cli/src/devices.c:142
+#: ../clients/cli/devices.c:106
msgid "CARRIER"
msgstr "CARRIER"
#. 0
-#: ../cli/src/devices.c:152
+#: ../clients/cli/devices.c:115 ../clients/cli/devices.c:545
msgid "WEP"
msgstr "WEP"
#. 1
-#: ../cli/src/devices.c:153
+#: ../clients/cli/devices.c:116
msgid "WPA"
msgstr "WPA"
#. 2
-#: ../cli/src/devices.c:154
+#: ../clients/cli/devices.c:117 ../clients/cli/devices.c:553
msgid "WPA2"
msgstr "WPA2"
#. 3
-#: ../cli/src/devices.c:155
+#: ../clients/cli/devices.c:118
msgid "TKIP"
msgstr "TKIP"
#. 4
-#: ../cli/src/devices.c:156
+#: ../clients/cli/devices.c:119
msgid "CCMP"
msgstr "CCMP"
+#. 5
+#. 2
+#: ../clients/cli/devices.c:120 ../clients/cli/devices.c:219
+msgid "AP"
+msgstr "AP"
+
+#. 6
+#: ../clients/cli/devices.c:121
+msgid "ADHOC"
+msgstr "ADHOC"
+
#. 0
-#: ../cli/src/devices.c:166
+#: ../clients/cli/devices.c:130
msgid "CTR-FREQ"
msgstr "CTR-FREQ"
#. 1
-#: ../cli/src/devices.c:167
+#: ../clients/cli/devices.c:131
msgid "RSSI"
msgstr "RSSI"
#. 2
-#: ../cli/src/devices.c:168
+#: ../clients/cli/devices.c:132
msgid "CINR"
msgstr "CINR"
#. 3
-#: ../cli/src/devices.c:169
+#: ../clients/cli/devices.c:133
msgid "TX-POW"
msgstr "TX-POW"
#. 4
-#: ../cli/src/devices.c:170
+#: ../clients/cli/devices.c:134
msgid "BSID"
msgstr "BSID"
#. 0
-#: ../cli/src/devices.c:180
+#: ../clients/cli/devices.c:143 ../clients/tui/nmt-page-wifi.c:220
msgid "SSID"
msgstr "SSID"
#. 1
-#: ../cli/src/devices.c:181
+#: ../clients/cli/devices.c:144
+msgid "SSID-HEX"
+msgstr "SSID-HEX"
+
+#. 2
+#: ../clients/cli/devices.c:145 ../clients/tui/nmt-page-wifi.c:354
msgid "BSSID"
msgstr "BSSID"
-#. 2
-#: ../cli/src/devices.c:182
+#. 3
+#: ../clients/cli/devices.c:146
msgid "MODE"
msgstr "MODE"
-#. 3
-#: ../cli/src/devices.c:183
+#. 4
+#: ../clients/cli/devices.c:147
+msgid "CHAN"
+msgstr "CHAN"
+
+#. 5
+#: ../clients/cli/devices.c:148
msgid "FREQ"
msgstr "FREQ"
-#. 4
-#: ../cli/src/devices.c:184
+#. 6
+#: ../clients/cli/devices.c:149
msgid "RATE"
msgstr "RATE"
-#. 5
+#. 7
#. 1
-#: ../cli/src/devices.c:185 ../cli/src/devices.c:203
+#: ../clients/cli/devices.c:150 ../clients/cli/devices.c:170
msgid "SIGNAL"
msgstr "SIGNAL"
-#. 6
-#: ../cli/src/devices.c:186
+#. 8
+#: ../clients/cli/devices.c:151
+msgid "BARS"
+msgstr "BARS"
+
+#. 9
+#: ../clients/cli/devices.c:152
msgid "SECURITY"
msgstr "SECURITY"
-#. 7
-#: ../cli/src/devices.c:187
+#. 10
+#: ../clients/cli/devices.c:153
msgid "WPA-FLAGS"
msgstr "WPA-FLAGS"
-#. 8
-#: ../cli/src/devices.c:188
+#. 11
+#: ../clients/cli/devices.c:154
msgid "RSN-FLAGS"
msgstr "RSN-FLAGS"
-#. 10
-#. 4
-#: ../cli/src/devices.c:190 ../cli/src/devices.c:206
-msgid "ACTIVE"
-msgstr "ACTIVE"
+#. 14
+#: ../clients/cli/devices.c:157
+msgid "*"
+msgstr "*"
#. 0
-#: ../cli/src/devices.c:218
+#. 5
+#: ../clients/cli/devices.c:169 ../clients/cli/devices.c:222
+msgid "NSP"
+msgstr "NSP"
+
+#. 0
+#: ../clients/cli/devices.c:184
msgid "SLAVES"
msgstr "SLAVES"
#. 0
-#: ../cli/src/devices.c:227
+#: ../clients/cli/devices.c:193
msgid "ID"
msgstr "ID"
-#: ../cli/src/devices.c:243
-#, c-format
+#. 0
+#: ../clients/cli/devices.c:202 ../clients/cli/devices.c:217
+msgid "CAPABILITIES"
+msgstr "CAPABILITIES"
+
+#. 1
+#: ../clients/cli/devices.c:218
+msgid "WIFI-PROPERTIES"
+msgstr "WIFI-PROPERTIES"
+
+#. 3
+#: ../clients/cli/devices.c:220
+msgid "WIRED-PROPERTIES"
+msgstr "WIRED-PROPERTIES"
+
+#. 4
+#: ../clients/cli/devices.c:221
+msgid "WIMAX-PROPERTIES"
+msgstr "WIMAX-PROPERTIES"
+
+#. 10
+#: ../clients/cli/devices.c:227 ../clients/tui/nmt-page-bond.c:73
+msgid "BOND"
+msgstr "BOND"
+
+#. 11
+#: ../clients/cli/devices.c:228 ../clients/tui/nmt-page-team.c:51
+msgid "TEAM"
+msgstr "টিম"
+
+#. 12
+#: ../clients/cli/devices.c:229 ../clients/tui/nmt-page-bridge.c:42
+msgid "BRIDGE"
+msgstr "BRIDGE"
+
+#. 14
+#: ../clients/cli/devices.c:231
+msgid "BLUETOOTH"
+msgstr "BLUETOOTH"
+
+#. 15
+#: ../clients/cli/devices.c:232
+msgid "CONNECTIONS"
+msgstr "CONNECTIONS"
+
+#: ../clients/cli/devices.c:256
+#, c-format
+#| msgid ""
+#| "Usage: nmcli device { COMMAND | help }\n"
+#| "\n"
+#| "COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
+#| "\n"
+#| "COMMAND := { status | show | connect | disconnect | wifi }\n"
+#| "\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"
+#| " 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 | delete | wifi | wimax }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | delete | 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"
+" delete <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"
+"বà§à¦¯à¦¬à¦¹à¦¾à¦°: nmcli device { COMMAND | help }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | delete | wifi | wimax }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | delete | 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"
+" delete <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"
+
+#: ../clients/cli/devices.c:280
+#, 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:344
+#: ../clients/cli/devices.c:295
+#, 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"
+
+#: ../clients/cli/devices.c:306
+#, 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"
+
+#: ../clients/cli/devices.c:318
+#, 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"
+
+#: ../clients/cli/devices.c:330
+#, 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"
+msgid ""
+"Usage: nmcli device delete { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Deletes the software device.\n"
+"The command removes the interface. It only works for software devices\n"
+"(like bonds, bridges, etc.). Hardware devices cannot be deleted by the\n"
+"command.\n"
+"\n"
+msgstr ""
+"বà§à¦¯à¦¬à¦¹à¦¾à¦°: nmcli device delete { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"সফà§à¦Ÿà¦“য়à§à¦¯à¦¾à¦° ডিভাইসটি মোছে।\n"
+"কমà§à¦¯à¦¾à¦¨à§à¦¡ ইনà§à¦Ÿà¦¾à¦°à¦«à§‡à¦¸ সরায়। à¦à¦Ÿà¦¿ শà§à¦§à§à¦®à¦¾à¦¤à§à¦° সফà§à¦Ÿà¦“য়à§à¦¯à¦¾à¦° ডিভাইসের জনà§à¦¯ কাজ করে\n"
+"(যেমন বনà§à¦¡, বà§à¦°à¦¿à¦œ ইতà§à¦¯à¦¾à¦¦à¦¿)। হারà§à¦¡à¦“য়à§à¦¯à¦¾à¦° ডিভাইসগà§à¦²à¦¿ কমà§à¦¯à¦¾à¦¨à§à¦¡ দà§à¦¬à¦¾à¦°à¦¾ মোছা যাবে "
+"না\n"
+"।\n"
+"\n"
+
+#: ../clients/cli/devices.c:343
+#, 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 অà§à¦¯à¦¾à¦•à§à¦¸à§‡à¦¸ পয়েনà§à¦Ÿ তালিকাবদà§à¦§ করà§à¦¨à¥¤ à¦à¦•à¦Ÿà¦¿ নিরà§à¦¦à¦¿à¦·à§à¦Ÿ ইনà§à¦Ÿà¦¾à¦°à¦«à§‡à¦¸à§‡à¦° "
+"জনà§à¦¯ AP "
+"তালিকাভà§à¦•à§à¦¤ করতে 'ifname' à¦à¦¬à¦‚ 'bssid' বিকলà§à¦ª\n"
+"বà§à¦¯à¦¬à¦¹à¦¾à¦° করা যেতে পারে বা à¦à¦•à¦Ÿà¦¿ নিরà§à¦¦à¦¿à¦·à§à¦Ÿ 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"
+"মà§à¦¯à¦¾à¦¨à§à¦¯à¦¼à¦¾à¦² ভাবে সà§à¦•à§à¦¯à¦¾à¦¨ শà§à¦°à§ করা উপযোগী হতে পারে। মনে রাখবেন যে, à¦à¦‡ কমà§à¦¯à¦¾à¦¨à§à¦¡\n"
+"AP দেখায় না, à¦à¦° জনà§à¦¯ 'nmcli device wifi list' বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨à¥¤\n"
+"\n"
+
+#: ../clients/cli/devices.c:376
+#, 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"
+"কোনো নিরà§à¦¦à¦¿à¦·à§à¦Ÿ ইনà§à¦Ÿà¦¾à¦°à¦«à§‡à¦¸à§‡à¦° নেটওয়ারà§à¦•à¦—à§à¦²à¦¿ তালিকাভà§à¦•à§à¦¤ করতে 'ifname' à¦à¦¬à¦‚ 'nsp' "
+"বিকলà§à¦ª "
+"বà§à¦¯à¦¬à¦¹à¦¾à¦° করা যেতে পারে, বা à¦à¦•à¦Ÿà¦¿ নিরà§à¦¦à¦¿à¦·à§à¦Ÿ NSP দিয়ে।\n"
+"\n"
+
+#: ../clients/cli/devices.c:465 ../clients/cli/devices.c:656
msgid "(none)"
msgstr "(শূণà§à¦¯)"
-#: ../cli/src/devices.c:400
+#: ../clients/cli/devices.c:533
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:401
+#: ../clients/cli/devices.c:534
#, c-format
msgid "%u Mbit/s"
msgstr "%u মেগাবাইট/সেকেনà§à¦¡"
-#: ../cli/src/devices.c:410
-msgid "Encrypted: "
-msgstr "à¦à¦¨à¦•à§à¦°à¦¿à¦ªà¦¶à¦¨ সহ: "
+#: ../clients/cli/devices.c:549
+msgid "WPA1"
+msgstr "WPA1"
-#: ../cli/src/devices.c:415
-msgid "WEP "
-msgstr "WEP "
+#: ../clients/cli/devices.c:558
+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
+#: ../clients/cli/devices.c:574
msgid "Ad-Hoc"
msgstr "অà§à¦¯à¦¾à¦¡-হক"
-#: ../cli/src/devices.c:432
-msgid "Infrastructure"
-msgstr "পরিকাঠামো"
+#: ../clients/cli/devices.c:575
+msgid "Infra"
+msgstr "Infra"
-#: ../cli/src/devices.c:468
+#: ../clients/cli/devices.c:607
msgid "Home"
msgstr "পà§à¦°à¦§à¦¾à¦¨"
-#: ../cli/src/devices.c:471
+#: ../clients/cli/devices.c:610
msgid "Partner"
msgstr "সহযোগী"
-#: ../cli/src/devices.c:474
+#: ../clients/cli/devices.c:613
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
+#: ../clients/cli/devices.c:785
msgid "Device details"
msgstr "ডিভাইসের বিবরণ"
-#: ../cli/src/devices.c:602 ../cli/src/devices.c:605 ../cli/src/devices.c:1081
-#: ../cli/src/utils.c:479
+#: ../clients/cli/devices.c:797
+#, c-format
+msgid "Error: 'device show': %s"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'device show': %s"
+
+#: ../clients/cli/devices.c:848 ../clients/cli/devices.c:851
msgid "(unknown)"
msgstr "(অজানা)"
-#: ../cli/src/devices.c:614
-msgid "not connected"
-msgstr "সংযোগ বিহীন"
-
-#: ../cli/src/devices.c:641
+#: ../clients/cli/devices.c:889
#, c-format
msgid "%u Mb/s"
msgstr "%u মেগাবাইট/সেকেনà§à¦¡"
-#. Print header
-#. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:715
+#: ../clients/cli/devices.c:975
msgid "on"
msgstr "চালà§"
-#: ../cli/src/devices.c:715
+#: ../clients/cli/devices.c:975
msgid "off"
msgstr "বনà§à¦§"
-#: ../cli/src/devices.c:923
-#, c-format
-msgid "Error: 'dev status': %s"
-msgstr "তà§à¦°à§à¦Ÿà¦¿: 'dev status': %s"
-
-#: ../cli/src/devices.c:925
+#: ../clients/cli/devices.c:1247
#, 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:948
+#. Add headers
+#: ../clients/cli/devices.c:1254
msgid "Status of devices"
msgstr "ডিভাইসের অবসà§à¦¥à¦¾"
-#: ../cli/src/devices.c:979
+#: ../clients/cli/devices.c:1285
#, 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
+#: ../clients/cli/devices.c:1302 ../clients/cli/devices.c:1582
+#: ../clients/cli/devices.c:1715 ../clients/cli/devices.c:1802
+#: ../clients/cli/devices.c:1935 ../clients/cli/devices.c:2596
#, c-format
msgid "Error: Device '%s' not found."
msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s' ডিভাইস পাওয়া যায়নি।"
-#: ../cli/src/devices.c:1043
+#: ../clients/cli/devices.c:1357
+#, c-format
+#| msgid "Success: Device '%s' successfully activated."
+msgid "Device '%s' successfully activated with '%s'.\n"
+msgstr "'%s' ডিভাইস সাফলà§à¦¯à§‡à¦° সাথে '%s' à¦à¦° সাথে সকà§à¦°à¦¿à¦¯à¦¼ করা হয়েছে।\n"
+
+#: ../clients/cli/devices.c:1379 ../clients/cli/devices.c:1430
+#, c-format
+msgid "Connection with UUID '%s' created and activated on device '%s'\n"
+msgstr "UUID '%s'-র সাথে '%s' ডিভাইসের উপর সংযোগ তৈরি ও সকà§à¦°à¦¿à§Ÿ করা হয়েছে\n"
+
+#: ../clients/cli/devices.c:1384
+#, c-format
+msgid "Error: Connection activation failed: (%d) %s."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: সংযোগ সকà§à¦°à¦¿à§Ÿ করতে বà§à¦¯à¦°à§à¦¥: (%d) %s।"
+
+#: ../clients/cli/devices.c:1411
+#, c-format
+#| msgid "Error: Failed to add/activate new connection: (%d) %s"
+msgid "Error: Failed to add/activate new connection: %s"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: নতà§à¦¨ সংযোগ যোগ/সকà§à¦°à¦¿à§Ÿ করতে বà§à¦¯à¦°à§à¦¥: %s"
+
+#: ../clients/cli/devices.c:1420
+#, c-format
+msgid "Error: Failed to add/activate new connection: Unknown error"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: নতà§à¦¨ সংযোগ যোগ/সকà§à¦°à¦¿à§Ÿ করতে বà§à¦¯à¦°à§à¦¥: অজানা তà§à¦°à§à¦Ÿà¦¿"
+
+#: ../clients/cli/devices.c:1497
+#, c-format
+msgid "Error: Device activation failed: %s"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: ডিভাইস সকà§à¦°à¦¿à§Ÿ করতে বà§à¦¯à¦°à§à¦¥: %s"
+
+#: ../clients/cli/devices.c:1506
+#, c-format
+#| msgid "Error: Device activation failed: %s"
+msgid "Error: Device activation failed: device was disconnected"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: ডিভাইস সকà§à¦°à¦¿à§Ÿ করতে বà§à¦¯à¦°à§à¦¥: ডিভাইস সংযোগ বিচà§à¦›à¦¿à¦¨à§à¦¨ করা হয়েছে"
+
+#: ../clients/cli/devices.c:1520
+#, c-format
+msgid "Device '%s' has been connected.\n"
+msgstr "'%s' ডিভাইস সংযোগ করা হয়েছে।\n"
+
+#: ../clients/cli/devices.c:1551 ../clients/cli/devices.c:1560
+#: ../clients/cli/devices.c:1684 ../clients/cli/devices.c:1693
+#: ../clients/cli/devices.c:1772 ../clients/cli/devices.c:1780
+#, c-format
+msgid "Error: No interface specified."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: কোনো ইনà§à¦Ÿà¦¾à¦°à¦«à§‡à¦¸ নিরà§à¦¦à¦¿à¦·à§à¦Ÿ করা হয়নি।"
+
+#: ../clients/cli/devices.c:1566 ../clients/cli/devices.c:1699
+#: ../clients/cli/devices.c:1786
+#, c-format
+msgid "Error: extra argument not allowed: '%s'."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: অতিরিকà§à¦¤ অারà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ অনà§à¦®à§‹à¦¦à¦¿à¦¤ নয়: '%s'."
+
+#: ../clients/cli/devices.c:1625
#, c-format
msgid "Success: Device '%s' successfully disconnected."
msgstr "সাফলà§à¦¯: '%s' ডিভাইস সাফলà§à¦¯à§‡à¦° সাথে সংযোগ বিচà§à¦›à¦¿à¦¨à§à¦¨ করা হয়েছে।"
-#: ../cli/src/devices.c:1078
+#: ../clients/cli/devices.c:1639
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s' (%s) ডিভাইসের সাথে সংযোগ বিচà§à¦›à¦¿à¦¨à§à¦¨ করতে বà§à¦¯à¦°à§à¦¥: %s"
-#: ../cli/src/devices.c:1091
+#: ../clients/cli/devices.c:1654
#, c-format
msgid "Device '%s' has been disconnected.\n"
msgstr "'%s' ডিভাইস সংযোগ বিচà§à¦›à¦¿à¦¨à§à¦¨ করা হয়েছে।\n"
-#: ../cli/src/devices.c:1154
+#: ../clients/cli/devices.c:1744
#, c-format
-msgid "Error: iface has to be specified."
-msgstr "তà§à¦°à§à¦Ÿà¦¿: iface নিরà§à¦§à¦¾à¦°à¦£ করা আবশà§à¦¯à¦•à¥¤"
+#| msgid "Error: Device '%s' (%s) disconnecting failed: %s"
+msgid "Error: Device '%s' (%s) deletion failed: %s"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s' (%s) ডিভাইস মà§à¦›à§‡ দেওয়া বà§à¦¯à¦°à§à¦¥ হয়েছে: %s"
-#: ../cli/src/devices.c:1284
+#: ../clients/cli/devices.c:1808
#, c-format
-msgid "Error: 'dev wifi': %s"
-msgstr "তà§à¦°à§à¦Ÿà¦¿: 'dev wifi': %s"
+#| msgid "Error: setting '%s' is mandatory and cannot be removed.\n"
+msgid "Error: Device '%s' is a hardware device. It can't be deleted."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: ডিভাইস '%s' হল à¦à¦•à¦Ÿà¦¿ হারà§à¦¡à¦“য়à§à¦¯à¦¾à¦° ডিভাইস। à¦à¦Ÿà¦¿ মোছা যাবে না।"
-#: ../cli/src/devices.c:1286
-#, c-format
-msgid "Error: 'dev wifi': %s; allowed fields: %s"
-msgstr "তà§à¦°à§à¦Ÿà¦¿: 'dev wifi': %s; অনà§à¦®à§‹à¦¦à¦¿à¦¤ কà§à¦·à§‡à¦¤à§à¦°: %s"
+#: ../clients/cli/devices.c:1878
+msgid "Wi-Fi scan list"
+msgstr "Wi-Fi সà§à¦•à§à¦¯à¦¾à¦¨ তালিকা"
-#: ../cli/src/devices.c:1309
-msgid "WiFi scan list"
-msgstr "ওয়াই-ফাই সà§à¦•à§à¦¯à¦¾à¦¨à§‡à¦° তালিকা"
+#: ../clients/cli/devices.c:1916
+#, c-format
+msgid "Error: 'device wifi': %s"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'device wifi': %s"
-#: ../cli/src/devices.c:1346 ../cli/src/devices.c:1400
+#: ../clients/cli/devices.c:1958 ../clients/cli/devices.c:2033
#, c-format
msgid "Error: Access point with bssid '%s' not found."
msgstr "তà§à¦°à§à¦Ÿà¦¿: bssid '%s' সহ অà§à¦¯à¦¾à¦•à¦¸à§‡à¦¸ পয়েনà§à¦Ÿ পাওয়া যায়নি।"
-#: ../cli/src/devices.c:1363
+#: ../clients/cli/devices.c:1982 ../clients/cli/devices.c:2299
+#: ../clients/cli/devices.c:2463
#, c-format
-msgid "Error: Device '%s' is not a WiFi device."
+msgid "Error: Device '%s' is not a Wi-Fi device."
msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s' ডিভাইসটি ওয়াই-ফাই ডিভাইস নয়।"
-#: ../cli/src/devices.c:1431 ../cli/src/devices.c:1477
-#, c-format
-msgid "Connection with UUID '%s' created and activated on device '%s'\n"
-msgstr "UUID '%s'-র সাথে '%s' ডিভাইসের উপর সংযোগ তৈরি ও সকà§à¦°à¦¿à§Ÿ করা হয়েছে\n"
-
-#: ../cli/src/devices.c:1436
-#, c-format
-msgid "Error: Connection activation failed: (%d) %s."
-msgstr "তà§à¦°à§à¦Ÿà¦¿: সংযোগ সকà§à¦°à¦¿à§Ÿ করতে বà§à¦¯à¦°à§à¦¥: (%d) %s।"
-
-#: ../cli/src/devices.c:1461
-#, c-format
-msgid "Error: Failed to add/activate new connection: (%d) %s"
-msgstr "তà§à¦°à§à¦Ÿà¦¿: নতà§à¦¨ সংযোগ যোগ/সকà§à¦°à¦¿à§Ÿ করতে বà§à¦¯à¦°à§à¦¥: (%d) %s"
-
-#: ../cli/src/devices.c:1469
-#, c-format
-msgid "Error: Failed to add/activate new connection: Unknown error"
-msgstr "তà§à¦°à§à¦Ÿà¦¿: নতà§à¦¨ সংযোগ যোগ/সকà§à¦°à¦¿à§Ÿ করতে বà§à¦¯à¦°à§à¦¥: অজানা তà§à¦°à§à¦Ÿà¦¿"
+#: ../clients/cli/devices.c:2192
+msgid "SSID or BSSID: "
+msgstr "SSID বা BSSID: "
-#: ../cli/src/devices.c:1613
+#: ../clients/cli/devices.c:2197
#, c-format
msgid "Error: SSID or BSSID are missing."
msgstr "তà§à¦°à§à¦Ÿà¦¿: SSID অথবা BSSID অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤à¥¤"
-#: ../cli/src/devices.c:1636
+#: ../clients/cli/devices.c:2221
#, c-format
msgid "Error: bssid argument value '%s' is not a valid BSSID."
msgstr "তà§à¦°à§à¦Ÿà¦¿: bssid আরà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿà§‡à¦° মান '%s' বৈধ BSSID নয়।"
-#: ../cli/src/devices.c:1660
+#: ../clients/cli/devices.c:2245
#, c-format
msgid ""
"Error: wep-key-type argument value '%s' is invalid, use 'key' or 'phrase'."
@@ -1358,323 +3912,588 @@ msgstr ""
"তà§à¦°à§à¦Ÿà¦¿: wep-key-type আরà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿà§‡à¦° মান '%s' বৈধ নয়, 'key' অথবা 'phrase' "
"বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨à¥¤"
-#: ../cli/src/devices.c:1700
+#: ../clients/cli/devices.c:2265
+#, c-format
+msgid "Error: %s: %s."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: %s: %s."
+
+#: ../clients/cli/devices.c:2280
#, c-format
msgid "Error: BSSID to connect to (%s) differs from bssid argument (%s)."
msgstr ""
"তà§à¦°à§à¦Ÿà¦¿: (%s)-র সাথে সংযোগ করার জনà§à¦¯ BSSID-র মান bssid আরà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ (%s) থেকে "
"পৃথক।"
-#: ../cli/src/devices.c:1706
+#: ../clients/cli/devices.c:2286
#, 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' ডিভাইসটি ওয়াই-ফাই ডিভাইস নয়।"
-
-#: ../cli/src/devices.c:1737
+#: ../clients/cli/devices.c:2301 ../clients/cli/devices.c:2465
#, c-format
msgid "Error: No Wi-Fi device found."
msgstr "তà§à¦°à§à¦Ÿà¦¿: কোনো ওয়াই-ফাই ডিভাইস পাওয়া যায়নি।"
-#: ../cli/src/devices.c:1755
+#: ../clients/cli/devices.c:2319
#, c-format
msgid "Error: No network with SSID '%s' found."
msgstr "তà§à¦°à§à¦Ÿà¦¿: SSID '%s' সহ কোনো নেটওয়ারà§à¦• পাওয়া যায়নি।"
-#: ../cli/src/devices.c:1757
+#: ../clients/cli/devices.c:2321
#, 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' বৈধ নয়।"
+#: ../clients/cli/devices.c:2360
+msgid "Password: "
+msgstr "পাসওয়ারà§à¦¡: "
-#: ../cli/src/devices.c:1931
+#: ../clients/cli/devices.c:2492
#, 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
+#: ../clients/cli/devices.c:2539
msgid "WiMAX NSP list"
msgstr "WiMAX NSP তালিকা"
-#: ../cli/src/devices.c:1993
+#: ../clients/cli/devices.c:2576
+#, c-format
+msgid "Error: 'device wimax': %s"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'device wimax': %s"
+
+#: ../clients/cli/devices.c:2619
#, c-format
msgid "Error: NSP with name '%s' not found."
msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s' নাম বিশিষà§à¦Ÿ NSP পাওয়া যায়নি।"
-#: ../cli/src/devices.c:2004
+#: ../clients/cli/devices.c:2632
#, c-format
msgid "Error: Device '%s' is not a WiMAX device."
msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s' ডিভাইসটি WiMAX ডিভাইস নয়।"
-#: ../cli/src/devices.c:2035
+#: ../clients/cli/devices.c:2676
#, c-format
msgid "Error: Access point with nsp '%s' not found."
msgstr "তà§à¦°à§à¦Ÿà¦¿: nsp '%s' সহ অà§à¦¯à¦¾à¦•à¦¸à§‡à¦¸ পয়েনà§à¦Ÿ পাওয়া যায়নি।"
-#: ../cli/src/devices.c:2062
+#: ../clients/cli/devices.c:2713
#, 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
+#: ../clients/cli/devices.c:2883
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "তà§à¦°à§à¦Ÿà¦¿: 'dev' কমানà§à¦¡ '%s' বৈধ নয়।"
-#: ../cli/src/network-manager.c:37
+#: ../clients/cli/network-manager.c:34
msgid "RUNNING"
msgstr "RUNNING"
#. 0
-#: ../cli/src/network-manager.c:38
+#: ../clients/cli/network-manager.c:35
msgid "VERSION"
msgstr "VERSION"
#. 2
-#: ../cli/src/network-manager.c:40
-msgid "NET-ENABLED"
-msgstr "NET-ENABLED"
+#: ../clients/cli/network-manager.c:37
+msgid "STARTUP"
+msgstr "পà§à¦°à¦¾à¦°à¦®à§à¦­"
#. 3
-#: ../cli/src/network-manager.c:41
-msgid "WIFI-HARDWARE"
-msgstr "WIFI-HARDWARE"
+#: ../clients/cli/network-manager.c:38
+msgid "CONNECTIVITY"
+msgstr "সংযোগ"
#. 4
-#: ../cli/src/network-manager.c:42
-msgid "WIFI"
-msgstr "WIFI"
+#: ../clients/cli/network-manager.c:39
+msgid "NETWORKING"
+msgstr "নেটওয়ারà§à¦•à¦¿à¦‚"
#. 5
-#: ../cli/src/network-manager.c:43
-msgid "WWAN-HARDWARE"
-msgstr "WWAN-HARDWARE"
+#: ../clients/cli/network-manager.c:40
+msgid "WIFI-HW"
+msgstr "WIFI-HW"
#. 6
-#: ../cli/src/network-manager.c:44
-msgid "WWAN"
-msgstr "WWAN"
+#: ../clients/cli/network-manager.c:41
+msgid "WIFI"
+msgstr "WIFI"
#. 7
-#: ../cli/src/network-manager.c:45
-msgid "WIMAX-HARDWARE"
-msgstr "WIMAX-HARDWARE"
+#: ../clients/cli/network-manager.c:42
+msgid "WWAN-HW"
+msgstr "WWAN-HW"
#. 8
-#: ../cli/src/network-manager.c:46
+#: ../clients/cli/network-manager.c:43
+msgid "WWAN"
+msgstr "WWAN"
+
+#. 9
+#: ../clients/cli/network-manager.c:44
+msgid "WIMAX-HW"
+msgstr "WIMAX-HW"
+
+#. 10
+#: ../clients/cli/network-manager.c:45
msgid "WIMAX"
msgstr "WIMAX"
-#: ../cli/src/network-manager.c:62
+#: ../clients/cli/network-manager.c:67
msgid "PERMISSION"
msgstr "PERMISSION"
#. 0
-#: ../cli/src/network-manager.c:63
+#: ../clients/cli/network-manager.c:68
msgid "VALUE"
msgstr "VALUE"
-#: ../cli/src/network-manager.c:77
+#: ../clients/cli/network-manager.c:76
+msgid "LEVEL"
+msgstr "সà§à¦¤à¦°"
+
+#. 0
+#: ../clients/cli/network-manager.c:77
+msgid "DOMAINS"
+msgstr "ডোমেন"
+
+#: ../clients/cli/network-manager.c:91
#, 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
+#: ../clients/cli/network-manager.c:102
+#, 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"
+
+#: ../clients/cli/network-manager.c:111
+#, 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"
+
+#: ../clients/cli/network-manager.c:123
+#, 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"
+
+#: ../clients/cli/network-manager.c:131
+#, 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"
+
+#: ../clients/cli/network-manager.c:144
+#, 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"
+" চালà§\n"
+"\n"
+" বনà§à¦§\n"
+"\n"
+" connectivity [check]\n"
+"\n"
+
+#: ../clients/cli/network-manager.c:154
+#, c-format
+msgid ""
+"Usage: nmcli networking on { help }\n"
+"\n"
+"Switch networking on.\n"
+"\n"
+msgstr ""
+"বà§à¦¯à¦¬à¦¹à¦¾à¦°: nmcli networking on { help }\n"
+"\n"
+"নেটওয়ারà§à¦•à¦¿à¦‚ চালৠকরà§à¦¨à¥¤\n"
+"\n"
+
+#: ../clients/cli/network-manager.c:162
+#, c-format
+msgid ""
+"Usage: nmcli networking off { help }\n"
+"\n"
+"Switch networking off.\n"
+"\n"
+msgstr ""
+"বà§à¦¯à¦¬à¦¹à¦¾à¦°: nmcli networking off { help }\n"
+"\n"
+"নেটওয়ারà§à¦•à¦¿à¦‚ বনà§à¦§ করà§à¦¨à¥¤\n"
+"\n"
+
+#: ../clients/cli/network-manager.c:170
+#, 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"
+
+#: ../clients/cli/network-manager.c:182
+#, 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"
+
+#: ../clients/cli/network-manager.c:196
+#, 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"
+
+#: ../clients/cli/network-manager.c:206
+#, 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"
+
+#: ../clients/cli/network-manager.c:216
+#, 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"
+
+#: ../clients/cli/network-manager.c:227
+#, 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"
+
+#: ../clients/cli/network-manager.c:247
msgid "asleep"
msgstr "নিদà§à¦°à¦¿à¦¤"
-#: ../cli/src/network-manager.c:110
+#: ../clients/cli/network-manager.c:249
msgid "connecting"
msgstr "সংযোগ করা হচà§à¦›à§‡"
-#: ../cli/src/network-manager.c:112
+#: ../clients/cli/network-manager.c:251
msgid "connected (local only)"
msgstr "সংযà§à¦•à§à¦¤ (শà§à¦§à§à¦®à¦¾à¦¤à§à¦° সà§à¦¥à¦¾à¦¨à§€à§Ÿ)"
-#: ../cli/src/network-manager.c:114
+#: ../clients/cli/network-manager.c:253
msgid "connected (site only)"
msgstr "সংযà§à¦•à§à¦¤ (শà§à¦§à§à¦®à¦¾à¦¤à§à¦° সাইট)"
-#: ../cli/src/network-manager.c:118
+#: ../clients/cli/network-manager.c:257
msgid "disconnecting"
msgstr "সংযোগ বিচà§à¦›à¦¿à¦¨à§à¦¨ করা হচà§à¦›à§‡"
-#: ../cli/src/network-manager.c:158
-#, c-format
-msgid "Error: 'nm status': %s"
-msgstr "তà§à¦°à§à¦Ÿà¦¿: 'nm status': %s"
+#: ../clients/cli/network-manager.c:273
+msgid "portal"
+msgstr "পোরà§à¦Ÿà¦¾à¦²"
+
+#: ../clients/cli/network-manager.c:275
+msgid "limited"
+msgstr "সীমিত"
-#: ../cli/src/network-manager.c:160
+#: ../clients/cli/network-manager.c:277
+msgid "full"
+msgstr "সমà§à¦ªà§‚রà§à¦£"
+
+#: ../clients/cli/network-manager.c:315
#, 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
+#: ../clients/cli/network-manager.c:335 ../clients/cli/network-manager.c:336
+#: ../clients/cli/network-manager.c:337 ../clients/cli/network-manager.c:338
+#: ../clients/cli/network-manager.c:339 ../clients/cli/network-manager.c:341
+#: ../clients/cli/network-manager.c:342
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
+#: ../clients/cli/network-manager.c:335 ../clients/cli/network-manager.c:336
+#: ../clients/cli/network-manager.c:337 ../clients/cli/network-manager.c:338
+#: ../clients/cli/network-manager.c:339 ../clients/cli/network-manager.c:341
+#: ../clients/cli/network-manager.c:342
msgid "disabled"
msgstr "নিষà§à¦•à§à¦°à¦¿à§Ÿ"
-#: ../cli/src/network-manager.c:193
+#: ../clients/cli/network-manager.c:345
msgid "NetworkManager status"
msgstr "NetworkManager-র অবসà§à¦¥à¦¾"
-#. Print header
-#: ../cli/src/network-manager.c:196
+#: ../clients/cli/network-manager.c:350
msgid "running"
msgstr "চলমান"
-#: ../cli/src/network-manager.c:196
-msgid "not running"
-msgstr "চলমান নয়"
+#: ../clients/cli/network-manager.c:353
+msgid "starting"
+msgstr "আরমà§à¦­ করা হচà§à¦›à§‡"
+
+#: ../clients/cli/network-manager.c:353
+msgid "started"
+msgstr "আরমà§à¦­ করা হয়েছে"
-#: ../cli/src/network-manager.c:271
+#: ../clients/cli/network-manager.c:424
msgid "auth"
msgstr "auth"
-#: ../cli/src/network-manager.c:301
+#: ../clients/cli/network-manager.c:453
#, c-format
-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 permissions': %s; allowed fields: %s"
-msgstr "তà§à¦°à§à¦Ÿà¦¿: 'nm permissions': %s; অনà§à¦®à§‹à¦¦à¦¿à¦¤ কà§à¦·à§‡à¦¤à§à¦°: %s"
-
-#: ../cli/src/network-manager.c:324
+#: ../clients/cli/network-manager.c:467
msgid "NetworkManager permissions"
msgstr "NetworkManager-র অনà§à¦®à¦¤à¦¿"
-#: ../cli/src/network-manager.c:350 ../cli/src/utils.c:459
+#: ../clients/cli/network-manager.c:508
#, 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 অবজেকà§à¦Ÿ পà§à¦°à¦•à§à¦¸à¦¿ তৈরি করতে বà§à¦¯à¦°à§à¦¥à¥¤"
+#: ../clients/cli/network-manager.c:523
+msgid "NetworkManager logging"
+msgstr "NetworkManager লগিং"
-#: ../cli/src/network-manager.c:367
+#: ../clients/cli/network-manager.c:545
#, 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
+#: ../clients/cli/network-manager.c:664
#, 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 "নেটওয়ারà§à¦• বà§à¦¯à¦¬à¦¸à§à¦¥à¦¾ সকà§à¦°à¦¿à§Ÿ"
+#: ../clients/cli/network-manager.c:666
+#, c-format
+msgid "Error: %s"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: %s"
-#: ../cli/src/network-manager.c:440
+#: ../clients/cli/network-manager.c:674
#, 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
+#: ../clients/cli/network-manager.c:692
#, 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
+#: ../clients/cli/network-manager.c:717
#, 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 সকà§à¦°à¦¿à§Ÿ"
+#: ../clients/cli/network-manager.c:728
+msgid "Connectivity"
+msgstr "সংযোগ"
-#: ../cli/src/network-manager.c:495
-#, c-format
-msgid "Error: invalid 'wifi' parameter: '%s'."
-msgstr "তà§à¦°à§à¦Ÿà¦°: অবৈধ 'wifi' পরামিতি: '%s'।"
+#: ../clients/cli/network-manager.c:740
+msgid "Networking"
+msgstr "নেটওয়ারà§à¦• বà§à¦¯à¦¬à¦¸à§à¦¥à¦¾"
-#: ../cli/src/network-manager.c:517
-msgid "WWAN enabled"
-msgstr "WWAN সকà§à¦°à¦¿à§Ÿ"
+#: ../clients/cli/network-manager.c:765
+#, c-format
+msgid "Error: 'networking connectivity' command '%s' is not valid."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: 'networking connectivity' কমà§à¦¯à¦¾à¦¨à§à¦¡ '%s' বৈধ নয়।"
-#: ../cli/src/network-manager.c:533
+#: ../clients/cli/network-manager.c:781
#, 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 সকà§à¦°à¦¿à§Ÿ"
+#: ../clients/cli/network-manager.c:807 ../clients/cli/network-manager.c:827
+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
+#: ../clients/cli/network-manager.c:845
+msgid "Wi-Fi radio switch"
+msgstr "Wi-Fi রেডিও সà§à¦¯à§à¦‡à¦š"
+
+#. no argument, show current WWAN (mobile broadband) state
+#: ../clients/cli/network-manager.c:861
+msgid "WWAN radio switch"
+msgstr "WWAN রেডিও সà§à¦¯à§à¦‡à¦š"
+
+#. no argument, show current WiMAX state
+#: ../clients/cli/network-manager.c:878
+msgid "WiMAX radio switch"
+msgstr "WiMAX রেডিও সà§à¦¯à§à¦‡à¦š"
-#: ../cli/src/network-manager.c:588
+#: ../clients/cli/network-manager.c:890
#, 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
+#: ../clients/cli/nmcli.c:81
#, c-format
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
@@ -1688,16 +4507,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 [OPTIONS] OBJECT { COMMAND | help }\n"
+"বà§à¦¯à¦¬à¦¹à¦¾à¦°: %s [OPTIONS] OBJECT { COMMAND | help }\n"
"\n"
"OPTIONS\n"
" -t[erse] terse output\n"
@@ -1708,214 +4532,917 @@ 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
+#: ../clients/cli/nmcli.c:135
#, c-format
msgid "Error: Object '%s' is unknown, try 'nmcli help'."
msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s' অবজেকà§à¦Ÿ অজানা, 'nmcli help' বà§à¦¯à¦¬à¦¹à¦¾à¦°à§‡à¦° পà§à¦°à¦šà§‡à¦·à§à¦Ÿà¦¾ করà§à¦¨à¥¤"
-#: ../cli/src/nmcli.c:154
+#: ../clients/cli/nmcli.c:165
#, c-format
msgid "Error: Option '--terse' is specified the second time."
msgstr "তà§à¦°à§à¦Ÿà¦¿: '--terse' বিকলà§à¦ªà¦Ÿà¦¿ দà§à¦‡à¦¬à¦¾à¦° উলà§à¦²à¦¿à¦–িত হয়েছে।"
-#: ../cli/src/nmcli.c:159
+#: ../clients/cli/nmcli.c:170
#, c-format
msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
msgstr "তà§à¦°à§à¦Ÿà¦¿: '--terse' ও '--pretty' বিকলà§à¦ª দà§à¦Ÿà¦¿ à¦à¦• অপরের উপর নিরà§à¦­à¦°à¦¶à§€à¦² নয়।"
-#: ../cli/src/nmcli.c:167
+#: ../clients/cli/nmcli.c:178
#, c-format
msgid "Error: Option '--pretty' is specified the second time."
msgstr "তà§à¦°à§à¦Ÿà¦¿: '--pretty' বিকলà§à¦ªà¦Ÿà¦¿ দà§à¦‡à¦¬à¦¾à¦° উলà§à¦²à¦¿à¦–িত হয়েছে।"
-#: ../cli/src/nmcli.c:172
+#: ../clients/cli/nmcli.c:183
#, c-format
msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
msgstr "তà§à¦°à§à¦Ÿà¦¿: '--pretty' ও '--terse' বিকলà§à¦ª দà§à¦Ÿà¦¿ à¦à¦• অপরের উপর নিরà§à¦­à¦°à¦¶à§€à¦² নয়।"
-#: ../cli/src/nmcli.c:182 ../cli/src/nmcli.c:198
+#: ../clients/cli/nmcli.c:193 ../clients/cli/nmcli.c:209
+#: ../clients/cli/nmcli.c:238
#, c-format
msgid "Error: missing argument for '%s' option."
msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s' বিকলà§à¦ªà§‡à¦° কà§à¦·à§‡à¦¤à§à¦°à§‡ আরà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤à¥¤"
-#: ../cli/src/nmcli.c:191 ../cli/src/nmcli.c:207
+#: ../clients/cli/nmcli.c:202 ../clients/cli/nmcli.c:218
#, c-format
msgid "Error: '%s' is not valid argument for '%s' option."
msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s' আরà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿà¦Ÿà¦¿ '%s' বিকলà§à¦ªà§‡à¦° জনà§à¦¯ বৈধ নয়।"
-#: ../cli/src/nmcli.c:214
+#: ../clients/cli/nmcli.c:225
#, c-format
msgid "Error: fields for '%s' options are missing."
msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s' বিকলà§à¦ªà§‡à¦° কà§à¦·à§‡à¦¤à§à¦° অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤à¥¤"
-#: ../cli/src/nmcli.c:222
+#: ../clients/cli/nmcli.c:243
+#, c-format
+msgid "Error: '%s' is not a valid timeout for '%s' option."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s' '%s' বিকলà§à¦ªà§‡à¦° à¦à¦•à¦Ÿà¦¿ বৈধ সময় সমাপà§à¦¤ নয়।"
+
+#: ../clients/cli/nmcli.c:250
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "nmcli সরঞà§à¦œà¦¾à¦®, সংসà§à¦•à¦°à¦£ %s\n"
-#: ../cli/src/nmcli.c:228
+#: ../clients/cli/nmcli.c:256
#, c-format
msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s' বিকলà§à¦ªà¦Ÿà¦¿ অজানা, 'nmcli -help' বà§à¦¯à¦¬à¦¹à¦¾à¦°à§‡à¦° পà§à¦°à§Ÿà§‹à¦— করà§à¦¨à¥¤"
-#: ../cli/src/nmcli.c:247
+#: ../clients/cli/nmcli.c:336 ../clients/cli/nmcli.c:345
#, 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
-msgid "Error: Could not create NMClient object."
-msgstr "তà§à¦°à§à¦Ÿà¦¿: NMClient অবজেকà§à¦Ÿ পà§à¦°à¦¸à§à¦¤à§à¦¤ করতে বà§à¦¯à¦°à§à¦¥à¥¤"
+#: ../clients/cli/nmcli.c:376
+#, c-format
+#| msgid "Failed to set signal mask: %d"
+msgid "Failed to set signal mask: %d\n"
+msgstr "সিগনà§à¦¯à¦¾à¦² মাসà§à¦• নিরà§à¦§à¦¾à¦°à¦£ করতে বà§à¦¯à¦°à§à¦¥: %d\n"
-#: ../cli/src/nmcli.c:288
+#: ../clients/cli/nmcli.c:383
+#, c-format
+#| msgid "Failed to create signal handling thread: %d"
+msgid "Failed to create signal handling thread: %d\n"
+msgstr "সিগনà§à¦¯à¦¾à¦² পরিচালনার থà§à¦°à§‡à¦¡ পà§à¦°à¦¸à§à¦¤à§à¦¤ করতে বà§à¦¯à¦°à§à¦¥: %d\n"
+
+#: ../clients/cli/nmcli.c:480 ../clients/nm-online.c:197
+#, c-format
+#| msgid "Error: Could not create NMClient object."
+msgid "Error: Could not create NMClient object: %s."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: NMClient অবজেকà§à¦Ÿ পà§à¦°à¦¸à§à¦¤à§à¦¤ করতে বà§à¦¯à¦°à§à¦¥: %s।"
+
+#: ../clients/cli/nmcli.c:497
msgid "Success"
msgstr "সফল"
-#: ../cli/src/settings.c:527
+#: ../clients/cli/settings.c:655
#, c-format
-msgid "%d (hex-ascii-key)"
-msgstr "%d (hex-ascii-key)"
+#| msgid "%d (hex-ascii-key)"
+msgid "%d (key)"
+msgstr "%d (কী)"
-#: ../cli/src/settings.c:529
+#: ../clients/cli/settings.c:657
#, c-format
-msgid "%d (104/128-bit passphrase)"
-msgstr "%d (১০৪/১২৮-বিট পরিচয়পংকà§à¦¤à¦¿)"
+#| msgid "%d (104/128-bit passphrase)"
+msgid "%d (passphrase)"
+msgstr "%d (পাসফà§à¦°à§‡à¦œ)"
-#: ../cli/src/settings.c:532 ../cli/src/settings.c:660
+#: ../clients/cli/settings.c:660 ../clients/cli/settings.c:741
#, c-format
msgid "%d (unknown)"
msgstr "%d (অজানা)"
-#: ../cli/src/settings.c:558
-msgid "0 (unknown)"
-msgstr "০ (অজানা)"
-
-#: ../cli/src/settings.c:564
-msgid "any, "
-msgstr "যে কোনো, "
-
-#: ../cli/src/settings.c:566
-msgid "900 MHz, "
-msgstr "৯০০ MHz, "
-
-#: ../cli/src/settings.c:568
-msgid "1800 MHz, "
-msgstr "১৮০০ MHz, "
-
-#: ../cli/src/settings.c:570
-msgid "1900 MHz, "
-msgstr "১৯০০ MHz, "
-
-#: ../cli/src/settings.c:572
-msgid "850 MHz, "
-msgstr "৮৫০ MHz, "
-
-#: ../cli/src/settings.c:574
-msgid "WCDMA 3GPP UMTS 2100 MHz, "
-msgstr "WCDMA 3GPP UMTS ২১০০ MHz, "
-
-#: ../cli/src/settings.c:576
-msgid "WCDMA 3GPP UMTS 1800 MHz, "
-msgstr "WCDMA 3GPP UMTS ১৮০০ MHz, "
-
-#: ../cli/src/settings.c:578
-msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
-msgstr "WCDMA 3GPP UMTS ১৭০০/২১০০ MHz, "
-
-#: ../cli/src/settings.c:580
-msgid "WCDMA 3GPP UMTS 800 MHz, "
-msgstr "WCDMA 3GPP UMTS ৮০০ MHz, "
-
-#: ../cli/src/settings.c:582
-msgid "WCDMA 3GPP UMTS 850 MHz, "
-msgstr "WCDMA 3GPP UMTS ৮৫০ MHz, "
-
-#: ../cli/src/settings.c:584
-msgid "WCDMA 3GPP UMTS 900 MHz, "
-msgstr "WCDMA 3GPP UMTS ৯০০ MHz, "
-
-#: ../cli/src/settings.c:586
-msgid "WCDMA 3GPP UMTS 1700 MHz, "
-msgstr "WCDMA 3GPP UMTS ১৭০০ MHz, "
-
-#: ../cli/src/settings.c:588
-msgid "WCDMA 3GPP UMTS 1900 MHz, "
-msgstr "WCDMA 3GPP UMTS ১৯০০ MHz, "
-
-#: ../cli/src/settings.c:590
-msgid "WCDMA 3GPP UMTS 2600 MHz, "
-msgstr "WCDMA 3GPP UMTS ২৬০০ MHz, "
-
-#: ../cli/src/settings.c:608
+#: ../clients/cli/settings.c:689
msgid "0 (NONE)"
msgstr "0 (NONE)"
-#: ../cli/src/settings.c:614
+#: ../clients/cli/settings.c:695
msgid "REORDER_HEADERS, "
msgstr "REORDER_HEADERS, "
-#: ../cli/src/settings.c:616
+#: ../clients/cli/settings.c:697
msgid "GVRP, "
msgstr "GVRP, "
-#: ../cli/src/settings.c:618
+#: ../clients/cli/settings.c:699
msgid "LOOSE_BINDING, "
msgstr "LOOSE_BINDING, "
-#: ../cli/src/settings.c:654
+#: ../clients/cli/settings.c:735
#, c-format
msgid "%d (disabled)"
msgstr "%d (নিষà§à¦•à§à¦°à¦¿à§Ÿ)"
-#: ../cli/src/settings.c:656
+#: ../clients/cli/settings.c:737
#, c-format
msgid "%d (enabled, prefer public IP)"
msgstr "%d (সকà§à¦°à¦¿à§Ÿ, সারà§à¦¬à¦œà¦¨à§€à¦¨ IP পছনà§à¦¦à¦¸à¦‡)"
-#: ../cli/src/settings.c:658
+#: ../clients/cli/settings.c:739
#, 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
+#: ../clients/cli/settings.c:751
+msgid "0 (none)"
+msgstr "0 (কিছà§à¦‡ নয়)"
+
+#: ../clients/cli/settings.c:757
+msgid "agent-owned, "
+msgstr "à¦à¦œà§‡à¦¨à§à¦Ÿ মালিক, "
+
+#: ../clients/cli/settings.c:759
+msgid "not saved, "
+msgstr "সংরকà§à¦·à¦¿à¦¤ হয়নি, "
+
+#: ../clients/cli/settings.c:761
+msgid "not required, "
+msgstr "অপà§à¦°à§Ÿà§‹à¦œà¦¨à§€à§Ÿ, "
+
+#: ../clients/cli/settings.c:1043
+msgid "0 (disabled)"
+msgstr "0 (নিষà§à¦•à§à¦°à¦¿à¦¯à¦¼)"
+
+#: ../clients/cli/settings.c:1049
+msgid "enabled, "
+msgstr "সকà§à¦°à¦¿à¦¯à¦¼, "
+
+#: ../clients/cli/settings.c:1051
+msgid "advertise, "
+msgstr "বিজà§à¦žà¦¾à¦ªà¦¨, "
+
+#: ../clients/cli/settings.c:1053
+msgid "willing, "
+msgstr "ইচà§à¦›à§à¦•, "
+
+#: ../clients/cli/settings.c:1081
+msgid "-1 (unset)"
+msgstr "-1 (অান-সেট)"
+
+#: ../clients/cli/settings.c:1178 ../clients/cli/settings.c:1510
+#: ../clients/cli/settings.c:1552
msgid "auto"
msgstr "সà§à¦¬à§Ÿà¦‚কà§à¦°à¦¿à§Ÿ"
-#: ../cli/src/utils.c:105
+#: ../clients/cli/settings.c:1191
+msgid "default"
+msgstr "ডিফলà§à¦Ÿ"
+
+#: ../clients/cli/settings.c:1680
+#, c-format
+msgid "Do you also want to set '%s' to '%s'? [yes]: "
+msgstr "অাপনি কি '%s' '%s' ঠসেট করতেও চান? [হà§à¦¯à¦¾à¦]: "
+
+#: ../clients/cli/settings.c:1682
+#, c-format
+msgid "Do you also want to clear '%s'? [yes]: "
+msgstr "অাপনি কি '%s' সাফ করতেও চান ? [হà§à¦¯à¦¾à¦]: "
+
+#: ../clients/cli/settings.c:1843
+#, c-format
+msgid ""
+"Warning: %s.%s set to '%s', but it might be ignored in infrastructure mode\n"
+msgstr ""
+"সরà§à¦¤à¦•à¦¤à¦¾: %s.%s '%s' ঠসেট করা হয়েছে, কিনà§à¦¤à§ à¦à¦Ÿà¦¿ পরিকাঠামো মোডে উপেকà§à¦·à¦¾ করা "
+"হতে পারে\n"
+
+#: ../clients/cli/settings.c:1925 ../clients/cli/settings.c:2185
+#: ../clients/cli/settings.c:4261
+#, c-format
+msgid "'%s' is not valid"
+msgstr "'%s' বৈধ নয়"
+
+#: ../clients/cli/settings.c:1948
+#, c-format
+msgid "'%d' is not valid; use <%d-%d>"
+msgstr "'%d' বৈধ নয়; বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨ <%d-%d>"
+
+#: ../clients/cli/settings.c:1970
+#, c-format
+msgid "'%u' is not valid; use <%d-%d>"
+msgstr "'%u' বৈধ নয়; বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨ <%d-%d>"
+
+#: ../clients/cli/settings.c:2036
+#, c-format
+msgid "'%s' is not valid; use <option>=<value>"
+msgstr "'%s' বৈধ নয়; বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨ <option>=<value>"
+
+#: ../clients/cli/settings.c:2070
+#, c-format
+msgid "index '%s' is not valid"
+msgstr "সূচি '%s' বৈধ নয়"
+
+#: ../clients/cli/settings.c:2075 ../clients/cli/settings.c:2100
+msgid "no item to remove"
+msgstr "সরানোর কোনো অাইটেম নেই"
+
+#: ../clients/cli/settings.c:2079 ../clients/cli/settings.c:2104
+#, c-format
+msgid "index '%d' is not in range <0-%d>"
+msgstr "সূচি '%d' রেঞà§à¦œà§‡ নেই <0-%d>"
+
+#: ../clients/cli/settings.c:2119
+#, c-format
+msgid "invalid option '%s'"
+msgstr "অবৈধ বিকলà§à¦ª '%s'"
+
+#: ../clients/cli/settings.c:2121
+msgid "missing option"
+msgstr "অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤ বিকলà§à¦ª"
+
+#: ../clients/cli/settings.c:2151
+#, c-format
+msgid "'%s' is not a valid number (or out of range)"
+msgstr "'%s' à¦à¦•à¦Ÿà¦¿ বৈধ নমà§à¦¬à¦° নয় (বা রেঞà§à¦œà§‡à¦° বাইরে)"
+
+#: ../clients/cli/settings.c:2202
+#, c-format
+msgid "'%s' is not a valid Ethernet MAC"
+msgstr "'%s' à¦à¦•à¦Ÿà¦¿ বৈধ ইথারনেট MAC নয়"
+
+#: ../clients/cli/settings.c:2227 ../libnm-core/nm-setting-connection.c:795
+#: ../libnm-core/nm-setting-infiniband.c:271
+#: ../libnm-util/nm-setting-connection.c:833
+#: ../libnm-util/nm-setting-infiniband.c:268
+#, c-format
+msgid "'%s' is not a valid interface name"
+msgstr "'%s' à¦à¦•à¦Ÿà¦¿ বৈধ ইনà§à¦Ÿà¦¾à¦°à¦«à§‡à¦¸ নাম নয়"
+
+#: ../clients/cli/settings.c:2245 ../clients/cli/settings.c:3650
+#: ../libnm-core/nm-setting-gsm.c:332 ../libnm-util/nm-setting-gsm.c:372
+#, c-format
+msgid "'%s' is not a number"
+msgstr "'%s' à¦à¦•à¦Ÿà¦¿ সংখà§à¦¯à¦¾ নয়"
+
+#: ../clients/cli/settings.c:2297
+#, c-format
+msgid "'%s' is not a valid hex character"
+msgstr "'%s' à¦à¦•à¦Ÿà¦¿ বৈধ hex অকà§à¦·à¦° নয়"
+
+#: ../clients/cli/settings.c:2327
+#, c-format
+msgid "'%s' is not a valid MAC"
+msgstr "'%s' à¦à¦•à¦Ÿà¦¿ বৈধ MAC নয়"
+
+#: ../clients/cli/settings.c:2364 ../libnm-core/nm-setting-connection.c:784
+#: ../libnm-util/nm-setting-connection.c:790
+#, c-format
+msgid "'%s' is not a valid UUID"
+msgstr "'%s' à¦à¦•à¦Ÿà¦¿ বৈধ UUID নয়"
+
+#: ../clients/cli/settings.c:2431
+#, c-format
+msgid "the property doesn't contain permission '%s'"
+msgstr "বিশিষà§à¦Ÿà¦¤à¦¾à§Ÿ '%s' অনà§à¦®à¦¤à¦¿ থাকে না"
+
+#: ../clients/cli/settings.c:2443
+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"
+
+#: ../clients/cli/settings.c:2462
+#, c-format
+msgid "'%s' is not valid master; use ifname or connection UUID"
+msgstr "'%s' à¦à¦•à¦Ÿà¦¿ বৈধ মাসà§à¦Ÿà¦¾à¦° নয়; ifname বা সংযোগ UUID বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨"
+
+#: ../clients/cli/settings.c:2506
+#, c-format
+msgid "Warning: %s is not an UUID of any existing connection profile\n"
+msgstr "সতরà§à¦•à¦¤à¦¾: %s কোনো বিদà§à¦¯à¦®à¦¾à¦¨ সংযোগ পà§à¦°à§‹à¦«à¦¾à¦‡à¦²à§‡à¦° UUID নয়\n"
+
+#: ../clients/cli/settings.c:2510 ../clients/cli/settings.c:2526
+#, c-format
+#| msgid "Error: '%s' is not a valid connection type."
+msgid "'%s' is not a VPN connection profile"
+msgstr "'%s' à¦à¦•à¦Ÿà¦¿ VPN সংযোগ পà§à¦°à§‹à¦«à¦¾à¦‡à¦² নয়"
+
+#: ../clients/cli/settings.c:2519
+#, c-format
+#| msgid "'%s' is not a valid team configuration or file name."
+msgid "'%s' is not a name of any exiting profile"
+msgstr "'%s' কোনো বিদà§à¦¯à¦®à¦¾à¦¨ পà§à¦°à§‹à¦«à¦¾à¦‡à¦²à§‡à¦° নাম নয়"
+
+#: ../clients/cli/settings.c:2553
+#, c-format
+#| msgid "'%s' is not a valid UUID"
+msgid "the value '%s' is not a valid UUID"
+msgstr "মান '%s' à¦à¦•à¦Ÿà¦¿ বৈধ UUID নয়"
+
+#: ../clients/cli/settings.c:2560
+#, c-format
+msgid "the property doesn't contain UUID '%s'"
+msgstr "বিশিষà§à¦Ÿà¦¤à¦¾à§Ÿ UUID '%s' থাকে না"
+
+#: ../clients/cli/settings.c:2572
+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 বা ID (নাম) দিয়ে নিরà§à¦¦à¦¿à¦·à§à¦Ÿ করা যেতে পারে। nmcli\n"
+"সà§à¦¸à§à¦ªà¦·à§à¦Ÿ ভাবে নামগà§à¦²à¦¿ UUID ঠভাষানà§à¦¤à¦° করে। মনে রাখà§à¦¨ যে, NetworkManager "
+"শà§à¦§à§à¦®à¦¾à¦¤à§à¦°\n"
+"VPN à¦à¦‡ মà§à¦¹à§‚রà§à¦¤à§‡ অপà§à¦°à¦§à¦¾à¦¨ সংযোগ সমরà§à¦¥à¦¨ করে।\n"
+"অাইটেমগà§à¦²à¦¿ কমা বা সà§à¦ªà§‡à¦¸ দà§à¦¬à¦¾à¦°à¦¾ পৃথক করা যেতে পারে।\n"
+"\n"
+"উদাহরণ: private-openvpn, fe6ba5d8-c2fc-4aae-b2e3-97efddd8d9a7\n"
+
+#: ../clients/cli/settings.c:2649
+msgid "private key password not provided"
+msgstr "বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কী পাসওয়ারà§à¦¡ পà§à¦°à¦¦à¦¾à¦¨ করা হয়নি"
+
+#: ../clients/cli/settings.c:2676
+#, c-format
+#| msgid "the property can't be changed"
+msgid "the property doesn't contain EAP method '%s'"
+msgstr "বিশিষà§à¦Ÿà¦¤à¦¾à§Ÿ EAP পদà§à¦§à¦¤à¦¿ '%s' থাকে না"
+
+#: ../clients/cli/settings.c:2701
+#, c-format
+msgid "the property doesn't contain alternative subject match '%s'"
+msgstr "বিশিষà§à¦Ÿà¦¤à¦¾à§Ÿ বৈকলà§à¦ªà¦¿à¦• সাবজেকà§à¦Ÿ মিল '%s' থাকে না"
+
+#: ../clients/cli/settings.c:2730
+#, c-format
+msgid "the property doesn't contain \"phase2\" alternative subject match '%s'"
+msgstr "বিশিষà§à¦Ÿà¦¤à¦¾à§Ÿ \"phase2\" বৈকলà§à¦ªà¦¿à¦• সাবজেকà§à¦Ÿ মিল '%s' থাকে না"
+
+#: ../clients/cli/settings.c:2756
+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"
+
+#: ../clients/cli/settings.c:2826
+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"
+
+#: ../clients/cli/settings.c:2929
+#, 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"
+
+#: ../clients/cli/settings.c:2967
+#, c-format
+msgid "'%s' is not a valid InfiniBand MAC"
+msgstr "'%s' à¦à¦•à¦Ÿà¦¿ বৈধ InfiniBand MAC নয়"
+
+#: ../clients/cli/settings.c:3004
+#, c-format
+msgid "'%s' is not a valid IBoIP P_Key"
+msgstr "'%s' à¦à¦•à¦Ÿà¦¿ IBoIP P_Key নয়"
+
+#: ../clients/cli/settings.c:3073 ../clients/cli/settings.c:3419
+#, c-format
+msgid "the property doesn't contain DNS server '%s'"
+msgstr "বিশিষà§à¦Ÿà¦¤à¦¾à§Ÿ DNS সারà§à¦­à¦¾à¦° '%s' থাকে না"
+
+#: ../clients/cli/settings.c:3085
+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"
+
+#: ../clients/cli/settings.c:3121 ../clients/cli/settings.c:3473
+#, c-format
+msgid "the property doesn't contain DNS search domain '%s'"
+msgstr "বিশিষà§à¦Ÿà¦¤à¦¾à§Ÿ DNS অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ ডোমেন '%s' থাকে না"
+
+#: ../clients/cli/settings.c:3141 ../clients/cli/settings.c:3493
+#, c-format
+msgid "'%s' is not valid (use ip[/prefix] [gateway])"
+msgstr "'%s' বৈধ নয় (ip[/prefix] [gateway] বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨)"
+
+#: ../clients/cli/settings.c:3190 ../clients/cli/settings.c:3541
+#, c-format
+msgid "the property doesn't contain IP address '%s'"
+msgstr "বিশিষà§à¦Ÿà¦¤à¦¾à§Ÿ IP ঠিকানা '%s' থাকে না"
+
+#: ../clients/cli/settings.c:3203
+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"
+
+#: ../clients/cli/settings.c:3256 ../clients/cli/settings.c:3572
+#, 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[/prefix] [next-hop] [metric])"
+
+#: ../clients/cli/settings.c:3304 ../clients/cli/settings.c:3620
+#, c-format
+#| msgid "the property can't be changed"
+msgid "the property doesn't contain route '%s'"
+msgstr "বিশিষà§à¦Ÿà¦¤à¦¾à§Ÿ '%s' রাউট থাকে না"
+
+#: ../clients/cli/settings.c:3317
+#| 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[/prefix] [next-hop] [metric],...\n"
+"\n"
+"অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤ পà§à¦°à§‡à¦«à¦¿à¦•à§à¦¸ 32 à¦à¦° পà§à¦°à¦«à¦¿à¦•à§à¦¸ হিসাবে বিবেচনা করা হয়।\n"
+"অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤ next-hop 0.0.0.0 হিসাবে বিবেচনা করা হয়।\n"
+"মেটà§à¦°à¦¿à¦• অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤ বা 0 হল ডিফলà§à¦Ÿ মেটà§à¦°à¦¿à¦• (NM/kernel à¦à¦•à¦Ÿà¦¿ ডিফলà§à¦Ÿ মান সেট "
+"করবে)।\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"
+
+#: ../clients/cli/settings.c:3431
+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"
+
+#: ../clients/cli/settings.c:3554
+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"
+
+#: ../clients/cli/settings.c:3633
+#| 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[/prefix] [next-hop] [metric],...\n"
+"\n"
+"অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤ পà§à¦°à§‡à¦«à¦¿à¦•à§à¦¸ 128 à¦à¦° পà§à¦°à§‡à¦«à¦¿à¦•à§à¦¸ হিসাবে বিবেচনা করা হয়।\n"
+"অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤ next-hop \"::\" হিসাবে বিবেচিত হয়।\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"
+
+#: ../clients/cli/settings.c:3657
+#, c-format
+msgid "'%s' is not valid; use 0, 1, or 2"
+msgstr "'%s' বৈধ নয়; বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨ 0, 1, বা 2"
+
+#: ../clients/cli/settings.c:3674
+#, c-format
+msgid "'%s' is not a valid channel; use <1-13>"
+msgstr "'%s' à¦à¦•à¦Ÿà¦¿ বৈধ চà§à¦¯à¦¾à¦¨à§‡à¦² নয়; বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨ <1-13>"
+
+#: ../clients/cli/settings.c:3695
+#, c-format
+msgid "'%s' is not valid; use [e, o, n]"
+msgstr "'%s' বৈধ নয়; বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨ [e, o, n]"
+
+#: ../clients/cli/settings.c:3723
+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"
+
+#: ../clients/cli/settings.c:3763
+msgid "no priority to remove"
+msgstr "সরানোর কোনো অগà§à¦°à¦¾à¦§à¦¿à¦•à¦¾à¦° নেই"
+
+#: ../clients/cli/settings.c:3767
+#, c-format
+msgid "index '%d' is not in the range of <0-%d>"
+msgstr "সূচি '%d' <0-%d> à¦à¦° রেঞà§à¦œà§‡ নেই"
+
+#: ../clients/cli/settings.c:3806
+#, c-format
+msgid ""
+"Warning: only one mapping at a time is supported; taking the first one (%s)\n"
+msgstr "সতরà§à¦•à¦¤à¦¾: à¦à¦• à¦à¦•à¦¬à¦¾à¦°à§‡ শà§à¦§à§à¦®à¦¾à¦¤à§à¦° à¦à¦•à¦Ÿà¦¿ মà§à¦¯à¦¾à¦ªà¦¿à¦‚ সমরà§à¦¥à¦¿à¦¤; পà§à¦°à¦¥à¦®à¦Ÿà¦¿ ধরে (%s)\n"
+
+#: ../clients/cli/settings.c:3813
+#, c-format
+#| msgid "the property can't be changed"
+msgid "the property doesn't contain mapping '%s'"
+msgstr "বিশিষà§à¦Ÿà¦¤à¦¾à§Ÿ '%s' মà§à¦¯à¦¾à¦ªà¦¿à¦‚ উপসà§à¦¥à¦¿à¦¤ নেই"
+
+#: ../clients/cli/settings.c:3922 ../clients/cli/settings.c:4090
+#: ../libnm-core/nm-setting-wired.c:622
+#: ../libnm-core/nm-setting-wireless.c:799
+#: ../libnm-core/nm-setting-wireless.c:811
+#: ../libnm-util/nm-setting-wired.c:648
+#: ../libnm-util/nm-setting-wireless.c:840
+#: ../libnm-util/nm-setting-wireless.c:854
+#, c-format
+msgid "'%s' is not a valid MAC address"
+msgstr "'%s' à¦à¦•à¦Ÿà¦¿ বৈধ MAC ঠিকানা নয়"
+
+#: ../clients/cli/settings.c:3928 ../clients/cli/settings.c:4096
+#, c-format
+msgid "the property doesn't contain MAC address '%s'"
+msgstr "বিশিষà§à¦Ÿà¦¤à¦¾à§Ÿ MAC ঠিকানা '%s' থাকে না"
+
+#: ../clients/cli/settings.c:3947
+#, c-format
+msgid "'%s' is not valid; 3 strings should be provided"
+msgstr "'%s' বৈধ নয়; 3 সà§à¦Ÿà§à¦°à§€à¦‚ পà§à¦°à¦¦à¦¾à¦¨ করতে হবে"
+
+#: ../clients/cli/settings.c:3966
+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"
+
+#: ../clients/cli/settings.c:4016
+#, 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"
+
+#: ../clients/cli/settings.c:4062
+#, c-format
+msgid "'%s' is not a valid channel"
+msgstr "'%s' à¦à¦•à¦Ÿà¦¿ বৈধ চà§à¦¯à¦¾à¦¨à§‡à¦² নয়"
+
+#: ../clients/cli/settings.c:4068
+#, c-format
+msgid "'%ld' is not a valid channel"
+msgstr "'%ld' à¦à¦•à¦Ÿà¦¿ বৈধ চà§à¦¯à¦¾à¦¨à§‡à¦² নয়"
+
+#: ../clients/cli/settings.c:4155 ../clients/cli/settings.c:4193
+#: ../clients/cli/settings.c:4231
+#, c-format
+msgid "the property doesn't contain protocol '%s'"
+msgstr "বিশিষà§à¦Ÿà¦¤à¦¾à§Ÿ '%s' পà§à¦°à§‹à¦Ÿà§‹à¦•à¦² থাকে না"
+
+#: ../clients/cli/settings.c:4270
+#, c-format
+msgid ""
+"'%s' not compatible with %s '%s', please change the key or set the right %s "
+"first."
+msgstr ""
+"'%s' %s '%s' à¦à¦° সংগে সà§à¦¸à¦‚গত নয়, দয়া করে কী পরিবরà§à¦¤à¦¨ করà§à¦¨ বা পà§à¦°à¦¥à¦®à§‡ ডান %s সেট "
+"করà§à¦¨à¥¤"
+
+#: ../clients/cli/settings.c:4278
+#, c-format
+msgid "WEP key is guessed to be of '%s'\n"
+msgstr "WEP কী '%s' à¦à¦° হিসাবে অনà§à¦®à¦¾à¦¨ করা\n"
+
+#: ../clients/cli/settings.c:4280
+#, c-format
+#| msgid "WEP key is guessed to be of '%s'\n"
+msgid "WEP key index set to '%d'\n"
+msgstr "WEP কী সূচি '%d' ঠসেট করা হয়েছে\n"
+
+#: ../clients/cli/settings.c:4303
+#, c-format
+msgid "'%s' not among [0 (unknown), 1 (key), 2 (passphrase)]"
+msgstr "'%s' [0 (unknown), 1 (key), 2 (passphrase)] à¦à¦° মধà§à¦¯à§‡ নয়"
+
+#: ../clients/cli/settings.c:4319 ../clients/cli/settings.c:4322
+#: ../clients/cli/settings.c:4325 ../clients/cli/settings.c:4328
+#, c-format
+msgid ""
+"Warning: '%s' is not compatible with '%s' type, please change or delete the "
+"key.\n"
+msgstr ""
+"সরà§à¦¤à¦•à¦¤à¦¾: '%s' '%s' ধরনের সাথে সà§à¦¸à¦‚গত নয়, দয়া করে কী পরিবরà§à¦¤à¦¨ করà§à¦¨ বা মà§à¦›à§à¦¨à¥¤\n"
+
+#: ../clients/cli/settings.c:4341
+#, 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"
+
+#: ../clients/cli/settings.c:4354
+#, c-format
+msgid "'%s' is not a valid PSK"
+msgstr "'%s' à¦à¦•à¦Ÿà¦¿ বৈধ PSK নয়"
+
+#: ../clients/cli/settings.c:4398
+#, c-format
+msgid "'%s' is not a valid DCB flag"
+msgstr "'%s' à¦à¦•à¦Ÿà¦¿ বৈধ DCB ফà§à¦²à§à¦¯à¦¾à¦— নয়"
+
+#: ../clients/cli/settings.c:4421
+#, c-format
+msgid "'%s' is not a DCB app priority"
+msgstr "'%s' à¦à¦•à¦Ÿà¦¿ DCB অà§à¦¯à¦¾à¦ª অগà§à¦°à¦¾à¦§à¦¿à¦•à¦¾à¦° নয়"
+
+#: ../clients/cli/settings.c:4447
+msgid "must contain 8 comma-separated numbers"
+msgstr "অবশà§à¦¯à¦‡ ৮টি কমা দà§à¦¬à¦¾à¦°à¦¾ পৃথক নমà§à¦¬à¦° থাকতে হবে"
+
+#: ../clients/cli/settings.c:4464
+#, c-format
+msgid "'%s' not a number between 0 and %u (inclusive) or %u"
+msgstr "'%s' 0 à¦à¦¬à¦‚ %u (তাদের ধরে) বা %u à¦à¦° মধà§à¦¯à§‡à¦° কোনো নমà§à¦¬à¦° নয়"
+
+#: ../clients/cli/settings.c:4467
+#, c-format
+msgid "'%s' not a number between 0 and %u (inclusive)"
+msgstr "'%s' 0 à¦à¦¬à¦‚ %u (তাদের ধরে) à¦à¦° মধà§à¦¯à§‡à¦° কোনো নমà§à¦¬à¦° নয়"
+
+#: ../clients/cli/settings.c:4489
+#, c-format
+msgid ""
+"Warning: changes will have no effect until '%s' includes 1 (enabled)\n"
+"\n"
+msgstr ""
+"সরà§à¦¤à¦•à¦¤à¦¾: পরিবরà§à¦¤à¦¨à§‡à¦° কোনো পà§à¦°à¦­à¦¾à¦¬ পড়বে না যদি না '%s' অনà§à¦¤à¦°à§à¦­à§à¦•à§à¦¤ 1 (সকà§à¦°à¦¿à¦¯à¦¼) "
+"করে\n"
+"\n"
+
+#: ../clients/cli/settings.c:4542
+#, c-format
+msgid "bandwidth percentages must total 100%%"
+msgstr "বà§à¦¯à¦¾à¦¨à§à¦¡à¦‰à¦‡à¦¥ শতাংশ অবশà§à¦¯à¦‡ সরà§à¦¬à¦®à§‹à¦Ÿ 100%%"
+
+#: ../clients/cli/settings.c:6185
+msgid "don't know how to get the property value"
+msgstr "বিশিষà§à¦Ÿà¦¤à¦¾ মান কীভাবে পাওয়া যায় জানা নেই"
+
+#: ../clients/cli/settings.c:6238 ../clients/cli/settings.c:6278
+msgid "the property can't be changed"
+msgstr "বিশিষà§à¦Ÿà¦¤à¦¾ পরিবরà§à¦¤à¦¨ করা যাবে না"
+
+#: ../clients/cli/settings.c:6361
+#| msgid "unavailable"
+msgid "(not available)"
+msgstr "(উপলবà§à¦§ নয়)"
+
+#: ../clients/cli/settings.c:6386
+msgid "[NM property description]"
+msgstr "[NM বিশিষà§à¦Ÿà¦¤à¦¾ বরà§à¦£à¦¨à¦¾]"
+
+#: ../clients/cli/settings.c:6391
+msgid "[nmcli specific description]"
+msgstr "[nmcli নিরà§à¦¦à¦¿à¦·à§à¦Ÿ বরà§à¦£à¦¨à¦¾]"
+
+#: ../clients/cli/utils.c:127
+#, c-format
+msgid "Error: value for '%s' argument is required."
+msgstr "বরà§à¦£à¦¨à¦¾: '%s' অারà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿà§‡à¦° মান পà§à¦°à¦¯à¦¼à§‹à¦œà¦¨à§€à¦¯à¦¼à¥¤"
+
+#: ../clients/cli/utils.c:152
+#, c-format
+msgid "Error: Argument '%s' was expected, but '%s' provided."
+msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s' অারà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ পà§à¦°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤, কিনà§à¦¤à§ '%s' দেওয়া হয়েছে।"
+
+#: ../clients/cli/utils.c:155
+#, c-format
+msgid "Error: Unexpected argument '%s'"
+msgstr "তà§à¦°à§à¦Ÿà¦¿: অপà§à¦°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤ অারà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ '%s'"
+
+#: ../clients/cli/utils.c:205
#, c-format
msgid "Error converting IP4 address '0x%X' to text form"
msgstr "IP4 ঠিকানা 0x%X-কে টেকà§à¦¸à¦Ÿà§‡ রূপানà§à¦¤à¦° করতে তà§à¦°à§à¦Ÿà¦¿"
-#: ../cli/src/utils.c:133
+#: ../clients/cli/utils.c:233
#, c-format
msgid "Error converting IP6 address '%s' to text form"
msgstr "IP6 ঠিকানা '%s'-কে টেকà§à¦¸à¦Ÿà§‡ রূপানà§à¦¤à¦° করতে তà§à¦°à§à¦Ÿà¦¿"
-#: ../cli/src/utils.c:234
+#: ../clients/cli/utils.c:410
+#, c-format
+#| msgid "'%s' is ambiguous (%s x %s)"
+msgid "'%s' is ambiguous (on x off)"
+msgstr "'%s' অনিরà§à¦¦à¦¿à¦·à§à¦Ÿ (চালৠx বনà§à¦§)"
+
+#: ../clients/cli/utils.c:420
+#, c-format
+msgid "'%s' is not valid; use [%s] or [%s]"
+msgstr "'%s' বৈধ নয়; বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨ [%s] বা [%s]"
+
+#: ../clients/cli/utils.c:502
+#, c-format
+msgid "'%s' is ambiguous (%s x %s)"
+msgstr "'%s' অনিরà§à¦¦à¦¿à¦·à§à¦Ÿ (%s x %s)"
+
+#: ../clients/cli/utils.c:514
+#, c-format
+msgid "missing name, try one of [%s]"
+msgstr "নাম অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤, [%s] à¦à¦° à¦à¦•à¦Ÿà¦¿ চেষà§à¦Ÿà¦¾ করà§à¦¨"
+
+#: ../clients/cli/utils.c:731
#, c-format
msgid "field '%s' has to be alone"
msgstr "'%s' কà§à¦·à§‡à¦¤à§à¦°à¦Ÿà¦¿ পৃথক থাকা আবশà§à¦¯à¦•"
-#: ../cli/src/utils.c:237
+#: ../clients/cli/utils.c:734
#, c-format
-msgid "invalid field '%s'"
-msgstr "অবৈধ কà§à¦·à§‡à¦¤à§à¦° '%s'"
+msgid "invalid field '%s'; allowed fields: %s"
+msgstr "'%s' অবৈধ ফিলà§à¦¡; অনà§à¦®à§‹à¦¦à¦¿à¦¤ ফিলà§à¦¡: %s"
-#: ../cli/src/utils.c:256
+#: ../clients/cli/utils.c:791
msgid "Option '--terse' requires specifying '--fields'"
msgstr "'--terse' বিকলà§à¦ªà§‡à¦° কà§à¦·à§‡à¦¤à§à¦°à§‡ '--fields' নিরà§à¦§à¦¾à¦°à¦£ করা আবশà§à¦¯à¦•"
-#: ../cli/src/utils.c:260
+#: ../clients/cli/utils.c:795
#, c-format
msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
msgstr ""
@@ -1923,402 +5450,1891 @@ msgstr ""
"আবশà§à¦¯à¦•, "
"'%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
+#: ../clients/cli/utils.c:1113
#, 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"
+"আড়াল "
+"করার জনà§à¦¯ --nocheck বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨à¥¤\n"
-#: ../cli/src/utils.c:532
+#: ../clients/cli/utils.c:1122
#, 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 বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨, কিনà§à¦¤à§ অপà§à¦°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤ ফলাফল সৃষà§à¦Ÿà¦¿ হতে পারে।"
+"সঞà§à¦šà¦¾à¦²à¦¨ করার জনà§à¦¯ --nocheck বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨, কিনà§à¦¤à§ অপà§à¦°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤ ফলাফল সৃষà§à¦Ÿà¦¿ হতে "
+"পারে।"
+
+#: ../clients/nm-online.c:96
+#, c-format
+msgid "\rConnecting"
+msgstr "\rসংযোগ করা হচà§à¦›à§‡"
+
+#: ../clients/nm-online.c:149
+msgid ""
+"Time to wait for a connection, in seconds (without the option, default value "
+"is 30)"
+msgstr ""
+"সংযোগ সà§à¦¥à¦¾à¦ªà¦¨à§‡à¦° জনà§à¦¯ অপেকà§à¦·à¦¾ করার সময়সীময়, সেকেনà§à¦¡ অনà§à¦¯à¦¾à§Ÿà§€ ধারà§à¦¯ (বিকলà§à¦ª "
+"ছাড়া, ডিফলà§à¦Ÿ "
+"মান ৩০ সেকেনà§à¦¡)"
+
+#: ../clients/nm-online.c:150
+#| msgid "Exit immediately if NetworkManager is not running"
+msgid "Exit immediately if NetworkManager is not running or connecting"
+msgstr "NetworkManager চলমান না হলে বা সংযà§à¦•à§à¦¤ না হলে অবিলমà§à¦¬à§‡ পà§à¦°à¦¸à§à¦¥à¦¾à¦¨ করà§à¦¨"
+
+#: ../clients/nm-online.c:151
+msgid "Don't print anything"
+msgstr "কিছৠপà§à¦°à¦¦à¦°à§à¦¶à¦¨ করা হবে না"
+
+#: ../clients/nm-online.c:152
+#| msgid ""
+#| "Waits for NetworkManager to finish activating startup network connections."
+msgid "Wait for NetworkManager startup instead of a connection"
+msgstr "à¦à¦•à¦Ÿà¦¿ সংযোগের পরিবরà§à¦¤à§‡ NetworkManager সূচনার জনà§à¦¯ অপেকà§à¦·à¦¾ করà§à¦¨"
+
+#: ../clients/nm-online.c:173
+msgid ""
+"Waits for NetworkManager to finish activating startup network connections."
+msgstr ""
+"NetworkManager à¦à¦° পà§à¦°à¦¾à¦°à¦®à§à¦­ নেটওয়ারà§à¦• সংযোগ সকà§à¦°à¦¿à¦¯à¦¼à¦•à¦°à¦£ সমà§à¦ªà¦¨à§à¦¨ করা পরà§à¦¯à¦¨à§à¦¤ "
+"অপেকà§à¦·à¦¾ করে।"
+
+#: ../clients/nm-online.c:180 ../clients/nm-online.c:186
+msgid "Invalid option. Please use --help to see a list of valid options."
+msgstr ""
+"অবৈধ বিকলà§à¦ªà¥¤ বৈধ বিকলà§à¦ªà¦—à§à¦²à¦¿à¦° তালিকা দেখার জনà§à¦¯ অনà§à¦—à§à¦°à¦¹ করে --help পà§à¦°à§Ÿà§‹à¦— "
+"করà§à¦¨à¥¤"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:180 ../clients/tui/nmt-editor.c:245
+#: ../clients/tui/nmt-password-dialog.c:174
+#: ../clients/tui/nmt-route-editor.c:135 ../clients/tui/nmtui-hostname.c:71
+#: ../clients/tui/nmtui.c:118
+msgid "OK"
+msgstr "ঠিক অাছে"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:328
+#: ../clients/tui/newt/nmt-newt-utils.c:360
+#, c-format
+msgid "Could not create temporary file: %s"
+msgstr "অসà§à¦¥à¦¾à¦¯à¦¼à§€ ফাইল তৈরি করা যায়নি: %s"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:368
+#, c-format
+msgid "Editor failed: %s"
+msgstr "সমà§à¦ªà¦¾à¦¦à¦• বà§à¦¯à¦°à§à¦¥ হয়েছে: %s"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:376
+#, c-format
+#| msgid "Editor failed: %s"
+msgid "Editor failed with status %d"
+msgstr "সমà§à¦ªà¦¾à¦¦à¦• বà§à¦¯à¦°à§à¦¥ হয়েছে, সà§à¦Ÿà§à¦¯à¦¾à¦Ÿà¦¾à¦¸ %d"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:378
+#, c-format
+#| msgid "Editor failed: %s"
+msgid "Editor failed with signal %d"
+msgstr "সমà§à¦ªà¦¾à¦¦à¦• বà§à¦¯à¦°à§à¦¥ হয়েছে, সংকেত %d"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:382
+#, c-format
+msgid "Could not re-read file: %s"
+msgstr "ফাইল পà§à¦¨à¦ƒà¦°à¦¿à¦¡ করা যায়নি: %s"
+
+#: ../clients/tui/nm-editor-utils.c:151
+#, c-format
+msgid "Ethernet connection %d"
+msgstr "ইথারনেট সংযোগ %d"
+
+#: ../clients/tui/nm-editor-utils.c:159
+#, c-format
+msgid "Wi-Fi connection %d"
+msgstr "Wi-Fi সংযোগ %d"
+
+#: ../clients/tui/nm-editor-utils.c:168
+#, c-format
+msgid "InfiniBand connection %d"
+msgstr "InfiniBand সংযোগ %d"
+
+#: ../clients/tui/nm-editor-utils.c:173 ../libnm-glib/nm-device.c:1798
+msgid "Mobile Broadband"
+msgstr "মোবাইল বà§à¦°à¦¡à¦¬à§à¦¯à¦¾à¦¨à§à¦¡"
+
+#: ../clients/tui/nm-editor-utils.c:176
+#, c-format
+msgid "Mobile broadband connection %d"
+msgstr "মোবাইল বà§à¦°à¦¡à¦¬à§à¦¯à¦¾à¦¨à§à¦¡ সংযোগ %d"
+
+#: ../clients/tui/nm-editor-utils.c:182 ../clients/tui/nmt-page-dsl.c:39
+msgid "DSL"
+msgstr "DSL"
+
+#: ../clients/tui/nm-editor-utils.c:186
+#, c-format
+msgid "DSL connection %d"
+msgstr "DSL সংযোগ %d"
+
+#: ../clients/tui/nm-editor-utils.c:191 ../libnm-core/nm-connection.c:1501
+#: ../libnm-glib/nm-device.c:1802 ../libnm-util/nm-connection.c:1606
+#: ../src/settings/plugins/ifcfg-rh/reader.c:3931
+msgid "Bond"
+msgstr "Bond"
+
+#: ../clients/tui/nm-editor-utils.c:195
+#, c-format
+msgid "Bond connection %d"
+msgstr "Bond সংযোগ %d"
+
+#: ../clients/tui/nm-editor-utils.c:200 ../libnm-core/nm-connection.c:1505
+#: ../libnm-glib/nm-device.c:1806 ../libnm-util/nm-connection.c:1610
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4219
+msgid "Bridge"
+msgstr "বà§à¦°à¦¿à¦œ"
+
+#: ../clients/tui/nm-editor-utils.c:205
+#, c-format
+msgid "Bridge connection %d"
+msgstr "বà§à¦°à¦¿à¦œ সংযোগ %d"
+
+#: ../clients/tui/nm-editor-utils.c:209 ../libnm-core/nm-connection.c:1503
+#: ../libnm-glib/nm-device.c:1804 ../libnm-util/nm-connection.c:1608
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4035
+msgid "Team"
+msgstr "টিম"
+
+#: ../clients/tui/nm-editor-utils.c:214
+#, c-format
+msgid "Team connection %d"
+msgstr "টিম সংযোগ %d"
+
+#: ../clients/tui/nm-editor-utils.c:222
+#, c-format
+msgid "VLAN connection %d"
+msgstr "VLAN সংযোগ %d"
+
+#: ../clients/tui/nm-editor-utils.c:237
+#, c-format
+msgid "VPN connection %d"
+msgstr "VPN সংযোগ %d"
+
+#: ../clients/tui/nmt-device-entry.c:371
+msgid "Select..."
+msgstr "নিরà§à¦¬à¦¾à¦šà¦¨ করà§à¦¨..."
+
+#: ../clients/tui/nmt-edit-connection-list.c:129
+msgid "Add"
+msgstr "যোগ করà§à¦¨"
+
+#: ../clients/tui/nmt-edit-connection-list.c:132
+#: ../clients/tui/nmt-page-ip4.c:175 ../clients/tui/nmt-page-ip6.c:173
+#: ../clients/tui/nmt-page-team-port.c:110 ../clients/tui/nmt-page-team.c:174
+msgid "Edit..."
+msgstr "সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨..."
+
+#: ../clients/tui/nmt-edit-connection-list.c:135
+#: ../clients/tui/nmtui-edit.c:473
+msgid "Delete"
+msgstr "মà§à¦›à§à¦¨"
+
+#: ../clients/tui/nmt-editor.c:81
+#, c-format
+msgid "Could not create editor for connection '%s' of type '%s'."
+msgstr "'%s' সংযোগের '%s' ধরনের সমà§à¦ªà¦¾à¦¦à¦• তৈরি করা যায়নি।"
+
+#: ../clients/tui/nmt-editor.c:85
+#, c-format
+msgid "Could not create editor for invalid connection '%s'."
+msgstr "অবৈধ সংযোগ '%s' à¦à¦° জনà§à¦¯ সমà§à¦ªà¦¾à¦¦à¦• তৈরি করা যায়নি।"
+
+#: ../clients/tui/nmt-editor.c:95
+#| msgid "Edit connection"
+msgid "Edit Connection"
+msgstr "সংযোগ সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨"
-#: ../libnm-util/crypto.c:133
+#: ../clients/tui/nmt-editor.c:149
+#, c-format
+msgid "Unable to save connection: %s"
+msgstr "সংযোগ সংরকà§à¦·à¦£ করতে অসমরà§à¦¥: %s"
+
+#: ../clients/tui/nmt-editor.c:163
+#, c-format
+msgid "Unable to add new connection: %s"
+msgstr "নতà§à¦¨ সংযোগ যোগ করতে অসমরà§à¦¥: %s"
+
+#: ../clients/tui/nmt-editor.c:242 ../clients/tui/nmt-password-dialog.c:171
+#: ../clients/tui/nmt-route-editor.c:128 ../clients/tui/nmtui-edit.c:192
+#: ../clients/tui/nmtui-edit.c:472 ../clients/tui/nmtui-hostname.c:69
+msgid "Cancel"
+msgstr "বাতিল করà§à¦¨"
+
+#: ../clients/tui/nmt-mtu-entry.c:86
+msgid "(default)"
+msgstr "(ডিফলà§à¦Ÿ)"
+
+#: ../clients/tui/nmt-mtu-entry.c:88 ../clients/tui/nmt-mtu-entry.c:119
+msgid "bytes"
+msgstr "বাইট"
+
+#: ../clients/tui/nmt-page-bond.c:88
+msgid "Round-robin"
+msgstr "রাউনà§à¦¡-রবিন"
+
+#: ../clients/tui/nmt-page-bond.c:89
+msgid "Active Backup"
+msgstr "সকà§à¦°à¦¿à¦¯à¦¼ বà§à¦¯à¦¾à¦•à¦†à¦ª"
+
+#: ../clients/tui/nmt-page-bond.c:90
+msgid "XOR"
+msgstr "XOR"
+
+#: ../clients/tui/nmt-page-bond.c:91
+msgid "Broadcast"
+msgstr "বà§à¦°à¦¡à¦•à¦¾à¦¸à§à¦Ÿ"
+
+#: ../clients/tui/nmt-page-bond.c:92
+msgid "802.3ad"
+msgstr "802.3ad"
+
+#: ../clients/tui/nmt-page-bond.c:93
+msgid "Adaptive Transmit Load Balancing (tlb)"
+msgstr "অà§à¦¯à¦¾à¦¡à¦¾à¦ªà¦Ÿà¦¿à¦­ টà§à¦°à§à¦¯à¦¾à¦¨à§à¦¸à¦®à¦¿à¦Ÿ লোড বà§à¦¯à¦¾à¦²à§‡à¦¨à§à¦¸à¦¿à¦‚ (tlb)"
+
+#: ../clients/tui/nmt-page-bond.c:94
+msgid "Adaptive Load Balancing (alb)"
+msgstr "অà§à¦¯à¦¾à¦¡à¦¾à¦ªà¦Ÿà¦¿à¦­ লোড বà§à¦¯à¦¾à¦²à§‡à¦¨à§à¦¸à¦¿à¦‚ (alb)"
+
+#: ../clients/tui/nmt-page-bond.c:100
+msgid "MII (recommended)"
+msgstr "MII (পà§à¦°à¦¸à§à¦¤à¦¾à¦¬à¦¿à¦¤)"
+
+#: ../clients/tui/nmt-page-bond.c:101
+msgid "ARP"
+msgstr "ARP"
+
+#: ../clients/tui/nmt-page-bond.c:357 ../clients/tui/nmt-page-bridge.c:80
+#: ../clients/tui/nmt-page-team.c:153
+msgid "Slaves"
+msgstr "Slaves"
+
+#: ../clients/tui/nmt-page-bond.c:369 ../clients/tui/nmt-page-wifi.c:226
+msgid "Mode"
+msgstr "মোড"
+
+#: ../clients/tui/nmt-page-bond.c:375
+msgid "Primary"
+msgstr "পà§à¦°à¦¾à¦¥à¦®à¦¿à¦•"
+
+#: ../clients/tui/nmt-page-bond.c:381
+msgid "Link monitoring"
+msgstr "লিঙà§à¦• নিয়নà§à¦¤à§à¦°à¦£"
+
+#: ../clients/tui/nmt-page-bond.c:387 ../clients/tui/nmt-page-bond.c:394
+#: ../clients/tui/nmt-page-bond.c:401 ../clients/tui/nmt-page-bond.c:408
+msgctxt "milliseconds"
+msgid "ms"
+msgstr "ms"
+
+#: ../clients/tui/nmt-page-bond.c:388 ../clients/tui/nmt-page-bond.c:409
+msgid "Monitoring frequency"
+msgstr "নিয়নà§à¦¤à§à¦°à¦£ পà§à¦°à¦¾à¦¬à¦²à§à¦¯à¦¤à¦¾"
+
+#: ../clients/tui/nmt-page-bond.c:395
+msgid "Link up delay"
+msgstr "লিঙà§à¦• অাপ বিলমà§à¦¬"
+
+#: ../clients/tui/nmt-page-bond.c:402
+msgid "Link down delay"
+msgstr "লিঙà§à¦• ডাউন বিলমà§à¦¬"
+
+#: ../clients/tui/nmt-page-bond.c:415
+msgid "ARP targets"
+msgstr "ARP টারà§à¦—েট"
+
+#: ../clients/tui/nmt-page-bridge-port.c:38
+msgid "BRIDGE PORT"
+msgstr "বà§à¦°à¦¿à¦œ পোরà§à¦Ÿ"
+
+#: ../clients/tui/nmt-page-bridge-port.c:69
+#: ../clients/tui/nmt-page-bridge.c:106
+msgid "Priority"
+msgstr "অগà§à¦°à¦¾à¦§à¦¿à¦•à¦¾à¦°"
+
+#: ../clients/tui/nmt-page-bridge-port.c:75
+msgid "Path cost"
+msgstr "পাথ কসà§à¦Ÿ"
+
+#: ../clients/tui/nmt-page-bridge-port.c:77
+msgid "Hairpin mode"
+msgstr "Hairpin মোড"
+
+#: ../clients/tui/nmt-page-bridge.c:90 ../clients/tui/nmt-page-bridge.c:115
+#: ../clients/tui/nmt-page-bridge.c:125 ../clients/tui/nmt-page-bridge.c:135
+msgid "seconds"
+msgstr "সেকেনà§à¦¡"
+
+#: ../clients/tui/nmt-page-bridge.c:91
+msgid "Aging time"
+msgstr "à¦à¦œà¦¿à¦‚ টাইম"
+
+#: ../clients/tui/nmt-page-bridge.c:93
+msgid "Enable STP (Spanning Tree Protocol)"
+msgstr "STP সকà§à¦°à¦¿à¦¯à¦¼ করà§à¦¨ (সà§à¦ªà§à¦¯à¦¾à¦¨à¦¿à¦‚ টà§à¦°à¦¿ পà§à¦°à§‹à¦Ÿà§‹à¦•à¦²)"
+
+#: ../clients/tui/nmt-page-bridge.c:116
+msgid "Forward delay"
+msgstr "ফরোয়ারà§à¦¡ বিলমà§à¦¬"
+
+#: ../clients/tui/nmt-page-bridge.c:126
+msgid "Hello time"
+msgstr "হà§à¦¯à¦¾à¦²à§‹ টাইম"
+
+#: ../clients/tui/nmt-page-bridge.c:136
+msgid "Max age"
+msgstr "সরà§à¦¬à¦¾à¦§à¦¿à¦• বয়স"
+
+#. 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)
+#.
+#: ../clients/tui/nmt-page-dsl.c:67 ../clients/tui/nmt-page-wifi.c:328
+#: ../clients/tui/nmt-secret-agent.c:206 ../clients/tui/nmt-secret-agent.c:301
+msgid "Username"
+msgstr "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€ নাম"
+
+#: ../clients/tui/nmt-page-dsl.c:76 ../clients/tui/nmt-page-wifi.c:273
+#: ../clients/tui/nmt-page-wifi.c:304 ../clients/tui/nmt-page-wifi.c:337
+#: ../clients/tui/nmt-secret-agent.c:211 ../clients/tui/nmt-secret-agent.c:248
+#: ../clients/tui/nmt-secret-agent.c:278 ../clients/tui/nmt-secret-agent.c:311
+#: ../clients/tui/nmt-secret-agent.c:380 ../clients/tui/nmt-secret-agent.c:393
+#: ../clients/tui/nmt-secret-agent.c:409
+msgid "Password"
+msgstr "পাসওয়ারà§à¦¡"
+
+#: ../clients/tui/nmt-page-dsl.c:79 ../clients/tui/nmt-secret-agent.c:306
+msgid "Service"
+msgstr "পরিষেবা"
+
+#: ../clients/tui/nmt-page-ethernet.c:41
+msgid "ETHERNET"
+msgstr "ইথারনেট"
+
+#: ../clients/tui/nmt-page-ethernet.c:80 ../clients/tui/nmt-page-vlan.c:124
+#: ../clients/tui/nmt-page-wifi.c:360
+msgid "Cloned MAC address"
+msgstr "কà§à¦²à§‹à¦¨à§à¦¡ MAC ঠিকানা"
+
+#: ../clients/tui/nmt-page-infiniband.c:40
+msgid "INFINIBAND"
+msgstr "INFINIBAND"
+
+#: ../clients/tui/nmt-page-infiniband.c:51
+msgid "Datagram"
+msgstr "ডেটাগà§à¦°à¦¾à¦®"
+
+#: ../clients/tui/nmt-page-infiniband.c:52
+msgid "Connected"
+msgstr "সংযà§à¦•à§à¦¤"
+
+#: ../clients/tui/nmt-page-infiniband.c:90
+msgid "Transport mode"
+msgstr "পরিবহন মোড"
+
+#: ../clients/tui/nmt-page-ip4.c:41
+msgid "Disabled"
+msgstr "নিষà§à¦•à§à¦°à¦¿à¦¯à¦¼"
+
+#: ../clients/tui/nmt-page-ip4.c:42 ../clients/tui/nmt-page-ip6.c:42
+msgid "Automatic"
+msgstr "সà§à¦¬à¦¯à¦¼à¦‚কà§à¦°à¦¿à¦¯à¦¼"
+
+#: ../clients/tui/nmt-page-ip4.c:43 ../clients/tui/nmt-page-ip6.c:44
+msgid "Link-Local"
+msgstr "লিঙà§à¦•-লোকাল"
+
+#: ../clients/tui/nmt-page-ip4.c:44 ../clients/tui/nmt-page-ip6.c:45
+msgid "Manual"
+msgstr "মà§à¦¯à¦¾à¦¨à§à¦¯à¦¼à¦¾à¦²"
+
+#: ../clients/tui/nmt-page-ip4.c:45
+msgid "Shared"
+msgstr "অংশীদারি করা"
+
+#: ../clients/tui/nmt-page-ip4.c:54
+msgid "IPv4 CONFIGURATION"
+msgstr "IPv4 কনফিগারেশন"
+
+#: ../clients/tui/nmt-page-ip4.c:100 ../clients/tui/nmt-page-ip6.c:100
+msgid "(No custom routes)"
+msgstr "(কোনো কাসà§à¦Ÿà¦® রাউট নেই)"
+
+#: ../clients/tui/nmt-page-ip4.c:103 ../clients/tui/nmt-page-ip6.c:103
+#, c-format
+msgid "One custom route"
+msgid_plural "%d custom routes"
+msgstr[0] "à¦à¦•à¦Ÿà¦¿ কাসà§à¦Ÿà¦® রাউট"
+msgstr[1] "%d কাসà§à¦Ÿà¦® রাউট"
+
+#: ../clients/tui/nmt-page-ip4.c:144 ../clients/tui/nmt-page-ip6.c:144
+msgid "Addresses"
+msgstr "ঠিকানাগà§à¦²à¦¿"
+
+#: ../clients/tui/nmt-page-ip4.c:150 ../clients/tui/nmt-page-ip6.c:150
+msgid "Gateway"
+msgstr "গেটওয়ে"
+
+#: ../clients/tui/nmt-page-ip4.c:156 ../clients/tui/nmt-page-ip6.c:156
+msgid "DNS servers"
+msgstr "DNS সারà§à¦­à¦¾à¦°"
+
+#: ../clients/tui/nmt-page-ip4.c:162 ../clients/tui/nmt-page-ip6.c:162
+msgid "Search domains"
+msgstr "ডোমেন অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨"
+
+#: ../clients/tui/nmt-page-ip4.c:177 ../clients/tui/nmt-page-ip6.c:175
+msgid "Routing"
+msgstr "রাউটিং"
+
+#: ../clients/tui/nmt-page-ip4.c:179 ../clients/tui/nmt-page-ip6.c:177
+msgid "Never use this network for default route"
+msgstr "ডিফলà§à¦Ÿ রাউটের জনà§à¦¯ কখনও à¦à¦‡ নেটওয়ারà§à¦• বà§à¦¯à¦¬à¦¹à¦¾à¦° করবেন না"
+
+#: ../clients/tui/nmt-page-ip4.c:187
+msgid "Require IPv4 addressing for this connection"
+msgstr "à¦à¦‡ সংযোগের জনà§à¦¯ IPv4 ঠিকানা পà§à¦°à¦¯à¦¼à§‹à¦œà¦¨"
+
+#: ../clients/tui/nmt-page-ip6.c:41
+msgid "Ignore"
+msgstr "উপেকà§à¦·à¦¾ করà§à¦¨"
+
+#: ../clients/tui/nmt-page-ip6.c:43
+msgid "Automatic (DHCP-only)"
+msgstr "সà§à¦¬à¦¯à¦¼à¦‚কà§à¦°à¦¿à¦¯à¦¼ (শà§à¦§à§à¦®à¦¾à¦¤à§à¦°-DHCP)"
+
+#: ../clients/tui/nmt-page-ip6.c:54
+msgid "IPv6 CONFIGURATION"
+msgstr "IPv6 কনফিগারেশন"
+
+#: ../clients/tui/nmt-page-ip6.c:185
+msgid "Require IPv6 addressing for this connection"
+msgstr "à¦à¦‡ সংযোগের জনà§à¦¯ IPv6 ঠিকানার পà§à¦°à¦¯à¦¼à§‹à¦œà¦¨"
+
+#: ../clients/tui/nmt-page-main.c:139
+msgid "Hide"
+msgstr "লà§à¦•à¦¾à¦¨"
+
+#: ../clients/tui/nmt-page-main.c:139
+msgid "Show"
+msgstr "দেখান"
+
+#: ../clients/tui/nmt-page-main.c:187
+msgid "Profile name"
+msgstr "পà§à¦°à§‹à¦«à¦¾à¦‡à¦² নাম"
+
+#: ../clients/tui/nmt-page-main.c:194
+msgid "Device"
+msgstr "ডিভাইস"
+
+#: ../clients/tui/nmt-page-main.c:243
+msgid "Automatically connect"
+msgstr "সà§à¦¬à¦¯à¦¼à¦‚কà§à¦°à¦¿à¦¯à¦¼ ভাবে সংযোগ করà§à¦¨"
+
+#: ../clients/tui/nmt-page-main.c:249
+msgid "Available to all users"
+msgstr "সকল বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€à¦° কাছে উপলবà§à¦§"
+
+#: ../clients/tui/nmt-page-ppp.c:49
+#| msgid "IPv4 CONFIGURATION"
+msgid "PPP CONFIGURATION"
+msgstr "PPP কনফিগারেশন"
+
+#: ../clients/tui/nmt-page-ppp.c:142
+#| msgid "Authentication"
+msgid "Allowed authentication methods:"
+msgstr "অনà§à¦®à§‹à¦¦à¦¿à¦¤ পà§à¦°à¦®à¦¾à¦£à§€à¦•à¦°à¦£ পদà§à¦§à¦¤à¦¿à¦—à§à¦²à¦¿:"
+
+#: ../clients/tui/nmt-page-ppp.c:149
+#| msgid "LEAP"
+msgid "EAP"
+msgstr "EAP"
+
+#: ../clients/tui/nmt-page-ppp.c:157
+#| msgid "AP"
+msgid "PAP"
+msgstr "PAP"
+
+#: ../clients/tui/nmt-page-ppp.c:165
+msgid "CHAP"
+msgstr "CHAP"
+
+#: ../clients/tui/nmt-page-ppp.c:173
+msgid "MSCHAPv2"
+msgstr "MSCHAPv2"
+
+#: ../clients/tui/nmt-page-ppp.c:181
+msgid "MSCHAP"
+msgstr "MSCHAP"
+
+#: ../clients/tui/nmt-page-ppp.c:197
+msgid "Use point-to-point encryption (MPPE)"
+msgstr "পয়েনà§à¦Ÿ-টà§-পয়েনà§à¦Ÿ à¦à¦¨à¦•à§à¦°à¦¿à¦ªà¦¶à¦¨ বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨ (MPPE)"
+
+#: ../clients/tui/nmt-page-ppp.c:209
+msgid "Require 128-bit encryption"
+msgstr "128-বিট à¦à¦¨à¦•à§à¦°à¦¿à¦ªà¦¶à¦¨ পà§à¦°à§Ÿà§‹à¦œà¦¨"
+
+#: ../clients/tui/nmt-page-ppp.c:219
+msgid "Use stateful MPPE"
+msgstr "সà§à¦Ÿà§‡à¦Ÿà¦«à§à¦² MPPE বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨"
+
+#: ../clients/tui/nmt-page-ppp.c:231
+msgid "Allow BSD data compression"
+msgstr "BSD ডেটা কমà§à¦ªà§à¦°à§‡à¦¶à¦¨à§‡à¦° অনà§à¦®à¦¤à¦¿ দিন"
+
+#: ../clients/tui/nmt-page-ppp.c:239
+msgid "Allow Deflate data compression"
+msgstr "ডিফà§à¦²à§‡à¦Ÿ ডেটা কমà§à¦ªà§à¦°à§‡à¦¶à¦¨à§‡à¦° অনà§à¦®à¦¤à¦¿ দিন"
+
+#: ../clients/tui/nmt-page-ppp.c:247
+msgid "Use TCP header compression"
+msgstr "TCP হেডার কমà§à¦ªà§à¦°à§‡à¦¸à¦¶à¦¨ বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨"
+
+#: ../clients/tui/nmt-page-ppp.c:257
+msgid "Send PPP echo packets"
+msgstr "PPP ইকো পà§à¦¯à¦¾à¦•à§‡à¦Ÿ পাঠান"
+
+#: ../clients/tui/nmt-page-team-port.c:45
+msgid "TEAM PORT"
+msgstr "টিম পোরà§à¦Ÿ"
+
+#: ../clients/tui/nmt-page-team-port.c:100 ../clients/tui/nmt-page-team.c:164
+msgid "JSON configuration"
+msgstr "JSON কনফিগারেশন"
+
+#: ../clients/tui/nmt-page-vlan.c:101
+msgid "Parent"
+msgstr "পেরেনà§à¦Ÿ"
+
+#: ../clients/tui/nmt-page-vlan.c:116
+msgid "VLAN id"
+msgstr "VLAN অাইডি"
+
+#: ../clients/tui/nmt-page-wifi.c:57
+msgid "WI-FI"
+msgstr "WI-FI"
+
+#: ../clients/tui/nmt-page-wifi.c:68
+msgctxt "Wi-Fi"
+msgid "Client"
+msgstr "কà§à¦²à¦¾à¦¯à¦¼à§‡à¦¨à§à¦Ÿ"
+
+#: ../clients/tui/nmt-page-wifi.c:69
+msgid "Access Point"
+msgstr "অà§à¦¯à¦¾à¦•à§à¦¸à§‡à¦¸ পয়েনà§à¦Ÿ"
+
+#: ../clients/tui/nmt-page-wifi.c:70
+msgid "Ad-Hoc Network"
+msgstr "Ad-Hoc নেটওয়ারà§à¦•"
+
+#: ../clients/tui/nmt-page-wifi.c:75
+msgctxt "Wi-Fi"
+msgid "Automatic"
+msgstr "সà§à¦¬à¦¯à¦¼à¦‚কà§à¦°à¦¿à¦¯à¦¼"
+
+#. 802.11a Wi-Fi network
+#: ../clients/tui/nmt-page-wifi.c:77
+msgid "A (5 GHz)"
+msgstr "A (5 GHz)"
+
+#. 802.11b / 802.11g Wi-Fi network
+#: ../clients/tui/nmt-page-wifi.c:79
+msgid "B/G (2.4 GHz)"
+msgstr "B/G (2.4 GHz)"
+
+#: ../clients/tui/nmt-page-wifi.c:84
+msgctxt "Wi-Fi security"
+msgid "None"
+msgstr "কিছà§à¦‡ নয়"
+
+#: ../clients/tui/nmt-page-wifi.c:85
+msgid "WPA & WPA2 Personal"
+msgstr "WPA & WPA2 বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত"
+
+#: ../clients/tui/nmt-page-wifi.c:86
+msgid "WPA & WPA2 Enterprise"
+msgstr "WPA & WPA2 à¦à¦¨à§à¦Ÿà¦¾à¦°à¦ªà§à¦°à¦¾à¦‡à¦œ"
+
+#: ../clients/tui/nmt-page-wifi.c:87
+msgid "WEP 40/128-bit Key (Hex or ASCII)"
+msgstr "WEP 40/128-bit কী (Hex বা ASCII)"
+
+#: ../clients/tui/nmt-page-wifi.c:88
+msgid "WEP 128-bit Passphrase"
+msgstr "WEP 128-bit পাসফà§à¦°à§‡à¦œ"
+
+#: ../clients/tui/nmt-page-wifi.c:89
+msgid "Dynamic WEP (802.1x)"
+msgstr "ডায়নামিক WEP (802.1x)"
+
+#: ../clients/tui/nmt-page-wifi.c:90
+msgid "LEAP"
+msgstr "LEAP"
+
+#: ../clients/tui/nmt-page-wifi.c:95
+msgctxt "WEP key index"
+msgid "1 (Default)"
+msgstr "1 (ডিফলà§à¦Ÿ)"
+
+#: ../clients/tui/nmt-page-wifi.c:96
+msgctxt "WEP key index"
+msgid "2"
+msgstr "2"
+
+#: ../clients/tui/nmt-page-wifi.c:97
+msgctxt "WEP key index"
+msgid "3"
+msgstr "3"
+
+#: ../clients/tui/nmt-page-wifi.c:98
+msgctxt "WEP key index"
+msgid "4"
+msgstr "4"
+
+#: ../clients/tui/nmt-page-wifi.c:103
+msgid "Open System"
+msgstr "মà§à¦•à§à¦¤ সিসà§à¦Ÿà§‡à¦®"
+
+#: ../clients/tui/nmt-page-wifi.c:104
+msgid "Shared Key"
+msgstr "অংশীদারি কী"
+
+#: ../clients/tui/nmt-page-wifi.c:252
+msgid "Channel"
+msgstr "চà§à¦¯à¦¾à¦¨à§‡à¦²"
+
+#: ../clients/tui/nmt-page-wifi.c:257
+msgid "Security"
+msgstr "নিরাপতà§à¦¤à¦¾"
+
+#. "wpa-enterprise"
+#. FIXME
+#: ../clients/tui/nmt-page-wifi.c:278
+msgid "(No support for wpa-enterprise yet...)"
+msgstr "(à¦à¦–নও পরà§à¦¯à¦¨à§à¦¤ wpa-enterprise à¦à¦° জনà§à¦¯ কোনো সহায়তা নেই...)"
+
+#: ../clients/tui/nmt-page-wifi.c:285 ../clients/tui/nmt-secret-agent.c:262
+msgid "Key"
+msgstr "কী"
+
+#: ../clients/tui/nmt-page-wifi.c:288 ../clients/tui/nmt-page-wifi.c:307
+msgid "WEP index"
+msgstr "WEP সূচি"
+
+#: ../clients/tui/nmt-page-wifi.c:296 ../clients/tui/nmt-page-wifi.c:315
+msgid "Authentication"
+msgstr "পà§à¦°à¦®à¦¾à¦£à§€à¦•à¦°à¦£"
+
+#. "dynamic-wep"
+#. FIXME
+#: ../clients/tui/nmt-page-wifi.c:321
+msgid "(No support for dynamic-wep yet...)"
+msgstr "(à¦à¦–নও পরà§à¦¯à¦¨à§à¦¤ dynamic-wep à¦à¦° জনà§à¦¯ কোনো সহায়তা নেই...)"
+
+#: ../clients/tui/nmt-password-fields.c:130
+msgid "Ask for this password every time"
+msgstr "পà§à¦°à¦¤à¦¿à¦¬à¦¾à¦° à¦à¦‡ পাসওয়ারà§à¦¡ জিজà§à¦žà¦¾à¦¸à¦¾ করà§à¦¨"
+
+#: ../clients/tui/nmt-password-fields.c:131
+msgid "Show password"
+msgstr "পাসওয়ারà§à¦¡ দেখান"
+
+#: ../clients/tui/nmt-route-table.c:217
+msgid "Destination"
+msgstr "গনà§à¦¤à¦¬à§à¦¯"
+
+#: ../clients/tui/nmt-route-table.c:217
+msgid "Prefix"
+msgstr "পà§à¦°à§‡à¦«à¦¿à¦•à§à¦¸"
+
+#: ../clients/tui/nmt-route-table.c:226
+msgid "Next Hop"
+msgstr "পরবরà§à¦¤à§€ হপ"
+
+#: ../clients/tui/nmt-route-table.c:234
+msgid "Metric"
+msgstr "মেটà§à¦°à¦¿à¦•"
+
+#: ../clients/tui/nmt-route-table.c:254
+msgid "No custom routes are defined."
+msgstr "কোনো কাসà§à¦Ÿà¦® রাউট নিরà§à¦¦à¦¿à¦·à§à¦Ÿ করা হয়নি।"
+
+#: ../clients/tui/nmt-secret-agent.c:220
+msgid "Identity"
+msgstr "পরিচয়"
+
+#: ../clients/tui/nmt-secret-agent.c:225
+msgid "Private key password"
+msgstr "বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কী পাসওয়ারà§à¦¡"
+
+#: ../clients/tui/nmt-secret-agent.c:340
+msgid "Authentication required by wireless network"
+msgstr "বেতার নেটওয়ারà§à¦• দà§à¦¬à¦¾à¦°à¦¾ পà§à¦°à¦®à¦¾à¦£à§€à¦•à¦°à¦£ পà§à¦°à¦¯à¦¼à§‹à¦œà¦¨"
+
+#: ../clients/tui/nmt-secret-agent.c:341
+#, c-format
+msgid ""
+"Passwords or encryption keys are required to access the wireless network "
+"'%s'."
+msgstr ""
+"পাসওয়ারà§à¦¡ বা à¦à¦¨à¦•à§à¦°à¦¿à¦ªà¦¶à¦¨ কী বেতার নেটওয়ারà§à¦• '%s' অà§à¦¯à¦¾à¦•à§à¦¸à§‡à¦¸ করতে পà§à¦°à¦¯à¦¼à§‹à¦œà¦¨à§€à¦¯à¦¼à¥¤"
+
+#: ../clients/tui/nmt-secret-agent.c:349
+msgid "Wired 802.1X authentication"
+msgstr "তারযà§à¦•à§à¦¤ 802.1X পà§à¦°à¦®à¦¾à¦£à§€à¦•à¦°à¦£"
+
+#: ../clients/tui/nmt-secret-agent.c:352
+msgid "Network name"
+msgstr "নেটওয়ারà§à¦• নাম"
+
+#: ../clients/tui/nmt-secret-agent.c:359
+msgid "DSL authentication"
+msgstr "DSL পà§à¦°à¦®à¦¾à¦£à§€à¦•à¦°à¦£"
+
+#: ../clients/tui/nmt-secret-agent.c:367
+msgid "PIN code required"
+msgstr "PIN কোড পà§à¦°à¦¯à¦¼à§‹à¦œà¦¨à§€à¦¯à¦¼"
+
+#: ../clients/tui/nmt-secret-agent.c:368
+msgid "PIN code is needed for the mobile broadband device"
+msgstr "PIN কোড মোবাইল বà§à¦°à¦¡à¦¬à§à¦¯à¦¾à¦¨à§à¦¡ ডিভাইসের জনà§à¦¯ পà§à¦°à¦¯à¦¼à§‹à¦œà¦¨à§€à¦¯à¦¼"
+
+#: ../clients/tui/nmt-secret-agent.c:370
+msgid "PIN"
+msgstr "PIN"
+
+#: ../clients/tui/nmt-secret-agent.c:376 ../clients/tui/nmt-secret-agent.c:389
+#: ../clients/tui/nmt-secret-agent.c:405
+msgid "Mobile broadband network password"
+msgstr "মোবাইল বà§à¦°à¦¡à¦¬à§à¦¯à¦¾à¦¨à§à¦¡ নেটওয়ারà§à¦• পাসওয়ারà§à¦¡"
+
+#: ../clients/tui/nmt-secret-agent.c:377 ../clients/tui/nmt-secret-agent.c:390
+#: ../clients/tui/nmt-secret-agent.c:406
+#, c-format
+msgid "A password is required to connect to '%s'."
+msgstr "'%s' সংযোগ করতে à¦à¦•à¦Ÿà¦¿ পাসওয়ারà§à¦¡ পà§à¦°à¦¯à¦¼à§‹à¦œà¦¨à§€à¦¯à¦¼à¥¤"
+
+#: ../clients/tui/nmt-slave-list.c:137
+msgid "Select the type of slave connection you wish to add."
+msgstr "অাপনি যে ধরনের সà§à¦²à§‡à¦­ সংযোগ যোগ করতে চান তা নিরà§à¦¬à¦¾à¦šà¦¨ করà§à¦¨à¥¤"
+
+#: ../clients/tui/nmt-widget-list.c:141
+msgid "Add..."
+msgstr "যোগ করà§à¦¨..."
+
+#: ../clients/tui/nmt-widget-list.c:204
+msgid "Remove"
+msgstr "সরান"
+
+#: ../clients/tui/nmtui-connect.c:90
+msgid "Activation failed"
+msgstr "সকà§à¦°à¦¿à¦¯à¦¼à¦•à¦°à¦£ বà§à¦¯à¦°à§à¦¥ হয়েছে"
+
+#: ../clients/tui/nmtui-connect.c:145
+msgid "Connecting..."
+msgstr "সংযোগ করা হচà§à¦›à§‡..."
+
+#: ../clients/tui/nmtui-connect.c:174 ../clients/tui/nmtui-connect.c:197
+#, c-format
+msgid "Could not activate connection: %s"
+msgstr "সংযোগ সকà§à¦°à¦¿à¦¯à¦¼ করা যায়নি: %s"
+
+#: ../clients/tui/nmtui-connect.c:257 ../clients/tui/nmtui-connect.c:306
+msgid "Activate"
+msgstr "সকà§à¦°à¦¿à¦¯à¦¼ করà§à¦¨"
+
+#: ../clients/tui/nmtui-connect.c:259
+msgid "Deactivate"
+msgstr "নিষà§à¦•à§à¦°à¦¿à¦¯à¦¼ করà§à¦¨"
+
+#: ../clients/tui/nmtui-connect.c:311 ../clients/tui/nmtui-edit.c:95
+#: ../clients/tui/nmtui.c:112
+msgid "Quit"
+msgstr "পà§à¦°à¦¸à§à¦¥à¦¾à¦¨ করà§à¦¨"
+
+#: ../clients/tui/nmtui-connect.c:334
+#, c-format
+msgid "No such connection '%s'"
+msgstr "à¦à¦‡ ধরনের কোনো সংযোগ নেই '%s'"
+
+#: ../clients/tui/nmtui-connect.c:336
+msgid "Connection is already active"
+msgstr "সংযোগ ইতিমধà§à¦¯à§‡à¦‡ সকà§à¦°à¦¿à¦¯à¦¼"
+
+#: ../clients/tui/nmtui-edit.c:200
+msgid "Create"
+msgstr "তৈরি করà§à¦¨"
+
+#: ../clients/tui/nmtui-edit.c:342
+msgid "Select the type of connection you wish to create."
+msgstr "অাপনি যে ধরনের সংযোগ তৈরি করতে চান তা নিরà§à¦¬à¦¾à¦šà¦¨ করà§à¦¨à¥¤"
+
+#: ../clients/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 পà§à¦²à¦¾à¦—ইন ইনসà§à¦Ÿà¦² করা নাও থাকতে "
+"পারে।"
+
+#: ../clients/tui/nmtui-edit.c:386 ../clients/tui/nmtui-edit.c:402
+msgid "New Connection"
+msgstr "নতà§à¦¨ সংযোগ"
+
+#: ../clients/tui/nmtui-edit.c:441
+#, c-format
+msgid "Unable to delete connection: %s"
+msgstr "সংযোগ মà§à¦›à§‡ দিতে অসমরà§à¦¥: %s"
+
+#: ../clients/tui/nmtui-edit.c:474
+#, c-format
+msgid "Are you sure you want to delete the connection '%s'?"
+msgstr "অাপনি কি সতà§à¦¯à¦¿à¦‡ সংযোগ '%s' মà§à¦›à§‡ ফেলতে চান?"
+
+#: ../clients/tui/nmtui-edit.c:488
+#, c-format
+msgid "Could not delete connection: %s"
+msgstr "সংযোগ মোছা যায়নি: %s"
+
+#: ../clients/tui/nmtui-hostname.c:47
+msgid "Set Hostname"
+msgstr "হোসà§à¦Ÿà¦¨à¦¾à¦® সেট করà§à¦¨"
+
+#: ../clients/tui/nmtui-hostname.c:55
+msgid "Hostname"
+msgstr "হোসà§à¦Ÿà¦¨à¦¾à¦®"
+
+#. Translators: this indicates the result. ie, "I have set the hostname to ..."
+#: ../clients/tui/nmtui-hostname.c:118
+#, c-format
+msgid "Set hostname to '%s'"
+msgstr "হোসà§à¦Ÿà¦¨à¦¾à¦® '%s' ঠসেট করà§à¦¨"
+
+#: ../clients/tui/nmtui-hostname.c:120
+#, c-format
+msgid "Unable to set hostname: %s"
+msgstr "হোসà§à¦Ÿà¦¨à¦¾à¦® সেট করতে অসমরà§à¦¥: %s"
+
+#: ../clients/tui/nmtui.c:57 ../clients/tui/nmtui.c:60
+msgid "connection"
+msgstr "সংযোগ"
+
+#: ../clients/tui/nmtui.c:58
+msgid "Edit a connection"
+msgstr "à¦à¦•à¦Ÿà¦¿ সংযোগ সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ করà§à¦¨"
+
+#: ../clients/tui/nmtui.c:61
+msgid "Activate a connection"
+msgstr "à¦à¦•à¦Ÿà¦¿ সংযোগ সকà§à¦°à¦¿à¦¯à¦¼ করà§à¦¨"
+
+#: ../clients/tui/nmtui.c:63
+msgid "new hostname"
+msgstr "নতà§à¦¨ হোসà§à¦Ÿà¦¨à¦¾à¦®"
+
+#: ../clients/tui/nmtui.c:64
+msgid "Set system hostname"
+msgstr "সিসà§à¦Ÿà§‡à¦® হোসà§à¦Ÿà¦¨à¦¾à¦® সেট করà§à¦¨"
+
+#: ../clients/tui/nmtui.c:87
+msgid "NetworkManager TUI"
+msgstr "NetworkManager TUI"
+
+#: ../clients/tui/nmtui.c:95
+msgid "Please select an option"
+msgstr "দয়া করে à¦à¦•à¦Ÿà¦¿ বিকলà§à¦ª নিরà§à¦¬à¦¾à¦šà¦¨ করà§à¦¨"
+
+#: ../clients/tui/nmtui.c:147
+msgid "Usage"
+msgstr "বà§à¦¯à¦¬à¦¹à¦¾à¦°"
+
+#: ../clients/tui/nmtui.c:228
+msgid "Could not parse arguments"
+msgstr "অারà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ পারà§à¦œ করা যায়নি"
+
+#: ../clients/tui/nmtui.c:238 ../clients/tui/nmtui.c:249
+#, c-format
+#| msgid "Could not activate connection: %s"
+msgid "Could not contact NetworkManager: %s.\n"
+msgstr "NetworkManager-à¦à¦° সাথে যোগাযোগ করা যায়নি: %s.\n"
+
+#: ../clients/tui/nmtui.c:243
+msgid "NetworkManager is not running."
+msgstr "NetworkManager চলছে।"
+
+#: ../libnm-core/crypto.c:135 ../libnm-util/crypto.c:133
#, c-format
msgid "PEM key file had no end tag '%s'."
msgstr "PEM কি ফাইলের কোনো সমাপà§à¦¤à¦¿à¦° টà§à¦¯à¦¾à¦— উপসà§à¦¥à¦¿à¦¤ নেই '%s'।"
-#: ../libnm-util/crypto.c:146
+#: ../libnm-core/crypto.c:148 ../libnm-util/crypto.c:146
#, c-format
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-core/crypto.c:165 ../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-core/crypto.c:173 ../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-core/crypto.c:183 ../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-core/crypto.c:194 ../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-core/crypto.c:201 ../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-core/crypto.c:216 ../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-core/crypto.c:235 ../libnm-util/crypto.c:233
#, c-format
msgid "Could not decode private key."
msgstr "বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত-কি ডিকোডর করতে বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../libnm-util/crypto.c:284
+#: ../libnm-core/crypto.c:288 ../libnm-util/crypto.c:285
msgid "Failed to find expected PKCS#8 start tag."
msgstr "পà§à¦°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤ PKCS#8 পà§à¦°à¦¾à¦°à¦®à§à¦­à§‡à¦° টà§à¦¯à¦¾à¦— পà§à¦°à¦¾à¦ªà§à¦¤ করতে বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../libnm-util/crypto.c:292
+#: ../libnm-core/crypto.c:296 ../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
+#: ../libnm-core/crypto.c:315 ../libnm-util/crypto.c:312
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-core/crypto.c:357 ../libnm-util/crypto.c:354
#, 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-core/crypto.c:371 ../libnm-util/crypto.c:368
#, 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-core/crypto.c:411 ../libnm-core/crypto_gnutls.c:151
+#: ../libnm-core/crypto_gnutls.c:269 ../libnm-core/crypto_nss.c:171
+#: ../libnm-core/crypto_nss.c:333 ../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-core/crypto.c:523 ../libnm-util/crypto.c:518
#, c-format
msgid "Unable to determine private key type."
msgstr "বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত-কি'র ধরন নিরà§à¦§à¦¾à¦°à¦£ করতে বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../libnm-util/crypto.c:597
+#: ../libnm-core/crypto.c:580 ../libnm-util/crypto.c:573
#, c-format
msgid "PEM certificate had no start tag '%s'."
msgstr "PEM সারà§à¦Ÿà¦¿à¦«à¦¿à¦•à§‡à¦Ÿà§‡à¦° মধà§à¦¯à§‡ পà§à¦°à¦¾à¦°à¦®à§à¦­à¦¿à¦• টà§à¦¯à¦¾à¦— '%s' উপসà§à¦¥à¦¿à¦¤ নেই।"
-#: ../libnm-util/crypto.c:606
+#: ../libnm-core/crypto.c:589 ../libnm-util/crypto.c:582
#, c-format
msgid "PEM certificate had no end tag '%s'."
msgstr "PEM সারà§à¦Ÿà¦¿à¦«à¦¿à¦•à§‡à¦Ÿà§‡à¦° মধà§à¦¯à§‡ সমাপà§à¦¤à¦¿à¦° টà§à¦¯à¦¾à¦— '%s' উপসà§à¦¥à¦¿à¦¤ নেই।"
-#: ../libnm-util/crypto.c:630
+#: ../libnm-core/crypto.c:607 ../libnm-util/crypto.c:600
#, c-format
msgid "Failed to decode certificate."
msgstr "সারà§à¦Ÿà¦¿à¦«à¦¿à¦•à§‡à¦Ÿ ডি-কোড করতে বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../libnm-util/crypto_gnutls.c:50
+#: ../libnm-core/crypto_gnutls.c:50 ../libnm-util/crypto_gnutls.c:50
msgid "Failed to initialize the crypto engine."
msgstr "কà§à¦°à¦¿à¦ªà§à¦Ÿà§‹ ইঞà§à¦œà¦¿à¦¨ আরমà§à¦­ করতে বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../libnm-util/crypto_gnutls.c:92
+#: ../libnm-core/crypto_gnutls.c:92 ../libnm-util/crypto_gnutls.c:92
#, c-format
msgid "Failed to initialize the MD5 engine: %s / %s."
msgstr "MD5 ইঞà§à¦œà¦¿à¦¨ আরমà§à¦­ করতে বà§à¦¯à¦°à§à¦¥: %s / %s।"
-#: ../libnm-util/crypto_gnutls.c:155
+#: ../libnm-core/crypto_gnutls.c:159 ../libnm-util/crypto_gnutls.c:158
#, c-format
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-core/crypto_gnutls.c:170 ../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-core/crypto_gnutls.c:179 ../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-core/crypto_gnutls.c:188 ../libnm-util/crypto_gnutls.c:187
#, c-format
msgid "Failed to set IV for decryption: %s / %s."
msgstr "ডিকà§à¦°à¦¿à¦ªà¦¶à¦¨à§‡à¦° উদà§à¦¦à§‡à¦¶à§à¦¯à§‡ IV নিরà§à¦§à¦¾à¦°à¦£ করতে বà§à¦¯à¦°à§à¦¥: %s / %s।"
-#: ../libnm-util/crypto_gnutls.c:199
+#: ../libnm-core/crypto_gnutls.c:197 ../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-core/crypto_gnutls.c:207 ../libnm-core/crypto_nss.c:261
+#: ../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-core/crypto_gnutls.c:218 ../libnm-core/crypto_nss.c:272
+#: ../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-core/crypto_gnutls.c:291 ../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-core/crypto_gnutls.c:300 ../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-core/crypto_gnutls.c:310 ../libnm-util/crypto_gnutls.c:308
#, c-format
msgid "Failed to set IV for encryption: %s / %s."
msgstr "à¦à¦¨à¦•à§à¦°à¦¿à¦ªà¦¶à¦¨à§‡à¦° উদà§à¦¦à§‡à¦¶à§à¦¯à§‡ IV নিরà§à¦§à¦¾à¦°à¦£ করতে বà§à¦¯à¦°à§à¦¥: %s / %s।"
-#: ../libnm-util/crypto_gnutls.c:321
+#: ../libnm-core/crypto_gnutls.c:319 ../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-core/crypto_gnutls.c:359 ../libnm-util/crypto_gnutls.c:357
#, c-format
msgid "Error initializing certificate data: %s"
msgstr "সারà§à¦Ÿà¦¿à¦«à¦¿à¦•à§‡à¦Ÿà§‡à¦° তথà§à¦¯ আরমà§à¦­ করতে সমসà§à¦¯à¦¾: %s"
-#: ../libnm-util/crypto_gnutls.c:383
+#: ../libnm-core/crypto_gnutls.c:381 ../libnm-util/crypto_gnutls.c:379
#, c-format
msgid "Couldn't decode certificate: %s"
msgstr "সারà§à¦Ÿà¦¿à¦«à¦¿à¦•à§‡à¦Ÿ ডি-কোড করতে বà§à¦¯à¦°à§à¦¥: %s"
-#: ../libnm-util/crypto_gnutls.c:407
+#: ../libnm-core/crypto_gnutls.c:406 ../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-core/crypto_gnutls.c:419 ../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-core/crypto_gnutls.c:431 ../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-core/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-core/crypto_gnutls.c:483 ../libnm-util/crypto_gnutls.c:479
#, c-format
msgid "Couldn't decode PKCS#8 file: %s"
msgstr "PKCS#8 ফাইল ডিকোড করতে বà§à¦¯à¦°à§à¦¥: %s"
-#: ../libnm-util/crypto_nss.c:56
+#: ../libnm-core/crypto_nss.c:56 ../libnm-util/crypto_nss.c:56
#, c-format
msgid "Failed to initialize the crypto engine: %d."
msgstr "কà§à¦°à¦¿à¦ªà§à¦Ÿà§‹ ইঞà§à¦œà¦¿à¦¨ আরমà§à¦­ করতে বà§à¦¯à¦°à§à¦¥: %d।"
-#: ../libnm-util/crypto_nss.c:107
+#: ../libnm-core/crypto_nss.c:107 ../libnm-util/crypto_nss.c:107
#, c-format
msgid "Failed to initialize the MD5 context: %d."
msgstr "MD5 কনটেকà§à¦¸à¦Ÿ আরমà§à¦­ করতে বà§à¦¯à¦°à§à¦¥: %d।"
-#: ../libnm-util/crypto_nss.c:175
+#: ../libnm-core/crypto_nss.c:179 ../libnm-util/crypto_nss.c:178
#, c-format
msgid "Invalid IV length (must be at least %d)."
msgstr "IV-র অবৈধ দৈরà§à¦˜à§à¦¯ (অনà§à¦¤à¦¤ %d হওয়া আবশà§à¦¯à¦•)।"
-#: ../libnm-util/crypto_nss.c:192
+#: ../libnm-core/crypto_nss.c:190 ../libnm-util/crypto_nss.c:189
#, c-format
msgid "Failed to initialize the decryption cipher slot."
msgstr "ডিকà§à¦°à¦¿à¦ªà¦¶à¦¨ সাইফার সà§à¦²à¦Ÿ আরমà§à¦­ করতে বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../libnm-util/crypto_nss.c:202
+#: ../libnm-core/crypto_nss.c:200 ../libnm-util/crypto_nss.c:199
#, c-format
msgid "Failed to set symmetric key for decryption."
msgstr "ডিকà§à¦°à¦¿à¦ªà¦¶à¦¨à§‡à¦° উদà§à¦¦à§‡à¦¶à§à¦¯à§‡ সিমেটà§à¦°à¦¿à¦•-কি নিরà§à¦§à¦¾à¦°à¦£ করতে বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../libnm-util/crypto_nss.c:212
+#: ../libnm-core/crypto_nss.c:210 ../libnm-util/crypto_nss.c:209
#, c-format
msgid "Failed to set IV for decryption."
msgstr "ডিকà§à¦°à¦¿à¦ªà¦¶à¦¨à§‡à¦° উদà§à¦¦à§‡à¦¶à§à¦¯à§‡ IV নিরà§à¦§à¦¾à¦°à¦£ করতে বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../libnm-util/crypto_nss.c:220
+#: ../libnm-core/crypto_nss.c:218 ../libnm-util/crypto_nss.c:217
#, c-format
msgid "Failed to initialize the decryption context."
msgstr "ডিকà§à¦°à¦¿à¦ªà¦¶à¦¨ কনটেকà§à¦¸à¦Ÿ আরমà§à¦­ করতে বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../libnm-util/crypto_nss.c:233
+#: ../libnm-core/crypto_nss.c:231 ../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-core/crypto_nss.c:239 ../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-core/crypto_nss.c:250 ../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-core/crypto_nss.c:355 ../libnm-util/crypto_nss.c:353
#, c-format
msgid "Failed to initialize the encryption cipher slot."
msgstr "à¦à¦¨à¦•à§à¦°à¦¿à¦ªà¦¶à¦¨ সাইফার সà§à¦²à¦Ÿ আরমà§à¦­ করতে বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../libnm-util/crypto_nss.c:368
+#: ../libnm-core/crypto_nss.c:363 ../libnm-util/crypto_nss.c:361
#, c-format
msgid "Failed to set symmetric key for encryption."
msgstr "à¦à¦¨à¦•à§à¦°à¦¿à¦ªà¦¶à¦¨à§‡à¦° উদà§à¦¦à§‡à¦¶à§à¦¯à§‡ সিমেটà§à¦°à¦¿à¦•-কি নিরà§à¦§à¦¾à¦°à¦£ করতে বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../libnm-util/crypto_nss.c:376
+#: ../libnm-core/crypto_nss.c:371 ../libnm-util/crypto_nss.c:369
#, c-format
msgid "Failed to set IV for encryption."
msgstr "à¦à¦¨à¦•à§à¦°à¦¿à¦ªà¦¶à¦¨à§‡à¦° উদà§à¦¦à§‡à¦¶à§à¦¯à§‡ IV নিরà§à¦§à¦¾à¦°à¦£ করতে বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../libnm-util/crypto_nss.c:384
+#: ../libnm-core/crypto_nss.c:379 ../libnm-util/crypto_nss.c:377
#, c-format
msgid "Failed to initialize the encryption context."
msgstr "à¦à¦¨à¦•à§à¦°à¦¿à¦ªà¦¶à¦¨ কনটেকà§à¦¸à¦Ÿ আরমà§à¦­ করতে বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../libnm-util/crypto_nss.c:392
+#: ../libnm-core/crypto_nss.c:387 ../libnm-util/crypto_nss.c:385
#, c-format
msgid "Failed to encrypt: %d."
msgstr "à¦à¦¨à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ করতে বà§à¦¯à¦°à§à¦¥: %d।"
-#: ../libnm-util/crypto_nss.c:400
+#: ../libnm-core/crypto_nss.c:395 ../libnm-util/crypto_nss.c:393
#, c-format
msgid "Unexpected amount of data after encrypting."
msgstr "à¦à¦¨à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ করার পরে অপà§à¦°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤ পরিমাণ তথà§à¦¯ উপলবà§à¦§ হয়েছে।"
-#: ../libnm-util/crypto_nss.c:443
+#: ../libnm-core/crypto_nss.c:435 ../libnm-util/crypto_nss.c:433
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "সারà§à¦Ÿà¦¿à¦«à¦¿à¦•à§‡à¦Ÿ ডিকোড করতে বà§à¦¯à¦°à§à¦¥: %d"
-#: ../libnm-util/crypto_nss.c:478
+#: ../libnm-core/crypto_nss.c:471 ../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-core/crypto_nss.c:499 ../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-core/crypto_nss.c:508 ../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-core/crypto_nss.c:517 ../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-core/crypto_nss.c:562 ../libnm-util/crypto_nss.c:558
msgid "Could not generate random data."
msgstr "রâ€à§à¦¯à¦¾à¦¨à§à¦¡ তথà§à¦¯ নিরà§à¦®à¦¾à¦£ করতে বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../libnm-util/nm-utils.c:2078
+#: ../libnm-core/nm-connection.c:892
+#| msgid "Unable to delete connection: %s"
+msgid "Unexpected failure to verify the connection"
+msgstr "সংযোগ যাচাই করতে অপà§à¦°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤ বà§à¦¯à¦°à§à¦¥à¦¤à¦¾"
+
+#: ../libnm-core/nm-connection.c:923
+#| msgid "Unable to delete connection: %s"
+msgid "Unexpected failure to normalize the connection"
+msgstr "সংযোগ সà§à¦¬à¦¾à¦­à¦¾à¦¬à¦¿à¦• করতে অপà§à¦°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤ বà§à¦¯à¦°à§à¦¥à¦¤à¦¾"
+
+#: ../libnm-core/nm-connection.c:1016
+msgid ""
+"Update secrets expects a full connection, instead only a setting is provided."
+msgstr ""
+"অাপডেট সিকà§à¦°à§‡à¦Ÿà§‡à¦° কà§à¦·à§‡à¦¤à§à¦°à§‡ সমà§à¦ªà§‚রà§à¦£ সংযোগ পà§à¦°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤, পরিবরà§à¦¤à§‡ শà§à¦§à§à¦®à¦¾à¦¤à§à¦° à¦à¦•à¦Ÿà¦¿ "
+"সেটিং পà§à¦°à¦¦à¦¾à¦¨ করা হয়েছে।"
+
+#: ../libnm-core/nm-setting-8021x.c:593 ../libnm-util/nm-setting-8021x.c:596
+msgid "CA certificate must be in X.509 format"
+msgstr "CA সারà§à¦Ÿà¦¿à¦«à¦¿à¦•à§‡à¦Ÿà§‡à¦° ফরà§à¦®à§à¦¯à¦¾à¦Ÿ অবশà§à¦¯à¦‡ X.509 হতে হবে"
+
+#: ../libnm-core/nm-setting-8021x.c:908 ../libnm-core/nm-setting-8021x.c:1172
+#: ../libnm-core/nm-setting-8021x.c:1492 ../libnm-util/nm-setting-8021x.c:914
+#: ../libnm-util/nm-setting-8021x.c:1177 ../libnm-util/nm-setting-8021x.c:1500
+#| msgid "Error initializing certificate data: %s"
+msgid "invalid certificate format"
+msgstr "অবৈধ সারà§à¦Ÿà¦¿à¦«à¦¿à¦•à§‡à¦Ÿ বিনà§à¦¯à¦¾à¦¸"
+
+#: ../libnm-core/nm-setting-8021x.c:1774 ../libnm-util/nm-setting-8021x.c:1769
+#| msgid "invalid gateway '%s'"
+msgid "invalid private key"
+msgstr "অবৈধ বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কী"
+
+#: ../libnm-core/nm-setting-8021x.c:2084 ../libnm-util/nm-setting-8021x.c:2080
+#| msgid "Failed to decrypt the private key."
+msgid "invalid phase2 private key"
+msgstr "অবৈধ phase2 বà§à¦¯à¦•à§à¦¤à¦¿à¦—ত কী"
+
+#: ../libnm-core/nm-setting-8021x.c:2286 ../libnm-core/nm-setting-8021x.c:2303
+#: ../libnm-core/nm-setting-8021x.c:2333 ../libnm-core/nm-setting-8021x.c:2350
+#: ../libnm-core/nm-setting-8021x.c:2391 ../libnm-core/nm-setting-8021x.c:2403
+#: ../libnm-core/nm-setting-8021x.c:2421 ../libnm-core/nm-setting-8021x.c:2433
+#: ../libnm-core/nm-setting-8021x.c:2457 ../libnm-core/nm-setting-8021x.c:2639
+#: ../libnm-core/nm-setting-adsl.c:204
+#: ../libnm-core/nm-setting-bluetooth.c:136
+#: ../libnm-core/nm-setting-bluetooth.c:154
+#: ../libnm-core/nm-setting-cdma.c:157
+#: ../libnm-core/nm-setting-connection.c:761
+#: ../libnm-core/nm-setting-connection.c:777
+#: ../libnm-core/nm-setting-connection.c:807
+#: ../libnm-core/nm-setting-ip4-config.c:897
+#: ../libnm-core/nm-setting-ip6-config.c:815
+#: ../libnm-core/nm-setting-ip6-config.c:879
+#: ../libnm-core/nm-setting-olpc-mesh.c:116
+#: ../libnm-core/nm-setting-pppoe.c:158 ../libnm-core/nm-setting-vpn.c:396
+#: ../libnm-core/nm-setting-wimax.c:133
+#: ../libnm-core/nm-setting-wireless-security.c:878
+#: ../libnm-core/nm-setting-wireless.c:710 ../libnm-core/nm-setting.c:1731
+#: ../libnm-util/nm-setting.c:1279 ../libnm-util/nm-setting.c:1298
+#: ../libnm-util/nm-setting.c:1316 ../libnm-util/nm-setting-8021x.c:2282
+#: ../libnm-util/nm-setting-8021x.c:2299 ../libnm-util/nm-setting-8021x.c:2340
+#: ../libnm-util/nm-setting-8021x.c:2357 ../libnm-util/nm-setting-8021x.c:2409
+#: ../libnm-util/nm-setting-8021x.c:2421 ../libnm-util/nm-setting-8021x.c:2439
+#: ../libnm-util/nm-setting-8021x.c:2451 ../libnm-util/nm-setting-8021x.c:2475
+#: ../libnm-util/nm-setting-8021x.c:2653 ../libnm-util/nm-setting-adsl.c:208
+#: ../libnm-util/nm-setting-bluetooth.c:140
+#: ../libnm-util/nm-setting-bluetooth.c:158
+#: ../libnm-util/nm-setting-cdma.c:161
+#: ../libnm-util/nm-setting-connection.c:767
+#: ../libnm-util/nm-setting-connection.c:783
+#: ../libnm-util/nm-setting-connection.c:844
+#: ../libnm-util/nm-setting-ip4-config.c:828
+#: ../libnm-util/nm-setting-ip6-config.c:809
+#: ../libnm-util/nm-setting-ip6-config.c:873
+#: ../libnm-util/nm-setting-olpc-mesh.c:122
+#: ../libnm-util/nm-setting-pppoe.c:162 ../libnm-util/nm-setting-vpn.c:402
+#: ../libnm-util/nm-setting-wimax.c:137
+#: ../libnm-util/nm-setting-wireless-security.c:891
+#: ../libnm-util/nm-setting-wireless.c:750
+msgid "property is missing"
+msgstr "বিশিষà§à¦Ÿà¦¤à¦¾ অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤"
+
+#: ../libnm-core/nm-setting-8021x.c:2293 ../libnm-core/nm-setting-8021x.c:2310
+#: ../libnm-core/nm-setting-8021x.c:2340 ../libnm-core/nm-setting-8021x.c:2357
+#: ../libnm-core/nm-setting-8021x.c:2397 ../libnm-core/nm-setting-8021x.c:2409
+#: ../libnm-core/nm-setting-8021x.c:2427 ../libnm-core/nm-setting-8021x.c:2439
+#: ../libnm-core/nm-setting-8021x.c:2464 ../libnm-core/nm-setting-adsl.c:211
+#: ../libnm-core/nm-setting-adsl.c:220 ../libnm-core/nm-setting-cdma.c:173
+#: ../libnm-core/nm-setting-cdma.c:182
+#: ../libnm-core/nm-setting-connection.c:768
+#: ../libnm-core/nm-setting-connection.c:818
+#: ../libnm-core/nm-setting-gsm.c:241 ../libnm-core/nm-setting-gsm.c:298
+#: ../libnm-core/nm-setting-gsm.c:307
+#: ../libnm-core/nm-setting-ip4-config.c:962
+#: ../libnm-core/nm-setting-ip4-config.c:971
+#: ../libnm-core/nm-setting-pppoe.c:165 ../libnm-core/nm-setting-pppoe.c:174
+#: ../libnm-core/nm-setting-vpn.c:405 ../libnm-core/nm-setting-vpn.c:415
+#: ../libnm-core/nm-setting-wimax.c:142
+#: ../libnm-core/nm-setting-wireless-security.c:908
+#: ../libnm-core/nm-setting-wireless-security.c:916
+#: ../libnm-core/nm-setting-wireless-security.c:940
+#: ../libnm-util/nm-setting-8021x.c:2289 ../libnm-util/nm-setting-8021x.c:2306
+#: ../libnm-util/nm-setting-8021x.c:2347 ../libnm-util/nm-setting-8021x.c:2364
+#: ../libnm-util/nm-setting-8021x.c:2415 ../libnm-util/nm-setting-8021x.c:2427
+#: ../libnm-util/nm-setting-8021x.c:2445 ../libnm-util/nm-setting-8021x.c:2457
+#: ../libnm-util/nm-setting-8021x.c:2482 ../libnm-util/nm-setting-adsl.c:215
+#: ../libnm-util/nm-setting-adsl.c:224 ../libnm-util/nm-setting-cdma.c:177
+#: ../libnm-util/nm-setting-cdma.c:186
+#: ../libnm-util/nm-setting-connection.c:774
+#: ../libnm-util/nm-setting-connection.c:851
+#: ../libnm-util/nm-setting-gsm.c:281 ../libnm-util/nm-setting-gsm.c:338
+#: ../libnm-util/nm-setting-gsm.c:347
+#: ../libnm-util/nm-setting-ip4-config.c:893
+#: ../libnm-util/nm-setting-ip4-config.c:902
+#: ../libnm-util/nm-setting-pppoe.c:169 ../libnm-util/nm-setting-pppoe.c:178
+#: ../libnm-util/nm-setting-vpn.c:411 ../libnm-util/nm-setting-vpn.c:421
+#: ../libnm-util/nm-setting-wimax.c:146
+#: ../libnm-util/nm-setting-wireless-security.c:921
+#: ../libnm-util/nm-setting-wireless-security.c:929
+#: ../libnm-util/nm-setting-wireless-security.c:953
+msgid "property is empty"
+msgstr "বিশিষà§à¦Ÿà¦¤à¦¾ খালি"
+
+#: ../libnm-core/nm-setting-8021x.c:2322 ../libnm-core/nm-setting-8021x.c:2369
+#: ../libnm-util/nm-setting-8021x.c:2317 ../libnm-util/nm-setting-8021x.c:2329
+#: ../libnm-util/nm-setting-8021x.c:2375 ../libnm-util/nm-setting-8021x.c:2387
+#, c-format
+msgid "has to match '%s' property for PKCS#12"
+msgstr "'%s' বিশিষà§à¦Ÿà¦¤à¦¾, PKCS#12 à¦à¦° জনà§à¦¯ মিলতে হবে"
+
+#: ../libnm-core/nm-setting-8021x.c:2614 ../libnm-core/nm-setting-8021x.c:2648
+#: ../libnm-core/nm-setting-bluetooth.c:145
+#: ../libnm-core/nm-setting-infiniband.c:208
+#: ../libnm-core/nm-setting-infiniband.c:223
+#: ../libnm-core/nm-setting-ip4-config.c:953
+#: ../libnm-core/nm-setting-ip6-config.c:870
+#: ../libnm-core/nm-setting-olpc-mesh.c:145
+#: ../libnm-core/nm-setting-wimax.c:151 ../libnm-core/nm-setting-wired.c:636
+#: ../libnm-core/nm-setting-wired.c:646
+#: ../libnm-core/nm-setting-wireless-security.c:959
+#: ../libnm-core/nm-setting-wireless-security.c:968
+#: ../libnm-core/nm-setting-wireless-security.c:976
+#: ../libnm-core/nm-setting-wireless-security.c:984
+#: ../libnm-core/nm-setting-wireless-security.c:992
+#: ../libnm-core/nm-setting-wireless-security.c:1001
+#: ../libnm-core/nm-setting-wireless-security.c:1010
+#: ../libnm-core/nm-setting-wireless-security.c:1019
+#: ../libnm-core/nm-setting-wireless-security.c:1055
+#: ../libnm-core/nm-setting-wireless-security.c:1065
+#: ../libnm-core/nm-setting-wireless.c:771
+#: ../libnm-core/nm-setting-wireless.c:780
+#: ../libnm-core/nm-setting-wireless.c:789 ../libnm-util/nm-setting.c:1289
+#: ../libnm-util/nm-setting.c:1307 ../libnm-util/nm-setting.c:1326
+#: ../libnm-util/nm-setting-8021x.c:2628 ../libnm-util/nm-setting-8021x.c:2662
+#: ../libnm-util/nm-setting-bluetooth.c:149
+#: ../libnm-util/nm-setting-infiniband.c:204
+#: ../libnm-util/nm-setting-infiniband.c:220
+#: ../libnm-util/nm-setting-ip4-config.c:884
+#: ../libnm-util/nm-setting-ip6-config.c:864
+#: ../libnm-util/nm-setting-olpc-mesh.c:150
+#: ../libnm-util/nm-setting-wimax.c:155 ../libnm-util/nm-setting-wired.c:660
+#: ../libnm-util/nm-setting-wired.c:669
+#: ../libnm-util/nm-setting-wireless-security.c:972
+#: ../libnm-util/nm-setting-wireless-security.c:981
+#: ../libnm-util/nm-setting-wireless-security.c:989
+#: ../libnm-util/nm-setting-wireless-security.c:997
+#: ../libnm-util/nm-setting-wireless-security.c:1005
+#: ../libnm-util/nm-setting-wireless-security.c:1014
+#: ../libnm-util/nm-setting-wireless-security.c:1023
+#: ../libnm-util/nm-setting-wireless-security.c:1032
+#: ../libnm-util/nm-setting-wireless-security.c:1068
+#: ../libnm-util/nm-setting-wireless-security.c:1078
+#: ../libnm-util/nm-setting-wireless.c:810
+#: ../libnm-util/nm-setting-wireless.c:819
+#: ../libnm-util/nm-setting-wireless.c:828
+msgid "property is invalid"
+msgstr "বিশিষà§à¦Ÿà¦¤à¦¾ অবৈধ"
+
+#: ../libnm-core/nm-setting-8021x.c:2673 ../libnm-core/nm-setting-8021x.c:2683
+#: ../libnm-core/nm-setting-8021x.c:2693 ../libnm-core/nm-setting-8021x.c:2703
+#: ../libnm-core/nm-setting-8021x.c:2713 ../libnm-core/nm-setting-adsl.c:232
+#: ../libnm-core/nm-setting-adsl.c:244
+#: ../libnm-core/nm-setting-bluetooth.c:162
+#: ../libnm-core/nm-setting-wireless-security.c:887
+#: ../libnm-util/nm-setting-8021x.c:2687 ../libnm-util/nm-setting-8021x.c:2697
+#: ../libnm-util/nm-setting-8021x.c:2707 ../libnm-util/nm-setting-8021x.c:2717
+#: ../libnm-util/nm-setting-8021x.c:2727 ../libnm-util/nm-setting-adsl.c:236
+#: ../libnm-util/nm-setting-adsl.c:248
+#: ../libnm-util/nm-setting-bluetooth.c:166
+#: ../libnm-util/nm-setting-wireless-security.c:900
+#, c-format
+msgid "'%s' is not a valid value for the property"
+msgstr "'%s' বিশিষà§à¦Ÿà¦¤à¦¾à¦° কà§à¦·à§‡à¦¤à§à¦°à§‡ à¦à¦•à¦Ÿà¦¿ বৈধ মান নয়"
+
+#: ../libnm-core/nm-setting-bluetooth.c:180
+#: ../libnm-util/nm-setting-bluetooth.c:184
+#, c-format
+msgid "requires '%s' or '%s' setting"
+msgstr "'%s' বা '%s' সেটিং à¦à¦° পà§à¦°à¦¯à¦¼à§‹à¦œà¦¨"
+
+#: ../libnm-core/nm-setting-bond.c:473 ../libnm-util/nm-setting-bond.c:498
+#, c-format
+msgid "invalid option '%s' or its value '%s'"
+msgstr "বিকলà§à¦ª '%s' বা à¦à¦° মান '%s' অবৈধ"
+
+#: ../libnm-core/nm-setting-bond.c:492 ../libnm-util/nm-setting-bond.c:517
+#, c-format
+msgid "only one of '%s' and '%s' can be set"
+msgstr "'%s' à¦à¦¬à¦‚ '%s' à¦à¦° মধà§à¦¯à§‡ à¦à¦•à¦Ÿà¦¿ সেট করা যেতে পারে"
+
+#: ../libnm-core/nm-setting-bond.c:503 ../libnm-util/nm-setting-bond.c:528
+#, c-format
+msgid "mandatory option '%s' is missing"
+msgstr "বাধà§à¦¯à¦¤à¦¾à¦®à§‚লক বিকলà§à¦ª '%s' অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤"
+
+#: ../libnm-core/nm-setting-bond.c:512 ../libnm-util/nm-setting-bond.c:537
+#, c-format
+msgid "'%s' is not a valid value for '%s'"
+msgstr "'%s' '%s' à¦à¦° কà§à¦·à§‡à¦¤à§à¦°à§‡ à¦à¦•à¦Ÿà¦¿ বৈধ মান নয়"
+
+#: ../libnm-core/nm-setting-bond.c:525 ../libnm-util/nm-setting-bond.c:550
+#, c-format
+msgid "'%s=%s' is incompatible with '%s > 0'"
+msgstr "'%s=%s' '%s > 0' à¦à¦° সংগে সà§à¦¸à¦‚গত নয়"
+
+#: ../libnm-core/nm-setting-bond.c:538 ../libnm-util/nm-setting-bond.c:563
+#, c-format
+msgid "'%s' is not a valid interface name for '%s' option"
+msgstr "'%s' '%s' বিকলà§à¦ªà§‡à¦° জনà§à¦¯ à¦à¦•à¦Ÿà¦¿ বৈধ ইনà§à¦Ÿà¦¾à¦°à¦«à§‡à¦¸ নাম নয়"
+
+#: ../libnm-core/nm-setting-bond.c:548 ../libnm-util/nm-setting-bond.c:573
+#, c-format
+msgid "'%s' option is only valid for '%s=%s'"
+msgstr "'%s' বিকলà§à¦ª শà§à¦§à§à¦®à¦¾à¦¤à§à¦° '%s=%s' à¦à¦° জনà§à¦¯ বৈধ"
+
+#: ../libnm-core/nm-setting-bond.c:561 ../libnm-util/nm-setting-bond.c:586
+#, c-format
+msgid "'%s=%s' is not a valid configuration for '%s'"
+msgstr "'%s=%s' '%s' à¦à¦° কà§à¦·à§‡à¦¤à§à¦°à§‡ à¦à¦•à¦Ÿà¦¿ বৈধ কনফিগারেশন নয়"
+
+#: ../libnm-core/nm-setting-bond.c:574 ../libnm-core/nm-setting-bond.c:583
+#: ../libnm-core/nm-setting-bond.c:603 ../libnm-core/nm-setting-bond.c:639
+#: ../libnm-util/nm-setting-bond.c:599 ../libnm-util/nm-setting-bond.c:608
+#: ../libnm-util/nm-setting-bond.c:628 ../libnm-util/nm-setting-bond.c:664
+#, c-format
+msgid "'%s' option requires '%s' option to be set"
+msgstr "'%s' বিকলà§à¦ªà§‡à¦° কà§à¦·à§‡à¦¤à§à¦°à§‡ '%s' বিকলà§à¦ª সেট করার পà§à¦°à¦¯à¦¼à§‹à¦œà¦¨"
+
+#: ../libnm-core/nm-setting-bond.c:614 ../libnm-util/nm-setting-bond.c:639
#, c-format
-msgid "Not enough memory to make encryption key."
-msgstr "à¦à¦¨à¦•à§à¦°à¦¿à¦ªà¦¶à¦¨-কি নিরà§à¦®à¦¾à¦£à§‡à¦° জনà§à¦¯ পরà§à¦¯à¦¾à¦ªà§à¦¤ মেমরি অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤à¥¤"
+msgid "'%s' option is empty"
+msgstr "'%s' বিকলà§à¦ª খালি"
-#: ../libnm-util/nm-utils.c:2188
-msgid "Could not allocate memory for PEM file creation."
-msgstr "PEM ফাইল নিরà§à¦®à¦¾à¦£à§‡à¦° জনà§à¦¯ মেমরি বরাদà§à¦¦ করতে বà§à¦¯à¦°à§à¦¥à¥¤"
+#: ../libnm-core/nm-setting-bond.c:626 ../libnm-util/nm-setting-bond.c:651
+#, c-format
+msgid "'%s' is not a valid IPv4 address for '%s' option"
+msgstr "'%s' '%s' বিকলà§à¦ªà§‡à¦° কà§à¦·à§‡à¦¤à§à¦°à§‡ à¦à¦•à¦Ÿà¦¿ বৈধ IPv4 ঠিকানা নয়"
-#: ../libnm-util/nm-utils.c:2200
+#: ../libnm-core/nm-setting-bridge-port.c:138
+#: ../libnm-core/nm-setting-bridge-port.c:150
+#: ../libnm-util/nm-setting-bridge-port.c:153
+#: ../libnm-util/nm-setting-bridge-port.c:165
#, c-format
-msgid "Could not allocate memory for writing IV to PEM file."
-msgstr "PEM ফাইলের মধà§à¦¯à§‡ IV লেখার জনà§à¦¯ মেমরি বরাদà§à¦¦ করতে বà§à¦¯à¦°à§à¦¥à¥¤"
+msgid "'%d' is not a valid value for the property (should be <= %d)"
+msgstr "'%d' বিশিষà§à¦Ÿà¦¤à¦¾à¦° কà§à¦·à§‡à¦¤à§à¦°à§‡ à¦à¦•à¦Ÿà¦¿ বৈধ মান নয় (হতে হবে <= %d)"
-#: ../libnm-util/nm-utils.c:2212
+#: ../libnm-core/nm-setting-bridge-port.c:175
+#: ../libnm-core/nm-setting-team-port.c:118
#, c-format
-msgid "Could not allocate memory for writing encrypted key to PEM file."
-msgstr "PEM ফাইলের মধà§à¦¯à§‡ à¦à¦¨à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ করা কি লেখার জনà§à¦¯ মেমরি বরাদà§à¦¦ করা যায়নি।"
+msgid ""
+"A connection with a '%s' setting must have the slave-type set to '%s'. "
+"Instead it is '%s'"
+msgstr ""
+"'%s' সেটিং বিশিষà§à¦Ÿ à¦à¦•à¦Ÿà¦¿ সংযোগে slave-type অবশà§à¦¯à¦‡ '%s' ঠসেট থাকতে হবে। "
+"পরিবরà§à¦¤à§‡ à¦à¦Ÿà¦¿ হল '%s'"
+
+#: ../libnm-core/nm-setting-bridge.c:222 ../libnm-util/nm-setting-bridge.c:268
+#, c-format
+msgid "value '%d' is out of range <%d-%d>"
+msgstr "মান '%d' রেঞà§à¦œà§‡à¦° বাইরে <%d-%d>"
+
+#: ../libnm-core/nm-setting-bridge.c:239 ../libnm-core/nm-setting-wired.c:611
+#: ../libnm-core/nm-setting-wired.c:670 ../libnm-util/nm-setting-bridge.c:285
+#: ../libnm-util/nm-setting-wired.c:635 ../libnm-util/nm-setting-wired.c:693
+msgid "is not a valid MAC address"
+msgstr "à¦à¦•à¦Ÿà¦¿ বৈধ MAC ঠিকানা নয়"
+
+#: ../libnm-core/nm-setting-cdma.c:164 ../libnm-util/nm-setting-cdma.c:168
+msgid "property is empty'"
+msgstr "বিশিষà§à¦Ÿà¦¤à¦¾ খালি'"
-#: ../libnm-util/nm-utils.c:2231
+#: ../libnm-core/nm-setting-connection.c:740
+#: ../libnm-util/nm-setting-connection.c:861
#, c-format
-msgid "Could not allocate memory for PEM file data."
-msgstr "PEM ফাইলের তথà§à¦¯à§‡ সংরকà§à¦·à¦£à§‡à¦° জনà§à¦¯ মেমরি বরাদà§à¦¦ করতে বà§à¦¯à¦°à§à¦¥à¥¤"
+msgid "requires presence of '%s' setting in the connection"
+msgstr "সংযোগে '%s' সেটিং à¦à¦° উপসà§à¦¥à¦¿à¦¤à¦¿ পà§à¦°à¦¯à¦¼à§‹à¦œà¦¨"
+
+#: ../libnm-core/nm-setting-connection.c:828
+#, c-format
+#| msgid "index '%s' is not valid"
+msgid "connection type '%s' is not valid"
+msgstr "সংযোগ ধরন '%s' বৈধ নয়"
+
+#: ../libnm-core/nm-setting-connection.c:838
+#, c-format
+#| msgid "Error: 'bt-type': '%s' is not a valid bluetooth type.\n"
+msgid "connection type '%s' is not a valid base type"
+msgstr "সংযোগ ধরন '%s' à¦à¦•à¦Ÿà¦¿ বৈধ বেস ধরন নয়"
+
+#: ../libnm-core/nm-setting-connection.c:873
+#: ../libnm-util/nm-setting-connection.c:876
+#, c-format
+#| msgid "Unknown log level '%s'"
+msgid "Unknown slave type '%s'"
+msgstr "অজানা সà§à¦²à§‡à¦­ ধরন '%s'"
+
+#: ../libnm-core/nm-setting-connection.c:883
+#: ../libnm-util/nm-setting-connection.c:886
+#| msgid "Shared connection service failed"
+msgid "Slave connections need a valid '"
+msgstr "সà§à¦²à§‡à¦­ সংযোগগà§à¦²à¦¿à¦° à¦à¦•à¦Ÿà¦¿ বৈধ ' à¦à¦° পà§à¦°à§Ÿà§‹à¦œà¦¨"
+
+#: ../libnm-core/nm-setting-connection.c:904
+#: ../libnm-util/nm-setting-connection.c:895
+#| msgid "not saved, "
+msgid "Cannot set '"
+msgstr "' সেট করা যাবে না"
+
+#: ../libnm-core/nm-setting-connection.c:917
+#, c-format
+msgid "property type should be set to '%s'"
+msgstr "বিশিষà§à¦Ÿà¦¤à¦¾ ধরন '%s' ঠসেট করা উচিত"
+
+#: ../libnm-core/nm-setting-connection.c:932
+#, c-format
+#| msgid "requires presence of '%s' setting in the connection"
+msgid "slave-type '%s' requires a '%s' setting in the connection"
+msgstr "সà§à¦²à§‡à¦­-ধরন '%s' -à¦à¦° সংযোগে à¦à¦•à¦Ÿà¦¿ '%s' সেটিং -à¦à¦° পà§à¦°à¦¯à¦¼à§‹à¦œà¦¨"
+
+#: ../libnm-core/nm-setting-connection.c:942
+#, c-format
+#| msgid "Select the type of slave connection you wish to add."
+msgid "Detect a slave connection with '"
+msgstr " ' দিয়ে à¦à¦•à¦Ÿà¦¿ সà§à¦²à§‡à¦­ সংযোগ শনাকà§à¦¤ করà§à¦¨à¥¤"
+
+#: ../libnm-core/nm-setting-dcb.c:538 ../libnm-util/nm-setting-dcb.c:593
+msgid "flags invalid"
+msgstr "অবৈধ হিসাবে ফà§à¦²à§à¦¯à¦¾à¦— করে"
+
+#: ../libnm-core/nm-setting-dcb.c:547 ../libnm-util/nm-setting-dcb.c:602
+msgid "flags invalid - disabled"
+msgstr "অবৈধ - নিষà§à¦•à§à¦°à¦¿à¦¯à¦¼ হিসাবে ফà§à¦²à§à¦¯à¦¾à¦— করে"
+
+#: ../libnm-core/nm-setting-dcb.c:573 ../libnm-core/nm-setting-dcb.c:622
+#: ../libnm-util/nm-setting-dcb.c:628 ../libnm-util/nm-setting-dcb.c:677
+msgid "property invalid (not enabled)"
+msgstr "বিশিষà§à¦Ÿà¦¤à¦¾ অবৈধ (সকà§à¦°à¦¿à¦¯à¦¼ নয়)"
+
+#: ../libnm-core/nm-setting-dcb.c:582 ../libnm-util/nm-setting-dcb.c:637
+msgid "element invalid"
+msgstr "উপাদান অবৈধ"
+
+#: ../libnm-core/nm-setting-dcb.c:597 ../libnm-util/nm-setting-dcb.c:652
+msgid "sum not 100%"
+msgstr "যোগফল 100% নয়"
+
+#: ../libnm-core/nm-setting-dcb.c:631 ../libnm-core/nm-setting-dcb.c:663
+#: ../libnm-util/nm-setting-dcb.c:686 ../libnm-util/nm-setting-dcb.c:718
+msgid "property invalid"
+msgstr "বিশিষà§à¦Ÿà¦¤à¦¾ অবৈধ"
+
+#: ../libnm-core/nm-setting-dcb.c:653 ../libnm-util/nm-setting-dcb.c:708
+msgid "property missing"
+msgstr "বিশিষà§à¦Ÿà¦¤à¦¾ অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤"
+
+#: ../libnm-core/nm-setting-gsm.c:254 ../libnm-util/nm-setting-gsm.c:294
+#, c-format
+msgid "property value '%s' is empty or too long (>64)"
+msgstr "বিশিষà§à¦Ÿà¦¤à¦¾ মান '%s' হয় খালি বা অতà§à¦¯à¦¨à§à¦¤ বড় (>64)"
+
+#: ../libnm-core/nm-setting-gsm.c:286 ../libnm-util/nm-setting-gsm.c:326
+#, c-format
+msgid "'%s' contains invalid char(s) (use [A-Za-z._-])"
+msgstr "'%s' অবৈধ অকà§à¦·à¦° বিশিষà§à¦Ÿ (বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨ [A-Za-z._-])"
+
+#: ../libnm-core/nm-setting-gsm.c:321 ../libnm-util/nm-setting-gsm.c:361
+#, c-format
+msgid "'%s' length is invalid (should be 5 or 6 digits)"
+msgstr "'%s' দৈরà§à¦˜à§à¦¯ অবৈধ (5 বা 6 সংখà§à¦¯à¦¾à¦° হওয়া উচিত)"
+
+#: ../libnm-core/nm-setting-infiniband.c:233
+#: ../libnm-util/nm-setting-infiniband.c:230
+msgid "not a valid interface name"
+msgstr "à¦à¦•à¦Ÿà¦¿ বৈধ ইনà§à¦Ÿà¦¾à¦°à¦«à§‡à¦¸ নাম নয়"
+
+#: ../libnm-core/nm-setting-infiniband.c:241
+#: ../libnm-util/nm-setting-infiniband.c:238
+msgid "Must specify a P_Key if specifying parent"
+msgstr "পেরেনà§à¦Ÿ নিরà§à¦¦à¦¿à¦·à§à¦Ÿà¦•à¦°à¦£à§‡à¦° কà§à¦·à§‡à¦¤à§à¦°à§‡ অবশà§à¦¯à¦‡ à¦à¦•à¦Ÿà¦¿ P_Key নিরà§à¦¦à¦¿à¦·à§à¦Ÿ করতে হবে"
+
+#: ../libnm-core/nm-setting-infiniband.c:251
+#: ../libnm-util/nm-setting-infiniband.c:248
+msgid "InfiniBand P_Key connection did not specify parent interface name"
+msgstr "InfiniBand P_Key সংযোগ পেরেনà§à¦Ÿ ইনà§à¦Ÿà¦¾à¦°à¦«à§‡à¦¸ নাম নিরà§à¦¦à¦¿à¦·à§à¦Ÿ করেনি"
+
+#: ../libnm-core/nm-setting-infiniband.c:287
+#: ../libnm-util/nm-setting-infiniband.c:284
+#, c-format
+msgid ""
+"interface name of software infiniband device must be '%s' or unset (instead "
+"it is '%s')"
+msgstr ""
+"সফà§à¦Ÿà¦“য়à§à¦¯à¦¾à¦° infiniband ডিভাইসের ইনà§à¦Ÿà¦¾à¦°à¦«à§‡à¦¸ নাম অবশà§à¦¯à¦‡ '%s' হতে হবে বা অান-সেট "
+"থাকতে হবে (পরিবরà§à¦¤à§‡ à¦à¦Ÿà¦¿ হল '%s')"
+
+#: ../libnm-core/nm-setting-infiniband.c:302
+#, c-format
+msgid "mtu for transport mode '%s' can be at most %d but it is %d"
+msgstr "mtu '%s' পরিবহন মোডের জনà§à¦¯ সরà§à¦¬à¦¾à¦§à¦¿à¦• %d হতে পারে কিনà§à¦¤à§ à¦à¦Ÿà¦¿ হল %d"
+
+#: ../libnm-core/nm-setting-ip4-config.c:907
+#: ../libnm-core/nm-setting-ip6-config.c:825
+#: ../libnm-util/nm-setting-ip4-config.c:838
+#: ../libnm-util/nm-setting-ip6-config.c:819
+#, c-format
+#| msgid "this property is not allowed for '%s=%s'"
+msgid "this property cannot be empty for '%s=%s'"
+msgstr "à¦à¦‡ বিশিষà§à¦Ÿà¦¤à¦¾ '%s=%s' à¦à¦° কà§à¦·à§‡à¦¤à§à¦°à§‡ খালি থাকতে পারে না"
+
+#: ../libnm-core/nm-setting-ip4-config.c:919
+#: ../libnm-core/nm-setting-ip4-config.c:929
+#: ../libnm-core/nm-setting-ip4-config.c:941
+#: ../libnm-core/nm-setting-ip6-config.c:838
+#: ../libnm-core/nm-setting-ip6-config.c:848
+#: ../libnm-core/nm-setting-ip6-config.c:858
+#: ../libnm-util/nm-setting-ip4-config.c:850
+#: ../libnm-util/nm-setting-ip4-config.c:860
+#: ../libnm-util/nm-setting-ip4-config.c:872
+#: ../libnm-util/nm-setting-ip6-config.c:832
+#: ../libnm-util/nm-setting-ip6-config.c:842
+#: ../libnm-util/nm-setting-ip6-config.c:852
+#, c-format
+msgid "this property is not allowed for '%s=%s'"
+msgstr "à¦à¦‡ বিশিষà§à¦Ÿà¦¤à¦¾ '%s=%s' à¦à¦° কà§à¦·à§‡à¦¤à§à¦°à§‡ অনà§à¦®à§‹à¦¦à¦¿à¦¤ নয়"
+
+#: ../libnm-core/nm-setting-ip4-config.c:988
+#: ../libnm-util/nm-setting-ip4-config.c:916
+#, c-format
+msgid "%d. IPv4 address is invalid"
+msgstr "%d. IPv4 ঠিকানা অবৈধ"
+
+#: ../libnm-core/nm-setting-ip4-config.c:998
+#: ../libnm-util/nm-setting-ip4-config.c:926
+#, c-format
+msgid "%d. IPv4 address has invalid prefix"
+msgstr "%d. IPv4 ঠিকানায় অবৈধ পà§à¦°à§‡à¦«à¦¿à¦•à§à¦¸ অাছে"
+
+#: ../libnm-core/nm-setting-ip4-config.c:1008
+#, c-format
+#| msgid "%d. IPv4 address has invalid prefix"
+msgid "%d. IPv4 address has invalid label '%s'"
+msgstr "%d. IPv4 ঠিকানায় অবৈধ লেবেল '%s' অাছে"
+
+#: ../libnm-core/nm-setting-ip4-config.c:1019
+#, c-format
+msgid "IPv4 address / label count mismatch (%d vs %d)"
+msgstr "IPv4 ঠিকানা / লেবেল গণনায় গড়মিল (%d বনাম %d)"
+
+#: ../libnm-core/nm-setting-ip4-config.c:1035
+#: ../libnm-util/nm-setting-ip4-config.c:942
+#, c-format
+msgid "%d. route is invalid"
+msgstr "%d. রাউট অবৈধ"
+
+#: ../libnm-core/nm-setting-ip4-config.c:1045
+#: ../libnm-util/nm-setting-ip4-config.c:952
+#, c-format
+msgid "%d. route has invalid prefix"
+msgstr "%d. রাউটে অবৈধ পà§à¦°à§‡à¦«à¦¿à¦•à§à¦¸ অাছে"
+
+#: ../libnm-core/nm-setting-ip4-config.c:1061
+#: ../libnm-core/nm-setting-ip6-config.c:892
+#, c-format
+#| msgid "%d. IPv4 address is invalid"
+msgid "%d. DNS server address is invalid"
+msgstr "%d. DNS সারà§à¦­à¦¾à¦° ঠিকানা অবৈধ"
+
+#: ../libnm-core/nm-setting-ip6-config.c:837
+#: ../libnm-util/nm-setting-ip6-config.c:831
+#, c-format
+msgid "'%s' not allowed for %s=%s"
+msgstr "'%s' %s=%s à¦à¦° কà§à¦·à§‡à¦¤à§à¦°à§‡ অনà§à¦®à§‹à¦¦à¦¿à¦¤ নয়"
+
+#: ../libnm-core/nm-setting-olpc-mesh.c:126
+#: ../libnm-core/nm-setting-wireless.c:720
+#: ../libnm-util/nm-setting-olpc-mesh.c:131
+#: ../libnm-util/nm-setting-wireless.c:759
+msgid "SSID length is out of range <1-32> bytes"
+msgstr "SSID দৈরà§à¦˜à§à¦¯ রেঞà§à¦œà§‡à¦° বাইরে <1-32> বাইট"
+
+#: ../libnm-core/nm-setting-olpc-mesh.c:135
+#: ../libnm-core/nm-setting-wireless.c:760
+#: ../libnm-util/nm-setting-olpc-mesh.c:140
+#: ../libnm-util/nm-setting-wireless.c:799
+#, c-format
+msgid "'%d' is not a valid channel"
+msgstr "'%d' à¦à¦•à¦Ÿà¦¿ বৈধ চà§à¦¯à¦¾à¦¨à§‡à¦² নয়"
+
+#: ../libnm-core/nm-setting-ppp.c:383 ../libnm-util/nm-setting-ppp.c:387
+#, c-format
+msgid "'%d' is out of valid range <128-16384>"
+msgstr "'%d' বৈধ রেঞà§à¦œà§‡à¦° বাইরে <128-16384>"
+
+#: ../libnm-core/nm-setting-ppp.c:396 ../libnm-util/nm-setting-ppp.c:400
+#, c-format
+msgid "setting this property requires non-zero '%s' property"
+msgstr "à¦à¦‡ বিশিষà§à¦Ÿà¦¤à¦¾ সেট করতে শূনà§à¦¯ নয় à¦à¦®à¦¨ '%s' বিশিষà§à¦Ÿà¦¤à¦¾à¦° পà§à¦°à¦¯à¦¼à§‹à¦œà¦¨"
+
+#: ../libnm-core/nm-setting-vlan.c:528 ../libnm-util/nm-setting-vlan.c:554
+#, c-format
+msgid "'%s' value doesn't match '%s=%s'"
+msgstr "'%s' মান '%s=%s' à¦à¦° সংগে মিলছে না"
+
+#: ../libnm-core/nm-setting-vlan.c:539 ../libnm-util/nm-setting-vlan.c:565
+#, c-format
+msgid "'%s' is neither an UUID nor an interface name"
+msgstr "'%s' à¦à¦•à¦Ÿà¦¿ UUID নয় বা à¦à¦•à¦Ÿà¦¿ ইনà§à¦Ÿà¦¾à¦°à¦«à§‡à¦¸ নাম নয়"
+
+#: ../libnm-core/nm-setting-vlan.c:553 ../libnm-util/nm-setting-vlan.c:578
+#, c-format
+msgid "property is not specified and neither is '%s:%s'"
+msgstr "বিশিষà§à¦Ÿà¦¤à¦¾ নিরà§à¦¦à¦¿à¦·à§à¦Ÿ করা হয়নি à¦à¦¬à¦‚ '%s:%s' নয়"
+
+#: ../libnm-core/nm-setting-vlan.c:566 ../libnm-util/nm-setting-vlan.c:591
+msgid "flags are invalid"
+msgstr "ফà§à¦²à§à¦¯à¦¾à¦— অবৈধ"
+
+#: ../libnm-core/nm-setting-wired.c:591 ../libnm-util/nm-setting-wired.c:615
+#, c-format
+#| msgid "'%s' is not a valid ethernet port value"
+msgid "'%s' is not a valid Ethernet port value"
+msgstr "'%s' à¦à¦•à¦Ÿà¦¿ বৈধ ইথারনেট পোরà§à¦Ÿ মান নয়"
+
+#: ../libnm-core/nm-setting-wired.c:601 ../libnm-util/nm-setting-wired.c:625
+#, c-format
+msgid "'%s' is not a valid duplex value"
+msgstr "'%s' à¦à¦•à¦Ÿà¦¿ বৈধ duplex মান নয়"
+
+#: ../libnm-core/nm-setting-wired.c:659 ../libnm-util/nm-setting-wired.c:682
+#, c-format
+msgid "invalid '%s' or its value '%s'"
+msgstr "'%s' বা à¦à¦° মান '%s' অবৈধ"
+
+#: ../libnm-core/nm-setting-wireless-security.c:899
+#: ../libnm-util/nm-setting-wireless-security.c:912
+#, c-format
+msgid "'%s' security requires '%s=%s'"
+msgstr "'%s' নিরাপতà§à¦¤à¦¾à¦° '%s=%s' পà§à¦°à¦¯à¦¼à§‹à¦œà¦¨"
+
+#: ../libnm-core/nm-setting-wireless-security.c:928
+#: ../libnm-util/nm-setting-wireless-security.c:941
+#, c-format
+msgid "'%s' security requires '%s' setting presence"
+msgstr "'%s' নিরাপতà§à¦¤à¦¾à¦° '%s' সেটিং উপসà§à¦¥à¦¿à¦¤à¦¿à¦° পà§à¦°à¦¯à¦¼à§‹à¦œà¦¨"
+
+#: ../libnm-core/nm-setting-wireless-security.c:949
+#: ../libnm-util/nm-setting-wireless-security.c:962
+#, c-format
+msgid "'%d' value is out of range <0-3>"
+msgstr "'%d' মান রেঞà§à¦œà§‡à¦° বাইরে <0-3>"
+
+#: ../libnm-core/nm-setting-wireless-security.c:1046
+#: ../libnm-util/nm-setting-wireless-security.c:1059
+#, c-format
+msgid "'%s' connections require '%s' in this property"
+msgstr "'%s' সংযোগের à¦à¦‡ বিশিষà§à¦Ÿà¦¤à¦¾à¦¯à¦¼ '%s' à¦à¦° পà§à¦°à¦¯à¦¼à§‹à¦œà¦¨"
+
+#: ../libnm-core/nm-setting-wireless-security.c:1076
+#: ../libnm-util/nm-setting-wireless-security.c:1089
+#, c-format
+msgid "'%s' can only be used with '%s=%s' (WEP)"
+msgstr "'%s' শà§à¦§à§à¦®à¦¾à¦¤à§à¦° '%s=%s' (WEP) à¦à¦° সংগে বà§à¦¯à¦¬à¦¹à¦¾à¦° করা যেতে পারে"
+
+#: ../libnm-core/nm-setting-wireless.c:729
+#: ../libnm-util/nm-setting-wireless.c:768
+#, c-format
+msgid "'%s' is not a valid Wi-Fi mode"
+msgstr "'%s' à¦à¦•à¦Ÿà¦¿ বৈধ Wi-Fi মোড নয়"
+
+#: ../libnm-core/nm-setting-wireless.c:739
+#: ../libnm-util/nm-setting-wireless.c:778
+#, c-format
+msgid "'%s' is not a valid band"
+msgstr "'%s' à¦à¦•à¦Ÿà¦¿ বৈধ বà§à¦¯à¦¾à¦¨à§à¦¡ নয়"
+
+#: ../libnm-core/nm-setting-wireless.c:749
+#: ../libnm-util/nm-setting-wireless.c:788
+#, c-format
+msgid "requires setting '%s' property"
+msgstr "'%s' বিশিষà§à¦Ÿà¦¤à¦¾ সেট করার পà§à¦°à¦¯à¦¼à§‹à¦œà¦¨"
+
+#: ../libnm-core/nm-setting.c:1710
+#, c-format
+#| msgid "requires '%s' or '%s' setting"
+msgid "Missing '%s' setting"
+msgstr "'%s' সেটিং অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤"
+
+#: ../libnm-glib/nm-device.c:1792
+msgid "Bluetooth"
+msgstr "বà§à¦²à§à¦Ÿà§à¦¥"
+
+#: ../libnm-glib/nm-device.c:1810
+msgid "ADSL"
+msgstr "ADSL"
+
+#: ../libnm-glib/nm-device.c:1838
+msgid "Wired"
+msgstr "তারযà§à¦•à§à¦¤"
+
+#: ../libnm-glib/nm-device.c:1869
+msgid "PCI"
+msgstr "PCI"
+
+#: ../libnm-glib/nm-device.c:1871
+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:1967 ../libnm-glib/nm-device.c:1986
+#, c-format
+msgctxt "long device name"
+msgid "%s %s"
+msgstr "%s %s"
+
+#: ../libnm-glib/nm-remote-connection.c:149
+#| msgid "disconnected"
+msgid "Disconnected by D-Bus"
+msgstr " D-Bus দà§à¦¬à¦¾à¦°à¦¾ সংযোগ বিচà§à¦›à¦¿à¦¨à§à¦¨"
+
+#: ../libnm/nm-object.c:174 ../libnm/nm-object.c:317
+msgid "Caller did not specify D-Bus path for object"
+msgstr "কলার অাইডি অবজেকà§à¦Ÿà§‡à¦° জনà§à¦¯ D-Bus পাথ উলà§à¦²à§‡à¦– করেনি"
+
+#: ../libnm/nm-vpn-plugin.c:726
+#| msgid "Error: No interface specified."
+msgid "No service name specified"
+msgstr "কোনো পরিষেবা নাম নিরà§à¦¦à¦¿à¦·à§à¦Ÿ করা হয়নি"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:1
msgid "Enable or disable system networking"
@@ -2376,7 +7392,8 @@ 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"
@@ -2426,8 +7443,8 @@ msgstr "সকল বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€à¦° জনà§à¦¯ নেটও
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"
@@ -2440,128 +7457,101 @@ msgstr ""
"পরিবরà§à¦¤à¦¨ "
"করা সমà§à¦­à¦¬ নয়"
-#: ../src/main.c:158
+#. Translators: the first %s is a prefix for the connection id, such
+#. * as "Wired Connection" or "VPN Connection". The %d is a number
+#. * that is combined with the first argument to create a unique
+#. * connection id.
+#: ../src/NetworkManagerUtils.c:953
+#, c-format
+#| msgctxt "long device name"
+#| msgid "%s %s"
+msgctxt "connection id fallback"
+msgid "%s %d"
+msgstr "%s %d"
+
+#: ../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 "NetworkManager বরà§à¦¤à¦®à¦¾à¦¨à§‡ চলছে (pid %ld)\n"
-#: ../src/main.c:363
+#: ../src/main.c:361
msgid "Print NetworkManager version and exit"
msgstr "NetworkManager-র সংসà§à¦•à¦°à¦£ পà§à¦°à¦¦à¦°à§à¦¶à¦¨ করে পà§à¦°à¦¸à§à¦¥à¦¾à¦¨ করা হবে"
-#: ../src/main.c:364
+#: ../src/main.c:362
msgid "Don't become a daemon"
msgstr "ডেমন রূপে পà§à¦°à¦¸à§à¦¤à§à¦¤ করা হবে না"
-#: ../src/main.c:365
+#: ../src/main.c:363
+msgid "Don't become a daemon, and log to stderr"
+msgstr "daemon যেন না হয়, à¦à¦¬à¦‚ stderr ঠলগ করà§à¦¨"
+
+#: ../src/main.c:364
+#, c-format
+msgid "Log level: one of [%s]"
+msgstr "লগ সà§à¦¤à¦°: [%s] à¦à¦° à¦à¦•à¦Ÿà¦¿"
+
+#: ../src/main.c:366
+#, c-format
+msgid "Log domains separated by ',': any combination of [%s]"
+msgstr "লগ ডোমেন ',' দà§à¦¬à¦¾à¦°à¦¾ পৃথক করা: [%s] à¦à¦° যেকোনো সমনà§à¦¬à¦¯à¦¼"
+
+#: ../src/main.c:368
msgid "Make all warnings fatal"
msgstr "সকল সরà§à¦¤à¦•à¦¬à¦¾à¦°à§à¦¤à¦¾à¦—à§à¦²à¦¿ গà§à¦°à§à¦¤à§à¦¬à¦ªà§‚রà§à¦£ হিসাবে ধারà§à¦¯ করা হবে"
-#: ../src/main.c:366
+#: ../src/main.c:369
msgid "Specify the location of a PID file"
msgstr "à¦à¦•à¦Ÿà¦¿ PID ফাইলের অবসà§à¦¥à¦¾à¦¨ নিরà§à¦§à¦¾à¦°à¦£ করà§à¦¨"
-#: ../src/main.c:366
+#: ../src/main.c:369
msgid "filename"
msgstr "filename"
-#: ../src/main.c:367
+#: ../src/main.c:370
msgid "State file location"
msgstr "ফাইলের অবসà§à¦¥à¦¾à¦¨ নিরà§à¦§à¦¾à¦°à¦£ করা হবে"
-#: ../src/main.c:367
+#: ../src/main.c:370
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 ""
-"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]"
-
-#: ../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:396
#, c-format
msgid "GModules are not supported on your platform!\n"
msgstr "বà§à¦¯à¦¬à¦¹à§ƒà¦¤ পà§à¦²à§à¦¯à¦¾à¦Ÿà¦«à¦°à§à¦®à§‡à¦° মধà§à¦¯à§‡ GModules সমরà§à¦¥à¦¿à¦¤ নয়!\n"
-#: ../src/main.c:406
+#: ../src/main.c:401
+#, c-format
+msgid "You must be root to run NetworkManager!\n"
+msgstr "NetworkManager সঞà§à¦šà¦¾à¦²à¦¨à§‡à¦° জনà§à¦¯ root পরিচয় ধারণ করা আবশà§à¦¯à¦•!\n"
+
+#: ../src/main.c:424
msgid ""
"NetworkManager monitors all network connections and automatically\n"
"chooses the best connection to use. It also allows the user to\n"
@@ -2574,44 +7564,47 @@ msgstr ""
"কোন বেতার কারà§à¦¡à¦—à§à¦²à¦¿ দà§à¦¬à¦¾à¦°à¦¾ কোন বেতার অà§à¦¯à¦¾à¦•à¦¸à§‡à¦¸ পয়েনà§à¦Ÿà¦—à§à¦²à¦¿ বà§à¦¯à¦¬à¦¹à¦¾à¦° করা হবে\n"
"তা বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€ দà§à¦¬à¦¾à¦°à¦¾ নিরà§à¦§à¦¾à¦°à¦£à§‡à¦° সà§à¦¬à¦¿à¦§à¦¾à¦“ উপলবà§à¦§ করা হয়।"
-#: ../src/main.c:412
+#: ../src/main.c:430 ../src/main.c:446
#, 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:422
+#: ../src/main.c:451
#, c-format
-msgid "You must be root to run NetworkManager!\n"
-msgstr "NetworkManager সঞà§à¦šà¦¾à¦²à¦¨à§‡à¦° জনà§à¦¯ root পরিচয় ধারণ করা আবশà§à¦¯à¦•!\n"
+msgid "Ignoring unrecognized log domain(s) '%s' passed on command line.\n"
+msgstr "অসà§à¦¬à§€à¦•à§ƒà¦¤ লগ ডোমেন '%s' উপেকà§à¦·à¦¿à¦¤, কমà§à¦¯à¦¾à¦¨à§à¦¡ লাইনে পাস করা।\n"
-#: ../src/main.c:449
+#: ../src/main.c:502
#, c-format
msgid "Failed to read configuration: (%d) %s\n"
msgstr "কনফিগারেশন পড়তে বà§à¦¯à¦°à§à¦¥: (%d) %s\n"
-#: ../src/main.c:460
+#: ../src/main.c:516
#, 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:521
+#, c-format
+msgid "Ignoring unrecognized log domain(s) '%s' from config files.\n"
+msgstr "কনফিগারেশন ফাইল থেকে অসà§à¦¬à§€à¦•à§ƒà¦¤ লগ ডোমেন '%s' উপেকà§à¦·à¦¾ করা হচà§à¦›à§‡à¥¤\n"
-#: ../src/main.c:467
+#: ../src/main.c:529
#, c-format
msgid "State file %s parsing failed: (%d) %s\n"
msgstr "অবসà§à¦¥à¦¾à¦¸à§‚চক ফাইল %s পারà§à¦¸à¦• করতে বà§à¦¯à¦°à§à¦¥: (%d) %s\n"
-#: ../src/main.c:484
+#: ../src/main.c:542
#, 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/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"
@@ -2620,250 +7613,471 @@ msgstr ""
"# %s থেকে মারà§à¦œ করা হয়েছে\n"
"\n"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:266
+#: ../src/dhcp-manager/nm-dhcp-manager.c:302
msgid "no usable DHCP client could be found."
msgstr "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦¯à§‹à¦—à§à¦¯ DHCP কà§à¦²à¦¾à§Ÿà§‡à¦¨à§à¦Ÿ পাওয়া যায়নি।"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:275
-msgid "'dhclient' could be found."
-msgstr "'dhclient' পাওয়া যায়নি।"
+#: ../src/dhcp-manager/nm-dhcp-manager.c:311
+#| msgid "'dhclient' could be found."
+msgid "'dhclient' could not be found or was disabled."
+msgstr "'dhclient' পাওয়া যায়নি বা নিষà§à¦•à§à¦°à¦¿à§Ÿ অাছে।"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:285
-msgid "'dhcpcd' could be found."
-msgstr "'dhcpcd' পাওয়া যায়নি।"
+#: ../src/dhcp-manager/nm-dhcp-manager.c:321
+#| msgid "'dhcpcd' could be found."
+msgid "'dhcpcd' could not be found or was disabled."
+msgstr "'dhcpcd' পাওয়া যায়নি বা নিষà§à¦•à§à¦°à¦¿à§Ÿ অাছে।"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:293
+#: ../src/dhcp-manager/nm-dhcp-manager.c:329
#, 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:374
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr ""
"উলà§à¦²à§‡à¦–à§à¦¯: libc resolver দà§à¦¬à¦¾à¦°à¦¾ ৩-টির বেশি নেম-সারà§à¦­à¦¾à¦° সমরà§à¦¥à¦¿à¦¤ না হওয়ার "
"সমà§à¦­à¦¾à¦¬à¦¨à¦¾ "
"রয়েছে।"
-#: ../src/dns-manager/nm-dns-manager.c:377
+#: ../src/dns-manager/nm-dns-manager.c:376
msgid "The nameservers listed below may not be recognized."
msgstr "নিমà§à¦¨à¦²à¦¿à¦–িত নেম-সারà§à¦­à¦¾à¦°à¦—à§à¦²à¦¿ সনাকà§à¦¤ না হওয়ার সমà§à¦­à¦¾à¦¬à¦¨à¦¾ রয়েছে।"
-#: ../src/logging/nm-logging.c:142
-#, c-format
-msgid "Unknown log level '%s'"
-msgstr "লগের অজানা সà§à¦¤à¦° '%s'"
+#: ../src/devices/adsl/nm-device-adsl.c:127
+#| msgid "ADSL connection %d"
+msgid "ADSL connection"
+msgstr "ADSL সংযোগ"
-#: ../src/logging/nm-logging.c:181
+#: ../src/devices/bluetooth/nm-bluez-device.c:189
#, c-format
-msgid "Unknown log domain '%s'"
-msgstr "অজানা লগ ডোমেইন '%s'"
+msgid "%s Network"
+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/devices/bluetooth/nm-device-bt.c:274
+#| msgid "PAN connection %d"
+msgid "PAN connection"
+msgstr "PAN সংযোগ"
-#: ../src/modem-manager/nm-modem-gsm.c:558
-#: ../src/modem-manager/nm-modem-broadband.c:524 ../src/nm-device-bt.c:348
-#, c-format
-msgid "GSM connection %d"
-msgstr "GSM সংযোগ %d"
+#: ../src/devices/bluetooth/nm-device-bt.c:299
+#: ../src/devices/wwan/nm-modem-broadband.c:483
+#| msgid "GSM connection %d"
+msgid "GSM connection"
+msgstr "GSM সংযোগ"
-#: ../src/nm-device-bond.c:192
-#, c-format
-msgid "Bond connection %d"
-msgstr "Bond সংযোগ %d"
+#: ../src/devices/bluetooth/nm-device-bt.c:303
+#: ../src/devices/wwan/nm-modem-broadband.c:506
+#| msgid "CDMA connection %d"
+msgid "CDMA connection"
+msgstr "CDMA সংযোগ"
-#: ../src/nm-device-adsl.c:193
-#, c-format
-msgid "ADSL connection %d"
-msgstr "ADSL সংযোগ %d"
+#: ../src/devices/bluetooth/nm-device-bt.c:307
+#| msgid "DUN connection %d"
+msgid "DUN connection"
+msgstr "DUN সংযোগ"
-#: ../src/nm-device-bt.c:323
-#, c-format
-msgid "PAN connection %d"
-msgstr "PAN সংযোগ %d"
+#: ../src/devices/nm-device-bond.c:137
+#| msgid "Bond connection %d"
+msgid "Bond connection"
+msgstr "Bond সংযোগ"
-#: ../src/nm-device-bt.c:356
-#, c-format
-msgid "DUN connection %d"
-msgstr "DUN সংযোগ %d"
+#: ../src/devices/nm-device-bridge.c:144
+#| msgid "Bridge connection %d"
+msgid "Bridge connection"
+msgstr "বà§à¦°à¦¿à¦œ সংযোগ"
-#: ../src/nm-device-ethernet.c:1326
-#, c-format
-msgid "PPPoE connection %d"
-msgstr "PPPoE সংযোগ %d"
+#: ../src/devices/nm-device-ethernet.c:1437
+#| msgid "PPPoE connection %d"
+msgid "PPPoE connection"
+msgstr "PPPoE সংযোগ"
+
+#: ../src/devices/nm-device-ethernet.c:1437
+#| msgid "Wired connection %d"
+msgid "Wired connection"
+msgstr "তারবিশিষà§à¦Ÿ সংযোগ"
-#: ../src/nm-device-ethernet.c:1326 ../src/settings/nm-settings-utils.c:50
+#: ../src/devices/nm-device-ethernet-utils.c:38
#, c-format
msgid "Wired connection %d"
msgstr "তারবিশিষà§à¦Ÿ সংযোগ %d"
-#: ../src/nm-device-infiniband.c:303
-#, c-format
-msgid "InfiniBand connection %d"
-msgstr "InfiniBand সংযোগ %d"
+#: ../src/devices/nm-device-infiniband.c:189
+#| msgid "InfiniBand connection %d"
+msgid "InfiniBand connection"
+msgstr "InfiniBand সংযোগ"
-#: ../src/nm-device-olpc-mesh.c:311
-#, c-format
-msgid "Mesh %d"
-msgstr "Mesh %d"
+#: ../src/devices/nm-device-vlan.c:229
+#| msgid "VLAN connection %d"
+msgid "VLAN connection"
+msgstr "VLAN সংযোগ"
-#: ../src/nm-device-vlan.c:362
-#, c-format
-msgid "VLAN connection %d"
-msgstr "VLAN সংযোগ %d"
+#: ../src/devices/team/nm-device-team.c:147
+#| msgid "Team connection %d"
+msgid "Team connection"
+msgstr "টিম সংযোগ"
-#: ../src/nm-manager.c:665
-#, c-format
-msgid "VPN connection %d"
-msgstr "VPN সংযোগ %d"
+#: ../src/devices/wifi/nm-device-olpc-mesh.c:163
+#| msgid "Mesh %d"
+msgid "Mesh"
+msgstr "Mesh"
-#: ../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 "netlink বারà§à¦¤à¦¾ পà§à¦°à¦•à§à¦°à¦¿à§Ÿà¦¾à¦•à¦°à¦£à§‡ তà§à¦°à§à¦Ÿà¦¿: %s"
+#: ../src/nm-config.c:303
+msgid "Config file location"
+msgstr "কনফিগ ফাইলের অবসà§à¦¥à¦¾à¦¨"
+
+#: ../src/nm-config.c:303
+msgid "/path/to/config.file"
+msgstr "/path/to/config.file"
-#: ../src/nm-netlink-monitor.c:251
-msgid "error occurred while waiting for data on socket"
-msgstr "তথà§à¦¯à§‡à¦° জনà§à¦¯ সকেটে অপেকà§à¦·à¦¾à¦•à¦¾à¦²à§‡ সমসà§à¦¯à¦¾"
+#: ../src/nm-config.c:304
+msgid "Config directory location"
+msgstr "কনফিগার ডিরেকà§à¦Ÿà¦°à¦¿ অবসà§à¦¥à¦¾à¦¨"
-#: ../src/nm-netlink-monitor.c:296
-#, c-format
-msgid "unable to connect to netlink for monitoring link status: %s"
-msgstr ""
-"লিংকের অবসà§à¦¥à¦¾ নিরীকà§à¦·à¦£à§‡à¦° উদà§à¦¦à§‡à¦¶à§à¦¯à§‡ netlink-র সাথে সংযোগ করতে বà§à¦¯à¦°à§à¦¥: %s"
+#: ../src/nm-config.c:304
+msgid "/path/to/config/dir"
+msgstr "/path/to/config/dir"
-#: ../src/nm-netlink-monitor.c:307
+#: ../src/nm-config.c:306
+msgid "List of plugins separated by ','"
+msgstr "',' চিহà§à¦¨ সহযোগে বিভাজন করে পà§à¦²à¦¾à¦—-ইনের তালিকা পà§à¦°à¦¦à¦°à§à¦¶à¦¨ করা হবে"
+
+#: ../src/nm-config.c:306
+msgid "plugin1,plugin2"
+msgstr "plugin1,plugin2"
+
+#. These three are hidden for now, and should eventually just go away.
+#: ../src/nm-config.c:309
+msgid "An http(s) address for checking internet connectivity"
+msgstr "ইনà§à¦Ÿà¦¾à¦°à¦¨à§‡à¦Ÿà§‡à¦° সংযোগ পরীকà§à¦·à¦¾ করার জনà§à¦¯ à¦à¦•à¦Ÿà¦¿ http(s) ঠিকানা"
+
+#: ../src/nm-config.c:310
+msgid "The interval between connectivity checks (in seconds)"
+msgstr "সংযোগের উপসà§à¦¥à¦¿à¦¤ পরীকà§à¦·à¦¾ করার মধà§à¦¯à§‡ বিরতি (সেকেনà§à¦¡à§‡)"
+
+#: ../src/nm-config.c:311
+msgid "The expected start of the response"
+msgstr "পà§à¦°à¦¤à§à¦¯à§à¦¤à§à¦¤à¦°à§‡à¦° পà§à¦°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤ আরমà§à¦­"
+
+#: ../src/nm-config.c:311
+msgid "Bingo!"
+msgstr "বিংগো!"
+
+#: ../src/nm-logging.c:159
#, c-format
-msgid "unable to enable netlink handle credential passing: %s"
-msgstr ""
-"netlink হà§à¦¯à¦¾à¦¨à§à¦¡à§‡à¦²à§‡à¦° পরিচয়ের তথà§à¦¯ পরিবহণের বà§à¦¯à¦¬à¦¸à§à¦¥à¦¾ সকà§à¦°à¦¿à§Ÿ করতে বà§à¦¯à¦°à§à¦¥: %s"
+msgid "Unknown log level '%s'"
+msgstr "লগের অজানা সà§à¦¤à¦° '%s'"
-#: ../src/nm-netlink-monitor.c:330 ../src/nm-netlink-monitor.c:390
+#: ../src/nm-logging.c:241
#, c-format
-msgid "unable to allocate netlink handle for monitoring link status: %s"
-msgstr ""
-"লিংকের অবসà§à¦¥à¦¾ নিরীকà§à¦·à¦£à§‡à¦° উদà§à¦¦à§‡à¦¶à§à¦¯à§‡ netlink হà§à¦¯à¦¾à¦¨à§à¦¡à§‡à¦² বরাদà§à¦¦ করতে বà§à¦¯à¦°à§à¦¥: %s"
+msgid "Unknown log domain '%s'"
+msgstr "অজানা লগ ডোমেইন '%s'"
-#: ../src/nm-netlink-monitor.c:415
+#: ../src/nm-manager.c:3371
+#| msgid "VPN connecting"
+msgid "VPN connection"
+msgstr "VPN সংযোগ"
+
+#: ../src/nm-sleep-monitor-systemd.c:114
+msgid "NetworkManager needs to turn off networks"
+msgstr "NetworkManager à¦à¦° নেটওয়ারà§à¦• বনà§à¦§ করা পà§à¦°à¦¯à¦¼à§‹à¦œà¦¨ "
+
+#: ../src/settings/plugins/ibft/plugin.c:67
#, c-format
-msgid "unable to allocate netlink link cache for monitoring link status: %s"
-msgstr ""
-"লিংকের অবসà§à¦¥à¦¾ নিরীকà§à¦·à¦£à§‡à¦° উদà§à¦¦à§‡à¦¶à§à¦¯à§‡ netlink লিংক কà§à¦¯à¦¾à¦¶à§‡ বরাদà§à¦¦ করতে বà§à¦¯à¦°à§à¦¥: %s"
+msgid "ibft: failed to read iscsiadm records: %s"
+msgstr "ibft: iscsiadm রেকরà§à¦¡ পড়তে বà§à¦¯à¦°à§à¦¥: %s"
-#: ../src/nm-netlink-monitor.c:542
+#: ../src/settings/plugins/ibft/plugin.c:75
#, c-format
-msgid "unable to join netlink group: %s"
-msgstr "netlink দলে যোগ করতে বà§à¦¯à¦°à§à¦¥: %s"
+#| msgid "Wired connection %d"
+msgid "ibft: read connection '%s'"
+msgstr "ibft: পঠন সংযোগ '%s'"
-#: ../src/nm-netlink-monitor.c:671 ../src/nm-netlink-monitor.c:684
+#: ../src/settings/plugins/ibft/plugin.c:81
#, c-format
-msgid "error updating link cache: %s"
-msgstr "লিংক কà§à¦¯à¦¾à¦¶à§‡ আপডেট করতে সমসà§à¦¯à¦¾: %s"
+msgid "ibft: failed to read iscsiadm record: %s"
+msgstr "ibft: iscsiadm রেকরà§à¦¡ পড়তে বà§à¦¯à¦°à§à¦¥: %s"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:93
+#: ../src/settings/plugins/ifcfg-rh/reader.c:112
msgid "System"
msgstr "সিসà§à¦Ÿà§‡à¦®"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:3668
-msgid "Bond"
-msgstr "Bond"
+#~ 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 ""
+#~ "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"
+#~ "অারà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ := 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 ""
+#~ "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"
-#: ../test/nm-online.c:111
-#, c-format
-msgid "\rConnecting"
-msgstr "\rসংযোগ করা হচà§à¦›à§‡"
+#~ msgid "Error: 'list configured': %s"
+#~ msgstr "তà§à¦°à§à¦Ÿà¦¿: 'list configured': %s"
-#: ../test/nm-online.c:142
-msgid "Time to wait for a connection, in seconds (default is 30)"
-msgstr ""
-"সংযোগ সà§à¦¥à¦¾à¦ªà¦¨à§‡à¦° জনà§à¦¯ অপেকà§à¦·à¦¾ করার সময়সীময়, সেকেনà§à¦¡ অনà§à¦¯à¦¾à§Ÿà§€ ধারà§à¦¯ (ডিফলà§à¦Ÿ মান "
-"৩০ সেকেনà§à¦¡)"
+#~ msgid "List of configured connections"
+#~ msgstr "কনফিগার করা সংযোগগà§à¦²à¦¿à¦° তালিকা"
-#: ../test/nm-online.c:143
-msgid "Exit immediately if NetworkManager is not running or connecting"
-msgstr ""
-"NetworkManager চলমান না হলে অথবা সংযোগ সà§à¦¥à¦¾à¦ªà¦¨ করতে সকà§à¦·à¦® না হলে অবিলমà§à¦¬à§‡ "
-"পà§à¦°à¦¸à§à¦¥à¦¾à¦¨ করা হবে"
+#~ msgid "Error: 'show configured': %s"
+#~ msgstr "তà§à¦°à§à¦Ÿà¦¿: 'show configured': %s"
-#: ../test/nm-online.c:144
-msgid "Don't print anything"
-msgstr "কিছৠপà§à¦°à¦¦à¦°à§à¦¶à¦¨ করা হবে না"
+#~ msgid "Error: 'list active': %s"
+#~ msgstr "তà§à¦°à§à¦Ÿà¦¿: 'list active': %s"
-#: ../test/nm-online.c:162
-msgid "Waits for a successful connection in NetworkManager."
-msgstr "NetworkManager-র মধà§à¦¯à§‡ সফল সংযোগের অপেকà§à¦·à¦¾ করা হয়।"
+#~ msgid "List of active 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."
-msgstr ""
-"অবৈধ বিকলà§à¦ªà¥¤ বৈধ বিকলà§à¦ªà¦—à§à¦²à¦¿à¦° তালিকা দেখার জনà§à¦¯ অনà§à¦—à§à¦°à¦¹ করে --help পà§à¦°à§Ÿà§‹à¦— "
-"করà§à¦¨à¥¤"
+#~ msgid "Error: 'show active': %s"
+#~ msgstr "তà§à¦°à§à¦Ÿà¦¿: 'show active': %s"
-#~ msgid "SCOPE"
-#~ msgstr "SCOPE"
+#~ msgid ""
+#~ "Error: Device '%s' is waiting for slaves before proceeding with "
+#~ "activation."
+#~ msgstr ""
+#~ "তà§à¦°à§à¦Ÿà¦¿: সকà§à¦°à¦¿à¦¯à¦¼à¦•à¦°à¦£à§‡à¦° পà§à¦°à¦•à§à¦°à¦¿à¦¯à¦¼à¦¾ অবিরত রাখার পূরà§à¦¬à§‡ ডিভাইস '%s' সà§à¦²à§‡à¦­à§‡à¦° জনà§à¦¯ অপেকà§à¦·à¦¾ "
+#~ "করছে।"
-#~ msgid "DBUS-SERVICE"
-#~ msgstr "DBUS-SERVICE"
+#~ msgid "There are 3 optional arguments for '%s' connection type.\n"
+#~ msgstr "'%s' সংযোগ ধরনের জনà§à¦¯ ৩টি বৈকলà§à¦ªà¦¿à¦• অারà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ অাছে।\n"
-#~ msgid "system"
-#~ msgstr "সিসà§à¦Ÿà§‡à¦®"
+#~ msgid "Do you want to provide them? (yes/no) [yes] "
+#~ msgstr "অাপনি কি তাদের দিতে চান? (হà§à¦¯à¦¾à¦/না) [হà§à¦¯à¦¾à¦] "
-#~ msgid "user"
-#~ msgstr "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€"
+#~ msgid "There are 5 optional arguments for 'InfiniBand' connection type.\n"
+#~ msgstr "'InfiniBand' সংযোগ ধরনের জনà§à¦¯ ৫টি বৈকলà§à¦ªà¦¿à¦• অারà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ রয়েছে।\n"
-#~ msgid "System connections"
-#~ msgstr "সিসà§à¦Ÿà§‡à¦®à§‡à¦° সংযোগ"
+#~ msgid "Transport mode (datagram or connected) [datagram]: "
+#~ msgstr "টà§à¦°à§à¦¯à¦¾à¦¨à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ মোড (datagram বা সংযà§à¦•à§à¦¤) [datagram]: "
-#~ msgid "User connections"
-#~ msgstr "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€à¦° সংযোগ"
+#~ msgid "There is 1 optional argument for 'WiMax' connection type.\n"
+#~ msgstr "'WiMax' সংযোগ ধরনের জনà§à¦¯ ১টি বৈকলà§à¦ªà¦¿à¦• অারà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ রয়েছে।\n"
-#~ msgid "state: %s\n"
-#~ msgstr "অবসà§à¦¥à¦¾: %s\n"
+#~ msgid "There are 4 optional arguments for 'PPPoE' connection type.\n"
+#~ msgstr "'PPPoE' সংযোগ ধরনের কà§à¦·à§‡à¦¤à§à¦°à§‡ ৪টি বৈকলà§à¦ªà¦¿à¦• অারà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ রয়েছে।\n"
-#~ msgid "Connection activated\n"
-#~ msgstr "সংযোগ সকà§à¦°à¦¿à§Ÿ করা হয়েছে\n"
+#~ msgid ""
+#~ "There are 2 optional arguments for 'mobile broadband' connection type.\n"
+#~ msgstr "'মোবাইল বà§à¦°à¦¡à¦¬à§à¦¯à¦¾à¦¨à§à¦¡' সংযোগ ধরনের জনà§à¦¯ ২টি বৈকলà§à¦ªà¦¿à¦• অারà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ রয়েছে।\n"
-#~ msgid "state: %s (%d)\n"
-#~ msgstr "অবসà§à¦¥à¦¾: %s (%d)\n"
+#~ msgid "There is 1 optional argument for 'bluetooth' connection type.\n"
+#~ msgstr "'বà§à¦²à§à¦Ÿà§à¦¥' সংযোগ ধরনের জনà§à¦¯ ১টি বৈকলà§à¦ªà¦¿à¦• অারà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ রয়েছে।\n"
-#~ msgid "Error: Obtaining active connection for '%s' failed."
-#~ msgstr "তà§à¦°à§à¦Ÿà¦¿: '%s'-র জনà§à¦¯ সকà§à¦°à¦¿à§Ÿ সংযোগ পà§à¦°à¦¾à¦ªà§à¦¤ করতে বà§à¦¯à¦°à§à¦¥à¥¤"
+#~ msgid "Bluetooth type (panu, dun-gsm or dun-cdma) [panu]: "
+#~ msgstr "বà§à¦²à§à¦Ÿà§à¦¥ ধরন (panu, dun-gsm বা dun-cdma) [panu]: "
-#~ msgid "Active connection state: %s\n"
-#~ msgstr "সকà§à¦°à¦¿à§Ÿ সংযোগের অবসà§à¦¥à¦¾: %s\n"
+#~ msgid "There are 4 optional arguments for 'VLAN' connection type.\n"
+#~ msgstr "'VLAN' সংযোগ ধরনের জনà§à¦¯ ৪টি বৈকলà§à¦ªà¦¿à¦• অারà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ রয়েছে।\n"
-#~ msgid "Active connection path: %s\n"
-#~ msgstr "সকà§à¦°à¦¿à§Ÿ সংযোগের পাথ: %s\n"
+#~ msgid "There are optional arguments for 'bond' connection type.\n"
+#~ msgstr "'bond' সংযোগ ধরনের জনà§à¦¯ বৈকলà§à¦ªà¦¿à¦• অারà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ রয়েছে।\n"
-#~ msgid "IP4-SETTINGS"
-#~ msgstr "IP4-SETTINGS"
+#~ msgid "Bonding monitoring mode (miimon or arp) [miimon]: "
+#~ msgstr "বনà§à¦¡à¦¿à¦‚ মনিটরিং মোড (miimon বা arp) [miimon]: "
-#~ msgid "IP6-SETTINGS"
-#~ msgstr "IP6-SETTINGS"
+#~ msgid "There are 6 optional arguments for 'bridge' connection type.\n"
+#~ msgstr "'bridge' সংযোগ ধরনের জনà§à¦¯ ৬টি বৈকলà§à¦ªà¦¿à¦• অারà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ রয়েছে।\n"
-#~ msgid "PREFIX"
-#~ msgstr "PREFIX"
+#~ msgid "Error: 'stp': '%s'.\n"
+#~ msgstr "তà§à¦°à§à¦Ÿà¦¿: 'stp': '%s'.\n"
-#~ msgid "unknown)"
-#~ msgstr "অজানা)"
+#~ msgid "There are 3 optional arguments for 'bridge-slave' connection type.\n"
+#~ msgstr "'bridge-slave' সংযোগ ধরনের জনà§à¦¯ ৩টি বৈকলà§à¦ªà¦¿à¦• অারà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ অাছে।\n"
-#~ msgid "Device state: %d (%s)\n"
-#~ msgstr "ডিভাইসের অবসà§à¦¥à¦¾: %d (%s)\n"
+#~ msgid "Hairpin (yes/no) [yes]: "
+#~ msgstr "হেয়ারপিন (হà§à¦¯à¦¾à¦/না) [হà§à¦¯à¦¾à¦]: "
-#~ msgid "not set"
-#~ msgstr "নিরà§à¦§à¦¾à¦°à¦¿à¦¤ হয়নি"
+#~ msgid "Error: 'hairpin': '%s'.\n"
+#~ msgstr "তà§à¦°à§à¦Ÿà¦¿: 'hairpin': '%s'.\n"
-#~ msgid "Allow use of user-specific connections"
-#~ msgstr "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€à¦° সà§à¦¨à¦¿à¦°à§à¦¦à¦¿à¦·à§à¦Ÿ সংযোগ পà§à¦°à§Ÿà§‹à¦—ের অনà§à¦®à¦¤à¦¿ পà§à¦°à¦¦à¦¾à¦¨ করা হবে"
+#~ msgid "There is 1 optional argument for 'VPN' connection type.\n"
+#~ msgstr "'VPN' সংযোগ ধরনের জনà§à¦¯ ১টি বৈকলà§à¦ªà¦¿à¦• অারà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ রয়েছে।\n"
-#~ msgid "System policy prevents use of user-specific connections"
+#~ msgid "There are 2 optional arguments for 'OLPC Mesh' connection type.\n"
+#~ msgstr "'OLPC Mesh' সংযোগ ধরনের জনà§à¦¯ ২টি বৈকলà§à¦ªà¦¿à¦• অারà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ রয়েছে।\n"
+
+#~ 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 :: save the connection\n"
+#~ "\n"
+#~ "সংযোগ NetworkManager ঠপাঠায় যা à¦à¦Ÿà¦¿à¦•à§‡ সংরকà§à¦·à¦£ করে।\n"
+
+#~ 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"
+
+#~ 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 ""
+#~ ">>> Command-line সমà§à¦ªà¦¾à¦¦à¦¨ উপলবà§à¦§ নয়। বৈশিষà§à¦Ÿà§à¦¯ সকà§à¦°à¦¿à¦¯à¦¼ করতে à¦à¦•à¦Ÿà¦¿ লাইন সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ "
+#~ "লাইবà§à¦°à§‡à¦°à¦¿ ইনসà§à¦Ÿà¦² করার কথা বিবেচনা করà§à¦¨à¥¤ <<<\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: 'configured' or 'active' command is expected for 'connection show'."
+#~ msgstr ""
+#~ "তà§à¦°à§à¦Ÿà¦¿: 'configured' বা 'active' কমà§à¦¯à¦¾à¦¨à§à¦¡ 'connection show' à¦à¦° কà§à¦·à§‡à¦¤à§à¦°à§‡ "
+#~ "পà§à¦°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤à¥¤"
+
+#~ msgid "not running"
+#~ msgstr "চলমান নয়"
+
+#~ msgid "0 (unknown)"
+#~ msgstr "০ (অজানা)"
+
+#~ msgid "any, "
+#~ msgstr "যে কোনো, "
+
+#~ msgid "900 MHz, "
+#~ msgstr "৯০০ MHz, "
+
+#~ msgid "1800 MHz, "
+#~ msgstr "১৮০০ MHz, "
+
+#~ msgid "1900 MHz, "
+#~ msgstr "১৯০০ MHz, "
+
+#~ msgid "850 MHz, "
+#~ msgstr "৮৫০ MHz, "
+
+#~ msgid "WCDMA 3GPP UMTS 2100 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS ২১০০ MHz, "
+
+#~ msgid "WCDMA 3GPP UMTS 1800 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS ১৮০০ MHz, "
+
+#~ msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS ১৭০০/২১০০ MHz, "
+
+#~ msgid "WCDMA 3GPP UMTS 800 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS ৮০০ MHz, "
+
+#~ msgid "WCDMA 3GPP UMTS 850 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS ৮৫০ MHz, "
+
+#~ msgid "WCDMA 3GPP UMTS 900 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS ৯০০ MHz, "
+
+#~ msgid "WCDMA 3GPP UMTS 1700 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS ১৭০০ MHz, "
+
+#~ msgid "WCDMA 3GPP UMTS 1900 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS ১৯০০ MHz, "
+
+#~ msgid "WCDMA 3GPP UMTS 2600 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS ২৬০০ MHz, "
+
+#~ msgid "'%s' is not valid (use <dest IP>/prefix <next-hop IP> [metric])"
+#~ msgstr "'%s' বৈধ নয় (বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨ <dest IP>/prefix <next-hop IP> [metric])"
+
+#~ msgid "'%s' doesn't match the virtual interface name '%s'"
+#~ msgstr "'%s' ভারà§à¦Ÿà§à¦¯à¦¼à¦¾à¦² ইনà§à¦Ÿà¦¾à¦°à¦«à§‡à¦¸ নাম '%s' à¦à¦° সংগে মিলছে না"
+
+#~ msgid "IPv4 configuration is not allowed for slave"
+#~ msgstr "slave à¦à¦° কà§à¦·à§‡à¦¤à§à¦°à§‡ IPv4 কনফিগারেশন অননà§à¦®à§‹à¦¦à¦¿à¦¤"
+
+#~ msgid "IPv6 configuration is not allowed for slave"
+#~ msgstr "slave à¦à¦° কà§à¦·à§‡à¦¤à§à¦°à§‡ IPv6 কনফিগারেশন অননà§à¦®à§‹à¦¦à¦¿à¦¤"
+
+#~ 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 "Auto %s"
-#~ msgstr "সà§à¦¬à§Ÿà¦‚কà§à¦°à¦¿à§Ÿ %s"
+#~ msgid "Error saving connection: %s"
+#~ msgstr "সংযোগ সংরকà§à¦·à¦£ করতে তà§à¦°à§à¦Ÿà¦¿: %s"
diff --git a/po/de.po b/po/de.po
index 40e2011f2..06f8a369f 100644
--- a/po/de.po
+++ b/po/de.po
@@ -20,453 +20,496 @@ msgstr ""
"Project-Id-Version: NetworkManager HEAD\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"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"
+"POT-Creation-Date: 2014-08-01 22:08+0000\n"
+"PO-Revision-Date: 2014-07-27 17:44+0100\n"
+"Last-Translator: Benjamin Steinwender <b@stbe.at>\n"
"Language-Team: Deutsch <gnome-de@gnome.org>\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: Poedit 1.5.4\n"
+"X-Generator: Poedit 1.6.7\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:179
-#: ../cli/src/connections.c:201
+#: ../clients/cli/common.c:38 ../clients/cli/common.c:50
+#: ../clients/cli/common.c:58 ../clients/cli/common.c:69
+#: ../clients/cli/connections.c:174 ../clients/cli/connections.c:196
msgid "GROUP"
msgstr "GRUPPE"
#. 0
-#: ../cli/src/common.c:35 ../cli/src/common.c:55
+#: ../clients/cli/common.c:39 ../clients/cli/common.c:59
msgid "ADDRESS"
msgstr "ADRESSE"
#. 1
-#: ../cli/src/common.c:36 ../cli/src/common.c:56
+#: ../clients/cli/common.c:40 ../clients/cli/common.c:60
msgid "ROUTE"
msgstr "ROUTE"
#. 2
-#: ../cli/src/common.c:37 ../cli/src/common.c:57
+#: ../clients/cli/common.c:41 ../clients/cli/common.c:61
msgid "DNS"
msgstr "DNS"
#. 3
-#: ../cli/src/common.c:38 ../cli/src/common.c:58
+#: ../clients/cli/common.c:42 ../clients/cli/common.c:62
msgid "DOMAIN"
msgstr "DOMAIN"
#. 4
-#: ../cli/src/common.c:39
+#: ../clients/cli/common.c:43
msgid "WINS"
msgstr "WINS"
#. 0
-#: ../cli/src/common.c:47 ../cli/src/common.c:66
+#: ../clients/cli/common.c:51 ../clients/cli/common.c:70
msgid "OPTION"
msgstr "OPTION"
-#: ../cli/src/common.c:404 ../cli/src/settings.c:3000
-#: ../cli/src/settings.c:3019
+#: ../clients/cli/common.c:408 ../clients/cli/settings.c:2935
+#: ../clients/cli/settings.c:2954
#, c-format
msgid "invalid IPv4 address '%s'"
msgstr "Ungültige IPv4-Adresse »%s«"
-#: ../cli/src/common.c:412
+#: ../clients/cli/common.c:416
#, 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
+#: ../clients/cli/common.c:423 ../clients/cli/common.c:476
#, 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
+#: ../clients/cli/common.c:461 ../clients/cli/settings.c:3280
+#: ../clients/cli/settings.c:3299
#, c-format
msgid "invalid IPv6 address '%s'"
msgstr "Ungültige IPv6-Adresse »%s«"
-#: ../cli/src/common.c:465
+#: ../clients/cli/common.c:469
#, c-format
msgid "invalid prefix '%s'; <1-128> allowed"
msgstr "ungültiger Präfix »%s«. <1-128> ist erlaubt"
-#: ../cli/src/common.c:512
+#: ../clients/cli/common.c:552
#, c-format
-msgid "invalid IPv4 route '%s'"
-msgstr "Ungültige IPv4-Route »%s«"
+msgid "invalid route destination address '%s'"
+msgstr "ungültige Routen-Zieladresse »%s«"
-#: ../cli/src/common.c:520
+#: ../clients/cli/common.c:559
#, c-format
-msgid "invalid prefix '%s'; <0-32> allowed"
-msgstr "ungültiger Präfix »%s«. <0-32> ist erlaubt"
+msgid "invalid prefix '%s'; <1-%d> allowed"
+msgstr "ungültiger Präfix »%s«. <1-%d> ist erlaubt"
-#: ../cli/src/common.c:527 ../cli/src/common.c:590
+#: ../clients/cli/common.c:569
#, 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
+#: ../clients/cli/common.c:574
#, c-format
-msgid "invalid metric '%s'"
-msgstr "Ungültige Metrik »%s«"
+msgid ""
+"the second component of route ('%s') is neither a next hop address nor a "
+"metric"
+msgstr ""
+"Die zweite Komponente der Route (»%s«) ist weder eine Router-Adresse noch "
+"eine Metrik"
-#: ../cli/src/common.c:575
+#: ../clients/cli/common.c:584
#, c-format
-msgid "invalid IPv6 route '%s'"
-msgstr "Ungültige IPv6-Route »%s«"
+msgid "invalid metric '%s'"
+msgstr "Ungültige Metrik »%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"
+#: ../clients/cli/common.c:593
+msgid "default route cannot be added (NetworkManager handles it by itself)"
+msgstr ""
+"Die Standard-Route kann nicht hinzugefügt werden (NetworkManager kümmert "
+"sich selbst darum)"
-#: ../cli/src/common.c:619
+#: ../clients/cli/common.c:681
msgid "unmanaged"
msgstr "nicht verwaltet"
-#: ../cli/src/common.c:621
+#: ../clients/cli/common.c:683
msgid "unavailable"
msgstr "nicht verfügbar"
-#: ../cli/src/common.c:623 ../cli/src/network-manager.c:276
+#: ../clients/cli/common.c:685 ../clients/cli/network-manager.c:274
msgid "disconnected"
msgstr "nicht verbunden"
-#: ../cli/src/common.c:625
+#: ../clients/cli/common.c:687
msgid "connecting (prepare)"
msgstr "wird verbunden (wird vorbereitet)"
-#: ../cli/src/common.c:627
+#: ../clients/cli/common.c:689
msgid "connecting (configuring)"
msgstr "wird verbunden (wird eingerichtet)"
-#: ../cli/src/common.c:629
+#: ../clients/cli/common.c:691
msgid "connecting (need authentication)"
msgstr "wird verbunden (Legitimierung wird benötigt)"
-#: ../cli/src/common.c:631
+#: ../clients/cli/common.c:693
msgid "connecting (getting IP configuration)"
msgstr "wird verbunden (IP-Einstellungen werden ermittelt)"
-#: ../cli/src/common.c:633
+#: ../clients/cli/common.c:695
msgid "connecting (checking IP connectivity)"
msgstr "wird verbunden (IP-Funktionalität wird geprüft)"
-#: ../cli/src/common.c:635
+#: ../clients/cli/common.c:697
msgid "connecting (starting secondary connections)"
msgstr "wird verbunden (Zweitverbindungen werden gestartet)"
-#: ../cli/src/common.c:637 ../cli/src/network-manager.c:272
+#: ../clients/cli/common.c:699 ../clients/cli/network-manager.c:270
msgid "connected"
msgstr "verbunden"
-#: ../cli/src/common.c:639 ../cli/src/connections.c:540
+#: ../clients/cli/common.c:701 ../clients/cli/connections.c:541
msgid "deactivating"
msgstr "wird deaktiviert"
-#: ../cli/src/common.c:641
+#: ../clients/cli/common.c:703
msgid "connection failed"
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
+#: ../clients/cli/common.c:705 ../clients/cli/connections.c:546
+#: ../clients/cli/connections.c:569 ../clients/cli/connections.c:1637
+#: ../clients/cli/devices.c:817 ../clients/cli/devices.c:2356
+#: ../clients/cli/network-manager.c:277 ../clients/cli/network-manager.c:295
+#: ../clients/cli/network-manager.c:358 ../clients/cli/network-manager.c:361
+#: ../clients/cli/network-manager.c:371 ../clients/cli/network-manager.c:373
+#: ../clients/cli/network-manager.c:430 ../clients/cli/network-manager.c:446
+#: ../clients/cli/settings.c:709 ../clients/cli/settings.c:771
+#: ../clients/cli/settings.c:1087 ../clients/cli/utils.c:1122
+#: ../src/main.c:504 ../src/main.c:532
msgid "unknown"
msgstr "unbekannt"
-#: ../cli/src/common.c:652
+#: ../clients/cli/common.c:714
msgid "No reason given"
msgstr "Kein Grund angegeben"
-#: ../cli/src/common.c:655 ../cli/src/connections.c:2429
+#: ../clients/cli/common.c:717 ../clients/cli/connections.c:2422
#, c-format
msgid "Unknown error"
msgstr "Unbekannter Fehler"
-#: ../cli/src/common.c:658
+#: ../clients/cli/common.c:720
msgid "Device is now managed"
msgstr "Gerät wird nun verwaltet"
-#: ../cli/src/common.c:661
+#: ../clients/cli/common.c:723
msgid "Device is now unmanaged"
msgstr "Gerät wird nun nicht mehr verwaltet"
-#: ../cli/src/common.c:664
+#: ../clients/cli/common.c:726
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:667
+#: ../clients/cli/common.c:729
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:670
+#: ../clients/cli/common.c:732
msgid "The IP configuration is no longer valid"
msgstr "Die IP-Konfiguration ist nicht mehr gültig"
-#: ../cli/src/common.c:673
+#: ../clients/cli/common.c:735
msgid "Secrets were required, but not provided"
msgstr "Geheimdaten waren erforderlich, wurden aber nicht angegeben"
-#: ../cli/src/common.c:676
+#: ../clients/cli/common.c:738
msgid "802.1X supplicant disconnected"
msgstr "802.1X-Supplicant getrennt"
-#: ../cli/src/common.c:679
+#: ../clients/cli/common.c:741
msgid "802.1X supplicant configuration failed"
msgstr "Einrichtung des 802.1X-Supplicant fehlgeschlagen"
-#: ../cli/src/common.c:682
+#: ../clients/cli/common.c:744
msgid "802.1X supplicant failed"
msgstr "802.1X-Supplicant fehlgeschlagen"
-#: ../cli/src/common.c:685
+#: ../clients/cli/common.c:747
msgid "802.1X supplicant took too long to authenticate"
msgstr "802.1X-Supplicant brauchte zu lange für die Legitimierung"
-#: ../cli/src/common.c:688
+#: ../clients/cli/common.c:750
msgid "PPP service failed to start"
msgstr "PPP-Dienst konnte nicht gestartet werden"
-#: ../cli/src/common.c:691
+#: ../clients/cli/common.c:753
msgid "PPP service disconnected"
msgstr "PPP-Dienst getrennt"
-#: ../cli/src/common.c:694
+#: ../clients/cli/common.c:756
msgid "PPP failed"
msgstr "PPP fehlgeschlagen"
-#: ../cli/src/common.c:697
+#: ../clients/cli/common.c:759
msgid "DHCP client failed to start"
msgstr "DHCP-Client konnte nicht gestartet werden"
-#: ../cli/src/common.c:700
+#: ../clients/cli/common.c:762
msgid "DHCP client error"
msgstr "DHCP-Client-Fehler"
-#: ../cli/src/common.c:703
+#: ../clients/cli/common.c:765
msgid "DHCP client failed"
msgstr "DHCP-Client fehlgeschlagen"
-#: ../cli/src/common.c:706
+#: ../clients/cli/common.c:768
msgid "Shared connection service failed to start"
msgstr ""
"Dienst für gemeinsam verwendete Verbindung konnte nicht gestartet werden"
-#: ../cli/src/common.c:709
+#: ../clients/cli/common.c:771
msgid "Shared connection service failed"
msgstr "Dienst für gemeinsam verwendete Verbindung fehlgeschlagen"
-#: ../cli/src/common.c:712
+#: ../clients/cli/common.c:774
msgid "AutoIP service failed to start"
msgstr "Start des AutoIP-Diensts fehlgeschlagen"
-#: ../cli/src/common.c:715
+#: ../clients/cli/common.c:777
msgid "AutoIP service error"
msgstr "Fehler des AutoIP-Diensts"
-#: ../cli/src/common.c:718
+#: ../clients/cli/common.c:780
msgid "AutoIP service failed"
msgstr "AutoIP-Dienst fehlgeschlagen"
-#: ../cli/src/common.c:721
+#: ../clients/cli/common.c:783
msgid "The line is busy"
msgstr "Die Leitung ist besetzt"
-#: ../cli/src/common.c:724
+#: ../clients/cli/common.c:786
msgid "No dial tone"
msgstr "Kein Freizeichen"
-#: ../cli/src/common.c:727
+#: ../clients/cli/common.c:789
msgid "No carrier could be established"
msgstr "Es konnte kein Trägersignal aufgebaut werden"
-#: ../cli/src/common.c:730
+#: ../clients/cli/common.c:792
msgid "The dialing request timed out"
msgstr "Der Einwahlvorgang benötigte zu viel Zeit"
-#: ../cli/src/common.c:733
+#: ../clients/cli/common.c:795
msgid "The dialing attempt failed"
msgstr "Der Einwahlversuch ist fehlgeschlagen"
-#: ../cli/src/common.c:736
+#: ../clients/cli/common.c:798
msgid "Modem initialization failed"
msgstr "Modeminitialisierung fehlgeschlagen"
-#: ../cli/src/common.c:739
+#: ../clients/cli/common.c:801
msgid "Failed to select the specified APN"
msgstr "Angegebener APN konnte nicht ausgewählt werden"
-#: ../cli/src/common.c:742
+#: ../clients/cli/common.c:804
msgid "Not searching for networks"
msgstr "Es wird nicht nach Netzwerken gesucht"
-#: ../cli/src/common.c:745
+#: ../clients/cli/common.c:807
msgid "Network registration denied"
msgstr "Netzwerkanmeldung abgelehnt"
-#: ../cli/src/common.c:748
+#: ../clients/cli/common.c:810
msgid "Network registration timed out"
msgstr "Netzwerkanmeldung benötigte zu viel Zeit"
-#: ../cli/src/common.c:751
+#: ../clients/cli/common.c:813
msgid "Failed to register with the requested network"
msgstr "Anmeldung an dem angeforderten Netzwerk fehlgeschlagen"
-#: ../cli/src/common.c:754
+#: ../clients/cli/common.c:816
msgid "PIN check failed"
msgstr "PIN-Überprüfung fehlgeschlagen"
-#: ../cli/src/common.c:757
+#: ../clients/cli/common.c:819
msgid "Necessary firmware for the device may be missing"
msgstr "Notwendige Firmware des Geräts fehlt möglicherweise"
-#: ../cli/src/common.c:760
+#: ../clients/cli/common.c:822
msgid "The device was removed"
msgstr "Das Gerät wurde entfernt"
-#: ../cli/src/common.c:763
+#: ../clients/cli/common.c:825
msgid "NetworkManager went to sleep"
msgstr "NetworkManager ging in den Schlafmodus"
-#: ../cli/src/common.c:766
+#: ../clients/cli/common.c:828
msgid "The device's active connection disappeared"
msgstr "Die aktive Verbindung des Geräts verschwand"
-#: ../cli/src/common.c:769
+#: ../clients/cli/common.c:831
msgid "Device disconnected by user or client"
msgstr "Das Gerät wurde durch den Benutzer oder Client getrennt"
-#: ../cli/src/common.c:772
+#: ../clients/cli/common.c:834
msgid "Carrier/link changed"
msgstr "Trägersignal/Verbindung geändert"
-#: ../cli/src/common.c:775
+#: ../clients/cli/common.c:837
msgid "The device's existing connection was assumed"
msgstr "Die bestehende Verbindung des Geräts wurde angenommen"
-#: ../cli/src/common.c:778
+#: ../clients/cli/common.c:840
msgid "The supplicant is now available"
msgstr "Der Supplicant ist nun verfügbar"
-#: ../cli/src/common.c:781
+#: ../clients/cli/common.c:843
msgid "The modem could not be found"
msgstr "Das Modem wurde nicht gefunden"
-#: ../cli/src/common.c:784
+#: ../clients/cli/common.c:846
msgid "The Bluetooth connection failed or timed out"
msgstr ""
"Die Bluetooth-Verbindung ist fehlgeschlagen oder benötigte zu viel Zeit"
-#: ../cli/src/common.c:787
+#: ../clients/cli/common.c:849
msgid "GSM Modem's SIM card not inserted"
msgstr "SIM-Karte des GSM-Modems ist nicht eingesteckt"
-#: ../cli/src/common.c:790
+#: ../clients/cli/common.c:852
msgid "GSM Modem's SIM PIN required"
msgstr "PIN der SIM-Karte des GSM-Modems erforderlich"
-#: ../cli/src/common.c:793
+#: ../clients/cli/common.c:855
msgid "GSM Modem's SIM PUK required"
msgstr "PUK der SIM-Karte des GSM-Modems erforderlich"
-#: ../cli/src/common.c:796
+#: ../clients/cli/common.c:858
msgid "GSM Modem's SIM wrong"
msgstr "SIM-Karte des GSM-Modems ist falsch"
-#: ../cli/src/common.c:799
+#: ../clients/cli/common.c:861
msgid "InfiniBand device does not support connected mode"
msgstr "Das InfiniBand-Gerät unterstützt keinen »Connected«-Modus"
-#: ../cli/src/common.c:802
+#: ../clients/cli/common.c:864
msgid "A dependency of the connection failed"
msgstr "Eine Abhängigkeit der Verbindung ist gescheitert"
-#: ../cli/src/common.c:805
+#: ../clients/cli/common.c:867
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:808
+#: ../clients/cli/common.c:870
msgid "ModemManager is unavailable"
msgstr "ModemManager ist nicht verfügbar"
-#: ../cli/src/common.c:811
+#: ../clients/cli/common.c:873
msgid "The Wi-Fi network could not be found"
msgstr "Das WLAN konnte nicht gefunden werden"
-#: ../cli/src/common.c:814
+#: ../clients/cli/common.c:876
msgid "A secondary connection of the base connection failed"
msgstr "Eine Zweitverbindung der Basisverbindung schlug fehl"
-#: ../cli/src/common.c:817
+#: ../clients/cli/common.c:879
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
+#: ../clients/cli/common.c:882
msgid "teamd control failed"
msgstr "teamd-Bedienung fehlgeschlagen"
+#: ../clients/cli/common.c:885
+msgid "Modem failed or no longer available"
+msgstr "Modem ausgefallen oder es ist nicht mehr verfügbar"
+
+#: ../clients/cli/common.c:888
+msgid "Modem now ready and available"
+msgstr "Modem ist nun bereit und verfügbar"
+
+#: ../clients/cli/common.c:891
+msgid "SIM PIN was incorrect"
+msgstr "PIN der SIM-Karte war falsch"
+
#. 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
+#: ../clients/cli/common.c:895 ../clients/cli/devices.c:623
+#: ../libnm-glib/nm-device.c:1812
msgid "Unknown"
msgstr "Unbekannt"
-#: ../cli/src/common.c:866
+#: ../clients/cli/common.c:937
#, c-format
msgid "invalid priority map '%s'"
msgstr "ungültige Prioritätsabbildung »%s«"
-#: ../cli/src/common.c:873 ../cli/src/common.c:879
+#: ../clients/cli/common.c:944 ../clients/cli/common.c:950
#, c-format
msgid "priority '%s' is not valid (<0-%ld>)"
msgstr "Priorität »%s« ist ungültig (<0-%ld>)"
-#: ../cli/src/common.c:946
+#: ../clients/cli/common.c:1017
#, 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
+#: ../clients/cli/connections.c:45
msgid "Setting name? "
msgstr "Einstellungsname?"
-#: ../cli/src/connections.c:63
+#: ../clients/cli/connections.c:46
msgid "Property name? "
msgstr "Eigenschaftenname?"
-#: ../cli/src/connections.c:64
+#: ../clients/cli/connections.c:47
msgid "Enter connection type: "
msgstr "Geben Sie den Verbindungstyp an: "
+#. define some other prompts
+#: ../clients/cli/connections.c:50
+msgid "Connection type: "
+msgstr "Verbindungstyp: "
+
+#: ../clients/cli/connections.c:51
+msgid "VPN type: "
+msgstr "VPN-Typ: "
+
+#: ../clients/cli/connections.c:52
+msgid "Bond master: "
+msgstr "Bond-Master: "
+
+#: ../clients/cli/connections.c:53
+msgid "Team master: "
+msgstr "Bündelungs-Master: "
+
+#: ../clients/cli/connections.c:54
+msgid "Bridge master: "
+msgstr "Master der Netzwerkbrücke: "
+
+#: ../clients/cli/connections.c:55
+msgid "Connection (name, UUID, or path): "
+msgstr "Verbindung (Name, UUID oder Pfad): "
+
#. 0
-#: ../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
+#: ../clients/cli/connections.c:63 ../clients/cli/connections.c:175
+#: ../clients/cli/devices.c:56 ../clients/cli/devices.c:85
+#: ../clients/cli/devices.c:95 ../clients/cli/devices.c:106
+#: ../clients/cli/devices.c:115 ../clients/cli/devices.c:130
+#: ../clients/cli/devices.c:143 ../clients/cli/devices.c:169
+#: ../clients/cli/devices.c:184 ../clients/cli/devices.c:193
msgid "NAME"
msgstr "NAME"
#. 0
#. 1
-#: ../cli/src/connections.c:69 ../cli/src/connections.c:181
+#: ../clients/cli/connections.c:64 ../clients/cli/connections.c:176
msgid "UUID"
msgstr "UUID"
@@ -474,29 +517,30 @@ msgstr "UUID"
#. 0
#. 1
#. 2
-#: ../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
+#: ../clients/cli/connections.c:65 ../clients/cli/connections.c:197
+#: ../clients/cli/devices.c:42 ../clients/cli/devices.c:58
+#: ../clients/cli/devices.c:172
msgid "TYPE"
msgstr "TYP"
#. 2
-#: ../cli/src/connections.c:71
+#: ../clients/cli/connections.c:66
msgid "TIMESTAMP"
msgstr "ZEITSTEMPEL"
#. 3
-#: ../cli/src/connections.c:72
+#: ../clients/cli/connections.c:67
msgid "TIMESTAMP-REAL"
msgstr "ZEITSTEMPEL-ECHT"
#. 4
-#. 14
-#: ../cli/src/connections.c:73 ../cli/src/devices.c:101
+#. 15
+#: ../clients/cli/connections.c:68 ../clients/cli/devices.c:72
msgid "AUTOCONNECT"
msgstr "AUTO-VERBINDEN"
#. 5
-#: ../cli/src/connections.c:74
+#: ../clients/cli/connections.c:69
msgid "READONLY"
msgstr "NUR-LESEN"
@@ -505,16 +549,17 @@ msgstr "NUR-LESEN"
#. 2
#. 15
#. 5
-#: ../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
+#: ../clients/cli/connections.c:70 ../clients/cli/connections.c:183
+#: ../clients/cli/devices.c:44 ../clients/cli/devices.c:159
+#: ../clients/cli/devices.c:175
msgid "DBUS-PATH"
msgstr "DBUS-PFAD"
#. 7
#. 13
#. 4
-#: ../cli/src/connections.c:76 ../cli/src/devices.c:185
-#: ../cli/src/devices.c:202
+#: ../clients/cli/connections.c:71 ../clients/cli/devices.c:157
+#: ../clients/cli/devices.c:174
msgid "ACTIVE"
msgstr "AKTIV"
@@ -522,8 +567,9 @@ msgstr "AKTIV"
#. 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
+#: ../clients/cli/connections.c:72 ../clients/cli/devices.c:41
+#: ../clients/cli/devices.c:57 ../clients/cli/devices.c:156
+#: ../clients/cli/devices.c:173
msgid "DEVICE"
msgstr "GERÄT"
@@ -532,116 +578,118 @@ msgstr "GERÄT"
#. 1
#. 9
#. 1
-#: ../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
+#: ../clients/cli/connections.c:73 ../clients/cli/connections.c:178
+#: ../clients/cli/devices.c:43 ../clients/cli/devices.c:66
+#: ../clients/cli/network-manager.c:37
msgid "STATE"
msgstr "STATUS"
#. 10
-#: ../cli/src/connections.c:79
+#: ../clients/cli/connections.c:74
msgid "ACTIVE-PATH"
msgstr "AKTIV-PFAD"
#. 2
-#: ../cli/src/connections.c:182
+#: ../clients/cli/connections.c:177
msgid "DEVICES"
msgstr "GERÄTE"
#. 4
-#: ../cli/src/connections.c:184
+#: ../clients/cli/connections.c:179
msgid "DEFAULT"
msgstr "VORGABE"
#. 5
-#: ../cli/src/connections.c:185
+#: ../clients/cli/connections.c:180
msgid "DEFAULT6"
msgstr "STANDARD6"
#. 6
-#: ../cli/src/connections.c:186
+#: ../clients/cli/connections.c:181
msgid "SPEC-OBJECT"
msgstr "SPEC-OBJECT"
#. 7
#. 4
-#: ../cli/src/connections.c:187 ../cli/src/connections.c:225
-#: ../tui/nm-editor-utils.c:243 ../tui/nmt-connect-connection-list.c:405
+#. Ask for optional 'vpn' arguments.
+#: ../clients/cli/connections.c:182 ../clients/cli/connections.c:220
+#: ../clients/cli/connections.c:3478 ../clients/tui/nm-editor-utils.c:234
+#: ../clients/tui/nmt-connect-connection-list.c:405
msgid "VPN"
msgstr "VPN"
#. 9
#. 5
-#. 18
-#: ../cli/src/connections.c:189 ../cli/src/devices.c:77
-#: ../cli/src/devices.c:105
+#. 19
+#: ../clients/cli/connections.c:184 ../clients/cli/devices.c:47
+#: ../clients/cli/devices.c:76
msgid "CON-PATH"
msgstr "CON-PFAD"
#. 10
-#: ../cli/src/connections.c:190
+#: ../clients/cli/connections.c:185
msgid "ZONE"
msgstr "ZONE"
#. 11
-#: ../cli/src/connections.c:191
+#: ../clients/cli/connections.c:186
msgid "MASTER-PATH"
msgstr "MASTER-PFAD"
#. 1
-#: ../cli/src/connections.c:203
+#: ../clients/cli/connections.c:198
msgid "USERNAME"
msgstr "BENUTZERNAME"
#. 2
-#: ../cli/src/connections.c:204
+#: ../clients/cli/connections.c:199
msgid "GATEWAY"
msgstr "GATEWAY"
#. 3
-#: ../cli/src/connections.c:205
+#: ../clients/cli/connections.c:200
msgid "BANNER"
msgstr "BANNER"
#. 4
-#: ../cli/src/connections.c:206
+#: ../clients/cli/connections.c:201
msgid "VPN-STATE"
msgstr "VPN-STATUS"
#. 5
-#: ../cli/src/connections.c:207
+#: ../clients/cli/connections.c:202
msgid "CFG"
msgstr "CFG"
-#: ../cli/src/connections.c:220 ../cli/src/devices.c:236
+#: ../clients/cli/connections.c:215 ../clients/cli/devices.c:208
msgid "GENERAL"
msgstr "ALLGEMEIN"
#. 0
#. 6
-#: ../cli/src/connections.c:221 ../cli/src/devices.c:243
+#: ../clients/cli/connections.c:216 ../clients/cli/devices.c:215
msgid "IP4"
msgstr "IP4"
#. 1
#. 7
-#: ../cli/src/connections.c:222 ../cli/src/devices.c:244
+#: ../clients/cli/connections.c:217 ../clients/cli/devices.c:216
msgid "DHCP4"
msgstr "DHCP4"
#. 2
#. 8
-#: ../cli/src/connections.c:223 ../cli/src/devices.c:245
+#: ../clients/cli/connections.c:218 ../clients/cli/devices.c:217
msgid "IP6"
msgstr "IP6"
#. 3
#. 9
-#: ../cli/src/connections.c:224 ../cli/src/devices.c:246
+#: ../clients/cli/connections.c:219 ../clients/cli/devices.c:218
msgid "DHCP6"
msgstr "DHCP6"
-#: ../cli/src/connections.c:261
+#: ../clients/cli/connections.c:261
#, c-format
msgid ""
"Usage: nmcli connection { COMMAND | help }\n"
@@ -702,7 +750,7 @@ msgstr ""
" load <Dateiname> [ <Dateiname>... ]\n"
"\n"
-#: ../cli/src/connections.c:283
+#: ../clients/cli/connections.c:283
#, c-format
msgid ""
"Usage: nmcli connection show { ARGUMENTS | help }\n"
@@ -746,7 +794,7 @@ msgstr ""
"wird,\n"
"werden stattdessen die Verbindungsdetails angezeigt.\n"
-#: ../cli/src/connections.c:305
+#: ../clients/cli/connections.c:305
#, c-format
msgid ""
"Usage: nmcli connection up { ARGUMENTS | help }\n"
@@ -788,7 +836,7 @@ msgstr ""
"nsp - spezifiert den Netzwerkdienstanbieter (nur gültig für WiMAX)\n"
"\n"
-#: ../cli/src/connections.c:326
+#: ../clients/cli/connections.c:326
#, c-format
msgid ""
"Usage: nmcli connection down { ARGUMENTS | help }\n"
@@ -811,7 +859,7 @@ msgstr ""
"anhand dessen Name, UUID oder D-Bus-Pfad identifiziert.\n"
"\n"
-#: ../cli/src/connections.c:339
+#: ../clients/cli/connections.c:339
#, c-format
msgid ""
"Usage: nmcli connection add { ARGUMENTS | help }\n"
@@ -892,13 +940,15 @@ msgid ""
" [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\n"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan|libreswan|"
+"ssh|l2tp|iodine|...\n"
" [user <username>]\n"
"\n"
" olpc-mesh: ssid <SSID>\n"
@@ -911,6 +961,7 @@ msgid ""
"\n"
msgstr ""
"Aufruf: nmcli connection add { ARGUMENTE | help }\n"
+"\n"
" ARGUMENTE := NORMALE_OPTIONEN TYP_SPEZIFISCHE_OPTIONEN IP_OPTIONEN\n"
"\n"
" NORMALE_OPTIONEN:\n"
@@ -934,9 +985,9 @@ msgstr ""
" wimax: [mac <MAC-Adresse>]\n"
" [nsp <NSP>]\n"
"\n"
-" pppoe: username <PPPoE Benutzername>\n"
-" [password <PPPoE Passwort>]\n"
-" [service <PPPoE Dienstname>]\n"
+" pppoe: username <PPPoE-Benutzername>\n"
+" [password <PPPoE-Passwort>]\n"
+" [service <PPPoE-Dienstname>]\n"
" [mtu <MTU>]\n"
" [mac <MAC-Adresse>]\n"
"\n"
@@ -953,7 +1004,7 @@ msgstr ""
" [parent <Schnittstellenname>]\n"
" [p-key <IPoIB P_Key>]\n"
"\n"
-" Bluetooth: [addr <bluetooth-Adresse>]\n"
+" Bluetooth: [addr <Bluetooth-Adresse>]\n"
" [bt-type panu|dun-gsm|dun-cdma]\n"
"\n"
" vlan: dev <parent device (Verbindungs-UUID, Schnittstellenname "
@@ -988,13 +1039,15 @@ msgstr ""
" [hello-time <1-10>]\n"
" [max-age <6-40>]\n"
" [ageing-time <0-1000000>]\n"
+" [mac <MAC-Adresse>]\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"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan|libreswan|"
+"ssh|l2tp|iodine|...\n"
" [user <Benutzername>]\n"
"\n"
" olpc-mesh: ssid <SSID>\n"
@@ -1004,8 +1057,9 @@ msgstr ""
" IP_OPTIONEN:\n"
" [ip4 <IPv4-Adresse>] [gw4 <IPv4-Gateway>]\n"
" [ip6 <IPv6-Adresse>] [gw6 <IPv6-Gateway>]\n"
+"\n"
-#: ../cli/src/connections.c:417
+#: ../clients/cli/connections.c:418
#, c-format
msgid ""
"Usage: nmcli connection modify { ARGUMENTS | help }\n"
@@ -1029,8 +1083,32 @@ msgid ""
"nmcli con mod bond0 -bond.options downdelay\n"
"\n"
msgstr ""
+"Aufruf: nmcli connection modify { ARGUMENTE | help }\n"
+"\n"
+"ARGUMENTE := [Kennung | uuid | Pfad] <Kennung>([+|-]<Einstellung>."
+"<Eigenschaft> <Wert>)+\n"
+"\n"
+"Bearbeitet eine oder mehrere Eigenschaften eines Verbindungsprofils.\n"
+"Das Profil wird anhand dessen Name, UUID oder D-Bus-Pfad identifiziert.\n"
+"bei Eigenschaften mit mehreren Werten wird optional dem Namen ein Präfix\n"
+"»+« oder »-« vorangestellt.\n"
+"»+« ermöglicht Objekte anzuhängen, anstatt den gesamten Wert zu "
+"überschreiben.\n"
+"»-« ermöglicht das Entfernen einzelner Objekte an Stelle des gesamten "
+"Werts.\n"
+"\n"
+"Beispiele:\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:441
+#: ../clients/cli/connections.c:442
#, c-format
msgid ""
"Usage: nmcli connection edit { ARGUMENTS | help }\n"
@@ -1058,7 +1136,7 @@ msgstr ""
"Fügt ein neues Verbindungsprofil in einem interaktiven Editor hinzu.\n"
"\n"
-#: ../cli/src/connections.c:457
+#: ../clients/cli/connections.c:458
#, c-format
msgid ""
"Usage: nmcli connection delete { ARGUMENTS | help }\n"
@@ -1077,7 +1155,7 @@ msgstr ""
"Das Profil wird anhand dessen Name, UUID oder D-Bus-Pfad identifiziert.\n"
"\n"
-#: ../cli/src/connections.c:469
+#: ../clients/cli/connections.c:470
#, c-format
msgid ""
"Usage: nmcli connection reload { help }\n"
@@ -1090,7 +1168,7 @@ msgstr ""
"Lädt alle Verbindungsdateien neu von der Festplatte.\n"
"\n"
-#: ../cli/src/connections.c:478
+#: ../clients/cli/connections.c:479
#, c-format
msgid ""
"Usage: nmcli connection load { ARGUMENTS | help }\n"
@@ -1113,249 +1191,257 @@ msgstr ""
"um sicherzustellen, dass der NetworkManager die Änderungen übernimmt.\n"
"\n"
-#: ../cli/src/connections.c:536
+#: ../clients/cli/connections.c:537
msgid "activating"
msgstr "wird aktiviert"
-#: ../cli/src/connections.c:538
+#: ../clients/cli/connections.c:539
msgid "activated"
msgstr "aktiviert"
-#: ../cli/src/connections.c:542
+#: ../clients/cli/connections.c:543
msgid "deactivated"
msgstr "deaktiviert"
-#: ../cli/src/connections.c:554
+#: ../clients/cli/connections.c:555
msgid "VPN connecting (prepare)"
msgstr "VPN wird verbunden (wird vorbereitet)"
-#: ../cli/src/connections.c:556
+#: ../clients/cli/connections.c:557
msgid "VPN connecting (need authentication)"
msgstr "VPN wird verbunden (Legitimierung wird benötigt)"
-#: ../cli/src/connections.c:558
+#: ../clients/cli/connections.c:559
msgid "VPN connecting"
msgstr "VPN wird verbunden"
-#: ../cli/src/connections.c:560
+#: ../clients/cli/connections.c:561
msgid "VPN connecting (getting IP configuration)"
msgstr "VPN wird verbunden (IP-Einstellungen werden ermittelt)"
-#: ../cli/src/connections.c:562
+#: ../clients/cli/connections.c:563
msgid "VPN connected"
msgstr "VPN verbunden"
-#: ../cli/src/connections.c:564
+#: ../clients/cli/connections.c:565
msgid "VPN connection failed"
msgstr "VPN-Verbindung gescheitert"
-#: ../cli/src/connections.c:566
+#: ../clients/cli/connections.c:567
msgid "VPN disconnected"
msgstr "VPN getrennt"
-#: ../cli/src/connections.c:649
+#: ../clients/cli/connections.c:650
msgid "Connection profile details"
msgstr "Details des Verbindungsprofils"
-#: ../cli/src/connections.c:661 ../cli/src/connections.c:1008
+#: ../clients/cli/connections.c:662 ../clients/cli/connections.c:1014
#, c-format
msgid "Error: 'connection show': %s"
msgstr "Fehler: »connection show«: %s"
-#: ../cli/src/connections.c:805
+#: ../clients/cli/connections.c:806
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
+#: ../clients/cli/connections.c:807 ../clients/cli/connections.c:808
+#: ../clients/cli/connections.c:810 ../clients/cli/connections.c:869
+#: ../clients/cli/connections.c:870 ../clients/cli/connections.c:872
+#: ../clients/cli/connections.c:2814 ../clients/cli/connections.c:6545
+#: ../clients/cli/connections.c:6546 ../clients/cli/devices.c:593
+#: ../clients/cli/devices.c:643 ../clients/cli/devices.c:785
+#: ../clients/cli/devices.c:786 ../clients/cli/devices.c:787
+#: ../clients/cli/devices.c:788 ../clients/cli/devices.c:821
+#: ../clients/cli/devices.c:823 ../clients/cli/devices.c:851
+#: ../clients/cli/devices.c:852 ../clients/cli/devices.c:853
+#: ../clients/cli/devices.c:854 ../clients/cli/devices.c:855
+#: ../clients/cli/devices.c:856 ../clients/cli/devices.c:857
+#: ../clients/cli/network-manager.c:440
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
+#: ../clients/cli/connections.c:807 ../clients/cli/connections.c:808
+#: ../clients/cli/connections.c:810 ../clients/cli/connections.c:869
+#: ../clients/cli/connections.c:870 ../clients/cli/connections.c:872
+#: ../clients/cli/connections.c:2815 ../clients/cli/connections.c:6545
+#: ../clients/cli/connections.c:6546 ../clients/cli/devices.c:593
+#: ../clients/cli/devices.c:643 ../clients/cli/devices.c:785
+#: ../clients/cli/devices.c:786 ../clients/cli/devices.c:787
+#: ../clients/cli/devices.c:788 ../clients/cli/devices.c:821
+#: ../clients/cli/devices.c:823 ../clients/cli/devices.c:851
+#: ../clients/cli/devices.c:852 ../clients/cli/devices.c:853
+#: ../clients/cli/devices.c:854 ../clients/cli/devices.c:855
+#: ../clients/cli/devices.c:856 ../clients/cli/devices.c:857
+#: ../clients/cli/network-manager.c:442
msgid "no"
msgstr "nein"
-#: ../cli/src/connections.c:864 ../cli/src/connections.c:874
-#: ../cli/src/devices.c:596
+#: ../clients/cli/connections.c:865 ../clients/cli/connections.c:875
+#: ../clients/cli/devices.c:583
msgid "N/A"
msgstr "N.V."
-#: ../cli/src/connections.c:996
+#: ../clients/cli/connections.c:1002
msgid "Activate connection details"
msgstr "Verbindungsdetails aktivieren"
-#: ../cli/src/connections.c:1229
+#: ../clients/cli/connections.c:1235
#, c-format
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:1244 ../cli/src/connections.c:1252
+#: ../clients/cli/connections.c:1250 ../clients/cli/connections.c:1258
#, c-format
msgid "'%s' has to be alone"
msgstr "»%s« muss allein stehen"
-#: ../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
+#: ../clients/cli/connections.c:1289 ../clients/cli/connections.c:2013
+#: ../clients/cli/connections.c:2073 ../clients/cli/connections.c:8048
+#: ../clients/cli/connections.c:8256 ../clients/cli/connections.c:8349
+#: ../clients/cli/connections.c:8377 ../clients/cli/devices.c:1188
+#: ../clients/cli/devices.c:1236 ../clients/cli/devices.c:1399
+#: ../clients/cli/devices.c:1533 ../clients/cli/devices.c:1627
+#: ../clients/cli/devices.c:1770 ../clients/cli/devices.c:2214
+#: ../clients/cli/devices.c:2513 ../clients/cli/network-manager.c:482
#, c-format
msgid "Error: NetworkManager is not running."
msgstr "Fehler: NetworkManager wird nicht ausgeführt"
#. Add headers
-#: ../cli/src/connections.c:1313
+#: ../clients/cli/connections.c:1319
msgid "NetworkManager active profiles"
msgstr "NetworkManager aktive Profile"
-#: ../cli/src/connections.c:1314
+#: ../clients/cli/connections.c:1320
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
+#: ../clients/cli/connections.c:1357 ../clients/cli/connections.c:1958
+#: ../clients/cli/connections.c:1974 ../clients/cli/connections.c:1983
+#: ../clients/cli/connections.c:1993 ../clients/cli/connections.c:2090
+#: ../clients/cli/connections.c:8064 ../clients/cli/connections.c:8287
+#: ../clients/cli/devices.c:1728 ../clients/cli/devices.c:1736
+#: ../clients/cli/devices.c:2127 ../clients/cli/devices.c:2134
+#: ../clients/cli/devices.c:2148 ../clients/cli/devices.c:2155
+#: ../clients/cli/devices.c:2172 ../clients/cli/devices.c:2180
+#: ../clients/cli/devices.c:2376 ../clients/cli/devices.c:2472
+#: ../clients/cli/devices.c:2479
#, c-format
msgid "Error: %s argument is missing."
msgstr "Fehler: Argument %s fehlt."
-#: ../cli/src/connections.c:1402
+#: ../clients/cli/connections.c:1408
#, c-format
msgid "Error: %s - no such connection profile."
msgstr "Fehler: Verbindungsprofil %s existiert nicht."
-#: ../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
+#: ../clients/cli/connections.c:1424 ../clients/cli/connections.c:2026
+#: ../clients/cli/connections.c:8355 ../clients/cli/connections.c:8396
+#: ../clients/cli/connections.c:8601 ../clients/cli/devices.c:2355
+#: ../clients/cli/devices.c:2807 ../clients/cli/network-manager.c:537
+#: ../clients/cli/network-manager.c:580 ../clients/cli/network-manager.c:597
+#: ../clients/cli/network-manager.c:644 ../clients/cli/network-manager.c:658
+#: ../clients/cli/network-manager.c:775 ../clients/cli/network-manager.c:819
+#: ../clients/cli/network-manager.c:839
#, c-format
msgid "Error: %s."
msgstr "Fehler: %s."
-#: ../cli/src/connections.c:1513
+#: ../clients/cli/connections.c:1519
#, c-format
msgid "no active connection on device '%s'"
msgstr "Keine aktive Verbindung auf Gerät »%s«"
-#: ../cli/src/connections.c:1521
+#: ../clients/cli/connections.c:1527
msgid "no active connection or device"
msgstr "Keine aktive Verbindung oder Gerät"
-#: ../cli/src/connections.c:1592
+#: ../clients/cli/connections.c:1598
#, c-format
msgid "device '%s' not compatible with connection '%s'"
msgstr "Gerät »%s« ist nicht mit der Verbindung »%s« kompatibel"
-#: ../cli/src/connections.c:1595
+#: ../clients/cli/connections.c:1601
#, c-format
msgid "no device found for connection '%s'"
msgstr "Für die Verbindung »%s« wurde kein Gerät gefunden"
-#: ../cli/src/connections.c:1607
+#: ../clients/cli/connections.c:1613
msgid "unknown reason"
msgstr "unbekannter Grund"
-#: ../cli/src/connections.c:1609 ../cli/src/network-manager.c:288
+#: ../clients/cli/connections.c:1615 ../clients/cli/network-manager.c:286
msgid "none"
msgstr "kein"
-#: ../cli/src/connections.c:1611
+#: ../clients/cli/connections.c:1617
msgid "the user was disconnected"
msgstr "Der Benutzer wurde getrennt"
-#: ../cli/src/connections.c:1613
+#: ../clients/cli/connections.c:1619
msgid "the base network connection was interrupted"
msgstr "Die Basisverbindung wurde unterbrochen"
-#: ../cli/src/connections.c:1615
+#: ../clients/cli/connections.c:1621
msgid "the VPN service stopped unexpectedly"
msgstr "Der VPN-Dienst wurde unerwartet gestoppt"
-#: ../cli/src/connections.c:1617
+#: ../clients/cli/connections.c:1623
msgid "the VPN service returned invalid configuration"
msgstr "Der VPN-Dienst gab ungültige Einstellungen zurück"
-#: ../cli/src/connections.c:1619
+#: ../clients/cli/connections.c:1625
msgid "the connection attempt timed out"
msgstr "Der Verbindungsversuch benötigte zu viel Zeit"
-#: ../cli/src/connections.c:1621
+#: ../clients/cli/connections.c:1627
msgid "the VPN service did not start in time"
msgstr "Der VPN-Dienst wurde nicht rechtzeitig gestartet"
-#: ../cli/src/connections.c:1623
+#: ../clients/cli/connections.c:1629
msgid "the VPN service failed to start"
msgstr "Der VPN-Dienst konnte nicht gestartet werden"
-#: ../cli/src/connections.c:1625
+#: ../clients/cli/connections.c:1631
msgid "no valid VPN secrets"
msgstr "Keine gültigen VPN-Schlüssel"
-#: ../cli/src/connections.c:1627
+#: ../clients/cli/connections.c:1633
msgid "invalid VPN secrets"
msgstr "Ungültige VPN-Schlüssel"
-#: ../cli/src/connections.c:1629
+#: ../clients/cli/connections.c:1635
msgid "the connection was removed"
msgstr "Die Verbindung wurde entfernt"
-#: ../cli/src/connections.c:1646 ../cli/src/connections.c:1802
-#: ../cli/src/connections.c:6344
+#: ../clients/cli/connections.c:1652 ../clients/cli/connections.c:1808
+#: ../clients/cli/connections.c:6441
#, c-format
msgid "Connection successfully activated (D-Bus active path: %s)\n"
msgstr "Verbindung wurde erfolgreich aktiviert (aktiver D-Bus-Pfad: %s)\n"
-#: ../cli/src/connections.c:1651
+#: ../clients/cli/connections.c:1657
#, c-format
msgid "Error: Connection activation failed."
msgstr "Fehler: Aktivierung der Verbindung ist gescheitert."
-#: ../cli/src/connections.c:1676
+#: ../clients/cli/connections.c:1682
#, 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:1683
+#: ../clients/cli/connections.c:1689
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "Fehler: Aktivierung der Verbindung ist gescheitert: %s."
-#: ../cli/src/connections.c:1701 ../cli/src/devices.c:1296
+#: ../clients/cli/connections.c:1707 ../clients/cli/devices.c:1285
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "Fehler: Zeitbeschränkung von %d Sekunden ist abgelaufen."
-#: ../cli/src/connections.c:1766
+#: ../clients/cli/connections.c:1772
#, c-format
msgid ""
"Error: Device '%s' is waiting for slaves before proceeding with activation."
@@ -1363,87 +1449,83 @@ msgstr ""
"Fehler: Gerät »%s« wartet auf »Slaves«, bevor mit der Aktivierung "
"fortgefahren wird."
-#: ../cli/src/connections.c:1786
+#: ../clients/cli/connections.c:1792
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "Fehler: Aktivierung der Verbindung ist gescheitert: %s"
-#: ../cli/src/connections.c:1891 ../cli/src/connections.c:2023
+#: ../clients/cli/connections.c:1897 ../clients/cli/connections.c:2027
msgid "unknown error"
msgstr "unbekannter Fehler"
-#: ../cli/src/connections.c:1899
+#: ../clients/cli/connections.c:1905
#, c-format
msgid "unknown device '%s'."
msgstr "Unbekanntes Gerät »%s«,"
-#: ../cli/src/connections.c:1904
+#: ../clients/cli/connections.c:1910
msgid "neither a valid connection nor device given"
msgstr "weder eine gültige Verbindung noch ein Gerät angegeben"
-#: ../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
+#: ../clients/cli/connections.c:2002 ../clients/cli/devices.c:1162
+#: ../clients/cli/devices.c:1742 ../clients/cli/devices.c:2191
+#: ../clients/cli/devices.c:2485
#, c-format
msgid "Unknown parameter: %s\n"
msgstr "Unbekannter Parameter: %s\n"
-#: ../cli/src/connections.c:2031
+#: ../clients/cli/connections.c:2035
msgid "preparing"
msgstr "Vorbereitung läuft"
-#: ../cli/src/connections.c:2059 ../cli/src/connections.c:8146
-#: ../cli/src/connections.c:8261
+#: ../clients/cli/connections.c:2063 ../clients/cli/connections.c:8268
+#: ../clients/cli/connections.c:8383
#, c-format
msgid "Error: No connection specified."
msgstr "Fehler: Keine Verbindung angegeben."
-#: ../cli/src/connections.c:2096
+#: ../clients/cli/connections.c:2100
#, c-format
msgid "Error: '%s' is not an active connection."
msgstr "Fehler: »%s« ist keine aktive Verbindung."
-#: ../cli/src/connections.c:2408 ../cli/src/utils.c:513
+#: ../clients/cli/connections.c:2401 ../clients/cli/utils.c:515
#, c-format
msgid "'%s' not among [%s]"
msgstr "»%s« ist nicht unter [%s]"
-#: ../cli/src/connections.c:2490
+#: ../clients/cli/connections.c:2483
#, c-format
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:2491 ../libnm-glib/nm-device.c:1824
-#: ../tui/nm-editor-utils.c:173
+#. Ask for optional arguments
+#: ../clients/cli/connections.c:2484 ../clients/cli/connections.c:2930
+#: ../clients/tui/nm-editor-utils.c:164 ../libnm-glib/nm-device.c:1800
msgid "InfiniBand"
msgstr "InfiniBand"
-#: ../cli/src/connections.c:2491 ../libnm-glib/nm-device.c:1812
-#: ../tui/nm-editor-utils.c:156
+#: ../clients/cli/connections.c:2484 ../clients/tui/nm-editor-utils.c:147
+#: ../libnm-glib/nm-device.c:1788
msgid "Ethernet"
msgstr "Ethernet"
-#: ../cli/src/connections.c:2514
+#: ../clients/cli/connections.c:2510
#, c-format
msgid "Error: 'mtu': '%s' is not a valid MTU."
msgstr "Fehler: »mtu«: »%s« ist keine gültige MTU."
-#: ../cli/src/connections.c:2530
+#: ../clients/cli/connections.c:2526
#, c-format
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:2551
+#: ../clients/cli/connections.c:2547
#, c-format
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:2567
+#: ../clients/cli/connections.c:2576
#, c-format
msgid ""
"Error: 'mode': '%s' is not a valid InfiniBand transport mode [datagram, "
@@ -1452,495 +1534,469 @@ msgstr ""
"Fehler: »mode»: »%s« ist kein gültiger InfiniBand-Transportmodus [datagram, "
"connected]."
-#: ../cli/src/connections.c:2583
+#: ../clients/cli/connections.c:2590
#, c-format
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
+#: ../clients/cli/connections.c:2612
#, c-format
msgid "Error: '%s': '%s' is not valid; %s "
msgstr "Fehler: »%s«: »%s« ist ungültig; %s "
-#: ../cli/src/connections.c:2798
+#: ../clients/cli/connections.c:2805
#, 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
+#. Ask for optional arguments.
+#: ../clients/cli/connections.c:2861
+#, 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] "Es gibt %d optionales Argument für den Verbindungstyp »%s«.\n"
+msgstr[1] "Es gibt %d optionale Argumente für den Verbindungstyp »%s«.\n"
+
+#: ../clients/cli/connections.c:2864
+#, c-format
+msgid "Do you want to provide it? %s"
+msgid_plural "Do you want to provide them? %s"
+msgstr[0] "Möchten Sie es zur Verfügung stellen? »%s«"
+msgstr[1] "Möchten Sie diese zur Verfügung stellen? »%s«"
+
+#: ../clients/cli/connections.c:2879
msgid "ethernet"
msgstr "Ethernet"
-#: ../cli/src/connections.c:2812 ../libnm-glib/nm-device.c:1814
-#: ../tui/nm-editor-utils.c:164
+#: ../clients/cli/connections.c:2879 ../clients/tui/nm-editor-utils.c:155
+#: ../libnm-glib/nm-device.c:1790
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
+#: ../clients/cli/connections.c:2887 ../clients/cli/connections.c:2935
+#: ../clients/cli/connections.c:3044 ../clients/cli/connections.c:3123
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
+#: ../clients/cli/connections.c:2898 ../clients/cli/connections.c:2946
+#: ../clients/cli/connections.c:3016 ../clients/cli/connections.c:3055
+#: ../clients/cli/connections.c:3410
msgid "MAC [none]: "
msgstr "MAC [keine]: "
-#: ../cli/src/connections.c:2846
+#: ../clients/cli/connections.c:2909
msgid "Cloned MAC [none]: "
msgstr "Geklonte MAC [keine]: "
-#. Ask for optional arguments
-#: ../cli/src/connections.c:2869
+#: ../clients/cli/connections.c:2957
#, 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"
+msgid "Transport mode %s"
+msgstr "Ãœbertragungsmodus %s"
-#: ../cli/src/connections.c:2900
-msgid "Transport mode (datagram or connected) [datagram]: "
-msgstr "Transportmodus (»datagram« oder »connected«) [datagram]: "
-
-#: ../cli/src/connections.c:2913
+#: ../clients/cli/connections.c:2970
msgid "Parent interface [none]: "
msgstr "Ãœbergeordnete Schnittstelle [keine]: "
-#: ../cli/src/connections.c:2924
+#: ../clients/cli/connections.c:2981
msgid "P_KEY [none]: "
msgstr "P_KEY [keiner]: "
-#: ../cli/src/connections.c:2934
+#: ../clients/cli/connections.c:2991
#, 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]: "
+#: ../clients/cli/connections.c:3011 ../libnm-glib/nm-device.c:1796
+msgid "WiMAX"
+msgstr "WiMAX"
#. 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"
+#: ../clients/cli/connections.c:3034
+msgid "PPPoE"
+msgstr "PPPoE"
-#: ../cli/src/connections.c:2999 ../cli/src/connections.c:3047
+#: ../clients/cli/connections.c:3038 ../clients/cli/connections.c:3076
msgid "Password [none]: "
msgstr "Passwort [keines]: "
-#: ../cli/src/connections.c:3001
+#: ../clients/cli/connections.c:3040
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 ""
-"Es gibt 5 optionale Argumente für den Verbindungstyp »Mobiles Breitband«.\n"
+#: ../clients/cli/connections.c:3070
+msgid "mobile broadband"
+msgstr "Mobiles Breitband"
-#: ../cli/src/connections.c:3045 ../cli/src/connections.c:3490
+#: ../clients/cli/connections.c:3074 ../clients/cli/connections.c:3482
msgid "Username [none]: "
msgstr "Benutzername [keiner]: "
#. 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"
+#: ../clients/cli/connections.c:3089
+msgid "bluetooth"
+msgstr "bluetooth"
-#: ../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]: "
+#: ../clients/cli/connections.c:3096
+#, c-format
+msgid "Bluetooth type %s"
+msgstr "Bluetooth-Typ %s"
-#: ../cli/src/connections.c:3078
+#: ../clients/cli/connections.c:3102
#, 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"
#. 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"
+#. 11
+#: ../clients/cli/connections.c:3118 ../clients/cli/devices.c:220
+#: ../clients/tui/nm-editor-utils.c:218 ../clients/tui/nmt-page-vlan.c:51
+#: ../libnm-core/nm-connection.c:1590 ../libnm-glib/nm-device.c:1808
+#: ../libnm-util/nm-connection.c:1601
+msgid "VLAN"
+msgstr "VLAN"
-#: ../cli/src/connections.c:3117
+#: ../clients/cli/connections.c:3134
msgid "VLAN flags (<0-7>) [none]: "
msgstr "VLAN-Flags (<0-7>) [keine]: "
-#: ../cli/src/connections.c:3128
+#: ../clients/cli/connections.c:3145
msgid "Ingress priority maps [none]: "
msgstr "Eingehende Prioritätsumschlüsselungen [keine]:"
-#: ../cli/src/connections.c:3139
+#: ../clients/cli/connections.c:3156
msgid "Egress priority maps [none]: "
msgstr "Ausgehende Prioritätsumschlüsselungen [keine]:"
-#. 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"
-
-#: ../cli/src/connections.c:3175
+#: ../clients/cli/connections.c:3167
msgid "Bonding mode [balance-rr]: "
msgstr "Bündelungsmodus [balance-rr]: "
-#: ../cli/src/connections.c:3191
+#. Ask for optional 'bond' arguments.
+#: ../clients/cli/connections.c:3182
+msgid "bond"
+msgstr "Bündelung"
+
+#: ../clients/cli/connections.c:3204
msgid "Bonding primary interface [none]: "
msgstr "Primäre Schnittstelle der Bündelung [keine]: "
-#: ../cli/src/connections.c:3194
+#: ../clients/cli/connections.c:3207
#, 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"
-#: ../cli/src/connections.c:3202
-msgid "Bonding monitoring mode (miimon or arp) [miimon]: "
-msgstr "Bindungs-Ãœberwachungsmodus (miimon oder arp) [miimon]: "
+#: ../clients/cli/connections.c:3215
+#, c-format
+msgid "Bonding monitoring mode %s"
+msgstr "Überwachungsmodus %s der Bündelung"
-#: ../cli/src/connections.c:3207
+#: ../clients/cli/connections.c:3221
#, 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
+#: ../clients/cli/connections.c:3230
msgid "Bonding miimon [100]: "
msgstr "Bündelung »miimon« [100]: "
-#: ../cli/src/connections.c:3219
+#: ../clients/cli/connections.c:3233
#, 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
+#: ../clients/cli/connections.c:3241
msgid "Bonding downdelay [0]: "
msgstr "Bündelung »downdelay« [0]: "
-#: ../cli/src/connections.c:3230
+#: ../clients/cli/connections.c:3244
#, 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
+#: ../clients/cli/connections.c:3252
msgid "Bonding updelay [0]: "
msgstr "Bündelung »updelay« [0]: "
-#: ../cli/src/connections.c:3241
+#: ../clients/cli/connections.c:3255
#, 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
+#: ../clients/cli/connections.c:3264
msgid "Bonding arp-interval [0]: "
msgstr "Bündelung »arp-interval« [0]: "
-#: ../cli/src/connections.c:3253
+#: ../clients/cli/connections.c:3267
#, 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
+#: ../clients/cli/connections.c:3275
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
+#: ../clients/cli/connections.c:3295
msgid "Team JSON configuration [none]: "
msgstr "JSON-Konfiguration der Bündelung [keine]: "
-#: ../cli/src/connections.c:3308
+#: ../clients/cli/connections.c:3312
msgid "team"
msgstr "Bündelung"
-#: ../cli/src/connections.c:3314
+#: ../clients/cli/connections.c:3318
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"
+#: ../clients/cli/connections.c:3330
+msgid "bridge"
+msgstr "Brücke"
-#: ../cli/src/connections.c:3338
-msgid "Enable STP (yes/no) [yes]: "
-msgstr "STP aktivieren (yes/no) [yes]: "
+#: ../clients/cli/connections.c:3336
+#, c-format
+msgid "Enable STP %s"
+msgstr "STP %s aktivieren"
-#: ../cli/src/connections.c:3342
+#: ../clients/cli/connections.c:3341
#, c-format
-msgid "Error: 'stp': '%s'.\n"
-msgstr "Fehler: »stp«: »%s«.\n"
+msgid "Error: 'stp': %s.\n"
+msgstr "Fehler: »STP«: %s \n"
-#: ../cli/src/connections.c:3350
+#: ../clients/cli/connections.c:3349
msgid "STP priority [32768]: "
msgstr "STP-Priorität [32768]: "
-#: ../cli/src/connections.c:3354
+#: ../clients/cli/connections.c:3353
#, 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
+#: ../clients/cli/connections.c:3361
msgid "Forward delay [15]: "
msgstr "Weiterleitungsverzögerung [15]: "
-#: ../cli/src/connections.c:3366
+#: ../clients/cli/connections.c:3365
#, 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
+#: ../clients/cli/connections.c:3374
msgid "Hello time [2]: "
msgstr "Hello-Zeit [2]: "
-#: ../cli/src/connections.c:3379
+#: ../clients/cli/connections.c:3378
#, 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
+#: ../clients/cli/connections.c:3386
msgid "Max age [20]: "
msgstr "Maximales Alter [20]: "
-#: ../cli/src/connections.c:3391
+#: ../clients/cli/connections.c:3390
#, 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
+#: ../clients/cli/connections.c:3398
msgid "MAC address ageing time [300]: "
msgstr "Verfallszeit für MAC-Adressen [300]: "
-#: ../cli/src/connections.c:3403
+#: ../clients/cli/connections.c:3402
#, 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"
+#: ../clients/cli/connections.c:3429
+msgid "bridge-slave"
+msgstr "Sklave der Netzwerkbrücke"
-#: ../cli/src/connections.c:3433
+#: ../clients/cli/connections.c:3434
msgid "Bridge port priority [32]: "
msgstr "Bridge-Port-Priorität [32]: "
-#: ../cli/src/connections.c:3446
+#: ../clients/cli/connections.c:3447
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
+#: ../clients/cli/connections.c:3461
#, c-format
-msgid "Error: 'hairpin': '%s'.\n"
-msgstr "Fehler: »hairpin«: »%s«.\n"
+msgid "Hairpin %s"
+msgstr "Hairpin %s"
-#. Ask for optional 'vpn' arguments.
-#: ../cli/src/connections.c:3482
+#: ../clients/cli/connections.c:3466
#, 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"
+msgid "Error: 'hairpin': %s.\n"
+msgstr "Fehler: »hairpin«: %s \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"
+#: ../clients/cli/connections.c:3493 ../libnm-glib/nm-device.c:1794
+msgid "OLPC Mesh"
+msgstr "OLPC-Mesh"
-#: ../cli/src/connections.c:3515
+#: ../clients/cli/connections.c:3498
msgid "OLPC Mesh channel [1]: "
msgstr "»OLPC Mesh« Kanal [1]: "
-#: ../cli/src/connections.c:3518
+#: ../clients/cli/connections.c:3501
#, 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
+#: ../clients/cli/connections.c:3509
msgid "DHCP anycast MAC address [none]: "
msgstr "DHCP anycast MAC-Adresse [keine]: "
-#: ../cli/src/connections.c:3574
+#: ../clients/cli/connections.c:3554
msgid "IPv4 address (IP[/plen] [gateway]) [none]: "
msgstr "IPv4-Adresse (IP[/plen] [Gateway]) [keine]: "
-#: ../cli/src/connections.c:3576
+#: ../clients/cli/connections.c:3556
msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
msgstr "IPv6-Adresse (IP[/plen] [Gateway]) [keine]: "
-#: ../cli/src/connections.c:3594
+#: ../clients/cli/connections.c:3574
#, c-format
msgid " Address successfully added: %s %s\n"
msgstr " Adresse erfolgreich hinzugefügt: %s %s\n"
-#: ../cli/src/connections.c:3596
+#: ../clients/cli/connections.c:3576
#, c-format
msgid " Warning: address already present: %s %s\n"
msgstr " Warnung: Adresse ist bereits vorhanden: %s %s\n"
-#: ../cli/src/connections.c:3598
+#: ../clients/cli/connections.c:3578
#, 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
+#: ../clients/cli/connections.c:3580 ../clients/cli/connections.c:4437
+#: ../clients/cli/connections.c:4500 ../clients/cli/connections.c:4911
+#: ../clients/cli/connections.c:4921
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] "
+#: ../clients/cli/connections.c:3597
+#, c-format
+msgid "Do you want to add IP addresses? %s"
+msgstr "Möchten Sie die IP-Adresse hinzufügen? %s"
-#: ../cli/src/connections.c:3624
+#: ../clients/cli/connections.c:3604
#, 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
+#: ../clients/cli/connections.c:3750
#, 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
+#: ../clients/cli/connections.c:3806 ../clients/cli/connections.c:4827
msgid "SSID: "
msgstr "SSID: "
-#: ../cli/src/connections.c:3829 ../cli/src/connections.c:4831
+#: ../clients/cli/connections.c:3809 ../clients/cli/connections.c:4830
msgid "Error: 'ssid' is required."
msgstr "Fehler: »SSID« ist notwendig."
-#: ../cli/src/connections.c:3893
+#: ../clients/cli/connections.c:3873
msgid "WiMAX NSP name: "
msgstr "WiMAX NSP-Name: "
-#: ../cli/src/connections.c:3896
+#: ../clients/cli/connections.c:3876
msgid "Error: 'nsp' is required."
msgstr "Fehler: »nsp« ist notwendig."
-#: ../cli/src/connections.c:3951
+#: ../clients/cli/connections.c:3931
msgid "PPPoE username: "
msgstr "PPPoE Benutzername: "
-#: ../cli/src/connections.c:3954
+#: ../clients/cli/connections.c:3934
msgid "Error: 'username' is required."
msgstr "Fehler: »username« ist notwendig."
-#: ../cli/src/connections.c:4025
+#: ../clients/cli/connections.c:4005
msgid "APN: "
msgstr "APN: "
-#: ../cli/src/connections.c:4028
+#: ../clients/cli/connections.c:4008
msgid "Error: 'apn' is required."
msgstr "Fehler: »apn« ist notwendig."
-#: ../cli/src/connections.c:4087
+#: ../clients/cli/connections.c:4067
msgid "Bluetooth device address: "
msgstr "Bluetooth Geräteadresse: "
-#: ../cli/src/connections.c:4090
+#: ../clients/cli/connections.c:4070
msgid "Error: 'addr' is required."
msgstr "Fehler: »addr« ist notwendig."
-#: ../cli/src/connections.c:4133
+#: ../clients/cli/connections.c:4113
#, 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
+#: ../clients/cli/connections.c:4158
msgid "VLAN parent device or connection UUID: "
msgstr "Übergeordnetes VLAN-Gerät oder UUID der Verbindung: "
-#: ../cli/src/connections.c:4181
+#: ../clients/cli/connections.c:4161
msgid "Error: 'dev' is required."
msgstr "Fehler: »dev« ist notwendig."
-#: ../cli/src/connections.c:4185
+#: ../clients/cli/connections.c:4165
msgid "VLAN ID <0-4095>: "
msgstr "VLAN-Kennung <0-4095>: "
-#: ../cli/src/connections.c:4188
+#: ../clients/cli/connections.c:4168
msgid "Error: 'id' is required."
msgstr "Fehler: »id« ist notwendig."
-#: ../cli/src/connections.c:4194
+#: ../clients/cli/connections.c:4174
#, 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
+#: ../clients/cli/connections.c:4184
#, 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
+#: ../clients/cli/connections.c:4319
#, c-format
msgid "Error: 'mode': %s."
msgstr "Fehler: »mode«: %s."
-#: ../cli/src/connections.c:4348
+#: ../clients/cli/connections.c:4328
#, 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
+#: ../clients/cli/connections.c:4378 ../clients/cli/connections.c:4478
+#: ../clients/cli/connections.c:4685
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
+#: ../clients/cli/connections.c:4384 ../clients/cli/connections.c:4484
+#: ../clients/cli/connections.c:4691
#, 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
+#: ../clients/cli/connections.c:4387 ../clients/cli/connections.c:4492
+#: ../clients/cli/connections.c:4694
#, c-format
msgid ""
"Warning: 'type' is currently ignored. We only support ethernet slaves for "
@@ -1949,96 +2005,80 @@ 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
+#: ../clients/cli/connections.c:4587
#, 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
+#: ../clients/cli/connections.c:4721
#, 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
+#: ../clients/cli/connections.c:4774
msgid "Error: 'vpn-type' is required."
msgstr "Fehler: »vpn-type« ist notwendig."
-#: ../cli/src/connections.c:4786
+#: ../clients/cli/connections.c:4781
#, c-format
-msgid "Error: 'vpn-type': %s."
-msgstr "Fehler: »vpn-type«: %s."
+msgid "Warning: 'vpn-type': %s not known.\n"
+msgstr "Warnung: »vpn-type«: %s ist unbekannt. \n"
-#: ../cli/src/connections.c:4844
+#: ../clients/cli/connections.c:4843
#, 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
+#: ../clients/cli/connections.c:4878
#, c-format
msgid "Error: '%s' is not a valid connection type."
msgstr "Fehler: »%s« ist kein gültiger Verbindungstyp."
-#: ../cli/src/connections.c:4977
+#: ../clients/cli/connections.c:4976
#, 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
+#: ../clients/cli/connections.c:4980
#, 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
+#: ../clients/cli/connections.c:5194
#, c-format
msgid "Error: 'type' argument is required."
msgstr "Fehler: Das Argument »type« ist notwendig."
-#: ../cli/src/connections.c:5065
+#: ../clients/cli/connections.c:5202
#, c-format
msgid "Error: invalid connection type; %s."
msgstr "Fehler: Unbekannter Verbindungstyp: %s."
-#: ../cli/src/connections.c:5074
+#: ../clients/cli/connections.c:5211
#, c-format
msgid "Error: 'autoconnect': %s."
msgstr "Fehler: »autoconnect«: %s."
-#: ../cli/src/connections.c:5084
+#: ../clients/cli/connections.c:5221
#, c-format
msgid "Error: 'save': %s."
msgstr "Fehler: »save«: %s."
-#: ../cli/src/connections.c:5100
+#: ../clients/cli/connections.c:5237
msgid "Interface name [*]: "
msgstr "Schnittstellenname [*]: "
-#: ../cli/src/connections.c:5105
+#: ../clients/cli/connections.c:5242
#, c-format
msgid "Error: 'ifname' argument is required."
msgstr "Fehler: Das Argument »ifname« ist notwendig."
-#: ../cli/src/connections.c:5112
+#: ../clients/cli/connections.c:5249
#, 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
+#: ../clients/cli/connections.c:6037
#, c-format
msgid "['%s' setting values]\n"
msgstr "['%s' Werte werden gesetzt]\n"
@@ -2046,7 +2086,7 @@ 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
+#: ../clients/cli/connections.c:6119
#, c-format
msgid ""
"---[ Main menu ]---\n"
@@ -2055,7 +2095,7 @@ msgid ""
"value\n"
"set [<setting>.<prop> <value>] :: set property value\n"
"describe [<setting>.<prop>] :: describe property\n"
-"print [all] :: print the connection\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"
@@ -2072,7 +2112,7 @@ msgstr ""
"set [<Einstellung>.<Eigenschaft> <Wert>] :: Eigenschaftswert "
"festlegen\n"
"describe [<Einstellung>.<Eigenschaft>] :: Eigenschaft beschreiben\n"
-"print [all] :: Die Verbindung ausgeben\n"
+"print [all | <Einstellung>[.<Eigenschaft>]] :: 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"
@@ -2081,7 +2121,7 @@ msgstr ""
"nmcli <conf-option> <Wert> :: nmcli-Konfiguration\n"
"quit :: nmcli beenden\n"
-#: ../cli/src/connections.c:6049
+#: ../clients/cli/connections.c:6146
#, c-format
msgid ""
"goto <setting>[.<prop>] | <prop> :: enter setting/property for editing\n"
@@ -2101,7 +2141,7 @@ msgstr ""
" nmcli connection> goto secondaries\n"
" nmcli> goto ipv4.addresses\n"
-#: ../cli/src/connections.c:6056
+#: ../clients/cli/connections.c:6153
#, c-format
msgid ""
"remove <setting>[.<prop>] :: remove setting or reset property value\n"
@@ -2123,7 +2163,7 @@ msgstr ""
"Beispiele: nmcli> remove wifi-sec\n"
" nmcli> remove eth.mtu\n"
-#: ../cli/src/connections.c:6063
+#: ../clients/cli/connections.c:6160
#, c-format
msgid ""
"set [<setting>.<prop> <value>] :: set property value\n"
@@ -2138,7 +2178,7 @@ msgstr ""
"\n"
"Beispiel: nmcli> s con.id Meine Verbindung\n"
-#: ../cli/src/connections.c:6068
+#: ../clients/cli/connections.c:6165
#, c-format
msgid ""
"describe [<setting>.<prop>] :: describe property\n"
@@ -2151,7 +2191,7 @@ msgstr ""
"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
+#: ../clients/cli/connections.c:6170
#, c-format
msgid ""
"print [all] :: print setting or connection values\n"
@@ -2166,7 +2206,7 @@ msgstr ""
"\n"
"Beispiel: nmcli ipv4> print all\n"
-#: ../cli/src/connections.c:6078
+#: ../clients/cli/connections.c:6175
#, c-format
msgid ""
"verify [all] :: verify setting or connection validity\n"
@@ -2185,7 +2225,7 @@ msgstr ""
"Beispiele: nmcli> verify\n"
" nmcli bond> verify\n"
-#: ../cli/src/connections.c:6085
+#: ../clients/cli/connections.c:6182
#, c-format
msgid ""
"save [persistent|temporary] :: save the connection\n"
@@ -2200,8 +2240,19 @@ msgid ""
"connection\n"
"profile must be deleted.\n"
msgstr ""
+"save [persistent|temporary] :: die Verbindung speichern\n"
+"\n"
+"Sendet das Verbindungsprofil an NetworkManager. Dieser speichert es\n"
+"entweder dauerhaft oder hält die Informationen im Speicher. »save« ohne\n"
+"Argument bedeutet »dauerhaft speichern«.\n"
+"Beachten Sie, dass diese Einstellungen Neustarts überdauern, sobald Sie\n"
+"das Verbindungsprofil dauerhaft speichern. Spätere Änderungen sind\n"
+"ebenfalls entweder vorübergehend oder dauerhaft, aber vorübergehende\n"
+"Änderungen gehen nach einem Neustart verloren. Wenn Sie die dauerhafte\n"
+"Verbindung volständig löschen möchten, so muss das Verbindungsprofil\n"
+"gelöscht werden.\n"
-#: ../cli/src/connections.c:6096
+#: ../clients/cli/connections.c:6193
#, c-format
msgid ""
"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
@@ -2223,7 +2274,7 @@ msgstr ""
"/<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
+#: ../clients/cli/connections.c:6200 ../clients/cli/connections.c:6357
#, c-format
msgid ""
"back :: go to upper menu level\n"
@@ -2232,7 +2283,7 @@ msgstr ""
"back :: Eine Menüebene nach oben gehen\n"
"\n"
-#: ../cli/src/connections.c:6106
+#: ../clients/cli/connections.c:6203
#, c-format
msgid ""
"help/? [<command>] :: help for the nmcli commands\n"
@@ -2241,7 +2292,7 @@ msgstr ""
"help/? [<command>] :: Hilfe zu den nmcli-Befehlen\n"
"\n"
-#: ../cli/src/connections.c:6109
+#: ../clients/cli/connections.c:6206
#, c-format
msgid ""
"nmcli [<conf-option> <value>] :: nmcli configuration\n"
@@ -2284,7 +2335,7 @@ msgstr ""
" nmcli> nmcli save-confirmation no\n"
" nmcli> nmcli prompt-color 3\n"
-#: ../cli/src/connections.c:6129 ../cli/src/connections.c:6266
+#: ../clients/cli/connections.c:6226 ../clients/cli/connections.c:6363
#, c-format
msgid ""
"quit :: exit nmcli\n"
@@ -2297,8 +2348,8 @@ msgstr ""
"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
+#: ../clients/cli/connections.c:6231 ../clients/cli/connections.c:6368
+#: ../clients/cli/connections.c:6756 ../clients/cli/connections.c:7649
#, c-format
msgid "Unknown command: '%s'\n"
msgstr "Unbekannter Befehl: »%s«\n"
@@ -2306,7 +2357,7 @@ 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
+#: ../clients/cli/connections.c:6297
#, c-format
msgid ""
"---[ Property menu ]---\n"
@@ -2335,7 +2386,7 @@ msgstr ""
"ausgeben\n"
"quit :: nmcli beenden\n"
-#: ../cli/src/connections.c:6225
+#: ../clients/cli/connections.c:6322
#, c-format
msgid ""
"set [<value>] :: set new value\n"
@@ -2346,7 +2397,7 @@ msgstr ""
"\n"
"Dieser Befehl setzt den <Wert> für die Eigenschaft\n"
-#: ../cli/src/connections.c:6229
+#: ../clients/cli/connections.c:6326
#, c-format
msgid ""
"add [<value>] :: append new value to the property\n"
@@ -2361,7 +2412,7 @@ msgstr ""
"die Eigenschaft ein Container-Typ ist. Für einwertige Eigenschaften wird der "
"Wert ersetzt (genau wie »set«).\n"
-#: ../cli/src/connections.c:6235
+#: ../clients/cli/connections.c:6332
#, c-format
msgid ""
"change :: change current value\n"
@@ -2372,7 +2423,7 @@ msgstr ""
"\n"
"Zeigt den aktuellen Wert an und lässt ihn bearbeiten.\n"
-#: ../cli/src/connections.c:6239
+#: ../clients/cli/connections.c:6336
#, c-format
msgid ""
"remove [<value>|<index>|<option name>] :: delete the value\n"
@@ -2391,8 +2442,23 @@ msgid ""
" nmcli bond.options> remove downdelay\n"
"\n"
msgstr ""
+"remove [<Wert>|<Index>|<Optionsname>] :: deb Wert löschen\n"
+"\n"
+"Dieser Befehl entfernt den Eigenschaftenwert. Im Falle von Eigenschaften\n"
+"mit einem Wert wird die Eigenschaft zurück auf den Vorgabewert gesetzt.\n"
+"Bei Container-Eigenschaften werdem alle Werte dieser Eigenschaft entfernt.\n"
+"Mit einem Argument kann ein einzelnes Objekt oder eine einzelne Option "
+"entfertn\n"
+"werden. Das Argument ist entweder ein Wert oder der Index eines Objekts,\n"
+"das entfernt werden soll, oder es ist ein Optionsname (für Eigenschaften\n"
+"mit benannten Optionen).\n"
+"\n"
+"Beispiele: 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:6250
+#: ../clients/cli/connections.c:6347
#, c-format
msgid ""
"describe :: describe property\n"
@@ -2406,7 +2472,7 @@ msgstr ""
"settings(5)« alle NetworkManager- Einstellungen und Eigenschaften "
"nachlesen.\n"
-#: ../cli/src/connections.c:6255
+#: ../clients/cli/connections.c:6352
#, c-format
msgid ""
"print [property|setting|connection] :: print property (setting, connection) "
@@ -2421,7 +2487,7 @@ msgstr ""
"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
+#: ../clients/cli/connections.c:6360
#, c-format
msgid ""
"help/? [<command>] :: help for nmcli commands\n"
@@ -2430,12 +2496,12 @@ msgstr ""
"help/? [<command>] :: Hilfe zu den nmcli-Befehlen\n"
"\n"
-#: ../cli/src/connections.c:6350
+#: ../clients/cli/connections.c:6447
#, c-format
msgid "Error: Connection activation failed.\n"
msgstr "Fehler: Aktivierung der Verbindung ist gescheitert.\n"
-#: ../cli/src/connections.c:6428
+#: ../clients/cli/connections.c:6525
#, c-format
msgid "Error: setting '%s' is mandatory and cannot be removed.\n"
msgstr ""
@@ -2443,12 +2509,18 @@ msgstr ""
"werden.\n"
#. TRANSLATORS: status line in nmcli connection editor
-#: ../cli/src/connections.c:6446
+#: ../clients/cli/connections.c:6543
#, 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
+#: ../clients/cli/connections.c:6578
+#, c-format
+msgid "The connection is not saved. Do you really want to quit? %s"
+msgstr ""
+"Die Verbindung wurde noch nicht gespeichert. Möchten Sie wirklich beenden? %s"
+
+#: ../clients/cli/connections.c:6623
#, c-format
msgid ""
"The connection profile has been removed from another client. You may type "
@@ -2457,81 +2529,76 @@ 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
+#: ../clients/cli/connections.c:6645 ../clients/cli/connections.c:7060
+#: ../clients/cli/connections.c:7115
#, 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
+#: ../clients/cli/connections.c:6660 ../clients/cli/connections.c:6678
+#: ../clients/cli/connections.c:7064 ../clients/cli/connections.c:7120
#, 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
+#: ../clients/cli/connections.c:6672
#, c-format
msgid "Edit '%s' value: "
msgstr "Bearbeiten Sie den Wert »%s«:"
-#: ../cli/src/connections.c:6589
+#: ../clients/cli/connections.c:6699
#, 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
+#: ../clients/cli/connections.c:6705 ../clients/cli/connections.c:7199
+#: ../clients/cli/connections.c:7240
#, 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
+#: ../clients/cli/connections.c:6726
#, 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
+#: ../clients/cli/connections.c:6852
#, c-format
msgid "Available settings: %s\n"
msgstr "Verfügbare Einstellungen: %s\n"
-#: ../cli/src/connections.c:6757
+#: ../clients/cli/connections.c:6861
#, c-format
msgid "Error: invalid setting name; %s\n"
msgstr "Fehler: Ungültiger Einstellungsname: %s\n"
-#: ../cli/src/connections.c:6774
+#: ../clients/cli/connections.c:6878
#, c-format
msgid "Available properties: %s\n"
msgstr "Verfügbare Eigenschaften: %s\n"
-#: ../cli/src/connections.c:6782
+#: ../clients/cli/connections.c:6886
#, c-format
msgid "Error: property %s\n"
msgstr "Fehler: Eigenschaft »%s«\n"
-#: ../cli/src/connections.c:6823
+#: ../clients/cli/connections.c:6927
+#, 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] "
+"Do you still want to save? %s"
msgstr ""
"Die Verbindung wird mit »autoconnect=yes« (automatisch verbinden) "
"gespeichert. Dadurch könnte die Verbindung sofort aktiviert werden.\n"
-"Möchten Sie speichern? [Ja] "
+"Möchten Sie wirklich speichern? %s"
-#: ../cli/src/connections.c:6897
+#: ../clients/cli/connections.c:7002
#, 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
+#: ../clients/cli/connections.c:7029
#, c-format
msgid ""
"The connection profile has been removed from another client. You may type "
@@ -2540,216 +2607,208 @@ 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
+#: ../clients/cli/connections.c:7058 ../clients/cli/connections.c:7113
#, 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
+#: ../clients/cli/connections.c:7068 ../clients/cli/connections.c:7282
#, 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
+#: ../clients/cli/connections.c:7069
#, 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
+#: ../clients/cli/connections.c:7083 ../clients/cli/connections.c:7219
+#: ../clients/cli/connections.c:7299
#, 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
+#: ../clients/cli/connections.c:7093
#, 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
+#: ../clients/cli/connections.c:7100
#, c-format
msgid "Error: invalid property: %s\n"
msgstr "Fehler: Ungültige Eigenschaft: %s\n"
-#: ../cli/src/connections.c:7048
+#: ../clients/cli/connections.c:7147
#, c-format
msgid "Error: unknown setting '%s'\n"
msgstr "Fehler: Unbekannte Einstellung »%s«\n"
-#: ../cli/src/connections.c:7061
+#: ../clients/cli/connections.c:7160
#, 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
+#: ../clients/cli/connections.c:7204
#, 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
+#: ../clients/cli/connections.c:7217
#, 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
+#: ../clients/cli/connections.c:7258
#, 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
+#: ../clients/cli/connections.c:7283
#, 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
+#: ../clients/cli/connections.c:7324
#, 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
+#: ../clients/cli/connections.c:7353
#, c-format
msgid "Error: unknown setting: '%s'\n"
msgstr "Fehler: Unbekannte Einstellung: »%s«\n"
-#: ../cli/src/connections.c:7268
+#: ../clients/cli/connections.c:7358
+#, c-format
+msgid "Error: '%s' setting not present in the connection\n"
+msgstr "Fehler: Die Einstellung »%s« ist in der Verbindung nicht vorhanden.\n"
+
+#: ../clients/cli/connections.c:7383
+#, c-format
+msgid "Error: invalid property: %s%s\n"
+msgstr "Fehler: ungültige Eigenschaft %s%s\n"
+
+#: ../clients/cli/connections.c:7385
+msgid ", neither a valid setting name"
+msgstr ", noch ein gültiger Einstellungsname"
+
+#: ../clients/cli/connections.c:7405
#, c-format
msgid "Verify setting '%s': %s\n"
msgstr "Überprüfe Einstellung »%s«: %s\n"
-#: ../cli/src/connections.c:7275
+#: ../clients/cli/connections.c:7412
#, c-format
msgid "Verify connection: %s\n"
msgstr "Verbindung überprüfen: %s\n"
-#: ../cli/src/connections.c:7293
+#: ../clients/cli/connections.c:7430
#, c-format
msgid "Error: invalid argument '%s'\n"
msgstr "Fehler: Ungültiges Argument »%s«\n"
-#: ../cli/src/connections.c:7327
+#: ../clients/cli/connections.c:7464
#, 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
+#: ../clients/cli/connections.c:7472
#, c-format
msgid "Connection '%s' (%s) successfully saved.\n"
msgstr "Verbindung »%s« (%s) erfolgreich gespeichert.\n"
-#: ../cli/src/connections.c:7336
+#: ../clients/cli/connections.c:7473
#, c-format
msgid "Connection '%s' (%s) successfully updated.\n"
msgstr "Verbindung »%s« (%s) erfolgreich aktualisiert.\n"
-#: ../cli/src/connections.c:7370
+#: ../clients/cli/connections.c:7507
#, c-format
msgid "Error: connection verification failed: %s\n"
msgstr "Fehler: Prüfung der Verbindung ist fehlgeschlagen: %s\n"
-#: ../cli/src/connections.c:7371
+#: ../clients/cli/connections.c:7508
msgid "(unknown error)"
msgstr "(Unbekannter Fehler)"
-#: ../cli/src/connections.c:7392
+#: ../clients/cli/connections.c:7529
#, 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
+#: ../clients/cli/connections.c:7533
#, c-format
msgid "Error: connection is not valid: %s\n"
msgstr "Fehler: Verbindung ist ungültig: %s\n"
-#: ../cli/src/connections.c:7407
+#: ../clients/cli/connections.c:7544
#, c-format
msgid "Error: Cannot activate connection: %s.\n"
msgstr "Fehler: Verbindung kann nicht aktiviert werden: %s.\n"
-#: ../cli/src/connections.c:7417
+#: ../clients/cli/connections.c:7554
#, 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
+#: ../clients/cli/connections.c:7560
#, 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
+#: ../clients/cli/connections.c:7598
#, c-format
msgid "Error: status-line: %s\n"
msgstr "Fehler: Statuszeile: %s\n"
-#: ../cli/src/connections.c:7469
+#: ../clients/cli/connections.c:7606
#, c-format
msgid "Error: save-confirmation: %s\n"
msgstr "Fehler: Speicherbestätigung: %s\n"
-#: ../cli/src/connections.c:7477
+#: ../clients/cli/connections.c:7614
#, 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
+#: ../clients/cli/connections.c:7626
#, c-format
msgid "Current nmcli configuration:\n"
msgstr "Aktuelle nmcli-Konfiguration:\n"
-#: ../cli/src/connections.c:7497
+#: ../clients/cli/connections.c:7634
#, 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
+#: ../clients/cli/connections.c:7877
#, 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
+#: ../clients/cli/connections.c:7889 ../clients/cli/connections.c:8079
+#: ../clients/cli/connections.c:8086
#, c-format
msgid "Error: Unknown connection '%s'."
msgstr "Fehler: Unbekannte Verbindung »%s«."
-#: ../cli/src/connections.c:7782
+#: ../clients/cli/connections.c:7904
#, 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
+#: ../clients/cli/connections.c:7907
#, c-format
msgid ""
"Warning: editing existing connection '%s'; 'con-name' argument is ignored\n"
@@ -2757,424 +2816,429 @@ msgstr ""
"Warnung: bestehende Verbindung »%s« wird bearbeitet. Das Argment »con-name« "
"wird ignoriert\n"
-#: ../cli/src/connections.c:7799
+#: ../clients/cli/connections.c:7921
#, c-format
msgid "Valid connection types: %s\n"
msgstr "Gültige Verbindungstypen: %s\n"
-#: ../cli/src/connections.c:7801
+#: ../clients/cli/connections.c:7923
#, c-format
msgid "Error: invalid connection type; %s\n"
msgstr "Fehler: Ungültiger Verbindungstyp: %s\n"
-#: ../cli/src/connections.c:7837
+#: ../clients/cli/connections.c:7962
#, c-format
msgid "===| nmcli interactive connection editor |==="
msgstr "===| nmcli interaktiver Verbindungs-Editor |==="
-#: ../cli/src/connections.c:7840
+#: ../clients/cli/connections.c:7965
#, c-format
msgid "Editing existing '%s' connection: '%s'"
msgstr "Bestehende Verbindung »%s« wird bearbeitet: »%s«"
-#: ../cli/src/connections.c:7842
+#: ../clients/cli/connections.c:7967
#, c-format
msgid "Adding a new '%s' connection"
msgstr "Neue »%s«-Verbindung hinzufügen"
-#: ../cli/src/connections.c:7844
+#: ../clients/cli/connections.c:7969
#, c-format
msgid "Type 'help' or '?' for available commands."
msgstr "Tippen Sie »help« oder »?«, um verfügbare Befehle anzuzeigen."
-#: ../cli/src/connections.c:7846
+#: ../clients/cli/connections.c:7971
#, 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
+#: ../clients/cli/connections.c:8007
#, 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
+#: ../clients/cli/connections.c:8013
#, c-format
msgid "Connection '%s' (%s) successfully modified.\n"
msgstr "Verbindung »%s« (%s) erfolgreich bearbeitet.\n"
-#: ../cli/src/connections.c:7932
+#: ../clients/cli/connections.c:8054
#, c-format
msgid "Error: No arguments provided."
msgstr "Fehler: Es wurden keine Argumente angegeben."
-#: ../cli/src/connections.c:7951
+#: ../clients/cli/connections.c:8073
#, c-format
msgid "Error: connection ID is missing."
msgstr "Fehler: Verbindungskennung fehlt."
-#: ../cli/src/connections.c:7973 ../cli/src/connections.c:7986
+#: ../clients/cli/connections.c:8095 ../clients/cli/connections.c:8108
#, c-format
msgid "Error: <setting>.<property> argument is missing."
msgstr "Fehler: Argument für Einstellung fehlt."
-#: ../cli/src/connections.c:7991
+#: ../clients/cli/connections.c:8113
#, c-format
msgid "Error: value for '%s' is missing."
msgstr "Fehler: Wert für »%s« fehlt."
-#: ../cli/src/connections.c:8009
+#: ../clients/cli/connections.c:8131
#, c-format
msgid "Error: invalid <setting>.<property> '%s'."
msgstr "Fehler: Ungültiger Einstellungsname: »%s«."
-#: ../cli/src/connections.c:8017
+#: ../clients/cli/connections.c:8139
#, 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
+#: ../clients/cli/connections.c:8160
#, c-format
msgid "Error: invalid property '%s': %s."
msgstr "Fehler: Ungültige Eigenschaft »%s«: %s."
-#: ../cli/src/connections.c:8049
+#: ../clients/cli/connections.c:8171
#, c-format
msgid "Error: failed to modify %s.%s: %s."
msgstr "Fehler: Ändern ist fehlgeschlagen %s.%s: %s."
-#: ../cli/src/connections.c:8067
+#: ../clients/cli/connections.c:8189
#, 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
+#: ../clients/cli/connections.c:8225
#, c-format
msgid "Error: Connection deletion failed: %s"
msgstr "Fehler: Löschen der Verbindung fehlgeschlagen: %s"
-#: ../cli/src/connections.c:8174
+#: ../clients/cli/connections.c:8296
#, c-format
msgid "Error: unknown connection: %s\n"
msgstr "Fehler: Unbekannte Verbindung: %s\n"
#. truncate trailing ", "
-#: ../cli/src/connections.c:8210
+#: ../clients/cli/connections.c:8332
#, 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
+#: ../clients/cli/connections.c:8403
#, c-format
msgid "Could not load file '%s'\n"
msgstr "Datei »%s« konnte nicht geladen werden\n"
-#: ../cli/src/connections.c:8415
+#: ../clients/cli/connections.c:8588
#, 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."
+#: ../clients/cli/connections.c:8658 ../clients/cli/network-manager.c:613
+#, fuzzy, c-format
+#| msgid "Error: Could not get system settings."
+msgid "Error: Could not get system settings: %s."
msgstr "Fehler: Systemeinstellungen konnten nicht ermittelt werden."
-#: ../cli/src/connections.c:8494
+#: ../clients/cli/connections.c:8669
#, 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."
+#. define some prompts
+#: ../clients/cli/devices.c:37
+msgid "Interface: "
+msgstr "Schnittstelle: "
+
#. 3
-#. 16
-#: ../cli/src/devices.c:75 ../cli/src/devices.c:103
+#. 17
+#: ../clients/cli/devices.c:45 ../clients/cli/devices.c:74
msgid "CONNECTION"
msgstr "VERBINDUNG"
#. 4
-#. 17
-#: ../cli/src/devices.c:76 ../cli/src/devices.c:104
+#. 18
+#: ../clients/cli/devices.c:46 ../clients/cli/devices.c:75
msgid "CON-UUID"
msgstr "CON-UUID"
#. 2
-#: ../cli/src/devices.c:89
+#: ../clients/cli/devices.c:59
msgid "VENDOR"
msgstr "HERSTELLER"
#. 3
-#: ../cli/src/devices.c:90
+#: ../clients/cli/devices.c:60
msgid "PRODUCT"
msgstr "PRODUKT"
#. 4
-#: ../cli/src/devices.c:91
+#: ../clients/cli/devices.c:61
msgid "DRIVER"
msgstr "TREIBER"
#. 5
-#: ../cli/src/devices.c:92
+#: ../clients/cli/devices.c:62
msgid "DRIVER-VERSION"
msgstr "TREIBER-VERSION"
#. 6
-#: ../cli/src/devices.c:93
+#: ../clients/cli/devices.c:63
msgid "FIRMWARE-VERSION"
msgstr "FIRMWARE-VERSION"
#. 7
-#: ../cli/src/devices.c:94
+#: ../clients/cli/devices.c:64
msgid "HWADDR"
msgstr "HWADDR"
#. 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
+#: ../clients/cli/devices.c:65 ../clients/tui/nmt-page-ethernet.c:86
+#: ../clients/tui/nmt-page-infiniband.c:96 ../clients/tui/nmt-page-vlan.c:136
+#: ../clients/tui/nmt-page-wifi.c:363
msgid "MTU"
msgstr "MTU"
#. 10
-#: ../cli/src/devices.c:97
+#: ../clients/cli/devices.c:67
msgid "REASON"
msgstr "GRUND"
#. 11
-#: ../cli/src/devices.c:98
+#: ../clients/cli/devices.c:68
msgid "UDI"
msgstr "UDI"
#. 12
-#: ../cli/src/devices.c:99
+#: ../clients/cli/devices.c:69
msgid "IP-IFACE"
msgstr "IP-IFACE"
#. 13
-#: ../cli/src/devices.c:100
+#. 2
+#: ../clients/cli/devices.c:70 ../clients/cli/devices.c:98
+msgid "IS-SOFTWARE"
+msgstr ""
+
+#. 14
+#: ../clients/cli/devices.c:71
msgid "NM-MANAGED"
msgstr "NM-VERWALTET"
-#. 15
-#: ../cli/src/devices.c:102
+#. 16
+#: ../clients/cli/devices.c:73
msgid "FIRMWARE-MISSING"
msgstr "FIRMWARE-FEHLT"
#. 0
-#: ../cli/src/devices.c:115
+#: ../clients/cli/devices.c:86
msgid "AVAILABLE-CONNECTION-PATHS"
msgstr "VERFÃœGBARE-VERBINDUNG-PFADE"
#. 1
-#: ../cli/src/devices.c:116
+#: ../clients/cli/devices.c:87
msgid "AVAILABLE-CONNECTIONS"
msgstr "VERFUEGBARE-VERBINDUNGEN"
#. 0
-#: ../cli/src/devices.c:125
+#: ../clients/cli/devices.c:96
msgid "CARRIER-DETECT"
msgstr "TRÄGERFREQUENZERKENNUNG"
#. 1
-#: ../cli/src/devices.c:126
+#: ../clients/cli/devices.c:97
msgid "SPEED"
msgstr "GESCHWINDIGKEIT"
#. 0
-#: ../cli/src/devices.c:135
+#: ../clients/cli/devices.c:107
msgid "CARRIER"
msgstr "TRÄGERFREQUENZ"
#. 0
-#: ../cli/src/devices.c:144 ../cli/src/devices.c:565
+#: ../clients/cli/devices.c:116 ../clients/cli/devices.c:552
msgid "WEP"
msgstr "WEP"
#. 1
-#: ../cli/src/devices.c:145
+#: ../clients/cli/devices.c:117
msgid "WPA"
msgstr "WPA"
#. 2
-#: ../cli/src/devices.c:146 ../cli/src/devices.c:573
+#: ../clients/cli/devices.c:118 ../clients/cli/devices.c:560
msgid "WPA2"
msgstr "WPA2"
#. 3
-#: ../cli/src/devices.c:147
+#: ../clients/cli/devices.c:119
msgid "TKIP"
msgstr "TKIP"
#. 4
-#: ../cli/src/devices.c:148
+#: ../clients/cli/devices.c:120
msgid "CCMP"
msgstr "CCMP"
#. 5
#. 2
-#: ../cli/src/devices.c:149 ../cli/src/devices.c:239
+#: ../clients/cli/devices.c:121 ../clients/cli/devices.c:211
msgid "AP"
msgstr "AP"
#. 6
-#: ../cli/src/devices.c:150
+#: ../clients/cli/devices.c:122
msgid "ADHOC"
msgstr "ADHOC"
#. 0
-#: ../cli/src/devices.c:159
+#: ../clients/cli/devices.c:131
msgid "CTR-FREQ"
msgstr "CTR-FREQUENZ"
#. 1
-#: ../cli/src/devices.c:160
+#: ../clients/cli/devices.c:132
msgid "RSSI"
msgstr "RSSI"
#. 2
-#: ../cli/src/devices.c:161
+#: ../clients/cli/devices.c:133
msgid "CINR"
msgstr "CINR"
#. 3
-#: ../cli/src/devices.c:162
+#: ../clients/cli/devices.c:134
msgid "TX-POW"
msgstr "TX-POW"
#. 4
-#: ../cli/src/devices.c:163
+#: ../clients/cli/devices.c:135
msgid "BSID"
msgstr "BSID"
#. 0
-#: ../cli/src/devices.c:172 ../tui/nmt-page-wifi.c:221
+#: ../clients/cli/devices.c:144 ../clients/tui/nmt-page-wifi.c:220
msgid "SSID"
msgstr "SSID"
#. 1
-#: ../cli/src/devices.c:173
+#: ../clients/cli/devices.c:145
msgid "SSID-HEX"
msgstr "SSID-HEX"
#. 2
-#: ../cli/src/devices.c:174 ../tui/nmt-page-wifi.c:352
+#: ../clients/cli/devices.c:146 ../clients/tui/nmt-page-wifi.c:351
msgid "BSSID"
msgstr "BSSID"
#. 3
-#: ../cli/src/devices.c:175
+#: ../clients/cli/devices.c:147
msgid "MODE"
msgstr "MODUS"
#. 4
-#: ../cli/src/devices.c:176
+#: ../clients/cli/devices.c:148
msgid "CHAN"
msgstr "CHAN"
#. 5
-#: ../cli/src/devices.c:177
+#: ../clients/cli/devices.c:149
msgid "FREQ"
msgstr "FREQUENZ"
#. 6
-#: ../cli/src/devices.c:178
+#: ../clients/cli/devices.c:150
msgid "RATE"
msgstr "RATE"
#. 7
#. 1
-#: ../cli/src/devices.c:179 ../cli/src/devices.c:199
+#: ../clients/cli/devices.c:151 ../clients/cli/devices.c:171
msgid "SIGNAL"
msgstr "SIGNAL"
#. 8
-#: ../cli/src/devices.c:180
+#: ../clients/cli/devices.c:152
msgid "BARS"
msgstr "BARS"
#. 9
-#: ../cli/src/devices.c:181
+#: ../clients/cli/devices.c:153
msgid "SECURITY"
msgstr "SICHERHEIT"
#. 10
-#: ../cli/src/devices.c:182
+#: ../clients/cli/devices.c:154
msgid "WPA-FLAGS"
msgstr "WPA-SCHALTER"
#. 11
-#: ../cli/src/devices.c:183
+#: ../clients/cli/devices.c:155
msgid "RSN-FLAGS"
msgstr "RSN-SCHALTER"
#. 14
-#: ../cli/src/devices.c:186
+#: ../clients/cli/devices.c:158
msgid "*"
msgstr "*"
#. 0
#. 5
-#: ../cli/src/devices.c:198 ../cli/src/devices.c:242
+#: ../clients/cli/devices.c:170 ../clients/cli/devices.c:214
msgid "NSP"
msgstr "NSP"
#. 0
-#: ../cli/src/devices.c:213
+#: ../clients/cli/devices.c:185
msgid "SLAVES"
msgstr "SLAVES"
#. 0
-#: ../cli/src/devices.c:222
+#: ../clients/cli/devices.c:194
msgid "ID"
msgstr "Kennung"
#. 0
-#: ../cli/src/devices.c:237
+#: ../clients/cli/devices.c:209
msgid "CAPABILITIES"
msgstr "RESSOURCEN"
#. 1
-#: ../cli/src/devices.c:238
+#: ../clients/cli/devices.c:210
msgid "WIFI-PROPERTIES"
msgstr "WLAN-EIGENSCHAFTEN"
#. 3
-#: ../cli/src/devices.c:240
+#: ../clients/cli/devices.c:212
msgid "WIRED-PROPERTIES"
msgstr "KABEL-EIGENSCHAFTEN"
#. 4
-#: ../cli/src/devices.c:241
+#: ../clients/cli/devices.c:213
msgid "WIMAX-PROPERTIES"
msgstr "WIMAX-EIGENSCHAFTEN"
#. 10
-#: ../cli/src/devices.c:247 ../tui/nmt-page-bond.c:73
+#: ../clients/cli/devices.c:219 ../clients/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
+#: ../clients/cli/devices.c:221
msgid "CONNECTIONS"
msgstr "VERBINDUNGEN"
-#: ../cli/src/devices.c:274
+#: ../clients/cli/devices.c:246
#, c-format
msgid ""
"Usage: nmcli device { COMMAND | help }\n"
"\n"
-"COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | delete | wifi | wimax }\n"
"\n"
-"COMMAND := { status | show | connect | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | delete | wifi }\n"
"\n"
" status\n"
"\n"
@@ -3184,6 +3248,8 @@ msgid ""
"\n"
" disconnect <ifname>\n"
"\n"
+" delete <ifname>\n"
+"\n"
" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
"\n"
" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
@@ -3197,9 +3263,9 @@ msgid ""
msgstr ""
"Aufruf: nmcli Gerät { BEFEHL | help }\n"
"\n"
-" BEFEHL := { status | show | connect | disconnect | wifi | wimax }\n"
+"BEFEHL := { status | show | connect | disconnect | delete | wifi | wimax }\n"
"\n"
-" BEFEHL := { status | show | connect | disconnect | wifi }\n"
+"BEFEHL := { status | show | connect | disconnect | delete | wifi }\n"
"\n"
" status\n"
"\n"
@@ -3209,10 +3275,12 @@ msgstr ""
"\n"
" disconnect <Schnittstelle>\n"
"\n"
+" delete <Schnittstelle>\n"
+"\n"
" wifi [list [iface <Schnittstelle>] [bssid <BSSID>]]\n"
"\n"
" wifi connect <(B)SSID> [password <Passwort>] [wep-key-type key|phrase] "
-"[iface <Schnittstelle>]\n"
+"[ifname <Schnittstelle>]\n"
" [bssid <BSSID>] [name <Name>] [private yes|no]\n"
"\n"
" wifi rescan [[ifname] <Schnittstelle>]\n"
@@ -3220,7 +3288,7 @@ msgstr ""
" wimax [list [iface <Schnittstelle>] [nsp <Name>]]\n"
"\n"
-#: ../cli/src/devices.c:298
+#: ../clients/cli/devices.c:271
#, c-format
msgid ""
"Usage: nmcli device status { help }\n"
@@ -3251,7 +3319,7 @@ msgstr ""
"status« auf.\n"
"\n"
-#: ../cli/src/devices.c:314
+#: ../clients/cli/devices.c:287
#, c-format
msgid ""
"Usage: nmcli device show { ARGUMENTS | help }\n"
@@ -3271,7 +3339,7 @@ msgstr ""
"Gerät auf.\n"
"\n"
-#: ../cli/src/devices.c:326
+#: ../clients/cli/devices.c:299
#, c-format
msgid ""
"Usage: nmcli device connect { ARGUMENTS | help }\n"
@@ -3296,7 +3364,7 @@ msgstr ""
"Verbindung konfiguriert sind.\n"
"\n"
-#: ../cli/src/devices.c:339
+#: ../clients/cli/devices.c:312
#, c-format
msgid ""
"Usage: nmcli device disconnect { ARGUMENTS | help }\n"
@@ -3317,7 +3385,30 @@ msgstr ""
"Benutzereingriff weiterhin automatisch neu zu verbinden.\n"
"\n"
-#: ../cli/src/devices.c:352
+#: ../clients/cli/devices.c:325
+#, c-format
+msgid ""
+"Usage: nmcli device delete { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Deletes the software device.\n"
+"The command removes the interface. It only works for software devices\n"
+"(like bonds, bridges, etc.). Hardware devices cannot be deleted by the\n"
+"command.\n"
+"\n"
+msgstr ""
+"Aufruf: nmcli device delete { PARAMETER | help }\n"
+"\n"
+"PARAMETER := <Schnittstellenname>\n"
+"\n"
+"Löscht das Software-Gerät.\n"
+"Der Befehl entfernt die Schnittstelle. Funktioniert nur für Software-Geräte "
+"(z.B. Bündelung und Brücken). Hardware-Geräte können mit diesem Befehl nicht "
+"entfernt werden.\n"
+"\n"
+
+#: ../clients/cli/devices.c:339
#, c-format
msgid ""
"Usage: nmcli device wifi { ARGUMENTS | help }\n"
@@ -3392,7 +3483,7 @@ msgstr ""
"nicht anzeigt, benutzen Sie dazu »nmcli device wifi list«.\n"
"\n"
-#: ../cli/src/devices.c:386
+#: ../clients/cli/devices.c:373
#, c-format
msgid ""
"Usage: nmcli device wimax { ARGUMENTS | help }\n"
@@ -3416,209 +3507,219 @@ msgstr ""
"mit einem bestimmten NSP aufzulisten.\n"
"\n"
-#: ../cli/src/devices.c:480
+#: ../clients/cli/devices.c:467
msgid "(none)"
msgstr "(keine)"
-#: ../cli/src/devices.c:549
+#: ../clients/cli/devices.c:536
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:550
+#: ../clients/cli/devices.c:537
#, c-format
msgid "%u Mbit/s"
msgstr "%u Mbit/s"
-#: ../cli/src/devices.c:569
+#: ../clients/cli/devices.c:556
msgid "WPA1"
msgstr "WPA1"
-#: ../cli/src/devices.c:578
+#: ../clients/cli/devices.c:565
msgid "802.1X"
msgstr "802.1X"
-#: ../cli/src/devices.c:594
+#: ../clients/cli/devices.c:581
msgid "Ad-Hoc"
msgstr "Ad-Hoc"
-#: ../cli/src/devices.c:595
+#: ../clients/cli/devices.c:582
msgid "Infra"
msgstr "Infra"
-#: ../cli/src/devices.c:627
+#: ../clients/cli/devices.c:614
msgid "Home"
msgstr "Zu Hause"
-#: ../cli/src/devices.c:630
+#: ../clients/cli/devices.c:617
msgid "Partner"
msgstr "Partner"
# CHECK
-#: ../cli/src/devices.c:633
+#: ../clients/cli/devices.c:620
msgid "Roaming"
msgstr "Roaming"
-#: ../cli/src/devices.c:727
+#: ../clients/cli/devices.c:714
msgid "Device details"
msgstr "Geräteinformationen"
-#: ../cli/src/devices.c:739
+#: ../clients/cli/devices.c:726
#, c-format
msgid "Error: 'device show': %s"
msgstr "Fehler: »device show«: %s"
-#: ../cli/src/devices.c:789 ../cli/src/devices.c:792 ../cli/src/devices.c:1339
-#: ../cli/src/devices.c:1482
+#: ../clients/cli/devices.c:776 ../clients/cli/devices.c:779
+#: ../clients/cli/devices.c:1328 ../clients/cli/devices.c:1470
+#: ../clients/cli/devices.c:1582
msgid "(unknown)"
msgstr "(unbekannt)"
-#: ../cli/src/devices.c:829
+#: ../clients/cli/devices.c:817
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
-#: ../cli/src/devices.c:915
+#: ../clients/cli/devices.c:904
msgid "on"
msgstr "an"
-#: ../cli/src/devices.c:915
+#: ../clients/cli/devices.c:904
msgid "off"
msgstr "aus"
-#: ../cli/src/devices.c:1190
+#: ../clients/cli/devices.c:1179
#, c-format
msgid "Error: 'device status': %s"
msgstr "Fehler: »device status«: %s"
#. Add headers
-#: ../cli/src/devices.c:1208
+#: ../clients/cli/devices.c:1197
msgid "Status of devices"
msgstr "Status der Geräte"
-#: ../cli/src/devices.c:1239
+#: ../clients/cli/devices.c:1228
#, c-format
msgid "Error: invalid extra argument '%s'."
msgstr "Fehler: Ungültiger zusätzlicher Parameter »%s«."
-#: ../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
+#: ../clients/cli/devices.c:1256 ../clients/cli/devices.c:1418
+#: ../clients/cli/devices.c:1552 ../clients/cli/devices.c:1646
+#: ../clients/cli/devices.c:1791 ../clients/cli/devices.c:2535
#, c-format
msgid "Error: Device '%s' not found."
msgstr "Fehler: Gerät »%s« wurde nicht gefunden."
-#: ../cli/src/devices.c:1322
+#: ../clients/cli/devices.c:1311
#, c-format
msgid "Device '%s' successfully activated with '%s'.\n"
msgstr "Gerät »%s« wurde erfolgreich mit »%s« aktiviert.\n"
-#: ../cli/src/devices.c:1338
+#: ../clients/cli/devices.c:1327
#, c-format
msgid "Error: Device activation failed: %s"
msgstr "Fehler: Aktivierung des Geräts ist gescheitert: %s"
-#: ../cli/src/devices.c:1346
+#: ../clients/cli/devices.c:1335
#, c-format
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
+#: ../clients/cli/devices.c:1348
#, 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:1389 ../cli/src/devices.c:1398
-#: ../cli/src/devices.c:1524 ../cli/src/devices.c:1533
+#: ../clients/cli/devices.c:1377 ../clients/cli/devices.c:1386
+#: ../clients/cli/devices.c:1511 ../clients/cli/devices.c:1520
+#: ../clients/cli/devices.c:1606 ../clients/cli/devices.c:1614
#, c-format
msgid "Error: No interface specified."
msgstr "Fehler: Es muss eine Schnittstelle angegeben werden."
-#: ../cli/src/devices.c:1404 ../cli/src/devices.c:1539
+#: ../clients/cli/devices.c:1392 ../clients/cli/devices.c:1526
+#: ../clients/cli/devices.c:1620
#, c-format
msgid "Error: extra argument not allowed: '%s'."
msgstr "Fehler: Zusätzlicher Parameter nicht erlaubt: »%s«."
-#: ../cli/src/devices.c:1467
+#: ../clients/cli/devices.c:1455
#, c-format
msgid "Success: Device '%s' successfully disconnected."
msgstr "Erfolg: Gerät »%s« wurde erfolgreich getrennt."
-#: ../cli/src/devices.c:1479
+#: ../clients/cli/devices.c:1467
#, 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
+#: ../clients/cli/devices.c:1481
#, c-format
msgid "Device '%s' has been disconnected.\n"
msgstr "Gerät »%s« wurde getrennt.\n"
-#: ../cli/src/devices.c:1636
+#: ../clients/cli/devices.c:1579
+#, c-format
+msgid "Error: Device '%s' (%s) deletion failed: %s"
+msgstr "Fehler: Löschen des Gerätes »%s« (%s) ist gescheitert: %s"
+
+#: ../clients/cli/devices.c:1652
+#, c-format
+msgid "Error: Device '%s' is a hardware device. It can't be deleted."
+msgstr ""
+"Fehler: Gerät »%s« ist ein Hardware-Gerät und kann nicht entfernt werden."
+
+#: ../clients/cli/devices.c:1723
msgid "Wi-Fi scan list"
msgstr "Suchliste des WLAN"
-#: ../cli/src/devices.c:1674
+#: ../clients/cli/devices.c:1761
#, c-format
msgid "Error: 'device wifi': %s"
msgstr "Fehler: »device wifi«: %s"
-#: ../cli/src/devices.c:1727 ../cli/src/devices.c:1796
+#: ../clients/cli/devices.c:1814 ../clients/cli/devices.c:1883
#, c-format
msgid "Error: Access point with bssid '%s' not found."
msgstr "Fehler: Zugangspunkt mit der BSSID »%s« nicht gefunden."
-#: ../cli/src/devices.c:1751 ../cli/src/devices.c:2143
-#: ../cli/src/devices.c:2305
+#: ../clients/cli/devices.c:1838 ../clients/cli/devices.c:2230
+#: ../clients/cli/devices.c:2392
#, 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:1833 ../cli/src/devices.c:1880
+#: ../clients/cli/devices.c:1920 ../clients/cli/devices.c:1967
#, 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:1837
+#: ../clients/cli/devices.c:1924
#, c-format
msgid "Error: Connection activation failed: (%d) %s."
msgstr "Fehler: Aktivierung der Verbindung ist gescheitert: (%d) %s."
-#: ../cli/src/devices.c:1862
+#: ../clients/cli/devices.c:1949
#, 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:1870
+#: ../clients/cli/devices.c:1957
#, 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:2025
+#: ../clients/cli/devices.c:2112
msgid "SSID or BSSID: "
msgstr "SSID oder BSSID: "
-#: ../cli/src/devices.c:2030
+#: ../clients/cli/devices.c:2117
#, c-format
msgid "Error: SSID or BSSID are missing."
msgstr "Fehler: SSID oder BSSID fehlt."
-#: ../cli/src/devices.c:2054
+#: ../clients/cli/devices.c:2141
#, 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:2078
+#: ../clients/cli/devices.c:2165
#, c-format
msgid ""
"Error: wep-key-type argument value '%s' is invalid, use 'key' or 'phrase'."
@@ -3626,154 +3727,154 @@ msgstr ""
"Fehler: Wert des Arguments wep-key-type »%s« ist ungültig, verwenden Sie "
"stattdessen »key« oder »phrase«"
-#: ../cli/src/devices.c:2098
+#: ../clients/cli/devices.c:2185
#, c-format
msgid "Error: %s: %s."
msgstr "Fehler: %s: %s."
-#: ../cli/src/devices.c:2113
+#: ../clients/cli/devices.c:2200
#, 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:2119
+#: ../clients/cli/devices.c:2206
#, c-format
msgid "Error: Parameter '%s' is neither SSID nor BSSID."
msgstr "Fehler: Parameter »%s« ist weder SSID noch BSSID."
-#: ../cli/src/devices.c:2145 ../cli/src/devices.c:2307
+#: ../clients/cli/devices.c:2232 ../clients/cli/devices.c:2394
#, c-format
msgid "Error: No Wi-Fi device found."
msgstr "Fehler: Es wurde kein WLAN-Gerät gefunden."
-#: ../cli/src/devices.c:2163
+#: ../clients/cli/devices.c:2250
#, c-format
msgid "Error: No network with SSID '%s' found."
msgstr "Fehler: Es wurde kein Netzwerk mit SSID »%s« gefunden."
-#: ../cli/src/devices.c:2165
+#: ../clients/cli/devices.c:2252
#, 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:2204
+#: ../clients/cli/devices.c:2291
msgid "Password: "
msgstr "Passwort: "
-#: ../cli/src/devices.c:2333
+#: ../clients/cli/devices.c:2420
#, c-format
msgid "Error: 'device wifi' command '%s' is not valid."
msgstr "Fehler: Der »device wifi«-Befehl »%s« ist ungültig."
-#: ../cli/src/devices.c:2380
+#: ../clients/cli/devices.c:2467
msgid "WiMAX NSP list"
msgstr "WiMAX NSP-Liste"
-#: ../cli/src/devices.c:2417
+#: ../clients/cli/devices.c:2504
#, c-format
msgid "Error: 'device wimax': %s"
msgstr "Fehler: »device wimax«: %s"
-#: ../cli/src/devices.c:2471
+#: ../clients/cli/devices.c:2558
#, c-format
msgid "Error: NSP with name '%s' not found."
msgstr "Fehler: NSP namens »%s« wurde nicht gefunden."
-#: ../cli/src/devices.c:2484
+#: ../clients/cli/devices.c:2571
#, 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:2522
+#: ../clients/cli/devices.c:2609
#, c-format
msgid "Error: Access point with nsp '%s' not found."
msgstr "Fehler: Zugangspunkt mit NSP »%s« nicht gefunden."
-#: ../cli/src/devices.c:2554
+#: ../clients/cli/devices.c:2641
#, c-format
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:2633
+#: ../clients/cli/devices.c:2798
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "Fehler: Der Befehl »%s« für »dev« ist ungültig."
-#: ../cli/src/network-manager.c:37
+#: ../clients/cli/network-manager.c:35
msgid "RUNNING"
msgstr "LAUFEND"
#. 0
-#: ../cli/src/network-manager.c:38
+#: ../clients/cli/network-manager.c:36
msgid "VERSION"
msgstr "VERSION"
#. 2
-#: ../cli/src/network-manager.c:40
+#: ../clients/cli/network-manager.c:38
msgid "STARTUP"
msgstr "STARTEN"
#. 3
-#: ../cli/src/network-manager.c:41
+#: ../clients/cli/network-manager.c:39
msgid "CONNECTIVITY"
msgstr "KONNEKTIVITÄT"
#. 4
-#: ../cli/src/network-manager.c:42
+#: ../clients/cli/network-manager.c:40
msgid "NETWORKING"
msgstr "NETZWERK"
#. 5
-#: ../cli/src/network-manager.c:43
+#: ../clients/cli/network-manager.c:41
msgid "WIFI-HW"
msgstr "WLAN-HW"
#. 6
-#: ../cli/src/network-manager.c:44
+#: ../clients/cli/network-manager.c:42
msgid "WIFI"
msgstr "WLAN"
#. 7
-#: ../cli/src/network-manager.c:45
+#: ../clients/cli/network-manager.c:43
msgid "WWAN-HW"
msgstr "WWAN-HW"
#. 8
-#: ../cli/src/network-manager.c:46
+#: ../clients/cli/network-manager.c:44
msgid "WWAN"
msgstr "WWAN"
#. 9
-#: ../cli/src/network-manager.c:47
+#: ../clients/cli/network-manager.c:45
msgid "WIMAX-HW"
msgstr "WIMAX-HW"
#. 10
-#: ../cli/src/network-manager.c:48
+#: ../clients/cli/network-manager.c:46
msgid "WIMAX"
msgstr "WIMAX"
-#: ../cli/src/network-manager.c:70
+#: ../clients/cli/network-manager.c:68
msgid "PERMISSION"
msgstr "BEFUGNIS"
#. 0
-#: ../cli/src/network-manager.c:71
+#: ../clients/cli/network-manager.c:69
msgid "VALUE"
msgstr "WERT"
-#: ../cli/src/network-manager.c:79
+#: ../clients/cli/network-manager.c:77
msgid "LEVEL"
msgstr "STUFE"
#. 0
-#: ../cli/src/network-manager.c:80
+#: ../clients/cli/network-manager.c:78
msgid "DOMAINS"
msgstr "DOMÄNEN"
-#: ../cli/src/network-manager.c:95
+#: ../clients/cli/network-manager.c:93
#, c-format
msgid ""
"Usage: nmcli general { COMMAND | help }\n"
@@ -3802,7 +3903,7 @@ msgstr ""
" logging [level <Protokollstufe>] [domains <Protokoll-Domänen>]\n"
"\n"
-#: ../cli/src/network-manager.c:107
+#: ../clients/cli/network-manager.c:105
#, c-format
msgid ""
"Usage: nmcli general status { help }\n"
@@ -3819,7 +3920,7 @@ msgstr ""
"status« auf\n"
"\n"
-#: ../cli/src/network-manager.c:117
+#: ../clients/cli/network-manager.c:115
#, c-format
msgid ""
"Usage: nmcli general hostname { ARGUMENTS | help }\n"
@@ -3842,7 +3943,7 @@ msgstr ""
"persistenten System-Hostnamen fest.\n"
"\n"
-#: ../cli/src/network-manager.c:130
+#: ../clients/cli/network-manager.c:128
#, c-format
msgid ""
"Usage: nmcli general permissions { help }\n"
@@ -3855,7 +3956,7 @@ msgstr ""
"Zeigt die Aufrufberechtigungen für authentifizierte Operationen.\n"
"\n"
-#: ../cli/src/network-manager.c:139
+#: ../clients/cli/network-manager.c:137
#, c-format
msgid ""
"Usage: nmcli general logging { ARGUMENTS | help }\n"
@@ -3880,7 +3981,7 @@ msgstr ""
"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
+#: ../clients/cli/network-manager.c:151
#, c-format
msgid ""
"Usage: nmcli networking { COMMAND | help }\n"
@@ -3905,7 +4006,7 @@ msgstr ""
" connectivity [check]\n"
"\n"
-#: ../cli/src/network-manager.c:164
+#: ../clients/cli/network-manager.c:162
#, c-format
msgid ""
"Usage: nmcli networking on { help }\n"
@@ -3918,7 +4019,7 @@ msgstr ""
"Netzwerkverbindungen einschalten.\n"
"\n"
-#: ../cli/src/network-manager.c:173
+#: ../clients/cli/network-manager.c:171
#, c-format
msgid ""
"Usage: nmcli networking off { help }\n"
@@ -3931,7 +4032,7 @@ msgstr ""
"Netzwerkverbindungen ausschalten.\n"
"\n"
-#: ../cli/src/network-manager.c:182
+#: ../clients/cli/network-manager.c:180
#, c-format
msgid ""
"Usage: nmcli networking connectivity { ARGUMENTS | help }\n"
@@ -3952,7 +4053,7 @@ msgstr ""
"Verbindungsstatus erneut.\n"
"\n"
-#: ../cli/src/network-manager.c:195
+#: ../clients/cli/network-manager.c:193
#, c-format
msgid ""
"Usage: nmcli radio { COMMAND | help }\n"
@@ -3977,7 +4078,7 @@ msgstr ""
" all | wifi | wwan [ on | off ]\n"
"\n"
-#: ../cli/src/network-manager.c:210
+#: ../clients/cli/network-manager.c:208
#, c-format
msgid ""
"Usage: nmcli radio all { ARGUMENTS | help }\n"
@@ -3994,7 +4095,7 @@ msgstr ""
"Ruft den Status aller Funkschalter ab oder schaltet diese an/aus.\n"
"\n"
-#: ../cli/src/network-manager.c:221
+#: ../clients/cli/network-manager.c:219
#, c-format
msgid ""
"Usage: nmcli radio wifi { ARGUMENTS | help }\n"
@@ -4011,7 +4112,7 @@ msgstr ""
"Ruft den Status des Wi-Fi-Funkschalters ab oder schaltet diesen an/aus.\n"
"\n"
-#: ../cli/src/network-manager.c:232
+#: ../clients/cli/network-manager.c:230
#, c-format
msgid ""
"Usage: nmcli radio wwan { ARGUMENTS | help }\n"
@@ -4029,7 +4130,7 @@ msgstr ""
"aus.\n"
"\n"
-#: ../cli/src/network-manager.c:244
+#: ../clients/cli/network-manager.c:242
#, c-format
msgid ""
"Usage: nmcli radio wimax { ARGUMENTS | help }\n"
@@ -4046,176 +4147,176 @@ msgstr ""
"Ruft den Status des WiMAX-Funkschalters ab oder schaltet diesen an/aus.\n"
"\n"
-#: ../cli/src/network-manager.c:264
+#: ../clients/cli/network-manager.c:262
msgid "asleep"
msgstr "schlafend"
-#: ../cli/src/network-manager.c:266
+#: ../clients/cli/network-manager.c:264
msgid "connecting"
msgstr "wird verbunden"
-#: ../cli/src/network-manager.c:268
+#: ../clients/cli/network-manager.c:266
msgid "connected (local only)"
msgstr "verbunden (nur lokal)"
-#: ../cli/src/network-manager.c:270
+#: ../clients/cli/network-manager.c:268
msgid "connected (site only)"
msgstr "verbunden (nur Gelände)"
-#: ../cli/src/network-manager.c:274
+#: ../clients/cli/network-manager.c:272
msgid "disconnecting"
msgstr "wird getrennt"
-#: ../cli/src/network-manager.c:290
+#: ../clients/cli/network-manager.c:288
msgid "portal"
msgstr "Portal"
-#: ../cli/src/network-manager.c:292
+#: ../clients/cli/network-manager.c:290
msgid "limited"
msgstr "begrenzt"
-#: ../cli/src/network-manager.c:294
+#: ../clients/cli/network-manager.c:292
msgid "full"
msgstr "vollständig"
-#: ../cli/src/network-manager.c:332
+#: ../clients/cli/network-manager.c:330
#, c-format
msgid "Error: only these fields are allowed: %s"
msgstr "Fehler: Nur die folgenden Felder sind erlaubt: %s"
-#: ../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
+#: ../clients/cli/network-manager.c:346 ../clients/cli/network-manager.c:347
+#: ../clients/cli/network-manager.c:348 ../clients/cli/network-manager.c:349
+#: ../clients/cli/network-manager.c:350 ../clients/cli/network-manager.c:352
+#: ../clients/cli/network-manager.c:353
msgid "enabled"
msgstr "aktiviert"
-#: ../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
+#: ../clients/cli/network-manager.c:346 ../clients/cli/network-manager.c:347
+#: ../clients/cli/network-manager.c:348 ../clients/cli/network-manager.c:349
+#: ../clients/cli/network-manager.c:350 ../clients/cli/network-manager.c:352
+#: ../clients/cli/network-manager.c:353
msgid "disabled"
msgstr "deaktiviert"
-#: ../cli/src/network-manager.c:367
+#: ../clients/cli/network-manager.c:365
msgid "NetworkManager status"
msgstr "Status von NetworkManager"
-#: ../cli/src/network-manager.c:372
+#: ../clients/cli/network-manager.c:370
msgid "running"
msgstr "wird ausgeführt"
-#: ../cli/src/network-manager.c:372
+#: ../clients/cli/network-manager.c:370
msgid "not running"
msgstr "wird nicht ausgeführt"
-#: ../cli/src/network-manager.c:375
+#: ../clients/cli/network-manager.c:373
msgid "starting"
msgstr "wird gestartet"
-#: ../cli/src/network-manager.c:375
+#: ../clients/cli/network-manager.c:373
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:446
+#: ../clients/cli/network-manager.c:444
msgid "auth"
msgstr "Legitimierung"
-#: ../cli/src/network-manager.c:475
+#: ../clients/cli/network-manager.c:473
#, c-format
msgid "Error: 'general permissions': %s"
msgstr "Fehler: »general permissions«: %s"
-#: ../cli/src/network-manager.c:489
+#: ../clients/cli/network-manager.c:487
msgid "NetworkManager permissions"
msgstr "Befugnisse von NetworkManager"
-#: ../cli/src/network-manager.c:530
+#: ../clients/cli/network-manager.c:528
#, c-format
msgid "Error: 'general logging': %s"
msgstr "Fehler: »general logging«: %s"
-#: ../cli/src/network-manager.c:545
+#: ../clients/cli/network-manager.c:543
msgid "NetworkManager logging"
msgstr "Protokollierung in NetworkManager"
-#: ../cli/src/network-manager.c:565
+#: ../clients/cli/network-manager.c:563
#, c-format
msgid "Error: failed to set hostname: (%d) %s"
msgstr "Fehler: Festlegen des Rechnernamens schlug fehl: (%d) %s"
-#: ../cli/src/network-manager.c:682
+#: ../clients/cli/network-manager.c:681
#, c-format
msgid "Error: access denied to set logging; %s"
msgstr "Fehler: Zugriff verweigert um die Protokollierung einzustellen: %s"
-#: ../cli/src/network-manager.c:684
+#: ../clients/cli/network-manager.c:683
#, c-format
msgid "Error: %s"
msgstr "Fehler: %s"
-#: ../cli/src/network-manager.c:692
+#: ../clients/cli/network-manager.c:691
#, c-format
msgid "Error: 'general' command '%s' is not valid."
msgstr "Fehler: Der allgemeine Befehl »%s« ist ungültig."
-#: ../cli/src/network-manager.c:710
+#: ../clients/cli/network-manager.c:709
#, c-format
msgid "Error: '--fields' value '%s' is not valid here (allowed field: %s)"
msgstr ""
"Fehler: Der Wert »%s« für »--fields« ist hier nicht gültig (erlaubtes Feld: "
"%s)"
-#: ../cli/src/network-manager.c:735
+#: ../clients/cli/network-manager.c:734
#, c-format
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:746
+#: ../clients/cli/network-manager.c:745
msgid "Connectivity"
msgstr "Konnektivität"
-#: ../cli/src/network-manager.c:758
+#: ../clients/cli/network-manager.c:757
msgid "Networking"
msgstr "Netzwerk"
-#: ../cli/src/network-manager.c:783
+#: ../clients/cli/network-manager.c:782
#, 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:799
+#: ../clients/cli/network-manager.c:798
#, c-format
msgid "Error: 'networking' command '%s' is not valid."
msgstr "Fehler: Der »networking«-Befehl »%s« ist ungültig."
-#: ../cli/src/network-manager.c:825 ../cli/src/network-manager.c:845
+#: ../clients/cli/network-manager.c:824 ../clients/cli/network-manager.c:844
msgid "Radio switches"
msgstr "Funkschalter"
#. no argument, show current WiFi state
-#: ../cli/src/network-manager.c:863
+#: ../clients/cli/network-manager.c:862
msgid "Wi-Fi radio switch"
msgstr "WLAN-Funkschalter"
#. no argument, show current WWAN (mobile broadband) state
-#: ../cli/src/network-manager.c:879
+#: ../clients/cli/network-manager.c:878
msgid "WWAN radio switch"
msgstr "WWAN-Funkschalter"
#. no argument, show current WiMAX state
-#: ../cli/src/network-manager.c:896
+#: ../clients/cli/network-manager.c:895
msgid "WiMAX radio switch"
msgstr "WiMAX-Funkschalter"
-#: ../cli/src/network-manager.c:908
+#: ../clients/cli/network-manager.c:907
#, c-format
msgid "Error: 'radio' command '%s' is not valid."
msgstr "Fehler: Der »radio«-Befehl »%s« ist ungültig."
-#: ../cli/src/nmcli.c:82
+#: ../clients/cli/nmcli.c:82
#, c-format
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
@@ -4269,344 +4370,290 @@ msgstr ""
" d[evice] Von NetworkManager verwaltete Geräte\n"
"\n"
-#: ../cli/src/nmcli.c:136
+#: ../clients/cli/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:166
+#: ../clients/cli/nmcli.c:166
#, c-format
msgid "Error: Option '--terse' is specified the second time."
msgstr "Fehler: Option »--terse« wurde zweimal gesetzt."
-#: ../cli/src/nmcli.c:171
+#: ../clients/cli/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:179
+#: ../clients/cli/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:184
+#: ../clients/cli/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:194 ../cli/src/nmcli.c:210 ../cli/src/nmcli.c:239
+#: ../clients/cli/nmcli.c:194 ../clients/cli/nmcli.c:210
+#: ../clients/cli/nmcli.c:239
#, c-format
msgid "Error: missing argument for '%s' option."
msgstr "Fehler: Fehlendes Argument für die Option »%s«."
-#: ../cli/src/nmcli.c:203 ../cli/src/nmcli.c:219
+#: ../clients/cli/nmcli.c:203 ../clients/cli/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«."
-#: ../cli/src/nmcli.c:226
+#: ../clients/cli/nmcli.c:226
#, c-format
msgid "Error: fields for '%s' options are missing."
msgstr "Fehler: Felder für die Option »%s« fehlen."
-#: ../cli/src/nmcli.c:244
+#: ../clients/cli/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
+#: ../clients/cli/nmcli.c:251
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "nmcli-Werkzeug, Version %s\n"
-#: ../cli/src/nmcli.c:257
+#: ../clients/cli/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:292
+#: ../clients/cli/nmcli.c:337 ../clients/cli/nmcli.c:346
#, c-format
msgid ""
"\n"
-"Error: nmcli terminated by signal %d."
+"Error: nmcli terminated by signal %s (%d)\n"
msgstr ""
"\n"
-"Fehler: nmcli mit Signal %d beendet."
+"Fehler: nmcli mit Signal %s (%d) beendet\n"
-#: ../cli/src/nmcli.c:322 ../src/main.c:128
+#: ../clients/cli/nmcli.c:377
#, c-format
-msgid "Failed to set signal mask: %d"
-msgstr "Fehler beim Festlegen der Signalmaske: %d"
+msgid "Failed to set signal mask: %d\n"
+msgstr "Fehler beim Festlegen der Signalmaske: %d\n"
-#: ../cli/src/nmcli.c:329 ../src/main.c:137
+#: ../clients/cli/nmcli.c:384
#, c-format
-msgid "Failed to create signal handling thread: %d"
-msgstr "Erstellen des Threads für die Signalbehandlung schlug fehl: %d"
+msgid "Failed to create signal handling thread: %d\n"
+msgstr "Erstellen des Threads für die Signalbehandlung schlug fehl: %d\n"
-#: ../cli/src/nmcli.c:342 ../test/nm-online.c:166
-#, c-format
-msgid "Error: Could not create NMClient object."
+#: ../clients/cli/nmcli.c:399 ../clients/nm-online.c:197
+#, fuzzy, c-format
+#| msgid "Error: Could not create NMClient object."
+msgid "Error: Could not create NMClient object: %s."
msgstr "Fehler: NMClient-Objekt konnte nicht erstellt werden."
-#: ../cli/src/nmcli.c:358
+#: ../clients/cli/nmcli.c:416
msgid "Success"
msgstr "Erfolg"
-#: ../cli/src/settings.c:666
+#: ../clients/cli/settings.c:665
#, c-format
msgid "%d (key)"
msgstr "%d (Schlüssel)"
-#: ../cli/src/settings.c:668
+#: ../clients/cli/settings.c:667
#, c-format
msgid "%d (passphrase)"
msgstr "%d (Passphrase)"
-#: ../cli/src/settings.c:671 ../cli/src/settings.c:799
+#: ../clients/cli/settings.c:670 ../clients/cli/settings.c:748
#, c-format
msgid "%d (unknown)"
msgstr "%d (unbekannt)"
-#: ../cli/src/settings.c:697
-msgid "0 (unknown)"
-msgstr "0 (unbekannt)"
-
-#: ../cli/src/settings.c:703
-msgid "any, "
-msgstr "jede,"
-
-#: ../cli/src/settings.c:705
-msgid "900 MHz, "
-msgstr "900 MHz,"
-
-#: ../cli/src/settings.c:707
-msgid "1800 MHz, "
-msgstr "1800 MHz,"
-
-#: ../cli/src/settings.c:709
-msgid "1900 MHz, "
-msgstr "1900 MHz,"
-
-#: ../cli/src/settings.c:711
-msgid "850 MHz, "
-msgstr "850 MHz,"
-
-#: ../cli/src/settings.c:713
-msgid "WCDMA 3GPP UMTS 2100 MHz, "
-msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-
-#: ../cli/src/settings.c:715
-msgid "WCDMA 3GPP UMTS 1800 MHz, "
-msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-
-#: ../cli/src/settings.c:717
-msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
-msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-
-#: ../cli/src/settings.c:719
-msgid "WCDMA 3GPP UMTS 800 MHz, "
-msgstr "WCDMA 3GPP UMTS 800 MHz, "
-
-#: ../cli/src/settings.c:721
-msgid "WCDMA 3GPP UMTS 850 MHz, "
-msgstr "WCDMA 3GPP UMTS 850 MHz, "
-
-#: ../cli/src/settings.c:723
-msgid "WCDMA 3GPP UMTS 900 MHz, "
-msgstr "WCDMA 3GPP UMTS 900 MHz, "
-
-#: ../cli/src/settings.c:725
-msgid "WCDMA 3GPP UMTS 1700 MHz, "
-msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-
-#: ../cli/src/settings.c:727
-msgid "WCDMA 3GPP UMTS 1900 MHz, "
-msgstr "WCDMA 3GPP UMTS 1900 MHz, "
-
-#: ../cli/src/settings.c:729
-msgid "WCDMA 3GPP UMTS 2600 MHz, "
-msgstr "WCDMA 3GPP UMTS 2600 MHz, "
-
-#: ../cli/src/settings.c:747
+#: ../clients/cli/settings.c:696
msgid "0 (NONE)"
msgstr "0 (KEINES)"
-#: ../cli/src/settings.c:753
+#: ../clients/cli/settings.c:702
msgid "REORDER_HEADERS, "
msgstr "REORDER_HEADERS, "
-#: ../cli/src/settings.c:755
+#: ../clients/cli/settings.c:704
msgid "GVRP, "
msgstr "GVRP, "
-#: ../cli/src/settings.c:757
+#: ../clients/cli/settings.c:706
msgid "LOOSE_BINDING, "
msgstr "LOOSE_BINDING, "
-#: ../cli/src/settings.c:793
+#: ../clients/cli/settings.c:742
#, c-format
msgid "%d (disabled)"
msgstr "%d (deaktiviert)"
-#: ../cli/src/settings.c:795
+#: ../clients/cli/settings.c:744
#, c-format
msgid "%d (enabled, prefer public IP)"
msgstr "%d (aktiviert, öffentliche IP bevorzugen)"
-#: ../cli/src/settings.c:797
+#: ../clients/cli/settings.c:746
#, c-format
msgid "%d (enabled, prefer temporary IP)"
msgstr "%d (aktiviert, temporäre IP bevorzugen)"
-#: ../cli/src/settings.c:809
+#: ../clients/cli/settings.c:758
msgid "0 (none)"
msgstr "0 (keine)"
-#: ../cli/src/settings.c:815
+#: ../clients/cli/settings.c:764
msgid "agent-owned, "
msgstr "Agent-Besitz, "
-#: ../cli/src/settings.c:817
+#: ../clients/cli/settings.c:766
msgid "not saved, "
msgstr "nicht gespeichert,"
-#: ../cli/src/settings.c:819
+#: ../clients/cli/settings.c:768
msgid "not required, "
msgstr "nicht notwendig, "
-#: ../cli/src/settings.c:1124
+#: ../clients/cli/settings.c:1074
msgid "0 (disabled)"
msgstr "0 (deaktiviert)"
-#: ../cli/src/settings.c:1130
+#: ../clients/cli/settings.c:1080
msgid "enabled, "
msgstr "aktiviert, "
-#: ../cli/src/settings.c:1132
+#: ../clients/cli/settings.c:1082
msgid "advertise, "
msgstr "sichtbar, "
-#: ../cli/src/settings.c:1134
+#: ../clients/cli/settings.c:1084
msgid "willing, "
msgstr "willig, "
-#: ../cli/src/settings.c:1162
+#: ../clients/cli/settings.c:1112
msgid "-1 (unset)"
msgstr "-1 (nicht gesetzt)"
-#: ../cli/src/settings.c:1270 ../cli/src/settings.c:1453
-#: ../cli/src/settings.c:1493
+#: ../clients/cli/settings.c:1209 ../clients/cli/settings.c:1392
+#: ../clients/cli/settings.c:1432
msgid "auto"
msgstr "auto"
-#: ../cli/src/settings.c:1283
+#: ../clients/cli/settings.c:1222
msgid "default"
msgstr "Vorgabe"
-#: ../cli/src/settings.c:1621
+#: ../clients/cli/settings.c:1560
#, 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
+#: ../clients/cli/settings.c:1562
#, 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
+#: ../clients/cli/settings.c:1723
#, c-format
msgid ""
"Warning: %s.%s set to '%s', but it might be ignored in infrastructure mode\n"
msgstr ""
+"Warnung: %s.%s wurde auf »%s« festgelegt. Es könnte aber im Infrastruktur-"
+"Modus ignoriert werden\n"
-#: ../cli/src/settings.c:1866 ../cli/src/settings.c:2146
-#: ../cli/src/settings.c:4204
+#: ../clients/cli/settings.c:1805 ../clients/cli/settings.c:2065
+#: ../clients/cli/settings.c:4147
#, c-format
msgid "'%s' is not valid"
msgstr "»%s» ist ungültig"
-#: ../cli/src/settings.c:1889
+#: ../clients/cli/settings.c:1828
#, c-format
msgid "'%d' is not valid; use <%d-%d>"
msgstr "»%d« ist ungültig. Verwenden Sie <%d-%d>"
-#: ../cli/src/settings.c:1911
+#: ../clients/cli/settings.c:1850
#, c-format
msgid "'%u' is not valid; use <%d-%d>"
msgstr "»%u« ist ungültig. Verwenden Sie <%d-%d>"
-#: ../cli/src/settings.c:1977
+#: ../clients/cli/settings.c:1916
#, c-format
msgid "'%s' is not valid; use <option>=<value>"
msgstr "»%s« ist ungültig. Verwenden Sie <Option>=<Wert>"
-#: ../cli/src/settings.c:2011
+#: ../clients/cli/settings.c:1950
#, c-format
msgid "index '%s' is not valid"
msgstr "Index »%s« ist ungültig"
-#: ../cli/src/settings.c:2016 ../cli/src/settings.c:2041
+#: ../clients/cli/settings.c:1955 ../clients/cli/settings.c:1980
msgid "no item to remove"
msgstr "Kein Eintrag zum Entfernen vorhanden"
-#: ../cli/src/settings.c:2020 ../cli/src/settings.c:2045
+#: ../clients/cli/settings.c:1959 ../clients/cli/settings.c:1984
#, 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
+#: ../clients/cli/settings.c:1999
#, c-format
msgid "invalid option '%s'"
msgstr "Ungültige Option »%s«"
-#: ../cli/src/settings.c:2062
+#: ../clients/cli/settings.c:2001
msgid "missing option"
msgstr "fehlende Option"
-#: ../cli/src/settings.c:2092 ../cli/src/settings.c:2112
+#: ../clients/cli/settings.c:2031
#, 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
+#: ../clients/cli/settings.c:2085
#, 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
+#: ../clients/cli/settings.c:2111 ../libnm-core/nm-setting-connection.c:816
+#: ../libnm-core/nm-setting-infiniband.c:266
+#: ../libnm-util/nm-setting-connection.c:833
+#: ../libnm-util/nm-setting-infiniband.c:267
#, 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
+#: ../clients/cli/settings.c:2129 ../clients/cli/settings.c:3536
+#: ../libnm-core/nm-setting-gsm.c:339 ../libnm-util/nm-setting-gsm.c:372
#, c-format
msgid "'%s' is not a number"
msgstr "»%s« ist keine Zahl"
-#: ../cli/src/settings.c:2262
+#: ../clients/cli/settings.c:2181
#, c-format
msgid "'%s' is not a valid hex character"
msgstr "»%s« ist kein gültiger hexadezimaler Wert"
-#: ../cli/src/settings.c:2292
+#: ../clients/cli/settings.c:2211
#, 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
+#: ../clients/cli/settings.c:2248 ../libnm-core/nm-setting-connection.c:773
+#: ../libnm-util/nm-setting-connection.c:790
#, c-format
msgid "'%s' is not a valid UUID"
msgstr "»%s» ist keine gültige UUID"
-#: ../cli/src/settings.c:2396
+#: ../clients/cli/settings.c:2315
#, c-format
msgid "the property doesn't contain permission '%s'"
msgstr "die Eigenschaft enthält nicht die Berechtigung »%s«"
-#: ../cli/src/settings.c:2408
+#: ../clients/cli/settings.c:2327
msgid ""
"Enter a list of user permissions. This is a list of user names formatted "
"as:\n"
@@ -4622,34 +4669,39 @@ msgstr ""
"\n"
"Beispiel: alice bob charlie\n"
-#: ../cli/src/settings.c:2427
+#: ../clients/cli/settings.c:2346
#, 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
+#: ../clients/cli/settings.c:2390
#, c-format
msgid "Warning: %s is not an UUID of any existing connection profile\n"
-msgstr ""
+msgstr "Warnung: %s ist keine UUID eines vorhandenen Verbindungsprofils.\n"
+
+#: ../clients/cli/settings.c:2394 ../clients/cli/settings.c:2410
+#, c-format
+msgid "'%s' is not a VPN connection profile"
+msgstr "»%s« ist kein Name eines VPN-Verbindungsprofils"
-#: ../cli/src/settings.c:2476
+#: ../clients/cli/settings.c:2403
#, 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
+#: ../clients/cli/settings.c:2437
#, 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
+#: ../clients/cli/settings.c:2444
#, c-format
msgid "the property doesn't contain UUID '%s'"
msgstr "die Eigenschaft enthält nicht die UUID »%s«"
-#: ../cli/src/settings.c:2521
+#: ../clients/cli/settings.c:2456
msgid ""
"Enter secondary connections that should be activated when this connection "
"is\n"
@@ -4661,27 +4713,38 @@ msgid ""
"\n"
"Example: private-openvpn, fe6ba5d8-c2fc-4aae-b2e3-97efddd8d9a7\n"
msgstr ""
+"Geben Sie eine Zweitverbindung ein, die aktiviert werden soll, wenn diese "
+"Verbindung\n"
+"aktiviert wird. Verbindungen können entweder über ein UUID oder eine Kennung "
+"(einen\n"
+"Namen) angegeben werden. nmcli übersetzt transparent Namen in UUIDs. "
+"Bedenken\n"
+"Sie, dass NetworkManager derzeit nur VPNs als gleichzeitige "
+"Zweitverbindungen unterstützt.\n"
+"Die Objekte dürfen durch Kommata oder Leerzeichen getrennt sein.\n"
+"\n"
+"Beispiel: private-openvpn, fe6ba5d8-c2fc-4aae-b2e3-97efddd8d9a7\n"
-#: ../cli/src/settings.c:2598
+#: ../clients/cli/settings.c:2533
msgid "private key password not provided"
msgstr "Passwort für privaten Schlüssel nicht angegeben"
-#: ../cli/src/settings.c:2625
+#: ../clients/cli/settings.c:2560
#, 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
+#: ../clients/cli/settings.c:2585
+#, fuzzy, c-format
msgid "the property doesn't contain alternative subject match '%s'"
-msgstr ""
+msgstr "die Eigenschaft enthält kein alternative Themen passend zu »%s«"
-#: ../cli/src/settings.c:2679
-#, c-format
+#: ../clients/cli/settings.c:2614
+#, fuzzy, c-format
msgid "the property doesn't contain \"phase2\" alternative subject match '%s'"
-msgstr ""
+msgstr "die Eigenschaft enthält nicht die Berechtigung »%s«"
-#: ../cli/src/settings.c:2705
+#: ../clients/cli/settings.c:2640
msgid ""
"Enter path to a private key and the key password (if not set yet):\n"
" <file path> [<password>]\n"
@@ -4692,7 +4755,7 @@ msgstr ""
" <Dateipfad> [<Passwort>]\n"
"Beispiel: /home/cimrman/jara-priv-key Dardanely\n"
-#: ../cli/src/settings.c:2775
+#: ../clients/cli/settings.c:2710
msgid ""
"Enter bytes as a list of hexadecimal values.\n"
"Two formats are accepted:\n"
@@ -4714,7 +4777,7 @@ msgstr ""
"Beispiele: ab0455a6ea3a74C2\n"
" ab 4 55 0xa6 ea 3a 74 C2\n"
-#: ../cli/src/settings.c:2878
+#: ../clients/cli/settings.c:2813
#, c-format
msgid ""
"Enter a list of bonding options formatted as:\n"
@@ -4745,22 +4808,22 @@ msgstr ""
"\n"
"Beispiel: mode=2,miimon=120\n"
-#: ../cli/src/settings.c:2919
+#: ../clients/cli/settings.c:2854
#, c-format
msgid "'%s' is not a valid InfiniBand MAC"
msgstr "»%s« ist keine gültige InfiniBand MAC-Adresse"
-#: ../cli/src/settings.c:2957
+#: ../clients/cli/settings.c:2892
#, 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
+#: ../clients/cli/settings.c:2960 ../clients/cli/settings.c:3305
#, 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
+#: ../clients/cli/settings.c:2972
msgid ""
"Enter a list of IPv4 addresses of DNS servers.\n"
"\n"
@@ -4770,22 +4833,22 @@ msgstr ""
"\n"
"Beispiel: 8.8.8.8, 8.8.4.4\n"
-#: ../cli/src/settings.c:3073 ../cli/src/settings.c:3420
+#: ../clients/cli/settings.c:3008 ../clients/cli/settings.c:3359
#, 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
+#: ../clients/cli/settings.c:3028 ../clients/cli/settings.c:3379
#, 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
+#: ../clients/cli/settings.c:3077 ../clients/cli/settings.c:3427
#, 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
+#: ../clients/cli/settings.c:3090
msgid ""
"Enter a list of IPv4 addresses formatted as:\n"
" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
@@ -4799,33 +4862,41 @@ msgstr ""
"\n"
"Beispiel: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
-#: ../cli/src/settings.c:3206
+#: ../clients/cli/settings.c:3143 ../clients/cli/settings.c:3458
#, 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])"
+msgid "'%s' is not valid (the format is: ip[/prefix] [next-hop] [metric])"
+msgstr "»%s« ist ungültig (das Format ist: ip/[prefix] [next-hop] [Metrik])"
-#: ../cli/src/settings.c:3254 ../cli/src/settings.c:3565
+#: ../clients/cli/settings.c:3191 ../clients/cli/settings.c:3506
#, c-format
msgid "the property doesn't contain route '%s'"
msgstr "Die Eigenschaft enthält nicht die Route »%s«"
-#: ../cli/src/settings.c:3267
+#: ../clients/cli/settings.c:3204
msgid ""
"Enter a list of IPv4 routes formatted as:\n"
-" ip/[prefix] next-hop [metric],...\n"
+" ip[/prefix] [next-hop] [metric],...\n"
+"\n"
"Missing prefix is regarded as a prefix of 32.\n"
-"Missing metric is regarded as a metric of 0.\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"
-"Example: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\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 ""
"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"
+" ip/[Präfix] [next-hop] [Metrik],... \n"
"\n"
-"Beispiel: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\n"
+"Ein fehlendes Präfix wird als Präfix 32 angenommen.\n"
+"Ein fehlender next-hop wird als 0.0.0.0 angenommen.\n"
+"Eine fehlende Metrik oder 0 wird als voreingestellte Metrik angenommen (NM/"
+"kernel legen einen Vorgabewert fest).\n"
+"\n"
+"Beispiele: 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:3378
+#: ../clients/cli/settings.c:3317
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 "
@@ -4845,7 +4916,7 @@ msgstr ""
"\n"
"Beispiel: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
-#: ../cli/src/settings.c:3501
+#: ../clients/cli/settings.c:3440
msgid ""
"Enter a list of IPv6 addresses formatted as:\n"
" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
@@ -4861,46 +4932,48 @@ msgstr ""
"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
+#: ../clients/cli/settings.c:3519
msgid ""
"Enter a list of IPv6 routes formatted as:\n"
-" ip/[prefix] next-hop [metric],...\n"
+" ip[/prefix] [next-hop] [metric],...\n"
+"\n"
"Missing prefix is regarded as a prefix of 128.\n"
-"Missing metric is regarded as a metric of 0.\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"
-"Example: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
+"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 ""
"Geben Sie eine Liste von IPv6-Routen nach folgendem Format ein:\n"
-" ip/[Präfix] next-hop [Metrik],... \n"
+" ip/[Präfix] [next-hop] [Metrik],... \n"
+"\n"
"Fehlendes Präfix wird als Präfix 128 angenommen.\n"
-"Fehlende Metrik wird als Metrik 0 angenommen.\n"
+"Fehlender next-hop wird als »::« angenommen\n"
+"Fehlende Metrik oder 0 wird als Vorgane-Metrik angenommen (NM/kernel legen "
+"einen Vorgabewert fest).\n"
"\n"
-"Beispiel: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
+"Beispiele: 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:3600
+#: ../clients/cli/settings.c:3543
#, 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
+#: ../clients/cli/settings.c:3560
#, 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
+#: ../clients/cli/settings.c:3581
#, 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
+#: ../clients/cli/settings.c:3609
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 "
@@ -4918,45 +4991,50 @@ msgstr ""
"\"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n"
" set team.config /etc/my-team.conf\n"
-#: ../cli/src/settings.c:3706
+#: ../clients/cli/settings.c:3649
msgid "no priority to remove"
msgstr "Keine Priorität zum Entfernen"
-#: ../cli/src/settings.c:3710
+#: ../clients/cli/settings.c:3653
#, 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
+#: ../clients/cli/settings.c:3692
#, c-format
msgid ""
"Warning: only one mapping at a time is supported; taking the first one (%s)\n"
msgstr ""
+"Warnung: Es wird nur eine Abbildung gleichzeitig unterstützt. Es wird die "
+"erste verwendet (%s)\n"
-#: ../cli/src/settings.c:3756
+#: ../clients/cli/settings.c:3699
#, 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
+#: ../clients/cli/settings.c:3808 ../clients/cli/settings.c:3976
+#: ../libnm-core/nm-setting-wired.c:633
+#: ../libnm-core/nm-setting-wireless.c:810
+#: ../libnm-core/nm-setting-wireless.c:824
+#: ../libnm-util/nm-setting-wired.c:648
+#: ../libnm-util/nm-setting-wireless.c:840
+#: ../libnm-util/nm-setting-wireless.c:854
#, 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
+#: ../clients/cli/settings.c:3814 ../clients/cli/settings.c:3982
#, 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
+#: ../clients/cli/settings.c:3833
#, 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
+#: ../clients/cli/settings.c:3852
msgid ""
"Enter a list of three channels (comma or space separated).\n"
"\n"
@@ -4967,7 +5045,7 @@ msgstr ""
"\n"
"Beispiel: 0.0.0e20 0.0.0e21 0.0.0e22\n"
-#: ../cli/src/settings.c:3959
+#: ../clients/cli/settings.c:3902
#, c-format
msgid ""
"Enter a list of S/390 options formatted as:\n"
@@ -4978,53 +5056,57 @@ msgstr ""
" Option = <Wert>, Option = <Wert>,… \n"
"Mögliche Optionen sind: %s\n"
-#: ../cli/src/settings.c:4005
+#: ../clients/cli/settings.c:3948
#, c-format
msgid "'%s' is not a valid channel"
msgstr "»%s« ist kein gültiger Kanal"
-#: ../cli/src/settings.c:4011
+#: ../clients/cli/settings.c:3954
#, 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
+#: ../clients/cli/settings.c:4041 ../clients/cli/settings.c:4079
+#: ../clients/cli/settings.c:4117
#, c-format
msgid "the property doesn't contain protocol '%s'"
msgstr "die Eigenschaft enthält nicht das Protokoll »%s«"
-#: ../cli/src/settings.c:4213
+#: ../clients/cli/settings.c:4156
#, c-format
msgid ""
"'%s' not compatible with %s '%s', please change the key or set the right %s "
"first."
msgstr ""
+"»%s« ist nicht kompatibel mit %s »%s«. Bitte ändern Sie den Schlüssel oder "
+"legen Sie zuerst das richtige %s fest."
-#: ../cli/src/settings.c:4221
+#: ../clients/cli/settings.c:4164
#, 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
+#: ../clients/cli/settings.c:4166
#, 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
+#: ../clients/cli/settings.c:4189
#, 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
+#: ../clients/cli/settings.c:4205 ../clients/cli/settings.c:4208
+#: ../clients/cli/settings.c:4211 ../clients/cli/settings.c:4214
#, c-format
msgid ""
"Warning: '%s' is not compatible with '%s' type, please change or delete the "
"key.\n"
msgstr ""
+"Warnung: »%s« ist nicht kompatibel mit dem Typ »%s«. Bitte ändern oder "
+"löschen Sie den Schlüssel.\n"
-#: ../cli/src/settings.c:4284
+#: ../clients/cli/settings.c:4227
#, c-format
msgid ""
"Enter the type of WEP keys. The accepted values are: 0 or unknown, 1 or key, "
@@ -5034,36 +5116,36 @@ msgstr ""
"»unknown« (unbekannt), 1 oder »key« (Schlüssel) und 2 oder "
"»passphrase« (Passwort).\n"
-#: ../cli/src/settings.c:4297
+#: ../clients/cli/settings.c:4240
#, c-format
msgid "'%s' is not a valid PSK"
msgstr "»%s« ist kein gültiger PSK"
-#: ../cli/src/settings.c:4341
+#: ../clients/cli/settings.c:4284
#, c-format
msgid "'%s' is not a valid DCB flag"
msgstr "»%s« ist kein gültiges DCB-Flag"
-#: ../cli/src/settings.c:4364
+#: ../clients/cli/settings.c:4307
#, c-format
msgid "'%s' is not a DCB app priority"
msgstr "»%s« ist keine gültige DCB-Applikationspriorität"
-#: ../cli/src/settings.c:4390
+#: ../clients/cli/settings.c:4333
msgid "must contain 8 comma-separated numbers"
msgstr "muss 8 mit Kommata getrennte Zahlen enthalten"
-#: ../cli/src/settings.c:4407
+#: ../clients/cli/settings.c:4350
#, 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
+#: ../clients/cli/settings.c:4353
#, 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
+#: ../clients/cli/settings.c:4375
#, c-format
msgid ""
"Warning: changes will have no effect until '%s' includes 1 (enabled)\n"
@@ -5073,93 +5155,96 @@ msgstr ""
"(aktiviert)\n"
"\n"
-#: ../cli/src/settings.c:4485
+#: ../clients/cli/settings.c:4428
#, c-format
msgid "bandwidth percentages must total 100%%"
msgstr "Die Prozentzahlen der Bandbreiten müssen in Summe 100%% ergeben"
-#: ../cli/src/settings.c:6163
+#: ../clients/cli/settings.c:6099
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
+#: ../clients/cli/settings.c:6152 ../clients/cli/settings.c:6192
msgid "the property can't be changed"
msgstr "Die Einstellung konnte nicht geändert werden"
-#: ../cli/src/settings.c:6360
+#: ../clients/cli/settings.c:6275
+msgid "(not available)"
+msgstr "(nicht verfügbar)"
+
+#: ../clients/cli/settings.c:6300
msgid "[NM property description]"
msgstr "[NM Eigenschaft-Beschreibung]"
-#: ../cli/src/settings.c:6366
+#: ../clients/cli/settings.c:6305
msgid "[nmcli specific description]"
msgstr "[nmcli-spezifische Beschreibung]"
-#: ../cli/src/utils.c:128
+#: ../clients/cli/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
+#: ../clients/cli/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
+#: ../clients/cli/utils.c:156
#, c-format
msgid "Error: Unexpected argument '%s'"
msgstr "Fehler: Unerwarteter Parameter »%s«."
-#: ../cli/src/utils.c:206
+#: ../clients/cli/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:234
+#: ../clients/cli/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:406
-#, fuzzy, c-format
-#| msgid "'%s' is ambiguous (%s x %s)"
+#: ../clients/cli/utils.c:408
+#, c-format
msgid "'%s' is ambiguous (on x off)"
-msgstr "»%s« ist mehrdeutig (%s x %s)"
+msgstr "»%s« ist mehrdeutig (ein x aus)"
-#: ../cli/src/utils.c:416
+#: ../clients/cli/utils.c:418
#, c-format
msgid "'%s' is not valid; use [%s] or [%s]"
msgstr "»%s« ist ungültig. Verwenden Sie [%s] oder [%s]."
-#: ../cli/src/utils.c:498
+#: ../clients/cli/utils.c:500
#, c-format
msgid "'%s' is ambiguous (%s x %s)"
msgstr "»%s« ist mehrdeutig (%s x %s)"
-#: ../cli/src/utils.c:510
+#: ../clients/cli/utils.c:512
#, c-format
msgid "missing name, try one of [%s]"
msgstr "Fehlender Name, versuchen Sie einen von [%s]"
-#: ../cli/src/utils.c:727
+#: ../clients/cli/utils.c:729
#, c-format
msgid "field '%s' has to be alone"
msgstr "Feld »%s« muss allein stehen"
-#: ../cli/src/utils.c:730
+#: ../clients/cli/utils.c:732
#, c-format
msgid "invalid field '%s'; allowed fields: %s"
msgstr "Ungültiges Feld »%s«; erlaubte Felder: %s"
-#: ../cli/src/utils.c:787
+#: ../clients/cli/utils.c:789
msgid "Option '--terse' requires specifying '--fields'"
msgstr "Option »--terse« benötigt die Angabe von »--fields«"
-#: ../cli/src/utils.c:791
+#: ../clients/cli/utils.c:793
#, c-format
msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
msgstr "Option »--terse« benötigt bestimmte »--fields«-Werte, nicht »%s«"
-#: ../cli/src/utils.c:1110
+#: ../clients/cli/utils.c:1112
#, c-format
msgid ""
"Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --"
@@ -5168,7 +5253,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:1119
+#: ../clients/cli/utils.c:1121
#, c-format
msgid ""
"Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force "
@@ -5178,201 +5263,996 @@ 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"
+#: ../clients/nm-online.c:96
+#, c-format
+msgid "\rConnecting"
+msgstr "\rWird verbunden"
-#: ../libnm-glib/nm-device.c:1818
-msgid "OLPC Mesh"
-msgstr "OLPC-Mesh"
+#: ../clients/nm-online.c:149
+msgid ""
+"Time to wait for a connection, in seconds (without the option, default value "
+"is 30)"
+msgstr ""
+"Zeit zum Warten auf eine Verbindung, in Sekunden (ohne Angabe ist die "
+"Voreinstellung 30)"
-#: ../libnm-glib/nm-device.c:1820
-msgid "WiMAX"
-msgstr "WiMAX"
+#: ../clients/nm-online.c:150
+msgid "Exit immediately if NetworkManager is not running or connecting"
+msgstr ""
+"Sofort beenden, falls NetworkManager nicht ausgeführt wird oder eine "
+"Verbindung herstellt"
+
+#: ../clients/nm-online.c:151
+msgid "Don't print anything"
+msgstr "Nichts ausgeben"
+
+#: ../clients/nm-online.c:152
+msgid "Wait for NetworkManager startup instead of a connection"
+msgstr "Auf Start von NetworkManager anstatt auf eine Verbindungen warten"
+
+#: ../clients/nm-online.c:173
+msgid ""
+"Waits for NetworkManager to finish activating startup network connections."
+msgstr ""
+"Auf NetworkManager zum Aktivieren der Start-Netzwerkverbindungen warten"
-#: ../libnm-glib/nm-device.c:1822 ../tui/nm-editor-utils.c:182
+#: ../clients/nm-online.c:180 ../clients/nm-online.c:186
+msgid "Invalid option. Please use --help to see a list of valid options."
+msgstr ""
+"Ungültige Option. Verwenden Sie »--help«, um eine Liste gültiger Optionen "
+"zu erhalten."
+
+#: ../clients/tui/newt/nmt-newt-utils.c:180 ../clients/tui/nmt-editor.c:231
+#: ../clients/tui/nmt-password-dialog.c:175
+#: ../clients/tui/nmt-route-editor.c:135 ../clients/tui/nmtui-hostname.c:71
+#: ../clients/tui/nmtui.c:118
+msgid "OK"
+msgstr "OK"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:328
+#: ../clients/tui/newt/nmt-newt-utils.c:360
+#, c-format
+msgid "Could not create temporary file: %s"
+msgstr "Temporäre Datei konnte nicht erstellt werden: %s"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:368
+#, c-format
+msgid "Editor failed: %s"
+msgstr "Editor fehlgeschlagen: %s"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:376
+#, c-format
+msgid "Editor failed with status %d"
+msgstr "Editor fehlgeschlagen mit Status %d"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:378
+#, c-format
+msgid "Editor failed with signal %d"
+msgstr "Editor fehlgeschlagen mit Signal %d"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:382
+#, c-format
+msgid "Could not re-read file: %s"
+msgstr "Datei konnte nicht erneut eingelesen werden: %s"
+
+#: ../clients/tui/nm-editor-utils.c:151
+#, c-format
+msgid "Ethernet connection %d"
+msgstr "Ethernet-Verbindung %d"
+
+#: ../clients/tui/nm-editor-utils.c:159
+#, c-format
+msgid "Wi-Fi connection %d"
+msgstr "WLAN-Verbindung %d"
+
+#: ../clients/tui/nm-editor-utils.c:168
+#: ../src/devices/nm-device-infiniband.c:258
+#, c-format
+msgid "InfiniBand connection %d"
+msgstr "InfiniBand-Verbindung %d"
+
+#: ../clients/tui/nm-editor-utils.c:173 ../libnm-glib/nm-device.c:1798
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
+#: ../clients/tui/nm-editor-utils.c:176
+#, c-format
+msgid "Mobile broadband connection %d"
+msgstr "Mobile Breitband-Verbindung %d"
+
+#: ../clients/tui/nm-editor-utils.c:181
+msgid "DSL"
+msgstr "DSL"
+
+#: ../clients/tui/nm-editor-utils.c:185
+#, c-format
+msgid "DSL connection %d"
+msgstr "DSL-Verbindung %d"
+
+#: ../clients/tui/nm-editor-utils.c:191 ../libnm-core/nm-connection.c:1584
+#: ../libnm-glib/nm-device.c:1802 ../libnm-util/nm-connection.c:1595
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4290
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"
+#: ../clients/tui/nm-editor-utils.c:195 ../src/devices/nm-device-bond.c:138
+#, c-format
+msgid "Bond connection %d"
+msgstr "Gebündelte Verbindung %d"
-#: ../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
+#: ../clients/tui/nm-editor-utils.c:200 ../libnm-core/nm-connection.c:1588
+#: ../libnm-glib/nm-device.c:1806 ../libnm-util/nm-connection.c:1599
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4596
msgid "Bridge"
msgstr "Brücke"
-#: ../libnm-glib/nm-device.c:1834
-msgid "ADSL"
-msgstr "ADSL"
+#: ../clients/tui/nm-editor-utils.c:205 ../src/devices/nm-device-bridge.c:148
+#, c-format
+msgid "Bridge connection %d"
+msgstr "Brückenverbindung %d"
-#: ../libnm-glib/nm-device.c:1862
-msgid "Wired"
-msgstr "Kabelgebunden"
+#: ../clients/tui/nm-editor-utils.c:209 ../libnm-core/nm-connection.c:1586
+#: ../libnm-glib/nm-device.c:1804 ../libnm-util/nm-connection.c:1597
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4401
+msgid "Team"
+msgstr "Bündelung"
-#: ../libnm-glib/nm-device.c:1893
-msgid "PCI"
-msgstr "PCI"
+#: ../clients/tui/nm-editor-utils.c:214
+#: ../src/devices/team/nm-device-team.c:149
+#, c-format
+msgid "Team connection %d"
+msgstr "Gebündelte Verbindung %d"
-#: ../libnm-glib/nm-device.c:1895
-msgid "USB"
-msgstr "USB"
+#: ../clients/tui/nm-editor-utils.c:222 ../src/devices/nm-device-vlan.c:233
+#, c-format
+msgid "VLAN connection %d"
+msgstr "VLAN-Verbindung %d"
-#. 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.
+#: ../clients/tui/nm-editor-utils.c:237 ../src/nm-manager.c:3434
+#, c-format
+msgid "VPN connection %d"
+msgstr "VPN-Verbindung %d"
+
+#: ../clients/tui/nmt-device-entry.c:389
+msgid "Select..."
+msgstr "Auswählen …"
+
+#: ../clients/tui/nmt-edit-connection-list.c:129
+msgid "Add"
+msgstr "Hinzufügen"
+
+#: ../clients/tui/nmt-edit-connection-list.c:132
+#: ../clients/tui/nmt-page-ip4.c:175 ../clients/tui/nmt-page-ip6.c:173
+#: ../clients/tui/nmt-page-team-port.c:110 ../clients/tui/nmt-page-team.c:180
+msgid "Edit..."
+msgstr "Bearbeiten …"
+
+#: ../clients/tui/nmt-edit-connection-list.c:135
+#: ../clients/tui/nmtui-edit.c:467
+msgid "Delete"
+msgstr "Löschen"
+
+#: ../clients/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."
+
+#: ../clients/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."
+
+#: ../clients/tui/nmt-editor.c:95
+msgid "Edit Connection"
+msgstr "Verbindung bearbeiten"
+
+#: ../clients/tui/nmt-editor.c:134
+#, c-format
+msgid "Error saving connection: %s"
+msgstr "Fehler beim Speichern der Verbindung: %s"
+
+#: ../clients/tui/nmt-editor.c:144
+#, c-format
+msgid "Unable to save connection: %s"
+msgstr "Verbindung kann nicht gespeichert werden: %s"
+
+#: ../clients/tui/nmt-editor.c:158
+#, c-format
+msgid "Unable to add new connection: %s"
+msgstr "Neue Verbindung kann nicht hinzugefügt werden: %s"
+
+#: ../clients/tui/nmt-editor.c:228 ../clients/tui/nmt-password-dialog.c:172
+#: ../clients/tui/nmt-route-editor.c:128 ../clients/tui/nmtui-edit.c:192
+#: ../clients/tui/nmtui-edit.c:466 ../clients/tui/nmtui-hostname.c:69
+msgid "Cancel"
+msgstr "Abbrechen"
+
+#: ../clients/tui/nmt-mtu-entry.c:86
+msgid "(default)"
+msgstr "(Vorgabe)"
+
+#: ../clients/tui/nmt-mtu-entry.c:88 ../clients/tui/nmt-mtu-entry.c:119
+msgid "bytes"
+msgstr "Byte"
+
+#: ../clients/tui/nmt-page-bond.c:88
+msgid "Round-robin"
+msgstr "Rundlaufverfahren"
+
+#: ../clients/tui/nmt-page-bond.c:89
+msgid "Active Backup"
+msgstr "Aktive Sicherung"
+
+#: ../clients/tui/nmt-page-bond.c:90
+msgid "XOR"
+msgstr "XOR"
+
+#: ../clients/tui/nmt-page-bond.c:91
+msgid "Broadcast"
+msgstr "Broadcast"
+
+#: ../clients/tui/nmt-page-bond.c:92
+msgid "802.3ad"
+msgstr "802.3ad"
+
+#: ../clients/tui/nmt-page-bond.c:93
+msgid "Adaptive Transmit Load Balancing (tlb)"
+msgstr "Adaptive Transmit Load Balancing (tlb)"
+
+#: ../clients/tui/nmt-page-bond.c:94
+msgid "Adaptive Load Balancing (alb)"
+msgstr "Adaptive Load Balancing (alb)"
+
+#: ../clients/tui/nmt-page-bond.c:100
+msgid "MII (recommended)"
+msgstr "MII (empfohlen)"
+
+#: ../clients/tui/nmt-page-bond.c:101
+msgid "ARP"
+msgstr "ARP"
+
+#: ../clients/tui/nmt-page-bond.c:359 ../clients/tui/nmt-page-bridge.c:86
+#: ../clients/tui/nmt-page-team.c:159
+msgid "Slaves"
+msgstr "Sklaven"
+
+#: ../clients/tui/nmt-page-bond.c:371 ../clients/tui/nmt-page-wifi.c:226
+msgid "Mode"
+msgstr "Modus"
+
+#: ../clients/tui/nmt-page-bond.c:377
+msgid "Primary"
+msgstr "Primär"
+
+#: ../clients/tui/nmt-page-bond.c:383
+msgid "Link monitoring"
+msgstr "Verbindungsüberwachung"
+
+#: ../clients/tui/nmt-page-bond.c:389 ../clients/tui/nmt-page-bond.c:396
+#: ../clients/tui/nmt-page-bond.c:403 ../clients/tui/nmt-page-bond.c:410
+msgctxt "milliseconds"
+msgid "ms"
+msgstr "ms"
+
+#: ../clients/tui/nmt-page-bond.c:390 ../clients/tui/nmt-page-bond.c:411
+msgid "Monitoring frequency"
+msgstr "Ãœberwachungsfrequenz"
+
+#: ../clients/tui/nmt-page-bond.c:397
+msgid "Link up delay"
+msgstr "Verzögerung bei der Aktivierung einer Verbindung"
+
+#: ../clients/tui/nmt-page-bond.c:404
+msgid "Link down delay"
+msgstr "Verzögerung bei der Deaktivierung einer Verbindung"
+
+#: ../clients/tui/nmt-page-bond.c:417
+msgid "ARP targets"
+msgstr "ARP-Ziele"
+
+#: ../clients/tui/nmt-page-bridge-port.c:38
+msgid "BRIDGE PORT"
+msgstr "Bridge-Port"
+
+#: ../clients/tui/nmt-page-bridge-port.c:69
+#: ../clients/tui/nmt-page-bridge.c:112
+msgid "Priority"
+msgstr "Priorität"
+
+#: ../clients/tui/nmt-page-bridge-port.c:75
+msgid "Path cost"
+msgstr "Pfadkosten"
+
+#: ../clients/tui/nmt-page-bridge-port.c:77
+msgid "Hairpin mode"
+msgstr "Hairpin-Modus"
+
+#: ../clients/tui/nmt-page-bridge.c:42
+msgid "BRIDGE"
+msgstr "Bridge"
+
+#: ../clients/tui/nmt-page-bridge.c:96 ../clients/tui/nmt-page-bridge.c:121
+#: ../clients/tui/nmt-page-bridge.c:131 ../clients/tui/nmt-page-bridge.c:141
+msgid "seconds"
+msgstr "Sekunden"
+
+#: ../clients/tui/nmt-page-bridge.c:97
+msgid "Aging time"
+msgstr "Alterungszeit"
+
+#: ../clients/tui/nmt-page-bridge.c:99
+msgid "Enable STP (Spanning Tree Protocol)"
+msgstr "STP aktivieren (Spanning Tree Protocol)"
+
+#: ../clients/tui/nmt-page-bridge.c:122
+msgid "Forward delay"
+msgstr "Verzögerung beim Weiterleiten"
+
+#: ../clients/tui/nmt-page-bridge.c:132
+msgid "Hello time"
+msgstr "Hello-Zeitintervall"
+
+#: ../clients/tui/nmt-page-bridge.c:142
+msgid "Max age"
+msgstr "Höchstzulässiges Alter"
+
+#: ../clients/tui/nmt-page-ethernet.c:41
+msgid "ETHERNET"
+msgstr "ETHERNET"
+
+#: ../clients/tui/nmt-page-ethernet.c:80 ../clients/tui/nmt-page-vlan.c:130
+#: ../clients/tui/nmt-page-wifi.c:357
+msgid "Cloned MAC address"
+msgstr "Geklonte MAC-Adresse"
+
+#: ../clients/tui/nmt-page-infiniband.c:40
+msgid "INFINIBAND"
+msgstr "INFINIBAND"
+
+#: ../clients/tui/nmt-page-infiniband.c:51
+msgid "Datagram"
+msgstr "Datagramm"
+
+#: ../clients/tui/nmt-page-infiniband.c:52
+msgid "Connected"
+msgstr "Verbunden"
+
+#: ../clients/tui/nmt-page-infiniband.c:90
+msgid "Transport mode"
+msgstr "Transportmodus"
+
+#: ../clients/tui/nmt-page-ip4.c:41
+msgid "Disabled"
+msgstr "Deaktiviert"
+
+#: ../clients/tui/nmt-page-ip4.c:42 ../clients/tui/nmt-page-ip6.c:42
+msgid "Automatic"
+msgstr "Automatisch"
+
+#: ../clients/tui/nmt-page-ip4.c:43 ../clients/tui/nmt-page-ip6.c:44
+msgid "Link-Local"
+msgstr "Link-Local"
+
+#: ../clients/tui/nmt-page-ip4.c:44 ../clients/tui/nmt-page-ip6.c:45
+msgid "Manual"
+msgstr "Manuell"
+
+#: ../clients/tui/nmt-page-ip4.c:45
+msgid "Shared"
+msgstr "Geteilt"
+
+#: ../clients/tui/nmt-page-ip4.c:54
+msgid "IPv4 CONFIGURATION"
+msgstr "IPv4-Konfiguration"
+
+#: ../clients/tui/nmt-page-ip4.c:100 ../clients/tui/nmt-page-ip6.c:100
+msgid "(No custom routes)"
+msgstr "(Keine eigenen Routen)"
+
+#: ../clients/tui/nmt-page-ip4.c:103 ../clients/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"
+
+#: ../clients/tui/nmt-page-ip4.c:144 ../clients/tui/nmt-page-ip6.c:144
+msgid "Addresses"
+msgstr "Adressen"
+
+#: ../clients/tui/nmt-page-ip4.c:150 ../clients/tui/nmt-page-ip6.c:150
+msgid "Gateway"
+msgstr "Gateway"
+
+#: ../clients/tui/nmt-page-ip4.c:156 ../clients/tui/nmt-page-ip6.c:156
+msgid "DNS servers"
+msgstr "DNS-Server"
+
+#: ../clients/tui/nmt-page-ip4.c:162 ../clients/tui/nmt-page-ip6.c:162
+msgid "Search domains"
+msgstr "Suchdomänen"
+
+#: ../clients/tui/nmt-page-ip4.c:177 ../clients/tui/nmt-page-ip6.c:175
+msgid "Routing"
+msgstr "Routing"
+
+#: ../clients/tui/nmt-page-ip4.c:179 ../clients/tui/nmt-page-ip6.c:177
+msgid "Never use this network for default route"
+msgstr "Dieses Netz niemals für die Standard-Route verwenden"
+
+#: ../clients/tui/nmt-page-ip4.c:187
+msgid "Require IPv4 addressing for this connection"
+msgstr "Eine IPv4-Adressierung für diese Verbindung verlangen"
+
+#: ../clients/tui/nmt-page-ip6.c:41
+msgid "Ignore"
+msgstr "Ignorieren"
+
+#: ../clients/tui/nmt-page-ip6.c:43
+msgid "Automatic (DHCP-only)"
+msgstr "Automatisch (nur DHCP)"
+
+#: ../clients/tui/nmt-page-ip6.c:54
+msgid "IPv6 CONFIGURATION"
+msgstr "IPv6-Konfiguration"
+
+#: ../clients/tui/nmt-page-ip6.c:185
+msgid "Require IPv6 addressing for this connection"
+msgstr "Eine IPv6-Adressierung für diese Verbindung verlangen"
+
+#: ../clients/tui/nmt-page-main.c:133
+msgid "Hide"
+msgstr "Verbergen"
+
+#: ../clients/tui/nmt-page-main.c:133
+msgid "Show"
+msgstr "Anzeigen"
+
+#: ../clients/tui/nmt-page-main.c:180
+msgid "Profile name"
+msgstr "Profilname"
+
+#: ../clients/tui/nmt-page-main.c:187
+msgid "Device"
+msgstr "Gerät"
+
+#: ../clients/tui/nmt-page-main.c:251
+msgid "Automatically connect"
+msgstr "Automatisch verbinden"
+
+#: ../clients/tui/nmt-page-main.c:257
+msgid "Available to all users"
+msgstr "Für alle Benutzer verfügbar"
+
+#: ../clients/tui/nmt-page-team-port.c:45
+msgid "TEAM PORT"
+msgstr "Bündelungsport"
+
+#: ../clients/tui/nmt-page-team-port.c:100 ../clients/tui/nmt-page-team.c:170
+msgid "JSON configuration"
+msgstr "JSON-Konfiguration"
+
+#: ../clients/tui/nmt-page-team.c:51
+msgid "TEAM"
+msgstr "Bündelung"
+
+#: ../clients/tui/nmt-page-vlan.c:107
+msgid "Parent"
+msgstr "Parent"
+
+#: ../clients/tui/nmt-page-vlan.c:122
+msgid "VLAN id"
+msgstr "VLAN Kennung"
+
+#: ../clients/tui/nmt-page-wifi.c:57
+msgid "WI-FI"
+msgstr "WLAN"
+
+#: ../clients/tui/nmt-page-wifi.c:68
+msgctxt "Wi-Fi"
+msgid "Client"
+msgstr "Client"
+
+#: ../clients/tui/nmt-page-wifi.c:69
+msgid "Access Point"
+msgstr "Zugriffspunkt"
+
+#: ../clients/tui/nmt-page-wifi.c:70
+msgid "Ad-Hoc Network"
+msgstr "Ad-Hoc Netzwerk"
+
+#: ../clients/tui/nmt-page-wifi.c:75
+msgctxt "Wi-Fi"
+msgid "Automatic"
+msgstr "Automatisch"
+
+#. 802.11a Wi-Fi network
+#: ../clients/tui/nmt-page-wifi.c:77
+msgid "A (5 GHz)"
+msgstr "A (5 GHz)"
+
+#. 802.11b / 802.11g Wi-Fi network
+#: ../clients/tui/nmt-page-wifi.c:79
+msgid "B/G (2.4 GHz)"
+msgstr "B/G (2.4 GHz)"
+
+#: ../clients/tui/nmt-page-wifi.c:84
+msgctxt "Wi-Fi security"
+msgid "None"
+msgstr "Keine"
+
+#: ../clients/tui/nmt-page-wifi.c:85
+msgid "WPA & WPA2 Personal"
+msgstr "WPA & WPA2 Persönlich"
+
+#: ../clients/tui/nmt-page-wifi.c:86
+msgid "WPA & WPA2 Enterprise"
+msgstr "WPA & WPA2 Unternehmen"
+
+#: ../clients/tui/nmt-page-wifi.c:87
+msgid "WEP 40/128-bit Key (Hex or ASCII)"
+msgstr "WEP 40/128-Bit-Schlüssel (Hexadezimal oder ASCII-Zeichen)"
+
+#: ../clients/tui/nmt-page-wifi.c:88
+msgid "WEP 128-bit Passphrase"
+msgstr "WEP 128 Bit Passphrase"
+
+#: ../clients/tui/nmt-page-wifi.c:89
+msgid "Dynamic WEP (802.1x)"
+msgstr "Dynamisches WEP (802.1x)"
+
+#: ../clients/tui/nmt-page-wifi.c:90
+msgid "LEAP"
+msgstr "LEAP"
+
+#: ../clients/tui/nmt-page-wifi.c:95
+msgctxt "WEP key index"
+msgid "1 (Default)"
+msgstr "1 (Vorgabe)"
+
+#: ../clients/tui/nmt-page-wifi.c:96
+msgctxt "WEP key index"
+msgid "2"
+msgstr "2"
+
+#: ../clients/tui/nmt-page-wifi.c:97
+msgctxt "WEP key index"
+msgid "3"
+msgstr "3"
+
+#: ../clients/tui/nmt-page-wifi.c:98
+msgctxt "WEP key index"
+msgid "4"
+msgstr "4"
+
+#: ../clients/tui/nmt-page-wifi.c:103
+msgid "Open System"
+msgstr "Offenes System"
+
+#: ../clients/tui/nmt-page-wifi.c:104
+msgid "Shared Key"
+msgstr "Gemeinsamer Schlüssel"
+
+#: ../clients/tui/nmt-page-wifi.c:252
+msgid "Channel"
+msgstr "Kanal"
+
+#: ../clients/tui/nmt-page-wifi.c:257
+msgid "Security"
+msgstr "Sicherheit"
+
+#: ../clients/tui/nmt-page-wifi.c:273 ../clients/tui/nmt-page-wifi.c:304
+#: ../clients/tui/nmt-page-wifi.c:334 ../clients/tui/nmt-secret-agent.c:212
+#: ../clients/tui/nmt-secret-agent.c:249 ../clients/tui/nmt-secret-agent.c:279
+#: ../clients/tui/nmt-secret-agent.c:312 ../clients/tui/nmt-secret-agent.c:378
+#: ../clients/tui/nmt-secret-agent.c:391 ../clients/tui/nmt-secret-agent.c:407
+msgid "Password"
+msgstr "Passwort"
+
+#. "wpa-enterprise"
+#. FIXME
+#: ../clients/tui/nmt-page-wifi.c:278
+msgid "(No support for wpa-enterprise yet...)"
+msgstr "(WPA-Unternehmen wird derzeit noch nicht unterstützt …)"
+
+#: ../clients/tui/nmt-page-wifi.c:285 ../clients/tui/nmt-secret-agent.c:263
+msgid "Key"
+msgstr "Schlüssel"
+
+#: ../clients/tui/nmt-page-wifi.c:288 ../clients/tui/nmt-page-wifi.c:307
+msgid "WEP index"
+msgstr "WEP-Index"
+
+#: ../clients/tui/nmt-page-wifi.c:296 ../clients/tui/nmt-page-wifi.c:315
+msgid "Authentication"
+msgstr "Legitimierung"
+
+#. "dynamic-wep"
+#. FIXME
+#: ../clients/tui/nmt-page-wifi.c:321
+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)
#.
-#: ../libnm-glib/nm-device.c:1991 ../libnm-glib/nm-device.c:2010
+#: ../clients/tui/nmt-page-wifi.c:328 ../clients/tui/nmt-secret-agent.c:207
+#: ../clients/tui/nmt-secret-agent.c:302
+msgid "Username"
+msgstr "Benutzername"
+
+#: ../clients/tui/nmt-password-fields.c:130
+msgid "Ask for this password every time"
+msgstr "Nach diesem Passwort jedes mal fragen"
+
+#: ../clients/tui/nmt-password-fields.c:131
+msgid "Show password"
+msgstr "Passwort zeigen"
+
+#: ../clients/tui/nmt-route-table.c:227
+msgid "Destination"
+msgstr "Ziel"
+
+#: ../clients/tui/nmt-route-table.c:227
+msgid "Prefix"
+msgstr "Präfix"
+
+#: ../clients/tui/nmt-route-table.c:236
+msgid "Next Hop"
+msgstr "Next Hop"
+
+#: ../clients/tui/nmt-route-table.c:244
+msgid "Metric"
+msgstr "Metrik"
+
+#: ../clients/tui/nmt-route-table.c:264
+msgid "No custom routes are defined."
+msgstr "Es sind keine eigenen Routen festgelegt."
+
+#: ../clients/tui/nmt-secret-agent.c:221
+msgid "Identity"
+msgstr "Identität"
+
+#: ../clients/tui/nmt-secret-agent.c:226
+msgid "Private key password"
+msgstr "Passwort für geheimen Schlüssel"
+
+#: ../clients/tui/nmt-secret-agent.c:307
+msgid "Service"
+msgstr "Dienst"
+
+#: ../clients/tui/nmt-secret-agent.c:338
+msgid "Authentication required by wireless network"
+msgstr "Legitimierung für Funknetzwerk wird benötigt"
+
+#: ../clients/tui/nmt-secret-agent.c:339
#, c-format
-msgctxt "long device name"
-msgid "%s %s"
-msgstr "%s %s"
+msgid ""
+"Passwords or encryption keys are required to access the wireless network "
+"'%s'."
+msgstr ""
+"Passwörter oder Schlüssel sind erforderlich, um auf das Funknetzwerk »%s« "
+"zuzugreifen."
-#: ../libnm-glib/nm-remote-connection.c:151
-msgid "Disconnected by D-Bus"
-msgstr "Durch D-Bus getrennt"
+#: ../clients/tui/nmt-secret-agent.c:347
+msgid "Wired 802.1X authentication"
+msgstr "Kabelgebundene 802.1X-Legitimierung"
-#: ../libnm-util/crypto.c:133
+#: ../clients/tui/nmt-secret-agent.c:350
+msgid "Network name"
+msgstr "Netzwerkname"
+
+#: ../clients/tui/nmt-secret-agent.c:357
+msgid "DSL authentication"
+msgstr "DSL-Legitimierung"
+
+#: ../clients/tui/nmt-secret-agent.c:365
+msgid "PIN code required"
+msgstr "PIN-Code ist erforderlich"
+
+#: ../clients/tui/nmt-secret-agent.c:366
+msgid "PIN code is needed for the mobile broadband device"
+msgstr "Für das mobile Breitbandgerät ist ein PIN-Code erforderlich"
+
+#: ../clients/tui/nmt-secret-agent.c:368
+msgid "PIN"
+msgstr "PIN"
+
+#: ../clients/tui/nmt-secret-agent.c:374 ../clients/tui/nmt-secret-agent.c:387
+#: ../clients/tui/nmt-secret-agent.c:403
+msgid "Mobile broadband network password"
+msgstr "Passwort der mobilen Breitbandverbindung"
+
+#: ../clients/tui/nmt-secret-agent.c:375 ../clients/tui/nmt-secret-agent.c:388
+#: ../clients/tui/nmt-secret-agent.c:404
+#, c-format
+msgid "A password is required to connect to '%s'."
+msgstr "Es wird ein Passwort benötigt, um sich mit »%s« zu verbinden."
+
+#: ../clients/tui/nmt-slave-list.c:137
+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."
+
+#: ../clients/tui/nmt-widget-list.c:142
+msgid "Add..."
+msgstr "Hinzufügen …"
+
+#: ../clients/tui/nmt-widget-list.c:205
+msgid "Remove"
+msgstr "Entfernen"
+
+#: ../clients/tui/nmtui-connect.c:93
+msgid "Activation failed"
+msgstr "Aktivierung fehlgeschlagen"
+
+#: ../clients/tui/nmtui-connect.c:141
+msgid "Connecting..."
+msgstr "Verbindungsaufbau …"
+
+#: ../clients/tui/nmtui-connect.c:171 ../clients/tui/nmtui-connect.c:194
+#, c-format
+msgid "Could not activate connection: %s"
+msgstr "Verbindungen konnte nicht aktiviert werden: %s"
+
+#: ../clients/tui/nmtui-connect.c:258 ../clients/tui/nmtui-connect.c:307
+msgid "Activate"
+msgstr "Aktivieren"
+
+#: ../clients/tui/nmtui-connect.c:260
+msgid "Deactivate"
+msgstr "Deaktivieren"
+
+#: ../clients/tui/nmtui-connect.c:312 ../clients/tui/nmtui-edit.c:95
+#: ../clients/tui/nmtui.c:112
+msgid "Quit"
+msgstr "Beenden"
+
+#: ../clients/tui/nmtui-connect.c:335
+#, c-format
+msgid "No such connection '%s'"
+msgstr "Verbindung »%s« existiert nicht"
+
+#: ../clients/tui/nmtui-connect.c:337
+msgid "Connection is already active"
+msgstr "Verbindung ist bereits aktiv"
+
+#: ../clients/tui/nmtui-edit.c:200
+msgid "Create"
+msgstr "Erstellen"
+
+#: ../clients/tui/nmtui-edit.c:342
+msgid "Select the type of connection you wish to create."
+msgstr "Wählen Sie den Verbindungstyp, den Sie anlegen möchten."
+
+#: ../clients/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 ""
+"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."
+
+#: ../clients/tui/nmtui-edit.c:386 ../clients/tui/nmtui-edit.c:402
+msgid "New Connection"
+msgstr "Neue Verbindung"
+
+#: ../clients/tui/nmtui-edit.c:439
+#, c-format
+msgid "Unable to delete connection: %s"
+msgstr "Verbindung kann nicht gelöscht werden: %s"
+
+#: ../clients/tui/nmtui-edit.c:468
+#, 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?"
+
+#: ../clients/tui/nmtui-edit.c:482
+#, c-format
+msgid "Could not delete connection: %s"
+msgstr "Verbindung konnte nicht gelöscht werden: %s"
+
+#: ../clients/tui/nmtui-hostname.c:47
+msgid "Set Hostname"
+msgstr "Rechnername festlegen"
+
+#: ../clients/tui/nmtui-hostname.c:55
+msgid "Hostname"
+msgstr "Rechnername"
+
+#. Translators: this indicates the result. ie, "I have set the hostname to ..."
+#: ../clients/tui/nmtui-hostname.c:114
+#, c-format
+msgid "Set hostname to '%s'"
+msgstr "Rechnernamen auf »%s« festlegen"
+
+#: ../clients/tui/nmtui-hostname.c:116
+#, c-format
+msgid "Unable to set hostname: %s"
+msgstr "Fehler beim Festlegen des Rechnernamens: %s"
+
+#: ../clients/tui/nmtui.c:57 ../clients/tui/nmtui.c:60
+msgid "connection"
+msgstr "Verbindung"
+
+#: ../clients/tui/nmtui.c:58
+msgid "Edit a connection"
+msgstr "Eine Verbindung bearbeiten"
+
+#: ../clients/tui/nmtui.c:61
+msgid "Activate a connection"
+msgstr "Eine Verbindung aktivieren"
+
+#: ../clients/tui/nmtui.c:63
+msgid "new hostname"
+msgstr "neuer Rechnername"
+
+#: ../clients/tui/nmtui.c:64
+msgid "Set system hostname"
+msgstr "Den Rechnernamen des Systems festlegen"
+
+#: ../clients/tui/nmtui.c:87
+msgid "NetworkManager TUI"
+msgstr "NetworkManager Terminal-Benutzeroberfläche (TUI)"
+
+#: ../clients/tui/nmtui.c:95
+msgid "Please select an option"
+msgstr "Bitte wählen Sie eine Option"
+
+#: ../clients/tui/nmtui.c:156
+msgid "Usage"
+msgstr "Aufruf"
+
+#: ../clients/tui/nmtui.c:238
+msgid "Could not parse arguments"
+msgstr "Parameter konnten nicht verarbeitet werden"
+
+#: ../clients/tui/nmtui.c:248 ../clients/tui/nmtui.c:259
+#, fuzzy, c-format
+#| msgid "Could not activate connection: %s"
+msgid "Could not contact NetworkManager: %s.\n"
+msgstr "Verbindungen konnte nicht aktiviert werden: %s"
+
+#: ../clients/tui/nmtui.c:253
+msgid "NetworkManager is not running."
+msgstr "NetworkManager wird nicht ausgeführt."
+
+#: ../libnm-core/crypto.c:133 ../libnm-util/crypto.c:133
#, c-format
msgid "PEM key file had no end tag '%s'."
msgstr "PEM-Schlüsseldatei hat kein abschließendes Tag »%s«."
-#: ../libnm-util/crypto.c:146
+#: ../libnm-core/crypto.c:146 ../libnm-util/crypto.c:146
#, c-format
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:163
+#: ../libnm-core/crypto.c:163 ../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:171
+#: ../libnm-core/crypto.c:171 ../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:181
+#: ../libnm-core/crypto.c:181 ../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:192
+#: ../libnm-core/crypto.c:192 ../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:199
+#: ../libnm-core/crypto.c:199 ../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:214
+#: ../libnm-core/crypto.c:214 ../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:233
+#: ../libnm-core/crypto.c:233 ../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:285
+#: ../libnm-core/crypto.c:285 ../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:293
+#: ../libnm-core/crypto.c:293 ../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
+#: ../libnm-core/crypto.c:312 ../libnm-util/crypto.c:312
msgid "Failed to decode PKCS#8 private key."
msgstr "Die Entschlüsselung des privaten PKCS#8-Schlüssels scheiterte."
-#: ../libnm-util/crypto.c:354
+#: ../libnm-core/crypto.c:354 ../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:368
+#: ../libnm-core/crypto.c:368 ../libnm-util/crypto.c:368
#, c-format
msgid "IV contains non-hexadecimal digits."
msgstr "IV enthält nicht-hexadezimale Zeichen."
-#: ../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
+#: ../libnm-core/crypto.c:408 ../libnm-core/crypto_gnutls.c:150
+#: ../libnm-core/crypto_gnutls.c:267 ../libnm-core/crypto_nss.c:170
+#: ../libnm-core/crypto_nss.c:331 ../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:518
+#: ../libnm-core/crypto.c:518 ../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:573
+#: ../libnm-core/crypto.c:573 ../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:582
+#: ../libnm-core/crypto.c:582 ../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:600
+#: ../libnm-core/crypto.c:600 ../libnm-util/crypto.c:600
#, c-format
msgid "Failed to decode certificate."
msgstr "Die Entschlüsselung des Zertifikats scheiterte."
-#: ../libnm-util/crypto_gnutls.c:50
+#: ../libnm-core/crypto_gnutls.c:50 ../libnm-util/crypto_gnutls.c:50
msgid "Failed to initialize the crypto engine."
msgstr "Die Initialisierung der crypto-engine scheiterte."
-#: ../libnm-util/crypto_gnutls.c:92
+#: ../libnm-core/crypto_gnutls.c:92 ../libnm-util/crypto_gnutls.c:92
#, c-format
msgid "Failed to initialize the MD5 engine: %s / %s."
msgstr "Die Initialisierung der MD5-engine %s / %s scheiterte."
-#: ../libnm-util/crypto_gnutls.c:158
+#: ../libnm-core/crypto_gnutls.c:158 ../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:169
+#: ../libnm-core/crypto_gnutls.c:169 ../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:178
+#: ../libnm-core/crypto_gnutls.c:178 ../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:187
+#: ../libnm-core/crypto_gnutls.c:187 ../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:196
+#: ../libnm-core/crypto_gnutls.c:196 ../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-core/crypto_gnutls.c:206 ../libnm-core/crypto_nss.c:260
#: ../libnm-util/crypto_gnutls.c:206 ../libnm-util/crypto_nss.c:260
#, c-format
msgid "Failed to decrypt the private key: unexpected padding length."
@@ -5380,597 +6260,766 @@ msgstr ""
"Die Entschlüsselung des privaten Schlüssels scheiterte: Unerwartete "
"Zeilenlänge."
+#: ../libnm-core/crypto_gnutls.c:217 ../libnm-core/crypto_nss.c:271
#: ../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:289
+#: ../libnm-core/crypto_gnutls.c:289 ../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:298
+#: ../libnm-core/crypto_gnutls.c:298 ../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:308
+#: ../libnm-core/crypto_gnutls.c:308 ../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:317
+#: ../libnm-core/crypto_gnutls.c:317 ../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:357
+#: ../libnm-core/crypto_gnutls.c:357 ../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:379
+#: ../libnm-core/crypto_gnutls.c:379 ../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:403
+#: ../libnm-core/crypto_gnutls.c:403 ../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:416
+#: ../libnm-core/crypto_gnutls.c:416 ../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:428
+#: ../libnm-core/crypto_gnutls.c:428 ../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:456
+#: ../libnm-core/crypto_gnutls.c:456 ../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:479
+#: ../libnm-core/crypto_gnutls.c:479 ../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"
-#: ../libnm-util/crypto_nss.c:56
+#: ../libnm-core/crypto_nss.c:56 ../libnm-util/crypto_nss.c:56
#, c-format
msgid "Failed to initialize the crypto engine: %d."
msgstr "Die Initialisierung der crypto-engine scheiterte: %d."
-#: ../libnm-util/crypto_nss.c:107
+#: ../libnm-core/crypto_nss.c:107 ../libnm-util/crypto_nss.c:107
#, c-format
msgid "Failed to initialize the MD5 context: %d."
msgstr "Die Initialisierung des MD5-Kontexts scheiterte: %d."
-#: ../libnm-util/crypto_nss.c:178
+#: ../libnm-core/crypto_nss.c:178 ../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:189
+#: ../libnm-core/crypto_nss.c:189 ../libnm-util/crypto_nss.c:189
#, c-format
msgid "Failed to initialize the decryption cipher slot."
msgstr "Die Initialisierung des Entschlüsselungsstrom-Slots scheiterte."
-#: ../libnm-util/crypto_nss.c:199
+#: ../libnm-core/crypto_nss.c:199 ../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:209
+#: ../libnm-core/crypto_nss.c:209 ../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:217
+#: ../libnm-core/crypto_nss.c:217 ../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:230
+#: ../libnm-core/crypto_nss.c:230 ../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:238
+#: ../libnm-core/crypto_nss.c:238 ../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:249
+#: ../libnm-core/crypto_nss.c:249 ../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:353
+#: ../libnm-core/crypto_nss.c:353 ../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:361
+#: ../libnm-core/crypto_nss.c:361 ../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:369
+#: ../libnm-core/crypto_nss.c:369 ../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:377
+#: ../libnm-core/crypto_nss.c:377 ../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:385
+#: ../libnm-core/crypto_nss.c:385 ../libnm-util/crypto_nss.c:385
#, c-format
msgid "Failed to encrypt: %d."
msgstr "Das Verschlüsseln scheiterte: %d."
-#: ../libnm-util/crypto_nss.c:393
+#: ../libnm-core/crypto_nss.c:393 ../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:433
+#: ../libnm-core/crypto_nss.c:433 ../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:468
+#: ../libnm-core/crypto_nss.c:468 ../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:496
+#: ../libnm-core/crypto_nss.c:496 ../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:505
+#: ../libnm-core/crypto_nss.c:505 ../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:514
+#: ../libnm-core/crypto_nss.c:514 ../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:558
+#: ../libnm-core/crypto_nss.c:558 ../libnm-util/crypto_nss.c:558
msgid "Could not generate random data."
msgstr "Es konnten keine Zufallsdaten generiert werden."
-#: ../libnm-util/nm-setting-8021x.c:594
+#: ../libnm-core/nm-setting-8021x.c:593 ../libnm-util/nm-setting-8021x.c:596
msgid "CA certificate must be in X.509 format"
-msgstr ""
+msgstr "CA-Zertifikat muss im X.509-Format vorliegen"
-#: ../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"
+#: ../libnm-core/nm-setting-8021x.c:909 ../libnm-core/nm-setting-8021x.c:1172
+#: ../libnm-core/nm-setting-8021x.c:1493 ../libnm-util/nm-setting-8021x.c:914
+#: ../libnm-util/nm-setting-8021x.c:1177 ../libnm-util/nm-setting-8021x.c:1500
msgid "invalid certificate format"
-msgstr "Die Initialisierung der Zertifikatsdaten schlug fehl: %s"
+msgstr "Ungültiges Zertifikatsformat"
-#: ../libnm-util/nm-setting-8021x.c:1767
-#, fuzzy
-#| msgid "invalid gateway '%s'"
+#: ../libnm-core/nm-setting-8021x.c:1762 ../libnm-util/nm-setting-8021x.c:1769
msgid "invalid private key"
-msgstr "Ungültiges Gateway »%s«"
+msgstr "Ungültiger privater Schlüssel"
-#: ../libnm-util/nm-setting-8021x.c:2078
-#, fuzzy
-#| msgid "Failed to decrypt the private key."
+#: ../libnm-core/nm-setting-8021x.c:2073 ../libnm-util/nm-setting-8021x.c:2080
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
+msgstr "Ungültiger privater Schlüssel in Phase 2"
+
+#: ../libnm-core/nm-setting-8021x.c:2275 ../libnm-core/nm-setting-8021x.c:2292
+#: ../libnm-core/nm-setting-8021x.c:2333 ../libnm-core/nm-setting-8021x.c:2350
+#: ../libnm-core/nm-setting-8021x.c:2402 ../libnm-core/nm-setting-8021x.c:2414
+#: ../libnm-core/nm-setting-8021x.c:2432 ../libnm-core/nm-setting-8021x.c:2444
+#: ../libnm-core/nm-setting-8021x.c:2468 ../libnm-core/nm-setting-8021x.c:2646
+#: ../libnm-core/nm-setting-adsl.c:207
+#: ../libnm-core/nm-setting-bluetooth.c:139
+#: ../libnm-core/nm-setting-bluetooth.c:157
+#: ../libnm-core/nm-setting-cdma.c:160
+#: ../libnm-core/nm-setting-connection.c:750
+#: ../libnm-core/nm-setting-connection.c:766
+#: ../libnm-core/nm-setting-connection.c:827
+#: ../libnm-core/nm-setting-ip4-config.c:875
+#: ../libnm-core/nm-setting-ip6-config.c:798
+#: ../libnm-core/nm-setting-ip6-config.c:862
+#: ../libnm-core/nm-setting-olpc-mesh.c:122
+#: ../libnm-core/nm-setting-pppoe.c:161 ../libnm-core/nm-setting-vpn.c:401
+#: ../libnm-core/nm-setting-wimax.c:136
+#: ../libnm-core/nm-setting-wireless-security.c:884
+#: ../libnm-core/nm-setting-wireless.c:720 ../libnm-core/nm-setting.c:1298
+#: ../libnm-core/nm-setting.c:1317 ../libnm-core/nm-setting.c:1335
+#: ../libnm-util/nm-setting.c:1295 ../libnm-util/nm-setting.c:1314
+#: ../libnm-util/nm-setting.c:1332 ../libnm-util/nm-setting-8021x.c:2282
+#: ../libnm-util/nm-setting-8021x.c:2299 ../libnm-util/nm-setting-8021x.c:2340
+#: ../libnm-util/nm-setting-8021x.c:2357 ../libnm-util/nm-setting-8021x.c:2409
+#: ../libnm-util/nm-setting-8021x.c:2421 ../libnm-util/nm-setting-8021x.c:2439
+#: ../libnm-util/nm-setting-8021x.c:2451 ../libnm-util/nm-setting-8021x.c:2475
+#: ../libnm-util/nm-setting-8021x.c:2653 ../libnm-util/nm-setting-adsl.c:208
+#: ../libnm-util/nm-setting-bluetooth.c:140
+#: ../libnm-util/nm-setting-bluetooth.c:158
+#: ../libnm-util/nm-setting-cdma.c:161
+#: ../libnm-util/nm-setting-connection.c:767
+#: ../libnm-util/nm-setting-connection.c:783
+#: ../libnm-util/nm-setting-connection.c:844
+#: ../libnm-util/nm-setting-ip4-config.c:828
+#: ../libnm-util/nm-setting-ip6-config.c:809
+#: ../libnm-util/nm-setting-ip6-config.c:873
+#: ../libnm-util/nm-setting-olpc-mesh.c:122
+#: ../libnm-util/nm-setting-pppoe.c:162 ../libnm-util/nm-setting-vpn.c:402
+#: ../libnm-util/nm-setting-wimax.c:137
+#: ../libnm-util/nm-setting-wireless-security.c:891
+#: ../libnm-util/nm-setting-wireless.c:750
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-core/nm-setting-8021x.c:2282 ../libnm-core/nm-setting-8021x.c:2299
+#: ../libnm-core/nm-setting-8021x.c:2340 ../libnm-core/nm-setting-8021x.c:2357
+#: ../libnm-core/nm-setting-8021x.c:2408 ../libnm-core/nm-setting-8021x.c:2420
+#: ../libnm-core/nm-setting-8021x.c:2438 ../libnm-core/nm-setting-8021x.c:2450
+#: ../libnm-core/nm-setting-8021x.c:2475 ../libnm-core/nm-setting-adsl.c:214
+#: ../libnm-core/nm-setting-adsl.c:223 ../libnm-core/nm-setting-cdma.c:176
+#: ../libnm-core/nm-setting-cdma.c:185
+#: ../libnm-core/nm-setting-connection.c:757
+#: ../libnm-core/nm-setting-connection.c:834
+#: ../libnm-core/nm-setting-gsm.c:248 ../libnm-core/nm-setting-gsm.c:305
+#: ../libnm-core/nm-setting-gsm.c:314
+#: ../libnm-core/nm-setting-ip4-config.c:940
+#: ../libnm-core/nm-setting-ip4-config.c:949
+#: ../libnm-core/nm-setting-pppoe.c:168 ../libnm-core/nm-setting-pppoe.c:177
+#: ../libnm-core/nm-setting-vpn.c:410 ../libnm-core/nm-setting-vpn.c:420
+#: ../libnm-core/nm-setting-wimax.c:145
+#: ../libnm-core/nm-setting-wireless-security.c:914
+#: ../libnm-core/nm-setting-wireless-security.c:922
+#: ../libnm-core/nm-setting-wireless-security.c:946
+#: ../libnm-util/nm-setting-8021x.c:2289 ../libnm-util/nm-setting-8021x.c:2306
+#: ../libnm-util/nm-setting-8021x.c:2347 ../libnm-util/nm-setting-8021x.c:2364
+#: ../libnm-util/nm-setting-8021x.c:2415 ../libnm-util/nm-setting-8021x.c:2427
+#: ../libnm-util/nm-setting-8021x.c:2445 ../libnm-util/nm-setting-8021x.c:2457
+#: ../libnm-util/nm-setting-8021x.c:2482 ../libnm-util/nm-setting-adsl.c:215
+#: ../libnm-util/nm-setting-adsl.c:224 ../libnm-util/nm-setting-cdma.c:177
+#: ../libnm-util/nm-setting-cdma.c:186
+#: ../libnm-util/nm-setting-connection.c:774
+#: ../libnm-util/nm-setting-connection.c:851
+#: ../libnm-util/nm-setting-gsm.c:281 ../libnm-util/nm-setting-gsm.c:338
+#: ../libnm-util/nm-setting-gsm.c:347
+#: ../libnm-util/nm-setting-ip4-config.c:893
+#: ../libnm-util/nm-setting-ip4-config.c:902
+#: ../libnm-util/nm-setting-pppoe.c:169 ../libnm-util/nm-setting-pppoe.c:178
+#: ../libnm-util/nm-setting-vpn.c:411 ../libnm-util/nm-setting-vpn.c:421
#: ../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
+#: ../libnm-util/nm-setting-wireless-security.c:921
+#: ../libnm-util/nm-setting-wireless-security.c:929
+#: ../libnm-util/nm-setting-wireless-security.c:953
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
+#: ../libnm-core/nm-setting-8021x.c:2310 ../libnm-core/nm-setting-8021x.c:2322
+#: ../libnm-core/nm-setting-8021x.c:2368 ../libnm-core/nm-setting-8021x.c:2380
+#: ../libnm-util/nm-setting-8021x.c:2317 ../libnm-util/nm-setting-8021x.c:2329
+#: ../libnm-util/nm-setting-8021x.c:2375 ../libnm-util/nm-setting-8021x.c:2387
#, 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
+#: ../libnm-core/nm-setting-8021x.c:2621 ../libnm-core/nm-setting-8021x.c:2655
+#: ../libnm-core/nm-setting-bluetooth.c:148
+#: ../libnm-core/nm-setting-infiniband.c:203
+#: ../libnm-core/nm-setting-infiniband.c:218
+#: ../libnm-core/nm-setting-ip4-config.c:931
+#: ../libnm-core/nm-setting-ip6-config.c:853
+#: ../libnm-core/nm-setting-olpc-mesh.c:150
+#: ../libnm-core/nm-setting-wimax.c:154 ../libnm-core/nm-setting-wired.c:645
+#: ../libnm-core/nm-setting-wired.c:654
+#: ../libnm-core/nm-setting-wireless-security.c:965
+#: ../libnm-core/nm-setting-wireless-security.c:974
+#: ../libnm-core/nm-setting-wireless-security.c:982
+#: ../libnm-core/nm-setting-wireless-security.c:990
+#: ../libnm-core/nm-setting-wireless-security.c:998
+#: ../libnm-core/nm-setting-wireless-security.c:1007
+#: ../libnm-core/nm-setting-wireless-security.c:1016
+#: ../libnm-core/nm-setting-wireless-security.c:1025
+#: ../libnm-core/nm-setting-wireless-security.c:1061
+#: ../libnm-core/nm-setting-wireless-security.c:1071
+#: ../libnm-core/nm-setting-wireless.c:780
+#: ../libnm-core/nm-setting-wireless.c:789
+#: ../libnm-core/nm-setting-wireless.c:798 ../libnm-core/nm-setting.c:1308
+#: ../libnm-core/nm-setting.c:1326 ../libnm-core/nm-setting.c:1345
+#: ../libnm-util/nm-setting.c:1305 ../libnm-util/nm-setting.c:1323
+#: ../libnm-util/nm-setting.c:1342 ../libnm-util/nm-setting-8021x.c:2628
+#: ../libnm-util/nm-setting-8021x.c:2662
+#: ../libnm-util/nm-setting-bluetooth.c:149
+#: ../libnm-util/nm-setting-infiniband.c:204
+#: ../libnm-util/nm-setting-infiniband.c:219
+#: ../libnm-util/nm-setting-ip4-config.c:884
+#: ../libnm-util/nm-setting-ip6-config.c:864
+#: ../libnm-util/nm-setting-olpc-mesh.c:150
+#: ../libnm-util/nm-setting-wimax.c:155 ../libnm-util/nm-setting-wired.c:660
+#: ../libnm-util/nm-setting-wired.c:669
+#: ../libnm-util/nm-setting-wireless-security.c:972
+#: ../libnm-util/nm-setting-wireless-security.c:981
+#: ../libnm-util/nm-setting-wireless-security.c:989
+#: ../libnm-util/nm-setting-wireless-security.c:997
+#: ../libnm-util/nm-setting-wireless-security.c:1005
+#: ../libnm-util/nm-setting-wireless-security.c:1014
+#: ../libnm-util/nm-setting-wireless-security.c:1023
+#: ../libnm-util/nm-setting-wireless-security.c:1032
+#: ../libnm-util/nm-setting-wireless-security.c:1068
+#: ../libnm-util/nm-setting-wireless-security.c:1078
+#: ../libnm-util/nm-setting-wireless.c:810
+#: ../libnm-util/nm-setting-wireless.c:819
+#: ../libnm-util/nm-setting-wireless.c:828
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
+#: ../libnm-core/nm-setting-8021x.c:2680 ../libnm-core/nm-setting-8021x.c:2690
+#: ../libnm-core/nm-setting-8021x.c:2700 ../libnm-core/nm-setting-8021x.c:2710
+#: ../libnm-core/nm-setting-8021x.c:2720 ../libnm-core/nm-setting-adsl.c:234
+#: ../libnm-core/nm-setting-adsl.c:245
+#: ../libnm-core/nm-setting-bluetooth.c:165
+#: ../libnm-core/nm-setting-wireless-security.c:893
+#: ../libnm-util/nm-setting-8021x.c:2687 ../libnm-util/nm-setting-8021x.c:2697
+#: ../libnm-util/nm-setting-8021x.c:2707 ../libnm-util/nm-setting-8021x.c:2717
+#: ../libnm-util/nm-setting-8021x.c:2727 ../libnm-util/nm-setting-adsl.c:235
+#: ../libnm-util/nm-setting-adsl.c:246
+#: ../libnm-util/nm-setting-bluetooth.c:166
+#: ../libnm-util/nm-setting-wireless-security.c:900
#, 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
+#: ../libnm-core/nm-setting-bluetooth.c:183
+#: ../libnm-util/nm-setting-bluetooth.c:184
#, c-format
msgid "requires '%s' or '%s' setting"
msgstr "Erfordert die Einstellung »%s« oder »%s«"
-#: ../libnm-util/nm-setting-bond.c:518
+#: ../libnm-core/nm-setting-bond.c:495 ../libnm-util/nm-setting-bond.c:498
#, 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
+#: ../libnm-core/nm-setting-bond.c:514 ../libnm-util/nm-setting-bond.c:517
#, 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
+#: ../libnm-core/nm-setting-bond.c:525 ../libnm-util/nm-setting-bond.c:528
#, c-format
msgid "mandatory option '%s' is missing"
msgstr "zwingende Option »%s« fehlt"
-#: ../libnm-util/nm-setting-bond.c:557
+#: ../libnm-core/nm-setting-bond.c:534 ../libnm-util/nm-setting-bond.c:537
#, 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
+#: ../libnm-core/nm-setting-bond.c:547 ../libnm-util/nm-setting-bond.c:550
#, 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
+#: ../libnm-core/nm-setting-bond.c:560 ../libnm-util/nm-setting-bond.c:563
#, 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
+#: ../libnm-core/nm-setting-bond.c:570 ../libnm-util/nm-setting-bond.c:573
#, 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
+#: ../libnm-core/nm-setting-bond.c:583 ../libnm-util/nm-setting-bond.c:586
#, 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-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
+#: ../libnm-core/nm-setting-bond.c:596 ../libnm-core/nm-setting-bond.c:605
+#: ../libnm-core/nm-setting-bond.c:625 ../libnm-core/nm-setting-bond.c:661
+#: ../libnm-util/nm-setting-bond.c:599 ../libnm-util/nm-setting-bond.c:608
+#: ../libnm-util/nm-setting-bond.c:628 ../libnm-util/nm-setting-bond.c:664
#, c-format
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
+#: ../libnm-core/nm-setting-bond.c:636 ../libnm-util/nm-setting-bond.c:639
#, c-format
msgid "'%s' option is empty"
msgstr "Option »%s« ist leer"
-#: ../libnm-util/nm-setting-bond.c:671
+#: ../libnm-core/nm-setting-bond.c:648 ../libnm-util/nm-setting-bond.c:651
#, 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
+#: ../libnm-core/nm-setting-bridge-port.c:142
+#: ../libnm-core/nm-setting-bridge-port.c:154
+#: ../libnm-util/nm-setting-bridge-port.c:153
+#: ../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« ist kein gültiger Wert für die Eigenschaft (sollte <= %d sein)"
-#: ../libnm-util/nm-setting-bridge.c:251
+#: ../libnm-core/nm-setting-bridge.c:245 ../libnm-util/nm-setting-bridge.c:268
#, 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
+#: ../libnm-core/nm-setting-bridge.c:262 ../libnm-core/nm-setting-wired.c:620
+#: ../libnm-core/nm-setting-wired.c:678 ../libnm-util/nm-setting-bridge.c:285
+#: ../libnm-util/nm-setting-wired.c:635 ../libnm-util/nm-setting-wired.c:693
+msgid "is not a valid MAC address"
+msgstr "ist keine gültige MAC-Adresse"
+
+#: ../libnm-core/nm-setting-cdma.c:167 ../libnm-util/nm-setting-cdma.c:168
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
+#: ../libnm-core/nm-setting-connection.c:844
+#: ../libnm-util/nm-setting-connection.c:861
#, 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-core/nm-setting-connection.c:859
+#: ../libnm-util/nm-setting-connection.c:876
+#, c-format
+msgid "Unknown slave type '%s'"
+msgstr "Unbekannter Sklaventyp »%s«"
-#: ../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-core/nm-setting-connection.c:869
+#: ../libnm-util/nm-setting-connection.c:886
+#, fuzzy
+#| msgid "Shared connection service failed"
+msgid "Slave connections need a valid '"
+msgstr "Es muss ein gültiger Server-Pfad eingegeben werden"
-#: ../libnm-util/nm-setting-dcb.c:595
+#: ../libnm-core/nm-setting-connection.c:878
+#: ../libnm-util/nm-setting-connection.c:895
+#, fuzzy
+msgid "Cannot set '"
+msgstr " ' kann nicht gesetzt werden"
+
+#: ../libnm-core/nm-setting-dcb.c:544 ../libnm-util/nm-setting-dcb.c:593
msgid "flags invalid"
msgstr "Ungültige Flags"
-#: ../libnm-util/nm-setting-dcb.c:604
+#: ../libnm-core/nm-setting-dcb.c:553 ../libnm-util/nm-setting-dcb.c:602
msgid "flags invalid - disabled"
msgstr "Ungültige Flags - deaktiviert"
-#: ../libnm-util/nm-setting-dcb.c:630 ../libnm-util/nm-setting-dcb.c:679
+#: ../libnm-core/nm-setting-dcb.c:579 ../libnm-core/nm-setting-dcb.c:628
+#: ../libnm-util/nm-setting-dcb.c:628 ../libnm-util/nm-setting-dcb.c:677
msgid "property invalid (not enabled)"
msgstr "Eigenschaft ist ungültig (nicht aktiviert)"
-#: ../libnm-util/nm-setting-dcb.c:639
+#: ../libnm-core/nm-setting-dcb.c:588 ../libnm-util/nm-setting-dcb.c:637
msgid "element invalid"
msgstr "ungültiges Element"
-#: ../libnm-util/nm-setting-dcb.c:654
+#: ../libnm-core/nm-setting-dcb.c:603 ../libnm-util/nm-setting-dcb.c:652
msgid "sum not 100%"
msgstr "Summe nicht 100%"
-#: ../libnm-util/nm-setting-dcb.c:688 ../libnm-util/nm-setting-dcb.c:720
+#: ../libnm-core/nm-setting-dcb.c:637 ../libnm-core/nm-setting-dcb.c:669
+#: ../libnm-util/nm-setting-dcb.c:686 ../libnm-util/nm-setting-dcb.c:718
msgid "property invalid"
msgstr "Ungültige Eigenschaft"
-#: ../libnm-util/nm-setting-dcb.c:710
+#: ../libnm-core/nm-setting-dcb.c:659 ../libnm-util/nm-setting-dcb.c:708
msgid "property missing"
msgstr "Eigenschaft fehlt"
-#: ../libnm-util/nm-setting-gsm.c:297
+#: ../libnm-core/nm-setting-gsm.c:261 ../libnm-util/nm-setting-gsm.c:294
#, 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
+#: ../libnm-core/nm-setting-gsm.c:293 ../libnm-util/nm-setting-gsm.c:326
#, 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
+#: ../libnm-core/nm-setting-gsm.c:328 ../libnm-util/nm-setting-gsm.c:361
#, 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
+#: ../libnm-core/nm-setting-infiniband.c:228
+#: ../libnm-util/nm-setting-infiniband.c:229
msgid "not a valid interface name"
msgstr "kein gültiger Schnittstellenname"
-#: ../libnm-util/nm-setting-infiniband.c:236
+#: ../libnm-core/nm-setting-infiniband.c:236
+#: ../libnm-util/nm-setting-infiniband.c:237
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
+#: ../libnm-core/nm-setting-infiniband.c:246
+#: ../libnm-util/nm-setting-infiniband.c:247
msgid "InfiniBand P_Key connection did not specify parent interface name"
msgstr ""
"InfiniBand »P_Key«-Verbindung definierte keinen übergeordneten (parent) "
"Schnittstellennamen"
-#: ../libnm-util/nm-setting-ip4-config.c:897
-#: ../libnm-util/nm-setting-ip6-config.c:822
+#: ../libnm-core/nm-setting-infiniband.c:282
+#: ../libnm-util/nm-setting-infiniband.c:283
+#, c-format
+msgid ""
+"interface name of software infiniband device must be '%s' or unset (instead "
+"it is '%s')"
+msgstr ""
+"Schnittstellenname des Software Infiniband-Geräts muss »%s« oder nicht "
+"festgelegt sein (es ist statt dessen »%s«)"
+
+#: ../libnm-core/nm-setting-ip4-config.c:885
+#: ../libnm-core/nm-setting-ip6-config.c:808
+#: ../libnm-util/nm-setting-ip4-config.c:838
+#: ../libnm-util/nm-setting-ip6-config.c:819
#, c-format
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
+#: ../libnm-core/nm-setting-ip4-config.c:897
+#: ../libnm-core/nm-setting-ip4-config.c:907
+#: ../libnm-core/nm-setting-ip4-config.c:919
+#: ../libnm-core/nm-setting-ip6-config.c:821
+#: ../libnm-core/nm-setting-ip6-config.c:831
+#: ../libnm-core/nm-setting-ip6-config.c:841
+#: ../libnm-util/nm-setting-ip4-config.c:850
+#: ../libnm-util/nm-setting-ip4-config.c:860
+#: ../libnm-util/nm-setting-ip4-config.c:872
+#: ../libnm-util/nm-setting-ip6-config.c:832
+#: ../libnm-util/nm-setting-ip6-config.c:842
+#: ../libnm-util/nm-setting-ip6-config.c:852
#, 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
+#: ../libnm-core/nm-setting-ip4-config.c:966
+#: ../libnm-util/nm-setting-ip4-config.c:916
#, c-format
msgid "%d. IPv4 address is invalid"
msgstr "%d. IPv4-Adresse ist ungültig"
-#: ../libnm-util/nm-setting-ip4-config.c:988
+#: ../libnm-core/nm-setting-ip4-config.c:976
+#: ../libnm-util/nm-setting-ip4-config.c:926
#, 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
+#: ../libnm-core/nm-setting-ip4-config.c:986
#, 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
+#: ../libnm-core/nm-setting-ip4-config.c:997
#, c-format
msgid "IPv4 address / label count mismatch (%d vs %d)"
-msgstr ""
+msgstr "IPv4-Adresse / Markierungszahl stimmt nicht überein (%d gegenüber %d)"
-#: ../libnm-util/nm-setting-ip4-config.c:1025
+#: ../libnm-core/nm-setting-ip4-config.c:1013
+#: ../libnm-util/nm-setting-ip4-config.c:942
#, c-format
msgid "%d. route is invalid"
msgstr "%d. Zielwegwahl ist ungültig"
-#: ../libnm-util/nm-setting-ip4-config.c:1035
+#: ../libnm-core/nm-setting-ip4-config.c:1023
+#: ../libnm-util/nm-setting-ip4-config.c:952
#, 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
+#: ../libnm-core/nm-setting-ip6-config.c:820
+#: ../libnm-util/nm-setting-ip6-config.c:831
#, 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
+#: ../libnm-core/nm-setting-olpc-mesh.c:131
+#: ../libnm-core/nm-setting-wireless.c:729
+#: ../libnm-util/nm-setting-olpc-mesh.c:131
+#: ../libnm-util/nm-setting-wireless.c:759
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
+#: ../libnm-core/nm-setting-olpc-mesh.c:140
+#: ../libnm-core/nm-setting-wireless.c:769
+#: ../libnm-util/nm-setting-olpc-mesh.c:140
+#: ../libnm-util/nm-setting-wireless.c:799
#, c-format
msgid "'%d' is not a valid channel"
msgstr "»%d« ist kein gültiger Kanal"
-#: ../libnm-util/nm-setting-ppp.c:390
+#: ../libnm-core/nm-setting-ppp.c:386 ../libnm-util/nm-setting-ppp.c:387
#, c-format
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
+#: ../libnm-core/nm-setting-ppp.c:399 ../libnm-util/nm-setting-ppp.c:400
#, c-format
msgid "setting this property requires non-zero '%s' property"
msgstr ""
"Festlegen dieser Eigenschaft erfordert eine von Null verschiedene "
"Eigenschaft »%s«"
-#: ../libnm-util/nm-setting-vlan.c:570
+#: ../libnm-core/nm-setting-vlan.c:549 ../libnm-util/nm-setting-vlan.c:554
#, c-format
msgid "'%s' value doesn't match '%s=%s'"
msgstr "Wert »%s« entspricht nicht »%s=%s«"
-#: ../libnm-util/nm-setting-vlan.c:581
+#: ../libnm-core/nm-setting-vlan.c:560 ../libnm-util/nm-setting-vlan.c:565
#, 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
+#: ../libnm-core/nm-setting-vlan.c:573 ../libnm-util/nm-setting-vlan.c:578
#, 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
+#: ../libnm-core/nm-setting-vlan.c:586 ../libnm-util/nm-setting-vlan.c:591
msgid "flags are invalid"
msgstr "Flags sind ungültig"
-#: ../libnm-util/nm-setting-wired.c:618
+#: ../libnm-core/nm-setting-wired.c:600 ../libnm-util/nm-setting-wired.c:615
#, c-format
-msgid "'%s' is not a valid ethernet port value"
+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
+#: ../libnm-core/nm-setting-wired.c:610 ../libnm-util/nm-setting-wired.c:625
#, 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
+#: ../libnm-core/nm-setting-wired.c:667 ../libnm-util/nm-setting-wired.c:682
#, 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
+#: ../libnm-core/nm-setting-wireless-security.c:905
+#: ../libnm-util/nm-setting-wireless-security.c:912
#, c-format
msgid "'%s' security requires '%s=%s'"
msgstr "Sicherheit »%s« erfordert »%s=%s«"
-#: ../libnm-util/nm-setting-wireless-security.c:944
+#: ../libnm-core/nm-setting-wireless-security.c:934
+#: ../libnm-util/nm-setting-wireless-security.c:941
#, 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
+#: ../libnm-core/nm-setting-wireless-security.c:955
+#: ../libnm-util/nm-setting-wireless-security.c:962
#, 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
+#: ../libnm-core/nm-setting-wireless-security.c:1052
+#: ../libnm-util/nm-setting-wireless-security.c:1059
#, 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
+#: ../libnm-core/nm-setting-wireless-security.c:1082
+#: ../libnm-util/nm-setting-wireless-security.c:1089
#, 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
+#: ../libnm-core/nm-setting-wireless.c:738
+#: ../libnm-util/nm-setting-wireless.c:768
#, 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
+#: ../libnm-core/nm-setting-wireless.c:748
+#: ../libnm-util/nm-setting-wireless.c:778
#, c-format
msgid "'%s' is not a valid band"
msgstr "»%s« ist kein gültiges Band"
-#: ../libnm-util/nm-setting-wireless.c:791
+#: ../libnm-core/nm-setting-wireless.c:758
+#: ../libnm-util/nm-setting-wireless.c:788
#, c-format
msgid "requires setting '%s' property"
msgstr "erfordert eine Festlegung der Eigenschaft »%s«"
+#: ../libnm-glib/nm-device.c:1792
+msgid "Bluetooth"
+msgstr "Bluetooth"
+
+#: ../libnm-glib/nm-device.c:1810
+msgid "ADSL"
+msgstr "ADSL"
+
+#: ../libnm-glib/nm-device.c:1838
+msgid "Wired"
+msgstr "Kabelgebunden"
+
+#: ../libnm-glib/nm-device.c:1869
+msgid "PCI"
+msgstr "PCI"
+
+#: ../libnm-glib/nm-device.c:1871
+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:1967 ../libnm-glib/nm-device.c:1986
+#, c-format
+msgctxt "long device name"
+msgid "%s %s"
+msgstr "%s %s"
+
+#: ../libnm-glib/nm-remote-connection.c:149
+#: ../libnm/nm-remote-connection.c:124
+msgid "Disconnected by D-Bus"
+msgstr "Durch D-Bus getrennt"
+
+#: ../libnm/nm-object.c:149
+msgid "Caller did not specify D-Bus path for object"
+msgstr ""
+
+#: ../libnm/nm-vpn-plugin.c:751
+#, fuzzy
+#| msgid "Error: No interface specified."
+msgid "No service name specified"
+msgstr "Fehler: Es muss eine Schnittstelle angegeben werden."
+
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:1
msgid "Enable or disable system networking"
msgstr "System-Netzwerke aktivieren oder deaktivieren"
@@ -6085,82 +7134,92 @@ msgstr ""
"Die Systemrichtlinien verhindern das Bearbeiten des ständigen Rechnernamens "
"des Systems"
-#: ../src/main.c:152
+#: ../src/main.c:130
+#, c-format
+msgid "Failed to set signal mask: %d"
+msgstr "Fehler beim Festlegen der Signalmaske: %d"
+
+#: ../src/main.c:139
+#, c-format
+msgid "Failed to create signal handling thread: %d"
+msgstr "Erstellen des Threads für die Signalbehandlung schlug fehl: %d"
+
+#: ../src/main.c:154
#, c-format
msgid "Opening %s failed: %s\n"
msgstr "Öffnen von %s fehlgeschlagen: %s\n"
-#: ../src/main.c:158
+#: ../src/main.c:160
#, c-format
msgid "Writing to %s failed: %s\n"
msgstr "Schreiben nach %s gescheitert: %s\n"
-#: ../src/main.c:163
+#: ../src/main.c:165
#, c-format
msgid "Closing %s failed: %s\n"
msgstr "Schließen von %s fehlgeschlagen: %s\n"
-#: ../src/main.c:206
+#: ../src/main.c:208
#, c-format
msgid "NetworkManager is already running (pid %ld)\n"
msgstr "NetworkManager läuft bereits (pid %ld)\n"
-#: ../src/main.c:359
+#: ../src/main.c:361
msgid "Print NetworkManager version and exit"
msgstr "NetworkManager-Version anzeigen und beenden"
-#: ../src/main.c:360
+#: ../src/main.c:362
msgid "Don't become a daemon"
msgstr "Nicht zum Hintergrunddienst werden"
-#: ../src/main.c:361
+#: ../src/main.c:363
msgid "Don't become a daemon, and log to stderr"
msgstr "Nicht zum Hintergrunddienst werden und auf stderr protokollieren"
-#: ../src/main.c:362
+#: ../src/main.c:364
#, c-format
msgid "Log level: one of [%s]"
msgstr "Protokollierungsstufe: Eine von [%s]"
-#: ../src/main.c:364
+#: ../src/main.c:366
#, 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
+#: ../src/main.c:368
msgid "Make all warnings fatal"
msgstr "Alle Warnungen als fatal betrachten"
-#: ../src/main.c:367
+#: ../src/main.c:369
msgid "Specify the location of a PID file"
msgstr "Geben Sie den Ort der PID-Datei an"
-#: ../src/main.c:367
+#: ../src/main.c:369
msgid "filename"
msgstr "Dateiname"
-#: ../src/main.c:368
+#: ../src/main.c:370
msgid "State file location"
msgstr "Speicherort der Statusdatei"
-#: ../src/main.c:368
+#: ../src/main.c:370
msgid "/path/to/state.file"
msgstr "/pfad/zur/status.datei"
-#: ../src/main.c:394
+#: ../src/main.c:396
#, c-format
msgid "GModules are not supported on your platform!\n"
msgstr "GModules werden von Ihrer Plattform nicht unterstützt!\n"
-#: ../src/main.c:399
+#: ../src/main.c:401
#, 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
+#: ../src/main.c:424
msgid ""
"NetworkManager monitors all network connections and automatically\n"
"chooses the best connection to use. It also allows the user to\n"
@@ -6173,51 +7232,51 @@ msgstr ""
"dem Anwender diejenigen Drahtlos-Zugangspunkte anzugeben, mit welchen sich\n"
"die Drahtlos-Netzwerkkarten des Rechners verbinden sollen."
-#: ../src/main.c:428 ../src/main.c:444
+#: ../src/main.c:430 ../src/main.c:446
#, c-format
msgid "%s. Please use --help to see a list of valid options.\n"
msgstr ""
"%s. Verwenden Sie --help, um eine Liste der verfügbaren Optionen zu "
"erhalten.\n"
-#: ../src/main.c:449
+#: ../src/main.c:451
#, c-format
msgid "Ignoring unrecognized log domain(s) '%s' passed on command line.\n"
msgstr ""
"Unbekannte Protokolldomäne(n) »%s« wurden über die Befehlszeile erhalten.\n"
-#: ../src/main.c:500
+#: ../src/main.c:502
#, c-format
msgid "Failed to read configuration: (%d) %s\n"
msgstr "Konfiguration konnte nicht gelesen werden: (%d) %s\n"
-#: ../src/main.c:514
+#: ../src/main.c:516
#, c-format
msgid "Error in configuration file: %s.\n"
msgstr "Fehler in Konfigurationsdatei: %s.\n"
-#: ../src/main.c:519
+#: ../src/main.c:521
#, c-format
msgid "Ignoring unrecognized log domain(s) '%s' from config files.\n"
msgstr ""
"Unbekannte Protokolldomäne(n) »%s« aus den Konfigurationsdateien werden "
"ignoriert.\n"
-#: ../src/main.c:527
+#: ../src/main.c:529
#, c-format
msgid "State file %s parsing failed: (%d) %s\n"
msgstr "Statusdatei %s konnte nicht verarbeitet werden: (%d) %s\n"
-#: ../src/main.c:540
+#: ../src/main.c:542
#, 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:139
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:141
msgid "# Created by NetworkManager\n"
msgstr "# Erstellt von NetworkManager\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:146
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:148
#, c-format
msgid ""
"# Merged from %s\n"
@@ -6226,85 +7285,34 @@ msgstr ""
"# Zusammengeführt aus %s\n"
"\n"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:311
+#: ../src/dhcp-manager/nm-dhcp-manager.c:309
msgid "no usable DHCP client could be found."
msgstr "Es konnte kein verwendbarer DHCP-Client gefunden werden."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:320
+#: ../src/dhcp-manager/nm-dhcp-manager.c:318
msgid "'dhclient' could be found."
msgstr "»dhclient« wurde gefunden."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:330
+#: ../src/dhcp-manager/nm-dhcp-manager.c:328
msgid "'dhcpcd' could be found."
msgstr "»dhcpcd« wurde gefunden."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:338
+#: ../src/dhcp-manager/nm-dhcp-manager.c:336
#, c-format
msgid "unsupported DHCP client '%s'"
msgstr "Nicht unterstützter DHCP-Client »%s«"
-#: ../src/dns-manager/nm-dns-manager.c:384
+#: ../src/dns-manager/nm-dns-manager.c:374
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:386
+#: ../src/dns-manager/nm-dns-manager.c:376
msgid "The nameservers listed below may not be recognized."
msgstr "Die nachfolgend gelisteten Nameserver werden eventuell nicht erkannt."
-#: ../src/logging/nm-logging.c:151
-#, c-format
-msgid "Unknown log level '%s'"
-msgstr "Unbekannte Protokollstufe »%s«"
-
-#: ../src/logging/nm-logging.c:230
-#, c-format
-msgid "Unknown log domain '%s'"
-msgstr "Unbekannte Protokolldomäne »%s«"
-
-#: ../src/config/nm-config.c:281
-msgid "Config file location"
-msgstr "Speicherort der Konfigurationsdatei"
-
-#: ../src/config/nm-config.c:281
-msgid "/path/to/config.file"
-msgstr "/pfad/zur/config.datei"
-
-#: ../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/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
+#: ../src/devices/adsl/nm-device-adsl.c:122
#, c-format
msgid "ADSL connection %d"
msgstr "ADSL-Verbindung %d"
@@ -6314,873 +7322,254 @@ msgstr "ADSL-Verbindung %d"
msgid "%s Network"
msgstr "%s-Netzwerk"
-#: ../src/devices/bluetooth/nm-device-bt.c:308
+#: ../src/devices/bluetooth/nm-device-bt.c:274
#, c-format
msgid "PAN connection %d"
msgstr "PAN-Verbindung %d"
-#: ../src/devices/bluetooth/nm-device-bt.c:333
-#: ../src/devices/wwan/nm-modem-broadband.c:464
-#: ../src/devices/wwan/nm-modem-old.c:829
+#: ../src/devices/bluetooth/nm-device-bt.c:299
+#: ../src/devices/wwan/nm-modem-broadband.c:482
#, 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
+#: ../src/devices/bluetooth/nm-device-bt.c:303
+#: ../src/devices/wwan/nm-modem-broadband.c:504
#, c-format
msgid "CDMA connection %d"
msgstr "CDMA-Verbindung %d"
-#: ../src/devices/bluetooth/nm-device-bt.c:341
+#: ../src/devices/bluetooth/nm-device-bt.c:307
#, c-format
msgid "DUN connection %d"
msgstr "DUN-Verbindung %d"
-#: ../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
+#: ../src/devices/nm-device-ethernet.c:1486
#, c-format
msgid "PPPoE connection %d"
msgstr "PPPoE-Verbindung %d"
-#: ../src/devices/nm-device-ethernet.c:1508
+#: ../src/devices/nm-device-ethernet.c:1486
#: ../src/settings/nm-settings-utils.c:50
#, c-format
msgid "Wired connection %d"
msgstr "Kabelgebundene Verbindung %d"
-#: ../src/devices/nm-device-infiniband.c:271 ../tui/nm-editor-utils.c:177
-#, c-format
-msgid "InfiniBand connection %d"
-msgstr "InfiniBand-Verbindung %d"
-
-#: ../src/devices/nm-device-team.c:158 ../tui/nm-editor-utils.c:223
-#, c-format
-msgid "Team connection %d"
-msgstr "Gebündelte Verbindung %d"
-
-#: ../src/devices/nm-device-vlan.c:255 ../tui/nm-editor-utils.c:231
-#, c-format
-msgid "VLAN connection %d"
-msgstr "VLAN-Verbindung %d"
-
-#: ../src/devices/wifi/nm-device-olpc-mesh.c:174
+#: ../src/devices/wifi/nm-device-olpc-mesh.c:165
#, 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-sleep-monitor-systemd.c:116
-msgid "NetworkManager needs to turn off networks"
-msgstr "NetworkManager muss Netzwerke abschalten"
-
-#: ../src/settings/plugins/ifcfg-rh/reader.c:113
-msgid "System"
-msgstr "System"
-
-#: ../test/nm-online.c:86
-#, c-format
-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 ""
-"Zeit zum Warten auf eine Verbindung, in Sekunden (ohne Angabe ist die "
-"Voreinstellung 30)"
-
-#: ../test/nm-online.c:119
-msgid "Exit immediately if NetworkManager is not running or connecting"
-msgstr ""
-"Sofort beenden, falls NetworkManager nicht ausgeführt wird oder eine "
-"Verbindung herstellt"
-
-#: ../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 ""
-"Auf NetworkManager zum Aktivieren der Start-Netzwerkverbindungen warten"
-
-#: ../test/nm-online.c:148 ../test/nm-online.c:158
-msgid "Invalid option. Please use --help to see a list of valid options."
-msgstr ""
-"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"
-
-#: ../tui/newt/nmt-newt-utils.c:327 ../tui/newt/nmt-newt-utils.c:359
-#, c-format
-msgid "Could not create temporary file: %s"
-msgstr "Temporäre Datei konnte nicht erstellt werden: %s"
-
-#: ../tui/newt/nmt-newt-utils.c:367
-#, c-format
-msgid "Editor failed: %s"
-msgstr "Editor fehlgeschlagen: %s"
-
-#: ../tui/newt/nmt-newt-utils.c:375
-#, c-format
-msgid "Editor failed with status %d"
-msgstr "Editor fehlgeschlagen mit Status %d"
-
-#: ../tui/newt/nmt-newt-utils.c:377
-#, c-format
-msgid "Editor failed with signal %d"
-msgstr "Editor fehlgeschlagen mit Signal %d"
-
-#: ../tui/newt/nmt-newt-utils.c:381
-#, c-format
-msgid "Could not re-read file: %s"
-msgstr "Datei konnte nicht erneut eingelesen werden: %s"
-
-#: ../tui/nm-editor-utils.c:160
-#, c-format
-msgid "Ethernet connection %d"
-msgstr "Ethernet-Verbindung %d"
-
-#: ../tui/nm-editor-utils.c:168
-#, c-format
-msgid "Wi-Fi connection %d"
-msgstr "WLAN-Verbindung %d"
-
-#: ../tui/nm-editor-utils.c:185
-#, c-format
-msgid "Mobile broadband connection %d"
-msgstr "Mobile Breitband-Verbindung %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-Verbindung %d"
+#: ../src/nm-config.c:308
+msgid "Config file location"
+msgstr "Speicherort der Konfigurationsdatei"
-#: ../tui/nmt-device-entry.c:391
-msgid "Select..."
-msgstr "Auswählen …"
+#: ../src/nm-config.c:308
+msgid "/path/to/config.file"
+msgstr "/pfad/zur/config.datei"
-#: ../tui/nmt-edit-connection-list.c:129
-msgid "Add"
-msgstr "Hinzufügen"
+#: ../src/nm-config.c:309
+msgid "Config directory location"
+msgstr "Speicherort des Konfigurationsordners"
-#: ../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 …"
+#: ../src/nm-config.c:309
+msgid "/path/to/config/dir"
+msgstr "/Pfad/zur/Konfiguration/Ordner"
-#: ../tui/nmt-edit-connection-list.c:135 ../tui/nmtui-edit.c:462
-msgid "Delete"
-msgstr "Löschen"
+#: ../src/nm-config.c:311
+msgid "List of plugins separated by ','"
+msgstr "Mit »,« getrennte Liste von Erweiterungen"
-#: ../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."
+#: ../src/nm-config.c:311
+msgid "plugin1,plugin2"
+msgstr "erweiterung1,erweiterung2"
-#: ../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."
+#. These three are hidden for now, and should eventually just go away.
+#: ../src/nm-config.c:314
+msgid "An http(s) address for checking internet connectivity"
+msgstr "Eine http(s)-Adresse zum Prüfen der Internetverbindung"
-#: ../tui/nmt-editor.c:95
-msgid "Edit Connection"
-msgstr "Verbindung bearbeiten"
+#: ../src/nm-config.c:315
+msgid "The interval between connectivity checks (in seconds)"
+msgstr "Das Intervall zwischen Verbindungsprüfungen (in Sekunden)"
-#: ../tui/nmt-editor.c:134
-#, c-format
-msgid "Error saving connection: %s"
-msgstr "Fehler beim Speichern der Verbindung: %s"
+#: ../src/nm-config.c:316
+msgid "The expected start of the response"
+msgstr "Der erwartete Start einer Antwort"
-#: ../tui/nmt-editor.c:144
-#, c-format
-msgid "Unable to save connection: %s"
-msgstr "Verbindung kann nicht gespeichert werden: %s"
+#: ../src/nm-config.c:316
+msgid "Bingo!"
+msgstr "Bingo!"
-#: ../tui/nmt-editor.c:158
+#: ../src/nm-logging.c:159
#, 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)"
+msgid "Unknown log level '%s'"
+msgstr "Unbekannte Protokollstufe »%s«"
-#: ../tui/nmt-page-ip4.c:103 ../tui/nmt-page-ip6.c:103
+#: ../src/nm-logging.c:241
#, 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."
+msgid "Unknown log domain '%s'"
+msgstr "Unbekannte Protokolldomäne »%s«"
-#: ../tui/nmt-secret-agent.c:223
-msgid "Identity"
-msgstr "Identität"
+#: ../src/nm-sleep-monitor-systemd.c:116
+msgid "NetworkManager needs to turn off networks"
+msgstr "NetworkManager muss Netzwerke abschalten"
-#: ../tui/nmt-secret-agent.c:228
-msgid "Private key password"
-msgstr "Passwort für geheimen Schlüssel"
+#: ../src/settings/plugins/ifcfg-rh/reader.c:113
+msgid "System"
+msgstr "System"
-#: ../tui/nmt-secret-agent.c:309
-msgid "Service"
-msgstr "Dienst"
+#~ msgid "0 (unknown)"
+#~ msgstr "0 (unbekannt)"
-#: ../tui/nmt-secret-agent.c:340
-msgid "Authentication required by wireless network"
-msgstr "Legitimierung für Funknetzwerk wird benötigt"
+#~ msgid "any, "
+#~ msgstr "jede,"
-#: ../tui/nmt-secret-agent.c:341
-#, c-format
-msgid ""
-"Passwords or encryption keys are required to access the wireless network "
-"'%s'."
-msgstr ""
-"Passwörter oder Schlüssel sind erforderlich, um auf das Funknetzwerk »%s« "
-"zuzugreifen."
+#~ msgid "900 MHz, "
+#~ msgstr "900 MHz,"
-#: ../tui/nmt-secret-agent.c:349
-msgid "Wired 802.1X authentication"
-msgstr "Kabelgebundene 802.1X-Legitimierung"
+#~ msgid "1800 MHz, "
+#~ msgstr "1800 MHz,"
-#: ../tui/nmt-secret-agent.c:352
-msgid "Network name"
-msgstr "Netzwerkname"
+#~ msgid "1900 MHz, "
+#~ msgstr "1900 MHz,"
-#: ../tui/nmt-secret-agent.c:359
-msgid "DSL authentication"
-msgstr "DSL-Legitimierung"
+#~ msgid "850 MHz, "
+#~ msgstr "850 MHz,"
-#: ../tui/nmt-secret-agent.c:367
-msgid "PIN code required"
-msgstr "PIN-Code ist erforderlich"
+#~ msgid "WCDMA 3GPP UMTS 2100 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../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 "WCDMA 3GPP UMTS 1800 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../tui/nmt-secret-agent.c:370
-msgid "PIN"
-msgstr "PIN"
+#~ msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../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 "WCDMA 3GPP UMTS 800 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../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 "WCDMA 3GPP UMTS 850 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../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 "WCDMA 3GPP UMTS 900 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../tui/nmt-widget-list.c:142
-msgid "Add..."
-msgstr "Hinzufügen …"
+#~ msgid "WCDMA 3GPP UMTS 1700 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../tui/nmt-widget-list.c:205
-msgid "Remove"
-msgstr "Entfernen"
+#~ msgid "WCDMA 3GPP UMTS 1900 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 1900 MHz, "
-#: ../tui/nmtui-connect.c:94
-msgid "Activation failed"
-msgstr "Aktivierung fehlgeschlagen"
+#~ msgid "WCDMA 3GPP UMTS 2600 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 2600 MHz, "
-#: ../tui/nmtui-connect.c:142
-msgid "Connecting..."
-msgstr "Verbindungsaufbau …"
+#~ msgid "invalid IPv4 route '%s'"
+#~ msgstr "Ungültige IPv4-Route »%s«"
-#: ../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 "invalid prefix '%s'; <0-32> allowed"
+#~ msgstr "ungültiger Präfix »%s«. <0-32> ist erlaubt"
-#: ../tui/nmtui-connect.c:259 ../tui/nmtui-connect.c:308
-msgid "Activate"
-msgstr "Aktivieren"
+#~ msgid "invalid IPv6 route '%s'"
+#~ msgstr "Ungültige IPv6-Route »%s«"
-#: ../tui/nmtui-connect.c:261
-msgid "Deactivate"
-msgstr "Deaktivieren"
+#~ msgid "invalid prefix '%s'; <0-128> allowed"
+#~ msgstr "ungültiger Präfix »%s«. <0-128> ist erlaubt"
-#: ../tui/nmtui-connect.c:313 ../tui/nmtui-edit.c:95 ../tui/nmtui.c:115
-msgid "Quit"
-msgstr "Beenden"
+#~ msgid "There are 3 optional arguments for '%s' connection type.\n"
+#~ msgstr "Es sind 3 optionale Argumente für Verbindungstyp »%s« vorhanden.\n"
-#: ../tui/nmtui-connect.c:336
-#, c-format
-msgid "No such connection '%s'"
-msgstr "Verbindung »%s« existiert nicht"
+#~ msgid "Do you want to provide them? (yes/no) [yes] "
+#~ msgstr "Möchten Sie diese zur Verfügung stellen? (yes/no) [yes] "
-#: ../tui/nmtui-connect.c:338
-msgid "Connection is already active"
-msgstr "Verbindung ist bereits aktiv"
+#~ msgid "There are 5 optional arguments for 'InfiniBand' connection type.\n"
+#~ msgstr ""
+#~ "Es gibt 5 optionale Argumente für den Verbindungstyp »InfiniBand«.\n"
-#: ../tui/nmtui-edit.c:200
-msgid "Create"
-msgstr "Erstellen"
+#~ msgid "Transport mode (datagram or connected) [datagram]: "
+#~ msgstr "Transportmodus (»datagram« oder »connected«) [datagram]: "
-#: ../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."
+#~ msgid "There is 1 optional argument for 'WiMax' connection type.\n"
+#~ msgstr "Es gibt 1 optionales Argument für den Verbindungstyp »WiMax«.\n"
-#: ../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."
+#~ msgid "There are 4 optional arguments for 'PPPoE' connection type.\n"
+#~ msgstr "Es gibt 4 optionale Argumente für den Verbindungstyp »PPPoE«.\n"
-#: ../tui/nmtui-edit.c:381 ../tui/nmtui-edit.c:397
-msgid "New Connection"
-msgstr "Neue Verbindung"
+#~ msgid ""
+#~ "There are 2 optional arguments for 'mobile broadband' connection type.\n"
+#~ msgstr ""
+#~ "Es gibt 5 optionale Argumente für den Verbindungstyp »Mobiles "
+#~ "Breitband«.\n"
-#: ../tui/nmtui-edit.c:434
-#, c-format
-msgid "Unable to delete connection: %s"
-msgstr "Verbindung kann nicht gelöscht werden: %s"
+#~ msgid "There is 1 optional argument for 'bluetooth' connection type.\n"
+#~ msgstr "Es gibt 1 optionales Argument für den Verbindungstyp »bluetooth«.\n"
-#: ../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 "Bluetooth type (panu, dun-gsm or dun-cdma) [panu]: "
+#~ msgstr "Bluetooth-Typ (»panu«, »dun-gsm« oder »dun-cdma«) [panu]: "
-#: ../tui/nmtui-edit.c:477
-#, c-format
-msgid "Could not delete connection: %s"
-msgstr "Verbindung konnte nicht gelöscht werden: %s"
+#~ msgid "There are 4 optional arguments for 'VLAN' connection type.\n"
+#~ msgstr "Es gibt 4 optionale Argumente für den Verbindungstyp »VLAN«.\n"
-#: ../tui/nmtui-hostname.c:47
-msgid "Set Hostname"
-msgstr "Rechnername festlegen"
+#~ msgid "There are optional arguments for 'bond' connection type.\n"
+#~ msgstr "Es gibt optionale Argumente für den Verbindungstyp »Bündelung«.\n"
-#: ../tui/nmtui-hostname.c:55
-msgid "Hostname"
-msgstr "Rechnername"
+#~ msgid "Bonding monitoring mode (miimon or arp) [miimon]: "
+#~ msgstr "Bindungs-Ãœberwachungsmodus (miimon oder arp) [miimon]: "
-#. 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 "There are 6 optional arguments for 'bridge' connection type.\n"
+#~ msgstr "Es gibt 6 optionale Argumente für den Verbindungstyp »bridge«.\n"
-#: ../tui/nmtui-hostname.c:116
-#, c-format
-msgid "Unable to set hostname: %s"
-msgstr "Fehler beim Festlegen des Rechnernamens: %s"
+#~ msgid "Error: 'stp': '%s'.\n"
+#~ msgstr "Fehler: »stp«: »%s«.\n"
-#: ../tui/nmtui.c:60 ../tui/nmtui.c:63
-msgid "connection"
-msgstr "Verbindung"
+#~ 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"
-#: ../tui/nmtui.c:61
-msgid "Edit a connection"
-msgstr "Eine Verbindung bearbeiten"
+#~ msgid "Hairpin (yes/no) [yes]: "
+#~ msgstr "Hairpin (yes/no) [yes]: "
-#: ../tui/nmtui.c:64
-msgid "Activate a connection"
-msgstr "Eine Verbindung aktivieren"
+#~ msgid "Error: 'hairpin': '%s'.\n"
+#~ msgstr "Fehler: »hairpin«: »%s«.\n"
-#: ../tui/nmtui.c:66
-msgid "new hostname"
-msgstr "neuer Rechnername"
+#~ msgid "There is 1 optional argument for 'VPN' connection type.\n"
+#~ msgstr ""
+#~ "Es ist 1 optionales Argument für den Verbindungstyp »VPN« vorhanden.\n"
-#: ../tui/nmtui.c:67
-msgid "Set system hostname"
-msgstr "Den Rechnernamen des Systems festlegen"
+#~ 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"
-#: ../tui/nmtui.c:90
-msgid "NetworkManager TUI"
-msgstr "NetworkManager Terminal-Benutzeroberfläche (TUI)"
+#~ msgid "Error: '%s' setting not present\n"
+#~ msgstr "Fehler: »%s« Einstellung nicht vorhanden\n"
-#: ../tui/nmtui.c:98
-msgid "Please select an option"
-msgstr "Bitte wählen Sie eine Option"
+#~ 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"
+
+#~ 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])"
-#: ../tui/nmtui.c:159
-msgid "Usage"
-msgstr "Aufruf"
+#~ msgid "'%s' doesn't match the virtual interface name '%s'"
+#~ msgstr ""
+#~ "»%s« stimmt nicht mit dem virtuellen Schnittstellennamen »%s« überein"
-#: ../tui/nmtui.c:241
-msgid "Could not parse arguments"
-msgstr "Parameter konnten nicht verarbeitet werden"
+#~ msgid "IPv4 configuration is not allowed for slave"
+#~ msgstr "IPv4-Konfiguration ist nicht erlaubt für einen »Sklaven«"
-#: ../tui/nmtui.c:251
-msgid "NetworkManager is not running."
-msgstr "NetworkManager wird nicht ausgeführt."
+#~ msgid "IPv6 configuration is not allowed for slave"
+#~ msgstr "IPv6-Konfiguration ist nicht erlaubt für einen »Sklaven«"
#~ msgid ""
#~ "Usage: nmcli connection modify { ARGUMENTS | help }\n"
diff --git a/po/el.po b/po/el.po
index db8cf543d..887141083 100644
--- a/po/el.po
+++ b/po/el.po
@@ -1,374 +1,524 @@
# translation of NetworkManager.HEAD.po to
# NetworkManager translation to Greek
-#
# Nikos Charonitakis <charosn@her.forthnet.gr>, 2005.
# Kostas Papadimas <pkst@gnome.org>, 2005-2007.
# Dimitris Glezos <dimitris@glezos.com>, 2006.
# Jennie Petoumenou <epetoumenou@gmail.com>, 2008, 2009.
# Tournaris Pavlos <p.tournaris@gmail.com>, 2009.
# Simos Xenitellis <simos@gnome.org>, 2010.
-#
+# Dimitris Spingos (ΔημήτÏης Σπίγγος) <dmtrs32@gmail.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-07-25 16:03+0000\n"
-"PO-Revision-Date: 2012-07-26 01:07+0200\n"
-"Last-Translator: Tom Tryfonidis <tomtryf@gmail.com>\n"
-"Language-Team: Greek <team@gnome.gr>\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=Networ"
+"kManager&keywords=I18N+L10N&component=Translations\n"
+"POT-Creation-Date: 2014-06-24 10:05+0000\n"
+"PO-Revision-Date: 2014-10-06 11:01+0300\n"
+"Last-Translator: Dimitris Spingos (ΔημήτÏης Σπίγγος) <dmtrs32@gmail.com>\n"
+"Language-Team: team@lists.gnome.gr\n"
"Language: el\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 0.3\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Virtaal 0.7.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: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 "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 field '%s'"
+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 field '%s'"
+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 field '%s'"
+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 route destination address '%s'"
+msgstr "άκυÏη διαδÏομή διεÏθυνσης Ï€ÏοοÏÎ¹ÏƒÎ¼Î¿Ï '%s'"
+
+#: ../cli/src/common.c:559
+#, c-format
+msgid "invalid prefix '%s'; <1-%d> allowed"
+msgstr "άκυÏο Ï€Ïόθεμα '%s'· επιτÏεπόμενο <1-%d>"
+
+#: ../cli/src/common.c:569
+#, c-format
+#| msgid "invalid field '%s'"
+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 field '%s'"
+msgid "invalid metric '%s'"
+msgstr "άκυÏο μετÏικό '%s'"
+
+#: ../cli/src/common.c:593
+msgid "default route cannot be added (NetworkManager handles it by itself)"
+msgstr ""
+"η Ï€Ïοεπιλεγμένη διαδÏομή δεν μποÏεί να Ï€Ïοστεθεί (ο διαχειÏιστής δικτÏου τη "
+"χειÏίζεται ο ίδιος)"
+
+#: ../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 "σÏνδεση (γίνεται έλεγχος συνδεσιμότητας της IP)"
-#: ../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:633
+#: ../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: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:585
-#: ../cli/src/settings.c:613 ../cli/src/utils.c:531 ../src/main.c:462
-#: ../src/main.c:481
+#: ../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
-#, fuzzy
+#: ../cli/src/common.c:720
msgid "Device is now managed"
msgstr "Η συσκευή είναι Ï„ÏŽÏα με διαχείÏιση"
-#: ../cli/src/common.c:408
-#, fuzzy
+#: ../cli/src/common.c:723
msgid "Device is now unmanaged"
msgstr "Η συσκευή είναι Ï„ÏŽÏα χωÏίς διαχείÏιση"
-#: ../cli/src/common.c:411
-#, fuzzy
+#: ../cli/src/common.c:726
#| msgid "the VPN service returned invalid configuration"
msgid "The device could not be readied for configuration"
-msgstr "Αδυναμία εφαÏμογής των επιλεγμένων Ïυθμίσεων στις οθόνες"
+msgstr "Η συσκευή δεν μπόÏεσε να διαβαστεί για τη διαμόÏφωση"
-#: ../cli/src/common.c:414
+#: ../cli/src/common.c:729
+#| msgid ""
+#| "IP configuration could not be reserved (no available address, timeout, "
+#| "etc)"
msgid ""
-"IP configuration could not be reserved (no available address, timeout, etc)"
+"IP configuration could not be reserved (no available address, timeout, etc.)"
msgstr ""
-"Οι Ïυθμίσεις IP δε μπόÏεσαν να εξασφαλιστοÏν (δεν υπάÏχει διαθέσιμη "
-"διεÏθυνση, χÏονικό ÏŒÏιο, κ.λπ)"
+"Η διαμόÏφωση IP δε μπόÏεσε να δεσμευτεί (δεν υπάÏχει διαθέσιμη διεÏθυνση, "
+"χÏονικό ÏŒÏιο, κ.λ.Ï€.)"
-#: ../cli/src/common.c:417
+#: ../cli/src/common.c:732
msgid "The IP configuration is no longer valid"
-msgstr "Δεν είναι πλέον έγκυÏες οι Ïυθμίσεις IP"
+msgstr "Η διαμόÏφωση IP δεν είναι πια έγκυÏη"
-#: ../cli/src/common.c:420
+#: ../cli/src/common.c:735
msgid "Secrets were required, but not provided"
-msgstr "Τα μυστικά απαιτήθηκαν, αλλά δεν παÏήχθησαν"
+msgstr "Τα μυστικά απαιτήθηκαν, αλλά δεν Ï€ÏοσφέÏθηκαν"
-#: ../cli/src/common.c:423
+#: ../cli/src/common.c:738
msgid "802.1X supplicant disconnected"
-msgstr "Αποσυνδέθηκε το 802.1x supplicant"
+msgstr "Αποσυνδέθηκε η αίτηση άδειας Ï€Ïόσβασης 802.1X"
-#: ../cli/src/common.c:426
+#: ../cli/src/common.c:741
msgid "802.1X supplicant configuration failed"
-msgstr "Απέtυχε η ÏÏθμιση του 802.1x supplicant"
+msgstr "Αποτυχία διαμόÏφωσης αίτησης άδειας Ï€Ïόσβασης 802.1X"
-#: ../cli/src/common.c:429
+#: ../cli/src/common.c:744
msgid "802.1X supplicant failed"
-msgstr "Αποτυχία του 802.1x supplicant"
+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 supplicant πήÏε αÏκετή ÏŽÏα για να πιστοποιηθεί"
+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
-#, fuzzy
+#: ../cli/src/common.c:786
msgid "No dial tone"
-msgstr "Καθόλου ήχος κλήσης"
+msgstr "ΧωÏίς ήχο κλήσης"
-#: ../cli/src/common.c:474
-#, fuzzy
+#: ../cli/src/common.c:789
msgid "No carrier could be established"
-msgstr "Δεν ήταν δυνατή η ανάκτηση σιωπής"
+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 "ΑÏνήθηκε η εγγÏαφή του δικτÏου"
+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 "ΜποÏεί να λείπει το απαÏαίτητο υλισμικό (firmware) για τη συσκευή"
+msgstr "ΜποÏεί να λείπει το απαÏαίτητο υλικολογισμικό για τη συσκευή"
-#: ../cli/src/common.c:507
+#: ../cli/src/common.c:822
msgid "The device was removed"
msgstr "ΑφαιÏέθηκε η συσκευή"
-#: ../cli/src/common.c:510
-#, fuzzy
+#: ../cli/src/common.c:825
#| msgid "NetworkManager status"
msgid "NetworkManager went to sleep"
-msgstr "Ο NetworkManager πήγε για Ïπνο/Ο NetworkManager τεÏματίστηκε"
+msgstr "Ο διαχειÏιστής δικτÏου πήγε σε Ïπνωση"
-#: ../cli/src/common.c:513
-#, fuzzy
+#: ../cli/src/common.c:828
#| msgid "no active connection or device"
msgid "The device's active connection disappeared"
-msgstr "δεν υπάÏχει ενεÏγή σÏνδεση στη συσκευή '%s'"
+msgstr "Εξαφανίστηκε η ενεÏγή σÏνδεση της συσκευής"
-#: ../cli/src/common.c:516
+#: ../cli/src/common.c:831
msgid "Device disconnected by user or client"
msgstr "Η συσκευή αποσυνδέθηκε από τον χÏήστη ή τον πελάτη"
-#: ../cli/src/common.c:519
-#, fuzzy
+#: ../cli/src/common.c:834
msgid "Carrier/link changed"
-msgstr "Αν ο κειμενογÏάφος έχει Ï„Ïοποποιηθεί"
+msgstr "Άλλαξε ο μεταφοÏέας/σÏνδεσμος"
-#: ../cli/src/common.c:522
-#, fuzzy
+#: ../cli/src/common.c:837
#| msgid "the connection was removed"
msgid "The device's existing connection was assumed"
-msgstr "η σÏνδεση αφαιÏέθηκε"
+msgstr "ΘεωÏήθηκε η υφιστάμενη σÏνδεση της συσκευής"
-#: ../cli/src/common.c:525
+#: ../cli/src/common.c:840
msgid "The supplicant is now available"
-msgstr "Ο supplicant είναι Ï„ÏŽÏα διαθέσιμος"
+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"
+msgstr "Απέτυχε ή έληξε η σÏνδεση μπλουτοÏθ"
-#: ../cli/src/common.c:534
+#: ../cli/src/common.c:849
msgid "GSM Modem's SIM card not inserted"
-msgstr "Δεν εισήχθησε η κάÏτα SIM του GSM μόντεμ"
+msgstr "Δεν εισήχθη η κάÏτα SIM του GSM μόντεμ"
-#: ../cli/src/common.c:537
-#, fuzzy
+#: ../cli/src/common.c:852
msgid "GSM Modem's SIM PIN required"
-msgstr "Απαιτείται το PIN του GSM μόντεμ"
+msgstr "Απαιτείται το PIN SIM του GSM μόντεμ"
-#: ../cli/src/common.c:540
-#, fuzzy
+#: ../cli/src/common.c:855
msgid "GSM Modem's SIM PUK required"
-msgstr "Απαιτείται το PUK του GSM μόντεμ"
+msgstr "Απαιτείται το PUK SIM του GSM μόντεμ"
-#: ../cli/src/common.c:543
-#, fuzzy
+#: ../cli/src/common.c:858
msgid "GSM Modem's SIM wrong"
-msgstr "Λάθος SIM του GSM Modem"
+msgstr "Εσφαλμένο SIM του GSM Modem"
-#: ../cli/src/common.c:546
-#, fuzzy
+#: ../cli/src/common.c:861
msgid "InfiniBand device does not support connected mode"
-msgstr ""
-"Η συσκευή InfiniBand δεν υποστηÏίζει συνδεδεμένη λειτουÏγία (connected mode)"
+msgstr "Η συσκευή InfiniBand δεν υποστηÏίζει συνδεδεμένη λειτουÏγία"
-#: ../cli/src/common.c:549
-#, fuzzy
+#: ../cli/src/common.c:864
#| msgid "connection failed"
msgid "A dependency of the connection failed"
-msgstr "Η σÏνδεση στο %s απέτυχε"
+msgstr "Μια εξάÏτηση της σÏνδεσης απέτυχε"
-#: ../cli/src/common.c:552
+#: ../cli/src/common.c:867
msgid "A problem with the RFC 2684 Ethernet over ADSL bridge"
msgstr "ΠÏόβλημα με το RFC 2684 Ethernet μέσω γέφυÏας ADSL"
-#: ../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:870
+msgid "ModemManager is unavailable"
+msgstr "Ο διαχειÏιστής μόντεμ δεν είναι διαθέσιμος"
+
+#: ../cli/src/common.c:873
+#| msgid "The modem could not be found"
+msgid "The Wi-Fi network could not be found"
+msgstr "Το ασÏÏματο δίκτυο δεν μπόÏεσε να βÏεθεί"
+
+#: ../cli/src/common.c:876
+#| msgid "connection failed"
+msgid "A secondary connection of the base connection failed"
+msgstr "Μια δευτεÏεÏουσα σÏνδεση της βασικής σÏνδεσης απέτυχε"
+
+#: ../cli/src/common.c:879
+msgid "DCB or FCoE setup failed"
+msgstr "Η ÏÏθμιση DCB ή FCoE απέτυχε"
+
+#: ../cli/src/common.c:882
+#| msgid "connection failed"
+msgid "teamd control failed"
+msgstr "αποτυχία ελέγχου teamd"
+
+#: ../cli/src/common.c:885
+msgid "Modem failed or no longer available"
+msgstr "Το μόντεμ απέτυχε ή δεν είναι πια διαθέσιμο"
+
+#: ../cli/src/common.c:888
+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 field '%s'"
+msgid "invalid priority map '%s'"
+msgstr "άκυÏη χαÏτογÏάφηση Ï€ÏοτεÏαιότητας '%s'"
+
+#: ../cli/src/common.c:944 ../cli/src/common.c:950
+#, c-format
+#| msgid "Error: timeout value '%s' is not valid."
+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 "the connection attempt timed out"
+msgid "Enter connection type: "
+msgstr "Εισαγωγή Ï„Ïπου σÏνδεσης: "
+
+#. define some other prompts
+#: ../cli/src/connections.c:69
+#| msgid "Connection list"
+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: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: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:60 ../cli/src/connections.c:130
+#: ../cli/src/connections.c:83 ../cli/src/connections.c:195
msgid "UUID"
msgstr "UUID"
@@ -376,973 +526,3280 @@ 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: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:62
+#: ../cli/src/connections.c:85
msgid "TIMESTAMP"
-msgstr "TIMESTAMP"
+msgstr "ΧΡΟÎΙΚΗ ΣΗΜΑÎΣΗ"
#. 3
-#: ../cli/src/connections.c:63
+#: ../cli/src/connections.c:86
msgid "TIMESTAMP-REAL"
-msgstr "TIMESTAMP-ΠΡΑΓΜΑΤΙΚΟ"
+msgstr "ΧΡΟÎΙΚΗ ΣΗΜΑÎΣΗ-ΠΡΑΓΜΑΤΙΚΗ"
#. 4
-#. 13
-#: ../cli/src/connections.c:64 ../cli/src/devices.c:119
+#. 14
+#: ../cli/src/connections.c:87 ../cli/src/devices.c:104
msgid "AUTOCONNECT"
msgstr "ΑΥΤΟΜΑΤΗ-ΣΥÎΔΕΣΗ"
#. 5
-#: ../cli/src/connections.c:65
+#: ../cli/src/connections.c:88
msgid "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: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"
+msgstr "ΔΙΑΔΡΟΜΗ-ΔΙΑΥΛΟΥ ΔΕΔΟΜΕÎΩÎ"
-#. 2
-#: ../cli/src/connections.c:131
-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:132 ../cli/src/devices.c:72
-#: ../cli/src/devices.c:114 ../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 "MASTER-PATH"
+msgid "ACTIVE-PATH"
+msgstr "ΕÎΕΡΓΟ-ΔΙΑΔΡΟΜΗ"
+
+#. 2
+#: ../cli/src/connections.c:196
+msgid "DEVICES"
+msgstr "ΣΥΣΚΕΥΕΣ"
+
#. 4
-#: ../cli/src/connections.c:133
+#: ../cli/src/connections.c:198
msgid "DEFAULT"
msgstr "ΠΡΟΕΠΙΛΟΓΗ"
#. 5
-#: ../cli/src/connections.c:134
+#: ../cli/src/connections.c:199
msgid "DEFAULT6"
msgstr "ΠΡΟΕΠΙΛΟΓΗ6"
#. 6
-#: ../cli/src/connections.c:135
+#: ../cli/src/connections.c:200
msgid "SPEC-OBJECT"
-msgstr "SPEC-OBJECT"
+msgstr "ΠΡΟΔΙΑΓΡΑΦΗ-ΑÎΤΙΚΕΙΜΕÎΟ"
#. 7
-#. 1
-#: ../cli/src/connections.c:136 ../cli/src/connections.c:150
+#. 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:138
+#. 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:139
+#: ../cli/src/connections.c:204
msgid "ZONE"
msgstr "ΖΩÎΗ"
#. 11
-#: ../cli/src/connections.c:140
+#: ../cli/src/connections.c:205
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 "IP"
+msgstr "ΚΥΡΙΑ ΔΙΑΔΡΟΜΗ"
#. 1
-#: ../cli/src/connections.c:164
+#: ../cli/src/connections.c:217
msgid "USERNAME"
msgstr "ΟÎΟΜΑ ΧΡΗΣΤΗ"
#. 2
-#: ../cli/src/connections.c:165
+#: ../cli/src/connections.c:218
msgid "GATEWAY"
-msgstr "ΠΥΛΗ"
+msgstr "ΠΥΛΗ ΔΙΚΤΥΟΥ"
#. 3
-#: ../cli/src/connections.c:166
+#: ../cli/src/connections.c:219
msgid "BANNER"
-msgstr "BANNER"
+msgstr "ΔΙΑΦΗΜΙΣΤΙΚΟ ΠΛΑΙΣΙΟ "
#. 4
-#: ../cli/src/connections.c:167
+#: ../cli/src/connections.c:220
msgid "VPN-STATE"
msgstr "ΚΑΤΑΣΤΑΣΗ-VPN"
#. 5
-#: ../cli/src/connections.c:168
+#: ../cli/src/connections.c:221
msgid "CFG"
msgstr "CFG"
-#: ../cli/src/connections.c:190
+#: ../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"
+"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 ""
-"ΧÏήση: nmcli con { ΕÎΤΟΛΗ | help }\n"
-" ΕÎΤΟΛΗ := { 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"
-#: ../cli/src/connections.c:249 ../cli/src/connections.c:609
+#: ../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 { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [--active]\n"
+"\n"
+"Κατάλογος κατατομών σÏνδεσης στη μνήμη και στον δίσκο, μεÏικές από τις "
+"οποίες μποÏοÏν επίσης να είναι\n"
+"ενεÏγές αν μια συσκευή χÏησιμοποιεί αυτήν την κατατομή σÏνδεσης. ΧωÏίς μια "
+"παÏάμετÏο, εμφανίζονται\n"
+"όλες οι κατατομές. Όταν οÏιστεί η επιλογή --active, εμφανίζονται\n"
+"μόνο οι ενεÏγές κατατομές.\n"
+"\n"
+"ARGUMENTS := [--active] [id | uuid | path | apath] <ID> ...\n"
+"\n"
+"Εμφάνιση των λεπτομεÏειών για τις συγκεκÏιμένες συνδέσεις. Από Ï€Ïοεπιλογή, "
+"εμφανίζονται και η στατική διαμόÏφωση\n"
+"και τα ενεÏγά δεδομένα σÏνδεσης. ΜποÏείτε να φιλτÏάÏετε την έξοδο\n"
+"χÏησιμοποιώντας την καθολική επιλογή '--fields'. Δείτε την σελίδα του "
+"εγχειÏιδίου για πεÏισσότεÏες πληÏοφοÏίες.\n"
+"Όταν οÏιστεί η επιλογή --active, μόνο οι ενεÏγές κατατομές λαμβάνονται\n"
+"υπόψη.\n"
-#: ../cli/src/connections.c:251 ../cli/src/connections.c:611
+#: ../cli/src/connections.c:324
#, 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"
+"ΕνεÏγοποίηση μιας σÏνδεσης σε μια συσκευή. Η κατατομή για ενεÏγοποίηση "
+"καθοÏίζεται από\n"
+"το όνομά της, το UUID ή τη διαδÏομή δίαυλου δεδομένων.\n"
+"\n"
+"ARGUMENTS := ifname <ifname> [ap <BSSID>] [nsp <name>]\n"
+"\n"
+"ΕνεÏγοποίηση μιας συσκευής με μια σÏνδεση. Η κατατομή σÏνδεσης επιλέγεται\n"
+"αυτόματα από τον διαχειÏιστή δικτÏου.\n"
+"\n"
+"ifname - καθοÏίζει τη συσκευή που θα ενεÏγοποιήσει τη σÏνδεση\n"
+"ap - καθοÏίζει την AP για σÏνδεση (έγκυÏη μόνο για ασÏÏματο)\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: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
-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 { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path | apath] <ID>\n"
+"\n"
+"ΑπενεÏγοποίηση μιας σÏνδεσης από μια συσκευή (χωÏίς να αποτÏέπει τη συσκευή "
+"από\n"
+"παÏαπέÏα αυτοενεÏγοποίηση). Η κατατομή για απενεÏγοποίηση καθοÏίζεται από το "
+"όνομά της,\n"
+"το UUID ή τη διαδÏομή διαÏλου δεδομένων.\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: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
-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"
+" [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 { 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"
-#: ../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: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 ""
+"Usage: nmcli connection modify { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> ([+|-]<setting>.<property> <value>)+\n"
+"\n"
+"ΤÏοποποιήστε μία ή πεÏισσότεÏες ιδιότητες της κατατομής σÏνδεσης.\n"
+"Η κατατομή ταυτοποιείται από το όνομά της, το UUID ή τη διαδÏομή του διαÏλου "
+"δεδομένων. Για ιδιότητες\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:586
+#: ../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 { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"ΕπεξεÏγασία μιας υφιστάμενης κατατομής σÏνδεσης με έναν διαδÏαστικό "
+"επεξεÏγαστή.\n"
+"Η κατατομή ταυτοποιείται από το όνομά της, το UUID ή τη διαδÏομή διαÏλου "
+"δεδομένων\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: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 { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"ΔιαγÏαφή μιας κατατομής σÏνδεσης.\n"
+"Η κατατομή ταυτοποιείται από το όνομά της, UUID ή τη διαδÏομή διαÏλου "
+"δεδομένων.\n"
+"\n"
-#: ../cli/src/connections.c:601
+#: ../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 { 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: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 { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <filename> [<filename>...]\n"
+"\n"
+"ΦόÏτωση/επαναφόÏτωση ενός ή πεÏισσότεÏων αÏχείων σÏνδεσης από δίσκο. "
+"ΧÏησιμοποιήστε αυτό μετά χειÏοκίνητα\n"
+"επεξεÏγαστείτε ένα αÏχείο σÏνδεσης για να εξασφαλίσετε ότι ο NetworkManager "
+"γνωÏίζει την τελευταία του\n"
+"κατάσταση.\n"
+"\n"
-#: ../cli/src/connections.c:629
+#: ../cli/src/connections.c:556
msgid "activating"
msgstr "ενεÏγοποίηση"
-#: ../cli/src/connections.c:631
+#: ../cli/src/connections.c:558
msgid "activated"
msgstr "ενεÏγοποιήθηκε"
-#: ../cli/src/connections.c:645
+#: ../cli/src/connections.c:562
+#| msgid "activated"
+msgid "deactivated"
+msgstr "απενεÏγοποιήθηκε"
+
+#: ../cli/src/connections.c:574
msgid "VPN connecting (prepare)"
-msgstr "ΣÏνδεση VPN (Ï€Ïοετοιμασία)"
+msgstr "Συνδέεται το VPN (Ï€Ïοετοιμασία)"
-#: ../cli/src/connections.c:647
+#: ../cli/src/connections.c:576
msgid "VPN connecting (need authentication)"
-msgstr "ΣÏνδεση VPN (απαιτείται πιστοποίηση)"
+msgstr "Συνδέεται το VPN (απαιτείται πιστοποίηση)"
-#: ../cli/src/connections.c:649
+#: ../cli/src/connections.c:578
msgid "VPN connecting"
-msgstr "ΣÏνδεση VPN"
+msgstr "Συνδέεται το VPN"
-#: ../cli/src/connections.c:651
+#: ../cli/src/connections.c:580
msgid "VPN connecting (getting IP configuration)"
-msgstr "ΣÏνδεση VPN (γίνεται λήψη Ïυθμίσεων IP)"
+msgstr "Συνδέεται το VPN (γίνεται λήψη διαμόÏφωσης IP)"
-#: ../cli/src/connections.c:653
+#: ../cli/src/connections.c:582
msgid "VPN connected"
-msgstr "VPN συνδέθηκε"
+msgstr "Το VPN συνδέθηκε"
-#: ../cli/src/connections.c:655
+#: ../cli/src/connections.c:584
msgid "VPN connection failed"
-msgstr "ΣÏνδεση VPN απέτυχε"
+msgstr "Αποτυχία σÏνδεσης VPN"
-#: ../cli/src/connections.c:657
+#: ../cli/src/connections.c:586
msgid "VPN disconnected"
-msgstr "VPN αποσυνδέθηκε"
+msgstr "Το VPN αποσυνδέθηκε"
-#: ../cli/src/connections.c:710 ../cli/src/connections.c:720
-msgid "N/A"
-msgstr "N/A"
+#: ../cli/src/connections.c:669
+#| msgid "Connection details"
+msgid "Connection profile details"
+msgstr "ΛεπτομέÏειες κατατομής σÏνδεσης"
-#: ../cli/src/connections.c:914 ../cli/src/connections.c:1138
+#: ../cli/src/connections.c:681 ../cli/src/connections.c:1033
#, c-format
-msgid "Error: 'con status': %s"
-msgstr "Σφάλμα: 'con status': %s"
+#| msgid "Error: 'con list': %s"
+msgid "Error: 'connection show': %s"
+msgstr "Σφάλμα: 'εμφάνιση σÏνδεσης': %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: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:924
-msgid "Active connection details"
-msgstr "ΛεπτομέÏειες ενεÏγής σÏνδεσης"
+#: ../cli/src/connections.c:1021
+#| msgid "Active connection details"
+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:1254
#, 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:1269 ../cli/src/connections.c:1277
+#, c-format
+#| msgid "field '%s' has to be alone"
+msgid "'%s' has to be alone"
+msgstr "το '%s' Ï€Ïέπει να είναι μόνο του"
+
+#: ../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."
+msgstr "Σφάλμα: Δεν εκτελείται ο διαχειÏιστής δικτÏου."
-#: ../cli/src/connections.c:1096
-msgid "Active connections"
-msgstr "ΕνεÏγές συνδέσεις"
+#. Add headers
+#: ../cli/src/connections.c:1338
+#| msgid "NetworkManager status"
+msgid "NetworkManager active profiles"
+msgstr "ΕνεÏγές κατατομές διαχειÏιστή δικτÏου"
-#: ../cli/src/connections.c:1121
+#: ../cli/src/connections.c:1339
+#| msgid "NetworkManager status"
+msgid "NetworkManager connection profiles"
+msgstr "Κατατομές σÏνδεσης διαχειÏιστή δικτÏου"
+
+#: ../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' is not an active connection."
-msgstr "Σφάλμα: η '%s' δεν είναι μια ενεÏγή σÏνδεση."
+msgid "Error: %s argument is missing."
+msgstr "Σφάλμα: λείπει το ÏŒÏισμα %s."
+
+#: ../cli/src/connections.c:1427
+#, c-format
+#| msgid "Error: %s - no such connection."
+msgid "Error: %s - no such connection profile."
+msgstr "Σφάλμα: %s - δεν υπάÏχει τέτοια κατατομή σÏνδεσης."
-#: ../cli/src/connections.c:1126
+#: ../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:1233
+#: ../cli/src/connections.c:1538
#, c-format
msgid "no active connection on device '%s'"
msgstr "δεν υπάÏχει ενεÏγή σÏνδεση στη συσκευή '%s'"
-#: ../cli/src/connections.c:1241
+#: ../cli/src/connections.c:1546
msgid "no active connection or device"
-msgstr "δεν πυάÏχει ενεÏγή σÏνδεση ή συσκευή"
+msgstr "δεν υπάÏχει ενεÏγή σÏνδεση ή συσκευή"
-#: ../cli/src/connections.c:1312
+#: ../cli/src/connections.c:1617
#, c-format
msgid "device '%s' not compatible with connection '%s'"
msgstr "η συσκευή '%s' δεν είναι συμβατή με τη σÏνδεση '%s'"
-#: ../cli/src/connections.c:1315
+#: ../cli/src/connections.c:1620
#, c-format
msgid "no device found for connection '%s'"
msgstr "δεν βÏέθηκε συσκευή για τη σÏνδεση '%s'"
-#: ../cli/src/connections.c:1327
+#: ../cli/src/connections.c:1632
msgid "unknown reason"
msgstr "άγνωστη αιτία"
-#: ../cli/src/connections.c:1329
+#: ../cli/src/connections.c:1634 ../cli/src/network-manager.c:288
msgid "none"
msgstr "κανένα"
-#: ../cli/src/connections.c:1331
+#: ../cli/src/connections.c:1636
msgid "the user was disconnected"
msgstr "ο χÏήστης αποσυνδέθηκε"
-#: ../cli/src/connections.c:1333
+#: ../cli/src/connections.c:1638
msgid "the base network connection was interrupted"
msgstr "η βασική σÏνδεση δικτÏου διακόπηκε"
-#: ../cli/src/connections.c:1335
+#: ../cli/src/connections.c:1640
msgid "the VPN service stopped unexpectedly"
-msgstr "η υπηÏεσία VPN σταμάτησε απÏόσμενα"
+msgstr "η υπηÏεσία VPN σταμάτησε απÏοσδόκητα"
-#: ../cli/src/connections.c:1337
+#: ../cli/src/connections.c:1642
msgid "the VPN service returned invalid configuration"
-msgstr "η υπηÏεσία VPN επέστÏεψε μη έγκυÏη διαμόÏφωση"
+msgstr "η υπηÏεσία VPN επέστÏεψε άκυÏη διαμόÏφωση"
-#: ../cli/src/connections.c:1339
+#: ../cli/src/connections.c:1644
msgid "the connection attempt timed out"
msgstr "έληξε το χÏονικό ÏŒÏιο απόπειÏας σÏνδεσης"
-#: ../cli/src/connections.c:1341
+#: ../cli/src/connections.c:1646
msgid "the VPN service did not start in time"
msgstr "η υπηÏεσία VPN δεν ξεκίνησε εγκαίÏως"
-#: ../cli/src/connections.c:1343
+#: ../cli/src/connections.c:1648
msgid "the VPN service failed to start"
msgstr "η υπηÏεσία VPN απέτυχε να εκκινήσει"
-#: ../cli/src/connections.c:1345
+#: ../cli/src/connections.c:1650
msgid "no valid VPN secrets"
msgstr "δεν υπάÏχουν έγκυÏα μυστικά VPN"
-#: ../cli/src/connections.c:1347
+#: ../cli/src/connections.c:1652
msgid "invalid VPN secrets"
msgstr "μη έγκυÏα μυστικά VPN"
-#: ../cli/src/connections.c:1349
+#: ../cli/src/connections.c:1654
msgid "the connection was removed"
msgstr "η σÏνδεση αφαιÏέθηκε"
-#: ../cli/src/connections.c:1366 ../cli/src/connections.c:1571
-#, fuzzy, c-format
+#: ../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 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:1676
#, c-format
msgid "Error: Connection activation failed."
msgstr "Σφάλμα: Αποτυχία ενεÏγοποίησης σÏνδεσης."
-#: ../cli/src/connections.c:1396
-#, fuzzy, c-format
+#: ../cli/src/connections.c:1701
+#, c-format
msgid "VPN connection successfully activated (D-Bus active path: %s)\n"
-msgstr "ΕνεÏγοποιήθηκε επιτυχώς η σÏνδεση VPN (D-Bus active path: %s)\n"
+msgstr ""
+"ΕνεÏγοποιήθηκε επιτυχώς η σÏνδεση VPN (ενεÏγή διαδÏομή διαÏλου δεδομένων: "
+"%s)\n"
-#: ../cli/src/connections.c:1404
+#: ../cli/src/connections.c:1708
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "Σφάλμα: Αποτυχία ενεÏγοποίησης σÏνδεσης: %s."
-#: ../cli/src/connections.c:1501 ../cli/src/devices.c:974
+#: ../cli/src/connections.c:1726 ../cli/src/devices.c:1299
#, c-format
msgid "Error: Timeout %d sec expired."
-msgstr "Σφάλμα: Έληξε το χÏονικό ÏŒÏιο %d sec"
+msgstr "Σφάλμα: Έληξε το χÏονικό ÏŒÏιο %d δευτεÏολέπτων."
+
+#: ../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:1562
+#: ../cli/src/connections.c:1811
#, 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:1916 ../cli/src/connections.c:2046
+#| msgid "Unknown error"
+msgid "unknown error"
+msgstr "άγνωστο σφάλμα"
+
+#: ../cli/src/connections.c:1924
#, c-format
-msgid "Error: Unknown connection: %s."
-msgstr "Σφάλμα: Άγνωστη σÏνδεση: %s."
+#| msgid "Unknown log level '%s'"
+msgid "unknown device '%s'."
+msgstr "άγνωστη συσκευή '%s'."
+
+#: ../cli/src/connections.c:1929
+#| msgid "no active connection or device"
+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: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:2054
+msgid "preparing"
+msgstr "Ï€Ïοετοιμασία"
-#: ../cli/src/connections.c:1715 ../cli/src/connections.c:1827
-#: ../cli/src/connections.c:1918
+#: ../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: Unknown connection: %s."
+msgid "Error: No connection specified."
+msgstr "Σφάλμα: Δεν οÏίστηκε σÏνδεση."
-#: ../cli/src/connections.c:1747
+#: ../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:1749
+#: ../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:1863
+#: ../cli/src/connections.c:2513
#, c-format
-msgid "Warning: Connection not active\n"
-msgstr "ΠÏοειδοποίηση: Η σÏνδεση δεν είναι ενεÏγή\n"
+#| msgid "Error: Device '%s' is not a WiMAX device."
+msgid "Error: '%s': '%s' is not a valid %s MAC address."
+msgstr "Σφάλμα: '%s': το '%s' δεν είναι μια έγκυÏη διεÏθυνση %s MAC."
-#: ../cli/src/connections.c:1877
+#. 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: 'nm' command '%s' is not valid."
+msgid "Error: 'mtu': '%s' is not a valid MTU."
+msgstr "Σφάλμα: 'mtu': το '%s' δεν είναι ένα έγκυÏο MTU."
-#: ../cli/src/connections.c:1995
+#: ../cli/src/connections.c:2553
#, c-format
-msgid "Error: 'con' command '%s' is not valid."
-msgstr "Σφάλμα: η εντολή 'con' '%s' δεν είναι έγκυÏη."
+#| msgid "Error: 'nm' command '%s' is not valid."
+msgid "Error: 'parent': '%s' is not a valid interface name."
+msgstr "Σφάλμα: 'γονικό': το '%s' δεν είναι έγκυÏο όνομα διεπαφής."
-#: ../cli/src/connections.c:2063
+#: ../cli/src/connections.c:2574
#, c-format
-msgid "Error: could not connect to D-Bus."
-msgstr "Σφάλμα: αδυναμία σÏνδεσης στο D-Bus."
+#| msgid "Error: 'dev' command '%s' is not valid."
+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: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 ""
+"Σφάλμα: 'κατάσταση': το '%s' δεν είναι έγκυÏη κατάσταση μεταφοÏάς InfiniBand "
+"[αυτοδÏναμο πακέτο, συνδεμένο]."
-#: ../cli/src/connections.c:2081
+#: ../cli/src/connections.c:2617
#, c-format
-msgid "Error: Can't obtain connections: settings service is not running."
+#| msgid "Error: 'nm' command '%s' is not valid."
+msgid "Error: 'flags': '%s' is not valid; use <0-7>."
+msgstr "Σφάλμα: 'σημαίες': το '%s' δεν είναι έγκυÏο· χÏησιμοποιήστε <0-7>."
+
+#: ../cli/src/connections.c:2639
+#, c-format
+#| msgid "Error: 'nm' command '%s' is not valid."
+msgid "Error: '%s': '%s' is not valid; %s "
+msgstr "Σφάλμα: '%s': το '%s' δεν είναι έγκυÏο· %s "
+
+#: ../cli/src/connections.c:2832
+#, c-format
+#| msgid "Error: 'nm' command '%s' is not valid."
+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 "Error: missing argument for '%s' option."
+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] "ΥπάÏχει %d Ï€ÏοαιÏετικό ÏŒÏισμα για τον Ï„Ïπο σÏνδεσης '%s'.\n"
+msgstr[1] "ΥπάÏχουν %d Ï€ÏοαιÏετικά οÏίσματα για τον Ï„Ïπο σÏνδεσης '%s'.\n"
+
+#: ../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] "Θέλετε να το δώσετε; %s"
+msgstr[1] "Θέλετε να τα δώσετε; %s"
+
+#: ../cli/src/connections.c:2906
+msgid "ethernet"
+msgstr "έθεÏνετ"
+
+#: ../cli/src/connections.c:2906 ../libnm-glib/nm-device.c:1792
+#: ../tui/nm-editor-utils.c:164
+msgid "Wi-Fi"
+msgstr "ΑσÏÏματο"
+
+#: ../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 %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' είναι υποχÏεωτικό όταν οÏίζεται 'γονέας'.\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 "Κωδικός Ï€Ïόσβασης [κανένας]: "
+
+#: ../cli/src/connections.c:3067
+msgid "Service [none]: "
+msgstr "ΥπηÏεσία [καμία]: "
+
+#. Ask for optional 'gsm' or 'cdma' arguments.
+#: ../cli/src/connections.c:3097
+msgid "mobile broadband"
+msgstr "ευÏυζωνικό κινητό"
+
+#: ../cli/src/connections.c:3101 ../cli/src/connections.c:3509
+msgid "Username [none]: "
+msgstr "Όνομα χÏήστη [κανένα]: "
+
+#. Ask for optional 'bluetooth' arguments.
+#: ../cli/src/connections.c:3116
+msgid "bluetooth"
+msgstr "μπλουτοÏθ"
+
+#: ../cli/src/connections.c:3123
+#, c-format
+msgid "Bluetooth type %s"
+msgstr "ΤÏπος μπλουτοÏθ %s"
+
+#: ../cli/src/connections.c:3129
+#, 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' δεν είναι έγκυÏος Ï„Ïπος μπλουτοÏθ.\n"
+
+#. Ask for optional 'vlan' arguments.
+#. 11
+#: ../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: 'nm' command '%s' is not valid."
+msgid "Error: 'primary': '%s' is not a valid interface name.\n"
+msgstr "Σφάλμα: 'Ï€ÏωτεÏον': το '%s' δεν είναι έγκυÏο όνομα διεπαφής.\n"
+
+#: ../cli/src/connections.c:3242
+#, c-format
+msgid "Bonding monitoring mode %s"
+msgstr "κατάσταση παÏακολοÏθησης Î´ÎµÏƒÎ¼Î¿Ï %s"
+
+#: ../cli/src/connections.c:3248
+#, 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"
-#. 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 "ΣΥΣΚΕΥΗ"
+#: ../cli/src/connections.c:3257
+msgid "Bonding miimon [100]: "
+msgstr "Δεσμός miimon [100]:"
-#. 0
-#: ../cli/src/devices.c:83
-msgid "CAPABILITIES"
-msgstr "ΔΥÎΑΤΟΤΗΤΕΣ"
+#: ../cli/src/connections.c:3260
+#, c-format
+#| msgid "Error: 'nm' command '%s' is not valid."
+msgid "Error: 'miimon': '%s' is not a valid number <0-%u>.\n"
+msgstr "Σφάλμα: 'miimon': το '%s' δεν είναι έγκυÏος αÏιθμός <0-%u>.\n"
-#. 1
-#: ../cli/src/devices.c:84
-msgid "WIFI-PROPERTIES"
-msgstr "ΙΔΙΟΤΗΤΕΣ-WIFI"
+#: ../cli/src/connections.c:3268
+msgid "Bonding downdelay [0]: "
+msgstr "ΚαθυστέÏηση απενεÏγοποίησης Î´ÎµÏƒÎ¼Î¿Ï [0]: "
-#. 2
-#: ../cli/src/devices.c:85
-msgid "AP"
-msgstr "AP"
+#: ../cli/src/connections.c:3271
+#, c-format
+#| msgid "Error: 'dev' command '%s' is not valid."
+msgid "Error: 'downdelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "Σφάλμα: 'καθυστέÏηση απενεÏγοποίησης': το '%s' δεν είναι έγκυÏος αÏιθμός <0-"
+"%u>.\n"
-#. 3
-#: ../cli/src/devices.c:86
-msgid "WIRED-PROPERTIES"
-msgstr "ΙΔΙΟΤΗΤΕΣ-ΕÎΣΥΡΜΑΤΗΣ"
+#: ../cli/src/connections.c:3279
+msgid "Bonding updelay [0]: "
+msgstr "ΚαθυστέÏηση ενεÏγοποίησης Î´ÎµÏƒÎ¼Î¿Ï [0]: "
-#. 4
-#: ../cli/src/devices.c:87
-msgid "WIMAX-PROPERTIES"
-msgstr "ΙΔΙΟΤΗΤΕΣ-WIMAX"
+#: ../cli/src/connections.c:3282
+#, c-format
+#| msgid "Error: 'dev' command '%s' is not valid."
+msgid "Error: 'updelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "Σφάλμα: 'καθυστέÏηση ενεÏγοποίησης': το '%s' δεν είναι έγκυÏος αÏιθμός <0-%"
+"u>.\n"
-#. 5
-#. 0
-#: ../cli/src/devices.c:88 ../cli/src/devices.c:200
-msgid "NSP"
-msgstr "NSP"
+#: ../cli/src/connections.c:3291
+msgid "Bonding arp-interval [0]: "
+msgstr "ΧÏόνος arp Î´ÎµÏƒÎ¼Î¿Ï [0]: "
-#. 6
-#: ../cli/src/devices.c:89
-msgid "IP4"
-msgstr "IP4"
+#: ../cli/src/connections.c:3294
+#, c-format
+#| msgid "Error: bssid argument value '%s' is not a valid BSSID."
+msgid "Error: 'arp-interval': '%s' is not a valid number <0-%u>.\n"
+msgstr "Σφάλμα: 'χÏόνος-arp': το '%s' δεν είναι έγκυÏος αÏιθμός <0-%u>.\n"
-#. 7
-#: ../cli/src/devices.c:90
-msgid "DHCP4"
-msgstr "DHCP4"
+#. FIXME: verify the string
+#: ../cli/src/connections.c:3302
+msgid "Bonding arp-ip-target [none]: "
+msgstr "Στόχος arp-ip Î´ÎµÏƒÎ¼Î¿Ï [κανένα]: "
-#. 8
-#: ../cli/src/devices.c:91
-msgid "IP6"
-msgstr "IP6"
+#: ../cli/src/connections.c:3322
+#| msgid "The IP configuration is no longer valid"
+msgid "Team JSON configuration [none]: "
+msgstr "ΔιαμόÏφωση JSON ομάδας [καμία]:"
-#. 9
-#: ../cli/src/devices.c:92
-msgid "DHCP6"
-msgstr "DHCP6"
+#: ../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"
+msgstr "γέφυÏα"
+
+#: ../cli/src/connections.c:3363
+#, c-format
+msgid "Enable STP %s"
+msgstr "ΕνεÏγοποίηση STP %s"
+
+#: ../cli/src/connections.c:3368
+#, c-format
+#| msgid "Error: 'con list': %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: 'con' command '%s' is not valid."
+msgid "Error: 'priority': '%s' is not a valid number <0-%d>.\n"
+msgstr "Σφάλμα: 'Ï€ÏοτεÏαιότητα': το '%s' δεν είναι έγκυÏος αÏιθμός <0-%d>.\n"
+
+#: ../cli/src/connections.c:3388
+msgid "Forward delay [15]: "
+msgstr "ΚαθυστέÏηση Ï€Ïοώθησης [15]: "
+
+#: ../cli/src/connections.c:3392
+#, c-format
+#| msgid "Error: 'nm' command '%s' is not valid."
+msgid "Error: 'forward-delay': '%s' is not a valid number <2-30>.\n"
+msgstr ""
+"Σφάλμα: 'καθυστέÏηση Ï€Ïοώθησης': το '%s' δεν είναι ένας έγκυÏος αÏιθμός "
+"<2-30>.\n"
+
+#: ../cli/src/connections.c:3401
+msgid "Hello time [2]: "
+msgstr "ΧÏόνος χαιÏÎµÏ„Î¹ÏƒÎ¼Î¿Ï [2]: "
+
+#: ../cli/src/connections.c:3405
+#, c-format
+#| msgid "Error: timeout value '%s' is not valid."
+msgid "Error: 'hello-time': '%s' is not a valid number <1-10>.\n"
+msgstr ""
+"Σφάλμα: 'χÏόνος χαιÏετισμοÏ': το '%s' δεν είναι ένας έγκυÏος αÏιθμός "
+"<1-10>.\n"
+
+#: ../cli/src/connections.c:3413
+msgid "Max age [20]: "
+msgstr "Μέγιστη ωÏίμανση [20]: "
+
+#: ../cli/src/connections.c:3417
+#, c-format
+#| msgid "Error: 'nm' command '%s' is not valid."
+msgid "Error: 'max-age': '%s' is not a valid number <6-40>.\n"
+msgstr "Σφάλμα: 'μέγιστη ωÏίμανση': το '%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: bssid argument value '%s' is not a valid BSSID."
+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:3456
+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 %s"
+msgstr "ΦουÏκέτα %s"
+
+#: ../cli/src/connections.c:3493
+#, c-format
+#| msgid "Error: 'dev wifi': %s"
+msgid "Error: 'hairpin': %s.\n"
+msgstr "Σφάλμα: 'φουÏκέτα': %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 [1]: "
+
+#: ../cli/src/connections.c:3528
+#, c-format
+#| msgid "Error: 'nm' command '%s' is not valid."
+msgid "Error: 'channel': '%s' is not a valid number <1-13>.\n"
+msgstr "Σφάλμα: 'κανάλι': το '%s' δεν είναι έγκυÏος αÏιθμός <1-13>.\n"
+
+#: ../cli/src/connections.c:3536
+msgid "DHCP anycast MAC address [none]: "
+msgstr "ΔιεÏθυνση MAC οποιασδήποτε εκπομπής DHCP [καμία]: "
+
+#: ../cli/src/connections.c:3581
+msgid "IPv4 address (IP[/plen] [gateway]) [none]: "
+msgstr "ΔιεÏθυνση IPv4 (IP[/plen] [Ï€Ïλη δικτÏου]) [καμία]: "
+
+#: ../cli/src/connections.c:3583
+msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
+msgstr "ΔιεÏθυνση IPv6 (IP[/plen] [Ï€Ïλη δικτÏου]) [καμία]: "
+
+#: ../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: %s."
+msgid "Error: "
+msgstr "Σφάλμα: "
+
+#. Ask for IP addresses
+#: ../cli/src/connections.c:3624
+#, c-format
+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 "Σφάλμα: 'γονέας': δεν είναι έγκυÏο χωÏίς 'κλειδί p'."
+
+#: ../cli/src/connections.c:3833 ../cli/src/connections.c:4854
+#| msgid "SSID"
+msgid "SSID: "
+msgstr "SSID: "
+
+#: ../cli/src/connections.c:3836 ../cli/src/connections.c:4857
+#| msgid "Error: Timeout %d sec expired."
+msgid "Error: 'ssid' is required."
+msgstr "Σφάλμα: απαιτείται 'ssid'."
+
+#: ../cli/src/connections.c:3900
+#| msgid "WiMAX NSP list"
+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: Timeout %d sec expired."
+msgid "Error: 'username' is required."
+msgstr "Σφάλμα: απαιτείται 'όνομα χÏήστη'."
+
+#: ../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 "ΔιεÏθυνση συσκευής μπλουτοÏθ: "
+
+#: ../cli/src/connections.c:4097
+#| msgid "Error: Timeout %d sec expired."
+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': το '%s' δεν είναι έγκυÏο· χÏησιμοποιήστε [%s, %s (%s), "
+"%s]."
+
+#: ../cli/src/connections.c:4185
+#| msgid "no device found for connection '%s'"
+msgid "VLAN parent device or connection UUID: "
+msgstr "Γονική συσκευή VLAN ή σÏνδεση UUID: "
+
+#: ../cli/src/connections.c:4188
+#| msgid "Error: 'dev list': %s"
+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: Timeout %d sec expired."
+msgid "Error: 'id' is required."
+msgstr "Σφάλμα: απαιτείται 'αναγνωÏιστικό'."
+
+#: ../cli/src/connections.c:4201
+#, c-format
+#| msgid "Error: 'dev' command '%s' is not valid."
+msgid "Error: 'id': '%s' is not valid; use <0-4095>."
+msgstr ""
+"Σφάλμα: 'αναγνωÏιστικό': το '%s' δεν είναι έγκυÏο· χÏησιμοποιήστε <0-4095>."
+
+#: ../cli/src/connections.c:4211
+#, c-format
+#| msgid "Error: Parameter '%s' is neither SSID nor BSSID."
+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: 'dev list': %s"
+msgid "Error: 'mode': %s."
+msgstr "Σφάλμα: 'κατάσταση': %s."
+
+#: ../cli/src/connections.c:4355
+#, c-format
+#| msgid "Error: 'nm' command '%s' is not valid."
+msgid "Error: 'primary': '%s' is not a valid interface name."
+msgstr "Σφάλμα: 'Ï€ÏωτεÏον': το '%s' δεν είναι έγκυÏο όνομα διεπαφής."
+
+#: ../cli/src/connections.c:4405 ../cli/src/connections.c:4505
+#: ../cli/src/connections.c:4712
+#| msgid "Error: Timeout %d sec expired."
+msgid "Error: 'master' is required."
+msgstr "Σφάλμα: απαιτείται 'κÏÏιο'."
+
+#: ../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 "ΠÏοειδοποίηση: κÏÏιο='%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 ""
+"ΠÏοειδοποίηση: ο 'Ï„Ïπος' αγνοείται Ï€Ïος το παÏόν. ΥποστηÏίζουμε μόνο "
+"υποτελείς έθεÏνετ Ï€Ïος το παÏόν.\n"
+
+#: ../cli/src/connections.c:4614
+#, c-format
+#| msgid "Error: 'con list': %s"
+msgid "Error: 'stp': %s."
+msgstr "Σφάλμα: 'stp': %s."
+
+#: ../cli/src/connections.c:4748
+#, c-format
+#| msgid "Error: 'dev wifi': %s"
+msgid "Error: 'hairpin': %s."
+msgstr "Σφάλμα: 'φουÏκέτα': %s."
+
+#: ../cli/src/connections.c:4801
+msgid "Error: 'vpn-type' is required."
+msgstr "Σφάλμα: απαιτείται 'Ï„Ïπος vpn'."
+
+#: ../cli/src/connections.c:4808
+#, c-format
+msgid "Warning: 'vpn-type': %s not known.\n"
+msgstr "ΠÏοειδοποίηση: 'Ï„Ïπος vpn': το %s δεν είναι γνωστό.\n"
+
+#: ../cli/src/connections.c:4870
+#, c-format
+#| msgid "Error: 'nm' command '%s' is not valid."
+msgid "Error: 'channel': '%s' is not valid; use <1-13>."
+msgstr "Σφάλμα: 'κανάλι': το '%s' δεν είναι έγκυÏο· χÏησιμοποιήστε <1-13>."
+
+#: ../cli/src/connections.c:4905
+#, 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:5003
+#, 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:5007
+#, c-format
+msgid "Connection '%s' (%s) successfully added.\n"
+msgstr "Η σÏνδεση '%s' (%s) Ï€Ïοστέθηκε με επιτυχία.\n"
+
+#: ../cli/src/connections.c:5221
+#, c-format
+#| msgid "Error: '%s' argument is missing."
+msgid "Error: 'type' argument is required."
+msgstr "Σφάλμα: απαιτείται το ÏŒÏισμα 'Ï„Ïπος'."
+
+#: ../cli/src/connections.c:5229
+#, c-format
+#| msgid "Error: Unknown connection: %s."
+msgid "Error: invalid connection type; %s."
+msgstr "Σφάλμα: άκυÏος Ï„Ïπος σÏνδεσης· %s."
+
+#: ../cli/src/connections.c:5238
+#, c-format
+#| msgid "Error: 'con list': %s"
+msgid "Error: 'autoconnect': %s."
+msgstr "Σφάλμα: 'αυτόματη σÏνδεση': %s."
+
+#: ../cli/src/connections.c:5248
+#, c-format
+#| msgid "Error: 'nm status': %s"
+msgid "Error: 'save': %s."
+msgstr "Σφάλμα: 'αποθήκευση': %s."
+
+#: ../cli/src/connections.c:5264
+msgid "Interface name [*]: "
+msgstr "Όνομα διεπαφής [*]: "
+
+#: ../cli/src/connections.c:5269
+#, c-format
+#| msgid "Error: '%s' argument is missing."
+msgid "Error: 'ifname' argument is required."
+msgstr "Σφάλμα: απαιτείται το ÏŒÏισμα 'ifname'."
+
+#: ../cli/src/connections.c:5276
+#, c-format
+#| msgid "Error: '%s' is not valid argument for '%s' option."
+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 | <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 [<setting> | <prop>] :: μετάβαση σε ÏÏθμιση ή ιδιότητα\n"
+"remove <setting>[.<prop>] | <prop> :: αφαίÏεση ÏÏθμισης ή επαναφοÏά τιμής "
+"ιδιότητας\n"
+"set [<setting>.<prop> <value>] :: οÏισμός τιμής ιδιότητας\n"
+"describe [<setting>.<prop>] :: πεÏιγÏαφή ιδιότητας\n"
+"print [all | <setting>[.<prop>]] :: εκτÏπωση σÏνδεσης\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: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 <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: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 <setting>[.<prop>] :: αφαίÏεση ÏÏθμισης ή επαναφοÏά τιμής ιδιότητας\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 [<setting>.<prop> <value>] :: οÏισμός τιμής ιδιότητας\n"
+"\n"
+"Αυτή η εντολή οÏίζει την τιμή ιδιότητας.\n"
+"\n"
+"ΠαÏάδειγμα: nmcli> set 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 [<setting>.<prop>] :: πεÏιγÏαφή ιδιότητας\n"
+"\n"
+"Εμφανίζει την πεÏιγÏαφή ιδιότητας. ΜποÏείτε να συμβουλευτείτε τη σελίδα του "
+"εγχειÏιδίου nm-settings(5) για να δείτε όλες τις Ïυθμίσεις NM και τις "
+"ιδιότητες.\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"
+"Στέλνει την κατατομή σÏνδεσης στο διαχειÏιστή δικτÏου που είτε την "
+"αποθηκεÏει\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 [<ifname>] [/<ap>|<nsp>] :: ενεÏγοποίηση της σÏνδεσης\n"
+"\n"
+"ΕνεÏγοποιεί τη σÏνδεση.\n"
+"\n"
+"Διαθέσιμες επιλογές:\n"
+"<ifname> - η συσκευή στην οποία θα ενεÏγοποιηθεί η σÏνδεση\n"
+"/<ap>|<nsp> - AP (Wi-Fi) ή NSP (WiMAX) (Ï€Ïόταξη με / όταν το <ifname> δεν "
+"οÏίζεται)\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/? [<command>] :: βοήθεια για τις εντολές 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 [<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 = μαÏÏο\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 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: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 [<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:6349
+#, 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: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 [<value>] :: Ï€ÏοσαÏτήστε νέα τιμή στην ιδιότητα\n"
+"\n"
+"Αυτή η εντολή Ï€Ïοσθέτει την παÏεχόμενη <value> σε αυτήν την ιδιότητα, αν η "
+"ιδιότητα είναι του Ï„Ïπου πεÏιέκτη. Για ιδιότητες με μοναδική τιμή η τιμή της "
+"ιδιότητας αντικαθίσταται (ίδιο όπως στο '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 [<value>|<index>|<option name>] :: διαγÏαφή της τιμής\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-settings(5) για να δείτε όλες τις Ïυθμίσεις NM και τις "
+"ιδιότητες.\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] :: εκτÏπωση τιμών ιδιότητας (ÏÏθμισης, "
+"σÏνδεσης)\n"
+"\n"
+"Εμφανίζει την τιμή ιδιότητας. ΠαÏέχοντας ένα ÏŒÏισμα μποÏείτε επίσης να "
+"εμφανίσετε τιμές για όλη τη ÏÏθμιση ή σÏνδεση.\n"
+
+#: ../cli/src/connections.c:6387
+#, c-format
+msgid ""
+"help/? [<command>] :: help for nmcli commands\n"
+"\n"
+msgstr ""
+"help/? [<command>] :: βοήθεια για τις εντολές nmcli\n"
+"\n"
+
+#: ../cli/src/connections.c:6474
+#, c-format
+#| msgid "Error: Connection activation failed."
+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? %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."
+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 parameter: %s\n"
+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 'wifi' parameter: '%s'."
+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: %s."
+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? %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: Connection deletion failed: %s"
+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 <setting>' Ï€Ïώτα, ή 'set <setting>.<property>'\n"
+
+#: ../cli/src/connections.c:7110 ../cli/src/connections.c:7246
+#: ../cli/src/connections.c:7326
+#, c-format
+#| msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
+msgid "Error: invalid setting argument '%s'; valid are [%s]\n"
+msgstr "Σφάλμα: άκυÏο ÏŒÏισμα ÏÏθμισης '%s'· έγκυÏα είναι τα [%s]\n"
+
+#: ../cli/src/connections.c:7120
+#, c-format
+#| msgid "Error: missing argument for '%s' option."
+msgid "Error: missing setting for '%s' property\n"
+msgstr "Σφάλμα: λείπει η ÏÏθμιση για την ιδιότητα '%s'\n"
+
+#: ../cli/src/connections.c:7127
+#, c-format
+#| msgid "Error: invalid 'wifi' parameter: '%s'."
+msgid "Error: invalid property: %s\n"
+msgstr "Σφάλμα: άκυÏη ιδιότητα: %s\n"
+
+#: ../cli/src/connections.c:7174
+#, c-format
+#| msgid "Error: Unknown connection: %s."
+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 "Error: '%s' is not an active connection."
+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 <setting>' Ï€Ïώτα, ή 'describe <setting>.<property>'\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 connection: %s."
+msgid "Error: unknown setting: '%s'\n"
+msgstr "Σφάλμα: άγνωστη ÏÏθμιση: '%s'\n"
+
+#: ../cli/src/connections.c:7385
+#, c-format
+#| msgid "Error: '%s' is not an active connection."
+msgid "Error: '%s' setting not present in the connection\n"
+msgstr "Σφάλμα: η ÏÏθμιση '%s' δεν εμφανίζεται στη σÏνδεση\n"
+
+#: ../cli/src/connections.c:7410
+#, c-format
+#| msgid "Error: invalid 'wifi' parameter: '%s'."
+msgid "Error: invalid property: %s%s\n"
+msgstr "Σφάλμα: άκυÏη ιδιότητα: %s%s\n"
+
+#: ../cli/src/connections.c:7412
+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 "VPN connection %d"
+msgid "Verify connection: %s\n"
+msgstr "Επιβεβαίωση σÏνδεσης: %s\n"
+
+#: ../cli/src/connections.c:7457
+#, c-format
+#| msgid "Error: invalid 'wifi' parameter: '%s'."
+msgid "Error: invalid argument '%s'\n"
+msgstr "Σφάλμα: άκυÏη παÏάμετÏος '%s'\n"
+
+#: ../cli/src/connections.c:7491
+#, 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: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 activation failed: %s"
+msgid "Error: connection verification failed: %s\n"
+msgstr "Σφάλμα: Αποτυχία πιστοποίησης σÏνδεσης: %s\n"
+
+#: ../cli/src/connections.c:7535
+#| msgid "Unknown error"
+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 deletion failed: %s"
+msgid "Error: connection is not valid: %s\n"
+msgstr "Σφάλμα: η σÏνδεση δεν είναι έγκυÏη: %s\n"
+
+#: ../cli/src/connections.c:7571
+#, c-format
+#| msgid "Error: Unknown connection: %s."
+msgid "Error: Cannot activate connection: %s.\n"
+msgstr "Σφάλμα: ΑδÏνατη η ενεÏγοποίηση της σÏνδεσης: %s.\n"
+
+#: ../cli/src/connections.c:7581
+#, 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:7587
+#, c-format
+msgid "Monitoring connection activation (press any key to continue)\n"
+msgstr ""
+"ΕνεÏγοποίηση παÏακολοÏθησης της σÏνδεσης (πατήστε οποιοδήποτε πλήκτÏο για "
+"συνεχίσετε)\n"
+
+#: ../cli/src/connections.c:7625
+#, c-format
+#| msgid "Error: 'nm status': %s"
+msgid "Error: status-line: %s\n"
+msgstr "Σφάλμα: γÏαμμή κατάστασης: %s\n"
+
+#: ../cli/src/connections.c:7633
+#, c-format
+#| msgid "Error: 'con list': %s"
+msgid "Error: save-confirmation: %s\n"
+msgstr "Σφάλμα: επιβεβαίωση αποθήκευσης: %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 ""
+"Σφάλμα: μόνο ένα από τα 'αναγνωÏιστικό', uuid ή 'διαδÏομή' μποÏεί να "
+"παÏασχεθεί."
+
+#: ../cli/src/connections.c:7916 ../cli/src/connections.c:8106
+#: ../cli/src/connections.c:8113
+#, c-format
+#| msgid "Error: Unknown connection: %s."
+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'· το ÏŒÏισμα 'Ï„Ïπος' "
+"αγνοείται\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 "Wired connection %d"
+msgid "Valid connection types: %s\n"
+msgstr "ΈγκυÏοι Ï„Ïποι σÏνδεσης: %s\n"
+
+#: ../cli/src/connections.c:7950
+#, c-format
+#| msgid "Error: Unknown connection: %s."
+msgid "Error: invalid connection type; %s\n"
+msgstr "Σφάλμα: άκυÏος Ï„Ïπος σÏνδεσης· %s\n"
+
+#: ../cli/src/connections.c:7989
+#, c-format
+#| msgid "no active connection or device"
+msgid "===| nmcli interactive connection editor |==="
+msgstr "===| ΕπεξεÏγαστής διαδÏαστικής σÏνδεσης nmcli |==="
+
+#: ../cli/src/connections.c:7992
+#, c-format
+#| msgid "no device found for connection '%s'"
+msgid "Editing existing '%s' connection: '%s'"
+msgstr "ΕπεξεÏγασία υφιστάμενης σÏνδεσης '%s': '%s'"
+
+#: ../cli/src/connections.c:7994
+#, c-format
+#| msgid "Active connections"
+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 [<setting>.<prop>]' για λεπτομεÏή πεÏιγÏαφή "
+"ιδιότητας."
+
+#: ../cli/src/connections.c:8034
+#, 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:8040
+#, c-format
+msgid "Connection '%s' (%s) successfully modified.\n"
+msgstr "Η σÏνδεση '%s' (%s) Ï„Ïοποποιήθηκε με επιτυχία.\n"
+
+#: ../cli/src/connections.c:8081
+#, c-format
+#| msgid "Error: %s argument is missing."
+msgid "Error: No arguments provided."
+msgstr "Σφάλμα: Δεν παÏέχονται οÏίσματα."
+
+#: ../cli/src/connections.c:8100
+#, c-format
+#| msgid "Error: %s argument is missing."
+msgid "Error: connection ID is missing."
+msgstr "Σφάλμα: λείπει το αναγνωÏιστικό της σÏνδεσης."
+
+#: ../cli/src/connections.c:8122 ../cli/src/connections.c:8135
+#, c-format
+#| msgid "Error: %s argument is missing."
+msgid "Error: <setting>.<property> argument is missing."
+msgstr "Σφάλμα: λείπει το ÏŒÏισμα <setting>.<property>."
+
+#: ../cli/src/connections.c:8140
+#, c-format
+#| msgid "Error: fields for '%s' options are missing."
+msgid "Error: value for '%s' is missing."
+msgstr "Σφάλμα: λείπει η τιμή για το '%s'."
+
+#: ../cli/src/connections.c:8158
+#, c-format
+#| msgid "Error: invalid 'wifi' parameter: '%s'."
+msgid "Error: invalid <setting>.<property> '%s'."
+msgstr "Σφάλμα: άκυÏο <setting>.<property> '%s'."
+
+#: ../cli/src/connections.c:8166
+#, c-format
+#| msgid "Error: invalid 'wwan' parameter: '%s'."
+msgid "Error: invalid or not allowed setting '%s': %s."
+msgstr "Σφάλμα: άκυÏη ή μη επιτÏεπόμενη ÏÏθμιση '%s': %s."
+
+#: ../cli/src/connections.c:8187
+#, c-format
+#| msgid "Error: invalid 'wifi' parameter: '%s'."
+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."
+msgid "Error: unknown connection: %s\n"
+msgstr "Σφάλμα: άγνωστη σÏνδεση: %s\n"
+
+#. truncate trailing ", "
+#: ../cli/src/connections.c:8359
+#, c-format
+#| msgid "Error: Unknown connection: %s."
+msgid "Error: cannot delete unknown connection(s): %s."
+msgstr "Σφάλμα: αδÏνατη η διαγÏαφή άγνωστων συνδέσεων: %s."
+
+#: ../cli/src/connections.c:8430
+#, c-format
+#| msgid "Couldn't decode PKCS#8 file: %s"
+msgid "Could not load file '%s'\n"
+msgstr "ΑδÏνατη η φόÏτωση αÏχείου '%s'\n"
+
+#: ../cli/src/connections.c:8615
+#, c-format
+#| msgid "Error: '%s' is not an active connection."
+msgid "Error: '%s' is not valid 'connection' command."
+msgstr "Σφάλμα: η '%s' δεν είναι ενεÏγή εντολή 'σÏνδεσης'."
+
+#: ../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 "UUID"
+msgid "CON-UUID"
+msgstr "UUID ΣΥÎΔΕΣΗΣ"
#. 2
-#: ../cli/src/devices.c:108
+#: ../cli/src/devices.c:92
msgid "VENDOR"
msgstr "ΚΑΤΑΣΚΕΥΑΣΤΗΣ"
#. 3
-#: ../cli/src/devices.c:109
+#: ../cli/src/devices.c:93
msgid "PRODUCT"
-msgstr "ΠΡΟΙΟÎ"
+msgstr "ΠΡΟΪΟÎ"
#. 4
-#: ../cli/src/devices.c:110
+#: ../cli/src/devices.c:94
msgid "DRIVER"
msgstr "ΟΔΗΓΟΣ"
#. 5
-#: ../cli/src/devices.c:111
+#: ../cli/src/devices.c:95
msgid "DRIVER-VERSION"
msgstr "ΕΚΔΟΣΗ-ΟΔΗΓΟΥ"
#. 6
-#: ../cli/src/devices.c:112
+#: ../cli/src/devices.c:96
msgid "FIRMWARE-VERSION"
-msgstr "ΕΚΔΟΣΗ-FIRMWARE"
+msgstr "ΕΚΔΟΣΗ-ΥΛΙΚΟΛΟΓΙΣΜΙΚΟΥ"
#. 7
-#: ../cli/src/devices.c:113
+#: ../cli/src/devices.c:97
msgid "HWADDR"
msgstr "ΔΙΕΥΘΥÎΣΗ-ΥΛΙΚΟΥ"
-#. 9
-#: ../cli/src/devices.c:115
+#. 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:116
+#. 11
+#: ../cli/src/devices.c:101
msgid "UDI"
msgstr "UDI"
-#. 11
-#: ../cli/src/devices.c:117
+#. 12
+#: ../cli/src/devices.c:102
msgid "IP-IFACE"
msgstr "IP-IFACE"
-#. 12
-#: ../cli/src/devices.c:118
+#. 13
+#: ../cli/src/devices.c:103
msgid "NM-MANAGED"
msgstr "NM-MANAGED"
-#. 14
-#: ../cli/src/devices.c:120
+#. 15
+#: ../cli/src/devices.c:105
msgid "FIRMWARE-MISSING"
-msgstr "FIRMWARE-MISSING"
+msgstr "ΕΛΛΕΙΠΟÎ-ΥΛΙΚΟΛΟΓΙΣΜΙΚΟ"
-#. 15
-#: ../cli/src/devices.c:121
-msgid "CONNECTION"
-msgstr "ΣΥÎΔΕΣΗ"
+#. 0
+#: ../cli/src/devices.c:118
+msgid "AVAILABLE-CONNECTION-PATHS"
+msgstr "ΔΙΑΘΕΣΙΜΕΣ-ΔΙΑΔΡΟΜΕΣ-ΣΥÎΔΕΣΗΣ"
+
+#. 1
+#: ../cli/src/devices.c:119
+#| msgid "CONNECTION"
+msgid "AVAILABLE-CONNECTIONS"
+msgstr "ΔΙΑΘΕΣΙΜΕΣ-ΣΥÎΔΕΣΕΙΣ"
#. 0
-#: ../cli/src/devices.c:130
+#: ../cli/src/devices.c:128
msgid "CARRIER-DETECT"
msgstr "ΑÎΙΧÎΕΥΣΗ-ΣΗΜΑΤΟΣ-ΓΡΑΜΜΗΣ"
#. 1
-#: ../cli/src/devices.c:131
+#: ../cli/src/devices.c:129
msgid "SPEED"
msgstr "ΤΑΧΥΤΗΤΑ"
#. 0
-#: ../cli/src/devices.c:140
+#: ../cli/src/devices.c:138
msgid "CARRIER"
msgstr "ΦΕΡΟÎ"
#. 0
-#: ../cli/src/devices.c:150
+#: ../cli/src/devices.c:147 ../cli/src/devices.c:568
msgid "WEP"
msgstr "WEP"
#. 1
-#: ../cli/src/devices.c:151
+#: ../cli/src/devices.c:148
msgid "WPA"
msgstr "WPA"
#. 2
-#: ../cli/src/devices.c:152
+#: ../cli/src/devices.c:149 ../cli/src/devices.c:576
msgid "WPA2"
msgstr "WPA2"
#. 3
-#: ../cli/src/devices.c:153
+#: ../cli/src/devices.c:150
msgid "TKIP"
msgstr "TKIP"
#. 4
-#: ../cli/src/devices.c:154
+#: ../cli/src/devices.c:151
msgid "CCMP"
msgstr "CCMP"
+#. 5
+#. 2
+#: ../cli/src/devices.c:152 ../cli/src/devices.c:242
+msgid "AP"
+msgstr "AP"
+
+#. 6
+#: ../cli/src/devices.c:153
+msgid "ADHOC"
+msgstr "ADHOC (αυτοοÏγανωμένο)"
+
#. 0
-#: ../cli/src/devices.c:164
+#: ../cli/src/devices.c:162
msgid "CTR-FREQ"
msgstr "CTR-FREQ"
#. 1
-#: ../cli/src/devices.c:165
+#: ../cli/src/devices.c:163
msgid "RSSI"
msgstr "RSSI"
#. 2
-#: ../cli/src/devices.c:166
+#: ../cli/src/devices.c:164
msgid "CINR"
msgstr "CINR"
#. 3
-#: ../cli/src/devices.c:167
+#: ../cli/src/devices.c:165
msgid "TX-POW"
msgstr "TX-POW"
#. 4
-#: ../cli/src/devices.c:168
+#: ../cli/src/devices.c:166
msgid "BSID"
msgstr "BSID"
#. 0
-#: ../cli/src/devices.c:178
+#: ../cli/src/devices.c:175 ../tui/nmt-page-wifi.c:221
msgid "SSID"
msgstr "SSID"
#. 1
-#: ../cli/src/devices.c:179
+#: ../cli/src/devices.c:176
+#| msgid "SSID"
+msgid "SSID-HEX"
+msgstr "SSID-ΔΕΚΑΕΞΑΔΙΚΟ"
+
+#. 2
+#: ../cli/src/devices.c:177 ../tui/nmt-page-wifi.c:352
msgid "BSSID"
msgstr "BSSID"
-#. 2
-#: ../cli/src/devices.c:180
+#. 3
+#: ../cli/src/devices.c:178
msgid "MODE"
msgstr "ΛΕΙΤΟΥΡΓΙΑ"
-#. 3
-#: ../cli/src/devices.c:181
+#. 4
+#: ../cli/src/devices.c:179
+msgid "CHAN"
+msgstr "ΚΑÎΑΛΙ"
+
+#. 5
+#: ../cli/src/devices.c:180
msgid "FREQ"
msgstr "ΣΥΧÎΟΤΗΤΑ"
-#. 4
-#: ../cli/src/devices.c:182
+#. 6
+#: ../cli/src/devices.c:181
msgid "RATE"
msgstr "ΡΥΘΜΟΣ"
-#. 5
+#. 7
#. 1
-#: ../cli/src/devices.c:183 ../cli/src/devices.c:201
+#: ../cli/src/devices.c:182 ../cli/src/devices.c:202
msgid "SIGNAL"
msgstr "ΣΗΜΑ"
-#. 6
+#. 8
+#: ../cli/src/devices.c:183
+msgid "BARS"
+msgstr "ΓΡΑΜΜΕΣ"
+
+#. 9
#: ../cli/src/devices.c:184
msgid "SECURITY"
msgstr "ΑΣΦΑΛΕΙΑ"
-#. 7
+#. 10
#: ../cli/src/devices.c:185
msgid "WPA-FLAGS"
-msgstr "ΕΠΙΛΟΓΕΣ-WPA"
+msgstr "ΣΗΜΑΙΕΣ-WPA"
-#. 8
+#. 11
#: ../cli/src/devices.c:186
msgid "RSN-FLAGS"
-msgstr "ΕΠΙΛΟΓΕΣ-RSN"
+msgstr "ΣΗΜΑΙΕΣ-RSN"
+
+#. 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:216
+msgid "SLAVES"
+msgstr "ΥΠΟΤΕΛΕΙΣ"
+
+#. 0
+#: ../cli/src/devices.c:225
+#| msgid "UUID"
+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 "ΙΔΙΟΤΗΤΕΣ-ΕÎΣΥΡΜΑΤΗΣ"
-#. 10
#. 4
-#: ../cli/src/devices.c:188 ../cli/src/devices.c:204
-msgid "ACTIVE"
-msgstr "ΕÎΕΡΓΗ"
+#: ../cli/src/devices.c:244
+msgid "WIMAX-PROPERTIES"
+msgstr "ΙΔΙΟΤΗΤΕΣ-WIMAX"
-#: ../cli/src/devices.c:223
-#, c-format
+#. 10
+#: ../cli/src/devices.c:250 ../tui/nmt-page-bond.c:73
+msgid "BOND"
+msgstr "ΔΕΣΜΟΣ"
+
+#. 12
+#: ../cli/src/devices.c:252
+#| msgid "CONNECTION"
+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 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 { 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:323
+#: ../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 { help }\n"
+"\n"
+"Εμφάνιση της κατάστασης όλων των συσκευών.\n"
+"Από Ï€Ïοεπιλογή, εμφανίζονται οι παÏακάτω στήλες:\n"
+" ΣΥΣΚΕΥΗ - όνομα διεπαφής\n"
+" ΤΥΠΟΣ - Ï„Ïπος συσκευής\n"
+" ΚΑΤΑΣΤΑΣΗ - κατάσταση συσκευής\n"
+" ΣΥÎΔΕΣΗ - ενεÏγοποιημένη σÏνδεση στη συσκευή (αν υπάÏχει)\n"
+"Οι εμφανιζόμενες στήλες μποÏοÏν να αλλαχθοÏν χÏησιμοποιώντας την καθολική "
+"επιλογή '--fields'. 'status' είναι η\n"
+"Ï€Ïοεπιλεγμένη εντολή, που σημαίνει ότι η '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 { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<ifname>]\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 { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Συνδέει τη συσκευή.\n"
+"Ο διαχειÏιστής δικτÏου θα Ï€Ïοσπαθήσει να βÏει μια κατάλληλη σÏνδεση που θα "
+"ενεÏγοποιηθεί.\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 { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\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 { 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"
+"Συνδεθείτε με ένα δίκτυο Wi-Fi που οÏίστηκε από SSID ή BSSID. Η εντολή "
+"δημιουÏγεί\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"
+"Ζητήστε ο διαχειÏιστής δικτÏου να επανασαÏώνει αμέσως για διαθέσιμα σημεία "
+"Ï€Ïόσβασης.\n"
+"Ο διαχειÏιστής δικτÏου σαÏώνει δίκτυα Wi-Fi πεÏιοδικά, αλλά σε κάποιες "
+"πεÏιπτώσεις μποÏεί να είναι\n"
+"χÏήσιμη η έναÏξη χειÏοκίνητης σάÏωσης. Σημειώστε ότι αυτή η εντολή δεν "
+"εμφανίζει \n"
+"τα APs, χÏησιμοποιήστε '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 ""
+"ΧÏήση: nmcli device wimax { ARGUMENTS | help }\n"
+"\n"
+"Εκτέλεση λειτουÏγίας σε συσκευές WiMAX.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [nsp <name>]]\n"
+"\n"
+"Εμφανίζει τα διαθέσιμα NSPs WiMAX. Οι επιλογές 'ifname' και 'nsp' μποÏοÏν να "
+"χÏησιμοποιηθοÏν\n"
+"για να εμφανίσουν τα δίκτυα για μια συγκεκÏιμένη διεπαφή, ή με ένα "
+"συγκεκÏιμένο NSP.\n"
+"\n"
+
+#: ../cli/src/devices.c:483
msgid "(none)"
msgstr "(κανένα)"
-#: ../cli/src/devices.c:379
+#: ../cli/src/devices.c:552
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:380
+#: ../cli/src/devices.c:553
#, c-format
msgid "%u Mbit/s"
msgstr "%u Mbit/s"
-#: ../cli/src/devices.c:389
-msgid "Encrypted: "
-msgstr "ΚÏυπτογÏαφημένη:"
-
-#: ../cli/src/devices.c:394
-msgid "WEP "
-msgstr "WEP "
-
-#: ../cli/src/devices.c:396
-msgid "WPA "
-msgstr "WPA "
+#: ../cli/src/devices.c:572
+msgid "WPA1"
+msgstr "WPA1"
-#: ../cli/src/devices.c:398
-msgid "WPA2 "
-msgstr "WPA2 "
+#: ../cli/src/devices.c:581
+msgid "802.1X"
+msgstr "802.1X"
-#: ../cli/src/devices.c:401
-msgid "Enterprise "
-msgstr "ΕπιχείÏηση "
-
-#: ../cli/src/devices.c:410
+#: ../cli/src/devices.c:597
msgid "Ad-Hoc"
msgstr "Ad-Hoc"
-#: ../cli/src/devices.c:410
-msgid "Infrastructure"
-msgstr "Υποδομή"
+#: ../cli/src/devices.c:598
+msgid "Infra"
+msgstr "ΥπέÏυθÏο"
-#: ../cli/src/devices.c:445
+#: ../cli/src/devices.c:630
msgid "Home"
msgstr "Οικία"
-#: ../cli/src/devices.c:448
+#: ../cli/src/devices.c:633
msgid "Partner"
msgstr "ΣυνέταιÏος"
-#: ../cli/src/devices.c:451
+#: ../cli/src/devices.c:636
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:730
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:742
+#, c-format
+#| msgid "Error: 'dev list': %s"
+msgid "Error: 'device show': %s"
+msgstr "Σφάλμα: 'εμφάνιση συσκευής': %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:591
-msgid "not connected"
-msgstr "δε συνδέθηκε"
-
-#: ../cli/src/devices.c:618
+#: ../cli/src/devices.c:832
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
-#. Print header
-#. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:691
+#: ../cli/src/devices.c:918
msgid "on"
msgstr "on"
-#: ../cli/src/devices.c:691
+#: ../cli/src/devices.c:918
msgid "off"
msgstr "off"
-#: ../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:1193
#, c-format
-msgid "Error: 'dev status': %s; allowed fields: %s"
-msgstr "Σφάλμα: 'dev status': %s, επιτÏεπόμενα πεδία: %s"
+#| msgid "Error: 'dev status': %s"
+msgid "Error: 'device status': %s"
+msgstr "Σφάλμα: 'κατάσταση συσκευής': %s"
-#: ../cli/src/devices.c:867
+#. Add headers
+#: ../cli/src/devices.c:1211
msgid "Status of devices"
msgstr "Κατάσταση συσκευών"
-#: ../cli/src/devices.c:898
+#: ../cli/src/devices.c:1242
#, c-format
-msgid "Error: '%s' argument is missing."
-msgstr "Σφάλμα: λείπει το ÏŒÏισμα '%s' ."
+#| msgid "Error: invalid 'wwan' parameter: '%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: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:962
+#: ../cli/src/devices.c:1325
+#, c-format
+#| msgid "Success: Device '%s' successfully disconnected."
+msgid "Device '%s' successfully activated with '%s'.\n"
+msgstr "Επιτυχής ενεÏγοποίηση της συσκευής '%s' με '%s'.\n"
+
+#: ../cli/src/devices.c:1341
+#, c-format
+#| msgid "Error: Connection activation failed: %s"
+msgid "Error: Device activation failed: %s"
+msgstr "Σφάλμα: Αποτυχία ενεÏγοποίησης συσκευής: %s"
+
+#: ../cli/src/devices.c:1349
+#, c-format
+#| msgid "Error: Connection activation failed: (%d) %s."
+msgid "Error: Device activation failed: device was disconnected"
+msgstr "Σφάλμα: Αποτυχία ενεÏγοποίησης συσκευής: η συσκευή αποσυνδέθηκε."
+
+#: ../cli/src/devices.c:1362
+#, c-format
+#| msgid "Device '%s' has been disconnected.\n"
+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: iface has to be specified."
+msgid "Error: No interface specified."
+msgstr "Σφάλμα: Δεν καθοÏίστηκε διεπαφή."
+
+#: ../cli/src/devices.c:1406 ../cli/src/devices.c:1540
+#, c-format
+#| msgid "Error: missing argument for '%s' option."
+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:997
+#: ../cli/src/devices.c:1481
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "Σφάλμα: Αποτυχία αποσÏνδεσης συσκευής '%s' (%s): %s"
-#: ../cli/src/devices.c:1010
+#: ../cli/src/devices.c:1495
#, 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:1203
-#, c-format
-msgid "Error: 'dev wifi': %s"
-msgstr "Σφάλμα: 'dev wifi': %s"
+#: ../cli/src/devices.c:1637
+#| msgid "WiFi scan list"
+msgid "Wi-Fi scan list"
+msgstr "Κατάλογος σάÏωσης WiFi"
-#: ../cli/src/devices.c:1205
+#: ../cli/src/devices.c:1675
#, 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"
+#| msgid "Error: 'dev wifi': %s"
+msgid "Error: 'device wifi': %s"
+msgstr "Σφάλμα: 'συσκευή wifi': %s"
-#: ../cli/src/devices.c:1265 ../cli/src/devices.c:1319
+#: ../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:1282
+#: ../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:1350 ../cli/src/devices.c:1396
+#: ../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:1355
+#: ../cli/src/devices.c:1838
#, c-format
msgid "Error: Connection activation failed: (%d) %s."
msgstr "Σφάλμα: Αποτυχία ενεÏγοποίησης σÏνδεσης: (%d) %s."
-#: ../cli/src/devices.c:1380
+#: ../cli/src/devices.c:1863
#, c-format
msgid "Error: Failed to add/activate new connection: (%d) %s"
msgstr "Σφάλμα: Αποτυχία Ï€Ïοσθήκης/ενεÏγοποίησης της νέας σÏνδεσης: (%d) %s"
-#: ../cli/src/devices.c:1388
+#: ../cli/src/devices.c:1871
#, c-format
msgid "Error: Failed to add/activate new connection: Unknown error"
msgstr ""
"Σφάλμα: Αποτυχία Ï€Ïοσθήκης/ενεÏγοποίησης της νέας σÏνδεσης: Άγνωστο σφάλμα"
-#: ../cli/src/devices.c:1532
+#: ../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:1555
+#: ../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:1579
+#: ../cli/src/devices.c:2079
#, c-format
msgid ""
"Error: wep-key-type argument value '%s' is invalid, use 'key' or 'phrase'."
@@ -1350,81 +3807,84 @@ msgstr ""
"Σφάλμα: η τιμή του οÏίσματος wep-key-type '%s' δεν είναι έγκυÏη, "
"χÏησιμοποιήστε 'key' ή 'phrase'."
-#: ../cli/src/devices.c:1619
+#: ../cli/src/devices.c:2099
+#, c-format
+#| msgid "Error: %s."
+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:1625
+#: ../cli/src/devices.c:2120
#, 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:2146 ../cli/src/devices.c:2308
#, c-format
msgid "Error: No Wi-Fi device found."
msgstr "Σφάλμα: Δε βÏέθηκε συσκευή Wi-Fi."
-#: ../cli/src/devices.c:1674
+#: ../cli/src/devices.c:2164
#, c-format
msgid "Error: No network with SSID '%s' found."
msgstr "Σφάλμα: Δεν βÏέθηκε δίκτυο με SSID '%s'."
-#: ../cli/src/devices.c:1676
+#: ../cli/src/devices.c:2166
#, 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:2205
+msgid "Password: "
+msgstr "Κωδικός Ï€Ïόσβασης: "
-#: ../cli/src/devices.c:1852
+#: ../cli/src/devices.c:2334
#, c-format
-msgid "Error: 'dev wimax': %s; allowed fields: %s"
-msgstr "Σφάλμα: 'dev wimax': %s, επιτÏεπόμενα πεδία: %s"
+#| msgid "Error: 'dev wifi' command '%s' is not valid."
+msgid "Error: 'device wifi' command '%s' is not valid."
+msgstr "Σφάλμα: η εντολή 'device wifi' '%s' δεν είναι έγκυÏη."
-#: ../cli/src/devices.c:1875
+#: ../cli/src/devices.c:2381
msgid "WiMAX NSP list"
-msgstr "λίστα WiMAX NSP"
+msgstr "Κατάλογος NSP WiMAX"
+
+#: ../cli/src/devices.c:2418
+#, c-format
+#| msgid "Error: 'dev wimax': %s"
+msgid "Error: 'device wimax': %s"
+msgstr "Σφάλμα: 'συσκευή wimax': %s"
-#: ../cli/src/devices.c:1912
+#: ../cli/src/devices.c:2472
#, c-format
msgid "Error: NSP with name '%s' not found."
msgstr "Σφάλμα: Δεν βÏέθηκε NSP με όνομα '%s'."
-#: ../cli/src/devices.c:1923
+#: ../cli/src/devices.c:2485
#, c-format
msgid "Error: Device '%s' is not a WiMAX device."
msgstr "Σφάλμα: Η συσκευή '%s' δεν είναι συσκευή WiMAX."
-#: ../cli/src/devices.c:1954
+#: ../cli/src/devices.c:2523
#, c-format
msgid "Error: Access point with nsp '%s' not found."
msgstr "Σφάλμα: Δεν βÏέθηκε σημείο Ï€Ïόσβασης με nsp '%s'."
-#: ../cli/src/devices.c:1981
+#: ../cli/src/devices.c:2555
#, c-format
-msgid "Error: 'dev wimax' command '%s' is not valid."
-msgstr "Σφάλμα: η εντολή 'dev wimax' '%s' δεν είναι έγκυÏη."
+#| msgid "Error: 'dev wimax' command '%s' is not valid."
+msgid "Error: 'device wimax' command '%s' is not valid."
+msgstr "Σφάλμα: η εντολή 'device wimax' '%s' δεν είναι έγκυÏη."
-#: ../cli/src/devices.c:2031
+#: ../cli/src/devices.c:2705
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
-msgstr "Σφάλμα: η εντολή 'dev' '%s' δεν είναι έγκυÏη."
+msgstr "Σφάλμα: η εντολή 'dev' '%s' δεν είναι έγκυÏη."
#: ../cli/src/network-manager.c:37
msgid "RUNNING"
@@ -1437,248 +3897,568 @@ 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 "CONNECTION"
+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"
+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"
+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"
+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 "DOMAIN"
+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 | 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 ""
-"ΧÏήση: 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"
-" status\n"
-" permissions\n"
-" enable [true|false]\n"
-" sleep [true|false]\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
-" wimax [on|off]\n"
+" όνομα οικοδεσπότη [<hostname>]\n"
+"\n"
+" άδειες\n"
+"\n"
+" σÏνδεση [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"
+"αλλάξετε την κατάσταση σÏνδεσης, δώστε το επίπεδο και/ή τον τομέα. "
+"ΠαÏακαλοÏμε δείτε τη σελίδα εγχειÏιδίου\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"
+" ενεÏγό\n"
+"\n"
+" ανενεÏγό\n"
+"\n"
+" συνδεσιμότητα [έλεγχος]\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 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"
+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"
+"Λήψη κατάστασης των Ïαδιοδιακοπτών 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
-#, fuzzy
+#: ../cli/src/network-manager.c:268
msgid "connected (local only)"
-msgstr "Μόνο τοπικά αÏχεία"
+msgstr "σÏνδεση (μόνο τοπική)"
-#: ../cli/src/network-manager.c:114
-#, fuzzy
+#: ../cli/src/network-manager.c:270
#| msgid "connected"
msgid "connected (site only)"
-msgstr "_Μόνο αν κάποιος είναι συνδεδεμένος"
+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: 'con 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 "Κατάσταση της ΔιαχείÏισης ΔικτÏου"
-#. 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
-msgid "auth"
-msgstr "auth"
+#: ../cli/src/network-manager.c:375
+#| msgid "activating"
+msgid "starting"
+msgstr "εκκίνηση"
-#: ../cli/src/network-manager.c:301
-#, c-format
-msgid "Error: 'nm permissions': %s"
-msgstr "Σφάλμα: 'nm permissions': %s"
+#: ../cli/src/network-manager.c:375
+msgid "started"
+msgstr "ξεκίνησε"
-#: ../cli/src/network-manager.c:303
+#: ../cli/src/network-manager.c:446
+msgid "auth"
+msgstr "εξουσιοδότηση"
+
+#: ../cli/src/network-manager.c:475
#, c-format
-msgid "Error: 'nm permissions': %s; allowed fields: %s"
-msgstr "Σφάλμα: 'nm permissions': %s; επιτÏεπόμενα πεδία: %s"
+#| msgid "Error: 'nm permissions': %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
-#, c-format
-msgid "Error: Couldn't connect to system bus: %s"
-msgstr "Σφάλμα: Αδυναμία σÏνδεσης στο δίαυλο συστήματος: %s"
-
-#: ../cli/src/network-manager.c:361
+#: ../cli/src/network-manager.c:530
#, c-format
-msgid "Error: Couldn't create D-Bus object proxy."
-msgstr "Σφάλμα: Αδυναμία δημιουÏγίας αντικειμένου διαμεσολαβητή του D-Bus."
-
-#: ../cli/src/network-manager.c:367
-#, fuzzy, c-format
#| msgid "Error: 'con list': %s"
-msgid "Error in sleep: %s"
-msgstr ""
-"Ανάλυση σφάλματος σε '%s':\n"
-"%s"
+msgid "Error: 'general 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
-#, c-format
-msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
-msgstr ""
-"Σφάλμα: η τιμή '%s' του οÏίσματος '--fields' δεν είναι έγκυÏη εδώ. "
-"ΕπιτÏεπόμενα πεδία: %s"
-
-#: ../cli/src/network-manager.c:424
-msgid "Networking enabled"
-msgstr "ΕνεÏγοποιήθηκε η δικτÏωση"
+#: ../cli/src/network-manager.c:545
+#| msgid "NetworkManager permissions"
+msgid "NetworkManager logging"
+msgstr "ΣÏνδεση διαχειÏιστή δικτÏου"
-#: ../cli/src/network-manager.c:440
+#: ../cli/src/network-manager.c:565
#, c-format
-msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
-msgstr ""
-"Σφάλμα: μη έγκυÏη παÏάμετÏος 'enable': '%s'; χÏησιμοποιήστε 'true' ή 'false'."
-
-#: ../cli/src/network-manager.c:450
-#, fuzzy, c-format
-#| msgid "Error: Could not connect to NetworkManager."
-msgid "Error: Sleeping status is not exported by NetworkManager."
-msgstr "Σφάλμα: Αδυναμία σÏνδεσης στη ΔιαχείÏιση ΔικτÏου."
+#| 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:458
+#: ../cli/src/network-manager.c:682
#, 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) ενεÏγοποιημένο"
+msgid "Error: access denied to set logging; %s"
+msgstr "Σφάλμα: άÏνηση Ï€Ïόσβασης για οÏισμό σÏνδεσης· %s"
-#: ../cli/src/network-manager.c:495
+#: ../cli/src/network-manager.c:684
#, c-format
-msgid "Error: invalid 'wifi' parameter: '%s'."
-msgstr "Σφάλμα: μη έγκυÏη παÏάμετÏος 'wifi': '%s'."
-
-#: ../cli/src/network-manager.c:517
-msgid "WWAN enabled"
-msgstr "WWAN ενεÏγοποιημένο"
+#| msgid "Error: %s."
+msgid "Error: %s"
+msgstr "Σφάλμα: %s"
-#: ../cli/src/network-manager.c:533
+#: ../cli/src/network-manager.c:692
#, c-format
-msgid "Error: invalid 'wwan' parameter: '%s'."
-msgstr "Σφάλμα: μη έγκυÏη παÏάμετÏος 'wwan': '%s'."
+#| msgid "Error: 'nm' command '%s' is not valid."
+msgid "Error: 'general' command '%s' is not valid."
+msgstr "Σφάλμα: η εντολή 'general' '%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:585
-#, c-format
-msgid "Error: 'nm' command '%s' is not valid."
-msgstr "Σφάλμα: η '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 'wifi' parameter: '%s'."
+msgid "Error: invalid '%s' argument: '%s' (use on/off)."
+msgstr "Σφάλμα: άκυÏο ÏŒÏισμα '%s': '%s' (χÏησιμοποιήστε ναι/όχι)."
+
+#: ../cli/src/network-manager.c:746
+#| msgid "Connection list"
+msgid "Connectivity"
+msgstr "Συνδεσιμότητα"
+
+#: ../cli/src/network-manager.c:758
+#| msgid "Networking enabled"
+msgid "Networking"
+msgstr "ΔικτÏωση"
+
+#: ../cli/src/network-manager.c:783
+#, c-format
+#| msgid "Error: 'con' 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: 'con' command '%s' is not valid."
+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: 'con' command '%s' is not valid."
+msgid "Error: 'radio' command '%s' is not valid."
+msgstr "Σφάλμα: η εντολή 'radio' '%s' δεν είναι έγκυÏη."
+
+#: ../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"
@@ -1691,255 +4471,1002 @@ 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"
"\n"
-"OPTIONS\n"
-" -t[erse] λιτή έξοδος\n"
-" -p[retty] όμοÏφη έξοδος\n"
-" -m[ode] tabular|multiline Ï„Ïόπος εξόδου\n"
-" -f[ields] <field1,field2,...>|all|common καθοÏισμός πεδίων για έξοδο\n"
-" -e[scape] yes|no escape διαχωÏιστικά στηλών στις "
+"ΕΠΙΛΟΓΕΣ\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] μην ελέγξεις της εκδόσεις των "
+" -n[ocheck] να μην ελέγχονται οι εκδόσεις "
"nmcli και NetworkManager\n"
-" -v[ersion] εμφάνιση έκδοσης ποÏγÏάμματος\n"
-" -h[elp] εκτÏπωση βοήθειας\n"
+" -a[sk] εÏώτηση για ελλείπουσες "
+"παÏαμέτÏους\n"
+" -w[ait] <seconds> οÏισμός χÏόνου λήξης αναμονής "
+"για ολοκλήÏωση λειτουÏγιών\n"
+" -v[ersion] εμφάνιση έκδοσης Ï€ÏογÏάμματος\n"
+" -h[elp] εκτÏπωση αυτής της βοήθειας\n"
"\n"
-"OBJECT\n"
-" nm Κατάσταση του NetworkManager\n"
-" con Συνδέσεις του NetworkManager\n"
-" dev συσκευές που διαχειÏίζεται ο NetworkManager\n"
+"ΑÎΤΙΚΕΙΜΕÎΟ\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:121
+#: ../cli/src/nmcli.c:139
#, c-format
msgid "Error: Object '%s' is unknown, try 'nmcli help'."
msgstr "Σφάλμα: το αντικείμενο '%s' είναι άγνωστο, δοκιμάστε την 'nmcli help'."
-#: ../cli/src/nmcli.c:151
+#: ../cli/src/nmcli.c:169
#, c-format
msgid "Error: Option '--terse' is specified the second time."
msgstr "Σφάλμα: η επιλογή '--terse' καθοÏίζεται τη δεÏτεÏη φοÏά."
-#: ../cli/src/nmcli.c:156
+#: ../cli/src/nmcli.c:174
#, c-format
msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
msgstr ""
"Σφάλμα: η επιλογή '--terse' είναι αμοιβαία αποκλειόμενη με την '--pretty'."
-#: ../cli/src/nmcli.c:164
+#: ../cli/src/nmcli.c:182
#, c-format
msgid "Error: Option '--pretty' is specified the second time."
msgstr "Σφάλμα: η επιλογή '--pretty' καθοÏίζεται τη δεÏτεÏη φοÏά."
-#: ../cli/src/nmcli.c:169
+#: ../cli/src/nmcli.c:187
#, 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: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:188 ../cli/src/nmcli.c:204
+#: ../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:211
+#: ../cli/src/nmcli.c:229
#, c-format
msgid "Error: fields for '%s' options are missing."
msgstr "Σφάλμα: λείπουν πεδία για τις επιλογές '%s'."
-#: ../cli/src/nmcli.c:219
+#: ../cli/src/nmcli.c:247
+#, 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:254
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "ΕÏγαλείο nmcli, έκδοση %s\n"
-#: ../cli/src/nmcli.c:225
+#: ../cli/src/nmcli.c:260
#, c-format
msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
msgstr "Σφάλμα: Η επιλογή '%s' είναι άγνωστη, δοκιμάστε 'nmcli -help'."
-#: ../cli/src/nmcli.c:244
+#: ../cli/src/nmcli.c:340 ../cli/src/nmcli.c:349
+#, c-format
+msgid ""
+"\n"
+"Error: nmcli terminated by signal %s (%d)\n"
+msgstr ""
+"\n"
+"Σφάλμα: το nmcli τελείωσε με σήμα %s (%d)\n"
+
+#: ../cli/src/nmcli.c:380
+#, c-format
+#| msgid "Failed to encrypt: %d."
+msgid "Failed to set signal mask: %d\n"
+msgstr "Αποτυχία οÏÎ¹ÏƒÎ¼Î¿Ï Î¼Î¬ÏƒÎºÎ±Ï‚ σήματος: %d\n"
+
+#: ../cli/src/nmcli.c:387
#, c-format
-msgid "Caught signal %d, shutting down..."
-msgstr "Ελήφθη σήμα %d, τεÏματισμός…"
+#| msgid "Failed to encrypt: %d."
+msgid "Failed to create signal handling thread: %d\n"
+msgstr "Αποτυχία δημιουÏγίας νήματος χειÏÎ¹ÏƒÎ¼Î¿Ï ÏƒÎ®Î¼Î±Ï„Î¿Ï‚: %d\n"
-#: ../cli/src/nmcli.c:269
+#: ../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:285
+#: ../cli/src/nmcli.c:416
msgid "Success"
msgstr "Επιτυχία"
-#: ../cli/src/settings.c:519
+#: ../cli/src/settings.c:669
#, c-format
-msgid "%d (hex-ascii-key)"
-msgstr "%d (hex-ascii-key)"
+#| msgid "%d (hex-ascii-key)"
+msgid "%d (key)"
+msgstr "%d (πλήκτÏο)"
-#: ../cli/src/settings.c:521
+#: ../cli/src/settings.c:671
#, c-format
-msgid "%d (104/128-bit passphrase)"
-msgstr "%d (104/128-bit φÏάση κλειδί)"
+#| msgid "%d (104/128-bit passphrase)"
+msgid "%d (passphrase)"
+msgstr "%d (συνθηματικό)"
-#: ../cli/src/settings.c:524 ../cli/src/settings.c:652
+#: ../cli/src/settings.c:674 ../cli/src/settings.c:802
#, c-format
msgid "%d (unknown)"
msgstr "%d (άγνωστο)"
-#: ../cli/src/settings.c:550
+#: ../cli/src/settings.c:700
msgid "0 (unknown)"
msgstr "0 (άγνωστο)"
-#: ../cli/src/settings.c:556
+#: ../cli/src/settings.c:706
msgid "any, "
msgstr "οποιοδήποτε,"
-#: ../cli/src/settings.c:558
+#: ../cli/src/settings.c:708
msgid "900 MHz, "
msgstr "900 MHz, "
-#: ../cli/src/settings.c:560
+#: ../cli/src/settings.c:710
msgid "1800 MHz, "
msgstr "1800 MHz, "
-#: ../cli/src/settings.c:562
+#: ../cli/src/settings.c:712
msgid "1900 MHz, "
msgstr "1900 MHz, "
-#: ../cli/src/settings.c:564
+#: ../cli/src/settings.c:714
msgid "850 MHz, "
msgstr "850 MHz, "
-#: ../cli/src/settings.c:566
+#: ../cli/src/settings.c:716
msgid "WCDMA 3GPP UMTS 2100 MHz, "
msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../cli/src/settings.c:568
+#: ../cli/src/settings.c:718
msgid "WCDMA 3GPP UMTS 1800 MHz, "
msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../cli/src/settings.c:570
+#: ../cli/src/settings.c:720
msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../cli/src/settings.c:572
+#: ../cli/src/settings.c:722
msgid "WCDMA 3GPP UMTS 800 MHz, "
msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../cli/src/settings.c:574
+#: ../cli/src/settings.c:724
msgid "WCDMA 3GPP UMTS 850 MHz, "
msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../cli/src/settings.c:576
+#: ../cli/src/settings.c:726
msgid "WCDMA 3GPP UMTS 900 MHz, "
msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../cli/src/settings.c:578
+#: ../cli/src/settings.c:728
msgid "WCDMA 3GPP UMTS 1700 MHz, "
msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../cli/src/settings.c:580
+#: ../cli/src/settings.c:730
msgid "WCDMA 3GPP UMTS 1900 MHz, "
msgstr "WCDMA 3GPP UMTS 1900 MHz, "
-#: ../cli/src/settings.c:582
+#: ../cli/src/settings.c:732
msgid "WCDMA 3GPP UMTS 2600 MHz, "
msgstr "WCDMA 3GPP UMTS 2600 MHz, "
-#: ../cli/src/settings.c:600
+#: ../cli/src/settings.c:750
msgid "0 (NONE)"
msgstr "0 (ΚΑÎΕÎΑ)"
-#: ../cli/src/settings.c:606
+#: ../cli/src/settings.c:756
msgid "REORDER_HEADERS, "
msgstr "REORDER_HEADERS, "
-#: ../cli/src/settings.c:608
+#: ../cli/src/settings.c:758
msgid "GVRP, "
msgstr "GVRP, "
-#: ../cli/src/settings.c:610
+#: ../cli/src/settings.c:760
msgid "LOOSE_BINDING, "
msgstr "LOOSE_BINDING, "
-#: ../cli/src/settings.c:646
+#: ../cli/src/settings.c:796
#, c-format
msgid "%d (disabled)"
msgstr "%d (απενεÏγοποιημένο)"
-#: ../cli/src/settings.c:648
+#: ../cli/src/settings.c:798
#, c-format
msgid "%d (enabled, prefer public IP)"
msgstr "%d (ενεÏγοποιημένο, Ï€Ïοτιμήστε δημόσια διεÏθυνση IP)"
-#: ../cli/src/settings.c:650
+#: ../cli/src/settings.c:800
#, c-format
msgid "%d (enabled, prefer temporary IP)"
msgstr "%d (ενεÏγοποιημένο, Ï€Ïοτιμήστε Ï€ÏοσωÏινή διεÏθυνση IP)"
-#: ../cli/src/settings.c:768 ../cli/src/settings.c:964
-#: ../cli/src/settings.c:1673
+#: ../cli/src/settings.c:812
+#| msgid "(none)"
+msgid "0 (none)"
+msgstr "0 (κανένα)"
+
+#: ../cli/src/settings.c:818
+msgid "agent-owned, "
+msgstr "του διαμεσολαβητή,"
+
+#: ../cli/src/settings.c:820
+msgid "not saved, "
+msgstr "μη αποθηκευμένο, "
+
+#: ../cli/src/settings.c:822
+msgid "not required, "
+msgstr "μη απαιτοÏμενο, "
+
+#: ../cli/src/settings.c:1128
+#| msgid "%d (disabled)"
+msgid "0 (disabled)"
+msgstr "0 (απενεÏγοποιημένο)"
+
+#: ../cli/src/settings.c:1134
+#| msgid "enabled"
+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:103
+#: ../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 "Error: 'nm' command '%s' is not valid."
+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 "Error: '%s' is not valid argument for '%s' option."
+msgid "'%s' is not valid; use <option>=<value>"
+msgstr "το '%s' δεν είναι έγκυÏο· χÏησιμοποιήστε <option>=<value>"
+
+#: ../cli/src/settings.c:2015
+#, c-format
+#| msgid "Error: 'nm' command '%s' is not valid."
+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 field '%s'"
+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 "Error: '%s' is not valid argument for '%s' option."
+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"
+
+#: ../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"
+" [user:]<user name 1>, [user:]<user name 2>,...\n"
+"Τα στοιχεία μποÏοÏν να διαχωÏιστοÏν με κόμματα ή κενά.\n"
+"\n"
+"ΠαÏάδειγμα: Αλίκη ΠέτÏος ΓιώÏγος\n"
+
+#: ../cli/src/settings.c:2431
+#, 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:2475
+#, c-format
+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 "VPN connection failed"
+msgid "'%s' is not a VPN connection profile"
+msgstr "το '%s' δεν είναι μια κατατομή σÏνδεσης VPN"
+
+#: ../cli/src/settings.c:2488
+#, c-format
+msgid "'%s' is not a name of any exiting profile"
+msgstr "το '%s' δεν είναι όνομα οποιασδήποτε υφιστάμενης κατατομής"
+
+#: ../cli/src/settings.c:2522
+#, c-format
+#| msgid "Error: timeout value '%s' is not valid."
+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 ή με ID (όνομα). Το nmcli\n"
+"μεταφÏάζει καθαÏά ονόματα σε UUIDs. Σημειώστε ότι ο NetworkManager "
+"υποστηÏίζει μόνο\n"
+"VPNs ως δευτεÏεÏουσες συνδέσεις Ï€Ïος το παÏόν.\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"
+" <file path> [<password>]\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 ""
+"Εισάγετε ψηφιολέξεις (bytes) ως έναν κατάλογο δεκαεξαδικών τιμών.\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"
+" option = <value>, option = <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: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' δεν είναι έγκυÏο 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 "η ιδιότητα δεν πεÏιέχει τον διακομιστή 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 (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"
+"\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 είναι 'αυτόματα' αυτοί οι διακομιστές DNS Ï€ÏοσαÏτώνται σε "
+"αυτοÏÏ‚ που επιστÏέφονται (αν υπάÏχουν) από την αυτόματη διαμόÏφωση. Οι "
+"διακομιστές DNS δεν μποÏοÏν να χÏησιμοποιηθοÏν με τις μεθόδους διαμόÏφωσης "
+"IPv6 'κοινόχÏηστο' ή 'τοπικός σÏνδεσμος', επειδή δεν υπάÏχει ανοδικό δίκτυο. "
+"Σε όλες τις άλλες τις μεθόδους διαμόÏφωσης 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"
+"\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"
+" option = <value>, option = <value>,...\n"
+"ΈγκυÏες επιλογές είναι: %s\n"
+
+#: ../cli/src/settings.c:4033
+#, c-format
+#| msgid "Error: '%s' is not an active connection."
+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 ή άγνωστο, 1 "
+"ή κλειδί και 2 ή συνθηματικό.\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: '%s' argument is missing."
+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: missing argument for '%s' option."
+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:408
+#, c-format
+msgid "'%s' is ambiguous (on x off)"
+msgstr "το '%s' είναι διφοÏοÏμενο (on x off)"
+
+#: ../cli/src/utils.c:418
+#, c-format
+#| msgid "Error: '%s' is not valid argument for '%s' option."
+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:235
+#: ../cli/src/utils.c:732
#, c-format
-msgid "invalid field '%s'"
-msgstr "μη έγκυÏο πεδίο '%s'"
+#| msgid "Error: 'dev wifi': %s; allowed fields: %s"
+msgid "invalid field '%s'; allowed fields: %s"
+msgstr "άκυÏο πεδίο '%s'· επιτÏεπόμενα πεδία: %s"
-#: ../cli/src/utils.c:254
+#: ../cli/src/utils.c:789
msgid "Option '--terse' requires specifying '--fields'"
msgstr "Η επιλογή '--terse' απαιτεί να καθοÏισθοÏν '--fields'"
-#: ../cli/src/utils.c:258
+#: ../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:468
-#, 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:476
-#, c-format
-msgid "Error: NameHasOwner request failed: %s"
-msgstr "Σφάλμα: Απέτυχε η αίτηση NameHasOwner: %s"
-
-#: ../cli/src/utils.c:521
+#: ../cli/src/utils.c:1112
#, c-format
msgid ""
"Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --"
@@ -1949,7 +5476,7 @@ msgstr ""
"NetworkManager (%s) . ΧÏησιμοποιείστε --nocheck για να εξαφανίσετε την "
"Ï€Ïοειδοποίηση.\n"
-#: ../cli/src/utils.c:530
+#: ../cli/src/utils.c:1121
#, c-format
msgid ""
"Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force "
@@ -1959,6 +5486,62 @@ msgstr ""
"(%s) . Κάντε εξαναγκασμένη εκτέλεση χÏησιμοποιώντας --nocheck, αλλά τα "
"αποτελέσματα είναι απÏόβλεπτα."
+#: ../libnm-glib/nm-device.c:1794
+msgid "Bluetooth"
+msgstr "ΜπλουτοÏθ"
+
+#: ../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 "Bond"
+
+#: ../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"
+msgid "Disconnected by D-Bus"
+msgstr "Αποσυνδέθηκε από τον δίαυλο δεδομένων"
+
#: ../libnm-util/crypto.c:133
#, c-format
msgid "PEM key file had no end tag '%s'."
@@ -1969,123 +5552,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: Δεν βÏέθηκε 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: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
-#, fuzzy
+#: ../libnm-util/crypto.c:285
msgid "Failed to find expected PKCS#8 start tag."
msgstr "Αποτυχία εÏÏεσης της αναμενόμενης ετικέτας αÏχής PKCS#8."
-#: ../libnm-util/crypto.c:292
-#, fuzzy, c-format
+#: ../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 "Το μήκος του IV Ï€Ïέπει να αντιστοιχεί σε άÏτιο αÏιθμό byte."
-#: ../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:368
#, 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: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 "Απέτυχε η αποκωδικοποίηση του πιστοποιητικοÏ."
@@ -2099,107 +5648,95 @@ 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 "Μη έγκυÏο μήκος 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: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 "Απέτυχε ο οÏισμός IV για την αποκÏυπτογÏάφηση: %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 "Απέτυχε να οÏισθεί το IV για την κÏυπτογÏάφηση: %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"
@@ -2214,144 +5751,536 @@ 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 "Μη έγκυÏο μήκος IV (Ï€Ïέπει να είναι τουλάχιστον %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 "Απέτυχε ο οÏισμός IV για την αποκÏυπτογÏάφηση."
-#: ../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 "Απέτυχε ο οÏισμός IV για την κÏυπτογÏάφηση."
-#: ../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:2040
+#: ../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 private key"
+msgstr "άκυÏο ιδιωτικό κλειδί"
+
+#: ../libnm-util/nm-setting-8021x.c:2078
+#| msgid "Failed to decrypt the private key."
+msgid "invalid phase2 private key"
+msgstr "άκυÏο ιδιωτικό κλειδί phase2"
+
+#: ../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 "Error: %s argument is missing."
+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 "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: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 "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:570
+#, 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:583
#, c-format
-msgid "Not enough memory to make encryption key."
-msgstr "Δεν επαÏκεί η μνήμη για την δημιουÏγία ÎºÎ»ÎµÎ¹Î´Î¹Î¿Ï ÎºÏυπτογÏάφησης."
+#| msgid "Error: '%s' is not valid argument for '%s' option."
+msgid "'%s' is not a valid interface name for '%s' option"
+msgstr "το '%s' δεν είναι έγκυÏο όνομα διεπαφής για την επιλογή '%s'"
-#: ../libnm-util/nm-utils.c:2150
-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-utils.c:2162
+#: ../libnm-util/nm-setting-bond.c:606
#, c-format
-msgid "Could not allocate memory for writing IV to PEM file."
-msgstr "Αδυναμία διάθεσης μνήμης για εγγÏαφή του IV στο αÏχείο PEM."
+#| 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-utils.c:2174
+#: ../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 encrypted key to PEM file."
-msgstr ""
-"Αδυναμία διάθεσης μνήμης για εγγÏαφή του κÏυπτογÏαφημένου ÎºÎ»ÎµÎ¹Î´Î¿Ï ÏƒÏ„Î¿ αÏχείο "
-"PEM."
+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 "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: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 "The IP configuration is no longer valid"
+msgid "IPv4 configuration is not allowed for slave"
+msgstr "Η διαμόÏφωση IPv4 δεν επιτÏέπεται για υποτελή"
+
+#: ../libnm-util/nm-setting-connection.c:893
+#| msgid "The IP configuration is no longer valid"
+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 "Η σÏνδεση P_Key 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 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 vs %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-setting-ip6-config.c:834
+#, 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: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-utils.c:2193
+#: ../libnm-util/nm-setting-vlan.c:581
#, 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' δεν είναι οÏτε ένα UUID οÏτε ένα όνομα διεπαφής"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1
+#: ../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"
+msgstr "το '%s' δεν είναι έγκυÏη τιμή θÏÏας έθεÏνετ"
+
+#: ../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 field '%s'"
+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 "Error: Device '%s' is not a Wi-Fi device."
+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"
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)"
@@ -2359,224 +6288,187 @@ msgstr ""
"Θέση της ΔιαχείÏισης δικτÏου σε αδÏάνεια ή ενεÏγοποίησή της (Ï€Ïέπει να "
"χÏησιμοποιείται μόνο από τη διαχείÏιση ενέÏγειας του συστήματος)"
-#: ../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 ""
"Η πολιτική του συστήματος δεν επιτÏέπει να τίθεται η διαχείÏιση δικτÏου σε "
"αδÏάνεια ή να ενεÏγοποιείται."
-#: ../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 "Κοινή χÏήση σÏνδεσης μέσω Ï€Ïοστατευμένου ασÏÏματου δικτÏου"
-#: ../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 ""
"Η πολιτική συστήματος δεν επιτÏέπει κοινή χÏήση συνδέσεων μέσω "
"Ï€Ïοστατευμένου ασÏÏματου δικτÏου"
-#: ../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 "Κοινή χÏήση σÏνδεσης μέσω Î±Î½Î¿Î¹Ï‡Ï„Î¿Ï Î±ÏƒÏÏματου δικτÏου"
-#: ../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 ""
"Η πολιτική συστήματος δεν επιτÏέπει κοινή χÏήση συνδέσεων μέσω Î±Î½Î¿Î¹Ï‡Ï„Î¿Ï "
"ασÏÏματου δικτÏου"
-#: ../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
-#, fuzzy, c-format
+#: ../src/main.c:129
+#, c-format
#| msgid "Failed to encrypt: %d."
msgid "Failed to set signal mask: %d"
msgstr "Αποτυχία οÏÎ¹ÏƒÎ¼Î¿Ï Î¼Î¬ÏƒÎºÎ±Ï‚ σήματος: %d"
-#: ../src/main.c:167
+#: ../src/main.c:138
#, c-format
msgid "Failed to create signal handling thread: %d"
-msgstr ""
+msgstr "Αποτυχία δημιουÏγίας νήματος χειÏÎ¹ÏƒÎ¼Î¿Ï ÏƒÎ®Î¼Î±Ï„Î¿Ï‚: %d"
-#: ../src/main.c:182
+#: ../src/main.c:153
#, c-format
msgid "Opening %s failed: %s\n"
msgstr "Το άνοιγμα του %s απέτυχε:%s\n"
-#: ../src/main.c:188
+#: ../src/main.c:159
#, c-format
msgid "Writing to %s failed: %s\n"
msgstr "Η εγγÏαφή στο %s απέτυχε: %s\n"
-#: ../src/main.c:193
+#: ../src/main.c:164
#, c-format
msgid "Closing %s failed: %s\n"
msgstr "Το κλείσιμο του %s απέτυχε: %s\n"
-#: ../src/main.c:236
+#: ../src/main.c:207
#, c-format
msgid "NetworkManager is already running (pid %ld)\n"
msgstr "Ο NetworkManager εκτελείται ήδη (pid %ld)\n"
-#: ../src/main.c:376
+#: ../src/main.c:360
msgid "Print NetworkManager version and exit"
msgstr "ΠÏοβολή έκδοσης του NetworkManager και έξοδος"
-#: ../src/main.c:377
+#: ../src/main.c:361
msgid "Don't become a daemon"
msgstr "Îα μη γίνει δαίμονας (daemon)"
-#: ../src/main.c:378
+#: ../src/main.c:362
+#| msgid "Don't become a daemon"
+msgid "Don't become a daemon, and log to stderr"
+msgstr "Îα μην γίνει δαίμονας και να συνδεθεί στο τυπικό σφάλμα"
+
+#: ../src/main.c:363
+#, c-format
+#| msgid "Log level: one of [ERR, WARN, INFO, DEBUG]"
+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:379
+#: ../src/main.c:368
msgid "Specify the location of a PID file"
msgstr "ΚαθοÏίστε τη τοποθεσία για το αÏχείο PID"
-#: ../src/main.c:379
+#: ../src/main.c:368
msgid "filename"
msgstr "όνομα αÏχείου"
-#: ../src/main.c:380
+#: ../src/main.c:369
msgid "State file location"
msgstr "Τοποθεσία αÏχείου κατάστασης"
-#: ../src/main.c:380
+#: ../src/main.c:369
msgid "/path/to/state.file"
msgstr "/path/to/state.file"
-#: ../src/main.c:381
-msgid "Config file location"
-msgstr "Τοποθεσία αÏχείου Ïυθμίσεων"
-
-#: ../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
#, c-format
msgid "GModules are not supported on your platform!\n"
msgstr "Τα GModules δεν υποστηÏίζονται στην πλατφόÏμα σας!\n"
+#: ../src/main.c:400
+#, c-format
+msgid "You must be root to run NetworkManager!\n"
+msgstr "ΠÏέπει να είστε υπεÏχÏήστης για να εκτελέσετε το NetworkManager!\n"
+
#: ../src/main.c:423
msgid ""
"NetworkManager monitors all network connections and automatically\n"
@@ -2591,45 +6483,51 @@ msgstr ""
"υπολογιστή\n"
"Ï€Ïέπει να συνδεθοÏν."
-#: ../src/main.c:429
+#: ../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 για να δείτε τη λίστα των "
+"%s. ΠαÏακαλώ χÏησιμοποιήστε την επιλογή --help για να δείτε τη λίστα των "
"έγκυÏων επιλογών.\n"
-#: ../src/main.c:439
+#: ../src/main.c:450
#, c-format
-msgid "You must be root to run NetworkManager!\n"
-msgstr "ΠÏέπει να είστε υπεÏχÏήστης για να εκτελέσετε το NetworkManager!\n"
+msgid "Ignoring unrecognized log domain(s) '%s' passed on command line.\n"
+msgstr "ΠαÏαβλέπονται μη αναγνωÏίσιμοι τομείς σÏνδεσης το '%s' πέÏασε στη γÏαμμή "
+"εντολών.\n"
-#: ../src/main.c:460
+#: ../src/main.c:501
#, c-format
msgid "Failed to read configuration: (%d) %s\n"
msgstr "Αποτυχία ανάγνωσης των Ïυθμίσεων: (%d) %s\n"
-#: ../src/main.c:471
+#: ../src/main.c:515
#, 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:478
+#: ../src/main.c:520
+#, c-format
+msgid "Ignoring unrecognized log domain(s) '%s' from config files.\n"
+msgstr "ΠαÏαβλέπονται μη αναγνωÏίσιμοι τομείς σÏνδεσης το '%s' από τα αÏχεία "
+"Ïυθμίσεων.\n"
+
+#: ../src/main.c:528
#, c-format
msgid "State file %s parsing failed: (%d) %s\n"
msgstr "Απέτυχε η ανάλυση του αÏχείου κατάστασης %s: (%d) %s\n"
-#: ../src/main.c:495
-#, fuzzy, c-format
+#: ../src/main.c:541
+#, c-format
msgid "Could not daemonize: %s [error %u]\n"
-msgstr "Αδυναμία ανοίγματος %s: Άγνωστο σφάλμα"
+msgstr "ΑδÏνατη η δημιουÏγία δαίμονα: %s [σφάλμα %u]\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:62
+#: ../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:69
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:147
#, c-format
msgid ""
"# Merged from %s\n"
@@ -2638,188 +6536,1120 @@ 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:381
+#: ../src/dns-manager/nm-dns-manager.c:385
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr ""
"ΣΗΜΕΙΩΣΗ: Ο libc resolver μποÏεί να μην υποστηÏίζει πεÏισσότεÏους από 3 "
"εξυπηÏετητές ονομάτων."
-#: ../src/dns-manager/nm-dns-manager.c:383
+#: ../src/dns-manager/nm-dns-manager.c:387
msgid "The nameservers listed below may not be recognized."
msgstr "Οι κάτωθι εξυπηÏετητές ονομάτων ίσως να μην αναγνωÏίζονται."
-#: ../src/logging/nm-logging.c:131
+#: ../src/logging/nm-logging.c:150
#, c-format
msgid "Unknown log level '%s'"
msgstr "Άγνωστο επίπεδο καταγÏαφής '%s'"
-#: ../src/logging/nm-logging.c:156
+#: ../src/logging/nm-logging.c:229
#, c-format
msgid "Unknown log domain '%s'"
msgstr "Άγνωστος τομέας καταγÏαφής '%s'"
-#: ../src/modem-manager/nm-modem-cdma.c:279 ../src/nm-device-bt.c:325
-#, 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:547 ../src/nm-device-bt.c:321
-#, c-format
-msgid "GSM connection %d"
-msgstr "ΣÏνδεση GSM %d"
+#: ../src/config/nm-config.c:281
+msgid "/path/to/config.file"
+msgstr "/path/to/config.file"
-#: ../src/nm-device-bond.c:191
-#, c-format
-msgid "Bond connection %d"
-msgstr "ΣÏνδεση Bond %d"
+#: ../src/config/nm-config.c:282
+#| msgid "Config file location"
+msgid "Config directory location"
+msgstr "Τοποθεσία αÏχείου Ïυθμίσεων"
+
+#: ../src/config/nm-config.c:282
+#| msgid "/path/to/config.file"
+msgid "/path/to/config/dir"
+msgstr "/path/to/config/dir"
-#: ../src/nm-device-adsl.c:193
+#: ../src/config/nm-config.c:284
+msgid "List of plugins separated by ','"
+msgstr "Κατάλογος Ï€Ïόσθετων χωÏισμένων με ','"
+
+#: ../src/config/nm-config.c:284
+msgid "plugin1,plugin2"
+msgstr "plugin1,plugin2"
+
+#. 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 "Bingo!"
+
+#: ../src/devices/adsl/nm-device-adsl.c:122
#, c-format
msgid "ADSL connection %d"
msgstr "ΣÏνδεση ADSL %d"
-#: ../src/nm-device-bt.c:296
+#: ../src/devices/bluetooth/nm-bluez-device.c:194
+#, c-format
+msgid "%s Network"
+msgstr "Δίκτυο %s"
+
+#: ../src/devices/bluetooth/nm-device-bt.c:284
#, c-format
msgid "PAN connection %d"
msgstr "ΣÏνδεση PAN %d"
-#: ../src/nm-device-bt.c:329
+#: ../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:1327
+#: ../src/devices/nm-device-bond.c:138 ../tui/nm-editor-utils.c:204
+#, c-format
+msgid "Bond connection %d"
+msgstr "ΣÏνδεση Bond %d"
+
+#: ../src/devices/nm-device-bridge.c:148 ../tui/nm-editor-utils.c:214
+#, c-format
+#| msgid "Bond connection %d"
+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:1327 ../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:303
+#: ../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:303
+#: ../src/devices/nm-device-team.c:152 ../tui/nm-editor-utils.c:223
#, c-format
-msgid "Mesh %d"
-msgstr "Πλέγμα %d"
+#| msgid "Wired connection %d"
+msgid "Team connection %d"
+msgstr "ΣÏνδεση ομάδας %d"
-#: ../src/nm-device-vlan.c:362
+#: ../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:661
+#: ../src/devices/wifi/nm-device-olpc-mesh.c:164
+#, c-format
+msgid "Mesh %d"
+msgstr "Πλέγμα %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:148 ../src/nm-netlink-monitor.c:272
-#: ../src/nm-netlink-monitor.c:695
-#, c-format
-msgid "error processing netlink message: %s"
-msgstr "σφάλμα κατά την επεξεÏγασία μηνÏματος netlink: %s"
+#: ../src/nm-sleep-monitor-systemd.c:116
+#| msgid "NetworkManager status"
+msgid "NetworkManager needs to turn off networks"
+msgstr "Ο NetworkManager χÏειάζεται να απενεÏγοποιήσει τα δίκτυα"
-#: ../src/nm-netlink-monitor.c:251
-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:296
+#: ../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 (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:149
+msgid "Exit immediately if NetworkManager is not running or connecting"
+msgstr "Άμεση έξοδος αν ο NetworkManager δεν εκτελείτε ή δεν συνδέετε"
+
+#: ../test/nm-online.c:150
+msgid "Don't print anything"
+msgstr "Μην εκτυπώσεις τίποτα"
+
+#: ../test/nm-online.c:151
+#| msgid "Exit immediately if NetworkManager is not running or connecting"
+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 ""
+"ΠεÏιμένει ο NetworkManager να ολοκληÏώσει την ενεÏγοποίηση των συνδέσεων του "
+"δικτÏου εκκίνησης."
+
+#: ../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 για να δείτε τη λίστα των "
+"έγκυÏων επιλογών."
-#: ../src/nm-netlink-monitor.c:307
+#: ../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 "Εντάξει"
+
+#: ../tui/newt/nmt-newt-utils.c:327 ../tui/newt/nmt-newt-utils.c:359
#, c-format
-msgid "unable to enable netlink handle credential passing: %s"
-msgstr "unable to enable netlink handle credential passing: %s"
+#| msgid "Could not allocate memory for PEM file data."
+msgid "Could not create temporary file: %s"
+msgstr "ΑδÏνατη η δημιουÏγία Ï€ÏοσωÏÎ¹Î½Î¿Ï Î±Ïχείου: %s"
-#: ../src/nm-netlink-monitor.c:330 ../src/nm-netlink-monitor.c:390
+#: ../tui/newt/nmt-newt-utils.c:367
#, c-format
-msgid "unable to allocate netlink handle for monitoring link status: %s"
-msgstr ""
-"αδÏνατη η δέσμευση χειÏιστή netlink για την παÏακολοÏθηση της κατάστασης της "
-"σÏνδεσης: %s"
+#| msgid "Writing to %s failed: %s\n"
+msgid "Editor failed: %s"
+msgstr "Αποτυχία επεξεÏγασίας: %s"
-#: ../src/nm-netlink-monitor.c:415
+#: ../tui/newt/nmt-newt-utils.c:375
#, c-format
-msgid "unable to allocate netlink link cache for monitoring link status: %s"
-msgstr ""
-"αδÏνατη η εκχώÏηση λανθάνουσας μνήμης στη σÏνδεση netlink για την "
-"παÏακολοÏθηση της κατάστασης της σÏνδεσης δικτÏου: %s"
+msgid "Editor failed with status %d"
+msgstr "Αποτυχία επεξεÏγασίας με την κατάσταση %d"
-#: ../src/nm-netlink-monitor.c:542
+#: ../tui/newt/nmt-newt-utils.c:377
#, c-format
-msgid "unable to join netlink group: %s"
-msgstr "αδÏνατη η σÏνδεση στην ομάδα του netlink: %s"
+msgid "Editor failed with signal %d"
+msgstr "Αποτυχία επεξεÏγασίας με το σήμα %d"
-#: ../src/nm-netlink-monitor.c:671 ../src/nm-netlink-monitor.c:684
+#: ../tui/newt/nmt-newt-utils.c:381
#, c-format
-msgid "error updating link cache: %s"
-msgstr "σφάλμα κατά την ενημέÏωση της λανθάνουσας μνήμης της σÏνδεσης: %s"
+#| msgid "Couldn't decode PKCS#8 file: %s"
+msgid "Could not re-read file: %s"
+msgstr "ΑδÏνατη η επανάγνωση του αÏχείου: %s"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:94
-msgid "System"
-msgstr "ΣÏστημα"
+#: ../tui/nm-editor-utils.c:160
+#, c-format
+#| msgid "Wired connection %d"
+msgid "Ethernet connection %d"
+msgstr "ΣÏνδεση έθεÏνετ %d"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:3641
-msgid "Bond"
-msgstr "Bond"
+#: ../tui/nm-editor-utils.c:168
+#, c-format
+#| msgid "Wired connection %d"
+msgid "Wi-Fi connection %d"
+msgstr "ΑσÏÏματη σÏνδεση %d"
-#: ../test/nm-online.c:112
+#: ../tui/nm-editor-utils.c:185
#, c-format
-msgid "\rConnecting"
-msgstr "\rΓίνεται σÏνδεση"
+#| 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/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 "ΕπεξεÏγασία..."
-#: ../test/nm-online.c:143
-msgid "Time to wait for a connection, in seconds (default is 30)"
+#: ../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 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: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 "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 "ΘΥΡΑ ΓΕΦΥΡΑΣ"
+
+#: ../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 "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"
+msgid "Connected"
+msgstr "Συνδέθηκε"
+
+#: ../tui/nmt-page-infiniband.c:90
+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: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 "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 "ΘΥΡΑ ΟΜΑΔΑΣ"
+
+#: ../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"
+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-bit (δεκαεξαδικό ή 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
+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 "Ανοικτό σÏστημα"
+
+#: ../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 ακόμα...)"
+
+#: ../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 "(Δεν υποστηÏίζεται το δυναμικό 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: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 ""
-"ΧÏόνος που πεÏιμένει για μια σÏνδεση, σε δευτεÏόλεπτα (το Ï€Ïοεπιλεγμένο "
-"είναι 30)"
+"ΑπαιτοÏνται κωδικοί Ï€Ïόσβασης ή κλειδιά κÏυπτογÏάφησης για Ï€Ïόσβαση στο "
+"ασÏÏματο δίκτυο '%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 enabled"
+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 "PIN check failed"
+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:94
+#| msgid "connection failed"
+msgid "Activation failed"
+msgstr "Αποτυχία ενεÏγοποίησης"
-#: ../test/nm-online.c:144
-msgid "Exit immediately if NetworkManager is not running or connecting"
-msgstr "Άμεση έξοδος αν ο NetworkManager δεν εκτελείτε ή δεν συνδέετε"
+#: ../tui/nmtui-connect.c:142
+#| msgid "\rConnecting"
+msgid "Connecting..."
+msgstr "Γίνεται σÏνδεση..."
-#: ../test/nm-online.c:145
-msgid "Don't print anything"
-msgstr "Μην εκτυπώσεις τίποτα"
+#: ../tui/nmtui-connect.c:172 ../tui/nmtui-connect.c:195
+#, c-format
+#| msgid "no active connection on device '%s'"
+msgid "Could not activate connection: %s"
+msgstr "ΑδÏνατη η ενεÏγοποίηση της σÏνδεσης: %s"
-#: ../test/nm-online.c:163
-msgid "Waits for a successful connection in NetworkManager."
-msgstr "ΠεÏιμένει για μια επιτυχής σÏνδεση στο NetworkManager."
+#: ../tui/nmtui-connect.c:259 ../tui/nmtui-connect.c:308
+#| msgid "activated"
+msgid "Activate"
+msgstr "ΕνεÏγοποίηση"
-#: ../test/nm-online.c:169 ../test/nm-online.c:178
-msgid "Invalid option. Please use --help to see a list of valid options."
+#: ../tui/nmtui-connect.c:261
+#| msgid "activated"
+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 "PAN connection %d"
+msgid "No such connection '%s'"
+msgstr "Δεν υπάÏχει τέτοια σÏνδεση '%s'"
+
+#: ../tui/nmtui-connect.c:338
+#| msgid "Connection list"
+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 ""
-"ΆκυÏη επιλογή. ΠαÏακαλώ χÏησιμοποιήστε --help για να δείτε τη λίστα των "
-"έγκυÏων επιλογών."
+"Αν δημιουÏγείτε μια VPN και η σÏνδεση VPN που θέλετε να δημιουÏγήσετε δεν "
+"εμφανίζεται στον κατάλογο, ίσως δεν έχετε εγκατεστημένο το σωστό Ï€Ïόσθετο "
+"VPN."
+
+#: ../tui/nmtui-edit.c:386 ../tui/nmtui-edit.c:402
+#| msgid "\rConnecting"
+msgid "New Connection"
+msgstr "Îέα σÏνδεση"
+
+#: ../tui/nmtui-edit.c:439
+#, c-format
+#| msgid "unable to join netlink group: %s"
+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 "Bond connection %d"
+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 "Failed to encrypt: %d."
+msgid "Unable to set hostname: %s"
+msgstr "Αποτυχία οÏÎ¹ÏƒÎ¼Î¿Ï Î¿Î½ÏŒÎ¼Î±Ï„Î¿Ï‚ οικοδεσπότη: %s"
+
+#: ../tui/nmtui.c:60 ../tui/nmtui.c:63
+#| msgid "connecting"
+msgid "connection"
+msgstr "σÏνδεση"
+
+#: ../tui/nmtui.c:61
+#| msgid "disconnecting"
+msgid "Edit a connection"
+msgstr "ΕπεξεÏγασία σÏνδεσης"
+
+#: ../tui/nmtui.c:64
+#| msgid "Active connections"
+msgid "Activate a connection"
+msgstr "ΕνεÏγοποιήστε μια σÏνδεση"
+
+#: ../tui/nmtui.c:66
+msgid "new hostname"
+msgstr "νέο όνομα οικοδεσπότη"
+
+#: ../tui/nmtui.c:67
+#| msgid "Modify persistent system hostname"
+msgid "Set system hostname"
+msgstr "ΟÏίστε όνομα οικοδεσπότη συστήματος"
+
+#: ../tui/nmtui.c:90
+#| msgid "NetworkManager status"
+msgid "NetworkManager TUI"
+msgstr "TUI του 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 "Error: NetworkManager is not running."
+msgid "NetworkManager is not running."
+msgstr "Ο NetworkManager δεν εκτελείται."
+
+#~ msgid "IP"
+#~ msgstr "IP"
+
+#~ 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 ""
+#~ "ΧÏήση: nmcli con { ΕÎΤΟΛΗ | help }\n"
+#~ " ΕÎΤΟΛΗ := { 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 "Error: 'con list': %s; allowed fields: %s"
+#~ msgstr "Σφάλμα: 'con list': %s; επιτÏεπόμενα πεδία: %s"
+
+#~ msgid "Error: no valid parameter specified."
+#~ msgstr "Σφάλμα: δεν οÏίσθηκε έγκυÏη παÏάμετÏος."
+
+#~ msgid "Error: 'con status': %s"
+#~ msgstr "Σφάλμα: 'con status': %s"
+
+#~ msgid "Error: Can't find out if NetworkManager is running: %s."
+#~ msgstr "Σφάλμα: Δεν μπόÏεσε να μάθει αν Ï„Ïέχει ο NetworkManager: %s."
+
+#~ msgid "Error: unknown parameter: %s"
+#~ msgstr "Σφάλμα: άγνωστη παÏάμετÏος: %s"
+
+#~ msgid "Error: id or uuid has to be specified."
+#~ msgstr "Σφάλμα: Ï€Ïέπει να καθοÏισθεί id ή uuid "
+
+#~ msgid "Error: No suitable device found: %s."
+#~ msgstr "Σφάλμα: Δεν βÏέθηκε κατάλληλη συσκευή: %s."
+
+#~ msgid "Error: No suitable device found."
+#~ msgstr "Σφάλμα: Δεν βÏέθηκε κατάλληλη συσκευή."
+
+#~ 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: 'dev list': %s; allowed fields: %s"
+#~ msgstr "Σφάλμα: 'dev list': %s, επιτÏεπόμενα πεδία: %s"
+
+#~ msgid "not connected"
+#~ msgstr "δε συνδέθηκε"
+
+#~ msgid "Error: 'dev status': %s; allowed fields: %s"
+#~ msgstr "Σφάλμα: 'dev status': %s, επιτÏεπόμενα πεδία: %s"
+
+#~ msgid "Error: Device '%s' is not a WiFi device."
+#~ msgstr "Σφάλμα: Η συσκευή '%s' δεν είναι συσκευή WiFi."
+
+#~ msgid "Error: 'dev wimax': %s; allowed fields: %s"
+#~ msgstr "Σφάλμα: 'dev wimax': %s, επιτÏεπόμενα πεδία: %s"
+
+#~ msgid "NET-ENABLED"
+#~ msgstr "NET-ENABLED"
+
+#~ msgid "WIFI-HARDWARE"
+#~ msgstr "ΥΛΙΚΟ WIFI"
+
+#~ msgid "WWAN-HARDWARE"
+#~ msgstr "ΥΛΙΚΟ WWAN"
+
+#~ msgid "WIMAX-HARDWARE"
+#~ msgstr "ΥΛΙΚΟ-WIMAX"
+
+#~ msgid "Error: 'nm status': %s; allowed fields: %s"
+#~ msgstr "Σφάλμα: 'nm status': %s, επιτÏεπόμενα πεδία: %s"
+
+#~ msgid "Error: 'nm permissions': %s; allowed fields: %s"
+#~ msgstr "Σφάλμα: 'nm permissions': %s; επιτÏεπόμενα πεδία: %s"
-#~ msgid "SCOPE"
-#~ msgstr "ΕΥΡΟΣ"
+#~ msgid "Error: Couldn't connect to system bus: %s"
+#~ msgstr "Σφάλμα: Αδυναμία σÏνδεσης στο δίαυλο συστήματος: %s"
-#~ msgid "DBUS-SERVICE"
-#~ msgstr "ΥΠΗΡΕΣΙΑ DBUS"
+#~ msgid "Error: Couldn't create D-Bus object proxy."
+#~ msgstr "Σφάλμα: Αδυναμία δημιουÏγίας αντικειμένου διαμεσολαβητή του D-Bus."
diff --git a/po/en_GB.po b/po/en_GB.po
index 3997ed51f..f1dea3f93 100644
--- a/po/en_GB.po
+++ b/po/en_GB.po
@@ -2469,8 +2469,8 @@ 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 "Log level: one of [ERR, WARN, INFO, DEBUG]"
+msgid "Log level: one of [ERR, WARN, INFO, DEBUG, TRACE]"
+msgstr "Log level: one of [ERR, WARN, INFO, DEBUG, TRACE]"
#. Translators: Do not translate the values in the square brackets
#: ../src/main.c:387
diff --git a/po/eo.po b/po/eo.po
index c466a5d20..51fceb9ee 100644
--- a/po/eo.po
+++ b/po/eo.po
@@ -2321,7 +2321,7 @@ msgstr ""
#. Translators: Do not translate the values in the square brackets
#: ../src/main.c:376
-msgid "Log level: one of [ERR, WARN, INFO, DEBUG]"
+msgid "Log level: one of [ERR, WARN, INFO, DEBUG, TRACE]"
msgstr ""
#. Translators: Do not translate the values in the square brackets
diff --git a/po/es.po b/po/es.po
index 7b725298b..1a8b589e5 100644
--- a/po/es.po
+++ b/po/es.po
@@ -10,1001 +10,3492 @@
# Gladys Guerrero <gguerrer@redhat.com>, 2010.
# Jorge González <jorgegonz@svn.gnome.org>, 2007, 2008, 2010, 2011.
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2012.
-#
+# gguerrer <gguerrer@redhat.com>, 2013. #zanata
+# gguerrer <gguerrer@redhat.com>, 2014. #zanata
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: 2011-09-24 03:25+0000\n"
-"PO-Revision-Date: 2012-06-28 13:05+0200\n"
-"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
+"POT-Creation-Date: 2014-01-23 17:13+0530\n"
+"PO-Revision-Date: 2014-01-29 11:34-0500\n"
+"Last-Translator: gguerrer <gguerrer@redhat.com>\n"
"Language-Team: Español <gnome-es-list@gnome.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Gtranslator 2.91.5\n"
+"X-Generator: Zanata 3.2.3\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Language: es\n"
+
+# auto translated by TM merge from project: gnome-search-tool, version: 3.4.0, DocId: gnome-search-tool
+#: ../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"
+
+#: ../cli/src/common.c:35 ../cli/src/common.c:55
+msgid "ADDRESS"
+msgstr "DIRECCIÓN"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:36 ../cli/src/common.c:56
+msgid "ROUTE"
+msgstr "RUTA"
+
+#: ../cli/src/common.c:37 ../cli/src/common.c:57
+msgid "DNS"
+msgstr "DNS"
+
+#: ../cli/src/common.c:38 ../cli/src/common.c:58
+msgid "DOMAIN"
+msgstr "DOMINIO"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:39
+msgid "WINS"
+msgstr "WINS"
+
+#: ../cli/src/common.c:47 ../cli/src/common.c:66
+msgid "OPTION"
+msgstr "OPCIÓN"
+
+#: ../cli/src/common.c:404 ../cli/src/settings.c:2808
+#, c-format
+msgid "invalid IPv4 address '%s'"
+msgstr "Formato de dirección IPv4 inválido '%s'"
+
+#: ../cli/src/common.c:412
+#, c-format
+msgid "invalid prefix '%s'; <1-32> allowed"
+msgstr "Prefijo inválido '%s'; <1-32> permitido"
+
+#: ../cli/src/common.c:419 ../cli/src/common.c:472
+#, c-format
+msgid "invalid gateway '%s'"
+msgstr "Puerta de enlace inválida '%s'"
+
+#: ../cli/src/common.c:457 ../cli/src/settings.c:3054
+#, c-format
+msgid "invalid IPv6 address '%s'"
+msgstr "Dirección IPv4 inválida '%s'"
+
+#: ../cli/src/common.c:465
+#, c-format
+msgid "invalid prefix '%s'; <1-128> allowed"
+msgstr "Prefijo inválido '%s'; <1-128> permitido"
+
+#: ../cli/src/common.c:512
+#, c-format
+msgid "invalid IPv4 route '%s'"
+msgstr "Ruta IPv4 inválida '%s'"
+
+#: ../cli/src/common.c:520
+#, c-format
+msgid "invalid prefix '%s'; <0-32> allowed"
+msgstr "Prefijo inválido '%s'; <0-32> permitido"
+
+#: ../cli/src/common.c:527 ../cli/src/common.c:590
+#, c-format
+msgid "invalid next hop address '%s'"
+msgstr "Siguiente dirección de salto inválida '%s'"
+
+#: ../cli/src/common.c:534 ../cli/src/common.c:598
+#, c-format
+msgid "invalid metric '%s'"
+msgstr "Métrica inválida '%s'"
+
+#: ../cli/src/common.c:575
+#, c-format
+msgid "invalid IPv6 route '%s'"
+msgstr "Ruta IPv6 inválida '%s'"
+
+#: ../cli/src/common.c:583
+#, c-format
+msgid "invalid prefix '%s'; <0-128> allowed"
+msgstr "Prefijo inválido '%s'; <0-128> permitido"
+
+#: ../cli/src/common.c:619
+msgid "unmanaged"
+msgstr "sin gestión"
+
+#: ../cli/src/common.c:621
+msgid "unavailable"
+msgstr "no disponible"
+
+#: ../cli/src/common.c:623 ../cli/src/network-manager.c:276
+msgid "disconnected"
+msgstr "desconectado"
+
+#: ../cli/src/common.c:625
+msgid "connecting (prepare)"
+msgstr "conectando (preparar)"
+
+#: ../cli/src/common.c:627
+msgid "connecting (configuring)"
+msgstr "conectando (configurando)"
+
+#: ../cli/src/common.c:629
+msgid "connecting (need authentication)"
+msgstr "conectando (necesita autenticación)"
+
+#: ../cli/src/common.c:631
+msgid "connecting (getting IP configuration)"
+msgstr "conectando (obteniendo configuración IP)"
+
+#: ../cli/src/common.c:633
+msgid "connecting (checking IP connectivity)"
+msgstr "conectando (comprobando conectividad IP)"
+
+#: ../cli/src/common.c:635
+msgid "connecting (starting secondary connections)"
+msgstr "conectando (iniciando conexiones secundarias)"
+
+#: ../cli/src/common.c:637 ../cli/src/network-manager.c:272
+msgid "connected"
+msgstr "conectado"
+
+#: ../cli/src/common.c:639 ../cli/src/connections.c:732
+msgid "deactivating"
+msgstr "desactivando"
+
+#: ../cli/src/common.c:641
+msgid "connection failed"
+msgstr "conexión falló"
+
+#: ../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 "desconocido"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:652
+msgid "No reason given"
+msgstr "No se ha dado ninguna razón"
-#: ../cli/src/connections.c:64 ../cli/src/connections.c:78
-#: ../cli/src/devices.c:101 ../cli/src/devices.c:114 ../cli/src/devices.c:124
-#: ../cli/src/devices.c:134 ../cli/src/devices.c:148 ../cli/src/devices.c:162
-#: ../cli/src/devices.c:173 ../cli/src/devices.c:184 ../cli/src/devices.c:193
-#: ../cli/src/devices.c:202 ../cli/src/devices.c:224
+# auto translated by TM merge from project: evolution-mapi, version: el6, DocId: evolution-mapi
+#: ../cli/src/common.c:655 ../cli/src/connections.c:2258
+#, c-format
+msgid "Unknown error"
+msgstr "Error desconocido"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:658
+msgid "Device is now managed"
+msgstr "El dispositivo es administrado ahora"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:661
+msgid "Device is now unmanaged"
+msgstr "El dispositivo no es administrado ahora"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:664
+msgid "The device could not be readied for configuration"
+msgstr "No se pudo alistar el dispositivo para configuración"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:667
+msgid ""
+"IP configuration could not be reserved (no available address, timeout, etc.)"
+msgstr ""
+"Configuración IP no se pudo reservar (no hay direcciones disponibles, tiempo "
+"de espera, etc."
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:670
+msgid "The IP configuration is no longer valid"
+msgstr "La configuración IP ya no es válida"
+
+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0
+#: ../cli/src/common.c:673
+msgid "Secrets were required, but not provided"
+msgstr "Se necesitan secretos, pero no se han proporcionado"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:676
+msgid "802.1X supplicant disconnected"
+msgstr "Suplicante de 802.1x desconectado"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:679
+msgid "802.1X supplicant configuration failed"
+msgstr "Falló la configuración del suplicante de 802.1X"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:682
+msgid "802.1X supplicant failed"
+msgstr "Falló el suplicante de 802.1X"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:685
+msgid "802.1X supplicant took too long to authenticate"
+msgstr "El suplicante de 802.1X tardó mucho tiempo en autenticarse"
+
+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0
+#: ../cli/src/common.c:688
+msgid "PPP service failed to start"
+msgstr "FalloÌ al iniciar el servicio de PPP"
+
+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0
+#: ../cli/src/common.c:691
+msgid "PPP service disconnected"
+msgstr "Servicio PPP desconectado"
+
+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0
+#: ../cli/src/common.c:694
+msgid "PPP failed"
+msgstr "PPP falló"
+
+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0
+#: ../cli/src/common.c:697
+msgid "DHCP client failed to start"
+msgstr "Falló al iniciar el cliente de DHCP"
+
+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0
+#: ../cli/src/common.c:700
+msgid "DHCP client error"
+msgstr "Error del cliente de DHCP"
+
+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0
+#: ../cli/src/common.c:703
+msgid "DHCP client failed"
+msgstr "Falló el cliente de DHCP"
+
+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0
+#: ../cli/src/common.c:706
+msgid "Shared connection service failed to start"
+msgstr "Falló al iniciar el servicio de conexión compartida"
+
+#: ../cli/src/common.c:709
+msgid "Shared connection service failed"
+msgstr "Falló el servicio de conexión compartida"
+
+#: ../cli/src/common.c:712
+msgid "AutoIP service failed to start"
+msgstr "Falló al iniciar el servicio de AutoIP"
+
+#: ../cli/src/common.c:715
+msgid "AutoIP service error"
+msgstr "Error del servicio de AutoIP"
+
+#: ../cli/src/common.c:718
+msgid "AutoIP service failed"
+msgstr "FalloÌ el servicio AutoIP"
+
+#: ../cli/src/common.c:721
+msgid "The line is busy"
+msgstr "La línea está ocupada"
+
+#: ../cli/src/common.c:724
+msgid "No dial tone"
+msgstr "No hay tono de llamada"
+
+#: ../cli/src/common.c:727
+msgid "No carrier could be established"
+msgstr "No se pudo establecer proveedor del servicio"
+
+#: ../cli/src/common.c:730
+msgid "The dialing request timed out"
+msgstr "El tiempo de la solicitud de marcado ha expirado"
+
+#: ../cli/src/common.c:733
+msgid "The dialing attempt failed"
+msgstr "El intento de marcado falló"
+
+#: ../cli/src/common.c:736
+msgid "Modem initialization failed"
+msgstr "FalloÌ la inicialización del módem"
+
+#: ../cli/src/common.c:739
+msgid "Failed to select the specified APN"
+msgstr "FalloÌ al seleccionar el NPA especificado"
+
+#: ../cli/src/common.c:742
+msgid "Not searching for networks"
+msgstr "No se están buscando redes"
+
+#: ../cli/src/common.c:745
+msgid "Network registration denied"
+msgstr "Registro de red denegado"
+
+#: ../cli/src/common.c:748
+msgid "Network registration timed out"
+msgstr "ExpiroÌ el tiempo de registro de la red"
+
+#: ../cli/src/common.c:751
+msgid "Failed to register with the requested network"
+msgstr "Falló al registrarse con la red solicitada"
+
+#: ../cli/src/common.c:754
+msgid "PIN check failed"
+msgstr "FalloÌ"
+
+#: ../cli/src/common.c:757
+msgid "Necessary firmware for the device may be missing"
+msgstr "El Firmware necesario para el dispositivo puede estar faltando "
+
+#: ../cli/src/common.c:760
+msgid "The device was removed"
+msgstr "El dispositivo fue retirado"
+
+#: ../cli/src/common.c:763
+msgid "NetworkManager went to sleep"
+msgstr "NetworkManager se fue a dormir"
+
+#: ../cli/src/common.c:766
+msgid "The device's active connection disappeared"
+msgstr "La conexión activa del dispositivo desapareció"
+
+#: ../cli/src/common.c:769
+msgid "Device disconnected by user or client"
+msgstr "Dispositivo desconectado por el usuario o cliente"
+
+#: ../cli/src/common.c:772
+msgid "Carrier/link changed"
+msgstr "Proveedor del servicio o enlace cambiados"
+
+#: ../cli/src/common.c:775
+msgid "The device's existing connection was assumed"
+msgstr "Se supuso una conexión del dispositivo disponible"
+
+#: ../cli/src/common.c:778
+msgid "The supplicant is now available"
+msgstr "El suplicante ahora está disponible"
+
+#: ../cli/src/common.c:781
+msgid "The modem could not be found"
+msgstr "No se pudo encontrar el módem "
+
+#: ../cli/src/common.c:784
+msgid "The Bluetooth connection failed or timed out"
+msgstr "La conexión de Bluetooth falló o expiró"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:787
+msgid "GSM Modem's SIM card not inserted"
+msgstr "La tarjeta SIM del módem GSM no está insertada"
+
+#: ../cli/src/common.c:790
+msgid "GSM Modem's SIM PIN required"
+msgstr "Se requiere el PIN de SIM del módem GSM"
+
+#: ../cli/src/common.c:793
+msgid "GSM Modem's SIM PUK required"
+msgstr "Se requiere el PUK de SIM del módem GSM"
+
+#: ../cli/src/common.c:796
+msgid "GSM Modem's SIM wrong"
+msgstr "El SIM del módem GSM está errado"
+
+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0
+#: ../cli/src/common.c:799
+msgid "InfiniBand device does not support connected mode"
+msgstr "El dispositivo InfiniBand no soporta el modo conectado"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:802
+msgid "A dependency of the connection failed"
+msgstr "Falló una dependencia de la conexión "
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:805
+msgid "A problem with the RFC 2684 Ethernet over ADSL bridge"
+msgstr "Hay un problema con Ethernet 2684 RFC en el puente ADSL"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:808
+msgid "ModemManager is unavailable"
+msgstr "MódemManager no está disponible"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:811
+msgid "The Wi-Fi network could not be found"
+msgstr "No se encontró la red de Wi-Fi"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:814
+msgid "A secondary connection of the base connection failed"
+msgstr "Falló una conexión secundaria de la conexión de base"
+
+#: ../cli/src/common.c:817
+msgid "DCB or FCoE setup failed"
+msgstr "Falló la confiuración de DCB o FCoE"
+
+#: ../cli/src/common.c:820
+msgid "teamd control failed"
+msgstr "Falló el control teamd"
+
+#: ../cli/src/common.c:824 ../cli/src/devices.c:634 ../tui/nm-ui-utils.c:359
+msgid "Unknown"
+msgstr "desconocido"
+
+#: ../cli/src/common.c:866
+#, c-format
+msgid "invalid priority map '%s'"
+msgstr "Mapa de prioridad inválido '%s'"
+
+#: ../cli/src/common.c:873 ../cli/src/common.c:879
+#, c-format
+msgid "priority '%s' is not valid (<0-%ld>)"
+msgstr "Prioridad '%s' no es válida (<0-%ld>)"
+
+#: ../cli/src/common.c:935
+#, c-format
+msgid "'%s' is not a valid team configuration or file name."
+msgstr ""
+"'%s' no es una configuración de un equipo o nombre de archivo válidos."
+
+#: ../cli/src/connections.c:62
+msgid "Setting name? "
+msgstr "¿Establecimiento de permisos?"
+
+#: ../cli/src/connections.c:63
+msgid "Property name? "
+msgstr "¿Nombre de propiedad? "
+
+#: ../cli/src/connections.c:64
+msgid "Enter connection type: "
+msgstr "Ingrese el tipo de conexión:"
+
+#: ../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 "NOMBRE"
-#. 0
-#: ../cli/src/connections.c:65 ../cli/src/connections.c:79
+#: ../cli/src/connections.c:69 ../cli/src/connections.c:176
msgid "UUID"
msgstr "UUID"
-#. 1
-#: ../cli/src/connections.c:66
+#: ../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"
+
+#: ../cli/src/connections.c:71
+msgid "TIMESTAMP"
+msgstr "MARCA DE TIEMPO"
+
+#: ../cli/src/connections.c:72
+msgid "TIMESTAMP-REAL"
+msgstr "MARCA DE TIEMPO-REAL"
+
+#: ../cli/src/connections.c:73 ../cli/src/devices.c:101
+msgid "AUTOCONNECT"
+msgstr "AUTOCONECTAR"
+
+#: ../cli/src/connections.c:74
+msgid "READONLY"
+msgstr "SÓLOLECTURA"
+
+#: ../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 "RUTA-DBUS"
+
+#: ../cli/src/connections.c:177
msgid "DEVICES"
msgstr "DISPOSITIVOS"
-#. 2
-#: ../cli/src/connections.c:67
+#: ../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"
+
+#: ../cli/src/connections.c:179
msgid "DEFAULT"
msgstr "PREDETERMINADO"
-#. 3
-#: ../cli/src/connections.c:68
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/connections.c:180
+msgid "DEFAULT6"
+msgstr "PREDETERMINADO6"
+
+#: ../cli/src/connections.c:181
msgid "SPEC-OBJECT"
msgstr "OBJETO SPEC"
-#. 4
-#: ../cli/src/connections.c:69
+#: ../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"
-#. 5
-#. 6
-#. 2
-#. 11
-#. 5
-#: ../cli/src/connections.c:70 ../cli/src/connections.c:85
-#: ../cli/src/devices.c:69 ../cli/src/devices.c:214 ../cli/src/devices.c:230
-msgid "DBUS-PATH"
-msgstr "RUTA-DBUS"
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/connections.c:184 ../cli/src/devices.c:77
+#: ../cli/src/devices.c:105
+msgid "CON-PATH"
+msgstr "CON-RUTA"
-#. 1
-#. 0
-#. 1
-#. 2
-#: ../cli/src/connections.c:80 ../cli/src/devices.c:67
-#: ../cli/src/devices.c:103 ../cli/src/devices.c:227
-msgid "TYPE"
-msgstr "TIPO"
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/connections.c:185
+msgid "ZONE"
+msgstr "ZONA"
-#. 2
-#: ../cli/src/connections.c:81
-msgid "TIMESTAMP"
-msgstr "MARCA DE TIEMPO"
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/connections.c:186
+msgid "MASTER-PATH"
+msgstr "MASTER-RUTA"
-#. 3
-#: ../cli/src/connections.c:82
-msgid "TIMESTAMP-REAL"
-msgstr "MARCA DE TIEMPO-REAL"
+#: ../cli/src/connections.c:202
+msgid "USERNAME"
+msgstr "Nombre de usuario"
-#. 4
-#: ../cli/src/connections.c:83
-msgid "AUTOCONNECT"
-msgstr "AUTOCONECTAR"
+#: ../cli/src/connections.c:203
+msgid "GATEWAY"
+msgstr "PUERTA DE ENLACE"
-#. 5
-#: ../cli/src/connections.c:84
-msgid "READONLY"
-msgstr "SÓLOLECTURA"
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/connections.c:204
+msgid "BANNER"
+msgstr "INDICADOR"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/connections.c:205
+msgid "VPN-STATE"
+msgstr "ESTADO-VPN"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/connections.c:206
+msgid "CFG"
+msgstr "CFG"
-#: ../cli/src/connections.c:153
+#: ../cli/src/connections.c:219 ../cli/src/devices.c:236
+msgid "GENERAL"
+msgstr "GENERAL"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/connections.c:220 ../cli/src/devices.c:243
+msgid "IP4"
+msgstr "IP4"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../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>]\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] [--"
-#| "timeout <timeout>]\n"
-#| " down id <id> | uuid <id>\n"
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 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"
-" 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"
msgstr ""
-"Uso: nmcli con { COMANDO | help }\n"
-" COMANDO := { list | status | up | down | delete }\n"
+"Uso: nmcli connection { COMMAND | help }\n"
+"\n"
+"COMANDO := { 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"
-" 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] [--timeout "
-"<timeout>]\n"
-" down id <id> | uuid <id>\n"
-" delete id <id> | uuid <id>\n"
-#: ../cli/src/connections.c:208 ../cli/src/connections.c:532
+#: ../cli/src/connections.c:278
#, c-format
-msgid "Error: 'con list': %s"
-msgstr "Error: «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: nmcli connection show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTOS := active [[id | uuid | path | apath] <ID>]\n"
+"\n"
+"Mostrar conexiones que actualmente son utilizadas por un dispositivo para "
+"conectarse a una red.\n"
+"Sin un parámetro todas las conexiones activas aparecen. Cuando <ID> se "
+"proporciona, la información de conexión\n"
+"se muestra en su lugar.\n"
+"\n"
+"ARGUMENTOS := configured [[id | uuid | path] <ID>]\n"
+"\n"
+"Mostrar las conexiones en memoria y en disco, algunas de las cuales pueden "
+"también activarse si\n"
+"un dispositivo está utilizando ese perfil de conexión. Sin un parámetro, "
+"todos los perfiles\n"
+"se listan. Cuando se proporciona <ID>, la información de perfil se despliega "
+"en su lugar.\n"
+"\n"
-#: ../cli/src/connections.c:210 ../cli/src/connections.c:534
+#: ../cli/src/connections.c:297
#, c-format
-msgid "Error: 'con list': %s; allowed fields: %s"
-msgstr "Error: «con list»: %s; campos permitidos: %s"
-
-#: ../cli/src/connections.c:218
-msgid "Connection details"
-msgstr "Detalles de conexiones"
-
-#: ../cli/src/connections.c:407
-msgid "never"
-msgstr "nunca"
-
-#. "CAPABILITIES"
-#. Print header
-#. "WIFI-PROPERTIES"
-#: ../cli/src/connections.c:408 ../cli/src/connections.c:409
-#: ../cli/src/connections.c:587 ../cli/src/connections.c:589
-#: ../cli/src/devices.c:499 ../cli/src/devices.c:552 ../cli/src/devices.c:677
-#: ../cli/src/devices.c:703 ../cli/src/devices.c:704 ../cli/src/devices.c:705
-#: ../cli/src/devices.c:706 ../cli/src/devices.c:707 ../cli/src/settings.c:560
-#: ../cli/src/settings.c:632 ../cli/src/settings.c:753
-#: ../cli/src/settings.c:1041 ../cli/src/settings.c:1042
-#: ../cli/src/settings.c:1044 ../cli/src/settings.c:1046
-#: ../cli/src/settings.c:1047 ../cli/src/settings.c:1177
-#: ../cli/src/settings.c:1178 ../cli/src/settings.c:1179
-#: ../cli/src/settings.c:1180 ../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:1268 ../cli/src/settings.c:1269
-#: ../cli/src/settings.c:1270 ../cli/src/settings.c:1271
-#: ../cli/src/settings.c:1346
-msgid "yes"
-msgstr "sí"
-
-#: ../cli/src/connections.c:408 ../cli/src/connections.c:409
-#: ../cli/src/connections.c:587 ../cli/src/connections.c:589
-#: ../cli/src/devices.c:499 ../cli/src/devices.c:552 ../cli/src/devices.c:677
-#: ../cli/src/devices.c:703 ../cli/src/devices.c:704 ../cli/src/devices.c:705
-#: ../cli/src/devices.c:706 ../cli/src/devices.c:707 ../cli/src/settings.c:560
-#: ../cli/src/settings.c:562 ../cli/src/settings.c:632
-#: ../cli/src/settings.c:753 ../cli/src/settings.c:1041
-#: ../cli/src/settings.c:1042 ../cli/src/settings.c:1044
-#: ../cli/src/settings.c:1046 ../cli/src/settings.c:1047
-#: ../cli/src/settings.c:1177 ../cli/src/settings.c:1178
-#: ../cli/src/settings.c:1179 ../cli/src/settings.c:1180
-#: ../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:1268
-#: ../cli/src/settings.c:1269 ../cli/src/settings.c:1270
-#: ../cli/src/settings.c:1271 ../cli/src/settings.c:1346
-msgid "no"
-msgstr "no"
-
-#: ../cli/src/connections.c:483
-msgid "Connection list"
-msgstr "Lista de conexiones"
+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: nmcli connection up { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTOS := [id | uuid | path] <ID> [ifname <ifname>] [ap <BSSID>] [nsp "
+"<name>]\n"
+"\n"
+"Activar una conexión en un dispositivo. El perfil para activar es "
+"identificado por su \n"
+"nombre, UUID o ruta D-Bus.\n"
+"\n"
+"ARGUMENTOS := ifname <ifname> [ap <BSSID>] [nsp <name>]\n"
+"\n"
+"Activar un dispositivo con una conexión. El perfil de conexión es "
+"seleccionado de forma automática por NetworkManager\n"
+" \n"
+"\n"
+"ifname - especifica el dispositivo para activar la conexión\n"
+"ap - especifica AP para conectarse a (únicamente válido para Wi-Fi)\n"
+"nsp - especifica NSP para conectarse a (únicamente válido para WiMAX)\n"
+"\n"
-#: ../cli/src/connections.c:496 ../cli/src/connections.c:1356
-#: ../cli/src/connections.c:1371 ../cli/src/connections.c:1380
-#: ../cli/src/connections.c:1390 ../cli/src/connections.c:1402
-#: ../cli/src/connections.c:1497 ../cli/src/connections.c:1580
-#: ../cli/src/devices.c:1180 ../cli/src/devices.c:1190
-#: ../cli/src/devices.c:1304 ../cli/src/devices.c:1312
-#: ../cli/src/devices.c:1525 ../cli/src/devices.c:1532
+#: ../cli/src/connections.c:318
#, c-format
-msgid "Error: %s argument is missing."
-msgstr "Error: falta el argumento %s."
+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: nmcli connection down { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTOS := [id | uuid | path | apath] <ID>\n"
+"\n"
+"Desactivar una conexión de un dispositivo (sin evitar que el dispositivo se "
+"active\n"
+"más adelante). El perfil para desactivar es identificado por su nombre,\n"
+"UUID o ruta D-Bus.\n"
+"\n"
-#: ../cli/src/connections.c:509
+#: ../cli/src/connections.c:331
#, c-format
-msgid "Error: %s - no such connection."
-msgstr "Error: %s - no hay tal conexió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 ""
+"Uso: nmcli connection add { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTOS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" OPCIONES COMUNES:\n"
+" type <type>\n"
+" ifname <interface name> | \"*\"\n"
+" [con-name <connection name>]\n"
+" [autoconnect yes|no]\n"
+"\n"
+" OPCIONES DE TIPO ESPECÃFICAS:\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:515 ../cli/src/connections.c:1415
-#: ../cli/src/connections.c:1514 ../cli/src/connections.c:1587
-#: ../cli/src/devices.c:977 ../cli/src/devices.c:1057
-#: ../cli/src/devices.c:1204 ../cli/src/devices.c:1318
-#: ../cli/src/devices.c:1538
+#: ../cli/src/connections.c:408
#, c-format
-msgid "Unknown parameter: %s\n"
-msgstr "Parámetro desconocido: %s\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 ""
+"Uso: nmcli connection modify { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTOS := [id | uuid | path] <ID> <setting name>.<property name> "
+"[<value>]\n"
+"\n"
+"Modificar una propiedad individual en el perfil de conexión.\n"
+"El perfil es identificado por su nombre, UUID o ruta D-Bus.\n"
+"\n"
-#: ../cli/src/connections.c:524
+#: ../cli/src/connections.c:420
#, c-format
-msgid "Error: no valid parameter specified."
-msgstr "Error: no se especificó un parámetro válido."
+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: nmcli connection edit { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTOS := [id | uuid | path] <ID>\n"
+"\n"
+"Modificar un perfil de conexión existente en un editor interactivo.\n"
+"El perfil es identificado por su nombre, UUID o ruta D-Bus\n"
+"\n"
+"ARGUMENTOS := [type <new connection type>] [con-name <new connection name>]\n"
+"\n"
+"Añadir un nuevo perfil de conexión en un editor interactivo.\n"
+"\n"
-#: ../cli/src/connections.c:539 ../cli/src/connections.c:1668
-#: ../cli/src/devices.c:1746 ../cli/src/network-manager.c:456
+#: ../cli/src/connections.c:436
#, c-format
-msgid "Error: %s."
-msgstr "Error: %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: nmcli connection delete { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTOS := [id | uuid | path] <ID>\n"
+"\n"
+"Borrar un perfil de conexión.\n"
+"El perfil es identificado por su nombre, UUID o ruta D-Bus.\n"
+"\n"
-#: ../cli/src/connections.c:627
+#: ../cli/src/connections.c:448
#, c-format
-msgid "Error: 'con status': %s"
-msgstr "Error: «con status»: %s"
+msgid ""
+"Usage: nmcli connection reload { help }\n"
+"\n"
+"Reload all connection files from disk.\n"
+"\n"
+msgstr ""
+"Uso: nmcli connection reload { help }\n"
+"\n"
+"Recargar todos los archivos de conexión desde el disco.\n"
+"\n"
-#: ../cli/src/connections.c:629
+#: ../cli/src/connections.c:457
#, c-format
-msgid "Error: 'con status': %s; allowed fields: %s"
-msgstr "Error: «con status»: %s; campos permitidos: %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 ""
+"Uso: nmcli connection load { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTOS := <filename> [<filename>...]\n"
+"\n"
+"Cargar o Recargar uno o más archivos de conexión del disco. Uselo después de "
+"modificar de forma manual \n"
+"un archivo de conexión para garantizar que NetworkManager está al tanto del "
+"último\n"
+"estado.\n"
+"\n"
-#: ../cli/src/connections.c:637 ../cli/src/connections.c:1430
-#: ../cli/src/connections.c:1529 ../cli/src/connections.c:1601
-#: ../cli/src/devices.c:1004 ../cli/src/devices.c:1066
-#: ../cli/src/devices.c:1219 ../cli/src/devices.c:1348
-#: ../cli/src/devices.c:1567
+#: ../cli/src/connections.c:515
#, c-format
-msgid "Error: Can't find out if NetworkManager is running: %s."
-msgstr "Error: no se puede saber si NetworkManager se está ejecutando: %s."
+msgid "Error: 'list configured': %s"
+msgstr "Error: 'lista configurada': %s"
-#: ../cli/src/connections.c:641 ../cli/src/connections.c:1434
-#: ../cli/src/connections.c:1533 ../cli/src/connections.c:1605
-#: ../cli/src/devices.c:1008 ../cli/src/devices.c:1070
-#: ../cli/src/devices.c:1223 ../cli/src/devices.c:1352
-#: ../cli/src/devices.c:1571
-#, c-format
-msgid "Error: NetworkManager is not running."
-msgstr "Error: NetworkManager no se está ejecutando."
+#: ../cli/src/connections.c:523
+msgid "Connection details"
+msgstr "Detalles de conexiones"
+
+#: ../cli/src/connections.c:589
+msgid "never"
+msgstr "nunca"
-#: ../cli/src/connections.c:649
-msgid "Active connections"
-msgstr "Conexiones activas"
+#: ../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:1073
+#: ../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:667
+msgid "List of configured connections"
+msgstr "Lista de conexiones 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 "no active connection on device '%s'"
-msgstr "conexión no activa en el dispositivo «%s»"
+msgid "Error: %s argument is missing."
+msgstr "Error: falta el argumento %s."
-#: ../cli/src/connections.c:1081
+#: ../cli/src/connections.c:698
#, c-format
-msgid "no active connection or device"
-msgstr "conexión o dispositivo no activo"
+msgid "Error: %s - no such connection."
+msgstr "Error: %s - no hay tal conexión."
-#: ../cli/src/connections.c:1152
+#: ../cli/src/connections.c:710
#, c-format
-msgid "device '%s' not compatible with connection '%s'"
-msgstr "dispositivo «%s» incompatible con conexión «%s»"
+msgid "Error: 'show configured': %s"
+msgstr "Error: 'mostrar configuradas': %s"
-#: ../cli/src/connections.c:1154
+#: ../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 "no device found for connection '%s'"
-msgstr "no se encontró dispositivo para conexión «%s»"
+msgid "Error: %s."
+msgstr "Error: %s."
-#: ../cli/src/connections.c:1165
+#: ../cli/src/connections.c:728
msgid "activating"
msgstr "activando"
-#: ../cli/src/connections.c:1167
+#: ../cli/src/connections.c:730
msgid "activated"
msgstr "activada"
-#: ../cli/src/connections.c:1169 ../cli/src/devices.c:294
-msgid "deactivating"
-msgstr "desactivando"
-
-#: ../cli/src/connections.c:1172 ../cli/src/connections.c:1195
-#: ../cli/src/connections.c:1228 ../cli/src/devices.c:298
-#: ../cli/src/devices.c:678 ../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:513
-#: ../cli/src/utils.c:397
-msgid "unknown"
-msgstr "desconocido"
+# auto translated by TM merge from project: firewalld, version: 0.3.4, DocId: firewalld
+#: ../cli/src/connections.c:734
+msgid "deactivated"
+msgstr "desactivado"
-#: ../cli/src/connections.c:1181
+#: ../cli/src/connections.c:746
msgid "VPN connecting (prepare)"
msgstr "Conectando VPN (preparar)"
-#: ../cli/src/connections.c:1183
+#: ../cli/src/connections.c:748
msgid "VPN connecting (need authentication)"
msgstr "Conectando VPN (necesita autenticación)"
-#: ../cli/src/connections.c:1185
+#: ../cli/src/connections.c:750
msgid "VPN connecting"
msgstr "Conectando VPN"
-#: ../cli/src/connections.c:1187
+#: ../cli/src/connections.c:752
msgid "VPN connecting (getting IP configuration)"
msgstr "Conectando VPN (obteniendo configuración IP)"
-#: ../cli/src/connections.c:1189
+#: ../cli/src/connections.c:754
msgid "VPN connected"
msgstr "VPN conectada"
-#: ../cli/src/connections.c:1191
+#: ../cli/src/connections.c:756
msgid "VPN connection failed"
msgstr "FalloÌ la conexioÌn VPN"
-#: ../cli/src/connections.c:1193
+#: ../cli/src/connections.c:758
msgid "VPN disconnected"
msgstr "VPN desconectada"
-#: ../cli/src/connections.c:1204
+# auto translated by TM merge from project: rhsm-web, version: 0.0, DocId: management
+#: ../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:1012
+#, c-format
+msgid "Error: 'list active': %s"
+msgstr "Error: 'activar lista': %s"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/connections.c:1020
+msgid "Active connection details"
+msgstr "Activar detalles de la conexión"
+
+#: ../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 "Error: NetworkManager no se está ejecutando."
+
+#: ../cli/src/connections.c:1203
+msgid "List of active connections"
+msgstr "Lista de conexiones activas"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/connections.c:1239 ../cli/src/connections.c:1926
+#, c-format
+msgid "Error: '%s' is not an active connection."
+msgstr "Error: '%s' no se una conexión activa."
+
+#: ../cli/src/connections.c:1251
+#, c-format
+msgid "Error: 'show active': %s"
+msgstr "Error: 'mostrar activas': %s"
+
+#: ../cli/src/connections.c:1344
+#, c-format
+msgid "no active connection on device '%s'"
+msgstr "conexión no activa en el dispositivo «%s»"
+
+#: ../cli/src/connections.c:1352
+msgid "no active connection or device"
+msgstr "conexión o dispositivo no activo"
+
+#: ../cli/src/connections.c:1423
+#, c-format
+msgid "device '%s' not compatible with connection '%s'"
+msgstr "dispositivo «%s» incompatible con conexión «%s»"
+
+#: ../cli/src/connections.c:1426
+#, c-format
+msgid "no device found for connection '%s'"
+msgstr "no se encontró dispositivo para conexión «%s»"
+
+#: ../cli/src/connections.c:1438
msgid "unknown reason"
msgstr "razón desconocida"
-#: ../cli/src/connections.c:1206
+#: ../cli/src/connections.c:1440 ../cli/src/network-manager.c:288
msgid "none"
msgstr "ninguna"
-#: ../cli/src/connections.c:1208
+#: ../cli/src/connections.c:1442
msgid "the user was disconnected"
msgstr "el usuario estaba desconectado"
-#: ../cli/src/connections.c:1210
+#: ../cli/src/connections.c:1444
msgid "the base network connection was interrupted"
msgstr "se interrumpió la conexión de red de base"
-#: ../cli/src/connections.c:1212
+#: ../cli/src/connections.c:1446
msgid "the VPN service stopped unexpectedly"
msgstr "el servicio VPN se detuvo inesperadamente"
-#: ../cli/src/connections.c:1214
+#: ../cli/src/connections.c:1448
msgid "the VPN service returned invalid configuration"
msgstr "el servicio VPN retornó una configuración no válida"
-#: ../cli/src/connections.c:1216
+#: ../cli/src/connections.c:1450
msgid "the connection attempt timed out"
msgstr "se agotaron los intentos de conexión"
-#: ../cli/src/connections.c:1218
+#: ../cli/src/connections.c:1452
msgid "the VPN service did not start in time"
msgstr "el servicio VPN no inició a tiempo"
-#: ../cli/src/connections.c:1220
+#: ../cli/src/connections.c:1454
msgid "the VPN service failed to start"
msgstr "el servicio VPN falló en el inicio"
-#: ../cli/src/connections.c:1222
+#: ../cli/src/connections.c:1456
msgid "no valid VPN secrets"
msgstr "secretos VPN no válidos"
-#: ../cli/src/connections.c:1224
+#: ../cli/src/connections.c:1458
msgid "invalid VPN secrets"
msgstr "secretos VPN válidos"
-#: ../cli/src/connections.c:1226
+#: ../cli/src/connections.c:1460
msgid "the connection was removed"
msgstr "se eliminó la conexión"
-#: ../cli/src/connections.c:1240
-#, c-format
-msgid "state: %s\n"
-msgstr "estado: %s\n"
-
-#: ../cli/src/connections.c:1243 ../cli/src/connections.c:1269
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/connections.c:1477 ../cli/src/connections.c:1633
+#: ../cli/src/connections.c:6016
#, c-format
-msgid "Connection activated\n"
-msgstr "Conexión activada\n"
+msgid "Connection successfully activated (D-Bus active path: %s)\n"
+msgstr "Conexión activada con éxito (D-Bus active path: %s)\n"
-#: ../cli/src/connections.c:1246
+#: ../cli/src/connections.c:1482
#, c-format
msgid "Error: Connection activation failed."
msgstr "Error: falló la activación de la conexión."
-#: ../cli/src/connections.c:1265
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/connections.c:1507
#, c-format
-msgid "state: %s (%d)\n"
-msgstr "estado: %s (%d)\n"
+msgid "VPN connection successfully activated (D-Bus active path: %s)\n"
+msgstr "Conexión VPN activada con éxito (D-Bus active path: %s)\n"
-#: ../cli/src/connections.c:1275
+#: ../cli/src/connections.c:1514
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "Error: falló la activación de la conexión: %s."
-#: ../cli/src/connections.c:1292 ../cli/src/devices.c:1126
+#: ../cli/src/connections.c:1532 ../cli/src/devices.c:1294
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "Error: expiró la pausa de %d segundos."
-#: ../cli/src/connections.c:1305
+#: ../cli/src/connections.c:1597
+#, c-format
+msgid ""
+"Error: Device '%s' is waiting for slaves before proceeding with activation."
+msgstr ""
+"Error: Dispositivo '%s' está esperando los esclavos para proseguir con la "
+"activación."
+
+#: ../cli/src/connections.c:1617
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "Error: falló la activación de la conexión: %s"
-#: ../cli/src/connections.c:1311
+# auto translated by TM merge from project: evolution-mapi, version: el6, DocId: evolution-mapi
+#: ../cli/src/connections.c:1722 ../cli/src/connections.c:1854
+msgid "unknown error"
+msgstr "Error desconocido"
+
+#: ../cli/src/connections.c:1730
#, c-format
-msgid "Active connection state: %s\n"
-msgstr "Estado de la conexión activa: %s\n"
+msgid "unknown device '%s'."
+msgstr "Dispositivo desconocido '%s'."
+
+#: ../cli/src/connections.c:1735
+msgid "neither a valid connection nor device given"
+msgstr "Ni es una conexión válida ni es un dispositivo determinado."
-#: ../cli/src/connections.c:1312
+#: ../cli/src/connections.c:1773 ../cli/src/connections.c:1884
+#: ../cli/src/connections.c:7714
+msgid "Connection (name, UUID, or path): "
+msgstr "Conexión (nombre, UUID, o ruta): "
+
+#: ../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 "Active connection path: %s\n"
-msgstr "Ruta de la conexión activa: %s\n"
+msgid "Unknown parameter: %s\n"
+msgstr "Parámetro desconocido: %s\n"
+
+# auto translated by TM merge from project: gtk3, version: 3.8.2, DocId: gtk30
+#: ../cli/src/connections.c:1862
+msgid "preparing"
+msgstr "Preparando"
-#: ../cli/src/connections.c:1364 ../cli/src/connections.c:1505
-#: ../cli/src/connections.c:1614
+#: ../cli/src/connections.c:1889 ../cli/src/connections.c:7719
+#: ../cli/src/connections.c:7832
#, c-format
-msgid "Error: Unknown connection: %s."
-msgstr "Error: conexión desconocida: %s."
+msgid "Error: No connection specified."
+msgstr "Error: no se especificó una conexión."
-#: ../cli/src/connections.c:1410 ../cli/src/devices.c:1198
+#: ../cli/src/connections.c:2237 ../cli/src/utils.c:490
#, c-format
-msgid "Error: timeout value '%s' is not valid."
-msgstr "Error: valor de pausa «%s» no válido."
+msgid "'%s' not among [%s]"
+msgstr "'%s' no está entre [%s]"
-#: ../cli/src/connections.c:1423 ../cli/src/connections.c:1522
-#: ../cli/src/connections.c:1594
+#: ../cli/src/connections.c:2319
#, c-format
-msgid "Error: id or uuid has to be specified."
-msgstr "Error: se debe especificar un id o uuid."
+msgid "Error: '%s': '%s' is not a valid %s MAC address."
+msgstr "Error: '%s': '%s' no es una dirección MAC %s válida."
+
+# auto translated by TM merge from project: RHEL Migration Planning Guide, version: 6.4, DocId: Networking
+#: ../cli/src/connections.c:2320 ../tui/nm-editor-utils.c:173
+#: ../tui/nm-ui-utils.c:347
+msgid "InfiniBand"
+msgstr "Infiniband"
+
+# auto translated by TM merge from project: virt-manager, version: 0.9.0, DocId: virt-manager
+#: ../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:1451
+#: ../cli/src/connections.c:2343
#, c-format
-msgid "Error: No suitable device found: %s."
-msgstr "Error: no se encontró un dispositivo apropiado: %s."
+msgid "Error: 'mtu': '%s' is not a valid MTU."
+msgstr "Error: 'mtu': '%s' no es una MTU válido."
-#: ../cli/src/connections.c:1453
+#: ../cli/src/connections.c:2359
#, c-format
-msgid "Error: No suitable device found."
-msgstr "Error: no se encontró un dispositivo apropiado."
+msgid "Error: 'parent': '%s' is not a valid interface name."
+msgstr "Error: 'parent': '%s' no es un nombre de interfaz válido."
-#: ../cli/src/connections.c:1558
+#: ../cli/src/connections.c:2380
#, c-format
-msgid "Warning: Connection not active\n"
-msgstr "Advertencia: conexión inactiva\n"
+msgid "Error: 'p-key': '%s' is not a valid InfiniBand P_KEY."
+msgstr "Error: 'p-key': '%s' no es una InfiniBand P_KEY válida."
-#: ../cli/src/connections.c:1659
+#: ../cli/src/connections.c:2396
#, c-format
-msgid "Error: 'con' command '%s' is not valid."
-msgstr "Error: comando «con» «%s» no es válido."
+msgid ""
+"Error: 'mode': '%s' is not a valid InfiniBand transport mode [datagram, "
+"connected]."
+msgstr ""
+"Error: 'mode': '%s' no es un modo de transporte InfiniBand válido [datagram, "
+"connected]."
-#: ../cli/src/connections.c:1724
+#: ../cli/src/connections.c:2412
#, c-format
-msgid "Error: could not connect to D-Bus."
-msgstr "Error: no se pudo conectar con D-Bus."
+msgid "Error: 'flags': '%s' is not valid; use <0-7>."
+msgstr "Error: 'flags': '%s' no es válido; use <0-7>."
-#: ../cli/src/connections.c:1732
+#: ../cli/src/connections.c:2434
#, c-format
-msgid "Error: Could not get system settings."
-msgstr "Error: no se pudo obtener configuración de sistema."
+msgid "Error: '%s': '%s' is not valid; %s "
+msgstr "Error: '%s': '%s' no es válido; %s "
-#: ../cli/src/connections.c:1742
+#: ../cli/src/connections.c:2541
#, c-format
-msgid "Error: Can't obtain connections: settings service is not running."
+msgid "Error: '%s': '%s' is not valid; use <%u-%u>."
+msgstr "Error: '%s': '%s' no es válido; use <%u-%u>."
+
+# auto translated by TM merge from project: virt-manager, version: 0.9.0, DocId: virt-manager
+#: ../cli/src/connections.c:2555
+msgid "ethernet"
+msgstr "Ethernet"
+
+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0
+#: ../cli/src/connections.c:2555 ../tui/nm-editor-utils.c:164
+#: ../tui/nm-ui-utils.c:337
+msgid "Wi-Fi"
+msgstr "InalaÌmbrica"
+
+#: ../cli/src/connections.c:2558
+#, c-format
+msgid "There are 3 optional arguments for '%s' connection type.\n"
+msgstr "Hay 3 argumentos opcionales para tipo de conexión '%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 "¿Desea proporcionarlos? (Sí o No) [yes] "
+
+#: ../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 [none]: "
+
+#: ../cli/src/connections.c:2589
+msgid "Cloned MAC [none]: "
+msgstr "MAC clonada [none]: "
+
+#: ../cli/src/connections.c:2612
+#, c-format
+msgid "There are 5 optional arguments for 'InfiniBand' connection type.\n"
+msgstr "Hay 5 argumentos opcionales para tipo de conexión 'Infiniband'.\n"
+
+#: ../cli/src/connections.c:2643
+msgid "Transport mode (datagram or connected) [datagram]: "
+msgstr "Modo de transporte (datagrama o conectado) [datagram]: "
+
+#: ../cli/src/connections.c:2656
+msgid "Parent interface [none]: "
+msgstr "Interfaz principal [none]: "
+
+#: ../cli/src/connections.c:2667
+msgid "P_KEY [none]: "
+msgstr "P_KEY [none]: "
+
+#: ../cli/src/connections.c:2677
+#, c-format
+msgid "Error: 'p-key' is mandatory when 'parent' is specified.\n"
+msgstr "Error: 'p-key' es obligatorio cuando 'parent' está especificado.\n"
+
+#: ../cli/src/connections.c:2702
+#, c-format
+msgid "There is 1 optional argument for 'WiMax' connection type.\n"
+msgstr "Hay 1 argumento opcional para tipo de conexión '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 "¿Desea proporcionarlo? (Sí o No) [yes] "
+
+#: ../cli/src/connections.c:2734
+#, c-format
+msgid "There are 4 optional arguments for 'PPPoE' connection type.\n"
+msgstr "Hay 4 argumentos opcionales para tipo de conexión 'PPPoE'.\n"
+
+#: ../cli/src/connections.c:2742 ../cli/src/connections.c:2790
+msgid "Password [none]: "
+msgstr "Contraseña [none]: "
+
+#: ../cli/src/connections.c:2744
+msgid "Service [none]: "
+msgstr "Servicio [ninguno]: "
+
+#: ../cli/src/connections.c:2780
+#, c-format
+msgid ""
+"There are 2 optional arguments for 'mobile broadband' connection type.\n"
msgstr ""
-"Error: no se pueden obtener conexiones: el servicio de configuración no se "
-"está ejecutando."
+"Hay 2 argumentos opcionales para tipo de conexión 'banda ancha de móvil'.\n"
-#. 0
-#. 9
-#. 3
-#: ../cli/src/devices.c:66 ../cli/src/devices.c:102 ../cli/src/devices.c:212
-#: ../cli/src/devices.c:228
-msgid "DEVICE"
-msgstr "DISPOSITIVO"
+#: ../cli/src/connections.c:2788 ../cli/src/connections.c:3233
+msgid "Username [none]: "
+msgstr "Nombre de usuario [none]: "
-#. 1
-#. 4
-#. 1
-#: ../cli/src/devices.c:68 ../cli/src/devices.c:106
-#: ../cli/src/network-manager.c:39
-msgid "STATE"
-msgstr "ESTADO"
+#: ../cli/src/connections.c:2804
+#, c-format
+msgid "There is 1 optional argument for 'bluetooth' connection type.\n"
+msgstr "Hay 1 argumento opcional para tipo de conexión 'bluetooth'.\n"
-#: ../cli/src/devices.c:78
-msgid "GENERAL"
-msgstr "GENERAL"
+#: ../cli/src/connections.c:2813
+msgid "Bluetooth type (panu, dun-gsm or dun-cdma) [panu]: "
+msgstr "Tipo Bluetooth (panu, dun-gsm or dun-cdma) [panu]: "
-#. 0
-#: ../cli/src/devices.c:79
-msgid "CAPABILITIES"
-msgstr "FUNCIONALIDADES"
+#: ../cli/src/connections.c:2821
+#, c-format
+msgid "Error: 'bt-type': '%s' is not a valid bluetooth type.\n"
+msgstr "Error: 'bt-type': '%s' no es un tipo bluetooth válido.\n"
-#. 1
-#: ../cli/src/devices.c:80
-msgid "WIFI-PROPERTIES"
-msgstr "PROPIEDADES-WIFI"
+#: ../cli/src/connections.c:2840
+#, c-format
+msgid "There are 4 optional arguments for 'VLAN' connection type.\n"
+msgstr "Hay 4 argumentos opcionales para tipo de conexión 'Vlan'.\n"
-#. 2
-#: ../cli/src/devices.c:81
-msgid "AP"
-msgstr "AP"
+#: ../cli/src/connections.c:2860
+msgid "VLAN flags (<0-7>) [none]: "
+msgstr "Indicadores VLAN (<0-7>) [none]: "
-#. 3
-#: ../cli/src/devices.c:82
-msgid "WIRED-PROPERTIES"
-msgstr "PROPIEDADES ALÃMBRICAS"
+#: ../cli/src/connections.c:2871
+msgid "Ingress priority maps [none]: "
+msgstr "Mapas de prioridad de ingreso [none]: "
-#. 4
-#: ../cli/src/devices.c:83
-msgid "WIMAX-PROPERTIES"
-msgstr "PROPIEDADES-WIMAX"
+#: ../cli/src/connections.c:2882
+msgid "Egress priority maps [none]: "
+msgstr "Mapas de prioridad de egreso [none]: "
-#. 5
-#. 0
-#: ../cli/src/devices.c:84 ../cli/src/devices.c:225
-msgid "NSP"
-msgstr "PSR"
+#: ../cli/src/connections.c:2908
+#, c-format
+msgid "There are optional arguments for 'bond' connection type.\n"
+msgstr "Hay argumentos opcionales para tipo de conexión 'bond'.\n"
+
+#: ../cli/src/connections.c:2918
+msgid "Bonding mode [balance-rr]: "
+msgstr "Modo de vinculación [balance-rr] desconocido: "
+
+#: ../cli/src/connections.c:2934
+msgid "Bonding primary interface [none]: "
+msgstr "Interfaz de vinculación primaria [none]: "
+
+#: ../cli/src/connections.c:2937
+#, c-format
+msgid "Error: 'primary': '%s' is not a valid interface name.\n"
+msgstr "Error: 'primary': '%s' no es un nombre de interfaz válido.\n"
+
+#: ../cli/src/connections.c:2945
+msgid "Bonding monitoring mode (miimon or arp) [miimon]: "
+msgstr "Modo de monitorización de vinculación (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 ""
+"Error: '%s' modo de monitorización no es válido; utilice '%s' o '%s'.\n"
+
+#: ../cli/src/connections.c:2959
+msgid "Bonding miimon [100]: "
+msgstr "Vinculación miimon [100]: "
+
+#: ../cli/src/connections.c:2962
+#, c-format
+msgid "Error: 'miimon': '%s' is not a valid number <0-%u>.\n"
+msgstr "Error: 'miimon': '%s' no es un número valido <0-%u>.\n"
+
+#: ../cli/src/connections.c:2970
+msgid "Bonding downdelay [0]: "
+msgstr "Vinculación downdelay [0]: "
+
+#: ../cli/src/connections.c:2973
+#, c-format
+msgid "Error: 'downdelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "Error: 'downdelay': '%s' no es un número válido <0-%u>.\n"
+
+#: ../cli/src/connections.c:2981
+msgid "Bonding updelay [0]: "
+msgstr "Vinculación updelay [0]: "
-#. 6
-#: ../cli/src/devices.c:85
-msgid "IP4-SETTINGS"
-msgstr "CONFIGURACIONES IP4"
+#: ../cli/src/connections.c:2984
+#, c-format
+msgid "Error: 'updelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "Error: 'updelay': '%s' no es un número válido <0-%u>.\n"
+
+#: ../cli/src/connections.c:2993
+msgid "Bonding arp-interval [0]: "
+msgstr "Vinculación arp-interval [0]: "
+
+#: ../cli/src/connections.c:2996
+#, c-format
+msgid "Error: 'arp-interval': '%s' is not a valid number <0-%u>.\n"
+msgstr "Error: 'arp-interval': '%s' no es un número válido <0-%u>.\n"
+
+#: ../cli/src/connections.c:3004
+msgid "Bonding arp-ip-target [none]: "
+msgstr "Vinculación arp-ip-target [none]: "
+
+#: ../cli/src/connections.c:3023
+#, c-format
+msgid "There is 1 optional argument for '%s' connection type.\n"
+msgstr "Hay 1 argumento opcional para tipo de conexión '%s'\n"
-#. 7
-#: ../cli/src/devices.c:86
-msgid "IP4-DNS"
-msgstr "DNS IP4"
+#: ../cli/src/connections.c:3032
+msgid "Team JSON configuration [none]: "
+msgstr "Configuración de equipo JSON [ninguna]: "
-#. 8
-#: ../cli/src/devices.c:87
-msgid "IP6-SETTINGS"
-msgstr "CONFIGURACIONES IP6"
+#: ../cli/src/connections.c:3051
+msgid "team"
+msgstr "Equipo"
-#. 9
-#: ../cli/src/devices.c:88
-msgid "IP6-DNS"
-msgstr "DNS IP6"
+#: ../cli/src/connections.c:3057
+msgid "team-slave"
+msgstr "Equipo esclavo"
+
+#: ../cli/src/connections.c:3071
+#, c-format
+msgid "There are 6 optional arguments for 'bridge' connection type.\n"
+msgstr "Hay 6 argumentos opcionales para tipo de conexión 'bridge'.\n"
+
+#: ../cli/src/connections.c:3081
+msgid "Enable STP (yes/no) [yes]: "
+msgstr "Habilitar STP (si o no) [yes]: "
+
+#: ../cli/src/connections.c:3085
+#, c-format
+msgid "Error: 'stp': '%s'.\n"
+msgstr "Error: 'stp': '%s'.\n"
+
+#: ../cli/src/connections.c:3093
+msgid "STP priority [128]: "
+msgstr "Prioridad STP [128]: "
+
+#: ../cli/src/connections.c:3097
+#, c-format
+msgid "Error: 'priority': '%s' is not a valid number <0-%d>.\n"
+msgstr "Error: 'priority': '%s' no es un número válido <0-%d>.\n"
+
+#: ../cli/src/connections.c:3105
+msgid "Forward delay [15]: "
+msgstr "Demora de reenvío [15]:"
+
+#: ../cli/src/connections.c:3109
+#, c-format
+msgid "Error: 'forward-delay': '%s' is not a valid number <2-30>.\n"
+msgstr "Error: 'forward-updelay': '%s' no es un número válido <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 "Error: 'hello-time': '%s' no es un número válido <1-10>.\n"
-#. 2
-#: ../cli/src/devices.c:104
+#: ../cli/src/connections.c:3130
+msgid "Max age [20]: "
+msgstr "Edad máxima [20]: "
+
+#: ../cli/src/connections.c:3134
+#, c-format
+msgid "Error: 'max-age': '%s' is not a valid number <6-40>.\n"
+msgstr "Error: 'max-age': '%s' no es un número válido <6-40>.\n"
+
+#: ../cli/src/connections.c:3142
+msgid "MAC address ageing time [300]: "
+msgstr "Tiempo de envejecimiento de direción MAC [300]: "
+
+#: ../cli/src/connections.c:3146
+#, c-format
+msgid "Error: 'ageing-time': '%s' is not a valid number <0-1000000>.\n"
+msgstr "Error: 'ageing-time': '%s' no es un 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 "Hay 3 argumentos opcionales para tipo de conexión 'bridge-slave'.\n"
+
+#: ../cli/src/connections.c:3176
+msgid "Bridge port priority [32]: "
+msgstr "Prioridad de puerto de puente [32]: "
+
+#: ../cli/src/connections.c:3189
+msgid "Bridge port STP path cost [100]: "
+msgstr "Costo de ruta STP puerto de puente [100]: "
+
+#: ../cli/src/connections.c:3203
+msgid "Hairpin (yes/no) [yes]: "
+msgstr "Hairpin (si o no) [yes]: "
+
+#: ../cli/src/connections.c:3207
+#, c-format
+msgid "Error: 'hairpin': '%s'.\n"
+msgstr "Error: 'hairpin': '%s'.\n"
+
+#: ../cli/src/connections.c:3225
+#, c-format
+msgid "There is 1 optional argument for 'VPN' connection type.\n"
+msgstr "Hay 1 argumento opcional para tipo de conexión 'VPN'.\n"
+
+#: ../cli/src/connections.c:3249
+#, c-format
+msgid "There are 2 optional arguments for 'OLPC Mesh' connection type.\n"
+msgstr "Hay 2 argumentos opcionales para tipo de conexión 'OLPC'.\n"
+
+#: ../cli/src/connections.c:3258
+msgid "OLPC Mesh channel [1]: "
+msgstr "Canal OLPC Mesh [1]: "
+
+#: ../cli/src/connections.c:3261
+#, c-format
+msgid "Error: 'channel': '%s' is not a valid number <1-13>.\n"
+msgstr "Error: 'channel': '%s' no es un número válido <1-13>.\n"
+
+#: ../cli/src/connections.c:3269
+msgid "DHCP anycast MAC address [none]: "
+msgstr "Dirección MAC DHCP anycast [none]: "
+
+#: ../cli/src/connections.c:3317
+msgid "IPv4 address (IP[/plen] [gateway]) [none]: "
+msgstr "Dirección IPv4 (IP[/plen] [gateway]) [none]: "
+
+#: ../cli/src/connections.c:3319
+msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
+msgstr "Dirección IPv6 (IP[/plen] [gateway]) [none]: "
+
+#: ../cli/src/connections.c:3337
+#, c-format
+msgid " Address successfully added: %s %s\n"
+msgstr "Dirección agregada con éxito: %s %s\n"
+
+#: ../cli/src/connections.c:3339
+#, c-format
+msgid " Warning: address already present: %s %s\n"
+msgstr " Advertencia: la dirección ya está presente: %s %s\n"
+
+#: ../cli/src/connections.c:3341
+#, c-format
+msgid " Warning: ignoring garbage at the end: '%s'\n"
+msgstr " Advertencia: ignorando basura al 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 "Error: "
+
+#: ../cli/src/connections.c:3361
+msgid "Do you want to add IP addresses? (yes/no) [yes] "
+msgstr "¿Desea proporcionar las direcciones IP? (Si o No) [yes] "
+
+#: ../cli/src/connections.c:3367
+#, c-format
+msgid "Press <Enter> to finish adding addresses.\n"
+msgstr "Pulse <Enter> para terminar de agregar direcciones.\n"
+
+#: ../cli/src/connections.c:3513
+#, c-format
+msgid "Error: 'parent': not valid without 'p-key'."
+msgstr "Error: 'parent': 'no es válido sin '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 "Error: se requiere 'ssid'."
+
+#: ../cli/src/connections.c:3636
+msgid "WiMAX NSP name: "
+msgstr "Nombre NSP WiMAX: "
+
+#: ../cli/src/connections.c:3639
+msgid "Error: 'nsp' is required."
+msgstr "Error: se requiere 'nsp'."
+
+#: ../cli/src/connections.c:3694
+msgid "PPPoE username: "
+msgstr "Nombre de usuario PPPoE"
+
+#: ../cli/src/connections.c:3697
+msgid "Error: 'username' is required."
+msgstr "Error: 'username' es requerido."
+
+#: ../cli/src/connections.c:3768
+msgid "APN: "
+msgstr "APN: "
+
+#: ../cli/src/connections.c:3771
+msgid "Error: 'apn' is required."
+msgstr "Error: se requiere 'apn'."
+
+#: ../cli/src/connections.c:3830
+msgid "Bluetooth device address: "
+msgstr "Dirección de dispositivo Bluetooth:"
+
+#: ../cli/src/connections.c:3833
+msgid "Error: 'addr' is required."
+msgstr "Error: se requiere 'addr'."
+
+#: ../cli/src/connections.c:3876
+#, c-format
+msgid "Error: 'bt-type': '%s' not valid; use [%s, %s (%s), %s]."
+msgstr "Error: 'bt-type': '%s' no es válido; utilice [%s, %s (%s), %s]."
+
+#: ../cli/src/connections.c:3921
+msgid "VLAN parent device or connection UUID: "
+msgstr "Dispositivo principal VLAN o UUID de conexión: "
+
+#: ../cli/src/connections.c:3924
+msgid "Error: 'dev' is required."
+msgstr "Error: se requiere 'dev'."
+
+#: ../cli/src/connections.c:3928
+msgid "VLAN ID <0-4095>: "
+msgstr "ID de VLAN <0-4095>: "
+
+#: ../cli/src/connections.c:3931
+msgid "Error: 'id' is required."
+msgstr "Error: Se requiere 'id'."
+
+#: ../cli/src/connections.c:3937
+#, c-format
+msgid "Error: 'id': '%s' is not valid; use <0-4095>."
+msgstr "Error: 'id': '%s' no es válido; use <0-4095>."
+
+#: ../cli/src/connections.c:3947
+#, c-format
+msgid "Error: 'dev': '%s' is neither UUID, interface name, nor MAC."
+msgstr "Error: 'dev': '%s' no es ni nombre de interfaz ni MAC."
+
+#: ../cli/src/connections.c:4082
+#, c-format
+msgid "Error: 'mode': %s."
+msgstr "Error: 'modo': %s."
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.9.0, DocId: NetworkManager
+#: ../cli/src/connections.c:4091
+#, c-format
+msgid "Error: 'primary': '%s' is not a valid interface name."
+msgstr "Error: 'primary': '%s' no es un nombre de interfaz válido."
+
+#: ../cli/src/connections.c:4134
+msgid "Bond master: "
+msgstr "Maestro de vínculo: "
+
+#: ../cli/src/connections.c:4137 ../cli/src/connections.c:4229
+#: ../cli/src/connections.c:4416
+msgid "Error: 'master' is required."
+msgstr "Error: se requiere '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 ""
+"Advertencia: 'type' se ignora actualmente. Solamente se soportan esclavos de "
+"Ethernet en el momento.\n"
+
+#: ../cli/src/connections.c:4226
+msgid "Team master: "
+msgstr "Maestro de equipo: "
+
+#: ../cli/src/connections.c:4329
+#, c-format
+msgid "Error: 'stp': %s."
+msgstr "Error: 'stp': '%s'."
+
+#: ../cli/src/connections.c:4413
+msgid "Bridge master: "
+msgstr "Maestro de puente:"
+
+#: ../cli/src/connections.c:4421
+#, c-format
+msgid "Error: 'master': '%s' is not valid UUID nor interface."
+msgstr "Error: 'master': '%s' no es un UUID o una interfaz válida."
+
+#: ../cli/src/connections.c:4454
+#, c-format
+msgid "Error: 'hairpin': %s."
+msgstr "Error: '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 "Error: se requiere 'vpn-type'."
+
+#: ../cli/src/connections.c:4520
+#, c-format
+msgid "Error: 'vpn-type': %s."
+msgstr "Error: 'vpn-type': %s."
+
+#: ../cli/src/connections.c:4578
+#, c-format
+msgid "Error: 'channel': '%s' is not valid; use <1-13>."
+msgstr "Error: 'channel': '%s' no es válido; use <1-13>."
+
+#: ../cli/src/connections.c:4613
+#, c-format
+msgid "Error: '%s' is not a valid connection type."
+msgstr "Error: '%s' no es un tipo de conexión válida."
+
+#: ../cli/src/connections.c:4711
+#, c-format
+msgid "Error: Failed to add '%s' connection: (%d) %s"
+msgstr "Error: Falló al agregar '%s' conexión: (%d) %s"
+
+#: ../cli/src/connections.c:4715
+#, c-format
+msgid "Connection '%s' (%s) successfully added.\n"
+msgstr "Conexión '%s' (%s) agregada con éxito.\n"
+
+#: ../cli/src/connections.c:4761
+msgid "Connection type: "
+msgstr "Tipo de conexión:"
+
+#: ../cli/src/connections.c:4765
+#, c-format
+msgid "Error: 'type' argument is required."
+msgstr "Error: se requiere argumento 'type'."
+
+#: ../cli/src/connections.c:4771
+#, c-format
+msgid "Error: invalid connection type; %s."
+msgstr "Error: tipo de conexión inválido; %s."
+
+#: ../cli/src/connections.c:4780
+#, c-format
+msgid "Error: 'autoconnect': %s."
+msgstr "Error: 'autoconnect': %s."
+
+#: ../cli/src/connections.c:4796
+msgid "Interface name [*]: "
+msgstr "Nombre de interfaz [*]: "
+
+#: ../cli/src/connections.c:4801
+#, c-format
+msgid "Error: 'ifname' argument is required."
+msgstr "Error: argumento 'ifname' es requerido."
+
+#: ../cli/src/connections.c:4808
+#, c-format
+msgid "Error: 'ifname': '%s' is not a valid interface nor '*'."
+msgstr "Error: 'ifname': '%s' no es una interfaz válida ni '*'."
+
+#: ../cli/src/connections.c:5627
+#, c-format
+msgid "['%s' setting values]\n"
+msgstr "['%s' setting values]\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 ""
+"---[ Menú principal ]---\n"
+"goto [<setting> | <prop>] :: va a un parámetro o propiedad\n"
+"remove <setting>[.<prop>] | <prop> :: retira parámetro o restablecer valor "
+"de propiedad\n"
+"set [<setting>.<prop> <value>] :: establece valor de propiedad\n"
+"describe [<setting>.<prop>] :: describe propiedad\n"
+"print [all] :: imprime en pantalla la conexión\n"
+"verify [all] :: verifica la conexión\n"
+"save :: guarda la conexión\n"
+"activate [<ifname>] [/<ap>|<nsp>] :: activa la conexión\n"
+"back :: va un nivel atrás (back)\n"
+"help/? [<command>] :: imprime en pantalla esta ayuda\n"
+"nmcli <conf-option> <value> :: configuración nmcli\n"
+"quit :: sale de 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> :: ingresar parámetro o propiedad para "
+"modificar\n"
+"\n"
+"Este comando ingresa un parámetro o propiedad para modificarlo.\n"
+"\n"
+"Ejemplos: 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>] :: retirar parámetro o restablecer valor de "
+"propiedad\n"
+"\n"
+"Este comando retira una configuración completa de la conexión o si se ha "
+"proporcionado una propiedad\n"
+"se restablece dicha propiedad al valor predeterminado.\n"
+"\n"
+"Ejemplos: 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>] :: establecer el valor de propiedad\n"
+"\n"
+"Este comando establece el valor de la propiedad.\n"
+"\n"
+"Ejemplo: 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>] :: describir propiedad\n"
+"\n"
+"Muestra la descripción de la propiedad. Puede consultar la página de manual "
+"nm-settings(5) para ver todos los parámetros y propiedades 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] :: imprimir la configuración o los valores de conexión\n"
+"\n"
+"Muestra la propiedad actual o toda la conexión.\n"
+"\n"
+"Ejemplo: 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 parámetros o validez de conexión\n"
+"\n"
+"Verifica si los parámetros o la conexión son válidos y si pueden guardarse "
+"más adelante. Indica valores inválidos en error.\n"
+"\n"
+"Ejemplos: 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 :: guardar la conexión\n"
+"\n"
+"Envía la conexión a NetworkManager el cual la guardará.\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>] :: activar la conexión\n"
+"\n"
+"Activa la conexión.\n"
+"\n"
+"Opciones disponibles:\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 :: va a un nivel superior del menú\n"
+"\n"
+
+#: ../cli/src/connections.c:5785
+#, c-format
+msgid "help/? [<command>] :: help for the nmcli commands\n"
+"\n"
+msgstr "help/? [<command>] :: ayuda para los comandos 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>] :: configuración nmcli\n"
+"\n"
+"Configura nmcli. Las siguientes opciones están disponibles:\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"
+"Ejemplos: 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 :: sale de nmcli\n"
+"\n"
+"Este comando sale de nmcli. Cuando la conexión es editada no se guarda, se "
+"le pide al usuario que confirme la acción.\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 desconocido: '%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>] :: establece nuevo valor\n"
+"add [<value>] :: añade nueva opción a la propiedad\n"
+"change :: cambia el valor actual\n"
+"remove [<index> | <option>] :: borra el valor\n"
+"describe :: describe la propiedad\n"
+"print [setting | connection] :: imprime en pantalla la propiedad los "
+"valor(es) (parámetro o conexión)\n"
+"back :: va al nivel superior\n"
+"help/? [<command>] :: imprime en pantalla la ayuda o la "
+"descripción del comando\n"
+"quit :: sale de 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>] :: establece nuevo valor\n"
+"\n"
+"Este comando establece <value> provisto a esta propiedad\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"
+"Este comando agrega el <value> provisto para esta propiedad, si la propiedad "
+"es de un tipo de contenedor. Para propiedades de un solo valor, este comando "
+"remplaza el valor (igual que '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"
+"Despliega el valor actual y permite editarlo.\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>] :: borrar el valor\n"
+"\n"
+"Retira el valor de propiedad (lo fija como predeterminado).\n"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.9.0, DocId: NetworkManager
+#: ../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 :: describir propiedad\n"
+"\n"
+"Muestra la descripción de la propiedad. Puede consultar la página de manual "
+"nm-settings(5) para ver todos los parámetros y propiedades 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] :: imprimir propiedad (parámetro, "
+"conexión) valor(s)\n"
+"\n"
+"Muestra el valor de propiedad. Al proporcionar un argumento usted puede "
+"desplegar valores para toda la configuración o conexión.\n"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.9.0, DocId: NetworkManager
+#: ../cli/src/connections.c:5935
+#, c-format
+msgid "help/? [<command>] :: help for nmcli commands\n"
+"\n"
+msgstr "help/? [<command>] :: ayuda para los comandos nmcli\n"
+"\n"
+
+#: ../cli/src/connections.c:6022
+#, c-format
+msgid "Error: Connection activation failed.\n"
+msgstr "Error: falló la activación de la conexión.\n"
+
+#: ../cli/src/connections.c:6093
+#, c-format
+msgid "Error: setting '%s' is mandatory and cannot be removed.\n"
+msgstr "Error: parámetro '%s' es obligatorio y no puede ser retirado.\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 ""
+"El perfil de conexiones ha sido retirado de otro cliente. Puede escribir "
+"'save' en el menú principal para restaurarlo.\n"
+
+#: ../cli/src/connections.c:6192 ../cli/src/connections.c:6615
+#: ../cli/src/connections.c:6673
+#, c-format
+msgid "Enter '%s' value: "
+msgstr "Ingresar el valor '%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 "Error: falló al establecer '%s' propiedad: %s\n"
+
+#: ../cli/src/connections.c:6221
+#, c-format
+msgid "Edit '%s' value: "
+msgstr "Modificar el valor '%s': "
+
+#: ../cli/src/connections.c:6250
+#, c-format
+msgid "Error: %s\n"
+msgstr "Error: %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 "Error: falló al retirar el valor de '%s': %s\n"
+
+#: ../cli/src/connections.c:6277
+#, c-format
+msgid "Unknown command argument: '%s'\n"
+msgstr "Argumento desconocido de comando: '%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 ""
+"La conexión no es ha guardado. ¿Está seguro de que quiere salir? [s/n]\n"
+
+#: ../cli/src/connections.c:6409
+#, c-format
+msgid "Available settings: %s\n"
+msgstr "Parámetros disponibles: %s\n"
+
+#: ../cli/src/connections.c:6418
+#, c-format
+msgid "Error: invalid setting name; %s\n"
+msgstr "Error: nombre de parámetro inválido; %s\n"
+
+#: ../cli/src/connections.c:6435
+#, c-format
+msgid "Available properties: %s\n"
+msgstr "Propiedades disponibles: %s\n"
+
+#: ../cli/src/connections.c:6443
+#, c-format
+msgid "Error: property %s\n"
+msgstr "Error: propiedad %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 ""
+"Guardando la conexión con 'autoconnect=yes'. Esto podría activar la conexión "
+"de forma inmediata.\n"
+"¿Aún desea guardar? [yes] "
+
+#: ../cli/src/connections.c:6557
+#, c-format
+msgid "You may edit the following settings: %s\n"
+msgstr "Puede modificar los siguientes parámetros: %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 ""
+"El perfil de conexión ha sido retirado de otro cliente. Puede escribir "
+"'save' para restaurarlo.\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 '%s' propiedad: %s\n"
+
+#: ../cli/src/connections.c:6625 ../cli/src/connections.c:6842
+#, c-format
+msgid "Error: no setting selected; valid are [%s]\n"
+msgstr "Error: no se ha seleccionado parámetro; los válidos son [%s]\n"
+
+#: ../cli/src/connections.c:6626
+#, c-format
+msgid "use 'goto <setting>' first, or 'set <setting>.<property>'\n"
+msgstr "utilice 'goto <setting>' primero, o '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 "Error: argumento de parámetros inválido '%s'; los validos son [%s]\n"
+
+#: ../cli/src/connections.c:6651
+#, c-format
+msgid "Error: missing setting for '%s' property\n"
+msgstr "Error: No se encuentra la propiedad '%s'\n"
+
+#: ../cli/src/connections.c:6658
+#, c-format
+msgid "Error: invalid property: %s\n"
+msgstr "Error: propiedad inválida: %s\n"
+
+#: ../cli/src/connections.c:6707
+#, c-format
+msgid "Error: unknown setting '%s'\n"
+msgstr "Error: parámetro desconocido '%s'\n"
+
+#: ../cli/src/connections.c:6720
+#, c-format
+msgid "You may edit the following properties: %s\n"
+msgstr "Puede modificar los siguientes parámetros: %s\n"
+
+#: ../cli/src/connections.c:6764
+#, c-format
+msgid "Error: no argument given; valid are [%s]\n"
+msgstr "Error: no se ha proporcionado argumento; los válidos son [%s]\n"
+
+#: ../cli/src/connections.c:6777
+#, c-format
+msgid "Setting '%s' is not present in the connection.\n"
+msgstr "El parámetro '%s' no está presente en la conexión.\n"
+
+#: ../cli/src/connections.c:6818
+#, c-format
+msgid "Error: %s properties, nor it is a setting name.\n"
+msgstr "Error: %s propiedades, no es un nombre de parámetro.\n"
+
+#: ../cli/src/connections.c:6843
+#, c-format
+msgid "use 'goto <setting>' first, or 'describe <setting>.<property>'\n"
+msgstr "utilice 'goto <setting>' primero, o 'describe <setting>.<property>'\n"
+
+#: ../cli/src/connections.c:6884
+#, c-format
+msgid "Error: invalid property: %s, neither a valid setting name.\n"
+msgstr "Error: propiedad inválida: %s, no es un nombre de parámetro válido.\n"
+
+#: ../cli/src/connections.c:6908
+#, c-format
+msgid "Error: '%s' setting not present\n"
+msgstr "Error: '%s' parámetro no está presente\n"
+
+#: ../cli/src/connections.c:6911
+#, c-format
+msgid "Error: unknown setting: '%s'\n"
+msgstr "Error: parámetro desconocido: '%s'\n"
+
+#: ../cli/src/connections.c:6927
+#, c-format
+msgid "Verify setting '%s': %s\n"
+msgstr "Verificar parámetro '%s': %s\n"
+
+#: ../cli/src/connections.c:6934
+#, c-format
+msgid "Verify connection: %s\n"
+msgstr "Verificar conexión: %s\n"
+
+#: ../cli/src/connections.c:6973
+#, c-format
+msgid "Error: Failed to save '%s' (%s) connection: (%d) %s\n"
+msgstr "Error: Falló al guardar '%s' (%s) conexión: (%d) %s\n"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.9.0, DocId: NetworkManager
+#: ../cli/src/connections.c:6980
+#, c-format
+msgid "Connection '%s' (%s) successfully saved.\n"
+msgstr "Conexión '%s' (%s) guardada con éxito.\n"
+
+#: ../cli/src/connections.c:7014
+#, c-format
+msgid "Error: connection verification failed: %s\n"
+msgstr "Error: falló la verificación de conexión: %s\n"
+
+# auto translated by TM merge from project: evolution-data-server, version: el6, DocId: evolution-data-server-2.32
+#: ../cli/src/connections.c:7015
+msgid "(unknown error)"
+msgstr "(Error desconocido)"
+
+#: ../cli/src/connections.c:7036
+#, c-format
+msgid "Error: connection is not saved. Type 'save' first.\n"
+msgstr "Error: la conexión no se ha guardado. Escriba primero 'save'.\n"
+
+#: ../cli/src/connections.c:7040
+#, c-format
+msgid "Error: connection is not valid: %s\n"
+msgstr "Error: conexión no es válida: %s\n"
+
+#: ../cli/src/connections.c:7051
+#, c-format
+msgid "Error: Cannot activate connection: %s.\n"
+msgstr "Error: no se puede activar conexión: %s.\n"
+
+#: ../cli/src/connections.c:7061
+#, c-format
+msgid "Error: Failed to activate '%s' (%s) connection: (%d) %s\n"
+msgstr "Error: Falló al activar '%s' (%s) conexión: (%d) %s\n"
+
+#: ../cli/src/connections.c:7067
+#, c-format
+msgid "Monitoring connection activation (press any key to continue)\n"
+msgstr ""
+"Activación de conexión de monitorización (pulse cualquier tecla para "
+"continuar)\n"
+
+#: ../cli/src/connections.c:7105
+#, c-format
+msgid "Error: status-line: %s\n"
+msgstr "Error: status-line: %s\n"
+
+#: ../cli/src/connections.c:7113
+#, c-format
+msgid "Error: save-confirmation: %s\n"
+msgstr "Error: save-confirmation: %s\n"
+
+#: ../cli/src/connections.c:7121
+#, c-format
+msgid "Error: bad color number: '%s'; use <0-8>\n"
+msgstr "Error: número de color incorrecto: '%s'; use <0-8>\n"
+
+#: ../cli/src/connections.c:7133
+#, c-format
+msgid "Current nmcli configuration:\n"
+msgstr "Configuración nmcli actual:\n"
+
+#: ../cli/src/connections.c:7141
+#, c-format
+msgid "Invalid configuration option '%s'; allowed [%s]\n"
+msgstr "Opción de configuración inválida '%s'; permitida [%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 ""
+">>> Modificación de línea de comando no está disponible. Considere instalar "
+"una biblioteca de edición de línea para activar esta funcionalidad. <<<\n"
+"Bibliotecas con soporte:\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 "Error: solamente uno si 'id', uuid, o 'path' pueden proporcionarse."
+
+#: ../cli/src/connections.c:7402 ../cli/src/connections.c:7599
+#, c-format
+msgid "Error: Unknown connection '%s'."
+msgstr "Error: Conexión desconocida '%s'."
+
+#: ../cli/src/connections.c:7417
+#, c-format
+msgid "Warning: editing existing connection '%s'; 'type' argument is ignored\n"
+msgstr ""
+"Advertencia: modificando la conexión existente '%s'; argumento 'type' se "
+"ignora\n"
+
+#: ../cli/src/connections.c:7420
+#, c-format
+msgid ""
+"Warning: editing existing connection '%s'; 'con-name' argument is ignored\n"
+msgstr ""
+"Advertencia: modificando la conexión existente '%s'; argumento 'con-name' se "
+"ignora\n"
+
+#: ../cli/src/connections.c:7434
+#, c-format
+msgid "Valid connection types: %s\n"
+msgstr "Tipos de conexión válidos: %s\n"
+
+#: ../cli/src/connections.c:7436
+#, c-format
+msgid "Error: invalid connection type; %s\n"
+msgstr "Error: tipo de conexión no es válido; %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 "Modificar conexión '%s' existente: '%s'"
+
+#: ../cli/src/connections.c:7477
+#, c-format
+msgid "Adding a new '%s' connection"
+msgstr "Agregar una nueva conexión '%s'"
+
+#: ../cli/src/connections.c:7479
+#, c-format
+msgid "Type 'help' or '?' for available commands."
+msgstr "Escribir 'help' o '?' para comandos disponibles."
+
+#: ../cli/src/connections.c:7481
+#, c-format
+msgid "Type 'describe [<setting>.<prop>]' for detailed property description."
+msgstr ""
+"Escribir 'describe [<setting>.<prop>]' para descripción de propiedad "
+"detallada."
+
+#: ../cli/src/connections.c:7520
+#, c-format
+msgid "Error: Failed to modify connection '%s': (%d) %s"
+msgstr "Error: Falló al modificar conexión '%s': (%d) %s"
+
+#: ../cli/src/connections.c:7526
+#, c-format
+msgid "Connection '%s' (%s) successfully modified.\n"
+msgstr "Conexión '%s' (%s) modificada con éxito.\n"
+
+#: ../cli/src/connections.c:7553
+#, c-format
+msgid "Error: No arguments provided."
+msgstr "Error: No se proporcionaron argumentos."
+
+#: ../cli/src/connections.c:7577
+#, c-format
+msgid "Error: connection ID is missing."
+msgstr "Error: falta ID de conexión."
+
+#: ../cli/src/connections.c:7582
+#, c-format
+msgid "Error: <setting>.<property> argument is missing."
+msgstr "Error: <setting>.<property> falta el argumento."
+
+#: ../cli/src/connections.c:7605
+#, c-format
+msgid "Error: invalid <setting>.<property> '%s'."
+msgstr "Error: inválido <setting>.<property> '%s'."
+
+#: ../cli/src/connections.c:7620
+#, c-format
+msgid "Error: invalid or not allowed setting '%s': %s."
+msgstr "Error: parámetro inválido o no permitido '%s': %s."
+
+#: ../cli/src/connections.c:7641
+#, c-format
+msgid "Error: invalid property '%s': %s."
+msgstr "Error: propiedad inválida '%s': %s."
+
+#: ../cli/src/connections.c:7647
+#, c-format
+msgid "Error: failed to modify %s.%s: %s."
+msgstr "Error: falló al modificar %s.%s: %s."
+
+#: ../cli/src/connections.c:7677
+#, c-format
+msgid "Error: Connection deletion failed: %s"
+msgstr "Error: Falló el borrado de conexión: %s"
+
+#: ../cli/src/connections.c:7747
+#, c-format
+msgid "Error: unknown connection: %s\n"
+msgstr "Error: conexión desconocida: %s\n"
+
+#: ../cli/src/connections.c:7781
+#, c-format
+msgid "Error: cannot delete unknown connection(s): %s."
+msgstr "Error: no se puede borrar conexión desconocida(s): %s."
+
+#: ../cli/src/connections.c:7852
+#, c-format
+msgid "Could not load file '%s'\n"
+msgstr "No se pudo cargar archivo '%s'\n"
+
+#: ../cli/src/connections.c:7917
+#, c-format
+msgid ""
+"Error: 'configured' or 'active' command is expected for 'connection show'."
+msgstr ""
+"Error: el comando 'configured' o 'active' se esperaba para 'connection show'."
+""
+
+#: ../cli/src/connections.c:7984
+#, c-format
+msgid "Error: '%s' is not valid 'connection' command."
+msgstr "Error: '%s' no es un 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 "Error: no se pudo obtener configuración de sistema."
+
+#: ../cli/src/connections.c:8063
+#, c-format
+msgid "Error: Can't obtain connections: settings service is not running."
+msgstr ""
+"Error: no se pueden obtener conexiones: el servicio de configuración no se "
+"está ejecutando."
+
+#: ../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 "CONEXIÓN"
+
+#: ../cli/src/devices.c:76 ../cli/src/devices.c:104
+msgid "CON-UUID"
+msgstr "CON-UUID"
+
+#: ../cli/src/devices.c:89
+msgid "VENDOR"
+msgstr "PROVEEDOR"
+
+#: ../cli/src/devices.c:90
+msgid "PRODUCT"
+msgstr "PRODUCTO"
+
+#: ../cli/src/devices.c:91
msgid "DRIVER"
msgstr "CONTROLADOR"
-#. 3
-#: ../cli/src/devices.c:105
+#: ../cli/src/devices.c:92
+msgid "DRIVER-VERSION"
+msgstr "VERSIÓN DE CONTROLADOR"
+
+#: ../cli/src/devices.c:93
+msgid "FIRMWARE-VERSION"
+msgstr "VERSIÓN DE FIRMWARE"
+
+#: ../cli/src/devices.c:94
msgid "HWADDR"
msgstr "HWADDR"
-#. 0
+#: ../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"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/devices.c:97
+msgid "REASON"
+msgstr "RAZÓN"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/devices.c:98
+msgid "UDI"
+msgstr "UDI"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/devices.c:99
+msgid "IP-IFACE"
+msgstr "IP-IFACE"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/devices.c:100
+msgid "NM-MANAGED"
+msgstr "NM-ADMINISTRADO"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/devices.c:102
+msgid "FIRMWARE-MISSING"
+msgstr "FALTA-FIRMWARE"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
#: ../cli/src/devices.c:115
+msgid "AVAILABLE-CONNECTION-PATHS"
+msgstr "RUTAS DE CONEXIÓN DISPONIBLES"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/devices.c:116
+msgid "AVAILABLE-CONNECTIONS"
+msgstr "CONEXIONES DISPONIBLES"
+
+#: ../cli/src/devices.c:125
msgid "CARRIER-DETECT"
msgstr "DETECTAR-PORTADOR"
-#. 1
-#: ../cli/src/devices.c:116
+#: ../cli/src/devices.c:126
msgid "SPEED"
msgstr "VELOCIDAD"
-#. 0
-#: ../cli/src/devices.c:125
+#: ../cli/src/devices.c:135
msgid "CARRIER"
msgstr "PORTADOR"
-#. 0
-#: ../cli/src/devices.c:135
+#: ../cli/src/devices.c:144 ../cli/src/devices.c:563
msgid "WEP"
msgstr "WEP"
-#. 1
-#: ../cli/src/devices.c:136
+#: ../cli/src/devices.c:145
msgid "WPA"
msgstr "WPA"
-#. 2
-#: ../cli/src/devices.c:137
+#: ../cli/src/devices.c:146 ../cli/src/devices.c:571
msgid "WPA2"
msgstr "WPA2"
-#. 3
-#: ../cli/src/devices.c:138
+#: ../cli/src/devices.c:147
msgid "TKIP"
msgstr "TKIP"
-#. 4
-#: ../cli/src/devices.c:139
+#: ../cli/src/devices.c:148
msgid "CCMP"
msgstr "CCMP"
-#. 0
-#: ../cli/src/devices.c:149
+#: ../cli/src/devices.c:149 ../cli/src/devices.c:239
+msgid "AP"
+msgstr "AP"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/devices.c:150
+msgid "ADHOC"
+msgstr "ADHOC"
+
+#: ../cli/src/devices.c:159
msgid "CTR-FREQ"
msgstr "CTR-FREC"
-#. 1
-#: ../cli/src/devices.c:150
+#: ../cli/src/devices.c:160
msgid "RSSI"
msgstr "RSSI"
-#. 2
-#: ../cli/src/devices.c:151
+#: ../cli/src/devices.c:161
msgid "CINR"
msgstr "CINR"
-#. 3
-#: ../cli/src/devices.c:152
+#: ../cli/src/devices.c:162
msgid "TX-POW"
msgstr "TX-POW"
-#. 4
-#: ../cli/src/devices.c:153
+#: ../cli/src/devices.c:163
msgid "BSID"
msgstr "BSID"
-#. 0
-#: ../cli/src/devices.c:163 ../cli/src/devices.c:174
-msgid "ADDRESS"
-msgstr "DIRECCIÓN"
-
-#. 1
-#: ../cli/src/devices.c:164 ../cli/src/devices.c:175
-msgid "PREFIX"
-msgstr "PREFIJO"
-
-#. 2
-#: ../cli/src/devices.c:165 ../cli/src/devices.c:176
-msgid "GATEWAY"
-msgstr "PUERTA DE ENLACE"
-
-#. 0
-#: ../cli/src/devices.c:185 ../cli/src/devices.c:194
-msgid "DNS"
-msgstr "DNS"
-
-#. 0
-#: ../cli/src/devices.c:203
+#: ../cli/src/devices.c:172 ../tui/nmt-page-wifi.c:221
msgid "SSID"
msgstr "SSID"
-#. 1
-#: ../cli/src/devices.c:204
+#: ../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:205
+#: ../cli/src/devices.c:175
msgid "MODE"
msgstr "MODO"
-#. 3
-#: ../cli/src/devices.c:206
+#: ../cli/src/devices.c:176
+msgid "CHAN"
+msgstr "CHAN"
+
+#: ../cli/src/devices.c:177
msgid "FREQ"
msgstr "FREC"
-#. 4
-#: ../cli/src/devices.c:207
+#: ../cli/src/devices.c:178
msgid "RATE"
msgstr "TASA"
-#. 5
-#. 1
-#: ../cli/src/devices.c:208 ../cli/src/devices.c:226
+#: ../cli/src/devices.c:179 ../cli/src/devices.c:199
msgid "SIGNAL"
msgstr "SEÑAL"
-#. 6
-#: ../cli/src/devices.c:209
+#: ../cli/src/devices.c:180
+msgid "BARS"
+msgstr "BARS"
+
+#: ../cli/src/devices.c:181
msgid "SECURITY"
msgstr "SEGURIDAD"
-#. 7
-#: ../cli/src/devices.c:210
+#: ../cli/src/devices.c:182
msgid "WPA-FLAGS"
msgstr "INDICADORES-WPA"
-#. 8
-#: ../cli/src/devices.c:211
+#: ../cli/src/devices.c:183
msgid "RSN-FLAGS"
msgstr "INDICADORES-RSN"
-#. 10
-#. 4
-#: ../cli/src/devices.c:213 ../cli/src/devices.c:229
+#: ../cli/src/devices.c:185 ../cli/src/devices.c:202
msgid "ACTIVE"
msgstr "ACTIVO"
-#: ../cli/src/devices.c:246
+#: ../cli/src/devices.c:186
+msgid "*"
+msgstr "*"
+
+#: ../cli/src/devices.c:198 ../cli/src/devices.c:242
+msgid "NSP"
+msgstr "PSR"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/devices.c:213
+msgid "SLAVES"
+msgstr "ESCLAVOS"
+
+# auto translated by TM merge from project: RHN Satellite UI, version: 5.5, DocId: java/code/src/com/redhat/rhn/frontend/strings/java/StringResource
+#: ../cli/src/devices.c:222
+msgid "ID"
+msgstr "ID"
+
+#: ../cli/src/devices.c:237
+msgid "CAPABILITIES"
+msgstr "FUNCIONALIDADES"
+
+#: ../cli/src/devices.c:238
+msgid "WIFI-PROPERTIES"
+msgstr "PROPIEDADES-WIFI"
+
+#: ../cli/src/devices.c:240
+msgid "WIRED-PROPERTIES"
+msgstr "PROPIEDADES ALÃMBRICAS"
+
+#: ../cli/src/devices.c:241
+msgid "WIMAX-PROPERTIES"
+msgstr "PROPIEDADES-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 "CONEXIONES"
+
+#: ../cli/src/devices.c:274
#, 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>] [hwaddr <hwaddr>]]\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 | 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"
-" wimax [list [iface <iface>] [nsp <name>]]\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"
+" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
msgstr ""
-"Uso: nmcli dev { COMANDO | help }\n"
+"Uso: nmcli device { COMMAND | 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>] [hwaddr <hwaddr>]]\n"
-" wimax [list [iface <iface>] [nsp <name>]]\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"
+" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
-#: ../cli/src/devices.c:274
-msgid "unmanaged"
-msgstr "sin gestión"
-
-#: ../cli/src/devices.c:276
-msgid "unavailable"
-msgstr "no disponible"
-
-#: ../cli/src/devices.c:278 ../cli/src/network-manager.c:108
-msgid "disconnected"
-msgstr "desconectado"
-
-#: ../cli/src/devices.c:280
-msgid "connecting (prepare)"
-msgstr "conectando (preparar)"
-
-#: ../cli/src/devices.c:282
-msgid "connecting (configuring)"
-msgstr "conectando (configurando)"
-
-#: ../cli/src/devices.c:284
-msgid "connecting (need authentication)"
-msgstr "conectando (necesita autenticación)"
-
-#: ../cli/src/devices.c:286
-msgid "connecting (getting IP configuration)"
-msgstr "conectando (obteniendo configuración IP)"
+#: ../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"
+"Mostrar estatus para todos los dispositivos.\n"
+"Las siguientes columnas aparecen de forma predeterminada:\n"
+" DEVICE - nombre de interfaz\n"
+" TYPE - tipo de dispositivo\n"
+" STATE - estado de dispositivo\n"
+"CONNECTION - conexión activada en dispositivo (si hay alguna)\n"
+"Las columnas desplegadas pueden cambiarse mediante la opción global '--"
+"fields'. 'status' es\n"
+"el comando predeterminado, lo cual significa que 'nmcli device' llama a "
+"'nmcli device status'.\n"
+"\n"
-#: ../cli/src/devices.c:288
-msgid "connecting (checking IP connectivity)"
-msgstr "conectando (comprobando conectividad IP)"
+#: ../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: nmcli device show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTOS := [<ifname>]\n"
+"\n"
+"Muestra detalles del o los dispositivo(s).\n"
+"El comando lista información para todos los dispositivos o para un "
+"dispositivo determinado.\n"
+"\n"
-#: ../cli/src/devices.c:290
-msgid "connecting (starting secondary connections)"
-msgstr "conectando (iniciando conexiones secundarias)"
+#: ../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 { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTOS := <ifname>\n"
+"\n"
+"Conectar el dispositivo.\n"
+"NetworkManager intentará buscar una conexión que será activada.\n"
+"También considerará conexiones que no estén configuradas para auto-connect.\n"
+"\n"
-#: ../cli/src/devices.c:292 ../cli/src/network-manager.c:104
-msgid "connected"
-msgstr "conectado"
+#: ../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 { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTOS := <ifname>\n"
+"\n"
+"Desconectar el dispositivo.\n"
+"El comando se desconecta y evita que se autoactiven\n"
+"otras conexiones sin la intervención manual del usuario.\n"
+"\n"
-#: ../cli/src/devices.c:296
-msgid "connection failed"
-msgstr "conexión falló"
+#: ../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 { ARGUMENTS | help }\n"
+"\n"
+"Realiza operación en dispositivos Wi-Fi.\n"
+"\n"
+"ARGUMENTOS := [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
+"Lista puntos de acceso Wi-Fi disponibles. Las opciones 'ifname' y 'bssid' "
+"pueden utilizarse para listar\n"
+"las AP para una interfaz particular o con un BSSID específico.\n"
+"\n"
+"ARGUMENTOS := connect <(B)SSID> [password <password>] [wep-key-type "
+"key|phrase] [ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+"Conectar a una red Wi-Fi especificada por SSI o BSSID. El comando crea\n"
+"una nueva conexión y luego la activa en un dispositivo. Este es un \n"
+"equivalente de línea de comandos de hacer clic en un SSID en un cliente de \n"
+"GUI.El comando siempre crea\n"
+"una nueva conexión y por lo tanto es muy útil para conectarse a nuevas redes \n"
+"Wi-Fi.\n"
+"Si ya existe una conexión para la red, es mejor devolver el perfil existente \n"
+"así: nmcli con up id <name>. Observe que solo abre, las redes WEP y WPA-PSK \n"
+"tienen soporte en este momento. También se supone que configuración IP se \n"
+"obtiene vía DHCP. Solicita que NetworkManager reescanée inmediatamente los \n"
+"puntos de acceso disponibles.NetworkManager escanea periodicamente redes de \n"
+"Wi-Fi, pero en algunos casos puede ser útil comenzar el escaneo de forma \n"
+"manual. Observe que este comando no muestra las AP, use la lista de \n"
+"dispositivos nmcli Wi-Fi para ello.\n"
+"\n"
-#: ../cli/src/devices.c:321 ../cli/src/devices.c:331 ../cli/src/devices.c:491
-#: ../cli/src/devices.c:535
-msgid "Unknown"
-msgstr "desconocido"
+#: ../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 operación en dispositivos WiMAX.\n"
+"\n"
+"ARGUMENTOS := [list [ifname <ifname>] [nsp <name>]]\n"
+"\n"
+"Lista los NSP de WiMAX disponibles. Las opciones 'ifname' y 'nsp' pueden ser "
+"utilizadas para listar redes\n"
+"para una determinada interfaz, o con un NSP específico.\n"
+"\n"
-#: ../cli/src/devices.c:364
+#: ../cli/src/devices.c:480
msgid "(none)"
msgstr "(ninguno)"
-#: ../cli/src/devices.c:389
-#, c-format
-msgid "%s: error converting IP4 address 0x%X"
-msgstr "%s: error convirtiendo dirección IP4 0x%X"
-
-#: ../cli/src/devices.c:460
+#: ../cli/src/devices.c:547
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:461
+#: ../cli/src/devices.c:548
#, c-format
msgid "%u Mbit/s"
msgstr "%u Mbit/s"
-#: ../cli/src/devices.c:470
-msgid "Encrypted: "
-msgstr "Encriptado: "
-
-#: ../cli/src/devices.c:475
-msgid "WEP "
-msgstr "WEP "
+#: ../cli/src/devices.c:567
+msgid "WPA1"
+msgstr "WPA1"
-#: ../cli/src/devices.c:477
-msgid "WPA "
-msgstr "WPA "
+#: ../cli/src/devices.c:576
+msgid "802.1X"
+msgstr "802.1X"
-#: ../cli/src/devices.c:479
-msgid "WPA2 "
-msgstr "WPA2 "
-
-#: ../cli/src/devices.c:482
-msgid "Enterprise "
-msgstr "Empresa "
-
-#: ../cli/src/devices.c:491
+#: ../cli/src/devices.c:592
msgid "Ad-Hoc"
msgstr "Ad-Hoc"
-#: ../cli/src/devices.c:491
-msgid "Infrastructure"
-msgstr "Infraestructura"
+#: ../cli/src/devices.c:593
+msgid "Infra"
+msgstr "Infra"
-#: ../cli/src/devices.c:526
+#: ../cli/src/devices.c:625
msgid "Home"
msgstr "Casa"
-#: ../cli/src/devices.c:529
+#: ../cli/src/devices.c:628
msgid "Partner"
msgstr "Asociado"
-#: ../cli/src/devices.c:532
+#: ../cli/src/devices.c:631
msgid "Roaming"
msgstr "Roaming"
-#: ../cli/src/devices.c:602
-#, c-format
-msgid "Error: 'dev list': %s"
-msgstr "Error: «dev list»: %s"
-
-#: ../cli/src/devices.c:604
-#, c-format
-msgid "Error: 'dev list': %s; allowed fields: %s"
-msgstr "Error: «dev list»: %s; campos permitidos: %s"
-
-#: ../cli/src/devices.c:613
+#: ../cli/src/devices.c:725
msgid "Device details"
msgstr "Detalles de los dispositivos"
-#: ../cli/src/devices.c:647 ../cli/src/devices.c:1142 ../cli/src/utils.c:343
+#: ../cli/src/devices.c:737
+#, c-format
+msgid "Error: 'device show': %s"
+msgstr "Error: '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 "(desconocido)"
-#: ../cli/src/devices.c:648
-msgid "unknown)"
-msgstr "desconocido"
-
-#: ../cli/src/devices.c:674
+#: ../cli/src/devices.c:827
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
-#. Print header
-#. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:747
+#: ../cli/src/devices.c:913
msgid "on"
msgstr "encendido"
-#: ../cli/src/devices.c:747
+#: ../cli/src/devices.c:913
msgid "off"
msgstr "apagado"
-#: ../cli/src/devices.c:994
+#: ../cli/src/devices.c:1188
#, c-format
-msgid "Error: 'dev status': %s"
-msgstr "Error: «dev status»: %s"
+msgid "Error: 'device status': %s"
+msgstr "Error: 'device status': %s"
-#: ../cli/src/devices.c:996
-#, c-format
-msgid "Error: 'dev status': %s; allowed fields: %s"
-msgstr "Error: «dev status»: %s; campos permitidos: %s"
-
-#: ../cli/src/devices.c:1019
+#: ../cli/src/devices.c:1206
msgid "Status of devices"
msgstr "Estado de los dispositivos"
-#: ../cli/src/devices.c:1050
+#: ../cli/src/devices.c:1237
#, c-format
-msgid "Error: '%s' argument is missing."
-msgstr "Error: falta el argumento «%s»."
+msgid "Error: invalid extra argument '%s'."
+msgstr "Error: invalid extra argument '%s'."
-#: ../cli/src/devices.c:1091 ../cli/src/devices.c:1243
-#: ../cli/src/devices.c:1380 ../cli/src/devices.c:1599
+#: ../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 "Error: no se encontró el dispositivo «%s»."
-#: ../cli/src/devices.c:1114
+#: ../cli/src/devices.c:1319
+#, c-format
+msgid "Success: Device '%s' successfully activated."
+msgstr "Exito: Dispositivo '%s' ha sido activado correctamente."
+
+#: ../cli/src/devices.c:1333
+#, c-format
+msgid "Error: Device activation failed: %s"
+msgstr "Error: Device activation failed: %s"
+
+#: ../cli/src/devices.c:1350
+#, c-format
+msgid "Device '%s' has been connected.\n"
+msgstr "Dispositivo '%s' ha sido conectado.\n"
+
+#: ../cli/src/devices.c:1377 ../cli/src/devices.c:1512
+msgid "Interface: "
+msgstr "Interfaz:"
+
+#: ../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 "Error: No interface specified."
+
+#: ../cli/src/devices.c:1396 ../cli/src/devices.c:1531
+#, c-format
+msgid "Error: extra argument not allowed: '%s'."
+msgstr "Error: extra argument not allowed: '%s'."
+
+#: ../cli/src/devices.c:1459
#, c-format
msgid "Success: Device '%s' successfully disconnected."
msgstr "Éxito: dispositivo «%s» desconectado correctamente."
-#: ../cli/src/devices.c:1139
+#: ../cli/src/devices.c:1471
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "Error: falló la desconexión del dispositivo «%s» (%s): %s"
-#: ../cli/src/devices.c:1147
+#: ../cli/src/devices.c:1485
#, c-format
-msgid "Device state: %d (%s)\n"
-msgstr "Estado del dispositivo: %d (%s)\n"
+msgid "Device '%s' has been disconnected.\n"
+msgstr "Dispositivo '%s' ha sido desconectado.\n"
+
+#: ../cli/src/devices.c:1628
+msgid "Wi-Fi scan list"
+msgstr "Lista de escán de Wi-Fi"
-#: ../cli/src/devices.c:1212
+#: ../cli/src/devices.c:1666
#, c-format
-msgid "Error: iface has to be specified."
-msgstr "Error: se debe especificar iface."
+msgid "Error: 'device wifi': %s"
+msgstr "Error: 'device wifi': %s"
-#: ../cli/src/devices.c:1338
+#: ../cli/src/devices.c:1719 ../cli/src/devices.c:1788
#, c-format
-msgid "Error: 'dev wifi': %s"
-msgstr "Error: «dev wifi» «%s»"
+msgid "Error: Access point with bssid '%s' not found."
+msgstr "Error: no se encontró el punto de acceso con bssid «%s»."
-#: ../cli/src/devices.c:1340
+#: ../cli/src/devices.c:1743 ../cli/src/devices.c:2131
+#: ../cli/src/devices.c:2293
#, c-format
-msgid "Error: 'dev wifi': %s; allowed fields: %s"
-msgstr "Error: «dev wifi»: %s; campos permitidos: %s"
+msgid "Error: Device '%s' is not a Wi-Fi device."
+msgstr "Error: Device '%s' is not a Wi-Fi device."
-#: ../cli/src/devices.c:1363
-msgid "WiFi scan list"
-msgstr "lista de análisis WiFi"
+#: ../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 "Conexión con UUID '%s' ha sido creada y activada en dispositivo '%s'\n"
-#: ../cli/src/devices.c:1400 ../cli/src/devices.c:1454
+#: ../cli/src/devices.c:1829
#, c-format
-#| msgid "Error: Access point with hwaddr '%s' not found."
-msgid "Error: Access point with bssid '%s' not found."
-msgstr "Error: no se encontró el punto de acceso con bssid «%s»."
+msgid "Error: Connection activation failed: (%d) %s."
+msgstr "Error: Connection activation failed: (%d) %s."
+
+#: ../cli/src/devices.c:1854
+#, c-format
+msgid "Error: Failed to add/activate new connection: (%d) %s"
+msgstr "Error: Failed to add/activate new connection: (%d) %s"
+
+#: ../cli/src/devices.c:1862
+#, c-format
+msgid "Error: Failed to add/activate new connection: Unknown error"
+msgstr "Error: Failed to add/activate new connection: Unknown error"
+
+#: ../cli/src/devices.c:2013
+msgid "SSID or BSSID: "
+msgstr "SSID o BSSID: "
+
+#: ../cli/src/devices.c:2018
+#, c-format
+msgid "Error: SSID or BSSID are missing."
+msgstr "Error: SSID or BSSID are missing."
+
+#: ../cli/src/devices.c:2042
+#, c-format
+msgid "Error: bssid argument value '%s' is not a valid BSSID."
+msgstr "Error: bssid argument value '%s' is not a valid BSSID."
+
+#: ../cli/src/devices.c:2066
+#, c-format
+msgid ""
+"Error: wep-key-type argument value '%s' is invalid, use 'key' or 'phrase'."
+msgstr ""
+"Error: wep-key-type argument value '%s' is invalid, use 'key' or 'phrase'."
+
+#: ../cli/src/devices.c:2086
+#, c-format
+msgid "Error: %s: %s."
+msgstr "Error: %s: %s."
-#: ../cli/src/devices.c:1417
+#: ../cli/src/devices.c:2101
#, c-format
-msgid "Error: Device '%s' is not a WiFi device."
-msgstr "Error: el dispositivo «%s» no es un dispositivo WiFi."
+msgid "Error: BSSID to connect to (%s) differs from bssid argument (%s)."
+msgstr "Error: BSSID para conectarse a (%s) difiere del argumento bssid (%s)."
-#: ../cli/src/devices.c:1481
+#: ../cli/src/devices.c:2107
#, c-format
-msgid "Error: 'dev wifi' command '%s' is not valid."
-msgstr "Error: comando «dev wifi» «%s» no válido."
+msgid "Error: Parameter '%s' is neither SSID nor BSSID."
+msgstr "Error: Parámetro '%s' no es ni SSID ni BSSID."
-#: ../cli/src/devices.c:1557
+#: ../cli/src/devices.c:2133 ../cli/src/devices.c:2295
#, c-format
-msgid "Error: 'dev wimax': %s"
-msgstr "Error: «dev wimax» «%s»"
+msgid "Error: No Wi-Fi device found."
+msgstr "Error: No se encontró dispositivo Wi-Fi."
-#: ../cli/src/devices.c:1559
+#: ../cli/src/devices.c:2151
#, c-format
-msgid "Error: 'dev wimax': %s; allowed fields: %s"
-msgstr "Error: «dev wimax»: %s; campos permitidos: %s"
+msgid "Error: No network with SSID '%s' found."
+msgstr "Error: No se encontro red con SSID '%s."
-#: ../cli/src/devices.c:1582
+#: ../cli/src/devices.c:2153
+#, c-format
+msgid "Error: No access point with BSSID '%s' found."
+msgstr "Error: No se encontró punto de acceso con BSSID '%s'."
+
+#: ../cli/src/devices.c:2192
+msgid "Password: "
+msgstr "Contraseña:"
+
+#: ../cli/src/devices.c:2321
+#, c-format
+msgid "Error: 'device wifi' command '%s' is not valid."
+msgstr "Error: 'device wifi' command '%s' no es válido."
+
+#: ../cli/src/devices.c:2368
msgid "WiMAX NSP list"
msgstr "Lista PSR WiMAX"
-#: ../cli/src/devices.c:1619
+#: ../cli/src/devices.c:2405
+#, c-format
+msgid "Error: 'device wimax': %s"
+msgstr "Error: 'device wimax': %s"
+
+#: ../cli/src/devices.c:2459
#, c-format
msgid "Error: NSP with name '%s' not found."
msgstr "Error: no se encontró el PSR con el nombre «%s»."
-#: ../cli/src/devices.c:1630
+#: ../cli/src/devices.c:2472
#, c-format
msgid "Error: Device '%s' is not a WiMAX device."
msgstr "Error: el dispositivo «%s» no es un dispositivo WiMAX."
-#: ../cli/src/devices.c:1661
+#: ../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 "Error: no se encontró el punto de acceso con nsp «%s»."
-#: ../cli/src/devices.c:1688
+#: ../cli/src/devices.c:2542
#, c-format
-msgid "Error: 'dev wimax' command '%s' is not valid."
-msgstr "Error: comando «dev wimax» «%s» no válido."
+msgid "Error: 'device wimax' command '%s' is not valid."
+msgstr "Error: comando 'device wimax' '%s' no es válido."
-#: ../cli/src/devices.c:1738
+#: ../cli/src/devices.c:2621
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "Error: comando «dev» «%s» no válido."
@@ -1013,212 +3504,503 @@ msgstr "Error: comando «dev» «%s» no válido."
msgid "RUNNING"
msgstr "EJECUTANDO"
-#. 0
#: ../cli/src/network-manager.c:38
msgid "VERSION"
msgstr "VERSIÓN"
-#. 2
#: ../cli/src/network-manager.c:40
-msgid "NET-ENABLED"
-msgstr "RED-ACTIVADA"
+msgid "STARTUP"
+msgstr "INICIO"
-#. 3
#: ../cli/src/network-manager.c:41
-msgid "WIFI-HARDWARE"
-msgstr "HARDWARE-WIFI"
+msgid "CONNECTIVITY"
+msgstr "CONECTIVIDAD"
-#. 4
#: ../cli/src/network-manager.c:42
-msgid "WIFI"
-msgstr "WIFI"
+msgid "NETWORKING"
+msgstr "RED"
-#. 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"
+
+#: ../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:67
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/network-manager.c:70
+msgid "PERMISSION"
+msgstr "PERMISO"
+
+#: ../cli/src/network-manager.c:71
+msgid "VALUE"
+msgstr "VALOR"
+
+#: ../cli/src/network-manager.c:79
+msgid "LEVEL"
+msgstr "NIVEL"
+
+#: ../cli/src/network-manager.c:80
+msgid "DOMAINS"
+msgstr "DOMINIOS"
+
+#: ../cli/src/network-manager.c:95
#, c-format
msgid ""
-"Usage: nmcli nm { COMMAND | help }\n"
+"Usage: nmcli general { COMMAND | help }\n"
+"\n"
+"COMMAND := { status | hostname | permissions | logging }\n"
"\n"
-" COMMAND := { status | enable | sleep | wifi | wwan | wimax }\n"
+" status\n"
+"\n"
+" hostname [<hostname>]\n"
"\n"
-" COMMAND := { status | enable | sleep | wifi | wwan }\n"
+" permissions\n"
+"\n"
+" logging [level <log level>] [domains <log domains>]\n"
+"\n"
+msgstr ""
+"Uso: nmcli general { COMMAND | help }\n"
+"\n"
+"COMANDO := { status | hostname | 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"
+" hostname [<hostname>]\n"
+"\n"
+" permissions\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: nmcli nm { COMANDO | help }\n"
+"Uso: estatus general de nmcli { help }\n"
"\n"
-" COMANDO := { status | enable | sleep | wifi | wwan | wimax }\n"
+"Mostrar todo el estado de NetworkManager.\n"
+"'status' es la acción predeterminada, lo cual significa que 'nmcli gen' "
+"llama a 'nmcli gen status'\n"
"\n"
-" COMANDO := { status | enable | sleep | wifi | wwan }\n"
+
+#: ../cli/src/network-manager.c:117
+#, c-format
+msgid ""
+"Usage: nmcli general hostname { ARGUMENTS | 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"
+"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: nombre de host general nmcli { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTOS := [<hostname>]\n"
+"\n"
+"Obtener o cambiar nombre de host de sistema de forma persistente.\n"
+"Sin argumentos, este imprime el nombre de host configurado actualmente. "
+"Cuando pasa un \n"
+"nombre de host, NetworkManager lo establecerá como un nuevo nombre de host "
+"de sistema persistente.\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: permisos generales nmcli { help }\n"
+"\n"
+"Mostrar permisos de llamador para operaciones 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: registro general nmcli { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTOS := [level <log level>] [domains <log domains>]\n"
+"\n"
+"Obtener o cambiar el nivel de registro y dominios de NetworkManager.\n"
+"Sin ningún argumento se muestran el nivel de registro actual y los dominios. "
+"Con el fin de cambiar el estado de registro,\n"
+"proporcione el nivel y el dominio. Por favor, consulte la página de manual\n"
+"para obtener una lista de los dominios de registro posibles.\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"
+"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: red nmcli en { help }\n"
+"\n"
+"Cambio de redes encendido.\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: nmcli networking off { help }\n"
+"\n"
+"Switch networking off.\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 { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTOS := [check]\n"
+"\n"
+"Obtener estado de conectividad de red.\n"
+"El argumento 'check' hace que NetworkManager vuelva a verificar la "
+"conectividad.\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"
+"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 { ARGUMENTS | help }them on/off.\n"
+"\n"
+"ARGUMENTOS := [on | off]\n"
+"\n"
+"Obtener estatus de todos los interruptores de radio encendidos o apagados.\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"
+"ARGUMENTOS := [on | off]\n"
+"\n"
+"Obtener estatus de interruptor de radio Wi-Fi, encendido o apagado.\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"
+"ARGUMENTOS := [on | off]\n"
+"\n"
+"Obtener estatus de interruptor de radio de ancho de banda móvil encendido o "
+"apagado.\n"
"\n"
-#: ../cli/src/network-manager.c:96
+#: ../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"
+"ARGUMENTOS := [on | off]\n"
+"\n"
+"Obtener estatus del interruptor de radio WiMAX, encendido o apagado.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:264
msgid "asleep"
msgstr "dormido"
-#: ../cli/src/network-manager.c:98
+#: ../cli/src/network-manager.c:266
msgid "connecting"
msgstr "conectando"
-#: ../cli/src/network-manager.c:100
+#: ../cli/src/network-manager.c:268
msgid "connected (local only)"
msgstr "conectado (sólo local)"
-#: ../cli/src/network-manager.c:102
+#: ../cli/src/network-manager.c:270
msgid "connected (site only)"
msgstr "conectado (sólo el sitio)"
-#: ../cli/src/network-manager.c:106
+#: ../cli/src/network-manager.c:274
msgid "disconnecting"
msgstr "desconectando"
-#: ../cli/src/network-manager.c:146
-#, c-format
-msgid "Error: 'nm status': %s"
-msgstr "Error: «nm status»: %s"
+#: ../cli/src/network-manager.c:290
+msgid "portal"
+msgstr "portal"
+
+#: ../cli/src/network-manager.c:292
+msgid "limited"
+msgstr "limitado"
-#: ../cli/src/network-manager.c:148
+#: ../cli/src/network-manager.c:294
+msgid "full"
+msgstr "total"
+
+#: ../cli/src/network-manager.c:332
#, c-format
-msgid "Error: 'nm status': %s; allowed fields: %s"
-msgstr "Error: «nm status»: %s; campos permitidos: %s"
+msgid "Error: only these fields are allowed: %s"
+msgstr "Error: solo estos campos están permitidos: %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: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 "activado"
-#: ../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: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 "desactivado"
-#: ../cli/src/network-manager.c:181
+#: ../cli/src/network-manager.c:367
msgid "NetworkManager status"
msgstr "Estado de NetworkManager"
-#. Print header
-#: ../cli/src/network-manager.c:184
+#: ../cli/src/network-manager.c:372
msgid "running"
msgstr "ejecutando"
-#: ../cli/src/network-manager.c:184
+#: ../cli/src/network-manager.c:372
msgid "not running"
msgstr "no ejecutando"
-#: ../cli/src/network-manager.c:215 ../cli/src/utils.c:323
+# auto translated by TM merge from project: gnome-packagekit, version: 3.8.2, DocId: gnome-packagekit
+#: ../cli/src/network-manager.c:375
+msgid "starting"
+msgstr "Iniciando"
+
+# auto translated by TM merge from project: libvirt, version: 1.1.1, DocId: libvirt
+#: ../cli/src/network-manager.c:375
+msgid "started"
+msgstr "Iniciado"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/network-manager.c:446
+msgid "auth"
+msgstr "auth"
+
+#: ../cli/src/network-manager.c:475
#, c-format
-msgid "Error: Couldn't connect to system bus: %s"
-msgstr "Error: no se pudo conectar con el bus del sistema: %s"
+msgid "Error: 'general permissions': %s"
+msgstr "Error: 'general permissions': %s"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/network-manager.c:489
+msgid "NetworkManager permissions"
+msgstr "Permisos de NetworkManager"
-#: ../cli/src/network-manager.c:226
+#: ../cli/src/network-manager.c:530
#, c-format
-msgid "Error: Couldn't create D-Bus object proxy."
-msgstr "Error: no se pudo crear un objeto proxy en D-Bus."
+msgid "Error: 'general logging': %s"
+msgstr "Error: 'general logging': %s"
-#: ../cli/src/network-manager.c:232
+#: ../cli/src/network-manager.c:545
+msgid "NetworkManager logging"
+msgstr "Registro de NetworkManager"
+
+#: ../cli/src/network-manager.c:565
#, c-format
-msgid "Error in sleep: %s"
-msgstr "Error al dormir: %s"
+msgid "Error: failed to set hostname: (%d) %s"
+msgstr "Error: No se puedo establecer nombre de host: (%d) %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:682
#, c-format
-msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
-msgstr "Error: «--fields» valor «%s» no es válido aquí; campos permitidos: %s"
+msgid "Error: access denied to set logging; %s"
+msgstr "Error: acceso denegado para establecer el registro; %s"
-#: ../cli/src/network-manager.c:284
-msgid "Networking enabled"
-msgstr "Red activada"
+#: ../cli/src/network-manager.c:684
+#, c-format
+msgid "Error: %s"
+msgstr "Error: %s"
-#: ../cli/src/network-manager.c:300
+#: ../cli/src/network-manager.c:692
#, c-format
-msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
-msgstr "Error: parámetro «enable» no válido: «%s»; use «true» o «false»."
+msgid "Error: 'general' command '%s' is not valid."
+msgstr "Error: comando 'general' '%s' no es válido."
-#: ../cli/src/network-manager.c:310
+#: ../cli/src/network-manager.c:710
#, c-format
-msgid "Error: Sleeping status is not exported by NetworkManager."
-msgstr "Error: NetworkManager no exporta el estado para dormir."
+msgid "Error: '--fields' value '%s' is not valid here (allowed field: %s)"
+msgstr "Error: valor '--fields' '%s' no es válido aquí (campo permitido: %s)"
-#: ../cli/src/network-manager.c:318
+#: ../cli/src/network-manager.c:735
#, c-format
-msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
-msgstr "Error: parámetro «wifi» no válido: «%s»."
+msgid "Error: invalid '%s' argument: '%s' (use on/off)."
+msgstr "Error: argumento '%s' es inválido: '%s' (usar on/off)."
-#: ../cli/src/network-manager.c:339
-msgid "WiFi enabled"
-msgstr "WiFi activado"
+# auto translated by TM merge from project: RHN Satellite Installation Guide, version: 5.5, DocId: Trouble_Shooting
+#: ../cli/src/network-manager.c:746
+msgid "Connectivity"
+msgstr "Conectividad"
-#: ../cli/src/network-manager.c:355
-#, c-format
-msgid "Error: invalid 'wifi' parameter: '%s'."
-msgstr "Error: parámetro «wifi» no válido: «%s»."
+# auto translated by TM merge from project: RHN Satellite UI, version: 5.5, DocId: java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource
+#: ../cli/src/network-manager.c:758
+msgid "Networking"
+msgstr "Redes"
-#: ../cli/src/network-manager.c:377
-msgid "WWAN enabled"
-msgstr "WWAN activado"
+#: ../cli/src/network-manager.c:783
+#, c-format
+msgid "Error: 'networking connectivity' command '%s' is not valid."
+msgstr "Error: el comando 'networking connectivity' '%s' no es válido."
-#: ../cli/src/network-manager.c:393
+#: ../cli/src/network-manager.c:799
#, c-format
-msgid "Error: invalid 'wwan' parameter: '%s'."
-msgstr "Error: parámetro «wwan» no válido: «%s»."
+msgid "Error: 'networking' command '%s' is not valid."
+msgstr "Error: el comando 'networking''%s' no es válido."
-#: ../cli/src/network-manager.c:416
-msgid "WiMAX enabled"
-msgstr "WiMAX activado"
+#: ../cli/src/network-manager.c:825 ../cli/src/network-manager.c:845
+msgid "Radio switches"
+msgstr "Interruptores de radio"
-#: ../cli/src/network-manager.c:432
-#, c-format
-msgid "Error: invalid 'wimax' parameter: '%s'."
-msgstr "Error: parámetro «wimax» no válido: «%s»."
+#: ../cli/src/network-manager.c:863
+msgid "Wi-Fi radio switch"
+msgstr "Interruptor de radio Wi-Fi"
+
+#: ../cli/src/network-manager.c:879
+msgid "WWAN radio switch"
+msgstr "Interruptor de radio WWAN"
-#: ../cli/src/network-manager.c:445
+#: ../cli/src/network-manager.c:896
+msgid "WiMAX radio switch"
+msgstr "Interruptor de radio WiMAXh"
+
+#: ../cli/src/network-manager.c:908
#, c-format
-msgid "Error: 'nm' command '%s' is not valid."
-msgstr "Error: comando «nm» command «%s» no válido."
+msgid "Error: 'radio' command '%s' is not valid."
+msgstr "Error: el comando 'radio' '%s' no es válido."
-#: ../cli/src/nmcli.c:64
+#: ../cli/src/nmcli.c:78
#, c-format
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
@@ -1232,218 +4014,797 @@ 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 ""
-"Uso: %s [OPCIONES] OBJETO { COMANDO | help }\n"
+"Uso: %s [OPTIONS] OBJECT { COMMAND | help }\n"
"\n"
-"OPCIONES\n"
-" -t[erse] salida terse \n"
-" -p[retty] salida pretty\n"
+"OPTIONS\n"
+" -t[erse] terse output\n"
+" -p[retty] pretty output\n"
" -m[ode] tabular|multiline output mode\n"
-" -f[ields] <campo1,campo2,...>|all|common especificar los campos que "
-"mostrar\n"
-" -e[scape] yes|no escapar los separadores de "
-"columnas en los valores\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] mostrar la versión del "
-"programa\n"
-" -h[elp] mostrar esta ayuda\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"
-"OBJETO\n"
-" nm estado de NetworkManager\n"
-" con conexiones de NetworkManager\n"
-" dev dispositivos gestionados por NetworkManager\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:109
+#: ../cli/src/nmcli.c:132
#, c-format
msgid "Error: Object '%s' is unknown, try 'nmcli help'."
msgstr "Error: el objeto «%s» desconocido, intente «nmcli help»."
-#: ../cli/src/nmcli.c:139
+#: ../cli/src/nmcli.c:162
#, c-format
msgid "Error: Option '--terse' is specified the second time."
msgstr "Error: la opción «--terse» se especifica la segunda vez."
-#: ../cli/src/nmcli.c:144
+#: ../cli/src/nmcli.c:167
#, c-format
msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
msgstr "Error: la opción «--terse» es mutuamente exclusiva con «--pretty»."
-#: ../cli/src/nmcli.c:152
+#: ../cli/src/nmcli.c:175
#, c-format
msgid "Error: Option '--pretty' is specified the second time."
msgstr "Error: la opción «--pretty» se especifica la segunda vez."
-#: ../cli/src/nmcli.c:157
+#: ../cli/src/nmcli.c:180
#, c-format
msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
msgstr "Error: la opción «--pretty» es mutuamente exclusiva con «--terse»."
-#: ../cli/src/nmcli.c:167 ../cli/src/nmcli.c:183
+#: ../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 "Error: falta argumento para opción «%s»."
-#: ../cli/src/nmcli.c:176 ../cli/src/nmcli.c:192
+#: ../cli/src/nmcli.c:199 ../cli/src/nmcli.c:215
#, c-format
msgid "Error: '%s' is not valid argument for '%s' option."
msgstr "Error: «%s» no es válido argumento para opción «%s»."
-#: ../cli/src/nmcli.c:199
+#: ../cli/src/nmcli.c:222
#, c-format
msgid "Error: fields for '%s' options are missing."
msgstr "Error: faltan campos para opciones «%s»."
-#: ../cli/src/nmcli.c:207
+#: ../cli/src/nmcli.c:240
+#, c-format
+msgid "Error: '%s' is not a valid timeout for '%s' option."
+msgstr "Error: '%s' no es un tiempo de espera válido para opción '%s'."
+
+#: ../cli/src/nmcli.c:247
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "herramienta nmcli, versión %s\n"
-#: ../cli/src/nmcli.c:213
+#: ../cli/src/nmcli.c:253
#, c-format
msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
msgstr "Error: opción «%s» desconocida, intente «nmcli -help»."
-#: ../cli/src/nmcli.c:232
+#: ../cli/src/nmcli.c:288
+#, c-format
+msgid "\n"
+"Error: nmcli terminated by signal %d."
+msgstr "\n"
+"Error: nmcli terminado por señal %d."
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/nmcli.c:318 ../src/main.c:130
#, c-format
-msgid "Caught signal %d, shutting down..."
-msgstr "Señal capturada %d, apagando..."
+msgid "Failed to set signal mask: %d"
+msgstr "Falló al establecer máscara de señal: %d"
-#: ../cli/src/nmcli.c:257
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/nmcli.c:325 ../src/main.c:139
+#, c-format
+msgid "Failed to create signal handling thread: %d"
+msgstr "Falló al crear hilo de manejo de señal: %d"
+
+#: ../cli/src/nmcli.c:338 ../test/nm-online.c:149
+#, c-format
msgid "Error: Could not create NMClient object."
msgstr "Error: no se pudo crear un objeto NMClient."
-#: ../cli/src/nmcli.c:273
+#: ../cli/src/nmcli.c:354
msgid "Success"
msgstr "Éxito"
-#: ../cli/src/settings.c:447
+#: ../cli/src/settings.c:666
#, c-format
msgid "%d (hex-ascii-key)"
msgstr "%d (clave-hex-ascii)"
-#: ../cli/src/settings.c:449
+#: ../cli/src/settings.c:668
#, c-format
msgid "%d (104/128-bit passphrase)"
msgstr "%d (frase de acceso 104/128-bits)"
-#: ../cli/src/settings.c:452
+#: ../cli/src/settings.c:671 ../cli/src/settings.c:799
#, c-format
msgid "%d (unknown)"
msgstr "%d (desconocido)"
-#: ../cli/src/settings.c:478
+#: ../cli/src/settings.c:697
msgid "0 (unknown)"
msgstr "0 (desconocido)"
-#: ../cli/src/settings.c:484
+#: ../cli/src/settings.c:703
msgid "any, "
msgstr "cualquiera,"
-#: ../cli/src/settings.c:486
+#: ../cli/src/settings.c:705
msgid "900 MHz, "
msgstr "900 MHz, "
-#: ../cli/src/settings.c:488
+#: ../cli/src/settings.c:707
msgid "1800 MHz, "
msgstr "1800 MHz, "
-#: ../cli/src/settings.c:490
+#: ../cli/src/settings.c:709
msgid "1900 MHz, "
msgstr "1900 MHz, "
-#: ../cli/src/settings.c:492
+#: ../cli/src/settings.c:711
msgid "850 MHz, "
msgstr "850 MHz, "
-#: ../cli/src/settings.c:494
+#: ../cli/src/settings.c:713
msgid "WCDMA 3GPP UMTS 2100 MHz, "
msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../cli/src/settings.c:496
+#: ../cli/src/settings.c:715
msgid "WCDMA 3GPP UMTS 1800 MHz, "
msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../cli/src/settings.c:498
+#: ../cli/src/settings.c:717
msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../cli/src/settings.c:500
+#: ../cli/src/settings.c:719
msgid "WCDMA 3GPP UMTS 800 MHz, "
msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../cli/src/settings.c:502
+#: ../cli/src/settings.c:721
msgid "WCDMA 3GPP UMTS 850 MHz, "
msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../cli/src/settings.c:504
+#: ../cli/src/settings.c:723
msgid "WCDMA 3GPP UMTS 900 MHz, "
msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../cli/src/settings.c:506
+#: ../cli/src/settings.c:725
msgid "WCDMA 3GPP UMTS 1700 MHz, "
msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../cli/src/settings.c:508
-#| 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:510
-#| 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:636 ../cli/src/settings.c:835
+#: ../cli/src/settings.c:747
+msgid "0 (NONE)"
+msgstr "0 (NONE)"
+
+#: ../cli/src/settings.c:753
+msgid "REORDER_HEADERS, "
+msgstr "REORDENAR_ENCABEZADOS, "
+
+#: ../cli/src/settings.c:755
+msgid "GVRP, "
+msgstr "GVRP, "
+
+#: ../cli/src/settings.c:757
+msgid "LOOSE_BINDING, "
+msgstr "DESATAR_VINCULACIÓN, "
+
+#: ../cli/src/settings.c:793
+#, c-format
+msgid "%d (disabled)"
+msgstr "%d (inhabilitado)"
+
+#: ../cli/src/settings.c:795
+#, c-format
+msgid "%d (enabled, prefer public IP)"
+msgstr "%d (habilitado, prefiere IP pública)"
+
+#: ../cli/src/settings.c:797
+#, c-format
+msgid "%d (enabled, prefer temporary IP)"
+msgstr "%d (inhabilitado, prefiere temporal IP)"
+
+#: ../cli/src/settings.c:809
+msgid "0 (none)"
+msgstr "0 (none)"
+
+#: ../cli/src/settings.c:815
+msgid "agent-owned, "
+msgstr "agente-adquirido, "
+
+#: ../cli/src/settings.c:817
+msgid "not saved, "
+msgstr "sin guardar,"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/settings.c:819
+msgid "not required, "
+msgstr "no requerido"
+
+#: ../cli/src/settings.c:1124
+msgid "0 (disabled)"
+msgstr "0 (inhabilitado)"
+
+#: ../cli/src/settings.c:1130
+msgid "enabled, "
+msgstr "habilitado,"
+
+#: ../cli/src/settings.c:1132
+msgid "advertise, "
+msgstr "promover, "
+
+#: ../cli/src/settings.c:1134
+msgid "willing, "
+msgstr "dispuesto, "
+
+#: ../cli/src/settings.c:1162
+msgid "-1 (unset)"
+msgstr "-1 (sin establecer)"
+
+#: ../cli/src/settings.c:1270 ../cli/src/settings.c:1453
+#: ../cli/src/settings.c:1493
msgid "auto"
msgstr "auto"
-#: ../cli/src/settings.c:829 ../cli/src/settings.c:832
-#: ../cli/src/settings.c:833 ../cli/src/utils.c:176
-msgid "not set"
-msgstr "no establecido"
+# auto translated by TM merge from project: Skynet topics, version: 1, DocId: 4680-83989
+#: ../cli/src/settings.c:1283
+msgid "default"
+msgstr "predeterminado"
-#: ../cli/src/utils.c:128
+#: ../cli/src/settings.c:1614
#, c-format
-msgid "field '%s' has to be alone"
-msgstr "el campo «%s» tiene que estar solo"
+msgid "Do you also want to set '%s' to '%s'? [yes]: "
+msgstr "¿Desea también establecer '%s' a '%s'? [yes]: "
-#: ../cli/src/utils.c:131
+#: ../cli/src/settings.c:1616
#, c-format
-msgid "invalid field '%s'"
-msgstr "campo no válido «%s»"
+msgid "Do you also want to clear '%s'? [yes]: "
+msgstr "¿Desea también limpiar '%s' ? [yes]: "
-#: ../cli/src/utils.c:150
+#: ../cli/src/settings.c:1814 ../cli/src/settings.c:2069
+#: ../cli/src/settings.c:3673
#, c-format
-msgid "Option '--terse' requires specifying '--fields'"
-msgstr "Opción «--terse» requiere especificar «--fields»"
+msgid "'%s' is not valid"
+msgstr "'%s' no es válido"
-#: ../cli/src/utils.c:154
+#: ../cli/src/settings.c:1837
#, c-format
-msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
-msgstr "Opción «--terse» requiere valores de «--fields» específicos, no «%s»"
+msgid "'%d' is not valid; use <%d-%d>"
+msgstr "'%d' no es válido; use <%d-%d>"
+
+#: ../cli/src/settings.c:1859
+#, c-format
+msgid "'%u' is not valid; use <%d-%d>"
+msgstr "'%u' no es válido; use <%d-%d>"
+
+#: ../cli/src/settings.c:1925
+#, c-format
+msgid "'%s' is not valid; use <option>=<value>"
+msgstr "'%s' no es válido; use <option>=<value>"
+
+#: ../cli/src/settings.c:1959
+#, c-format
+msgid "index '%s' is not valid"
+msgstr "index '%s' no es válido"
+
+#: ../cli/src/settings.c:1964
+msgid "no item to remove"
+msgstr "No se encontró ningún elemento para eliminar"
+
+#: ../cli/src/settings.c:1968
+#, c-format
+msgid "index '%d' is not in range <0-%d>"
+msgstr "index '%d' no está en el rango <0-%d>"
+
+#: ../cli/src/settings.c:1983
+#, c-format
+msgid "invalid option '%s'"
+msgstr "Opción inválida: '%s'"
+
+#: ../cli/src/settings.c:1985
+msgid "missing option"
+msgstr "Falta opción"
+
+#: ../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' no es un número válido (o está fuera de rango)"
+
+#: ../cli/src/settings.c:2089
+#, c-format
+msgid "'%s' is not a valid Ethernet MAC"
+msgstr "'%s' no es un Ethernet MAC 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' no es un nombre de interfaz 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' no es un número "
+
+#: ../cli/src/settings.c:2185
+#, c-format
+msgid "'%s' is not a valid hex character"
+msgstr "'%s' no es un caracter hex"
+
+#: ../cli/src/settings.c:2215
+#, c-format
+msgid "'%s' is not a valid MAC"
+msgstr "'%s' no es un 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' no es un 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 ""
+"Ingresar una lista de permisos de usuario. Esta es una lista de nombres de "
+"usuario formateada como:\n"
+" [user:]<user name 1>, [user:]<user name 2>,...\n"
+"Los elementos pueden separarse por comas o espacios.\n"
+"\n"
+"Ejemplo: alice bob charlie\n"
+
+#: ../cli/src/settings.c:2332
+#, c-format
+msgid "'%s' is not valid master; use ifname or connection UUID"
+msgstr "'%s' no es un maestro válido; use ifname o UUID de conexión"
+
+#: ../cli/src/settings.c:2453
+msgid "private key password not provided"
+msgstr "La contraseña de clave privada no se ha provisto"
+
+#: ../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 ""
+"Ingrese ruta a una clave y contraseña privadas (si aún no lo ha hecho):\n"
+" <file path> [<password>]\n"
+"Ejemplo: /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 ""
+"Ingrese bytes como una lista de valores hexadecimales.\n"
+"Se aceptan dos formatos:\n"
+"(a) una cadena de dígitos hexadecimales, donde cada dos dígitos representa "
+"un byte\n"
+"(b) lista de bytes separada por espacio escrita como dígitos hexadecimales "
+"(con prefijo opcional 0x/0X, y un 0 inicial opcional).\n"
+"\n"
+"Ejemplos: 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 ""
+"Ingresar una lista de opciones formateadas 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"
+"Ejemplo: mode=2,miimon=120\n"
+
+#: ../cli/src/settings.c:2727
+#, c-format
+msgid "'%s' is not a valid InfiniBand MAC"
+msgstr "'%s' no es un InfiniBand MAC válido"
+
+#: ../cli/src/settings.c:2765
+#, c-format
+msgid "'%s' is not a valid IBoIP P_Key"
+msgstr "'%s' no es una llave IBOIP P_key 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 ""
+"Ingrese una lista de direciones IPv4 de servidores DNS.\n"
+"\n"
+"Ejemplo: 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' no es válido (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 ""
+"Ingrese una lista de direcciones IPv4 formateadas así:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"Falta prefijo aparece como prefijo de 32.\n"
+"\n"
+"Ejemplo: 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' no es válido (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 ""
+"Ingresar una lista de rutas IPv4 formateadas como:\n"
+" ip/[prefix] next-hop [metric],...\n"
+"El prefijo faltante se ve como un prefijo de 32.\n"
+"Métrica faltante aparece como una metrica de 0.\n"
+"\n"
+"Ejemplo: 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 ""
+"Ingrese una lista de direcciones IPv6 de servidores DNS. Si el métodos de "
+"configuración IPv6 es 'auto' estos servidores DNS se añaden a los que son "
+"retornados por configuración automática. Los servidores DNS no pueden ser "
+"utilizados con los métodos de configuración IPv6 'compartidos' o 'enlace "
+"local', ya que hay no una red principal. En los otros métodos de "
+"configuración IPv6, estos servidores DNS sirven como servidores como los "
+"únicos servidores DNS para esta conexión.\n"
+"\n"
+"Ejemplo: 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 ""
+"Ingrese una lista de direcciones IPv6 formateadas así:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"Falta prefijo aparece como prefijo de 128.\n"
+".\n"
+"Ejemplo: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
+
+#: ../cli/src/settings.c:3171
+#, c-format
+msgid "'%s' is not valid (use <dest IP>/prefix <next-hop IP> [metric])"
+msgstr ""
+"'%s' no es un vaĺor 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 ""
+"Ingresar una lista de rutas IPv6 formateadas como:\n"
+" ip/[prefix] next-hop [metric],...\n"
+"El prefijo faltante se ve como un prefijo de 128.\n"
+"Métrica faltante aparece como una metrica de 0.\n"
+"\n"
+"Ejemplo: 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' no es válido; use 0, 1, o 2"
+
+#: ../cli/src/settings.c:3236
+#, c-format
+msgid "'%s' is not a valid channel; use <1-13>"
+msgstr "'%s' no es un canal válido; use <1-13>"
+
+#: ../cli/src/settings.c:3257
+#, c-format
+msgid "'%s' is not valid; use [e, o, n]"
+msgstr "'%s' no es 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 puede aceptar tanto los datos de configuración de JSON como el nombre "
+"de archivo que contiene la configuración. En el último caso el archivo se "
+"lee y el contenido es puesto dentro de esta propiedad.\n"
+"\n"
+"Ejemplos: 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 "no hay prioridad para retirar"
+
+#: ../cli/src/settings.c:3329
+#, c-format
+msgid "index '%d' is not in the range of <0-%d>"
+msgstr "index '%d' no está en el rango de <0-%d>"
+
+#: ../cli/src/settings.c:3444
+#, c-format
+msgid "'%s' is not valid; 3 strings should be provided"
+msgstr "'%s' no es válido; se deben proporcionar 3 cadenas "
+
+#: ../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 ""
+"Ingrese una lista de tres canales (separados por espacio o coma).\n"
+"\n"
+"Ejemplo: 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 ""
+"Ingresar una lista de opciones S/390 formateadas como:\n"
+" opción = <value>, option = <value>,...\n"
+"Las opciones válidas son: %s\n"
+
+#: ../cli/src/settings.c:3559
+#, c-format
+msgid "'%s' is not a valid channel"
+msgstr "'%s' no es un canal válido"
+
+#: ../cli/src/settings.c:3565
+#, c-format
+msgid "'%ld' is not a valid channel"
+msgstr "'%ld' no es un 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 "Clave WEP se cree que sea de '%s'\n"
+
+#: ../cli/src/settings.c:3695
+#, c-format
+msgid "'%s' not among [0 (unknown), 1 (key), 2 (passphrase)]"
+msgstr "'%s' no está entre [0 (desconocido), 1 (clave), 2 (frase de paso)]"
+
+#: ../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 ""
+"Ingrese e tipo de claves WEP. Los valores aceptados son: 0 o Desconocido, 1 "
+"o clave y 2 o frase de paso..\n"
+
+#: ../cli/src/settings.c:3728
+#, c-format
+msgid "'%s' is not a valid PSK"
+msgstr "'%s' no es un PSK válido"
+
+#: ../cli/src/settings.c:3772
+#, c-format
+msgid "'%s' is not a valid DCB flag"
+msgstr "'%s' no es un indicador DCB válido"
-#: ../cli/src/utils.c:334
+#: ../cli/src/settings.c:3795
#, c-format
-msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus"
+msgid "'%s' is not a DCB app priority"
+msgstr "'%s' no es una prioridad app DCB"
+
+#: ../cli/src/settings.c:3821
+msgid "must contain 8 comma-separated numbers"
+msgstr "debe contener 8 números separados por comas"
+
+#: ../cli/src/settings.c:3838
+#, c-format
+msgid "'%s' not a number between 0 and %u (inclusive) or %u"
+msgstr "'%s' no un número entre 0 y %u (inclusive) o %u"
+
+#: ../cli/src/settings.c:3841
+#, c-format
+msgid "'%s' not a number between 0 and %u (inclusive)"
+msgstr "'%s' no es un número entre 0 y %u (inclusive)"
+
+#: ../cli/src/settings.c:3863
+#, c-format
+msgid "Warning: changes will have no effect until '%s' includes 1 (enabled)\n"
+"\n"
msgstr ""
-"Error: no se pudo crear un objeto proxy en D-Bus para org.freedesktop.DBus"
+"Advertencia: los cambios no tendrán efecto sino hasta que '%s' incluya 1 "
+"(habilitado)\n"
+"\n"
+
+#: ../cli/src/settings.c:3916
+#, c-format
+msgid "bandwidth percentages must total 100%%"
+msgstr "Los porcentajes de ancho de banda deben ser en total 100%%"
+
+#: ../cli/src/settings.c:5594
+msgid "don't know how to get the property value"
+msgstr "No sé cómo obtener el valor de propiedad"
+
+#: ../cli/src/settings.c:5647 ../cli/src/settings.c:5687
+msgid "the property can't be changed"
+msgstr "La propiedad no puede cambiarse"
+
+#: ../cli/src/settings.c:5791
+msgid "[NM property description]"
+msgstr "[Descripción de propiedad NM]"
+
+#: ../cli/src/settings.c:5797
+msgid "[nmcli specific description]"
+msgstr "[Descripción de propiedad nmcli]"
+
+#: ../cli/src/utils.c:111
+#, c-format
+msgid "Error: value for '%s' argument is required."
+msgstr "Error: se requiere valor para argumento '%s'."
+
+#: ../cli/src/utils.c:136
+#, c-format
+msgid "Error: Argument '%s' was expected, but '%s' provided."
+msgstr "Error: Se esperaba argumento '%s', pero proporcionó '%s'."
+
+#: ../cli/src/utils.c:139
+#, c-format
+msgid "Error: Unexpected argument '%s'"
+msgstr "Error: Argumento inesperado '%s'"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/utils.c:189
+#, c-format
+msgid "Error converting IP4 address '0x%X' to text form"
+msgstr "Error al convertir dirección IP4 '0x%X' a forma de texto"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/utils.c:217
+#, c-format
+msgid "Error converting IP6 address '%s' to text form"
+msgstr "Error al convertir dirección IP6 '%s' a forma de texto"
+
+#: ../cli/src/utils.c:393
+#, c-format
+msgid "'%s' is not valid; use [%s] or [%s]"
+msgstr "'%s' no es válido; use [%s] or [%s]"
+
+#: ../cli/src/utils.c:475
+#, c-format
+msgid "'%s' is ambiguous (%s x %s)"
+msgstr "'%s' es ambiguo (%s x %s)"
+
+#: ../cli/src/utils.c:487
+#, c-format
+msgid "missing name, try one of [%s]"
+msgstr "Falta el nombre, intente uno de [%s]"
+
+#: ../cli/src/utils.c:718
+#, c-format
+msgid "field '%s' has to be alone"
+msgstr "el campo «%s» tiene que estar solo"
+
+#: ../cli/src/utils.c:720
+#, c-format
+msgid "invalid field '%s'; allowed fields: %s"
+msgstr "Campo inválido '%s'; campos permitidos: %s"
-#: ../cli/src/utils.c:342
+#: ../cli/src/utils.c:747
+msgid "Option '--terse' requires specifying '--fields'"
+msgstr "Opción «--terse» requiere especificar «--fields»"
+
+#: ../cli/src/utils.c:751
#, c-format
-msgid "Error: NameHasOwner request failed: %s"
-msgstr "Error: falló la solicitud NameHasOwner: %s"
+msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
+msgstr "Opción «--terse» requiere valores de «--fields» específicos, no «%s»"
-#: ../cli/src/utils.c:387
+#: ../cli/src/utils.c:1070
#, c-format
msgid ""
"Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --"
@@ -1452,7 +4813,7 @@ msgstr ""
"Advertencia: las versiones de nmcli (%s) y de NetworkManager (%s) no "
"coinciden. Use «--nocheck» para evitar el aviso.\n"
-#: ../cli/src/utils.c:396
+#: ../cli/src/utils.c:1079
#, c-format
msgid ""
"Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force "
@@ -1472,118 +4833,88 @@ msgstr "El archivo de clave PEM no tiene la etiqueta de finalización «%s»."
msgid "Doesn't look like a PEM private key file."
msgstr "No parece ser un archivo de clave privada PEM."
-#: ../libnm-util/crypto.c:154
-#, c-format
-msgid "Not enough memory to store PEM file data."
-msgstr "No hay memoria suficiente para almacenar el archivo de datos PEM."
-
-#: ../libnm-util/crypto.c:170
+#: ../libnm-util/crypto.c:163
#, c-format
msgid "Malformed PEM file: Proc-Type was not first tag."
msgstr "Archivo PEM mal formado: la primera etiqueta no era Proc-Type."
-#: ../libnm-util/crypto.c:178
+#: ../libnm-util/crypto.c:171
#, c-format
msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
msgstr "Archivo PEM mal formado: etiqueta Proc-Type «%s» desconocida."
-#: ../libnm-util/crypto.c:188
+#: ../libnm-util/crypto.c:181
#, c-format
msgid "Malformed PEM file: DEK-Info was not the second tag."
msgstr "Archivo PEM mal formado: la segunda etiqueta no era 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 "Archivo PEM mal formado: no se encontró IV en la etiqueta 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 ""
"Archivo PEM mal formado: formato de IV no válido en la etiqueta DEK-Info."
-#: ../libnm-util/crypto.c:219
+#: ../libnm-util/crypto.c:212
#, c-format
msgid "Malformed PEM file: unknown private key cipher '%s'."
msgstr "Archivo PEM malformado: cifrador de clave privada «%s» desconocido."
-#: ../libnm-util/crypto.c:238
+#: ../libnm-util/crypto.c:231
#, c-format
msgid "Could not decode private key."
msgstr "No se pudo decodificar la clave privada."
-#: ../libnm-util/crypto.c:284
+#: ../libnm-util/crypto.c:283
msgid "Failed to find expected PKCS#8 start tag."
msgstr "Falló al buscar la etiqueta de inicio de 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 "Falló al buscar la etiqueta de final «%s» de PKCS#8."
-#: ../libnm-util/crypto.c:312
-msgid "Not enough memory to store private key data."
-msgstr ""
-"No hay memoria suficiente para almacenar los datos de la clave privada."
-
-#: ../libnm-util/crypto.c:317
+#: ../libnm-util/crypto.c:310
msgid "Failed to decode PKCS#8 private key."
msgstr "Falló al descifrar la clave privada PKCS#8."
-#: ../libnm-util/crypto.c:339 ../libnm-util/crypto.c:625
-#, c-format
-msgid "Not enough memory to store certificate data."
-msgstr "No hay memoria suficiente para almacenar los datos del 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 "IV debe ser un número par de bytes de longitud."
-#: ../libnm-util/crypto.c:374
-#, c-format
-msgid "Not enough memory to store the IV."
-msgstr "No hay memoria suficiente para almacenar la IV."
-
-#: ../libnm-util/crypto.c:385
+#: ../libnm-util/crypto.c:366
#, c-format
msgid "IV contains non-hexadecimal digits."
msgstr "IV contiene dígitos no hexadecimales."
-#: ../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 "Se desconocía el cifrador de clave privada «%s»."
-#: ../libnm-util/crypto.c:432
-#, c-format
-msgid "Not enough memory to decrypt private key."
-msgstr "No hay memoria suficiente para descifrar la clave privada."
-
-#: ../libnm-util/crypto.c:497
-#, c-format
-msgid "Not enough memory to store decrypted private key."
-msgstr "No hay memoria suficiente para almacenar la clave privada descifrada."
-
-#: ../libnm-util/crypto.c:542
+#: ../libnm-util/crypto.c:511
#, c-format
msgid "Unable to determine private key type."
msgstr "No se pudo determinar el tipo de clave privada."
-#: ../libnm-util/crypto.c:597
+#: ../libnm-util/crypto.c:566
#, c-format
msgid "PEM certificate had no start tag '%s'."
msgstr "El certificado PEM no tiene etiqueta de inicio «%s»."
-#: ../libnm-util/crypto.c:606
+#: ../libnm-util/crypto.c:575
#, c-format
msgid "PEM certificate had no end tag '%s'."
msgstr "El certificado PEM no tiene etiqueta de finalización «%s»."
-#: ../libnm-util/crypto.c:630
+#: ../libnm-util/crypto.c:593
#, c-format
msgid "Failed to decode certificate."
msgstr "No se pudo decodificar el certificado."
@@ -1602,97 +4933,87 @@ msgstr "Falló al inicializar el motor MD5: %s / %s."
msgid "Invalid IV length (must be at least %zd)."
msgstr "Longitud IV no válida (debe ser al menos de %zd)."
-#: ../libnm-util/crypto_gnutls.c:164 ../libnm-util/crypto_nss.c:184
-#, c-format
-msgid "Not enough memory for decrypted key buffer."
-msgstr "No hay memoria suficiente para el búfer de la clave descifrada."
-
-#: ../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 "Falló al inicializar el contexto de descifrado: %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 "Falló al establecer la clave simétrica para el descifrado: %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 "Falló al establecer IV para el descifrado: %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 "Falló al descifrar la clave 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 "Falló al descifrar la clave privada: longitud inesperada del relleno."
-#: ../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 "Falló al descifrar la clave privada."
-#: ../libnm-util/crypto_gnutls.c:285 ../libnm-util/crypto_nss.c:352
-#, c-format
-msgid "Could not allocate memory for encrypting."
-msgstr "No se pudo reservar memoria para el cifrado."
-
-#: ../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 "Falló al inicializar el contexto de cifrador: %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 "Falló al establecer la clave simétrica para el cifrado: %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 "Falló al establecer IV para el cifrado: %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 "Falló al cifrar los datos: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:361
+#: ../libnm-util/crypto_gnutls.c:349
#, c-format
msgid "Error initializing certificate data: %s"
msgstr "Error al inicializar los datos del certificado: %s"
-#: ../libnm-util/crypto_gnutls.c:383
+#: ../libnm-util/crypto_gnutls.c:371
#, c-format
msgid "Couldn't decode certificate: %s"
msgstr "No se pudo decodificar el 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 "No se pudo inicializar el 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 "No se pudo decodificar el archivo 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 "No se pudo verificar el archivo 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 "No se pudo inicializar el 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 "No se pudo decodificar el archivo PKCS#8: %s"
@@ -1712,285 +5033,765 @@ msgstr "Falló al inicializar el contexto MD5: %d"
msgid "Invalid IV length (must be at least %d)."
msgstr "Longitud IV no válida (debe ser al menos de %d)."
-#: ../libnm-util/crypto_nss.c:192
+#: ../libnm-util/crypto_nss.c:186
#, c-format
msgid "Failed to initialize the decryption cipher slot."
msgstr "Falló al inicializar la ranura de descifrado."
-#: ../libnm-util/crypto_nss.c:202
+#: ../libnm-util/crypto_nss.c:196
#, c-format
msgid "Failed to set symmetric key for decryption."
msgstr "Falló al establecer la clave simétrica para el descifrado."
-#: ../libnm-util/crypto_nss.c:212
+#: ../libnm-util/crypto_nss.c:206
#, c-format
msgid "Failed to set IV for decryption."
msgstr "Falló al establecer IV para el descifrado."
-#: ../libnm-util/crypto_nss.c:220
+#: ../libnm-util/crypto_nss.c:214
#, c-format
msgid "Failed to initialize the decryption context."
msgstr "Falló al inicializar el contexto de descifrado."
-#: ../libnm-util/crypto_nss.c:233
+#: ../libnm-util/crypto_nss.c:227
#, c-format
msgid "Failed to decrypt the private key: %d."
msgstr "Falló al descifrar la clave 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 ""
"Falló al descifrar la clave privada: los datos descifrados son demasiado "
"grandes."
-#: ../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 "Falló la finalización del descifrado de la clave 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 "Falló al inicializar la ranura de cifrado."
-#: ../libnm-util/crypto_nss.c:368
+#: ../libnm-util/crypto_nss.c:356
#, c-format
msgid "Failed to set symmetric key for encryption."
msgstr "Falló al establecer la clave simétrica para el cifrado."
-#: ../libnm-util/crypto_nss.c:376
+#: ../libnm-util/crypto_nss.c:364
#, c-format
msgid "Failed to set IV for encryption."
msgstr "Falló al establecer IV para el cifrado."
-#: ../libnm-util/crypto_nss.c:384
+#: ../libnm-util/crypto_nss.c:372
#, c-format
msgid "Failed to initialize the encryption context."
msgstr "Falló al inicializar el contexto de cifrado."
-#: ../libnm-util/crypto_nss.c:392
+#: ../libnm-util/crypto_nss.c:380
#, c-format
msgid "Failed to encrypt: %d."
msgstr "Falló al cifrar: %d."
-#: ../libnm-util/crypto_nss.c:400
+#: ../libnm-util/crypto_nss.c:388
#, c-format
msgid "Unexpected amount of data after encrypting."
msgstr "Cantidad inesperada de datos después del encriptado."
-#: ../libnm-util/crypto_nss.c:443
+#: ../libnm-util/crypto_nss.c:431
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "No se pudo decodificar el 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 "No se pudo convertir la contraseña a 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 "No se pudo inicializar el 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 "No se pudo decodificar el archivo 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 "No se pudo verificar el archivo PKCS#12: %d"
-#: ../libnm-util/crypto_nss.c:568
+#: ../libnm-util/crypto_nss.c:556
msgid "Could not generate random data."
msgstr "No se pudo generar datos aleatorios."
-#: ../libnm-util/nm-utils.c:2000
+#: ../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 "Falta propiedad"
+
+#: ../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 "propiedad está vacía'"
+
+#: ../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 "Debe coincidir con propiedad '%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 "propiedad no es vá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 "'%s' no es un valor válido para propiedad"
+
+#: ../libnm-util/nm-setting-bluetooth.c:188
+#, c-format
+msgid "requires '%s' or '%s' setting"
+msgstr "requiere '%s' o el parámetro '%s'"
+
+#: ../libnm-util/nm-setting-bond.c:518
+#, c-format
+msgid "invalid option '%s' or its value '%s'"
+msgstr "Opción '%s' es inválida o su valor es '%s'"
+
+#: ../libnm-util/nm-setting-bond.c:537
+#, c-format
+msgid "only one of '%s' and '%s' can be set"
+msgstr "únicamente uno de '%s' y '%s' pueden establecerse"
+
+#: ../libnm-util/nm-setting-bond.c:548
+#, c-format
+msgid "mandatory option '%s' is missing"
+msgstr "Falta opción obligatorio '%s' "
+
+#: ../libnm-util/nm-setting-bond.c:557
+#, c-format
+msgid "'%s' is not a valid value for '%s'"
+msgstr "'%s' no es un valor váldo para '%s'"
+
+#: ../libnm-util/nm-setting-bond.c:570
#, c-format
-msgid "Not enough memory to make encryption key."
-msgstr "No hay memoria suficiente para crear la clave privada de cifrado."
+msgid "'%s=%s' is incompatible with '%s > 0'"
+msgstr "'%s=%s' es incompatible con '%s > 0'"
-#: ../libnm-util/nm-utils.c:2110
-msgid "Could not allocate memory for PEM file creation."
-msgstr "No se pudo reservar memoria para crear el archivo PEM."
+#: ../libnm-util/nm-setting-bond.c:583
+#, c-format
+msgid "'%s' is not a valid interface name for '%s' option"
+msgstr "'%s' no es un nombre de interfaz válido para la opción '%s'"
-#: ../libnm-util/nm-utils.c:2122
+#: ../libnm-util/nm-setting-bond.c:593
#, c-format
-msgid "Could not allocate memory for writing IV to PEM file."
-msgstr "No pudo asignar memoria para escribir IV al archivo PEM."
+msgid "'%s' option is only valid for '%s=%s'"
+msgstr "opción '%s' es solamente válida para '%s=%s'"
-#: ../libnm-util/nm-utils.c:2134
+#: ../libnm-util/nm-setting-bond.c:606
#, c-format
-msgid "Could not allocate memory for writing encrypted key to PEM file."
+msgid "'%s=%s' is not a valid configuration for '%s'"
+msgstr "'%s=%s' no es una configuración 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 "opción '%s' requiere que la opción '%s' sea establecida"
+
+#: ../libnm-util/nm-setting-bond.c:659
+#, c-format
+msgid "'%s' option is empty"
+msgstr "opción '%s' está vacía"
+
+#: ../libnm-util/nm-setting-bond.c:671
+#, c-format
+msgid "'%s' is not a valid IPv4 address for '%s' option"
+msgstr "'%s' no es una diercción IPv4 válida para la opción '%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' no es un valor válido para la propiedad (debe ser <= %d)"
+
+#: ../libnm-util/nm-setting-bridge.c:251
+#, c-format
+msgid "value '%d' is out of range <%d-%d>"
+msgstr "El valor '%d' está fuera del rango <%d-%d>"
+
+#: ../libnm-util/nm-setting-cdma.c:170
+msgid "property is empty'"
+msgstr "propiedad está vacía'"
+
+#: ../libnm-util/nm-setting-connection.c:734
+#, c-format
+msgid "'%s' doesn't match the virtual interface name '%s'"
+msgstr "'%s' no coincide con el nombre de interfaz virtual '%s'"
+
+#: ../libnm-util/nm-setting-connection.c:780
+#, c-format
+msgid "requires presence of '%s' setting in the connection"
+msgstr "requiere presencia de parámetro '%s' en la conexión"
+
+#: ../libnm-util/nm-setting-connection.c:802
+msgid "IPv4 configuration is not allowed for slave"
+msgstr "Configuración IPv4 no tiene permiso para esclavo"
+
+#: ../libnm-util/nm-setting-connection.c:815
+msgid "IPv6 configuration is not allowed for slave"
+msgstr "Configuración IPv6 no tiene permiso para esclavo"
+
+#: ../libnm-util/nm-setting-dcb.c:595
+msgid "flags invalid"
+msgstr "Indicadores inválidos"
+
+#: ../libnm-util/nm-setting-dcb.c:604
+msgid "flags invalid - disabled"
+msgstr "Indicadores inválidos - inhabilitado"
+
+#: ../libnm-util/nm-setting-dcb.c:630 ../libnm-util/nm-setting-dcb.c:679
+msgid "property invalid (not enabled)"
+msgstr "propiedad inválida (no está 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 "suma no es 100%"
+
+#: ../libnm-util/nm-setting-dcb.c:688 ../libnm-util/nm-setting-dcb.c:720
+msgid "property invalid"
+msgstr "propiedad inválida"
+
+#: ../libnm-util/nm-setting-dcb.c:710
+msgid "property missing"
+msgstr "Falta propiedad "
+
+#: ../libnm-util/nm-setting-gsm.c:297
+#, c-format
+msgid "property value '%s' is empty or too long (>64)"
+msgstr "valor de propiedad '%s' está vacío o es demasiado largo (>64)"
+
+#: ../libnm-util/nm-setting-gsm.c:329
+#, c-format
+msgid "'%s' contains invalid char(s) (use [A-Za-z._-])"
+msgstr "'%s' contiene char(s) inválidos (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 "'%s' longitud es inválida (debe tener 5 o 6 dígitos)"
+
+#: ../libnm-util/nm-setting-infiniband.c:228
+msgid "not a valid interface name"
+msgstr "no es un nombre de interfaz válido"
+
+#: ../libnm-util/nm-setting-infiniband.c:236
+msgid "Must specify a P_Key if specifying parent"
+msgstr "Debe especificar un P_Key si el principal está especificado"
+
+#: ../libnm-util/nm-setting-infiniband.c:246
+msgid "InfiniBand P_Key connection did not specify parent interface name"
msgstr ""
-"No se pudo asignar memoria para escribir llave encriptada al archivo PEM."
+"La conexión InfiniBand P_Key no especificó el nombre de la interfaz padre"
-#: ../libnm-util/nm-utils.c:2153
+#: ../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 "No se pudo reservar memoria para el archivo de datos PEM."
+msgid "this property is not allowed for '%s=%s'"
+msgstr "esta propiedad no tiene permiso para '%s=%s'"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1
-msgid "Allow control of network connections"
-msgstr "Permitir controlar las conexiones de red"
+#: ../libnm-util/nm-setting-ip4-config.c:789
+#, c-format
+msgid "%d. IPv4 address is invalid"
+msgstr "%d. dirección IPv4 es inválida"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:2
-msgid "Connection sharing via a protected WiFi network"
-msgstr "Compartir conexión a través de una red WIFI protegida"
+#: ../libnm-util/nm-setting-ip4-config.c:799
+#, c-format
+msgid "%d. IPv4 address has invalid prefix"
+msgstr "%d. dirección IPv4 tiene un prefijo inválido"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:3
-msgid "Connection sharing via an open WiFi network"
-msgstr "Compartir conexión a través de una red WIFI abierta"
+#: ../libnm-util/nm-setting-ip4-config.c:815
+#, c-format
+msgid "%d. route is invalid"
+msgstr "%d. ruta es inválida"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
-msgid "Enable or disable WiFi devices"
-msgstr "Activar o desactivar los dispositivos inalaÌmbricos"
+#: ../libnm-util/nm-setting-ip4-config.c:825
+#, c-format
+msgid "%d. route has invalid prefix"
+msgstr "%d. ruta tiene un prefijo inválido"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
-msgid "Enable or disable WiMAX mobile broadband devices"
-msgstr "Activar o desactivar los dispositivos de banda ancha moÌvil WiMAX"
+#: ../libnm-util/nm-setting-ip6-config.c:708
+#, c-format
+msgid "'%s' not allowed for %s=%s"
+msgstr "'%s' no está permitida para %s=%s"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
-msgid "Enable or disable mobile broadband devices"
-msgstr "Activar o desactivar los dispositivos de banda ancha moÌvil"
+#: ../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 "longitud SSID está fuera de rango <1-32> bytes"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7
-msgid "Enable or disable system networking"
-msgstr "Activar o desactivar la red del sistema"
+#: ../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' no es un canal válido"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8
-msgid "Modify network connections for all users"
-msgstr "Modificar las conexiones de red para todos los usuarios"
+#: ../libnm-util/nm-setting-ppp.c:390
+#, c-format
+msgid "'%d' is out of valid range <128-16384>"
+msgstr "'%d' está fuera del rango válido <128-16384>"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9
-msgid "Modify persistent system hostname"
-msgstr "Modificar nombre de host de sistema persistente"
+#: ../libnm-util/nm-setting-ppp.c:403
+#, c-format
+msgid "setting this property requires non-zero '%s' property"
+msgstr "Para establecer esta propiedad se requiere propiedad non-zero '%s'"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10
-msgid "Modify personal network connections"
-msgstr "Modificar las conexiones de red personales"
+#: ../libnm-util/nm-setting-vlan.c:497
+#, c-format
+msgid "'%s' value doesn't match '%s=%s'"
+msgstr "'%s' valor no coincide '%s=%s'"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11
+#: ../libnm-util/nm-setting-vlan.c:508
+#, c-format
+msgid "'%s' is neither an UUID nor an interface name"
+msgstr "'%s' ni es un UUID ni s un nombre de interfaz"
+
+#: ../libnm-util/nm-setting-vlan.c:521
+#, c-format
+msgid "property is not specified and neither is '%s:%s'"
+msgstr "propiedad no se especificó y no es '%s:%s'"
+
+#: ../libnm-util/nm-setting-vlan.c:534
+msgid "flags are invalid"
+msgstr "Indicadores son inválidos"
+
+#: ../libnm-util/nm-setting-wired.c:562
+#, c-format
+msgid "'%s' is not a valid ethernet port value"
+msgstr "'%s' no es un valor de puerto Ethernet válido"
+
+#: ../libnm-util/nm-setting-wired.c:572
+#, c-format
+msgid "'%s' is not a valid duplex value"
+msgstr "'%s' no es un 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 "No es una dirección MAC válida"
+
+#: ../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' no es una dirección MAC válida"
+
+#: ../libnm-util/nm-setting-wired.c:629
+#, c-format
+msgid "invalid '%s' or its value '%s'"
+msgstr "invalido '%s' o su valor '%s'"
+
+#: ../libnm-util/nm-setting-wireless-security.c:816
+#, c-format
+msgid "'%s' security requires '%s=%s'"
+msgstr "'%s' requiere seguridad '%s=%s'"
+
+#: ../libnm-util/nm-setting-wireless-security.c:845
+#, c-format
+msgid "'%s' security requires '%s' setting presence"
+msgstr "'%s' requiere seguridad presencia de parámetro '%s'"
+
+#: ../libnm-util/nm-setting-wireless-security.c:866
+#, c-format
+msgid "'%d' value is out of range <0-3>"
+msgstr "'%d' valor está fuera de rango <0-3>"
+
+#: ../libnm-util/nm-setting-wireless-security.c:963
+#, c-format
+msgid "'%s' connections require '%s' in this property"
+msgstr "'%s' conexiones requieren '%s' en esta propiedad"
+
+#: ../libnm-util/nm-setting-wireless-security.c:993
+#, c-format
+msgid "'%s' can only be used with '%s=%s' (WEP)"
+msgstr "'%s' solamente se pueden usar con '%s=%s' (WEP)"
+
+#: ../libnm-util/nm-setting-wireless.c:715
+#, c-format
+msgid "'%s' is not a valid Wi-Fi mode"
+msgstr "'%s' no es un modo Wi-Fi válido"
+
+#: ../libnm-util/nm-setting-wireless.c:725
+#, c-format
+msgid "'%s' is not a valid band"
+msgstr "'%s' no es una banda válida"
+
+#: ../libnm-util/nm-setting-wireless.c:735
+#, c-format
+msgid "requires setting '%s' property"
+msgstr "requiere propiedad de parámetro '%s'"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:1
+msgid "Enable or disable system networking"
+msgstr "Activar o desactivar la red del sistema"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:2
+msgid "System policy prevents enabling or disabling system networking"
+msgstr ""
+"La poliÌtica del sistema evita activar o desactivar la red del sistema"
+
+#: ../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 ""
-"Poner NetworkManager a dormir o despertarlo (soÌlo lo deberiÌa usar el gestor "
-"de energiÌa del sistema)"
+"Poner NetworkManager a dormir o despertarlo (soÌlo lo deberiÌa usar el "
+"gestor de energiÌa del sistema)"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12
-msgid "System policy prevents control of network connections"
-msgstr "La poliÌtica de sistema evita el control de las conexiones de red"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:4
+msgid "System policy prevents putting NetworkManager to sleep or waking it up"
+msgstr ""
+"La poliÌtica del sistema evita poner a NetworkManager a dormir o despertarlo"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:5
+msgid "Enable or disable WiFi devices"
+msgstr "Activar o desactivar los dispositivos inalaÌmbricos"
-#: ../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 ""
"La poliÌtica de sistema evita activar o desactivar los dispositivos "
"inalaÌmbricos"
-#: ../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 "Activar o desactivar los dispositivos de banda ancha moÌvil"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:8
+msgid "System policy prevents enabling or disabling mobile broadband devices"
+msgstr ""
+"La poliÌtica del sistema evita activar o desactivar los dispositivos de "
+"banda ancha moÌvil"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:9
+msgid "Enable or disable WiMAX mobile broadband devices"
+msgstr "Activar o desactivar los dispositivos de banda ancha moÌvil WiMAX"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:10
msgid ""
"System policy prevents enabling or disabling WiMAX mobile broadband devices"
msgstr ""
-"La poliÌtica del sistema evita activar o desactivar los dispositivos de banda "
-"ancha moÌvil WiMAX"
+"La poliÌtica del sistema evita activar o desactivar los dispositivos de "
+"banda ancha moÌvil WiMAX"
-#: ../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 "Permitir controlar las conexiones de red"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:12
+msgid "System policy prevents control of network connections"
+msgstr "La poliÌtica de sistema evita el control de las conexiones de red"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:13
+msgid "Connection sharing via a protected WiFi network"
+msgstr "Compartir conexión a través de una red WIFI protegida"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:14
+msgid ""
+"System policy prevents sharing connections via a protected WiFi network"
msgstr ""
-"La poliÌtica del sistema evita activar o desactivar los dispositivos de banda "
-"ancha moÌvil"
+"La política del sistema evita compartir conexiones a través de una red WiFi "
+"protegida"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:16
-msgid "System policy prevents enabling or disabling system networking"
-msgstr "La poliÌtica del sistema evita activar o desactivar la red del sistema"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:15
+msgid "Connection sharing via an open WiFi network"
+msgstr "Compartir conexión a través de una red WIFI abierta"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:17
-msgid "System policy prevents modification of network settings for all users"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:16
+msgid "System policy prevents sharing connections via an open WiFi network"
msgstr ""
-"La política del sistema evita la modificación de la configuración de la red "
-"para todos los usuarios"
+"La política del sistema evita compartir conexiones a través de una red WiFi "
+"abierta"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:18
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:17
+msgid "Modify personal network connections"
+msgstr "Modificar las conexiones de red personales"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:18
msgid "System policy prevents modification of personal network settings"
msgstr ""
"La política del sistema evita la modificación de la configuración personal "
"de la red"
-#: ../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 "Modificar las conexiones de red para todos los usuarios"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:20
+msgid "System policy prevents modification of network settings for all users"
+msgstr ""
+"La política del sistema evita la modificación de la configuración de la red "
+"para todos los usuarios"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:21
+msgid "Modify persistent system hostname"
+msgstr "Modificar nombre de host de sistema persistente"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:22
msgid "System policy prevents modification of the persistent system hostname"
msgstr ""
"La política del sistema evita la modificación del nombre persistente del "
"sistema"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:20
-msgid "System policy prevents putting NetworkManager to sleep or waking it up"
-msgstr ""
-"La poliÌtica del sistema evita poner a NetworkManager a dormir o despertarlo"
+#: ../src/main.c:154
+#, c-format
+msgid "Opening %s failed: %s\n"
+msgstr "Al abrir %s falló: %s\n"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:21
-msgid "System policy prevents sharing connections via a protected WiFi network"
-msgstr ""
-"La política del sistema evita compartir conexiones a través de una red WiFi "
-"protegida"
+#: ../src/main.c:160
+#, c-format
+msgid "Writing to %s failed: %s\n"
+msgstr "Escritura a %s falló: %s\n"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:22
-msgid "System policy prevents sharing connections via an open WiFi network"
+#: ../src/main.c:165
+#, c-format
+msgid "Closing %s failed: %s\n"
+msgstr "Cierre %s falló: %s\n"
+
+#: ../src/main.c:208
+#, c-format
+msgid "NetworkManager is already running (pid %ld)\n"
+msgstr "NetworkManager ya está en ejecución (pid %ld)\n"
+
+#: ../src/main.c:329
+msgid "Print NetworkManager version and exit"
+msgstr "Imprimir versión de NetworkManager version y salir"
+
+#: ../src/main.c:330
+msgid "Don't become a daemon"
+msgstr "No se convierta en demonio"
+
+#: ../src/main.c:331
+msgid "Don't become a daemon, and log to stderr"
+msgstr "No se convierta en demonio y registre a stderr"
+
+#: ../src/main.c:332
+#, c-format
+msgid "Log level: one of [%s]"
+msgstr "Nivel de registro: uno de [%s]"
+
+#: ../src/main.c:334
+#, c-format
+msgid "Log domains separated by ',': any combination of [%s]"
+msgstr "Dominios de registro separados por ',': cualquier combinación de [%s]"
+
+#: ../src/main.c:336
+msgid "Make all warnings fatal"
+msgstr "Hacer todas las advertencias fatales"
+
+#: ../src/main.c:337
+msgid "Specify the location of a PID file"
+msgstr "Especificar el sitio del archivo PID"
+
+#: ../src/main.c:337
+msgid "filename"
+msgstr "Nombre de archivo"
+
+#: ../src/main.c:338
+msgid "State file location"
+msgstr "Estado del sitio de archivos"
+
+#: ../src/main.c:338
+msgid "/path/to/state.file"
+msgstr "/path/to/state.file"
+
+#: ../src/main.c:364
+#, c-format
+msgid "GModules are not supported on your platform!\n"
+msgstr "GModules no tienen soporte en su plataforma\n"
+
+#: ../src/main.c:369
+#, c-format
+msgid "You must be root to run NetworkManager!\n"
+msgstr "Debe ser root para ejecutar 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 ""
-"La política del sistema evita compartir conexiones a través de una red WiFi "
-"abierta"
+"NetworkManager monitoriza todas las conexiones de red y elige de forma "
+"automática\n"
+"la mejor conexión a usar. También permite al usuario especificar\n"
+"los puntos de acceso con los que las tarjeta inalámbricas en el computador \n"
+"se deben asociar."
-#: ../src/main.c:530
+#: ../src/main.c:398
#, c-format
msgid "Invalid option. Please use --help to see a list of valid options.\n"
msgstr ""
"Opción no válida. Use --help para ver una lista de las opciones válidas.\n"
-#: ../src/main.c:611
+#: ../src/main.c:412
#, c-format
msgid "%s. Please use --help to see a list of valid options.\n"
msgstr "%s. Usar --help para ver la lista de opciones válidas.\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:62
+#: ../src/main.c:417
+#, c-format
+msgid "Ignoring unrecognized log domain(s) '%s' passed on command line.\n"
+msgstr ""
+"Ignorando dominio(s) de registro desconocido '%s' que pasó en línea de "
+"comandos.\n"
+
+#: ../src/main.c:468
+#, c-format
+msgid "Failed to read configuration: (%d) %s\n"
+msgstr "Falló al leer configuración: (%d) %s\n"
+
+#: ../src/main.c:482
+#, c-format
+msgid "Error in configuration file: %s.\n"
+msgstr "Error en archivo de configuración: %s.\n"
+
+#: ../src/main.c:487
+#, c-format
+msgid "Ignoring unrecognized log domain(s) '%s' from config files.\n"
+msgstr ""
+"Ignorando dominio(s) de registro desconocido '%s' desde archivos de "
+"configuración.\n"
+
+#: ../src/main.c:495
+#, c-format
+msgid "State file %s parsing failed: (%d) %s\n"
+msgstr "Archivo de estado %s falló análisis: (%d) %s\n"
+
+#: ../src/main.c:508
+#, c-format
+msgid "Could not daemonize: %s [error %u]\n"
+msgstr "No se pudo demonizar: %s [error %u]\n"
+
+#: ../src/bluez-manager/nm-bluez-device.c:198
+#, c-format
+msgid "%s Network"
+msgstr "Red %s "
+
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:143
msgid "# Created by NetworkManager\n"
msgstr "# Creado por 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"
+msgid "# Merged from %s\n"
"\n"
-msgstr ""
-"# Mezclado de %s\n"
+msgstr "# Mezclado de %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 "cliente DHCP inútil pudo ser hallado."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:293
+#: ../src/dhcp-manager/nm-dhcp-manager.c:322
msgid "'dhclient' could be found."
msgstr "se pudo encontrar «dhclient»."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:303
+#: ../src/dhcp-manager/nm-dhcp-manager.c:332
msgid "'dhcpcd' could be found."
msgstr "se pudo encontrar «dhcpcd»."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:311
+#: ../src/dhcp-manager/nm-dhcp-manager.c:340
#, c-format
msgid "unsupported DHCP client '%s'"
msgstr "«%s» cliente DHCP sin soporte "
-#: ../src/dns-manager/nm-dns-manager.c:376
+#: ../src/dns-manager/nm-dns-manager.c:401
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr ""
-"NOTA: el resolutor de nombres de libc puede que no soporte más de 3 "
+"NOTA: el 'resolutor' de nombres de libc puede que no soporte más de 3 "
"servidores de nombres."
-#: ../src/dns-manager/nm-dns-manager.c:378
+#: ../src/dns-manager/nm-dns-manager.c:403
msgid "The nameservers listed below may not be recognized."
msgstr "Puede que los servidores de nombres listados abajo no se reconozcan."
@@ -1999,131 +5800,982 @@ msgstr "Puede que los servidores de nombres listados abajo no se reconozcan."
msgid "Unknown log level '%s'"
msgstr "Nivel de registro desconocido «%s»"
-#: ../src/logging/nm-logging.c:174
+#: ../src/logging/nm-logging.c:226
#, c-format
msgid "Unknown log domain '%s'"
msgstr "Dominio de registro desconocido «%s»"
-#: ../src/modem-manager/nm-modem-cdma.c:296 ../src/nm-device-bt.c:355
+#: ../src/config/nm-config.c:271
+msgid "Config file location"
+msgstr "Sitio del archivo de configuración"
+
+#: ../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 "Sitio del directorio de configuración"
+
+#: ../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 "Lista de conectores separados por ','"
+
+#: ../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 "Una dirección http(s) a para verificación de conectividad de Internet"
+
+#: ../src/config/nm-config.c:278
+msgid "The interval between connectivity checks (in seconds)"
+msgstr "El intervalo entre chequeos de conectividad (en segundos)"
+
+#: ../src/config/nm-config.c:279
+msgid "The expected start of the response"
+msgstr "El inicio esperado de respuesta"
+
+#: ../src/config/nm-config.c:279
+msgid "Bingo!"
+msgstr "¡Listo!"
+
+#: ../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 "Conexión GSM %d"
+
+#: ../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 "Conexión CDMA %d"
-#: ../src/modem-manager/nm-modem-gsm.c:499 ../src/nm-device-bt.c:351
+#: ../src/devices/nm-device-bond.c:146 ../tui/nm-editor-utils.c:204
#, c-format
-msgid "GSM connection %d"
-msgstr "Conexión GSM %d"
+msgid "Bond connection %d"
+msgstr "Conexión de vínculo %d"
+
+#: ../src/devices/nm-device-adsl.c:150
+#, c-format
+msgid "ADSL connection %d"
+msgstr "Conexión ADSL %d"
-#: ../src/nm-device-bt.c:326
+#: ../src/devices/nm-device-bridge.c:143 ../tui/nm-editor-utils.c:214
+#, c-format
+msgid "Bridge connection %d"
+msgstr "Conexión en puente %d"
+
+#: ../src/devices/nm-device-bt.c:308
#, c-format
msgid "PAN connection %d"
msgstr "Conexión PAN %d"
-#: ../src/nm-device-bt.c:359
+#: ../src/devices/nm-device-bt.c:341
#, c-format
msgid "DUN connection %d"
msgstr "Conexión DUN %d"
-#: ../src/nm-device-ethernet.c:1724
+#: ../src/devices/nm-device-ethernet.c:1254
#, c-format
msgid "PPPoE connection %d"
msgstr "Conexión PPPoE %d"
-#: ../src/nm-device-ethernet.c:1724 ../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 "Conexión cableada %d"
-#: ../src/nm-device-olpc-mesh.c:393
+#: ../src/devices/nm-device-infiniband.c:270 ../tui/nm-editor-utils.c:177
+#, c-format
+msgid "InfiniBand connection %d"
+msgstr "Conexión InfiniBand %d"
+
+#: ../src/devices/nm-device-olpc-mesh.c:242
#, c-format
msgid "Mesh %d"
msgstr "Malla %d"
-#: ../src/nm-manager.c:670
+#: ../src/devices/nm-device-team.c:158 ../tui/nm-editor-utils.c:223
+#, c-format
+msgid "Team connection %d"
+msgstr "Conexión de equipo %d"
+
+#: ../src/devices/nm-device-vlan.c:255 ../tui/nm-editor-utils.c:231
+#, c-format
+msgid "VLAN connection %d"
+msgstr "Conexión VLAN %d"
+
+#: ../src/nm-manager.c:3420 ../tui/nm-editor-utils.c:246
#, c-format
msgid "VPN connection %d"
msgstr "Conexión VPN %d"
-#: ../src/nm-netlink-monitor.c:101 ../src/nm-netlink-monitor.c:234
-#: ../src/nm-netlink-monitor.c:661
+#: ../src/nm-netlink-monitor.c:219
+msgid "error occurred while waiting for data on socket"
+msgstr "ha ocurrido un error mientras esperaban datos en un conector"
+
+#: ../src/nm-netlink-monitor.c:240
#, c-format
msgid "error processing netlink message: %s"
msgstr "error al procesar el mensaje de netlink: %s"
-#: ../src/nm-netlink-monitor.c:216
-msgid "error occurred while waiting for data on socket"
-msgstr "ha ocurrido un error mientras esperaban datos en un socket"
-
-#: ../src/nm-netlink-monitor.c:260
+#: ../src/nm-netlink-monitor.c:264
#, c-format
msgid "unable to connect to netlink for monitoring link status: %s"
msgstr ""
"no se puede conectar con netlink para monitorizar el estado del enlace: %s"
-#: ../src/nm-netlink-monitor.c:271
+#: ../src/nm-netlink-monitor.c:275
#, c-format
msgid "unable to enable netlink handle credential passing: %s"
-msgstr "no se puede activar el manejador netlink para pasar credenciales: %s"
+msgstr "no se puede activar el indicador netlink para pasar credenciales: %s"
-#: ../src/nm-netlink-monitor.c:294 ../src/nm-netlink-monitor.c:354
+#: ../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 ""
-"no se puede asignar el manejador netlink para monitorizar el estado del "
+"no se puede asignar el indicador netlink para monitorizar el estado del "
"enlace: %s"
-#: ../src/nm-netlink-monitor.c:379
-#, c-format
-msgid "unable to allocate netlink link cache for monitoring link status: %s"
-msgstr ""
-"no se puede asignar el enlace a la cache de netlink para monitorizar el "
-"estado del enlace: %s"
-
-#: ../src/nm-netlink-monitor.c:506
+#: ../src/nm-netlink-monitor.c:469
#, c-format
msgid "unable to join netlink group: %s"
msgstr "no pudo unirse al grupo netlink: %s"
-#: ../src/nm-netlink-monitor.c:637 ../src/nm-netlink-monitor.c:650
-#, c-format
-msgid "error updating link cache: %s"
-msgstr "error al actualizar el enlace caché: %s"
+#: ../src/nm-sleep-monitor-systemd.c:116
+msgid "NetworkManager needs to turn off networks"
+msgstr "NetworkManager necesita apagar redes"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:3575
-#: ../src/settings/plugins/ifnet/connection_parser.c:51
+#: ../src/settings/plugins/ifcfg-rh/reader.c:115
msgid "System"
msgstr "Sistema"
-#~ msgid "Error: Obtaining active connection for '%s' failed."
-#~ msgstr "Error: falló la obtención de conexión activa para «%s»."
+# auto translated by TM merge from project: virt-manager, version: 0.9.0, DocId: virt-manager
+#: ../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 "Vinculación"
+
+#: ../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 "Equipo "
+
+# auto translated by TM merge from project: RHN Satellite UI, version: 5.5, DocId: java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource
+#: ../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 "Puente"
+
+#: ../test/nm-online.c:73
+#, c-format
+msgid "\rConnecting"
+msgstr "Conectando"
+
+#: ../test/nm-online.c:104
+msgid ""
+"Time to wait for a connection, in seconds (without the option, default value "
+"is 30)"
+msgstr ""
+"Tiempo para esperar una conexión, en segundos (Sin la opción, el valor "
+"predeterminado es 30.)"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../test/nm-online.c:105
+msgid "Exit immediately if NetworkManager is not running"
+msgstr "Salir inmediatamente si NetworkManager no está ejecutándose "
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../test/nm-online.c:106
+msgid "Don't print anything"
+msgstr "No imprimir nada"
+
+#: ../test/nm-online.c:124
+msgid ""
+"Waits for NetworkManager to finish activating startup network connections."
+msgstr ""
+"Espera a que NetworkManager termine de activar las conexiones de red de "
+"inicio."
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../test/nm-online.c:131 ../test/nm-online.c:141
+msgid "Invalid option. Please use --help to see a list of valid options."
+msgstr ""
+"Opción inválida. Por favor use --help para ver una lista de las opciones "
+"válidas."
+
+#: ../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 "Aceptar"
+
+#: ../tui/newt/nmt-newt-utils.c:316 ../tui/newt/nmt-newt-utils.c:348
+#, c-format
+msgid "Could not create temporary file: %s"
+msgstr "No se pudo crear archivo temporal: %s"
+
+#: ../tui/newt/nmt-newt-utils.c:354
+#, c-format
+msgid "Editor failed: %s"
+msgstr "Falló el editor: %s"
+
+#: ../tui/newt/nmt-newt-utils.c:360
+#, c-format
+msgid "Could not re-read file: %s"
+msgstr "No se pudo leer archivo: %s"
+
+#: ../tui/nm-editor-utils.c:160
+#, c-format
+msgid "Ethernet connection %d"
+msgstr "Conexión Ethernet %d"
+
+#: ../tui/nm-editor-utils.c:168
+#, c-format
+msgid "Wi-Fi connection %d"
+msgstr "Conexión Wi-Fi %d"
+
+#: ../tui/nm-editor-utils.c:182 ../tui/nm-ui-utils.c:345
+msgid "Mobile Broadband"
+msgstr "Banda ancha móvil"
+
+#: ../tui/nm-editor-utils.c:185
+#, c-format
+msgid "Mobile broadband connection %d"
+msgstr "Conexión de banda ancha móvil %d"
+
+#: ../tui/nm-editor-utils.c:190
+msgid "DSL"
+msgstr "DSL"
+
+#: ../tui/nm-editor-utils.c:194
+#, c-format
+msgid "DSL connection %d"
+msgstr "Conexión DSL %d"
+
+#: ../tui/nm-ui-utils.c:316 ../tui/nm-ui-utils.c:385
+msgid "Wired"
+msgstr "Cableado"
+
+#: ../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 "Seleccionar..."
+
+#: ../tui/nmt-edit-connection-list.c:129
+msgid "Add"
+msgstr "Añadir"
+
+#: ../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 "Borrar"
+
+#: ../tui/nmt-editor.c:81
+#, c-format
+msgid "Could not create editor for connection '%s' of type '%s'."
+msgstr "No se pudo crear editor para conexión '%s' del tipo '%s'"
+
+#: ../tui/nmt-editor.c:85
+#, c-format
+msgid "Could not create editor for invalid connection '%s'."
+msgstr "No se pudo crear editor para conexión no válida '%s'."
+
+#: ../tui/nmt-editor.c:95
+msgid "Edit connection"
+msgstr "Editar conexión"
+
+#: ../tui/nmt-editor.c:134
+#, c-format
+msgid "Error saving connection: %s"
+msgstr "Error al guardar conexión: %s"
+
+#: ../tui/nmt-editor.c:144
+#, c-format
+msgid "Unable to save connection: %s"
+msgstr "No se pudo guardar conexión: %s"
+
+#: ../tui/nmt-editor.c:158
+#, c-format
+msgid "Unable to add new connection: %s"
+msgstr "No se pudo adicionar nueva conexión: %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"
+
+#: ../tui/nmt-mtu-entry.c:86
+msgid "(default)"
+msgstr "(predeterminado)"
+
+#: ../tui/nmt-mtu-entry.c:88 ../tui/nmt-mtu-entry.c:119
+msgid "bytes"
+msgstr "bytes"
+
+#: ../tui/nmt-page-bond.c:88
+msgid "Round-robin"
+msgstr "Round-robin"
+
+#: ../tui/nmt-page-bond.c:89
+msgid "Active Backup"
+msgstr "Respaldo activo"
+
+#: ../tui/nmt-page-bond.c:90
+msgid "XOR"
+msgstr "XOR"
+
+#: ../tui/nmt-page-bond.c:91
+msgid "Broadcast"
+msgstr "Difusión"
+
+#: ../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 "Balanceo de carga de transmisión adaptable (tlb)"
+
+#: ../tui/nmt-page-bond.c:94
+msgid "Adaptive Load Balancing (alb)"
+msgstr "Balanceo de carga adaptable (alb)"
+
+#: ../tui/nmt-page-bond.c:100
+msgid "MII (recommended)"
+msgstr "MII (recomendable)"
+
+#: ../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 "Esclavos"
+
+#: ../tui/nmt-page-bond.c:371 ../tui/nmt-page-wifi.c:227
+msgid "Mode"
+msgstr "Modo"
+
+#: ../tui/nmt-page-bond.c:377
+msgid "Primary"
+msgstr "Primario"
+
+#: ../tui/nmt-page-bond.c:383
+msgid "Link monitoring"
+msgstr "Enlace de monitorizació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 "ms"
+
+#: ../tui/nmt-page-bond.c:390 ../tui/nmt-page-bond.c:411
+msgid "Monitoring frequency"
+msgstr "Frecuencia de monitorización"
+
+#: ../tui/nmt-page-bond.c:397
+msgid "Link up delay"
+msgstr "Retraso de 'link up'"
+
+#: ../tui/nmt-page-bond.c:404
+msgid "Link down delay"
+msgstr "Retraso de 'Link down'"
+
+#: ../tui/nmt-page-bond.c:417
+msgid "ARP targets"
+msgstr "Destinos ARP"
+
+#: ../tui/nmt-page-bridge-port.c:38
+msgid "BRIDGE PORT"
+msgstr "PUERTO DE PUENTE"
+
+#: ../tui/nmt-page-bridge-port.c:69 ../tui/nmt-page-bridge.c:112
+msgid "Priority"
+msgstr "Prioridad"
+
+#: ../tui/nmt-page-bridge-port.c:75
+msgid "Path cost"
+msgstr "Costo de ruta"
+
+#: ../tui/nmt-page-bridge-port.c:77
+msgid "Hairpin mode"
+msgstr "Modo de Hairpin"
+
+#: ../tui/nmt-page-bridge.c:42
+msgid "BRIDGE"
+msgstr "PUENTE"
+
+#: ../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 "Tiempo de caducidad"
+
+#: ../tui/nmt-page-bridge.c:99
+msgid "Enable STP (Spanning Tree Protocol)"
+msgstr "Habilitar STP (Protocolo de árbol "
+
+#: ../tui/nmt-page-bridge.c:122
+msgid "Forward delay"
+msgstr "Demora de envío"
+
+#: ../tui/nmt-page-bridge.c:132
+msgid "Hello time"
+msgstr "Hello time"
+
+#: ../tui/nmt-page-bridge.c:142
+msgid "Max age"
+msgstr "Edad máx"
+
+#: ../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 "Dirección MAC clonada"
+
+#: ../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 "Desactivado"
+
+#: ../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 "Enlace 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 "Compartido"
+
+#: ../tui/nmt-page-ip4.c:54
+msgid "IPv4 CONFIGURATION"
+msgstr "CONFIGURACIÓN IPv4"
+
+#: ../tui/nmt-page-ip4.c:100 ../tui/nmt-page-ip6.c:100
+msgid "(No custom routes)"
+msgstr "(No hay rutas personalizadas)"
+
+#: ../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] "Una ruta personal"
+msgstr[1] "Rutas personalizadas %d"
+
+#: ../tui/nmt-page-ip4.c:141 ../tui/nmt-page-ip6.c:141
+msgid "Addresses"
+msgstr "Direcciones"
+
+#: ../tui/nmt-page-ip4.c:147 ../tui/nmt-page-ip6.c:147
+msgid "Gateway"
+msgstr "Puerta de enlace"
+
+#: ../tui/nmt-page-ip4.c:153 ../tui/nmt-page-ip6.c:153
+msgid "DNS servers"
+msgstr "Servidores DNS"
+
+#: ../tui/nmt-page-ip4.c:159 ../tui/nmt-page-ip6.c:159
+msgid "Search domains"
+msgstr "Búsqueda de dominios"
+
+#: ../tui/nmt-page-ip4.c:174 ../tui/nmt-page-ip6.c:172
+msgid "Routing"
+msgstr "Enrutando "
+
+#: ../tui/nmt-page-ip4.c:176 ../tui/nmt-page-ip6.c:174
+msgid "Never use this network for default route"
+msgstr "Nunca us"
+
+#: ../tui/nmt-page-ip4.c:184
+msgid "Require IPv4 addressing for this connection"
+msgstr "Requiere dirección IPv4 para esta conexión "
+
+#: ../tui/nmt-page-ip6.c:41
+msgid "Ignore"
+msgstr "Ignorar"
+
+#: ../tui/nmt-page-ip6.c:43
+msgid "Automatic (DHCP-only)"
+msgstr "Automático (DHCP-"
+
+#: ../tui/nmt-page-ip6.c:54
+msgid "IPv6 CONFIGURATION"
+msgstr "CONFIGURACIÓN IPv6"
+
+#: ../tui/nmt-page-ip6.c:182
+msgid "Require IPv6 addressing for this connection"
+msgstr "Requiere dirigirse a IPv6 para esta conexión"
+
+#: ../tui/nmt-page-main.c:134
+msgid "Hide"
+msgstr "Ocultar"
+
+#: ../tui/nmt-page-main.c:134
+msgid "Show"
+msgstr "Mostrar"
+
+#: ../tui/nmt-page-main.c:181
+msgid "Profile name"
+msgstr "Nombre de perfil"
+
+#: ../tui/nmt-page-main.c:188
+msgid "Device"
+msgstr "Dispositivo"
+
+#: ../tui/nmt-page-main.c:252
+msgid "Automatically connect"
+msgstr "Conectar de forma automática"
+
+#: ../tui/nmt-page-main.c:258
+msgid "Available to all users"
+msgstr "Disponible para todos los usuarios"
+
+#: ../tui/nmt-page-team-port.c:45
+msgid "TEAM PORT"
+msgstr "PUERTO DE EQUIPO"
+
+#: ../tui/nmt-page-team-port.c:100 ../tui/nmt-page-team.c:170
+msgid "JSON configuration"
+msgstr "Configuración JSON"
+
+#: ../tui/nmt-page-team.c:51
+msgid "TEAM"
+msgstr "EQUIPO"
+
+#: ../tui/nmt-page-vlan.c:109
+msgid "Parent"
+msgstr "Padre"
+
+#: ../tui/nmt-page-vlan.c:124
+msgid "VLAN id"
+msgstr "ID de 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 "Cliente"
+
+#: ../tui/nmt-page-wifi.c:70
+msgid "Access Point"
+msgstr "Punto de acceso"
+
+#: ../tui/nmt-page-wifi.c:71
+msgid "Ad-Hoc Network"
+msgstr "Red 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 "Un (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 "Ninguno"
+
+#: ../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 Empresarial"
+
+#: ../tui/nmt-page-wifi.c:88
+msgid "WEP 40/128-bit Key (Hex or ASCII)"
+msgstr "Llave de WEP 40/128-bit (Hex o ASCII)"
+
+#: ../tui/nmt-page-wifi.c:89
+msgid "WEP 128-bit Passphrase"
+msgstr "Frase de paso de WEP 128-bit"
+
+#: ../tui/nmt-page-wifi.c:90
+msgid "Dynamic WEP (802.1x)"
+msgstr "WEP Dinámica (802.1x)"
+
+#: ../tui/nmt-page-wifi.c:91
+msgid "LEAP"
+msgstr "SALTO"
+
+#: ../tui/nmt-page-wifi.c:96
+msgctxt "WEP key index"
+msgid "1 (Default)"
+msgstr "1 (Predeterminado)"
+
+#: ../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 abierto"
+
+#: ../tui/nmt-page-wifi.c:105
+msgid "Shared Key"
+msgstr "Clave compartida"
+
+#: ../tui/nmt-page-wifi.c:253
+msgid "Channel"
+msgstr "Canal"
+
+#: ../tui/nmt-page-wifi.c:258
+msgid "Security"
+msgstr "Seguridad"
+
+#: ../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 "Contraseña"
+
+#: ../tui/nmt-page-wifi.c:279
+msgid "(No support for wpa-enterprise yet...)"
+msgstr "(No hay soporte aún para wpa-enterprise...)"
+
+#: ../tui/nmt-page-wifi.c:286 ../tui/nmt-secret-agent.c:265
+msgid "Key"
+msgstr "Llave"
+
+#: ../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 "Autenticación"
+
+#: ../tui/nmt-page-wifi.c:322
+msgid "(No support for dynamic-wep yet...)"
+msgstr "(No hay soporte aún para dynamic-wep...)"
+
+#: ../tui/nmt-page-wifi.c:329 ../tui/nmt-secret-agent.c:209
+#: ../tui/nmt-secret-agent.c:304
+msgid "Username"
+msgstr "Nombre de usuario"
+
+#: ../tui/nmt-password-fields.c:130
+msgid "Ask for this password every time"
+msgstr "Preguntar cada vez esta contraseña "
+
+#: ../tui/nmt-password-fields.c:131
+msgid "Show password"
+msgstr "Mostrar contraseña"
+
+#: ../tui/nmt-route-table.c:219
+msgid "Destination"
+msgstr "Destino"
+
+#: ../tui/nmt-route-table.c:219
+msgid "Prefix"
+msgstr "Prefijo"
+
+#: ../tui/nmt-route-table.c:228
+msgid "Next Hop"
+msgstr "Próximo salto"
+
+#: ../tui/nmt-route-table.c:236
+msgid "Metric"
+msgstr "Métrica"
+
+#: ../tui/nmt-route-table.c:256
+msgid "No custom routes are defined."
+msgstr "No hay rutas personalizadas definidas."
+
+#: ../tui/nmt-secret-agent.c:223
+msgid "Identity"
+msgstr "Identidad"
+
+#: ../tui/nmt-secret-agent.c:228
+msgid "Private key password"
+msgstr "Contraseña de llave privada"
+
+#: ../tui/nmt-secret-agent.c:309
+msgid "Service"
+msgstr "Servicio"
+
+#: ../tui/nmt-secret-agent.c:340
+msgid "Authentication required by wireless network"
+msgstr "Autenticación requerida por red inalámbrica"
+
+#: ../tui/nmt-secret-agent.c:341
+#, c-format
+msgid ""
+"Passwords or encryption keys are required to access the wireless network "
+"'%s'."
+msgstr ""
+"Se requieren llaves de contraseñas o cifradas para acceder a la red "
+"inalámbrica '%s'."
+
+#: ../tui/nmt-secret-agent.c:349
+msgid "Wired 802.1X authentication"
+msgstr "Autenticación de Cableado 802.1X"
+
+#: ../tui/nmt-secret-agent.c:352
+msgid "Network name"
+msgstr "Nombre de red"
+
+#: ../tui/nmt-secret-agent.c:359
+msgid "DSL authentication"
+msgstr "Autenticación DSL"
+
+#: ../tui/nmt-secret-agent.c:367
+msgid "PIN code required"
+msgstr "Se requiere código PIN"
+
+#: ../tui/nmt-secret-agent.c:368
+msgid "PIN code is needed for the mobile broadband device"
+msgstr "Se requiere código PIN para el dispositivo de ancho de banda móvil"
+
+#: ../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 "Contraseña de red de ancho de banda móvil "
+
+#: ../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 "Se requiere una contraseña para conectarse a '%s'."
+
+#: ../tui/nmt-slave-list.c:138
+msgid "Select the type of slave connection you wish to add."
+msgstr "Seleccionar el tipo de conexión esclava que desee añadir."
+
+#: ../tui/nmt-widget-list.c:142
+msgid "Add..."
+msgstr "Añadir..."
+
+#: ../tui/nmt-widget-list.c:205
+msgid "Remove"
+msgstr "Retirar"
+
+#: ../tui/nmtui-connect.c:82
+msgid "Activation failed"
+msgstr "Activación falló"
+
+#: ../tui/nmtui-connect.c:134
+msgid "Connecting..."
+msgstr "Conectándose..."
+
+#: ../tui/nmtui-connect.c:159
+#, c-format
+msgid "Could not activate connection: %s"
+msgstr "No se pudo activar conexión: %s"
+
+#: ../tui/nmtui-connect.c:218 ../tui/nmtui-connect.c:274
+msgid "Activate"
+msgstr "Activar"
+
+#: ../tui/nmtui-connect.c:220
+msgid "Deactivate"
+msgstr "Desactivar"
+
+#: ../tui/nmtui-connect.c:279 ../tui/nmtui-edit.c:102 ../tui/nmtui.c:114
+msgid "Quit"
+msgstr "Salir"
+
+#: ../tui/nmtui-connect.c:304
+#, c-format
+msgid "No such connection '%s'"
+msgstr "No hay tal conexión '%s'"
+
+#: ../tui/nmtui-connect.c:306
+msgid "Connection is already active"
+msgstr "La conexión ya está activa"
+
+#: ../tui/nmtui-edit.c:209
+msgid "Create"
+msgstr "Crear"
+
+#: ../tui/nmtui-edit.c:350
+msgid "Select the type of connection you wish to create."
+msgstr "Seleccionar el tipo de conexión que desea crear."
+
+#: ../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 ""
+"Si está creando un VPN y la conexión VPN que usted desea crear no aparece en "
+"la lista, puede ser que usted no tenga el correcto complemento VPN instalado."
+""
+
+#: ../tui/nmtui-edit.c:390 ../tui/nmtui-edit.c:406
+msgid "New Connection"
+msgstr "Nueva conexión"
+
+#: ../tui/nmtui-edit.c:443
+#, c-format
+msgid "Unable to delete connection: %s"
+msgstr "No se pudo borrar conexión: %s"
+
+#: ../tui/nmtui-edit.c:472
+#, c-format
+msgid "Are you sure you want to delete the connection '%s'?"
+msgstr "¿Está seguro de que desea eliminar la conexión '%s'?"
+
+#: ../tui/nmtui-edit.c:486
+#, c-format
+msgid "Could not delete connection: %s"
+msgstr "No se pudo borrar conexión: %s"
+
+#: ../tui/nmtui-hostname.c:47
+msgid "Set Hostname"
+msgstr "Establecer nombre de host"
+
+#: ../tui/nmtui-hostname.c:55
+msgid "Hostname"
+msgstr "Nombre de host"
+
+#: ../tui/nmtui-hostname.c:114
+#, c-format
+msgid "Set hostname to '%s'"
+msgstr "Establecer nombre de host '%s'"
+
+#: ../tui/nmtui-hostname.c:116
+#, c-format
+msgid "Unable to set hostname: %s"
+msgstr "No se pudo borrar el nombre de host: %s"
-#~ msgid "Auto %s"
-#~ msgstr "Auto %s"
+#: ../tui/nmtui.c:59 ../tui/nmtui.c:62
+msgid "connection"
+msgstr "Conexión"
-#~ msgid "SCOPE"
-#~ msgstr "ALCANCE"
+#: ../tui/nmtui.c:60
+msgid "Edit a connection"
+msgstr "Modificar una conexión"
-#~ msgid "DBUS-SERVICE"
-#~ msgstr "SERVICIO DBUS"
+#: ../tui/nmtui.c:63
+msgid "Activate a connection"
+msgstr "Activar una conexión"
-#~ msgid "system"
-#~ msgstr "sistema"
+#: ../tui/nmtui.c:65
+msgid "new hostname"
+msgstr "Nuevo nombre de host"
-#~ msgid "user"
-#~ msgstr "usuario"
+#: ../tui/nmtui.c:66
+msgid "Set system hostname"
+msgstr "Establecer nombre de host de sistema"
-#~ msgid "System connections"
-#~ msgstr "Conexiones de sistema"
+#: ../tui/nmtui.c:89
+msgid "NetworkManager TUI"
+msgstr "NetworkManager TUI"
-#~ msgid "User connections"
-#~ msgstr "Conexiones de usuario"
+#: ../tui/nmtui.c:97
+msgid "Please select an option"
+msgstr "Por favor seleccione una opción"
-#~ msgid "Error: Could not get user settings."
-#~ msgstr "Error: No se pudo obtener configuración de usuario."
+#: ../tui/nmtui.c:154
+msgid "Usage"
+msgstr "Uso "
-#~ msgid "Allow use of user-specific connections"
-#~ msgstr "Permitir el uso de conexiones especiÌficas de usuario"
+#: ../tui/nmtui.c:221
+msgid "Could not parse arguments"
+msgstr "No se pudieron leer los argumentos"
-#~ msgid "System policy prevents use of user-specific connections"
-#~ msgstr ""
-#~ "La poliÌtica del sistema evita el uso de conexiones especiÌficas de usuario"
+#: ../tui/nmtui.c:229
+msgid "NetworkManager is not running."
+msgstr "NetworkManager no está funcionando."
diff --git a/po/fr.po b/po/fr.po
index 378831edc..add329026 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -8,1193 +8,4043 @@
# Robert-André Mauchin <zebob.m@pengzone.org>, 2007-2008.
# Sam Friedmann <sam.friedmann@redhat.com>, 2010.
# Claude Paroz <claude@2xlibre.net>, 2011
+# Sam Friedmann <sfriedma@redhat.com>, 2010, 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: fr\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=NetworkManager&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2011-09-24 03:25+0000\n"
-"PO-Revision-Date: 2010-05-07 15:23+1000\n"
-"Last-Translator: Claude Paroz <claude@2xlibre.net>\n"
-"Language-Team: French <traduc@traduc.org>\n"
+"POT-Creation-Date: 2014-01-23 17:13+0530\n"
+"PO-Revision-Date: 2014-02-04 01:19-0500\n"
+"Last-Translator: Sam Friedmann <sfriedma@redhat.com>\n"
+"Language-Team: French <trans-fr@lists.fedoraproject.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Language: fr\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"
+"X-Generator: Zanata 3.2.3\n"
-#: ../cli/src/connections.c:64 ../cli/src/connections.c:78
-#: ../cli/src/devices.c:101 ../cli/src/devices.c:114 ../cli/src/devices.c:124
-#: ../cli/src/devices.c:134 ../cli/src/devices.c:148 ../cli/src/devices.c:162
-#: ../cli/src/devices.c:173 ../cli/src/devices.c:184 ../cli/src/devices.c:193
-#: ../cli/src/devices.c:202 ../cli/src/devices.c:224
+#: ../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 "GROUPE"
+
+#: ../cli/src/common.c:35 ../cli/src/common.c:55
+msgid "ADDRESS"
+msgstr "ADRESSE"
+
+#: ../cli/src/common.c:36 ../cli/src/common.c:56
+msgid "ROUTE"
+msgstr "ROUTE"
+
+#: ../cli/src/common.c:37 ../cli/src/common.c:57
+msgid "DNS"
+msgstr "DNS"
+
+#: ../cli/src/common.c:38 ../cli/src/common.c:58
+msgid "DOMAIN"
+msgstr "DOMAINE"
+
+#: ../cli/src/common.c:39
+msgid "WINS"
+msgstr "WINS"
+
+#: ../cli/src/common.c:47 ../cli/src/common.c:66
+msgid "OPTION"
+msgstr "OPTION"
+
+#: ../cli/src/common.c:404 ../cli/src/settings.c:2808
+#, c-format
+msgid "invalid IPv4 address '%s'"
+msgstr "adresse IPv4 « %s » non valide"
+
+#: ../cli/src/common.c:412
+#, c-format
+msgid "invalid prefix '%s'; <1-32> allowed"
+msgstr "préfixe « %s » non valide ; <1-32> permis"
+
+#: ../cli/src/common.c:419 ../cli/src/common.c:472
+#, c-format
+msgid "invalid gateway '%s'"
+msgstr "passerelle « %s » non valide"
+
+#: ../cli/src/common.c:457 ../cli/src/settings.c:3054
+#, c-format
+msgid "invalid IPv6 address '%s'"
+msgstr "adresse IPv6 « %s » non valide"
+
+#: ../cli/src/common.c:465
+#, c-format
+msgid "invalid prefix '%s'; <1-128> allowed"
+msgstr "préfixe « %s » non valide ; <1-128> permis"
+
+#: ../cli/src/common.c:512
+#, c-format
+msgid "invalid IPv4 route '%s'"
+msgstr "route IPv4 « %s » non valide"
+
+#: ../cli/src/common.c:520
+#, c-format
+msgid "invalid prefix '%s'; <0-32> allowed"
+msgstr "préfixe « %s » non valide ; <0-32> permis"
+
+#: ../cli/src/common.c:527 ../cli/src/common.c:590
+#, c-format
+msgid "invalid next hop address '%s'"
+msgstr "adresse hop suivante « %s » non valide"
+
+#: ../cli/src/common.c:534 ../cli/src/common.c:598
+#, c-format
+msgid "invalid metric '%s'"
+msgstr "métrique « %s » non valide"
+
+#: ../cli/src/common.c:575
+#, c-format
+msgid "invalid IPv6 route '%s'"
+msgstr "route IPv6 « %s » non valide"
+
+#: ../cli/src/common.c:583
+#, c-format
+msgid "invalid prefix '%s'; <0-128> allowed"
+msgstr "préfixe « %s » non valide ; <0-128> permis"
+
+#: ../cli/src/common.c:619
+msgid "unmanaged"
+msgstr "non-géré"
+
+#: ../cli/src/common.c:621
+msgid "unavailable"
+msgstr "indisponible"
+
+#: ../cli/src/common.c:623 ../cli/src/network-manager.c:276
+msgid "disconnected"
+msgstr "déconnecté"
+
+#: ../cli/src/common.c:625
+msgid "connecting (prepare)"
+msgstr "connexion (préparation)"
+
+#: ../cli/src/common.c:627
+msgid "connecting (configuring)"
+msgstr "connexion (configuration)"
+
+#: ../cli/src/common.c:629
+msgid "connecting (need authentication)"
+msgstr "connexion (authentification requise)"
+
+#: ../cli/src/common.c:631
+msgid "connecting (getting IP configuration)"
+msgstr "connexion (obtention de la configuration IP)"
+
+#: ../cli/src/common.c:633
+msgid "connecting (checking IP connectivity)"
+msgstr "connexion (contrôle de la connectivité IP)"
+
+#: ../cli/src/common.c:635
+msgid "connecting (starting secondary connections)"
+msgstr "connexion (démarrage des connexions secondaires)"
+
+#: ../cli/src/common.c:637 ../cli/src/network-manager.c:272
+msgid "connected"
+msgstr "connecté"
+
+#: ../cli/src/common.c:639 ../cli/src/connections.c:732
+msgid "deactivating"
+msgstr "désactivation"
+
+#: ../cli/src/common.c:641
+msgid "connection failed"
+msgstr "échec de la connexion"
+
+#: ../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 "inconnu"
+
+#: ../cli/src/common.c:652
+msgid "No reason given"
+msgstr "Aucun raison donnée"
+
+#: ../cli/src/common.c:655 ../cli/src/connections.c:2258
+#, c-format
+msgid "Unknown error"
+msgstr "Erreur inconnue"
+
+#: ../cli/src/common.c:658
+msgid "Device is now managed"
+msgstr "Le périphérique est maintenant géré"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:661
+msgid "Device is now unmanaged"
+msgstr "Le périphérique n'est pas géré actuellement"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:664
+msgid "The device could not be readied for configuration"
+msgstr "Le périphérique n'a pas pu être apprêté pour la configuration"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:667
+msgid ""
+"IP configuration could not be reserved (no available address, timeout, etc.)"
+msgstr ""
+"La configuration IP n'a pas pu être réservée (aucun adresse disponible, "
+"délai d'expiration, etc. )"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:670
+msgid "The IP configuration is no longer valid"
+msgstr "La configuration IP n'est plus valide"
+
+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0
+#: ../cli/src/common.c:673
+msgid "Secrets were required, but not provided"
+msgstr "Des secrets étaient requis, mais aucun n'a été fourni"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:676
+msgid "802.1X supplicant disconnected"
+msgstr "supplicant 802.1X déconnecté"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:679
+msgid "802.1X supplicant configuration failed"
+msgstr "Échec de la configuration du supplicant 802.1X"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:682
+msgid "802.1X supplicant failed"
+msgstr "Échec du supplicant 802.1X"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:685
+msgid "802.1X supplicant took too long to authenticate"
+msgstr "Le supplicant 802.1X a pris trop longtemps pour s'authentifier"
+
+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0
+#: ../cli/src/common.c:688
+msgid "PPP service failed to start"
+msgstr "Échec du démarrage du service PPP"
+
+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0
+#: ../cli/src/common.c:691
+msgid "PPP service disconnected"
+msgstr "Service PPP déconnecté"
+
+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0
+#: ../cli/src/common.c:694
+msgid "PPP failed"
+msgstr "Échec de PPP"
+
+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0
+#: ../cli/src/common.c:697
+msgid "DHCP client failed to start"
+msgstr "Échec du démarrage du client DHCP"
+
+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0
+#: ../cli/src/common.c:700
+msgid "DHCP client error"
+msgstr "Erreur du client DHCP"
+
+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0
+#: ../cli/src/common.c:703
+msgid "DHCP client failed"
+msgstr "Échec du client DHCP"
+
+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0
+#: ../cli/src/common.c:706
+msgid "Shared connection service failed to start"
+msgstr "Le démarrage du service de connexion partagée a échoué"
+
+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0
+#: ../cli/src/common.c:709
+msgid "Shared connection service failed"
+msgstr "Le service de connexion partagée a échoué"
+
+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0
+#: ../cli/src/common.c:712
+msgid "AutoIP service failed to start"
+msgstr "Le service autoIP n'a pas réussi à démarrer"
+
+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0
+#: ../cli/src/common.c:715
+msgid "AutoIP service error"
+msgstr "Erreur du service autoIP"
+
+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0
+#: ../cli/src/common.c:718
+msgid "AutoIP service failed"
+msgstr "Le service autoIP a échoué"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:721
+msgid "The line is busy"
+msgstr "La ligne est occupée"
+
+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0
+#: ../cli/src/common.c:724
+msgid "No dial tone"
+msgstr "Pas de tonalité"
+
+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0
+#: ../cli/src/common.c:727
+msgid "No carrier could be established"
+msgstr "Aucune porteuse n'a pu être établie"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:730
+msgid "The dialing request timed out"
+msgstr "Délai de requête de numérotation dépassé"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:733
+msgid "The dialing attempt failed"
+msgstr "La tentative de numérotation a échoué"
+
+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0
+#: ../cli/src/common.c:736
+msgid "Modem initialization failed"
+msgstr "L'initialisation du modem a échoué"
+
+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0
+#: ../cli/src/common.c:739
+msgid "Failed to select the specified APN"
+msgstr "Échec de la sélection de l'APN spécifié"
+
+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0
+#: ../cli/src/common.c:742
+msgid "Not searching for networks"
+msgstr "Aucune recherche de réseau en cours"
+
+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0
+#: ../cli/src/common.c:745
+msgid "Network registration denied"
+msgstr "Enregistrement au réseau refusé"
+
+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0
+#: ../cli/src/common.c:748
+msgid "Network registration timed out"
+msgstr "Délai dépassé pour l'enregistrement au réseau"
+
+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0
+#: ../cli/src/common.c:751
+msgid "Failed to register with the requested network"
+msgstr "Échec de l'enregistrement au réseau demandé"
+
+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0
+#: ../cli/src/common.c:754
+msgid "PIN check failed"
+msgstr "La vérification du code PIN a échoué"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:757
+msgid "Necessary firmware for the device may be missing"
+msgstr "Le micrologiciel nécessaire du périphérique pourrait être manquant"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:760
+msgid "The device was removed"
+msgstr "Le périphérique a été supprimé"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:763
+msgid "NetworkManager went to sleep"
+msgstr "NetworkManager est en veille"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:766
+msgid "The device's active connection disappeared"
+msgstr "La connexion active du périphérique a disparu"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:769
+msgid "Device disconnected by user or client"
+msgstr "Le périphérique a été déconnecté par l'utilisateur ou le client"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:772
+msgid "Carrier/link changed"
+msgstr "Porteuse ou lien modifié(e)"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:775
+msgid "The device's existing connection was assumed"
+msgstr "La connexion existante du périphérique a été supposée"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:778
+msgid "The supplicant is now available"
+msgstr "Le demandeur est maintenant disponible"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:781
+msgid "The modem could not be found"
+msgstr "Le modem est introuvable"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:784
+msgid "The Bluetooth connection failed or timed out"
+msgstr "La connexion Bluetooth a échoué ou son délai d'attente a été dépassé"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:787
+msgid "GSM Modem's SIM card not inserted"
+msgstr "La carte SIM du modem GSM n'est pas insérée"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:790
+msgid "GSM Modem's SIM PIN required"
+msgstr "Le code PIN de la SIM du modem GSM est nécessaire"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:793
+msgid "GSM Modem's SIM PUK required"
+msgstr "Le code PUK de la SIM du modem GSM est requis"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:796
+msgid "GSM Modem's SIM wrong"
+msgstr "La carte SIM du modem GSM est incorrecte"
+
+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0
+#: ../cli/src/common.c:799
+msgid "InfiniBand device does not support connected mode"
+msgstr "Le périphérique InfiniBand ne prend pas en charge le mode connecté"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:802
+msgid "A dependency of the connection failed"
+msgstr "Une dépendance de la connexion a échoué"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:805
+msgid "A problem with the RFC 2684 Ethernet over ADSL bridge"
+msgstr "Problème avec Ethernet RFC 2684 sur pont ADSL"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:808
+msgid "ModemManager is unavailable"
+msgstr "ModemManager est indisponible"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:811
+msgid "The Wi-Fi network could not be found"
+msgstr "Le réseau Wi-Fi est introuvable"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:814
+msgid "A secondary connection of the base connection failed"
+msgstr "Une connexion secondaire à la connexion de base a échoué"
+
+#: ../cli/src/common.c:817
+msgid "DCB or FCoE setup failed"
+msgstr "L'installation DCB ou FCoE a échoué"
+
+#: ../cli/src/common.c:820
+msgid "teamd control failed"
+msgstr "échec du contrôle teamd"
+
+#: ../cli/src/common.c:824 ../cli/src/devices.c:634 ../tui/nm-ui-utils.c:359
+msgid "Unknown"
+msgstr "Inconnu"
+
+#: ../cli/src/common.c:866
+#, c-format
+msgid "invalid priority map '%s'"
+msgstr "Plan des priorités non valide « %s »"
+
+#: ../cli/src/common.c:873 ../cli/src/common.c:879
+#, c-format
+msgid "priority '%s' is not valid (<0-%ld>)"
+msgstr "la priorité « %s » est non valide (<0-%ld>)"
+
+#: ../cli/src/common.c:935
+#, c-format
+msgid "'%s' is not a valid team configuration or file name."
+msgstr ""
+"« %s » n'est pas une configuration ou un nom de fichier d'équipe valide."
+
+#: ../cli/src/connections.c:62
+msgid "Setting name? "
+msgstr "Nom du paramètre ?"
+
+#: ../cli/src/connections.c:63
+msgid "Property name? "
+msgstr "Nom de la propriété ?"
+
+#: ../cli/src/connections.c:64
+msgid "Enter connection type: "
+msgstr "Saisissez le type de connexion : "
+
+#: ../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 "NOM"
-#. 0
-#: ../cli/src/connections.c:65 ../cli/src/connections.c:79
+#: ../cli/src/connections.c:69 ../cli/src/connections.c:176
msgid "UUID"
msgstr "UUID"
-#. 1
-#: ../cli/src/connections.c:66
+#: ../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"
+
+#: ../cli/src/connections.c:71
+msgid "TIMESTAMP"
+msgstr "TIMESTAMP"
+
+#: ../cli/src/connections.c:72
+msgid "TIMESTAMP-REAL"
+msgstr "TIMESTAMP-REAL"
+
+#: ../cli/src/connections.c:73 ../cli/src/devices.c:101
+msgid "AUTOCONNECT"
+msgstr "AUTOCONNECT"
+
+#: ../cli/src/connections.c:74
+msgid "READONLY"
+msgstr "LECT. SEULE"
+
+#: ../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 "CHEMIN DBUS"
+
+#: ../cli/src/connections.c:177
msgid "DEVICES"
msgstr "PÉRIPHÉRIQUES"
-#. 2
-#: ../cli/src/connections.c:67
+#: ../cli/src/connections.c:178 ../cli/src/devices.c:73
+#: ../cli/src/devices.c:96 ../cli/src/network-manager.c:39
+msgid "STATE"
+msgstr "ÉTAT"
+
+#: ../cli/src/connections.c:179
msgid "DEFAULT"
msgstr "PAR DÉFAUT"
-#. 3
-#: ../cli/src/connections.c:68
+#: ../cli/src/connections.c:180
+msgid "DEFAULT6"
+msgstr "DEFAULT6"
+
+#: ../cli/src/connections.c:181
msgid "SPEC-OBJECT"
msgstr "SPEC-OBJECT"
-#. 4
-#: ../cli/src/connections.c:69
+#: ../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"
-#. 5
-#. 6
-#. 2
-#. 11
-#. 5
-#: ../cli/src/connections.c:70 ../cli/src/connections.c:85
-#: ../cli/src/devices.c:69 ../cli/src/devices.c:214 ../cli/src/devices.c:230
-msgid "DBUS-PATH"
-msgstr "CHEMIN DBUS"
+#: ../cli/src/connections.c:184 ../cli/src/devices.c:77
+#: ../cli/src/devices.c:105
+msgid "CON-PATH"
+msgstr "CON-PATH"
-#. 1
-#. 0
-#. 1
-#. 2
-#: ../cli/src/connections.c:80 ../cli/src/devices.c:67
-#: ../cli/src/devices.c:103 ../cli/src/devices.c:227
-msgid "TYPE"
-msgstr "TYPE"
+#: ../cli/src/connections.c:185
+msgid "ZONE"
+msgstr "ZONE"
-#. 2
-#: ../cli/src/connections.c:81
-msgid "TIMESTAMP"
-msgstr "TIMESTAMP"
+#: ../cli/src/connections.c:186
+msgid "MASTER-PATH"
+msgstr "CHEMIN-MAÃŽTRE"
-#. 3
-#: ../cli/src/connections.c:82
-msgid "TIMESTAMP-REAL"
-msgstr "TIMESTAMP-REAL"
+#: ../cli/src/connections.c:202
+msgid "USERNAME"
+msgstr "NOM D'UTILISATEUR"
-#. 4
-#: ../cli/src/connections.c:83
-msgid "AUTOCONNECT"
-msgstr "AUTOCONNECT"
+#: ../cli/src/connections.c:203
+msgid "GATEWAY"
+msgstr "PASSERELLE"
-#. 5
-#: ../cli/src/connections.c:84
-msgid "READONLY"
-msgstr "LECT. SEULE"
+#: ../cli/src/connections.c:204
+msgid "BANNER"
+msgstr "BANNIÈRE"
+
+#: ../cli/src/connections.c:205
+msgid "VPN-STATE"
+msgstr "ÉTAT-VPN"
+
+#: ../cli/src/connections.c:206
+msgid "CFG"
+msgstr "CFG"
+
+#: ../cli/src/connections.c:219 ../cli/src/devices.c:236
+msgid "GENERAL"
+msgstr "GÉNÉRAL"
+
+#: ../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:153
+#: ../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 | delete }\n"
+"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"
-" 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"
msgstr ""
-"Utilisation : nmcli con { COMMANDE | help }\n"
-" COMMANDE := { list | status | up | down }\n"
+"Utilisation : 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"
-" list [id <id> | uuid <id>]\n"
-" status\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <nom>] [--"
-"nowait] [--timeout <délai>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--timeout "
-"<délai>]\n"
-" down id <id> | uuid <id>\n"
-" delete id <id> | uuid <id>\n"
-#: ../cli/src/connections.c:208 ../cli/src/connections.c:532
+#: ../cli/src/connections.c:278
#, c-format
-msgid "Error: 'con list': %s"
-msgstr "Erreur : « 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 ""
+"Utilisation : nmcli connection show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := active [[id | uuid | path | apath] <ID>]\n"
+"\n"
+"Afficher les connexions actuellement utilisées par un périphérique pour se "
+"connecter à un réseau.\n"
+"Sans un paramètres, toutes les connexions actives sont répertoriées. Lorsque "
+"<ID> est fourni,\n"
+"les détails de la connexion sont affichés à la place.\n"
+"\n"
+"ARGUMENTS := configured [[id | uuid | path] <ID>]\n"
+"\n"
+"Afficher les connexions sur mémoire et sur disque, dont certaines peuvent "
+"aussi être actives si\n"
+"un périphérique utilise ce profil de connexion. Sans paramètre, tous les "
+"profils\n"
+"sont répertoriés. Lorsque <ID> est fourni, les détails du profil sont "
+"affichés à la place.\n"
+"\n"
-#: ../cli/src/connections.c:210 ../cli/src/connections.c:534
+#: ../cli/src/connections.c:297
#, c-format
-msgid "Error: 'con list': %s; allowed fields: %s"
-msgstr "Erreur : « con list » : %s ; champs autorisés : %s"
-
-#: ../cli/src/connections.c:218
-msgid "Connection details"
-msgstr "Détails de connexion"
-
-#: ../cli/src/connections.c:407
-msgid "never"
-msgstr "jamais"
-
-#. "CAPABILITIES"
-#. Print header
-#. "WIFI-PROPERTIES"
-#: ../cli/src/connections.c:408 ../cli/src/connections.c:409
-#: ../cli/src/connections.c:587 ../cli/src/connections.c:589
-#: ../cli/src/devices.c:499 ../cli/src/devices.c:552 ../cli/src/devices.c:677
-#: ../cli/src/devices.c:703 ../cli/src/devices.c:704 ../cli/src/devices.c:705
-#: ../cli/src/devices.c:706 ../cli/src/devices.c:707 ../cli/src/settings.c:560
-#: ../cli/src/settings.c:632 ../cli/src/settings.c:753
-#: ../cli/src/settings.c:1041 ../cli/src/settings.c:1042
-#: ../cli/src/settings.c:1044 ../cli/src/settings.c:1046
-#: ../cli/src/settings.c:1047 ../cli/src/settings.c:1177
-#: ../cli/src/settings.c:1178 ../cli/src/settings.c:1179
-#: ../cli/src/settings.c:1180 ../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:1268 ../cli/src/settings.c:1269
-#: ../cli/src/settings.c:1270 ../cli/src/settings.c:1271
-#: ../cli/src/settings.c:1346
-msgid "yes"
-msgstr "oui"
-
-#: ../cli/src/connections.c:408 ../cli/src/connections.c:409
-#: ../cli/src/connections.c:587 ../cli/src/connections.c:589
-#: ../cli/src/devices.c:499 ../cli/src/devices.c:552 ../cli/src/devices.c:677
-#: ../cli/src/devices.c:703 ../cli/src/devices.c:704 ../cli/src/devices.c:705
-#: ../cli/src/devices.c:706 ../cli/src/devices.c:707 ../cli/src/settings.c:560
-#: ../cli/src/settings.c:562 ../cli/src/settings.c:632
-#: ../cli/src/settings.c:753 ../cli/src/settings.c:1041
-#: ../cli/src/settings.c:1042 ../cli/src/settings.c:1044
-#: ../cli/src/settings.c:1046 ../cli/src/settings.c:1047
-#: ../cli/src/settings.c:1177 ../cli/src/settings.c:1178
-#: ../cli/src/settings.c:1179 ../cli/src/settings.c:1180
-#: ../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:1268
-#: ../cli/src/settings.c:1269 ../cli/src/settings.c:1270
-#: ../cli/src/settings.c:1271 ../cli/src/settings.c:1346
-msgid "no"
-msgstr "non"
-
-#: ../cli/src/connections.c:483
-msgid "Connection list"
-msgstr "Liste des connexions"
+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 ""
+"Utilisation : nmcli connection up { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> [ifname <ifname>] [ap <BSSID>] [nsp "
+"<name>]\n"
+"\n"
+"Activer une connexion sur un périphérique. Le profil à activer est identifié "
+"par son\n"
+"nom, UUID ou chemin D-Bus.\n"
+"\n"
+"ARGUMENTS := ifname <ifname> [ap <BSSID>] [nsp <name>]\n"
+"\n"
+"Activer un périphérique avec une connexion. Le profil de connexion est "
+"automatiquement\n"
+"sélectionné par NetworkManager.\n"
+"\n"
+"ifname - spécifie le périphérique sur lequel activer la connexion\n"
+"ap - spécifie sur quel AP se connecter (valide pour Wi-Fi uniquement)\n"
+"nsp - spécifie sur quel NSP se connecter (valide pour WiMAX uniquement)\n"
+"\n"
-#: ../cli/src/connections.c:496 ../cli/src/connections.c:1356
-#: ../cli/src/connections.c:1371 ../cli/src/connections.c:1380
-#: ../cli/src/connections.c:1390 ../cli/src/connections.c:1402
-#: ../cli/src/connections.c:1497 ../cli/src/connections.c:1580
-#: ../cli/src/devices.c:1180 ../cli/src/devices.c:1190
-#: ../cli/src/devices.c:1304 ../cli/src/devices.c:1312
-#: ../cli/src/devices.c:1525 ../cli/src/devices.c:1532
+#: ../cli/src/connections.c:318
#, c-format
-msgid "Error: %s argument is missing."
-msgstr "Erreur : le paramètre %s est manquant."
+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 ""
+"Utilisation : nmcli connection down { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path | apath] <ID>\n"
+"\n"
+"Désactiver une connexion d'un périphérique (sans empêcher le périphérique "
+"d'utiliser\n"
+"l'activation automatique). Le profil à désactiver est identifié par son nom,\n"
+"UUID ou chemin D-Bus.\n"
+"\n"
-#: ../cli/src/connections.c:509
+#: ../cli/src/connections.c:331
#, c-format
-msgid "Error: %s - no such connection."
-msgstr "Erreur : %s - connexion introuvable."
+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 ""
+"Utilisation : 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:515 ../cli/src/connections.c:1415
-#: ../cli/src/connections.c:1514 ../cli/src/connections.c:1587
-#: ../cli/src/devices.c:977 ../cli/src/devices.c:1057
-#: ../cli/src/devices.c:1204 ../cli/src/devices.c:1318
-#: ../cli/src/devices.c:1538
+#: ../cli/src/connections.c:408
#, c-format
-msgid "Unknown parameter: %s\n"
-msgstr "Paramètre inconnu : %s\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 ""
+"Utilisation : nmcli connection modify { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> <setting name>.<property name> "
+"[<value>]\n"
+"\n"
+"Modifier une seule propriété dans le profil de connexion.\n"
+"Le profil est identifié par son nom, UUID ou chemin D-Bus.\n"
+"\n"
-#: ../cli/src/connections.c:524
+#: ../cli/src/connections.c:420
#, c-format
-msgid "Error: no valid parameter specified."
-msgstr "Erreur : aucun paramètre valide spécifié."
+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 ""
+"Utilisation : nmcli connection edit { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"Modifier un profil de connexion dans un éditeur interactif.\n"
+"Le profil est identifié par son nom, UUID ou chemin D-Bus\n"
+"\n"
+"ARGUMENTS := [type <new connection type>] [con-name <new connection name>]\n"
+"\n"
+"Ajouter un nouveau profil de connexion dans un éditeur interactif.\n"
+"\n"
-#: ../cli/src/connections.c:539 ../cli/src/connections.c:1668
-#: ../cli/src/devices.c:1746 ../cli/src/network-manager.c:456
+#: ../cli/src/connections.c:436
#, c-format
-msgid "Error: %s."
-msgstr "Erreur : %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 ""
+"Utilisation : nmcli connection delete { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID>\n"
+"\n"
+"Supprimer un profil de connexion.\n"
+"Le profil est identifié par son nom, UUID ou chemin D-Bus.\n"
+"\n"
-#: ../cli/src/connections.c:627
+#: ../cli/src/connections.c:448
#, c-format
-msgid "Error: 'con status': %s"
-msgstr "Erreur : « con status » : %s"
+msgid ""
+"Usage: nmcli connection reload { help }\n"
+"\n"
+"Reload all connection files from disk.\n"
+"\n"
+msgstr ""
+"Utilisation : nmcli connection reload { help }\n"
+"\n"
+"Recharger tous les fichiers de connexion à partir du disque.\n"
+"\n"
-#: ../cli/src/connections.c:629
+#: ../cli/src/connections.c:457
#, c-format
-msgid "Error: 'con status': %s; allowed fields: %s"
-msgstr "Erreur : « con status » : %s ; champs autorisé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 ""
+"Utilisation : nmcli connection load { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <filename> [<filename>...]\n"
+"\n"
+"Charger/recharger un ou plusieurs fichier(s) de connexion à partir du disque."
+" Utiliser ceci après\n"
+"avoir manuellement modifié un fichier de connexion afin de vous assurer que "
+"NetworkManager est\n"
+"conscient de état le plus récent.\n"
+"\n"
-#: ../cli/src/connections.c:637 ../cli/src/connections.c:1430
-#: ../cli/src/connections.c:1529 ../cli/src/connections.c:1601
-#: ../cli/src/devices.c:1004 ../cli/src/devices.c:1066
-#: ../cli/src/devices.c:1219 ../cli/src/devices.c:1348
-#: ../cli/src/devices.c:1567
+#: ../cli/src/connections.c:515
#, c-format
-msgid "Error: Can't find out if NetworkManager is running: %s."
-msgstr "Erreur : impossible de savoir si NetworkManager fonctionne : %s."
+msgid "Error: 'list configured': %s"
+msgstr "Erreur : « répertorier les connexions configurées » : %s"
-#: ../cli/src/connections.c:641 ../cli/src/connections.c:1434
-#: ../cli/src/connections.c:1533 ../cli/src/connections.c:1605
-#: ../cli/src/devices.c:1008 ../cli/src/devices.c:1070
-#: ../cli/src/devices.c:1223 ../cli/src/devices.c:1352
-#: ../cli/src/devices.c:1571
-#, c-format
-msgid "Error: NetworkManager is not running."
-msgstr "Erreur : NetworkManager n'est pas lancé."
+#: ../cli/src/connections.c:523
+msgid "Connection details"
+msgstr "Détails de connexion"
-#: ../cli/src/connections.c:649
-msgid "Active connections"
-msgstr "Connexions actives"
+#: ../cli/src/connections.c:589
+msgid "never"
+msgstr "jamais"
-#: ../cli/src/connections.c:1073
+#: ../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 "oui"
+
+#: ../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 "non"
+
+#: ../cli/src/connections.c:667
+msgid "List of configured connections"
+msgstr "Liste des connexions configurées"
+
+#: ../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 "no active connection on device '%s'"
-msgstr "aucune connexion active sur le périphérique « %s »"
+msgid "Error: %s argument is missing."
+msgstr "Erreur : le paramètre %s est manquant."
-#: ../cli/src/connections.c:1081
+#: ../cli/src/connections.c:698
#, c-format
-msgid "no active connection or device"
-msgstr "aucune connexion ou périphérique actif"
+msgid "Error: %s - no such connection."
+msgstr "Erreur : %s - connexion introuvable."
-#: ../cli/src/connections.c:1152
+#: ../cli/src/connections.c:710
#, c-format
-msgid "device '%s' not compatible with connection '%s'"
-msgstr "périphérique « %s » incompatible avec la connexion « %s »"
+msgid "Error: 'show configured': %s"
+msgstr "Erreur : « afficher les connexions configurées » : %s"
-#: ../cli/src/connections.c:1154
+#: ../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 "no device found for connection '%s'"
-msgstr "aucun périphérique trouvé pour la connexion « %s »"
+msgid "Error: %s."
+msgstr "Erreur : %s."
-#: ../cli/src/connections.c:1165
+#: ../cli/src/connections.c:728
msgid "activating"
msgstr "activation"
-#: ../cli/src/connections.c:1167
+#: ../cli/src/connections.c:730
msgid "activated"
msgstr "activé"
-#: ../cli/src/connections.c:1169 ../cli/src/devices.c:294
-msgid "deactivating"
-msgstr "désactivation"
-
-#: ../cli/src/connections.c:1172 ../cli/src/connections.c:1195
-#: ../cli/src/connections.c:1228 ../cli/src/devices.c:298
-#: ../cli/src/devices.c:678 ../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:513
-#: ../cli/src/utils.c:397
-msgid "unknown"
-msgstr "inconnu"
+#: ../cli/src/connections.c:734
+msgid "deactivated"
+msgstr "désactivé"
-#: ../cli/src/connections.c:1181
+#: ../cli/src/connections.c:746
msgid "VPN connecting (prepare)"
msgstr "Connexion VPN (préparation)"
-#: ../cli/src/connections.c:1183
+#: ../cli/src/connections.c:748
msgid "VPN connecting (need authentication)"
msgstr "Connexion VPN (authentification requise)"
-#: ../cli/src/connections.c:1185
+#: ../cli/src/connections.c:750
msgid "VPN connecting"
msgstr "Connexion VPN"
-#: ../cli/src/connections.c:1187
+#: ../cli/src/connections.c:752
msgid "VPN connecting (getting IP configuration)"
msgstr "Connexion VPN (obtention de la configuration IP)"
-#: ../cli/src/connections.c:1189
+#: ../cli/src/connections.c:754
msgid "VPN connected"
msgstr "VPN connecté"
-#: ../cli/src/connections.c:1191
+#: ../cli/src/connections.c:756
msgid "VPN connection failed"
msgstr "Échec de la connexion VPN"
-#: ../cli/src/connections.c:1193
+#: ../cli/src/connections.c:758
msgid "VPN disconnected"
msgstr "VPN déconnecté"
-#: ../cli/src/connections.c:1204
+#: ../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:1012
+#, c-format
+msgid "Error: 'list active': %s"
+msgstr "Erreur : « répertorier les connexions actives » : %s"
+
+#: ../cli/src/connections.c:1020
+msgid "Active connection details"
+msgstr "Détails de la connexion active"
+
+#: ../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 "Erreur : NetworkManager n'est pas lancé."
+
+#: ../cli/src/connections.c:1203
+msgid "List of active connections"
+msgstr "Liste des connexions actives"
+
+#: ../cli/src/connections.c:1239 ../cli/src/connections.c:1926
+#, c-format
+msgid "Error: '%s' is not an active connection."
+msgstr "Erreur : « %s » n'est pas une connexion active."
+
+#: ../cli/src/connections.c:1251
+#, c-format
+msgid "Error: 'show active': %s"
+msgstr "Erreur : « afficher les connexions actives » : %s"
+
+#: ../cli/src/connections.c:1344
+#, c-format
+msgid "no active connection on device '%s'"
+msgstr "aucune connexion active sur le périphérique « %s »"
+
+#: ../cli/src/connections.c:1352
+msgid "no active connection or device"
+msgstr "aucune connexion ou périphérique actif"
+
+#: ../cli/src/connections.c:1423
+#, c-format
+msgid "device '%s' not compatible with connection '%s'"
+msgstr "périphérique « %s » incompatible avec la connexion « %s »"
+
+#: ../cli/src/connections.c:1426
+#, c-format
+msgid "no device found for connection '%s'"
+msgstr "aucun périphérique trouvé pour la connexion « %s »"
+
+#: ../cli/src/connections.c:1438
msgid "unknown reason"
msgstr "raison inconnue"
-#: ../cli/src/connections.c:1206
+#: ../cli/src/connections.c:1440 ../cli/src/network-manager.c:288
msgid "none"
msgstr "aucun"
-#: ../cli/src/connections.c:1208
+#: ../cli/src/connections.c:1442
msgid "the user was disconnected"
msgstr "l'utilisateur a été déconnecté"
-#: ../cli/src/connections.c:1210
+#: ../cli/src/connections.c:1444
msgid "the base network connection was interrupted"
msgstr "la connexion réseau de base a été interrompue"
-#: ../cli/src/connections.c:1212
+#: ../cli/src/connections.c:1446
msgid "the VPN service stopped unexpectedly"
msgstr "arrêt inattendu du service VPN"
-#: ../cli/src/connections.c:1214
+#: ../cli/src/connections.c:1448
msgid "the VPN service returned invalid configuration"
-msgstr "le service VPN a retourné une configuration invalide"
+msgstr "le service VPN a retourné une configuration non valide"
-#: ../cli/src/connections.c:1216
+#: ../cli/src/connections.c:1450
msgid "the connection attempt timed out"
msgstr "le délai d'attente de la tentative de connexion a été dépassé"
-#: ../cli/src/connections.c:1218
+#: ../cli/src/connections.c:1452
msgid "the VPN service did not start in time"
msgstr "le service VPN n'a pas démarré à temps"
-#: ../cli/src/connections.c:1220
+#: ../cli/src/connections.c:1454
msgid "the VPN service failed to start"
msgstr "échec du démarrage du service VPN"
-#: ../cli/src/connections.c:1222
+#: ../cli/src/connections.c:1456
msgid "no valid VPN secrets"
msgstr "aucun secret VPN valide"
-#: ../cli/src/connections.c:1224
+#: ../cli/src/connections.c:1458
msgid "invalid VPN secrets"
-msgstr "secrets VPN invalides"
+msgstr "secrets VPN non valides"
-#: ../cli/src/connections.c:1226
+#: ../cli/src/connections.c:1460
msgid "the connection was removed"
msgstr "la connexion a été supprimée"
-#: ../cli/src/connections.c:1240
-#, c-format
-msgid "state: %s\n"
-msgstr "état : %s\n"
-
-#: ../cli/src/connections.c:1243 ../cli/src/connections.c:1269
+#: ../cli/src/connections.c:1477 ../cli/src/connections.c:1633
+#: ../cli/src/connections.c:6016
#, c-format
-msgid "Connection activated\n"
-msgstr "Connexion activée\n"
+msgid "Connection successfully activated (D-Bus active path: %s)\n"
+msgstr "Connexion activée avec succès (chemin D-Bus actif : %s)\n"
-#: ../cli/src/connections.c:1246
+#: ../cli/src/connections.c:1482
#, c-format
msgid "Error: Connection activation failed."
msgstr "Erreur : échec de l'activation de la connexion."
-#: ../cli/src/connections.c:1265
+#: ../cli/src/connections.c:1507
#, c-format
-msgid "state: %s (%d)\n"
-msgstr "état : %s (%d)\n"
+msgid "VPN connection successfully activated (D-Bus active path: %s)\n"
+msgstr "Connexion VPN activée avec succès (chemin D-Bus actif : %s)\n"
-#: ../cli/src/connections.c:1275
+#: ../cli/src/connections.c:1514
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "Erreur : l'activation de la connexion a échoué : %s."
-#: ../cli/src/connections.c:1292 ../cli/src/devices.c:1126
+#: ../cli/src/connections.c:1532 ../cli/src/devices.c:1294
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "Erreur : le délai d'attente de %d sec a expiré."
-#: ../cli/src/connections.c:1305
+#: ../cli/src/connections.c:1597
+#, c-format
+msgid ""
+"Error: Device '%s' is waiting for slaves before proceeding with activation."
+msgstr ""
+"Erreur : le périphérique « %s » est en train d'attendre des esclaves avant "
+"de continuer avec l'activation."
+
+#: ../cli/src/connections.c:1617
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "Erreur : l'activation de la connexion a échoué : %s"
-#: ../cli/src/connections.c:1311
+#: ../cli/src/connections.c:1722 ../cli/src/connections.c:1854
+msgid "unknown error"
+msgstr "erreur inconnue"
+
+#: ../cli/src/connections.c:1730
+#, c-format
+msgid "unknown device '%s'."
+msgstr "périphérique inconnu « %s »."
+
+#: ../cli/src/connections.c:1735
+msgid "neither a valid connection nor device given"
+msgstr "pas de connexion ni de périphérique valide n'a été donné"
+
+#: ../cli/src/connections.c:1773 ../cli/src/connections.c:1884
+#: ../cli/src/connections.c:7714
+msgid "Connection (name, UUID, or path): "
+msgstr "Connexion (nom, UUID, ou chemin d'accès) : "
+
+#: ../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 "Unknown parameter: %s\n"
+msgstr "Paramètre inconnu : %s\n"
+
+#: ../cli/src/connections.c:1862
+msgid "preparing"
+msgstr "préparation"
+
+#: ../cli/src/connections.c:1889 ../cli/src/connections.c:7719
+#: ../cli/src/connections.c:7832
+#, c-format
+msgid "Error: No connection specified."
+msgstr "Erreur : aucune connexion spécifiée."
+
+#: ../cli/src/connections.c:2237 ../cli/src/utils.c:490
+#, c-format
+msgid "'%s' not among [%s]"
+msgstr "« %s » ne fait pas partie de [%s]"
+
+#: ../cli/src/connections.c:2319
+#, c-format
+msgid "Error: '%s': '%s' is not a valid %s MAC address."
+msgstr "Erreur : « %s » : « %s » n'est pas une adresse MAC %s valide."
+
+#: ../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 "Erreur : « mtu » : « %s » n'est pas un MTU valide."
+
+#: ../cli/src/connections.c:2359
+#, c-format
+msgid "Error: 'parent': '%s' is not a valid interface name."
+msgstr "Erreur : « parent » : « %s » n'est pas un nom d'interface valide."
+
+#: ../cli/src/connections.c:2380
+#, c-format
+msgid "Error: 'p-key': '%s' is not a valid InfiniBand P_KEY."
+msgstr "Erreur : « p-key » : « %s » n'est pas une P_KEY InfiniBand valide."
+
+#: ../cli/src/connections.c:2396
+#, c-format
+msgid ""
+"Error: 'mode': '%s' is not a valid InfiniBand transport mode [datagram, "
+"connected]."
+msgstr ""
+"Erreur : « mode » : « %s » n'est pas un mode de transport InfiniBand valide "
+"[datagram, connected]."
+
+#: ../cli/src/connections.c:2412
+#, c-format
+msgid "Error: 'flags': '%s' is not valid; use <0-7>."
+msgstr "Erreur : « flags » : « %s » n'est pas valide ; utilisez <0-7>."
+
+#: ../cli/src/connections.c:2434
+#, c-format
+msgid "Error: '%s': '%s' is not valid; %s "
+msgstr "Erreur : « %s » : « %s » n'est pas valide ; %s "
+
+#: ../cli/src/connections.c:2541
+#, c-format
+msgid "Error: '%s': '%s' is not valid; use <%u-%u>."
+msgstr "Erreur : « %s » : « %s » n'est pas valide ; utilisez <%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"
+
+#: ../cli/src/connections.c:2558
+#, c-format
+msgid "There are 3 optional arguments for '%s' connection type.\n"
+msgstr "Il existe 3 arguments optionnels pour le type de connexion « %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 "Souhaitez-vous les fournir ? (oui/non) [yes]"
+
+#: ../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 [none] : "
+
+#: ../cli/src/connections.c:2589
+msgid "Cloned MAC [none]: "
+msgstr "MAC dupliqué [none] : "
+
+#: ../cli/src/connections.c:2612
+#, c-format
+msgid "There are 5 optional arguments for 'InfiniBand' connection type.\n"
+msgstr ""
+"Il existe 5 arguments optionnels pour le type de connexion « InfiniBand ».\n"
+
+#: ../cli/src/connections.c:2643
+msgid "Transport mode (datagram or connected) [datagram]: "
+msgstr "Mode de transport (datagram ou connected) [datagram] : "
+
+#: ../cli/src/connections.c:2656
+msgid "Parent interface [none]: "
+msgstr "Interface parent [none] : "
+
+#: ../cli/src/connections.c:2667
+msgid "P_KEY [none]: "
+msgstr "P_KEY [none] : "
+
+#: ../cli/src/connections.c:2677
+#, c-format
+msgid "Error: 'p-key' is mandatory when 'parent' is specified.\n"
+msgstr ""
+"Erreur : « p-key » est obligatoire lorsque le « parent » est spécifié.\n"
+
+#: ../cli/src/connections.c:2702
+#, c-format
+msgid "There is 1 optional argument for 'WiMax' connection type.\n"
+msgstr "Il existe 1 argument optionnel pour le type de connexion « 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 "Souhaitez-vous le fournir ? (oui/non) [yes]"
+
+#: ../cli/src/connections.c:2734
+#, c-format
+msgid "There are 4 optional arguments for 'PPPoE' connection type.\n"
+msgstr ""
+"Il existe 4 arguments optionnels pour le type de connexion « PPPoE ».\n"
+
+#: ../cli/src/connections.c:2742 ../cli/src/connections.c:2790
+msgid "Password [none]: "
+msgstr "Mot de passe [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 ""
+"Il existe 2 arguments optionnels pour le type de connexion « mobile "
+"broadband ».\n"
+
+#: ../cli/src/connections.c:2788 ../cli/src/connections.c:3233
+msgid "Username [none]: "
+msgstr "Nom d'utilisateur [none] : "
+
+#: ../cli/src/connections.c:2804
+#, c-format
+msgid "There is 1 optional argument for 'bluetooth' connection type.\n"
+msgstr ""
+"Il existe 1 argument optionnel pour le type de connexion « bluetooth ».\n"
+
+#: ../cli/src/connections.c:2813
+msgid "Bluetooth type (panu, dun-gsm or dun-cdma) [panu]: "
+msgstr "Type Bluetooth (panu, dun-gsm ou dun-cdma) [panu] : "
+
+#: ../cli/src/connections.c:2821
+#, c-format
+msgid "Error: 'bt-type': '%s' is not a valid bluetooth type.\n"
+msgstr "Erreur : « bt-type » : « %s » n'est pas un type bluetooth valide.\n"
+
+#: ../cli/src/connections.c:2840
+#, c-format
+msgid "There are 4 optional arguments for 'VLAN' connection type.\n"
+msgstr "Il existe 4 arguments optionnels pour le type de connexion « VLAN ».\n"
+
+#: ../cli/src/connections.c:2860
+msgid "VLAN flags (<0-7>) [none]: "
+msgstr "Indicateurs VLAN (<0-7>) [none] : "
+
+#: ../cli/src/connections.c:2871
+msgid "Ingress priority maps [none]: "
+msgstr "Carte des priorités entrantes [none] : "
+
+#: ../cli/src/connections.c:2882
+msgid "Egress priority maps [none]: "
+msgstr "Carte des priorités sortantes [none] : "
+
+#: ../cli/src/connections.c:2908
+#, c-format
+msgid "There are optional arguments for 'bond' connection type.\n"
+msgstr ""
+"Il existe des arguments optionnels pour le type de connexion « bond ».\n"
+
+#: ../cli/src/connections.c:2918
+msgid "Bonding mode [balance-rr]: "
+msgstr "Mode de liaison [balance-rr] : "
+
+#: ../cli/src/connections.c:2934
+msgid "Bonding primary interface [none]: "
+msgstr "Interface principale de liaison [none] : "
+
+#: ../cli/src/connections.c:2937
+#, c-format
+msgid "Error: 'primary': '%s' is not a valid interface name.\n"
+msgstr "Erreur : « primary » : « %s » n'est pas un nom d'interface valide.\n"
+
+#: ../cli/src/connections.c:2945
+msgid "Bonding monitoring mode (miimon or arp) [miimon]: "
+msgstr "Mode de contrôle de liaison (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 ""
+"Erreur : « %s » n'est pas un mode de contrôle valide ; utilisez « %s » ou "
+"« %s ».\n"
+
+#: ../cli/src/connections.c:2959
+msgid "Bonding miimon [100]: "
+msgstr "miimon de liaison [100] : "
+
+#: ../cli/src/connections.c:2962
+#, c-format
+msgid "Error: 'miimon': '%s' is not a valid number <0-%u>.\n"
+msgstr "Erreur : « miimon » : « %s » n'esy pas un numéro valide <0-%u>.\n"
+
+#: ../cli/src/connections.c:2970
+msgid "Bonding downdelay [0]: "
+msgstr "downdelay de liaison [0] : "
+
+#: ../cli/src/connections.c:2973
+#, c-format
+msgid "Error: 'downdelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "Erreur : « downdelay » : « %s » n'est pas un numéro valide <0-%u>.\n"
+
+#: ../cli/src/connections.c:2981
+msgid "Bonding updelay [0]: "
+msgstr "updelay de liaison [0] : "
+
+#: ../cli/src/connections.c:2984
+#, c-format
+msgid "Error: 'updelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "Erreur : « updelay » : « %s » n'est pas un numéro valide <0-%u>.\n"
+
+#: ../cli/src/connections.c:2993
+msgid "Bonding arp-interval [0]: "
+msgstr "arp-interval de liaison [0] : "
+
+#: ../cli/src/connections.c:2996
+#, c-format
+msgid "Error: 'arp-interval': '%s' is not a valid number <0-%u>.\n"
+msgstr ""
+"Erreur : « arp-interval » : « %s » n'est pas un numéro valide <0-%u>.\n"
+
+#: ../cli/src/connections.c:3004
+msgid "Bonding arp-ip-target [none]: "
+msgstr "arp-ip-target de liaison [none] : "
+
+#: ../cli/src/connections.c:3023
+#, c-format
+msgid "There is 1 optional argument for '%s' connection type.\n"
+msgstr "Il existe 1 argument optionnel pour le type de connexion « %s ».\n"
+
+#: ../cli/src/connections.c:3032
+msgid "Team JSON configuration [none]: "
+msgstr "Configuration de l'équipe JSON [none] : "
+
+#: ../cli/src/connections.c:3051
+msgid "team"
+msgstr "équipe"
+
+#: ../cli/src/connections.c:3057
+msgid "team-slave"
+msgstr "équipe-esclave"
+
+#: ../cli/src/connections.c:3071
+#, c-format
+msgid "There are 6 optional arguments for 'bridge' connection type.\n"
+msgstr ""
+"Il existe 6 arguments optionnels pour le type de connexion « bridge ».\n"
+
+#: ../cli/src/connections.c:3081
+msgid "Enable STP (yes/no) [yes]: "
+msgstr "Activer STP (oui/non) [yes] : "
+
+#: ../cli/src/connections.c:3085
+#, c-format
+msgid "Error: 'stp': '%s'.\n"
+msgstr "Erreur : « 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 "Erreur : « priority » : « %s » n'est pas un numéro valide <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 ""
+"Erreur : « forward-delay » : « %s » n'est pas un numéro valide <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 "Erreur : « hello-time » : « %s » n'est pas un numéro valide <1-10>.\n"
+
+#: ../cli/src/connections.c:3130
+msgid "Max age [20]: "
+msgstr "Max age [20] : "
+
+#: ../cli/src/connections.c:3134
+#, c-format
+msgid "Error: 'max-age': '%s' is not a valid number <6-40>.\n"
+msgstr "Erreur : « max-age » : « %s » n'est pas un numéro valide <6-40>.\n"
+
+#: ../cli/src/connections.c:3142
+msgid "MAC address ageing time [300]: "
+msgstr "MAC address ageing time [300] : "
+
+#: ../cli/src/connections.c:3146
+#, c-format
+msgid "Error: 'ageing-time': '%s' is not a valid number <0-1000000>.\n"
+msgstr ""
+"Erreur : « ageing-time » : « %s » n'est pas un numéro valide <0-1000000>.\n"
+
+#: ../cli/src/connections.c:3167
+#, c-format
+msgid "There are 3 optional arguments for 'bridge-slave' connection type.\n"
+msgstr ""
+"Il existe 3 arguments optionnels pour le type de connexion « bridge-slave »."
+"\n"
+
+#: ../cli/src/connections.c:3176
+msgid "Bridge port priority [32]: "
+msgstr "Priorité du port Bridge [32] : "
+
+#: ../cli/src/connections.c:3189
+msgid "Bridge port STP path cost [100]: "
+msgstr "Coût du chemin d'accès STP du port Bridge [100] : "
+
+#: ../cli/src/connections.c:3203
+msgid "Hairpin (yes/no) [yes]: "
+msgstr "Hairpin (oui/non) [yes] : "
+
+#: ../cli/src/connections.c:3207
+#, c-format
+msgid "Error: 'hairpin': '%s'.\n"
+msgstr "Erreur : « hairpin » : « %s ».\n"
+
+#: ../cli/src/connections.c:3225
+#, c-format
+msgid "There is 1 optional argument for 'VPN' connection type.\n"
+msgstr "Il existe 1 argument optionnel pour le type de connexion « VPN ».\n"
+
+#: ../cli/src/connections.c:3249
+#, c-format
+msgid "There are 2 optional arguments for 'OLPC Mesh' connection type.\n"
+msgstr ""
+"Il existe 2 arguments optionnels pour le type de connexion « OLPC Mesh ».\n"
+
+#: ../cli/src/connections.c:3258
+msgid "OLPC Mesh channel [1]: "
+msgstr "OLPC Mesh channel [1] : "
+
+#: ../cli/src/connections.c:3261
+#, c-format
+msgid "Error: 'channel': '%s' is not a valid number <1-13>.\n"
+msgstr "Erreur : « channel » : « %s » n'est pas un numéro valide <1-13>.\n"
+
+#: ../cli/src/connections.c:3269
+msgid "DHCP anycast MAC address [none]: "
+msgstr "Adresse MAC anycast DHCP [none] : "
+
+#: ../cli/src/connections.c:3317
+msgid "IPv4 address (IP[/plen] [gateway]) [none]: "
+msgstr "Adresse IPv4 (IP[/plen] [gateway]) [none] : "
+
+#: ../cli/src/connections.c:3319
+msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
+msgstr "Adresse IPv6 (IP[/plen] [gateway]) [none] : "
+
+#: ../cli/src/connections.c:3337
+#, c-format
+msgid " Address successfully added: %s %s\n"
+msgstr " Ajout de l'adresse réussi : %s %s\n"
+
+#: ../cli/src/connections.c:3339
+#, c-format
+msgid " Warning: address already present: %s %s\n"
+msgstr " Avertissement : adresse déjà présente : %s %s\n"
+
+#: ../cli/src/connections.c:3341
+#, c-format
+msgid " Warning: ignoring garbage at the end: '%s'\n"
+msgstr " Avertissement : ignorer les poubelles à la fin : « %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 "Erreur : "
+
+#: ../cli/src/connections.c:3361
+msgid "Do you want to add IP addresses? (yes/no) [yes] "
+msgstr "Souhaitez-vous ajouter des adresses IP ? (oui/non) [yes]"
+
+#: ../cli/src/connections.c:3367
+#, c-format
+msgid "Press <Enter> to finish adding addresses.\n"
+msgstr "Cliquez sur <Enter> pour terminer d'ajouter les adresses.\n"
+
+#: ../cli/src/connections.c:3513
+#, c-format
+msgid "Error: 'parent': not valid without 'p-key'."
+msgstr "Erreur : « parent » : non valide sans « 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 "Erreur : « ssid » est requis."
+
+#: ../cli/src/connections.c:3636
+msgid "WiMAX NSP name: "
+msgstr "Nom NSP WiMAX : "
+
+#: ../cli/src/connections.c:3639
+msgid "Error: 'nsp' is required."
+msgstr "Erreur : « nsp » est requis."
+
+#: ../cli/src/connections.c:3694
+msgid "PPPoE username: "
+msgstr "Nom d'utilisateur PPPoE : "
+
+#: ../cli/src/connections.c:3697
+msgid "Error: 'username' is required."
+msgstr "Erreur : « nom d'utilisateur » est requis."
+
+#: ../cli/src/connections.c:3768
+msgid "APN: "
+msgstr "APN : "
+
+#: ../cli/src/connections.c:3771
+msgid "Error: 'apn' is required."
+msgstr "Erreur : « apn » est requis."
+
+#: ../cli/src/connections.c:3830
+msgid "Bluetooth device address: "
+msgstr "Adresse du périphérique Bluetooth : "
+
+#: ../cli/src/connections.c:3833
+msgid "Error: 'addr' is required."
+msgstr "Erreur : « addr » est requis."
+
+#: ../cli/src/connections.c:3876
+#, c-format
+msgid "Error: 'bt-type': '%s' not valid; use [%s, %s (%s), %s]."
+msgstr ""
+"Erreur : « bt-type » : « %s » non valide ; utilisez [%s, %s (%s), %s]."
+
+#: ../cli/src/connections.c:3921
+msgid "VLAN parent device or connection UUID: "
+msgstr "Périphérique parent VLAN ou connexion UUID : "
+
+#: ../cli/src/connections.c:3924
+msgid "Error: 'dev' is required."
+msgstr "Erreur : « dev » est requis."
+
+#: ../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 "Erreur : « id » est requis."
+
+#: ../cli/src/connections.c:3937
+#, c-format
+msgid "Error: 'id': '%s' is not valid; use <0-4095>."
+msgstr "Erreur : « id » : « %s » est non valide ; utilisez <0-4095>."
+
+#: ../cli/src/connections.c:3947
#, c-format
-msgid "Active connection state: %s\n"
-msgstr "État de la connexion active : %s\n"
+msgid "Error: 'dev': '%s' is neither UUID, interface name, nor MAC."
+msgstr ""
+"Erreur : « dev » : « %s » n'est pas un UUID, un nom d'interface, ni une "
+"adresse MAC."
-#: ../cli/src/connections.c:1312
+#: ../cli/src/connections.c:4082
#, c-format
-msgid "Active connection path: %s\n"
-msgstr "Chemin de la connection active : %s\n"
+msgid "Error: 'mode': %s."
+msgstr "Erreur : « mode » : %s."
-#: ../cli/src/connections.c:1364 ../cli/src/connections.c:1505
-#: ../cli/src/connections.c:1614
+#: ../cli/src/connections.c:4091
#, c-format
-msgid "Error: Unknown connection: %s."
-msgstr "Erreur : connexion inconnue : %s."
+msgid "Error: 'primary': '%s' is not a valid interface name."
+msgstr "Erreur : « primary » : « %s » n'est pas un nom d'interface valide."
+
+#: ../cli/src/connections.c:4134
+msgid "Bond master: "
+msgstr "Maître de bond (fusion) :"
+
+#: ../cli/src/connections.c:4137 ../cli/src/connections.c:4229
+#: ../cli/src/connections.c:4416
+msgid "Error: 'master' is required."
+msgstr "Erreur : « master » est requis."
-#: ../cli/src/connections.c:1410 ../cli/src/devices.c:1198
+#: ../cli/src/connections.c:4142 ../cli/src/connections.c:4239
+#: ../cli/src/connections.c:4427
#, c-format
-msgid "Error: timeout value '%s' is not valid."
-msgstr "Erreur : valeur de délai d'attente « %s » non valide."
+msgid ""
+"Warning: 'type' is currently ignored. We only support ethernet slaves for "
+"now.\n"
+msgstr ""
+"Avertissement : « type » est actuellement ignoré. Pour le moment, nous "
+"prenons uniquement en charge les esclaves ethernet.\n"
-#: ../cli/src/connections.c:1423 ../cli/src/connections.c:1522
-#: ../cli/src/connections.c:1594
+#: ../cli/src/connections.c:4226
+msgid "Team master: "
+msgstr "Maître d'équipe : "
+
+#: ../cli/src/connections.c:4329
#, c-format
-msgid "Error: id or uuid has to be specified."
-msgstr "Erreur : ID ou UUID doit être spécifié."
+msgid "Error: 'stp': %s."
+msgstr "Erreur : « stp » : %s."
+
+#: ../cli/src/connections.c:4413
+msgid "Bridge master: "
+msgstr "Maître du pont : "
-#: ../cli/src/connections.c:1451
+#: ../cli/src/connections.c:4421
#, c-format
-msgid "Error: No suitable device found: %s."
-msgstr "Erreur : aucun périphérique convenable trouvé : %s."
+msgid "Error: 'master': '%s' is not valid UUID nor interface."
+msgstr ""
+"Erreur : « master » : « %s » n'est pas un nom d'interface ou UUID valide."
-#: ../cli/src/connections.c:1453
+#: ../cli/src/connections.c:4454
#, c-format
-msgid "Error: No suitable device found."
-msgstr "Erreur : aucun périphérique convenable trouvé."
+msgid "Error: 'hairpin': %s."
+msgstr "Erreur : « hairpin » : %s."
+
+#: ../cli/src/connections.c:4506
+msgid "VPN type: "
+msgstr "Type de VPN :"
-#: ../cli/src/connections.c:1558
+#: ../cli/src/connections.c:4509
+msgid "Error: 'vpn-type' is required."
+msgstr "Erreur : « vpn-type » est requis."
+
+#: ../cli/src/connections.c:4520
#, c-format
-msgid "Warning: Connection not active\n"
-msgstr "Avertissement : connexion inactive\n"
+msgid "Error: 'vpn-type': %s."
+msgstr "Erreur : « vpn-type » : %s."
+
+#: ../cli/src/connections.c:4578
+#, c-format
+msgid "Error: 'channel': '%s' is not valid; use <1-13>."
+msgstr "Erreur : « channel » : « %s » est non valide ; utilisez <1-13>."
+
+#: ../cli/src/connections.c:4613
+#, c-format
+msgid "Error: '%s' is not a valid connection type."
+msgstr "Erreur : « %s » n'est pas un type de connexion valide."
+
+#: ../cli/src/connections.c:4711
+#, c-format
+msgid "Error: Failed to add '%s' connection: (%d) %s"
+msgstr "Erreur : échec de l'ajout de la connexion « %s » : (%d) %s"
+
+#: ../cli/src/connections.c:4715
+#, c-format
+msgid "Connection '%s' (%s) successfully added.\n"
+msgstr "Connexion « %s » (%s) ajoutée avec succès.\n"
+
+#: ../cli/src/connections.c:4761
+msgid "Connection type: "
+msgstr "Type de connexion :"
+
+#: ../cli/src/connections.c:4765
+#, c-format
+msgid "Error: 'type' argument is required."
+msgstr "Erreur : l'argument « type » est requis."
+
+#: ../cli/src/connections.c:4771
+#, c-format
+msgid "Error: invalid connection type; %s."
+msgstr "Erreur : type de connexion non valide ; %s."
+
+#: ../cli/src/connections.c:4780
+#, c-format
+msgid "Error: 'autoconnect': %s."
+msgstr "Erreur : « autoconnect » : %s."
+
+#: ../cli/src/connections.c:4796
+msgid "Interface name [*]: "
+msgstr "Nom de l'interface [*] : "
-#: ../cli/src/connections.c:1659
+#: ../cli/src/connections.c:4801
#, c-format
-msgid "Error: 'con' command '%s' is not valid."
-msgstr "Erreur : commande « con » « %s » non valide."
+msgid "Error: 'ifname' argument is required."
+msgstr "Erreur : l'argument « ifname » est requis."
-#: ../cli/src/connections.c:1724
+#: ../cli/src/connections.c:4808
#, c-format
-msgid "Error: could not connect to D-Bus."
-msgstr "Erreur : impossible de se connecter à D-Bus."
+msgid "Error: 'ifname': '%s' is not a valid interface nor '*'."
+msgstr ""
+"Erreur : « ifname » : « %s » ou « * » ne sont pas des noms d'interface "
+"valide."
+
+#: ../cli/src/connections.c:5627
+#, c-format
+msgid "['%s' setting values]\n"
+msgstr "['%s' setting values]\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>] :: se rendre sur un paramètre ou une "
+"propriété\n"
+"remove <setting>[.<prop>] | <prop> :: supprimer le paramètre ou "
+"réinitialiser la valeur de la propriété\n"
+"set [<setting>.<prop> <value>] :: définir la valeur de la propriété\n"
+"describe [<setting>.<prop>] :: décrire la propriété\n"
+"print [all] :: imprimer la connexion\n"
+"verify [all] :: vérifier la connexion\n"
+"save :: enregistrer la connexion\n"
+"activate [<ifname>] [/<ap>|<nsp>] :: activer la la connexion\n"
+"back :: aller un niveau au-dessus (retour)\n"
+"help/? [<command>] :: imprimer cette aide\n"
+"nmcli <conf-option> <value> :: configuration nmcli\n"
+"quit :: quitter 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> :: saisir le paramètre ou la propriété "
+"pour la modification\n"
+"\n"
+"Cette commande entre dans un paramètre ou une propriété pour le/la modifier.\n"
+"\n"
+"Exemples : 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>] :: supprimer le paramètre ou réinitialiser la "
+"valeur de la propriété\n"
+"\n"
+"Cette commande supprime un paramètre entier de la connexion, ou si une "
+"propriété est donnée, \n"
+"celle-ci sera réinitialisée à la valeur par défaut.\n"
+"\n"
+"Exemples : 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>] :: définir la valeur de la propriété\n"
+"\n"
+"Cette commande définit la valeur de la propriété.\n"
+"\n"
+"Exemple : nmcli> set con.id My connection\n"
-#: ../cli/src/connections.c:1732
+#: ../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>] :: décrire la propriété\n"
+"\n"
+"Affiche la description de la propriété. Vous pouvez consulter la page du "
+"manuel nm-settings(5) pour afficher tous les paramètres et propriétés 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] :: imprimer le paramètre ou les valeurs de la connexion\n"
+"\n"
+"Affiche la propriété actuelle ou la connexion entière.\n"
+"\n"
+"Exemple : 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] :: vérifier le paramètre ou la validité de la connexion\n"
+"\n"
+"Vérifiesi le paramètre ou la connexion est valide et peut être enregistré "
+"plus tard. Ceci indique les valeurs non valides lors d'erreurs.\n"
+"\n"
+"Exemples : 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 :: enregistrer la connexion\n"
+"\n"
+"Envoie la connexion à NetworkManager qui va l'enregistrer.\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>] :: activer la connexion\n"
+"\n"
+"Active la connexion.\n"
+"\n"
+"Options dispponibles :\n"
+"<ifname> - périphérique sur lequel la connexion sera activée\n"
+"/<ap>|<nsp> - AP (Wi-Fi) ou NSP (WiMAX) (ajouter avec ou lorsque <ifname> "
+"n'est pas spécifié)\n"
+
+#: ../cli/src/connections.c:5782 ../cli/src/connections.c:5932
+#, c-format
+msgid "back :: go to upper menu level\n"
+"\n"
+msgstr "back :: aller au niveau supérieur du menu\n"
+"\n"
+
+#: ../cli/src/connections.c:5785
+#, c-format
+msgid "help/? [<command>] :: help for the nmcli commands\n"
+"\n"
+msgstr "help/? [<command>] :: aide pour les commandes 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>] :: configuration nmcli\n"
+"\n"
+"Configure nmcli. Les options suivantes sont disponibles :\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"
+"Exemples : 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 :: quitter nmcli\n"
+"\n"
+"Cette commande permet de quitter nmcli. Lorsque la connexion en cours de "
+"modification n'est pas enregistrée, il est demandé à l'utilisateur de "
+"confirmer l'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 "Commande inconnue : « %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 des propriétés ]---\n"
+"set [<value>] :: définir une nouvelle valeur\n"
+"add [<value>] :: ajouter une nouvelle option à la "
+"propriété\n"
+"change :: modifier la valeur actuelle\n"
+"remove [<index> | <option>] :: supprimer la valeur\n"
+"describe :: décrire la propriété\n"
+"print [setting | connection] :: imprimer la(les) valeur(s) de la "
+"propriété (paramètre/connexion)\n"
+"back :: se rendre sur le niveau supérieur\n"
+"help/? [<command>] :: imprimer cette description d'aide ou de "
+"commande\n"
+"quit :: quitter 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>] :: définir une nouvelle valeur\n"
+"\n"
+"Cette commande définit la <value> (valeur) fournie à cette propriété\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>] :: ajouter une nouvelle option à la propriété\n"
+"\n"
+"Cette commande ajoute une <value> (valeur) fournie à cette propriété si la "
+"propriété est d'un type de conteneur. Pour les propriétés à valeur unique, "
+"ceci remplace la valeur (comme « 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 :: modifie la valeur actuelle\n"
+"\n"
+"Affiche la valeur actuelle et permet sa modification.\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>] :: supprimer la valeur\n"
+"\n"
+"Supprime la valeur de la propriété (la règle sur la valeur par défaut).\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 :: décrire la propriété\n"
+"\n"
+"Affiche la description de la propriété. Vous pouvez consulter la page du "
+"manuel nm-settings(5) pour voir tous les paramètres et toutes les propriétés "
+"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] :: imprimer la(les) valeur(s) de la "
+"propriété (paramètre, connexion)\n"
+"\n"
+"Affiche la(les) valeur(s) de la propriété. En fournissant un argument, vous "
+"pourrez aussi afficher les valeurs de la totalité du paramètre ou de la "
+"connexion.\n"
+
+#: ../cli/src/connections.c:5935
+#, c-format
+msgid "help/? [<command>] :: help for nmcli commands\n"
+"\n"
+msgstr "help/? [<command>] :: aide pour les commandes nmcli\n"
+"\n"
+
+#: ../cli/src/connections.c:6022
+#, c-format
+msgid "Error: Connection activation failed.\n"
+msgstr "Erreur : échec de l'activation de la connexion.\n"
+
+#: ../cli/src/connections.c:6093
+#, c-format
+msgid "Error: setting '%s' is mandatory and cannot be removed.\n"
+msgstr ""
+"Erreur : le paramètre « %s » est obligatoire et ne peut pas être supprimé.\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 ""
+"Le profil de connexion a été supprimé à partir d'un autre client. Vous "
+"pouvez saisir « enregistrer » dans le menu principal pour le restaurer.\n"
+
+#: ../cli/src/connections.c:6192 ../cli/src/connections.c:6615
+#: ../cli/src/connections.c:6673
+#, c-format
+msgid "Enter '%s' value: "
+msgstr "Saisissez la valeur « %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 "Erreur : échec du paramétrage de la propriété « %s » : %s\n"
+
+#: ../cli/src/connections.c:6221
+#, c-format
+msgid "Edit '%s' value: "
+msgstr "Paramétrer la valeur « %s » :"
+
+#: ../cli/src/connections.c:6250
+#, c-format
+msgid "Error: %s\n"
+msgstr "Erreur : %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 "Erreur : échec de la suppression de la valeur de « %s » : %s\n"
+
+#: ../cli/src/connections.c:6277
+#, c-format
+msgid "Unknown command argument: '%s'\n"
+msgstr "Argument de commande inconnu : « %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 ""
+"La connexion n'est pas enregistrée. Souhaitez-vous réellement quitter ? [y/"
+"n]\n"
+
+#: ../cli/src/connections.c:6409
+#, c-format
+msgid "Available settings: %s\n"
+msgstr "Paramètres disponibles : %s\n"
+
+#: ../cli/src/connections.c:6418
+#, c-format
+msgid "Error: invalid setting name; %s\n"
+msgstr "Erreur : nom de paramètre non valide ; %s\n"
+
+#: ../cli/src/connections.c:6435
+#, c-format
+msgid "Available properties: %s\n"
+msgstr "Propriétés disponibles : %s\n"
+
+#: ../cli/src/connections.c:6443
+#, c-format
+msgid "Error: property %s\n"
+msgstr "Erreur : propriété %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 ""
+"Enregistrer la connexion avec « autoconnect=yes ». Ceci pourrait entraîner "
+"l'activation immédiate de la connexion.\n"
+"Souhaitez-vous tout de même enregistrer ? [yes] "
+
+#: ../cli/src/connections.c:6557
+#, c-format
+msgid "You may edit the following settings: %s\n"
+msgstr "Vous pouvez modifier les paramètres suivants : %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 ""
+"Le profil de connexion a été supprimé à partir d'un autre client. Vous "
+"pouvez saisir « enregistrer » pour le restaurer.\n"
+
+#: ../cli/src/connections.c:6613 ../cli/src/connections.c:6671
+#, c-format
+msgid "Allowed values for '%s' property: %s\n"
+msgstr "Valeurs autorisées pour la propriété « %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 "Erreur : aucun paramètre sélectionné ; [%s] sont valides\n"
+
+#: ../cli/src/connections.c:6626
+#, c-format
+msgid "use 'goto <setting>' first, or 'set <setting>.<property>'\n"
+msgstr "utilisez d'abord « 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 "Erreur : argument de paramètre « %s » non valide ; [%s] sont valides\n"
+
+#: ../cli/src/connections.c:6651
+#, c-format
+msgid "Error: missing setting for '%s' property\n"
+msgstr "Erreur : paramètre manquant pour la propriété « %s »\n"
+
+#: ../cli/src/connections.c:6658
+#, c-format
+msgid "Error: invalid property: %s\n"
+msgstr "Erreur : propriété non valide : %s\n"
+
+#: ../cli/src/connections.c:6707
+#, c-format
+msgid "Error: unknown setting '%s'\n"
+msgstr "Erreur : paramètre inconnu « %s »\n"
+
+#: ../cli/src/connections.c:6720
+#, c-format
+msgid "You may edit the following properties: %s\n"
+msgstr "Vous pouvez modifier les propriétés suivantes : %s\n"
+
+#: ../cli/src/connections.c:6764
+#, c-format
+msgid "Error: no argument given; valid are [%s]\n"
+msgstr "Erreur : aucun argument donné ; [%s] sont valides\n"
+
+#: ../cli/src/connections.c:6777
+#, c-format
+msgid "Setting '%s' is not present in the connection.\n"
+msgstr "Le paramètre « %s » n'est pas présent dans la connexion.\n"
+
+#: ../cli/src/connections.c:6818
+#, c-format
+msgid "Error: %s properties, nor it is a setting name.\n"
+msgstr ""
+"Erreur : %s propriétés, il ne s'agit pas non plus d'un nom de paramètre.\n"
+
+#: ../cli/src/connections.c:6843
+#, c-format
+msgid "use 'goto <setting>' first, or 'describe <setting>.<property>'\n"
+msgstr ""
+"utilisez d'abord « 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 ""
+"Erreur : propriété non valide : %s, il ne s'agit pas non plus d'un nom de "
+"paramètre valide.\n"
+
+#: ../cli/src/connections.c:6908
+#, c-format
+msgid "Error: '%s' setting not present\n"
+msgstr "Erreur : le paramètre « %s » n'est pas présent\n"
+
+#: ../cli/src/connections.c:6911
+#, c-format
+msgid "Error: unknown setting: '%s'\n"
+msgstr "Erreur : paramètre inconnu : « %s »\n"
+
+#: ../cli/src/connections.c:6927
+#, c-format
+msgid "Verify setting '%s': %s\n"
+msgstr "Vérifier le paramètre « %s » : %s\n"
+
+#: ../cli/src/connections.c:6934
+#, c-format
+msgid "Verify connection: %s\n"
+msgstr "Vérifier la connexion : %s\n"
+
+#: ../cli/src/connections.c:6973
+#, c-format
+msgid "Error: Failed to save '%s' (%s) connection: (%d) %s\n"
+msgstr ""
+"Erreur : échec de l'enregistrement de la connexion « %s » (%s) : (%d) %s\n"
+
+#: ../cli/src/connections.c:6980
+#, c-format
+msgid "Connection '%s' (%s) successfully saved.\n"
+msgstr "Connexion « %s » (%s) enregistrée avec succès.\n"
+
+#: ../cli/src/connections.c:7014
+#, c-format
+msgid "Error: connection verification failed: %s\n"
+msgstr "Erreur : échec de la vérification de la connexion : %s\n"
+
+#: ../cli/src/connections.c:7015
+msgid "(unknown error)"
+msgstr "(erreur inconnue)"
+
+#: ../cli/src/connections.c:7036
+#, c-format
+msgid "Error: connection is not saved. Type 'save' first.\n"
+msgstr ""
+"Erreur : la connexion n'est pas enregistrée. Commencez par saisir « save »."
+"\n"
+
+#: ../cli/src/connections.c:7040
+#, c-format
+msgid "Error: connection is not valid: %s\n"
+msgstr "Erreur : la connexion n'est pas valide : %s\n"
+
+#: ../cli/src/connections.c:7051
+#, c-format
+msgid "Error: Cannot activate connection: %s.\n"
+msgstr "Erreur : impossible d'activer la connexion : %s.\n"
+
+#: ../cli/src/connections.c:7061
+#, c-format
+msgid "Error: Failed to activate '%s' (%s) connection: (%d) %s\n"
+msgstr "Erreur : échec de l'activation de la connexion « %s » (%s) : (%d) %s\n"
+
+#: ../cli/src/connections.c:7067
+#, c-format
+msgid "Monitoring connection activation (press any key to continue)\n"
+msgstr ""
+"Contrôle de l'activation de la connexion (appuyez sur n'importe quelle "
+"touche pour continuer)\n"
+
+#: ../cli/src/connections.c:7105
+#, c-format
+msgid "Error: status-line: %s\n"
+msgstr "Erreur : status-line : %s\n"
+
+#: ../cli/src/connections.c:7113
+#, c-format
+msgid "Error: save-confirmation: %s\n"
+msgstr "Erreur : save-confirmation : %s\n"
+
+#: ../cli/src/connections.c:7121
+#, c-format
+msgid "Error: bad color number: '%s'; use <0-8>\n"
+msgstr "Erreur : mauvais numéro de couleur : « %s » ; utilisez <0-8>\n"
+
+#: ../cli/src/connections.c:7133
+#, c-format
+msgid "Current nmcli configuration:\n"
+msgstr "Configuration nmcli actuelle :\n"
+
+#: ../cli/src/connections.c:7141
+#, c-format
+msgid "Invalid configuration option '%s'; allowed [%s]\n"
+msgstr "Option de configuration « %s » non valide ; [%s] autorisé\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 ""
+">>> Les modifications à l'aide de la ligne de commande ne sont pas "
+"disponibles. Veuillez envisager l'installation d'une bibiothèque de "
+"modification de ligne pour activer la fonctionnalité. <<<\n"
+"Les bibliothèques prises en charge sont :\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 "Erreur : un seul « id », uuid, ou « path » peut être fourni."
+
+#: ../cli/src/connections.c:7402 ../cli/src/connections.c:7599
+#, c-format
+msgid "Error: Unknown connection '%s'."
+msgstr "Erreur : connexion inconnue : « %s »."
+
+#: ../cli/src/connections.c:7417
+#, c-format
+msgid "Warning: editing existing connection '%s'; 'type' argument is ignored\n"
+msgstr ""
+"Avertissement : modification de la connexion existante « %s » ; l'argument "
+"« type » est ignoré\n"
+
+#: ../cli/src/connections.c:7420
+#, c-format
+msgid ""
+"Warning: editing existing connection '%s'; 'con-name' argument is ignored\n"
+msgstr ""
+"Avertissement : modification de la connexion existante « %s » ; l'argument "
+"« con-name » est ignoré\n"
+
+#: ../cli/src/connections.c:7434
+#, c-format
+msgid "Valid connection types: %s\n"
+msgstr "Types de connexion valides : %s\n"
+
+#: ../cli/src/connections.c:7436
+#, c-format
+msgid "Error: invalid connection type; %s\n"
+msgstr "Erreur : type de connexion non valide ; %s\n"
+
+#: ../cli/src/connections.c:7472
+#, c-format
+msgid "===| nmcli interactive connection editor |==="
+msgstr "===| éditeur de connexions interactives nmcli |==="
+
+#: ../cli/src/connections.c:7475
+#, c-format
+msgid "Editing existing '%s' connection: '%s'"
+msgstr "Modification de la connexion « %s » : « %s »"
+
+#: ../cli/src/connections.c:7477
+#, c-format
+msgid "Adding a new '%s' connection"
+msgstr "Ajout d'une nouvelle connexion « %s »"
+
+#: ../cli/src/connections.c:7479
+#, c-format
+msgid "Type 'help' or '?' for available commands."
+msgstr "Saisissez « help » ou « ? » pour les commandes disponibles."
+
+#: ../cli/src/connections.c:7481
+#, c-format
+msgid "Type 'describe [<setting>.<prop>]' for detailed property description."
+msgstr ""
+"Saisissez « describe [<setting>.<prop>] » pour une description de propriété "
+"détaillée."
+
+#: ../cli/src/connections.c:7520
+#, c-format
+msgid "Error: Failed to modify connection '%s': (%d) %s"
+msgstr "Erreur : la modification de la connexion « %s » a échoué : (%d) %s"
+
+#: ../cli/src/connections.c:7526
+#, c-format
+msgid "Connection '%s' (%s) successfully modified.\n"
+msgstr "Connexion « %s » (%s) modifiée avec succès.\n"
+
+#: ../cli/src/connections.c:7553
+#, c-format
+msgid "Error: No arguments provided."
+msgstr "Erreur : aucun argument fourni."
+
+#: ../cli/src/connections.c:7577
+#, c-format
+msgid "Error: connection ID is missing."
+msgstr "Erreur : l'ID de connexion est manquant."
+
+#: ../cli/src/connections.c:7582
+#, c-format
+msgid "Error: <setting>.<property> argument is missing."
+msgstr "Erreur : l'argument <setting>.<property> est manquant."
+
+#: ../cli/src/connections.c:7605
+#, c-format
+msgid "Error: invalid <setting>.<property> '%s'."
+msgstr "Erreur : « %s » <setting>.<property> non valide."
+
+#: ../cli/src/connections.c:7620
+#, c-format
+msgid "Error: invalid or not allowed setting '%s': %s."
+msgstr "Erreur : non valide, ou le paramètre « %s » n'est pas autorisé : %s."
+
+#: ../cli/src/connections.c:7641
+#, c-format
+msgid "Error: invalid property '%s': %s."
+msgstr "Erreur : propriété « %s » non valide : %s."
+
+#: ../cli/src/connections.c:7647
+#, c-format
+msgid "Error: failed to modify %s.%s: %s."
+msgstr "Erreur : échec de la modification de %s.%s : %s."
+
+#: ../cli/src/connections.c:7677
+#, c-format
+msgid "Error: Connection deletion failed: %s"
+msgstr "Erreur : la suppression de la connexion a échoué : %s"
+
+#: ../cli/src/connections.c:7747
+#, c-format
+msgid "Error: unknown connection: %s\n"
+msgstr "Erreur : connexion inconnue : %s\n"
+
+#: ../cli/src/connections.c:7781
+#, c-format
+msgid "Error: cannot delete unknown connection(s): %s."
+msgstr ""
+"Erreur : impossible de supprimer la(les) connexion(s) inconnue(s) : %s."
+
+#: ../cli/src/connections.c:7852
+#, c-format
+msgid "Could not load file '%s'\n"
+msgstr "Impossible de charger le fichier « %s »\n"
+
+#: ../cli/src/connections.c:7917
+#, c-format
+msgid ""
+"Error: 'configured' or 'active' command is expected for 'connection show'."
+msgstr ""
+"Erreur : la commande « configured » ou « active » est attendue pour "
+"« connection show »."
+
+#: ../cli/src/connections.c:7984
+#, c-format
+msgid "Error: '%s' is not valid 'connection' command."
+msgstr "Erreur : « %s » n'est pas une commande « connection » valide."
+
+#: ../cli/src/connections.c:8053 ../cli/src/network-manager.c:615
#, c-format
msgid "Error: Could not get system settings."
msgstr "Erreur : impossible d'obtenir les paramètres système."
-#: ../cli/src/connections.c:1742
+#: ../cli/src/connections.c:8063
#, c-format
msgid "Error: Can't obtain connections: settings service is not running."
msgstr ""
-"Erreur : impossible d'obtenir les connexions : le service des paramètres n'est "
-"pas en cours d'exécution."
+"Erreur : impossible d'obtenir les connexions : le service des paramètres "
+"n'est pas en cours d'exécution."
-#. 0
-#. 9
-#. 3
-#: ../cli/src/devices.c:66 ../cli/src/devices.c:102 ../cli/src/devices.c:212
-#: ../cli/src/devices.c:228
+#: ../cli/src/devices.c:71 ../cli/src/devices.c:87 ../cli/src/devices.c:184
+#: ../cli/src/devices.c:201
msgid "DEVICE"
msgstr "PÉRIPHÉRIQUE"
-#. 1
-#. 4
-#. 1
-#: ../cli/src/devices.c:68 ../cli/src/devices.c:106
-#: ../cli/src/network-manager.c:39
-msgid "STATE"
-msgstr "ÉTAT"
+#: ../cli/src/devices.c:75 ../cli/src/devices.c:103
+msgid "CONNECTION"
+msgstr "CONNEXION"
-#: ../cli/src/devices.c:78
-msgid "GENERAL"
-msgstr "GÉNÉRAL"
+#: ../cli/src/devices.c:76 ../cli/src/devices.c:104
+msgid "CON-UUID"
+msgstr "CON-UUID"
-#. 0
-#: ../cli/src/devices.c:79
-msgid "CAPABILITIES"
-msgstr "CAPACITÉS"
+#: ../cli/src/devices.c:89
+msgid "VENDOR"
+msgstr "FOURNISSEUR"
-#. 1
-#: ../cli/src/devices.c:80
-msgid "WIFI-PROPERTIES"
-msgstr "PROPRIÉTÉS-WIFI"
+#: ../cli/src/devices.c:90
+msgid "PRODUCT"
+msgstr "PRODUIT"
-#. 2
-#: ../cli/src/devices.c:81
-msgid "AP"
-msgstr "PA"
+#: ../cli/src/devices.c:91
+msgid "DRIVER"
+msgstr "PILOTE"
-#. 3
-#: ../cli/src/devices.c:82
-msgid "WIRED-PROPERTIES"
-msgstr "PROPRIÉTÉS-CABLÉES"
+#: ../cli/src/devices.c:92
+msgid "DRIVER-VERSION"
+msgstr "PILOTE-VERSION"
-#. 4
-#: ../cli/src/devices.c:83
-msgid "WIMAX-PROPERTIES"
-msgstr "PROPRIÉTÉS-WIMAX"
+#: ../cli/src/devices.c:93
+msgid "FIRMWARE-VERSION"
+msgstr "MICROLOGICIEL-VERSION"
-#. 5
-#. 0
-#: ../cli/src/devices.c:84 ../cli/src/devices.c:225
-msgid "NSP"
-msgstr "NSP"
+#: ../cli/src/devices.c:94
+msgid "HWADDR"
+msgstr "ADR.-MAT."
-#. 6
-#: ../cli/src/devices.c:85
-msgid "IP4-SETTINGS"
-msgstr "PARAMÈTRES-IP4"
+#: ../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"
-#. 7
-#: ../cli/src/devices.c:86
-msgid "IP4-DNS"
-msgstr "DNS-IP4"
+#: ../cli/src/devices.c:97
+msgid "REASON"
+msgstr "RAISON"
-#. 8
-#: ../cli/src/devices.c:87
-msgid "IP6-SETTINGS"
-msgstr "PARAMÈTRES-IP6"
+#: ../cli/src/devices.c:98
+msgid "UDI"
+msgstr "UDI"
-#. 9
-#: ../cli/src/devices.c:88
-msgid "IP6-DNS"
-msgstr "DNS-IP6"
+#: ../cli/src/devices.c:99
+msgid "IP-IFACE"
+msgstr "IP-IFACE"
-#. 2
-#: ../cli/src/devices.c:104
-msgid "DRIVER"
-msgstr "PILOTE"
+#: ../cli/src/devices.c:100
+msgid "NM-MANAGED"
+msgstr "GÉRÉ-NM"
-#. 3
-#: ../cli/src/devices.c:105
-msgid "HWADDR"
-msgstr "ADR.-MAT."
+#: ../cli/src/devices.c:102
+msgid "FIRMWARE-MISSING"
+msgstr "MICROLOGICIEL-MANQUANT"
-#. 0
#: ../cli/src/devices.c:115
+msgid "AVAILABLE-CONNECTION-PATHS"
+msgstr "CHEMINS-D'ACCÈS-DISPONIBLES"
+
+#: ../cli/src/devices.c:116
+msgid "AVAILABLE-CONNECTIONS"
+msgstr "CONNEXIONS-DISPONIBLES"
+
+#: ../cli/src/devices.c:125
msgid "CARRIER-DETECT"
msgstr "DÉTECTION-PORTEUSE"
-#. 1
-#: ../cli/src/devices.c:116
+#: ../cli/src/devices.c:126
msgid "SPEED"
msgstr "VITESSE"
-#. 0
-#: ../cli/src/devices.c:125
+#: ../cli/src/devices.c:135
msgid "CARRIER"
msgstr "PORTEUSE"
-#. 0
-#: ../cli/src/devices.c:135
+#: ../cli/src/devices.c:144 ../cli/src/devices.c:563
msgid "WEP"
msgstr "WEP"
-#. 1
-#: ../cli/src/devices.c:136
+#: ../cli/src/devices.c:145
msgid "WPA"
msgstr "WPA"
-#. 2
-#: ../cli/src/devices.c:137
+#: ../cli/src/devices.c:146 ../cli/src/devices.c:571
msgid "WPA2"
msgstr "WPA2"
-#. 3
-#: ../cli/src/devices.c:138
+#: ../cli/src/devices.c:147
msgid "TKIP"
msgstr "TKIP"
-#. 4
-#: ../cli/src/devices.c:139
+#: ../cli/src/devices.c:148
msgid "CCMP"
msgstr "CCMP"
-#. 0
-#: ../cli/src/devices.c:149
+#: ../cli/src/devices.c:149 ../cli/src/devices.c:239
+msgid "AP"
+msgstr "PA"
+
+#: ../cli/src/devices.c:150
+msgid "ADHOC"
+msgstr "ADHOC"
+
+#: ../cli/src/devices.c:159
msgid "CTR-FREQ"
msgstr "FRÉQ-CTR"
-#. 1
-#: ../cli/src/devices.c:150
+#: ../cli/src/devices.c:160
msgid "RSSI"
msgstr "RSSI"
-#. 2
-#: ../cli/src/devices.c:151
+#: ../cli/src/devices.c:161
msgid "CINR"
msgstr "CINR"
-#. 3
-#: ../cli/src/devices.c:152
+#: ../cli/src/devices.c:162
msgid "TX-POW"
msgstr "TX-POW"
-#. 4
-#: ../cli/src/devices.c:153
+#: ../cli/src/devices.c:163
msgid "BSID"
msgstr "BSID"
-#. 0
-#: ../cli/src/devices.c:163 ../cli/src/devices.c:174
-msgid "ADDRESS"
-msgstr "ADRESSE"
-
-#. 1
-#: ../cli/src/devices.c:164 ../cli/src/devices.c:175
-msgid "PREFIX"
-msgstr "PRÉFIXE"
-
-#. 2
-#: ../cli/src/devices.c:165 ../cli/src/devices.c:176
-msgid "GATEWAY"
-msgstr "PASSERELLE"
-
-#. 0
-#: ../cli/src/devices.c:185 ../cli/src/devices.c:194
-msgid "DNS"
-msgstr "DNS"
-
-#. 0
-#: ../cli/src/devices.c:203
+#: ../cli/src/devices.c:172 ../tui/nmt-page-wifi.c:221
msgid "SSID"
msgstr "SSID"
-#. 1
-#: ../cli/src/devices.c:204
+#: ../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:205
+#: ../cli/src/devices.c:175
msgid "MODE"
msgstr "MODE"
-#. 3
-#: ../cli/src/devices.c:206
+#: ../cli/src/devices.c:176
+msgid "CHAN"
+msgstr "CHAN"
+
+#: ../cli/src/devices.c:177
msgid "FREQ"
msgstr "FRÉQ"
-#. 4
-#: ../cli/src/devices.c:207
+#: ../cli/src/devices.c:178
msgid "RATE"
msgstr "DÉBIT"
-#. 5
-#. 1
-#: ../cli/src/devices.c:208 ../cli/src/devices.c:226
+#: ../cli/src/devices.c:179 ../cli/src/devices.c:199
msgid "SIGNAL"
msgstr "SIGNAL"
-#. 6
-#: ../cli/src/devices.c:209
+#: ../cli/src/devices.c:180
+msgid "BARS"
+msgstr "BARS"
+
+#: ../cli/src/devices.c:181
msgid "SECURITY"
msgstr "SÉCURITÉ"
-#. 7
-#: ../cli/src/devices.c:210
+#: ../cli/src/devices.c:182
msgid "WPA-FLAGS"
-msgstr "DRAPEAUX-WPA"
+msgstr "MARQUEURS-WPA"
-#. 8
-#: ../cli/src/devices.c:211
+#: ../cli/src/devices.c:183
msgid "RSN-FLAGS"
-msgstr "DRAPEAUX-RSN"
+msgstr "MARQUEURS-RSN"
-#. 10
-#. 4
-#: ../cli/src/devices.c:213 ../cli/src/devices.c:229
+#: ../cli/src/devices.c:185 ../cli/src/devices.c:202
msgid "ACTIVE"
msgstr "ACTIF"
-#: ../cli/src/devices.c:246
+#: ../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 "ESCLAVES"
+
+#: ../cli/src/devices.c:222
+msgid "ID"
+msgstr "ID"
+
+#: ../cli/src/devices.c:237
+msgid "CAPABILITIES"
+msgstr "CAPACITÉS"
+
+#: ../cli/src/devices.c:238
+msgid "WIFI-PROPERTIES"
+msgstr "PROPRIÉTÉS-WIFI"
+
+#: ../cli/src/devices.c:240
+msgid "WIRED-PROPERTIES"
+msgstr "PROPRIÉTÉS-CABLÉES"
+
+#: ../cli/src/devices.c:241
+msgid "WIMAX-PROPERTIES"
+msgstr "PROPRIÉTÉS-WIMAX"
+
+#: ../cli/src/devices.c:247 ../tui/nmt-page-bond.c:73
+msgid "BOND"
+msgstr "LIEN"
+
+#: ../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 "CONNEXIONS"
+
+#: ../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"
-" wimax [list [iface <iface>] [nsp <name>]]\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"
+" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
msgstr ""
-"Utilisation : nmcli dev { COMMANDE | help }\n"
+"Utilisation : nmcli device { COMMAND | help }\n"
"\n"
-" COMMANDE := { status | list | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
"\n"
-" COMMANDE := { status | list | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | wifi }\n"
"\n"
" status\n"
-" list [iface <iface>]\n"
-" disconnect iface <iface> [--nowait] [--timeout <délai>]\n"
-" wifi [list [iface <iface>] [bssid <BSSID>]]\n"
-" wimax [list [iface <iface>] [nsp <nom>]]\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"
+" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
-#: ../cli/src/devices.c:274
-msgid "unmanaged"
-msgstr "non-géré"
-
-#: ../cli/src/devices.c:276
-msgid "unavailable"
-msgstr "indisponible"
-
-#: ../cli/src/devices.c:278 ../cli/src/network-manager.c:108
-msgid "disconnected"
-msgstr "déconnecté"
-
-#: ../cli/src/devices.c:280
-msgid "connecting (prepare)"
-msgstr "connexion (préparation)"
-
-#: ../cli/src/devices.c:282
-msgid "connecting (configuring)"
-msgstr "connexion (configuration)"
-
-#: ../cli/src/devices.c:284
-msgid "connecting (need authentication)"
-msgstr "connexion (authentification requise)"
-
-#: ../cli/src/devices.c:286
-msgid "connecting (getting IP configuration)"
-msgstr "connexion (obtention de la configuration IP)"
+#: ../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 ""
+"Utilisation : nmcli device status { help }\n"
+"\n"
+"Afficher le statut de tous les périphériques.\n"
+"Par défaut, les colonnes suivantes sont affichées :\n"
+" DEVICE - nom de l'interface\n"
+" TYPE - type du périphérique\n"
+" STATE - état du périphérique\n"
+" CONNECTION - connexion activée sur le périphérique (s'il y en a)\n"
+"Les colonnes affichées peuvent être modifiées en utilisant l'option globale "
+"« --fields ».\n"
+"« status » est la commande par défaut, ce qui signifie que « nmcli device » "
+"appelle « nmcli device status ».\n"
+"\n"
-#: ../cli/src/devices.c:288
-msgid "connecting (checking IP connectivity)"
-msgstr "connexion (contrôle de la connectivité IP)"
+#: ../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 ""
+"Utilisation : nmcli device show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<ifname>]\n"
+"\n"
+"Afficher les détails du (ou des) périphérique(s).\n"
+"La commande répertorie les détails de tous les périphériques, ou d'un "
+"périphérique en particulier.\n"
+"\n"
-#: ../cli/src/devices.c:290
-msgid "connecting (starting secondary connections)"
-msgstr "connexion (démarrage des connexions secondaires)"
+#: ../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 ""
+"Utilisation : nmcli device connect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Connecter le périphérique.\n"
+"NetworkManager tentera de trouver une connexion convenable qui sera activée.\n"
+"NetworkManager envisagera aussi les connexions qui ne sont pas réglées sur "
+"auto-connect.\n"
+"\n"
-#: ../cli/src/devices.c:292 ../cli/src/network-manager.c:104
-msgid "connected"
-msgstr "connecté"
+#: ../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 ""
+"Utilisation : nmcli device disconnect { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Déconnecter le périphérique.\n"
+"La commande déconnecte le périphérique et l'empêche d'activer "
+"automatiquement\n"
+"des connexions supplémentaires sans une intervention manuelle de "
+"l'utilisateur.\n"
+"\n"
-#: ../cli/src/devices.c:296
-msgid "connection failed"
-msgstr "échec de la connexion"
+#: ../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 ""
+"Utilisation : nmcli device wifi { ARGUMENTS | help }\n"
+"\n"
+"Effectuer des opérations sur des périphériques Wi-Fi.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
+"Répertorier les points d'accès Wi-Fi disponibles. Les options « ifname » et "
+"« bssid »\n"
+"peuvent être utilisées pour répertorier les points d'accès pour une "
+"interface en particulier, ou avec un BSSID spécifique.\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"
+"Connecter à un réseau Wi-Fi spécifié par SSID ou BSSID. La commande crée\n"
+"une nouvelle connexion, puis l'active sur un périphérique. Ceci correspond "
+"en ligne de commande\n"
+"à un clic sur SSID dans un client GUI. La commande crée toujours une "
+"nouvelle connexion\n"
+"et est donc principalement utile pour effectuer des connexions sur de "
+"nouveaux réseaux Wi-Fi.\n"
+"Si une connexion au réseau existe déjà, il vaut mieux ouvrir\n"
+"le profil existant comme suit : nmcli con up id <name>. Remarquez que seuls\n"
+"les réseaux open, WEP et WPA-PSK sont pris en charge pour le moment. Il est "
+"aussi\n"
+"supposé sur la configuration IP est obtenue via DHCP.\n"
+"\n"
+"ARGUMENTS := rescan [[ifname] <ifname>]\n"
+"\n"
+"Requiert que NetworkManager effectue immédiatement un nouveau scan pour "
+"trouver les points d'accès disponibles.\n"
+"NetworkManager scanne les réseaux Wi-Fi de manière périodique, mais dans "
+"certains cas il peut être utile\n"
+"d'effectuer le scan manuellement. Remarquez que cette commandw n'affiche pas "
+"les points d'accès,\n"
+"veuillez utiliser « nmcli device wifi list » pour cela.\n"
+"\n"
-#: ../cli/src/devices.c:321 ../cli/src/devices.c:331 ../cli/src/devices.c:491
-#: ../cli/src/devices.c:535
-msgid "Unknown"
-msgstr "Inconnu"
+#: ../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 ""
+"Utilisation : nmcli device wimax { ARGUMENTS | help }\n"
+"\n"
+"Effectuer des opérations sur des périphériques WiMAX.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [nsp <name>]]\n"
+"\n"
+"Répertorier les NSP WiMAX disponibles. Les options « ifname » et « nsp » "
+"peuvent être utilisées pour\n"
+"répertorier les réseaux pour une interface en particulier, oou avec un NSP "
+"en particulier.\n"
+"\n"
-#: ../cli/src/devices.c:364
+#: ../cli/src/devices.c:480
msgid "(none)"
msgstr "(aucun)"
-#: ../cli/src/devices.c:389
-#, c-format
-msgid "%s: error converting IP4 address 0x%X"
-msgstr "%s : erreur lors de la conversion de l'adresse IP4 0x%X"
-
-#: ../cli/src/devices.c:460
+#: ../cli/src/devices.c:547
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:461
+#: ../cli/src/devices.c:548
#, c-format
msgid "%u Mbit/s"
msgstr "%u Mo/s"
-#: ../cli/src/devices.c:470
-msgid "Encrypted: "
-msgstr "Chiffré : "
-
-#: ../cli/src/devices.c:475
-msgid "WEP "
-msgstr "WEP "
+#: ../cli/src/devices.c:567
+msgid "WPA1"
+msgstr "WPA1"
-#: ../cli/src/devices.c:477
-msgid "WPA "
-msgstr "WPA "
+#: ../cli/src/devices.c:576
+msgid "802.1X"
+msgstr "802.1X"
-#: ../cli/src/devices.c:479
-msgid "WPA2 "
-msgstr "WPA2 "
-
-#: ../cli/src/devices.c:482
-msgid "Enterprise "
-msgstr "Enterprise "
-
-#: ../cli/src/devices.c:491
+#: ../cli/src/devices.c:592
msgid "Ad-Hoc"
msgstr "Ad-Hoc"
-#: ../cli/src/devices.c:491
-msgid "Infrastructure"
-msgstr "Infrastructure"
+#: ../cli/src/devices.c:593
+msgid "Infra"
+msgstr "Infra"
-#: ../cli/src/devices.c:526
+#: ../cli/src/devices.c:625
msgid "Home"
msgstr "Domicile"
-#: ../cli/src/devices.c:529
+#: ../cli/src/devices.c:628
msgid "Partner"
msgstr "Partenaire"
-#: ../cli/src/devices.c:532
+#: ../cli/src/devices.c:631
msgid "Roaming"
msgstr "Itinérance"
-#: ../cli/src/devices.c:602
-#, c-format
-msgid "Error: 'dev list': %s"
-msgstr "Erreur : « dev list » : %s"
-
-#: ../cli/src/devices.c:604
-#, c-format
-msgid "Error: 'dev list': %s; allowed fields: %s"
-msgstr "Erreur : « dev list » : %s ; champs autorisés : %s"
-
-#: ../cli/src/devices.c:613
+#: ../cli/src/devices.c:725
msgid "Device details"
msgstr "Détails de périphérique"
-#: ../cli/src/devices.c:647 ../cli/src/devices.c:1142 ../cli/src/utils.c:343
+#: ../cli/src/devices.c:737
+#, c-format
+msgid "Error: 'device show': %s"
+msgstr "Erreur : « 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 "(inconnu)"
-#: ../cli/src/devices.c:648
-msgid "unknown)"
-msgstr "inconnu)"
-
-#: ../cli/src/devices.c:674
+#: ../cli/src/devices.c:827
#, c-format
msgid "%u Mb/s"
-msgstr "%u Mb/s"
+msgstr "%u Mo/s"
-#. Print header
-#. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:747
+#: ../cli/src/devices.c:913
msgid "on"
msgstr "marche"
-#: ../cli/src/devices.c:747
+#: ../cli/src/devices.c:913
msgid "off"
msgstr "arrêt"
-#: ../cli/src/devices.c:994
-#, c-format
-msgid "Error: 'dev status': %s"
-msgstr "Erreur : « dev status » : %s"
-
-#: ../cli/src/devices.c:996
+#: ../cli/src/devices.c:1188
#, c-format
-msgid "Error: 'dev status': %s; allowed fields: %s"
-msgstr "Erreur : « dev status » : %s ; champs autorisés : %s"
+msgid "Error: 'device status': %s"
+msgstr "Erreur : « device status » : %s"
-#: ../cli/src/devices.c:1019
+#: ../cli/src/devices.c:1206
msgid "Status of devices"
msgstr "État des périphériques"
-#: ../cli/src/devices.c:1050
+#: ../cli/src/devices.c:1237
#, c-format
-msgid "Error: '%s' argument is missing."
-msgstr "Erreur : le paramètre « %s » est manquant."
+msgid "Error: invalid extra argument '%s'."
+msgstr "Erreur : argument supplémentaire « %s » non valide."
-#: ../cli/src/devices.c:1091 ../cli/src/devices.c:1243
-#: ../cli/src/devices.c:1380 ../cli/src/devices.c:1599
+#: ../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 "Erreur : périphérique « %s » introuvable."
-#: ../cli/src/devices.c:1114
+#: ../cli/src/devices.c:1319
+#, c-format
+msgid "Success: Device '%s' successfully activated."
+msgstr "Opération réussie : périphérique « %s » correctement activé."
+
+#: ../cli/src/devices.c:1333
+#, c-format
+msgid "Error: Device activation failed: %s"
+msgstr "Erreur : l'activation du périphérique a échoué : %s"
+
+#: ../cli/src/devices.c:1350
+#, c-format
+msgid "Device '%s' has been connected.\n"
+msgstr "Le périphérique « %s » a été connecté.\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 "Erreur : aucune interface spécifiée."
+
+#: ../cli/src/devices.c:1396 ../cli/src/devices.c:1531
+#, c-format
+msgid "Error: extra argument not allowed: '%s'."
+msgstr "Erreur : argument supplémentaire non autorisé : « %s »."
+
+#: ../cli/src/devices.c:1459
#, c-format
msgid "Success: Device '%s' successfully disconnected."
msgstr "Opération réussie : périphérique « %s » correctement déconnecté."
-#: ../cli/src/devices.c:1139
+#: ../cli/src/devices.c:1471
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "Erreur : échec de la déconnexion du périphérique « %s » (%s) : %s"
-#: ../cli/src/devices.c:1147
+#: ../cli/src/devices.c:1485
#, c-format
-msgid "Device state: %d (%s)\n"
-msgstr "État du périphérique : %d (%s)\n"
+msgid "Device '%s' has been disconnected.\n"
+msgstr "Le périphérique « %s » a été déconnecté.\n"
+
+#: ../cli/src/devices.c:1628
+msgid "Wi-Fi scan list"
+msgstr "Liste de balayage Wi-Fi"
-#: ../cli/src/devices.c:1212
+#: ../cli/src/devices.c:1666
#, c-format
-msgid "Error: iface has to be specified."
-msgstr "Erreur : iface doit être spécifié."
+msgid "Error: 'device wifi': %s"
+msgstr "Erreur : « device wifi » : %s"
-#: ../cli/src/devices.c:1338
+#: ../cli/src/devices.c:1719 ../cli/src/devices.c:1788
#, c-format
-msgid "Error: 'dev wifi': %s"
-msgstr "Erreur : « dev wifi » : %s"
+msgid "Error: Access point with bssid '%s' not found."
+msgstr "Erreur : point d'accès avec bssid « %s » introuvable."
-#: ../cli/src/devices.c:1340
+#: ../cli/src/devices.c:1743 ../cli/src/devices.c:2131
+#: ../cli/src/devices.c:2293
#, c-format
-msgid "Error: 'dev wifi': %s; allowed fields: %s"
-msgstr "Erreur : « dev wifi » : %s ; champs autorisés : %s"
+msgid "Error: Device '%s' is not a Wi-Fi device."
+msgstr "Erreur : le périphérique « %s » n'est pas un périphérique Wi-Fi."
-#: ../cli/src/devices.c:1363
-msgid "WiFi scan list"
-msgstr "Liste du balayage WiFi"
+#: ../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 ""
+"Connexion avec l'UUID « %s » créé et activé sur le périphérique « %s »\n"
-#: ../cli/src/devices.c:1400 ../cli/src/devices.c:1454
+#: ../cli/src/devices.c:1829
#, c-format
-msgid "Error: Access point with bssid '%s' not found."
-msgstr "Erreur : point d'accès avec bssid « %s » introuvable."
+msgid "Error: Connection activation failed: (%d) %s."
+msgstr "Erreur : échec de l'activation de la connexion : (%d) %s."
-#: ../cli/src/devices.c:1417
+#: ../cli/src/devices.c:1854
#, c-format
-msgid "Error: Device '%s' is not a WiFi device."
-msgstr "Erreur : le périphérique « %s » n'est pas un périphérique WiFi."
+msgid "Error: Failed to add/activate new connection: (%d) %s"
+msgstr ""
+"Erreur : échec de l'ajout ou de l'activation de la nouvelle connexion : (%d) "
+"%s"
+
+#: ../cli/src/devices.c:1862
+#, c-format
+msgid "Error: Failed to add/activate new connection: Unknown error"
+msgstr ""
+"Erreur : échec de l'ajout ou de l'activation de la nouvelle connexion : "
+"Erreur inconnue"
-#: ../cli/src/devices.c:1481
+#: ../cli/src/devices.c:2013
+msgid "SSID or BSSID: "
+msgstr "SSID ou BSSID : "
+
+#: ../cli/src/devices.c:2018
#, c-format
-msgid "Error: 'dev wifi' command '%s' is not valid."
-msgstr "Erreur : commande « dev wifi » « %s » non valide."
+msgid "Error: SSID or BSSID are missing."
+msgstr "Erreur : SSID ou BSSID sont manquants."
-#: ../cli/src/devices.c:1557
+#: ../cli/src/devices.c:2042
#, c-format
-msgid "Error: 'dev wimax': %s"
-msgstr "Erreur : « dev wimax » : %s"
+msgid "Error: bssid argument value '%s' is not a valid BSSID."
+msgstr ""
+"Erreur : la valeur de l'argument bssid « %s » n'est pas une valeur BSSID "
+"valide."
-#: ../cli/src/devices.c:1559
+#: ../cli/src/devices.c:2066
#, c-format
-msgid "Error: 'dev wimax': %s; allowed fields: %s"
-msgstr "Erreur : « dev wimax » : %s ; champs autorisés : %s"
+msgid ""
+"Error: wep-key-type argument value '%s' is invalid, use 'key' or 'phrase'."
+msgstr ""
+"Erreur : la valeur de l'argument wep-key-type « %s » est non valide, "
+"veuillez utiliser « key » ou « phrase »."
-#: ../cli/src/devices.c:1582
+#: ../cli/src/devices.c:2086
+#, c-format
+msgid "Error: %s: %s."
+msgstr "Erreur : %s : %s."
+
+#: ../cli/src/devices.c:2101
+#, c-format
+msgid "Error: BSSID to connect to (%s) differs from bssid argument (%s)."
+msgstr ""
+"Erreur : le BSSID devant se connecter à (%s) diffère de l'argument bssid "
+"(%s)."
+
+#: ../cli/src/devices.c:2107
+#, c-format
+msgid "Error: Parameter '%s' is neither SSID nor BSSID."
+msgstr "Erreur : le paramètre « %s » est ni un SSID, ni un BSSID."
+
+#: ../cli/src/devices.c:2133 ../cli/src/devices.c:2295
+#, c-format
+msgid "Error: No Wi-Fi device found."
+msgstr "Erreur : aucun périphérique Wi-Fi trouvé."
+
+#: ../cli/src/devices.c:2151
+#, c-format
+msgid "Error: No network with SSID '%s' found."
+msgstr "Erreur : aucun réseau avec le SSID « %s » trouvé."
+
+#: ../cli/src/devices.c:2153
+#, c-format
+msgid "Error: No access point with BSSID '%s' found."
+msgstr "Erreur : aucun point d'accès avec le BSSID « %s » trouvé."
+
+#: ../cli/src/devices.c:2192
+msgid "Password: "
+msgstr "Mot de passe :"
+
+#: ../cli/src/devices.c:2321
+#, c-format
+msgid "Error: 'device wifi' command '%s' is not valid."
+msgstr "Erreur : commande « device wifi » « %s » non valide."
+
+#: ../cli/src/devices.c:2368
msgid "WiMAX NSP list"
msgstr "Liste NSP WiMax"
-#: ../cli/src/devices.c:1619
+#: ../cli/src/devices.c:2405
+#, c-format
+msgid "Error: 'device wimax': %s"
+msgstr "Erreur : « device wimax » : %s"
+
+#: ../cli/src/devices.c:2459
#, c-format
msgid "Error: NSP with name '%s' not found."
msgstr "Erreur : NSP nommé « %s » introuvable."
-#: ../cli/src/devices.c:1630
+#: ../cli/src/devices.c:2472
#, c-format
msgid "Error: Device '%s' is not a WiMAX device."
msgstr "Erreur : le périphérique « %s » n'est pas un périphérique WiMax."
-#: ../cli/src/devices.c:1661
+#: ../cli/src/devices.c:2510
#, c-format
msgid "Error: Access point with nsp '%s' not found."
msgstr "Erreur : point d'accès avec nsp « %s » introuvable."
-#: ../cli/src/devices.c:1688
+#: ../cli/src/devices.c:2542
#, c-format
-msgid "Error: 'dev wimax' command '%s' is not valid."
-msgstr "Erreur : commande « dev wifi » « %s » non valide."
+msgid "Error: 'device wimax' command '%s' is not valid."
+msgstr "Erreur : commande « device wimax » « %s » non valide."
-#: ../cli/src/devices.c:1738
+#: ../cli/src/devices.c:2621
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "Erreur : commande « dev » « %s » non valide."
-#
#: ../cli/src/network-manager.c:37
msgid "RUNNING"
msgstr "ÉTAT FONCT."
-#. 0
#: ../cli/src/network-manager.c:38
msgid "VERSION"
msgstr "VERSION"
-#. 2
#: ../cli/src/network-manager.c:40
-msgid "NET-ENABLED"
-msgstr "RÉSEAU-ACT."
+msgid "STARTUP"
+msgstr "DÉMARRAGE"
-#. 3
#: ../cli/src/network-manager.c:41
-msgid "WIFI-HARDWARE"
-msgstr "MATÉRIEL-WIFI"
+msgid "CONNECTIVITY"
+msgstr "CONNECTIVITÉ"
-#. 4
#: ../cli/src/network-manager.c:42
-msgid "WIFI"
-msgstr "WIFI"
+msgid "NETWORKING"
+msgstr "RÉSEAU"
-#. 5
#: ../cli/src/network-manager.c:43
-msgid "WWAN-HARDWARE"
-msgstr "MATÉRIEL-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 "MATÉRIEL-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:67
+#: ../cli/src/network-manager.c:70
+msgid "PERMISSION"
+msgstr "PERMISSION"
+
+#: ../cli/src/network-manager.c:71
+msgid "VALUE"
+msgstr "VALEUR"
+
+#: ../cli/src/network-manager.c:79
+msgid "LEVEL"
+msgstr "NIVEAU"
+
+#: ../cli/src/network-manager.c:80
+msgid "DOMAINS"
+msgstr "DOMAINES"
+
+#: ../cli/src/network-manager.c:95
#, c-format
msgid ""
-"Usage: nmcli nm { COMMAND | help }\n"
+"Usage: nmcli general { COMMAND | help }\n"
+"\n"
+"COMMAND := { status | hostname | permissions | logging }\n"
"\n"
-" COMMAND := { status | enable | sleep | wifi | wwan | wimax }\n"
+" status\n"
+"\n"
+" hostname [<hostname>]\n"
"\n"
-" COMMAND := { status | enable | sleep | wifi | wwan }\n"
+" permissions\n"
+"\n"
+" logging [level <log level>] [domains <log domains>]\n"
+"\n"
+msgstr ""
+"Utilisation : nmcli general { COMMAND | help }\n"
+"\n"
+"COMMAND := { status | hostname | 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"
+" hostname [<hostname>]\n"
+"\n"
+" permissions\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 ""
-"Utilisation : nmcli nm { COMMANDE | help }\n"
+"Utilisation : nmcli general status { help }\n"
+"\n"
+"Afficher le statut général de NetworkManager.\n"
+"« status » est l'action par défaut, ce qui signifie que « nmcli gen » "
+"appelle « nmcli gen status »\n"
"\n"
-" COMMANDE := { status | enable | sleep | wifi | wwan | wimax }\n"
+
+#: ../cli/src/network-manager.c:117
+#, c-format
+msgid ""
+"Usage: nmcli general hostname { ARGUMENTS | help }\n"
"\n"
-" COMMANDE := { status | enable | sleep | wifi | wwan }\n"
+"ARGUMENTS := [<hostname>]\n"
"\n"
-" status\n"
-" enable [true|false]\n"
-" sleep [true|false]\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
-" wimax [on|off]\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 ""
+"Utilisation : nmcli general hostname { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<hostname>]\n"
+"\n"
+"Obtenir ou modifier le nom d'hôte persistant du système.\n"
+"Sans arguments, ceci imprime le nom d'hôte actuellement configuré. Lorsque "
+"vous passez\n"
+"un nom d'hôte, NetworkManager va le définir comme étant le nouveau nom "
+"d'hôte persistant du système.\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 ""
+"Utilisation : nmcli general permissions { help }\n"
+"\n"
+"Afficher les permissions de l'appelant pour les opérations authentifiées.\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 ""
+"Utilisation : nmcli general logging { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [level <log level>] [domains <log domains>]\n"
+"\n"
+"Obtenir ou modifier le niveau et les domaines de connexion de NetworkManager."
+"\n"
+"Sans arguments, le niveau et les domaines de connexion sont affichés. Pour "
+"modifier\n"
+"l'état de connexion, fournissez le niveau et/ou le domaine. Veuillez "
+"consulter la page man\n"
+"pour obtenir la liste des domaines de connexion possibles.\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 ""
+"Utilisation : 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 ""
+"Utilisation : nmcli networking on { help }\n"
+"\n"
+"Activer la mise en réseau.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:173
+#, c-format
+msgid "Usage: nmcli networking off { help }\n"
+"\n"
+"Switch networking off.\n"
+"\n"
+msgstr ""
+"Utilisation : nmcli networking off { help }\n"
+"\n"
+"Désactiver la mise en réseau.\n"
"\n"
-#: ../cli/src/network-manager.c:96
+#: ../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 ""
+"Utilisation : nmcli networking connectivity { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [check]\n"
+"\n"
+"Obtenir l'état de connectivité du réseau.\n"
+"L'argument optionnel « check » fait que NetworkManager vérifie à nouveau la "
+"connectivité.\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 ""
+"Utilisation : 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 ""
+"Usage: nmcli radio all { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Obtenir le statut de tous les interrupteurs radios, les activer ou "
+"désactiver.\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 ""
+"Utilisation : nmcli radio wifi { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Obtenir le statut de l'interrupteur radio Wi-Fi, l'activer ou le désactiver.\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 ""
+"Utilisation : nmcli radio wwan { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Obtenir le statut de l'interrupteur radio du haut débit mobile, l'activer ou "
+"le désactiver.\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 ""
+"Utilisation : nmcli radio wimax { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [on | off]\n"
+"\n"
+"Obtenir le statut de l'interrupteur radio WiMAX, l'activer ou le désactiver.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:264
msgid "asleep"
msgstr "veille"
-#: ../cli/src/network-manager.c:98
+#: ../cli/src/network-manager.c:266
msgid "connecting"
msgstr "connexion"
-#: ../cli/src/network-manager.c:100
+#: ../cli/src/network-manager.c:268
msgid "connected (local only)"
msgstr "connecté (local seulement)"
-#: ../cli/src/network-manager.c:102
+#: ../cli/src/network-manager.c:270
msgid "connected (site only)"
msgstr "connecté (site seulement)"
-#: ../cli/src/network-manager.c:106
+#: ../cli/src/network-manager.c:274
msgid "disconnecting"
msgstr "déconnexion"
-#: ../cli/src/network-manager.c:146
-#, c-format
-msgid "Error: 'nm status': %s"
-msgstr "Erreur : « nm status » : %s"
+#: ../cli/src/network-manager.c:290
+msgid "portal"
+msgstr "portail"
+
+#: ../cli/src/network-manager.c:292
+msgid "limited"
+msgstr "limité"
+
+#: ../cli/src/network-manager.c:294
+msgid "full"
+msgstr "plein"
-#: ../cli/src/network-manager.c:148
+#: ../cli/src/network-manager.c:332
#, c-format
-msgid "Error: 'nm status': %s; allowed fields: %s"
-msgstr "Erreur : « nm status » : %s ; champs autorisés : %s"
+msgid "Error: only these fields are allowed: %s"
+msgstr "Erreur : seuls ces champs sont autorisés : %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: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 "activé"
-#: ../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: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 "désactivé"
-#: ../cli/src/network-manager.c:181
+#: ../cli/src/network-manager.c:367
msgid "NetworkManager status"
msgstr "État de NetworkManager"
-#. Print header
-#: ../cli/src/network-manager.c:184
+#: ../cli/src/network-manager.c:372
msgid "running"
msgstr "actif"
-#: ../cli/src/network-manager.c:184
+#: ../cli/src/network-manager.c:372
msgid "not running"
msgstr "inactif"
-#: ../cli/src/network-manager.c:215 ../cli/src/utils.c:323
-#, c-format
-msgid "Error: Couldn't connect to system bus: %s"
-msgstr "Erreur : impossible de se connecter au bus système : %s"
+#: ../cli/src/network-manager.c:375
+msgid "starting"
+msgstr "démarrage"
+
+#: ../cli/src/network-manager.c:375
+msgid "started"
+msgstr "démarré"
-#: ../cli/src/network-manager.c:226
+#: ../cli/src/network-manager.c:446
+msgid "auth"
+msgstr "auth"
+
+#: ../cli/src/network-manager.c:475
#, c-format
-msgid "Error: Couldn't create D-Bus object proxy."
-msgstr "Erreur : impossible de créer l'objet proxy D-Bus."
+msgid "Error: 'general permissions': %s"
+msgstr "Erreur : « general permissions » : %s"
-#: ../cli/src/network-manager.c:232
+#: ../cli/src/network-manager.c:489
+msgid "NetworkManager permissions"
+msgstr "Permissions NetworkManager"
+
+#: ../cli/src/network-manager.c:530
#, c-format
-msgid "Error in sleep: %s"
-msgstr "Erreur dans la commande sleep : %s"
+msgid "Error: 'general logging': %s"
+msgstr "Erreur : « 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:545
+msgid "NetworkManager logging"
+msgstr "Journalisation NetworkManager"
+
+#: ../cli/src/network-manager.c:565
#, c-format
-msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
-msgstr ""
-"Erreur : valeur « --fields » « %s » n'est pas valide à cet endroit ; champs "
-"autorisés : %s"
+msgid "Error: failed to set hostname: (%d) %s"
+msgstr "Erreur : échec du paramétrage du nom d'hôte : (%d) %s"
-#: ../cli/src/network-manager.c:284
-msgid "Networking enabled"
-msgstr "Réseau activé"
+#: ../cli/src/network-manager.c:682
+#, c-format
+msgid "Error: access denied to set logging; %s"
+msgstr "Erreur : accès refusé pour définir la journalisation ; %s"
-#: ../cli/src/network-manager.c:300
+#: ../cli/src/network-manager.c:684
#, c-format
-msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
-msgstr ""
-"Erreur : paramètre « enable » non valide : « %s » ; utilisez « true » ou « false »."
+msgid "Error: %s"
+msgstr "Erreur : %s"
-#: ../cli/src/network-manager.c:310
+#: ../cli/src/network-manager.c:692
#, c-format
-msgid "Error: Sleeping status is not exported by NetworkManager."
-msgstr "Erreur : l'état de sommeil n'est pas exporté par NetworkManager."
+msgid "Error: 'general' command '%s' is not valid."
+msgstr "Erreur : commande « general » « %s » non valide."
-#: ../cli/src/network-manager.c:318
+#: ../cli/src/network-manager.c:710
#, c-format
-msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
+msgid "Error: '--fields' value '%s' is not valid here (allowed field: %s)"
msgstr ""
-"Erreur : paramètre « sleep » non valide : « %s » ; utilisez « true » ou « false »."
+"Erreur : « la valeur --fields » « %s » n'est pas valide ici (champ autorisé :"
+" %s)"
-#: ../cli/src/network-manager.c:339
-msgid "WiFi enabled"
-msgstr "WiFi activé"
-
-#: ../cli/src/network-manager.c:355
+#: ../cli/src/network-manager.c:735
#, c-format
-msgid "Error: invalid 'wifi' parameter: '%s'."
-msgstr "Erreur : paramètre « wifi » non valide : « %s »."
+msgid "Error: invalid '%s' argument: '%s' (use on/off)."
+msgstr "Erreur : argument « %s » non valide : « %s » (utilisez marche/arrêt)."
-#: ../cli/src/network-manager.c:377
-msgid "WWAN enabled"
-msgstr "WWAN activé"
+#: ../cli/src/network-manager.c:746
+msgid "Connectivity"
+msgstr "Connectivité"
-#: ../cli/src/network-manager.c:393
-#, c-format
-msgid "Error: invalid 'wwan' parameter: '%s'."
-msgstr "Erreur : paramètre « wwan » non valide : « %s »."
+#: ../cli/src/network-manager.c:758
+msgid "Networking"
+msgstr "Réseau"
-#: ../cli/src/network-manager.c:416
-msgid "WiMAX enabled"
-msgstr "WiMAX activé"
+#: ../cli/src/network-manager.c:783
+#, c-format
+msgid "Error: 'networking connectivity' command '%s' is not valid."
+msgstr "Erreur : commande « networking connectivity » « %s » non valide."
-#: ../cli/src/network-manager.c:432
+#: ../cli/src/network-manager.c:799
#, c-format
-msgid "Error: invalid 'wimax' parameter: '%s'."
-msgstr "Erreur : paramètre « wimax » non valide : « %s »."
+msgid "Error: 'networking' command '%s' is not valid."
+msgstr "Erreur : commande « networking » « %s » non valide."
-#: ../cli/src/network-manager.c:445
+#: ../cli/src/network-manager.c:825 ../cli/src/network-manager.c:845
+msgid "Radio switches"
+msgstr "Interrupteurs radio"
+
+#: ../cli/src/network-manager.c:863
+msgid "Wi-Fi radio switch"
+msgstr "Interrupteur radio Wi-Fi"
+
+#: ../cli/src/network-manager.c:879
+msgid "WWAN radio switch"
+msgstr "Interrupteur radio WWAN"
+
+#: ../cli/src/network-manager.c:896
+msgid "WiMAX radio switch"
+msgstr "Interrupteur radio Wimax"
+
+#: ../cli/src/network-manager.c:908
#, c-format
-msgid "Error: 'nm' command '%s' is not valid."
-msgstr "Erreur : commande « nm » « %s » non valide."
+msgid "Error: 'radio' command '%s' is not valid."
+msgstr "Erreur : commande « radio » « %s » non valide."
-#: ../cli/src/nmcli.c:64
+#: ../cli/src/nmcli.c:78
#, c-format
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
@@ -1208,216 +4058,800 @@ 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 ""
-"Utilisation : %s [OPTIONS] OBJET { COMMANDE | help }\n"
+"Utilisation : %s [OPTIONS] OBJECT { COMMAND | help }\n"
"\n"
"OPTIONS\n"
-" -t[erse] sortie laconique\n"
-" -p[retty] sortie formatée\n"
-" -m[ode] tabular|multiline mode de sortie\n"
-" -f[ields] <field1,field2,...>|all|common spécifie les champs à afficher\n"
-" -e[scape] yes|no échapper les séparateurs de "
-"colonnes dans les valeurs\n"
-" -n[ocheck] ne pas vérifier les versions de "
-"nmcli et NetworkManager\n"
-" -v[ersion] afficher la version du "
-"programme\n"
-" -h[elp] afficher l'aide\n"
-"\n"
-"OBJET\n"
-" nm état de NetworkManager\n"
-" con connexions de NetworkManager\n"
-" dev périphériques gérés par NetworkManager\n"
-"\n"
-
-#: ../cli/src/nmcli.c:109
+" -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:132
#, c-format
msgid "Error: Object '%s' is unknown, try 'nmcli help'."
msgstr "Erreur : objet « %s » inconnu, essayez « nmcli help »."
-#: ../cli/src/nmcli.c:139
+#: ../cli/src/nmcli.c:162
#, c-format
msgid "Error: Option '--terse' is specified the second time."
msgstr "Erreur : option « --terse » est spécifiée la seconde fois."
-#: ../cli/src/nmcli.c:144
+#: ../cli/src/nmcli.c:167
#, c-format
msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
msgstr "Erreur : option « --terse » mutuellement exclusive avec « --pretty »."
-#: ../cli/src/nmcli.c:152
+#: ../cli/src/nmcli.c:175
#, c-format
msgid "Error: Option '--pretty' is specified the second time."
msgstr "Erreur : option « --pretty » est spécifiée la seconde fois."
-#: ../cli/src/nmcli.c:157
+#: ../cli/src/nmcli.c:180
#, c-format
msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
msgstr "Erreur : option « --pretty » mutuellement exclusive avec « --terse »."
-#: ../cli/src/nmcli.c:167 ../cli/src/nmcli.c:183
+#: ../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 "Erreur : paramètre manquant pour l'option « %s »."
-#: ../cli/src/nmcli.c:176 ../cli/src/nmcli.c:192
+#: ../cli/src/nmcli.c:199 ../cli/src/nmcli.c:215
#, c-format
msgid "Error: '%s' is not valid argument for '%s' option."
-msgstr "Erreur : « %s » est n'est pas un paramètre valide pour l'option « %s »."
+msgstr ""
+"Erreur : « %s » est n'est pas un paramètre valide pour l'option « %s »."
-#: ../cli/src/nmcli.c:199
+#: ../cli/src/nmcli.c:222
#, c-format
msgid "Error: fields for '%s' options are missing."
msgstr "Erreur : les champs pour les options « %s » sont manquants."
-#: ../cli/src/nmcli.c:207
+#: ../cli/src/nmcli.c:240
+#, c-format
+msgid "Error: '%s' is not a valid timeout for '%s' option."
+msgstr ""
+"Erreur : « %s » est n'est pas un délai d'expiration valide pour l'option "
+"« %s »."
+
+#: ../cli/src/nmcli.c:247
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "outil nmcli, version %s\n"
-#: ../cli/src/nmcli.c:213
+#: ../cli/src/nmcli.c:253
#, c-format
msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
msgstr "Erreur : option « %s » inconnue, essayez « nmcli -help »."
-#: ../cli/src/nmcli.c:232
+#: ../cli/src/nmcli.c:288
#, c-format
-msgid "Caught signal %d, shutting down..."
-msgstr "Signal %d reçu, arrêt en cours..."
+msgid "\n"
+"Error: nmcli terminated by signal %d."
+msgstr "\n"
+"Erreur : nmcli interrompu par le signal %d."
-#: ../cli/src/nmcli.c:257
+#: ../cli/src/nmcli.c:318 ../src/main.c:130
+#, c-format
+msgid "Failed to set signal mask: %d"
+msgstr "Impossible de définir le masque du signal : %d"
+
+#: ../cli/src/nmcli.c:325 ../src/main.c:139
+#, c-format
+msgid "Failed to create signal handling thread: %d"
+msgstr "Échec de la création d'un thread de gestion du signal : %d"
+
+#: ../cli/src/nmcli.c:338 ../test/nm-online.c:149
+#, c-format
msgid "Error: Could not create NMClient object."
msgstr "Erreur : impossible de créer l'objet NMClient."
-#: ../cli/src/nmcli.c:273
+#: ../cli/src/nmcli.c:354
msgid "Success"
msgstr "Succès"
-#: ../cli/src/settings.c:447
+#: ../cli/src/settings.c:666
#, c-format
msgid "%d (hex-ascii-key)"
msgstr "%d (hex-ascii-key)"
-#: ../cli/src/settings.c:449
+#: ../cli/src/settings.c:668
#, c-format
msgid "%d (104/128-bit passphrase)"
msgstr "%d (phrase de passe 104/128-bit)"
-#: ../cli/src/settings.c:452
+#: ../cli/src/settings.c:671 ../cli/src/settings.c:799
#, c-format
msgid "%d (unknown)"
msgstr "%d (inconnu)"
-#: ../cli/src/settings.c:478
+#: ../cli/src/settings.c:697
msgid "0 (unknown)"
msgstr "0 (inconnu)"
-#: ../cli/src/settings.c:484
+#: ../cli/src/settings.c:703
msgid "any, "
msgstr "tous, "
-#: ../cli/src/settings.c:486
+#: ../cli/src/settings.c:705
msgid "900 MHz, "
msgstr "900 MHz, "
-#: ../cli/src/settings.c:488
+#: ../cli/src/settings.c:707
msgid "1800 MHz, "
msgstr "1800 MHz, "
-#: ../cli/src/settings.c:490
+#: ../cli/src/settings.c:709
msgid "1900 MHz, "
msgstr "1900 MHz, "
-#: ../cli/src/settings.c:492
+#: ../cli/src/settings.c:711
msgid "850 MHz, "
msgstr "850 MHz, "
-#: ../cli/src/settings.c:494
+#: ../cli/src/settings.c:713
msgid "WCDMA 3GPP UMTS 2100 MHz, "
msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../cli/src/settings.c:496
+#: ../cli/src/settings.c:715
msgid "WCDMA 3GPP UMTS 1800 MHz, "
msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../cli/src/settings.c:498
+#: ../cli/src/settings.c:717
msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../cli/src/settings.c:500
+#: ../cli/src/settings.c:719
msgid "WCDMA 3GPP UMTS 800 MHz, "
msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../cli/src/settings.c:502
+#: ../cli/src/settings.c:721
msgid "WCDMA 3GPP UMTS 850 MHz, "
msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../cli/src/settings.c:504
+#: ../cli/src/settings.c:723
msgid "WCDMA 3GPP UMTS 900 MHz, "
msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../cli/src/settings.c:506
+#: ../cli/src/settings.c:725
msgid "WCDMA 3GPP UMTS 1700 MHz, "
msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../cli/src/settings.c:508
+#: ../cli/src/settings.c:727
msgid "WCDMA 3GPP UMTS 1900 MHz, "
msgstr "WCDMA 3GPP UMTS 1900 MHz, "
-#: ../cli/src/settings.c:510
+#: ../cli/src/settings.c:729
msgid "WCDMA 3GPP UMTS 2600 MHz, "
msgstr "WCDMA 3GPP UMTS 2600 MHz, "
-#: ../cli/src/settings.c:636 ../cli/src/settings.c:835
+#: ../cli/src/settings.c:747
+msgid "0 (NONE)"
+msgstr "0 (AUCUN)"
+
+#: ../cli/src/settings.c:753
+msgid "REORDER_HEADERS, "
+msgstr "REORDER_HEADERS, "
+
+#: ../cli/src/settings.c:755
+msgid "GVRP, "
+msgstr "GVRP, "
+
+#: ../cli/src/settings.c:757
+msgid "LOOSE_BINDING, "
+msgstr "LOOSE_BINDING, "
+
+#: ../cli/src/settings.c:793
+#, c-format
+msgid "%d (disabled)"
+msgstr "%d (désactivé)"
+
+#: ../cli/src/settings.c:795
+#, c-format
+msgid "%d (enabled, prefer public IP)"
+msgstr "%d (activé, IP publique préférée)"
+
+#: ../cli/src/settings.c:797
+#, c-format
+msgid "%d (enabled, prefer temporary IP)"
+msgstr "%d (activé, IP temporaire préférée)"
+
+#: ../cli/src/settings.c:809
+msgid "0 (none)"
+msgstr "0 (aucun)"
+
+#: ../cli/src/settings.c:815
+msgid "agent-owned, "
+msgstr "appartient-à-l'agent"
+
+#: ../cli/src/settings.c:817
+msgid "not saved, "
+msgstr "non enregistré,"
+
+#: ../cli/src/settings.c:819
+msgid "not required, "
+msgstr "non requis,"
+
+#: ../cli/src/settings.c:1124
+msgid "0 (disabled)"
+msgstr "0 (désactivé)"
+
+#: ../cli/src/settings.c:1130
+msgid "enabled, "
+msgstr "activé, "
+
+#: ../cli/src/settings.c:1132
+msgid "advertise, "
+msgstr "annoncer, "
+
+#: ../cli/src/settings.c:1134
+msgid "willing, "
+msgstr "disposé, "
+
+#: ../cli/src/settings.c:1162
+msgid "-1 (unset)"
+msgstr "-1 (non-défini)"
+
+#: ../cli/src/settings.c:1270 ../cli/src/settings.c:1453
+#: ../cli/src/settings.c:1493
msgid "auto"
msgstr "auto"
-#: ../cli/src/settings.c:829 ../cli/src/settings.c:832
-#: ../cli/src/settings.c:833 ../cli/src/utils.c:176
-msgid "not set"
-msgstr "non défini"
+#: ../cli/src/settings.c:1283
+msgid "default"
+msgstr "valeur(s) par défaut"
-#: ../cli/src/utils.c:128
+#: ../cli/src/settings.c:1614
#, c-format
-msgid "field '%s' has to be alone"
-msgstr "champ « %s » doit être seul"
+msgid "Do you also want to set '%s' to '%s'? [yes]: "
+msgstr "Souhaitez-vous aussi définir « %s » sur « %s » ? [yes] : "
-#: ../cli/src/utils.c:131
+#: ../cli/src/settings.c:1616
#, c-format
-msgid "invalid field '%s'"
-msgstr "champ « %s » non valide"
+msgid "Do you also want to clear '%s'? [yes]: "
+msgstr "Souhaitez-vous aussi supprimer « %s » ? [yes] : "
-#: ../cli/src/utils.c:150
+#: ../cli/src/settings.c:1814 ../cli/src/settings.c:2069
+#: ../cli/src/settings.c:3673
#, c-format
-msgid "Option '--terse' requires specifying '--fields'"
-msgstr "L'option « --terse » requiert la spécification de « --fields »"
+msgid "'%s' is not valid"
+msgstr "« %s » n'est pas valide"
-#: ../cli/src/utils.c:154
+#: ../cli/src/settings.c:1837
#, c-format
-msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
+msgid "'%d' is not valid; use <%d-%d>"
+msgstr "« %d » n'est pas valide ; utilisez <%d-%d>"
+
+#: ../cli/src/settings.c:1859
+#, c-format
+msgid "'%u' is not valid; use <%d-%d>"
+msgstr "« %u » n'est pas valide ; utilisez <%d-%d>"
+
+#: ../cli/src/settings.c:1925
+#, c-format
+msgid "'%s' is not valid; use <option>=<value>"
+msgstr "« %s » n'est pas valide ; utilisez <option>=<value>"
+
+#: ../cli/src/settings.c:1959
+#, c-format
+msgid "index '%s' is not valid"
+msgstr "index « %s » non valide"
+
+#: ../cli/src/settings.c:1964
+msgid "no item to remove"
+msgstr "aucun élément à supprimer"
+
+#: ../cli/src/settings.c:1968
+#, c-format
+msgid "index '%d' is not in range <0-%d>"
+msgstr "l'index « %d » ne se trouve pas dans la plage <0-%d>"
+
+#: ../cli/src/settings.c:1983
+#, c-format
+msgid "invalid option '%s'"
+msgstr "option « %s » non valide"
+
+#: ../cli/src/settings.c:1985
+msgid "missing option"
+msgstr "option manquante"
+
+#: ../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'est pas un numéro valide (ou est hors de portée)"
+
+#: ../cli/src/settings.c:2089
+#, c-format
+msgid "'%s' is not a valid Ethernet MAC"
+msgstr "« %s » n'est pas une adresse Ethernet MAC valide"
+
+#: ../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'est pas un nom d'interface valide"
+
+#: ../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'est pas un numéro"
+
+#: ../cli/src/settings.c:2185
+#, c-format
+msgid "'%s' is not a valid hex character"
+msgstr "« %s » n'est pas un caractère hex valide"
+
+#: ../cli/src/settings.c:2215
+#, c-format
+msgid "'%s' is not a valid MAC"
+msgstr "« %s » n'est pas une adresse MAC valide"
+
+#: ../cli/src/settings.c:2252 ../libnm-util/nm-setting-connection.c:715
+#, c-format
+msgid "'%s' is not a valid UUID"
+msgstr "« %s » n'est pas un UUID valide"
+
+#: ../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 ""
+"Saisissez une liste des permissions utilisateur. Ceci est une liste des noms "
+"d'utilisateur formatée comme suit :\n"
+" [user:]<user name 1>, [user:]<user name 2>,...\n"
+"Les éléments peuvent être séparés par des virgules ou des espaces.\n"
+"\n"
+"Exemple : 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'est pas un maître valide ; utilisez ifname ou un UUID de connexion"
+
+#: ../cli/src/settings.c:2453
+msgid "private key password not provided"
+msgstr "le mot de passe de la clé privée n'a pas été fourni"
+
+#: ../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 ""
+"Saisissez le chemin d'accès vers une clé privée et le mot de passe de la clé "
+"(s'il n'a pas déjà été défini) :\n"
+" <file path> [<password>]\n"
+"Exemple : /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 ""
+"Saisissez les octets en tant que liste de valeurs hexadécimales.\n"
+"Deux formats sont acceptés :\n"
+"(a) une chaîne d'entiers hexadécimaux, dans laquelle deux entiers "
+"représentent un octet\n"
+"(b) une liste séparée par des espaces d'octets écrits en tant qu'entiers "
+"hexadécimaux (avec un préfixe optionnel 0x/0X, ainsi qu'un 0 le précédant "
+"optionnellement).\n"
+"\n"
+"Exemples : 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 ""
+"Saisissez une liste d'options de liaison formatée comme suit :\n"
+" option = <value>, option = <value>,... \n"
+"Options valides : %s\n"
+"« mode » peut être fourni en tant que nom ou numéro :\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"
+"Exemple : mode=2,miimon=120\n"
+
+#: ../cli/src/settings.c:2727
+#, c-format
+msgid "'%s' is not a valid InfiniBand MAC"
+msgstr "« %s » n'est pas une adresse InfiniBand MAC valide"
+
+#: ../cli/src/settings.c:2765
+#, c-format
+msgid "'%s' is not a valid IBoIP P_Key"
+msgstr "« %s » n'est pas une clé IBoIP P_Key valide"
+
+#: ../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 ""
+"Saisissez une liste d'adresses IPv4 de serveurs DNS.\n"
+"\n"
+"Exemple : 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'est pas valide (utilisez 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 ""
+"Saisissez une liste des adresses IPv4 formatées comme suit :\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"Le préfixe manquant est considéré comme un préfixe de 32.\n"
+"\n"
+"Exemple : 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'est pas valide (utilisez 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 ""
+"Saisissez une liste des routes IPv4 formatée comme suit :\n"
+" ip/[prefix] next-hop [metric],...\n"
+"Le préfixe manquant est considéré comme un préfixe de 32.\n"
+"La métrique manquante est considérée comme une métrique de 0.\n"
+"\n"
+"Exemple : 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 ""
+"Saisissez une liste des adresses IPv6 de serveurs DNS. Si la méthode de "
+"configuration IPv6 est « auto », ces serveurs DNS seront ajoutés à ceux "
+"(s'il y en a) qui sont retourné(s) par la configuration automatique. Les "
+"serveurs DNS ne peuvent pas être utilisés avec les méthodes de configuration "
+"IPv6 « shared » ou « link-local », car il n'y a pas de réseau en amont. Dans "
+"toutes les autres méthodes de configuration IPv6, ces serveurs DNS sont "
+"utilisés comme les seuls serveurs DNS pour cette connexion.\n"
+"\n"
+"Exemple : 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 ""
+"Saisissez une liste des adresses IPv6 formatées comme suit :\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"Le préfixe manquant est considéré comme un préfixe de 128.\n"
+"\n"
+"Exemple : 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'est pas valide (utilisez <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 ""
+"Saisissez une liste des routes IPv6 formatées comme suit :\n"
+" ip/[prefix] next-hop [metric],...\n"
+"Le préfixe manquant est considéré comme un préfixe de 128.\n"
+"La métrique manquante est considérée comme une métrique de 0.\n"
+"\n"
+"Exemple : 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'est pas valide ; utilisez 0, 1, ou 2"
+
+#: ../cli/src/settings.c:3236
+#, c-format
+msgid "'%s' is not a valid channel; use <1-13>"
+msgstr "« %s » n'est pas un canal valide ; utilisez <1-13>"
+
+#: ../cli/src/settings.c:3257
+#, c-format
+msgid "'%s' is not valid; use [e, o, n]"
+msgstr "« %s » n'est pas valide ; utilisez [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 peut accepter les données de configuration JSON directes ainsi qu'un "
+"nom de fichier contenant la configuration. Dans ce dernier cas, le fichier "
+"est lu et le contenu est inséré dans cette propriété.\n"
+"\n"
+"Exemples : 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 "aucune priorité à supprimer"
+
+#: ../cli/src/settings.c:3329
+#, c-format
+msgid "index '%d' is not in the range of <0-%d>"
+msgstr "l'index « %d » ne se trouve pas dans la plage <0-%d>"
+
+#: ../cli/src/settings.c:3444
+#, c-format
+msgid "'%s' is not valid; 3 strings should be provided"
+msgstr "« %s » n'est pas valide ; 3 chaînes doivent être fournies"
+
+#: ../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 ""
+"Saisissez une liste de trois canaux (séparés par des virgules ou espaces).\n"
+"\n"
+"Exemple : 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 ""
-"L'option « --terse » requiert des valeurs d'options « --fields » spécifiques, pas "
-"« %s »"
+"Saisissez une liste d'options S/390 formatées comme suit :\n"
+" option = <value>, option = <value>,...\n"
+"Options valides : %s\n"
+
+#: ../cli/src/settings.c:3559
+#, c-format
+msgid "'%s' is not a valid channel"
+msgstr "« %s » n'est pas un canal valide"
+
+#: ../cli/src/settings.c:3565
+#, c-format
+msgid "'%ld' is not a valid channel"
+msgstr "« %ld » n'est pas un canal valide"
+
+#: ../cli/src/settings.c:3668 ../cli/src/settings.c:3671
+#, c-format
+msgid "WEP key is guessed to be of '%s'\n"
+msgstr "La clé WEP semble être de « %s »\n"
+
+#: ../cli/src/settings.c:3695
+#, c-format
+msgid "'%s' not among [0 (unknown), 1 (key), 2 (passphrase)]"
+msgstr "« %s » n'est pas parmi [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 ""
+"Saisissez le type des clés WEP. Les valeurs acceptées sont : 0 ou inconnu, 1 "
+"ou clé et 2 ou phrase de passe.\n"
+
+#: ../cli/src/settings.c:3728
+#, c-format
+msgid "'%s' is not a valid PSK"
+msgstr "« %s » n'est pas un PSK valide"
+
+#: ../cli/src/settings.c:3772
+#, c-format
+msgid "'%s' is not a valid DCB flag"
+msgstr "« %s » n'est pas un indicateur DCB valide"
+
+#: ../cli/src/settings.c:3795
+#, c-format
+msgid "'%s' is not a DCB app priority"
+msgstr "« %s » n'est pas une priorité d'application DCB"
+
+#: ../cli/src/settings.c:3821
+msgid "must contain 8 comma-separated numbers"
+msgstr "doit contenir 8 numéros séparés par des virgules"
+
+#: ../cli/src/settings.c:3838
+#, c-format
+msgid "'%s' not a number between 0 and %u (inclusive) or %u"
+msgstr "« %s » n'est pas un numéro entre 0 et %u (inclus) ou %u"
+
+#: ../cli/src/settings.c:3841
+#, c-format
+msgid "'%s' not a number between 0 and %u (inclusive)"
+msgstr "« %s » n'est pas un numéro entre 0 et %u (inclus)"
+
+#: ../cli/src/settings.c:3863
+#, c-format
+msgid "Warning: changes will have no effect until '%s' includes 1 (enabled)\n"
+"\n"
+msgstr ""
+"Avertissement : les changements ne prendront pas effet tant que « %s » "
+"n'inclue pas 1 (activé)\n"
+"\n"
+
+#: ../cli/src/settings.c:3916
+#, c-format
+msgid "bandwidth percentages must total 100%%"
+msgstr "le total des pourcentages doit totaliser 100%%"
+
+#: ../cli/src/settings.c:5594
+msgid "don't know how to get the property value"
+msgstr "je ne sais pas comment obtenir la valeur de la propriété"
+
+#: ../cli/src/settings.c:5647 ../cli/src/settings.c:5687
+msgid "the property can't be changed"
+msgstr "la propriété ne peut pas être modifiée"
+
+#: ../cli/src/settings.c:5791
+msgid "[NM property description]"
+msgstr "[description de la propriété NM]"
+
+#: ../cli/src/settings.c:5797
+msgid "[nmcli specific description]"
+msgstr "[description spécifique de nmcli]"
+
+#: ../cli/src/utils.c:111
+#, c-format
+msgid "Error: value for '%s' argument is required."
+msgstr "Erreur : la valeur de l'argument « %s » est requise."
+
+#: ../cli/src/utils.c:136
+#, c-format
+msgid "Error: Argument '%s' was expected, but '%s' provided."
+msgstr "Erreur : l'argument « %s » était attendu, mais « %s » a été fourni."
+
+#: ../cli/src/utils.c:139
+#, c-format
+msgid "Error: Unexpected argument '%s'"
+msgstr "Erreur : argument « %s » inattendu"
+
+#: ../cli/src/utils.c:189
+#, c-format
+msgid "Error converting IP4 address '0x%X' to text form"
+msgstr "Erreur lors de la conversion de l'adresse IP4 « 0x%X » en texte"
+
+#: ../cli/src/utils.c:217
+#, c-format
+msgid "Error converting IP6 address '%s' to text form"
+msgstr "Erreur lors de la conversion de l'adresse IP6 « %s » en texte"
+
+#: ../cli/src/utils.c:393
+#, c-format
+msgid "'%s' is not valid; use [%s] or [%s]"
+msgstr "« %s » n'est pas valide ; utilisez [%s] ou [%s]"
+
+#: ../cli/src/utils.c:475
+#, c-format
+msgid "'%s' is ambiguous (%s x %s)"
+msgstr "« %s » est ambigu (%s x %s)"
+
+#: ../cli/src/utils.c:487
+#, c-format
+msgid "missing name, try one of [%s]"
+msgstr "nom manquant, essayez l'un de [%s]"
+
+#: ../cli/src/utils.c:718
+#, c-format
+msgid "field '%s' has to be alone"
+msgstr "champ « %s » doit être seul"
-#: ../cli/src/utils.c:334
+#: ../cli/src/utils.c:720
#, c-format
-msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus"
-msgstr "Erreur : impossible de créer le proxy d'objet D-Bus pour org.freedesktop.DBus"
+msgid "invalid field '%s'; allowed fields: %s"
+msgstr "champ « %s » non valide ; champs autorisés : %s"
-#: ../cli/src/utils.c:342
+#: ../cli/src/utils.c:747
+msgid "Option '--terse' requires specifying '--fields'"
+msgstr "L'option « --terse » requiert la spécification de « --fields »"
+
+#: ../cli/src/utils.c:751
#, c-format
-msgid "Error: NameHasOwner request failed: %s"
-msgstr "Erreur : la requête NameHasOwner a échoué : %s"
+msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
+msgstr ""
+"L'option « --terse » requiert des valeurs d'options « --fields » "
+"spécifiques, pas « %s »"
-#: ../cli/src/utils.c:387
+#: ../cli/src/utils.c:1070
#, c-format
msgid ""
"Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --"
@@ -1426,15 +4860,15 @@ msgstr ""
"Avertissement : les versions de nmcli (%s) et de NetworkManager (%s) ne "
"correspondent pas. Utilisez --nocheck pour supprimer cet avertissement.\n"
-#: ../cli/src/utils.c:396
+#: ../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 ""
-"Erreur : les versions de nmcli (%s) et de NetworkManager (%s) ne correspondent "
-"pas. L'exécution peut être forcée avec --nocheck, mais les résultats sont "
-"imprévisibles."
+"Erreur : les versions de nmcli (%s) et de NetworkManager (%s) ne "
+"correspondent pas. L'exécution peut être forcée avec --nocheck, mais les "
+"résultats sont imprévisibles."
#: ../libnm-util/crypto.c:133
#, c-format
@@ -1446,116 +4880,87 @@ msgstr "Le fichier de clé PEM n'a pas de balise de fin « %s »."
msgid "Doesn't look like a PEM private key file."
msgstr "Cela ne semble pas être un fichier de clé privée PEM."
-#: ../libnm-util/crypto.c:154
-#, c-format
-msgid "Not enough memory to store PEM file data."
-msgstr "Mémoire insuffisante pour contenir les données du fichier PEM."
-
-#: ../libnm-util/crypto.c:170
+#: ../libnm-util/crypto.c:163
#, c-format
msgid "Malformed PEM file: Proc-Type was not first tag."
msgstr "Fichier PEM incorrect : Proc-Type n'est pas la première balise."
-#: ../libnm-util/crypto.c:178
+#: ../libnm-util/crypto.c:171
#, c-format
msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
msgstr "Fichier PEM incorrect : étiquette Proc-Type « %s » inconnue."
-#: ../libnm-util/crypto.c:188
+#: ../libnm-util/crypto.c:181
#, c-format
msgid "Malformed PEM file: DEK-Info was not the second tag."
msgstr "Fichier PEM incorrect : DEK-Info n'est pas la deuxième balise."
-#: ../libnm-util/crypto.c:199
+#: ../libnm-util/crypto.c:192
#, c-format
msgid "Malformed PEM file: no IV found in DEK-Info tag."
msgstr "Fichier PEM incorrect : aucun IV trouvé dans la balise 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 "Fichier PEM incorrect : format IV invalide dans la balise DEK-Info."
+msgstr "Fichier PEM incorrect : format IV non valide dans la balise DEK-Info."
-#: ../libnm-util/crypto.c:219
+#: ../libnm-util/crypto.c:212
#, c-format
msgid "Malformed PEM file: unknown private key cipher '%s'."
msgstr "Fichier PEM incorrect : chiffre de clé privée « %s » inconnu."
-#: ../libnm-util/crypto.c:238
+#: ../libnm-util/crypto.c:231
#, c-format
msgid "Could not decode private key."
msgstr "Impossible de décoder la clé privée."
-#: ../libnm-util/crypto.c:284
+#: ../libnm-util/crypto.c:283
msgid "Failed to find expected PKCS#8 start tag."
msgstr "Impossible de trouver la balise initiale PKCS#8 attendue."
-#: ../libnm-util/crypto.c:292
+#: ../libnm-util/crypto.c:291
#, c-format
msgid "Failed to find expected PKCS#8 end tag '%s'."
msgstr "Impossible de trouver la balise terminale PKCS#8 attendue (« %s »)."
-#: ../libnm-util/crypto.c:312
-msgid "Not enough memory to store private key data."
-msgstr "Mémoire insuffisante pour contenir les données de la clé privée."
-
-#: ../libnm-util/crypto.c:317
+#: ../libnm-util/crypto.c:310
msgid "Failed to decode PKCS#8 private key."
msgstr "Le décodage de la clé privée PKCS#8 a échoué."
-#: ../libnm-util/crypto.c:339 ../libnm-util/crypto.c:625
-#, c-format
-msgid "Not enough memory to store certificate data."
-msgstr "Mémoire insuffisante pour contenir les données du certificat."
-
-#: ../libnm-util/crypto.c:365
+#: ../libnm-util/crypto.c:352
#, c-format
msgid "IV must be an even number of bytes in length."
msgstr "La longueur en octets de IV doit être paire."
-#: ../libnm-util/crypto.c:374
-#, c-format
-msgid "Not enough memory to store the IV."
-msgstr "Mémoire insuffisante pour contenir le IV."
-
-#: ../libnm-util/crypto.c:385
+#: ../libnm-util/crypto.c:366
#, c-format
msgid "IV contains non-hexadecimal digits."
msgstr "Le IV contient des chiffres non hexadécimaux."
-#: ../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 "Le chiffre « %s » de la clé privée est inconnu."
-#: ../libnm-util/crypto.c:432
-#, c-format
-msgid "Not enough memory to decrypt private key."
-msgstr "Mémoire insuffisante pour déchiffrer la clé privée."
-
-#: ../libnm-util/crypto.c:497
-#, c-format
-msgid "Not enough memory to store decrypted private key."
-msgstr "Mémoire insuffisante pour contenir la clé privée déchiffrée."
-
-#: ../libnm-util/crypto.c:542
+#: ../libnm-util/crypto.c:511
#, c-format
msgid "Unable to determine private key type."
msgstr "Impossible de déterminer le type de la clé privée."
-#: ../libnm-util/crypto.c:597
+#: ../libnm-util/crypto.c:566
#, c-format
msgid "PEM certificate had no start tag '%s'."
msgstr "Le certificat PEM n'a pas de balise initiale « %s »."
-#: ../libnm-util/crypto.c:606
+#: ../libnm-util/crypto.c:575
#, c-format
msgid "PEM certificate had no end tag '%s'."
msgstr "Le certificat PEM n'a pas de balise terminale « %s »."
-#: ../libnm-util/crypto.c:630
+#: ../libnm-util/crypto.c:593
#, c-format
msgid "Failed to decode certificate."
msgstr "Impossible de décoder le certificat."
@@ -1572,105 +4977,95 @@ msgstr "L'initialisation du moteur MD5 a échoué : %s / %s."
#: ../libnm-util/crypto_gnutls.c:155
#, c-format
msgid "Invalid IV length (must be at least %zd)."
-msgstr "Longueur IV invalide (minimum %zd)."
-
-#: ../libnm-util/crypto_gnutls.c:164 ../libnm-util/crypto_nss.c:184
-#, c-format
-msgid "Not enough memory for decrypted key buffer."
-msgstr "Mémoire insuffisante pour le tampon de clé déchiffrée."
+msgstr "Longueur IV non valide (minimum %zd)."
-#: ../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 ""
"L'initialisation du contexte du chiffre de déchiffrement a échoué : %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 ""
"La définition de la clé symétrique pour le déchiffrement a échoué : %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 "La définition de IV pour le déchiffrement a échoué : %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 "Le déchiffrement de la clé privée a échoué : %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 ""
"Le déchiffrement de la clé privée a échoué : longueur de remplissage "
"inattendue."
-#: ../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 "Le déchiffrement de la clé privée a échoué."
-#: ../libnm-util/crypto_gnutls.c:285 ../libnm-util/crypto_nss.c:352
-#, c-format
-msgid "Could not allocate memory for encrypting."
-msgstr "Allocation de mémoire pour chiffrement impossible."
-
-#: ../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 ""
"L'initialisation du contexte du cryptage de chiffrement a échoué : %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 ""
"La définition de la clé symétrique pour le chiffrement a échoué : %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 "La définition de IV pour le chiffrement a échoué : %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 "Le chiffrement des données a échoué : %s / %s."
-#: ../libnm-util/crypto_gnutls.c:361
+#: ../libnm-util/crypto_gnutls.c:349
#, c-format
msgid "Error initializing certificate data: %s"
msgstr "Erreur lors de l'initialisation des données du certificat : %s"
-#: ../libnm-util/crypto_gnutls.c:383
+#: ../libnm-util/crypto_gnutls.c:371
#, c-format
msgid "Couldn't decode certificate: %s"
msgstr "Impossible de décoder le certificat : %s"
-#: ../libnm-util/crypto_gnutls.c:407
+#: ../libnm-util/crypto_gnutls.c:395
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %s"
msgstr "L'initialisation du décodeur PKCS#12 a échoué : %s"
-#: ../libnm-util/crypto_gnutls.c:420
+#: ../libnm-util/crypto_gnutls.c:408
#, c-format
msgid "Couldn't decode PKCS#12 file: %s"
msgstr "Impossible de décoder le fichier 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 "Impossible de vérifier le fichier 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 "L'initialisation du décodeur PKCS#8 a échoué : %s"
-#: ../libnm-util/crypto_gnutls.c:483
+#: ../libnm-util/crypto_gnutls.c:471
#, c-format
msgid "Couldn't decode PKCS#8 file: %s"
msgstr "Impossible de décoder le fichier PKCS#8 : %s"
@@ -1688,173 +5083,501 @@ msgstr "L'initialisation du contexte MD5 a échoué : %d."
#: ../libnm-util/crypto_nss.c:175
#, c-format
msgid "Invalid IV length (must be at least %d)."
-msgstr "Longueur IV invalide (minimum %d)."
+msgstr "Longueur IV non valide (minimum %d)."
-#: ../libnm-util/crypto_nss.c:192
+#: ../libnm-util/crypto_nss.c:186
#, c-format
msgid "Failed to initialize the decryption cipher slot."
msgstr ""
"L'initialisation de l'emplacement du chiffre de déchiffrement a échoué."
-#: ../libnm-util/crypto_nss.c:202
+#: ../libnm-util/crypto_nss.c:196
#, c-format
msgid "Failed to set symmetric key for decryption."
msgstr "La définition de la clé symétrique pour le déchiffrement a échoué."
-#: ../libnm-util/crypto_nss.c:212
+#: ../libnm-util/crypto_nss.c:206
#, c-format
msgid "Failed to set IV for decryption."
msgstr "La définition de IV pour le déchiffrement a échoué."
-#: ../libnm-util/crypto_nss.c:220
+#: ../libnm-util/crypto_nss.c:214
#, c-format
msgid "Failed to initialize the decryption context."
msgstr "L'initialisation du contexte de déchiffrement a échoué."
-#: ../libnm-util/crypto_nss.c:233
+#: ../libnm-util/crypto_nss.c:227
#, c-format
msgid "Failed to decrypt the private key: %d."
msgstr "Le déchiffrement de la clé privée a échoué : %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 ""
"Le déchiffrement de la clé privée a échoué : les données déchiffrées sont "
"trop longues."
-#: ../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 "La finalisation du déchiffrement de la clé privée a échoué : %d."
-#: ../libnm-util/crypto_nss.c:360
+#: ../libnm-util/crypto_nss.c:348
#, c-format
msgid "Failed to initialize the encryption cipher slot."
-msgstr "L'initialisation de l'emplacement du cryptage de chiffrement a échoué."
+msgstr ""
+"L'initialisation de l'emplacement du cryptage de chiffrement a échoué."
-#: ../libnm-util/crypto_nss.c:368
+#: ../libnm-util/crypto_nss.c:356
#, c-format
msgid "Failed to set symmetric key for encryption."
msgstr "La définition de la clé symétrique pour le chiffrement a échoué."
-#: ../libnm-util/crypto_nss.c:376
+#: ../libnm-util/crypto_nss.c:364
#, c-format
msgid "Failed to set IV for encryption."
msgstr "La définition de IV pour le chiffrement a échoué."
-#: ../libnm-util/crypto_nss.c:384
+#: ../libnm-util/crypto_nss.c:372
#, c-format
msgid "Failed to initialize the encryption context."
msgstr "L'initialisation du contexte de chiffrement a échoué."
-#: ../libnm-util/crypto_nss.c:392
+#: ../libnm-util/crypto_nss.c:380
#, c-format
msgid "Failed to encrypt: %d."
msgstr "Le chiffrement a échoué : %d."
-#: ../libnm-util/crypto_nss.c:400
+#: ../libnm-util/crypto_nss.c:388
#, c-format
msgid "Unexpected amount of data after encrypting."
msgstr "Quantité de données inattendue après chiffrement."
-#: ../libnm-util/crypto_nss.c:443
+#: ../libnm-util/crypto_nss.c:431
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "Impossible de décoder le certificat : %d"
-#: ../libnm-util/crypto_nss.c:478
+#: ../libnm-util/crypto_nss.c:466
#, c-format
msgid "Couldn't convert password to UCS2: %d"
msgstr "Impossible de convertir le mot de passe en 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 "Impossible d'initialiser le décodeur 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 "Impossible de décoder le fichier 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 "Impossible de vérifier le fichier PKCS#12 : %d"
-#: ../libnm-util/crypto_nss.c:568
+#: ../libnm-util/crypto_nss.c:556
msgid "Could not generate random data."
msgstr "Impossible de générer des données aléatoires."
-#: ../libnm-util/nm-utils.c:2000
+#: ../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 "la propriété est manquante"
+
+#: ../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 propriété est vide"
+
+#: ../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 "doit correspondre à la propriété « %s » pour 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 propriété n'est pas valide"
+
+#: ../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 » n'est pas une valeur valide pour la propriété"
+
+#: ../libnm-util/nm-setting-bluetooth.c:188
+#, c-format
+msgid "requires '%s' or '%s' setting"
+msgstr "requiert un paramètre « %s » ou « %s »"
+
+#: ../libnm-util/nm-setting-bond.c:518
+#, c-format
+msgid "invalid option '%s' or its value '%s'"
+msgstr "l'option « %s » ou sa valeur « %s » est non valide"
+
+#: ../libnm-util/nm-setting-bond.c:537
+#, c-format
+msgid "only one of '%s' and '%s' can be set"
+msgstr "seul l'un de « %s » et « %s » peut être défini"
+
+#: ../libnm-util/nm-setting-bond.c:548
+#, c-format
+msgid "mandatory option '%s' is missing"
+msgstr "l'option obligatoire « %s » est manquante"
+
+#: ../libnm-util/nm-setting-bond.c:557
+#, c-format
+msgid "'%s' is not a valid value for '%s'"
+msgstr "« %s » n'est pas une valeur valide pour « %s »"
+
+#: ../libnm-util/nm-setting-bond.c:570
+#, c-format
+msgid "'%s=%s' is incompatible with '%s > 0'"
+msgstr "« %s=%s » est incompatible avec « %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'est pas un nom d'interface valide pour l'option « %s »"
+
+#: ../libnm-util/nm-setting-bond.c:593
+#, c-format
+msgid "'%s' option is only valid for '%s=%s'"
+msgstr "l'option « %s » est uniquement valide pour « %s=%s »"
+
+#: ../libnm-util/nm-setting-bond.c:606
#, c-format
-msgid "Not enough memory to make encryption key."
-msgstr "Mémoire insuffisante pour créer une clé de chiffrement."
+msgid "'%s=%s' is not a valid configuration for '%s'"
+msgstr "« %s=%s » n'est pas une configuration valide pour « %s »"
-#: ../libnm-util/nm-utils.c:2110
-msgid "Could not allocate memory for PEM file creation."
-msgstr "Allocation de mémoire impossible pour la création du fichier 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 "l'option « %s » nécessite que l'option « %s » soit définie"
-#: ../libnm-util/nm-utils.c:2122
+#: ../libnm-util/nm-setting-bond.c:659
#, c-format
-msgid "Could not allocate memory for writing IV to PEM file."
+msgid "'%s' option is empty"
+msgstr "l'option « %s » est vide"
+
+#: ../libnm-util/nm-setting-bond.c:671
+#, c-format
+msgid "'%s' is not a valid IPv4 address for '%s' option"
+msgstr "« %s » n'est pas une adresse IPv4 valide pour l'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 ""
-"Allocation de mémoire impossible pour l'écriture de IV dans le fichier PEM."
+"« %d » n'est pas une valeur valide pour la propriété (et devrait être <= %d)"
+
+#: ../libnm-util/nm-setting-bridge.c:251
+#, c-format
+msgid "value '%d' is out of range <%d-%d>"
+msgstr "La valeur « %d » est hors de portée <%d-%d>"
+
+#: ../libnm-util/nm-setting-cdma.c:170
+msgid "property is empty'"
+msgstr "la propriété est vide"
+
+#: ../libnm-util/nm-setting-connection.c:734
+#, c-format
+msgid "'%s' doesn't match the virtual interface name '%s'"
+msgstr "« %s » ne correspond pas au nom de l'interface virtuelle « %s »"
+
+#: ../libnm-util/nm-setting-connection.c:780
+#, c-format
+msgid "requires presence of '%s' setting in the connection"
+msgstr "requiert la présence du paramètre « %s » dans la connexion"
+
+#: ../libnm-util/nm-setting-connection.c:802
+msgid "IPv4 configuration is not allowed for slave"
+msgstr "la configuration IPv4 n'est pas autorisée pour l'esclave"
+
+#: ../libnm-util/nm-setting-connection.c:815
+msgid "IPv6 configuration is not allowed for slave"
+msgstr "la configuration IPv6 n'est pas autorisée pour l'esclave"
+
+#: ../libnm-util/nm-setting-dcb.c:595
+msgid "flags invalid"
+msgstr "marqueurs non valides"
+
+#: ../libnm-util/nm-setting-dcb.c:604
+msgid "flags invalid - disabled"
+msgstr "marqueurs non valides - désactivé"
+
+#: ../libnm-util/nm-setting-dcb.c:630 ../libnm-util/nm-setting-dcb.c:679
+msgid "property invalid (not enabled)"
+msgstr "la propriété n'est pas valide (non activée)"
+
+#: ../libnm-util/nm-setting-dcb.c:639
+msgid "element invalid"
+msgstr "élément non valide"
+
+#: ../libnm-util/nm-setting-dcb.c:654
+msgid "sum not 100%"
+msgstr "la somme n'est pas à 100%"
-#: ../libnm-util/nm-utils.c:2134
+#: ../libnm-util/nm-setting-dcb.c:688 ../libnm-util/nm-setting-dcb.c:720
+msgid "property invalid"
+msgstr "propriété non valide"
+
+#: ../libnm-util/nm-setting-dcb.c:710
+msgid "property missing"
+msgstr "propriété manquante"
+
+#: ../libnm-util/nm-setting-gsm.c:297
+#, c-format
+msgid "property value '%s' is empty or too long (>64)"
+msgstr "la valeur de la propriété « %s » est vide ou trop longue (>64)"
+
+#: ../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 ""
-"Allocation de mémoire impossible pour l'écriture de la clé chiffrée dans le "
-"fichier PEM."
+"« %s » contient un(des) caractère(s) non valide(s) (utilisez [A-Za-z._-])"
-#: ../libnm-util/nm-utils.c:2153
+#: ../libnm-util/nm-setting-gsm.c:364
#, c-format
-msgid "Could not allocate memory for PEM file data."
-msgstr "Allocation de mémoire impossible pour les données du fichier PEM."
+msgid "'%s' length is invalid (should be 5 or 6 digits)"
+msgstr ""
+"la longueur de « %s » n'est pas valide (devrait faire 5 ou 6 chiffres)"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1
-msgid "Allow control of network connections"
-msgstr "Autoriser le contrôle des connexions réseau"
+#: ../libnm-util/nm-setting-infiniband.c:228
+msgid "not a valid interface name"
+msgstr "nom d'interface non valide"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:2
-msgid "Connection sharing via a protected WiFi network"
-msgstr "Partage de connexion via un réseau WiFi protégé"
+#: ../libnm-util/nm-setting-infiniband.c:236
+msgid "Must specify a P_Key if specifying parent"
+msgstr "P_Key doit être spécifié si le parent est spécifié"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:3
-msgid "Connection sharing via an open WiFi network"
-msgstr "Partage de connexion via un réseau WiFi ouvert"
+#: ../libnm-util/nm-setting-infiniband.c:246
+msgid "InfiniBand P_Key connection did not specify parent interface name"
+msgstr ""
+"La connexion InfiniBand P_Key ne spécifie pas le nom de l'interface parent"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
-msgid "Enable or disable WiFi devices"
-msgstr "Activer ou désactiver des périphériques WiFi"
+#: ../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 "cette propriété n'est pas autorisée pour « %s=%s »"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
-msgid "Enable or disable WiMAX mobile broadband devices"
-msgstr "Activer ou désactiver des périphériques WiMAX à large bande"
+#: ../libnm-util/nm-setting-ip4-config.c:789
+#, c-format
+msgid "%d. IPv4 address is invalid"
+msgstr "%d. L'adresse IPv4 n'est pas valide"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
-msgid "Enable or disable mobile broadband devices"
-msgstr "Activer ou désactiver des périphériques mobiles à large bande"
+#: ../libnm-util/nm-setting-ip4-config.c:799
+#, c-format
+msgid "%d. IPv4 address has invalid prefix"
+msgstr "%d. Le préfixe de l'adresse IPv4 n'est pas valide"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7
-msgid "Enable or disable system networking"
-msgstr "Activer ou désactiver le réseau système"
+#: ../libnm-util/nm-setting-ip4-config.c:815
+#, c-format
+msgid "%d. route is invalid"
+msgstr "%d. La route n'est pas valide"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8
-msgid "Modify network connections for all users"
-msgstr "Modifier les connexions réseau pour tous les utilisateurs"
+#: ../libnm-util/nm-setting-ip4-config.c:825
+#, c-format
+msgid "%d. route has invalid prefix"
+msgstr "%d. Le préfixe de la route n'est pas valide"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9
-msgid "Modify persistent system hostname"
-msgstr "Modifier le nom d'hôte persistant du système"
+#: ../libnm-util/nm-setting-ip6-config.c:708
+#, c-format
+msgid "'%s' not allowed for %s=%s"
+msgstr "« %s » n'est pas autorisé pour %s=%s"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10
-msgid "Modify personal network connections"
-msgstr "Modifier les connexions du réseau personnel"
+#: ../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 "La longueur SSID est hors de portée <1-32> octets"
+
+#: ../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'est pas un canal valide"
+
+#: ../libnm-util/nm-setting-ppp.c:390
+#, c-format
+msgid "'%d' is out of valid range <128-16384>"
+msgstr "« %d » est hors de la portée valide <128-16384>"
+
+#: ../libnm-util/nm-setting-ppp.c:403
+#, c-format
+msgid "setting this property requires non-zero '%s' property"
+msgstr "définir cette propriété requiert une propriété non-nulle « %s »"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11
+#: ../libnm-util/nm-setting-vlan.c:497
+#, c-format
+msgid "'%s' value doesn't match '%s=%s'"
+msgstr "la valeur « %s » ne correspond pas à « %s=%s »"
+
+#: ../libnm-util/nm-setting-vlan.c:508
+#, c-format
+msgid "'%s' is neither an UUID nor an interface name"
+msgstr "« %s » n'est pas un UUID, ni un nom d'interface"
+
+#: ../libnm-util/nm-setting-vlan.c:521
+#, c-format
+msgid "property is not specified and neither is '%s:%s'"
+msgstr "la propriété n'est pas spécifiée et n'est pas « %s:%s »"
+
+#: ../libnm-util/nm-setting-vlan.c:534
+msgid "flags are invalid"
+msgstr "les marqueurs ne sont pas valides"
+
+#: ../libnm-util/nm-setting-wired.c:562
+#, c-format
+msgid "'%s' is not a valid ethernet port value"
+msgstr "« %s » n'est pas une valeur de port Ethernet valide"
+
+#: ../libnm-util/nm-setting-wired.c:572
+#, c-format
+msgid "'%s' is not a valid duplex value"
+msgstr "« %s » n'est pas une valeur duplex valide"
+
+#: ../libnm-util/nm-setting-wired.c:582 ../libnm-util/nm-setting-wired.c:640
+msgid "is not a valid MAC address"
+msgstr "n'est pas une adresse MAC valide"
+
+#: ../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 » n'est pas une adresse MAC valide"
+
+#: ../libnm-util/nm-setting-wired.c:629
+#, c-format
+msgid "invalid '%s' or its value '%s'"
+msgstr "« %s » ou sa valeur « %s » n'est pas valide"
+
+#: ../libnm-util/nm-setting-wireless-security.c:816
+#, c-format
+msgid "'%s' security requires '%s=%s'"
+msgstr "la sécurité « %s » requiert « %s=%s »"
+
+#: ../libnm-util/nm-setting-wireless-security.c:845
+#, c-format
+msgid "'%s' security requires '%s' setting presence"
+msgstr "la sécurité « %s » requiert la présence du paramètre « %s »"
+
+#: ../libnm-util/nm-setting-wireless-security.c:866
+#, c-format
+msgid "'%d' value is out of range <0-3>"
+msgstr "La valeur « %d » est hors de portée <0-3>"
+
+#: ../libnm-util/nm-setting-wireless-security.c:963
+#, c-format
+msgid "'%s' connections require '%s' in this property"
+msgstr "les connexions « %s » requièrent que « %s » soit dans cette propriété"
+
+#: ../libnm-util/nm-setting-wireless-security.c:993
+#, c-format
+msgid "'%s' can only be used with '%s=%s' (WEP)"
+msgstr "« %s » peut uniquement être utilisé avec « %s=%s » (WEP)"
+
+#: ../libnm-util/nm-setting-wireless.c:715
+#, c-format
+msgid "'%s' is not a valid Wi-Fi mode"
+msgstr "« %s » n'est pas un mode Wi-Fi valide"
+
+#: ../libnm-util/nm-setting-wireless.c:725
+#, c-format
+msgid "'%s' is not a valid band"
+msgstr "« %s » n'est pas une bande valide"
+
+#: ../libnm-util/nm-setting-wireless.c:735
+#, c-format
+msgid "requires setting '%s' property"
+msgstr "requiert de paramétrer la propriété « %s »"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:1
+msgid "Enable or disable system networking"
+msgstr "Activer ou désactiver le réseau système"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:2
+msgid "System policy prevents enabling or disabling system networking"
+msgstr ""
+"La politique du système empêche l'activation ou la désactivation du réseau "
+"du système"
+
+#: ../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)"
@@ -1862,119 +5585,279 @@ msgstr ""
"Mettre NetworkManager en veille ou le réveiller (utile uniquement pour la "
"gestion d'énergie du système)"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12
-msgid "System policy prevents control of network connections"
-msgstr "La politique du système empêche le contrôle des connexions réseau"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:4
+msgid "System policy prevents putting NetworkManager to sleep or waking it up"
+msgstr ""
+"La politique du système empêche la mise en veille et le réveil de "
+"NetworkManager"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:5
+msgid "Enable or disable WiFi devices"
+msgstr "Activer ou désactiver des périphériques WiFi"
-#: ../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 ""
"La politique du système empêche l'activation ou la désactivation de "
"périphériques WiFi"
-#: ../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 "Activer ou désactiver des périphériques mobiles à large bande"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:8
+msgid "System policy prevents enabling or disabling mobile broadband devices"
+msgstr ""
+"La politique du système empêche l'activation ou la désactivation de "
+"périphériques mobiles à large bande"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:9
+msgid "Enable or disable WiMAX mobile broadband devices"
+msgstr "Activer ou désactiver des périphériques WiMAX à large bande"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:10
msgid ""
"System policy prevents enabling or disabling WiMAX mobile broadband devices"
msgstr ""
"La politique du système empêche l'activation ou la désactivation de "
"périphériques WiMAX à large bande"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:15
-msgid "System policy prevents enabling or disabling mobile broadband devices"
-msgstr ""
-"La politique du système empêche l'activation ou la désactivation de "
-"périphériques mobiles à large bande"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:11
+msgid "Allow control of network connections"
+msgstr "Autoriser le contrôle des connexions réseau"
-#: ../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:12
+msgid "System policy prevents control of network connections"
+msgstr "La politique du système empêche le contrôle des connexions réseau"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:13
+msgid "Connection sharing via a protected WiFi network"
+msgstr "Partage de connexion via un réseau WiFi protégé"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:14
+msgid ""
+"System policy prevents sharing connections via a protected WiFi network"
msgstr ""
-"La politique du système empêche l'activation ou la désactivation du réseau du "
-"système"
+"La politique du système empêche tout partage des connexions via un réseau "
+"WiFi protégé"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:17
-msgid "System policy prevents modification of network settings for all users"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:15
+msgid "Connection sharing via an open WiFi network"
+msgstr "Partage de connexion via un réseau WiFi ouvert"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:16
+msgid "System policy prevents sharing connections via an open WiFi network"
msgstr ""
-"La politique du système empêche toute modification des paramètres réseau pour "
-"tous les utilisateurs"
+"La politique du système empêche tout partage des connexions via un réseau "
+"WiFi ouvert"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:17
+msgid "Modify personal network connections"
+msgstr "Modifier les connexions du réseau personnel"
-#: ../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 ""
"La politique du système empêche toute modification des paramètres réseau "
"personnels"
-#: ../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 "Modifier les connexions réseau pour tous les utilisateurs"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:20
+msgid "System policy prevents modification of network settings for all users"
+msgstr ""
+"La politique du système empêche toute modification des paramètres réseau "
+"pour tous les utilisateurs"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:21
+msgid "Modify persistent system hostname"
+msgstr "Modifier le nom d'hôte persistant du système"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:22
msgid "System policy prevents modification of the persistent system hostname"
msgstr ""
"La politique du système empêche toute modification du nom d'hôte persistant "
"du système"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:20
-msgid "System policy prevents putting NetworkManager to sleep or waking it up"
+#: ../src/main.c:154
+#, c-format
+msgid "Opening %s failed: %s\n"
+msgstr "Échec de l'ouverture de %s : %s\n"
+
+#: ../src/main.c:160
+#, c-format
+msgid "Writing to %s failed: %s\n"
+msgstr "Échec de l'écriture sur %s : %s\n"
+
+#: ../src/main.c:165
+#, c-format
+msgid "Closing %s failed: %s\n"
+msgstr "Échec de la fermeture de %s : %s\n"
+
+#: ../src/main.c:208
+#, c-format
+msgid "NetworkManager is already running (pid %ld)\n"
+msgstr "NetworkManager est déjà en cours d'exécution (pid %ld)\n"
+
+#: ../src/main.c:329
+msgid "Print NetworkManager version and exit"
+msgstr "Imprimer la version de NetworkManager et quitter"
+
+#: ../src/main.c:330
+msgid "Don't become a daemon"
+msgstr "Ne pas devenir un démon"
+
+#: ../src/main.c:331
+msgid "Don't become a daemon, and log to stderr"
+msgstr "Ne pas devenir un démon et se connecter à stderr"
+
+#: ../src/main.c:332
+#, c-format
+msgid "Log level: one of [%s]"
+msgstr "Niveau du journal : un de [%s]"
+
+#: ../src/main.c:334
+#, c-format
+msgid "Log domains separated by ',': any combination of [%s]"
msgstr ""
-"La politique du système empêche la mise en veille et le réveil de NetworkManager"
+"Domaine de journalisation séparés par des virgules « , » : toute combinaison "
+"de [%s]"
+
+#: ../src/main.c:336
+msgid "Make all warnings fatal"
+msgstr "Rendre tous les avertissements fatals"
+
+#: ../src/main.c:337
+msgid "Specify the location of a PID file"
+msgstr "Spécifier l'emplacement d'un fichier PID"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:21
-msgid "System policy prevents sharing connections via a protected WiFi network"
+#: ../src/main.c:337
+msgid "filename"
+msgstr "nom du fichier"
+
+#: ../src/main.c:338
+msgid "State file location"
+msgstr "Indiquez l'emplacement du fichier"
+
+#: ../src/main.c:338
+msgid "/path/to/state.file"
+msgstr "/path/to/state.file"
+
+#: ../src/main.c:364
+#, c-format
+msgid "GModules are not supported on your platform!\n"
+msgstr "Les GModules ne sont pas pris en charge sur votre plateforme !\n"
+
+#: ../src/main.c:369
+#, c-format
+msgid "You must be root to run NetworkManager!\n"
msgstr ""
-"La politique du système empêche tout partage des connexions via un réseau "
-"WiFi protégé"
+"Vous devez être connecté en tant que super-utilisateur pour exécuter "
+"NetworkManager !\n"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:22
-msgid "System policy prevents sharing connections via an open WiFi network"
+#: ../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 ""
-"La politique du système empêche tout partage des connexions via un réseau "
-"WiFi ouvert"
+"NetworkManager contrôle toutes les connexions réseau et choisit "
+"automatiquement\n"
+"la meilleure connexion à utiliser. NetworkManager permet aussi à "
+"l'utilisateur\n"
+"de spécifier des points d'accès sans fil avec lesquels les cartes sans fil "
+"de\n"
+"l'ordinateur devraient s'associer."
-#: ../src/main.c:530
+#: ../src/main.c:398
#, c-format
msgid "Invalid option. Please use --help to see a list of valid options.\n"
msgstr ""
-"Option non valide. Utilisez --help pour afficher une liste d'options "
-"valides.\n"
+"Option non valide. Utilisez --help pour afficher une liste d'options valides."
+"\n"
-#: ../src/main.c:611
+#: ../src/main.c:412
#, c-format
msgid "%s. Please use --help to see a list of valid options.\n"
msgstr "%s. Utilisez --help pour afficher une liste d'options valides.\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:62
+#: ../src/main.c:417
+#, c-format
+msgid "Ignoring unrecognized log domain(s) '%s' passed on command line.\n"
+msgstr ""
+"Ignore le(s) domaine(s) de journalisation non reconnus « %s » sur la ligne "
+"de commande.\n"
+
+#: ../src/main.c:468
+#, c-format
+msgid "Failed to read configuration: (%d) %s\n"
+msgstr "Échec de la lecture de la configuration : (%d) %s\n"
+
+#: ../src/main.c:482
+#, c-format
+msgid "Error in configuration file: %s.\n"
+msgstr "Erreur dans le fichier de configuration : %s.\n"
+
+#: ../src/main.c:487
+#, c-format
+msgid "Ignoring unrecognized log domain(s) '%s' from config files.\n"
+msgstr ""
+"Ignore le(s) domaine(s) de journalisation non reconnus « %s » des fichiers "
+"de configuration.\n"
+
+#: ../src/main.c:495
+#, c-format
+msgid "State file %s parsing failed: (%d) %s\n"
+msgstr "Indiquer que l'analyse du fichier %s a échoué : (%d) %s\n"
+
+#: ../src/main.c:508
+#, c-format
+msgid "Could not daemonize: %s [error %u]\n"
+msgstr "Impossible de démoniser : %s [error %u]\n"
+
+#: ../src/bluez-manager/nm-bluez-device.c:198
+#, c-format
+msgid "%s Network"
+msgstr "Réseau %s"
+
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:143
msgid "# Created by NetworkManager\n"
msgstr "# Créé par 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"
+msgid "# Merged from %s\n"
"\n"
-msgstr ""
-"# Fusionné depuis %s\n"
+msgstr "# Fusionné depuis %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 "aucun client DHCP utilisable n'a pu être trouvé."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:293
+#: ../src/dhcp-manager/nm-dhcp-manager.c:322
msgid "'dhclient' could be found."
msgstr "« dhclient » a été trouvé."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:303
+#: ../src/dhcp-manager/nm-dhcp-manager.c:332
msgid "'dhcpcd' could be found."
msgstr "« dhcpcd » a été trouvé."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:311
+#: ../src/dhcp-manager/nm-dhcp-manager.c:340
#, c-format
msgid "unsupported DHCP client '%s'"
msgstr "client DHCP « %s » non pris en charge"
-#: ../src/dns-manager/nm-dns-manager.c:376
+#: ../src/dns-manager/nm-dns-manager.c:401
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr ""
"NOTE : il se peut que le solveur libc ne prenne pas en charge plus de 3 "
"serveurs de noms."
-#: ../src/dns-manager/nm-dns-manager.c:378
+#: ../src/dns-manager/nm-dns-manager.c:403
msgid "The nameservers listed below may not be recognized."
msgstr "Les serveurs de noms listés ci-dessous peuvent ne pas être reconnus."
@@ -1983,98 +5866,981 @@ msgstr "Les serveurs de noms listés ci-dessous peuvent ne pas être reconnus."
msgid "Unknown log level '%s'"
msgstr "Niveau de journalisation « %s » inconnu"
-#: ../src/logging/nm-logging.c:174
+#: ../src/logging/nm-logging.c:226
#, c-format
msgid "Unknown log domain '%s'"
msgstr "Domaine de journalisation « %s » inconnu"
-#: ../src/modem-manager/nm-modem-cdma.c:296 ../src/nm-device-bt.c:355
+#: ../src/config/nm-config.c:271
+msgid "Config file location"
+msgstr "Emplacement du fichier de configuration"
+
+#: ../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 "Emplacement du répertoire de configuration"
+
+#: ../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 "Liste des plugins séparée par des virgules « , »"
+
+#: ../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 "Adresse http(s) pour vérifier la connectivité internet"
+
+#: ../src/config/nm-config.c:278
+msgid "The interval between connectivity checks (in seconds)"
+msgstr "Intervalle entre les vérifications de connectivité (en secondes)"
+
+#: ../src/config/nm-config.c:279
+msgid "The expected start of the response"
+msgstr "Début prévu de la réponse"
+
+#: ../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 "Connexion GSM %d"
+
+#: ../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 "Connexion CDMA %d"
-#: ../src/modem-manager/nm-modem-gsm.c:499 ../src/nm-device-bt.c:351
+#: ../src/devices/nm-device-bond.c:146 ../tui/nm-editor-utils.c:204
#, c-format
-msgid "GSM connection %d"
-msgstr "Connexion GSM %d"
+msgid "Bond connection %d"
+msgstr "Connexion de liaison %d"
+
+#: ../src/devices/nm-device-adsl.c:150
+#, c-format
+msgid "ADSL connection %d"
+msgstr "Connexion ADSL %d"
-#: ../src/nm-device-bt.c:326
+#: ../src/devices/nm-device-bridge.c:143 ../tui/nm-editor-utils.c:214
+#, c-format
+msgid "Bridge connection %d"
+msgstr "Connexion de pont %d"
+
+#: ../src/devices/nm-device-bt.c:308
#, c-format
msgid "PAN connection %d"
msgstr "Connexion PAN %d"
-#: ../src/nm-device-bt.c:359
+#: ../src/devices/nm-device-bt.c:341
#, c-format
msgid "DUN connection %d"
msgstr "Connexion DUN %d"
-#: ../src/nm-device-ethernet.c:1724
+#: ../src/devices/nm-device-ethernet.c:1254
#, c-format
msgid "PPPoE connection %d"
msgstr "Connexion PPPoE %d"
-#: ../src/nm-device-ethernet.c:1724 ../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 "Connexion filaire %d"
-#: ../src/nm-device-olpc-mesh.c:393
+#: ../src/devices/nm-device-infiniband.c:270 ../tui/nm-editor-utils.c:177
+#, c-format
+msgid "InfiniBand connection %d"
+msgstr "Connexion InfiniBand %d"
+
+#: ../src/devices/nm-device-olpc-mesh.c:242
#, c-format
msgid "Mesh %d"
msgstr "Réseau maillé %d"
-#: ../src/nm-manager.c:670
+#: ../src/devices/nm-device-team.c:158 ../tui/nm-editor-utils.c:223
+#, c-format
+msgid "Team connection %d"
+msgstr "Connexion de l'équipe %d"
+
+#: ../src/devices/nm-device-vlan.c:255 ../tui/nm-editor-utils.c:231
+#, c-format
+msgid "VLAN connection %d"
+msgstr "Connexion VLAN %d"
+
+#: ../src/nm-manager.c:3420 ../tui/nm-editor-utils.c:246
#, c-format
msgid "VPN connection %d"
msgstr "Connexion VPN %d"
-#: ../src/nm-netlink-monitor.c:101 ../src/nm-netlink-monitor.c:234
-#: ../src/nm-netlink-monitor.c:661
+#: ../src/nm-netlink-monitor.c:219
+msgid "error occurred while waiting for data on socket"
+msgstr ""
+"une erreur est survenue pendant l'attente de données sur le connecteur"
+
+#: ../src/nm-netlink-monitor.c:240
#, c-format
msgid "error processing netlink message: %s"
msgstr "erreur lors du traitement du message netlink : %s"
-#: ../src/nm-netlink-monitor.c:216
-msgid "error occurred while waiting for data on socket"
-msgstr "une erreur est survenue pendant l'attente de données sur le connecteur"
-
-#: ../src/nm-netlink-monitor.c:260
+#: ../src/nm-netlink-monitor.c:264
#, c-format
msgid "unable to connect to netlink for monitoring link status: %s"
msgstr ""
-"impossible de se connecter à netlink pour surveiller l'état de la "
-"connexion : %s"
+"impossible de se connecter à netlink pour surveiller l'état de la connexion :"
+" %s"
-#: ../src/nm-netlink-monitor.c:271
+#: ../src/nm-netlink-monitor.c:275
#, c-format
msgid "unable to enable netlink handle credential passing: %s"
msgstr "impossible d'activer le passage de crédentiels de gestion netlink: %s"
-#: ../src/nm-netlink-monitor.c:294 ../src/nm-netlink-monitor.c:354
+#: ../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 ""
"impossible d'allouer un gestionnaire netlink pour surveiller l'état de la "
"connexion : %s"
-#: ../src/nm-netlink-monitor.c:379
-#, c-format
-msgid "unable to allocate netlink link cache for monitoring link status: %s"
-msgstr ""
-"impossible d'allouer un cache de connexion netlink pour surveiller l'état de "
-"la connexion : %s"
-
-#: ../src/nm-netlink-monitor.c:506
+#: ../src/nm-netlink-monitor.c:469
#, c-format
msgid "unable to join netlink group: %s"
msgstr "impossible de joindre le groupe netlink : %s"
-#: ../src/nm-netlink-monitor.c:637 ../src/nm-netlink-monitor.c:650
-#, c-format
-msgid "error updating link cache: %s"
-msgstr "erreur lors de la mise à jour du cache de connexion : %s"
+#: ../src/nm-sleep-monitor-systemd.c:116
+msgid "NetworkManager needs to turn off networks"
+msgstr "NetworkManager doit fermer les réseaux"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:3575
-#: ../src/settings/plugins/ifnet/connection_parser.c:51
+#: ../src/settings/plugins/ifcfg-rh/reader.c:115
msgid "System"
msgstr "Système"
+
+#: ../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 "Liaison"
+
+#: ../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 "Équipe"
+
+#: ../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 "Pont"
+
+#: ../test/nm-online.c:73
+#, c-format
+msgid "\rConnecting"
+msgstr "\rConnexion"
+
+#: ../test/nm-online.c:104
+msgid ""
+"Time to wait for a connection, in seconds (without the option, default value "
+"is 30)"
+msgstr ""
+"Temps d'attente de connexion en secondes (sans l'option, la valeur par "
+"défaut est 30)"
+
+#: ../test/nm-online.c:105
+msgid "Exit immediately if NetworkManager is not running"
+msgstr ""
+"Quitter immédiatement si NetworkManager n'est pas en cours d'exécution"
+
+#: ../test/nm-online.c:106
+msgid "Don't print anything"
+msgstr "Ne rien imprimer"
+
+#: ../test/nm-online.c:124
+msgid ""
+"Waits for NetworkManager to finish activating startup network connections."
+msgstr ""
+"Attend que NetworkManager finisse d'activer les connexion réseau de "
+"démarrage."
+
+#: ../test/nm-online.c:131 ../test/nm-online.c:141
+msgid "Invalid option. Please use --help to see a list of valid options."
+msgstr ""
+"Option invalide. Veuillez utiliser --help pour afficher une liste d'options "
+"valides."
+
+#: ../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 "Valider"
+
+#: ../tui/newt/nmt-newt-utils.c:316 ../tui/newt/nmt-newt-utils.c:348
+#, c-format
+msgid "Could not create temporary file: %s"
+msgstr "Impossible de créer le fichier temporaire : %s"
+
+#: ../tui/newt/nmt-newt-utils.c:354
+#, c-format
+msgid "Editor failed: %s"
+msgstr "L'éditeur a échoué : %s"
+
+#: ../tui/newt/nmt-newt-utils.c:360
+#, c-format
+msgid "Could not re-read file: %s"
+msgstr "Impossible de relire le fichier : %s"
+
+#: ../tui/nm-editor-utils.c:160
+#, c-format
+msgid "Ethernet connection %d"
+msgstr "Connexion Ethernet %d"
+
+#: ../tui/nm-editor-utils.c:168
+#, c-format
+msgid "Wi-Fi connection %d"
+msgstr "Connexion Wi-Fi %d"
+
+#: ../tui/nm-editor-utils.c:182 ../tui/nm-ui-utils.c:345
+msgid "Mobile Broadband"
+msgstr "Haut débit mobile"
+
+#: ../tui/nm-editor-utils.c:185
+#, c-format
+msgid "Mobile broadband connection %d"
+msgstr "Connexion haut débit 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 "Connexion DSL %d"
+
+#: ../tui/nm-ui-utils.c:316 ../tui/nm-ui-utils.c:385
+msgid "Wired"
+msgstr "Filaire"
+
+#: ../tui/nm-ui-utils.c:339
+msgid "Bluetooth"
+msgstr "Bluetooth"
+
+#: ../tui/nm-ui-utils.c:341
+msgid "OLPC Mesh"
+msgstr "Maillage 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 "Sélectionner..."
+
+#: ../tui/nmt-edit-connection-list.c:129
+msgid "Add"
+msgstr "Ajouter"
+
+#: ../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 "Modifier..."
+
+#: ../tui/nmt-edit-connection-list.c:135 ../tui/nmtui-edit.c:471
+msgid "Delete"
+msgstr "Supprimer"
+
+#: ../tui/nmt-editor.c:81
+#, c-format
+msgid "Could not create editor for connection '%s' of type '%s'."
+msgstr ""
+"Impossible de créer un éditeur pour la connexion « %s » de type « %s »."
+
+#: ../tui/nmt-editor.c:85
+#, c-format
+msgid "Could not create editor for invalid connection '%s'."
+msgstr "Impossible de créer un éditeur pour la connexion invalide « %s »."
+
+#: ../tui/nmt-editor.c:95
+msgid "Edit connection"
+msgstr "Modifier la connexion"
+
+#: ../tui/nmt-editor.c:134
+#, c-format
+msgid "Error saving connection: %s"
+msgstr "Erreur lors de l'enregistrement de la connexion : %s"
+
+#: ../tui/nmt-editor.c:144
+#, c-format
+msgid "Unable to save connection: %s"
+msgstr "Impossible d'enregistrer la connexion : %s"
+
+#: ../tui/nmt-editor.c:158
+#, c-format
+msgid "Unable to add new connection: %s"
+msgstr "Impossible d'ajouter une nouvelle connexion : %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 "Annuler"
+
+#: ../tui/nmt-mtu-entry.c:86
+msgid "(default)"
+msgstr "(par défaut)"
+
+#: ../tui/nmt-mtu-entry.c:88 ../tui/nmt-mtu-entry.c:119
+msgid "bytes"
+msgstr "octets"
+
+#: ../tui/nmt-page-bond.c:88
+msgid "Round-robin"
+msgstr "Round-robin"
+
+#: ../tui/nmt-page-bond.c:89
+msgid "Active Backup"
+msgstr "Active Backup"
+
+#: ../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 (recommandé)"
+
+#: ../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 "Esclaves"
+
+#: ../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 "Principal"
+
+#: ../tui/nmt-page-bond.c:383
+msgid "Link monitoring"
+msgstr "Surveillance du lien"
+
+#: ../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 "Fréquence de la surveillance"
+
+#: ../tui/nmt-page-bond.c:397
+msgid "Link up delay"
+msgstr "Lier le délai"
+
+#: ../tui/nmt-page-bond.c:404
+msgid "Link down delay"
+msgstr "Défaire la liaison du délai"
+
+#: ../tui/nmt-page-bond.c:417
+msgid "ARP targets"
+msgstr "Cibles 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 "Priorité"
+
+#: ../tui/nmt-page-bridge-port.c:75
+msgid "Path cost"
+msgstr "Coût du chemin"
+
+#: ../tui/nmt-page-bridge-port.c:77
+msgid "Hairpin mode"
+msgstr "Mode 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 "secondes"
+
+#: ../tui/nmt-page-bridge.c:97
+msgid "Aging time"
+msgstr "Durée de vieillissement"
+
+#: ../tui/nmt-page-bridge.c:99
+msgid "Enable STP (Spanning Tree Protocol)"
+msgstr "Activer le protocole STP (Spanning Tree Protocol)"
+
+#: ../tui/nmt-page-bridge.c:122
+msgid "Forward delay"
+msgstr "Délai de réacheminement"
+
+#: ../tui/nmt-page-bridge.c:132
+msgid "Hello time"
+msgstr "Durée Hello"
+
+#: ../tui/nmt-page-bridge.c:142
+msgid "Max age"
+msgstr "Age maximum"
+
+#: ../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 "Adresse MAC clonée"
+
+#: ../tui/nmt-page-infiniband.c:40
+msgid "INFINIBAND"
+msgstr "INFINIBAND"
+
+#: ../tui/nmt-page-infiniband.c:51
+msgid "Datagram"
+msgstr "Datagramme"
+
+#: ../tui/nmt-page-infiniband.c:52
+msgid "Connected"
+msgstr "Connecté"
+
+#: ../tui/nmt-page-infiniband.c:84
+msgid "Transport mode"
+msgstr "Mode de transport"
+
+#: ../tui/nmt-page-ip4.c:41
+msgid "Disabled"
+msgstr "Désactivé"
+
+#: ../tui/nmt-page-ip4.c:42 ../tui/nmt-page-ip6.c:42
+msgid "Automatic"
+msgstr "Automatique"
+
+#: ../tui/nmt-page-ip4.c:43 ../tui/nmt-page-ip6.c:44
+msgid "Link-Local"
+msgstr "Lien-Local"
+
+#: ../tui/nmt-page-ip4.c:44 ../tui/nmt-page-ip6.c:45
+msgid "Manual"
+msgstr "Manuel"
+
+#: ../tui/nmt-page-ip4.c:45
+msgid "Shared"
+msgstr "Partagé"
+
+#: ../tui/nmt-page-ip4.c:54
+msgid "IPv4 CONFIGURATION"
+msgstr "CONFIGURATION IPv4"
+
+#: ../tui/nmt-page-ip4.c:100 ../tui/nmt-page-ip6.c:100
+msgid "(No custom routes)"
+msgstr "(aucune route personnalisée)"
+
+#: ../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] "Une route personnalisée"
+msgstr[1] "%d routes personnalisées"
+
+#: ../tui/nmt-page-ip4.c:141 ../tui/nmt-page-ip6.c:141
+msgid "Addresses"
+msgstr "Adresses"
+
+#: ../tui/nmt-page-ip4.c:147 ../tui/nmt-page-ip6.c:147
+msgid "Gateway"
+msgstr "Passerelle"
+
+#: ../tui/nmt-page-ip4.c:153 ../tui/nmt-page-ip6.c:153
+msgid "DNS servers"
+msgstr "Serveurs DNS"
+
+#: ../tui/nmt-page-ip4.c:159 ../tui/nmt-page-ip6.c:159
+msgid "Search domains"
+msgstr "Domaines de recherche"
+
+#: ../tui/nmt-page-ip4.c:174 ../tui/nmt-page-ip6.c:172
+msgid "Routing"
+msgstr "Routage"
+
+#: ../tui/nmt-page-ip4.c:176 ../tui/nmt-page-ip6.c:174
+msgid "Never use this network for default route"
+msgstr "Ne jamais utiliser ce réseau comme route par défaut"
+
+#: ../tui/nmt-page-ip4.c:184
+msgid "Require IPv4 addressing for this connection"
+msgstr "Requiert l'adressage IPv4 pour cette connexion"
+
+#: ../tui/nmt-page-ip6.c:41
+msgid "Ignore"
+msgstr "Ignorer"
+
+#: ../tui/nmt-page-ip6.c:43
+msgid "Automatic (DHCP-only)"
+msgstr "Automatique (DHCP uniquement)"
+
+#: ../tui/nmt-page-ip6.c:54
+msgid "IPv6 CONFIGURATION"
+msgstr "CONFIGURATION IPv6"
+
+#: ../tui/nmt-page-ip6.c:182
+msgid "Require IPv6 addressing for this connection"
+msgstr "Requiert l'adressage IPv6 pour cette connexion"
+
+#: ../tui/nmt-page-main.c:134
+msgid "Hide"
+msgstr "Masquer"
+
+#: ../tui/nmt-page-main.c:134
+msgid "Show"
+msgstr "Afficher"
+
+#: ../tui/nmt-page-main.c:181
+msgid "Profile name"
+msgstr "Nom du profil"
+
+#: ../tui/nmt-page-main.c:188
+msgid "Device"
+msgstr "Périphérique"
+
+#: ../tui/nmt-page-main.c:252
+msgid "Automatically connect"
+msgstr "Connecter automatiquement"
+
+#: ../tui/nmt-page-main.c:258
+msgid "Available to all users"
+msgstr "Disponible à tous les utilisateurs"
+
+#: ../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 "Configuration JSON"
+
+#: ../tui/nmt-page-team.c:51
+msgid "TEAM"
+msgstr "TEAM"
+
+#: ../tui/nmt-page-vlan.c:109
+msgid "Parent"
+msgstr "Parent"
+
+#: ../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 "Point d'accès"
+
+#: ../tui/nmt-page-wifi.c:71
+msgid "Ad-Hoc Network"
+msgstr "Réseau Ad-Hoc"
+
+#: ../tui/nmt-page-wifi.c:76
+msgctxt "Wi-Fi"
+msgid "Automatic"
+msgstr "Automatique"
+
+#: ../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 "Aucun"
+
+#: ../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 "Clé WEP 40/128-bit (Hex ou ASCII)"
+
+#: ../tui/nmt-page-wifi.c:89
+msgid "WEP 128-bit Passphrase"
+msgstr "Phrase de passe WEP 128-bit "
+
+#: ../tui/nmt-page-wifi.c:90
+msgid "Dynamic WEP (802.1x)"
+msgstr "WEP Dynamique (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 (par défaut)"
+
+#: ../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 "Système ouvert"
+
+#: ../tui/nmt-page-wifi.c:105
+msgid "Shared Key"
+msgstr "Clé partagée"
+
+#: ../tui/nmt-page-wifi.c:253
+msgid "Channel"
+msgstr "Canal"
+
+#: ../tui/nmt-page-wifi.c:258
+msgid "Security"
+msgstr "Sécurité"
+
+#: ../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 "Mot de passe"
+
+#: ../tui/nmt-page-wifi.c:279
+msgid "(No support for wpa-enterprise yet...)"
+msgstr "(Aucune prise en charge de wpa-enterprise pour le moment...)"
+
+#: ../tui/nmt-page-wifi.c:286 ../tui/nmt-secret-agent.c:265
+msgid "Key"
+msgstr "Clé"
+
+#: ../tui/nmt-page-wifi.c:289 ../tui/nmt-page-wifi.c:308
+msgid "WEP index"
+msgstr "Index WEP "
+
+#: ../tui/nmt-page-wifi.c:297 ../tui/nmt-page-wifi.c:316
+msgid "Authentication"
+msgstr "Authentification"
+
+#: ../tui/nmt-page-wifi.c:322
+msgid "(No support for dynamic-wep yet...)"
+msgstr "(Aucune prise en charge de dynamic-wep pour le moment...)"
+
+#: ../tui/nmt-page-wifi.c:329 ../tui/nmt-secret-agent.c:209
+#: ../tui/nmt-secret-agent.c:304
+msgid "Username"
+msgstr "Nom d'utilisateur : "
+
+#: ../tui/nmt-password-fields.c:130
+msgid "Ask for this password every time"
+msgstr "Demander ce mot de passe à chaque fois"
+
+#: ../tui/nmt-password-fields.c:131
+msgid "Show password"
+msgstr "Afficher le mot de passe"
+
+#: ../tui/nmt-route-table.c:219
+msgid "Destination"
+msgstr "Destination"
+
+#: ../tui/nmt-route-table.c:219
+msgid "Prefix"
+msgstr "Préfixe"
+
+#: ../tui/nmt-route-table.c:228
+msgid "Next Hop"
+msgstr "Hop suivant"
+
+#: ../tui/nmt-route-table.c:236
+msgid "Metric"
+msgstr "Métrique"
+
+#: ../tui/nmt-route-table.c:256
+msgid "No custom routes are defined."
+msgstr "Aucune route personnalisée n'est définie."
+
+#: ../tui/nmt-secret-agent.c:223
+msgid "Identity"
+msgstr "Identité"
+
+#: ../tui/nmt-secret-agent.c:228
+msgid "Private key password"
+msgstr "Mot de passe de la clé privée"
+
+#: ../tui/nmt-secret-agent.c:309
+msgid "Service"
+msgstr "Service"
+
+#: ../tui/nmt-secret-agent.c:340
+msgid "Authentication required by wireless network"
+msgstr "L'authentification est requise par le réseau sans fil"
+
+#: ../tui/nmt-secret-agent.c:341
+#, c-format
+msgid ""
+"Passwords or encryption keys are required to access the wireless network "
+"'%s'."
+msgstr ""
+"Il faut un mot de passe ou une clé de chiffrement pour accéder au réseau "
+"sans fil « %s »"
+
+#: ../tui/nmt-secret-agent.c:349
+msgid "Wired 802.1X authentication"
+msgstr "Authentification filaire 802.1X"
+
+#: ../tui/nmt-secret-agent.c:352
+msgid "Network name"
+msgstr "Nom du réseau"
+
+#: ../tui/nmt-secret-agent.c:359
+msgid "DSL authentication"
+msgstr "Authentification DSL"
+
+#: ../tui/nmt-secret-agent.c:367
+msgid "PIN code required"
+msgstr "Code PIN requis"
+
+#: ../tui/nmt-secret-agent.c:368
+msgid "PIN code is needed for the mobile broadband device"
+msgstr "Un code PIN est nécessaire pour les périphériques à haut débit mobile"
+
+#: ../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 "Mot de passe du réseau haut débit mobile"
+
+#: ../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 "Un mot de passe est requis pour se connecter à « %s »."
+
+#: ../tui/nmt-slave-list.c:138
+msgid "Select the type of slave connection you wish to add."
+msgstr "Sélectionnez le type de connexion esclave que vous souhaitez ajouter."
+
+#: ../tui/nmt-widget-list.c:142
+msgid "Add..."
+msgstr "Ajouter..."
+
+#: ../tui/nmt-widget-list.c:205
+msgid "Remove"
+msgstr "Supprimer"
+
+#: ../tui/nmtui-connect.c:82
+msgid "Activation failed"
+msgstr "Échec de l'activation"
+
+#: ../tui/nmtui-connect.c:134
+msgid "Connecting..."
+msgstr "Connexion..."
+
+#: ../tui/nmtui-connect.c:159
+#, c-format
+msgid "Could not activate connection: %s"
+msgstr "Impossible d'activer la connexion : « %s »"
+
+#: ../tui/nmtui-connect.c:218 ../tui/nmtui-connect.c:274
+msgid "Activate"
+msgstr "Activer"
+
+#: ../tui/nmtui-connect.c:220
+msgid "Deactivate"
+msgstr "Désactiver"
+
+#: ../tui/nmtui-connect.c:279 ../tui/nmtui-edit.c:102 ../tui/nmtui.c:114
+msgid "Quit"
+msgstr "Quitter"
+
+#: ../tui/nmtui-connect.c:304
+#, c-format
+msgid "No such connection '%s'"
+msgstr "Aucune connexion « %s »"
+
+#: ../tui/nmtui-connect.c:306
+msgid "Connection is already active"
+msgstr "La connexion est déjà active"
+
+#: ../tui/nmtui-edit.c:209
+msgid "Create"
+msgstr "Créer"
+
+#: ../tui/nmtui-edit.c:350
+msgid "Select the type of connection you wish to create."
+msgstr "Sélectionnez le type de connexion que vous souhaitez créer."
+
+#: ../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 ""
+"Si vous êtes en train de créer un VPN et que la connexion VPN que vous "
+"souhaitez créer n'apparaît pas dans la liste, il se peut que le plugin VPN "
+"installé ne soit pas le le bon. "
+
+#: ../tui/nmtui-edit.c:390 ../tui/nmtui-edit.c:406
+msgid "New Connection"
+msgstr "Nouvelle connexion"
+
+#: ../tui/nmtui-edit.c:443
+#, c-format
+msgid "Unable to delete connection: %s"
+msgstr "Impossible de supprimer la connexion : %s"
+
+#: ../tui/nmtui-edit.c:472
+#, c-format
+msgid "Are you sure you want to delete the connection '%s'?"
+msgstr "Êtes-vous sûr de vouloir supprimer la connexion « %s » ?"
+
+#: ../tui/nmtui-edit.c:486
+#, c-format
+msgid "Could not delete connection: %s"
+msgstr "Impossible de supprimer la connexion : %s"
+
+#: ../tui/nmtui-hostname.c:47
+msgid "Set Hostname"
+msgstr "Définir le nom d'hôte"
+
+#: ../tui/nmtui-hostname.c:55
+msgid "Hostname"
+msgstr "Nom d'hôte"
+
+#: ../tui/nmtui-hostname.c:114
+#, c-format
+msgid "Set hostname to '%s'"
+msgstr "Définir le nom d'hôte sur « %s »"
+
+#: ../tui/nmtui-hostname.c:116
+#, c-format
+msgid "Unable to set hostname: %s"
+msgstr "Impossible de définir le nom d'hôte : %s"
+
+#: ../tui/nmtui.c:59 ../tui/nmtui.c:62
+msgid "connection"
+msgstr "connexion"
+
+#: ../tui/nmtui.c:60
+msgid "Edit a connection"
+msgstr "Modifier une connexion"
+
+#: ../tui/nmtui.c:63
+msgid "Activate a connection"
+msgstr "Activer une connexion"
+
+#: ../tui/nmtui.c:65
+msgid "new hostname"
+msgstr "nouveau nom d'hôte"
+
+#: ../tui/nmtui.c:66
+msgid "Set system hostname"
+msgstr "Définir le nom d'hôte du système"
+
+#: ../tui/nmtui.c:89
+msgid "NetworkManager TUI"
+msgstr "NetworkManager TUI"
+
+#: ../tui/nmtui.c:97
+msgid "Please select an option"
+msgstr "Veuillez sélectionner une option"
+
+#: ../tui/nmtui.c:154
+msgid "Usage"
+msgstr "Utilisation"
+
+#: ../tui/nmtui.c:221
+msgid "Could not parse arguments"
+msgstr "Impossible d'analyser les arguments"
+
+#: ../tui/nmtui.c:229
+msgid "NetworkManager is not running."
+msgstr "NetworkManager n'est pas en cours d'exécution."
diff --git a/po/gl.po b/po/gl.po
index 5dc613df0..f2a6d89d7 100644
--- a/po/gl.po
+++ b/po/gl.po
@@ -2608,8 +2608,8 @@ msgstr "engadido1,engadido2"
#. Translators: Do not translate the values in the square brackets
#: ../src/main.c:371
-msgid "Log level: one of [ERR, WARN, INFO, DEBUG]"
-msgstr "Nivel de rexistroÑ un de [ERR, WARN, INFO, DEBUG]"
+msgid "Log level: one of [ERR, WARN, INFO, DEBUG, TRACE]"
+msgstr "Nivel de rexistroÑ un de [ERR, WARN, INFO, DEBUG, TRACE]"
#. Translators: Do not translate the values in the square brackets
#: ../src/main.c:374
diff --git a/po/hi.po b/po/hi.po
index 8111be67c..3430d0bfa 100644
--- a/po/hi.po
+++ b/po/hi.po
@@ -1,563 +1,720 @@
-# translation of hi.po to Hindi
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# translation of NetworkManager.po to Hindi
# This file is distributed under the same license as the PACKAGE package.
-#
-# Translators:
-# Rajesh Ranjan <rranjan@redhat.com>, 2010, 2012, 2013.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
+# rajesh <rajesh>, 2012.
+# Rajesh Ranjan <rajeshkajha@yahoo.com>, 2012, 2013, 2014.
# chandankumar <chandankumar.093047@gmail.com>, 2012.
-# raj <raj>, 2013.
-# rajesh <rranjan@redhat.com>, 2013, 2014.
msgid ""
msgstr ""
-"Project-Id-Version: \n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-01-23 17:13+0530\n"
+"Project-Id-Version: gedit.master\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=gedit&keywords=I18N+L10N&component=general\n"
+"POT-Creation-Date: 2014-09-19 17:13+0000\n"
+"PO-Revision-Date: 2014-09-24 01:06+0630\n"
+"Last-Translator: rajesh <rajesh>\n"
+"Language-Team: Hindi <kde-i18n-doc@kde.org>\n"
+"Language: hi\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"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"X-DamnedLies-Scope: partial\n"
"X-Generator: Lokalize 1.5\n"
-"Language: hi\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:174
-#: ../cli/src/connections.c:200
+#: ../clients/cli/common.c:38 ../clients/cli/common.c:50
+#: ../clients/cli/common.c:58 ../clients/cli/common.c:69
+#: ../clients/cli/connections.c:169 ../clients/cli/connections.c:191
msgid "GROUP"
msgstr "समूह"
-#: ../cli/src/common.c:35 ../cli/src/common.c:55
+#. 0
+#: ../clients/cli/common.c:39 ../clients/cli/common.c:59
msgid "ADDRESS"
msgstr "पता"
-#: ../cli/src/common.c:36 ../cli/src/common.c:56
+#. 1
+#: ../clients/cli/common.c:40 ../clients/cli/common.c:60
msgid "ROUTE"
msgstr "रूट"
-#: ../cli/src/common.c:37 ../cli/src/common.c:57
+#. 2
+#: ../clients/cli/common.c:41 ../clients/cli/common.c:61
msgid "DNS"
msgstr "DNS"
-#: ../cli/src/common.c:38 ../cli/src/common.c:58
+#. 3
+#: ../clients/cli/common.c:42 ../clients/cli/common.c:62
msgid "DOMAIN"
msgstr "DOMAIN"
-#: ../cli/src/common.c:39
+#. 4
+#: ../clients/cli/common.c:43
msgid "WINS"
msgstr "जीता"
-#: ../cli/src/common.c:47 ../cli/src/common.c:66
+#. 0
+#: ../clients/cli/common.c:51 ../clients/cli/common.c:70
msgid "OPTION"
msgstr "विकलà¥à¤ª"
-#: ../cli/src/common.c:404 ../cli/src/settings.c:2808
+#: ../clients/cli/common.c:371 ../clients/cli/settings.c:3049
+#: ../clients/cli/settings.c:3068
#, c-format
msgid "invalid IPv4 address '%s'"
msgstr "अमानà¥à¤¯ IPv4 पता '%s'"
-#: ../cli/src/common.c:412
+#: ../clients/cli/common.c:379
#, c-format
msgid "invalid prefix '%s'; <1-32> allowed"
msgstr "अवैध उपसरà¥à¤— '%s'; <1-32> अनà¥à¤®à¤¤à¤¿"
-#: ../cli/src/common.c:419 ../cli/src/common.c:472
+#: ../clients/cli/common.c:386 ../clients/cli/common.c:439
#, c-format
msgid "invalid gateway '%s'"
msgstr "अवैध गेटवे '%s'"
-#: ../cli/src/common.c:457 ../cli/src/settings.c:3054
+#: ../clients/cli/common.c:424 ../clients/cli/settings.c:3395
+#: ../clients/cli/settings.c:3414
#, c-format
msgid "invalid IPv6 address '%s'"
msgstr "अमानà¥à¤¯ IPv6 पता '%s'"
-#: ../cli/src/common.c:465
+#: ../clients/cli/common.c:432
#, c-format
msgid "invalid prefix '%s'; <1-128> allowed"
msgstr "अवैध उपसरà¥à¤— '%s'; <1-128> अनà¥à¤®à¤¤à¤¿"
-#: ../cli/src/common.c:512
+#: ../clients/cli/common.c:515
#, c-format
-msgid "invalid IPv4 route '%s'"
-msgstr "अवैध IPv4 रूट '%s'"
+#| msgid "invalid next hop address '%s'"
+msgid "invalid route destination address '%s'"
+msgstr "अमानà¥à¤¯ रूट गंतवà¥à¤¯ पता '%s'"
-#: ../cli/src/common.c:520
+#: ../clients/cli/common.c:522
#, c-format
-msgid "invalid prefix '%s'; <0-32> allowed"
-msgstr "अवैध उपसरà¥à¤— '%s'; <0-32> अनà¥à¤®à¤¤à¤¿"
+#| msgid "invalid prefix '%s'; <1-32> allowed"
+msgid "invalid prefix '%s'; <1-%d> allowed"
+msgstr "अवैध उपसरà¥à¤— '%s'; <1-%d> अनà¥à¤®à¤¤à¤¿"
-#: ../cli/src/common.c:527 ../cli/src/common.c:590
+#: ../clients/cli/common.c:532
#, c-format
msgid "invalid next hop address '%s'"
msgstr "अमानà¥à¤¯ अगला हॉप पता '%s'"
-#: ../cli/src/common.c:534 ../cli/src/common.c:598
+#: ../clients/cli/common.c:537
#, c-format
-msgid "invalid metric '%s'"
-msgstr "अमानà¥à¤¯ मीटà¥à¤°à¤¿à¤• '%s'"
+msgid ""
+"the second component of route ('%s') is neither a next hop address nor a "
+"metric"
+msgstr "रूट का दूसरा घटक ('%s') न तो अगला हॉप पता है या न ही मेटà¥à¤°à¤¿à¤•"
-#: ../cli/src/common.c:575
+#: ../clients/cli/common.c:547
#, c-format
-msgid "invalid IPv6 route '%s'"
-msgstr "अवैध IPv6 रूट '%s'"
+msgid "invalid metric '%s'"
+msgstr "अमानà¥à¤¯ मीटà¥à¤°à¤¿à¤• '%s'"
-#: ../cli/src/common.c:583
-#, c-format
-msgid "invalid prefix '%s'; <0-128> allowed"
-msgstr "अवैध उपसरà¥à¤— '%s'; <0-128> अनà¥à¤®à¤¤à¤¿"
+#: ../clients/cli/common.c:556
+msgid "default route cannot be added (NetworkManager handles it by itself)"
+msgstr ""
+"तयशà¥à¤¦à¤¾ रूट जोड़ा नहीं जा सकता है (NetworkManager इसे सà¥à¤µà¤¯à¤‚ हैंडल करता है)"
-#: ../cli/src/common.c:619
+#: ../clients/cli/common.c:644
msgid "unmanaged"
msgstr "अपà¥à¤°à¤¬à¤‚धित"
-#: ../cli/src/common.c:621
+#: ../clients/cli/common.c:646
msgid "unavailable"
msgstr "अनà¥à¤ªà¤²à¤¬à¥à¤§"
-#: ../cli/src/common.c:623 ../cli/src/network-manager.c:276
+#: ../clients/cli/common.c:648 ../clients/cli/network-manager.c:274
msgid "disconnected"
msgstr "डिसकनेकà¥à¤Ÿà¥‡à¤¡"
-#: ../cli/src/common.c:625
+#: ../clients/cli/common.c:650
msgid "connecting (prepare)"
msgstr "कनेकà¥à¤Ÿà¤¿à¤‚ग (तैयार)"
-#: ../cli/src/common.c:627
+#: ../clients/cli/common.c:652
msgid "connecting (configuring)"
msgstr "कनेकà¥à¤Ÿà¤¿à¤‚ग (विनà¥à¤¯à¤¸à¥à¤¤ कर रहा है)"
-#: ../cli/src/common.c:629
+#: ../clients/cli/common.c:654
msgid "connecting (need authentication)"
msgstr "कनेकà¥à¤Ÿà¤¿à¤‚ग (सतà¥à¤¯à¤¾à¤ªà¤¨ जरूरी)"
-#: ../cli/src/common.c:631
+#: ../clients/cli/common.c:656
msgid "connecting (getting IP configuration)"
msgstr "कनेकà¥à¤Ÿà¤¿à¤‚ग (IP विनà¥à¤¯à¤¾à¤¸ पा रहा है)"
-#: ../cli/src/common.c:633
+#: ../clients/cli/common.c:658
msgid "connecting (checking IP connectivity)"
msgstr "कनेकà¥à¤Ÿà¤¿à¤‚ग (IP कनेकà¥à¤¶à¤¨ जाà¤à¤š रहा है)"
-#: ../cli/src/common.c:635
+#: ../clients/cli/common.c:660
msgid "connecting (starting secondary connections)"
msgstr "जà¥à¤¡à¤¼ रहा हैं (माधà¥à¤¯à¤®à¤¿à¤• कनेकà¥à¤¶à¤¨ शà¥à¤°à¥‚ करने के लिà¤)"
-#: ../cli/src/common.c:637 ../cli/src/network-manager.c:272
+#: ../clients/cli/common.c:662 ../clients/cli/network-manager.c:270
msgid "connected"
msgstr "कनेकà¥à¤Ÿà¥‡à¤¡"
-#: ../cli/src/common.c:639 ../cli/src/connections.c:732
+#: ../clients/cli/common.c:664 ../clients/cli/connections.c:542
msgid "deactivating"
msgstr "अकà¥à¤°à¤¿à¤¯ कर रहा है"
-#: ../cli/src/common.c:641
+#: ../clients/cli/common.c:666
msgid "connection failed"
msgstr "कनेकà¥à¤¶à¤¨ विफल"
-#: ../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
+#: ../clients/cli/common.c:668 ../clients/cli/connections.c:547
+#: ../clients/cli/connections.c:570 ../clients/cli/connections.c:1638
+#: ../clients/cli/devices.c:816 ../clients/cli/devices.c:2367
+#: ../clients/cli/network-manager.c:277 ../clients/cli/network-manager.c:295
+#: ../clients/cli/network-manager.c:358 ../clients/cli/network-manager.c:361
+#: ../clients/cli/network-manager.c:371 ../clients/cli/network-manager.c:373
+#: ../clients/cli/network-manager.c:430 ../clients/cli/network-manager.c:446
+#: ../clients/cli/settings.c:703 ../clients/cli/settings.c:765
+#: ../clients/cli/settings.c:1057 ../clients/cli/utils.c:1121
+#: ../src/main.c:504 ../src/main.c:532
msgid "unknown"
msgstr "अजà¥à¤žà¤¾à¤¤"
-#: ../cli/src/common.c:652
+#: ../clients/cli/common.c:677
msgid "No reason given"
msgstr "कोई कारण नहीं दिया गया"
-#: ../cli/src/common.c:655 ../cli/src/connections.c:2258
+#: ../clients/cli/common.c:680 ../clients/cli/connections.c:2413
#, c-format
msgid "Unknown error"
msgstr "अजà¥à¤žà¤¾à¤¤ तà¥à¤°à¥à¤Ÿà¤¿"
-#: ../cli/src/common.c:658
+#: ../clients/cli/common.c:683
msgid "Device is now managed"
msgstr "यà¥à¤•à¥à¤¤à¤¿ अब पà¥à¤°à¤¬à¤‚धित है"
-#: ../cli/src/common.c:661
+#: ../clients/cli/common.c:686
msgid "Device is now unmanaged"
msgstr "यà¥à¤•à¥à¤¤à¤¿ अब पà¥à¤°à¤¬à¤‚धित नहीं है"
-#: ../cli/src/common.c:664
+#: ../clients/cli/common.c:689
msgid "The device could not be readied for configuration"
msgstr "यà¥à¤•à¥à¤¤à¤¿ विनà¥à¤¯à¤¾à¤¸ के लिठनहीं सज सकता है"
-#: ../cli/src/common.c:667
+#: ../clients/cli/common.c:692
msgid ""
"IP configuration could not be reserved (no available address, timeout, etc.)"
msgstr ""
-"आईपी ​​विनà¥à¤¯à¤¾à¤¸ (कोई उपलबà¥à¤§ पता नहीं, मधà¥à¤¯à¤¾à¤‚तर, आदि) आरकà¥à¤·à¤¿à¤¤ नहीं किया जा "
-"सकता है"
+"आईपी ​​विनà¥à¤¯à¤¾à¤¸ (कोई उपलबà¥à¤§ पता नहीं, मधà¥à¤¯à¤¾à¤‚तर, आदि) आरकà¥à¤·à¤¿à¤¤ नहीं किया जा सकता "
+"है"
-#: ../cli/src/common.c:670
+#: ../clients/cli/common.c:695
msgid "The IP configuration is no longer valid"
msgstr "आईपी ​​विनà¥à¤¯à¤¾à¤¸ अब मानà¥à¤¯ नहीं है"
-#: ../cli/src/common.c:673
+#: ../clients/cli/common.c:698
msgid "Secrets were required, but not provided"
msgstr "गोपनीयता की आवशà¥à¤¯à¤•à¤¤à¤¾ है, लेकिन नहीं पà¥à¤°à¤¦à¤¾à¤¨ की गई"
-#: ../cli/src/common.c:676
+#: ../clients/cli/common.c:701
msgid "802.1X supplicant disconnected"
msgstr "802.1X निवेदक डिसà¥à¤•à¤¨à¥‡à¤•à¥à¤Ÿ हो गया"
-#: ../cli/src/common.c:679
+#: ../clients/cli/common.c:704
msgid "802.1X supplicant configuration failed"
msgstr "802.1X निवेदक विनà¥à¤¯à¤¾à¤¸ विफल रहा"
-#: ../cli/src/common.c:682
+#: ../clients/cli/common.c:707
msgid "802.1X supplicant failed"
msgstr "802.1X निवेदक विफल रहा"
-#: ../cli/src/common.c:685
+#: ../clients/cli/common.c:710
msgid "802.1X supplicant took too long to authenticate"
msgstr "802.1X निवेदक को पà¥à¤°à¤®à¤¾à¤£à¤¿à¤¤ करने में बहà¥à¤¤ जà¥à¤¯à¤¾à¤¦à¤¾ समय लग रहा हैं"
-#: ../cli/src/common.c:688
+#: ../clients/cli/common.c:713
msgid "PPP service failed to start"
msgstr "PPP सेवा आरंभ होने में विफल रहा"
-#: ../cli/src/common.c:691
+#: ../clients/cli/common.c:716
msgid "PPP service disconnected"
msgstr "PPP सेवा डिसà¥à¤•à¤¨à¥‡à¤•à¥à¤Ÿ हो गया"
-#: ../cli/src/common.c:694
+#: ../clients/cli/common.c:719
msgid "PPP failed"
msgstr "PPP विफल"
-#: ../cli/src/common.c:697
+#: ../clients/cli/common.c:722
msgid "DHCP client failed to start"
msgstr "DHCP कà¥à¤²à¤¾à¤‡à¤‚ट के लिठपà¥à¤°à¤¾à¤°à¤‚भ करने में विफल"
-#: ../cli/src/common.c:700
+#: ../clients/cli/common.c:725
msgid "DHCP client error"
msgstr "DHCP कà¥à¤²à¤¾à¤à¤‚ट तà¥à¤°à¥à¤Ÿà¤¿"
-#: ../cli/src/common.c:703
+#: ../clients/cli/common.c:728
msgid "DHCP client failed"
msgstr "DHCP कà¥à¤²à¤¾à¤‡à¤‚ट विफल"
-#: ../cli/src/common.c:706
+#: ../clients/cli/common.c:731
msgid "Shared connection service failed to start"
msgstr "साà¤à¤¾ कनेकà¥à¤¶à¤¨ सेवा पà¥à¤°à¤¾à¤°à¤‚भ करने में विफल"
-#: ../cli/src/common.c:709
+#: ../clients/cli/common.c:734
msgid "Shared connection service failed"
msgstr "साà¤à¤¾ कनेकà¥à¤¶à¤¨ सेवा विफल"
-#: ../cli/src/common.c:712
+#: ../clients/cli/common.c:737
msgid "AutoIP service failed to start"
msgstr "AutoIP सेवा आरंभ होने में विफल रहा"
-#: ../cli/src/common.c:715
+#: ../clients/cli/common.c:740
msgid "AutoIP service error"
msgstr "AutoIP सेवा तà¥à¤°à¥à¤Ÿà¤¿"
-#: ../cli/src/common.c:718
+#: ../clients/cli/common.c:743
msgid "AutoIP service failed"
msgstr "VPN सेवा विफल"
-#: ../cli/src/common.c:721
+#: ../clients/cli/common.c:746
msgid "The line is busy"
msgstr "लाइन वà¥à¤¯à¤¸à¥à¤¤ है"
-#: ../cli/src/common.c:724
+#: ../clients/cli/common.c:749
msgid "No dial tone"
msgstr "डायल टोन नहीं"
-#: ../cli/src/common.c:727
+#: ../clients/cli/common.c:752
msgid "No carrier could be established"
msgstr "कोई वाहक सà¥à¤¥à¤¾à¤ªà¤¿à¤¤ नहीं किया जा सकता"
-#: ../cli/src/common.c:730
+#: ../clients/cli/common.c:755
msgid "The dialing request timed out"
msgstr "डायलन अनà¥à¤°à¥‹à¤§ का समय समापà¥à¤¤"
-#: ../cli/src/common.c:733
+#: ../clients/cli/common.c:758
msgid "The dialing attempt failed"
msgstr "डायलन करने का पà¥à¤°à¤¯à¤¾à¤¸ विफल"
-#: ../cli/src/common.c:736
+#: ../clients/cli/common.c:761
msgid "Modem initialization failed"
msgstr "मोडेम आरमà¥à¤­à¥€à¤•à¤°à¤£ असफ़ल रहा"
-#: ../cli/src/common.c:739
+#: ../clients/cli/common.c:764
msgid "Failed to select the specified APN"
msgstr "निरà¥à¤¦à¤¿à¤·à¥à¤Ÿ APN का चयन करने में विफल"
-#: ../cli/src/common.c:742
+#: ../clients/cli/common.c:767
msgid "Not searching for networks"
msgstr "संजाल के लिठकोई खोज नहीं"
-#: ../cli/src/common.c:745
+#: ../clients/cli/common.c:770
msgid "Network registration denied"
msgstr "नेटवरà¥à¤• पंजीकरण से इनकार किया"
-#: ../cli/src/common.c:748
+#: ../clients/cli/common.c:773
msgid "Network registration timed out"
msgstr "संजाल पंजीयन समयबाहà¥à¤¯ हो गई है"
-#: ../cli/src/common.c:751
+#: ../clients/cli/common.c:776
msgid "Failed to register with the requested network"
msgstr "अनà¥à¤°à¥‹à¤§ नेटवरà¥à¤• के साथ पंजीकृत करने में विफल"
-#: ../cli/src/common.c:754
+#: ../clients/cli/common.c:779
msgid "PIN check failed"
msgstr "PIN चेक करने में विफल रहा"
-#: ../cli/src/common.c:757
+#: ../clients/cli/common.c:782
msgid "Necessary firmware for the device may be missing"
msgstr "इस उपकरण के लिठआवशà¥à¤¯à¤• फरà¥à¤®à¤µà¥‡à¤¯à¤° लापता हो सकता है"
-#: ../cli/src/common.c:760
+#: ../clients/cli/common.c:785
msgid "The device was removed"
msgstr "उपकरण हटाया गया था"
-#: ../cli/src/common.c:763
+#: ../clients/cli/common.c:788
msgid "NetworkManager went to sleep"
msgstr "नेटवरà¥à¤•à¤ªà¥à¤°à¤¬à¤‚धक सो गया"
-#: ../cli/src/common.c:766
+#: ../clients/cli/common.c:791
msgid "The device's active connection disappeared"
msgstr "उपकरण सकà¥à¤°à¤¿à¤¯ कनेकà¥à¤¶à¤¨ गायब हो गया"
-#: ../cli/src/common.c:769
+#: ../clients/cli/common.c:794
msgid "Device disconnected by user or client"
msgstr "यà¥à¤•à¥à¤¤à¤¿ उपयोगकरà¥à¤¤à¤¾ या गà¥à¤°à¤¾à¤¹à¤• दà¥à¤µà¤¾à¤°à¤¾ डिसà¥à¤•à¤¨à¥‡à¤•à¥à¤Ÿ कर दिया गया"
-#: ../cli/src/common.c:772
+#: ../clients/cli/common.c:797
msgid "Carrier/link changed"
msgstr " कैरियर/लिंक बदल दिया गया"
-#: ../cli/src/common.c:775
+#: ../clients/cli/common.c:800
msgid "The device's existing connection was assumed"
msgstr "डिवाइस मौजूदा कनेकà¥à¤¶à¤¨ मान लिया गया था."
-#: ../cli/src/common.c:778
+#: ../clients/cli/common.c:803
msgid "The supplicant is now available"
msgstr "निवेदक अब उपलबà¥à¤§ है"
-#: ../cli/src/common.c:781
+#: ../clients/cli/common.c:806
msgid "The modem could not be found"
msgstr "मॉडेम पाया नहीं जा सका"
-#: ../cli/src/common.c:784
+#: ../clients/cli/common.c:809
msgid "The Bluetooth connection failed or timed out"
msgstr "बà¥à¤²à¥‚टूथ कनेकà¥à¤¶à¤¨ में विफल रहा है या समयबाहà¥à¤¯ हो गई है"
-#: ../cli/src/common.c:787
+#: ../clients/cli/common.c:812
msgid "GSM Modem's SIM card not inserted"
msgstr "जीà¤à¤¸à¤à¤® मोडेम सिम कारà¥à¤¡ नहीं समà¥à¤®à¤¿à¤²à¤¿à¤¤ किया गया हैं"
-#: ../cli/src/common.c:790
+#: ../clients/cli/common.c:815
msgid "GSM Modem's SIM PIN required"
msgstr "जीà¤à¤¸à¤à¤® मोडेम सिम पिन आवशà¥à¤¯à¤• "
-#: ../cli/src/common.c:793
+#: ../clients/cli/common.c:818
msgid "GSM Modem's SIM PUK required"
msgstr "जीà¤à¤¸à¤à¤® मोडेम सिम PUK की आवशà¥à¤¯à¤•à¤¤à¤¾ है"
-#: ../cli/src/common.c:796
+#: ../clients/cli/common.c:821
msgid "GSM Modem's SIM wrong"
msgstr "जीà¤à¤¸à¤à¤® मोडेम सिम गलत"
-#: ../cli/src/common.c:799
+#: ../clients/cli/common.c:824
msgid "InfiniBand device does not support connected mode"
msgstr "InfiniBand डिवाइस जà¥à¤¡à¤¼à¤¾ हà¥à¤† मोड का समरà¥à¤¥à¤¨ नहीं करता हैं"
-#: ../cli/src/common.c:802
+#: ../clients/cli/common.c:827
msgid "A dependency of the connection failed"
msgstr "कनेकà¥à¤¶à¤¨ के à¤à¤• निरà¥à¤­à¤°à¤¤à¤¾ विफल रहा"
-#: ../cli/src/common.c:805
+#: ../clients/cli/common.c:830
msgid "A problem with the RFC 2684 Ethernet over ADSL bridge"
msgstr "ADSL बà¥à¤°à¤¿à¤œ पर आरà¤à¤«à¤¸à¥€ 2684 ईथरनेट के साथ à¤à¤• समसà¥à¤¯à¤¾"
-#: ../cli/src/common.c:808
+#: ../clients/cli/common.c:833
msgid "ModemManager is unavailable"
msgstr "ModemManager अनà¥à¤ªà¤²à¤¬à¥à¤§ है"
-#: ../cli/src/common.c:811
+#: ../clients/cli/common.c:836
msgid "The Wi-Fi network could not be found"
msgstr "वाइ-फाइ संजाल पाया नहीं जा सका"
-#: ../cli/src/common.c:814
+#: ../clients/cli/common.c:839
msgid "A secondary connection of the base connection failed"
msgstr "बेस कनेकà¥à¤¶à¤¨ का दूसरा कनेकà¥à¤¶à¤¨ विफल रहा"
-#: ../cli/src/common.c:817
+#: ../clients/cli/common.c:842
msgid "DCB or FCoE setup failed"
msgstr "DCB या FCoE सेटअप विफल"
-#: ../cli/src/common.c:820
+#: ../clients/cli/common.c:845
msgid "teamd control failed"
msgstr "टीम का नियंतà¥à¤°à¤£ विफल"
-#: ../cli/src/common.c:824 ../cli/src/devices.c:634 ../tui/nm-ui-utils.c:359
+#: ../clients/cli/common.c:848
+#| msgid "ModemManager is unavailable"
+msgid "Modem failed or no longer available"
+msgstr "मोडेम विफल या अब अनà¥à¤ªà¤²à¤¬à¥à¤§ है"
+
+#: ../clients/cli/common.c:851
+#| msgid "ModemManager is unavailable"
+msgid "Modem now ready and available"
+msgstr "मोडेम तैयार या अब उपलबà¥à¤§ है"
+
+#: ../clients/cli/common.c:854
+msgid "SIM PIN was incorrect"
+msgstr "SIM PIN सही था"
+
+#. TRANSLATORS: Unknown reason for a device state change (NMDeviceStateReason)
+#: ../clients/cli/common.c:858 ../clients/cli/devices.c:621
+#: ../libnm-glib/nm-device.c:1812
msgid "Unknown"
msgstr "अजà¥à¤žà¤¾à¤¤"
-#: ../cli/src/common.c:866
+#: ../clients/cli/common.c:900
#, c-format
msgid "invalid priority map '%s'"
msgstr "अवैध पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤•à¤¤à¤¾ नकà¥à¤¶à¤¾ '%s'"
-#: ../cli/src/common.c:873 ../cli/src/common.c:879
+#: ../clients/cli/common.c:907 ../clients/cli/common.c:913
#, c-format
msgid "priority '%s' is not valid (<0-%ld>)"
msgstr "पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤•à¤¤à¤¾ '%s' मानà¥à¤¯ नहीं है (<0-%ld>)"
-#: ../cli/src/common.c:935
+#: ../clients/cli/common.c:980
#, c-format
msgid "'%s' is not a valid team configuration or file name."
msgstr "'%s' à¤à¤• वैध टीम विनà¥à¤¯à¤¾à¤¸ नहीं है या फ़ाइल नाम नहीं है."
-#: ../cli/src/connections.c:62
+#. define some prompts for connection editor
+#: ../clients/cli/connections.c:40
msgid "Setting name? "
msgstr "सेटिंग नाम? "
-#: ../cli/src/connections.c:63
+#: ../clients/cli/connections.c:41
msgid "Property name? "
msgstr "गà¥à¤£ नाम?"
-#: ../cli/src/connections.c:64
+#: ../clients/cli/connections.c:42
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
+#. define some other prompts
+#: ../clients/cli/connections.c:45
+msgid "Connection type: "
+msgstr "कनेकà¥à¤¶à¤¨ पà¥à¤°à¤•à¤¾à¤°..."
+
+#: ../clients/cli/connections.c:46
+msgid "VPN type: "
+msgstr "VPN पà¥à¤°à¤•à¤¾à¤°:"
+
+#: ../clients/cli/connections.c:47
+msgid "Bond master: "
+msgstr "बांड मासà¥à¤Ÿà¤°:"
+
+#: ../clients/cli/connections.c:48
+msgid "Team master: "
+msgstr "टीम मासà¥à¤Ÿà¤°: "
+
+#: ../clients/cli/connections.c:49
+msgid "Bridge master: "
+msgstr "बà¥à¤°à¤¿à¤œ मासà¥à¤Ÿà¤°:"
+
+#: ../clients/cli/connections.c:50
+msgid "Connection (name, UUID, or path): "
+msgstr "कनेकà¥à¤¶à¤¨ (नाम, UUID, या पथ): "
+
+#. 0
+#: ../clients/cli/connections.c:58 ../clients/cli/connections.c:170
+#: ../clients/cli/devices.c:55 ../clients/cli/devices.c:84
+#: ../clients/cli/devices.c:94 ../clients/cli/devices.c:105
+#: ../clients/cli/devices.c:114 ../clients/cli/devices.c:129
+#: ../clients/cli/devices.c:142 ../clients/cli/devices.c:168
+#: ../clients/cli/devices.c:183 ../clients/cli/devices.c:192
msgid "NAME"
msgstr "नाम"
-#: ../cli/src/connections.c:69 ../cli/src/connections.c:176
+#. 0
+#. 1
+#: ../clients/cli/connections.c:59 ../clients/cli/connections.c:171
msgid "UUID"
msgstr "UUID"
-#: ../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
+#. 1
+#. 0
+#. 1
+#. 2
+#: ../clients/cli/connections.c:60 ../clients/cli/connections.c:192
+#: ../clients/cli/devices.c:41 ../clients/cli/devices.c:57
+#: ../clients/cli/devices.c:171
msgid "TYPE"
msgstr "पà¥à¤°à¤•à¤¾à¤°"
-#: ../cli/src/connections.c:71
+#. 2
+#: ../clients/cli/connections.c:61
msgid "TIMESTAMP"
msgstr "समय-चिहà¥à¤¨"
-#: ../cli/src/connections.c:72
+#. 3
+#: ../clients/cli/connections.c:62
msgid "TIMESTAMP-REAL"
msgstr "समय-चिहà¥à¤¨ अचल"
-#: ../cli/src/connections.c:73 ../cli/src/devices.c:101
+#. 4
+#. 15
+#: ../clients/cli/connections.c:63 ../clients/cli/devices.c:71
msgid "AUTOCONNECT"
msgstr "ऑटो कनेकà¥à¤Ÿ"
-#: ../cli/src/connections.c:74
+#. 5
+#: ../clients/cli/connections.c:64
msgid "READONLY"
msgstr "पढ़ने लायक"
-#: ../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
+#. 6
+#. 8
+#. 2
+#. 15
+#. 5
+#: ../clients/cli/connections.c:65 ../clients/cli/connections.c:178
+#: ../clients/cli/devices.c:43 ../clients/cli/devices.c:158
+#: ../clients/cli/devices.c:174
msgid "DBUS-PATH"
msgstr "DBUS पथ"
-#: ../cli/src/connections.c:177
-msgid "DEVICES"
+#. 7
+#. 13
+#. 4
+#: ../clients/cli/connections.c:66 ../clients/cli/devices.c:156
+#: ../clients/cli/devices.c:173
+msgid "ACTIVE"
+msgstr "ACTIVE"
+
+#. 8
+#. 0
+#. 12
+#. 3
+#: ../clients/cli/connections.c:67 ../clients/cli/devices.c:40
+#: ../clients/cli/devices.c:56 ../clients/cli/devices.c:155
+#: ../clients/cli/devices.c:172
+msgid "DEVICE"
msgstr "उपकरण"
-#: ../cli/src/connections.c:178 ../cli/src/devices.c:73
-#: ../cli/src/devices.c:96 ../cli/src/network-manager.c:39
+#. 9
+#. 3
+#. 1
+#. 9
+#. 1
+#: ../clients/cli/connections.c:68 ../clients/cli/connections.c:173
+#: ../clients/cli/devices.c:42 ../clients/cli/devices.c:65
+#: ../clients/cli/network-manager.c:37
msgid "STATE"
msgstr "सà¥à¤¥à¤¿à¤¤à¤¿"
-#: ../cli/src/connections.c:179
+#. 10
+#: ../clients/cli/connections.c:69
+#| msgid "MASTER-PATH"
+msgid "ACTIVE-PATH"
+msgstr "ACTIVE-PATH"
+
+#. 2
+#: ../clients/cli/connections.c:172
+msgid "DEVICES"
+msgstr "उपकरण"
+
+#. 4
+#: ../clients/cli/connections.c:174
msgid "DEFAULT"
msgstr "डिफ़ॉलà¥à¤Ÿ"
-#: ../cli/src/connections.c:180
+#. 5
+#: ../clients/cli/connections.c:175
msgid "DEFAULT6"
msgstr "DEFAULT6"
-#: ../cli/src/connections.c:181
+#. 6
+#: ../clients/cli/connections.c:176
msgid "SPEC-OBJECT"
msgstr "SPEC-OBJECT"
-#: ../cli/src/connections.c:182 ../cli/src/connections.c:224
-#: ../tui/nm-editor-utils.c:243 ../tui/nmt-connect-connection-list.c:343
+#. 7
+#. 4
+#. Ask for optional 'vpn' arguments.
+#: ../clients/cli/connections.c:177 ../clients/cli/connections.c:215
+#: ../clients/cli/connections.c:3450 ../clients/tui/nm-editor-utils.c:234
+#: ../clients/tui/nmt-connect-connection-list.c:408
msgid "VPN"
msgstr "VPN"
-#: ../cli/src/connections.c:184 ../cli/src/devices.c:77
-#: ../cli/src/devices.c:105
+#. 9
+#. 5
+#. 19
+#: ../clients/cli/connections.c:179 ../clients/cli/devices.c:46
+#: ../clients/cli/devices.c:75
msgid "CON-PATH"
msgstr "CON-PATH"
-#: ../cli/src/connections.c:185
+#. 10
+#: ../clients/cli/connections.c:180
msgid "ZONE"
msgstr "कà¥à¤·à¥‡à¤¤à¥à¤°"
-#: ../cli/src/connections.c:186
+#. 11
+#: ../clients/cli/connections.c:181
msgid "MASTER-PATH"
msgstr "MASTER-PATH"
-#: ../cli/src/connections.c:202
+#. 1
+#: ../clients/cli/connections.c:193
msgid "USERNAME"
msgstr "उपयोकà¥à¤¤à¤¾à¤¨à¤¾à¤®"
-#: ../cli/src/connections.c:203
+#. 2
+#: ../clients/cli/connections.c:194
msgid "GATEWAY"
msgstr "गेटवे"
-#: ../cli/src/connections.c:204
+#. 3
+#: ../clients/cli/connections.c:195
msgid "BANNER"
msgstr "धà¥à¤µà¤œ"
-#: ../cli/src/connections.c:205
+#. 4
+#: ../clients/cli/connections.c:196
msgid "VPN-STATE"
msgstr "VPN-सà¥à¤¥à¤¿à¤¤à¤¿"
-#: ../cli/src/connections.c:206
+#. 5
+#: ../clients/cli/connections.c:197
msgid "CFG"
msgstr "CFG"
-#: ../cli/src/connections.c:219 ../cli/src/devices.c:236
+#: ../clients/cli/connections.c:210 ../clients/cli/devices.c:207
msgid "GENERAL"
msgstr "सामानà¥à¤¯"
-#: ../cli/src/connections.c:220 ../cli/src/devices.c:243
+#. 0
+#. 6
+#: ../clients/cli/connections.c:211 ../clients/cli/devices.c:214
msgid "IP4"
msgstr "IP4"
-#: ../cli/src/connections.c:221 ../cli/src/devices.c:244
+#. 1
+#. 7
+#: ../clients/cli/connections.c:212 ../clients/cli/devices.c:215
msgid "DHCP4"
msgstr "DHCP4"
-#: ../cli/src/connections.c:222 ../cli/src/devices.c:245
+#. 2
+#. 8
+#: ../clients/cli/connections.c:213 ../clients/cli/devices.c:216
msgid "IP6"
msgstr "IP6"
-#: ../cli/src/connections.c:223 ../cli/src/devices.c:246
+#. 3
+#. 9
+#: ../clients/cli/connections.c:214 ../clients/cli/devices.c:217
msgid "DHCP6"
msgstr "DHCP6"
-#: ../cli/src/connections.c:255
-#, c-format
+#: ../clients/cli/connections.c:249
+#, 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"
msgid ""
"Usage: nmcli connection { COMMAND | help }\n"
"\n"
-"COMMAND := { show | up | down | add | modify | edit | delete | reload | load "
-"}\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"
+" show [--active] [[id | uuid | path | apath] <ID>] ...\n"
"\n"
" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
"\n"
@@ -567,7 +724,8 @@ msgid ""
"\n"
" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
"\n"
-" modify [id | uuid | path] <ID> <setting>.<property> <value>\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"
@@ -579,13 +737,12 @@ msgid ""
" load <filename> [ <filename>... ]\n"
"\n"
msgstr ""
-"पà¥à¤°à¤¯à¥‹à¤—: nmcli connection { COMMAND | help }\n"
+"Usage: nmcli connection { COMMAND | help }\n"
"\n"
-"COMMAND := { show | up | down | add | modify | edit | delete | reload | load "
-"}\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"
+" show [--active] [[id | uuid | path | apath] <ID>] ...\n"
"\n"
" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
"\n"
@@ -595,7 +752,8 @@ msgstr ""
"\n"
" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
"\n"
-" modify [id | uuid | path] <ID> <setting>.<property> <value>\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"
@@ -607,47 +765,52 @@ msgstr ""
" load <filename> [ <filename>... ]\n"
"\n"
-#: ../cli/src/connections.c:278
+#: ../clients/cli/connections.c:271
#, c-format
msgid ""
"Usage: nmcli connection show { ARGUMENTS | help }\n"
"\n"
-"ARGUMENTS := active [[id | uuid | path | apath] <ID>]\n"
+"ARGUMENTS := [--active]\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."
+"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 [[id | uuid | path | apath] <ID>]\n"
-"\n"
-"कनेकà¥à¤¶à¤¨ दिखाà¤à¤ जो अभी किसी यà¥à¤•à¥à¤¤à¤¿ दà¥à¤µà¤¾à¤°à¤¾ पà¥à¤°à¤¯à¥‹à¤— किया गया है जो किसी संजाल से "
-"कनेकà¥à¤Ÿ हà¥à¤† है.\n"
-"बिना किसी पैरामीटर के, सभी सकà¥à¤°à¤¿à¤¯ कनेकà¥à¤¶à¤¨ सूचीबदà¥à¤§ हैं. जब <ID> दिठजाते "
-"हैं,\n"
-"तो कनेकà¥à¤¶à¤¨ विवरण यहाठदिखाठगठहैं.\n"
+"Usage: nmcli connection show { ARGUMENTS | help }\n"
"\n"
-"ARGUMENTS := configured [[id | uuid | path] <ID>]\n"
+"ARGUMENTS := [--active]\n"
"\n"
-"सà¥à¤®à¥ƒà¤¤à¤¿ और ऑनडिसà¥à¤• कनेकà¥à¤¶à¤¨ दिखाà¤à¤, उनमें से कà¥à¤› सकà¥à¤°à¤¿à¤¯ हो सकते हैं यदि\n"
-"कोई यà¥à¤•à¥à¤¤à¤¿ उस कनेकà¥à¤¶à¤¨ पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤² को पà¥à¤°à¤¯à¥‹à¤— कर रहा है. बिना किसी पैरामीटर के, "
-"सभी पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤² सूचीबदà¥à¤§ हैं.\n जब <ID> पà¥à¤°à¤¦à¤¾à¤¨ किठजाते हैं, पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤² विवरण "
-"इसके बजाय दिखाठजाते हैं."
+"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"
-#: ../cli/src/connections.c:297
+#: ../clients/cli/connections.c:293
#, c-format
msgid ""
"Usage: nmcli connection up { ARGUMENTS | help }\n"
@@ -688,7 +851,7 @@ msgstr ""
"nsp - NSP निरà¥à¤¦à¤¿à¤·à¥à¤Ÿ करता है जिसमें कनेकà¥à¤Ÿ करना है (केवल WiMAX के लिठवैध)\n"
"\n"
-#: ../cli/src/connections.c:318
+#: ../clients/cli/connections.c:314
#, c-format
msgid ""
"Usage: nmcli connection down { ARGUMENTS | help }\n"
@@ -710,8 +873,102 @@ msgstr ""
"UUID या D-Bus पथ के दà¥à¤µà¤¾à¤°à¤¾ पहचाने जाते हैं.\n"
"\n"
-#: ../cli/src/connections.c:331
-#, c-format
+#: ../clients/cli/connections.c:327
+#, 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"
@@ -723,6 +980,8 @@ msgid ""
" [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"
@@ -776,11 +1035,11 @@ msgid ""
" [arp-interval <num>]\n"
" [arp-ip-target <num>]\n"
"\n"
-" bond-slave: master <master (ifname or connection UUID)>\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)>\n"
+" team-slave: master <master (ifname, or connection UUID or name)>\n"
" [config <file>|<raw JSON data>]\n"
"\n"
" bridge: [stp yes|no]\n"
@@ -789,13 +1048,15 @@ msgid ""
" [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)>\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"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan|libreswan|"
+"ssh|l2tp|iodine|...\n"
" [user <username>]\n"
"\n"
" olpc-mesh: ssid <SSID>\n"
@@ -817,6 +1078,8 @@ msgstr ""
" [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"
@@ -870,11 +1133,11 @@ msgstr ""
" [arp-interval <num>]\n"
" [arp-ip-target <num>]\n"
"\n"
-" bond-slave: master <master (ifname or connection UUID)>\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)>\n"
+" team-slave: master <master (ifname, or connection UUID or name)>\n"
" [config <file>|<raw JSON data>]\n"
"\n"
" bridge: [stp yes|no]\n"
@@ -883,13 +1146,15 @@ msgstr ""
" [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)>\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"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan|libreswan|"
+"ssh|l2tp|iodine|...\n"
" [user <username>]\n"
"\n"
" olpc-mesh: ssid <SSID>\n"
@@ -901,28 +1166,52 @@ msgstr ""
" [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
"\n"
-#: ../cli/src/connections.c:408
+#: ../clients/cli/connections.c:406
#, c-format
msgid ""
"Usage: nmcli connection modify { ARGUMENTS | help }\n"
"\n"
-"ARGUMENTS := [id | uuid | path] <ID> <setting name>.<property name> "
-"[<value>]\n"
+"ARGUMENTS := [id | uuid | path] <ID> ([+|-]<setting>.<property> <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"
+"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 { ARGUMENTS | help }\n"
"\n"
-"ARGUMENTS := [id | uuid | path] <ID> <setting name>.<property name> "
-"[<value>]\n"
+"ARGUMENTS := [id | uuid | path] <ID> ([+|-]<setting>.<property> <value>)+\n"
"\n"
-"कनेकà¥à¤¶à¤¨ फ़ाइल में à¤à¤•à¤² गà¥à¤£ के साथ बदलें.\n"
-"पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤² इसके नाम के दà¥à¤µà¤¾à¤°à¤¾ पहचाना जाता है, UUID या D-Bus पथ दà¥à¤µà¤¾à¤°à¤¾.\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"
-#: ../cli/src/connections.c:420
+#: ../clients/cli/connections.c:430
#, c-format
msgid ""
"Usage: nmcli connection edit { ARGUMENTS | help }\n"
@@ -949,7 +1238,7 @@ msgstr ""
"किसी अंतःकà¥à¤°à¤¿à¤¯à¤¾à¤¤à¥à¤®à¤• संपादक में कोई नया कनेकà¥à¤¶à¤¨ पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤² जोड़ें.\n"
"\n"
-#: ../cli/src/connections.c:436
+#: ../clients/cli/connections.c:446
#, c-format
msgid ""
"Usage: nmcli connection delete { ARGUMENTS | help }\n"
@@ -968,7 +1257,7 @@ msgstr ""
"पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤² इसके नाम के दà¥à¤µà¤¾à¤°à¤¾ पहचाना जाता है, UUID या D-Bus पथ दà¥à¤µà¤¾à¤°à¤¾.\n"
"\n"
-#: ../cli/src/connections.c:448
+#: ../clients/cli/connections.c:458
#, c-format
msgid ""
"Usage: nmcli connection reload { help }\n"
@@ -981,7 +1270,7 @@ msgstr ""
"डिसà¥à¤• से सभी कनेकà¥à¤¶à¤¨ फ़ाइल फिर लोड करें.\n"
"\n"
-#: ../cli/src/connections.c:457
+#: ../clients/cli/connections.c:467
#, c-format
msgid ""
"Usage: nmcli connection load { ARGUMENTS | help }\n"
@@ -1000,810 +1289,837 @@ msgstr ""
"\n"
"डिसà¥à¤• से à¤à¤• या अधिक कनेकà¥à¤¶à¤¨ फ़ाइल लोड/रिलोड करें. इसका उपयोग\n"
"किसी कनेकà¥à¤¶à¤¨ फ़ाइल का संपादन करके करें ताकि पकà¥à¤•à¤¾ किया जा सके कि "
-"NetworkManager अपने नवीनतम सà¥à¤¥à¤¿à¤¤à¤¿\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:523
-msgid "Connection details"
-msgstr "कनेकà¥à¤¶à¤¨à¥à¤¸ विवरण"
-
-#: ../cli/src/connections.c:589
-msgid "never"
-msgstr "कभी नहीं"
-
-#: ../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: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: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:698
-#, c-format
-msgid "Error: %s - no such connection."
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: %s - कोई à¤à¤¸à¤¾ कनेकà¥à¤¶à¤¨ नहीं."
-
-#: ../cli/src/connections.c:710
-#, c-format
-msgid "Error: 'show configured': %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'विनà¥à¤¯à¤¸à¥à¤¤ दिखाà¤à¤': %s"
-
-#: ../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:728
+#: ../clients/cli/connections.c:538
msgid "activating"
msgstr "सकà¥à¤°à¤¿à¤¯ कर रहा है"
-#: ../cli/src/connections.c:730
+#: ../clients/cli/connections.c:540
msgid "activated"
msgstr "सकà¥à¤°à¤¿à¤¯ किया हà¥à¤†"
-#: ../cli/src/connections.c:734
+#: ../clients/cli/connections.c:544
msgid "deactivated"
msgstr "निषà¥à¤•à¥à¤°à¤¿à¤¯ किया गया"
-#: ../cli/src/connections.c:746
+#: ../clients/cli/connections.c:556
msgid "VPN connecting (prepare)"
msgstr "VPN कनेकà¥à¤Ÿà¤¿à¤‚ग (तैयार)"
-#: ../cli/src/connections.c:748
+#: ../clients/cli/connections.c:558
msgid "VPN connecting (need authentication)"
msgstr "VPN कनेकà¥à¤Ÿà¤¿à¤‚ग (सतà¥à¤¯à¤¾à¤ªà¤¨ जरूरी)"
-#: ../cli/src/connections.c:750
+#: ../clients/cli/connections.c:560
msgid "VPN connecting"
msgstr "VPN कनेकà¥à¤Ÿà¤¿à¤‚ग"
-#: ../cli/src/connections.c:752
+#: ../clients/cli/connections.c:562
msgid "VPN connecting (getting IP configuration)"
msgstr "VPN कनेकà¥à¤Ÿà¤¿à¤‚ग (IP विनà¥à¤¯à¤¾à¤¸ पा रहा है)"
-#: ../cli/src/connections.c:754
+#: ../clients/cli/connections.c:564
msgid "VPN connected"
msgstr "VPN कनेकà¥à¤Ÿà¥‡à¤¡"
-#: ../cli/src/connections.c:756
+#: ../clients/cli/connections.c:566
msgid "VPN connection failed"
msgstr "VPN कनेकà¥à¤¶à¤¨ विफल"
-#: ../cli/src/connections.c:758
+#: ../clients/cli/connections.c:568
msgid "VPN disconnected"
msgstr "VPN डिसकनेकà¥à¤Ÿà¥‡à¤‚ड"
-#: ../cli/src/connections.c:829 ../cli/src/connections.c:839
-#: ../cli/src/devices.c:594
+#: ../clients/cli/connections.c:651
+#| msgid "Connection details"
+msgid "Connection profile details"
+msgstr "कनेकà¥à¤¶à¤¨à¥à¤¸ पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤² विवरण"
+
+#: ../clients/cli/connections.c:663 ../clients/cli/connections.c:1015
+#, c-format
+#| msgid "Error: 'device show': %s"
+msgid "Error: 'connection show': %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'कनेकà¥à¤¶à¤¨ शो': %s"
+
+#: ../clients/cli/connections.c:807
+msgid "never"
+msgstr "कभी नहीं"
+
+#. "CAPABILITIES"
+#: ../clients/cli/connections.c:808 ../clients/cli/connections.c:809
+#: ../clients/cli/connections.c:811 ../clients/cli/connections.c:870
+#: ../clients/cli/connections.c:871 ../clients/cli/connections.c:873
+#: ../clients/cli/connections.c:2786 ../clients/cli/connections.c:6472
+#: ../clients/cli/connections.c:6473 ../clients/cli/devices.c:591
+#: ../clients/cli/devices.c:641 ../clients/cli/devices.c:784
+#: ../clients/cli/devices.c:785 ../clients/cli/devices.c:786
+#: ../clients/cli/devices.c:787 ../clients/cli/devices.c:820
+#: ../clients/cli/devices.c:822 ../clients/cli/devices.c:850
+#: ../clients/cli/devices.c:851 ../clients/cli/devices.c:852
+#: ../clients/cli/devices.c:853 ../clients/cli/devices.c:854
+#: ../clients/cli/devices.c:855 ../clients/cli/devices.c:856
+#: ../clients/cli/network-manager.c:440
+msgid "yes"
+msgstr "हाà¤"
+
+#: ../clients/cli/connections.c:808 ../clients/cli/connections.c:809
+#: ../clients/cli/connections.c:811 ../clients/cli/connections.c:870
+#: ../clients/cli/connections.c:871 ../clients/cli/connections.c:873
+#: ../clients/cli/connections.c:2787 ../clients/cli/connections.c:6472
+#: ../clients/cli/connections.c:6473 ../clients/cli/devices.c:591
+#: ../clients/cli/devices.c:641 ../clients/cli/devices.c:784
+#: ../clients/cli/devices.c:785 ../clients/cli/devices.c:786
+#: ../clients/cli/devices.c:787 ../clients/cli/devices.c:820
+#: ../clients/cli/devices.c:822 ../clients/cli/devices.c:850
+#: ../clients/cli/devices.c:851 ../clients/cli/devices.c:852
+#: ../clients/cli/devices.c:853 ../clients/cli/devices.c:854
+#: ../clients/cli/devices.c:855 ../clients/cli/devices.c:856
+#: ../clients/cli/network-manager.c:442
+msgid "no"
+msgstr "नहीं"
+
+#: ../clients/cli/connections.c:866 ../clients/cli/connections.c:876
+#: ../clients/cli/devices.c:581
msgid "N/A"
msgstr "N/A"
-#: ../cli/src/connections.c:1012
+#: ../clients/cli/connections.c:1003
+#| msgid "Active connection details"
+msgid "Activate connection details"
+msgstr "सकà¥à¤°à¤¿à¤¯ कनेकà¥à¤¶à¤¨ विवरण"
+
+#: ../clients/cli/connections.c:1236
#, c-format
-msgid "Error: 'list active': %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'सूची सकà¥à¤°à¤¿à¤¯': %s"
+#| msgid "invalid field '%s'; allowed fields: %s"
+msgid "invalid field '%s'; allowed fields: %s and %s, or %s,%s"
+msgstr "अवैध कà¥à¤·à¥‡à¤¤à¥à¤° '%s'; अनà¥à¤®à¤¤à¤¿à¤ªà¥à¤°à¤¾à¤ªà¥à¤¤ कà¥à¤·à¥‡à¤¤à¥à¤°: %s और %s, या %s,%s"
-#: ../cli/src/connections.c:1020
-msgid "Active connection details"
-msgstr "सकà¥à¤°à¤¿à¤¯ कनेकà¥à¤¶à¤¨ विवरण"
+#: ../clients/cli/connections.c:1251 ../clients/cli/connections.c:1259
+#, c-format
+#| msgid "field '%s' has to be alone"
+msgid "'%s' has to be alone"
+msgstr "%s' को अलग रहना है"
-#: ../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
+#: ../clients/cli/connections.c:1290 ../clients/cli/connections.c:2004
+#: ../clients/cli/connections.c:2064 ../clients/cli/connections.c:7973
+#: ../clients/cli/connections.c:8181 ../clients/cli/connections.c:8274
+#: ../clients/cli/connections.c:8302 ../clients/cli/devices.c:1186
+#: ../clients/cli/devices.c:1234 ../clients/cli/devices.c:1397
+#: ../clients/cli/devices.c:1531 ../clients/cli/devices.c:1625
+#: ../clients/cli/devices.c:1767 ../clients/cli/devices.c:2225
+#: ../clients/cli/devices.c:2524 ../clients/cli/network-manager.c:482
#, c-format
msgid "Error: NetworkManager is not running."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: यदि नेटवरà¥à¤•à¤ªà¥à¤°à¤¬à¤‚धक नहीं चल रहा है "
-#: ../cli/src/connections.c:1203
-msgid "List of active connections"
-msgstr "सकà¥à¤°à¤¿à¤¯ कनेकà¥à¤¶à¤¨ की सूची"
+#. Add headers
+#: ../clients/cli/connections.c:1320
+#| msgid "NetworkManager status"
+msgid "NetworkManager active profiles"
+msgstr "NetworkManager सकà¥à¤°à¤¿à¤¯ पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤²"
+
+#: ../clients/cli/connections.c:1321
+#| msgid "NetworkManager went to sleep"
+msgid "NetworkManager connection profiles"
+msgstr "NetworkManager कनेकà¥à¤¶à¤¨ पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤²"
+
+#: ../clients/cli/connections.c:1358 ../clients/cli/connections.c:1949
+#: ../clients/cli/connections.c:1965 ../clients/cli/connections.c:1974
+#: ../clients/cli/connections.c:1984 ../clients/cli/connections.c:2081
+#: ../clients/cli/connections.c:7989 ../clients/cli/connections.c:8212
+#: ../clients/cli/devices.c:1725 ../clients/cli/devices.c:1733
+#: ../clients/cli/devices.c:2138 ../clients/cli/devices.c:2145
+#: ../clients/cli/devices.c:2159 ../clients/cli/devices.c:2166
+#: ../clients/cli/devices.c:2183 ../clients/cli/devices.c:2191
+#: ../clients/cli/devices.c:2387 ../clients/cli/devices.c:2483
+#: ../clients/cli/devices.c:2490
+#, c-format
+msgid "Error: %s argument is missing."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: %s तरà¥à¤• अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤ है."
-#: ../cli/src/connections.c:1239 ../cli/src/connections.c:1926
+#: ../clients/cli/connections.c:1409
#, 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:1251
+#: ../clients/cli/connections.c:1425 ../clients/cli/connections.c:2017
+#: ../clients/cli/connections.c:8280 ../clients/cli/connections.c:8321
+#: ../clients/cli/connections.c:8513 ../clients/cli/devices.c:2366
+#: ../clients/cli/devices.c:2829 ../clients/cli/network-manager.c:537
+#: ../clients/cli/network-manager.c:580 ../clients/cli/network-manager.c:597
+#: ../clients/cli/network-manager.c:644 ../clients/cli/network-manager.c:658
+#: ../clients/cli/network-manager.c:775 ../clients/cli/network-manager.c:819
+#: ../clients/cli/network-manager.c:839
#, c-format
-msgid "Error: 'show active': %s"
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'सकà¥à¤°à¤¿à¤¯ दिखाà¤à¤': %s"
+msgid "Error: %s."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: %s."
-#: ../cli/src/connections.c:1344
+#: ../clients/cli/connections.c:1520
#, c-format
msgid "no active connection on device '%s'"
msgstr "यà¥à¤•à¥à¤¤à¤¿ '%s' पर कोई सकà¥à¤°à¤¿à¤¯ कनेकà¥à¤¶à¤¨ नहीं"
-#: ../cli/src/connections.c:1352
+#: ../clients/cli/connections.c:1528
msgid "no active connection or device"
msgstr "कोई सकà¥à¤°à¤¿à¤¯ कनेकà¥à¤¶à¤¨ या यà¥à¤•à¥à¤¤à¤¿ नहीं"
-#: ../cli/src/connections.c:1423
+#: ../clients/cli/connections.c:1599
#, c-format
msgid "device '%s' not compatible with connection '%s'"
msgstr "यà¥à¤•à¥à¤¤à¤¿ '%s' '%s' के साथ संगत नहीं है"
-#: ../cli/src/connections.c:1426
+#: ../clients/cli/connections.c:1602
#, c-format
msgid "no device found for connection '%s'"
msgstr "'%s' कनेकà¥à¤¶à¤¨ के लिठकोई यà¥à¤•à¥à¤¤à¤¿ नहीं मिला"
-#: ../cli/src/connections.c:1438
+#: ../clients/cli/connections.c:1614
msgid "unknown reason"
msgstr "अजà¥à¤žà¤¾à¤¤ कारण"
-#: ../cli/src/connections.c:1440 ../cli/src/network-manager.c:288
+#: ../clients/cli/connections.c:1616 ../clients/cli/network-manager.c:286
msgid "none"
msgstr "कà¥à¤› नहीं"
-#: ../cli/src/connections.c:1442
+#: ../clients/cli/connections.c:1618
msgid "the user was disconnected"
msgstr "उपयोकà¥à¤¤à¤¾ डिसकनेकà¥à¤Ÿ किया गया था"
-#: ../cli/src/connections.c:1444
+#: ../clients/cli/connections.c:1620
msgid "the base network connection was interrupted"
msgstr "मौलिक संजाल कनेकà¥à¤¶à¤¨ में बाधा आई थी"
-#: ../cli/src/connections.c:1446
+#: ../clients/cli/connections.c:1622
msgid "the VPN service stopped unexpectedly"
msgstr "VPN सेवा अचानक रà¥à¤• गई"
-#: ../cli/src/connections.c:1448
+#: ../clients/cli/connections.c:1624
msgid "the VPN service returned invalid configuration"
msgstr "VPN सेवा ने अवैध विनà¥à¤¯à¤¾à¤¸ वापस किया"
-#: ../cli/src/connections.c:1450
+#: ../clients/cli/connections.c:1626
msgid "the connection attempt timed out"
msgstr "कनेकà¥à¤¶à¤¨ पà¥à¤°à¤¯à¤¾à¤¸ का समय समापà¥à¤¤"
-#: ../cli/src/connections.c:1452
+#: ../clients/cli/connections.c:1628
msgid "the VPN service did not start in time"
msgstr "VPN सेवा समय पर आरंभ नहीं हà¥à¤†"
-#: ../cli/src/connections.c:1454
+#: ../clients/cli/connections.c:1630
msgid "the VPN service failed to start"
msgstr "VPN सेवा आरंभ होने में विफल रहा"
-#: ../cli/src/connections.c:1456
+#: ../clients/cli/connections.c:1632
msgid "no valid VPN secrets"
msgstr "कोई वैध VPN गà¥à¤ªà¥à¤¤ नहीं"
-#: ../cli/src/connections.c:1458
+#: ../clients/cli/connections.c:1634
msgid "invalid VPN secrets"
msgstr "अवैध VPN गà¥à¤ªà¥à¤¤"
-#: ../cli/src/connections.c:1460
+#: ../clients/cli/connections.c:1636
msgid "the connection was removed"
msgstr "कनेकà¥à¤¶à¤¨ हटाया गया था"
-#: ../cli/src/connections.c:1477 ../cli/src/connections.c:1633
-#: ../cli/src/connections.c:6016
+#: ../clients/cli/connections.c:1658 ../clients/cli/connections.c:1686
+#: ../clients/cli/connections.c:1831 ../clients/cli/connections.c:6368
#, c-format
msgid "Connection successfully activated (D-Bus active path: %s)\n"
msgstr "कनेकà¥à¤¶à¤¨ सफलतापूरà¥à¤µà¤• सकà¥à¤°à¤¿à¤¯ किया गया (डी बस सकà¥à¤°à¤¿à¤¯ पथ: %s)\n"
-#: ../cli/src/connections.c:1482
+#: ../clients/cli/connections.c:1665
+#, c-format
+#| msgid "Connection successfully activated (D-Bus active path: %s)\n"
+msgid ""
+"Connection successfully activated (master waiting for slaves) (D-Bus active "
+"path: %s)\n"
+msgstr ""
+"कनेकà¥à¤¶à¤¨ सफलतापूरà¥à¤µà¤• सकà¥à¤°à¤¿à¤¯ किया गया (मासà¥à¤Ÿà¤° सà¥à¤²à¥‡à¤µ के लिठपà¥à¤°à¤¤à¥€à¤•à¥à¤·à¤¾à¤°à¤¤) (डी बस "
+"सकà¥à¤°à¤¿à¤¯ पथ: %s)\n"
+
+#: ../clients/cli/connections.c:1669 ../clients/cli/connections.c:1691
#, c-format
msgid "Error: Connection activation failed."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कनेकà¥à¤¶à¤¨ सकà¥à¤°à¤¿à¤¯ किया जाना विफल."
-#: ../cli/src/connections.c:1507
+#: ../clients/cli/connections.c:1734
#, c-format
msgid "VPN connection successfully activated (D-Bus active path: %s)\n"
msgstr "VPN कनेकà¥à¤¶à¤¨ सफलतापूरà¥à¤µà¤• सकà¥à¤°à¤¿à¤¯ किया गया (डी बस सकà¥à¤°à¤¿à¤¯ पथ: %s)\n"
-#: ../cli/src/connections.c:1514
+#: ../clients/cli/connections.c:1741
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कनेकà¥à¤¶à¤¨ सकà¥à¤°à¤¿à¤¯à¤•à¤°à¤£ विफल: %s."
-#: ../cli/src/connections.c:1532 ../cli/src/devices.c:1294
+#: ../clients/cli/connections.c:1759 ../clients/cli/devices.c:1283
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: समय समापà¥à¤¤à¤¿ %d सेकेंड में समापà¥à¤¤."
-#: ../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
+#: ../clients/cli/connections.c:1815
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कनेकà¥à¤¶à¤¨ सकà¥à¤°à¤¿à¤¯à¤•à¤°à¤£ विफल: %s"
-#: ../cli/src/connections.c:1722 ../cli/src/connections.c:1854
+#: ../clients/cli/connections.c:1888 ../clients/cli/connections.c:2018
msgid "unknown error"
msgstr "अजà¥à¤žà¤¾à¤¤ तà¥à¤°à¥à¤Ÿà¤¿"
-#: ../cli/src/connections.c:1730
+#: ../clients/cli/connections.c:1896
#, c-format
msgid "unknown device '%s'."
msgstr "अजà¥à¤žà¤¾à¤¤ यà¥à¤•à¥à¤¤à¤¿ '%s'."
-#: ../cli/src/connections.c:1735
+#: ../clients/cli/connections.c:1901
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
+#: ../clients/cli/connections.c:1993 ../clients/cli/devices.c:1160
+#: ../clients/cli/devices.c:1739 ../clients/cli/devices.c:2202
+#: ../clients/cli/devices.c:2496
#, c-format
msgid "Unknown parameter: %s\n"
msgstr "अजà¥à¤žà¤¾à¤¤ पैरामीटर: %s\n"
-#: ../cli/src/connections.c:1862
+#: ../clients/cli/connections.c:2026
msgid "preparing"
msgstr "तैयारी"
-#: ../cli/src/connections.c:1889 ../cli/src/connections.c:7719
-#: ../cli/src/connections.c:7832
+#: ../clients/cli/connections.c:2054 ../clients/cli/connections.c:8193
+#: ../clients/cli/connections.c:8308
#, c-format
msgid "Error: No connection specified."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कोई कनेकà¥à¤¶à¤¨ निरà¥à¤¦à¤¿à¤·à¥à¤Ÿ नहीं."
-#: ../cli/src/connections.c:2237 ../cli/src/utils.c:490
+#: ../clients/cli/connections.c:2091
+#, c-format
+msgid "Error: '%s' is not an active connection."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿:कोई '%s' सकà¥à¤°à¤¿à¤¯ कनेकà¥à¤¶à¤¨ नहीं है."
+
+#: ../clients/cli/connections.c:2392 ../clients/cli/utils.c:514
#, c-format
msgid "'%s' not among [%s]"
msgstr "'%s' [%s] में से नहीं"
-#: ../cli/src/connections.c:2319
+#: ../clients/cli/connections.c:2471
#, c-format
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
+#. Ask for optional arguments
+#: ../clients/cli/connections.c:2472 ../clients/cli/connections.c:2902
+#: ../clients/tui/nm-editor-utils.c:164 ../libnm-core/nm-connection.c:1511
+#: ../libnm-glib/nm-device.c:1800
msgid "InfiniBand"
msgstr "InfiniBand"
-#: ../cli/src/connections.c:2320 ../tui/nm-editor-utils.c:156
-#: ../tui/nm-ui-utils.c:335
+#: ../clients/cli/connections.c:2472 ../clients/tui/nm-editor-utils.c:147
+#: ../libnm-glib/nm-device.c:1788
msgid "Ethernet"
msgstr "ईथरनेट"
-#: ../cli/src/connections.c:2343
+#: ../clients/cli/connections.c:2492
#, c-format
msgid "Error: 'mtu': '%s' is not a valid MTU."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'mtu': '%s' à¤à¤• वैध MTU नहीं है."
-#: ../cli/src/connections.c:2359
+#: ../clients/cli/connections.c:2508
#, c-format
msgid "Error: 'parent': '%s' is not a valid interface name."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'parent': à¤à¤• '%s' वैध अंतरफलक नाम नहीं है."
-#: ../cli/src/connections.c:2380
+#: ../clients/cli/connections.c:2529
#, 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:2396
+#: ../clients/cli/connections.c:2558
#, c-format
msgid ""
"Error: 'mode': '%s' is not a valid InfiniBand transport mode [datagram, "
"connected]."
msgstr ""
-"तà¥à¤°à¥à¤Ÿà¤¿: 'mode': '%s' à¤à¤• वैध InfiniBand परिवहन विधि [datagram, connected] "
-"नहीं है."
+"तà¥à¤°à¥à¤Ÿà¤¿: 'mode': '%s' à¤à¤• वैध InfiniBand परिवहन विधि [datagram, connected] नहीं "
+"है."
-#: ../cli/src/connections.c:2412
+#: ../clients/cli/connections.c:2572
#, c-format
msgid "Error: 'flags': '%s' is not valid; use <0-7>."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'flags': '%s' वैध नहीं है; <0-7> उपयोग करें."
-#: ../cli/src/connections.c:2434
+#: ../clients/cli/connections.c:2594
#, c-format
msgid "Error: '%s': '%s' is not valid; %s "
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s': '%s' वैध नहीं है; %s "
-#: ../cli/src/connections.c:2541
+#: ../clients/cli/connections.c:2777
#, c-format
msgid "Error: '%s': '%s' is not valid; use <%u-%u>."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s': '%s' वैध नहीं है; <%u-%u> का उपयोग करें."
-#: ../cli/src/connections.c:2555
+#. Ask for optional arguments.
+#: ../clients/cli/connections.c:2833
+#, 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] "%d वैकलà¥à¤ªà¤¿à¤• वितरà¥à¤• हैं '%s' कनेकà¥à¤¶à¤¨ पà¥à¤°à¤•à¤¾à¤° के लिà¤.\n"
+msgstr[1] "%d वैकलà¥à¤ªà¤¿à¤• वितरà¥à¤• हैं '%s' कनेकà¥à¤¶à¤¨ पà¥à¤°à¤•à¤¾à¤° के लिà¤.\n"
+
+#: ../clients/cli/connections.c:2836
+#, 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"
+
+#: ../clients/cli/connections.c:2851
msgid "ethernet"
msgstr "ईथरनेट"
-#: ../cli/src/connections.c:2555 ../tui/nm-editor-utils.c:164
-#: ../tui/nm-ui-utils.c:337
+#: ../clients/cli/connections.c:2851 ../clients/tui/nm-editor-utils.c:155
+#: ../libnm-glib/nm-device.c:1790
msgid "Wi-Fi"
msgstr "वाई-फाई"
-#: ../cli/src/connections.c:2558
-#, c-format
-msgid "There are 3 optional arguments for '%s' connection type.\n"
-msgstr "3 वैकलà¥à¤ªà¤¿à¤• वितरà¥à¤• हैं '%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 "कà¥à¤¯à¤¾ आप उनà¥à¤¹à¥‡à¤‚ पà¥à¤°à¤¦à¤¾à¤¨ करना चाहते हैं? (हाà¤/नहीं) [हाà¤] "
-
-#: ../cli/src/connections.c:2567 ../cli/src/connections.c:2621
-#: ../cli/src/connections.c:2748 ../cli/src/connections.c:2849
+#: ../clients/cli/connections.c:2859 ../clients/cli/connections.c:2907
+#: ../clients/cli/connections.c:3016 ../clients/cli/connections.c:3095
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
+#: ../clients/cli/connections.c:2870 ../clients/cli/connections.c:2918
+#: ../clients/cli/connections.c:2988 ../clients/cli/connections.c:3027
+#: ../clients/cli/connections.c:3382
msgid "MAC [none]: "
msgstr "MAC [none]: "
-#: ../cli/src/connections.c:2589
+#: ../clients/cli/connections.c:2881
msgid "Cloned MAC [none]: "
msgstr "कà¥à¤²à¥‹à¤¨ MAC [none]: "
-#: ../cli/src/connections.c:2612
+#: ../clients/cli/connections.c:2929
#, c-format
-msgid "There are 5 optional arguments for 'InfiniBand' connection type.\n"
-msgstr "5 वैकलà¥à¤ªà¤¿à¤• वितरà¥à¤• हैं 'InfiniBand' कनेकà¥à¤¶à¤¨ पà¥à¤°à¤•à¤¾à¤° के लिà¤.\n"
-
-#: ../cli/src/connections.c:2643
-msgid "Transport mode (datagram or connected) [datagram]: "
-msgstr "परिवहन विधि (डेटागà¥à¤°à¤¾à¤® या कनेकà¥à¤Ÿà¥‡à¤¡) [datagram]: "
+#| msgid "Transport mode"
+msgid "Transport mode %s"
+msgstr "परिवहन अवसà¥à¤¥à¤¾ %s"
-#: ../cli/src/connections.c:2656
+#: ../clients/cli/connections.c:2942
msgid "Parent interface [none]: "
msgstr "जनक अंतरफलक [कोई नहीं]:"
-#: ../cli/src/connections.c:2667
+#: ../clients/cli/connections.c:2953
msgid "P_KEY [none]: "
msgstr "P_KEY [none]: "
-#: ../cli/src/connections.c:2677
+#: ../clients/cli/connections.c:2963
#, 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"
+#. Ask for optional 'wimax' arguments.
+#: ../clients/cli/connections.c:2983 ../libnm-glib/nm-device.c:1796
+msgid "WiMAX"
+msgstr "WiMAX"
-#: ../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 "कà¥à¤¯à¤¾ आप इसे पà¥à¤°à¤¦à¤¾à¤¨ करना चाहते हैं? (हाà¤/नहीं) [हाà¤]"
+#. Ask for optional 'pppoe' arguments.
+#: ../clients/cli/connections.c:3006
+msgid "PPPoE"
+msgstr "PPPoE"
-#: ../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
+#: ../clients/cli/connections.c:3010 ../clients/cli/connections.c:3048
msgid "Password [none]: "
msgstr "कूटशबà¥à¤¦ [कोई नहीं]:"
-#: ../cli/src/connections.c:2744
+#: ../clients/cli/connections.c:3012
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"
+#. Ask for optional 'gsm' or 'cdma' arguments.
+#: ../clients/cli/connections.c:3042
+#| msgid "Mobile Broadband"
+msgid "mobile broadband"
+msgstr "मोबाइल बà¥à¤°à¥‰à¤¡à¤¬à¥ˆà¤‚ड"
-#: ../cli/src/connections.c:2788 ../cli/src/connections.c:3233
+#: ../clients/cli/connections.c:3046 ../clients/cli/connections.c:3454
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"
+#. Ask for optional 'bluetooth' arguments.
+#: ../clients/cli/connections.c:3061
+#| msgid "Bluetooth"
+msgid "bluetooth"
+msgstr "बà¥à¤²à¥‚टूथ"
-#: ../cli/src/connections.c:2813
-msgid "Bluetooth type (panu, dun-gsm or dun-cdma) [panu]: "
-msgstr "बà¥à¤²à¥‚टूथ किसà¥à¤® (panu, dun-gsm or dun-cdma) [panu]: "
+#: ../clients/cli/connections.c:3068
+#, c-format
+#| msgid "Bluetooth"
+msgid "Bluetooth type %s"
+msgstr "बà¥à¤²à¥‚टूथ किसà¥à¤® %s"
-#: ../cli/src/connections.c:2821
+#: ../clients/cli/connections.c:3074
#, 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"
+#. Ask for optional 'vlan' arguments.
+#. 11
+#: ../clients/cli/connections.c:3090 ../clients/cli/devices.c:219
+#: ../clients/tui/nm-editor-utils.c:218 ../clients/tui/nmt-page-vlan.c:51
+#: ../libnm-core/nm-connection.c:1509 ../libnm-glib/nm-device.c:1808
+#: ../libnm-util/nm-connection.c:1612
+msgid "VLAN"
+msgstr "VLAN"
-#: ../cli/src/connections.c:2860
+#: ../clients/cli/connections.c:3106
msgid "VLAN flags (<0-7>) [none]: "
msgstr "VLAN फà¥à¤²à¥ˆà¤— (<0-7>) [none]: "
-#: ../cli/src/connections.c:2871
+#: ../clients/cli/connections.c:3117
msgid "Ingress priority maps [none]: "
msgstr "पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤•à¤¤à¤¾ मैप [कोई नहीं]: "
-#: ../cli/src/connections.c:2882
+#: ../clients/cli/connections.c:3128
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
+#: ../clients/cli/connections.c:3139
msgid "Bonding mode [balance-rr]: "
msgstr "बांडिंग अवसà¥à¤¥à¤¾ [balance-rr]: "
-#: ../cli/src/connections.c:2934
+#. Ask for optional 'bond' arguments.
+#: ../clients/cli/connections.c:3154
+msgid "bond"
+msgstr "बॉनà¥à¤¡"
+
+#: ../clients/cli/connections.c:3176
msgid "Bonding primary interface [none]: "
msgstr "बांडिंग पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤• अंतरफलक [कोई नहीं]: "
-#: ../cli/src/connections.c:2937
+#: ../clients/cli/connections.c:3179
#, 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]: "
+#: ../clients/cli/connections.c:3187
+#, c-format
+#| msgid "Link monitoring"
+msgid "Bonding monitoring mode %s"
+msgstr "बाà¤à¤¡à¤¿à¤‚ग मॉनिटरिंग अवसà¥à¤¥à¤¾ %s"
-#: ../cli/src/connections.c:2950
+#: ../clients/cli/connections.c:3193
#, 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
+#: ../clients/cli/connections.c:3202
msgid "Bonding miimon [100]: "
msgstr "बांडिंग miimon [100]: "
-#: ../cli/src/connections.c:2962
+#: ../clients/cli/connections.c:3205
#, 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
+#: ../clients/cli/connections.c:3213
msgid "Bonding downdelay [0]: "
msgstr "बांडिंग downdelay [0]: "
-#: ../cli/src/connections.c:2973
+#: ../clients/cli/connections.c:3216
#, 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
+#: ../clients/cli/connections.c:3224
msgid "Bonding updelay [0]: "
msgstr "बांडिंग updelay [0]: "
-#: ../cli/src/connections.c:2984
+#: ../clients/cli/connections.c:3227
#, 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
+#: ../clients/cli/connections.c:3236
msgid "Bonding arp-interval [0]: "
msgstr "बांडिंग arp-interval [0]: "
-#: ../cli/src/connections.c:2996
+#: ../clients/cli/connections.c:3239
#, 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
+#. FIXME: verify the string
+#: ../clients/cli/connections.c:3247
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
+#: ../clients/cli/connections.c:3267
msgid "Team JSON configuration [none]: "
msgstr "टीम JSON विनà¥à¤¯à¤¾à¤¸ [कोई नहीं]: "
-#: ../cli/src/connections.c:3051
+#: ../clients/cli/connections.c:3284
msgid "team"
msgstr "टोली"
-#: ../cli/src/connections.c:3057
+#: ../clients/cli/connections.c:3290
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"
+#. Ask for optional 'bridge' arguments.
+#: ../clients/cli/connections.c:3302
+#| msgid "Bridge"
+msgid "bridge"
+msgstr "पà¥à¤²"
-#: ../cli/src/connections.c:3081
-msgid "Enable STP (yes/no) [yes]: "
-msgstr "STP सकà¥à¤°à¤¿à¤¯ करें (हाà¤/नहीं) [हाà¤]: "
+#: ../clients/cli/connections.c:3308
+#, c-format
+#| msgid "Enable STP (yes/no) [yes]: "
+msgid "Enable STP %s"
+msgstr "STP सकà¥à¤°à¤¿à¤¯ करें %s"
-#: ../cli/src/connections.c:3085
+#: ../clients/cli/connections.c:3313
#, c-format
-msgid "Error: 'stp': '%s'.\n"
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'stp': '%s'.\n"
+#| msgid "Error: 'stp': %s."
+msgid "Error: 'stp': %s.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'stp': %s.\n"
-#: ../cli/src/connections.c:3093
-msgid "STP priority [128]: "
-msgstr "STP पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤•à¤¤à¤¾ [128]: "
+#: ../clients/cli/connections.c:3321
+#| msgid "STP priority [128]: "
+msgid "STP priority [32768]: "
+msgstr "STP पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤•à¤¤à¤¾ [32768]:"
-#: ../cli/src/connections.c:3097
+#: ../clients/cli/connections.c:3325
#, 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
+#: ../clients/cli/connections.c:3333
msgid "Forward delay [15]: "
msgstr "अगà¥à¤°à¥‡à¤·à¤¿à¤¤ विलंब [15]:"
-#: ../cli/src/connections.c:3109
+#: ../clients/cli/connections.c:3337
#, 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
+#: ../clients/cli/connections.c:3346
msgid "Hello time [2]: "
msgstr "हेलो समय [2]: "
-#: ../cli/src/connections.c:3122
+#: ../clients/cli/connections.c:3350
#, 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
+#: ../clients/cli/connections.c:3358
msgid "Max age [20]: "
msgstr "अधिकतम आयॠ[20]: "
-#: ../cli/src/connections.c:3134
+#: ../clients/cli/connections.c:3362
#, 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
+#: ../clients/cli/connections.c:3370
msgid "MAC address ageing time [300]: "
msgstr "MAC पता उमà¥à¤° समय [300]: "
-#: ../cli/src/connections.c:3146
+#: ../clients/cli/connections.c:3374
#, 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"
+#. Ask for optional 'bridge-slave' arguments.
+#: ../clients/cli/connections.c:3401
+#| msgid "team-slave"
+msgid "bridge-slave"
+msgstr "bridge-slave"
-#: ../cli/src/connections.c:3176
+#: ../clients/cli/connections.c:3406
msgid "Bridge port priority [32]: "
msgstr "बà¥à¤°à¤¿à¤œ पोरà¥à¤Ÿ पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤•à¤¤à¤¾ [32]: "
-#: ../cli/src/connections.c:3189
+#: ../clients/cli/connections.c:3419
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
+#: ../clients/cli/connections.c:3433
#, c-format
-msgid "Error: 'hairpin': '%s'.\n"
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'hairpin': '%s'.\n"
+#| msgid "Hairpin mode"
+msgid "Hairpin %s"
+msgstr "हेयरपिन %s"
-#: ../cli/src/connections.c:3225
+#: ../clients/cli/connections.c:3438
#, c-format
-msgid "There is 1 optional argument for 'VPN' connection type.\n"
-msgstr "1 वैकलà¥à¤ªà¤¿à¤• वितरà¥à¤• हैं 'वीपीà¤à¤¨' कनेकà¥à¤¶à¤¨ पà¥à¤°à¤•à¤¾à¤° के लिà¤.\n"
+#| msgid "Error: 'hairpin': %s."
+msgid "Error: 'hairpin': %s.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'hairpin': %s.\n"
-#: ../cli/src/connections.c:3249
-#, c-format
-msgid "There are 2 optional arguments for 'OLPC Mesh' connection type.\n"
-msgstr "2 वैकलà¥à¤ªà¤¿à¤• वितरà¥à¤• हैं 'ओà¤à¤²à¤ªà¥€à¤¸à¥€ मेश' कनेकà¥à¤¶à¤¨ पà¥à¤°à¤•à¤¾à¤° के लिà¤.\n"
+#. Ask for optional 'olpc' arguments.
+#: ../clients/cli/connections.c:3465 ../libnm-glib/nm-device.c:1794
+msgid "OLPC Mesh"
+msgstr "OLPC जाल"
-#: ../cli/src/connections.c:3258
+#: ../clients/cli/connections.c:3470
msgid "OLPC Mesh channel [1]: "
-msgstr "OLPC मेश चैनल [1]: "
+msgstr "OLPC मेश चैनल [1]:"
-#: ../cli/src/connections.c:3261
+#: ../clients/cli/connections.c:3473
#, 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
+#: ../clients/cli/connections.c:3481
msgid "DHCP anycast MAC address [none]: "
msgstr "DHCP anycast MAC पता [none]: "
-#: ../cli/src/connections.c:3317
+#: ../clients/cli/connections.c:3526
msgid "IPv4 address (IP[/plen] [gateway]) [none]: "
msgstr "IPv4 पता (IP[/plen] [gateway]) [none]: "
-#: ../cli/src/connections.c:3319
+#: ../clients/cli/connections.c:3528
msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
msgstr "IPv6 पता (IP[/plen] [gateway]) [none]: "
-#: ../cli/src/connections.c:3337
+#: ../clients/cli/connections.c:3546
#, c-format
msgid " Address successfully added: %s %s\n"
msgstr " पता सफलतापूरà¥à¤µà¤• जोड़ा गया: %s %s\n"
-#: ../cli/src/connections.c:3339
+#: ../clients/cli/connections.c:3548
#, c-format
msgid " Warning: address already present: %s %s\n"
msgstr " चेतावनी: पता पहले से मौजूद: %s %s\n"
-#: ../cli/src/connections.c:3341
+#: ../clients/cli/connections.c:3550
#, 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
+#: ../clients/cli/connections.c:3552 ../clients/cli/connections.c:4375
+#: ../clients/cli/connections.c:4436 ../clients/cli/connections.c:4838
+#: ../clients/cli/connections.c:4848
msgid "Error: "
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: "
-#: ../cli/src/connections.c:3361
-msgid "Do you want to add IP addresses? (yes/no) [yes] "
-msgstr "कà¥à¤¯à¤¾ आप IP पता जोड़ना चाहते हैं? (yes/no) [yes]"
+#. Ask for IP addresses
+#: ../clients/cli/connections.c:3569
+#, 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:3367
+#: ../clients/cli/connections.c:3576
#, c-format
msgid "Press <Enter> to finish adding addresses.\n"
msgstr "<Enter> को पता जोड़ने के लिठदबाà¤à¤.\n"
-#: ../cli/src/connections.c:3513
+#: ../clients/cli/connections.c:3715
#, c-format
msgid "Error: 'parent': not valid without 'p-key'."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'parent': 'p-key' बिना मानà¥à¤¯ नहीं."
-#: ../cli/src/connections.c:3569 ../cli/src/connections.c:4562
+#: ../clients/cli/connections.c:3767 ../clients/cli/connections.c:4757
msgid "SSID: "
msgstr "SSID:"
-#: ../cli/src/connections.c:3572 ../cli/src/connections.c:4565
+#: ../clients/cli/connections.c:3770 ../clients/cli/connections.c:4760
msgid "Error: 'ssid' is required."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'ssid' जरूरी है."
-#: ../cli/src/connections.c:3636
+#: ../clients/cli/connections.c:3827
msgid "WiMAX NSP name: "
msgstr "WiMAX NSP नाम: "
-#: ../cli/src/connections.c:3639
+#: ../clients/cli/connections.c:3830
msgid "Error: 'nsp' is required."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'nsp' जरूरी है."
-#: ../cli/src/connections.c:3694
+#: ../clients/cli/connections.c:3882
msgid "PPPoE username: "
msgstr "PPPoE उपयोकà¥à¤¤à¤¾à¤¨à¤¾à¤®: "
-#: ../cli/src/connections.c:3697
+#: ../clients/cli/connections.c:3885
msgid "Error: 'username' is required."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'username' जरूरी है."
-#: ../cli/src/connections.c:3768
+#: ../clients/cli/connections.c:3954
msgid "APN: "
msgstr "APN: "
-#: ../cli/src/connections.c:3771
+#: ../clients/cli/connections.c:3957
msgid "Error: 'apn' is required."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'apn' जरूरी है."
-#: ../cli/src/connections.c:3830
+#: ../clients/cli/connections.c:4015
msgid "Bluetooth device address: "
msgstr "बà¥à¤²à¥‚टूथ यà¥à¤•à¥à¤¤à¤¿ पता:"
-#: ../cli/src/connections.c:3833
+#: ../clients/cli/connections.c:4018
msgid "Error: 'addr' is required."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'addr' जरूरी है."
-#: ../cli/src/connections.c:3876
+#: ../clients/cli/connections.c:4059
#, 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
+#: ../clients/cli/connections.c:4103
msgid "VLAN parent device or connection UUID: "
msgstr "VLAN जनक यà¥à¤•à¥à¤¤à¤¿ या कनेकà¥à¤¶à¤¨ यà¥à¤•à¥à¤¤à¤¿ UUID:"
-#: ../cli/src/connections.c:3924
+#: ../clients/cli/connections.c:4106
msgid "Error: 'dev' is required."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'dev' जरूरी है."
-#: ../cli/src/connections.c:3928
+#: ../clients/cli/connections.c:4110
msgid "VLAN ID <0-4095>: "
msgstr "VLAN ID <0-4095>:"
-#: ../cli/src/connections.c:3931
+#: ../clients/cli/connections.c:4113
msgid "Error: 'id' is required."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'id' जरूरी है."
-#: ../cli/src/connections.c:3937
+#: ../clients/cli/connections.c:4119
#, c-format
msgid "Error: 'id': '%s' is not valid; use <0-4095>."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'id': '%s' वैध नहीं है; <0-4095> का उपयोग करें."
-#: ../cli/src/connections.c:3947
+#: ../clients/cli/connections.c:4129
#, c-format
msgid "Error: 'dev': '%s' is neither UUID, interface name, nor MAC."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'dev': '%s' न तो UUID है, अंतरफलक नाम, न ही MAC."
-#: ../cli/src/connections.c:4082
+#: ../clients/cli/connections.c:4258
#, c-format
msgid "Error: 'mode': %s."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'mode': %s."
-#: ../cli/src/connections.c:4091
+#: ../clients/cli/connections.c:4267
#, 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
+#: ../clients/cli/connections.c:4316 ../clients/cli/connections.c:4414
+#: ../clients/cli/connections.c:4616
msgid "Error: 'master' is required."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'master' जरूरी है."
-#: ../cli/src/connections.c:4142 ../cli/src/connections.c:4239
-#: ../cli/src/connections.c:4427
+#: ../clients/cli/connections.c:4322 ../clients/cli/connections.c:4420
+#: ../clients/cli/connections.c:4622
+#, c-format
+msgid "Warning: master='%s' doesn't refer to any existing profile.\n"
+msgstr "चेतावनी: master='%s' मौजूदा पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² का संदरà¥à¤­ नहीं रखता है.\n"
+
+#: ../clients/cli/connections.c:4325 ../clients/cli/connections.c:4428
+#: ../clients/cli/connections.c:4625
#, c-format
msgid ""
"Warning: 'type' is currently ignored. We only support ethernet slaves for "
@@ -1812,102 +2128,106 @@ msgstr ""
"चेतावनी: 'type' अभी अनदेखा किया गया है. हम केवल इथरनेट सà¥à¤²à¥‡à¤µ अभी समरà¥à¤¥à¤¨ करते "
"हैं.\n"
-#: ../cli/src/connections.c:4226
-msgid "Team master: "
-msgstr "टीम मासà¥à¤Ÿà¤°: "
-
-#: ../cli/src/connections.c:4329
+#: ../clients/cli/connections.c:4522
#, 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
+#: ../clients/cli/connections.c:4652
#, c-format
msgid "Error: 'hairpin': %s."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'hairpin': %s."
-#: ../cli/src/connections.c:4506
-msgid "VPN type: "
-msgstr "VPN पà¥à¤°à¤•à¤¾à¤°:"
-
-#: ../cli/src/connections.c:4509
+#: ../clients/cli/connections.c:4705
msgid "Error: 'vpn-type' is required."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'vpn-type' जरूरी है."
-#: ../cli/src/connections.c:4520
+#: ../clients/cli/connections.c:4712
#, c-format
-msgid "Error: 'vpn-type': %s."
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'vpn-type': %s."
+#| msgid "Error: 'vpn-type': %s."
+msgid "Warning: 'vpn-type': %s not known.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'vpn-type': %s नहीं जà¥à¤žà¤¾à¤¤\n"
-#: ../cli/src/connections.c:4578
+#: ../clients/cli/connections.c:4773
#, c-format
msgid "Error: 'channel': '%s' is not valid; use <1-13>."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'channel': '%s' वैध नहीं है; <1-13> उपयोग करें."
-#: ../cli/src/connections.c:4613
+#: ../clients/cli/connections.c:4805
#, c-format
msgid "Error: '%s' is not a valid connection type."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' à¤à¤• वैध कनेकà¥à¤¶à¤¨ किसà¥à¤® नहीं है."
-#: ../cli/src/connections.c:4711
+#: ../clients/cli/connections.c:4903
#, c-format
msgid "Error: Failed to add '%s' connection: (%d) %s"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' कनेकà¥à¤¶à¤¨ को जोड़ने में विफल : (%d) %s"
-#: ../cli/src/connections.c:4715
+#: ../clients/cli/connections.c:4907
#, 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
+#: ../clients/cli/connections.c:5121
#, c-format
msgid "Error: 'type' argument is required."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'type' वितरà¥à¤• जरूरी है."
-#: ../cli/src/connections.c:4771
+#: ../clients/cli/connections.c:5129
#, c-format
msgid "Error: invalid connection type; %s."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अवैध कनेकà¥à¤¶à¤¨ किसà¥à¤®; %s."
-#: ../cli/src/connections.c:4780
+#: ../clients/cli/connections.c:5138
#, c-format
msgid "Error: 'autoconnect': %s."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'autoconnect': %s."
-#: ../cli/src/connections.c:4796
+#: ../clients/cli/connections.c:5148
+#, c-format
+#| msgid "Error: 'stp': %s."
+msgid "Error: 'save': %s."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'सहेजें': %s."
+
+#: ../clients/cli/connections.c:5164
msgid "Interface name [*]: "
msgstr "अंतरफलक नाम [*]:"
-#: ../cli/src/connections.c:4801
+#: ../clients/cli/connections.c:5169
#, c-format
msgid "Error: 'ifname' argument is required."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'ifname' वितरà¥à¤• जरूरी है."
-#: ../cli/src/connections.c:4808
+#: ../clients/cli/connections.c:5176
#, c-format
msgid "Error: 'ifname': '%s' is not a valid interface nor '*'."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'ifname': '%s' à¤à¤• वैध अंतरफलक नाम नहीं है न ही '*'."
-#: ../cli/src/connections.c:5627
+#: ../clients/cli/connections.c:5964
#, c-format
msgid "['%s' setting values]\n"
msgstr "['%s' सेटिंग मान]\n"
-#: ../cli/src/connections.c:5708
-#, c-format
+#. TRANSLATORS: do not translate command names and keywords before ::
+#. * However, you should translate terms enclosed in <>.
+#.
+#: ../clients/cli/connections.c:6046
+#, 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"
@@ -1915,9 +2235,9 @@ msgid ""
"value\n"
"set [<setting>.<prop> <value>] :: set property value\n"
"describe [<setting>.<prop>] :: describe property\n"
-"print [all] :: print the connection\n"
+"print [all | <setting>[.<prop>]] :: print the connection\n"
"verify [all] :: verify the connection\n"
-"save :: save 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"
@@ -1930,16 +2250,16 @@ msgstr ""
"value\n"
"set [<setting>.<prop> <value>] :: set property value\n"
"describe [<setting>.<prop>] :: describe property\n"
-"print [all] :: print the connection\n"
+"print [all | <setting>[.<prop>]] :: print the connection\n"
"verify [all] :: verify the connection\n"
-"save :: save 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"
-#: ../cli/src/connections.c:5735
+#: ../clients/cli/connections.c:6073
#, c-format
msgid ""
"goto <setting>[.<prop>] | <prop> :: enter setting/property for editing\n"
@@ -1958,12 +2278,13 @@ msgstr ""
" nmcli connection> goto secondaries\n"
" nmcli> goto ipv4.addresses\n"
-#: ../cli/src/connections.c:5742
+#: ../clients/cli/connections.c:6080
#, 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"
+"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"
@@ -1971,13 +2292,14 @@ msgid ""
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"
+"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
+#: ../clients/cli/connections.c:6087
#, c-format
msgid ""
"set [<setting>.<prop> <value>] :: set property value\n"
@@ -1992,7 +2314,7 @@ msgstr ""
"\n"
"Example: nmcli> set con.id My connection\n"
-#: ../cli/src/connections.c:5754
+#: ../clients/cli/connections.c:6092
#, c-format
msgid ""
"describe [<setting>.<prop>] :: describe property\n"
@@ -2005,7 +2327,7 @@ msgstr ""
"Shows property description. You can consult nm-settings(5) manual page to "
"see all NM settings and properties.\n"
-#: ../cli/src/connections.c:5759
+#: ../clients/cli/connections.c:6097
#, c-format
msgid ""
"print [all] :: print setting or connection values\n"
@@ -2020,7 +2342,7 @@ msgstr ""
"\n"
"Example: nmcli ipv4> print all\n"
-#: ../cli/src/connections.c:5764
+#: ../clients/cli/connections.c:6102
#, c-format
msgid ""
"verify [all] :: verify setting or connection validity\n"
@@ -2039,18 +2361,34 @@ msgstr ""
"Examples: nmcli> verify\n"
" nmcli bond> verify\n"
-#: ../cli/src/connections.c:5771
+#: ../clients/cli/connections.c:6109
#, c-format
msgid ""
-"save :: save the connection\n"
-"\n"
-"Sends the connection to NetworkManager that will save it.\n"
+"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 :: save the connection\n"
+"save [persistent|temporary] :: save the connection\n"
"\n"
-"Sends the connection to NetworkManager that will save it.\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"
-#: ../cli/src/connections.c:5775
+#: ../clients/cli/connections.c:6120
#, c-format
msgid ""
"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
@@ -2071,7 +2409,7 @@ msgstr ""
"/<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
+#: ../clients/cli/connections.c:6127 ../clients/cli/connections.c:6284
#, c-format
msgid ""
"back :: go to upper menu level\n"
@@ -2080,7 +2418,7 @@ msgstr ""
"back :: मेनà¥à¤¯à¥‚ सà¥à¤¤à¤° पर जाà¤à¤\n"
"\n"
-#: ../cli/src/connections.c:5785
+#: ../clients/cli/connections.c:6130
#, c-format
msgid ""
"help/? [<command>] :: help for the nmcli commands\n"
@@ -2089,7 +2427,7 @@ msgstr ""
"help/? [<command>] :: help for the nmcli commands\n"
"\n"
-#: ../cli/src/connections.c:5788
+#: ../clients/cli/connections.c:6133
#, c-format
msgid ""
"nmcli [<conf-option> <value>] :: nmcli configuration\n"
@@ -2132,7 +2470,7 @@ msgstr ""
" nmcli> nmcli save-confirmation no\n"
" nmcli> nmcli prompt-color 3\n"
-#: ../cli/src/connections.c:5808 ../cli/src/connections.c:5938
+#: ../clients/cli/connections.c:6153 ../clients/cli/connections.c:6290
#, c-format
msgid ""
"quit :: exit nmcli\n"
@@ -2145,13 +2483,16 @@ msgstr ""
"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
+#: ../clients/cli/connections.c:6158 ../clients/cli/connections.c:6295
+#: ../clients/cli/connections.c:6683 ../clients/cli/connections.c:7574
#, c-format
msgid "Unknown command: '%s'\n"
msgstr "अजà¥à¤žà¤¾à¤¤ कमांड: '%s'\n"
-#: ../cli/src/connections.c:5879
+#. TRANSLATORS: do not translate command names and keywords before ::
+#. * However, you should translate terms enclosed in <>.
+#.
+#: ../clients/cli/connections.c:6224
#, c-format
msgid ""
"---[ Property menu ]---\n"
@@ -2178,7 +2519,7 @@ msgstr ""
"help/? [<command>] :: print this help or command description\n"
"quit :: exit nmcli\n"
-#: ../cli/src/connections.c:5904
+#: ../clients/cli/connections.c:6249
#, c-format
msgid ""
"set [<value>] :: set new value\n"
@@ -2189,22 +2530,28 @@ msgstr ""
"\n"
"This command sets provided <value> to this property\n"
-#: ../cli/src/connections.c:5908
+#: ../clients/cli/connections.c:6253
#, 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"
msgid ""
-"add [<value>] :: add new option to the property\n"
+"add [<value>] :: append new value 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"
+"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 [<value>] :: add new option to the property\n"
+"add [<value>] :: append new value 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"
+"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"
-#: ../cli/src/connections.c:5914
+#: ../clients/cli/connections.c:6259
#, c-format
msgid ""
"change :: change current value\n"
@@ -2215,18 +2562,42 @@ msgstr ""
"\n"
"मौजूदा मान दिखाता है और इसे संपादन करने देता है.\n"
-#: ../cli/src/connections.c:5918
+#: ../clients/cli/connections.c:6263
#, c-format
msgid ""
-"remove [<index>|<option>] :: delete the value\n"
+"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"
-"Removes the property value (sets it to default).\n"
msgstr ""
-"remove [<index>|<option>] :: delete the value\n"
+"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"
-"Removes the property value (sets it to default).\n"
-#: ../cli/src/connections.c:5922
+#: ../clients/cli/connections.c:6274
#, c-format
msgid ""
"describe :: describe property\n"
@@ -2239,7 +2610,7 @@ msgstr ""
"Shows property description. You can consult nm-settings(5) manual page to "
"see all NM settings and properties.\n"
-#: ../cli/src/connections.c:5927
+#: ../clients/cli/connections.c:6279
#, c-format
msgid ""
"print [property|setting|connection] :: print property (setting, connection) "
@@ -2254,7 +2625,7 @@ msgstr ""
"Shows property value. Providing an argument you can also display values for "
"the whole setting or connection.\n"
-#: ../cli/src/connections.c:5935
+#: ../clients/cli/connections.c:6287
#, c-format
msgid ""
"help/? [<command>] :: help for nmcli commands\n"
@@ -2263,662 +2634,768 @@ msgstr ""
"help/? [<command>] :: help for nmcli commands\n"
"\n"
-#: ../cli/src/connections.c:6022
+#: ../clients/cli/connections.c:6374
#, c-format
msgid "Error: Connection activation failed.\n"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कनेकà¥à¤¶à¤¨ सकà¥à¤°à¤¿à¤¯ किया जाना विफल.\n"
-#: ../cli/src/connections.c:6093
+#: ../clients/cli/connections.c:6452
#, c-format
msgid "Error: setting '%s' is mandatory and cannot be removed.\n"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' सेटिंग अनिवारà¥à¤¯ है और हटाया नहीं जा सकता है.\n"
-#: ../cli/src/connections.c:6111
+#. TRANSLATORS: status line in nmcli connection editor
+#: ../clients/cli/connections.c:6470
+#, 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"
+
+#: ../clients/cli/connections.c:6505
#, c-format
-msgid "[ Connection type: %s | name: %s | UUID: %s | dirty: %s ]\n"
-msgstr "[ Connection type: %s | name: %s | UUID: %s | dirty: %s ]\n"
+#| 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:6171
+#: ../clients/cli/connections.c:6550
#, 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"
+"'सहेजें' को इसे जमा करने के "
+"लिठटाइप कर सकते हैं.\n"
-#: ../cli/src/connections.c:6192 ../cli/src/connections.c:6615
-#: ../cli/src/connections.c:6673
+#: ../clients/cli/connections.c:6572 ../clients/cli/connections.c:6987
+#: ../clients/cli/connections.c:7042
#, 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
+#: ../clients/cli/connections.c:6587 ../clients/cli/connections.c:6605
+#: ../clients/cli/connections.c:6991 ../clients/cli/connections.c:7047
#, c-format
msgid "Error: failed to set '%s' property: %s\n"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' गà¥à¤£ सेट करने में विफल: %s\n"
-#: ../cli/src/connections.c:6221
+#: ../clients/cli/connections.c:6599
#, c-format
msgid "Edit '%s' value: "
msgstr "'%s' मान संपादित करें: "
-#: ../cli/src/connections.c:6250
+#: ../clients/cli/connections.c:6626
#, c-format
msgid "Error: %s\n"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: %s\n"
-#: ../cli/src/connections.c:6256 ../cli/src/connections.c:6759
-#: ../cli/src/connections.c:6800
+#: ../clients/cli/connections.c:6632 ../clients/cli/connections.c:7126
+#: ../clients/cli/connections.c:7167
#, c-format
msgid "Error: failed to remove value of '%s': %s\n"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' मान हटाने में विफल: %s\n"
-#: ../cli/src/connections.c:6277
+#: ../clients/cli/connections.c:6653
#, 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
+#: ../clients/cli/connections.c:6779
#, c-format
msgid "Available settings: %s\n"
msgstr "उपलबà¥à¤§ सेटिंगà¥à¤¸: %s\n"
-#: ../cli/src/connections.c:6418
+#: ../clients/cli/connections.c:6788
#, c-format
msgid "Error: invalid setting name; %s\n"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अवैध सेटिंग नाम; %s\n"
-#: ../cli/src/connections.c:6435
+#: ../clients/cli/connections.c:6805
#, c-format
msgid "Available properties: %s\n"
msgstr "उपलबà¥à¤§ विशेषता: %s\n"
-#: ../cli/src/connections.c:6443
+#: ../clients/cli/connections.c:6813
#, c-format
msgid "Error: property %s\n"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: विशेषता %s\n"
-#: ../cli/src/connections.c:6484
+#: ../clients/cli/connections.c:6854
+#, 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? [yes] "
+"Do you still want to save? %s"
msgstr ""
"कनेकà¥à¤¶à¤¨ को 'autoconnect=yes' से सहेजें. वह कनेकà¥à¤¶à¤¨ के ततà¥à¤•à¤¾à¤² सकà¥à¤°à¤¿à¤¯à¤•à¤°à¤£ का "
"परिणाम देगा.\n"
-"कà¥à¤¯à¤¾ आप अभी भी सहेजना चाहते हैं? [yes] "
+"कà¥à¤¯à¤¾ आप अभी भी सहेजना चाहते हैं? %s"
-#: ../cli/src/connections.c:6557
+#: ../clients/cli/connections.c:6929
#, c-format
msgid "You may edit the following settings: %s\n"
msgstr "आप निमà¥à¤¨à¤²à¤¿à¤–ित सेटिंगà¥à¤¸ संपादित कर सकते हैं: %s\n"
-#: ../cli/src/connections.c:6583
+#: ../clients/cli/connections.c:6956
#, c-format
msgid ""
"The connection profile has been removed from another client. You may type "
"'save' to restore it.\n"
msgstr ""
"दूसरे कà¥à¤²à¤¾à¤¯à¤‚ट से कनेकà¥à¤¶à¤¨ पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤² हटाया गया है. आप 'सहेजें' को इसे जमा करने "
-"के लिठटाइप कर सकते हैं.\n"
+"के लिठटाइप कर "
+"सकते हैं.\n"
-#: ../cli/src/connections.c:6613 ../cli/src/connections.c:6671
+#: ../clients/cli/connections.c:6985 ../clients/cli/connections.c:7040
#, c-format
msgid "Allowed values for '%s' property: %s\n"
msgstr "'%s' विशेषता के लिठअनà¥à¤®à¤¤à¤¿à¤ªà¥à¤°à¤¾à¤ªà¥à¤¤ मान: %s\n"
-#: ../cli/src/connections.c:6625 ../cli/src/connections.c:6842
+#: ../clients/cli/connections.c:6995 ../clients/cli/connections.c:7209
#, c-format
msgid "Error: no setting selected; valid are [%s]\n"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कोई सेटिंग चयनित नहीं; मान [%s] हैं\n"
-#: ../cli/src/connections.c:6626
+#: ../clients/cli/connections.c:6996
#, 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
+#: ../clients/cli/connections.c:7010 ../clients/cli/connections.c:7146
+#: ../clients/cli/connections.c:7226
#, c-format
msgid "Error: invalid setting argument '%s'; valid are [%s]\n"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अवैध सेटिंग वितरà¥à¤• '%s'; मान हैं [%s]\n"
-#: ../cli/src/connections.c:6651
+#: ../clients/cli/connections.c:7020
#, c-format
msgid "Error: missing setting for '%s' property\n"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' गà¥à¤£ के लिठअनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤ सेटिंग\n"
-#: ../cli/src/connections.c:6658
+#: ../clients/cli/connections.c:7027
#, c-format
msgid "Error: invalid property: %s\n"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अवैध मान: %s\n"
-#: ../cli/src/connections.c:6707
+#: ../clients/cli/connections.c:7074
#, c-format
msgid "Error: unknown setting '%s'\n"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अजà¥à¤žà¤¾à¤¤ सेटिंग '%s'\n"
-#: ../cli/src/connections.c:6720
+#: ../clients/cli/connections.c:7087
#, c-format
msgid "You may edit the following properties: %s\n"
msgstr "आप निमà¥à¤¨à¤²à¤¿à¤–ित विशेषता संपादित कर सकते हैं: %s\n"
-#: ../cli/src/connections.c:6764
+#: ../clients/cli/connections.c:7131
#, c-format
msgid "Error: no argument given; valid are [%s]\n"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कोई वितरà¥à¤• नहीं दिया हà¥à¤†; मान हैं [%s]\n"
-#: ../cli/src/connections.c:6777
+#: ../clients/cli/connections.c:7144
#, c-format
msgid "Setting '%s' is not present in the connection.\n"
msgstr "'%s' सेटिंग इस कनेकà¥à¤¶à¤¨ में उपसà¥à¤¥à¤¿à¤¤ नहीं है.\n"
-#: ../cli/src/connections.c:6818
+#: ../clients/cli/connections.c:7185
#, c-format
msgid "Error: %s properties, nor it is a setting name.\n"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: %s विशेषताà¤à¤, न ही यह सेटिंग नाम है.\n"
-#: ../cli/src/connections.c:6843
+#: ../clients/cli/connections.c:7210
#, c-format
msgid "use 'goto <setting>' first, or 'describe <setting>.<property>'\n"
msgstr "'goto <setting>' पहले उपयोग करें, या 'describe <setting>.<property>'\n"
-#: ../cli/src/connections.c:6884
+#: ../clients/cli/connections.c:7251
#, 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
+#: ../clients/cli/connections.c:7280
#, c-format
msgid "Error: unknown setting: '%s'\n"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अजà¥à¤žà¤¾à¤¤ सेटिंग: '%s'\n"
-#: ../cli/src/connections.c:6927
+#: ../clients/cli/connections.c:7285
+#, 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"
+
+#: ../clients/cli/connections.c:7310
+#, c-format
+#| msgid "Error: invalid property: %s\n"
+msgid "Error: invalid property: %s%s\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अवैध मान: %s%s\n"
+
+#: ../clients/cli/connections.c:7312
+#| msgid "Error: invalid property: %s, neither a valid setting name.\n"
+msgid ", neither a valid setting name"
+msgstr ", न ही वैध सेटिंग नाम है"
+
+#: ../clients/cli/connections.c:7332
#, c-format
msgid "Verify setting '%s': %s\n"
msgstr "'%s' सेटिंग जाà¤à¤šà¥‡à¤‚: %s\n"
-#: ../cli/src/connections.c:6934
+#: ../clients/cli/connections.c:7339
#, c-format
msgid "Verify connection: %s\n"
msgstr "कनेकà¥à¤¶à¤¨ जाà¤à¤šà¥‡à¤‚: %s\n"
-#: ../cli/src/connections.c:6973
+#: ../clients/cli/connections.c:7357
+#, c-format
+#| msgid "Error: invalid extra argument '%s'."
+msgid "Error: invalid argument '%s'\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अवैध वितरà¥à¤• '%s'.\n"
+
+#: ../clients/cli/connections.c:7390
#, c-format
msgid "Error: Failed to save '%s' (%s) connection: (%d) %s\n"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' (%s) कनेकà¥à¤¶à¤¨ को सहेजने में विफल : (%d) %s\n"
-#: ../cli/src/connections.c:6980
+#: ../clients/cli/connections.c:7398
#, c-format
msgid "Connection '%s' (%s) successfully saved.\n"
msgstr "'%s' (%s) कनेकà¥à¤¶à¤¨ सफलतापूरà¥à¤µà¤• सहेजा गया\n"
-#: ../cli/src/connections.c:7014
+#: ../clients/cli/connections.c:7399
+#, c-format
+#| msgid "Connection '%s' (%s) successfully added.\n"
+msgid "Connection '%s' (%s) successfully updated.\n"
+msgstr "'%s' (%s) कनेकà¥à¤¶à¤¨ सफलतापूरà¥à¤µà¤• अदà¥à¤¯à¤¤à¤¨ किया गया.\n"
+
+#: ../clients/cli/connections.c:7432
#, c-format
msgid "Error: connection verification failed: %s\n"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कनेकà¥à¤¶à¤¨ जाà¤à¤š विफलता: %s\n"
-#: ../cli/src/connections.c:7015
+#: ../clients/cli/connections.c:7433
msgid "(unknown error)"
msgstr "(अजà¥à¤žà¤¾à¤¤ तà¥à¤°à¥à¤Ÿà¤¿)"
-#: ../cli/src/connections.c:7036
+#: ../clients/cli/connections.c:7454
#, c-format
msgid "Error: connection is not saved. Type 'save' first.\n"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कनेकà¥à¤¶à¤¨ नहीं सहेजा गया. 'सहेजें' पहले टाइप करें.\n"
-#: ../cli/src/connections.c:7040
+#: ../clients/cli/connections.c:7458
#, c-format
msgid "Error: connection is not valid: %s\n"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कनेकà¥à¤¶à¤¨ वैध नहीं है: %s\n"
-#: ../cli/src/connections.c:7051
+#: ../clients/cli/connections.c:7469
#, c-format
msgid "Error: Cannot activate connection: %s.\n"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कनेकà¥à¤¶à¤¨ सकà¥à¤°à¤¿à¤¯ नहीं कर सकता है: %s.\n"
-#: ../cli/src/connections.c:7061
+#: ../clients/cli/connections.c:7479
#, c-format
msgid "Error: Failed to activate '%s' (%s) connection: (%d) %s\n"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' (%s) कनेकà¥à¤¶à¤¨ को सकà¥à¤°à¤¿à¤¯ करने में विफल : (%d) %s\n"
-#: ../cli/src/connections.c:7067
+#: ../clients/cli/connections.c:7485
#, c-format
msgid "Monitoring connection activation (press any key to continue)\n"
msgstr "कनेकà¥à¤¶à¤¨ सकà¥à¤°à¤¿à¤¯à¤•à¤°à¤£ (जारी रखने के लिठदबाà¤à¤) मॉनिटरिंग\n"
-#: ../cli/src/connections.c:7105
+#: ../clients/cli/connections.c:7523
#, c-format
msgid "Error: status-line: %s\n"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: status-line: %s\n"
-#: ../cli/src/connections.c:7113
+#: ../clients/cli/connections.c:7531
#, c-format
msgid "Error: save-confirmation: %s\n"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: save-confirmation: %s\n"
-#: ../cli/src/connections.c:7121
+#: ../clients/cli/connections.c:7539
#, c-format
msgid "Error: bad color number: '%s'; use <0-8>\n"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: खराब रंग संखà¥à¤¯à¤¾: '%s'; <0-8> उपयोग करें\n"
-#: ../cli/src/connections.c:7133
+#: ../clients/cli/connections.c:7551
#, c-format
msgid "Current nmcli configuration:\n"
msgstr "मौजूदा nmcli विनà¥à¤¯à¤¾à¤¸:\n"
-#: ../cli/src/connections.c:7141
+#: ../clients/cli/connections.c:7559
#, 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
+#: ../clients/cli/connections.c:7802
#, 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
+#: ../clients/cli/connections.c:7814 ../clients/cli/connections.c:8004
+#: ../clients/cli/connections.c:8011
#, c-format
msgid "Error: Unknown connection '%s'."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अजà¥à¤žà¤¾à¤¤ कनेकà¥à¤¶à¤¨: '%s'."
-#: ../cli/src/connections.c:7417
+#: ../clients/cli/connections.c:7829
#, c-format
msgid "Warning: editing existing connection '%s'; 'type' argument is ignored\n"
msgstr "चेतावनी: मौजूदा कनेकà¥à¤¶à¤¨ '%s' का संपादन; 'type' वितरà¥à¤• अनदेखा है\n"
-#: ../cli/src/connections.c:7420
+#: ../clients/cli/connections.c:7832
#, c-format
msgid ""
"Warning: editing existing connection '%s'; 'con-name' argument is ignored\n"
msgstr "चेतावनी: मौजूदा कनेकà¥à¤¶à¤¨ '%s' का संपादन; 'con-name' वितरà¥à¤• अनदेखा है\n"
-#: ../cli/src/connections.c:7434
+#: ../clients/cli/connections.c:7846
#, c-format
msgid "Valid connection types: %s\n"
msgstr "वैध कनेकà¥à¤¶à¤¨ पà¥à¤°à¤•à¤¾à¤°: %s\n"
-#: ../cli/src/connections.c:7436
+#: ../clients/cli/connections.c:7848
#, c-format
msgid "Error: invalid connection type; %s\n"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अवैध कनेकà¥à¤¶à¤¨ किसà¥à¤®; %s\n"
-#: ../cli/src/connections.c:7472
+#: ../clients/cli/connections.c:7887
#, c-format
msgid "===| nmcli interactive connection editor |==="
msgstr "===| nmcli interactive connection editor |==="
-#: ../cli/src/connections.c:7475
+#: ../clients/cli/connections.c:7890
#, c-format
msgid "Editing existing '%s' connection: '%s'"
msgstr "मौजूदा '%s' कनेकà¥à¤¶à¤¨ का संपादन: '%s'"
-#: ../cli/src/connections.c:7477
+#: ../clients/cli/connections.c:7892
#, c-format
msgid "Adding a new '%s' connection"
msgstr "नया '%s' कनेकà¥à¤¶à¤¨ जोड़ रहा है"
-#: ../cli/src/connections.c:7479
+#: ../clients/cli/connections.c:7894
#, c-format
msgid "Type 'help' or '?' for available commands."
msgstr "'help' या '?' उपलबà¥à¤§ कमांड के लिठटाइप करें."
-#: ../cli/src/connections.c:7481
+#: ../clients/cli/connections.c:7896
#, c-format
msgid "Type 'describe [<setting>.<prop>]' for detailed property description."
msgstr "'describe [<setting>.<prop>]' टाइप करें विसà¥à¤¤à¥ƒà¤¤ विशेषता विवरण के लिà¤."
-#: ../cli/src/connections.c:7520
+#: ../clients/cli/connections.c:7932
#, c-format
msgid "Error: Failed to modify connection '%s': (%d) %s"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' कनेकà¥à¤¶à¤¨ रूपांतरण के लिठविफल: (%d) %s"
-#: ../cli/src/connections.c:7526
+#: ../clients/cli/connections.c:7938
#, c-format
msgid "Connection '%s' (%s) successfully modified.\n"
msgstr "'%s' (%s) कनेकà¥à¤¶à¤¨ सफलतापूरà¥à¤µà¤• बदला गया\n"
-#: ../cli/src/connections.c:7553
+#: ../clients/cli/connections.c:7979
#, c-format
msgid "Error: No arguments provided."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कोई वितरà¥à¤• नहीं दिया गया."
-#: ../cli/src/connections.c:7577
+#: ../clients/cli/connections.c:7998
#, c-format
msgid "Error: connection ID is missing."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कनेकà¥à¤¶à¤¨ ID अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤ है."
-#: ../cli/src/connections.c:7582
+#: ../clients/cli/connections.c:8020 ../clients/cli/connections.c:8033
#, c-format
msgid "Error: <setting>.<property> argument is missing."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: <setting>.<property> वितरà¥à¤• अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤ है."
-#: ../cli/src/connections.c:7605
+#: ../clients/cli/connections.c:8038
+#, c-format
+#| msgid "Error: fields for '%s' options are missing."
+msgid "Error: value for '%s' is missing."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' मान अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤ है."
+
+#: ../clients/cli/connections.c:8056
#, c-format
msgid "Error: invalid <setting>.<property> '%s'."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अवैध <setting>.<property> '%s'."
-#: ../cli/src/connections.c:7620
+#: ../clients/cli/connections.c:8064
#, c-format
msgid "Error: invalid or not allowed setting '%s': %s."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अवैध या अनà¥à¤®à¤¤à¤¿à¤ªà¥à¤°à¤¾à¤ªà¥à¤¤ सेटिंग नहीं '%s': %s."
-#: ../cli/src/connections.c:7641
+#: ../clients/cli/connections.c:8085
#, c-format
msgid "Error: invalid property '%s': %s."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अवैध विशेषता '%s': %s."
-#: ../cli/src/connections.c:7647
+#: ../clients/cli/connections.c:8096
#, c-format
msgid "Error: failed to modify %s.%s: %s."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: %s.%s बदलने में विफल: %s."
-#: ../cli/src/connections.c:7677
+#: ../clients/cli/connections.c:8114
+#, c-format
+#| msgid "Error: failed to remove value of '%s': %s\n"
+msgid "Error: failed to remove a value from %s.%s: %s."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: %s.%s मान हटाने में विफल: %s"
+
+#: ../clients/cli/connections.c:8150
#, c-format
msgid "Error: Connection deletion failed: %s"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कनेकà¥à¤¶à¤¨ विलोपन विफल: %s"
-#: ../cli/src/connections.c:7747
+#: ../clients/cli/connections.c:8221
#, c-format
msgid "Error: unknown connection: %s\n"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अजà¥à¤žà¤¾à¤¤ कनेकà¥à¤¶à¤¨: %s\n"
-#: ../cli/src/connections.c:7781
+#. truncate trailing ", "
+#: ../clients/cli/connections.c:8257
#, c-format
msgid "Error: cannot delete unknown connection(s): %s."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अजà¥à¤žà¤¾à¤¤ कनेकà¥à¤¶à¤¨ मिटा नहीं सकता है: %s."
-#: ../cli/src/connections.c:7852
+#: ../clients/cli/connections.c:8328
#, 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
+#: ../clients/cli/connections.c:8441 ../clients/cli/network-manager.c:613
#, c-format
-msgid "Error: '%s' is not valid 'connection' command."
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' à¤à¤• वैध कनेकà¥à¤¶à¤¨ कमांड नहीं है."
+#| msgid "Error: Could not get system settings."
+msgid "Error: Could not get system settings: %s."
+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
+#: ../clients/cli/connections.c:8451
#, 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 "उपकरण"
+#: ../clients/cli/connections.c:8505
+#, c-format
+msgid "Error: '%s' is not valid 'connection' command."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' à¤à¤• वैध कनेकà¥à¤¶à¤¨ कमांड नहीं है."
+
+#. define some prompts
+#: ../clients/cli/devices.c:36
+msgid "Interface: "
+msgstr "अंतरफलक:"
-#: ../cli/src/devices.c:75 ../cli/src/devices.c:103
+#. 3
+#. 17
+#: ../clients/cli/devices.c:44 ../clients/cli/devices.c:73
msgid "CONNECTION"
msgstr "कनेकà¥à¤¶à¤¨"
-#: ../cli/src/devices.c:76 ../cli/src/devices.c:104
+#. 4
+#. 18
+#: ../clients/cli/devices.c:45 ../clients/cli/devices.c:74
msgid "CON-UUID"
msgstr "CON-UUID"
-#: ../cli/src/devices.c:89
+#. 2
+#: ../clients/cli/devices.c:58
msgid "VENDOR"
msgstr "विकà¥à¤°à¥‡à¤¤à¤¾"
-#: ../cli/src/devices.c:90
+#. 3
+#: ../clients/cli/devices.c:59
msgid "PRODUCT"
msgstr "उतà¥à¤ªà¤¾à¤¦"
-#: ../cli/src/devices.c:91
+#. 4
+#: ../clients/cli/devices.c:60
msgid "DRIVER"
msgstr "डà¥à¤°à¤¾à¤‡à¤µà¤°"
-#: ../cli/src/devices.c:92
+#. 5
+#: ../clients/cli/devices.c:61
msgid "DRIVER-VERSION"
msgstr "डà¥à¤°à¤¾à¤‡à¤µà¤° संसà¥à¤•à¤°à¤£"
-#: ../cli/src/devices.c:93
+#. 6
+#: ../clients/cli/devices.c:62
msgid "FIRMWARE-VERSION"
msgstr "फरà¥à¤®à¤µà¥‡à¤¯à¤° संसà¥à¤•à¤°à¤£"
-#: ../cli/src/devices.c:94
+#. 7
+#: ../clients/cli/devices.c:63
msgid "HWADDR"
msgstr "HWADDR"
-#: ../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
+#. 8
+#: ../clients/cli/devices.c:64 ../clients/tui/nmt-page-ethernet.c:86
+#: ../clients/tui/nmt-page-infiniband.c:96 ../clients/tui/nmt-page-vlan.c:130
+#: ../clients/tui/nmt-page-wifi.c:363
msgid "MTU"
msgstr "MTU"
-#: ../cli/src/devices.c:97
+#. 10
+#: ../clients/cli/devices.c:66
msgid "REASON"
msgstr "कारण"
-#: ../cli/src/devices.c:98
+#. 11
+#: ../clients/cli/devices.c:67
msgid "UDI"
msgstr "UDI"
-#: ../cli/src/devices.c:99
+#. 12
+#: ../clients/cli/devices.c:68
msgid "IP-IFACE"
msgstr "IP-IFACE"
-#: ../cli/src/devices.c:100
+#. 13
+#. 2
+#: ../clients/cli/devices.c:69 ../clients/cli/devices.c:97
+msgid "IS-SOFTWARE"
+msgstr "IS-SOFTWARE"
+
+#. 14
+#: ../clients/cli/devices.c:70
msgid "NM-MANAGED"
msgstr "NM-MANAGED"
-#: ../cli/src/devices.c:102
+#. 16
+#: ../clients/cli/devices.c:72
msgid "FIRMWARE-MISSING"
msgstr "फरà¥à¤®à¤µà¥‡à¤¯à¤° अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤"
-#: ../cli/src/devices.c:115
+#. 0
+#: ../clients/cli/devices.c:85
msgid "AVAILABLE-CONNECTION-PATHS"
msgstr "मौजूद-कनेकà¥à¤¶à¤¨-पथ"
-#: ../cli/src/devices.c:116
+#. 1
+#: ../clients/cli/devices.c:86
msgid "AVAILABLE-CONNECTIONS"
msgstr "मौजूद-कनेकà¥à¤¶à¤¨"
-#: ../cli/src/devices.c:125
+#. 0
+#: ../clients/cli/devices.c:95
msgid "CARRIER-DETECT"
msgstr "वाहक पता लगा"
-#: ../cli/src/devices.c:126
+#. 1
+#: ../clients/cli/devices.c:96
msgid "SPEED"
msgstr "गति"
-#: ../cli/src/devices.c:135
+#. 0
+#: ../clients/cli/devices.c:106
msgid "CARRIER"
msgstr "कैरियर"
-#: ../cli/src/devices.c:144 ../cli/src/devices.c:563
+#. 0
+#: ../clients/cli/devices.c:115 ../clients/cli/devices.c:550
msgid "WEP"
msgstr "WEP"
-#: ../cli/src/devices.c:145
+#. 1
+#: ../clients/cli/devices.c:116
msgid "WPA"
msgstr "WPA"
-#: ../cli/src/devices.c:146 ../cli/src/devices.c:571
+#. 2
+#: ../clients/cli/devices.c:117 ../clients/cli/devices.c:558
msgid "WPA2"
msgstr "WPA2"
-#: ../cli/src/devices.c:147
+#. 3
+#: ../clients/cli/devices.c:118
msgid "TKIP"
msgstr "TKIP"
-#: ../cli/src/devices.c:148
+#. 4
+#: ../clients/cli/devices.c:119
msgid "CCMP"
msgstr "CCMP"
-#: ../cli/src/devices.c:149 ../cli/src/devices.c:239
+#. 5
+#. 2
+#: ../clients/cli/devices.c:120 ../clients/cli/devices.c:210
msgid "AP"
msgstr "AP"
-#: ../cli/src/devices.c:150
+#. 6
+#: ../clients/cli/devices.c:121
msgid "ADHOC"
msgstr "ADHOC"
-#: ../cli/src/devices.c:159
+#. 0
+#: ../clients/cli/devices.c:130
msgid "CTR-FREQ"
msgstr "CTR-FREQ"
-#: ../cli/src/devices.c:160
+#. 1
+#: ../clients/cli/devices.c:131
msgid "RSSI"
msgstr "RSSI"
-#: ../cli/src/devices.c:161
+#. 2
+#: ../clients/cli/devices.c:132
msgid "CINR"
msgstr "CINR"
-#: ../cli/src/devices.c:162
+#. 3
+#: ../clients/cli/devices.c:133
msgid "TX-POW"
msgstr "TX-POW"
-#: ../cli/src/devices.c:163
+#. 4
+#: ../clients/cli/devices.c:134
msgid "BSID"
msgstr "BSID"
-#: ../cli/src/devices.c:172 ../tui/nmt-page-wifi.c:221
+#. 0
+#: ../clients/cli/devices.c:143 ../clients/tui/nmt-page-wifi.c:220
msgid "SSID"
msgstr "SSID"
-#: ../cli/src/devices.c:173
+#. 1
+#: ../clients/cli/devices.c:144
msgid "SSID-HEX"
msgstr "SSID-HEX"
-#: ../cli/src/devices.c:174 ../tui/nmt-page-wifi.c:352
+#. 2
+#: ../clients/cli/devices.c:145 ../clients/tui/nmt-page-wifi.c:351
msgid "BSSID"
msgstr "BSSID"
-#: ../cli/src/devices.c:175
+#. 3
+#: ../clients/cli/devices.c:146
msgid "MODE"
msgstr "मोड"
-#: ../cli/src/devices.c:176
+#. 4
+#: ../clients/cli/devices.c:147
msgid "CHAN"
msgstr "CHAN"
-#: ../cli/src/devices.c:177
+#. 5
+#: ../clients/cli/devices.c:148
msgid "FREQ"
msgstr "FREQ"
-#: ../cli/src/devices.c:178
+#. 6
+#: ../clients/cli/devices.c:149
msgid "RATE"
msgstr "RATE"
-#: ../cli/src/devices.c:179 ../cli/src/devices.c:199
+#. 7
+#. 1
+#: ../clients/cli/devices.c:150 ../clients/cli/devices.c:170
msgid "SIGNAL"
msgstr "SIGNAL"
-#: ../cli/src/devices.c:180
+#. 8
+#: ../clients/cli/devices.c:151
msgid "BARS"
msgstr "छड़ें"
-#: ../cli/src/devices.c:181
+#. 9
+#: ../clients/cli/devices.c:152
msgid "SECURITY"
msgstr "SECURITY"
-#: ../cli/src/devices.c:182
+#. 10
+#: ../clients/cli/devices.c:153
msgid "WPA-FLAGS"
msgstr "WPA-FLAGS"
-#: ../cli/src/devices.c:183
+#. 11
+#: ../clients/cli/devices.c:154
msgid "RSN-FLAGS"
msgstr "RSN-FLAGS"
-#: ../cli/src/devices.c:185 ../cli/src/devices.c:202
-msgid "ACTIVE"
-msgstr "ACTIVE"
-
-#: ../cli/src/devices.c:186
+#. 14
+#: ../clients/cli/devices.c:157
msgid "*"
msgstr "*"
-#: ../cli/src/devices.c:198 ../cli/src/devices.c:242
+#. 0
+#. 5
+#: ../clients/cli/devices.c:169 ../clients/cli/devices.c:213
msgid "NSP"
msgstr "NSP"
-#: ../cli/src/devices.c:213
+#. 0
+#: ../clients/cli/devices.c:184
msgid "SLAVES"
msgstr "सà¥à¤²à¥‡à¤µ"
-#: ../cli/src/devices.c:222
+#. 0
+#: ../clients/cli/devices.c:193
msgid "ID"
msgstr "ID"
-#: ../cli/src/devices.c:237
+#. 0
+#: ../clients/cli/devices.c:208
msgid "CAPABILITIES"
msgstr "सामरà¥à¤¥à¥à¤¯"
-#: ../cli/src/devices.c:238
+#. 1
+#: ../clients/cli/devices.c:209
msgid "WIFI-PROPERTIES"
msgstr "वाईफ़ाई गà¥à¤£"
-#: ../cli/src/devices.c:240
+#. 3
+#: ../clients/cli/devices.c:211
msgid "WIRED-PROPERTIES"
msgstr "तार गà¥à¤£"
-#: ../cli/src/devices.c:241
+#. 4
+#: ../clients/cli/devices.c:212
msgid "WIMAX-PROPERTIES"
msgstr "WIMAX के गà¥à¤£"
-#: ../cli/src/devices.c:247 ../tui/nmt-page-bond.c:73
+#. 10
+#: ../clients/cli/devices.c:218 ../clients/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
+#. 12
+#: ../clients/cli/devices.c:220
msgid "CONNECTIONS"
msgstr "कनेकà¥à¤¶à¤¨"
-#: ../cli/src/devices.c:274
-#, c-format
+#: ../clients/cli/devices.c:245
+#, c-format
+#| msgid ""
+#| "Usage: nmcli device { COMMAND | help }\n"
+#| "\n"
+#| "COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
+#| "\n"
+#| "COMMAND := { status | show | connect | disconnect | wifi }\n"
+#| "\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"
+#| " wimax [list [ifname <ifname>] [nsp <name>]]\n"
+#| "\n"
msgid ""
"Usage: nmcli device { COMMAND | help }\n"
"\n"
-"COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | delete | wifi | wimax }\n"
"\n"
-"COMMAND := { status | show | connect | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | delete | wifi }\n"
"\n"
" status\n"
"\n"
@@ -2928,6 +3405,8 @@ msgid ""
"\n"
" disconnect <ifname>\n"
"\n"
+" delete <ifname>\n"
+"\n"
" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
"\n"
" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
@@ -2941,9 +3420,9 @@ msgid ""
msgstr ""
"पà¥à¤°à¤¯à¥‹à¤—: nmcli device { COMMAND | help }\n"
"\n"
-"COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | delete | wifi | wimax }\n"
"\n"
-"COMMAND := { status | show | connect | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | delete | wifi }\n"
"\n"
" status\n"
"\n"
@@ -2953,6 +3432,8 @@ msgstr ""
"\n"
" disconnect <ifname>\n"
"\n"
+" delete <ifname>\n"
+"\n"
" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
"\n"
" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
@@ -2964,7 +3445,7 @@ msgstr ""
" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
-#: ../cli/src/devices.c:298
+#: ../clients/cli/devices.c:270
#, c-format
msgid ""
"Usage: nmcli device status { help }\n"
@@ -2975,8 +3456,10 @@ msgid ""
" 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"
+"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"
@@ -2993,7 +3476,7 @@ msgstr ""
"करता है.\n"
"\n"
-#: ../cli/src/devices.c:314
+#: ../clients/cli/devices.c:286
#, c-format
msgid ""
"Usage: nmcli device show { ARGUMENTS | help }\n"
@@ -3013,7 +3496,7 @@ msgstr ""
"यà¥à¤•à¥à¤¤à¤¿ के लिà¤.\n"
"\n"
-#: ../cli/src/devices.c:326
+#: ../clients/cli/devices.c:298
#, c-format
msgid ""
"Usage: nmcli device connect { ARGUMENTS | help }\n"
@@ -3021,8 +3504,8 @@ msgid ""
"ARGUMENTS := <ifname>\n"
"\n"
"Connect the device.\n"
-"NetworkManager will try to find a suitable connection that will be activated."
-"\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 ""
@@ -3032,12 +3515,11 @@ msgstr ""
"\n"
"यà¥à¤•à¥à¤¤à¤¿ को कनेकà¥à¤Ÿ करें.\n"
"NetworkManager किसी उपयà¥à¤•à¥à¤¤ कनेकà¥à¤¶à¤¨ को ढूà¤à¤¢à¤¼à¤¨à¥‡ की कोशिश करेगा जो सकà¥à¤°à¤¿à¤¯ किया "
-"जाà¤à¤—ा."
-"\n"
+"जाà¤à¤—ा.\n"
"यह कनेकà¥à¤¶à¤¨ को देखेगा जो सà¥à¤µà¤¤à¤ƒ कनेकà¥à¤Ÿ पर सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ रूप से सेट नहीं है.\n"
"\n"
-#: ../cli/src/devices.c:339
+#: ../clients/cli/devices.c:311
#, c-format
msgid ""
"Usage: nmcli device disconnect { ARGUMENTS | help }\n"
@@ -3058,7 +3540,38 @@ msgstr ""
"बिना उपयोकà¥à¤¤à¤¾/दसà¥à¤¤à¥€ रोकटोक के.\n"
"\n"
-#: ../cli/src/devices.c:352
+#: ../clients/cli/devices.c:324
+#, 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"
+msgid ""
+"Usage: nmcli device delete { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Deletes the software device.\n"
+"The command removes the interface. It only works for software devices\n"
+"(like bonds, bridges, etc.). Hardware devices cannot be deleted by the\n"
+"command.\n"
+"\n"
+msgstr ""
+"पà¥à¤°à¤¯à¥‹à¤—: nmcli device delete { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Deletes the software device.\n"
+"The command removes the interface. It only works for software devices\n"
+"(like bonds, bridges, etc.). Hardware devices cannot be deleted by the\n"
+"command.\n"
+"\n"
+
+#: ../clients/cli/devices.c:338
#, c-format
msgid ""
"Usage: nmcli device wifi { ARGUMENTS | help }\n"
@@ -3070,8 +3583,8 @@ msgid ""
"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"
+"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"
@@ -3085,8 +3598,10 @@ msgid ""
"\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"
+"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"
@@ -3099,10 +3614,11 @@ msgstr ""
"\n"
"उपलबà¥à¤§ वाई-फ़ाई पहà¥à¤à¤š बिंदॠसूचीबदà¥à¤§ करें. 'ifname' और 'bssid' विकलà¥à¤ª को\n"
"APs को खास अंतरफलक के लिठसूचीबदà¥à¤§ करने के लिठपà¥à¤°à¤¯à¥‹à¤— किया जाता है या किसी "
-"विशेष BSSID से.\n"
+"विशेष "
+"BSSID से.\n"
"\n"
-"ARGUMENTS := connect <(B)SSID> [password <password>] [wep-key-type "
-"key|phrase] [ifname <ifname>]\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"
@@ -3126,7 +3642,7 @@ msgstr ""
"AP को नहीं दिखाता है, 'nmcli device wifi list' को इसके लिठदेखें.\n"
"\n"
-#: ../cli/src/devices.c:386
+#: ../clients/cli/devices.c:372
#, c-format
msgid ""
"Usage: nmcli device wimax { ARGUMENTS | help }\n"
@@ -3147,341 +3663,373 @@ msgstr ""
"\n"
"उपलबà¥à¤§ WiMAX NSP को सूचीबदà¥à¤§ करें. 'ifname' और 'nsp' विकलà¥à¤ª को \n"
"संजाल सूची को सूचीबदà¥à¤§ करने के लिठकिसी खास अंतरफलक के लिठपà¥à¤°à¤¯à¥‹à¤— किया जा "
-"सकता है, या किसी विशेष NSP के साथ.\n"
+"सकता है, या "
+"किसी विशेष NSP के साथ.\n"
"\n"
-#: ../cli/src/devices.c:480
+#: ../clients/cli/devices.c:461
msgid "(none)"
msgstr "(कोई नहीं)"
-#: ../cli/src/devices.c:547
+#: ../clients/cli/devices.c:534
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:548
+#: ../clients/cli/devices.c:535
#, c-format
msgid "%u Mbit/s"
msgstr "%u Mbit/s"
-#: ../cli/src/devices.c:567
+#: ../clients/cli/devices.c:554
msgid "WPA1"
msgstr "WPA1"
-#: ../cli/src/devices.c:576
+#: ../clients/cli/devices.c:563
msgid "802.1X"
msgstr "802.1X"
-#: ../cli/src/devices.c:592
+#: ../clients/cli/devices.c:579
msgid "Ad-Hoc"
msgstr "Ad-Hoc"
-#: ../cli/src/devices.c:593
+#: ../clients/cli/devices.c:580
msgid "Infra"
msgstr "Infra"
-#: ../cli/src/devices.c:625
+#: ../clients/cli/devices.c:612
msgid "Home"
msgstr "घर"
-#: ../cli/src/devices.c:628
+#: ../clients/cli/devices.c:615
msgid "Partner"
msgstr "संगी"
-#: ../cli/src/devices.c:631
+#: ../clients/cli/devices.c:618
msgid "Roaming"
msgstr "रोमिंग"
-#: ../cli/src/devices.c:725
+#: ../clients/cli/devices.c:712
msgid "Device details"
msgstr "यà¥à¤•à¥à¤¤à¤¿ विवरण"
-#: ../cli/src/devices.c:737
+#: ../clients/cli/devices.c:724
#, 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
+#: ../clients/cli/devices.c:775 ../clients/cli/devices.c:778
+#: ../clients/cli/devices.c:1326 ../clients/cli/devices.c:1468
+#: ../clients/cli/devices.c:1580
msgid "(unknown)"
msgstr "(अजà¥à¤žà¤¾à¤¤)"
-#: ../cli/src/devices.c:827
+#: ../clients/cli/devices.c:816
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
-#: ../cli/src/devices.c:913
+#: ../clients/cli/devices.c:902
msgid "on"
msgstr "चालू"
-#: ../cli/src/devices.c:913
+#: ../clients/cli/devices.c:902
msgid "off"
msgstr "बंद"
-#: ../cli/src/devices.c:1188
+#: ../clients/cli/devices.c:1177
#, c-format
msgid "Error: 'device status': %s"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'यà¥à¤•à¥à¤¤à¤¿ सà¥à¤¥à¤¿à¤¤à¤¿': %s"
-#: ../cli/src/devices.c:1206
+#. Add headers
+#: ../clients/cli/devices.c:1195
msgid "Status of devices"
msgstr "यà¥à¤•à¥à¤¤à¤¿ की सà¥à¤¥à¤¿à¤¤à¤¿"
-#: ../cli/src/devices.c:1237
+#: ../clients/cli/devices.c:1226
#, c-format
msgid "Error: invalid extra argument '%s'."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अवैध 'अतिरिकà¥à¤¤ वितरà¥à¤• '%s'."
-#: ../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
+#: ../clients/cli/devices.c:1254 ../clients/cli/devices.c:1416
+#: ../clients/cli/devices.c:1550 ../clients/cli/devices.c:1644
+#: ../clients/cli/devices.c:1788 ../clients/cli/devices.c:2546
#, c-format
msgid "Error: Device '%s' not found."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: यà¥à¤•à¥à¤¤à¤¿ '%s' नहीं मिला."
-#: ../cli/src/devices.c:1319
+#: ../clients/cli/devices.c:1309
#, c-format
-msgid "Success: Device '%s' successfully activated."
-msgstr "सफल: यà¥à¤•à¥à¤¤à¤¿ '%s' सफलतापूरà¥à¤µà¤• सकà¥à¤°à¤¿à¤¯."
+#| msgid "Success: Device '%s' successfully activated."
+msgid "Device '%s' successfully activated with '%s'.\n"
+msgstr "यà¥à¤•à¥à¤¤à¤¿ '%s' सफलतापूरà¥à¤µà¤• सकà¥à¤°à¤¿à¤¯ '%s' के साथ.\n"
-#: ../cli/src/devices.c:1333
+#: ../clients/cli/devices.c:1325
#, c-format
msgid "Error: Device activation failed: %s"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: यà¥à¤•à¥à¤¤à¤¿ सकà¥à¤°à¤¿à¤¯à¤•à¤°à¤£ विफल: %s"
-#: ../cli/src/devices.c:1350
+#: ../clients/cli/devices.c:1333
+#, c-format
+#| msgid "Error: Device activation failed: %s"
+msgid "Error: Device activation failed: device was disconnected"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: यà¥à¤•à¥à¤¤à¤¿ सकà¥à¤°à¤¿à¤¯à¤•à¤°à¤£ विफल: यà¥à¤•à¥à¤¤à¤¿ डिसकनेकà¥à¤Ÿà¥‡à¤¡"
+
+#: ../clients/cli/devices.c:1346
#, 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
+#: ../clients/cli/devices.c:1375 ../clients/cli/devices.c:1384
+#: ../clients/cli/devices.c:1509 ../clients/cli/devices.c:1518
+#: ../clients/cli/devices.c:1604 ../clients/cli/devices.c:1612
#, c-format
msgid "Error: No interface specified."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कोई अंतरफलक निरà¥à¤¦à¤¿à¤·à¥à¤Ÿ नहीं."
-#: ../cli/src/devices.c:1396 ../cli/src/devices.c:1531
+#: ../clients/cli/devices.c:1390 ../clients/cli/devices.c:1524
+#: ../clients/cli/devices.c:1618
#, c-format
msgid "Error: extra argument not allowed: '%s'."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अतिरिकà¥à¤¤ वितरà¥à¤• नहीं अनà¥à¤®à¤¤à¤¿à¤ªà¥à¤°à¤¾à¤ªà¥à¤¤: '%s'."
-#: ../cli/src/devices.c:1459
+#: ../clients/cli/devices.c:1453
#, c-format
msgid "Success: Device '%s' successfully disconnected."
msgstr "सफल: यà¥à¤•à¥à¤¤à¤¿ '%s' सफलतापूरà¥à¤µà¤• डिसकनेकà¥à¤¡à¥‡à¤¡."
-#: ../cli/src/devices.c:1471
+#: ../clients/cli/devices.c:1465
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: यà¥à¤•à¥à¤¤à¤¿ '%s' (%s) डिसकनेकà¥à¤Ÿà¤¿à¤‚ग विफल: %s"
-#: ../cli/src/devices.c:1485
+#: ../clients/cli/devices.c:1479
#, c-format
msgid "Device '%s' has been disconnected.\n"
msgstr " यà¥à¤•à¥à¤¤à¤¿ '%s' डिसकनेकà¥à¤Ÿ हो गया है.\n"
-#: ../cli/src/devices.c:1628
+#: ../clients/cli/devices.c:1577
+#, c-format
+#| msgid "Error: Device '%s' (%s) disconnecting failed: %s"
+msgid "Error: Device '%s' (%s) deletion failed: %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: यà¥à¤•à¥à¤¤à¤¿ '%s' (%s) मिटाना विफल: %s"
+
+#: ../clients/cli/devices.c:1650
+#, c-format
+#| msgid "Error: setting '%s' is mandatory and cannot be removed.\n"
+msgid "Error: Device '%s' is a hardware device. It can't be deleted."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' हारà¥à¤¡à¤µà¥‡à¤¯à¤° यà¥à¤•à¥à¤¤à¤¿ है. इसे हटाया नहीं जा सकता है."
+
+#: ../clients/cli/devices.c:1720
msgid "Wi-Fi scan list"
msgstr "Wi-Fi सà¥à¤•à¥ˆà¤¨ सूची"
-#: ../cli/src/devices.c:1666
+#: ../clients/cli/devices.c:1758
#, c-format
msgid "Error: 'device wifi': %s"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'यà¥à¤•à¥à¤¤à¤¿ वाईफाई': %s"
-#: ../cli/src/devices.c:1719 ../cli/src/devices.c:1788
+#: ../clients/cli/devices.c:1811 ../clients/cli/devices.c:1886
#, c-format
msgid "Error: Access point with bssid '%s' not found."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: पहà¥à¤à¤š बिंदॠके साथ bssid '%s' नहीं मिली."
-#: ../cli/src/devices.c:1743 ../cli/src/devices.c:2131
-#: ../cli/src/devices.c:2293
+#: ../clients/cli/devices.c:1835 ../clients/cli/devices.c:2241
+#: ../clients/cli/devices.c:2403
#, c-format
msgid "Error: Device '%s' is not a Wi-Fi device."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: यà¥à¤•à¥à¤¤à¤¿ '%s' à¤à¤• WiFi यà¥à¤•à¥à¤¤à¤¿ नहीं है."
-#: ../cli/src/devices.c:1825 ../cli/src/devices.c:1872
+#: ../clients/cli/devices.c:1929 ../clients/cli/devices.c:1977
#, c-format
msgid "Connection with UUID '%s' created and activated on device '%s'\n"
msgstr "UUID '%s' के साथ कनेकà¥à¤¶à¤¨ बनाया है और यà¥à¤•à¥à¤¤à¤¿ '%s' पर सकà¥à¤°à¤¿à¤¯ हैं \n"
-#: ../cli/src/devices.c:1829
+#: ../clients/cli/devices.c:1934
#, c-format
msgid "Error: Connection activation failed: (%d) %s."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कनेकà¥à¤¶à¤¨ सकà¥à¤°à¤¿à¤¯à¤•à¤°à¤£ विफल: (%d) %s."
-#: ../cli/src/devices.c:1854
+#: ../clients/cli/devices.c:1959
#, c-format
msgid "Error: Failed to add/activate new connection: (%d) %s"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: नया कनेकà¥à¤¶à¤¨ को जोड़ने के लिठ/ सकà¥à¤°à¤¿à¤¯ करने में विफल : (%d) %s"
-#: ../cli/src/devices.c:1862
+#: ../clients/cli/devices.c:1967
#, c-format
msgid "Error: Failed to add/activate new connection: Unknown error"
msgstr ""
"तà¥à¤°à¥à¤Ÿà¤¿: नया कनेकà¥à¤¶à¤¨ को जोड़ने के लिठ/ सकà¥à¤°à¤¿à¤¯ करने में विफल: अजà¥à¤žà¤¾à¤¤ तà¥à¤°à¥à¤Ÿà¤¿"
-#: ../cli/src/devices.c:2013
+#: ../clients/cli/devices.c:2123
msgid "SSID or BSSID: "
msgstr "SSID या BSSID: "
-#: ../cli/src/devices.c:2018
+#: ../clients/cli/devices.c:2128
#, c-format
msgid "Error: SSID or BSSID are missing."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: SSID या BSSID अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤ है."
-#: ../cli/src/devices.c:2042
+#: ../clients/cli/devices.c:2152
#, c-format
msgid "Error: bssid argument value '%s' is not a valid BSSID."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: bssid तरà¥à¤• मान '%s' à¤à¤• वैध BSSID नहीं है."
-#: ../cli/src/devices.c:2066
+#: ../clients/cli/devices.c:2176
#, 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:2086
+#: ../clients/cli/devices.c:2196
#, c-format
msgid "Error: %s: %s."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: %s: %s."
-#: ../cli/src/devices.c:2101
+#: ../clients/cli/devices.c:2211
#, c-format
msgid "Error: BSSID to connect to (%s) differs from bssid argument (%s)."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: BSSID (%s) से कनेकà¥à¤Ÿ करने के लिठbssid तरà¥à¤• (%s) से अलग है."
-#: ../cli/src/devices.c:2107
+#: ../clients/cli/devices.c:2217
#, c-format
msgid "Error: Parameter '%s' is neither SSID nor BSSID."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: पैरामीटर '%s' न तो SSID और न ही BSSID है."
-#: ../cli/src/devices.c:2133 ../cli/src/devices.c:2295
+#: ../clients/cli/devices.c:2243 ../clients/cli/devices.c:2405
#, c-format
msgid "Error: No Wi-Fi device found."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: कोई Wi-Fi यà¥à¤•à¥à¤¤à¤¿ नहीं मिला."
-#: ../cli/src/devices.c:2151
+#: ../clients/cli/devices.c:2261
#, c-format
msgid "Error: No network with SSID '%s' found."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: SSID '%s' के साथ कोई संजाल नहीं मिला."
-#: ../cli/src/devices.c:2153
+#: ../clients/cli/devices.c:2263
#, c-format
msgid "Error: No access point with BSSID '%s' found."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: SSID '%s' के साथ कोई पहà¥à¤à¤š बिंदॠनहीं मिला."
-#: ../cli/src/devices.c:2192
+#: ../clients/cli/devices.c:2302
msgid "Password: "
msgstr "कूटशबà¥à¤¦:"
-#: ../cli/src/devices.c:2321
+#: ../clients/cli/devices.c:2431
#, c-format
msgid "Error: 'device wifi' command '%s' is not valid."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'यà¥à¤•à¥à¤¤à¤¿ वाईफाई' कमांड '%s' वैध नहीं है."
-#: ../cli/src/devices.c:2368
+#: ../clients/cli/devices.c:2478
msgid "WiMAX NSP list"
msgstr "WiMAX NSP सूची"
-#: ../cli/src/devices.c:2405
+#: ../clients/cli/devices.c:2515
#, c-format
msgid "Error: 'device wimax': %s"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'यà¥à¤•à¥à¤¤à¤¿ वाईमैकà¥à¤¸': %s"
-#: ../cli/src/devices.c:2459
+#: ../clients/cli/devices.c:2569
#, c-format
msgid "Error: NSP with name '%s' not found."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: NSP नाम '%s' के साथ नहीं मिला."
-#: ../cli/src/devices.c:2472
+#: ../clients/cli/devices.c:2582
#, c-format
msgid "Error: Device '%s' is not a WiMAX device."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: यà¥à¤•à¥à¤¤à¤¿ '%s' à¤à¤• WiMAX यà¥à¤•à¥à¤¤à¤¿ नहीं है."
-#: ../cli/src/devices.c:2510
+#: ../clients/cli/devices.c:2626
#, c-format
msgid "Error: Access point with nsp '%s' not found."
msgstr "Error: nsp '%s' के साथ पहà¥à¤à¤š बिंदॠनहीं मिला."
-#: ../cli/src/devices.c:2542
+#: ../clients/cli/devices.c:2663
#, c-format
msgid "Error: 'device wimax' command '%s' is not valid."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'यà¥à¤•à¥à¤¤à¤¿ वाईमैकà¥à¤¸' कमांड '%s' वैध नहीं है."
-#: ../cli/src/devices.c:2621
+#: ../clients/cli/devices.c:2820
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'dev' कमांड '%s' वैध नहीं है."
-#: ../cli/src/network-manager.c:37
+#: ../clients/cli/network-manager.c:35
msgid "RUNNING"
msgstr "कारà¥à¤¯à¤¶à¥€à¤²"
-#: ../cli/src/network-manager.c:38
+#. 0
+#: ../clients/cli/network-manager.c:36
msgid "VERSION"
msgstr "संसà¥à¤•à¤°à¤£"
-#: ../cli/src/network-manager.c:40
+#. 2
+#: ../clients/cli/network-manager.c:38
msgid "STARTUP"
msgstr "पà¥à¤°à¤¾à¤°à¤‚भ"
-#: ../cli/src/network-manager.c:41
+#. 3
+#: ../clients/cli/network-manager.c:39
msgid "CONNECTIVITY"
msgstr "कनेकà¥à¤Ÿà¤¿à¤µà¤¿à¤Ÿà¥€"
-#: ../cli/src/network-manager.c:42
+#. 4
+#: ../clients/cli/network-manager.c:40
msgid "NETWORKING"
msgstr "संजालन"
-#: ../cli/src/network-manager.c:43
+#. 5
+#: ../clients/cli/network-manager.c:41
msgid "WIFI-HW"
msgstr "WIFI-HW"
-#: ../cli/src/network-manager.c:44
+#. 6
+#: ../clients/cli/network-manager.c:42
msgid "WIFI"
msgstr "वाईफ़ाई "
-#: ../cli/src/network-manager.c:45
+#. 7
+#: ../clients/cli/network-manager.c:43
msgid "WWAN-HW"
msgstr "WWAN-HW"
-#: ../cli/src/network-manager.c:46
+#. 8
+#: ../clients/cli/network-manager.c:44
msgid "WWAN"
msgstr "WWAN"
-#: ../cli/src/network-manager.c:47
+#. 9
+#: ../clients/cli/network-manager.c:45
msgid "WIMAX-HW"
msgstr "WIMAX-HW"
-#: ../cli/src/network-manager.c:48
+#. 10
+#: ../clients/cli/network-manager.c:46
msgid "WIMAX"
msgstr "WIMAX"
-#: ../cli/src/network-manager.c:70
+#: ../clients/cli/network-manager.c:68
msgid "PERMISSION"
msgstr "अनà¥à¤®à¤¤à¤¿"
-#: ../cli/src/network-manager.c:71
+#. 0
+#: ../clients/cli/network-manager.c:69
msgid "VALUE"
msgstr "मान"
-#: ../cli/src/network-manager.c:79
+#: ../clients/cli/network-manager.c:77
msgid "LEVEL"
msgstr "सà¥à¤¤à¤°"
-#: ../cli/src/network-manager.c:80
+#. 0
+#: ../clients/cli/network-manager.c:78
msgid "DOMAINS"
msgstr "DOMAINS"
-#: ../cli/src/network-manager.c:95
+#: ../clients/cli/network-manager.c:93
#, c-format
msgid ""
"Usage: nmcli general { COMMAND | help }\n"
@@ -3510,7 +4058,7 @@ msgstr ""
" logging [level <log level>] [domains <log domains>]\n"
"\n"
-#: ../cli/src/network-manager.c:107
+#: ../clients/cli/network-manager.c:105
#, c-format
msgid ""
"Usage: nmcli general status { help }\n"
@@ -3523,11 +4071,12 @@ msgstr ""
"पà¥à¤°à¤¯à¥‹à¤—: nmcli general status { help }\n"
"\n"
"NetworkManager का सà¥à¤¥à¤¿à¤¤à¤¿ दिखाà¤à¤.\n"
-"'status' तयशà¥à¤¦à¤¾ कà¥à¤°à¤¿à¤¯à¤¾ है, जिसका अरà¥à¤¥ है कि 'nmcli gen' 'nmcli gen "
-"status' को कॉल करता है\n"
+"'status' तयशà¥à¤¦à¤¾ कà¥à¤°à¤¿à¤¯à¤¾ है, जिसका अरà¥à¤¥ है कि 'nmcli gen' 'nmcli gen status' को "
+"कॉल "
+"करता है\n"
"\n"
-#: ../cli/src/network-manager.c:117
+#: ../clients/cli/network-manager.c:115
#, c-format
msgid ""
"Usage: nmcli general hostname { ARGUMENTS | help }\n"
@@ -3536,8 +4085,8 @@ msgid ""
"\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"
+"a hostname, NetworkManager will set it as the new persistent system "
+"hostname.\n"
"\n"
msgstr ""
"पà¥à¤°à¤¯à¥‹à¤—: nmcli general hostname { ARGUMENTS | help }\n"
@@ -3547,11 +4096,11 @@ msgstr ""
"परसिसà¥à¤Ÿà¥‡à¤‚ट तंतà¥à¤° मेजबाननाम बदलें या पाà¤à¤.\n"
"बिना किसी विरà¥à¤¤à¤• के, यह मौजूदा रूप से विनà¥à¤¯à¤¸à¥à¤¤ मेजबाननाम को छापता है. जब आप\n"
"मेजबाननाम पास करते हैं, NetworkManager इसे नया सà¥à¤¥à¤¿à¤° तंतà¥à¤° मेजबाननाम के रूप "
-"में सेट करता है."
-"\n"
+"में सेट करता "
+"है.\n"
"\n"
-#: ../cli/src/network-manager.c:130
+#: ../clients/cli/network-manager.c:128
#, c-format
msgid ""
"Usage: nmcli general permissions { help }\n"
@@ -3564,7 +4113,7 @@ msgstr ""
"सतà¥à¤¯à¤¾à¤ªà¤¿à¤¤ संचालन के लिठकॉलर अनà¥à¤®à¤¤à¤¿ दिखाà¤à¤.\n"
"\n"
-#: ../cli/src/network-manager.c:139
+#: ../clients/cli/network-manager.c:137
#, c-format
msgid ""
"Usage: nmcli general logging { ARGUMENTS | help }\n"
@@ -3590,7 +4139,7 @@ msgstr ""
"संभावित लॉगिंग डोमेन के लिà¤.\n"
"\n"
-#: ../cli/src/network-manager.c:153
+#: ../clients/cli/network-manager.c:151
#, c-format
msgid ""
"Usage: nmcli networking { COMMAND | help }\n"
@@ -3615,7 +4164,7 @@ msgstr ""
" connectivity [check]\n"
"\n"
-#: ../cli/src/network-manager.c:164
+#: ../clients/cli/network-manager.c:162
#, c-format
msgid ""
"Usage: nmcli networking on { help }\n"
@@ -3628,7 +4177,7 @@ msgstr ""
"सà¥à¤µà¤¿à¤š संजालन चालू.\n"
"\n"
-#: ../cli/src/network-manager.c:173
+#: ../clients/cli/network-manager.c:171
#, c-format
msgid ""
"Usage: nmcli networking off { help }\n"
@@ -3641,7 +4190,7 @@ msgstr ""
"सà¥à¤µà¤¿à¤š संजालन चालू\n"
"\n"
-#: ../cli/src/network-manager.c:182
+#: ../clients/cli/network-manager.c:180
#, c-format
msgid ""
"Usage: nmcli networking connectivity { ARGUMENTS | help }\n"
@@ -3649,8 +4198,8 @@ msgid ""
"ARGUMENTS := [check]\n"
"\n"
"Get network connectivity state.\n"
-"The optional 'check' argument makes NetworkManager re-check the connectivity."
-"\n"
+"The optional 'check' argument makes NetworkManager re-check the "
+"connectivity.\n"
"\n"
msgstr ""
"पà¥à¤°à¤¯à¥‹à¤—: nmcli networking connectivity { ARGUMENTS | help }\n"
@@ -3659,11 +4208,10 @@ msgstr ""
"\n"
"संजाल कनेकà¥à¤Ÿà¤¿à¤µà¤¿à¤Ÿà¥€ सà¥à¤¥à¤¿à¤¤à¤¿ पाà¤à¤.\n"
"वैकलà¥à¤ªà¤¿à¤• 'check' वितरà¥à¤• NetworkManager कनेकà¥à¤Ÿà¤¿à¤µà¤¿à¤Ÿà¥€ को फिर जाà¤à¤š करने के लिठ"
-"बनाता है."
-"\n"
+"बनाता है.\n"
"\n"
-#: ../cli/src/network-manager.c:195
+#: ../clients/cli/network-manager.c:193
#, c-format
msgid ""
"Usage: nmcli radio { COMMAND | help }\n"
@@ -3688,7 +4236,7 @@ msgstr ""
" all | wifi | wwan [ on | off ]\n"
"\n"
-#: ../cli/src/network-manager.c:210
+#: ../clients/cli/network-manager.c:208
#, c-format
msgid ""
"Usage: nmcli radio all { ARGUMENTS | help }\n"
@@ -3705,7 +4253,7 @@ msgstr ""
"सभी रेडियो सà¥à¤µà¤¿à¤š की सà¥à¤¥à¤¿à¤¤à¤¿ पाà¤à¤, या उनà¥à¤¹à¥‡à¤‚ चालू/बंद करें.\n"
"\n"
-#: ../cli/src/network-manager.c:221
+#: ../clients/cli/network-manager.c:219
#, c-format
msgid ""
"Usage: nmcli radio wifi { ARGUMENTS | help }\n"
@@ -3722,7 +4270,7 @@ msgstr ""
"सभी वाई-फ़ाई रेडियो सà¥à¤µà¤¿à¤š की सà¥à¤¥à¤¿à¤¤à¤¿ पाà¤à¤, या उनà¥à¤¹à¥‡à¤‚ चालू/बंद करें.\n"
"\n"
-#: ../cli/src/network-manager.c:232
+#: ../clients/cli/network-manager.c:230
#, c-format
msgid ""
"Usage: nmcli radio wwan { ARGUMENTS | help }\n"
@@ -3739,7 +4287,7 @@ msgstr ""
"सभी मोबाइल बà¥à¤°à¤¾à¤à¤¡à¤¬à¥ˆà¤‚ड रेडियो सà¥à¤µà¤¿à¤š की सà¥à¤¥à¤¿à¤¤à¤¿ पाà¤à¤, या उनà¥à¤¹à¥‡à¤‚ चालू/बंद करें.\n"
"\n"
-#: ../cli/src/network-manager.c:244
+#: ../clients/cli/network-manager.c:242
#, c-format
msgid ""
"Usage: nmcli radio wimax { ARGUMENTS | help }\n"
@@ -3756,171 +4304,173 @@ msgstr ""
"सभी वाईमैकà¥à¤¸ रेडियो सà¥à¤µà¤¿à¤š की सà¥à¤¥à¤¿à¤¤à¤¿ पाà¤à¤, या उनà¥à¤¹à¥‡à¤‚ चालू/बंद करें.\n"
"\n"
-#: ../cli/src/network-manager.c:264
+#: ../clients/cli/network-manager.c:262
msgid "asleep"
msgstr "asleep"
-#: ../cli/src/network-manager.c:266
+#: ../clients/cli/network-manager.c:264
msgid "connecting"
msgstr "जà¥à¤¡à¤¼ रहा है"
-#: ../cli/src/network-manager.c:268
+#: ../clients/cli/network-manager.c:266
msgid "connected (local only)"
msgstr " जà¥à¤¡à¤¼à¤¾(केवल सà¥à¤¥à¤¾à¤¨à¥€à¤¯)"
-#: ../cli/src/network-manager.c:270
+#: ../clients/cli/network-manager.c:268
msgid "connected (site only)"
msgstr "जà¥à¤¡à¤¼à¤¾ (केवल साइट)"
-#: ../cli/src/network-manager.c:274
+#: ../clients/cli/network-manager.c:272
msgid "disconnecting"
msgstr "डिसकनेकà¥à¤Ÿ कर रहा है"
-#: ../cli/src/network-manager.c:290
+#: ../clients/cli/network-manager.c:288
msgid "portal"
msgstr "पोरà¥à¤Ÿà¤²"
-#: ../cli/src/network-manager.c:292
+#: ../clients/cli/network-manager.c:290
msgid "limited"
msgstr "सीमित"
-#: ../cli/src/network-manager.c:294
+#: ../clients/cli/network-manager.c:292
msgid "full"
msgstr "पूरà¥à¤£"
-#: ../cli/src/network-manager.c:332
+#: ../clients/cli/network-manager.c:330
#, c-format
msgid "Error: only these fields are allowed: %s"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: केवल यह कà¥à¤·à¥‡à¤¤à¥à¤° ही अनà¥à¤®à¤¤à¤¿ पà¥à¤°à¤¾à¤ªà¥à¤¤ है: %s"
-#: ../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
+#: ../clients/cli/network-manager.c:346 ../clients/cli/network-manager.c:347
+#: ../clients/cli/network-manager.c:348 ../clients/cli/network-manager.c:349
+#: ../clients/cli/network-manager.c:350 ../clients/cli/network-manager.c:352
+#: ../clients/cli/network-manager.c:353
msgid "enabled"
msgstr "सकà¥à¤·à¤®"
-#: ../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
+#: ../clients/cli/network-manager.c:346 ../clients/cli/network-manager.c:347
+#: ../clients/cli/network-manager.c:348 ../clients/cli/network-manager.c:349
+#: ../clients/cli/network-manager.c:350 ../clients/cli/network-manager.c:352
+#: ../clients/cli/network-manager.c:353
msgid "disabled"
msgstr "अकà¥à¤·à¤®"
-#: ../cli/src/network-manager.c:367
+#: ../clients/cli/network-manager.c:365
msgid "NetworkManager status"
msgstr "NetworkManager सà¥à¤¥à¤¿à¤¤à¤¿"
-#: ../cli/src/network-manager.c:372
+#: ../clients/cli/network-manager.c:370
msgid "running"
msgstr "कारà¥à¤¯à¤¶à¥€à¤²"
-#: ../cli/src/network-manager.c:372
+#: ../clients/cli/network-manager.c:370
msgid "not running"
msgstr "नहीं चल रहा है"
-#: ../cli/src/network-manager.c:375
+#: ../clients/cli/network-manager.c:373
msgid "starting"
msgstr "शà¥à¤°à¥‚ कर रहा है"
-#: ../cli/src/network-manager.c:375
+#: ../clients/cli/network-manager.c:373
msgid "started"
msgstr "आरंभ किया"
-#: ../cli/src/network-manager.c:446
+#: ../clients/cli/network-manager.c:444
msgid "auth"
msgstr "ऑथ"
-#: ../cli/src/network-manager.c:475
+#: ../clients/cli/network-manager.c:473
#, c-format
msgid "Error: 'general permissions': %s"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'सामानà¥à¤¯ अनà¥à¤®à¤¤à¤¿à¤¯à¤¾à¤': %s"
-#: ../cli/src/network-manager.c:489
+#: ../clients/cli/network-manager.c:487
msgid "NetworkManager permissions"
msgstr "नेटवरà¥à¤•à¤ªà¥à¤°à¤¬à¤‚धक अनà¥à¤®à¤¤à¤¿"
-#: ../cli/src/network-manager.c:530
+#: ../clients/cli/network-manager.c:528
#, c-format
msgid "Error: 'general logging': %s"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'सामानà¥à¤¯ लॉगिंग': %s"
-#: ../cli/src/network-manager.c:545
+#: ../clients/cli/network-manager.c:543
msgid "NetworkManager logging"
msgstr "नेटवरà¥à¤•à¤ªà¥à¤°à¤¬à¤‚धक लॉगिंग"
-#: ../cli/src/network-manager.c:565
+#: ../clients/cli/network-manager.c:563
#, c-format
msgid "Error: failed to set hostname: (%d) %s"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: मेजबाननाम सेट करने में विफल: (%d) %s"
-#: ../cli/src/network-manager.c:682
+#: ../clients/cli/network-manager.c:681
#, c-format
msgid "Error: access denied to set logging; %s"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: लॉगिंग सेट करने के लिठपहà¥à¤à¤š मना; %s"
-#: ../cli/src/network-manager.c:684
+#: ../clients/cli/network-manager.c:683
#, c-format
msgid "Error: %s"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: %s"
-#: ../cli/src/network-manager.c:692
+#: ../clients/cli/network-manager.c:691
#, c-format
msgid "Error: 'general' command '%s' is not valid."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'सामानà¥à¤¯' कमांड '%s' वैध नहीं है."
-#: ../cli/src/network-manager.c:710
+#: ../clients/cli/network-manager.c:709
#, c-format
msgid "Error: '--fields' value '%s' is not valid here (allowed field: %s)"
msgstr ""
-"तà¥à¤°à¥à¤Ÿà¤¿: '--fields' मान '%s' यहाठवैध नहीं है (अनà¥à¤®à¤¤à¤¿ पà¥à¤°à¤¾à¤ªà¥à¤¤ कà¥à¤·à¥‡à¤¤à¥à¤° हैं: "
-"%s)"
+"तà¥à¤°à¥à¤Ÿà¤¿: '--fields' मान '%s' यहाठवैध नहीं है (अनà¥à¤®à¤¤à¤¿ पà¥à¤°à¤¾à¤ªà¥à¤¤ कà¥à¤·à¥‡à¤¤à¥à¤° हैं: %s)"
-#: ../cli/src/network-manager.c:735
+#: ../clients/cli/network-manager.c:734
#, c-format
msgid "Error: invalid '%s' argument: '%s' (use on/off)."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: अवैध '%s' वितरà¥à¤•: '%s' (चालू/बंद का उपयोग करें)."
-#: ../cli/src/network-manager.c:746
+#: ../clients/cli/network-manager.c:745
msgid "Connectivity"
msgstr "कनेकà¥à¤Ÿà¤¿à¤µà¤¿à¤Ÿà¥€"
-#: ../cli/src/network-manager.c:758
+#: ../clients/cli/network-manager.c:757
msgid "Networking"
msgstr "संजालन"
-#: ../cli/src/network-manager.c:783
+#: ../clients/cli/network-manager.c:782
#, c-format
msgid "Error: 'networking connectivity' command '%s' is not valid."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'networking connectivity' कमांड '%s' वैध नहीं है."
-#: ../cli/src/network-manager.c:799
+#: ../clients/cli/network-manager.c:798
#, c-format
msgid "Error: 'networking' command '%s' is not valid."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'संजालन' कमांड '%s' वैध नहीं है."
-#: ../cli/src/network-manager.c:825 ../cli/src/network-manager.c:845
+#: ../clients/cli/network-manager.c:824 ../clients/cli/network-manager.c:844
msgid "Radio switches"
msgstr "रेडियो सà¥à¤µà¤¿à¤šà¥‡à¤¸"
-#: ../cli/src/network-manager.c:863
+#. no argument, show current WiFi state
+#: ../clients/cli/network-manager.c:862
msgid "Wi-Fi radio switch"
msgstr "Wi-Fi रेडियो सà¥à¤µà¤¿à¤š"
-#: ../cli/src/network-manager.c:879
+#. no argument, show current WWAN (mobile broadband) state
+#: ../clients/cli/network-manager.c:878
msgid "WWAN radio switch"
msgstr "WWAN रेडियो सà¥à¤µà¤¿à¤š"
-#: ../cli/src/network-manager.c:896
+#. no argument, show current WiMAX state
+#: ../clients/cli/network-manager.c:895
msgid "WiMAX radio switch"
msgstr "WiMAX रेडियो सà¥à¤µà¤¿à¤š"
-#: ../cli/src/network-manager.c:908
+#: ../clients/cli/network-manager.c:907
#, c-format
msgid "Error: 'radio' command '%s' is not valid."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'रेडियो' कमांड '%s' वैध नहीं है."
-#: ../cli/src/nmcli.c:78
+#: ../clients/cli/nmcli.c:82
#, c-format
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
@@ -3973,335 +4523,300 @@ msgstr ""
" d[evice] devices managed by NetworkManager\n"
"\n"
-#: ../cli/src/nmcli.c:132
+#: ../clients/cli/nmcli.c:136
#, c-format
msgid "Error: Object '%s' is unknown, try 'nmcli help'."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: वसà¥à¤¤à¥ '%s' अजà¥à¤žà¤¾à¤¤ है, 'nmcli help' आजमाà¤à¤."
-#: ../cli/src/nmcli.c:162
+#: ../clients/cli/nmcli.c:166
#, c-format
msgid "Error: Option '--terse' is specified the second time."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: विकलà¥à¤ª '--terse' ने दूसरी बार निरà¥à¤¦à¤¿à¤·à¥à¤Ÿ किया है."
-#: ../cli/src/nmcli.c:167
+#: ../clients/cli/nmcli.c:171
#, c-format
msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: विकलà¥à¤ª '--terse' '--pretty' के साथ परसà¥à¤ªà¤° वहिरà¥à¤µà¥‡à¤·à¥€ है."
-#: ../cli/src/nmcli.c:175
+#: ../clients/cli/nmcli.c:179
#, c-format
msgid "Error: Option '--pretty' is specified the second time."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: विकलà¥à¤ª '--pretty' दूसरी बार निरà¥à¤¦à¤¿à¤·à¥à¤Ÿ किया है."
-#: ../cli/src/nmcli.c:180
+#: ../clients/cli/nmcli.c:184
#, c-format
msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: विकलà¥à¤ª '--pretty' परसà¥à¤ªà¤° वहिरà¥à¤µà¥‡à¤¶à¥€ है '--terse' के साथ."
-#: ../cli/src/nmcli.c:190 ../cli/src/nmcli.c:206 ../cli/src/nmcli.c:235
+#: ../clients/cli/nmcli.c:194 ../clients/cli/nmcli.c:210
+#: ../clients/cli/nmcli.c:239
#, c-format
msgid "Error: missing argument for '%s' option."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' विकलà¥à¤ª के लिठअनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤ तरà¥à¤•."
-#: ../cli/src/nmcli.c:199 ../cli/src/nmcli.c:215
+#: ../clients/cli/nmcli.c:203 ../clients/cli/nmcli.c:219
#, c-format
msgid "Error: '%s' is not valid argument for '%s' option."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' '%s' विकलà¥à¤ª के लिठवैध तरà¥à¤• नहीं है."
-#: ../cli/src/nmcli.c:222
+#: ../clients/cli/nmcli.c:226
#, c-format
msgid "Error: fields for '%s' options are missing."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' विकलà¥à¤ª के लिठकà¥à¤·à¥‡à¤¤à¥à¤° अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤ है."
-#: ../cli/src/nmcli.c:240
+#: ../clients/cli/nmcli.c:244
#, c-format
msgid "Error: '%s' is not a valid timeout for '%s' option."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' वैध समापà¥à¤¤à¤¿ नहीं है '%s' विकलà¥à¤ª के लिà¤."
-#: ../cli/src/nmcli.c:247
+#: ../clients/cli/nmcli.c:251
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "nmcli टूल, संसà¥à¤•à¤°à¤£ %s\n"
-#: ../cli/src/nmcli.c:253
+#: ../clients/cli/nmcli.c:257
#, c-format
msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: विकलà¥à¤ª '%s' अजà¥à¤žà¤¾à¤¤ है, 'nmcli -help' आजमाà¤à¤."
-#: ../cli/src/nmcli.c:288
+#: ../clients/cli/nmcli.c:337 ../clients/cli/nmcli.c:346
#, c-format
+#| msgid ""
+#| "\n"
+#| "Error: nmcli terminated by signal %d."
msgid ""
"\n"
-"Error: nmcli terminated by signal %d."
+"Error: nmcli terminated by signal %s (%d)\n"
msgstr ""
"\n"
-"तà¥à¤°à¥à¤Ÿà¤¿: nmcli की संकेत %d के दà¥à¤µà¤¾à¤°à¤¾ समापà¥à¤¤à¤¿."
+"तà¥à¤°à¥à¤Ÿà¤¿: nmcli की संकेत %s (%d) के दà¥à¤µà¤¾à¤°à¤¾ समापà¥à¤¤à¤¿.\n"
-#: ../cli/src/nmcli.c:318 ../src/main.c:130
+#: ../clients/cli/nmcli.c:377
#, c-format
-msgid "Failed to set signal mask: %d"
-msgstr "संकेत मà¥à¤–ौटा सेट करने में विफल: %d"
+#| msgid "Failed to set signal mask: %d"
+msgid "Failed to set signal mask: %d\n"
+msgstr "संकेत मà¥à¤–ौटा सेट करने में विफल: %d\n"
-#: ../cli/src/nmcli.c:325 ../src/main.c:139
+#: ../clients/cli/nmcli.c:384
#, c-format
-msgid "Failed to create signal handling thread: %d"
-msgstr "संकेत से निपटने मà¥à¤¦à¥à¤¦à¤¾ बनाने में विफल: %d"
+#| msgid "Failed to create signal handling thread: %d"
+msgid "Failed to create signal handling thread: %d\n"
+msgstr "संकेत से निपटने मà¥à¤¦à¥à¤¦à¤¾ बनाने में विफल: %d\n"
-#: ../cli/src/nmcli.c:338 ../test/nm-online.c:149
+#: ../clients/cli/nmcli.c:481 ../clients/nm-online.c:197
#, c-format
-msgid "Error: Could not create NMClient object."
-msgstr "तà¥à¤°à¥à¤Ÿà¤¿: NMClient ऑबà¥à¤œà¥‡à¤•à¥à¤Ÿ नहीं बना सका."
+#| msgid "Error: Could not create NMClient object."
+msgid "Error: Could not create NMClient object: %s."
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿: NMClient ऑबà¥à¤œà¥‡à¤•à¥à¤Ÿ नहीं बना सका: %s."
-#: ../cli/src/nmcli.c:354
+#: ../clients/cli/nmcli.c:498
msgid "Success"
msgstr "सफल"
-#: ../cli/src/settings.c:666
+#: ../clients/cli/settings.c:656
#, c-format
-msgid "%d (hex-ascii-key)"
-msgstr "%d (hex-ascii-key)"
+#| msgid "%d (hex-ascii-key)"
+msgid "%d (key)"
+msgstr "%d (key)"
-#: ../cli/src/settings.c:668
+#: ../clients/cli/settings.c:658
#, c-format
-msgid "%d (104/128-bit passphrase)"
-msgstr "%d (104/128-बिट पासफà¥à¤°à¥‡à¤œ)"
+#| msgid "%d (104/128-bit passphrase)"
+msgid "%d (passphrase)"
+msgstr "%d (पासफà¥à¤°à¥‡à¤œ)"
-#: ../cli/src/settings.c:671 ../cli/src/settings.c:799
+#: ../clients/cli/settings.c:661 ../clients/cli/settings.c:742
#, c-format
msgid "%d (unknown)"
msgstr "%d (अजà¥à¤žà¤¾à¤¤)"
-#: ../cli/src/settings.c:697
-msgid "0 (unknown)"
-msgstr "0 (अजà¥à¤žà¤¾à¤¤)"
-
-#: ../cli/src/settings.c:703
-msgid "any, "
-msgstr "कोई, "
-
-#: ../cli/src/settings.c:705
-msgid "900 MHz, "
-msgstr "900 MHz, "
-
-#: ../cli/src/settings.c:707
-msgid "1800 MHz, "
-msgstr "1800 MHz, "
-
-#: ../cli/src/settings.c:709
-msgid "1900 MHz, "
-msgstr "1900 MHz, "
-
-#: ../cli/src/settings.c:711
-msgid "850 MHz, "
-msgstr "850 MHz, "
-
-#: ../cli/src/settings.c:713
-msgid "WCDMA 3GPP UMTS 2100 MHz, "
-msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-
-#: ../cli/src/settings.c:715
-msgid "WCDMA 3GPP UMTS 1800 MHz, "
-msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-
-#: ../cli/src/settings.c:717
-msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
-msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-
-#: ../cli/src/settings.c:719
-msgid "WCDMA 3GPP UMTS 800 MHz, "
-msgstr "WCDMA 3GPP UMTS 800 MHz, "
-
-#: ../cli/src/settings.c:721
-msgid "WCDMA 3GPP UMTS 850 MHz, "
-msgstr "WCDMA 3GPP UMTS 850 MHz, "
-
-#: ../cli/src/settings.c:723
-msgid "WCDMA 3GPP UMTS 900 MHz, "
-msgstr "WCDMA 3GPP UMTS 900 MHz, "
-
-#: ../cli/src/settings.c:725
-msgid "WCDMA 3GPP UMTS 1700 MHz, "
-msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-
-#: ../cli/src/settings.c:727
-msgid "WCDMA 3GPP UMTS 1900 MHz, "
-msgstr "WCDMA 3GPP UMTS 1900 MHz, "
-
-#: ../cli/src/settings.c:729
-msgid "WCDMA 3GPP UMTS 2600 MHz, "
-msgstr "WCDMA 3GPP UMTS 2600 MHz, "
-
-#: ../cli/src/settings.c:747
+#: ../clients/cli/settings.c:690
msgid "0 (NONE)"
msgstr "0 (कà¥à¤› नहीं)"
-#: ../cli/src/settings.c:753
+#: ../clients/cli/settings.c:696
msgid "REORDER_HEADERS, "
msgstr "REORDER_HEADERS, "
-#: ../cli/src/settings.c:755
+#: ../clients/cli/settings.c:698
msgid "GVRP, "
msgstr "GVRP, "
-#: ../cli/src/settings.c:757
+#: ../clients/cli/settings.c:700
msgid "LOOSE_BINDING, "
msgstr "LOOSE_BINDING, "
-#: ../cli/src/settings.c:793
+#: ../clients/cli/settings.c:736
#, c-format
msgid "%d (disabled)"
msgstr "%d (अकà¥à¤·à¤®)"
-#: ../cli/src/settings.c:795
+#: ../clients/cli/settings.c:738
#, c-format
msgid "%d (enabled, prefer public IP)"
msgstr "%d (सकà¥à¤·à¤®, सारà¥à¤µà¤œà¤¨à¤¿à¤• आईपी पसंद करते हैं)"
-#: ../cli/src/settings.c:797
+#: ../clients/cli/settings.c:740
#, c-format
msgid "%d (enabled, prefer temporary IP)"
msgstr "%d (सकà¥à¤·à¤® है, असà¥à¤¥à¤¾à¤¯à¥€ आईपी पसंद करते हैं)"
-#: ../cli/src/settings.c:809
+#: ../clients/cli/settings.c:752
msgid "0 (none)"
msgstr "0 (कोई नहीं)"
-#: ../cli/src/settings.c:815
+#: ../clients/cli/settings.c:758
msgid "agent-owned, "
msgstr "à¤à¤œà¥‡à¤‚ट-सà¥à¤µà¤¾à¤®à¤¿à¤¤à¥à¤µ, "
-#: ../cli/src/settings.c:817
+#: ../clients/cli/settings.c:760
msgid "not saved, "
msgstr "सहेजा नहीं"
-#: ../cli/src/settings.c:819
+#: ../clients/cli/settings.c:762
msgid "not required, "
msgstr "जरूरी नहीं, "
-#: ../cli/src/settings.c:1124
+#: ../clients/cli/settings.c:1044
msgid "0 (disabled)"
msgstr "0 (disabled)"
-#: ../cli/src/settings.c:1130
+#: ../clients/cli/settings.c:1050
msgid "enabled, "
msgstr "सकà¥à¤·à¤®, "
-#: ../cli/src/settings.c:1132
+#: ../clients/cli/settings.c:1052
msgid "advertise, "
msgstr "विजà¥à¤žà¤¾à¤ªà¤¿à¤¤ करें,"
-#: ../cli/src/settings.c:1134
+#: ../clients/cli/settings.c:1054
msgid "willing, "
msgstr "इचà¥à¤›à¥à¤•, "
-#: ../cli/src/settings.c:1162
+#: ../clients/cli/settings.c:1082
msgid "-1 (unset)"
msgstr "-1 (अनसेट)"
-#: ../cli/src/settings.c:1270 ../cli/src/settings.c:1453
-#: ../cli/src/settings.c:1493
+#: ../clients/cli/settings.c:1179 ../clients/cli/settings.c:1511
+#: ../clients/cli/settings.c:1553
msgid "auto"
msgstr "auto"
-#: ../cli/src/settings.c:1283
+#: ../clients/cli/settings.c:1192
msgid "default"
msgstr "तयशà¥à¤¦à¤¾"
-#: ../cli/src/settings.c:1614
+#: ../clients/cli/settings.c:1681
#, c-format
msgid "Do you also want to set '%s' to '%s'? [yes]: "
msgstr "कà¥à¤¯à¤¾ आप '%s' को '%s' में सेट करना चाहते हैं? [yes]: "
-#: ../cli/src/settings.c:1616
+#: ../clients/cli/settings.c:1683
#, 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
+#: ../clients/cli/settings.c:1844
+#, c-format
+msgid ""
+"Warning: %s.%s set to '%s', but it might be ignored in infrastructure mode\n"
+msgstr ""
+"चेतावनी: %s.%s '%s' मे सेट किया है, लेकिन यह बà¥à¤¨à¤¿à¤¯à¤¾à¤¦à¥€ अवसà¥à¤¥à¤¾ में अनदेखा किया "
+"जा सकता है\n"
+
+#: ../clients/cli/settings.c:1926 ../clients/cli/settings.c:2186
+#: ../clients/cli/settings.c:4262
#, c-format
msgid "'%s' is not valid"
msgstr "'%s' वैध नहीं है"
-#: ../cli/src/settings.c:1837
+#: ../clients/cli/settings.c:1949
#, c-format
msgid "'%d' is not valid; use <%d-%d>"
msgstr "'%d' वैध नहीं है; उपयोग करें <%d-%d>"
-#: ../cli/src/settings.c:1859
+#: ../clients/cli/settings.c:1971
#, c-format
msgid "'%u' is not valid; use <%d-%d>"
msgstr "'%u' वैध नहीं है; <%d-%d> उपयोग करें"
-#: ../cli/src/settings.c:1925
+#: ../clients/cli/settings.c:2037
#, c-format
msgid "'%s' is not valid; use <option>=<value>"
msgstr "'%s' वैध नहीं है; <option>=<value> का उपयोग करें"
-#: ../cli/src/settings.c:1959
+#: ../clients/cli/settings.c:2071
#, c-format
msgid "index '%s' is not valid"
msgstr "सूची '%s' वैध नहीं है"
-#: ../cli/src/settings.c:1964
+#: ../clients/cli/settings.c:2076 ../clients/cli/settings.c:2101
msgid "no item to remove"
msgstr "हटाने के लिठकोई मद नहीं"
-#: ../cli/src/settings.c:1968
+#: ../clients/cli/settings.c:2080 ../clients/cli/settings.c:2105
#, c-format
msgid "index '%d' is not in range <0-%d>"
msgstr "सूची '%d' परिसर में नहीं है <0-%d>"
-#: ../cli/src/settings.c:1983
+#: ../clients/cli/settings.c:2120
#, c-format
msgid "invalid option '%s'"
msgstr "अवैध विकलà¥à¤ª '%s'"
-#: ../cli/src/settings.c:1985
+#: ../clients/cli/settings.c:2122
msgid "missing option"
msgstr "अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤ विकलà¥à¤ª"
-#: ../cli/src/settings.c:2015 ../cli/src/settings.c:2035
+#: ../clients/cli/settings.c:2152
#, c-format
msgid "'%s' is not a valid number (or out of range)"
msgstr "'%s' वैध संखà¥à¤¯à¤¾ नहीं है (या परिसर से बाहर)"
-#: ../cli/src/settings.c:2089
+#: ../clients/cli/settings.c:2203
#, 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
+#: ../clients/cli/settings.c:2228 ../libnm-core/nm-setting-connection.c:795
+#: ../libnm-core/nm-setting-infiniband.c:272
+#: ../libnm-util/nm-setting-connection.c:833
+#: ../libnm-util/nm-setting-infiniband.c:268
#, 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
+#: ../clients/cli/settings.c:2246 ../clients/cli/settings.c:3651
+#: ../libnm-core/nm-setting-gsm.c:332 ../libnm-util/nm-setting-gsm.c:372
#, c-format
msgid "'%s' is not a number"
msgstr "'%s' संखà¥à¤¯à¤¾ नहीं है"
-#: ../cli/src/settings.c:2185
+#: ../clients/cli/settings.c:2298
#, c-format
msgid "'%s' is not a valid hex character"
msgstr "'%s' à¤à¤• वैध हेसà¥à¤• वरà¥à¤£ नहीं है"
-#: ../cli/src/settings.c:2215
+#: ../clients/cli/settings.c:2328
#, c-format
msgid "'%s' is not a valid MAC"
msgstr "'%s' à¤à¤• वैध MAC नहीं है"
-#: ../cli/src/settings.c:2252 ../libnm-util/nm-setting-connection.c:715
+#: ../clients/cli/settings.c:2365 ../libnm-core/nm-setting-connection.c:784
+#: ../libnm-util/nm-setting-connection.c:790
#, c-format
msgid "'%s' is not a valid UUID"
msgstr "'%s' वैध UUID नहीं है"
-#: ../cli/src/settings.c:2317
+#: ../clients/cli/settings.c:2432
+#, c-format
+msgid "the property doesn't contain permission '%s'"
+msgstr "विशेषता में '%s' अनà¥à¤®à¤¤à¤¿ समाहित नहीं है"
+
+#: ../clients/cli/settings.c:2444
msgid ""
-"Enter a list of user permissions. This is a list of user names formatted as:\n"
+"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"
@@ -4313,16 +4828,81 @@ msgstr ""
"\n"
"उदाहरण: alice bob charlie\n"
-#: ../cli/src/settings.c:2332
+#: ../clients/cli/settings.c:2463
#, c-format
msgid "'%s' is not valid master; use ifname or connection UUID"
msgstr "'%s' à¤à¤• वैध मासà¥à¤Ÿà¤° नहीं है; ifname या कनेकà¥à¤¶à¤¨ UUID का उपयोग करें"
-#: ../cli/src/settings.c:2453
+#: ../clients/cli/settings.c:2507
+#, c-format
+msgid "Warning: %s is not an UUID of any existing connection profile\n"
+msgstr "चेतावनी: %s à¤à¤• UUID नहीं है किसी मौजूदा कनेकà¥à¤¶à¤¨ पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤² का\n"
+
+#: ../clients/cli/settings.c:2511 ../clients/cli/settings.c:2527
+#, c-format
+#| msgid "Error: '%s' is not a valid connection type."
+msgid "'%s' is not a VPN connection profile"
+msgstr "'%s' à¤à¤• वैध कनेकà¥à¤¶à¤¨ पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤² नहीं है"
+
+#: ../clients/cli/settings.c:2520
+#, c-format
+#| msgid "'%s' is not a valid team configuration or file name."
+msgid "'%s' is not a name of any exiting profile"
+msgstr "'%s' किसी मौजूदा पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤² का नाम नहीं है"
+
+#: ../clients/cli/settings.c:2554
+#, c-format
+#| msgid "'%s' is not a valid UUID"
+msgid "the value '%s' is not a valid UUID"
+msgstr "मान '%s' à¤à¤• वैध UUID नहीं है"
+
+#: ../clients/cli/settings.c:2561
+#, c-format
+msgid "the property doesn't contain UUID '%s'"
+msgstr "विशेषता में UUID '%s' नहीं है"
+
+#: ../clients/cli/settings.c:2573
+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 या ID (name). nmcli\n"
+"से निरà¥à¤¦à¤¿à¤·à¥à¤Ÿ होना चाहिठजो नामों को UUID में पारदरà¥à¤¶à¥€ तरीके से अनूदित करता "
+"है. नोट करें कि NetworkManager केवल\n"
+"VPN को बतौर दà¥à¤µà¤¿à¤¤à¥€à¤¯à¤• कनेकà¥à¤¶à¤¨ इस कà¥à¤·à¤£ में समरà¥à¤¥à¤¨ करता है.\n"
+"ये मद कौमा या सà¥à¤¥à¤¾à¤¨ से अलग किठजा सकते हैं.\n"
+"\n"
+"उदाहरण: private-openvpn, fe6ba5d8-c2fc-4aae-b2e3-97efddd8d9a7\n"
+
+#: ../clients/cli/settings.c:2650
msgid "private key password not provided"
msgstr "निजी कà¥à¤‚जी कूटशबà¥à¤¦ नहीं दिया हà¥à¤† है"
-#: ../cli/src/settings.c:2513
+#: ../clients/cli/settings.c:2677
+#, c-format
+#| msgid "the property can't be changed"
+msgid "the property doesn't contain EAP method '%s'"
+msgstr "विशेषता में EAP विधि '%s' समाहित नहीं है"
+
+#: ../clients/cli/settings.c:2702
+#, c-format
+msgid "the property doesn't contain alternative subject match '%s'"
+msgstr "विशेषता में वैकलà¥à¤ªà¤¿à¤• विषय मेल '%s' समाहित नहीं है"
+
+#: ../clients/cli/settings.c:2731
+#, c-format
+msgid "the property doesn't contain \"phase2\" alternative subject match '%s'"
+msgstr "विशेषता में \"phase2\" वैकलà¥à¤ªà¤¿à¤• विषय मेल '%s' समाहित नहीं है"
+
+#: ../clients/cli/settings.c:2757
msgid ""
"Enter path to a private key and the key password (if not set yet):\n"
" <file path> [<password>]\n"
@@ -4332,11 +4912,12 @@ msgstr ""
" <file path> [<password>]\n"
"उदाहरण: /home/cimrman/jara-priv-key Dardanely\n"
-#: ../cli/src/settings.c:2583
+#: ../clients/cli/settings.c:2827
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"
+"(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"
@@ -4347,12 +4928,13 @@ msgstr ""
"दो सà¥à¤µà¤°à¥‚प सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ हैं:\n"
"(a) हेकà¥à¤¸à¤¾à¤¡à¥‡à¤¸à¥€à¤®à¤² अंक का सà¥à¤Ÿà¥à¤°à¤¿à¤‚ग, जहाठहर को अंक à¤à¤• बाइट को बताता है\n"
"(b) सà¥à¤¥à¤¾à¤¨ से अलग बाइट की सूची बतौर हेकà¥à¤¸à¤¾à¤¡à¥‡à¤¸à¥€à¤®à¤² लिखित (वैकलà¥à¤ªà¤¿à¤• 0x/0X "
-"पà¥à¤°à¥€à¤«à¤¿à¤•à¥à¤¸, और वैकलà¥à¤ªà¤¿à¤• अगà¥à¤°à¤£à¥€ 0).\n"
+"पà¥à¤°à¥€à¤«à¤¿à¤•à¥à¤¸, और "
+"वैकलà¥à¤ªà¤¿à¤• अगà¥à¤°à¤£à¥€ 0).\n"
"\n"
"Examples: ab0455a6ea3a74C2\n"
" ab 4 55 0xa6 ea 3a 74 C2\n"
-#: ../cli/src/settings.c:2686
+#: ../clients/cli/settings.c:2930
#, c-format
msgid ""
"Enter a list of bonding options formatted as:\n"
@@ -4383,17 +4965,22 @@ msgstr ""
"\n"
"उदाहरण: mode=2,miimon=120\n"
-#: ../cli/src/settings.c:2727
+#: ../clients/cli/settings.c:2968
#, c-format
msgid "'%s' is not a valid InfiniBand MAC"
msgstr "'%s' वैध InfiniBand MAC नहीं है"
-#: ../cli/src/settings.c:2765
+#: ../clients/cli/settings.c:3005
#, c-format
msgid "'%s' is not a valid IBoIP P_Key"
msgstr "'%s' वैध IBoIP P_Key नहीं है"
-#: ../cli/src/settings.c:2825
+#: ../clients/cli/settings.c:3074 ../clients/cli/settings.c:3420
+#, c-format
+msgid "the property doesn't contain DNS server '%s'"
+msgstr "विशेषता में DNS सरà¥à¤µà¤° '%s' समाहित नहीं है"
+
+#: ../clients/cli/settings.c:3086
msgid ""
"Enter a list of IPv4 addresses of DNS servers.\n"
"\n"
@@ -4403,12 +4990,22 @@ msgstr ""
"\n"
"उदाहरण: 8.8.8.8, 8.8.4.4\n"
-#: ../cli/src/settings.c:2871 ../cli/src/settings.c:3123
+#: ../clients/cli/settings.c:3122 ../clients/cli/settings.c:3474
+#, c-format
+msgid "the property doesn't contain DNS search domain '%s'"
+msgstr "विशेषता में DNS खोज डोमेन '%s' समाहित नहीं है"
+
+#: ../clients/cli/settings.c:3142 ../clients/cli/settings.c:3494
#, c-format
msgid "'%s' is not valid (use ip[/prefix] [gateway])"
msgstr "'%s' वैध नहीं है (use ip[/prefix] [gateway])"
-#: ../cli/src/settings.c:2897
+#: ../clients/cli/settings.c:3191 ../clients/cli/settings.c:3542
+#, c-format
+msgid "the property doesn't contain IP address '%s'"
+msgstr "विशेषता में IP पता '%s' नहीं है"
+
+#: ../clients/cli/settings.c:3204
msgid ""
"Enter a list of IPv4 addresses formatted as:\n"
" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
@@ -4422,28 +5019,50 @@ msgstr ""
"\n"
"उदाहरण: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
-#: ../cli/src/settings.c:2954
+#: ../clients/cli/settings.c:3257 ../clients/cli/settings.c:3573
#, c-format
-msgid "'%s' is not valid (use ip/[prefix] next-hop [metric])"
-msgstr "'%s' वैध नहीं है (use ip/[prefix] next-hop [metric])"
+#| 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[/prefix] [next-hop] [metric])"
-#: ../cli/src/settings.c:2980
+#: ../clients/cli/settings.c:3305 ../clients/cli/settings.c:3621
+#, c-format
+#| msgid "the property can't be changed"
+msgid "the property doesn't contain route '%s'"
+msgstr "विशेषता में '%s' नहीं है"
+
+#: ../clients/cli/settings.c:3318
+#| 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"
+" ip[/prefix] [next-hop] [metric],...\n"
+"\n"
"Missing prefix is regarded as a prefix of 32.\n"
-"Missing metric is regarded as a metric of 0.\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"
-"Example: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\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/[prefix] next-hop [metric],...\n"
+"\n"
"32 के पà¥à¤°à¥€à¤«à¤¿à¤•à¥à¤¸ के रूप में अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤ पूरà¥à¤µà¤¸à¤°à¥à¤—.\n"
-"0 की मेटà¥à¤°à¤¿à¤• के रूप में अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤ मेटà¥à¤°à¤¿à¤•.\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:3071
+#: ../clients/cli/settings.c:3432
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 "
@@ -4455,70 +5074,83 @@ msgid ""
"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"
+"सरà¥à¤µà¤° को "
+"(यदि कोई है) में जोड़ा जाà¤à¤—ा जो सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ विनà¥à¤¯à¤¾à¤¸ के दà¥à¤µà¤¾à¤°à¤¾ वापस किया जाता है. "
+"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
+#: ../clients/cli/settings.c:3555
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"
+"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
+"उदाहरण: 2607:f0d0:1002:51::4/64 2607:f0d0:1002:51::1, "
+"1050:0:0:0:5:600:300c:326b\n"
+
+#: ../clients/cli/settings.c:3634
+#| 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"
+" ip[/prefix] [next-hop] [metric],...\n"
+"\n"
"Missing prefix is regarded as a prefix of 128.\n"
-"Missing metric is regarded as a metric of 0.\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"
-"Example: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
+"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/[prefix] next-hop [metric],... \n"
+"\n"
"128 के पà¥à¤°à¥€à¤«à¤¿à¤•à¥à¤¸ के रूप में अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤ पूरà¥à¤µà¤¸à¤°à¥à¤—.\n"
-"0 की मेटà¥à¤°à¤¿à¤• के रूप में अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤ मेटà¥à¤°à¤¿à¤•.\n"
+"\"::\" के रूप में अगला हॉप अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤.\n"
+"अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤ मेटà¥à¤°à¤¿à¤• या 0 का अरà¥à¤¥ तयशà¥à¤¦à¤¾ मेटà¥à¤°à¤¿à¤• (NM/kernel will set a default "
+"value).\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:3219
+#: ../clients/cli/settings.c:3658
#, c-format
msgid "'%s' is not valid; use 0, 1, or 2"
msgstr "'%s' वैध नहीं है; 0, 1, अथवा 2 का उपयोग करें"
-#: ../cli/src/settings.c:3236
+#: ../clients/cli/settings.c:3675
#, c-format
msgid "'%s' is not a valid channel; use <1-13>"
msgstr "'%s' à¤à¤• वैध चैनल नहीं है; <1-13> का उपयोग करें"
-#: ../cli/src/settings.c:3257
+#: ../clients/cli/settings.c:3696
#, c-format
msgid "'%s' is not valid; use [e, o, n]"
msgstr "'%s' वैध नहीं है; [e, o, n] का उपयोग करें"
-#: ../cli/src/settings.c:3285
+#: ../clients/cli/settings.c:3724
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 "
@@ -4529,28 +5161,58 @@ msgid ""
" set team.config /etc/my-team.conf\n"
msgstr ""
"nmcli पà¥à¤°à¤¤à¥à¤¯à¤•à¥à¤· JSON विनà¥à¤¯à¤¾à¤¸ आà¤à¤•à¤¡à¤¼à¤¾ सà¥à¤µà¥€à¤•à¤¾à¤° कर सकता है और विनà¥à¤¯à¤¾à¤¸ समाहित करने "
-"वाले फ़ाइल नाम. बाद की सà¥à¤¥à¤¿à¤¤à¤¿ में फ़ाइल फ़ाइल पढ़ा जाता है और सामगà¥à¤°à¥€ को इस "
-"गà¥à¤£ में डाला जाता है.\n"
+"वाले फ़ाइल "
+"नाम. बाद की सà¥à¤¥à¤¿à¤¤à¤¿ में फ़ाइल फ़ाइल पढ़ा जाता है और सामगà¥à¤°à¥€ को इस गà¥à¤£ में डाला "
+"जाता है.\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
+#: ../clients/cli/settings.c:3764
msgid "no priority to remove"
msgstr "हटाने के लिठकोई पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤•à¤¤à¤¾ नहीं"
-#: ../cli/src/settings.c:3329
+#: ../clients/cli/settings.c:3768
#, c-format
msgid "index '%d' is not in the range of <0-%d>"
msgstr "सूची '%d' <0-%d> के परिसर का नहीं है"
-#: ../cli/src/settings.c:3444
+#: ../clients/cli/settings.c:3807
+#, c-format
+msgid ""
+"Warning: only one mapping at a time is supported; taking the first one (%s)\n"
+msgstr ""
+"चेतावनी: à¤à¤• समय में à¤à¤• मैपिंग ही समरà¥à¤¥à¤¿à¤¤ है; पहले वाले को ले रहा है (%s)\n"
+
+#: ../clients/cli/settings.c:3814
+#, c-format
+#| msgid "the property can't be changed"
+msgid "the property doesn't contain mapping '%s'"
+msgstr "विशेषता में '%s' मैपिंग नहीं है"
+
+#: ../clients/cli/settings.c:3923 ../clients/cli/settings.c:4091
+#: ../libnm-core/nm-setting-wired.c:624
+#: ../libnm-core/nm-setting-wireless.c:801
+#: ../libnm-core/nm-setting-wireless.c:813
+#: ../libnm-util/nm-setting-wired.c:648
+#: ../libnm-util/nm-setting-wireless.c:840
+#: ../libnm-util/nm-setting-wireless.c:854
+#, c-format
+msgid "'%s' is not a valid MAC address"
+msgstr "'%s' à¤à¤• वैध MAC पता नहीं है"
+
+#: ../clients/cli/settings.c:3929 ../clients/cli/settings.c:4097
+#, c-format
+msgid "the property doesn't contain MAC address '%s'"
+msgstr "विशेषता में मैक पता '%s' नहीं है"
+
+#: ../clients/cli/settings.c:3948
#, c-format
msgid "'%s' is not valid; 3 strings should be provided"
msgstr "'%s' वैध नहीं है; 3 सà¥à¤Ÿà¥à¤°à¤¿à¤‚ग दिया जाना चाहिà¤"
-#: ../cli/src/settings.c:3463
+#: ../clients/cli/settings.c:3967
msgid ""
"Enter a list of three channels (comma or space separated).\n"
"\n"
@@ -4560,7 +5222,7 @@ msgstr ""
"\n"
"उदाहरण: 0.0.0e20 0.0.0e21 0.0.0e22\n"
-#: ../cli/src/settings.c:3513
+#: ../clients/cli/settings.c:4017
#, c-format
msgid ""
"Enter a list of S/390 options formatted as:\n"
@@ -4571,65 +5233,97 @@ msgstr ""
" विकलà¥à¤ª = <value>, option = <value>,...\n"
"वैध विकलà¥à¤ª हैं: %s\n"
-#: ../cli/src/settings.c:3559
+#: ../clients/cli/settings.c:4063
#, c-format
msgid "'%s' is not a valid channel"
msgstr "'%s' वैध चैनल नहीं है"
-#: ../cli/src/settings.c:3565
+#: ../clients/cli/settings.c:4069
#, c-format
msgid "'%ld' is not a valid channel"
msgstr "'%ld' वैध चैनल नहीं है"
-#: ../cli/src/settings.c:3668 ../cli/src/settings.c:3671
+#: ../clients/cli/settings.c:4156 ../clients/cli/settings.c:4194
+#: ../clients/cli/settings.c:4232
+#, c-format
+msgid "the property doesn't contain protocol '%s'"
+msgstr "विशेषता में पà¥à¤°à¥‹à¤Ÿà¥‹à¤•à¥‰à¤² '%s' नहीं है"
+
+#: ../clients/cli/settings.c:4271
+#, c-format
+msgid ""
+"'%s' not compatible with %s '%s', please change the key or set the right %s "
+"first."
+msgstr ""
+"'%s' %s '%s' के साथ संगत नहीं है, पहले दाहिने %s को सेट करें या कà¥à¤à¤œà¥€ सेट "
+"बदलें."
+
+#: ../clients/cli/settings.c:4279
#, c-format
msgid "WEP key is guessed to be of '%s'\n"
msgstr "WEP कà¥à¤à¤œà¥€ '%s' का अनà¥à¤®à¤¾à¤¨à¤¿à¤¤ है\n"
-#: ../cli/src/settings.c:3695
+#: ../clients/cli/settings.c:4281
+#, c-format
+#| msgid "WEP key is guessed to be of '%s'\n"
+msgid "WEP key index set to '%d'\n"
+msgstr "WEP कà¥à¤à¤œà¥€ इंडेसà¥à¤• '%d' में सेट है\n"
+
+#: ../clients/cli/settings.c:4304
#, 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
+#: ../clients/cli/settings.c:4320 ../clients/cli/settings.c:4323
+#: ../clients/cli/settings.c:4326 ../clients/cli/settings.c:4329
+#, c-format
+msgid ""
+"Warning: '%s' is not compatible with '%s' type, please change or delete the "
+"key.\n"
+msgstr ""
+"चेतावनी: '%s' '%s' किसà¥à¤® के साथ संगत नहीं है, कृपया कà¥à¤‚जी को बदलें या "
+"मिटाà¤à¤.\n"
+
+#: ../clients/cli/settings.c:4342
#, 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"
+"WEP कà¥à¤à¤œà¥€ का पà¥à¤°à¤•à¤¾à¤° दरà¥à¤œ करें. सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ मान हैं: 0 या अजà¥à¤žà¤¾à¤¤, 1 या कà¥à¤à¤œà¥€, और "
+"2 या "
+"कूटशबà¥à¤¦.\n"
-#: ../cli/src/settings.c:3728
+#: ../clients/cli/settings.c:4355
#, c-format
msgid "'%s' is not a valid PSK"
msgstr "'%s' वैध PSK नहीं है"
-#: ../cli/src/settings.c:3772
+#: ../clients/cli/settings.c:4399
#, c-format
msgid "'%s' is not a valid DCB flag"
msgstr "'%s' वैध DCB फà¥à¤²à¥ˆà¤— नहीं है"
-#: ../cli/src/settings.c:3795
+#: ../clients/cli/settings.c:4422
#, c-format
msgid "'%s' is not a DCB app priority"
msgstr "'%s' à¤à¤• DCB à¤à¤ªà¥à¤ª पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤•à¤¤à¤¾ नहीं है"
-#: ../cli/src/settings.c:3821
+#: ../clients/cli/settings.c:4448
msgid "must contain 8 comma-separated numbers"
msgstr "जरूर ८ कौमा से पृथक संखà¥à¤¯à¤¾ समाहित करनी चाहिà¤"
-#: ../cli/src/settings.c:3838
+#: ../clients/cli/settings.c:4465
#, c-format
msgid "'%s' not a number between 0 and %u (inclusive) or %u"
msgstr "'%s' 0 और %u (समावेशी) अथवा %u के बीच की संखà¥à¤¯à¤¾ नहीं है"
-#: ../cli/src/settings.c:3841
+#: ../clients/cli/settings.c:4468
#, c-format
msgid "'%s' not a number between 0 and %u (inclusive)"
msgstr "'%s' 0 और %u (समावेशी) के बीच की संखà¥à¤¯à¤¾ नहीं है"
-#: ../cli/src/settings.c:3863
+#: ../clients/cli/settings.c:4490
#, c-format
msgid ""
"Warning: changes will have no effect until '%s' includes 1 (enabled)\n"
@@ -4638,787 +5332,1981 @@ msgstr ""
"चेतावनी: परिवरà¥à¤¤à¤¨ तबतक पà¥à¤°à¤­à¤¾à¤µà¥€ नहीं होगा जब '%s' शामिल करता है 1 (सकà¥à¤°à¤¿à¤¯)\n"
"\n"
-#: ../cli/src/settings.c:3916
+#: ../clients/cli/settings.c:4543
#, c-format
msgid "bandwidth percentages must total 100%%"
msgstr "बैंडबिडà¥à¤¥ पà¥à¤°à¤¤à¤¿à¤¶à¤¤ कà¥à¤² 100%% होना चाहिà¤"
-#: ../cli/src/settings.c:5594
+#: ../clients/cli/settings.c:6186
msgid "don't know how to get the property value"
msgstr "विशेषता मान पाने के लिठनहीं जानते हैं कैसे"
-#: ../cli/src/settings.c:5647 ../cli/src/settings.c:5687
+#: ../clients/cli/settings.c:6239 ../clients/cli/settings.c:6279
msgid "the property can't be changed"
msgstr "विशेषता बदला नहीं जा सकता है"
-#: ../cli/src/settings.c:5791
+#: ../clients/cli/settings.c:6362
+#| msgid "unavailable"
+msgid "(not available)"
+msgstr "(उपलबà¥à¤§ नहीं)"
+
+#: ../clients/cli/settings.c:6387
msgid "[NM property description]"
msgstr "[NM विशेषता विवरण]"
-#: ../cli/src/settings.c:5797
+#: ../clients/cli/settings.c:6392
msgid "[nmcli specific description]"
msgstr "[nmcli विशिषà¥à¤Ÿ विवरण]"
-#: ../cli/src/utils.c:111
+#: ../clients/cli/utils.c:127
#, c-format
msgid "Error: value for '%s' argument is required."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' वितरà¥à¤• के लिठमान जरूरी है."
-#: ../cli/src/utils.c:136
+#: ../clients/cli/utils.c:152
#, c-format
msgid "Error: Argument '%s' was expected, but '%s' provided."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: वितरà¥à¤• '%s' पà¥à¤°à¤¤à¥à¤¯à¤¾à¤¶à¤¿à¤¤ था, लेकिन '%s' पà¥à¤°à¤¦à¤¾à¤¨ किया गया."
-#: ../cli/src/utils.c:139
+#: ../clients/cli/utils.c:155
#, c-format
msgid "Error: Unexpected argument '%s'"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' अपà¥à¤°à¤¤à¥à¤¯à¤¾à¤¶à¤¿à¤¤ वितरà¥à¤•."
-#: ../cli/src/utils.c:189
+#: ../clients/cli/utils.c:205
#, c-format
msgid "Error converting IP4 address '0x%X' to text form"
msgstr "पाठ के रूप IP4 पते '0x%X' में परिवरà¥à¤¤à¤¿à¤¤ करने में तà¥à¤°à¥à¤Ÿà¤¿"
-#: ../cli/src/utils.c:217
+#: ../clients/cli/utils.c:233
#, c-format
msgid "Error converting IP6 address '%s' to text form"
msgstr "पाठ के रूप IP6 पते '%s' में परिवरà¥à¤¤à¤¿à¤¤ करने में तà¥à¤°à¥à¤Ÿà¤¿"
-#: ../cli/src/utils.c:393
+#: ../clients/cli/utils.c:407
+#, c-format
+#| msgid "'%s' is ambiguous (%s x %s)"
+msgid "'%s' is ambiguous (on x off)"
+msgstr "'%s' दà¥à¤µà¤¿à¤§à¤¾à¤ªà¥‚रà¥à¤£ है (on x off)"
+
+#: ../clients/cli/utils.c:417
#, c-format
msgid "'%s' is not valid; use [%s] or [%s]"
msgstr "'%s' वैध नहीं है; [%s] या [%s] उपयोग करें"
-#: ../cli/src/utils.c:475
+#: ../clients/cli/utils.c:499
#, c-format
msgid "'%s' is ambiguous (%s x %s)"
msgstr "'%s' दà¥à¤µà¤¿à¤§à¤¾à¤ªà¥‚रà¥à¤£ है (%s x %s)"
-#: ../cli/src/utils.c:487
+#: ../clients/cli/utils.c:511
#, c-format
msgid "missing name, try one of [%s]"
msgstr "अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤ नाम, [%s] में से à¤à¤• की कोशिश करें"
-#: ../cli/src/utils.c:718
+#: ../clients/cli/utils.c:728
#, c-format
msgid "field '%s' has to be alone"
msgstr "कà¥à¤·à¥‡à¤¤à¥à¤° '%s' को अलग रहना है"
-#: ../cli/src/utils.c:720
+#: ../clients/cli/utils.c:731
#, c-format
msgid "invalid field '%s'; allowed fields: %s"
msgstr "अवैध कà¥à¤·à¥‡à¤¤à¥à¤° '%s'; अनà¥à¤®à¤¤à¤¿à¤ªà¥à¤°à¤¾à¤ªà¥à¤¤ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
-#: ../cli/src/utils.c:747
+#: ../clients/cli/utils.c:788
msgid "Option '--terse' requires specifying '--fields'"
msgstr "विकलà¥à¤ª '--terse' के लिठ'--fields' निरà¥à¤¦à¤¿à¤·à¥à¤Ÿ करना है"
-#: ../cli/src/utils.c:751
+#: ../clients/cli/utils.c:792
#, c-format
msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
msgstr "विकलà¥à¤ª '--terse' के लिठ'--fields' विकलà¥à¤ª मान की जरूरत है, न कि '%s'"
-#: ../cli/src/utils.c:1070
+#: ../clients/cli/utils.c:1111
#, 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:1079
+#: ../clients/cli/utils.c:1120
#, 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, लेकिन परिणाम अपà¥à¤°à¤¤à¥à¤¯à¤¾à¤¶à¤¿à¤¤ हैं."
+
+#: ../clients/nm-online.c:96
+#, c-format
+msgid "\rConnecting"
+msgstr "\rजà¥à¤¡à¤¼ रहा है"
+
+#: ../clients/nm-online.c:149
+msgid ""
+"Time to wait for a connection, in seconds (without the option, default value "
+"is 30)"
+msgstr ""
+"à¤à¤• कनेकà¥à¤¶à¤¨ के लिठपà¥à¤°à¤¤à¥€à¤•à¥à¤·à¤¾ करें, सेकंड में समय (डिफ़ॉलà¥à¤Ÿ 30 है बिना विकलà¥à¤ª "
+"के)"
+
+#: ../clients/nm-online.c:150
+#| msgid "Exit immediately if NetworkManager is not running"
+msgid "Exit immediately if NetworkManager is not running or connecting"
+msgstr "तà¥à¤°à¤‚त बाहर निकलें अगर नेटवरà¥à¤•à¤ªà¥à¤°à¤¬à¤‚धक चल रहा है या नहीं जोड़ने है"
+
+#: ../clients/nm-online.c:151
+msgid "Don't print anything"
+msgstr "कà¥à¤› भी मà¥à¤¦à¥à¤°à¤¿à¤¤ नहीं"
+
+#: ../clients/nm-online.c:152
+#| msgid ""
+#| "Waits for NetworkManager to finish activating startup network connections."
+msgid "Wait for NetworkManager startup instead of a connection"
+msgstr "NetworkManager के लिठपà¥à¤°à¤¤à¥€à¤•à¥à¤·à¤¾ करें कनेकà¥à¤¶à¤¨ बदले"
+
+#: ../clients/nm-online.c:173
+msgid ""
+"Waits for NetworkManager to finish activating startup network connections."
+msgstr ""
+"NetworkManager के लिठपà¥à¤°à¤¤à¥€à¤•à¥à¤·à¤¾ करें संजाल करनेकà¥à¤¶à¤¨ के आरंभन के लिठसकà¥à¤°à¤¿à¤¯ "
+"करने के लिà¤."
+
+#: ../clients/nm-online.c:180 ../clients/nm-online.c:186
+msgid "Invalid option. Please use --help to see a list of valid options."
+msgstr "अवैध विकलà¥à¤ª. कृपया --help का उपयोग वैध विकलà¥à¤ª देने के लिठकरें."
+
+#: ../clients/tui/newt/nmt-newt-utils.c:180 ../clients/tui/nmt-editor.c:240
+#: ../clients/tui/nmt-password-dialog.c:175
+#: ../clients/tui/nmt-route-editor.c:135 ../clients/tui/nmtui-hostname.c:71
+#: ../clients/tui/nmtui.c:118
+msgid "OK"
+msgstr "ठीक"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:328
+#: ../clients/tui/newt/nmt-newt-utils.c:360
+#, c-format
+msgid "Could not create temporary file: %s"
+msgstr "असà¥à¤¥à¤¾à¤¯à¥€ फ़ाइल नहीं बना सका: %s"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:368
+#, c-format
+msgid "Editor failed: %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¤¿ विफल: %s"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:376
+#, c-format
+#| msgid "Editor failed: %s"
+msgid "Editor failed with status %d"
+msgstr "%d सà¥à¤¥à¤¿à¤¤à¤¿ के साथ संपादक विफल"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:378
+#, c-format
+#| msgid "Editor failed: %s"
+msgid "Editor failed with signal %d"
+msgstr "%d संकेत के साथ संपादक विफल"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:382
+#, c-format
+msgid "Could not re-read file: %s"
+msgstr "फ़ाइल फिर नहीं पढ़ सका: %s"
+
+#: ../clients/tui/nm-editor-utils.c:151
+#, c-format
+msgid "Ethernet connection %d"
+msgstr "तारयà¥à¤•à¥à¤¤ संबंधन %d "
+
+#: ../clients/tui/nm-editor-utils.c:159
+#, c-format
+msgid "Wi-Fi connection %d"
+msgstr "वाई - फाई संबंधन %d"
+
+#: ../clients/tui/nm-editor-utils.c:168
+#, c-format
+msgid "InfiniBand connection %d"
+msgstr "InfiniBandकनेकà¥à¤¶à¤¨ %d"
+
+#: ../clients/tui/nm-editor-utils.c:173 ../libnm-glib/nm-device.c:1798
+msgid "Mobile Broadband"
+msgstr "मोबाइल बà¥à¤°à¥‰à¤¡à¤¬à¥ˆà¤‚ड"
+
+#: ../clients/tui/nm-editor-utils.c:176
+#, c-format
+msgid "Mobile broadband connection %d"
+msgstr "मोबाइल बà¥à¤°à¥‰à¤¡à¤¬à¥ˆà¤‚ड कनेकà¥à¤¶à¤¨ %d"
+
+#: ../clients/tui/nm-editor-utils.c:182 ../clients/tui/nmt-page-dsl.c:39
+msgid "DSL"
+msgstr "DSL"
+
+#: ../clients/tui/nm-editor-utils.c:186
+#, c-format
+msgid "DSL connection %d"
+msgstr "DSL कनेकà¥à¤¶à¤¨ %d"
+
+#: ../clients/tui/nm-editor-utils.c:191 ../libnm-core/nm-connection.c:1503
+#: ../libnm-glib/nm-device.c:1802 ../libnm-util/nm-connection.c:1606
+#: ../src/settings/plugins/ifcfg-rh/reader.c:3931
+msgid "Bond"
+msgstr "बॉनà¥à¤¡"
+
+#: ../clients/tui/nm-editor-utils.c:195
+#, c-format
+msgid "Bond connection %d"
+msgstr "बॉणà¥à¤¡ कनेकà¥à¤¶à¤¨ %d"
+
+#: ../clients/tui/nm-editor-utils.c:200 ../libnm-core/nm-connection.c:1507
+#: ../libnm-glib/nm-device.c:1806 ../libnm-util/nm-connection.c:1610
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4219
+msgid "Bridge"
+msgstr "पà¥à¤²"
+
+#: ../clients/tui/nm-editor-utils.c:205
+#, c-format
+msgid "Bridge connection %d"
+msgstr "बà¥à¤°à¤¿à¤œ कनेकà¥à¤¶à¤¨ %d"
+
+#: ../clients/tui/nm-editor-utils.c:209 ../libnm-core/nm-connection.c:1505
+#: ../libnm-glib/nm-device.c:1804 ../libnm-util/nm-connection.c:1608
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4035
+msgid "Team"
+msgstr "टोली"
+
+#: ../clients/tui/nm-editor-utils.c:214
+#, c-format
+msgid "Team connection %d"
+msgstr "टीम कनेकà¥à¤¶à¤¨ %d"
+
+#: ../clients/tui/nm-editor-utils.c:222
+#, c-format
+msgid "VLAN connection %d"
+msgstr "VLAN कनेकà¥à¤¶à¤¨ %d"
+
+#: ../clients/tui/nm-editor-utils.c:237
+#, c-format
+msgid "VPN connection %d"
+msgstr "VPN संबंधन %d"
+
+#: ../clients/tui/nmt-device-entry.c:371
+msgid "Select..."
+msgstr "चà¥à¤¨à¥‡à¤‚..."
+
+#: ../clients/tui/nmt-edit-connection-list.c:129
+msgid "Add"
+msgstr "जोड़ें"
+
+#: ../clients/tui/nmt-edit-connection-list.c:132
+#: ../clients/tui/nmt-page-ip4.c:175 ../clients/tui/nmt-page-ip6.c:173
+#: ../clients/tui/nmt-page-team-port.c:110 ../clients/tui/nmt-page-team.c:174
+msgid "Edit..."
+msgstr "संपादन..."
+
+#: ../clients/tui/nmt-edit-connection-list.c:135
+#: ../clients/tui/nmtui-edit.c:471
+msgid "Delete"
+msgstr "मिटाà¤à¤"
+
+#: ../clients/tui/nmt-editor.c:81
+#, c-format
+msgid "Could not create editor for connection '%s' of type '%s'."
+msgstr "'%s' पà¥à¤°à¤•à¤¾à¤° के '%s' कनेकà¥à¤¶à¤¨ के लिठसंपादक नहीं बना सका."
+
+#: ../clients/tui/nmt-editor.c:85
+#, c-format
+msgid "Could not create editor for invalid connection '%s'."
+msgstr "अवैध कनेकà¥à¤¶à¤¨ के लिठसंपादक नहीं बना सका: '%s'."
+
+#: ../clients/tui/nmt-editor.c:95
+#| msgid "Edit connection"
+msgid "Edit Connection"
+msgstr "कनेकà¥à¤¶à¤¨ संपादित करें"
+
+#: ../clients/tui/nmt-editor.c:139
+#, c-format
+msgid "Unable to save connection: %s"
+msgstr "कनेकà¥à¤¶à¤¨ सहेजने में असमरà¥à¤¥: %s"
+
+#: ../clients/tui/nmt-editor.c:153
+#, c-format
+msgid "Unable to add new connection: %s"
+msgstr "नया कनेकà¥à¤¶à¤¨ जोड़ने में असमरà¥à¤¥: %s"
+
+#: ../clients/tui/nmt-editor.c:237 ../clients/tui/nmt-password-dialog.c:172
+#: ../clients/tui/nmt-route-editor.c:128 ../clients/tui/nmtui-edit.c:192
+#: ../clients/tui/nmtui-edit.c:470 ../clients/tui/nmtui-hostname.c:69
+msgid "Cancel"
+msgstr "रदà¥à¤¦ करें"
+
+#: ../clients/tui/nmt-mtu-entry.c:86
+msgid "(default)"
+msgstr "(तयशà¥à¤¦à¤¾)"
+
+#: ../clients/tui/nmt-mtu-entry.c:88 ../clients/tui/nmt-mtu-entry.c:119
+msgid "bytes"
+msgstr "बाइटà¥à¤¸"
+
+#: ../clients/tui/nmt-page-bond.c:88
+msgid "Round-robin"
+msgstr "राउणà¥à¤¡ रॉबिन"
+
+#: ../clients/tui/nmt-page-bond.c:89
+msgid "Active Backup"
+msgstr "सकà¥à¤°à¤¿à¤¯ बैकअप"
+
+#: ../clients/tui/nmt-page-bond.c:90
+msgid "XOR"
+msgstr "XOR"
+
+#: ../clients/tui/nmt-page-bond.c:91
+msgid "Broadcast"
+msgstr "बà¥à¤°à¥‰à¤¡à¤•à¤¾à¤¸à¥à¤Ÿ"
+
+#: ../clients/tui/nmt-page-bond.c:92
+msgid "802.3ad"
+msgstr "802.3ad"
+
+#: ../clients/tui/nmt-page-bond.c:93
+msgid "Adaptive Transmit Load Balancing (tlb)"
+msgstr "अनà¥à¤•à¥‚ली संचारित लोड संतà¥à¤²à¤¨ (tlb)"
+
+#: ../clients/tui/nmt-page-bond.c:94
+msgid "Adaptive Load Balancing (alb)"
+msgstr "अनà¥à¤•à¥‚ली लोड संतà¥à¤²à¤¨ (alb)"
+
+#: ../clients/tui/nmt-page-bond.c:100
+msgid "MII (recommended)"
+msgstr "MII (अनà¥à¤¶à¤‚सित)"
+
+#: ../clients/tui/nmt-page-bond.c:101
+msgid "ARP"
+msgstr "ARP"
+
+#: ../clients/tui/nmt-page-bond.c:353 ../clients/tui/nmt-page-bridge.c:80
+#: ../clients/tui/nmt-page-team.c:153
+msgid "Slaves"
+msgstr "सà¥à¤²à¥‡à¤µ"
+
+#: ../clients/tui/nmt-page-bond.c:365 ../clients/tui/nmt-page-wifi.c:226
+msgid "Mode"
+msgstr "पà¥à¤°à¤•à¤¾à¤°"
+
+#: ../clients/tui/nmt-page-bond.c:371
+msgid "Primary"
+msgstr "पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤•"
+
+#: ../clients/tui/nmt-page-bond.c:377
+msgid "Link monitoring"
+msgstr "कड़ी मॉनिटरिंग"
+
+#: ../clients/tui/nmt-page-bond.c:383 ../clients/tui/nmt-page-bond.c:390
+#: ../clients/tui/nmt-page-bond.c:397 ../clients/tui/nmt-page-bond.c:404
+msgctxt "milliseconds"
+msgid "ms"
+msgstr "ms"
+
+#: ../clients/tui/nmt-page-bond.c:384 ../clients/tui/nmt-page-bond.c:405
+msgid "Monitoring frequency"
+msgstr "मॉनिटरिंग आवृतà¥à¤¤à¤¿"
+
+#: ../clients/tui/nmt-page-bond.c:391
+msgid "Link up delay"
+msgstr "लिंक अप विलंब"
+
+#: ../clients/tui/nmt-page-bond.c:398
+msgid "Link down delay"
+msgstr "लिंक डाउन विलंब"
+
+#: ../clients/tui/nmt-page-bond.c:411
+msgid "ARP targets"
+msgstr "ARP लकà¥à¤·à¥à¤¯"
+
+#: ../clients/tui/nmt-page-bridge-port.c:38
+msgid "BRIDGE PORT"
+msgstr "पà¥à¤² पोरà¥à¤Ÿ"
+
+#: ../clients/tui/nmt-page-bridge-port.c:69
+#: ../clients/tui/nmt-page-bridge.c:106
+msgid "Priority"
+msgstr "पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤•à¤¤à¤¾"
+
+#: ../clients/tui/nmt-page-bridge-port.c:75
+msgid "Path cost"
+msgstr "पथ लागत"
+
+#: ../clients/tui/nmt-page-bridge-port.c:77
+msgid "Hairpin mode"
+msgstr "हेयरपिन पà¥à¤°à¤•à¤¾à¤°"
+
+#: ../clients/tui/nmt-page-bridge.c:42
+msgid "BRIDGE"
+msgstr "पà¥à¤²"
+
+#: ../clients/tui/nmt-page-bridge.c:90 ../clients/tui/nmt-page-bridge.c:115
+#: ../clients/tui/nmt-page-bridge.c:125 ../clients/tui/nmt-page-bridge.c:135
+msgid "seconds"
+msgstr "सेकणà¥à¤¡"
+
+#: ../clients/tui/nmt-page-bridge.c:91
+msgid "Aging time"
+msgstr "à¤à¤œà¤¿à¤‚ग समय"
+
+#: ../clients/tui/nmt-page-bridge.c:93
+msgid "Enable STP (Spanning Tree Protocol)"
+msgstr "सकà¥à¤°à¤¿à¤¯ करें à¤à¤¸à¤Ÿà¥€à¤ªà¥€ (सà¥à¤ªà¥ˆà¤¨à¤¿à¤‚ग टà¥à¤°à¥€ पà¥à¤°à¥‹à¤Ÿà¥‹à¤•à¥‰à¤²)"
+
+#: ../clients/tui/nmt-page-bridge.c:116
+msgid "Forward delay"
+msgstr "अगà¥à¤°à¥‡à¤·à¤¿à¤¤ विलंब"
+
+#: ../clients/tui/nmt-page-bridge.c:126
+msgid "Hello time"
+msgstr "हेलो समय"
+
+#: ../clients/tui/nmt-page-bridge.c:136
+msgid "Max age"
+msgstr "अधिकतम आयà¥"
+
+#. 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)
+#.
+#: ../clients/tui/nmt-page-dsl.c:67 ../clients/tui/nmt-page-wifi.c:328
+#: ../clients/tui/nmt-secret-agent.c:206 ../clients/tui/nmt-secret-agent.c:301
+msgid "Username"
+msgstr "उपयोकà¥à¤¤à¤¾à¤¨à¤¾à¤®"
+
+#: ../clients/tui/nmt-page-dsl.c:76 ../clients/tui/nmt-page-wifi.c:273
+#: ../clients/tui/nmt-page-wifi.c:304 ../clients/tui/nmt-page-wifi.c:334
+#: ../clients/tui/nmt-secret-agent.c:211 ../clients/tui/nmt-secret-agent.c:248
+#: ../clients/tui/nmt-secret-agent.c:278 ../clients/tui/nmt-secret-agent.c:311
+#: ../clients/tui/nmt-secret-agent.c:380 ../clients/tui/nmt-secret-agent.c:393
+#: ../clients/tui/nmt-secret-agent.c:409
+msgid "Password"
+msgstr "कूटशबà¥à¤¦"
+
+#: ../clients/tui/nmt-page-dsl.c:79 ../clients/tui/nmt-secret-agent.c:306
+msgid "Service"
+msgstr "सेवा"
+
+#: ../clients/tui/nmt-page-ethernet.c:41
+msgid "ETHERNET"
+msgstr "ईथरनेट"
+
+#: ../clients/tui/nmt-page-ethernet.c:80 ../clients/tui/nmt-page-vlan.c:124
+#: ../clients/tui/nmt-page-wifi.c:357
+msgid "Cloned MAC address"
+msgstr "कà¥à¤²à¥‹à¤¨ MAC पता"
+
+#: ../clients/tui/nmt-page-infiniband.c:40
+msgid "INFINIBAND"
+msgstr "INFINIBAND"
+
+#: ../clients/tui/nmt-page-infiniband.c:51
+msgid "Datagram"
+msgstr "आंकड़ारेख"
+
+#: ../clients/tui/nmt-page-infiniband.c:52
+msgid "Connected"
+msgstr "कनेकà¥à¤Ÿà¥‡à¤¡"
+
+#: ../clients/tui/nmt-page-infiniband.c:90
+msgid "Transport mode"
+msgstr "परिवहन अवसà¥à¤¥à¤¾"
+
+#: ../clients/tui/nmt-page-ip4.c:41
+msgid "Disabled"
+msgstr "अकà¥à¤·à¤®"
+
+#: ../clients/tui/nmt-page-ip4.c:42 ../clients/tui/nmt-page-ip6.c:42
+msgid "Automatic"
+msgstr "सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤"
+
+#: ../clients/tui/nmt-page-ip4.c:43 ../clients/tui/nmt-page-ip6.c:44
+msgid "Link-Local"
+msgstr "लिंक सà¥à¤¥à¤¾à¤¨à¥€à¤¯"
+
+#: ../clients/tui/nmt-page-ip4.c:44 ../clients/tui/nmt-page-ip6.c:45
+msgid "Manual"
+msgstr "हसà¥à¤¤à¤šà¤¾à¤²à¤¿à¤¤"
+
+#: ../clients/tui/nmt-page-ip4.c:45
+msgid "Shared"
+msgstr "साà¤à¤¾"
+
+#: ../clients/tui/nmt-page-ip4.c:54
+msgid "IPv4 CONFIGURATION"
+msgstr "आईपीवी 4 विनà¥à¤¯à¤¾à¤¸"
+
+#: ../clients/tui/nmt-page-ip4.c:100 ../clients/tui/nmt-page-ip6.c:100
+msgid "(No custom routes)"
+msgstr "(कोई पसंदीदा रूट नहीं)"
+
+#: ../clients/tui/nmt-page-ip4.c:103 ../clients/tui/nmt-page-ip6.c:103
+#, c-format
+msgid "One custom route"
+msgid_plural "%d custom routes"
+msgstr[0] "à¤à¤• मनपसंद रूट"
+msgstr[1] "%d मनपसंद रूट"
+
+#: ../clients/tui/nmt-page-ip4.c:144 ../clients/tui/nmt-page-ip6.c:144
+msgid "Addresses"
+msgstr "पता"
+
+#: ../clients/tui/nmt-page-ip4.c:150 ../clients/tui/nmt-page-ip6.c:150
+msgid "Gateway"
+msgstr "गेटवे"
+
+#: ../clients/tui/nmt-page-ip4.c:156 ../clients/tui/nmt-page-ip6.c:156
+msgid "DNS servers"
+msgstr "डीà¤à¤¨à¤à¤¸ सरà¥à¤µà¤°"
+
+#: ../clients/tui/nmt-page-ip4.c:162 ../clients/tui/nmt-page-ip6.c:162
+msgid "Search domains"
+msgstr "डोमेन खोजें"
+
+#: ../clients/tui/nmt-page-ip4.c:177 ../clients/tui/nmt-page-ip6.c:175
+msgid "Routing"
+msgstr "रॉटिंग"
+
+#: ../clients/tui/nmt-page-ip4.c:179 ../clients/tui/nmt-page-ip6.c:177
+msgid "Never use this network for default route"
+msgstr "तयशà¥à¤¦à¤¾ मारà¥à¤— के लिठइस संजाल को कभी पà¥à¤°à¤¯à¥‹à¤— मत करें"
+
+#: ../clients/tui/nmt-page-ip4.c:187
+msgid "Require IPv4 addressing for this connection"
+msgstr "इस कनेकà¥à¤¶à¤¨ के पूरा होने के लिठIPv4 पता चाहिà¤"
+
+#: ../clients/tui/nmt-page-ip6.c:41
+msgid "Ignore"
+msgstr "नज़रअंदाज़ करें"
+
+#: ../clients/tui/nmt-page-ip6.c:43
+msgid "Automatic (DHCP-only)"
+msgstr "सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ (केवल DHCP)"
+
+#: ../clients/tui/nmt-page-ip6.c:54
+msgid "IPv6 CONFIGURATION"
+msgstr "आईपीवी 6 विनà¥à¤¯à¤¾à¤¸"
+
+#: ../clients/tui/nmt-page-ip6.c:185
+msgid "Require IPv6 addressing for this connection"
+msgstr "इस कनेकà¥à¤¶à¤¨ के पूरा होने के लिठIPv6 पता चाहिà¤"
+
+#: ../clients/tui/nmt-page-main.c:139
+msgid "Hide"
+msgstr "छिपाà¤à¤"
+
+#: ../clients/tui/nmt-page-main.c:139
+msgid "Show"
+msgstr "दिखाà¤à¤"
+
+#: ../clients/tui/nmt-page-main.c:187
+msgid "Profile name"
+msgstr "पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤² नाम"
+
+#: ../clients/tui/nmt-page-main.c:194
+msgid "Device"
+msgstr "यà¥à¤•à¥à¤¤à¤¿"
+
+#: ../clients/tui/nmt-page-main.c:243
+msgid "Automatically connect"
+msgstr "सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ कनेकà¥à¤Ÿ"
+
+#: ../clients/tui/nmt-page-main.c:249
+msgid "Available to all users"
+msgstr "सभी उपयोकà¥à¤¤à¤¾ के लिठउपलबà¥à¤§"
+
+#: ../clients/tui/nmt-page-ppp.c:49
+#| msgid "IPv4 CONFIGURATION"
+msgid "PPP CONFIGURATION"
+msgstr "पीपीपी विनà¥à¤¯à¤¾à¤¸"
+
+#: ../clients/tui/nmt-page-ppp.c:142
+#| msgid "Authentication"
+msgid "Allowed authentication methods:"
+msgstr "पà¥à¤°à¤®à¤¾à¤£à¥€à¤•à¤°à¤£ विधि को अनà¥à¤®à¤¤à¤¿ दें:"
+
+#: ../clients/tui/nmt-page-ppp.c:149
+#| msgid "LEAP"
+msgid "EAP"
+msgstr "EAP"
+
+#: ../clients/tui/nmt-page-ppp.c:157
+#| msgid "AP"
+msgid "PAP"
+msgstr "PAP"
+
+#: ../clients/tui/nmt-page-ppp.c:165
+msgid "CHAP"
+msgstr "CHAP"
+
+#: ../clients/tui/nmt-page-ppp.c:173
+msgid "MSCHAPv2"
+msgstr "MSCHAPv2"
+
+#: ../clients/tui/nmt-page-ppp.c:181
+msgid "MSCHAP"
+msgstr "MSCHAP"
+
+#: ../clients/tui/nmt-page-ppp.c:197
+msgid "Use point-to-point encryption (MPPE)"
+msgstr "बिंदॠसे बिंदॠतक गोपन का उपयोग करें (MPPE)"
+
+#: ../clients/tui/nmt-page-ppp.c:209
+msgid "Require 128-bit encryption"
+msgstr " 128-bit गोपन जरूरी"
+
+#: ../clients/tui/nmt-page-ppp.c:219
+msgid "Use stateful MPPE"
+msgstr "सà¥à¤Ÿà¥‡à¤Ÿà¤«à¥à¤² MPPE का उपयोग करें"
+
+#: ../clients/tui/nmt-page-ppp.c:231
+msgid "Allow BSD data compression"
+msgstr "BSD आà¤à¤•à¤¡à¤¼à¤¾ संकà¥à¤šà¤¨ सà¥à¤µà¥€à¤•à¤¾à¤°à¥‡à¤‚"
+
+#: ../clients/tui/nmt-page-ppp.c:239
+msgid "Allow Deflate data compression"
+msgstr "डिफà¥à¤²à¥‡à¤Ÿ आà¤à¤•à¤¡à¤¼à¤¾ संकà¥à¤šà¤¨ सà¥à¤µà¥€à¤•à¤¾à¤°à¥‡à¤‚"
+
+#: ../clients/tui/nmt-page-ppp.c:247
+msgid "Use TCP header compression"
+msgstr "TCP शीरà¥à¤·à¤¿à¤•à¤¾ संकà¥à¤šà¤¨ का उपयोग करें"
+
+#: ../clients/tui/nmt-page-ppp.c:257
+msgid "Send PPP echo packets"
+msgstr "PPP इको पैकेट भेजें"
+
+#: ../clients/tui/nmt-page-team-port.c:45
+msgid "TEAM PORT"
+msgstr "टीम पोरà¥à¤Ÿ"
+
+#: ../clients/tui/nmt-page-team-port.c:100 ../clients/tui/nmt-page-team.c:164
+msgid "JSON configuration"
+msgstr "JSON विनà¥à¤¯à¤¾à¤¸"
+
+#: ../clients/tui/nmt-page-team.c:51
+msgid "TEAM"
+msgstr "टोली"
+
+#: ../clients/tui/nmt-page-vlan.c:101
+msgid "Parent"
+msgstr "पैरेंट"
+
+#: ../clients/tui/nmt-page-vlan.c:116
+msgid "VLAN id"
+msgstr "VLAN ID"
+
+#: ../clients/tui/nmt-page-wifi.c:57
+msgid "WI-FI"
+msgstr "वाई-फाई"
+
+#: ../clients/tui/nmt-page-wifi.c:68
+msgctxt "Wi-Fi"
+msgid "Client"
+msgstr "कà¥à¤²à¤¾à¤‡à¤‚ट"
+
+#: ../clients/tui/nmt-page-wifi.c:69
+msgid "Access Point"
+msgstr "पहà¥à¤à¤š बिंदà¥"
+
+#: ../clients/tui/nmt-page-wifi.c:70
+msgid "Ad-Hoc Network"
+msgstr "तदरà¥à¤¥ संजाल"
+
+#: ../clients/tui/nmt-page-wifi.c:75
+msgctxt "Wi-Fi"
+msgid "Automatic"
+msgstr "सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤"
+
+#. 802.11a Wi-Fi network
+#: ../clients/tui/nmt-page-wifi.c:77
+msgid "A (5 GHz)"
+msgstr "A (5 GHz)"
+
+#. 802.11b / 802.11g Wi-Fi network
+#: ../clients/tui/nmt-page-wifi.c:79
+msgid "B/G (2.4 GHz)"
+msgstr "बी/जी (2.4 गीगा)"
+
+#: ../clients/tui/nmt-page-wifi.c:84
+msgctxt "Wi-Fi security"
+msgid "None"
+msgstr "कोई नहीं"
+
+#: ../clients/tui/nmt-page-wifi.c:85
+msgid "WPA & WPA2 Personal"
+msgstr "WPA व WPA2 निजी"
+
+#: ../clients/tui/nmt-page-wifi.c:86
+msgid "WPA & WPA2 Enterprise"
+msgstr "WPA व WPA2 à¤à¤‚टरपà¥à¤°à¤¾à¤‡à¤œ"
+
+#: ../clients/tui/nmt-page-wifi.c:87
+msgid "WEP 40/128-bit Key (Hex or ASCII)"
+msgstr "WEP 40/128-बिट कà¥à¤à¤œà¥€ (हेकà¥à¤¸ या ASCII)"
+
+#: ../clients/tui/nmt-page-wifi.c:88
+msgid "WEP 128-bit Passphrase"
+msgstr "WEP 128-bit पासफà¥à¤°à¥‡à¤œ"
+
+#: ../clients/tui/nmt-page-wifi.c:89
+msgid "Dynamic WEP (802.1x)"
+msgstr "गतिशील WEP (802.1x)"
+
+#: ../clients/tui/nmt-page-wifi.c:90
+msgid "LEAP"
+msgstr "LEAP"
+
+#: ../clients/tui/nmt-page-wifi.c:95
+msgctxt "WEP key index"
+msgid "1 (Default)"
+msgstr "1 (तयशà¥à¤¦à¤¾)"
+
+#: ../clients/tui/nmt-page-wifi.c:96
+msgctxt "WEP key index"
+msgid "2"
+msgstr "2"
+
+#: ../clients/tui/nmt-page-wifi.c:97
+msgctxt "WEP key index"
+msgid "3"
+msgstr "3"
+
+#: ../clients/tui/nmt-page-wifi.c:98
+msgctxt "WEP key index"
+msgid "4"
+msgstr "4"
+
+#: ../clients/tui/nmt-page-wifi.c:103
+msgid "Open System"
+msgstr "खà¥à¤²à¤¾ तंतà¥à¤°"
+
+#: ../clients/tui/nmt-page-wifi.c:104
+msgid "Shared Key"
+msgstr "साà¤à¤¾ कà¥à¤‚जी"
+
+#: ../clients/tui/nmt-page-wifi.c:252
+msgid "Channel"
+msgstr "चैनल"
+
+#: ../clients/tui/nmt-page-wifi.c:257
+msgid "Security"
+msgstr "सà¥à¤°à¤•à¥à¤·à¤¾"
+
+#. "wpa-enterprise"
+#. FIXME
+#: ../clients/tui/nmt-page-wifi.c:278
+msgid "(No support for wpa-enterprise yet...)"
+msgstr "(wpa-enterprise के लिठअबतक कोई समरà¥à¤¥à¤¨ नहीं...)"
+
+#: ../clients/tui/nmt-page-wifi.c:285 ../clients/tui/nmt-secret-agent.c:262
+msgid "Key"
+msgstr "कà¥à¤‚जी"
+
+#: ../clients/tui/nmt-page-wifi.c:288 ../clients/tui/nmt-page-wifi.c:307
+msgid "WEP index"
+msgstr "WEP सूची"
+
+#: ../clients/tui/nmt-page-wifi.c:296 ../clients/tui/nmt-page-wifi.c:315
+msgid "Authentication"
+msgstr "सतà¥à¤¯à¤¾à¤ªà¤¨"
+
+#. "dynamic-wep"
+#. FIXME
+#: ../clients/tui/nmt-page-wifi.c:321
+msgid "(No support for dynamic-wep yet...)"
+msgstr "(गतिशील-wep के लिठअबतक कोई समरà¥à¤¥à¤¨ नहीं...)"
+
+#: ../clients/tui/nmt-password-fields.c:130
+msgid "Ask for this password every time"
+msgstr "इस कूटशबà¥à¤¦ के लिठहर समय पूछें"
+
+#: ../clients/tui/nmt-password-fields.c:131
+msgid "Show password"
+msgstr "कूटशबà¥à¤¦ दिखाà¤à¤"
+
+#: ../clients/tui/nmt-route-table.c:217
+msgid "Destination"
+msgstr "गंतवà¥à¤¯"
+
+#: ../clients/tui/nmt-route-table.c:217
+msgid "Prefix"
+msgstr "उपसरà¥à¤—"
+
+#: ../clients/tui/nmt-route-table.c:226
+msgid "Next Hop"
+msgstr "अगला हॉप"
+
+#: ../clients/tui/nmt-route-table.c:234
+msgid "Metric"
+msgstr "मेटà¥à¤°à¤¿à¤•"
+
+#: ../clients/tui/nmt-route-table.c:254
+msgid "No custom routes are defined."
+msgstr "कोई पसंदीदा रूट परिभाषित नहीं है."
+
+#: ../clients/tui/nmt-secret-agent.c:220
+msgid "Identity"
+msgstr "पहचान"
+
+#: ../clients/tui/nmt-secret-agent.c:225
+msgid "Private key password"
+msgstr "निजी कà¥à¤‚जी कूटशबà¥à¤¦"
+
+#: ../clients/tui/nmt-secret-agent.c:340
+msgid "Authentication required by wireless network"
+msgstr "बेतार संजाल के दà¥à¤µà¤¾à¤°à¤¾ सतà¥à¤¯à¤¾à¤ªà¤¨ जरूरी"
+
+#: ../clients/tui/nmt-secret-agent.c:341
+#, c-format
+msgid ""
+"Passwords or encryption keys are required to access the wireless network "
+"'%s'."
+msgstr "कूटशबà¥à¤¦ या गोपन कà¥à¤‚जी बेतार संजाल '%s' की पहà¥à¤à¤š के लिठजरूरी है."
+
+#: ../clients/tui/nmt-secret-agent.c:349
+msgid "Wired 802.1X authentication"
+msgstr "तारयà¥à¤•à¥à¤¤ 802.1X सतà¥à¤¯à¤¾à¤ªà¤¨"
+
+#: ../clients/tui/nmt-secret-agent.c:352
+msgid "Network name"
+msgstr "संजाल नाम"
+
+#: ../clients/tui/nmt-secret-agent.c:359
+msgid "DSL authentication"
+msgstr "डीà¤à¤¸à¤à¤² सतà¥à¤¯à¤¾à¤ªà¤¨"
+
+#: ../clients/tui/nmt-secret-agent.c:367
+msgid "PIN code required"
+msgstr "पिन कोड जरूरी"
+
+#: ../clients/tui/nmt-secret-agent.c:368
+msgid "PIN code is needed for the mobile broadband device"
+msgstr "पिन कोड मोबाइल बà¥à¤°à¥‰à¤¡à¤¬à¥ˆà¤‚ड यà¥à¤•à¥à¤¤à¤¿ के लिठजरूरी है"
+
+#: ../clients/tui/nmt-secret-agent.c:370
+msgid "PIN"
+msgstr "पिन"
+
+#: ../clients/tui/nmt-secret-agent.c:376 ../clients/tui/nmt-secret-agent.c:389
+#: ../clients/tui/nmt-secret-agent.c:405
+msgid "Mobile broadband network password"
+msgstr "मोबाइल बà¥à¤°à¥‰à¤¡à¤¬à¥ˆà¤‚ज संजाल कूटशबà¥à¤¦"
+
+#: ../clients/tui/nmt-secret-agent.c:377 ../clients/tui/nmt-secret-agent.c:390
+#: ../clients/tui/nmt-secret-agent.c:406
+#, c-format
+msgid "A password is required to connect to '%s'."
+msgstr "'%s' में कनेकà¥à¤Ÿ होने के लिठà¤à¤• कूटशबà¥à¤¦ जरूरी है."
+
+#: ../clients/tui/nmt-slave-list.c:137
+msgid "Select the type of slave connection you wish to add."
+msgstr "सà¥à¤²à¥‡à¤µ कनेकà¥à¤¶à¤¨ के पà¥à¤°à¤•à¤¾à¤° चà¥à¤¨à¥‡à¤‚ जिसे आप जोड़ना चाहते हैं."
+
+#: ../clients/tui/nmt-widget-list.c:141
+msgid "Add..."
+msgstr "जोड़ें..."
+
+#: ../clients/tui/nmt-widget-list.c:204
+msgid "Remove"
+msgstr "हटाà¤à¤"
+
+#: ../clients/tui/nmtui-connect.c:90
+msgid "Activation failed"
+msgstr "सकà¥à¤°à¤¿à¤¯à¤•à¤°à¤£ विफल"
+
+#: ../clients/tui/nmtui-connect.c:138
+msgid "Connecting..."
+msgstr "जà¥à¤¡à¤¼ रहा है..."
+
+#: ../clients/tui/nmtui-connect.c:167 ../clients/tui/nmtui-connect.c:190
+#, c-format
+msgid "Could not activate connection: %s"
+msgstr "कनेकà¥à¤¶à¤¨ सकà¥à¤°à¤¿à¤¯ नहीं कर सका: %s"
+
+#: ../clients/tui/nmtui-connect.c:250 ../clients/tui/nmtui-connect.c:299
+msgid "Activate"
+msgstr "सकà¥à¤°à¤¿à¤¯ करें"
+
+#: ../clients/tui/nmtui-connect.c:252
+msgid "Deactivate"
+msgstr "निषà¥à¤•à¥à¤°à¤¿à¤¯ करें"
+
+#: ../clients/tui/nmtui-connect.c:304 ../clients/tui/nmtui-edit.c:95
+#: ../clients/tui/nmtui.c:112
+msgid "Quit"
+msgstr "बाहर"
+
+#: ../clients/tui/nmtui-connect.c:327
+#, c-format
+msgid "No such connection '%s'"
+msgstr "कोई à¤à¤¸à¤¾ कनेकà¥à¤¶à¤¨ नहीं '%s'"
-#: ../libnm-util/crypto.c:133
+#: ../clients/tui/nmtui-connect.c:329
+msgid "Connection is already active"
+msgstr "कनेकà¥à¤¶à¤¨ पहले से सकà¥à¤°à¤¿à¤¯ है"
+
+#: ../clients/tui/nmtui-edit.c:200
+msgid "Create"
+msgstr "बनाà¤à¤"
+
+#: ../clients/tui/nmtui-edit.c:342
+msgid "Select the type of connection you wish to create."
+msgstr "कनेकà¥à¤¶à¤¨ के पà¥à¤°à¤•à¤¾à¤° चà¥à¤¨à¥‡à¤‚ जिसे आप करना चाहते हैं."
+
+#: ../clients/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 कनेकà¥à¤¶à¤¨ के पà¥à¤°à¤•à¤¾à¤° आप बनाना चाहते हैं सूची में पà¥à¤°à¤•à¤Ÿ नहीं होता है, तो "
+"आप सही "
+"वीपीà¤à¤¨ पà¥à¤²à¤—इन संसà¥à¤¥à¤¾à¤ªà¤¿à¤¤ नहीं हो सकता है."
+
+#: ../clients/tui/nmtui-edit.c:386 ../clients/tui/nmtui-edit.c:402
+msgid "New Connection"
+msgstr "नया कनेकà¥à¤¶à¤¨"
+
+#: ../clients/tui/nmtui-edit.c:440
+#, c-format
+msgid "Unable to delete connection: %s"
+msgstr "कनेकà¥à¤¶à¤¨ मिटाने में असमरà¥à¤¥: %s"
+
+#: ../clients/tui/nmtui-edit.c:472
+#, c-format
+msgid "Are you sure you want to delete the connection '%s'?"
+msgstr "कà¥à¤¯à¤¾ आप निशà¥à¤šà¤¿à¤¤ हैं कि आप इस कनेकà¥à¤¶à¤¨ '%s को मिटाना चाहते हैं?"
+
+#: ../clients/tui/nmtui-edit.c:486
+#, c-format
+msgid "Could not delete connection: %s"
+msgstr "टीà¤à¤²à¤à¤¸ कनेकà¥à¤¶à¤¨ मिटा नहीं सका: %s"
+
+#: ../clients/tui/nmtui-hostname.c:47
+msgid "Set Hostname"
+msgstr "मेजबाननाम सेट करें"
+
+#: ../clients/tui/nmtui-hostname.c:55
+msgid "Hostname"
+msgstr "मेजबाननाम"
+
+#. Translators: this indicates the result. ie, "I have set the hostname to ..."
+#: ../clients/tui/nmtui-hostname.c:114
+#, c-format
+msgid "Set hostname to '%s'"
+msgstr "'%s' पर मेजबाननाम सेट करें"
+
+#: ../clients/tui/nmtui-hostname.c:116
+#, c-format
+msgid "Unable to set hostname: %s"
+msgstr "मेजबाननाम सेट नहीं कर सका: %s"
+
+#: ../clients/tui/nmtui.c:57 ../clients/tui/nmtui.c:60
+msgid "connection"
+msgstr "कनेकà¥à¤¶à¤¨"
+
+#: ../clients/tui/nmtui.c:58
+msgid "Edit a connection"
+msgstr "कनेकà¥à¤¶à¤¨ संपादित करें"
+
+#: ../clients/tui/nmtui.c:61
+msgid "Activate a connection"
+msgstr "कनेकà¥à¤¶à¤¨ सकà¥à¤°à¤¿à¤¯ करें"
+
+#: ../clients/tui/nmtui.c:63
+msgid "new hostname"
+msgstr "नया मेजबाननाम"
+
+#: ../clients/tui/nmtui.c:64
+msgid "Set system hostname"
+msgstr "तंतà¥à¤° मेजबाननाम सेट करें"
+
+#: ../clients/tui/nmtui.c:87
+msgid "NetworkManager TUI"
+msgstr "NetworkManager TUI"
+
+#: ../clients/tui/nmtui.c:95
+msgid "Please select an option"
+msgstr "कृपया कोई विकलà¥à¤ª चà¥à¤¨à¥‡à¤‚"
+
+#: ../clients/tui/nmtui.c:147
+msgid "Usage"
+msgstr "पà¥à¤°à¤¯à¥‹à¤—"
+
+#: ../clients/tui/nmtui.c:228
+msgid "Could not parse arguments"
+msgstr "तरà¥à¤• पदवà¥à¤¯à¤¾à¤–à¥à¤¯à¤¾ नहीं कर सकता"
+
+#: ../clients/tui/nmtui.c:238 ../clients/tui/nmtui.c:249
+#, c-format
+#| msgid "Could not activate connection: %s"
+msgid "Could not contact NetworkManager: %s.\n"
+msgstr "नेटवरà¥à¤•à¤®à¥ˆà¤¨à¥‡à¤œà¤° से संपरà¥à¤• नहीं कर सका: %s\n"
+
+#: ../clients/tui/nmtui.c:243
+msgid "NetworkManager is not running."
+msgstr "नेटवरà¥à¤•à¤ªà¥à¤°à¤¬à¤‚धक कारà¥à¤¯à¤¶à¥€à¤² नहीं है."
+
+#: ../libnm-core/crypto.c:135 ../libnm-util/crypto.c:133
#, c-format
msgid "PEM key file had no end tag '%s'."
msgstr "PEM कà¥à¤‚जी फाइल के पास कोई अंत टैग '%s' नहीं है."
-#: ../libnm-util/crypto.c:146
+#: ../libnm-core/crypto.c:148 ../libnm-util/crypto.c:146
#, c-format
msgid "Doesn't look like a PEM private key file."
msgstr "à¤à¤• PEM निजी कà¥à¤‚जी फाइल की तरह का नहीं दिखता है."
-#: ../libnm-util/crypto.c:163
+#: ../libnm-core/crypto.c:165 ../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:171
+#: ../libnm-core/crypto.c:173 ../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:181
+#: ../libnm-core/crypto.c:183 ../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:192
+#: ../libnm-core/crypto.c:194 ../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:199
+#: ../libnm-core/crypto.c:201 ../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:212
+#: ../libnm-core/crypto.c:216 ../libnm-util/crypto.c:214
#, c-format
msgid "Malformed PEM file: unknown private key cipher '%s'."
msgstr "विरूपित PEM फाइल: अजà¥à¤žà¤¾à¤¤ निजी कà¥à¤‚जी साइफर '%s'."
-#: ../libnm-util/crypto.c:231
+#: ../libnm-core/crypto.c:235 ../libnm-util/crypto.c:233
#, c-format
msgid "Could not decode private key."
msgstr "निजी कà¥à¤‚जी को विगोपित नहीं कर सका."
-#: ../libnm-util/crypto.c:283
+#: ../libnm-core/crypto.c:288 ../libnm-util/crypto.c:285
msgid "Failed to find expected PKCS#8 start tag."
msgstr "अपेकà¥à¤·à¤¿à¤¤ PKCS#8 आरंभ टैग को खोजने में असफल."
-#: ../libnm-util/crypto.c:291
+#: ../libnm-core/crypto.c:296 ../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:310
+#: ../libnm-core/crypto.c:315 ../libnm-util/crypto.c:312
msgid "Failed to decode PKCS#8 private key."
msgstr "PKCS#8 निजी कà¥à¤‚जी वà¥à¤¯à¤¾à¤–à¥à¤¯à¤¾ करने में असफल रहा."
-#: ../libnm-util/crypto.c:352
+#: ../libnm-core/crypto.c:357 ../libnm-util/crypto.c:354
#, c-format
msgid "IV must be an even number of bytes in length."
msgstr "IV की लंबाई में बाइट संखà¥à¤¯à¤¾ सम संखà¥à¤¯à¤¾ होनी चाहिà¤."
-#: ../libnm-util/crypto.c:366
+#: ../libnm-core/crypto.c:371 ../libnm-util/crypto.c:368
#, c-format
msgid "IV contains non-hexadecimal digits."
msgstr "IV गैर हेकà¥à¤¸à¤¾à¤¡à¥‡à¤¸à¥€à¤®à¥‡à¤² अंक समाहित करता है."
-#: ../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
+#: ../libnm-core/crypto.c:411 ../libnm-core/crypto_gnutls.c:151
+#: ../libnm-core/crypto_gnutls.c:269 ../libnm-core/crypto_nss.c:171
+#: ../libnm-core/crypto_nss.c:333 ../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:511
+#: ../libnm-core/crypto.c:523 ../libnm-util/crypto.c:518
#, c-format
msgid "Unable to determine private key type."
msgstr "निजी कà¥à¤‚जी पà¥à¤°à¤•à¤¾à¤° निरà¥à¤§à¤¾à¤°à¤¿à¤¤ करने में असमरà¥à¤¥."
-#: ../libnm-util/crypto.c:566
+#: ../libnm-core/crypto.c:580 ../libnm-util/crypto.c:573
#, c-format
msgid "PEM certificate had no start tag '%s'."
msgstr "PEM पà¥à¤°à¤®à¤¾à¤£à¤ªà¤¤à¥à¤° के पास कोई पà¥à¤°à¤¾à¤°à¤‚भ टैग '%s' नहीं है."
-#: ../libnm-util/crypto.c:575
+#: ../libnm-core/crypto.c:589 ../libnm-util/crypto.c:582
#, c-format
msgid "PEM certificate had no end tag '%s'."
msgstr "PEM पà¥à¤°à¤®à¤¾à¤£à¤ªà¤¤à¥à¤° के पास कोई अंत टैग '%s' नहीं है."
-#: ../libnm-util/crypto.c:593
+#: ../libnm-core/crypto.c:607 ../libnm-util/crypto.c:600
#, c-format
msgid "Failed to decode certificate."
msgstr "पà¥à¤°à¤®à¤¾à¤£à¤ªà¤¤à¥à¤° विगोपित करने में विफल."
-#: ../libnm-util/crypto_gnutls.c:50
+#: ../libnm-core/crypto_gnutls.c:50 ../libnm-util/crypto_gnutls.c:50
msgid "Failed to initialize the crypto engine."
msgstr "कà¥à¤°à¤¿à¤ªà¥à¤Ÿà¥‹ ईंजन आरंभीकृत करने में विफल."
-#: ../libnm-util/crypto_gnutls.c:92
+#: ../libnm-core/crypto_gnutls.c:92 ../libnm-util/crypto_gnutls.c:92
#, c-format
msgid "Failed to initialize the MD5 engine: %s / %s."
msgstr "MD5 ईंजन आरंभीकृत करने में विफल: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:155
+#: ../libnm-core/crypto_gnutls.c:159 ../libnm-util/crypto_gnutls.c:158
#, c-format
msgid "Invalid IV length (must be at least %zd)."
msgstr "अवैध IV लंबाई (कम से कम %zd होना चाहिà¤)."
-#: ../libnm-util/crypto_gnutls.c:166
+#: ../libnm-core/crypto_gnutls.c:170 ../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:175
+#: ../libnm-core/crypto_gnutls.c:179 ../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:184
+#: ../libnm-core/crypto_gnutls.c:188 ../libnm-util/crypto_gnutls.c:187
#, c-format
msgid "Failed to set IV for decryption: %s / %s."
msgstr "IV को गोपन के लिठसेट करने में विफल: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:193
+#: ../libnm-core/crypto_gnutls.c:197 ../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:203 ../libnm-util/crypto_nss.c:257
+#: ../libnm-core/crypto_gnutls.c:207 ../libnm-core/crypto_nss.c:261
+#: ../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:214 ../libnm-util/crypto_nss.c:268
+#: ../libnm-core/crypto_gnutls.c:218 ../libnm-core/crypto_nss.c:272
+#: ../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:281
+#: ../libnm-core/crypto_gnutls.c:291 ../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:290
+#: ../libnm-core/crypto_gnutls.c:300 ../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:300
+#: ../libnm-core/crypto_gnutls.c:310 ../libnm-util/crypto_gnutls.c:308
#, c-format
msgid "Failed to set IV for encryption: %s / %s."
msgstr "IV को गोपन के लिठसेट करने में विफल: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:309
+#: ../libnm-core/crypto_gnutls.c:319 ../libnm-util/crypto_gnutls.c:317
#, c-format
msgid "Failed to encrypt the data: %s / %s."
msgstr "आà¤à¤•à¤¡à¤¼à¤¾ गोपित करने में विफल: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:349
+#: ../libnm-core/crypto_gnutls.c:359 ../libnm-util/crypto_gnutls.c:357
#, c-format
msgid "Error initializing certificate data: %s"
msgstr "पà¥à¤°à¤®à¤¾à¤£à¤ªà¤¤à¥à¤° आà¤à¤•à¤¡à¤¼à¤¾ आरंभीकृत करने में विफल: %s"
-#: ../libnm-util/crypto_gnutls.c:371
+#: ../libnm-core/crypto_gnutls.c:381 ../libnm-util/crypto_gnutls.c:379
#, c-format
msgid "Couldn't decode certificate: %s"
msgstr "पà¥à¤°à¤®à¤¾à¤£à¤ªà¤¤à¥à¤° विगोपित नहीं कर सका: %s"
-#: ../libnm-util/crypto_gnutls.c:395
+#: ../libnm-core/crypto_gnutls.c:406 ../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:408
+#: ../libnm-core/crypto_gnutls.c:419 ../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:420
+#: ../libnm-core/crypto_gnutls.c:431 ../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:448
+#: ../libnm-core/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:471
+#: ../libnm-core/crypto_gnutls.c:483 ../libnm-util/crypto_gnutls.c:479
#, c-format
msgid "Couldn't decode PKCS#8 file: %s"
msgstr "PKCS#8 फाइल विगोपित नहीं कर सका: %s"
-#: ../libnm-util/crypto_nss.c:56
+#: ../libnm-core/crypto_nss.c:56 ../libnm-util/crypto_nss.c:56
#, c-format
msgid "Failed to initialize the crypto engine: %d."
msgstr "कà¥à¤°à¤¿à¤ªà¥à¤Ÿà¥‹ ईंजन आरंभीकृत करने में विफल: %d."
-#: ../libnm-util/crypto_nss.c:107
+#: ../libnm-core/crypto_nss.c:107 ../libnm-util/crypto_nss.c:107
#, c-format
msgid "Failed to initialize the MD5 context: %d."
msgstr "MD5 संदरà¥à¤­ आरंभीकृत करने में विफल: %d."
-#: ../libnm-util/crypto_nss.c:175
+#: ../libnm-core/crypto_nss.c:179 ../libnm-util/crypto_nss.c:178
#, c-format
msgid "Invalid IV length (must be at least %d)."
msgstr "अवैध IV लंबाई (जरूर कम से कम %d होना चाहिà¤)."
-#: ../libnm-util/crypto_nss.c:186
+#: ../libnm-core/crypto_nss.c:190 ../libnm-util/crypto_nss.c:189
#, c-format
msgid "Failed to initialize the decryption cipher slot."
msgstr "विगोपन साइफर सà¥à¤²à¥‰à¤Ÿ को आरंभीकृत करने में विफल."
-#: ../libnm-util/crypto_nss.c:196
+#: ../libnm-core/crypto_nss.c:200 ../libnm-util/crypto_nss.c:199
#, c-format
msgid "Failed to set symmetric key for decryption."
msgstr "गोपन के लिठसममितीय कà¥à¤‚जी सेट करने में विफल."
-#: ../libnm-util/crypto_nss.c:206
+#: ../libnm-core/crypto_nss.c:210 ../libnm-util/crypto_nss.c:209
#, c-format
msgid "Failed to set IV for decryption."
msgstr "IV को गोपन के लिठसेट करने में विफल."
-#: ../libnm-util/crypto_nss.c:214
+#: ../libnm-core/crypto_nss.c:218 ../libnm-util/crypto_nss.c:217
#, c-format
msgid "Failed to initialize the decryption context."
msgstr "गोपन संदरà¥à¤­ आरंभीकृत करने में विफल."
-#: ../libnm-util/crypto_nss.c:227
+#: ../libnm-core/crypto_nss.c:231 ../libnm-util/crypto_nss.c:230
#, c-format
msgid "Failed to decrypt the private key: %d."
msgstr "निजी कà¥à¤‚जी गोपित करने में विफल: %d."
-#: ../libnm-util/crypto_nss.c:235
+#: ../libnm-core/crypto_nss.c:239 ../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:246
+#: ../libnm-core/crypto_nss.c:250 ../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:348
+#: ../libnm-core/crypto_nss.c:355 ../libnm-util/crypto_nss.c:353
#, c-format
msgid "Failed to initialize the encryption cipher slot."
msgstr "गोपन साइफर सà¥à¤²à¤¾à¤Ÿ आरंभीकृत करने में विफल."
-#: ../libnm-util/crypto_nss.c:356
+#: ../libnm-core/crypto_nss.c:363 ../libnm-util/crypto_nss.c:361
#, c-format
msgid "Failed to set symmetric key for encryption."
msgstr "गोपन के लिठसममितीय कà¥à¤‚जी सेट करने में विफल."
-#: ../libnm-util/crypto_nss.c:364
+#: ../libnm-core/crypto_nss.c:371 ../libnm-util/crypto_nss.c:369
#, c-format
msgid "Failed to set IV for encryption."
msgstr "IV को गोपन के लिठसेट करने में विफल."
-#: ../libnm-util/crypto_nss.c:372
+#: ../libnm-core/crypto_nss.c:379 ../libnm-util/crypto_nss.c:377
#, c-format
msgid "Failed to initialize the encryption context."
msgstr "गोपन संदरà¥à¤­ आरंभीकृत करने में विफल."
-#: ../libnm-util/crypto_nss.c:380
+#: ../libnm-core/crypto_nss.c:387 ../libnm-util/crypto_nss.c:385
#, c-format
msgid "Failed to encrypt: %d."
msgstr "गोपित करने में विफल: %d."
-#: ../libnm-util/crypto_nss.c:388
+#: ../libnm-core/crypto_nss.c:395 ../libnm-util/crypto_nss.c:393
#, c-format
msgid "Unexpected amount of data after encrypting."
msgstr "गोपन के बाद आà¤à¤•à¤¡à¤¼à¤¾ की अपà¥à¤°à¤¤à¥à¤¯à¤¾à¤¶à¤¿à¤¤ मातà¥à¤°à¤¾."
-#: ../libnm-util/crypto_nss.c:431
+#: ../libnm-core/crypto_nss.c:435 ../libnm-util/crypto_nss.c:433
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "पà¥à¤°à¤®à¤¾à¤£à¤ªà¤¤à¥à¤° डिकोड नहीं कर सका: %d"
-#: ../libnm-util/crypto_nss.c:466
+#: ../libnm-core/crypto_nss.c:471 ../libnm-util/crypto_nss.c:468
#, c-format
msgid "Couldn't convert password to UCS2: %d"
msgstr "कूटशबà¥à¤¦ को UCS2 में बदल नहीं सका: %d"
-#: ../libnm-util/crypto_nss.c:494
+#: ../libnm-core/crypto_nss.c:499 ../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:503
+#: ../libnm-core/crypto_nss.c:508 ../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:512
+#: ../libnm-core/crypto_nss.c:517 ../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:556
+#: ../libnm-core/crypto_nss.c:562 ../libnm-util/crypto_nss.c:558
msgid "Could not generate random data."
msgstr "कà¥à¤°à¤®à¤¹à¥€à¤¨ आà¤à¤•à¤¡à¤¼à¤¾ बना नहीं सका."
-#: ../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
+#: ../libnm-core/nm-connection.c:885
+#| msgid "Unable to delete connection: %s"
+msgid "Unexpected failure to verify the connection"
+msgstr "कनेकà¥à¤¶à¤¨ जाà¤à¤šà¤¨à¥‡ के लिठअपà¥à¤°à¤¤à¥à¤¯à¤¾à¤¶à¤¿à¤¤ विफलता"
+
+#: ../libnm-core/nm-connection.c:916
+#| msgid "Unable to delete connection: %s"
+msgid "Unexpected failure to normalize the connection"
+msgstr "कनेकà¥à¤¶à¤¨ सामानà¥à¤¯ करने के लिठअपà¥à¤°à¤¤à¥à¤¯à¤¾à¤¶à¤¿à¤¤ विफलता"
+
+#: ../libnm-core/nm-setting-8021x.c:595 ../libnm-util/nm-setting-8021x.c:596
+msgid "CA certificate must be in X.509 format"
+msgstr "CA पà¥à¤°à¤®à¤¾à¤£à¤ªà¤¤à¥à¤° को जरूर X.509 पà¥à¤°à¤¾à¤°à¥‚प में होना चाहिà¤"
+
+#: ../libnm-core/nm-setting-8021x.c:910 ../libnm-core/nm-setting-8021x.c:1174
+#: ../libnm-core/nm-setting-8021x.c:1494 ../libnm-util/nm-setting-8021x.c:914
+#: ../libnm-util/nm-setting-8021x.c:1177 ../libnm-util/nm-setting-8021x.c:1500
+#| msgid "Error initializing certificate data: %s"
+msgid "invalid certificate format"
+msgstr "अवैध पà¥à¤°à¤®à¤¾à¤£à¤ªà¤¤à¥à¤° आà¤à¤•à¤¡à¤¼à¤¾ पà¥à¤°à¤¾à¤°à¥‚प"
+
+#: ../libnm-core/nm-setting-8021x.c:1776 ../libnm-util/nm-setting-8021x.c:1769
+#| msgid "invalid gateway '%s'"
+msgid "invalid private key"
+msgstr "अवैध निजी कà¥à¤à¤œà¥€"
+
+#: ../libnm-core/nm-setting-8021x.c:2086 ../libnm-util/nm-setting-8021x.c:2080
+#| msgid "Failed to decrypt the private key."
+msgid "invalid phase2 private key"
+msgstr "अवैध phase2 निजी कà¥à¤‚जी"
+
+#: ../libnm-core/nm-setting-8021x.c:2288 ../libnm-core/nm-setting-8021x.c:2305
+#: ../libnm-core/nm-setting-8021x.c:2335 ../libnm-core/nm-setting-8021x.c:2352
+#: ../libnm-core/nm-setting-8021x.c:2393 ../libnm-core/nm-setting-8021x.c:2405
+#: ../libnm-core/nm-setting-8021x.c:2423 ../libnm-core/nm-setting-8021x.c:2435
+#: ../libnm-core/nm-setting-8021x.c:2459 ../libnm-core/nm-setting-8021x.c:2641
+#: ../libnm-core/nm-setting-adsl.c:204
+#: ../libnm-core/nm-setting-bluetooth.c:137
+#: ../libnm-core/nm-setting-bluetooth.c:155
+#: ../libnm-core/nm-setting-cdma.c:157
+#: ../libnm-core/nm-setting-connection.c:761
+#: ../libnm-core/nm-setting-connection.c:777
+#: ../libnm-core/nm-setting-connection.c:807
+#: ../libnm-core/nm-setting-ip4-config.c:899
+#: ../libnm-core/nm-setting-ip6-config.c:817
+#: ../libnm-core/nm-setting-ip6-config.c:881
+#: ../libnm-core/nm-setting-olpc-mesh.c:118
+#: ../libnm-core/nm-setting-pppoe.c:158 ../libnm-core/nm-setting-vpn.c:398
+#: ../libnm-core/nm-setting-wimax.c:134
+#: ../libnm-core/nm-setting-wireless-security.c:878
+#: ../libnm-core/nm-setting-wireless.c:712 ../libnm-core/nm-setting.c:1702
+#: ../libnm-util/nm-setting.c:1279 ../libnm-util/nm-setting.c:1298
+#: ../libnm-util/nm-setting.c:1316 ../libnm-util/nm-setting-8021x.c:2282
+#: ../libnm-util/nm-setting-8021x.c:2299 ../libnm-util/nm-setting-8021x.c:2340
+#: ../libnm-util/nm-setting-8021x.c:2357 ../libnm-util/nm-setting-8021x.c:2409
+#: ../libnm-util/nm-setting-8021x.c:2421 ../libnm-util/nm-setting-8021x.c:2439
+#: ../libnm-util/nm-setting-8021x.c:2451 ../libnm-util/nm-setting-8021x.c:2475
+#: ../libnm-util/nm-setting-8021x.c:2653 ../libnm-util/nm-setting-adsl.c:208
+#: ../libnm-util/nm-setting-bluetooth.c:140
+#: ../libnm-util/nm-setting-bluetooth.c:158
+#: ../libnm-util/nm-setting-cdma.c:161
+#: ../libnm-util/nm-setting-connection.c:767
+#: ../libnm-util/nm-setting-connection.c:783
+#: ../libnm-util/nm-setting-connection.c:844
+#: ../libnm-util/nm-setting-ip4-config.c:828
+#: ../libnm-util/nm-setting-ip6-config.c:809
+#: ../libnm-util/nm-setting-ip6-config.c:873
+#: ../libnm-util/nm-setting-olpc-mesh.c:122
+#: ../libnm-util/nm-setting-pppoe.c:162 ../libnm-util/nm-setting-vpn.c:402
+#: ../libnm-util/nm-setting-wimax.c:137
+#: ../libnm-util/nm-setting-wireless-security.c:891
+#: ../libnm-util/nm-setting-wireless.c:750
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-core/nm-setting-8021x.c:2295 ../libnm-core/nm-setting-8021x.c:2312
+#: ../libnm-core/nm-setting-8021x.c:2342 ../libnm-core/nm-setting-8021x.c:2359
+#: ../libnm-core/nm-setting-8021x.c:2399 ../libnm-core/nm-setting-8021x.c:2411
+#: ../libnm-core/nm-setting-8021x.c:2429 ../libnm-core/nm-setting-8021x.c:2441
+#: ../libnm-core/nm-setting-8021x.c:2466 ../libnm-core/nm-setting-adsl.c:211
+#: ../libnm-core/nm-setting-adsl.c:220 ../libnm-core/nm-setting-cdma.c:173
+#: ../libnm-core/nm-setting-cdma.c:182
+#: ../libnm-core/nm-setting-connection.c:768
+#: ../libnm-core/nm-setting-connection.c:818
+#: ../libnm-core/nm-setting-gsm.c:241 ../libnm-core/nm-setting-gsm.c:298
+#: ../libnm-core/nm-setting-gsm.c:307
+#: ../libnm-core/nm-setting-ip4-config.c:964
+#: ../libnm-core/nm-setting-ip4-config.c:973
+#: ../libnm-core/nm-setting-pppoe.c:165 ../libnm-core/nm-setting-pppoe.c:174
+#: ../libnm-core/nm-setting-vpn.c:407 ../libnm-core/nm-setting-vpn.c:417
+#: ../libnm-core/nm-setting-wimax.c:143
+#: ../libnm-core/nm-setting-wireless-security.c:908
+#: ../libnm-core/nm-setting-wireless-security.c:916
+#: ../libnm-core/nm-setting-wireless-security.c:940
+#: ../libnm-util/nm-setting-8021x.c:2289 ../libnm-util/nm-setting-8021x.c:2306
+#: ../libnm-util/nm-setting-8021x.c:2347 ../libnm-util/nm-setting-8021x.c:2364
+#: ../libnm-util/nm-setting-8021x.c:2415 ../libnm-util/nm-setting-8021x.c:2427
+#: ../libnm-util/nm-setting-8021x.c:2445 ../libnm-util/nm-setting-8021x.c:2457
+#: ../libnm-util/nm-setting-8021x.c:2482 ../libnm-util/nm-setting-adsl.c:215
+#: ../libnm-util/nm-setting-adsl.c:224 ../libnm-util/nm-setting-cdma.c:177
+#: ../libnm-util/nm-setting-cdma.c:186
+#: ../libnm-util/nm-setting-connection.c:774
+#: ../libnm-util/nm-setting-connection.c:851
+#: ../libnm-util/nm-setting-gsm.c:281 ../libnm-util/nm-setting-gsm.c:338
+#: ../libnm-util/nm-setting-gsm.c:347
+#: ../libnm-util/nm-setting-ip4-config.c:893
+#: ../libnm-util/nm-setting-ip4-config.c:902
+#: ../libnm-util/nm-setting-pppoe.c:169 ../libnm-util/nm-setting-pppoe.c:178
+#: ../libnm-util/nm-setting-vpn.c:411 ../libnm-util/nm-setting-vpn.c:421
#: ../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
+#: ../libnm-util/nm-setting-wireless-security.c:921
+#: ../libnm-util/nm-setting-wireless-security.c:929
+#: ../libnm-util/nm-setting-wireless-security.c:953
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
+#: ../libnm-core/nm-setting-8021x.c:2324 ../libnm-core/nm-setting-8021x.c:2371
+#: ../libnm-util/nm-setting-8021x.c:2317 ../libnm-util/nm-setting-8021x.c:2329
+#: ../libnm-util/nm-setting-8021x.c:2375 ../libnm-util/nm-setting-8021x.c:2387
#, 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-core/nm-setting-8021x.c:2616 ../libnm-core/nm-setting-8021x.c:2650
+#: ../libnm-core/nm-setting-bluetooth.c:146
+#: ../libnm-core/nm-setting-infiniband.c:209
+#: ../libnm-core/nm-setting-infiniband.c:224
+#: ../libnm-core/nm-setting-ip4-config.c:955
+#: ../libnm-core/nm-setting-ip6-config.c:872
+#: ../libnm-core/nm-setting-olpc-mesh.c:147
+#: ../libnm-core/nm-setting-wimax.c:152 ../libnm-core/nm-setting-wired.c:638
+#: ../libnm-core/nm-setting-wired.c:648
+#: ../libnm-core/nm-setting-wireless-security.c:959
+#: ../libnm-core/nm-setting-wireless-security.c:968
+#: ../libnm-core/nm-setting-wireless-security.c:976
+#: ../libnm-core/nm-setting-wireless-security.c:984
+#: ../libnm-core/nm-setting-wireless-security.c:992
+#: ../libnm-core/nm-setting-wireless-security.c:1001
+#: ../libnm-core/nm-setting-wireless-security.c:1010
+#: ../libnm-core/nm-setting-wireless-security.c:1019
+#: ../libnm-core/nm-setting-wireless-security.c:1055
+#: ../libnm-core/nm-setting-wireless-security.c:1065
+#: ../libnm-core/nm-setting-wireless.c:773
+#: ../libnm-core/nm-setting-wireless.c:782
+#: ../libnm-core/nm-setting-wireless.c:791 ../libnm-util/nm-setting.c:1289
+#: ../libnm-util/nm-setting.c:1307 ../libnm-util/nm-setting.c:1326
+#: ../libnm-util/nm-setting-8021x.c:2628 ../libnm-util/nm-setting-8021x.c:2662
+#: ../libnm-util/nm-setting-bluetooth.c:149
+#: ../libnm-util/nm-setting-infiniband.c:204
+#: ../libnm-util/nm-setting-infiniband.c:220
+#: ../libnm-util/nm-setting-ip4-config.c:884
+#: ../libnm-util/nm-setting-ip6-config.c:864
+#: ../libnm-util/nm-setting-olpc-mesh.c:150
+#: ../libnm-util/nm-setting-wimax.c:155 ../libnm-util/nm-setting-wired.c:660
+#: ../libnm-util/nm-setting-wired.c:669
#: ../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
+#: ../libnm-util/nm-setting-wireless-security.c:981
+#: ../libnm-util/nm-setting-wireless-security.c:989
+#: ../libnm-util/nm-setting-wireless-security.c:997
+#: ../libnm-util/nm-setting-wireless-security.c:1005
+#: ../libnm-util/nm-setting-wireless-security.c:1014
+#: ../libnm-util/nm-setting-wireless-security.c:1023
+#: ../libnm-util/nm-setting-wireless-security.c:1032
+#: ../libnm-util/nm-setting-wireless-security.c:1068
+#: ../libnm-util/nm-setting-wireless-security.c:1078
+#: ../libnm-util/nm-setting-wireless.c:810
+#: ../libnm-util/nm-setting-wireless.c:819
+#: ../libnm-util/nm-setting-wireless.c:828
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
+#: ../libnm-core/nm-setting-8021x.c:2675 ../libnm-core/nm-setting-8021x.c:2685
+#: ../libnm-core/nm-setting-8021x.c:2695 ../libnm-core/nm-setting-8021x.c:2705
+#: ../libnm-core/nm-setting-8021x.c:2715 ../libnm-core/nm-setting-adsl.c:232
+#: ../libnm-core/nm-setting-adsl.c:244
+#: ../libnm-core/nm-setting-bluetooth.c:163
+#: ../libnm-core/nm-setting-wireless-security.c:887
+#: ../libnm-util/nm-setting-8021x.c:2687 ../libnm-util/nm-setting-8021x.c:2697
+#: ../libnm-util/nm-setting-8021x.c:2707 ../libnm-util/nm-setting-8021x.c:2717
+#: ../libnm-util/nm-setting-8021x.c:2727 ../libnm-util/nm-setting-adsl.c:236
+#: ../libnm-util/nm-setting-adsl.c:248
+#: ../libnm-util/nm-setting-bluetooth.c:166
+#: ../libnm-util/nm-setting-wireless-security.c:900
#, c-format
msgid "'%s' is not a valid value for the property"
msgstr "%s' गà¥à¤£ के लिठवैध मान नहीं है."
-#: ../libnm-util/nm-setting-bluetooth.c:188
+#: ../libnm-core/nm-setting-bluetooth.c:181
+#: ../libnm-util/nm-setting-bluetooth.c:184
#, c-format
msgid "requires '%s' or '%s' setting"
msgstr "'%s' या '%s' सेटिंग की जरूरत है"
-#: ../libnm-util/nm-setting-bond.c:518
+#: ../libnm-core/nm-setting-bond.c:475 ../libnm-util/nm-setting-bond.c:498
#, c-format
msgid "invalid option '%s' or its value '%s'"
msgstr "'%s' अवैध विकलà¥à¤ª या इसका मान '%s'"
-#: ../libnm-util/nm-setting-bond.c:537
+#: ../libnm-core/nm-setting-bond.c:494 ../libnm-util/nm-setting-bond.c:517
#, c-format
msgid "only one of '%s' and '%s' can be set"
msgstr "'%s' और '%s' में से केवल सेट किया जा सकता है"
-#: ../libnm-util/nm-setting-bond.c:548
+#: ../libnm-core/nm-setting-bond.c:505 ../libnm-util/nm-setting-bond.c:528
#, c-format
msgid "mandatory option '%s' is missing"
msgstr "अनिवारà¥à¤¯ विकलà¥à¤ª '%s' अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤ है"
-#: ../libnm-util/nm-setting-bond.c:557
+#: ../libnm-core/nm-setting-bond.c:514 ../libnm-util/nm-setting-bond.c:537
#, c-format
msgid "'%s' is not a valid value for '%s'"
msgstr "'%s' '%s' के लिठवैध मान नहीं है"
-#: ../libnm-util/nm-setting-bond.c:570
+#: ../libnm-core/nm-setting-bond.c:527 ../libnm-util/nm-setting-bond.c:550
#, c-format
msgid "'%s=%s' is incompatible with '%s > 0'"
msgstr "'%s=%s' '%s > 0' के साथ असंगत है"
-#: ../libnm-util/nm-setting-bond.c:583
+#: ../libnm-core/nm-setting-bond.c:540 ../libnm-util/nm-setting-bond.c:563
#, c-format
msgid "'%s' is not a valid interface name for '%s' option"
msgstr "'%s' '%s' विकलà¥à¤ª के लिठवैध अंतरफलक नाम नहीं है"
-#: ../libnm-util/nm-setting-bond.c:593
+#: ../libnm-core/nm-setting-bond.c:550 ../libnm-util/nm-setting-bond.c:573
#, c-format
msgid "'%s' option is only valid for '%s=%s'"
msgstr "'%s' विकलà¥à¤ª '%s=%s' के लिठकेवल वैध है"
-#: ../libnm-util/nm-setting-bond.c:606
+#: ../libnm-core/nm-setting-bond.c:563 ../libnm-util/nm-setting-bond.c:586
#, 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
+#: ../libnm-core/nm-setting-bond.c:576 ../libnm-core/nm-setting-bond.c:585
+#: ../libnm-core/nm-setting-bond.c:605 ../libnm-core/nm-setting-bond.c:641
+#: ../libnm-util/nm-setting-bond.c:599 ../libnm-util/nm-setting-bond.c:608
+#: ../libnm-util/nm-setting-bond.c:628 ../libnm-util/nm-setting-bond.c:664
#, c-format
msgid "'%s' option requires '%s' option to be set"
msgstr "'%s' विकलà¥à¤ª '%s' विकलà¥à¤ª के लिठसेट है"
-#: ../libnm-util/nm-setting-bond.c:659
+#: ../libnm-core/nm-setting-bond.c:616 ../libnm-util/nm-setting-bond.c:639
#, c-format
msgid "'%s' option is empty"
msgstr "'%s' खाली है"
-#: ../libnm-util/nm-setting-bond.c:671
+#: ../libnm-core/nm-setting-bond.c:628 ../libnm-util/nm-setting-bond.c:651
#, 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
+#: ../libnm-core/nm-setting-bridge-port.c:139
+#: ../libnm-core/nm-setting-bridge-port.c:151
+#: ../libnm-util/nm-setting-bridge-port.c:153
+#: ../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
+#: ../libnm-core/nm-setting-bridge-port.c:176
+#: ../libnm-core/nm-setting-team-port.c:119
+#, c-format
+msgid ""
+"A connection with a '%s' setting must have the slave-type set to '%s'. "
+"Instead it is '%s'"
+msgstr ""
+"'%s' सेटिंग के साथ कनेकà¥à¤¶à¤¨ में '%s' में सà¥à¤²à¥‡à¤µ किसà¥à¤® सेट होना चाहिठ. इसके "
+"बदले '%s' में"
+
+#: ../libnm-core/nm-setting-bridge.c:223 ../libnm-util/nm-setting-bridge.c:268
#, c-format
msgid "value '%d' is out of range <%d-%d>"
msgstr "मान '%d' परिसर के बाहर है <%d-%d>"
-#: ../libnm-util/nm-setting-cdma.c:170
+#: ../libnm-core/nm-setting-bridge.c:240 ../libnm-core/nm-setting-wired.c:613
+#: ../libnm-core/nm-setting-wired.c:672 ../libnm-util/nm-setting-bridge.c:285
+#: ../libnm-util/nm-setting-wired.c:635 ../libnm-util/nm-setting-wired.c:693
+msgid "is not a valid MAC address"
+msgstr "à¤à¤• वैध MAC पता नहीं है"
+
+#: ../libnm-core/nm-setting-cdma.c:164 ../libnm-util/nm-setting-cdma.c:168
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
+#: ../libnm-core/nm-setting-connection.c:740
+#: ../libnm-util/nm-setting-connection.c:861
#, 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-core/nm-setting-connection.c:828
+#, c-format
+#| msgid "index '%s' is not valid"
+msgid "connection type '%s' is not valid"
+msgstr "कनेकà¥à¤¶à¤¨ किसà¥à¤® '%s' वैध नहीं है"
+
+#: ../libnm-core/nm-setting-connection.c:838
+#, c-format
+#| msgid "Error: 'bt-type': '%s' is not a valid bluetooth type.\n"
+msgid "connection type '%s' is not a valid base type"
+msgstr "कनेकà¥à¤¶à¤¨ किसà¥à¤® '%s' वैध बेस किसà¥à¤® नहीं है"
+
+#: ../libnm-core/nm-setting-connection.c:873
+#: ../libnm-util/nm-setting-connection.c:876
+#, c-format
+#| msgid "Unknown log level '%s'"
+msgid "Unknown slave type '%s'"
+msgstr "अजà¥à¤žà¤¾à¤¤ सà¥à¤²à¥‡à¤µ किसà¥à¤® '%s'"
+
+#: ../libnm-core/nm-setting-connection.c:883
+#: ../libnm-util/nm-setting-connection.c:886
+#| msgid "Shared connection service failed"
+msgid "Slave connections need a valid '"
+msgstr "सà¥à¤²à¥‡à¤µ कनेकà¥à¤¶à¤¨ के लिठवैध '"
+
+#: ../libnm-core/nm-setting-connection.c:904
+#: ../libnm-util/nm-setting-connection.c:895
+#| msgid "not saved, "
+msgid "Cannot set '"
+msgstr "सेट नहीं कर सकता '"
+
+#: ../libnm-core/nm-setting-connection.c:917
+#, c-format
+msgid "property type should be set to '%s'"
+msgstr "विशेषता किसà¥à¤® को '%s' पर सेट होना चाहिà¤"
+
+#: ../libnm-core/nm-setting-connection.c:932
+#, c-format
+#| msgid "requires presence of '%s' setting in the connection"
+msgid "slave-type '%s' requires a '%s' setting in the connection"
+msgstr "slave-type '%s' के लिठà¤à¤• '%s' सेटिंग कनेकà¥à¤¶à¤¨ में चाहिà¤"
-#: ../libnm-util/nm-setting-connection.c:815
-msgid "IPv6 configuration is not allowed for slave"
-msgstr "IPv6 विनà¥à¤¯à¤¾à¤¸ सà¥à¤²à¥‡à¤µà¤² के लिठअनà¥à¤®à¤¤à¤¿ पà¥à¤°à¤¾à¤ªà¥à¤¤ नहीं है"
+#: ../libnm-core/nm-setting-connection.c:942
+#, c-format
+#| msgid "Select the type of slave connection you wish to add."
+msgid "Detect a slave connection with '"
+msgstr "सà¥à¤²à¥‡à¤µ कनेकà¥à¤¶à¤¨ का ' के साथ चला"
-#: ../libnm-util/nm-setting-dcb.c:595
+#: ../libnm-core/nm-setting-dcb.c:540 ../libnm-util/nm-setting-dcb.c:593
msgid "flags invalid"
msgstr "पताका अवैध है"
-#: ../libnm-util/nm-setting-dcb.c:604
+#: ../libnm-core/nm-setting-dcb.c:549 ../libnm-util/nm-setting-dcb.c:602
msgid "flags invalid - disabled"
msgstr "पताका अवैध है - निषà¥à¤•à¥à¤°à¤¿à¤¯"
-#: ../libnm-util/nm-setting-dcb.c:630 ../libnm-util/nm-setting-dcb.c:679
+#: ../libnm-core/nm-setting-dcb.c:575 ../libnm-core/nm-setting-dcb.c:624
+#: ../libnm-util/nm-setting-dcb.c:628 ../libnm-util/nm-setting-dcb.c:677
msgid "property invalid (not enabled)"
msgstr "विशेषता अवैध (सकà¥à¤°à¤¿à¤¯ नहीं)"
-#: ../libnm-util/nm-setting-dcb.c:639
+#: ../libnm-core/nm-setting-dcb.c:584 ../libnm-util/nm-setting-dcb.c:637
msgid "element invalid"
msgstr "ततà¥à¤µ अवैध है"
-#: ../libnm-util/nm-setting-dcb.c:654
+#: ../libnm-core/nm-setting-dcb.c:599 ../libnm-util/nm-setting-dcb.c:652
msgid "sum not 100%"
msgstr "योग 100% नहीं"
-#: ../libnm-util/nm-setting-dcb.c:688 ../libnm-util/nm-setting-dcb.c:720
+#: ../libnm-core/nm-setting-dcb.c:633 ../libnm-core/nm-setting-dcb.c:665
+#: ../libnm-util/nm-setting-dcb.c:686 ../libnm-util/nm-setting-dcb.c:718
msgid "property invalid"
msgstr "गà¥à¤£ अवैध है"
-#: ../libnm-util/nm-setting-dcb.c:710
+#: ../libnm-core/nm-setting-dcb.c:655 ../libnm-util/nm-setting-dcb.c:708
msgid "property missing"
msgstr "गà¥à¤£ अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤ है"
-#: ../libnm-util/nm-setting-gsm.c:297
+#: ../libnm-core/nm-setting-gsm.c:254 ../libnm-util/nm-setting-gsm.c:294
#, c-format
msgid "property value '%s' is empty or too long (>64)"
msgstr "गà¥à¤£ मान '%s' रिकà¥à¤¤ है या काफी लंबा है (>64)"
-#: ../libnm-util/nm-setting-gsm.c:329
+#: ../libnm-core/nm-setting-gsm.c:286 ../libnm-util/nm-setting-gsm.c:326
#, c-format
msgid "'%s' contains invalid char(s) (use [A-Za-z._-])"
msgstr "'%s' में अवैध वरà¥à¤£ हैं (उपयोग करें [A-Za-z._-])"
-#: ../libnm-util/nm-setting-gsm.c:364
+#: ../libnm-core/nm-setting-gsm.c:321 ../libnm-util/nm-setting-gsm.c:361
#, c-format
msgid "'%s' length is invalid (should be 5 or 6 digits)"
msgstr "'%s' लंबाई अवैध है (5 या 6 अंकों का होना चाहिà¤)"
-#: ../libnm-util/nm-setting-infiniband.c:228
+#: ../libnm-core/nm-setting-infiniband.c:234
+#: ../libnm-util/nm-setting-infiniband.c:230
msgid "not a valid interface name"
msgstr "कोई वैध अंतरफलक नाम नहीं है"
-#: ../libnm-util/nm-setting-infiniband.c:236
+#: ../libnm-core/nm-setting-infiniband.c:242
+#: ../libnm-util/nm-setting-infiniband.c:238
msgid "Must specify a P_Key if specifying parent"
msgstr "à¤à¤• P_Key जरूर निरà¥à¤¦à¤¿à¤·à¥à¤Ÿ करें यदि जनक को निरà¥à¤¦à¤¿à¤·à¥à¤Ÿ कर रहा है"
-#: ../libnm-util/nm-setting-infiniband.c:246
+#: ../libnm-core/nm-setting-infiniband.c:252
+#: ../libnm-util/nm-setting-infiniband.c:248
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
+#: ../libnm-core/nm-setting-infiniband.c:288
+#: ../libnm-util/nm-setting-infiniband.c:284
+#, c-format
+msgid ""
+"interface name of software infiniband device must be '%s' or unset (instead "
+"it is '%s')"
+msgstr ""
+"सॉफ़à¥à¤Ÿà¤µà¥‡à¤¯à¤° infiniband यà¥à¤•à¥à¤¤à¤¿ का अंतरफलक नाम '%s' होना चाहिठया इसे अनसेट करें "
+"(इसके बदले यह '%s' है)"
+
+#: ../libnm-core/nm-setting-infiniband.c:303
+#, c-format
+msgid "mtu for transport mode '%s' can be at most %d but it is %d"
+msgstr "'%s' परिवहन अवसà¥à¤¥à¤¾ के लिठmtu अधिकतम %d हो सकता है लेकिन यह %d है"
+
+#: ../libnm-core/nm-setting-ip4-config.c:909
+#: ../libnm-core/nm-setting-ip6-config.c:827
+#: ../libnm-util/nm-setting-ip4-config.c:838
+#: ../libnm-util/nm-setting-ip6-config.c:819
+#, c-format
+#| msgid "this property is not allowed for '%s=%s'"
+msgid "this property cannot be empty for '%s=%s'"
+msgstr "यह विशेषता '%s=%s' के लिठरिकà¥à¤¤ नहीं हो सकता है"
+
+#: ../libnm-core/nm-setting-ip4-config.c:921
+#: ../libnm-core/nm-setting-ip4-config.c:931
+#: ../libnm-core/nm-setting-ip4-config.c:943
+#: ../libnm-core/nm-setting-ip6-config.c:840
+#: ../libnm-core/nm-setting-ip6-config.c:850
+#: ../libnm-core/nm-setting-ip6-config.c:860
+#: ../libnm-util/nm-setting-ip4-config.c:850
+#: ../libnm-util/nm-setting-ip4-config.c:860
+#: ../libnm-util/nm-setting-ip4-config.c:872
+#: ../libnm-util/nm-setting-ip6-config.c:832
+#: ../libnm-util/nm-setting-ip6-config.c:842
+#: ../libnm-util/nm-setting-ip6-config.c:852
#, c-format
msgid "this property is not allowed for '%s=%s'"
msgstr "यह गà¥à¤£ '%s=%s' के लिठअनà¥à¤®à¤¤à¤¿à¤ªà¥à¤°à¤¾à¤ªà¥à¤¤ नहीं है"
-#: ../libnm-util/nm-setting-ip4-config.c:789
+#: ../libnm-core/nm-setting-ip4-config.c:990
+#: ../libnm-util/nm-setting-ip4-config.c:916
#, c-format
msgid "%d. IPv4 address is invalid"
msgstr "%d. IPv4 पता अवैध है"
-#: ../libnm-util/nm-setting-ip4-config.c:799
+#: ../libnm-core/nm-setting-ip4-config.c:1000
+#: ../libnm-util/nm-setting-ip4-config.c:926
#, c-format
msgid "%d. IPv4 address has invalid prefix"
msgstr "%d. IPv4 पता में अवैध उपसरà¥à¤— है"
-#: ../libnm-util/nm-setting-ip4-config.c:815
+#: ../libnm-core/nm-setting-ip4-config.c:1010
+#, c-format
+#| msgid "%d. IPv4 address has invalid prefix"
+msgid "%d. IPv4 address has invalid label '%s'"
+msgstr "%d. IPv4 पता में अवैध लेबल '%s' है"
+
+#: ../libnm-core/nm-setting-ip4-config.c:1021
+#, c-format
+msgid "IPv4 address / label count mismatch (%d vs %d)"
+msgstr "IPv4 पता / लेबल गिनती बेमेल (%d vs %d)"
+
+#: ../libnm-core/nm-setting-ip4-config.c:1037
+#: ../libnm-util/nm-setting-ip4-config.c:942
#, c-format
msgid "%d. route is invalid"
msgstr "%d. रूट अवैध है"
-#: ../libnm-util/nm-setting-ip4-config.c:825
+#: ../libnm-core/nm-setting-ip4-config.c:1047
+#: ../libnm-util/nm-setting-ip4-config.c:952
#, c-format
msgid "%d. route has invalid prefix"
msgstr "%d. रूट में अवैध उपसरà¥à¤— है"
-#: ../libnm-util/nm-setting-ip6-config.c:708
+#: ../libnm-core/nm-setting-ip4-config.c:1063
+#: ../libnm-core/nm-setting-ip6-config.c:894
+#, c-format
+#| msgid "%d. IPv4 address is invalid"
+msgid "%d. DNS server address is invalid"
+msgstr "%d. डीà¤à¤¨à¤à¤¸ सरà¥à¤µà¤° पता अवैध है"
+
+#: ../libnm-core/nm-setting-ip6-config.c:839
+#: ../libnm-util/nm-setting-ip6-config.c:831
#, 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
+#: ../libnm-core/nm-setting-olpc-mesh.c:128
+#: ../libnm-core/nm-setting-wireless.c:722
+#: ../libnm-util/nm-setting-olpc-mesh.c:131
+#: ../libnm-util/nm-setting-wireless.c:759
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
+#: ../libnm-core/nm-setting-olpc-mesh.c:137
+#: ../libnm-core/nm-setting-wireless.c:762
+#: ../libnm-util/nm-setting-olpc-mesh.c:140
+#: ../libnm-util/nm-setting-wireless.c:799
#, c-format
msgid "'%d' is not a valid channel"
msgstr "'%d' वैध चैनल नहीं है"
-#: ../libnm-util/nm-setting-ppp.c:390
+#: ../libnm-core/nm-setting-ppp.c:383 ../libnm-util/nm-setting-ppp.c:387
#, c-format
msgid "'%d' is out of valid range <128-16384>"
msgstr "'%d' वैध परिसर के बाहर है <128-16384>"
-#: ../libnm-util/nm-setting-ppp.c:403
+#: ../libnm-core/nm-setting-ppp.c:396 ../libnm-util/nm-setting-ppp.c:400
#, c-format
msgid "setting this property requires non-zero '%s' property"
msgstr "इस गà¥à¤£ की सेटिंग के लिठगैर शूनà¥à¤¯ '%s' गà¥à¤£ चाहिà¤"
-#: ../libnm-util/nm-setting-vlan.c:497
+#: ../libnm-core/nm-setting-vlan.c:528 ../libnm-util/nm-setting-vlan.c:554
#, c-format
msgid "'%s' value doesn't match '%s=%s'"
msgstr "'%s' मान '%s=%s' से मेल नहीं खाता है"
-#: ../libnm-util/nm-setting-vlan.c:508
+#: ../libnm-core/nm-setting-vlan.c:539 ../libnm-util/nm-setting-vlan.c:565
#, c-format
msgid "'%s' is neither an UUID nor an interface name"
msgstr "'%s' न ही UUID है न हीं à¤à¤• अंतरफलक नाम"
-#: ../libnm-util/nm-setting-vlan.c:521
+#: ../libnm-core/nm-setting-vlan.c:553 ../libnm-util/nm-setting-vlan.c:578
#, c-format
msgid "property is not specified and neither is '%s:%s'"
msgstr "गà¥à¤£ निरà¥à¤¦à¤¿à¤·à¥à¤Ÿ नहीं है और न ही '%s:%s'"
-#: ../libnm-util/nm-setting-vlan.c:534
+#: ../libnm-core/nm-setting-vlan.c:566 ../libnm-util/nm-setting-vlan.c:591
msgid "flags are invalid"
msgstr "पताका अवैध है"
-#: ../libnm-util/nm-setting-wired.c:562
+#: ../libnm-core/nm-setting-wired.c:593 ../libnm-util/nm-setting-wired.c:615
#, c-format
-msgid "'%s' is not a valid ethernet port value"
+#| msgid "'%s' is not a valid ethernet port value"
+msgid "'%s' is not a valid Ethernet port value"
msgstr "'%s' à¤à¤• वैध इथरनेट पोरà¥à¤Ÿ मान नहीं है"
-#: ../libnm-util/nm-setting-wired.c:572
+#: ../libnm-core/nm-setting-wired.c:603 ../libnm-util/nm-setting-wired.c:625
#, 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
+#: ../libnm-core/nm-setting-wired.c:661 ../libnm-util/nm-setting-wired.c:682
#, c-format
msgid "invalid '%s' or its value '%s'"
msgstr "अवैध '%s' या इसका मान '%s'"
-#: ../libnm-util/nm-setting-wireless-security.c:816
+#: ../libnm-core/nm-setting-wireless-security.c:899
+#: ../libnm-util/nm-setting-wireless-security.c:912
#, c-format
msgid "'%s' security requires '%s=%s'"
msgstr "'%s' सà¥à¤°à¤•à¥à¤·à¤¾ के लिठ'%s=%s' चाहिà¤"
-#: ../libnm-util/nm-setting-wireless-security.c:845
+#: ../libnm-core/nm-setting-wireless-security.c:928
+#: ../libnm-util/nm-setting-wireless-security.c:941
#, c-format
msgid "'%s' security requires '%s' setting presence"
msgstr "'%s' सà¥à¤°à¤•à¥à¤·à¤¾ के लिठ'%s' सेटिंग उपसà¥à¤¥à¤¿à¤¤à¤¿ चाहिà¤"
-#: ../libnm-util/nm-setting-wireless-security.c:866
+#: ../libnm-core/nm-setting-wireless-security.c:949
+#: ../libnm-util/nm-setting-wireless-security.c:962
#, c-format
msgid "'%d' value is out of range <0-3>"
msgstr "'%d' मान परिसर से बाहर है <0-3>"
-#: ../libnm-util/nm-setting-wireless-security.c:963
+#: ../libnm-core/nm-setting-wireless-security.c:1046
+#: ../libnm-util/nm-setting-wireless-security.c:1059
#, c-format
msgid "'%s' connections require '%s' in this property"
msgstr "'%s' कनेकà¥à¤¶à¤¨ के लिठइस गà¥à¤£ में चाहिठ'%s'"
-#: ../libnm-util/nm-setting-wireless-security.c:993
+#: ../libnm-core/nm-setting-wireless-security.c:1076
+#: ../libnm-util/nm-setting-wireless-security.c:1089
#, c-format
msgid "'%s' can only be used with '%s=%s' (WEP)"
msgstr "'%s' को '%s=%s' (WEP) के साथ केवल पà¥à¤°à¤¯à¥‹à¤— किया जा सकता है"
-#: ../libnm-util/nm-setting-wireless.c:715
+#: ../libnm-core/nm-setting-wireless.c:731
+#: ../libnm-util/nm-setting-wireless.c:768
#, c-format
msgid "'%s' is not a valid Wi-Fi mode"
msgstr "'%s' à¤à¤• वैध Wi-Fi अवसà¥à¤¥à¤¾ नहीं चाहिà¤"
-#: ../libnm-util/nm-setting-wireless.c:725
+#: ../libnm-core/nm-setting-wireless.c:741
+#: ../libnm-util/nm-setting-wireless.c:778
#, c-format
msgid "'%s' is not a valid band"
msgstr "'%s' à¤à¤• वैध बांड नहीं है"
-#: ../libnm-util/nm-setting-wireless.c:735
+#: ../libnm-core/nm-setting-wireless.c:751
+#: ../libnm-util/nm-setting-wireless.c:788
#, c-format
msgid "requires setting '%s' property"
msgstr "सेटिंग '%s' गà¥à¤£ चाहिà¤"
+#: ../libnm-core/nm-setting.c:1681
+#, c-format
+#| msgid "requires '%s' or '%s' setting"
+msgid "Missing '%s' setting"
+msgstr "%s' सेटिंग अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤"
+
+#: ../libnm-glib/nm-device.c:1792
+msgid "Bluetooth"
+msgstr "बà¥à¤²à¥‚टूथ"
+
+#: ../libnm-glib/nm-device.c:1810
+msgid "ADSL"
+msgstr "ADSL"
+
+#: ../libnm-glib/nm-device.c:1838
+msgid "Wired"
+msgstr "तारसहित"
+
+#: ../libnm-glib/nm-device.c:1869
+msgid "PCI"
+msgstr "पीसीआई"
+
+#: ../libnm-glib/nm-device.c:1871
+msgid "USB"
+msgstr "यूà¤à¤¸à¤¬à¥€"
+
+#. 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:1967 ../libnm-glib/nm-device.c:1986
+#, c-format
+msgctxt "long device name"
+msgid "%s %s"
+msgstr "%s %s"
+
+#: ../libnm-glib/nm-remote-connection.c:149
+#: ../libnm/nm-remote-connection.c:112
+#| msgid "disconnected"
+msgid "Disconnected by D-Bus"
+msgstr "डिबस से डिसकनेकà¥à¤Ÿà¥‡à¤¡"
+
+#: ../libnm/nm-object.c:148
+msgid "Caller did not specify D-Bus path for object"
+msgstr "कॉलर ने D-Bus पथ को वसà¥à¤¤à¥ के लिठनिरà¥à¤¦à¤¿à¤·à¥à¤Ÿ नहीं किया"
+
+#: ../libnm/nm-vpn-plugin.c:750
+#| msgid "Error: No interface specified."
+msgid "No service name specified"
+msgstr "कोई सेवा नाम उलà¥à¤²à¥‡à¤–ित नहीं है"
+
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:1
msgid "Enable or disable system networking"
msgstr "तंतà¥à¤° संजालन सकà¥à¤°à¤¿à¤¯ या निषà¥à¤•à¥à¤°à¤¿à¤¯ करें"
@@ -5433,13 +7321,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"
@@ -5466,8 +7354,7 @@ 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"
@@ -5519,6 +7406,28 @@ msgstr "सà¥à¤¥à¤¿à¤° सिसà¥à¤Ÿà¤® होसà¥à¤Ÿà¤¨à¥‡à¤® को सà¥
msgid "System policy prevents modification of the persistent system hostname"
msgstr "सिसà¥à¤Ÿà¤® नीति सà¥à¤¥à¤¿à¤° सिसà¥à¤Ÿà¤® होसà¥à¤Ÿà¤¨à¥‡à¤® के रूपांतरण को रोकता है."
+#. Translators: the first %s is a prefix for the connection id, such
+#. * as "Wired Connection" or "VPN Connection". The %d is a number
+#. * that is combined with the first argument to create a unique
+#. * connection id.
+#: ../src/NetworkManagerUtils.c:952
+#, c-format
+#| msgctxt "long device name"
+#| msgid "%s %s"
+msgctxt "connection id fallback"
+msgid "%s %d"
+msgstr "%s %d"
+
+#: ../src/main.c:130
+#, c-format
+msgid "Failed to set signal mask: %d"
+msgstr "संकेत मà¥à¤–ौटा सेट करने में विफल: %d"
+
+#: ../src/main.c:139
+#, c-format
+msgid "Failed to create signal handling thread: %d"
+msgstr "संकेत से निपटने मà¥à¤¦à¥à¤¦à¤¾ बनाने में विफल: %d"
+
#: ../src/main.c:154
#, c-format
msgid "Opening %s failed: %s\n"
@@ -5539,59 +7448,59 @@ msgstr "समापन %s में विफल रहा है: %s\n"
msgid "NetworkManager is already running (pid %ld)\n"
msgstr "नेटवरà¥à¤•à¤ªà¥à¤°à¤¬à¤‚धक पहले से ही चल रहा है (pid %ld)\n"
-#: ../src/main.c:329
+#: ../src/main.c:361
msgid "Print NetworkManager version and exit"
msgstr "छापें नेटवरà¥à¤•à¤ªà¥à¤°à¤¬à¤‚धक संसà¥à¤•à¤°à¤£ और बाहर निकलें"
-#: ../src/main.c:330
+#: ../src/main.c:362
msgid "Don't become a daemon"
msgstr "डेमॉन न होयें"
-#: ../src/main.c:331
+#: ../src/main.c:363
msgid "Don't become a daemon, and log to stderr"
msgstr "कोई डेमान मत बनाà¤à¤, और stderr में लॉग करें"
-#: ../src/main.c:332
+#: ../src/main.c:364
#, c-format
msgid "Log level: one of [%s]"
msgstr "लॉग सà¥à¤¤à¤°: [%s] में से à¤à¤•"
-#: ../src/main.c:334
+#: ../src/main.c:366
#, c-format
msgid "Log domains separated by ',': any combination of [%s]"
msgstr "लॉग डोमेन ',' से अलग: [%s] का कोई संयोग"
-#: ../src/main.c:336
+#: ../src/main.c:368
msgid "Make all warnings fatal"
msgstr "सभी चेतावनी गंभीर बनाà¤à¤"
-#: ../src/main.c:337
+#: ../src/main.c:369
msgid "Specify the location of a PID file"
msgstr "à¤à¤• पीआईडी ​​फ़ाइल का सà¥à¤¥à¤¾à¤¨ निरà¥à¤¦à¤¿à¤·à¥à¤Ÿ करें"
-#: ../src/main.c:337
+#: ../src/main.c:369
msgid "filename"
msgstr "फाइलनाम"
-#: ../src/main.c:338
+#: ../src/main.c:370
msgid "State file location"
msgstr " फ़ाइल सà¥à¤¥à¤¾à¤¨ की सà¥à¤¥à¤¿à¤¤à¤¿"
-#: ../src/main.c:338
+#: ../src/main.c:370
msgid "/path/to/state.file"
msgstr "/path/to/state.file"
-#: ../src/main.c:364
+#: ../src/main.c:396
#, c-format
msgid "GModules are not supported on your platform!\n"
msgstr "GModules आपके पà¥à¤²à¥‡à¤Ÿà¤«à¤¼à¤¾à¤°à¥à¤® पर समरà¥à¤¥à¤¿à¤¤ नहीं हैं!\n"
-#: ../src/main.c:369
+#: ../src/main.c:401
#, c-format
msgid "You must be root to run NetworkManager!\n"
msgstr " नेटवरà¥à¤•à¤ªà¥à¤°à¤¬à¤‚धक! चलाने के लिठआपको रूट होना होगा\n"
-#: ../src/main.c:392
+#: ../src/main.c:424
msgid ""
"NetworkManager monitors all network connections and automatically\n"
"chooses the best connection to use. It also allows the user to\n"
@@ -5603,51 +7512,41 @@ msgstr ""
" चà¥à¤¨à¤¤à¤¾ है. यह भी उपयोगकरà¥à¤¤à¤¾ बेतार पहà¥à¤à¤š बिंदॠहै जो कंपà¥à¤¯à¥‚टर में वायरलेस \n"
" कारà¥à¤¡ के साथ संबदà¥à¤§ करना चाहिठनिरà¥à¤¦à¤¿à¤·à¥à¤Ÿ करने की अनà¥à¤®à¤¤à¤¿ देता है."
-#: ../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:412
+#: ../src/main.c:430 ../src/main.c:446
#, c-format
msgid "%s. Please use --help to see a list of valid options.\n"
msgstr "%s. कृपया --help का उपयोग वैध विकलà¥à¤ª देने के लिठकरें.\n"
-#: ../src/main.c:417
+#: ../src/main.c:451
#, c-format
msgid "Ignoring unrecognized log domain(s) '%s' passed on command line.\n"
msgstr "अपरिचित लॉग डोमेन '%s' कमांड लाइन पर पास किया गया.\n"
-#: ../src/main.c:468
+#: ../src/main.c:502
#, c-format
msgid "Failed to read configuration: (%d) %s\n"
msgstr "विनà¥à¤¯à¤¾à¤¸ को पढ़ने में असफ़ल: (%d) %s\n"
-#: ../src/main.c:482
+#: ../src/main.c:516
#, c-format
msgid "Error in configuration file: %s.\n"
msgstr "विनà¥à¤¯à¤¾à¤¸ फ़ाइल में तà¥à¤°à¥à¤Ÿà¤¿: %s.\n"
-#: ../src/main.c:487
+#: ../src/main.c:521
#, c-format
msgid "Ignoring unrecognized log domain(s) '%s' from config files.\n"
msgstr "अपरिचित लॉग डोमेन '%s' को कॉनà¥à¤«à¤¿à¤— फ़ाइल से अनदेखा किया.\n"
-#: ../src/main.c:495
+#: ../src/main.c:529
#, c-format
msgid "State file %s parsing failed: (%d) %s\n"
msgstr "सà¥à¤Ÿà¥‡à¤Ÿ %s फ़ाइल पारà¥à¤¸ करने में विफल: (%d) %s\n"
-#: ../src/main.c:508
+#: ../src/main.c:542
#, c-format
msgid "Could not daemonize: %s [error %u]\n"
msgstr "daemonize नहीं कर सका: %s [error %u]\n"
-#: ../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"
@@ -5661,1002 +7560,460 @@ msgstr ""
"#%s से मिलाया गया\n"
"\n"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:313
+#: ../src/dhcp-manager/nm-dhcp-manager.c:302
msgid "no usable DHCP client could be found."
msgstr "कोई पà¥à¤°à¤¯à¥‹à¤œà¥à¤¯ DHCP कà¥à¤²à¤¾à¤‡à¤‚ट नहीं मिला."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:322
-msgid "'dhclient' could be found."
-msgstr "'dhclient' नहीं मिल सका."
+#: ../src/dhcp-manager/nm-dhcp-manager.c:311
+#| msgid "'dhclient' could be found."
+msgid "'dhclient' could not be found or was disabled."
+msgstr "'dhclient' नहीं मिल सका या निषà¥à¤•à¥à¤°à¤¿à¤¯ हो गया."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:332
-msgid "'dhcpcd' could be found."
-msgstr "'dhcpcd' नहीं मिल सका."
+#: ../src/dhcp-manager/nm-dhcp-manager.c:321
+#| msgid "'dhcpcd' could be found."
+msgid "'dhcpcd' could not be found or was disabled."
+msgstr "'dhcpcd' नहीं मिल सका या निषà¥à¤•à¥à¤°à¤¿à¤¯ हो गया."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:340
+#: ../src/dhcp-manager/nm-dhcp-manager.c:329
#, c-format
msgid "unsupported DHCP client '%s'"
msgstr "असमरà¥à¤¥à¤¿à¤¤ DHCP कà¥à¤²à¤¾à¤‡à¤‚ट '%s'"
-#: ../src/dns-manager/nm-dns-manager.c:401
+#: ../src/dns-manager/nm-dns-manager.c:374
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr "नोट: libc समाधानकरà¥à¤¤à¤¾ 3 नेमसरà¥à¤µà¤° से अधिक का समरà¥à¤¥à¤¨ नहीं कर सकता है."
-#: ../src/dns-manager/nm-dns-manager.c:403
+#: ../src/dns-manager/nm-dns-manager.c:376
msgid "The nameservers listed below may not be recognized."
msgstr "नीचे सूची में दिया गया नेमसरà¥à¤µà¤° पहचाना नहीं जा सकता है."
-#: ../src/logging/nm-logging.c:149
+#: ../src/devices/adsl/nm-device-adsl.c:127
+#| msgid "ADSL connection %d"
+msgid "ADSL connection"
+msgstr "ADSL कनेकà¥à¤¶à¤¨"
+
+#: ../src/devices/bluetooth/nm-bluez-device.c:190
#, c-format
-msgid "Unknown log level '%s'"
-msgstr "अजà¥à¤žà¤¾à¤¤ लॉग सà¥à¤¤à¤° '%s'"
+msgid "%s Network"
+msgstr "%s संजाल"
-#: ../src/logging/nm-logging.c:226
+#: ../src/devices/bluetooth/nm-device-bt.c:274
+#| msgid "PAN connection %d"
+msgid "PAN connection"
+msgstr "PAN कनेकà¥à¤¶à¤¨"
+
+#: ../src/devices/bluetooth/nm-device-bt.c:299
+#: ../src/devices/wwan/nm-modem-broadband.c:483
+#| msgid "GSM connection %d"
+msgid "GSM connection"
+msgstr "GSM कनेकà¥à¤¶à¤¨"
+
+#: ../src/devices/bluetooth/nm-device-bt.c:303
+#: ../src/devices/wwan/nm-modem-broadband.c:506
+#| msgid "CDMA connection %d"
+msgid "CDMA connection"
+msgstr "CDMA कनेकà¥à¤¶à¤¨"
+
+#: ../src/devices/bluetooth/nm-device-bt.c:307
+#| msgid "DUN connection %d"
+msgid "DUN connection"
+msgstr "DUN कनेकà¥à¤¶à¤¨"
+
+#: ../src/devices/nm-device-bond.c:137
+#| msgid "Bond connection %d"
+msgid "Bond connection"
+msgstr "बॉणà¥à¤¡ कनेकà¥à¤¶à¤¨"
+
+#: ../src/devices/nm-device-bridge.c:144
+#| msgid "Bridge connection %d"
+msgid "Bridge connection"
+msgstr "बà¥à¤°à¤¿à¤œ कनेकà¥à¤¶à¤¨"
+
+#: ../src/devices/nm-device-ethernet.c:1437
+#| msgid "PPPoE connection %d"
+msgid "PPPoE connection"
+msgstr "PPPoE कनेकà¥à¤¶à¤¨"
+
+#: ../src/devices/nm-device-ethernet.c:1437
+#| msgid "Wired connection %d"
+msgid "Wired connection"
+msgstr "तारयà¥à¤•à¥à¤¤ संबंधन"
+
+#: ../src/devices/nm-device-ethernet-utils.c:38
#, c-format
-msgid "Unknown log domain '%s'"
-msgstr "अजà¥à¤žà¤¾à¤¤ लॉग डोमेन '%s'"
+msgid "Wired connection %d"
+msgstr "तारयà¥à¤•à¥à¤¤ संबंधन %d"
+
+#: ../src/devices/nm-device-infiniband.c:189
+#| msgid "InfiniBand connection %d"
+msgid "InfiniBand connection"
+msgstr "InfiniBandकनेकà¥à¤¶à¤¨"
+
+#: ../src/devices/nm-device-vlan.c:229
+#| msgid "VLAN connection %d"
+msgid "VLAN connection"
+msgstr "VLAN कनेकà¥à¤¶à¤¨"
-#: ../src/config/nm-config.c:271
+#: ../src/devices/team/nm-device-team.c:147
+#| msgid "Team connection %d"
+msgid "Team connection"
+msgstr "टीम कनेकà¥à¤¶à¤¨"
+
+#: ../src/devices/wifi/nm-device-olpc-mesh.c:163
+#| msgid "Mesh %d"
+msgid "Mesh"
+msgstr "मेश"
+
+#: ../src/nm-config.c:303
msgid "Config file location"
msgstr "Config फाइल सà¥à¤¥à¤¾à¤¨"
-#: ../src/config/nm-config.c:271
+#: ../src/nm-config.c:303
msgid "/path/to/config.file"
msgstr "/path/to/config.file"
-#: ../src/config/nm-config.c:272
+#: ../src/nm-config.c:304
msgid "Config directory location"
msgstr "Config निरà¥à¤¦à¥‡à¤¶à¤¿à¤•à¤¾ सà¥à¤¥à¤¾à¤¨"
-#: ../src/config/nm-config.c:272
+#: ../src/nm-config.c:304
msgid "/path/to/config/dir"
msgstr "/path/to/config/dir"
-#: ../src/config/nm-config.c:274
+#: ../src/nm-config.c:306
msgid "List of plugins separated by ','"
msgstr "',' के दà¥à¤µà¤¾à¤°à¤¾ अलग पà¥à¤²à¤—िन की सूची "
-#: ../src/config/nm-config.c:274
+#: ../src/nm-config.c:306
msgid "plugin1,plugin2"
msgstr "पà¥à¤²à¤—इन 1,पà¥à¤²à¤—इन2"
-#: ../src/config/nm-config.c:277
+#. These three are hidden for now, and should eventually just go away.
+#: ../src/nm-config.c:309
msgid "An http(s) address for checking internet connectivity"
msgstr "इंटरनेट कनेकà¥à¤Ÿà¤¿à¤µà¤¿à¤Ÿà¥€ की जाà¤à¤š के लिठà¤à¤• HTTP पता (ओं)"
-#: ../src/config/nm-config.c:278
+#: ../src/nm-config.c:310
msgid "The interval between connectivity checks (in seconds)"
msgstr "संयोजकता जांचों के बीच अंतराल (सेकंड में)"
-#: ../src/config/nm-config.c:279
+#: ../src/nm-config.c:311
msgid "The expected start of the response"
msgstr "पà¥à¤°à¤¤à¤¿à¤•à¥à¤°à¤¿à¤¯à¤¾ की अपेकà¥à¤·à¤¿à¤¤ शà¥à¤°à¥à¤†à¤¤"
-#: ../src/config/nm-config.c:279
+#: ../src/nm-config.c:311
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/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/devices/nm-device-adsl.c:150
-#, c-format
-msgid "ADSL connection %d"
-msgstr "ADSL कनेकà¥à¤¶à¤¨ %d"
-
-#: ../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/devices/nm-device-bt.c:341
-#, c-format
-msgid "DUN connection %d"
-msgstr "DUN कनेकà¥à¤¶à¤¨ %d"
-
-#: ../src/devices/nm-device-ethernet.c:1254
-#, c-format
-msgid "PPPoE connection %d"
-msgstr "PPPoE कनेकà¥à¤¶à¤¨ %d"
-
-#: ../src/devices/nm-device-ethernet.c:1254
-#: ../src/settings/nm-settings-utils.c:50
-#, c-format
-msgid "Wired connection %d"
-msgstr "तारयà¥à¤•à¥à¤¤ संबंधन %d"
-
-#: ../src/devices/nm-device-infiniband.c:270 ../tui/nm-editor-utils.c:177
-#, c-format
-msgid "InfiniBand connection %d"
-msgstr "InfiniBandकनेकà¥à¤¶à¤¨ %d"
-
-#: ../src/devices/nm-device-olpc-mesh.c:242
-#, c-format
-msgid "Mesh %d"
-msgstr "मेश %d"
-
-#: ../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:3420 ../tui/nm-editor-utils.c:246
-#, c-format
-msgid "VPN connection %d"
-msgstr "VPN संबंधन %d"
-
-#: ../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:264
-#, c-format
-msgid "unable to connect to netlink for monitoring link status: %s"
-msgstr "नेटलिंक को मॉनिटरिंग लिंक सà¥à¤¥à¤¿à¤¤à¤¿ के लिठकनेकà¥à¤Ÿ करने में असमरà¥à¤¥: %s"
-
-#: ../src/nm-netlink-monitor.c:275
+#: ../src/nm-logging.c:159
#, c-format
-msgid "unable to enable netlink handle credential passing: %s"
-msgstr "नेटलिंक नियंतà¥à¤°à¤£ शà¥à¤°à¥‡à¤¯ पासिंग सकà¥à¤°à¤¿à¤¯ करने में असमरà¥à¤¥: %s"
+msgid "Unknown log level '%s'"
+msgstr "अजà¥à¤žà¤¾à¤¤ लॉग सà¥à¤¤à¤° '%s'"
-#: ../src/nm-netlink-monitor.c:319 ../src/nm-netlink-monitor.c:381
+#: ../src/nm-logging.c:241
#, c-format
-msgid "unable to allocate netlink handle for monitoring link status: %s"
-msgstr ""
-"लिंक सà¥à¤¥à¤¿à¤¤à¤¿ मॉनिटर करने के लिठनेटलिंक नियंतà¥à¤°à¤£ का आबंटित नहीं कर सका: %s"
+msgid "Unknown log domain '%s'"
+msgstr "अजà¥à¤žà¤¾à¤¤ लॉग डोमेन '%s'"
-#: ../src/nm-netlink-monitor.c:469
-#, c-format
-msgid "unable to join netlink group: %s"
-msgstr "नेटलिंक समूह में शामिल होने में असमरà¥à¤¥: %s"
+#: ../src/nm-manager.c:3334
+#| msgid "VPN connecting"
+msgid "VPN connection"
+msgstr "VPN कनेकà¥à¤¶à¤¨"
-#: ../src/nm-sleep-monitor-systemd.c:116
+#: ../src/nm-sleep-monitor-systemd.c:114
msgid "NetworkManager needs to turn off networks"
msgstr "NetworkManager को संजाल को बंद करने की जरूरत है"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:115
-msgid "System"
-msgstr "तंतà¥à¤°"
-
-#: ../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: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
+#: ../src/settings/plugins/ibft/plugin.c:67
#, c-format
-msgid "\rConnecting"
-msgstr "\rजà¥à¤¡à¤¼ रहा है"
-
-#: ../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: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:124
-msgid ""
-"Waits for NetworkManager to finish activating startup network connections."
-msgstr ""
-"NetworkManager के लिठपà¥à¤°à¤¤à¥€à¤•à¥à¤·à¤¾ करें संजाल करनेकà¥à¤¶à¤¨ के आरंभन के लिठसकà¥à¤°à¤¿à¤¯ "
-"करने के लिà¤."
-
-#: ../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 "ठीक"
+msgid "ibft: failed to read iscsiadm records: %s"
+msgstr "ibft: iscsiadm रिकारà¥à¤¡ पढ़ने में विफल: %s"
-#: ../tui/newt/nmt-newt-utils.c:316 ../tui/newt/nmt-newt-utils.c:348
+#: ../src/settings/plugins/ibft/plugin.c:75
#, 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"
+#| msgid "Wired connection %d"
+msgid "ibft: read connection '%s'"
+msgstr "ibft: पठन कनेकà¥à¤¶à¤¨ '%s'"
-#: ../tui/nm-editor-utils.c:160
+#: ../src/settings/plugins/ibft/plugin.c:81
#, c-format
-msgid "Ethernet connection %d"
-msgstr "तारयà¥à¤•à¥à¤¤ संबंधन %d "
+msgid "ibft: failed to read iscsiadm record: %s"
+msgstr "ibft: iscsiadm रिकारà¥à¤¡ पढ़ने में विफल: %s"
-#: ../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)"
-
-#: ../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 "सकà¥à¤°à¤¿à¤¯ करें à¤à¤¸à¤Ÿà¥€à¤ªà¥€ (सà¥à¤ªà¥ˆà¤¨à¤¿à¤‚ग टà¥à¤°à¥€ पà¥à¤°à¥‹à¤Ÿà¥‹à¤•à¥‰à¤²)"
-
-#: ../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 "दिखाà¤à¤"
-
-#: ../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 "मेटà¥à¤°à¤¿à¤•"
-
-#: ../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 "बेतार संजाल के दà¥à¤µà¤¾à¤°à¤¾ सतà¥à¤¯à¤¾à¤ªà¤¨ जरूरी"
+#: ../src/settings/plugins/ifcfg-rh/reader.c:112
+msgid "System"
+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 "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 ""
+#~ "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 ""
+#~ "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"
+
+#~ msgid "Error: 'list configured': %s"
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'list configured': %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 ""
+#~ "Error: Device '%s' is waiting for slaves before proceeding with "
+#~ "activation."
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¤¿: यà¥à¤•à¥à¤¤à¤¿ '%s' सà¥à¤²à¥‡à¤µ के लिठपà¥à¤°à¤¤à¥€à¤•à¥à¤·à¤¾à¤°à¤¤ है सकà¥à¤°à¤¿à¤¯à¤¨ से आगे बढ़ने के पहले."
+
+#~ msgid "There are 3 optional arguments for '%s' connection type.\n"
+#~ msgstr "3 वैकलà¥à¤ªà¤¿à¤• वितरà¥à¤• हैं '%s' कनेकà¥à¤¶à¤¨ पà¥à¤°à¤•à¤¾à¤° के लिà¤.\n"
+
+#~ msgid "Do you want to provide them? (yes/no) [yes] "
+#~ msgstr "कà¥à¤¯à¤¾ आप उनà¥à¤¹à¥‡à¤‚ पà¥à¤°à¤¦à¤¾à¤¨ करना चाहते हैं? (हाà¤/नहीं) [हाà¤] "
+
+#~ msgid "There are 5 optional arguments for 'InfiniBand' connection type.\n"
+#~ msgstr "5 वैकलà¥à¤ªà¤¿à¤• वितरà¥à¤• हैं 'InfiniBand' कनेकà¥à¤¶à¤¨ पà¥à¤°à¤•à¤¾à¤° के लिà¤.\n"
+
+#~ msgid "Transport mode (datagram or connected) [datagram]: "
+#~ msgstr "परिवहन विधि (डेटागà¥à¤°à¤¾à¤® या कनेकà¥à¤Ÿà¥‡à¤¡) [datagram]: "
+
+#~ msgid "There is 1 optional argument for 'WiMax' connection type.\n"
+#~ msgstr "1 वैकलà¥à¤ªà¤¿à¤• वितरà¥à¤• हैं 'WiMax' कनेकà¥à¤¶à¤¨ पà¥à¤°à¤•à¤¾à¤° के लिà¤.\n"
+
+#~ msgid "There are 4 optional arguments for 'PPPoE' connection type.\n"
+#~ msgstr "4 वैकलà¥à¤ªà¤¿à¤• वितरà¥à¤• हैं 'PPPoE' कनेकà¥à¤¶à¤¨ पà¥à¤°à¤•à¤¾à¤° के लिà¤.\n"
+
+#~ msgid ""
+#~ "There are 2 optional arguments for 'mobile broadband' connection type.\n"
+#~ msgstr "2 वैकलà¥à¤ªà¤¿à¤• वितरà¥à¤• हैं 'मोबाइल बà¥à¤°à¤¾à¤¡à¤¬à¥ˆà¤‚ड' कनेकà¥à¤¶à¤¨ पà¥à¤°à¤•à¤¾à¤° के लिà¤.\n"
+
+#~ msgid "There is 1 optional argument for 'bluetooth' connection type.\n"
+#~ msgstr "1 वैकलà¥à¤ªà¤¿à¤• वितरà¥à¤• हैं 'बà¥à¤²à¥‚टूथ' कनेकà¥à¤¶à¤¨ पà¥à¤°à¤•à¤¾à¤° के लिà¤.\n"
+
+#~ msgid "Bluetooth type (panu, dun-gsm or dun-cdma) [panu]: "
+#~ msgstr "बà¥à¤²à¥‚टूथ किसà¥à¤® (panu, dun-gsm or dun-cdma) [panu]: "
+
+#~ msgid "There are 4 optional arguments for 'VLAN' connection type.\n"
+#~ msgstr "4 वैकलà¥à¤ªà¤¿à¤• वितरà¥à¤• हैं 'वीलैन' कनेकà¥à¤¶à¤¨ पà¥à¤°à¤•à¤¾à¤° के लिà¤.\n"
+
+#~ msgid "There are optional arguments for 'bond' connection type.\n"
+#~ msgstr "वैकलà¥à¤ªà¤¿à¤• वितरà¥à¤• हैं 'बांड' कनेकà¥à¤¶à¤¨ पà¥à¤°à¤•à¤¾à¤° के लिà¤.\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 "6 वैकलà¥à¤ªà¤¿à¤• वितरà¥à¤• हैं 'बà¥à¤°à¤¿à¤œ' कनेकà¥à¤¶à¤¨ पà¥à¤°à¤•à¤¾à¤° के लिà¤.\n"
+
+#~ msgid "Error: 'stp': '%s'.\n"
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'stp': '%s'.\n"
+
+#~ msgid "There are 3 optional arguments for 'bridge-slave' connection type.\n"
+#~ msgstr "3 वैकलà¥à¤ªà¤¿à¤• वितरà¥à¤• हैं 'बà¥à¤°à¤¿à¤œ-सà¥à¤²à¥‡à¤µ' कनेकà¥à¤¶à¤¨ पà¥à¤°à¤•à¤¾à¤° के लिà¤.\n"
+
+#~ msgid "Hairpin (yes/no) [yes]: "
+#~ msgstr "हेयरपिन (yes/no) [yes]: "
-#: ../tui/nmt-secret-agent.c:349
-msgid "Wired 802.1X authentication"
-msgstr "तारयà¥à¤•à¥à¤¤ 802.1X सतà¥à¤¯à¤¾à¤ªà¤¨"
+#~ msgid "Error: 'hairpin': '%s'.\n"
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'hairpin': '%s'.\n"
-#: ../tui/nmt-secret-agent.c:352
-msgid "Network name"
-msgstr "संजाल नाम"
+#~ msgid "There is 1 optional argument for 'VPN' connection type.\n"
+#~ msgstr "1 वैकलà¥à¤ªà¤¿à¤• वितरà¥à¤• हैं 'वीपीà¤à¤¨' कनेकà¥à¤¶à¤¨ पà¥à¤°à¤•à¤¾à¤° के लिà¤.\n"
-#: ../tui/nmt-secret-agent.c:359
-msgid "DSL authentication"
-msgstr "डीà¤à¤¸à¤à¤² सतà¥à¤¯à¤¾à¤ªà¤¨"
+#~ msgid "There are 2 optional arguments for 'OLPC Mesh' connection type.\n"
+#~ msgstr "2 वैकलà¥à¤ªà¤¿à¤• वितरà¥à¤• हैं 'ओà¤à¤²à¤ªà¥€à¤¸à¥€ मेश' कनेकà¥à¤¶à¤¨ पà¥à¤°à¤•à¤¾à¤° के लिà¤.\n"
-#: ../tui/nmt-secret-agent.c:367
-msgid "PIN code required"
-msgstr "पिन कोड जरूरी"
+#~ msgid "Error: 'master': '%s' is not valid UUID nor interface."
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'master': '%s' वैध UUID नहीं है न ही अंतरफलक है."
-#: ../tui/nmt-secret-agent.c:368
-msgid "PIN code is needed for the mobile broadband device"
-msgstr "पिन कोड मोबाइल बà¥à¤°à¥‰à¤¡à¤¬à¥ˆà¤‚ड यà¥à¤•à¥à¤¤à¤¿ के लिठजरूरी है"
+#~ 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"
-#: ../tui/nmt-secret-agent.c:370
-msgid "PIN"
-msgstr "पिन"
+#~ 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"
-#: ../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 "Error: '%s' setting not present\n"
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¤¿: '%s' सेटिंग उपसà¥à¤¥à¤¿à¤¤ नहीं है\n"
-#: ../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 ""
+#~ ">>> 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"
-#: ../tui/nmt-slave-list.c:138
-msgid "Select the type of slave connection you wish to add."
-msgstr "सà¥à¤²à¥‡à¤µ कनेकà¥à¤¶à¤¨ के पà¥à¤°à¤•à¤¾à¤° चà¥à¤¨à¥‡à¤‚ जिसे आप जोड़ना चाहते हैं."
+#~ msgid ""
+#~ "Error: 'configured' or 'active' command is expected for 'connection show'."
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¤¿: 'विनà¥à¤¯à¤¸à¥à¤¤' या 'सकà¥à¤°à¤¿à¤¯' कमांड 'कनेकà¥à¤¶à¤¨ पà¥à¤°à¤¦à¤°à¥à¤¶à¤¨' के लिठपà¥à¤°à¤¤à¥à¤¯à¤¾à¤¶à¤¿à¤¤ है."
-#: ../tui/nmt-widget-list.c:142
-msgid "Add..."
-msgstr "जोड़ें..."
+#~ msgid "0 (unknown)"
+#~ msgstr "0 (अजà¥à¤žà¤¾à¤¤)"
-#: ../tui/nmt-widget-list.c:205
-msgid "Remove"
-msgstr "हटाà¤à¤"
+#~ msgid "any, "
+#~ msgstr "कोई, "
-#: ../tui/nmtui-connect.c:82
-msgid "Activation failed"
-msgstr "सकà¥à¤°à¤¿à¤¯à¤•à¤°à¤£ विफल"
+#~ msgid "900 MHz, "
+#~ msgstr "900 MHz, "
-#: ../tui/nmtui-connect.c:134
-msgid "Connecting..."
-msgstr "जà¥à¤¡à¤¼ रहा है..."
+#~ msgid "1800 MHz, "
+#~ msgstr "1800 MHz, "
-#: ../tui/nmtui-connect.c:159
-#, c-format
-msgid "Could not activate connection: %s"
-msgstr "कनेकà¥à¤¶à¤¨ सकà¥à¤°à¤¿à¤¯ नहीं कर सका: %s"
+#~ msgid "1900 MHz, "
+#~ msgstr "1900 MHz, "
-#: ../tui/nmtui-connect.c:218 ../tui/nmtui-connect.c:274
-msgid "Activate"
-msgstr "सकà¥à¤°à¤¿à¤¯ करें"
+#~ msgid "850 MHz, "
+#~ msgstr "850 MHz, "
-#: ../tui/nmtui-connect.c:220
-msgid "Deactivate"
-msgstr "निषà¥à¤•à¥à¤°à¤¿à¤¯ करें"
+#~ msgid "WCDMA 3GPP UMTS 2100 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../tui/nmtui-connect.c:279 ../tui/nmtui-edit.c:102 ../tui/nmtui.c:114
-msgid "Quit"
-msgstr "बाहर"
+#~ msgid "WCDMA 3GPP UMTS 1800 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../tui/nmtui-connect.c:304
-#, c-format
-msgid "No such connection '%s'"
-msgstr "कोई à¤à¤¸à¤¾ कनेकà¥à¤¶à¤¨ नहीं '%s'"
+#~ msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../tui/nmtui-connect.c:306
-msgid "Connection is already active"
-msgstr "कनेकà¥à¤¶à¤¨ पहले से सकà¥à¤°à¤¿à¤¯ है"
+#~ msgid "WCDMA 3GPP UMTS 800 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../tui/nmtui-edit.c:209
-msgid "Create"
-msgstr "बनाà¤à¤"
+#~ msgid "WCDMA 3GPP UMTS 850 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../tui/nmtui-edit.c:350
-msgid "Select the type of connection you wish to create."
-msgstr "कनेकà¥à¤¶à¤¨ के पà¥à¤°à¤•à¤¾à¤° चà¥à¤¨à¥‡à¤‚ जिसे आप करना चाहते हैं."
+#~ msgid "WCDMA 3GPP UMTS 900 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../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 "मेजबाननाम"
+#~ msgid "WCDMA 3GPP UMTS 1700 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../tui/nmtui-hostname.c:114
-#, c-format
-msgid "Set hostname to '%s'"
-msgstr "'%s' पर मेजबाननाम सेट करें"
+#~ msgid "WCDMA 3GPP UMTS 1900 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 1900 MHz, "
-#: ../tui/nmtui-hostname.c:116
-#, c-format
-msgid "Unable to set hostname: %s"
-msgstr "मेजबाननाम सेट नहीं कर सका: %s"
+#~ msgid "WCDMA 3GPP UMTS 2600 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 2600 MHz, "
-#: ../tui/nmtui.c:59 ../tui/nmtui.c:62
-msgid "connection"
-msgstr "कनेकà¥à¤¶à¤¨"
+#~ msgid "'%s' is not valid (use <dest IP>/prefix <next-hop IP> [metric])"
+#~ msgstr "'%s' वैध नहीं है (<dest IP>/prefix <next-hop IP> [metric] का उपयोग करें)"
-#: ../tui/nmtui.c:60
-msgid "Edit a connection"
-msgstr "कनेकà¥à¤¶à¤¨ संपादित करें"
+#~ msgid "'%s' doesn't match the virtual interface name '%s'"
+#~ msgstr "'%s' वरà¥à¤šà¥à¤…ल अंतरफलक नाम '%s' से मेल नहीं खाता है"
-#: ../tui/nmtui.c:63
-msgid "Activate a connection"
-msgstr "कनेकà¥à¤¶à¤¨ सकà¥à¤°à¤¿à¤¯ करें"
+#~ msgid "IPv4 configuration is not allowed for slave"
+#~ msgstr "IPv4 विनà¥à¤¯à¤¾à¤¸ सà¥à¤²à¥‡à¤µà¤² के लिठअनà¥à¤®à¤¤à¤¿ पà¥à¤°à¤¾à¤ªà¥à¤¤ नहीं है"
-#: ../tui/nmtui.c:65
-msgid "new hostname"
-msgstr "नया मेजबाननाम"
+#~ msgid "IPv6 configuration is not allowed for slave"
+#~ msgstr "IPv6 विनà¥à¤¯à¤¾à¤¸ सà¥à¤²à¥‡à¤µà¤² के लिठअनà¥à¤®à¤¤à¤¿ पà¥à¤°à¤¾à¤ªà¥à¤¤ नहीं है"
-#: ../tui/nmtui.c:66
-msgid "Set system hostname"
-msgstr "तंतà¥à¤° मेजबाननाम सेट करें"
+#~ msgid "Invalid option. Please use --help to see a list of valid options.\n"
+#~ msgstr "अवैध विकलà¥à¤ª. कृपया --help का उपयोग वैध विकलà¥à¤ª देने के लिठकरें.\n"
-#: ../tui/nmtui.c:89
-msgid "NetworkManager TUI"
-msgstr "NetworkManager TUI"
+#~ msgid "error occurred while waiting for data on socket"
+#~ msgstr "सॉकेट पर आà¤à¤•à¤¡à¤¼à¤¾ के लिठपà¥à¤°à¤¤à¥€à¤•à¥à¤·à¤¾ करने के दौरान तà¥à¤°à¥à¤Ÿà¤¿"
-#: ../tui/nmtui.c:97
-msgid "Please select an option"
-msgstr "कृपया कोई विकलà¥à¤ª चà¥à¤¨à¥‡à¤‚"
+#~ msgid "error processing netlink message: %s"
+#~ msgstr "netlink संदेश की पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ में तà¥à¤°à¥à¤Ÿà¤¿: %s"
-#: ../tui/nmtui.c:154
-msgid "Usage"
-msgstr "पà¥à¤°à¤¯à¥‹à¤—"
+#~ msgid "unable to connect to netlink for monitoring link status: %s"
+#~ msgstr "नेटलिंक को मॉनिटरिंग लिंक सà¥à¤¥à¤¿à¤¤à¤¿ के लिठकनेकà¥à¤Ÿ करने में असमरà¥à¤¥: %s"
-#: ../tui/nmtui.c:221
-msgid "Could not parse arguments"
-msgstr "तरà¥à¤• पदवà¥à¤¯à¤¾à¤–à¥à¤¯à¤¾ नहीं कर सकता"
+#~ msgid "unable to enable netlink handle credential passing: %s"
+#~ msgstr "नेटलिंक नियंतà¥à¤°à¤£ शà¥à¤°à¥‡à¤¯ पासिंग सकà¥à¤°à¤¿à¤¯ करने में असमरà¥à¤¥: %s"
-#: ../tui/nmtui.c:229
-msgid "NetworkManager is not running."
-msgstr "नेटवरà¥à¤•à¤ªà¥à¤°à¤¬à¤‚धक कारà¥à¤¯à¤¶à¥€à¤² नहीं है."
+#~ msgid "unable to allocate netlink handle for monitoring link status: %s"
+#~ msgstr "लिंक सà¥à¤¥à¤¿à¤¤à¤¿ मॉनिटर करने के लिठनेटलिंक नियंतà¥à¤°à¤£ का आबंटित नहीं कर सका: %s"
+#~ msgid "unable to join netlink group: %s"
+#~ msgstr "नेटलिंक समूह में शामिल होने में असमरà¥à¤¥: %s"
+#~ msgid "Error saving connection: %s"
+#~ msgstr "कनेकà¥à¤¶à¤¨ सहेजने में तà¥à¤°à¥à¤Ÿà¤¿: %s"
diff --git a/po/id.po b/po/id.po
index 028833864..67ed28e75 100644
--- a/po/id.po
+++ b/po/id.po
@@ -2463,8 +2463,8 @@ 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 "Aras log: satu dari [ERR, WARN, INFO, DEBUG]"
+msgid "Log level: one of [ERR, WARN, INFO, DEBUG, TRACE]"
+msgstr "Aras log: satu dari [ERR, WARN, INFO, DEBUG, TRACE]"
#. Translators: Do not translate the values in the square brackets
#: ../src/main.c:387
diff --git a/po/ja.po b/po/ja.po
index 16c7d12bf..0285f3679 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -4,410 +4,417 @@
# This file is distributed under the same license as the NetworkManager package.
# Satoru SATOH <ssato@redhat.com>, 2005-2007.
# Kiyoto Hashida <khashida@redhat.com>, 2010.
-# Noriko Mizumoto <noriko@fedoraproject.org>, 2013.
-#
+# Noriko Mizumoto <noriko@fedoraproject.org>, 2013 - 2014.
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-20 02:25+0000\n"
-"PO-Revision-Date: 2013-09-17 10:09+0000\n"
-"Last-Translator: Noriko Mizumoto <noriko@fedoraproject.org>\n"
+"POT-Creation-Date: 2014-01-23 17:13+0530\n"
+"PO-Revision-Date: 2014-01-28 08:31-0500\n"
+"Last-Translator: noriko <noriko@redhat.com>\n"
"Language-Team: Japanese <gnome-translation@gnome.gr.jp>\n"
"Language: ja\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Zanata 3.2.3\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
+#: ../cli/src/common.c:65 ../cli/src/connections.c:174
+#: ../cli/src/connections.c:200
msgid "GROUP"
msgstr "グループ"
-#. 0
#: ../cli/src/common.c:35 ../cli/src/common.c:55
msgid "ADDRESS"
msgstr "アドレス"
-#. 1
#: ../cli/src/common.c:36 ../cli/src/common.c:56
msgid "ROUTE"
msgstr "ルート"
-#. 2
#: ../cli/src/common.c:37 ../cli/src/common.c:57
msgid "DNS"
msgstr "DNS"
-#. 3
#: ../cli/src/common.c:38 ../cli/src/common.c:58
msgid "DOMAIN"
msgstr "ドメイン"
-#. 4
#: ../cli/src/common.c:39
msgid "WINS"
msgstr "WINS"
-#. 0
#: ../cli/src/common.c:47 ../cli/src/common.c:66
msgid "OPTION"
msgstr "オプション"
-#: ../cli/src/common.c:388 ../cli/src/settings.c:2646
+#: ../cli/src/common.c:404 ../cli/src/settings.c:2808
#, c-format
msgid "invalid IPv4 address '%s'"
msgstr "無効㪠IPv4 アドレス '%s'"
-#: ../cli/src/common.c:396
+#: ../cli/src/common.c:412
#, c-format
msgid "invalid prefix '%s'; <1-32> allowed"
msgstr "無効ãªãƒ—レフィックス '%s'; <1-32> 許å¯"
-#: ../cli/src/common.c:403 ../cli/src/common.c:456
+#: ../cli/src/common.c:419 ../cli/src/common.c:472
#, c-format
msgid "invalid gateway '%s'"
msgstr "無効ãªã‚²ãƒ¼ãƒˆã‚¦ã‚§ã‚¤ '%s'"
-#: ../cli/src/common.c:441 ../cli/src/settings.c:2892
+#: ../cli/src/common.c:457 ../cli/src/settings.c:3054
#, c-format
msgid "invalid IPv6 address '%s'"
msgstr "無効㪠IPv6 アドレス '%s'"
-#: ../cli/src/common.c:449
+#: ../cli/src/common.c:465
#, c-format
msgid "invalid prefix '%s'; <1-128> allowed"
msgstr "無効ãªãƒ—レフィックス '%s'; <1-128> 許å¯"
-#: ../cli/src/common.c:496
+#: ../cli/src/common.c:512
#, c-format
msgid "invalid IPv4 route '%s'"
msgstr "無効㪠IPv4 ルート '%s'"
-#: ../cli/src/common.c:504
+#: ../cli/src/common.c:520
#, c-format
msgid "invalid prefix '%s'; <0-32> allowed"
msgstr "無効ãªãƒ—レフィックス '%s'; <0-32> 許å¯"
-#: ../cli/src/common.c:511 ../cli/src/common.c:574
+#: ../cli/src/common.c:527 ../cli/src/common.c:590
#, c-format
msgid "invalid next hop address '%s'"
msgstr "無効ãªãƒã‚¯ã‚¹ãƒˆãƒ›ãƒƒãƒ—アドレス '%s'"
-#: ../cli/src/common.c:518 ../cli/src/common.c:582
+#: ../cli/src/common.c:534 ../cli/src/common.c:598
#, c-format
msgid "invalid metric '%s'"
msgstr "無効ãªãƒ¡ãƒˆãƒªãƒƒã‚¯ '%s'"
-#: ../cli/src/common.c:559
+#: ../cli/src/common.c:575
#, c-format
msgid "invalid IPv6 route '%s'"
msgstr "無効㪠IPv6 ルート '%s'"
-#: ../cli/src/common.c:567
+#: ../cli/src/common.c:583
#, c-format
msgid "invalid prefix '%s'; <0-128> allowed"
msgstr "無効ãªãƒ—レフィックス '%s'; <0-128> 許å¯"
-#: ../cli/src/common.c:603
+#: ../cli/src/common.c:619
msgid "unmanaged"
msgstr "管ç†ç„¡ã—"
-#: ../cli/src/common.c:605
+#: ../cli/src/common.c:621
msgid "unavailable"
msgstr "利用ä¸å¯"
-#: ../cli/src/common.c:607 ../cli/src/network-manager.c:154
+#: ../cli/src/common.c:623 ../cli/src/network-manager.c:276
msgid "disconnected"
msgstr "切断済ã¿"
-#: ../cli/src/common.c:609
+#: ../cli/src/common.c:625
msgid "connecting (prepare)"
msgstr "接続中(準備)"
-#: ../cli/src/common.c:611
+#: ../cli/src/common.c:627
msgid "connecting (configuring)"
msgstr "接続中(設定中)"
-#: ../cli/src/common.c:613
+#: ../cli/src/common.c:629
msgid "connecting (need authentication)"
msgstr "接続中(èªè¨¼ãŒå¿…è¦ï¼‰"
-#: ../cli/src/common.c:615
+#: ../cli/src/common.c:631
msgid "connecting (getting IP configuration)"
msgstr "接続中(IP 設定をå–得中)"
-#: ../cli/src/common.c:617
+#: ../cli/src/common.c:633
msgid "connecting (checking IP connectivity)"
msgstr "接続中(IP ã®æŽ¥ç¶šæ€§ãƒã‚§ãƒƒã‚¯ï¼‰"
-#: ../cli/src/common.c:619
+#: ../cli/src/common.c:635
msgid "connecting (starting secondary connections)"
msgstr "接続中(セカンダリ接続を開始)"
-#: ../cli/src/common.c:621 ../cli/src/network-manager.c:150
+#: ../cli/src/common.c:637 ../cli/src/network-manager.c:272
msgid "connected"
msgstr "接続済ã¿"
-#: ../cli/src/common.c:623 ../cli/src/connections.c:570
+#: ../cli/src/common.c:639 ../cli/src/connections.c:732
msgid "deactivating"
msgstr "åœæ­¢ä¸­"
-#: ../cli/src/common.c:625
+#: ../cli/src/common.c:641
msgid "connection failed"
msgstr "接続ã«å¤±æ•—"
-#: ../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
+#: ../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:636
+#: ../cli/src/common.c:652
msgid "No reason given"
msgstr "原因ä¸æ˜Ž"
-#: ../cli/src/common.c:639 ../cli/src/connections.c:2036
+#: ../cli/src/common.c:655 ../cli/src/connections.c:2258
#, c-format
msgid "Unknown error"
msgstr "ä¸æ˜Žãªã‚¨ãƒ©ãƒ¼"
-#: ../cli/src/common.c:642
+#: ../cli/src/common.c:658
msgid "Device is now managed"
msgstr "デãƒã‚¤ã‚¹ãŒç®¡ç†ä¸‹ã«ç½®ã‹ã‚Œã¾ã—ãŸ"
-#: ../cli/src/common.c:645
+#: ../cli/src/common.c:661
msgid "Device is now unmanaged"
msgstr "デãƒã‚¤ã‚¹ãŒç®¡ç†ä¸‹ã‹ã‚‰å¤–ã‚Œã¾ã—ãŸ"
-#: ../cli/src/common.c:648
+#: ../cli/src/common.c:664
msgid "The device could not be readied for configuration"
msgstr "デãƒã‚¤ã‚¹ã®è¨­å®šæº–å‚™ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
-#: ../cli/src/common.c:651
-msgid "IP configuration could not be reserved (no available address, timeout, etc.)"
+#: ../cli/src/common.c:667
+msgid ""
+"IP configuration could not be reserved (no available address, timeout, etc.)"
msgstr "IP 設定を確ä¿ã§ãã¾ã›ã‚“ã§ã—㟠(利用å¯èƒ½ãªã‚¢ãƒ‰ãƒ¬ã‚¹ãŒãªã„ã€ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆãªã©)"
-#: ../cli/src/common.c:654
+#: ../cli/src/common.c:670
msgid "The IP configuration is no longer valid"
msgstr "ã“ã® IP 設定ã¯ç„¡åŠ¹ã«ãªã‚Šã¾ã—ãŸ"
-#: ../cli/src/common.c:657
+#: ../cli/src/common.c:673
msgid "Secrets were required, but not provided"
msgstr "秘密ãŒå¿…è¦ã§ã—ãŸãŒå…¥åŠ›ã•ã‚Œã¾ã›ã‚“ã§ã—ãŸ"
-#: ../cli/src/common.c:660
+#: ../cli/src/common.c:676
msgid "802.1X supplicant disconnected"
msgstr "802.1X サプリカントãŒåˆ‡æ–­ã•ã‚Œã¾ã—ãŸ"
-#: ../cli/src/common.c:663
+#: ../cli/src/common.c:679
msgid "802.1X supplicant configuration failed"
msgstr "802.1X サプリカントã®è¨­å®šã«å¤±æ•—ã—ã¾ã—ãŸ"
-#: ../cli/src/common.c:666
+#: ../cli/src/common.c:682
msgid "802.1X supplicant failed"
msgstr "802.1X サプリカントãŒå¤±æ•—ã—ã¾ã—ãŸ"
-#: ../cli/src/common.c:669
+#: ../cli/src/common.c:685
msgid "802.1X supplicant took too long to authenticate"
msgstr "802.1X サプリカントã®èªè¨¼ã«æ™‚é–“ãŒã‹ã‹ã‚ŠéŽãŽã¾ã—ãŸ"
-#: ../cli/src/common.c:672
+#: ../cli/src/common.c:688
msgid "PPP service failed to start"
msgstr "PPP サービスã®é–‹å§‹ã«å¤±æ•—ã—ã¾ã—ãŸ"
-#: ../cli/src/common.c:675
+#: ../cli/src/common.c:691
msgid "PPP service disconnected"
msgstr "PPP サービスã®æŽ¥ç¶šãŒåˆ‡æ–­ã•ã‚Œã¾ã—ãŸ"
-#: ../cli/src/common.c:678
+#: ../cli/src/common.c:694
msgid "PPP failed"
msgstr "PPP ã®å¤±æ•—"
-#: ../cli/src/common.c:681
+#: ../cli/src/common.c:697
msgid "DHCP client failed to start"
msgstr "DHCP クライアントã®é–‹å§‹ã«å¤±æ•—ã—ã¾ã—ãŸ"
-#: ../cli/src/common.c:684
+#: ../cli/src/common.c:700
msgid "DHCP client error"
msgstr "DHCP クライアントエラー"
-#: ../cli/src/common.c:687
+#: ../cli/src/common.c:703
msgid "DHCP client failed"
msgstr "DHCP クライアントã®å¤±æ•—"
-#: ../cli/src/common.c:690
+#: ../cli/src/common.c:706
msgid "Shared connection service failed to start"
msgstr "共有接続サービスã®é–‹å§‹ã«å¤±æ•—ã—ã¾ã—ãŸ"
-#: ../cli/src/common.c:693
+#: ../cli/src/common.c:709
msgid "Shared connection service failed"
msgstr "共有接続サービスã®å¤±æ•—"
-#: ../cli/src/common.c:696
+#: ../cli/src/common.c:712
msgid "AutoIP service failed to start"
msgstr "AutoIP サービスã®é–‹å§‹ã«å¤±æ•—ã—ã¾ã—ãŸ"
-#: ../cli/src/common.c:699
+#: ../cli/src/common.c:715
msgid "AutoIP service error"
msgstr "AutoIP サービスエラー"
-#: ../cli/src/common.c:702
+#: ../cli/src/common.c:718
msgid "AutoIP service failed"
msgstr "AutoIP サービスã®å¤±æ•—"
-#: ../cli/src/common.c:705
+#: ../cli/src/common.c:721
msgid "The line is busy"
msgstr "回線ãŒä½¿ç”¨ä¸­ã§ã™"
-#: ../cli/src/common.c:708
+#: ../cli/src/common.c:724
msgid "No dial tone"
msgstr "ダイアル音ãŒã‚ã‚Šã¾ã›ã‚“"
-#: ../cli/src/common.c:711
+#: ../cli/src/common.c:727
msgid "No carrier could be established"
msgstr "確立ã§ãるキャリアãŒã‚ã‚Šã¾ã›ã‚“ã§ã—ãŸ"
-#: ../cli/src/common.c:714
+#: ../cli/src/common.c:730
msgid "The dialing request timed out"
msgstr "ダイアルè¦æ±‚ãŒã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã—ã¾ã—ãŸ"
-#: ../cli/src/common.c:717
+#: ../cli/src/common.c:733
msgid "The dialing attempt failed"
msgstr "ダイアルã®è©¦è¡Œã«å¤±æ•—ã—ã¾ã—ãŸ"
-#: ../cli/src/common.c:720
+#: ../cli/src/common.c:736
msgid "Modem initialization failed"
msgstr "モデムã®åˆæœŸåŒ–ã«å¤±æ•—ã—ã¾ã—ãŸ"
-#: ../cli/src/common.c:723
+#: ../cli/src/common.c:739
msgid "Failed to select the specified APN"
msgstr "指定ã•ã‚ŒãŸ APN ã®é¸æŠžã«å¤±æ•—ã—ã¾ã—ãŸ"
-#: ../cli/src/common.c:726
+#: ../cli/src/common.c:742
msgid "Not searching for networks"
-msgstr ""
+msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æ¤œç´¢ã‚’ã—ã¦ã„ã¾ã›ã‚“"
-#: ../cli/src/common.c:729
+#: ../cli/src/common.c:745
msgid "Network registration denied"
msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®ç™»éŒ²ãŒæ‹’å¦ã•ã‚Œã¾ã—ãŸ"
-#: ../cli/src/common.c:732
+#: ../cli/src/common.c:748
msgid "Network registration timed out"
msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®ç™»éŒ²ãŒã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã—ã¾ã—ãŸ"
-#: ../cli/src/common.c:735
+#: ../cli/src/common.c:751
msgid "Failed to register with the requested network"
msgstr "è¦æ±‚ã•ã‚ŒãŸãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¸ã®ç™»éŒ²ã«å¤±æ•—ã—ã¾ã—ãŸ"
-#: ../cli/src/common.c:738
+#: ../cli/src/common.c:754
msgid "PIN check failed"
msgstr "PIN 確èªã«å¤±æ•—ã—ã¾ã—ãŸ"
-#: ../cli/src/common.c:741
+#: ../cli/src/common.c:757
msgid "Necessary firmware for the device may be missing"
msgstr "ã“ã®ãƒ‡ãƒã‚¤ã‚¹ã«å¿…è¦ãªãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ãŒãªã„å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™"
-#: ../cli/src/common.c:744
+#: ../cli/src/common.c:760
msgid "The device was removed"
msgstr "ã“ã®ãƒ‡ãƒã‚¤ã‚¹ã¯å‰Šé™¤ã•ã‚Œã¾ã—ãŸ"
-#: ../cli/src/common.c:747
+#: ../cli/src/common.c:763
msgid "NetworkManager went to sleep"
msgstr "NetworkManager ãŒã‚¹ãƒªãƒ¼ãƒ—状態ã«å…¥ã‚Šã¾ã—ãŸ"
-#: ../cli/src/common.c:750
+#: ../cli/src/common.c:766
msgid "The device's active connection disappeared"
msgstr "ã“ã®ãƒ‡ãƒã‚¤ã‚¹ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªæŽ¥ç¶šãŒæ¶ˆæ»…ã—ã¾ã—ãŸ"
-#: ../cli/src/common.c:753
+#: ../cli/src/common.c:769
msgid "Device disconnected by user or client"
msgstr "ユーザーã¾ãŸã¯ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«ã‚ˆã‚Šãƒ‡ãƒã‚¤ã‚¹ãŒåˆ‡æ–­ã•ã‚Œã¾ã—ãŸ"
-#: ../cli/src/common.c:756
+#: ../cli/src/common.c:772
msgid "Carrier/link changed"
msgstr "キャリアï¼ãƒªãƒ³ã‚¯ãŒå¤‰æ›´ã•ã‚Œã¾ã—ãŸ"
-#: ../cli/src/common.c:759
+#: ../cli/src/common.c:775
msgid "The device's existing connection was assumed"
-msgstr ""
+msgstr "デãƒã‚¤ã‚¹ã®æ—¢å­˜ã®æŽ¥ç¶šã¨ã¿ãªã•ã‚Œã¾ã—ãŸ"
-#: ../cli/src/common.c:762
+#: ../cli/src/common.c:778
msgid "The supplicant is now available"
msgstr "サプリカントãŒä½¿ç”¨ã§ãるよã†ã«ãªã‚Šã¾ã—ãŸ"
-#: ../cli/src/common.c:765
+#: ../cli/src/common.c:781
msgid "The modem could not be found"
msgstr "モデムãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ"
-#: ../cli/src/common.c:768
+#: ../cli/src/common.c:784
msgid "The Bluetooth connection failed or timed out"
msgstr "Bluetooth 接続ãŒå¤±æ•—ã¾ãŸã¯ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã—ã¾ã—ãŸ"
-#: ../cli/src/common.c:771
+#: ../cli/src/common.c:787
msgid "GSM Modem's SIM card not inserted"
msgstr "GSM モデム㮠SIM カードãŒæŒ¿å…¥ã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: ../cli/src/common.c:774
+#: ../cli/src/common.c:790
msgid "GSM Modem's SIM PIN required"
msgstr "GSM モデム㮠SIM PIN ãŒå¿…è¦ã§ã™"
-#: ../cli/src/common.c:777
+#: ../cli/src/common.c:793
msgid "GSM Modem's SIM PUK required"
msgstr "GSM モデム㮠SIM PUK ãŒå¿…è¦ã§ã™"
-#: ../cli/src/common.c:780
+#: ../cli/src/common.c:796
msgid "GSM Modem's SIM wrong"
msgstr "GSM モデム㮠SIM ãŒé–“é•ã£ã¦ã„ã¾ã™"
-#: ../cli/src/common.c:783
+#: ../cli/src/common.c:799
msgid "InfiniBand device does not support connected mode"
msgstr "InfiniBand デãƒã‚¤ã‚¹ã§ã¯æŽ¥ç¶šãƒ¢ãƒ¼ãƒ‰ã«å¯¾å¿œã—ã¦ã„ã¾ã›ã‚“"
-#: ../cli/src/common.c:786
+#: ../cli/src/common.c:802
msgid "A dependency of the connection failed"
msgstr "接続ä¾å­˜æ€§ã®å¤±æ•—"
-#: ../cli/src/common.c:789
+#: ../cli/src/common.c:805
msgid "A problem with the RFC 2684 Ethernet over ADSL bridge"
msgstr "ADSL ブリッジ経由㮠RFC 2684 Ethernet ã«å•é¡ŒãŒç™ºç”Ÿã—ã¾ã—ãŸ"
-#: ../cli/src/common.c:792
+#: ../cli/src/common.c:808
msgid "ModemManager is unavailable"
msgstr "ModemManager ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“"
-#: ../cli/src/common.c:795
+#: ../cli/src/common.c:811
msgid "The Wi-Fi network could not be found"
msgstr "Wi-Fi ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ"
-#: ../cli/src/common.c:798
+#: ../cli/src/common.c:814
msgid "A secondary connection of the base connection failed"
msgstr "ベース接続ã®ã‚»ã‚«ãƒ³ãƒ€ãƒªæŽ¥ç¶šã«å¤±æ•—ã—ã¾ã—ãŸ"
-#: ../cli/src/common.c:801 ../cli/src/devices.c:519
+#: ../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 "ä¸æ˜Ž"
-#: ../cli/src/common.c:843
+#: ../cli/src/common.c:866
#, c-format
msgid "invalid priority map '%s'"
msgstr "無効ãªå„ªå…ˆåº¦ãƒžãƒƒãƒ— '%s'"
-#: ../cli/src/common.c:850 ../cli/src/common.c:856
+#: ../cli/src/common.c:873 ../cli/src/common.c:879
#, c-format
msgid "priority '%s' is not valid (<0-%ld>)"
msgstr "'%s' ã¯æœ‰åŠ¹ãªå„ªå…ˆåº¦ã§ã¯ã‚ã‚Šã¾ã›ã‚“ (<0-%ld>)"
-#. define some prompts for connection editor
+#: ../cli/src/common.c:935
+#, c-format
+msgid "'%s' is not a valid team configuration or file name."
+msgstr "'%s' ã¯æœ‰åŠ¹ãª team 設定ã§ã‚‚ファイルåã§ã‚‚ã‚ã‚Šã¾ã›ã‚“"
+
#: ../cli/src/connections.c:62
msgid "Setting name? "
msgstr "設定åã¯? "
@@ -420,204 +427,284 @@ msgstr "プロパティåã¯? "
msgid "Enter connection type: "
msgstr "接続タイプを入力ã—ã¦ãã ã•ã„: "
-#. 0
-#. used only for 'GENERAL' group listing
-#: ../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
+#: ../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:69 ../cli/src/connections.c:147
+#: ../cli/src/connections.c:69 ../cli/src/connections.c:176
msgid "UUID"
msgstr "UUID"
-#. 1
-#. 0
-#. 1
-#. 2
-#: ../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
+#: ../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:71
msgid "TIMESTAMP"
msgstr "タイムスタンプ"
-#. 3
#: ../cli/src/connections.c:72
msgid "TIMESTAMP-REAL"
msgstr "タイムスタンプ-リアル"
-#. 4
-#. 13
-#: ../cli/src/connections.c:73 ../cli/src/devices.c:123
+#: ../cli/src/connections.c:73 ../cli/src/devices.c:101
msgid "AUTOCONNECT"
msgstr "自動接続"
-#. 5
#: ../cli/src/connections.c:74
msgid "READONLY"
msgstr "読ã¿è¾¼ã¿å°‚用"
-#. 6
-#. 8
-#. 2
-#. 15
-#. 5
-#: ../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
+#: ../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:148
+#: ../cli/src/connections.c:177
msgid "DEVICES"
msgstr "デãƒã‚¤ã‚¹"
-#. 3
-#. 1
-#. 8
-#. 1
-#: ../cli/src/connections.c:149 ../cli/src/devices.c:73
-#: ../cli/src/devices.c:118 ../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:150
+#: ../cli/src/connections.c:179
msgid "DEFAULT"
msgstr "デフォルト"
-#. 5
-#: ../cli/src/connections.c:151
+#: ../cli/src/connections.c:180
msgid "DEFAULT6"
msgstr "デフォルト6"
-#. 6
-#: ../cli/src/connections.c:152
+#: ../cli/src/connections.c:181
msgid "SPEC-OBJECT"
msgstr "スペックオブジェクト"
-#. 7
-#. 1
-#: ../cli/src/connections.c:153 ../cli/src/connections.c:167
+#: ../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:155
+#: ../cli/src/connections.c:184 ../cli/src/devices.c:77
+#: ../cli/src/devices.c:105
msgid "CON-PATH"
msgstr "CON パス"
-#. 10
-#: ../cli/src/connections.c:156
+#: ../cli/src/connections.c:185
msgid "ZONE"
msgstr "ゾーン"
-#. 11
-#: ../cli/src/connections.c:157
+#: ../cli/src/connections.c:186
msgid "MASTER-PATH"
msgstr "マスターパス"
-#: ../cli/src/connections.c:165 ../cli/src/devices.c:83
-msgid "GENERAL"
-msgstr "全般"
-
-#. 0
-#: ../cli/src/connections.c:166
-msgid "IP"
-msgstr "IP"
-
-#. 1
-#: ../cli/src/connections.c:181
+#: ../cli/src/connections.c:202
msgid "USERNAME"
msgstr "ユーザーå"
-#. 2
-#: ../cli/src/connections.c:182
+#: ../cli/src/connections.c:203
msgid "GATEWAY"
msgstr "ゲートウェイ"
-#. 3
-#: ../cli/src/connections.c:183
+#: ../cli/src/connections.c:204
msgid "BANNER"
msgstr "ãƒãƒŠãƒ¼"
-#. 4
-#: ../cli/src/connections.c:184
+#: ../cli/src/connections.c:205
msgid "VPN-STATE"
msgstr "VPN ã®çŠ¶æ…‹"
-#. 5
-#: ../cli/src/connections.c:185
+#: ../cli/src/connections.c:206
msgid "CFG"
msgstr "CFG"
-#: ../cli/src/connections.c:211
+#: ../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 := { show | up | down | delete }\n"
"\n"
-" show configured [[ id | uuid | path ] <ID>]\n"
+"COMMAND := { show | up | down | add | modify | edit | delete | reload | load "
+"}\n"
"\n"
-" show active [[ id | uuid | path | apath ] <ID>]\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"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
"\n"
-" up [ id | uuid | path ] <ID> [ifname <ifname>] [ap <BSSID>]\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>]\n"
"\n"
-" down [ id | uuid | path | apath ] <ID>\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"
+" 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"
+" edit [id | uuid | path] <ID>\n"
+" edit [type <new_con_type>] [con-name <new_con_name>]\n"
"\n"
-" delete [ id | uuid | path ] <ID>\n"
+" delete [id | uuid | path] <ID>\n"
"\n"
" reload\n"
"\n"
+" load <filename> [ <filename>... ]\n"
"\n"
msgstr ""
"使ã„æ–¹: nmcli connection { コマンド | help }\n"
-" コマンド := { show | up | down | delete }\n"
"\n"
-" show configured [[ id | uuid | path ] <ID>]\n"
+"コマンドã®ç¨®é¡ž := { show | up | down | add | modify | edit | delete | reload | load "
+"}\n"
"\n"
-" show active [[ id | uuid | path | apath ] <ID>]\n"
+" 設定ã—ã¦ã„ã‚‹ [[id | uuid | path] <ID>] を表示ã™ã‚‹\n"
+" アクティブ㪠[[id | uuid | path | apath] <ID>] を表示ã™ã‚‹\n"
"\n"
-" up [ id | uuid | path ] <ID> [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
"\n"
-" up [ id | uuid | path ] <ID> [ifname <ifname>] [ap <BSSID>]\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>]\n"
"\n"
-" down [ id | uuid | path | apath ] <ID>\n"
+" down [id | uuid | path | apath] <ID>\n"
"\n"
-" add 共通オプション タイプ固有オプション IP オプション\n"
+" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
"\n"
-" modify [ id | uuid | path ] <ID> <setting>.<property> <value>\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"
+" edit [id | uuid | path] <ID>\n"
+" edit [type <new_con_type>] [con-name <new_con_name>]\n"
"\n"
-" delete [ id | uuid | path ] <ID>\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 { 引数 | help }\n"
+"\n"
+"引数ã®ç¨®é¡ž := active [[id | uuid | path | apath] <ID>]\n"
+"\n"
+"ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æŽ¥ç¶šã®ãŸã‚ç¾åœ¨ãƒ‡ãƒã‚¤ã‚¹ã§ä½¿ç”¨ã•ã‚Œã¦ã„る接続を表示ã—ã¾ã™ã€‚\n"
+"パラメータを付ã‘ãšã«å®Ÿè¡Œã™ã‚‹ã¨ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªæŽ¥ç¶šãŒã™ã¹ã¦è¡¨ç¤ºã•ã‚Œã¾ã™ã€‚\n"
+"<ID> を与ãˆã‚‹ã¨ã€ä»£ã‚ã‚Šã«æŽ¥ç¶šã®è©³ç´°ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚\n"
+"\n"
+"引数ã®ç¨®é¡ž := configured [[id | uuid | path] <ID>]\n"
+"\n"
+"インメモリã¨ã‚ªãƒ³ãƒ‡ã‚£ã‚¹ã‚¯ã®æŽ¥ç¶šã‚’表示ã—ã¾ã™ã€‚デãƒã‚¤ã‚¹ã§ãã®æŽ¥ç¶šãƒ—ロファイルを\n"
+"使用ã—ã¦ã„ã‚‹å ´åˆã€ãã®æŽ¥ç¶šã‚‚アクティブã«ãªã‚‹ã“ã¨ãŒã‚ã‚Šã¾ã™ã€‚パラメータを付ã‘ãš\n"
+"ã«å®Ÿè¡Œã™ã‚‹ã¨ã€ã™ã¹ã¦ã®ãƒ—ロファイルãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚<ID> を与ãˆã‚‹ã¨ã€ä»£ã‚ã‚Šã«\n"
+"プロファイルã®è©³ç´°ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚\n"
-#: ../cli/src/connections.c:233
+#: ../cli/src/connections.c:297
#, c-format
msgid ""
-"Usage: nmcli connection add { OPTIONS | help }\n"
-" OPTIONS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"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] <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"
+
+#: ../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 { 引数 | help }\n"
+"\n"
+"引数ã®ç¨®é¡ž := [id | uuid | path | apath] <ID>\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"
@@ -638,6 +725,12 @@ msgid ""
" 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"
@@ -655,14 +748,17 @@ msgid ""
" [bt-type panu|dun-gsm|dun-cdma]\n"
"\n"
" vlan: dev <parent device (connection UUID, ifname, or MAC)>\n"
-" [id <VLAN id>]\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"
+" 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"
@@ -671,19 +767,19 @@ msgid ""
"\n"
" bond-slave: master <master (ifname or connection UUID)>\n"
"\n"
-" team: [config <json config>]\n"
+" team: [config <file>|<raw JSON data>]\n"
"\n"
" team-slave: master <master (ifname or connection UUID)>\n"
-" [config <json config>]\n"
+" [config <file>|<raw JSON data>]\n"
"\n"
-" bridge: [stp yes|no>]\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"
+" bridge-slave: master <master (ifname or connection UUID)>\n"
" [priority <0-63>]\n"
" [path-cost <1-65535>]\n"
" [hairpin yes|no]\n"
@@ -698,976 +794,1133 @@ msgid ""
" 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"
+"使ã„æ–¹: nmcli connection add { 引数 | help }\n"
"\n"
-" 共通オプション:\n"
-" type <type>\n"
-" ifname <interface name> | \"*\"\n"
-" [con-name <connection name>]\n"
+"引数 := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" COMMON_OPTIONS:\n"
+" type <タイプ>\n"
+" ifname <インターフェースå> | \"*\"\n"
+" [con-name <接続å>]\n"
" [autoconnect yes|no]\n"
"\n"
-" タイプ固有オプション:\n"
-" ethernet: [mac <MAC address>]\n"
-" [cloned-mac <cloned MAC address>]\n"
+" TYPE_SPECIFIC_OPTIONS:\n"
+" ethernet: [mac <MAC アドレス>]\n"
+" [cloned-mac <クローン㮠MAC アドレス>]\n"
" [mtu <MTU>]\n"
"\n"
" wifi: ssid <SSID>\n"
-" [mac <MAC address>]\n"
-" [cloned-mac <cloned MAC address>]\n"
+" [mac <MAC アドレス>]\n"
+" [cloned-mac <クローン㮠MAC アドレス>]\n"
" [mtu <MTU>]\n"
"\n"
-" wimax: [mac <MAC address>]\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 <username>]\n"
-" [password <password>]\n"
+" [user <ユーザーå>]\n"
+" [password <パスワード>]\n"
"\n"
-" cdma: [user <username>]\n"
-" [password <password>]\n"
+" cdma: [user <ユーザーå>]\n"
+" [password <パスワード>]\n"
"\n"
-" infiniband: [mac <MAC address>]\n"
+" infiniband: [mac <MAC アドレス>]\n"
" [mtu <MTU>]\n"
" [transport-mode datagram | connected]\n"
" [parent <ifname>]\n"
" [p-key <IPoIB P_Key>]\n"
"\n"
-" bluetooth: [addr <bluetooth address>]\n"
+" bluetooth: [addr <bluetooth アドレス>]\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"
+" vlan: dev <親デãƒã‚¤ã‚¹ (接続 UUIDã€ifnameã€MAC)>\n"
+" id <VLAN ID>\n"
+" [flags <VLAN フラグ>]\n"
+" [ingress <ingress 優先度マッピング>]\n"
+" [egress <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"
-" [miimon <num>]\n"
-" [downdelay <num>]\n"
-" [updelay <num>]\n"
-" [arp-interval <num>]\n"
-" [arp-ip-target <num>]\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 <数値>]\n"
+" [downdelay <数値>]\n"
+" [updelay <数値>]\n"
+" [arp-interval <数値>]\n"
+" [arp-ip-target <数値>]\n"
"\n"
-" bond-slave: master <master (ifname or connection UUID)>\n"
+" bond-slave: master <マスター (ifname ã¾ãŸã¯æŽ¥ç¶š UUID)>\n"
"\n"
-" team: [config <json config>]\n"
+" team: [config <ファイル>|<JSON 生データ>]\n"
"\n"
-" team-slave: master <master (ifname or connection UUID)>\n"
-" [config <json config>]\n"
+" team-slave: master <マスター (ifname ã¾ãŸã¯æŽ¥ç¶š UUID)>\n"
+" [config <ファイル>|<JSON 生データ>]\n"
"\n"
-" bridge: [stp yes|no>]\n"
-" [priority <num>]\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"
"\n"
-" bridge-slave: master <master (ifname or connection UUID)\n"
+" bridge-slave: master <マスター (ifname ã¾ãŸã¯æŽ¥ç¶š 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"
+" [user <ユーザーå>]\n"
"\n"
" olpc-mesh: ssid <SSID>\n"
" [channel <1-13>]\n"
-" [dhcp-anycast <MAC address>]\n"
+" [dhcp-anycast <MAC アドレス>]\n"
+"\n"
+" IP_OPTIONS:\n"
+" [ip4 <IPv4 アドレス>] [gw4 <IPv4 ゲートウェイ>]\n"
+" [ip6 <IPv6 アドレス>] [gw6 <IPv6 ゲートウェイ>]\n"
"\n"
-" IP オプション:\n"
-" [ip4 <IPv4 address>] [gw4 <IPv4 gateway>]\n"
-" [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
-#: ../cli/src/connections.c:346
+#: ../cli/src/connections.c:408
#, c-format
-msgid "Error: 'list configured': %s"
-msgstr "エラー: 'list configured': %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 { 引数 | help }\n"
+"\n"
+"引数ã®ç¨®é¡ž := [id | uuid | path] <ID> <setting name>.<property name> [<value>]\n"
+"\n"
+"接続プロファイル内ã®ãƒ—ロパティをã²ã¨ã¤å¤‰æ›´ã—ã¾ã™ã€‚\n"
+"プロファイルã¯åå‰ã€UUIDã€D-Bus パスã§è­˜åˆ¥ã—ã¾ã™ã€‚\n"
+"\n"
-#: ../cli/src/connections.c:348
+#: ../cli/src/connections.c:420
#, c-format
-msgid "Error: 'list configured': %s; allowed fields: %s"
-msgstr "エラー: 'list configured': %s; 許å¯ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %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] <ID>\n"
+"\n"
+"インテラクティブãªã‚¨ãƒ‡ã‚£ã‚¿ã§æ—¢å­˜ã®æŽ¥ç¶šãƒ—ロファイルを編集ã—ã¾ã™ã€‚\n"
+"プロファイルã¯åå‰ã€UUIDã€D-Bus パスãªã©ã§è­˜åˆ¥ã—ã¾ã™ã€‚\n"
+"\n"
+"引数 := [type <æ–°ã—ã„接続タイプ>] [con-name <æ–°ã—ã„接続å>]\n"
+"\n"
+"インテラクティブãªã‚¨ãƒ‡ã‚£ã‚¿ã§æ–°ã—ã„接続プロファイルを追加ã—ã¾ã™ã€‚\n"
+"\n"
-#. Main header
-#: ../cli/src/connections.c:356
+#: ../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 { 引数 | help }\n"
+"\n"
+"引数 := [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"
+
+#: ../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 { 引数 | help }\n"
+"\n"
+"引数 := <filename> [<filename>...]\n"
+"\n"
+"ディスクã‹ã‚‰æŽ¥ç¶šãƒ•ã‚¡ã‚¤ãƒ«ã‚’一ã¤ã¾ãŸã¯è¤‡æ•°ã€èª­ã¿è¾¼ã¿ã¾ãŸã¯å†èª­ã¿è¾¼ã¿\n"
+"ã—ã¾ã™ã€‚手作業ã§æŽ¥ç¶šãƒ•ã‚¡ã‚¤ãƒ«ã‚’編集ã—ãŸå¾Œã¯ã€etworkManager ã«æœ€æ–°ã®\n"
+"状態をèªè­˜ã•ã›ã‚‹ãŸã‚å¿…ãšã“ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã—ã¦ãã ã•ã„。\n"
+"\n"
+
+#: ../cli/src/connections.c:515
+#, c-format
+msgid "Error: 'list configured': %s"
+msgstr "エラー: 'list configured': %s"
+
+#: ../cli/src/connections.c:523
msgid "Connection details"
msgstr "接続ã®è©³ç´°"
-#: ../cli/src/connections.c:420
+#: ../cli/src/connections.c:589
msgid "never"
msgstr "ã—ãªã„"
-#. "CAPABILITIES"
-#: ../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
+#: ../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: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
+#: ../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 "ã„ã„ãˆ"
-#. Add headers
-#: ../cli/src/connections.c:499
+#: ../cli/src/connections.c:667
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
+#: ../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:532
+#: ../cli/src/connections.c:698
#, c-format
msgid "Error: %s - no such connection."
msgstr "エラー: %s - ãã®ã‚ˆã†ãªæŽ¥ç¶šã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/connections.c:545
+#: ../cli/src/connections.c:710
#, c-format
msgid "Error: 'show configured': %s"
msgstr "エラー: 'show configured': %s"
-#: ../cli/src/connections.c:547
-#, c-format
-msgid "Error: 'show configured': %s; allowed fields: %s"
-msgstr "エラー: 'show configured': %s; 許å¯ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s"
-
-#: ../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
+#: ../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:566
+#: ../cli/src/connections.c:728
msgid "activating"
msgstr "アクティベート中"
-#: ../cli/src/connections.c:568
+#: ../cli/src/connections.c:730
msgid "activated"
msgstr "アクティベート済ã¿"
-#: ../cli/src/connections.c:572
+#: ../cli/src/connections.c:734
msgid "deactivated"
msgstr "åœæ­¢ã—ã¾ã—ãŸ"
-#: ../cli/src/connections.c:584
+#: ../cli/src/connections.c:746
msgid "VPN connecting (prepare)"
msgstr "VPN 接続(準備)"
-#: ../cli/src/connections.c:586
+#: ../cli/src/connections.c:748
msgid "VPN connecting (need authentication)"
msgstr "VPN 接続(èªè¨¼ãŒå¿…è¦ï¼‰"
-#: ../cli/src/connections.c:588
+#: ../cli/src/connections.c:750
msgid "VPN connecting"
msgstr "VPN 接続"
-#: ../cli/src/connections.c:590
+#: ../cli/src/connections.c:752
msgid "VPN connecting (getting IP configuration)"
msgstr "VPN 接続(IP 設定をå–得)"
-#: ../cli/src/connections.c:592
+#: ../cli/src/connections.c:754
msgid "VPN connected"
msgstr "VPN 接続済ã¿"
-#: ../cli/src/connections.c:594
+#: ../cli/src/connections.c:756
msgid "VPN connection failed"
msgstr "VPN 接続失敗"
-#: ../cli/src/connections.c:596
+#: ../cli/src/connections.c:758
msgid "VPN disconnected"
msgstr "VPN 切断済ã¿"
-#: ../cli/src/connections.c:667 ../cli/src/connections.c:677
-#: ../cli/src/devices.c:479
+#: ../cli/src/connections.c:829 ../cli/src/connections.c:839
+#: ../cli/src/devices.c:594
msgid "N/A"
msgstr "ãªã—"
-#: ../cli/src/connections.c:850
+#: ../cli/src/connections.c:1012
#, c-format
msgid "Error: 'list active': %s"
msgstr "エラー: 'list active': %s"
-#: ../cli/src/connections.c:852
-#, c-format
-msgid "Error: 'list active': %s; allowed fields: %s"
-msgstr "エラー: 'list active': %s; 許å¯ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s"
-
-#. Main header
-#: ../cli/src/connections.c:860
+#: ../cli/src/connections.c:1020
msgid "Active connection details"
msgstr "アクティブãªæŽ¥ç¶šã®è©³ç´°"
-#: ../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
+#: ../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 ãŒèµ·å‹•ã—ã¦ã„ã¾ã›ã‚“。"
-#. Add headers
-#: ../cli/src/connections.c:1025
+#: ../cli/src/connections.c:1203
msgid "List of active connections"
msgstr "アクティブãªæŽ¥ç¶šã®ä¸€è¦§"
-#: ../cli/src/connections.c:1061 ../cli/src/connections.c:1718
+#: ../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:1074
+#: ../cli/src/connections.c:1251
#, c-format
msgid "Error: 'show active': %s"
msgstr "エラー: 'show active': %s"
-#: ../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
+#: ../cli/src/connections.c:1344
#, c-format
msgid "no active connection on device '%s'"
msgstr "デãƒã‚¤ã‚¹ '%s' 上ã«ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªæŽ¥ç¶šã¯ã‚ã‚Šã¾ã›ã‚“"
-#: ../cli/src/connections.c:1177
+#: ../cli/src/connections.c:1352
msgid "no active connection or device"
msgstr "アクティブãªæŽ¥ç¶šã¾ãŸã¯ãƒ‡ãƒã‚¤ã‚¹ãŒã‚ã‚Šã¾ã›ã‚“"
-#: ../cli/src/connections.c:1248
+#: ../cli/src/connections.c:1423
#, c-format
msgid "device '%s' not compatible with connection '%s'"
msgstr "デãƒã‚¤ã‚¹ '%s' ã¯æŽ¥ç¶š '%s' ã¨äº’æ›æ€§ãŒã‚ã‚Šã¾ã›ã‚“"
-#: ../cli/src/connections.c:1251
+#: ../cli/src/connections.c:1426
#, c-format
msgid "no device found for connection '%s'"
msgstr "接続 '%s'用ã®ãƒ‡ãƒã‚¤ã‚¹ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
-#: ../cli/src/connections.c:1263
+#: ../cli/src/connections.c:1438
msgid "unknown reason"
msgstr "ä¸æ˜Žãªç†ç”±"
-#: ../cli/src/connections.c:1265 ../cli/src/network-manager.c:166
+#: ../cli/src/connections.c:1440 ../cli/src/network-manager.c:288
msgid "none"
msgstr "ãªã—"
-#: ../cli/src/connections.c:1267
+#: ../cli/src/connections.c:1442
msgid "the user was disconnected"
msgstr "ユーザーã®æŽ¥ç¶šãŒåˆ‡æ–­ã•ã‚Œã¾ã—ãŸã€‚"
-#: ../cli/src/connections.c:1269
+#: ../cli/src/connections.c:1444
msgid "the base network connection was interrupted"
msgstr "基本ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æŽ¥ç¶šãŒå¦¨å®³ã•ã‚Œã¾ã—ãŸã€‚"
-#: ../cli/src/connections.c:1271
+#: ../cli/src/connections.c:1446
msgid "the VPN service stopped unexpectedly"
msgstr "VPN サービスãŒäºˆæœŸã—ãªã„åœæ­¢ã‚’ã—ã¾ã—ãŸ"
-#: ../cli/src/connections.c:1273
+#: ../cli/src/connections.c:1448
msgid "the VPN service returned invalid configuration"
msgstr "VPN サービスã¯ç„¡åŠ¹ãªè¨­å®šã‚’è¿”ã—ã¾ã—ãŸ"
-#: ../cli/src/connections.c:1275
+#: ../cli/src/connections.c:1450
msgid "the connection attempt timed out"
msgstr "接続試行ã¯æ™‚間切れã§ã™"
-#: ../cli/src/connections.c:1277
+#: ../cli/src/connections.c:1452
msgid "the VPN service did not start in time"
msgstr "VPN サービスã¯æ™‚間内ã«é–‹å§‹ã—ã¦ã„ã¾ã›ã‚“"
-#: ../cli/src/connections.c:1279
+#: ../cli/src/connections.c:1454
msgid "the VPN service failed to start"
msgstr "VPN サービスã®é–‹å§‹ã¯å¤±æ•—ã—ã¾ã—ãŸ"
-#: ../cli/src/connections.c:1281
+#: ../cli/src/connections.c:1456
msgid "no valid VPN secrets"
msgstr "有効㪠VPN シークレットã¯ã‚ã‚Šã¾ã›ã‚“"
-#: ../cli/src/connections.c:1283
+#: ../cli/src/connections.c:1458
msgid "invalid VPN secrets"
msgstr "無効㪠VPN シークレット"
-#: ../cli/src/connections.c:1285
+#: ../cli/src/connections.c:1460
msgid "the connection was removed"
msgstr "接続ã¯å‰Šé™¤ã•ã‚Œã¾ã—ãŸ"
-#: ../cli/src/connections.c:1302 ../cli/src/connections.c:1460
+#: ../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"
-#: ../cli/src/connections.c:1307
+#: ../cli/src/connections.c:1482
#, c-format
msgid "Error: Connection activation failed."
msgstr "エラー: 接続ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ãƒˆã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
-#: ../cli/src/connections.c:1332
+#: ../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:1339
+#: ../cli/src/connections.c:1514
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "エラー: 接続ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ãƒˆã«å¤±æ•—ã—ã¾ã—ãŸ: %s。"
-#: ../cli/src/connections.c:1357 ../cli/src/devices.c:1166
+#: ../cli/src/connections.c:1532 ../cli/src/devices.c:1294
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "エラー: 制é™æ™‚é–“ã® %d 秒ãŒçµŒéŽ"
-#: ../cli/src/connections.c:1424
+#: ../cli/src/connections.c:1597
#, c-format
-msgid "Error: Device '%s' is waiting for slaves before proceeding with activation."
+msgid ""
+"Error: Device '%s' is waiting for slaves before proceeding with activation."
msgstr "エラー: デãƒã‚¤ã‚¹ '%s' ã¯ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ãƒˆã®ãƒ—ロセスを開始ã™ã‚‹å‰ã«ã‚¹ãƒ¬ãƒ¼ãƒ–ã‚’å¾…æ©Ÿã—ã¦ã„ã¾ã™"
-#: ../cli/src/connections.c:1444
+#: ../cli/src/connections.c:1617
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "エラー: 接続ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ã‚·ãƒ§ãƒ³ã«å¤±æ•—: %s"
-#: ../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:1722 ../cli/src/connections.c:1854
+msgid "unknown error"
+msgstr "ä¸æ˜Žãªã‚¨ãƒ©ãƒ¼"
-#: ../cli/src/connections.c:1535 ../cli/src/connections.c:1681
-#: ../cli/src/connections.c:6676
+#: ../cli/src/connections.c:1730
#, c-format
-msgid "Error: No connection specified."
-msgstr "エラー: 接続ãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。"
+msgid "unknown device '%s'."
+msgstr "ä¸æ˜Žãªãƒ‡ãƒã‚¤ã‚¹ '%s' ã§ã™ã€‚"
-#: ../cli/src/connections.c:1558
-#, c-format
-msgid "Error: Unknown connection: %s."
-msgstr "エラー: ä¸æ˜ŽãªæŽ¥ç¶š: %s。"
+#: ../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:1595 ../cli/src/devices.c:1028
-#: ../cli/src/devices.c:1365 ../cli/src/devices.c:1814
-#: ../cli/src/devices.c:2108
+#: ../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 "Unknown parameter: %s\n"
msgstr "ä¸æ˜Žãªãƒ‘ラメーター: %s\n"
-#: ../cli/src/connections.c:1625
-#, c-format
-msgid "Error: No suitable device found: %s."
-msgstr "エラー: é©åˆ‡ãªãƒ‡ãƒã‚¤ã‚¹ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“: %s"
-
-#: ../cli/src/connections.c:1627
-#, c-format
-msgid "Error: No suitable device found."
-msgstr "エラー: é©åˆ‡ãªãƒ‡ãƒã‚¤ã‚¹ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
-
-#: ../cli/src/connections.c:1654
+#: ../cli/src/connections.c:1862
msgid "preparing"
msgstr "準備中"
-#: ../cli/src/connections.c:2015 ../cli/src/utils.c:490
+#: ../cli/src/connections.c:1889 ../cli/src/connections.c:7719
+#: ../cli/src/connections.c:7832
+#, c-format
+msgid "Error: No connection specified."
+msgstr "エラー: 接続ãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。"
+
+#: ../cli/src/connections.c:2237 ../cli/src/utils.c:490
#, c-format
msgid "'%s' not among [%s]"
-msgstr ""
+msgstr "'%s' 㯠[%s] ã«ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: ../cli/src/connections.c:2097
+#: ../cli/src/connections.c:2319
#, c-format
msgid "Error: '%s': '%s' is not a valid %s MAC address."
msgstr "エラー: ''%s': '%s' ã¯æœ‰åŠ¹ãª %s MAC アドレスã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/connections.c:2098
+#: ../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:2098
+#: ../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:2121
+#: ../cli/src/connections.c:2343
#, c-format
msgid "Error: 'mtu': '%s' is not a valid MTU."
msgstr "エラー: 'mtu': '%s' ã¯æœ‰åŠ¹ãª MTU ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/connections.c:2137
+#: ../cli/src/connections.c:2359
#, c-format
msgid "Error: 'parent': '%s' is not a valid interface name."
msgstr "エラー: 'parent': '%s' ã¯æœ‰åŠ¹ãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹åã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/connections.c:2158
+#: ../cli/src/connections.c:2380
#, 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
+#: ../cli/src/connections.c:2396
#, c-format
-msgid "Error: 'mode': '%s' is not a valid InfiniBand transport mode [datagram, connected]."
+msgid ""
+"Error: 'mode': '%s' is not a valid InfiniBand transport mode [datagram, "
+"connected]."
msgstr "エラー: 'mode': '%s' ã¯æœ‰åŠ¹ãª InfiniBand 転é€ãƒ¢ãƒ¼ãƒ‰ã§ã¯ã‚ã‚Šã¾ã›ã‚“ [datagram, connected]。"
-#: ../cli/src/connections.c:2190
+#: ../cli/src/connections.c:2412
#, c-format
msgid "Error: 'flags': '%s' is not valid; use <0-7>."
msgstr "エラー: 'flags': '%s' ã¯ç„¡åŠ¹ã§ã™; <0-7> を使用ã—ã¦ãã ã•ã„。"
-#: ../cli/src/connections.c:2212
+#: ../cli/src/connections.c:2434
#, 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>."
+#: ../cli/src/connections.c:2541
+#, c-format
msgid "Error: '%s': '%s' is not valid; use <%u-%u>."
-msgstr "エラー: '%s': '%s' ã¯ç„¡åŠ¹ã§ã™; <%d-%d> を使用ã—ã¦ãã ã•ã„。"
+msgstr "エラー: '%s': '%s' ã¯ç„¡åŠ¹ã§ã™; <%u-%u> を使用ã—ã¦ãã ã•ã„。"
-#: ../cli/src/connections.c:2331
+#: ../cli/src/connections.c:2555
msgid "ethernet"
msgstr "Ethernet"
-#: ../cli/src/connections.c:2331
+#: ../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:2334
+#: ../cli/src/connections.c:2558
#, 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
+#: ../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] "
-#: ../cli/src/connections.c:2341 ../cli/src/connections.c:2386
-#: ../cli/src/connections.c:2540
+#: ../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:2350 ../cli/src/connections.c:2395
-#: ../cli/src/connections.c:2463
+#: ../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]: "
-#: ../cli/src/connections.c:2359
+#: ../cli/src/connections.c:2589
msgid "Cloned MAC [none]: "
msgstr "クローン㮠MAC [none]: "
-#. Ask for optional arguments
-#: ../cli/src/connections.c:2379
+#: ../cli/src/connections.c:2612
#, c-format
msgid "There are 5 optional arguments for 'InfiniBand' connection type.\n"
msgstr "'InfiniBand' 接続タイプã«ã¯ 5 種類ã®ã‚ªãƒ—ション引数ãŒã‚ã‚Šã¾ã™ã€‚\n"
-#: ../cli/src/connections.c:2404
+#: ../cli/src/connections.c:2643
msgid "Transport mode (datagram or connected) [datagram]: "
msgstr "転é€ãƒ¢ãƒ¼ãƒ‰ (datagram ã¾ãŸã¯ connected) [datagram]: "
-#: ../cli/src/connections.c:2415
+#: ../cli/src/connections.c:2656
msgid "Parent interface [none]: "
msgstr "親インターフェース [none]: "
-#: ../cli/src/connections.c:2424
+#: ../cli/src/connections.c:2667
msgid "P_KEY [none]: "
msgstr "P_KEY [none]: "
-#: ../cli/src/connections.c:2432
+#: ../cli/src/connections.c:2677
#, 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
+#: ../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:2457 ../cli/src/connections.c:2503
-#: ../cli/src/connections.c:2795
+#: ../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] "
-#. Ask for optional 'gsm' or 'cdma' arguments.
-#: ../cli/src/connections.c:2481
+#: ../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 "パスワード [none]: "
+
+#: ../cli/src/connections.c:2744
+msgid "Service [none]: "
+msgstr "サービス [none]: "
+
+#: ../cli/src/connections.c:2780
#, c-format
-msgid "There are 2 optional arguments for 'mobile broadband' connection type.\n"
+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
+#: ../cli/src/connections.c:2788 ../cli/src/connections.c:3233
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
+#: ../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:2509
+#: ../cli/src/connections.c:2813
msgid "Bluetooth type (panu, dun-gsm or dun-cdma) [panu]: "
msgstr "Bluetooth タイプ (panuã€dun-gsmã€dun-cdma) [panu]: "
-#: ../cli/src/connections.c:2517
+#: ../cli/src/connections.c:2821
#, 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
+#: ../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:2549
+#: ../cli/src/connections.c:2860
msgid "VLAN flags (<0-7>) [none]: "
msgstr "VLAN フラグ (<0-7>) [none]: "
-#: ../cli/src/connections.c:2558
+#: ../cli/src/connections.c:2871
msgid "Ingress priority maps [none]: "
msgstr "イングレス優先度マップ [none]: "
-#: ../cli/src/connections.c:2567
+#: ../cli/src/connections.c:2882
msgid "Egress priority maps [none]: "
msgstr "イーグレス優先度マップ [none]: "
-#. Ask for optional 'bond' arguments.
-#: ../cli/src/connections.c:2589
+#: ../cli/src/connections.c:2908
#, c-format
-msgid "There are 6 optional arguments for 'bond' connection type.\n"
-msgstr "'ボンド' 接続タイプã«ã¯ 6 種類ã®ã‚ªãƒ—ション引数ãŒã‚ã‚Šã¾ã™ã€‚\n"
+msgid "There are optional arguments for 'bond' connection type.\n"
+msgstr "'bond' 接続タイプã«ã¯ã‚ªãƒ—ションã®å¼•æ•°ãŒã‚ã‚Šã¾ã™ã€‚\n"
-#: ../cli/src/connections.c:2597
+#: ../cli/src/connections.c:2918
msgid "Bonding mode [balance-rr]: "
msgstr "ボンドモード [balance-rr]: "
-#: ../cli/src/connections.c:2611
-msgid "Bonding miimon [100]): "
-msgstr "ボンド miimon [100]): "
+#: ../cli/src/connections.c:2934
+msgid "Bonding primary interface [none]: "
+msgstr "ボンドã®ãƒ—ライマリインターフェース [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 "ボンド㮠miimon [100]:"
-#: ../cli/src/connections.c:2614
-#, fuzzy, c-format
-#| msgid "Error: 'miimon': '%s' is not a valid number <0-%d>.\n"
+#: ../cli/src/connections.c:2962
+#, c-format
msgid "Error: 'miimon': '%s' is not a valid number <0-%u>.\n"
-msgstr "エラー: 'miimon': '%s' ã¯æœ‰åŠ¹ãªæ•°å€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“ <0-%d>。\n"
+msgstr "エラー: 'miimon': '%s' ã¯ç„¡åŠ¹ãªæ•°å€¤ã§ã™ <0-%u>。\n"
-#: ../cli/src/connections.c:2620
-msgid "Bonding downdelay [0]): "
-msgstr "ボンド downdelay [0]): "
+#: ../cli/src/connections.c:2970
+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"
+#: ../cli/src/connections.c:2973
+#, c-format
msgid "Error: 'downdelay': '%s' is not a valid number <0-%u>.\n"
-msgstr "エラー: 'downdelay': '%s' ã¯æœ‰åŠ¹ãªæ•°å€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“ <0-%d>。\n"
+msgstr "エラー: 'downdelay': '%s' ã¯ç„¡åŠ¹ãªæ•°å€¤ã§ã™ <0-%u>。\n"
-#: ../cli/src/connections.c:2629
-msgid "Bonding updelay [0]): "
-msgstr "ボンド updelay [0]): "
+#: ../cli/src/connections.c:2981
+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"
+#: ../cli/src/connections.c:2984
+#, c-format
msgid "Error: 'updelay': '%s' is not a valid number <0-%u>.\n"
-msgstr "Error: 'updelay': '%s' ã¯æœ‰åŠ¹ãªæ•°å€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“ <0-%d>。\n"
+msgstr "エラー: 'updelay': '%s' ã¯ç„¡åŠ¹ãªæ•°å€¤ã§ã™ <0-%u>。\n"
-#: ../cli/src/connections.c:2638
-msgid "Bonding arp-interval [0]): "
-msgstr "ボンド arp-interval [0]): "
+#: ../cli/src/connections.c:2993
+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"
+#: ../cli/src/connections.c:2996
+#, c-format
msgid "Error: 'arp-interval': '%s' is not a valid number <0-%u>.\n"
-msgstr "Error: 'arp-interval': '%s' ã¯æœ‰åŠ¹ãªæ•°å€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“ <0-%d>。\n"
+msgstr "エラー: 'arp-interval': '%s' ã¯ç„¡åŠ¹ãªæ•°å€¤ã§ã™ <0-%u>。\n"
-#. FIXME: verify the string
-#: ../cli/src/connections.c:2647
-msgid "Bonding arp-ip-target [none]): "
-msgstr "ボンド arp-ip-target [none]): "
+#: ../cli/src/connections.c:3004
+msgid "Bonding arp-ip-target [none]: "
+msgstr "ボンド㮠arp-ip-target [none]: "
-#. Ask for optional 'bridge' arguments.
-#: ../cli/src/connections.c:2664
+#: ../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 設定 [none]: "
+
+#: ../cli/src/connections.c:3051
+msgid "team"
+msgstr "team "
+
+#: ../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"
+msgstr "'bridge' 接続タイプã«ã¯ 6 種類ã®ã‚ªãƒ—ション引数ãŒã‚ã‚Šã¾ã™ã€‚\n"
-#: ../cli/src/connections.c:2672
+#: ../cli/src/connections.c:3081
msgid "Enable STP (yes/no) [yes]: "
msgstr "STP ã®æœ‰åŠ¹åŒ– (yes/no) [yes]: "
-#: ../cli/src/connections.c:2676
+#: ../cli/src/connections.c:3085
#, 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:3093
+msgid "STP priority [128]: "
+msgstr "STP ã®å„ªå…ˆåº¦ [128]: "
-#: ../cli/src/connections.c:2686
+#: ../cli/src/connections.c:3097
#, c-format
msgid "Error: 'priority': '%s' is not a valid number <0-%d>.\n"
-msgstr "エラー: '優先度': '%s' ã¯æœ‰åŠ¹ãªæ•°å€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“ <0-%d>。\n"
+msgstr "エラー: 'priority': '%s' ã¯ç„¡åŠ¹ãªæ•°å€¤ã§ã™ <0-%d>。\n"
-#: ../cli/src/connections.c:2692
-msgid "Forward delay [15]): "
-msgstr "フォワードé…延 [15]): "
+#: ../cli/src/connections.c:3105
+msgid "Forward delay [15]: "
+msgstr "フォワードé…延 [15]:"
-#: ../cli/src/connections.c:2696
+#: ../cli/src/connections.c:3109
#, c-format
msgid "Error: 'forward-delay': '%s' is not a valid number <2-30>.\n"
-msgstr "エラー: 'フォワードé…延': '%s' ã¯æœ‰åŠ¹ãªæ•°å€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“ <2-30>。\n"
+msgstr "エラー: 'forward-delay': '%s' ã¯ç„¡åŠ¹ãªæ•°å€¤ã§ã™ <2-30>。\n"
-#: ../cli/src/connections.c:2703
-msgid "Hello time [2]): "
-msgstr "Hello タイム [2]): "
+#: ../cli/src/connections.c:3118
+msgid "Hello time [2]: "
+msgstr "Hello タイム [2]: "
-#: ../cli/src/connections.c:2707
+#: ../cli/src/connections.c:3122
#, c-format
msgid "Error: 'hello-time': '%s' is not a valid number <1-10>.\n"
-msgstr "エラー: 'hello タイム': '%s' ã¯æœ‰åŠ¹ãªæ•°å€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“ <1-10>。\n"
+msgstr "エラー: 'hello-time': '%s' ã¯ç„¡åŠ¹ãªæ•°å€¤ã§ã™ <1-10>。\n"
-#: ../cli/src/connections.c:2713
-msgid "Max age [20]): "
-msgstr "最大エイジ [20]): "
+#: ../cli/src/connections.c:3130
+msgid "Max age [20]: "
+msgstr "最大エイジ [20]: "
-#: ../cli/src/connections.c:2717
+#: ../cli/src/connections.c:3134
#, c-format
msgid "Error: 'max-age': '%s' is not a valid number <6-40>.\n"
-msgstr "エラー: '最大エイジ': '%s' ã¯æœ‰åŠ¹ãªæ•°å€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“ <6-40>。\n"
+msgstr "エラー: 'max-age': '%s' ã¯ç„¡åŠ¹ãªæ•°å€¤ã§ã™ <6-40>。\n"
-#: ../cli/src/connections.c:2723
-msgid "MAC address ageing time [300]): "
-msgstr "MAC アドレスエージングタイム [300]): "
+#: ../cli/src/connections.c:3142
+msgid "MAC address ageing time [300]: "
+msgstr "MAC アドレスã®ã‚¨ãƒ¼ã‚¸ãƒ³ã‚°ã‚¿ã‚¤ãƒ  [300]:"
-#: ../cli/src/connections.c:2727
+#: ../cli/src/connections.c:3146
#, c-format
msgid "Error: 'ageing-time': '%s' is not a valid number <0-1000000>.\n"
-msgstr "エラー: 'エージングタイム': '%s' ã¯æœ‰åŠ¹ãªæ•°å€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“ <0-1000000>。\n"
+msgstr "エラー: 'ageing-time': '%s' ã¯ç„¡åŠ¹ãªæ•°å€¤ã§ã™ <0-1000000>。\n"
-#. Ask for optional 'bridge-slave' arguments.
-#: ../cli/src/connections.c:2745
+#: ../cli/src/connections.c:3167
#, c-format
msgid "There are 3 optional arguments for 'bridge-slave' connection type.\n"
-msgstr "'ブリッジスレーブ' 接続タイプã«ã¯ 3 種類ã®ã‚ªãƒ—ション引数ãŒã‚ã‚Šã¾ã™ã€‚\n"
+msgstr "'bridge-slave' 接続タイプã«ã¯ 3 種類ã®ã‚ªãƒ—ション引数ãŒã‚ã‚Šã¾ã™ã€‚\n"
-#: ../cli/src/connections.c:2752
-msgid "Bridge port priority [32]): "
-msgstr "ブリッジãƒãƒ¼ãƒˆå„ªå…ˆåº¦ [32]): "
+#: ../cli/src/connections.c:3176
+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:3189
+msgid "Bridge port STP path cost [100]: "
+msgstr "ブリッジãƒãƒ¼ãƒˆã® STP パスコスト [100]: "
-#: ../cli/src/connections.c:2775
+#: ../cli/src/connections.c:3203
msgid "Hairpin (yes/no) [yes]: "
msgstr "ヘアピン (yes/no) [yes]: "
-#: ../cli/src/connections.c:2779
+#: ../cli/src/connections.c:3207
#, c-format
msgid "Error: 'hairpin': '%s'.\n"
-msgstr "エラー: 'ヘアピン': '%s'。\n"
+msgstr "エラー: 'hairpin': '%s'。\n"
-#. Ask for optional 'vpn' arguments.
-#: ../cli/src/connections.c:2794
+#: ../cli/src/connections.c:3225
#, 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
+#: ../cli/src/connections.c:3249
#, 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:3258
+msgid "OLPC Mesh channel [1]: "
+msgstr "OLPC メッシュãƒãƒ£ãƒ³ãƒãƒ« [1]: "
-#: ../cli/src/connections.c:2825
+#: ../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"
+msgstr "エラー: 'channel': '%s' ã¯ç„¡åŠ¹ãªæ•°å€¤ã§ã™ <1-13>。\n"
-#: ../cli/src/connections.c:2831
+#: ../cli/src/connections.c:3269
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
+#: ../cli/src/connections.c:3317
msgid "IPv4 address (IP[/plen] [gateway]) [none]: "
msgstr "IPv4 アドレス (IP[/plen] [gateway]) [none]: "
-#: ../cli/src/connections.c:2890 ../cli/src/connections.c:2911
+#: ../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 "Warning: ignoring garbage at the end: '%s'\n"
-msgstr ""
+msgid " Address successfully added: %s %s\n"
+msgstr "アドレスãŒæ­£å¸¸ã«è¿½åŠ ã•ã‚Œã¾ã—ãŸ: %s %s\n"
-#: ../cli/src/connections.c:2892 ../cli/src/connections.c:2913
-#: ../cli/src/connections.c:4069 ../cli/src/connections.c:4078
+#: ../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:2904
-msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
-msgstr "IPv6 address (IP[/plen] [gateway]) [none]: "
+#: ../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:3062
+#: ../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 "エラー: '親': 'p-key' ãŒãªã„ã¨ä½¿ç”¨ã§ãã¾ã›ã‚“。"
+msgstr "エラー: 'parent': 'p-key' ãŒãªã„ã¨ä½¿ç”¨ã§ãã¾ã›ã‚“。"
-#: ../cli/src/connections.c:3118 ../cli/src/connections.c:3986
+#: ../cli/src/connections.c:3569 ../cli/src/connections.c:4562
msgid "SSID: "
msgstr "SSID: "
-#: ../cli/src/connections.c:3121 ../cli/src/connections.c:3989
+#: ../cli/src/connections.c:3572 ../cli/src/connections.c:4565
msgid "Error: 'ssid' is required."
msgstr "エラー: 'ssid' ãŒå¿…è¦ã§ã™ã€‚"
-#: ../cli/src/connections.c:3185
+#: ../cli/src/connections.c:3636
msgid "WiMAX NSP name: "
msgstr "WiMAX NSP å: "
-#: ../cli/src/connections.c:3188
+#: ../cli/src/connections.c:3639
msgid "Error: 'nsp' is required."
msgstr "エラー: 'nsp' ãŒå¿…è¦ã§ã™ã€‚"
-#: ../cli/src/connections.c:3244
+#: ../cli/src/connections.c:3694
+msgid "PPPoE username: "
+msgstr "PPPoE ユーザーå: "
+
+#: ../cli/src/connections.c:3697
+msgid "Error: 'username' is required."
+msgstr "エラー: 「ユーザーåã€ã‚’入力ã—ã¦ãã ã•ã„。"
+
+#: ../cli/src/connections.c:3768
msgid "APN: "
msgstr "APN: "
-#: ../cli/src/connections.c:3247
+#: ../cli/src/connections.c:3771
msgid "Error: 'apn' is required."
msgstr "エラー: 'apn' ãŒå¿…è¦ã§ã™ã€‚"
-#: ../cli/src/connections.c:3306
+#: ../cli/src/connections.c:3830
msgid "Bluetooth device address: "
msgstr "Bluetooth デãƒã‚¤ã‚¹ã‚¢ãƒ‰ãƒ¬ã‚¹: "
-#: ../cli/src/connections.c:3309
+#: ../cli/src/connections.c:3833
msgid "Error: 'addr' is required."
msgstr "エラー: 'addr' ãŒå¿…è¦ã§ã™ã€‚"
-#: ../cli/src/connections.c:3352
+#: ../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:3397
+#: ../cli/src/connections.c:3921
msgid "VLAN parent device or connection UUID: "
msgstr "VLAN 親デãƒã‚¤ã‚¹ã¾ãŸã¯æŽ¥ç¶š UUID: "
-#: ../cli/src/connections.c:3400
+#: ../cli/src/connections.c:3924
msgid "Error: 'dev' is required."
msgstr "エラー: 'dev' ãŒå¿…è¦ã§ã™ã€‚"
-#: ../cli/src/connections.c:3404
+#: ../cli/src/connections.c:3928
msgid "VLAN ID <0-4095>: "
msgstr "VLAN ID <0-4095>: "
-#: ../cli/src/connections.c:3407
+#: ../cli/src/connections.c:3931
msgid "Error: 'id' is required."
msgstr "エラー: 'id' ãŒå¿…è¦ã§ã™ã€‚"
-#: ../cli/src/connections.c:3413
+#: ../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:3423
+#: ../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:3553
+#: ../cli/src/connections.c:4082
#, c-format
msgid "Error: 'mode': %s."
msgstr "エラー: 'モード': %s。"
-#: ../cli/src/connections.c:3595
+#: ../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:3598 ../cli/src/connections.c:3669
-#: ../cli/src/connections.c:3840
+#: ../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:3603 ../cli/src/connections.c:3674
-#: ../cli/src/connections.c:3851
+#: ../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"
+msgid ""
+"Warning: 'type' is currently ignored. We only support ethernet slaves for "
+"now.\n"
msgstr "警告: ç¾åœ¨ã€'タイプ' ã¯ç„¡è¦–ã•ã‚Œã¦ã„ã¾ã™ã€‚対応ã—ã¦ã„ã‚‹ã®ã¯ Ethernet スレーブã®ã¿ã«ãªã‚Šã¾ã™ã€‚\n"
-#: ../cli/src/connections.c:3666
+#: ../cli/src/connections.c:4226
msgid "Team master: "
-msgstr "ãƒãƒ¼ãƒ ãƒžã‚¹ã‚¿ãƒ¼: "
+msgstr "team マスター: "
-#: ../cli/src/connections.c:3753
+#: ../cli/src/connections.c:4329
#, c-format
msgid "Error: 'stp': %s."
msgstr "エラー:'stp': %s。"
-#: ../cli/src/connections.c:3837
+#: ../cli/src/connections.c:4413
msgid "Bridge master: "
msgstr "ブリッジマスター: "
-#: ../cli/src/connections.c:3845
+#: ../cli/src/connections.c:4421
#, c-format
msgid "Error: 'master': '%s' is not valid UUID nor interface."
msgstr "エラー: 'マスター': '%s' ã¯æœ‰åŠ¹ãª UUID ã§ã‚‚インターフェースã§ã‚‚ã‚ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/connections.c:3878
+#: ../cli/src/connections.c:4454
#, c-format
msgid "Error: 'hairpin': %s."
msgstr "エラー: 'ヘアピン': %s。"
-#: ../cli/src/connections.c:3930
+#: ../cli/src/connections.c:4506
msgid "VPN type: "
msgstr "VPN タイプ: "
-#: ../cli/src/connections.c:3933
+#: ../cli/src/connections.c:4509
msgid "Error: 'vpn-type' is required."
msgstr "エラー: ’vpn タイプ’ ãŒå¿…è¦ã§ã™ã€‚"
-#: ../cli/src/connections.c:3944
+#: ../cli/src/connections.c:4520
#, c-format
msgid "Error: 'vpn-type': %s."
msgstr "エラー: 'vpn タイプ': %s。"
-#: ../cli/src/connections.c:4002
+#: ../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:4037
+#: ../cli/src/connections.c:4613
#, 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:4133
+#: ../cli/src/connections.c:4711
#, c-format
msgid "Error: Failed to add '%s' connection: (%d) %s"
msgstr "エラー: '%s' 接続ã®è¿½åŠ ã«å¤±æ•—ã—ã¾ã—ãŸ: (%d) %s"
-#: ../cli/src/connections.c:4137
+#: ../cli/src/connections.c:4715
#, c-format
msgid "Connection '%s' (%s) successfully added.\n"
msgstr "接続 '%s' (%s) ãŒæ­£å¸¸ã«è¿½åŠ ã•ã‚Œã¾ã—ãŸã€‚\n"
-#: ../cli/src/connections.c:4183
+#: ../cli/src/connections.c:4761
msgid "Connection type: "
msgstr "接続タイプ: "
-#: ../cli/src/connections.c:4187
+#: ../cli/src/connections.c:4765
#, c-format
msgid "Error: 'type' argument is required."
msgstr "エラー: 'タイプ' 引数ãŒå¿…è¦ã§ã™ã€‚"
-#: ../cli/src/connections.c:4193
+#: ../cli/src/connections.c:4771
#, c-format
msgid "Error: invalid connection type; %s."
msgstr "エラー: 無効ãªæŽ¥ç¶šã‚¿ã‚¤ãƒ—; %s。"
-#: ../cli/src/connections.c:4202
+#: ../cli/src/connections.c:4780
#, c-format
msgid "Error: 'autoconnect': %s."
msgstr "エラー: '自動接続': %s。"
-#: ../cli/src/connections.c:4218
+#: ../cli/src/connections.c:4796
msgid "Interface name [*]: "
msgstr "インターフェースå [*]: "
-#: ../cli/src/connections.c:4225
+#: ../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:4847
+#: ../cli/src/connections.c:5627
#, 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
+#: ../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"
+"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"
-"back :: 一ã¤ä¸Šã®ãƒ¬ãƒ™ãƒ«ã«ç§»å‹• (戻る)\n"
-"help/? [<command>] :: ã“ã®ãƒ˜ãƒ«ãƒ—を表示\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"
+"quit :: nmcli を終了ã™ã‚‹\n"
-#: ../cli/src/connections.c:4951
+#: ../cli/src/connections.c:5735
#, c-format
msgid ""
-"goto <setting>[.<prop>] | <prop> :: enter setting/property for editation\n"
+"goto <setting>[.<prop>] | <prop> :: enter setting/property for editing\n"
"\n"
"This command enters into a setting or property for editing it.\n"
"\n"
@@ -1675,15 +1928,15 @@ msgid ""
" nmcli connection> goto secondaries\n"
" nmcli> goto ipv4.addresses\n"
msgstr ""
-"goto <setting>[.<prop>] | <prop> :: 設定ï¼ãƒ—ロパティを入力ã—ã¦å¤‰æ›´\n"
+"goto <setting>[.<prop>] | <prop> :: 設定/プロパティã«å…¥ã‚Šç·¨é›†ã™ã‚‹\n"
"\n"
-"設定やプロパティã®å¤‰æ›´ãƒ¢ãƒ¼ãƒ‰ã«å…¥ã‚Šã¾ã™ã€‚\n"
+"ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使ã£ã¦è¨­å®šã¾ãŸã¯ãƒ—ロパティã«å…¥ã‚Šç·¨é›†ã‚’è¡Œã„ã¾ã™ã€‚\n"
"\n"
"例: nmcli> goto connection\n"
" nmcli connection> goto secondaries\n"
" nmcli> goto ipv4.addresses\n"
-#: ../cli/src/connections.c:4958
+#: ../cli/src/connections.c:5742
#, c-format
msgid ""
"remove <setting>[.<prop>] :: remove setting or reset property value\n"
@@ -1694,43 +1947,42 @@ msgid ""
"Examples: nmcli> remove wifi-sec\n"
" nmcli> remove eth.mtu\n"
msgstr ""
-"remove <setting>[.<prop>] :: 設定ã®å‰Šé™¤ã¾ãŸã¯ãƒ—ロパティ値ã®ãƒªã‚»ãƒƒãƒˆ\n"
+"remove <setting>[.<prop>] :: 設定を削除ã™ã‚‹ã€ã¾ãŸã¯ãƒ—ロパティ値をリセットã™ã‚‹\n"
"\n"
-"接続ã‹ã‚‰å…¨è¨­å®šã‚’削除ã—ã¾ã™ã€‚ã¾ãŸã¯ã€ãƒ—ロパティを指定ã—ã¦ã„ã‚‹å ´åˆã«ã¯\n"
-"ãã®ãƒ—ロパティをデフォルト値ã¨ã—ã¦ãƒªã‚»ãƒƒãƒˆã—ã¾ã™ã€‚\n"
+"ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使ã£ã¦æŽ¥ç¶šã‹ã‚‰å…¨è¨­å®šã‚’削除ã—ã¾ã™ã€‚ã¾ãŸã¯ã€ãƒ—ロパティを\n"
+"指定ã—ã¦ã„ã‚‹å ´åˆã«ã¯ãã®ãƒ—ロパティをデフォルト値ã¨ã—ã¦ãƒªã‚»ãƒƒãƒˆã—ã¾ã™ã€‚\n"
"\n"
"例: nmcli> remove wifi-sec\n"
" nmcli> remove eth.mtu\n"
-#: ../cli/src/connections.c:4965
+#: ../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> s con.id My connection\n"
+"Example: nmcli> set con.id My connection\n"
msgstr ""
-"set [<setting>.<prop> <value>] :: プロパティ値ã®è¨­å®š\n"
+"set [<setting>.<prop> <value>] :: プロパティ値を設定ã™ã‚‹\n"
"\n"
-"プロパティ値を設定ã—ã¾ã™ã€‚\n"
+"ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使ã£ã¦ãƒ—ロパティ値を設定ã—ã¾ã™ã€‚\n"
"\n"
-"例: nmcli> s con.id My connection\n"
+"例: nmcli> set con.id My connection\n"
-#: ../cli/src/connections.c:4970
+#: ../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"
+"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"
+"describe [<setting>.<prop>] :: プロパティ値を表示ã™ã‚‹\n"
"\n"
-"例: nmcli> s con.id My connection\n"
+"プロパティ詳細を表示ã—ã¾ã™ã€‚NM ã®è¨­å®šãŠã‚ˆã³ãƒ—ロパティã®å…¨è©³ç´°ã«ã¤ã„ã¦ã¯ nm-settings(5) ã® man ページをå‚ç…§ã—ã¦ãã ã•ã„。\n"
-#: ../cli/src/connections.c:4975
+#: ../cli/src/connections.c:5759
#, c-format
msgid ""
"print [all] :: print setting or connection values\n"
@@ -1739,18 +1991,19 @@ msgid ""
"\n"
"Example: nmcli ipv4> print all\n"
msgstr ""
-"print [all] :: 設定ã¾ãŸã¯æŽ¥ç¶šå€¤ã®è¡¨ç¤º\n"
+"print [all] :: 設定ã¾ãŸã¯æŽ¥ç¶šå€¤ã‚’出力ã™ã‚‹\n"
"\n"
"ç¾åœ¨ã®ãƒ—ロパティã¾ãŸã¯æŽ¥ç¶šå…¨ä½“を表示ã—ã¾ã™ã€‚\n"
"\n"
"例: nmcli ipv4> print all\n"
-#: ../cli/src/connections.c:4980
+#: ../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"
+"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"
@@ -1762,36 +2015,51 @@ msgstr ""
"例: nmcli> verify\n"
" nmcli bond> verify\n"
-#: ../cli/src/connections.c:4987
+#: ../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"
+msgstr "save :: 接続ã®ä¿å­˜\n"
"\n"
"接続をä¿å­˜ã™ã‚‹ NetworkManager ã«ã“ã®æŽ¥ç¶šã‚’é€ä¿¡ã—ã¾ã™ã€‚\n"
-#: ../cli/src/connections.c:4991 ../cli/src/connections.c:5141
+#: ../cli/src/connections.c:5775
#, c-format
msgid ""
-"back :: go to upper menu level\n"
+"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 ""
-"back :: 一ã¤ä¸Šã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ãƒ¬ãƒ™ãƒ«ã«ç§»å‹•\n"
+"activate [<ifname>] [/<ap>|<nsp>] :: 接続をアクティベートã™ã‚‹\n"
+"\n"
+"接続をアクティベートã—ã¾ã™ã€‚\n"
"\n"
+"使用ã§ãるオプション:\n"
+"<ifname> - ã“ã®ãƒ‡ãƒã‚¤ã‚¹ã§æŽ¥ç¶šã‚’アクティベートã™ã‚‹\n"
+"/<ap>|<nsp> - AP (Wi-Fi) ã¾ãŸã¯ NSP (WiMAX) (<ifname> ãŒæŒ‡å®šã•ã‚Œã¦ã„ãªã„å ´åˆã¯ / を先頭ã«ä»˜ã‘ã‚‹)\n"
-#: ../cli/src/connections.c:4994
+#: ../cli/src/connections.c:5782 ../cli/src/connections.c:5932
#, c-format
-msgid ""
-"help/? [<command>] :: help for the nmcli commands\n"
+msgid "back :: go to upper menu level\n"
"\n"
-msgstr ""
-"help/? [<command>] :: nmcli コマンドã®ãƒ˜ãƒ«ãƒ—\n"
+msgstr "back :: 一ã¤ä¸Šã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ãƒ¬ãƒ™ãƒ«ã«ç§»å‹•\n"
"\n"
-#: ../cli/src/connections.c:4997
+#: ../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"
@@ -1834,27 +2102,24 @@ msgstr ""
" nmcli> nmcli save-confirmation no\n"
" nmcli> nmcli prompt-color 3\n"
-#: ../cli/src/connections.c:5017 ../cli/src/connections.c:5147
+#: ../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"
+"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
+#: ../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"
-#. TRANSLATORS: do not translate command names and keywords before ::
-#. * However, you should translate terms enclosed in <>.
-#.
-#: ../cli/src/connections.c:5088
+#: ../cli/src/connections.c:5879
#, c-format
msgid ""
"---[ Property menu ]---\n"
@@ -1863,7 +2128,8 @@ msgid ""
"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"
+"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"
@@ -1879,758 +2145,746 @@ msgstr ""
"help/? [<command>] :: ã“ã®ãƒ˜ãƒ«ãƒ—ã¾ãŸã¯ã‚³ãƒžãƒ³ãƒ‰ã®è©³ç´°ã‚’表示\n"
"quit :: nmcli ã®çµ‚了\n"
-#: ../cli/src/connections.c:5113
+#: ../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"
+msgstr "set [<value>] :: æ–°ã—ã„値ã®è¨­å®š\n"
"\n"
"ã“ã®ãƒ—ロパティã«æŒ‡å®šã—㟠<value> を設定ã—ã¾ã™ã€‚\n"
-#: ../cli/src/connections.c:5117
+#: ../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"
+"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"
+"ã“ã®ãƒ—ロパティã®ã‚¿ã‚¤ãƒ—ãŒã‚³ãƒ³ãƒ†ãƒŠãƒ¼ã®å ´åˆã€æŒ‡å®šã—㟠<value> を追加ã—ã¾ã™ã€‚å˜ä¸€å€¤ã®ãƒ—ロパティã®å ´åˆã¯ãã®å€¤ãŒç½®æ›ã•ã‚Œã¾ã™ ('set' "
+"ã¨åŒã˜)。\n"
-#: ../cli/src/connections.c:5123
+#: ../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"
+msgstr "change :: ç¾åœ¨ã®å€¤ã‚’変更\n"
"\n"
"ç¾åœ¨ã®å€¤ã‚’表示ã—ã€ãã®å€¤ã‚’変更ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚\n"
-#: ../cli/src/connections.c:5127
+#: ../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"
+msgstr "remove [<index>|<option>] :: 値ã®å‰Šé™¤\n"
"\n"
"プロパティ値を削除ã—ã¾ã™ (プロパティ値をデフォルトã«æˆ»ã™)。\n"
-#: ../cli/src/connections.c:5131
+#: ../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"
+"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
+#: ../cli/src/connections.c:5927
#, c-format
msgid ""
-"print [property|setting|connection] :: print property (setting, connection) value(s)\n"
+"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"
+"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
+#: ../cli/src/connections.c:5935
#, c-format
-msgid ""
-"help/? [<command>] :: help for nmcli commands\n"
+msgid "help/? [<command>] :: help for nmcli commands\n"
"\n"
-msgstr ""
-"help/? [<command>] :: nmcli コマンドã®ãƒ˜ãƒ«ãƒ—\n"
+msgstr "help/? [<command>] :: nmcli コマンドã®ãƒ˜ãƒ«ãƒ—\n"
"\n"
-#: ../cli/src/connections.c:5232
+#: ../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"
-#. TRANSLATORS: status line in nmcli connection editor
-#: ../cli/src/connections.c:5250
+#: ../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:5300 ../cli/src/connections.c:5696
-#: ../cli/src/connections.c:5754
+#: ../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:5317 ../cli/src/connections.c:5336
-#: ../cli/src/connections.c:5702 ../cli/src/connections.c:5761
+#: ../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:5329
+#: ../cli/src/connections.c:6221
#, c-format
msgid "Edit '%s' value: "
msgstr "'%s' 値ã®ç·¨é›†: "
-#: ../cli/src/connections.c:5358
+#: ../cli/src/connections.c:6250
#, c-format
msgid "Error: %s\n"
msgstr "エラー: %s\n"
-#: ../cli/src/connections.c:5364 ../cli/src/connections.c:5835
-#: ../cli/src/connections.c:5876
+#: ../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:5385
+#: ../cli/src/connections.c:6277
#, c-format
msgid "Unknown command argument: '%s'\n"
msgstr "ä¸æ˜Žãªã‚³ãƒžãƒ³ãƒ‰å¼•æ•°: '%s'\n"
-#: ../cli/src/connections.c:5405 ../cli/src/connections.c:6132
+#: ../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:5517
+#: ../cli/src/connections.c:6409
#, c-format
msgid "Available settings: %s\n"
msgstr "使用å¯èƒ½ãªè¨­å®š: %s\n"
-#: ../cli/src/connections.c:5526
+#: ../cli/src/connections.c:6418
#, c-format
msgid "Error: invalid setting name; %s\n"
msgstr "エラー: 無効ãªè¨­å®šå; %s\n"
-#: ../cli/src/connections.c:5543
+#: ../cli/src/connections.c:6435
#, c-format
msgid "Available properties: %s\n"
msgstr "使用å¯èƒ½ãªãƒ—ロパティ: %s\n"
-#: ../cli/src/connections.c:5551
+#: ../cli/src/connections.c:6443
#, c-format
msgid "Error: property %s\n"
msgstr "エラー: プロパティ %s\n"
-#: ../cli/src/connections.c:5578
+#: ../cli/src/connections.c:6484
msgid ""
-"Saving the connection with 'autoconnect=yes'. That might result in an immediate activation of the connection.\n"
+"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
+#: ../cli/src/connections.c:6557
#, c-format
msgid "You may edit the following settings: %s\n"
msgstr "次ã®è¨­å®šã‚’変更ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™: %s\n"
-#: ../cli/src/connections.c:5694 ../cli/src/connections.c:5752
+#: ../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:5706 ../cli/src/connections.c:5917
+#: ../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:5707
+#: ../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:5722 ../cli/src/connections.c:5855
-#: ../cli/src/connections.c:5934
+#: ../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:5732
+#: ../cli/src/connections.c:6651
#, c-format
msgid "Error: missing setting for '%s' property\n"
msgstr "エラー: '%s' プロパティ用ã®è¨­å®šãŒã‚ã‚Šã¾ã›ã‚“\n"
-#: ../cli/src/connections.c:5739
+#: ../cli/src/connections.c:6658
#, c-format
msgid "Error: invalid property: %s\n"
msgstr "エラー: 無効ãªãƒ—ロパティ: %s\n"
-#: ../cli/src/connections.c:5788
+#: ../cli/src/connections.c:6707
#, c-format
msgid "Error: unknown setting '%s'\n"
msgstr "エラー: ä¸æ˜Žãªè¨­å®š '%s'\n"
-#: ../cli/src/connections.c:5801
+#: ../cli/src/connections.c:6720
#, c-format
msgid "You may edit the following properties: %s\n"
msgstr "変更ã§ãã‚‹ã®ã¯æ¬¡ã®ãƒ—ロパティã«ãªã‚Šã¾ã™: %s\n"
-#: ../cli/src/connections.c:5840
+#: ../cli/src/connections.c:6764
#, c-format
msgid "Error: no argument given; valid are [%s]\n"
msgstr "エラー: 引数ãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“; [%s] ãŒæœ‰åŠ¹ãªå¼•æ•°ã«ãªã‚Šã¾ã™\n"
-#: ../cli/src/connections.c:5853
+#: ../cli/src/connections.c:6777
#, c-format
msgid "Setting '%s' is not present in the connection.\n"
msgstr "ã“ã®æŽ¥ç¶šã«ã¯è¨­å®š '%s' ã¯ã‚ã‚Šã¾ã›ã‚“。\n"
-#: ../cli/src/connections.c:5893
+#: ../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:5918
+#: ../cli/src/connections.c:6843
#, c-format
msgid "use 'goto <setting>' first, or 'describe <setting>.<property>'\n"
-msgstr "ã¾ãšå…ˆã« 'goto <setting>' を使用ã™ã‚‹ã‹ã€'describe <setting>.<property>' を使用ã—ã¦ãã ã•ã„\n"
+msgstr ""
+"ã¾ãšå…ˆã« 'goto <setting>' を使用ã™ã‚‹ã‹ã€'describe <setting>.<property>' を使用ã—ã¦ãã ã•ã„\n"
-#: ../cli/src/connections.c:5959
+#: ../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:5983
+#: ../cli/src/connections.c:6908
#, c-format
msgid "Error: '%s' setting not present\n"
msgstr "エラー: '%s' 設定ã¯ã‚ã‚Šã¾ã›ã‚“\n"
-#: ../cli/src/connections.c:5986
+#: ../cli/src/connections.c:6911
#, c-format
msgid "Error: unknown setting: '%s'\n"
msgstr "エラー: ä¸æ˜Žãªè¨­å®š: '%s'\n"
-#: ../cli/src/connections.c:6002
+#: ../cli/src/connections.c:6927
#, c-format
msgid "Verify setting '%s': %s\n"
msgstr "設定 '%s' ã®ç¢ºèª: %s\n"
-#: ../cli/src/connections.c:6009
+#: ../cli/src/connections.c:6934
#, c-format
msgid "Verify connection: %s\n"
msgstr "接続ã®ç¢ºèª: %s\n"
-#: ../cli/src/connections.c:6048
+#: ../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:6055
+#: ../cli/src/connections.c:6980
#, c-format
msgid "Connection '%s' (%s) successfully saved.\n"
msgstr "接続 '%s' (%s) ãŒæ­£å¸¸ã«ä¿å­˜ã•ã‚Œã¾ã—ãŸã€‚\n"
-#: ../cli/src/connections.c:6063
+#: ../cli/src/connections.c:7014
#, c-format
msgid "Error: connection verification failed: %s\n"
msgstr "エラー: 接続ã®ç¢ºèªã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
-#: ../cli/src/connections.c:6064
+#: ../cli/src/connections.c:7015
msgid "(unknown error)"
msgstr "(ä¸æ˜Žãªã‚¨ãƒ©ãƒ¼)"
-#: ../cli/src/connections.c:6087
+#: ../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 "エラー: status-line: %s\n"
-#: ../cli/src/connections.c:6095
+#: ../cli/src/connections.c:7113
#, c-format
msgid "Error: save-confirmation: %s\n"
msgstr "エラー: save-confirmation: %s\n"
-#: ../cli/src/connections.c:6103
+#: ../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:6115
+#: ../cli/src/connections.c:7133
#, c-format
msgid "Current nmcli configuration:\n"
msgstr "ç¾åœ¨ã® nmcli 設定:\n"
-#: ../cli/src/connections.c:6123
+#: ../cli/src/connections.c:7141
#, c-format
msgid "Invalid configuration option '%s'; allowed [%s]\n"
msgstr "無効ãªè¨­å®šã‚ªãƒ—ション '%s'; [%s] ãŒè¨±å¯ã•ã‚Œã¦ã„ã¾ã™\n"
-#: ../cli/src/connections.c:6323
+#: ../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"
+">>> 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"
+" - 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"
+" - 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
+#: ../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:6361 ../cli/src/connections.c:6556
+#: ../cli/src/connections.c:7402 ../cli/src/connections.c:7599
#, c-format
msgid "Error: Unknown connection '%s'."
msgstr "エラー: ä¸æ˜ŽãªæŽ¥ç¶š '%s' ã§ã™ã€‚"
-#: ../cli/src/connections.c:6376
+#: ../cli/src/connections.c:7417
#, c-format
msgid "Warning: editing existing connection '%s'; 'type' argument is ignored\n"
msgstr "警告: 既存ã®æŽ¥ç¶š '%s' を編集ã—ã¦ã„ã¾ã™; 'タイプ' 引数ã¯ç„¡è¦–ã•ã‚Œã¾ã™\n"
-#: ../cli/src/connections.c:6379
+#: ../cli/src/connections.c:7420
#, c-format
-msgid "Warning: editing existing connection '%s'; 'con-name' argument is ignored\n"
+msgid ""
+"Warning: editing existing connection '%s'; 'con-name' argument is ignored\n"
msgstr "警告: 既存ã®æŽ¥ç¶š '%s' を編集ã—ã¦ã„ã¾ã™; 'con å' 引数ã¯ç„¡è¦–ã•ã‚Œã¾ã™\n"
-#: ../cli/src/connections.c:6393
+#: ../cli/src/connections.c:7434
#, c-format
msgid "Valid connection types: %s\n"
msgstr "有効ãªæŽ¥ç¶šã‚¿ã‚¤ãƒ—: %s\n"
-#: ../cli/src/connections.c:6395
+#: ../cli/src/connections.c:7436
#, c-format
msgid "Error: invalid connection type; %s\n"
msgstr "エラー: 無効ãªæŽ¥ç¶šã‚¿ã‚¤ãƒ—; %s\n"
-#: ../cli/src/connections.c:6431
+#: ../cli/src/connections.c:7472
#, c-format
msgid "===| nmcli interactive connection editor |==="
msgstr "===| nmcli インテラクティブ接続エディター |==="
-#: ../cli/src/connections.c:6434
+#: ../cli/src/connections.c:7475
#, c-format
msgid "Editing existing '%s' connection: '%s'"
msgstr "既存㮠'%s' 接続を編集中: '%s'"
-#: ../cli/src/connections.c:6436
+#: ../cli/src/connections.c:7477
#, c-format
msgid "Adding a new '%s' connection"
msgstr "æ–°è¦ã® '%s' 接続を追加中"
-#: ../cli/src/connections.c:6438
+#: ../cli/src/connections.c:7479
#, c-format
msgid "Type 'help' or '?' for available commands."
msgstr "使用ã§ãるコマンドを表示ã™ã‚‹ã«ã¯ 'help' ã¾ãŸã¯ '?' を入力ã—ã¾ã™ã€‚"
-#: ../cli/src/connections.c:6440
+#: ../cli/src/connections.c:7481
#, c-format
msgid "Type 'describe [<setting>.<prop>]' for detailed property description."
msgstr "プロパティ詳細を表示ã™ã‚‹ã«ã¯ 'describe [<setting>.<prop>]' を入力ã—ã¾ã™ã€‚"
-#: ../cli/src/connections.c:6477
+#: ../cli/src/connections.c:7520
#, c-format
msgid "Error: Failed to modify connection '%s': (%d) %s"
msgstr "エラー: 接続 '%s' ã®å¤‰æ›´ã«å¤±æ•—ã—ã¾ã—ãŸ: (%d) %s"
-#: ../cli/src/connections.c:6483
+#: ../cli/src/connections.c:7526
#, c-format
msgid "Connection '%s' (%s) successfully modified.\n"
msgstr "接続 '%s' (%s) ãŒæ­£å¸¸ã«å¤‰æ›´ã•ã‚Œã¾ã—ãŸã€‚\n"
-#: ../cli/src/connections.c:6510
+#: ../cli/src/connections.c:7553
#, c-format
msgid "Error: No arguments provided."
msgstr "エラー: 引数ãŒã‚ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/connections.c:6534
+#: ../cli/src/connections.c:7577
#, c-format
msgid "Error: connection ID is missing."
msgstr "エラー: 接続 ID ãŒã‚ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/connections.c:6539
+#: ../cli/src/connections.c:7582
#, c-format
msgid "Error: <setting>.<property> argument is missing."
msgstr "エラー: <setting>.<property> 引数ãŒã‚ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/connections.c:6562
+#: ../cli/src/connections.c:7605
#, c-format
msgid "Error: invalid <setting>.<property> '%s'."
msgstr "エラー: 無効㪠<setting>.<property> '%s' ã§ã™ã€‚"
-#: ../cli/src/connections.c:6577
+#: ../cli/src/connections.c:7620
#, c-format
msgid "Error: invalid or not allowed setting '%s': %s."
msgstr "エラー: 無効ã¾ãŸã¯è¨±å¯ã•ã‚Œã¦ã„ãªã„設定 '%s' ã§ã™: %s。"
-#: ../cli/src/connections.c:6598
+#: ../cli/src/connections.c:7641
#, c-format
msgid "Error: invalid property '%s': %s."
msgstr "エラー: 無効ãªãƒ—ロパティ '%s': %s。"
-#: ../cli/src/connections.c:6604
+#: ../cli/src/connections.c:7647
#, c-format
msgid "Error: failed to modify %s.%s: %s."
msgstr "エラー: %s.%s ã®å¤‰æ›´ã«å¤±æ•—ã—ã¾ã—ãŸ: %s。"
-#: ../cli/src/connections.c:6634
+#: ../cli/src/connections.c:7677
#, c-format
msgid "Error: Connection deletion failed: %s"
msgstr "エラー: 接続ã®å‰Šé™¤ã«å¤±æ•—ã—ã¾ã—ãŸ: %s"
-#: ../cli/src/connections.c:6704
+#: ../cli/src/connections.c:7747
#, c-format
msgid "Error: unknown connection: %s\n"
msgstr "エラー: ä¸æ˜ŽãªæŽ¥ç¶šã§ã™: %s\n"
-#. truncate trailing ", "
-#: ../cli/src/connections.c:6738
+#: ../cli/src/connections.c:7781
#, c-format
msgid "Error: cannot delete unknown connection(s): %s."
msgstr "エラー: ä¸æ˜ŽãªæŽ¥ç¶šã‚’削除ã§ãã¾ã›ã‚“: %s。"
-#: ../cli/src/connections.c:6822
+#: ../cli/src/connections.c:7852
#, c-format
-msgid "Error: 'configured' or 'active' command is expected for 'connection show'."
+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:6862
+#: ../cli/src/connections.c:7984
#, c-format
msgid "Error: '%s' is not valid 'connection' command."
msgstr "エラー: '%s' ã¯æœ‰åŠ¹ãª '接続' コマンドã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/connections.c:6927
+#: ../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:6937
+#: ../cli/src/connections.c:8063
#, c-format
msgid "Error: Can't obtain connections: settings service is not running."
msgstr "エラー: 接続をå–å¾—ã§ãã¾ã›ã‚“: 設定サービスãŒç¨¼åƒã—ã¦ã„ã¾ã›ã‚“。"
-#. 0
-#. 12
-#. 3
-#: ../cli/src/devices.c:71 ../cli/src/devices.c:110 ../cli/src/devices.c:207
-#: ../cli/src/devices.c:225
+#: ../cli/src/devices.c:71 ../cli/src/devices.c:87 ../cli/src/devices.c:184
+#: ../cli/src/devices.c:201
msgid "DEVICE"
msgstr "デãƒã‚¤ã‚¹"
-#. 0
-#: ../cli/src/devices.c:84
-msgid "CAPABILITIES"
-msgstr "能力"
-
-#. 1
-#: ../cli/src/devices.c:85
-msgid "WIFI-PROPERTIES"
-msgstr "WIFI-プロパティ"
-
-#. 2
-#. 5
-#: ../cli/src/devices.c:86 ../cli/src/devices.c:170
-msgid "AP"
-msgstr "AP"
-
-#. 3
-#: ../cli/src/devices.c:87
-msgid "WIRED-PROPERTIES"
-msgstr "有線接続-プロパティ"
-
-#. 4
-#: ../cli/src/devices.c:88
-msgid "WIMAX-PROPERTIES"
-msgstr "WIMAX-プロパティ"
-
-#. 5
-#. 0
-#: ../cli/src/devices.c:89 ../cli/src/devices.c:222
-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 "ボンド"
-
-#. 11
-#: ../cli/src/devices.c:95
-msgid "VLAN"
-msgstr "VLAN"
-
-#. 12
-#: ../cli/src/devices.c:96
-msgid "CONNECTIONS"
+#: ../cli/src/devices.c:75 ../cli/src/devices.c:103
+msgid "CONNECTION"
msgstr "接続"
-#. 2
-#: ../cli/src/devices.c:112
+#: ../cli/src/devices.c:76 ../cli/src/devices.c:104
+msgid "CON-UUID"
+msgstr "接続 UUID"
+
+#: ../cli/src/devices.c:89
msgid "VENDOR"
msgstr "ベンダー"
-#. 3
-#: ../cli/src/devices.c:113
+#: ../cli/src/devices.c:90
msgid "PRODUCT"
msgstr "製å“"
-#. 4
-#: ../cli/src/devices.c:114
+#: ../cli/src/devices.c:91
msgid "DRIVER"
msgstr "ドライãƒãƒ¼"
-#. 5
-#: ../cli/src/devices.c:115
+#: ../cli/src/devices.c:92
msgid "DRIVER-VERSION"
msgstr "ドライãƒãƒ¼ãƒãƒ¼ã‚¸ãƒ§ãƒ³"
-#. 6
-#: ../cli/src/devices.c:116
+#: ../cli/src/devices.c:93
msgid "FIRMWARE-VERSION"
msgstr "ファームウェアãƒãƒ¼ã‚¸ãƒ§ãƒ³"
-#. 7
-#: ../cli/src/devices.c:117
+#: ../cli/src/devices.c:94
msgid "HWADDR"
-msgstr "HWADDR"
+msgstr "ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚¢ãƒ‰ãƒ¬ã‚¹"
+
+#: ../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"
-#. 9
-#: ../cli/src/devices.c:119
+#: ../cli/src/devices.c:97
msgid "REASON"
msgstr "原因"
-#. 10
-#: ../cli/src/devices.c:120
+#: ../cli/src/devices.c:98
msgid "UDI"
msgstr "UDI"
-#. 11
-#: ../cli/src/devices.c:121
+#: ../cli/src/devices.c:99
msgid "IP-IFACE"
msgstr "IP-IFACE"
-#. 12
-#: ../cli/src/devices.c:122
+#: ../cli/src/devices.c:100
msgid "NM-MANAGED"
msgstr "NM 管ç†"
-#. 14
-#: ../cli/src/devices.c:124
+#: ../cli/src/devices.c:102
msgid "FIRMWARE-MISSING"
msgstr "ファームウェアä¸è¶³"
-#. 15
-#: ../cli/src/devices.c:125
-msgid "CONNECTION"
-msgstr "接続"
-
-#. 0
-#: ../cli/src/devices.c:135
+#: ../cli/src/devices.c:115
msgid "AVAILABLE-CONNECTION-PATHS"
msgstr "使用å¯èƒ½ãªæŽ¥ç¶šãƒ‘ス"
-#. 1
-#: ../cli/src/devices.c:136
+#: ../cli/src/devices.c:116
msgid "AVAILABLE-CONNECTIONS"
msgstr "使用å¯èƒ½ãªæŽ¥ç¶š"
-#. 0
-#: ../cli/src/devices.c:145
+#: ../cli/src/devices.c:125
msgid "CARRIER-DETECT"
msgstr "キャリア検出"
-#. 1
-#: ../cli/src/devices.c:146
+#: ../cli/src/devices.c:126
msgid "SPEED"
msgstr "速度"
-#. 0
-#: ../cli/src/devices.c:155
+#: ../cli/src/devices.c:135
msgid "CARRIER"
msgstr "キャリア"
-#. 0
-#: ../cli/src/devices.c:165 ../cli/src/devices.c:448
+#: ../cli/src/devices.c:144 ../cli/src/devices.c:563
msgid "WEP"
msgstr "WEP"
-#. 1
-#: ../cli/src/devices.c:166
+#: ../cli/src/devices.c:145
msgid "WPA"
msgstr "WPA"
-#. 2
-#: ../cli/src/devices.c:167 ../cli/src/devices.c:456
+#: ../cli/src/devices.c:146 ../cli/src/devices.c:571
msgid "WPA2"
msgstr "WPA2"
-#. 3
-#: ../cli/src/devices.c:168
+#: ../cli/src/devices.c:147
msgid "TKIP"
msgstr "TKIP"
-#. 4
-#: ../cli/src/devices.c:169
+#: ../cli/src/devices.c:148
msgid "CCMP"
msgstr "CCMP"
-#. 6
-#: ../cli/src/devices.c:171
+#: ../cli/src/devices.c:149 ../cli/src/devices.c:239
+msgid "AP"
+msgstr "AP"
+
+#: ../cli/src/devices.c:150
msgid "ADHOC"
msgstr "アドホック"
-#. 0
-#: ../cli/src/devices.c:181
+#: ../cli/src/devices.c:159
msgid "CTR-FREQ"
msgstr "中心周波数"
-#. 1
-#: ../cli/src/devices.c:182
+#: ../cli/src/devices.c:160
msgid "RSSI"
msgstr "RSSI"
-#. 2
-#: ../cli/src/devices.c:183
+#: ../cli/src/devices.c:161
msgid "CINR"
msgstr "CINR"
-#. 3
-#: ../cli/src/devices.c:184
+#: ../cli/src/devices.c:162
msgid "TX-POW"
msgstr "TX-POW"
-#. 4
-#: ../cli/src/devices.c:185
+#: ../cli/src/devices.c:163
msgid "BSID"
msgstr "BSID"
-#. 0
-#: ../cli/src/devices.c:195
+#: ../cli/src/devices.c:172 ../tui/nmt-page-wifi.c:221
msgid "SSID"
msgstr "SSID"
-#. 1
-#: ../cli/src/devices.c:196
+#: ../cli/src/devices.c:173
msgid "SSID-HEX"
msgstr "SSID-HEX"
-#. 2
-#: ../cli/src/devices.c:197
+#: ../cli/src/devices.c:174 ../tui/nmt-page-wifi.c:352
msgid "BSSID"
msgstr "BSSID"
-#. 3
-#: ../cli/src/devices.c:198
+#: ../cli/src/devices.c:175
msgid "MODE"
msgstr "モード"
-#. 4
-#: ../cli/src/devices.c:199
+#: ../cli/src/devices.c:176
msgid "CHAN"
msgstr "CHAN"
-#. 5
-#: ../cli/src/devices.c:200
+#: ../cli/src/devices.c:177
msgid "FREQ"
msgstr "周波数"
-#. 6
-#: ../cli/src/devices.c:201
+#: ../cli/src/devices.c:178
msgid "RATE"
msgstr "レート"
-#. 7
-#. 1
-#: ../cli/src/devices.c:202 ../cli/src/devices.c:223
+#: ../cli/src/devices.c:179 ../cli/src/devices.c:199
msgid "SIGNAL"
msgstr "ä¿¡å·"
-#. 8
-#: ../cli/src/devices.c:203
+#: ../cli/src/devices.c:180
msgid "BARS"
msgstr "ãƒãƒ¼"
-#. 9
-#: ../cli/src/devices.c:204
+#: ../cli/src/devices.c:181
msgid "SECURITY"
msgstr "セキュリティ"
-#. 10
-#: ../cli/src/devices.c:205
+#: ../cli/src/devices.c:182
msgid "WPA-FLAGS"
msgstr "WPA-フラグ"
-#. 11
-#: ../cli/src/devices.c:206
+#: ../cli/src/devices.c:183
msgid "RSN-FLAGS"
msgstr "RSN-フラグ"
-#. 13
-#. 4
-#: ../cli/src/devices.c:208 ../cli/src/devices.c:226
+#: ../cli/src/devices.c:185 ../cli/src/devices.c:202
msgid "ACTIVE"
msgstr "アクティブ"
-#. 14
-#: ../cli/src/devices.c:209
+#: ../cli/src/devices.c:186
msgid "*"
msgstr "*"
-#. 0
-#: ../cli/src/devices.c:238
+#: ../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:247
+#: ../cli/src/devices.c:222
msgid "ID"
msgstr "ID"
-#: ../cli/src/devices.c:263
+#: ../cli/src/devices.c:237
+msgid "CAPABILITIES"
+msgstr "能力"
+
+#: ../cli/src/devices.c:238
+msgid "WIFI-PROPERTIES"
+msgstr "WIFI-プロパティ"
+
+#: ../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 | show | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
"\n"
-" COMMAND := { status | show | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | wifi }\n"
"\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>] [bssid <BSSID>] [name <name>]\n"
-"\n"
-" [private yes|no]\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"
@@ -2639,297 +2893,469 @@ msgid ""
msgstr ""
"使ã„æ–¹: nmcli device { コマンド | help }\n"
"\n"
-" コマンド := { status | show | disconnect | wifi | wimax }\n"
+"コマンド := { status | show | connect | disconnect | wifi | wimax }\n"
"\n"
-" コマンド := { status | show | disconnect | wifi }\n"
+"コマンド := { status | show | connect | disconnect | wifi }\n"
"\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>] [bssid <BSSID>] [name <name>]\n"
-"\n"
-" [private yes|no]\n"
+" wifi connect <(B)SSID> [password <パスワード>] [wep-key-type key|phrase] "
+"[ifname <ifname>]\n"
+" [bssid <BSSID>] [name <åå‰>] [private yes|no]\n"
"\n"
" wifi rescan [[ifname] <ifname>]\n"
"\n"
-" wimax [list [ifname <ifname>] [nsp <name>]]\n"
+" wimax [list [ifname <ifname>] [nsp <åå‰>]]\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"
+" デãƒã‚¤ã‚¹ - インターフェースå\n"
+" タイプ - デãƒã‚¤ã‚¹ã‚¿ã‚¤ãƒ—\n"
+" 状態 - デãƒã‚¤ã‚¹ã®çŠ¶æ…‹\n"
+" 接続 - デãƒã‚¤ã‚¹ä¸Šã§ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã«ã—ã¦ã„る接続ãŒã‚ã‚Œã°ãれを表示\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 { 引数 | 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 { 引数 | help }\n"
+"\n"
+"引数 := <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 { 引数 | help }\n"
+"\n"
+"引数 := <ifname>\n"
+"\n"
+"デãƒã‚¤ã‚¹ã®æŽ¥ç¶šã‚’切断ã—ã¾ã™ã€‚\n"
+"デãƒã‚¤ã‚¹ã®æŽ¥ç¶šã‚’切断ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€ã“れ以上手作業ã«ã‚ˆã‚‹åˆ‡æ–­å‡¦ç†ã‚’\n"
+"è¡Œã‚ãšã¨ã‚‚自動アクティベートã«ã‚ˆã‚‹æŽ¥ç¶šãŒè¡Œã‚ã‚Œãªã„よã†ã«ã—ã¾ã™ã€‚\n"
"\n"
-#: ../cli/src/devices.c:365
+#: ../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 { 引数 | 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 <パスワード>] [wep-key-type key|phrase] [ifname "
+"<ifname>]\n"
+" [bssid <BSSID>] [name <åå‰>] [private yes|no]\n"
+"\n"
+"SSID ã‚„ BSSID ã§æŒ‡å®šã—㟠Wi-Fi ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¸æŽ¥ç¶šã—ã¾ã™ã€‚コマンドã«ã‚ˆã‚Šæ–°è¦ã®\n"
+"接続ãŒä½œæˆã•ã‚Œã€ãƒ‡ãƒã‚¤ã‚¹ä¸Šã§ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ãƒˆã•ã‚Œã¾ã™ã€‚ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã¯ã€GUI \n"
+"クライアント㧠SSID をクリックã—ãŸå ´åˆã¨åŒã˜å‹•ä½œã«ãªã‚Šã¾ã™ã€‚常ã«æ–°è¦ã®æŽ¥ç¶šã‚’\n"
+"作æˆã™ã‚‹ãŸã‚ã€ä¸»ã«æ–°è¦ã® Wi-Fi ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«æŽ¥ç¶šã™ã‚‹å ´åˆã«å½¹ã«ç«‹ã¤ã‚³ãƒžãƒ³ãƒ‰ã§ã™ã€‚\n"
+"ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ç”¨ã®æŽ¥ç¶šãŒã™ã§ã«å­˜åœ¨ã™ã‚‹å ´åˆã«ã¯ã€ã€Œnmcli con up id <åå‰>ã€ã‚’使ã£ã¦\n"
+"既存ã®ãƒ—ロファイルを立ã¡ä¸Šã’ãŸæ–¹ãŒã‚ˆã„ã§ã—ょã†ã€‚ç¾æ™‚点ã§ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã‚‹ã®ã¯ \n"
+"WEP ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãŠã‚ˆã³ WPA-PSK ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®ã¿ã®ãŸã‚注æ„ã—ã¦ãã ã•ã„。ã¾ãŸã€\n"
+"IP 設定㯠DHCP ã§å–å¾—ã•ã‚Œã‚‹ã¨ã¿ãªã•ã‚Œã¾ã™ã€‚\n"
+"\n"
+"引数 := rescan [[ifname] <ifname>]\n"
+"\n"
+"NetworkManager ã«ä½¿ç”¨å¯èƒ½ãªã‚¢ã‚¯ã‚»ã‚¹ãƒã‚¤ãƒ³ãƒˆã®å†ã‚¹ã‚­ãƒ£ãƒ³ã‚’手動リクエストã—ã¾ã™ã€‚\n"
+"NetworkManager ã«ã‚ˆã‚‹ Wi-Fi ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®ã‚¹ã‚­ãƒ£ãƒ³ã¯å®šæœŸçš„ã«è¡Œã‚ã‚Œã¾ã™ãŒã€æ‰‹ä½œæ¥­ã«\n"
+"よるスキャンã®é–‹å§‹ã‚’è¡Œã†ã¨ä¾¿åˆ©ãªå ´åˆãŒã‚ã‚Šã¾ã™ã€‚ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã§ã¯ AP ã¯è¡¨ç¤ºã•ã‚Œãªã„\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 { 引数 | help }\n"
+"\n"
+"WiMAX デãƒã‚¤ã‚¹ä¸Šã§ã®æ“作を行ã„ã¾ã™ã€‚\n"
+"\n"
+"引数 := [list [ifname <ifname>] [nsp <åå‰>]]\n"
+"\n"
+"使用å¯èƒ½ãª WiMAX NSP を一覧表示ã—ã¾ã™ã€‚'ifname' ãŠã‚ˆã³ 'nsp' オプションを使用ã™ã‚‹ã¨ç‰¹å®š\n"
+"ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ç”¨ã‚„指定 NSP ã‚’æŒã¤ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ä¸€è¦§ã‚’表示ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚\n"
+"\n"
+
+#: ../cli/src/devices.c:480
msgid "(none)"
msgstr "(ãªã—)"
-#: ../cli/src/devices.c:432
+#: ../cli/src/devices.c:547
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:433
+#: ../cli/src/devices.c:548
#, c-format
msgid "%u Mbit/s"
msgstr "%u Mbit/s"
-#: ../cli/src/devices.c:452
+#: ../cli/src/devices.c:567
msgid "WPA1"
msgstr "WPA1"
-#: ../cli/src/devices.c:461
+#: ../cli/src/devices.c:576
msgid "802.1X"
msgstr "802.1X"
-#: ../cli/src/devices.c:477
+#: ../cli/src/devices.c:592
msgid "Ad-Hoc"
msgstr "アドホック"
-#: ../cli/src/devices.c:478
+#: ../cli/src/devices.c:593
msgid "Infra"
msgstr "インフラ"
-#: ../cli/src/devices.c:510
+#: ../cli/src/devices.c:625
msgid "Home"
msgstr "ホーム"
-#: ../cli/src/devices.c:513
+#: ../cli/src/devices.c:628
msgid "Partner"
msgstr "パートナー"
-#: ../cli/src/devices.c:516
+#: ../cli/src/devices.c:631
msgid "Roaming"
msgstr "ローミング"
-#: ../cli/src/devices.c:588
+#: ../cli/src/devices.c:725
msgid "Device details"
msgstr "デãƒã‚¤ã‚¹ã®è©³ç´°"
-#: ../cli/src/devices.c:600
+#: ../cli/src/devices.c:737
#, 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
+#: ../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:677
-msgid "not connected"
-msgstr "未接続"
-
-#: ../cli/src/devices.c:702
+#: ../cli/src/devices.c:827
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
-#: ../cli/src/devices.c:785
+#: ../cli/src/devices.c:913
msgid "on"
msgstr "オン"
-#: ../cli/src/devices.c:785
+#: ../cli/src/devices.c:913
msgid "off"
msgstr "オフ"
-#: ../cli/src/devices.c:1046
+#: ../cli/src/devices.c:1188
#, c-format
msgid "Error: 'device status': %s"
msgstr "エラー: 'device status': %s"
-#: ../cli/src/devices.c:1048
-#, c-format
-msgid "Error: 'device status': %s; allowed fields: %s"
-msgstr "エラー: 'device status': %s; 許å¯ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s"
-
-#. Add headers
-#: ../cli/src/devices.c:1067
+#: ../cli/src/devices.c:1206
msgid "Status of devices"
msgstr "デãƒã‚¤ã‚¹ã®çŠ¶æ…‹"
-#: ../cli/src/devices.c:1097
+#: ../cli/src/devices.c:1237
#, c-format
msgid "Error: invalid extra argument '%s'."
msgstr "エラー: '%s' ã¯ç„¡åŠ¹ãªè¿½åŠ å¼•æ•°ã§ã™ã€‚"
-#: ../cli/src/devices.c:1125 ../cli/src/devices.c:1275
-#: ../cli/src/devices.c:1418 ../cli/src/devices.c:2162
+#: ../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:1154
+#: ../cli/src/devices.c:1319
#, c-format
-msgid "Success: Device '%s' successfully disconnected."
-msgstr "æˆåŠŸ: デãƒã‚¤ã‚¹ '%s' ã¯æ­£å¸¸ã«åˆ‡æ–­ã•ã‚Œã¾ã—ãŸã€‚"
+msgid "Success: Device '%s' successfully activated."
+msgstr "æˆåŠŸ: デãƒã‚¤ã‚¹ '%s' ã¯æ­£å¸¸ã«ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ãƒˆã•ã‚Œã¾ã—ãŸã€‚"
-#: ../cli/src/devices.c:1189
+#: ../cli/src/devices.c:1333
#, c-format
-msgid "Error: Device '%s' (%s) disconnecting failed: %s"
-msgstr "エラー: デãƒã‚¤ã‚¹ '%s' (%s) ã®åˆ‡æ–­ã«å¤±æ•—ã—ã¾ã—ãŸ: %s"
+msgid "Error: Device activation failed: %s"
+msgstr "エラー: デãƒã‚¤ã‚¹ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ãƒˆã«å¤±æ•—ã—ã¾ã—ãŸ: %s"
-#: ../cli/src/devices.c:1203
+#: ../cli/src/devices.c:1350
#, c-format
-msgid "Device '%s' has been disconnected.\n"
-msgstr "デãƒã‚¤ã‚¹ '%s' ã¯åˆ‡æ–­ã•ã‚Œã¦ã„ã¾ã™ã€‚\n"
+msgid "Device '%s' has been connected.\n"
+msgstr "デãƒã‚¤ã‚¹ '%s' ã¯æŽ¥ç¶šã•ã‚Œã¦ã„ã¾ã™ã€‚\n"
-#: ../cli/src/devices.c:1230
+#: ../cli/src/devices.c:1377 ../cli/src/devices.c:1512
msgid "Interface: "
msgstr "インターフェース: "
-#: ../cli/src/devices.c:1234 ../cli/src/devices.c:1243
+#: ../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:1249
+#: ../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:1346
+#: ../cli/src/devices.c:1459
+#, c-format
+msgid "Success: Device '%s' successfully disconnected."
+msgstr "æˆåŠŸ: デãƒã‚¤ã‚¹ '%s' ã¯æ­£å¸¸ã«åˆ‡æ–­ã•ã‚Œã¾ã—ãŸã€‚"
+
+#: ../cli/src/devices.c:1471
+#, c-format
+msgid "Error: Device '%s' (%s) disconnecting failed: %s"
+msgstr "エラー: デãƒã‚¤ã‚¹ '%s' (%s) ã®åˆ‡æ–­ã«å¤±æ•—ã—ã¾ã—ãŸ: %s"
+
+#: ../cli/src/devices.c:1485
+#, c-format
+msgid "Device '%s' has been disconnected.\n"
+msgstr "デãƒã‚¤ã‚¹ '%s' ã¯åˆ‡æ–­ã•ã‚Œã¦ã„ã¾ã™ã€‚\n"
+
+#: ../cli/src/devices.c:1628
msgid "Wi-Fi scan list"
msgstr "Wi-Fi スキャン一覧"
-#: ../cli/src/devices.c:1385
+#: ../cli/src/devices.c:1666
#, 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
+#: ../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:1465 ../cli/src/devices.c:1853
-#: ../cli/src/devices.c:2015
+#: ../cli/src/devices.c:1743 ../cli/src/devices.c:2131
+#: ../cli/src/devices.c:2293
#, c-format
msgid "Error: Device '%s' is not a Wi-Fi device."
msgstr "エラー: デãƒã‚¤ã‚¹ '%s' 㯠Wi-Fi デãƒã‚¤ã‚¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/devices.c:1547 ../cli/src/devices.c:1594
+#: ../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:1551
+#: ../cli/src/devices.c:1829
#, c-format
msgid "Error: Connection activation failed: (%d) %s."
msgstr "エラー: 接続ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ãƒˆã«å¤±æ•—ã—ã¾ã—ãŸ: (%d) %s。"
-#: ../cli/src/devices.c:1576
+#: ../cli/src/devices.c:1854
#, c-format
msgid "Error: Failed to add/activate new connection: (%d) %s"
msgstr "エラー: æ–°è¦æŽ¥ç¶šã®è¿½åŠ ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ãƒˆã«å¤±æ•—ã—ã¾ã—ãŸ: (%d) %s"
-#: ../cli/src/devices.c:1584
+#: ../cli/src/devices.c:1862
#, c-format
msgid "Error: Failed to add/activate new connection: Unknown error"
msgstr "エラー: æ–°è¦æŽ¥ç¶šã®è¿½åŠ ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ãƒˆã«å¤±æ•—ã—ã¾ã—ãŸ: ä¸æ˜Žãªã‚¨ãƒ©ãƒ¼"
-#: ../cli/src/devices.c:1735
+#: ../cli/src/devices.c:2013
msgid "SSID or BSSID: "
msgstr "SSID ã¾ãŸã¯ BSSID: "
-#: ../cli/src/devices.c:1740
+#: ../cli/src/devices.c:2018
#, c-format
msgid "Error: SSID or BSSID are missing."
msgstr "エラー: SSID ã¾ãŸã¯ BSSID ãŒã‚ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/devices.c:1764
+#: ../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:1788
+#: ../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:1808
+#: ../cli/src/devices.c:2086
#, c-format
msgid "Error: %s: %s."
msgstr "エラー: %s: %s。"
-#: ../cli/src/devices.c:1823
+#: ../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:1829
+#: ../cli/src/devices.c:2107
#, c-format
msgid "Error: Parameter '%s' is neither SSID nor BSSID."
msgstr "エラー: パラメーター '%s' 㯠SSIDã€BSSID ã®ã„ãšã‚Œã§ã‚‚ã‚ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/devices.c:1855 ../cli/src/devices.c:2017
+#: ../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:1873
+#: ../cli/src/devices.c:2151
#, c-format
msgid "Error: No network with SSID '%s' found."
msgstr "エラー: SSID ㌠'%s' ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚"
-#: ../cli/src/devices.c:1875
+#: ../cli/src/devices.c:2153
#, c-format
msgid "Error: No access point with BSSID '%s' found."
msgstr "エラー: BSSID ㌠'%s' ã®ã‚¢ã‚¯ã‚»ã‚¹ãƒã‚¤ãƒ³ãƒˆãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚"
-#: ../cli/src/devices.c:1914
+#: ../cli/src/devices.c:2192
msgid "Password: "
msgstr "パスワード: "
-#: ../cli/src/devices.c:2043
+#: ../cli/src/devices.c:2321
#, c-format
msgid "Error: 'device wifi' command '%s' is not valid."
msgstr "エラー: 'dev wifi' ã®ã‚³ãƒžãƒ³ãƒ‰ '%s' ã¯æœ‰åŠ¹ãªã‚³ãƒžãƒ³ãƒ‰ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/devices.c:2090
+#: ../cli/src/devices.c:2368
msgid "WiMAX NSP list"
msgstr "WiMAX NSP 一覧"
-#: ../cli/src/devices.c:2128
+#: ../cli/src/devices.c:2405
#, c-format
msgid "Error: 'device wimax': %s"
msgstr "エラー: 'device wimax': %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:2185
+#: ../cli/src/devices.c:2459
#, c-format
msgid "Error: NSP with name '%s' not found."
msgstr "エラー: '%s' ã¨è¨€ã†åå‰ã® NSP ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚"
-#: ../cli/src/devices.c:2198
+#: ../cli/src/devices.c:2472
#, c-format
msgid "Error: Device '%s' is not a WiMAX device."
msgstr "エラー: デãƒã‚¤ã‚¹ '%s' 㯠WiMAX デãƒã‚¤ã‚¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/devices.c:2236
+#: ../cli/src/devices.c:2510
#, c-format
msgid "Error: Access point with nsp '%s' not found."
msgstr "エラー: nsp '%s' ã®ã‚¢ã‚¯ã‚»ã‚¹ãƒã‚¤ãƒ³ãƒˆãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚"
-#: ../cli/src/devices.c:2268
+#: ../cli/src/devices.c:2542
#, c-format
msgid "Error: 'device wimax' command '%s' is not valid."
msgstr "エラー: 'dev wimax' ã®ã‚³ãƒžãƒ³ãƒ‰ '%s' ã¯ç„¡åŠ¹ã§ã™ã€‚"
-#: ../cli/src/devices.c:2319
+#: ../cli/src/devices.c:2621
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "エラー: 'dev' ã®ã‚³ãƒžãƒ³ãƒ‰ '%s' ã¯æœ‰åŠ¹ãªã‚³ãƒžãƒ³ãƒ‰ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
@@ -2938,52 +3364,42 @@ msgstr "エラー: 'dev' ã®ã‚³ãƒžãƒ³ãƒ‰ '%s' ã¯æœ‰åŠ¹ãªã‚³ãƒžãƒ³ãƒ‰ã§ã¯ã‚ã
msgid "RUNNING"
msgstr "実行中"
-#. 0
#: ../cli/src/network-manager.c:38
msgid "VERSION"
msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³"
-#. 2
#: ../cli/src/network-manager.c:40
msgid "STARTUP"
-msgstr ""
+msgstr "スタートアップ"
-#. 3
#: ../cli/src/network-manager.c:41
msgid "CONNECTIVITY"
msgstr "接続性"
-#. 4
#: ../cli/src/network-manager.c:42
msgid "NETWORKING"
msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚­ãƒ³ã‚°"
-#. 5
#: ../cli/src/network-manager.c:43
msgid "WIFI-HW"
msgstr "WIFI ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢"
-#. 6
#: ../cli/src/network-manager.c:44
msgid "WIFI"
msgstr "WIFI"
-#. 7
#: ../cli/src/network-manager.c:45
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"
@@ -2992,7 +3408,6 @@ msgstr "WIMAX"
msgid "PERMISSION"
msgstr "パーミッション"
-#. 0
#: ../cli/src/network-manager.c:71
msgid "VALUE"
msgstr "値"
@@ -3001,7 +3416,6 @@ msgstr "値"
msgid "LEVEL"
msgstr "レベル"
-#. 0
#: ../cli/src/network-manager.c:80
msgid "DOMAINS"
msgstr "ドメイン"
@@ -3011,10 +3425,12 @@ msgstr "ドメイン"
msgid ""
"Usage: nmcli general { COMMAND | help }\n"
"\n"
-" COMMAND := { status | permissions | logging }\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"
@@ -3022,21 +3438,99 @@ msgid ""
msgstr ""
"使ã„æ–¹: nmcli general { コマンド | help }\n"
"\n"
-" コマンド := { status | permissions | logging }\n"
+"コマンド := { status | hostname | permissions | logging }\n"
"\n"
" status\n"
"\n"
+" hostname [<ホストå>]\n"
+"\n"
" permissions\n"
"\n"
-" logging [level <log level>] [domains <log domains>]\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"
+"渡ã™ã¨ã€ãã®ãƒ›ã‚¹ãƒˆåをシステムã®æ°¸ç¶šçš„ãªãƒ›ã‚¹ãƒˆåã¨ã—ã¦æ–°ãŸã«è¨­å®šã—ã¾ã™ã€‚\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 { 引数 | 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"
+"COMMAND := { [ on | off | connectivity ] }\n"
"\n"
" on\n"
"\n"
@@ -3045,9 +3539,9 @@ msgid ""
" connectivity [check]\n"
"\n"
msgstr ""
-"使ã„æ–¹ : nmcli networking { コマンド | help }\n"
+"使ã„æ–¹: nmcli networking { コマンド | help }\n"
"\n"
-" コマンド := { on | off | connectivity }\n"
+"コマンド := { [ on | off | connectivity ] }\n"
"\n"
" on\n"
"\n"
@@ -3056,200 +3550,298 @@ msgstr ""
" connectivity [check]\n"
"\n"
-#: ../cli/src/network-manager.c:119
+#: ../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' 引数を付ã‘ã‚‹ã¨æŽ¥ç¶šã‚’å†ãƒã‚§ãƒƒã‚¯ã—ã¾ã™ã€‚\n"
+
+#: ../cli/src/network-manager.c:195
#, c-format
msgid ""
"Usage: nmcli radio { COMMAND | help }\n"
"\n"
-" COMMAND := { all | wifi | wwan | wimax }\n"
+"COMMAND := { all | wifi | wwan | wimax }\n"
"\n"
" all | wifi | wwan | wimax [ on | off ]\n"
"\n"
-" COMMAND := { all | wifi | wwan }\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"
+"コマンドã®ç¨®é¡ž := { all | wifi | wwan | wimax }\n"
"\n"
" all | wifi | wwan | wimax [ on | off ]\n"
"\n"
-" コマンド := { all | wifi | wwan }\n"
+"コマンドã®ç¨®é¡ž := { all | wifi | wwan }\n"
"\n"
" all | wifi | wwan [ on | off ]\n"
"\n"
-#: ../cli/src/network-manager.c:142
+#: ../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:144
+#: ../cli/src/network-manager.c:266
msgid "connecting"
msgstr "接続中"
-#: ../cli/src/network-manager.c:146
+#: ../cli/src/network-manager.c:268
msgid "connected (local only)"
msgstr "接続完了 (ローカルã®ã¿)"
-#: ../cli/src/network-manager.c:148
+#: ../cli/src/network-manager.c:270
msgid "connected (site only)"
msgstr "接続完了 (サイトã®ã¿)"
-#: ../cli/src/network-manager.c:152
+#: ../cli/src/network-manager.c:274
msgid "disconnecting"
msgstr "切断中"
-#: ../cli/src/network-manager.c:168
+#: ../cli/src/network-manager.c:290
msgid "portal"
msgstr "ãƒãƒ¼ã‚¿ãƒ«"
-#: ../cli/src/network-manager.c:170
+#: ../cli/src/network-manager.c:292
msgid "limited"
msgstr "制é™ä»˜ã"
-#: ../cli/src/network-manager.c:172
+#: ../cli/src/network-manager.c:294
msgid "full"
msgstr "完全"
-#: ../cli/src/network-manager.c:211 ../cli/src/network-manager.c:511
+#: ../cli/src/network-manager.c:332
#, c-format
-msgid "Error: %s"
-msgstr "エラー: %s"
-
-#: ../cli/src/network-manager.c:213
-#, c-format
-msgid "Error: %s (allowed fields: %s)"
-msgstr "エラー: %s (許å¯ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s)"
+msgid "Error: only these fields are allowed: %s"
+msgstr "エラー: 許å¯ã•ã‚Œã¦ã„ã‚‹ã®ã¯æ¬¡ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã®ã¿ã§ã™: %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
+#: ../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: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
+#: ../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:248
+#: ../cli/src/network-manager.c:367
msgid "NetworkManager status"
msgstr "NetworkManager ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹"
-#: ../cli/src/network-manager.c:253
+#: ../cli/src/network-manager.c:372
msgid "running"
msgstr "実行中"
-#: ../cli/src/network-manager.c:253
+#: ../cli/src/network-manager.c:372
msgid "not running"
msgstr "実行ã—ã¦ã„ã¾ã›ã‚“"
-#: ../cli/src/network-manager.c:256
-#, fuzzy
-#| msgid "activating"
+#: ../cli/src/network-manager.c:375
msgid "starting"
-msgstr "アクティベート中"
+msgstr "起動中"
-#: ../cli/src/network-manager.c:256
+#: ../cli/src/network-manager.c:375
msgid "started"
-msgstr ""
+msgstr "èµ·å‹•ã—ã¾ã—ãŸ"
-#: ../cli/src/network-manager.c:327
+#: ../cli/src/network-manager.c:446
msgid "auth"
msgstr "èªè¨¼"
-#: ../cli/src/network-manager.c:357
+#: ../cli/src/network-manager.c:475
#, c-format
msgid "Error: 'general permissions': %s"
msgstr "エラー: 'general permissions': %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:374
+#: ../cli/src/network-manager.c:489
msgid "NetworkManager permissions"
msgstr "NetworkManager ã®ãƒ‘ーミッション"
-#: ../cli/src/network-manager.c:416
+#: ../cli/src/network-manager.c:530
#, c-format
msgid "Error: 'general logging': %s"
msgstr "エラー: 'general logging': %s"
-#: ../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:434
+#: ../cli/src/network-manager.c:545
msgid "NetworkManager logging"
msgstr "NetworkManager ã®ãƒ­ã‚®ãƒ³ã‚°"
-#: ../cli/src/network-manager.c:509
+#: ../cli/src/network-manager.c:565
+#, c-format
+msgid "Error: failed to set hostname: (%d) %s"
+msgstr "エラー: ホストåã®è¨­å®šã«å¤±æ•—ã—ã¾ã—ãŸ: (%d) %s"
+
+#: ../cli/src/network-manager.c:682
#, c-format
msgid "Error: access denied to set logging; %s"
msgstr "エラー: ロギング設定ã®ã‚¢ã‚¯ã‚»ã‚¹ãŒæ‹’å¦ã•ã‚Œã¾ã—ãŸ; %s"
-#: ../cli/src/network-manager.c:522
+#: ../cli/src/network-manager.c:684
+#, c-format
+msgid "Error: %s"
+msgstr "エラー: %s"
+
+#: ../cli/src/network-manager.c:692
#, c-format
msgid "Error: 'general' command '%s' is not valid."
msgstr "エラー: 'general' ã®ã‚³ãƒžãƒ³ãƒ‰ '%s' ã¯æœ‰åŠ¹ãªã‚³ãƒžãƒ³ãƒ‰ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/network-manager.c:541
-#, fuzzy, c-format
-#| msgid "Error: '--fields' value '%s' is not valid here (allowed fields: %s)"
+#: ../cli/src/network-manager.c:710
+#, c-format
msgid "Error: '--fields' value '%s' is not valid here (allowed field: %s)"
-msgstr "エラー: '--fields' ã®å€¤ '%s' ã¯ã“ã“ã§ã¯ç„¡åŠ¹ã§ã™; 許å¯ã•ã‚Œã‚‹ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s"
+msgstr "エラー: '--fields' ã®å€¤ '%s' ã¯ã“ã“ã§ã¯ç„¡åŠ¹ã§ã™ (許å¯ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s)"
-#: ../cli/src/network-manager.c:566
+#: ../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:577
+#: ../cli/src/network-manager.c:746
msgid "Connectivity"
msgstr "接続性"
-#: ../cli/src/network-manager.c:589
+#: ../cli/src/network-manager.c:758
msgid "Networking"
msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚­ãƒ³ã‚°"
-#: ../cli/src/network-manager.c:610
+#: ../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:619
+#: ../cli/src/network-manager.c:799
#, c-format
msgid "Error: 'networking' command '%s' is not valid."
msgstr "エラー: 'networking' ã®ã‚³ãƒžãƒ³ãƒ‰ '%s' ã¯æœ‰åŠ¹ãªã‚³ãƒžãƒ³ãƒ‰ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: ../cli/src/network-manager.c:644 ../cli/src/network-manager.c:657
+#: ../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:671
+#: ../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:683
+#: ../cli/src/network-manager.c:879
msgid "WWAN radio switch"
msgstr "WWAN ラジオスイッãƒ"
-#. no argument, show current WiMAX state
-#: ../cli/src/network-manager.c:696
+#: ../cli/src/network-manager.c:896
msgid "WiMAX radio switch"
msgstr "WiMAX ラジオスイッãƒ"
-#: ../cli/src/network-manager.c:711
+#: ../cli/src/network-manager.c:908
#, c-format
msgid "Error: 'radio' command '%s' is not valid."
msgstr "エラー: 'radio' ã®ã‚³ãƒžãƒ³ãƒ‰ '%s' ã¯æœ‰åŠ¹ãªã‚³ãƒžãƒ³ãƒ‰ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
@@ -3264,10 +3856,13 @@ 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"
+" -w[ait] <seconds> set timeout waiting for "
+"finishing operations\n"
" -v[ersion] show program version\n"
" -h[elp] print this help\n"
"\n"
@@ -3287,7 +3882,8 @@ msgstr ""
" -m[ode] tabular|multiline 出力モード\n"
" -f[ields] <field1,field2,...>|all|common 出力フィールドã®æŒ‡å®š\n"
" -e[scape] yes|no 値内ã®ã‚³ãƒ©ãƒ ã‚»ãƒ‘レーターをエスケープ\n"
-" -n[ocheck] nmcli ãŠã‚ˆã³ NetworkManager ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ãƒã‚§ãƒƒã‚¯ã—ãªã„\n"
+" -n[ocheck] nmcli ãŠã‚ˆã³ NetworkManager "
+"ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ãƒã‚§ãƒƒã‚¯ã—ãªã„\n"
" -a[sk] 足りãªã„パラメーターをå•ã„åˆã‚ã›ã‚‹\n"
" -w[ait] <seconds> 動作ã®å®Œäº†ã‚’å¾…æ©Ÿã™ã‚‹ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã‚’設定\n"
" -v[ersion] プログラムãƒãƒ¼ã‚¸ãƒ§ãƒ³\n"
@@ -3358,22 +3954,23 @@ msgstr "エラー: オプション '%s' ã¯ä¸æ˜Žã§ã™ã€'nmcli -help' を確èª
#: ../cli/src/nmcli.c:288
#, c-format
-msgid ""
-"\n"
+msgid "\n"
"Error: nmcli terminated by signal %d."
-msgstr ""
+msgstr "\n"
+"エラー: ä¿¡å· %d ã«ã‚ˆã‚Š nmcli ãŒçµ‚了ã—ã¾ã—ãŸã€‚"
-#: ../cli/src/nmcli.c:318 ../src/main.c:129
+#: ../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:138
+#: ../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
+#: ../cli/src/nmcli.c:338 ../test/nm-online.c:149
+#, c-format
msgid "Error: Could not create NMClient object."
msgstr "エラー: NMClient オブジェクトを作æˆã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
@@ -3381,253 +3978,273 @@ msgstr "エラー: NMClient オブジェクトを作æˆã§ãã¾ã›ã‚“ã§ã—ãŸã
msgid "Success"
msgstr "æˆåŠŸ"
-#: ../cli/src/settings.c:629
+#: ../cli/src/settings.c:666
#, c-format
msgid "%d (hex-ascii-key)"
msgstr "%d (hex-ascii-key)"
-#: ../cli/src/settings.c:631
+#: ../cli/src/settings.c:668
#, c-format
msgid "%d (104/128-bit passphrase)"
msgstr "%d (104/128-bit パスフレーズ)"
-#: ../cli/src/settings.c:634 ../cli/src/settings.c:762
+#: ../cli/src/settings.c:671 ../cli/src/settings.c:799
#, c-format
msgid "%d (unknown)"
msgstr "%d (ä¸æ˜Ž)"
-#: ../cli/src/settings.c:660
+#: ../cli/src/settings.c:697
msgid "0 (unknown)"
msgstr "0 (ä¸æ˜Ž)"
-#: ../cli/src/settings.c:666
+#: ../cli/src/settings.c:703
msgid "any, "
msgstr "ã„ãšã‚Œã§ã‚‚ã€"
-#: ../cli/src/settings.c:668
+#: ../cli/src/settings.c:705
msgid "900 MHz, "
msgstr "900 MHz, "
-#: ../cli/src/settings.c:670
+#: ../cli/src/settings.c:707
msgid "1800 MHz, "
msgstr "1800 MHz, "
-#: ../cli/src/settings.c:672
+#: ../cli/src/settings.c:709
msgid "1900 MHz, "
msgstr "1900 MHz, "
-#: ../cli/src/settings.c:674
+#: ../cli/src/settings.c:711
msgid "850 MHz, "
msgstr "850 MHz, "
-#: ../cli/src/settings.c:676
+#: ../cli/src/settings.c:713
msgid "WCDMA 3GPP UMTS 2100 MHz, "
msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../cli/src/settings.c:678
+#: ../cli/src/settings.c:715
msgid "WCDMA 3GPP UMTS 1800 MHz, "
msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../cli/src/settings.c:680
+#: ../cli/src/settings.c:717
msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../cli/src/settings.c:682
+#: ../cli/src/settings.c:719
msgid "WCDMA 3GPP UMTS 800 MHz, "
msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../cli/src/settings.c:684
+#: ../cli/src/settings.c:721
msgid "WCDMA 3GPP UMTS 850 MHz, "
msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../cli/src/settings.c:686
+#: ../cli/src/settings.c:723
msgid "WCDMA 3GPP UMTS 900 MHz, "
msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../cli/src/settings.c:688
+#: ../cli/src/settings.c:725
msgid "WCDMA 3GPP UMTS 1700 MHz, "
msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../cli/src/settings.c:690
+#: ../cli/src/settings.c:727
msgid "WCDMA 3GPP UMTS 1900 MHz, "
msgstr "WCDMA 3GPP UMTS 1900 MHz, "
-#: ../cli/src/settings.c:692
+#: ../cli/src/settings.c:729
msgid "WCDMA 3GPP UMTS 2600 MHz, "
msgstr "WCDMA 3GPP UMTS 2600 MHz, "
-#: ../cli/src/settings.c:710
+#: ../cli/src/settings.c:747
msgid "0 (NONE)"
msgstr "0 (ãªã—)"
-#: ../cli/src/settings.c:716
+#: ../cli/src/settings.c:753
msgid "REORDER_HEADERS, "
msgstr "ヘッダーã®é †åºå¤‰æ›´ã€"
-#: ../cli/src/settings.c:718
+#: ../cli/src/settings.c:755
msgid "GVRP, "
msgstr "GVRPã€"
-#: ../cli/src/settings.c:720
+#: ../cli/src/settings.c:757
msgid "LOOSE_BINDING, "
msgstr "çµåˆã‚’ç·©ã‚ã‚‹ã€"
-#: ../cli/src/settings.c:756
+#: ../cli/src/settings.c:793
#, c-format
msgid "%d (disabled)"
msgstr "%d (無効)"
-#: ../cli/src/settings.c:758
+#: ../cli/src/settings.c:795
#, c-format
msgid "%d (enabled, prefer public IP)"
msgstr "%d (有効ã€ãƒ‘ブリック IP 優先)"
-#: ../cli/src/settings.c:760
+#: ../cli/src/settings.c:797
#, c-format
msgid "%d (enabled, prefer temporary IP)"
msgstr "%d (有効ã€ãƒ†ãƒ³ãƒãƒ©ãƒª IP を優先)"
-#: ../cli/src/settings.c:772
+#: ../cli/src/settings.c:809
msgid "0 (none)"
msgstr "0 (ãªã—)"
-#: ../cli/src/settings.c:778
+#: ../cli/src/settings.c:815
msgid "agent-owned, "
msgstr "エージェント所有〠"
-#: ../cli/src/settings.c:780
+#: ../cli/src/settings.c:817
msgid "not saved, "
msgstr "未ä¿å­˜ã€ "
-#: ../cli/src/settings.c:782
+#: ../cli/src/settings.c:819
msgid "not required, "
msgstr "ä¸å¿…è¦ã€ "
-#: ../cli/src/settings.c:1108 ../cli/src/settings.c:1291
-#: ../cli/src/settings.c:1331
+#: ../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/settings.c:1121
+#: ../cli/src/settings.c:1283
msgid "default"
msgstr "デフォルト"
-#: ../cli/src/settings.c:1452
+#: ../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:1454
+#: ../cli/src/settings.c:1616
#, 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
+#: ../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:1675
+#: ../cli/src/settings.c:1837
#, c-format
msgid "'%d' is not valid; use <%d-%d>"
msgstr "'%d' ã¯ç„¡åŠ¹ã§ã™; <%d-%d> を使用ã—ã¦ãã ã•ã„"
-#: ../cli/src/settings.c:1697
+#: ../cli/src/settings.c:1859
#, c-format
msgid "'%u' is not valid; use <%d-%d>"
msgstr "'%u' ã¯ç„¡åŠ¹ã§ã™; <%d-%d> を使用ã—ã¦ãã ã•ã„"
-#: ../cli/src/settings.c:1763
+#: ../cli/src/settings.c:1925
#, c-format
msgid "'%s' is not valid; use <option>=<value>"
msgstr "'%s' ã¯ç„¡åŠ¹ã§ã™; <option>=<value> を使用ã—ã¦ãã ã•ã„"
-#: ../cli/src/settings.c:1797
+#: ../cli/src/settings.c:1959
#, c-format
msgid "index '%s' is not valid"
msgstr "インデックス '%s' ã¯ç„¡åŠ¹ã§ã™"
-#: ../cli/src/settings.c:1802
+#: ../cli/src/settings.c:1964
msgid "no item to remove"
msgstr "削除ã™ã‚‹ã‚¢ã‚¤ãƒ†ãƒ ãŒã‚ã‚Šã¾ã›ã‚“"
-#: ../cli/src/settings.c:1806
+#: ../cli/src/settings.c:1968
#, c-format
msgid "index '%d' is not in range <0-%d>"
msgstr "インデックス '%d' ã¯ç¯„囲内ã«ã‚ã‚Šã¾ã›ã‚“ <0-%d>"
-#: ../cli/src/settings.c:1821
+#: ../cli/src/settings.c:1983
#, c-format
msgid "invalid option '%s'"
msgstr "無効ãªã‚ªãƒ—ション '%s'"
-#: ../cli/src/settings.c:1823
+#: ../cli/src/settings.c:1985
msgid "missing option"
msgstr "足りãªã„オプション"
-#: ../cli/src/settings.c:1853 ../cli/src/settings.c:1873
+#: ../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:1927
+#: ../cli/src/settings.c:2089
#, 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
+#: ../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:1971 ../cli/src/settings.c:3050
+#: ../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:2023
+#: ../cli/src/settings.c:2185
#, c-format
msgid "'%s' is not a valid hex character"
msgstr "'%s' ã¯æœ‰åŠ¹ãª 16 進文字ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: ../cli/src/settings.c:2053
+#: ../cli/src/settings.c:2215
#, c-format
msgid "'%s' is not a valid MAC"
msgstr "'%s' ã¯æœ‰åŠ¹ãª MAC ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: ../cli/src/settings.c:2090 ../libnm-util/nm-setting-connection.c:723
+#: ../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:2155
+#: ../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"
+" [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"
+" [user:]<user name 1>, [user:]<user name 2>,... ã®ã‚ˆã†ãªå½¢å¼ã‚’ã¨ã‚Šã¾ã™ã€‚\n"
+"コンマã‹ç©ºç™½ã§åŒºåˆ‡ã‚‹ã“ã¨ã§è¤‡æ•°ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’記載ã§ãã¾ã™ã€‚\n"
"\n"
"例: alice bob charlie\n"
-#: ../cli/src/settings.c:2170
+#: ../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:2291
+#: ../cli/src/settings.c:2453
msgid "private key password not provided"
msgstr "プライベートキーã®ãƒ‘スワードãŒå…¥åŠ›ã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: ../cli/src/settings.c:2351
+#: ../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"
@@ -3637,12 +4254,13 @@ msgstr ""
" <file path> [<password>]\n"
"例: /home/cimrman/jara-priv-key Dardanely\n"
-#: ../cli/src/settings.c:2421
+#: ../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"
+"(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"
@@ -3655,7 +4273,7 @@ msgstr ""
"例: ab0455a6ea3a74C2\n"
" ab 4 55 0xa6 ea 3a 74 C2\n"
-#: ../cli/src/settings.c:2524
+#: ../cli/src/settings.c:2686
#, c-format
msgid ""
"Enter a list of bonding options formatted as:\n"
@@ -3686,32 +4304,31 @@ msgstr ""
"\n"
"例: mode=2,miimon=120\n"
-#: ../cli/src/settings.c:2565
+#: ../cli/src/settings.c:2727
#, c-format
msgid "'%s' is not a valid InfiniBand MAC"
msgstr "'%s' ã¯æœ‰åŠ¹ãª InfiniBand MAC ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: ../cli/src/settings.c:2603
+#: ../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:2663
+#: ../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"
+msgstr "DNS サーãƒãƒ¼ã® IPv4 アドレス一覧を入力ã—ã¦ãã ã•ã„。\n"
"\n"
"例: 8.8.8.8, 8.8.4.4\n"
-#: ../cli/src/settings.c:2709 ../cli/src/settings.c:2961
+#: ../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:2735
+#: ../cli/src/settings.c:2897
msgid ""
"Enter a list of IPv4 addresses formatted as:\n"
" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
@@ -3725,102 +4342,131 @@ msgstr ""
"\n"
"例: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
-#: ../cli/src/settings.c:2792
+#: ../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:2818
+#: ../cli/src/settings.c:2980
msgid ""
"Enter a list of IPv4 routes formatted as:\n"
-" ip/[prefix] next-hop [metric],... \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"
+"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
+#: ../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"
+"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 サーãƒãƒ¼ã¯ã€ä¸Šæµã¨ãªã‚‹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãŒãªã„ãŸã‚ 'shared' ã¾ãŸã¯ 'link-local' ã® IPv6 設定方法ã§ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。ãã®ä»–ã® IPv6 設定方法ã§ã¯ã™ã¹ã¦ã€ã“れら㮠DNS サーãƒãƒ¼ã¯ã“ã®æŽ¥ç¶šç”¨ã® DNS サーãƒãƒ¼ã¨ã—ã¦ã®ã¿ä½¿ç”¨ã•ã‚Œã¾ã™ã€‚\n"
+"DNS サーãƒãƒ¼ã® IPv6 アドレス一覧を入力ã—ã¾ã™ã€‚IPv6 設定方法㌠'auto' ã®å ´åˆã¯ã€è‡ªå‹•è¨­å®šã§è¿”ã•ã‚Œã‚‹ã‚¢ãƒ‰ãƒ¬ã‚¹ã« "
+"DNSサーãƒãƒ¼ãŒè¿½åŠ ã•ã‚Œã¾ã™ã€‚ 'shared' ã¾ãŸã¯ 'link-local' ã® IPv6 設定方法ã§ã¯ DNS "
+"サーãƒãƒ¼ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。アップストリームã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãŒãªã„ãŸã‚ã§ã™ã€‚ä»–ã® IPv6 設定方法ã§ã¯ã™ã¹ã¦ DNS サーãƒãƒ¼ã¯ã“ã®æŽ¥ç¶šç”¨ã® DNS "
+"サーãƒãƒ¼ã¨ã—ã¦ã®ã¿ä½¿ç”¨ã•ã‚Œã¾ã™ã€‚\n"
"\n"
"例: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
-#: ../cli/src/settings.c:2987
+#: ../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"
+"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"
+"例: 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
+#: ../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:3035
+#: ../cli/src/settings.c:3197
msgid ""
"Enter a list of IPv6 routes formatted as:\n"
-" ip/[prefix] next-hop [metric],... \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"
+"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"
+"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"
+"例: 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
+#: ../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:3074
+#: ../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:3095
+#: ../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:3135
+#: ../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:3139
+#: ../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:3254
+#: ../cli/src/settings.c:3444
#, c-format
msgid "'%s' is not valid; 3 strings should be provided"
msgstr "'%s' ã¯ç„¡åŠ¹ã§ã™; 3 ã¤ã®æ–‡å­—列を入力ã—ã¦ãã ã•ã„"
-#: ../cli/src/settings.c:3273
+#: ../cli/src/settings.c:3463
msgid ""
"Enter a list of three channels (comma or space separated).\n"
"\n"
@@ -3830,60 +4476,99 @@ msgstr ""
"\n"
"例: 0.0.0e20 0.0.0e21 0.0.0e22\n"
-#: ../cli/src/settings.c:3323
+#: ../cli/src/settings.c:3513
#, c-format
msgid ""
"Enter a list of S/390 options formatted as:\n"
-" option = <value>, option = <value>,... \n"
+" option = <value>, option = <value>,...\n"
"Valid options are: %s\n"
msgstr ""
-"次ã®ã‚ˆã†ãªå½¢å¼ã§ S/390 ã®ã‚ªãƒ—ション一覧を入力ã—ã¦ãã ã•ã„。\n"
-" option = <value>, option = <value>,... \n"
-"有効ãªã‚ªãƒ—ション: %s\n"
+"S/390 ã®ã‚ªãƒ—ション一覧を次ã®å½¢å¼ã§å…¥åŠ›ã—ã¾ã™ã€‚\n"
+" option = <value>, option = <value>,...\n"
+"次ãŒæœ‰åŠ¹ãªã‚ªãƒ—ションã«ãªã‚Šã¾ã™: %s\n"
-#: ../cli/src/settings.c:3369
+#: ../cli/src/settings.c:3559
#, c-format
msgid "'%s' is not a valid channel"
msgstr "'%s' ã¯æœ‰åŠ¹ãªãƒãƒ£ãƒ³ãƒãƒ«ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: ../cli/src/settings.c:3375
+#: ../cli/src/settings.c:3565
#, c-format
msgid "'%ld' is not a valid channel"
msgstr "'%ld' ã¯æœ‰åŠ¹ãªãƒãƒ£ãƒ³ãƒãƒ«ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: ../cli/src/settings.c:3478 ../cli/src/settings.c:3481
+#: ../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:3505
+#: ../cli/src/settings.c:3695
#, c-format
msgid "'%s' not among [0 (unknown), 1 (key), 2 (passphrase)]"
-msgstr ""
+msgstr "'%s' 㯠[0 (unknown), 1 (key), 2 (passphrase)] ã«ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: ../cli/src/settings.c:3525
+#: ../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"
+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:3538
+#: ../cli/src/settings.c:3728
#, c-format
msgid "'%s' is not a valid PSK"
msgstr "'%s' ã¯æœ‰åŠ¹ãª PSK ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: ../cli/src/settings.c:5038
+#: ../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:5091 ../cli/src/settings.c:5131
+#: ../cli/src/settings.c:5647 ../cli/src/settings.c:5687
msgid "the property can't be changed"
msgstr "ã“ã®ãƒ—ロパティã¯å¤‰æ›´ã§ãã¾ã›ã‚“"
-#: ../cli/src/settings.c:5235
+#: ../cli/src/settings.c:5791
msgid "[NM property description]"
msgstr "[NM プロパティã®è©³ç´°]"
-#: ../cli/src/settings.c:5241
+#: ../cli/src/settings.c:5797
msgid "[nmcli specific description]"
msgstr "[nmcli 固有ã®è©³ç´°]"
@@ -3927,34 +4612,42 @@ msgstr "'%s' ãŒä¸æ˜Žçž­ã§ã™ (%s x %s)"
msgid "missing name, try one of [%s]"
msgstr "åå‰ãŒã‚ã‚Šã¾ã›ã‚“ã€[%s] ã®ã†ã¡ã®ã„ãšã‚Œã‹ã§è©¦ã—ã¦ã¿ã¦ãã ã•ã„"
-#: ../cli/src/utils.c:640
+#: ../cli/src/utils.c:718
#, c-format
msgid "field '%s' has to be alone"
msgstr "フィールド '%s' ã¯å­¤ç«‹ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™"
-#: ../cli/src/utils.c:643
+#: ../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:662
+#: ../cli/src/utils.c:747
msgid "Option '--terse' requires specifying '--fields'"
msgstr "オプション '--terse' ã«ã¯ '--fields' ã®æŒ‡å®šãŒå¿…è¦ã§ã™"
-#: ../cli/src/utils.c:666
+#: ../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:980
+#: ../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"
+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:989
+#: ../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 を使用ã™ã‚‹ã¨å¼·åˆ¶çš„ã«å®Ÿè¡Œã™ã‚‹ã“ã¨ã¯ã§ãã¾ã™ãŒã€äºˆæ¸¬ã§ããªã„çµæžœã¨ãªã‚Šã¾ã™ã€‚"
+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
#, c-format
@@ -4263,25 +4956,25 @@ msgstr "ランダムデータを生æˆã§ãã¾ã›ã‚“。"
#: ../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-8021x.c:2363 ../libnm-util/nm-setting-8021x.c:2539
#: ../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-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:700
-#: ../libnm-util/nm-setting-connection.c:716
-#: ../libnm-util/nm-setting-connection.c:771
+#: ../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:128
+#: ../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:406 ../libnm-util/nm-setting-wimax.c:137
-#: ../libnm-util/nm-setting-wireless-security.c:804
-#: ../libnm-util/nm-setting-wireless.c:700
+#: ../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 "プロパティãŒã‚ã‚Šã¾ã›ã‚“"
@@ -4292,18 +4985,18 @@ msgstr "プロパティãŒã‚ã‚Šã¾ã›ã‚“"
#: ../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-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:415 ../libnm-util/nm-setting-vpn.c:425
+#: ../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:834
-#: ../libnm-util/nm-setting-wireless-security.c:842
-#: ../libnm-util/nm-setting-wireless-security.c:866
+#: ../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 "プロパティãŒç©ºã§ã™"
@@ -4313,89 +5006,99 @@ msgstr "プロパティãŒç©ºã§ã™"
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-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:156
+#: ../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:894
-#: ../libnm-util/nm-setting-wireless-security.c:902
-#: ../libnm-util/nm-setting-wireless-security.c:910
+#: ../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: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
+#: ../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: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-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:179
-#: ../libnm-util/nm-setting-wireless-security.c:813
+#: ../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:201
+#: ../libnm-util/nm-setting-bluetooth.c:188
#, c-format
msgid "requires '%s' or '%s' setting"
msgstr "'%s' ã¾ãŸã¯ '%s' ã®è¨­å®šãŒå¿…è¦ã§ã™"
-#: ../libnm-util/nm-setting-bond.c:401
+#: ../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:420
+#: ../libnm-util/nm-setting-bond.c:537
#, c-format
msgid "only one of '%s' and '%s' can be set"
-msgstr ""
+msgstr "設定ã§ãã‚‹ã®ã¯ '%s' 㨠'%s' ã®ä¸€ã¤ã®ã¿ã§ã™"
-#: ../libnm-util/nm-setting-bond.c:431
+#: ../libnm-util/nm-setting-bond.c:548
#, c-format
msgid "mandatory option '%s' is missing"
msgstr "必須オプション㮠'%s' ãŒã‚ã‚Šã¾ã›ã‚“"
-#: ../libnm-util/nm-setting-bond.c:440
+#: ../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:453
+#: ../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:464
+#: ../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:477 ../libnm-util/nm-setting-bond.c:486
-#: ../libnm-util/nm-setting-bond.c:506 ../libnm-util/nm-setting-bond.c:542
+#: ../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:518
+#: ../libnm-util/nm-setting-bond.c:659
#, c-format
msgid "'%s' option is empty"
msgstr "'%s' オプションãŒç©ºç™½ã§ã™"
-#: ../libnm-util/nm-setting-bond.c:530
+#: ../libnm-util/nm-setting-bond.c:671
#, c-format
msgid "'%s' is not a valid IPv4 address for '%s' option"
msgstr "'%s' 㯠'%s' オプション用ã®æœ‰åŠ¹ãª IPv4 アドレスã§ã¯ã‚ã‚Šã¾ã›ã‚“"
@@ -4415,23 +5118,51 @@ msgstr "値 '%d' 㯠<%d-%d> ã®ç¯„囲外ã§ã™"
msgid "property is empty'"
msgstr "プロパティãŒç©ºã§ã™"
-#: ../libnm-util/nm-setting-connection.c:742
+#: ../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:788
+#: ../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:812
-msgid "IPv4 configuration is not allowed for bonding slave"
-msgstr "ボンドスレーブã«ã¯ IPv4 設定ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“"
+#: ../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-connection.c:829
-msgid "IPv6 configuration is not allowed for bonding slave"
-msgstr "ボンドスレーブã«ã¯ IPv6 設定ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“"
+#: ../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
@@ -4495,13 +5226,13 @@ msgstr "%d. ルートã«ç„¡åŠ¹ãªãƒ—レフィックスãŒã‚ã‚Šã¾ã™"
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
+#: ../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:146
-#: ../libnm-util/nm-setting-wireless.c:749
+#: ../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' ã¯ç„¡åŠ¹ãªãƒãƒ£ãƒ³ãƒãƒ«ã§ã™"
@@ -4516,22 +5247,22 @@ msgstr "'%d' ã¯æœ‰åŠ¹ãªç¯„囲 <128-16384> ã®å¤–ã«ã‚ã‚Šã¾ã™"
msgid "setting this property requires non-zero '%s' property"
msgstr "ã“ã®ãƒ—ロパティを設定ã™ã‚‹ã«ã¯ã‚¼ãƒ­ä»¥å¤–ã® '%s' プロパティãŒå¿…è¦ã§ã™"
-#: ../libnm-util/nm-setting-vlan.c:500
+#: ../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:511
+#: ../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:524
+#: ../libnm-util/nm-setting-vlan.c:521
#, c-format
msgid "property is not specified and neither is '%s:%s'"
-msgstr ""
+msgstr "プロパティã€'%s:%s' ã„ãšã‚Œã‚‚指定ã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: ../libnm-util/nm-setting-vlan.c:537
+#: ../libnm-util/nm-setting-vlan.c:534
msgid "flags are invalid"
msgstr "フラグãŒç„¡åŠ¹ã§ã™"
@@ -4550,8 +5281,8 @@ 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
+#: ../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 アドレスã§ã¯ã‚ã‚Šã¾ã›ã‚“"
@@ -4561,42 +5292,42 @@ msgstr "'%s' ã¯æœ‰åŠ¹ãª MAC アドレスã§ã¯ã‚ã‚Šã¾ã›ã‚“"
msgid "invalid '%s' or its value '%s'"
msgstr "無効㪠'%s' ã¾ãŸã¯ãã®å€¤ '%s' ã§ã™"
-#: ../libnm-util/nm-setting-wireless-security.c:825
+#: ../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:854
+#: ../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:875
+#: ../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:972
+#: ../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:1002
+#: ../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:718
+#: ../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:728
+#: ../libnm-util/nm-setting-wireless.c:725
#, c-format
msgid "'%s' is not a valid band"
msgstr "'%s' ã¯æœ‰åŠ¹ãªãƒãƒ³ãƒ‰ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: ../libnm-util/nm-setting-wireless.c:738
+#: ../libnm-util/nm-setting-wireless.c:735
#, c-format
msgid "requires setting '%s' property"
msgstr "'%s' プロパティã®è¨­å®šãŒå¿…è¦ã§ã™"
@@ -4610,7 +5341,9 @@ msgid "System policy prevents enabling or disabling system networking"
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)"
+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.in.h:4
@@ -4638,7 +5371,8 @@ 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 モãƒã‚¤ãƒ«ãƒ–ロードãƒãƒ³ãƒ‰ã®ãƒ‡ãƒã‚¤ã‚¹ã®æœ‰åŠ¹åŒ–ã¾ãŸã¯ç„¡åŠ¹åŒ–ãŒé˜»æ­¢ã•ã‚Œã¾ã™"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:11
@@ -4654,7 +5388,8 @@ msgid "Connection sharing via a protected WiFi network"
msgstr "ä¿è­·ã•ã‚ŒãŸ Wi-Fi ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯çµŒç”±ã®æŽ¥ç¶šå…±æœ‰"
#: ../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 "システムãƒãƒªã‚·ãƒ¼ã«ã‚ˆã‚Šã€ä¿è­·ã•ã‚ŒãŸ Wi-Fi ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯çµŒç”±ã®æŽ¥ç¶šå…±æœ‰ãŒé˜»æ­¢ã•ã‚Œã¾ã™ã€‚"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:15
@@ -4689,79 +5424,79 @@ msgstr "永続的ãªã‚·ã‚¹ãƒ†ãƒ ã®ãƒ›ã‚¹ãƒˆåを修正"
msgid "System policy prevents modification of the persistent system hostname"
msgstr "システムãƒãƒªã‚·ãƒ¼ã«ã‚ˆã‚Šæ°¸ç¶šçš„ãªã‚·ã‚¹ãƒ†ãƒ ã®ãƒ›ã‚¹ãƒˆåã®ä¿®æ­£ãŒé˜»æ­¢ã•ã‚Œã¾ã™"
-#: ../src/main.c:153
+#: ../src/main.c:154
#, c-format
msgid "Opening %s failed: %s\n"
msgstr "%s ã®ã‚ªãƒ¼ãƒ—ンã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
-#: ../src/main.c:159
+#: ../src/main.c:160
#, c-format
msgid "Writing to %s failed: %s\n"
msgstr "%s ã¸ã®æ›¸ãè¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
-#: ../src/main.c:164
+#: ../src/main.c:165
#, c-format
msgid "Closing %s failed: %s\n"
msgstr "%s ã®ã‚¯ãƒ­ãƒ¼ã‚ºã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
-#: ../src/main.c:207
+#: ../src/main.c:208
#, c-format
msgid "NetworkManager is already running (pid %ld)\n"
msgstr "NetworkManager ã¯ã™ã§ã«èµ·å‹•ã—ã¦ã„ã¾ã™ (pid %ld)\n"
-#: ../src/main.c:326
+#: ../src/main.c:329
msgid "Print NetworkManager version and exit"
msgstr "NetworkManager ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’表示ã—ã¦çµ‚了ã™ã‚‹"
-#: ../src/main.c:327
+#: ../src/main.c:330
msgid "Don't become a daemon"
msgstr "デーモンã«ã—ãªã„"
-#: ../src/main.c:328
+#: ../src/main.c:331
msgid "Don't become a daemon, and log to stderr"
msgstr "デーモンã«ã›ãšã€stderr ã«ãƒ­ã‚°è¨˜éŒ²ã™ã‚‹"
-#: ../src/main.c:329
+#: ../src/main.c:332
#, c-format
msgid "Log level: one of [%s]"
msgstr "ログレベル: [%s] ã®ã„ãšã‚Œã‹"
-#: ../src/main.c:331
+#: ../src/main.c:334
#, c-format
msgid "Log domains separated by ',': any combination of [%s]"
msgstr "「,ã€ã§åŒºåˆ‡ã£ãŸãƒ­ã‚°ãƒ‰ãƒ¡ã‚¤ãƒ³: [%s] ã®çµ„ã¿åˆã‚ã›"
-#: ../src/main.c:333
+#: ../src/main.c:336
msgid "Make all warnings fatal"
msgstr "ã™ã¹ã¦ã®è­¦å‘Šã‚’致命的ã«ã™ã‚‹"
-#: ../src/main.c:334
+#: ../src/main.c:337
msgid "Specify the location of a PID file"
msgstr "PID ファイルã®å ´æ‰€ã‚’指定ã™ã‚‹"
-#: ../src/main.c:334
+#: ../src/main.c:337
msgid "filename"
msgstr "ファイルå"
-#: ../src/main.c:335
+#: ../src/main.c:338
msgid "State file location"
msgstr "状態ファイルã®å ´æ‰€"
-#: ../src/main.c:335
+#: ../src/main.c:338
msgid "/path/to/state.file"
msgstr "/path/to/state.file"
-#: ../src/main.c:361
+#: ../src/main.c:364
#, c-format
msgid "GModules are not supported on your platform!\n"
msgstr "GModules ã¯ã”使用ã®ãƒ—ラットフォームã§ã¯å¯¾å¿œã—ã¦ã„ã¾ã›ã‚“!\n"
-#: ../src/main.c:366
+#: ../src/main.c:369
#, c-format
msgid "You must be root to run NetworkManager!\n"
msgstr "NetworkManager を実行ã™ã‚‹ã«ã¯ root ã«ãªã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™!\n"
-#: ../src/main.c:389
+#: ../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"
@@ -4773,77 +5508,93 @@ msgstr ""
"ワイヤレスカードを関連付ã‘ã‚‹ã¹ãワイヤレスアクセスãƒã‚¤ãƒ³ãƒˆã®\n"
"ユーザーã«ã‚ˆã‚‹æŒ‡å®šã‚‚許å¯ã•ã‚Œã¾ã™ã€‚"
-#: ../src/main.c:395
+#: ../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:408 ../src/main.c:472
+#: ../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:459
+#: ../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:480
+#: ../src/main.c:482
+#, c-format
+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:495
#, c-format
msgid "State file %s parsing failed: (%d) %s\n"
msgstr "状態ファイル %s ã®è§£æžã«å¤±æ•—ã—ã¾ã—ãŸ: (%d) %s\n"
-#: ../src/main.c:493
+#: ../src/main.c:508
#, c-format
msgid "Could not daemonize: %s [error %u]\n"
msgstr "デーモン化ã§ãã¾ã›ã‚“ã§ã—ãŸ: %s [エラー %u]\n"
+#: ../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: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:315
+#: ../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:324
-#, fuzzy
+#: ../src/dhcp-manager/nm-dhcp-manager.c:322
msgid "'dhclient' could be found."
-msgstr "'dhclient' ãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸ"
+msgstr "'dhclient' ãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸã€‚"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:334
-#, fuzzy
+#: ../src/dhcp-manager/nm-dhcp-manager.c:332
msgid "'dhcpcd' could be found."
-msgstr "'dhcpcd' ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。"
+msgstr "'dhcpcd' ãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸã€‚"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:342
+#: ../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:366
+#: ../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:368
+#: ../src/dns-manager/nm-dns-manager.c:403
msgid "The nameservers listed below may not be recognized."
msgstr "以下ã®ä¸€è¦§ã«ã‚ã‚‹ãƒãƒ¼ãƒ ã‚µãƒ¼ãƒãƒ¼ã¯èªè­˜ã•ã‚Œãªã„ã‹ã‚‚知れã¾ã›ã‚“。"
-#: ../src/logging/nm-logging.c:152
+#: ../src/logging/nm-logging.c:149
#, c-format
msgid "Unknown log level '%s'"
msgstr "ä¸æ˜Žãªãƒ­ã‚°ãƒ¬ãƒ™ãƒ« '%s'"
-#: ../src/logging/nm-logging.c:198
+#: ../src/logging/nm-logging.c:226
#, c-format
msgid "Unknown log domain '%s'"
msgstr "ä¸æ˜Žãªãƒ­ã‚°ãƒ‰ãƒ¡ã‚¤ãƒ³ '%s'"
@@ -4872,7 +5623,6 @@ msgstr "複数ã®ãƒ—ラグインを「,ã€ã§åŒºåˆ‡ã£ãŸä¸€è¦§"
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) アドレス"
@@ -4890,18 +5640,18 @@ 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
+#: ../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/modem-manager/nm-modem-broadband.c:481
-#: ../src/modem-manager/nm-modem-old.c:891 ../src/devices/nm-device-bt.c:335
+#: ../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:133
+#: ../src/devices/nm-device-bond.c:146 ../tui/nm-editor-utils.c:204
#, c-format
msgid "Bond connection %d"
msgstr "ボンド接続 %d"
@@ -4911,33 +5661,33 @@ msgstr "ボンド接続 %d"
msgid "ADSL connection %d"
msgstr "ADSL 接続 %d"
-#: ../src/devices/nm-device-bridge.c:131
+#: ../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:306
+#: ../src/devices/nm-device-bt.c:308
#, c-format
msgid "PAN connection %d"
msgstr "PAN 接続 %d"
-#: ../src/devices/nm-device-bt.c:339
+#: ../src/devices/nm-device-bt.c:341
#, c-format
msgid "DUN connection %d"
msgstr "DUN 接続 %d"
-#: ../src/devices/nm-device-ethernet.c:1162
+#: ../src/devices/nm-device-ethernet.c:1254
#, c-format
msgid "PPPoE connection %d"
msgstr "PPPoE 接続 %d"
-#: ../src/devices/nm-device-ethernet.c:1162
+#: ../src/devices/nm-device-ethernet.c:1254
#: ../src/settings/nm-settings-utils.c:50
#, c-format
msgid "Wired connection %d"
msgstr "有線接続 %d"
-#: ../src/devices/nm-device-infiniband.c:265
+#: ../src/devices/nm-device-infiniband.c:270 ../tui/nm-editor-utils.c:177
#, c-format
msgid "InfiniBand connection %d"
msgstr "InfiniBand 接続 %d"
@@ -4947,17 +5697,17 @@ msgstr "InfiniBand 接続 %d"
msgid "Mesh %d"
msgstr "Mesh %d"
-#: ../src/devices/nm-device-team.c:147
+#: ../src/devices/nm-device-team.c:158 ../tui/nm-editor-utils.c:223
#, c-format
msgid "Team connection %d"
-msgstr "ãƒãƒ¼ãƒ æŽ¥ç¶š %d"
+msgstr "team 接続 %d"
-#: ../src/devices/nm-device-vlan.c:253
+#: ../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:878
+#: ../src/nm-manager.c:3420 ../tui/nm-editor-utils.c:246
#, c-format
msgid "VPN connection %d"
msgstr "VPN 接続 %d"
@@ -4992,24 +5742,25 @@ msgid "unable to join netlink group: %s"
msgstr "netlink グループã¸å‚加ã§ãã¾ã›ã‚“: %s"
#: ../src/nm-sleep-monitor-systemd.c:116
-#, fuzzy
-#| msgid "NetworkManager status"
msgid "NetworkManager needs to turn off networks"
-msgstr "NetworkManager ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹"
+msgstr "NetworkManager ã§ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’オフã«ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:112
+#: ../src/settings/plugins/ifcfg-rh/reader.c:115
msgid "System"
msgstr "システム"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:3803
+#: ../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:3889
+#: ../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 "ãƒãƒ¼ãƒ "
+msgstr "team "
-#: ../src/settings/plugins/ifcfg-rh/reader.c:4077
+#: ../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 "ブリッジ"
@@ -5019,7 +5770,9 @@ msgid "\rConnecting"
msgstr "\r接続中"
#: ../test/nm-online.c:104
-msgid "Time to wait for a connection, in seconds (without the option, default value is 30)"
+msgid ""
+"Time to wait for a connection, in seconds (without the option, default value "
+"is 30)"
msgstr "接続を待機ã™ã‚‹æ™‚間を秒å˜ä½ã§æŒ‡å®šã™ã‚‹ (オプションãªã—ã®å ´åˆã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆå€¤ã¯ 30)"
#: ../test/nm-online.c:105
@@ -5031,179 +5784,772 @@ msgid "Don't print anything"
msgstr "出力を抑制ã™ã‚‹"
#: ../test/nm-online.c:124
-msgid "Waits for NetworkManager to finish activating startup network connections."
+msgid ""
+"Waits for NetworkManager to finish activating startup network connections."
msgstr "NetworkManager ã«ã‚ˆã‚Šã‚¹ã‚¿ãƒ¼ãƒˆã‚¢ãƒƒãƒ—ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æŽ¥ç¶šã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ãƒˆãŒå®Œäº†ã•ã‚Œã‚‹ã®ã‚’å¾…æ©Ÿã—ã¾ã™ã€‚"
#: ../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 "Caught signal %d, shutting down..."
-#~ msgstr "シグナル %d ãŒå‡ºã¾ã—ãŸã€ã‚·ãƒ£ãƒƒãƒˆãƒ€ã‚¦ãƒ³ã—ã¾ã™..."
-
-#~ msgid "SCOPE"
-#~ msgstr "範囲"
-
-#~ msgid "DBUS-SERVICE"
-#~ msgstr "DBUS-サービス"
-
-#~ 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"
-#~ msgstr ""
-#~ "使用法: 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"
+#: ../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 "system"
-#~ 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 "user"
-#~ msgstr "ユーザー"
+#: ../tui/newt/nmt-newt-utils.c:354
+#, c-format
+msgid "Editor failed: %s"
+msgstr "エディタãŒå¤±æ•—ã—ã¾ã—ãŸ: %s"
-#~ msgid "Error: no valid parameter specified."
-#~ msgstr "エラー: 有効ãªãƒ‘ラメータãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。"
+#: ../tui/newt/nmt-newt-utils.c:360
+#, c-format
+msgid "Could not re-read file: %s"
+msgstr "ファイルã®å†èª­ã¿è¾¼ã¿ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ: %s"
-#~ msgid "state: %s\n"
-#~ msgstr "状態: %s\n"
+#: ../tui/nm-editor-utils.c:160
+#, c-format
+msgid "Ethernet connection %d"
+msgstr "イーサãƒãƒƒãƒˆæŽ¥ç¶š %d"
-#~ msgid "Connection activated\n"
-#~ msgstr "接続ã¯ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ãƒˆæ¸ˆã¿\n"
+#: ../tui/nm-editor-utils.c:168
+#, c-format
+msgid "Wi-Fi connection %d"
+msgstr "Wi-Fi 接続 %d"
-#~ msgid "state: %s (%d)\n"
-#~ msgstr "状態: %s (%d)\n"
+#: ../tui/nm-editor-utils.c:182 ../tui/nm-ui-utils.c:345
+msgid "Mobile Broadband"
+msgstr "モãƒã‚¤ãƒ«ãƒ–ロードãƒãƒ³ãƒ‰"
-#~ msgid "Active connection path: %s\n"
-#~ msgstr "アクティブ接続ã®ãƒ‘ス: %s\n"
+#: ../tui/nm-editor-utils.c:185
+#, c-format
+msgid "Mobile broadband connection %d"
+msgstr "モãƒã‚¤ãƒ«ãƒ–ロードãƒãƒ³ãƒ‰æŽ¥ç¶š %d"
-#~ msgid "Error: id or uuid has to be specified."
-#~ msgstr "エラー: id ã‹åˆã¯ uuid ã®æŒ‡å®šãŒå¿…è¦ã§ã™"
+#: ../tui/nm-editor-utils.c:190
+msgid "DSL"
+msgstr "DSL"
-#~ msgid "Warning: Connection not active\n"
-#~ msgstr "警告: 接続ã¯ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã§ã‚ã‚Šã¾ã›ã‚“\n"
+#: ../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 "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"
+
+#: ../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 "ãƒã‚¤ãƒˆ"
-#~ msgid "Error: could not connect to D-Bus."
-#~ msgstr "エラー: D-Bus ã«æŽ¥ç¶šã§ãã¾ã›ã‚“ã§ã—ãŸ"
+#: ../tui/nmt-page-bond.c:88
+msgid "Round-robin"
+msgstr "ラウンドロビン"
-#~ msgid "IP4-SETTINGS"
-#~ msgstr "IP4-セッティング"
+#: ../tui/nmt-page-bond.c:89
+msgid "Active Backup"
+msgstr "アクティブãªãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—"
-#~ msgid "PREFIX"
-#~ msgstr "接頭辞"
+#: ../tui/nmt-page-bond.c:90
+msgid "XOR"
+msgstr "XOR"
-#~ 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"
-#~ msgstr ""
-#~ "使用法: 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"
+#: ../tui/nmt-page-bond.c:91
+msgid "Broadcast"
+msgstr "ブロードキャスト"
-#~ msgid "Encrypted: "
-#~ msgstr "æš—å·åŒ–:"
+#: ../tui/nmt-page-bond.c:92
+msgid "802.3ad"
+msgstr "802.3ad"
-#~ msgid "WEP "
-#~ msgstr "WEP "
+#: ../tui/nmt-page-bond.c:93
+msgid "Adaptive Transmit Load Balancing (tlb)"
+msgstr "é©å¿œåž‹é€ä¿¡è² è·åˆ†æ•£æ©Ÿèƒ½ (tlb)"
-#~ msgid "WPA "
-#~ msgstr "WPA "
+#: ../tui/nmt-page-bond.c:94
+msgid "Adaptive Load Balancing (alb)"
+msgstr "é©å¿œåž‹è² è·åˆ†æ•£æ©Ÿèƒ½ (alb)"
-#~ msgid "WPA2 "
-#~ msgstr "WPA2 "
+#: ../tui/nmt-page-bond.c:100
+msgid "MII (recommended)"
+msgstr "MII (推奨)"
-#~ msgid "Enterprise "
-#~ msgstr "Enterprise "
+#: ../tui/nmt-page-bond.c:101
+msgid "ARP"
+msgstr "ARP"
-#~ msgid "Infrastructure"
-#~ 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 "ヘアピンモード"
-#~ msgid "unknown)"
-#~ 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 "Hello タイム"
+
+#: ../tui/nmt-page-bridge.c:142
+msgid "Max age"
+msgstr "最大エイジ"
-#~ msgid "Device state: %d (%s)\n"
-#~ msgstr "デãƒã‚¤ã‚¹ã®çŠ¶æ…‹: %d (%s)\n"
+#: ../tui/nmt-page-ethernet.c:41
+msgid "ETHERNET"
+msgstr "イーサãƒãƒƒãƒˆ"
-#~ msgid "WIFI-HARDWARE"
-#~ msgstr "WIFI ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢"
+#: ../tui/nmt-page-ethernet.c:80 ../tui/nmt-page-vlan.c:132
+#: ../tui/nmt-page-wifi.c:358
+msgid "Cloned MAC address"
+msgstr "クローン㮠MAC アドレス"
-#~ msgid "WWAN-HARDWARE"
-#~ msgstr "WWAN ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢"
+#: ../tui/nmt-page-infiniband.c:40
+msgid "INFINIBAND"
+msgstr "インフィニãƒãƒ³ãƒ‰"
-#~ msgid "Error: 'nm status': %s; allowed fields: %s"
-#~ msgstr "エラー: 'nm status': %s; 許å¯ã•ã‚Œã‚‹ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰: %s"
+#: ../tui/nmt-page-infiniband.c:51
+msgid "Datagram"
+msgstr "データグラム"
-#~ msgid "WiFi enabled"
-#~ msgstr "Wi-Fi ã¯æœ‰åŠ¹ã§ã™"
+#: ../tui/nmt-page-infiniband.c:52
+msgid "Connected"
+msgstr "接続ã•ã‚Œã¾ã—ãŸ"
-#~ msgid "WWAN enabled"
-#~ msgstr "WWAN ã¯æœ‰åŠ¹ã§ã™"
+#: ../tui/nmt-page-infiniband.c:84
+msgid "Transport mode"
+msgstr "トランスãƒãƒ¼ãƒˆãƒ¢ãƒ¼ãƒ‰"
-#~ msgid "Not enough memory to store PEM file data."
-#~ msgstr "PEM ファイルデータã®ä¿å­˜ã«å分ãªãƒ¡ãƒ¢ãƒªãƒ¼ãŒã‚ã‚Šã¾ã›ã‚“。"
+#: ../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 "ローカルã«ãƒªãƒ³ã‚¯"
-#~ msgid "Not enough memory to store certificate data."
-#~ msgstr "証明書データã®ä¿å­˜ã«å分ãªãƒ¡ãƒ¢ãƒªãƒ¼ãŒã‚ã‚Šã¾ã›ã‚“。"
+#: ../tui/nmt-page-ip4.c:44 ../tui/nmt-page-ip6.c:45
+msgid "Manual"
+msgstr "手作業"
-#~ msgid "Not enough memory to store file data."
-#~ msgstr "ファイルデータã®ä¿å­˜ã«å分ãªãƒ¡ãƒ¢ãƒªãƒ¼ãŒã‚ã‚Šã¾ã›ã‚“。"
+#: ../tui/nmt-page-ip4.c:45
+msgid "Shared"
+msgstr "共有"
-#~ msgid "Not enough memory to store the IV."
-#~ msgstr "IV ã®ä¿å­˜ã«å分ãªãƒ¡ãƒ¢ãƒªãƒ¼ãŒã‚ã‚Šã¾ã›ã‚“。"
+#: ../tui/nmt-page-ip4.c:54
+msgid "IPv4 CONFIGURATION"
+msgstr "IPv4 設定"
-#~ msgid "Not enough memory to decrypt private key."
-#~ msgstr "プライベートキーã®è§£èª­ã«å分ãªãƒ¡ãƒ¢ãƒªãƒ¼ãŒã‚ã‚Šã¾ã›ã‚“。"
+#: ../tui/nmt-page-ip4.c:100 ../tui/nmt-page-ip6.c:100
+msgid "(No custom routes)"
+msgstr "(カスタムã®ãƒ«ãƒ¼ãƒˆãªã—)"
-#~ msgid "Not enough memory to store decrypted private key."
-#~ 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 ã¤ã®ã‚«ã‚¹ã‚¿ãƒ ãƒ«ãƒ¼ãƒˆ"
+
+#: ../tui/nmt-page-ip4.c:141 ../tui/nmt-page-ip6.c:141
+msgid "Addresses"
+msgstr "アドレス"
-#~ msgid "Not enough memory for decrypted key buffer."
-#~ 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 "team ãƒãƒ¼ãƒˆ"
+
+#: ../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 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 ビットã®ã‚­ãƒ¼ (16 進数ã¾ãŸã¯ 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 "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 "パスワード"
+
+#: ../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 "èªè¨¼"
+
+#: ../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 "メトリック"
+
+#: ../tui/nmt-route-table.c:256
+msgid "No custom routes are defined."
+msgstr "カスタムã®ãƒ«ãƒ¼ãƒˆãŒå®šç¾©ã•ã‚Œã¦ã„ã¾ã›ã‚“。"
+
+#: ../tui/nmt-secret-agent.c:223
+msgid "Identity"
+msgstr "ID"
+
+#: ../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"
+
+#: ../tui/nmtui.c:59 ../tui/nmtui.c:62
+msgid "connection"
+msgstr "接続"
-#~ msgid "Could not allocate memory for encrypting."
-#~ msgstr "æš—å·åŒ–用ã®ãƒ¡ãƒ¢ãƒªãƒ¼å‰²ã‚Šå½“ã¦ãŒå‡ºæ¥ã¾ã›ã‚“ã§ã—ãŸã€‚"
+#: ../tui/nmtui.c:60
+msgid "Edit a connection"
+msgstr "接続ã®ç·¨é›†"
-#~ msgid "Not enough memory to make encryption key."
-#~ msgstr "æš—å·åŒ–キーを作æˆã™ã‚‹ã®ã«å分ãªãƒ¡ãƒ¢ãƒªãƒ¼ãŒã‚ã‚Šã¾ã›ã‚“。"
+#: ../tui/nmtui.c:63
+msgid "Activate a connection"
+msgstr "接続をアクティベートã™ã‚‹"
-#~ msgid "Could not allocate memory for PEM file creation."
-#~ msgstr "PEM ファイル作æˆç”¨ã«ãƒ¡ãƒ¢ãƒªãƒ¼ã‚’割り当ã¦å‡ºæ¥ã¾ã›ã‚“。"
+#: ../tui/nmtui.c:65
+msgid "new hostname"
+msgstr "æ–°è¦ã®ãƒ›ã‚¹ãƒˆå"
-#~ msgid "Could not allocate memory for writing IV to PEM file."
-#~ msgstr "PEM ファイルã¸ã® IV ã®æ›¸ãè¾¼ã¿ç”¨ã«ãƒ¡ãƒ¢ãƒªãƒ¼ã‚’割り当ã¦å‡ºæ¥ã¾ã›ã‚“。"
+#: ../tui/nmtui.c:66
+msgid "Set system hostname"
+msgstr "システムã®ãƒ›ã‚¹ãƒˆåを設定ã™ã‚‹"
-#~ msgid "Could not allocate memory for writing encrypted key to PEM file."
-#~ msgstr "PEM ファイルã¸ã®æš—å·åŒ–キーã®æ›¸ãè¾¼ã¿ç”¨ã«ãƒ¡ãƒ¢ãƒªãƒ¼ã‚’割り当ã¦å‡ºæ¥ã¾ã›ã‚“。"
+#: ../tui/nmtui.c:89
+msgid "NetworkManager TUI"
+msgstr "NetworkManager TUI"
-#~ msgid "Could not allocate memory for PEM file data."
-#~ msgstr "PEM ファイルデータ用ã«ãƒ¡ãƒ¢ãƒªãƒ¼ã‚’割り当ã¦å‡ºæ¥ã¾ã›ã‚“。"
+#: ../tui/nmtui.c:97
+msgid "Please select an option"
+msgstr "オプションをé¸æŠžã—ã¦ãã ã•ã„"
-#~ msgid "unable to allocate netlink link cache for monitoring link status: %s"
-#~ msgstr "リンク状æ³ç›£è¦–用ã®ãƒãƒƒãƒˆãƒªãƒ³ã‚¯ã®ãƒªãƒ³ã‚¯ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’割り当ã¦ã§ãã¾ã›ã‚“: %s"
+#: ../tui/nmtui.c:154
+msgid "Usage"
+msgstr "使ã„æ–¹"
-#~ msgid "error updating link cache: %s"
-#~ msgstr "リンクキャッシュã®æ›´æ–°ä¸­ã«ã‚¨ãƒ©ãƒ¼: %s"
+#: ../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/kn.po b/po/kn.po
index 16d69e0e5..c9e35952f 100644
--- a/po/kn.po
+++ b/po/kn.po
@@ -2,562 +2,723 @@
# 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, 2013.
# Shankar Prasad <svenkate@redhat.com>, 2009, 2010, 2012, 2013, 2014.
-# Shankar <svenkate@redhat.com>, 2014. #zanata
+# Shankar <svenkate@redhat.com>, 2014. #zanata.
msgid ""
msgstr ""
-"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-01-30 05:52-0500\n"
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=NetworkManager&keywords=I18N+L10N&component=Translations\n"
+"POT-Creation-Date: 2014-09-17 22:04+0000\n"
+"PO-Revision-Date: 2014-09-22 22:26+0530\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"
+"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"
-#: ../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
+#: ../clients/cli/common.c:38 ../clients/cli/common.c:50
+#: ../clients/cli/common.c:58 ../clients/cli/common.c:69
+#: ../clients/cli/connections.c:169 ../clients/cli/connections.c:191
msgid "GROUP"
msgstr "GROUP"
-#: ../cli/src/common.c:35 ../cli/src/common.c:55
+#. 0
+#: ../clients/cli/common.c:39 ../clients/cli/common.c:59
msgid "ADDRESS"
msgstr "ADDRESS"
-#: ../cli/src/common.c:36 ../cli/src/common.c:56
+#. 1
+#: ../clients/cli/common.c:40 ../clients/cli/common.c:60
msgid "ROUTE"
msgstr "ROUTE"
-#: ../cli/src/common.c:37 ../cli/src/common.c:57
+#. 2
+#: ../clients/cli/common.c:41 ../clients/cli/common.c:61
msgid "DNS"
msgstr "DNS"
-#: ../cli/src/common.c:38 ../cli/src/common.c:58
+#. 3
+#: ../clients/cli/common.c:42 ../clients/cli/common.c:62
msgid "DOMAIN"
msgstr "DOMAIN"
-#: ../cli/src/common.c:39
+#. 4
+#: ../clients/cli/common.c:43
msgid "WINS"
msgstr "WINS"
-#: ../cli/src/common.c:47 ../cli/src/common.c:66
+#. 0
+#: ../clients/cli/common.c:51 ../clients/cli/common.c:70
msgid "OPTION"
msgstr "OPTION"
-#: ../cli/src/common.c:404 ../cli/src/settings.c:2808
+#: ../clients/cli/common.c:371 ../clients/cli/settings.c:3049
+#: ../clients/cli/settings.c:3068
#, c-format
msgid "invalid IPv4 address '%s'"
msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ IPv4 ವಿಳಾಸ '%s'"
-#: ../cli/src/common.c:412
+#: ../clients/cli/common.c:379
#, c-format
msgid "invalid prefix '%s'; <1-32> allowed"
msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ ಪà³à²°à²¿à²«à²¿à²•à³à²¸à³ '%s'; <1-32> ಅನà³à²®à²¤à²¿à²¸à²²à²¾à²—ಿದೆ"
-#: ../cli/src/common.c:419 ../cli/src/common.c:472
+#: ../clients/cli/common.c:386 ../clients/cli/common.c:439
#, c-format
msgid "invalid gateway '%s'"
msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ ಗೇಟà³â€Œà²µà³‡ '%s'"
-#: ../cli/src/common.c:457 ../cli/src/settings.c:3054
+#: ../clients/cli/common.c:424 ../clients/cli/settings.c:3395
+#: ../clients/cli/settings.c:3414
#, c-format
msgid "invalid IPv6 address '%s'"
msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ IPv4 ವಿಳಾಸ '%s'"
-#: ../cli/src/common.c:465
+#: ../clients/cli/common.c:432
#, c-format
msgid "invalid prefix '%s'; <1-128> allowed"
msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ ಪà³à²°à²¿à²«à²¿à²•à³à²¸à³ '%s'; <1-128> ಅನà³à²®à²¤à²¿à²¸à²²à²¾à²—ಿದೆ"
-#: ../cli/src/common.c:512
+#: ../clients/cli/common.c:515
#, c-format
-msgid "invalid IPv4 route '%s'"
-msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ IPv4 ರೌಟೠ'%s'"
+#| msgid "invalid next hop address '%s'"
+msgid "invalid route destination address '%s'"
+msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ ರೌಟೠಗà³à²°à²¿à²¯ ವಿಳಾಸ '%s'"
-#: ../cli/src/common.c:520
+#: ../clients/cli/common.c:522
#, c-format
-msgid "invalid prefix '%s'; <0-32> allowed"
-msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ ಪà³à²°à²¿à²«à²¿à²•à³à²¸à³ '%s'; <0-32> ಅನà³à²®à²¤à²¿à²¸à²²à²¾à²—ಿದೆ"
+#| msgid "invalid prefix '%s'; <1-32> allowed"
+msgid "invalid prefix '%s'; <1-%d> allowed"
+msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ ಪà³à²°à²¿à²«à²¿à²•à³à²¸à³ '%s'; <1-%d> ಅನà³à²®à²¤à²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¦à³†"
-#: ../cli/src/common.c:527 ../cli/src/common.c:590
+#: ../clients/cli/common.c:532
#, c-format
msgid "invalid next hop address '%s'"
msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ ಮà³à²‚ದಿನ hop ವಿಳಾಸ '%s'"
-#: ../cli/src/common.c:534 ../cli/src/common.c:598
+#: ../clients/cli/common.c:537
#, c-format
-msgid "invalid metric '%s'"
-msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ ಮೆಟà³à²°à²¿à²•à³ '%s'"
+msgid ""
+"the second component of route ('%s') is neither a next hop address nor a "
+"metric"
+msgstr ""
+"ರೌಟà³â€Œà²¨ ಎರಡನೆ ಘಟಕವೠ('%s') ಒಂದೠಮà³à²‚ದಿನ ಹಾಪೠವಿಳಾಸವಾಗಲಿ ಒಂದೠಮೆಟà³à²°à²¿à²•à³ ಆಗಲಿ "
+"ಆಗಿಲà³à²²"
-#: ../cli/src/common.c:575
+#: ../clients/cli/common.c:547
#, c-format
-msgid "invalid IPv6 route '%s'"
-msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ IPv6 ರೌಟೠ'%s'"
+msgid "invalid metric '%s'"
+msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ ಮೆಟà³à²°à²¿à²•à³ '%s'"
-#: ../cli/src/common.c:583
-#, c-format
-msgid "invalid prefix '%s'; <0-128> allowed"
-msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ ಪà³à²°à²¿à²«à²¿à²•à³à²¸à³ '%s'; <0-128> ಅನà³à²®à²¤à²¿à²¸à²²à²¾à²—ಿದೆ"
+#: ../clients/cli/common.c:556
+msgid "default route cannot be added (NetworkManager handles it by itself)"
+msgstr ""
+"ಪೂರà³à²µà²¨à²¿à²¯à³‹à²œà²¿à²¤ ರೌಟà³â€Œ ಅನà³à²¨à³ ಸೇರಿಸಲೠಸಾಧà³à²¯à²µà²¿à²²à³à²² (NetworkManager ಅದನà³à²¨à³ ಸà³à²µà²¯à²‚ "
+"ನಿಭಾಯಿಸà³à²¤à³à²¤à²¦à³†)"
-#: ../cli/src/common.c:619
+#: ../clients/cli/common.c:644
msgid "unmanaged"
msgstr "ನಿರà³à²µà²¹à²¿à²¸à²¦à³† ಇರà³à²µ"
-#: ../cli/src/common.c:621
+#: ../clients/cli/common.c:646
msgid "unavailable"
msgstr "ಲಭà³à²¯à²µà²¿à²²à³à²²"
-#: ../cli/src/common.c:623 ../cli/src/network-manager.c:276
+#: ../clients/cli/common.c:648 ../clients/cli/network-manager.c:274
msgid "disconnected"
msgstr "ಸಂಪರà³à²•à²•à²¡à²¿à²¦à³ ಹೋಗಿದೆ"
-#: ../cli/src/common.c:625
+#: ../clients/cli/common.c:650
msgid "connecting (prepare)"
msgstr "ಸಂಪರà³à²• ಕಲà³à²ªà²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¿à²¦à³† (ಸಿದà³à²§à²—ೊಳಿಕೆ)"
-#: ../cli/src/common.c:627
+#: ../clients/cli/common.c:652
msgid "connecting (configuring)"
msgstr "ಸಂಪರà³à²• ಕಲà³à²ªà²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¿à²¦à³† (ಸಂರಚಿಸà³à²µà²¿à²•à³†)"
-#: ../cli/src/common.c:629
+#: ../clients/cli/common.c:654
msgid "connecting (need authentication)"
msgstr "ಸಂಪರà³à²• ಕಲà³à²ªà²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¿à²¦à³† (ದೃಢೀಕರಣದ ಅಗತà³à²¯à²µà²¿à²¦à³†)"
-#: ../cli/src/common.c:631
+#: ../clients/cli/common.c:656
msgid "connecting (getting IP configuration)"
msgstr "ಸಂಪರà³à²• ಕಲà³à²ªà²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¿à²¦à³† (IP ಸಂರಚನೆಯನà³à²¨à³ ಪಡೆಯಲಾಗà³à²¤à³à²¤à²¿à²¦à³†)"
-#: ../cli/src/common.c:633
+#: ../clients/cli/common.c:658
msgid "connecting (checking IP connectivity)"
msgstr "ಸಂಪರà³à²• ಕಲà³à²ªà²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¿à²¦à³† (IP ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಪರಿಶೀಲಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†)"
-#: ../cli/src/common.c:635
+#: ../clients/cli/common.c:660
msgid "connecting (starting secondary connections)"
msgstr "ಸಂಪರà³à²• ಕಲà³à²ªà²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¿à²¦à³† (ಎರಡನೆಯ ಸಂರಚನೆಯನà³à²¨à³ ಆರಂಭಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†)"
-#: ../cli/src/common.c:637 ../cli/src/network-manager.c:272
+#: ../clients/cli/common.c:662 ../clients/cli/network-manager.c:270
msgid "connected"
msgstr "ಸಂಪರà³à²•à²—ೊಂಡಿದೆ"
-#: ../cli/src/common.c:639 ../cli/src/connections.c:732
+#: ../clients/cli/common.c:664 ../clients/cli/connections.c:542
msgid "deactivating"
msgstr "ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳà³à²³à³à²¤à³à²¤à²¿à²¦à³†"
-#: ../cli/src/common.c:641
+#: ../clients/cli/common.c:666
msgid "connection failed"
msgstr "ಸಂಪರà³à²• ವಿಫಲಗೊಂಡಿದೆ"
-#: ../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
+#: ../clients/cli/common.c:668 ../clients/cli/connections.c:547
+#: ../clients/cli/connections.c:570 ../clients/cli/connections.c:1638
+#: ../clients/cli/devices.c:816 ../clients/cli/devices.c:2367
+#: ../clients/cli/network-manager.c:277 ../clients/cli/network-manager.c:295
+#: ../clients/cli/network-manager.c:358 ../clients/cli/network-manager.c:361
+#: ../clients/cli/network-manager.c:371 ../clients/cli/network-manager.c:373
+#: ../clients/cli/network-manager.c:430 ../clients/cli/network-manager.c:446
+#: ../clients/cli/settings.c:703 ../clients/cli/settings.c:765
+#: ../clients/cli/settings.c:1057 ../clients/cli/utils.c:1121
+#: ../src/main.c:504 ../src/main.c:532
msgid "unknown"
msgstr "ಗೊತà³à²¤à²¿à²²à³à²²à²¦"
-#: ../cli/src/common.c:652
+#: ../clients/cli/common.c:677
msgid "No reason given"
msgstr "ಯಾವà³à²¦à³† ಕಾರಣ ನೀಡಲಾಗಿಲà³à²²"
-#: ../cli/src/common.c:655 ../cli/src/connections.c:2258
+#: ../clients/cli/common.c:680 ../clients/cli/connections.c:2413
#, c-format
msgid "Unknown error"
msgstr "ಗೊತà³à²¤à²¿à²°à²¦ ದೋಷ"
-#: ../cli/src/common.c:658
+#: ../clients/cli/common.c:683
msgid "Device is now managed"
msgstr "ಸಾಧನವನà³à²¨à³ ಈಗ ನಿಯಂತà³à²°à²£à²•à³à²•à³Šà²³à²ªà²¡à²¿à²¸à²²à²¾à²—ಿದೆ"
-#: ../cli/src/common.c:661
+#: ../clients/cli/common.c:686
msgid "Device is now unmanaged"
msgstr "ಸಾಧನವನà³à²¨à³ ಈಗ ನಿಯಂತà³à²°à²£à²•à³à²•à³Šà²³à²ªà²¡à²¿à²¸à²²à²¾à²—ಿಲà³à²²"
-#: ../cli/src/common.c:664
+#: ../clients/cli/common.c:689
msgid "The device could not be readied for configuration"
msgstr "ಸಾಧನವನà³à²¨à³ ಸಂರಚನೆಗಾಗಿ ಸಿದà³à²§à²—ೊಳಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²"
-#: ../cli/src/common.c:667
+#: ../clients/cli/common.c:692
msgid ""
"IP configuration could not be reserved (no available address, timeout, etc.)"
msgstr ""
"IP ಸಂರಚನೆಯನà³à²¨à³ ಕಾದಿರಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²² (ಲಭà³à²¯à²µà²¿à²°à³à²µ ಯಾವà³à²¦à³† ವಿಳಾಸ, ಕಾಲತೀರಿಕೆ, "
"ಮà³à²‚ತಾದವà³à²—ಳಿಲà³à²².)"
-#: ../cli/src/common.c:670
+#: ../clients/cli/common.c:695
msgid "The IP configuration is no longer valid"
msgstr "IP ಸಂರಚನೆಯೠಇನà³à²¨à³ ಮà³à²‚ದೆ ಮಾನà³à²¯à²µà²¾à²—ಿರà³à²µà³à²¦à²¿à²²à³à²²"
-#: ../cli/src/common.c:673
+#: ../clients/cli/common.c:698
msgid "Secrets were required, but not provided"
msgstr "ರಹಸà³à²¯à²—ಳ ಅಗತà³à²¯à²µà²¿à²¦à³†, ಆದರೆ ಒದಗಿಸಲಾಗಿಲà³à²²"
-#: ../cli/src/common.c:676
+#: ../clients/cli/common.c:701
msgid "802.1X supplicant disconnected"
msgstr "802.1X ಸಪà³à²²à²¿à²•à³à²¯à²¾à²‚ಟà³â€Œà²¨à³Šà²‚ದಿಗಿನ ಸಂಪರà³à²• ಕಡಿದಿದೆ"
-#: ../cli/src/common.c:679
+#: ../clients/cli/common.c:704
msgid "802.1X supplicant configuration failed"
msgstr "802.1X ಸಪà³à²²à²¿à²•à³à²¯à²¾à²‚ಟೠಸಂರಚನೆಯೠವಿಫಲಗೊಂಡಿದೆ"
-#: ../cli/src/common.c:682
+#: ../clients/cli/common.c:707
msgid "802.1X supplicant failed"
msgstr "802.1X ಸಪà³à²²à²¿à²•à³à²¯à²¾à²‚ಟೠವಿಫಲಗೊಂಡಿದೆ"
-#: ../cli/src/common.c:685
+#: ../clients/cli/common.c:710
msgid "802.1X supplicant took too long to authenticate"
msgstr "802.1X ಸಪà³à²²à²¿à²•à³à²¯à²¾à²‚ಟà³â€Œ ದೃಢೀಕರಿಸಲೠಬಹಳ ಸಮಯ ತೆಗೆದà³à²•à³Šà²‚ಡಿದೆ"
-#: ../cli/src/common.c:688
+#: ../clients/cli/common.c:713
msgid "PPP service failed to start"
msgstr "PPP ಸೇವೆಯನà³à²¨à³ ಆರಂಭಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲತೆ"
-#: ../cli/src/common.c:691
+#: ../clients/cli/common.c:716
msgid "PPP service disconnected"
msgstr "PPP ಸೇವೆಯ ಸಂಪರà³à²• ಕಡಿದಿದೆ"
-#: ../cli/src/common.c:694
+#: ../clients/cli/common.c:719
msgid "PPP failed"
msgstr "PPP ವಿಫಲಗೊಂಡಿದೆ"
-#: ../cli/src/common.c:697
+#: ../clients/cli/common.c:722
msgid "DHCP client failed to start"
msgstr "DHCP ಕà³à²²à³ˆà²‚ಟೠಆರಂಭಗೊಳà³à²³à³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ"
-#: ../cli/src/common.c:700
+#: ../clients/cli/common.c:725
msgid "DHCP client error"
msgstr "DHCP ಕà³à²²à³ˆà²‚ಟೠದೋಷ"
-#: ../cli/src/common.c:703
+#: ../clients/cli/common.c:728
msgid "DHCP client failed"
msgstr "DHCP ಕà³à²²à³ˆà²‚ಟೠವಿಫಲಗೊಂಡಿದೆ"
-#: ../cli/src/common.c:706
+#: ../clients/cli/common.c:731
msgid "Shared connection service failed to start"
msgstr "ಹಂಚಲಾದ ಸಂಪರà³à²• ಸೇವೆಯೠಆರಂಭಗೊಳà³à²³à³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ"
-#: ../cli/src/common.c:709
+#: ../clients/cli/common.c:734
msgid "Shared connection service failed"
msgstr "ಹಂಚಲಾದ ಸಂಪರà³à²• ಸೇವೆಯೠವಿಫಲಗೊಂಡಿದೆ"
-#: ../cli/src/common.c:712
+#: ../clients/cli/common.c:737
msgid "AutoIP service failed to start"
msgstr "AutoIP ಸೇವೆಯನà³à²¨à³ ಆರಂಭಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲತೆ"
-#: ../cli/src/common.c:715
+#: ../clients/cli/common.c:740
msgid "AutoIP service error"
msgstr "AutoIP ಸೇವಾ ದೋಷ"
-#: ../cli/src/common.c:718
+#: ../clients/cli/common.c:743
msgid "AutoIP service failed"
msgstr "AutoIP ಸೇವೆಯೠವಿಫಲಗೊಂಡಿದೆ"
-#: ../cli/src/common.c:721
+#: ../clients/cli/common.c:746
msgid "The line is busy"
msgstr "ಮಾರà³à²—ವೠಕಾರà³à²¯à²¨à²¿à²°à²¤à²µà²¾à²—ಿದೆ"
-#: ../cli/src/common.c:724
+#: ../clients/cli/common.c:749
msgid "No dial tone"
msgstr "ಡಯಲೠಶಬà³à²§à²µà²¿à²²à³à²²"
-#: ../cli/src/common.c:727
+#: ../clients/cli/common.c:752
msgid "No carrier could be established"
msgstr "ಯಾವà³à²¦à³† ವಾಹಕವನà³à²¨à³ ಸಾಧಿಸಲಾಗಿಲà³à²²"
-#: ../cli/src/common.c:730
+#: ../clients/cli/common.c:755
msgid "The dialing request timed out"
msgstr "ಡಯಲೠಮಾಡà³à²µ ಮನವಿಯ ಕಾಲಾವಧಿ ಮà³à²—ಿದಿದೆ"
-#: ../cli/src/common.c:733
+#: ../clients/cli/common.c:758
msgid "The dialing attempt failed"
msgstr "ಡಯಲೠಮಾಡà³à²µ ಪà³à²°à²¯à²¤à³à²¨à²µà³ ವಿಫಲಗೊಂಡಿದೆ"
-#: ../cli/src/common.c:736
+#: ../clients/cli/common.c:761
msgid "Modem initialization failed"
msgstr "ಮಾಡೆಮೠಆರಂಭಗೊಳಿಕೆಯೠವಿಫಲಗೊಂಡಿದೆ"
-#: ../cli/src/common.c:739
+#: ../clients/cli/common.c:764
msgid "Failed to select the specified APN"
msgstr "ನಿಶà³à²šà²¿à²¤ APN ಅನà³à²¨à³ ಆರಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ."
-#: ../cli/src/common.c:742
+#: ../clients/cli/common.c:767
msgid "Not searching for networks"
msgstr "ಜಾಲಬಂಧಗಳಿಗಾಗಿ ಹà³à²¡à³à²•à²²à²¾à²—à³à²¤à³à²¤à²¿à²²à³à²²"
-#: ../cli/src/common.c:745
+#: ../clients/cli/common.c:770
msgid "Network registration denied"
msgstr "ಜಾಲಬಂಧ ನೋಂದಣಿಯನà³à²¨à³ ನಿರಾಕರಿಸಲಾಗಿದೆ"
-#: ../cli/src/common.c:748
+#: ../clients/cli/common.c:773
msgid "Network registration timed out"
msgstr "ಜಾಲಬಂಧ ನೋಂದಣಿಯ ಕಾಲಾವಧಿ ತೀರಿದೆ"
-#: ../cli/src/common.c:751
+#: ../clients/cli/common.c:776
msgid "Failed to register with the requested network"
msgstr "ಮನವಿ ಸಲà³à²²à²¿à²¸à²²à²¾à²¦ ಜಾಲಬಂಧದೊಂದಿಗೆ ನೋಂದಾಯಿಸಲೠವಿಫಲಗೊಂಡಿದೆ"
-#: ../cli/src/common.c:754
+#: ../clients/cli/common.c:779
msgid "PIN check failed"
msgstr "PIN ಪರಿಶೀಲನೆಯೠವಿಫಲಗೊಂಡಿದೆ"
-#: ../cli/src/common.c:757
+#: ../clients/cli/common.c:782
msgid "Necessary firmware for the device may be missing"
msgstr "ಸಾಧನಕà³à²•à²¾à²—ಿ ಯಾವà³à²¦à³† ಅಗತà³à²¯ ಫರà³à²®à³-ವೇರೠಕಾಣಿಸà³à²¤à³à²¤à²¿à²²à³à²²"
-#: ../cli/src/common.c:760
+#: ../clients/cli/common.c:785
msgid "The device was removed"
msgstr "ಸಾಧನವನà³à²¨à³ ತೆಗೆದೠಹಾಕಲಾಗಿದೆ"
-#: ../cli/src/common.c:763
+#: ../clients/cli/common.c:788
msgid "NetworkManager went to sleep"
msgstr "NetworkManager ನಿದà³à²°à²¾à²¸à³à²¥à²¿à²¤à²¿à²—ೆ ಹೋಗಿದೆ"
-#: ../cli/src/common.c:766
+#: ../clients/cli/common.c:791
msgid "The device's active connection disappeared"
msgstr "ಸಾಧನದ ಸಕà³à²°à²¿à²¯ ಸಂಪರà³à²•à²µà³ ಮರೆಯಾಗಿದೆ"
-#: ../cli/src/common.c:769
+#: ../clients/cli/common.c:794
msgid "Device disconnected by user or client"
msgstr "ಸಾಧನದೊಂದಿಗಿನ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಬಳಕೆದಾರ ಅಥವ ಕà³à²²à³ˆà²‚ಟà³â€Œà²¨à²¿à²‚ದ ಕಡಿದೠಹಾಕಲಾಗಿದೆ"
-#: ../cli/src/common.c:772
+#: ../clients/cli/common.c:797
msgid "Carrier/link changed"
msgstr "ವಾಹಕ/ಕೊಂಡಿಯನà³à²¨à³ ಬದಲಾಯಿಸಲಾಗಿದೆ"
-#: ../cli/src/common.c:775
+#: ../clients/cli/common.c:800
msgid "The device's existing connection was assumed"
msgstr "ಸಾಧನದ ಈಗಿನ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಊಹಿಸಲಾಗಿದೆ"
-#: ../cli/src/common.c:778
+#: ../clients/cli/common.c:803
msgid "The supplicant is now available"
msgstr "ಸಪà³à²²à²¿à²•à³à²¯à²¾à²‚ಟೠಈಗ ಲಭà³à²¯à²µà²¿à²¦à³†"
-#: ../cli/src/common.c:781
+#: ../clients/cli/common.c:806
msgid "The modem could not be found"
msgstr "ಮಾಡೆಮà³â€Œ ಕಂಡೠಬಂದಿಲà³à²²"
-#: ../cli/src/common.c:784
+#: ../clients/cli/common.c:809
msgid "The Bluetooth connection failed or timed out"
msgstr "ಬà³à²²à³‚ಟೂತೠಸಂಪರà³à²•à²µà³ ವಿಫಲಗೊಂಡಿದೆ ಅಥವ ಕಾಲಾವಧಿ ಮೀರಿದೆ"
-#: ../cli/src/common.c:787
+#: ../clients/cli/common.c:812
msgid "GSM Modem's SIM card not inserted"
msgstr "GSM ಮಾಡೆಮà³â€Œà²¨ SIM ಕಾರà³à²¡à³ ಅನà³à²¨à³ ಸೇರಿಸಲಾಗಿಲà³à²²"
-#: ../cli/src/common.c:790
+#: ../clients/cli/common.c:815
msgid "GSM Modem's SIM PIN required"
msgstr "GSM ಮಾಡೆಮà³â€Œà²¨ SIM PIN ಅಗತà³à²¯à²µà²¿à²¦à³†"
-#: ../cli/src/common.c:793
+#: ../clients/cli/common.c:818
msgid "GSM Modem's SIM PUK required"
msgstr "GSM ಮಾಡೆಮà³â€Œà²¨ SIM PUK ಅಗತà³à²¯à²µà²¿à²¦à³†"
-#: ../cli/src/common.c:796
+#: ../clients/cli/common.c:821
msgid "GSM Modem's SIM wrong"
msgstr "GSM ಮಾಡೆಮà³â€Œà²¨ SIM ತಪà³à²ªà²¾à²—ಿದೆ"
-#: ../cli/src/common.c:799
+#: ../clients/cli/common.c:824
msgid "InfiniBand device does not support connected mode"
msgstr "InfiniBand ಸಾಧನವೠಸಂಪರà³à²•à²¿à²¤ ಸà³à²¥à²¿à²¤à²¿à²¯à²²à³à²²à²¿ ಬೆಂಬಲಿತವಾಗಿಲà³à²²"
-#: ../cli/src/common.c:802
+#: ../clients/cli/common.c:827
msgid "A dependency of the connection failed"
msgstr "ಸಂಪರà³à²•à²¦ ಅವಲಂಬನೆಯೠವಿಫಲಗೊಂಡಿದೆ"
-#: ../cli/src/common.c:805
+#: ../clients/cli/common.c:830
msgid "A problem with the RFC 2684 Ethernet over ADSL bridge"
-msgstr ""
-"ADSL ಬà³à²°à²¿à²¡à³à²œà²¿à²¨ ಮà³à²–ಾಂತರದ RFC 2684 ಎತರà³à²¨à³†à²Ÿà³â€Œà²¨à²²à³à²²à²¿ ಒಂದೠತೊಂದರೆ ಕಂಡà³à²¬à²‚ದಿದೆ"
+msgstr "ADSL ಬà³à²°à²¿à²¡à³à²œà²¿à²¨ ಮà³à²–ಾಂತರದ RFC 2684 ಎತರà³à²¨à³†à²Ÿà³â€Œà²¨à²²à³à²²à²¿ ಒಂದೠತೊಂದರೆ ಕಂಡà³à²¬à²‚ದಿದೆ"
-#: ../cli/src/common.c:808
+#: ../clients/cli/common.c:833
msgid "ModemManager is unavailable"
msgstr "ModemManager ಲಭà³à²¯à²µà²¿à²²à³à²²"
-#: ../cli/src/common.c:811
+#: ../clients/cli/common.c:836
msgid "The Wi-Fi network could not be found"
msgstr "Wi-Fi ಜಾಲಬಂಧವೠಕಂಡೠಬಂದಿಲà³à²²"
-#: ../cli/src/common.c:814
+#: ../clients/cli/common.c:839
msgid "A secondary connection of the base connection failed"
msgstr "ಮೂಲ ಸಂಪರà³à²•à²¦ ಎರಡನೇ ಸಂಪರà³à²•à²µà³ ವಿಫಲಗೊಂಡಿದೆ"
-#: ../cli/src/common.c:817
+#: ../clients/cli/common.c:842
msgid "DCB or FCoE setup failed"
msgstr "DCB ಅಥವ FCoE ಸಿದà³à²§à²¤à³† ವಿಫಲಗೊಂಡಿದೆ"
-#: ../cli/src/common.c:820
+#: ../clients/cli/common.c:845
msgid "teamd control failed"
msgstr "teamd ನಿಯಂತà³à²°à²• ವಿಫಲಗೊಂಡಿದೆ"
-#: ../cli/src/common.c:824 ../cli/src/devices.c:634 ../tui/nm-ui-utils.c:359
+#: ../clients/cli/common.c:848
+#| msgid "ModemManager is unavailable"
+msgid "Modem failed or no longer available"
+msgstr "ಮಾಡೆಮà³â€Œ ವಿಫಲಗೊಂಡಿದೆ ಅಥವ ಈಗ ಲಭà³à²¯à²µà²¿à²²à³à²²"
+
+#: ../clients/cli/common.c:851
+#| msgid "ModemManager is unavailable"
+msgid "Modem now ready and available"
+msgstr "ಮಾಡೆಮà³â€Œ ಈಗ ಸಿದà³à²§à²—ೊಂಡಿದೆ ಮತà³à²¤à³ ಲಭà³à²¯à²µà²¿à²¦à³†"
+
+#: ../clients/cli/common.c:854
+msgid "SIM PIN was incorrect"
+msgstr "SIM PIN ತಪà³à²ªà²¾à²—ಿದೆ"
+
+#. TRANSLATORS: Unknown reason for a device state change (NMDeviceStateReason)
+#: ../clients/cli/common.c:858 ../clients/cli/devices.c:621
+#: ../libnm-glib/nm-device.c:1812
msgid "Unknown"
msgstr "ಗೊತà³à²¤à²¿à²°à²¦"
-#: ../cli/src/common.c:866
+#: ../clients/cli/common.c:900
#, c-format
msgid "invalid priority map '%s'"
msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ ಆದà³à²¯à²¤à³† ನಕà³à²·à³† '%s'"
-#: ../cli/src/common.c:873 ../cli/src/common.c:879
+#: ../clients/cli/common.c:907 ../clients/cli/common.c:913
#, c-format
msgid "priority '%s' is not valid (<0-%ld>)"
msgstr "'%s' ಆದà³à²¯à²¤à³†à²¯à³ ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²² (<0-%ld>)"
-#: ../cli/src/common.c:935
+#: ../clients/cli/common.c:980
#, c-format
msgid "'%s' is not a valid team configuration or file name."
msgstr "'%s' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಟೀಮೠಸಂರಚನೆ ಅಥವ ಕಡತದ ಹೆಸರೠಆಗಿಲà³à²²."
-#: ../cli/src/connections.c:62
+#. define some prompts for connection editor
+#: ../clients/cli/connections.c:40
msgid "Setting name? "
msgstr "ಸಿದà³à²§à²¤à³†à²¯ ಹೆಸರೆ?"
-#: ../cli/src/connections.c:63
+#: ../clients/cli/connections.c:41
msgid "Property name? "
msgstr "ಗà³à²£à²¦ ಹೆಸರೆ?"
-#: ../cli/src/connections.c:64
+#: ../clients/cli/connections.c:42
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
+#. define some other prompts
+#: ../clients/cli/connections.c:45
+msgid "Connection type: "
+msgstr "ಸಂಪರà³à²•à²¦ ಬಗೆ: "
+
+#: ../clients/cli/connections.c:46
+msgid "VPN type: "
+msgstr "VPN ಬಗೆ: "
+
+#: ../clients/cli/connections.c:47
+msgid "Bond master: "
+msgstr "ಬಾಂಡೠಮಾಸà³à²Ÿà²°à³:"
+
+#: ../clients/cli/connections.c:48
+msgid "Team master: "
+msgstr "ತಂಡದ ಪà³à²°à²®à³à²–:"
+
+#: ../clients/cli/connections.c:49
+msgid "Bridge master: "
+msgstr "ಬà³à²°à²¿à²œà³ ಮಾಸà³à²Ÿà²°à³: "
+
+#: ../clients/cli/connections.c:50
+msgid "Connection (name, UUID, or path): "
+msgstr "ಸಂಪರà³à²• (ಹೆಸರà³, UUID, ಅಥವ ಮಾರà³à²—): "
+
+#. 0
+#: ../clients/cli/connections.c:58 ../clients/cli/connections.c:170
+#: ../clients/cli/devices.c:55 ../clients/cli/devices.c:84
+#: ../clients/cli/devices.c:94 ../clients/cli/devices.c:105
+#: ../clients/cli/devices.c:114 ../clients/cli/devices.c:129
+#: ../clients/cli/devices.c:142 ../clients/cli/devices.c:168
+#: ../clients/cli/devices.c:183 ../clients/cli/devices.c:192
msgid "NAME"
msgstr "NAME"
-#: ../cli/src/connections.c:69 ../cli/src/connections.c:176
+#. 0
+#. 1
+#: ../clients/cli/connections.c:59 ../clients/cli/connections.c:171
msgid "UUID"
msgstr "UUID"
-#: ../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
+#. 1
+#. 0
+#. 1
+#. 2
+#: ../clients/cli/connections.c:60 ../clients/cli/connections.c:192
+#: ../clients/cli/devices.c:41 ../clients/cli/devices.c:57
+#: ../clients/cli/devices.c:171
msgid "TYPE"
msgstr "TYPE"
-#: ../cli/src/connections.c:71
+#. 2
+#: ../clients/cli/connections.c:61
msgid "TIMESTAMP"
msgstr "TIMESTAMP"
-#: ../cli/src/connections.c:72
+#. 3
+#: ../clients/cli/connections.c:62
msgid "TIMESTAMP-REAL"
msgstr "TIMESTAMP-REAL"
-#: ../cli/src/connections.c:73 ../cli/src/devices.c:101
+#. 4
+#. 15
+#: ../clients/cli/connections.c:63 ../clients/cli/devices.c:71
msgid "AUTOCONNECT"
msgstr "AUTOCONNECT"
-#: ../cli/src/connections.c:74
+#. 5
+#: ../clients/cli/connections.c:64
msgid "READONLY"
msgstr "READONLY"
-#: ../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
+#. 6
+#. 8
+#. 2
+#. 15
+#. 5
+#: ../clients/cli/connections.c:65 ../clients/cli/connections.c:178
+#: ../clients/cli/devices.c:43 ../clients/cli/devices.c:158
+#: ../clients/cli/devices.c:174
msgid "DBUS-PATH"
msgstr "DBUS-PATH"
-#: ../cli/src/connections.c:177
-msgid "DEVICES"
-msgstr "DEVICES"
+#. 7
+#. 13
+#. 4
+#: ../clients/cli/connections.c:66 ../clients/cli/devices.c:156
+#: ../clients/cli/devices.c:173
+msgid "ACTIVE"
+msgstr "ACTIVE"
-#: ../cli/src/connections.c:178 ../cli/src/devices.c:73
-#: ../cli/src/devices.c:96 ../cli/src/network-manager.c:39
+#. 8
+#. 0
+#. 12
+#. 3
+#: ../clients/cli/connections.c:67 ../clients/cli/devices.c:40
+#: ../clients/cli/devices.c:56 ../clients/cli/devices.c:155
+#: ../clients/cli/devices.c:172
+msgid "DEVICE"
+msgstr "DEVICE"
+
+#. 9
+#. 3
+#. 1
+#. 9
+#. 1
+#: ../clients/cli/connections.c:68 ../clients/cli/connections.c:173
+#: ../clients/cli/devices.c:42 ../clients/cli/devices.c:65
+#: ../clients/cli/network-manager.c:37
msgid "STATE"
msgstr "STATE"
-#: ../cli/src/connections.c:179
+#. 10
+#: ../clients/cli/connections.c:69
+#| msgid "MASTER-PATH"
+msgid "ACTIVE-PATH"
+msgstr "ACTIVE-PATH"
+
+#. 2
+#: ../clients/cli/connections.c:172
+msgid "DEVICES"
+msgstr "DEVICES"
+
+#. 4
+#: ../clients/cli/connections.c:174
msgid "DEFAULT"
msgstr "DEFAULT"
-#: ../cli/src/connections.c:180
+#. 5
+#: ../clients/cli/connections.c:175
msgid "DEFAULT6"
msgstr "DEFAULT6"
-#: ../cli/src/connections.c:181
+#. 6
+#: ../clients/cli/connections.c:176
msgid "SPEC-OBJECT"
msgstr "SPEC-OBJECT"
-#: ../cli/src/connections.c:182 ../cli/src/connections.c:224
-#: ../tui/nm-editor-utils.c:243 ../tui/nmt-connect-connection-list.c:343
+#. 7
+#. 4
+#. Ask for optional 'vpn' arguments.
+#: ../clients/cli/connections.c:177 ../clients/cli/connections.c:215
+#: ../clients/cli/connections.c:3450 ../clients/tui/nm-editor-utils.c:234
+#: ../clients/tui/nmt-connect-connection-list.c:408
msgid "VPN"
msgstr "VPN"
-#: ../cli/src/connections.c:184 ../cli/src/devices.c:77
-#: ../cli/src/devices.c:105
+#. 9
+#. 5
+#. 19
+#: ../clients/cli/connections.c:179 ../clients/cli/devices.c:46
+#: ../clients/cli/devices.c:75
msgid "CON-PATH"
msgstr "CON-PATH"
-#: ../cli/src/connections.c:185
+#. 10
+#: ../clients/cli/connections.c:180
msgid "ZONE"
msgstr "ZONE"
-#: ../cli/src/connections.c:186
+#. 11
+#: ../clients/cli/connections.c:181
msgid "MASTER-PATH"
msgstr "MASTER-PATH"
-#: ../cli/src/connections.c:202
+#. 1
+#: ../clients/cli/connections.c:193
msgid "USERNAME"
msgstr "USERNAME"
-#: ../cli/src/connections.c:203
+#. 2
+#: ../clients/cli/connections.c:194
msgid "GATEWAY"
msgstr "GATEWAY"
-#: ../cli/src/connections.c:204
+#. 3
+#: ../clients/cli/connections.c:195
msgid "BANNER"
msgstr "BANNER"
-#: ../cli/src/connections.c:205
+#. 4
+#: ../clients/cli/connections.c:196
msgid "VPN-STATE"
msgstr "VPN-STATE"
-#: ../cli/src/connections.c:206
+#. 5
+#: ../clients/cli/connections.c:197
msgid "CFG"
msgstr "CFG"
-#: ../cli/src/connections.c:219 ../cli/src/devices.c:236
+#: ../clients/cli/connections.c:210 ../clients/cli/devices.c:207
msgid "GENERAL"
msgstr "GENERAL"
-#: ../cli/src/connections.c:220 ../cli/src/devices.c:243
+#. 0
+#. 6
+#: ../clients/cli/connections.c:211 ../clients/cli/devices.c:214
msgid "IP4"
msgstr "IP4"
-#: ../cli/src/connections.c:221 ../cli/src/devices.c:244
+#. 1
+#. 7
+#: ../clients/cli/connections.c:212 ../clients/cli/devices.c:215
msgid "DHCP4"
msgstr "DHCP4"
-#: ../cli/src/connections.c:222 ../cli/src/devices.c:245
+#. 2
+#. 8
+#: ../clients/cli/connections.c:213 ../clients/cli/devices.c:216
msgid "IP6"
msgstr "IP6"
-#: ../cli/src/connections.c:223 ../cli/src/devices.c:246
+#. 3
+#. 9
+#: ../clients/cli/connections.c:214 ../clients/cli/devices.c:217
msgid "DHCP6"
msgstr "DHCP6"
-#: ../cli/src/connections.c:255
-#, c-format
+#: ../clients/cli/connections.c:249
+#, 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"
msgid ""
"Usage: nmcli connection { COMMAND | help }\n"
"\n"
-"COMMAND := { show | up | down | add | modify | edit | delete | reload | load "
-"}\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"
+" show [--active] [[id | uuid | path | apath] <ID>] ...\n"
"\n"
" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
"\n"
@@ -567,7 +728,8 @@ msgid ""
"\n"
" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
"\n"
-" modify [id | uuid | path] <ID> <setting>.<property> <value>\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"
@@ -581,11 +743,10 @@ msgid ""
msgstr ""
"ಬಳಕೆ: nmcli connection { COMMAND | help }\n"
"\n"
-"COMMAND := { show | up | down | add | modify | edit | delete | reload | load "
-"}\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"
+" show [--active] [[id | uuid | path | apath] <ID>] ...\n"
"\n"
" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
"\n"
@@ -595,7 +756,8 @@ msgstr ""
"\n"
" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
"\n"
-" modify [id | uuid | path] <ID> <setting>.<property> <value>\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"
@@ -607,47 +769,54 @@ msgstr ""
" load <filename> [ <filename>... ]\n"
"\n"
-#: ../cli/src/connections.c:278
+#: ../clients/cli/connections.c:271
#, c-format
msgid ""
"Usage: nmcli connection show { ARGUMENTS | help }\n"
"\n"
-"ARGUMENTS := active [[id | uuid | path | apath] <ID>]\n"
+"ARGUMENTS := [--active]\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."
+"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 [[id | uuid | path | apath] <ID>]\n"
+"ARGUMENTS := [--active]\n"
"\n"
-"ಒಂದೠಜಾಲಬಂಧಕà³à²•à³† ಸಂಪರà³à²•à²¸à²¾à²§à²¿à²¸à²²à³ ಒಂದೠಸಾಧನದಿಂದ ಪà³à²°à²¸à²•à³à²¤ ಬಳಸಲಾಗà³à²¤à³à²¤à²¿à²°à³à²µ "
-"ಸಂಪರà³à²•à²—ಳನà³à²¨à³ ತೋರಿಸà³.\n"
-"ಒಂದೠನಿಯತಾಂಕವಿಲà³à²²à²¦à³†, ಎಲà³à²²à²¾ ಸಕà³à²°à²¿à²¯ ಸಂಪರà³à²•à²—ಳ ಪಟà³à²Ÿà²¿à²¯à²¨à³à²¨à³ ತೋರಿಸಲಾಗà³à²¤à³à²¤à²¦à³†. <ID> "
-"ಅನà³à²¨à³ ಒದಗಿಸಿದಾಗ,\n"
-"ಬದಲಿಗೆ ಸಂಪರà³à²•à²¦ ವಿವರಗಳನà³à²¨à³ ತೋರಿಸಲಾಗà³à²¤à³à²¤à²¦à³†.\n"
+"ಒಂದೠಸಾಧನವೠಸಂಪರà³à²•à²¦ ಪà³à²°à³Šà²«à³ˆà²²à³â€Œ ಅನà³à²¨à³ ಬಳಸà³à²¤à³à²¤à²¿à²¦à³à²¦à²²à³à²²à²¿, ಮೆಮೊರಿಯಲà³à²²à²¿à²¨ ಮತà³à²¤à³ "
+"ಡಿಸà³à²•à²¿à²¨à²²à³à²²à²¿à²¨ ಸಂಪರà³à²•à²¦\n"
+"ಪà³à²°à³Šà²«à³ˆà²²à³â€Œà²—ಳ ಪಟà³à²Ÿà²¿à²—ಳಲà³à²²à²¿, ಕೆಲವೊಂದೠಸಕà³à²°à²¿à²¯à²µà²¾à²—ಿರಲೂಬಹà³à²¦à³. ಒಂದೠನಿಯತಾಂಕವಿಲà³à²²à²¦à³†, "
+"ಎಲà³à²²à²¾\n"
+"ಪà³à²°à³Šà²«à³ˆà²²à³â€Œà²—ಳನà³à²¨à³ ಪಟà³à²Ÿà²¿ ಮಾಡಲಾಗà³à²¤à³à²¤à²¦à³†. --active ಆಯà³à²•à³†à²¯à²¨à³à²¨à³ ಸೂಚಿಸಲಾಗಿದà³à²¦à²°à³†, ಕೇವಲ "
+"ಸಕà³à²°à²¿à²¯\n"
+"ಪà³à²°à³Šà²«à³ˆà²²à³â€Œà²—ಳನà³à²¨à³ ಮಾತà³à²° ತೋರಿಸಲಾಗà³à²¤à³à²¤à²¦à³†.\n"
"\n"
-"ARGUMENTS := configured [[id | uuid | path] <ID>]\n"
+"ARGUMENTS := [--active] [id | uuid | path | apath] <ID> ...\n"
"\n"
-"Show in-memory and on-disk connections, some of ಮೆಮೊರಿಯಲà³à²²à²¿à²¨ ಮತà³à²¤à³ "
-"ಡಿಸà³à²•à²¿à²¨à²²à³à²²à²¿à²¨ ಸಂಪರà³à²•à²—ಳನà³à²¨à³ ತೋರಿಸà³, ಆ ಸಂಪರà³à²•à²¦ ಪà³à²°à³Šà²«à³ˆà²²à³ ಅನà³à²¨à³ ಒಂದೠಸಾಧನವà³\n"
-"ಬಳಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³à²¦à²²à³à²²à²¿ ಅವà³à²—ಳಲà³à²²à²¿ ಕೆಲವೠಸಕà³à²°à²¿à²¯à²µà²¾à²—ಿರಬಹà³à²¦à³. ಒಂದೠನಿಯತಾಂಕವಿಲà³à²²à²¦à³†, "
-"ಎಲà³à²²à²¾ \n"
-"ಸಕà³à²°à²¿à²¯ ಸಂಪರà³à²•à²—ಳ ಪಟà³à²Ÿà²¿à²¯à²¨à³à²¨à³ ತೋರಿಸಲಾಗà³à²¤à³à²¤à²¦à³†. <ID> ಅನà³à²¨à³ ಒದಗಿಸಿದಾಗ,\n"
-"ಬದಲಿಗೆ ಸಂಪರà³à²•à²¦ ವಿವರಗಳನà³à²¨à³ ತೋರಿಸಲಾಗà³à²¤à³à²¤à²¦à³†.\n"
+"ನಿಶà³à²šà²¿à²¤ ಸಂಪರà³à²•à²—ಳಿಗಾಗಿನ ವಿವರಗಳನà³à²¨à³ ತೋರಿಸà³. ಪೂರà³à²µà²¨à²¿à²¯à³‹à²œà²¿à²¤à²µà²¾à²—ಿ, "
+"ಸà³à²¥à²¿à²°à²µà²¾à²¦ ಸಂರಚನೆ\n"
+"ಮತà³à²¤à³ ಸಕà³à²°à²¿à²¯ ಸಂಪರà³à²•à²¦ ದತà³à²¤à²¾à²‚ಶವನà³à²¨à³ ತೋರಿಸಲಾಗà³à²¤à³à²¤à²¦à³†. ಸಾರà³à²µà²¤à³à²°à²¿à²• '--fields' "
+"ಆಯà³à²•à³†à²¯à²¨à³à²¨à³ \n"
+"ಬಳಸಿಕೊಂಡೠಔಟà³â€Œà²ªà³à²Ÿà³ ಅನà³à²¨à³ ಫಿಲà³à²Ÿà²°à³â€Œ ಮಾಡಲೠಸಾಧà³à²¯à²µà²¿à²°à³à²¤à³à²¤à²¦à³†. ಹೆಚà³à²šà²¿à²¨ ಮಾಹಿತಿಗಾಗಿ "
+"ಮಾಹಿತಿ ಪà³à²Ÿà²µà²¨à³à²¨à³ ನೋಡಿ.\n"
+"--active ಆಯà³à²•à³†à²¯à²¨à³à²¨à³ ಸೂಚಿಸಿದಾಗ, ಕೇವಲ ಸಕà³à²°à²¿à²¯ ಪà³à²°à³Šà²«à³ˆà²²à³â€Œà²—ಳನà³à²¨à³ ಮಾತà³à²° ಪರಿಗಣನೆಗೆ\n"
+"ತೆಗೆದà³à²•à³Šà²³à³à²³à²²à²¾à²—à³à²¤à³à²¤à²¦à³†.\n"
-#: ../cli/src/connections.c:297
+#: ../clients/cli/connections.c:293
#, c-format
msgid ""
"Usage: nmcli connection up { ARGUMENTS | help }\n"
@@ -675,7 +844,8 @@ msgstr ""
"<name>]\n"
"\n"
"ಒಂದೠಸಾಧನದಲà³à²²à²¿ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಿ. ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಬೇಕಿರà³à²µ ಪà³à²°à³Šà²«à³ˆà²²à³ ಅನà³à²¨à³ "
-"ಅದರ ಹೆಸರà³,\n"
+"ಅದರ "
+"ಹೆಸರà³,\n"
"UUID ಅಥವ D-Bus ಮಾರà³à²—ದಿಂದ ಗà³à²°à³à²¤à²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¦à³†.\n"
"\n"
"ARGUMENTS := ifname <ifname> [ap <BSSID>] [nsp <name>]\n"
@@ -691,7 +861,7 @@ msgstr ""
"ಅನà³à²µà²¯à²¿à²¸à³à²¤à³à²¤à²¦à³†)\n"
"\n"
-#: ../cli/src/connections.c:318
+#: ../clients/cli/connections.c:314
#, c-format
msgid ""
"Usage: nmcli connection down { ARGUMENTS | help }\n"
@@ -708,15 +878,109 @@ msgstr ""
"\n"
"ARGUMENTS := [id | uuid | path | apath] <ID>\n"
"\n"
-"ಒಂದೠಸಾಧನದಿಂದ ಒಂದೠಸಂಪರà³à²•à²µà²¨à³à²¨à³ ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸಿ (ಸಾಧನವೠಇನà³à²¨à²·à³à²Ÿà³ ಸà³à²µà²¯à²‚-"
-"ಸಕà³à²°à²¿à²¯à²—ೊಳಿಕೆ\n"
+"ಒಂದೠಸಾಧನದಿಂದ ಒಂದೠಸಂಪರà³à²•à²µà²¨à³à²¨à³ ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸಿ (ಸಾಧನವೠಇನà³à²¨à²·à³à²Ÿà³ "
+"ಸà³à²µà²¯à²‚-ಸಕà³à²°à²¿à²¯à²—ೊಳಿಕೆ\n"
"ಮಾಡದಂತೆ ನಿರà³à²¬à²‚ಧಿಸಿದೆ). ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸಬೇಕಿರà³à²µ ಪà³à²°à³Šà²«à³ˆà²²à³ ಅನà³à²¨à³ ಅದರ ಹೆಸರà³, UUID "
"ಅಥವ \n"
"D-Bus ಮಾರà³à²—ದಿಂದ ಗà³à²°à³à²¤à²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¦à³†.\n"
"\n"
-#: ../cli/src/connections.c:331
-#, c-format
+#: ../clients/cli/connections.c:327
+#, 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"
@@ -728,6 +992,8 @@ msgid ""
" [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"
@@ -781,11 +1047,11 @@ msgid ""
" [arp-interval <num>]\n"
" [arp-ip-target <num>]\n"
"\n"
-" bond-slave: master <master (ifname or connection UUID)>\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)>\n"
+" team-slave: master <master (ifname, or connection UUID or name)>\n"
" [config <file>|<raw JSON data>]\n"
"\n"
" bridge: [stp yes|no]\n"
@@ -794,13 +1060,15 @@ msgid ""
" [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)>\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"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan|libreswan|"
+"ssh|l2tp|iodine|...\n"
" [user <username>]\n"
"\n"
" olpc-mesh: ssid <SSID>\n"
@@ -822,6 +1090,8 @@ msgstr ""
" [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"
@@ -875,11 +1145,11 @@ msgstr ""
" [arp-interval <num>]\n"
" [arp-ip-target <num>]\n"
"\n"
-" bond-slave: master <master (ifname or connection UUID)>\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)>\n"
+" team-slave: master <master (ifname, or connection UUID or name)>\n"
" [config <file>|<raw JSON data>]\n"
"\n"
" bridge: [stp yes|no]\n"
@@ -888,13 +1158,15 @@ msgstr ""
" [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)>\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"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan|libreswan|"
+"ssh|l2tp|iodine|...\n"
" [user <username>]\n"
"\n"
" olpc-mesh: ssid <SSID>\n"
@@ -906,28 +1178,55 @@ msgstr ""
" [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
"\n"
-#: ../cli/src/connections.c:408
+#: ../clients/cli/connections.c:406
#, c-format
msgid ""
"Usage: nmcli connection modify { ARGUMENTS | help }\n"
"\n"
-"ARGUMENTS := [id | uuid | path] <ID> <setting name>.<property name> "
-"[<value>]\n"
+"ARGUMENTS := [id | uuid | path] <ID> ([+|-]<setting>.<property> <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"
+"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 { ARGUMENTS | help }\n"
"\n"
-"ARGUMENTS := [id | uuid | path] <ID> <setting name>.<property name> "
-"[<value>]\n"
+"ARGUMENTS := [id | uuid | path] <ID> ([+|-]<setting>.<property> <value>)+\n"
"\n"
-"ಸಂಪರà³à²•à²¦ ಪà³à²°à³Šà²«à³ˆà²²à²¿à²¨à²²à³à²²à²¿ ಒಂದೠಗà³à²£à²µà²¨à³à²¨à³ ಮಾರà³à²ªà²¡à²¿à²¸à²¿.\n"
-"ಪà³à²°à³Šà²«à³ˆà²²à³ ಅನà³à²¨à³ ಅದರ ಹೆಸರà³, UUID ಅಥವ D-Bus ಮಾರà³à²—ದಿಂದ ಗà³à²°à³à²¤à²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¦à³†.\n"
+"ಸಂಪರà³à²• ಪà³à²°à³Šà²«à³ˆà²²à³â€Œà²¨ ಒಂದೠಅಥವ ಹೆಚà³à²šà²¿à²¨ ಗà³à²£à²—ಳನà³à²¨à³ ಮಾರà³à²ªà²¡à²¿à²¸à²¿. ಪà³à²°à³Šà²«à³ˆà²²à³ ಅನà³à²¨à³\n"
+"ಅದರ ಹೆಸರಿನ, UUID ಅಥವ D-Bus ಮಾರà³à²—ದ ಆಧಾರದಲà³à²²à²¿ ಗà³à²°à³à²¤à²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¦à³†. ಬಹà³-ಮೌಲà³à²¯à²¦\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:420
+#: ../clients/cli/connections.c:430
#, c-format
msgid ""
"Usage: nmcli connection edit { ARGUMENTS | help }\n"
@@ -954,7 +1253,7 @@ msgstr ""
"ಒಂದೠಸಂವಾದಾತà³à²®à²• ಸಂಪಾದಕದಲà³à²²à²¿ ಒಂದೠಹೊಸ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸೇರಿಸಿ.\n"
"\n"
-#: ../cli/src/connections.c:436
+#: ../clients/cli/connections.c:446
#, c-format
msgid ""
"Usage: nmcli connection delete { ARGUMENTS | help }\n"
@@ -973,7 +1272,7 @@ msgstr ""
"ಪà³à²°à³Šà²«à³ˆà²²à³ ಅನà³à²¨à³ ಅದರ ಹೆಸರà³, UUID ಅಥವ D-Bus ಮಾರà³à²—ದಿಂದ ಗà³à²°à³à²¤à²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¦à³†\n"
"\n"
-#: ../cli/src/connections.c:448
+#: ../clients/cli/connections.c:458
#, c-format
msgid ""
"Usage: nmcli connection reload { help }\n"
@@ -986,7 +1285,7 @@ msgstr ""
"ಡಿಸà³à²•à²¿à²¨à²¿à²‚ದ ಎಲà³à²²à²¾ ಸಂಪರà³à²• ಕಡತಗಳನà³à²¨à³ ಮರಳಿ ಲೋಡೠಮಾಡà³.\n"
"\n"
-#: ../cli/src/connections.c:457
+#: ../clients/cli/connections.c:467
#, c-format
msgid ""
"Usage: nmcli connection load { ARGUMENTS | help }\n"
@@ -1006,926 +1305,957 @@ msgstr ""
"ಡಿಸà³à²•à²¿à²¨à²¿à²‚ದ ಒಂದೠಅಥವ ಹೆಚà³à²šà²¿à²¨ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಲೋಡà³/ಮರà³à²²à³‹à²¡à³ ಮಾಡà³. NetworkManager ಗೆ "
"ಅದರ\n"
"ಇತà³à²¤à³€à²šà²¿à²¨ ಸà³à²¥à²¿à²¤à²¿à²¯ ಅರಿವಿದೆ ಎನà³à²¨à³à²µà³à²¦à²¨à³à²¨à³ ಖಚಿತಪಡಿಸಿಕೊಳà³à²³à²²à³ ಒಂದೠಸಂಪರà³à²• ಕಡತವನà³à²¨à³ "
-"ಕೈಯಾರೆ ಸಂಪಾದಿಸಿದ ನಂತರ ಇದನà³à²¨à³ \n"
+"ಕೈಯಾರೆ "
+"ಸಂಪಾದಿಸಿದ ನಂತರ ಇದನà³à²¨à³ \n"
"ಬಳಸಿ.\n"
"\n"
-#: ../cli/src/connections.c:515
-#, c-format
-msgid "Error: 'list configured': %s"
-msgstr "ದೋಷ: 'list configured': %s"
-
-#: ../cli/src/connections.c:523
-msgid "Connection details"
-msgstr "ಸಂಪರà³à²•à²¦ ವಿವರಗಳà³"
-
-#: ../cli/src/connections.c:589
-msgid "never"
-msgstr "ಎಂದಿಗೂ ಬೇಡ"
-
-#: ../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: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: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:698
-#, c-format
-msgid "Error: %s - no such connection."
-msgstr "ದೋಷ: %s - ಅಂತಹ ಯಾವà³à²¦à³† ಸಂಪರà³à²•à²—ಳಿಲà³à²²."
-
-#: ../cli/src/connections.c:710
-#, c-format
-msgid "Error: 'show configured': %s"
-msgstr "ದೋಷ: 'show configured': %s"
-
-#: ../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:728
+#: ../clients/cli/connections.c:538
msgid "activating"
msgstr "ಸಕà³à²°à²¿à²¯à²—ೊಳà³à²³à³à²¤à³à²¤à²¿à²¦à³†"
-#: ../cli/src/connections.c:730
+#: ../clients/cli/connections.c:540
msgid "activated"
msgstr "ಸಕà³à²°à²¿à²¯à²—ೊಂಡಿದೆ"
-#: ../cli/src/connections.c:734
+#: ../clients/cli/connections.c:544
msgid "deactivated"
msgstr "ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಂಡಿದೆ"
-#: ../cli/src/connections.c:746
+#: ../clients/cli/connections.c:556
msgid "VPN connecting (prepare)"
msgstr "VPN ಸಂಪರà³à²• ಕಲà³à²ªà²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¿à²¦à³† (ಸಿದà³à²§à²—ೊಳಿಕೆ)"
-#: ../cli/src/connections.c:748
+#: ../clients/cli/connections.c:558
msgid "VPN connecting (need authentication)"
msgstr "VPN ಸಂಪರà³à²• ಕಲà³à²ªà²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¿à²¦à³† (ದೃಢೀಕರಣದ ಅಗತà³à²¯à²µà²¿à²¦à³†)"
-#: ../cli/src/connections.c:750
+#: ../clients/cli/connections.c:560
msgid "VPN connecting"
msgstr "VPN ಸಂಪರà³à²•à²¿à²¤à²—ೊಳà³à²³à³à²¤à³à²¤à²¿à²¦à³†"
-#: ../cli/src/connections.c:752
+#: ../clients/cli/connections.c:562
msgid "VPN connecting (getting IP configuration)"
msgstr "VPN ಸಂಪರà³à²•à²—ೊಂಡಿದೆ (IP ಸಂರಚನೆಯನà³à²¨à³ ಪಡೆಯಲಾಗà³à²¤à³à²¤à²¿à²¦à³†)"
-#: ../cli/src/connections.c:754
+#: ../clients/cli/connections.c:564
msgid "VPN connected"
msgstr "VPN ಸಂಪರà³à²•à²—ೊಂಡಿದೆ"
-#: ../cli/src/connections.c:756
+#: ../clients/cli/connections.c:566
msgid "VPN connection failed"
msgstr "VPN ಸಂಪರà³à²•à²µà³ ವಿಫಲಗೊಂಡಿದೆ"
-#: ../cli/src/connections.c:758
+#: ../clients/cli/connections.c:568
msgid "VPN disconnected"
msgstr "VPN ಸಂಪರà³à²• ಕಡಿದಿದೆ"
-#: ../cli/src/connections.c:829 ../cli/src/connections.c:839
-#: ../cli/src/devices.c:594
+#: ../clients/cli/connections.c:651
+#| msgid "Connection details"
+msgid "Connection profile details"
+msgstr "ಸಂಪರà³à²• ಪà³à²°à³Šà²«à³ˆà²²à³â€Œà²¨ ವಿವರಗಳà³"
+
+#: ../clients/cli/connections.c:663 ../clients/cli/connections.c:1015
+#, c-format
+#| msgid "Error: 'device show': %s"
+msgid "Error: 'connection show': %s"
+msgstr "ದೋಷ: 'connection show': %s"
+
+#: ../clients/cli/connections.c:807
+msgid "never"
+msgstr "ಎಂದಿಗೂ ಬೇಡ"
+
+#. "CAPABILITIES"
+#: ../clients/cli/connections.c:808 ../clients/cli/connections.c:809
+#: ../clients/cli/connections.c:811 ../clients/cli/connections.c:870
+#: ../clients/cli/connections.c:871 ../clients/cli/connections.c:873
+#: ../clients/cli/connections.c:2786 ../clients/cli/connections.c:6472
+#: ../clients/cli/connections.c:6473 ../clients/cli/devices.c:591
+#: ../clients/cli/devices.c:641 ../clients/cli/devices.c:784
+#: ../clients/cli/devices.c:785 ../clients/cli/devices.c:786
+#: ../clients/cli/devices.c:787 ../clients/cli/devices.c:820
+#: ../clients/cli/devices.c:822 ../clients/cli/devices.c:850
+#: ../clients/cli/devices.c:851 ../clients/cli/devices.c:852
+#: ../clients/cli/devices.c:853 ../clients/cli/devices.c:854
+#: ../clients/cli/devices.c:855 ../clients/cli/devices.c:856
+#: ../clients/cli/network-manager.c:440
+msgid "yes"
+msgstr "ಹೌದà³"
+
+#: ../clients/cli/connections.c:808 ../clients/cli/connections.c:809
+#: ../clients/cli/connections.c:811 ../clients/cli/connections.c:870
+#: ../clients/cli/connections.c:871 ../clients/cli/connections.c:873
+#: ../clients/cli/connections.c:2787 ../clients/cli/connections.c:6472
+#: ../clients/cli/connections.c:6473 ../clients/cli/devices.c:591
+#: ../clients/cli/devices.c:641 ../clients/cli/devices.c:784
+#: ../clients/cli/devices.c:785 ../clients/cli/devices.c:786
+#: ../clients/cli/devices.c:787 ../clients/cli/devices.c:820
+#: ../clients/cli/devices.c:822 ../clients/cli/devices.c:850
+#: ../clients/cli/devices.c:851 ../clients/cli/devices.c:852
+#: ../clients/cli/devices.c:853 ../clients/cli/devices.c:854
+#: ../clients/cli/devices.c:855 ../clients/cli/devices.c:856
+#: ../clients/cli/network-manager.c:442
+msgid "no"
+msgstr "ಇಲà³à²²"
+
+#: ../clients/cli/connections.c:866 ../clients/cli/connections.c:876
+#: ../clients/cli/devices.c:581
msgid "N/A"
msgstr "ಲಭà³à²¯à²µà²¿à²²à³à²²"
-#: ../cli/src/connections.c:1012
+#: ../clients/cli/connections.c:1003
+#| msgid "Active connection details"
+msgid "Activate connection details"
+msgstr "ಸಂಪರà³à²•à²—ಳ ವಿವರಗಳನà³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸà³"
+
+#: ../clients/cli/connections.c:1236
#, c-format
-msgid "Error: 'list active': %s"
-msgstr "ದೋಷ: ''list active': %s"
+#| msgid "invalid field '%s'; allowed fields: %s"
+msgid "invalid field '%s'; allowed fields: %s and %s, or %s,%s"
+msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ ಸà³à²¥à²³ '%s'; ಅನà³à²®à²¤à²¿ ಇರà³à²µ ಸà³à²¥à²³à²—ಳà³: %s ಮತà³à²¤à³ %s, ಅಥವ %s,%s"
-#: ../cli/src/connections.c:1020
-msgid "Active connection details"
-msgstr "ಸಕà³à²°à²¿à²¯ ಸಂಪರà³à²•à²—ಳ ವಿವರಗಳà³"
+#: ../clients/cli/connections.c:1251 ../clients/cli/connections.c:1259
+#, c-format
+#| msgid "field '%s' has to be alone"
+msgid "'%s' has to be alone"
+msgstr "'%s' ಎಂಬà³à²¦à³ ಒಂಟಿಯಾಗಿಯೆ ಇರಬೇಕà³"
-#: ../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
+#: ../clients/cli/connections.c:1290 ../clients/cli/connections.c:2004
+#: ../clients/cli/connections.c:2064 ../clients/cli/connections.c:7973
+#: ../clients/cli/connections.c:8181 ../clients/cli/connections.c:8274
+#: ../clients/cli/connections.c:8302 ../clients/cli/devices.c:1186
+#: ../clients/cli/devices.c:1234 ../clients/cli/devices.c:1397
+#: ../clients/cli/devices.c:1531 ../clients/cli/devices.c:1625
+#: ../clients/cli/devices.c:1767 ../clients/cli/devices.c:2225
+#: ../clients/cli/devices.c:2524 ../clients/cli/network-manager.c:482
#, c-format
msgid "Error: NetworkManager is not running."
msgstr "ದೋಷ: NetworkManager ಚಾಲನೆಯಲà³à²²à²¿à²²à³à²²."
-#: ../cli/src/connections.c:1203
-msgid "List of active connections"
-msgstr "ಸಕà³à²°à²¿à²¯ ಸಂಪರà³à²•à²—ಳ ಪಟà³à²Ÿà²¿"
+#. Add headers
+#: ../clients/cli/connections.c:1320
+#| msgid "NetworkManager status"
+msgid "NetworkManager active profiles"
+msgstr "NetworkManager ಸಕà³à²°à²¿à²¯ ಪà³à²°à³Šà²«à³ˆà²²à³â€Œà²—ಳà³"
+
+#: ../clients/cli/connections.c:1321
+#| msgid "NetworkManager went to sleep"
+msgid "NetworkManager connection profiles"
+msgstr "NetworkManager ಸಂಪರà³à²• ಪà³à²°à³Šà²«à³ˆà²²à³â€Œà²—ಳà³"
+
+#: ../clients/cli/connections.c:1358 ../clients/cli/connections.c:1949
+#: ../clients/cli/connections.c:1965 ../clients/cli/connections.c:1974
+#: ../clients/cli/connections.c:1984 ../clients/cli/connections.c:2081
+#: ../clients/cli/connections.c:7989 ../clients/cli/connections.c:8212
+#: ../clients/cli/devices.c:1725 ../clients/cli/devices.c:1733
+#: ../clients/cli/devices.c:2138 ../clients/cli/devices.c:2145
+#: ../clients/cli/devices.c:2159 ../clients/cli/devices.c:2166
+#: ../clients/cli/devices.c:2183 ../clients/cli/devices.c:2191
+#: ../clients/cli/devices.c:2387 ../clients/cli/devices.c:2483
+#: ../clients/cli/devices.c:2490
+#, c-format
+msgid "Error: %s argument is missing."
+msgstr "ದೋಷ: %s ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟೠಕಾಣಿಸà³à²¤à³à²¤à²¿à²²à³à²²"
-#: ../cli/src/connections.c:1239 ../cli/src/connections.c:1926
+#: ../clients/cli/connections.c:1409
#, 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:1251
+#: ../clients/cli/connections.c:1425 ../clients/cli/connections.c:2017
+#: ../clients/cli/connections.c:8280 ../clients/cli/connections.c:8321
+#: ../clients/cli/connections.c:8513 ../clients/cli/devices.c:2366
+#: ../clients/cli/devices.c:2829 ../clients/cli/network-manager.c:537
+#: ../clients/cli/network-manager.c:580 ../clients/cli/network-manager.c:597
+#: ../clients/cli/network-manager.c:644 ../clients/cli/network-manager.c:658
+#: ../clients/cli/network-manager.c:775 ../clients/cli/network-manager.c:819
+#: ../clients/cli/network-manager.c:839
#, c-format
-msgid "Error: 'show active': %s"
-msgstr "ದೋಷ: 'show active': %s"
+msgid "Error: %s."
+msgstr "ದೋಷ: %s."
-#: ../cli/src/connections.c:1344
+#: ../clients/cli/connections.c:1520
#, c-format
msgid "no active connection on device '%s'"
msgstr "'%s' ಎಂಬ ಸಾಧನದಲà³à²²à²¿ ಯಾವà³à²¦à³† ಸಕà³à²°à²¿à²¯ ಸಂಪರà³à²•à²µà³ ಕಂಡà³à²¬à²‚ದಿಲà³à²²"
-#: ../cli/src/connections.c:1352
+#: ../clients/cli/connections.c:1528
msgid "no active connection or device"
msgstr "ಯಾವà³à²¦à³† ಸಕà³à²°à²¿à²¯ ಸಂಪರà³à²• ಅಥವ ಸಾಧನವೠಕಂಡà³à²¬à²‚ದಿಲà³à²²"
-#: ../cli/src/connections.c:1423
+#: ../clients/cli/connections.c:1599
#, c-format
msgid "device '%s' not compatible with connection '%s'"
msgstr "'%s' ಎಂಬ ಸಾಧನವೠ'%s' ಸಂಪರà³à²•à²¦à³Šà²‚ದಿಗೆ ಹೊಂದಿಕೊಳà³à²³à³à²¤à³à²¤à²¿à²²à³à²²"
-#: ../cli/src/connections.c:1426
+#: ../clients/cli/connections.c:1602
#, c-format
msgid "no device found for connection '%s'"
msgstr "'%s' ಸಂಪರà³à²•à²•à³à²•à²¾à²—ಿ ಯಾವà³à²¦à³† ಸಾಧನವೠಕಂಡೠಬಂದಿಲà³à²²"
-#: ../cli/src/connections.c:1438
+#: ../clients/cli/connections.c:1614
msgid "unknown reason"
msgstr "ಗೊತà³à²¤à²¿à²°à²¦ ಕಾರಣ"
-#: ../cli/src/connections.c:1440 ../cli/src/network-manager.c:288
+#: ../clients/cli/connections.c:1616 ../clients/cli/network-manager.c:286
msgid "none"
msgstr "ಯಾವà³à²¦à³‚ ಇಲà³à²²"
-#: ../cli/src/connections.c:1442
+#: ../clients/cli/connections.c:1618
msgid "the user was disconnected"
msgstr "ಬಳಕೆದಾರರೊಂದಿಗೆ ಸಂಪರà³à²• ಕಡಿದà³à²¹à³‹à²—ಿದೆ"
-#: ../cli/src/connections.c:1444
+#: ../clients/cli/connections.c:1620
msgid "the base network connection was interrupted"
msgstr "ಮೂಲ ಜಾಲಬಂಧ ಸಂಪರà³à²•à²•à³à²•à³† ತಡೆಯà³à²‚ಟಾಗಿದೆ"
-#: ../cli/src/connections.c:1446
+#: ../clients/cli/connections.c:1622
msgid "the VPN service stopped unexpectedly"
msgstr "VPN ಸೇವೆಯನà³à²¨à³ ಅನಿರೀಕà³à²·à²¿à²¤à²µà²¾à²—ಿ ನಿಲà³à²²à²¿à²¸à²²à²¾à²—ಿದೆ"
-#: ../cli/src/connections.c:1448
+#: ../clients/cli/connections.c:1624
msgid "the VPN service returned invalid configuration"
msgstr "VPN ಸೇವೆಯೠಅಮಾನà³à²¯à²µà²¾à²¦ ಸಂರಚನೆಯನà³à²¨à³ ಮರಳಿಸಿದೆ"
-#: ../cli/src/connections.c:1450
+#: ../clients/cli/connections.c:1626
msgid "the connection attempt timed out"
msgstr "ಸಂಪರà³à²•à²¦ ಪà³à²°à²¯à²¤à³à²¨à²¦ ಕಾಲಾವಧಿ ಮೀರಿದೆ"
-#: ../cli/src/connections.c:1452
+#: ../clients/cli/connections.c:1628
msgid "the VPN service did not start in time"
msgstr "VPN ಸೇವೆಯೠಸರಿಯಾದ ಸಮಯದಲà³à²²à²¿ ಆರಂಭಗೊಳà³à²³à²²à²¿à²²à³à²²"
-#: ../cli/src/connections.c:1454
+#: ../clients/cli/connections.c:1630
msgid "the VPN service failed to start"
msgstr "VPN ಸೇವೆಯೠಆರಂಭಗೊಳà³à²³à²²à³ ವಿಫಲಗೊಂಡಿದೆ"
-#: ../cli/src/connections.c:1456
+#: ../clients/cli/connections.c:1632
msgid "no valid VPN secrets"
msgstr "ಯಾವà³à²¦à³† ಮಾನà³à²¯à²µà²¾à²¦ VPN ರಹಸà³à²¯à²—ಳಿಲà³à²² (ಸೀಕà³à²°à³‡à²Ÿà³â€Œà²—ಳಿಲà³à²²)"
-#: ../cli/src/connections.c:1458
+#: ../clients/cli/connections.c:1634
msgid "invalid VPN secrets"
msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ VPN ರಹಸà³à²¯à²—ಳà³"
-#: ../cli/src/connections.c:1460
+#: ../clients/cli/connections.c:1636
msgid "the connection was removed"
msgstr "ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ತೆಗೆದೠಹಾಕಲಾಗಿದೆ"
-#: ../cli/src/connections.c:1477 ../cli/src/connections.c:1633
-#: ../cli/src/connections.c:6016
+#: ../clients/cli/connections.c:1658 ../clients/cli/connections.c:1686
+#: ../clients/cli/connections.c:1831 ../clients/cli/connections.c:6368
#, c-format
msgid "Connection successfully activated (D-Bus active path: %s)\n"
msgstr "ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಯಶಸà³à²µà²¿à²¯à²¾à²—ಿ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಲಾಗಿದೆ (D-ಬಸೠಸಕà³à²°à²¿à²¯ ಮಾರà³à²—: %s)\n"
-#: ../cli/src/connections.c:1482
+#: ../clients/cli/connections.c:1665
+#, c-format
+#| msgid "Connection successfully activated (D-Bus active path: %s)\n"
+msgid ""
+"Connection successfully activated (master waiting for slaves) (D-Bus active "
+"path: %s)\n"
+msgstr ""
+"ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಯಶಸà³à²µà²¿à²¯à²¾à²—ಿ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಲಾಗಿದೆ (ಸà³à²²à³‡à²µà³â€Œà²—ಾಗಿ ಮಾಸà³à²Ÿà²°à³â€Œ ಕಾಯà³à²¤à³à²¤à²¿à²¦à³†) "
+"(D-ಬಸೠಸಕà³à²°à²¿à²¯ ಮಾರà³à²—: %s)\n"
+
+#: ../clients/cli/connections.c:1669 ../clients/cli/connections.c:1691
#, c-format
msgid "Error: Connection activation failed."
msgstr "ದೋಷ: ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಕೆಯೠವಿಫಲಗೊಂಡಿದೆ."
-#: ../cli/src/connections.c:1507
+#: ../clients/cli/connections.c:1734
#, c-format
msgid "VPN connection successfully activated (D-Bus active path: %s)\n"
msgstr ""
"VPN ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಯಶಸà³à²µà²¿à²¯à²¾à²—ಿ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಲಾಗಿದೆ (D-ಬಸೠಸಕà³à²°à²¿à²¯ ಮಾರà³à²—: %s)\n"
-#: ../cli/src/connections.c:1514
+#: ../clients/cli/connections.c:1741
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "ದೋಷ: ಸಂಪರà³à²• ಸಕà³à²°à²¿à²¯à²—ೊಳಿಕೆಯೠವಿಫಲಗೊಂಡಿದೆ: %s."
-#: ../cli/src/connections.c:1532 ../cli/src/devices.c:1294
+#: ../clients/cli/connections.c:1759 ../clients/cli/devices.c:1283
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "ದೋಷ: ಕಾಲಾವಧಿ %d sec ತೀರಿದೆ."
-#: ../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
+#: ../clients/cli/connections.c:1815
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "ದೋಷ: ಸಂಪರà³à²• ಸಕà³à²°à²¿à²¯à²—ೊಳಿಕೆಯೠವಿಫಲಗೊಂಡಿದೆ: %s"
-#: ../cli/src/connections.c:1722 ../cli/src/connections.c:1854
+#: ../clients/cli/connections.c:1888 ../clients/cli/connections.c:2018
msgid "unknown error"
msgstr "ಗೊತà³à²¤à²¿à²°à²¦ ದೋಷ"
-#: ../cli/src/connections.c:1730
+#: ../clients/cli/connections.c:1896
#, c-format
msgid "unknown device '%s'."
msgstr "ಗೊತà³à²¤à²¿à²°à²¦ ಸಾಧನ '%s'."
-#: ../cli/src/connections.c:1735
+#: ../clients/cli/connections.c:1901
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
+#: ../clients/cli/connections.c:1993 ../clients/cli/devices.c:1160
+#: ../clients/cli/devices.c:1739 ../clients/cli/devices.c:2202
+#: ../clients/cli/devices.c:2496
#, c-format
msgid "Unknown parameter: %s\n"
msgstr "ಗೊತà³à²¤à²¿à²°à²¦ ನಿಯತಾಂಕಗಳà³: %s\n"
-#: ../cli/src/connections.c:1862
+#: ../clients/cli/connections.c:2026
msgid "preparing"
msgstr "ಸಿದà³à²§à²—ೊಳà³à²³à³à²¤à³à²¤à²¿à²¦à³†"
-#: ../cli/src/connections.c:1889 ../cli/src/connections.c:7719
-#: ../cli/src/connections.c:7832
+#: ../clients/cli/connections.c:2054 ../clients/cli/connections.c:8193
+#: ../clients/cli/connections.c:8308
#, c-format
msgid "Error: No connection specified."
msgstr "ದೋಷ: ಯಾವà³à²¦à³† ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸೂಚಿಸಲಾಗಿಲà³à²²."
-#: ../cli/src/connections.c:2237 ../cli/src/utils.c:490
+#: ../clients/cli/connections.c:2091
+#, c-format
+msgid "Error: '%s' is not an active connection."
+msgstr "ದೋಷ: '%s' ಎನà³à²¨à³à²µà³à²¦à³ ಯಾವà³à²¦à³† ಸಕà³à²°à²¿à²¯ ಸಂಪರà³à²•à²µà²²à³à²²."
+
+#: ../clients/cli/connections.c:2392 ../clients/cli/utils.c:514
#, c-format
msgid "'%s' not among [%s]"
msgstr "'%s' ಎನà³à²¨à³à²µà³à²¦à³ [%s] ಎಂಬà³à²¦à²°à²²à³à²²à²¿à²²à³à²² "
-#: ../cli/src/connections.c:2319
+#: ../clients/cli/connections.c:2471
#, c-format
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
+#. Ask for optional arguments
+#: ../clients/cli/connections.c:2472 ../clients/cli/connections.c:2902
+#: ../clients/tui/nm-editor-utils.c:164 ../libnm-core/nm-connection.c:1511
+#: ../libnm-glib/nm-device.c:1800
msgid "InfiniBand"
msgstr "InfiniBand"
-#: ../cli/src/connections.c:2320 ../tui/nm-editor-utils.c:156
-#: ../tui/nm-ui-utils.c:335
+#: ../clients/cli/connections.c:2472 ../clients/tui/nm-editor-utils.c:147
+#: ../libnm-glib/nm-device.c:1788
msgid "Ethernet"
msgstr "ಎತರà³à²¨à³†à²Ÿà³"
-#: ../cli/src/connections.c:2343
+#: ../clients/cli/connections.c:2492
#, c-format
msgid "Error: 'mtu': '%s' is not a valid MTU."
msgstr "ದೋಷ: 'mtu: '%s' ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ MTU ಅಲà³à²²."
-#: ../cli/src/connections.c:2359
+#: ../clients/cli/connections.c:2508
#, c-format
msgid "Error: 'parent': '%s' is not a valid interface name."
msgstr "ದೋಷ: 'parent': '%s' ಎನà³à²¨à³à²µà³à²¦à³ ಮಾನà³à²¯à²µà²¾à²¦ ಸಂಪರà³à²•à²¸à²¾à²§à²¨à²¦ ಹೆಸರಲà³à²²."
-#: ../cli/src/connections.c:2380
+#: ../clients/cli/connections.c:2529
#, 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:2396
+#: ../clients/cli/connections.c:2558
#, c-format
msgid ""
"Error: 'mode': '%s' is not a valid InfiniBand transport mode [datagram, "
"connected]."
msgstr ""
-"ದೋಷ: 'mode: '%s' ಎನà³à²¨à³à²µà³à²¦à³ ಮಾನà³à²¯à²µà²¾à²¦ InfiniBand ವರà³à²—ಾವಣೆ ಕà³à²°à²®à²µà²²à³à²² "
-"[ಡೇಟಾಗà³à²°à²¾à²®à³, ಸಂಪರà³à²•à²¿à²¤à²—ೊಂಡಿದೆ]"
+"ದೋಷ: 'mode: '%s' ಎನà³à²¨à³à²µà³à²¦à³ ಮಾನà³à²¯à²µà²¾à²¦ InfiniBand ವರà³à²—ಾವಣೆ ಕà³à²°à²®à²µà²²à³à²² [ಡೇಟಾಗà³à²°à²¾à²®à³, "
+"ಸಂಪರà³à²•à²¿à²¤à²—ೊಂಡಿದೆ]"
-#: ../cli/src/connections.c:2412
+#: ../clients/cli/connections.c:2572
#, c-format
msgid "Error: 'flags': '%s' is not valid; use <0-7>."
msgstr "ದೋಷ: 'flags': '%s' ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²; <0-7> ಬಳಸಿ."
-#: ../cli/src/connections.c:2434
+#: ../clients/cli/connections.c:2594
#, c-format
msgid "Error: '%s': '%s' is not valid; %s "
msgstr "ದೋಷ: '%s': '%s' ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²; %s"
-#: ../cli/src/connections.c:2541
+#: ../clients/cli/connections.c:2777
#, c-format
msgid "Error: '%s': '%s' is not valid; use <%u-%u>."
msgstr "ದೋಷ: '%s': '%s' ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²; <%u-%u> ಬಳಸಿ."
-#: ../cli/src/connections.c:2555
+#. Ask for optional arguments.
+#: ../clients/cli/connections.c:2833
+#, 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] "%d à²à²šà³à²›à²¿à²• ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟೠಇದೆ ('%s' ಸಂಪರà³à²•à²¦ ಬಗೆಗಾಗಿ ).\n"
+msgstr[1] "%d à²à²šà³à²›à²¿à²• ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œà²—ಳೠಇವೆ ('%s' ಸಂಪರà³à²•à²¦ ಬಗೆಗಾಗಿ ).\n"
+
+#: ../clients/cli/connections.c:2836
+#, 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"
+
+#: ../clients/cli/connections.c:2851
msgid "ethernet"
msgstr "ಎತರà³à²¨à³†à²Ÿà³"
-#: ../cli/src/connections.c:2555 ../tui/nm-editor-utils.c:164
-#: ../tui/nm-ui-utils.c:337
+#: ../clients/cli/connections.c:2851 ../clients/tui/nm-editor-utils.c:155
+#: ../libnm-glib/nm-device.c:1790
msgid "Wi-Fi"
msgstr "ವೈ-ಫೈ"
-#: ../cli/src/connections.c:2558
-#, c-format
-msgid "There are 3 optional arguments for '%s' connection type.\n"
-msgstr "'%s' ಸಂಪರà³à²•à²¦ ಬಗೆಗೆ 3 à²à²šà³à²›à²¿à²• ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œà²—ಳಿವೆ.\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 "ನೀವೠಅದನà³à²¨à³ ಒದಗಿಸಲೠಬಯಸà³à²¤à³à²¤à³€à²°à²¾? (ಹೌದà³/ಇಲà³à²²) [ಹೌದà³]"
-
-#: ../cli/src/connections.c:2567 ../cli/src/connections.c:2621
-#: ../cli/src/connections.c:2748 ../cli/src/connections.c:2849
+#: ../clients/cli/connections.c:2859 ../clients/cli/connections.c:2907
+#: ../clients/cli/connections.c:3016 ../clients/cli/connections.c:3095
msgid "MTU [auto]: "
msgstr "MTU [ಸà³à²µà²¯à²‚]: "
-#: ../cli/src/connections.c:2578 ../cli/src/connections.c:2632
-#: ../cli/src/connections.c:2711 ../cli/src/connections.c:2759
+#: ../clients/cli/connections.c:2870 ../clients/cli/connections.c:2918
+#: ../clients/cli/connections.c:2988 ../clients/cli/connections.c:3027
+#: ../clients/cli/connections.c:3382
msgid "MAC [none]: "
msgstr "MAC [ಯಾವà³à²¦à³‚ ಇಲà³à²²]:"
-#: ../cli/src/connections.c:2589
+#: ../clients/cli/connections.c:2881
msgid "Cloned MAC [none]: "
msgstr "ತದà³à²°à³‚ಪà³à²—ೊಳಿಸಿದ MAC [ಯಾವà³à²¦à³‚ ಇಲà³à²²]:"
-#: ../cli/src/connections.c:2612
+#: ../clients/cli/connections.c:2929
#, c-format
-msgid "There are 5 optional arguments for 'InfiniBand' connection type.\n"
-msgstr "'InfiniBand' ಸಂಪರà³à²•à²¦ ಬಗೆಗೆ 5 à²à²šà³à²›à²¿à²• ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œà²—ಳಿವೆ.\n"
-
-#: ../cli/src/connections.c:2643
-msgid "Transport mode (datagram or connected) [datagram]: "
-msgstr "ವರà³à²—ಾವಣೆ ಕà³à²°à²®à²µà²²à³à²² [ಡೇಟಾಗà³à²°à²¾à²®à³, ಸಂಪರà³à²•à²¿à²¤à²—ೊಂಡಿದೆ] [datagram]:"
+#| msgid "Transport mode"
+msgid "Transport mode %s"
+msgstr "ವರà³à²—ಾವಣೆ ಕà³à²°à²® %s"
-#: ../cli/src/connections.c:2656
+#: ../clients/cli/connections.c:2942
msgid "Parent interface [none]: "
msgstr "ಮೂಲ ಸಂಪರà³à²•à²¸à²¾à²§à²¨ [ಯಾವà³à²¦à³‚ ಇಲà³à²²]:"
-#: ../cli/src/connections.c:2667
+#: ../clients/cli/connections.c:2953
msgid "P_KEY [none]: "
msgstr "P_KEY [ಯಾವà³à²¦à³‚ ಇಲà³à²²]: "
-#: ../cli/src/connections.c:2677
+#: ../clients/cli/connections.c:2963
#, 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 "ನೀವೠಅದನà³à²¨à³ ಒದಗಿಸಲೠಬಯಸà³à²¤à³à²¤à³€à²°à²¾? (ಹೌದà³/ಇಲà³à²²) [ಹೌದà³]"
+#. Ask for optional 'wimax' arguments.
+#: ../clients/cli/connections.c:2983 ../libnm-glib/nm-device.c:1796
+msgid "WiMAX"
+msgstr "WiMAX"
-#: ../cli/src/connections.c:2734
-#, c-format
-msgid "There are 4 optional arguments for 'PPPoE' connection type.\n"
-msgstr "'PPPoE' ಸಂಪರà³à²•à²¦ ಬಗೆಗೆ 4 à²à²šà³à²›à²¿à²• ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œà²—ಳಿವೆ.\n"
+#. Ask for optional 'pppoe' arguments.
+#: ../clients/cli/connections.c:3006
+msgid "PPPoE"
+msgstr "PPPoE"
-#: ../cli/src/connections.c:2742 ../cli/src/connections.c:2790
+#: ../clients/cli/connections.c:3010 ../clients/cli/connections.c:3048
msgid "Password [none]: "
msgstr "ಗà³à²ªà³à²¤à²ªà²¦ [ಯಾವà³à²¦à³‚ ಇಲà³à²²]: "
-#: ../cli/src/connections.c:2744
+#: ../clients/cli/connections.c:3012
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"
+#. Ask for optional 'gsm' or 'cdma' arguments.
+#: ../clients/cli/connections.c:3042
+#| msgid "Mobile Broadband"
+msgid "mobile broadband"
+msgstr "ಮೊಬೈಲೠಬà³à²°à²¾à²¡à³â€Œà²¬à³à²¯à²¾à²‚ಡà³"
-#: ../cli/src/connections.c:2788 ../cli/src/connections.c:3233
+#: ../clients/cli/connections.c:3046 ../clients/cli/connections.c:3454
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"
+#. Ask for optional 'bluetooth' arguments.
+#: ../clients/cli/connections.c:3061
+#| msgid "Bluetooth"
+msgid "bluetooth"
+msgstr "ಬà³à²²à³‚ಟೂತà³"
-#: ../cli/src/connections.c:2813
-msgid "Bluetooth type (panu, dun-gsm or dun-cdma) [panu]: "
-msgstr "ಬà³à²²à³‚ಟೂತೠಬಗೆ (panu, dun-gsm ಅವ dun-cdma) [panu]: "
+#: ../clients/cli/connections.c:3068
+#, c-format
+#| msgid "Bluetooth"
+msgid "Bluetooth type %s"
+msgstr "ಬà³à²²à³‚ಟೂತೠಬಗೆ %s"
-#: ../cli/src/connections.c:2821
+#: ../clients/cli/connections.c:3074
#, 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"
+#. Ask for optional 'vlan' arguments.
+#. 11
+#: ../clients/cli/connections.c:3090 ../clients/cli/devices.c:219
+#: ../clients/tui/nm-editor-utils.c:218 ../clients/tui/nmt-page-vlan.c:51
+#: ../libnm-core/nm-connection.c:1509 ../libnm-glib/nm-device.c:1808
+#: ../libnm-util/nm-connection.c:1612
+msgid "VLAN"
+msgstr "VLAN"
-#: ../cli/src/connections.c:2860
+#: ../clients/cli/connections.c:3106
msgid "VLAN flags (<0-7>) [none]: "
msgstr "VLAN ಫà³à²²à²¾à²—à³â€Œà²—ಳೠ(<0-7>) [ಯಾವà³à²¦à³‚ ಇಲà³à²²]: "
-#: ../cli/src/connections.c:2871
+#: ../clients/cli/connections.c:3117
msgid "Ingress priority maps [none]: "
msgstr "ಇಂಗà³à²°à³†à²¸à³ ಆದà³à²¯à²¤à³† ನಕà³à²·à³†à²—ಳೠ[ಯಾವà³à²¦à³‚ ಇಲà³à²²]: "
-#: ../cli/src/connections.c:2882
+#: ../clients/cli/connections.c:3128
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
+#: ../clients/cli/connections.c:3139
msgid "Bonding mode [balance-rr]: "
msgstr "ಬಾಂಡಿಂಗೠಸà³à²¥à²¿à²¤à²¿ [balance-rr]: "
-#: ../cli/src/connections.c:2934
+#. Ask for optional 'bond' arguments.
+#: ../clients/cli/connections.c:3154
+msgid "bond"
+msgstr "ಬಾಂಡà³"
+
+#: ../clients/cli/connections.c:3176
msgid "Bonding primary interface [none]: "
msgstr "ಬಾಂಡಿಂಗೠಪà³à²°à²¾à²¥à²®à²¿à²• ಸಂಪರà³à²•à²¸à²¾à²§à²¨ [ಯಾವà³à²¦à³‚ ಇಲà³à²²]:"
-#: ../cli/src/connections.c:2937
+#: ../clients/cli/connections.c:3179
#, 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]: "
+#: ../clients/cli/connections.c:3187
+#, c-format
+#| msgid "Link monitoring"
+msgid "Bonding monitoring mode %s"
+msgstr "ಬಾಂಡಿಂಗೠಮೇಲà³à²µà²¿à²šà²¾à²°à²£à³† ಕà³à²°à²® %s"
-#: ../cli/src/connections.c:2950
+#: ../clients/cli/connections.c:3193
#, c-format
msgid "Error: '%s' is not a valid monitoring mode; use '%s' or '%s'.\n"
msgstr ""
"ದೋಷ: '%s' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಮೇಲà³à²µà²¿à²šà²¾à²°à²£à²¾ ಸà³à²¥à²¿à²¤à²¿à²¯à²¾à²—ಿಲà³à²²; '%s' ಅಥವ '%s' "
-"ಅನà³à²¨à³ ಬಳಸಿ.\n"
+"ಅನà³à²¨à³ "
+"ಬಳಸಿ.\n"
-#: ../cli/src/connections.c:2959
+#: ../clients/cli/connections.c:3202
msgid "Bonding miimon [100]: "
msgstr "ಬಾಂಡಿಂಗೠmiimon [100]: "
-#: ../cli/src/connections.c:2962
+#: ../clients/cli/connections.c:3205
#, 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
+#: ../clients/cli/connections.c:3213
msgid "Bonding downdelay [0]: "
msgstr "ಬಾಂಡಿಂಗೠಡೌನà³â€Œà²¡à²¿à²²à³† [0]: "
-#: ../cli/src/connections.c:2973
+#: ../clients/cli/connections.c:3216
#, 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
+#: ../clients/cli/connections.c:3224
msgid "Bonding updelay [0]: "
msgstr "ಬಾಂಡಿಂಗೠಅಪà³â€Œà²¡à²¿à²²à³† [0]: "
-#: ../cli/src/connections.c:2984
+#: ../clients/cli/connections.c:3227
#, 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
+#: ../clients/cli/connections.c:3236
msgid "Bonding arp-interval [0]: "
msgstr "ಬಾಂಡಿಂಗೠarp-interval [0]: "
-#: ../cli/src/connections.c:2996
+#: ../clients/cli/connections.c:3239
#, 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
+#. FIXME: verify the string
+#: ../clients/cli/connections.c:3247
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
+#: ../clients/cli/connections.c:3267
msgid "Team JSON configuration [none]: "
msgstr "ಟೀಮೠJSON ಸಂರಚನೆ [ಯಾವà³à²¦à³‚ ಇಲà³à²²]: "
-#: ../cli/src/connections.c:3051
+#: ../clients/cli/connections.c:3284
msgid "team"
msgstr "ಟೀಮà³"
-#: ../cli/src/connections.c:3057
+#: ../clients/cli/connections.c:3290
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"
+#. Ask for optional 'bridge' arguments.
+#: ../clients/cli/connections.c:3302
+#| msgid "Bridge"
+msgid "bridge"
+msgstr "ಬà³à²°à²¿à²œà³â€Œ"
-#: ../cli/src/connections.c:3081
-msgid "Enable STP (yes/no) [yes]: "
-msgstr "STP ಅನà³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸೠ(yes/no) [yes]: "
+#: ../clients/cli/connections.c:3308
+#, c-format
+#| msgid "Enable STP (yes/no) [yes]: "
+msgid "Enable STP %s"
+msgstr "%s STP ಅನà³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸà³"
-#: ../cli/src/connections.c:3085
+#: ../clients/cli/connections.c:3313
#, c-format
-msgid "Error: 'stp': '%s'.\n"
-msgstr "ದೋಷ: 'stp': '%s'.\n"
+#| msgid "Error: 'stp': %s."
+msgid "Error: 'stp': %s.\n"
+msgstr "ದೋಷ: 'stp': %s.\n"
-#: ../cli/src/connections.c:3093
-msgid "STP priority [128]: "
-msgstr "ಆದà³à²¯à²¤à³† ಆದà³à²¯à²¤à³† [128]: "
+#: ../clients/cli/connections.c:3321
+#| msgid "STP priority [128]: "
+msgid "STP priority [32768]: "
+msgstr "STP ಆದà³à²¯à²¤à³† [32768]: "
-#: ../cli/src/connections.c:3097
+#: ../clients/cli/connections.c:3325
#, 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
+#: ../clients/cli/connections.c:3333
msgid "Forward delay [15]: "
msgstr "ಫಾರà³à²µà²¾à²°à³à²¡à³ ವಿಳಂಬ [15]: "
-#: ../cli/src/connections.c:3109
+#: ../clients/cli/connections.c:3337
#, 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
+#: ../clients/cli/connections.c:3346
msgid "Hello time [2]: "
msgstr "ಹೆಲೊ ಟೈಮೠ[2]: "
-#: ../cli/src/connections.c:3122
+#: ../clients/cli/connections.c:3350
#, 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
+#: ../clients/cli/connections.c:3358
msgid "Max age [20]: "
msgstr "ಗರಿಷà³à²Ÿ ಕಾಲಾವಧಿ [20]: "
-#: ../cli/src/connections.c:3134
+#: ../clients/cli/connections.c:3362
#, 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
+#: ../clients/cli/connections.c:3370
msgid "MAC address ageing time [300]: "
msgstr "MAC ವಿಳಾಸದ ಕಾಲಾವಧಿ ತೀರಿಕೆಯ ಸಮಯ [300]: "
-#: ../cli/src/connections.c:3146
+#: ../clients/cli/connections.c:3374
#, c-format
msgid "Error: 'ageing-time': '%s' is not a valid number <0-1000000>.\n"
msgstr ""
-"ದೋಷ: 'ageing-time': '%s' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಸಂಖà³à²¯à³† <0-1000000> ಆಗಿಲà³à²²."
-"\n"
+"ದೋಷ: '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"
+#. Ask for optional 'bridge-slave' arguments.
+#: ../clients/cli/connections.c:3401
+#| msgid "team-slave"
+msgid "bridge-slave"
+msgstr "ಬà³à²°à²¿à²œà³â€Œ-ಸà³à²²à³‡à²µà³"
-#: ../cli/src/connections.c:3176
+#: ../clients/cli/connections.c:3406
msgid "Bridge port priority [32]: "
msgstr "ಬà³à²°à²¿à²œà³ ಸಂಪರà³à²•à²¸à³à²¥à²¾à²¨à²¦ ಆದà³à²¯à²¤à³† [32]: "
-#: ../cli/src/connections.c:3189
+#: ../clients/cli/connections.c:3419
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
+#: ../clients/cli/connections.c:3433
#, c-format
-msgid "Error: 'hairpin': '%s'.\n"
-msgstr "ದೋಷ: 'hairpin': '%s'.\n"
+#| msgid "Hairpin mode"
+msgid "Hairpin %s"
+msgstr "ಹೇರà³à²ªà²¿à²¨à³ %s"
-#: ../cli/src/connections.c:3225
+#: ../clients/cli/connections.c:3438
#, c-format
-msgid "There is 1 optional argument for 'VPN' connection type.\n"
-msgstr "'VPN' ಸಂಪರà³à²•à²¦ ಬಗೆಗಾಗಿ 1 à²à²šà³à²›à²¿à²• ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟೠಇದೆ.\n"
+#| msgid "Error: 'hairpin': %s."
+msgid "Error: 'hairpin': %s.\n"
+msgstr "ದೋಷ: 'hairpin': %s.\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"
+#. Ask for optional 'olpc' arguments.
+#: ../clients/cli/connections.c:3465 ../libnm-glib/nm-device.c:1794
+msgid "OLPC Mesh"
+msgstr "OLPC ಮೆಶà³"
-#: ../cli/src/connections.c:3258
+#: ../clients/cli/connections.c:3470
msgid "OLPC Mesh channel [1]: "
msgstr "OLPC ಮೆಶೠಚಾನಲೠ[1]: "
-#: ../cli/src/connections.c:3261
+#: ../clients/cli/connections.c:3473
#, 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
+#: ../clients/cli/connections.c:3481
msgid "DHCP anycast MAC address [none]: "
msgstr "DHCP ಎನಿಕà³à²¯à²¾à²¸à³à²Ÿà³ MAC ವಿಳಾಸ [ಯಾವà³à²¦à³‚ ಇಲà³à²²]: "
-#: ../cli/src/connections.c:3317
+#: ../clients/cli/connections.c:3526
msgid "IPv4 address (IP[/plen] [gateway]) [none]: "
msgstr "IPv4 ವಿಳಾಸ (IP[/plen] [gateway]) [ಯಾವà³à²¦à³‚ ಇಲà³à²²]: "
-#: ../cli/src/connections.c:3319
+#: ../clients/cli/connections.c:3528
msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
msgstr "IPv6 ವಿಳಾಸ (IP[/plen] [gateway]) [ಯಾವà³à²¦à³‚ ಇಲà³à²²]: "
-#: ../cli/src/connections.c:3337
+#: ../clients/cli/connections.c:3546
#, c-format
msgid " Address successfully added: %s %s\n"
msgstr " ವಿಳಾಸವನà³à²¨à³ ಯಶಸà³à²µà²¿à²¯à²¾à²—ಿ ಸೇರಿಸಲಾಗಿದೆ: %s %s\n"
-#: ../cli/src/connections.c:3339
+#: ../clients/cli/connections.c:3548
#, c-format
msgid " Warning: address already present: %s %s\n"
msgstr " ಎಚà³à²šà²°à²¿à²•à³†: ವಿಳಾಸವೠಈಗಾಗಲೆ ಇದೆ: %s %s\n"
-#: ../cli/src/connections.c:3341
+#: ../clients/cli/connections.c:3550
#, 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
+#: ../clients/cli/connections.c:3552 ../clients/cli/connections.c:4375
+#: ../clients/cli/connections.c:4436 ../clients/cli/connections.c:4838
+#: ../clients/cli/connections.c:4848
msgid "Error: "
msgstr "ದೋಷ: "
-#: ../cli/src/connections.c:3361
-msgid "Do you want to add IP addresses? (yes/no) [yes] "
-msgstr "ನೀವೠIP ವಿಳಾಸವನà³à²¨à³ ಸೇರಿಸಲೠಬಯಸà³à²µà²¿à²°à²¾? (yes/no) [yes] "
+#. Ask for IP addresses
+#: ../clients/cli/connections.c:3569
+#, 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:3367
+#: ../clients/cli/connections.c:3576
#, c-format
msgid "Press <Enter> to finish adding addresses.\n"
msgstr "ವಿಳಾಸವನà³à²¨à³ ಸೇರಿಸà³à²µà³à²¦à²¨à³à²¨à³ ಪೂರà³à²£à²—ೊಳಿಸಲೠ<Enter> ಅನà³à²¨à³ ಒತà³à²¤à²¿.\n"
-#: ../cli/src/connections.c:3513
+#: ../clients/cli/connections.c:3715
#, c-format
msgid "Error: 'parent': not valid without 'p-key'."
msgstr "ದೋಷ: 'parent': 'p-key' ಇಲà³à²²à²¦à³† ಮಾನà³à²¯à²µà²¾à²—ಿರà³à²µà³à²¦à²¿à²²à³à²²."
-#: ../cli/src/connections.c:3569 ../cli/src/connections.c:4562
+#: ../clients/cli/connections.c:3767 ../clients/cli/connections.c:4757
msgid "SSID: "
msgstr "SSID: "
-#: ../cli/src/connections.c:3572 ../cli/src/connections.c:4565
+#: ../clients/cli/connections.c:3770 ../clients/cli/connections.c:4760
msgid "Error: 'ssid' is required."
msgstr "ದೋಷ: 'ssid' ಯ ಅಗತà³à²¯à²µà²¿à²¦à³†."
-#: ../cli/src/connections.c:3636
+#: ../clients/cli/connections.c:3827
msgid "WiMAX NSP name: "
msgstr "WiMAX NSP ಹೆಸರà³:"
-#: ../cli/src/connections.c:3639
+#: ../clients/cli/connections.c:3830
msgid "Error: 'nsp' is required."
msgstr "ದೋಷ: 'nsp' ಯ ಅಗತà³à²¯à²µà²¿à²¦à³†."
-#: ../cli/src/connections.c:3694
+#: ../clients/cli/connections.c:3882
msgid "PPPoE username: "
msgstr "PPPoE ಬಳಕೆದಾರ ಹೆಸರà³: "
-#: ../cli/src/connections.c:3697
+#: ../clients/cli/connections.c:3885
msgid "Error: 'username' is required."
msgstr "ದೋಷ: 'username' ನ ಅಗತà³à²¯à²µà²¿à²¦à³†."
-#: ../cli/src/connections.c:3768
+#: ../clients/cli/connections.c:3954
msgid "APN: "
msgstr "APN: "
-#: ../cli/src/connections.c:3771
+#: ../clients/cli/connections.c:3957
msgid "Error: 'apn' is required."
msgstr "ದೋಷ: 'apn' ನ ಅಗತà³à²¯à²µà²¿à²¦à³†."
-#: ../cli/src/connections.c:3830
+#: ../clients/cli/connections.c:4015
msgid "Bluetooth device address: "
msgstr "ಬà³à²²à³‚ಟೂತà³â€Œ ಸಾಧನದ ವಿಳಾಸ:"
-#: ../cli/src/connections.c:3833
+#: ../clients/cli/connections.c:4018
msgid "Error: 'addr' is required."
msgstr "ದೋಷ: 'addr' ನ ಅಗತà³à²¯à²µà²¿à²¦à³†."
-#: ../cli/src/connections.c:3876
+#: ../clients/cli/connections.c:4059
#, 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
+#: ../clients/cli/connections.c:4103
msgid "VLAN parent device or connection UUID: "
msgstr "VLAN ಮೂಲ ಸಾಧನ ಅಥವ ಸಂಪರà³à²• UUID: "
-#: ../cli/src/connections.c:3924
+#: ../clients/cli/connections.c:4106
msgid "Error: 'dev' is required."
msgstr "ದೋಷ: 'dev' ನ ಅಗತà³à²¯à²µà²¿à²¦à³†."
-#: ../cli/src/connections.c:3928
+#: ../clients/cli/connections.c:4110
msgid "VLAN ID <0-4095>: "
msgstr "VLAN ID <0-4095>: "
-#: ../cli/src/connections.c:3931
+#: ../clients/cli/connections.c:4113
msgid "Error: 'id' is required."
msgstr "ದೋಷ: 'id' ಯ ಅಗತà³à²¯à²µà²¿à²¦à³†."
-#: ../cli/src/connections.c:3937
+#: ../clients/cli/connections.c:4119
#, c-format
msgid "Error: 'id': '%s' is not valid; use <0-4095>."
msgstr "ದೋಷ: 'id': '%s' ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²; <0-4095> ಬಳಸಿ."
-#: ../cli/src/connections.c:3947
+#: ../clients/cli/connections.c:4129
#, c-format
msgid "Error: 'dev': '%s' is neither UUID, interface name, nor MAC."
msgstr ""
"ದೋಷ: 'dev': '%s' ಎನà³à²¨à³à²µà³à²¦à³ UUID ಆಗಲಿ, ಸಂಪರà³à²•à²¸à²¾à²§à²¨à²¦ ಹೆಸರಾಗಲಿ ಅಥವ MAC ಆಗಲಿ ಅಲà³à²²."
-""
-#: ../cli/src/connections.c:4082
+#: ../clients/cli/connections.c:4258
#, c-format
msgid "Error: 'mode': %s."
msgstr "ದೋಷ: 'mode': %s"
-#: ../cli/src/connections.c:4091
+#: ../clients/cli/connections.c:4267
#, 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
+#: ../clients/cli/connections.c:4316 ../clients/cli/connections.c:4414
+#: ../clients/cli/connections.c:4616
msgid "Error: 'master' is required."
msgstr "ದೋಷ: 'master' ನ ಅಗತà³à²¯à²µà²¿à²¦à³†."
-#: ../cli/src/connections.c:4142 ../cli/src/connections.c:4239
-#: ../cli/src/connections.c:4427
+#: ../clients/cli/connections.c:4322 ../clients/cli/connections.c:4420
+#: ../clients/cli/connections.c:4622
+#, c-format
+msgid "Warning: master='%s' doesn't refer to any existing profile.\n"
+msgstr ""
+"ಎಚà³à²šà²°à²¿à²•à³†: master='%s' ಎನà³à²¨à³à²µà³à²¦à³ ಈಗಿರà³à²µ ಯಾವà³à²¦à³† ಪà³à²°à³Šà²«à³ˆà²²à³â€Œà²—ೆ ಸಂಬಂಧಿಸಿರà³à²µà³à²¦à²¿à²²à³à²².\n"
+
+#: ../clients/cli/connections.c:4325 ../clients/cli/connections.c:4428
+#: ../clients/cli/connections.c:4625
#, c-format
msgid ""
"Warning: 'type' is currently ignored. We only support ethernet slaves for "
"now.\n"
msgstr ""
"ಎಚà³à²šà²°à²¿à²•à³†: 'type' ಅನà³à²¨à³ ಪà³à²°à²¸à²•à³à²¤ ಕಡೆಗಣಿಸಲಾಗಿದೆ. ನಾವೠಈಗ ಕೇವಲ ಇತರà³à²¨à³†à²Ÿà³ "
-"ಸà³à²²à³‡à²µà³â€Œà²—ಳನà³à²¨à³ ಮಾತà³à²° ಬೆಂಬಲಿಸà³à²¤à³à²¤à³‡à²µà³†.\n"
+"ಸà³à²²à³‡à²µà³â€Œà²—ಳನà³à²¨à³ ಮಾತà³à²° "
+"ಬೆಂಬಲಿಸà³à²¤à³à²¤à³‡à²µà³†.\n"
-#: ../cli/src/connections.c:4226
-msgid "Team master: "
-msgstr "ತಂಡದ ಪà³à²°à²®à³à²–:"
-
-#: ../cli/src/connections.c:4329
+#: ../clients/cli/connections.c:4522
#, 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
+#: ../clients/cli/connections.c:4652
#, c-format
msgid "Error: 'hairpin': %s."
msgstr "ದೋಷ: 'hairpin': %s."
-#: ../cli/src/connections.c:4506
-msgid "VPN type: "
-msgstr "VPN ಬಗೆ: "
-
-#: ../cli/src/connections.c:4509
+#: ../clients/cli/connections.c:4705
msgid "Error: 'vpn-type' is required."
msgstr "ದೋಷ: 'vpn-type' ನ ಅಗತà³à²¯à²µà²¿à²¦à³†."
-#: ../cli/src/connections.c:4520
+#: ../clients/cli/connections.c:4712
#, c-format
-msgid "Error: 'vpn-type': %s."
-msgstr "ದೋಷ: 'vpn-type': %s."
+#| msgid "Error: 'vpn-type': %s."
+msgid "Warning: 'vpn-type': %s not known.\n"
+msgstr "ಎಚà³à²šà²°à²¿à²•à³†: 'vpn-type': %s ತಿಳಿದಿಲà³à²².\n"
-#: ../cli/src/connections.c:4578
+#: ../clients/cli/connections.c:4773
#, c-format
msgid "Error: 'channel': '%s' is not valid; use <1-13>."
msgstr "ದೋಷ: 'channel': '%s' ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²; <1-13> ಬಳಸಿ."
-#: ../cli/src/connections.c:4613
+#: ../clients/cli/connections.c:4805
#, c-format
msgid "Error: '%s' is not a valid connection type."
msgstr "ದೋಷ: '%s' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಸಂಪರà³à²•à²¦ ಬಗೆಯಾಗಿಲà³à²²."
-#: ../cli/src/connections.c:4711
+#: ../clients/cli/connections.c:4903
#, c-format
msgid "Error: Failed to add '%s' connection: (%d) %s"
msgstr "ದೋಷ: '%s' ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸೇರಿಸಲೠವಿಫಲಗೊಂಡಿದೆ: (%d) %s"
-#: ../cli/src/connections.c:4715
+#: ../clients/cli/connections.c:4907
#, 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
+#: ../clients/cli/connections.c:5121
#, c-format
msgid "Error: 'type' argument is required."
msgstr "ದೋಷ: 'type' ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œà²¨ ಅಗತà³à²¯à²µà²¿à²¦à³†."
-#: ../cli/src/connections.c:4771
+#: ../clients/cli/connections.c:5129
#, c-format
msgid "Error: invalid connection type; %s."
msgstr "ದೋಷ: ಅಮಾನà³à²¯à²µà²¾à²¦ ಸಂಪರà³à²•à²¦ ಬಗೆ: %s."
-#: ../cli/src/connections.c:4780
+#: ../clients/cli/connections.c:5138
#, c-format
msgid "Error: 'autoconnect': %s."
msgstr "ದೋಷ: 'autoconnect': %s."
-#: ../cli/src/connections.c:4796
+#: ../clients/cli/connections.c:5148
+#, c-format
+#| msgid "Error: 'stp': %s."
+msgid "Error: 'save': %s."
+msgstr "ದೋಷ: 'save': %s."
+
+#: ../clients/cli/connections.c:5164
msgid "Interface name [*]: "
msgstr "ಸಂಪರà³à²•à²¸à²¾à²§à²¨à²¦ ಹೆಸರೠ[*]:: "
-#: ../cli/src/connections.c:4801
+#: ../clients/cli/connections.c:5169
#, c-format
msgid "Error: 'ifname' argument is required."
msgstr "ದೋಷ: 'ifname' ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œà²¨ ಅಗತà³à²¯à²µà²¿à²¦à³†."
-#: ../cli/src/connections.c:4808
+#: ../clients/cli/connections.c:5176
#, c-format
msgid "Error: 'ifname': '%s' is not a valid interface nor '*'."
msgstr ""
"ದೋಷ: 'ifname': '%s' ಎನà³à²¨à³à²µà³à²¦à³ ಮಾನà³à²¯à²µà²¾à²¦ ಸಂಪರà³à²•à²¸à²¾à²§à²¨à²¦ ಹೆಸರಾಗಲಿ ಅಥವ '*' ಆಗಲಿ "
"ಆಗಿಲà³à²²."
-#: ../cli/src/connections.c:5627
+#: ../clients/cli/connections.c:5964
#, c-format
msgid "['%s' setting values]\n"
msgstr "['%s' ಸಿದà³à²§à²¤à³†à²¯ ಮೌಲà³à²¯à²—ಳà³]\n"
-#: ../cli/src/connections.c:5708
-#, c-format
+#. TRANSLATORS: do not translate command names and keywords before ::
+#. * However, you should translate terms enclosed in <>.
+#.
+#: ../clients/cli/connections.c:6046
+#, 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"
@@ -1933,9 +2263,9 @@ msgid ""
"value\n"
"set [<setting>.<prop> <value>] :: set property value\n"
"describe [<setting>.<prop>] :: describe property\n"
-"print [all] :: print the connection\n"
+"print [all | <setting>[.<prop>]] :: print the connection\n"
"verify [all] :: verify the connection\n"
-"save :: save 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"
@@ -1948,16 +2278,16 @@ msgstr ""
"ಮೌಲà³à²¯à²µà²¨à³à²¨à³ ಮರà³à²¹à³Šà²‚ದಿಸà³\n"
"set [<setting>.<prop> <value>] :: ಗà³à²£à²¦ ಮೌಲà³à²¯à²µà²¨à³à²¨à³ ಹೊಂದಿಸà³\n"
"describe [<setting>.<prop>] :: ಗà³à²£à²µà²¨à³à²¨à³ ವಿವರಿಸà³\n"
-"print [all] :: ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಮà³à²¦à³à²°à²¿à²¸à³\n"
+"print [all | <setting>[.<prop>]] :: ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಮà³à²¦à³à²°à²¿à²¸à³\n"
"verify [all] :: ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಪರಿಶೀಲಿಸà³\n"
-"save :: ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಉಳಿಸà³\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:5735
+#: ../clients/cli/connections.c:6073
#, c-format
msgid ""
"goto <setting>[.<prop>] | <prop> :: enter setting/property for editing\n"
@@ -1976,12 +2306,13 @@ msgstr ""
" nmcli connection> goto secondaries\n"
" nmcli> goto ipv4.addresses\n"
-#: ../cli/src/connections.c:5742
+#: ../clients/cli/connections.c:6080
#, 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"
+"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"
@@ -1996,7 +2327,7 @@ msgstr ""
"ಉದಾಹರಣೆಗಳà³: nmcli> remove wifi-sec\n"
" nmcli> remove eth.mtu\n"
-#: ../cli/src/connections.c:5749
+#: ../clients/cli/connections.c:6087
#, c-format
msgid ""
"set [<setting>.<prop> <value>] :: set property value\n"
@@ -2011,7 +2342,7 @@ msgstr ""
"\n"
"ಉದಾಹರಣೆ: nmcli> set con.id My connection\n"
-#: ../cli/src/connections.c:5754
+#: ../clients/cli/connections.c:6092
#, c-format
msgid ""
"describe [<setting>.<prop>] :: describe property\n"
@@ -2022,9 +2353,10 @@ msgstr ""
"describe [<setting>.<prop>] :: ಗà³à²£à²µà²¨à³à²¨à³ ವಿವರಿಸà³\n"
"\n"
"ಗà³à²£à²¦ ವಿವರಣೆಯನà³à²¨à³ ತೋರಿಸà³à²¤à³à²¤à²¦à³†. ಎಲà³à²²à²¾ NM ಸಿದà³à²§à²¤à³†à²—ಳೠಮತà³à²¤à³ ಗà³à²£à²—ಳನà³à²¨à³ ನೋಡಲೠನೀವೠ"
-"nm-settings(5) ಮಾಹಿತಿ ಪà³à²Ÿà²µà²¨à³à²¨à³ ನೋಡಬಹà³à²¦à³.\n"
+"nm-"
+"settings(5) ಮಾಹಿತಿ ಪà³à²Ÿà²µà²¨à³à²¨à³ ನೋಡಬಹà³à²¦à³.\n"
-#: ../cli/src/connections.c:5759
+#: ../clients/cli/connections.c:6097
#, c-format
msgid ""
"print [all] :: print setting or connection values\n"
@@ -2039,7 +2371,7 @@ msgstr ""
"\n"
"ಉದಾಹರಣೆ: nmcli ipv4> print all\n"
-#: ../cli/src/connections.c:5764
+#: ../clients/cli/connections.c:6102
#, c-format
msgid ""
"verify [all] :: verify setting or connection validity\n"
@@ -2053,24 +2385,43 @@ msgstr ""
"verify [all] :: ಸಿದà³à²§à²¤à³† ಅಥವ ಸಂಪರà³à²•à²¦ ಮಾನà³à²¯à²¤à³†à²¯à²¨à³à²¨à³ ಪರಿಶೀಲಿಸೠ\n"
"\n"
"ಸಿದà³à²§à²¤à³† ಅಥವ ಸಂಪರà³à²•à²µà³ ಮಾನà³à²¯à²µà²¾à²—ಿದೆಯೆ ಮತà³à²¤à³ ನಂತರದ ಸಮಯದಲà³à²²à²¿ ಉಳಿಸಬಹà³à²¦à³† "
-"ಎನà³à²¨à³à²µà³à²¦à²¨à³à²¨à³ ಪರಿಶೀಲಿಸà³à²¤à³à²¤à²¦à³†. ಇದೠದೋಷ ಉಂಟಾದಾಗ ಅಮಾನà³à²¯à²µà²¾à²¦ ಮೌಲà³à²¯à²—ಳನà³à²¨à³ "
-"ಸೂಚಿಸà³à²¤à³à²¤à²¦à³†.\n"
+"ಎನà³à²¨à³à²µà³à²¦à²¨à³à²¨à³ "
+"ಪರಿಶೀಲಿಸà³à²¤à³à²¤à²¦à³†. ಇದೠದೋಷ ಉಂಟಾದಾಗ ಅಮಾನà³à²¯à²µà²¾à²¦ ಮೌಲà³à²¯à²—ಳನà³à²¨à³ ಸೂಚಿಸà³à²¤à³à²¤à²¦à³†.\n"
"\n"
"ಉದಾಹರಣೆಗಳà³: nmcli> verify\n"
" nmcli bond> verify\n"
-#: ../cli/src/connections.c:5771
+#: ../clients/cli/connections.c:6109
#, 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
+"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"
+
+#: ../clients/cli/connections.c:6120
#, c-format
msgid ""
"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
@@ -2091,21 +2442,25 @@ msgstr ""
"/<ap>|<nsp> - AP (Wi-Fi) ಅಥವ NSP (WiMAX) (<ifname> ಅನà³à²¨à³ ಸೂಚಿಸದೆ ಇದà³à²¦à²²à³à²²à²¿ / "
"ಪೂರà³à²µà²¦à²²à³à²²à²¿ ಸೇರಿಸಿ)\n"
-#: ../cli/src/connections.c:5782 ../cli/src/connections.c:5932
+#: ../clients/cli/connections.c:6127 ../clients/cli/connections.c:6284
#, c-format
-msgid "back :: go to upper menu level\n"
+msgid ""
+"back :: go to upper menu level\n"
"\n"
-msgstr "back :: ಮೇಲಿನ ಪರಿವಿಡಿಯ ಮಟà³à²Ÿà²•à³à²•à³† ಹೋಗà³\n"
+msgstr ""
+"back :: ಮೇಲಿನ ಪರಿವಿಡಿಯ ಮಟà³à²Ÿà²•à³à²•à³† ಹೋಗà³\n"
"\n"
-#: ../cli/src/connections.c:5785
+#: ../clients/cli/connections.c:6130
#, c-format
-msgid "help/? [<command>] :: help for the nmcli commands\n"
+msgid ""
+"help/? [<command>] :: help for the nmcli commands\n"
"\n"
-msgstr "help/? [<command>] :: nmcli ಆದೇಶಗಳಿಗಾಗಿನ ನೆರವà³\n"
+msgstr ""
+"help/? [<command>] :: nmcli ಆದೇಶಗಳಿಗಾಗಿನ ನೆರವà³\n"
"\n"
-#: ../cli/src/connections.c:5788
+#: ../clients/cli/connections.c:6133
#, c-format
msgid ""
"nmcli [<conf-option> <value>] :: nmcli configuration\n"
@@ -2148,7 +2503,7 @@ msgstr ""
" nmcli> nmcli save-confirmation no\n"
" nmcli> nmcli prompt-color 3\n"
-#: ../cli/src/connections.c:5808 ../cli/src/connections.c:5938
+#: ../clients/cli/connections.c:6153 ../clients/cli/connections.c:6290
#, c-format
msgid ""
"quit :: exit nmcli\n"
@@ -2159,15 +2514,19 @@ msgstr ""
"quit :: nmcli ಇಂದ ನಿರà³à²—ಮಿಸà³\n"
"\n"
"ಈ ಆದೇಶವೠnmcli ಇಂದೠನಿರà³à²—ಮಿಸà³à²µà²‚ತೆ ಮಾಡà³à²¤à³à²¤à²¦à³†. ಸಂಪಾದಿಸà³à²¤à³à²¤à²¿à²°à³à²µ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ "
-"ಉಳಿಸದೆ ಇದà³à²¦à²²à³à²²à²¿, ಕà³à²°à²¿à²¯à³†à²¯à²¨à³à²¨à³ ಖಚಿತಪಡಿಸà³à²µà²‚ತೆ ಬಳಕೆದಾರರನà³à²¨à³ ಕೇಳಲಾಗà³à²¤à³à²¤à²¦à³†.\n"
+"ಉಳಿಸದೆ "
+"ಇದà³à²¦à²²à³à²²à²¿, ಕà³à²°à²¿à²¯à³†à²¯à²¨à³à²¨à³ ಖಚಿತಪಡಿಸà³à²µà²‚ತೆ ಬಳಕೆದಾರರನà³à²¨à³ ಕೇಳಲಾಗà³à²¤à³à²¤à²¦à³†.\n"
-#: ../cli/src/connections.c:5813 ../cli/src/connections.c:5943
-#: ../cli/src/connections.c:6313 ../cli/src/connections.c:7162
+#: ../clients/cli/connections.c:6158 ../clients/cli/connections.c:6295
+#: ../clients/cli/connections.c:6683 ../clients/cli/connections.c:7574
#, c-format
msgid "Unknown command: '%s'\n"
msgstr "ಗೊತà³à²¤à²¿à²°à²¦ ಆದೇಶ: '%s'\n"
-#: ../cli/src/connections.c:5879
+#. TRANSLATORS: do not translate command names and keywords before ::
+#. * However, you should translate terms enclosed in <>.
+#.
+#: ../clients/cli/connections.c:6224
#, c-format
msgid ""
"---[ Property menu ]---\n"
@@ -2194,7 +2553,7 @@ msgstr ""
"help/? [<command>] :: ಈ ನೆರವೠಅಥವ ಆದೇಶದ ವಿವರಣೆಯನà³à²¨à³ ಮà³à²¦à³à²°à²¿à²¸à³\n"
"quit :: nmcli ಇಂದ ನಿರà³à²—ಮಿಸà³\n"
-#: ../cli/src/connections.c:5904
+#: ../clients/cli/connections.c:6249
#, c-format
msgid ""
"set [<value>] :: set new value\n"
@@ -2205,22 +2564,28 @@ msgstr ""
"\n"
"ಈ ಆದೇಶವೠಈ ಗà³à²£à²•à³à²•à³† <value> ಅನà³à²¨à³ ಹೊಂದಿಸà³à²¤à³à²¤à²¦à³†\n"
-#: ../cli/src/connections.c:5908
+#: ../clients/cli/connections.c:6253
#, 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"
msgid ""
-"add [<value>] :: add new option to the property\n"
+"add [<value>] :: append new value 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"
+"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 [<value>] :: ಗà³à²£à²•à³à²•à³† ಹೊಸ ಆಯà³à²•à³†à²¯à²¨à³à²¨à³ ಸೇರಿಸà³\n"
+"add [<value>] :: ಗà³à²£à²•à³à²•à³† ಹೊಸ ಮೌಲà³à²¯à²µà²¨à³à²¨à³ ಸೇರಿಸà³\n"
"\n"
-"ಈ ಆದೇಶವೠಒದಗಿಸಲಾದ <value> ಅನà³à²¨à³ ಈ ಗà³à²£à²•à³à²•à³† ಸೇರಿಸà³à²¤à³à²¤à²¦à³†, ಗà³à²£à²µà³ ಒಂದೠಕಂಟೇನರಿನ "
-"ಬಗೆಯದಾಗಿದà³à²¦à²°à³†. à²à²•-ಮೌಲà³à²¯à²¦ ಗà³à²£à²—ಳಿಗಾಗಿ ಇದೠಮೌಲà³à²¯à²µà²¨à³à²¨à³ ಬದಲಿ ಮಾಡà³à²¤à³à²¤à²¦à³† ('set' "
-"ನಂತೆಯೆ ಇರà³à²¤à³à²¤à²¦à³†).\n"
+"ಗà³à²£à²µà³ ಒಂದೠಕಂಟೇನರಿನ ಬಗೆಯದಾಗಿದà³à²¦à²°à³†, ಈ ಆದೇಶವೠಒದಗಿಸಲಾದ <value> ಅನà³à²¨à³ ಈ ಗà³à²£à²•à³à²•à³† "
+"ಸೇರಿಸà³à²¤à³à²¤à²¦à³†. à²à²•-ಮೌಲà³à²¯à²¦ ಗà³à²£à²—ಳಿಗಾಗಿ ಇದೠಮೌಲà³à²¯à²µà²¨à³à²¨à³ ಬದಲಿ ಮಾಡà³à²¤à³à²¤à²¦à³† ('set' ನಂತೆಯೆ "
+"ಇರà³à²¤à³à²¤à²¦à³†).\n"
-#: ../cli/src/connections.c:5914
+#: ../clients/cli/connections.c:6259
#, c-format
msgid ""
"change :: change current value\n"
@@ -2231,18 +2596,42 @@ msgstr ""
"\n"
"ಪà³à²°à²¸à²•à³à²¤ ಮೌಲà³à²¯à²µà²¨à³à²¨à³ ತೋರಿಸà³à²¤à³à²¤à²¦à³† ಮತà³à²¤à³ ಅದನà³à²¨à³ ಸಂಪಾದಿಸಲೠಅನà³à²®à²¤à²¿à²¸à³à²¤à³à²¤à²¦à³†.\n"
-#: ../cli/src/connections.c:5918
+#: ../clients/cli/connections.c:6263
#, c-format
msgid ""
-"remove [<index>|<option>] :: delete the value\n"
+"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"
-"Removes the property value (sets it to default).\n"
msgstr ""
-"remove [<index>|<option>] :: ಮೌಲà³à²¯à²µà²¨à³à²¨à³ ಅಳಿಸà³\n"
+"remove [<value>|<index>|<option name>] :: ಮೌಲà³à²¯à²µà²¨à³à²¨à³ ಅಳಿಸà³\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"
-"ಗà³à²£à²¦ ಮೌಲà³à²¯à²µà²¨à³à²¨à³ ತೆಗೆದà³à²¹à²¾à²•à³à²¤à³à²¤à²¦à³† (ಅದನà³à²¨à³ ಪೂರà³à²µà²¨à²¿à²¯à³‹à²œà²¿à²¤à²•à³à²•à³† ಹೊಂದಿಸà³à²¤à³à²¤à²¦à³†).\n"
-#: ../cli/src/connections.c:5922
+#: ../clients/cli/connections.c:6274
#, c-format
msgid ""
"describe :: describe property\n"
@@ -2253,9 +2642,10 @@ msgstr ""
"describe :: ಗà³à²£à²µà²¨à³à²¨à³ ವಿವರಿಸà³\n"
"\n"
"ಗà³à²£à²¦ ವಿವರಣೆಯನà³à²¨à³ ತೋರಿಸà³à²¤à³à²¤à²¦à³†. ಎಲà³à²²à²¾ NM ಸಿದà³à²§à²¤à³†à²—ಳೠಮತà³à²¤à³ ಗà³à²£à²—ಳನà³à²¨à³ ನೋಡಲೠನೀವೠ"
-"nm-settings(5) ಮಾಹಿತಿ ಪà³à²Ÿà²µà²¨à³à²¨à³ ನೋಡಬಹà³à²¦à³.\n"
+"nm-"
+"settings(5) ಮಾಹಿತಿ ಪà³à²Ÿà²µà²¨à³à²¨à³ ನೋಡಬಹà³à²¦à³.\n"
-#: ../cli/src/connections.c:5927
+#: ../clients/cli/connections.c:6279
#, c-format
msgid ""
"print [property|setting|connection] :: print property (setting, connection) "
@@ -2265,35 +2655,47 @@ msgid ""
"the whole setting or connection.\n"
msgstr ""
"print [property|setting|connection] :: ಗà³à²£à²¦ (ಸಿದà³à²§à²¤à³†, ಸಂಪರà³à²•) "
-"ಮೌಲà³à²¯à²µà²¨à³à²¨à³(ಗಳನà³à²¨à³) ಮà³à²¦à³à²°à²¿à²¸à³\n"
+"ಮೌಲà³à²¯à²µà²¨à³à²¨à³(ಗಳನà³à²¨à³) "
+"ಮà³à²¦à³à²°à²¿à²¸à³\n"
"\n"
"ಗà³à²£à²¦ ಮೌಲà³à²¯à²µà²¨à³à²¨à³ ತೋರಿಸà³à²¤à³à²¤à²¦à³†. ಒಂದೠಆರà³à²—à³à²¯à³à²®à³†à²‚ಟೠಅನà³à²¨à³ ಒದಗಿಸಿದಲà³à²²à²¿ ಸಂಪೂರà³à²£ "
-"ಸಿದà³à²§à²¤à³† ಅಥವ ಸಂಪರà³à²•à²•à³à²•à²¾à²—ಿನ ಮೌಲà³à²¯à²—ಳನà³à²¨à³‚ ಸಹ ನೀವೠತೋರಿಸಬಹà³à²¦à³.\n"
+"ಸಿದà³à²§à²¤à³† ಅಥವ "
+"ಸಂಪರà³à²•à²•à³à²•à²¾à²—ಿನ ಮೌಲà³à²¯à²—ಳನà³à²¨à³‚ ಸಹ ನೀವೠತೋರಿಸಬಹà³à²¦à³.\n"
-#: ../cli/src/connections.c:5935
+#: ../clients/cli/connections.c:6287
#, c-format
-msgid "help/? [<command>] :: help for nmcli commands\n"
+msgid ""
+"help/? [<command>] :: help for nmcli commands\n"
"\n"
-msgstr "help/? [<command>] :: nmcli ಆದೇಶಗಳಿಗಾಗಿನ ನೆರವà³\n"
+msgstr ""
+"help/? [<command>] :: nmcli ಆದೇಶಗಳಿಗಾಗಿನ ನೆರವà³\n"
"\n"
-#: ../cli/src/connections.c:6022
+#: ../clients/cli/connections.c:6374
#, c-format
msgid "Error: Connection activation failed.\n"
msgstr "ದೋಷ: ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಕೆಯೠವಿಫಲಗೊಂಡಿದೆ.\n"
-#: ../cli/src/connections.c:6093
+#: ../clients/cli/connections.c:6452
#, c-format
msgid "Error: setting '%s' is mandatory and cannot be removed.\n"
msgstr ""
"ದೋಷ: '%s' ಸಿದà³à²§à²¤à³†à²¯à³ ಖಡà³à²¡à²¾à²¯à²µà²¾à²—ಿರà³à²¤à³à²¤à²¦à³† ಮತà³à²¤à³ ತೆಗೆದà³à²¹à²¾à²•à²²à³ ಸಾಧà³à²¯à²µà²¿à²°à³à²µà³à²¦à²¿à²²à³à²².\n"
-#: ../cli/src/connections.c:6111
+#. TRANSLATORS: status line in nmcli connection editor
+#: ../clients/cli/connections.c:6470
#, c-format
-msgid "[ Connection type: %s | name: %s | UUID: %s | dirty: %s ]\n"
-msgstr "[ Connection type: %s | name: %s | UUID: %s | dirty: %s ]\n"
+#| 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:6171
+#: ../clients/cli/connections.c:6505
+#, 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"
+
+#: ../clients/cli/connections.c:6550
#, c-format
msgid ""
"The connection profile has been removed from another client. You may type "
@@ -2302,79 +2704,80 @@ msgstr ""
"ಸಂಪರà³à²•à²¦ ಪà³à²°à³Šà²«à³ˆà²²à³ ಅನà³à²¨à³ ಬೇರೊಂದೠಕà³à²²à³ˆà²‚ಟà³â€Œà²¨à²¿à²‚ದ ತೆಗೆದà³à²¹à²¾à²•à²²à²¾à²—ಿದೆ. ನೀವೠಅದನà³à²¨à³ "
"ಮರಳಿಸà³à²¥à²¾à²ªà²¿à²¸à²²à³ ಮà³à²–à³à²¯ ಮೆನà³à²µà²¿à²¨à²²à³à²²à²¿ 'save' ಅನà³à²¨à³ ನಮೂದಿಸಬಹà³.\n"
-#: ../cli/src/connections.c:6192 ../cli/src/connections.c:6615
-#: ../cli/src/connections.c:6673
+#: ../clients/cli/connections.c:6572 ../clients/cli/connections.c:6987
+#: ../clients/cli/connections.c:7042
#, 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
+#: ../clients/cli/connections.c:6587 ../clients/cli/connections.c:6605
+#: ../clients/cli/connections.c:6991 ../clients/cli/connections.c:7047
#, c-format
msgid "Error: failed to set '%s' property: %s\n"
msgstr "ದೋಷ: '%s' ಗà³à²£à²µà²¨à³à²¨à³ ಹೊಂದಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: %s\n"
-#: ../cli/src/connections.c:6221
+#: ../clients/cli/connections.c:6599
#, c-format
msgid "Edit '%s' value: "
msgstr "'%s' ಮೌಲà³à²¯à²µà²¨à³à²¨à³ ಸಂಪಾದಿಸಿ: "
-#: ../cli/src/connections.c:6250
+#: ../clients/cli/connections.c:6626
#, c-format
msgid "Error: %s\n"
msgstr "ದೋಷ: %s\n"
-#: ../cli/src/connections.c:6256 ../cli/src/connections.c:6759
-#: ../cli/src/connections.c:6800
+#: ../clients/cli/connections.c:6632 ../clients/cli/connections.c:7126
+#: ../clients/cli/connections.c:7167
#, c-format
msgid "Error: failed to remove value of '%s': %s\n"
msgstr "ದೋಷ: '%s' ಮೌಲà³à²¯à²µà²¨à³à²¨à³ ತೆಗೆದà³à²¹à²¾à²•à³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: %s\n"
-#: ../cli/src/connections.c:6277
+#: ../clients/cli/connections.c:6653
#, 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
+#: ../clients/cli/connections.c:6779
#, c-format
msgid "Available settings: %s\n"
msgstr "ಲಭà³à²¯à²µà²¿à²°à³à²µ ಸಿದà³à²§à²¤à³†à²—ಳà³: %s\n"
-#: ../cli/src/connections.c:6418
+#: ../clients/cli/connections.c:6788
#, c-format
msgid "Error: invalid setting name; %s\n"
msgstr "ದೋಷ: ಅಮಾನà³à²¯à²µà²¾à²¦ ಸಿದà³à²§à²¤à³†à²¯ ಹೆಸರà³; %s\n"
-#: ../cli/src/connections.c:6435
+#: ../clients/cli/connections.c:6805
#, c-format
msgid "Available properties: %s\n"
msgstr "ಲಭà³à²¯à²µà²¿à²°à³à²µ ಗà³à²£à²—ಳà³: %s\n"
-#: ../cli/src/connections.c:6443
+#: ../clients/cli/connections.c:6813
#, c-format
msgid "Error: property %s\n"
msgstr "ದೋಷ: %s ಗà³à²£\n"
-#: ../cli/src/connections.c:6484
+#: ../clients/cli/connections.c:6854
+#, 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? [yes] "
+"Do you still want to save? %s"
msgstr ""
-"'autoconnect=yes' ನೊಂದಿಗೆ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಉಳಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†. ಇದೠಸಂಪರà³à²•à²¦ ತಕà³à²·à²£à²¦ "
-"ಒಂದೠಸಕà³à²°à²¿à²¯à²—ೊಳಿಕೆಗೆ ಕಾರಣವಾಗà³à²¤à³à²¤à²¦à³†.\n"
-"ಆದರೂ ಸಹ ನೀವದನà³à²¨à³ ಉಳಿಸಲೠಬಯಸà³à²µà²¿à²°à²¾? [yes] "
+"'autoconnect=yes' ನೊಂದಿಗೆ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಉಳಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†. ಇದೠಸಂಪರà³à²•à²¦ ತಕà³à²·à²£à²¦ ಒಂದೠ"
+"ಸಕà³à²°à²¿à²¯à²—ೊಳಿಕೆಗೆ ಕಾರಣವಾಗà³à²¤à³à²¤à²¦à³†.\n"
+"ಆದರೂ ಸಹ ನೀವದನà³à²¨à³ ಉಳಿಸಲೠಬಯಸà³à²µà²¿à²°à²¾? %s"
-#: ../cli/src/connections.c:6557
+#: ../clients/cli/connections.c:6929
#, c-format
msgid "You may edit the following settings: %s\n"
msgstr "ನೀವೠಈ ಕೆಳಗಿನ ಸಿದà³à²§à²¤à³†à²¯à²¨à³à²¨à³ ಸಂಪಾದಿಸಬಹà³à²¦à³: %s\n"
-#: ../cli/src/connections.c:6583
+#: ../clients/cli/connections.c:6956
#, c-format
msgid ""
"The connection profile has been removed from another client. You may type "
@@ -2383,567 +2786,663 @@ msgstr ""
"ಸಂಪರà³à²•à²¦ ಪà³à²°à³Šà²«à³ˆà²²à³ ಅನà³à²¨à³ ಬೇರೊಂದೠಕà³à²²à³ˆà²‚ಟà³â€Œà²¨à²¿à²‚ದ ತೆಗೆದà³à²¹à²¾à²•à²²à²¾à²—ಿದೆ. ನೀವೠಅದನà³à²¨à³ "
"ಮರಳಿಸà³à²¥à²¾à²ªà²¿à²¸à²²à³ 'save' ಅನà³à²¨à³ ನಮೂದಿಸಬಹà³.\n"
-#: ../cli/src/connections.c:6613 ../cli/src/connections.c:6671
+#: ../clients/cli/connections.c:6985 ../clients/cli/connections.c:7040
#, c-format
msgid "Allowed values for '%s' property: %s\n"
msgstr "'%s' ಗà³à²£à²•à³à²•à²¾à²—ಿನ ಅನà³à²®à²¤à²¿ ಇರà³à²µ ಮೌಲà³à²¯à²—ಳà³: %s\n"
-#: ../cli/src/connections.c:6625 ../cli/src/connections.c:6842
+#: ../clients/cli/connections.c:6995 ../clients/cli/connections.c:7209
#, c-format
msgid "Error: no setting selected; valid are [%s]\n"
msgstr "ದೋಷ: ಯಾವà³à²¦à³† ಸಿದà³à²§à²¤à³†à²¯à²¨à³à²¨à³ ಆರಿಸಲಾಗಿಲà³à²²; ,ಮಾನà³à²¯à²µà²¾à²¦à²µà³ [%s]\n"
-#: ../cli/src/connections.c:6626
+#: ../clients/cli/connections.c:6996
#, 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
+#: ../clients/cli/connections.c:7010 ../clients/cli/connections.c:7146
+#: ../clients/cli/connections.c:7226
#, c-format
msgid "Error: invalid setting argument '%s'; valid are [%s]\n"
msgstr "ದೋಷ: ಅಮಾನà³à²¯à²µà²¾à²¦ ಸಿದà³à²§à²¤à³† ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œ '%s'; ಮಾನà³à²¯à²µà²¾à²¦à²µà³ [%s]\n"
-#: ../cli/src/connections.c:6651
+#: ../clients/cli/connections.c:7020
#, c-format
msgid "Error: missing setting for '%s' property\n"
msgstr "ದೋಷ: '%s' ಗà³à²£à²•à³à²•à²¾à²—ಿ ಸಿದà³à²§à²¤à³†à²¯à³ ಕಾಣಿಸà³à²¤à³à²¤à²¿à²²à³à²²\n"
-#: ../cli/src/connections.c:6658
+#: ../clients/cli/connections.c:7027
#, c-format
msgid "Error: invalid property: %s\n"
msgstr "ದೋಷ: ಅಮಾನà³à²¯à²µà²¾à²¦ ಗà³à²£à²²à²•à³à²·à²£ %s\n"
-#: ../cli/src/connections.c:6707
+#: ../clients/cli/connections.c:7074
#, c-format
msgid "Error: unknown setting '%s'\n"
msgstr "ದೋಷ: ಗೊತà³à²¤à²¿à²°à²¦ ಸಿದà³à²§à²¤à³† '%s'\n"
-#: ../cli/src/connections.c:6720
+#: ../clients/cli/connections.c:7087
#, c-format
msgid "You may edit the following properties: %s\n"
msgstr "ನೀವೠಈ ಕೆಳಗಿನ ಗà³à²£à²—ಳನà³à²¨à³ ಸಂಪಾದಿಸಬಹà³à²¦à³: %s\n"
-#: ../cli/src/connections.c:6764
+#: ../clients/cli/connections.c:7131
#, c-format
msgid "Error: no argument given; valid are [%s]\n"
msgstr "ದೋಷ: ಯಾವà³à²¦à³† ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œ ಅನà³à²¨à³ ಒದಗಿಸಲಾಗಿಲà³à²²; ಮಾನà³à²¯à²µà²¾à²¦à²µà³ [%s]\n"
-#: ../cli/src/connections.c:6777
+#: ../clients/cli/connections.c:7144
#, c-format
msgid "Setting '%s' is not present in the connection.\n"
msgstr "ಸಂಪರà³à²•à²¦à²²à³à²²à²¿ '%s' ಸಿದà³à²§à²¤à³†à²¯à³ ಇಲà³à²².\n"
-#: ../cli/src/connections.c:6818
+#: ../clients/cli/connections.c:7185
#, c-format
msgid "Error: %s properties, nor it is a setting name.\n"
msgstr "ದೋಷ: %s ಗà³à²£à²—ಳà³, ಇದೠಒಂದೠಸಿದà³à²§à²¤à³†à²¯ ಹೆಸರಾಗಿಲà³à²².\n"
-#: ../cli/src/connections.c:6843
+#: ../clients/cli/connections.c:7210
#, c-format
msgid "use 'goto <setting>' first, or 'describe <setting>.<property>'\n"
msgstr ""
-"ಮೊದಲೠ'goto <setting>' ಅನà³à²¨à³, ಅಥವ 'describe <setting>.<property>' ಅನà³à²¨à³ "
-"ಬಳಸಿ\n"
+"ಮೊದಲೠ'goto <setting>' ಅನà³à²¨à³, ಅಥವ 'describe <setting>.<property>' ಅನà³à²¨à³ ಬಳಸಿ\n"
-#: ../cli/src/connections.c:6884
+#: ../clients/cli/connections.c:7251
#, 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
+#: ../clients/cli/connections.c:7280
#, c-format
msgid "Error: unknown setting: '%s'\n"
msgstr "ದೋಷ: ಗೊತà³à²¤à²¿à²°à²¦ ಸಿದà³à²§à²¤à³† '%s'\n"
-#: ../cli/src/connections.c:6927
+#: ../clients/cli/connections.c:7285
+#, 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"
+
+#: ../clients/cli/connections.c:7310
+#, c-format
+#| msgid "Error: invalid property: %s\n"
+msgid "Error: invalid property: %s%s\n"
+msgstr "ದೋಷ: ತಪà³à²ªà²¾à²¦ ಗà³à²£à²²à²•à³à²·à²£ %s%s\n"
+
+#: ../clients/cli/connections.c:7312
+#| msgid "Error: invalid property: %s, neither a valid setting name.\n"
+msgid ", neither a valid setting name"
+msgstr ", ಒಂದೠಸರಿಯಾದ ಸಿದà³à²§à²¤à³†à²¯ ಹೆಸರೠಆಗಿಲà³à²²"
+
+#: ../clients/cli/connections.c:7332
#, c-format
msgid "Verify setting '%s': %s\n"
msgstr "'%s' ಸಿದà³à²§à²¤à³†à²¯à²¨à³à²¨à³ ಪರಿಶೀಲಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†: %s\n"
-#: ../cli/src/connections.c:6934
+#: ../clients/cli/connections.c:7339
#, c-format
msgid "Verify connection: %s\n"
msgstr "ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಪರಿಶೀಲಿಸಿ: %s\n"
-#: ../cli/src/connections.c:6973
+#: ../clients/cli/connections.c:7357
+#, c-format
+#| msgid "Error: invalid extra argument '%s'."
+msgid "Error: invalid argument '%s'\n"
+msgstr "ದೋಷ: ಅಮಾನà³à²¯à²µà²¾à²¦ ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œ '%s'.\n"
+
+#: ../clients/cli/connections.c:7390
#, c-format
msgid "Error: Failed to save '%s' (%s) connection: (%d) %s\n"
msgstr "ದೋಷ: '%s' (%s) ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಉಳಿಸಲೠವಿಫಲಗೊಂಡಿದೆ: (%d) %s\n"
-#: ../cli/src/connections.c:6980
+#: ../clients/cli/connections.c:7398
#, c-format
msgid "Connection '%s' (%s) successfully saved.\n"
msgstr "'%s' (%s) ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಯಶಸà³à²µà²¿à²¯à²¾à²—ಿ ಉಳಿಸಲಾಗಿದೆ.\n"
-#: ../cli/src/connections.c:7014
+#: ../clients/cli/connections.c:7399
+#, c-format
+#| msgid "Connection '%s' (%s) successfully added.\n"
+msgid "Connection '%s' (%s) successfully updated.\n"
+msgstr "'%s' (%s) ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಯಶಸà³à²µà²¿à²¯à²¾à²—ಿ ಅಪà³â€Œà²¡à³‡à²Ÿà³ ಮಾಡಲಾಗಿದೆ.\n"
+
+#: ../clients/cli/connections.c:7432
#, c-format
msgid "Error: connection verification failed: %s\n"
msgstr "ದೋಷ: ಸಂಪರà³à²•à²¦ ಪರಿಶೀಲನೆ ವಿಫಲಗೊಂಡಿದೆ: %s\n"
-#: ../cli/src/connections.c:7015
+#: ../clients/cli/connections.c:7433
msgid "(unknown error)"
msgstr "(ಗೊತà³à²¤à²¿à²°à²¦ ದೋಷ)"
-#: ../cli/src/connections.c:7036
+#: ../clients/cli/connections.c:7454
#, c-format
msgid "Error: connection is not saved. Type 'save' first.\n"
msgstr "ದೋಷ: ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಉಳಿಸಲಾಗಿಲà³à²². ಮೊದಲೠ'save' ಅನà³à²¨à³ ನಮೂದಿಸಿ.\n"
-#: ../cli/src/connections.c:7040
+#: ../clients/cli/connections.c:7458
#, c-format
msgid "Error: connection is not valid: %s\n"
msgstr "ದೋಷ: ಸಂಪರà³à²•à²µà³ ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²¾à²—ಿಲà³à²²: %s\n"
-#: ../cli/src/connections.c:7051
+#: ../clients/cli/connections.c:7469
#, c-format
msgid "Error: Cannot activate connection: %s.\n"
msgstr "ದೋಷ: ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಲಾಗಿಲà³à²²: %s.\n"
-#: ../cli/src/connections.c:7061
+#: ../clients/cli/connections.c:7479
#, c-format
msgid "Error: Failed to activate '%s' (%s) connection: (%d) %s\n"
msgstr "ದೋಷ: '%s' (%s) ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: (%d) %s\n"
-#: ../cli/src/connections.c:7067
+#: ../clients/cli/connections.c:7485
#, c-format
msgid "Monitoring connection activation (press any key to continue)\n"
msgstr ""
"ಸಂಪರà³à²•à²¦ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಕೆಯನà³à²¨à³ ಮೇಲà³à²µà²¿à²šà²¾à²°à²£à³† ನಡೆಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³† (ಮà³à²‚ದà³à²µà²°à³†à²¯à²²à³ ಯಾವà³à²¦à³† "
-"ಕೀಲಿಯನà³à²¨à³ ಒತà³à²¤à²¿)\n"
+"ಕೀಲಿಯನà³à²¨à³ "
+"ಒತà³à²¤à²¿)\n"
-#: ../cli/src/connections.c:7105
+#: ../clients/cli/connections.c:7523
#, c-format
msgid "Error: status-line: %s\n"
msgstr "ದೋಷ: ಸà³à²¥à²¿à²¤à²¿-ಸಾಲà³: %s\n"
-#: ../cli/src/connections.c:7113
+#: ../clients/cli/connections.c:7531
#, c-format
msgid "Error: save-confirmation: %s\n"
msgstr "ದೋಷ: ಉಳಿಕೆ-ಖಚಿತಪಡಿಕೆ: %s\n"
-#: ../cli/src/connections.c:7121
+#: ../clients/cli/connections.c:7539
#, c-format
msgid "Error: bad color number: '%s'; use <0-8>\n"
msgstr "ದೋಷ: ತಪà³à²ªà²¾à²¦ ಬಣà³à²£à²¦ ಸಂಖà³à²¯à³†: '%s'; use <0-8>\n"
-#: ../cli/src/connections.c:7133
+#: ../clients/cli/connections.c:7551
#, c-format
msgid "Current nmcli configuration:\n"
msgstr "ಪà³à²°à²¸à²•à³à²¤ nmcli ಸಂರಚನೆ:\n"
-#: ../cli/src/connections.c:7141
+#: ../clients/cli/connections.c:7559
#, 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
+#: ../clients/cli/connections.c:7802
#, 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
+#: ../clients/cli/connections.c:7814 ../clients/cli/connections.c:8004
+#: ../clients/cli/connections.c:8011
#, c-format
msgid "Error: Unknown connection '%s'."
msgstr "ದೋಷ: ಗೊತà³à²¤à²¿à²°à²¦ ಸಂಪರà³à²• '%s'."
-#: ../cli/src/connections.c:7417
+#: ../clients/cli/connections.c:7829
#, c-format
msgid "Warning: editing existing connection '%s'; 'type' argument is ignored\n"
msgstr ""
"ಎಚà³à²šà²°à²¿à²•à³†: ಈಗಿರà³à²µ ಸಂಪರà³à²• '%s' ಅನà³à²¨à³ ಸಂಪಾದಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†; 'type' ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟೠ"
-"ಅನà³à²¨à³ ಕಡೆಗಣಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†\n"
+"ಅನà³à²¨à³ "
+"ಕಡೆಗಣಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†\n"
-#: ../cli/src/connections.c:7420
+#: ../clients/cli/connections.c:7832
#, c-format
msgid ""
"Warning: editing existing connection '%s'; 'con-name' argument is ignored\n"
msgstr ""
-"ಎಚà³à²šà²°à²¿à²•à³†: ಈಗಿರà³à²µ ಸಂಪರà³à²• '%s' ಅನà³à²¨à³ ಸಂಪಾದಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†; 'con-name' "
-"ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟೠಅನà³à²¨à³ ಕಡೆಗಣಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†\n"
+"ಎಚà³à²šà²°à²¿à²•à³†: ಈಗಿರà³à²µ ಸಂಪರà³à²• '%s' ಅನà³à²¨à³ ಸಂಪಾದಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†; 'con-name' ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟೠ"
+"ಅನà³à²¨à³ "
+"ಕಡೆಗಣಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†\n"
-#: ../cli/src/connections.c:7434
+#: ../clients/cli/connections.c:7846
#, c-format
msgid "Valid connection types: %s\n"
msgstr "ಮಾನà³à²¯à²µà²¾à²¦ ಸಂಪರà³à²•à²¦ ಬಗೆಗಳà³: %s\n"
-#: ../cli/src/connections.c:7436
+#: ../clients/cli/connections.c:7848
#, c-format
msgid "Error: invalid connection type; %s\n"
msgstr "ದೋಷ: ಅಮಾನà³à²¯à²µà²¾à²¦ ಸಂಪರà³à²•à²¦ ಬಗೆ: %s\n"
-#: ../cli/src/connections.c:7472
+#: ../clients/cli/connections.c:7887
#, c-format
msgid "===| nmcli interactive connection editor |==="
msgstr "===| nmcli ಸಂವಾದಾತà³à²®à²• ಸಂಪರà³à²• ಸಂಪಾದಕ |==="
-#: ../cli/src/connections.c:7475
+#: ../clients/cli/connections.c:7890
#, c-format
msgid "Editing existing '%s' connection: '%s'"
msgstr "ಈಗಿರà³à²µ '%s' ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸಂಪಾದಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†: '%s'"
-#: ../cli/src/connections.c:7477
+#: ../clients/cli/connections.c:7892
#, c-format
msgid "Adding a new '%s' connection"
msgstr "ಒಂದೠಹೊಸ '%s' ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸೇರಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†"
-#: ../cli/src/connections.c:7479
+#: ../clients/cli/connections.c:7894
#, c-format
msgid "Type 'help' or '?' for available commands."
msgstr "ಲಭà³à²¯à²µà²¿à²°à³à²µ ಆದೇಶಗಳಿಗಾಗಿ 'help' ಅಥವ '?' ಅನà³à²¨à³ ಟೈಪೠಮಾಡಿ."
-#: ../cli/src/connections.c:7481
+#: ../clients/cli/connections.c:7896
#, c-format
msgid "Type 'describe [<setting>.<prop>]' for detailed property description."
msgstr "ವಿವರವಾದ ಗà³à²£à²¦ ವಿವರಣೆಗಾಗಿ 'describe [<setting>.<prop>]' ಎಂದೠಟೈಪೠಮಾಡಿ."
-#: ../cli/src/connections.c:7520
+#: ../clients/cli/connections.c:7932
#, c-format
msgid "Error: Failed to modify connection '%s': (%d) %s"
msgstr "ದೋಷ: '%s' ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಮಾರà³à²ªà²¡à²¿à²¸à²²à³ ವಿಫಲಗೊಂಡಿದೆ: (%d) %s"
-#: ../cli/src/connections.c:7526
+#: ../clients/cli/connections.c:7938
#, c-format
msgid "Connection '%s' (%s) successfully modified.\n"
msgstr "'%s' (%s) ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಯಶಸà³à²µà²¿à²¯à²¾à²—ಿ ಮಾರà³à²ªà²¡à²¿à²¸à²²à²¾à²—ಿದೆ.\n"
-#: ../cli/src/connections.c:7553
+#: ../clients/cli/connections.c:7979
#, c-format
msgid "Error: No arguments provided."
msgstr "ದೋಷ: ಯಾವà³à²¦à³† ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³à²—ಳನà³à²¨à³ ಒದಗಿಸಲಾಗಿಲà³à²²."
-#: ../cli/src/connections.c:7577
+#: ../clients/cli/connections.c:7998
#, c-format
msgid "Error: connection ID is missing."
msgstr "ದೋಷ: ಸಂಪರà³à²•à²¦ ID ಯೠಕಾಣಿಸà³à²¤à³à²¤à²¿à²²à³à²²."
-#: ../cli/src/connections.c:7582
+#: ../clients/cli/connections.c:8020 ../clients/cli/connections.c:8033
#, c-format
msgid "Error: <setting>.<property> argument is missing."
msgstr "ದೋಷ: <setting>.<property> ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟೠಕಾಣಿಸà³à²¤à³à²¤à²¿à²²à³à²²."
-#: ../cli/src/connections.c:7605
+#: ../clients/cli/connections.c:8038
+#, c-format
+#| msgid "Error: fields for '%s' options are missing."
+msgid "Error: value for '%s' is missing."
+msgstr "ದೋಷ: '%s' ಎಂಬ ಮೌಲà³à²¯à²µà³ ಕಾಣಿಸà³à²¤à³à²¤à²¿à²²à³à²²."
+
+#: ../clients/cli/connections.c:8056
#, c-format
msgid "Error: invalid <setting>.<property> '%s'."
msgstr "ದೋಷ: ಅಮಾನà³à²¯à²µà²¾à²¦ <setting>.<property> '%s'."
-#: ../cli/src/connections.c:7620
+#: ../clients/cli/connections.c:8064
#, c-format
msgid "Error: invalid or not allowed setting '%s': %s."
msgstr "ದೋಷ: ಅಮಾನà³à²¯à²µà²¾à²¦ ಅಥವ ಅನà³à²®à²¤à²¿ ಇರದೆ ಇರà³à²µ ಸಿದà³à²§à²¤à³† '%s': %s."
-#: ../cli/src/connections.c:7641
+#: ../clients/cli/connections.c:8085
#, c-format
msgid "Error: invalid property '%s': %s."
msgstr "ದೋಷ: ಅಮಾನà³à²¯à²µà²¾à²¦ ಗà³à²£à²²à²•à³à²·à²£ '%s': %s."
-#: ../cli/src/connections.c:7647
+#: ../clients/cli/connections.c:8096
#, c-format
msgid "Error: failed to modify %s.%s: %s."
msgstr "ದೋಷ: %s.%s ಅನà³à²¨à³ ಮಾರà³à²ªà²¡à²¿à²¸à³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: %s."
-#: ../cli/src/connections.c:7677
+#: ../clients/cli/connections.c:8114
+#, c-format
+#| msgid "Error: failed to remove value of '%s': %s\n"
+msgid "Error: failed to remove a value from %s.%s: %s."
+msgstr "ದೋಷ: %s.'%s' ಇಂದ ಮೌಲà³à²¯à²µà²¨à³à²¨à³ ತೆಗೆದà³à²¹à²¾à²•à³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: %s."
+
+#: ../clients/cli/connections.c:8150
#, c-format
msgid "Error: Connection deletion failed: %s"
msgstr "ದೋಷ: ಸಂಪರà³à²• ಅಳಿಸà³à²µà²¿à²•à³†à²¯à³ ವಿಫಲಗೊಂಡಿದೆ: %s"
-#: ../cli/src/connections.c:7747
+#: ../clients/cli/connections.c:8221
#, c-format
msgid "Error: unknown connection: %s\n"
msgstr "ದೋಷ: ಗೊತà³à²¤à²¿à²°à²¦ ಸಂಪರà³à²•: %s\n"
-#: ../cli/src/connections.c:7781
+#. truncate trailing ", "
+#: ../clients/cli/connections.c:8257
#, c-format
msgid "Error: cannot delete unknown connection(s): %s."
msgstr "ದೋಷ: ಗೊತà³à²¤à²¿à²°à²¦ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ (ಗಳನà³à²¨à³) ಅಳಿಸಲೠಸಾಧà³à²¯à²µà²¿à²²à³à²²: %s."
-#: ../cli/src/connections.c:7852
+#: ../clients/cli/connections.c:8328
#, 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
+#: ../clients/cli/connections.c:8441 ../clients/cli/network-manager.c:613
#, c-format
-msgid "Error: Could not get system settings."
-msgstr "ದೋಷ: ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ಸಿದà³à²§à²¤à³†à²—ಳೠಕಂಡà³à²¬à²‚ದಿಲà³à²²."
+#| msgid "Error: Could not get system settings."
+msgid "Error: Could not get system settings: %s."
+msgstr "ದೋಷ: ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ಸಿದà³à²§à²¤à³†à²—ಳನà³à²¨à³ ಪಡೆಯಲಾಗಿಲà³à²²: %s."
-#: ../cli/src/connections.c:8063
+#: ../clients/cli/connections.c:8451
#, 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"
+#: ../clients/cli/connections.c:8505
+#, c-format
+msgid "Error: '%s' is not valid 'connection' command."
+msgstr "ದೋಷ: '%s' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠ'connection' ಆದೇಶವಾಗಿಲà³à²²."
+
+#. define some prompts
+#: ../clients/cli/devices.c:36
+msgid "Interface: "
+msgstr "ಸಂಪರà³à²•à²¸à²¾à²§à²¨: "
-#: ../cli/src/devices.c:75 ../cli/src/devices.c:103
+#. 3
+#. 17
+#: ../clients/cli/devices.c:44 ../clients/cli/devices.c:73
msgid "CONNECTION"
msgstr "CONNECTION"
-#: ../cli/src/devices.c:76 ../cli/src/devices.c:104
+#. 4
+#. 18
+#: ../clients/cli/devices.c:45 ../clients/cli/devices.c:74
msgid "CON-UUID"
msgstr "CON-UUID"
-#: ../cli/src/devices.c:89
+#. 2
+#: ../clients/cli/devices.c:58
msgid "VENDOR"
msgstr "VENDOR"
-#: ../cli/src/devices.c:90
+#. 3
+#: ../clients/cli/devices.c:59
msgid "PRODUCT"
msgstr "PRODUCT"
-#: ../cli/src/devices.c:91
+#. 4
+#: ../clients/cli/devices.c:60
msgid "DRIVER"
msgstr "DRIVER"
-#: ../cli/src/devices.c:92
+#. 5
+#: ../clients/cli/devices.c:61
msgid "DRIVER-VERSION"
msgstr "DRIVER-VERSION"
-#: ../cli/src/devices.c:93
+#. 6
+#: ../clients/cli/devices.c:62
msgid "FIRMWARE-VERSION"
msgstr "FIRMWARE-VERSION"
-#: ../cli/src/devices.c:94
+#. 7
+#: ../clients/cli/devices.c:63
msgid "HWADDR"
msgstr "HWADDR"
-#: ../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
+#. 8
+#: ../clients/cli/devices.c:64 ../clients/tui/nmt-page-ethernet.c:86
+#: ../clients/tui/nmt-page-infiniband.c:96 ../clients/tui/nmt-page-vlan.c:130
+#: ../clients/tui/nmt-page-wifi.c:363
msgid "MTU"
msgstr "MTU"
-#: ../cli/src/devices.c:97
+#. 10
+#: ../clients/cli/devices.c:66
msgid "REASON"
msgstr "REASON"
-#: ../cli/src/devices.c:98
+#. 11
+#: ../clients/cli/devices.c:67
msgid "UDI"
msgstr "UDI"
-#: ../cli/src/devices.c:99
+#. 12
+#: ../clients/cli/devices.c:68
msgid "IP-IFACE"
msgstr "IP-IFACE"
-#: ../cli/src/devices.c:100
+#. 13
+#. 2
+#: ../clients/cli/devices.c:69 ../clients/cli/devices.c:97
+msgid "IS-SOFTWARE"
+msgstr "IS-SOFTWARE"
+
+#. 14
+#: ../clients/cli/devices.c:70
msgid "NM-MANAGED"
msgstr "NM-MANAGED"
-#: ../cli/src/devices.c:102
+#. 16
+#: ../clients/cli/devices.c:72
msgid "FIRMWARE-MISSING"
msgstr "FIRMWARE-MISSING"
-#: ../cli/src/devices.c:115
+#. 0
+#: ../clients/cli/devices.c:85
msgid "AVAILABLE-CONNECTION-PATHS"
msgstr "AVAILABLE-CONNECTION-PATHS"
-#: ../cli/src/devices.c:116
+#. 1
+#: ../clients/cli/devices.c:86
msgid "AVAILABLE-CONNECTIONS"
msgstr "AVAILABLE-CONNECTIONS"
-#: ../cli/src/devices.c:125
+#. 0
+#: ../clients/cli/devices.c:95
msgid "CARRIER-DETECT"
msgstr "CARRIER-DETECT"
-#: ../cli/src/devices.c:126
+#. 1
+#: ../clients/cli/devices.c:96
msgid "SPEED"
msgstr "SPEED"
-#: ../cli/src/devices.c:135
+#. 0
+#: ../clients/cli/devices.c:106
msgid "CARRIER"
msgstr "CARRIER"
-#: ../cli/src/devices.c:144 ../cli/src/devices.c:563
+#. 0
+#: ../clients/cli/devices.c:115 ../clients/cli/devices.c:550
msgid "WEP"
msgstr "WEP"
-#: ../cli/src/devices.c:145
+#. 1
+#: ../clients/cli/devices.c:116
msgid "WPA"
msgstr "WPA"
-#: ../cli/src/devices.c:146 ../cli/src/devices.c:571
+#. 2
+#: ../clients/cli/devices.c:117 ../clients/cli/devices.c:558
msgid "WPA2"
msgstr "WPA2"
-#: ../cli/src/devices.c:147
+#. 3
+#: ../clients/cli/devices.c:118
msgid "TKIP"
msgstr "TKIP"
-#: ../cli/src/devices.c:148
+#. 4
+#: ../clients/cli/devices.c:119
msgid "CCMP"
msgstr "CCMP"
-#: ../cli/src/devices.c:149 ../cli/src/devices.c:239
+#. 5
+#. 2
+#: ../clients/cli/devices.c:120 ../clients/cli/devices.c:210
msgid "AP"
msgstr "AP"
-#: ../cli/src/devices.c:150
+#. 6
+#: ../clients/cli/devices.c:121
msgid "ADHOC"
msgstr "ADHOC"
-#: ../cli/src/devices.c:159
+#. 0
+#: ../clients/cli/devices.c:130
msgid "CTR-FREQ"
msgstr "CTR-FREQ"
-#: ../cli/src/devices.c:160
+#. 1
+#: ../clients/cli/devices.c:131
msgid "RSSI"
msgstr "RSSI"
-#: ../cli/src/devices.c:161
+#. 2
+#: ../clients/cli/devices.c:132
msgid "CINR"
msgstr "CINR"
-#: ../cli/src/devices.c:162
+#. 3
+#: ../clients/cli/devices.c:133
msgid "TX-POW"
msgstr "TX-POW"
-#: ../cli/src/devices.c:163
+#. 4
+#: ../clients/cli/devices.c:134
msgid "BSID"
msgstr "BSID"
-#: ../cli/src/devices.c:172 ../tui/nmt-page-wifi.c:221
+#. 0
+#: ../clients/cli/devices.c:143 ../clients/tui/nmt-page-wifi.c:220
msgid "SSID"
msgstr "SSID"
-#: ../cli/src/devices.c:173
+#. 1
+#: ../clients/cli/devices.c:144
msgid "SSID-HEX"
msgstr "SSID-HEX"
-#: ../cli/src/devices.c:174 ../tui/nmt-page-wifi.c:352
+#. 2
+#: ../clients/cli/devices.c:145 ../clients/tui/nmt-page-wifi.c:351
msgid "BSSID"
msgstr "BSSID"
-#: ../cli/src/devices.c:175
+#. 3
+#: ../clients/cli/devices.c:146
msgid "MODE"
msgstr "MODE"
-#: ../cli/src/devices.c:176
+#. 4
+#: ../clients/cli/devices.c:147
msgid "CHAN"
msgstr "CHAN"
-#: ../cli/src/devices.c:177
+#. 5
+#: ../clients/cli/devices.c:148
msgid "FREQ"
msgstr "FREQ"
-#: ../cli/src/devices.c:178
+#. 6
+#: ../clients/cli/devices.c:149
msgid "RATE"
msgstr "RATE"
-#: ../cli/src/devices.c:179 ../cli/src/devices.c:199
+#. 7
+#. 1
+#: ../clients/cli/devices.c:150 ../clients/cli/devices.c:170
msgid "SIGNAL"
msgstr "SIGNAL"
-#: ../cli/src/devices.c:180
+#. 8
+#: ../clients/cli/devices.c:151
msgid "BARS"
msgstr "BARS"
-#: ../cli/src/devices.c:181
+#. 9
+#: ../clients/cli/devices.c:152
msgid "SECURITY"
msgstr "SECURITY"
-#: ../cli/src/devices.c:182
+#. 10
+#: ../clients/cli/devices.c:153
msgid "WPA-FLAGS"
msgstr "WPA-FLAGS"
-#: ../cli/src/devices.c:183
+#. 11
+#: ../clients/cli/devices.c:154
msgid "RSN-FLAGS"
msgstr "RSN-FLAGS"
-#: ../cli/src/devices.c:185 ../cli/src/devices.c:202
-msgid "ACTIVE"
-msgstr "ACTIVE"
-
-#: ../cli/src/devices.c:186
+#. 14
+#: ../clients/cli/devices.c:157
msgid "*"
msgstr "*"
-#: ../cli/src/devices.c:198 ../cli/src/devices.c:242
+#. 0
+#. 5
+#: ../clients/cli/devices.c:169 ../clients/cli/devices.c:213
msgid "NSP"
msgstr "NSP"
-#: ../cli/src/devices.c:213
+#. 0
+#: ../clients/cli/devices.c:184
msgid "SLAVES"
msgstr "SLAVES"
-#: ../cli/src/devices.c:222
+#. 0
+#: ../clients/cli/devices.c:193
msgid "ID"
msgstr "ID"
-#: ../cli/src/devices.c:237
+#. 0
+#: ../clients/cli/devices.c:208
msgid "CAPABILITIES"
msgstr "CAPABILITIES"
-#: ../cli/src/devices.c:238
+#. 1
+#: ../clients/cli/devices.c:209
msgid "WIFI-PROPERTIES"
msgstr "WIFI-PROPERTIES"
-#: ../cli/src/devices.c:240
+#. 3
+#: ../clients/cli/devices.c:211
msgid "WIRED-PROPERTIES"
msgstr "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:241
+#. 4
+#: ../clients/cli/devices.c:212
msgid "WIMAX-PROPERTIES"
msgstr "WIMAX-PROPERTIES"
-#: ../cli/src/devices.c:247 ../tui/nmt-page-bond.c:73
+#. 10
+#: ../clients/cli/devices.c:218 ../clients/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
+#. 12
+#: ../clients/cli/devices.c:220
msgid "CONNECTIONS"
msgstr "CONNECTIONS"
-#: ../cli/src/devices.c:274
-#, c-format
+#: ../clients/cli/devices.c:245
+#, c-format
+#| msgid ""
+#| "Usage: nmcli device { COMMAND | help }\n"
+#| "\n"
+#| "COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
+#| "\n"
+#| "COMMAND := { status | show | connect | disconnect | wifi }\n"
+#| "\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"
+#| " wimax [list [ifname <ifname>] [nsp <name>]]\n"
+#| "\n"
msgid ""
"Usage: nmcli device { COMMAND | help }\n"
"\n"
-"COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | delete | wifi | wimax }\n"
"\n"
-"COMMAND := { status | show | connect | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | delete | wifi }\n"
"\n"
" status\n"
"\n"
@@ -2953,6 +3452,8 @@ msgid ""
"\n"
" disconnect <ifname>\n"
"\n"
+" delete <ifname>\n"
+"\n"
" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
"\n"
" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
@@ -2966,9 +3467,9 @@ msgid ""
msgstr ""
"ಬಳಕೆ: nmcli device { COMMAND | help }\n"
"\n"
-"COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | delete | wifi | wimax }\n"
"\n"
-"COMMAND := { status | show | connect | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | delete | wifi }\n"
"\n"
" status\n"
"\n"
@@ -2978,6 +3479,8 @@ msgstr ""
"\n"
" disconnect <ifname>\n"
"\n"
+" delete <ifname>\n"
+"\n"
" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
"\n"
" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
@@ -2989,7 +3492,7 @@ msgstr ""
" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
-#: ../cli/src/devices.c:298
+#: ../clients/cli/devices.c:270
#, c-format
msgid ""
"Usage: nmcli device status { help }\n"
@@ -3000,8 +3503,10 @@ msgid ""
" 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"
+"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"
@@ -3018,7 +3523,7 @@ msgstr ""
"'nmcli device status' ಅನà³à²¨à³ ಚಲಾಯಿಸà³à²¤à³à²¤à²¦à³† ಎಂದಾಗಿರà³à²¤à³à²¤à²¦à³†.\n"
"\n"
-#: ../cli/src/devices.c:314
+#: ../clients/cli/devices.c:286
#, c-format
msgid ""
"Usage: nmcli device show { ARGUMENTS | help }\n"
@@ -3038,7 +3543,7 @@ msgstr ""
"ತೋರಿಸà³à²¤à³à²¤à²¦à³†.\n"
"\n"
-#: ../cli/src/devices.c:326
+#: ../clients/cli/devices.c:298
#, c-format
msgid ""
"Usage: nmcli device connect { ARGUMENTS | help }\n"
@@ -3046,8 +3551,8 @@ msgid ""
"ARGUMENTS := <ifname>\n"
"\n"
"Connect the device.\n"
-"NetworkManager will try to find a suitable connection that will be activated."
-"\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 ""
@@ -3062,7 +3567,7 @@ msgstr ""
"ಪರಿಗಣಿಸà³à²¤à³à²¤à²¦à³†.\n"
"\n"
-#: ../cli/src/devices.c:339
+#: ../clients/cli/devices.c:311
#, c-format
msgid ""
"Usage: nmcli device disconnect { ARGUMENTS | help }\n"
@@ -3084,7 +3589,39 @@ msgstr ""
"ಸಂಪರà³à²•à²—ಳನà³à²¨à³ ಸà³à²µà²¯à²‚-ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸà³à²µà³à²¦à²¨à³à²¨à³ ತಡೆಯà³à²¤à³à²¤à²¦à³†.\n"
"\n"
-#: ../cli/src/devices.c:352
+#: ../clients/cli/devices.c:324
+#, 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"
+msgid ""
+"Usage: nmcli device delete { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Deletes the software device.\n"
+"The command removes the interface. It only works for software devices\n"
+"(like bonds, bridges, etc.). Hardware devices cannot be deleted by the\n"
+"command.\n"
+"\n"
+msgstr ""
+"ಬಳಕೆ: nmcli device show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<ifname>]\n"
+"\n"
+"ತಂತà³à²°à²¾à²‚ಶ ಸಾಧನವನà³à²¨à³ ಅಳಿಸà³à²¤à³à²¤à²¦à³†.\n"
+"ಆದೇಶವೠಸಂಪರà³à²•à²¸à²¾à²§à²¨à²µà²¨à³à²¨à³ ತೆಗೆದà³à²¹à²¾à²•à³à²¤à³à²¤à²¦à³†. ಇದೠಕೇವಲ ತಂತà³à²°à²¾à²‚ಶ ಸಾಧನಗಳಲà³à²²à²¿ "
+"(ಬಾಂಡà³â€Œà²—ಳà³, ಬà³à²°à²¿à²œà³â€Œà²—ಳà³\n"
+"ಇತà³à²¯à²¾à²¦à²¿à²¯à²‚ತಹ) ಮಾತà³à²° ಕೆಲಸ ಮಾಡà³à²¤à³à²¤à²¦à³†. ಈ ಆದೇಶದಿಂದ ಯಂತà³à²°à²¾à²‚ಶ ಸಾಧನಗಳನà³à²¨à³ ಅಳಿಸಲೠ\n"
+"ಸಾಧà³à²¯à²µà²¿à²°à³à²µà³à²¦à²¿à²²à³à²²\n"
+"\n"
+
+#: ../clients/cli/devices.c:338
#, c-format
msgid ""
"Usage: nmcli device wifi { ARGUMENTS | help }\n"
@@ -3096,8 +3633,8 @@ msgid ""
"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"
+"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"
@@ -3111,8 +3648,10 @@ msgid ""
"\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"
+"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"
@@ -3128,24 +3667,26 @@ msgstr ""
"ಅಥವ ಒಂದೠನಿಶà³à²šà²¿à²¤ BSSID ಗಾಗಿ AP ಗಳನà³à²¨à³ ಪಟà³à²Ÿà²¿ ಮಾಡಲೠ'ifname' ಮತà³à²¤à³ 'bssid' "
"ಆಯà³à²•à³†à²—ಳನà³à²¨à³ ಬಳಸಬಹà³à²¦à³.\n"
"\n"
-"ARGUMENTS := connect <(B)SSID> [password <password>] [wep-key-type "
-"key|phrase] [ifname <ifname>]\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"
+"ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ರಚಿಸà³à²¤à³à²¤à²¦à³† ಮತà³à²¤à³ ಅದನà³à²¨à³ ಒಂದೠಸಾಧನದಲà³à²²à²¿ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸà³à²¤à³à²¤à²¦à³†. ಇದೠGUI "
+"ಕà³à²²à³ˆà²‚ಟà³â€Œà²¨à²²à³à²²à²¿ SSID ಯ\n"
"ಮೇಲೆ ಕà³à²²à²¿à²•à³ ಮಾಡಿದಾಗ ಉಂಟಾಗà³à²µ ಬದಲಾವಣೆಗಳ ಒಂದೠಆದೇಶ-ಸಾಲಿನ ಭಾಗವಾಗಿರà³à²¤à³à²¤à²¦à³†. ಆದೇಶವೠ"
"\n"
"ಯಾವಾಗಲೂ ಒಂದೠಹೊಸ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ರಚಿಸà³à²¤à³à²¤à²¦à³† ಮತà³à²¤à³ ಇದೠಮà³à²–à³à²¯à²µà²¾à²—ಿ ವೈ-ಫೈ "
"ಜಾಲಬಂಧಗಳೊಂದಿಗೆ\n"
"ಸಂಪರà³à²•à²¸à²¾à²§à²¿à²¸à³à²µà²¾à²— ಸಹಾಯಕವಾಗà³à²¤à³à²¤à²¦à³†. ಜಾಲಬಂಧಕà³à²•à²¾à²—ಿ ಒಂದೠಸಂಪರà³à²•à²µà³ ಈಗಾಗಲೆ "
"ಅಸà³à²¤à²¿à²¤à³à²µà²¦à²²à³à²²à²¿à²¦à³à²¦à²°à³†, ಈ\n"
-"ಕೆಳಗಿನಂತೆ ಈಗಾಗಲೆ ಇರà³à²µ ಒಂದೠಪà³à²°à³Šà²«à³ˆà²²à³ ಅನà³à²¨à³ ಮೇಲಕà³à²•à³† ತರà³à²µà³à²¦à³ ಉತà³à²¤à²®: nmcli con "
-"up id <name>.\n"
+"ಕೆಳಗಿನಂತೆ ಈಗಾಗಲೆ ಇರà³à²µ ಒಂದೠಪà³à²°à³Šà²«à³ˆà²²à³ ಅನà³à²¨à³ ಮೇಲಕà³à²•à³† ತರà³à²µà³à²¦à³ ಉತà³à²¤à²®: nmcli con up "
+"id "
+"<name>.\n"
"ಪà³à²°à²¸à²•à³à²¤ ಕೇವಲ ಮà³à²•à³à²¤, WEP ಮತà³à²¤à³ WPA-PSK ಜಾಲಬಂಧಗಳೠಮಾತà³à²° ಬೆಂಬಲಿತವಾಗಿವೆ "
-"ಎನà³à²¨à³à²µà³à²¦à²¨à³à²¨à³ ನೆನಪಿಡಿ. \n"
+"ಎನà³à²¨à³à²µà³à²¦à²¨à³à²¨à³ "
+"ನೆನಪಿಡಿ. \n"
"IP ಸಂರಚನೆಯನà³à²¨à³‚ ಸಹ DHCP ಮà³à²–ಾಂತರ ಪಡೆಯಲಾಗà³à²¤à³à²¤à²¦à³† ಎಂದೠಊಹಿಸಲಾಗà³à²¤à³à²¤à²¦à³†.\n"
"\n"
"ARGUMENTS := rescan [[ifname] <ifname>]\n"
@@ -3158,7 +3699,7 @@ msgstr ""
"ತೋರಿಸà³à²µà³à²¦à²¿à²²à³à²², ಅದಕà³à²•à²¾à²—ಿ 'nmcli device wifi list' ಅನà³à²¨à³ ಬಳಸಿ.\n"
"\n"
-#: ../cli/src/devices.c:386
+#: ../clients/cli/devices.c:372
#, c-format
msgid ""
"Usage: nmcli device wimax { ARGUMENTS | help }\n"
@@ -3177,347 +3718,382 @@ msgstr ""
"\n"
"ARGUMENTS := [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
-"ಲಭà³à²¯à²µà²¿à²°à³à²µ WiMAX NSPಗಳ ಪಟà³à²Ÿà²¿à²¯à²¨à³à²¨à³ ತೋರಿಸà³. ಒಂದೠನಿರà³à²¦à²¿à²·à³à²Ÿ ಸಂಪರà³à²•à²¸à²¾à²§à²¨à²•à³à²•à²¾à²—ಿ, "
-"ಅಥವ ಒಂದೠನಿಶà³à²šà²¿à²¤\n"
+"ಲಭà³à²¯à²µà²¿à²°à³à²µ WiMAX NSPಗಳ ಪಟà³à²Ÿà²¿à²¯à²¨à³à²¨à³ ತೋರಿಸà³. ಒಂದೠನಿರà³à²¦à²¿à²·à³à²Ÿ ಸಂಪರà³à²•à²¸à²¾à²§à²¨à²•à³à²•à²¾à²—ಿ, ಅಥವ "
+"ಒಂದೠ"
+"ನಿಶà³à²šà²¿à²¤\n"
" NSP ಗಾಗಿನ ಜಾಲಬಂಧಗಳ ಪಟà³à²Ÿà²¿à²¯à²¨à³à²¨à³ ನೋಡಲೠ'ifname' ಮತà³à²¤à³ 'nsp' ಆಯà³à²•à³†à²—ಳನà³à²¨à³ "
"ಬಳಸಬಹà³à²¦à³.\n"
"\n"
-#: ../cli/src/devices.c:480
+#: ../clients/cli/devices.c:461
msgid "(none)"
msgstr "(ಯಾವà³à²¦à³‚ ಇಲà³à²²)"
-#: ../cli/src/devices.c:547
+#: ../clients/cli/devices.c:534
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:548
+#: ../clients/cli/devices.c:535
#, c-format
msgid "%u Mbit/s"
msgstr "%u Mbit/s"
-#: ../cli/src/devices.c:567
+#: ../clients/cli/devices.c:554
msgid "WPA1"
msgstr "WPA1"
-#: ../cli/src/devices.c:576
+#: ../clients/cli/devices.c:563
msgid "802.1X"
msgstr "802.1X"
-#: ../cli/src/devices.c:592
+#: ../clients/cli/devices.c:579
msgid "Ad-Hoc"
msgstr "ತಾತà³à²•à²¾à²²à²¿à²•"
-#: ../cli/src/devices.c:593
+#: ../clients/cli/devices.c:580
msgid "Infra"
msgstr "ಇನà³â€Œà²«à³à²°à²¾"
-#: ../cli/src/devices.c:625
+#: ../clients/cli/devices.c:612
msgid "Home"
msgstr "ನೆಲೆ"
-#: ../cli/src/devices.c:628
+#: ../clients/cli/devices.c:615
msgid "Partner"
msgstr "ಪಾಲà³à²¦à²¾à²°"
-#: ../cli/src/devices.c:631
+#: ../clients/cli/devices.c:618
msgid "Roaming"
msgstr "ರೋಮಿಂಗà³"
-#: ../cli/src/devices.c:725
+#: ../clients/cli/devices.c:712
msgid "Device details"
msgstr "ಸಾಧನದ ವಿವರಗಳà³"
-#: ../cli/src/devices.c:737
+#: ../clients/cli/devices.c:724
#, 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
+#: ../clients/cli/devices.c:775 ../clients/cli/devices.c:778
+#: ../clients/cli/devices.c:1326 ../clients/cli/devices.c:1468
+#: ../clients/cli/devices.c:1580
msgid "(unknown)"
msgstr "(ಗೊತà³à²¤à²¿à²°à²¦)"
-#: ../cli/src/devices.c:827
+#: ../clients/cli/devices.c:816
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
-#: ../cli/src/devices.c:913
+#: ../clients/cli/devices.c:902
msgid "on"
msgstr "ಆನà³â€Œ"
-#: ../cli/src/devices.c:913
+#: ../clients/cli/devices.c:902
msgid "off"
msgstr "ಆಫà³"
-#: ../cli/src/devices.c:1188
+#: ../clients/cli/devices.c:1177
#, c-format
msgid "Error: 'device status': %s"
msgstr "ದೋಷ: 'device status': %s"
-#: ../cli/src/devices.c:1206
+#. Add headers
+#: ../clients/cli/devices.c:1195
msgid "Status of devices"
msgstr "ಸಾಧನಗಳ ಸà³à²¥à²¿à²¤à²¿"
-#: ../cli/src/devices.c:1237
+#: ../clients/cli/devices.c:1226
#, c-format
msgid "Error: invalid extra argument '%s'."
msgstr "ದೋಷ: ಅಮಾನà³à²¯à²µà²¾à²¦ ಹೆಚà³à²šà³à²µà²°à²¿ ನಿಯತಾಂಕ '%s'."
-#: ../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
+#: ../clients/cli/devices.c:1254 ../clients/cli/devices.c:1416
+#: ../clients/cli/devices.c:1550 ../clients/cli/devices.c:1644
+#: ../clients/cli/devices.c:1788 ../clients/cli/devices.c:2546
#, c-format
msgid "Error: Device '%s' not found."
msgstr "ದೋಷ: '%s' ಎಂಬ ಸಾಧನವೠಕಂಡೠಬಂದಿಲà³à²²."
-#: ../cli/src/devices.c:1319
+#: ../clients/cli/devices.c:1309
#, c-format
-msgid "Success: Device '%s' successfully activated."
-msgstr "ಯಶಸà³à²¸à³: '%s' ಎಂಬ ಸಾಧನವನà³à²¨à³ ಯಶಸà³à²µà²¿à²¯à²¾à²—ಿ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಲಾಗಿದೆ."
+#| msgid "Success: Device '%s' successfully activated."
+msgid "Device '%s' successfully activated with '%s'.\n"
+msgstr "'%s' ಎಂಬ ಸಾಧನವನà³à²¨à³ ಯಶಸà³à²µà²¿à²¯à²¾à²—ಿ '%s' ನೊಂದಿಗೆ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಲಾಗಿದೆ.\n"
-#: ../cli/src/devices.c:1333
+#: ../clients/cli/devices.c:1325
#, c-format
msgid "Error: Device activation failed: %s"
msgstr "ದೋಷ: ಸಾಧನದ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಕೆಯೠವಿಫಲಗೊಂಡಿದೆ: %s"
-#: ../cli/src/devices.c:1350
+#: ../clients/cli/devices.c:1333
+#, c-format
+#| msgid "Error: Device activation failed: %s"
+msgid "Error: Device activation failed: device was disconnected"
+msgstr "ದೋಷ: ಸಾಧನದ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಕೆಯೠವಿಫಲಗೊಂಡಿದೆ: ಸಾಧನದ ಸಂಪರà³à²• ಕಡಿದಿದೆ"
+
+#: ../clients/cli/devices.c:1346
#, 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
+#: ../clients/cli/devices.c:1375 ../clients/cli/devices.c:1384
+#: ../clients/cli/devices.c:1509 ../clients/cli/devices.c:1518
+#: ../clients/cli/devices.c:1604 ../clients/cli/devices.c:1612
#, c-format
msgid "Error: No interface specified."
msgstr "ದೋಷ: ಯಾವà³à²¦à³† ಸಂಪರà³à²•à²¸à²¾à²§à²¨à²µà²¨à³à²¨à³ ಸೂಚಿಸಲಾಗಿಲà³à²²."
-#: ../cli/src/devices.c:1396 ../cli/src/devices.c:1531
+#: ../clients/cli/devices.c:1390 ../clients/cli/devices.c:1524
+#: ../clients/cli/devices.c:1618
#, c-format
msgid "Error: extra argument not allowed: '%s'."
msgstr "ದೋಷ: ಹೆಚà³à²šà³à²µà²°à²¿ ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œà²—ೆ ಅನà³à²®à²¤à²¿ ಇಲà³à²²: '%s'."
-#: ../cli/src/devices.c:1459
+#: ../clients/cli/devices.c:1453
#, c-format
msgid "Success: Device '%s' successfully disconnected."
msgstr "ಯಶಸà³à²¸à³: '%s' ಎಂಬ ಸಾಧನದಿಂದ ಯಶಸà³à²µà²¿à²¯à²¾à²—ಿ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಕಡಿದà³à²¹à²¾à²•à²²à²¾à²—ಿದೆ."
-#: ../cli/src/devices.c:1471
+#: ../clients/cli/devices.c:1465
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "ದೋಷ: '%s' (%s) ಎಂಬ ಸಾಧನದ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಕಡಿದೠಹಾಕà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: %s"
-#: ../cli/src/devices.c:1485
+#: ../clients/cli/devices.c:1479
#, c-format
msgid "Device '%s' has been disconnected.\n"
msgstr "'%s' ಎಂಬ ಸಾಧನದಿಂದ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಕಡಿದà³à²¹à²¾à²•à²²à²¾à²—ಿದೆ.\n"
-#: ../cli/src/devices.c:1628
+#: ../clients/cli/devices.c:1577
+#, c-format
+#| msgid "Error: Device '%s' (%s) disconnecting failed: %s"
+msgid "Error: Device '%s' (%s) deletion failed: %s"
+msgstr "ದೋಷ: '%s' (%s) ಎಂಬ ಸಾಧನವನà³à²¨à³ ಅಳಿಸà³à²µà²¿à²•à³† ವಿಫಲಗೊಂಡಿದೆ: %s"
+
+#: ../clients/cli/devices.c:1650
+#, c-format
+#| msgid "Error: setting '%s' is mandatory and cannot be removed.\n"
+msgid "Error: Device '%s' is a hardware device. It can't be deleted."
+msgstr ""
+"ದೋಷ: '%s' ಸಾಧನವೠಒಂದೠಯಂತà³à²°à²¾à²‚ಶ ಸಾಧನವಾಗಿರà³à²¤à³à²¤à²¦à³†. ಅದನà³à²¨à³ ತೆಗೆದà³à²¹à²¾à²•à²²à³ "
+"ಸಾಧà³à²¯à²µà²¿à²°à³à²µà³à²¦à²¿à²²à³à²²."
+
+#: ../clients/cli/devices.c:1720
msgid "Wi-Fi scan list"
msgstr "Wi-Fi ಸà³à²•à³à²¯à²¾à²¨à³ ಪಟà³à²Ÿà²¿"
-#: ../cli/src/devices.c:1666
+#: ../clients/cli/devices.c:1758
#, c-format
msgid "Error: 'device wifi': %s"
msgstr "ದೋಷ: 'device wifi': %s"
-#: ../cli/src/devices.c:1719 ../cli/src/devices.c:1788
+#: ../clients/cli/devices.c:1811 ../clients/cli/devices.c:1886
#, c-format
msgid "Error: Access point with bssid '%s' not found."
msgstr "ದೋಷ: '%s' ಎಂಬ bssid ಯ ನಿಲà³à²•à²£à²¾ ಬಿಂದà³à²µà³ ಕಾಣಿಸà³à²¤à³à²¤à²¿à²²à³à²²."
-#: ../cli/src/devices.c:1743 ../cli/src/devices.c:2131
-#: ../cli/src/devices.c:2293
+#: ../clients/cli/devices.c:1835 ../clients/cli/devices.c:2241
+#: ../clients/cli/devices.c:2403
#, c-format
msgid "Error: Device '%s' is not a Wi-Fi device."
msgstr "ದೋಷ: '%s' ಎಂಬà³à²¦à³ ಒಂದೠWi-Fi ಸಾಧನವಾಗಿಲà³à²²."
-#: ../cli/src/devices.c:1825 ../cli/src/devices.c:1872
+#: ../clients/cli/devices.c:1929 ../clients/cli/devices.c:1977
#, c-format
msgid "Connection with UUID '%s' created and activated on device '%s'\n"
msgstr ""
"ರಚಿಸಲಾದ UUID '%s' ಯೊಂದಿಗೆ ಸಂಪರà³à²•à²¿à²¤à²—ೊಂಡಿದೆ ಮತà³à²¤à³ '%s' ಸಾಧನದಲà³à²²à²¿ "
"ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಲಾಗಿದೆ\n"
-#: ../cli/src/devices.c:1829
+#: ../clients/cli/devices.c:1934
#, c-format
msgid "Error: Connection activation failed: (%d) %s."
msgstr "ದೋಷ: ಸಂಪರà³à²• ಸಕà³à²°à²¿à²¯à²—ೊಳಿಕೆಯೠವಿಫಲಗೊಂಡಿದೆ: (%d) %s."
-#: ../cli/src/devices.c:1854
+#: ../clients/cli/devices.c:1959
#, c-format
msgid "Error: Failed to add/activate new connection: (%d) %s"
msgstr "ದೋಷ: ಹೊಸ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸೇರಿಸಲà³/ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಲೠವಿಫಲಗೊಂಡಿದೆ: (%d) %s"
-#: ../cli/src/devices.c:1862
+#: ../clients/cli/devices.c:1967
#, c-format
msgid "Error: Failed to add/activate new connection: Unknown error"
msgstr "ದೋಷ: ಹೊಸ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸೇರಿಸಲà³/ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಲೠವಿಫಲಗೊಂಡಿದೆ: ಗೊತà³à²¤à²¿à²°à²¦ ದೋಷ"
-#: ../cli/src/devices.c:2013
+#: ../clients/cli/devices.c:2123
msgid "SSID or BSSID: "
msgstr "SSID ಅಥವ BSSID: "
-#: ../cli/src/devices.c:2018
+#: ../clients/cli/devices.c:2128
#, c-format
msgid "Error: SSID or BSSID are missing."
msgstr "ದೋಷ: SSID ಅಥವ BSSID ಕಾಣಿಸà³à²¤à³à²¤à²¿à²²à³à²²."
-#: ../cli/src/devices.c:2042
+#: ../clients/cli/devices.c:2152
#, c-format
msgid "Error: bssid argument value '%s' is not a valid BSSID."
msgstr "ದೋಷ: bssid ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟೠಮೌಲà³à²¯ '%s' ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ BSSID ಆಗಿಲà³à²²."
-#: ../cli/src/devices.c:2066
+#: ../clients/cli/devices.c:2176
#, 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:2086
+#: ../clients/cli/devices.c:2196
#, c-format
msgid "Error: %s: %s."
msgstr "ದೋಷ: %s: %s."
-#: ../cli/src/devices.c:2101
+#: ../clients/cli/devices.c:2211
#, 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:2107
+#: ../clients/cli/devices.c:2217
#, c-format
msgid "Error: Parameter '%s' is neither SSID nor BSSID."
msgstr "ದೋಷ: '%s' ನಿಯತಾಂಕವೠSSID ಅಥವ BSSID ಆಗಿಲà³à²²."
-#: ../cli/src/devices.c:2133 ../cli/src/devices.c:2295
+#: ../clients/cli/devices.c:2243 ../clients/cli/devices.c:2405
#, c-format
msgid "Error: No Wi-Fi device found."
msgstr "ದೋಷ: ಯಾವà³à²¦à³† Wi-Fi ಸಾಧನವೠಕಂಡೠಬಂದಿಲà³à²²."
-#: ../cli/src/devices.c:2151
+#: ../clients/cli/devices.c:2261
#, c-format
msgid "Error: No network with SSID '%s' found."
msgstr "ದೋಷ: SSID '%s' ನೊಂದಿಗೆ ಯಾವà³à²¦à³† ಜಾಲಬಂಧ ಕಾಣಿಸà³à²¤à³à²¤à²¿à²²à³à²²."
-#: ../cli/src/devices.c:2153
+#: ../clients/cli/devices.c:2263
#, c-format
msgid "Error: No access point with BSSID '%s' found."
msgstr "ದೋಷ: '%s' ಎಂಬ BSSID ಯ ನಿಲà³à²•à²£à²¾ ಬಿಂದà³à²µà³ ಕಾಣಿಸà³à²¤à³à²¤à²¿à²²à³à²²."
-#: ../cli/src/devices.c:2192
+#: ../clients/cli/devices.c:2302
msgid "Password: "
msgstr "ಗà³à²ªà³à²¤à²ªà²¦: "
-#: ../cli/src/devices.c:2321
+#: ../clients/cli/devices.c:2431
#, c-format
msgid "Error: 'device wifi' command '%s' is not valid."
msgstr "ದೋಷ: 'device wifi' ಆದೇಶ '%s' ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²."
-#: ../cli/src/devices.c:2368
+#: ../clients/cli/devices.c:2478
msgid "WiMAX NSP list"
msgstr "WiMAX NSP ಪಟà³à²Ÿà²¿"
-#: ../cli/src/devices.c:2405
+#: ../clients/cli/devices.c:2515
#, c-format
msgid "Error: 'device wimax': %s"
msgstr "ದೋಷ: 'device wimax': %s"
-#: ../cli/src/devices.c:2459
+#: ../clients/cli/devices.c:2569
#, c-format
msgid "Error: NSP with name '%s' not found."
msgstr "ದೋಷ: '%s' ಎಂಬ ಹೆಸರಿನ NSP ಕಂಡೠಬಂದಿಲà³à²²."
-#: ../cli/src/devices.c:2472
+#: ../clients/cli/devices.c:2582
#, c-format
msgid "Error: Device '%s' is not a WiMAX device."
msgstr "ದೋಷ: '%s' ಎಂಬà³à²¦à³ ಒಂದೠWiMAX ಸಾಧನವಿಲà³à²²."
-#: ../cli/src/devices.c:2510
+#: ../clients/cli/devices.c:2626
#, c-format
msgid "Error: Access point with nsp '%s' not found."
msgstr "ದೋಷ: nsp '%s' ಎಂಬà³à²¦à²°à³Šà²‚ದಿಗಿನ ನಿಲà³à²•à²£à²¾ ಬಿಂದà³à²µà³ ಕಾಣಿಸà³à²¤à³à²¤à²¿à²²à³à²²."
-#: ../cli/src/devices.c:2542
+#: ../clients/cli/devices.c:2663
#, c-format
msgid "Error: 'device wimax' command '%s' is not valid."
msgstr "ದೋಷ: 'device wimax' ಆದೇಶ '%s' ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²."
-#: ../cli/src/devices.c:2621
+#: ../clients/cli/devices.c:2820
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "ದೋಷ: '%s' ಎಂಬ 'dev' ಆದೇಶಯೠಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²."
-#: ../cli/src/network-manager.c:37
+#: ../clients/cli/network-manager.c:35
msgid "RUNNING"
msgstr "RUNNING"
-#: ../cli/src/network-manager.c:38
+#. 0
+#: ../clients/cli/network-manager.c:36
msgid "VERSION"
msgstr "VERSION"
-#: ../cli/src/network-manager.c:40
+#. 2
+#: ../clients/cli/network-manager.c:38
msgid "STARTUP"
msgstr "ಆರಂಭ"
-#: ../cli/src/network-manager.c:41
+#. 3
+#: ../clients/cli/network-manager.c:39
msgid "CONNECTIVITY"
msgstr "ಸಂಪರà³à²•"
-#: ../cli/src/network-manager.c:42
+#. 4
+#: ../clients/cli/network-manager.c:40
msgid "NETWORKING"
msgstr "NETWORKING"
-#: ../cli/src/network-manager.c:43
+#. 5
+#: ../clients/cli/network-manager.c:41
msgid "WIFI-HW"
msgstr "WIFI-HW"
-#: ../cli/src/network-manager.c:44
+#. 6
+#: ../clients/cli/network-manager.c:42
msgid "WIFI"
msgstr "WIFI"
-#: ../cli/src/network-manager.c:45
+#. 7
+#: ../clients/cli/network-manager.c:43
msgid "WWAN-HW"
msgstr "WWAN-HW"
-#: ../cli/src/network-manager.c:46
+#. 8
+#: ../clients/cli/network-manager.c:44
msgid "WWAN"
msgstr "WWAN"
-#: ../cli/src/network-manager.c:47
+#. 9
+#: ../clients/cli/network-manager.c:45
msgid "WIMAX-HW"
msgstr "WIMAX-HW"
-#: ../cli/src/network-manager.c:48
+#. 10
+#: ../clients/cli/network-manager.c:46
msgid "WIMAX"
msgstr "WIMAX"
-#: ../cli/src/network-manager.c:70
+#: ../clients/cli/network-manager.c:68
msgid "PERMISSION"
msgstr "PERMISSION"
-#: ../cli/src/network-manager.c:71
+#. 0
+#: ../clients/cli/network-manager.c:69
msgid "VALUE"
msgstr "VALUE"
-#: ../cli/src/network-manager.c:79
+#: ../clients/cli/network-manager.c:77
msgid "LEVEL"
msgstr "LEVEL"
-#: ../cli/src/network-manager.c:80
+#. 0
+#: ../clients/cli/network-manager.c:78
msgid "DOMAINS"
msgstr "DOMAINS"
-#: ../cli/src/network-manager.c:95
+#: ../clients/cli/network-manager.c:93
#, c-format
msgid ""
"Usage: nmcli general { COMMAND | help }\n"
@@ -3546,7 +4122,7 @@ msgstr ""
" logging [level <log level>] [domains <log domains>]\n"
"\n"
-#: ../cli/src/network-manager.c:107
+#: ../clients/cli/network-manager.c:105
#, c-format
msgid ""
"Usage: nmcli general status { help }\n"
@@ -3560,10 +4136,11 @@ msgstr ""
"\n"
"NetworkManager ನ ಒಟà³à²Ÿà²¾à²°à³† ಸà³à²¥à²¿à²¤à²¿à²¯à²¨à³à²¨à³ ತೋರಿಸà³à²¤à³à²¤à²¦à³†.\n"
"'status' ಎನà³à²¨à³à²µà³à²¦à³ ಪೂರà³à²µà²¨à²¿à²¯à³‹à²œà²¿à²¤ ಕà³à²°à²¿à²¯à³†à²¯à²¾à²—ಿರà³à²¤à³à²¤à²¦à³†, ಇದರರà³à²¥ 'nmcli gen' "
-"ಎನà³à²¨à³à²µà³à²¦à³ 'nmcli gen status' ಯನà³à²¨à³ ಚಲಾಯಿಸà³à²¤à³à²¤à²¦à³† ಎಂದà³\n"
+"ಎನà³à²¨à³à²µà³à²¦à³ "
+"'nmcli gen status' ಯನà³à²¨à³ ಚಲಾಯಿಸà³à²¤à³à²¤à²¦à³† ಎಂದà³\n"
"\n"
-#: ../cli/src/network-manager.c:117
+#: ../clients/cli/network-manager.c:115
#, c-format
msgid ""
"Usage: nmcli general hostname { ARGUMENTS | help }\n"
@@ -3572,8 +4149,8 @@ msgid ""
"\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"
+"a hostname, NetworkManager will set it as the new persistent system "
+"hostname.\n"
"\n"
msgstr ""
"ಬಳಕೆ: nmcli general hostname { ARGUMENTS | help }\n"
@@ -3582,12 +4159,13 @@ msgstr ""
"\n"
"ಸà³à²¥à²¿à²° ವà³à²¯à²µà²¸à³à²¥à³† ಆತಿಥೇಯಹೆಸರನà³à²¨à³ ಪಡೆಯಿರಿ ಅಥವ ಬದಲಾಯಿಸಿ.\n"
"ಯಾವà³à²¦à³† ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œà²—ಳಿಲà³à²²à²¦à³†, ಇದೠಪà³à²°à²¸à²•à³à²¤ ಸಂರಚಿಸಲಾದ ಆತಿಥೇಯದ ಹೆಸರನà³à²¨à³ "
-"ತೋರಿಸà³à²¤à³à²¤à²¦à³†. ನೀವೠಆತಿಥೇಯದ\n"
+"ತೋರಿಸà³à²¤à³à²¤à²¦à³†. "
+"ನೀವೠಆತಿಥೇಯದ\n"
"ಹೆಸರನà³à²¨à³ ನೀಡಿದಲà³à²²à²¿, NetworkManager ಅದನà³à²¨à³ ಹೊಸ ಸà³à²¥à²¿à²° ವà³à²¯à²µà²¸à³à²¥à³† ಆತಿಥೇಯಹೆಸರಿಗೆ "
"ಹೊಂದಿಸà³à²¤à³à²¤à²¦à³†.\n"
"\n"
-#: ../cli/src/network-manager.c:130
+#: ../clients/cli/network-manager.c:128
#, c-format
msgid ""
"Usage: nmcli general permissions { help }\n"
@@ -3600,7 +4178,7 @@ msgstr ""
"ದೃಢೀಕರಿಸಲಾದ ಕಾರà³à²¯à²¾à²šà²°à²£à³†à²—ಳಿಗಾಗಿ ಕಾಲರೠಅನà³à²®à²¤à²¿à²—ಳನà³à²¨à³ ತೋರಿಸà³.\n"
"\n"
-#: ../cli/src/network-manager.c:139
+#: ../clients/cli/network-manager.c:137
#, c-format
msgid ""
"Usage: nmcli general logging { ARGUMENTS | help }\n"
@@ -3622,12 +4200,12 @@ msgstr ""
"NetworkManager ಲಾಗಿಂಗೠಮಟà³à²Ÿ ಮತà³à²¤à³ ಡೊಮೇನà³â€Œà²—ಳನà³à²¨à³ ಪಡೆದà³à²•à³Š ಅಥವ ಬದಲಾಯಿಸà³.\n"
"ಯಾವà³à²¦à³† ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œà²—ಳಿಲà³à²²à²¦à³† ಇದà³à²¦à²°à³† ಪà³à²°à²¸à²•à³à²¤ ಲಾಗಿಂಗೠಮಟà³à²Ÿ ಮತà³à²¤à³ ಡೊಮೇನà³â€Œà²—ಳನà³à²¨à³ "
"ತೋರಿಸಲಾಗà³à²¤à³à²¤à²¦à³†. ಲಾಗಿಂಗೠ\n"
-"ಸà³à²¥à²¿à²¤à²¿à²¯à²¨à³à²¨à³ ಬದಲಾಯಿಸಲà³, ಮಟà³à²Ÿ ಮತà³à²¤à³/ಅಥವ ಡೊಮೇನೠಅನà³à²¨à³ ಒದಗಿಸಿ. ಸಾಧà³à²¯à²µà²¿à²°à³à²µ "
-"ಲಾಗಿಂಗೠಡೊಮೇನà³â€Œà²—ಳ \n"
+"ಸà³à²¥à²¿à²¤à²¿à²¯à²¨à³à²¨à³ ಬದಲಾಯಿಸಲà³, ಮಟà³à²Ÿ ಮತà³à²¤à³/ಅಥವ ಡೊಮೇನೠಅನà³à²¨à³ ಒದಗಿಸಿ. ಸಾಧà³à²¯à²µà²¿à²°à³à²µ ಲಾಗಿಂಗೠ"
+"ಡೊಮೇನà³â€Œà²—ಳ \n"
"ಪಟà³à²Ÿà²¿à²—ಾಗಿ ದಯವಿಟà³à²Ÿà³ ಮಾಹಿತಿ (ಮà³à²¯à²¾à²¨à³) ಪà³à²Ÿà²•à³à²•à³† ಭೇಟಿ ಕೊಡಿ.\n"
"\n"
-#: ../cli/src/network-manager.c:153
+#: ../clients/cli/network-manager.c:151
#, c-format
msgid ""
"Usage: nmcli networking { COMMAND | help }\n"
@@ -3652,9 +4230,10 @@ msgstr ""
" connectivity [check]\n"
"\n"
-#: ../cli/src/network-manager.c:164
+#: ../clients/cli/network-manager.c:162
#, c-format
-msgid "Usage: nmcli networking on { help }\n"
+msgid ""
+"Usage: nmcli networking on { help }\n"
"\n"
"Switch networking on.\n"
"\n"
@@ -3664,9 +4243,10 @@ msgstr ""
"ಜಾಲಬಂಧವನà³à²¨à³ ಸಕà³à²°à²¿à²¯ ಸà³à²¥à²¿à²¤à²¿à²—ೆ ಬದಲಾಯಿಸà³.\n"
"\n"
-#: ../cli/src/network-manager.c:173
+#: ../clients/cli/network-manager.c:171
#, c-format
-msgid "Usage: nmcli networking off { help }\n"
+msgid ""
+"Usage: nmcli networking off { help }\n"
"\n"
"Switch networking off.\n"
"\n"
@@ -3676,7 +4256,7 @@ msgstr ""
"ಜಾಲಬಂಧವನà³à²¨à³ ನಿಷà³à²•à³à²°à²¿à²¯ ಸà³à²¥à²¿à²¤à²¿à²—ೆ ಬದಲಾಯಿಸà³.|\n"
"\n"
-#: ../cli/src/network-manager.c:182
+#: ../clients/cli/network-manager.c:180
#, c-format
msgid ""
"Usage: nmcli networking connectivity { ARGUMENTS | help }\n"
@@ -3684,8 +4264,8 @@ msgid ""
"ARGUMENTS := [check]\n"
"\n"
"Get network connectivity state.\n"
-"The optional 'check' argument makes NetworkManager re-check the connectivity."
-"\n"
+"The optional 'check' argument makes NetworkManager re-check the "
+"connectivity.\n"
"\n"
msgstr ""
"ಬಳಕೆ: nmcli networking connectivity { ARGUMENTS | help }\n"
@@ -3693,11 +4273,11 @@ msgstr ""
"ARGUMENTS := [check]\n"
"\n"
"ಜಾಲಬಂಧ ಸಂಪರà³à²•à²¦ ಸà³à²¥à²¿à²¤à²¿à²¯à²¨à³à²¨à³ ಪಡೆದà³à²•à³Š.\n"
-"à²à²šà³à²›à²¿à²• 'check' ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œà²¨à²¿à²‚ದಾಗಿ NetworkManager ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಮರಳಿ-"
-"ಪರಿಶೀಲಿಸà³à²¤à³à²¤à²¦à³†.\n"
+"à²à²šà³à²›à²¿à²• 'check' ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œà²¨à²¿à²‚ದಾಗಿ NetworkManager ಸಂಪರà³à²•à²µà²¨à³à²¨à³ "
+"ಮರಳಿ-ಪರಿಶೀಲಿಸà³à²¤à³à²¤à²¦à³†.\n"
"\n"
-#: ../cli/src/network-manager.c:195
+#: ../clients/cli/network-manager.c:193
#, c-format
msgid ""
"Usage: nmcli radio { COMMAND | help }\n"
@@ -3722,7 +4302,7 @@ msgstr ""
" all | wifi | wwan [ on | off ]\n"
"\n"
-#: ../cli/src/network-manager.c:210
+#: ../clients/cli/network-manager.c:208
#, c-format
msgid ""
"Usage: nmcli radio all { ARGUMENTS | help }\n"
@@ -3736,11 +4316,11 @@ msgstr ""
"\n"
"ARGUMENTS := [on | off]\n"
"\n"
-"ಎಲà³à²²à²¾ ರೇಡಿಯೊ ಸà³à²µà²¿à²šà³â€Œà²—ಳ ಸà³à²¥à²¿à²¤à²¿à²¯à²¨à³à²¨à³ ಪಡೆದà³à²•à³Š, ಅಥವ ಅವà³à²—ಳನà³à²¨à³ ಸಕà³à²°à²¿à²¯/"
-"ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸà³.\n"
+"ಎಲà³à²²à²¾ ರೇಡಿಯೊ ಸà³à²µà²¿à²šà³â€Œà²—ಳ ಸà³à²¥à²¿à²¤à²¿à²¯à²¨à³à²¨à³ ಪಡೆದà³à²•à³Š, ಅಥವ ಅವà³à²—ಳನà³à²¨à³ "
+"ಸಕà³à²°à²¿à²¯/ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸà³.\n"
"\n"
-#: ../cli/src/network-manager.c:221
+#: ../clients/cli/network-manager.c:219
#, c-format
msgid ""
"Usage: nmcli radio wifi { ARGUMENTS | help }\n"
@@ -3758,7 +4338,7 @@ msgstr ""
"ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸà³.\n"
"\n"
-#: ../cli/src/network-manager.c:232
+#: ../clients/cli/network-manager.c:230
#, c-format
msgid ""
"Usage: nmcli radio wwan { ARGUMENTS | help }\n"
@@ -3773,10 +4353,11 @@ msgstr ""
"ARGUMENTS := [on | off]\n"
"\n"
"ಎಲà³à²²à²¾ ಮೊಬೈಲà³â€Œ ಬà³à²°à²¾à²¡à³â€Œà²¬à³à²¯à²¾à²‚ಡà³â€Œ ರೇಡಿಯೊ ಸà³à²µà²¿à²šà³â€Œà²—ಳ ಸà³à²¥à²¿à²¤à²¿à²¯à²¨à³à²¨à³ ಪಡೆದà³à²•à³Š, ಅಥವ "
-"ಅವà³à²—ಳನà³à²¨à³ ಸಕà³à²°à²¿à²¯/ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸà³.\n"
+"ಅವà³à²—ಳನà³à²¨à³ ಸಕà³à²°à²¿à²¯/"
+"ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸà³.\n"
"\n"
-#: ../cli/src/network-manager.c:244
+#: ../clients/cli/network-manager.c:242
#, c-format
msgid ""
"Usage: nmcli radio wimax { ARGUMENTS | help }\n"
@@ -3794,171 +4375,173 @@ msgstr ""
"ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸà³.\n"
"\n"
-#: ../cli/src/network-manager.c:264
+#: ../clients/cli/network-manager.c:262
msgid "asleep"
msgstr "ನಿದà³à²°à²¿à²¸à³à²µ"
-#: ../cli/src/network-manager.c:266
+#: ../clients/cli/network-manager.c:264
msgid "connecting"
msgstr "ಸಂಪರà³à²• ಕಲà³à²ªà²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¿à²¦à³†"
-#: ../cli/src/network-manager.c:268
+#: ../clients/cli/network-manager.c:266
msgid "connected (local only)"
msgstr "ಸಂಪರà³à²•à²¿à²¤à²—ೊಂಡಿದೆ (ಸà³à²¥à²³à³€à²¯ ಮಾತà³à²°)"
-#: ../cli/src/network-manager.c:270
+#: ../clients/cli/network-manager.c:268
msgid "connected (site only)"
msgstr "ಸಂಪರà³à²•à²¿à²¤à²—ೊಂಡಿದೆ (ತಾಣ ಮಾತà³à²°)"
-#: ../cli/src/network-manager.c:274
+#: ../clients/cli/network-manager.c:272
msgid "disconnecting"
msgstr "ಸಂಪರà³à²• ತಪà³à²ªà²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¿à²¦à³†"
-#: ../cli/src/network-manager.c:290
+#: ../clients/cli/network-manager.c:288
msgid "portal"
msgstr "ಪೋರà³à²Ÿà²²à³â€Œ"
-#: ../cli/src/network-manager.c:292
+#: ../clients/cli/network-manager.c:290
msgid "limited"
msgstr "ಸೀಮಿತ"
-#: ../cli/src/network-manager.c:294
+#: ../clients/cli/network-manager.c:292
msgid "full"
msgstr "ಸಂಪೂರà³à²£"
-#: ../cli/src/network-manager.c:332
+#: ../clients/cli/network-manager.c:330
#, c-format
msgid "Error: only these fields are allowed: %s"
msgstr "ದೋಷ: ಕೇವಲ ಈ ಸà³à²¥à²³à²—ಳಿಗೆ ಮಾತà³à²° ಅನà³à²®à²¤à²¿ ಇದೆ: %s"
-#: ../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
+#: ../clients/cli/network-manager.c:346 ../clients/cli/network-manager.c:347
+#: ../clients/cli/network-manager.c:348 ../clients/cli/network-manager.c:349
+#: ../clients/cli/network-manager.c:350 ../clients/cli/network-manager.c:352
+#: ../clients/cli/network-manager.c:353
msgid "enabled"
msgstr "ಸಕà³à²°à²¿à²¯à²—ೊಂಡ"
-#: ../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
+#: ../clients/cli/network-manager.c:346 ../clients/cli/network-manager.c:347
+#: ../clients/cli/network-manager.c:348 ../clients/cli/network-manager.c:349
+#: ../clients/cli/network-manager.c:350 ../clients/cli/network-manager.c:352
+#: ../clients/cli/network-manager.c:353
msgid "disabled"
msgstr "ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಂಡ"
-#: ../cli/src/network-manager.c:367
+#: ../clients/cli/network-manager.c:365
msgid "NetworkManager status"
msgstr "NetworkManager ಸà³à²¥à²¿à²¤à²¿"
-#: ../cli/src/network-manager.c:372
+#: ../clients/cli/network-manager.c:370
msgid "running"
msgstr "ಚಾಲನೆಯಲà³à²²à²¿à²¦à³†"
-#: ../cli/src/network-manager.c:372
+#: ../clients/cli/network-manager.c:370
msgid "not running"
msgstr "ಚಾಲನೆಯಲà³à²²à²¿à²²à³à²²"
-#: ../cli/src/network-manager.c:375
+#: ../clients/cli/network-manager.c:373
msgid "starting"
msgstr "ಆರಂಭಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†"
-#: ../cli/src/network-manager.c:375
+#: ../clients/cli/network-manager.c:373
msgid "started"
msgstr "ಪà³à²°à²¾à²°à²‚ಭಗೊಂಡಿದೆ"
-#: ../cli/src/network-manager.c:446
+#: ../clients/cli/network-manager.c:444
msgid "auth"
msgstr "ದೃಢೀಕರಣ"
-#: ../cli/src/network-manager.c:475
+#: ../clients/cli/network-manager.c:473
#, c-format
msgid "Error: 'general permissions': %s"
msgstr "ದೋಷ: 'general permissions': %s"
-#: ../cli/src/network-manager.c:489
+#: ../clients/cli/network-manager.c:487
msgid "NetworkManager permissions"
msgstr "NetworkManager ಅನà³à²®à²¤à²¿à²—ಳà³"
-#: ../cli/src/network-manager.c:530
+#: ../clients/cli/network-manager.c:528
#, c-format
msgid "Error: 'general logging': %s"
msgstr "ದೋಷ: 'general logging': %s"
-#: ../cli/src/network-manager.c:545
+#: ../clients/cli/network-manager.c:543
msgid "NetworkManager logging"
msgstr "NetworkManager ಲಾಗಿಂಗà³"
-#: ../cli/src/network-manager.c:565
+#: ../clients/cli/network-manager.c:563
#, c-format
msgid "Error: failed to set hostname: (%d) %s"
msgstr "ದೋಷ: ಆತಿಥೇಯ ಹೆಸರನà³à²¨à³ ಹೊಂದಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: (%d) %s"
-#: ../cli/src/network-manager.c:682
+#: ../clients/cli/network-manager.c:681
#, c-format
msgid "Error: access denied to set logging; %s"
msgstr "ದೋಷ: ಲಾಗಿಂಗೠಅನà³à²¨à³ ಹೊಂದಿಸಲೠಪà³à²°à²µà³‡à²¶à²¾à²§à²¿à²•à²¾à²°à²µà²¨à³à²¨à³ ನಿರಾಕರಿಸಲಾಗಿದೆ; %s"
-#: ../cli/src/network-manager.c:684
+#: ../clients/cli/network-manager.c:683
#, c-format
msgid "Error: %s"
msgstr "ದೋಷ: %s"
-#: ../cli/src/network-manager.c:692
+#: ../clients/cli/network-manager.c:691
#, c-format
msgid "Error: 'general' command '%s' is not valid."
msgstr "ದೋಷ: '%s' ಎಂಬ 'general' ಆದೇಶವೠಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²."
-#: ../cli/src/network-manager.c:710
+#: ../clients/cli/network-manager.c:709
#, c-format
msgid "Error: '--fields' value '%s' is not valid here (allowed field: %s)"
msgstr ""
-"ದೋಷ: '--fields' '%s' ಎಂಬ ಮೌಲà³à²¯à²µà³ ಇಲà³à²²à²¿ ಸರಿಯಾದà³à²¦à²²à³à²² (ಅನà³à²®à²¤à²¿ ಇರà³à²µ ಕà³à²·à³‡à²¤à³à²°: "
-"%s)"
+"ದೋಷ: '--fields' '%s' ಎಂಬ ಮೌಲà³à²¯à²µà³ ಇಲà³à²²à²¿ ಸರಿಯಾದà³à²¦à²²à³à²² (ಅನà³à²®à²¤à²¿ ಇರà³à²µ ಕà³à²·à³‡à²¤à³à²°: %s)"
-#: ../cli/src/network-manager.c:735
+#: ../clients/cli/network-manager.c:734
#, c-format
msgid "Error: invalid '%s' argument: '%s' (use on/off)."
msgstr "ದೋಷ: ಅಮಾನà³à²¯à²µà²¾à²¦ '%s' ನಿಯತಾಂಕ: '%s' (ಆನà³/ಆಫೠಅನà³à²¨à³ ಬಳಸಿ)."
-#: ../cli/src/network-manager.c:746
+#: ../clients/cli/network-manager.c:745
msgid "Connectivity"
msgstr "ಸಂಪರà³à²•"
-#: ../cli/src/network-manager.c:758
+#: ../clients/cli/network-manager.c:757
msgid "Networking"
msgstr "ಜಾಲಬಂಧ"
-#: ../cli/src/network-manager.c:783
+#: ../clients/cli/network-manager.c:782
#, c-format
msgid "Error: 'networking connectivity' command '%s' is not valid."
msgstr "ದೋಷ: '%s' ಎಂಬ 'networking connectivity' ಆದೇಶವೠಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²."
-#: ../cli/src/network-manager.c:799
+#: ../clients/cli/network-manager.c:798
#, c-format
msgid "Error: 'networking' command '%s' is not valid."
msgstr "ದೋಷ: '%s' ಎಂಬ 'networking' ಆದೇಶವೠಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²."
-#: ../cli/src/network-manager.c:825 ../cli/src/network-manager.c:845
+#: ../clients/cli/network-manager.c:824 ../clients/cli/network-manager.c:844
msgid "Radio switches"
msgstr "ರೇಡಿಯೋ ಸà³à²µà²¿à²šà³â€Œà²—ಳà³"
-#: ../cli/src/network-manager.c:863
+#. no argument, show current WiFi state
+#: ../clients/cli/network-manager.c:862
msgid "Wi-Fi radio switch"
msgstr "Wi-Fi ರೇಡಿಯೊ ಸà³à²µà²¿à²šà³"
-#: ../cli/src/network-manager.c:879
+#. no argument, show current WWAN (mobile broadband) state
+#: ../clients/cli/network-manager.c:878
msgid "WWAN radio switch"
msgstr "WWAN ರೇಡಿಯೊ ಸà³à²µà²¿à²šà³"
-#: ../cli/src/network-manager.c:896
+#. no argument, show current WiMAX state
+#: ../clients/cli/network-manager.c:895
msgid "WiMAX radio switch"
msgstr "WiMAX ರೇಡಿಯೊ ಸà³à²µà²¿à²šà³"
-#: ../cli/src/network-manager.c:908
+#: ../clients/cli/network-manager.c:907
#, c-format
msgid "Error: 'radio' command '%s' is not valid."
msgstr "ದೋಷ: '%s' ಎಂಬ 'radio' ಆದೇಶವೠಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²."
-#: ../cli/src/nmcli.c:78
+#: ../clients/cli/nmcli.c:82
#, c-format
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
@@ -3994,7 +4577,8 @@ msgstr ""
" -m[ode] tabular|multiline ಔಟà³â€Œà²ªà³à²Ÿà³ ಸà³à²¥à²¿à²¤à²¿\n"
" -f[ields] <field1,field2,...>|all|common ಔಟà³â€Œà²ªà³à²Ÿà³ ಮಾಡಲೠಜಾಗಗಳನà³à²¨à³ ಸೂಚಿಸà³\n"
" -e[scape] yes|no ಮೌಲà³à²¯à²—ಳಲà³à²²à²¿à²°à³à²µ ಎಸà³à²•à³‡à²ªà³ "
-"ಉದà³à²¦à²¸à²¾à²²à³à²—ಳ ವಿಭಜಕಗಳà³\n"
+"ಉದà³à²¦à²¸à²¾à²²à³à²—ಳ "
+"ವಿಭಜಕಗಳà³\n"
" -v[ersion] ಪà³à²°à³Šà²—à³à²°à²¾à²®à²¿à²¨ ಆವೃತà³à²¤à²¿à²¯à²¨à³à²¨à³ ತೋರಿಸà³\n"
" -h[elp] ನೆರವನà³à²¨à³ ಮà³à²¦à³à²°à²¿à²¸à³\n"
"\n"
@@ -4004,356 +4588,389 @@ msgstr ""
" dev NetworkManager ಇಂದ ನೋಡಿಕೊಳà³à²³à²²à²¾à²—à³à²µ ಸಾಧನಗಳà³\n"
"\n"
-#: ../cli/src/nmcli.c:132
+#: ../clients/cli/nmcli.c:136
#, c-format
msgid "Error: Object '%s' is unknown, try 'nmcli help'."
-msgstr ""
-"ದೋಷ: '%s' ಎಂಬ ವಸà³à²¤à³à²µà²¿à²¨ ಬಗೆಗೆ ತಿಳಿದಿಲà³à²², 'nmcli help' ಅನà³à²¨à³ ಪà³à²°à²¯à²¤à³à²¨à²¿à²¸à²¿."
+msgstr "ದೋಷ: '%s' ಎಂಬ ವಸà³à²¤à³à²µà²¿à²¨ ಬಗೆಗೆ ತಿಳಿದಿಲà³à²², 'nmcli help' ಅನà³à²¨à³ ಪà³à²°à²¯à²¤à³à²¨à²¿à²¸à²¿."
-#: ../cli/src/nmcli.c:162
+#: ../clients/cli/nmcli.c:166
#, c-format
msgid "Error: Option '--terse' is specified the second time."
msgstr "ದೋಷ: '--terse' ಎಂಬ ಆಯà³à²•à³†à²¯à²¨à³à²¨à³ ಎರಡನೆ ಬಾರಿಗೆ ಸೂಚಿಸಲಾಗಿದೆ."
-#: ../cli/src/nmcli.c:167
+#: ../clients/cli/nmcli.c:171
#, c-format
msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
msgstr "ದೋಷ: '--terse' ಎಂಬà³à²¦à³ '--pretty' ಯೊಂದಿಗೆ ಪರಸà³à²ªà²° ಮೀಸಲಾಗಿದೆ."
-#: ../cli/src/nmcli.c:175
+#: ../clients/cli/nmcli.c:179
#, c-format
msgid "Error: Option '--pretty' is specified the second time."
msgstr "ದೋಷ: '--pretty' ಎಂಬ ಆಯà³à²•à³†à²¯à²¨à³à²¨à³ ಎರಡನೆ ಬಾರಿಗೆ ಸೂಚಿಸಲಾಗಿದೆ."
-#: ../cli/src/nmcli.c:180
+#: ../clients/cli/nmcli.c:184
#, c-format
msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
msgstr "ದೋಷ: '--pretty' ಎಂಬà³à²¦à³ '--terse' ಯೊಂದಿಗೆ ಪರಸà³à²ªà²° ಮೀಸಲಾಗಿದೆ."
-#: ../cli/src/nmcli.c:190 ../cli/src/nmcli.c:206 ../cli/src/nmcli.c:235
+#: ../clients/cli/nmcli.c:194 ../clients/cli/nmcli.c:210
+#: ../clients/cli/nmcli.c:239
#, c-format
msgid "Error: missing argument for '%s' option."
msgstr "ದೋಷ: '%s' ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟೠಕಾಣಿಸà³à²¤à³à²¤à²¿à²²à³à²²"
-#: ../cli/src/nmcli.c:199 ../cli/src/nmcli.c:215
+#: ../clients/cli/nmcli.c:203 ../clients/cli/nmcli.c:219
#, c-format
msgid "Error: '%s' is not valid argument for '%s' option."
msgstr "ದೋಷ: '%s' ಎನà³à²¨à³à²µà³à²¦à³ '%s' ಎಂಬ ಆಯà³à²•à³†à²—ೆ ಸರಿಯಾದ ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟೠಆಗಿಲà³à²²."
-#: ../cli/src/nmcli.c:222
+#: ../clients/cli/nmcli.c:226
#, c-format
msgid "Error: fields for '%s' options are missing."
msgstr "ದೋಷ: '%s' ಎಂಬ ಆಯà³à²•à³†à²¯ ಕà³à²·à³‡à²¤à³à²°à²—ಳೠಕಾಣಿಸà³à²¤à³à²¤à²¿à²²à³à²²."
-#: ../cli/src/nmcli.c:240
+#: ../clients/cli/nmcli.c:244
#, c-format
msgid "Error: '%s' is not a valid timeout for '%s' option."
msgstr "ದೋಷ: '%s' ಎನà³à²¨à³à²µà³à²¦à³ '%s' ಎಂಬ ಆಯà³à²•à³†à²—ೆ ಸರಿಯಾದ ಕಾಲಾವಧಿ ತೀರಿಕೆಯಲà³à²²."
-#: ../cli/src/nmcli.c:247
+#: ../clients/cli/nmcli.c:251
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "nmcli ಉಪಕರಣ, ಆವೃತà³à²¤à²¿ %s\n"
-#: ../cli/src/nmcli.c:253
+#: ../clients/cli/nmcli.c:257
#, c-format
msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
msgstr "ದೋಷ: '%s' ಎಂಬ ಆಯà³à²•à³†à²¯ ಬಗೆಗೆ ತಿಳಿದಿಲà³à²², 'nmcli -help' ಅನà³à²¨à³ ಪà³à²°à²¯à²¤à³à²¨à²¿à²¸à²¿."
-#: ../cli/src/nmcli.c:288
+#: ../clients/cli/nmcli.c:337 ../clients/cli/nmcli.c:346
#, c-format
-msgid "\n"
-"Error: nmcli terminated by signal %d."
-msgstr "\n"
-"ದೋಷ: %d ಸಂಕೇತದೊಂದಿಗೆ ಅಂತà³à²¯à²—ೊಂಡಿದೆ."
+#| msgid ""
+#| "\n"
+#| "Error: nmcli terminated by signal %d."
+msgid ""
+"\n"
+"Error: nmcli terminated by signal %s (%d)\n"
+msgstr ""
+"\n"
+"ದೋಷ: %s (%d) ಸಂಕೇತದೊಂದಿಗೆ ಅಂತà³à²¯à²—ೊಂಡಿದೆ \n"
-#: ../cli/src/nmcli.c:318 ../src/main.c:130
+#: ../clients/cli/nmcli.c:377
#, c-format
-msgid "Failed to set signal mask: %d"
-msgstr "ಸಂಜà³à²žà³† ಮà³à²¸à³à²•à²¨à³à²¨à³ ಹೊಂದಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: %d"
+#| msgid "Failed to set signal mask: %d"
+msgid "Failed to set signal mask: %d\n"
+msgstr "ಸಂಕೇತದ ಮà³à²¸à³à²•à²¨à³à²¨à³ ಹೊಂದಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: %d\n"
-#: ../cli/src/nmcli.c:325 ../src/main.c:139
+#: ../clients/cli/nmcli.c:384
#, c-format
-msgid "Failed to create signal handling thread: %d"
-msgstr "ಸಂಜà³à²žà³† ನಿಭಾಯಿಸà³à²µ ಎಳೆಯನà³à²¨à³ ನಿರà³à²®à²¿à²¸à³à²µà²²à³à²²à²¿ ವಿಫಲವಾಗಿದೆ :%d"
+#| msgid "Failed to create signal handling thread: %d"
+msgid "Failed to create signal handling thread: %d\n"
+msgstr "ಸಂಕೇತ ನಿಭಾಯಿಸà³à²µ ಎಳೆಯನà³à²¨à³ ನಿರà³à²®à²¿à²¸à³à²µà²²à³à²²à²¿ ವಿಫಲವಾಗಿದೆ :%d\n"
-#: ../cli/src/nmcli.c:338 ../test/nm-online.c:149
+#: ../clients/cli/nmcli.c:481 ../clients/nm-online.c:197
#, c-format
-msgid "Error: Could not create NMClient object."
-msgstr "ದೋಷ: NMClient ವಸà³à²¤à³à²µà²¨à³à²¨à³ ರಚಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²."
+#| msgid "Error: Could not create NMClient object."
+msgid "Error: Could not create NMClient object: %s."
+msgstr "ದೋಷ: NMClient ವಸà³à²¤à³à²µà²¨à³à²¨à³ ರಚಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²:%s."
-#: ../cli/src/nmcli.c:354
+#: ../clients/cli/nmcli.c:498
msgid "Success"
msgstr "ಯಶಸà³à²µà²¿à²¯à²¾à²—ಿದೆ"
-#: ../cli/src/settings.c:666
+#: ../clients/cli/settings.c:656
#, c-format
-msgid "%d (hex-ascii-key)"
-msgstr "%d (hex-ascii-key)"
+#| msgid "%d (hex-ascii-key)"
+msgid "%d (key)"
+msgstr "%d (key)"
-#: ../cli/src/settings.c:668
+#: ../clients/cli/settings.c:658
#, c-format
-msgid "%d (104/128-bit passphrase)"
-msgstr "%d (104/128-ಬಿಟà³â€Œ ಗà³à²ªà³à²¤à²µà²¾à²•à³à²¯à²¾à²‚ಶ)"
+#| msgid "%d (104/128-bit passphrase)"
+msgid "%d (passphrase)"
+msgstr "%d (ಗà³à²ªà³à²¤à²µà²¾à²•à³à²¯à²¾à²‚ಶ)"
-#: ../cli/src/settings.c:671 ../cli/src/settings.c:799
+#: ../clients/cli/settings.c:661 ../clients/cli/settings.c:742
#, c-format
msgid "%d (unknown)"
msgstr "%d (ಗೊತà³à²¤à²¿à²°à²¦)"
-#: ../cli/src/settings.c:697
-msgid "0 (unknown)"
-msgstr "0 (ಗೊತà³à²¤à²¿à²°à²¦)"
-
-#: ../cli/src/settings.c:703
-msgid "any, "
-msgstr "ಯಾವà³à²¦à²¾à²¦à²°à³‚, "
-
-#: ../cli/src/settings.c:705
-msgid "900 MHz, "
-msgstr "900 MHz, "
-
-#: ../cli/src/settings.c:707
-msgid "1800 MHz, "
-msgstr "1800 MHz, "
-
-#: ../cli/src/settings.c:709
-msgid "1900 MHz, "
-msgstr "1900 MHz, "
-
-#: ../cli/src/settings.c:711
-msgid "850 MHz, "
-msgstr "850 MHz, "
-
-#: ../cli/src/settings.c:713
-msgid "WCDMA 3GPP UMTS 2100 MHz, "
-msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-
-#: ../cli/src/settings.c:715
-msgid "WCDMA 3GPP UMTS 1800 MHz, "
-msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-
-#: ../cli/src/settings.c:717
-msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
-msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-
-#: ../cli/src/settings.c:719
-msgid "WCDMA 3GPP UMTS 800 MHz, "
-msgstr "WCDMA 3GPP UMTS 800 MHz, "
-
-#: ../cli/src/settings.c:721
-msgid "WCDMA 3GPP UMTS 850 MHz, "
-msgstr "WCDMA 3GPP UMTS 850 MHz, "
-
-#: ../cli/src/settings.c:723
-msgid "WCDMA 3GPP UMTS 900 MHz, "
-msgstr "WCDMA 3GPP UMTS 900 MHz, "
-
-#: ../cli/src/settings.c:725
-msgid "WCDMA 3GPP UMTS 1700 MHz, "
-msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-
-#: ../cli/src/settings.c:727
-msgid "WCDMA 3GPP UMTS 1900 MHz, "
-msgstr "WCDMA 3GPP UMTS 1900 MHz, "
-
-#: ../cli/src/settings.c:729
-msgid "WCDMA 3GPP UMTS 2600 MHz, "
-msgstr "WCDMA 3GPP UMTS 2600 MHz, "
-
-#: ../cli/src/settings.c:747
+#: ../clients/cli/settings.c:690
msgid "0 (NONE)"
msgstr "0 (NONE)"
-#: ../cli/src/settings.c:753
+#: ../clients/cli/settings.c:696
msgid "REORDER_HEADERS, "
msgstr "REORDER_HEADERS, "
-#: ../cli/src/settings.c:755
+#: ../clients/cli/settings.c:698
msgid "GVRP, "
msgstr "GVRP, "
-#: ../cli/src/settings.c:757
+#: ../clients/cli/settings.c:700
msgid "LOOSE_BINDING, "
msgstr "LOOSE_BINDING, "
-#: ../cli/src/settings.c:793
+#: ../clients/cli/settings.c:736
#, c-format
msgid "%d (disabled)"
msgstr "%d (ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಂಡ)"
-#: ../cli/src/settings.c:795
+#: ../clients/cli/settings.c:738
#, c-format
msgid "%d (enabled, prefer public IP)"
msgstr "%d (ಸಕà³à²°à²¿à²¯à²—ೊಂಡಿದೆ, ಸಾರà³à²µà²œà²¨à²¿à²• IP ಗೆ ಆದà³à²¯à²¤à³† ನೀಡà³)"
-#: ../cli/src/settings.c:797
+#: ../clients/cli/settings.c:740
#, c-format
msgid "%d (enabled, prefer temporary IP)"
msgstr "%d (ಸಕà³à²°à²¿à²¯à²—ೊಂಡಿದೆ, ತಾತà³à²•à²¾à²²à²¿à²• IP ಗೆ ಆದà³à²¯à²¤à³† ನೀಡà³)"
-#: ../cli/src/settings.c:809
+#: ../clients/cli/settings.c:752
msgid "0 (none)"
msgstr "0 (ಯಾವà³à²¦à³‚ ಇಲà³à²²)"
-#: ../cli/src/settings.c:815
+#: ../clients/cli/settings.c:758
msgid "agent-owned, "
msgstr "ಮಧà³à²¯à²µà²°à³à²¤à²¿-ಹೊಂದಿದ,"
-#: ../cli/src/settings.c:817
+#: ../clients/cli/settings.c:760
msgid "not saved, "
msgstr "ಉಳಿಸದೆ ಇರà³à²µ"
-#: ../cli/src/settings.c:819
+#: ../clients/cli/settings.c:762
msgid "not required, "
msgstr "ಅಗತà³à²¯à²µà²¿à²°à²¦,"
-#: ../cli/src/settings.c:1124
+#: ../clients/cli/settings.c:1044
msgid "0 (disabled)"
msgstr "0 (ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಂಡ)"
-#: ../cli/src/settings.c:1130
+#: ../clients/cli/settings.c:1050
msgid "enabled, "
msgstr "ಸಕà³à²°à²¿à²¯à²—ೊಂಡ, "
-#: ../cli/src/settings.c:1132
+#: ../clients/cli/settings.c:1052
msgid "advertise, "
msgstr "ಜಾಹಿರಾತೠಮಾಡà³,"
-#: ../cli/src/settings.c:1134
+#: ../clients/cli/settings.c:1054
msgid "willing, "
msgstr "ಸಮà³à²®à²¤à²¿à²¸à²¿à²¦,"
-#: ../cli/src/settings.c:1162
+#: ../clients/cli/settings.c:1082
msgid "-1 (unset)"
msgstr "-1 (ಹೊಂದಿಸಿಲà³à²²)"
-#: ../cli/src/settings.c:1270 ../cli/src/settings.c:1453
-#: ../cli/src/settings.c:1493
+#: ../clients/cli/settings.c:1179 ../clients/cli/settings.c:1511
+#: ../clients/cli/settings.c:1553
msgid "auto"
msgstr "ಸà³à²µà²¯à²‚ಚಾಲಿತ"
-#: ../cli/src/settings.c:1283
+#: ../clients/cli/settings.c:1192
msgid "default"
msgstr "ಪೂರà³à²µà²¨à²¿à²¯à³‹à²œà²¿à²¤"
-#: ../cli/src/settings.c:1614
+#: ../clients/cli/settings.c:1681
#, c-format
msgid "Do you also want to set '%s' to '%s'? [yes]: "
msgstr "ನೀವೠ'%s' ಅನà³à²¨à³ '%s' ಗೆ ಹೊಂದಿಸಲೠಬಯಸà³à²µà²¿à²°à²¾? [yes]: "
-#: ../cli/src/settings.c:1616
+#: ../clients/cli/settings.c:1683
#, 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
+#: ../clients/cli/settings.c:1844
+#, c-format
+msgid ""
+"Warning: %s.%s set to '%s', but it might be ignored in infrastructure mode\n"
+msgstr ""
+"ಎಚà³à²šà²°à²¿à²•à³†: %s.%s ಅನà³à²¨à³ '%s' ಗೆ ಹೊಂದಿಸಲಾಗಿದೆ, ಆದರೆ ಅದನà³à²¨à³ ಸಂಪನà³à²®à³‚ಲ ಕà³à²°à²®à²¦à²²à³à²²à²¿ "
+"ಕಡೆಗಣಿಸà³à²µ ಸಾಧà³à²¯à²¤à³† ಇದೆ\n"
+
+#: ../clients/cli/settings.c:1926 ../clients/cli/settings.c:2186
+#: ../clients/cli/settings.c:4262
#, c-format
msgid "'%s' is not valid"
msgstr "'%s\" ಒಂದೠಮಾನà³à²¯à²µà²¾à²—ಿಲà³à²²"
-#: ../cli/src/settings.c:1837
+#: ../clients/cli/settings.c:1949
#, c-format
msgid "'%d' is not valid; use <%d-%d>"
msgstr "'%d' ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²; <%d-%d> ಅನà³à²¨à³ ಬಳಸಿ"
-#: ../cli/src/settings.c:1859
+#: ../clients/cli/settings.c:1971
#, c-format
msgid "'%u' is not valid; use <%d-%d>"
msgstr "'%u' ಎನà³à²¨à³à²µà³à²¦à³ ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²; <%d-%d> ಅನà³à²¨à³ ಬಳಸಿ"
-#: ../cli/src/settings.c:1925
+#: ../clients/cli/settings.c:2037
#, c-format
msgid "'%s' is not valid; use <option>=<value>"
msgstr "'%s' ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²; <option>=<value> ಅನà³à²¨à³ ಬಳಸಿ"
-#: ../cli/src/settings.c:1959
+#: ../clients/cli/settings.c:2071
#, c-format
msgid "index '%s' is not valid"
msgstr "'%s' ಸೂಚಿಯೠಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²"
-#: ../cli/src/settings.c:1964
+#: ../clients/cli/settings.c:2076 ../clients/cli/settings.c:2101
msgid "no item to remove"
msgstr "ತೆಗೆದà³à²¹à²¾à²•à²²à³ ಯಾವà³à²¦à³† ಅಂಶವಿಲà³à²²"
-#: ../cli/src/settings.c:1968
+#: ../clients/cli/settings.c:2080 ../clients/cli/settings.c:2105
#, c-format
msgid "index '%d' is not in range <0-%d>"
msgstr "'%d' ಸೂಚಿಯೠ<0-%d> ವà³à²¯à²¾à²ªà³à²¤à²¿à²¯ ಹೊರಗಿದೆ"
-#: ../cli/src/settings.c:1983
+#: ../clients/cli/settings.c:2120
#, c-format
msgid "invalid option '%s'"
msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ ಆಯà³à²•à³† '%s'"
-#: ../cli/src/settings.c:1985
+#: ../clients/cli/settings.c:2122
msgid "missing option"
msgstr "ಆಯà³à²•à³† ಕಾಣಿಸà³à²¤à³à²¤à²¿à²²à³à²²"
-#: ../cli/src/settings.c:2015 ../cli/src/settings.c:2035
+#: ../clients/cli/settings.c:2152
#, c-format
msgid "'%s' is not a valid number (or out of range)"
msgstr "'%s' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಸಂಖà³à²¯à³†à²¯à²¾à²—ಿಲà³à²² (ಅಥವ ವà³à²¯à²¾à²ªà³à²¤à²¿à²¯ ಹೊರಗಿದೆ)"
-#: ../cli/src/settings.c:2089
+#: ../clients/cli/settings.c:2203
#, 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
+#: ../clients/cli/settings.c:2228 ../libnm-core/nm-setting-connection.c:795
+#: ../libnm-core/nm-setting-infiniband.c:272
+#: ../libnm-util/nm-setting-connection.c:833
+#: ../libnm-util/nm-setting-infiniband.c:268
#, 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
+#: ../clients/cli/settings.c:2246 ../clients/cli/settings.c:3651
+#: ../libnm-core/nm-setting-gsm.c:332 ../libnm-util/nm-setting-gsm.c:372
#, c-format
msgid "'%s' is not a number"
msgstr "'%s' ಒಂದೠಸಂಖà³à²¯à³†à²¯à²¾à²—ಿಲà³à²²"
-#: ../cli/src/settings.c:2185
+#: ../clients/cli/settings.c:2298
#, c-format
msgid "'%s' is not a valid hex character"
msgstr "'%s\" ಯೠಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಹೆಕà³à²¸à³ ಅಕà³à²·à²° ಆಗಿಲà³à²²"
-#: ../cli/src/settings.c:2215
+#: ../clients/cli/settings.c:2328
#, c-format
msgid "'%s' is not a valid MAC"
msgstr "'%s' ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ MAC ಅಲà³à²²"
-#: ../cli/src/settings.c:2252 ../libnm-util/nm-setting-connection.c:715
+#: ../clients/cli/settings.c:2365 ../libnm-core/nm-setting-connection.c:784
+#: ../libnm-util/nm-setting-connection.c:790
#, c-format
msgid "'%s' is not a valid UUID"
msgstr "'%s\" ಯೠಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ UUID ಆಗಿಲà³à²²"
-#: ../cli/src/settings.c:2317
+#: ../clients/cli/settings.c:2432
+#, c-format
+msgid "the property doesn't contain permission '%s'"
+msgstr "ಗà³à²£à²µà³ '%s' ಅನà³à²®à²¤à²¿à²¯à²¨à³à²¨à³ ಹೊಂದಿಲà³à²²"
+
+#: ../clients/cli/settings.c:2444
msgid ""
-"Enter a list of user permissions. This is a list of user names formatted as:\n"
+"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"
+"ವಿನà³à²¯à²¾à²¸à²—ೊಳಿಸಲಾದ "
+"ಬಳಕೆದಾರ ಪಟà³à²Ÿà²¿à²¯à²¾à²—ಿದೆ:\n"
" [user:]<user name 1>, [user:]<user name 2>,... \n"
"ಅಂಶಗಳನà³à²¨à³ ವಿರಾಮಚಿಹà³à²¨à³†à²—ಳೠಅಥವ ಖಾಲಿಜಾಗಗಳಿಂದ (ಸà³à²ªà³‡à²¸à³) ಪà³à²°à²¤à³à²¯à³‡à²•à²¿à²¸à²¬à²¹à³à²¦à³.\n"
"\n"
"ಉದಾಹರಣೆಗೆ: alice bob charlie\n"
-#: ../cli/src/settings.c:2332
+#: ../clients/cli/settings.c:2463
#, c-format
msgid "'%s' is not valid master; use ifname or connection UUID"
msgstr "'%s' ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಮಾಸà³à²Ÿà²°à³ ಆಗಿಲà³à²²; ifname ಅಥವ ಸಂಪರà³à²• UUID ಅನà³à²¨à³ ಬಳಸಿ"
-#: ../cli/src/settings.c:2453
+#: ../clients/cli/settings.c:2507
+#, c-format
+msgid "Warning: %s is not an UUID of any existing connection profile\n"
+msgstr ""
+"ಎಚà³à²šà²°à²¿à²•à³†: %s ಎನà³à²¨à³à²µà³à²¦à³ ಈಗಿರà³à²µ ಸಂಪರà³à²•à²¦ ಪà³à²°à³Šà²«à³ˆà²²à³â€Œà²¨à²²à³à²²à²¿à²¨ ಒಂದೠUUID ಆಗಿಲà³à²²\n"
+
+#: ../clients/cli/settings.c:2511 ../clients/cli/settings.c:2527
+#, c-format
+#| msgid "Error: '%s' is not a valid connection type."
+msgid "'%s' is not a VPN connection profile"
+msgstr "'%s' ಎನà³à²¨à³à²µà³à²¦à³ VPN ಸಂಪರà³à²• ಪà³à²°à³Šà²«à³ˆà²²à³â€Œ ಬಗೆಯಾಗಿಲà³à²²"
+
+#: ../clients/cli/settings.c:2520
+#, c-format
+#| msgid "'%s' is not a valid team configuration or file name."
+msgid "'%s' is not a name of any exiting profile"
+msgstr "'%s' ಎನà³à²¨à³à²µà³à²¦à³ ಯಾವà³à²¦à³† ಈಗಿರà³à²µ ಪà³à²°à³Šà²«à³ˆà²²à³â€Œà²¨ ಹೆಸರೠಆಗಿಲà³à²²."
+
+#: ../clients/cli/settings.c:2554
+#, c-format
+#| msgid "'%s' is not a valid UUID"
+msgid "the value '%s' is not a valid UUID"
+msgstr "'%s' ಮೌಲà³à²¯à²µà³ ಒಂದೠಸರಿಯಾದ UUID ಆಗಿಲà³à²²"
+
+#: ../clients/cli/settings.c:2561
+#, c-format
+msgid "the property doesn't contain UUID '%s'"
+msgstr "ಗà³à²£à²µà³ UUID '%s' ಅನà³à²¨à³ ಹೊಂದಿಲà³à²²"
+
+#: ../clients/cli/settings.c:2573
+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 ಅಥವ ID ಯ (ಹೆಸರà³) ಮೂಲಕ ಸೂಚಿಸಬಹà³à²¦à³. nmcli ಪಾರದರà³à²¶à²•à²µà²¾à²—ಿ\n"
+"ಹೆಸರà³à²—ಳನà³à²¨à³ UUIDಗಳಿಗೆ ಅನà³à²µà²¾à²¦à²¿à²¤à²—ೊಳಿಸà³à²¤à³à²¤à²¦à³†. NetworkManager ಸದà³à²¯à²•à³à²•à³† ಕೇವಲ \n"
+"VPNಗಳನà³à²¨à³ ಮಾತà³à²° ಎರಡನೆಯ ಸಂಪರà³à²•à²—ಳಾಗಿ ಬೆಂಬಲಿಸà³à²¤à³à²¤à²¦à³†.\n"
+"ಅಂಶಗಳನà³à²¨à³ ವಿರಾಮಚಿಹà³à²¨à³†à²—ಳೠಅಥವ ಖಾಲಿಸà³à²¥à²³à²—ಳಿಂದ ಪà³à²°à²¤à³à²¯à³‡à²•à²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¦à³†.\n"
+"\n"
+"ಉದಾಹರಣೆಗೆ: private-openvpn, fe6ba5d8-c2fc-4aae-b2e3-97efddd8d9a7\n"
+
+#: ../clients/cli/settings.c:2650
msgid "private key password not provided"
msgstr "ಖಾಸಗಿ ಕೀಲಿ ಗà³à²ªà³à²¤à²ªà²¦à²µà²¨à³à²¨à³ ಒದಗಿಸಲಾಗಿಲà³à²²"
-#: ../cli/src/settings.c:2513
+#: ../clients/cli/settings.c:2677
+#, c-format
+#| msgid "the property can't be changed"
+msgid "the property doesn't contain EAP method '%s'"
+msgstr "ಗà³à²£à²µà³ EAP ವಿಧಾನ '%s' ಅನà³à²¨à³ ಹೊಂದಿಲà³à²²"
+
+#: ../clients/cli/settings.c:2702
+#, c-format
+msgid "the property doesn't contain alternative subject match '%s'"
+msgstr "ಗà³à²£à²µà³ ಪರà³à²¯à²¾à²¯ ವಸà³à²¤à³ ಹೊಂದಾಣಿಕೆ '%s' ಅನà³à²¨à³ ಹೊಂದಿಲà³à²²"
+
+#: ../clients/cli/settings.c:2731
+#, c-format
+msgid "the property doesn't contain \"phase2\" alternative subject match '%s'"
+msgstr "ಗà³à²£à²µà³ \"phase2\" ಪರà³à²¯à²¾à²¯ ವಸà³à²¤à³ ಹೊಂದಾಣಿಕೆ '%s' ಅನà³à²¨à³ ಹೊಂದಿಲà³à²²"
+
+#: ../clients/cli/settings.c:2757
msgid ""
"Enter path to a private key and the key password (if not set yet):\n"
" <file path> [<password>]\n"
@@ -4364,11 +4981,12 @@ msgstr ""
" <file path> [<password>]\n"
"ಉದಾಹರಣೆಗೆ: /home/cimrman/jara-priv-key Dardanely\n"
-#: ../cli/src/settings.c:2583
+#: ../clients/cli/settings.c:2827
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"
+"(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"
@@ -4378,14 +4996,16 @@ msgstr ""
"ಬೈಟà³â€Œà²—ಳನà³à²¨à³ ಹೆಕà³à²¸à²¾à²¡à³†à²¸à²¿à²®à²²à³ ಮೌಲà³à²¯à²—ಳ ಒಂದೠಪಟà³à²Ÿà²¿à²¯ ರೂಪದಲà³à²²à²¿ ನಮೂದಿಸಿ.\n"
"ಎರಡೠವಿನà³à²¯à²¾à²¸à²—ಳಿಗೆ ಅನà³à²®à²¤à²¿ ಇದೆ:\n"
"(a) ಹೆಕà³à²¸à²¾à²¡à³†à²¸à²¿à²®à²²à³ ಅಂಕಿಗಳ ಒಂದೠವಾಕà³à²¯à²¾à²‚ಶ, ಇಲà³à²²à²¿ ಪà³à²°à²¤à²¿ ಎರಡೠಅಂಕಿಗಳೠಒಂದೠಬೈಟà³â€Œ "
-"ಅನà³à²¨à³ ಪà³à²°à²¤à²¿à²¨à²¿à²§à²¿à²¸à³à²¤à³à²¤à²µà³†\n"
-"(b) ಹೆಕà³à²¸à²¾à²¡à³†à²¸à²¿à²®à²²à³ ಅಂಕಿಗಳಲà³à²²à²¿ ಬರೆಯಲಾದ ಖಾಲಿಜಾಗಗಳಿಂದ ಪà³à²°à²¤à³à²¯à³‡à²•à²¿à²¸à²²à²¾à²¦ ಪಟà³à²Ÿà²¿ "
-"(à²à²šà³à²›à²¿à²• 0x/0X ಪà³à²°à²¿à²«à²¿à²•à³à²¸à³, ಮತà³à²¤à³ ಎದà³à²°à²¿à²—ೆ ನಮೂದಿಸಲಾದ à²à²šà³à²›à²¿à²• 0 ಯೊಂದಿಗೆ).\n"
+"ಅನà³à²¨à³ "
+"ಪà³à²°à²¤à²¿à²¨à²¿à²§à²¿à²¸à³à²¤à³à²¤à²µà³†\n"
+"(b) ಹೆಕà³à²¸à²¾à²¡à³†à²¸à²¿à²®à²²à³ ಅಂಕಿಗಳಲà³à²²à²¿ ಬರೆಯಲಾದ ಖಾಲಿಜಾಗಗಳಿಂದ ಪà³à²°à²¤à³à²¯à³‡à²•à²¿à²¸à²²à²¾à²¦ ಪಟà³à²Ÿà²¿ (à²à²šà³à²›à²¿à²• "
+"0x/0X "
+"ಪà³à²°à²¿à²«à²¿à²•à³à²¸à³, ಮತà³à²¤à³ ಎದà³à²°à²¿à²—ೆ ನಮೂದಿಸಲಾದ à²à²šà³à²›à²¿à²• 0 ಯೊಂದಿಗೆ).\n"
"\n"
"ಉದಾಹರಣೆಗಳà³: ab0455a6ea3a74C2\n"
" ab 4 55 0xa6 ea 3a 74 C2\n"
-#: ../cli/src/settings.c:2686
+#: ../clients/cli/settings.c:2930
#, c-format
msgid ""
"Enter a list of bonding options formatted as:\n"
@@ -4416,17 +5036,22 @@ msgstr ""
"\n"
"ಉದಾಹರಣೆ: mode=2,miimon=120\n"
-#: ../cli/src/settings.c:2727
+#: ../clients/cli/settings.c:2968
#, c-format
msgid "'%s' is not a valid InfiniBand MAC"
msgstr "'%s' ಎನà³à²¨à³à²µà³à²¦à³ ಮಾನà³à²¯à²µà²¾à²¦ InfiniBand MAC ಅಲà³à²²"
-#: ../cli/src/settings.c:2765
+#: ../clients/cli/settings.c:3005
#, c-format
msgid "'%s' is not a valid IBoIP P_Key"
msgstr "'%s\" ಯೠಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ IBoIP P_Key ಆಗಿಲà³à²²"
-#: ../cli/src/settings.c:2825
+#: ../clients/cli/settings.c:3074 ../clients/cli/settings.c:3420
+#, c-format
+msgid "the property doesn't contain DNS server '%s'"
+msgstr "ಗà³à²£à²µà³ DNS ಪೂರೈಕೆಗಣಕ '%s' ಅನà³à²¨à³ ಹೊಂದಿಲà³à²²"
+
+#: ../clients/cli/settings.c:3086
msgid ""
"Enter a list of IPv4 addresses of DNS servers.\n"
"\n"
@@ -4436,12 +5061,22 @@ msgstr ""
"\n"
"ಉದಾಹರಣೆ: 8.8.8.8, 8.8.4.4\n"
-#: ../cli/src/settings.c:2871 ../cli/src/settings.c:3123
+#: ../clients/cli/settings.c:3122 ../clients/cli/settings.c:3474
+#, c-format
+msgid "the property doesn't contain DNS search domain '%s'"
+msgstr "ಗà³à²£à²µà³ DNS ಹà³à²¡à³à²•à³ ಡೊಮೇನೠ'%s' ಅನà³à²¨à³ ಹೊಂದಿಲà³à²²"
+
+#: ../clients/cli/settings.c:3142 ../clients/cli/settings.c:3494
#, c-format
msgid "'%s' is not valid (use ip[/prefix] [gateway])"
msgstr "'%s' ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²² (ip[/prefix] [gateway] ಅನà³à²¨à³ ಬಳಸಿ)"
-#: ../cli/src/settings.c:2897
+#: ../clients/cli/settings.c:3191 ../clients/cli/settings.c:3542
+#, c-format
+msgid "the property doesn't contain IP address '%s'"
+msgstr "ಗà³à²£à²µà³ IP ವಿಳಾಸ '%s' ಅನà³à²¨à³ ಹೊಂದಿಲà³à²²"
+
+#: ../clients/cli/settings.c:3204
msgid ""
"Enter a list of IPv4 addresses formatted as:\n"
" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
@@ -4455,28 +5090,50 @@ msgstr ""
"ಇಲà³à²²à²¦à³† ಇರà³à²µ ಪà³à²°à²¿à²«à²¿à²•à³à²¸à²¨à³à²¨à³ 32 ರ ಪà³à²°à²¿à²«à²¿à²•à³à²¸à³ ಎಂದೠಪರಿಗಣಿಸಲಾಗà³à²¤à³à²¤à²¦à³†.\n"
"ಉದಾಹರಣೆ: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
-#: ../cli/src/settings.c:2954
+#: ../clients/cli/settings.c:3257 ../clients/cli/settings.c:3573
#, c-format
-msgid "'%s' is not valid (use ip/[prefix] next-hop [metric])"
-msgstr "'%s' ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²² (ip/[prefix] next-hop [metric] ಅನà³à²¨à³ ಬಳಸಿ)"
+#| 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/[prefix] [next-hop] [metric])"
-#: ../cli/src/settings.c:2980
+#: ../clients/cli/settings.c:3305 ../clients/cli/settings.c:3621
+#, c-format
+#| msgid "the property can't be changed"
+msgid "the property doesn't contain route '%s'"
+msgstr "ಗà³à²£à²µà³ '%s' ರೌಟà³â€Œ ಅನà³à²¨à³ ಹೊಂದಿರà³à²µà³à²¦à²¿à²²à³à²²"
+
+#: ../clients/cli/settings.c:3318
+#| 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"
+" ip[/prefix] [next-hop] [metric],...\n"
+"\n"
"Missing prefix is regarded as a prefix of 32.\n"
-"Missing metric is regarded as a metric of 0.\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"
-"Example: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\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/[prefix] next-hop [metric],... \n"
-"ಇಲà³à²²à²¦à³† ಇರà³à²µ ಪà³à²°à²¿à²«à²¿à²•à³à²¸à²¨à³à²¨à³ 32 ರ ಪà³à²°à²¿à²«à²¿à²•à³à²¸à³ ಎಂದೠಪರಿಗಣಿಸಲಾಗà³à²¤à³à²¤à²¦à³†.\n"
-"ಇಲà³à²²à²¦à³† ಇರà³à²µ ಮೆಟà³à²°à²¿à²•à³ ಅನà³à²¨à³ 0 ಯ ಮೆಟà³à²°à²¿à²•à³ ಆಗಿ ಪರಿಗಣಿಸಲಾಗà³à²¤à³à²¤à²¦à³†.\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:3071
+#: ../clients/cli/settings.c:3432
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 "
@@ -4489,21 +5146,22 @@ msgid ""
msgstr ""
"DNS ಪೂರೈಕೆಗಣಕಗಳ IPv6 ವಿಳಾಸಗಳನà³à²¨à³ ನಮೂದಿಸಿ. IPv6 ಸಂರಚನೆಯ ವಿಧಾನವೠ'auto' "
"ಆಗಿದà³à²¦à²²à³à²²à²¿ ಈ DNS ಪೂರೈಕೆಗಣಕಗಳಿಗೆ ಸà³à²µà²¯à²‚ಚಾಲಿತ ಸಂರಚನೆಯಿಂದ ದೊರೆತ ಮೌಲà³à²¯à²—ಳನà³à²¨à³ "
-"ಸೇರಿಸಲಾಗà³à²¤à³à²¤à²¦à³† (ಯಾವà³à²¦à²¾à²¦à²°à³‚ ಇದà³à²¦à²²à³à²²à²¿). DNS ಪೂರೈಕೆಗಣಕಗಳನà³à²¨à³ 'shared' ಅಥವ "
-"'link-local' IPv6 ಸಂರಚನಾ ವಿಧಾನಗಳೊಡನೆ ಬಳಸಲೠಸಾಧà³à²¯à²µà²¿à²°à³à²µà³à²¦à²¿à²²à³à²², à²à²•à³†à²‚ದರೆ ಯಾವà³à²¦à³† "
-"ಅಪà³â€Œà²¸à³à²Ÿà³à²°à³€à²®à³ ಜಾಲಬಂಧವೠಇರà³à²µà³à²¦à²¿à²²à³à²². ಮಿಕà³à²•à³à²³à²¿à²¦ ಎಲà³à²²à²¾ IPv6 ಸಂರಚನಾ ವಿಧಾನಗಳಲà³à²²à²¿, ಈ "
-"DNS ಪೂರೈಕೆಗಣಕಗಳನà³à²¨à³ ಈ ಸಂಪರà³à²•à²•à³à²•à³† ಮಾತà³à²°à²µà²¾à²¦ DNS ಪೂರೈಕೆಗಣಕಗಳಾಗಿ ಬಳಸಲಾಗà³à²¤à³à²¤à²¦à³†.\n"
+"ಸೇರಿಸಲಾಗà³à²¤à³à²¤à²¦à³† (ಯಾವà³à²¦à²¾à²¦à²°à³‚ ಇದà³à²¦à²²à³à²²à²¿). 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
+#: ../clients/cli/settings.c:3555
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"
+"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"
@@ -4511,45 +5169,55 @@ msgstr ""
"ಇಲà³à²²à²¦à³† ಇರà³à²µ ಪà³à²°à²¿à²«à²¿à²•à³à²¸à²¨à³à²¨à³ 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
+#: ../clients/cli/settings.c:3634
+#| 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"
+" ip[/prefix] [next-hop] [metric],...\n"
+"\n"
"Missing prefix is regarded as a prefix of 128.\n"
-"Missing metric is regarded as a metric of 0.\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"
-"Example: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
+"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"
+"ಹೀಗೆ ವಿನà³à²¯à²¾à²¸à²—ೊಳಿಸಲಾದ IPv4 ರೌಟà³â€Œà²—ಳ ಪಟà³à²Ÿà²¿à²¯à²¨à³à²¨à³ ನಮೂದಿಸಿ:\n"
" ip/[prefix] next-hop [metric],... \n"
-"ಇಲà³à²²à²¦à³† ಇರà³à²µ ಪà³à²°à²¿à²«à²¿à²•à³à²¸à²¨à³à²¨à³ 32 ರ ಪà³à²°à²¿à²«à²¿à²•à³à²¸à³ ಎಂದೠಪರಿಗಣಿಸಲಾಗà³à²¤à³à²¤à²¦à³†.\n"
-"ಇಲà³à²²à²¦à³† ಇರà³à²µ ಮೆಟà³à²°à²¿à²•à³ ಅನà³à²¨à³ 0 ಯ ಮೆಟà³à²°à²¿à²•à³ ಆಗಿ ಪರಿಗಣಿಸಲಾಗà³à²¤à³à²¤à²¦à³†.\n"
"\n"
-"ಉದಾಹರಣೆ: / 2 , 00/ 1\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"
-#: ../cli/src/settings.c:3219
+#: ../clients/cli/settings.c:3658
#, c-format
msgid "'%s' is not valid; use 0, 1, or 2"
msgstr "'%s' ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²; [0, 1 ಅಥವ 2] ಅನà³à²¨à³ ಬಳಸಿ"
-#: ../cli/src/settings.c:3236
+#: ../clients/cli/settings.c:3675
#, c-format
msgid "'%s' is not a valid channel; use <1-13>"
msgstr "'%s' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಚಾನಲೠಅಲà³à²²; <1-13> ಅನà³à²¨à³ ಬಳಸಿ"
-#: ../cli/src/settings.c:3257
+#: ../clients/cli/settings.c:3696
#, c-format
msgid "'%s' is not valid; use [e, o, n]"
msgstr "'%s' ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²; [e, o, n] ಅನà³à²¨à³ ಬಳಸಿ"
-#: ../cli/src/settings.c:3285
+#: ../clients/cli/settings.c:3724
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 "
@@ -4561,27 +5229,58 @@ msgid ""
msgstr ""
"nmcli ಯೠನೇರವಾದ JSON ಸಂರಚನಾ ದತà³à²¤à²¾à²‚ಶ ಮತà³à²¤à³ ಸಂರಚನೆಯನà³à²¨à³ ಹೊಂದಿರà³à²µ ಕಡತದ ಹೆಸರೠ"
"ಎರಡನà³à²¨à³‚ ಸಹ ಅಂಗೀಕರಿಸà³à²¤à³à²¤à²¦à³†. ಎರಡನೆಯ ಸಂದರà³à²­à²¦à²²à³à²²à²¿, ಕಡತವನà³à²¨à³ ಓದಿ ನಂತರ "
-"ಅದರಲà³à²²à²¿à²°à³à²µà³à²¦à²¨à³à²¨à³ ಈ ಗà³à²£à²•à³à²•à³† ಸೇರಿಸಲಾಗà³à²¤à³à²¤à²¦à³†.\n"
+"ಅದರಲà³à²²à²¿à²°à³à²µà³à²¦à²¨à³à²¨à³ ಈ "
+"ಗà³à²£à²•à³à²•à³† ಸೇರಿಸಲಾಗà³à²¤à³à²¤à²¦à³†.\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
+#: ../clients/cli/settings.c:3764
msgid "no priority to remove"
msgstr "ತೆಗೆದà³à²¹à²¾à²•à²²à³ ಯಾವà³à²¦à³† ಆದà³à²¯à²¤à³† ಇಲà³à²²"
-#: ../cli/src/settings.c:3329
+#: ../clients/cli/settings.c:3768
#, c-format
msgid "index '%d' is not in the range of <0-%d>"
msgstr "'%d' ಸೂಚಿಯೠ<0-%d> ವà³à²¯à²¾à²ªà³à²¤à²¿à²¯ ಹೊರಗಿದೆ"
-#: ../cli/src/settings.c:3444
+#: ../clients/cli/settings.c:3807
+#, c-format
+msgid ""
+"Warning: only one mapping at a time is supported; taking the first one (%s)\n"
+msgstr ""
+"ಎಚà³à²šà²°à²¿à²•à³†: ಒಂದೠಬಾರಿಗೆ ಕೇವಲ ಒಂದೠಮà³à²¯à²¾à²ªà²¿à²‚ಗೠಅನà³à²¨à³ ಮಾತà³à²° ಬೆಂಬಲಿಸಲಾಗà³à²¤à³à²¤à²¦à³†; "
+"ಮೊದಲನೆಯದನà³à²¨à³ ತೆಗೆದà³à²•à³Šà²³à³à²³à²²à²¾à²—à³à²¤à³à²¤à²¿à²¦à³† (%s)\n"
+
+#: ../clients/cli/settings.c:3814
+#, c-format
+#| msgid "the property can't be changed"
+msgid "the property doesn't contain mapping '%s'"
+msgstr "ಗà³à²£à²µà³ '%s' ಮà³à²¯à²¾à²ªà²¿à²‚ಗೠಅನà³à²¨à³ ಹೊಂದಿರà³à²µà³à²¦à²¿à²²à³à²²"
+
+#: ../clients/cli/settings.c:3923 ../clients/cli/settings.c:4091
+#: ../libnm-core/nm-setting-wired.c:624
+#: ../libnm-core/nm-setting-wireless.c:801
+#: ../libnm-core/nm-setting-wireless.c:813
+#: ../libnm-util/nm-setting-wired.c:648
+#: ../libnm-util/nm-setting-wireless.c:840
+#: ../libnm-util/nm-setting-wireless.c:854
+#, c-format
+msgid "'%s' is not a valid MAC address"
+msgstr "'%s' ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ MAC ವಿಳಾಸವಲà³à²²"
+
+#: ../clients/cli/settings.c:3929 ../clients/cli/settings.c:4097
+#, c-format
+msgid "the property doesn't contain MAC address '%s'"
+msgstr "ಗà³à²£à²µà³ MAC ವಿಳಾಸ '%s' ಅನà³à²¨à³ ಹೊಂದಿರà³à²µà³à²¦à²¿à²²à³à²²"
+
+#: ../clients/cli/settings.c:3948
#, c-format
msgid "'%s' is not valid; 3 strings should be provided"
msgstr "'%s' ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²; 3 ವಾಕà³à²¯à²¾à²‚ಶಗಳನà³à²¨à³ ಒದಗಿಸಬೇಕà³"
-#: ../cli/src/settings.c:3463
+#: ../clients/cli/settings.c:3967
msgid ""
"Enter a list of three channels (comma or space separated).\n"
"\n"
@@ -4592,7 +5291,7 @@ msgstr ""
"\n"
"ಉದಾಹರಣೆ: 0.0.0e20 0.0.0e21 0.0.0e22\n"
-#: ../cli/src/settings.c:3513
+#: ../clients/cli/settings.c:4017
#, c-format
msgid ""
"Enter a list of S/390 options formatted as:\n"
@@ -4603,158 +5302,202 @@ msgstr ""
" option = <value>, option = <value>,... \n"
"ಮಾನà³à²¯à²µà²¾à²¦ ಆಯà³à²•à³†à²—ಳೆಂದರೆ: %s\n"
-#: ../cli/src/settings.c:3559
+#: ../clients/cli/settings.c:4063
#, c-format
msgid "'%s' is not a valid channel"
msgstr "'%s' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಚಾನಲೠಅಲà³à²²"
-#: ../cli/src/settings.c:3565
+#: ../clients/cli/settings.c:4069
#, c-format
msgid "'%ld' is not a valid channel"
msgstr "'%ld' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಚಾನಲೠಅಲà³à²²"
-#: ../cli/src/settings.c:3668 ../cli/src/settings.c:3671
+#: ../clients/cli/settings.c:4156 ../clients/cli/settings.c:4194
+#: ../clients/cli/settings.c:4232
+#, c-format
+msgid "the property doesn't contain protocol '%s'"
+msgstr "'%s' ಪà³à²°à³Šà²Ÿà³Šà²•à²¾à²²à³ ಗà³à²£à²µà²¨à³à²¨à³ ಹೊಂದಿರà³à²µà³à²¦à²¿à²²à³à²²"
+
+#: ../clients/cli/settings.c:4271
+#, c-format
+msgid ""
+"'%s' not compatible with %s '%s', please change the key or set the right %s "
+"first."
+msgstr ""
+"'%s' ಎನà³à²¨à³à²µà³à²¦à³ %s '%s' ಎಂಬà³à²¦à²•à³à²•à³† ಹೊಂದಿಕೆಯಾಗà³à²µà³à²¦à²¿à²²à³à²², ದಯವಿಟà³à²Ÿà³ ಕೀಲಿಯನà³à²¨à³ "
+"ಬದಲಾಯಿಸಿ ಅಥವ ಮೊದಲೠಸರಿಯಾದ %s ಅನà³à²¨à³ ಹೊಂದಿಸಿ."
+
+#: ../clients/cli/settings.c:4279
#, c-format
msgid "WEP key is guessed to be of '%s'\n"
msgstr "WEP ಕೀಲಿಯನà³à²¨à³ '%s' ಎಂದೠಊಹಿಸಲಾಗಿದೆ\n"
-#: ../cli/src/settings.c:3695
+#: ../clients/cli/settings.c:4281
+#, c-format
+#| msgid "WEP key is guessed to be of '%s'\n"
+msgid "WEP key index set to '%d'\n"
+msgstr "WEP ಕೀಲಿಯನà³à²¨à³ '%d' ಎಂದೠಹೊಂದಿಸಲಾಗಿದೆ\n"
+
+#: ../clients/cli/settings.c:4304
#, 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
+#: ../clients/cli/settings.c:4320 ../clients/cli/settings.c:4323
+#: ../clients/cli/settings.c:4326 ../clients/cli/settings.c:4329
+#, c-format
+msgid ""
+"Warning: '%s' is not compatible with '%s' type, please change or delete the "
+"key.\n"
+msgstr ""
+"ಎಚà³à²šà²°à²¿à²•à³†: '%s' ಎನà³à²¨à³à²µà³à²¦à³ '%s' ಬಗೆಯೊಂದಿಗೆ ಹೊಂದಿಕೆಯಾಗà³à²µà³à²¦à²¿à²²à³à²², ದಯವಿಟà³à²Ÿà³ "
+"ಕೀಲಿಯನà³à²¨à³ ಬದಲಾಯಿಸಿ ಅಥವ ಅಳಿಸಿ.\n"
+
+#: ../clients/cli/settings.c:4342
#, 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"
+"WEP ಕೀಲಿಗಳ ಬಗೆಯನà³à²¨à³ ನಮೂದಿಸಿ. ಅಂಗೀಕರಿಸಲಾಗà³à²µ ಮೌಲà³à²¯à²—ಳೆಂದರೆ: 0 ಅಥವ unknown, 1 ಅಥವ "
+"key, ಮತà³à²¤à³ 2 ಅಥವ passphrase.\n"
-#: ../cli/src/settings.c:3728
+#: ../clients/cli/settings.c:4355
#, c-format
msgid "'%s' is not a valid PSK"
msgstr "'%s' ಯೠಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ PSK ಆಗಿಲà³à²²"
-#: ../cli/src/settings.c:3772
+#: ../clients/cli/settings.c:4399
#, c-format
msgid "'%s' is not a valid DCB flag"
msgstr "'%s' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ DCB ಫà³à²²à³à²¯à²¾à²—ೠಆಗಿಲà³à²²"
-#: ../cli/src/settings.c:3795
+#: ../clients/cli/settings.c:4422
#, c-format
msgid "'%s' is not a DCB app priority"
msgstr "'%s' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠDCB app ಆದà³à²¯à²¤à³† ಆಗಿಲà³à²²"
-#: ../cli/src/settings.c:3821
+#: ../clients/cli/settings.c:4448
msgid "must contain 8 comma-separated numbers"
msgstr "8 ವಿರಾಮಚಿಹà³à²¨à³†à²—ಳಿಂದ ಪà³à²°à²¤à³à²¯à³‡à²•à²¿à²¸à²²à²¾à²¦ ಸಂಖà³à²¯à³†à²—ಳನà³à²¨à³ ಹೊಂದಿರಬೇಕà³"
-#: ../cli/src/settings.c:3838
+#: ../clients/cli/settings.c:4465
#, c-format
msgid "'%s' not a number between 0 and %u (inclusive) or %u"
msgstr ""
"'%s' ಎನà³à²¨à³à²µà³à²¦à³ 0 ಮತà³à²¤à³ %u (ಅದೂ ಸೇರಿದಂತೆ) ಅಥವ %u ನಡà³à²µà²¿à²¨ ಒಂದೠಸಂಖà³à²¯à³†à²¯à²¾à²—ಿಲà³à²²"
-#: ../cli/src/settings.c:3841
+#: ../clients/cli/settings.c:4468
#, c-format
msgid "'%s' not a number between 0 and %u (inclusive)"
msgstr "'%s' ಎನà³à²¨à³à²µà³à²¦à³ 0 ಮತà³à²¤à³ %u (ಅದೂ ಸೇರಿದಂತೆ) ನಡà³à²µà²¿à²¨ ಒಂದೠಸಂಖà³à²¯à³†à²¯à²¾à²—ಿಲà³à²²"
-#: ../cli/src/settings.c:3863
+#: ../clients/cli/settings.c:4490
#, c-format
-msgid "Warning: changes will have no effect until '%s' includes 1 (enabled)\n"
+msgid ""
+"Warning: changes will have no effect until '%s' includes 1 (enabled)\n"
"\n"
msgstr ""
-"ಎಚà³à²šà²°à²¿à²•à³†: '%s' ಎನà³à²¨à³à²µà³à²¦à³ 1 (ಸಕà³à²°à²¿à²¯à²—ೊಂಡ) ಅನà³à²¨à³ ಹೊಂದಿರà³à²µà²µà²°à³†à²—ೆ ಬದಲಾವಣೆಗಳೠ"
-"ಯಾವà³à²¦à³† ಪರಿಣಾಮ ಬೀರà³à²µà³à²¦à²¿à²²à³à²²\n"
+"ಎಚà³à²šà²°à²¿à²•à³†: '%s' ಎನà³à²¨à³à²µà³à²¦à³ 1 (ಸಕà³à²°à²¿à²¯à²—ೊಂಡ) ಅನà³à²¨à³ ಹೊಂದಿರà³à²µà²µà²°à³†à²—ೆ ಬದಲಾವಣೆಗಳೠಯಾವà³à²¦à³† "
+"ಪರಿಣಾಮ ಬೀರà³à²µà³à²¦à²¿à²²à³à²²\n"
"\n"
-#: ../cli/src/settings.c:3916
+#: ../clients/cli/settings.c:4543
#, c-format
msgid "bandwidth percentages must total 100%%"
msgstr "ಬà³à²¯à²¾à²‚ಡà³â€Œà²µà²¿à²¡à³à²¤à³ ಪà³à²°à²¤à²¿à²¶à²¤à²—ಳೠಒಟà³à²Ÿà³ 100%% ಆಗಿರಬೇಕà³"
-#: ../cli/src/settings.c:5594
+#: ../clients/cli/settings.c:6186
msgid "don't know how to get the property value"
msgstr "ಗà³à²£à²¦ ಮೌಲà³à²¯à²•à³à²•à³† ಹೇಗೆ ಹೋಗಬೇಕೠಎಂದೠತಿಳಿದಿಲà³à²²"
-#: ../cli/src/settings.c:5647 ../cli/src/settings.c:5687
+#: ../clients/cli/settings.c:6239 ../clients/cli/settings.c:6279
msgid "the property can't be changed"
msgstr "ಗà³à²£à²µà²¨à³à²¨à³ ಬದಲಾಯಿಸಲೠಸಾಧà³à²¯à²µà²¿à²²à³à²²"
-#: ../cli/src/settings.c:5791
+#: ../clients/cli/settings.c:6362
+#| msgid "unavailable"
+msgid "(not available)"
+msgstr "(ಲಭà³à²¯à²µà²¿à²²à³à²²)"
+
+#: ../clients/cli/settings.c:6387
msgid "[NM property description]"
msgstr "[NM ಗà³à²£à²¦ ವಿವರಣೆ]"
-#: ../cli/src/settings.c:5797
+#: ../clients/cli/settings.c:6392
msgid "[nmcli specific description]"
msgstr "[nmcli ನಿಶà³à²šà²¿à²¤ ವಿವರಣೆ]"
-#: ../cli/src/utils.c:111
+#: ../clients/cli/utils.c:127
#, c-format
msgid "Error: value for '%s' argument is required."
msgstr "ದೋಷ: '%s' ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œà²¨ ಮೌಲà³à²¯à²¦ ಅಗತà³à²¯à²µà²¿à²¦à³†."
-#: ../cli/src/utils.c:136
+#: ../clients/cli/utils.c:152
#, c-format
msgid "Error: Argument '%s' was expected, but '%s' provided."
msgstr "ದೋಷ: '%s' ಅನà³à²¨à³ ನಿರೀಕà³à²·à²¿à²¸à²²à²¾à²—ಿತà³à²¤à³, ಆದರೆ '%s' ಅನà³à²¨à³ ನೀಡಲಾಗಿದೆ."
-#: ../cli/src/utils.c:139
+#: ../clients/cli/utils.c:155
#, c-format
msgid "Error: Unexpected argument '%s'"
msgstr "ದೋಷ: ಅನಿರೀಕà³à²·à²¿à²¤ ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟೠ'%s'"
-#: ../cli/src/utils.c:189
+#: ../clients/cli/utils.c:205
#, c-format
msgid "Error converting IP4 address '0x%X' to text form"
msgstr "ಇದರಿಂದ IP4 ವಿಳಾಸ '0x%X' ಅನà³à²¨à³ ಪಠà³à²¯à²µà²¾à²—ಿ ಪರಿವರà³à²¤à²¿à²¸à³à²µà²²à³à²²à²¿ ದೋಷ"
-#: ../cli/src/utils.c:217
+#: ../clients/cli/utils.c:233
#, c-format
msgid "Error converting IP6 address '%s' to text form"
msgstr "ಇದರಿಂದ IP6 ವಿಳಾಸ '%s' ಅನà³à²¨à³ ಪಠà³à²¯à²µà²¾à²—ಿ ಪರಿವರà³à²¤à²¿à²¸à³à²µà²²à³à²²à²¿ ದೋಷ"
-#: ../cli/src/utils.c:393
+#: ../clients/cli/utils.c:407
+#, c-format
+#| msgid "'%s' is ambiguous (%s x %s)"
+msgid "'%s' is ambiguous (on x off)"
+msgstr "'%s' ಎಂಬà³à²¦à³ ಅಸà³à²ªà²·à³à²Ÿà²µà²¾à²—ಿದೆ (ಆನೠx ಆಫà³)"
+
+#: ../clients/cli/utils.c:417
#, c-format
msgid "'%s' is not valid; use [%s] or [%s]"
msgstr "'%s' ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²; [%s] ಅಥವ [%s] ಅನà³à²¨à³ ಬಳಸಿ"
-#: ../cli/src/utils.c:475
+#: ../clients/cli/utils.c:499
#, c-format
msgid "'%s' is ambiguous (%s x %s)"
msgstr "'%s' ಎಂಬà³à²¦à³ ಅಸà³à²ªà²·à³à²Ÿà²µà²¾à²—ಿದೆ (%s x %s)"
-#: ../cli/src/utils.c:487
+#: ../clients/cli/utils.c:511
#, c-format
msgid "missing name, try one of [%s]"
msgstr "ಹೆಸರೠಕಾಣಿಸà³à²¤à³à²¤à²¿à²²à³à²², [%s] ನಲà³à²²à²¿ ಒಂದನà³à²¨à³ ಪà³à²°à²¯à²¤à³à²¨à²¿à²¸à²¿"
-#: ../cli/src/utils.c:718
+#: ../clients/cli/utils.c:728
#, c-format
msgid "field '%s' has to be alone"
msgstr "'%s' ಎಂಬ ಕà³à²·à³‡à²¤à³à²°à²µà³ ಒಂಟಿಯಾಗಿಯೆ ಇರಬೇಕà³"
-#: ../cli/src/utils.c:720
+#: ../clients/cli/utils.c:731
#, c-format
msgid "invalid field '%s'; allowed fields: %s"
msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ ಸà³à²¥à²³ '%s'; ಅನà³à²®à²¤à²¿ ಇರà³à²µ ಸà³à²¥à²³à²—ಳà³: %s"
-#: ../cli/src/utils.c:747
+#: ../clients/cli/utils.c:788
msgid "Option '--terse' requires specifying '--fields'"
msgstr "'--terse' ಎಂಬ ಆಯà³à²•à³†à²—ೆ '--fields' ಅನà³à²¨à³ ಸೂಚಿಸಬೇಕಾಗà³à²¤à³à²¤à²¦à³†"
-#: ../cli/src/utils.c:751
+#: ../clients/cli/utils.c:792
#, c-format
msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
msgstr ""
"'--terse' ಎಂಬ ಆಯà³à²•à³†à²—ೆ ನಿಶà³à²šà²¿à²¤à²µà²¾à²¦ '--fields' ಆಯà³à²•à³†à²¯ ಮೌಲà³à²¯à²¦ ಅಗತà³à²¯à²µà²¿à²°à³à²¤à³à²¤à²¦à³†à²¯à³† "
-"ಹೊರತà³, '%s' ಎಂಬà³à²¦à²²à³à²²"
+"ಹೊರತà³, "
+"'%s' ಎಂಬà³à²¦à²²à³à²²"
-#: ../cli/src/utils.c:1070
+#: ../clients/cli/utils.c:1111
#, c-format
msgid ""
"Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --"
@@ -4763,7 +5506,7 @@ msgstr ""
"ಎಚà³à²šà²°à²¿à²•à³†: nmcli (%s) ಮತà³à²¤à³ NetworkManager (%s) ಆವೃತà³à²¤à²¿à²—ಳೠತಾಳೆಯಾಗà³à²¤à³à²¤à²¿à²²à³à²². "
"ಎಚà³à²šà²°à²¿à²•à³†à²¯à²¨à³à²¨à³ ಮರೆಮಾಚಲೠ--nocheck ಬಳಸà³.\n"
-#: ../cli/src/utils.c:1079
+#: ../clients/cli/utils.c:1120
#, c-format
msgid ""
"Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force "
@@ -4774,698 +5517,1883 @@ msgstr ""
"ಅನಿರೀಕà³à²·à²¿à²¤à²µà²¾à²—ಿರà³à²¤à³à²¤à²µà³†.\n"
"."
-#: ../libnm-util/crypto.c:133
+#: ../clients/nm-online.c:96
+#, c-format
+msgid "\rConnecting"
+msgstr "\rಸಂಪರà³à²• ಕಲà³à²ªà²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¿à²¦à³†"
+
+#: ../clients/nm-online.c:149
+msgid ""
+"Time to wait for a connection, in seconds (without the option, default value "
+"is 30)"
+msgstr ""
+"ಒಂದೠಸಂಪರà³à²•à²•à³à²•à³† ಕಾಯಬೇಕಿರà³à²µ ಸಮಯ (ಈ ಆಯà³à²•à³† ಇಲà³à²²à²¦à³†, ಪೂರà³à²µà²¨à²¿à²¯à³‹à²œà²¿à²¤à²µà³ ಮೌಲà³à²¯à²µà³ 30 "
+"ಆಗಿರà³à²¤à³à²¤à²¦à³†)"
+
+#: ../clients/nm-online.c:150
+#| msgid "Exit immediately if NetworkManager is not running"
+msgid "Exit immediately if NetworkManager is not running or connecting"
+msgstr ""
+"NetworkManager ಸಂಪರà³à²•à²¿à²¤à²—ೊಳà³à²³à²¦à³† ಇದà³à²¦à²²à³à²²à²¿ ಅಥವ ಚಲಾಯಿತಗೊಳà³à²³à²¦à³† ಇದà³à²¦à²²à³à²²à²¿ ತಕà³à²·à²£à²µà³† "
+"ನಿರà³à²—ಮಿಸà³"
+
+#: ../clients/nm-online.c:151
+msgid "Don't print anything"
+msgstr "à²à²¨à²¨à³à²¨à³‚ ಮà³à²¦à³à²°à²¿à²¸à²¬à³‡à²¡"
+
+#: ../clients/nm-online.c:152
+#| msgid ""
+#| "Waits for NetworkManager to finish activating startup network connections."
+msgid "Wait for NetworkManager startup instead of a connection"
+msgstr "ಒಂದೠಸಂಪರà³à²•à²¦ ಬದಲಿಗೆ NetworkManager ಆರಂಭಗೊಳà³à²³à²²à³ ಕಾಯಲಾಗà³à²¤à³à²¤à²¦à³†"
+
+#: ../clients/nm-online.c:173
+msgid ""
+"Waits for NetworkManager to finish activating startup network connections."
+msgstr ""
+"ಆರಂಭಿಕ ಜಾಲಬಂಧ ಸಂಪರà³à²•à²—ಳನà³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸà³à²µà²‚ತೆ NetworkManager ಗೆ ಕಾಯಲಾಗà³à²¤à³à²¤à²¦à³†."
+
+#: ../clients/nm-online.c:180 ../clients/nm-online.c:186
+msgid "Invalid option. Please use --help to see a list of valid options."
+msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ ಆಯà³à²•à³†. ಮಾನà³à²¯à²µà²¾à²¦ ಆಯà³à²•à³†à²—ಳಿಗಾಗಿ ದಯವಿಟà³à²Ÿà³ --help ಅನà³à²¨à³ ನೋಡಿ."
+
+#: ../clients/tui/newt/nmt-newt-utils.c:180 ../clients/tui/nmt-editor.c:240
+#: ../clients/tui/nmt-password-dialog.c:175
+#: ../clients/tui/nmt-route-editor.c:135 ../clients/tui/nmtui-hostname.c:71
+#: ../clients/tui/nmtui.c:118
+msgid "OK"
+msgstr "ಸರಿ"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:328
+#: ../clients/tui/newt/nmt-newt-utils.c:360
+#, c-format
+msgid "Could not create temporary file: %s"
+msgstr "ತಾತà³à²•à²¾à²²à²¿à²• ಕಡತವನà³à²¨à³ ರಚಿಸಲಾಗಿಲà³à²²: %s"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:368
+#, c-format
+msgid "Editor failed: %s"
+msgstr "ಸಂಪಾದಕವೠವಿಫಲಗೊಂಡಿದೆ: %s"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:376
+#, c-format
+#| msgid "Editor failed: %s"
+msgid "Editor failed with status %d"
+msgstr "ಸಂಪಾದಕವೠ%d ಸà³à²¥à²¿à²¤à²¿à²¯à³Šà²‚ದಿಗೆ ವಿಫಲಗೊಂಡಿದೆ"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:378
+#, c-format
+#| msgid "Editor failed: %s"
+msgid "Editor failed with signal %d"
+msgstr "ಸಂಪಾದಕವೠ%d ಸಂಕೇತದೊಂದಿಗೆ ವಿಫಲಗೊಂಡಿದೆ"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:382
+#, c-format
+msgid "Could not re-read file: %s"
+msgstr "ಕಡತವನà³à²¨à³ ಪà³à²¨à²ƒ-ಓದಲಾಗಿಲà³à²²: %s"
+
+#: ../clients/tui/nm-editor-utils.c:151
+#, c-format
+msgid "Ethernet connection %d"
+msgstr "ಎತರà³à²¨à³†à²Ÿà³ ಸಂಪರà³à²• %d"
+
+#: ../clients/tui/nm-editor-utils.c:159
+#, c-format
+msgid "Wi-Fi connection %d"
+msgstr "ವೈ-ಫೈ ಸಂಪರà³à²• %d"
+
+#: ../clients/tui/nm-editor-utils.c:168
+#, c-format
+msgid "InfiniBand connection %d"
+msgstr "InfiniBand ಸಂಪರà³à²• %d"
+
+#: ../clients/tui/nm-editor-utils.c:173 ../libnm-glib/nm-device.c:1798
+msgid "Mobile Broadband"
+msgstr "ಮೊಬೈಲೠಬà³à²°à²¾à²¡à³â€Œà²¬à³à²¯à²¾à²‚ಡà³"
+
+#: ../clients/tui/nm-editor-utils.c:176
+#, c-format
+msgid "Mobile broadband connection %d"
+msgstr "ಮೊಬೈಲೠಬà³à²°à²¾à²¡à³â€Œà²¬à³à²¯à²¾à²‚ಡೠಸಂಪರà³à²• %d"
+
+#: ../clients/tui/nm-editor-utils.c:182 ../clients/tui/nmt-page-dsl.c:39
+msgid "DSL"
+msgstr "DSL"
+
+#: ../clients/tui/nm-editor-utils.c:186
+#, c-format
+msgid "DSL connection %d"
+msgstr "DSL ಸಂಪರà³à²• %d"
+
+#: ../clients/tui/nm-editor-utils.c:191 ../libnm-core/nm-connection.c:1503
+#: ../libnm-glib/nm-device.c:1802 ../libnm-util/nm-connection.c:1606
+#: ../src/settings/plugins/ifcfg-rh/reader.c:3931
+msgid "Bond"
+msgstr "ಬಾಂಡà³"
+
+#: ../clients/tui/nm-editor-utils.c:195
+#, c-format
+msgid "Bond connection %d"
+msgstr "ಬಾಂಡೠಸಂಪರà³à²• %d"
+
+#: ../clients/tui/nm-editor-utils.c:200 ../libnm-core/nm-connection.c:1507
+#: ../libnm-glib/nm-device.c:1806 ../libnm-util/nm-connection.c:1610
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4219
+msgid "Bridge"
+msgstr "ಬà³à²°à²¿à²¡à³à²œà³â€"
+
+#: ../clients/tui/nm-editor-utils.c:205
+#, c-format
+msgid "Bridge connection %d"
+msgstr "ಬà³à²°à²¿à²¡à³à²œà³â€ ಸಂಪರà³à²• %d"
+
+#: ../clients/tui/nm-editor-utils.c:209 ../libnm-core/nm-connection.c:1505
+#: ../libnm-glib/nm-device.c:1804 ../libnm-util/nm-connection.c:1608
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4035
+msgid "Team"
+msgstr "ತಂಡ"
+
+#: ../clients/tui/nm-editor-utils.c:214
+#, c-format
+msgid "Team connection %d"
+msgstr "ತಂಡದ ಸಂಪರà³à²• %d"
+
+#: ../clients/tui/nm-editor-utils.c:222
+#, c-format
+msgid "VLAN connection %d"
+msgstr "VLAN ಸಂಪರà³à²• %d"
+
+#: ../clients/tui/nm-editor-utils.c:237
+#, c-format
+msgid "VPN connection %d"
+msgstr "VPN ಸಂಪರà³à²• %d"
+
+#: ../clients/tui/nmt-device-entry.c:371
+msgid "Select..."
+msgstr "ಆರಿಸà³..."
+
+#: ../clients/tui/nmt-edit-connection-list.c:129
+msgid "Add"
+msgstr "ಸೇರಿಸà³"
+
+#: ../clients/tui/nmt-edit-connection-list.c:132
+#: ../clients/tui/nmt-page-ip4.c:175 ../clients/tui/nmt-page-ip6.c:173
+#: ../clients/tui/nmt-page-team-port.c:110 ../clients/tui/nmt-page-team.c:174
+msgid "Edit..."
+msgstr "ಸಂಪಾದಿಸà³..."
+
+#: ../clients/tui/nmt-edit-connection-list.c:135
+#: ../clients/tui/nmtui-edit.c:471
+msgid "Delete"
+msgstr "ಅಳಿಸà³"
+
+#: ../clients/tui/nmt-editor.c:81
+#, c-format
+msgid "Could not create editor for connection '%s' of type '%s'."
+msgstr "'%s' ಸಂಪರà³à²•à²•à³à²•à²¾à²—ಿ ('%s' ಬಗೆ) ಸಂಪಾದಕವನà³à²¨à³ ರಚಿಸಲಾಗಿಲà³à²²."
+
+#: ../clients/tui/nmt-editor.c:85
+#, c-format
+msgid "Could not create editor for invalid connection '%s'."
+msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ '%s' ಸಂಪರà³à²•à²•à³à²•à²¾à²—ಿ ಸಂಪಾದಕವನà³à²¨à³ ರಚಿಸಲಾಗಿಲà³à²²."
+
+#: ../clients/tui/nmt-editor.c:95
+#| msgid "Edit connection"
+msgid "Edit Connection"
+msgstr "ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸಂಪಾದಿಸಿ"
+
+#: ../clients/tui/nmt-editor.c:139
+#, c-format
+msgid "Unable to save connection: %s"
+msgstr "ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಉಳಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s"
+
+#: ../clients/tui/nmt-editor.c:153
+#, c-format
+msgid "Unable to add new connection: %s"
+msgstr "ಹೊಸ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸೇರಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s"
+
+#: ../clients/tui/nmt-editor.c:237 ../clients/tui/nmt-password-dialog.c:172
+#: ../clients/tui/nmt-route-editor.c:128 ../clients/tui/nmtui-edit.c:192
+#: ../clients/tui/nmtui-edit.c:470 ../clients/tui/nmtui-hostname.c:69
+msgid "Cancel"
+msgstr "ರದà³à²¦à³à²—ೊಳಿಸà³"
+
+#: ../clients/tui/nmt-mtu-entry.c:86
+msgid "(default)"
+msgstr "(ಪೂರà³à²µà²¨à²¿à²¯à³‹à²œà²¿à²¤)"
+
+#: ../clients/tui/nmt-mtu-entry.c:88 ../clients/tui/nmt-mtu-entry.c:119
+msgid "bytes"
+msgstr "ಬೈಟà³â€Œà²—ಳà³"
+
+#: ../clients/tui/nmt-page-bond.c:88
+msgid "Round-robin"
+msgstr "ರೌಂಡà³-ರಾಬಿನà³"
+
+#: ../clients/tui/nmt-page-bond.c:89
+msgid "Active Backup"
+msgstr "ಸಕà³à²°à²¿à²¯ ಬà³à²¯à²¾à²•à³à²…ಪà³"
+
+#: ../clients/tui/nmt-page-bond.c:90
+msgid "XOR"
+msgstr "XOR"
+
+#: ../clients/tui/nmt-page-bond.c:91
+msgid "Broadcast"
+msgstr "ಪà³à²°à²¸à²¾à²°à²£à³†"
+
+#: ../clients/tui/nmt-page-bond.c:92
+msgid "802.3ad"
+msgstr "802.3ad"
+
+#: ../clients/tui/nmt-page-bond.c:93
+msgid "Adaptive Transmit Load Balancing (tlb)"
+msgstr "ಅಡಾಪà³à²Ÿà³€à²µà³ ಟà³à²°à²¾à²¨à³à²¸à³â€Œà²®à²¿à²Ÿà³ ಲೋಡೠಬà³à²¯à²¾à²²à³†à²¨à³à²¸à²¿à²‚ಗೠ(tlb)"
+
+#: ../clients/tui/nmt-page-bond.c:94
+msgid "Adaptive Load Balancing (alb)"
+msgstr "ಅಡಾಪà³à²Ÿà³€à²µà³ ಲೋಡೠಬà³à²¯à²¾à²²à³†à²¨à³à²¸à²¿à²‚ಗೠ(alb)"
+
+#: ../clients/tui/nmt-page-bond.c:100
+msgid "MII (recommended)"
+msgstr "MII (ಸಲಹೆ ಮಾಡಲಾಗà³à²µ)"
+
+#: ../clients/tui/nmt-page-bond.c:101
+msgid "ARP"
+msgstr "ARP"
+
+#: ../clients/tui/nmt-page-bond.c:353 ../clients/tui/nmt-page-bridge.c:80
+#: ../clients/tui/nmt-page-team.c:153
+msgid "Slaves"
+msgstr "ಸà³à²²à³‡à²µà³â€Œà²—ಳà³"
+
+#: ../clients/tui/nmt-page-bond.c:365 ../clients/tui/nmt-page-wifi.c:226
+msgid "Mode"
+msgstr "ಕà³à²°à²®"
+
+#: ../clients/tui/nmt-page-bond.c:371
+msgid "Primary"
+msgstr "ಪà³à²°à²¾à²¥à²®à²¿à²•"
+
+#: ../clients/tui/nmt-page-bond.c:377
+msgid "Link monitoring"
+msgstr "ಕೊಂಡಿಯ ಮೇಲà³à²µà²¿à²šà²¾à²°à²£à³†"
+
+#: ../clients/tui/nmt-page-bond.c:383 ../clients/tui/nmt-page-bond.c:390
+#: ../clients/tui/nmt-page-bond.c:397 ../clients/tui/nmt-page-bond.c:404
+msgctxt "milliseconds"
+msgid "ms"
+msgstr "ms"
+
+#: ../clients/tui/nmt-page-bond.c:384 ../clients/tui/nmt-page-bond.c:405
+msgid "Monitoring frequency"
+msgstr "ಫà³à²°à³€à²•à³à²µà³†à²¨à³à²¸à²¿ ಮೇಲà³à²µà²¿à²šà²¾à²°à²£à³†"
+
+#: ../clients/tui/nmt-page-bond.c:391
+msgid "Link up delay"
+msgstr "ಕೊಂಡಿ ಸಕà³à²°à²¿à²¯à²¦ ವಿಳಂಬ"
+
+#: ../clients/tui/nmt-page-bond.c:398
+msgid "Link down delay"
+msgstr "ಕೊಂಡಿ ನಿಷà³à²•à³à²°à²¿à²¯à²¦ ವಿಳಂಬ"
+
+#: ../clients/tui/nmt-page-bond.c:411
+msgid "ARP targets"
+msgstr "ARP ಗà³à²°à²¿à²—ಳà³"
+
+#: ../clients/tui/nmt-page-bridge-port.c:38
+msgid "BRIDGE PORT"
+msgstr "BRIDGE PORT"
+
+#: ../clients/tui/nmt-page-bridge-port.c:69
+#: ../clients/tui/nmt-page-bridge.c:106
+msgid "Priority"
+msgstr "ಆದà³à²¯à²¤à³†"
+
+#: ../clients/tui/nmt-page-bridge-port.c:75
+msgid "Path cost"
+msgstr "ಮಾರà³à²—ದ ದರ"
+
+#: ../clients/tui/nmt-page-bridge-port.c:77
+msgid "Hairpin mode"
+msgstr "ಹೇರà³à²ªà²¿à²¨à³ ಕà³à²°à²®"
+
+#: ../clients/tui/nmt-page-bridge.c:42
+msgid "BRIDGE"
+msgstr "BRIDGE"
+
+#: ../clients/tui/nmt-page-bridge.c:90 ../clients/tui/nmt-page-bridge.c:115
+#: ../clients/tui/nmt-page-bridge.c:125 ../clients/tui/nmt-page-bridge.c:135
+msgid "seconds"
+msgstr "ಸೆಕೆಂಡà³à²—ಳà³"
+
+#: ../clients/tui/nmt-page-bridge.c:91
+msgid "Aging time"
+msgstr "ಹಳೆಯದಾಗà³à²¤à³à²¤à²¿à²°à³à²µ ಸಮಯ"
+
+#: ../clients/tui/nmt-page-bridge.c:93
+msgid "Enable STP (Spanning Tree Protocol)"
+msgstr "STP ಅನà³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸೠ(ಸà³à²ªà²¾à²¨à²¿à²‚ಗೠಟà³à²°à³€ ಪà³à²°à³Šà²Ÿà³Šà²•à²¾à²²à³)"
+
+#: ../clients/tui/nmt-page-bridge.c:116
+msgid "Forward delay"
+msgstr "ಫಾರà³à²µà²¾à²°à³à²¡à³ ವಿಳಂಬ"
+
+#: ../clients/tui/nmt-page-bridge.c:126
+msgid "Hello time"
+msgstr "ಹೆಲೊ ಟೈಮà³"
+
+#: ../clients/tui/nmt-page-bridge.c:136
+msgid "Max age"
+msgstr "ಗರಿಷà³à²Ÿ ಕಾಲಾವಧಿ"
+
+#. 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)
+#.
+#: ../clients/tui/nmt-page-dsl.c:67 ../clients/tui/nmt-page-wifi.c:328
+#: ../clients/tui/nmt-secret-agent.c:206 ../clients/tui/nmt-secret-agent.c:301
+msgid "Username"
+msgstr "ಬಳಕೆದಾರಹೆಸರà³"
+
+#: ../clients/tui/nmt-page-dsl.c:76 ../clients/tui/nmt-page-wifi.c:273
+#: ../clients/tui/nmt-page-wifi.c:304 ../clients/tui/nmt-page-wifi.c:334
+#: ../clients/tui/nmt-secret-agent.c:211 ../clients/tui/nmt-secret-agent.c:248
+#: ../clients/tui/nmt-secret-agent.c:278 ../clients/tui/nmt-secret-agent.c:311
+#: ../clients/tui/nmt-secret-agent.c:380 ../clients/tui/nmt-secret-agent.c:393
+#: ../clients/tui/nmt-secret-agent.c:409
+msgid "Password"
+msgstr "ಗà³à²ªà³à²¤à²ªà²¦"
+
+#: ../clients/tui/nmt-page-dsl.c:79 ../clients/tui/nmt-secret-agent.c:306
+msgid "Service"
+msgstr "ಸೇವೆ"
+
+#: ../clients/tui/nmt-page-ethernet.c:41
+msgid "ETHERNET"
+msgstr "ETHERNET"
+
+#: ../clients/tui/nmt-page-ethernet.c:80 ../clients/tui/nmt-page-vlan.c:124
+#: ../clients/tui/nmt-page-wifi.c:357
+msgid "Cloned MAC address"
+msgstr "ತದà³à²°à³‚ಪà³à²—ೊಳಿಸಲಾದ MAC ವಿಳಾಸ"
+
+#: ../clients/tui/nmt-page-infiniband.c:40
+msgid "INFINIBAND"
+msgstr "INFINIBAND"
+
+#: ../clients/tui/nmt-page-infiniband.c:51
+msgid "Datagram"
+msgstr "ಡೇಟಾಗà³à²°à²¾à²®à³"
+
+#: ../clients/tui/nmt-page-infiniband.c:52
+msgid "Connected"
+msgstr "ಸಂಪರà³à²•à²¿à²¤à²—ೊಂಡಿದೆ"
+
+#: ../clients/tui/nmt-page-infiniband.c:90
+msgid "Transport mode"
+msgstr "ವರà³à²—ಾವಣೆ ಕà³à²°à²®"
+
+#: ../clients/tui/nmt-page-ip4.c:41
+msgid "Disabled"
+msgstr "ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಂಡ"
+
+#: ../clients/tui/nmt-page-ip4.c:42 ../clients/tui/nmt-page-ip6.c:42
+msgid "Automatic"
+msgstr "ಸà³à²µà²¯à²‚ಚಾಲಿತ"
+
+#: ../clients/tui/nmt-page-ip4.c:43 ../clients/tui/nmt-page-ip6.c:44
+msgid "Link-Local"
+msgstr "ಸà³à²¥à²³à³€à²¯-ಕೊಂಡಿ"
+
+#: ../clients/tui/nmt-page-ip4.c:44 ../clients/tui/nmt-page-ip6.c:45
+msgid "Manual"
+msgstr "ಕೈಯಾರೆ"
+
+#: ../clients/tui/nmt-page-ip4.c:45
+msgid "Shared"
+msgstr "ಹಂಚಲಾದ"
+
+#: ../clients/tui/nmt-page-ip4.c:54
+msgid "IPv4 CONFIGURATION"
+msgstr "IPv4 CONFIGURATION"
+
+#: ../clients/tui/nmt-page-ip4.c:100 ../clients/tui/nmt-page-ip6.c:100
+msgid "(No custom routes)"
+msgstr "(ಯಾವà³à²¦à³† ಅಗತà³à²¯à²¾à²¨à³à²—à³à²£ ರೌಟà³â€Œà²—ಳಿಲà³à²²)"
+
+#: ../clients/tui/nmt-page-ip4.c:103 ../clients/tui/nmt-page-ip6.c:103
+#, c-format
+msgid "One custom route"
+msgid_plural "%d custom routes"
+msgstr[0] "ಒಂದೠಅಗತà³à²¯à²¾à²¨à³à²—à³à²£ ರೌಟà³â€Œ"
+msgstr[1] "%d ಅಗತà³à²¯à²¾à²¨à³à²—à³à²£ ರೌಟà³â€Œà²—ಳà³"
+
+#: ../clients/tui/nmt-page-ip4.c:144 ../clients/tui/nmt-page-ip6.c:144
+msgid "Addresses"
+msgstr "ವಿಳಾಸಗಳà³"
+
+#: ../clients/tui/nmt-page-ip4.c:150 ../clients/tui/nmt-page-ip6.c:150
+msgid "Gateway"
+msgstr "ಗೇಟà³â€Œà²µà³‡"
+
+#: ../clients/tui/nmt-page-ip4.c:156 ../clients/tui/nmt-page-ip6.c:156
+msgid "DNS servers"
+msgstr "DNS ಪೂರೈಕೆಗಣಕಗಳà³"
+
+#: ../clients/tui/nmt-page-ip4.c:162 ../clients/tui/nmt-page-ip6.c:162
+msgid "Search domains"
+msgstr "ಹà³à²¡à³à²•à³ ಡೊಮೈನà³â€Œà²—ಳà³"
+
+#: ../clients/tui/nmt-page-ip4.c:177 ../clients/tui/nmt-page-ip6.c:175
+msgid "Routing"
+msgstr "ರೌಟೠಮಾಡà³à²µà²¿à²•à³†"
+
+#: ../clients/tui/nmt-page-ip4.c:179 ../clients/tui/nmt-page-ip6.c:177
+msgid "Never use this network for default route"
+msgstr "ಪೂರà³à²µà²¨à²¿à²¯à³‹à²œà²¿à²¤ ರೌಟà³â€Œà²—ಾಗಿ ಎಂದಿಗೂ ಈ ಜಾಲಬಂಧವನà³à²¨à³ ಬಳಸಬೇಡ"
+
+#: ../clients/tui/nmt-page-ip4.c:187
+msgid "Require IPv4 addressing for this connection"
+msgstr "ಈ ಸಂಪರà³à²•à²•à³à²•à²¾à²—ಿ IPv4 ವಿಳಾಸ ನೀಡಿಕೆಯ ಅಗತà³à²¯à²µà²¿à²¦à³†"
+
+#: ../clients/tui/nmt-page-ip6.c:41
+msgid "Ignore"
+msgstr "ಕಡೆಗಣಿಸà³"
+
+#: ../clients/tui/nmt-page-ip6.c:43
+msgid "Automatic (DHCP-only)"
+msgstr "ಸà³à²µà²¯à²‚ಚಾಲಿತ (DHCP ಮಾತà³à²°)"
+
+#: ../clients/tui/nmt-page-ip6.c:54
+msgid "IPv6 CONFIGURATION"
+msgstr "IPv6 ಸಂರಚನೆ"
+
+#: ../clients/tui/nmt-page-ip6.c:185
+msgid "Require IPv6 addressing for this connection"
+msgstr "ಈ ಸಂಪರà³à²•à²•à³à²•à²¾à²—ಿ IPv6 ವಿಳಾಸ ನೀಡಿಕೆಯ ಅಗತà³à²¯à²µà²¿à²¦à³†"
+
+#: ../clients/tui/nmt-page-main.c:139
+msgid "Hide"
+msgstr "ಅಡಗಿಸà³"
+
+#: ../clients/tui/nmt-page-main.c:139
+msgid "Show"
+msgstr "ತೋರಿಸà³"
+
+#: ../clients/tui/nmt-page-main.c:187
+msgid "Profile name"
+msgstr "ಪà³à²°à³Šà²«à³ˆà²²à²¿à²¨ ಹೆಸರà³"
+
+#: ../clients/tui/nmt-page-main.c:194
+msgid "Device"
+msgstr "ಸಾಧನ"
+
+#: ../clients/tui/nmt-page-main.c:243
+msgid "Automatically connect"
+msgstr "ಸà³à²µà²¯à²‚ಚಾಲಿತವಾಗಿ ಸಂಪರà³à²•à²¸à²¾à²§à²¿à²¸à³"
+
+#: ../clients/tui/nmt-page-main.c:249
+msgid "Available to all users"
+msgstr "ಎಲà³à²²à²¾ ಬಳಕೆದಾರರಿಗೆ ಲಭà³à²¯à²µà²¿à²°à³à²¤à³à²¤à²¦à³†"
+
+#: ../clients/tui/nmt-page-ppp.c:49
+#| msgid "IPv4 CONFIGURATION"
+msgid "PPP CONFIGURATION"
+msgstr "PPP CONFIGURATION"
+
+#: ../clients/tui/nmt-page-ppp.c:142
+#| msgid "Authentication"
+msgid "Allowed authentication methods:"
+msgstr "ಅನà³à²®à²¤à²¿à²¸à²²à²¾à²—à³à²µ ದೃಢೀಕರಣದ ವಿಧಾನಗಳà³:"
+
+#: ../clients/tui/nmt-page-ppp.c:149
+#| msgid "LEAP"
+msgid "EAP"
+msgstr "EAP"
+
+#: ../clients/tui/nmt-page-ppp.c:157
+#| msgid "AP"
+msgid "PAP"
+msgstr "PAP"
+
+#: ../clients/tui/nmt-page-ppp.c:165
+msgid "CHAP"
+msgstr "CHAP"
+
+#: ../clients/tui/nmt-page-ppp.c:173
+msgid "MSCHAPv2"
+msgstr "MSCHAPv2"
+
+#: ../clients/tui/nmt-page-ppp.c:181
+msgid "MSCHAP"
+msgstr "MSCHAP"
+
+#: ../clients/tui/nmt-page-ppp.c:197
+msgid "Use point-to-point encryption (MPPE)"
+msgstr "ಪಾಯಿಂಟà³â€Œ-ಟà³-ಪಾಯಿಂಟà³â€Œ ಗೂಢಲಿಪೀಕರಣವನà³à²¨à³ (MPPE) ಬಳಸà³"
+
+#: ../clients/tui/nmt-page-ppp.c:209
+msgid "Require 128-bit encryption"
+msgstr "128-ಬಿಟà³â€Œ ಗೂಢಲಿಪೀಕರಣದ ಅಗತà³à²¯à²µà²¿à²¦à³†"
+
+#: ../clients/tui/nmt-page-ppp.c:219
+msgid "Use stateful MPPE"
+msgstr "ಸà³à²Ÿà³‡à²Ÿà³â€Œà²«à³à²²à³â€Œ MPPE ಅನà³à²¨à³ ಬಳಸà³"
+
+#: ../clients/tui/nmt-page-ppp.c:231
+msgid "Allow BSD data compression"
+msgstr "BSD ದತà³à²¤à²¾à²‚ಶ ಸಂಕà³à²šà²¨à³†à²¯à²¨à³à²¨à³ ಅನà³à²®à²¤à²¿à²¸à³"
+
+#: ../clients/tui/nmt-page-ppp.c:239
+msgid "Allow Deflate data compression"
+msgstr "ದತà³à²¤à²¾à²‚ಶ ಸಂಕà³à²šà²¨à³†à²¯à²¨à³à²¨à³ ಡಿಫà³à²²à³‡à²Ÿà³ ಮಾಡಲೠಅವಕಾಶ ನೀಡà³"
+
+#: ../clients/tui/nmt-page-ppp.c:247
+msgid "Use TCP header compression"
+msgstr "TCP ಹೆಡರೠಸಂಕà³à²šà²¨à²µà²¨à³à²¨à³ ಬಳಸà³"
+
+#: ../clients/tui/nmt-page-ppp.c:257
+msgid "Send PPP echo packets"
+msgstr "PPP ಪà³à²°à²¤à²¿à²§à³à²µà²¨à²¿ ಪà³à²¯à²¾à²•à³†à²Ÿà³â€Œà²—ಳೠಕಳà³à²¹à²¿à²¸à³"
+
+#: ../clients/tui/nmt-page-team-port.c:45
+msgid "TEAM PORT"
+msgstr "ಟೀಮೠಸಂಪರà³à²•à²¸à³à²¥à²¾à²¨"
+
+#: ../clients/tui/nmt-page-team-port.c:100 ../clients/tui/nmt-page-team.c:164
+msgid "JSON configuration"
+msgstr "JSON ಸಂರಚನೆ"
+
+#: ../clients/tui/nmt-page-team.c:51
+msgid "TEAM"
+msgstr "ಟೀಮà³"
+
+#: ../clients/tui/nmt-page-vlan.c:101
+msgid "Parent"
+msgstr "ಪೋಷಕ"
+
+#: ../clients/tui/nmt-page-vlan.c:116
+msgid "VLAN id"
+msgstr "VLAN id"
+
+#: ../clients/tui/nmt-page-wifi.c:57
+msgid "WI-FI"
+msgstr "ವೈ-ಫೈ"
+
+#: ../clients/tui/nmt-page-wifi.c:68
+msgctxt "Wi-Fi"
+msgid "Client"
+msgstr "ಕà³à²²à³ˆà²‚ಟà³â€Œ"
+
+#: ../clients/tui/nmt-page-wifi.c:69
+msgid "Access Point"
+msgstr "ನಿಲà³à²•à³ ಬಿಂದà³"
+
+#: ../clients/tui/nmt-page-wifi.c:70
+msgid "Ad-Hoc Network"
+msgstr "ತಾತà³à²ªà³‚ರà³à²¤à²¿à²• ಜಾಲಬಂಧ"
+
+#: ../clients/tui/nmt-page-wifi.c:75
+msgctxt "Wi-Fi"
+msgid "Automatic"
+msgstr "ಸà³à²µà²¯à²‚ಚಾಲಿತ"
+
+#. 802.11a Wi-Fi network
+#: ../clients/tui/nmt-page-wifi.c:77
+msgid "A (5 GHz)"
+msgstr "A (5 GHz)"
+
+#. 802.11b / 802.11g Wi-Fi network
+#: ../clients/tui/nmt-page-wifi.c:79
+msgid "B/G (2.4 GHz)"
+msgstr "B/G (2.4 GHz)"
+
+#: ../clients/tui/nmt-page-wifi.c:84
+msgctxt "Wi-Fi security"
+msgid "None"
+msgstr "à²à²¨à³‚ ಇಲà³à²²"
+
+#: ../clients/tui/nmt-page-wifi.c:85
+msgid "WPA & WPA2 Personal"
+msgstr "WPA & WPA2 ವೈಯಕà³à²¤à²¿à²•"
+
+#: ../clients/tui/nmt-page-wifi.c:86
+msgid "WPA & WPA2 Enterprise"
+msgstr "WPA & WPA2 ಎಂಟರà³à²ªà³à²°à³ˆà²¸à³"
+
+#: ../clients/tui/nmt-page-wifi.c:87
+msgid "WEP 40/128-bit Key (Hex or ASCII)"
+msgstr "WEP 40/128-ಬಿಟೠಕೀಲಿ (ಹೆಕà³à²¸à³ ಅಥವ ASCII)"
+
+#: ../clients/tui/nmt-page-wifi.c:88
+msgid "WEP 128-bit Passphrase"
+msgstr "WEP 128-bit ಗà³à²ªà³à²¤à²µà²¾à²•à³à²¯"
+
+#: ../clients/tui/nmt-page-wifi.c:89
+msgid "Dynamic WEP (802.1x)"
+msgstr "ಡೈನಮಿಕೠWEP (802.1x)"
+
+#: ../clients/tui/nmt-page-wifi.c:90
+msgid "LEAP"
+msgstr "LEAP"
+
+#: ../clients/tui/nmt-page-wifi.c:95
+msgctxt "WEP key index"
+msgid "1 (Default)"
+msgstr "1 (ಪೂರà³à²µà²¨à²¿à²¯à³‹à²œà²¿à²¤)"
+
+#: ../clients/tui/nmt-page-wifi.c:96
+msgctxt "WEP key index"
+msgid "2"
+msgstr "2"
+
+#: ../clients/tui/nmt-page-wifi.c:97
+msgctxt "WEP key index"
+msgid "3"
+msgstr "3"
+
+#: ../clients/tui/nmt-page-wifi.c:98
+msgctxt "WEP key index"
+msgid "4"
+msgstr "4"
+
+#: ../clients/tui/nmt-page-wifi.c:103
+msgid "Open System"
+msgstr "ಮà³à²•à³à²¤ ವà³à²¯à²µà²¸à³à²¥à³†"
+
+#: ../clients/tui/nmt-page-wifi.c:104
+msgid "Shared Key"
+msgstr "ಹಂಚಲಾದ ಕೀಲಿ"
+
+#: ../clients/tui/nmt-page-wifi.c:252
+msgid "Channel"
+msgstr "ಚಾನಲà³â€Œ"
+
+#: ../clients/tui/nmt-page-wifi.c:257
+msgid "Security"
+msgstr "ಸà³à²°à²•à³à²·à²¤à³†"
+
+#. "wpa-enterprise"
+#. FIXME
+#: ../clients/tui/nmt-page-wifi.c:278
+msgid "(No support for wpa-enterprise yet...)"
+msgstr "(wpa-ಎಂಟರà³à²ªà³à²°à³ˆà²¸à³â€Œà²—ಾಗಿ ಇನà³à²¨à³‚ ಸಹ ಬೆಂಬಲವಿಲà³à²²...)"
+
+#: ../clients/tui/nmt-page-wifi.c:285 ../clients/tui/nmt-secret-agent.c:262
+msgid "Key"
+msgstr "ಕೀಲಿ"
+
+#: ../clients/tui/nmt-page-wifi.c:288 ../clients/tui/nmt-page-wifi.c:307
+msgid "WEP index"
+msgstr "WEP ಸೂಚಿ"
+
+#: ../clients/tui/nmt-page-wifi.c:296 ../clients/tui/nmt-page-wifi.c:315
+msgid "Authentication"
+msgstr "ದೃಢೀಕರಣ"
+
+#. "dynamic-wep"
+#. FIXME
+#: ../clients/tui/nmt-page-wifi.c:321
+msgid "(No support for dynamic-wep yet...)"
+msgstr "(ಡೈನಮಿಕà³-wep ಗಾಗಿ ಇನà³à²¨à³‚ ಸಹ ಬೆಂಬಲವಿಲà³à²²...)"
+
+#: ../clients/tui/nmt-password-fields.c:130
+msgid "Ask for this password every time"
+msgstr "ಪà³à²°à²¤à²¿ ಬಾರಿಯೂ ಈ ಗà³à²ªà³à²¤à²ªà²¦à²•à³à²•à²¾à²—ಿ ಕೇಳà³"
+
+#: ../clients/tui/nmt-password-fields.c:131
+msgid "Show password"
+msgstr "ಗà³à²ªà³à²¤à²ªà²¦à²µà²¨à³à²¨à³ ತೋರಿಸà³"
+
+#: ../clients/tui/nmt-route-table.c:217
+msgid "Destination"
+msgstr "ಗà³à²°à²¿"
+
+#: ../clients/tui/nmt-route-table.c:217
+msgid "Prefix"
+msgstr "ಪà³à²°à²¿à²«à²¿à²•à³à²¸à³"
+
+#: ../clients/tui/nmt-route-table.c:226
+msgid "Next Hop"
+msgstr "ಮà³à²‚ದಿನ ಜಿಗಿತ"
+
+#: ../clients/tui/nmt-route-table.c:234
+msgid "Metric"
+msgstr "ಮೆಟà³à²°à²¿à²•à³"
+
+#: ../clients/tui/nmt-route-table.c:254
+msgid "No custom routes are defined."
+msgstr "ಯಾವà³à²¦à³† ಅಗತà³à²¯à²¾à²¨à³à²—à³à²£ ರೌಟà³â€Œà²—ಳನà³à²¨à³ ವಿವರಿಸಲಾಗಿಲà³à²²"
+
+#: ../clients/tui/nmt-secret-agent.c:220
+msgid "Identity"
+msgstr "ಗà³à²°à³à²¤à³"
+
+#: ../clients/tui/nmt-secret-agent.c:225
+msgid "Private key password"
+msgstr "ಖಾಸಗಿ ಕೀಲಿ ಗà³à²ªà³à²¤à²ªà²¦"
+
+#: ../clients/tui/nmt-secret-agent.c:340
+msgid "Authentication required by wireless network"
+msgstr "ವೈರà³à²²à³†à²¸à³ ಜಾಲಬಂಧಕà³à²•à²¾à²—ಿ ದೃಢೀಕರಣದ ಅಗತà³à²¯à²µà²¿à²¦à³†"
+
+#: ../clients/tui/nmt-secret-agent.c:341
+#, c-format
+msgid ""
+"Passwords or encryption keys are required to access the wireless network "
+"'%s'."
+msgstr ""
+"ವೈರà³à²²à³†à²¸à³ ಜಾಲಬಂಧ '%s' ಅನà³à²¨à³ ನಿಲà³à²•à²¿à²¸à²¿à²•à³Šà²³à³à²³à²²à³ ಗà³à²ªà³à²¤à²ªà²¦ ಅಥವ ಗೂಢಲಿಪೀಕರಣ ಕೀಲಿಯ "
+"ಅಗತà³à²¯à²µà²¿à²°à³à²¤à³à²¤à²¦à³†."
+
+#: ../clients/tui/nmt-secret-agent.c:349
+msgid "Wired 802.1X authentication"
+msgstr "ತಂತಿಸಹಿತ 802.1X ದೃಢೀಕರಣ"
+
+#: ../clients/tui/nmt-secret-agent.c:352
+msgid "Network name"
+msgstr "ಜಾಲಬಂಧದ ಹೆಸರà³"
+
+#: ../clients/tui/nmt-secret-agent.c:359
+msgid "DSL authentication"
+msgstr "DSL ದೃಢೀಕರಣ"
+
+#: ../clients/tui/nmt-secret-agent.c:367
+msgid "PIN code required"
+msgstr "PIN ಕೋಡà³â€Œà²¨ ಅಗತà³à²¯à²µà²¿à²¦à³†"
+
+#: ../clients/tui/nmt-secret-agent.c:368
+msgid "PIN code is needed for the mobile broadband device"
+msgstr "ಮೊಬೈಲೠಬà³à²°à²¾à²¡à³â€Œà²¬à³à²¯à²¾à²‚ಡೠಸಾಧನಕà³à²•à²¾à²—ಿ PIN ಕೋಡà³â€Œà²¨ ಅಗತà³à²¯à²µà²¿à²°à³à²¤à³à²¤à²¦à³†"
+
+#: ../clients/tui/nmt-secret-agent.c:370
+msgid "PIN"
+msgstr "PIN"
+
+#: ../clients/tui/nmt-secret-agent.c:376 ../clients/tui/nmt-secret-agent.c:389
+#: ../clients/tui/nmt-secret-agent.c:405
+msgid "Mobile broadband network password"
+msgstr "ಮೊಬೈಲೠಬà³à²°à²¾à²¡à³â€Œà²¬à³à²¯à²¾à²‚ಡೠಜಾಲಬಂಧದ ಗà³à²ªà³à²¤à²ªà²¦"
+
+#: ../clients/tui/nmt-secret-agent.c:377 ../clients/tui/nmt-secret-agent.c:390
+#: ../clients/tui/nmt-secret-agent.c:406
+#, c-format
+msgid "A password is required to connect to '%s'."
+msgstr "'%s' ನೊಂದಿಗೆ ಸಂಪರà³à²•à²¹à³Šà²‚ದಲೠಅಗತà³à²¯à²µà²¿à²°à³à²µ ಗà³à²ªà³à²¤à²ªà²¦."
+
+#: ../clients/tui/nmt-slave-list.c:137
+msgid "Select the type of slave connection you wish to add."
+msgstr "ನೀವೠಸೇರಿಸಲೠಬಯಸà³à²µ ಸà³à²²à³‡à²µ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಆಯà³à²•à³† ಮಾಡಿ."
+
+#: ../clients/tui/nmt-widget-list.c:141
+msgid "Add..."
+msgstr "ಸೇರಿಸà³..."
+
+#: ../clients/tui/nmt-widget-list.c:204
+msgid "Remove"
+msgstr "ತೆಗೆದೠಹಾಕà³"
+
+#: ../clients/tui/nmtui-connect.c:90
+msgid "Activation failed"
+msgstr "ಸಕà³à²°à²¿à²¯à²—ೊಳಿಕೆಯೠವಿಫಲಗೊಂಡಿದೆ"
+
+#: ../clients/tui/nmtui-connect.c:138
+msgid "Connecting..."
+msgstr "ಸಂಪರà³à²•à²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¿à²¦à³†..."
+
+#: ../clients/tui/nmtui-connect.c:167 ../clients/tui/nmtui-connect.c:190
+#, c-format
+msgid "Could not activate connection: %s"
+msgstr "ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಲಾಗಿಲà³à²²: %s"
+
+#: ../clients/tui/nmtui-connect.c:250 ../clients/tui/nmtui-connect.c:299
+msgid "Activate"
+msgstr "ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸà³"
+
+#: ../clients/tui/nmtui-connect.c:252
+msgid "Deactivate"
+msgstr "ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸà³"
+
+#: ../clients/tui/nmtui-connect.c:304 ../clients/tui/nmtui-edit.c:95
+#: ../clients/tui/nmtui.c:112
+msgid "Quit"
+msgstr "ತà³à²¯à²œà²¿à²¸à³"
+
+#: ../clients/tui/nmtui-connect.c:327
+#, c-format
+msgid "No such connection '%s'"
+msgstr "ಅಂತಹ ಯಾವà³à²¦à³† ಸಂಪರà³à²• '%s' ಇಲà³à²²"
+
+#: ../clients/tui/nmtui-connect.c:329
+msgid "Connection is already active"
+msgstr "ಸಂಪರà³à²•à²µà³ ಈಗಾಗಲೆ ಸಕà³à²°à²¿à²¯à²µà²¾à²—ಿದೆ"
+
+#: ../clients/tui/nmtui-edit.c:200
+msgid "Create"
+msgstr "ರಚಿಸà³"
+
+#: ../clients/tui/nmtui-edit.c:342
+msgid "Select the type of connection you wish to create."
+msgstr "ನೀವೠರಚಿಸಲೠಬಯಸà³à²µ ಸಂಪರà³à²•à²¦ ಬಗೆಯನà³à²¨à³ ಆರಿಸಿ."
+
+#: ../clients/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 ಪà³à²²à²—à³â€Œà²‡à²¨à³ ಅನà³à²¨à³ ಅನà³à²¸à³à²¥à²¾à²ªà²¿à²¸à²¿à²¦à³† "
+"ಇರಬಹà³à²¦à³ "
+"ಎಂದರà³à²¥."
+
+#: ../clients/tui/nmtui-edit.c:386 ../clients/tui/nmtui-edit.c:402
+msgid "New Connection"
+msgstr "ಹೊಸ ಸಂಪರà³à²•"
+
+#: ../clients/tui/nmtui-edit.c:440
+#, c-format
+msgid "Unable to delete connection: %s"
+msgstr "ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಅಳಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s"
+
+#: ../clients/tui/nmtui-edit.c:472
+#, c-format
+msgid "Are you sure you want to delete the connection '%s'?"
+msgstr "ನೀವೠನಿಜವಾಗಲೂ ಸಂಪರà³à²• '%s ಅನà³à²¨à³ ಅಳಿಸಲೠಬಯಸà³à²¤à³à²¤à³€à²°à³†?"
+
+#: ../clients/tui/nmtui-edit.c:486
+#, c-format
+msgid "Could not delete connection: %s"
+msgstr "ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಅಳಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s"
+
+#: ../clients/tui/nmtui-hostname.c:47
+msgid "Set Hostname"
+msgstr "ಆತಿಥೇಯದ ಹೆಸರನà³à²¨à³ ಹೊಂದಿಸà³"
+
+#: ../clients/tui/nmtui-hostname.c:55
+msgid "Hostname"
+msgstr "ಅತಿಥೇಯದ ಹೆಸರà³"
+
+#. Translators: this indicates the result. ie, "I have set the hostname to ..."
+#: ../clients/tui/nmtui-hostname.c:114
+#, c-format
+msgid "Set hostname to '%s'"
+msgstr "ಆತಿಥೇಯದ ಹೆಸರನà³à²¨à³ '%s' ಗೆ ಹೊಂದಿಸà³"
+
+#: ../clients/tui/nmtui-hostname.c:116
+#, c-format
+msgid "Unable to set hostname: %s"
+msgstr "ಆತಿಥೇಯದ ಹೆಸರನà³à²¨à³ ಹೊಂದಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s"
+
+#: ../clients/tui/nmtui.c:57 ../clients/tui/nmtui.c:60
+msgid "connection"
+msgstr "ಸಂಪರà³à²•"
+
+#: ../clients/tui/nmtui.c:58
+msgid "Edit a connection"
+msgstr "ಒಂದೠಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸಂಪಾದಿಸà³"
+
+#: ../clients/tui/nmtui.c:61
+msgid "Activate a connection"
+msgstr "ಒಂದೠಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸà³"
+
+#: ../clients/tui/nmtui.c:63
+msgid "new hostname"
+msgstr "ಹೊಸ ಆತಿಥೇಯದ ಹೆಸರà³"
+
+#: ../clients/tui/nmtui.c:64
+msgid "Set system hostname"
+msgstr "ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ಹೆಸರನà³à²¨à³ ಹೊಂದಿಸà³"
+
+#: ../clients/tui/nmtui.c:87
+msgid "NetworkManager TUI"
+msgstr "NetworkManager TUI"
+
+#: ../clients/tui/nmtui.c:95
+msgid "Please select an option"
+msgstr "ದಯವಿಟà³à²Ÿà³ ಒಂದೠಆಯà³à²•à³†à²¯à²¨à³à²¨à³ ಆರಿಸಿ"
+
+#: ../clients/tui/nmtui.c:147
+msgid "Usage"
+msgstr "ಬಳಕೆ"
+
+#: ../clients/tui/nmtui.c:228
+msgid "Could not parse arguments"
+msgstr "ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œà²—ಳನà³à²¨à³ ಪಾರà³à²¸à³ ಮಾಡಲಾಗಿಲà³à²²"
+
+#: ../clients/tui/nmtui.c:238 ../clients/tui/nmtui.c:249
+#, c-format
+#| msgid "Could not activate connection: %s"
+msgid "Could not contact NetworkManager: %s.\n"
+msgstr "NetworkManager ಅನà³à²¨à³ ಸಂಪರà³à²•à²¿à²¸à²²à²¾à²—ಿಲà³à²²: %s.\n"
+
+#: ../clients/tui/nmtui.c:243
+msgid "NetworkManager is not running."
+msgstr "NetworkManager ಚಾಲನೆಯಲà³à²²à²¿à²²à³à²²."
+
+#: ../libnm-core/crypto.c:135 ../libnm-util/crypto.c:133
#, c-format
msgid "PEM key file had no end tag '%s'."
msgstr "PEM ಕೀಲಿ ಕಡತವೠಯಾವà³à²¦à³† ಅಂತà³à²¯ ಟà³à²¯à²¾à²—à³ '%s' ಅನà³à²¨à³ ಹೊಂದಿಲà³à²²."
-#: ../libnm-util/crypto.c:146
+#: ../libnm-core/crypto.c:148 ../libnm-util/crypto.c:146
#, c-format
msgid "Doesn't look like a PEM private key file."
msgstr "ಒಂದೠPEM ಖಾಸಗಿ ಕೀಲಿ ಕಡತದಂತೆ ತೋರà³à²¤à³à²¤à²¿à²²à³à²²."
-#: ../libnm-util/crypto.c:163
+#: ../libnm-core/crypto.c:165 ../libnm-util/crypto.c:163
#, c-format
msgid "Malformed PEM file: Proc-Type was not first tag."
msgstr "ತಪà³à²ªà²¾à²—ಿರà³à²µ PEM ಕಡತ: Proc-ಬಗೆಯೠಮೊದಲಿನ ಟà³à²¯à²¾à²—ೠಆಗಿಲà³à²²."
-#: ../libnm-util/crypto.c:171
+#: ../libnm-core/crypto.c:173 ../libnm-util/crypto.c:171
#, c-format
msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
msgstr "ತಪà³à²ªà²¾à²—ಿರà³à²µ PEM ಕಡತ: ಗೊತà³à²¤à²¿à²°à²¦ Proc-ಬಗೆಯ ಟà³à²¯à²¾à²—à³ '%s'."
-#: ../libnm-util/crypto.c:181
+#: ../libnm-core/crypto.c:183 ../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:192
+#: ../libnm-core/crypto.c:194 ../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:199
+#: ../libnm-core/crypto.c:201 ../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:212
+#: ../libnm-core/crypto.c:216 ../libnm-util/crypto.c:214
#, c-format
msgid "Malformed PEM file: unknown private key cipher '%s'."
msgstr "ತಪà³à²ªà²¾à²—ಿರà³à²µ PEM ಕಡತ: ಗೊತà³à²¤à²¿à²°à²¦ ಖಾಸಗಿ ಕೀಲಿ ಸಿಫರೠ'%s'."
-#: ../libnm-util/crypto.c:231
+#: ../libnm-core/crypto.c:235 ../libnm-util/crypto.c:233
#, c-format
msgid "Could not decode private key."
msgstr "ಖಾಸಗಿ ಕೀಲಿಯನà³à²¨à³ ಡೀಕೋಡೠಮಾಡಲಾಗಲಿಲà³à²²."
-#: ../libnm-util/crypto.c:283
+#: ../libnm-core/crypto.c:288 ../libnm-util/crypto.c:285
msgid "Failed to find expected PKCS#8 start tag."
msgstr "ನಿರೀಕà³à²·à²¿à²¤ PKCS#8 ಆರಂಭಿಕ ಟà³à²¯à²¾à²—ೠಅನà³à²¨à³ ಪತà³à²¤à³† ಮಾಡಲೠವಿಫಲಗೊಂಡಿದೆ."
-#: ../libnm-util/crypto.c:291
+#: ../libnm-core/crypto.c:296 ../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:310
+#: ../libnm-core/crypto.c:315 ../libnm-util/crypto.c:312
msgid "Failed to decode PKCS#8 private key."
msgstr "PKCS#8 ಖಾಸಗಿ ಕೀಲಿಯನà³à²¨à³ ಡೀಕೋಡೠಮಾಡà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ."
-#: ../libnm-util/crypto.c:352
+#: ../libnm-core/crypto.c:357 ../libnm-util/crypto.c:354
#, c-format
msgid "IV must be an even number of bytes in length."
msgstr "IV ಯ ಉದà³à²¦à²µà³ ಸರಿ ಸಂಖà³à²¯à³†à²¯ ಬೈಟà³â€Œà²—ಳಂದ ಆಗಿರಬೇಕà³."
-#: ../libnm-util/crypto.c:366
+#: ../libnm-core/crypto.c:371 ../libnm-util/crypto.c:368
#, c-format
msgid "IV contains non-hexadecimal digits."
msgstr "IV ಯೠಹೆಕà³à²¸à²¾-ದಶಮಾಂಶ ಅಲà³à²²à²¦ ಅಂಕೆಗಳನà³à²¨à³ ಹೊಂದಿದೆ."
-#: ../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
+#: ../libnm-core/crypto.c:411 ../libnm-core/crypto_gnutls.c:151
+#: ../libnm-core/crypto_gnutls.c:269 ../libnm-core/crypto_nss.c:171
+#: ../libnm-core/crypto_nss.c:333 ../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:511
+#: ../libnm-core/crypto.c:523 ../libnm-util/crypto.c:518
#, c-format
msgid "Unable to determine private key type."
msgstr "ಖಾಸಗಿ ಕೀಲಿಯ ಬಗೆಯನà³à²¨à³ ನಿರà³à²§à²°à²¿à²¸à²²à³ ಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²."
-#: ../libnm-util/crypto.c:566
+#: ../libnm-core/crypto.c:580 ../libnm-util/crypto.c:573
#, c-format
msgid "PEM certificate had no start tag '%s'."
msgstr "PEM ಪà³à²°à²®à²¾à²£à²ªà²¤à³à²°à²µà³ ಯಾವà³à²¦à³† ಆರಂಭದ ಟà³à²¯à²¾à²—à³ '%s' ಅನà³à²¨à³ ಹೊಂದಿಲà³à²²."
-#: ../libnm-util/crypto.c:575
+#: ../libnm-core/crypto.c:589 ../libnm-util/crypto.c:582
#, c-format
msgid "PEM certificate had no end tag '%s'."
msgstr "PEM ಪà³à²°à²®à²¾à²£à²ªà²¤à³à²°à²µà³ ಯಾವà³à²¦à³† ಅಂತà³à²¯à²¦ ಟà³à²¯à²¾à²—à³ '%s' ಅನà³à²¨à³ ಹೊಂದಿಲà³à²²."
-#: ../libnm-util/crypto.c:593
+#: ../libnm-core/crypto.c:607 ../libnm-util/crypto.c:600
#, c-format
msgid "Failed to decode certificate."
msgstr "ಪà³à²°à²®à²¾à²£à²ªà²¤à³à²°à²µà²¨à³à²¨à³ ಡೀಕೋಡೠಮಾಡಲೠವಿಫಲಗೊಂಡಿದೆ."
-#: ../libnm-util/crypto_gnutls.c:50
+#: ../libnm-core/crypto_gnutls.c:50 ../libnm-util/crypto_gnutls.c:50
msgid "Failed to initialize the crypto engine."
msgstr "ಕà³à²°à²¿à²ªà³à²Ÿà³‹ ಎಂಜಿನೠಅನà³à²¨à³ ಆರಂಭಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ."
-#: ../libnm-util/crypto_gnutls.c:92
+#: ../libnm-core/crypto_gnutls.c:92 ../libnm-util/crypto_gnutls.c:92
#, c-format
msgid "Failed to initialize the MD5 engine: %s / %s."
msgstr "MD5 ಎಂಜಿನೠಅನà³à²¨à³ ಆರಂಭಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:155
+#: ../libnm-core/crypto_gnutls.c:159 ../libnm-util/crypto_gnutls.c:158
#, c-format
msgid "Invalid IV length (must be at least %zd)."
msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ IV ಗಾತà³à²° (ಕನಿಷà³à²Ÿ %zd ಇರಬೇಕà³)."
-#: ../libnm-util/crypto_gnutls.c:166
+#: ../libnm-core/crypto_gnutls.c:170 ../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:175
+#: ../libnm-core/crypto_gnutls.c:179 ../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:184
+#: ../libnm-core/crypto_gnutls.c:188 ../libnm-util/crypto_gnutls.c:187
#, c-format
msgid "Failed to set IV for decryption: %s / %s."
msgstr "ಡೀಕà³à²°à²¿à²ªà³à²Ÿà³ ಮಾಡಲೠIV ಅನà³à²¨à³ ಹೊಂದಿಸಲೠವಿಫಲಗೊಂಡಿದೆ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:193
+#: ../libnm-core/crypto_gnutls.c:197 ../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:203 ../libnm-util/crypto_nss.c:257
+#: ../libnm-core/crypto_gnutls.c:207 ../libnm-core/crypto_nss.c:261
+#: ../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:214 ../libnm-util/crypto_nss.c:268
+#: ../libnm-core/crypto_gnutls.c:218 ../libnm-core/crypto_nss.c:272
+#: ../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:281
+#: ../libnm-core/crypto_gnutls.c:291 ../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:290
+#: ../libnm-core/crypto_gnutls.c:300 ../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:300
+#: ../libnm-core/crypto_gnutls.c:310 ../libnm-util/crypto_gnutls.c:308
#, c-format
msgid "Failed to set IV for encryption: %s / %s."
msgstr "ಗೂಢಲಿಪೀಕರಿಸಲೠIV ಅನà³à²¨à³ ಹೊಂದಿಸಲೠವಿಫಲಗೊಂಡಿದೆ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:309
+#: ../libnm-core/crypto_gnutls.c:319 ../libnm-util/crypto_gnutls.c:317
#, c-format
msgid "Failed to encrypt the data: %s / %s."
msgstr "ಖಾಸಗಿ ಕೀಲಿಯನà³à²¨à³ ಗೂಢಲಿಪೀಕರಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:349
+#: ../libnm-core/crypto_gnutls.c:359 ../libnm-util/crypto_gnutls.c:357
#, c-format
msgid "Error initializing certificate data: %s"
msgstr "ಪà³à²°à²®à²¾à²£à²ªà²¤à³à²° ದತà³à²¤à²¾à²‚ಶವನà³à²¨à³ ಆರಂಭಿಸà³à²µà²²à³à²²à²¿ ದೋಷ ಉಂಟಾಗಿದೆ: %s"
-#: ../libnm-util/crypto_gnutls.c:371
+#: ../libnm-core/crypto_gnutls.c:381 ../libnm-util/crypto_gnutls.c:379
#, c-format
msgid "Couldn't decode certificate: %s"
msgstr "ಪà³à²°à²®à²¾à²£à²ªà²¤à³à²°à²µà²¨à³à²¨à³ ಡೀಕೋಡೠಮಾಡಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s"
-#: ../libnm-util/crypto_gnutls.c:395
+#: ../libnm-core/crypto_gnutls.c:406 ../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:408
+#: ../libnm-core/crypto_gnutls.c:419 ../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:420
+#: ../libnm-core/crypto_gnutls.c:431 ../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:448
+#: ../libnm-core/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:471
+#: ../libnm-core/crypto_gnutls.c:483 ../libnm-util/crypto_gnutls.c:479
#, c-format
msgid "Couldn't decode PKCS#8 file: %s"
msgstr "PKCS#8 ಕಡತವನà³à²¨à³ ಡೀಕೋಡೠಮಾಡಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s"
-#: ../libnm-util/crypto_nss.c:56
+#: ../libnm-core/crypto_nss.c:56 ../libnm-util/crypto_nss.c:56
#, c-format
msgid "Failed to initialize the crypto engine: %d."
msgstr "ಕà³à²°à²¿à²ªà³à²Ÿà³Š ಎಂಜಿನೠಅನà³à²¨à³ ಆರಂಭಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: %d."
-#: ../libnm-util/crypto_nss.c:107
+#: ../libnm-core/crypto_nss.c:107 ../libnm-util/crypto_nss.c:107
#, c-format
msgid "Failed to initialize the MD5 context: %d."
msgstr "MD5 ಸಂದರà³à²­à²µà²¨à³à²¨à³ ಆರಂಭಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: %d."
-#: ../libnm-util/crypto_nss.c:175
+#: ../libnm-core/crypto_nss.c:179 ../libnm-util/crypto_nss.c:178
#, c-format
msgid "Invalid IV length (must be at least %d)."
msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ IV ಗಾತà³à²° (ಕನಿಷà³à²Ÿ %d ಇರಬೇಕà³)."
-#: ../libnm-util/crypto_nss.c:186
+#: ../libnm-core/crypto_nss.c:190 ../libnm-util/crypto_nss.c:189
#, c-format
msgid "Failed to initialize the decryption cipher slot."
msgstr "ಡೀಕà³à²°à²ªà³à²Ÿà³ ಮಾಡಲಾಗà³à²µ ಸಿಫರೠಜಾಗವನà³à²¨à³ ಆರಂಭಿಸಲೠವಿಫಲಗೊಂಡಿದೆ."
-#: ../libnm-util/crypto_nss.c:196
+#: ../libnm-core/crypto_nss.c:200 ../libnm-util/crypto_nss.c:199
#, c-format
msgid "Failed to set symmetric key for decryption."
msgstr "ಡೀಕà³à²°à²¿à²ªà³à²Ÿà³ ಮಾಡಲೠಸಿಮಿಟà³à²°à²¿à²•à³ ಕೀಲಿಯನà³à²¨à³ ಹೊಂದಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ."
-#: ../libnm-util/crypto_nss.c:206
+#: ../libnm-core/crypto_nss.c:210 ../libnm-util/crypto_nss.c:209
#, c-format
msgid "Failed to set IV for decryption."
msgstr "ಡೀಕà³à²°à²¿à²ªà³à²Ÿà³ ಮಾಡಲೠIV ಅನà³à²¨à³ ಹೊಂದಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ."
-#: ../libnm-util/crypto_nss.c:214
+#: ../libnm-core/crypto_nss.c:218 ../libnm-util/crypto_nss.c:217
#, c-format
msgid "Failed to initialize the decryption context."
msgstr "ಡೀಕà³à²°à²¿à²ªà³à²Ÿà³ ಮಾಡà³à²µ ಸನà³à²¨à²¿à²µà³‡à²¶à²µà²¨à³à²¨à³ ಆರಂಭಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ."
-#: ../libnm-util/crypto_nss.c:227
+#: ../libnm-core/crypto_nss.c:231 ../libnm-util/crypto_nss.c:230
#, c-format
msgid "Failed to decrypt the private key: %d."
msgstr "ಖಾಸಗಿ ಕೀಲಿಯನà³à²¨à³ ಡೀಕà³à²°à²¿à²ªà³à²Ÿà³ ಮಾಡà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: %d."
-#: ../libnm-util/crypto_nss.c:235
+#: ../libnm-core/crypto_nss.c:239 ../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:246
+#: ../libnm-core/crypto_nss.c:250 ../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:348
+#: ../libnm-core/crypto_nss.c:355 ../libnm-util/crypto_nss.c:353
#, c-format
msgid "Failed to initialize the encryption cipher slot."
msgstr "ಗೂಢಲಿಪೀಕರಿಸಲಾಗà³à²µ ಸಿಫರೠಜಾಗವನà³à²¨à³ ಆರಂಭಿಸಲೠವಿಫಲಗೊಂಡಿದೆ."
-#: ../libnm-util/crypto_nss.c:356
+#: ../libnm-core/crypto_nss.c:363 ../libnm-util/crypto_nss.c:361
#, c-format
msgid "Failed to set symmetric key for encryption."
msgstr "ಗೂಢಲಿಪೀಕರಿಸಲೠಸಿಮಿಟà³à²°à²¿à²•à³ ಕೀಲಿಯನà³à²¨à³ ಹೊಂದಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ."
-#: ../libnm-util/crypto_nss.c:364
+#: ../libnm-core/crypto_nss.c:371 ../libnm-util/crypto_nss.c:369
#, c-format
msgid "Failed to set IV for encryption."
msgstr "ಗೂಢಲಿಪೀಕರಿಸಲೠIV ಅನà³à²¨à³ ಹೊಂದಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ."
-#: ../libnm-util/crypto_nss.c:372
+#: ../libnm-core/crypto_nss.c:379 ../libnm-util/crypto_nss.c:377
#, c-format
msgid "Failed to initialize the encryption context."
msgstr "ಗೂಢಲಿಪೀಕರಿಸà³à²µ ಸನà³à²¨à²¿à²µà³‡à²¶à²µà²¨à³à²¨à³ ಆರಂಭಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ."
-#: ../libnm-util/crypto_nss.c:380
+#: ../libnm-core/crypto_nss.c:387 ../libnm-util/crypto_nss.c:385
#, c-format
msgid "Failed to encrypt: %d."
msgstr "ಗೂಢಲಿಪೀಕರಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: %d."
-#: ../libnm-util/crypto_nss.c:388
+#: ../libnm-core/crypto_nss.c:395 ../libnm-util/crypto_nss.c:393
#, c-format
msgid "Unexpected amount of data after encrypting."
msgstr "ಗೂಢಲಿಪೀಕರಿಸಲೠಅನಿರೀಕà³à²·à²¿à²¤à²µà²¾à²¦ ದತà³à²¤à²¾à²‚ಶದ ಮೊತà³à²¤."
-#: ../libnm-util/crypto_nss.c:431
+#: ../libnm-core/crypto_nss.c:435 ../libnm-util/crypto_nss.c:433
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "ಪà³à²°à²®à²¾à²£à²ªà²¤à³à²°à²µà²¨à³à²¨à³ ಡೀಕೋಡೠಮಾಡಲೠಸಾಧà³à²¯à²µà²¾à²—ಲಿಲà³à²²: %d"
-#: ../libnm-util/crypto_nss.c:466
+#: ../libnm-core/crypto_nss.c:471 ../libnm-util/crypto_nss.c:468
#, c-format
msgid "Couldn't convert password to UCS2: %d"
msgstr "ಗà³à²ªà³à²¤à²ªà²¦à²µà²¨à³à²¨à³ UCS2 ಗೆ ಬದಲಾಯಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %d"
-#: ../libnm-util/crypto_nss.c:494
+#: ../libnm-core/crypto_nss.c:499 ../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:503
+#: ../libnm-core/crypto_nss.c:508 ../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:512
+#: ../libnm-core/crypto_nss.c:517 ../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:556
+#: ../libnm-core/crypto_nss.c:562 ../libnm-util/crypto_nss.c:558
msgid "Could not generate random data."
msgstr "ಮನಸà³à²¸à²¿à²—ೆ ಬಂದ ದತà³à²¤à²¾à²‚ಶವನà³à²¨à³ ಉತà³à²ªà²¾à²¦à²¿à²¸à²²à²¾à²—ಲಿಲà³à²²."
-#: ../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
+#: ../libnm-core/nm-connection.c:885
+#| msgid "Unable to delete connection: %s"
+msgid "Unexpected failure to verify the connection"
+msgstr "ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಪರಿಶೀಲಿಸà³à²µà²²à³à²²à²¿ ಅನಿರೀಕà³à²·à²¿à²¤ ವಿಫಲತೆ"
+
+#: ../libnm-core/nm-connection.c:916
+#| msgid "Unable to delete connection: %s"
+msgid "Unexpected failure to normalize the connection"
+msgstr "ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸಾಮಾನà³à²¯à²—ೊಳಿಸà³à²µà²²à³à²²à²¿ ಅನಿರೀಕà³à²·à²¿à²¤ ವಿಫಲತೆ"
+
+#: ../libnm-core/nm-setting-8021x.c:595 ../libnm-util/nm-setting-8021x.c:596
+msgid "CA certificate must be in X.509 format"
+msgstr "CA ಪà³à²°à²®à²¾à²£à²ªà²¤à³à²°à²µà³ X.509 ವಿನà³à²¯à²¾à²¸à²¦à²²à³à²²à²¿ ಇರಬೇಕà³"
+
+#: ../libnm-core/nm-setting-8021x.c:910 ../libnm-core/nm-setting-8021x.c:1174
+#: ../libnm-core/nm-setting-8021x.c:1494 ../libnm-util/nm-setting-8021x.c:914
+#: ../libnm-util/nm-setting-8021x.c:1177 ../libnm-util/nm-setting-8021x.c:1500
+#| msgid "Error initializing certificate data: %s"
+msgid "invalid certificate format"
+msgstr "ತಪà³à²ªà²¾à²¦ ಪà³à²°à²®à²¾à²£à²ªà²¤à³à²°à²¦ ವಿನà³à²¯à²¾à²¸"
+
+#: ../libnm-core/nm-setting-8021x.c:1776 ../libnm-util/nm-setting-8021x.c:1769
+#| msgid "invalid gateway '%s'"
+msgid "invalid private key"
+msgstr "ತಪà³à²ªà²¾à²¦ ಖಾಸಗಿ ಕೀಲಿ"
+
+#: ../libnm-core/nm-setting-8021x.c:2086 ../libnm-util/nm-setting-8021x.c:2080
+#| msgid "Failed to decrypt the private key."
+msgid "invalid phase2 private key"
+msgstr "ತಪà³à²ªà²¾à²¦ phase2 ಖಾಸಗಿ ಕೀಲಿ"
+
+#: ../libnm-core/nm-setting-8021x.c:2288 ../libnm-core/nm-setting-8021x.c:2305
+#: ../libnm-core/nm-setting-8021x.c:2335 ../libnm-core/nm-setting-8021x.c:2352
+#: ../libnm-core/nm-setting-8021x.c:2393 ../libnm-core/nm-setting-8021x.c:2405
+#: ../libnm-core/nm-setting-8021x.c:2423 ../libnm-core/nm-setting-8021x.c:2435
+#: ../libnm-core/nm-setting-8021x.c:2459 ../libnm-core/nm-setting-8021x.c:2641
+#: ../libnm-core/nm-setting-adsl.c:204
+#: ../libnm-core/nm-setting-bluetooth.c:137
+#: ../libnm-core/nm-setting-bluetooth.c:155
+#: ../libnm-core/nm-setting-cdma.c:157
+#: ../libnm-core/nm-setting-connection.c:761
+#: ../libnm-core/nm-setting-connection.c:777
+#: ../libnm-core/nm-setting-connection.c:807
+#: ../libnm-core/nm-setting-ip4-config.c:899
+#: ../libnm-core/nm-setting-ip6-config.c:817
+#: ../libnm-core/nm-setting-ip6-config.c:881
+#: ../libnm-core/nm-setting-olpc-mesh.c:118
+#: ../libnm-core/nm-setting-pppoe.c:158 ../libnm-core/nm-setting-vpn.c:398
+#: ../libnm-core/nm-setting-wimax.c:134
+#: ../libnm-core/nm-setting-wireless-security.c:878
+#: ../libnm-core/nm-setting-wireless.c:712 ../libnm-core/nm-setting.c:1702
+#: ../libnm-util/nm-setting.c:1279 ../libnm-util/nm-setting.c:1298
+#: ../libnm-util/nm-setting.c:1316 ../libnm-util/nm-setting-8021x.c:2282
+#: ../libnm-util/nm-setting-8021x.c:2299 ../libnm-util/nm-setting-8021x.c:2340
+#: ../libnm-util/nm-setting-8021x.c:2357 ../libnm-util/nm-setting-8021x.c:2409
+#: ../libnm-util/nm-setting-8021x.c:2421 ../libnm-util/nm-setting-8021x.c:2439
+#: ../libnm-util/nm-setting-8021x.c:2451 ../libnm-util/nm-setting-8021x.c:2475
+#: ../libnm-util/nm-setting-8021x.c:2653 ../libnm-util/nm-setting-adsl.c:208
+#: ../libnm-util/nm-setting-bluetooth.c:140
+#: ../libnm-util/nm-setting-bluetooth.c:158
+#: ../libnm-util/nm-setting-cdma.c:161
+#: ../libnm-util/nm-setting-connection.c:767
+#: ../libnm-util/nm-setting-connection.c:783
+#: ../libnm-util/nm-setting-connection.c:844
+#: ../libnm-util/nm-setting-ip4-config.c:828
+#: ../libnm-util/nm-setting-ip6-config.c:809
+#: ../libnm-util/nm-setting-ip6-config.c:873
+#: ../libnm-util/nm-setting-olpc-mesh.c:122
+#: ../libnm-util/nm-setting-pppoe.c:162 ../libnm-util/nm-setting-vpn.c:402
+#: ../libnm-util/nm-setting-wimax.c:137
+#: ../libnm-util/nm-setting-wireless-security.c:891
+#: ../libnm-util/nm-setting-wireless.c:750
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-core/nm-setting-8021x.c:2295 ../libnm-core/nm-setting-8021x.c:2312
+#: ../libnm-core/nm-setting-8021x.c:2342 ../libnm-core/nm-setting-8021x.c:2359
+#: ../libnm-core/nm-setting-8021x.c:2399 ../libnm-core/nm-setting-8021x.c:2411
+#: ../libnm-core/nm-setting-8021x.c:2429 ../libnm-core/nm-setting-8021x.c:2441
+#: ../libnm-core/nm-setting-8021x.c:2466 ../libnm-core/nm-setting-adsl.c:211
+#: ../libnm-core/nm-setting-adsl.c:220 ../libnm-core/nm-setting-cdma.c:173
+#: ../libnm-core/nm-setting-cdma.c:182
+#: ../libnm-core/nm-setting-connection.c:768
+#: ../libnm-core/nm-setting-connection.c:818
+#: ../libnm-core/nm-setting-gsm.c:241 ../libnm-core/nm-setting-gsm.c:298
+#: ../libnm-core/nm-setting-gsm.c:307
+#: ../libnm-core/nm-setting-ip4-config.c:964
+#: ../libnm-core/nm-setting-ip4-config.c:973
+#: ../libnm-core/nm-setting-pppoe.c:165 ../libnm-core/nm-setting-pppoe.c:174
+#: ../libnm-core/nm-setting-vpn.c:407 ../libnm-core/nm-setting-vpn.c:417
+#: ../libnm-core/nm-setting-wimax.c:143
+#: ../libnm-core/nm-setting-wireless-security.c:908
+#: ../libnm-core/nm-setting-wireless-security.c:916
+#: ../libnm-core/nm-setting-wireless-security.c:940
+#: ../libnm-util/nm-setting-8021x.c:2289 ../libnm-util/nm-setting-8021x.c:2306
+#: ../libnm-util/nm-setting-8021x.c:2347 ../libnm-util/nm-setting-8021x.c:2364
+#: ../libnm-util/nm-setting-8021x.c:2415 ../libnm-util/nm-setting-8021x.c:2427
+#: ../libnm-util/nm-setting-8021x.c:2445 ../libnm-util/nm-setting-8021x.c:2457
+#: ../libnm-util/nm-setting-8021x.c:2482 ../libnm-util/nm-setting-adsl.c:215
+#: ../libnm-util/nm-setting-adsl.c:224 ../libnm-util/nm-setting-cdma.c:177
+#: ../libnm-util/nm-setting-cdma.c:186
+#: ../libnm-util/nm-setting-connection.c:774
+#: ../libnm-util/nm-setting-connection.c:851
+#: ../libnm-util/nm-setting-gsm.c:281 ../libnm-util/nm-setting-gsm.c:338
+#: ../libnm-util/nm-setting-gsm.c:347
+#: ../libnm-util/nm-setting-ip4-config.c:893
+#: ../libnm-util/nm-setting-ip4-config.c:902
+#: ../libnm-util/nm-setting-pppoe.c:169 ../libnm-util/nm-setting-pppoe.c:178
+#: ../libnm-util/nm-setting-vpn.c:411 ../libnm-util/nm-setting-vpn.c:421
#: ../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
+#: ../libnm-util/nm-setting-wireless-security.c:921
+#: ../libnm-util/nm-setting-wireless-security.c:929
+#: ../libnm-util/nm-setting-wireless-security.c:953
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
+#: ../libnm-core/nm-setting-8021x.c:2324 ../libnm-core/nm-setting-8021x.c:2371
+#: ../libnm-util/nm-setting-8021x.c:2317 ../libnm-util/nm-setting-8021x.c:2329
+#: ../libnm-util/nm-setting-8021x.c:2375 ../libnm-util/nm-setting-8021x.c:2387
#, 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-core/nm-setting-8021x.c:2616 ../libnm-core/nm-setting-8021x.c:2650
+#: ../libnm-core/nm-setting-bluetooth.c:146
+#: ../libnm-core/nm-setting-infiniband.c:209
+#: ../libnm-core/nm-setting-infiniband.c:224
+#: ../libnm-core/nm-setting-ip4-config.c:955
+#: ../libnm-core/nm-setting-ip6-config.c:872
+#: ../libnm-core/nm-setting-olpc-mesh.c:147
+#: ../libnm-core/nm-setting-wimax.c:152 ../libnm-core/nm-setting-wired.c:638
+#: ../libnm-core/nm-setting-wired.c:648
+#: ../libnm-core/nm-setting-wireless-security.c:959
+#: ../libnm-core/nm-setting-wireless-security.c:968
+#: ../libnm-core/nm-setting-wireless-security.c:976
+#: ../libnm-core/nm-setting-wireless-security.c:984
+#: ../libnm-core/nm-setting-wireless-security.c:992
+#: ../libnm-core/nm-setting-wireless-security.c:1001
+#: ../libnm-core/nm-setting-wireless-security.c:1010
+#: ../libnm-core/nm-setting-wireless-security.c:1019
+#: ../libnm-core/nm-setting-wireless-security.c:1055
+#: ../libnm-core/nm-setting-wireless-security.c:1065
+#: ../libnm-core/nm-setting-wireless.c:773
+#: ../libnm-core/nm-setting-wireless.c:782
+#: ../libnm-core/nm-setting-wireless.c:791 ../libnm-util/nm-setting.c:1289
+#: ../libnm-util/nm-setting.c:1307 ../libnm-util/nm-setting.c:1326
+#: ../libnm-util/nm-setting-8021x.c:2628 ../libnm-util/nm-setting-8021x.c:2662
+#: ../libnm-util/nm-setting-bluetooth.c:149
+#: ../libnm-util/nm-setting-infiniband.c:204
+#: ../libnm-util/nm-setting-infiniband.c:220
+#: ../libnm-util/nm-setting-ip4-config.c:884
+#: ../libnm-util/nm-setting-ip6-config.c:864
+#: ../libnm-util/nm-setting-olpc-mesh.c:150
+#: ../libnm-util/nm-setting-wimax.c:155 ../libnm-util/nm-setting-wired.c:660
+#: ../libnm-util/nm-setting-wired.c:669
#: ../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
+#: ../libnm-util/nm-setting-wireless-security.c:981
+#: ../libnm-util/nm-setting-wireless-security.c:989
+#: ../libnm-util/nm-setting-wireless-security.c:997
+#: ../libnm-util/nm-setting-wireless-security.c:1005
+#: ../libnm-util/nm-setting-wireless-security.c:1014
+#: ../libnm-util/nm-setting-wireless-security.c:1023
+#: ../libnm-util/nm-setting-wireless-security.c:1032
+#: ../libnm-util/nm-setting-wireless-security.c:1068
+#: ../libnm-util/nm-setting-wireless-security.c:1078
+#: ../libnm-util/nm-setting-wireless.c:810
+#: ../libnm-util/nm-setting-wireless.c:819
+#: ../libnm-util/nm-setting-wireless.c:828
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
+#: ../libnm-core/nm-setting-8021x.c:2675 ../libnm-core/nm-setting-8021x.c:2685
+#: ../libnm-core/nm-setting-8021x.c:2695 ../libnm-core/nm-setting-8021x.c:2705
+#: ../libnm-core/nm-setting-8021x.c:2715 ../libnm-core/nm-setting-adsl.c:232
+#: ../libnm-core/nm-setting-adsl.c:244
+#: ../libnm-core/nm-setting-bluetooth.c:163
+#: ../libnm-core/nm-setting-wireless-security.c:887
+#: ../libnm-util/nm-setting-8021x.c:2687 ../libnm-util/nm-setting-8021x.c:2697
+#: ../libnm-util/nm-setting-8021x.c:2707 ../libnm-util/nm-setting-8021x.c:2717
+#: ../libnm-util/nm-setting-8021x.c:2727 ../libnm-util/nm-setting-adsl.c:236
+#: ../libnm-util/nm-setting-adsl.c:248
+#: ../libnm-util/nm-setting-bluetooth.c:166
+#: ../libnm-util/nm-setting-wireless-security.c:900
#, c-format
msgid "'%s' is not a valid value for the property"
msgstr "'%s' ಎನà³à²¨à³à²µà³à²¦à³ ಗà³à²£à²¦ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಮೌಲà³à²¯à²µà²²à³à²²"
-#: ../libnm-util/nm-setting-bluetooth.c:188
+#: ../libnm-core/nm-setting-bluetooth.c:181
+#: ../libnm-util/nm-setting-bluetooth.c:184
#, c-format
msgid "requires '%s' or '%s' setting"
msgstr "'%s' ಅಥವ '%s' ಸಿದà³à²§à²¤à³†à²¯ ಅಗತà³à²¯à²µà²¿à²¦à³†"
-#: ../libnm-util/nm-setting-bond.c:518
+#: ../libnm-core/nm-setting-bond.c:475 ../libnm-util/nm-setting-bond.c:498
#, c-format
msgid "invalid option '%s' or its value '%s'"
msgstr "ಆಯà³à²•à³† '%s' ಅಥವ ಅದರ ಮೌಲà³à²¯ '%s' ಅಮಾನà³à²¯à²µà²¾à²—ಿದೆ"
-#: ../libnm-util/nm-setting-bond.c:537
+#: ../libnm-core/nm-setting-bond.c:494 ../libnm-util/nm-setting-bond.c:517
#, c-format
msgid "only one of '%s' and '%s' can be set"
msgstr "'%s' ಮತà³à²¤à³ '%s' ರಲà³à²²à²¿ ಕೇವಲ ಒಂದನà³à²¨à³ ಮಾತà³à²° ಸೂಚಿಸಬಹà³à²¦à²¾à²—ಿದೆ"
-#: ../libnm-util/nm-setting-bond.c:548
+#: ../libnm-core/nm-setting-bond.c:505 ../libnm-util/nm-setting-bond.c:528
#, c-format
msgid "mandatory option '%s' is missing"
msgstr "ಖಡà³à²¡à²¾à²¯ ಆಯà³à²•à³† '%s' ಕಾಣಿಸà³à²¤à³à²¤à²¿à²²à³à²²"
-#: ../libnm-util/nm-setting-bond.c:557
+#: ../libnm-core/nm-setting-bond.c:514 ../libnm-util/nm-setting-bond.c:537
#, c-format
msgid "'%s' is not a valid value for '%s'"
msgstr "'%s\" ಎನà³à²¨à³à²µà³à²¦à³ '%s' ಗಾಗಿನ ಒಂದೠಮಾನà³à²¯ ಮೌಲà³à²¯à²µà²²à³à²²"
-#: ../libnm-util/nm-setting-bond.c:570
+#: ../libnm-core/nm-setting-bond.c:527 ../libnm-util/nm-setting-bond.c:550
#, c-format
msgid "'%s=%s' is incompatible with '%s > 0'"
msgstr "'%s=%s' ಎನà³à²¨à³à²µà³à²¦à³ '%s > 0' ನೊಂದಿಗೆ ಹೊಂದಿಕೊಳà³à²³à³à²¤à³à²¤à²¿à²²à³à²²"
-#: ../libnm-util/nm-setting-bond.c:583
+#: ../libnm-core/nm-setting-bond.c:540 ../libnm-util/nm-setting-bond.c:563
#, c-format
msgid "'%s' is not a valid interface name for '%s' option"
msgstr "'%s' ಎನà³à²¨à³à²µà³à²¦à³ '%s' ಗಾಗಿನ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಸಂಪರà³à²•à²¸à²¾à²§à²¨à²¦ ಹೆಸರಲà³à²²"
-#: ../libnm-util/nm-setting-bond.c:593
+#: ../libnm-core/nm-setting-bond.c:550 ../libnm-util/nm-setting-bond.c:573
#, c-format
msgid "'%s' option is only valid for '%s=%s'"
msgstr "'%s' ಆಯà³à²•à³†à²¯à³ ಕೇವಲ '%s=%s' ಕà³à²•à³† ಮಾತà³à²° ಮಾನà³à²¯à²µà²¾à²—ಿರà³à²¤à³à²¤à²¦à³†"
-#: ../libnm-util/nm-setting-bond.c:606
+#: ../libnm-core/nm-setting-bond.c:563 ../libnm-util/nm-setting-bond.c:586
#, 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
+#: ../libnm-core/nm-setting-bond.c:576 ../libnm-core/nm-setting-bond.c:585
+#: ../libnm-core/nm-setting-bond.c:605 ../libnm-core/nm-setting-bond.c:641
+#: ../libnm-util/nm-setting-bond.c:599 ../libnm-util/nm-setting-bond.c:608
+#: ../libnm-util/nm-setting-bond.c:628 ../libnm-util/nm-setting-bond.c:664
#, c-format
msgid "'%s' option requires '%s' option to be set"
msgstr "'%s' ಆಯà³à²•à³†à²—ಾಗಿ '%s' ಆಯà³à²•à³†à²¯à²¨à³à²¨à³ ಸಿದà³à²§à²—ೊಳಿಸà³à²µ ಅಗತà³à²¯à²µà²¿à²°à³à²¤à³à²¤à²¦à³†"
-#: ../libnm-util/nm-setting-bond.c:659
+#: ../libnm-core/nm-setting-bond.c:616 ../libnm-util/nm-setting-bond.c:639
#, c-format
msgid "'%s' option is empty"
msgstr "'%s' ಆಯà³à²•à³†à²¯à³ ಖಾಲಿ ಇದೆ"
-#: ../libnm-util/nm-setting-bond.c:671
+#: ../libnm-core/nm-setting-bond.c:628 ../libnm-util/nm-setting-bond.c:651
#, 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
+#: ../libnm-core/nm-setting-bridge-port.c:139
+#: ../libnm-core/nm-setting-bridge-port.c:151
+#: ../libnm-util/nm-setting-bridge-port.c:153
+#: ../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
+#: ../libnm-core/nm-setting-bridge-port.c:176
+#: ../libnm-core/nm-setting-team-port.c:119
+#, c-format
+msgid ""
+"A connection with a '%s' setting must have the slave-type set to '%s'. "
+"Instead it is '%s'"
+msgstr ""
+"'%s' ಸಿದà³à²§à²¤à³†à²¯à²¨à³à²¨à³ ಹೊಂದಿರà³à²µ ಒಂದೠಸಂಪರà³à²•à²¦à²²à³à²²à²¿ ಸà³à²²à³‡à²µà³-ಬಗೆಯನà³à²¨à³ '%s' ಗೆ "
+"ಹೊಂದಿಸಿರಬೇಕà³. ಬದಲಿಗೆ '%s' ಆಗಿದೆ"
+
+#: ../libnm-core/nm-setting-bridge.c:223 ../libnm-util/nm-setting-bridge.c:268
#, c-format
msgid "value '%d' is out of range <%d-%d>"
msgstr "'%d' ಮೌಲà³à²¯à²µà³ <%d-%d> ವà³à²¯à²¾à²ªà³à²¤à²¿à²¯ ಹೊರಗಿದೆ"
-#: ../libnm-util/nm-setting-cdma.c:170
+#: ../libnm-core/nm-setting-bridge.c:240 ../libnm-core/nm-setting-wired.c:613
+#: ../libnm-core/nm-setting-wired.c:672 ../libnm-util/nm-setting-bridge.c:285
+#: ../libnm-util/nm-setting-wired.c:635 ../libnm-util/nm-setting-wired.c:693
+msgid "is not a valid MAC address"
+msgstr "ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ MAC ವಿಳಾಸವಲà³à²²"
+
+#: ../libnm-core/nm-setting-cdma.c:164 ../libnm-util/nm-setting-cdma.c:168
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
+#: ../libnm-core/nm-setting-connection.c:740
+#: ../libnm-util/nm-setting-connection.c:861
#, 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-core/nm-setting-connection.c:828
+#, c-format
+#| msgid "index '%s' is not valid"
+msgid "connection type '%s' is not valid"
+msgstr "ಸಂಪರà³à²•à²¦ ಬಗೆ '%s' ಎಂಬà³à²¦à³ ಮಾನà³à²¯à²µà²¾à²¦ ಬಗೆಯಾಗಿಲà³à²²"
-#: ../libnm-util/nm-setting-connection.c:815
-msgid "IPv6 configuration is not allowed for slave"
-msgstr "ಸà³à²²à³‡à²µà³â€Œà²—ಾಗಿ IPv6 ಸಂರಚನೆಗೆ ಅನà³à²®à²¤à²¿ ಇರà³à²µà³à²¦à²¿à²²à³à²²"
+#: ../libnm-core/nm-setting-connection.c:838
+#, c-format
+#| msgid "Error: 'bt-type': '%s' is not a valid bluetooth type.\n"
+msgid "connection type '%s' is not a valid base type"
+msgstr "ಸಂಪರà³à²•à²¦ ಬಗೆ '%s' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಮೂಲ ಬಗೆಯಲà³à²²"
-#: ../libnm-util/nm-setting-dcb.c:595
+#: ../libnm-core/nm-setting-connection.c:873
+#: ../libnm-util/nm-setting-connection.c:876
+#, c-format
+#| msgid "Unknown log level '%s'"
+msgid "Unknown slave type '%s'"
+msgstr "ಗೊತà³à²¤à²¿à²°à²¦ ಸà³à²²à³‡à²µà³ ಬಗೆ '%s'"
+
+#: ../libnm-core/nm-setting-connection.c:883
+#: ../libnm-util/nm-setting-connection.c:886
+#| msgid "Shared connection service failed"
+msgid "Slave connections need a valid '"
+msgstr "ಸà³à²²à³‡à²µà³â€Œ ಸಂಪರà³à²•à²—ಳಿಗೆ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ' ಅಗತà³à²¯à²µà²¿à²°à³à²¤à³à²¤à²¦à³†"
+
+#: ../libnm-core/nm-setting-connection.c:904
+#: ../libnm-util/nm-setting-connection.c:895
+#| msgid "not saved, "
+msgid "Cannot set '"
+msgstr "' ಅನà³à²¨à³ ಹೊಂದಿಸಲಾಗಿಲà³à²²"
+
+#: ../libnm-core/nm-setting-connection.c:917
+#, c-format
+msgid "property type should be set to '%s'"
+msgstr "ಗà³à²£à²¦ ಬಗೆಯನà³à²¨à³ '%s' ಗೆ ಹೊಂದಿಸಬೇಕà³"
+
+#: ../libnm-core/nm-setting-connection.c:932
+#, c-format
+#| msgid "requires presence of '%s' setting in the connection"
+msgid "slave-type '%s' requires a '%s' setting in the connection"
+msgstr "ಸà³à²²à³‡à²µà³â€Œ-ಬಗೆ '%s' ಗಾಗಿ ಸಂಪರà³à²•à²¦à²²à³à²²à²¿ '%s' ಸಿದà³à²§à²¤à³†à²¯ ಅಗತà³à²¯à²µà²¿à²°à³à²¤à³à²¤à²¦à³†"
+
+#: ../libnm-core/nm-setting-connection.c:942
+#, c-format
+#| msgid "Select the type of slave connection you wish to add."
+msgid "Detect a slave connection with '"
+msgstr "' ಅನà³à²¨à³ ಹೊಂದಿರà³à²µ ಸà³à²²à³‡à²µà³ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಪತà³à²¤à³† ಮಾಡಿ"
+
+#: ../libnm-core/nm-setting-dcb.c:540 ../libnm-util/nm-setting-dcb.c:593
msgid "flags invalid"
msgstr "ಫà³à²²à³à²¯à²¾à²—à³â€Œà²—ಳೠಅಮಾನà³à²¯à²µà²¾à²—ಿವೆ"
-#: ../libnm-util/nm-setting-dcb.c:604
+#: ../libnm-core/nm-setting-dcb.c:549 ../libnm-util/nm-setting-dcb.c:602
msgid "flags invalid - disabled"
msgstr "ಫà³à²²à³à²¯à²¾à²—à³â€Œà²—ಳೠಅಮಾನà³à²¯à²µà²¾à²—ಿವೆ - ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†"
-#: ../libnm-util/nm-setting-dcb.c:630 ../libnm-util/nm-setting-dcb.c:679
+#: ../libnm-core/nm-setting-dcb.c:575 ../libnm-core/nm-setting-dcb.c:624
+#: ../libnm-util/nm-setting-dcb.c:628 ../libnm-util/nm-setting-dcb.c:677
msgid "property invalid (not enabled)"
msgstr "ಗà³à²£à²µà³ ಅಮಾನà³à²¯à²µà²¾à²—ಿದೆ (ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಲಾಗಿಲà³à²²)"
-#: ../libnm-util/nm-setting-dcb.c:639
+#: ../libnm-core/nm-setting-dcb.c:584 ../libnm-util/nm-setting-dcb.c:637
msgid "element invalid"
msgstr "ಘಟಕವೠಅಮಾನà³à²¯à²µà²¾à²—ಿದೆ"
-#: ../libnm-util/nm-setting-dcb.c:654
+#: ../libnm-core/nm-setting-dcb.c:599 ../libnm-util/nm-setting-dcb.c:652
msgid "sum not 100%"
msgstr "ಮೊತà³à²¤à²µà³ 100% ಆಗಿಲà³à²²"
-#: ../libnm-util/nm-setting-dcb.c:688 ../libnm-util/nm-setting-dcb.c:720
+#: ../libnm-core/nm-setting-dcb.c:633 ../libnm-core/nm-setting-dcb.c:665
+#: ../libnm-util/nm-setting-dcb.c:686 ../libnm-util/nm-setting-dcb.c:718
msgid "property invalid"
msgstr "ಗà³à²£à²µà³ ಅಮಾನà³à²¯à²µà²¾à²—ಿದೆ"
-#: ../libnm-util/nm-setting-dcb.c:710
+#: ../libnm-core/nm-setting-dcb.c:655 ../libnm-util/nm-setting-dcb.c:708
msgid "property missing"
msgstr "ಗà³à²£à²µà³ ಕಾಣಿಸà³à²¤à³à²¤à²¿à²²à³à²²"
-#: ../libnm-util/nm-setting-gsm.c:297
+#: ../libnm-core/nm-setting-gsm.c:254 ../libnm-util/nm-setting-gsm.c:294
#, c-format
msgid "property value '%s' is empty or too long (>64)"
msgstr "'%s' ಗà³à²£à²¦ ಮೌಲà³à²¯à²µà³ ಖಾಲಿ ಇದೆ ಅಥವ ಬಹಳ ಉದà³à²¦à²µà²¾à²—ಿದೆ (>64)"
-#: ../libnm-util/nm-setting-gsm.c:329
+#: ../libnm-core/nm-setting-gsm.c:286 ../libnm-util/nm-setting-gsm.c:326
#, c-format
msgid "'%s' contains invalid char(s) (use [A-Za-z._-])"
msgstr ""
-"'%s' ಎನà³à²¨à³à²µà³à²¦à³ ಅಮಾನà³à²¯à²µà²¾à²¦ ಅಕà³à²·à²°à²µà²¨à³à²¨à³(ಗಳನà³à²¨à³) ಹೊಂದಿದೆ ( [A-Za-z._-] ಅನà³à²¨à³ "
-"ಬಳಸà³)"
+"'%s' ಎನà³à²¨à³à²µà³à²¦à³ ಅಮಾನà³à²¯à²µà²¾à²¦ ಅಕà³à²·à²°à²µà²¨à³à²¨à³(ಗಳನà³à²¨à³) ಹೊಂದಿದೆ ( [A-Za-z._-] ಅನà³à²¨à³ ಬಳಸà³)"
-#: ../libnm-util/nm-setting-gsm.c:364
+#: ../libnm-core/nm-setting-gsm.c:321 ../libnm-util/nm-setting-gsm.c:361
#, c-format
msgid "'%s' length is invalid (should be 5 or 6 digits)"
msgstr "'%s' ಉದà³à²¦à²µà³ ಅಮಾನà³à²¯à²µà²¾à²—ಿದೆ (5 ಅಥವ 6 ಅಂಕಿಗಳಷà³à²Ÿà²¿à²°à²¬à³‡à²•à³)"
-#: ../libnm-util/nm-setting-infiniband.c:228
+#: ../libnm-core/nm-setting-infiniband.c:234
+#: ../libnm-util/nm-setting-infiniband.c:230
msgid "not a valid interface name"
msgstr "ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಸಂಪರà³à²•à²¸à²¾à²§à²¨à²¦ ಹೆಸರಲà³à²²"
-#: ../libnm-util/nm-setting-infiniband.c:236
+#: ../libnm-core/nm-setting-infiniband.c:242
+#: ../libnm-util/nm-setting-infiniband.c:238
msgid "Must specify a P_Key if specifying parent"
msgstr "ಮೂಲವನà³à²¨à³ (ಪೇರೆಂಟà³) ಸೂಚಿಸà³à²µà²¾à²— P_Key ಅನà³à²¨à³ ಸೂಚಿಸà³à²µà³à²¦à³ ಅತà³à²¯à²—ತà³à²¯"
-#: ../libnm-util/nm-setting-infiniband.c:246
+#: ../libnm-core/nm-setting-infiniband.c:252
+#: ../libnm-util/nm-setting-infiniband.c:248
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
+#: ../libnm-core/nm-setting-infiniband.c:288
+#: ../libnm-util/nm-setting-infiniband.c:284
+#, c-format
+msgid ""
+"interface name of software infiniband device must be '%s' or unset (instead "
+"it is '%s')"
+msgstr ""
+"ತಂತà³à²°à²¾à²‚ಶ ಇನà³â€Œà²«à²¿à²¨à²¿à²¬à³à²¯à²¾à²‚ಡà³â€Œ ಸಾಧನದ ಸಂಪರà³à²•à²¸à²¾à²§à²¨à²¦ ಹೆಸರೠ'%s' ಆಗಿರಬೇಕೠಅಥವ "
+"ಸೂಚಿಸಿರಬಾರದೠ(ಬದಲಿಗೆ ಅದೠ'%s' ಆಗಿದೆ)"
+
+#: ../libnm-core/nm-setting-infiniband.c:303
+#, c-format
+msgid "mtu for transport mode '%s' can be at most %d but it is %d"
+msgstr "ವರà³à²—ಾವಣೆ ಕà³à²°à²® '%s' ಗಾಗಿನ mtu ಯೠ%d ಗರಿಷà³à²Ÿ ಆಗಿರಬಹà³à²¦à³ ಆದರೆ %d ಆಗಿದೆ"
+
+#: ../libnm-core/nm-setting-ip4-config.c:909
+#: ../libnm-core/nm-setting-ip6-config.c:827
+#: ../libnm-util/nm-setting-ip4-config.c:838
+#: ../libnm-util/nm-setting-ip6-config.c:819
+#, c-format
+#| msgid "this property is not allowed for '%s=%s'"
+msgid "this property cannot be empty for '%s=%s'"
+msgstr "ಈ ಗà³à²£à²µà³ '%s=%s' ಗಾಗಿ ಖಾಲಿ ಇರà³à²µà²‚ತಿಲà³à²²"
+
+#: ../libnm-core/nm-setting-ip4-config.c:921
+#: ../libnm-core/nm-setting-ip4-config.c:931
+#: ../libnm-core/nm-setting-ip4-config.c:943
+#: ../libnm-core/nm-setting-ip6-config.c:840
+#: ../libnm-core/nm-setting-ip6-config.c:850
+#: ../libnm-core/nm-setting-ip6-config.c:860
+#: ../libnm-util/nm-setting-ip4-config.c:850
+#: ../libnm-util/nm-setting-ip4-config.c:860
+#: ../libnm-util/nm-setting-ip4-config.c:872
+#: ../libnm-util/nm-setting-ip6-config.c:832
+#: ../libnm-util/nm-setting-ip6-config.c:842
+#: ../libnm-util/nm-setting-ip6-config.c:852
#, c-format
msgid "this property is not allowed for '%s=%s'"
msgstr "ಈ ಗà³à²£à²µà³ '%s=%s' ಗಾಗಿ ಅನà³à²®à²¤à²¿ ಇಲà³à²²"
-#: ../libnm-util/nm-setting-ip4-config.c:789
+#: ../libnm-core/nm-setting-ip4-config.c:990
+#: ../libnm-util/nm-setting-ip4-config.c:916
#, c-format
msgid "%d. IPv4 address is invalid"
msgstr "%d. IPv4 ವಿಳಾಸವೠಅಮಾನà³à²¯à²µà²¾à²—ಿದೆ"
-#: ../libnm-util/nm-setting-ip4-config.c:799
+#: ../libnm-core/nm-setting-ip4-config.c:1000
+#: ../libnm-util/nm-setting-ip4-config.c:926
#, c-format
msgid "%d. IPv4 address has invalid prefix"
msgstr "%d. IPv4 ವಿಳಾಸವೠಅಮಾನà³à²¯à²µà²¾à²¦ ಪà³à²°à²¿à²«à²¿à²•à³à²¸à²¨à³à²¨à³ ಹೊಂದಿದೆ"
-#: ../libnm-util/nm-setting-ip4-config.c:815
+#: ../libnm-core/nm-setting-ip4-config.c:1010
+#, c-format
+#| msgid "%d. IPv4 address has invalid prefix"
+msgid "%d. IPv4 address has invalid label '%s'"
+msgstr "%d. IPv4 ವಿಳಾಸವೠಅಮಾನà³à²¯à²µà²¾à²¦ ಲೇಬಲೠ'%s' ಅನà³à²¨à³ ಹೊಂದಿದೆ"
+
+#: ../libnm-core/nm-setting-ip4-config.c:1021
+#, c-format
+msgid "IPv4 address / label count mismatch (%d vs %d)"
+msgstr "IPv4 ವಿಳಾಸ / ಲೇಬಲೠಎಣಿಕೆ ಹೊಂದಿಕೆಯಾಗà³à²¤à³à²¤à²¿à²²à³à²² (%d vs %d)"
+
+#: ../libnm-core/nm-setting-ip4-config.c:1037
+#: ../libnm-util/nm-setting-ip4-config.c:942
#, c-format
msgid "%d. route is invalid"
msgstr "%d. ರೌಟà³â€Œ ಅಮಾನà³à²¯à²µà²¾à²—ಿದೆ"
-#: ../libnm-util/nm-setting-ip4-config.c:825
+#: ../libnm-core/nm-setting-ip4-config.c:1047
+#: ../libnm-util/nm-setting-ip4-config.c:952
#, c-format
msgid "%d. route has invalid prefix"
msgstr "%d. ರೌಟà³â€Œ ಅಮಾನà³à²¯à²µà²¾à²¦ ಪà³à²°à²¿à²«à²¿à²•à³à²¸à²¨à³à²¨à³ ಹೊಂದಿದೆ"
-#: ../libnm-util/nm-setting-ip6-config.c:708
+#: ../libnm-core/nm-setting-ip4-config.c:1063
+#: ../libnm-core/nm-setting-ip6-config.c:894
+#, c-format
+#| msgid "%d. IPv4 address is invalid"
+msgid "%d. DNS server address is invalid"
+msgstr "%d. DNS ಪೂರೈಕೆಗಣಕ ವಿಳಾಸವೠಅಮಾನà³à²¯à²µà²¾à²—ಿದೆ"
+
+#: ../libnm-core/nm-setting-ip6-config.c:839
+#: ../libnm-util/nm-setting-ip6-config.c:831
#, 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
+#: ../libnm-core/nm-setting-olpc-mesh.c:128
+#: ../libnm-core/nm-setting-wireless.c:722
+#: ../libnm-util/nm-setting-olpc-mesh.c:131
+#: ../libnm-util/nm-setting-wireless.c:759
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
+#: ../libnm-core/nm-setting-olpc-mesh.c:137
+#: ../libnm-core/nm-setting-wireless.c:762
+#: ../libnm-util/nm-setting-olpc-mesh.c:140
+#: ../libnm-util/nm-setting-wireless.c:799
#, c-format
msgid "'%d' is not a valid channel"
msgstr "'%d' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಚಾನಲೠಅಲà³à²²"
-#: ../libnm-util/nm-setting-ppp.c:390
+#: ../libnm-core/nm-setting-ppp.c:383 ../libnm-util/nm-setting-ppp.c:387
#, c-format
msgid "'%d' is out of valid range <128-16384>"
msgstr "'%d' ಎನà³à²¨à³à²µà³à²¦à³ ಮಾನà³à²¯à²µà²¾à²¦ <128-16384> ವà³à²¯à²¾à²ªà³à²¤à²¿à²¯ ಹೊರಗಿದೆ"
-#: ../libnm-util/nm-setting-ppp.c:403
+#: ../libnm-core/nm-setting-ppp.c:396 ../libnm-util/nm-setting-ppp.c:400
#, c-format
msgid "setting this property requires non-zero '%s' property"
msgstr "ಈ ಗà³à²£à²µà²¨à³à²¨à³ ಹೊಂದಿಸಲೠಶೂನà³à²¯à²µà²²à³à²²à²¦ '%s' ಗà³à²£à²¦ ಅಗತà³à²¯à²µà²¿à²¦à³†"
-#: ../libnm-util/nm-setting-vlan.c:497
+#: ../libnm-core/nm-setting-vlan.c:528 ../libnm-util/nm-setting-vlan.c:554
#, c-format
msgid "'%s' value doesn't match '%s=%s'"
msgstr "'%s' ಮೌಲà³à²¯à²µà³ '%s=%s' ಗೆ ಹೊಂದಿಕೆಯಾಗà³à²µà³à²¦à²¿à²²à³à²²"
-#: ../libnm-util/nm-setting-vlan.c:508
+#: ../libnm-core/nm-setting-vlan.c:539 ../libnm-util/nm-setting-vlan.c:565
#, c-format
msgid "'%s' is neither an UUID nor an interface name"
msgstr "'%s' ಎನà³à²¨à³à²µà³à²¦à³ UUID ಅಥವ ಸಂಪರà³à²•à²¸à²¾à²§à²¨à²¦ ಹೆಸರಾಗಿಲà³à²²"
-#: ../libnm-util/nm-setting-vlan.c:521
+#: ../libnm-core/nm-setting-vlan.c:553 ../libnm-util/nm-setting-vlan.c:578
#, c-format
msgid "property is not specified and neither is '%s:%s'"
msgstr "ಗà³à²£à²µà²¨à³à²¨à³ ಸೂಚಿಸಲಾಗಿಲà³à²² ಮತà³à²¤à³ '%s:%s' ಆಗಿಲà³à²²"
-#: ../libnm-util/nm-setting-vlan.c:534
+#: ../libnm-core/nm-setting-vlan.c:566 ../libnm-util/nm-setting-vlan.c:591
msgid "flags are invalid"
msgstr "ಫà³à²²à³à²¯à²¾à²—à³â€Œà²—ಳೠಅಮಾನà³à²¯à²µà²¾à²—ಿದೆ"
-#: ../libnm-util/nm-setting-wired.c:562
+#: ../libnm-core/nm-setting-wired.c:593 ../libnm-util/nm-setting-wired.c:615
#, c-format
-msgid "'%s' is not a valid ethernet port value"
-msgstr "'%s' ಎನà³à²¨à³à²µà³à²¦à³ ಮಾನà³à²¯à²µà²¾à²¦ ಎತರà³à²¨à³†à²Ÿà³ ಸಂಪರà³à²•à²¸à³à²¥à²¾à²¨ ಮೌಲà³à²¯à²µà²²à³à²²"
+#| msgid "'%s' is not a valid ethernet port value"
+msgid "'%s' is not a valid Ethernet port value"
+msgstr "'%s' ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಎತರà³à²¨à³†à²Ÿà³ ಸಂಪರà³à²•à²¸à³à²¥à²¾à²¨ ಮೌಲà³à²¯à²µà²²à³à²²"
-#: ../libnm-util/nm-setting-wired.c:572
+#: ../libnm-core/nm-setting-wired.c:603 ../libnm-util/nm-setting-wired.c:625
#, 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
+#: ../libnm-core/nm-setting-wired.c:661 ../libnm-util/nm-setting-wired.c:682
#, c-format
msgid "invalid '%s' or its value '%s'"
msgstr "'%s' ಅಥವ ಅದರ ಮೌಲà³à²¯à²µà³ '%s' ಅಮಾನà³à²¯à²µà²¾à²—ಿದೆ"
-#: ../libnm-util/nm-setting-wireless-security.c:816
+#: ../libnm-core/nm-setting-wireless-security.c:899
+#: ../libnm-util/nm-setting-wireless-security.c:912
#, c-format
msgid "'%s' security requires '%s=%s'"
msgstr "'%s' ಸà³à²°à²•à³à²·à²¤à³†à²—ಾಗಿ '%s=%s' ಅಗತà³à²¯à²µà²¿à²°à³à²¤à³à²¤à²¦à³†"
-#: ../libnm-util/nm-setting-wireless-security.c:845
+#: ../libnm-core/nm-setting-wireless-security.c:928
+#: ../libnm-util/nm-setting-wireless-security.c:941
#, c-format
msgid "'%s' security requires '%s' setting presence"
msgstr "'%s' ಸà³à²°à²•à³à²·à²¤à³†à²—ಾಗಿ '%s' ಸಿದà³à²§à²¤à³†à²¯à³ ಇರà³à²µ ಅಗತà³à²¯à²µà²¿à²°à³à²¤à³à²¤à²¦à³†"
-#: ../libnm-util/nm-setting-wireless-security.c:866
+#: ../libnm-core/nm-setting-wireless-security.c:949
+#: ../libnm-util/nm-setting-wireless-security.c:962
#, c-format
msgid "'%d' value is out of range <0-3>"
msgstr "'%d' ಮೌಲà³à²¯à²µà³ <0-3> ವà³à²¯à²¾à²ªà³à²¤à²¿à²¯ ಹೊರಗಿದೆ"
-#: ../libnm-util/nm-setting-wireless-security.c:963
+#: ../libnm-core/nm-setting-wireless-security.c:1046
+#: ../libnm-util/nm-setting-wireless-security.c:1059
#, c-format
msgid "'%s' connections require '%s' in this property"
msgstr "ಈ ಗà³à²£à²¦à²²à³à²²à²¿ '%s' ಸಂಪರà³à²•à²—ಳಿಗಾಗಿ '%s' ಅಗತà³à²¯à²µà²¿à²¦à³†"
-#: ../libnm-util/nm-setting-wireless-security.c:993
+#: ../libnm-core/nm-setting-wireless-security.c:1076
+#: ../libnm-util/nm-setting-wireless-security.c:1089
#, c-format
msgid "'%s' can only be used with '%s=%s' (WEP)"
msgstr "'%s' ಅನà³à²¨à³ ಕೇವಲ '%s=%s' ಎನà³à²¨à³à²µà³à²¦à²°à³Šà²‚ದಿಗೆ ಮಾತà³à²° ಬಳಸಬಹà³à²¦à³ (WEP)"
-#: ../libnm-util/nm-setting-wireless.c:715
+#: ../libnm-core/nm-setting-wireless.c:731
+#: ../libnm-util/nm-setting-wireless.c:768
#, c-format
msgid "'%s' is not a valid Wi-Fi mode"
msgstr "'%s' ಎಂಬà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ವೈ-ಫೈ ಸಾಧನವಾಗಿಲà³à²²."
-#: ../libnm-util/nm-setting-wireless.c:725
+#: ../libnm-core/nm-setting-wireless.c:741
+#: ../libnm-util/nm-setting-wireless.c:778
#, c-format
msgid "'%s' is not a valid band"
msgstr "'%s\" ಎನà³à²¨à³à²µà³à²¦à³ ಒಂದೠಮಾನà³à²¯à²µà²¾à²¦ ಬà³à²¯à²¾à²‚ಡೠಅಲà³à²²"
-#: ../libnm-util/nm-setting-wireless.c:735
+#: ../libnm-core/nm-setting-wireless.c:751
+#: ../libnm-util/nm-setting-wireless.c:788
#, c-format
msgid "requires setting '%s' property"
msgstr "'%s' ಗà³à²£à²µà²¨à³à²¨à³ ಹೊಂದಿಸà³à²µ ಅಗತà³à²¯à²µà²¿à²°à³à²¤à³à²¤à²¦à³†"
+#: ../libnm-core/nm-setting.c:1681
+#, c-format
+#| msgid "requires '%s' or '%s' setting"
+msgid "Missing '%s' setting"
+msgstr "'%s' ಸಿದà³à²§à²¤à³†à²¯ ಕಾಣಿಸà³à²¤à³à²¤à²¿à²²à³à²²"
+
+#: ../libnm-glib/nm-device.c:1792
+msgid "Bluetooth"
+msgstr "ಬà³à²²à³‚ಟೂತà³"
+
+#: ../libnm-glib/nm-device.c:1810
+msgid "ADSL"
+msgstr "ADSL"
+
+#: ../libnm-glib/nm-device.c:1838
+msgid "Wired"
+msgstr "ತಂತಿಯà³à²•à³à²¤"
+
+#: ../libnm-glib/nm-device.c:1869
+msgid "PCI"
+msgstr "PCI"
+
+#: ../libnm-glib/nm-device.c:1871
+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:1967 ../libnm-glib/nm-device.c:1986
+#, c-format
+msgctxt "long device name"
+msgid "%s %s"
+msgstr "%s %s"
+
+#: ../libnm-glib/nm-remote-connection.c:149
+#: ../libnm/nm-remote-connection.c:112
+#| msgid "disconnected"
+msgid "Disconnected by D-Bus"
+msgstr "D-Bus ನಿಂದ ಸಂಪರà³à²•à²•à²¡à²¿à²¦à³ ಹೋಗಿದೆ"
+
+#: ../libnm/nm-object.c:148
+msgid "Caller did not specify D-Bus path for object"
+msgstr "ಆಬà³à²œà³†à²•à³à²Ÿà³â€Œà²—ಾಗಿ ಕಾಲರೠಯಾವà³à²¦à³† D-Bus ಮಾರà³à²—ವನà³à²¨à³ ಸೂಚಿಸಿಲà³à²²"
+
+#: ../libnm/nm-vpn-plugin.c:750
+#| msgid "Error: No interface specified."
+msgid "No service name specified"
+msgstr "ಯಾವà³à²¦à³† ಸೇವೆಯ ಹೆಸರನà³à²¨à³ ಸೂಚಿಸಲಾಗಿಲà³à²²"
+
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:1
msgid "Enable or disable system networking"
msgstr "ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ಜಾಲಬಂಧವನà³à²¨à³ ಶಕà³à²¤à²—ೊಳಿಸಿ ಅಥವ ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸಿ"
@@ -5482,13 +7410,15 @@ 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"
@@ -5511,15 +7441,15 @@ msgstr ""
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:9
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 WiMAX mobile broadband devices"
msgstr ""
-"WiMAX ಮೊಬೈಲೠಬà³à²°à²¾à²¡à³â€Œà²¬à³à²¯à²¾à²‚ಡೠಸಾಧನಗಳನà³à²¨à³ ಶಕà³à²¤ ಅಥವ ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸದಂತೆ "
-"ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ನಿಯಮಗಳೠತಡೆಯà³à²¤à³à²¤à²¿à²µà³†"
+"WiMAX ಮೊಬೈಲೠಬà³à²°à²¾à²¡à³â€Œà²¬à³à²¯à²¾à²‚ಡೠಸಾಧನಗಳನà³à²¨à³ ಶಕà³à²¤ ಅಥವ ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸದಂತೆ ವà³à²¯à²µà²¸à³à²¥à³†à²¯ "
+"ನಿಯಮಗಳೠ"
+"ತಡೆಯà³à²¤à³à²¤à²¿à²µà³†"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:11
msgid "Allow control of network connections"
@@ -5534,8 +7464,7 @@ 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 ಜಾಲಬಂಧದ ಮೂಲಕ ಸಂಪರà³à²• ಸಾಧಿಸದಂತೆ ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ನಿಯಮಗಳೠ"
"ತಡೆಯà³à²¤à³à²¤à²µà³†"
@@ -5547,8 +7476,7 @@ 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 "Modify personal network connections"
@@ -5578,6 +7506,28 @@ msgid "System policy prevents modification of the persistent system hostname"
msgstr ""
"ಸà³à²¥à²¿à²° ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ಆತಿಥೇಯ ಹೆಸರನà³à²¨à³ ಮಾರà³à²ªà²¡à²¿à²¸à²¦à²‚ತೆ ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ನಿಯಮಗಳೠತಡೆಯà³à²¤à³à²¤à²µà³†"
+#. Translators: the first %s is a prefix for the connection id, such
+#. * as "Wired Connection" or "VPN Connection". The %d is a number
+#. * that is combined with the first argument to create a unique
+#. * connection id.
+#: ../src/NetworkManagerUtils.c:952
+#, c-format
+#| msgctxt "long device name"
+#| msgid "%s %s"
+msgctxt "connection id fallback"
+msgid "%s %d"
+msgstr "%s %d"
+
+#: ../src/main.c:130
+#, c-format
+msgid "Failed to set signal mask: %d"
+msgstr "ಸಂಜà³à²žà³† ಮà³à²¸à³à²•à²¨à³à²¨à³ ಹೊಂದಿಸà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: %d"
+
+#: ../src/main.c:139
+#, c-format
+msgid "Failed to create signal handling thread: %d"
+msgstr "ಸಂಜà³à²žà³† ನಿಭಾಯಿಸà³à²µ ಎಳೆಯನà³à²¨à³ ನಿರà³à²®à²¿à²¸à³à²µà²²à³à²²à²¿ ವಿಫಲವಾಗಿದೆ :%d"
+
#: ../src/main.c:154
#, c-format
msgid "Opening %s failed: %s\n"
@@ -5598,60 +7548,60 @@ msgstr "%s ಅನà³à²¨à³ ಮà³à²šà³à²šà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊà
msgid "NetworkManager is already running (pid %ld)\n"
msgstr "NetworkManager ಈಗಾಗಲೆ ಚಾಲನೆಯಲà³à²²à²¿à²¦à³† (pid %ld)\n"
-#: ../src/main.c:329
+#: ../src/main.c:361
msgid "Print NetworkManager version and exit"
msgstr "NetworkManager ಆವೃತà³à²¤à²¿à²¯à²¨à³à²¨à³ ಮà³à²¦à³à²°à²¿à²¸à²¿ ನಿರà³à²—ಮಿಸà³"
-#: ../src/main.c:330
+#: ../src/main.c:362
msgid "Don't become a daemon"
msgstr "ಒಂದೠಡೆಮನೠಆಗಬೇಡ"
-#: ../src/main.c:331
+#: ../src/main.c:363
msgid "Don't become a daemon, and log to stderr"
msgstr "ಒಂದೠಡೆಮನೠಆಗಬೇಡ, ಮತà³à²¤à³ stderr ಗೆ ಲಾಗೠಮಾಡà³"
-#: ../src/main.c:332
+#: ../src/main.c:364
#, c-format
msgid "Log level: one of [%s]"
msgstr "ಲಾಗೠಹಂತ: [%s] ದಲà³à²²à²¿ ಒಂದà³"
-#: ../src/main.c:334
+#: ../src/main.c:366
#, c-format
msgid "Log domains separated by ',': any combination of [%s]"
msgstr ""
"ಲಾಗೠಡೊಮೇನà³â€Œà²—ಳನà³à²¨à³ ',' ಇಂದ ಪà³à²°à²¤à³à²¯à³‡à²•à²¿à²¸à²²à²¾à²—ಿರà³à²¤à³à²¤à²¦à³†: [%s] ನ ಯಾವà³à²¦à³† ಸಂಯೋಜನೆ"
-#: ../src/main.c:336
+#: ../src/main.c:368
msgid "Make all warnings fatal"
msgstr "ಎಲà³à²²à²¾ ಎಚà³à²šà²°à²¿à²•à³†à²—ಳನà³à²¨à³ ಮಾರಕವಾಗಿಸà³"
-#: ../src/main.c:337
+#: ../src/main.c:369
msgid "Specify the location of a PID file"
msgstr "ಒಂದೠPID ಕಡತವನà³à²¨à³ ಸೂಚಿಸಿ"
-#: ../src/main.c:337
+#: ../src/main.c:369
msgid "filename"
msgstr "ಕಡತದಹೆಸರà³"
-#: ../src/main.c:338
+#: ../src/main.c:370
msgid "State file location"
msgstr "ಸà³à²¥à²¿à²¤à²¿ ಕಡತವೠಇರà³à²µ ಸà³à²¥à²³"
-#: ../src/main.c:338
+#: ../src/main.c:370
msgid "/path/to/state.file"
msgstr "/path/to/state.file"
-#: ../src/main.c:364
+#: ../src/main.c:396
#, c-format
msgid "GModules are not supported on your platform!\n"
msgstr "GModules ನಿಮà³à²® ಪà³à²²à²¾à²Ÿà³â€Œà²«à²¾à²°à³à²®à²¿à²¨à²²à³à²²à²¿ ಬೆಂಬಲಿತವಾಗಿಲà³à²²!\n"
-#: ../src/main.c:369
+#: ../src/main.c:401
#, c-format
msgid "You must be root to run NetworkManager!\n"
msgstr "NetworkManager ಅನà³à²¨à³ ಚಲಾಯಿಸಲೠನೀವೠನಿರà³à²µà²¾à²¹à²•à²°à²¾à²—ಿರಬೇಕà³!\n"
-#: ../src/main.c:392
+#: ../src/main.c:424
msgid ""
"NetworkManager monitors all network connections and automatically\n"
"chooses the best connection to use. It also allows the user to\n"
@@ -5665,1068 +7615,525 @@ msgstr ""
"ಬಳಕೆದಾರರà³\n"
"ನಿರà³à²§à²°à²¿à²¸à²²à³ ಸಹಾಯ ಮಾಡà³à²¤à³à²¤à²¦à³†."
-#: ../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:412
+#: ../src/main.c:430 ../src/main.c:446
#, c-format
msgid "%s. Please use --help to see a list of valid options.\n"
msgstr "%s. ಮಾನà³à²¯à²µà²¾à²¦ ಆಯà³à²•à³†à²—ಳಿಗಾಗಿ ದಯವಿಟà³à²Ÿà³ --help ಅನà³à²¨à³ ನೋಡಿ.\n"
-#: ../src/main.c:417
+#: ../src/main.c:451
#, c-format
msgid "Ignoring unrecognized log domain(s) '%s' passed on command line.\n"
msgstr ""
"ಆದೇಶ ಸಾಲಿಗೆ ಕಳà³à²¹à²¿à²¸à²²à²¾à²¦ ಗà³à²°à³à²¤à²¿à²¸à²²à²¾à²—ದೆ ಇರà³à²µ ಲಾಗೠಡೊಮೇನà³â€Œ(ಗಳà³) '%s' ಅನà³à²¨à³ "
"ಕಡೆಗಣಿಸಲಾಗಿದೆ.\n"
-#: ../src/main.c:468
+#: ../src/main.c:502
#, c-format
msgid "Failed to read configuration: (%d) %s\n"
msgstr "ಸಂರಚನೆಯನà³à²¨à³ ಓದà³à²µà²²à³à²²à²¿ ವಿಫಲಗೊಂಡಿದೆ: (%d) %s\n"
-#: ../src/main.c:482
+#: ../src/main.c:516
#, c-format
msgid "Error in configuration file: %s.\n"
msgstr "ಸಂರಚನಾ ಕಡತದಲà³à²²à²¿ ದೋಷ: %s.\n"
-#: ../src/main.c:487
+#: ../src/main.c:521
#, c-format
msgid "Ignoring unrecognized log domain(s) '%s' from config files.\n"
msgstr ""
"ಗà³à²°à³à²¤à²¿à²¸à²²à²¾à²—ದೆ ಇರà³à²µ ಲಾಗೠಡೊಮೇನà³â€Œ(ಗಳà³) '%s' ಅನà³à²¨à³ ಸಂರಚನಾ ಕಡತಗಳಿಂದ "
"ಕಡೆಗಣಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†.\n"
-#: ../src/main.c:495
+#: ../src/main.c:529
#, c-format
msgid "State file %s parsing failed: (%d) %s\n"
msgstr "ಸà³à²¥à²¿à²¤à²¿ ಕಡತ %s ಅನà³à²¨à³ ಪಾರà³à²¸à³ ಮಾಡà³à²µà²²à³à²²à²¿ ವಿಫಲತೆ: (%d) %s\n"
-#: ../src/main.c:508
+#: ../src/main.c:542
#, c-format
msgid "Could not daemonize: %s [error %u]\n"
msgstr "ಡೀಮನೠಮಾಡಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s [ದೋಷ %u]\n"
-#: ../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: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:313
+#: ../src/dhcp-manager/nm-dhcp-manager.c:302
msgid "no usable DHCP client could be found."
msgstr "ಬಳಸಬಹà³à²¦à²¾à²¦ ಯಾವà³à²¦à³† DHCP ಕà³à²²à³ˆà²‚ಟೠಕಂಡà³à²¬à²‚ದಿಲà³à²²."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:322
-msgid "'dhclient' could be found."
-msgstr "'dhclient' ಕಂಡೠಬಂದಿದೆ."
+#: ../src/dhcp-manager/nm-dhcp-manager.c:311
+#| msgid "'dhclient' could be found."
+msgid "'dhclient' could not be found or was disabled."
+msgstr "'dhclient' ಕಂಡೠಬಂದಿಲà³à²² ಅಥವ ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಂಡಿದೆ."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:332
-msgid "'dhcpcd' could be found."
-msgstr "'dhcpcd' ಕಂಡೠಬಂದಿದೆ."
+#: ../src/dhcp-manager/nm-dhcp-manager.c:321
+#| msgid "'dhcpcd' could be found."
+msgid "'dhcpcd' could not be found or was disabled."
+msgstr "'dhcpcd' ಕಂಡೠಬಂದಿಲà³à²² ಅಥವ ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಂಡಿದೆ."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:340
+#: ../src/dhcp-manager/nm-dhcp-manager.c:329
#, c-format
msgid "unsupported DHCP client '%s'"
msgstr "ಬೆಂಬಲವಿರದ DHCP ಕà³à²²à³ˆà²‚ಟೠ'%s'"
-#: ../src/dns-manager/nm-dns-manager.c:401
+#: ../src/dns-manager/nm-dns-manager.c:374
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr ""
"ಸೂಚನೆ: libc ಪರಿಹಾರಕವà³(ರಿಸಾಲà³à²µà²°à³) 3 ನೇಮà³â€Œà²¸à²°à³à²µà²°à³à²—ಳಿಗಿಂತ ಹೆಚà³à²šà²¿à²¨à²µà³à²—ಳನà³à²¨à³ "
"ಬೆಂಬಲಿಸà³à²µà³à²¦à²¿à²²à³à²²."
-#: ../src/dns-manager/nm-dns-manager.c:403
+#: ../src/dns-manager/nm-dns-manager.c:376
msgid "The nameservers listed below may not be recognized."
msgstr "ಈ ಕೆಳಗೆ ಸೂಚಿಸಲಾದ ನೇಮà³â€Œà²¸à²°à³à²µà²°à³à²—ಳನà³à²¨à³ ಗà³à²°à³à²¤à²¿à²¸à²²à²¾à²—ಿಲà³à²²."
-#: ../src/logging/nm-logging.c:149
+#: ../src/devices/adsl/nm-device-adsl.c:127
+#| msgid "ADSL connection %d"
+msgid "ADSL connection"
+msgstr "ADSL ಸಂಪರà³à²•"
+
+#: ../src/devices/bluetooth/nm-bluez-device.c:190
#, c-format
-msgid "Unknown log level '%s'"
-msgstr "ಗೊತà³à²¤à²¿à²°à²¦ ದಾಖಲೆ ಮಟà³à²Ÿ '%s'"
+msgid "%s Network"
+msgstr "%s ಜಾಲಬಂಧ"
-#: ../src/logging/nm-logging.c:226
+#: ../src/devices/bluetooth/nm-device-bt.c:274
+#| msgid "PAN connection %d"
+msgid "PAN connection"
+msgstr "PAN ಸಂಪರà³à²•"
+
+#: ../src/devices/bluetooth/nm-device-bt.c:299
+#: ../src/devices/wwan/nm-modem-broadband.c:483
+#| msgid "GSM connection %d"
+msgid "GSM connection"
+msgstr "GSM ಸಂಪರà³à²•"
+
+#: ../src/devices/bluetooth/nm-device-bt.c:303
+#: ../src/devices/wwan/nm-modem-broadband.c:506
+#| msgid "CDMA connection %d"
+msgid "CDMA connection"
+msgstr "CDMA ಸಂಪರà³à²•"
+
+#: ../src/devices/bluetooth/nm-device-bt.c:307
+#| msgid "DUN connection %d"
+msgid "DUN connection"
+msgstr "DUN ಸಂಪರà³à²•"
+
+#: ../src/devices/nm-device-bond.c:137
+#| msgid "Bond connection %d"
+msgid "Bond connection"
+msgstr "ಬಾಂಡೠಸಂಪರà³à²•"
+
+#: ../src/devices/nm-device-bridge.c:144
+#| msgid "Bridge connection %d"
+msgid "Bridge connection"
+msgstr "ಬà³à²°à²¿à²¡à³à²œà³â€ ಸಂಪರà³à²•"
+
+#: ../src/devices/nm-device-ethernet.c:1437
+#| msgid "PPPoE connection %d"
+msgid "PPPoE connection"
+msgstr "PPPoE ಸಂಪರà³à²•"
+
+#: ../src/devices/nm-device-ethernet.c:1437
+#| msgid "Wired connection %d"
+msgid "Wired connection"
+msgstr "ವೈರà³à²¡à³ ಸಂಪರà³à²•"
+
+#: ../src/devices/nm-device-ethernet-utils.c:38
#, c-format
-msgid "Unknown log domain '%s'"
-msgstr "ಗೊತà³à²¤à²¿à²°à²¦ ದಾಖಲೆ ಡೊಮೈನೠ'%s'"
+msgid "Wired connection %d"
+msgstr "ತಂತಿಯà³à²•à³à²¤ ಸಂಪರà³à²• %d"
+
+#: ../src/devices/nm-device-infiniband.c:189
+#| msgid "InfiniBand connection %d"
+msgid "InfiniBand connection"
+msgstr "InfiniBand ಸಂಪರà³à²•"
+
+#: ../src/devices/nm-device-vlan.c:229
+#| msgid "VLAN connection %d"
+msgid "VLAN connection"
+msgstr "VLAN ಸಂಪರà³à²•"
-#: ../src/config/nm-config.c:271
+#: ../src/devices/team/nm-device-team.c:147
+#| msgid "Team connection %d"
+msgid "Team connection"
+msgstr "ಟೀಮೠಸಂಪರà³à²•"
+
+#: ../src/devices/wifi/nm-device-olpc-mesh.c:163
+#| msgid "Mesh %d"
+msgid "Mesh"
+msgstr "ಮೆಶà³"
+
+#: ../src/nm-config.c:303
msgid "Config file location"
msgstr "Config ಕಡತವೠಇರà³à²µ ಸà³à²¥à²³"
-#: ../src/config/nm-config.c:271
+#: ../src/nm-config.c:303
msgid "/path/to/config.file"
msgstr "/path/to/config.file"
-#: ../src/config/nm-config.c:272
+#: ../src/nm-config.c:304
msgid "Config directory location"
msgstr "ಸಂರಚನಾ ಕಡತಕೋಶವೠಇರà³à²µ ಸà³à²¥à²³"
-#: ../src/config/nm-config.c:272
+#: ../src/nm-config.c:304
msgid "/path/to/config/dir"
msgstr "/path/to/config/dira"
-#: ../src/config/nm-config.c:274
+#: ../src/nm-config.c:306
msgid "List of plugins separated by ','"
msgstr "',' ಇಂದ ಪà³à²°à²¤à³à²¯à³‡à²•à²¿à²¸à²²à²¾à²¦ ಪà³à²²à²—à³â€Œà²‡à²¨à³â€Œà²—ಳ ಪಟà³à²Ÿà²¿"
-#: ../src/config/nm-config.c:274
+#: ../src/nm-config.c:306
msgid "plugin1,plugin2"
msgstr "plugin1,plugin2"
-#: ../src/config/nm-config.c:277
+#. These three are hidden for now, and should eventually just go away.
+#: ../src/nm-config.c:309
msgid "An http(s) address for checking internet connectivity"
msgstr "ಅಂತರಜಾಲ ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಪರಿಶೀಲಿಸಲೠಒಂದೠhttp(s) ವಿಳಾಸ"
-#: ../src/config/nm-config.c:278
+#: ../src/nm-config.c:310
msgid "The interval between connectivity checks (in seconds)"
msgstr "ಸಂಪರà³à²•à²¦ ಪರಿಶೀಲನೆಯ ನಡà³à²µà²¿à²¨ ಕಾಲಾವಧಿ (ಸೆಕೆಂಡà³à²—ಳಲà³à²²à²¿)"
-#: ../src/config/nm-config.c:279
+#: ../src/nm-config.c:311
msgid "The expected start of the response"
msgstr "ಪà³à²°à²¤à²¿à²•à³à²°à²¿à²¯à³†à²¯ ನಿರೀಕà³à²·à²¿à²¤ ಆರಂಭ"
-#: ../src/config/nm-config.c:279
+#: ../src/nm-config.c:311
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/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
+#: ../src/nm-logging.c:159
#, c-format
-msgid "Bond connection %d"
-msgstr "ಬಾಂಡೠಸಂಪರà³à²• %d"
-
-#: ../src/devices/nm-device-adsl.c:150
-#, c-format
-msgid "ADSL connection %d"
-msgstr "ADSL ಸಂಪರà³à²• %d"
-
-#: ../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/devices/nm-device-bt.c:341
-#, c-format
-msgid "DUN connection %d"
-msgstr "DUN ಸಂಪರà³à²• %d"
-
-#: ../src/devices/nm-device-ethernet.c:1254
-#, c-format
-msgid "PPPoE connection %d"
-msgstr "PPPoE ಸಂಪರà³à²• %d"
-
-#: ../src/devices/nm-device-ethernet.c:1254
-#: ../src/settings/nm-settings-utils.c:50
-#, c-format
-msgid "Wired connection %d"
-msgstr "ತಂತಿಯà³à²•à³à²¤ ಸಂಪರà³à²• %d"
-
-#: ../src/devices/nm-device-infiniband.c:270 ../tui/nm-editor-utils.c:177
-#, c-format
-msgid "InfiniBand connection %d"
-msgstr "InfiniBand ಸಂಪರà³à²• %d"
-
-#: ../src/devices/nm-device-olpc-mesh.c:242
-#, c-format
-msgid "Mesh %d"
-msgstr "ಜಾಲರಿ %d"
-
-#: ../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:3420 ../tui/nm-editor-utils.c:246
-#, c-format
-msgid "VPN connection %d"
-msgstr "VPN ಸಂಪರà³à²• %d"
-
-#: ../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:264
-#, c-format
-msgid "unable to connect to netlink for monitoring link status: %s"
-msgstr ""
-"ಕೊಂಡಿಯ ಸà³à²¥à²¿à²¤à²¿à²¯à²¨à³à²¨à³ ಮೇಲà³à²µà²¿à²šà²¾à²°à²£à³† ನಡೆಸಲೠನೆಟà³â€Œà²²à²¿à²‚ಕà³â€Œà²¨à³Šà²‚ದಿಗೆ ಸಂಪರà³à²• ಜೋಡಿಸಲೠ"
-"ಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s"
-
-#: ../src/nm-netlink-monitor.c:275
-#, c-format
-msgid "unable to enable netlink handle credential passing: %s"
-msgstr ""
-"ನೆಟà³â€Œà²²à²¿à²‚ಕೠಹà³à²¯à²¾à²‚ಡಲೠಕà³à²°à³†à²¡à³†à²¨à³à²¶à²¿à²¯à²²à³ ಪಾಸಿಂಗೠಅನà³à²¨à³ ಶಕà³à²¤à²—ೊಳಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s"
+msgid "Unknown log level '%s'"
+msgstr "ಗೊತà³à²¤à²¿à²°à²¦ ದಾಖಲೆ ಮಟà³à²Ÿ '%s'"
-#: ../src/nm-netlink-monitor.c:319 ../src/nm-netlink-monitor.c:381
+#: ../src/nm-logging.c:241
#, c-format
-msgid "unable to allocate netlink handle for monitoring link status: %s"
-msgstr ""
-"ಕೊಂಡಿಯ ಸà³à²¥à²¿à²¤à²¿à²¯à²¨à³à²¨à³ ಮೇಲà³à²µà²¿à²šà²¾à²°à²£à³† ನಡೆಸಲೠನೆಟà³â€Œà²²à²¿à²‚ಕೠಹà³à²¯à²¾à²‚ಡಲೠಅನà³à²¨à³ ನಿಯೋಜಿಸಲೠ"
-"ಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s"
+msgid "Unknown log domain '%s'"
+msgstr "ಗೊತà³à²¤à²¿à²°à²¦ ದಾಖಲೆ ಡೊಮೈನೠ'%s'"
-#: ../src/nm-netlink-monitor.c:469
-#, c-format
-msgid "unable to join netlink group: %s"
-msgstr "ನೆಟà³â€Œà²²à²¿à²‚ಕೠಗà³à²‚ಪನà³à²¨à³ ಸೇರಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s"
+#: ../src/nm-manager.c:3334
+#| msgid "VPN connecting"
+msgid "VPN connection"
+msgstr "VPN ಸಂಪರà³à²•"
-#: ../src/nm-sleep-monitor-systemd.c:116
+#: ../src/nm-sleep-monitor-systemd.c:114
msgid "NetworkManager needs to turn off networks"
msgstr "ಜಾಲಬಂಧಗಳನà³à²¨à³ ಸà³à²¥à²—ಿತಗೊಳಿಸಬೇಕೠಎಂದೠNetworkManager ಬಯಸà³à²¤à³à²¤à²¦à³†"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:115
-msgid "System"
-msgstr "ವà³à²¯à²µà²¸à³à²¥à³†"
-
-#: ../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: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:104
-msgid ""
-"Time to wait for a connection, in seconds (without the option, default value "
-"is 30)"
-msgstr ""
-"ಒಂದೠಸಂಪರà³à²•à²•à³à²•à³† ಕಾಯಬೇಕಿರà³à²µ ಸಮಯ (ಈ ಆಯà³à²•à³† ಇಲà³à²²à²¦à³†, ಪೂರà³à²µà²¨à²¿à²¯à³‹à²œà²¿à²¤à²µà³ ಮೌಲà³à²¯à²µà³ 30 "
-"ಆಗಿರà³à²¤à³à²¤à²¦à³†)"
-
-#: ../test/nm-online.c:105
-msgid "Exit immediately if NetworkManager is not running"
-msgstr "NetworkManager ಸಂಪರà³à²•à²¿à²¤à²—ೊಳà³à²³à²¦à³† ಇದà³à²¦à²²à³à²²à²¿ ತಕà³à²·à²£à²µà³† ನಿರà³à²—ಮಿಸà³"
-
-#: ../test/nm-online.c:106
-msgid "Don't print anything"
-msgstr "à²à²¨à²¨à³à²¨à³‚ ಮà³à²¦à³à²°à²¿à²¸à²¬à³‡à²¡"
-
-#: ../test/nm-online.c:124
-msgid ""
-"Waits for NetworkManager to finish activating startup network connections."
-msgstr ""
-"ಆರಂಭಿಕ ಜಾಲಬಂಧ ಸಂಪರà³à²•à²—ಳನà³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸà³à²µà²‚ತೆ NetworkManager ಗೆ ಕಾಯಲಾಗà³à²¤à³à²¤à²¦à³†."
-
-#: ../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
+#: ../src/settings/plugins/ibft/plugin.c:67
#, 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"
+msgid "ibft: failed to read iscsiadm records: %s"
+msgstr "ibft: iscsiadm ದಾಖಲೆಗಳನà³à²¨à³ ಓದಲೠವಿಫಲಗೊಂಡಿದೆ: %s"
-#: ../tui/nm-editor-utils.c:182 ../tui/nm-ui-utils.c:345
-msgid "Mobile Broadband"
-msgstr "ಮೊಬೈಲೠಬà³à²°à²¾à²¡à³â€Œà²¬à³à²¯à²¾à²‚ಡà³"
-
-#: ../tui/nm-editor-utils.c:185
+#: ../src/settings/plugins/ibft/plugin.c:75
#, c-format
-msgid "Mobile broadband connection %d"
-msgstr "ಮೊಬೈಲೠಬà³à²°à²¾à²¡à³â€Œà²¬à³à²¯à²¾à²‚ಡೠಸಂಪರà³à²• %d"
-
-#: ../tui/nm-editor-utils.c:190
-msgid "DSL"
-msgstr "DSL"
+#| msgid "Wired connection %d"
+msgid "ibft: read connection '%s'"
+msgstr "ibft: '%s' ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಓದà³"
-#: ../tui/nm-editor-utils.c:194
+#: ../src/settings/plugins/ibft/plugin.c:81
#, 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"
-
-#: ../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 "ರೌಂಡà³-ರಾಬಿನà³"
+msgid "ibft: failed to read iscsiadm record: %s"
+msgstr "ibft: iscsiadm ರೆಕಾರà³à²¡à³ ಅನà³à²¨à³ ಓದಲೠವಿಫಲಗೊಂಡಿದೆ: %s"
-#: ../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 "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 "ಸಂಪರà³à²•à²¿à²¤à²—ೊಂಡಿದೆ"
-
-#: ../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 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 ಅಗತà³à²¯à²¾à²¨à³à²—à³à²£ ರೌಟà³â€Œà²—ಳà³"
-
-#: ../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 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 "ದೃಢೀಕರಣ"
-
-#: ../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 "ಮೆಟà³à²°à²¿à²•à³"
-
-#: ../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 "ವೈರà³à²²à³†à²¸à³ ಜಾಲಬಂಧಕà³à²•à²¾à²—ಿ ದೃಢೀಕರಣದ ಅಗತà³à²¯à²µà²¿à²¦à³†"
+#: ../src/settings/plugins/ifcfg-rh/reader.c:112
+msgid "System"
+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 "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 ""
+#~ "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"
+
+#~ 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"
+
+#~ 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: Device '%s' is waiting for slaves before proceeding with "
+#~ "activation."
+#~ msgstr ""
+#~ "ದೋಷ: ಸಕà³à²°à²¿à²¯à²—ೊಳಿಕೆಯೊಂದಿಗೆ ಮà³à²‚ದà³à²µà²°à³†à²¯à³à²µ ಮೊದಲೠ'%s' ಸಾಧನವೠಉಪಪà³à²°à²•à³à²°à²¿à²¯à³†à²—ಳಿಗಾಗಿ "
+#~ "ಕಾಯà³à²¤à³à²¤à²¿à²¦à³†."
+
+#~ 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 "ನೀವೠಅದನà³à²¨à³ ಒದಗಿಸಲೠಬಯಸà³à²¤à³à²¤à³€à²°à²¾? (ಹೌದà³/ಇಲà³à²²) [ಹೌದà³]"
+
+#~ msgid "There are 5 optional arguments for 'InfiniBand' connection type.\n"
+#~ msgstr "'InfiniBand' ಸಂಪರà³à²•à²¦ ಬಗೆಗೆ 5 à²à²šà³à²›à²¿à²• ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œà²—ಳಿವೆ.\n"
+
+#~ msgid "Transport mode (datagram or connected) [datagram]: "
+#~ msgstr "ವರà³à²—ಾವಣೆ ಕà³à²°à²®à²µà²²à³à²² [ಡೇಟಾಗà³à²°à²¾à²®à³, ಸಂಪರà³à²•à²¿à²¤à²—ೊಂಡಿದೆ] [datagram]:"
+
+#~ msgid "There is 1 optional argument for 'WiMax' connection type.\n"
+#~ msgstr "'WiMax' ಸಂಪರà³à²•à²¦ ಬಗೆಗಾಗಿ 1 à²à²šà³à²›à²¿à²• ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟೠಇದೆ.\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' ಸಂಪರà³à²•à²¦ ಬಗೆಗಾಗಿ 1 à²à²šà³à²›à²¿à²• ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟೠಇದೆ.\n"
+
+#~ msgid "Bluetooth type (panu, dun-gsm or dun-cdma) [panu]: "
+#~ msgstr "ಬà³à²²à³‚ಟೂತೠಬಗೆ (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' ಸಂಪರà³à²•à²¦ ಬಗೆಗೆ 3 à²à²šà³à²›à²¿à²• ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œà²—ಳಿವೆ.\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 "ಹೇರà³à²ªà²¿à²¨à³ (yes/no) [yes]: "
+
+#~ msgid "Error: 'hairpin': '%s'.\n"
+#~ msgstr "ದೋಷ: 'hairpin': '%s'.\n"
-#: ../tui/nmt-secret-agent.c:349
-msgid "Wired 802.1X authentication"
-msgstr "ತಂತಿಸಹಿತ 802.1X ದೃಢೀಕರಣ"
+#~ msgid "There is 1 optional argument for 'VPN' connection type.\n"
+#~ msgstr "'VPN' ಸಂಪರà³à²•à²¦ ಬಗೆಗಾಗಿ 1 à²à²šà³à²›à²¿à²• ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟೠಇದೆ.\n"
-#: ../tui/nmt-secret-agent.c:352
-msgid "Network name"
-msgstr "ಜಾಲಬಂಧದ ಹೆಸರà³"
+#~ msgid "There are 2 optional arguments for 'OLPC Mesh' connection type.\n"
+#~ msgstr "'OLPC Mesh' ಸಂಪರà³à²•à²¦ ಬಗೆಗೆ 2 à²à²šà³à²›à²¿à²• ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œà²—ಳಿವೆ.\n"
-#: ../tui/nmt-secret-agent.c:359
-msgid "DSL authentication"
-msgstr "DSL ದೃಢೀಕರಣ"
+#~ msgid "Error: 'master': '%s' is not valid UUID nor interface."
+#~ msgstr "ದೋಷ: 'master': '%s' ಎನà³à²¨à³à²µà³à²¦à³ UUID ಅಥವ ಸಂಪರà³à²•à²¸à²¾à²§à²¨à²µà²¾à²—ಿಲà³à²²."
-#: ../tui/nmt-secret-agent.c:367
-msgid "PIN code required"
-msgstr "PIN ಕೋಡà³â€Œà²¨ ಅಗತà³à²¯à²µà²¿à²¦à³†"
+#~ msgid ""
+#~ "save :: save the connection\n"
+#~ "\n"
+#~ "Sends the connection to NetworkManager that will save it.\n"
+#~ msgstr ""
+#~ "save :: ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಉಳಿಸà³\n"
+#~ "\n"
+#~ "ಸಂಪರà³à²•à²µà²¨à³à²¨à³ NetworkManager ಗೆ ಕಳà³à²¹à²¿à²¸à³à²¤à³à²¤à²¦à³† ಅದೠಉಳಿಸà³à²¤à³à²¤à²¦à³†.\n"
-#: ../tui/nmt-secret-agent.c:368
-msgid "PIN code is needed for the mobile broadband device"
-msgstr "ಮೊಬೈಲೠಬà³à²°à²¾à²¡à³â€Œà²¬à³à²¯à²¾à²‚ಡೠಸಾಧನಕà³à²•à²¾à²—ಿ PIN ಕೋಡà³â€Œà²¨ ಅಗತà³à²¯à²µà²¿à²°à³à²¤à³à²¤à²¦à³†"
+#~ 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"
-#: ../tui/nmt-secret-agent.c:370
-msgid "PIN"
-msgstr "PIN"
+#~ msgid "Error: '%s' setting not present\n"
+#~ msgstr "ದೋಷ: '%s' ಸಿದà³à²§à²¤à³†à²¯à³ ಅಸà³à²¤à²¿à²¤à³à²µà²¦à²²à³à²²à²¿à²²à³à²²\n"
-#: ../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 ""
+#~ ">>> 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"
-#: ../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 ""
+#~ "Error: 'configured' or 'active' command is expected for 'connection show'."
+#~ msgstr ""
+#~ "ದೋಷ: 'connection show' ಗಾಗಿ 'configured' ಅಥವ 'active' ಆದೇಶಯನà³à²¨à³ "
+#~ "ನಿರೀಕà³à²·à²¿à²¸à²²à²¾à²—ಿದೆ."
-#: ../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 "ಸಂಪರà³à²•à²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¿à²¦à³†..."
+#~ msgid "0 (unknown)"
+#~ msgstr "0 (ಗೊತà³à²¤à²¿à²°à²¦)"
-#: ../tui/nmtui-connect.c:159
-#, c-format
-msgid "Could not activate connection: %s"
-msgstr "ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಲಾಗಿಲà³à²²: %s"
+#~ msgid "any, "
+#~ msgstr "ಯಾವà³à²¦à²¾à²¦à²°à³‚, "
-#: ../tui/nmtui-connect.c:218 ../tui/nmtui-connect.c:274
-msgid "Activate"
-msgstr "ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸà³"
+#~ msgid "900 MHz, "
+#~ msgstr "900 MHz, "
-#: ../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 "ತà³à²¯à²œà²¿à²¸à³"
+#~ msgid "1800 MHz, "
+#~ msgstr "1800 MHz, "
-#: ../tui/nmtui-connect.c:304
-#, c-format
-msgid "No such connection '%s'"
-msgstr "ಅಂತಹ ಯಾವà³à²¦à³† ಸಂಪರà³à²• '%s' ಇಲà³à²²"
+#~ msgid "1900 MHz, "
+#~ msgstr "1900 MHz, "
-#: ../tui/nmtui-connect.c:306
-msgid "Connection is already active"
-msgstr "ಸಂಪರà³à²•à²µà³ ಈಗಾಗಲೆ ಸಕà³à²°à²¿à²¯à²µà²¾à²—ಿದೆ"
+#~ msgid "850 MHz, "
+#~ msgstr "850 MHz, "
-#: ../tui/nmtui-edit.c:209
-msgid "Create"
-msgstr "ರಚಿಸà³"
+#~ msgid "WCDMA 3GPP UMTS 2100 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../tui/nmtui-edit.c:350
-msgid "Select the type of connection you wish to create."
-msgstr "ನೀವೠರಚಿಸಲೠಬಯಸà³à²µ ಸಂಪರà³à²•à²¦ ಬಗೆಯನà³à²¨à³ ಆರಿಸಿ."
+#~ msgid "WCDMA 3GPP UMTS 1800 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../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 "WCDMA 3GPP UMTS 1700/2100 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../tui/nmtui-edit.c:390 ../tui/nmtui-edit.c:406
-msgid "New Connection"
-msgstr "ಹೊಸ ಸಂಪರà³à²•"
+#~ msgid "WCDMA 3GPP UMTS 800 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../tui/nmtui-edit.c:443
-#, c-format
-msgid "Unable to delete connection: %s"
-msgstr "ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಅಳಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s"
+#~ msgid "WCDMA 3GPP UMTS 850 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../tui/nmtui-edit.c:472
-#, c-format
-msgid "Are you sure you want to delete the connection '%s'?"
-msgstr "ನೀವೠನಿಜವಾಗಲೂ ಸಂಪರà³à²• '%s ಅನà³à²¨à³ ಅಳಿಸಲೠಬಯಸà³à²¤à³à²¤à³€à²°à³†?"
+#~ msgid "WCDMA 3GPP UMTS 900 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../tui/nmtui-edit.c:486
-#, c-format
-msgid "Could not delete connection: %s"
-msgstr "ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಅಳಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s"
+#~ msgid "WCDMA 3GPP UMTS 1700 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../tui/nmtui-hostname.c:47
-msgid "Set Hostname"
-msgstr "ಆತಿಥೇಯದ ಹೆಸರನà³à²¨à³ ಹೊಂದಿಸà³"
+#~ msgid "WCDMA 3GPP UMTS 1900 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 1900 MHz, "
-#: ../tui/nmtui-hostname.c:55
-msgid "Hostname"
-msgstr "ಅತಿಥೇಯದ ಹೆಸರà³"
+#~ msgid "WCDMA 3GPP UMTS 2600 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 2600 MHz, "
-#: ../tui/nmtui-hostname.c:114
-#, c-format
-msgid "Set hostname to '%s'"
-msgstr "ಆತಿಥೇಯದ ಹೆಸರನà³à²¨à³ '%s' ಗೆ ಹೊಂದಿಸà³"
+#~ msgid "'%s' is not valid (use <dest IP>/prefix <next-hop IP> [metric])"
+#~ msgstr ""
+#~ "'%s' ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²² (<dest IP>/prefix <next-hop IP> [metric] ಅನà³à²¨à³ ಬಳಸಿ)"
-#: ../tui/nmtui-hostname.c:116
-#, c-format
-msgid "Unable to set hostname: %s"
-msgstr "ಆತಿಥೇಯದ ಹೆಸರನà³à²¨à³ ಹೊಂದಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s"
+#~ msgid "'%s' doesn't match the virtual interface name '%s'"
+#~ msgstr "'%s' ಎನà³à²¨à³à²µà³à²¦à³ ವರà³à²šà³à²µà²²à³ ಸಂಪರà³à²•à²¸à²¾à²§à²¨à²¦ ಹೆಸರಾದ '%s' ಕà³à²•à³† ಹೊಂದಿಕೆಯಾಗà³à²¤à³à²¤à²¿à²²à³à²²"
-#: ../tui/nmtui.c:59 ../tui/nmtui.c:62
-msgid "connection"
-msgstr "ಸಂಪರà³à²•"
+#~ msgid "IPv4 configuration is not allowed for slave"
+#~ msgstr "ಸà³à²²à³‡à²µà³â€Œà²—ಾಗಿ IPv4 ಸಂರಚನೆಗೆ ಅನà³à²®à²¤à²¿ ಇರà³à²µà³à²¦à²¿à²²à³à²²"
-#: ../tui/nmtui.c:60
-msgid "Edit a connection"
-msgstr "ಒಂದೠಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸಂಪಾದಿಸà³"
+#~ msgid "IPv6 configuration is not allowed for slave"
+#~ msgstr "ಸà³à²²à³‡à²µà³â€Œà²—ಾಗಿ IPv6 ಸಂರಚನೆಗೆ ಅನà³à²®à²¤à²¿ ಇರà³à²µà³à²¦à²¿à²²à³à²²"
-#: ../tui/nmtui.c:63
-msgid "Activate a connection"
-msgstr "ಒಂದೠಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸà³"
+#~ msgid "Invalid option. Please use --help to see a list of valid options.\n"
+#~ msgstr "ಅಮಾನà³à²¯à²µà²¾à²¦ ಆಯà³à²•à³†. ಮಾನà³à²¯à²µà²¾à²¦ ಆಯà³à²•à³†à²—ಳಿಗಾಗಿ ದಯವಿಟà³à²Ÿà³ --help ಅನà³à²¨à³ ನೋಡಿ.\n"
-#: ../tui/nmtui.c:65
-msgid "new hostname"
-msgstr "ಹೊಸ ಆತಿಥೇಯದ ಹೆಸರà³"
+#~ msgid "error occurred while waiting for data on socket"
+#~ msgstr "ಸಾಕೆಟà³â€Œà²¨à²²à³à²²à²¿ ದತà³à²¤à²¾à²‚ಶಕà³à²•à²¾à²—ಿ ಕಾಯà³à²µà²¾à²— ದೋಷವೠಎದà³à²°à²¾à²—ಿದೆ"
-#: ../tui/nmtui.c:66
-msgid "Set system hostname"
-msgstr "ವà³à²¯à²µà²¸à³à²¥à³†à²¯ ಹೆಸರನà³à²¨à³ ಹೊಂದಿಸà³"
+#~ msgid "error processing netlink message: %s"
+#~ msgstr "ನೆಟà³â€Œà²²à²¿à²‚ಕೠಸಂದೇಶವನà³à²¨à³ ಸಂಸà³à²•à²°à²¿à²¸à³à²µà²²à³à²²à²¿ ದೋಷ ಉಂಟಾಗಿದೆ: %s"
-#: ../tui/nmtui.c:89
-msgid "NetworkManager TUI"
-msgstr "NetworkManager TUI"
+#~ msgid "unable to connect to netlink for monitoring link status: %s"
+#~ msgstr ""
+#~ "ಕೊಂಡಿಯ ಸà³à²¥à²¿à²¤à²¿à²¯à²¨à³à²¨à³ ಮೇಲà³à²µà²¿à²šà²¾à²°à²£à³† ನಡೆಸಲೠನೆಟà³â€Œà²²à²¿à²‚ಕà³â€Œà²¨à³Šà²‚ದಿಗೆ ಸಂಪರà³à²• ಜೋಡಿಸಲೠ"
+#~ "ಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s"
-#: ../tui/nmtui.c:97
-msgid "Please select an option"
-msgstr "ದಯವಿಟà³à²Ÿà³ ಒಂದೠಆಯà³à²•à³†à²¯à²¨à³à²¨à³ ಆರಿಸಿ"
+#~ msgid "unable to enable netlink handle credential passing: %s"
+#~ msgstr "ನೆಟà³â€Œà²²à²¿à²‚ಕೠಹà³à²¯à²¾à²‚ಡಲೠಕà³à²°à³†à²¡à³†à²¨à³à²¶à²¿à²¯à²²à³ ಪಾಸಿಂಗೠಅನà³à²¨à³ ಶಕà³à²¤à²—ೊಳಿಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s"
-#: ../tui/nmtui.c:154
-msgid "Usage"
-msgstr "ಬಳಕೆ"
+#~ msgid "unable to allocate netlink handle for monitoring link status: %s"
+#~ msgstr ""
+#~ "ಕೊಂಡಿಯ ಸà³à²¥à²¿à²¤à²¿à²¯à²¨à³à²¨à³ ಮೇಲà³à²µà²¿à²šà²¾à²°à²£à³† ನಡೆಸಲೠನೆಟà³â€Œà²²à²¿à²‚ಕೠಹà³à²¯à²¾à²‚ಡಲೠಅನà³à²¨à³ ನಿಯೋಜಿಸಲೠ"
+#~ "ಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s"
-#: ../tui/nmtui.c:221
-msgid "Could not parse arguments"
-msgstr "ಆರà³à²—à³à²¯à³à²®à³†à²‚ಟà³â€Œà²—ಳನà³à²¨à³ ಪಾರà³à²¸à³ ಮಾಡಲಾಗಿಲà³à²²"
+#~ msgid "unable to join netlink group: %s"
+#~ msgstr "ನೆಟà³â€Œà²²à²¿à²‚ಕೠಗà³à²‚ಪನà³à²¨à³ ಸೇರಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²²: %s"
-#: ../tui/nmtui.c:229
-msgid "NetworkManager is not running."
-msgstr "NetworkManager ಚಾಲನೆಯಲà³à²²à²¿à²²à³à²²."
+#~ msgid "Error saving connection: %s"
+#~ msgstr "ಸಂಪರà³à²•à²µà²¨à³à²¨à³ ಉಳಿಸà³à²µà²²à³à²²à²¿ ದೋಷ: %s"
diff --git a/po/ko.po b/po/ko.po
index a5e95b464..2816df812 100644
--- a/po/ko.po
+++ b/po/ko.po
@@ -14,957 +14,3360 @@
# 주ì˜:
# - ì´ í”„ë¡œê·¸ëž¨ì˜ ì´ë¦„ì¸ "Network Manager"는 "ë„¤íŠ¸ì›Œí¬ ê´€ë¦¬" 혹ì€
# "ë„¤íŠ¸ì›Œí¬ ê´€ë¦¬ 프로그램"으로 번역.
-#
+# eukim <eukim@redhat.com>, 2013. #zanata
+# eukim <eukim@redhat.com>, 2014. #zanata
msgid ""
msgstr ""
"Project-Id-Version: ko\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=NetworkManager&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2011-05-31 03:25+0000\n"
-"PO-Revision-Date: 2011-07-24 05:55+0900\n"
-"Last-Translator: Seong-ho, Cho <darkcircle.0426@gmail.com>\n"
+"POT-Creation-Date: 2014-01-23 17:13+0530\n"
+"PO-Revision-Date: 2014-01-29 02:45-0500\n"
+"Last-Translator: eukim <eukim@redhat.com>\n"
"Language-Team: GNOME Korea <gnome-kr@googlegroups.com>\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"
+"Language: ko\n"
+"X-Generator: Zanata 3.2.3\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:174
+#: ../cli/src/connections.c:200
+msgid "GROUP"
+msgstr "그룹 "
+
+#: ../cli/src/common.c:35 ../cli/src/common.c:55
+msgid "ADDRESS"
+msgstr "주소"
+
+#: ../cli/src/common.c:36 ../cli/src/common.c:56
+msgid "ROUTE"
+msgstr "ë¼ìš°íŒ… "
+
+#: ../cli/src/common.c:37 ../cli/src/common.c:57
+msgid "DNS"
+msgstr "DNS"
+
+#: ../cli/src/common.c:38 ../cli/src/common.c:58
+msgid "DOMAIN"
+msgstr "ë„ë©”ì¸ "
+
+#: ../cli/src/common.c:39
+msgid "WINS"
+msgstr "WINS"
+
+#: ../cli/src/common.c:47 ../cli/src/common.c:66
+msgid "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: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:621
+msgid "unavailable"
+msgstr "사용할 수 ì—†ìŒ"
+
+#: ../cli/src/common.c:623 ../cli/src/network-manager.c:276
+msgid "disconnected"
+msgstr "ì—°ê²° ëŠê²¼ìŒ"
+
+#: ../cli/src/common.c:625
+msgid "connecting (prepare)"
+msgstr "연결 중 (준비)"
+
+#: ../cli/src/common.c:627
+msgid "connecting (configuring)"
+msgstr "연결 중 (설정중)"
+
+#: ../cli/src/common.c:629
+msgid "connecting (need authentication)"
+msgstr "ì—°ê²° 중 (ì¸ì¦ í•„ìš”)"
+
+#: ../cli/src/common.c:631
+msgid "connecting (getting IP configuration)"
+msgstr "연결 중 (IP 설정 가져오는 중)"
+
+#: ../cli/src/common.c:633
+msgid "connecting (checking IP connectivity)"
+msgstr "ì—°ê²° 중 (IP ì—°ê²° 확ì¸í•˜ëŠ” 중)"
+
+#: ../cli/src/common.c:635
+msgid "connecting (starting secondary connections)"
+msgstr "연결 중 (보조 연결 시작하는 중)"
+
+#: ../cli/src/common.c:637 ../cli/src/network-manager.c:272
+msgid "connected"
+msgstr "ì—°ê²°ë¨"
+
+#: ../cli/src/common.c:639 ../cli/src/connections.c:732
+msgid "deactivating"
+msgstr "활성화 해제하는 중"
+
+#: ../cli/src/common.c:641
+msgid "connection failed"
+msgstr "연결 실패함"
+
+#: ../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:652
+msgid "No reason given"
+msgstr "ì´ìœ  ì—†ìŒ "
+
+#: ../cli/src/common.c:655 ../cli/src/connections.c:2258
+#, c-format
+msgid "Unknown error"
+msgstr "알 수 없는 오류 "
+
+#: ../cli/src/common.c:658
+msgid "Device is now managed"
+msgstr "현재 장치가 관리ë˜ê³  있습니다 "
+
+#: ../cli/src/common.c:661
+msgid "Device is now unmanaged"
+msgstr "현재 장치가 관리ë˜ê³  있지 않습니다 "
+
+#: ../cli/src/common.c:664
+msgid "The device could not be readied for configuration"
+msgstr "ì„¤ì •ì„ ìœ„í•´ 장치를 준비할 수 없습니다 "
+
+#: ../cli/src/common.c:667
+msgid ""
+"IP configuration could not be reserved (no available address, timeout, etc.)"
+msgstr "IP ì„¤ì •ì„ ì˜ˆì•½í•  수 없습니다 (사용 가능한 주소 ì—†ìŒ, 시간 제한 등)"
+
+#: ../cli/src/common.c:670
+msgid "The IP configuration is no longer valid"
+msgstr "ë”ì´ìƒ IP ì„¤ì •ì´ ìœ íš¨í•˜ì§€ 않습니다 "
+
+#: ../cli/src/common.c:673
+msgid "Secrets were required, but not provided"
+msgstr "비밀 ë°ì´í„°ê°€ 필요하지만 전송ë˜ì§€ 않았습니다"
+
+#: ../cli/src/common.c:676
+msgid "802.1X supplicant disconnected"
+msgstr "802.1X ìš”ì²­ì˜ ì—°ê²°ì´ ëŠê²¼ìŠµë‹ˆë‹¤"
+
+#: ../cli/src/common.c:679
+msgid "802.1X supplicant configuration failed"
+msgstr "802.1X 요청 ì„¤ì •ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤."
+
+#: ../cli/src/common.c:682
+msgid "802.1X supplicant failed"
+msgstr "802.1X ìš”ì²­ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤"
+
+#: ../cli/src/common.c:685
+msgid "802.1X supplicant took too long to authenticate"
+msgstr "802.1X ìš”ì²­ì´ ì¸ì¦ì— 너무 오래 걸립니다"
+
+#: ../cli/src/common.c:688
+msgid "PPP service failed to start"
+msgstr "PPP 서비스 시작해 실패했습니다"
+
+#: ../cli/src/common.c:691
+msgid "PPP service disconnected"
+msgstr "PPP 서비스 ì—°ê²°ì´ ëŠì–´ì¡ŒìŠµë‹ˆë‹¤"
+
+#: ../cli/src/common.c:694
+msgid "PPP failed"
+msgstr "PPP ë™ìž‘ 실패"
+
+#: ../cli/src/common.c:697
+msgid "DHCP client failed to start"
+msgstr "DHCP í´ë¼ì´ì–¸íŠ¸ ì‹œìž‘ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤"
+
+#: ../cli/src/common.c:700
+msgid "DHCP client error"
+msgstr "DHCP í´ë¼ì´ì–¸íŠ¸ 오류"
+
+#: ../cli/src/common.c:703
+msgid "DHCP client failed"
+msgstr "DHCP í´ë¼ì´ì–¸íŠ¸ ë™ìž‘ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤"
+
+#: ../cli/src/common.c:706
+msgid "Shared connection service failed to start"
+msgstr "ì—°ê²° 공유 서비스 ì‹œìž‘ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤"
+
+#: ../cli/src/common.c:709
+msgid "Shared connection service failed"
+msgstr "ì—°ê²° 공유 서비스 ë™ìž‘ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤"
+
+#: ../cli/src/common.c:712
+msgid "AutoIP service failed to start"
+msgstr "ìžë™IP 서비스 ì‹œìž‘ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤"
+
+#: ../cli/src/common.c:715
+msgid "AutoIP service error"
+msgstr "ìžë™IP 서비스 오류"
+
+#: ../cli/src/common.c:718
+msgid "AutoIP service failed"
+msgstr "ìžë™IP 서비스 ë™ìž‘ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤"
+
+#: ../cli/src/common.c:721
+msgid "The line is busy"
+msgstr "회선 사용 중 "
+
+#: ../cli/src/common.c:724
+msgid "No dial tone"
+msgstr "ì „í™” 걸기 ì‹ í˜¸ìŒ ì—†ìŒ"
+
+#: ../cli/src/common.c:727
+msgid "No carrier could be established"
+msgstr "ì„œë¹„ìŠ¤ì— ì—°ê²°í•  수 없습니다"
+
+#: ../cli/src/common.c:730
+msgid "The dialing request timed out"
+msgstr "ì „í™” 걸기 요청 ì‹œê°„ì„ ì´ˆê³¼í–ˆìŠµë‹ˆë‹¤"
+
+#: ../cli/src/common.c:733
+msgid "The dialing attempt failed"
+msgstr "ì „í™” 걸기 ì‹œë„ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤"
+
+#: ../cli/src/common.c:736
+msgid "Modem initialization failed"
+msgstr "모뎀 초기화 실패"
+
+#: ../cli/src/common.c:739
+msgid "Failed to select the specified APN"
+msgstr "지정한 APN ì„ íƒì— 실패했습니다"
+
+#: ../cli/src/common.c:742
+msgid "Not searching for networks"
+msgstr "ë„¤íŠ¸ì›Œí¬ ê²€ìƒ‰ 요소가 없습니다"
+
+#: ../cli/src/common.c:745
+msgid "Network registration denied"
+msgstr "ë„¤íŠ¸ì›Œí¬ ë“±ë¡ì´ 거부ë˜ì—ˆìŠµë‹ˆë‹¤"
+
+#: ../cli/src/common.c:748
+msgid "Network registration timed out"
+msgstr "ë„¤íŠ¸ì›Œí¬ ë“±ë¡ ì‹œê°„ì„ ì´ˆê³¼í–ˆìŠµë‹ˆë‹¤"
+
+#: ../cli/src/common.c:751
+msgid "Failed to register with the requested network"
+msgstr "요청 ë°›ì€ ë„¤íŠ¸ì›Œí¬ ë“±ë¡ì— 실패했습니다"
+
+#: ../cli/src/common.c:754
+msgid "PIN check failed"
+msgstr "PIN í™•ì¸ ì‹¤íŒ¨"
+
+#: ../cli/src/common.c:757
+msgid "Necessary firmware for the device may be missing"
+msgstr "필요한 장치 펌웨어가 누ë½ë˜ì–´ 있습니다 "
+
+#: ../cli/src/common.c:760
+msgid "The device was removed"
+msgstr "장치가 제거ë˜ì—ˆìŠµë‹ˆë‹¤ "
+
+#: ../cli/src/common.c:763
+msgid "NetworkManager went to sleep"
+msgstr "ë„¤íŠ¸ì›Œí¬ ê´€ë¦¬ìžê°€ 슬립 ìƒíƒœì— 있습니다 "
+
+#: ../cli/src/common.c:766
+msgid "The device's active connection disappeared"
+msgstr "ìž¥ì¹˜ì˜ í™œì„± ì—°ê²°ì´ ì‚¬ë¼ì¡ŒìŠµë‹ˆë‹¤ "
+
+#: ../cli/src/common.c:769
+msgid "Device disconnected by user or client"
+msgstr "ì‚¬ìš©ìž ë˜ëŠ” í´ë¼ì´ì–¸íŠ¸ì— ì˜í•´ 장치 ì—°ê²°ì´ ëŠì–´ì¡ŒìŠµë‹ˆë‹¤"
+
+#: ../cli/src/common.c:772
+msgid "Carrier/link changed"
+msgstr "ìºë¦¬ì–´/ë§í¬ ë³€ê²½ë¨ "
+
+#: ../cli/src/common.c:775
+msgid "The device's existing connection was assumed"
+msgstr "ìž¥ì¹˜ì˜ ê¸°ì¡´ ì—°ê²°ì„ ê°€ì •í•©ë‹ˆë‹¤"
+
+#: ../cli/src/common.c:778
+msgid "The supplicant is now available"
+msgstr "요청ìžë¥¼ 지금 사용할 수 있습니다 "
+
+#: ../cli/src/common.c:781
+msgid "The modem could not be found"
+msgstr "ëª¨ëŽ€ì„ ì°¾ì„ ìˆ˜ 없습니다"
+
+#: ../cli/src/common.c:784
+msgid "The Bluetooth connection failed or timed out"
+msgstr "블루투스 ì—°ê²°ì— ì‹¤íŒ¨ ë˜ëŠ” 시간 초과했습니다"
+
+#: ../cli/src/common.c:787
+msgid "GSM Modem's SIM card not inserted"
+msgstr "GSM ëª¨ëŽ€ì˜ SIM 카드를 삽입하지 않았습니다 "
+
+#: ../cli/src/common.c:790
+msgid "GSM Modem's SIM PIN required"
+msgstr "GSM ëª¨ëŽ€ì˜ SIM PINì´ í•„ìš”í•©ë‹ˆë‹¤"
+
+#: ../cli/src/common.c:793
+msgid "GSM Modem's SIM PUK required"
+msgstr "GSM ëª¨ëŽ€ì˜ SIM PUKê°€ 필요합니다"
-#: ../cli/src/connections.c:64 ../cli/src/connections.c:78
-#: ../cli/src/devices.c:101 ../cli/src/devices.c:114 ../cli/src/devices.c:124
-#: ../cli/src/devices.c:134 ../cli/src/devices.c:148 ../cli/src/devices.c:162
-#: ../cli/src/devices.c:173 ../cli/src/devices.c:184 ../cli/src/devices.c:193
-#: ../cli/src/devices.c:202 ../cli/src/devices.c:224
+#: ../cli/src/common.c:796
+msgid "GSM Modem's SIM wrong"
+msgstr "GSM ëª¨ëŽ€ì˜ SIMì´ ìž˜ëª»ë˜ì—ˆìŠµë‹ˆë‹¤ "
+
+#: ../cli/src/common.c:799
+msgid "InfiniBand device does not support connected mode"
+msgstr "ì¸í”¼ë‹ˆë°´ë“œ 장치ì—ì„œ ì—°ê²° 모드를 지ì›í•˜ì§€ 않습니다"
+
+#: ../cli/src/common.c:802
+msgid "A dependency of the connection failed"
+msgstr "ì—°ê²° ì˜ì¡´ì„± ì„¤ì •ì„ ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤ "
+
+#: ../cli/src/common.c:805
+msgid "A problem with the RFC 2684 Ethernet over ADSL bridge"
+msgstr "ADSL 브리지를 통한 RFC 2684 ì´ë”ë„·ì— ë¬¸ì œê°€ 있습니다 "
+
+#: ../cli/src/common.c:808
+msgid "ModemManager is unavailable"
+msgstr "ModemManager를 사용할 수 ì—†ìŒ "
+
+#: ../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 ì œì–´ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤ "
+
+#: ../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' 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
-#: ../cli/src/connections.c:65 ../cli/src/connections.c:79
+#: ../cli/src/connections.c:69 ../cli/src/connections.c:176
msgid "UUID"
msgstr "UUID"
-#. 1
-#: ../cli/src/connections.c:66
+#: ../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 "유형"
+
+#: ../cli/src/connections.c:71
+msgid "TIMESTAMP"
+msgstr "타임스탬프"
+
+#: ../cli/src/connections.c:72
+msgid "TIMESTAMP-REAL"
+msgstr "실제 타임스탬프"
+
+#: ../cli/src/connections.c:73 ../cli/src/devices.c:101
+msgid "AUTOCONNECT"
+msgstr "ìžë™ì—°ê²°"
+
+#: ../cli/src/connections.c:74
+msgid "READONLY"
+msgstr "ì½ê¸°ì „ìš©"
+
+#: ../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 경로"
+
+#: ../cli/src/connections.c:177
msgid "DEVICES"
msgstr "장치"
-#. 2
-#: ../cli/src/connections.c:67
+#: ../cli/src/connections.c:178 ../cli/src/devices.c:73
+#: ../cli/src/devices.c:96 ../cli/src/network-manager.c:39
+msgid "STATE"
+msgstr "ìƒíƒœ"
+
+#: ../cli/src/connections.c:179
msgid "DEFAULT"
msgstr "ë””í´íŠ¸"
-#. 3
-#: ../cli/src/connections.c:68
+#: ../cli/src/connections.c:180
+msgid "DEFAULT6"
+msgstr "ë””í´íŠ¸6"
+
+#: ../cli/src/connections.c:181
msgid "SPEC-OBJECT"
msgstr "스펙-ê°ì²´"
-#. 4
-#: ../cli/src/connections.c:69
+#: ../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"
-#. 5
-#. 6
-#. 2
-#. 11
-#. 5
-#: ../cli/src/connections.c:70 ../cli/src/connections.c:85
-#: ../cli/src/devices.c:69 ../cli/src/devices.c:214 ../cli/src/devices.c:230
-msgid "DBUS-PATH"
-msgstr "DBUS 경로"
+#: ../cli/src/connections.c:184 ../cli/src/devices.c:77
+#: ../cli/src/devices.c:105
+msgid "CON-PATH"
+msgstr "CON-경로"
-#. 1
-#. 0
-#. 1
-#. 2
-#: ../cli/src/connections.c:80 ../cli/src/devices.c:67
-#: ../cli/src/devices.c:103 ../cli/src/devices.c:227
-msgid "TYPE"
-msgstr "유형"
+#: ../cli/src/connections.c:185
+msgid "ZONE"
+msgstr "ì˜ì—­"
-#. 2
-#: ../cli/src/connections.c:81
-msgid "TIMESTAMP"
-msgstr "타임스탬프"
+#: ../cli/src/connections.c:186
+msgid "MASTER-PATH"
+msgstr "마스터 경로"
-#. 3
-#: ../cli/src/connections.c:82
-msgid "TIMESTAMP-REAL"
-msgstr "실제 타임스탬프"
+#: ../cli/src/connections.c:202
+msgid "USERNAME"
+msgstr "ì‚¬ìš©ìž ì´ë¦„"
-#. 4
-#: ../cli/src/connections.c:83
-msgid "AUTOCONNECT"
-msgstr "ìžë™ì—°ê²°"
+#: ../cli/src/connections.c:203
+msgid "GATEWAY"
+msgstr "게ì´íŠ¸ì›¨ì´"
-#. 5
-#: ../cli/src/connections.c:84
-msgid "READONLY"
-msgstr "ì½ê¸°ì „ìš©"
+#: ../cli/src/connections.c:204
+msgid "BANNER"
+msgstr "배너"
+
+#: ../cli/src/connections.c:205
+msgid "VPN-STATE"
+msgstr "VPN-ìƒíƒœ"
-#: ../cli/src/connections.c:167
+#: ../cli/src/connections.c:206
+msgid "CFG"
+msgstr "CFG"
+
+#: ../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 con { COMMAND | help }\n"
-" COMMAND := { list | status | up | down }\n"
+"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"
-" 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] [--timeout "
-"<timeout>]\n"
-" down id <id> | uuid <id>\n"
msgstr ""
-"사용법: nmcli con { <명령어> | help }\n"
-" <명령어> := { list | status | up | down }\n"
+"사용법: nmcli connection { 명령 | help }\n"
+"\n"
+"명령 := { show | up | down | add | modify | edit | delete | reload | load }\n"
+"\n"
+" ì„¤ì •ëœ [[id | uuid | path] <ID>] 표시\n"
+" í™œì„±í™”ëœ [[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\n"
-" up id <id> | uuid <id> [iface <ì¸í„°íŽ˜ì´ìŠ¤>] [ap <하드웨어주소>] [--nowait] "
-"[--timeout <타임아웃시간>]\n"
-" down id <id> | uuid <id>\n"
-#: ../cli/src/connections.c:220 ../cli/src/connections.c:544
+#: ../cli/src/connections.c:278
#, c-format
-msgid "Error: 'con list': %s"
-msgstr "오류: '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 ""
+"사용법: nmcli connection show { ì¸ìˆ˜ | help }\n"
+"\n"
+"ì¸ìˆ˜ := active [[id | uuid | path | apath] <ID>]\n"
+"\n"
+"네트워í¬ì— 연결하기 위해 현재 장치ì—ì„œ 사용하고 있는 ì—°ê²°ì„ í‘œì‹œí•©ë‹ˆë‹¤.\n"
+"매개 ë³€ìˆ˜ì—†ì´ ëª¨ë“  활성 ì—°ê²°ì´ í‘œì‹œë©ë‹ˆë‹¤. <ID>를 지정하면\n"
+"ì—°ê²° ì •ë³´ê°€ 표시ë©ë‹ˆë‹¤.\n"
+"\n"
+"ì¸ìˆ˜ := configured [[id | uuid | path] <ID>]\n"
+"\n"
+"메모리 ë° ë””ìŠ¤í¬ ë‚´ìž¥ ì—°ê²°ì„ í‘œì‹œí•©ë‹ˆë‹¤. 장치가 ì—°ê²° 프로파ì¼ì„ 사용하는 경우\n"
+"ì—°ê²°ë„ í™œì„±í™”ë  ìˆ˜ 있습니다. 매개 ë³€ìˆ˜ì—†ì´ ëª¨ë“  프로파ì¼ì´\n"
+"표시ë©ë‹ˆë‹¤. <ID>를 지정하면, í”„ë¡œíŒŒì¼ ì •ë³´ë„ í‘œì‹œë©ë‹ˆë‹¤.\n"
+"\n"
-#: ../cli/src/connections.c:222 ../cli/src/connections.c:546
+#: ../cli/src/connections.c:297
#, c-format
-msgid "Error: 'con list': %s; allowed fields: %s"
-msgstr "오류: 'con list': %s. í—ˆìš©ëœ í•„ë“œ: %s"
-
-#: ../cli/src/connections.c:230
-msgid "Connection details"
-msgstr "ì—°ê²° ìƒì„¸ ì •ë³´"
-
-#: ../cli/src/connections.c:419
-msgid "never"
-msgstr "하지않ìŒ"
-
-#. "CAPABILITIES"
-#. Print header
-#. "WIFI-PROPERTIES"
-#: ../cli/src/connections.c:420 ../cli/src/connections.c:421
-#: ../cli/src/connections.c:599 ../cli/src/connections.c:601
-#: ../cli/src/devices.c:509 ../cli/src/devices.c:562 ../cli/src/devices.c:687
-#: ../cli/src/devices.c:713 ../cli/src/devices.c:714 ../cli/src/devices.c:715
-#: ../cli/src/devices.c:716 ../cli/src/devices.c:717 ../cli/src/settings.c:520
-#: ../cli/src/settings.c:563 ../cli/src/settings.c:663
-#: ../cli/src/settings.c:937 ../cli/src/settings.c:938
-#: ../cli/src/settings.c:940 ../cli/src/settings.c:942
-#: ../cli/src/settings.c:1067 ../cli/src/settings.c:1068
-#: ../cli/src/settings.c:1069 ../cli/src/settings.c:1148
-#: ../cli/src/settings.c:1149 ../cli/src/settings.c:1150
-#: ../cli/src/settings.c:1151 ../cli/src/settings.c:1152
-#: ../cli/src/settings.c:1153 ../cli/src/settings.c:1154
-#: ../cli/src/settings.c:1155 ../cli/src/settings.c:1156
-#: ../cli/src/settings.c:1157 ../cli/src/settings.c:1158
-#: ../cli/src/settings.c:1159 ../cli/src/settings.c:1160
-#: ../cli/src/settings.c:1235
-msgid "yes"
-msgstr "예"
-
-#: ../cli/src/connections.c:420 ../cli/src/connections.c:421
-#: ../cli/src/connections.c:599 ../cli/src/connections.c:601
-#: ../cli/src/devices.c:509 ../cli/src/devices.c:562 ../cli/src/devices.c:687
-#: ../cli/src/devices.c:713 ../cli/src/devices.c:714 ../cli/src/devices.c:715
-#: ../cli/src/devices.c:716 ../cli/src/devices.c:717 ../cli/src/settings.c:520
-#: ../cli/src/settings.c:522 ../cli/src/settings.c:563
-#: ../cli/src/settings.c:663 ../cli/src/settings.c:937
-#: ../cli/src/settings.c:938 ../cli/src/settings.c:940
-#: ../cli/src/settings.c:942 ../cli/src/settings.c:1067
-#: ../cli/src/settings.c:1068 ../cli/src/settings.c:1069
-#: ../cli/src/settings.c:1148 ../cli/src/settings.c:1149
-#: ../cli/src/settings.c:1150 ../cli/src/settings.c:1151
-#: ../cli/src/settings.c:1152 ../cli/src/settings.c:1153
-#: ../cli/src/settings.c:1154 ../cli/src/settings.c:1155
-#: ../cli/src/settings.c:1156 ../cli/src/settings.c:1157
-#: ../cli/src/settings.c:1158 ../cli/src/settings.c:1159
-#: ../cli/src/settings.c:1160 ../cli/src/settings.c:1235
-msgid "no"
-msgstr "아니요"
-
-#: ../cli/src/connections.c:495
-msgid "Connection list"
-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] <ID> [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
+"\n"
+"ìž¥ì¹˜ì— ì—°ê²°ì„ í™œì„±í™”í•©ë‹ˆë‹¤. 활성화할 프로파ì¼ì€ ì´ë¦„, UUID D-Bus 경로 등으로\n"
+"ì‹ë³„합니다.\n"
+"\n"
+"ì¸ìˆ˜ := ifname <ifname> [ap <BSSID>] [nsp <name>]\n"
+"\n"
+"ì—°ê²°ì„ ì‚¬ìš©í•˜ì—¬ 장치를 활성화합니다. ì—°ê²° 프로파ì¼ì€ NetworkManagerì— ì˜í•´\n"
+"ìžë™ìœ¼ë¡œ ì„ íƒë©ë‹ˆë‹¤.\n"
+"\n"
+"ifname - ì—°ê²°ì„ í™œì„±í™”í•˜ê³ ìž í•˜ëŠ” 장치를 지정합니다\n"
+"ap - ì—°ê²°ì„ ìœ„í•´ AP를 지정합니다 (Wi-Fi 경우ì—만 ì ìš©)\n"
+"nsp - ì—°ê²°ì„ ìœ„í•´ NSP를 지정합니다 (WiMAXì˜ ê²½ìš°ì—만 ì ìš©)\n"
+"\n"
-#: ../cli/src/connections.c:508 ../cli/src/connections.c:1380
-#: ../cli/src/connections.c:1395 ../cli/src/connections.c:1404
-#: ../cli/src/connections.c:1414 ../cli/src/connections.c:1426
-#: ../cli/src/connections.c:1521 ../cli/src/devices.c:1190
-#: ../cli/src/devices.c:1200 ../cli/src/devices.c:1314
-#: ../cli/src/devices.c:1321 ../cli/src/devices.c:1534
-#: ../cli/src/devices.c:1541
+#: ../cli/src/connections.c:318
#, c-format
-msgid "Error: %s argument is missing."
-msgstr "오류: %s ì¸ìžê°€ 없습니다."
+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] <ID>\n"
+"\n"
+"장치ì—ì„œ ì—°ê²°ì„ í•´ì œí•©ë‹ˆë‹¤ (ìž¥ì¹˜ì˜ ìžë™ 활성화는 í•´ì œë˜ì§€ 않습니다)\n"
+"ì—°ê²° 해제할 프로파ì¼ì€ ì´ë¦„, UUID, D-Bus ê²½ë¡œì— ì˜í•´\n"
+"ì‹ë³„ë©ë‹ˆë‹¤.\n"
+"\n"
-#: ../cli/src/connections.c:521
+#: ../cli/src/connections.c:331
#, c-format
-msgid "Error: %s - no such connection."
-msgstr "오류: %s - 그런 ì—°ê²°ì´ ì—†ìŠµë‹ˆë‹¤."
+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 { ì¸ìˆ˜ | help }\n"
+"\n"
+"ì¸ìˆ˜ := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
+"\n"
+" COMMON_OPTIONS:\n"
+" type <유형>\n"
+" ifname <ì¸í„°íŽ˜ì´ìŠ¤ ì´ë¦„> | \"*\"\n"
+" [con-name <ì—°ê²° ì´ë¦„>]\n"
+" [autoconnect yes|no]\n"
+"\n"
+" TYPE_SPECIFIC_OPTIONS:\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 <ifname>]\n"
+" [p-key <IPoIB P_Key>]\n"
+"\n"
+" bluetooth: [addr <bluetooth 주소>]\n"
+" [bt-type panu|dun-gsm|dun-cdma]\n"
+"\n"
+" vlan: dev <부모 장치 (연결 UUID, ifname, MAC)>\n"
+" id <VLAN ID>\n"
+" [flags <VLAN 플래그>]\n"
+" [ingress <ingress 우선 순위 맵핑>]\n"
+" [egress <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 <ifname>]\n"
+" [miimon <숫ìž>]\n"
+" [downdelay <숫ìž>]\n"
+" [updelay <숫ìž>]\n"
+" [arp-interval <숫ìž>]\n"
+" [arp-ip-target <숫ìž>]\n"
+"\n"
+" bond-slave: master <마스터 (ifname ë˜ëŠ” ì—°ê²° UUID)>\n"
+"\n"
+" team: [config <파ì¼>|<ì› JSON ë°ì´í„°>]\n"
+"\n"
+" team-slave: master <마스터 (ifname ë˜ëŠ” ì—°ê²° 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"
+"\n"
+" bridge-slave: master <마스터 (ifname ë˜ëŠ” ì—°ê²° 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_OPTIONS:\n"
+" [ip4 <IPv4 주소>] [gw4 <IPv4 게ì´íŠ¸ì›¨ì´>]\n"
+" [ip6 <IPv6 주소>] [gw6 <IPv6 게ì´íŠ¸ì›¨ì´>]\n"
+"\n"
-#: ../cli/src/connections.c:527 ../cli/src/connections.c:1439
-#: ../cli/src/connections.c:1538 ../cli/src/devices.c:987
-#: ../cli/src/devices.c:1067 ../cli/src/devices.c:1214
-#: ../cli/src/devices.c:1327 ../cli/src/devices.c:1547
+#: ../cli/src/connections.c:408
#, c-format
-msgid "Unknown parameter: %s\n"
-msgstr "알려져있지 ì•Šì€ ë§¤ê°œë³€ìˆ˜ìž…ë‹ˆë‹¤: %s\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] <ID> <설정 ì´ë¦„>.<ì†ì„± ì´ë¦„> [<ê°’>]\n"
+"\n"
+"ì—°ê²° 프로파ì¼ì— 있는 ë‹¨ì¼ ì†ì„±ì„ 변경합니다.\n"
+"프로파ì¼ì€ ì´ë¦„, UUID, D-Bus 경로로 ì‹ë³„합니다.\n"
+"\n"
-#: ../cli/src/connections.c:536
+#: ../cli/src/connections.c:420
#, c-format
-msgid "Error: no valid parameter specified."
-msgstr "오류: 옳바른 매개변수가 지정ë˜ì§€ 않았습니다."
+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] <ID>\n"
+"\n"
+"ìƒí˜¸ ëŒ€í™”ì‹ íŽ¸ì§‘ê¸°ì—ì„œ 기존 ì—°ê²° 프로파ì¼ì„ 편집합니다.\n"
+"프로파ì¼ì€ ì´ë¦„, UUID, D-Bus 경로로 ì‹ë³„합니다\n"
+"\n"
+"ì¸ìˆ˜ := [type <새 ì—°ê²° 유형>] [con-name <새 ì—°ê²° ì´ë¦„>]\n"
+"\n"
+"ìƒí˜¸ ëŒ€í™”ì‹ íŽ¸ì§‘ê¸°ì—ì„œ 새 ì—°ê²° 프로파ì¼ì„ 추가합니다.\n"
+"\n"
-#: ../cli/src/connections.c:551 ../cli/src/connections.c:1629
-#: ../cli/src/devices.c:1755 ../cli/src/network-manager.c:463
+#: ../cli/src/connections.c:436
#, c-format
-msgid "Error: %s."
-msgstr "오류: %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 ""
+"사용법: nmcli connection delete { ì¸ìˆ˜ | help }\n"
+"\n"
+"ì¸ìˆ˜ := [id | uuid | path] <ID>\n"
+"\n"
+"ì—°ê²° 프로파ì¼ì„ 삭제합니다.\n"
+"프로파ì¼ì€ ì´ë¦„, UUID, D-Bus 경로로 ì‹ë³„합니다.\n"
+"\n"
-#: ../cli/src/connections.c:639
+#: ../cli/src/connections.c:448
#, c-format
-msgid "Error: 'con status': %s"
-msgstr "오류: 'con status': %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:641
+#: ../cli/src/connections.c:457
#, c-format
-msgid "Error: 'con status': %s; allowed fields: %s"
-msgstr "오류: 'con status': %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 { ì¸ìˆ˜ | help }\n"
+"\n"
+"ì¸ìˆ˜ := <filename> [<filename>...]\n"
+"\n"
+"디스í¬ì—ì„œ 하나 ì´ìƒì˜ ì—°ê²° 파ì¼ì„ 불러오기/다시 불러오기합니다. 수ë™ìœ¼ë¡œ ì—°ê²° 파ì¼ì„ 편집한 후 \n"
+"NetworkManagerê°€ 최신 ìƒíƒœë¥¼ ì¸ì‹í•  수 있ë„ë¡\n"
+"ì´ ëª…ë ¹ì„ ì‚¬ìš©í•©ë‹ˆë‹¤.\n"
+"\n"
-#: ../cli/src/connections.c:649 ../cli/src/connections.c:1454
-#: ../cli/src/connections.c:1553 ../cli/src/devices.c:1014
-#: ../cli/src/devices.c:1076 ../cli/src/devices.c:1229
-#: ../cli/src/devices.c:1357 ../cli/src/devices.c:1576
+#: ../cli/src/connections.c:515
#, c-format
-msgid "Error: Can't find out if NetworkManager is running: %s."
-msgstr "오류: ë„¤íŠ¸ì›Œí¬ ê´€ë¦¬ í”„ë¡œê·¸ëž¨ì´ ì‹¤í–‰ 중ì¸ì§€ ì•Œ 수 없습니다: %s."
+msgid "Error: 'list configured': %s"
+msgstr "오류: 'list configured': %s"
-#: ../cli/src/connections.c:653 ../cli/src/connections.c:1458
-#: ../cli/src/connections.c:1557 ../cli/src/devices.c:1018
-#: ../cli/src/devices.c:1080 ../cli/src/devices.c:1233
-#: ../cli/src/devices.c:1361 ../cli/src/devices.c:1580
-#, c-format
-msgid "Error: NetworkManager is not running."
-msgstr "오류: ë„¤íŠ¸ì›Œí¬ ê´€ë¦¬ í”„ë¡œê·¸ëž¨ì´ ì‹¤í–‰ ì¤‘ì´ ì•„ë‹™ë‹ˆë‹¤."
+#: ../cli/src/connections.c:523
+msgid "Connection details"
+msgstr "ì—°ê²° ìƒì„¸ ì •ë³´"
-#: ../cli/src/connections.c:661
-msgid "Active connections"
-msgstr "í™œì„±í™”ëœ ì—°ê²°"
+#: ../cli/src/connections.c:589
+msgid "never"
+msgstr "하지않ìŒ"
-#: ../cli/src/connections.c:1097
+#: ../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: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: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 "no active connection on device '%s'"
-msgstr "장치 '%s'ì— í™œì„±í™”ëœ ì—°ê²°ì´ ì—†ìŠµë‹ˆë‹¤"
+msgid "Error: %s argument is missing."
+msgstr "오류: %s ì¸ìžê°€ 없습니다."
-#: ../cli/src/connections.c:1105
+#: ../cli/src/connections.c:698
#, c-format
-msgid "no active connection or device"
-msgstr "í™œì„±í™”ëœ ì—°ê²°ì´ë‚˜ 장치가 없습니다"
+msgid "Error: %s - no such connection."
+msgstr "오류: %s - 그런 ì—°ê²°ì´ ì—†ìŠµë‹ˆë‹¤."
-#: ../cli/src/connections.c:1176
+#: ../cli/src/connections.c:710
#, c-format
-msgid "device '%s' not compatible with connection '%s'"
-msgstr "'%s' 장치는 '%s' ì—°ê²°ê³¼ 호환ë˜ì§€ 않습니다"
+msgid "Error: 'show configured': %s"
+msgstr "오류: 'show configured': %s"
-#: ../cli/src/connections.c:1178
+#: ../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 "no device found for connection '%s'"
-msgstr "ì—°ê²° '%s'ì— ëŒ€í•œ 장치를 ì°¾ì„ ìˆ˜ 없습니다"
+msgid "Error: %s."
+msgstr "오류: %s."
-#: ../cli/src/connections.c:1189
+#: ../cli/src/connections.c:728
msgid "activating"
msgstr "활성화중"
-#: ../cli/src/connections.c:1191
+#: ../cli/src/connections.c:730
msgid "activated"
msgstr "활성화ë¨"
-#: ../cli/src/connections.c:1193 ../cli/src/devices.c:304
-msgid "deactivating"
-msgstr "활성화 해제하는 중"
+#: ../cli/src/connections.c:734
+msgid "deactivated"
+msgstr "비활성화ë¨"
-#: ../cli/src/connections.c:1196 ../cli/src/connections.c:1219
-#: ../cli/src/connections.c:1252 ../cli/src/devices.c:308
-#: ../cli/src/devices.c:688 ../cli/src/network-manager.c:118
-#: ../cli/src/network-manager.c:180 ../cli/src/network-manager.c:183
-#: ../cli/src/network-manager.c:192 ../cli/src/network-manager.c:298
-#: ../cli/src/network-manager.c:353 ../cli/src/network-manager.c:391
-#: ../cli/src/network-manager.c:430 ../cli/src/settings.c:485
-#: ../cli/src/utils.c:396
-msgid "unknown"
-msgstr "ì•Œ 수 ì—†ìŒ"
-
-#: ../cli/src/connections.c:1205
+#: ../cli/src/connections.c:746
msgid "VPN connecting (prepare)"
msgstr "VPN 연결 중 (준비)"
-#: ../cli/src/connections.c:1207
+#: ../cli/src/connections.c:748
msgid "VPN connecting (need authentication)"
msgstr "VPN ì—°ê²° 중 (ì¸ì¦ í•„ìš”)"
-#: ../cli/src/connections.c:1209
+#: ../cli/src/connections.c:750
msgid "VPN connecting"
msgstr "VPN 연결 중"
-#: ../cli/src/connections.c:1211
+#: ../cli/src/connections.c:752
msgid "VPN connecting (getting IP configuration)"
msgstr "VPN 연결 중 (IP 설정 얻는 중)"
-#: ../cli/src/connections.c:1213
+#: ../cli/src/connections.c:754
msgid "VPN connected"
msgstr "VPN ì—°ê²° ë¨"
-#: ../cli/src/connections.c:1215
+#: ../cli/src/connections.c:756
msgid "VPN connection failed"
msgstr "VPN 연결 실패"
-#: ../cli/src/connections.c:1217
+#: ../cli/src/connections.c:758
msgid "VPN disconnected"
msgstr "VPN ì—°ê²° ëŠê²¼ìŒ"
-#: ../cli/src/connections.c:1228
+#: ../cli/src/connections.c:829 ../cli/src/connections.c:839
+#: ../cli/src/devices.c:594
+msgid "N/A"
+msgstr "해당 ì—†ìŒ "
+
+#: ../cli/src/connections.c:1012
+#, c-format
+msgid "Error: 'list active': %s"
+msgstr "오류: 'list active': %s"
+
+#: ../cli/src/connections.c:1020
+msgid "Active connection details"
+msgstr "í™œì„±í™”ëœ ì—°ê²° ìƒì„¸ ì •ë³´ "
+
+#: ../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:1203
+msgid "List of active connections"
+msgstr "활성 ì—°ê²° ëª©ë¡ "
+
+#: ../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:1251
+#, c-format
+msgid "Error: 'show active': %s"
+msgstr "오류: 'show active': %s"
+
+#: ../cli/src/connections.c:1344
+#, c-format
+msgid "no active connection on device '%s'"
+msgstr "장치 '%s'ì— í™œì„±í™”ëœ ì—°ê²°ì´ ì—†ìŠµë‹ˆë‹¤"
+
+#: ../cli/src/connections.c:1352
+msgid "no active connection or device"
+msgstr "í™œì„±í™”ëœ ì—°ê²°ì´ë‚˜ 장치가 없습니다"
+
+#: ../cli/src/connections.c:1423
+#, c-format
+msgid "device '%s' not compatible with connection '%s'"
+msgstr "'%s' 장치는 '%s' ì—°ê²°ê³¼ 호환ë˜ì§€ 않습니다"
+
+#: ../cli/src/connections.c:1426
+#, c-format
+msgid "no device found for connection '%s'"
+msgstr "ì—°ê²° '%s'ì— ëŒ€í•œ 장치를 ì°¾ì„ ìˆ˜ 없습니다"
+
+#: ../cli/src/connections.c:1438
msgid "unknown reason"
msgstr "ì•Œ 수 없는 ì´ìœ "
-#: ../cli/src/connections.c:1230
+#: ../cli/src/connections.c:1440 ../cli/src/network-manager.c:288
msgid "none"
msgstr "ì—†ìŒ"
-#: ../cli/src/connections.c:1232
+#: ../cli/src/connections.c:1442
msgid "the user was disconnected"
msgstr "ì‚¬ìš©ìž ì—°ê²°ì´ ëŠì–´ì¡ŒìŠµë‹ˆë‹¤"
-#: ../cli/src/connections.c:1234
+#: ../cli/src/connections.c:1444
msgid "the base network connection was interrupted"
msgstr "기반 ë„¤íŠ¸ì›Œí¬ ì—°ê²°ì´ ì¤‘ì§€ë˜ì—ˆìŠµë‹ˆë‹¤"
-#: ../cli/src/connections.c:1236
+#: ../cli/src/connections.c:1446
msgid "the VPN service stopped unexpectedly"
msgstr "VPN 서비스가 예기치 못하게 중단ë˜ì—ˆìŠµë‹ˆë‹¤"
-#: ../cli/src/connections.c:1238
+#: ../cli/src/connections.c:1448
msgid "the VPN service returned invalid configuration"
msgstr "VPN 서비스가 ìž˜ëª»ëœ ì„¤ì •ì„ ë°˜í™˜í–ˆìŠµë‹ˆë‹¤"
-#: ../cli/src/connections.c:1240
+#: ../cli/src/connections.c:1450
msgid "the connection attempt timed out"
msgstr "ì—°ê²° ì‹œë„ê°€ ì‹œê°„ì„ ì´ˆê³¼í–ˆìŠµë‹ˆë‹¤"
-#: ../cli/src/connections.c:1242
+#: ../cli/src/connections.c:1452
msgid "the VPN service did not start in time"
msgstr "VPN 서비스가 ì œ ì‹œê°„ì— ì‹œìž‘ë˜ì§€ 않았습니다"
-#: ../cli/src/connections.c:1244
+#: ../cli/src/connections.c:1454
msgid "the VPN service failed to start"
msgstr "VPN 서비스를 시작하는 ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤"
-#: ../cli/src/connections.c:1246
+#: ../cli/src/connections.c:1456
msgid "no valid VPN secrets"
-msgstr "옳바른 VPN 비밀 정보가 없습니다"
+msgstr "올바른 VPN 비밀 정보가 없습니다"
-#: ../cli/src/connections.c:1248
+#: ../cli/src/connections.c:1458
msgid "invalid VPN secrets"
msgstr "ìž˜ëª»ëœ VPN 비밀정보"
-#: ../cli/src/connections.c:1250
+#: ../cli/src/connections.c:1460
msgid "the connection was removed"
msgstr "ì—°ê²°ì´ ì œê±°ë˜ì—ˆìŠµë‹ˆë‹¤"
-#: ../cli/src/connections.c:1264
+#: ../cli/src/connections.c:1477 ../cli/src/connections.c:1633
+#: ../cli/src/connections.c:6016
#, c-format
-msgid "state: %s\n"
-msgstr "ìƒíƒœ: %s\n"
+msgid "Connection successfully activated (D-Bus active path: %s)\n"
+msgstr "ì—°ê²°ì´ ì„±ê³µì ìœ¼ë¡œ 활성화ë˜ì—ˆìŠµë‹ˆë‹¤ (D-Bus 활성 경로: %s)\n"
-#: ../cli/src/connections.c:1267 ../cli/src/connections.c:1293
-#, c-format
-msgid "Connection activated\n"
-msgstr "ì—°ê²°ì´ í™œì„±í™”ë˜ì—ˆìŠµë‹ˆë‹¤\n"
-
-#: ../cli/src/connections.c:1270
+#: ../cli/src/connections.c:1482
#, c-format
msgid "Error: Connection activation failed."
msgstr "오류: 연결 활성화가 실패했습니다."
-#: ../cli/src/connections.c:1289
+#: ../cli/src/connections.c:1507
#, c-format
-msgid "state: %s (%d)\n"
-msgstr "ìƒíƒœ: %s (%d)\n"
+msgid "VPN connection successfully activated (D-Bus active path: %s)\n"
+msgstr "VPN ì—°ê²°ì´ ì„±ê³µì ìœ¼ë¡œ 활성화ë˜ì—ˆìŠµë‹ˆë‹¤ (D-Bus 활성 경로: %s)\n"
-#: ../cli/src/connections.c:1299
+#: ../cli/src/connections.c:1514
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "오류: 연결 활성화가 실패했습니다: %s."
-#: ../cli/src/connections.c:1316 ../cli/src/devices.c:1136
+#: ../cli/src/connections.c:1532 ../cli/src/devices.c:1294
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "오류: 제한시간 %d초를 초과했습니다."
-#: ../cli/src/connections.c:1329
+#: ../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:1335
+#: ../cli/src/connections.c:1722 ../cli/src/connections.c:1854
+msgid "unknown error"
+msgstr "알 수 없는 오류"
+
+#: ../cli/src/connections.c:1730
#, c-format
-msgid "Active connection state: %s\n"
-msgstr "í™œì„±í™”ëœ ì—°ê²° ìƒíƒœ: %s\n"
+msgid "unknown device '%s'."
+msgstr "알 수 없는 장치 '%s'."
+
+#: ../cli/src/connections.c:1735
+msgid "neither a valid connection nor device given"
+msgstr "유효한 ì—°ê²° ë° ìž¥ì¹˜ ëª¨ë‘ ì§€ì •ë˜ì–´ 있지 않습니다 "
-#: ../cli/src/connections.c:1336
+#: ../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 "Active connection path: %s\n"
-msgstr "í™œì„±í™”ëœ ì—°ê²° 경로: %s\n"
+msgid "Unknown parameter: %s\n"
+msgstr "알려져있지 ì•Šì€ ë§¤ê°œë³€ìˆ˜ìž…ë‹ˆë‹¤: %s\n"
+
+#: ../cli/src/connections.c:1862
+msgid "preparing"
+msgstr "준비하는 중"
-#: ../cli/src/connections.c:1388 ../cli/src/connections.c:1529
+#: ../cli/src/connections.c:1889 ../cli/src/connections.c:7719
+#: ../cli/src/connections.c:7832
#, c-format
-msgid "Error: Unknown connection: %s."
-msgstr "오류: 알려지지 ì•Šì€ ì—°ê²°: %s."
+msgid "Error: No connection specified."
+msgstr "오류: ì—°ê²°ì´ ì§€ì •ë˜ì–´ 있지 않습니다. "
-#: ../cli/src/connections.c:1434 ../cli/src/devices.c:1208
+#: ../cli/src/connections.c:2237 ../cli/src/utils.c:490
#, c-format
-msgid "Error: timeout value '%s' is not valid."
-msgstr "오류: 시간 제한 ê°’ '%s'ì´(ê°€) 올바르지 않습니다."
+msgid "'%s' not among [%s]"
+msgstr "'%s'는 [%s]ì— ì—†ìŠµë‹ˆë‹¤ "
-#: ../cli/src/connections.c:1447 ../cli/src/connections.c:1546
+#: ../cli/src/connections.c:2319
#, c-format
-msgid "Error: id or uuid has to be specified."
-msgstr "오류: id나 uuid를 지정해야만 합니다."
+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:1475
+#: ../cli/src/connections.c:2343
#, c-format
-msgid "Error: No suitable device found: %s."
-msgstr "오류: ì ì ˆí•œ 장치를 ì°¾ì„ ìˆ˜ 없습니다: %s."
+msgid "Error: 'mtu': '%s' is not a valid MTU."
+msgstr "오류: 'mtu': '%s'는 올바른 MTU가 아닙니다."
-#: ../cli/src/connections.c:1477
+#: ../cli/src/connections.c:2359
#, c-format
-msgid "Error: No suitable device found."
-msgstr "오류: ì ì ˆí•œ 장치를 ì°¾ì„ ìˆ˜ 없습니다."
+msgid "Error: 'parent': '%s' is not a valid interface name."
+msgstr "오류: 'parent': '%s'는 올바른 ì¸í„°íŽ˜ì´ìŠ¤ ì´ë¦„ì´ ì•„ë‹™ë‹ˆë‹¤."
-#: ../cli/src/connections.c:1582
+#: ../cli/src/connections.c:2380
#, c-format
-msgid "Warning: Connection not active\n"
-msgstr "경고: ì—°ê²°ì´ í™œì„±í™”ë˜ì–´ 있지 않습니다\n"
+msgid "Error: 'p-key': '%s' is not a valid InfiniBand P_KEY."
+msgstr "오류: 'p-key': '%s'는 올바른 InfiniBand P_KEY가 아닙니다."
+
+#: ../cli/src/connections.c:2396
+#, 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:1620
+#: ../cli/src/connections.c:2412
#, c-format
-msgid "Error: 'con' command '%s' is not valid."
-msgstr "오류: 'con' 명령 '%s'ì€(는) 바른 ëª…ë ¹ì´ ì•„ë‹™ë‹ˆë‹¤."
+msgid "Error: 'flags': '%s' is not valid; use <0-7>."
+msgstr "오류: 'flags': '%s'는 올바르지 않습니다; <0-7>ì„ ì‚¬ìš©í•©ë‹ˆë‹¤."
-#: ../cli/src/connections.c:1685
+#: ../cli/src/connections.c:2434
#, c-format
-msgid "Error: could not connect to D-Bus."
-msgstr "오류: D-ë²„ìŠ¤ì— ì—°ê²°í•  수 없습니다."
+msgid "Error: '%s': '%s' is not valid; %s "
+msgstr "오류: '%s': '%s'는 올바르지 않습니다; %s"
-#: ../cli/src/connections.c:1692
+#: ../cli/src/connections.c:2541
+#, c-format
+msgid "Error: '%s': '%s' is not valid; use <%u-%u>."
+msgstr "오류: '%s': '%s'는 올바르지 않습니다; <%u-%u>를 사용합니다. "
+
+#: ../cli/src/connections.c:2555
+msgid "ethernet"
+msgstr "ì´ë”ë„·"
+
+#: ../cli/src/connections.c:2555 ../tui/nm-editor-utils.c:164
+#: ../tui/nm-ui-utils.c:337
+msgid "Wi-Fi"
+msgstr "Wi-Fi"
+
+#: ../cli/src/connections.c:2558
+#, c-format
+msgid "There are 3 optional arguments for '%s' connection type.\n"
+msgstr "'%s' ì—°ê²° 유형ì—는 3 가지 옵션 ì¸ìˆ˜ê°€ 있습니다.\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 "지정 하시겠습니까? (예/아니오) [예]"
+
+#: ../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 [none]: "
+
+#: ../cli/src/connections.c:2589
+msgid "Cloned MAC [none]: "
+msgstr "ë³µì œëœ MAC [none]: "
+
+#: ../cli/src/connections.c:2612
+#, c-format
+msgid "There are 5 optional arguments for 'InfiniBand' connection type.\n"
+msgstr "'InfiniBand' ì—°ê²° 유형ì—는 5 가지 옵션 ì¸ìˆ˜ê°€ 있습니다.\n"
+
+#: ../cli/src/connections.c:2643
+msgid "Transport mode (datagram or connected) [datagram]: "
+msgstr "전송 모드 (datagram ë˜ëŠ” connected) [datagram]: "
+
+#: ../cli/src/connections.c:2656
+msgid "Parent interface [none]: "
+msgstr "부모 ì¸í„°íŽ˜ì´ìŠ¤ [none]: "
+
+#: ../cli/src/connections.c:2667
+msgid "P_KEY [none]: "
+msgstr "P_KEY [none]: "
+
+#: ../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 "암호 [none]: "
+
+#: ../cli/src/connections.c:2744
+msgid "Service [none]: "
+msgstr "서비스 [none]: "
+
+#: ../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 "ì‚¬ìš©ìž ì´ë¦„ [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, 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 플래그 (<0-7>) [none]: "
+
+#: ../cli/src/connections.c:2871
+msgid "Ingress priority maps [none]: "
+msgstr "Ingress 우선 순위 맵 [none]: "
+
+#: ../cli/src/connections.c:2882
+msgid "Egress priority maps [none]: "
+msgstr "Egress 우선 순위 맵 [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 "본딩 모드 [balance-rr]: "
+
+#: ../cli/src/connections.c:2934
+msgid "Bonding primary interface [none]: "
+msgstr "본딩 기본 ì¸í„°íŽ˜ì´ìŠ¤ [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 "본딩 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 설정 [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 활성화 (예/아니오) [예]:"
+
+#: ../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 "Hello 타임 [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 (예/아니요) [예]: "
+
+#: ../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 주소를 추가하시겠습니까? (예/아니오) [예]"
+
+#: ../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 "오류: 'ì‚¬ìš©ìž ì´ë¦„'ì„ ìž…ë ¥í•´ì•¼ 합니다."
+
+#: ../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 ""
+"---[ 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 :: 연결 저장\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) man 페ì´ì§€ì—ì„œ 참조하십시오.\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> - /<ap>|<nsp> - AP (Wi-Fi) ë˜ëŠ” NSP (WiMAX)ì—ì„œ \n"
+"ì—°ê²°ì´ í™œì„±í™”ë  ìž¥ì¹˜ (prepend with / when <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) man 페ì´ì§€ì—ì„œ 참조하십시오.\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"
+"ì •ë§ë¡œ 저장하시겠습니까? [예]"
+
+#: ../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 "오류: 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 ""
+">>> 명령행 íŽ¸ì§‘ì€ ì‚¬ìš©í•  수 없습니다. ì´ ê¸°ëŠ¥ì„ í™œì„±í™”í•˜ë ¤ë©´ í–‰ 편집 ë¼ì´ë¸ŒëŸ¬ë¦¬ 설치를 검토하십시오. <<<\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'는 올바른 '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:1702
+#: ../cli/src/connections.c:8063
#, c-format
msgid "Error: Can't obtain connections: settings service is not running."
msgstr "오류: ì—°ê²°ì„ ì–»ì„ ìˆ˜ 없습니다: 설정 서비스가 실행 ì¤‘ì´ ì•„ë‹™ë‹ˆë‹¤."
-#. 0
-#. 9
-#. 3
-#: ../cli/src/devices.c:66 ../cli/src/devices.c:102 ../cli/src/devices.c:212
-#: ../cli/src/devices.c:228
+#: ../cli/src/devices.c:71 ../cli/src/devices.c:87 ../cli/src/devices.c:184
+#: ../cli/src/devices.c:201
msgid "DEVICE"
msgstr "장치"
-#. 1
-#. 4
-#. 1
-#: ../cli/src/devices.c:68 ../cli/src/devices.c:106
-#: ../cli/src/network-manager.c:39
-msgid "STATE"
-msgstr "ìƒíƒœ"
+#: ../cli/src/devices.c:75 ../cli/src/devices.c:103
+msgid "CONNECTION"
+msgstr "ì—°ê²° "
-#: ../cli/src/devices.c:78
-msgid "GENERAL"
-msgstr "ì¼ë°˜"
+#: ../cli/src/devices.c:76 ../cli/src/devices.c:104
+msgid "CON-UUID"
+msgstr "CON-UUID"
-#. 0
-#: ../cli/src/devices.c:79
-msgid "CAPABILITIES"
-msgstr "기능"
+#: ../cli/src/devices.c:89
+msgid "VENDOR"
+msgstr "ë²¤ë” "
-#. 1
-#: ../cli/src/devices.c:80
-msgid "WIFI-PROPERTIES"
-msgstr "WIFI ì†ì„±"
+#: ../cli/src/devices.c:90
+msgid "PRODUCT"
+msgstr "제품"
-#. 2
-#: ../cli/src/devices.c:81
-msgid "AP"
-msgstr "AP"
+#: ../cli/src/devices.c:91
+msgid "DRIVER"
+msgstr "ë“œë¼ì´ë²„"
-#. 3
-#: ../cli/src/devices.c:82
-msgid "WIRED-PROPERTIES"
-msgstr "유선 ì†ì„±"
+#: ../cli/src/devices.c:92
+msgid "DRIVER-VERSION"
+msgstr "ë“œë¼ì´ë²„-버전"
-#. 4
-#: ../cli/src/devices.c:83
-msgid "WIMAX-PROPERTIES"
-msgstr "WIMAX ì†ì„±"
+#: ../cli/src/devices.c:93
+msgid "FIRMWARE-VERSION"
+msgstr "펌웨어-버전 "
-#. 5
-#. 0
-#: ../cli/src/devices.c:84 ../cli/src/devices.c:225
-msgid "NSP"
-msgstr "NSP"
+#: ../cli/src/devices.c:94
+msgid "HWADDR"
+msgstr "하드웨어주소"
-#. 6
-#: ../cli/src/devices.c:85
-msgid "IP4-SETTINGS"
-msgstr "IP4 설정"
+#: ../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"
-#. 7
-#: ../cli/src/devices.c:86
-msgid "IP4-DNS"
-msgstr "IP4 DNS"
+#: ../cli/src/devices.c:97
+msgid "REASON"
+msgstr "ì´ìœ "
-#. 8
-#: ../cli/src/devices.c:87
-msgid "IP6-SETTINGS"
-msgstr "IP6 설정"
+#: ../cli/src/devices.c:98
+msgid "UDI"
+msgstr "UDI"
-#. 9
-#: ../cli/src/devices.c:88
-msgid "IP6-DNS"
-msgstr "IP6 DNS"
+#: ../cli/src/devices.c:99
+msgid "IP-IFACE"
+msgstr "IP-IFACE"
-#. 2
-#: ../cli/src/devices.c:104
-msgid "DRIVER"
-msgstr "ë“œë¼ì´ë²„"
+#: ../cli/src/devices.c:100
+msgid "NM-MANAGED"
+msgstr "NM 관리"
-#. 3
-#: ../cli/src/devices.c:105
-msgid "HWADDR"
-msgstr "하드웨어주소"
+#: ../cli/src/devices.c:102
+msgid "FIRMWARE-MISSING"
+msgstr "펌웨어 ì—†ìŒ"
-#. 0
#: ../cli/src/devices.c:115
+msgid "AVAILABLE-CONNECTION-PATHS"
+msgstr "사용 가능한 연결 경로 "
+
+#: ../cli/src/devices.c:116
+msgid "AVAILABLE-CONNECTIONS"
+msgstr "사용 가능한 연결 "
+
+#: ../cli/src/devices.c:125
msgid "CARRIER-DETECT"
msgstr "ìºë¦¬ì–´ ê°ì§€"
-#. 1
-#: ../cli/src/devices.c:116
+#: ../cli/src/devices.c:126
msgid "SPEED"
msgstr "ì†ë„"
-#. 0
-#: ../cli/src/devices.c:125
+#: ../cli/src/devices.c:135
msgid "CARRIER"
msgstr "ìºë¦¬ì–´"
-#. 0
-#: ../cli/src/devices.c:135
+#: ../cli/src/devices.c:144 ../cli/src/devices.c:563
msgid "WEP"
msgstr "WEP"
-#. 1
-#: ../cli/src/devices.c:136
+#: ../cli/src/devices.c:145
msgid "WPA"
msgstr "WPA"
-#. 2
-#: ../cli/src/devices.c:137
+#: ../cli/src/devices.c:146 ../cli/src/devices.c:571
msgid "WPA2"
msgstr "WPA2"
-#. 3
-#: ../cli/src/devices.c:138
+#: ../cli/src/devices.c:147
msgid "TKIP"
msgstr "TKIP"
-#. 4
-#: ../cli/src/devices.c:139
+#: ../cli/src/devices.c:148
msgid "CCMP"
msgstr "CCMP"
-#. 0
-#: ../cli/src/devices.c:149
+#: ../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 주파수"
-#. 1
-#: ../cli/src/devices.c:150
+#: ../cli/src/devices.c:160
msgid "RSSI"
msgstr "RSSI"
-#. 2
-#: ../cli/src/devices.c:151
+#: ../cli/src/devices.c:161
msgid "CINR"
msgstr "CINR"
-#. 3
-#: ../cli/src/devices.c:152
+#: ../cli/src/devices.c:162
msgid "TX-POW"
msgstr "TX-POW"
-#. 4
-#: ../cli/src/devices.c:153
+#: ../cli/src/devices.c:163
msgid "BSID"
msgstr "BSID"
-#. 0
-#: ../cli/src/devices.c:163 ../cli/src/devices.c:174
-msgid "ADDRESS"
-msgstr "주소"
-
-#. 1
-#: ../cli/src/devices.c:164 ../cli/src/devices.c:175
-msgid "PREFIX"
-msgstr "ì ‘ë‘사"
-
-#. 2
-#: ../cli/src/devices.c:165 ../cli/src/devices.c:176
-msgid "GATEWAY"
-msgstr "게ì´íŠ¸ì›¨ì´"
-
-#. 0
-#: ../cli/src/devices.c:185 ../cli/src/devices.c:194
-msgid "DNS"
-msgstr "DNS"
-
-#. 0
-#: ../cli/src/devices.c:203
+#: ../cli/src/devices.c:172 ../tui/nmt-page-wifi.c:221
msgid "SSID"
msgstr "SSID"
-#. 1
-#: ../cli/src/devices.c:204
+#: ../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:205
+#: ../cli/src/devices.c:175
msgid "MODE"
msgstr "모드"
-#. 3
-#: ../cli/src/devices.c:206
+#: ../cli/src/devices.c:176
+msgid "CHAN"
+msgstr "CHAN"
+
+#: ../cli/src/devices.c:177
msgid "FREQ"
msgstr "주파수"
-#. 4
-#: ../cli/src/devices.c:207
+#: ../cli/src/devices.c:178
msgid "RATE"
msgstr "전송률"
-#. 5
-#. 1
-#: ../cli/src/devices.c:208 ../cli/src/devices.c:226
+#: ../cli/src/devices.c:179 ../cli/src/devices.c:199
msgid "SIGNAL"
msgstr "신호"
-#. 6
-#: ../cli/src/devices.c:209
+#: ../cli/src/devices.c:180
+msgid "BARS"
+msgstr "BARS"
+
+#: ../cli/src/devices.c:181
msgid "SECURITY"
msgstr "보안"
-#. 7
-#: ../cli/src/devices.c:210
+#: ../cli/src/devices.c:182
msgid "WPA-FLAGS"
msgstr "WPA 플래그"
-#. 8
-#: ../cli/src/devices.c:211
+#: ../cli/src/devices.c:183
msgid "RSN-FLAGS"
msgstr "RSN 플래그"
-#. 10
-#. 4
-#: ../cli/src/devices.c:213 ../cli/src/devices.c:229
+#: ../cli/src/devices.c:185 ../cli/src/devices.c:202
msgid "ACTIVE"
msgstr "활성"
-#: ../cli/src/devices.c:256
+#: ../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 "슬레ì´ë¸Œ "
+
+#: ../cli/src/devices.c:222
+msgid "ID"
+msgstr "ID"
+
+#: ../cli/src/devices.c:237
+msgid "CAPABILITIES"
+msgstr "기능"
+
+#: ../cli/src/devices.c:238
+msgid "WIFI-PROPERTIES"
+msgstr "WIFI ì†ì„±"
+
+#: ../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 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>] [hwaddr <hwaddr>]]\n"
-" wimax [list [iface <iface>] [nsp <name>]]\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"
+" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
msgstr ""
-"사용법: nmcli dev { <명령어> | help }\n"
+"사용법: nmcli device { 명령 | 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"
-" wifi [list [iface <ì¸í„°íŽ˜ì´ìŠ¤>] | hwaddr <하드웨어주소>]\n"
-" wimax [list [iface <ì¸í„°íŽ˜ì´ìŠ¤>] | nsp <ì´ë¦„>]\n"
"\n"
-
-#: ../cli/src/devices.c:284
-msgid "unmanaged"
-msgstr "관리ë˜ì§€ ì•ŠìŒ"
-
-#: ../cli/src/devices.c:286
-msgid "unavailable"
-msgstr "사용할 수 ì—†ìŒ"
-
-#: ../cli/src/devices.c:288 ../cli/src/network-manager.c:115
-msgid "disconnected"
-msgstr "ì—°ê²° ëŠê²¼ìŒ"
-
-#: ../cli/src/devices.c:290
-msgid "connecting (prepare)"
-msgstr "연결 중 (준비)"
-
-#: ../cli/src/devices.c:292
-msgid "connecting (configuring)"
-msgstr "연결 중 (설정중)"
-
-#: ../cli/src/devices.c:294
-msgid "connecting (need authentication)"
-msgstr "ì—°ê²° 중 (ì¸ì¦ í•„ìš”)"
-
-#: ../cli/src/devices.c:296
-msgid "connecting (getting IP configuration)"
-msgstr "연결 중 (IP 설정 가져오는 중)"
+" 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>] [wep-key-type key|phrase] [ifname "
+"<ifname>]\n"
+" [bssid <BSSID>] [ì´ë¦„ <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
-msgid "connecting (checking IP connectivity)"
-msgstr "ì—°ê²° 중 (IP ì—°ê²° 확ì¸í•˜ëŠ” 중)"
+#, 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:300
-msgid "connecting (starting secondary connections)"
-msgstr "연결 중 (보조 연결 시작하는 중)"
+#: ../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 { ì¸ìˆ˜ | help }\n"
+"\n"
+"ì¸ìˆ˜ := [<ifname>]\n"
+"\n"
+"ìž¥ì¹˜ì˜ ìƒì„¸ 정보를 표시합니다.\n"
+"ì´ ëª…ë ¹ì€ ëª¨ë“  장치 ë˜ëŠ” ì§€ì •ëœ ìž¥ì¹˜ì˜ ìƒì„¸ 정보를 표시합니다.\n"
+"\n"
-#: ../cli/src/devices.c:302 ../cli/src/network-manager.c:111
-msgid "connected"
-msgstr "ì—°ê²°ë¨"
+#: ../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 { ì¸ìˆ˜ | help }\n"
+"\n"
+"ì¸ìˆ˜ := <ifname>\n"
+"\n"
+"장치를 연결합니다.\n"
+"NetworkManager는 보다 ì í•©í•œ ì—°ê²°ì„ ê²€ìƒ‰í•˜ì—¬ 활성화합니다.\n"
+"ë˜í•œ ìžë™ ì—°ê²°ë¡œ 설정ë˜ì§€ ì•Šì€ ì—°ê²°ë„ ê²€ìƒ‰í•©ë‹ˆë‹¤.\n"
+"\n"
-#: ../cli/src/devices.c:306
-msgid "connection failed"
-msgstr "연결 실패함"
+#: ../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 { ì¸ìˆ˜ | help }\n"
+"\n"
+"ì¸ìˆ˜ := <ifname>\n"
+"\n"
+"장치 ì—°ê²°ì„ í•´ì œí•©ë‹ˆë‹¤.\n"
+"ì´ ëª…ë ¹ì€ ìž¥ì¹˜ ì—°ê²°ì„ í•´ì œí•˜ê³  사용ìž/ìˆ˜ë™ ìž‘ì—…ì—†ì´\n"
+"ìžë™ í™œì„±í™”ì— ì˜í•´ ì—°ê²°ë˜ì§€ 않게 합니다.\n"
+"\n"
-#: ../cli/src/devices.c:331 ../cli/src/devices.c:341 ../cli/src/devices.c:501
-#: ../cli/src/devices.c:545
-msgid "Unknown"
-msgstr "ì•Œ 수 ì—†ìŒ"
+#: ../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 { ì¸ìˆ˜ | help }\n"
+"\n"
+"장치ì—ì„œ ìž‘ì—…ì„ ìˆ˜í–‰í•©ë‹ˆë‹¤.\n"
+"\n"
+"ì¸ìˆ˜ := [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
+"사용 가능한 Wi-Fi 액세스 í¬ì¸íŠ¸ë¥¼ 나열합니다. 'ifname' ë° 'bssid' ì˜µì…˜ì€ íŠ¹ì • ì¸í„°íŽ˜ì´ìŠ¤ ë˜ëŠ” 특정 BSSID를 갖는\n"
+"AP를 ë‚˜ì—´í•˜ëŠ”ë° ì‚¬ìš©ë  ìˆ˜ 있습니다.\n"
+"\n"
+"ì¸ìˆ˜ := connect <(B)SSID> [암호 <password>] [wep-key-type key|phrase] [ifname "
+"<ifname>]\n"
+" [bssid <BSSID>] [ì´ë¦„ <name>] [private yes|no]\n"
+"\n"
+"SSID ë˜ëŠ” BSSIDì—ì„œ 지정한 Wi-Fi 네트워í¬ì— 연결합니다. ëª…ë ¹ì€ ìƒˆë¡œìš´ ì—°ê²°ì„\n"
+"ìƒì„±í•˜ê³  ìž¥ì¹˜ì— í™œì„±í™”í•©ë‹ˆë‹¤. ì´ ëª…ë ¹ì€ GUI í´ë¼ì´ì–¸íŠ¸ì—ì„œ SSID를 í´ë¦­í•˜ëŠ” 것과\n"
+"ë™ì¼í•˜ê²Œ ìž‘ë™í•©ë‹ˆë‹¤. ì´ ëª…ë ¹ì€ í•­ìƒ ìƒˆë¡œìš´ ì—°ê²°ì„ ìƒì„±í•˜ë¯€ë¡œ 주로\n"
+"새로운 Wi-Fi 네트워í¬ì— ì—°ê²°í•˜ëŠ”ë° ìœ ìš©í•©ë‹ˆë‹¤.\n"
+"ì´ë¯¸ 네트워í¬ì— ì—°ê²°ì´ ì¡´ìž¬í•˜ëŠ” 경우 nmcli con up id <name>ì„ ì‚¬ìš©í•˜ì—¬ \n"
+"기존 프로파ì¼ì„ 가져오는 ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤.\n"
+"현재 WEP ë° WPA-PSK 네트워í¬ë§Œ 지ì›ë˜ê³  있ìŒì— 유ì˜í•˜ì‹­ì‹œì˜¤.\n"
+"IP ì„¤ì •ì€ DHCP를 통해 가져온것으로 간주합니다.\n"
+"\n"
+"ì¸ìˆ˜ := rescan [[ifname] <ifname>]\n"
+"\n"
+"NetworkManagerê°€ 사용 가능한 액세스 í¬ì¸íŠ¸ë¥¼ 다시 검색할 ê²ƒì„ ë°”ë¡œ 요청합니다.\n"
+"NetworkManager는 정기ì ìœ¼ë¡œ Wi-Fi 네트워í¬ë¥¼ 검색하지만 ê²½ìš°ì— ë”°ë¼\n"
+"수ë™ìœ¼ë¡œ ê²€ìƒ‰ì„ ì‹œìž‘í•˜ëŠ” ê²ƒì´ ìœ ìš©í•  수 ë„ ìžˆìŠµë‹ˆë‹¤. ì´ ëª…ë ¹ì€ AP를 표시하지 ì•ŠìŒì— 유ì˜í•˜ì‹­ì‹œì˜¤.\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 { ì¸ìˆ˜ | 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:374
+#: ../cli/src/devices.c:480
msgid "(none)"
msgstr "(ì—†ìŒ)"
-#: ../cli/src/devices.c:399
-#, c-format
-msgid "%s: error converting IP4 address 0x%X"
-msgstr "%s: IP4 주소를 (0x%X) 변환하는 중 오류가 있습니다"
-
-#: ../cli/src/devices.c:470
+#: ../cli/src/devices.c:547
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:471
+#: ../cli/src/devices.c:548
#, c-format
msgid "%u Mbit/s"
msgstr "%u Mbit/s"
-#: ../cli/src/devices.c:480
-msgid "Encrypted: "
-msgstr "암호화ë¨: "
-
-#: ../cli/src/devices.c:485
-msgid "WEP "
-msgstr "WEP "
-
-#: ../cli/src/devices.c:487
-msgid "WPA "
-msgstr "WPA "
+#: ../cli/src/devices.c:567
+msgid "WPA1"
+msgstr "WPA1"
-#: ../cli/src/devices.c:489
-msgid "WPA2 "
-msgstr "WPA2 "
+#: ../cli/src/devices.c:576
+msgid "802.1X"
+msgstr "802.1X"
-#: ../cli/src/devices.c:492
-msgid "Enterprise "
-msgstr "기업용 WPA "
-
-#: ../cli/src/devices.c:501
+#: ../cli/src/devices.c:592
msgid "Ad-Hoc"
msgstr "애드혹"
-#: ../cli/src/devices.c:501
-msgid "Infrastructure"
-msgstr "ì¸í”„ë¼ìŠ¤íŠ¸ëŸ­ì³"
+#: ../cli/src/devices.c:593
+msgid "Infra"
+msgstr "ì¸í”„ë¼"
-#: ../cli/src/devices.c:536
+#: ../cli/src/devices.c:625
msgid "Home"
msgstr "홈"
-#: ../cli/src/devices.c:539
+#: ../cli/src/devices.c:628
msgid "Partner"
msgstr "파트너"
-#: ../cli/src/devices.c:542
+#: ../cli/src/devices.c:631
msgid "Roaming"
msgstr "ë¡œë°"
-#: ../cli/src/devices.c:612
-#, c-format
-msgid "Error: 'dev list': %s"
-msgstr "오류: 'dev list': %s"
-
-#: ../cli/src/devices.c:614
-#, c-format
-msgid "Error: 'dev list': %s; allowed fields: %s"
-msgstr "오류: 'dev list': %s. í—ˆìš©ëœ í•„ë“œ: %s"
-
-#: ../cli/src/devices.c:623
+#: ../cli/src/devices.c:725
msgid "Device details"
msgstr "장치 ìƒì„¸ì •ë³´"
-#: ../cli/src/devices.c:657 ../cli/src/devices.c:1152 ../cli/src/utils.c:342
+#: ../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:658
-msgid "unknown)"
-msgstr "ì•Œ 수 ì—†ìŒ)"
-
-#: ../cli/src/devices.c:684
+#: ../cli/src/devices.c:827
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
-#. Print header
-#. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:757
+#: ../cli/src/devices.c:913
msgid "on"
msgstr "켜ì§"
-#: ../cli/src/devices.c:757
+#: ../cli/src/devices.c:913
msgid "off"
msgstr "꺼ì§"
-#: ../cli/src/devices.c:1004
-#, c-format
-msgid "Error: 'dev status': %s"
-msgstr "오류: 'dev status': %s"
-
-#: ../cli/src/devices.c:1006
+#: ../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:1029
+#: ../cli/src/devices.c:1206
msgid "Status of devices"
msgstr "장치 ìƒíƒœ"
-#: ../cli/src/devices.c:1060
+#: ../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:1101 ../cli/src/devices.c:1253
-#: ../cli/src/devices.c:1389 ../cli/src/devices.c:1608
+#: ../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:1124
+#: ../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:1149
+#: ../cli/src/devices.c:1471
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "오류: 장치 '%s' (%s)ì˜ ì—°ê²° 해제가 실패했습니다: %s"
-#: ../cli/src/devices.c:1157
+#: ../cli/src/devices.c:1485
+#, c-format
+msgid "Device '%s' has been disconnected.\n"
+msgstr "장치 '%s' ì—°ê²°ì´ ëŠê²¼ìŠµë‹ˆë‹¤.\n"
+
+#: ../cli/src/devices.c:1628
+msgid "Wi-Fi scan list"
+msgstr "Wi-Fi 스캔 ëª©ë¡ "
+
+#: ../cli/src/devices.c:1666
+#, c-format
+msgid "Error: 'device wifi': %s"
+msgstr "오류: 'device wifi': %s"
+
+#: ../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:1743 ../cli/src/devices.c:2131
+#: ../cli/src/devices.c:2293
+#, c-format
+msgid "Error: Device '%s' is not a Wi-Fi device."
+msgstr "오류: '%s' 장치는 Wi-Fi 장치가 아닙니다."
+
+#: ../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'ì— UUID '%s'ì¸ ì—°ê²°ì´ ìƒì„± ë° í™œì„±í™”ë˜ì—ˆìŠµë‹ˆë‹¤ \n"
+
+#: ../cli/src/devices.c:1829
+#, c-format
+msgid "Error: Connection activation failed: (%d) %s."
+msgstr "오류: ì—°ê²° í™œì„±í™”ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤: (%d) %s."
+
+#: ../cli/src/devices.c:1854
+#, c-format
+msgid "Error: Failed to add/activate new connection: (%d) %s"
+msgstr "오류: 새 ì—°ê²°ì„ ì¶”ê°€/í™œì„±í™”í•˜ëŠ”ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤: (%d) %s"
+
+#: ../cli/src/devices.c:1862
#, c-format
-msgid "Device state: %d (%s)\n"
-msgstr "장치 ìƒíƒœ: %d (%s)\n"
+msgid "Error: Failed to add/activate new connection: Unknown error"
+msgstr "오류: 새 ì—°ê²°ì„ ì¶”ê°€/í™œì„±í™”í•˜ëŠ”ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤: ì•Œ 수 없는 오류 "
+
+#: ../cli/src/devices.c:2013
+msgid "SSID or BSSID: "
+msgstr "SSID ë˜ëŠ” BSSID: "
-#: ../cli/src/devices.c:1222
+#: ../cli/src/devices.c:2018
#, c-format
-msgid "Error: iface has to be specified."
-msgstr "오류: iface를 지정해야만 합니다."
+msgid "Error: SSID or BSSID are missing."
+msgstr "오류: SSID ë˜ëŠ” BSSIDê°€ 누ë½ë˜ì–´ 있습니다."
-#: ../cli/src/devices.c:1347
+#: ../cli/src/devices.c:2042
#, c-format
-msgid "Error: 'dev wifi': %s"
-msgstr "오류 'dev wifi': '%s'"
+msgid "Error: bssid argument value '%s' is not a valid BSSID."
+msgstr "오류: bssid ì¸ìˆ˜ ê°’ '%s'ì€ ì˜¬ë°”ë¥¸ BSSIDê°€ 아닙니다."
-#: ../cli/src/devices.c:1349
+#: ../cli/src/devices.c:2066
#, c-format
-msgid "Error: 'dev wifi': %s; allowed fields: %s"
-msgstr "오류: 'dev wifi': %s. 허용ë˜ëŠ” í•„ë“œ: %s"
+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:1372
-msgid "WiFi scan list"
-msgstr "ê²€ìƒ‰ëœ WiFi 목ë¡"
+#: ../cli/src/devices.c:2086
+#, c-format
+msgid "Error: %s: %s."
+msgstr "오류: %s: %s."
-#: ../cli/src/devices.c:1409 ../cli/src/devices.c:1463
-#: ../cli/src/devices.c:1670
+#: ../cli/src/devices.c:2101
#, c-format
-msgid "Error: Access point with hwaddr '%s' not found."
-msgstr "오류: 하드웨어주소가 '%s'ì¸ ì–µì„¸ìŠ¤ í¬ì¸íŠ¸ë¥¼ ì°¾ì„ ìˆ˜ 없습니다."
+msgid "Error: BSSID to connect to (%s) differs from bssid argument (%s)."
+msgstr "오류: (%s)ì— ì—°ê²°í•˜ë ¤ëŠ” BSSID는 bssid ì¸ìˆ˜ (%s)와 다릅니다."
-#: ../cli/src/devices.c:1426
+#: ../cli/src/devices.c:2107
#, c-format
-msgid "Error: Device '%s' is not a WiFi device."
-msgstr "오류: '%s' 장치는 WiFi 장치가 아닙니다."
+msgid "Error: Parameter '%s' is neither SSID nor BSSID."
+msgstr "오류: 매개 변수 '%s'는 SSID ë˜ëŠ” BSSIDê°€ 아닙니다."
-#: ../cli/src/devices.c:1490
+#: ../cli/src/devices.c:2133 ../cli/src/devices.c:2295
#, c-format
-msgid "Error: 'dev wifi' command '%s' is not valid."
-msgstr "오류 'dev wifi' 명령어 '%s'ì´(ê°€) 바르지 않습니다."
+msgid "Error: No Wi-Fi device found."
+msgstr "오류: Wi-Fi 장치를 ì°¾ì„ ìˆ˜ 없습니다."
-#: ../cli/src/devices.c:1566
+#: ../cli/src/devices.c:2151
#, c-format
-msgid "Error: 'dev wimax': %s"
-msgstr "오류: 'dev wimax': '%s'"
+msgid "Error: No network with SSID '%s' found."
+msgstr "오류: SSID '%s'ì¸ ë„¤íŠ¸ì›Œí¬ë¥¼ ì°¾ì„ ìˆ˜ 없습니다."
-#: ../cli/src/devices.c:1568
+#: ../cli/src/devices.c:2153
#, c-format
-msgid "Error: 'dev wimax': %s; allowed fields: %s"
-msgstr "오류: 'dev wimax': %s. 허용ë˜ëŠ” í•„ë“œ: %s"
+msgid "Error: No access point with BSSID '%s' found."
+msgstr "오류: BSSID '%s'ì¸ ì•¡ì„¸ìŠ¤ 지ì ì„ ì°¾ì„ ìˆ˜ 없습니다."
-#: ../cli/src/devices.c:1591
+#: ../cli/src/devices.c:2192
+msgid "Password: "
+msgstr "암호: "
+
+#: ../cli/src/devices.c:2321
+#, c-format
+msgid "Error: 'device wifi' command '%s' is not valid."
+msgstr "오류: 'device wifi' 명령 '%s'ì´(ê°€) 올바르지 않습니다."
+
+#: ../cli/src/devices.c:2368
msgid "WiMAX NSP list"
msgstr "WiMAX NSP 목ë¡"
-#: ../cli/src/devices.c:1628
+#: ../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:1639
+#: ../cli/src/devices.c:2472
#, c-format
msgid "Error: Device '%s' is not a WiMAX device."
msgstr "오류: '%s' 장치는 와ì´ë§¥ìŠ¤ 장치가 아닙니다."
-#: ../cli/src/devices.c:1697
+#: ../cli/src/devices.c:2510
+#, c-format
+msgid "Error: Access point with nsp '%s' not found."
+msgstr "오류: nsp '%s'ì¸ ì•¡ì„¸ìŠ¤ 지ì ì„ ì°¾ì„ ìˆ˜ 없습니다."
+
+#: ../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:1747
+#: ../cli/src/devices.c:2621
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "오류: 'dev' 명령어 '%s'ì´(ê°€) 바르지 않습니다."
@@ -973,212 +3376,489 @@ 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 "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 "와ì´ë§¥ìŠ¤ 하드웨어"
+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:74
+#: ../cli/src/network-manager.c:70
+msgid "PERMISSION"
+msgstr "권한 "
+
+#: ../cli/src/network-manager.c:71
+msgid "VALUE"
+msgstr "ê°’ "
+
+#: ../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"
+"Usage: nmcli general { COMMAND | help }\n"
+"\n"
+"COMMAND := { status | hostname | permissions | logging }\n"
"\n"
-" COMMAND := { status | enable | sleep | wifi | wwan | wimax }\n"
+" status\n"
+"\n"
+" hostname [<hostname>]\n"
+"\n"
+" permissions\n"
+"\n"
+" logging [level <log level>] [domains <log domains>]\n"
"\n"
-" COMMAND := { status | enable | sleep | wifi | wwan }\n"
+msgstr ""
+"사용법: nmcli general { 명령 | help }\n"
+"\n"
+"명령 := { status | hostname | 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"
+" hostname [<hostname>]\n"
+"\n"
+" permissions\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 nm { <명령어> | help }\n"
+"사용법: nmcli general status { help }\n"
"\n"
-" <명령어> := { status | sleep | wakeup | wifi | wwan | wimax}\n"
+"NetworkManagerì˜ ì¼ë°˜ 정보를 표시합니다.\n"
+"'status'는 기본 ë™ìž‘으로 'nmcli gen'ì„ ì‹¤í–‰í•˜ë©´ 'nmcli gen status'를 실행한 것입니다\n"
"\n"
-" <명령어> := { status | sleep | wakeup | wifi | wwan }\n"
+
+#: ../cli/src/network-manager.c:117
+#, c-format
+msgid ""
+"Usage: nmcli general hostname { ARGUMENTS | help }\n"
"\n"
-" status\n"
-" sleep\n"
-" wakeup\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
-" wimax [on|off]\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"
+"ì¸ìˆ˜ := [<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 { ì¸ìˆ˜ | help }\n"
+"\n"
+"ì¸ìˆ˜ := [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 { 명령 | 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 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:103
+#: ../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:105
+#: ../cli/src/network-manager.c:266
msgid "connecting"
msgstr "ì—°ê²°"
-#: ../cli/src/network-manager.c:107
+#: ../cli/src/network-manager.c:268
msgid "connected (local only)"
msgstr "ì—°ê²°ë¨ (로컬 ì „ìš©)"
-#: ../cli/src/network-manager.c:109
+#: ../cli/src/network-manager.c:270
msgid "connected (site only)"
msgstr "ì—°ê²°ë¨ (사ì´íŠ¸ ì „ìš©)"
-#: ../cli/src/network-manager.c:113
+#: ../cli/src/network-manager.c:274
msgid "disconnecting"
msgstr "ì—°ê²° ëŠëŠ” 중"
-#: ../cli/src/network-manager.c:153
-#, 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:155
+#: ../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:168 ../cli/src/network-manager.c:169
-#: ../cli/src/network-manager.c:170 ../cli/src/network-manager.c:171
-#: ../cli/src/network-manager.c:172 ../cli/src/network-manager.c:174
-#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:296
-#: ../cli/src/network-manager.c:351 ../cli/src/network-manager.c:389
-#: ../cli/src/network-manager.c:428
+#: ../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:168 ../cli/src/network-manager.c:169
-#: ../cli/src/network-manager.c:170 ../cli/src/network-manager.c:171
-#: ../cli/src/network-manager.c:172 ../cli/src/network-manager.c:174
-#: ../cli/src/network-manager.c:175 ../cli/src/network-manager.c:296
-#: ../cli/src/network-manager.c:351 ../cli/src/network-manager.c:389
-#: ../cli/src/network-manager.c:428
+#: ../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:188
+#: ../cli/src/network-manager.c:367
msgid "NetworkManager status"
msgstr "ë„¤íŠ¸ì›Œí¬ ê´€ë¦¬ ìƒíƒœ"
-#. Print header
-#: ../cli/src/network-manager.c:191
+#: ../cli/src/network-manager.c:372
msgid "running"
msgstr "실행 중"
-#: ../cli/src/network-manager.c:191
+#: ../cli/src/network-manager.c:372
msgid "not running"
msgstr "실행 ì¤‘ì´ ì•„ë‹˜"
-#: ../cli/src/network-manager.c:222 ../cli/src/utils.c:322
+#: ../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:475
#, c-format
-msgid "Error: Couldn't connect to system bus: %s"
-msgstr "오류: 시스템 ë²„ìŠ¤ì— ì—°ê²°í•  수 없습니다: %s"
+msgid "Error: 'general permissions': %s"
+msgstr "오류: 'general permissions': %s"
+
+#: ../cli/src/network-manager.c:489
+msgid "NetworkManager permissions"
+msgstr "NetworkManager 권한"
-#: ../cli/src/network-manager.c:233
+#: ../cli/src/network-manager.c:530
#, c-format
-msgid "Error: Couldn't create D-Bus object proxy."
-msgstr "오류: D-버스 오브ì íŠ¸ 프ë¡ì‹œì— ì—°ê²°í•  수 없습니다."
+msgid "Error: 'general logging': %s"
+msgstr "오류: 'general logging': %s"
-#: ../cli/src/network-manager.c:239
+#: ../cli/src/network-manager.c:545
+msgid "NetworkManager logging"
+msgstr "NetworkManager 로깅 "
+
+#: ../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:283 ../cli/src/network-manager.c:338
-#: ../cli/src/network-manager.c:376 ../cli/src/network-manager.c:415
+#: ../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:291
-msgid "Networking enabled"
-msgstr "ë„¤íŠ¸ì›Œí¬ ì‚¬ìš©"
+#: ../cli/src/network-manager.c:684
+#, c-format
+msgid "Error: %s"
+msgstr "오류: %s"
-#: ../cli/src/network-manager.c:307
+#: ../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:317
+#: ../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:325
+#: ../cli/src/network-manager.c:735
#, c-format
-msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
-msgstr "오류: ìž˜ëª»ëœ 'sleep' 매개변수: '%s'. 'true'나 'fasle'를 사용하십시오."
+msgid "Error: invalid '%s' argument: '%s' (use on/off)."
+msgstr "오류: ìž˜ëª»ëœ '%s' ì¸ìˆ˜ìž…니다: '%s' (on/off 사용)."
-#: ../cli/src/network-manager.c:346
-msgid "WiFi enabled"
-msgstr "WiFi 사용 중"
+#: ../cli/src/network-manager.c:746
+msgid "Connectivity"
+msgstr "연결 관련 "
-#: ../cli/src/network-manager.c:362
-#, 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:384
-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:400
+#: ../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:423
-msgid "WiMAX enabled"
-msgstr "와ì´ë§¥ìŠ¤ 사용 중"
+#: ../cli/src/network-manager.c:825 ../cli/src/network-manager.c:845
+msgid "Radio switches"
+msgstr "ë¼ë””오 스위치 "
-#: ../cli/src/network-manager.c:439
-#, 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:452
+#: ../cli/src/network-manager.c:908
#, c-format
-msgid "Error: 'nm' command '%s' is not valid."
-msgstr "오류: 'mn' 명령어 '%s'ì´(ê°€) 바르지 않습니다."
+msgid "Error: 'radio' command '%s' is not valid."
+msgstr "오류: 'radio' 명령 '%s'ì´(ê°€) 올바르지 않습니다."
-#: ../cli/src/nmcli.c:64
+#: ../cli/src/nmcli.c:78
#, c-format
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
@@ -1192,220 +3872,793 @@ 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 [옵션] <대ìƒ> { <명령어> | help }\n"
+"사용법: %s [옵션] ê°ì²´ { 명령 | help }\n"
"\n"
"옵션\n"
-" -t[erse] 간략한 출력\n"
-" -p[retty] ë³´ê¸°ì¢‹ì€ ì¶œë ¥\n"
-" -m[ode] tabular|multiline 출력 모드\n"
-" -f[ields] <필드1,필드2,...>|all|common 출력 필드 지정\n"
-" -e[scape] yes|no ê°’ì—ì„œ ì—´ 구분 문ìžë¥¼ ì´ìŠ¤ì¼€ì´í”„\n"
-" -n[nocheck] nmcli ë° ë„¤íŠ¸ì›Œí¬ ê´€ë¦¬ 버전 검사하"
-"지 않기\n"
-" -v[ersion] 프로그램 버전 정보 표시\n"
-" -h[elp] ì´ ë„ì›€ë§ í‘œì‹œ\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 and NetworkManager ë²„ì „ì„ "
+"확ì¸í•˜ì§€ ì•ŠìŒ\n"
+" -a[sk] 누ë½ëœ 매개 변수 요청 \n"
+" -w[ait] <seconds> ë™ìž‘ ì™„ë£Œì˜ ëŒ€ê¸° ì‹œê°„ì„ ì„¤ì •\n"
+" -v[ersion] 프로그램 버전 표시\n"
+" -h[elp] ë„ì›€ë§ ì¶œë ¥\n"
"\n"
-"대ìƒ\n"
-" nm ë„¤íŠ¸ì›Œí¬ ê´€ë¦¬ ìƒíƒœ\n"
-" con ë„¤íŠ¸ì›Œí¬ ê´€ë¦¬ ì—°ê²°\n"
-" dev ë„¤íŠ¸ì›Œí¬ ê´€ë¦¬ì—ì„œ 관리하는 장치\n"
+"ê°ì²´\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:109
+#: ../cli/src/nmcli.c:132
#, c-format
msgid "Error: Object '%s' is unknown, try 'nmcli help'."
msgstr "ëŒ€ìƒ '%s'ì´(ê°€) 알려져 있지 않습니다. 'nmcli help'를 í•´ 보십시오."
-#: ../cli/src/nmcli.c:139
+#: ../cli/src/nmcli.c:162
#, c-format
msgid "Error: Option '--terse' is specified the second time."
msgstr "오류: 옵션 '--terse'ê°€ ë‘번째로 설정ë˜ì—ˆìŠµë‹ˆë‹¤."
-#: ../cli/src/nmcli.c:144
+#: ../cli/src/nmcli.c:167
#, c-format
msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
msgstr "오류: 옵션 '--terse'를 '--pretty'와 함께 사용할 수 없습니다."
-#: ../cli/src/nmcli.c:152
+#: ../cli/src/nmcli.c:175
#, c-format
msgid "Error: Option '--pretty' is specified the second time."
msgstr "오류: 옵션 '--pretty'ê°€ ë‘번째로 설정ë˜ì—ˆìŠµë‹ˆë‹¤."
-#: ../cli/src/nmcli.c:157
+#: ../cli/src/nmcli.c:180
#, c-format
msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
msgstr "오류: 옵션 '--pretty'를 '--terse'와 함께 사용할 수 없습니다."
-#: ../cli/src/nmcli.c:167 ../cli/src/nmcli.c:183
+#: ../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:176 ../cli/src/nmcli.c:192
+#: ../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:199
+#: ../cli/src/nmcli.c:222
#, c-format
msgid "Error: fields for '%s' options are missing."
msgstr "오류: '%s'ì˜µì…˜ì— ëŒ€í•´ 필드가 없습니다."
-#: ../cli/src/nmcli.c:207
+#: ../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:213
+#: ../cli/src/nmcli.c:253
#, c-format
msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
msgstr "오류: '%s' ì˜µì…˜ì€ ì•Œë ¤ì ¸ 있지 않습니다. 'nmcli -help'를 í•´ 보십시오."
-#: ../cli/src/nmcli.c:232
+#: ../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:257
+#: ../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:273
+#: ../cli/src/nmcli.c:354
msgid "Success"
msgstr "성공"
-#: ../cli/src/settings.c:423
+#: ../cli/src/settings.c:666
#, c-format
msgid "%d (hex-ascii-key)"
msgstr "%d (16진 아시키 열쇠글)"
-#: ../cli/src/settings.c:425
+#: ../cli/src/settings.c:668
#, c-format
msgid "%d (104/128-bit passphrase)"
msgstr "%d (104/128-비트 열쇠글)"
-#: ../cli/src/settings.c:428
+#: ../cli/src/settings.c:671 ../cli/src/settings.c:799
#, c-format
msgid "%d (unknown)"
msgstr "%d (ì•Œ 수 ì—†ìŒ)"
-#: ../cli/src/settings.c:454
+#: ../cli/src/settings.c:697
msgid "0 (unknown)"
msgstr "0 (ì•Œ 수 ì—†ìŒ)"
-#: ../cli/src/settings.c:460
+#: ../cli/src/settings.c:703
msgid "any, "
msgstr "아무, "
-#: ../cli/src/settings.c:462
+#: ../cli/src/settings.c:705
msgid "900 MHz, "
msgstr "900 MHz, "
-#: ../cli/src/settings.c:464
+#: ../cli/src/settings.c:707
msgid "1800 MHz, "
msgstr "1800 MHz, "
-#: ../cli/src/settings.c:466
+#: ../cli/src/settings.c:709
msgid "1900 MHz, "
msgstr "1900 MHz, "
-#: ../cli/src/settings.c:468
+#: ../cli/src/settings.c:711
msgid "850 MHz, "
msgstr "850 MHz, "
-#: ../cli/src/settings.c:470
+#: ../cli/src/settings.c:713
msgid "WCDMA 3GPP UMTS 2100 MHz, "
msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../cli/src/settings.c:472
+#: ../cli/src/settings.c:715
msgid "WCDMA 3GPP UMTS 1800 MHz, "
msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../cli/src/settings.c:474
+#: ../cli/src/settings.c:717
msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../cli/src/settings.c:476
+#: ../cli/src/settings.c:719
msgid "WCDMA 3GPP UMTS 800 MHz, "
msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../cli/src/settings.c:478
+#: ../cli/src/settings.c:721
msgid "WCDMA 3GPP UMTS 850 MHz, "
msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../cli/src/settings.c:480
+#: ../cli/src/settings.c:723
msgid "WCDMA 3GPP UMTS 900 MHz, "
msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../cli/src/settings.c:482
+#: ../cli/src/settings.c:725
msgid "WCDMA 3GPP UMTS 1700 MHz, "
msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../cli/src/settings.c:566 ../cli/src/settings.c:732
+#: ../cli/src/settings.c:727
+msgid "WCDMA 3GPP UMTS 1900 MHz, "
+msgstr "WCDMA 3GPP UMTS 1900 MHz, "
+
+#: ../cli/src/settings.c:729
+msgid "WCDMA 3GPP UMTS 2600 MHz, "
+msgstr "WCDMA 3GPP UMTS 2600 MHz, "
+
+#: ../cli/src/settings.c:747
+msgid "0 (NONE)"
+msgstr "0 (ì—†ìŒ)"
+
+#: ../cli/src/settings.c:753
+msgid "REORDER_HEADERS, "
+msgstr "REORDER_HEADERS, "
+
+#: ../cli/src/settings.c:755
+msgid "GVRP, "
+msgstr "GVRP, "
+
+#: ../cli/src/settings.c:757
+msgid "LOOSE_BINDING, "
+msgstr "LOOSE_BINDING, "
+
+#: ../cli/src/settings.c:793
+#, c-format
+msgid "%d (disabled)"
+msgstr "%d (비활성화ë¨)"
+
+#: ../cli/src/settings.c:795
+#, c-format
+msgid "%d (enabled, prefer public IP)"
+msgstr "%d (활성화ë¨, 공개 IP를 선호)"
+
+#: ../cli/src/settings.c:797
+#, c-format
+msgid "%d (enabled, prefer temporary IP)"
+msgstr "%d (활성화ë¨, ìž„ì‹œ IP를 선호)"
+
+#: ../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/settings.c:727 ../cli/src/settings.c:730
-#: ../cli/src/settings.c:731 ../cli/src/utils.c:176
-msgid "not set"
-msgstr "설정 안ë¨"
+#: ../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>ì„\n"
+"(를) 사용합니다"
+
+#: ../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'는 올바른 16 진수 문ìžê°€ 아닙니다 "
+
+#: ../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 ""
+"16 진수 ê°’ 목ë¡ì„ ë°”ì´íŠ¸ 단위로 입력합니다.\n"
+"다ìŒì˜ ë‘ ê°€ì§€ 형ì‹ìœ¼ë¡œ 입력할 수 있습니다:\n"
+"(a) 16 진수 숫ìžë¡œ êµ¬ì„±ëœ ë¬¸ìžì—´, 여기서 ê°ê°ì˜ ë‘ ìžë¦¬ìˆ˜ëŠ” í•˜ë‚˜ì˜ ë°”ì´íŠ¸ë¥¼ 나타냄\n"
+"(b) 공백으로 êµ¬ë¶„ëœ 16 진수 숫ìžì˜ ë°”ì´íŠ¸ ëª©ë¡ (옵션으로 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"
+"Example: 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 (ì•Œ 수 ì—†ìŒ), 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
+#: ../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:217
+#, c-format
+msgid "Error converting IP6 address '%s' to text form"
+msgstr "IP6 주소 '%s'를 í…스트 형ì‹ìœ¼ë¡œ 변환하는 ë™ì•ˆ 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤ "
+
+#: ../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:131
+#: ../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:150
-#, c-format
+#: ../cli/src/utils.c:747
msgid "Option '--terse' requires specifying '--fields'"
msgstr "옵션 '--terse'는 '--fields' ì„¤ì •ì„ ìš”êµ¬í•©ë‹ˆë‹¤"
-#: ../cli/src/utils.c:154
+#: ../cli/src/utils.c:751
#, c-format
msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
msgstr "옵션 '--terse'는 '%s'ì´(ê°€) ì•„ë‹Œ 구체ì ì¸ '--fields' ê°’ì„ ìš”êµ¬í•©ë‹ˆë‹¤"
-#: ../cli/src/utils.c:333
-#, c-format
-msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus"
-msgstr "오류: org.freedesktop.DBusì˜ D-버스 오브ì íŠ¸ 프ë¡ì‹œë¥¼ 만들 수 없습니다"
-
-#: ../cli/src/utils.c:341
-#, c-format
-msgid "Error: NameHasOwner request failed: %s"
-msgstr "오류: NameHasOwner 요청 실패: %s"
-
-#: ../cli/src/utils.c:386
+#: ../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:395
+#: ../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
@@ -1417,116 +4670,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ì— 16진수 숫ìžê°€ ì•„ë‹Œ 문ìžê°€ 있습니다."
-#: ../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 "ì¸ì¦ì„œ í•´ë…ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤."
@@ -1545,97 +4769,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#12 복호기를 초기화할 수 없습니다: %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#12 파ì¼ì„ í•´ë…í•  수 없습니다: %s"
@@ -1655,265 +4869,734 @@ 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:2000
+#: ../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:2110
-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:2122
+#: ../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:2134
+#: ../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-utils.c:2153
+#: ../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 PEM file data."
-msgstr "PEM íŒŒì¼ ë°ì´í„°ë¥¼ 위한 메모리를 할당할 수 없습니다."
+msgid "'%s' option requires '%s' option to be set"
+msgstr "'%s' ì˜µì…˜ì„ ì‚¬ìš©í•˜ëŠ” 경우 '%s' ì˜µì…˜ì„ ì„¤ì •í•´ì•¼ 합니다 "
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1
-msgid "Allow control of network connections"
-msgstr "ë„¤íŠ¸ì›Œí¬ ì—°ê²° ì¡°ìž‘ 허용"
+#: ../libnm-util/nm-setting-bond.c:659
+#, c-format
+msgid "'%s' option is empty"
+msgstr "'%s' ì˜µì…˜ì´ ë¹„ì–´ìžˆìŠµë‹ˆë‹¤ "
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:2
-msgid "Connection sharing via a protected WiFi network"
-msgstr "ë³´í˜¸ëœ WiFi 네트워í¬ë¥¼ 통한 ì—°ê²° 공유"
+#: ../libnm-util/nm-setting-bond.c:671
+#, c-format
+msgid "'%s' is not a valid IPv4 address for '%s' option"
+msgstr "'%s'는 '%s' ì˜µì…˜ì˜ ì˜¬ë°”ë¥¸ IPv4 주소가 아닙니다 "
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:3
-msgid "Connection sharing via an open WiFi network"
-msgstr "열린 WiFi 네트워í¬ë¥¼ 통한 ì—°ê²° 공유"
+#: ../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ì´ì–´ì•¼ 함)"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
-msgid "Enable or disable WiFi devices"
-msgstr "WiFi 장치 사용 여부"
+#: ../libnm-util/nm-setting-bridge.c:251
+#, c-format
+msgid "value '%d' is out of range <%d-%d>"
+msgstr "ê°’ '%d'ì´ ë²”ìœ„ <%d-%d> ë°–ì— ìžˆìŠµë‹ˆë‹¤ "
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
-msgid "Enable or disable WiMAX mobile broadband devices"
-msgstr "와ì´ë§¥ìŠ¤ ëª¨ë°”ì¼ ê´‘ëŒ€ì—­ 장치 사용 여부"
+#: ../libnm-util/nm-setting-cdma.c:170
+msgid "property is empty'"
+msgstr "ì†ì„±ì´ 비어 있습니다 "
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
-msgid "Enable or disable mobile broadband devices"
-msgstr "ëª¨ë°”ì¼ ê´‘ëŒ€ì—­ 장치 사용 여부"
+#: ../libnm-util/nm-setting-connection.c:734
+#, c-format
+msgid "'%s' doesn't match the virtual interface name '%s'"
+msgstr "'%s'ì€ ê°€ìƒ ì¸í„°íŽ˜ì´ìŠ¤ ì´ë¦„ '%s'ê³¼ ì¼ì¹˜í•˜ì§€ 않습니다 "
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7
-msgid "Enable or disable system networking"
-msgstr "시스템 ë„¤íŠ¸ì›Œí¬ ì‚¬ìš© 여부"
+#: ../libnm-util/nm-setting-connection.c:780
+#, c-format
+msgid "requires presence of '%s' setting in the connection"
+msgstr "ì—°ê²°ì— '%s' ì„¤ì •ì´ í•„ìš”í•©ë‹ˆë‹¤ "
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8
-msgid "Modify network connections for all users"
-msgstr "모든 사용ìžì˜ ë„¤íŠ¸ì›Œí¬ ì—°ê²°ì„ ìˆ˜ì •í•©ë‹ˆë‹¤"
+#: ../libnm-util/nm-setting-connection.c:802
+msgid "IPv4 configuration is not allowed for slave"
+msgstr "IPv4 ì„¤ì •ì€ ìŠ¬ë ˆì´ë¸Œì— 허용ë˜ì§€ 않습니다 "
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:9
-msgid "Modify persistent system hostname"
-msgstr "ì˜êµ¬ì ì¸ 시스템 호스트 ì´ë¦„ì„ ìˆ˜ì •í•©ë‹ˆë‹¤"
+#: ../libnm-util/nm-setting-connection.c:815
+msgid "IPv6 configuration is not allowed for slave"
+msgstr "IPv6 ì„¤ì •ì€ ìŠ¬ë ˆì´ë¸Œì— 허용ë˜ì§€ 않습니다 "
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10
-msgid "Modify personal network connections"
-msgstr "ê°œì¸ ë„¤íŠ¸ì›Œí¬ ì—°ê²°ì„ ìˆ˜ì •í•©ë‹ˆë‹¤"
+#: ../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 "ì´ ì†ì„±ì„ 설정하려면 0ì´ ì•„ë‹Œ '%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' ì„¤ì •ì´ í•„ìš”í•©ë‹ˆë‹¤ "
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11
+#: ../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"
+msgstr "시스템 ë„¤íŠ¸ì›Œí¬ ì‚¬ìš© 여부"
+
+#: ../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.in.h:3
msgid ""
"Put NetworkManager to sleep or wake it up (should only be used by system "
"power management)"
-msgstr ""
-"ë„¤íŠ¸ì›Œí¬ ê´€ë¦¬ í”„ë¡œê·¸ëž¨ì„ ì¼ì‹œ 중지하거나 다시 시작합니다 (시스템 ì „ì› ê´€ë¦¬ì—"
-"서만 사용)"
+msgstr "ë„¤íŠ¸ì›Œí¬ ê´€ë¦¬ í”„ë¡œê·¸ëž¨ì„ ì¼ì‹œ 중지하거나 다시 시작합니다 (시스템 ì „ì› ê´€ë¦¬ì—서만 사용)"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12
-msgid "System policy prevents control of network connections"
-msgstr "시스템 ì •ì±…ì´ ë„¤íŠ¸ì›Œí¬ ì—°ê²° ì¡°ìž‘ì„ ê¸ˆì§€í•©ë‹ˆë‹¤"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:4
+msgid "System policy prevents putting NetworkManager to sleep or waking it up"
+msgstr "시스템 ì •ì±…ì´ ë„¤íŠ¸ì›Œí¬ ê´€ë¦¬ í”„ë¡œê·¸ëž¨ì˜ ì¼ì‹œ 중지나 다시 ì‹œìž‘ì„ ê¸ˆì§€í•©ë‹ˆë‹¤"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:13
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:5
+msgid "Enable or disable WiFi devices"
+msgstr "WiFi 장치 사용 여부"
+
+#: ../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:14
-msgid ""
-"System policy prevents enabling or disabling WiMAX mobile broadband devices"
-msgstr ""
-"시스템 ì •ì±…ì´ ì™€ì´ë§¥ìŠ¤ ëª¨ë°”ì¼ ê´‘ëŒ€ì—­ ìž¥ì¹˜ì˜ ì‚¬ìš© 여부 ì„¤ì •ì„ ê¸ˆì§€í•©ë‹ˆë‹¤"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:7
+msgid "Enable or disable mobile broadband devices"
+msgstr "ëª¨ë°”ì¼ ê´‘ëŒ€ì—­ 장치 사용 여부"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:15
+#: ../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:16
-msgid "System policy prevents enabling or disabling system networking"
-msgstr "시스템 ì •ì±…ì´ ì‹œìŠ¤í…œ 네트워í¬ì˜ 사용 여부 ì„¤ì •ì„ ê¸ˆì§€í•©ë‹ˆë‹¤"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:9
+msgid "Enable or disable WiMAX mobile broadband devices"
+msgstr "와ì´ë§¥ìŠ¤ ëª¨ë°”ì¼ ê´‘ëŒ€ì—­ 장치 사용 여부"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:17
-msgid "System policy prevents modification of network settings for all users"
-msgstr "시스템 ì •ì±…ì´ ëª¨ë“  사용ìžì˜ ë„¤íŠ¸ì›Œí¬ ì„¤ì •ì˜ ìˆ˜ì •ì„ ê¸ˆì§€í•©ë‹ˆë‹¤"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:10
+msgid ""
+"System policy prevents enabling or disabling WiMAX mobile broadband devices"
+msgstr "시스템 ì •ì±…ì´ ì™€ì´ë§¥ìŠ¤ ëª¨ë°”ì¼ ê´‘ëŒ€ì—­ ìž¥ì¹˜ì˜ ì‚¬ìš© 여부 ì„¤ì •ì„ ê¸ˆì§€í•©ë‹ˆë‹¤"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:11
+msgid "Allow control of network connections"
+msgstr "ë„¤íŠ¸ì›Œí¬ ì—°ê²° ì¡°ìž‘ 허용"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:12
+msgid "System policy prevents control of network connections"
+msgstr "시스템 ì •ì±…ì´ ë„¤íŠ¸ì›Œí¬ ì—°ê²° ì¡°ìž‘ì„ ê¸ˆì§€í•©ë‹ˆë‹¤"
+
+#: ../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:18
+#: ../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.in.h:15
+msgid "Connection sharing via an open WiFi network"
+msgstr "열린 WiFi 네트워í¬ë¥¼ 통한 ì—°ê²° 공유"
+
+#: ../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.in.h:17
+msgid "Modify personal network connections"
+msgstr "ê°œì¸ ë„¤íŠ¸ì›Œí¬ ì—°ê²°ì„ ìˆ˜ì •í•©ë‹ˆë‹¤"
+
+#: ../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.in.h:20
+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"
+msgstr "ì˜êµ¬ì ì¸ 시스템 호스트 ì´ë¦„ì„ ìˆ˜ì •í•©ë‹ˆë‹¤"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:22
msgid "System policy prevents modification of the persistent system hostname"
msgstr "시스템 ì •ì±…ì´ í˜¸ìŠ¤íŠ¸ ì´ë¦„ì˜ ë³€ê²½ì„ ê¸ˆì§€í•©ë‹ˆë‹¤"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:20
-msgid "System policy prevents putting NetworkManager to sleep or waking it up"
-msgstr ""
-"시스템 ì •ì±…ì´ ë„¤íŠ¸ì›Œí¬ ê´€ë¦¬ í”„ë¡œê·¸ëž¨ì˜ ì¼ì‹œ 중지나 다시 ì‹œìž‘ì„ ê¸ˆì§€í•©ë‹ˆë‹¤"
+#: ../src/main.c:154
+#, c-format
+msgid "Opening %s failed: %s\n"
+msgstr "%sì„ ì—¬ëŠ”ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤: %s\n"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:21
-msgid "System policy prevents sharing connections via a protected WiFi network"
-msgstr "시스템 ì •ì±…ì´ ë³´í˜¸ëœ WiFi 네트워í¬ë¥¼ 통한 ì—°ê²° 공유를 금지합니다"
+#: ../src/main.c:160
+#, c-format
+msgid "Writing to %s failed: %s\n"
+msgstr "%sì— ì“°ëŠ”ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤: %s\n"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:22
-msgid "System policy prevents sharing connections via an open WiFi network"
-msgstr "시스템 ì •ì±…ì´ ì—´ë¦° WiFi 네트워í¬ë¥¼ 통한 ì—°ê²° 공유를 금지합니다"
+#: ../src/main.c:165
+#, c-format
+msgid "Closing %s failed: %s\n"
+msgstr "%s를 ì¢…ë£Œí•˜ëŠ”ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤: %s\n"
-#: ../src/main.c:530
+#: ../src/main.c:208
+#, c-format
+msgid "NetworkManager is already running (pid %ld)\n"
+msgstr "ë„¤íŠ¸ì›Œí¬ ê´€ë¦¬ í”„ë¡œê·¸ëž¨ì´ ì´ë¯¸ 실행ë˜ê³  있습니다 (pid %ld)\n"
+
+#: ../src/main.c:329
+msgid "Print NetworkManager version and exit"
+msgstr "ë„¤íŠ¸ì›Œí¬ ê´€ë¦¬ìž ë²„ì „ 정보를 출력하고 종료합니다 "
+
+#: ../src/main.c:330
+msgid "Don't become a daemon"
+msgstr "ë°ëª¬ì´ ë˜ì§€ 않습니다 "
+
+#: ../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:337
+msgid "Specify the location of a PID file"
+msgstr "PID 파ì¼ì˜ 위치를 지정합니다 "
+
+#: ../src/main.c:337
+msgid "filename"
+msgstr "파ì¼ëª…"
+
+#: ../src/main.c:338
+msgid "State file location"
+msgstr "ìƒíƒœ íŒŒì¼ ìœ„ì¹˜ "
+
+#: ../src/main.c:338
+msgid "/path/to/state.file"
+msgstr "/path/to/state.file"
+
+#: ../src/main.c:364
+#, c-format
+msgid "GModules are not supported on your platform!\n"
+msgstr "GModules는 ê·€í•˜ì˜ í”Œëž«í¼ì—ì„œ 지ì›ë˜ì§€ 않습니다!\n"
+
+#: ../src/main.c:369
+#, c-format
+msgid "You must be root to run NetworkManager!\n"
+msgstr "root로 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는 모든 ë„¤íŠ¸ì›Œí¬ ì—°ê²°ì„ ëª¨ë‹ˆí„°í•˜ê³  사용할 최ìƒì˜ \n"
+"ì—°ê²°ì„ ìžë™ìœ¼ë¡œ ì„ íƒí•©ë‹ˆë‹¤. ë˜í•œ 사용ìžê°€ 무선 액세스 \n"
+"지ì ì„ 지정하여 ì»´í“¨í„°ì— ìžˆëŠ” 무선 ì¹´ë“œì— \n"
+"연결할 수 있게 합니다."
+
+#: ../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:611
+#: ../src/main.c:412
#, c-format
msgid "%s. Please use --help to see a list of valid options.\n"
msgstr "%s. 올바른 ì˜µì…˜ì˜ ëª©ë¡ì„ 보려면 --help ì˜µì…˜ì„ ì´ìš©í•˜ì‹­ì‹œì˜¤.\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:62
+#: ../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:482
+#, c-format
+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:495
+#, c-format
+msgid "State file %s parsing failed: (%d) %s\n"
+msgstr "ìƒíƒœ íŒŒì¼ %s 구문 분ì„ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤: (%d) %s\n"
+
+#: ../src/main.c:508
+#, c-format
+msgid "Could not daemonize: %s [error %u]\n"
+msgstr "ë°ëª¬í™”í•  수 없습니다: %s [error %u]\n"
+
+#: ../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:69
+#: ../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:284
+#: ../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:293
+#: ../src/dhcp-manager/nm-dhcp-manager.c:322
msgid "'dhclient' could be found."
msgstr "'dhclient'를 ì°¾ì„ ìˆ˜ 없습니다."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:303
+#: ../src/dhcp-manager/nm-dhcp-manager.c:332
msgid "'dhcpcd' could be found."
msgstr "'dhcpcd'를 ì°¾ì„ ìˆ˜ 있습니다."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:311
+#: ../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:369
+#: ../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:371
+#: ../src/dns-manager/nm-dns-manager.c:403
msgid "The nameservers listed below may not be recognized."
msgstr "아래 ì—´ê±°ëœ ë„¤ìž„ì„œë²„ë¥¼ ì¸ì‹í•˜ì§€ 못할 수 있습니다."
@@ -1922,98 +5605,962 @@ msgstr "아래 ì—´ê±°ëœ ë„¤ìž„ì„œë²„ë¥¼ ì¸ì‹í•˜ì§€ 못할 수 있습니다."
msgid "Unknown log level '%s'"
msgstr "알려지지 ì•Šì€ ë¡œê·¸ 수준 '%s'"
-#: ../src/logging/nm-logging.c:174
+#: ../src/logging/nm-logging.c:226
#, c-format
msgid "Unknown log domain '%s'"
msgstr "알려지지 ì•Šì€ ë¡œê·¸ ì˜ì—­ '%s'"
-#: ../src/modem-manager/nm-modem-cdma.c:296 ../src/nm-device-bt.c:355
+#: ../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 "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/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/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/modem-manager/nm-modem-gsm.c:499 ../src/nm-device-bt.c:351
+#: ../src/devices/nm-device-bond.c:146 ../tui/nm-editor-utils.c:204
#, c-format
-msgid "GSM connection %d"
-msgstr "GSM ì—°ê²° %d"
+msgid "Bond connection %d"
+msgstr "Bond ì—°ê²° %d"
+
+#: ../src/devices/nm-device-adsl.c:150
+#, c-format
+msgid "ADSL connection %d"
+msgstr "ADSL ì—°ê²° %d"
+
+#: ../src/devices/nm-device-bridge.c:143 ../tui/nm-editor-utils.c:214
+#, c-format
+msgid "Bridge connection %d"
+msgstr "브리지 연결 %d"
-#: ../src/nm-device-bt.c:326
+#: ../src/devices/nm-device-bt.c:308
#, c-format
msgid "PAN connection %d"
msgstr "PAN ì—°ê²° %d"
-#: ../src/nm-device-bt.c:359
+#: ../src/devices/nm-device-bt.c:341
#, c-format
msgid "DUN connection %d"
msgstr "DUN ì—°ê²° %d"
-#: ../src/nm-device-ethernet.c:1681
+#: ../src/devices/nm-device-ethernet.c:1254
#, c-format
msgid "PPPoE connection %d"
msgstr "PPPoE ì—°ê²° %d"
-#: ../src/nm-device-ethernet.c:1681 ../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-olpc-mesh.c:423
+#: ../src/devices/nm-device-infiniband.c:270 ../tui/nm-editor-utils.c:177
+#, c-format
+msgid "InfiniBand connection %d"
+msgstr "InfiniBand ì—°ê²° %d"
+
+#: ../src/devices/nm-device-olpc-mesh.c:242
#, c-format
msgid "Mesh %d"
msgstr "메시 %d"
-#: ../src/nm-manager.c:655
+#: ../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:3420 ../tui/nm-editor-utils.c:246
#, c-format
msgid "VPN connection %d"
msgstr "VPN ì—°ê²° %d"
-#: ../src/nm-netlink-monitor.c:100 ../src/nm-netlink-monitor.c:231
-#: ../src/nm-netlink-monitor.c:653
+#: ../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:214
-msgid "error occurred while waiting for data on socket"
-msgstr "소켓ì—ì„œ ë°ì´í„°ë¥¼ 기다리는 ë™ì•ˆ 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤"
-
-#: ../src/nm-netlink-monitor.c:254
+#: ../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:265
+#: ../src/nm-netlink-monitor.c:275
#, c-format
msgid "unable to enable netlink handle credential passing: %s"
msgstr "네트ë§í¬ í•¸ë“¤ì„ í†µí•œ 암호정보 ì „ë‹¬ì„ ì‚¬ìš©í•  수 없습니다: %s"
-#: ../src/nm-netlink-monitor.c:291 ../src/nm-netlink-monitor.c:353
+#: ../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:376
-#, c-format
-msgid "unable to allocate netlink link cache for monitoring link status: %s"
-msgstr "회선 ìƒíƒœë¥¼ ê°ì‹œí•˜ëŠ” 네트ë§í¬ ë§í¬ ìºì‹œë¥¼ 만들 수 없습니다: %s"
-
-#: ../src/nm-netlink-monitor.c:502
+#: ../src/nm-netlink-monitor.c:469
#, c-format
msgid "unable to join netlink group: %s"
msgstr "네트ë§í¬ ê·¸ë£¹ì— í•©ë¥˜í•  수 없습니다: %s"
-#: ../src/nm-netlink-monitor.c:629 ../src/nm-netlink-monitor.c:642
-#, 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:3512
-#: ../src/settings/plugins/ifnet/connection_parser.c:51
+#: ../src/settings/plugins/ifcfg-rh/reader.c:115
msgid "System"
msgstr "시스템"
-#~ msgid "Error: Obtaining active connection for '%s' failed."
-#~ msgstr "오류: '%s'ì— ëŒ€í•œ í™œì„±í™”ëœ ì—°ê²°ì„ ì–»ëŠ” ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤."
+#: ../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: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:104
+msgid ""
+"Time to wait for a connection, in seconds (without the option, default value "
+"is 30)"
+msgstr "ì—°ê²° 대기 시간, ì´ˆ 단위 (옵션 ì—†ìŒ, ê¸°ë³¸ê°’ì€ 30ìž„) "
+
+#: ../test/nm-online.c:105
+msgid "Exit immediately if NetworkManager is not running"
+msgstr "NetworkManagerê°€ 실행ë˜ê³  있지 ì•Šì„ ê²½ìš° 즉시 종료 "
+
+#: ../test/nm-online.c:106
+msgid "Don't print anything"
+msgstr "ì•„ë¬´ê²ƒë„ ì¶œë ¥í•˜ì§€ ì•ŠìŒ "
+
+#: ../test/nm-online.c:124
+msgid ""
+"Waits for NetworkManager to finish activating startup network connections."
+msgstr "NetworkManagerê°€ 시작 ë„¤íŠ¸ì›Œí¬ ì—°ê²°ì„ í™œì„±í™” 완료할 ë•Œ 까지 대기합니다."
+
+#: ../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 "OK"
+
+#: ../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 메시"
+
+#: ../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"
+
+#: ../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 "슬레ì´ë¸Œ "
+
+#: ../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 "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 (Spanning Tree Protocol) 활성화 "
+
+#: ../tui/nmt-page-bridge.c:122
+msgid "Forward delay"
+msgstr "전송 지연"
+
+#: ../tui/nmt-page-bridge.c:132
+msgid "Hello time"
+msgstr "Hello 타임"
+
+#: ../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] "%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 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비트 키(16진수 ë˜ëŠ” 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 ê¸°ì—…ìš©ì€ ì•„ì§ ì§€ì›í•˜ì§€ 않습니다...)"
+
+#: ../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 "메트릭"
+
+#: ../tui/nmt-route-table.c:256
+msgid "No custom routes are defined."
+msgstr "ì‚¬ìš©ìž ì§€ì • 경로가 ì •ì˜ë˜ì–´ 있지 않습니다."
+
+#: ../tui/nmt-secret-agent.c:223
+msgid "Identity"
+msgstr "ID"
+
+#: ../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"
+
+#: ../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 "ì¸ìžë¥¼ í•´ì„í•  수 없습니다"
-#~ msgid "Auto %s"
-#~ msgstr "ìžë™ %s"
+#: ../tui/nmtui.c:229
+msgid "NetworkManager is not running."
+msgstr "NetworkManagerê°€ 실행ë˜ê³  있지 않습니다."
diff --git a/po/ml.po b/po/ml.po
index 7a289a2a9..7ded0dd4f 100644
--- a/po/ml.po
+++ b/po/ml.po
@@ -3,1399 +3,3380 @@
# 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, 2013.
+# Ani Peter <apeter@redhat.com>, 2010, 2012, 2013, 2014.
# 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: 2013-03-14 15:25+0000\n"
-"PO-Revision-Date: 2013-03-25 18:21+0530\n"
+"POT-Creation-Date: 2014-01-23 17:13+0530\n"
+"PO-Revision-Date: 2014-02-03 02:08-0500\n"
"Last-Translator: Ani Peter <peter.ani@gmail.com>\n"
"Language-Team: Malayalam <discuss@lists.smc.org.in>\n"
"Language: ml\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"
+"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 "തെറàµà´±à´¾à´¯ 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 "കണകàµà´Ÿàµ ചെയàµà´¯àµà´¨àµà´¨àµ (à´à´ªà´¿ à´•àµà´°à´®àµ€à´•à´°à´£à´‚ ലഭàµà´¯à´®à´¾à´•àµà´•àµà´¨àµà´¨àµ)"
-#: ../cli/src/common.c:380
+#: ../cli/src/common.c:633
msgid "connecting (checking IP connectivity)"
msgstr "കണകàµà´Ÿàµ ചെയàµà´¯àµà´¨àµà´¨àµ (à´à´ªà´¿ കണകàµà´Ÿà´¿à´µà´¿à´±àµà´±à´¿ പരിശോധികàµà´•àµà´¨àµà´¨àµ)"
-#: ../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:466
+#: ../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: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:669
-#: ../cli/src/settings.c:697 ../cli/src/settings.c:759 ../cli/src/utils.c:533
-#: ../src/main.c:422 ../src/main.c:441
+#: ../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 ""
"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 "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 "നെറàµà´±àµâ€Œà´µà´°àµâ€à´•àµà´•àµà´®à´¾à´¨àµ‡à´œà´±à´¿à´¨àµà´±àµ† ഉറകàµà´•à´¤àµà´¤à´¿à´²àµ‡à´•àµà´•àµ നീങàµà´™à´¿"
-#: ../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 മോഡതàµà´¤à´¿à´²àµâ€ സിം കാരàµâ€à´¡àµ ഇലàµà´²"
-#: ../cli/src/common.c:537
+#: ../cli/src/common.c:790
msgid "GSM Modem's SIM PIN required"
msgstr "GSM മോഡതàµà´¤à´¿à´¨àµà´±àµ† സിം PIN ആവിശàµà´¯à´®à´¾à´£àµ"
-#: ../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
+#: ../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 ഇഥരàµâ€à´¨àµ†à´±àµà´±à´¿à´²àµâ€ à´ªàµà´°à´¶àµà´¨à´‚"
-#: ../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 "വൈ-ഫൈ നെറàµà´±àµâ€Œà´µà´°àµâ€à´•àµà´•àµ ലഭàµà´¯à´®à´¾à´¯à´¿à´²àµà´²"
-#: ../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:310 ../cli/src/devices.c:328
-#: ../cli/src/devices.c:450 ../cli/src/devices.c:494
+#: ../cli/src/common.c:817
+msgid "DCB or FCoE setup failed"
+msgstr "ഡിസിബി à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ 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: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/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:111 ../cli/src/devices.c:219
+#: ../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:123
+#: ../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:206 ../cli/src/devices.c:222
+#: ../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:118 ../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
+#: ../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 "IP"
-msgstr "IP"
-
-#. 1
-#: ../cli/src/connections.c:169
+#: ../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
+#: ../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 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"
+"ഉപയോഗിയàµà´•àµà´•àµ‡à´£àµà´Ÿ വിധം: nmcli കണകàµà´·à´¨àµâ€ { COMMAND | help }\n"
+"\n"
+"COMMAND := { show | up | down | add | modify | edit | delete | reload | load "
+"}\n"
+"\n"
+" à´•àµà´°à´®àµ€à´•à´°à´¿à´šàµà´šà´µ കാണിയàµà´•àµà´•àµà´• [[id | uuid | path] <ID>]\n"
+" സജീവമായവ കാണിയàµà´•àµà´•àµà´• [[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"
-" 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"
+" 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:256 ../cli/src/connections.c:442
+#: ../cli/src/connections.c:278
#, c-format
-msgid "Error: 'con list': %s"
-msgstr "പിശകàµ: '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 ""
+"ഉപയോഗിയàµà´•àµà´•àµ‡à´£àµà´Ÿ വിധം: 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"
+"ഒരൠപരാമീറàµà´±à´°àµâ€ ഇലàµà´²àµ†à´™àµà´•à´¿à´²àµâ€, à´Žà´²àµà´²à´¾ à´ªàµà´°àµŠà´«àµˆà´²àµà´•à´³àµà´‚ കാണാം. <ID> നലàµâ€à´•àµà´®àµà´ªàµ‹à´³àµâ€,\n"
+"കണകàµà´·à´¨àµâ€ വിവരങàµà´™à´³àµâ€ കാണിയàµà´•àµà´•àµà´¨àµà´¨àµ.\n"
+"\n"
-#: ../cli/src/connections.c:258 ../cli/src/connections.c:444
+#: ../cli/src/connections.c:297
#, c-format
-msgid "Error: 'con list': %s; allowed fields: %s"
-msgstr "പിശകàµ: 'con list': %s; à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´¨àµà´¨ ഫീളàµâ€à´¡àµà´•à´³àµâ€: %s"
+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"
+"à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ à´¡à´¿-ബസൠപാഥൠഉപയോഗിചàµà´šàµàµ തിരിചàµà´šà´±à´¿à´¯àµà´¨àµà´¨àµ.\n"
+"\n"
+"ARGUMENTS := ifname <ifname> [ap <BSSID>] [nsp <name>]\n"
+"\n"
+"ഒരൠകണകàµà´·à´¨àµà´®à´¾à´¯à´¿ ഡിവൈസൠസജീവമാകàµà´•àµà´•. നെറàµà´±àµâ€Œà´µà´°àµâ€à´•àµà´•àµà´®à´¾à´¨àµ‡à´œà´°àµâ€ à´¸àµà´µà´¯à´®à´¾à´¯à´¿\n"
+"കണകàµà´·à´¨àµâ€ à´ªàµà´°àµŠà´«àµˆà´²àµâ€ തെരഞàµà´žàµ†à´Ÿàµà´•àµà´•àµà´¨àµà´¨àµ.\n"
+"\n"
+"ifname - കണകàµà´·à´¨àµâ€ സജീവമാകàµà´•àµà´µà´¾à´¨àµà´³àµà´³ ഡിവൈസൠവàµà´¯à´¾à´•àµà´¤à´®à´¾à´•àµà´•àµà´¨àµà´¨àµ\n"
+"ap - കണകàµà´Ÿàµ ചെയàµà´¯àµ‡à´£àµà´Ÿ എപി à´µàµà´¯à´•àµà´¤à´®à´¾à´•àµà´•àµà´¨àµà´¨àµ (വൈഫൈയàµà´•àµà´•àµàµ മാതàµà´°à´‚)\n"
+"nsp - കണകàµà´Ÿàµ ചെയàµà´¯àµ‡à´£àµà´Ÿ à´Žà´¨àµâ€à´Žà´¸àµâ€Œà´ªà´¿ à´µàµà´¯à´•àµà´¤à´®à´¾à´•àµà´•àµà´¨àµà´¨àµ (വൈമാകàµà´¸à´¿à´¨àµàµ മാതàµà´°à´‚)\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"
+"à´¯àµà´¯àµà´à´¡à´¿ à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ à´¡à´¿-ബസൠപാഥൠഉപയോഗിചàµà´šà´¾à´£àµàµ.\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"
+"à´ªàµà´°àµŠà´«àµˆà´²à´¿à´¨àµà´±àµ† പേരàµàµ, à´¯àµà´¯àµà´à´¡à´¿ à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ à´¡à´¿-ബസൠപാഥൠഉപയോഗിചàµà´šàµàµ അതിനെ "
+"തിരിചàµà´šà´±à´¿à´¯àµà´¨àµà´¨àµ.\n"
+"\n"
-#: ../cli/src/connections.c:266
+#: ../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"
+"à´ªàµà´°àµŠà´«àµˆà´²à´¿à´¨àµà´±àµ† പേരàµàµ, à´¯àµà´¯àµà´à´¡à´¿ à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ à´¡à´¿-ബസൠപാഥൠഉപയോഗിചàµà´šàµàµ അതിനെ "
+"തിരിചàµà´šà´±à´¿à´¯àµà´¨àµà´¨àµ\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"
+"പേരàµàµ, à´¯àµà´¯àµà´à´¡à´¿ à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ à´¡à´¿-ബസൠപാഥിലൂടെ à´ªàµà´°àµŠà´«àµˆà´²àµâ€ നിഷàµà´•à´°àµâ€à´·à´¿à´¯àµà´•àµà´•àµà´¨àµà´¨àµ.\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:317
+#: ../cli/src/connections.c:589
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: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
+#: ../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: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
+#: ../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:393
-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
+#: ../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:419
+#: ../cli/src/connections.c:698
#, 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:710
#, c-format
-msgid "Unknown parameter: %s\n"
-msgstr "അപരിചിതമായ പരാമീറàµà´±à´°àµâ€: %s\n"
+msgid "Error: 'show configured': %s"
+msgstr "പിശകàµ: 'à´•àµà´°à´®àµ€à´•à´°à´¿à´šàµà´šà´¤àµàµ കാണിയàµà´•àµà´•àµà´•': %s"
-#: ../cli/src/connections.c:434
-#, c-format
-msgid "Error: no valid parameter specified."
-msgstr "പിശകàµ: ശരിയായ പരാമീറàµà´±à´°àµâ€ നലàµâ€à´•à´¿à´¯à´¿à´Ÿàµà´Ÿà´¿à´²àµà´²."
-
-#: ../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: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:462
+#: ../cli/src/connections.c:728
msgid "activating"
msgstr "സജീവമാകàµà´•àµà´¨àµà´¨àµ"
-#: ../cli/src/connections.c:464
+#: ../cli/src/connections.c:730
msgid "activated"
msgstr "സജീവമാകàµà´•à´¿à´¯à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ"
-#: ../cli/src/connections.c:468
-#| msgid "activated"
+#: ../cli/src/connections.c:734
msgid "deactivated"
msgstr "നിരàµâ€à´œàµà´œàµ€à´µà´®à´¾à´•àµà´•à´¿à´¯à´¿à´°à´¿à´¯àµà´•àµà´•àµà´¨àµà´¨àµ"
-#: ../cli/src/connections.c:480
+#: ../cli/src/connections.c:746
msgid "VPN connecting (prepare)"
msgstr "വിപിഎനàµâ€ കണകàµà´Ÿàµ ചെയàµà´¯àµà´¨àµà´¨àµ (തയàµà´¯à´¾à´±à´¾à´•àµà´•)"
-#: ../cli/src/connections.c:482
+#: ../cli/src/connections.c:748
msgid "VPN connecting (need authentication)"
msgstr "വിപിഎനàµâ€ കണകàµà´Ÿàµ ചെയàµà´¯àµà´¨àµà´¨àµ (ആധികാരികത ഉറപàµà´ªà´¾à´•àµà´•àµ‡à´£àµà´Ÿà´¤àµà´£àµà´Ÿàµàµ)"
-#: ../cli/src/connections.c:484
+#: ../cli/src/connections.c:750
msgid "VPN connecting"
msgstr "വിപിഎനàµâ€ കണകàµà´Ÿàµ ചെയàµà´¯àµà´¨àµà´¨àµ"
-#: ../cli/src/connections.c:486
+#: ../cli/src/connections.c:752
msgid "VPN connecting (getting IP configuration)"
msgstr "വിപിഎനàµâ€ കണകàµà´Ÿàµ ചെയàµà´¯àµà´¨àµà´¨àµ (à´à´ªà´¿ à´•àµà´°à´®àµ€à´•à´°à´£à´‚ ലഭàµà´¯à´®à´¾à´•àµà´•àµà´¨àµà´¨àµ)"
-#: ../cli/src/connections.c:488
+#: ../cli/src/connections.c:754
msgid "VPN connected"
msgstr "വിപിഎനàµâ€ കണകàµà´Ÿàµ ചെയàµà´¤à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ"
-#: ../cli/src/connections.c:490
+#: ../cli/src/connections.c:756
msgid "VPN connection failed"
msgstr "വിപിഎനàµâ€ കണകàµà´·à´¨àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ"
-#: ../cli/src/connections.c:492
+#: ../cli/src/connections.c:758
msgid "VPN disconnected"
msgstr "വിപിഎനàµâ€ വിഛേദിചàµà´šà´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ"
-#: ../cli/src/connections.c:548 ../cli/src/connections.c:558
+#: ../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:752 ../cli/src/connections.c:976
+#: ../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: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:762
+#: ../cli/src/connections.c:1020
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
-#, c-format
-msgid "Error: Can't find out if NetworkManager is running: %s."
-msgstr ""
-"പിശകàµ: നെറàµà´±àµâ€Œà´µà´°àµâ€à´•àµà´•àµà´®à´¾à´¨àµ‡à´œà´°àµâ€ à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¿à´•àµà´•àµà´¨àµà´¨àµà´£àµà´Ÿàµ‹ à´Žà´¨àµà´¨à´±à´¿à´¯à´¾à´¨àµâ€ "
-"സാധികàµà´•àµà´¨àµà´¨à´¿à´²àµà´²: %s."
-
-#: ../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: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:934
-msgid "Active connections"
-msgstr "സജീവമായ കണകàµà´·à´¨àµà´•à´³àµâ€"
+#: ../cli/src/connections.c:1203
+msgid "List of active connections"
+msgstr "സജീവമായ കണകàµà´·à´¨àµà´•à´³àµà´Ÿàµ† പടàµà´Ÿà´¿à´•"
-#: ../cli/src/connections.c:959
+#: ../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:964
+#: ../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:1071
+#: ../cli/src/connections.c:1344
#, c-format
msgid "no active connection on device '%s'"
msgstr "ഡിവൈസൠ'%s'-à´²àµâ€ സജീവമായ കണകàµà´·à´¨àµâ€ ലഭàµà´¯à´®à´²àµà´²"
-#: ../cli/src/connections.c:1079
+#: ../cli/src/connections.c:1352
msgid "no active connection or device"
msgstr "സജീവമായ കണകàµà´·à´¨àµâ€ à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ ഡിവൈസൠലഭàµà´¯à´®à´²àµà´²"
-#: ../cli/src/connections.c:1150
+#: ../cli/src/connections.c:1423
#, c-format
msgid "device '%s' not compatible with connection '%s'"
msgstr "'%s' ഡിവൈസൠ'%s' കണകàµà´·à´¨àµà´®à´¾à´¯à´¿ പൊരàµà´¤àµà´¤à´ªàµà´ªàµ†à´Ÿàµà´¨àµà´¨à´¿à´²àµà´²"
-#: ../cli/src/connections.c:1153
+#: ../cli/src/connections.c:1426
#, c-format
msgid "no device found for connection '%s'"
msgstr "ഡിവൈസൠ'%s'-à´²àµâ€ സജീവമായ കണകàµà´·à´¨àµâ€ ലഭàµà´¯à´®à´²àµà´²"
-#: ../cli/src/connections.c:1165
+#: ../cli/src/connections.c:1438
msgid "unknown reason"
msgstr "അപരിചിതമായ കാരണം"
-#: ../cli/src/connections.c:1167
+#: ../cli/src/connections.c:1440 ../cli/src/network-manager.c:288
msgid "none"
msgstr "à´’à´¨àµà´¨àµà´®à´¿à´²àµà´²"
-#: ../cli/src/connections.c:1169
+#: ../cli/src/connections.c:1442
msgid "the user was disconnected"
msgstr "ഉപയോകàµà´¤à´¾à´µàµàµ വിഛേദിചàµà´šà´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ"
-#: ../cli/src/connections.c:1171
+#: ../cli/src/connections.c:1444
msgid "the base network connection was interrupted"
msgstr "à´…à´Ÿà´¿à´¸àµà´¥à´¾à´¨ നെറàµà´±àµâ€Œà´µà´°àµâ€à´•àµà´•àµ കണകàµà´·à´¨àµâ€ തടസàµà´¸à´ªàµà´ªàµ†à´Ÿàµà´¤àµà´¤à´¿à´¯à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ"
-#: ../cli/src/connections.c:1173
+#: ../cli/src/connections.c:1446
msgid "the VPN service stopped unexpectedly"
msgstr "വിപിഎനàµâ€ സരàµâ€à´µàµ€à´¸àµ à´…à´ªàµà´°à´¤àµ€à´•àµà´·à´¿à´¤à´®à´¾à´¯à´¿ നിരàµâ€à´¤àµà´¤à´¿à´¯à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ"
-#: ../cli/src/connections.c:1175
+#: ../cli/src/connections.c:1448
msgid "the VPN service returned invalid configuration"
msgstr "വിപിഎനàµâ€ സരàµâ€à´µàµ€à´¸àµ തെറàµà´±à´¾à´¯ à´•àµà´°à´®àµ€à´•à´°à´£à´‚ തിരികെ നലàµâ€à´•à´¿à´¯à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ"
-#: ../cli/src/connections.c:1177
+#: ../cli/src/connections.c:1450
msgid "the connection attempt timed out"
msgstr "കണകàµà´·à´¨àµà´³àµà´³ à´¶àµà´°à´®à´‚ à´•à´´à´¿à´žàµà´žà´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ"
-#: ../cli/src/connections.c:1179
+#: ../cli/src/connections.c:1452
msgid "the VPN service did not start in time"
msgstr "വിപിഎനàµâ€ സരàµâ€à´µàµ€à´¸àµ സമയതàµà´¤à´¿à´¨àµàµ ആരംഭിചàµà´šà´¿à´²àµà´²"
-#: ../cli/src/connections.c:1181
+#: ../cli/src/connections.c:1454
msgid "the VPN service failed to start"
msgstr "വിപിഎനàµâ€ സരàµâ€à´µàµ€à´¸àµ ആരംഭികàµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ"
-#: ../cli/src/connections.c:1183
+#: ../cli/src/connections.c:1456
msgid "no valid VPN secrets"
msgstr "ശരിയായ വിപിഎനàµâ€ രഹസàµà´¯à´™àµà´™à´³àµâ€ ലഭàµà´¯à´®à´²àµà´²"
-#: ../cli/src/connections.c:1185
+#: ../cli/src/connections.c:1458
msgid "invalid VPN secrets"
msgstr "തെറàµà´±à´¾à´¯ വിപിഎനàµâ€ രഹസàµà´¯à´™àµà´™à´³àµâ€"
-#: ../cli/src/connections.c:1187
+#: ../cli/src/connections.c:1460
msgid "the connection was removed"
msgstr "കണകàµà´·à´¨àµâ€ നീകàµà´•à´‚ ചെയàµà´¤à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ"
-#: ../cli/src/connections.c:1204 ../cli/src/connections.c:1409
+#: ../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:1209 ../cli/src/connections.c:1310
+#: ../cli/src/connections.c:1482
#, c-format
msgid "Error: Connection activation failed."
msgstr "പിശകàµ: കണകàµà´·à´¨àµâ€ സജീവമാകàµà´•à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ."
-#: ../cli/src/connections.c:1234
+#: ../cli/src/connections.c:1507
#, c-format
msgid "VPN connection successfully activated (D-Bus active path: %s)\n"
msgstr ""
-"വിപിഎനàµâ€ കണകàµà´·à´¨àµâ€ വിജയകരമായി സജീവമാകàµà´•à´¿à´¯à´¿à´°à´¿à´¯àµà´•àµà´•àµà´¨àµà´¨àµ (à´¡à´¿-ബസൠസജീവ പാഥàµ: %s)\n"
+"വിപിഎനàµâ€ കണകàµà´·à´¨àµâ€ വിജയകരമായി സജീവമാകàµà´•à´¿à´¯à´¿à´°à´¿à´¯àµà´•àµà´•àµà´¨àµà´¨àµ (à´¡à´¿-ബസൠസജീവ പാഥàµ: "
+"%s)\n"
-#: ../cli/src/connections.c:1242
+#: ../cli/src/connections.c:1514
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "പിശകàµ: കണകàµà´·à´¨àµâ€ സജീവമാകàµà´•à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ: %s."
-#: ../cli/src/connections.c:1339 ../cli/src/devices.c:1125
+#: ../cli/src/connections.c:1532 ../cli/src/devices.c:1294
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "പിശകàµ: സമയപരിധി %d നിമിഷതàµà´¤à´¿à´¨àµà´±àµ† കാലാവധി à´•à´´à´¿à´žàµà´žà´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ."
-#: ../cli/src/connections.c:1400
+#: ../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:1494 ../cli/src/connections.c:1649
-#: ../cli/src/connections.c:1777
+#: ../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:1540 ../cli/src/devices.c:1210
-#: ../cli/src/devices.c:1756
+#: ../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 "കണകàµà´·à´¨àµâ€ (പേരàµàµ, à´¯àµà´¯àµà´à´¡à´¿, à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ വഴി): "
+
+#: ../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:1553 ../cli/src/connections.c:1666
-#: ../cli/src/connections.c:1757
+#: ../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:1586
+#: ../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:1588
+#: ../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 എംഎസി വിലാസമലàµà´²."
+
+#: ../cli/src/connections.c:2320 ../tui/nm-editor-utils.c:173
+#: ../tui/nm-ui-utils.c:347
+msgid "InfiniBand"
+msgstr "ഇനàµâ€à´«à´¿à´¬à´¾à´¨àµâ€à´¡àµ"
-#: ../cli/src/connections.c:1702
+#: ../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' ശരിയായൊരൠഎംടിയൠഅലàµà´²."
-#: ../cli/src/connections.c:1716
+#: ../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:1837
+#: ../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:1905
+#: ../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:1913
+#: ../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:1923
+#: ../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 "പിശകàµ: '%s': '%s' ശരിയലàµà´²; %s "
+
+#: ../cli/src/connections.c:2541
+#, c-format
+msgid "Error: '%s': '%s' is not valid; use <%u-%u>."
+msgstr "പിശകàµ: '%s': '%s' ശരിയലàµà´²; <%u-%u> ഉപയോഗിയàµà´•àµà´•àµà´•."
+
+#: ../cli/src/connections.c:2555
+msgid "ethernet"
+msgstr "ഇഥരàµâ€à´¨àµ†à´±àµà´±àµ"
+
+#: ../cli/src/connections.c:2555 ../tui/nm-editor-utils.c:164
+#: ../tui/nm-ui-utils.c:337
+msgid "Wi-Fi"
+msgstr "വൈ-ഫൈ"
+
+#: ../cli/src/connections.c:2558
+#, c-format
+msgid "There are 3 optional arguments for '%s' connection type.\n"
+msgstr "'%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 "നിങàµà´™à´³àµâ€à´•àµà´•àµàµ à´…à´µ നലàµâ€à´•à´£à´®àµ‹? (yes/no) [yes] "
+
+#: ../cli/src/connections.c:2567 ../cli/src/connections.c:2621
+#: ../cli/src/connections.c:2748 ../cli/src/connections.c:2849
+msgid "MTU [auto]: "
+msgstr "എംടിയൠ[à´“à´Ÿàµà´Ÿàµ‹]: "
+
+#: ../cli/src/connections.c:2578 ../cli/src/connections.c:2632
+#: ../cli/src/connections.c:2711 ../cli/src/connections.c:2759
+msgid "MAC [none]: "
+msgstr "എംഎസി [à´’à´¨àµà´¨àµà´®à´¿à´²àµà´²]:"
+
+#: ../cli/src/connections.c:2589
+msgid "Cloned MAC [none]: "
+msgstr "à´•àµà´²àµ‹à´£àµâ€à´šàµ†à´¯àµà´¤ എംഎസി [à´’à´¨àµà´¨àµà´®à´¿à´²àµà´²]: "
+
+#: ../cli/src/connections.c:2612
+#, c-format
+msgid "There are 5 optional arguments for 'InfiniBand' connection type.\n"
+msgstr "'InfiniBand' കണകàµà´·à´¨àµâ€ തരതàµà´¤à´¿à´¨àµàµ à´…à´žàµà´šàµàµ ആരàµâ€à´—àµà´¯àµà´®àµ†à´¨àµà´±àµà´•à´³àµà´£àµà´Ÿàµàµ.\n"
+
+#: ../cli/src/connections.c:2643
+msgid "Transport mode (datagram or connected) [datagram]: "
+msgstr "à´Ÿàµà´°à´¾à´¨àµâ€à´¸àµà´ªàµ‹à´°àµâ€à´Ÿàµà´Ÿàµ മോഡൠ(datagram or connected) [datagram]:"
+
+#: ../cli/src/connections.c:2656
+msgid "Parent interface [none]: "
+msgstr "പേരനàµà´±àµ ഇനàµà´±à´°àµâ€à´«àµ†à´¯à´¿à´¸àµ [à´’à´¨àµà´¨àµà´®à´¿à´²àµà´²]: "
+
+#: ../cli/src/connections.c:2667
+msgid "P_KEY [none]: "
+msgstr "P_KEY [à´’à´¨àµà´¨àµà´®à´¿à´²àµà´²]: "
+
+#: ../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' കണകàµà´·à´¨àµâ€ തരതàµà´¤à´¿à´¨àµàµ ഒരൠആരàµâ€à´—àµà´¯àµà´®àµ†à´¨àµà´±àµà´£àµà´Ÿàµàµ.\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 "രഹസàµà´¯à´µà´¾à´•àµà´•àµ [à´’à´¨àµà´¨àµà´®à´¿à´²àµà´²]:"
+
+#: ../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' കണകàµà´·à´¨àµâ€ തരതàµà´¤à´¿à´¨àµàµ à´°à´£àµà´Ÿàµàµ ആരàµâ€à´—àµà´¯àµà´®àµ†à´¨àµà´±àµà´•à´³àµà´£àµà´Ÿàµàµ.\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' കണകàµà´·à´¨àµâ€ തരതàµà´¤à´¿à´¨àµàµ ഒരൠആരàµâ€à´—àµà´¯àµà´®àµ†à´¨àµà´±àµ ആവശàµà´¯à´®àµà´£àµà´Ÿàµàµ.\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"
+
+#: ../cli/src/connections.c:2840
+#, c-format
+msgid "There are 4 optional arguments for 'VLAN' connection type.\n"
+msgstr "'VLAN' കണകàµà´·à´¨àµâ€ തരതàµà´¤à´¿à´¨àµàµ നാലàµàµ ആരàµâ€à´—àµà´¯àµà´®àµ†à´¨àµà´±àµà´•à´³àµà´£àµà´Ÿàµàµ.\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' കണകàµà´·à´¨àµâ€ തരതàµà´¤à´¿à´¨àµàµ ആരàµâ€à´—àµà´¯àµà´®àµ†à´¨àµà´±àµà´•à´³àµà´£àµà´Ÿàµàµ.\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 or 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"
-#. 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 "DEVICE"
+#: ../cli/src/connections.c:2959
+msgid "Bonding miimon [100]: "
+msgstr "ബോണàµà´Ÿà´¿à´™àµ miimon [100]: "
-#. 0
-#: ../cli/src/devices.c:84
-msgid "CAPABILITIES"
-msgstr "CAPABILITIES"
+#: ../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"
-#. 1
-#: ../cli/src/devices.c:85
-msgid "WIFI-PROPERTIES"
-msgstr "WIFI-PROPERTIES"
+#: ../cli/src/connections.c:2970
+msgid "Bonding downdelay [0]: "
+msgstr "ബോണàµà´Ÿà´¿à´™àµ downdelay [0]: "
-#. 2
-#. 5
-#: ../cli/src/devices.c:86 ../cli/src/devices.c:170
-msgid "AP"
-msgstr "AP"
+#: ../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"
-#. 3
-#: ../cli/src/devices.c:87
-msgid "WIRED-PROPERTIES"
-msgstr "WIRED-PROPERTIES"
+#: ../cli/src/connections.c:2981
+msgid "Bonding updelay [0]: "
+msgstr "ബോണàµà´Ÿà´¿à´™àµ updelay [0]: "
-#. 4
-#: ../cli/src/devices.c:88
-msgid "WIMAX-PROPERTIES"
-msgstr "WIMAX-PROPERTIES"
+#: ../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"
-#. 5
-#. 0
-#: ../cli/src/devices.c:89 ../cli/src/devices.c:217
-msgid "NSP"
-msgstr "NSP"
+#: ../cli/src/connections.c:2993
+msgid "Bonding arp-interval [0]: "
+msgstr "ബോണàµà´Ÿà´¿à´™àµ arp-interval [0]: "
-#. 6
-#: ../cli/src/devices.c:90
-msgid "IP4"
-msgstr "IP4"
+#: ../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"
-#. 7
-#: ../cli/src/devices.c:91
-msgid "DHCP4"
-msgstr "DHCP4"
+#: ../cli/src/connections.c:3004
+msgid "Bonding arp-ip-target [none]: "
+msgstr "ബോണàµà´Ÿà´¿à´™àµ arp-ip-target [à´’à´¨àµà´¨àµà´®à´¿à´²àµà´²]: "
-#. 8
-#: ../cli/src/devices.c:92
-msgid "IP6"
-msgstr "IP6"
+#: ../cli/src/connections.c:3023
+#, c-format
+msgid "There is 1 optional argument for '%s' connection type.\n"
+msgstr "'%s' കണകàµà´·à´¨àµâ€ തരതàµà´¤à´¿à´¨àµàµ ഒരൠആരàµâ€à´—àµà´¯àµà´®àµ†à´¨àµà´±àµà´£àµà´Ÿàµàµ.\n"
-#. 9
-#: ../cli/src/devices.c:93
-msgid "DHCP6"
-msgstr "DHCP6"
+#: ../cli/src/connections.c:3032
+msgid "Team JSON configuration [none]: "
+msgstr "JSON സംഘ à´•àµà´°à´®àµ€à´•à´°à´£à´‚ [à´’à´¨àµà´¨àµà´®à´¿à´²àµà´²]: "
-#. 10
-#: ../cli/src/devices.c:94
-msgid "BOND"
-msgstr "BOND"
+#: ../cli/src/connections.c:3051
+msgid "team"
+msgstr "team"
-#. 11
-#: ../cli/src/devices.c:95
-msgid "VLAN"
-msgstr "VLAN"
+#: ../cli/src/connections.c:3057
+msgid "team-slave"
+msgstr "team-slave"
-#. 12
-#: ../cli/src/devices.c:96
-#| msgid "CONNECTION"
-msgid "CONNECTIONS"
-msgstr "CONNECTIONS"
+#: ../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 "à´Žà´¸àµâ€Œà´Ÿà´¿à´ªà´¿ à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¨ സജàµà´œà´®à´¾à´•àµà´•à´£àµ‹ (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 "എംഎസി വിലാസതàµà´¤à´¿à´¨àµà´±àµ† à´à´œà´¿à´™àµ സമയം [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' കണകàµà´·à´¨àµâ€ തരതàµà´¤à´¿à´¨àµàµ മൂനàµà´¨àµàµ ആരàµâ€à´—àµà´¯àµà´®àµ†à´¨àµà´±àµà´•à´³àµà´£àµà´Ÿàµàµ.\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 "à´¬àµà´°à´¿à´¡àµà´œàµ പോരàµâ€à´Ÿàµà´Ÿàµ à´Žà´¸àµâ€Œà´Ÿà´¿à´ªà´¿ പാഥൠകോസàµà´±àµà´±àµ [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' കണകàµà´·à´¨àµâ€ തരതàµà´¤à´¿à´¨àµàµ ഒരൠആരàµâ€à´—àµà´¯àµà´®àµ†à´¨àµà´±àµà´£àµà´Ÿàµàµ.\n"
+
+#: ../cli/src/connections.c:3249
+#, c-format
+msgid "There are 2 optional arguments for 'OLPC Mesh' connection type.\n"
+msgstr "'OLPC Mesh' കണകàµà´·à´¨àµâ€ തരതàµà´¤à´¿à´¨àµàµ à´°à´£àµà´Ÿàµàµ ആരàµâ€à´—àµà´¯àµà´®àµ†à´¨àµà´±àµà´•à´³àµà´£àµà´Ÿàµàµ.\n"
+
+#: ../cli/src/connections.c:3258
+msgid "OLPC Mesh channel [1]: "
+msgstr "à´’à´Žà´²àµâ€à´ªà´¿à´¸à´¿ മെഷൠചാനലàµâ€ [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 "à´¡à´¿à´Žà´šàµâ€Œà´¸à´¿à´ªà´¿ എനികാസàµà´±àµà´±àµ എംഎസി [à´’à´¨àµà´¨àµà´®à´¿à´²àµà´²]:"
+
+#: ../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]) [à´’à´¨àµà´¨àµà´®à´¿à´²àµà´²]: "
+
+#: ../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 "നിങàµà´™à´³àµâ€à´•àµà´•àµàµ à´à´ªà´¿ വിലാസങàµà´™à´³àµâ€ ചേരàµâ€à´•àµà´•à´£àµ‹? (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 "à´Žà´¸àµà´Žà´¸àµà´à´¡à´¿:"
+
+#: ../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 à´Žà´¨àµâ€à´Žà´¸àµâ€Œà´ªà´¿ പേരàµàµ: "
+
+#: ../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 "പിശകàµ: 'ഉപയോകàµà´¤àµƒà´¨à´¾à´®à´‚' ആവശàµà´¯à´®àµà´£àµà´Ÿàµàµ."
+
+#: ../cli/src/connections.c:3768
+msgid "APN: "
+msgstr "എപിഎനàµâ€:"
+
+#: ../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 "വിഎലàµâ€à´Žà´Žà´¨àµâ€ പേരനàµà´±àµ ഡിവൈസൠഅലàµà´²àµ†à´™àµà´•à´¿à´²àµâ€ കണകàµà´·à´¨àµâ€ à´¯àµà´¯àµà´à´¡à´¿:"
+
+#: ../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' à´¯àµà´¯àµà´à´¡à´¿, ഇനàµà´±à´°àµâ€à´«àµ†à´¯à´¿à´¸àµ നാമം à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ എംഎസി à´…à´²àµà´²."
+
+#: ../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:112
+#: ../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' ശരിയായൊരൠയàµà´¯àµà´à´¡à´¿ à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ ഇനàµà´±à´°àµâ€à´«àµ†à´¯à´¿à´¸à´²àµà´²."
+
+#: ../cli/src/connections.c:4454
+#, c-format
+msgid "Error: 'hairpin': %s."
+msgstr "പിശകàµ: 'hairpin': %s."
+
+#: ../cli/src/connections.c:4506
+msgid "VPN type: "
+msgstr "വിപിഎനàµâ€ രീതി:"
+
+#: ../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>] :: 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> :: à´šà´¿à´Ÿàµà´Ÿà´ªàµà´ªàµ†à´Ÿàµà´¤àµà´¤àµà´¨àµà´¨à´¤à´¿à´¨àµàµ സജàµà´œàµ€à´•à´°à´£à´‚/"
+"വിശേഷത നലàµâ€à´•àµà´•\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-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> - എപി (വൈഫൈ) à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ à´Žà´¨àµâ€à´Žà´¸àµâ€Œà´ªà´¿ (വൈമാകàµà´¸àµ) (<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 [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 :: 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-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 "[ കണകàµà´·à´¨àµâ€ രീതി: %s | പേരàµàµ: %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 "പിശകàµ: കണകàµà´·à´¨àµâ€ സൂകàµà´·à´¿à´šàµà´šà´¿à´Ÿàµà´Ÿà´¿à´²àµà´². '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 "പിശകàµ: 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 ""
+">>> കമാനàµâ€à´¡àµ-ലൈനàµâ€ à´šà´¿à´Ÿàµà´Ÿà´ªàµà´ªàµ†à´Ÿàµà´¤àµà´¤àµà´µà´¾à´¨àµâ€ ലഭàµà´¯à´®à´²àµà´². വിശേഷത à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¨ "
+"സജàµà´œà´®à´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµàµ വരി à´šà´¿à´Ÿàµà´Ÿà´ªàµà´ªàµ†à´Ÿàµà´¤àµà´¤àµà´¨àµà´¨à´¤à´¿à´¨àµà´³àµà´³ ലൈബàµà´°à´±à´¿ ഇനàµâ€à´¸àµà´±àµà´±àµ‹à´³àµâ€ "
+"ചെയàµà´¯àµà´•. <<<\n"
+"പിനàµà´¤àµà´£à´¯àµà´•àµà´•àµà´¨àµà´¨ ലൈബàµà´°à´±à´¿à´•à´³àµâ€:\n"
+" - ജിഎനàµâ€à´¯àµ റീഡàµâ€Œà´²àµˆà´¨àµâ€ (libreadline) http://cnswww.cns.cwru.edu/php/chet/"
+"readline/rltop.html\n"
+" - നെറàµà´±àµà´¬à´¿à´Žà´¸àµà´¡à´¿ à´Žà´¡à´¿à´±àµà´±àµâ€Œà´²àµˆà´¨àµâ€ (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 "പിശകàµ: കണകàµà´·à´¨àµâ€ à´à´¡à´¿ ലഭàµà´¯à´®à´²àµà´²."
+
+#: ../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:113
+#: ../cli/src/devices.c:90
msgid "PRODUCT"
msgstr "PRODUCT"
-#. 4
-#: ../cli/src/devices.c:114
+#: ../cli/src/devices.c:91
msgid "DRIVER"
msgstr "DRIVER"
-#. 5
-#: ../cli/src/devices.c:115
+#: ../cli/src/devices.c:92
msgid "DRIVER-VERSION"
msgstr "DRIVER-VERSION"
-#. 6
-#: ../cli/src/devices.c:116
+#: ../cli/src/devices.c:93
msgid "FIRMWARE-VERSION"
msgstr "FIRMWARE-VERSION"
-#. 7
-#: ../cli/src/devices.c:117
+#: ../cli/src/devices.c:94
msgid "HWADDR"
msgstr "HWADDR"
-#. 9
-#: ../cli/src/devices.c:119
+#: ../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:120
+#: ../cli/src/devices.c:98
msgid "UDI"
msgstr "UDI"
-#. 11
-#: ../cli/src/devices.c:121
+#: ../cli/src/devices.c:99
msgid "IP-IFACE"
msgstr "IP-IFACE"
-#. 12
-#: ../cli/src/devices.c:122
+#: ../cli/src/devices.c:100
msgid "NM-MANAGED"
msgstr "NM-MANAGED"
-#. 14
-#: ../cli/src/devices.c:124
+#: ../cli/src/devices.c:102
msgid "FIRMWARE-MISSING"
msgstr "FIRMWARE-MISSING"
-#. 15
-#: ../cli/src/devices.c:125
-msgid "CONNECTION"
-msgstr "CONNECTION"
-
-#. 0
-#: ../cli/src/devices.c:135
+#: ../cli/src/devices.c:115
msgid "AVAILABLE-CONNECTION-PATHS"
msgstr "AVAILABLE-CONNECTION-PATHS"
-#. 1
-#: ../cli/src/devices.c:136
-#| msgid "CONNECTION"
+#: ../cli/src/devices.c:116
msgid "AVAILABLE-CONNECTIONS"
msgstr "AVAILABLE-CONNECTIONS"
-#. 0
-#: ../cli/src/devices.c:145
+#: ../cli/src/devices.c:125
msgid "CARRIER-DETECT"
msgstr "CARRIER-DETECT"
-#. 1
-#: ../cli/src/devices.c:146
+#: ../cli/src/devices.c:126
msgid "SPEED"
msgstr "SPEED"
-#. 0
-#: ../cli/src/devices.c:155
+#: ../cli/src/devices.c:135
msgid "CARRIER"
msgstr "CARRIER"
-#. 0
-#: ../cli/src/devices.c:165
+#: ../cli/src/devices.c:144 ../cli/src/devices.c:563
msgid "WEP"
msgstr "WEP"
-#. 1
-#: ../cli/src/devices.c:166
+#: ../cli/src/devices.c:145
msgid "WPA"
msgstr "WPA"
-#. 2
-#: ../cli/src/devices.c:167
+#: ../cli/src/devices.c:146 ../cli/src/devices.c:571
msgid "WPA2"
msgstr "WPA2"
-#. 3
-#: ../cli/src/devices.c:168
+#: ../cli/src/devices.c:147
msgid "TKIP"
msgstr "TKIP"
-#. 4
-#: ../cli/src/devices.c:169
+#: ../cli/src/devices.c:148
msgid "CCMP"
msgstr "CCMP"
-#. 6
-#: ../cli/src/devices.c:171
+#: ../cli/src/devices.c:149 ../cli/src/devices.c:239
+msgid "AP"
+msgstr "AP"
+
+#: ../cli/src/devices.c:150
msgid "ADHOC"
msgstr "ADHOC"
-#. 0
-#: ../cli/src/devices.c:181
+#: ../cli/src/devices.c:159
msgid "CTR-FREQ"
msgstr "CTR-FREQ"
-#. 1
-#: ../cli/src/devices.c:182
+#: ../cli/src/devices.c:160
msgid "RSSI"
msgstr "RSSI"
-#. 2
-#: ../cli/src/devices.c:183
+#: ../cli/src/devices.c:161
msgid "CINR"
msgstr "CINR"
-#. 3
-#: ../cli/src/devices.c:184
+#: ../cli/src/devices.c:162
msgid "TX-POW"
msgstr "TX-POW"
-#. 4
-#: ../cli/src/devices.c:185
+#: ../cli/src/devices.c:163
msgid "BSID"
msgstr "BSID"
-#. 0
-#: ../cli/src/devices.c:195
+#: ../cli/src/devices.c:172 ../tui/nmt-page-wifi.c:221
msgid "SSID"
msgstr "SSID"
-#. 1
-#: ../cli/src/devices.c:196
+#: ../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:197
+#: ../cli/src/devices.c:175
msgid "MODE"
msgstr "MODE"
-#. 3
-#: ../cli/src/devices.c:198
+#: ../cli/src/devices.c:176
+msgid "CHAN"
+msgstr "CHAN"
+
+#: ../cli/src/devices.c:177
msgid "FREQ"
msgstr "FREQ"
-#. 4
-#: ../cli/src/devices.c:199
+#: ../cli/src/devices.c:178
msgid "RATE"
msgstr "RATE"
-#. 5
-#. 1
-#: ../cli/src/devices.c:200 ../cli/src/devices.c:218
+#: ../cli/src/devices.c:179 ../cli/src/devices.c:199
msgid "SIGNAL"
msgstr "SIGNAL"
-#. 6
-#: ../cli/src/devices.c:201
+#: ../cli/src/devices.c:180
+msgid "BARS"
+msgstr "BARS"
+
+#: ../cli/src/devices.c:181
msgid "SECURITY"
msgstr "SECURITY"
-#. 7
-#: ../cli/src/devices.c:202
+#: ../cli/src/devices.c:182
msgid "WPA-FLAGS"
msgstr "WPA-FLAGS"
-#. 8
-#: ../cli/src/devices.c:203
+#: ../cli/src/devices.c:183
msgid "RSN-FLAGS"
msgstr "RSN-FLAGS"
-#. 10
-#. 4
-#: ../cli/src/devices.c:205 ../cli/src/devices.c:221
+#: ../cli/src/devices.c:185 ../cli/src/devices.c:202
msgid "ACTIVE"
msgstr "ACTIVE"
-#. 0
-#: ../cli/src/devices.c:233
+#: ../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:242
+#: ../cli/src/devices.c:222
msgid "ID"
msgstr "ID"
-#: ../cli/src/devices.c:258
+#: ../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 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' ആണàµàµ. ഇതിനരàµâ€à´¤àµà´¥à´‚, is '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:361
+#: ../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"
+"à´ªàµà´°à´¤àµà´¯àµ‡à´• ഇനàµà´±à´°àµâ€à´«àµ†à´¯à´¿à´¸à´¿à´¨àµà´³àµà´³ എപി à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ ബിഎസàµà´Žà´¸àµà´à´¡à´¿à´•à´³àµà´³àµà´³ എപി "
+"ലഭàµà´¯à´®à´¾à´•àµà´•àµà´¨àµà´¨àµ.\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"
+"à´Žà´¸àµà´Žà´¸àµà´à´¡à´¿ à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ ബിഎസàµà´Žà´¸àµà´à´¡à´¿ നലàµâ€à´•àµà´¨àµà´¨àµŠà´°àµ വൈഫൈ നെറàµà´±àµâ€Œà´µà´°àµâ€à´•àµà´•à´¿à´²àµ‡à´•àµà´•àµàµ "
+"കണകàµà´Ÿàµ ചെയàµà´¯àµà´¨àµà´¨àµ. à´ˆ കമാനàµâ€à´¡àµ\n"
+"ഒരൠപàµà´¤à´¿à´¯ കണകàµà´·à´¨àµâ€ തയàµà´¯à´¾à´±à´¾à´•àµà´•à´¿ à´…à´¤àµàµ ഡിവൈസിലàµâ€ സജീവമാകàµà´•àµà´¨àµà´¨àµ. ജിയàµà´ "
+"à´•àµà´²à´¯à´¨àµà´±à´¿à´²àµâ€ ഒരൠഎസàµà´Žà´¸àµà´à´¡à´¿ à´•àµà´²à´¿à´•àµà´•àµ\n"
+"ചെയàµà´¯àµà´¨àµà´¨à´¤à´¿à´¨àµà´³àµà´³à´¤à´¾à´£àµàµ à´ˆ കമാനàµâ€à´¡àµ ലൈനàµâ€. ഇതàµàµ à´Žà´ªàµà´ªàµ‹à´´àµà´‚ ഒരൠപàµà´¤à´¿à´¯ കണകàµà´·à´¨àµâ€ "
+"തയàµà´¯à´¾à´±à´¾à´•àµà´•àµà´¨àµà´¨àµ. ഇങàµà´™à´¨àµ†\n"
+"à´ªàµà´¤à´¿à´¯ വൈഫൈ നെറàµà´±àµâ€Œà´µà´°àµâ€à´•àµà´•àµà´•à´³àµà´®à´¾à´¯à´¿ കണകàµà´Ÿàµ ചെയàµà´¯àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´¾à´•àµà´¨àµà´¨àµ. ഒരൠ"
+"കണകàµà´·à´¨àµâ€ നിലവിലàµà´£àµà´Ÿàµ†à´™àµà´•à´¿à´²àµâ€, \n"
+"നിലവിലàµà´³àµà´³ à´ªàµà´°àµŠà´«àµˆà´²àµâ€ ലഭàµà´¯à´®à´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¾à´£àµàµ ഉചിതം : nmcli con up id <name>. "
+"à´“à´ªàµà´ªà´£àµâ€ à´¡à´¬àµà´²àµà´¯àµ‚ഇപി,\n"
+"à´¡à´¬àµà´²àµà´¯àµ‚പിഎ-പിഎസàµâ€Œà´•àµ† നെറàµà´±àµâ€Œà´µà´°àµâ€à´•àµà´•àµà´•à´³àµâ€ മാതàµà´°à´‚ പിനàµà´¤àµà´£à´¯àµà´•àµà´•àµà´¨àµà´¨àµ.\n"
+"à´¡à´¿à´Žà´šàµâ€Œà´¸à´¿à´ªà´¿ à´®àµà´–േനയàµà´‚ à´à´ªà´¿ à´•àµà´°à´®àµ€à´•à´°à´£à´‚ ലഭàµà´¯à´®à´¾à´•àµà´•àµà´•à´¯àµà´‚\n"
+"ചെയàµà´¯àµà´¨àµà´¨àµ.\n"
+"\n"
+"ARGUMENTS := rescan [[ifname] <ifname>]\n"
+"\n"
+"ലഭàµà´¯à´®à´¾à´¯ ആകàµà´¸à´¸àµà´¸àµ പോയിനàµà´±àµà´•à´³àµâ€ വീണàµà´Ÿàµà´‚ പരിശോധിയàµà´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµàµ "
+"നെറàµà´±àµâ€Œà´µà´°àµâ€à´•àµà´•àµà´®à´¾à´¨àµ‡à´œà´±à´¿à´¨àµ‹à´Ÿàµàµ ആവശàµà´¯à´ªàµà´ªàµ†à´Ÿàµà´¨àµà´¨àµ.\n"
+"നെറàµà´±àµâ€Œà´°àµâ€à´•àµà´•àµà´®à´¾à´¨àµ‡à´œà´°àµâ€ à´Žà´ªàµà´ªàµ‹à´´àµà´‚ വൈഫൈ നെറàµà´±àµâ€à´µà´°àµâ€à´•àµà´•àµà´•à´³àµâ€ പരിശോധിയàµà´•àµà´•àµà´¨àµà´¨àµ, "
+"à´Žà´¨àµà´¨à´¿à´°àµà´¨àµà´¨à´¾à´²àµà´‚\n"
+"à´¸àµà´µà´¯à´®à´¾à´¯à´¿ ഇടയàµà´•àµà´•àµàµ പരിശോധിയàµà´•àµà´•àµà´¨àµà´¨à´¤àµàµ നലàµà´²à´¾à´¤à´¾à´£àµàµ. à´ˆ കമാനàµâ€à´¡àµ എപിà´à´•à´³àµâ€\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"
+"വൈമാകàµà´¸àµ ഡിവൈസàµà´•à´³à´¿à´²àµâ€ à´ªàµà´°à´•àµà´°à´¿à´¯ നടപàµà´ªà´¿à´²à´¾à´•àµà´•àµà´¨àµà´¨àµ.\n"
+"\n"
+"ARGUMENTS := [list [ifname <ifname>] [nsp <name>]]\n"
+"\n"
+"à´Žà´²àµà´²à´¾ വൈമാകàµà´¸àµ à´Žà´¨àµâ€à´Žà´¸àµâ€Œà´ªà´¿à´•à´³àµà´‚ ലഭàµà´¯à´®à´¾à´•àµà´•àµà´•. 'ifname' , 'nsp' à´à´šàµà´›à´¿à´•à´™àµà´™à´³àµâ€ ഒരൠ"
+"à´ªàµà´°à´¤àµà´¯àµ‡à´• ഇനàµà´±à´°àµâ€à´«àµ†à´¯à´¿à´¸àµ\n"
+"à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ à´Žà´¨àµâ€à´Žà´¸àµâ€Œà´ªà´¿à´¯àµà´•àµà´•àµà´³àµà´³ നെറàµà´±àµâ€Œà´µà´°àµâ€à´•àµà´•àµà´•à´³àµâ€ ലഭàµà´¯à´®à´¾à´•àµà´•àµà´¨àµà´¨àµ.\n"
+"\n"
+
+#: ../cli/src/devices.c:480
msgid "(none)"
msgstr "(à´’à´¨àµà´¨àµà´®à´¿à´²àµà´²)"
-#: ../cli/src/devices.c:417
+#: ../cli/src/devices.c:547
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:418
+#: ../cli/src/devices.c:548
#, c-format
msgid "%u Mbit/s"
msgstr "%u Mbit/s"
-#: ../cli/src/devices.c:427
-msgid "Encrypted: "
-msgstr "à´Žà´¨àµâ€à´•àµà´°à´¿à´ªàµà´±àµà´±àµ ചെയàµà´¤à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ: "
+#: ../cli/src/devices.c:567
+msgid "WPA1"
+msgstr "WPA1"
-#: ../cli/src/devices.c:432
-msgid "WEP "
-msgstr "WEP "
+#: ../cli/src/devices.c:576
+msgid "802.1X"
+msgstr "802.1X"
-#: ../cli/src/devices.c:434
-msgid "WPA "
-msgstr "WPA "
-
-#: ../cli/src/devices.c:436
-msgid "WPA2 "
-msgstr "WPA2 "
-
-#: ../cli/src/devices.c:439
-msgid "Enterprise "
-msgstr "à´Žà´¨àµà´±à´°àµâ€à´ªàµà´°àµˆà´¸àµ "
-
-#: ../cli/src/devices.c:448
+#: ../cli/src/devices.c:592
msgid "Ad-Hoc"
msgstr "à´…à´¡àµ-ഹോകàµ"
-#: ../cli/src/devices.c:449
-msgid "Infrastructure"
-msgstr "ഇനàµâ€à´«àµà´°à´¾à´¸àµà´Ÿàµà´°à´•àµà´šà´°àµâ€"
+#: ../cli/src/devices.c:593
+msgid "Infra"
+msgstr "ഇനàµâ€à´«àµà´°à´¾"
-#: ../cli/src/devices.c:485
+#: ../cli/src/devices.c:625
msgid "Home"
msgstr "പാരàµâ€à´ªàµà´ªà´¿à´Ÿà´‚"
-#: ../cli/src/devices.c:488
+#: ../cli/src/devices.c:628
msgid "Partner"
msgstr "പങàµà´•à´¾à´³à´¿"
-#: ../cli/src/devices.c:491
+#: ../cli/src/devices.c:631
msgid "Roaming"
msgstr "റോമിങàµ"
-#: ../cli/src/devices.c:563
-#, c-format
-msgid "Error: 'dev list': %s"
-msgstr "പിശകàµ: 'dev list': %s"
-
-#: ../cli/src/devices.c:565
-#, c-format
-msgid "Error: 'dev list': %s; allowed fields: %s"
-msgstr "പിശകàµ: 'dev list': %s, à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´¨àµà´¨ ഫീളàµâ€à´¡àµà´•à´³àµâ€: %s"
-
-#: ../cli/src/devices.c:574
+#: ../cli/src/devices.c:725
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: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:633
-msgid "not connected"
-msgstr "കണകàµà´Ÿàµ ചെയàµà´¤à´¿à´Ÿàµà´Ÿà´¿à´²àµà´²"
-
-#: ../cli/src/devices.c:660
+#: ../cli/src/devices.c:827
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
-#. Print header
-#. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:736
+#: ../cli/src/devices.c:913
msgid "on"
msgstr "à´“à´£àµâ€"
-#: ../cli/src/devices.c:736
+#: ../cli/src/devices.c:913
msgid "off"
msgstr "à´“à´«àµ"
-#: ../cli/src/devices.c:993
-#, c-format
-msgid "Error: 'dev status': %s"
-msgstr "പിശകàµ: 'dev status': %s"
-
-#: ../cli/src/devices.c:995
+#: ../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:1018
+#: ../cli/src/devices.c:1206
msgid "Status of devices"
msgstr "ഡിവൈസàµà´•à´³àµà´Ÿàµ† അവസàµà´¥"
-#: ../cli/src/devices.c:1049
+#: ../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:1090 ../cli/src/devices.c:1255
-#: ../cli/src/devices.c:1396 ../cli/src/devices.c:2043
+#: ../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:1113
+#: ../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:1148
+#: ../cli/src/devices.c:1471
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "പിശകàµ: ഡിവൈസൠ'%s' (%s) വിഛേദികàµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ: %s"
-#: ../cli/src/devices.c:1161
+#: ../cli/src/devices.c:1485
#, c-format
msgid "Device '%s' has been disconnected.\n"
msgstr "ഡിവൈസൠ'%s' വിജയകരമായി വിഛേദിചàµà´šà´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ.\n"
-#: ../cli/src/devices.c:1224
-#, c-format
-msgid "Error: iface has to be specified."
-msgstr "പിശകàµ: iface നലàµâ€à´•àµ‡à´£àµà´Ÿà´¤àµà´£àµà´Ÿàµàµ."
-
-#: ../cli/src/devices.c:1354
-#, 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:1356
+#: ../cli/src/devices.c:1666
#, c-format
-msgid "Error: 'dev wifi': %s; allowed fields: %s"
-msgstr "പിശകàµ: 'dev wifi': %s; à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´¨àµà´¨ ഫീളàµâ€à´¡àµà´•à´³àµâ€: %s"
-
-#: ../cli/src/devices.c:1379
-msgid "WiFi scan list"
-msgstr "WiFi പരിശോധന പടàµà´Ÿà´¿à´•"
+msgid "Error: 'device wifi': %s"
+msgstr "പിശകàµ: 'device wifi': %s"
-#: ../cli/src/devices.c:1416 ../cli/src/devices.c:1470
+#: ../cli/src/devices.c:1719 ../cli/src/devices.c:1788
#, c-format
msgid "Error: Access point with bssid '%s' not found."
msgstr "പിശകàµ: '%s' à´Žà´¨àµà´¨àµ bssid ഉളàµà´³ ആകàµà´¸àµ†à´¸àµà´¸àµ പോയിനàµà´±àµ ലഭàµà´¯à´®à´²àµà´²."
-#: ../cli/src/devices.c:1433
+#: ../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' ഡിവൈസൠഒരൠവൈഫൈ ഡിവൈസലàµà´²."
-#: ../cli/src/devices.c:1501 ../cli/src/devices.c:1547
+#: ../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:1506
+#: ../cli/src/devices.c:1829
#, c-format
msgid "Error: Connection activation failed: (%d) %s."
msgstr "പിശകàµ: കണകàµà´·à´¨àµâ€ സജീവമാകàµà´•à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ: (%d) %s."
-#: ../cli/src/devices.c:1531
+#: ../cli/src/devices.c:1854
#, c-format
msgid "Error: Failed to add/activate new connection: (%d) %s"
msgstr "പിശകàµ: à´•àµà´°à´®àµ€à´•à´°à´£à´™àµà´™à´³àµâ€ വായികàµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ: (%d) %s"
-#: ../cli/src/devices.c:1539
+#: ../cli/src/devices.c:1862
#, c-format
msgid "Error: Failed to add/activate new connection: Unknown error"
msgstr ""
"പിശകàµ: à´ªàµà´¤à´¿à´¯ കണകàµà´·à´¨àµâ€ ചേരàµâ€à´•àµà´•àµà´µà´¾à´¨àµâ€/സജീവമാകàµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയം : അപരിചിതമായ "
"പിശകàµ"
-#: ../cli/src/devices.c:1683
+#: ../cli/src/devices.c:2013
+msgid "SSID or BSSID: "
+msgstr "à´Žà´¸àµà´Žà´¸àµà´à´¡à´¿ à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ ബിഎസàµà´Žà´¸àµà´à´¡à´¿:"
+
+#: ../cli/src/devices.c:2018
#, c-format
msgid "Error: SSID or BSSID are missing."
msgstr "പിശകàµ: SSID à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ BSSID ലഭàµà´¯à´®à´²àµà´²."
-#: ../cli/src/devices.c:1706
+#: ../cli/src/devices.c:2042
#, c-format
msgid "Error: bssid argument value '%s' is not a valid BSSID."
-msgstr "പിശകàµ: bssid ആരàµâ€à´—àµà´¯àµà´®àµ†à´¨àµà´±àµ മൂലàµà´²àµà´¯à´‚ '%s' ശരിയായൊരൠBSSID മൂലàµà´²àµà´¯à´®à´²àµà´²."
+msgstr ""
+"പിശകàµ: bssid ആരàµâ€à´—àµà´¯àµà´®àµ†à´¨àµà´±àµ മൂലàµà´²àµà´¯à´‚ '%s' ശരിയായൊരൠBSSID മൂലàµà´²àµà´¯à´®à´²àµà´²."
-#: ../cli/src/devices.c:1730
+#: ../cli/src/devices.c:2066
#, c-format
msgid ""
"Error: wep-key-type argument value '%s' is invalid, use 'key' or 'phrase'."
@@ -1403,78 +3384,77 @@ msgstr ""
"പിശകàµ: wep-key-type ആരàµâ€à´—àµà´¯àµà´®àµ†à´¨àµà´±àµ മൂലàµà´²àµà´¯à´‚ '%s' അസാധàµà´µà´¾à´£àµàµ, 'key' "
"à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ 'phrase'."
-#: ../cli/src/devices.c:1770
+#: ../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:1776
+#: ../cli/src/devices.c:2107
#, 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' ഡിവൈസൠഒരൠവൈഫൈ ഡിവൈസലàµà´²."
-
-#: ../cli/src/devices.c:1807
+#: ../cli/src/devices.c:2133 ../cli/src/devices.c:2295
#, c-format
msgid "Error: No Wi-Fi device found."
msgstr "പിശകàµ: വൈഫൈ ഡിവൈസൠലഭàµà´¯à´®à´¾à´¯à´¿à´²àµà´²."
-#: ../cli/src/devices.c:1825
+#: ../cli/src/devices.c:2151
#, c-format
msgid "Error: No network with SSID '%s' found."
msgstr "പിശകàµ: SSID '%s' ഉളàµà´³ നെറàµà´±àµâ€Œà´µà´°àµâ€à´•àµà´•àµ ലഭàµà´¯à´®à´¾à´¯à´¿à´²àµà´²."
-#: ../cli/src/devices.c:1827
+#: ../cli/src/devices.c:2153
#, c-format
msgid "Error: No access point with BSSID '%s' found."
msgstr "പിശകàµ: '%s' à´Žà´¨àµà´¨ BSSID ഉളàµà´³ ആകàµà´¸àµ†à´¸àµà´¸àµ പോയിനàµà´±àµ ലഭàµà´¯à´®à´²àµà´²."
-#: ../cli/src/devices.c:1925
-#, 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:2001
+#: ../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:2003
-#, c-format
-msgid "Error: 'dev wimax': %s; allowed fields: %s"
-msgstr "പിശകàµ: 'dev wimax': %s; à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´¨àµà´¨ ഫീളàµâ€à´¡àµà´•à´³àµâ€: %s"
-
-#: ../cli/src/devices.c:2026
+#: ../cli/src/devices.c:2368
msgid "WiMAX NSP list"
msgstr "WiMAX NSP പടàµà´Ÿà´¿à´•"
-#: ../cli/src/devices.c:2063
+#: ../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:2074
+#: ../cli/src/devices.c:2472
#, c-format
msgid "Error: Device '%s' is not a WiMAX device."
msgstr "പിശകàµ: '%s' ഡിവൈസൠഒരൠവൈമാകàµà´¸àµ ഡിവൈസലàµà´²."
-#: ../cli/src/devices.c:2105
+#: ../cli/src/devices.c:2510
#, c-format
msgid "Error: Access point with nsp '%s' not found."
msgstr "പിശകàµ: '%s' à´Žà´¨àµà´¨ nsp ഉളàµà´³ ആകàµà´¸àµ†à´¸àµà´¸àµ പോയിനàµà´±àµ ലഭàµà´¯à´®à´²àµà´²."
-#: ../cli/src/devices.c:2132
+#: ../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:2185
+#: ../cli/src/devices.c:2621
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "പിശകàµ: 'dev' കമാനàµâ€à´¡àµ '%s' ശരിയലàµà´²."
@@ -1483,249 +3463,504 @@ msgstr "പിശകàµ: 'dev' കമാനàµâ€à´¡àµ '%s' ശരിയലàµà
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 "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 "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"
+
+#: ../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 | 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 ""
-"Usage: 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"
+"നെറàµà´±àµâ€Œà´µà´°àµâ€à´•àµà´•àµà´®à´¾à´¨àµ‡à´œà´±à´¿à´¨àµà´±àµ† മൊതàµà´¤à´‚ അവസàµà´¥ കാണിയàµà´•àµà´•àµà´¨àµà´¨àµ.\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"
+
+#: ../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"
+"ലെവലàµâ€ à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ ഡൊമെയിനàµâ€ ലഭàµà´¯à´®à´¾à´•àµà´•àµà´•. സാധàµà´¯à´®à´¾à´¯ ലോഗàµà´—ിങൠ"
+"ഡൊമെയിനàµà´•à´³àµâ€à´•àµà´•à´¾à´¯à´¿ മാനàµâ€ താളàµâ€\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"
+"വൈമാകàµà´¸àµ റേഡിയോ à´¸àµà´µà´¿à´šàµà´šà´¿à´¨àµà´±àµ† അവസàµà´¥ ലഭàµà´¯à´®à´¾à´•àµà´•àµà´• à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ à´“à´£àµâ€/ഓഫൠചെയàµà´¯àµà´•."
+"\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 "limited"
-#: ../cli/src/network-manager.c:160
+#: ../cli/src/network-manager.c:294
+msgid "full"
+msgstr "full"
+
+#: ../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 "നെറàµà´±àµâ€Œà´µà´°àµâ€à´•àµà´•àµà´®à´¾à´¨àµ‡à´œà´±à´¿à´¨àµà´±àµ† അവസàµà´¥"
-#. 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:459
+#: ../cli/src/network-manager.c:530
#, c-format
-msgid "Error: Couldn't connect to system bus: %s"
-msgstr "പിശകàµ: സിസàµà´±àµà´±à´‚ bus-ലേകàµà´•àµàµ കണകàµà´Ÿàµ ചെയàµà´¯àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´¾à´¯à´¿à´²àµà´²: %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"
+msgid "Error: access denied to set logging; %s"
msgstr ""
-"പിശകàµ: '%s' à´Žà´¨àµà´¨àµàµ '--fields'-à´¨àµà´³àµà´³ മൂലàµà´²àµà´¯à´‚ അസാധàµà´µà´¾à´£àµàµ; à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´¨àµà´¨ "
-"ഫീളàµâ€à´¡àµà´•à´³àµâ€: %s"
-
-#: ../cli/src/network-manager.c:424
-msgid "Networking enabled"
-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 ""
-"പിശകàµ: തെറàµà´±à´¾à´¯ 'wwan' പരാമീറàµà´±à´°àµâ€: '%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
+#: ../cli/src/network-manager.c:710
#, c-format
-msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
+msgid "Error: '--fields' value '%s' is not valid here (allowed field: %s)"
msgstr ""
-"പിശകàµ: തെറàµà´±à´¾à´¯ 'sleep' പരാമീറàµà´±à´°àµâ€: '%s'; 'true' à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ 'false' "
-"ഉപയോഗിയàµà´•àµà´•àµà´•."
-
-#: ../cli/src/network-manager.c:479
-msgid "WiFi enabled"
-msgstr "WiFi സജàµà´œà´‚"
+"പിശകàµ: '--fields' മൂലàµà´²àµà´¯à´‚ '%s' ഇവിടെ ശരിയലàµà´² (à´…à´¨àµà´µà´¦à´¿à´¯àµà´•àµà´•àµà´¨àµà´¨ ഫീളàµâ€à´¡àµ: %s)"
-#: ../cli/src/network-manager.c:495
+#: ../cli/src/network-manager.c:735
#, c-format
-msgid "Error: invalid 'wifi' parameter: '%s'."
-msgstr "പിശകàµ: തെറàµà´±à´¾à´¯ 'wifi' പരാമീറàµà´±à´°àµâ€: '%s'."
+msgid "Error: invalid '%s' argument: '%s' (use on/off)."
+msgstr "പിശകàµ: തെറàµà´±à´¾à´¯ '%s' ആരàµâ€à´—àµà´¯àµà´®àµ†à´¨àµà´±àµ: '%s' (à´“à´£àµâ€/ഓഫൠഉപയോഗിയàµà´•àµà´•àµà´•)."
-#: ../cli/src/network-manager.c:517
-msgid "WWAN enabled"
-msgstr "WWAN സജàµà´œà´‚"
+#: ../cli/src/network-manager.c:746
+msgid "Connectivity"
+msgstr "കണകàµà´Ÿà´¿à´µà´¿à´±àµà´±à´¿"
-#: ../cli/src/network-manager.c:533
-#, c-format
-msgid "Error: invalid 'wwan' parameter: '%s'."
-msgstr "പിശകàµ: തെറàµà´±à´¾à´¯ 'wwan' പരാമീറàµà´±à´°àµâ€: '%s'."
+#: ../cli/src/network-manager.c:758
+msgid "Networking"
+msgstr "നെറàµà´±àµâ€Œà´µà´°àµâ€à´•àµà´•à´¿à´™àµ"
-#: ../cli/src/network-manager.c:556
-msgid "WiMAX enabled"
-msgstr "WiMAX സജàµà´œà´‚"
+#: ../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:572
+#: ../cli/src/network-manager.c:799
#, c-format
-msgid "Error: invalid 'wimax' parameter: '%s'."
-msgstr "പിശകàµ: തെറàµà´±à´¾à´¯ 'wimax' പരാമീറàµà´±à´°àµâ€: '%s'."
+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 "റേഡിയോ à´¸àµà´µà´¿à´šàµà´šàµà´•à´³àµâ€"
+
+#: ../cli/src/network-manager.c:863
+msgid "Wi-Fi radio switch"
+msgstr "വൈ-ഫൈ റേഡിയോ à´¸àµà´µà´¿à´šàµà´šàµ"
-#: ../cli/src/network-manager.c:588
+#: ../cli/src/network-manager.c:879
+msgid "WWAN radio switch"
+msgstr "à´¡à´¬àµà´²àµà´¯àµ‚à´¡à´¬àµà´²àµà´¯àµ‚à´Žà´Žà´¨àµâ€ റേഡിയോ à´¸àµà´µà´¿à´šàµà´šàµ"
+
+#: ../cli/src/network-manager.c:896
+msgid "WiMAX radio switch"
+msgstr "വൈമാകàµà´¸àµ റേഡിയോ à´¸àµà´µà´¿à´šàµà´šàµ "
+
+#: ../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"
@@ -1739,16 +3974,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 [OPTIONS] OBJECT { COMMAND | help }\n"
+"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
"\n"
"OPTIONS\n"
" -t[erse] terse output\n"
@@ -1759,269 +3999,790 @@ 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 "Error: Option '--terse' is mutually exclusive with '--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 "Error: Option '--pretty' is mutually exclusive with '--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: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: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:603
+#: ../cli/src/settings.c:666
#, c-format
msgid "%d (hex-ascii-key)"
msgstr "%d (hex-ascii-key)"
-#: ../cli/src/settings.c:605
+#: ../cli/src/settings.c:668
#, c-format
msgid "%d (104/128-bit passphrase)"
msgstr "%d (104/128-ബിറàµà´±àµ പാസàµà´«àµà´°àµ†à´¯à´¿à´¸àµ)"
-#: ../cli/src/settings.c:608 ../cli/src/settings.c:736
+#: ../cli/src/settings.c:671 ../cli/src/settings.c:799
#, c-format
msgid "%d (unknown)"
msgstr "%d (അപരിചിതം)"
-#: ../cli/src/settings.c:634
+#: ../cli/src/settings.c:697
msgid "0 (unknown)"
msgstr "0 (അപരിചിതം)"
-#: ../cli/src/settings.c:640
+#: ../cli/src/settings.c:703
msgid "any, "
msgstr "à´à´¤àµ†à´™àµà´•à´¿à´²àµà´‚,"
-#: ../cli/src/settings.c:642
+#: ../cli/src/settings.c:705
msgid "900 MHz, "
msgstr "900 MHz, "
-#: ../cli/src/settings.c:644
+#: ../cli/src/settings.c:707
msgid "1800 MHz, "
msgstr "1800 MHz, "
-#: ../cli/src/settings.c:646
+#: ../cli/src/settings.c:709
msgid "1900 MHz, "
msgstr "1900 MHz, "
-#: ../cli/src/settings.c:648
+#: ../cli/src/settings.c:711
msgid "850 MHz, "
msgstr "850 MHz, "
-#: ../cli/src/settings.c:650
+#: ../cli/src/settings.c:713
msgid "WCDMA 3GPP UMTS 2100 MHz, "
msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../cli/src/settings.c:652
+#: ../cli/src/settings.c:715
msgid "WCDMA 3GPP UMTS 1800 MHz, "
msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../cli/src/settings.c:654
+#: ../cli/src/settings.c:717
msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../cli/src/settings.c:656
+#: ../cli/src/settings.c:719
msgid "WCDMA 3GPP UMTS 800 MHz, "
msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../cli/src/settings.c:658
+#: ../cli/src/settings.c:721
msgid "WCDMA 3GPP UMTS 850 MHz, "
msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../cli/src/settings.c:660
+#: ../cli/src/settings.c:723
msgid "WCDMA 3GPP UMTS 900 MHz, "
msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../cli/src/settings.c:662
+#: ../cli/src/settings.c:725
msgid "WCDMA 3GPP UMTS 1700 MHz, "
msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../cli/src/settings.c:664
+#: ../cli/src/settings.c:727
msgid "WCDMA 3GPP UMTS 1900 MHz, "
msgstr "WCDMA 3GPP UMTS 1900 MHz, "
-#: ../cli/src/settings.c:666
+#: ../cli/src/settings.c:729
msgid "WCDMA 3GPP UMTS 2600 MHz, "
msgstr "WCDMA 3GPP UMTS 2600 MHz, "
-#: ../cli/src/settings.c:684
+#: ../cli/src/settings.c:747
msgid "0 (NONE)"
msgstr "0 (NONE)"
-#: ../cli/src/settings.c:690
+#: ../cli/src/settings.c:753
msgid "REORDER_HEADERS, "
msgstr "REORDER_HEADERS, "
-#: ../cli/src/settings.c:692
+#: ../cli/src/settings.c:755
msgid "GVRP, "
msgstr "GVRP, "
-#: ../cli/src/settings.c:694
+#: ../cli/src/settings.c:757
msgid "LOOSE_BINDING, "
msgstr "LOOSE_BINDING, "
-#: ../cli/src/settings.c:730
+#: ../cli/src/settings.c:793
#, c-format
msgid "%d (disabled)"
msgstr "%d (à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¨à´°à´¹à´¿à´¤à´®à´¾à´•àµà´•à´¿à´¯à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ)"
-#: ../cli/src/settings.c:732
+#: ../cli/src/settings.c:795
#, c-format
msgid "%d (enabled, prefer public IP)"
msgstr "%d (à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¨ സജàµà´œà´‚, പബàµà´²à´¿à´•àµ à´à´ªà´¿)"
-#: ../cli/src/settings.c:734
+#: ../cli/src/settings.c:797
#, c-format
msgid "%d (enabled, prefer temporary IP)"
msgstr "%d (à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¨ സജàµà´œà´‚, താലàµâ€à´•àµà´•à´¾à´²à´¿à´• à´à´ªà´¿)"
-#: ../cli/src/settings.c:746
-#| msgid "(none)"
+#: ../cli/src/settings.c:809
msgid "0 (none)"
msgstr "0 (à´’à´¨àµà´¨àµà´®à´¿à´²àµà´²)"
-#: ../cli/src/settings.c:752
+#: ../cli/src/settings.c:815
msgid "agent-owned, "
msgstr "à´à´œà´¨àµà´±à´¿à´¨àµà´±à´‚ ഉടമസàµà´¥à´¯à´¿à´²àµâ€,"
-#: ../cli/src/settings.c:754
-#| msgid "not set"
+#: ../cli/src/settings.c:817
msgid "not saved, "
msgstr "സൂകàµà´·à´¿à´šàµà´šà´¿à´Ÿàµà´Ÿà´¿à´²àµà´²,"
-#: ../cli/src/settings.c:756
+#: ../cli/src/settings.c:819
msgid "not required, "
msgstr "ആവശàµà´¯à´®à´¿à´²àµà´²,"
-#: ../cli/src/settings.c:954 ../cli/src/settings.c:1173
-#: ../cli/src/settings.c:1914
+#: ../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' ശരിയായൊരൠഇഥരàµâ€à´¨àµ†à´±àµà´±àµ എംഎസിയലàµà´²"
+
+#: ../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' ശരിയായൊരൠഎംഎസിയലàµà´²"
+
+#: ../cli/src/settings.c:2252 ../libnm-util/nm-setting-connection.c:715
+#, c-format
+msgid "'%s' is not a valid UUID"
+msgstr "'%s' ശരിയായ à´¯àµà´¯àµà´à´¡à´¿à´¯à´²àµà´²"
+
+#: ../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 à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ കണകàµà´·à´¨àµâ€ à´¯àµà´¯àµà´à´¡à´¿ "
+"ഉപയോഗിയàµà´•àµà´•àµà´•"
+
+#: ../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"
+"Example: mode=2,miimon=120\n"
+
+#: ../cli/src/settings.c:2727
+#, c-format
+msgid "'%s' is not a valid InfiniBand MAC"
+msgstr "'%s' ശരിയായൊരൠInfiniBand എംഎസി à´…à´²àµà´²"
+
+#: ../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 ""
+"à´¡à´¿à´Žà´¨àµâ€à´Žà´¸àµ സരàµâ€à´µà´±àµà´•à´³àµà´Ÿàµ† 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"
+"\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 ""
+"à´¡à´¿à´Žà´¨àµâ€à´Žà´¸àµ സരàµâ€à´µà´±àµà´•à´³àµâ€à´•àµà´•àµà´³àµà´³ IPv6 വിലാസങàµà´™à´³àµâ€à´•àµà´•àµà´³àµà´³ പടàµà´Ÿà´¿à´• നലàµâ€à´•àµà´•. IPv6 "
+"à´•àµà´°à´®àµ€à´•à´°à´£à´‚ രീതി 'auto' ആണെങàµà´•à´¿à´²àµâ€, à´“à´Ÿàµà´Ÿàµ‹à´®à´¾à´±àµà´±à´¿à´•àµà´•àµ à´•àµà´°à´®àµ€à´•à´°à´£à´‚ "
+"ലഭàµà´¯à´®à´¾à´•àµà´•àµà´¨àµà´¨à´µà´¯àµà´•àµà´•àµàµ à´ˆ à´¡à´¿à´Žà´¨àµâ€à´Žà´¸àµ സരàµâ€à´µà´±àµà´•à´³àµâ€ നലàµâ€à´•àµà´¨àµà´¨àµ. à´…à´ªàµâ€Œà´¸àµà´Ÿàµà´°àµ€à´‚ "
+"നെറàµà´±àµâ€Œà´µà´°àµâ€à´•àµà´•à´¿à´²àµà´²à´¾à´¤àµà´¤à´¤à´¿à´¨à´¾à´²àµâ€, à´¡à´¿à´Žà´¨àµâ€à´Žà´¸àµ സരàµâ€à´µà´±àµà´•à´³àµâ€ 'shared' à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ "
+"'link-local' IPv6 à´•àµà´°à´®àµ€à´•à´°à´£à´‚ രീതികളàµâ€à´•àµà´•àµŠà´ªàµà´ªà´‚ ഉപയോഗിയàµà´•àµà´•àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´²àµà´². "
+"മറàµà´±àµ†à´²àµà´²à´¾ IPv6 à´•àµà´°à´®àµ€à´•à´°à´£ രീതികളിലàµà´‚, à´ˆ കണകàµà´·à´¨àµà´³àµà´³ à´¡à´¿à´Žà´¨àµâ€à´Žà´¸àµ സരàµâ€à´µà´±àµà´•à´³à´¾à´¯à´¿ "
+"മാതàµà´°à´‚ à´ˆ സരàµâ€à´µà´±àµà´•à´³àµâ€ ഉപയോഗിയàµà´•àµà´•àµà´¨àµà´¨àµ.\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"
+"\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-à´¨àµàµ à´¸àµà´µàµ€à´•à´°à´¿à´¯àµà´•àµà´•à´¾à´‚. ഫയലàµâ€ നാമമാണെങàµà´•à´¿à´²àµâ€, ഫയലàµâ€ വായിചàµà´šàµàµ ഇതിലേകàµà´•àµàµ "
+"വിവരങàµà´™à´³àµâ€ ശരിയായി സൂകàµà´·à´¿à´¯àµà´•àµà´•àµà´¨àµà´¨àµ.\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 "à´¡à´¬àµà´²àµà´¯àµ‚ഇപി കീ '%s' ആകാം\n"
+
+#: ../cli/src/settings.c:3695
+#, c-format
+msgid "'%s' not among [0 (unknown), 1 (key), 2 (passphrase)]"
+msgstr "[0 (അപരിചിതം), 1 (കീ), 2 (പാസàµâ€Œà´«àµà´°àµ†à´¯à´¿à´¸àµ)] à´Žà´¨àµà´¨à´¤à´¿à´²àµâ€ '%s' ലഭàµà´¯à´®à´²àµà´²"
+
+#: ../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 ""
+"à´¡à´¬àµà´²àµà´¯àµ‚ഇപി കീകളàµà´Ÿàµ† തരം നലàµâ€à´•àµà´•. à´¸àµà´µàµ€à´•à´¾à´°àµà´¯à´®à´¾à´¯ മൂലàµà´²àµà´¯à´™àµà´™à´³àµâ€: 0 à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ "
+"അപരിചിതം, 1 à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ കീ, 2 à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ പാസàµâ€Œà´«àµà´°àµ†à´¯à´¿à´¸àµ.\n"
+
+#: ../cli/src/settings.c:3728
+#, c-format
+msgid "'%s' is not a valid PSK"
+msgstr "'%s' ശരിയായൊരൠപിഎസകെ à´…à´²àµà´²"
+
+#: ../cli/src/settings.c:3772
+#, c-format
+msgid "'%s' is not a valid DCB flag"
+msgstr "'%s' ശരിയായൊരൠഡിസിബി à´«àµà´²à´¾à´—à´²àµà´²"
+
+#: ../cli/src/settings.c:3795
+#, c-format
+msgid "'%s' is not a DCB app priority"
+msgstr "'%s' ഒരൠഡിസിബി ആപàµà´ªàµ à´®àµà´¨àµâ€à´—ണനയലàµà´²"
+
+#: ../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 "[à´Žà´¨àµâ€à´Žà´‚ വിശേഷതയàµà´Ÿàµ† വിവരണം]"
+
+#: ../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 "'0x%X' IP4 വിലാസം വാകàµà´¯à´¤àµà´¤à´¿à´²à´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പിശകàµ"
-#: ../cli/src/utils.c:133
+#: ../cli/src/utils.c:217
#, c-format
msgid "Error converting IP6 address '%s' to text form"
msgstr "'%s' IP6 വിലാസം വാകàµà´¯à´¤àµà´¤à´¿à´²à´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പിശകàµ"
-#: ../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' "
"à´…à´²àµà´²"
-#: ../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: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 --"
"nocheck to suppress the warning.\n"
msgstr ""
"à´®àµà´¨àµà´¨à´±à´¿à´¯à´¿à´ªàµà´ªàµàµ: nmcli (%s), NetworkManager (%s) പതിപàµà´ªàµà´•à´³àµâ€ തമàµà´®à´¿à´²àµâ€ "
-"ചേരàµà´¨àµà´¨à´¿à´²àµà´². à´®àµà´¨àµà´¨à´±à´¿à´¯à´¿à´ªàµà´ªàµàµ "
-"ഇലàµà´²à´¾à´¤à´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨à´¾à´¯à´¿ --nocheck ഉപയോഗിയàµà´•àµà´•àµà´•.\n"
+"ചേരàµà´¨àµà´¨à´¿à´²àµà´². à´®àµà´¨àµà´¨à´±à´¿à´¯à´¿à´ªàµà´ªàµàµ ഇലàµà´²à´¾à´¤à´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨à´¾à´¯à´¿ --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 ഉപയോഗിയàµà´•àµà´•àµà´•."
+"നിരàµâ€à´¬à´¨àµà´§à´®à´¾à´¯à´¿ à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¿à´ªàµà´ªà´¿à´¯àµà´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµàµ --nocheck ഉപയോഗിയàµà´•àµà´•àµà´•."
#: ../libnm-util/crypto.c:133
#, c-format
@@ -2135,7 +4896,8 @@ msgstr "തെറàµà´±à´¾à´¯ IV à´µàµà´¯à´¾à´ªàµà´¤à´¿ (à´•àµà´±à´žàµà´žà´¤
#: ../libnm-util/crypto_gnutls.c:166
#, c-format
msgid "Failed to initialize the decryption cipher context: %s / %s."
-msgstr "ഡീകàµà´°à´¿à´ªàµà´·à´¨àµâ€ സിഫരàµâ€ കോണàµâ€à´Ÿàµ†à´•àµà´¸àµà´±àµà´±àµ ആരംഭികàµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയം: %s / %s."
+msgstr ""
+"ഡീകàµà´°à´¿à´ªàµà´·à´¨àµâ€ സിഫരàµâ€ കോണàµâ€à´Ÿàµ†à´•àµà´¸àµà´±àµà´±àµ ആരംഭികàµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയം: %s / %s."
#: ../libnm-util/crypto_gnutls.c:175
#, c-format
@@ -2169,8 +4931,8 @@ msgstr "à´¸àµà´µà´•à´¾à´°àµà´¯ കീ ഡീകàµà´°à´¿à´ªàµà´±àµà´±àµ à´š
#, c-format
msgid "Failed to initialize the encryption cipher context: %s / %s."
msgstr ""
-"à´Žà´¨àµâ€à´•àµà´°à´¿à´ªàµà´·à´¨àµâ€ സിഫരàµâ€ കോണàµâ€à´Ÿàµ†à´•àµà´¸àµà´±àµà´±àµ ആരംഭികàµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ: %s / %"
-"s."
+"à´Žà´¨àµâ€à´•àµà´°à´¿à´ªàµà´·à´¨àµâ€ സിഫരàµâ€ കോണàµâ€à´Ÿàµ†à´•àµà´¸àµà´±àµà´±àµ ആരംഭികàµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ: %s / "
+"%s."
#: ../libnm-util/crypto_gnutls.c:290
#, c-format
@@ -2334,157 +5096,159 @@ msgstr "PKCS#12 ഫയലàµâ€ ഉറപàµà´ªà´¾à´•àµà´•àµà´µà´¾à´¨àµâ€ à´
msgid "Could not generate random data."
msgstr "വേഗതàµà´¤à´¿à´²àµâ€ ഡേറàµà´±à´¾ തയàµà´¯à´¾à´±à´¾à´•àµà´•àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´¾à´¯à´¿à´²àµà´²."
-#: ../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-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: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-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: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."
+#: ../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: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-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: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-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:397 ../libnm-util/nm-setting-vpn.c:407
+#: ../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:822
-#: ../libnm-util/nm-setting-wireless-security.c:830
-#: ../libnm-util/nm-setting-wireless-security.c:854
+#: ../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:2154 ../libnm-util/nm-setting-8021x.c:2166
-#: ../libnm-util/nm-setting-8021x.c:2212 ../libnm-util/nm-setting-8021x.c:2224
+#: ../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: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
+#: ../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: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-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: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
+#: ../libnm-util/nm-setting-bluetooth.c:170
+#: ../libnm-util/nm-setting-wireless-security.c:804
#, 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
+#: ../libnm-util/nm-setting-bluetooth.c:188
#, c-format
msgid "requires '%s' or '%s' setting"
msgstr "'%s' à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ '%s' സജàµà´œàµ€à´•à´°à´£à´‚ ആവശàµà´¯à´®àµà´£àµà´Ÿàµàµ"
-#: ../libnm-util/nm-setting-bond.c:391
+#: ../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:410
+#: ../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:421
+#: ../libnm-util/nm-setting-bond.c:548
#, c-format
-msgid "setting '%s' is required"
-msgstr "'%s' സജàµà´œàµ€à´•à´°à´£à´‚ ആവശàµà´¯à´®àµà´£àµà´Ÿàµàµ"
+msgid "mandatory option '%s' is missing"
+msgstr "നിരàµâ€à´¬à´¨àµà´§à´®à´¾à´¯ à´à´šàµà´›à´¿à´•à´‚ '%s' ലഭàµà´¯à´®à´²àµà´²"
-#: ../libnm-util/nm-setting-bond.c:430
+#: ../libnm-util/nm-setting-bond.c:557
#, 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
+#: ../libnm-util/nm-setting-bond.c:570
#, 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
+#: ../libnm-util/nm-setting-bond.c:583
+#, c-format
+msgid "'%s' is not a valid interface name for '%s' option"
+msgstr "'%s' is not a valid interface name for '%s' option"
+
+#: ../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 "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
+#: ../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"
-msgstr "'%s' à´à´šàµà´›à´¿à´•à´¤àµà´¤à´¿à´¨àµàµ '%s' à´à´šàµà´›à´¿à´•à´‚ ആവശàµà´¯à´®àµà´£àµà´Ÿàµàµ"
+msgid "'%s' option requires '%s' option to be set"
+msgstr "'%s' à´à´šàµà´›à´¿à´•à´¤àµà´¤à´¿à´¨àµàµ '%s' à´à´šàµà´›à´¿à´•à´‚ സജàµà´œà´®à´¾à´•àµà´•à´£à´‚"
-#: ../libnm-util/nm-setting-bond.c:508
+#: ../libnm-util/nm-setting-bond.c:659
#, c-format
msgid "'%s' option is empty"
msgstr "'%s' à´à´šàµà´›à´¿à´•à´‚ കാലിയാണàµàµ"
-#: ../libnm-util/nm-setting-bond.c:520
+#: ../libnm-util/nm-setting-bond.c:671
#, c-format
-#| 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
+#: ../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 ആയിരിയàµà´•àµà´•à´£à´‚)"
@@ -2494,105 +5258,127 @@ msgstr "വിശേഷതയàµà´•àµà´•àµà´³àµà´³ ശരിയായ മൂà
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-setting-connection.c:697
-#, c-format
-msgid "'%s' is not a valid UUID"
-msgstr "'%s' ശരിയായ à´¯àµà´¯àµà´à´¡à´¿à´¯à´²àµà´²"
-
-#: ../libnm-util/nm-setting-connection.c:716
+#: ../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:760
+#: ../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: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: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-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-dcb.c:688 ../libnm-util/nm-setting-dcb.c:720
+msgid "property invalid"
+msgstr "വിശേഷത ശരിയലàµà´²"
-#: ../libnm-util/nm-setting-gsm.c:293
+#: ../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:325
+#: ../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:360
+#: ../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-gsm.c:371
-#, c-format
-msgid "'%s' is not a number"
-msgstr "'%s' ഒരൠഅകàµà´•à´®à´²àµà´²"
+#: ../libnm-util/nm-setting-infiniband.c:228
+msgid "not a valid interface name"
+msgstr "ശരിയായൊരൂ ഇനàµà´±à´°àµâ€à´«àµ†à´¯à´¿à´¸àµ നാമമലàµà´²"
-#: ../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
+#: ../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 ""
+"ഇനàµâ€à´«à´¿à´¬à´¾à´¨àµâ€à´¡àµ പി _കീ കണകàµà´·à´¨àµâ€ പേരനàµà´±àµ ഇനàµà´±à´°àµâ€à´«àµ†à´¯à´¿à´¸àµ നാമം നലàµâ€à´•à´¿à´¯à´¿à´Ÿàµà´Ÿà´¿à´²àµà´²"
+
+#: ../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:777
+#: ../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:787
+#: ../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:803
+#: ../libnm-util/nm-setting-ip4-config.c:815
#, c-format
msgid "%d. route is invalid"
msgstr "%d. റൂടàµà´Ÿàµ അസാധàµ"
-#: ../libnm-util/nm-setting-ip4-config.c:813
+#: ../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:696
+#: ../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:619
+#: ../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 "à´Žà´¸àµà´Žà´¸àµà´à´¡à´¿ à´µàµà´¯à´¾à´ªàµà´¤à´¿ <1-32> ബൈറàµà´±àµà´•à´³àµà´Ÿàµ† പരിധിയàµà´•àµà´•àµàµ à´ªàµà´±à´¤àµà´¤àµàµ"
-#: ../libnm-util/nm-setting-olpc-mesh.c:146
-#: ../libnm-util/nm-setting-wireless.c:659
+#: ../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' ശരിയായൊരൠചാനലലàµà´²"
@@ -2607,98 +5393,91 @@ msgstr "'%d', സാധàµà´¤à´¯àµà´³àµà´³ <128-16384> പരിധിയàµà´
msgid "setting this property requires non-zero '%s' property"
msgstr "à´ˆ വിശേഷത സജàµà´œà´®à´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµàµ പൂജàµà´¯à´®à´²àµà´²à´¾à´¤àµà´¤ '%s' വിശേഷത ആവശàµà´¯à´®àµà´£àµà´Ÿàµàµ"
-#: ../libnm-util/nm-setting-vlan.c:508
+#: ../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:519
+#: ../libnm-util/nm-setting-vlan.c:508
#, c-format
msgid "'%s' is neither an UUID nor an interface name"
msgstr "'%s' ഒരൠയàµà´¯àµà´à´¡à´¿ à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ ഇനàµà´±à´°àµâ€à´«àµ†à´¯à´¿à´¸àµ നാമമലàµà´²"
-#: ../libnm-util/nm-setting-vlan.c:532
+#: ../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:545
+#: ../libnm-util/nm-setting-vlan.c:534
msgid "flags are invalid"
msgstr "à´«àµà´²à´¾à´—àµà´•à´³àµâ€ അസാധàµà´µà´¾à´£àµàµ"
-#: ../libnm-util/nm-setting-wired.c:456
+#: ../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:466
+#: ../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:476 ../libnm-util/nm-setting-wired.c:534
+#: ../libnm-util/nm-setting-wired.c:582 ../libnm-util/nm-setting-wired.c:640
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
+#: ../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' ശരിയായൊരൠമാകൠവിലാസമലàµà´²"
-#: ../libnm-util/nm-setting-wired.c:523
+#: ../libnm-util/nm-setting-wired.c:629
#, c-format
-#| msgid "invalid field '%s'"
msgid "invalid '%s' or its value '%s'"
msgstr "തെറàµà´±à´¾à´¯ '%s' à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ ഇതിനàµà´±àµ† മൂലàµà´²àµà´¯à´‚ '%s'"
-#: ../libnm-util/nm-setting-wireless-security.c:813
+#: ../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:842
+#: ../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:863
+#: ../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:960
+#: ../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:990
+#: ../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:628
+#: ../libnm-util/nm-setting-wireless.c:715
#, 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
+#: ../libnm-util/nm-setting-wireless.c:725
#, c-format
msgid "'%s' is not a valid band"
msgstr "'%s' ശരിയായൊരൠബാനàµâ€à´¡à´²àµà´²"
-#: ../libnm-util/nm-setting-wireless.c:648
+#: ../libnm-util/nm-setting-wireless.c:735
#, 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"
msgstr ""
@@ -2717,8 +5496,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"
@@ -2734,8 +5512,8 @@ msgstr ""
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:6
msgid "System policy prevents enabling or disabling WiFi devices"
msgstr ""
-"WiFi ഡിവൈസàµà´•à´³àµâ€ à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¨à´¸à´œàµà´œà´®à´¾à´•àµà´•àµà´•à´¯àµ‹ à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¨à´°à´¹à´¿à´¤à´®à´¾à´•àµà´•àµà´•à´¯àµ‹ ചെയàµà´¯àµà´¨àµà´¨à´¤àµ "
-"സിസàµà´±àµà´±à´‚ പോളിസി തടയàµà´¨àµà´¨àµ"
+"WiFi ഡിവൈസàµà´•à´³àµâ€ à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¨à´¸à´œàµà´œà´®à´¾à´•àµà´•àµà´•à´¯àµ‹ à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¨à´°à´¹à´¿à´¤à´®à´¾à´•àµà´•àµà´•à´¯àµ‹ "
+"ചെയàµà´¯àµà´¨àµà´¨à´¤àµ സിസàµà´±àµà´±à´‚ പോളിസി തടയàµà´¨àµà´¨àµ"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:7
msgid "Enable or disable mobile broadband devices"
@@ -2747,8 +5525,7 @@ msgstr ""
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"
@@ -2761,8 +5538,7 @@ msgid ""
"System policy prevents enabling or disabling WiMAX mobile broadband devices"
msgstr ""
"iMAX à´®àµà´¬àµˆà´²àµâ€ à´¬àµà´°àµ‹à´¡àµà´¬à´¾à´¨àµà´±àµ ഡിവൈസàµà´•à´³àµâ€ à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¨à´¸à´œàµà´œà´®à´¾à´•àµà´•àµà´•à´¯àµ‹ "
-"à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¨à´°à´¹à´¿à´¤à´®à´¾à´•àµà´•àµà´•à´¯àµ‹ ചെയàµà´¯àµà´¨àµà´¨à´¤àµ "
-"സിസàµà´±àµà´±à´‚ പോളിസി തടയàµà´¨àµà´¨àµ"
+"à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¨à´°à´¹à´¿à´¤à´®à´¾à´•àµà´•àµà´•à´¯àµ‹ ചെയàµà´¯àµà´¨àµà´¨à´¤àµ സിസàµà´±àµà´±à´‚ പോളിസി തടയàµà´¨àµà´¨àµ"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:11
msgid "Allow control of network connections"
@@ -2778,7 +5554,8 @@ msgid "Connection sharing via a protected WiFi network"
msgstr "à´¸àµà´°à´•àµà´·à´¿à´¤à´®à´¾à´¯ ഒരൠവൈഫൈ നെറàµà´±àµâ€Œà´µà´°àµâ€à´•àµà´•àµ വഴി കണകàµà´·à´¨àµâ€ പങàµà´•à´¿à´Ÿàµà´•"
#: ../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 ""
"à´¸àµà´°à´•àµà´·à´¿à´¤à´®à´¾à´¯ ഒരൠവൈഫൈ നെറàµà´±àµâ€Œà´µà´°àµâ€à´•àµà´•àµ വഴി കണകàµà´·à´¨àµà´•à´³àµâ€ പങàµà´•à´¿à´Ÿàµà´¨àµà´¨à´¤àµàµ സിസàµà´±àµà´±à´‚ "
"പോളിസി തടയàµà´¨àµà´¨àµ"
@@ -2790,8 +5567,8 @@ msgstr "ഒരൠതàµà´±à´¨àµà´¨ വൈഫൈ നെറàµà´±àµâ€Œà´µà´°àµ
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:16
msgid "System policy prevents sharing connections via an open WiFi network"
msgstr ""
-"ഒരൠതàµà´±à´¨àµà´¨ വൈഫൈ നെറàµà´±àµâ€Œà´µà´°àµâ€à´•àµà´•àµ വഴി കണകàµà´·à´¨àµà´•à´³àµâ€ പങàµà´•à´¿à´Ÿàµà´¨àµà´¨à´¤àµàµ സിസàµà´±àµà´±à´‚ പോളിസി "
-"തടയàµà´¨àµà´¨àµ"
+"ഒരൠതàµà´±à´¨àµà´¨ വൈഫൈ നെറàµà´±àµâ€Œà´µà´°àµâ€à´•àµà´•àµ വഴി കണകàµà´·à´¨àµà´•à´³àµâ€ പങàµà´•à´¿à´Ÿàµà´¨àµà´¨à´¤àµàµ സിസàµà´±àµà´±à´‚ "
+"പോളിസി തടയàµà´¨àµà´¨àµ"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:17
msgid "Modify personal network connections"
@@ -2810,7 +5587,8 @@ msgstr "à´Žà´²àµà´²à´¾ ഉപയോകàµà´¤à´³àµâ€à´•àµà´•àµà´³àµà´³ à´¨à
#: ../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.in.h:21
msgid "Modify persistent system hostname"
@@ -2822,16 +5600,6 @@ msgstr ""
"സിസàµà´±àµà´±à´¤àµà´¤à´¿à´¨àµà´±àµ† ഹോസàµà´±àµà´±àµà´¨à´¾à´®à´¤àµà´¤à´¿à´²àµâ€ മാറàµà´±à´‚ വരàµà´¤àµà´¤àµà´¨àµà´¨à´¤àµàµ സിസàµà´±àµà´±à´‚ പോളിസി "
"തടയàµà´¨àµà´¨àµ"
-#: ../src/main.c:130
-#, c-format
-msgid "Failed to set signal mask: %d"
-msgstr "സിഗàµà´¨à´²àµâ€ മാസàµà´•àµ സജàµà´œà´®à´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ: %d."
-
-#: ../src/main.c:139
-#, c-format
-msgid "Failed to create signal handling thread: %d"
-msgstr "സിഗàµà´¨à´²àµâ€ കൈകാരàµà´¯à´‚ ചെയàµà´¯àµà´¨àµà´¨ സിഗàµà´¨à´²àµâ€ തയàµà´¯à´¾à´±à´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയം: %d"
-
#: ../src/main.c:154
#, c-format
msgid "Opening %s failed: %s\n"
@@ -2851,101 +5619,66 @@ msgstr "%s à´…à´Ÿà´¯àµà´•àµà´•àµà´¨àµà´¨à´¤àµ പരാജയപàµà´ªàµ†à´
#, c-format
msgid "NetworkManager is already running (pid %ld)\n"
msgstr ""
-"നെറàµà´±àµâ€‹à´µà´°àµâ€à´•àµà´•àµ മാനേജരàµâ€ ആദàµà´¯à´®àµ‡ à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¿à´šàµà´šàµà´•àµŠà´£àµà´Ÿà´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµà´£àµà´Ÿàµ (pid %"
-"ld)\n"
+"നെറàµà´±àµâ€‹à´µà´°àµâ€à´•àµà´•àµ മാനേജരàµâ€ ആദàµà´¯à´®àµ‡ à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¿à´šàµà´šàµà´•àµŠà´£àµà´Ÿà´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµà´£àµà´Ÿàµ (pid "
+"%ld)\n"
-#: ../src/main.c:328
+#: ../src/main.c:329
msgid "Print NetworkManager version and exit"
msgstr "നെറàµà´±àµâ€Œà´µà´°àµâ€à´•àµà´•àµà´®à´¾à´¨àµ‡à´œà´±à´¿à´¨àµà´±àµ† പതിപàµà´ªàµ വിവരം കാണിചàµà´šàµ à´ªàµà´±à´¤àµà´¤àµ à´•à´Ÿà´•àµà´•àµà´•"
-#: ../src/main.c:329
+#: ../src/main.c:330
msgid "Don't become a daemon"
msgstr "ഒരൠഡെമണàµâ€ ആകേണàµà´Ÿ"
-#: ../src/main.c:330
+#: ../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:331
+#: ../src/main.c:337
msgid "Specify the location of a PID file"
msgstr "PID ഫയലിനàµà´±àµ† à´¸àµà´¥à´¾à´¨à´‚ നലàµâ€à´•àµà´•"
-#: ../src/main.c:331
+#: ../src/main.c:337
msgid "filename"
msgstr "à´ªàµà´°à´®à´¾à´£à´¨à´¾à´®à´‚"
-#: ../src/main.c:332
+#: ../src/main.c:338
msgid "State file location"
msgstr "à´ªàµà´°à´®à´¾à´£à´¤àµà´¤à´¿à´¨àµà´±àµ† à´¸àµà´¥à´¾à´¨à´‚ à´ªàµà´°à´¸àµà´¤à´¾à´µà´¿à´•àµà´•àµà´•"
-#: ../src/main.c:332
+#: ../src/main.c:338
msgid "/path/to/state.file"
msgstr "/path/to/state.file"
-#: ../src/main.c:333
-msgid "Config file location"
-msgstr "à´•àµà´°à´®àµ€à´•à´°à´£ à´ªàµà´°à´®à´¾à´£à´¤àµà´¤à´¿à´¨àµà´±àµ† à´¸àµà´¥à´¾à´¨à´‚"
-
-#: ../src/main.c:333
-msgid "/path/to/config.file"
-msgstr "/path/to/config.file"
-
-#: ../src/main.c:334
-msgid "List of plugins separated by ','"
-msgstr "',' ഉപയോഗിചàµà´šàµàµ വേരàµâ€à´¤à´¿à´°à´¿à´¯àµà´•àµà´•àµà´¨àµà´¨ à´ªàµà´²à´—à´¿à´¨àµà´•à´³àµà´Ÿàµ† പടàµà´Ÿà´¿à´•"
-
-#: ../src/main.c:334
-msgid "plugin1,plugin2"
-msgstr "plugin1,plugin2"
-
-#. Translators: Do not translate the values in the square brackets
-#: ../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: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 ""
-"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]"
-
-#: ../src/main.c:345
-msgid "An http(s) address for checking internet connectivity"
-msgstr "ഇനàµà´±à´°àµâ€à´¨àµ†à´±àµà´±àµ കണകàµà´±àµà´±à´¿à´µà´¿à´±àµà´±à´¿ പരിശോധിയàµà´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµà´³àµà´³ http വിലാസം"
-
-#: ../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 "à´¹àµà´±àµ‡!!"
-
-#: ../src/main.c:352
+#: ../src/main.c:364
#, c-format
msgid "GModules are not supported on your platform!\n"
msgstr "à´ˆ à´ªàµà´²à´¾à´±àµà´±àµà´«àµ‹à´®à´¿à´²àµâ€ GModules പിനàµà´¤à´£à´¯àµà´•àµà´•àµà´¨àµà´¨à´¿à´²àµà´²!\n"
-#: ../src/main.c:371
+#: ../src/main.c:369
+#, c-format
+msgid "You must be root to run NetworkManager!\n"
+msgstr ""
+"പിശകàµ: നെറàµà´±àµâ€Œà´µà´°àµâ€à´•àµà´•àµà´®à´¾à´¨àµ‡à´œà´°àµâ€ à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¿à´•àµà´•à´¾à´¨àµâ€ നിങàµà´™à´³àµâ€ root "
+"ആയിരികàµà´•àµ‡à´£àµà´Ÿà´¤àµ à´…à´¤àµà´¯à´¾à´µà´¶àµà´¯à´®à´¾à´£àµ\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"
@@ -2959,332 +5692,1073 @@ msgstr ""
"കാരàµâ€à´¡àµà´•à´³àµâ€à´•àµà´•àµà´³àµà´³ വയരàµâ€à´²àµ†à´¸àµà´¸àµ ആകàµà´¸à´¸àµà´¸àµ പോയിനàµà´±àµà´•à´³àµâ€ നലàµâ€à´•àµà´µà´¾à´¨àµâ€ ഇതàµàµ\n"
"ഉപയോകàµà´¤à´¾à´µà´¿à´¨àµ† സഹായിയàµà´•àµà´•àµà´¨àµà´¨àµ."
-#: ../src/main.c:377
+#: ../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:387
+#: ../src/main.c:412
#, c-format
-msgid "You must be root to run 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 ""
-"പിശകàµ: നെറàµà´±àµâ€Œà´µà´°àµâ€à´•àµà´•àµà´®à´¾à´¨àµ‡à´œà´°àµâ€ à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¿à´•àµà´•à´¾à´¨àµâ€ നിങàµà´™à´³àµâ€ root "
-"ആയിരികàµà´•àµ‡à´£àµà´Ÿà´¤àµ à´…à´¤àµà´¯à´¾à´µà´¶àµà´¯à´®à´¾à´£àµ\n"
+"കമാനàµâ€à´¡àµ ലൈനിലàµà´³àµà´³ അപരിചിതമായ ലോഗൠഡൊമെയിനàµà´•à´³àµâ€ '%s' ഉപേകàµà´·à´¿à´¯àµà´•àµà´•àµà´¨àµà´¨àµ.\n"
-#: ../src/main.c:420
+#: ../src/main.c:468
#, c-format
msgid "Failed to read configuration: (%d) %s\n"
msgstr "à´•àµà´°à´®àµ€à´•à´°à´£à´™àµà´™à´³àµâ€ വായികàµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ: (%d) %s\n"
-#: ../src/main.c:431
+#: ../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:438
+#: ../src/main.c:495
#, c-format
msgid "State file %s parsing failed: (%d) %s\n"
msgstr "അവസàµà´¥ ഫയലàµâ€ %s പാഴàµà´¸à´¿à´™àµ പരാജയം: (%d) %s\n"
-#: ../src/main.c:455
+#: ../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:139
+#: ../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:146
+#: ../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:264
+#: ../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:273
+#: ../src/dhcp-manager/nm-dhcp-manager.c:322
msgid "'dhclient' could be found."
msgstr "'dhclient' ലഭàµà´¯à´®à´¾à´¯à´¿à´²àµà´²."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:283
+#: ../src/dhcp-manager/nm-dhcp-manager.c:332
msgid "'dhcpcd' could be found."
msgstr "'dhcpcd' ലഭàµà´¯à´®à´¾à´¯à´¿à´²àµà´²."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:291
+#: ../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:376
+#: ../src/dns-manager/nm-dns-manager.c:401
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr ""
-"à´•àµà´±à´¿à´ªàµà´ªàµàµ: libc റിസോളàµâ€à´µà´°àµâ€ 3 നെയിംസരàµâ€à´µà´±àµà´•à´³à´¿à´²àµâ€ കൂടതലàµâ€ പിനàµà´¤àµà´£à´¯àµà´•àµà´•àµà´¨àµà´¨à´¤à´²àµà´²."
+"à´•àµà´±à´¿à´ªàµà´ªàµàµ: libc റിസോളàµâ€à´µà´°àµâ€ 3 നെയിംസരàµâ€à´µà´±àµà´•à´³à´¿à´²àµâ€ കൂടതലàµâ€ "
+"പിനàµà´¤àµà´£à´¯àµà´•àµà´•àµà´¨àµà´¨à´¤à´²àµà´²."
-#: ../src/dns-manager/nm-dns-manager.c:378
+#: ../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:188
+#: ../src/logging/nm-logging.c:226
#, c-format
msgid "Unknown log domain '%s'"
msgstr "അപരിചിതമായ ലോഗൠഡൊമെയിനàµâ€ '%s'"
-#: ../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/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:531
-#: ../src/modem-manager/nm-modem-broadband.c:490 ../src/nm-device-bt.c:327
+#: ../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"
+
+#: ../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:166
+#: ../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 "Bond കണകàµà´·à´¨àµâ€ %d"
-#: ../src/nm-device-adsl.c:196
+#: ../src/devices/nm-device-adsl.c:150
#, c-format
msgid "ADSL connection %d"
msgstr "ADSL കണകàµà´·à´¨àµâ€ %d"
-#: ../src/nm-device-bridge.c:164
+#: ../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:302
+#: ../src/devices/nm-device-bt.c:308
#, c-format
msgid "PAN connection %d"
msgstr "PAN കണകàµà´·à´¨àµâ€ %d"
-#: ../src/nm-device-bt.c:335
+#: ../src/devices/nm-device-bt.c:341
#, c-format
msgid "DUN connection %d"
msgstr "DUN കണകàµà´·à´¨àµâ€ %d"
-#: ../src/nm-device-ethernet.c:1294
+#: ../src/devices/nm-device-ethernet.c:1254
#, c-format
msgid "PPPoE connection %d"
msgstr "PPPoE കണകàµà´·à´¨àµâ€ %d"
-#: ../src/nm-device-ethernet.c:1294 ../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 "Wired കണകàµà´·à´¨àµâ€ %d"
-#: ../src/nm-device-infiniband.c:270
+#: ../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:304
+#: ../src/devices/nm-device-olpc-mesh.c:242
#, c-format
msgid "Mesh %d"
msgstr "മെഷൠ%d"
-#: ../src/nm-device-vlan.c:310
+#: ../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:750
+#: ../src/nm-manager.c:3420 ../tui/nm-editor-utils.c:246
#, c-format
msgid "VPN connection %d"
msgstr "വിപിഎനàµâ€ കണകàµà´·à´¨àµâ€ %d"
-#: ../src/nm-netlink-monitor.c:162 ../src/nm-netlink-monitor.c:286
-#: ../src/nm-netlink-monitor.c:671
+#: ../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:265
-msgid "error occurred while waiting for data on socket"
-msgstr "സോകàµà´•à´±àµà´±à´¿à´²àµâ€ ഡേറàµà´±à´¾à´¯àµà´•àµà´•à´¾à´¯à´¿ കാതàµà´¤à´¿à´°à´¿à´•àµà´•àµà´®àµà´ªàµ‹à´³àµâ€ പിശകàµà´£àµà´Ÿà´¾à´¯à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ"
-
-#: ../src/nm-netlink-monitor.c:310
+#: ../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:321
+#: ../src/nm-netlink-monitor.c:275
#, c-format
msgid "unable to enable netlink handle credential passing: %s"
msgstr "നെറàµà´±àµà´²à´¿à´™àµà´•àµ ഹാനàµâ€à´¡à´¿à´²àµâ€ à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´²àµà´²: %s"
-#: ../src/nm-netlink-monitor.c:364 ../src/nm-netlink-monitor.c:424
+#: ../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:449
-#, c-format
-msgid "unable to allocate netlink link cache for monitoring link status: %s"
-msgstr ""
-"ലിങàµà´•à´¿à´¨àµà´±àµ† അവസàµà´¥ നിരീകàµà´·à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµà´³àµà´³ നെറàµà´±àµà´²à´¿à´™àµà´•àµ ലിങàµà´•àµ കാഷേ "
-"à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´²àµà´²: %s "
-
-#: ../src/nm-netlink-monitor.c:541
+#: ../src/nm-netlink-monitor.c:469
#, c-format
msgid "unable to join netlink group: %s"
msgstr "നെറàµà´±àµà´²à´¿à´™àµà´•àµ à´—àµà´°àµ‚à´ªàµà´ªà´¿à´²àµâ€ ചേരàµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´²àµà´²: %s"
-#: ../src/nm-netlink-monitor.c:647 ../src/nm-netlink-monitor.c:660
-#, 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:3680
+#: ../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 "Bond"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:3860
+#: ../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)"
+#: ../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"
+#: ../test/nm-online.c:105
+msgid "Exit immediately if NetworkManager is not running"
msgstr ""
-"NetworkManager à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¨à´¤àµà´¤à´¿à´²à´¿à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ ഉടനàµâ€ തനàµà´¨àµ† à´ªàµà´±à´¤àµà´¤àµàµ à´•à´Ÿà´•àµà´•àµà´•"
+"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 ഉപയോഗികàµà´•àµà´•."
-#~ msgid "Not enough memory to store PEM file data."
-#~ msgstr " ‌PEM ഫയലàµâ€ ഡേറàµà´±à´¾ സൂകàµà´·à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨à´¾à´µà´¶àµà´¯à´®à´¾à´¯ മെമàµà´®à´±à´¿ ലഭàµà´¯à´®à´²àµà´²."
+#: ../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 "à´¡à´¿à´Žà´¸àµà´Žà´²àµâ€"
+
+#: ../tui/nm-editor-utils.c:194
+#, c-format
+msgid "DSL connection %d"
+msgstr "à´¡à´¿à´Žà´¸àµà´Žà´²àµâ€ കണകàµà´·à´¨àµâ€ %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 "à´’à´Žà´²àµâ€à´ªà´¿à´¸à´¿ മെഷàµ"
+
+#: ../tui/nm-ui-utils.c:343
+msgid "WiMAX"
+msgstr "വൈമാകàµà´¸àµ"
+
+#: ../tui/nm-ui-utils.c:357
+msgid "ADSL"
+msgstr "à´Žà´¡à´¿à´Žà´¸àµà´Žà´²àµâ€"
+
+#: ../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)"
+
+#: ../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 "എആരàµâ€à´ªà´¿"
+
+#: ../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 "എആരàµâ€à´ªà´¿ ലകàµà´·àµà´¯à´™àµà´™à´³àµâ€"
+
+#: ../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 "à´•àµà´²àµ‹à´£àµâ€à´¡àµ മാകൠവിലാസം"
+
+#: ../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 "à´¡à´¿à´Žà´¨àµâ€à´¸àµ സരàµâ€à´µà´±àµà´•à´³àµâ€"
+
+#: ../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 "à´“à´Ÿàµà´Ÿàµ‹à´®à´¾à´±àµà´±à´¿à´•àµà´•àµ (à´¡à´¿à´Žà´šàµà´¸à´¿à´ªà´¿-മാതàµà´°à´‚)"
+
+#: ../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 "à´ªàµà´°àµŠà´«àµˆà´²àµâ€ നാമം"
-#~ msgid "Not enough memory to store private key data."
-#~ msgstr "à´¸àµà´µà´•à´¾à´°àµà´¯ കീ ഡേറàµà´±à´¾ സൂകàµà´·à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨à´¾à´µà´¶àµà´¯à´®à´¾à´¯ മെമàµà´®à´±à´¿ ലഭàµà´¯à´®à´²àµà´²."
+#: ../tui/nmt-page-main.c:188
+msgid "Device"
+msgstr "ഡിവൈസàµ"
-#~ msgid "Not enough memory to store certificate data."
-#~ msgstr "‌സരàµâ€à´Ÿàµà´Ÿà´¿à´«à´¿à´•àµà´•àµ‡à´±àµà´±àµ ഡേറàµà´±à´¾ സൂകàµà´·à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨à´¾à´µà´¶àµà´¯à´®à´¾à´¯ മെമàµà´®à´±à´¿ ലഭàµà´¯à´®à´²àµà´²."
+#: ../tui/nmt-page-main.c:252
+msgid "Automatically connect"
+msgstr "à´¸àµà´µà´¯à´®à´¾à´¯à´¿ കണകàµà´Ÿàµ ചെയàµà´¯àµà´•"
-#~ msgid "Not enough memory to store the IV."
-#~ msgstr "IV സൂകàµà´·à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨à´¾à´µà´¶àµà´¯à´®à´¾à´¯ മെമàµà´®à´±à´¿ ലഭàµà´¯à´®à´²àµà´²."
+#: ../tui/nmt-page-main.c:258
+msgid "Available to all users"
+msgstr "à´Žà´²àµà´²à´¾ ഉപയോകàµà´¤à´¾à´•àµà´•à´³àµâ€à´•àµà´•àµà´‚ ലഭàµà´¯à´‚"
-#~ msgid "Not enough memory to decrypt private key."
-#~ msgstr "à´¸àµà´µà´•à´¾à´°àµà´¯ കീ ഡീകàµà´°à´¿à´ªàµà´±àµà´±àµ ചെയàµà´¯à´¨àµà´¨à´¤à´¿à´¨à´¾à´µà´¶àµà´¯à´®à´¾à´¯ മെമàµà´®à´±à´¿ ലഭàµà´¯à´®à´²àµà´²."
+#: ../tui/nmt-page-team-port.c:45
+msgid "TEAM PORT"
+msgstr "TEAM PORT"
-#~ msgid "Not enough memory to store decrypted private key."
-#~ msgstr "ഡീകàµà´°à´¿à´ªàµà´±àµà´±àµ ചെയàµà´¤ à´¸àµà´µà´•à´¾à´°àµà´¯ കീ സൂകàµà´·à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨à´¾à´µà´¶àµà´¯à´®à´¾à´¯ മെമàµà´®à´±à´¿ ലഭàµà´¯à´®à´²àµà´²."
+#: ../tui/nmt-page-team-port.c:100 ../tui/nmt-page-team.c:170
+msgid "JSON configuration"
+msgstr "ജെഎസàµà´’à´Žà´¨àµâ€ à´•àµà´°à´®àµ€à´•à´°à´£à´‚"
-#~ msgid "Not enough memory for decrypted key buffer."
-#~ msgstr "ഡീകàµà´°à´¿à´ªàµà´±àµà´±àµ ചെയàµà´¤ കീ ബഫറിനാവശàµà´¯à´®à´¾à´¯ മെമàµà´®à´±à´¿ ലഭàµà´¯à´®à´²àµà´²."
+#: ../tui/nmt-page-team.c:51
+msgid "TEAM"
+msgstr "TEAM"
-#~ msgid "Could not allocate memory for encrypting."
-#~ msgstr "à´Žà´¨àµâ€à´•àµà´°à´¿à´ªàµà´±àµà´±à´¿à´™à´¿à´¨àµà´³àµà´³ മെമàµà´®à´±à´¿ à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ,"
+#: ../tui/nmt-page-vlan.c:109
+msgid "Parent"
+msgstr "പേരനàµà´±àµ"
-#~ msgid "Not enough memory to make encryption key."
-#~ msgstr "à´Žà´¨àµâ€à´•àµà´°à´¿à´ªàµà´·à´¨àµâ€ കീ തയàµà´¯à´¾à´±à´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨à´¾à´µà´¶àµà´¯à´®à´¾à´¯ മെമàµà´®à´±à´¿ ലഭàµà´¯à´®à´²àµà´²."
+#: ../tui/nmt-page-vlan.c:124
+msgid "VLAN id"
+msgstr "വിഎലàµâ€à´Žà´Žà´¨àµâ€ à´à´¡à´¿"
-#~ msgid "Could not allocate memory for PEM file creation."
-#~ msgstr "PEM ഫയലàµâ€ ഉണàµà´Ÿà´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµà´³àµà´³ മെമàµà´®à´±à´¿ à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´¾à´¯à´¿à´²àµà´²."
+#: ../tui/nmt-page-wifi.c:58
+msgid "WI-FI"
+msgstr "വൈ-ഫൈ"
-#~ msgid "Could not allocate memory for writing IV to PEM file."
-#~ msgstr "PEM ഫയലിലേകàµà´•àµ IV സൂകàµà´·à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨à´¾à´µà´¶àµà´¯à´®àµà´³àµà´³ മെമàµà´®à´±à´¿ à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´¾à´¯à´¿à´²àµà´²."
+#: ../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 "à´’à´¨àµà´¨àµà´®à´¿à´²àµà´²"
-#~ msgid "Could not allocate memory for writing encrypted key to PEM file."
-#~ msgstr ""
-#~ "PEM ഫയലിലേകàµà´•àµ à´Žà´¨àµâ€à´•àµà´°à´¿à´ªàµà´±àµà´±àµ ചെയàµà´¤ കീ സൂകàµà´·à´¿à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´¨àµà´³àµà´³ മെമàµà´®à´±à´¿ à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´¾à´¯à´¿à´²àµà´²."
+#: ../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 "à´¡à´¬àµà´¯àµ‚ഇപി 40/128-ബിറàµà´±àµ കീ (ഹെകàµà´¸àµ à´…à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€ ആസàµà´•àµ€)"
+
+#: ../tui/nmt-page-wifi.c:89
+msgid "WEP 128-bit Passphrase"
+msgstr "à´¡à´¬àµà´¯àµ‚ഇപി 128-ബിറàµà´±àµ പാസàµâ€Œà´«àµà´°àµ†à´¯à´¿à´¸àµ"
+
+#: ../tui/nmt-page-wifi.c:90
+msgid "Dynamic WEP (802.1x)"
+msgstr "ഡൈനാമികàµà´•àµ à´¡à´¬àµà´¯àµ‚ഇപി (802.1x)"
+
+#: ../tui/nmt-page-wifi.c:91
+msgid "LEAP"
+msgstr "à´Žà´²àµâ€à´‡à´Žà´ªà´¿"
+
+#: ../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 "(à´¡à´¬àµà´¯àµ‚ഇപിയàµà´•àµà´•àµàµ-à´Žà´¨àµà´±à´°àµâ€à´ªàµà´°àµˆà´¸à´¿à´¨àµàµ ഇതàµàµ വരെ പിനàµà´¤àµà´£ ലഭàµà´¯à´®à´²àµà´²)"
+
+#: ../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 "à´¡à´¬àµà´¯àµ‚ഇപി സൂചിക"
+
+#: ../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 "(ഡൈനമികàµà´•àµ-à´¡à´¬àµà´¯àµ‚ഇപിയàµà´•àµà´•àµàµ ഇതàµàµ വരെ പിനàµà´¤àµà´£ ലഭàµà´¯à´®à´²àµà´²)"
+
+#: ../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 ""
+"വയരàµâ€à´²àµ†à´¸àµà´¸àµ നെറàµà´±àµâ€Œà´µà´°àµâ€à´•àµà´•à´¿à´¨àµàµ ആവശàµà´¯à´®àµà´³àµà´³ ആധികാരികത ഉറപàµà´ªà´¾à´•àµà´•à´²àµâ€ സംവിധാനം"
-#~ msgid "Could not allocate memory for PEM file data."
-#~ msgstr "PEM ഫയലàµâ€ ഡേറàµà´±à´¾à´¯àµà´•àµà´•àµà´³àµà´³ മെമàµà´®à´±à´¿ à´…à´¨àµà´µà´¦à´¿à´•àµà´•àµà´µà´¾à´¨àµâ€ സാധàµà´¯à´®à´¾à´¯à´¿à´²àµà´²."
+#: ../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 ആധികാരികത ഉറപàµà´ªà´¾à´•àµà´•à´²àµâ€"
-#~ msgid "state: %s\n"
-#~ msgstr "അവസàµà´¥: %s\n"
+#: ../tui/nmt-secret-agent.c:352
+msgid "Network name"
+msgstr "നെറàµà´±àµâ€Œà´µà´°àµâ€à´•àµà´•à´¿à´¨àµà´±àµ† പേരàµàµ"
-#~ msgid "Connection activated\n"
-#~ msgstr "കണകàµà´·à´¨àµâ€ സജീവമാകàµà´•à´¿à´¯à´¿à´°à´¿à´•àµà´•àµà´¨àµà´¨àµ\n"
+#: ../tui/nmt-secret-agent.c:359
+msgid "DSL authentication"
+msgstr "à´¡à´¿à´Žà´¸àµà´Žà´²àµâ€ ആധികാരികത ഉറപàµà´ªà´¾à´•àµà´•à´²àµâ€"
-#~ msgid "state: %s (%d)\n"
-#~ msgstr "അവസàµà´¥: %s (%d)\n"
+#: ../tui/nmt-secret-agent.c:367
+msgid "PIN code required"
+msgstr "പിനàµâ€ കോഡൠആവശàµà´¯à´®àµà´£àµà´Ÿàµàµ"
-#~ msgid "Active connection state: %s\n"
-#~ msgstr "സജീവമായ കണകàµà´·à´¨àµà´±àµ† അവസàµà´¥: %s\n"
+#: ../tui/nmt-secret-agent.c:368
+msgid "PIN code is needed for the mobile broadband device"
+msgstr "മൊബൈലàµâ€ à´¬àµà´°àµ‹à´¡àµà´¬à´¾à´¨àµâ€à´¡àµ ഡിവൈസിനàµàµ പിനàµâ€ കോഡൠആവശàµà´¯à´®àµà´£àµà´Ÿàµàµ"
-#~ msgid "Active connection path: %s\n"
-#~ msgstr "സജീവമായ കണകàµà´·à´¨àµâ€ പാഥàµ: %s\n"
+#: ../tui/nmt-secret-agent.c:370
+msgid "PIN"
+msgstr "പിനàµâ€"
-#~ msgid "Device state: %d (%s)\n"
-#~ msgstr "ഡിവൈസിനàµà´±àµ† അവസàµà´¥: %d (%s)\n"
+#: ../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 "Failed to initialize SIGTERM pipe: %d"
-#~ msgstr "SIGTERM പൈപൠആരംഭികàµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ: %d"
+#: ../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 "SCOPE"
-#~ msgstr "SCOPE"
+#: ../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 ""
+"നിങàµà´™à´³àµâ€ ഒരൠവിപിഎനàµâ€ തയàµà´¯à´¾à´±à´¾à´•àµà´•àµà´•à´¯àµà´‚, à´† വിപിഎനàµâ€ കണകàµà´·à´¨àµâ€ പടàµà´Ÿà´¿à´•à´¯à´¿à´²àµâ€ "
+"ലഭàµà´¯à´²àµà´²àµ†à´™àµà´•à´¿à´²àµâ€, അതിനരàµâ€à´¤àµà´¥à´‚ നിങàµà´™à´³àµâ€ ശരിയായ വിപിഎനàµâ€ à´ªàµà´²à´—à´¿à´¨àµâ€ ഇനàµâ€à´¸àµà´±àµà´±àµ‹à´³àµâ€ "
+"ചെയàµà´¤à´¿à´Ÿàµà´Ÿà´¿à´²àµà´²àµ†à´¨àµà´¨à´¾à´£àµàµ."
+
+#: ../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 "DBUS-SERVICE"
-#~ msgstr "DBUS-SERVICE"
+#: ../tui/nmtui.c:59 ../tui/nmtui.c:62
+msgid "connection"
+msgstr "കണകàµà´·à´¨àµâ€"
-#~ msgid "system"
-#~ msgstr "സിസàµà´±àµà´±à´‚"
+#: ../tui/nmtui.c:60
+msgid "Edit a connection"
+msgstr "ഒരൠകണകàµà´·à´¨àµâ€ à´šà´¿à´Ÿàµà´Ÿà´ªàµà´ªàµ†à´Ÿàµà´¤àµà´¤àµà´•"
-#~ msgid "user"
-#~ msgstr "ഉപയോകàµà´¤à´¾à´µàµàµ"
+#: ../tui/nmtui.c:63
+msgid "Activate a connection"
+msgstr "ഒരൠകണകàµà´·à´¨àµâ€ സജീവമാകàµà´•àµà´•"
-#~ msgid "System connections"
-#~ msgstr "സിസàµà´±àµà´±à´‚ കണകàµà´·à´¨àµà´•à´³àµâ€"
+#: ../tui/nmtui.c:65
+msgid "new hostname"
+msgstr "à´ªàµà´¤à´¿à´¯ ഹോസàµà´±àµà´±àµà´¨à´¾à´®à´‚"
-#~ msgid "User connections"
-#~ msgstr "ഉപയോകàµà´¤à´¾à´µà´¿à´¨àµà´³àµà´³ കണകàµà´·à´¨àµà´•à´³àµâ€"
+#: ../tui/nmtui.c:66
+msgid "Set system hostname"
+msgstr "സിസàµà´±àµà´±à´¤àµà´¤à´¿à´¨àµà´³àµà´³ ഹോസàµà´±àµà´±àµà´¨à´¾à´®à´‚ സജàµà´œà´®à´¾à´•àµà´•àµà´•"
-#~ msgid "Error: Obtaining active connection for '%s' failed."
-#~ msgstr "പിശകàµ: '%s'-à´¨àµà´³àµà´³ സജീവമായ കണകàµà´·à´¨àµâ€ ലഭàµà´¯à´®à´¾à´•àµà´•àµà´¨àµà´¨à´¤à´¿à´²àµâ€ പരാജയപàµà´ªàµ†à´Ÿàµà´Ÿàµ."
+#: ../tui/nmtui.c:89
+msgid "NetworkManager TUI"
+msgstr "നെറàµà´±àµâ€Œà´µà´°àµâ€à´•àµà´•àµà´®à´¾à´¨àµ‡à´œà´±à´¿à´¨àµà´³àµà´³ à´Ÿà´¿à´¯àµà´"
-#~ msgid "IP4-SETTINGS"
-#~ msgstr "IP4-SETTINGS"
+#: ../tui/nmtui.c:97
+msgid "Please select an option"
+msgstr "ദയവായി ഒരൠà´à´šàµà´›à´¿à´•à´‚ തെരഞàµà´žàµ†à´Ÿàµà´•àµà´•àµà´•"
-#~ msgid "PREFIX"
-#~ msgstr "PREFIX"
+#: ../tui/nmtui.c:154
+msgid "Usage"
+msgstr "ഉപയോഗികàµà´•àµ‡à´£àµà´Ÿ വിധം"
-#~ msgid "unknown)"
-#~ 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 "നെറàµà´±àµâ€Œà´µà´°àµâ€à´•àµà´•àµà´®à´¾à´¨àµ‡à´œà´°àµâ€ à´ªàµà´°à´µà´°àµâ€à´¤àµà´¤à´¿à´¯àµà´•àµà´•àµà´¨àµà´¨à´¿à´²àµà´²."
diff --git a/po/mr.po b/po/mr.po
index 5a59536d3..fb4282a80 100644
--- a/po/mr.po
+++ b/po/mr.po
@@ -7,9 +7,9 @@ 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: 2014-01-23 15:24+0000\n"
-"PO-Revision-Date: 2014-01-26 23:56+0630\n"
+"product=NetworkManager&keywords=I18N+L10N&component=Translations\n"
+"POT-Creation-Date: 2014-09-20 22:11+0000\n"
+"PO-Revision-Date: 2014-09-21 08:34+0530\n"
"Last-Translator: Sandeep Shedmake <sshedmak@redhat.com>\n"
"Language-Team: Marathi <kde-i18n-doc@kde.org>\n"
"Language: mr\n"
@@ -20,436 +20,476 @@ msgstr ""
"X-Generator: Lokalize 1.5\n"
"X-Project-Style: gnome\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:179
-#: ../cli/src/connections.c:201
+#: ../clients/cli/common.c:38 ../clients/cli/common.c:50
+#: ../clients/cli/common.c:58 ../clients/cli/common.c:69
+#: ../clients/cli/connections.c:169 ../clients/cli/connections.c:191
msgid "GROUP"
msgstr "GROUP"
#. 0
-#: ../cli/src/common.c:35 ../cli/src/common.c:55
+#: ../clients/cli/common.c:39 ../clients/cli/common.c:59
msgid "ADDRESS"
msgstr "ADDRESS"
#. 1
-#: ../cli/src/common.c:36 ../cli/src/common.c:56
+#: ../clients/cli/common.c:40 ../clients/cli/common.c:60
msgid "ROUTE"
msgstr "ROUTE"
#. 2
-#: ../cli/src/common.c:37 ../cli/src/common.c:57
+#: ../clients/cli/common.c:41 ../clients/cli/common.c:61
msgid "DNS"
msgstr "DNS"
#. 3
-#: ../cli/src/common.c:38 ../cli/src/common.c:58
+#: ../clients/cli/common.c:42 ../clients/cli/common.c:62
msgid "DOMAIN"
msgstr "DOMAIN"
#. 4
-#: ../cli/src/common.c:39
+#: ../clients/cli/common.c:43
msgid "WINS"
msgstr "WINS"
#. 0
-#: ../cli/src/common.c:47 ../cli/src/common.c:66
+#: ../clients/cli/common.c:51 ../clients/cli/common.c:70
msgid "OPTION"
msgstr "OPTION"
-#: ../cli/src/common.c:404 ../cli/src/settings.c:2808
+#: ../clients/cli/common.c:377 ../clients/cli/settings.c:3049
+#: ../clients/cli/settings.c:3068
#, c-format
msgid "invalid IPv4 address '%s'"
msgstr "अवैध IPv4 पतà¥à¤¤à¤¾ '%s'"
-#: ../cli/src/common.c:412
+#: ../clients/cli/common.c:385
#, c-format
msgid "invalid prefix '%s'; <1-32> allowed"
msgstr "अवैध पà¥à¤°à¤¿à¤«à¤¿à¤•à¥à¤¸ '%s'; <1-32> सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯"
-#: ../cli/src/common.c:419 ../cli/src/common.c:472
+#: ../clients/cli/common.c:392 ../clients/cli/common.c:445
#, c-format
msgid "invalid gateway '%s'"
msgstr "अवैध गेटवे '%s'"
-#: ../cli/src/common.c:457 ../cli/src/settings.c:3054
+#: ../clients/cli/common.c:430 ../clients/cli/settings.c:3395
+#: ../clients/cli/settings.c:3414
#, c-format
msgid "invalid IPv6 address '%s'"
msgstr "अवैध IPv6 पतà¥à¤¤à¤¾ '%s'"
-#: ../cli/src/common.c:465
+#: ../clients/cli/common.c:438
#, 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
+#: ../clients/cli/common.c:521
#, c-format
-msgid "invalid IPv4 route '%s'"
-msgstr "अवैध IPv4 राउट '%s'"
+msgid "invalid route destination address '%s'"
+msgstr "अवैध राउट लकà¥à¤·à¥à¤¯ पतà¥à¤¤à¤¾ '%s'"
-#: ../cli/src/common.c:520
+#: ../clients/cli/common.c:528
#, c-format
-msgid "invalid prefix '%s'; <0-32> allowed"
-msgstr "अवैध पà¥à¤°à¤¿à¤«à¤¿à¤•à¥à¤¸ '%s'; <0-32> सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯"
+msgid "invalid prefix '%s'; <1-%d> allowed"
+msgstr "अवैध पà¥à¤°à¤¿à¤«à¤¿à¤•à¥à¤¸ '%s'; <1-%d> सà¥à¤µà¥€à¤•à¤¾à¤°à¤²à¥‡ जाते"
-#: ../cli/src/common.c:527 ../cli/src/common.c:590
+#: ../clients/cli/common.c:538
#, c-format
msgid "invalid next hop address '%s'"
msgstr "अवैध पà¥à¤¢à¥€à¤² हॉप पतà¥à¤¤à¤¾ '%s'"
-#: ../cli/src/common.c:534 ../cli/src/common.c:598
+#: ../clients/cli/common.c:543
#, c-format
-msgid "invalid metric '%s'"
-msgstr "अवैध मेटà¥à¤°à¤¿à¤• '%s'"
+msgid ""
+"the second component of route ('%s') is neither a next hop address nor a "
+"metric"
+msgstr "राउट ('%s') चे दà¥à¤¸à¤°à¥‡ घटक पà¥à¤¢à¥€à¤² हॉप पतà¥à¤¤à¤¾ किंवा मेटà¥à¤°à¤¿à¤• नाही"
-#: ../cli/src/common.c:575
+#: ../clients/cli/common.c:553
#, c-format
-msgid "invalid IPv6 route '%s'"
-msgstr "अवैध IPv6 राउट '%s'"
+msgid "invalid metric '%s'"
+msgstr "अवैध मेटà¥à¤°à¤¿à¤• '%s'"
-#: ../cli/src/common.c:583
-#, c-format
-msgid "invalid prefix '%s'; <0-128> allowed"
-msgstr "अवैध पà¥à¤°à¤¿à¤«à¤¿à¤•à¥à¤¸ '%s'; <0-128> सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯"
+#: ../clients/cli/common.c:562
+msgid "default route cannot be added (NetworkManager handles it by itself)"
+msgstr ""
+"पूरà¥à¤µà¤¨à¤¿à¤°à¥à¤§à¤¾à¤°à¤¿à¤¤ राउट समाविषà¥à¤Ÿà¥€à¤¤ करणे अशकà¥à¤¯ (NetworkManager सà¥à¤µà¤¤à¤ƒà¤¹à¥‚न ते हाताळते)"
-#: ../cli/src/common.c:619
+#: ../clients/cli/common.c:650
msgid "unmanaged"
msgstr "अवà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¥€à¤¤"
-#: ../cli/src/common.c:621
+#: ../clients/cli/common.c:652
msgid "unavailable"
msgstr "अनà¥à¤ªà¤²à¥à¤¬à¤§"
-#: ../cli/src/common.c:623 ../cli/src/network-manager.c:276
+#: ../clients/cli/common.c:654 ../clients/cli/network-manager.c:274
msgid "disconnected"
msgstr "खंडीत"
-#: ../cli/src/common.c:625
+#: ../clients/cli/common.c:656
msgid "connecting (prepare)"
msgstr "जोडणी (तयार करत आहे)"
-#: ../cli/src/common.c:627
+#: ../clients/cli/common.c:658
msgid "connecting (configuring)"
msgstr "जोडणी (संरचीत करत आहे)"
-#: ../cli/src/common.c:629
+#: ../clients/cli/common.c:660
msgid "connecting (need authentication)"
msgstr "जोडणी (ओळख पटवणे आवशà¥à¤¯à¤• आहे)"
-#: ../cli/src/common.c:631
+#: ../clients/cli/common.c:662
msgid "connecting (getting IP configuration)"
msgstr "जोडणी (IP संरचना पà¥à¤°à¤¾à¤ªà¥à¤¤ करत आहे)"
-#: ../cli/src/common.c:633
+#: ../clients/cli/common.c:664
msgid "connecting (checking IP connectivity)"
msgstr "जोडणी करत आहे (IP जोडणी तपासत आहे)"
-#: ../cli/src/common.c:635
+#: ../clients/cli/common.c:666
msgid "connecting (starting secondary connections)"
msgstr "जोडणी (दà¥à¤¸à¤°à¥€ जोडणी सà¥à¤°à¥‚ करत आहे)"
-#: ../cli/src/common.c:637 ../cli/src/network-manager.c:272
+#: ../clients/cli/common.c:668 ../clients/cli/network-manager.c:270
msgid "connected"
msgstr "जोडणी यशसà¥à¤µà¥€"
-#: ../cli/src/common.c:639 ../cli/src/connections.c:527
+#: ../clients/cli/common.c:670 ../clients/cli/connections.c:542
msgid "deactivating"
msgstr "बंद करत आहे"
-#: ../cli/src/common.c:641
+#: ../clients/cli/common.c:672
msgid "connection failed"
msgstr "जोडणी अपयशी"
-#: ../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
+#: ../clients/cli/common.c:674 ../clients/cli/connections.c:547
+#: ../clients/cli/connections.c:570 ../clients/cli/connections.c:1638
+#: ../clients/cli/devices.c:816 ../clients/cli/devices.c:2367
+#: ../clients/cli/network-manager.c:277 ../clients/cli/network-manager.c:295
+#: ../clients/cli/network-manager.c:358 ../clients/cli/network-manager.c:361
+#: ../clients/cli/network-manager.c:371 ../clients/cli/network-manager.c:373
+#: ../clients/cli/network-manager.c:430 ../clients/cli/network-manager.c:446
+#: ../clients/cli/settings.c:703 ../clients/cli/settings.c:765
+#: ../clients/cli/settings.c:1057 ../clients/cli/utils.c:1121
+#: ../src/main.c:504 ../src/main.c:532
msgid "unknown"
msgstr "अपरिचीत"
-#: ../cli/src/common.c:652
+#: ../clients/cli/common.c:683
msgid "No reason given"
msgstr "कारण दिले नाही"
-#: ../cli/src/common.c:655 ../cli/src/connections.c:2466
+#: ../clients/cli/common.c:686 ../clients/cli/connections.c:2413
#, c-format
msgid "Unknown error"
msgstr "अपरिचीत तà¥à¤°à¥à¤Ÿà¥€"
-#: ../cli/src/common.c:658
+#: ../clients/cli/common.c:689
msgid "Device is now managed"
msgstr "साधन आता वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¥€à¤¤ आहे"
-#: ../cli/src/common.c:661
+#: ../clients/cli/common.c:692
msgid "Device is now unmanaged"
msgstr "साधन आता वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤¨ अशकà¥à¤¯ आहे"
-#: ../cli/src/common.c:664
+#: ../clients/cli/common.c:695
msgid "The device could not be readied for configuration"
msgstr "साधनाला संरचनाकरीता सजà¥à¤œ करणे अशकà¥à¤¯"
-#: ../cli/src/common.c:667
+#: ../clients/cli/common.c:698
msgid ""
"IP configuration could not be reserved (no available address, timeout, etc.)"
msgstr "IP संरचना आरकà¥à¤·à¤¿à¤¤ (पतà¥à¤¤à¤¾, वेळसमापà¥à¤¤à¤¿, इतà¥à¤¯à¤¾à¤¦à¤¿ अनà¥à¤ªà¤²à¤¬à¥à¤§) करणे अशकà¥à¤¯"
-#: ../cli/src/common.c:670
+#: ../clients/cli/common.c:701
msgid "The IP configuration is no longer valid"
msgstr "IP संरचना यापà¥à¤¢à¥‡ वैध नाही"
-#: ../cli/src/common.c:673
+#: ../clients/cli/common.c:704
msgid "Secrets were required, but not provided"
msgstr "गोपनीयता आवशà¥à¤¯à¤•, परंतॠपà¥à¤°à¤µà¤²à¥‡ नाही"
-#: ../cli/src/common.c:676
+#: ../clients/cli/common.c:707
msgid "802.1X supplicant disconnected"
msgstr "802.1X सपà¥à¤ªà¤¿à¤•à¤‚ट खंडीत केले"
-#: ../cli/src/common.c:679
+#: ../clients/cli/common.c:710
msgid "802.1X supplicant configuration failed"
msgstr "802.1X सपà¥à¤²à¤¿à¤•à¤‚ट संरचना अपयशी"
-#: ../cli/src/common.c:682
+#: ../clients/cli/common.c:713
msgid "802.1X supplicant failed"
msgstr "802.1X सपà¥à¤²à¤¿à¤•à¤‚ट अपयशी"
-#: ../cli/src/common.c:685
+#: ../clients/cli/common.c:716
msgid "802.1X supplicant took too long to authenticate"
msgstr "802.1X सपà¥à¤²à¤¿à¤•à¤‚टला ओळख पटवणà¥à¤¯à¤¾à¤•à¤°à¥€à¤¤à¤¾ जासà¥à¤¤ वेळ लागला"
-#: ../cli/src/common.c:688
+#: ../clients/cli/common.c:719
msgid "PPP service failed to start"
msgstr "PPP सरà¥à¤µà¥à¤¹à¤¿à¤¸ सà¥à¤°à¥‚ होणà¥à¤¯à¤¾à¤¸ अपयशी"
-#: ../cli/src/common.c:691
+#: ../clients/cli/common.c:722
msgid "PPP service disconnected"
msgstr "PPP सरà¥à¤µà¥à¤¹à¤¿à¤¸ खंडीत"
-#: ../cli/src/common.c:694
+#: ../clients/cli/common.c:725
msgid "PPP failed"
msgstr "PPP अपयशी"
-#: ../cli/src/common.c:697
+#: ../clients/cli/common.c:728
msgid "DHCP client failed to start"
msgstr "DHCP कà¥à¤²à¤¾à¤à¤‚ट सà¥à¤°à¥‚ होणà¥à¤¯à¤¾à¤¸ अपयशी"
-#: ../cli/src/common.c:700
+#: ../clients/cli/common.c:731
msgid "DHCP client error"
msgstr "DHCP कà¥à¤²à¤¾à¤à¤‚ट तà¥à¤°à¥à¤Ÿà¥€"
-#: ../cli/src/common.c:703
+#: ../clients/cli/common.c:734
msgid "DHCP client failed"
msgstr "DHCP कà¥à¤²à¤¾à¤à¤‚ट अपयशी"
-#: ../cli/src/common.c:706
+#: ../clients/cli/common.c:737
msgid "Shared connection service failed to start"
msgstr "शेअरà¥à¤¡ जोडणी सरà¥à¤µà¥à¤¹à¤¿à¤¸ सà¥à¤°à¥‚ होणà¥à¤¯à¤¾à¤¸ अपयशी"
-#: ../cli/src/common.c:709
+#: ../clients/cli/common.c:740
msgid "Shared connection service failed"
msgstr "शेअरà¥à¤¡ जोडणी सरà¥à¤µà¥à¤¹à¤¿à¤¸ अपयशी"
-#: ../cli/src/common.c:712
+#: ../clients/cli/common.c:743
msgid "AutoIP service failed to start"
msgstr "ऑटोIP सरà¥à¤µà¥à¤¹à¤¿à¤¸ सà¥à¤°à¥‚ होणà¥à¤¯à¤¾à¤¸ अपयशी"
-#: ../cli/src/common.c:715
+#: ../clients/cli/common.c:746
msgid "AutoIP service error"
msgstr "ऑटोIP सरà¥à¤µà¥à¤¹à¤¿à¤¸ सà¥à¤°à¥‚ होणà¥à¤¯à¤¾à¤¸ अपयशी"
-#: ../cli/src/common.c:718
+#: ../clients/cli/common.c:749
msgid "AutoIP service failed"
msgstr "ऑटोIP सरà¥à¤µà¥à¤¹à¤¿à¤¸ अपयशी"
-#: ../cli/src/common.c:721
+#: ../clients/cli/common.c:752
msgid "The line is busy"
msgstr "लाइन वà¥à¤¯à¤¸à¥à¤¥ आहे"
-#: ../cli/src/common.c:724
+#: ../clients/cli/common.c:755
msgid "No dial tone"
msgstr "डायल सूर आढळले नाही"
-#: ../cli/src/common.c:727
+#: ../clients/cli/common.c:758
msgid "No carrier could be established"
msgstr "कॅरिअर सà¥à¤¥à¤¾à¤ªà¤¿à¤¤ करणे अशकà¥à¤¯"
-#: ../cli/src/common.c:730
+#: ../clients/cli/common.c:761
msgid "The dialing request timed out"
msgstr "डायलिंग विनंतीची वेळसमापà¥à¤¤à¤¿"
-#: ../cli/src/common.c:733
+#: ../clients/cli/common.c:764
msgid "The dialing attempt failed"
msgstr "डायलिंग पà¥à¤°à¤¯à¤¤à¥à¤¨ अपयशी"
-#: ../cli/src/common.c:736
+#: ../clients/cli/common.c:767
msgid "Modem initialization failed"
msgstr "मोडेम पà¥à¤°à¤¾à¤°à¤‚भिकरण अपयशी"
-#: ../cli/src/common.c:739
+#: ../clients/cli/common.c:770
msgid "Failed to select the specified APN"
msgstr "निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ APN नीवडणà¥à¤¯à¤¾à¤¸ अपयशी"
-#: ../cli/src/common.c:742
+#: ../clients/cli/common.c:773
msgid "Not searching for networks"
msgstr "नेटवरà¥à¤•à¤•à¤°à¥€à¤¤à¤¾ शोधत आहे"
-#: ../cli/src/common.c:745
+#: ../clients/cli/common.c:776
msgid "Network registration denied"
msgstr "नेटवरà¥à¤• नोंदणी नकारले"
-#: ../cli/src/common.c:748
+#: ../clients/cli/common.c:779
msgid "Network registration timed out"
msgstr "नेटवरà¥à¤• नोंदणीची वेळसमापà¥à¤¤à¤¿"
-#: ../cli/src/common.c:751
+#: ../clients/cli/common.c:782
msgid "Failed to register with the requested network"
msgstr "विनंती केलेलà¥à¤¯à¤¾ नेटवरà¥à¤•à¤¸à¤¹ नोंदणी अपयशी"
-#: ../cli/src/common.c:754
+#: ../clients/cli/common.c:785
msgid "PIN check failed"
msgstr "PIN तपासणी अपयशी"
-#: ../cli/src/common.c:757
+#: ../clients/cli/common.c:788
msgid "Necessary firmware for the device may be missing"
msgstr "साधनकरीता आवशà¥à¤¯à¤• फरà¥à¤®à¤µà¥‡à¤…र कदाचित आढळले नाही"
-#: ../cli/src/common.c:760
+#: ../clients/cli/common.c:791
msgid "The device was removed"
msgstr "साधन काढून टाकले"
-#: ../cli/src/common.c:763
+#: ../clients/cli/common.c:794
msgid "NetworkManager went to sleep"
msgstr "NetworkManager पूरà¥à¤£à¤ªà¤£à¥‡ निषà¥à¤•à¥à¤°à¥€à¤¯ à¤à¤¾à¤²à¥‡"
-#: ../cli/src/common.c:766
+#: ../clients/cli/common.c:797
msgid "The device's active connection disappeared"
msgstr "साधनाची सकà¥à¤°à¤¿à¤¯ जोडणी खंडीत à¤à¤¾à¤²à¥€"
-#: ../cli/src/common.c:769
+#: ../clients/cli/common.c:800
msgid "Device disconnected by user or client"
msgstr "वापरकरà¥à¤¤à¤¾ किंवा कà¥à¤²à¤¾à¤à¤‚टतरà¥à¤«à¥‡ साधन खंडीत केले"
-#: ../cli/src/common.c:772
+#: ../clients/cli/common.c:803
msgid "Carrier/link changed"
msgstr "कॅरिअर किंवा दà¥à¤µà¤¾ बदलले"
-#: ../cli/src/common.c:775
+#: ../clients/cli/common.c:806
msgid "The device's existing connection was assumed"
msgstr "साधनाची असà¥à¤¤à¤¿à¤¤à¥à¤µà¤¾à¤¤à¥€à¤² जोडणी गृहीत धरले"
-#: ../cli/src/common.c:778
+#: ../clients/cli/common.c:809
msgid "The supplicant is now available"
msgstr "सपà¥à¤²à¤¿à¤•à¤‚ट आता उपलबà¥à¤§ आहे"
-#: ../cli/src/common.c:781
+#: ../clients/cli/common.c:812
msgid "The modem could not be found"
msgstr "मोडेम आढळले नाही"
-#: ../cli/src/common.c:784
+#: ../clients/cli/common.c:815
msgid "The Bluetooth connection failed or timed out"
msgstr "बà¥à¤²à¥à¤¯à¥à¤Ÿà¥‚थ जोडणी अपयशी किंवा वेळ समापà¥à¤¤à¤¿ आढळली"
-#: ../cli/src/common.c:787
+#: ../clients/cli/common.c:818
msgid "GSM Modem's SIM card not inserted"
msgstr "GSM मोडेमचे SIM कारà¥à¤¡ अंतरà¥à¤­à¥à¤¤ केले नाही"
-#: ../cli/src/common.c:790
+#: ../clients/cli/common.c:821
msgid "GSM Modem's SIM PIN required"
msgstr "GSM मोडेमचे SIM PIN आवशà¥à¤¯à¤•"
-#: ../cli/src/common.c:793
+#: ../clients/cli/common.c:824
msgid "GSM Modem's SIM PUK required"
msgstr "GSM मोडेमचे SIM PUK आवशà¥à¤¯à¤•"
-#: ../cli/src/common.c:796
+#: ../clients/cli/common.c:827
msgid "GSM Modem's SIM wrong"
msgstr "GSM मोडेमचे SIM चà¥à¤•à¤¿à¤šà¥‡"
-#: ../cli/src/common.c:799
+#: ../clients/cli/common.c:830
msgid "InfiniBand device does not support connected mode"
msgstr "इंफिनिबà¤à¤¡ साधन जोडणी मोडकरीता समरà¥à¤¥à¤¨ पà¥à¤°à¤µà¤¤ नाही"
-#: ../cli/src/common.c:802
+#: ../clients/cli/common.c:833
msgid "A dependency of the connection failed"
msgstr "जोडणीचे अवलंबन अपयशी"
-#: ../cli/src/common.c:805
+#: ../clients/cli/common.c:836
msgid "A problem with the RFC 2684 Ethernet over ADSL bridge"
msgstr "RFC 2684 इथरनेट ओवà¥à¤¹à¤° ADSL बà¥à¤°à¤¿à¤œà¤¸à¤¹ अडचण"
-#: ../cli/src/common.c:808
+#: ../clients/cli/common.c:839
msgid "ModemManager is unavailable"
msgstr "ModemManager अनà¥à¤ªà¤²à¤¬à¥à¤§"
-#: ../cli/src/common.c:811
+#: ../clients/cli/common.c:842
msgid "The Wi-Fi network could not be found"
msgstr "Wi-Fi नेटवरà¥à¤• आढळले नाही"
-#: ../cli/src/common.c:814
+#: ../clients/cli/common.c:845
msgid "A secondary connection of the base connection failed"
msgstr "बेस जोडणीचे सेकंडरि जोड अपयशी"
-#: ../cli/src/common.c:817
+#: ../clients/cli/common.c:848
msgid "DCB or FCoE setup failed"
msgstr "DCB किंवा FCoE सेटअप अपयशी"
-#: ../cli/src/common.c:820
-#| msgid "connection failed"
+#: ../clients/cli/common.c:851
msgid "teamd control failed"
msgstr "teamd नियंतà¥à¤°à¤£ अपयशी"
+#: ../clients/cli/common.c:854
+msgid "Modem failed or no longer available"
+msgstr "मोडेम अपयशी किंवा यापà¥à¤¢à¥‡ उपलबà¥à¤§ नाही"
+
+#: ../clients/cli/common.c:857
+msgid "Modem now ready and available"
+msgstr "मोडेम आतà¥à¤¤à¤¾ सजà¥à¤œ आणि उपलबà¥à¤§ आहे"
+
+#: ../clients/cli/common.c:860
+msgid "SIM PIN was incorrect"
+msgstr "SIM PIN अयोगà¥à¤¯ होते"
+
#. 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
+#: ../clients/cli/common.c:864 ../clients/cli/devices.c:621
+#: ../libnm-glib/nm-device.c:1812
msgid "Unknown"
msgstr "अपरिचीत"
-#: ../cli/src/common.c:866
+#: ../clients/cli/common.c:906
#, c-format
msgid "invalid priority map '%s'"
msgstr "अवैध पà¥à¤°à¤¾à¤§à¤¾à¤¨à¥à¤¯à¤¤à¤¾ मॅप '%s'"
-#: ../cli/src/common.c:873 ../cli/src/common.c:879
+#: ../clients/cli/common.c:913 ../clients/cli/common.c:919
#, c-format
msgid "priority '%s' is not valid (<0-%ld>)"
msgstr "पà¥à¤°à¤¾à¤§à¤¾à¤¨à¥à¤¯à¤¤à¤¾ '%s' वैध नाही (<0-%ld>)"
-#: ../cli/src/common.c:935
+#: ../clients/cli/common.c:986
#, 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
+#: ../clients/cli/connections.c:40
msgid "Setting name? "
msgstr "सेटिंगचे नाव? "
-#: ../cli/src/connections.c:63
+#: ../clients/cli/connections.c:41
msgid "Property name? "
msgstr "गà¥à¤£à¤§à¤°à¥à¤®à¤¾à¤šà¥‡ नाव? "
-#: ../cli/src/connections.c:64
+#: ../clients/cli/connections.c:42
msgid "Enter connection type: "
msgstr "जोडणी पà¥à¤°à¤•à¤¾à¤° दà¥à¤¯à¤¾: "
+#. define some other prompts
+#: ../clients/cli/connections.c:45
+msgid "Connection type: "
+msgstr "जोडणी पà¥à¤°à¤•à¤¾à¤°: "
+
+#: ../clients/cli/connections.c:46
+msgid "VPN type: "
+msgstr "VPN पà¥à¤°à¤•à¤¾à¤°: "
+
+#: ../clients/cli/connections.c:47
+msgid "Bond master: "
+msgstr "बाà¤à¤¡ मासà¥à¤Ÿà¤°: "
+
+#: ../clients/cli/connections.c:48
+msgid "Team master: "
+msgstr "टिम मासà¥à¤Ÿà¤°: "
+
+#: ../clients/cli/connections.c:49
+msgid "Bridge master: "
+msgstr "बà¥à¤°à¤¿à¤œ मासà¥à¤Ÿà¤°: "
+
+#: ../clients/cli/connections.c:50
+msgid "Connection (name, UUID, or path): "
+msgstr "जोडणी (नाव, UUID, किंवा मारà¥à¤—): "
+
#. 0
-#: ../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
+#: ../clients/cli/connections.c:58 ../clients/cli/connections.c:170
+#: ../clients/cli/devices.c:55 ../clients/cli/devices.c:84
+#: ../clients/cli/devices.c:94 ../clients/cli/devices.c:105
+#: ../clients/cli/devices.c:114 ../clients/cli/devices.c:129
+#: ../clients/cli/devices.c:142 ../clients/cli/devices.c:168
+#: ../clients/cli/devices.c:183 ../clients/cli/devices.c:192
msgid "NAME"
msgstr "NAME"
#. 0
#. 1
-#: ../cli/src/connections.c:69 ../cli/src/connections.c:181
+#: ../clients/cli/connections.c:59 ../clients/cli/connections.c:171
msgid "UUID"
msgstr "UUID"
@@ -457,29 +497,30 @@ msgstr "UUID"
#. 0
#. 1
#. 2
-#: ../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
+#: ../clients/cli/connections.c:60 ../clients/cli/connections.c:192
+#: ../clients/cli/devices.c:41 ../clients/cli/devices.c:57
+#: ../clients/cli/devices.c:171
msgid "TYPE"
msgstr "TYPE"
#. 2
-#: ../cli/src/connections.c:71
+#: ../clients/cli/connections.c:61
msgid "TIMESTAMP"
msgstr "TIMESTAMP"
#. 3
-#: ../cli/src/connections.c:72
+#: ../clients/cli/connections.c:62
msgid "TIMESTAMP-REAL"
msgstr "TIMESTAMP-REAL"
#. 4
-#. 14
-#: ../cli/src/connections.c:73 ../cli/src/devices.c:101
+#. 15
+#: ../clients/cli/connections.c:63 ../clients/cli/devices.c:71
msgid "AUTOCONNECT"
msgstr "AUTOCONNECT"
#. 5
-#: ../cli/src/connections.c:74
+#: ../clients/cli/connections.c:64
msgid "READONLY"
msgstr "READONLY"
@@ -488,16 +529,17 @@ msgstr "READONLY"
#. 2
#. 15
#. 5
-#: ../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
+#: ../clients/cli/connections.c:65 ../clients/cli/connections.c:178
+#: ../clients/cli/devices.c:43 ../clients/cli/devices.c:158
+#: ../clients/cli/devices.c:174
msgid "DBUS-PATH"
msgstr "DBUS-PATH"
#. 7
#. 13
#. 4
-#: ../cli/src/connections.c:76 ../cli/src/devices.c:185
-#: ../cli/src/devices.c:202
+#: ../clients/cli/connections.c:66 ../clients/cli/devices.c:156
+#: ../clients/cli/devices.c:173
msgid "ACTIVE"
msgstr "ACTIVE"
@@ -505,8 +547,9 @@ msgstr "ACTIVE"
#. 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
+#: ../clients/cli/connections.c:67 ../clients/cli/devices.c:40
+#: ../clients/cli/devices.c:56 ../clients/cli/devices.c:155
+#: ../clients/cli/devices.c:172
msgid "DEVICE"
msgstr "DEVICE"
@@ -515,145 +558,119 @@ msgstr "DEVICE"
#. 1
#. 9
#. 1
-#: ../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
+#: ../clients/cli/connections.c:68 ../clients/cli/connections.c:173
+#: ../clients/cli/devices.c:42 ../clients/cli/devices.c:65
+#: ../clients/cli/network-manager.c:37
msgid "STATE"
msgstr "STATE"
#. 10
-#: ../cli/src/connections.c:79
-#| msgid "MASTER-PATH"
+#: ../clients/cli/connections.c:69
msgid "ACTIVE-PATH"
msgstr "ACTIVE-PATH"
#. 2
-#: ../cli/src/connections.c:182
+#: ../clients/cli/connections.c:172
msgid "DEVICES"
msgstr "DEVICES"
#. 4
-#: ../cli/src/connections.c:184
+#: ../clients/cli/connections.c:174
msgid "DEFAULT"
msgstr "DEFAULT"
#. 5
-#: ../cli/src/connections.c:185
+#: ../clients/cli/connections.c:175
msgid "DEFAULT6"
msgstr "DEFAULT6"
#. 6
-#: ../cli/src/connections.c:186
+#: ../clients/cli/connections.c:176
msgid "SPEC-OBJECT"
msgstr "SPEC-OBJECT"
#. 7
#. 4
-#: ../cli/src/connections.c:187 ../cli/src/connections.c:225
-#: ../tui/nm-editor-utils.c:243 ../tui/nmt-connect-connection-list.c:343
+#. Ask for optional 'vpn' arguments.
+#: ../clients/cli/connections.c:177 ../clients/cli/connections.c:215
+#: ../clients/cli/connections.c:3450 ../clients/tui/nm-editor-utils.c:234
+#: ../clients/tui/nmt-connect-connection-list.c:409
msgid "VPN"
msgstr "VPN"
#. 9
#. 5
-#. 18
-#: ../cli/src/connections.c:189 ../cli/src/devices.c:77
-#: ../cli/src/devices.c:105
+#. 19
+#: ../clients/cli/connections.c:179 ../clients/cli/devices.c:46
+#: ../clients/cli/devices.c:75
msgid "CON-PATH"
msgstr "CON-PATH"
#. 10
-#: ../cli/src/connections.c:190
+#: ../clients/cli/connections.c:180
msgid "ZONE"
msgstr "ZONE"
#. 11
-#: ../cli/src/connections.c:191
+#: ../clients/cli/connections.c:181
msgid "MASTER-PATH"
msgstr "MASTER-PATH"
#. 1
-#: ../cli/src/connections.c:203
+#: ../clients/cli/connections.c:193
msgid "USERNAME"
msgstr "USERNAME"
#. 2
-#: ../cli/src/connections.c:204
+#: ../clients/cli/connections.c:194
msgid "GATEWAY"
msgstr "GATEWAY"
#. 3
-#: ../cli/src/connections.c:205
+#: ../clients/cli/connections.c:195
msgid "BANNER"
msgstr "BANNER"
#. 4
-#: ../cli/src/connections.c:206
+#: ../clients/cli/connections.c:196
msgid "VPN-STATE"
msgstr "VPN-STATE"
#. 5
-#: ../cli/src/connections.c:207
+#: ../clients/cli/connections.c:197
msgid "CFG"
msgstr "CFG"
-#: ../cli/src/connections.c:220 ../cli/src/devices.c:236
+#: ../clients/cli/connections.c:210 ../clients/cli/devices.c:207
msgid "GENERAL"
msgstr "GENERAL"
#. 0
#. 6
-#: ../cli/src/connections.c:221 ../cli/src/devices.c:243
+#: ../clients/cli/connections.c:211 ../clients/cli/devices.c:214
msgid "IP4"
msgstr "IP4"
#. 1
#. 7
-#: ../cli/src/connections.c:222 ../cli/src/devices.c:244
+#: ../clients/cli/connections.c:212 ../clients/cli/devices.c:215
msgid "DHCP4"
msgstr "DHCP4"
#. 2
#. 8
-#: ../cli/src/connections.c:223 ../cli/src/devices.c:245
+#: ../clients/cli/connections.c:213 ../clients/cli/devices.c:216
msgid "IP6"
msgstr "IP6"
#. 3
#. 9
-#: ../cli/src/connections.c:224 ../cli/src/devices.c:246
+#: ../clients/cli/connections.c:214 ../clients/cli/devices.c:217
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>]\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"
+#: ../clients/cli/connections.c:249
+#, c-format
msgid ""
"Usage: nmcli connection { COMMAND | help }\n"
"\n"
@@ -670,7 +687,8 @@ msgid ""
"\n"
" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
"\n"
-" modify [id | uuid | path] <ID> <setting>.<property> <value>\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"
@@ -697,7 +715,8 @@ msgstr ""
"\n"
" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
"\n"
-" modify [id | uuid | path] <ID> <setting>.<property> <value>\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"
@@ -709,7 +728,7 @@ msgstr ""
" load <filename> [ <filename>... ]\n"
"\n"
-#: ../cli/src/connections.c:283
+#: ../clients/cli/connections.c:271
#, c-format
msgid ""
"Usage: nmcli connection show { ARGUMENTS | help }\n"
@@ -746,16 +765,14 @@ msgstr ""
"\n"
"ARGUMENTS := [--active] [id | uuid | path | apath] <ID> ...\n"
"\n"
-"निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ जोडणà¥à¤¯à¤¾à¤‚करिता तपशील दाखवा. पूरà¥à¤µà¤¨à¤¿à¤°à¥à¤§à¤¾à¤°à¤¿à¤¤à¤ªà¤£à¥‡, दोनà¥à¤¹à¥€ सà¥à¤Ÿà¥…टिक"
-"संरचना\n"
+"निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ जोडणà¥à¤¯à¤¾à¤‚करिता तपशील दाखवा. पूरà¥à¤µà¤¨à¤¿à¤°à¥à¤§à¤¾à¤°à¤¿à¤¤à¤ªà¤£à¥‡, दोनà¥à¤¹à¥€ सà¥à¤Ÿà¥…टिकसंरचना\n"
"आणि सकà¥à¤°à¥€à¤¯ जोडणी माहिती दाखविली जाते. गà¥à¤²à¥‹à¤¬à¤² '--fields' परà¥à¤¯à¤¾à¤¯à¤šà¤¾ वापर करून "
"आउटपà¥à¤Ÿ\n"
-"फिलà¥à¤Ÿà¤° करणे शकà¥à¤¯ आहे. अधिक माहितीकरिता "
-"मॅन पृषà¥à¤  पहा.\n"
+"फिलà¥à¤Ÿà¤° करणे शकà¥à¤¯ आहे. अधिक माहितीकरिता मॅन पृषà¥à¤  पहा.\n"
"--active परà¥à¤¯à¤¾à¤¯ निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ केलà¥à¤¯à¤¾à¤µà¤°, फकà¥à¤¤ सकà¥à¤°à¥€à¤¯ पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤²à¥à¤¸à¤šà¤¾à¤š विचार\n"
"होतो.\n"
-#: ../cli/src/connections.c:305
+#: ../clients/cli/connections.c:293
#, c-format
msgid ""
"Usage: nmcli connection up { ARGUMENTS | help }\n"
@@ -782,8 +799,7 @@ msgstr ""
"ARGUMENTS := [id | uuid | path] <ID> [ifname <ifname>] [ap <BSSID>] [nsp "
"<name>]\n"
"\n"
-"साधनावरील जोडणी सकà¥à¤°à¥€à¤¯ करा. सकà¥à¤°à¥€à¤¯à¤œà¥‹à¤—ी पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² "
-"तà¥à¤¯à¤¾à¤šà¥à¤¯à¤¾\n"
+"साधनावरील जोडणी सकà¥à¤°à¥€à¤¯ करा. सकà¥à¤°à¥€à¤¯à¤œà¥‹à¤—ी पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² तà¥à¤¯à¤¾à¤šà¥à¤¯à¤¾\n"
"नाव, UUID किंवा D-Bus मारà¥à¤—दà¥à¤µà¤¾à¤°à¥‡ ओळखले जाते.\n"
"\n"
"ARGUMENTS := ifname <ifname> [ap <BSSID>] [nsp <name>]\n"
@@ -796,7 +812,7 @@ msgstr ""
"nsp - जोडणीसाठीचे NSP ठरवतो (फकà¥à¤¤ वायमॅकà¥à¤¸à¤•à¤°à¤¿à¤¤à¤¾à¤š वैध)\n"
"\n"
-#: ../cli/src/connections.c:326
+#: ../clients/cli/connections.c:314
#, c-format
msgid ""
"Usage: nmcli connection down { ARGUMENTS | help }\n"
@@ -818,89 +834,8 @@ msgstr ""
"UUID किंवा D-Bus मारà¥à¤—दà¥à¤µà¤¾à¤°à¥‡ निषà¥à¤•à¥à¤°à¥€à¤¯à¤œà¥‹à¤—ी पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² ओळखले जाते.\n"
"\n"
-#: ../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"
+#: ../clients/cli/connections.c:327
+#, c-format
msgid ""
"Usage: nmcli connection add { ARGUMENTS | help }\n"
"\n"
@@ -912,6 +847,8 @@ msgid ""
" [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"
@@ -965,11 +902,11 @@ msgid ""
" [arp-interval <num>]\n"
" [arp-ip-target <num>]\n"
"\n"
-" bond-slave: master <master (ifname or connection UUID)>\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)>\n"
+" team-slave: master <master (ifname, or connection UUID or name)>\n"
" [config <file>|<raw JSON data>]\n"
"\n"
" bridge: [stp yes|no]\n"
@@ -978,13 +915,15 @@ msgid ""
" [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)>\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"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan|libreswan|"
+"ssh|l2tp|iodine|...\n"
" [user <username>]\n"
"\n"
" olpc-mesh: ssid <SSID>\n"
@@ -1006,6 +945,8 @@ msgstr ""
" [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"
@@ -1059,11 +1000,11 @@ msgstr ""
" [arp-interval <num>]\n"
" [arp-ip-target <num>]\n"
"\n"
-" bond-slave: master <master (ifname or connection UUID)>\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)>\n"
+" team-slave: master <master (ifname, or connection UUID or name)>\n"
" [config <file>|<raw JSON data>]\n"
"\n"
" bridge: [stp yes|no]\n"
@@ -1072,13 +1013,15 @@ msgstr ""
" [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)>\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"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan|libreswan|"
+"ssh|l2tp|iodine|...\n"
" [user <username>]\n"
"\n"
" olpc-mesh: ssid <SSID>\n"
@@ -1090,28 +1033,57 @@ msgstr ""
" [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
"\n"
-#: ../cli/src/connections.c:416
+#: ../clients/cli/connections.c:406
#, c-format
msgid ""
"Usage: nmcli connection modify { ARGUMENTS | help }\n"
"\n"
-"ARGUMENTS := [id | uuid | path] <ID> <setting name>.<property name> "
-"[<value>]\n"
+"ARGUMENTS := [id | uuid | path] <ID> ([+|-]<setting>.<property> <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"
+"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 { ARGUMENTS | help }\n"
"\n"
-"ARGUMENTS := [id | uuid | path] <ID> <setting name>.<property name> "
-"[<value>]\n"
+"ARGUMENTS := [id | uuid | path] <ID> ([+|-]<setting>.<property> <value>)+\n"
"\n"
-"जोडणी पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤²à¤®à¤§à¥€à¤² à¤à¤• गà¥à¤£à¤§à¤°à¥à¤® संपादित करा.\n"
-"नाव, UUID किंवा D-Bus मारà¥à¤—दà¥à¤µà¤¾à¤°à¥‡ पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² ओळखले जाते.\n"
+"जोडणी पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤²à¤šà¥‡ à¤à¤• किंवा तà¥à¤¯à¤¾à¤ªà¥‡à¤•à¥à¤·à¤¾ जासà¥à¤¤ गà¥à¤£à¤§à¤°à¥à¤® संपादित करा.\n"
+"पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤²à¤²à¤¾ तà¥à¤¯à¤¾à¤šà¥à¤¯à¤¾ नाव, UUID किंवा D-Bus मारà¥à¤—सह ओळखले जाते. बहà¥-मूलà¥à¤¯\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:428
+#: ../clients/cli/connections.c:430
#, c-format
msgid ""
"Usage: nmcli connection edit { ARGUMENTS | help }\n"
@@ -1138,7 +1110,7 @@ msgstr ""
"संवादासà¥à¤ªà¤¦ संपादकात नवीन जोडणी पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² समाविषà¥à¤Ÿ करा.\n"
"\n"
-#: ../cli/src/connections.c:444
+#: ../clients/cli/connections.c:446
#, c-format
msgid ""
"Usage: nmcli connection delete { ARGUMENTS | help }\n"
@@ -1157,7 +1129,7 @@ msgstr ""
"नाव, UUID किंवा D-Bus मारà¥à¤—दà¥à¤µà¤¾à¤°à¥‡ पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² ओळखले जाते.\n"
"\n"
-#: ../cli/src/connections.c:456
+#: ../clients/cli/connections.c:458
#, c-format
msgid ""
"Usage: nmcli connection reload { help }\n"
@@ -1170,7 +1142,7 @@ msgstr ""
"डिसà¥à¤•à¤ªà¤¾à¤¸à¥‚न सरà¥à¤µ जोडणी फाइलà¥à¤¸ पà¥à¤¨à¥à¤¹à¤¾ लोड करा.\n"
"\n"
-#: ../cli/src/connections.c:465
+#: ../clients/cli/connections.c:467
#, c-format
msgid ""
"Usage: nmcli connection load { ARGUMENTS | help }\n"
@@ -1188,863 +1160,811 @@ msgstr ""
"ARGUMENTS := <filename> [<filename>...]\n"
"\n"
"डिसà¥à¤•à¤ªà¤¾à¤¸à¥‚न लोड किंवा पà¥à¤¨à¥à¤¹à¤¾ लोड करा. जोडणी फाइल सà¥à¤µà¤¤à¤ƒ संपादित केलà¥à¤¯à¤¾à¤¨à¤‚तर\n"
-"याचा वापर करा आणि NetworkManagerला या"
-"सरà¥à¤µà¤¾à¤¤ नवीन\n"
+"याचा वापर करा आणि NetworkManagerला यासरà¥à¤µà¤¾à¤¤ नवीन\n"
"सà¥à¤¤à¤°à¤µà¤¿à¤·à¤¯à¥€ माहिती आहे, याची खातà¥à¤°à¥€ करा.\n"
"\n"
-#: ../cli/src/connections.c:523
+#: ../clients/cli/connections.c:538
msgid "activating"
msgstr "बंद करत आहे"
-#: ../cli/src/connections.c:525
+#: ../clients/cli/connections.c:540
msgid "activated"
msgstr "सकà¥à¤°à¤¿à¤¯ केले"
-#: ../cli/src/connections.c:529
+#: ../clients/cli/connections.c:544
msgid "deactivated"
msgstr "निषà¥à¤•à¥à¤°à¥€à¤¯ केले"
-#: ../cli/src/connections.c:541
+#: ../clients/cli/connections.c:556
msgid "VPN connecting (prepare)"
msgstr "VPN जोडणी (तयार करा)"
-#: ../cli/src/connections.c:543
+#: ../clients/cli/connections.c:558
msgid "VPN connecting (need authentication)"
msgstr "VPN जोडणी (ओळख पटवणे आवशà¥à¤¯à¤• आहे)"
-#: ../cli/src/connections.c:545
+#: ../clients/cli/connections.c:560
msgid "VPN connecting"
msgstr "VPN जोडणी"
-#: ../cli/src/connections.c:547
+#: ../clients/cli/connections.c:562
msgid "VPN connecting (getting IP configuration)"
msgstr "VPN जोडणी (IP संरचना पà¥à¤°à¤¾à¤ªà¥à¤¤ करत आहे)"
-#: ../cli/src/connections.c:549
+#: ../clients/cli/connections.c:564
msgid "VPN connected"
msgstr "VPN जोडणी यशसà¥à¤µà¥€"
-#: ../cli/src/connections.c:551
+#: ../clients/cli/connections.c:566
msgid "VPN connection failed"
msgstr "VPN जोडणी अपयशी"
-#: ../cli/src/connections.c:553
+#: ../clients/cli/connections.c:568
msgid "VPN disconnected"
msgstr "VPN जोडणी खंडीत à¤à¤¾à¤²à¥€"
-#: ../cli/src/connections.c:636
-#| msgid "Connection details"
+#: ../clients/cli/connections.c:651
msgid "Connection profile details"
msgstr "जोडणी पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤²à¤šà¥‡ तपशील"
-#: ../cli/src/connections.c:648 ../cli/src/connections.c:1045
+#: ../clients/cli/connections.c:663 ../clients/cli/connections.c:1015
#, c-format
-#| msgid "Error: 'device show': %s"
msgid "Error: 'connection show': %s"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'connection show': %s"
-#: ../cli/src/connections.c:842
+#: ../clients/cli/connections.c:807
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
+#: ../clients/cli/connections.c:808 ../clients/cli/connections.c:809
+#: ../clients/cli/connections.c:811 ../clients/cli/connections.c:870
+#: ../clients/cli/connections.c:871 ../clients/cli/connections.c:873
+#: ../clients/cli/connections.c:2786 ../clients/cli/connections.c:6472
+#: ../clients/cli/connections.c:6473 ../clients/cli/devices.c:591
+#: ../clients/cli/devices.c:641 ../clients/cli/devices.c:784
+#: ../clients/cli/devices.c:785 ../clients/cli/devices.c:786
+#: ../clients/cli/devices.c:787 ../clients/cli/devices.c:820
+#: ../clients/cli/devices.c:822 ../clients/cli/devices.c:850
+#: ../clients/cli/devices.c:851 ../clients/cli/devices.c:852
+#: ../clients/cli/devices.c:853 ../clients/cli/devices.c:854
+#: ../clients/cli/devices.c:855 ../clients/cli/devices.c:856
+#: ../clients/cli/network-manager.c:440
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
+#: ../clients/cli/connections.c:808 ../clients/cli/connections.c:809
+#: ../clients/cli/connections.c:811 ../clients/cli/connections.c:870
+#: ../clients/cli/connections.c:871 ../clients/cli/connections.c:873
+#: ../clients/cli/connections.c:2787 ../clients/cli/connections.c:6472
+#: ../clients/cli/connections.c:6473 ../clients/cli/devices.c:591
+#: ../clients/cli/devices.c:641 ../clients/cli/devices.c:784
+#: ../clients/cli/devices.c:785 ../clients/cli/devices.c:786
+#: ../clients/cli/devices.c:787 ../clients/cli/devices.c:820
+#: ../clients/cli/devices.c:822 ../clients/cli/devices.c:850
+#: ../clients/cli/devices.c:851 ../clients/cli/devices.c:852
+#: ../clients/cli/devices.c:853 ../clients/cli/devices.c:854
+#: ../clients/cli/devices.c:855 ../clients/cli/devices.c:856
+#: ../clients/cli/network-manager.c:442
msgid "no"
msgstr "नाही"
-#: ../cli/src/connections.c:901 ../cli/src/connections.c:911
-#: ../cli/src/devices.c:594
+#: ../clients/cli/connections.c:866 ../clients/cli/connections.c:876
+#: ../clients/cli/devices.c:581
msgid "N/A"
msgstr "N/A"
-#: ../cli/src/connections.c:1033
-#| msgid "Active connection details"
+#: ../clients/cli/connections.c:1003
msgid "Activate connection details"
msgstr "जोडणी तपशील सकà¥à¤°à¥€à¤¯ करा"
-#: ../cli/src/connections.c:1266
+#: ../clients/cli/connections.c:1236
#, c-format
msgid "invalid field '%s'; allowed fields: %s and %s, or %s,%s"
msgstr "अवैध कà¥à¤·à¥‡à¤¤à¥à¤° '%s'; सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ कà¥à¤·à¥‡à¤¤à¥à¤°: %s आणि %s, किंवा %s,%s"
-#: ../cli/src/connections.c:1281 ../cli/src/connections.c:1289
+#: ../clients/cli/connections.c:1251 ../clients/cli/connections.c:1259
#, c-format
-#| msgid "field '%s' has to be alone"
-msgid "'%s' has to be alone'"
-msgstr "'%s' वेगळे असायला हवे"
+msgid "'%s' has to be alone"
+msgstr "'%s' सà¥à¤µà¤¤à¤‚तà¥à¤° पाहिजे"
-#: ../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
+#: ../clients/cli/connections.c:1290 ../clients/cli/connections.c:2004
+#: ../clients/cli/connections.c:2064 ../clients/cli/connections.c:7973
+#: ../clients/cli/connections.c:8181 ../clients/cli/connections.c:8274
+#: ../clients/cli/connections.c:8302 ../clients/cli/devices.c:1186
+#: ../clients/cli/devices.c:1234 ../clients/cli/devices.c:1397
+#: ../clients/cli/devices.c:1531 ../clients/cli/devices.c:1625
+#: ../clients/cli/devices.c:1767 ../clients/cli/devices.c:2225
+#: ../clients/cli/devices.c:2524 ../clients/cli/network-manager.c:482
#, c-format
msgid "Error: NetworkManager is not running."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: NetworkManager कारà¥à¤¯à¤°à¤¤ नाही."
#. Add headers
-#: ../cli/src/connections.c:1350
-#| msgid "NetworkManager status"
+#: ../clients/cli/connections.c:1320
msgid "NetworkManager active profiles"
msgstr "NetworkManager सकà¥à¤°à¥€à¤¯ पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤²à¥à¤¸"
-#: ../cli/src/connections.c:1351
-#| msgid "NetworkManager went to sleep"
+#: ../clients/cli/connections.c:1321
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
+#: ../clients/cli/connections.c:1358 ../clients/cli/connections.c:1949
+#: ../clients/cli/connections.c:1965 ../clients/cli/connections.c:1974
+#: ../clients/cli/connections.c:1984 ../clients/cli/connections.c:2081
+#: ../clients/cli/connections.c:7989 ../clients/cli/connections.c:8212
+#: ../clients/cli/devices.c:1725 ../clients/cli/devices.c:1733
+#: ../clients/cli/devices.c:2138 ../clients/cli/devices.c:2145
+#: ../clients/cli/devices.c:2159 ../clients/cli/devices.c:2166
+#: ../clients/cli/devices.c:2183 ../clients/cli/devices.c:2191
+#: ../clients/cli/devices.c:2387 ../clients/cli/devices.c:2483
+#: ../clients/cli/devices.c:2490
#, c-format
msgid "Error: %s argument is missing."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: %s बाब आढळले नाही."
-#: ../cli/src/connections.c:1439
+#: ../clients/cli/connections.c:1409
#, c-format
-#| msgid "Error: %s - no such connection."
msgid "Error: %s - no such connection profile."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: %s - यापà¥à¤°à¤•à¤¾à¤°à¤šà¥‡ जोडणी पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² नाही."
-#: ../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
+#: ../clients/cli/connections.c:1425 ../clients/cli/connections.c:2017
+#: ../clients/cli/connections.c:8280 ../clients/cli/connections.c:8321
+#: ../clients/cli/connections.c:8513 ../clients/cli/devices.c:2366
+#: ../clients/cli/devices.c:2829 ../clients/cli/network-manager.c:537
+#: ../clients/cli/network-manager.c:580 ../clients/cli/network-manager.c:597
+#: ../clients/cli/network-manager.c:644 ../clients/cli/network-manager.c:658
+#: ../clients/cli/network-manager.c:775 ../clients/cli/network-manager.c:819
+#: ../clients/cli/network-manager.c:839
#, c-format
msgid "Error: %s."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: %s."
-#: ../cli/src/connections.c:1550
+#: ../clients/cli/connections.c:1520
#, c-format
msgid "no active connection on device '%s'"
msgstr "साधन '%s' वरील सकà¥à¤°à¤¿à¤¯ जोडणी आढळली नाही"
-#: ../cli/src/connections.c:1558
+#: ../clients/cli/connections.c:1528
msgid "no active connection or device"
msgstr "सकà¥à¤°à¤¿à¤¯ जोडणी किंवा साधन आढळले नाही"
-#: ../cli/src/connections.c:1629
+#: ../clients/cli/connections.c:1599
#, c-format
msgid "device '%s' not compatible with connection '%s'"
msgstr "साधन '%s' जोडणी '%s' सह सहतà¥à¤µ नाही"
-#: ../cli/src/connections.c:1632
+#: ../clients/cli/connections.c:1602
#, c-format
msgid "no device found for connection '%s'"
msgstr "जोडणी '%s' करीता साधन आढळले नाही"
-#: ../cli/src/connections.c:1644
+#: ../clients/cli/connections.c:1614
msgid "unknown reason"
msgstr "अपरिचीत कारण"
-#: ../cli/src/connections.c:1646 ../cli/src/network-manager.c:288
+#: ../clients/cli/connections.c:1616 ../clients/cli/network-manager.c:286
msgid "none"
msgstr "काहिच नाही"
-#: ../cli/src/connections.c:1648
+#: ../clients/cli/connections.c:1618
msgid "the user was disconnected"
msgstr "वापरकरà¥à¤¤à¤¾ खंडीत à¤à¤¾à¤²à¥‡"
-#: ../cli/src/connections.c:1650
+#: ../clients/cli/connections.c:1620
msgid "the base network connection was interrupted"
msgstr "बेस नेटवरà¥à¤• जोडणी खंडीत à¤à¤¾à¤²à¥‡"
-#: ../cli/src/connections.c:1652
+#: ../clients/cli/connections.c:1622
msgid "the VPN service stopped unexpectedly"
msgstr "VPN सेवा अनपेकà¥à¤·à¥€à¤¤à¤°à¤¿à¤¤à¥à¤¯à¤¾ थांबली"
-#: ../cli/src/connections.c:1654
+#: ../clients/cli/connections.c:1624
msgid "the VPN service returned invalid configuration"
msgstr "VPN सेवाने अवैध संरचना रिटरà¥à¤¨ केली"
-#: ../cli/src/connections.c:1656
+#: ../clients/cli/connections.c:1626
msgid "the connection attempt timed out"
msgstr "जोडणी पà¥à¤°à¤¯à¤¤à¥à¤¨à¤¾à¤šà¥€ वेळ समापà¥à¤¤à¥€ आढळली"
-#: ../cli/src/connections.c:1658
+#: ../clients/cli/connections.c:1628
msgid "the VPN service did not start in time"
msgstr "VPN सेवा वेळेवर सà¥à¤°à¥‚ à¤à¤¾à¤²à¥€ नाही"
-#: ../cli/src/connections.c:1660
+#: ../clients/cli/connections.c:1630
msgid "the VPN service failed to start"
msgstr "VPN सेवा सà¥à¤°à¥‚ होणà¥à¤¯à¤¾à¤¸ अपयशी"
-#: ../cli/src/connections.c:1662
+#: ../clients/cli/connections.c:1632
msgid "no valid VPN secrets"
msgstr "वैध VPN गोपणीयता आढळले नाही"
-#: ../cli/src/connections.c:1664
+#: ../clients/cli/connections.c:1634
msgid "invalid VPN secrets"
msgstr "अवैध VPN गोपणीयता"
-#: ../cli/src/connections.c:1666
+#: ../clients/cli/connections.c:1636
msgid "the connection was removed"
msgstr "जोडणी काढून टाकली"
-#: ../cli/src/connections.c:1683 ../cli/src/connections.c:1839
-#: ../cli/src/connections.c:6224
+#: ../clients/cli/connections.c:1658 ../clients/cli/connections.c:1686
+#: ../clients/cli/connections.c:1831 ../clients/cli/connections.c:6368
#, c-format
msgid "Connection successfully activated (D-Bus active path: %s)\n"
msgstr "जोडणी यशसà¥à¤µà¥€à¤°à¤¿à¤¤à¥à¤¯à¤¾ सà¥à¤°à¥‚ केले (D-Bus सकà¥à¤°à¤¿à¤¯ मारà¥à¤—: %s)\n"
-#: ../cli/src/connections.c:1688
+#: ../clients/cli/connections.c:1665
+#, c-format
+msgid ""
+"Connection successfully activated (master waiting for slaves) (D-Bus active "
+"path: %s)\n"
+msgstr ""
+"जोडणी यशसà¥à¤µà¥€à¤°à¤¿à¤¤à¥à¤¯à¤¾ सà¥à¤°à¥‚ केली (मासà¥à¤Ÿà¤° सà¥à¤²à¥‡à¤µà¥à¤œà¤•à¤°à¤¿à¤¤à¤¾ वाट पाहत आहे) (D-Bus सकà¥à¤°à¥€à¤¯ "
+"मारà¥à¤—: "
+"%s)\n"
+
+#: ../clients/cli/connections.c:1669 ../clients/cli/connections.c:1691
#, c-format
msgid "Error: Connection activation failed."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: जोडणी सकà¥à¤°à¤¿à¤¯ करणà¥à¤¯à¤¾à¤¸ अपयशी."
-#: ../cli/src/connections.c:1713
+#: ../clients/cli/connections.c:1734
#, c-format
msgid "VPN connection successfully activated (D-Bus active path: %s)\n"
msgstr "VPN जोडणी यशसà¥à¤µà¥€à¤°à¤¿à¤¤à¥à¤¯à¤¾ सà¥à¤°à¥‚ केले (D-Bus सकà¥à¤°à¤¿à¤¯ मारà¥à¤—: %s)\n"
-#: ../cli/src/connections.c:1720
+#: ../clients/cli/connections.c:1741
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: जोडणी सकà¥à¤°à¤¿à¤¯ करणà¥à¤¯à¤¾à¤¸ अपयशी: %s."
-#: ../cli/src/connections.c:1738 ../cli/src/devices.c:1294
+#: ../clients/cli/connections.c:1759 ../clients/cli/devices.c:1283
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: वेळसमापà¥à¤¤à¥€ %d सेकंद समापà¥à¤¤."
-#: ../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
+#: ../clients/cli/connections.c:1815
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: जोडणी सकà¥à¤°à¤¿à¤¯ करणà¥à¤¯à¤¾à¤¸ अपयशी: %s"
-#: ../cli/src/connections.c:1928 ../cli/src/connections.c:2060
-#| msgid "(unknown error)"
+#: ../clients/cli/connections.c:1888 ../clients/cli/connections.c:2018
msgid "unknown error"
msgstr "अपरिचीत तà¥à¤°à¥à¤Ÿà¥€"
-#: ../cli/src/connections.c:1936
+#: ../clients/cli/connections.c:1896
#, c-format
-#| msgid "Unknown log level '%s'"
msgid "unknown device '%s'."
msgstr "अपरिचीत साधन '%s'."
-#: ../cli/src/connections.c:1941
-#| msgid "no active connection or device"
+#: ../clients/cli/connections.c:1901
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:2035 ../cli/src/devices.c:1171
-#: ../cli/src/devices.c:1647 ../cli/src/devices.c:2092
-#: ../cli/src/devices.c:2386
+#: ../clients/cli/connections.c:1993 ../clients/cli/devices.c:1160
+#: ../clients/cli/devices.c:1739 ../clients/cli/devices.c:2202
+#: ../clients/cli/devices.c:2496
#, c-format
msgid "Unknown parameter: %s\n"
msgstr "अपरिचीत घटक: %s\n"
-#: ../cli/src/connections.c:2068
+#: ../clients/cli/connections.c:2026
msgid "preparing"
msgstr "तयार करत आहे"
-#: ../cli/src/connections.c:2096 ../cli/src/connections.c:7928
-#: ../cli/src/connections.c:8043
+#: ../clients/cli/connections.c:2054 ../clients/cli/connections.c:8193
+#: ../clients/cli/connections.c:8308
#, c-format
msgid "Error: No connection specified."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: जोडणी निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ केली नाही."
-#: ../cli/src/connections.c:2133
+#: ../clients/cli/connections.c:2091
#, c-format
msgid "Error: '%s' is not an active connection."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s' सकà¥à¤°à¥€à¤¯ जोडणी नाही."
-#: ../cli/src/connections.c:2445 ../cli/src/utils.c:507
+#: ../clients/cli/connections.c:2392 ../clients/cli/utils.c:514
#, c-format
msgid "'%s' not among [%s]"
msgstr "'%s' हे [%s] पैकी नाही"
-#: ../cli/src/connections.c:2527
+#: ../clients/cli/connections.c:2471
#, c-format
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
+#. Ask for optional arguments
+#: ../clients/cli/connections.c:2472 ../clients/cli/connections.c:2902
+#: ../clients/tui/nm-editor-utils.c:164 ../libnm-core/nm-connection.c:1509
+#: ../libnm-glib/nm-device.c:1800
msgid "InfiniBand"
msgstr "इंफिनिबà¤à¤¡"
-#: ../cli/src/connections.c:2528 ../tui/nm-editor-utils.c:156
-#: ../tui/nm-ui-utils.c:335
+#: ../clients/cli/connections.c:2472 ../clients/tui/nm-editor-utils.c:147
+#: ../libnm-glib/nm-device.c:1788
msgid "Ethernet"
msgstr "इथरनेट"
-#: ../cli/src/connections.c:2551
+#: ../clients/cli/connections.c:2492
#, c-format
-#| msgid "Error: 'mtu': '%s' is not valid."
msgid "Error: 'mtu': '%s' is not a valid MTU."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'mtu': '%s' वैध MTU नाही."
-#: ../cli/src/connections.c:2567
+#: ../clients/cli/connections.c:2508
#, c-format
msgid "Error: 'parent': '%s' is not a valid interface name."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'parent': '%s' वैध इंटरफेस नाही."
-#: ../cli/src/connections.c:2588
+#: ../clients/cli/connections.c:2529
#, c-format
-#| 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:2604
+#: ../clients/cli/connections.c:2558
#, 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 ""
"तà¥à¤°à¥à¤Ÿà¥€: 'mode': '%s' वैध इनफिनिबà¤à¤¡ टà¥à¤°à¤¾à¤à¤¸à¤ªà¥‹à¤°à¥à¤Ÿ मोड [डाटागà¥à¤°à¤¾à¤®, जà¥à¤³à¤²à¥‡à¤²à¥‡]."
-#: ../cli/src/connections.c:2620
+#: ../clients/cli/connections.c:2572
#, c-format
msgid "Error: 'flags': '%s' is not valid; use <0-7>."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'फà¥à¤²à¥…गà¥à¤¸': '%s' वैध नाही; <0-7>चा वापर करा."
-#: ../cli/src/connections.c:2642
+#: ../clients/cli/connections.c:2594
#, c-format
-#| msgid "Error: 'egress': '%s' is not valid; %s "
msgid "Error: '%s': '%s' is not valid; %s "
msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s': '%s' वैध नाही; %s "
-#: ../cli/src/connections.c:2749
+#: ../clients/cli/connections.c:2777
#, 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> याचा वापर करा."
-#: ../cli/src/connections.c:2763
+#. Ask for optional arguments.
+#: ../clients/cli/connections.c:2833
+#, 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] "'%2$s' जोडणी पà¥à¤°à¤•à¤¾à¤°à¤•à¤°à¤¿à¤¤à¤¾ %1$d वैकलà¥à¤ªà¤¿à¤• बाब.\n"
+msgstr[1] "'%2$s' जोडणी पà¥à¤°à¤•à¤¾à¤°à¤•à¤°à¤¿à¤¤à¤¾ %1$d वैकलà¥à¤ªà¤¿à¤• बाबी.\n"
+
+#: ../clients/cli/connections.c:2836
+#, c-format
+msgid "Do you want to provide it? %s"
+msgid_plural "Do you want to provide them? %s"
+msgstr[0] "तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ ते पà¥à¤°à¤µà¤¾à¤¯à¤šà¥‡? %s"
+msgstr[1] "तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ तà¥à¤¯à¤¾à¤‚ना पà¥à¤°à¤µà¤¾à¤¯à¤šà¥‡? %s"
+
+#: ../clients/cli/connections.c:2851
msgid "ethernet"
msgstr "इथरनेट"
-#: ../cli/src/connections.c:2763 ../tui/nm-editor-utils.c:164
-#: ../tui/nm-ui-utils.c:337
+#: ../clients/cli/connections.c:2851 ../clients/tui/nm-editor-utils.c:155
+#: ../libnm-glib/nm-device.c:1790
msgid "Wi-Fi"
msgstr "वाय-फाय"
-#. 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"
-
-#: ../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 "तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ ते पà¥à¤°à¤µà¤¾à¤¯à¤šà¥‡ आहेत? (होय किंवा नाही) [होय] "
-
-#: ../cli/src/connections.c:2775 ../cli/src/connections.c:2829
-#: ../cli/src/connections.c:2956 ../cli/src/connections.c:3057
+#: ../clients/cli/connections.c:2859 ../clients/cli/connections.c:2907
+#: ../clients/cli/connections.c:3016 ../clients/cli/connections.c:3095
msgid "MTU [auto]: "
msgstr "MTU [auto]: "
-#: ../cli/src/connections.c:2786 ../cli/src/connections.c:2840
-#: ../cli/src/connections.c:2919 ../cli/src/connections.c:2967
+#: ../clients/cli/connections.c:2870 ../clients/cli/connections.c:2918
+#: ../clients/cli/connections.c:2988 ../clients/cli/connections.c:3027
+#: ../clients/cli/connections.c:3382
msgid "MAC [none]: "
msgstr "MAC [none]: "
-#: ../cli/src/connections.c:2797
+#: ../clients/cli/connections.c:2881
msgid "Cloned MAC [none]: "
msgstr "कà¥à¤²à¥‹à¤¨ केलेले MAC [none]: "
-#. Ask for optional arguments
-#: ../cli/src/connections.c:2820
+#: ../clients/cli/connections.c:2929
#, c-format
-msgid "There are 5 optional arguments for 'InfiniBand' connection type.\n"
-msgstr "'इनफिनिबà¤à¤¡' जोडणी पà¥à¤°à¤•à¤¾à¤°à¤•à¤°à¤¿à¤¤à¤¾ ५ वैकलà¥à¤ªà¤¿à¤• बाबी आहेत.\n"
-
-#: ../cli/src/connections.c:2851
-msgid "Transport mode (datagram or connected) [datagram]: "
-msgstr "टà¥à¤°à¤¾à¤‚सà¥à¤ªà¥‹à¤°à¥à¤Ÿ मोड (डाटागà¥à¤°à¤¾à¤® किंवा जोडणी केलेले) [डाटागà¥à¤°à¤¾à¤®]: "
+msgid "Transport mode %s"
+msgstr "टà¥à¤°à¤¾à¤‚सà¥à¤ªà¥‹à¤°à¥à¤Ÿ मोड %s"
-#: ../cli/src/connections.c:2864
-#| msgid "Interface name: "
+#: ../clients/cli/connections.c:2942
msgid "Parent interface [none]: "
msgstr "पॅरेंट संवाद [काहीही नाही]: "
-#: ../cli/src/connections.c:2875
+#: ../clients/cli/connections.c:2953
msgid "P_KEY [none]: "
msgstr "P_KEY [काहीही नाही]: "
-#: ../cli/src/connections.c:2885
+#: ../clients/cli/connections.c:2963
#, 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 "तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ ते पà¥à¤°à¤µà¤¾à¤¯à¤šà¥‡? (होय किंवा नाही) [होय] "
+#: ../clients/cli/connections.c:2983 ../libnm-glib/nm-device.c:1796
+msgid "WiMAX"
+msgstr "WiMax"
#. 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"
+#: ../clients/cli/connections.c:3006
+msgid "PPPoE"
+msgstr "PPPoE"
-#: ../cli/src/connections.c:2950 ../cli/src/connections.c:2998
-#| msgid "Password: "
+#: ../clients/cli/connections.c:3010 ../clients/cli/connections.c:3048
msgid "Password [none]: "
msgstr "पासवरà¥à¤¡ [none]: "
-#: ../cli/src/connections.c:2952
+#: ../clients/cli/connections.c:3012
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"
+#: ../clients/cli/connections.c:3042
+msgid "mobile broadband"
+msgstr "मोबाईल बà¥à¤°à¥‰à¤¡à¤¬à¤à¤¡"
-#: ../cli/src/connections.c:2996 ../cli/src/connections.c:3441
+#: ../clients/cli/connections.c:3046 ../clients/cli/connections.c:3454
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"
+#: ../clients/cli/connections.c:3061
+msgid "bluetooth"
+msgstr "बà¥à¤²à¥à¤Ÿà¥‚थ"
-#: ../cli/src/connections.c:3021
-msgid "Bluetooth type (panu, dun-gsm or dun-cdma) [panu]: "
-msgstr "बà¥à¤²à¥à¤¯à¥à¤Ÿà¥‚थ पà¥à¤°à¤•à¤¾à¤° (panu, dun-gsm किंवा dun-cdma) [panu]: "
+#: ../clients/cli/connections.c:3068
+#, c-format
+msgid "Bluetooth type %s"
+msgstr "बà¥à¤²à¥à¤Ÿà¥‚थ पà¥à¤°à¤•à¤¾à¤° %s"
-#: ../cli/src/connections.c:3029
+#: ../clients/cli/connections.c:3074
#, 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"
+#. 11
+#: ../clients/cli/connections.c:3090 ../clients/cli/devices.c:219
+#: ../clients/tui/nm-editor-utils.c:218 ../clients/tui/nmt-page-vlan.c:51
+#: ../libnm-core/nm-connection.c:1507 ../libnm-glib/nm-device.c:1808
+#: ../libnm-util/nm-connection.c:1612
+msgid "VLAN"
+msgstr "VLAN"
-#: ../cli/src/connections.c:3068
+#: ../clients/cli/connections.c:3106
msgid "VLAN flags (<0-7>) [none]: "
msgstr "VLAN फà¥à¤²à¥…गà¥à¤œ (<0-7>) [none]: "
-#: ../cli/src/connections.c:3079
+#: ../clients/cli/connections.c:3117
msgid "Ingress priority maps [none]: "
msgstr "इंगà¥à¤°à¥‡à¤¸ पà¥à¤°à¤¾à¤§à¤¾à¤¨à¥à¤¯à¤¤à¤¾ मॅपà¥à¤¸ [none]: "
-#: ../cli/src/connections.c:3090
+#: ../clients/cli/connections.c:3128
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
+#: ../clients/cli/connections.c:3139
msgid "Bonding mode [balance-rr]: "
msgstr "बाà¤à¤¡à¤¿à¤‚ग मोड [balance-rr]: "
-#: ../cli/src/connections.c:3142
+#. Ask for optional 'bond' arguments.
+#: ../clients/cli/connections.c:3154
+msgid "bond"
+msgstr "बाà¤à¤¡"
+
+#: ../clients/cli/connections.c:3176
msgid "Bonding primary interface [none]: "
msgstr "पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤• संवादची बांधणी करत आहे [none]: "
-#: ../cli/src/connections.c:3145
+#: ../clients/cli/connections.c:3179
#, 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]: "
+#: ../clients/cli/connections.c:3187
+#, c-format
+msgid "Bonding monitoring mode %s"
+msgstr "बाà¤à¤¡à¤¿à¤‚ग मॉनिटरिंग मोड %s"
-#: ../cli/src/connections.c:3158
+#: ../clients/cli/connections.c:3193
#, 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
+#: ../clients/cli/connections.c:3202
msgid "Bonding miimon [100]: "
msgstr "miimon [100] ची बांधणी करत आहे: "
-#: ../cli/src/connections.c:3170
+#: ../clients/cli/connections.c:3205
#, 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
+#: ../clients/cli/connections.c:3213
msgid "Bonding downdelay [0]: "
msgstr "downdelay [0] ची बांधणी करत आहे: "
-#: ../cli/src/connections.c:3181
+#: ../clients/cli/connections.c:3216
#, 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
+#: ../clients/cli/connections.c:3224
msgid "Bonding updelay [0]: "
msgstr "updelay [0] ची बांधणी करत आहे: "
-#: ../cli/src/connections.c:3192
+#: ../clients/cli/connections.c:3227
#, 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
+#: ../clients/cli/connections.c:3236
msgid "Bonding arp-interval [0]: "
msgstr "arp-interval [0] ची बांधणी करत आहे: "
-#: ../cli/src/connections.c:3204
+#: ../clients/cli/connections.c:3239
#, 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
+#: ../clients/cli/connections.c:3247
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"
+#: ../clients/cli/connections.c:3267
msgid "Team JSON configuration [none]: "
msgstr "टिम JSON संरचना [काहीही नाही]: "
-#: ../cli/src/connections.c:3259
+#: ../clients/cli/connections.c:3284
msgid "team"
msgstr "टिम"
-#: ../cli/src/connections.c:3265
+#: ../clients/cli/connections.c:3290
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"
+#: ../clients/cli/connections.c:3302
+msgid "bridge"
+msgstr "बà¥à¤°à¤¿à¤œ"
-#: ../cli/src/connections.c:3289
-msgid "Enable STP (yes/no) [yes]: "
-msgstr "STP सà¥à¤°à¥‚ करा (होय किंवा नाही) [होय]: "
+#: ../clients/cli/connections.c:3308
+#, c-format
+msgid "Enable STP %s"
+msgstr "STP %s सà¥à¤°à¥‚ करा"
-#: ../cli/src/connections.c:3293
+#: ../clients/cli/connections.c:3313
#, c-format
-#| msgid "Error: 'stp': %s."
-msgid "Error: 'stp': '%s'.\n"
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'stp': '%s'.\n"
+msgid "Error: 'stp': %s.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'stp': %s.\n"
-#: ../cli/src/connections.c:3301
-msgid "STP priority [128]: "
-msgstr "STP पà¥à¤°à¤¾à¤§à¤¾à¤¨à¥à¤¯à¤¤à¤¾ [128]: "
+#: ../clients/cli/connections.c:3321
+msgid "STP priority [32768]: "
+msgstr "STP पà¥à¤°à¤¾à¤§à¤¾à¤¨à¥à¤¯à¤¤à¤¾ [32768]: "
-#: ../cli/src/connections.c:3305
+#: ../clients/cli/connections.c:3325
#, 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
+#: ../clients/cli/connections.c:3333
msgid "Forward delay [15]: "
msgstr "फॉरवरà¥à¤¡ डिले [15]: "
-#: ../cli/src/connections.c:3317
+#: ../clients/cli/connections.c:3337
#, 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
+#: ../clients/cli/connections.c:3346
msgid "Hello time [2]: "
msgstr "हलो वेळ [2]: "
-#: ../cli/src/connections.c:3330
+#: ../clients/cli/connections.c:3350
#, 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
+#: ../clients/cli/connections.c:3358
msgid "Max age [20]: "
msgstr "कमाल वय [20]: "
-#: ../cli/src/connections.c:3342
+#: ../clients/cli/connections.c:3362
#, 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
+#: ../clients/cli/connections.c:3370
msgid "MAC address ageing time [300]: "
msgstr "MAC पतà¥à¤¤à¤¾ अजिंग वेळ [300]: "
-#: ../cli/src/connections.c:3354
+#: ../clients/cli/connections.c:3374
#, 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"
+#: ../clients/cli/connections.c:3401
+msgid "bridge-slave"
+msgstr "bridge-slave"
-#: ../cli/src/connections.c:3384
+#: ../clients/cli/connections.c:3406
msgid "Bridge port priority [32]: "
msgstr "बà¥à¤°à¤¿à¤œ पोरà¥à¤Ÿ पà¥à¤°à¤¾à¤§à¤¾à¤¨à¥à¤¯à¤¤à¤¾ [32]: "
-#: ../cli/src/connections.c:3397
+#: ../clients/cli/connections.c:3419
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
+#: ../clients/cli/connections.c:3433
#, c-format
-#| msgid "Error: 'hairpin': %s."
-msgid "Error: 'hairpin': '%s'.\n"
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'hairpin': '%s'.\n"
+msgid "Hairpin %s"
+msgstr "हेअरपिन %s"
-#. Ask for optional 'vpn' arguments.
-#: ../cli/src/connections.c:3433
+#: ../clients/cli/connections.c:3438
#, c-format
-#| msgid "Error: missing argument for '%s' option."
-msgid "There is 1 optional argument for 'VPN' connection type.\n"
-msgstr "'VPN' जोडणी पà¥à¤°à¤•à¤¾à¤°à¤•à¤°à¤¿à¤¤à¤¾ १ वैकलà¥à¤ªà¤¿à¤• बाब आहे.\n"
+msgid "Error: 'hairpin': %s.\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'हेअरपिन': %s.\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"
+#: ../clients/cli/connections.c:3465 ../libnm-glib/nm-device.c:1794
+msgid "OLPC Mesh"
+msgstr "OLPC मेश"
-#: ../cli/src/connections.c:3466
+#: ../clients/cli/connections.c:3470
msgid "OLPC Mesh channel [1]: "
msgstr "OLPC मेश वाहिनी [1]: "
-#: ../cli/src/connections.c:3469
+#: ../clients/cli/connections.c:3473
#, 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
+#: ../clients/cli/connections.c:3481
msgid "DHCP anycast MAC address [none]: "
msgstr "DHCP à¤à¤¨à¤¿à¤•à¤¾à¤¸à¥à¤Ÿ MAC पतà¥à¤¤à¤¾ [none]: "
-#: ../cli/src/connections.c:3525
+#: ../clients/cli/connections.c:3526
msgid "IPv4 address (IP[/plen] [gateway]) [none]: "
msgstr "IPv4 पतà¥à¤¤à¤¾ (IP[/plen] [gateway]) [none]: "
-#: ../cli/src/connections.c:3527
+#: ../clients/cli/connections.c:3528
msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
msgstr "IPv6 पतà¥à¤¤à¤¾ (IP[/plen] [gateway]) [none]: "
-#: ../cli/src/connections.c:3545
+#: ../clients/cli/connections.c:3546
#, c-format
msgid " Address successfully added: %s %s\n"
msgstr " पतà¥à¤¤à¤¾ यशसà¥à¤µà¥€à¤°à¤¿à¤¤à¥à¤¯à¤¾ समाविषà¥à¤Ÿ केले: %s %s\n"
-#: ../cli/src/connections.c:3547
+#: ../clients/cli/connections.c:3548
#, c-format
msgid " Warning: address already present: %s %s\n"
msgstr " सावधानता: पतà¥à¤¤à¤¾ आधीपासूनच उपलबà¥à¤§ आहे: %s %s\n"
-#: ../cli/src/connections.c:3549
+#: ../clients/cli/connections.c:3550
#, 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
+#: ../clients/cli/connections.c:3552 ../clients/cli/connections.c:4375
+#: ../clients/cli/connections.c:4436 ../clients/cli/connections.c:4838
+#: ../clients/cli/connections.c:4848
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 पतà¥à¤¤à¤¾ समाविषà¥à¤Ÿ करायला आवडेल? (होय किंवा नाही) [होय] "
+#: ../clients/cli/connections.c:3569
+#, c-format
+msgid "Do you want to add IP addresses? %s"
+msgstr "तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ नकà¥à¤•à¥€ IP पतà¥à¤¤à¥‡ समाविषà¥à¤Ÿ करायचे? %s"
-#: ../cli/src/connections.c:3575
+#: ../clients/cli/connections.c:3576
#, c-format
msgid "Press <Enter> to finish adding addresses.\n"
msgstr "पतà¥à¤¤à¤¾ समावेश पूरà¥à¤£ करणà¥à¤¯à¤¾à¤•à¤°à¤¿à¤¤à¤¾ <Enter> दाबा.\n"
-#: ../cli/src/connections.c:3721
+#: ../clients/cli/connections.c:3715
#, 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
+#: ../clients/cli/connections.c:3767 ../clients/cli/connections.c:4757
msgid "SSID: "
msgstr "SSID: "
-#: ../cli/src/connections.c:3780 ../cli/src/connections.c:4773
+#: ../clients/cli/connections.c:3770 ../clients/cli/connections.c:4760
msgid "Error: 'ssid' is required."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'ssid' आवशà¥à¤¯à¤• आहे."
-#: ../cli/src/connections.c:3844
+#: ../clients/cli/connections.c:3827
msgid "WiMAX NSP name: "
msgstr "WiMAX NSP नाव: "
-#: ../cli/src/connections.c:3847
+#: ../clients/cli/connections.c:3830
msgid "Error: 'nsp' is required."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'nsp' आवशà¥à¤¯à¤• आहे."
-#: ../cli/src/connections.c:3902
+#: ../clients/cli/connections.c:3882
msgid "PPPoE username: "
msgstr "PPPoE वापरकरà¥à¤¤à¤¾à¤¨à¤¾à¤µ: "
-#: ../cli/src/connections.c:3905
-#| msgid "Error: 'master' is required."
+#: ../clients/cli/connections.c:3885
msgid "Error: 'username' is required."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'username' आवशà¥à¤¯à¤•."
-#: ../cli/src/connections.c:3976
+#: ../clients/cli/connections.c:3954
msgid "APN: "
msgstr "APN: "
-#: ../cli/src/connections.c:3979
+#: ../clients/cli/connections.c:3957
msgid "Error: 'apn' is required."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'apn' आवशà¥à¤¯à¤• आहे."
-#: ../cli/src/connections.c:4038
+#: ../clients/cli/connections.c:4015
msgid "Bluetooth device address: "
msgstr "बà¥à¤²à¥à¤¯à¥à¤Ÿà¥‚थ साधन पतà¥à¤¤à¤¾: "
-#: ../cli/src/connections.c:4041
+#: ../clients/cli/connections.c:4018
msgid "Error: 'addr' is required."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'addr' आवशà¥à¤¯à¤• आहे."
-#: ../cli/src/connections.c:4084
+#: ../clients/cli/connections.c:4059
#, 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
+#: ../clients/cli/connections.c:4103
msgid "VLAN parent device or connection UUID: "
msgstr "VLAN पॅरेंट साधन किंवा जोडणी UUID: "
-#: ../cli/src/connections.c:4132
+#: ../clients/cli/connections.c:4106
msgid "Error: 'dev' is required."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'dev' आवशà¥à¤¯à¤• आहे."
-#: ../cli/src/connections.c:4136
+#: ../clients/cli/connections.c:4110
msgid "VLAN ID <0-4095>: "
msgstr "VLAN ID <0-4095>: "
-#: ../cli/src/connections.c:4139
+#: ../clients/cli/connections.c:4113
msgid "Error: 'id' is required."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'id' आवशà¥à¤¯à¤• आहे."
-#: ../cli/src/connections.c:4145
+#: ../clients/cli/connections.c:4119
#, c-format
msgid "Error: 'id': '%s' is not valid; use <0-4095>."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'id': '%s' वैध नाही; <0-4095>चा वापर करा."
-#: ../cli/src/connections.c:4155
+#: ../clients/cli/connections.c:4129
#, c-format
msgid "Error: 'dev': '%s' is neither UUID, interface name, nor MAC."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'dev': '%s' UUID, संवाद नाव, किंवा MAC पैकी नाही."
-#: ../cli/src/connections.c:4290
+#: ../clients/cli/connections.c:4258
#, c-format
msgid "Error: 'mode': %s."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'mode': %s."
-#: ../cli/src/connections.c:4299
+#: ../clients/cli/connections.c:4267
#, 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
+#: ../clients/cli/connections.c:4316 ../clients/cli/connections.c:4414
+#: ../clients/cli/connections.c:4616
msgid "Error: 'master' is required."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'मासà¥à¤Ÿà¤°' आवशà¥à¤¯à¤• आहे."
-#: ../cli/src/connections.c:4350 ../cli/src/connections.c:4447
-#: ../cli/src/connections.c:4635
+#: ../clients/cli/connections.c:4322 ../clients/cli/connections.c:4420
+#: ../clients/cli/connections.c:4622
+#, c-format
+msgid "Warning: master='%s' doesn't refer to any existing profile.\n"
+msgstr "सावधानता: master='%s' हे असà¥à¤¤à¤¿à¤¤à¥à¤µà¤¾à¤¤à¥€à¤² पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤²à¤¶à¥€ संलगà¥à¤¨ नाही.\n"
+
+#: ../clients/cli/connections.c:4325 ../clients/cli/connections.c:4428
+#: ../clients/cli/connections.c:4625
#, c-format
msgid ""
"Warning: 'type' is currently ignored. We only support ethernet slaves for "
@@ -2054,99 +1974,80 @@ msgstr ""
"समरà¥à¤¥à¤¨ पà¥à¤°à¤µà¤²à¥‡ "
"जाते.\n"
-#: ../cli/src/connections.c:4434
-#| msgid "Bridge master: "
-msgid "Team master: "
-msgstr "टिम मासà¥à¤Ÿà¤°: "
-
-#: ../cli/src/connections.c:4537
+#: ../clients/cli/connections.c:4522
#, 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
+#: ../clients/cli/connections.c:4652
#, c-format
msgid "Error: 'hairpin': %s."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'हेअरपिन': %s."
-#: ../cli/src/connections.c:4714
-msgid "VPN type: "
-msgstr "VPN पà¥à¤°à¤•à¤¾à¤°: "
-
-#: ../cli/src/connections.c:4717
+#: ../clients/cli/connections.c:4705
msgid "Error: 'vpn-type' is required."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'vpn-type' आवशà¥à¤¯à¤• आहे."
-#: ../cli/src/connections.c:4728
+#: ../clients/cli/connections.c:4712
#, c-format
-msgid "Error: 'vpn-type': %s."
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'vpn-type': %s."
+msgid "Warning: 'vpn-type': %s not known.\n"
+msgstr "सावधानता: 'vpn-type': %s परिचीत नाही.\n"
-#: ../cli/src/connections.c:4786
+#: ../clients/cli/connections.c:4773
#, c-format
msgid "Error: 'channel': '%s' is not valid; use <1-13>."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'वाहिनी': '%s' वैध नाही; <1-13>चा वापर करा."
-#: ../cli/src/connections.c:4821
+#: ../clients/cli/connections.c:4805
#, 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
+#: ../clients/cli/connections.c:4903
#, c-format
msgid "Error: Failed to add '%s' connection: (%d) %s"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s' जोडणी समाविषà¥à¤Ÿ करणà¥à¤¯à¤¾à¤¸ अपयशी: (%d) %s"
-#: ../cli/src/connections.c:4923
+#: ../clients/cli/connections.c:4907
#, 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
+#: ../clients/cli/connections.c:5121
#, c-format
msgid "Error: 'type' argument is required."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'type' बाब आवशà¥à¤¯à¤• आहे."
-#: ../cli/src/connections.c:4979
+#: ../clients/cli/connections.c:5129
#, c-format
msgid "Error: invalid connection type; %s."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: अवैध जोडणी पà¥à¤°à¤•à¤¾à¤°; %s."
-#: ../cli/src/connections.c:4988
+#: ../clients/cli/connections.c:5138
#, c-format
msgid "Error: 'autoconnect': %s."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'autoconnect': %s."
-#: ../cli/src/connections.c:5004
-#| msgid "Interface name: "
+#: ../clients/cli/connections.c:5148
+#, c-format
+msgid "Error: 'save': %s."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'save': %s."
+
+#: ../clients/cli/connections.c:5164
msgid "Interface name [*]: "
msgstr "इंटरफेस नाव [*]: "
-#: ../cli/src/connections.c:5009
+#: ../clients/cli/connections.c:5169
#, c-format
msgid "Error: 'ifname' argument is required."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'ifname' बाब आवशà¥à¤¯à¤• आहे."
-#: ../cli/src/connections.c:5016
+#: ../clients/cli/connections.c:5176
#, c-format
msgid "Error: 'ifname': '%s' is not a valid interface nor '*'."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'ifname': '%s' वैध इंटरफेस तसेच '*' नाही."
-#: ../cli/src/connections.c:5835
+#: ../clients/cli/connections.c:5964
#, c-format
msgid "['%s' setting values]\n"
msgstr "['%s' सेटिंग मूलà¥à¤¯à¥‡]\n"
@@ -2154,20 +2055,8 @@ 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"
+#: ../clients/cli/connections.c:6046
+#, c-format
msgid ""
"---[ Main menu ]---\n"
"goto [<setting> | <prop>] :: go to a setting or property\n"
@@ -2175,9 +2064,9 @@ msgid ""
"value\n"
"set [<setting>.<prop> <value>] :: set property value\n"
"describe [<setting>.<prop>] :: describe property\n"
-"print [all] :: print the connection\n"
+"print [all | <setting>[.<prop>]] :: print the connection\n"
"verify [all] :: verify the connection\n"
-"save :: save 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"
@@ -2186,30 +2075,22 @@ msgid ""
msgstr ""
"---[ मà¥à¤–à¥à¤¯ मेनà¥à¤¯à¥‚ ]---\n"
"goto [<setting> | <prop>] :: सेटिंग किंवा गà¥à¤£à¤§à¤°à¥à¤®à¤•à¤¡à¥‡ जा\n"
-"remove <setting>[.<prop>] | <prop> :: सेटिंग काढून टाका किंवा "
-"गà¥à¤£à¤§à¤°à¥à¤® पà¥à¤¨à¥à¤¹à¤¾ सेट करा\n"
+"remove <setting>[.<prop>] | <prop> :: सेटिंग काढून टाका किंवा गà¥à¤£à¤§à¤°à¥à¤® "
+"पà¥à¤¨à¥à¤¹à¤¾ सेट "
+"करा\n"
"set [<setting>.<prop> <value>] :: गà¥à¤£à¤§à¤°à¥à¤® मूलà¥à¤¯ ठरवा\n"
"describe [<setting>.<prop>] :: गà¥à¤£à¤§à¤°à¥à¤®à¤¾à¤šà¥‡ वरà¥à¤£à¤¨ करा\n"
"print [all] :: जोडणीची छपाई करा\n"
"verify [all] :: जोडणीची तपासणी करा\n"
-"save :: जोडणी साठवा\n"
+"save [persistent|temporary] :: जोडणी साठवा\n"
"activate [<ifname>] [/<ap>|<nsp>] :: जोडणी सकà¥à¤°à¥€à¤¯ करा\n"
"back :: à¤à¤• सà¥à¤¤à¤° वर (मागे) चला\n"
-"help/? [<command>] :: हà¥à¤¯à¤¾ मदतीची छपाई करा\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"
+#: ../clients/cli/connections.c:6073
+#, c-format
msgid ""
"goto <setting>[.<prop>] | <prop> :: enter setting/property for editing\n"
"\n"
@@ -2227,7 +2108,7 @@ msgstr ""
" nmcli connection> goto secondaries\n"
" nmcli> goto ipv4.addresses\n"
-#: ../cli/src/connections.c:5950
+#: ../clients/cli/connections.c:6080
#, c-format
msgid ""
"remove <setting>[.<prop>] :: remove setting or reset property value\n"
@@ -2248,14 +2129,8 @@ msgstr ""
"उदाहरणारà¥à¤¥: nmcli> remove wifi-sec\n"
" nmcli> remove eth.mtu\n"
-#: ../cli/src/connections.c:5957
+#: ../clients/cli/connections.c:6087
#, 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"
@@ -2269,7 +2144,7 @@ msgstr ""
"\n"
"उदाहरणारà¥à¤¥: nmcli> set con.id My connection\n"
-#: ../cli/src/connections.c:5962
+#: ../clients/cli/connections.c:6092
#, c-format
msgid ""
"describe [<setting>.<prop>] :: describe property\n"
@@ -2283,7 +2158,7 @@ msgstr ""
"तà¥à¤®à¥à¤¹à¥€ nm-"
"settings(5) मॅनà¥à¤¯à¥à¤…ल पृषà¥à¤Ÿ पाहू शकता.\n"
-#: ../cli/src/connections.c:5967
+#: ../clients/cli/connections.c:6097
#, c-format
msgid ""
"print [all] :: print setting or connection values\n"
@@ -2298,7 +2173,7 @@ msgstr ""
"\n"
"उदाहरणारà¥à¤¥: nmcli ipv4> print all\n"
-#: ../cli/src/connections.c:5972
+#: ../clients/cli/connections.c:6102
#, c-format
msgid ""
"verify [all] :: verify setting or connection validity\n"
@@ -2318,18 +2193,36 @@ msgstr ""
"उदाहरणारà¥à¤¥: nmcli> verify\n"
" nmcli bond> verify\n"
-#: ../cli/src/connections.c:5979
+#: ../clients/cli/connections.c:6109
#, c-format
msgid ""
-"save :: save the connection\n"
-"\n"
-"Sends the connection to NetworkManager that will save it.\n"
+"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 :: जोडणी साठवा\n"
-"\n"
-"जोडणीला NetworkManager करिता पाठवतो, जà¥à¤¯à¤¾à¤¸ साठवले जाते.\n"
-
-#: ../cli/src/connections.c:5983
+"save [persistent|temporary] :: जोडणी साठवा\n"
+"\n"
+"जोडणी पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² NetworkManager करिता पाठविले जाते, जे तà¥à¤¯à¤¾à¤¸ सकà¥à¤¤à¥€à¤¨à¥‡ साठवेल\n"
+", किंवा तà¥à¤¯à¤¾à¤¸ मेमरिमधà¥à¤¯à¥‡ जतन करेल. विना बाब 'save' मà¥à¤¹à¤£à¤œà¥‡à¤š\n"
+"'save persistent'.\n"
+"लकà¥à¤·à¤¾à¤¤ ठेवा पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² à¤à¤•à¤¦à¤¾à¤šà¥‡ सकà¥à¤¤à¥€à¤¨à¥‡ साठवायला सà¥à¤°à¥‚ केलà¥à¤¯à¤¾à¤¸ तà¥à¤¯à¤¾ सेटिंगà¥à¤œà¤¨à¤¾ "
+"रिबूट किंवा "
+"रिसà¥à¤Ÿà¤¾à¤°à¥à¤Ÿ\n"
+"करिता साठवले जाते. लगेच पाठोपाठ येणारे बदल देखील तातà¥à¤ªà¥à¤°à¥à¤¤à¥‡ किंवा सकà¥à¤¤à¥€à¤¨à¥‡ "
+"लागू करणे शकà¥à¤¯ आहे\n"
+", परंतॠकोणतेही तातà¥à¤ªà¥à¤°à¥à¤¤à¥‡ बदल रिबूट किंवा रिसà¥à¤Ÿà¤¾à¤°à¥à¤Ÿà¤•à¤°à¤¿à¤¤à¤¾\n"
+"सकà¥à¤¤à¥€à¤šà¥‡ ठरत नाही. तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ सकà¥à¤¤à¥€à¤¨à¥‡ जोडणी काढून टाकायची असलà¥à¤¯à¤¾à¤¸, जोडणी\n"
+"पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² नषà¥à¤Ÿ केले पाहिजे.\n"
+
+#: ../clients/cli/connections.c:6120
#, c-format
msgid ""
"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
@@ -2350,7 +2243,7 @@ msgstr ""
"/<ap>|<nsp> - AP (Wi-Fi) किंवा NSP (WiMAX) (<ifname> निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ न केलà¥à¤¯à¤¾à¤¸ / सह "
"पहिले जोडा)\n"
-#: ../cli/src/connections.c:5990 ../cli/src/connections.c:6140
+#: ../clients/cli/connections.c:6127 ../clients/cli/connections.c:6284
#, c-format
msgid ""
"back :: go to upper menu level\n"
@@ -2359,7 +2252,7 @@ msgstr ""
"back :: शीरà¥à¤·à¤•à¤¡à¥€à¤² मेनà¥à¤¯à¥‚ सà¥à¤¤à¤°à¤•à¤¡à¥‡ जा\n"
"\n"
-#: ../cli/src/connections.c:5993
+#: ../clients/cli/connections.c:6130
#, c-format
msgid ""
"help/? [<command>] :: help for the nmcli commands\n"
@@ -2368,7 +2261,7 @@ msgstr ""
"help/? [<command>] :: nmcli आदेशांकरिता मदत\n"
"\n"
-#: ../cli/src/connections.c:5996
+#: ../clients/cli/connections.c:6133
#, c-format
msgid ""
"nmcli [<conf-option> <value>] :: nmcli configuration\n"
@@ -2394,9 +2287,9 @@ 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"
+"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"
@@ -2411,7 +2304,7 @@ msgstr ""
" nmcli> nmcli save-confirmation no\n"
" nmcli> nmcli prompt-color 3\n"
-#: ../cli/src/connections.c:6016 ../cli/src/connections.c:6146
+#: ../clients/cli/connections.c:6153 ../clients/cli/connections.c:6290
#, c-format
msgid ""
"quit :: exit nmcli\n"
@@ -2424,8 +2317,8 @@ msgstr ""
"हे आदेशने तà¥à¤®à¥à¤¹à¥€ nmcli पासून बाहेर पडाल. संपादनजोगी जोडणी साठवली जात नसताना, "
"वापरकरà¥à¤¤à¥à¤¯à¤¾à¤²à¤¾ कृतीची खातà¥à¤°à¥€ करणà¥à¤¯à¤¾à¤¸ विचारले जाते.\n"
-#: ../cli/src/connections.c:6021 ../cli/src/connections.c:6151
-#: ../cli/src/connections.c:6521 ../cli/src/connections.c:7370
+#: ../clients/cli/connections.c:6158 ../clients/cli/connections.c:6295
+#: ../clients/cli/connections.c:6683 ../clients/cli/connections.c:7574
#, c-format
msgid "Unknown command: '%s'\n"
msgstr "अपरिचीत आदेश: '%s'\n"
@@ -2433,7 +2326,7 @@ msgstr "अपरिचीत आदेश: '%s'\n"
#. TRANSLATORS: do not translate command names and keywords before ::
#. * However, you should translate terms enclosed in <>.
#.
-#: ../cli/src/connections.c:6087
+#: ../clients/cli/connections.c:6224
#, c-format
msgid ""
"---[ Property menu ]---\n"
@@ -2460,7 +2353,7 @@ msgstr ""
"help/? [<command>] :: हà¥à¤¯à¤¾ मदत किंवा आदेश वरà¥à¤£à¤¨à¤¾à¤šà¥€ छपाई करा\n"
"quit :: nmcli पासून बाहेर पडा\n"
-#: ../cli/src/connections.c:6112
+#: ../clients/cli/connections.c:6249
#, c-format
msgid ""
"set [<value>] :: set new value\n"
@@ -2471,22 +2364,22 @@ msgstr ""
"\n"
"हे आदेश संच हà¥à¤¯à¤¾ गà¥à¤£à¤§à¤°à¥à¤®à¤•à¤°à¤¿à¤¤à¤¾ <value> पà¥à¤°à¤µà¤¤à¥‡\n"
-#: ../cli/src/connections.c:6116
+#: ../clients/cli/connections.c:6253
#, c-format
msgid ""
-"add [<value>] :: add new option to the property\n"
+"add [<value>] :: append new value 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"
+"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 [<value>] :: गà¥à¤£à¤§à¤°à¥à¤®à¤•à¤°à¤¿à¤¤à¤¾ नविन परà¥à¤¯à¤¾à¤¯ समाविषà¥à¤Ÿ करा\n"
+"add [<value>] :: गà¥à¤£à¤§à¤°à¥à¤®à¤•à¤°à¤¿à¤¤à¤¾ नवीन परà¥à¤¯à¤¾à¤¯ समाविषà¥à¤Ÿ करा\n"
"\n"
-"हे आदेश हà¥à¤¯à¤¾ गà¥à¤£à¤§à¤°à¥à¤®à¤•à¤°à¤¿à¤¤à¤¾ <value> पà¥à¤°à¤µà¤¤à¥‡, गà¥à¤£à¤§à¤°à¥à¤® कंटेनर पà¥à¤°à¤•à¤¾à¤°à¤šà¥‡ असलà¥à¤¯à¤¾à¤¸. "
+"गà¥à¤£à¤§à¤°à¥à¤® कंटेनर पà¥à¤°à¤•à¤¾à¤°à¤šà¥‡ असलà¥à¤¯à¤¾à¤¸, हे आदेश या गà¥à¤£à¤§à¤°à¥à¤®à¤•à¤°à¤¿à¤¤à¤¾ <value> पà¥à¤°à¤µà¤¤à¥‡. "
"à¤à¤•-मूलà¥à¤¯ "
-"गà¥à¤£à¤§à¤°à¥à¤®à¤•à¤°à¤¿à¤¤à¤¾ मूलà¥à¤¯ ('set' पà¥à¤°à¤¾à¤£à¥‡à¤š असते) अदलाबदल करतो.\n"
+"गà¥à¤£à¤§à¤°à¥à¤®à¤¾à¤‚करिता मूलà¥à¤¯ अदलाबदल ('set' पà¥à¤°à¤®à¤¾à¤£à¥‡à¤š) केले जाते.\n"
-#: ../cli/src/connections.c:6122
+#: ../clients/cli/connections.c:6259
#, c-format
msgid ""
"change :: change current value\n"
@@ -2497,18 +2390,42 @@ msgstr ""
"\n"
"सधà¥à¤¯à¤¾à¤šà¥‡ मूलà¥à¤¯ दाखवतो व संपादन सà¥à¤µà¥€à¤•à¤¾à¤°à¤¤à¥‹.\n"
-#: ../cli/src/connections.c:6126
+#: ../clients/cli/connections.c:6263
#, c-format
msgid ""
-"remove [<index>|<option>] :: delete the value\n"
+"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"
-"Removes the property value (sets it to default).\n"
msgstr ""
-"remove [<index>|<option>] :: मूलà¥à¤¯ नषà¥à¤Ÿ करा\n"
+"remove [<value>|<index>|<option name>] :: मूलà¥à¤¯ नषà¥à¤Ÿ करा\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"
-"गà¥à¤£à¤§à¤°à¥à¤® मूलà¥à¤¯ काढून टाकतो (पूरà¥à¤µà¤¨à¤¿à¤°à¥à¤§à¤¾à¤°à¤¿à¤¤à¤•à¤°à¤¿à¤¤à¤¾ सेट करतो).\n"
-#: ../cli/src/connections.c:6130
+#: ../clients/cli/connections.c:6274
#, c-format
msgid ""
"describe :: describe property\n"
@@ -2522,7 +2439,7 @@ msgstr ""
"तà¥à¤®à¥à¤¹à¥€ nm-"
"settings(5) मॅनà¥à¤¯à¥à¤…ल पृषà¥à¤Ÿ पाहू शकता.\n"
-#: ../cli/src/connections.c:6135
+#: ../clients/cli/connections.c:6279
#, c-format
msgid ""
"print [property|setting|connection] :: print property (setting, connection) "
@@ -2538,7 +2455,7 @@ msgstr ""
"पूरà¥à¤µà¤¨à¤¿à¤°à¥à¤§à¤¾à¤°à¤¿à¤¤ मूलà¥à¤¯à¥‡ "
"तेखील दाखवू शकता.\n"
-#: ../cli/src/connections.c:6143
+#: ../clients/cli/connections.c:6287
#, c-format
msgid ""
"help/? [<command>] :: help for nmcli commands\n"
@@ -2547,315 +2464,310 @@ msgstr ""
"help/? [<command>] :: nmcli आदेशांकरिता मदत\n"
"\n"
-#: ../cli/src/connections.c:6230
+#: ../clients/cli/connections.c:6374
#, c-format
-#| msgid "Error: Connection activation failed."
msgid "Error: Connection activation failed.\n"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: जोडणी सकà¥à¤°à¥€à¤¯ करणे अपयशी.\n"
-#: ../cli/src/connections.c:6301
+#: ../clients/cli/connections.c:6452
#, 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
+#: ../clients/cli/connections.c:6470
+#, c-format
+msgid "[ Type: %s | Name: %s | UUID: %s | Dirty: %s | Temp: %s ]\n"
+msgstr "[ पà¥à¤°à¤•à¤¾à¤°: %s | नाव: %s | UUID: %s | डरà¥à¤Ÿà¤¿: %s | टेमà¥à¤ª: %s ]\n"
+
+#: ../clients/cli/connections.c:6505
#, c-format
-msgid "[ Connection type: %s | name: %s | UUID: %s | dirty: %s ]\n"
-msgstr "[ जोडणी पà¥à¤°à¤•à¤¾à¤°: %s | name: %s | UUID: %s | dirty: %s ]\n"
+msgid "The connection is not saved. Do you really want to quit? %s"
+msgstr "जोडणी साठवली नाही. तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ नकà¥à¤•à¥€ बाहेर पडायचे? %s"
-#: ../cli/src/connections.c:6379
+#: ../clients/cli/connections.c:6550
#, 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"
+"आणणà¥à¤¯à¤¾à¤•à¤°à¤¿à¤¤à¤¾ मà¥à¤–à¥à¤¯ मेनà¥à¤¯à¥à¤®à¤§à¥à¤¯à¥‡ "
+"'save' टाइप करा.\n"
-#: ../cli/src/connections.c:6400 ../cli/src/connections.c:6823
-#: ../cli/src/connections.c:6881
+#: ../clients/cli/connections.c:6572 ../clients/cli/connections.c:6987
+#: ../clients/cli/connections.c:7042
#, 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
+#: ../clients/cli/connections.c:6587 ../clients/cli/connections.c:6605
+#: ../clients/cli/connections.c:6991 ../clients/cli/connections.c:7047
#, c-format
msgid "Error: failed to set '%s' property: %s\n"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s' गà¥à¤£à¤§à¤°à¥à¤® सेट करणà¥à¤¯à¤¾à¤¸ अपयशी: %s\n"
-#: ../cli/src/connections.c:6429
+#: ../clients/cli/connections.c:6599
#, c-format
msgid "Edit '%s' value: "
msgstr "'%s' मूलà¥à¤¯ संपादित करा: "
-#: ../cli/src/connections.c:6458
+#: ../clients/cli/connections.c:6626
#, c-format
msgid "Error: %s\n"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: %s\n"
-#: ../cli/src/connections.c:6464 ../cli/src/connections.c:6967
-#: ../cli/src/connections.c:7008
+#: ../clients/cli/connections.c:6632 ../clients/cli/connections.c:7126
+#: ../clients/cli/connections.c:7167
#, 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
+#: ../clients/cli/connections.c:6653
#, 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
+#: ../clients/cli/connections.c:6779
#, c-format
msgid "Available settings: %s\n"
msgstr "उपलबà¥à¤§ सेटिंगà¥à¤œ: %s\n"
-#: ../cli/src/connections.c:6626
+#: ../clients/cli/connections.c:6788
#, c-format
msgid "Error: invalid setting name; %s\n"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: अवैध सेटिंगचे नाव; %s\n"
-#: ../cli/src/connections.c:6643
+#: ../clients/cli/connections.c:6805
#, c-format
msgid "Available properties: %s\n"
msgstr "उपलबà¥à¤§ गà¥à¤£à¤§à¤°à¥à¤®: %s\n"
-#: ../cli/src/connections.c:6651
+#: ../clients/cli/connections.c:6813
#, c-format
msgid "Error: property %s\n"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: गà¥à¤£à¤§à¤°à¥à¤® %s\n"
-#: ../cli/src/connections.c:6692
+#: ../clients/cli/connections.c:6854
+#, 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] "
+"Do you still want to save? %s"
msgstr ""
-"'autoconnect=yes' सह जोडणी साठवत आहे. तà¥à¤¯à¤¾à¤®à¥à¤³à¥‡ जोडणी पटकण सकà¥à¤°à¥€à¤¯ होते.\n"
-"तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ तरीही साठवायचे? [होय] "
+"'autoconnect=yes' सह जोडणी साठवत आहे. तà¥à¤¯à¤¾à¤®à¥à¤³à¥‡ जोडणी पटकण सकà¥à¤°à¥€à¤¯ होऊ शकेल.\n"
+"तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ तरीही साठवायचे? %s"
-#: ../cli/src/connections.c:6765
+#: ../clients/cli/connections.c:6929
#, c-format
msgid "You may edit the following settings: %s\n"
msgstr "तà¥à¤®à¥à¤¹à¥€ खालील सेटिंगà¥à¤œ संपादित करू शकता: %s\n"
-#: ../cli/src/connections.c:6791
+#: ../clients/cli/connections.c:6956
#, c-format
msgid ""
"The connection profile has been removed from another client. You may type "
"'save' to restore it.\n"
msgstr ""
"जोडणी पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² इतर कà¥à¤²à¤¾à¤à¤‚टपासून काढून टाकले गेले आहे. पूरà¥à¤µà¤¸à¥à¤¥à¤¿à¤¤à¥€à¤¤ "
-"आणणà¥à¤¯à¤¾à¤•à¤°à¤¿à¤¤à¤¾ "
-"मà¥à¤–à¥à¤¯ मेनà¥à¤¯à¥à¤®à¤§à¥à¤¯à¥‡ तà¥à¤®à¥à¤¹à¥€ 'save' टाइप करू शकता.\n"
+"आणणà¥à¤¯à¤¾à¤•à¤°à¤¿à¤¤à¤¾ मà¥à¤–à¥à¤¯ मेनà¥à¤¯à¥à¤®à¤§à¥à¤¯à¥‡ "
+"तà¥à¤®à¥à¤¹à¥€ 'save' टाइप करू शकता.\n"
-#: ../cli/src/connections.c:6821 ../cli/src/connections.c:6879
+#: ../clients/cli/connections.c:6985 ../clients/cli/connections.c:7040
#, c-format
msgid "Allowed values for '%s' property: %s\n"
msgstr "'%s' गà¥à¤£à¤§à¤°à¥à¤®à¤•à¤°à¤¿à¤¤à¤¾ सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ मूलà¥à¤¯: %s\n"
-#: ../cli/src/connections.c:6833 ../cli/src/connections.c:7050
+#: ../clients/cli/connections.c:6995 ../clients/cli/connections.c:7209
#, c-format
msgid "Error: no setting selected; valid are [%s]\n"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: सेटिंग निवडली नाही; वैध [%s] आहे\n"
-#: ../cli/src/connections.c:6834
+#: ../clients/cli/connections.c:6996
#, 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
+#: ../clients/cli/connections.c:7010 ../clients/cli/connections.c:7146
+#: ../clients/cli/connections.c:7226
#, c-format
msgid "Error: invalid setting argument '%s'; valid are [%s]\n"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: अवैध सेटिंग बाब '%s'; वैध [%s] आहे\n"
-#: ../cli/src/connections.c:6859
+#: ../clients/cli/connections.c:7020
#, c-format
msgid "Error: missing setting for '%s' property\n"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s' गà¥à¤£à¤§à¤°à¥à¤®à¤•à¤°à¤¿à¤¤à¤¾ सेटिंग आढळले नाही\n"
-#: ../cli/src/connections.c:6866
+#: ../clients/cli/connections.c:7027
#, c-format
msgid "Error: invalid property: %s\n"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: अवैध गà¥à¤£à¤§à¤°à¥à¤®: %s\n"
-#: ../cli/src/connections.c:6915
+#: ../clients/cli/connections.c:7074
#, c-format
msgid "Error: unknown setting '%s'\n"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: अपरिचीत सेटिंग '%s'\n"
-#: ../cli/src/connections.c:6928
+#: ../clients/cli/connections.c:7087
#, c-format
msgid "You may edit the following properties: %s\n"
msgstr "तà¥à¤®à¥à¤¹à¥€ खालील गà¥à¤£à¤§à¤°à¥à¤®: %s संपादित करू शकता\n"
-#: ../cli/src/connections.c:6972
+#: ../clients/cli/connections.c:7131
#, 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
+#: ../clients/cli/connections.c:7144
#, 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
+#: ../clients/cli/connections.c:7185
#, 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
+#: ../clients/cli/connections.c:7210
#, c-format
msgid "use 'goto <setting>' first, or 'describe <setting>.<property>'\n"
msgstr ""
"पहिले '<setting> कडे जा' चा वापर करा, किंवा ' <setting>.<property> ठरवा'\n"
-#: ../cli/src/connections.c:7092
+#: ../clients/cli/connections.c:7251
#, 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
+#: ../clients/cli/connections.c:7280
#, c-format
msgid "Error: unknown setting: '%s'\n"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: अपरिचीत सेटिंग '%s'\n"
-#: ../cli/src/connections.c:7135
+#: ../clients/cli/connections.c:7285
+#, c-format
+msgid "Error: '%s' setting not present in the connection\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s' सेटिंग सधà¥à¤¯à¤¾à¤šà¥à¤¯à¤¾ जोडणीमधà¥à¤¯à¥‡ उपलबà¥à¤§ नाही\n"
+
+#: ../clients/cli/connections.c:7310
+#, c-format
+msgid "Error: invalid property: %s%s\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: अवैध गà¥à¤£à¤§à¤°à¥à¤®: %s%s\n"
+
+#: ../clients/cli/connections.c:7312
+msgid ", neither a valid setting name"
+msgstr ", वैध सेटिंग नाव नाही"
+
+#: ../clients/cli/connections.c:7332
#, c-format
msgid "Verify setting '%s': %s\n"
msgstr "'%s': %s सेटिंग तपासा\n"
-#: ../cli/src/connections.c:7142
+#: ../clients/cli/connections.c:7339
#, c-format
msgid "Verify connection: %s\n"
msgstr "जोडणीची तपासणी करा: %s\n"
-#: ../cli/src/connections.c:7181
+#: ../clients/cli/connections.c:7357
+#, c-format
+msgid "Error: invalid argument '%s'\n"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: अवैध बाब '%s'\n"
+
+#: ../clients/cli/connections.c:7390
#, c-format
msgid "Error: Failed to save '%s' (%s) connection: (%d) %s\n"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s' (%s) जोडणी: (%d) %s साठवणà¥à¤¯à¤¾à¤¸ अपयशी\n"
-#: ../cli/src/connections.c:7188
+#: ../clients/cli/connections.c:7398
#, c-format
msgid "Connection '%s' (%s) successfully saved.\n"
msgstr "जोडणी '%s' (%s) यशसà¥à¤µà¥€à¤°à¤¿à¤¤à¥à¤¯à¤¾ साठवली.\n"
-#: ../cli/src/connections.c:7222
+#: ../clients/cli/connections.c:7399
+#, c-format
+msgid "Connection '%s' (%s) successfully updated.\n"
+msgstr "जोडणी '%s' (%s) यशसà¥à¤µà¥€à¤°à¤¿à¤¤à¥à¤¯à¤¾ सà¥à¤§à¤¾à¤°à¤¿à¤¤ केली.\n"
+
+#: ../clients/cli/connections.c:7432
#, c-format
msgid "Error: connection verification failed: %s\n"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: जोडणी तपासणी अपयशी: %s\n"
-#: ../cli/src/connections.c:7223
+#: ../clients/cli/connections.c:7433
msgid "(unknown error)"
msgstr "(अपरिचीत तà¥à¤°à¥à¤Ÿà¥€)"
-#: ../cli/src/connections.c:7244
+#: ../clients/cli/connections.c:7454
#, 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
+#: ../clients/cli/connections.c:7458
#, 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
+#: ../clients/cli/connections.c:7469
#, c-format
-#| msgid "Error: Unknown connection: %s."
msgid "Error: Cannot activate connection: %s.\n"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: जोडणी: %s सकà¥à¤°à¥€à¤¯ करणे अशकà¥à¤¯.\n"
-#: ../cli/src/connections.c:7269
+#: ../clients/cli/connections.c:7479
#, 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
+#: ../clients/cli/connections.c:7485
#, c-format
msgid "Monitoring connection activation (press any key to continue)\n"
msgstr "जोडणी सकà¥à¤°à¥€à¤¯ करणे मॉनिटर करत आहे (पà¥à¤¢à¥‡ जाणà¥à¤¯à¤¾à¤•à¤°à¤¿à¤¤à¤¾ कोणतीही कि दाबा)\n"
-#: ../cli/src/connections.c:7313
+#: ../clients/cli/connections.c:7523
#, c-format
msgid "Error: status-line: %s\n"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: status-line: %s\n"
-#: ../cli/src/connections.c:7321
+#: ../clients/cli/connections.c:7531
#, c-format
msgid "Error: save-confirmation: %s\n"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: save-confirmation: %s\n"
-#: ../cli/src/connections.c:7329
+#: ../clients/cli/connections.c:7539
#, c-format
msgid "Error: bad color number: '%s'; use <0-8>\n"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: चà¥à¤•à¤¿à¤šà¤¾ रंग कà¥à¤°à¤®à¤¾à¤‚क: '%s'; <0-8>चा वापर करा\n"
-#: ../cli/src/connections.c:7341
+#: ../clients/cli/connections.c:7551
#, c-format
msgid "Current nmcli configuration:\n"
msgstr "सधà¥à¤¯à¤¾à¤šà¥€ nmcli संरचना:\n"
-#: ../cli/src/connections.c:7349
+#: ../clients/cli/connections.c:7559
#, 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
+#: ../clients/cli/connections.c:7802
#, 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
+#: ../clients/cli/connections.c:7814 ../clients/cli/connections.c:8004
+#: ../clients/cli/connections.c:8011
#, c-format
msgid "Error: Unknown connection '%s'."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: अपरिचीत जोडणी '%s'."
-#: ../cli/src/connections.c:7625
+#: ../clients/cli/connections.c:7829
#, c-format
msgid "Warning: editing existing connection '%s'; 'type' argument is ignored\n"
msgstr ""
"सावधानता: असà¥à¤¤à¤¿à¤¤à¥à¤µà¤¾à¤¤à¥€à¤² जोडणी '%s' संपादित करत आहे; 'type' बाब दà¥à¤°à¥à¤²à¤•à¥à¤·à¤¿à¤¤ केले "
"जाते\n"
-#: ../cli/src/connections.c:7628
+#: ../clients/cli/connections.c:7832
#, c-format
msgid ""
"Warning: editing existing connection '%s'; 'con-name' argument is ignored\n"
@@ -2863,434 +2775,423 @@ msgstr ""
"सावधानता: असà¥à¤¤à¤¿à¤¤à¥à¤µà¤¾à¤¤à¥€à¤² जोडणी '%s' संपादित करत आहे; 'con-name' बाबकडे दà¥à¤°à¥à¤²à¤•à¥à¤· "
"केले\n"
-#: ../cli/src/connections.c:7642
+#: ../clients/cli/connections.c:7846
#, c-format
msgid "Valid connection types: %s\n"
msgstr "अवैध जोडणी पà¥à¤°à¤•à¤¾à¤°: %s\n"
-#: ../cli/src/connections.c:7644
+#: ../clients/cli/connections.c:7848
#, c-format
msgid "Error: invalid connection type; %s\n"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: अवैध जोडणी पà¥à¤°à¤•à¤¾à¤°; %s\n"
-#: ../cli/src/connections.c:7680
+#: ../clients/cli/connections.c:7887
#, c-format
msgid "===| nmcli interactive connection editor |==="
msgstr "===| nmcli इंटरॲकà¥à¤Ÿà¤¿à¤µà¥à¤¹ कनेकà¥à¤¶à¤¨ à¤à¤¡à¤¿à¤Ÿà¤° |==="
-#: ../cli/src/connections.c:7683
+#: ../clients/cli/connections.c:7890
#, c-format
msgid "Editing existing '%s' connection: '%s'"
msgstr "असà¥à¤¤à¤¿à¤¤à¥à¤µà¤¾à¤¤à¥€à¤² '%s' जोडणी संपादित करत आहे: '%s'"
-#: ../cli/src/connections.c:7685
+#: ../clients/cli/connections.c:7892
#, c-format
msgid "Adding a new '%s' connection"
msgstr "नविन '%s' जोडणी समाविषà¥à¤Ÿ करत आहे"
-#: ../cli/src/connections.c:7687
+#: ../clients/cli/connections.c:7894
#, c-format
msgid "Type 'help' or '?' for available commands."
msgstr "उपलबà¥à¤§ आदेशकरिता 'help' किंवा '?' टाइप करा."
-#: ../cli/src/connections.c:7689
+#: ../clients/cli/connections.c:7896
#, c-format
msgid "Type 'describe [<setting>.<prop>]' for detailed property description."
msgstr "तपशील गà¥à¤£à¤§à¤°à¥à¤® वरà¥à¤£à¤¨à¤•à¤°à¤¿à¤¤à¤¾ 'describe [<setting>.<prop>]' टाइप करा."
-#: ../cli/src/connections.c:7728
+#: ../clients/cli/connections.c:7932
#, c-format
msgid "Error: Failed to modify connection '%s': (%d) %s"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: जोडणी '%s': (%d) %s संपादित करणà¥à¤¯à¤¾à¤¸ अपयशी"
-#: ../cli/src/connections.c:7734
+#: ../clients/cli/connections.c:7938
#, c-format
msgid "Connection '%s' (%s) successfully modified.\n"
msgstr "जोडणी '%s' (%s) यशसà¥à¤µà¥€à¤°à¤¿à¤¤à¥à¤¯à¤¾ संपादित केली.\n"
-#: ../cli/src/connections.c:7761
+#: ../clients/cli/connections.c:7979
#, c-format
msgid "Error: No arguments provided."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: बाबी पà¥à¤°à¤µà¤²à¥‡ नाही."
-#: ../cli/src/connections.c:7785
+#: ../clients/cli/connections.c:7998
#, c-format
msgid "Error: connection ID is missing."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: जोडणी ID आढळले नाही."
-#: ../cli/src/connections.c:7790
+#: ../clients/cli/connections.c:8020 ../clients/cli/connections.c:8033
#, c-format
msgid "Error: <setting>.<property> argument is missing."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: <setting>.<property> बाब आढळले नाही."
-#: ../cli/src/connections.c:7813
+#: ../clients/cli/connections.c:8038
+#, c-format
+msgid "Error: value for '%s' is missing."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s' करीता मूलà¥à¤¯ आढळले नाही."
+
+#: ../clients/cli/connections.c:8056
#, c-format
msgid "Error: invalid <setting>.<property> '%s'."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: अवैध <setting>.<property> '%s'."
-#: ../cli/src/connections.c:7828
+#: ../clients/cli/connections.c:8064
#, c-format
msgid "Error: invalid or not allowed setting '%s': %s."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: अवैध किंवा असà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ सेटिंग '%s': %s."
-#: ../cli/src/connections.c:7849
+#: ../clients/cli/connections.c:8085
#, c-format
msgid "Error: invalid property '%s': %s."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: अवैध गà¥à¤£à¤§à¤°à¥à¤® '%s': %s."
-#: ../cli/src/connections.c:7855
+#: ../clients/cli/connections.c:8096
#, c-format
msgid "Error: failed to modify %s.%s: %s."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: %s.%s: %s संपादित करणà¥à¤¯à¤¾à¤¸ अपयशी."
-#: ../cli/src/connections.c:7885
+#: ../clients/cli/connections.c:8114
+#, c-format
+msgid "Error: failed to remove a value from %s.%s: %s."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: %s.%s पासून मूलà¥à¤¯ काढून टाकणà¥à¤¯à¤¾à¤¸ अपयशी: %s."
+
+#: ../clients/cli/connections.c:8150
#, c-format
msgid "Error: Connection deletion failed: %s"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: जोडणी नषà¥à¤Ÿ करणे अपयशी: %s"
-#: ../cli/src/connections.c:7956
+#: ../clients/cli/connections.c:8221
#, c-format
msgid "Error: unknown connection: %s\n"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: अपरिचीत जोडणी: %s\n"
#. truncate trailing ", "
-#: ../cli/src/connections.c:7992
+#: ../clients/cli/connections.c:8257
#, c-format
msgid "Error: cannot delete unknown connection(s): %s."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: अपरिचीत जोडणी: %s नषà¥à¤Ÿ करणे अशकà¥à¤¯."
-#: ../cli/src/connections.c:8063
+#: ../clients/cli/connections.c:8328
#, 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
+#: ../clients/cli/connections.c:8441 ../clients/cli/network-manager.c:613
#, c-format
-msgid "Error: '%s' is not valid 'connection' command."
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s' वैध 'connection' आदेश नाही."
+msgid "Error: Could not get system settings: %s."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: पà¥à¤°à¤£à¤¾à¤²à¥€ सेटिंगà¥à¤œ पà¥à¤°à¤¾à¤ªà¥à¤¤ करणे अशकà¥à¤¯: %s."
-#: ../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
+#: ../clients/cli/connections.c:8451
#, c-format
msgid "Error: Can't obtain connections: settings service is not running."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: जोडणी पà¥à¤°à¤¾à¤ªà¥à¤¤ करणà¥à¤¯à¤¾à¤¸ अशकà¥à¤¯: सेटिंगà¥à¤¸à¥ सरà¥à¤µà¥à¤¹à¤¿à¤¸ कारà¥à¤¯à¤°à¤¤ नाही."
+#: ../clients/cli/connections.c:8505
+#, c-format
+msgid "Error: '%s' is not valid 'connection' command."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s' वैध 'connection' आदेश नाही."
+
+#. define some prompts
+#: ../clients/cli/devices.c:36
+msgid "Interface: "
+msgstr "संवाद: "
+
#. 3
-#. 16
-#: ../cli/src/devices.c:75 ../cli/src/devices.c:103
+#. 17
+#: ../clients/cli/devices.c:44 ../clients/cli/devices.c:73
msgid "CONNECTION"
msgstr "CONNECTION"
#. 4
-#. 17
-#: ../cli/src/devices.c:76 ../cli/src/devices.c:104
-#| msgid "UUID"
+#. 18
+#: ../clients/cli/devices.c:45 ../clients/cli/devices.c:74
msgid "CON-UUID"
msgstr "CON-UUID"
#. 2
-#: ../cli/src/devices.c:89
+#: ../clients/cli/devices.c:58
msgid "VENDOR"
msgstr "VENDOR"
#. 3
-#: ../cli/src/devices.c:90
+#: ../clients/cli/devices.c:59
msgid "PRODUCT"
msgstr "PRODUCT"
#. 4
-#: ../cli/src/devices.c:91
+#: ../clients/cli/devices.c:60
msgid "DRIVER"
msgstr "DRIVER"
#. 5
-#: ../cli/src/devices.c:92
+#: ../clients/cli/devices.c:61
msgid "DRIVER-VERSION"
msgstr "DRIVER-VERSION"
#. 6
-#: ../cli/src/devices.c:93
+#: ../clients/cli/devices.c:62
msgid "FIRMWARE-VERSION"
msgstr "FIRMWARE-VERSION"
#. 7
-#: ../cli/src/devices.c:94
+#: ../clients/cli/devices.c:63
msgid "HWADDR"
msgstr "HWADDR"
#. 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
+#: ../clients/cli/devices.c:64 ../clients/tui/nmt-page-ethernet.c:86
+#: ../clients/tui/nmt-page-infiniband.c:96 ../clients/tui/nmt-page-vlan.c:130
+#: ../clients/tui/nmt-page-wifi.c:366
msgid "MTU"
msgstr "MTU"
#. 10
-#: ../cli/src/devices.c:97
+#: ../clients/cli/devices.c:66
msgid "REASON"
msgstr "REASON"
#. 11
-#: ../cli/src/devices.c:98
+#: ../clients/cli/devices.c:67
msgid "UDI"
msgstr "UDI"
#. 12
-#: ../cli/src/devices.c:99
+#: ../clients/cli/devices.c:68
msgid "IP-IFACE"
msgstr "IP-IFACE"
#. 13
-#: ../cli/src/devices.c:100
+#. 2
+#: ../clients/cli/devices.c:69 ../clients/cli/devices.c:97
+msgid "IS-SOFTWARE"
+msgstr "IS-SOFTWARE"
+
+#. 14
+#: ../clients/cli/devices.c:70
msgid "NM-MANAGED"
msgstr "NM-MANAGED"
-#. 15
-#: ../cli/src/devices.c:102
+#. 16
+#: ../clients/cli/devices.c:72
msgid "FIRMWARE-MISSING"
msgstr "FIRMWARE-MISSING"
#. 0
-#: ../cli/src/devices.c:115
+#: ../clients/cli/devices.c:85
msgid "AVAILABLE-CONNECTION-PATHS"
msgstr "AVAILABLE-CONNECTION-PATHS"
#. 1
-#: ../cli/src/devices.c:116
+#: ../clients/cli/devices.c:86
msgid "AVAILABLE-CONNECTIONS"
msgstr "AVAILABLE-CONNECTIONS"
#. 0
-#: ../cli/src/devices.c:125
+#: ../clients/cli/devices.c:95
msgid "CARRIER-DETECT"
msgstr "CARRIER-DETECT"
#. 1
-#: ../cli/src/devices.c:126
+#: ../clients/cli/devices.c:96
msgid "SPEED"
msgstr "SPEED"
#. 0
-#: ../cli/src/devices.c:135
+#: ../clients/cli/devices.c:106
msgid "CARRIER"
msgstr "CARRIER"
#. 0
-#: ../cli/src/devices.c:144 ../cli/src/devices.c:563
+#: ../clients/cli/devices.c:115 ../clients/cli/devices.c:550
msgid "WEP"
msgstr "WEP"
#. 1
-#: ../cli/src/devices.c:145
+#: ../clients/cli/devices.c:116
msgid "WPA"
msgstr "WPA"
#. 2
-#: ../cli/src/devices.c:146 ../cli/src/devices.c:571
+#: ../clients/cli/devices.c:117 ../clients/cli/devices.c:558
msgid "WPA2"
msgstr "WPA2"
#. 3
-#: ../cli/src/devices.c:147
+#: ../clients/cli/devices.c:118
msgid "TKIP"
msgstr "TKIP"
#. 4
-#: ../cli/src/devices.c:148
+#: ../clients/cli/devices.c:119
msgid "CCMP"
msgstr "CCMP"
#. 5
#. 2
-#: ../cli/src/devices.c:149 ../cli/src/devices.c:239
+#: ../clients/cli/devices.c:120 ../clients/cli/devices.c:210
msgid "AP"
msgstr "AP"
#. 6
-#: ../cli/src/devices.c:150
+#: ../clients/cli/devices.c:121
msgid "ADHOC"
msgstr "ADHOC"
#. 0
-#: ../cli/src/devices.c:159
+#: ../clients/cli/devices.c:130
msgid "CTR-FREQ"
msgstr "CTR-FREQ"
#. 1
-#: ../cli/src/devices.c:160
+#: ../clients/cli/devices.c:131
msgid "RSSI"
msgstr "RSSI"
#. 2
-#: ../cli/src/devices.c:161
+#: ../clients/cli/devices.c:132
msgid "CINR"
msgstr "CINR"
#. 3
-#: ../cli/src/devices.c:162
+#: ../clients/cli/devices.c:133
msgid "TX-POW"
msgstr "TX-POW"
#. 4
-#: ../cli/src/devices.c:163
+#: ../clients/cli/devices.c:134
msgid "BSID"
msgstr "BSID"
#. 0
-#: ../cli/src/devices.c:172 ../tui/nmt-page-wifi.c:221
+#: ../clients/cli/devices.c:143 ../clients/tui/nmt-page-wifi.c:220
msgid "SSID"
msgstr "SSID"
#. 1
-#: ../cli/src/devices.c:173
+#: ../clients/cli/devices.c:144
msgid "SSID-HEX"
msgstr "SSID-HEX"
#. 2
-#: ../cli/src/devices.c:174 ../tui/nmt-page-wifi.c:352
+#: ../clients/cli/devices.c:145 ../clients/tui/nmt-page-wifi.c:354
msgid "BSSID"
msgstr "BSSID"
#. 3
-#: ../cli/src/devices.c:175
+#: ../clients/cli/devices.c:146
msgid "MODE"
msgstr "MODE"
#. 4
-#: ../cli/src/devices.c:176
+#: ../clients/cli/devices.c:147
msgid "CHAN"
msgstr "CHAN"
#. 5
-#: ../cli/src/devices.c:177
+#: ../clients/cli/devices.c:148
msgid "FREQ"
msgstr "FREQ"
#. 6
-#: ../cli/src/devices.c:178
+#: ../clients/cli/devices.c:149
msgid "RATE"
msgstr "RATE"
#. 7
#. 1
-#: ../cli/src/devices.c:179 ../cli/src/devices.c:199
+#: ../clients/cli/devices.c:150 ../clients/cli/devices.c:170
msgid "SIGNAL"
msgstr "SIGNAL"
#. 8
-#: ../cli/src/devices.c:180
+#: ../clients/cli/devices.c:151
msgid "BARS"
msgstr "BARS"
#. 9
-#: ../cli/src/devices.c:181
+#: ../clients/cli/devices.c:152
msgid "SECURITY"
msgstr "SECURITY"
#. 10
-#: ../cli/src/devices.c:182
+#: ../clients/cli/devices.c:153
msgid "WPA-FLAGS"
msgstr "WPA-FLAGS"
#. 11
-#: ../cli/src/devices.c:183
+#: ../clients/cli/devices.c:154
msgid "RSN-FLAGS"
msgstr "RSN-FLAGS"
#. 14
-#: ../cli/src/devices.c:186
+#: ../clients/cli/devices.c:157
msgid "*"
msgstr "*"
#. 0
#. 5
-#: ../cli/src/devices.c:198 ../cli/src/devices.c:242
+#: ../clients/cli/devices.c:169 ../clients/cli/devices.c:213
msgid "NSP"
msgstr "NSP"
#. 0
-#: ../cli/src/devices.c:213
+#: ../clients/cli/devices.c:184
msgid "SLAVES"
msgstr "SLAVES"
#. 0
-#: ../cli/src/devices.c:222
+#: ../clients/cli/devices.c:193
msgid "ID"
msgstr "ID"
#. 0
-#: ../cli/src/devices.c:237
+#: ../clients/cli/devices.c:208
msgid "CAPABILITIES"
msgstr "CAPABILITIES"
#. 1
-#: ../cli/src/devices.c:238
+#: ../clients/cli/devices.c:209
msgid "WIFI-PROPERTIES"
msgstr "WIFI-PROPERTIES"
#. 3
-#: ../cli/src/devices.c:240
+#: ../clients/cli/devices.c:211
msgid "WIRED-PROPERTIES"
msgstr "WIRED-PROPERTIES"
#. 4
-#: ../cli/src/devices.c:241
+#: ../clients/cli/devices.c:212
msgid "WIMAX-PROPERTIES"
msgstr "WIMAX-PROPERTIES"
#. 10
-#: ../cli/src/devices.c:247 ../tui/nmt-page-bond.c:73
+#: ../clients/cli/devices.c:218 ../clients/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
+#: ../clients/cli/devices.c:220
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>\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"
+#: ../clients/cli/devices.c:245
+#, c-format
msgid ""
"Usage: nmcli device { COMMAND | help }\n"
"\n"
-"COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | delete | wifi | wimax }\n"
"\n"
-"COMMAND := { status | show | connect | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | delete | wifi }\n"
"\n"
" status\n"
"\n"
@@ -3300,6 +3201,8 @@ msgid ""
"\n"
" disconnect <ifname>\n"
"\n"
+" delete <ifname>\n"
+"\n"
" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
"\n"
" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
@@ -3313,9 +3216,9 @@ msgid ""
msgstr ""
"वापर: nmcli device { COMMAND | help }\n"
"\n"
-"COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | delete | wifi | wimax }\n"
"\n"
-"COMMAND := { status | show | connect | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | delete | wifi }\n"
"\n"
" status\n"
"\n"
@@ -3325,6 +3228,8 @@ msgstr ""
"\n"
" disconnect <ifname>\n"
"\n"
+" delete <ifname>\n"
+"\n"
" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
"\n"
" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
@@ -3336,7 +3241,7 @@ msgstr ""
" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
-#: ../cli/src/devices.c:298
+#: ../clients/cli/devices.c:270
#, c-format
msgid ""
"Usage: nmcli device status { help }\n"
@@ -3364,10 +3269,11 @@ msgstr ""
"'--fields' जागतिक परà¥à¤¯à¤¾à¤¯à¤šà¤¾ वापर करून दृषà¥à¤¯à¤¾à¤¸à¥à¤ªà¤¦ सà¥à¤¤à¤‚भ बदलणे शकà¥à¤¯ आहे. "
"'status'\n"
"पूरà¥à¤µà¤¨à¤¿à¤°à¥à¤§à¤¾à¤°à¤¿à¤¤ आदेश आहे, जे 'nmcli device' हे 'nmcli device status' ला कॉल "
-"करते असे सà¥à¤ªà¤·à¥à¤Ÿ करते.\n"
+"करते असे "
+"सà¥à¤ªà¤·à¥à¤Ÿ करते.\n"
"\n"
-#: ../cli/src/devices.c:314
+#: ../clients/cli/devices.c:286
#, c-format
msgid ""
"Usage: nmcli device show { ARGUMENTS | help }\n"
@@ -3386,7 +3292,7 @@ msgstr ""
"आदेश सरà¥à¤µ साधनांकरिता, किंवा ठरावकि साधनाकरिता तपशील दाखवते.\n"
"\n"
-#: ../cli/src/devices.c:326
+#: ../clients/cli/devices.c:298
#, c-format
msgid ""
"Usage: nmcli device connect { ARGUMENTS | help }\n"
@@ -3404,12 +3310,11 @@ msgstr ""
"ARGUMENTS := <ifname>\n"
"\n"
"साधनाची जोडणी करा.\n"
-"NetworkManager योगà¥à¤¯ जोडणी शोधणà¥à¤¯à¤¾à¤šà¤¾ पà¥à¤°à¤¯à¤¤à¥à¤¨ करेल जà¥à¤¯à¤¾à¤¸ सकà¥à¤°à¥€à¤¯ केले जाईल."
-"\n"
+"NetworkManager योगà¥à¤¯ जोडणी शोधणà¥à¤¯à¤¾à¤šà¤¾ पà¥à¤°à¤¯à¤¤à¥à¤¨ करेल जà¥à¤¯à¤¾à¤¸ सकà¥à¤°à¥€à¤¯ केले जाईल.\n"
"auto-connect करिता सेट न केलेलà¥à¤¯à¤¾ जोडणींचा देखील विचार होईल.\n"
"\n"
-#: ../cli/src/devices.c:339
+#: ../clients/cli/devices.c:311
#, c-format
msgid ""
"Usage: nmcli device disconnect { ARGUMENTS | help }\n"
@@ -3427,11 +3332,35 @@ msgstr ""
"\n"
"साधनाला खंडीत करा.\n"
"आदेश साधनाला खंडीत करते आणि तà¥à¤¯à¤¾à¤¸ विना वापरकरà¥à¤¤à¤¾ किंवा मॅनà¥à¤¯à¥à¤…ल मतभेदविना "
-"पà¥à¤¢à¥€à¤² जोडणींकरिता\n"
+"पà¥à¤¢à¥€à¤² "
+"जोडणींकरिता\n"
"सà¥à¤µ-सकà¥à¤°à¥€à¤¯ होणà¥à¤¯à¤¾à¤ªà¤¾à¤¸à¥‚न अडवते.\n"
"\n"
-#: ../cli/src/devices.c:352
+#: ../clients/cli/devices.c:324
+#, c-format
+msgid ""
+"Usage: nmcli device delete { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Deletes the software device.\n"
+"The command removes the interface. It only works for software devices\n"
+"(like bonds, bridges, etc.). Hardware devices cannot be deleted by the\n"
+"command.\n"
+"\n"
+msgstr ""
+"वापर: nmcli device delete { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"सॉफà¥à¤Ÿà¤µà¥‡à¤…र साधन नषà¥à¤Ÿ करते.\n"
+"आदेश संवाद काढून टाकते. ते फकà¥à¤¤ सॉफà¥à¤Ÿà¤µà¥‡à¤…र साधनांशी कारà¥à¤¯ करते\n"
+"(जसे कि बाà¤à¤¡à¥à¤œ, बà¥à¤°à¤¿à¤œà¥‡à¤¸, इतà¥à¤¯à¤¾à¤¦à¤¿). हारà¥à¤¡à¤µà¥‡à¤…र साधनांना\n"
+"आदेशतरà¥à¤«à¥‡ नषà¥à¤Ÿ करणे शकà¥à¤¯ नाही.\n"
+"\n"
+
+#: ../clients/cli/devices.c:338
#, c-format
msgid ""
"Usage: nmcli device wifi { ARGUMENTS | help }\n"
@@ -3476,8 +3405,8 @@ msgstr ""
"वापर\n"
"ठराविक संवादकरिता, किंवा ठराविक BSSID सह APs दाखवणà¥à¤¯à¤¾à¤•à¤°à¤¿à¤¤à¤¾ केला जातो.\n"
"\n"
-"ARGUMENTS := connect <(B)SSID> [password <password>] [wep-key-type "
-"key|phrase] [ifname <ifname>]\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"
@@ -3486,7 +3415,8 @@ msgstr ""
"नवीन जोडणी निरà¥à¤®à¤¾à¤£ करतो आणि बऱà¥à¤¯à¤¾à¤ªà¥ˆà¤•à¥€ नवीन वायफाय नेटवरà¥à¤•à¥à¤¸à¤¶à¥€ जोडणी "
"करणà¥à¤¯à¤¾à¤•à¤°à¤¿à¤¤à¤¾\n"
"उपयोगी ठरते. नेटवरà¥à¤•à¤•à¤°à¤¿à¤¤à¤¾ जोडणी आधीपासूनच असà¥à¤¤à¤¿à¤¤à¥à¤µà¤¾à¤¤ असलà¥à¤¯à¤¾à¤¸, असà¥à¤¤à¤¿à¤¤à¥à¤µà¤¾à¤¤à¥€à¤² "
-"पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤²à¥à¤¸ खालीलपà¥à¤°à¤®à¤¾à¤£à¥‡\n"
+"पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤²à¥à¤¸ "
+"खालीलपà¥à¤°à¤®à¤¾à¤£à¥‡\n"
"सकà¥à¤°à¥€à¤¯ करणे शिफारसीय आहे: nmcli con up id <name>. लकà¥à¤·à¤¾à¤¤ ठेवा\n"
", फकà¥à¤¤ WEP आणि WPA-PSK नेटवरà¥à¤•à¥à¤¸ याकà¥à¤·à¤£à¥€ समरà¥à¤¥à¥€à¤¤ आहे. \n"
"DHCP तरà¥à¤«à¥‡ IP संरचना पà¥à¤°à¤¾à¤ªà¥à¤¤ होते, असेही सà¥à¤µà¥€à¤•à¤¾à¤°à¤²à¥‡ जाते.\n"
@@ -3495,12 +3425,13 @@ msgstr ""
"\n"
"NetworkManager ने उपलबà¥à¤§ ॲकà¥à¤¸à¥‡à¤¸ पॉइंटà¥à¤¸à¤•à¤°à¤¿à¤¤à¤¾ पà¥à¤¨à¥à¤¹à¤¾à¤¸à¥à¤•à¥…न करायची विनंती करा.\n"
"NetworkManager वायफाय नेटवरà¥à¤•à¥à¤¸ वेळोवेळी सà¥à¤•à¥…न करतो, परंतॠकाही घटनांमधà¥à¤¯à¥‡ "
-"सà¥à¤µà¤¹à¤¸à¥à¤¤à¥‡ सà¥à¤•à¥…निंग सà¥à¤°à¥‚ करणे\n"
+"सà¥à¤µà¤¹à¤¸à¥à¤¤à¥‡ सà¥à¤•à¥…निंग "
+"सà¥à¤°à¥‚ करणे\n"
"उपयोगी ठरू शकते. लकà¥à¤·à¤¾à¤¤ ठेवा आदेश\n"
"APs दाखवत नाही, तà¥à¤¯à¤¾à¤•à¤°à¤¿à¤¤à¤¾ 'nmcli device wifi list' याचा वापर करा.\n"
"\n"
-#: ../cli/src/devices.c:386
+#: ../clients/cli/devices.c:372
#, c-format
msgid ""
"Usage: nmcli device wimax { ARGUMENTS | help }\n"
@@ -3523,200 +3454,211 @@ msgstr ""
"ठराविक संवादकरिता, किंवा ठराविक NSP सह नेटवरà¥à¤• सूची दाखवणà¥à¤¯à¤¾à¤¸ शकà¥à¤¯ आहे.\n"
"\n"
-#: ../cli/src/devices.c:480
+#: ../clients/cli/devices.c:461
msgid "(none)"
msgstr "(काहिच नाही)"
-#: ../cli/src/devices.c:547
+#: ../clients/cli/devices.c:534
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:548
+#: ../clients/cli/devices.c:535
#, c-format
msgid "%u Mbit/s"
msgstr "%u Mbit/s"
-#: ../cli/src/devices.c:567
+#: ../clients/cli/devices.c:554
msgid "WPA1"
msgstr "WPA1"
-#: ../cli/src/devices.c:576
+#: ../clients/cli/devices.c:563
msgid "802.1X"
msgstr "802.1X"
-#: ../cli/src/devices.c:592
+#: ../clients/cli/devices.c:579
msgid "Ad-Hoc"
msgstr "à¤à¤¡-हॉक"
-#: ../cli/src/devices.c:593
+#: ../clients/cli/devices.c:580
msgid "Infra"
msgstr "इंफà¥à¤°à¤¾"
-#: ../cli/src/devices.c:625
+#: ../clients/cli/devices.c:612
msgid "Home"
msgstr "होम"
-#: ../cli/src/devices.c:628
+#: ../clients/cli/devices.c:615
msgid "Partner"
msgstr "पारà¥à¤Ÿà¤¨à¤°"
-#: ../cli/src/devices.c:631
+#: ../clients/cli/devices.c:618
msgid "Roaming"
msgstr "रोमिंग"
-#: ../cli/src/devices.c:725
+#: ../clients/cli/devices.c:712
msgid "Device details"
msgstr "साधनाचे तपशील"
-#: ../cli/src/devices.c:737
+#: ../clients/cli/devices.c:724
#, 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
+#: ../clients/cli/devices.c:775 ../clients/cli/devices.c:778
+#: ../clients/cli/devices.c:1326 ../clients/cli/devices.c:1468
+#: ../clients/cli/devices.c:1580
msgid "(unknown)"
msgstr "(अपरिचीत)"
-#: ../cli/src/devices.c:827
+#: ../clients/cli/devices.c:816
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
-#: ../cli/src/devices.c:913
+#: ../clients/cli/devices.c:902
msgid "on"
msgstr "सà¥à¤°à¥‚ करा"
-#: ../cli/src/devices.c:913
+#: ../clients/cli/devices.c:902
msgid "off"
msgstr "बंद करा"
-#: ../cli/src/devices.c:1188
+#: ../clients/cli/devices.c:1177
#, c-format
msgid "Error: 'device status': %s"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'साधन सà¥à¤¥à¤¿à¤¤à¥€': %s"
#. Add headers
-#: ../cli/src/devices.c:1206
+#: ../clients/cli/devices.c:1195
msgid "Status of devices"
msgstr "साधनांची सà¥à¤¥à¤¿à¤¤à¥€"
-#: ../cli/src/devices.c:1237
+#: ../clients/cli/devices.c:1226
#, c-format
msgid "Error: invalid extra argument '%s'."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: अवैध अगाऊ बाब '%s'."
-#: ../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
+#: ../clients/cli/devices.c:1254 ../clients/cli/devices.c:1416
+#: ../clients/cli/devices.c:1550 ../clients/cli/devices.c:1644
+#: ../clients/cli/devices.c:1788 ../clients/cli/devices.c:2546
#, c-format
msgid "Error: Device '%s' not found."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: साधन '%s' आढळले नाही."
-#: ../cli/src/devices.c:1319
+#: ../clients/cli/devices.c:1309
#, c-format
-#| msgid "Success: Device '%s' successfully disconnected."
-msgid "Success: Device '%s' successfully activated."
-msgstr "यशसà¥à¤µà¥€: साधन '%s' यशसà¥à¤µà¥€à¤°à¤¿à¤¤à¥à¤¯à¤¾ सकà¥à¤°à¥€à¤¯ केले."
+msgid "Device '%s' successfully activated with '%s'.\n"
+msgstr "साधन '%s' यशसà¥à¤µà¥€à¤°à¤¿à¤¤à¥à¤¯à¤¾ '%s' सह सकà¥à¤°à¥€à¤¯ केले.\n"
-#: ../cli/src/devices.c:1333
+#: ../clients/cli/devices.c:1325
#, c-format
-#| msgid "Error: Connection activation failed: %s"
msgid "Error: Device activation failed: %s"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: साधन सकà¥à¤°à¥€à¤¯ करणे अपयशी: %s"
-#: ../cli/src/devices.c:1350
+#: ../clients/cli/devices.c:1333
+#, c-format
+msgid "Error: Device activation failed: device was disconnected"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: साधन सकà¥à¤°à¥€à¤¯ करणे अपयशी: साधन खंडीत à¤à¤¾à¤²à¥‡"
+
+#: ../clients/cli/devices.c:1346
#, 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
+#: ../clients/cli/devices.c:1375 ../clients/cli/devices.c:1384
+#: ../clients/cli/devices.c:1509 ../clients/cli/devices.c:1518
+#: ../clients/cli/devices.c:1604 ../clients/cli/devices.c:1612
#, c-format
msgid "Error: No interface specified."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: संवाद निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ नाही."
-#: ../cli/src/devices.c:1396 ../cli/src/devices.c:1531
+#: ../clients/cli/devices.c:1390 ../clients/cli/devices.c:1524
+#: ../clients/cli/devices.c:1618
#, c-format
msgid "Error: extra argument not allowed: '%s'."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: अगाऊ बाब सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ नाही: '%s'."
-#: ../cli/src/devices.c:1459
+#: ../clients/cli/devices.c:1453
#, c-format
msgid "Success: Device '%s' successfully disconnected."
msgstr "यशसà¥à¤µà¥€: साधन '%s' यशसà¥à¤µà¥€à¤°à¤¿à¤¤à¥à¤¯à¤¾ खंडीत à¤à¤¾à¤²à¥‡."
-#: ../cli/src/devices.c:1471
+#: ../clients/cli/devices.c:1465
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: साधन '%s' (%s) खंडीत होणे अपयशी à¤à¤¾à¤²à¥‡: %s"
-#: ../cli/src/devices.c:1485
+#: ../clients/cli/devices.c:1479
#, c-format
msgid "Device '%s' has been disconnected.\n"
msgstr "साधन '%s' खंडीत à¤à¤¾à¤²à¥‡.\n"
-#: ../cli/src/devices.c:1628
+#: ../clients/cli/devices.c:1577
+#, c-format
+msgid "Error: Device '%s' (%s) deletion failed: %s"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: साधन '%s' (%s) नषà¥à¤Ÿ करणे अपयशी: %s"
+
+#: ../clients/cli/devices.c:1650
+#, c-format
+msgid "Error: Device '%s' is a hardware device. It can't be deleted."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: साधन '%s' हे हारà¥à¤¡à¤µà¥‡à¤…र साधन आहे: तà¥à¤¯à¤¾à¤¸ नषà¥à¤Ÿ करणे शकà¥à¤¯ नाही."
+
+#: ../clients/cli/devices.c:1720
msgid "Wi-Fi scan list"
msgstr "Wi-Fi सà¥à¤•à¥…न सूची"
-#: ../cli/src/devices.c:1666
+#: ../clients/cli/devices.c:1758
#, c-format
msgid "Error: 'device wifi': %s"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'device wifi': %s"
-#: ../cli/src/devices.c:1719 ../cli/src/devices.c:1788
+#: ../clients/cli/devices.c:1811 ../clients/cli/devices.c:1886
#, c-format
msgid "Error: Access point with bssid '%s' not found."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: bssid '%s' सह ॲकà¥à¤¸à¥‡à¤¸ पॉइंट आढळले नाही."
-#: ../cli/src/devices.c:1743 ../cli/src/devices.c:2131
-#: ../cli/src/devices.c:2293
+#: ../clients/cli/devices.c:1835 ../clients/cli/devices.c:2241
+#: ../clients/cli/devices.c:2403
#, c-format
msgid "Error: Device '%s' is not a Wi-Fi device."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: साधन '%s' Wi-Fi साधन नाही."
-#: ../cli/src/devices.c:1825 ../cli/src/devices.c:1872
+#: ../clients/cli/devices.c:1929 ../clients/cli/devices.c:1977
#, c-format
msgid "Connection with UUID '%s' created and activated on device '%s'\n"
msgstr "UUID '%s' सह जोडणी निरà¥à¤®à¤¾à¤£ केली व साधन '%s' वर सà¥à¤°à¥‚ केली\n"
-#: ../cli/src/devices.c:1829
+#: ../clients/cli/devices.c:1934
#, c-format
msgid "Error: Connection activation failed: (%d) %s."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: जोडणी सà¥à¤°à¥‚ करणे अपयशी: (%d) %s."
-#: ../cli/src/devices.c:1854
+#: ../clients/cli/devices.c:1959
#, c-format
msgid "Error: Failed to add/activate new connection: (%d) %s"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: नवीन जोडणी: (%d) %s समाविषà¥à¤Ÿ/सà¥à¤°à¥‚ करणà¥à¤¯à¤¾à¤¸ अपयशी"
-#: ../cli/src/devices.c:1862
+#: ../clients/cli/devices.c:1967
#, c-format
msgid "Error: Failed to add/activate new connection: Unknown error"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: नवीन जोडणी समाविषà¥à¤Ÿ/सà¥à¤°à¥‚ करणà¥à¤¯à¤¾à¤¸ अपयशी: अपरिचीत तà¥à¤°à¥à¤Ÿà¥€"
-#: ../cli/src/devices.c:2013
+#: ../clients/cli/devices.c:2123
msgid "SSID or BSSID: "
msgstr "SSID किंवा BSSID: "
-#: ../cli/src/devices.c:2018
+#: ../clients/cli/devices.c:2128
#, c-format
msgid "Error: SSID or BSSID are missing."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: SSID किंवा BSSID आढळले नाही."
-#: ../cli/src/devices.c:2042
+#: ../clients/cli/devices.c:2152
#, c-format
msgid "Error: bssid argument value '%s' is not a valid BSSID."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: bssid घटक मूलà¥à¤¯ '%s' वैध BSSID नाही."
-#: ../cli/src/devices.c:2066
+#: ../clients/cli/devices.c:2176
#, c-format
msgid ""
"Error: wep-key-type argument value '%s' is invalid, use 'key' or 'phrase'."
@@ -3724,165 +3666,153 @@ msgstr ""
"तà¥à¤°à¥à¤Ÿà¥€: wep-key-type आरà¥à¤—à¥à¤¯à¥à¤®à¥‡à¤‚ट मूलà¥à¤¯ '%s' अवैध आहे, 'key' किंवा 'phrase'चा "
"वापर करा."
-#: ../cli/src/devices.c:2086
+#: ../clients/cli/devices.c:2196
#, c-format
msgid "Error: %s: %s."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: %s: %s."
-#: ../cli/src/devices.c:2101
+#: ../clients/cli/devices.c:2211
#, c-format
msgid "Error: BSSID to connect to (%s) differs from bssid argument (%s)."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: जोडणà¥à¤¯à¤¾à¤œà¥‹à¤—ी BSSID (%s) bssid आरà¥à¤—à¥à¤¯à¥à¤®à¥‡à¤‚ट (%s) पासून भिनà¥à¤¨ आहे."
-#: ../cli/src/devices.c:2107
+#: ../clients/cli/devices.c:2217
#, c-format
msgid "Error: Parameter '%s' is neither SSID nor BSSID."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: घटक '%s' SSID किंवा BSSID नाही."
-#: ../cli/src/devices.c:2133 ../cli/src/devices.c:2295
+#: ../clients/cli/devices.c:2243 ../clients/cli/devices.c:2405
#, c-format
msgid "Error: No Wi-Fi device found."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: Wi-Fi साधन आढळले नाही."
-#: ../cli/src/devices.c:2151
+#: ../clients/cli/devices.c:2261
#, c-format
msgid "Error: No network with SSID '%s' found."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: SSID '%s' सह नेटवरà¥à¤• आढळले नाही."
-#: ../cli/src/devices.c:2153
+#: ../clients/cli/devices.c:2263
#, c-format
msgid "Error: No access point with BSSID '%s' found."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: BSSID '%s' सह ॲकà¥à¤¸à¥‡à¤¸ पॉईंट आढळले नाही."
-#: ../cli/src/devices.c:2192
+#: ../clients/cli/devices.c:2302
msgid "Password: "
msgstr "पासवरà¥à¤¡: "
-#: ../cli/src/devices.c:2321
+#: ../clients/cli/devices.c:2431
#, c-format
msgid "Error: 'device wifi' command '%s' is not valid."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'device wifi' आदेश '%s' वैध नाही."
-#: ../cli/src/devices.c:2368
+#: ../clients/cli/devices.c:2478
msgid "WiMAX NSP list"
msgstr "WiMAX NSP सूची"
-#: ../cli/src/devices.c:2405
+#: ../clients/cli/devices.c:2515
#, c-format
msgid "Error: 'device wimax': %s"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'साधन wimax': %s"
-#: ../cli/src/devices.c:2459
+#: ../clients/cli/devices.c:2569
#, c-format
msgid "Error: NSP with name '%s' not found."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: NSP, साधन '%s' सह आढळले नाही."
-#: ../cli/src/devices.c:2472
+#: ../clients/cli/devices.c:2582
#, c-format
msgid "Error: Device '%s' is not a WiMAX device."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: साधन '%s' हे WiMAX साधन नाही."
-#: ../cli/src/devices.c:2510
+#: ../clients/cli/devices.c:2626
#, c-format
msgid "Error: Access point with nsp '%s' not found."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: nsp '%s' सह ॲकà¥à¤¸à¥‡à¤¸ पॉईंट आढळले नाही."
-#: ../cli/src/devices.c:2542
+#: ../clients/cli/devices.c:2663
#, c-format
msgid "Error: 'device wimax' command '%s' is not valid."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'device wimax' आदेश '%s' वैध नाही."
-#: ../cli/src/devices.c:2621
+#: ../clients/cli/devices.c:2820
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'dev' आदेश '%s' वैध नाही."
-#: ../cli/src/network-manager.c:37
+#: ../clients/cli/network-manager.c:35
msgid "RUNNING"
msgstr "RUNNING"
#. 0
-#: ../cli/src/network-manager.c:38
+#: ../clients/cli/network-manager.c:36
msgid "VERSION"
msgstr "VERSION"
#. 2
-#: ../cli/src/network-manager.c:40
+#: ../clients/cli/network-manager.c:38
msgid "STARTUP"
msgstr "STARTUP"
#. 3
-#: ../cli/src/network-manager.c:41
-#| msgid "CONNECTION"
+#: ../clients/cli/network-manager.c:39
msgid "CONNECTIVITY"
msgstr "CONNECTIVITY"
#. 4
-#: ../cli/src/network-manager.c:42
+#: ../clients/cli/network-manager.c:40
msgid "NETWORKING"
msgstr "NETWORKING"
#. 5
-#: ../cli/src/network-manager.c:43
+#: ../clients/cli/network-manager.c:41
msgid "WIFI-HW"
msgstr "WIFI-HW"
#. 6
-#: ../cli/src/network-manager.c:44
+#: ../clients/cli/network-manager.c:42
msgid "WIFI"
msgstr "WIFI"
#. 7
-#: ../cli/src/network-manager.c:45
+#: ../clients/cli/network-manager.c:43
msgid "WWAN-HW"
msgstr "WWAN-HW"
#. 8
-#: ../cli/src/network-manager.c:46
+#: ../clients/cli/network-manager.c:44
msgid "WWAN"
msgstr "WWAN"
#. 9
-#: ../cli/src/network-manager.c:47
+#: ../clients/cli/network-manager.c:45
msgid "WIMAX-HW"
msgstr "WIMAX-HW"
#. 10
-#: ../cli/src/network-manager.c:48
+#: ../clients/cli/network-manager.c:46
msgid "WIMAX"
msgstr "WIMAX"
-#: ../cli/src/network-manager.c:70
+#: ../clients/cli/network-manager.c:68
msgid "PERMISSION"
msgstr "PERMISSION"
#. 0
-#: ../cli/src/network-manager.c:71
+#: ../clients/cli/network-manager.c:69
msgid "VALUE"
msgstr "VALUE"
-#: ../cli/src/network-manager.c:79
+#: ../clients/cli/network-manager.c:77
msgid "LEVEL"
msgstr "LEVEL"
#. 0
-#: ../cli/src/network-manager.c:80
+#: ../clients/cli/network-manager.c:78
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"
+#: ../clients/cli/network-manager.c:93
+#, c-format
msgid ""
"Usage: nmcli general { COMMAND | help }\n"
"\n"
@@ -3910,7 +3840,7 @@ msgstr ""
" logging [level <log level>] [domains <log domains>]\n"
"\n"
-#: ../cli/src/network-manager.c:107
+#: ../clients/cli/network-manager.c:105
#, c-format
msgid ""
"Usage: nmcli general status { help }\n"
@@ -3923,11 +3853,12 @@ msgstr ""
"वापर: nmcli general status { help }\n"
"\n"
"NetworkManagerची सरासर सà¥à¤¥à¤¿à¤¤à¥€ दाखवा.\n"
-"'status' पूरà¥à¤µà¤¨à¤¿à¤°à¥à¤§à¤¾à¤°à¤¿à¤¤ कृती आहे, मà¥à¤¹à¤£à¤œà¥‡à¤š 'nmcli gen' हे 'nmcli gen "
-"status'ला कॉल करते\n"
+"'status' पूरà¥à¤µà¤¨à¤¿à¤°à¥à¤§à¤¾à¤°à¤¿à¤¤ कृती आहे, मà¥à¤¹à¤£à¤œà¥‡à¤š 'nmcli gen' हे 'nmcli gen status'ला "
+"कॉल "
+"करते\n"
"\n"
-#: ../cli/src/network-manager.c:117
+#: ../clients/cli/network-manager.c:115
#, c-format
msgid ""
"Usage: nmcli general hostname { ARGUMENTS | help }\n"
@@ -3946,11 +3877,10 @@ msgstr ""
"\n"
"पà¥à¤°à¤£à¤¾à¤²à¥€ यजमाननाव पà¥à¤°à¤¾à¤ªà¥à¤¤ करा किंवा कायमसà¥à¤µà¤°à¥‚पी बदला.\n"
"विना बाब, हे सधà¥à¤¯à¤¾à¤šà¥‡ यजमाननावाची छपाई करते. यजमाननाव पà¥à¤°à¤µà¤²à¥à¤¯à¤¾à¤µà¤°\n"
-", NetworkManager तà¥à¤¯à¤¾à¤¸ कायमसà¥à¤µà¤°à¥‚पी पà¥à¤°à¤£à¤¾à¤²à¥€ यजमाननाव असे सेट करेल."
-"\n"
+", NetworkManager तà¥à¤¯à¤¾à¤¸ कायमसà¥à¤µà¤°à¥‚पी पà¥à¤°à¤£à¤¾à¤²à¥€ यजमाननाव असे सेट करेल.\n"
"\n"
-#: ../cli/src/network-manager.c:130
+#: ../clients/cli/network-manager.c:128
#, c-format
msgid ""
"Usage: nmcli general permissions { help }\n"
@@ -3963,7 +3893,7 @@ msgstr ""
"ओळख पटलेलà¥à¤¯à¤¾ कारà¥à¤¯à¤¾à¤‚करिता कॉलर परवानगी दाखवा.\n"
"\n"
-#: ../cli/src/network-manager.c:139
+#: ../clients/cli/network-manager.c:137
#, c-format
msgid ""
"Usage: nmcli general logging { ARGUMENTS | help }\n"
@@ -3985,18 +3915,13 @@ msgstr ""
"NetworkManager लॉगिंग सà¥à¤¤à¤° आणि डोमेनà¥à¤¸ पà¥à¤°à¤¾à¤ªà¥à¤¤ करा किंवा बदला.\n"
"कोणतà¥à¤¯à¤¾à¤¹à¥€ बाबविना सधà¥à¤¯à¤¾à¤šà¥à¤¯à¤¾ लॉगिंग सà¥à¤¤à¤° आणि डोमेनà¥à¤¸ दाखवले जातात. लॉगिंग सà¥à¤¤à¤° "
"बदलणà¥à¤¯à¤¾à¤•à¤°à¤¿à¤¤à¤¾\n"
-", सà¥à¤¤à¤° आणि/किंवा डोमेन पà¥à¤°à¤µà¤¾. संभावà¥à¤¯ लॉगिंग डोमेनà¥à¤¸à¤šà¥à¤¯à¤¾ सूचीकरिता "
-"कृपया man पृषà¥à¤ \n"
+", सà¥à¤¤à¤° आणि/किंवा डोमेन पà¥à¤°à¤µà¤¾. संभावà¥à¤¯ लॉगिंग डोमेनà¥à¤¸à¤šà¥à¤¯à¤¾ सूचीकरिता कृपया man "
+"पृषà¥à¤ \n"
"पहा.\n"
"\n"
-#: ../cli/src/network-manager.c:153
+#: ../clients/cli/network-manager.c:151
#, c-format
-#| msgid ""
-#| "Usage: nmcli networking { COMMAND | help }\n"
-#| "\n"
-#| " COMMAND := { [ on | off ] }\n"
-#| "\n"
msgid ""
"Usage: nmcli networking { COMMAND | help }\n"
"\n"
@@ -4020,13 +3945,8 @@ msgstr ""
" connectivity [check]\n"
"\n"
-#: ../cli/src/network-manager.c:164
+#: ../clients/cli/network-manager.c:162
#, c-format
-#| msgid ""
-#| "Usage: nmcli networking { COMMAND | help }\n"
-#| "\n"
-#| " COMMAND := { [ on | off ] }\n"
-#| "\n"
msgid ""
"Usage: nmcli networking on { help }\n"
"\n"
@@ -4038,13 +3958,8 @@ msgstr ""
"सà¥à¤µà¤¿à¤š नेटवरà¥à¤•à¤¿à¤‚ग सà¥à¤°à¥‚ करा.\n"
"\n"
-#: ../cli/src/network-manager.c:173
+#: ../clients/cli/network-manager.c:171
#, c-format
-#| msgid ""
-#| "Usage: nmcli networking { COMMAND | help }\n"
-#| "\n"
-#| " COMMAND := { [ on | off ] }\n"
-#| "\n"
msgid ""
"Usage: nmcli networking off { help }\n"
"\n"
@@ -4056,7 +3971,7 @@ msgstr ""
"सà¥à¤µà¤¿à¤š नेटवरà¥à¤•à¤¿à¤‚ग बंद करा.\n"
"\n"
-#: ../cli/src/network-manager.c:182
+#: ../clients/cli/network-manager.c:180
#, c-format
msgid ""
"Usage: nmcli networking connectivity { ARGUMENTS | help }\n"
@@ -4073,23 +3988,12 @@ msgstr ""
"ARGUMENTS := [check]\n"
"\n"
"नेटवरà¥à¤• जोडणी सà¥à¤¤à¤° पà¥à¤°à¤¾à¤ªà¥à¤¤ करा.\n"
-"वैकà¥à¤²à¤ªà¤¿à¤• 'check' बाब NetworkManagerला जोडणी पà¥à¤¨à¥à¤¹à¤¾ तपासणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ परवानगी देते."
-"\n"
+"वैकà¥à¤²à¤ªà¤¿à¤• 'check' बाब NetworkManagerला जोडणी पà¥à¤¨à¥à¤¹à¤¾ तपासणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ परवानगी "
+"देते.\n"
"\n"
-#: ../cli/src/network-manager.c:195
+#: ../clients/cli/network-manager.c:193
#, 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"
@@ -4113,7 +4017,7 @@ msgstr ""
" all | wifi | wwan [ on | off ]\n"
"\n"
-#: ../cli/src/network-manager.c:210
+#: ../clients/cli/network-manager.c:208
#, c-format
msgid ""
"Usage: nmcli radio all { ARGUMENTS | help }\n"
@@ -4130,7 +4034,7 @@ msgstr ""
"सरà¥à¤µ रेडिओ सà¥à¤µà¤¿à¤šà¥‡à¤¸à¤šà¥€ सà¥à¤¥à¤¿à¤¤à¥€ पà¥à¤°à¤¾à¤ªà¥à¤¤ करा, किंवा तà¥à¤¯à¤¾à¤¸ सà¥à¤°à¥‚ किंवा बंद करा.\n"
"\n"
-#: ../cli/src/network-manager.c:221
+#: ../clients/cli/network-manager.c:219
#, c-format
msgid ""
"Usage: nmcli radio wifi { ARGUMENTS | help }\n"
@@ -4147,7 +4051,7 @@ msgstr ""
"वायफाय रेडिओ सà¥à¤µà¤¿à¤šà¤šà¥€ सà¥à¤¥à¤¿à¤¤à¥€ पà¥à¤°à¤¾à¤ªà¥à¤¤ करा, किंवा सà¥à¤°à¥‚/बंद करा.\n"
"\n"
-#: ../cli/src/network-manager.c:232
+#: ../clients/cli/network-manager.c:230
#, c-format
msgid ""
"Usage: nmcli radio wwan { ARGUMENTS | help }\n"
@@ -4164,7 +4068,7 @@ msgstr ""
"मोबाईल बà¥à¤°à¥‰à¤¡à¤¬à¤à¤¡ रेडिओ सà¥à¤µà¤¿à¤šà¤šà¥€ सà¥à¤¥à¤¿à¤¤à¥€ पà¥à¤°à¤¾à¤ªà¥à¤¤ करा, किंवा सà¥à¤°à¥‚/बंद करा.\n"
"\n"
-#: ../cli/src/network-manager.c:244
+#: ../clients/cli/network-manager.c:242
#, c-format
msgid ""
"Usage: nmcli radio wimax { ARGUMENTS | help }\n"
@@ -4181,179 +4085,172 @@ msgstr ""
"वायमॅकà¥à¤¸ रेडिओ सà¥à¤µà¤¿à¤šà¤šà¥€ सà¥à¤¥à¤¿à¤¤à¥€ पà¥à¤°à¤¾à¤ªà¥à¤¤ करा, किंवा सà¥à¤°à¥‚/बंद करा.\n"
"\n"
-#: ../cli/src/network-manager.c:264
+#: ../clients/cli/network-manager.c:262
msgid "asleep"
msgstr "असà¥à¤²à¥€à¤ª"
-#: ../cli/src/network-manager.c:266
+#: ../clients/cli/network-manager.c:264
msgid "connecting"
msgstr "जोडणी करत आहे"
-#: ../cli/src/network-manager.c:268
+#: ../clients/cli/network-manager.c:266
msgid "connected (local only)"
msgstr "जोडले (फकà¥à¤¤ सà¥à¤¥à¤¾à¤¨à¥€à¤¯)"
-#: ../cli/src/network-manager.c:270
+#: ../clients/cli/network-manager.c:268
msgid "connected (site only)"
msgstr "जोडले (फकà¥à¤¤ सà¥à¤¥à¤³)"
-#: ../cli/src/network-manager.c:274
+#: ../clients/cli/network-manager.c:272
msgid "disconnecting"
msgstr "जोडणी अशकà¥à¤¯ करत आहे"
-#: ../cli/src/network-manager.c:290
+#: ../clients/cli/network-manager.c:288
msgid "portal"
msgstr "पोरà¥à¤Ÿà¤²"
-#: ../cli/src/network-manager.c:292
+#: ../clients/cli/network-manager.c:290
msgid "limited"
msgstr "मरà¥à¤¯à¤¾à¤¦à¤¿à¤¤"
-#: ../cli/src/network-manager.c:294
+#: ../clients/cli/network-manager.c:292
msgid "full"
msgstr "भरलेला"
-#: ../cli/src/network-manager.c:332
+#: ../clients/cli/network-manager.c:330
#, c-format
-#| msgid "Error: 'list configured': %s; allowed fields: %s"
msgid "Error: only these fields are allowed: %s"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: फकà¥à¤¤ हे कà¥à¤·à¥‡à¤¤à¥à¤° सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ आहे: %s"
-#: ../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
+#: ../clients/cli/network-manager.c:346 ../clients/cli/network-manager.c:347
+#: ../clients/cli/network-manager.c:348 ../clients/cli/network-manager.c:349
+#: ../clients/cli/network-manager.c:350 ../clients/cli/network-manager.c:352
+#: ../clients/cli/network-manager.c:353
msgid "enabled"
msgstr "सà¥à¤°à¥‚ केले"
-#: ../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
+#: ../clients/cli/network-manager.c:346 ../clients/cli/network-manager.c:347
+#: ../clients/cli/network-manager.c:348 ../clients/cli/network-manager.c:349
+#: ../clients/cli/network-manager.c:350 ../clients/cli/network-manager.c:352
+#: ../clients/cli/network-manager.c:353
msgid "disabled"
msgstr "बंद केले"
-#: ../cli/src/network-manager.c:367
+#: ../clients/cli/network-manager.c:365
msgid "NetworkManager status"
msgstr "NetworkManager सà¥à¤¥à¤¿à¤¤à¥€"
-#: ../cli/src/network-manager.c:372
+#: ../clients/cli/network-manager.c:370
msgid "running"
msgstr "कारà¥à¤¯à¤°à¤¤ आहे"
-#: ../cli/src/network-manager.c:372
+#: ../clients/cli/network-manager.c:370
msgid "not running"
msgstr "कारà¥à¤¯à¤°à¤¤ नाही"
-#: ../cli/src/network-manager.c:375
-#| msgid "activating"
+#: ../clients/cli/network-manager.c:373
msgid "starting"
msgstr "सà¥à¤°à¥‚ करत आहे"
-#: ../cli/src/network-manager.c:375
+#: ../clients/cli/network-manager.c:373
msgid "started"
msgstr "सà¥à¤°à¥‚ केले"
-#: ../cli/src/network-manager.c:446
+#: ../clients/cli/network-manager.c:444
msgid "auth"
msgstr "auth"
-#: ../cli/src/network-manager.c:475
+#: ../clients/cli/network-manager.c:473
#, c-format
msgid "Error: 'general permissions': %s"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'सरà¥à¤µà¤¸à¤¾à¤§à¤¾à¤°à¤£ परवानगी': %s"
-#: ../cli/src/network-manager.c:489
+#: ../clients/cli/network-manager.c:487
msgid "NetworkManager permissions"
msgstr "NetworkManager परवानगी"
-#: ../cli/src/network-manager.c:530
+#: ../clients/cli/network-manager.c:528
#, c-format
msgid "Error: 'general logging': %s"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'सरà¥à¤µà¤¸à¤¾à¤§à¤¾à¤°à¤£ लॉगिंग': %s"
-#: ../cli/src/network-manager.c:545
+#: ../clients/cli/network-manager.c:543
msgid "NetworkManager logging"
msgstr "NetworkManager लॉगिंग"
-#: ../cli/src/network-manager.c:565
+#: ../clients/cli/network-manager.c:563
#, c-format
-#| 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:682
+#: ../clients/cli/network-manager.c:681
#, c-format
-#| msgid "Error: 'general logging': %s"
msgid "Error: access denied to set logging; %s"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: लॉगिंग सेट करणà¥à¤¯à¤¾à¤•à¤°à¤¿à¤¤à¤¾ पà¥à¤°à¤µà¥‡à¤¶ नकारले; %s"
-#: ../cli/src/network-manager.c:684
+#: ../clients/cli/network-manager.c:683
#, c-format
msgid "Error: %s"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: %s"
-#: ../cli/src/network-manager.c:692
+#: ../clients/cli/network-manager.c:691
#, c-format
msgid "Error: 'general' command '%s' is not valid."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'general' आदेश '%s' वैध नाही."
-#: ../cli/src/network-manager.c:710
+#: ../clients/cli/network-manager.c:709
#, 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
+#: ../clients/cli/network-manager.c:734
#, c-format
msgid "Error: invalid '%s' argument: '%s' (use on/off)."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: अवैध '%s' बाब: '%s' (सà¥à¤°à¥‚ किंवा बंदचा वापर करा)."
-#: ../cli/src/network-manager.c:746
-#| msgid "\rConnecting"
+#: ../clients/cli/network-manager.c:745
msgid "Connectivity"
msgstr "जोडणी"
-#: ../cli/src/network-manager.c:758
+#: ../clients/cli/network-manager.c:757
msgid "Networking"
msgstr "नेटवरà¥à¤•à¤¿à¤‚ग"
-#: ../cli/src/network-manager.c:783
+#: ../clients/cli/network-manager.c:782
#, 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
+#: ../clients/cli/network-manager.c:798
#, 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
+#: ../clients/cli/network-manager.c:824 ../clients/cli/network-manager.c:844
msgid "Radio switches"
msgstr "रेडिओ सà¥à¤µà¤¿à¤šà¥‡à¤¸"
#. no argument, show current WiFi state
-#: ../cli/src/network-manager.c:863
+#: ../clients/cli/network-manager.c:862
msgid "Wi-Fi radio switch"
msgstr "Wi-Fi रेडिओ सà¥à¤µà¤¿à¤š"
#. no argument, show current WWAN (mobile broadband) state
-#: ../cli/src/network-manager.c:879
+#: ../clients/cli/network-manager.c:878
msgid "WWAN radio switch"
msgstr "WWAN रेडिओ सà¥à¤µà¤¿à¤š"
#. no argument, show current WiMAX state
-#: ../cli/src/network-manager.c:896
+#: ../clients/cli/network-manager.c:895
msgid "WiMAX radio switch"
msgstr "WiMAX रेडिओ सà¥à¤µà¤¿à¤š"
-#: ../cli/src/network-manager.c:908
+#: ../clients/cli/network-manager.c:907
#, c-format
msgid "Error: 'radio' command '%s' is not valid."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'radio' आदेश '%s' वैध नाही."
-#: ../cli/src/nmcli.c:78
+#: ../clients/cli/nmcli.c:82
#, c-format
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
@@ -4406,342 +4303,290 @@ msgstr ""
" d[evice] devices managed by NetworkManager\n"
"\n"
-#: ../cli/src/nmcli.c:132
+#: ../clients/cli/nmcli.c:136
#, c-format
msgid "Error: Object '%s' is unknown, try 'nmcli help'."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: घटक '%s' अपरिचीत आहे, 'nmcli help' वापरून पहा."
-#: ../cli/src/nmcli.c:162
+#: ../clients/cli/nmcli.c:166
#, c-format
msgid "Error: Option '--terse' is specified the second time."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: परà¥à¤¯à¤¾à¤¯ '--terse' दà¥à¤¸à¤±à¥à¤¯à¤¾à¤µà¥‡à¤³à¥€ निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ केले."
-#: ../cli/src/nmcli.c:167
+#: ../clients/cli/nmcli.c:171
#, c-format
msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: '--pretty' चà¥à¤¯à¤¾ तà¥à¤²à¤¨à¥‡à¤¤ परà¥à¤¯à¤¾à¤¯ '--terse' वेगळे आहे."
-#: ../cli/src/nmcli.c:175
+#: ../clients/cli/nmcli.c:179
#, c-format
msgid "Error: Option '--pretty' is specified the second time."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: परà¥à¤¯à¤¾à¤¯ '--pretty' दà¥à¤¸à¤±à¥à¤¯à¤¾à¤µà¥‡à¤³à¥€ निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ केले."
-#: ../cli/src/nmcli.c:180
+#: ../clients/cli/nmcli.c:184
#, c-format
msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: '--terse' चà¥à¤¯à¤¾ तà¥à¤²à¤¨à¥‡à¤¤ परà¥à¤¯à¤¾à¤¯ '--pretty' वेगळे आहे."
-#: ../cli/src/nmcli.c:190 ../cli/src/nmcli.c:206 ../cli/src/nmcli.c:235
+#: ../clients/cli/nmcli.c:194 ../clients/cli/nmcli.c:210
+#: ../clients/cli/nmcli.c:239
#, c-format
msgid "Error: missing argument for '%s' option."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s' परà¥à¤¯à¤¾à¤¯à¤•à¤°à¥€à¤¤à¤¾ न आढळलेले घटक."
-#: ../cli/src/nmcli.c:199 ../cli/src/nmcli.c:215
+#: ../clients/cli/nmcli.c:203 ../clients/cli/nmcli.c:219
#, c-format
msgid "Error: '%s' is not valid argument for '%s' option."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s' परà¥à¤¯à¤¾à¤¯à¤•à¤°à¥€à¤¤à¤¾ '%s' वैध घटक नाही."
-#: ../cli/src/nmcli.c:222
+#: ../clients/cli/nmcli.c:226
#, c-format
msgid "Error: fields for '%s' options are missing."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s' परà¥à¤¯à¤¾à¤¯à¤•à¤°à¥€à¤¤à¤¾ कà¥à¤·à¥‡à¤¤à¥à¤° आढळले नाही."
-#: ../cli/src/nmcli.c:240
+#: ../clients/cli/nmcli.c:244
#, c-format
msgid "Error: '%s' is not a valid timeout for '%s' option."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s' हे '%s' परà¥à¤¯à¤¾à¤¯à¤•à¤°à¤¿à¤¤à¤¾ वैध वेळसमापà¥à¤¤à¤¿ नाही."
-#: ../cli/src/nmcli.c:247
+#: ../clients/cli/nmcli.c:251
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "nmcli साधन, आवृतà¥à¤¤à¥€ %s\n"
-#: ../cli/src/nmcli.c:253
+#: ../clients/cli/nmcli.c:257
#, c-format
msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: परà¥à¤¯à¤¾à¤¯ '%s' अपरिचीत आहे, 'nmcli -help' वापरून पहा."
-#: ../cli/src/nmcli.c:288
+#: ../clients/cli/nmcli.c:337 ../clients/cli/nmcli.c:346
#, c-format
msgid ""
"\n"
-"Error: nmcli terminated by signal %d."
+"Error: nmcli terminated by signal %s (%d)\n"
msgstr ""
"\n"
-"तà¥à¤°à¥à¤Ÿà¥€: सिगà¥à¤¨à¤² %d तरà¥à¤«à¥‡ nmcli खंडीत à¤à¤¾à¤²à¥‡."
+"तà¥à¤°à¥à¤Ÿà¥€: nmcli ला सिगà¥à¤¨à¤² %s (%d) तरà¥à¤«à¥‡ बंद केले\n"
-#: ../cli/src/nmcli.c:318 ../src/main.c:130
+#: ../clients/cli/nmcli.c:377
#, c-format
-msgid "Failed to set signal mask: %d"
-msgstr "सिगà¥à¤¨à¤² मासà¥à¤•: %d सेट करणà¥à¤¯à¤¾à¤¸ अपयशी"
+msgid "Failed to set signal mask: %d\n"
+msgstr "सिगà¥à¤¨à¤² मासà¥à¤•: %d सेट करणà¥à¤¯à¤¾à¤¸ अपयशी\n"
-#: ../cli/src/nmcli.c:325 ../src/main.c:139
+#: ../clients/cli/nmcli.c:384
#, c-format
-msgid "Failed to create signal handling thread: %d"
-msgstr "सिगà¥à¤¨à¤² हाताळणी थà¥à¤°à¥‡à¤¡: %d निरà¥à¤®à¤¾à¤£ करणà¥à¤¯à¤¾à¤¸ अपयशी"
+msgid "Failed to create signal handling thread: %d\n"
+msgstr "थà¥à¤°à¥‡à¤¡: %d ला हाताळणारे सिगà¥à¤¨à¤² निरà¥à¤®à¤¾à¤£ करणà¥à¤¯à¤¾à¤¸ अपयशी\n"
-#: ../cli/src/nmcli.c:338 ../test/nm-online.c:149
+#: ../clients/cli/nmcli.c:481 ../clients/nm-online.c:197
#, c-format
-msgid "Error: Could not create NMClient object."
-msgstr "तà¥à¤°à¥à¤Ÿà¥€: NMClient ऑबà¥à¤œà¥‡à¤•à¥à¤Ÿ निरà¥à¤®à¤¾à¤£ करणे अशकà¥à¤¯."
+msgid "Error: Could not create NMClient object: %s."
+msgstr "तà¥à¤°à¥à¤Ÿà¥€: NMClient ऑबà¥à¤œà¥‡à¤•à¥à¤Ÿ निरà¥à¤®à¤¾à¤£ अशकà¥à¤¯: %s."
-#: ../cli/src/nmcli.c:354
+#: ../clients/cli/nmcli.c:498
msgid "Success"
msgstr "यश"
-#: ../cli/src/settings.c:666
+#: ../clients/cli/settings.c:656
#, c-format
-msgid "%d (hex-ascii-key)"
-msgstr "%d (hex-ascii-key)"
+msgid "%d (key)"
+msgstr "%d (कि)"
-#: ../cli/src/settings.c:668
+#: ../clients/cli/settings.c:658
#, c-format
-msgid "%d (104/128-bit passphrase)"
-msgstr "%d (104/128-बीट पासफà¥à¤°à¥‡à¤œ)"
+msgid "%d (passphrase)"
+msgstr "%d (पासफà¥à¤°à¥‡à¤œ)"
-#: ../cli/src/settings.c:671 ../cli/src/settings.c:799
+#: ../clients/cli/settings.c:661 ../clients/cli/settings.c:742
#, c-format
msgid "%d (unknown)"
msgstr "%d (अपरिचीत)"
-#: ../cli/src/settings.c:697
-msgid "0 (unknown)"
-msgstr "0 (अपरिचीत)"
-
-#: ../cli/src/settings.c:703
-msgid "any, "
-msgstr "कà¥à¤ à¤²à¥‡à¤¹à¥€, "
-
-#: ../cli/src/settings.c:705
-msgid "900 MHz, "
-msgstr "900 MHz, "
-
-#: ../cli/src/settings.c:707
-msgid "1800 MHz, "
-msgstr "1800 MHz, "
-
-#: ../cli/src/settings.c:709
-msgid "1900 MHz, "
-msgstr "1900 MHz, "
-
-#: ../cli/src/settings.c:711
-msgid "850 MHz, "
-msgstr "850 MHz, "
-
-#: ../cli/src/settings.c:713
-msgid "WCDMA 3GPP UMTS 2100 MHz, "
-msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-
-#: ../cli/src/settings.c:715
-msgid "WCDMA 3GPP UMTS 1800 MHz, "
-msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-
-#: ../cli/src/settings.c:717
-msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
-msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-
-#: ../cli/src/settings.c:719
-msgid "WCDMA 3GPP UMTS 800 MHz, "
-msgstr "WCDMA 3GPP UMTS 800 MHz, "
-
-#: ../cli/src/settings.c:721
-msgid "WCDMA 3GPP UMTS 850 MHz, "
-msgstr "WCDMA 3GPP UMTS 850 MHz, "
-
-#: ../cli/src/settings.c:723
-msgid "WCDMA 3GPP UMTS 900 MHz, "
-msgstr "WCDMA 3GPP UMTS 900 MHz, "
-
-#: ../cli/src/settings.c:725
-msgid "WCDMA 3GPP UMTS 1700 MHz, "
-msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-
-#: ../cli/src/settings.c:727
-msgid "WCDMA 3GPP UMTS 1900 MHz, "
-msgstr "WCDMA 3GPP UMTS 1900 MHz, "
-
-#: ../cli/src/settings.c:729
-msgid "WCDMA 3GPP UMTS 2600 MHz, "
-msgstr "WCDMA 3GPP UMTS 2600 MHz, "
-
-#: ../cli/src/settings.c:747
+#: ../clients/cli/settings.c:690
msgid "0 (NONE)"
msgstr "0 (NONE)"
-#: ../cli/src/settings.c:753
+#: ../clients/cli/settings.c:696
msgid "REORDER_HEADERS, "
msgstr "REORDER_HEADERS, "
-#: ../cli/src/settings.c:755
+#: ../clients/cli/settings.c:698
msgid "GVRP, "
msgstr "GVRP, "
-#: ../cli/src/settings.c:757
+#: ../clients/cli/settings.c:700
msgid "LOOSE_BINDING, "
msgstr "LOOSE_BINDING, "
-#: ../cli/src/settings.c:793
+#: ../clients/cli/settings.c:736
#, c-format
msgid "%d (disabled)"
msgstr "%d (बंद केले)"
-#: ../cli/src/settings.c:795
+#: ../clients/cli/settings.c:738
#, c-format
msgid "%d (enabled, prefer public IP)"
msgstr "%d (सà¥à¤°à¥‚ केले, पबà¥à¤²à¤¿à¤• IP शिफारसीय आहे)"
-#: ../cli/src/settings.c:797
+#: ../clients/cli/settings.c:740
#, c-format
msgid "%d (enabled, prefer temporary IP)"
msgstr "%d (सà¥à¤°à¥‚ केले, तातà¥à¤ªà¥à¤°à¥à¤¤à¥‡ IP शिफारसीय आहे)"
-#: ../cli/src/settings.c:809
+#: ../clients/cli/settings.c:752
msgid "0 (none)"
msgstr "0 (काहिच नाही)"
-#: ../cli/src/settings.c:815
+#: ../clients/cli/settings.c:758
msgid "agent-owned, "
msgstr "à¤à¤œà¥‡à¤‚ट-मालकी, "
-#: ../cli/src/settings.c:817
+#: ../clients/cli/settings.c:760
msgid "not saved, "
msgstr "साठवले नाही, "
-#: ../cli/src/settings.c:819
+#: ../clients/cli/settings.c:762
msgid "not required, "
msgstr "आवशà¥à¤¯à¤• नाही, "
-#: ../cli/src/settings.c:1124
-#| msgid "%d (disabled)"
+#: ../clients/cli/settings.c:1044
msgid "0 (disabled)"
msgstr "0 (बंद केले)"
-#: ../cli/src/settings.c:1130
-#| msgid "enabled"
+#: ../clients/cli/settings.c:1050
msgid "enabled, "
msgstr "सà¥à¤°à¥‚ केले,"
-#: ../cli/src/settings.c:1132
+#: ../clients/cli/settings.c:1052
msgid "advertise, "
msgstr "जाहिर करा, "
-#: ../cli/src/settings.c:1134
+#: ../clients/cli/settings.c:1054
msgid "willing, "
msgstr "सà¥à¤µà¥€à¤•à¤¾à¤°, "
-#: ../cli/src/settings.c:1162
+#: ../clients/cli/settings.c:1082
msgid "-1 (unset)"
msgstr "-1 (सेट अशकà¥à¤¯)"
-#: ../cli/src/settings.c:1270 ../cli/src/settings.c:1453
-#: ../cli/src/settings.c:1493
+#: ../clients/cli/settings.c:1179 ../clients/cli/settings.c:1511
+#: ../clients/cli/settings.c:1553
msgid "auto"
msgstr "सà¥à¤µà¤¯à¤‚"
-#: ../cli/src/settings.c:1283
+#: ../clients/cli/settings.c:1192
msgid "default"
msgstr "पूरà¥à¤µà¤¨à¤¿à¤°à¥à¤§à¤¾à¤°à¤¿à¤¤"
-#: ../cli/src/settings.c:1614
+#: ../clients/cli/settings.c:1681
#, c-format
msgid "Do you also want to set '%s' to '%s'? [yes]: "
msgstr "तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ '%s' ला '%s' करिता सेट करायचे? [होय]: "
-#: ../cli/src/settings.c:1616
+#: ../clients/cli/settings.c:1683
#, 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
+#: ../clients/cli/settings.c:1844
+#, c-format
+msgid ""
+"Warning: %s.%s set to '%s', but it might be ignored in infrastructure mode\n"
+msgstr ""
+"सावधानता: %s.%s हे '%s' करिता सेट केले, परंतॠतà¥à¤¯à¤¾à¤¸ इंफà¥à¤°à¤¾à¤¸à¥à¤Ÿà¤•à¥à¤šà¤° मोडमधà¥à¤¯à¥‡ "
+"दà¥à¤°à¥à¤²à¤•à¥à¤· केले जाऊ "
+"शकते\n"
+
+#: ../clients/cli/settings.c:1926 ../clients/cli/settings.c:2186
+#: ../clients/cli/settings.c:4262
#, c-format
msgid "'%s' is not valid"
msgstr "'%s' वैध नाही"
-#: ../cli/src/settings.c:1837
+#: ../clients/cli/settings.c:1949
#, c-format
msgid "'%d' is not valid; use <%d-%d>"
msgstr "'%d' वैध नाही; <%d-%d> याचा वापर करा"
-#: ../cli/src/settings.c:1859
+#: ../clients/cli/settings.c:1971
#, c-format
msgid "'%u' is not valid; use <%d-%d>"
msgstr "'%u' वैध नाही; <%d-%d> याचा वापर करा"
-#: ../cli/src/settings.c:1925
+#: ../clients/cli/settings.c:2037
#, c-format
msgid "'%s' is not valid; use <option>=<value>"
msgstr "'%s' वैध नाही; <option>=<value> याचा वापर करा"
-#: ../cli/src/settings.c:1959
+#: ../clients/cli/settings.c:2071
#, c-format
msgid "index '%s' is not valid"
msgstr "इंडेकà¥à¤¸ '%s' वैध नाही"
-#: ../cli/src/settings.c:1964
+#: ../clients/cli/settings.c:2076 ../clients/cli/settings.c:2101
msgid "no item to remove"
msgstr "काढून टाकणà¥à¤¯à¤¾à¤œà¥‹à¤—ी घटक नाही"
-#: ../cli/src/settings.c:1968
+#: ../clients/cli/settings.c:2080 ../clients/cli/settings.c:2105
#, c-format
msgid "index '%d' is not in range <0-%d>"
msgstr "इंडेकà¥à¤¸ '%d' वà¥à¤¯à¤¾à¤ªà¥à¤¤à¤¿ <0-%d>चà¥à¤¯à¤¾ बाहेर आहे"
-#: ../cli/src/settings.c:1983
+#: ../clients/cli/settings.c:2120
#, c-format
msgid "invalid option '%s'"
msgstr "अवैध परà¥à¤¯à¤¾à¤¯ '%s'"
-#: ../cli/src/settings.c:1985
+#: ../clients/cli/settings.c:2122
msgid "missing option"
msgstr "न आढळणारे परà¥à¤¯à¤¾à¤¯"
-#: ../cli/src/settings.c:2015 ../cli/src/settings.c:2035
+#: ../clients/cli/settings.c:2152
#, c-format
msgid "'%s' is not a valid number (or out of range)"
msgstr "'%s' वैध कà¥à¤°à¤®à¤¾à¤‚क नाही (किंवा वà¥à¤¯à¤¾à¤ªà¥à¤¤à¤¿à¤šà¥à¤¯à¤¾ बाहेर आहे)"
-#: ../cli/src/settings.c:2089
+#: ../clients/cli/settings.c:2203
#, 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
+#: ../clients/cli/settings.c:2228 ../libnm-core/nm-setting-connection.c:795
+#: ../libnm-core/nm-setting-infiniband.c:271
+#: ../libnm-util/nm-setting-connection.c:833
+#: ../libnm-util/nm-setting-infiniband.c:268
#, 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
+#: ../clients/cli/settings.c:2246 ../clients/cli/settings.c:3651
+#: ../libnm-core/nm-setting-gsm.c:332 ../libnm-util/nm-setting-gsm.c:372
#, c-format
msgid "'%s' is not a number"
msgstr "'%s' कà¥à¤°à¤®à¤¾à¤‚क नाही"
-#: ../cli/src/settings.c:2185
+#: ../clients/cli/settings.c:2298
#, c-format
msgid "'%s' is not a valid hex character"
msgstr "'%s' वैध हेकà¥à¤¸ अकà¥à¤·à¤° नाही"
-#: ../cli/src/settings.c:2215
+#: ../clients/cli/settings.c:2328
#, c-format
msgid "'%s' is not a valid MAC"
msgstr "'%s' वैध MAC नाही"
-#: ../cli/src/settings.c:2252 ../libnm-util/nm-setting-connection.c:715
+#: ../clients/cli/settings.c:2365 ../libnm-core/nm-setting-connection.c:784
+#: ../libnm-util/nm-setting-connection.c:790
#, 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"
+#: ../clients/cli/settings.c:2432
+#, c-format
+msgid "the property doesn't contain permission '%s'"
+msgstr "गà¥à¤£à¤§à¤°à¥à¤®à¤®à¤§à¥à¤¯à¥‡ परवानगी '%s' समाविषà¥à¤Ÿà¥€à¤¤ नाही"
+
+#: ../clients/cli/settings.c:2444
msgid ""
"Enter a list of user permissions. This is a list of user names formatted "
"as:\n"
@@ -4751,22 +4596,85 @@ msgid ""
"Example: alice bob charlie\n"
msgstr ""
"वापरकरà¥à¤¤à¤¾ परवानगीची सूची दà¥à¤¯à¤¾. हे वापरकरà¥à¤¤à¤¾ नावांची सूची आहे जà¥à¤¯à¤¾à¤‚चे रूपण "
-"खालीलपà¥à¤°à¤®à¤¾à¤£à¥‡ आहे:\n"
+"खालीलपà¥à¤°à¤®à¤¾à¤£à¥‡ "
+"आहे:\n"
" [user:]<user name 1>, [user:]<user name 2>,... \n"
"सà¥à¤µà¤²à¥à¤ªà¤µà¤¿à¤°à¤¾à¤® किंवा सà¥à¤ªà¥‡à¤¸à¤¤à¤°à¥à¤«à¥‡ घटकांना विभाजीत करणे शकà¥à¤¯ आहे.\n"
"\n"
"उदाहरणारà¥à¤¥: alice bob charlie\n"
-#: ../cli/src/settings.c:2332
+#: ../clients/cli/settings.c:2463
#, c-format
msgid "'%s' is not valid master; use ifname or connection UUID"
msgstr "'%s' वैध मासà¥à¤Ÿà¤° नाही; ifname किंवा जोडणी UUIDचा वापर करा"
-#: ../cli/src/settings.c:2453
+#: ../clients/cli/settings.c:2507
+#, c-format
+msgid "Warning: %s is not an UUID of any existing connection profile\n"
+msgstr "सावधानता: %s हे असà¥à¤¤à¤¿à¤¤à¥à¤µà¤¾à¤¤à¥€à¤² जोडणी पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤²à¤šà¥‡ UUID नाही\n"
+
+#: ../clients/cli/settings.c:2511 ../clients/cli/settings.c:2527
+#, c-format
+msgid "'%s' is not a VPN connection profile"
+msgstr "'%s' हे VPN जोडणी पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² नाही"
+
+#: ../clients/cli/settings.c:2520
+#, c-format
+msgid "'%s' is not a name of any exiting profile"
+msgstr "'%s' हे कोणतà¥à¤¯à¤¾à¤¹à¥€ असà¥à¤¤à¤¿à¤¤à¥à¤µà¤¾à¤¤à¥€à¤² पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤²à¤šà¥‡ नाव नाही"
+
+#: ../clients/cli/settings.c:2554
+#, c-format
+msgid "the value '%s' is not a valid UUID"
+msgstr "मूलà¥à¤¯ '%s' वैध UUID नाही"
+
+#: ../clients/cli/settings.c:2561
+#, c-format
+msgid "the property doesn't contain UUID '%s'"
+msgstr "गà¥à¤£à¤§à¤°à¥à¤®à¤®à¤§à¥à¤¯à¥‡ UUID '%s' समाविषà¥à¤Ÿà¥€à¤¤ नाही"
+
+#: ../clients/cli/settings.c:2573
+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 किंवा ID (नाव) दà¥à¤µà¤¾à¤°à¥‡ निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ करणे शकà¥à¤¯ "
+"आहे. 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"
+
+#: ../clients/cli/settings.c:2650
msgid "private key password not provided"
msgstr "वà¥à¤¯à¤•à¥à¤¤à¤¿à¤—त कि पासवरà¥à¤¡ पà¥à¤°à¤µà¤²à¥‡ नाही"
-#: ../cli/src/settings.c:2513
+#: ../clients/cli/settings.c:2677
+#, c-format
+msgid "the property doesn't contain EAP method '%s'"
+msgstr "गà¥à¤£à¤§à¤°à¥à¤®à¤®à¤§à¥à¤¯à¥‡ EAP पदà¥à¤§à¤¤ '%s' समाविषà¥à¤Ÿà¥€à¤¤ नाही"
+
+#: ../clients/cli/settings.c:2702
+#, c-format
+msgid "the property doesn't contain alternative subject match '%s'"
+msgstr "गà¥à¤£à¤§à¤°à¥à¤®à¤®à¤§à¥à¤¯à¥‡ वैकलà¥à¤ªà¤¿à¤• विषय जोड '%s' उपलबà¥à¤§ नाही"
+
+#: ../clients/cli/settings.c:2731
+#, c-format
+msgid "the property doesn't contain \"phase2\" alternative subject match '%s'"
+msgstr "गà¥à¤£à¤§à¤°à¥à¤®à¤¾à¤¤ \"phase2\" वैकलà¥à¤ªà¤¿à¤• विषय जोड '%s' समाविषà¥à¤Ÿà¥€à¤¤ नाही"
+
+#: ../clients/cli/settings.c:2757
msgid ""
"Enter path to a private key and the key password (if not set yet):\n"
" <file path> [<password>]\n"
@@ -4776,7 +4684,7 @@ msgstr ""
" <file path> [<password>]\n"
"उदाहरणारà¥à¤¥: /home/cimrman/jara-priv-key Dardanely\n"
-#: ../cli/src/settings.c:2583
+#: ../clients/cli/settings.c:2827
msgid ""
"Enter bytes as a list of hexadecimal values.\n"
"Two formats are accepted:\n"
@@ -4799,7 +4707,7 @@ msgstr ""
"उदाहरणारà¥à¤¥: ab0455a6ea3a74C2\n"
" ab 4 55 0xa6 ea 3a 74 C2\n"
-#: ../cli/src/settings.c:2686
+#: ../clients/cli/settings.c:2930
#, c-format
msgid ""
"Enter a list of bonding options formatted as:\n"
@@ -4830,17 +4738,22 @@ msgstr ""
"\n"
"उदाहरणारà¥à¤¥: mode=2,miimon=120\n"
-#: ../cli/src/settings.c:2727
+#: ../clients/cli/settings.c:2968
#, c-format
msgid "'%s' is not a valid InfiniBand MAC"
msgstr "'%s' वैध InfiniBand MAC नाही"
-#: ../cli/src/settings.c:2765
+#: ../clients/cli/settings.c:3005
#, c-format
msgid "'%s' is not a valid IBoIP P_Key"
msgstr "'%s' वैध IBoIP P_Key नाही"
-#: ../cli/src/settings.c:2825
+#: ../clients/cli/settings.c:3074 ../clients/cli/settings.c:3420
+#, c-format
+msgid "the property doesn't contain DNS server '%s'"
+msgstr "गà¥à¤£à¤§à¤°à¥à¤®à¤®à¤§à¥à¤¯à¥‡ DNS सरà¥à¤µà¥à¤¹à¤° '%s' समाविषà¥à¤Ÿà¥€à¤¤ नाही"
+
+#: ../clients/cli/settings.c:3086
msgid ""
"Enter a list of IPv4 addresses of DNS servers.\n"
"\n"
@@ -4850,12 +4763,22 @@ msgstr ""
"\n"
"उदाहरणारà¥à¤¥: 8.8.8.8, 8.8.4.4\n"
-#: ../cli/src/settings.c:2871 ../cli/src/settings.c:3123
+#: ../clients/cli/settings.c:3122 ../clients/cli/settings.c:3474
+#, c-format
+msgid "the property doesn't contain DNS search domain '%s'"
+msgstr "गà¥à¤£à¤§à¤°à¥à¤®à¤®à¤§à¥à¤¯à¥‡ DNS शोध डोमेन '%s' समाविषà¥à¤Ÿà¥€à¤¤ नसते"
+
+#: ../clients/cli/settings.c:3142 ../clients/cli/settings.c:3494
#, c-format
msgid "'%s' is not valid (use ip[/prefix] [gateway])"
msgstr "'%s' वैध नाही (ip[/prefix] [gateway])"
-#: ../cli/src/settings.c:2897
+#: ../clients/cli/settings.c:3191 ../clients/cli/settings.c:3542
+#, c-format
+msgid "the property doesn't contain IP address '%s'"
+msgstr "गà¥à¤£à¤§à¤°à¥à¤®à¤®à¤§à¥à¤¯à¥‡ IP पतà¥à¤¤à¤¾ '%s' समाविषà¥à¤Ÿà¥€à¤¤ नसते"
+
+#: ../clients/cli/settings.c:3204
msgid ""
"Enter a list of IPv4 addresses formatted as:\n"
" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
@@ -4869,44 +4792,41 @@ msgstr ""
"\n"
"उदाहरणारà¥à¤¥: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
-#: ../cli/src/settings.c:2954
+#: ../clients/cli/settings.c:3257 ../clients/cli/settings.c:3573
+#, c-format
+msgid "'%s' is not valid (the format is: ip[/prefix] [next-hop] [metric])"
+msgstr "'%s' वैध नाही (रूपण: ip[/prefix] [next-hop] [metric] आहे)"
+
+#: ../clients/cli/settings.c:3305 ../clients/cli/settings.c:3621
#, c-format
-msgid "'%s' is not valid (use ip/[prefix] next-hop [metric])"
-msgstr "'%s' वैध नाही (ip/[prefix] next-hop [metric] चा वापर करा)"
+msgid "the property doesn't contain route '%s'"
+msgstr "गà¥à¤£à¤§à¤°à¥à¤®à¤®à¤§à¥à¤¯à¥‡ राउट '%s' समाविषà¥à¤Ÿà¥€à¤¤ नाही"
-#: ../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"
+#: ../clients/cli/settings.c:3318
msgid ""
"Enter a list of IPv4 routes formatted as:\n"
-" ip/[prefix] next-hop [metric],...\n"
+" ip[/prefix] [next-hop] [metric],...\n"
+"\n"
"Missing prefix is regarded as a prefix of 32.\n"
-"Missing metric is regarded as a metric of 0.\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"
-"Example: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\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"
+"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"
+"न आढळणाऱà¥à¤¯à¤¾ पà¥à¤°à¤¿à¤«à¤¿à¤•à¥à¤¸à¤²à¤¾ 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"
+
+#: ../clients/cli/settings.c:3432
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 "
@@ -4918,15 +4838,18 @@ msgid ""
"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 "
+"असलà¥à¤¯à¤¾à¤¸, हà¥à¤¯à¤¾ 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
+#: ../clients/cli/settings.c:3555
msgid ""
"Enter a list of IPv6 addresses formatted as:\n"
" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
@@ -4942,53 +4865,48 @@ msgstr ""
"उदाहरणारà¥à¤¥: 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"
+#: ../clients/cli/settings.c:3634
msgid ""
"Enter a list of IPv6 routes formatted as:\n"
-" ip/[prefix] next-hop [metric],...\n"
+" ip[/prefix] [next-hop] [metric],...\n"
+"\n"
"Missing prefix is regarded as a prefix of 128.\n"
-"Missing metric is regarded as a metric of 0.\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"
-"Example: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
+"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/[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:"
+"खालील पà¥à¤°à¤®à¤¾à¤£à¥‡ रूपण असलेलà¥à¤¯à¤¾ IPv6 राऊटà¥à¤¸à¥à¤šà¥€ सूची दà¥à¤¯à¤¾:\n"
+" ip[/prefix] [next-hop] [metric],...\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:3219
+#: ../clients/cli/settings.c:3658
#, c-format
msgid "'%s' is not valid; use 0, 1, or 2"
msgstr "'%s' वैध नाही; 0, 1, किंवा 2चा वापर करा"
-#: ../cli/src/settings.c:3236
+#: ../clients/cli/settings.c:3675
#, c-format
msgid "'%s' is not a valid channel; use <1-13>"
msgstr "'%s' वैध वाहिनी नाही; <1-13> याचा वापर करा"
-#: ../cli/src/settings.c:3257
+#: ../clients/cli/settings.c:3696
#, c-format
msgid "'%s' is not valid; use [e, o, n]"
msgstr "'%s' वैध नाही; [e, o, n] याचा वापर करा"
-#: ../cli/src/settings.c:3285
+#: ../clients/cli/settings.c:3724
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 "
@@ -4999,28 +4917,57 @@ msgid ""
" set team.config /etc/my-team.conf\n"
msgstr ""
"nmcli दोनà¥à¤¹à¥€ JSON संरचना डाटा आणि संरचना असलेले फाइल नाव सà¥à¤µà¥€à¤•à¤¾à¤°à¥‚ शकतो. "
-"संबंधित घटनामधà¥à¤¯à¥‡ फाइलचे वाचन होते आणि अंतरà¥à¤­à¥à¤¤ माहितीला हà¥à¤¯à¤¾ गà¥à¤£à¤§à¤°à¥à¤®à¤®à¤§à¥à¤¯à¥‡ "
-"समाविषà¥à¤Ÿ केले जाते.\n"
+"संबंधित "
+"घटनामधà¥à¤¯à¥‡ फाइलचे वाचन होते आणि अंतरà¥à¤­à¥à¤¤ माहितीला हà¥à¤¯à¤¾ गà¥à¤£à¤§à¤°à¥à¤®à¤®à¤§à¥à¤¯à¥‡ समाविषà¥à¤Ÿ "
+"केले जाते.\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
+#: ../clients/cli/settings.c:3764
msgid "no priority to remove"
msgstr "काढून टाकणà¥à¤¯à¤¾à¤œà¥‹à¤—ी पà¥à¤°à¤¾à¤§à¤¾à¤¨à¥à¤¯à¤¤à¤¾ नाही"
-#: ../cli/src/settings.c:3329
+#: ../clients/cli/settings.c:3768
#, c-format
msgid "index '%d' is not in the range of <0-%d>"
msgstr "इंडेकà¥à¤¸ '%d' <0-%d>चà¥à¤¯à¤¾ वà¥à¤¯à¤¾à¤ªà¥à¤¤à¤¿à¤®à¤§à¥à¤¯à¥‡ नाही"
-#: ../cli/src/settings.c:3444
+#: ../clients/cli/settings.c:3807
+#, c-format
+msgid ""
+"Warning: only one mapping at a time is supported; taking the first one (%s)\n"
+msgstr ""
+"सावधानता: à¤à¤•à¤¾à¤µà¥‡à¤³à¥€ फकà¥à¤¤ à¤à¤•à¤š मॅपिंग समरà¥à¤¥à¥€à¤¤ असते; पà¥à¤°à¤¥à¤® गृहीत घेऊन (%s)\n"
+
+#: ../clients/cli/settings.c:3814
+#, c-format
+msgid "the property doesn't contain mapping '%s'"
+msgstr "गà¥à¤£à¤§à¤°à¥à¤®à¤®à¤§à¥à¤¯à¥‡ मॅपिंग '%s' समाविषà¥à¤Ÿà¥€à¤¤ नाही"
+
+#: ../clients/cli/settings.c:3923 ../clients/cli/settings.c:4091
+#: ../libnm-core/nm-setting-wired.c:622
+#: ../libnm-core/nm-setting-wireless.c:799
+#: ../libnm-core/nm-setting-wireless.c:811
+#: ../libnm-util/nm-setting-wired.c:648
+#: ../libnm-util/nm-setting-wireless.c:840
+#: ../libnm-util/nm-setting-wireless.c:854
+#, c-format
+msgid "'%s' is not a valid MAC address"
+msgstr "'%s' वैध MAC पतà¥à¤¤à¤¾ नाही"
+
+#: ../clients/cli/settings.c:3929 ../clients/cli/settings.c:4097
+#, c-format
+msgid "the property doesn't contain MAC address '%s'"
+msgstr "गà¥à¤£à¤§à¤°à¥à¤®à¤®à¤§à¥à¤¯à¥‡ MAC पतà¥à¤¤à¤¾ '%s' समाविषà¥à¤Ÿà¥€à¤¤ नाही"
+
+#: ../clients/cli/settings.c:3948
#, c-format
msgid "'%s' is not valid; 3 strings should be provided"
msgstr "'%s' वैध नाही; 3 सà¥à¤Ÿà¥à¤°à¤¿à¤‚गà¥à¤œ पà¥à¤°à¤µà¤£à¥‡ आवशà¥à¤¯à¤•"
-#: ../cli/src/settings.c:3463
+#: ../clients/cli/settings.c:3967
msgid ""
"Enter a list of three channels (comma or space separated).\n"
"\n"
@@ -5030,12 +4977,8 @@ msgstr ""
"\n"
"उदाहरणारà¥à¤¥: 0.0.0e20 0.0.0e21 0.0.0e22\n"
-#: ../cli/src/settings.c:3513
+#: ../clients/cli/settings.c:4017
#, 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"
@@ -5045,160 +4988,196 @@ msgstr ""
" option = <value>, option = <value>,...\n"
"वैध परà¥à¤¯à¤¾à¤¯ खालीलपà¥à¤°à¤®à¤¾à¤£à¥‡ आहेत: %s\n"
-#: ../cli/src/settings.c:3559
+#: ../clients/cli/settings.c:4063
#, c-format
msgid "'%s' is not a valid channel"
msgstr "'%s' वैध वाहिनी नाही"
-#: ../cli/src/settings.c:3565
+#: ../clients/cli/settings.c:4069
#, c-format
msgid "'%ld' is not a valid channel"
msgstr "'%ld' वैध वाहिनी नाही"
-#: ../cli/src/settings.c:3668 ../cli/src/settings.c:3671
+#: ../clients/cli/settings.c:4156 ../clients/cli/settings.c:4194
+#: ../clients/cli/settings.c:4232
+#, c-format
+msgid "the property doesn't contain protocol '%s'"
+msgstr "गà¥à¤£à¤§à¤°à¥à¤®à¤®à¤§à¥à¤¯à¥‡ पà¥à¤°à¥‹à¤Ÿà¥‹à¤•à¥‰à¤² '%s' समाविषà¥à¤Ÿà¥€à¤¤ नसते"
+
+#: ../clients/cli/settings.c:4271
+#, c-format
+msgid ""
+"'%s' not compatible with %s '%s', please change the key or set the right %s "
+"first."
+msgstr ""
+"'%s' हे %s '%s' सह सहतà¥à¤µ नाही, कृपया कि बदलवा किंवा पहिले योगà¥à¤¯ %s सेट करा."
+
+#: ../clients/cli/settings.c:4279
#, c-format
msgid "WEP key is guessed to be of '%s'\n"
msgstr "WEP कि '%s' असू शकते\n"
-#: ../cli/src/settings.c:3695
+#: ../clients/cli/settings.c:4281
+#, c-format
+msgid "WEP key index set to '%d'\n"
+msgstr "WEP कि इंडेकà¥à¤¸ '%d' करिता सेट केले\n"
+
+#: ../clients/cli/settings.c:4304
#, c-format
msgid "'%s' not among [0 (unknown), 1 (key), 2 (passphrase)]"
msgstr "'%s' पैकी नाही [0 (अपरिचीत), 1 (कि), 2 (पासफà¥à¤°à¥‡à¤œ)]"
-#: ../cli/src/settings.c:3715
+#: ../clients/cli/settings.c:4320 ../clients/cli/settings.c:4323
+#: ../clients/cli/settings.c:4326 ../clients/cli/settings.c:4329
+#, c-format
+msgid ""
+"Warning: '%s' is not compatible with '%s' type, please change or delete the "
+"key.\n"
+msgstr ""
+"सावधानता: '%s' हे '%s' पà¥à¤°à¤•à¤¾à¤°à¤¸à¤¹ सहतà¥à¤µ नाही, कृपया कि बदलवा किंवा नषà¥à¤Ÿ करा.\n"
+
+#: ../clients/cli/settings.c:4342
#, 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"
+"किंवा "
+"पासफà¥à¤°à¥‡à¤œ आहे.\n"
-#: ../cli/src/settings.c:3728
+#: ../clients/cli/settings.c:4355
#, c-format
msgid "'%s' is not a valid PSK"
msgstr "'%s' वैध PSK नाही"
-#: ../cli/src/settings.c:3772
+#: ../clients/cli/settings.c:4399
#, 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
+#: ../clients/cli/settings.c:4422
#, 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
+#: ../clients/cli/settings.c:4448
msgid "must contain 8 comma-separated numbers"
msgstr "८ सà¥à¤µà¤²à¥à¤ªà¤µà¤¿à¤°à¤¾à¤®-विभाजीत संखà¥à¤¯à¤¾ समाविषà¥à¤Ÿà¥€à¤¤ पाहिजे"
-#: ../cli/src/settings.c:3838
+#: ../clients/cli/settings.c:4465
#, c-format
msgid "'%s' not a number between 0 and %u (inclusive) or %u"
msgstr "'%s' हे ० आणि %u (इंकà¥à¤²à¥à¤¸à¤¿à¤µà¥à¤¹) किंवा %u अंतरà¥à¤—त संखà¥à¤¯à¤¾ नाही"
-#: ../cli/src/settings.c:3841
+#: ../clients/cli/settings.c:4468
#, c-format
msgid "'%s' not a number between 0 and %u (inclusive)"
msgstr "'%s' हे ० आणि %u (इंकà¥à¤²à¥à¤¸à¤¿à¤µà¥à¤¹) अंतरà¥à¤—त संखà¥à¤¯à¤¾ नाही"
-#: ../cli/src/settings.c:3863
+#: ../clients/cli/settings.c:4490
#, c-format
msgid ""
"Warning: changes will have no effect until '%s' includes 1 (enabled)\n"
"\n"
msgstr ""
"सावधानता: '%s' मधà¥à¤¯à¥‡ जोपरà¥à¤¯à¤‚त १ (सà¥à¤°à¥‚) समाविषà¥à¤Ÿà¥€à¤¤ असलà¥à¤¯à¤¾à¤µà¤¿à¤¨à¤¾ केलेले बदल "
-"पà¥à¤°à¤­à¤¾à¤µà¥€ ठरणार नाही\n"
+"पà¥à¤°à¤­à¤¾à¤µà¥€ ठरणार "
+"नाही\n"
"\n"
-#: ../cli/src/settings.c:3916
+#: ../clients/cli/settings.c:4543
#, c-format
msgid "bandwidth percentages must total 100%%"
msgstr "बà¤à¤¡à¤µà¤¿à¤¡à¥à¤¥ टकà¥à¤•à¥‡à¤µà¤¾à¤°à¥€ à¤à¤•à¥‚ण 100%% पाहिजे"
-#: ../cli/src/settings.c:5594
+#: ../clients/cli/settings.c:6186
msgid "don't know how to get the property value"
msgstr "गà¥à¤£à¤§à¤°à¥à¤® मूलà¥à¤¯ कसे पà¥à¤°à¤¾à¤ªà¥à¤¤ करायचे ते माहिती नाही"
-#: ../cli/src/settings.c:5647 ../cli/src/settings.c:5687
+#: ../clients/cli/settings.c:6239 ../clients/cli/settings.c:6279
msgid "the property can't be changed"
msgstr "गà¥à¤£à¤§à¤°à¥à¤® बदलणे अशकà¥à¤¯"
-#: ../cli/src/settings.c:5791
+#: ../clients/cli/settings.c:6362
+msgid "(not available)"
+msgstr "(अनà¥à¤ªà¤²à¤¬à¥à¤§)"
+
+#: ../clients/cli/settings.c:6387
msgid "[NM property description]"
msgstr "[NM गà¥à¤£à¤§à¤°à¥à¤® वरà¥à¤£à¤¨]"
-#: ../cli/src/settings.c:5797
+#: ../clients/cli/settings.c:6392
msgid "[nmcli specific description]"
msgstr "[nmcli निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ वरà¥à¤£à¤¨]"
-#: ../cli/src/utils.c:128
+#: ../clients/cli/utils.c:127
#, c-format
msgid "Error: value for '%s' argument is required."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s' बाबकरिता मूलà¥à¤¯ आवशà¥à¤¯à¤• आहे."
-#: ../cli/src/utils.c:153
+#: ../clients/cli/utils.c:152
#, c-format
msgid "Error: Argument '%s' was expected, but '%s' provided."
msgstr "तà¥à¤°à¥à¤Ÿà¥€: बाब '%s' अपेकà¥à¤·à¥€à¤¤, परंतॠ'%s' पà¥à¤°à¤µà¤²à¥‡."
-#: ../cli/src/utils.c:156
+#: ../clients/cli/utils.c:155
#, c-format
msgid "Error: Unexpected argument '%s'"
msgstr "तà¥à¤°à¥à¤Ÿà¥€: अनपेकà¥à¤·à¥€à¤¤ बाब '%s'"
-#: ../cli/src/utils.c:206
+#: ../clients/cli/utils.c:205
#, c-format
msgid "Error converting IP4 address '0x%X' to text form"
msgstr "IP4 पतà¥à¤¤à¤¾ '0x%X' यास मजकूर सà¥à¤µà¤°à¥‚पात रूपांतरीत करतेवेळी तà¥à¤°à¥à¤Ÿà¥€"
-#: ../cli/src/utils.c:234
+#: ../clients/cli/utils.c:233
#, c-format
msgid "Error converting IP6 address '%s' to text form"
msgstr "IP6 पतà¥à¤¤à¤¾ '%s' यास मजकूर सà¥à¤µà¤°à¥‚पात रूपांतरीत करतेवेळी तà¥à¤°à¥à¤Ÿà¥€"
-#: ../cli/src/utils.c:410
+#: ../clients/cli/utils.c:407
+#, c-format
+msgid "'%s' is ambiguous (on x off)"
+msgstr "'%s' संदिगà¥à¤§ आहे (सà¥à¤°à¥‚ x बंद)"
+
+#: ../clients/cli/utils.c:417
#, c-format
msgid "'%s' is not valid; use [%s] or [%s]"
msgstr "'%s' वैध नाही; [%s] किंवा [%s] याचा वापर करा"
-#: ../cli/src/utils.c:492
+#: ../clients/cli/utils.c:499
#, c-format
msgid "'%s' is ambiguous (%s x %s)"
msgstr "'%s' संदिगà¥à¤§ आहे (%s x %s)"
-#: ../cli/src/utils.c:504
+#: ../clients/cli/utils.c:511
#, c-format
msgid "missing name, try one of [%s]"
msgstr "नाव आढळले नाही, [%s] पैकी à¤à¤• वापरून पहा"
-#: ../cli/src/utils.c:721
+#: ../clients/cli/utils.c:728
#, c-format
msgid "field '%s' has to be alone"
msgstr "कà¥à¤·à¥‡à¤¤à¥à¤° '%s' वेगळे असायला हवे"
-#: ../cli/src/utils.c:724
+#: ../clients/cli/utils.c:731
#, c-format
-#| msgid "Error: 'list configured': %s; allowed fields: %s"
msgid "invalid field '%s'; allowed fields: %s"
msgstr "अवैध कà¥à¤·à¥‡à¤¤à¥à¤° '%s'; सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ कà¥à¤·à¥‡à¤¤à¥à¤°: %s"
-#: ../cli/src/utils.c:781
+#: ../clients/cli/utils.c:788
msgid "Option '--terse' requires specifying '--fields'"
msgstr "परà¥à¤¯à¤¾à¤¯ '--terse' यांस '--fields' निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ करणे आवशà¥à¤¯à¤• आहे"
-#: ../cli/src/utils.c:785
+#: ../clients/cli/utils.c:792
#, c-format
msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
msgstr ""
"परà¥à¤¯à¤¾à¤¯ '--terse' यांस '--fields' परà¥à¤¯à¤¾à¤¯ मूलà¥à¤¯à¥‡ निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ करणे आवशà¥à¤¯à¤• आहे , '%"
"s' नाही"
-#: ../cli/src/utils.c:1104
+#: ../clients/cli/utils.c:1111
#, c-format
msgid ""
"Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --"
@@ -5207,7 +5186,7 @@ msgstr ""
"सावधानता: nmcli (%s) व NetworkManager (%s) आवृतà¥à¤¤à¥€ जà¥à¤³à¤¤ नाही. सावधानता "
"दडपणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ --nocheck याचा वापर करा.\n"
-#: ../cli/src/utils.c:1113
+#: ../clients/cli/utils.c:1120
#, c-format
msgid ""
"Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force "
@@ -5217,700 +5196,1856 @@ msgstr ""
"चालवणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ "
"--nocheck याचा वापर करा, परंतॠपरिणाम वरà¥à¤¤à¤µà¤£à¥‡à¤œà¥‹à¤—ी नाही."
-#: ../libnm-util/crypto.c:133
+#: ../clients/nm-online.c:96
+#, c-format
+msgid "\rConnecting"
+msgstr "\rजोडणी करत आहे"
+
+#: ../clients/nm-online.c:149
+msgid ""
+"Time to wait for a connection, in seconds (without the option, default value "
+"is 30)"
+msgstr ""
+"जोडणीकरिता पà¥à¤°à¤¤à¤¿à¤•à¥à¤·à¤¾ करणà¥à¤¯à¤¾à¤œà¥‹à¤—ी वेळ, सेकंदात (परà¥à¤¯à¤¾à¤¯ विना, पूरà¥à¤µà¤¨à¤¿à¤°à¥à¤§à¤¾à¤°à¤¿à¤¤ "
+"मूलà¥à¤¯ 30 आहे)"
+
+#: ../clients/nm-online.c:150
+msgid "Exit immediately if NetworkManager is not running or connecting"
+msgstr "NetworkManager सà¥à¤°à¥‚ किंवा बंद असलà¥à¤¯à¤¾à¤¸ पटकण बाहेर पडा"
+
+#: ../clients/nm-online.c:151
+msgid "Don't print anything"
+msgstr "काहिहि छापू नका"
+
+#: ../clients/nm-online.c:152
+msgid "Wait for NetworkManager startup instead of a connection"
+msgstr "जोडणीà¤à¤µà¤œà¥€ NetworkManager सà¥à¤Ÿà¤¾à¤°à¥à¤Ÿà¤…पकरिता वाट पहा"
+
+#: ../clients/nm-online.c:173
+msgid ""
+"Waits for NetworkManager to finish activating startup network connections."
+msgstr ""
+"सà¥à¤Ÿà¤¾à¤°à¥à¤Ÿà¤…प नेटवरà¥à¤• जोडणà¥à¤¯à¤¾ सकà¥à¤°à¥€à¤¯ करणà¥à¤¯à¤¾à¤ªà¤¾à¤¸à¥‚न बंद करणà¥à¤¯à¤¾à¤šà¥€ पà¥à¤°à¤¤à¤¿à¤•à¥à¤·à¤¾ करतो."
+
+#: ../clients/nm-online.c:180 ../clients/nm-online.c:186
+msgid "Invalid option. Please use --help to see a list of valid options."
+msgstr ""
+"अवैध परà¥à¤¯à¤¾à¤¯. वैध परà¥à¤¯à¤¾à¤¯à¤¾à¤‚ची सूची पहाणà¥à¤¯à¤¾à¤•à¤°à¥€à¤¤à¤¾ कृपया --helpचा वापर करा."
+
+#: ../clients/tui/newt/nmt-newt-utils.c:180 ../clients/tui/nmt-editor.c:230
+#: ../clients/tui/nmt-password-dialog.c:174
+#: ../clients/tui/nmt-route-editor.c:135 ../clients/tui/nmtui-hostname.c:71
+#: ../clients/tui/nmtui.c:118
+msgid "OK"
+msgstr "ठिक आहे"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:328
+#: ../clients/tui/newt/nmt-newt-utils.c:360
+#, c-format
+msgid "Could not create temporary file: %s"
+msgstr "तातà¥à¤ªà¥à¤°à¥à¤¤à¥à¤¯à¤¾ फाइल: %s चे निरà¥à¤®à¤¾à¤£ अशकà¥à¤¯"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:368
+#, c-format
+msgid "Editor failed: %s"
+msgstr "संपादक अपयशी: %s"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:376
+#, c-format
+msgid "Editor failed with status %d"
+msgstr "सà¥à¤¥à¤¿à¤¤à¥€ %d सह संपादक अपयशी ठरले"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:378
+#, c-format
+msgid "Editor failed with signal %d"
+msgstr "सà¥à¤¥à¤¿à¤¤à¥€ %d सह संपादक अपयशी ठरले"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:382
+#, c-format
+msgid "Could not re-read file: %s"
+msgstr "फाइल: %s वाचणे अशकà¥à¤¯"
+
+#: ../clients/tui/nm-editor-utils.c:151
+#, c-format
+msgid "Ethernet connection %d"
+msgstr "इथरनेट जोडणी %d"
+
+#: ../clients/tui/nm-editor-utils.c:159
+#, c-format
+msgid "Wi-Fi connection %d"
+msgstr "वायफाय जोडणी %d"
+
+#: ../clients/tui/nm-editor-utils.c:168
+#, c-format
+msgid "InfiniBand connection %d"
+msgstr "इंफिनिबà¤à¤¡ जोडणी %d"
+
+#: ../clients/tui/nm-editor-utils.c:173 ../libnm-glib/nm-device.c:1798
+msgid "Mobile Broadband"
+msgstr "मोबाईल बà¥à¤°à¥‰à¤¡à¤¬à¤à¤¡"
+
+#: ../clients/tui/nm-editor-utils.c:176
+#, c-format
+msgid "Mobile broadband connection %d"
+msgstr "मोबाईल बà¥à¤°à¥‰à¤¡à¤¬à¤à¤¡ जोडणी %d"
+
+#: ../clients/tui/nm-editor-utils.c:182 ../clients/tui/nmt-page-dsl.c:39
+msgid "DSL"
+msgstr "DSL"
+
+#: ../clients/tui/nm-editor-utils.c:186
+#, c-format
+msgid "DSL connection %d"
+msgstr "DSL जोडणी %d"
+
+#: ../clients/tui/nm-editor-utils.c:191 ../libnm-core/nm-connection.c:1501
+#: ../libnm-glib/nm-device.c:1802 ../libnm-util/nm-connection.c:1606
+#: ../src/settings/plugins/ifcfg-rh/reader.c:3931
+msgid "Bond"
+msgstr "बाà¤à¤¡"
+
+#: ../clients/tui/nm-editor-utils.c:195
+#, c-format
+msgid "Bond connection %d"
+msgstr "बाà¤à¤¡ जोडणी %d"
+
+#: ../clients/tui/nm-editor-utils.c:200 ../libnm-core/nm-connection.c:1505
+#: ../libnm-glib/nm-device.c:1806 ../libnm-util/nm-connection.c:1610
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4219
+msgid "Bridge"
+msgstr "बà¥à¤°à¤¿à¤œ"
+
+#: ../clients/tui/nm-editor-utils.c:205
+#, c-format
+msgid "Bridge connection %d"
+msgstr "बà¥à¤°à¤¿à¤œ जोडणी %d"
+
+#: ../clients/tui/nm-editor-utils.c:209 ../libnm-core/nm-connection.c:1503
+#: ../libnm-glib/nm-device.c:1804 ../libnm-util/nm-connection.c:1608
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4035
+msgid "Team"
+msgstr "टिम"
+
+#: ../clients/tui/nm-editor-utils.c:214
+#, c-format
+msgid "Team connection %d"
+msgstr "टिम जोडणी %d"
+
+#: ../clients/tui/nm-editor-utils.c:222
+#, c-format
+msgid "VLAN connection %d"
+msgstr "VLAN जोडणी %d"
+
+#: ../clients/tui/nm-editor-utils.c:237
+#, c-format
+msgid "VPN connection %d"
+msgstr "VPN जोडणी %d"
+
+#: ../clients/tui/nmt-device-entry.c:371
+msgid "Select..."
+msgstr "निवडा..."
+
+#: ../clients/tui/nmt-edit-connection-list.c:129
+msgid "Add"
+msgstr "समाविषà¥à¤Ÿ करा"
+
+#: ../clients/tui/nmt-edit-connection-list.c:132
+#: ../clients/tui/nmt-page-ip4.c:175 ../clients/tui/nmt-page-ip6.c:173
+#: ../clients/tui/nmt-page-team-port.c:110 ../clients/tui/nmt-page-team.c:174
+msgid "Edit..."
+msgstr "संपादित करा..."
+
+#: ../clients/tui/nmt-edit-connection-list.c:135
+#: ../clients/tui/nmtui-edit.c:471
+msgid "Delete"
+msgstr "नषà¥à¤Ÿ करा"
+
+#: ../clients/tui/nmt-editor.c:81
+#, c-format
+msgid "Could not create editor for connection '%s' of type '%s'."
+msgstr "जोडणी '%s', पà¥à¤°à¤•à¤¾à¤° '%s' करिता संपादकचे निरà¥à¤®à¤¾à¤£ अशकà¥à¤¯."
+
+#: ../clients/tui/nmt-editor.c:85
+#, c-format
+msgid "Could not create editor for invalid connection '%s'."
+msgstr "अवैध जोडणी '%s' करिता संपादकाचे निरà¥à¤®à¤¾à¤£ अशकà¥à¤¯."
+
+#: ../clients/tui/nmt-editor.c:95
+msgid "Edit Connection"
+msgstr "जोडणी संपादित करा"
+
+#: ../clients/tui/nmt-editor.c:139
+#, c-format
+msgid "Unable to save connection: %s"
+msgstr "जोडणी: %s साठवणे अशकà¥à¤¯"
+
+#: ../clients/tui/nmt-editor.c:153
+#, c-format
+msgid "Unable to add new connection: %s"
+msgstr "नवीन जोडणी: %s समाविषà¥à¤Ÿ करणे अशकà¥à¤¯"
+
+#: ../clients/tui/nmt-editor.c:227 ../clients/tui/nmt-password-dialog.c:171
+#: ../clients/tui/nmt-route-editor.c:128 ../clients/tui/nmtui-edit.c:192
+#: ../clients/tui/nmtui-edit.c:470 ../clients/tui/nmtui-hostname.c:69
+msgid "Cancel"
+msgstr "रदà¥à¤¦ करा"
+
+#: ../clients/tui/nmt-mtu-entry.c:86
+msgid "(default)"
+msgstr "(पूरà¥à¤µà¤¨à¤¿à¤°à¥à¤§à¤¾à¤°à¤¿à¤¤)"
+
+#: ../clients/tui/nmt-mtu-entry.c:88 ../clients/tui/nmt-mtu-entry.c:119
+msgid "bytes"
+msgstr "बाइटà¥à¤¸"
+
+#: ../clients/tui/nmt-page-bond.c:88
+msgid "Round-robin"
+msgstr "राऊंड-रॉबिन"
+
+#: ../clients/tui/nmt-page-bond.c:89
+msgid "Active Backup"
+msgstr "सकà¥à¤°à¥€à¤¯ बॅकअप"
+
+#: ../clients/tui/nmt-page-bond.c:90
+msgid "XOR"
+msgstr "XOR"
+
+#: ../clients/tui/nmt-page-bond.c:91
+msgid "Broadcast"
+msgstr "बà¥à¤°à¥‰à¤¡à¤•à¤¾à¤¸à¥à¤Ÿ"
+
+#: ../clients/tui/nmt-page-bond.c:92
+msgid "802.3ad"
+msgstr "802.3ad"
+
+#: ../clients/tui/nmt-page-bond.c:93
+msgid "Adaptive Transmit Load Balancing (tlb)"
+msgstr "अडॅपà¥à¤Ÿà¤¿à¤µà¥à¤¹ टà¥à¤°à¤¾à¤‚सà¥à¤®à¤¿à¤Ÿ लोड बॅलेंसिंग (tlb)"
+
+#: ../clients/tui/nmt-page-bond.c:94
+msgid "Adaptive Load Balancing (alb)"
+msgstr "अडॅपà¥à¤Ÿà¤¿à¤µà¥à¤¹ लोड बॅलेंसिंग (alb)"
+
+#: ../clients/tui/nmt-page-bond.c:100
+msgid "MII (recommended)"
+msgstr "MII (शिफारसीय)"
+
+#: ../clients/tui/nmt-page-bond.c:101
+msgid "ARP"
+msgstr "ARP"
+
+#: ../clients/tui/nmt-page-bond.c:353 ../clients/tui/nmt-page-bridge.c:80
+#: ../clients/tui/nmt-page-team.c:153
+msgid "Slaves"
+msgstr "सà¥à¤²à¥‡à¤µà¥à¤¹à¤œ"
+
+#: ../clients/tui/nmt-page-bond.c:365 ../clients/tui/nmt-page-wifi.c:226
+msgid "Mode"
+msgstr "मोड"
+
+#: ../clients/tui/nmt-page-bond.c:371
+msgid "Primary"
+msgstr "पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤•"
+
+#: ../clients/tui/nmt-page-bond.c:377
+msgid "Link monitoring"
+msgstr "लिंक नियंतà¥à¤°à¤£"
+
+#: ../clients/tui/nmt-page-bond.c:383 ../clients/tui/nmt-page-bond.c:390
+#: ../clients/tui/nmt-page-bond.c:397 ../clients/tui/nmt-page-bond.c:404
+msgctxt "milliseconds"
+msgid "ms"
+msgstr "ms"
+
+#: ../clients/tui/nmt-page-bond.c:384 ../clients/tui/nmt-page-bond.c:405
+msgid "Monitoring frequency"
+msgstr "नियंतà¥à¤°à¤£ वारंवारता"
+
+#: ../clients/tui/nmt-page-bond.c:391
+msgid "Link up delay"
+msgstr "लिंक अप विलंब"
+
+#: ../clients/tui/nmt-page-bond.c:398
+msgid "Link down delay"
+msgstr "लिंक डाऊन विलंब"
+
+#: ../clients/tui/nmt-page-bond.c:411
+msgid "ARP targets"
+msgstr "ARP लकà¥à¤·à¥à¤¯"
+
+#: ../clients/tui/nmt-page-bridge-port.c:38
+msgid "BRIDGE PORT"
+msgstr "BRIDGE PORT"
+
+#: ../clients/tui/nmt-page-bridge-port.c:69
+#: ../clients/tui/nmt-page-bridge.c:106
+msgid "Priority"
+msgstr "पà¥à¤°à¤¾à¤§à¤¾à¤¨à¥à¤¯à¤¤à¤¾"
+
+#: ../clients/tui/nmt-page-bridge-port.c:75
+msgid "Path cost"
+msgstr "पाथ कॉसà¥à¤Ÿ"
+
+#: ../clients/tui/nmt-page-bridge-port.c:77
+msgid "Hairpin mode"
+msgstr "हैरà¥à¤ªà¤¿à¤¨ मोड"
+
+#: ../clients/tui/nmt-page-bridge.c:42
+msgid "BRIDGE"
+msgstr "BRIDGE"
+
+#: ../clients/tui/nmt-page-bridge.c:90 ../clients/tui/nmt-page-bridge.c:115
+#: ../clients/tui/nmt-page-bridge.c:125 ../clients/tui/nmt-page-bridge.c:135
+msgid "seconds"
+msgstr "सेकंद"
+
+#: ../clients/tui/nmt-page-bridge.c:91
+msgid "Aging time"
+msgstr "à¤à¤œà¤¿à¤‚ग वेळ"
+
+#: ../clients/tui/nmt-page-bridge.c:93
+msgid "Enable STP (Spanning Tree Protocol)"
+msgstr "STP सà¥à¤°à¥‚ करा (सà¥à¤ªà¥…निंग टà¥à¤°à¥€ पà¥à¤°à¥‹à¤Ÿà¥‹à¤•à¥‰à¤²)"
+
+#: ../clients/tui/nmt-page-bridge.c:116
+msgid "Forward delay"
+msgstr "फॉरवरà¥à¤¡ डिले"
+
+#: ../clients/tui/nmt-page-bridge.c:126
+msgid "Hello time"
+msgstr "हलो वेळ"
+
+#: ../clients/tui/nmt-page-bridge.c:136
+msgid "Max age"
+msgstr "कमाल वय"
+
+#. 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)
+#.
+#: ../clients/tui/nmt-page-dsl.c:67 ../clients/tui/nmt-page-wifi.c:328
+#: ../clients/tui/nmt-secret-agent.c:206 ../clients/tui/nmt-secret-agent.c:301
+msgid "Username"
+msgstr "वापरकरà¥à¤¤à¤¾à¤¨à¤¾à¤µ"
+
+#: ../clients/tui/nmt-page-dsl.c:76 ../clients/tui/nmt-page-wifi.c:273
+#: ../clients/tui/nmt-page-wifi.c:304 ../clients/tui/nmt-page-wifi.c:337
+#: ../clients/tui/nmt-secret-agent.c:211 ../clients/tui/nmt-secret-agent.c:248
+#: ../clients/tui/nmt-secret-agent.c:278 ../clients/tui/nmt-secret-agent.c:311
+#: ../clients/tui/nmt-secret-agent.c:380 ../clients/tui/nmt-secret-agent.c:393
+#: ../clients/tui/nmt-secret-agent.c:409
+msgid "Password"
+msgstr "पासवरà¥à¤¡"
+
+#: ../clients/tui/nmt-page-dsl.c:79 ../clients/tui/nmt-secret-agent.c:306
+msgid "Service"
+msgstr "सेवा"
+
+#: ../clients/tui/nmt-page-ethernet.c:41
+msgid "ETHERNET"
+msgstr "ETHERNET"
+
+#: ../clients/tui/nmt-page-ethernet.c:80 ../clients/tui/nmt-page-vlan.c:124
+#: ../clients/tui/nmt-page-wifi.c:360
+msgid "Cloned MAC address"
+msgstr "कà¥à¤²à¥‹à¤¨ केलेले MAC पतà¥à¤¤à¥‡"
+
+#: ../clients/tui/nmt-page-infiniband.c:40
+msgid "INFINIBAND"
+msgstr "INFINIBAND"
+
+#: ../clients/tui/nmt-page-infiniband.c:51
+msgid "Datagram"
+msgstr "डाटागà¥à¤°à¤¾à¤®"
+
+#: ../clients/tui/nmt-page-infiniband.c:52
+msgid "Connected"
+msgstr "जोडणी केली"
+
+#: ../clients/tui/nmt-page-infiniband.c:90
+msgid "Transport mode"
+msgstr "टà¥à¤°à¤¾à¤‚सà¥à¤ªà¥‹à¤°à¥à¤Ÿ मोड"
+
+#: ../clients/tui/nmt-page-ip4.c:41
+msgid "Disabled"
+msgstr "बंद केले"
+
+#: ../clients/tui/nmt-page-ip4.c:42 ../clients/tui/nmt-page-ip6.c:42
+msgid "Automatic"
+msgstr "सà¥à¤µ"
+
+#: ../clients/tui/nmt-page-ip4.c:43 ../clients/tui/nmt-page-ip6.c:44
+msgid "Link-Local"
+msgstr "लिंक-लोकल"
+
+#: ../clients/tui/nmt-page-ip4.c:44 ../clients/tui/nmt-page-ip6.c:45
+msgid "Manual"
+msgstr "मॅनà¥à¤¯à¥à¤…ल"
+
+#: ../clients/tui/nmt-page-ip4.c:45
+msgid "Shared"
+msgstr "शेअरà¥à¤¡"
+
+#: ../clients/tui/nmt-page-ip4.c:54
+msgid "IPv4 CONFIGURATION"
+msgstr "IPv4 संरचना"
+
+#: ../clients/tui/nmt-page-ip4.c:100 ../clients/tui/nmt-page-ip6.c:100
+msgid "(No custom routes)"
+msgstr "(पसंतीचे राऊटà¥à¤¸ नाही)"
+
+#: ../clients/tui/nmt-page-ip4.c:103 ../clients/tui/nmt-page-ip6.c:103
+#, c-format
+msgid "One custom route"
+msgid_plural "%d custom routes"
+msgstr[0] "à¤à¤• पसंतीचा राउट"
+msgstr[1] "%d पसंतीचे राउट"
+
+#: ../clients/tui/nmt-page-ip4.c:144 ../clients/tui/nmt-page-ip6.c:144
+msgid "Addresses"
+msgstr "पतà¥à¤¤à¥‡"
+
+#: ../clients/tui/nmt-page-ip4.c:150 ../clients/tui/nmt-page-ip6.c:150
+msgid "Gateway"
+msgstr "गेटवे"
+
+#: ../clients/tui/nmt-page-ip4.c:156 ../clients/tui/nmt-page-ip6.c:156
+msgid "DNS servers"
+msgstr "DNS सरà¥à¤µà¥à¤¹à¤°à¥à¤¸"
+
+#: ../clients/tui/nmt-page-ip4.c:162 ../clients/tui/nmt-page-ip6.c:162
+msgid "Search domains"
+msgstr "सरà¥à¤š डोमैनà¥à¤¸"
+
+#: ../clients/tui/nmt-page-ip4.c:177 ../clients/tui/nmt-page-ip6.c:175
+msgid "Routing"
+msgstr "राउटिंग"
+
+#: ../clients/tui/nmt-page-ip4.c:179 ../clients/tui/nmt-page-ip6.c:177
+msgid "Never use this network for default route"
+msgstr "पूरà¥à¤µà¤¨à¤¿à¤°à¥à¤§à¤¾à¤°à¤¿à¤¤ राऊटकरिता हà¥à¤¯à¤¾ नेटवरà¥à¤•à¤šà¤¾ वापर कधीच करू नका"
+
+#: ../clients/tui/nmt-page-ip4.c:187
+msgid "Require IPv4 addressing for this connection"
+msgstr "हà¥à¤¯à¤¾ जोडणीकरिता IPv4 पतà¥à¤¤à¤¾ आवशà¥à¤¯à¤• आहे"
+
+#: ../clients/tui/nmt-page-ip6.c:41
+msgid "Ignore"
+msgstr "दà¥à¤°à¥à¤²à¤•à¥à¤· करा"
+
+#: ../clients/tui/nmt-page-ip6.c:43
+msgid "Automatic (DHCP-only)"
+msgstr "सà¥à¤µ (फकà¥à¤¤ DHCP)"
+
+#: ../clients/tui/nmt-page-ip6.c:54
+msgid "IPv6 CONFIGURATION"
+msgstr "IPv6 संरचना"
+
+#: ../clients/tui/nmt-page-ip6.c:185
+msgid "Require IPv6 addressing for this connection"
+msgstr "हà¥à¤¯à¤¾ जोडणीकरिता IPv6 पतà¥à¤¤à¤¾ आवशà¥à¤¯à¤• आहे"
+
+#: ../clients/tui/nmt-page-main.c:139
+msgid "Hide"
+msgstr "लपवा"
+
+#: ../clients/tui/nmt-page-main.c:139
+msgid "Show"
+msgstr "दाखवा"
+
+#: ../clients/tui/nmt-page-main.c:187
+msgid "Profile name"
+msgstr "पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² नाव"
+
+#: ../clients/tui/nmt-page-main.c:194
+msgid "Device"
+msgstr "साधन"
+
+#: ../clients/tui/nmt-page-main.c:243
+msgid "Automatically connect"
+msgstr "सà¥à¤µ जोडणी करा"
+
+#: ../clients/tui/nmt-page-main.c:249
+msgid "Available to all users"
+msgstr "सरà¥à¤µ वापरकरà¥à¤¤à¥à¤¯à¤¾à¤‚ना उपलबà¥à¤§"
+
+#: ../clients/tui/nmt-page-ppp.c:49
+#| msgid "IPv4 CONFIGURATION"
+msgid "PPP CONFIGURATION"
+msgstr "PPP संरचना"
+
+#: ../clients/tui/nmt-page-ppp.c:142
+#| msgid "Authentication"
+msgid "Allowed authentication methods:"
+msgstr "ओळख पटवणà¥à¤¯à¤¾à¤šà¥à¤¯à¤¾ पदà¥à¤§à¤¤à¥€ सà¥à¤µà¥€à¤•à¤¾à¤°à¤²à¥‡:"
+
+#: ../clients/tui/nmt-page-ppp.c:149
+#| msgid "LEAP"
+msgid "EAP"
+msgstr "EAP"
+
+#: ../clients/tui/nmt-page-ppp.c:157
+#| msgid "AP"
+msgid "PAP"
+msgstr "PAP"
+
+#: ../clients/tui/nmt-page-ppp.c:165
+msgid "CHAP"
+msgstr "CHAP"
+
+#: ../clients/tui/nmt-page-ppp.c:173
+msgid "MSCHAPv2"
+msgstr "MSCHAPv2"
+
+#: ../clients/tui/nmt-page-ppp.c:181
+msgid "MSCHAP"
+msgstr "MSCHAP"
+
+#: ../clients/tui/nmt-page-ppp.c:197
+msgid "Use point-to-point encryption (MPPE)"
+msgstr "पॉइंट-टू-पॉइंट à¤à¤¨à¤•à¥à¤°à¤¿à¤ªà¥à¤¶à¤¨ (MPPE) चा वापर करा"
+
+#: ../clients/tui/nmt-page-ppp.c:209
+msgid "Require 128-bit encryption"
+msgstr "128-बिट à¤à¤‚कà¥à¤°à¤¿à¤ªà¥à¤¶à¤¨ आवशà¥à¤¯à¤•"
+
+#: ../clients/tui/nmt-page-ppp.c:219
+msgid "Use stateful MPPE"
+msgstr "सà¥à¤Ÿà¥‡à¤Ÿà¤«à¥‚ल MPPE चा वापर करा"
+
+#: ../clients/tui/nmt-page-ppp.c:231
+msgid "Allow BSD data compression"
+msgstr "BSD डाटा आंकà¥à¤šà¤¨ सà¥à¤µà¥€à¤•à¤¾à¤°à¤¾"
+
+#: ../clients/tui/nmt-page-ppp.c:239
+msgid "Allow Deflate data compression"
+msgstr "डाटा आंकà¥à¤šà¤¨ कमी करणे सà¥à¤µà¥€à¤•à¤¾à¤°à¤¾"
+
+#: ../clients/tui/nmt-page-ppp.c:247
+msgid "Use TCP header compression"
+msgstr "TCP शीरà¥à¤·à¤• आंकà¥à¤šà¤¨à¤šà¤¾ वापर करा"
+
+#: ../clients/tui/nmt-page-ppp.c:257
+msgid "Send PPP echo packets"
+msgstr "PPP echo पॅकेटà¥à¤¸ पाठवा"
+
+#: ../clients/tui/nmt-page-team-port.c:45
+msgid "TEAM PORT"
+msgstr "TEAM PORT"
+
+#: ../clients/tui/nmt-page-team-port.c:100 ../clients/tui/nmt-page-team.c:164
+msgid "JSON configuration"
+msgstr "JSON संरचना"
+
+#: ../clients/tui/nmt-page-team.c:51
+msgid "TEAM"
+msgstr "TEAM"
+
+#: ../clients/tui/nmt-page-vlan.c:101
+msgid "Parent"
+msgstr "पॅरेंट"
+
+#: ../clients/tui/nmt-page-vlan.c:116
+msgid "VLAN id"
+msgstr "VLAN id"
+
+#: ../clients/tui/nmt-page-wifi.c:57
+msgid "WI-FI"
+msgstr "WI-FI"
+
+#: ../clients/tui/nmt-page-wifi.c:68
+msgctxt "Wi-Fi"
+msgid "Client"
+msgstr "कà¥à¤²à¤¾à¤à¤‚ट"
+
+#: ../clients/tui/nmt-page-wifi.c:69
+msgid "Access Point"
+msgstr "ॲकà¥à¤¸à¥‡à¤¸ पॉइंट"
+
+#: ../clients/tui/nmt-page-wifi.c:70
+msgid "Ad-Hoc Network"
+msgstr "ॲडहॉक नेटवरà¥à¤•"
+
+#: ../clients/tui/nmt-page-wifi.c:75
+msgctxt "Wi-Fi"
+msgid "Automatic"
+msgstr "सà¥à¤µ"
+
+#. 802.11a Wi-Fi network
+#: ../clients/tui/nmt-page-wifi.c:77
+msgid "A (5 GHz)"
+msgstr "A (5 GHz)"
+
+#. 802.11b / 802.11g Wi-Fi network
+#: ../clients/tui/nmt-page-wifi.c:79
+msgid "B/G (2.4 GHz)"
+msgstr "B/G (2.4 GHz)"
+
+#: ../clients/tui/nmt-page-wifi.c:84
+msgctxt "Wi-Fi security"
+msgid "None"
+msgstr "काहिही नाही"
+
+#: ../clients/tui/nmt-page-wifi.c:85
+msgid "WPA & WPA2 Personal"
+msgstr "WPA आणि WPA2 परà¥à¤¸à¤¨à¤²"
+
+#: ../clients/tui/nmt-page-wifi.c:86
+msgid "WPA & WPA2 Enterprise"
+msgstr "WPA आणि WPA2 à¤à¤‚टरपà¥à¤°à¤¾à¤‡à¤œ"
+
+#: ../clients/tui/nmt-page-wifi.c:87
+msgid "WEP 40/128-bit Key (Hex or ASCII)"
+msgstr "WEP 40/128-बिट कि (Hex किंवा ASCII)"
+
+#: ../clients/tui/nmt-page-wifi.c:88
+msgid "WEP 128-bit Passphrase"
+msgstr "WEP 128-बिट पासफà¥à¤°à¥‡à¤œ"
+
+#: ../clients/tui/nmt-page-wifi.c:89
+msgid "Dynamic WEP (802.1x)"
+msgstr "डायनॅमिक WEP (802.1x)"
+
+#: ../clients/tui/nmt-page-wifi.c:90
+msgid "LEAP"
+msgstr "LEAP"
+
+#: ../clients/tui/nmt-page-wifi.c:95
+msgctxt "WEP key index"
+msgid "1 (Default)"
+msgstr "१ (पूरà¥à¤µà¤¨à¤¿à¤°à¥à¤§à¤¾à¤°à¤¿à¤¤)"
+
+#: ../clients/tui/nmt-page-wifi.c:96
+msgctxt "WEP key index"
+msgid "2"
+msgstr "२"
+
+#: ../clients/tui/nmt-page-wifi.c:97
+msgctxt "WEP key index"
+msgid "3"
+msgstr "३"
+
+#: ../clients/tui/nmt-page-wifi.c:98
+msgctxt "WEP key index"
+msgid "4"
+msgstr "४"
+
+#: ../clients/tui/nmt-page-wifi.c:103
+msgid "Open System"
+msgstr "पà¥à¤°à¤£à¤¾à¤²à¥€ उघडा"
+
+#: ../clients/tui/nmt-page-wifi.c:104
+msgid "Shared Key"
+msgstr "शेअरà¥à¤¡ कि"
+
+#: ../clients/tui/nmt-page-wifi.c:252
+msgid "Channel"
+msgstr "वाहिनी"
+
+#: ../clients/tui/nmt-page-wifi.c:257
+msgid "Security"
+msgstr "सà¥à¤°à¤•à¥à¤·à¤¾"
+
+#. "wpa-enterprise"
+#. FIXME
+#: ../clients/tui/nmt-page-wifi.c:278
+msgid "(No support for wpa-enterprise yet...)"
+msgstr "(wpa-enterprise करिता अजूनही समरà¥à¤¥à¤¨ नाही...)"
+
+#: ../clients/tui/nmt-page-wifi.c:285 ../clients/tui/nmt-secret-agent.c:262
+msgid "Key"
+msgstr "कि"
+
+#: ../clients/tui/nmt-page-wifi.c:288 ../clients/tui/nmt-page-wifi.c:307
+msgid "WEP index"
+msgstr "WEP इंडेकà¥à¤¸"
+
+#: ../clients/tui/nmt-page-wifi.c:296 ../clients/tui/nmt-page-wifi.c:315
+msgid "Authentication"
+msgstr "ओळख पटवा"
+
+#. "dynamic-wep"
+#. FIXME
+#: ../clients/tui/nmt-page-wifi.c:321
+msgid "(No support for dynamic-wep yet...)"
+msgstr "(dynamic-wep करिता अजूनही समरà¥à¤¥à¤¨ नाही...)"
+
+#: ../clients/tui/nmt-password-fields.c:130
+msgid "Ask for this password every time"
+msgstr "पà¥à¤°à¤¤à¥à¤¯à¥‡à¤•à¤µà¥‡à¤³à¥€ हà¥à¤¯à¤¾ पासवरà¥à¤¡à¤•à¤°à¤¿à¤¤à¤¾ विचारा"
+
+#: ../clients/tui/nmt-password-fields.c:131
+msgid "Show password"
+msgstr "पासवरà¥à¤¡ दाखवा"
+
+#: ../clients/tui/nmt-route-table.c:217
+msgid "Destination"
+msgstr "लकà¥à¤·à¥à¤¯"
+
+#: ../clients/tui/nmt-route-table.c:217
+msgid "Prefix"
+msgstr "पà¥à¤°à¤¿à¤«à¤¿à¤•à¥à¤¸"
+
+#: ../clients/tui/nmt-route-table.c:226
+msgid "Next Hop"
+msgstr "पà¥à¤¢à¥€à¤² हॉप"
+
+#: ../clients/tui/nmt-route-table.c:234
+msgid "Metric"
+msgstr "मेटà¥à¤°à¤¿à¤•"
+
+#: ../clients/tui/nmt-route-table.c:254
+msgid "No custom routes are defined."
+msgstr "पसंतीचे राउटà¥à¤¸ ठरवले नाही."
+
+#: ../clients/tui/nmt-secret-agent.c:220
+msgid "Identity"
+msgstr "ओळख"
+
+#: ../clients/tui/nmt-secret-agent.c:225
+msgid "Private key password"
+msgstr "पà¥à¤°à¤¾à¤‡à¤µà¥à¤¹à¥‡à¤Ÿ कि पासवरà¥à¤¡"
+
+#: ../clients/tui/nmt-secret-agent.c:340
+msgid "Authentication required by wireless network"
+msgstr "वायरलेस नेटवरà¥à¤•à¤¤à¤°à¥à¤«à¥‡ ओळख पटवणे आवशà¥à¤¯à¤• आहे"
+
+#: ../clients/tui/nmt-secret-agent.c:341
+#, c-format
+msgid ""
+"Passwords or encryption keys are required to access the wireless network "
+"'%s'."
+msgstr ""
+"वायरलेस नेटवरà¥à¤• '%s' करिता पà¥à¤°à¤µà¥‡à¤¶ पà¥à¤°à¤¾à¤ªà¥à¤¤ करणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ पासवरà¥à¤¡à¤œ किंवा "
+"à¤à¤¨à¤•à¥à¤°à¤¿à¤ªà¥à¤¶à¤¨ किज आवशà¥à¤¯à¤• "
+"आहे."
+
+#: ../clients/tui/nmt-secret-agent.c:349
+msgid "Wired 802.1X authentication"
+msgstr "वायरà¥à¤¡ 802.1X ओळख पटवा"
+
+#: ../clients/tui/nmt-secret-agent.c:352
+msgid "Network name"
+msgstr "नेटवरà¥à¤• नाव"
+
+#: ../clients/tui/nmt-secret-agent.c:359
+msgid "DSL authentication"
+msgstr "DSL ओळख पटवा"
+
+#: ../clients/tui/nmt-secret-agent.c:367
+msgid "PIN code required"
+msgstr "PIN कोड आवशà¥à¤¯à¤•"
+
+#: ../clients/tui/nmt-secret-agent.c:368
+msgid "PIN code is needed for the mobile broadband device"
+msgstr "मोबाईल बà¥à¤°à¥‰à¤¡à¤¬à¤à¤¡ साधनकरिता PIN कोड आवशà¥à¤¯à¤• आहे"
+
+#: ../clients/tui/nmt-secret-agent.c:370
+msgid "PIN"
+msgstr "PIN"
+
+#: ../clients/tui/nmt-secret-agent.c:376 ../clients/tui/nmt-secret-agent.c:389
+#: ../clients/tui/nmt-secret-agent.c:405
+msgid "Mobile broadband network password"
+msgstr "मोबाईल बà¥à¤°à¥‰à¤¡à¤¬à¤à¤¡ नेटवरà¥à¤• पासवरà¥à¤¡"
+
+#: ../clients/tui/nmt-secret-agent.c:377 ../clients/tui/nmt-secret-agent.c:390
+#: ../clients/tui/nmt-secret-agent.c:406
+#, c-format
+msgid "A password is required to connect to '%s'."
+msgstr "'%s' सह जोडणीकरिता पासवरà¥à¤¡ आवशà¥à¤¯à¤• आहे."
+
+#: ../clients/tui/nmt-slave-list.c:137
+msgid "Select the type of slave connection you wish to add."
+msgstr "समावेशजोगी सà¥à¤²à¥‡à¤µà¥à¤¹ जोडणीचे पà¥à¤°à¤•à¤¾à¤° नीवडा."
+
+#: ../clients/tui/nmt-widget-list.c:141
+msgid "Add..."
+msgstr "समाविषà¥à¤Ÿ करा..."
+
+#: ../clients/tui/nmt-widget-list.c:204
+msgid "Remove"
+msgstr "काढून टाका"
+
+#: ../clients/tui/nmtui-connect.c:90
+msgid "Activation failed"
+msgstr "सकà¥à¤°à¥€à¤¯à¤¤à¤¾ अपयशी"
+
+#: ../clients/tui/nmtui-connect.c:138
+msgid "Connecting..."
+msgstr "जोडणी करत आहे..."
+
+#: ../clients/tui/nmtui-connect.c:167 ../clients/tui/nmtui-connect.c:190
+#, c-format
+msgid "Could not activate connection: %s"
+msgstr "जोडणी: %s सकà¥à¤°à¥€à¤¯ करणे अशकà¥à¤¯"
+
+#: ../clients/tui/nmtui-connect.c:250 ../clients/tui/nmtui-connect.c:299
+msgid "Activate"
+msgstr "सà¥à¤°à¥‚ करा"
+
+#: ../clients/tui/nmtui-connect.c:252
+msgid "Deactivate"
+msgstr "बंद करा"
+
+#: ../clients/tui/nmtui-connect.c:304 ../clients/tui/nmtui-edit.c:95
+#: ../clients/tui/nmtui.c:112
+msgid "Quit"
+msgstr "बाहेर पडा"
+
+#: ../clients/tui/nmtui-connect.c:327
+#, c-format
+msgid "No such connection '%s'"
+msgstr "हà¥à¤¯à¤¾ पà¥à¤°à¤•à¤¾à¤°à¤šà¥€ जोडणी '%s' नाही"
+
+#: ../clients/tui/nmtui-connect.c:329
+msgid "Connection is already active"
+msgstr "जोडणी आधीपासूनच सकà¥à¤°à¥€à¤¯ आहे"
+
+#: ../clients/tui/nmtui-edit.c:200
+msgid "Create"
+msgstr "निरà¥à¤®à¤¾à¤£ करा"
+
+#: ../clients/tui/nmtui-edit.c:342
+msgid "Select the type of connection you wish to create."
+msgstr "निरà¥à¤®à¤¾à¤£à¤œà¥‹à¤—ी जोडणीचे पà¥à¤°à¤•à¤¾à¤° नीवडा."
+
+#: ../clients/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 पà¥à¤²à¤—इन इंसà¥à¤Ÿà¥‰à¤² केले नसावे."
+
+#: ../clients/tui/nmtui-edit.c:386 ../clients/tui/nmtui-edit.c:402
+msgid "New Connection"
+msgstr "नवीन जोडणी"
+
+#: ../clients/tui/nmtui-edit.c:440
+#, c-format
+msgid "Unable to delete connection: %s"
+msgstr "जोडणी: '%s' नषà¥à¤Ÿ करणे अशकà¥à¤¯"
+
+#: ../clients/tui/nmtui-edit.c:472
+#, c-format
+msgid "Are you sure you want to delete the connection '%s'?"
+msgstr "तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ नकà¥à¤•à¥€ जोडणी '%s' नषà¥à¤Ÿ करायचे?"
+
+#: ../clients/tui/nmtui-edit.c:486
+#, c-format
+msgid "Could not delete connection: %s"
+msgstr "जोडणी: %s नषà¥à¤Ÿ करणे अशकà¥à¤¯"
+
+#: ../clients/tui/nmtui-hostname.c:47
+msgid "Set Hostname"
+msgstr "यजमाननाव सेट करा"
+
+#: ../clients/tui/nmtui-hostname.c:55
+msgid "Hostname"
+msgstr "यजमाननाव"
+
+#. Translators: this indicates the result. ie, "I have set the hostname to ..."
+#: ../clients/tui/nmtui-hostname.c:114
+#, c-format
+msgid "Set hostname to '%s'"
+msgstr "यजमाननाव '%s' असे सेट करा"
+
+#: ../clients/tui/nmtui-hostname.c:116
+#, c-format
+msgid "Unable to set hostname: %s"
+msgstr "यजमाननाव: %s असे सेट करा"
+
+#: ../clients/tui/nmtui.c:57 ../clients/tui/nmtui.c:60
+msgid "connection"
+msgstr "जोडणी"
+
+#: ../clients/tui/nmtui.c:58
+msgid "Edit a connection"
+msgstr "जोडणी संपादित करा"
+
+#: ../clients/tui/nmtui.c:61
+msgid "Activate a connection"
+msgstr "जोडणी सकà¥à¤°à¥€à¤¯ करा"
+
+#: ../clients/tui/nmtui.c:63
+msgid "new hostname"
+msgstr "नवीन यजमाननाव"
+
+#: ../clients/tui/nmtui.c:64
+msgid "Set system hostname"
+msgstr "पà¥à¤°à¤£à¤¾à¤²à¥€ यजमाननाव सेट करा"
+
+#: ../clients/tui/nmtui.c:87
+msgid "NetworkManager TUI"
+msgstr "NetworkManager TUI"
+
+#: ../clients/tui/nmtui.c:95
+msgid "Please select an option"
+msgstr "कृपया परà¥à¤¯à¤¾à¤¯ पसंत करा"
+
+#: ../clients/tui/nmtui.c:147
+msgid "Usage"
+msgstr "वापर"
+
+#: ../clients/tui/nmtui.c:228
+msgid "Could not parse arguments"
+msgstr "बाबी वाचणे आवशà¥à¤¯à¤•"
+
+#: ../clients/tui/nmtui.c:238 ../clients/tui/nmtui.c:249
+#, c-format
+msgid "Could not contact NetworkManager: %s.\n"
+msgstr "NetworkManager सह संपरà¥à¤• अशकà¥à¤¯: %s.\n"
+
+#: ../clients/tui/nmtui.c:243
+msgid "NetworkManager is not running."
+msgstr "NetworkManager सà¥à¤°à¥‚ नाही."
+
+#: ../libnm-core/crypto.c:135 ../libnm-util/crypto.c:133
#, c-format
msgid "PEM key file had no end tag '%s'."
msgstr "PEM कि फाइल अंतरà¥à¤—त समापà¥à¤¤ टॅघ '%s' आढळले नाही."
-#: ../libnm-util/crypto.c:146
+#: ../libnm-core/crypto.c:148 ../libnm-util/crypto.c:146
#, c-format
msgid "Doesn't look like a PEM private key file."
msgstr "PEM वैयकà¥à¤¤à¤¿à¤• कि फाइल नà¥à¤°à¥‚प आढळले नाही."
-#: ../libnm-util/crypto.c:163
+#: ../libnm-core/crypto.c:165 ../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:171
+#: ../libnm-core/crypto.c:173 ../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:181
+#: ../libnm-core/crypto.c:183 ../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:192
+#: ../libnm-core/crypto.c:194 ../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:199
+#: ../libnm-core/crypto.c:201 ../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:212
+#: ../libnm-core/crypto.c:216 ../libnm-util/crypto.c:214
#, c-format
msgid "Malformed PEM file: unknown private key cipher '%s'."
msgstr "सदोषीत PEM फाइल: अपरिचीत वैयकà¥à¤¤à¤¿à¤• सीफर कि '%s'."
-#: ../libnm-util/crypto.c:231
+#: ../libnm-core/crypto.c:235 ../libnm-util/crypto.c:233
#, c-format
msgid "Could not decode private key."
msgstr "वैयकà¥à¤¤à¤¿à¤• कि डिकोड करू शकले नाही."
-#: ../libnm-util/crypto.c:283
+#: ../libnm-core/crypto.c:288 ../libnm-util/crypto.c:285
msgid "Failed to find expected PKCS#8 start tag."
msgstr "अपेकà¥à¤·à¤¿à¤¤ PKCS#8 सà¥à¤°à¥‚वातीचे टॅग शोधणà¥à¤¯à¤¾à¤¸ अपयशी."
-#: ../libnm-util/crypto.c:291
+#: ../libnm-core/crypto.c:296 ../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:310
+#: ../libnm-core/crypto.c:315 ../libnm-util/crypto.c:312
msgid "Failed to decode PKCS#8 private key."
msgstr "PKCS#8 पà¥à¤°à¤¾à¤‡à¤µà¥à¤¹à¥‡à¤Ÿ कि डिकोड करणà¥à¤¯à¤¾à¤¸ अपयशी."
-#: ../libnm-util/crypto.c:352
+#: ../libnm-core/crypto.c:357 ../libnm-util/crypto.c:354
#, c-format
msgid "IV must be an even number of bytes in length."
msgstr "IV ची लांबी सम बाईटसॠची संखà¥à¤¯à¤¾ असायला हवी."
-#: ../libnm-util/crypto.c:366
+#: ../libnm-core/crypto.c:371 ../libnm-util/crypto.c:368
#, c-format
msgid "IV contains non-hexadecimal digits."
msgstr "IV अंतरà¥à¤—त non-hexadecimal अंक."
-#: ../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
+#: ../libnm-core/crypto.c:411 ../libnm-core/crypto_gnutls.c:151
+#: ../libnm-core/crypto_gnutls.c:269 ../libnm-core/crypto_nss.c:171
+#: ../libnm-core/crypto_nss.c:333 ../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:511
+#: ../libnm-core/crypto.c:523 ../libnm-util/crypto.c:518
#, c-format
msgid "Unable to determine private key type."
msgstr "वैयकà¥à¤¤à¤¿à¤• कि पà¥à¤°à¤•à¤¾à¤° ओळखणे अशकà¥à¤¯."
-#: ../libnm-util/crypto.c:566
+#: ../libnm-core/crypto.c:580 ../libnm-util/crypto.c:573
#, c-format
msgid "PEM certificate had no start tag '%s'."
msgstr "PEM पà¥à¤°à¤®à¤¾à¤£à¤ªà¤¤à¥à¤°à¤¾à¤¤ सà¥à¤°à¤µà¤¾à¤¤ टॅग '%s' आढळले नाही."
-#: ../libnm-util/crypto.c:575
+#: ../libnm-core/crypto.c:589 ../libnm-util/crypto.c:582
#, c-format
msgid "PEM certificate had no end tag '%s'."
msgstr "PEM पà¥à¤°à¤®à¤¾à¤£à¤ªà¤¤à¥à¤°à¤¾à¤¤ समापà¥à¤¤ टॅग '%s' आढळले नाही."
-#: ../libnm-util/crypto.c:593
+#: ../libnm-core/crypto.c:607 ../libnm-util/crypto.c:600
#, c-format
msgid "Failed to decode certificate."
msgstr "पà¥à¤°à¤®à¤¾à¤£à¤ªà¤¤à¥à¤° डिकोड करणà¥à¤¯à¤¾à¤¸ अपयशी."
-#: ../libnm-util/crypto_gnutls.c:50
+#: ../libnm-core/crypto_gnutls.c:50 ../libnm-util/crypto_gnutls.c:50
msgid "Failed to initialize the crypto engine."
msgstr "कà¥à¤°à¤¿à¤ªà¥à¤Ÿà¥‹ इंजीन पà¥à¤°à¤¾à¤°à¤‚भ करणà¥à¤¯à¤¾à¤¸ अपयशी."
-#: ../libnm-util/crypto_gnutls.c:92
+#: ../libnm-core/crypto_gnutls.c:92 ../libnm-util/crypto_gnutls.c:92
#, c-format
msgid "Failed to initialize the MD5 engine: %s / %s."
msgstr "MD5 इंजीन पà¥à¤°à¤¾à¤°à¤‚भ करणà¥à¤¯à¤¾à¤¸ अपयशी: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:155
+#: ../libnm-core/crypto_gnutls.c:159 ../libnm-util/crypto_gnutls.c:158
#, c-format
msgid "Invalid IV length (must be at least %zd)."
msgstr "अवैध IV लांबी (किमान %zd असायला हवे)."
-#: ../libnm-util/crypto_gnutls.c:166
+#: ../libnm-core/crypto_gnutls.c:170 ../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:175
+#: ../libnm-core/crypto_gnutls.c:179 ../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:184
+#: ../libnm-core/crypto_gnutls.c:188 ../libnm-util/crypto_gnutls.c:187
#, c-format
msgid "Failed to set IV for decryption: %s / %s."
msgstr "डिकà¥à¤°à¥€à¤ªà¤¶à¤¨ करीता IV निशà¥à¤šà¤¿à¤¤ करणà¥à¤¯à¤¾à¤¸ अपयशी: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:193
+#: ../libnm-core/crypto_gnutls.c:197 ../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:203 ../libnm-util/crypto_nss.c:257
+#: ../libnm-core/crypto_gnutls.c:207 ../libnm-core/crypto_nss.c:261
+#: ../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:214 ../libnm-util/crypto_nss.c:268
+#: ../libnm-core/crypto_gnutls.c:218 ../libnm-core/crypto_nss.c:272
+#: ../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:281
+#: ../libnm-core/crypto_gnutls.c:291 ../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:290
+#: ../libnm-core/crypto_gnutls.c:300 ../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:300
+#: ../libnm-core/crypto_gnutls.c:310 ../libnm-util/crypto_gnutls.c:308
#, c-format
msgid "Failed to set IV for encryption: %s / %s."
msgstr "à¤à¤¨à¤•à¥à¤°à¤¿à¤ªà¥à¤¶à¤¨ करीता IV सेट करणà¥à¤¯à¤¾à¤¸ अपयशी: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:309
+#: ../libnm-core/crypto_gnutls.c:319 ../libnm-util/crypto_gnutls.c:317
#, c-format
msgid "Failed to encrypt the data: %s / %s."
msgstr "डिकà¥à¤°à¥€à¤ªà¥à¤Ÿ करणà¥à¤¯à¤¾à¤¸ अपयशी: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:349
+#: ../libnm-core/crypto_gnutls.c:359 ../libnm-util/crypto_gnutls.c:357
#, c-format
msgid "Error initializing certificate data: %s"
msgstr "पà¥à¤°à¤®à¤¾à¤£ माहिती पà¥à¤°à¤¾à¤°à¤‚भ करणà¥à¤¯à¤¾à¤¸ तà¥à¤°à¥à¤Ÿà¥€: %s"
-#: ../libnm-util/crypto_gnutls.c:371
+#: ../libnm-core/crypto_gnutls.c:381 ../libnm-util/crypto_gnutls.c:379
#, c-format
msgid "Couldn't decode certificate: %s"
msgstr "पà¥à¤°à¤®à¤¾à¤£à¤ªà¤¤à¥à¤° डिकोड करणà¥à¤¯à¤¾à¤¸ अशकà¥à¤¯: %s"
-#: ../libnm-util/crypto_gnutls.c:395
+#: ../libnm-core/crypto_gnutls.c:406 ../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:408
+#: ../libnm-core/crypto_gnutls.c:419 ../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:420
+#: ../libnm-core/crypto_gnutls.c:431 ../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:448
+#: ../libnm-core/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:471
+#: ../libnm-core/crypto_gnutls.c:483 ../libnm-util/crypto_gnutls.c:479
#, c-format
msgid "Couldn't decode PKCS#8 file: %s"
msgstr "PKCS#8 फाइल: %s डिकोड करणे अशकà¥à¤¯"
-#: ../libnm-util/crypto_nss.c:56
+#: ../libnm-core/crypto_nss.c:56 ../libnm-util/crypto_nss.c:56
#, c-format
msgid "Failed to initialize the crypto engine: %d."
msgstr "कà¥à¤°à¤¿à¤ªà¥à¤Ÿà¥‹ इंजीन पà¥à¤°à¤¾à¤°à¤‚भ करणà¥à¤¯à¤¾à¤¸ अपयशी: %d."
-#: ../libnm-util/crypto_nss.c:107
+#: ../libnm-core/crypto_nss.c:107 ../libnm-util/crypto_nss.c:107
#, c-format
msgid "Failed to initialize the MD5 context: %d."
msgstr "MD5 संदरà¥à¤­ पà¥à¤°à¤¾à¤°à¤‚भ करणà¥à¤¯à¤¾à¤¸ अपयशी: %d."
-#: ../libnm-util/crypto_nss.c:175
+#: ../libnm-core/crypto_nss.c:179 ../libnm-util/crypto_nss.c:178
#, c-format
msgid "Invalid IV length (must be at least %d)."
msgstr "अवैध IV लांबी (किमान %d असायला हवे)."
-#: ../libnm-util/crypto_nss.c:186
+#: ../libnm-core/crypto_nss.c:190 ../libnm-util/crypto_nss.c:189
#, c-format
msgid "Failed to initialize the decryption cipher slot."
msgstr "डिकà¥à¤°à¥€à¤ªà¤¶à¤¨ सिफर कà¥à¤·à¥‡à¤¤à¥à¤° पà¥à¤°à¤¾à¤°à¤‚भ करणà¥à¤¯à¤¾à¤¸ अपयशी."
-#: ../libnm-util/crypto_nss.c:196
+#: ../libnm-core/crypto_nss.c:200 ../libnm-util/crypto_nss.c:199
#, c-format
msgid "Failed to set symmetric key for decryption."
msgstr "डिकà¥à¤°à¥€à¤ªà¤¶à¤¨ करीता सम कि निशà¥à¤šà¤¿à¤¤ करणà¥à¤¯à¤¾à¤¸ अपयशी."
-#: ../libnm-util/crypto_nss.c:206
+#: ../libnm-core/crypto_nss.c:210 ../libnm-util/crypto_nss.c:209
#, c-format
msgid "Failed to set IV for decryption."
msgstr "डिकà¥à¤°à¥€à¤ªà¤¶à¤¨ करीता IV निशà¥à¤šà¤¿à¤¤ करणà¥à¤¯à¤¾à¤¸ अपयशी."
-#: ../libnm-util/crypto_nss.c:214
+#: ../libnm-core/crypto_nss.c:218 ../libnm-util/crypto_nss.c:217
#, c-format
msgid "Failed to initialize the decryption context."
msgstr "डिकà¥à¤°à¥€à¤ªà¤¶à¤¨ संदरà¥à¤­ पà¥à¤°à¤¾à¤°à¤‚भ करणà¥à¤¯à¤¾à¤¸ अपयशी."
-#: ../libnm-util/crypto_nss.c:227
+#: ../libnm-core/crypto_nss.c:231 ../libnm-util/crypto_nss.c:230
#, c-format
msgid "Failed to decrypt the private key: %d."
msgstr "वैयकà¥à¤¤à¤¿à¤• कि डिकà¥à¤°à¥€à¤ªà¥à¤Ÿ करणà¥à¤¯à¤¾à¤¸ अपयशी: %d."
-#: ../libnm-util/crypto_nss.c:235
+#: ../libnm-core/crypto_nss.c:239 ../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:246
+#: ../libnm-core/crypto_nss.c:250 ../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:348
+#: ../libnm-core/crypto_nss.c:355 ../libnm-util/crypto_nss.c:353
#, c-format
msgid "Failed to initialize the encryption cipher slot."
msgstr "à¤à¤¨à¤•à¥à¤°à¤¿à¤ªà¥à¤¶à¤¨ सीफर सà¥à¤²à¥‰à¤Ÿ सà¥à¤°à¥‚ करणे अशकà¥à¤¯."
-#: ../libnm-util/crypto_nss.c:356
+#: ../libnm-core/crypto_nss.c:363 ../libnm-util/crypto_nss.c:361
#, c-format
msgid "Failed to set symmetric key for encryption."
msgstr "à¤à¤¨à¤•à¥à¤°à¤¿à¤ªà¥à¤¶à¤¨ करीता सिमेटà¥à¤°à¥€à¤• कि सेट करणà¥à¤¯à¤¾à¤¸ अपयशी."
-#: ../libnm-util/crypto_nss.c:364
+#: ../libnm-core/crypto_nss.c:371 ../libnm-util/crypto_nss.c:369
#, c-format
msgid "Failed to set IV for encryption."
msgstr "à¤à¤¨à¤•à¥à¤°à¤¿à¤ªà¥à¤¶à¤¨à¤¸à¤¾à¤ à¥€ IV सेट करणà¥à¤¯à¤¾à¤¸ अपयशी."
-#: ../libnm-util/crypto_nss.c:372
+#: ../libnm-core/crypto_nss.c:379 ../libnm-util/crypto_nss.c:377
#, c-format
msgid "Failed to initialize the encryption context."
msgstr "à¤à¤¨à¤•à¥à¤°à¤¿à¤ªà¥à¤¶à¤¨ संदरà¥à¤­ पà¥à¤°à¤¾à¤°à¤‚भ करणà¥à¤¯à¤¾à¤¸ अपयशी."
-#: ../libnm-util/crypto_nss.c:380
+#: ../libnm-core/crypto_nss.c:387 ../libnm-util/crypto_nss.c:385
#, c-format
msgid "Failed to encrypt: %d."
msgstr "à¤à¤¨à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ करणà¥à¤¯à¤¾à¤¸ अपयशी: %d."
-#: ../libnm-util/crypto_nss.c:388
+#: ../libnm-core/crypto_nss.c:395 ../libnm-util/crypto_nss.c:393
#, c-format
msgid "Unexpected amount of data after encrypting."
msgstr "à¤à¤¨à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿà¥€à¤‚ग नंतर अनपेकà¥à¤·à¥€à¤¤ डाटाचे पà¥à¤°à¤®à¤¾à¤£."
-#: ../libnm-util/crypto_nss.c:431
+#: ../libnm-core/crypto_nss.c:435 ../libnm-util/crypto_nss.c:433
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "पà¥à¤°à¤®à¤¾à¤£à¤ªà¤¤à¥à¤° डिकोड करणे अशकà¥à¤¯: %d"
-#: ../libnm-util/crypto_nss.c:466
+#: ../libnm-core/crypto_nss.c:471 ../libnm-util/crypto_nss.c:468
#, c-format
msgid "Couldn't convert password to UCS2: %d"
msgstr "परवलीचा शबà¥à¤¦ UCS2 नà¥à¤°à¥‚प रूपांतरन अशकà¥à¤¯: %d"
-#: ../libnm-util/crypto_nss.c:494
+#: ../libnm-core/crypto_nss.c:499 ../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:503
+#: ../libnm-core/crypto_nss.c:508 ../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:512
+#: ../libnm-core/crypto_nss.c:517 ../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:556
+#: ../libnm-core/crypto_nss.c:562 ../libnm-util/crypto_nss.c:558
msgid "Could not generate random data."
msgstr "विनाकà¥à¤°à¤® डाटा निरà¥à¤®à¤¾à¤£ करणे अशकà¥à¤¯."
-#: ../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
+#: ../libnm-core/nm-connection.c:892
+#| msgid "Unable to delete connection: %s"
+msgid "Unexpected failure to verify the connection"
+msgstr "जोडणीची तपासणी करतेवेळी अनेपकà¥à¤·à¤¿à¤¤ अपयश"
+
+#: ../libnm-core/nm-connection.c:923
+#| msgid "Unable to delete connection: %s"
+msgid "Unexpected failure to normalize the connection"
+msgstr "जोडणी नॉरà¥à¤®à¤²à¤¾à¤‡à¤œ करतेवेळी अनपेकà¥à¤·à¤¿à¤¤ अपयश"
+
+#: ../libnm-core/nm-setting-8021x.c:593 ../libnm-util/nm-setting-8021x.c:596
+msgid "CA certificate must be in X.509 format"
+msgstr "CA पà¥à¤°à¤®à¤¾à¤£à¤ªà¤¤à¥à¤°à¤¾à¤šà¥‡ रूपण X.509 असे पाहिजे"
+
+#: ../libnm-core/nm-setting-8021x.c:908 ../libnm-core/nm-setting-8021x.c:1172
+#: ../libnm-core/nm-setting-8021x.c:1492 ../libnm-util/nm-setting-8021x.c:914
+#: ../libnm-util/nm-setting-8021x.c:1177 ../libnm-util/nm-setting-8021x.c:1500
+msgid "invalid certificate format"
+msgstr "अवैध पà¥à¤°à¤®à¤¾à¤£à¤ªà¤¤à¥à¤° रूपण"
+
+#: ../libnm-core/nm-setting-8021x.c:1774 ../libnm-util/nm-setting-8021x.c:1769
+msgid "invalid private key"
+msgstr "अवैध पà¥à¤°à¤¾à¤‡à¤µà¥à¤¹à¥‡à¤Ÿ कि"
+
+#: ../libnm-core/nm-setting-8021x.c:2084 ../libnm-util/nm-setting-8021x.c:2080
+msgid "invalid phase2 private key"
+msgstr "अवैध phase2 पà¥à¤°à¤¾à¤‡à¤µà¥à¤¹à¥‡à¤Ÿ कि"
+
+#: ../libnm-core/nm-setting-8021x.c:2286 ../libnm-core/nm-setting-8021x.c:2303
+#: ../libnm-core/nm-setting-8021x.c:2333 ../libnm-core/nm-setting-8021x.c:2350
+#: ../libnm-core/nm-setting-8021x.c:2391 ../libnm-core/nm-setting-8021x.c:2403
+#: ../libnm-core/nm-setting-8021x.c:2421 ../libnm-core/nm-setting-8021x.c:2433
+#: ../libnm-core/nm-setting-8021x.c:2457 ../libnm-core/nm-setting-8021x.c:2639
+#: ../libnm-core/nm-setting-adsl.c:204
+#: ../libnm-core/nm-setting-bluetooth.c:136
+#: ../libnm-core/nm-setting-bluetooth.c:154
+#: ../libnm-core/nm-setting-cdma.c:157
+#: ../libnm-core/nm-setting-connection.c:761
+#: ../libnm-core/nm-setting-connection.c:777
+#: ../libnm-core/nm-setting-connection.c:807
+#: ../libnm-core/nm-setting-ip4-config.c:897
+#: ../libnm-core/nm-setting-ip6-config.c:815
+#: ../libnm-core/nm-setting-ip6-config.c:879
+#: ../libnm-core/nm-setting-olpc-mesh.c:116
+#: ../libnm-core/nm-setting-pppoe.c:158 ../libnm-core/nm-setting-vpn.c:396
+#: ../libnm-core/nm-setting-wimax.c:133
+#: ../libnm-core/nm-setting-wireless-security.c:878
+#: ../libnm-core/nm-setting-wireless.c:710 ../libnm-core/nm-setting.c:1731
+#: ../libnm-util/nm-setting.c:1279 ../libnm-util/nm-setting.c:1298
+#: ../libnm-util/nm-setting.c:1316 ../libnm-util/nm-setting-8021x.c:2282
+#: ../libnm-util/nm-setting-8021x.c:2299 ../libnm-util/nm-setting-8021x.c:2340
+#: ../libnm-util/nm-setting-8021x.c:2357 ../libnm-util/nm-setting-8021x.c:2409
+#: ../libnm-util/nm-setting-8021x.c:2421 ../libnm-util/nm-setting-8021x.c:2439
+#: ../libnm-util/nm-setting-8021x.c:2451 ../libnm-util/nm-setting-8021x.c:2475
+#: ../libnm-util/nm-setting-8021x.c:2653 ../libnm-util/nm-setting-adsl.c:208
+#: ../libnm-util/nm-setting-bluetooth.c:140
+#: ../libnm-util/nm-setting-bluetooth.c:158
+#: ../libnm-util/nm-setting-cdma.c:161
+#: ../libnm-util/nm-setting-connection.c:767
+#: ../libnm-util/nm-setting-connection.c:783
+#: ../libnm-util/nm-setting-connection.c:844
+#: ../libnm-util/nm-setting-ip4-config.c:828
+#: ../libnm-util/nm-setting-ip6-config.c:809
+#: ../libnm-util/nm-setting-ip6-config.c:873
+#: ../libnm-util/nm-setting-olpc-mesh.c:122
+#: ../libnm-util/nm-setting-pppoe.c:162 ../libnm-util/nm-setting-vpn.c:402
+#: ../libnm-util/nm-setting-wimax.c:137
+#: ../libnm-util/nm-setting-wireless-security.c:891
+#: ../libnm-util/nm-setting-wireless.c:750
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-core/nm-setting-8021x.c:2293 ../libnm-core/nm-setting-8021x.c:2310
+#: ../libnm-core/nm-setting-8021x.c:2340 ../libnm-core/nm-setting-8021x.c:2357
+#: ../libnm-core/nm-setting-8021x.c:2397 ../libnm-core/nm-setting-8021x.c:2409
+#: ../libnm-core/nm-setting-8021x.c:2427 ../libnm-core/nm-setting-8021x.c:2439
+#: ../libnm-core/nm-setting-8021x.c:2464 ../libnm-core/nm-setting-adsl.c:211
+#: ../libnm-core/nm-setting-adsl.c:220 ../libnm-core/nm-setting-cdma.c:173
+#: ../libnm-core/nm-setting-cdma.c:182
+#: ../libnm-core/nm-setting-connection.c:768
+#: ../libnm-core/nm-setting-connection.c:818
+#: ../libnm-core/nm-setting-gsm.c:241 ../libnm-core/nm-setting-gsm.c:298
+#: ../libnm-core/nm-setting-gsm.c:307
+#: ../libnm-core/nm-setting-ip4-config.c:962
+#: ../libnm-core/nm-setting-ip4-config.c:971
+#: ../libnm-core/nm-setting-pppoe.c:165 ../libnm-core/nm-setting-pppoe.c:174
+#: ../libnm-core/nm-setting-vpn.c:405 ../libnm-core/nm-setting-vpn.c:415
+#: ../libnm-core/nm-setting-wimax.c:142
+#: ../libnm-core/nm-setting-wireless-security.c:908
+#: ../libnm-core/nm-setting-wireless-security.c:916
+#: ../libnm-core/nm-setting-wireless-security.c:940
+#: ../libnm-util/nm-setting-8021x.c:2289 ../libnm-util/nm-setting-8021x.c:2306
+#: ../libnm-util/nm-setting-8021x.c:2347 ../libnm-util/nm-setting-8021x.c:2364
+#: ../libnm-util/nm-setting-8021x.c:2415 ../libnm-util/nm-setting-8021x.c:2427
+#: ../libnm-util/nm-setting-8021x.c:2445 ../libnm-util/nm-setting-8021x.c:2457
+#: ../libnm-util/nm-setting-8021x.c:2482 ../libnm-util/nm-setting-adsl.c:215
+#: ../libnm-util/nm-setting-adsl.c:224 ../libnm-util/nm-setting-cdma.c:177
+#: ../libnm-util/nm-setting-cdma.c:186
+#: ../libnm-util/nm-setting-connection.c:774
+#: ../libnm-util/nm-setting-connection.c:851
+#: ../libnm-util/nm-setting-gsm.c:281 ../libnm-util/nm-setting-gsm.c:338
+#: ../libnm-util/nm-setting-gsm.c:347
+#: ../libnm-util/nm-setting-ip4-config.c:893
+#: ../libnm-util/nm-setting-ip4-config.c:902
+#: ../libnm-util/nm-setting-pppoe.c:169 ../libnm-util/nm-setting-pppoe.c:178
+#: ../libnm-util/nm-setting-vpn.c:411 ../libnm-util/nm-setting-vpn.c:421
#: ../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
+#: ../libnm-util/nm-setting-wireless-security.c:921
+#: ../libnm-util/nm-setting-wireless-security.c:929
+#: ../libnm-util/nm-setting-wireless-security.c:953
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
+#: ../libnm-core/nm-setting-8021x.c:2322 ../libnm-core/nm-setting-8021x.c:2369
+#: ../libnm-util/nm-setting-8021x.c:2317 ../libnm-util/nm-setting-8021x.c:2329
+#: ../libnm-util/nm-setting-8021x.c:2375 ../libnm-util/nm-setting-8021x.c:2387
#, 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-core/nm-setting-8021x.c:2614 ../libnm-core/nm-setting-8021x.c:2648
+#: ../libnm-core/nm-setting-bluetooth.c:145
+#: ../libnm-core/nm-setting-infiniband.c:208
+#: ../libnm-core/nm-setting-infiniband.c:223
+#: ../libnm-core/nm-setting-ip4-config.c:953
+#: ../libnm-core/nm-setting-ip6-config.c:870
+#: ../libnm-core/nm-setting-olpc-mesh.c:145
+#: ../libnm-core/nm-setting-wimax.c:151 ../libnm-core/nm-setting-wired.c:636
+#: ../libnm-core/nm-setting-wired.c:646
+#: ../libnm-core/nm-setting-wireless-security.c:959
+#: ../libnm-core/nm-setting-wireless-security.c:968
+#: ../libnm-core/nm-setting-wireless-security.c:976
+#: ../libnm-core/nm-setting-wireless-security.c:984
+#: ../libnm-core/nm-setting-wireless-security.c:992
+#: ../libnm-core/nm-setting-wireless-security.c:1001
+#: ../libnm-core/nm-setting-wireless-security.c:1010
+#: ../libnm-core/nm-setting-wireless-security.c:1019
+#: ../libnm-core/nm-setting-wireless-security.c:1055
+#: ../libnm-core/nm-setting-wireless-security.c:1065
+#: ../libnm-core/nm-setting-wireless.c:771
+#: ../libnm-core/nm-setting-wireless.c:780
+#: ../libnm-core/nm-setting-wireless.c:789 ../libnm-util/nm-setting.c:1289
+#: ../libnm-util/nm-setting.c:1307 ../libnm-util/nm-setting.c:1326
+#: ../libnm-util/nm-setting-8021x.c:2628 ../libnm-util/nm-setting-8021x.c:2662
+#: ../libnm-util/nm-setting-bluetooth.c:149
+#: ../libnm-util/nm-setting-infiniband.c:204
+#: ../libnm-util/nm-setting-infiniband.c:220
+#: ../libnm-util/nm-setting-ip4-config.c:884
+#: ../libnm-util/nm-setting-ip6-config.c:864
+#: ../libnm-util/nm-setting-olpc-mesh.c:150
+#: ../libnm-util/nm-setting-wimax.c:155 ../libnm-util/nm-setting-wired.c:660
+#: ../libnm-util/nm-setting-wired.c:669
#: ../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
+#: ../libnm-util/nm-setting-wireless-security.c:981
+#: ../libnm-util/nm-setting-wireless-security.c:989
+#: ../libnm-util/nm-setting-wireless-security.c:997
+#: ../libnm-util/nm-setting-wireless-security.c:1005
+#: ../libnm-util/nm-setting-wireless-security.c:1014
+#: ../libnm-util/nm-setting-wireless-security.c:1023
+#: ../libnm-util/nm-setting-wireless-security.c:1032
+#: ../libnm-util/nm-setting-wireless-security.c:1068
+#: ../libnm-util/nm-setting-wireless-security.c:1078
+#: ../libnm-util/nm-setting-wireless.c:810
+#: ../libnm-util/nm-setting-wireless.c:819
+#: ../libnm-util/nm-setting-wireless.c:828
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
+#: ../libnm-core/nm-setting-8021x.c:2673 ../libnm-core/nm-setting-8021x.c:2683
+#: ../libnm-core/nm-setting-8021x.c:2693 ../libnm-core/nm-setting-8021x.c:2703
+#: ../libnm-core/nm-setting-8021x.c:2713 ../libnm-core/nm-setting-adsl.c:232
+#: ../libnm-core/nm-setting-adsl.c:244
+#: ../libnm-core/nm-setting-bluetooth.c:162
+#: ../libnm-core/nm-setting-wireless-security.c:887
+#: ../libnm-util/nm-setting-8021x.c:2687 ../libnm-util/nm-setting-8021x.c:2697
+#: ../libnm-util/nm-setting-8021x.c:2707 ../libnm-util/nm-setting-8021x.c:2717
+#: ../libnm-util/nm-setting-8021x.c:2727 ../libnm-util/nm-setting-adsl.c:236
+#: ../libnm-util/nm-setting-adsl.c:248
+#: ../libnm-util/nm-setting-bluetooth.c:166
+#: ../libnm-util/nm-setting-wireless-security.c:900
#, c-format
msgid "'%s' is not a valid value for the property"
msgstr "गà¥à¤£à¤§à¤°à¥à¤®à¤•à¤°à¥€à¤¤à¤¾ '%s' वैध मूलà¥à¤¯ नाही"
-#: ../libnm-util/nm-setting-bluetooth.c:188
+#: ../libnm-core/nm-setting-bluetooth.c:180
+#: ../libnm-util/nm-setting-bluetooth.c:184
#, c-format
msgid "requires '%s' or '%s' setting"
msgstr "'%s' किंवा '%s' सेटिंग आवशà¥à¤¯à¤•"
-#: ../libnm-util/nm-setting-bond.c:518
+#: ../libnm-core/nm-setting-bond.c:473 ../libnm-util/nm-setting-bond.c:498
#, c-format
msgid "invalid option '%s' or its value '%s'"
msgstr "अवैध परà¥à¤¯à¤¾à¤¯ '%s' किंवा मूलà¥à¤¯ '%s'"
-#: ../libnm-util/nm-setting-bond.c:537
+#: ../libnm-core/nm-setting-bond.c:492 ../libnm-util/nm-setting-bond.c:517
#, c-format
msgid "only one of '%s' and '%s' can be set"
msgstr "'%s' पैकी à¤à¤• व '%s' ठरवणे शकà¥à¤¯"
-#: ../libnm-util/nm-setting-bond.c:548
+#: ../libnm-core/nm-setting-bond.c:503 ../libnm-util/nm-setting-bond.c:528
#, c-format
msgid "mandatory option '%s' is missing"
msgstr "अनिवारà¥à¤¯ परà¥à¤¯à¤¾à¤¯ '%s' आढळले नाही"
-#: ../libnm-util/nm-setting-bond.c:557
+#: ../libnm-core/nm-setting-bond.c:512 ../libnm-util/nm-setting-bond.c:537
#, c-format
msgid "'%s' is not a valid value for '%s'"
msgstr "'%s' हे '%s' करीता वैध मूलà¥à¤¯ नाही"
-#: ../libnm-util/nm-setting-bond.c:570
+#: ../libnm-core/nm-setting-bond.c:525 ../libnm-util/nm-setting-bond.c:550
#, c-format
msgid "'%s=%s' is incompatible with '%s > 0'"
msgstr "'%s=%s' हे '%s > 0' सह असहतà¥à¤µ आहे"
-#: ../libnm-util/nm-setting-bond.c:583
+#: ../libnm-core/nm-setting-bond.c:538 ../libnm-util/nm-setting-bond.c:563
#, 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
+#: ../libnm-core/nm-setting-bond.c:548 ../libnm-util/nm-setting-bond.c:573
#, 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
+#: ../libnm-core/nm-setting-bond.c:561 ../libnm-util/nm-setting-bond.c:586
#, 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
+#: ../libnm-core/nm-setting-bond.c:574 ../libnm-core/nm-setting-bond.c:583
+#: ../libnm-core/nm-setting-bond.c:603 ../libnm-core/nm-setting-bond.c:639
+#: ../libnm-util/nm-setting-bond.c:599 ../libnm-util/nm-setting-bond.c:608
+#: ../libnm-util/nm-setting-bond.c:628 ../libnm-util/nm-setting-bond.c:664
#, c-format
msgid "'%s' option requires '%s' option to be set"
msgstr "'%s' परà¥à¤¯à¤¾à¤¯à¤²à¤¾ '%s' परà¥à¤¯à¤¾à¤¯ सेट करणे आवशà¥à¤¯à¤• आहे"
-#: ../libnm-util/nm-setting-bond.c:659
+#: ../libnm-core/nm-setting-bond.c:614 ../libnm-util/nm-setting-bond.c:639
#, c-format
msgid "'%s' option is empty"
msgstr "'%s' परà¥à¤¯à¤¾à¤¯ रिकामे आहे"
-#: ../libnm-util/nm-setting-bond.c:671
+#: ../libnm-core/nm-setting-bond.c:626 ../libnm-util/nm-setting-bond.c:651
#, 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
+#: ../libnm-core/nm-setting-bridge-port.c:138
+#: ../libnm-core/nm-setting-bridge-port.c:150
+#: ../libnm-util/nm-setting-bridge-port.c:153
+#: ../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
+#: ../libnm-core/nm-setting-bridge-port.c:175
+#: ../libnm-core/nm-setting-team-port.c:118
+#, c-format
+msgid ""
+"A connection with a '%s' setting must have the slave-type set to '%s'. "
+"Instead it is '%s'"
+msgstr ""
+"'%s' सेटिंगसह जोडणीकडे सà¥à¤²à¥‡à¤µà¥à¤¹-पà¥à¤°à¤•à¤¾à¤° '%s' करिता सेट पाहिजे. तà¥à¤¯à¤¾à¤à¤µà¤œà¥€ '%s' आहे"
+
+#: ../libnm-core/nm-setting-bridge.c:222 ../libnm-util/nm-setting-bridge.c:268
#, c-format
msgid "value '%d' is out of range <%d-%d>"
msgstr "मूलà¥à¤¯ '%d' वà¥à¤¯à¤¾à¤ªà¥à¤¤à¤¿ <%d-%d> चà¥à¤¯à¤¾ बाहेर आहे"
-#: ../libnm-util/nm-setting-cdma.c:170
+#: ../libnm-core/nm-setting-bridge.c:239 ../libnm-core/nm-setting-wired.c:611
+#: ../libnm-core/nm-setting-wired.c:670 ../libnm-util/nm-setting-bridge.c:285
+#: ../libnm-util/nm-setting-wired.c:635 ../libnm-util/nm-setting-wired.c:693
+msgid "is not a valid MAC address"
+msgstr "वैध MAC पतà¥à¤¤à¤¾ नाही"
+
+#: ../libnm-core/nm-setting-cdma.c:164 ../libnm-util/nm-setting-cdma.c:168
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
+#: ../libnm-core/nm-setting-connection.c:740
+#: ../libnm-util/nm-setting-connection.c:861
#, 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-core/nm-setting-connection.c:828
+#, c-format
+#| msgid "index '%s' is not valid"
+msgid "connection type '%s' is not valid"
+msgstr "जोडणी पà¥à¤°à¤•à¤¾à¤° '%s' वैध नाही"
+
+#: ../libnm-core/nm-setting-connection.c:838
+#, c-format
+#| msgid "Error: 'bt-type': '%s' is not a valid bluetooth type.\n"
+msgid "connection type '%s' is not a valid base type"
+msgstr "जोडणी पà¥à¤°à¤•à¤¾à¤° '%s' वैध बेस पà¥à¤°à¤•à¤¾à¤° नाही"
+
+#: ../libnm-core/nm-setting-connection.c:873
+#: ../libnm-util/nm-setting-connection.c:876
+#, c-format
+msgid "Unknown slave type '%s'"
+msgstr "अपरिचीत सà¥à¤²à¥‡à¤µà¥à¤¹ पà¥à¤°à¤•à¤¾à¤° '%s'"
-#: ../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-core/nm-setting-connection.c:883
+#: ../libnm-util/nm-setting-connection.c:886
+msgid "Slave connections need a valid '"
+msgstr "सà¥à¤²à¥‡à¤µà¥à¤¹ जोडणà¥à¤¯à¤¾à¤‚ना वैध ' पाहिजे"
-#: ../libnm-util/nm-setting-dcb.c:595
-#| msgid "flags are invalid"
+#: ../libnm-core/nm-setting-connection.c:904
+#: ../libnm-util/nm-setting-connection.c:895
+msgid "Cannot set '"
+msgstr "' सेट करणे अशकà¥à¤¯"
+
+#: ../libnm-core/nm-setting-connection.c:917
+#, c-format
+#| msgid "this property cannot be empty for '%s=%s'"
+msgid "property type should be set to '%s'"
+msgstr "गà¥à¤£à¤§à¤°à¥à¤® पà¥à¤°à¤•à¤¾à¤° '%s' करिता सेट केले पाहिजे"
+
+#: ../libnm-core/nm-setting-connection.c:932
+#, c-format
+#| msgid "requires presence of '%s' setting in the connection"
+msgid "slave-type '%s' requires a '%s' setting in the connection"
+msgstr "slave-type '%s' ला जोडणी अंतरà¥à¤—त '%s' सेटिंग आवशà¥à¤¯à¤•"
+
+#: ../libnm-core/nm-setting-connection.c:942
+#, c-format
+#| msgid "Active connection path: %s\n"
+msgid "Detect a slave connection with '"
+msgstr "' सह सà¥à¤²à¥‡à¤µà¥à¤¹ जोडणी ओळखा"
+
+#: ../libnm-core/nm-setting-dcb.c:538 ../libnm-util/nm-setting-dcb.c:593
msgid "flags invalid"
msgstr "फà¥à¤²à¥…गà¥à¤œ अवैध"
-#: ../libnm-util/nm-setting-dcb.c:604
-#| msgid "flags are invalid"
+#: ../libnm-core/nm-setting-dcb.c:547 ../libnm-util/nm-setting-dcb.c:602
msgid "flags invalid - disabled"
msgstr "फà¥à¤²à¥…गà¥à¤œ अवैध - बंद केले"
-#: ../libnm-util/nm-setting-dcb.c:630 ../libnm-util/nm-setting-dcb.c:679
-#| msgid "property is invalid"
+#: ../libnm-core/nm-setting-dcb.c:573 ../libnm-core/nm-setting-dcb.c:622
+#: ../libnm-util/nm-setting-dcb.c:628 ../libnm-util/nm-setting-dcb.c:677
msgid "property invalid (not enabled)"
msgstr "गà¥à¤£à¤§à¤°à¥à¤® अवैध (सà¥à¤°à¥‚ केले नाही)"
-#: ../libnm-util/nm-setting-dcb.c:639
-#| msgid "flags are invalid"
+#: ../libnm-core/nm-setting-dcb.c:582 ../libnm-util/nm-setting-dcb.c:637
msgid "element invalid"
msgstr "à¤à¤²à¤¿à¤®à¥‡à¤‚ट अवैध"
-#: ../libnm-util/nm-setting-dcb.c:654
+#: ../libnm-core/nm-setting-dcb.c:597 ../libnm-util/nm-setting-dcb.c:652
msgid "sum not 100%"
msgstr "बेरीज 100% नाही"
-#: ../libnm-util/nm-setting-dcb.c:688 ../libnm-util/nm-setting-dcb.c:720
-#| msgid "property is invalid"
+#: ../libnm-core/nm-setting-dcb.c:631 ../libnm-core/nm-setting-dcb.c:663
+#: ../libnm-util/nm-setting-dcb.c:686 ../libnm-util/nm-setting-dcb.c:718
msgid "property invalid"
msgstr "गà¥à¤£à¤§à¤°à¥à¤® अवैध"
-#: ../libnm-util/nm-setting-dcb.c:710
-#| msgid "property is missing"
+#: ../libnm-core/nm-setting-dcb.c:653 ../libnm-util/nm-setting-dcb.c:708
msgid "property missing"
msgstr "गà¥à¤£à¤§à¤°à¥à¤® आढळले नाही"
-#: ../libnm-util/nm-setting-gsm.c:297
+#: ../libnm-core/nm-setting-gsm.c:254 ../libnm-util/nm-setting-gsm.c:294
#, c-format
msgid "property value '%s' is empty or too long (>64)"
msgstr "गà¥à¤£à¤§à¤°à¥à¤® मूलà¥à¤¯ '%s' रिकामे आहे किंवा खूप लांब आहे (>64)"
-#: ../libnm-util/nm-setting-gsm.c:329
+#: ../libnm-core/nm-setting-gsm.c:286 ../libnm-util/nm-setting-gsm.c:326
#, c-format
msgid "'%s' contains invalid char(s) (use [A-Za-z._-])"
msgstr "'%s' मधà¥à¤¯à¥‡ अवैध अकà¥à¤·à¤°à¥‡ आहेत ([A-Za-z._-] यांचा वापर करा)"
-#: ../libnm-util/nm-setting-gsm.c:364
+#: ../libnm-core/nm-setting-gsm.c:321 ../libnm-util/nm-setting-gsm.c:361
#, c-format
msgid "'%s' length is invalid (should be 5 or 6 digits)"
msgstr "'%s' लांबी अवैध आहे (5 किंवा 6 अंकीय पाहिजे)"
-#: ../libnm-util/nm-setting-infiniband.c:228
+#: ../libnm-core/nm-setting-infiniband.c:233
+#: ../libnm-util/nm-setting-infiniband.c:230
msgid "not a valid interface name"
msgstr "वैध इंटरफेस नाव नाही"
-#: ../libnm-util/nm-setting-infiniband.c:236
+#: ../libnm-core/nm-setting-infiniband.c:241
+#: ../libnm-util/nm-setting-infiniband.c:238
msgid "Must specify a P_Key if specifying parent"
msgstr "पॅरेंट निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ करत असलà¥à¤¯à¤¾à¤¸ P_Key निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ करा"
-#: ../libnm-util/nm-setting-infiniband.c:246
+#: ../libnm-core/nm-setting-infiniband.c:251
+#: ../libnm-util/nm-setting-infiniband.c:248
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
+#: ../libnm-core/nm-setting-infiniband.c:287
+#: ../libnm-util/nm-setting-infiniband.c:284
+#, c-format
+msgid ""
+"interface name of software infiniband device must be '%s' or unset (instead "
+"it is '%s')"
+msgstr ""
+"सॉफà¥à¤Ÿà¤µà¥‡à¤…र इनफिनिबà¤à¤¡ साधनाचे संवाद नाव '%s' पाहिजे किंवा सेट केले नसावे "
+"(तà¥à¤¯à¤¾à¤à¤µà¤œà¥€ '%s' "
+"पाहिजे)"
+
+#: ../libnm-core/nm-setting-infiniband.c:302
+#, c-format
+msgid "mtu for transport mode '%s' can be at most %d but it is %d"
+msgstr "टà¥à¤°à¤¾à¤‚सà¥à¤ªà¥‹à¤°à¥à¤Ÿ मोड '%s' करिता mtu कमाल %d असू शकते परंतॠ%d आढळले"
+
+#: ../libnm-core/nm-setting-ip4-config.c:907
+#: ../libnm-core/nm-setting-ip6-config.c:825
+#: ../libnm-util/nm-setting-ip4-config.c:838
+#: ../libnm-util/nm-setting-ip6-config.c:819
+#, c-format
+msgid "this property cannot be empty for '%s=%s'"
+msgstr "हे गà¥à¤£à¤§à¤°à¥à¤® '%s=%s' करिता रिकामे असू शकत नाही"
+
+#: ../libnm-core/nm-setting-ip4-config.c:919
+#: ../libnm-core/nm-setting-ip4-config.c:929
+#: ../libnm-core/nm-setting-ip4-config.c:941
+#: ../libnm-core/nm-setting-ip6-config.c:838
+#: ../libnm-core/nm-setting-ip6-config.c:848
+#: ../libnm-core/nm-setting-ip6-config.c:858
+#: ../libnm-util/nm-setting-ip4-config.c:850
+#: ../libnm-util/nm-setting-ip4-config.c:860
+#: ../libnm-util/nm-setting-ip4-config.c:872
+#: ../libnm-util/nm-setting-ip6-config.c:832
+#: ../libnm-util/nm-setting-ip6-config.c:842
+#: ../libnm-util/nm-setting-ip6-config.c:852
#, c-format
msgid "this property is not allowed for '%s=%s'"
msgstr "हे गà¥à¤£à¤§à¤°à¥à¤® '%s=%s' करीता सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ नाही"
-#: ../libnm-util/nm-setting-ip4-config.c:789
+#: ../libnm-core/nm-setting-ip4-config.c:988
+#: ../libnm-util/nm-setting-ip4-config.c:916
#, c-format
msgid "%d. IPv4 address is invalid"
msgstr "%d. IPv4 पतà¥à¤¤à¤¾ अवैध आहे"
-#: ../libnm-util/nm-setting-ip4-config.c:799
+#: ../libnm-core/nm-setting-ip4-config.c:998
+#: ../libnm-util/nm-setting-ip4-config.c:926
#, c-format
msgid "%d. IPv4 address has invalid prefix"
msgstr "%d. IPv4 पतà¥à¤¤à¤¾à¤®à¤§à¥à¤¯à¥‡ अवैध पà¥à¤°à¤¿à¤«à¤¿à¤•à¥à¤¸ आहे"
-#: ../libnm-util/nm-setting-ip4-config.c:815
+#: ../libnm-core/nm-setting-ip4-config.c:1008
+#, c-format
+msgid "%d. IPv4 address has invalid label '%s'"
+msgstr "%d. IPv4 पतà¥à¤¤à¥à¤¯à¤¾à¤®à¤§à¥à¤¯à¥‡ अवैध लेबल '%s' आढळले"
+
+#: ../libnm-core/nm-setting-ip4-config.c:1019
+#, c-format
+msgid "IPv4 address / label count mismatch (%d vs %d)"
+msgstr "IPv4 पतà¥à¤¤à¤¾ किंवा लेबल पà¥à¤°à¤®à¤¾à¤£à¤¾à¤¤ जà¥à¤³à¤£à¥€ आढळली नाही (%d विरूदà¥à¤§ %d)"
+
+#: ../libnm-core/nm-setting-ip4-config.c:1035
+#: ../libnm-util/nm-setting-ip4-config.c:942
#, c-format
msgid "%d. route is invalid"
msgstr "%d. राऊट अवैध आहे"
-#: ../libnm-util/nm-setting-ip4-config.c:825
+#: ../libnm-core/nm-setting-ip4-config.c:1045
+#: ../libnm-util/nm-setting-ip4-config.c:952
#, c-format
msgid "%d. route has invalid prefix"
msgstr "%d. राऊटकडे अवैध पà¥à¤°à¤¿à¤«à¤¿à¤•à¥à¤¸ आहे"
-#: ../libnm-util/nm-setting-ip6-config.c:708
+#: ../libnm-core/nm-setting-ip4-config.c:1061
+#: ../libnm-core/nm-setting-ip6-config.c:892
+#, c-format
+#| msgid "%d. IPv4 address is invalid"
+msgid "%d. DNS server address is invalid"
+msgstr "%d. DNS सरà¥à¤µà¥à¤¹à¤° पतà¥à¤¤à¤¾ अवैध आहे"
+
+#: ../libnm-core/nm-setting-ip6-config.c:837
+#: ../libnm-util/nm-setting-ip6-config.c:831
#, 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
+#: ../libnm-core/nm-setting-olpc-mesh.c:126
+#: ../libnm-core/nm-setting-wireless.c:720
+#: ../libnm-util/nm-setting-olpc-mesh.c:131
+#: ../libnm-util/nm-setting-wireless.c:759
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
+#: ../libnm-core/nm-setting-olpc-mesh.c:135
+#: ../libnm-core/nm-setting-wireless.c:760
+#: ../libnm-util/nm-setting-olpc-mesh.c:140
+#: ../libnm-util/nm-setting-wireless.c:799
#, c-format
msgid "'%d' is not a valid channel"
msgstr "'%d' वैध वाहिनी नाही"
-#: ../libnm-util/nm-setting-ppp.c:390
+#: ../libnm-core/nm-setting-ppp.c:383 ../libnm-util/nm-setting-ppp.c:387
#, c-format
msgid "'%d' is out of valid range <128-16384>"
msgstr "'%d' वैध वà¥à¤¯à¤¾à¤ªà¥à¤¤à¤¿ <128-16384> चà¥à¤¯à¤¾ बाहेर आहे"
-#: ../libnm-util/nm-setting-ppp.c:403
+#: ../libnm-core/nm-setting-ppp.c:396 ../libnm-util/nm-setting-ppp.c:400
#, c-format
msgid "setting this property requires non-zero '%s' property"
msgstr "या गà¥à¤£à¤§à¤°à¥à¤®à¤¾à¤²à¤¾ ठरवणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ नॉन-à¤à¤¿à¤°à¥‹ '%s' गà¥à¤£à¤§à¤°à¥à¤® आवशà¥à¤¯à¤• आहे"
-#: ../libnm-util/nm-setting-vlan.c:497
+#: ../libnm-core/nm-setting-vlan.c:528 ../libnm-util/nm-setting-vlan.c:554
#, c-format
msgid "'%s' value doesn't match '%s=%s'"
msgstr "'%s' मूलà¥à¤¯ '%s=%s' सह जà¥à¤³à¤¤ नाही"
-#: ../libnm-util/nm-setting-vlan.c:508
+#: ../libnm-core/nm-setting-vlan.c:539 ../libnm-util/nm-setting-vlan.c:565
#, c-format
msgid "'%s' is neither an UUID nor an interface name"
msgstr "'%s' UUID किंवा इंटरफेस नाव नाही"
-#: ../libnm-util/nm-setting-vlan.c:521
+#: ../libnm-core/nm-setting-vlan.c:553 ../libnm-util/nm-setting-vlan.c:578
#, c-format
msgid "property is not specified and neither is '%s:%s'"
msgstr "गà¥à¤£à¤§à¤°à¥à¤® निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ नाही व '%s:%s' नाही"
-#: ../libnm-util/nm-setting-vlan.c:534
+#: ../libnm-core/nm-setting-vlan.c:566 ../libnm-util/nm-setting-vlan.c:591
msgid "flags are invalid"
msgstr "फà¥à¤²à¥…गà¥à¤¸ अवैध आहेत"
-#: ../libnm-util/nm-setting-wired.c:562
+#: ../libnm-core/nm-setting-wired.c:591 ../libnm-util/nm-setting-wired.c:615
#, c-format
-msgid "'%s' is not a valid ethernet port value"
+msgid "'%s' is not a valid Ethernet port value"
msgstr "'%s' वैध इथरनेट पोरà¥à¤Ÿ मूलà¥à¤¯ नाही"
-#: ../libnm-util/nm-setting-wired.c:572
+#: ../libnm-core/nm-setting-wired.c:601 ../libnm-util/nm-setting-wired.c:625
#, 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
+#: ../libnm-core/nm-setting-wired.c:659 ../libnm-util/nm-setting-wired.c:682
#, c-format
msgid "invalid '%s' or its value '%s'"
msgstr "अवैध '%s' किंवा तà¥à¤¯à¤¾à¤šà¥‡ मूलà¥à¤¯ '%s'"
-#: ../libnm-util/nm-setting-wireless-security.c:816
+#: ../libnm-core/nm-setting-wireless-security.c:899
+#: ../libnm-util/nm-setting-wireless-security.c:912
#, c-format
msgid "'%s' security requires '%s=%s'"
msgstr "'%s' सà¥à¤°à¤•à¥à¤·à¤¾à¤•à¤°à¤¿à¤¤à¤¾ '%s=%s' आवशà¥à¤¯à¤•"
-#: ../libnm-util/nm-setting-wireless-security.c:845
+#: ../libnm-core/nm-setting-wireless-security.c:928
+#: ../libnm-util/nm-setting-wireless-security.c:941
#, c-format
msgid "'%s' security requires '%s' setting presence"
msgstr "'%s' सेकà¥à¤¯à¥à¤°à¤¿à¤Ÿà¤¿à¤²à¤¾ '%s' सेटिंग आवशà¥à¤¯à¤• आहे"
-#: ../libnm-util/nm-setting-wireless-security.c:866
+#: ../libnm-core/nm-setting-wireless-security.c:949
+#: ../libnm-util/nm-setting-wireless-security.c:962
#, c-format
msgid "'%d' value is out of range <0-3>"
msgstr "'%d' मूलà¥à¤¯ <0-3> वà¥à¤¯à¤¾à¤ªà¥à¤¤à¤¿à¤šà¥à¤¯à¤¾ बाहेर आहे"
-#: ../libnm-util/nm-setting-wireless-security.c:963
+#: ../libnm-core/nm-setting-wireless-security.c:1046
+#: ../libnm-util/nm-setting-wireless-security.c:1059
#, c-format
msgid "'%s' connections require '%s' in this property"
msgstr "'%s' जोडणींना या गà¥à¤£à¤§à¤°à¥à¤® अंतरà¥à¤—त '%s' आवशà¥à¤¯à¤• आहे"
-#: ../libnm-util/nm-setting-wireless-security.c:993
+#: ../libnm-core/nm-setting-wireless-security.c:1076
+#: ../libnm-util/nm-setting-wireless-security.c:1089
#, c-format
msgid "'%s' can only be used with '%s=%s' (WEP)"
msgstr "'%s' यास फकà¥à¤¤ '%s=%s' (WEP) सह वापरणे शकà¥à¤¯ आहे"
-#: ../libnm-util/nm-setting-wireless.c:715
+#: ../libnm-core/nm-setting-wireless.c:729
+#: ../libnm-util/nm-setting-wireless.c:768
#, c-format
msgid "'%s' is not a valid Wi-Fi mode"
msgstr "'%s' वैध वाय-फाय मोड नाही"
-#: ../libnm-util/nm-setting-wireless.c:725
+#: ../libnm-core/nm-setting-wireless.c:739
+#: ../libnm-util/nm-setting-wireless.c:778
#, c-format
msgid "'%s' is not a valid band"
msgstr "'%s' वैध बà¤à¤¡ नाही"
-#: ../libnm-util/nm-setting-wireless.c:735
+#: ../libnm-core/nm-setting-wireless.c:749
+#: ../libnm-util/nm-setting-wireless.c:788
#, c-format
msgid "requires setting '%s' property"
msgstr "'%s' गà¥à¤£à¤§à¤°à¥à¤® सेट करणे आवशà¥à¤¯à¤• आहे"
+#: ../libnm-core/nm-setting.c:1710
+#, c-format
+#| msgid "requires '%s' or '%s' setting"
+msgid "Missing '%s' setting"
+msgstr "न आढळलेले '%s' सेटिंग"
+
+#: ../libnm-glib/nm-device.c:1792
+msgid "Bluetooth"
+msgstr "बà¥à¤²à¥à¤Ÿà¥à¤¥"
+
+#: ../libnm-glib/nm-device.c:1810
+msgid "ADSL"
+msgstr "ADSL"
+
+#: ../libnm-glib/nm-device.c:1838
+msgid "Wired"
+msgstr "वायरà¥à¤¡"
+
+#: ../libnm-glib/nm-device.c:1869
+msgid "PCI"
+msgstr "PCI"
+
+#: ../libnm-glib/nm-device.c:1871
+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:1967 ../libnm-glib/nm-device.c:1986
+#, c-format
+msgctxt "long device name"
+msgid "%s %s"
+msgstr "%s %s"
+
+#: ../libnm-glib/nm-remote-connection.c:149
+msgid "Disconnected by D-Bus"
+msgstr "D-Bus तरà¥à¤«à¥‡ खंडीत केले"
+
+#: ../libnm/nm-object.c:174 ../libnm/nm-object.c:317
+msgid "Caller did not specify D-Bus path for object"
+msgstr "ऑबà¥à¤œà¥‡à¤•à¥à¤Ÿà¤•à¤°à¤¿à¤¤à¤¾ कॉलरने D-Bus मारà¥à¤— निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ केले नाही"
+
+#: ../libnm/nm-vpn-plugin.c:726
+msgid "No service name specified"
+msgstr "सरà¥à¤µà¥à¤¹à¤¿à¤¸ नाव निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ नाही"
+
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:1
msgid "Enable or disable system networking"
msgstr "पà¥à¤°à¤£à¤¾à¤²à¥€ नेटवरà¥à¤•à¤¿à¤‚ग सà¥à¤°à¥‚ किंवा बंद करा"
@@ -6008,6 +7143,28 @@ msgstr "परà¥à¤¸à¤¿à¤¸à¥à¤Ÿà¤‚ट पà¥à¤°à¤£à¤¾à¤²à¥€ यजमाननà
msgid "System policy prevents modification of the persistent system hostname"
msgstr "पà¥à¤°à¤£à¤¾à¤²à¥€ करार परà¥à¤¸à¤¿à¤¸à¥à¤Ÿà¤‚ट पà¥à¤°à¤£à¤¾à¤²à¥€ यजमाननावाचे संपादन रोखत आहे"
+#. Translators: the first %s is a prefix for the connection id, such
+#. * as "Wired Connection" or "VPN Connection". The %d is a number
+#. * that is combined with the first argument to create a unique
+#. * connection id.
+#: ../src/NetworkManagerUtils.c:953
+#, c-format
+#| msgctxt "long device name"
+#| msgid "%s %s"
+msgctxt "connection id fallback"
+msgid "%s %d"
+msgstr "%s %d"
+
+#: ../src/main.c:130
+#, c-format
+msgid "Failed to set signal mask: %d"
+msgstr "सिगà¥à¤¨à¤² मासà¥à¤•: %d सेट करणà¥à¤¯à¤¾à¤¸ अपयशी"
+
+#: ../src/main.c:139
+#, c-format
+msgid "Failed to create signal handling thread: %d"
+msgstr "सिगà¥à¤¨à¤² हाताळणी थà¥à¤°à¥‡à¤¡: %d निरà¥à¤®à¤¾à¤£ करणà¥à¤¯à¤¾à¤¸ अपयशी"
+
#: ../src/main.c:154
#, c-format
msgid "Opening %s failed: %s\n"
@@ -6028,59 +7185,59 @@ msgstr "%s बंद करणà¥à¤¯à¤¾à¤¸ अपयशी: %s\n"
msgid "NetworkManager is already running (pid %ld)\n"
msgstr "NetworkManager आधिपासूनच (pid %ld) चालवत आहे\n"
-#: ../src/main.c:329
+#: ../src/main.c:361
msgid "Print NetworkManager version and exit"
msgstr "NetworkManager आवृतà¥à¤¤à¥€à¤šà¥€ छपाई करा व बाहेर पडा"
-#: ../src/main.c:330
+#: ../src/main.c:362
msgid "Don't become a daemon"
msgstr "डिमन बनू नका"
-#: ../src/main.c:331
+#: ../src/main.c:363
msgid "Don't become a daemon, and log to stderr"
msgstr "डिमन बनू नका, व stderr करिता लॉग करा"
-#: ../src/main.c:332
+#: ../src/main.c:364
#, c-format
msgid "Log level: one of [%s]"
msgstr "लॉग सà¥à¤¤à¤°: [%s] पैकी à¤à¤•"
-#: ../src/main.c:334
+#: ../src/main.c:366
#, c-format
msgid "Log domains separated by ',': any combination of [%s]"
msgstr "',' दà¥à¤µà¤¾à¤°à¥‡ विभाजीत लॉग डोमेनà¥à¤¸: [%s] पैकी कोणतिही जोडणी"
-#: ../src/main.c:336
+#: ../src/main.c:368
msgid "Make all warnings fatal"
msgstr "सरà¥à¤µ सावधानता धोकादायक करा"
-#: ../src/main.c:337
+#: ../src/main.c:369
msgid "Specify the location of a PID file"
msgstr "PID फाइलचे ठिकाण निरà¥à¤¦à¥‡à¤¶à¥€à¤¤ करा"
-#: ../src/main.c:337
+#: ../src/main.c:369
msgid "filename"
msgstr "फाइलनाव"
-#: ../src/main.c:338
+#: ../src/main.c:370
msgid "State file location"
msgstr "फाइल ठिकाण ठरवा"
-#: ../src/main.c:338
+#: ../src/main.c:370
msgid "/path/to/state.file"
msgstr "/path/to/state.file"
-#: ../src/main.c:364
+#: ../src/main.c:396
#, c-format
msgid "GModules are not supported on your platform!\n"
msgstr "GModules तà¥à¤®à¤šà¥à¤¯à¤¾ पà¥à¤²à¥…फॉरà¥à¤®à¤µà¤° समरà¥à¤¥à¥€à¤¤ नाही!\n"
-#: ../src/main.c:369
+#: ../src/main.c:401
#, c-format
msgid "You must be root to run NetworkManager!\n"
msgstr "NetworkManager सà¥à¤°à¥‚ करणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ रूट असणे आवशà¥à¤¯à¤•!\n"
-#: ../src/main.c:392
+#: ../src/main.c:424
msgid ""
"NetworkManager monitors all network connections and automatically\n"
"chooses the best connection to use. It also allows the user to\n"
@@ -6093,53 +7250,41 @@ msgstr ""
"परवानगी देते जà¥à¤¯à¤¾à¤¸à¤¹ संगणकातील वायरलेस\n"
"कारà¥à¤¡à¤¸à¥ संपरà¥à¤• साधतात."
-#: ../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:412
+#: ../src/main.c:430 ../src/main.c:446
#, c-format
msgid "%s. Please use --help to see a list of valid options.\n"
msgstr "%s. वैध परà¥à¤¯à¤¾à¤¯à¤šà¥€ सूची पहाणà¥à¤¯à¤¾à¤•à¤°à¥€à¤¤à¤¾ कृपया --help वापरा.\n"
-#: ../src/main.c:417
+#: ../src/main.c:451
#, c-format
msgid "Ignoring unrecognized log domain(s) '%s' passed on command line.\n"
msgstr "आदेश ओळवरील पà¥à¤°à¤µà¤²à¥‡à¤²à¥à¤¯à¤¾ अपरिचीत लॉग डोमेनà¥à¤¸ '%s' कडे दà¥à¤°à¥à¤²à¤•à¥à¤· करत आहे\n"
-#: ../src/main.c:468
+#: ../src/main.c:502
#, c-format
msgid "Failed to read configuration: (%d) %s\n"
msgstr "संरचना: (%d) %s वाचणà¥à¤¯à¤¾à¤¸ अशकà¥à¤¯\n"
-#: ../src/main.c:482
+#: ../src/main.c:516
#, c-format
-#| msgid "Error: connection verification failed: %s\n"
msgid "Error in configuration file: %s.\n"
msgstr "संरचना फाइल: %s मधà¥à¤¯à¥‡ तà¥à¤°à¥à¤Ÿà¥€.\n"
-#: ../src/main.c:487
+#: ../src/main.c:521
#, c-format
msgid "Ignoring unrecognized log domain(s) '%s' from config files.\n"
msgstr "config फाइलà¥à¤¸à¤ªà¤¾à¤¸à¥‚न अपरिचीत लॉग डोमेनà¥à¤¸ '%s'.\n"
-#: ../src/main.c:495
+#: ../src/main.c:529
#, c-format
msgid "State file %s parsing failed: (%d) %s\n"
msgstr "सà¥à¤Ÿà¥‡à¤Ÿ फाइल %s वाचणà¥à¤¯à¤¾à¤¸ अपयशी: (%d) %s\n"
-#: ../src/main.c:508
+#: ../src/main.c:542
#, c-format
msgid "Could not daemonize: %s [error %u]\n"
msgstr "डिमनाइज करणे अशकà¥à¤¯: %s [error %u]\n"
-#: ../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"
@@ -6153,1086 +7298,412 @@ msgstr ""
"# %s पासून à¤à¤•à¤¤à¥à¤°à¥€à¤¤ केले\n"
"\n"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:313
+#: ../src/dhcp-manager/nm-dhcp-manager.c:302
msgid "no usable DHCP client could be found."
msgstr "वापरणà¥à¤¯à¤¾à¤œà¥‹à¤—ी DHCP कà¥à¤²à¤¾à¤à¤‚ट आढळले नाही."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:322
-msgid "'dhclient' could be found."
-msgstr "'dhclient' आढळले नाही."
+#: ../src/dhcp-manager/nm-dhcp-manager.c:311
+#| msgid "'dhclient' could be found."
+msgid "'dhclient' could not be found or was disabled."
+msgstr "'dhclient' आढळले नाही किंवा बंद होते."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:332
-msgid "'dhcpcd' could be found."
-msgstr "'dhcpcd' आढळले नाही."
+#: ../src/dhcp-manager/nm-dhcp-manager.c:321
+#| msgid "'dhcpcd' could be found."
+msgid "'dhcpcd' could not be found or was disabled."
+msgstr "'dhcpcd' आढळले नाही किंवा बंद होते."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:340
+#: ../src/dhcp-manager/nm-dhcp-manager.c:329
#, c-format
msgid "unsupported DHCP client '%s'"
msgstr "असमरà¥à¤¥à¥€à¤¤ DHCP कà¥à¤²à¤¾à¤à¤‚ट '%s'"
-#: ../src/dns-manager/nm-dns-manager.c:401
+#: ../src/dns-manager/nm-dns-manager.c:374
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr ""
"NOTE: libc रिजॉलवà¥à¤¹à¤° 3 पेकà¥à¤·à¤¾ जासà¥à¤¤ नेमसरà¥à¤µà¥à¤¹à¤°à¥à¤¸à¥ करीता समरà¥à¤¥à¤¨ पà¥à¤°à¤µà¥‚ शकणार "
"नाही."
-#: ../src/dns-manager/nm-dns-manager.c:403
+#: ../src/dns-manager/nm-dns-manager.c:376
msgid "The nameservers listed below may not be recognized."
msgstr "खालिल यादीतील नेमसरà¥à¤µà¥à¤¹à¤°à¥à¤¸à¥ अनोळखी राहतील."
-#: ../src/logging/nm-logging.c:149
+#: ../src/devices/adsl/nm-device-adsl.c:127
+#| msgid "ADSL connection %d"
+msgid "ADSL connection"
+msgstr "ADSL जोडणी"
+
+#: ../src/devices/bluetooth/nm-bluez-device.c:190
#, c-format
-msgid "Unknown log level '%s'"
-msgstr "अपरिचीत लॉग सà¥à¤¤à¤° '%s'"
+msgid "%s Network"
+msgstr "%s नेटवरà¥à¤•"
+
+#: ../src/devices/bluetooth/nm-device-bt.c:274
+#| msgid "PAN connection %d"
+msgid "PAN connection"
+msgstr "PAN जोडणी"
+
+#: ../src/devices/bluetooth/nm-device-bt.c:299
+#: ../src/devices/wwan/nm-modem-broadband.c:483
+#| msgid "GSM connection %d"
+msgid "GSM connection"
+msgstr "GSM जोडणी"
+
+#: ../src/devices/bluetooth/nm-device-bt.c:303
+#: ../src/devices/wwan/nm-modem-broadband.c:506
+#| msgid "CDMA connection %d"
+msgid "CDMA connection"
+msgstr "CDMA जोडणी"
+
+#: ../src/devices/bluetooth/nm-device-bt.c:307
+#| msgid "DUN connection %d"
+msgid "DUN connection"
+msgstr "DUN जोडणी"
+
+#: ../src/devices/nm-device-bond.c:137
+#| msgid "Bond connection %d"
+msgid "Bond connection"
+msgstr "बाà¤à¤¡ जोडणी"
-#: ../src/logging/nm-logging.c:226
+#: ../src/devices/nm-device-bridge.c:144
+#| msgid "Bridge connection %d"
+msgid "Bridge connection"
+msgstr "बà¥à¤°à¤¿à¤œ जोडणी"
+
+#: ../src/devices/nm-device-ethernet.c:1437
+#| msgid "PPPoE connection %d"
+msgid "PPPoE connection"
+msgstr "PPPoE जोडणी"
+
+#: ../src/devices/nm-device-ethernet.c:1437
+#| msgid "Wired connection %d"
+msgid "Wired connection"
+msgstr "वायरà¥à¤¡ जोडणी"
+
+#: ../src/devices/nm-device-ethernet-utils.c:38
#, c-format
-msgid "Unknown log domain '%s'"
-msgstr "अपरिचीत लॉग डोमेन '%s'"
+msgid "Wired connection %d"
+msgstr "वायरà¥à¤¡à¥ जोडणी %d"
+
+#: ../src/devices/nm-device-infiniband.c:189
+#| msgid "InfiniBand connection %d"
+msgid "InfiniBand connection"
+msgstr "इंफिनिबà¤à¤¡ जोडणी"
+
+#: ../src/devices/nm-device-vlan.c:229
+#| msgid "VLAN connection %d"
+msgid "VLAN connection"
+msgstr "VLAN जोडणी"
-#: ../src/config/nm-config.c:271
+#: ../src/devices/team/nm-device-team.c:147
+#| msgid "Team connection %d"
+msgid "Team connection"
+msgstr "टिम जोडणी"
+
+#: ../src/devices/wifi/nm-device-olpc-mesh.c:163
+#| msgid "Mesh %d"
+msgid "Mesh"
+msgstr "मेश"
+
+#: ../src/nm-config.c:303
msgid "Config file location"
msgstr "फाइल ठिकाण संरचीत करा"
-#: ../src/config/nm-config.c:271
+#: ../src/nm-config.c:303
msgid "/path/to/config.file"
msgstr "/path/to/config.file"
-#: ../src/config/nm-config.c:272
+#: ../src/nm-config.c:304
msgid "Config directory location"
msgstr "डिरेकà¥à¤Ÿà¥à¤°à¤¿ ठिकाण संरचीत करा"
-#: ../src/config/nm-config.c:272
+#: ../src/nm-config.c:304
msgid "/path/to/config/dir"
msgstr "/path/to/config/dir"
-#: ../src/config/nm-config.c:274
+#: ../src/nm-config.c:306
msgid "List of plugins separated by ','"
msgstr "',' तरà¥à¤«à¥‡ विभाजीत पà¥à¤²à¤—इंसà¥à¤šà¥€ सूची"
-#: ../src/config/nm-config.c:274
+#: ../src/nm-config.c:306
msgid "plugin1,plugin2"
msgstr "plugin1,plugin2"
#. These three are hidden for now, and should eventually just go away.
-#: ../src/config/nm-config.c:277
+#: ../src/nm-config.c:309
msgid "An http(s) address for checking internet connectivity"
msgstr "इंटरनेट जोडणी तपासणीकरीता http(s) पतà¥à¤¤à¤¾"
-#: ../src/config/nm-config.c:278
+#: ../src/nm-config.c:310
msgid "The interval between connectivity checks (in seconds)"
msgstr "जोडणी तपासणी (सेकंदात) अंतरà¥à¤—त कालवधि"
-#: ../src/config/nm-config.c:279
+#: ../src/nm-config.c:311
msgid "The expected start of the response"
msgstr "पà¥à¤°à¤¤à¤¿à¤¸à¤¾à¤¦à¤¾à¤šà¥€ अपेकà¥à¤·à¤¿à¤¤ सà¥à¤°à¥‚वात"
-#: ../src/config/nm-config.c:279
+#: ../src/nm-config.c:311
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/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/devices/nm-device-adsl.c:150
-#, c-format
-msgid "ADSL connection %d"
-msgstr "ADSL जोडणी %d"
-
-#: ../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
+#: ../src/nm-logging.c:159
#, c-format
-msgid "PAN connection %d"
-msgstr "PAN जोडणी %d"
-
-#: ../src/devices/nm-device-bt.c:341
-#, c-format
-msgid "DUN connection %d"
-msgstr "DUN जोडणी %d"
-
-#: ../src/devices/nm-device-ethernet.c:1254
-#, c-format
-msgid "PPPoE connection %d"
-msgstr "PPPoE जोडणी %d"
-
-#: ../src/devices/nm-device-ethernet.c:1254
-#: ../src/settings/nm-settings-utils.c:50
-#, c-format
-msgid "Wired connection %d"
-msgstr "वायरà¥à¤¡à¥ जोडणी %d"
-
-#: ../src/devices/nm-device-infiniband.c:270 ../tui/nm-editor-utils.c:177
-#, c-format
-msgid "InfiniBand connection %d"
-msgstr "इंफिनिबà¤à¤¡ जोडणी %d"
-
-#: ../src/devices/nm-device-olpc-mesh.c:242
-#, c-format
-msgid "Mesh %d"
-msgstr "मेशMesh %d"
-
-#: ../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:3420 ../tui/nm-editor-utils.c:246
-#, c-format
-msgid "VPN connection %d"
-msgstr "VPN जोडणी %d"
-
-#: ../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:264
-#, c-format
-msgid "unable to connect to netlink for monitoring link status: %s"
-msgstr ""
-"दà¥à¤µà¤¾ सà¥à¤¥à¤¿à¤¤à¥€ नियंतà¥à¤°à¥€à¤¤ करणà¥à¤¯à¤¾à¤•à¤°à¥€à¤¤à¤¾ netlink शी जà¥à¤³à¤µà¤£à¥€ सà¥à¤¥à¤¾à¤ªà¥€à¤¤ करणे अशकà¥à¤¯: %s"
-
-#: ../src/nm-netlink-monitor.c:275
-#, c-format
-msgid "unable to enable netlink handle credential passing: %s"
-msgstr "netlink दà¥à¤µà¤¾à¤°à¥‡ परवानगी सà¥à¤µà¥€à¤•à¤¾à¤°à¤£à¥‡ समरà¥à¤¥à¥€à¤¤ करणà¥à¤¯à¤¾à¤¸ अशकà¥à¤¯: %s"
+msgid "Unknown log level '%s'"
+msgstr "अपरिचीत लॉग सà¥à¤¤à¤° '%s'"
-#: ../src/nm-netlink-monitor.c:319 ../src/nm-netlink-monitor.c:381
+#: ../src/nm-logging.c:241
#, c-format
-msgid "unable to allocate netlink handle for monitoring link status: %s"
-msgstr "दà¥à¤µà¤¾ सà¥à¤¥à¤¿à¤¤à¥€ नियंतà¥à¤°à¥€à¤¤ करणà¥à¤¯à¤¾à¤•à¤°à¥€à¤¤à¤¾ netlink handle चे वाटप अशकà¥à¤¯: %s"
+msgid "Unknown log domain '%s'"
+msgstr "अपरिचीत लॉग डोमेन '%s'"
-#: ../src/nm-netlink-monitor.c:469
-#, c-format
-msgid "unable to join netlink group: %s"
-msgstr "netlink गटसह जोडणी करणे अशकà¥à¤¯: %s"
+#: ../src/nm-manager.c:3338
+#| msgid "VPN connecting"
+msgid "VPN connection"
+msgstr "VPN जोडणी"
-#: ../src/nm-sleep-monitor-systemd.c:116
-#| msgid "NetworkManager status"
+#: ../src/nm-sleep-monitor-systemd.c:114
msgid "NetworkManager needs to turn off networks"
msgstr "NetworkManager ला नेटवरà¥à¤• बंद करायची आवशà¥à¤¯à¤•à¤¤à¤¾ आहे"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:115
-msgid "System"
-msgstr "पà¥à¤°à¤£à¤¾à¤²à¥€"
-
-#: ../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: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:104
-msgid ""
-"Time to wait for a connection, in seconds (without the option, default value "
-"is 30)"
-msgstr ""
-"जोडणीकरिता पà¥à¤°à¤¤à¤¿à¤•à¥à¤·à¤¾ करणà¥à¤¯à¤¾à¤œà¥‹à¤—ी वेळ, सेकंदात (परà¥à¤¯à¤¾à¤¯ विना, पूरà¥à¤µà¤¨à¤¿à¤°à¥à¤§à¤¾à¤°à¤¿à¤¤ "
-"मूलà¥à¤¯ 30 आहे)"
-
-#: ../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:106
-msgid "Don't print anything"
-msgstr "काहिहि छापू नका"
-
-#: ../test/nm-online.c:124
-msgid ""
-"Waits for NetworkManager to finish activating startup network connections."
-msgstr ""
-"सà¥à¤Ÿà¤¾à¤°à¥à¤Ÿà¤…प नेटवरà¥à¤• जोडणà¥à¤¯à¤¾ सकà¥à¤°à¥€à¤¯ करणà¥à¤¯à¤¾à¤ªà¤¾à¤¸à¥‚न बंद करणà¥à¤¯à¤¾à¤šà¥€ पà¥à¤°à¤¤à¤¿à¤•à¥à¤·à¤¾ करतो."
-
-#: ../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
+#: ../src/settings/plugins/ibft/plugin.c:67
#, c-format
-#| msgid "Couldn't decode PKCS#8 file: %s"
-msgid "Could not re-read file: %s"
-msgstr "फाइल: %s वाचणे अशकà¥à¤¯"
+msgid "ibft: failed to read iscsiadm records: %s"
+msgstr "ibft: iscsiadm रेकॉरà¥à¤¡à¤œ वाचणà¥à¤¯à¤¾à¤¸ अपयशी: %s"
-#: ../tui/nm-editor-utils.c:160
+#: ../src/settings/plugins/ibft/plugin.c:75
#, c-format
#| msgid "Wired connection %d"
-msgid "Ethernet connection %d"
-msgstr "इथरनेट जोडणी %d"
+msgid "ibft: read connection '%s'"
+msgstr "ibft: जोडणी '%s' वाचा"
-#: ../tui/nm-editor-utils.c:168
+#: ../src/settings/plugins/ibft/plugin.c:81
#, 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)"
+msgid "ibft: failed to read iscsiadm record: %s"
+msgstr "ibft: iscsiadm रेकॉरà¥à¤¡ वाचणà¥à¤¯à¤¾à¤¸ अपयशी: %s"
-#: ../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 "पासवरà¥à¤¡"
+#: ../src/settings/plugins/ifcfg-rh/reader.c:112
+msgid "System"
+msgstr "पà¥à¤°à¤£à¤¾à¤²à¥€"
-#. "wpa-enterprise"
-#. FIXME
-#: ../tui/nmt-page-wifi.c:279
-msgid "(No support for wpa-enterprise yet...)"
-msgstr "(wpa-enterprise करिता अजूनही समरà¥à¤¥à¤¨ नाही...)"
+#~ msgid "Error saving connection: %s"
+#~ msgstr "जोडणी: %s साठवतेवेळी तà¥à¤°à¥à¤Ÿà¥€"
-#: ../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 इंडेकà¥à¤¸"
+#~ msgid "invalid IPv4 route '%s'"
+#~ msgstr "अवैध IPv4 राउट '%s'"
-#: ../tui/nmt-page-wifi.c:297 ../tui/nmt-page-wifi.c:316
-msgid "Authentication"
-msgstr "ओळख पटवा"
+#~ msgid "invalid prefix '%s'; <0-32> allowed"
+#~ msgstr "अवैध पà¥à¤°à¤¿à¤«à¤¿à¤•à¥à¤¸ '%s'; <0-32> सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯"
-#. "dynamic-wep"
-#. FIXME
-#: ../tui/nmt-page-wifi.c:322
-msgid "(No support for dynamic-wep yet...)"
-msgstr "(dynamic-wep करिता अजूनही समरà¥à¤¥à¤¨ नाही...)"
+#~ msgid "invalid IPv6 route '%s'"
+#~ msgstr "अवैध IPv6 राउट '%s'"
-#. 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 "वापरकरà¥à¤¤à¤¾à¤¨à¤¾à¤µ"
+#~ msgid "invalid prefix '%s'; <0-128> allowed"
+#~ msgstr "अवैध पà¥à¤°à¤¿à¤«à¤¿à¤•à¥à¤¸ '%s'; <0-128> सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯"
-#: ../tui/nmt-password-fields.c:130
-msgid "Ask for this password every time"
-msgstr "पà¥à¤°à¤¤à¥à¤¯à¥‡à¤•à¤µà¥‡à¤³à¥€ हà¥à¤¯à¤¾ पासवरà¥à¤¡à¤•à¤°à¤¿à¤¤à¤¾ विचारा"
+#~ 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"
-#: ../tui/nmt-password-fields.c:131
-#| msgid "Password: "
-msgid "Show password"
-msgstr "पासवरà¥à¤¡ दाखवा"
+#~ msgid ""
+#~ "Error: Device '%s' is waiting for slaves before proceeding with "
+#~ "activation."
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: सकà¥à¤°à¥€à¤¯ होणà¥à¤¯à¤¾à¤ªà¥‚रà¥à¤µà¥€ साधन '%s' सà¥à¤²à¥‡à¤µà¥à¤¸à¤•à¤°à¤¿à¤¤à¤¾ वाट पहात आहे."
-#: ../tui/nmt-route-table.c:219
-msgid "Destination"
-msgstr "लकà¥à¤·à¥à¤¯"
+#~| msgid "Error: missing argument for '%s' option."
+#~ msgid "There are 3 optional arguments for '%s' connection type.\n"
+#~ msgstr "'%s' जोडणी पà¥à¤°à¤•à¤¾à¤°à¤•à¤°à¤¿à¤¤à¤¾ ३ वैकलà¥à¤ªà¤¿à¤• बाबी आहेत.\n"
-#: ../tui/nmt-route-table.c:219
-msgid "Prefix"
-msgstr "पà¥à¤°à¤¿à¤«à¤¿à¤•à¥à¤¸"
+#~| msgid "Do you also want to set '%s' to '%s'? [yes]: "
+#~ msgid "Do you want to provide them? (yes/no) [yes] "
+#~ msgstr "तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ ते पà¥à¤°à¤µà¤¾à¤¯à¤šà¥‡ आहेत? (होय किंवा नाही) [होय] "
-#: ../tui/nmt-route-table.c:228
-msgid "Next Hop"
-msgstr "पà¥à¤¢à¥€à¤² हॉप"
+#~ msgid "There are 5 optional arguments for 'InfiniBand' connection type.\n"
+#~ msgstr "'इनफिनिबà¤à¤¡' जोडणी पà¥à¤°à¤•à¤¾à¤°à¤•à¤°à¤¿à¤¤à¤¾ ५ वैकलà¥à¤ªà¤¿à¤• बाबी आहेत.\n"
-#: ../tui/nmt-route-table.c:236
-msgid "Metric"
-msgstr "मेटà¥à¤°à¤¿à¤•"
+#~ msgid "Transport mode (datagram or connected) [datagram]: "
+#~ msgstr "टà¥à¤°à¤¾à¤‚सà¥à¤ªà¥‹à¤°à¥à¤Ÿ मोड (डाटागà¥à¤°à¤¾à¤® किंवा जोडणी केलेले) [डाटागà¥à¤°à¤¾à¤®]: "
-#: ../tui/nmt-route-table.c:256
-msgid "No custom routes are defined."
-msgstr "पसंतीचे राउटà¥à¤¸ ठरवले नाही."
+#~ msgid "There is 1 optional argument for 'WiMax' connection type.\n"
+#~ msgstr "'WiMax' जोडणी पà¥à¤°à¤•à¤¾à¤°à¤•à¤°à¤¿à¤¤à¤¾ १ वैकलà¥à¤ªà¤¿à¤• बाब आहे.\n"
-#: ../tui/nmt-secret-agent.c:223
-msgid "Identity"
-msgstr "ओळख"
+#~ msgid "There are 4 optional arguments for 'PPPoE' connection type.\n"
+#~ msgstr "'PPPoE' जोडणी पà¥à¤°à¤•à¤¾à¤°à¤•à¤°à¤¿à¤¤à¤¾ ४ वैकलà¥à¤ªà¤¿à¤• बाबी आहेत.\n"
-#: ../tui/nmt-secret-agent.c:228
-#| msgid "private key password not provided"
-msgid "Private key password"
-msgstr "पà¥à¤°à¤¾à¤‡à¤µà¥à¤¹à¥‡à¤Ÿ कि पासवरà¥à¤¡"
+#~ msgid ""
+#~ "There are 2 optional arguments for 'mobile broadband' connection type.\n"
+#~ msgstr "'मोबाईल बà¥à¤°à¥‰à¤¡à¤¬à¤à¤¡' जोडणी पà¥à¤°à¤•à¤¾à¤°à¤•à¤°à¤¿à¤¤à¤¾ २ वैकलà¥à¤ªà¤¿à¤• बाबी आहेत.\n"
-#: ../tui/nmt-secret-agent.c:309
-msgid "Service"
-msgstr "सेवा"
+#~ msgid "There is 1 optional argument for 'bluetooth' connection type.\n"
+#~ msgstr "'बà¥à¤²à¥à¤¯à¥à¤Ÿà¥‚थ' जोडणी पà¥à¤°à¤•à¤¾à¤°à¤•à¤°à¤¿à¤¤à¤¾ १ वैकलà¥à¤ªà¤¿à¤• बाब आहे.\n"
-#: ../tui/nmt-secret-agent.c:340
-msgid "Authentication required by wireless network"
-msgstr "वायरलेस नेटवरà¥à¤•à¤¤à¤°à¥à¤«à¥‡ ओळख पटवणे आवशà¥à¤¯à¤• आहे"
+#~ msgid "Bluetooth type (panu, dun-gsm or dun-cdma) [panu]: "
+#~ msgstr "बà¥à¤²à¥à¤¯à¥à¤Ÿà¥‚थ पà¥à¤°à¤•à¤¾à¤° (panu, dun-gsm किंवा dun-cdma) [panu]: "
-#: ../tui/nmt-secret-agent.c:341
-#, c-format
-msgid ""
-"Passwords or encryption keys are required to access the wireless network "
-"'%s'."
-msgstr ""
-"वायरलेस नेटवरà¥à¤• '%s' करिता पà¥à¤°à¤µà¥‡à¤¶ पà¥à¤°à¤¾à¤ªà¥à¤¤ करणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ पासवरà¥à¤¡à¤œ किंवा "
-"à¤à¤¨à¤•à¥à¤°à¤¿à¤ªà¥à¤¶à¤¨ किज आवशà¥à¤¯à¤• आहे."
+#~ msgid "There are 4 optional arguments for 'VLAN' connection type.\n"
+#~ msgstr "'VLAN' जोडणी पà¥à¤°à¤•à¤¾à¤°à¤•à¤°à¤¿à¤¤à¤¾ ४ वैकलà¥à¤ªà¤¿à¤• बाबी आहेत.\n"
-#: ../tui/nmt-secret-agent.c:349
-#| msgid "connecting (need authentication)"
-msgid "Wired 802.1X authentication"
-msgstr "वायरà¥à¤¡ 802.1X ओळख पटवा"
+#~ msgid "There are optional arguments for 'bond' connection type.\n"
+#~ msgstr "'बाà¤à¤¡' जोडणी पà¥à¤°à¤•à¤¾à¤°à¤•à¤°à¤¿à¤¤à¤¾ वैकलà¥à¤ªà¤¿à¤• बाबी आहेत.\n"
-#: ../tui/nmt-secret-agent.c:352
-#| msgid "Networking"
-msgid "Network name"
-msgstr "नेटवरà¥à¤• नाव"
+#~ msgid "Bonding monitoring mode (miimon or arp) [miimon]: "
+#~ msgstr "मॉनिटरिंग मोडची बांधणी करत आहे (miimon किंवा arp) [miimon]: "
-#: ../tui/nmt-secret-agent.c:359
-#| msgid "connecting (need authentication)"
-msgid "DSL authentication"
-msgstr "DSL ओळख पटवा"
+#~ msgid "There are 6 optional arguments for 'bridge' connection type.\n"
+#~ msgstr "'bridge' जोडणी पà¥à¤°à¤•à¤¾à¤°à¤•à¤°à¤¿à¤¤à¤¾ ६ वैकलà¥à¤ªà¤¿à¤• बाबी आहेत.\n"
-#: ../tui/nmt-secret-agent.c:367
-#| msgid "not required, "
-msgid "PIN code required"
-msgstr "PIN कोड आवशà¥à¤¯à¤•"
+#~| msgid "Error: 'stp': %s."
+#~ msgid "Error: 'stp': '%s'.\n"
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'stp': '%s'.\n"
-#: ../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 कोड आवशà¥à¤¯à¤• आहे"
+#~ msgid "There are 3 optional arguments for 'bridge-slave' connection type.\n"
+#~ msgstr "'bridge-slave' जोडणी पà¥à¤°à¤•à¤¾à¤°à¤•à¤°à¤¿à¤¤à¤¾ ३ वैकलà¥à¤ªà¤¿à¤• बाबी आहेत.\n"
-#: ../tui/nmt-secret-agent.c:370
-#| msgid "VPN"
-msgid "PIN"
-msgstr "PIN"
+#~ msgid "Hairpin (yes/no) [yes]: "
+#~ 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 "मोबाईल बà¥à¤°à¥‰à¤¡à¤¬à¤à¤¡ नेटवरà¥à¤• पासवरà¥à¤¡"
+#~| msgid "Error: 'hairpin': %s."
+#~ msgid "Error: 'hairpin': '%s'.\n"
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'hairpin': '%s'.\n"
-#: ../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 "Error: missing argument for '%s' option."
+#~ msgid "There is 1 optional argument for 'VPN' connection type.\n"
+#~ msgstr "'VPN' जोडणी पà¥à¤°à¤•à¤¾à¤°à¤•à¤°à¤¿à¤¤à¤¾ १ वैकलà¥à¤ªà¤¿à¤• बाब आहे.\n"
-#: ../tui/nmt-slave-list.c:138
-msgid "Select the type of slave connection you wish to add."
-msgstr "समावेशजोगी सà¥à¤²à¥‡à¤µà¥à¤¹ जोडणीचे पà¥à¤°à¤•à¤¾à¤° नीवडा."
+#~ msgid "There are 2 optional arguments for 'OLPC Mesh' connection type.\n"
+#~ msgstr "'OLPC Mesh' जोडणी पà¥à¤°à¤•à¤¾à¤°à¤•à¤°à¤¿à¤¤à¤¾ २ वैकलà¥à¤ªà¤¿à¤• बाबी आहेत.\n"
-#: ../tui/nmt-widget-list.c:142
-msgid "Add..."
-msgstr "समाविषà¥à¤Ÿ करा..."
+#~ msgid "Error: 'master': '%s' is not valid UUID nor interface."
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: 'मासà¥à¤Ÿà¤°': '%s' वैध UUID किंवा संवाद नाही."
-#: ../tui/nmt-widget-list.c:205
-msgid "Remove"
-msgstr "काढून टाका"
+#~ msgid ""
+#~ "save :: save the connection\n"
+#~ "\n"
+#~ "Sends the connection to NetworkManager that will save it.\n"
+#~ msgstr ""
+#~ "save :: जोडणी साठवा\n"
+#~ "\n"
+#~ "जोडणीला NetworkManager करिता पाठवतो, जà¥à¤¯à¤¾à¤¸ साठवले जाते.\n"
-#: ../tui/nmtui-connect.c:82
-#| msgid "connection failed"
-msgid "Activation failed"
-msgstr "सकà¥à¤°à¥€à¤¯à¤¤à¤¾ अपयशी"
+#~ 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"
-#: ../tui/nmtui-connect.c:134
-#| msgid "\rConnecting"
-msgid "Connecting..."
-msgstr "जोडणी करत आहे..."
+#~ msgid "Error: '%s' setting not present\n"
+#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: '%s' सेटिंग अनà¥à¤ªà¤²à¤¬à¥à¤§\n"
-#: ../tui/nmtui-connect.c:159
-#, c-format
-#| msgid "List of active connections"
-msgid "Could not activate connection: %s"
-msgstr "जोडणी: %s सकà¥à¤°à¥€à¤¯ करणे अशकà¥à¤¯"
+#~ 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"
-#: ../tui/nmtui-connect.c:218 ../tui/nmtui-connect.c:274
-#| msgid "activated"
-msgid "Activate"
-msgstr "सà¥à¤°à¥‚ करा"
+#~ msgid "0 (unknown)"
+#~ msgstr "0 (अपरिचीत)"
-#: ../tui/nmtui-connect.c:220
-#| msgid "deactivated"
-msgid "Deactivate"
-msgstr "बंद करा"
+#~ msgid "any, "
+#~ msgstr "कà¥à¤ à¤²à¥‡à¤¹à¥€, "
-#: ../tui/nmtui-connect.c:279 ../tui/nmtui-edit.c:102 ../tui/nmtui.c:114
-msgid "Quit"
-msgstr "बाहेर पडा"
+#~ msgid "900 MHz, "
+#~ msgstr "900 MHz, "
-#: ../tui/nmtui-connect.c:304
-#, c-format
-#| msgid "PAN connection %d"
-msgid "No such connection '%s'"
-msgstr "हà¥à¤¯à¤¾ पà¥à¤°à¤•à¤¾à¤°à¤šà¥€ जोडणी '%s' नाही"
+#~ msgid "1800 MHz, "
+#~ msgstr "1800 MHz, "
-#: ../tui/nmtui-connect.c:306
-#| msgid "Connection activated\n"
-msgid "Connection is already active"
-msgstr "जोडणी आधीपासूनच सकà¥à¤°à¥€à¤¯ आहे"
+#~ msgid "1900 MHz, "
+#~ msgstr "1900 MHz, "
-#: ../tui/nmtui-edit.c:209
-msgid "Create"
-msgstr "निरà¥à¤®à¤¾à¤£ करा"
+#~ msgid "850 MHz, "
+#~ msgstr "850 MHz, "
-#: ../tui/nmtui-edit.c:350
-msgid "Select the type of connection you wish to create."
-msgstr "निरà¥à¤®à¤¾à¤£à¤œà¥‹à¤—ी जोडणीचे पà¥à¤°à¤•à¤¾à¤° नीवडा."
+#~ msgid "WCDMA 3GPP UMTS 2100 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../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 "WCDMA 3GPP UMTS 1800 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../tui/nmtui-edit.c:390 ../tui/nmtui-edit.c:406
-#| msgid "\rConnecting"
-msgid "New Connection"
-msgstr "नवीन जोडणी"
+#~ msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../tui/nmtui-edit.c:443
-#, c-format
-#| msgid "unable to join netlink group: %s"
-msgid "Unable to delete connection: %s"
-msgstr "जोडणी: '%s' नषà¥à¤Ÿ करणे अशकà¥à¤¯"
+#~ msgid "WCDMA 3GPP UMTS 800 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../tui/nmtui-edit.c:472
-#, c-format
-msgid "Are you sure you want to delete the connection '%s'?"
-msgstr "तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ नकà¥à¤•à¥€ जोडणी '%s' नषà¥à¤Ÿ करायचे?"
+#~ msgid "WCDMA 3GPP UMTS 850 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../tui/nmtui-edit.c:486
-#, c-format
-#| msgid "Error: cannot delete unknown connection(s): %s."
-msgid "Could not delete connection: %s"
-msgstr "जोडणी: %s नषà¥à¤Ÿ करणे अशकà¥à¤¯"
+#~ msgid "WCDMA 3GPP UMTS 900 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../tui/nmtui-hostname.c:47
-#| msgid "Setting name? "
-msgid "Set Hostname"
-msgstr "यजमाननाव सेट करा"
+#~ msgid "WCDMA 3GPP UMTS 1700 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../tui/nmtui-hostname.c:55
-msgid "Hostname"
-msgstr "यजमाननाव"
+#~ msgid "WCDMA 3GPP UMTS 1900 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 1900 MHz, "
-#. 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 "WCDMA 3GPP UMTS 2600 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 2600 MHz, "
-#: ../tui/nmtui-hostname.c:116
-#, c-format
-#| msgid "Failed to set signal mask: %d"
-msgid "Unable to set hostname: %s"
-msgstr "यजमाननाव: %s असे सेट करा"
+#~ msgid "'%s' is not valid (use <dest IP>/prefix <next-hop IP> [metric])"
+#~ msgstr "'%s' वैध नाही (<dest IP>/prefix <next-hop IP> [metric] चा वापर करा)"
-#: ../tui/nmtui.c:59 ../tui/nmtui.c:62
-#| msgid "connecting"
-msgid "connection"
-msgstr "जोडणी"
+#~ msgid "'%s' doesn't match the virtual interface name '%s'"
+#~ msgstr "'%s' वरà¥à¤šà¥à¤¯à¥à¤…ल इंटरफेस नाव '%s' सह जà¥à¤³à¤¤ नाही"
-#: ../tui/nmtui.c:60
-#| msgid "disconnecting"
-msgid "Edit a connection"
-msgstr "जोडणी संपादित करा"
+#~| msgid "IPv4 configuration is not allowed for bonding slave"
+#~ msgid "IPv4 configuration is not allowed for slave"
+#~ msgstr "IPv4 संरचना सà¥à¤²à¥‡à¤µà¥à¤¹à¤•à¤°à¤¿à¤¤à¤¾ सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ नाही"
-#: ../tui/nmtui.c:63
-#| msgid "Active connection details"
-msgid "Activate a connection"
-msgstr "जोडणी सकà¥à¤°à¥€à¤¯ करा"
+#~| msgid "IPv6 configuration is not allowed for bonding slave"
+#~ msgid "IPv6 configuration is not allowed for slave"
+#~ msgstr "IPv6 संरचना सà¥à¤²à¥‡à¤µà¥à¤¹à¤•à¤°à¤¿à¤¤à¤¾ सà¥à¤µà¥€à¤•à¤¾à¤°à¥à¤¯ नाही"
-#: ../tui/nmtui.c:65
-msgid "new hostname"
-msgstr "नवीन यजमाननाव"
+#~ msgid "Invalid option. Please use --help to see a list of valid options.\n"
+#~ msgstr "अवैध परà¥à¤¯à¤¾à¤¯. वैध परà¥à¤¯à¤¾à¤¯à¤šà¥€ यादी पहाणà¥à¤¯à¤¾à¤•à¤°à¥€à¤¤à¤¾ कृपया --help वापरा.\n"
-#: ../tui/nmtui.c:66
-#| msgid "Modify persistent system hostname"
-msgid "Set system hostname"
-msgstr "पà¥à¤°à¤£à¤¾à¤²à¥€ यजमाननाव सेट करा"
+#~ msgid "error occurred while waiting for data on socket"
+#~ msgstr "सॉकेट वरील माहिती करीता पà¥à¤°à¤¤à¤¿à¤•à¥à¤·à¤¾ करतेवेळी तà¥à¤°à¥à¤Ÿà¥€ आढळली"
-#: ../tui/nmtui.c:89
-#| msgid "NetworkManager status"
-msgid "NetworkManager TUI"
-msgstr "NetworkManager TUI"
+#~ msgid "error processing netlink message: %s"
+#~ msgstr "netlink संदेश विशà¥à¤²à¥‡à¤·à¥€à¤¤ करतेवेळी तà¥à¤°à¥à¤Ÿà¥€: %s"
-#: ../tui/nmtui.c:97
-msgid "Please select an option"
-msgstr "कृपया परà¥à¤¯à¤¾à¤¯ पसंत करा"
+#~ msgid "unable to connect to netlink for monitoring link status: %s"
+#~ msgstr "दà¥à¤µà¤¾ सà¥à¤¥à¤¿à¤¤à¥€ नियंतà¥à¤°à¥€à¤¤ करणà¥à¤¯à¤¾à¤•à¤°à¥€à¤¤à¤¾ netlink शी जà¥à¤³à¤µà¤£à¥€ सà¥à¤¥à¤¾à¤ªà¥€à¤¤ करणे अशकà¥à¤¯: %s"
-#: ../tui/nmtui.c:154
-msgid "Usage"
-msgstr "वापर"
+#~ msgid "unable to enable netlink handle credential passing: %s"
+#~ msgstr "netlink दà¥à¤µà¤¾à¤°à¥‡ परवानगी सà¥à¤µà¥€à¤•à¤¾à¤°à¤£à¥‡ समरà¥à¤¥à¥€à¤¤ करणà¥à¤¯à¤¾à¤¸ अशकà¥à¤¯: %s"
-#: ../tui/nmtui.c:221
-msgid "Could not parse arguments"
-msgstr "बाबी वाचणे आवशà¥à¤¯à¤•"
+#~ msgid "unable to allocate netlink handle for monitoring link status: %s"
+#~ msgstr "दà¥à¤µà¤¾ सà¥à¤¥à¤¿à¤¤à¥€ नियंतà¥à¤°à¥€à¤¤ करणà¥à¤¯à¤¾à¤•à¤°à¥€à¤¤à¤¾ netlink handle चे वाटप अशकà¥à¤¯: %s"
-#: ../tui/nmtui.c:229
-#| msgid "Error: NetworkManager is not running."
-msgid "NetworkManager is not running."
-msgstr "NetworkManager सà¥à¤°à¥‚ नाही."
+#~ msgid "unable to join netlink group: %s"
+#~ msgstr "netlink गटसह जोडणी करणे अशकà¥à¤¯: %s"
#~ msgid "IP"
#~ msgstr "IP"
@@ -7352,9 +7823,6 @@ msgstr "NetworkManager सà¥à¤°à¥‚ नाही."
#~ msgid "Infrastructure"
#~ msgstr "इंफà¥à¤°à¤¾à¤¸à¥à¤Ÿà¥à¤°à¤•à¥à¤šà¤°"
-#~ msgid "Error: Device '%s' is not a WiFi device."
-#~ msgstr "तà¥à¤°à¥à¤Ÿà¥€: साधन '%s' WiFi साधन नाही."
-
#~ msgid "NET-ENABLED"
#~ msgstr "NET-ENABLED"
@@ -7473,9 +7941,6 @@ msgstr "NetworkManager सà¥à¤°à¥‚ नाही."
#~ msgid "Active connection state: %s\n"
#~ msgstr "सकà¥à¤°à¤¿à¤¯ जोडणीचे सà¥à¤¤à¤°: %s\n"
-#~ msgid "Active connection path: %s\n"
-#~ msgstr "सकà¥à¤°à¤¿à¤¯ जोडणीचे मारà¥à¤—: %s\n"
-
#~ msgid "IP4-SETTINGS"
#~ msgstr "IP4-SETTINGS"
diff --git a/po/pa.po b/po/pa.po
index 3b8ee457d..3e5945015 100644
--- a/po/pa.po
+++ b/po/pa.po
@@ -6,1485 +6,3417 @@
# Amanpreet Singh Alam <amanpreetalam@yahoo.com>, 2005.
# A S Alam <aalam@users.sf.net>, 2007, 2010, 2012.
# Jaswinder Singh <jsingh@redhat.com>, 2010.
+# asaini <asaini@redhat.com>, 2013. #zanata
+# asaini <asaini@redhat.com>, 2014. #zanata
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-09-24 15:26+0000\n"
-"PO-Revision-Date: 2012-09-28 08:45+0530\n"
-"Last-Translator: A S Alam <aalam@users.sf.net>\n"
+"POT-Creation-Date: 2014-01-23 17:13+0530\n"
+"PO-Revision-Date: 2014-01-30 01:50-0500\n"
+"Last-Translator: asaini <asaini@redhat.com>\n"
"Language-Team: Punjabi/Panjabi <punjabi-users@lists.sf.net>\n"
"Language: pa\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"
+"X-Generator: Zanata 3.2.3\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:174
+#: ../cli/src/connections.c:200
msgid "GROUP"
-msgstr "ਗਰà©à©±à¨ª"
+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 "à¨à¨¡à¨°à©ˆà©±à¨¸"
+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 "ਰੂਟ"
+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: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 "ਅਢà©à¨•à¨µà¨¾à¨‚ ਅਗਲਾ hop ਪਤਾ '%s'"
+
+#: ../cli/src/common.c:534 ../cli/src/common.c:598
+#, c-format
+msgid "invalid metric '%s'"
+msgstr "ਅਢà©à¨•à¨µà¨¾à¨‚ metric '%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 "ਕà©à¨¨à©ˆà¨•à¨Ÿ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ (ਪਰਮਾਣਕਿਤਾ ਦੀ ਲੋੜ)"
+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 "ਡਿà¨à¨•à¨Ÿà¨ˆà¨µà©‡à¨Ÿ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"
+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:593
-#: ../cli/src/settings.c:621 ../cli/src/utils.c:531 ../src/main.c:458
-#: ../src/main.c:477
+msgstr "ਸੰਪਰਕ ਅਸਫਲ ਹੋਇਆ"
+
+#: ../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 "ਅਣਜਾਣ ਗਲਤੀ"
+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 ਕਲਾਇਟ ਸ਼à©à¨°à©‚ ਕਰਨ ਲਈ ਫੇਲà©à¨¹"
+msgstr "DHCP ਕਲਾਈਂਟ ਸ਼à©à¨°à©‚ ਹੋਣ ਵਿੱਚ ਅਸਫਲ"
-#: ../cli/src/common.c:447
+#: ../cli/src/common.c:700
msgid "DHCP client error"
-msgstr "DHCP ਕਲਾਇਟ ਗਲਤੀ"
+msgstr "DHCP ਕਲਾਈਂਟ ਗਲਤੀ"
-#: ../cli/src/common.c:450
-#| msgid "VPN connection failed"
+#: ../cli/src/common.c:703
msgid "DHCP client failed"
-msgstr "DHCP ਕਲਾਇਟ ਫੇਲà©à¨¹ ਹੈ"
+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 "ਸਾਂà¨à©€ ਕੀਤੀ ਕà©à¨¨à©ˆà¨•à¨¶à¨¨ ਸਰਵਿਸ ਸ਼à©à¨°à©‚ ਕਰਨ ਲਈ ਫੇਲà©à¨¹"
+msgstr "ਸਾਂà¨à©€ ਸੰਪਰਕ ਸੇਵਾ ਸ਼à©à¨°à©‚ ਹੋਣ ਵਿੱਚ ਅਸਫਲ"
-#: ../cli/src/common.c:456
-#| msgid "connection failed"
+#: ../cli/src/common.c:709
msgid "Shared connection service failed"
-msgstr "ਸਾਂà¨à¨¾ ਕੀਤੀ ਕà©à¨¨à©ˆà¨•à¨¶à¨¨ ਸਰਵਿਸ ਫੇਲà©à¨¹ ਹੈ"
+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 "ਆਟੋ-IP ਸਰਵਿਸ ਸ਼à©à¨°à©‚ ਕਰਨ ਲਈ ਫੇਲà©à¨¹"
-#: ../cli/src/common.c:462
+#: ../cli/src/common.c:715
msgid "AutoIP service error"
msgstr "ਆਟੋ-IP ਸਰਵਿਸ ਗਲਤੀ"
-#: ../cli/src/common.c:465
-#| msgid "the VPN service failed to start"
+#: ../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
-#| 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
-#| msgid "Networking enabled"
+#: ../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 "ਨੈੱਟਵਰਕਮੈਨੇਜਰ ਸਲੀਪ ਮੋਡ ਵਿੱਚ ਗਿਆ"
-#: ../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 ਮਾਡਮ ਦਾ ਗਲਤ ਸਿਮ (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
-#| 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 "ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕ ਲੱਭਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ"
-#: ../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:274 ../cli/src/devices.c:290
-#: ../cli/src/devices.c:410 ../cli/src/devices.c:454
+#: ../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: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/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:107 ../cli/src/devices.c:202
+#: ../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:119
+#: ../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:189 ../cli/src/devices.c:205
+#: ../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 "ਡੀਬੱਸ-ਪਾਥ"
-#. 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:114 ../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 "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 "ਕà©à¨¨-ਪਾਥ"
-#. 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 "ਮਾਸਟਰ-ਪਾਥ"
-#: ../cli/src/connections.c:148 ../cli/src/devices.c:82
-msgid "GENERAL"
-msgstr "ਆਮ"
-
-#. 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 "ਯੂਜ਼ਰ-ਨਾਂ"
-#. 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
-#| msgid "STATE"
+#: ../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 }\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 ""
-"ਵਰਤੋਂ: 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 "Error: 'con list': %s"
-
-#: ../cli/src/connections.c:251 ../cli/src/connections.c:611
-#, c-format
-msgid "Error: 'con list': %s; allowed fields: %s"
-msgstr "Error: 'con list': %s; allowed fields: %s"
-
-#: ../cli/src/connections.c:259
+#: ../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"
+"\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"
+"ਕਮਾਂਡ := { 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"
+"ਆਰਗੂਮੈਂਟ := active [[id | uuid | path | apath] <ID>]\n"
+"\n"
+"ਉਹ ਸੰਪਰਕ ਵਿਖਾਉ ਜਿਹੜੇ ਇਸ ਮੌਕੇ ਕਿਸੇ ਯੰਤਰ ਵੱਲੋਂ ਇੱਕ ਨੈੱਟਵਰਕ ਨਾਲ ਜà©à©œà¨¨ ਲਈ ਵਰਤੇ ਜਾ "
+"ਰਹੇ ਹਨ।\n"
+"ਬਿਨਾਂ ਕਿਸੇ ਪੈਰਾਮੀਟਰ ਤੋਂ, ਸਾਰੇ ਸਰਗਰਮ ਸੰਪਰਕ ਸੂਚੀਬੱਧ ਕਰ ਦਿੱਤੇ ਜਾਂਦੇ ਹਨ। ਬਜਾਠ"
+"ਜਦੋਂ <ID> ਮà©à¨¹à©±à¨ˆà¨† ਕੀਤੀ ਹੋਵੇ,\n"
+"ਸੰਪਰਕ ਵੇਰਵੇ ਪਰਦਰਸ਼ਿਤ ਕੀਤੇ ਜਾਂਦੇ ਹਨ।\n"
+"\n"
+"ਆਰਗੂਮੈਂਟ := 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"
+"ਆਰਗੂਮੈਂਟ := [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"
+"ਦà©à¨†à¨°à¨¾ ਚà©à¨£à¨¿à¨† ਜਾਂਦਾ ਹੈ।\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"
+"ਆਰਗੂਮੈਂਟ := [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"
+"ਆਰਗੂਮੈਂਟ := 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"
+"ਆਰਗੂਮੈਂਟ := [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"
+"ਆਰਗੂਮੈਂਟ := [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: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"
+"ਆਰਗੂਮੈਂਟ := [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"
+"ਆਰਗੂਮੈਂਟ := <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: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: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: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: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: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: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: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
-#, c-format
-msgid "Unknown parameter: %s\n"
-msgstr "ਅਣਜਾਣ ਪੈਰਾਮੀਟਰ: %s\n"
-
-#: ../cli/src/connections.c:601
+#: ../cli/src/connections.c:710
#, 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:2039 ../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 "ਨਾ ਉਪਲੱਬਧ"
-#: ../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; allowed fields: %s"
+msgid "Error: 'list active': %s"
+msgstr "ਗਲਤੀ: 'ਸਰਗਰਮ ਸੂਚੀਬੱਧ ਕਰੋ': %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: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: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: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
-#, c-format
-#| msgid "NetworkManager status"
msgid "Error: NetworkManager is not running."
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:974
+#: ../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 "unknown device '%s'."
+msgstr "ਅਣਪਛਾਤਾ ਯੰਤਰ '%s'।"
+
+#: ../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 "Unknown parameter: %s\n"
+msgstr "ਅਣਜਾਣ ਪੈਰਾਮੀਟਰ: %s\n"
+
+#: ../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: No connection specified."
+msgstr "ਗਲਤੀ: ਕੋਈ ਸੰਪਰਕ ਦਰਸਾਇਆ ਨਹੀਂ ਗਿਆ।"
+
+#: ../cli/src/connections.c:2237 ../cli/src/utils.c:490
+#, c-format
+msgid "'%s' not among [%s]"
+msgstr "'%s' [%s] ਵਿੱਚ ਨਹੀਂ ਹੈ"
+
+#: ../cli/src/connections.c:2319
+#, c-format
+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:2343
+#, c-format
+msgid "Error: 'mtu': '%s' is not a valid MTU."
+msgstr "ਗਲਤੀ: 'mtu': '%s' ਕੋਈ ਢà©à¨•à¨µà¨¾à¨‚ MTU ਨਹੀਂ ਹੈ।"
+
+#: ../cli/src/connections.c:2359
+#, c-format
+msgid "Error: 'parent': '%s' is not a valid interface name."
+msgstr "ਗਲਤੀ: 'parent': '%s' ਇੱਕ ਢà©à¨•à¨µà¨¾à¨‚ ਇੰਟਰਫੇਸ ਨਾਂ ਨਹੀਂ ਹੈ।"
+
+#: ../cli/src/connections.c:2380
+#, 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:2396
+#, 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:2412
+#, c-format
+msgid "Error: 'flags': '%s' is not valid; use <0-7>."
+msgstr "ਗਲਤੀ: 'flags': '%s' ਢà©à¨•à¨µà¨¾à¨‚ ਨਹੀਂ ਹੈ; <0-7> ਵਰਤੋ।"
+
+#: ../cli/src/connections.c:2434
+#, c-format
+msgid "Error: '%s': '%s' is not valid; %s "
+msgstr "ਗਲਤੀ: '%s': '%s' ਢà©à¨•à¨µà¨¾à¨‚ ਨਹੀਂ ਹੈ; %s "
+
+#: ../cli/src/connections.c:2541
+#, c-format
+msgid "Error: '%s': '%s' is not valid; use <%u-%u>."
+msgstr "ਗਲਤੀ: '%s': '%s' ਢà©à¨•à¨µà¨¾à¨‚ ਨਹੀਂ ਹੈ; <%u-%u> ਵਰਤੋ।"
+
+#: ../cli/src/connections.c:2555
+msgid "ethernet"
+msgstr "ਈਥਰਨੈੱਟ"
+
+#: ../cli/src/connections.c:2555 ../tui/nm-editor-utils.c:164
+#: ../tui/nm-ui-utils.c:337
+msgid "Wi-Fi"
+msgstr "ਵਾਈ-ਫਾਈ"
+
+#: ../cli/src/connections.c:2558
+#, c-format
+msgid "There are 3 optional arguments for '%s' connection type.\n"
+msgstr "'%s' ਸੰਪਰਕ ਕਿਸਮ ਲਈ 3 ਬਦਲਵੇਂ ਆਰਗੂਮੈਂਟ ਹਨ।\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 "ਕੀ ਤà©à¨¸à©€à¨‚ ਉਹਨਾਂ ਨੂੰ ਮà©à¨¹à©±à¨ˆà¨† ਕਰਵਾਉਣਾ ਚਾਹà©à©°à¨¦à©‡ ਹੋ? (ਹਾਂ/ਨਹੀਂ) [ਹਾਂ] "
+
+#: ../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 [ਸà©à¨µà©ˆ-ਚਲਿਤ]: "
+
+#: ../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 [ਕੋਈ ਨਹੀਂ]: "
+
+#: ../cli/src/connections.c:2589
+msgid "Cloned MAC [none]: "
+msgstr "ਕਲੋਨ ਕੀਤਾ MAC [ਕੋਈ ਨਹੀਂ]: "
+
+#: ../cli/src/connections.c:2612
+#, c-format
+msgid "There are 5 optional arguments for 'InfiniBand' connection type.\n"
+msgstr "'InfiniBand' ਸੰਪਰਕ ਕਿਸਮ ਲਈ 5 ਬਦਲਵੇਂ ਆਰਗੂਮੈਂਟ ਹਨ।\n"
+
+#: ../cli/src/connections.c:2643
+msgid "Transport mode (datagram or connected) [datagram]: "
+msgstr "ਟਰਾਂਸਪੋਰਟ ਮੋਡ (datagram ਜਾਂ connected) [datagram]: "
+
+#: ../cli/src/connections.c:2656
+msgid "Parent interface [none]: "
+msgstr "ਪà©à¨°à¨®à©à©±à¨– ਇੰਟਰਫੇਸ [ਕੋਈ ਨਹੀਂ]: "
+
+#: ../cli/src/connections.c:2667
+msgid "P_KEY [none]: "
+msgstr "P_KEY [ਕੋਈ ਨਹੀਂ]: "
+
+#: ../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 "ਕੀ ਤà©à¨¸à©€à¨‚ ਇਹ ਮà©à¨¹à©±à¨ˆà¨† ਕਰਵਾਉਣਾ ਚਾਹà©à©°à¨¦à©‡ ਹੋ? (ਹਾਂ/ਨਹੀਂ) [ਹਾਂ] "
+
+#: ../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 "'ਮੋਬਾਇਲ ਬਰਾਡਬੈਂਡ' ਸੰਪਰਕ ਕਿਸਮ ਲਈ 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 ਜਾਂ 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' ਸੰਪਰਕ ਕਿਸਮ ਲਈ 5 ਬਦਲਵੇਂ ਆਰਗੂਮੈਂਟ ਹਨ।\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 "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: Unknown connection: %s."
-msgstr "ਗਲਤੀ: ਅਣਜਾਣ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨: %s।"
+msgid "Error: 'primary': '%s' is not a valid interface name.\n"
+msgstr "ਗਲਤੀ: 'primary': '%s' ਇੱਕ ਢà©à¨•à¨µà¨¾à¨‚ ਇੰਟਰਫੇਸ ਨਾਂ ਨਹੀਂ ਹੈ।\n"
-#: ../cli/src/connections.c:1702 ../cli/src/devices.c:1059
-#: ../cli/src/devices.c:1605
+#: ../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: timeout value '%s' is not valid."
-msgstr "ਗਲਤੀ: ਸਮਾਂ-ਸਮਾਪਤੀ ਮà©à©±à¨² '%s' ਢà©à©±à¨•à¨µà¨¾à¨‚ ਨਹੀਂ ਹੈ।"
+msgid "Error: '%s' is not a valid monitoring mode; use '%s' or '%s'.\n"
+msgstr ""
+"ਗਲਤੀ: '%s' ਇੱਕ ਢà©à¨•à¨µà¨¾à¨‚ ਮੌਨੀਟਰ ਕਰਨ ਵਾਲਾ ਮੋਡ ਨਹੀਂ ਹੈ; '%s' ਜਾਂ '%s' ਵਰਤੋ।\n"
-#: ../cli/src/connections.c:1715 ../cli/src/connections.c:1827
-#: ../cli/src/connections.c:1918
+#: ../cli/src/connections.c:2959
+msgid "Bonding miimon [100]: "
+msgstr "Bonding miimon [100]: "
+
+#: ../cli/src/connections.c:2962
#, c-format
-msgid "Error: id or uuid has to be specified."
-msgstr "ਗਲਤੀ: id ਜਾਂ uuid ਨਹੀਂ ਦਿੱਤਾ।"
+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:1747
+#: ../cli/src/connections.c:2973
#, c-format
-msgid "Error: No suitable device found: %s."
-msgstr "ਗਲਤੀ: ਕੋਈ ਢà©à©±à¨•à¨µà¨¾à¨‚ ਜੰਤਰ ਨਹੀਂ ਲੱਭਿਆ: %s।"
+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:1749
+#: ../cli/src/connections.c:2984
#, c-format
-msgid "Error: No suitable device found."
-msgstr "ਗਲਤੀ: ਕੋਈ ਢà©à©±à¨•à¨µà¨¾à¨‚ ਜੰਤਰ ਨਹੀਂ ਮਿਲਿਆ।"
+msgid "Error: 'updelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "ਗਲਤੀ: 'updelay': '%s' ਇੱਕ ਢà©à¨•à¨µà¨¾à¨‚ ਅੰਕ ਨਹੀਂ ਹੈ <0-%u>।\n"
-#: ../cli/src/connections.c:1863
+#: ../cli/src/connections.c:2993
+msgid "Bonding arp-interval [0]: "
+msgstr "ਬੌਂਡ ਕਰਨ ਵਾਲਾ arp-ਅੰਤਰਾਲ [0]: "
+
+#: ../cli/src/connections.c:2996
#, c-format
-msgid "Warning: Connection not active\n"
-msgstr "ਚੇਤਾਵਨੀ: ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਚਾਲੂ ਨਹੀਂ ਹੈ\n"
+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 [ਕੋਈ ਨਹੀਂ]: "
-#: ../cli/src/connections.c:1877
+#: ../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 ਯੋਗ ਕਰੋ (ਹਾਂ/ਨਹੀਂ) [ਹਾਂ]: "
+
+#: ../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 (ਹਾਂ/ਨਹੀਂ) [ਹਾਂ]: "
+
+#: ../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 ਮੈਸ਼' ਸੰਪਰਕ ਕਿਸਮ ਲਈ 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 ਪਤਾ [ਕੋਈ ਨਹੀਂ]: "
+
+#: ../cli/src/connections.c:3317
+msgid "IPv4 address (IP[/plen] [gateway]) [none]: "
+msgstr "IPv4 ਪਤਾ (IP[/plen] [ਗੇਟਵੇਅ]) [ਕੋਈ ਨਹੀਂ]: "
+
+#: ../cli/src/connections.c:3319
+msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
+msgstr "IPv6 ਪਤਾ (IP[/plen] [ਗੇਟਵੇਅ]) [ਕੋਈ ਨਹੀਂ]: "
+
+#: ../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 ਪਤੇ ਜੋੜਨਾ ਚਾਹà©à©°à¨¦à©‡ ਹੋ? (ਹਾਂ/ਨਹੀਂ) [ਹਾਂ] "
+
+#: ../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 "ਵਾਈਮੈਕਸ 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 "ਗਲਤੀ: 'ਯੂਜ਼ਰ-ਨਾਂ' ਲੋੜੀਂਦਾ ਹੈ।"
+
+#: ../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> ਸੰਪਰਕ ਤੇ ਜਾਉ\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 ਮੇਰਾ ਸੰਪਰਕ\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 ""
+"ਕਿਰਿਆਸ਼ੀਲ ਕਰੋ [<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 [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 :: 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] :: ਗà©à¨£ ਛਾਪੋ (ਸੈਟਿੰਗ/ਸੰਪਰਕ) ਮà©à©±à¨²(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] :: print property (ਸੈਟਿੰਗ, ਸੰਪਰਕ) ਮà©à©±à¨²\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 | 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 "ਗਲਤੀ: ਸੰਪਰਕ ਸੰਭਾਲਿਆ ਨਹੀਂ ਹੈ। ਪਹਿਲਾਂ '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 activation failed: %s"
msgid "Error: Connection deletion failed: %s"
msgstr "ਗਲਤੀ: ਕà©à¨¨à©ˆà¨•à¨¶à¨¨ ਹਟਾਉਣ ਲਈ ਫੇਲà©à¨¹: %s"
-#: ../cli/src/connections.c:1995
+#: ../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: 'con' command '%s' is not valid."
-msgstr "ਗਲਤੀ: 'con' ਕਮਾਂਡ '%s' ਢà©à©±à¨•à¨µà¨¾à¨‚ ਨਹੀਂ।"
+msgid ""
+"Error: 'configured' or 'active' command is expected for 'connection show'."
+msgstr ""
+"ਗਲਤੀ: 'connection show' ਲਈ 'configured' ਜਾਂ 'active' ਦੀ ਆਸ ਕੀਤੀ ਗਈ ਹੈ।"
-#: ../cli/src/connections.c:2063
+#: ../cli/src/connections.c:7984
#, c-format
-msgid "Error: could not connect to D-Bus."
-msgstr "ਗਲਤੀ: ਡੀ-ਬੱਸ ਨਾਲ ਕà©à¨¨à©ˆà¨•à¨Ÿ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ।"
+msgid "Error: '%s' is not valid 'connection' command."
+msgstr "ਗਲਤੀ: '%s' ਢà©à¨•à¨µà©€à¨‚ 'connection' ਕਮਾਂਡ ਨਹੀਂ ਹੈ।"
-#: ../cli/src/connections.c:2071
+#: ../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:2081
+#: ../cli/src/connections.c:8063
#, 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 "ਗਲਤੀ: ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਨਹੀਂ ਲਿਆ ਜਾ ਸਕਦਾ: ਸਿਸਟਮ ਸਰਵਿਸ ਨਹੀਂ ਚੱਲ ਰਹੀ ਹੈ।"
-#. 0
-#. 9
-#. 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:87 ../cli/src/devices.c:184
+#: ../cli/src/devices.c:201
msgid "DEVICE"
msgstr "ਜੰਤਰ"
-#. 0
-#: ../cli/src/devices.c:83
-msgid "CAPABILITIES"
-msgstr "ਸਮਰੱਥਾ"
-
-#. 1
-#: ../cli/src/devices.c:84
-msgid "WIFI-PROPERTIES"
-msgstr "ਵਾਈਫਾਈ-ਵਿਸ਼ੇਸ਼ਤਾ"
-
-#. 2
-#: ../cli/src/devices.c:85
-msgid "AP"
-msgstr "AP"
-
-#. 3
-#: ../cli/src/devices.c:86
-msgid "WIRED-PROPERTIES"
-msgstr "ਤਾਰ-ਵਿਸ਼ੇਸ਼ਤਾ"
-
-#. 4
-#: ../cli/src/devices.c:87
-#| msgid "WIFI-PROPERTIES"
-msgid "WIMAX-PROPERTIES"
-msgstr "ਵਾਈਮੈਕਸ-ਵਿਸ਼ੇਸ਼ਤਾ"
+#: ../cli/src/devices.c:75 ../cli/src/devices.c:103
+msgid "CONNECTION"
+msgstr "ਕà©à¨¨à©ˆà¨•à¨¶à¨¨"
-#. 5
-#. 0
-#: ../cli/src/devices.c:88 ../cli/src/devices.c:200
-#| msgid "DNS"
-msgid "NSP"
-msgstr "NSP"
+#: ../cli/src/devices.c:76 ../cli/src/devices.c:104
+msgid "CON-UUID"
+msgstr "CON-UUID"
-#. 6
#: ../cli/src/devices.c:89
-#| msgid "IP4-DNS"
-msgid "IP4"
-msgstr "IP4"
-
-#. 7
-#: ../cli/src/devices.c:90
-msgid "DHCP4"
-msgstr "DHCP4"
-
-#. 8
-#: ../cli/src/devices.c:91
-#| msgid "IP6-DNS"
-msgid "IP6"
-msgstr "IP6"
-
-#. 9
-#: ../cli/src/devices.c:92
-msgid "DHCP6"
-msgstr "DHCP6"
-
-#. 2
-#: ../cli/src/devices.c:108
msgid "VENDOR"
msgstr "ਵੇਂਡਰ"
-#. 3
-#: ../cli/src/devices.c:109
+#: ../cli/src/devices.c:90
msgid "PRODUCT"
msgstr "ਪਰੋਡੱਕਟ"
-#. 4
-#: ../cli/src/devices.c:110
+#: ../cli/src/devices.c:91
msgid "DRIVER"
msgstr "ਡਰਾਇਵਰ"
-#. 5
-#: ../cli/src/devices.c:111
-#| msgid "DRIVER"
+#: ../cli/src/devices.c:92
msgid "DRIVER-VERSION"
msgstr "ਡਰਾਇਵਰ-ਵਰਜਨ"
-#. 6
-#: ../cli/src/devices.c:112
+#: ../cli/src/devices.c:93
msgid "FIRMWARE-VERSION"
msgstr "ਫਿਰਮਵੇਅਰ ਵਰਜਨ"
-#. 7
-#: ../cli/src/devices.c:113
+#: ../cli/src/devices.c:94
msgid "HWADDR"
msgstr "HWADDR"
-#. 9
-#: ../cli/src/devices.c:115
+#: ../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:116
+#: ../cli/src/devices.c:98
msgid "UDI"
msgstr "UDI"
-#. 11
-#: ../cli/src/devices.c:117
+#: ../cli/src/devices.c:99
msgid "IP-IFACE"
msgstr "IP-IFACE"
-#. 12
-#: ../cli/src/devices.c:118
+#: ../cli/src/devices.c:100
msgid "NM-MANAGED"
msgstr "NM-MANAGED"
-#. 14
-#: ../cli/src/devices.c:120
+#: ../cli/src/devices.c:102
msgid "FIRMWARE-MISSING"
msgstr "ਫਿਰਮਵੇਅਰ ਮੌਜੂਦ ਨਹੀਂ ਹੈ"
-#. 15
-#: ../cli/src/devices.c:121
-#| msgid "AUTOCONNECT"
-msgid "CONNECTION"
-msgstr "ਕà©à¨¨à©ˆà¨•à¨¶à¨¨"
+#: ../cli/src/devices.c:115
+msgid "AVAILABLE-CONNECTION-PATHS"
+msgstr "ਉਪਲੱਬਧ-ਸੰਪਰਕ-ਰਾਹ"
-#. 0
-#: ../cli/src/devices.c:130
+#: ../cli/src/devices.c:116
+msgid "AVAILABLE-CONNECTIONS"
+msgstr "ਉਪਲੱਬਧ-ਸੰਪਰਕ"
+
+#: ../cli/src/devices.c:125
msgid "CARRIER-DETECT"
msgstr "ਕੈਰੀਅਰ-ਖੋਜ"
-#. 1
-#: ../cli/src/devices.c:131
+#: ../cli/src/devices.c:126
msgid "SPEED"
msgstr "ਸਪੀਡ"
-#. 0
-#: ../cli/src/devices.c:140
+#: ../cli/src/devices.c:135
msgid "CARRIER"
msgstr "ਕੈਰੀਅਰ"
-#. 0
-#: ../cli/src/devices.c:150
+#: ../cli/src/devices.c:144 ../cli/src/devices.c:563
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:571
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"
-#. 0
-#: ../cli/src/devices.c:164
-#| 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: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"
+
+#: ../cli/src/devices.c:174 ../tui/nmt-page-wifi.c:352
msgid "BSSID"
msgstr "BSSID"
-#. 2
-#: ../cli/src/devices.c:180
+#: ../cli/src/devices.c:175
msgid "MODE"
msgstr "ਮੋਡ"
-#. 3
-#: ../cli/src/devices.c:181
+#: ../cli/src/devices.c:176
+msgid "CHAN"
+msgstr "CHAN"
+
+#: ../cli/src/devices.c:177
msgid "FREQ"
msgstr "ਫਰੀਕਿਊਂਸੀ"
-#. 4
-#: ../cli/src/devices.c:182
+#: ../cli/src/devices.c:178
msgid "RATE"
msgstr "ਰੇਟ"
-#. 5
-#. 1
-#: ../cli/src/devices.c:183 ../cli/src/devices.c:201
+#: ../cli/src/devices.c:179 ../cli/src/devices.c:199
msgid "SIGNAL"
msgstr "ਸਿਗਨਲ"
-#. 6
-#: ../cli/src/devices.c:184
+#: ../cli/src/devices.c:180
+msgid "BARS"
+msgstr "BARS"
+
+#: ../cli/src/devices.c:181
msgid "SECURITY"
msgstr "ਸà©à¨°à©±à¨–ਿਆ"
-#. 7
-#: ../cli/src/devices.c:185
+#: ../cli/src/devices.c:182
msgid "WPA-FLAGS"
msgstr "WPA-FLAGS"
-#. 8
-#: ../cli/src/devices.c:186
+#: ../cli/src/devices.c:183
msgid "RSN-FLAGS"
msgstr "RSN-FLAGS"
-#. 10
-#. 4
-#: ../cli/src/devices.c:188 ../cli/src/devices.c:204
+#: ../cli/src/devices.c:185 ../cli/src/devices.c:202
msgid "ACTIVE"
msgstr "ਚਾਲੂ"
-#: ../cli/src/devices.c:223
+#: ../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 "ਮਾਤਹਿਤ"
+
+#: ../cli/src/devices.c:222
+msgid "ID"
+msgstr "ID"
+
+#: ../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 "ਵਾਈਮੈਕਸ-ਵਿਸ਼ੇਸ਼ਤਾ"
+
+#: ../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 ""
-"ਵਰਤੋਂ: nmcli dev { 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:323
+#: ../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"
+" ਯੰਤਰ - ਇੰਟਰਫੇਸ ਨਾਂ\n"
+" ਕਿਸਮ - ਯੰਤਰ ਕਿਸਮ\n"
+" ਹਾਲਾਤ - ਯੰਤਰ ਹਾਲਾਤ\n"
+" ਸੰਪਰਕ - ਯੰਤਰ ਤੇ ਕਿਰਿਆਸ਼ੀਲ ਕੀਤਾ ਗਿਆ ਸੰਪਰਕ (ਜੇ ਕੋਈ ਹੈ)\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"
+"ਆਰਗੂਮੈਂਟ := [<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"
+"ਨੈੱਟਵਰਕ-ਮੈਨੇਜਰ ਇੱਕ ਅਨà©à¨•à©‚ਲ ਸੰਪਰਕ ਲੱਭਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੇਗਾ ਜਿਹੜਾ ਕਿ ਕਿਰਿਆਸ਼ੀਲ ਕੀਤਾ "
+"ਜਾਵੇਗਾ।\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"
+"ਕਮਾਂਡ-ਲਾਈਨ ਦਾ ਅਨà©à¨ªà©‚ਰਕ ਹੈ। ਕਮਾਂਡ ਹਮੇਸ਼ਾ ਨਵਾਂ ਸੰਪਰਕ ਬਣਾਉਂਦੀ ਹੈ ਇਸ ਲਈ ਇਹ ਮà©à©±à¨– "
+"ਤੌਰ ਤੇ ਨਵੇਂ Wi-Fi\n"
+"ਨੈੱਟਵਰਕਾਂ ਨਾਲ ਜà©à©œà¨¨ ਲਈ ਵਰਤੋਂਯੋਗ ਹੈ। ਜੇ ਨੈੱਟਵਰਕ ਲਈ ਸੰਪਰਕ ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ, "
+"ਮੌਜੂਦਾ ਪਰੋਫਾਈਲ ਨੂੰ ਇਸ\n"
+"ਤਰà©à¨¹à¨¾à¨‚ ਉਪਰ ਲੈ ਆਉਣਾ ਵਧੀਆ ਹੈ: nmcli con up id <name>। ਧਿਆਨ ਦਿਉ ਕਿ ਇਸ ਵੇਲੇ ਸਿਰਫ "
+"ਖà©à©±à¨²à©‡, WEP\n"
+" ਅਤੇ WPA-PSK ਸਮਰਥਿਤ ਹਨ। ਇਹ ਵੀ ਮੰਨਿਆ ਜਾਂਦਾ ਹੈ ਕਿ IP ਸੰਰਚਨਾ DHCP ਦà©à¨†à¨°à¨¾ ਪà©à¨°à¨¾à¨ªà¨¤ "
+"ਕੀਤੀ ਜਾਂਦੀ ਹੈ।\n"
+"\n"
+"\n"
+"\n"
+"ਆਰਗੂਮੈਂਟ := 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"
+"ਆਰਗੂਮੈਂਟ:= [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:379
+#: ../cli/src/devices.c:547
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:380
+#: ../cli/src/devices.c:548
#, c-format
msgid "%u Mbit/s"
msgstr "%u Mbit/s"
-#: ../cli/src/devices.c:389
-msgid "Encrypted: "
-msgstr "ਇੰਕà©à¨°à¨¿à¨ªà¨Ÿ ਕੀਤਾ: "
-
-#: ../cli/src/devices.c:394
-msgid "WEP "
-msgstr "WEP "
-
-#: ../cli/src/devices.c:396
-msgid "WPA "
-msgstr "WPA "
+#: ../cli/src/devices.c:567
+msgid "WPA1"
+msgstr "WPA1"
-#: ../cli/src/devices.c:398
-msgid "WPA2 "
-msgstr "WPA2 "
+#: ../cli/src/devices.c:576
+msgid "802.1X"
+msgstr "802.1X"
-#: ../cli/src/devices.c:401
-msgid "Enterprise "
-msgstr "ਇੰਟਰਪà©à¨°à¨¾à¨ˆà¨œà¨¼ "
-
-#: ../cli/src/devices.c:410
+#: ../cli/src/devices.c:592
msgid "Ad-Hoc"
msgstr "à¨à¨¡-ਹਾਕ"
-#: ../cli/src/devices.c:410
-msgid "Infrastructure"
-msgstr "ਇੰਫਰਾਸਟੱਕਚਰ"
+#: ../cli/src/devices.c:593
+msgid "Infra"
+msgstr "ਇੰਨਫਰਾ"
-#: ../cli/src/devices.c:445
+#: ../cli/src/devices.c:625
msgid "Home"
msgstr "ਘਰ"
-#: ../cli/src/devices.c:448
+#: ../cli/src/devices.c:628
msgid "Partner"
msgstr "ਸਹਿਯੋਗੀ"
-#: ../cli/src/devices.c:451
+#: ../cli/src/devices.c:631
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:725
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: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:591
-#| msgid "connected"
-msgid "not connected"
-msgstr "ਕà©à¨¨à©ˆà¨•à¨Ÿ ਨਹੀਂ ਹੈ"
-
-#: ../cli/src/devices.c:618
+#: ../cli/src/devices.c:827
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
-#. Print header
-#. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:691
+#: ../cli/src/devices.c:913
msgid "on"
msgstr "ਚਾਲੂ"
-#: ../cli/src/devices.c:691
+#: ../cli/src/devices.c:913
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: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:867
+#: ../cli/src/devices.c:1206
msgid "Status of devices"
msgstr "ਜੰਤਰਾਂ ਦੀ ਹਾਲਤ"
-#: ../cli/src/devices.c:898
+#: ../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:939 ../cli/src/devices.c:1104
-#: ../cli/src/devices.c:1245 ../cli/src/devices.c:1892
+#: ../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:962
+#: ../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:997
+#: ../cli/src/devices.c:1471
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "ਗਲਤੀ: ਜੰਤਰ '%s' (%s) ਡਿਸ-ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਫੇਲà©à¨¹: %s"
-#: ../cli/src/devices.c:1010
+#: ../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:1073
-#, c-format
-msgid "Error: iface has to be specified."
-msgstr "ਗਲਤੀ: iface ਦੇਣ ਲਈ ਫੇਲà©à¨¹ ਹੈ।"
+#: ../cli/src/devices.c:1628
+msgid "Wi-Fi scan list"
+msgstr "ਵਾਈ-ਫਾਈ ਸਕੈਨ ਸੂਚੀ"
-#: ../cli/src/devices.c:1203
+#: ../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:1205
+#: ../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:1228
-msgid "WiFi scan list"
-msgstr "ਵਾਈਫਾਈ ਸਕੈਨ ਲਿਸਟ"
-
-#: ../cli/src/devices.c:1265 ../cli/src/devices.c:1319
-#, 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:1282
+#: ../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' ਵਾਈ-ਫਾਈ ਜੰਤਰ ਨਹੀਂ ਹੈ।"
-#: ../cli/src/devices.c:1350 ../cli/src/devices.c:1396
+#: ../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:1355
+#: ../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:1380
+#: ../cli/src/devices.c:1854
#, c-format
msgid "Error: Failed to add/activate new connection: (%d) %s"
msgstr "ਗਲਤੀ: ਨਵਾਂ ਕà©à¨¨à©ˆà¨•à¨¶à¨¨ ਜੋੜਨ/ਸਰਗਰਮ ਕਰਨ ਲਈ ਫੇਲà©à¨¹: (%d) %s"
-#: ../cli/src/devices.c:1388
+#: ../cli/src/devices.c:1862
#, c-format
msgid "Error: Failed to add/activate new connection: Unknown error"
msgstr "ਗਲਤੀ: ਨਵਾਂ ਕà©à¨¨à©ˆà¨•à¨¶à¨¨ ਜੋੜਨ/ਸਰਗਰਮ ਕਰਨ ਲਈ ਫੇਲà©à¨¹: ਅਣਜਾਣ ਗਲਤੀ"
-#: ../cli/src/devices.c:1532
+#: ../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:1555
+#: ../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:1579
+#: ../cli/src/devices.c:2066
#, c-format
msgid ""
"Error: wep-key-type argument value '%s' is invalid, use 'key' or 'phrase'."
-msgstr "ਗਲਤੀ: wep-key-type ਆਰਗੂਮੈਂਟ ਮà©à©±à¨² '%s' ਗਲਤ ਹੈ, 'key' ਜਾਂ 'phrase' ਵਰਤੋ।"
+msgstr ""
+"ਗਲਤੀ: wep-key-type ਆਰਗੂਮੈਂਟ ਮà©à©±à¨² '%s' ਗਲਤ ਹੈ, 'key' ਜਾਂ 'phrase' ਵਰਤੋ।"
-#: ../cli/src/devices.c:1619
+#: ../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:1625
+#: ../cli/src/devices.c:2107
#, c-format
msgid "Error: Parameter '%s' is neither SSID nor BSSID."
msgstr "ਗਲਤੀ: ਪੈਰਾਮੀਟਰ '%s' ਨਾ ਤਾਂ SSID ਹੈ ਨਾ BSSID।"
-#: ../cli/src/devices.c:1654
+#: ../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' ਵਾਈ-ਫਾਈ ਜੰਤਰ ਨਹੀਂ ਹੈ।"
-
-#: ../cli/src/devices.c:1656
-#, c-format
-#| msgid "Error: No suitable device found."
msgid "Error: No Wi-Fi device found."
msgstr "ਗਲਤੀ: ਕੋਈ ਵਾਈ-ਫਾਈ ਜੰਤਰ ਨਹੀਂ ਮਿਲਿਆ।"
-#: ../cli/src/devices.c:1674
+#: ../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:1676
+#: ../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:1774
-#, 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:1850
+#: ../cli/src/devices.c:2321
#, c-format
-#| msgid "Error: 'dev wifi': %s"
-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:1852
-#, c-format
-#| msgid "Error: 'dev wifi': %s; allowed fields: %s"
-msgid "Error: 'dev wimax': %s; allowed fields: %s"
-msgstr "ਗਲਤੀ: 'dev wimax': %s; ਮਨਜ਼ੂਰਸ਼à©à©±à¨¦à¨¾ ਖੇਤਰ: %s"
-
-#: ../cli/src/devices.c:1875
+#: ../cli/src/devices.c:2368
msgid "WiMAX NSP list"
msgstr "WiMAX NSP ਸੂਚੀ"
-#: ../cli/src/devices.c:1912
+#: ../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:1923
+#: ../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' ਵਾਈਮੈਕਸ ਜੰਤਰ ਨਹੀਂ ਹੈ।"
-#: ../cli/src/devices.c:1954
+#: ../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:1981
+#: ../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 "ਗਲਤੀ: 'device wimax' ਕਮਾਂਡ '%s' ਢà©à¨•à¨µà©€à¨‚ ਨਹੀਂ ਹੈ।"
-#: ../cli/src/devices.c:2031
+#: ../cli/src/devices.c:2621
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "ਗਲਤੀ: 'dev' ਕਮਾਂਡ '%s' ਢà©à©±à¨•à¨µà©€à¨‚ ਨਹੀਂ ਹੈ।"
@@ -1493,281 +3425,495 @@ 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 "NET-ENABLED"
+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-ਹਾਰਡਵੇਅਰ"
+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 "WIFI-HARDWARE"
-msgid "WIMAX-HARDWARE"
-msgstr "ਵਾਈਮੈਕਸ-ਹਾਰਡਵੇਅਰ"
+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 | enable | sleep | wifi | wwan }\n"
-#| "\n"
-#| " status\n"
-#| " enable [true|false]\n"
-#| " sleep [true|false]\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"
+"ਕਮਾਂਡ := { 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"
+"ਨੈੱਟਵਰਕ-ਮੈਨੇਜਰ ਦੀ ਲੱਗਭਗ ਸਾਰੀ ਹਾਲਾਤ ਵਿਖਾਉ।\n"
+"'status' ਮੂਲ ਕਾਰਵਾਈ ਹੈ, ਜਿਸਦਾ ਮਤਲਬ 'nmcli gen status' ਨੂੰ 'nmcli gen' "
+"ਬà©à¨²à¨¾à¨‰à¨‚ਦੀ ਹੈ\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"
+"ਨੈੱਟਵਰਕ-ਮੈਨੇਜਰ ਇਸ ਨੂੰ ਇੱਕ ਨਵੇਂ ਚਿਰ-ਸਥਾਈ ਮੇਜਬਾਨ ਨਾਂ ਵਜੋਂ ਸੈੱਟ ਕਰ ਦੇਵੇਗਾ।\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"
+"ਨੈੱਟਵਰਕ-ਮੈਨੇਜਰ ਲਾਗਿੰਗ ਪੱਧਰ ਅਤੇ ਡੋਮੇਨਾਂ ਪà©à¨°à¨¾à¨ªà¨¤ ਕਰੋ ਜਾਂ ਬਦਲੋ।\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"
+"ਕਮਾਂਡ := { [ 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"
+"ਆਰਗੂਮੈਂਟ := [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"
+"ਕਮਾਂਡ := { 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 "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; ਮਨਜ਼ੂਰ ਖੇਤਰ: %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 "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 "ਨੈੱਟਵਰਕਮੈਨੇਜਰ ਅਧਿਕਾਰ"
-#: ../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 "ਗਲਤੀ: ਡੀ-ਬੱਸ ਆਬਜੈਕਟ ਪਰਾਕਸੀ ਨਹੀਂ ਬਣਾਇਆ ਜਾ ਸਕਿਆ।"
+#: ../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' value '%s' is not valid here; allowed fields: %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 "ਗਲਤੀ: ਨੈੱਟਵਰਕਮੈਨੇਜਰ ਵਲੋਂ ਸਲੀਪ (sleep) ਹਾਲਤ à¨à¨•à¨¸à¨ªà©‹à¨°à¨Ÿ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ।"
+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 "ਵਾਈਫਾਈ ਚਾਲੂ ਹੈ"
+#: ../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 "WiFi enabled"
-msgid "WiMAX enabled"
-msgstr "ਵਾਈਮੈਕਸ ਚਾਲੂ ਹੈ"
+#: ../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:585
+#: ../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: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"
-#| " -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"
@@ -1780,18 +3926,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 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"
+"ਵਰਤੋਂ: %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"
@@ -1800,379 +3951,873 @@ 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 "ਗਲਤੀ: Option '--terse' is mutually exclusive with '--pretty'."
-#: ../cli/src/nmcli.c:164
+#: ../cli/src/nmcli.c:175
#, c-format
msgid "Error: Option '--pretty' is specified the second time."
msgstr "ਗਲਤੀ: Option '--pretty' is specified the second time."
-#: ../cli/src/nmcli.c:169
+#: ../cli/src/nmcli.c:180
#, c-format
msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
msgstr "ਗਲਤੀ: Option '--pretty' is mutually exclusive with '--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' is not valid argument for '%s' option."
-#: ../cli/src/nmcli.c:211
+#: ../cli/src/nmcli.c:222
#, c-format
msgid "Error: fields for '%s' options are missing."
msgstr "ਗਲਤੀ: fields for '%s' options are missing."
-#: ../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' is not a valid timeout for '%s' option."
+
+#: ../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 "Caught signal %d, shutting down..."
-msgstr "%d ਸਿਗਨਲ ਮਿਲਿਆ, ਬੰਦ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ..."
+msgid "\n"
+"Error: nmcli terminated by signal %d."
+msgstr "\n"
+"ਗਲਤੀ: nmcli ਨੂੰ ਸੰਕੇਤ %d ਦà©à¨†à¨°à¨¾ ਖਤਮ ਕੀਤਾ ਗਿਆ।"
-#: ../cli/src/nmcli.c:269
-#| msgid "Error: Couldn't create D-Bus object proxy."
+#: ../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: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 ਗà©à¨ªà¨¤-ਕੋਡ)"
-#: ../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 (ਚਾਲੂ ਹੈ, ਪਸੰਦੀਦਾ ਪਬਲਿਕ 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' ਇੱਕ ਢà©à¨•à¨µà¨¾à¨‚ 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"
+"ਉਦਾਹਰਣ: ਸà©à¨°à¨¿à©°à¨¦à¨° ਮਨਦੀਪ ਅਨà©à¨œ\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 ਸਰਵਰਾਂ ਦੇ IPv4 ਪਤਿਆਂ ਦੀ ਇੱਕ ਸੂਚੀ ਭਰੋ। ਜੇ 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"
+" ਚੋਣ = <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 (ਅਣਪਛਾਤਾ), 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: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 "Option '--terse' requires specifying '--fields'"
-#: ../cli/src/utils.c:258
+#: ../cli/src/utils.c:751
#, c-format
msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
-msgstr "Option '--terse' requires specific '--fields' option values , not '%s'"
-
-#: ../cli/src/utils.c:468
-#, c-format
-#| msgid "Error: Couldn't create D-Bus object proxy."
-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"
+msgstr ""
+"Option '--terse' requires specific '--fields' option values , not '%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 "
"execution using --nocheck, but the results are unpredictable."
msgstr ""
-"ਗਲਤੀ: nmcli (%s) ਅਤੇ ਨੈੱਟਵਰਕਮੈਨੇਜਰ (NetworkManager) (%s) ਵਰਜਨ ਮੇਲ ਨਹੀਂ ਖਾਂਦਾ "
-"ਹੈ। "
-"--nocheck ਦੀ ਵਰਤੋਂ ਨਾਲ ਚੱਲਣ ਲਈ ਮਨਜ਼ੂਰ ਕਰੋ, ਪਰ ਨਤੀਜੇ ਅਣਕਿਆਸੇ ਹੋ ਸਕਦੇ ਹਨ।"
+"ਗਲਤੀ: nmcli (%s) ਅਤੇ ਨੈੱਟਵਰਕਮੈਨੇਜਰ (NetworkManager) (%s) ਸੰਸਕਰਣ ਮੇਲ ਨਹੀਂ "
+"ਖਾਂਦਾ ਹੈ। --nocheck ਦੀ ਵਰਤੋਂ ਨਾਲ ਚੱਲਣ ਲਈ ਮਨਜ਼ੂਰ ਕਰੋ, ਪਰ ਨਤੀਜੇ ਅਣਕਿਆਸੇ ਹੋ ਸਕਦੇ "
+"ਹਨ।"
#: ../libnm-util/crypto.c:133
#, c-format
msgid "PEM key file had no end tag '%s'."
-msgstr "PEM ਕà©à©°à¨œà©€ ਫਾਇਲ ਦਾ ਕੋਈ ਅੰਤ ਟੈਗ '%s' ਨਹੀਂ ਹੈ।"
+msgstr "PEM ਕà©à©°à¨œà©€ ਫਾਈਲ ਦਾ ਕੋਈ ਅੰਤ ਟੈਗ '%s' ਨਹੀਂ ਹੈ।"
#: ../libnm-util/crypto.c:146
#, c-format
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 ਫਾਇਲ ਡਾਟਾ ਸਟੋਰ ਕਰਨ ਲਈ ਲੋੜੀਦੀ ਮੈਮੋਰੀ ਨਹੀਂ ਹੈ।"
+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 ਪਹਿਲਾਂ ਟੈਗ ਨਹੀਂ ਹੈ।"
+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' ਹੈ।"
+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 ਦੂਜਾ ਟੈਗ ਨਹੀਂ ਹੈ।"
+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 ਨਹੀਂ ਲੱਭਿਆ।"
+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"
+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'।"
+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' ਲੱਭਣ ਲਈ ਫੇਲà©à¨¹ ਹੈ।"
+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' ਲੱਭਣ ਲਈ ਫੇਲà©à¨¹ ਹੈ।"
+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 ਲਈ ਲੰਬਾਈ ਜਿਸਤ ਅੰਕ ਹੋਣੀ ਲਾਜ਼ਮੀ ਹੈ।"
+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 "ਸਰਟੀਫਿਕੇਟ ਡੀਕੋਡ ਕਰਨ ਲਈ ਫੇਲà©à¨¹ ਹੈ।"
@@ -2191,100 +4836,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 "%s / %s : ਡਿਕà©à¨°à¨¿à¨ªà¨Ÿ ਲਈ IV ਸੈੱਟ ਕਰਨ ਲਈ ਫੇਲà©à¨¹ ਹੈ।"
-#: ../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"
@@ -2303,351 +4936,651 @@ 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: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: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 "Not enough memory to make encryption key."
-msgstr "ਇੰਕà©à¨°à¨¿à¨ªà¨¸à¨¼à¨¨ ਕà©à©°à¨œà©€ ਬਣਾਉਣ ਲਈ ਲੋੜੀਦੀ ਮੈਮੋਰੀ ਨਹੀਂ ਹੈ।"
+msgid "'%s=%s' is not a valid configuration for '%s'"
+msgstr "'%s=%s' ਇੱਕ ਜਾਇਜ ਸੰਰਚਨਾ ਨਹੀਂ ਹੈ '%s' ਲਈ"
-#: ../libnm-util/nm-utils.c:2150
-msgid "Could not allocate memory for PEM file creation."
-msgstr "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 "'%s' ਚੋਣ ਲਈ '%s' ਚੋਣ ਸੈੱਟ ਕੀਤੀ ਜਾਣੀ ਲੋੜੀਂਦੀ ਹੈ"
-#: ../libnm-util/nm-utils.c:2162
+#: ../libnm-util/nm-setting-bond.c:659
#, c-format
-msgid "Could not allocate memory for writing IV to PEM file."
-msgstr "PEM ਫਾਇਲ ਵਾਸਤੇ IV ਲਿਖਣ ਲਈ ਮੈਮੋਰੀ ਦਿੱਤੀ ਨਹੀਂ ਜਾ ਸਕੀ।"
+msgid "'%s' option is empty"
+msgstr "'%s' ਚੋਣ ਖਾਲੀ ਹੈ"
-#: ../libnm-util/nm-utils.c:2174
+#: ../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:2193
+#: ../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 ਸੰਰਚਨਾ ਪਰਵਾਨ ਨਹੀਂ ਹੈ"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1
+#: ../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' ਇੱਕ ਢà©à¨•à¨µà¨¾à¨‚ ਵਾਈ-ਫਾਈ ਮੋਡ ਨਹੀਂ ਹੈ"
+
+#: ../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"
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 ""
"ਨੈੱਟਵਰਕਮੈਨਜੇਰ ਨੂੰ ਸਲੀਪ ਕਰੋ ਜਾਂ ਵੇਕ ਅੱਪ ਕਰੋ (ਕੇਵਲ ਸਿਸਟਮ ਪਾਵਰ ਮੈਨਜੇਮੈਂਟ ਰਾਹੀਂ "
-"ਵਰਤਿਆ ਜਾਣਾ ਚਾਹੀਦਾ "
-"ਹੈ)"
+"ਵਰਤਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ)"
-#: ../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 "ਸਿਸਟਮ ਪਾਲਸੀ ਨੈੱਟਵਰਕਮੈਨੇਜਰ ਨੂੰ ਸਲੀਪ ਜਾਂ ਵੇਕਅੱਪ ਕਰਨ ਤੋਂ ਰੋਕਦੀ ਹੈ"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:5
msgid "Enable or disable WiFi devices"
msgstr "ਵਾਈ-ਫਾਈ ਜੰਤਰ ਚਾਲੂ ਜਾਂ ਬੰਦ ਕਰੋ"
-#: ../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 "ਸਿਸਟਮ ਪਾਲਸੀ ਵਾਈ-ਫਾਈ ਜੰਤਰ ਚਾਲੂ ਜਾਂ ਬੰਦ ਕਰਨੋਂ ਰੋਕਦੀ ਹੈ"
-#: ../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
-#| msgid "Enable or disable mobile broadband devices"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:9
msgid "Enable or disable WiMAX mobile broadband devices"
msgstr "ਵਾਈ-ਮੈਕਸ ਮੋਬਾਇਲ ਬਰਾਡਬੈਂਡ ਜੰਤਰ ਚਾਲੂ ਜਾਂ ਬੰਦ ਕਰੋ"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10
-#| msgid ""
-#| "System policy prevents enabling or disabling mobile broadband devices"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:10
msgid ""
"System policy prevents enabling or disabling WiMAX mobile broadband devices"
-msgstr "ਸਿਸਟਮ ਪਾਲਸੀ ਵਾਈਮੈਕਸ ਮੋਬਾਇਲ ਬਰਾਡਬੈਂਡ ਜੰਤਰ ਚਾਲੂ ਜਾਂ ਬੰਦ ਕਰਨ ਤੋਂ ਰੋਕਦੀ ਹੈ"
+msgstr ""
+"ਸਿਸਟਮ ਪਾਲਸੀ ਵਾਈਮੈਕਸ ਮੋਬਾਇਲ ਬਰਾਡਬੈਂਡ ਜੰਤਰ ਚਾਲੂ ਜਾਂ ਬੰਦ ਕਰਨ ਤੋਂ ਰੋਕਦੀ ਹੈ"
-#: ../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 "ਸà©à¨°à©±à¨–ਿਅਤ ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕ ਰਾਹੀਂ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਸਾਂà¨à¨¾ ਕਰੋ"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:14
-msgid "System policy prevents sharing connections via a protected WiFi network"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:14
+msgid ""
+"System policy prevents sharing connections via a protected WiFi network"
msgstr ""
-"ਸਿਸਟਮ ਪਾਲਸੀ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਨੂੰ ਸà©à¨°à©±à¨–ਿਅਤ ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕ ਰਾਹੀਂ ਸਾਂà¨à¨¾ ਕਰਨ ਤੋਂ ਰੋਕਦੀ ਹੈ"
+"ਸਿਸਟਮ ਪਾਲਸੀ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਨੂੰ ਸà©à¨°à©±à¨–ਿਅਤ ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕ ਰਾਹੀਂ ਸਾਂà¨à¨¾ ਕਰਨ ਤੋਂ ਰੋਕਦੀ "
+"ਹੈ"
-#: ../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 "ਓਪਨ ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕ ਰਾਹੀਂ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਸਾਂà¨à¨¾ ਕਰੋ"
-#: ../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 ""
"ਸਿਸਟਮ ਪਾਲਸੀ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਨੂੰ ਓਪਨ ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕ ਰਾਹੀਂ ਸਾਂà¨à¨¾ ਕਰਨ ਤੋਂ ਰੋਕਦੀ ਹੈ"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:17
-#| msgid "Allow control of network connections"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:17
msgid "Modify personal network connections"
msgstr "ਨਿੱਜੀ ਨੈੱਟਵਰਕ ਕà©à¨¨à©ˆà¨•à¨¶à¨¨ ਸੋਧੋ"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:18
-#| msgid "System policy prevents modification of system settings"
+#: ../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
-#| msgid "Modify system connections"
+#: ../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
-#| msgid "System policy prevents modification of system settings"
+#: ../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 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 "ਨੈੱਟਵਰਕਮੈਨੇਜਰ ਪਹਿਲਾਂ ਹੀ ਚੱਲ ਰਿਹਾ ਹੈ (pid %ld)\n"
-#: ../src/main.c:376
-#| msgid "NetworkManager status"
+#: ../src/main.c:329
msgid "Print NetworkManager version and exit"
msgstr "ਨੈੱਟਵਰਕਮੈਨੇਜਰ ਵਰਜਨ ਦਿਉ ਅਤੇ ਬੰਦ ਕਰੋ"
-#: ../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 "ਸੰਰਚਨਾ ਫਾਇਲ ਟਿਕਾਣਾ"
-
-#: ../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 "ਪਲੱਗਇਨ1,ਪਲੱਗਇਨ2"
-
-#. 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 "ਵਾਹ!"
-
-#: ../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:419
+#: ../src/main.c:369
+#, c-format
+msgid "You must be root to run NetworkManager!\n"
+msgstr "ਨੈੱਟਵਰਕਮੈਨੇਜਰ ਚਲਾਉਣ ਲਈ ਤà©à¨¹à¨¾à¨¡à¨¾ ਰੂਟ (root) ਹੋਣਾ ਲਾਜ਼ਮੀ ਹੈ!\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"
@@ -2659,553 +5592,1056 @@ msgstr ""
"ਪà©à¨†à¨‡à©°à¨Ÿ ਦੇਣ ਲਈ ਵੀ ਸਹਾਇਕ ਹੈ, ਜਿਸ ਨਾਲ ਕੰਪਿਊਟਰ ਵਿਚਲੇ ਬੇਤਾਰ ਕਾਰਡ\n"
"ਸਬੰਧਿਤ ਹੋਣੇ ਚਾਹੀਦੇ ਹਨ।"
-#: ../src/main.c:425
+#: ../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:435
+#: ../src/main.c:412
#, c-format
-#| msgid "Error: Could not connect to NetworkManager."
-msgid "You must be root to run NetworkManager!\n"
-msgstr "ਨੈੱਟਵਰਕਮੈਨੇਜਰ ਚਲਾਉਣ ਲਈ ਤà©à¨¹à¨¾à¨¡à¨¾ ਰੂਟ (root) ਹੋਣਾ ਲਾਜ਼ਮੀ ਹੈ!\n"
+msgid "%s. Please use --help to see a list of valid options.\n"
+msgstr "%s। ਢà©à©±à¨•à¨µà©€à¨†à¨‚ ਚੋਣਾਂ ਦੀ ਲਿਸਟ ਵੇਖਣ ਲਈ --help ਵਰਤੋਂ ਜੀ।\n"
-#: ../src/main.c:456
+#: ../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:467
+#: ../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:474
+#: ../src/main.c:495
#, c-format
msgid "State file %s parsing failed: (%d) %s\n"
msgstr "ਹਾਲਤ ਫਾਇਲ %s ਪਾਰਸ ਕਰਨ ਲਈ ਫੇਲà©à¨¹: (%d) %s\n"
-#: ../src/main.c:491
+#: ../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:62
+#: ../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:69
+#: ../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:380
+#: ../src/dns-manager/nm-dns-manager.c:401
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr "ਨੋਟ: libc ਰਿਜ਼ੋਲਵਰ ੩ ਤੋਂ ਵੱਧ ਨੇਮ-ਸਰਵਰ ਲਈ ਸਹਾਇਕ ਨਹੀਂ ਹੋ ਸਕਦਾ ਹੈ।"
-#: ../src/dns-manager/nm-dns-manager.c:382
+#: ../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 "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(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:191
+#: ../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:1328
+#: ../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:1328 ../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 "Cannot add VPN connection"
msgid "InfiniBand connection %d"
msgstr "ਇਫੀਂਬੈਂਡ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ %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 "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 "ਨੈੱਟਲਿੰਕ ਸà©à¨¨à©‡à¨¹à©‡ ਉੱਤੇ ਕਾਰਵਾਈ ਕਰਨ ਦੌਰਾਨ ਗਲਤੀ: %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 "ਲਿੰਕ ਹਾਲਤ ਦੀ ਨਿਗਰਾਨੀ ਲਈ ਨੈੱਟਲਿੰਕ ਜਾਰੀ ਕਰਨ ਲਈ ਅਸਮਰੱਥ: %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 "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 "ਨੈੱਟਵਰਕ-ਮੈਨੇਜਰ ਨੂੰ ਨੈੱਟਵਰਕਾਂ ਨੂੰ ਬੰਦ ਕਰਨ ਦੀ ਲੋੜ ਹੈ"
-#: ../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:3657
+#: ../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:112
+#: ../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:143
-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:144
-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:145
+#: ../test/nm-online.c:106
msgid "Don't print anything"
msgstr "ਕà©à¨ ਵੀ ਪਰਿੰਟ ਨਾ ਕਰੋ"
-#: ../test/nm-online.c:163
-#| 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: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 "ਗਲਤ ਚੋਣ। ਢà©à©±à¨•à¨µà©€à¨†à¨‚ ਚੋਣਾਂ ਵੇਖਣ ਲਈ --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 "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 ਜਾਲੀ"
+
+#: ../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"
+
+#: ../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 (ਸਿਫਾਰਸ਼ੀ)"
-#~ msgid "system"
-#~ msgstr "ਸਿਸਟਮ"
+#: ../tui/nmt-page-bond.c:101
+msgid "ARP"
+msgstr "ARP"
-#~ msgid "user"
-#~ msgstr "ਯੂਜ਼ਰ"
+#: ../tui/nmt-page-bond.c:359 ../tui/nmt-page-bridge.c:86
+#: ../tui/nmt-page-team.c:159
+msgid "Slaves"
+msgstr "ਮਾਤਹਿਤ"
-#~ msgid "System connections"
-#~ 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 "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 "ਆਵਾਜਾਈ ਮੋਡ"
-#~ msgid "User connections"
-#~ msgstr "ਯੂਜ਼ਰ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨"
+#: ../tui/nmt-page-ip4.c:41
+msgid "Disabled"
+msgstr "ਅਯੋਗ ਕੀਤਾ"
-#~ msgid "state: %s\n"
-#~ msgstr "ਹਾਲਤ: %s\n"
+#: ../tui/nmt-page-ip4.c:42 ../tui/nmt-page-ip6.c:42
+msgid "Automatic"
+msgstr "ਸà©à¨µà©ˆ-ਚਲਿਤ"
-#~ msgid "Connection activated\n"
-#~ msgstr "ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਚਾਲੂ ਕੀਤਾ\n"
+#: ../tui/nmt-page-ip4.c:43 ../tui/nmt-page-ip6.c:44
+msgid "Link-Local"
+msgstr "ਲਿੰਕ-ਸਥਾਨਕ"
-#~ msgid "state: %s (%d)\n"
-#~ msgstr "ਹਾਲਤ: %s (%d)\n"
+#: ../tui/nmt-page-ip4.c:44 ../tui/nmt-page-ip6.c:45
+msgid "Manual"
+msgstr "ਦਸਤੀ"
-#~ msgid "Error: Obtaining active connection for '%s' failed."
-#~ msgstr "ਗਲਤੀ: '%s' ਲਈ ਚਾਲੂ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਲੈਣ ਲਈ ਫੇਲà©à¨¹ ਹੈ।"
+#: ../tui/nmt-page-ip4.c:45
+msgid "Shared"
+msgstr "ਸਾਂà¨à¨¾"
-#~ msgid "Active connection state: %s\n"
-#~ msgstr "ਚਾਲੂ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਹਾਲਤ: %s\n"
+#: ../tui/nmt-page-ip4.c:54
+msgid "IPv4 CONFIGURATION"
+msgstr "IPv4 ਸੰਰਚਨਾ"
-#~ msgid "Active connection path: %s\n"
-#~ msgstr "ਚਾਲੂ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਪਾਥ: %s\n"
+#: ../tui/nmt-page-ip4.c:100 ../tui/nmt-page-ip6.c:100
+msgid "(No custom routes)"
+msgstr "(ਕੋਈ ਚà©à¨£à¨¿à©°à¨¦à¨¾ ਰਾਹ ਨਹੀਂ)"
-#~ msgid "Error: Could not get user settings."
-#~ 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 "ਰੂਟਿੰਗ"
-#~ msgid "IP4-SETTINGS"
-#~ msgstr "IP4-ਸੈਟਿੰਗ"
+#: ../tui/nmt-page-ip4.c:176 ../tui/nmt-page-ip6.c:174
+msgid "Never use this network for default route"
+msgstr "ਮੂਲ ਰਾਹ ਲਈ ਇਸ ਨੈੱਟਵਰਕ ਨੂੰ ਕਦੇ ਨਾ ਵਰਤੋ"
-#~ msgid "IP6-SETTINGS"
-#~ msgstr "IP6-ਸੈਟਿੰਗ"
+#: ../tui/nmt-page-ip4.c:184
+msgid "Require IPv4 addressing for this connection"
+msgstr "ਇਸ ਸੰਪਰਕ ਲਈ IPv4 ਪਤਿਆਂ ਦੀ ਲੋੜ ਹੈ"
-#~ msgid "PREFIX"
-#~ msgstr "ਪà©à¨°à©€-ਫਿਕਸ"
+#: ../tui/nmt-page-ip6.c:41
+msgid "Ignore"
+msgstr "ਅਣਗੌਲਿਆ ਕਰੋ"
-#~ msgid "unknown)"
-#~ msgstr "ਅਣਜਾਣ)"
+#: ../tui/nmt-page-ip6.c:43
+msgid "Automatic (DHCP-only)"
+msgstr "ਸà©à¨µà©ˆ-ਚਲਿਤ (ਸਿਰਫ-DHCP)"
-#~ msgid "Device state: %d (%s)\n"
-#~ msgstr "ਜੰਤਰ ਹਾਲਤ: %d (%s)\n"
+#: ../tui/nmt-page-ip6.c:54
+msgid "IPv6 CONFIGURATION"
+msgstr "IPv6 ਸੰਰਚਨਾ"
-#~ msgid "not set"
-#~ msgstr "ਸੈੱਟ ਨਹੀਂ ਹੈ"
+#: ../tui/nmt-page-ip6.c:182
+msgid "Require IPv6 addressing for this connection"
+msgstr "ਇਸ ਸੰਪਰਕ ਲਈ IPv6 ਪਤਿਆਂ ਦੀ ਲੋੜ ਹੈ"
-#~ msgid "Allow use of user-specific connections"
-#~ msgstr "ਖਾਸ ਯੂਜ਼ਰ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨à¨¾à¨‚ ਦੀ ਵਰਤੋਂ ਮਨਜ਼ੂਰ"
+#: ../tui/nmt-page-main.c:134
+msgid "Hide"
+msgstr "ਲà©à¨•à¨¾à¨‰"
-#~ msgid "System policy prevents use of user-specific connections"
-#~ msgstr "ਸਿਸਟਮ ਪਾਲਸੀ ਖਾਸ-ਯੂਜ਼ਰ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਵਰਤੋਂ ਤੋਂ ਰੋਕਦੀ ਹੈ"
+#: ../tui/nmt-page-main.c:134
+msgid "Show"
+msgstr "ਵਿਖਾਉ"
-#~ msgid "Auto %s"
-#~ msgstr "ਆਟੋ %s"
+#: ../tui/nmt-page-main.c:181
+msgid "Profile name"
+msgstr "ਪਰੋਫਾਈਲ ਨਾਂ"
-#~ msgid "Type"
-#~ msgstr "ਕਿਸਮ"
+#: ../tui/nmt-page-main.c:188
+msgid "Device"
+msgstr "ਯੰਤਰ"
-#~ msgid "Name"
-#~ msgstr "ਨਾਂ"
+#: ../tui/nmt-page-main.c:252
+msgid "Automatically connect"
+msgstr "ਸà©à¨µà©ˆ-ਚਲਿਤ ਜà©à©œà©‹"
-#~ msgid "User connections:\n"
-#~ msgstr "ਯੂਜ਼ਰ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨:\n"
+#: ../tui/nmt-page-main.c:258
+msgid "Available to all users"
+msgstr "ਸਾਰੇ ਯੂਜ਼ਰਾਂ ਨੂੰ ਉਪਲੱਬਧ"
-#~ msgid "System-wide connections"
-#~ msgstr "ਸਿਸਟਮ-ਲਈ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨"
+#: ../tui/nmt-page-team-port.c:45
+msgid "TEAM PORT"
+msgstr "ਟੋਲੀ ਪੋਰਟ"
-#~ msgid "Default"
-#~ msgstr "ਡਿਫਾਲਟ"
+#: ../tui/nmt-page-team-port.c:100 ../tui/nmt-page-team.c:170
+msgid "JSON configuration"
+msgstr "JSON ਸੰਰਚਨਾ"
-#~ msgid "Service"
-#~ msgstr "ਸਰਵਿਸ"
+#: ../tui/nmt-page-team.c:51
+msgid "TEAM"
+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-vlan.c:109
+msgid "Parent"
+msgstr "ਪà©à¨°à¨®à©à©±à¨–"
-#~ msgid "Device"
-#~ msgstr "ਜੰਤਰ"
+#: ../tui/nmt-page-vlan.c:124
+msgid "VLAN id"
+msgstr "VLAN id"
-#~ msgid "Driver"
-#~ msgstr "ਡਰਾਇਵਰ"
+#: ../tui/nmt-page-wifi.c:58
+msgid "WI-FI"
+msgstr "WI-FI"
-#~ msgid "State"
-#~ 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 "ਕੋਈ ਨਹੀਂ"
-#~ msgid "HW Address"
-#~ msgstr "HW à¨à¨¡à¨°à©ˆà©±à¨¸"
+#: ../tui/nmt-page-wifi.c:86
+msgid "WPA & WPA2 Personal"
+msgstr "WPA & WPA2 ਨਿੱਜੀ"
-#~ msgid ""
-#~ "\n"
-#~ " Capabilities:\n"
-#~ msgstr ""
-#~ "\n"
-#~ " ਸਮਰੱਥਾ:\n"
+#: ../tui/nmt-page-wifi.c:87
+msgid "WPA & WPA2 Enterprise"
+msgstr "WPA & WPA2 ਉਦਯੋਗ"
-#~ msgid "Carrier Detect"
-#~ msgstr "ਕੈਰੀਅਰ ਖੋਜ"
+#: ../tui/nmt-page-wifi.c:88
+msgid "WEP 40/128-bit Key (Hex or ASCII)"
+msgstr "WEP 40/128-bit ਚਾਬੀ (Hex ਜਾਂ ASCII)"
-#~ msgid "Speed"
-#~ msgstr "ਸਪੀਡ"
+#: ../tui/nmt-page-wifi.c:89
+msgid "WEP 128-bit Passphrase"
+msgstr "WEP 128-bit ਪਛਾਣ-ਵਾਕ"
-#~ msgid ""
-#~ "\n"
-#~ " Wireless Properties\n"
-#~ msgstr ""
-#~ "\n"
-#~ " ਬੇਤਾਰ ਵਿਸ਼ੇਸ਼ਤਾ\n"
+#: ../tui/nmt-page-wifi.c:90
+msgid "Dynamic WEP (802.1x)"
+msgstr "ਡਾਇਨਾਮਿਕ WEP (802.1x)"
-#~ msgid "WEP Encryption"
-#~ msgstr "WEP ਇੰਕà©à¨°à¨¿à¨ªà¨¸à¨¼à¨¨"
+#: ../tui/nmt-page-wifi.c:91
+msgid "LEAP"
+msgstr "ਲੀਪ"
-#~ msgid "WPA Encryption"
-#~ msgstr "WPA ਇੰਕà©à¨°à¨¿à¨ªà¨¸à¨¼à¨¨"
+#: ../tui/nmt-page-wifi.c:96
+msgctxt "WEP key index"
+msgid "1 (Default)"
+msgstr "1 (ਮੂਲ)"
-#~ msgid "WPA2 Encryption"
-#~ msgstr "WPA2 ਇੰਕà©à¨°à¨¿à¨ªà¨¸à¨¼à¨¨"
+#: ../tui/nmt-page-wifi.c:97
+msgctxt "WEP key index"
+msgid "2"
+msgstr "2"
-#~ msgid "TKIP cipher"
-#~ msgstr "TKIP ਸਿਫਰ"
+#: ../tui/nmt-page-wifi.c:98
+msgctxt "WEP key index"
+msgid "3"
+msgstr "3"
-#~ msgid "CCMP cipher"
-#~ msgstr "CCMP ਸੀਫਰ"
+#: ../tui/nmt-page-wifi.c:99
+msgctxt "WEP key index"
+msgid "4"
+msgstr "4"
-#~ msgid ""
-#~ "\n"
-#~ " Wireless Access Points %s\n"
-#~ msgstr ""
-#~ "\n"
-#~ " ਬੇਤਾਰ ਅਸੈੱਸ ਪà©à¨†à¨‡à©°à¨Ÿ %s\n"
+#: ../tui/nmt-page-wifi.c:104
+msgid "Open System"
+msgstr "ਖà©à©±à¨²à¨¾ ਸਿਸਟਮ"
-#~ msgid "(* = current AP)"
-#~ msgstr "(* = current AP)"
+#: ../tui/nmt-page-wifi.c:105
+msgid "Shared Key"
+msgstr "ਸਾਂà¨à©€ ਚਾਬੀ"
-#~ msgid ""
-#~ "\n"
-#~ " Wired Properties\n"
-#~ msgstr ""
-#~ "\n"
-#~ " ਤਾਰ ਨਾਲ ਵਿਸ਼ੇਸ਼ਤਾ\n"
+#: ../tui/nmt-page-wifi.c:253
+msgid "Channel"
+msgstr "ਚੈਨਲ"
-#~ msgid "Carrier"
-#~ msgstr "ਕੈਰੀਅਰ"
+#: ../tui/nmt-page-wifi.c:258
+msgid "Security"
+msgstr "ਸà©à¨°à©±à¨–ਿਆ"
-#~ msgid ""
-#~ "\n"
-#~ " IPv4 Settings:\n"
-#~ msgstr ""
-#~ "\n"
-#~ " IPv4 ਵਿਸ਼ੇਸ਼ਤਾ:\n"
+#: ../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 "ਗà©à¨ªà¨¤-ਸ਼ਬਦ"
-#~ msgid "Address"
-#~ msgstr "à¨à¨¡à¨°à©ˆà©±à¨¸"
+#: ../tui/nmt-page-wifi.c:279
+msgid "(No support for wpa-enterprise yet...)"
+msgstr "(wpa-ਉਦਯੋਗਿਕ ਲਈ ਅਜੇ ਸਮਰਥਨ ਨਹੀਂ...)"
-#~ msgid "Prefix"
-#~ msgstr "ਪà©à¨°à©€-ਫਿਕਸ"
+#: ../tui/nmt-page-wifi.c:286 ../tui/nmt-secret-agent.c:265
+msgid "Key"
+msgstr "ਚਾਬੀ"
-#~ msgid "Gateway"
-#~ msgstr "ਗੇਟਵੇ"
+#: ../tui/nmt-page-wifi.c:289 ../tui/nmt-page-wifi.c:308
+msgid "WEP index"
+msgstr "WEP ਇੰਡੈਕਸ"
-#~ msgid "Device:"
-#~ msgstr "ਜੰਤਰ:"
+#: ../tui/nmt-page-wifi.c:297 ../tui/nmt-page-wifi.c:316
+msgid "Authentication"
+msgstr "ਪà©à¨°à¨®à¨¾à¨£à¨¿à¨•à¨¤à¨¾"
-#~ msgid "Error: hwaddr has to be specified."
-#~ msgstr "ਗਲਤੀ: hwaddr ਦੇਣ ਦੀ ਲੋੜ ਹੈ।"
+#: ../tui/nmt-page-wifi.c:322
+msgid "(No support for dynamic-wep yet...)"
+msgstr "(ਡਾਇਨਾਮਿਕ-wep ਲਈ ਅਜੇ ਕੋਈ ਸਮਰਥਨ ਨਹੀਂ...)"
-#~ msgid "AP parameters"
-#~ msgstr "AP ਪੈਰਾਮੀਟਰ"
+#: ../tui/nmt-page-wifi.c:329 ../tui/nmt-secret-agent.c:209
+#: ../tui/nmt-secret-agent.c:304
+msgid "Username"
+msgstr "ਯੂਜ਼ਰ-ਨਾਂ"
-#~ msgid "Frequency:"
-#~ msgstr "ਫਰੀਕਿਊਨਸੀ:"
+#: ../tui/nmt-password-fields.c:130
+msgid "Ask for this password every time"
+msgstr "ਇਸ ਗà©à¨ªà¨¤-ਸ਼ਬਦ ਲਈ ਹਰ ਵਾਰ ਪà©à©±à¨›à©‹"
-#~ msgid "Mode:"
-#~ msgstr "ਮੋਡ:"
+#: ../tui/nmt-password-fields.c:131
+msgid "Show password"
+msgstr "ਗà©à¨ªà¨¤-ਸ਼ਬਦ ਵਿਖਾਉ"
-#~ msgid "Ad-hoc"
-#~ msgstr "Ad-hoc"
+#: ../tui/nmt-route-table.c:219
+msgid "Destination"
+msgstr "ਟਿਕਾਣਾ"
-#~ msgid "Maximal bitrate:"
-#~ msgstr "ਵੱਧੋ-ਵੱਧ ਬਿੱਟਰੇਟ:"
+#: ../tui/nmt-route-table.c:219
+msgid "Prefix"
+msgstr "ਅਗੇਤਰ"
-#~ msgid "Strength:"
-#~ msgstr "ਤਾਕਤ:"
+#: ../tui/nmt-route-table.c:228
+msgid "Next Hop"
+msgstr "ਅਗਲੀ ਛਾਲ"
-#~ msgid "Flags:"
-#~ msgstr "ਫਲੈਗ:"
+#: ../tui/nmt-route-table.c:236
+msgid "Metric"
+msgstr "ਮੀਟਰਿਕ"
-#~ msgid "privacy"
-#~ msgstr "ਪਰਾਈਵੇਸੀ"
+#: ../tui/nmt-route-table.c:256
+msgid "No custom routes are defined."
+msgstr "ਕੋਈ ਚà©à¨£à¨¿à©°à¨¦à¨¾ ਰੂਟ ਪਰਿਭਾਸ਼ਤ ਨਹੀਂ ਹਨ।"
-#~ msgid "WPA flags:"
-#~ msgstr "WPA ਫਲੈਗ:"
+#: ../tui/nmt-secret-agent.c:223
+msgid "Identity"
+msgstr "ਸ਼ਨਾਖਤ"
-#~ msgid "RSN flags:"
-#~ msgstr "RSN ਫਲੈਗ:"
+#: ../tui/nmt-secret-agent.c:228
+msgid "Private key password"
+msgstr "ਨਿੱਜੀ ਚਾਬੀ ਪਛਾਣ-ਵਾਕ"
-#~ msgid "NM running:"
-#~ msgstr "NM ਚੱਲ ਰਿਹਾ ਹੈ:"
+#: ../tui/nmt-secret-agent.c:309
+msgid "Service"
+msgstr "ਸੇਵਾ"
-#~ msgid "NM state:"
-#~ msgstr "NM ਹਾਲਤ:"
+#: ../tui/nmt-secret-agent.c:340
+msgid "Authentication required by wireless network"
+msgstr "ਬੇ-ਤਾਰ ਨੈੱਟਵਰਕ ਦà©à¨†à¨°à¨¾ ਪà©à¨°à¨®à¨¾à¨£à¨¿à¨•à¨¤à¨¾ ਲੋੜੀਂਦੀ"
-#~ msgid "NM wireless hardware:"
-#~ msgstr "NM ਬੇਤਾਰ ਹਾਰਡਵੇਅਰ:"
+#: ../tui/nmt-secret-agent.c:341
+#, c-format
+msgid ""
+"Passwords or encryption keys are required to access the wireless network "
+"'%s'."
+msgstr ""
+"ਬੇ-ਤਾਰ ਨੈੱਟਵਰਕ '%s' ਤੇ ਦਖਲ ਲਈ ਗà©à¨ªà¨¤-ਸ਼ਬਦ ਜਾਂ ਇੰਕà©à¨°à¨¿à¨ªà¨¶à¨¨ ਚਾਬੀਆਂ ਲੋੜੀਂਦੀਆਂ ਹਨ।"
-#~ msgid "NM wireless:"
-#~ msgstr "NM ਬੇਤਾਰ:"
+#: ../tui/nmt-secret-agent.c:349
+msgid "Wired 802.1X authentication"
+msgstr "ਤਾਰ-ਯà©à¨•à¨¤ 802.1X ਪà©à¨°à¨®à¨¾à¨£à¨¿à¨•à¨¤à¨¾"
-#~ msgid "NM WWAN hardware:"
-#~ msgstr "NM WWAN ਹਾਰਡਵੇਅਰ:"
+#: ../tui/nmt-secret-agent.c:352
+msgid "Network name"
+msgstr "ਨੈੱਟਵਰਕ ਨਾਂ"
-#~ msgid "unable to join netlink group for monitoring link status: %s"
-#~ msgstr "ਲਿੰਕ ਹਾਲਤ ਦੀ ਨਿਗਰਾਨੀ ਲਈ ਨੈੱਟਲਿੰਕ ਗਰà©à©±à¨ª ਜà©à¨†à¨‡à©°à¨¨ ਕਰਨ ਲਈ ਅਸਮਰੱਥ: %s"
+#: ../tui/nmt-secret-agent.c:359
+msgid "DSL authentication"
+msgstr "DSL ਪà©à¨°à¨®à¨¾à¨£à¨¿à¨•à¨¤à¨¾"
-#~ msgid "unable to connect to netlink: %s"
-#~ msgstr "netlink ਨਾਲ ਕà©à¨¨à©ˆà¨•à¨Ÿ ਹੋਣ ਲਈ ਅਸਮਰੱਥ: %s"
+#: ../tui/nmt-secret-agent.c:367
+msgid "PIN code required"
+msgstr "PIN ਕੋਡ ਲੋੜੀਂਦਾ"
-#~ msgid ""
-#~ "No suitable VPN software was found on your system. Contact your system "
-#~ "administrator."
-#~ msgstr ""
-#~ "ਤà©à¨¹à¨¾à¨¡à©‡ ਸਿਸਟਮ ਉੱਤੇ ਕੋਈ ਠੀਕ VPN ਸਾਫਟਵੇਅਰ ਨਹੀਂ ਲੱਭਾ ਹੈ। ਆਪਣੇ ਸਿਸਟਮ ਪਰਸ਼ਾਸ਼ਕ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।"
+#: ../tui/nmt-secret-agent.c:368
+msgid "PIN code is needed for the mobile broadband device"
+msgstr "ਮੋਬਾਇਲ ਬਰੌਡਬੈਂਡ ਯੰਤਰ ਲਈ PIN ਕੋਡ ਲੋੜੀਂਦਾ ਹੈ"
-#~ msgid "Cannot import VPN connection"
-#~ msgstr "VPN ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਆਯਾਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"
+#: ../tui/nmt-secret-agent.c:370
+msgid "PIN"
+msgstr "PIN"
-#~ msgid ""
-#~ "Cannot find suitable software for VPN connection type '%s' to import the "
-#~ "file '%s'. Contact your system administrator."
-#~ msgstr ""
-#~ "VPN ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਕਿਸਮ '%s' ਲਈ ਫਾਇਲ '%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 ""
-#~ "Could not find the UI files for VPN connection type '%s'. Contact your "
-#~ "system administrator."
-#~ msgstr ""
-#~ "VPN ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਕਿਸਮ '%s' ਲਈ UI ਫਾਇਲਾਂ ਨਹੀਂ ਲੱਭੀਆਂ ਹਨ। ਆਪਣੇ ਸਿਸਟਮ ਪਰਸ਼ਾਸ਼ਕ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।"
+#: ../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 "Delete VPN connection \"%s\"?"
-#~ msgstr "ਕੀ VPN \"%s\" ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਹਟਾਉਣਾ ਹੈ?"
+#: ../tui/nmt-slave-list.c:138
+msgid "Select the type of slave connection you wish to add."
+msgstr "ਜਿਹੜਾ ਮਾਤਹਿਤ ਸੰਪਰਕ ਤà©à¨¸à©€à¨‚ ਜੋੜਨਾ ਚਾਹà©à©°à¨¦à©‡ ਹੋ ਉਹ ਚà©à¨£à©‹à¥¤"
-#~ msgid ""
-#~ "All information about the VPN connection \"%s\" will be lost and you may "
-#~ "need your system administrator to provide information to create a new "
-#~ "connection."
-#~ msgstr ""
-#~ "VPN ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ \"%s\" ਬਾਰੇ ਸਭ ਜਾਣਕਾਰੀ ਖਤਮ ਹੋ ਗਈ ਹੈ ਅਤੇ ਤà©à¨¹à¨¾à¨¨à©‚à©° ਨਵੇਂ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਬਣਾਉਣ ਲਈ "
-#~ "ਜਾਣਕਾਰੀ ਵਾਸਤੇ ਆਪਣੇ ਸਿਸਟਮ ਪਰਸ਼ਾਸ਼ਕ ਨਾਲ ਸੰਪਰਕ ਕਰਨਾ ਪਵੇਗਾ।"
+#: ../tui/nmt-widget-list.c:142
+msgid "Add..."
+msgstr "ਜੋੜੋ..."
-#~ msgid "Unable to load"
-#~ msgstr "ਲੋਡ ਕਰਨ ਲਈ ਫੇਲà©à¨¹"
+#: ../tui/nmt-widget-list.c:205
+msgid "Remove"
+msgstr "ਹਟਾਉ"
-#~ msgid "Cannot find some needed resources (the glade file)!"
-#~ msgstr "ਕà©à¨ ਲੋੜੀਦੇ ਸਰੋਤ ਨਹੀਂ ਮਿਲੇ (ਗਲੇਡ ਫਾਇਲ)!"
+#: ../tui/nmtui-connect.c:82
+msgid "Activation failed"
+msgstr "ਕਿਰਿਆਸ਼ੀਲਤਾ ਅਸਫਲ ਹੋਈ"
-#~ msgid "Create VPN Connection"
-#~ msgstr "VPN ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਬਣਾਓ"
+#: ../tui/nmtui-connect.c:134
+msgid "Connecting..."
+msgstr "ਜà©à©œ ਰਿਹਾ..."
-#~ msgid "Edit VPN Connection"
-#~ msgstr "VPN ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਸੋਧ"
+#: ../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 "ਅਕਿਰਿਆਸ਼ੀਲ ਕਰੋ"
-#~ msgid "Add a new VPN connection"
-#~ msgstr "ਇੱਕ ਨਵਾਂ VPN ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਸ਼ਾਮਿਲ"
+#: ../tui/nmtui-connect.c:279 ../tui/nmtui-edit.c:102 ../tui/nmtui.c:114
+msgid "Quit"
+msgstr "ਛੱਡ ਦਿਉ"
-#~ msgid "Delete the selected VPN connection"
-#~ msgstr "ਚà©à¨£à¨¿à¨† VPN ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਹਟਾਓ"
+#: ../tui/nmtui-connect.c:304
+#, c-format
+msgid "No such connection '%s'"
+msgstr "ਅਜਿਹਾ ਕੋਈ ਸੰਪਰਕ ਨਹੀਂ '%s'"
-#~ msgid "E_xport"
-#~ msgstr "ਨਿਰਯਾਤ(_x)"
+#: ../tui/nmtui-connect.c:306
+msgid "Connection is already active"
+msgstr "ਸੰਪਰਕ ਪਹਿਲਾਂ ਤੋਂ ਹੀ ਸਰਗਰਮ ਹੈ"
-#~ msgid "Edit the selected VPN connection"
-#~ msgstr "ਚà©à¨£à©‡ VPN ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ 'ਚ ਸੋਧ"
+#: ../tui/nmtui-edit.c:209
+msgid "Create"
+msgstr "ਬਣਾਉ"
-#~ msgid "Export the VPN settings to a file"
-#~ msgstr "VPN ਸੈਟਿੰਗ ਨੂੰ ਫਾਇਲ 'ਚ ਭੇਜੋ"
+#: ../tui/nmtui-edit.c:350
+msgid "Select the type of connection you wish to create."
+msgstr "ਜਿਸ ਕਿਸਮ ਦਾ ਨੈੱਟਵਰਕ ਤà©à¨¸à©€à¨‚ ਬਣਾਉਣਾ ਚਾਹà©à©°à¨¦à©‡ ਹੋ ਉਹ ਚà©à¨£à©‹à¥¤"
-#~ msgid "Export the selected VPN connection to a file"
-#~ msgstr "ਚà©à¨£à©‡ VPN ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਫਾਇਲ 'ਚ ਭੇਜੋ"
+#: ../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 "Manage Virtual Private Network Connections"
-#~ msgstr "ਵà©à¨°à¨šà©à¨…ਲ ਪà©à¨°à¨¾à¨ˆà¨µà©‡à¨Ÿ ਨੈੱਟਵਰਕ ਕà©à¨¨à©ˆà¨•à¨¸à¨¼à¨¨ ਪਰਬੰਧ"
+#: ../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 "40-bit WEP"
-#~ msgstr "40-ਬਿੱਟ WEP"
+#: ../tui/nmtui.c:59 ../tui/nmtui.c:62
+msgid "connection"
+msgstr "ਸੰਪਰਕ"
-#~ msgid "104-bit WEP"
-#~ msgstr "104-ਬਿੱਟ WEP"
+#: ../tui/nmtui.c:60
+msgid "Edit a connection"
+msgstr "ਇੱਕ ਸੰਪਰਕ ਸੋਧੋ"
-#~ msgid "WPA Automatic"
-#~ msgstr "WPA ਆਟੋਮੈਟਿਕ"
+#: ../tui/nmtui.c:63
+msgid "Activate a connection"
+msgstr "ਕੋਈ ਸੰਪਰਕ ਕਿਰਿਆਸ਼ੀਲ ਕਰੋ"
-#~ msgid "WPA2 TKIP"
-#~ msgstr "WPA2 TKIP"
+#: ../tui/nmtui.c:65
+msgid "new hostname"
+msgstr "ਨਵਾਂ ਮੇਜਬਾਨ ਨਾਂ"
-#~ msgid "WPA2 CCMP"
-#~ msgstr "WPA2 CCMP"
+#: ../tui/nmtui.c:66
+msgid "Set system hostname"
+msgstr "ਸਿਸਟਮ ਮੇਜਬਾਨ ਨਾਂ ਸੈੱਟ ਕਰੋ"
-#~ msgid "WPA2 Automatic"
-#~ msgstr "WPA2 ਆਟੋਮੈਟਿਕ"
+#: ../tui/nmtui.c:89
+msgid "NetworkManager TUI"
+msgstr "ਨੈੱਟਵਰਕ-ਮੈਨੇਜਰ TUI"
-#~ msgid "operation took too long"
-#~ msgstr "ਓਪਰੇਸ਼ਨ ਨੂੰ ਬਹà©à¨¤ ਸਮਾਂ ਲੱਗ ਗਿਆ"
+#: ../tui/nmtui.c:97
+msgid "Please select an option"
+msgstr "ਕਿਰਪਾ ਕਰ ਕੇ ਕੋਈ ਚੋਣ ਕਰੋ"
-#~ msgid "received data from wrong type of sender"
-#~ msgstr "ਭੇਜਣ ਵਾਲੇ ਦੀ ਗਲਤ ਕਿਸਮ ਤੋਂ ਡਾਟਾ ਮਿਲਿਆ"
+#: ../tui/nmtui.c:154
+msgid "Usage"
+msgstr "ਵਰਤੋਂ"
-#~ msgid "received data from unexpected sender"
-#~ msgstr "ਅਣਜਾਣ ਭੇਜਣ ਵਾਲੇ ਵਲੋਂ ਡਾਟਾ ਮਿਲਿਆ"
+#: ../tui/nmtui.c:221
+msgid "Could not parse arguments"
+msgstr "ਆਰਗੂਮੈਂਟਾਂ ਨੂੰ ਪਾਰਸ ਨਹੀਂ ਕਰ ਸਕਿਆ"
-#~ msgid "too much data was sent over socket and some of it was lost"
-#~ msgstr "ਸਾਕਟ ਉੱਤੇ ਬਹà©à¨¤ ਵੱਧ ਡਾਟਾ ਭੇਜਿਆ ਗਿਆ ਅਤੇ ਇਸ 'ਚੋਂ ਕà©à¨ ਗà©à©°à¨® ਹੋ ਗਿਆ"
+#: ../tui/nmtui.c:229
+msgid "NetworkManager is not running."
+msgstr "ਨੈੱਟਵਰਕ ਮੈਨੇਜਰ ਚੱਲ ਨਹੀਂ ਰਿਹਾ ਹੈ।"
diff --git a/po/pl.po b/po/pl.po
index c19a0ee1f..b4fbd2f94 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -14,8 +14,8 @@ msgstr ""
"Project-Id-Version: NetworkManager\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"
+"POT-Creation-Date: 2014-08-25 22:10+0000\n"
+"PO-Revision-Date: 2014-08-26 20:01+0200\n"
"Last-Translator: Piotr DrÄ…g <piotrdrag@gmail.com>\n"
"Language-Team: Polish <gnomepl@aviary.pl>\n"
"Language: pl\n"
@@ -28,8 +28,8 @@ msgstr ""
"X-Poedit-Country: Poland\n"
#: ../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
+#: ../cli/src/common.c:69 ../cli/src/connections.c:190
+#: ../cli/src/connections.c:212
msgid "GROUP"
msgstr "GRUPA"
@@ -163,7 +163,7 @@ msgstr "łączenie (uruchamianie drugorzędnych połączeń)"
msgid "connected"
msgstr "połączono"
-#: ../cli/src/common.c:701 ../cli/src/connections.c:560
+#: ../cli/src/common.c:701 ../cli/src/connections.c:557
msgid "deactivating"
msgstr "deaktywowanie"
@@ -171,8 +171,8 @@ msgstr "deaktywowanie"
msgid "connection failed"
msgstr "połączenie się nie powiodło"
-#: ../cli/src/common.c:705 ../cli/src/connections.c:565
-#: ../cli/src/connections.c:588 ../cli/src/connections.c:1656
+#: ../cli/src/common.c:705 ../cli/src/connections.c:562
+#: ../cli/src/connections.c:585 ../cli/src/connections.c:1653
#: ../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
@@ -431,7 +431,7 @@ 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
+#: ../libnm-glib/nm-device.c:1837
msgid "Unknown"
msgstr "Nieznane"
@@ -451,45 +451,45 @@ 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
+#: ../cli/src/connections.c:61
msgid "Setting name? "
msgstr "Nazwa ustawienia? "
-#: ../cli/src/connections.c:65
+#: ../cli/src/connections.c:62
msgid "Property name? "
msgstr "Nazwa właściwości? "
-#: ../cli/src/connections.c:66
+#: ../cli/src/connections.c:63
msgid "Enter connection type: "
msgstr "Proszę podać typ połączenia: "
#. define some other prompts
-#: ../cli/src/connections.c:69
+#: ../cli/src/connections.c:66
msgid "Connection type: "
msgstr "Typ połączenia: "
-#: ../cli/src/connections.c:70
+#: ../cli/src/connections.c:67
msgid "VPN type: "
msgstr "Typ VPN: "
-#: ../cli/src/connections.c:71
+#: ../cli/src/connections.c:68
msgid "Bond master: "
msgstr "\"Master\" wiÄ…zania: "
-#: ../cli/src/connections.c:72
+#: ../cli/src/connections.c:69
msgid "Team master: "
msgstr "\"Master\" zespołu: "
-#: ../cli/src/connections.c:73
+#: ../cli/src/connections.c:70
msgid "Bridge master: "
msgstr "\"Master\" mostku: "
-#: ../cli/src/connections.c:74
+#: ../cli/src/connections.c:71
msgid "Connection (name, UUID, or path): "
msgstr "Połączenie (nazwa, UUID lub ścieżka): "
#. 0
-#: ../cli/src/connections.c:82 ../cli/src/connections.c:194
+#: ../cli/src/connections.c:79 ../cli/src/connections.c:191
#: ../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
@@ -499,7 +499,7 @@ msgstr "NAZWA"
#. 0
#. 1
-#: ../cli/src/connections.c:83 ../cli/src/connections.c:195
+#: ../cli/src/connections.c:80 ../cli/src/connections.c:192
msgid "UUID"
msgstr "UUID"
@@ -507,29 +507,29 @@ msgstr "UUID"
#. 0
#. 1
#. 2
-#: ../cli/src/connections.c:84 ../cli/src/connections.c:216
+#: ../cli/src/connections.c:81 ../cli/src/connections.c:213
#: ../cli/src/devices.c:75 ../cli/src/devices.c:91 ../cli/src/devices.c:203
msgid "TYPE"
msgstr "TYP"
#. 2
-#: ../cli/src/connections.c:85
+#: ../cli/src/connections.c:82
msgid "TIMESTAMP"
msgstr "OKRES-CZASU"
#. 3
-#: ../cli/src/connections.c:86
+#: ../cli/src/connections.c:83
msgid "TIMESTAMP-REAL"
msgstr "RZECZYWISTY-OKRES-CZASU"
#. 4
#. 14
-#: ../cli/src/connections.c:87 ../cli/src/devices.c:104
+#: ../cli/src/connections.c:84 ../cli/src/devices.c:104
msgid "AUTOCONNECT"
msgstr "ÅÄ„CZENIE-AUTOMATYCZNE"
#. 5
-#: ../cli/src/connections.c:88
+#: ../cli/src/connections.c:85
msgid "READONLY"
msgstr "TYLKO-DO-ODCZYTU"
@@ -538,7 +538,7 @@ msgstr "TYLKO-DO-ODCZYTU"
#. 2
#. 15
#. 5
-#: ../cli/src/connections.c:89 ../cli/src/connections.c:202
+#: ../cli/src/connections.c:86 ../cli/src/connections.c:199
#: ../cli/src/devices.c:77 ../cli/src/devices.c:190 ../cli/src/devices.c:206
msgid "DBUS-PATH"
msgstr "ŚCIEŻKA-DBUS"
@@ -546,7 +546,7 @@ msgstr "ŚCIEŻKA-DBUS"
#. 7
#. 13
#. 4
-#: ../cli/src/connections.c:90 ../cli/src/devices.c:188
+#: ../cli/src/connections.c:87 ../cli/src/devices.c:188
#: ../cli/src/devices.c:205
msgid "ACTIVE"
msgstr "AKTYWNOŚĆ"
@@ -555,7 +555,7 @@ msgstr "AKTYWNOŚĆ"
#. 0
#. 12
#. 3
-#: ../cli/src/connections.c:91 ../cli/src/devices.c:74 ../cli/src/devices.c:90
+#: ../cli/src/connections.c:88 ../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"
@@ -565,42 +565,42 @@ msgstr "URZÄ„DZENIE"
#. 1
#. 9
#. 1
-#: ../cli/src/connections.c:92 ../cli/src/connections.c:197
+#: ../cli/src/connections.c:89 ../cli/src/connections.c:194
#: ../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
+#: ../cli/src/connections.c:90
msgid "ACTIVE-PATH"
msgstr "AKTYWNA-ŚCIEŻKA"
#. 2
-#: ../cli/src/connections.c:196
+#: ../cli/src/connections.c:193
msgid "DEVICES"
msgstr "URZÄ„DZENIA"
#. 4
-#: ../cli/src/connections.c:198
+#: ../cli/src/connections.c:195
msgid "DEFAULT"
msgstr "DOMYÅšLNE"
#. 5
-#: ../cli/src/connections.c:199
+#: ../cli/src/connections.c:196
msgid "DEFAULT6"
msgstr "DOMYÅšLNE6"
#. 6
-#: ../cli/src/connections.c:200
+#: ../cli/src/connections.c:197
msgid "SPEC-OBJECT"
msgstr "KONKRETNY-OBIEKT"
#. 7
#. 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
+#: ../cli/src/connections.c:198 ../cli/src/connections.c:236
+#: ../cli/src/connections.c:3508 ../tui/nm-editor-utils.c:243
#: ../tui/nmt-connect-connection-list.c:405
msgid "VPN"
msgstr "VPN"
@@ -608,75 +608,75 @@ msgstr "VPN"
#. 9
#. 5
#. 18
-#: ../cli/src/connections.c:203 ../cli/src/devices.c:80
+#: ../cli/src/connections.c:200 ../cli/src/devices.c:80
#: ../cli/src/devices.c:108
msgid "CON-PATH"
msgstr "ÅšCIEÅ»KA-POÅÄ„CZENIA"
#. 10
-#: ../cli/src/connections.c:204
+#: ../cli/src/connections.c:201
msgid "ZONE"
msgstr "STREFA"
#. 11
-#: ../cli/src/connections.c:205
+#: ../cli/src/connections.c:202
msgid "MASTER-PATH"
msgstr "GÅÓWNA-ÅšCIEÅ»KA"
#. 1
-#: ../cli/src/connections.c:217
+#: ../cli/src/connections.c:214
msgid "USERNAME"
msgstr "NAZWA-UŻYTKOWNIKA"
#. 2
-#: ../cli/src/connections.c:218
+#: ../cli/src/connections.c:215
msgid "GATEWAY"
msgstr "BRAMA"
#. 3
-#: ../cli/src/connections.c:219
+#: ../cli/src/connections.c:216
msgid "BANNER"
msgstr "BANER"
#. 4
-#: ../cli/src/connections.c:220
+#: ../cli/src/connections.c:217
msgid "VPN-STATE"
msgstr "STAN-VPN"
#. 5
-#: ../cli/src/connections.c:221
+#: ../cli/src/connections.c:218
msgid "CFG"
msgstr "KONFIGURACJA"
-#: ../cli/src/connections.c:234 ../cli/src/devices.c:239
+#: ../cli/src/connections.c:231 ../cli/src/devices.c:239
msgid "GENERAL"
msgstr "OGÓLNE"
#. 0
#. 6
-#: ../cli/src/connections.c:235 ../cli/src/devices.c:246
+#: ../cli/src/connections.c:232 ../cli/src/devices.c:246
msgid "IP4"
msgstr "IP4"
#. 1
#. 7
-#: ../cli/src/connections.c:236 ../cli/src/devices.c:247
+#: ../cli/src/connections.c:233 ../cli/src/devices.c:247
msgid "DHCP4"
msgstr "DHCP4"
#. 2
#. 8
-#: ../cli/src/connections.c:237 ../cli/src/devices.c:248
+#: ../cli/src/connections.c:234 ../cli/src/devices.c:248
msgid "IP6"
msgstr "IP6"
#. 3
#. 9
-#: ../cli/src/connections.c:238 ../cli/src/devices.c:249
+#: ../cli/src/connections.c:235 ../cli/src/devices.c:249
msgid "DHCP6"
msgstr "DHCP6"
-#: ../cli/src/connections.c:280
+#: ../cli/src/connections.c:277
#, c-format
msgid ""
"Usage: nmcli connection { COMMAND | help }\n"
@@ -736,7 +736,7 @@ msgstr ""
" load <nazwa_pliku> [ <nazwa_pliku>... ]\n"
"\n"
-#: ../cli/src/connections.c:302
+#: ../cli/src/connections.c:299
#, c-format
msgid ""
"Usage: nmcli connection show { ARGUMENTS | help }\n"
@@ -777,7 +777,7 @@ msgstr ""
"więcej informacji. Podanie opcji --active spowoduje uwzględnienie tylko\n"
"aktywnych profili.\n"
-#: ../cli/src/connections.c:324
+#: ../cli/src/connections.c:321
#, c-format
msgid ""
"Usage: nmcli connection up { ARGUMENTS | help }\n"
@@ -817,7 +817,7 @@ msgstr ""
"nsp - podaje NSP, z którym połączyć (prawidłowe tylko dla WiMAX)\n"
"\n"
-#: ../cli/src/connections.c:345
+#: ../cli/src/connections.c:342
#, c-format
msgid ""
"Usage: nmcli connection down { ARGUMENTS | help }\n"
@@ -839,7 +839,7 @@ msgstr ""
"swojej nazwie, UUID lub ścieżce D-Bus.\n"
"\n"
-#: ../cli/src/connections.c:358
+#: ../cli/src/connections.c:355
#, c-format
msgid ""
"Usage: nmcli connection add { ARGUMENTS | help }\n"
@@ -1039,7 +1039,7 @@ msgstr ""
" [ip4 <adres IPv4>] [gw4 <brama IPv4>]\n"
" [ip6 <adres IPv6>] [gw6 <brama IPv6>]\n"
-#: ../cli/src/connections.c:437
+#: ../cli/src/connections.c:434
#, c-format
msgid ""
"Usage: nmcli connection modify { ARGUMENTS | help }\n"
@@ -1086,7 +1086,7 @@ msgstr ""
"nmcli con mod bond0 -bond.options downdelay\n"
"\n"
-#: ../cli/src/connections.c:461
+#: ../cli/src/connections.c:458
#, c-format
msgid ""
"Usage: nmcli connection edit { ARGUMENTS | help }\n"
@@ -1114,7 +1114,7 @@ msgstr ""
"Dodaje nowy profil połączenia w interaktywnym edytorze.\n"
"\n"
-#: ../cli/src/connections.c:477
+#: ../cli/src/connections.c:474
#, c-format
msgid ""
"Usage: nmcli connection delete { ARGUMENTS | help }\n"
@@ -1133,7 +1133,7 @@ msgstr ""
"Profil jest identyfikowany po swojej nazwie, UUID lub ścieżce D-Bus.\n"
"\n"
-#: ../cli/src/connections.c:489
+#: ../cli/src/connections.c:486
#, c-format
msgid ""
"Usage: nmcli connection reload { help }\n"
@@ -1146,7 +1146,7 @@ msgstr ""
"Wczytuje ponownie wszystkie pliki połączeń z dysku.\n"
"\n"
-#: ../cli/src/connections.c:498
+#: ../cli/src/connections.c:495
#, c-format
msgid ""
"Usage: nmcli connection load { ARGUMENTS | help }\n"
@@ -1168,65 +1168,65 @@ msgstr ""
"usługa NetworkManager zna jego najnowszy stan.\n"
"\n"
-#: ../cli/src/connections.c:556
+#: ../cli/src/connections.c:553
msgid "activating"
msgstr "aktywowanie"
-#: ../cli/src/connections.c:558
+#: ../cli/src/connections.c:555
msgid "activated"
msgstr "aktywowano"
-#: ../cli/src/connections.c:562
+#: ../cli/src/connections.c:559
msgid "deactivated"
msgstr "deaktywowano"
-#: ../cli/src/connections.c:574
+#: ../cli/src/connections.c:571
msgid "VPN connecting (prepare)"
msgstr "ÅÄ…czenie z VPN (przygotowanie)"
-#: ../cli/src/connections.c:576
+#: ../cli/src/connections.c:573
msgid "VPN connecting (need authentication)"
msgstr "ÅÄ…czenie z VPN (wymaga uwierzytelnienia)"
-#: ../cli/src/connections.c:578
+#: ../cli/src/connections.c:575
msgid "VPN connecting"
msgstr "ÅÄ…czenie z VPN"
-#: ../cli/src/connections.c:580
+#: ../cli/src/connections.c:577
msgid "VPN connecting (getting IP configuration)"
msgstr "ÅÄ…czenie z VPN (pobieranie konfiguracji adresu IP)"
-#: ../cli/src/connections.c:582
+#: ../cli/src/connections.c:579
msgid "VPN connected"
msgstr "Połączono z VPN"
-#: ../cli/src/connections.c:584
+#: ../cli/src/connections.c:581
msgid "VPN connection failed"
msgstr "Połączenie z VPN się nie powiodło"
-#: ../cli/src/connections.c:586
+#: ../cli/src/connections.c:583
msgid "VPN disconnected"
msgstr "Rozłączono z VPN"
-#: ../cli/src/connections.c:669
+#: ../cli/src/connections.c:666
msgid "Connection profile details"
msgstr "Szczegóły profilu połączenia"
-#: ../cli/src/connections.c:681 ../cli/src/connections.c:1033
+#: ../cli/src/connections.c:678 ../cli/src/connections.c:1030
#, c-format
msgid "Error: 'connection show': %s"
msgstr "BÅ‚Ä…d: \"connection show\": %s"
-#: ../cli/src/connections.c:825
+#: ../cli/src/connections.c:822
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/connections.c:823 ../cli/src/connections.c:824
+#: ../cli/src/connections.c:826 ../cli/src/connections.c:885
+#: ../cli/src/connections.c:886 ../cli/src/connections.c:888
+#: ../cli/src/connections.c:2844 ../cli/src/connections.c:6575
+#: ../cli/src/connections.c:6576 ../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
@@ -1235,11 +1235,11 @@ msgstr "nigdy"
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/connections.c:823 ../cli/src/connections.c:824
+#: ../cli/src/connections.c:826 ../cli/src/connections.c:885
+#: ../cli/src/connections.c:886 ../cli/src/connections.c:888
+#: ../cli/src/connections.c:2845 ../cli/src/connections.c:6575
+#: ../cli/src/connections.c:6576 ../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
@@ -1248,29 +1248,29 @@ msgstr "tak"
msgid "no"
msgstr "nie"
-#: ../cli/src/connections.c:884 ../cli/src/connections.c:894
+#: ../cli/src/connections.c:881 ../cli/src/connections.c:891
#: ../cli/src/devices.c:599
msgid "N/A"
msgstr "Nie dotyczy"
-#: ../cli/src/connections.c:1021
+#: ../cli/src/connections.c:1018
msgid "Activate connection details"
msgstr "Szczegóły aktywowania połączenia"
-#: ../cli/src/connections.c:1254
+#: ../cli/src/connections.c:1251
#, c-format
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:1269 ../cli/src/connections.c:1277
+#: ../cli/src/connections.c:1266 ../cli/src/connections.c:1274
#, c-format
msgid "'%s' has to be alone"
msgstr "\"%s\" musi być same"
-#: ../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/connections.c:1305 ../cli/src/connections.c:2043
+#: ../cli/src/connections.c:2103 ../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
@@ -1280,18 +1280,18 @@ msgid "Error: NetworkManager is not running."
msgstr "Błąd: usługa NetworkManager nie jest uruchomiona."
#. Add headers
-#: ../cli/src/connections.c:1338
+#: ../cli/src/connections.c:1335
msgid "NetworkManager active profiles"
msgstr "Aktywne profile usługi NetworkManager"
-#: ../cli/src/connections.c:1339
+#: ../cli/src/connections.c:1336
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/connections.c:1373 ../cli/src/connections.c:1988
+#: ../cli/src/connections.c:2004 ../cli/src/connections.c:2013
+#: ../cli/src/connections.c:2023 ../cli/src/connections.c:2120
+#: ../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
@@ -1302,14 +1302,14 @@ msgstr "Profile połączeń usługi NetworkManager"
msgid "Error: %s argument is missing."
msgstr "BÅ‚Ä…d: brak parametru %s."
-#: ../cli/src/connections.c:1427
+#: ../cli/src/connections.c:1424
#, c-format
msgid "Error: %s - no such connection profile."
msgstr "Błąd: %s - nie ma takiego profilu połączenia."
-#: ../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/connections.c:1440 ../cli/src/connections.c:2056
+#: ../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
@@ -1319,144 +1319,146 @@ msgstr "Błąd: %s - nie ma takiego profilu połączenia."
msgid "Error: %s."
msgstr "BÅ‚Ä…d: %s."
-#: ../cli/src/connections.c:1538
+#: ../cli/src/connections.c:1535
#, c-format
msgid "no active connection on device '%s'"
msgstr "brak aktywnych połączeń na urządzeniu \"%s\""
-#: ../cli/src/connections.c:1546
+#: ../cli/src/connections.c:1543
msgid "no active connection or device"
msgstr "brak aktywnych połączeń na urządzeń"
-#: ../cli/src/connections.c:1617
+#: ../cli/src/connections.c:1614
#, 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:1620
+#: ../cli/src/connections.c:1617
#, c-format
msgid "no device found for connection '%s'"
msgstr "nie odnaleziono urządzenia dla połączenia \"%s\""
-#: ../cli/src/connections.c:1632
+#: ../cli/src/connections.c:1629
msgid "unknown reason"
msgstr "nieznany powód"
-#: ../cli/src/connections.c:1634 ../cli/src/network-manager.c:288
+#: ../cli/src/connections.c:1631 ../cli/src/network-manager.c:288
msgid "none"
msgstr "brak"
-#: ../cli/src/connections.c:1636
+#: ../cli/src/connections.c:1633
msgid "the user was disconnected"
msgstr "użytkownik został rozłączony"
-#: ../cli/src/connections.c:1638
+#: ../cli/src/connections.c:1635
msgid "the base network connection was interrupted"
msgstr "podstawowe połączenie sieciowe zostało przerwane"
-#: ../cli/src/connections.c:1640
+#: ../cli/src/connections.c:1637
msgid "the VPN service stopped unexpectedly"
msgstr "usługa VPN została nieoczekiwanie zatrzymana"
-#: ../cli/src/connections.c:1642
+#: ../cli/src/connections.c:1639
msgid "the VPN service returned invalid configuration"
msgstr "usługa VPN zwróciła nieprawidłową konfigurację"
-#: ../cli/src/connections.c:1644
+#: ../cli/src/connections.c:1641
msgid "the connection attempt timed out"
msgstr "próba połączenia przekroczyła czas oczekiwania"
-#: ../cli/src/connections.c:1646
+#: ../cli/src/connections.c:1643
msgid "the VPN service did not start in time"
msgstr "usługa VPN nie została uruchomiona w czasie"
-#: ../cli/src/connections.c:1648
+#: ../cli/src/connections.c:1645
msgid "the VPN service failed to start"
msgstr "uruchomienie usługi VPN się nie powiodło"
-#: ../cli/src/connections.c:1650
+#: ../cli/src/connections.c:1647
msgid "no valid VPN secrets"
msgstr "brak prawidłowych haseł VPN"
-#: ../cli/src/connections.c:1652
+#: ../cli/src/connections.c:1649
msgid "invalid VPN secrets"
msgstr "nieprawidłowe hasła VPN"
-#: ../cli/src/connections.c:1654
+#: ../cli/src/connections.c:1651
msgid "the connection was removed"
msgstr "połączenie zostało usunięte"
-#: ../cli/src/connections.c:1671 ../cli/src/connections.c:1827
-#: ../cli/src/connections.c:6468
+#: ../cli/src/connections.c:1673 ../cli/src/connections.c:1701
+#: ../cli/src/connections.c:1846 ../cli/src/connections.c:6471
#, 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"
-#: ../cli/src/connections.c:1676
+#: ../cli/src/connections.c:1680
+#, c-format
+msgid ""
+"Connection successfully activated (master waiting for slaves) (D-Bus active "
+"path: %s)\n"
+msgstr ""
+"Połączenie zostało pomyślnie aktywowane (główne oczekujące na podrzędne) "
+"(ścieżka aktywacji D-Bus: %s)\n"
+
+#: ../cli/src/connections.c:1684 ../cli/src/connections.c:1706
#, c-format
msgid "Error: Connection activation failed."
msgstr "Błąd: aktywacja połączenia się nie powiodła."
-#: ../cli/src/connections.c:1701
+#: ../cli/src/connections.c:1749
#, 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:1708
+#: ../cli/src/connections.c:1756
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "Błąd: aktywacja połączenia się nie powiodła: %s."
-#: ../cli/src/connections.c:1726 ../cli/src/devices.c:1299
+#: ../cli/src/connections.c:1774 ../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: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
+#: ../cli/src/connections.c:1830
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "Błąd: aktywacja połączenia się nie powiodła: %s"
-#: ../cli/src/connections.c:1916 ../cli/src/connections.c:2046
+#: ../cli/src/connections.c:1927 ../cli/src/connections.c:2057
msgid "unknown error"
msgstr "nieznany błąd"
-#: ../cli/src/connections.c:1924
+#: ../cli/src/connections.c:1935
#, c-format
msgid "unknown device '%s'."
msgstr "nieznane urzÄ…dzenie \"%s\"."
-#: ../cli/src/connections.c:1929
+#: ../cli/src/connections.c:1940
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/connections.c:2032 ../cli/src/devices.c:1176
#: ../cli/src/devices.c:1656 ../cli/src/devices.c:2105
#: ../cli/src/devices.c:2399
#, c-format
msgid "Unknown parameter: %s\n"
msgstr "Nieznany parametr: %s\n"
-#: ../cli/src/connections.c:2054
+#: ../cli/src/connections.c:2065
msgid "preparing"
msgstr "przygotowywanie"
-#: ../cli/src/connections.c:2082 ../cli/src/connections.c:8292
-#: ../cli/src/connections.c:8407
+#: ../cli/src/connections.c:2093 ../cli/src/connections.c:8295
+#: ../cli/src/connections.c:8410
#, c-format
msgid "Error: No connection specified."
msgstr "Błąd: nie podano połączenia."
-#: ../cli/src/connections.c:2119
+#: ../cli/src/connections.c:2130
#, c-format
msgid "Error: '%s' is not an active connection."
msgstr "Błąd: \"%s\" nie jest aktywnym połączeniem."
@@ -1472,32 +1474,32 @@ msgid "Error: '%s': '%s' is not a valid %s MAC address."
msgstr "Błąd: \"%s\": \"%s\" nie jest prawidłowym adresem MAC %s."
#. 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
+#: ../cli/src/connections.c:2514 ../cli/src/connections.c:2960
+#: ../libnm-glib/nm-device.c:1825 ../tui/nm-editor-utils.c:173
msgid "InfiniBand"
msgstr "InfiniBand"
-#: ../cli/src/connections.c:2514 ../libnm-glib/nm-device.c:1790
+#: ../cli/src/connections.c:2514 ../libnm-glib/nm-device.c:1813
#: ../tui/nm-editor-utils.c:156
msgid "Ethernet"
msgstr "Ethernet"
-#: ../cli/src/connections.c:2537
+#: ../cli/src/connections.c:2540
#, c-format
msgid "Error: 'mtu': '%s' is not a valid MTU."
msgstr "Błąd: \"mtu\": \"%s\" nie jest prawidłowym MTU."
-#: ../cli/src/connections.c:2553
+#: ../cli/src/connections.c:2556
#, c-format
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:2574
+#: ../cli/src/connections.c:2577
#, c-format
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:2603
+#: ../cli/src/connections.c:2606
#, c-format
msgid ""
"Error: 'mode': '%s' is not a valid InfiniBand transport mode [datagram, "
@@ -1506,23 +1508,23 @@ msgstr ""
"Błąd: \"mode\": \"%s\" nie jest prawidłowym trybem transportu InfiniBand "
"[datagram, connected]."
-#: ../cli/src/connections.c:2617
+#: ../cli/src/connections.c:2620
#, 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>."
-#: ../cli/src/connections.c:2639
+#: ../cli/src/connections.c:2642
#, c-format
msgid "Error: '%s': '%s' is not valid; %s "
msgstr "Błąd: \"%s\": \"%s\" jest nieprawidłowe; %s "
-#: ../cli/src/connections.c:2832
+#: ../cli/src/connections.c:2835
#, 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>."
#. Ask for optional arguments.
-#: ../cli/src/connections.c:2888
+#: ../cli/src/connections.c:2891
#, 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"
@@ -1530,7 +1532,7 @@ 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"
-#: ../cli/src/connections.c:2891
+#: ../cli/src/connections.c:2894
#, c-format
msgid "Do you want to provide it? %s"
msgid_plural "Do you want to provide them? %s"
@@ -1538,436 +1540,436 @@ msgstr[0] "Podać go? %s"
msgstr[1] "Podać je? %s"
msgstr[2] "Podać je? %s"
-#: ../cli/src/connections.c:2906
+#: ../cli/src/connections.c:2909
msgid "ethernet"
msgstr "ethernet"
-#: ../cli/src/connections.c:2906 ../libnm-glib/nm-device.c:1792
+#: ../cli/src/connections.c:2909 ../libnm-glib/nm-device.c:1815
#: ../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
+#: ../cli/src/connections.c:2917 ../cli/src/connections.c:2965
+#: ../cli/src/connections.c:3074 ../cli/src/connections.c:3153
msgid "MTU [auto]: "
msgstr "MTU [auto]: "
-#: ../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
+#: ../cli/src/connections.c:2928 ../cli/src/connections.c:2976
+#: ../cli/src/connections.c:3046 ../cli/src/connections.c:3085
+#: ../cli/src/connections.c:3440
msgid "MAC [none]: "
msgstr "MAC [none]: "
-#: ../cli/src/connections.c:2936
+#: ../cli/src/connections.c:2939
msgid "Cloned MAC [none]: "
msgstr "Sklonowany MAC [none]: "
-#: ../cli/src/connections.c:2984
+#: ../cli/src/connections.c:2987
#, c-format
msgid "Transport mode %s"
msgstr "Tryb przesyłania %s"
-#: ../cli/src/connections.c:2997
+#: ../cli/src/connections.c:3000
msgid "Parent interface [none]: "
msgstr "Interfejs nadrzędny [none]: "
-#: ../cli/src/connections.c:3008
+#: ../cli/src/connections.c:3011
msgid "P_KEY [none]: "
msgstr "P_KEY [none]: "
-#: ../cli/src/connections.c:3018
+#: ../cli/src/connections.c:3021
#, 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
+#: ../cli/src/connections.c:3041 ../libnm-glib/nm-device.c:1821
msgid "WiMAX"
msgstr "WiMAX"
#. Ask for optional 'pppoe' arguments.
-#: ../cli/src/connections.c:3061
+#: ../cli/src/connections.c:3064
msgid "PPPoE"
msgstr "PPPoE"
-#: ../cli/src/connections.c:3065 ../cli/src/connections.c:3103
+#: ../cli/src/connections.c:3068 ../cli/src/connections.c:3106
msgid "Password [none]: "
msgstr "Hasło [none]: "
-#: ../cli/src/connections.c:3067
+#: ../cli/src/connections.c:3070
msgid "Service [none]: "
msgstr "Usługa [none]: "
#. Ask for optional 'gsm' or 'cdma' arguments.
-#: ../cli/src/connections.c:3097
+#: ../cli/src/connections.c:3100
msgid "mobile broadband"
msgstr "komórkowe"
-#: ../cli/src/connections.c:3101 ../cli/src/connections.c:3509
+#: ../cli/src/connections.c:3104 ../cli/src/connections.c:3512
msgid "Username [none]: "
msgstr "Nazwa użytkownika [none]: "
#. Ask for optional 'bluetooth' arguments.
-#: ../cli/src/connections.c:3116
+#: ../cli/src/connections.c:3119
msgid "bluetooth"
msgstr "bluetooth"
-#: ../cli/src/connections.c:3123
+#: ../cli/src/connections.c:3126
#, c-format
msgid "Bluetooth type %s"
msgstr "Typ Bluetooth %s"
-#: ../cli/src/connections.c:3129
+#: ../cli/src/connections.c:3132
#, 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/connections.c:3145 ../cli/src/devices.c:251
-#: ../libnm-glib/nm-device.c:1810 ../libnm-util/nm-connection.c:1303
+#: ../cli/src/connections.c:3148 ../cli/src/devices.c:251
+#: ../libnm-glib/nm-device.c:1833 ../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
+#: ../cli/src/connections.c:3164
msgid "VLAN flags (<0-7>) [none]: "
msgstr "Flagi VLAN= (<0-7>) [none]: "
-#: ../cli/src/connections.c:3172
+#: ../cli/src/connections.c:3175
msgid "Ingress priority maps [none]: "
msgstr "Wejściowe mapy priorytetów [none]: "
-#: ../cli/src/connections.c:3183
+#: ../cli/src/connections.c:3186
msgid "Egress priority maps [none]: "
msgstr "Wyjściowe mapy priorytetów [none]: "
-#: ../cli/src/connections.c:3194
+#: ../cli/src/connections.c:3197
msgid "Bonding mode [balance-rr]: "
msgstr "Tryb wiÄ…zania [balance-rr]: "
#. Ask for optional 'bond' arguments.
-#: ../cli/src/connections.c:3209
+#: ../cli/src/connections.c:3212
msgid "bond"
msgstr "wiÄ…zanie"
-#: ../cli/src/connections.c:3231
+#: ../cli/src/connections.c:3234
msgid "Bonding primary interface [none]: "
msgstr "Interfejs nadrzędny wiązania [none]: "
-#: ../cli/src/connections.c:3234
+#: ../cli/src/connections.c:3237
#, 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
+#: ../cli/src/connections.c:3245
#, c-format
msgid "Bonding monitoring mode %s"
msgstr "Tryb monitorowania wiÄ…zania %s"
-#: ../cli/src/connections.c:3248
+#: ../cli/src/connections.c:3251
#, 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
+#: ../cli/src/connections.c:3260
msgid "Bonding miimon [100]: "
msgstr "miimon wiÄ…zania [100]: "
-#: ../cli/src/connections.c:3260
+#: ../cli/src/connections.c:3263
#, 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
+#: ../cli/src/connections.c:3271
msgid "Bonding downdelay [0]: "
msgstr "downdelay wiÄ…zania [0]: "
-#: ../cli/src/connections.c:3271
+#: ../cli/src/connections.c:3274
#, 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
+#: ../cli/src/connections.c:3282
msgid "Bonding updelay [0]: "
msgstr "updelay wiÄ…zania [0]: "
-#: ../cli/src/connections.c:3282
+#: ../cli/src/connections.c:3285
#, 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
+#: ../cli/src/connections.c:3294
msgid "Bonding arp-interval [0]: "
msgstr "arp-interval wiÄ…zania [0]: "
-#: ../cli/src/connections.c:3294
+#: ../cli/src/connections.c:3297
#, 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
+#: ../cli/src/connections.c:3305
msgid "Bonding arp-ip-target [none]: "
msgstr "arp-ip-target wiÄ…zania [none]: "
-#: ../cli/src/connections.c:3322
+#: ../cli/src/connections.c:3325
msgid "Team JSON configuration [none]: "
msgstr "Konfiguracja JSON zespołu [none]: "
-#: ../cli/src/connections.c:3339
+#: ../cli/src/connections.c:3342
msgid "team"
msgstr "zespół"
-#: ../cli/src/connections.c:3345
+#: ../cli/src/connections.c:3348
msgid "team-slave"
msgstr "podrzędny-zespołu"
#. Ask for optional 'bridge' arguments.
-#: ../cli/src/connections.c:3357
+#: ../cli/src/connections.c:3360
msgid "bridge"
msgstr "mostek"
-#: ../cli/src/connections.c:3363
+#: ../cli/src/connections.c:3366
#, c-format
msgid "Enable STP %s"
msgstr "WÅ‚Ä…czenie STP %s"
-#: ../cli/src/connections.c:3368
+#: ../cli/src/connections.c:3371
#, c-format
msgid "Error: 'stp': %s.\n"
msgstr "BÅ‚Ä…d: \"stp\": %s.\n"
-#: ../cli/src/connections.c:3376
+#: ../cli/src/connections.c:3379
msgid "STP priority [32768]: "
msgstr "Priorytet STP [32768]: "
-#: ../cli/src/connections.c:3380
+#: ../cli/src/connections.c:3383
#, 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
+#: ../cli/src/connections.c:3391
msgid "Forward delay [15]: "
msgstr "Forward-delay [15]: "
-#: ../cli/src/connections.c:3392
+#: ../cli/src/connections.c:3395
#, 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
+#: ../cli/src/connections.c:3404
msgid "Hello time [2]: "
msgstr "Hello-time [2]: "
-#: ../cli/src/connections.c:3405
+#: ../cli/src/connections.c:3408
#, 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
+#: ../cli/src/connections.c:3416
msgid "Max age [20]: "
msgstr "Max-age [20]: "
-#: ../cli/src/connections.c:3417
+#: ../cli/src/connections.c:3420
#, 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
+#: ../cli/src/connections.c:3428
msgid "MAC address ageing time [300]: "
msgstr "Czas starzenia adresu MAC [300]: "
-#: ../cli/src/connections.c:3429
+#: ../cli/src/connections.c:3432
#, 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
+#: ../cli/src/connections.c:3459
msgid "bridge-slave"
msgstr "podrzędny-mostku"
-#: ../cli/src/connections.c:3461
+#: ../cli/src/connections.c:3464
msgid "Bridge port priority [32]: "
msgstr "Priorytet portu mostku [32]: "
-#: ../cli/src/connections.c:3474
+#: ../cli/src/connections.c:3477
msgid "Bridge port STP path cost [100]: "
msgstr "Koszt ścieżki STP portu mostku [100]: "
-#: ../cli/src/connections.c:3488
+#: ../cli/src/connections.c:3491
#, c-format
msgid "Hairpin %s"
msgstr "Hairpin %s"
-#: ../cli/src/connections.c:3493
+#: ../cli/src/connections.c:3496
#, 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
+#: ../cli/src/connections.c:3523 ../libnm-glib/nm-device.c:1819
msgid "OLPC Mesh"
msgstr "Kratowe OLPC"
-#: ../cli/src/connections.c:3525
+#: ../cli/src/connections.c:3528
msgid "OLPC Mesh channel [1]: "
msgstr "Kanał sieci kratowej OLPC [1]: "
-#: ../cli/src/connections.c:3528
+#: ../cli/src/connections.c:3531
#, 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
+#: ../cli/src/connections.c:3539
msgid "DHCP anycast MAC address [none]: "
msgstr "Adres MAC \"anycast\" DHCP [none]: "
-#: ../cli/src/connections.c:3581
+#: ../cli/src/connections.c:3584
msgid "IPv4 address (IP[/plen] [gateway]) [none]: "
msgstr "Adres IPv4 (IP[/plen] [gateway]) [none]: "
-#: ../cli/src/connections.c:3583
+#: ../cli/src/connections.c:3586
msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
msgstr "Adres IPv6 (IP[/plen] [gateway]) [none]: "
-#: ../cli/src/connections.c:3601
+#: ../cli/src/connections.c:3604
#, c-format
msgid " Address successfully added: %s %s\n"
msgstr " Pomyślnie dodano adres: %s %s\n"
-#: ../cli/src/connections.c:3603
+#: ../cli/src/connections.c:3606
#, 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
+#: ../cli/src/connections.c:3608
#, 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
+#: ../cli/src/connections.c:3610 ../cli/src/connections.c:4467
+#: ../cli/src/connections.c:4530 ../cli/src/connections.c:4941
+#: ../cli/src/connections.c:4951
msgid "Error: "
msgstr "BÅ‚Ä…d: "
#. Ask for IP addresses
-#: ../cli/src/connections.c:3624
+#: ../cli/src/connections.c:3627
#, c-format
msgid "Do you want to add IP addresses? %s"
msgstr "Dodać adresy IP? %s"
-#: ../cli/src/connections.c:3631
+#: ../cli/src/connections.c:3634
#, 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
+#: ../cli/src/connections.c:3780
#, 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
+#: ../cli/src/connections.c:3836 ../cli/src/connections.c:4857
msgid "SSID: "
msgstr "SSID: "
-#: ../cli/src/connections.c:3836 ../cli/src/connections.c:4857
+#: ../cli/src/connections.c:3839 ../cli/src/connections.c:4860
msgid "Error: 'ssid' is required."
msgstr "BÅ‚Ä…d: \"ssid\" jest wymagane."
-#: ../cli/src/connections.c:3900
+#: ../cli/src/connections.c:3903
msgid "WiMAX NSP name: "
msgstr "Nazwa NSP sieci WiMAX: "
-#: ../cli/src/connections.c:3903
+#: ../cli/src/connections.c:3906
msgid "Error: 'nsp' is required."
msgstr "BÅ‚Ä…d: \"nsp\" jest wymagane."
-#: ../cli/src/connections.c:3958
+#: ../cli/src/connections.c:3961
msgid "PPPoE username: "
msgstr "Nazwa użytkownika PPPoE: "
-#: ../cli/src/connections.c:3961
+#: ../cli/src/connections.c:3964
msgid "Error: 'username' is required."
msgstr "BÅ‚Ä…d: \"username\" jest wymagane."
-#: ../cli/src/connections.c:4032
+#: ../cli/src/connections.c:4035
msgid "APN: "
msgstr "APN: "
-#: ../cli/src/connections.c:4035
+#: ../cli/src/connections.c:4038
msgid "Error: 'apn' is required."
msgstr "BÅ‚Ä…d: \"apn\" jest wymagane."
-#: ../cli/src/connections.c:4094
+#: ../cli/src/connections.c:4097
msgid "Bluetooth device address: "
msgstr "Adres urzÄ…dzenia Bluetooth: "
-#: ../cli/src/connections.c:4097
+#: ../cli/src/connections.c:4100
msgid "Error: 'addr' is required."
msgstr "BÅ‚Ä…d: \"addr\" jest wymagane."
-#: ../cli/src/connections.c:4140
+#: ../cli/src/connections.c:4143
#, 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
+#: ../cli/src/connections.c:4188
msgid "VLAN parent device or connection UUID: "
msgstr "Urządzenie nadrzędne VLAN lub UUID połączenia: "
-#: ../cli/src/connections.c:4188
+#: ../cli/src/connections.c:4191
msgid "Error: 'dev' is required."
msgstr "BÅ‚Ä…d: \"dev\" jest wymagane."
-#: ../cli/src/connections.c:4192
+#: ../cli/src/connections.c:4195
msgid "VLAN ID <0-4095>: "
msgstr "Identyfikator VLAN <0-4095>: "
-#: ../cli/src/connections.c:4195
+#: ../cli/src/connections.c:4198
msgid "Error: 'id' is required."
msgstr "BÅ‚Ä…d: \"id\" jest wymagane."
-#: ../cli/src/connections.c:4201
+#: ../cli/src/connections.c:4204
#, 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
+#: ../cli/src/connections.c:4214
#, 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
+#: ../cli/src/connections.c:4349
#, c-format
msgid "Error: 'mode': %s."
msgstr "BÅ‚Ä…d: \"mode\": %s."
-#: ../cli/src/connections.c:4355
+#: ../cli/src/connections.c:4358
#, 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
+#: ../cli/src/connections.c:4408 ../cli/src/connections.c:4508
+#: ../cli/src/connections.c:4715
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
+#: ../cli/src/connections.c:4414 ../cli/src/connections.c:4514
+#: ../cli/src/connections.c:4721
#, 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
+#: ../cli/src/connections.c:4417 ../cli/src/connections.c:4522
+#: ../cli/src/connections.c:4724
#, c-format
msgid ""
"Warning: 'type' is currently ignored. We only support ethernet slaves for "
@@ -1976,80 +1978,80 @@ msgstr ""
"Ostrzeżenie: \"type\" jest obecnie ignorowane. W tej chwili obsługiwane są "
"tylko podrzędne Ethernet.\n"
-#: ../cli/src/connections.c:4614
+#: ../cli/src/connections.c:4617
#, c-format
msgid "Error: 'stp': %s."
msgstr "BÅ‚Ä…d: \"stp\": %s."
-#: ../cli/src/connections.c:4748
+#: ../cli/src/connections.c:4751
#, c-format
msgid "Error: 'hairpin': %s."
msgstr "BÅ‚Ä…d: \"hairpin\": %s."
-#: ../cli/src/connections.c:4801
+#: ../cli/src/connections.c:4804
msgid "Error: 'vpn-type' is required."
msgstr "BÅ‚Ä…d: \"vpn-type\" jest wymagane."
-#: ../cli/src/connections.c:4808
+#: ../cli/src/connections.c:4811
#, c-format
msgid "Warning: 'vpn-type': %s not known.\n"
msgstr "BÅ‚Ä…d: \"vpn-type\": nieznane %s.\n"
-#: ../cli/src/connections.c:4870
+#: ../cli/src/connections.c:4873
#, 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
+#: ../cli/src/connections.c:4908
#, 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
+#: ../cli/src/connections.c:5006
#, 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
+#: ../cli/src/connections.c:5010
#, c-format
msgid "Connection '%s' (%s) successfully added.\n"
msgstr "Pomyślnie dodano połączenie \"%s\" (%s).\n"
-#: ../cli/src/connections.c:5221
+#: ../cli/src/connections.c:5224
#, c-format
msgid "Error: 'type' argument is required."
msgstr "BÅ‚Ä…d: parametr \"type\" jest wymagany."
-#: ../cli/src/connections.c:5229
+#: ../cli/src/connections.c:5232
#, c-format
msgid "Error: invalid connection type; %s."
msgstr "Błąd: nieznany typ połączenia; %s."
-#: ../cli/src/connections.c:5238
+#: ../cli/src/connections.c:5241
#, c-format
msgid "Error: 'autoconnect': %s."
msgstr "BÅ‚Ä…d: \"autoconnect\": %s."
-#: ../cli/src/connections.c:5248
+#: ../cli/src/connections.c:5251
#, c-format
msgid "Error: 'save': %s."
msgstr "BÅ‚Ä…d: \"save\": %s."
-#: ../cli/src/connections.c:5264
+#: ../cli/src/connections.c:5267
msgid "Interface name [*]: "
msgstr "Nazwa interfejsu [*]: "
-#: ../cli/src/connections.c:5269
+#: ../cli/src/connections.c:5272
#, c-format
msgid "Error: 'ifname' argument is required."
msgstr "BÅ‚Ä…d: parametr \"ifname\" jest wymagany."
-#: ../cli/src/connections.c:5276
+#: ../cli/src/connections.c:5279
#, 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
+#: ../cli/src/connections.c:6067
#, c-format
msgid "['%s' setting values]\n"
msgstr "[wartości ustawienia \"%s\"]\n"
@@ -2057,7 +2059,7 @@ 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
+#: ../cli/src/connections.c:6149
#, c-format
msgid ""
"---[ Main menu ]---\n"
@@ -2094,7 +2096,7 @@ msgstr ""
"nmcli <opcja-konfiguracji> <wartość> :: konfiguracja nmcli\n"
"quit :: kończy działanie nmcli\n"
-#: ../cli/src/connections.c:6173
+#: ../cli/src/connections.c:6176
#, c-format
msgid ""
"goto <setting>[.<prop>] | <prop> :: enter setting/property for editing\n"
@@ -2115,7 +2117,7 @@ msgstr ""
" nmcli connection> goto secondaries\n"
" nmcli> goto ipv4.addresses\n"
-#: ../cli/src/connections.c:6180
+#: ../cli/src/connections.c:6183
#, c-format
msgid ""
"remove <setting>[.<prop>] :: remove setting or reset property value\n"
@@ -2136,7 +2138,7 @@ msgstr ""
"Przykłady: nmcli> remove wifi-sec\n"
" nmcli> remove eth.mtu\n"
-#: ../cli/src/connections.c:6187
+#: ../cli/src/connections.c:6190
#, c-format
msgid ""
"set [<setting>.<prop> <value>] :: set property value\n"
@@ -2151,7 +2153,7 @@ msgstr ""
"\n"
"Przykład: nmcli> set con.id Moje połączenie\n"
-#: ../cli/src/connections.c:6192
+#: ../cli/src/connections.c:6195
#, c-format
msgid ""
"describe [<setting>.<prop>] :: describe property\n"
@@ -2164,7 +2166,7 @@ msgstr ""
"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
+#: ../cli/src/connections.c:6200
#, c-format
msgid ""
"print [all] :: print setting or connection values\n"
@@ -2179,7 +2181,7 @@ msgstr ""
"\n"
"Przykład: nmcli ipv4> print all\n"
-#: ../cli/src/connections.c:6202
+#: ../cli/src/connections.c:6205
#, c-format
msgid ""
"verify [all] :: verify setting or connection validity\n"
@@ -2198,7 +2200,7 @@ msgstr ""
"Przykłady: nmcli> verify\n"
" nmcli bond> verify\n"
-#: ../cli/src/connections.c:6209
+#: ../cli/src/connections.c:6212
#, c-format
msgid ""
"save [persistent|temporary] :: save the connection\n"
@@ -2224,7 +2226,7 @@ msgstr ""
"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
+#: ../cli/src/connections.c:6223
#, c-format
msgid ""
"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
@@ -2245,7 +2247,7 @@ msgstr ""
"/<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
+#: ../cli/src/connections.c:6230 ../cli/src/connections.c:6387
#, c-format
msgid ""
"back :: go to upper menu level\n"
@@ -2254,7 +2256,7 @@ msgstr ""
"back :: przechodzi do menu wyższego poziomu\n"
"\n"
-#: ../cli/src/connections.c:6230
+#: ../cli/src/connections.c:6233
#, c-format
msgid ""
"help/? [<command>] :: help for the nmcli commands\n"
@@ -2263,7 +2265,7 @@ msgstr ""
"help/? [<polecenie>] :: pomoc dla poleceń nmcli\n"
"\n"
-#: ../cli/src/connections.c:6233
+#: ../cli/src/connections.c:6236
#, c-format
msgid ""
"nmcli [<conf-option> <value>] :: nmcli configuration\n"
@@ -2306,7 +2308,7 @@ msgstr ""
" nmcli> nmcli save-confirmation no\n"
" nmcli> nmcli prompt-color 3\n"
-#: ../cli/src/connections.c:6253 ../cli/src/connections.c:6390
+#: ../cli/src/connections.c:6256 ../cli/src/connections.c:6393
#, c-format
msgid ""
"quit :: exit nmcli\n"
@@ -2319,8 +2321,8 @@ msgstr ""
"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
+#: ../cli/src/connections.c:6261 ../cli/src/connections.c:6398
+#: ../cli/src/connections.c:6786 ../cli/src/connections.c:7679
#, c-format
msgid "Unknown command: '%s'\n"
msgstr "Nieznane polecenie: \"%s\"\n"
@@ -2328,7 +2330,7 @@ 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
+#: ../cli/src/connections.c:6327
#, c-format
msgid ""
"---[ Property menu ]---\n"
@@ -2355,7 +2357,7 @@ msgstr ""
"help/? [<polecenie>] :: wyświetla tę pomoc lub opis polecenia\n"
"quit :: kończy działanie nmcli\n"
-#: ../cli/src/connections.c:6349
+#: ../cli/src/connections.c:6352
#, c-format
msgid ""
"set [<value>] :: set new value\n"
@@ -2366,7 +2368,7 @@ msgstr ""
"\n"
"To polecenie ustawia podaną <wartość> tej właściwości\n"
-#: ../cli/src/connections.c:6353
+#: ../cli/src/connections.c:6356
#, c-format
msgid ""
"add [<value>] :: append new value to the property\n"
@@ -2381,7 +2383,7 @@ msgstr ""
"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
+#: ../cli/src/connections.c:6362
#, c-format
msgid ""
"change :: change current value\n"
@@ -2392,7 +2394,7 @@ msgstr ""
"\n"
"Wyświetla bieżącą wartość i umożliwia jej modyfikację.\n"
-#: ../cli/src/connections.c:6363
+#: ../cli/src/connections.c:6366
#, c-format
msgid ""
"remove [<value>|<index>|<option name>] :: delete the value\n"
@@ -2425,7 +2427,7 @@ msgstr ""
" nmcli bond.options> remove downdelay\n"
"\n"
-#: ../cli/src/connections.c:6374
+#: ../cli/src/connections.c:6377
#, c-format
msgid ""
"describe :: describe property\n"
@@ -2438,7 +2440,7 @@ msgstr ""
"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
+#: ../cli/src/connections.c:6382
#, c-format
msgid ""
"print [property|setting|connection] :: print property (setting, connection) "
@@ -2453,7 +2455,7 @@ msgstr ""
"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
+#: ../cli/src/connections.c:6390
#, c-format
msgid ""
"help/? [<command>] :: help for nmcli commands\n"
@@ -2462,28 +2464,28 @@ msgstr ""
"help/? [<polecenie>] :: pomoc dla poleceń nmcli\n"
"\n"
-#: ../cli/src/connections.c:6474
+#: ../cli/src/connections.c:6477
#, c-format
msgid "Error: Connection activation failed.\n"
msgstr "Błąd: aktywacja połączenia się nie powiodła.\n"
-#: ../cli/src/connections.c:6552
+#: ../cli/src/connections.c:6555
#, 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
+#: ../cli/src/connections.c:6573
#, 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
+#: ../cli/src/connections.c:6608
#, 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
+#: ../cli/src/connections.c:6653
#, c-format
msgid ""
"The connection profile has been removed from another client. You may type "
@@ -2492,60 +2494,60 @@ 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
+#: ../cli/src/connections.c:6675 ../cli/src/connections.c:7090
+#: ../cli/src/connections.c:7145
#, 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
+#: ../cli/src/connections.c:6690 ../cli/src/connections.c:6708
+#: ../cli/src/connections.c:7094 ../cli/src/connections.c:7150
#, 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
+#: ../cli/src/connections.c:6702
#, c-format
msgid "Edit '%s' value: "
msgstr "Modyfikacja wartości \"%s\": "
-#: ../cli/src/connections.c:6726
+#: ../cli/src/connections.c:6729
#, 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
+#: ../cli/src/connections.c:6735 ../cli/src/connections.c:7229
+#: ../cli/src/connections.c:7270
#, 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
+#: ../cli/src/connections.c:6756
#, c-format
msgid "Unknown command argument: '%s'\n"
msgstr "Nieznany parametr polecenia: \"%s\"\n"
-#: ../cli/src/connections.c:6879
+#: ../cli/src/connections.c:6882
#, c-format
msgid "Available settings: %s\n"
msgstr "Dostępne ustawienia: %s\n"
-#: ../cli/src/connections.c:6888
+#: ../cli/src/connections.c:6891
#, c-format
msgid "Error: invalid setting name; %s\n"
msgstr "Błąd: nieprawidłowa nazwa ustawienia; %s\n"
-#: ../cli/src/connections.c:6905
+#: ../cli/src/connections.c:6908
#, c-format
msgid "Available properties: %s\n"
msgstr "Dostępne właściwości: %s\n"
-#: ../cli/src/connections.c:6913
+#: ../cli/src/connections.c:6916
#, c-format
msgid "Error: property %s\n"
msgstr "Błąd: właściwość %s\n"
-#: ../cli/src/connections.c:6954
+#: ../cli/src/connections.c:6957
#, c-format
msgid ""
"Saving the connection with 'autoconnect=yes'. That might result in an "
@@ -2556,12 +2558,12 @@ msgstr ""
"natychmiastową aktywację połączenia.\n"
"Na pewno zapisać? %s"
-#: ../cli/src/connections.c:7029
+#: ../cli/src/connections.c:7032
#, 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
+#: ../cli/src/connections.c:7059
#, c-format
msgid ""
"The connection profile has been removed from another client. You may type "
@@ -2570,205 +2572,205 @@ 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
+#: ../cli/src/connections.c:7088 ../cli/src/connections.c:7143
#, 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
+#: ../cli/src/connections.c:7098 ../cli/src/connections.c:7312
#, 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
+#: ../cli/src/connections.c:7099
#, 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
+#: ../cli/src/connections.c:7113 ../cli/src/connections.c:7249
+#: ../cli/src/connections.c:7329
#, 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
+#: ../cli/src/connections.c:7123
#, 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
+#: ../cli/src/connections.c:7130
#, c-format
msgid "Error: invalid property: %s\n"
msgstr "Błąd: nieprawidłowa właściwość: %s\n"
-#: ../cli/src/connections.c:7174
+#: ../cli/src/connections.c:7177
#, c-format
msgid "Error: unknown setting '%s'\n"
msgstr "BÅ‚Ä…d: nieznane ustawienie \"%s\"\n"
-#: ../cli/src/connections.c:7187
+#: ../cli/src/connections.c:7190
#, 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
+#: ../cli/src/connections.c:7234
#, 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
+#: ../cli/src/connections.c:7247
#, 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
+#: ../cli/src/connections.c:7288
#, 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
+#: ../cli/src/connections.c:7313
#, 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
+#: ../cli/src/connections.c:7354
#, 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
+#: ../cli/src/connections.c:7383
#, c-format
msgid "Error: unknown setting: '%s'\n"
msgstr "BÅ‚Ä…d: nieznane ustawienie: \"%s\"\n"
-#: ../cli/src/connections.c:7385
+#: ../cli/src/connections.c:7388
#, 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
+#: ../cli/src/connections.c:7413
#, 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
+#: ../cli/src/connections.c:7415
msgid ", neither a valid setting name"
msgstr ", ani prawidłową nazwą ustawienia"
-#: ../cli/src/connections.c:7432
+#: ../cli/src/connections.c:7435
#, c-format
msgid "Verify setting '%s': %s\n"
msgstr "Sprawdzenie ustawienia \"%s\": %s\n"
-#: ../cli/src/connections.c:7439
+#: ../cli/src/connections.c:7442
#, c-format
msgid "Verify connection: %s\n"
msgstr "Sprawdzenie połączenia: %s\n"
-#: ../cli/src/connections.c:7457
+#: ../cli/src/connections.c:7460
#, c-format
msgid "Error: invalid argument '%s'\n"
msgstr "Błąd: nieprawidłowy parametr \"%s\"\n"
-#: ../cli/src/connections.c:7491
+#: ../cli/src/connections.c:7494
#, 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
+#: ../cli/src/connections.c:7502
#, c-format
msgid "Connection '%s' (%s) successfully saved.\n"
msgstr "Pomyślnie zapisano połączenie \"%s\" (%s).\n"
-#: ../cli/src/connections.c:7500
+#: ../cli/src/connections.c:7503
#, c-format
msgid "Connection '%s' (%s) successfully updated.\n"
msgstr "Pomyślnie zaktualizowano połączenie \"%s\" (%s).\n"
-#: ../cli/src/connections.c:7534
+#: ../cli/src/connections.c:7537
#, 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
+#: ../cli/src/connections.c:7538
msgid "(unknown error)"
msgstr "(nieznany błąd)"
-#: ../cli/src/connections.c:7556
+#: ../cli/src/connections.c:7559
#, 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
+#: ../cli/src/connections.c:7563
#, 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
+#: ../cli/src/connections.c:7574
#, 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
+#: ../cli/src/connections.c:7584
#, 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
+#: ../cli/src/connections.c:7590
#, 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
+#: ../cli/src/connections.c:7628
#, c-format
msgid "Error: status-line: %s\n"
msgstr "BÅ‚Ä…d: status-line: %s\n"
-#: ../cli/src/connections.c:7633
+#: ../cli/src/connections.c:7636
#, c-format
msgid "Error: save-confirmation: %s\n"
msgstr "BÅ‚Ä…d: save-confirmation: %s\n"
-#: ../cli/src/connections.c:7641
+#: ../cli/src/connections.c:7644
#, 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
+#: ../cli/src/connections.c:7656
#, c-format
msgid "Current nmcli configuration:\n"
msgstr "Obecna konfiguracja nmcli:\n"
-#: ../cli/src/connections.c:7661
+#: ../cli/src/connections.c:7664
#, c-format
msgid "Invalid configuration option '%s'; allowed [%s]\n"
msgstr "Nieprawidłowa opcja konfiguracji \"%s\"; dozwolone [%s]\n"
-#: ../cli/src/connections.c:7904
+#: ../cli/src/connections.c:7907
#, 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
+#: ../cli/src/connections.c:7919 ../cli/src/connections.c:8106
+#: ../cli/src/connections.c:8113
#, c-format
msgid "Error: Unknown connection '%s'."
msgstr "Błąd: nieznane połączenie \"%s\"."
-#: ../cli/src/connections.c:7931
+#: ../cli/src/connections.c:7934
#, 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
+#: ../cli/src/connections.c:7937
#, c-format
msgid ""
"Warning: editing existing connection '%s'; 'con-name' argument is ignored\n"
@@ -2776,130 +2778,130 @@ msgstr ""
"Ostrzeżenie: modyfikowanie istniejącego połączenia \"%s\"; parametr \"con-"
"name\" jest ignorowany\n"
-#: ../cli/src/connections.c:7948
+#: ../cli/src/connections.c:7951
#, c-format
msgid "Valid connection types: %s\n"
msgstr "Prawidłowe typy połączeń: %s\n"
-#: ../cli/src/connections.c:7950
+#: ../cli/src/connections.c:7953
#, c-format
msgid "Error: invalid connection type; %s\n"
msgstr "Błąd: nieznany typ połączenia; %s\n"
-#: ../cli/src/connections.c:7986
+#: ../cli/src/connections.c:7989
#, c-format
msgid "===| nmcli interactive connection editor |==="
msgstr "===| interaktywny edytor połączeń nmcli |==="
-#: ../cli/src/connections.c:7989
+#: ../cli/src/connections.c:7992
#, c-format
msgid "Editing existing '%s' connection: '%s'"
msgstr "Modyfikowanie istniejącego połączenia \"%s\": \"%s\""
-#: ../cli/src/connections.c:7991
+#: ../cli/src/connections.c:7994
#, c-format
msgid "Adding a new '%s' connection"
msgstr "Dodawanie nowego połączenia \"%s\""
-#: ../cli/src/connections.c:7993
+#: ../cli/src/connections.c:7996
#, c-format
msgid "Type 'help' or '?' for available commands."
msgstr "Wpisanie \"help\" lub \"?\" wyświetla dostępne polecenia."
-#: ../cli/src/connections.c:7995
+#: ../cli/src/connections.c:7998
#, 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
+#: ../cli/src/connections.c:8034
#, 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
+#: ../cli/src/connections.c:8040
#, c-format
msgid "Connection '%s' (%s) successfully modified.\n"
msgstr "Pomyślnie zmodyfikowano połączenie \"%s\" (%s).\n"
-#: ../cli/src/connections.c:8078
+#: ../cli/src/connections.c:8081
#, c-format
msgid "Error: No arguments provided."
msgstr "Błąd: nie podano żadnych parametrów."
-#: ../cli/src/connections.c:8097
+#: ../cli/src/connections.c:8100
#, 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
+#: ../cli/src/connections.c:8122 ../cli/src/connections.c:8135
#, c-format
msgid "Error: <setting>.<property> argument is missing."
msgstr "Błąd: brak parametru <ustawienie>.<właściwość>."
-#: ../cli/src/connections.c:8137
+#: ../cli/src/connections.c:8140
#, c-format
msgid "Error: value for '%s' is missing."
msgstr "Błąd: brak wartości dla \"%s\"."
-#: ../cli/src/connections.c:8155
+#: ../cli/src/connections.c:8158
#, c-format
msgid "Error: invalid <setting>.<property> '%s'."
msgstr "Błąd: nieprawidłowe <ustawienie>.<właściwość> \"%s\"."
-#: ../cli/src/connections.c:8163
+#: ../cli/src/connections.c:8166
#, 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
+#: ../cli/src/connections.c:8187
#, c-format
msgid "Error: invalid property '%s': %s."
msgstr "Błąd: nieprawidłowa właściwość \"%s\": %s."
-#: ../cli/src/connections.c:8195
+#: ../cli/src/connections.c:8198
#, 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
+#: ../cli/src/connections.c:8216
#, 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
+#: ../cli/src/connections.c:8252
#, 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
+#: ../cli/src/connections.c:8323
#, c-format
msgid "Error: unknown connection: %s\n"
msgstr "Błąd: nieznane połączenie: %s\n"
#. truncate trailing ", "
-#: ../cli/src/connections.c:8356
+#: ../cli/src/connections.c:8359
#, 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
+#: ../cli/src/connections.c:8430
#, c-format
msgid "Could not load file '%s'\n"
msgstr "Nie można wczytać pliku \"%s\"\n"
-#: ../cli/src/connections.c:8612
+#: ../cli/src/connections.c:8615
#, 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
+#: ../cli/src/connections.c:8684 ../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
+#: ../cli/src/connections.c:8694
#, c-format
msgid "Error: Can't obtain connections: settings service is not running."
msgstr ""
@@ -4339,7 +4341,7 @@ msgstr "Ustawienie maski sygnału nie powiodło: %d"
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:343 ../test/nm-online.c:196
+#: ../cli/src/nmcli.c:343 ../test/nm-online.c:168
#, c-format
msgid "Error: Could not create NMClient object."
msgstr "Błąd: nie można utworzyć obiektu NMClient."
@@ -5111,15 +5113,11 @@ msgstr "nie wiadomo, jak uzyskać wartość właściwości"
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
+#: ../cli/src/settings.c:6395
msgid "[NM property description]"
msgstr "[opis właściwości NM]"
-#: ../cli/src/settings.c:6404
+#: ../cli/src/settings.c:6401
msgid "[nmcli specific description]"
msgstr "[konkretny opis nmcli]"
@@ -5207,42 +5205,42 @@ msgstr ""
"zgadzają. Wymuszono wykonanie używając opcji --nocheck, ale wynik może być "
"nieprzewidywalny."
-#: ../libnm-glib/nm-device.c:1794
+#: ../libnm-glib/nm-device.c:1817
msgid "Bluetooth"
msgstr "Bluetooth"
-#: ../libnm-glib/nm-device.c:1800 ../tui/nm-editor-utils.c:182
+#: ../libnm-glib/nm-device.c:1823 ../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
+#: ../libnm-glib/nm-device.c:1827 ../libnm-util/nm-connection.c:1297
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4290 ../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
+#: ../libnm-glib/nm-device.c:1829 ../libnm-util/nm-connection.c:1299
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4401 ../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
+#: ../libnm-glib/nm-device.c:1831 ../libnm-util/nm-connection.c:1301
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4596 ../tui/nm-editor-utils.c:209
msgid "Bridge"
msgstr "Mostek"
-#: ../libnm-glib/nm-device.c:1812
+#: ../libnm-glib/nm-device.c:1835
msgid "ADSL"
msgstr "ADSL"
-#: ../libnm-glib/nm-device.c:1840
+#: ../libnm-glib/nm-device.c:1863
msgid "Wired"
msgstr "Przewodowe"
-#: ../libnm-glib/nm-device.c:1871
+#: ../libnm-glib/nm-device.c:1894
msgid "PCI"
msgstr "PCI"
-#: ../libnm-glib/nm-device.c:1873
+#: ../libnm-glib/nm-device.c:1896
msgid "USB"
msgstr "USB"
@@ -5252,7 +5250,7 @@ msgstr "USB"
#. * "%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
+#: ../libnm-glib/nm-device.c:1992 ../libnm-glib/nm-device.c:2011
#, c-format
msgctxt "long device name"
msgid "%s %s"
@@ -5575,28 +5573,28 @@ msgstr "Nie można zweryfikować pliku PKCS#12: %d"
msgid "Could not generate random data."
msgstr "Nie można utworzyć losowych danych."
-#: ../libnm-util/nm-setting-8021x.c:594
+#: ../libnm-util/nm-setting-8021x.c:599
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
+#: ../libnm-util/nm-setting-8021x.c:917 ../libnm-util/nm-setting-8021x.c:1180
+#: ../libnm-util/nm-setting-8021x.c:1503
msgid "invalid certificate format"
msgstr "nieprawidłowy format certyfikatu"
-#: ../libnm-util/nm-setting-8021x.c:1767
+#: ../libnm-util/nm-setting-8021x.c:1772
msgid "invalid private key"
msgstr "nieprawidłowy klucz prywatny"
-#: ../libnm-util/nm-setting-8021x.c:2078
+#: ../libnm-util/nm-setting-8021x.c:2083
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-8021x.c:2285 ../libnm-util/nm-setting-8021x.c:2302
+#: ../libnm-util/nm-setting-8021x.c:2343 ../libnm-util/nm-setting-8021x.c:2360
+#: ../libnm-util/nm-setting-8021x.c:2412 ../libnm-util/nm-setting-8021x.c:2424
+#: ../libnm-util/nm-setting-8021x.c:2442 ../libnm-util/nm-setting-8021x.c:2454
+#: ../libnm-util/nm-setting-8021x.c:2478 ../libnm-util/nm-setting-8021x.c:2656
#: ../libnm-util/nm-setting-adsl.c:212
#: ../libnm-util/nm-setting-bluetooth.c:144
#: ../libnm-util/nm-setting-bluetooth.c:162
@@ -5616,11 +5614,11 @@ msgstr "nieprawidłowy klucz prywatny drugiego etapu"
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-8021x.c:2292 ../libnm-util/nm-setting-8021x.c:2309
+#: ../libnm-util/nm-setting-8021x.c:2350 ../libnm-util/nm-setting-8021x.c:2367
+#: ../libnm-util/nm-setting-8021x.c:2418 ../libnm-util/nm-setting-8021x.c:2430
+#: ../libnm-util/nm-setting-8021x.c:2448 ../libnm-util/nm-setting-8021x.c:2460
+#: ../libnm-util/nm-setting-8021x.c:2485 ../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
@@ -5638,13 +5636,13 @@ msgstr "brak właściwości"
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
+#: ../libnm-util/nm-setting-8021x.c:2320 ../libnm-util/nm-setting-8021x.c:2332
+#: ../libnm-util/nm-setting-8021x.c:2378 ../libnm-util/nm-setting-8021x.c:2390
#, 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-8021x.c:2631 ../libnm-util/nm-setting-8021x.c:2665
#: ../libnm-util/nm-setting-bluetooth.c:153
#: ../libnm-util/nm-setting-bond.c:507
#: ../libnm-util/nm-setting-infiniband.c:203
@@ -5670,9 +5668,9 @@ msgstr "musi pasować do właściwości \"%s\" dla PKCS#12"
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-8021x.c:2690 ../libnm-util/nm-setting-8021x.c:2700
+#: ../libnm-util/nm-setting-8021x.c:2710 ../libnm-util/nm-setting-8021x.c:2720
+#: ../libnm-util/nm-setting-8021x.c:2730 ../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
@@ -6087,6 +6085,16 @@ msgid "System policy prevents modification of the persistent system hostname"
msgstr ""
"Polityka systemu powstrzymuje modyfikację trwałej systemowej nazwy komputera"
+#. Translators: the first %s is a prefix for the connection id, such
+#. * as "Wired Connection" or "VPN Connection". The %d is a number
+#. * that is combined with the first argument to create a unique
+#. * connection id.
+#: ../src/NetworkManagerUtils.c:457
+#, c-format
+msgctxt "connection id fallback"
+msgid "%s %d"
+msgstr "%s %d"
+
#: ../src/main.c:153
#, c-format
msgid "Opening %s failed: %s\n"
@@ -6240,11 +6248,11 @@ msgstr "nie można odnaleźć usługi \"dhcpcd\"."
msgid "unsupported DHCP client '%s'"
msgstr "nieobsługiwany klient DHCP \"%s\""
-#: ../src/dns-manager/nm-dns-manager.c:385
+#: ../src/dns-manager/nm-dns-manager.c:374
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:387
+#: ../src/dns-manager/nm-dns-manager.c:376
msgid "The nameservers listed below may not be recognized."
msgstr "Poniższe serwery nazw nie mogą nie zostać rozpoznane."
@@ -6299,10 +6307,9 @@ msgstr "Oczekiwany poczÄ…tek odpowiedzi"
msgid "Bingo!"
msgstr "Bingo!"
-#: ../src/devices/adsl/nm-device-adsl.c:122
-#, c-format
-msgid "ADSL connection %d"
-msgstr "Połączenie ADSL %d"
+#: ../src/devices/adsl/nm-device-adsl.c:123
+msgid "ADSL connection"
+msgstr "Połączenie ADSL"
#: ../src/devices/bluetooth/nm-bluez-device.c:194
#, c-format
@@ -6310,74 +6317,60 @@ msgid "%s Network"
msgstr "Sieć %s"
#: ../src/devices/bluetooth/nm-device-bt.c:284
-#, c-format
-msgid "PAN connection %d"
-msgstr "Połączenie PAN %d"
+msgid "PAN connection"
+msgstr "Połączenie PAN"
#: ../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/wwan/nm-modem-broadband.c:439
+#: ../src/devices/wwan/nm-modem-old.c:816
+msgid "GSM connection"
+msgstr "Połączenie GSM"
#: ../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/wwan/nm-modem-broadband.c:461
+#: ../src/devices/wwan/nm-modem-old.c:843
+msgid "CDMA connection"
+msgstr "Połączenie CDMA"
#: ../src/devices/bluetooth/nm-device-bt.c:317
-#, c-format
-msgid "DUN connection %d"
-msgstr "Połączenie DUN %d"
+msgid "DUN connection"
+msgstr "Połączenie DUN"
-#: ../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-bond.c:139
+msgid "Bond connection"
+msgstr "Połączenie wiązane"
-#: ../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-bridge.c:149
+msgid "Bridge connection"
+msgstr "Połączenie mostkowane"
-#: ../src/devices/nm-device-ethernet.c:1486
-#, c-format
-msgid "PPPoE connection %d"
-msgstr "Połączenie PPPoE %d"
+#: ../src/devices/nm-device-ethernet.c:1487
+msgid "PPPoE connection"
+msgstr "Połączenie PPPoE"
-#: ../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/devices/nm-device-ethernet.c:1487
+msgid "Wired connection"
+msgstr "Połączenie przewodowe"
-#: ../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/devices/nm-device-infiniband.c:256
+msgid "InfiniBand connection"
+msgstr "Połączenie InfiniBand"
-#: ../src/devices/nm-device-team.c:150 ../tui/nm-editor-utils.c:223
-#, c-format
-msgid "Team connection %d"
-msgstr "Połączenie zespołowe %d"
+#: ../src/devices/nm-device-team.c:153
+msgid "Team connection"
+msgstr "Połączenie zespołowe"
-#: ../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/devices/nm-device-vlan.c:231
+msgid "VLAN connection"
+msgstr "Połączenie VLAN"
-#: ../src/devices/wifi/nm-device-olpc-mesh.c:164
-#, c-format
-msgid "Mesh %d"
-msgstr "Sieć kratowa %d"
+#: ../src/devices/wifi/nm-device-olpc-mesh.c:165
+msgid "Mesh"
+msgstr "Sieć kratowa"
-#: ../src/nm-manager.c:3304 ../tui/nm-editor-utils.c:246
-#, c-format
-msgid "VPN connection %d"
-msgstr "Połączenie VPN %d"
+#: ../src/nm-manager.c:3385
+msgid "VPN connection"
+msgstr "Połączenie VPN"
#: ../src/nm-sleep-monitor-systemd.c:116
msgid "NetworkManager needs to turn off networks"
@@ -6387,12 +6380,17 @@ msgstr "Usługa NetworkManager musi wyłączyć sieci"
msgid "System"
msgstr "Systemowe"
-#: ../test/nm-online.c:96
+#: ../src/settings/nm-settings-utils.c:50
+#, c-format
+msgid "Wired connection %d"
+msgstr "Połączenie przewodowe %d"
+
+#: ../test/nm-online.c:86
#, c-format
msgid "\rConnecting"
msgstr "\rÅÄ…czenie"
-#: ../test/nm-online.c:148
+#: ../test/nm-online.c:118
msgid ""
"Time to wait for a connection, in seconds (without the option, default value "
"is 30)"
@@ -6400,58 +6398,58 @@ msgstr ""
"Czas oczekiwania na połączenie, w sekundach (bez opcji, domyślna wartość to "
"30)"
-#: ../test/nm-online.c:149
+#: ../test/nm-online.c:119
msgid "Exit immediately if NetworkManager is not running or connecting"
msgstr ""
"Kończy działanie od razu, jeśli usługa NetworkManager nie jest uruchomiona "
"lub nie Å‚Ä…czy"
-#: ../test/nm-online.c:150
+#: ../test/nm-online.c:120
msgid "Don't print anything"
msgstr "Bez wyświetlania czegokolwiek"
-#: ../test/nm-online.c:151
+#: ../test/nm-online.c:121
msgid "Wait for NetworkManager startup instead of a connection"
msgstr "Czeka na uruchomienie usługi NetworkManager zamiast połączenia"
-#: ../test/nm-online.c:172
+#: ../test/nm-online.c:141
msgid ""
"Waits for NetworkManager to finish activating startup network connections."
msgstr ""
"Czeka, aż usługa NetworkManager ukończy aktywowanie połączeń sieciowych."
-#: ../test/nm-online.c:179 ../test/nm-online.c:185
+#: ../test/nm-online.c:148 ../test/nm-online.c:158
msgid "Invalid option. Please use --help to see a list of valid options."
msgstr ""
"Nieprawidłowa opcja. Parametr --help wyświetli listę prawidłowych opcji."
-#: ../tui/newt/nmt-newt-utils.c:179 ../tui/nmt-editor.c:231
+#: ../tui/newt/nmt-newt-utils.c:180 ../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"
-#: ../tui/newt/nmt-newt-utils.c:327 ../tui/newt/nmt-newt-utils.c:359
+#: ../tui/newt/nmt-newt-utils.c:328 ../tui/newt/nmt-newt-utils.c:360
#, c-format
msgid "Could not create temporary file: %s"
msgstr "Nie można utworzyć pliku tymczasowego: %s"
-#: ../tui/newt/nmt-newt-utils.c:367
+#: ../tui/newt/nmt-newt-utils.c:368
#, c-format
msgid "Editor failed: %s"
msgstr "Edytor się nie powiódł: %s"
-#: ../tui/newt/nmt-newt-utils.c:375
+#: ../tui/newt/nmt-newt-utils.c:376
#, c-format
msgid "Editor failed with status %d"
msgstr "Edytor się nie powiódł ze stanem %d"
-#: ../tui/newt/nmt-newt-utils.c:377
+#: ../tui/newt/nmt-newt-utils.c:378
#, c-format
msgid "Editor failed with signal %d"
msgstr "Edytor się nie powiódł z sygnałem %d"
-#: ../tui/newt/nmt-newt-utils.c:381
+#: ../tui/newt/nmt-newt-utils.c:382
#, c-format
msgid "Could not re-read file: %s"
msgstr "Nie można ponownie odczytać pliku: %s"
@@ -6466,6 +6464,11 @@ msgstr "Połączenie ethernet %d"
msgid "Wi-Fi connection %d"
msgstr "Połączenie Wi-Fi %d"
+#: ../tui/nm-editor-utils.c:177
+#, c-format
+msgid "InfiniBand connection %d"
+msgstr "Połączenie InfiniBand %d"
+
#: ../tui/nm-editor-utils.c:185
#, c-format
msgid "Mobile broadband connection %d"
@@ -6480,6 +6483,31 @@ msgstr "DSL"
msgid "DSL connection %d"
msgstr "Połączenie DSL %d"
+#: ../tui/nm-editor-utils.c:204
+#, c-format
+msgid "Bond connection %d"
+msgstr "Połączenie wiązane %d"
+
+#: ../tui/nm-editor-utils.c:214
+#, c-format
+msgid "Bridge connection %d"
+msgstr "Połączenie mostkowane %d"
+
+#: ../tui/nm-editor-utils.c:223
+#, c-format
+msgid "Team connection %d"
+msgstr "Połączenie zespołowe %d"
+
+#: ../tui/nm-editor-utils.c:231
+#, c-format
+msgid "VLAN connection %d"
+msgstr "Połączenie VLAN %d"
+
+#: ../tui/nm-editor-utils.c:246
+#, c-format
+msgid "VPN connection %d"
+msgstr "Połączenie VPN %d"
+
#: ../tui/nmt-device-entry.c:391
msgid "Select..."
msgstr "Wybierz..."
@@ -6494,7 +6522,7 @@ msgstr "Dodaj"
msgid "Edit..."
msgstr "Modyfikuj..."
-#: ../tui/nmt-edit-connection-list.c:135 ../tui/nmtui-edit.c:467
+#: ../tui/nmt-edit-connection-list.c:135 ../tui/nmtui-edit.c:462
msgid "Delete"
msgstr "Usuń"
@@ -6529,7 +6557,7 @@ 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
+#: ../tui/nmtui-edit.c:461 ../tui/nmtui-hostname.c:69
msgid "Cancel"
msgstr "Anuluj"
@@ -7086,11 +7114,11 @@ msgstr "Połączenie jest już aktywne"
msgid "Create"
msgstr "Utwórz"
-#: ../tui/nmtui-edit.c:342
+#: ../tui/nmtui-edit.c:341
msgid "Select the type of connection you wish to create."
msgstr "Proszę wybrać typ połączenia do utworzenia."
-#: ../tui/nmtui-edit.c:350
+#: ../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."
@@ -7098,21 +7126,21 @@ msgstr ""
"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
+#: ../tui/nmtui-edit.c:381 ../tui/nmtui-edit.c:397
msgid "New Connection"
msgstr "Nowe połączenie"
-#: ../tui/nmtui-edit.c:439
+#: ../tui/nmtui-edit.c:434
#, c-format
msgid "Unable to delete connection: %s"
msgstr "Nie można usunąć połączenia: %s"
-#: ../tui/nmtui-edit.c:468
+#: ../tui/nmtui-edit.c:463
#, 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
+#: ../tui/nmtui-edit.c:477
#, c-format
msgid "Could not delete connection: %s"
msgstr "Nie można usunąć połączenia: %s"
diff --git a/po/ru.po b/po/ru.po
index 490f69d8e..586414a2b 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -10,1344 +10,3349 @@
# Yuri Kozlov <yuray@komyakino.ru>, 2011.
# Stas Solovey <whats_up@tut.by>, 2012.
# Yuri Myasoedov <omerta13@yandex.ru>, 2012.
-#
+# ypoyarko <ypoyarko@redhat.com>, 2013. #zanata
+# ypoyarko <ypoyarko@redhat.com>, 2014. #zanata
msgid ""
msgstr ""
"Project-Id-Version: ru\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-10-24 00:17+0400\n"
-"Last-Translator: Yuri Myasoedov <omerta13@yandex.ru>\n"
+"POT-Creation-Date: 2014-01-23 17:13+0530\n"
+"PO-Revision-Date: 2014-02-09 10:16-0500\n"
+"Last-Translator: ypoyarko <ypoyarko@redhat.com>\n"
"Language-Team: руÑÑкий <gnome-cyr@gnome.org>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-10-20 12:08+0000\n"
-"X-Generator: Gtranslator 2.91.5\n"
+"X-Generator: Zanata 3.2.3\n"
"Plural-Forms: nplurals=3; plural=(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: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 "ДОМЕÐ"
-#. 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: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:633
+#: ../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
+#: ../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 ""
"ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ 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
-#, fuzzy
+#: ../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 ""
+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 "Ðе вÑтавлена SIM-карта GSM-модема"
-#: ../cli/src/common.c:537
+#: ../cli/src/common.c:790
msgid "GSM Modem's SIM PIN required"
msgstr "ТребуетÑÑ PIN-код к SIM-карте GSM-модема"
-#: ../cli/src/common.c:540
+#: ../cli/src/common.c:793
msgid "GSM Modem's SIM PUK required"
msgstr "ТребуетÑÑ PUK-код к SIM-карте GSM-модема"
-#: ../cli/src/common.c:543
+#: ../cli/src/common.c:796
msgid "GSM Modem's SIM wrong"
msgstr "ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ SIM-карта GSM модема"
-#: ../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 "Ошибка RFC 2684 Ethernet Ñ Ð¸Ñпользованием моÑта 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: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 "ИМЯ"
-#. 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-PATH"
-#. 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 "ПО УМОЛЧÐÐИЮ 6"
-#. 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 ""
+msgstr "ПУТЬ ПОДКЛЮЧЕÐИЯ"
-#. 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 ""
+msgstr "ÐœÐСТЕР-ПУТЬ"
-#: ../cli/src/connections.c:148 ../cli/src/devices.c:82
-msgid "GENERAL"
-msgstr "ОБЩИЕ"
-
-#. 0
-#: ../cli/src/connections.c:149
-msgid "IP"
-msgstr "IP"
-
-#. 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 ""
+msgstr "БÐÐÐЕР"
-#. 4
-#: ../cli/src/connections.c:167
+#: ../cli/src/connections.c:205
msgid "VPN-STATE"
-msgstr ""
+msgstr "СТÐТУС VPN"
-#. 5
-#: ../cli/src/connections.c:168
+#: ../cli/src/connections.c:206
msgid "CFG"
+msgstr "CFG"
+
+#: ../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"
+"\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 { КОМÐÐДР| help }\n"
+"\n"
+"КОМÐÐДР:= { show | up | down | add | modify | edit | delete | reload | load "
+"}\n"
+"\n"
+" show configured [[id | uuid | путь] <ID>]\n"
+" show active [[id | uuid | путь | абÑ.путь] <ID>]\n"
+"\n"
+" up [[id | uuid | путь] <ID>] [ifname <имÑ>] [ap <BSSID>] [nsp <имÑ>]\n"
+"\n"
+" up [[id | uuid | путь] <ID>] [ifname <имÑ>] [ap <BSSID>]\n"
+"\n"
+" down [id | uuid | путь | абÑ.путь] <ID>\n"
+"\n"
+" add ОБЩИЕ_ПÐРÐМЕТРЫ ПÐРÐМЕТРЫ_ТИПРПÐРÐМЕТРЫ_IP\n"
+"\n"
+" modify [id | uuid | путь] <ID> <параметр>.<ÑвойÑтво> <значение>\n"
+"\n"
+" edit [id | uuid | путь] <ID>\n"
+" edit [type <новый_тип>] [con-name <новое_имÑ>]\n"
+"\n"
+" delete [id | uuid | путь] <ID>\n"
+"\n"
+" reload\n"
+"\n"
+" load <файл> [ <файл>... ]\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 { ÐРГУМЕÐТЫ | help }\n"
+"\n"
+"ÐРГУМЕÐТЫ := active [[id | uuid | path | apath] <ID>]\n"
+"\n"
+"Показывает ÑпиÑок Ñоединений.\n"
+"ЕÑли параметры не указаны, команда вернет вÑе активные ÑоединениÑ.\n"
+"ЕÑли указан идентификатор, будет показана Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ его Ñоединении.\n"
+"\n"
+"ÐРГУМЕÐТЫ := configured [[id | uuid | path] <ID>]\n"
+"\n"
+"Показывает наÑтроенные ÑоединениÑ, которые могут быть активны,\n"
+"еÑли уÑтройÑтво иÑпользует ÑоответÑтвующий профиль ÑоединениÑ.\n"
+"ЕÑли параметры не указаны, команда вернет вÑе профили.\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 { ÐРГУМЕÐТЫ | help }\n"
+"\n"
+"ÐРГУМЕÐТЫ := [id | uuid | path] <ID> [ifname <интерфейÑ>] [ap <BSSID>] [nsp "
+"<имÑ>]\n"
+"\n"
+"Подключение выбранного уÑтройÑтва. \n"
+"Профиль определÑетÑÑ Ð¿Ð¾ имени, UUID или пути D-Bus.\n"
+"\n"
+"ÐРГУМЕÐТЫ := ifname <интерфейÑ> [ap <BSSID>] [nsp <имÑ>]\n"
+"\n"
+"Подключение выбранного уÑтройÑтва. \n"
+"NetworkManager автоматичеÑки выберет профиль ÑоединениÑ.\n"
+"\n"
+"ifname — подключаемый интерфейÑ\n"
+"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 { ÐРГУМЕÐТЫ | help }\n"
+"\n"
+"ÐРГУМЕÐТЫ := [id | uuid | path | apath] <ID>\n"
+"\n"
+"Отключение ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ ÑƒÑтройÑтвом, не Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡Ð¸Ð²Ð°Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ðµ в дальнейшем."
+"\n"
+"Профиль определÑетÑÑ Ð¿Ð¾ имени, UUID или пути D-Bus.\n"
+"\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 { ÐРГУМЕÐТЫ | help }\n"
+"\n"
+"ÐРГУМЕÐТЫ := ОБЩИЕ_ПÐРÐМЕТРЫ ПÐРÐМЕТРЫ_СОЕДИÐЕÐИЯ ПÐРÐМЕТРЫ_IP\n"
+"\n"
+" ОБЩИЕ ПÐРÐМЕТРЫ:\n"
+" type <тип>\n"
+" ifname <интерфейÑ> | \"*\"\n"
+" [con-name <Ñоединение>]\n"
+" [autoconnect 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>]\n"
+"\n"
+" bluetooth: [addr <Ð°Ð´Ñ€ÐµÑ bluetooth>]\n"
+" [bt-type panu|dun-gsm|dun-cdma]\n"
+"\n"
+" vlan: dev <родительÑкое уÑтройÑтво (UUID ÑоединениÑ, Ð¸Ð¼Ñ "
+"интерфейÑа или MAC)>\n"
+" id <VLAN ID>\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 <file>|<данные 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"
+"\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_OPTIONS:\n"
+" [ip4 <Ð°Ð´Ñ€ÐµÑ IPv4>] [gw4 <шлюз IPv4>]\n"
+" [ip6 <Ð°Ð´Ñ€ÐµÑ IPv6>] [gw6 <шлюз 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 ""
+"Формат: nmcli connection modify { ÐРГУМЕÐТЫ | help }\n"
+"\n"
+"ÐРГУМЕÐТЫ := [id | uuid | путь] <ID> <параметр>.<ÑвойÑтво> [<защита>]\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 { ÐРГУМЕÐТЫ | help }\n"
+"\n"
+"ÐРГУМЕÐТЫ := [id | uuid | путь] <ID>\n"
+"\n"
+"Изменение ÑущеÑтвующего Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ ÑоединениÑ.\n"
+"Профиль определÑетÑÑ Ð¿Ð¾ имени, UUID или пути D-Bus.\n"
+"\n"
+"ÐРГУМЕÐТЫ := [type <новый_тип>] [con-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 { ÐРГУМЕÐТЫ | help }\n"
+"\n"
+"ÐРГУМЕÐТЫ := [id | uuid | path] <ID>\n"
+"\n"
+"Удаление Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ ÑоединениÑ.\n"
+"Профиль определÑетÑÑ Ð¿Ð¾ имени, UUID или пути D-Bus.\n"
+"\n"
-#: ../cli/src/connections.c:190
+#: ../cli/src/connections.c:448
#, c-format
msgid ""
-"Usage: nmcli con { COMMAND | help }\n"
-" COMMAND := { list | status | up | down | delete }\n"
+"Usage: nmcli connection reload { help }\n"
+"\n"
+"Reload all connection files from disk.\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 ""
-"ИÑпользование: nmcli con { КОМÐÐДР| help }\n"
-" КОМÐÐДЫ := { list | status | up | down | delete }\n"
+"Формат: nmcli connection reload { help }\n"
+"\n"
+"Перезагрузка файлов Ñоединений Ñ Ð´Ð¸Ñка.\n"
"\n"
-" list (ÑпиÑок) [id <id> | uuid <id>]\n"
-" status (ÑоÑтоÑние) [id <id> | uuid <id> | path <раÑположение>]\n"
-" up id <id> (задейÑтвовать) | uuid <id> [iface <iface>] [ap <BSSID>] [nsp "
-"<имÑ>] [--nowait] [--timeout <Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ>]\n"
-" up id <id> (задейÑтвовать) | uuid <id> [iface <iface>] [ap <BSSID>] [--"
-"nowait] [--timeout <Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ>]\n"
-" down id <id> (деактивировать) | uuid <id>\n"
-" delete id <id> (удалить id) | uuid <id>\n"
-#: ../cli/src/connections.c:249 ../cli/src/connections.c:609
+#: ../cli/src/connections.c:457
#, c-format
-msgid "Error: 'con list': %s"
-msgstr "Ошибка: «con list»: %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"
+"ÐРГУМЕÐТЫ := <filename> [<файл>...]\n"
+"\n"
+"Загружает файлы Ñоединений Ñ Ð´Ð¸Ñка. \n"
+"Обычно иÑпользуетÑÑ Ð¿Ð¾Ñле Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð² Ñоединений вручную.\n"
+"\n"
+"\n"
-#: ../cli/src/connections.c:251 ../cli/src/connections.c:611
+#: ../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:259
+#: ../cli/src/connections.c:523
msgid "Connection details"
-msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ подключении"
+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 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"
+msgid "Error: 'show configured': %s"
+msgstr "Ошибка «show configured»: %s"
-#: ../cli/src/connections.c:601
-#, c-format
-msgid "Error: no valid parameter specified."
-msgstr "Ошибка: указан недопуÑтимый параметр."
-
-#: ../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 "активно"
+msgstr "включено"
+
+#: ../cli/src/connections.c:734
+msgid "deactivated"
+msgstr "отключено"
-#: ../cli/src/connections.c:645
+#: ../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 "Ð/Д"
-#: ../cli/src/connections.c:914 ../cli/src/connections.c:1138
+#: ../cli/src/connections.c:1012
#, c-format
-msgid "Error: 'con status': %s"
-msgstr "Ошибка: «con status»: %s"
+msgid "Error: 'list active': %s"
+msgstr "Ошибка «list active»: %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:924
+#: ../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
-#, c-format
-msgid "Error: Can't find out if NetworkManager is running: %s."
-msgstr "Ошибка: не удалоÑÑŒ проверить запущен ли NetworkManager: %s."
+msgstr "Ð¡Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾Ð± активном Ñоединении"
-#: ../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
+#: ../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: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' is not an active connection."
msgstr "Ошибка: «%s» не ÑвлÑетÑÑ Ð°ÐºÑ‚Ð¸Ð²Ð½Ñ‹Ð¼ Ñоединением."
-#: ../cli/src/connections.c:1126
+#: ../cli/src/connections.c:1251
#, c-format
-msgid "Error: unknown parameter: %s"
-msgstr "Ошибка: неизвеÑтный параметр: %s"
+msgid "Error: 'show active': %s"
+msgstr "Ошибка «show active»: %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 "Соединение уÑпешно активировано (Ð°Ð´Ñ€ÐµÑ Ð´ÐµÐ¹Ñтвующего D-Bus: %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-Ñоединение уÑпешно уÑтановлено (Ð°Ð´Ñ€ÐµÑ Ð´ÐµÐ¹Ñтвующего D-Bus: %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:1735
+msgid "neither a valid connection nor device given"
+msgstr "недейÑтвительное подключение или уÑтройÑтво не определено"
-#: ../cli/src/connections.c:1702 ../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: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 "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: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». ÐедейÑтвительный MTU: «%s» "
-#: ../cli/src/connections.c:1877
+#: ../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: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». ÐедейÑтвительный InfiniBand P_KEY: «%s»"
-#: ../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». ÐедейÑтвительный режим передачи InfiniBand: «%s» [датаграмма, "
+"подключено]."
-#: ../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 service is not running."
-msgstr "Ошибка: не удалоÑÑŒ получить ÑоединениÑ: Ñлужба параметров не запущена."
+msgid "Error: '%s': '%s' is not valid; %s "
+msgstr "Error: '%s': '%s' is not valid; %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 "ethernet"
-#. 1
-#: ../cli/src/devices.c:84
-msgid "WIFI-PROPERTIES"
-msgstr "СВОЙСТВРWIFI"
+#: ../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 "ТОЧКРДОСТУПÐ"
+#: ../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 "СВОЙСТВРПРОВОДÐОГО СОЕДИÐЕÐИЯ"
+#: ../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 [авто]: "
-#. 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 [нет]: "
-#. 6
-#: ../cli/src/devices.c:89
-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» доÑтупно пÑÑ‚ÑŒ дополнительных аргументов.\n"
-#. 8
-#: ../cli/src/devices.c:91
-msgid "IP6"
-msgstr "IP6"
+#: ../cli/src/connections.c:2643
+msgid "Transport mode (datagram or connected) [datagram]: "
+msgstr "Режим передачи (датаграммы или подключенный) [датаграмма]:"
-#. 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"
+#: ../cli/src/connections.c:2667
+msgid "P_KEY [none]: "
+msgstr "P_KEY [нет]: "
+
+#: ../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» доÑтупен один дополнительный аргумент.\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 допуÑкаетÑÑ Ð¸Ñпользование четырех "
+"дополнительных аргументов.\n"
-#. 11
-#: ../cli/src/devices.c:94
-msgid "VLAN"
+#: ../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 ""
+"Ð”Ð»Ñ Ð¼Ð¾Ð±Ð¸Ð»ÑŒÐ½Ñ‹Ñ… широкополоÑных Ñоединений доÑтупно два дополнительных "
+"аргумента.\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 доÑтупен один дополнительный аргумент.\n"
+
+#: ../cli/src/connections.c:2813
+msgid "Bluetooth type (panu, dun-gsm or dun-cdma) [panu]: "
+msgstr "Тип bluetooth (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 "Ошибка. ÐедопуÑтимый тип bluetooth: «%s»\n"
+
+#: ../cli/src/connections.c:2840
+#, c-format
+msgid "There are 4 optional arguments for 'VLAN' connection type.\n"
+msgstr "Ð”Ð»Ñ Ñоединений «VLAN» доÑтупно четыре дополнительных аргумента.\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» доÑтупны дополнительные аргументы.\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 "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 [нет]: "
+
+#: ../cli/src/connections.c:3023
+#, c-format
+msgid "There is 1 optional argument for '%s' connection type.\n"
+msgstr ""
+"При наÑтройке Ñоединений %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 "Подчиненный группы:"
+
+#: ../cli/src/connections.c:3071
+#, c-format
+msgid "There are 6 optional arguments for 'bridge' connection type.\n"
+msgstr "Ð”Ð»Ñ Ñоединений «bridge» доÑтупно шеÑÑ‚ÑŒ дополнительных аргументов.\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 "Forward delay [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 "Hello time [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 "Max age [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» доÑтупно три дополнительных аргумента.\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 (да/нет) [да]: "
+
+#: ../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» доÑтупно два дополнительных аргумента.\n"
+
+#: ../cli/src/connections.c:3258
+msgid "OLPC Mesh channel [1]: "
+msgstr "Канал OLPC mesh [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 "MAC-Ð°Ð´Ñ€ÐµÑ Ñ€Ð°ÑÑылки DHCP [нет]:"
+
+#: ../cli/src/connections.c:3317
+msgid "IPv4 address (IP[/plen] [gateway]) [none]: "
+msgstr "ÐÐ´Ñ€ÐµÑ IPv4 (IP[/plen] [шлюз]) [нет]: "
+
+#: ../cli/src/connections.c:3319
+msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
+msgstr "ÐÐ´Ñ€ÐµÑ IPv6 (IP[/plen] [шлюз]) [нет]: "
+
+#: ../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-адреÑа? (Да или нет) [да]"
+
+#: ../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 "Ошибка. Ðеобходимо определить Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ."
+
+#: ../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 "ÐÐ´Ñ€ÐµÑ ÑƒÑтройÑтва Bluetooth:"
+
+#: ../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 "Bond-master:"
+
+#: ../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 ""
+"Предупреждение. ПоддерживаютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ подчиненные Ethernet-подключениÑ, "
+"поÑтому «type» игнорируетÑÑ.\n"
-#. 2
-#: ../cli/src/devices.c:110
+#: ../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 [<параметр> | <ÑвойÑтво>] :: перейти к параметру или "
+"ÑвойÑтву\n"
+"remove <параметр>[.<ÑвойÑтво>] | <ÑвойÑтво> :: удалить параметр или "
+"ÑброÑить значение ÑвойÑтва\n"
+"set [<параметр>.<ÑвойÑтво> <значение>] :: изменить значение ÑвойÑтва\n"
+"describe [<параметр>.<ÑвойÑтво>] :: добавить опиÑание ÑвойÑтва\n"
+"print [all] :: показать информацию о Ñоединении\n"
+"verify [all] :: проверить Ñоединение\n"
+"save :: Ñохранить Ñоединение\n"
+"activate [<интерфейÑ>] [/<ap>|<nsp>] :: включить Ñоединение\n"
+"back :: вернутьÑÑ Ðº предыдущему шагу\n"
+"help/? [<команда>] :: показать Ñто Ñправочное Ñообщение\n"
+"nmcli <параметр> <значение> :: ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ nmcli\n"
+"quit :: выход\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 <параметр>[.<ÑвойÑтво>] | <ÑвойÑтво> :: выбор ÑвойÑтва параметр Ð´Ð»Ñ "
+"редактированиÑ\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 <параметр>[.<ÑвойÑтво>] :: удаление или ÑÐ±Ñ€Ð¾Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°\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 [<параметр>.<ÑвойÑтво> <значение>] :: уÑтановка ÑвойÑтва\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 [<параметр>.<ÑвойÑтво>] :: опиÑание ÑвойÑтва\n"
+"\n"
+"Возвращает опиÑание ÑвойÑтва. Полный ÑпиÑок параметров и их значений можно "
+"найти на Ñправочной Ñтранице 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 [<интерфейÑ>] [/<ap>|<nsp>] :: Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ð¸Ñ ÑоединениÑ\n"
+"\n"
+"Эта команда аткивирует выбранное Ñоединение.\n"
+"\n"
+"Параметры:\n"
+"<интерфейÑ> - Ð¸Ð¼Ñ Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñа Ð´Ð»Ñ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ð¸Ð¸ ÑоединениÑ\n"
+"/<ap>|<nsp> - AP (Wi-Fi) или NSP (WiMAX) (еÑли Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð½Ðµ задан, в начале "
+"Ñтроки надо добавить /)\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/? [<команда>] :: Ñправка по командам 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 [<параметр> <значение>] :: ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ nmcli\n"
+"\n"
+"ДоÑтупные параметры:\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"
+"ЕÑли Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð½Ðµ Ñохранены, поÑвитÑÑ Ð¾ÐºÐ½Ð¾ подтверждениÑ.\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 [<значение>] :: определить новое значение\n"
+"add [<значение>] :: добавить параметр\n"
+"change :: изменить текущее значение\n"
+"remove [<индекÑ> | <параметр>] :: удалить значение\n"
+"describe :: добавить опиÑание\n"
+"print [параметр | Ñоединение] :: вывеÑти Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð²\n"
+"back :: вернутьÑÑ Ðº предыдущему шагу\n"
+"help/? [<команда>] :: показать Ñправку или опиÑание команды\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 [<значение>] :: уÑтановка нового значениÑ\n"
+"\n"
+"Эта команда определÑет новое значение ÑвойÑтва.\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 [<значение>] :: приÑвоение Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ ÑвойÑтву\n"
+"\n"
+"Эта команда приÑваивает значение ÑвойÑтву (еÑли ÑвойÑтво имеет тип "
+"контейнера). Ð”Ð»Ñ ÑвойÑтв Ñ ÐµÐ´Ð¸Ð½Ñтвенным значением, оно будет перезапиÑано "
+"(аналогично команде «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 [<индекÑ>|<значение>] :: удаление значениÑ\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-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 [ÑвойÑтво|параметр|Ñоединение] :: вывод ÑвойÑтва (параметра, "
+"ÑоединениÑ)\n"
+"\n"
+"ЕÑли аргумент не указан, возвращает значение ÑвойÑтва. Укажите параметр или "
+"Ñоединение, чтобы получить ÑоответÑтвующую информацию.\n"
+
+#: ../cli/src/connections.c:5935
+#, c-format
+msgid "help/? [<command>] :: help for nmcli commands\n"
+"\n"
+msgstr "help/? [<команда>] :: Ñправка по командам 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"
+"Сохранить? [Да]"
+
+#: ../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 <параметр>» или «set <параметр>.<ÑвойÑтво>»\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 <параметр>» или «describe <параметр>.<ÑвойÑтво>»\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 "Ошибка. Соединение не Ñохранено. Сначала введите «type».\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 ""
+">>> Редактирование в командной Ñтроке недоÑтупно. Ð”Ð»Ñ Ñтого рекомендуетÑÑ "
+"уÑтановить библиотеку Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ‚ÐµÐºÑта. <<<\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 [<параметр>.<ÑвойÑтво>]»."
+
+#: ../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 "Ошибка. Идентификатор ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¾Ñ‚ÑутÑтвует."
+
+#: ../cli/src/connections.c:7582
+#, c-format
+msgid "Error: <setting>.<property> argument is missing."
+msgstr "Ошибка. ОтÑутÑтвует аргумент <параметр>.<ÑвойÑтво>"
+
+#: ../cli/src/connections.c:7605
+#, c-format
+msgid "Error: invalid <setting>.<property> '%s'."
+msgstr "Ошибка <параметр>.<ÑвойÑтво>: «%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 "Ошибка. ÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° «connection»: «%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 "UUID СОЕДИÐЕÐИЯ"
+
+#: ../cli/src/devices.c:89
msgid "VENDOR"
-msgstr "ПОСТÐВЩИК"
+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 "ÐППÐРÐТÐЫЙ ÐДРЕС"
-#. 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 ""
+msgstr "IP_ИÐТЕРФЕЙСÐ"
-#. 12
-#: ../cli/src/devices.c:120
+#: ../cli/src/devices.c:100
msgid "NM-MANAGED"
-msgstr ""
+msgstr "ПОД УПРÐВЛЕÐИЕМ NM"
-#. 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 "ТОЧКРДОСТУПÐ"
+
+#: ../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 "КÐÐÐЛ"
+
+#: ../cli/src/devices.c:177
msgid "FREQ"
msgstr "ЧÐСТОТÐ"
-#. 4
-#: ../cli/src/devices.c:184
+#: ../cli/src/devices.c:178
msgid "RATE"
msgstr "СКОРОСТЬ"
-#. 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 "СИГÐÐЛ"
-#. 6
-#: ../cli/src/devices.c:186
+#: ../cli/src/devices.c:180
+msgid "BARS"
+msgstr "СТОЛБЦЫ"
+
+#: ../cli/src/devices.c:181
msgid "SECURITY"
msgstr "ЗÐЩИТÐ"
-#. 7
-#: ../cli/src/devices.c:187
+#: ../cli/src/devices.c:182
msgid "WPA-FLAGS"
msgstr "ФЛÐГИ WPA"
-#. 8
-#: ../cli/src/devices.c:188
+#: ../cli/src/devices.c:183
msgid "RSN-FLAGS"
msgstr "ФЛÐГИ RSN"
-#. 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 "ÐКТИВЕÐ"
-#. 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 ""
+msgstr "ПОДЧИÐЕÐÐЫЕ"
-#. 0
-#: ../cli/src/devices.c:227
-#, fuzzy
-#| msgid "UUID"
+#: ../cli/src/devices.c:222
msgid "ID"
-msgstr "UUID"
+msgstr "ID"
+
+#: ../cli/src/devices.c:237
+msgid "CAPABILITIES"
+msgstr "ВОЗМОЖÐОСТИ"
+
+#: ../cli/src/devices.c:238
+msgid "WIFI-PROPERTIES"
+msgstr "СВОЙСТВРWIFI"
+
+#: ../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:243
+#: ../cli/src/devices.c:249
+msgid "CONNECTIONS"
+msgstr "СОЕДИÐЕÐИЯ"
+
+#: ../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 device { КОМÐÐДР| help }\n"
+"\n"
+"КОМÐÐДР:= { status | show | connect | disconnect | wifi | wimax }\n"
+"\n"
+"КОМÐÐДР:= { status | show | connect | disconnect | wifi }\n"
+"\n"
+" status\n"
+"\n"
+" show [<интерфейÑ>]\n"
+"\n"
+" connect <интерфейÑ>\n"
+"\n"
+" disconnect <интерфейÑ>\n"
+"\n"
+" wifi [list [ifname <интерфейÑ>] [bssid <BSSID>]]\n"
+"\n"
+" wifi connect <(B)SSID> [password <пароль>] [wep-key-type key|phrase] "
+"[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: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"
+" УСТРОЙСТВО - Ð¸Ð¼Ñ Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñа\n"
+" ТИП - тип уÑтройÑтва\n"
+" СТÐТУС - ÑÑ‚Ð°Ñ‚ÑƒÑ ÑƒÑтройÑтва\n"
+" СОЕДИÐЕÐИЕ - Ñоединение уÑтройÑтва\n"
+"Параметр «--fields» позволÑет изменить показанные Ñтолбцы.\n"
+"«status» иÑпользуетÑÑ Ð¿Ð¾ умолчанию, то еÑÑ‚ÑŒ «nmcli gen» Ñквивалентно «nmcli "
+"gen 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 { ÐРГУМЕÐТЫ | help }\n"
+"\n"
+"ÐРГУМЕÐТЫ := [<интерфейÑ>]\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 { ÐРГУМЕÐТЫ | 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 { ÐРГУМЕÐТЫ | help }\n"
+"\n"
+"ÐРГУМЕÐТЫ := <интерфейÑ>\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 { ÐРГУМЕÐТЫ | help }\n"
+"\n"
+"Выполнение операций Wi-Fi.\n"
+"\n"
+"ÐРГУМЕÐТЫ := [list [ifname <интерфейÑ>] [bssid <BSSID>]]\n"
+"\n"
+"Возвращает доÑтупные точки Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº беÑпроводной Ñети. \n"
+"«ifname» и «bssid» позволÑÑŽÑ‚ получить ÑпиÑок точек доÑтупа \n"
+"Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ интерфейÑа или BSSID.\n"
+"\n"
+"ARGUMENTS := connect <(B)SSID> [password <пароль>] [wep-key-type key|phrase] "
+"[ifname <интерфейÑ>]\n"
+" [bssid <BSSID>] [name <имÑ>] [private yes|no]\n"
+"\n"
+"Подключение к беÑпроводной Ñети, заданной Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ SSID или BSSID. \n"
+"Команда ÑоздаÑÑ‚ новое Ñоединение и иÑпользует его Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº Ñети. \n"
+"Эта команда аналогична выбору SSID в окне графичеÑкого клиента. \n"
+"Так как каждый раз будет ÑоздаватьÑÑ Ð½Ð¾Ð²Ð¾Ðµ Ñоединение, \n"
+"Ñтот ÑпоÑоб подходит Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº новым ÑетÑм. \n"
+"Ð”Ð»Ñ ÑущеÑтвующих Ñоединений рекомендуетÑÑ Ð¸Ñпользовать «nmcli con up id "
+"<имÑ>».\n"
+"Ð’ наÑтоÑщий момент поддерживаютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ открытые Ñети WEP и WPA-PSK. \n"
+"По умолчанию подразумеваетÑÑ, что ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ IP наÑтраиваетÑÑ Ñ‡ÐµÑ€ÐµÐ· DHCP.\n"
+"\n"
+"ÐРГУМЕÐТЫ := rescan [[ifname] <интерфейÑ>]\n"
+"\n"
+"Ðемедленный поиÑк доÑтупных точек доÑтупа. \n"
+"NetworkManager периодичеÑки проверÑет наличие беÑпроводных Ñетей, \n"
+"но иногда Ñто надо Ñделать Ñразу. Эта команда не показывает ÑпиÑок \n"
+"точек доÑтупа — Ð´Ð»Ñ Ñтой цели Ñлужит «nmcli device wifi list».\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 { ÐРГУМЕÐТЫ | help }\n"
+"\n"
+"Выполнение операции над уÑтройÑтвами WiMAX.\n"
+"\n"
+"ÐРГУМЕÐТЫ := [list [ifname <интерфейÑ>] [nsp <имÑ>]]\n"
+"\n"
+"Возвращает ÑпиÑок доÑтупных WiMAX NSP. С помощью параметров \n"
+"«ifname» и «ncp» можно выбрать Ñети Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑ€ÐµÑ‚Ð½Ð¾Ð³Ð¾ интерфейÑа или NCP.\n"
+"\n"
-#: ../cli/src/devices.c:343
+#: ../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 МГц"
-#: ../cli/src/devices.c:400
+#: ../cli/src/devices.c:548
#, c-format
msgid "%u Mbit/s"
msgstr "%u МБ/Ñ"
-#: ../cli/src/devices.c:409
-msgid "Encrypted: "
-msgstr "Зашифровано: "
-
-#: ../cli/src/devices.c:414
-msgid "WEP "
-msgstr "WEP "
-
-#: ../cli/src/devices.c:416
-msgid "WPA "
-msgstr "WPA "
+#: ../cli/src/devices.c:567
+msgid "WPA1"
+msgstr "WPA1"
-#: ../cli/src/devices.c:418
-msgid "WPA2 "
-msgstr "WPA2 "
+#: ../cli/src/devices.c:576
+msgid "802.1X"
+msgstr "802.1X"
-#: ../cli/src/devices.c:421
-msgid "Enterprise "
-msgstr "Enterprise "
-
-#: ../cli/src/devices.c:430
+#: ../cli/src/devices.c:592
msgid "Ad-Hoc"
msgstr "Ad-Hoc"
-#: ../cli/src/devices.c:432
-msgid "Infrastructure"
+#: ../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 "Ошибка «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:614
-msgid "not connected"
-msgstr "не подключён"
-
-#: ../cli/src/devices.c:641
+#: ../cli/src/devices.c:827
#, c-format
msgid "%u Mb/s"
msgstr "%u Мб/c"
-#. 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 "Ошибка: «device status»: %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 "Ошибка: необходимо указать интерфейÑ."
-
-#: ../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."
+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"
+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»."
-#: ../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'."
@@ -1355,309 +3360,569 @@ 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» не ÑвлÑетÑÑ ÑƒÑтройÑтвом 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 "Ошибка: точка доÑтупа Ñ 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:2192
+msgid "Password: "
+msgstr "Пароль:"
-#: ../cli/src/devices.c:1933
+#: ../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: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 "Ошибка: «device 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:2112
+#: ../cli/src/devices.c:2621
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
-msgstr "Ошибка: Ð½ÐµÐ²ÐµÑ€Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° «dev»: «%s»."
+msgstr "Ошибка. ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° «dev»: «%s»."
#: ../cli/src/network-manager.c:37
msgid "RUNNING"
msgstr "ВЫПОЛÐЯЕТСЯ"
-#. 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 "ЗÐПУСК"
-#. 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"
+
+#: ../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"
+"Usage: 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"
+" status\n"
+"\n"
+" hostname [<hostname>]\n"
+"\n"
+" permissions\n"
+"\n"
+" logging [level <log level>] [domains <log domains>]\n"
+"\n"
+msgstr ""
+"Формат: nmcli general { КОМÐÐДР| help }\n"
+"\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"
+"Ð’ противном Ñлучае Ð¸Ð¼Ñ ÑƒÐ·Ð»Ð° будет изменено. \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 { ÐРГУМЕÐТЫ | help }\n"
+"\n"
+"ÐРГУМЕÐТЫ := [level <уровень_ведениÑ_журналов>] [domains <домены>]\n"
+"\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 { КОМÐÐДР| 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 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» повторно проверÑет подключение.\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: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 { ÐРГУМЕÐТЫ | 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 "подключён (локально)"
+msgstr "подключен (локально)"
-#: ../cli/src/network-manager.c:114
+#: ../cli/src/network-manager.c:270
msgid "connected (site only)"
-msgstr "подключён (на узле)"
+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
+msgstr "включен"
+
+#: ../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 "отключён"
+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 "Ошибка прав доÑтупа: %s"
-
-#: ../cli/src/network-manager.c:303
+#: ../cli/src/network-manager.c:475
#, c-format
-msgid "Error: 'nm permissions': %s; allowed fields: %s"
-msgstr "Ошибка прав доÑтупа: %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"
+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'."
+msgid "Error: invalid '%s' argument: '%s' (use on/off)."
msgstr ""
-"Ошибка: недопуÑтимый параметр «sleep»: «%s»; иÑпользуйте «true» или «false»."
+"ÐедопуÑтимый аргумент «%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»."
+#: ../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: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 "Ошибка. ÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° «radio»: «%s»."
-#: ../cli/src/nmcli.c:76
+#: ../cli/src/nmcli.c:78
#, c-format
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
@@ -1671,251 +3936,797 @@ 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 [ПÐРÐМЕТРЫ] ОБЪЕКТ { КОМÐÐДР| help }\n"
+"Формат: %s [ПÐРÐМЕТРЫ] ОБЪЕКТ { КОМÐÐДР| help }\n"
"\n"
"ПÐРÐМЕТРЫ\n"
" -t[erse] Ñжатый вывод\n"
-" -p[retty] форматированный вывод\n"
+" -p[retty] отформатированный вывод\n"
" -m[ode] tabular|multiline режим вывода\n"
-" -f[ields] <поле1,поле2,...>|all|common указать Ð¿Ð¾Ð»Ñ Ð´Ð»Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð°\n"
-" -e[scape] yes|no удалÑÑ‚ÑŒ разделитель Ñтолбцов\n"
-" у значений\n"
-" -n[ocheck] не проверÑÑ‚ÑŒ верÑию nmcli и\n"
-" NetworkManager\n"
-" -v[ersion] показать верÑию программы\n"
-" -h[elp] вывод Ñтой Ñправки\n"
+" -f[ields] <поле1,поле2,...>|all|common Ð¿Ð¾Ð»Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð°\n"
+" -e[scape] yes|no иÑпользовать Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ "
+"разделителей Ñтолбцов \n"
+" -n[ocheck] не проверÑÑ‚ÑŒ верÑии nmcli и "
+"NetworkManager\n"
+" -a[sk] запрашивать ввод недоÑтающих "
+"параметров\n"
+" -w[ait] <Ñекунды> Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ "
+"операции\n"
+" -v[ersion] показать верÑию \n"
+" -h[elp] показать Ñту Ñправку\n"
"\n"
"ОБЪЕКТ\n"
-" nm ÑоÑтоÑние NetworkManager\n"
-" con ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ NetworkManager\n"
-" dev уÑтройÑтва под управлением 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:121
+#: ../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:151
+#: ../cli/src/nmcli.c:162
#, c-format
msgid "Error: Option '--terse' is specified the second time."
-msgstr "Ошибка: параметр «--terse» указан дважды."
+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»."
+msgstr ""
+"Ошибка: неизвеÑтный параметр «%s». Попробуйте выполнить «nmcli -help»."
-#: ../cli/src/nmcli.c:244
+#: ../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:269
+#: ../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: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 (16-теричный ASCII-ключ)"
-#: ../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 МГц, "
-#: ../cli/src/settings.c:568
+#: ../cli/src/settings.c:707
msgid "1800 MHz, "
msgstr "1800 МГц, "
-#: ../cli/src/settings.c:570
+#: ../cli/src/settings.c:709
msgid "1900 MHz, "
msgstr "1900 МГц, "
-#: ../cli/src/settings.c:572
+#: ../cli/src/settings.c:711
msgid "850 MHz, "
msgstr "850 МГц, "
-#: ../cli/src/settings.c:574
+#: ../cli/src/settings.c:713
msgid "WCDMA 3GPP UMTS 2100 MHz, "
msgstr "WCDMA 3GPP UMTS 2100 МГц, "
-#: ../cli/src/settings.c:576
+#: ../cli/src/settings.c:715
msgid "WCDMA 3GPP UMTS 1800 MHz, "
msgstr "WCDMA 3GPP UMTS 1800 МГц, "
-#: ../cli/src/settings.c:578
+#: ../cli/src/settings.c:717
msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
msgstr "WCDMA 3GPP UMTS 1700/2100 МГц, "
-#: ../cli/src/settings.c:580
+#: ../cli/src/settings.c:719
msgid "WCDMA 3GPP UMTS 800 MHz, "
msgstr "WCDMA 3GPP UMTS 800 МГц, "
-#: ../cli/src/settings.c:582
+#: ../cli/src/settings.c:721
msgid "WCDMA 3GPP UMTS 850 MHz, "
msgstr "WCDMA 3GPP UMTS 850 МГц, "
-#: ../cli/src/settings.c:584
+#: ../cli/src/settings.c:723
msgid "WCDMA 3GPP UMTS 900 MHz, "
msgstr "WCDMA 3GPP UMTS 900 МГц, "
-#: ../cli/src/settings.c:586
+#: ../cli/src/settings.c:725
msgid "WCDMA 3GPP UMTS 1700 MHz, "
msgstr "WCDMA 3GPP UMTS 1700 МГц, "
-#: ../cli/src/settings.c:588
+#: ../cli/src/settings.c:727
msgid "WCDMA 3GPP UMTS 1900 MHz, "
msgstr "WCDMA 3GPP UMTS 1900 МГц, "
-#: ../cli/src/settings.c:590
+#: ../cli/src/settings.c:729
msgid "WCDMA 3GPP UMTS 2600 MHz, "
msgstr "WCDMA 3GPP UMTS 2600 МГц, "
-#: ../cli/src/settings.c:608
+#: ../cli/src/settings.c:747
msgid "0 (NONE)"
-msgstr ""
+msgstr "0 (ÐЕТ)"
-#: ../cli/src/settings.c:614
+#: ../cli/src/settings.c:753
msgid "REORDER_HEADERS, "
-msgstr ""
+msgstr "УПОРЯДОЧИТЬ_ЗÐГОЛОВКИ,"
-#: ../cli/src/settings.c:616
+#: ../cli/src/settings.c:755
msgid "GVRP, "
-msgstr ""
+msgstr "GVRP, "
-#: ../cli/src/settings.c:618
+#: ../cli/src/settings.c:757
msgid "LOOSE_BINDING, "
-msgstr ""
+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-адреÑ)"
+msgstr "%d (включено, Ð¿Ñ€ÐµÐ´Ð¿Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¹ IP)"
-#: ../cli/src/settings.c:658
+#: ../cli/src/settings.c:797
#, c-format
msgid "%d (enabled, prefer temporary IP)"
-msgstr "%d (включено, предпочитаетÑÑ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ñ‹Ð¹ IP-адреÑ)"
+msgstr "%d (включено, Ð¿Ñ€ÐµÐ´Ð¿Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ñ‹Ð¹ IP)"
+
+#: ../cli/src/settings.c:809
+msgid "0 (none)"
+msgstr "0 (нет)"
-#: ../cli/src/settings.c:791 ../cli/src/settings.c:987
-#: ../cli/src/settings.c:1696
+#: ../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». ИÑпользуйте формат: <параметр>=<значение>"
+
+#: ../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 "ÐедейÑтвительный MAC Ethernet: «%s»"
+
+#: ../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 "ÐедейÑтвительный MAC-адреÑ: «%s»"
+
+#: ../cli/src/settings.c:2252 ../libnm-util/nm-setting-connection.c:715
+#, c-format
+msgid "'%s' is not a valid UUID"
+msgstr "ÐедейÑтвительный UUID: «%s»"
+
+#: ../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:]<пользователь 1>, [user:]<пользователь 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». ИÑпользуйте Ð¸Ð¼Ñ Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñа или 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"
+" <путь> [<пароль>]\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"
+"а) шеÑтнадцатеричные чиÑла, где одна цифра предÑтавлÑет один байт;\n"
+"б) ÑпиÑок шеÑтнадцатеричных чиÑел через запÑтую Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¼ префикÑом "
+"0x/0X или ведущим нулем.\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"
+" параметр = <значение>, параметр = <значение>,... \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 "ÐедейÑтвительный MAC InfiniBand: «%s»"
+
+#: ../cli/src/settings.c:2765
+#, c-format
+msgid "'%s' is not a valid IBoIP P_Key"
+msgstr "ÐедопуÑтимое значение IBoIP P_Key: «%s»"
+
+#: ../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 "Введите ÑпиÑок адреÑов IPv4 Ñерверов DNS.\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[/префикÑ] [шлюз]."
+
+#: ../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[/префикÑ] [шлюз], ip[/префикÑ] [шлюз],...\n"
+"По умолчанию иÑполльзуетÑÑ Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ 32.\n"
+"\n"
+"Пример: 92.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[/префикÑ] next-hop "
+"[метрика]."
+
+#: ../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/[префикÑ] Ñлед.переход [метрика],...\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 ""
+"Введите ÑпиÑок адреÑов IPv6 Ñерверов DNS. ЕÑли IPv6 наÑтроен в режиме "
+"«auto», Ñерверы будут добавлены в ÑпиÑок, полученный в результате "
+"автоматичеÑкой конфигурации. Серверы DNS не могут иÑпользоватьÑÑ Ð² режимах "
+"«shared» и «link-local». Ð’ оÑтальных режимах они раÑÑматриваютÑÑ ÐºÐ°Ðº "
+"единÑтвенные Ñерверы 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[/префикÑ] [шлюз], 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:3171
+#, c-format
+msgid "'%s' is not valid (use <dest IP>/prefix <next-hop IP> [metric])"
+msgstr ""
+"ÐедейÑтвительное значение «%s». ДопуÑтимый формат: <целевой_ip>/Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ "
+"<ip_перехода> [метрика]."
+
+#: ../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/[префикÑ] Ñлед.переход [метрика],...\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"
+"Пример: 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"
+" параметр = <значение>, параметр = <значение>,...\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: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 ""
-"Ошибка: не удалоÑÑŒ Ñоздать прокÑи-объект D-Bus Ð´Ð»Ñ 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 --"
@@ -1924,7 +4735,7 @@ msgstr ""
"Предупреждение: верÑии 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 "
@@ -1932,6 +4743,7 @@ msgid ""
msgstr ""
"Ошибка: верÑии nmcli (%s) и NetworkManager (%s) не Ñовпадают. Ð”Ð»Ñ "
"принудительного запуÑка иÑпользуйте --nocheck, но результаты не предÑказуемы."
+""
#: ../libnm-util/crypto.c:133
#, c-format
@@ -1943,116 +4755,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 не найден ВИ."
-#: ../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 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 "Длина ВИ должна быть равна чётному количеÑтву байт."
-#: ../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:366
#, 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: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 "Ðе удалоÑÑŒ раÑшифровать Ñертификат."
@@ -2071,97 +4854,87 @@ msgstr "Ðе удалоÑÑŒ инициализировать модуль MD5: %
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: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 "Ðе удалоÑÑŒ Ñоздать ВИ Ð´Ð»Ñ Ñ€Ð°Ñшифровки: %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 "Ðе удалоÑÑŒ Ñоздать ВИ Ð´Ð»Ñ ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ: %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#12: %s"
@@ -2181,125 +4954,483 @@ msgstr "Ðе удалоÑÑŒ инициализировать контекÑÑ‚ MD
msgid "Invalid IV length (must be at least %d)."
msgstr "ÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ Ð´Ð»Ð¸Ð½Ð° ВИ (минимально %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 "Ðе удалоÑÑŒ задать ВИ раÑшифровки."
-#: ../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 "Ðе удалоÑÑŒ задать ВИ раÑшифровки."
-#: ../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 "'%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 "ÐедопуÑтимый Ð°Ð´Ñ€ÐµÑ IPv4 («%s») Ð´Ð»Ñ Â«%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: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 "Not enough memory to make encryption key."
-msgstr "ÐедоÑтаточно памÑти Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡Ð° шифрованиÑ."
+msgid "%d. IPv4 address has invalid prefix"
+msgstr "%d. ÐÐ´Ñ€ÐµÑ IPv4 Ñодержит недопуÑтимый префикÑ"
-#: ../libnm-util/nm-utils.c:2188
-msgid "Could not allocate memory for PEM file creation."
-msgstr "Ðе удалоÑÑŒ выделить памÑÑ‚ÑŒ Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° PEM."
+#: ../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 "ÐедопуÑтимое значение Ð´Ð»Ñ Ð¿Ð¾Ñ€Ñ‚Ð° Ethernet: «%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 "ÐедейÑтвительный MAC-адреÑ: «%s»"
+
+#: ../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-utils.c:2200
+#: ../libnm-util/nm-setting-wireless.c:715
#, c-format
-msgid "Could not allocate memory for writing IV to PEM file."
-msgstr "Ðе удалоÑÑŒ выделить памÑÑ‚ÑŒ Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи ВИ в файл PEM."
+msgid "'%s' is not a valid Wi-Fi mode"
+msgstr "ÐедопуÑтимый режим Wi-Fi: «%s»"
-#: ../libnm-util/nm-utils.c:2212
+#: ../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:2231
+#: ../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.in.h:1
msgid "Enable or disable system networking"
@@ -2366,7 +5497,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"
@@ -2395,7 +5527,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"
@@ -2406,128 +5539,81 @@ msgid "System policy prevents modification of the persistent system hostname"
msgstr ""
"СиÑÑ‚ÐµÐ¼Ð½Ð°Ñ Ð¿Ð¾Ð»Ð¸Ñ‚Ð¸ÐºÐ° запрещает изменение поÑтоÑнного имени узла компьютера"
-#: ../src/main.c:159
-#, c-format
-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 "NetworkManager уже запущен (pid %ld)\n"
-#: ../src/main.c:375
+#: ../src/main.c:329
msgid "Print NetworkManager version and exit"
msgstr "Показать верÑию NetworkManager и выйти"
-#: ../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 "/путь/к/state.file"
-#: ../src/main.c:380
-msgid "Config file location"
-msgstr "РаÑположение файла конфигурации"
-
-#: ../src/main.c:380
-msgid "/path/to/config.file"
-msgstr "/путь/к/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 "Ð”Ð»Ñ Ð·Ð°Ð¿ÑƒÑка 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"
@@ -2535,228 +5621,1065 @@ msgid ""
"should associate with."
msgstr ""
"NetworkManager отÑлеживает вÑе Ñетевые ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¸ автоматичеÑки\n"
-"выбирает Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð°Ð¸Ð±Ð¾Ð»ÐµÐµ подходÑщее Ñоединение. Ртакже "
-"позволÑет\n"
+"выбирает Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð°Ð¸Ð±Ð¾Ð»ÐµÐµ подходÑщее Ñоединение. Ртакже позволÑет\n"
"пользователю задать беÑпроводным картам точки доÑтупа, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ они \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:434
+#: ../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 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 [ошибка %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"
+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:379
+#: ../src/dns-manager/nm-dns-manager.c:401
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr ""
"ЗÐМЕЧÐÐИЕ: преобразователь имён glibc не поддерживает более трёх Ñерверов "
"имён."
-#: ../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 "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 "/путь/к/config.file"
-#: ../src/modem-manager/nm-modem-gsm.c:559 ../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 "/путь/к/каталогу"
+
+#: ../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-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 "Подключение Bond %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 "Подключение PPoE %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:306
+#: ../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 "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: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 Ð´Ð»Ñ Ð¾Ñ‚ÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ ÑоÑтоÑÐ½Ð¸Ñ "
"ÑоединениÑ: %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 "Bond"
-#: ../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Подключение"
+msgstr "Подключение..."
-#: ../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."
+#: ../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 Ð´Ð»Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð° ÑпиÑка параметров."
+
+#: ../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"
+
+#: ../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 "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 "Выбрать..."
+
+#: ../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)"
+
+#: ../tui/nmt-page-bond.c:94
+msgid "Adaptive Load Balancing (alb)"
+msgstr "Ðдаптивное раÑпределение нагрузки (ATLB)"
+
+#: ../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 "Режим разворота пакетов"
+
+#: ../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 (Spanning Tree Protocol)"
+
+#: ../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: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] "%d дополнительный маршрут"
+msgstr[1] "%d дополнительных маршрута"
+msgstr[2] "%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 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 ГГц)"
+
+#: ../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 (Hex или 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 "Пароль"
+
+#: ../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 ""
-"Ðеверный параметр. ИÑпользуйте --help Ð´Ð»Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð° ÑпиÑка возможных параметров."
+"Ð”Ð»Ñ Ð´Ð¾Ñтупа к беÑпроводной Ñети «%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."
+
+#: ../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 "Ñоединение"
+
+#: ../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 "TUI NetworkManager"
+
+#: ../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 не работает."
diff --git a/po/sl.po b/po/sl.po
index ddd4e08e9..3cad67f7c 100644
--- a/po/sl.po
+++ b/po/sl.po
@@ -2593,8 +2593,8 @@ msgstr "vstavek1,vstavek2"
#. Translators: Do not translate the values in the square brackets
#: ../src/main.c:383
-msgid "Log level: one of [ERR, WARN, INFO, DEBUG]"
-msgstr "Raven beleženja: ena izmed [ERR, WARN, INFO, DEBUG]"
+msgid "Log level: one of [ERR, WARN, INFO, DEBUG, TRACE]"
+msgstr "Raven beleženja: ena izmed [ERR, WARN, INFO, DEBUG, TRACE]"
#. Translators: Do not translate the values in the square brackets
#: ../src/main.c:386
diff --git a/po/sv.po b/po/sv.po
index 7bcc96045..c617da6e6 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -1,85 +1,497 @@
# Swedish messages for NetworkManager.
-# Copyright (C) 2004-2012 Free Software Foundation, Inc.
+# Copyright © 2004-2014 Free Software Foundation, Inc.
# Christian Rose <menthos@menthos.com>, 2004, 2005, 2006.
# Daniel Nylander <po@danielnylander.se>, 2006, 2008, 2009, 2010, 2012.
-#
-# $Id: sv.po,v 1.14 2006/12/10 18:34:55 dnylande Exp $
+# Josef Andersson <josef.andersson@fripost.org>, 2014.
#
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: 2012-03-30 15:25+0000\n"
-"PO-Revision-Date: 2012-03-31 13:52+0100\n"
-"Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
-"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=NetworkManager&keywords=I18N+L10N&component=Translations\n"
+"POT-Creation-Date: 2014-10-27 23:12+0000\n"
+"PO-Revision-Date: 2014-10-26 16:03+0100\n"
+"Last-Translator: Josef Andersson <josef.andersson@fripost.org>\n"
+"Language-Team: Svenska <tp-sv@listor.tp-sv.se>\n"
+"Language: sv\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.6\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:125
-#: ../cli/src/connections.c:159
+#: ../clients/cli/common.c:38 ../clients/cli/common.c:50
+#: ../clients/cli/common.c:58 ../clients/cli/common.c:69
+#: ../clients/cli/connections.c:170 ../clients/cli/connections.c:192
msgid "GROUP"
msgstr "GRUPP"
#. 0
-#: ../cli/src/common.c:33
-#: ../cli/src/common.c:53
+#: ../clients/cli/common.c:39 ../clients/cli/common.c:59
msgid "ADDRESS"
msgstr "ADRESS"
#. 1
-#: ../cli/src/common.c:34
-#: ../cli/src/common.c:54
+#: ../clients/cli/common.c:40 ../clients/cli/common.c:60
msgid "ROUTE"
msgstr "RUTT"
#. 2
-#: ../cli/src/common.c:35
-#: ../cli/src/common.c:55
+#: ../clients/cli/common.c:41 ../clients/cli/common.c:61
msgid "DNS"
msgstr "DNS"
#. 3
-#: ../cli/src/common.c:36
-#: ../cli/src/common.c:56
+#: ../clients/cli/common.c:42 ../clients/cli/common.c:62
msgid "DOMAIN"
msgstr "DOMÄN"
#. 4
-#: ../cli/src/common.c:37
+#: ../clients/cli/common.c:43
msgid "WINS"
msgstr "WINS"
#. 0
-#: ../cli/src/common.c:45
-#: ../cli/src/common.c:64
+#: ../clients/cli/common.c:51 ../clients/cli/common.c:70
msgid "OPTION"
msgstr "FLAGGA"
+#: ../clients/cli/common.c:377 ../clients/cli/settings.c:3078
+#: ../clients/cli/settings.c:3097
+#, c-format
+msgid "invalid IPv4 address '%s'"
+msgstr "ogiltig IPv4-adress â€%sâ€"
+
+#: ../clients/cli/common.c:385
+#, c-format
+msgid "invalid prefix '%s'; <1-32> allowed"
+msgstr "ogiltigt prefix â€%sâ€; <1-32> tillÃ¥tet"
+
+#: ../clients/cli/common.c:392 ../clients/cli/common.c:445
+#, c-format
+msgid "invalid gateway '%s'"
+msgstr "ogiltig gateway â€%sâ€"
+
+#: ../clients/cli/common.c:430 ../clients/cli/settings.c:3424
+#: ../clients/cli/settings.c:3443
+#, c-format
+msgid "invalid IPv6 address '%s'"
+msgstr "ogiltig IPv6-adress â€%sâ€"
+
+#: ../clients/cli/common.c:438
+#, c-format
+msgid "invalid prefix '%s'; <1-128> allowed"
+msgstr "ogiltigt prefix â€%sâ€; <1-128> tillÃ¥tet"
+
+#: ../clients/cli/common.c:521
+#, c-format
+msgid "invalid route destination address '%s'"
+msgstr "ogiltig destinationsadress för rutten â€%sâ€"
+
+#: ../clients/cli/common.c:528
+#, c-format
+msgid "invalid prefix '%s'; <1-%d> allowed"
+msgstr "ogiltigt prefix â€%sâ€; <1-%d> tillÃ¥tet"
+
+#: ../clients/cli/common.c:538
+#, c-format
+msgid "invalid next hop address '%s'"
+msgstr "ogiltigt nästa-hoppadress â€%sâ€"
+
+#: ../clients/cli/common.c:543
+#, c-format
+msgid ""
+"the second component of route ('%s') is neither a next hop address nor a "
+"metric"
+msgstr ""
+"andra komponenten pÃ¥ rutten (â€%sâ€) är varken nästa hoppadress eller ett "
+"mätvärde"
+
+#: ../clients/cli/common.c:553
+#, c-format
+msgid "invalid metric '%s'"
+msgstr "ogiltigt mätvärde â€%sâ€"
+
+#: ../clients/cli/common.c:562
+msgid "default route cannot be added (NetworkManager handles it by itself)"
+msgstr ""
+"standardrutten kan inte läggas till (Nätverkshanteraren klarar det själv)"
+
+#: ../clients/cli/common.c:650
+msgid "unmanaged"
+msgstr "ohanterad"
+
+#: ../clients/cli/common.c:652
+msgid "unavailable"
+msgstr "otillgänglig"
+
+#: ../clients/cli/common.c:654 ../clients/cli/general.c:259
+msgid "disconnected"
+msgstr "frånkopplad"
+
+#: ../clients/cli/common.c:656
+msgid "connecting (prepare)"
+msgstr "ansluter (förbereder)"
+
+#: ../clients/cli/common.c:658
+msgid "connecting (configuring)"
+msgstr "ansluter (konfigurerar)"
+
+#: ../clients/cli/common.c:660
+msgid "connecting (need authentication)"
+msgstr "ansluter (behöver autentisering)"
+
+#: ../clients/cli/common.c:662
+msgid "connecting (getting IP configuration)"
+msgstr "ansluter (hämtar IP-konfiguration)"
+
+#: ../clients/cli/common.c:664
+msgid "connecting (checking IP connectivity)"
+msgstr "ansluter (kontrollerar IP-anslutning)"
+
+#: ../clients/cli/common.c:666
+msgid "connecting (starting secondary connections)"
+msgstr "ansluter (startar sekundära anslutningar)"
+
+#: ../clients/cli/common.c:668 ../clients/cli/general.c:255
+msgid "connected"
+msgstr "ansluten"
+
+#: ../clients/cli/common.c:670 ../clients/cli/connections.c:534
+msgid "deactivating"
+msgstr "inaktiverar"
+
+#: ../clients/cli/common.c:672
+msgid "connection failed"
+msgstr "anslutningen misslyckades"
+
+#: ../clients/cli/common.c:674 ../clients/cli/connections.c:539
+#: ../clients/cli/connections.c:562 ../clients/cli/connections.c:1674
+#: ../clients/cli/devices.c:877 ../clients/cli/general.c:262
+#: ../clients/cli/general.c:280 ../clients/cli/general.c:410
+#: ../clients/cli/general.c:426 ../clients/cli/settings.c:704
+#: ../clients/cli/settings.c:766 ../clients/cli/settings.c:1059
+#: ../clients/cli/utils.c:1123 ../src/main.c:509 ../src/main.c:537
+msgid "unknown"
+msgstr "okänd"
+
+#: ../clients/cli/common.c:683
+msgid "No reason given"
+msgstr "Ingen anledning angiven"
+
+#: ../clients/cli/common.c:686 ../clients/cli/connections.c:2444
+#, c-format
+msgid "Unknown error"
+msgstr "Okänt fel"
+
+#: ../clients/cli/common.c:689
+msgid "Device is now managed"
+msgstr "Enheten är nu hanterad"
+
+#: ../clients/cli/common.c:692
+msgid "Device is now unmanaged"
+msgstr "Enheten är nu ohanterad"
+
+#: ../clients/cli/common.c:695
+msgid "The device could not be readied for configuration"
+msgstr "Enheten kunde inte göras redo för konfiguration"
+
+#: ../clients/cli/common.c:698
+msgid ""
+"IP configuration could not be reserved (no available address, timeout, etc.)"
+msgstr ""
+"IP-konfigurationen kunde inte reserveras (ingen tillgänglig adress, "
+"tidsgräns, etc.)"
+
+#: ../clients/cli/common.c:701
+msgid "The IP configuration is no longer valid"
+msgstr "IP-konfigurationen är inte längre giltig"
+
+#: ../clients/cli/common.c:704
+msgid "Secrets were required, but not provided"
+msgstr "Hemligheter krävdes men tillhandahölls ej"
+
+#: ../clients/cli/common.c:707
+msgid "802.1X supplicant disconnected"
+msgstr "802.1X-supplikanten kopplade från"
+
+#: ../clients/cli/common.c:710
+msgid "802.1X supplicant configuration failed"
+msgstr "Konfiguration av 802.1X-supplikanten misslyckades"
+
+#: ../clients/cli/common.c:713
+msgid "802.1X supplicant failed"
+msgstr "802.1X-supplikanten misslyckades"
+
+#: ../clients/cli/common.c:716
+msgid "802.1X supplicant took too long to authenticate"
+msgstr "802.1X-supplikanten tog för lång tid att autentisera"
+
+#: ../clients/cli/common.c:719
+msgid "PPP service failed to start"
+msgstr "PPP-tjänsten misslyckades med att starta"
+
+#: ../clients/cli/common.c:722
+msgid "PPP service disconnected"
+msgstr "PPP-tjänsten kopplades från"
+
+#: ../clients/cli/common.c:725
+msgid "PPP failed"
+msgstr "PPP misslyckades"
+
+#: ../clients/cli/common.c:728
+msgid "DHCP client failed to start"
+msgstr "DHCP-klienten misslyckades med att starta"
+
+#: ../clients/cli/common.c:731
+msgid "DHCP client error"
+msgstr "Fel i DHCP-klienten"
+
+#: ../clients/cli/common.c:734
+msgid "DHCP client failed"
+msgstr "DHCP-klienten misslyckades"
+
+#: ../clients/cli/common.c:737
+msgid "Shared connection service failed to start"
+msgstr "Tjänsten för delad anslutning misslyckades med att starta"
+
+#: ../clients/cli/common.c:740
+msgid "Shared connection service failed"
+msgstr "Tjänsten för delad anslutning misslyckades"
+
+#: ../clients/cli/common.c:743
+msgid "AutoIP service failed to start"
+msgstr "AutoIP-tjänsten misslyckades med att starta"
+
+#: ../clients/cli/common.c:746
+msgid "AutoIP service error"
+msgstr "Fel i AutoIP-tjänsten"
+
+#: ../clients/cli/common.c:749
+msgid "AutoIP service failed"
+msgstr "AutoIP-tjänsten misslyckades"
+
+#: ../clients/cli/common.c:752
+msgid "The line is busy"
+msgstr "Linjen är upptagen"
+
+#: ../clients/cli/common.c:755
+msgid "No dial tone"
+msgstr "Ingen rington"
+
+#: ../clients/cli/common.c:758
+msgid "No carrier could be established"
+msgstr "Ingen bärare kunde etableras"
+
+#: ../clients/cli/common.c:761
+msgid "The dialing request timed out"
+msgstr "Uppringningsbegäran översteg tidsgränsen"
+
+#: ../clients/cli/common.c:764
+msgid "The dialing attempt failed"
+msgstr "Uppringningsförsöket misslyckades"
+
+#: ../clients/cli/common.c:767
+msgid "Modem initialization failed"
+msgstr "Initiering av modem misslyckades"
+
+#: ../clients/cli/common.c:770
+msgid "Failed to select the specified APN"
+msgstr "Misslyckades med att välja angiven APN"
+
+#: ../clients/cli/common.c:773
+msgid "Not searching for networks"
+msgstr "Söker inte efter nätverk"
+
+#: ../clients/cli/common.c:776
+msgid "Network registration denied"
+msgstr "Nätverksregistreringen nekades"
+
+#: ../clients/cli/common.c:779
+msgid "Network registration timed out"
+msgstr "Tidsgränsen för nätverksregistrering överstegs"
+
+#: ../clients/cli/common.c:782
+msgid "Failed to register with the requested network"
+msgstr "Misslyckades med att registrera mot det begärda nätverket"
+
+#: ../clients/cli/common.c:785
+msgid "PIN check failed"
+msgstr "Kontroll av PIN-kod misslyckades"
+
+#: ../clients/cli/common.c:788
+msgid "Necessary firmware for the device may be missing"
+msgstr "Nödvändig fast programvara för enheten kanske saknas"
+
+#: ../clients/cli/common.c:791
+msgid "The device was removed"
+msgstr "Enheten togs bort"
+
+#: ../clients/cli/common.c:794
+msgid "NetworkManager went to sleep"
+msgstr "Nätverkshanteraren somnade"
+
+#: ../clients/cli/common.c:797
+msgid "The device's active connection disappeared"
+msgstr "Enhetens aktiva anslutning försvann"
+
+#: ../clients/cli/common.c:800
+msgid "Device disconnected by user or client"
+msgstr "Enheten kopplades från av användare eller klient"
+
+#: ../clients/cli/common.c:803
+msgid "Carrier/link changed"
+msgstr "Bärare/länk ändrades"
+
+#: ../clients/cli/common.c:806
+msgid "The device's existing connection was assumed"
+msgstr "Enhetens befintliga anslutning antogs"
+
+#: ../clients/cli/common.c:809
+msgid "The supplicant is now available"
+msgstr "Supplikanten finns nu tillgänglig"
+
+#: ../clients/cli/common.c:812
+msgid "The modem could not be found"
+msgstr "Modemet kunde inte hittas"
+
+#: ../clients/cli/common.c:815
+msgid "The Bluetooth connection failed or timed out"
+msgstr "Bluetoothanslutningen misslyckades eller översteg tidsgränsen"
+
+#: ../clients/cli/common.c:818
+msgid "GSM Modem's SIM card not inserted"
+msgstr "SIM-kortet i GSM-modemet är inte anslutet"
+
+#: ../clients/cli/common.c:821
+msgid "GSM Modem's SIM PIN required"
+msgstr "PIN-kod för SIM-kortet i GSM-modemet krävs"
+
+#: ../clients/cli/common.c:824
+msgid "GSM Modem's SIM PUK required"
+msgstr "PUK-kod för SIM-kortet i GSM-modemet krävs"
+
+#: ../clients/cli/common.c:827
+msgid "GSM Modem's SIM wrong"
+msgstr "SIM-kortet i GSM-modemet är felaktigt"
+
+#: ../clients/cli/common.c:830
+msgid "InfiniBand device does not support connected mode"
+msgstr "InfiniBand-enheten saknar stöd för anslutet läge"
+
+#: ../clients/cli/common.c:833
+msgid "A dependency of the connection failed"
+msgstr "Ett beroende till anslutningen misslyckades"
+
+#: ../clients/cli/common.c:836
+msgid "A problem with the RFC 2684 Ethernet over ADSL bridge"
+msgstr "Ett problem med RFC 2684 över ADSL-brygga"
+
+#: ../clients/cli/common.c:839
+msgid "ModemManager is unavailable"
+msgstr "ModemManager är inte tillgängligt"
+
+#: ../clients/cli/common.c:842
+msgid "The Wi-Fi network could not be found"
+msgstr "Trådlösa nätverket kunde inte hittas"
+
+#: ../clients/cli/common.c:845
+msgid "A secondary connection of the base connection failed"
+msgstr "En sekundär anslutning för basanslutningen misslyckades"
+
+#: ../clients/cli/common.c:848
+msgid "DCB or FCoE setup failed"
+msgstr "DCB eller FCoE-inställning misslyckades"
+
+#: ../clients/cli/common.c:851
+msgid "teamd control failed"
+msgstr "teamd-kontroll misslyckades"
+
+#: ../clients/cli/common.c:854
+msgid "Modem failed or no longer available"
+msgstr "Modemet misslyckades eller är inte tillgängligt längre"
+
+#: ../clients/cli/common.c:857
+msgid "Modem now ready and available"
+msgstr "Modemet redo och tillgängligt"
+
+#: ../clients/cli/common.c:860
+msgid "SIM PIN was incorrect"
+msgstr "SIM PIN var felaktig"
+
+#. TRANSLATORS: Unknown reason for a device state change (NMDeviceStateReason)
+#: ../clients/cli/common.c:864 ../clients/cli/devices.c:616
+#: ../libnm-glib/nm-device.c:1812 ../libnm/nm-device.c:1622
+msgid "Unknown"
+msgstr "Okänd"
+
+#: ../clients/cli/common.c:906
+#, c-format
+msgid "invalid priority map '%s'"
+msgstr "ogiltig prioritetshash â€%sâ€"
+
+#: ../clients/cli/common.c:913 ../clients/cli/common.c:919
+#, c-format
+msgid "priority '%s' is not valid (<0-%ld>)"
+msgstr "prioriteten â€%s†är inte giltig (<0-%ld>)"
+
+#: ../clients/cli/common.c:986
+#, c-format
+msgid "'%s' is not a valid team configuration or file name."
+msgstr "â€%s†är inte en giltig teamkonfiguration eller ett giltigt filnamn,"
+
+#. define some prompts for connection editor
+#: ../clients/cli/connections.c:40
+msgid "Setting name? "
+msgstr "Inställningsnamn? "
+
+#: ../clients/cli/connections.c:41
+msgid "Property name? "
+msgstr "Egenskapsnamn? "
+
+#: ../clients/cli/connections.c:42
+msgid "Enter connection type: "
+msgstr "Ange anslutningstyp: "
+
+#. define some other prompts
+#: ../clients/cli/connections.c:45
+msgid "Connection type: "
+msgstr "Anslutningstyp: "
+
+#: ../clients/cli/connections.c:46
+msgid "VPN type: "
+msgstr "VPN-typ: "
+
+#: ../clients/cli/connections.c:47
+msgid "Bond master: "
+msgstr "Master för kombination: "
+
+#: ../clients/cli/connections.c:48
+msgid "Team master: "
+msgstr "Master för grupp: "
+
+#: ../clients/cli/connections.c:49
+msgid "Bridge master: "
+msgstr "Master för brygga: "
+
+#: ../clients/cli/connections.c:50
+msgid "Connection (name, UUID, or path): "
+msgstr "Anslutning (namn, UUID eller sökväg): "
+
#. 0
-#. used only for 'GENERAL' group listing
-#: ../cli/src/connections.c:58
-#: ../cli/src/connections.c:126
-#: ../cli/src/devices.c:102
-#: ../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:193
+#: ../clients/cli/connections.c:58 ../clients/cli/connections.c:171
+#: ../clients/cli/devices.c:55 ../clients/cli/devices.c:84
+#: ../clients/cli/devices.c:94 ../clients/cli/devices.c:105
+#: ../clients/cli/devices.c:114 ../clients/cli/devices.c:129
+#: ../clients/cli/devices.c:142 ../clients/cli/devices.c:168
+#: ../clients/cli/devices.c:183 ../clients/cli/devices.c:192
+#: ../clients/cli/devices.c:201
msgid "NAME"
msgstr "NAMN"
#. 0
#. 1
-#: ../cli/src/connections.c:59
-#: ../cli/src/connections.c:127
+#: ../clients/cli/connections.c:59 ../clients/cli/connections.c:172
msgid "UUID"
msgstr "UUID"
@@ -87,1570 +499,3784 @@ msgstr "UUID"
#. 0
#. 1
#. 2
-#: ../cli/src/connections.c:60
-#: ../cli/src/connections.c:160
-#: ../cli/src/devices.c:68
-#: ../cli/src/devices.c:104
-#: ../cli/src/devices.c:196
+#: ../clients/cli/connections.c:60 ../clients/cli/connections.c:193
+#: ../clients/cli/devices.c:41 ../clients/cli/devices.c:57
+#: ../clients/cli/devices.c:171
msgid "TYPE"
msgstr "TYP"
#. 2
-#: ../cli/src/connections.c:61
+#: ../clients/cli/connections.c:61
msgid "TIMESTAMP"
msgstr "TIDSSTÄMPEL"
#. 3
-#: ../cli/src/connections.c:62
+#: ../clients/cli/connections.c:62
msgid "TIMESTAMP-REAL"
-msgstr "TIMESTAMP-REAL"
+msgstr "TIDSSTÄMPEL-REELL"
#. 4
-#: ../cli/src/connections.c:63
+#. 15
+#: ../clients/cli/connections.c:63 ../clients/cli/devices.c:71
msgid "AUTOCONNECT"
-msgstr "AUTOCONNECT"
+msgstr "AUTOANSLUT"
#. 5
-#: ../cli/src/connections.c:64
+#: ../clients/cli/connections.c:64
+msgid "AUTOCONNECT-PRIORITY"
+msgstr "AUTOANSLUT-PRIORITET"
+
+#. 6
+#: ../clients/cli/connections.c:65
msgid "READONLY"
msgstr "SKRIVSKYDDAD"
-#. 6
+#. 7
#. 8
#. 2
-#. 11
+#. 15
#. 5
-#: ../cli/src/connections.c:65
-#: ../cli/src/connections.c:134
-#: ../cli/src/devices.c:70
-#: ../cli/src/devices.c:183
-#: ../cli/src/devices.c:199
+#: ../clients/cli/connections.c:66 ../clients/cli/connections.c:179
+#: ../clients/cli/devices.c:43 ../clients/cli/devices.c:158
+#: ../clients/cli/devices.c:174
msgid "DBUS-PATH"
msgstr "DBUS-SÖKVÄG"
-#. 2
-#: ../cli/src/connections.c:128
-msgid "DEVICES"
-msgstr "ENHETER"
+#. 8
+#. 13
+#. 4
+#: ../clients/cli/connections.c:67 ../clients/cli/devices.c:156
+#: ../clients/cli/devices.c:173
+msgid "ACTIVE"
+msgstr "AKTIV"
+
+#. 9
+#. 0
+#. 12
+#. 3
+#: ../clients/cli/connections.c:68 ../clients/cli/devices.c:40
+#: ../clients/cli/devices.c:56 ../clients/cli/devices.c:155
+#: ../clients/cli/devices.c:172
+msgid "DEVICE"
+msgstr "ENHET"
+#. 10
#. 3
#. 1
-#. 6
+#. 9
#. 1
-#: ../cli/src/connections.c:129
-#: ../cli/src/devices.c:69
-#: ../cli/src/devices.c:109
-#: ../cli/src/network-manager.c:39
+#: ../clients/cli/connections.c:69 ../clients/cli/connections.c:174
+#: ../clients/cli/devices.c:42 ../clients/cli/devices.c:65
+#: ../clients/cli/general.c:36
msgid "STATE"
msgstr "TILLSTÃ…ND"
+#. 11
+#: ../clients/cli/connections.c:70
+msgid "ACTIVE-PATH"
+msgstr "AKTIV-SÖKVÄG"
+
+#. 2
+#: ../clients/cli/connections.c:173
+msgid "DEVICES"
+msgstr "ENHETER"
+
#. 4
-#: ../cli/src/connections.c:130
+#: ../clients/cli/connections.c:175
msgid "DEFAULT"
msgstr "STANDARD"
#. 5
-#: ../cli/src/connections.c:131
+#: ../clients/cli/connections.c:176
msgid "DEFAULT6"
msgstr "STANDARD6"
#. 6
-#: ../cli/src/connections.c:132
+#: ../clients/cli/connections.c:177
msgid "SPEC-OBJECT"
-msgstr "SPEC-OBJECT"
+msgstr "SPEC-OBJEKT"
#. 7
-#. 1
-#: ../cli/src/connections.c:133
-#: ../cli/src/connections.c:147
+#. 4
+#. Ask for optional 'vpn' arguments.
+#: ../clients/cli/connections.c:178 ../clients/cli/connections.c:216
+#: ../clients/cli/connections.c:3498 ../clients/tui/nm-editor-utils.c:234
+#: ../clients/tui/nmt-connect-connection-list.c:407
msgid "VPN"
msgstr "VPN"
#. 9
-#: ../cli/src/connections.c:135
+#. 5
+#. 19
+#: ../clients/cli/connections.c:180 ../clients/cli/devices.c:46
+#: ../clients/cli/devices.c:75
msgid "CON-PATH"
msgstr "ANS-SÖKV"
#. 10
-#: ../cli/src/connections.c:136
+#: ../clients/cli/connections.c:181
msgid "ZONE"
msgstr "ZON"
#. 11
-#: ../cli/src/connections.c:137
+#: ../clients/cli/connections.c:182
msgid "MASTER-PATH"
msgstr "HUVUDSÖKVÄG"
-#: ../cli/src/connections.c:145
-#: ../cli/src/devices.c:79
-msgid "GENERAL"
-msgstr "ALLMÄNT"
-
-#. 0
-#: ../cli/src/connections.c:146
-msgid "IP"
-msgstr "IP"
-
#. 1
-#: ../cli/src/connections.c:161
+#: ../clients/cli/connections.c:194
msgid "USERNAME"
msgstr "ANVÄNDARNAMN"
#. 2
-#: ../cli/src/connections.c:162
+#: ../clients/cli/connections.c:195
msgid "GATEWAY"
msgstr "GATEWAY"
#. 3
-#: ../cli/src/connections.c:163
+#: ../clients/cli/connections.c:196
msgid "BANNER"
msgstr "BANDEROLL"
#. 4
-#: ../cli/src/connections.c:164
+#: ../clients/cli/connections.c:197
msgid "VPN-STATE"
msgstr "VPN-TILLSTÃ…ND"
#. 5
-#: ../cli/src/connections.c:165
+#: ../clients/cli/connections.c:198
msgid "CFG"
msgstr "KFG"
-#: ../cli/src/connections.c:186
+#: ../clients/cli/connections.c:211 ../clients/cli/devices.c:216
+msgid "GENERAL"
+msgstr "ALLMÄNT"
+
+#. 0
+#. 6
+#: ../clients/cli/connections.c:212 ../clients/cli/devices.c:223
+msgid "IP4"
+msgstr "IP4"
+
+#. 1
+#. 7
+#: ../clients/cli/connections.c:213 ../clients/cli/devices.c:224
+msgid "DHCP4"
+msgstr "DHCP4"
+
+#. 2
+#. 8
+#: ../clients/cli/connections.c:214 ../clients/cli/devices.c:225
+msgid "IP6"
+msgstr "IP6"
+
+#. 3
+#. 9
+#: ../clients/cli/connections.c:215 ../clients/cli/devices.c:226
+msgid "DHCP6"
+msgstr "DHCP6"
+
+#: ../clients/cli/connections.c:249
#, 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 ""
-"Användning: nmcli con { KOMMANDO | help }\n"
-" KOMMANDO := { list | status | up | down | delete }\n"
+"Användning: nmcli connection { KOMMANDO | help }\n"
+"\n"
+"KOMMANDO := { 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 <grnamn>] [ap <BSSID>] [nsp <namn>]\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <grnamn>] [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> ([+|-]<inställning>."
+"<egenskap> <värde>)+\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 <filnamn> [ <filnamn>... ]\n"
"\n"
-" list [id <id> | uuid <id>]\n"
-" status [id <id> | uuid <id> | path <sökväg>]\n"
-" up id <id> | uuid <id> [iface <gränssnitt>] [ap <hwaddr>] [--nowait] [--timeout <tidsgräns>]\n"
-" up id <id> | uuid <id> [iface <gränssnitt>] [ap <BSSID>] [--nowait] [--timeout <tidsgräns>]\n"
-" down id <id> | uuid <id>\n"
-" delete id <id> | uuid <id>\n"
-#: ../cli/src/connections.c:240
-#: ../cli/src/connections.c:591
+#: ../clients/cli/connections.c:270
#, c-format
-msgid "Error: 'con list': %s"
-msgstr "Fel: \"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 ""
+"Användning: nmcli connection show { ARGUMENT | help }\n"
+"\n"
+"ARGUMENT := [--active]\n"
+"\n"
+"Listar anslutningsprofiler i minnet och på disk, varav några också kan vara\n"
+"aktiva om enheten använder den anslutningsprofilen. Utan en parameter kommer "
+"alla\n"
+"profiler att listas. Om flaggan -- active anges kommer endast de aktiva\n"
+"profilerna att visas.\n"
+"\n"
+"ARGUMENT := [--active] [id | uuid | sökväg | apath] <ID> …\n"
+"\n"
+"Visar detaljer för angivna anslutningar. Som standard visas både statiska "
+"och aktiva\n"
+"konfigurationer. Det är möjligt att filtrera utdata\n"
+"med globala flaggan '--fields'. Se manualen för mer information.\n"
+"När flaggan --active anges kommer endast den aktiva profilen att\n"
+"räknas.\n"
-#: ../cli/src/connections.c:242
-#: ../cli/src/connections.c:593
+#: ../clients/cli/connections.c:291
#, c-format
-msgid "Error: 'con list': %s; allowed fields: %s"
-msgstr "Fel: \"con list\": %s; tillåtna fält: %s"
-
-#: ../cli/src/connections.c:250
-msgid "Connection details"
-msgstr "Anslutningsdetaljer"
-
-#: ../cli/src/connections.c:466
-msgid "never"
-msgstr "aldrig"
+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 ""
+"Användning: nmcli connection up { ARGUMENT | help }\n"
+"\n"
+"ARGUMENT := [id | uuid | path ] <ID> [ifname <grnamn>] [ap <BSSID>] [nsp "
+"<namn>]\n"
+"\n"
+"Aktivera en anslutning på en enhet. Profilen som ska aktiveras identifieras "
+"genom dess\n"
+"namn, UUID eller D-Bus-sökväg.\n"
+"\n"
+"ARGUMENT := ifname <grnamn> [ap <BSSID>] [nsp <namn>]\n"
+"\n"
+"Aktivera en enhet med en anslutning. Anslutningsprofilen väljs\n"
+"automatiskt av Nätverkshanteraren.\n"
+"\n"
+"ifname - anger enhet att aktivera anslutningen på\n"
+"ap - anger AP att ansluta till (endast giltig för Wi-Fi)\n"
+"nsp - anger NSP att ansluta till (endast giltigt för WiMAX)\n"
+"\n"
-#. "CAPABILITIES"
-#. Print header
-#. "WIFI-PROPERTIES"
-#: ../cli/src/connections.c:467
-#: ../cli/src/connections.c:468
-#: ../cli/src/connections.c:705
-#: ../cli/src/connections.c:706
-#: ../cli/src/connections.c:708
-#: ../cli/src/devices.c:595
-#: ../cli/src/devices.c:648
-#: ../cli/src/devices.c:762
-#: ../cli/src/devices.c:763
-#: ../cli/src/devices.c:795
-#: ../cli/src/devices.c:821
-#: ../cli/src/devices.c:822
-#: ../cli/src/devices.c:823
-#: ../cli/src/devices.c:824
-#: ../cli/src/devices.c:825
-#: ../cli/src/settings.c:656
-#: ../cli/src/settings.c:726
-#: ../cli/src/settings.c:846
-#: ../cli/src/settings.c:1128
-#: ../cli/src/settings.c:1129
-#: ../cli/src/settings.c:1131
-#: ../cli/src/settings.c:1133
-#: ../cli/src/settings.c:1134
-#: ../cli/src/settings.c:1262
-#: ../cli/src/settings.c:1263
-#: ../cli/src/settings.c:1264
-#: ../cli/src/settings.c:1265
-#: ../cli/src/settings.c:1340
-#: ../cli/src/settings.c:1341
-#: ../cli/src/settings.c:1342
-#: ../cli/src/settings.c:1343
-#: ../cli/src/settings.c:1344
-#: ../cli/src/settings.c:1345
-#: ../cli/src/settings.c:1346
-#: ../cli/src/settings.c:1347
-#: ../cli/src/settings.c:1348
-#: ../cli/src/settings.c:1349
-#: ../cli/src/settings.c:1350
-#: ../cli/src/settings.c:1351
-#: ../cli/src/settings.c:1352
-#: ../cli/src/settings.c:1423
-msgid "yes"
-msgstr "ja"
+#: ../clients/cli/connections.c:311
+#, 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 ""
+"Användning: nmcli connection down { ARGUMENT | help }\n"
+"\n"
+"ARGUMENT := [id | uuid | path | apath] <ID>\n"
+"\n"
+"Inaktivera en anslutning från en enhet (utan att hindra enheten från\n"
+"vidare autoaktivering). Profilen att inaktivera identifieras genom dess "
+"namn,\n"
+"UUID eller D-Bus-sökväg.\n"
+"\n"
-#: ../cli/src/connections.c:467
-#: ../cli/src/connections.c:468
-#: ../cli/src/connections.c:705
-#: ../cli/src/connections.c:706
-#: ../cli/src/connections.c:708
-#: ../cli/src/devices.c:595
-#: ../cli/src/devices.c:648
-#: ../cli/src/devices.c:762
-#: ../cli/src/devices.c:763
-#: ../cli/src/devices.c:795
-#: ../cli/src/devices.c:821
-#: ../cli/src/devices.c:822
-#: ../cli/src/devices.c:823
-#: ../cli/src/devices.c:824
-#: ../cli/src/devices.c:825
-#: ../cli/src/settings.c:656
-#: ../cli/src/settings.c:658
-#: ../cli/src/settings.c:726
-#: ../cli/src/settings.c:846
-#: ../cli/src/settings.c:1128
-#: ../cli/src/settings.c:1129
-#: ../cli/src/settings.c:1131
-#: ../cli/src/settings.c:1133
-#: ../cli/src/settings.c:1134
-#: ../cli/src/settings.c:1262
-#: ../cli/src/settings.c:1263
-#: ../cli/src/settings.c:1264
-#: ../cli/src/settings.c:1265
-#: ../cli/src/settings.c:1340
-#: ../cli/src/settings.c:1341
-#: ../cli/src/settings.c:1342
-#: ../cli/src/settings.c:1343
-#: ../cli/src/settings.c:1344
-#: ../cli/src/settings.c:1345
-#: ../cli/src/settings.c:1346
-#: ../cli/src/settings.c:1347
-#: ../cli/src/settings.c:1348
-#: ../cli/src/settings.c:1349
-#: ../cli/src/settings.c:1350
-#: ../cli/src/settings.c:1351
-#: ../cli/src/settings.c:1352
-#: ../cli/src/settings.c:1423
-msgid "no"
-msgstr "nej"
+#: ../clients/cli/connections.c:323
+#, 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"
+" [lacp-rate slow (0) | fast (1)]\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 ""
+"Användning: nmcli connection add { ARGUMENT | help }\n"
+"\n"
+"ARGUMENT := VANLIGA_FLAGGOR TYP_SPECIFIKA_FLAGGOR IP_FLAGGOR\n"
+"\n"
+" VANLIGA_FLAGGOR:\n"
+" type <typ>\n"
+" ifname <gränssnittsnamn> | \"*\"\n"
+" [con-name <anslutningsnamn>]\n"
+" [autoconnect yes|no]\n"
+"\n"
+" [save yes|no]\n"
+"\n"
+" TYP_SPECIFIKA_FLAGGOR:\n"
+" ethernet: [mac <MAC-adress>]\n"
+" [cloned-mac <klonad MAC-adress>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wifi: ssid <SSID>\n"
+" [mac <MAC-adress>]\n"
+" [cloned-mac <klonad MAC-adress>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wimax: [mac <MAC-adress>]\n"
+" [nsp <NSP>]\n"
+"\n"
+" pppoe: username <PPPoE-användarnamn>\n"
+" [password <PPPoE-lösenord>]\n"
+" [service <PPPoE-tjänstenamn>]\n"
+" [mtu <MTU>]\n"
+" [mac <MAC-adress>]\n"
+"\n"
+" gsm: apn <APN>\n"
+" [user <användarnamn>]\n"
+" [password <lösenord>]\n"
+"\n"
+" cdma: [user <användarnamn>]\n"
+" [password <lösenord>]\n"
+"\n"
+" infiniband: [mac <MAC-adress>]\n"
+" [mtu <MTU>]\n"
+" [transport-mode datagram | connected]\n"
+" [parent <grnamn>]\n"
+" [p-key <IPoIB P_Key>]\n"
+"\n"
+" bluetooth: [addr <bluetoothadress>]\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-flaggor>]\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 <grnamn>]\n"
+" [miimon <num>]\n"
+" [downdelay <num>]\n"
+" [updelay <num>]\n"
+" [arp-interval <num>]\n"
+" [arp-ip-target <num>]\n"
+" [lacp-rate slow (0) | fast (1)]\n"
+"\n"
+" bond-slave: master <master (grnamn, eller anslutnings-UUID eller "
+"namn)>\n"
+"\n"
+" team: [config <file>|<rå JSON-data>]\n"
+"\n"
+" team-slave: master <master (grnamn, eller anslutnings-UUID eller "
+"namn)>\n"
+" [config <file>|<rå 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-adress>]\n"
+"\n"
+" bridge-slave: master <master (grnamn, eller anslutnings-UUID eller "
+"namn)>\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 <användarnamn>]\n"
+"\n"
+" olpc-mesh: ssid <SSID>\n"
+" [channel <1-13>]\n"
+" [dhcp-anycast <MAC-adress>]\n"
+"\n"
+" IP_ALTERNATIV:\n"
+" [ip4 <IPv4-adress>] [gw4 <IPv4-gateway>]\n"
+" [ip6 <IPv6-adress>] [gw6 <IPv6-gateway>]\n"
+"\n"
-#: ../cli/src/connections.c:542
-msgid "Connection list"
-msgstr "Anslutningslista"
-
-#: ../cli/src/connections.c:555
-#: ../cli/src/connections.c:1088
-#: ../cli/src/connections.c:1456
-#: ../cli/src/connections.c:1471
-#: ../cli/src/connections.c:1480
-#: ../cli/src/connections.c:1490
-#: ../cli/src/connections.c:1502
-#: ../cli/src/connections.c:1601
-#: ../cli/src/connections.c:1703
-#: ../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
+#: ../clients/cli/connections.c:402
#, c-format
-msgid "Error: %s argument is missing."
-msgstr "Fel: %s-argument saknas."
+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 ""
+"Användning: nmcli connection modify { ARGUMENT | help }\n"
+"\n"
+"ARGUMENT := [id | uuid | path] <ID> ([+|-]<inställning>.<egenskap> "
+"<värde>)+\n"
+"\n"
+"Modifiera en eller flera av anslutningsprofilens egenskaper.\n"
+"Profilen identifieras genom dess namn, UUID eller D-BUS-sökväg. För "
+"egenskaper\n"
+"med flera värden kan du valfritt ange prefix '+' eller '-' till "
+"egenskapsnamnet.\n"
+"'+'-tecknet gör det möjligt att lägga till objekt istället för att skriva "
+"över hela värdet.\n"
+"'-'-tecknet gör det möjligt att ta bort markerade objekt istället för hela "
+"värdet.\n"
+"\n"
+"Exempel:\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:568
+#: ../clients/cli/connections.c:425
#, c-format
-msgid "Error: %s - no such connection."
-msgstr "Fel: %s - ingen sådan anslutning."
+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 ""
+"Usage: nmcli connection edit { ARGUMENT | help }\n"
+"\n"
+"ARGUMENT := [id | uuid | path] <ID>\n"
+"\n"
+"Redigera en existerande anslutningsprofil i en interaktiv redigerare.\n"
+"Profilen identifieras genom dess namn, UUID eller D-Bus-sökväg\n"
+"\n"
+"ARGUMENT := [type <ny anslutningstyp>] [con-name <nytt anslutningsnamn>]\n"
+"\n"
+"Lägg till en ny anslutningsprofil i en interaktiv redigerare.\n"
+"\n"
-#: ../cli/src/connections.c:574
-#: ../cli/src/connections.c:1515
-#: ../cli/src/connections.c:1618
-#: ../cli/src/connections.c:1710
-#: ../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
+#: ../clients/cli/connections.c:440
#, c-format
-msgid "Unknown parameter: %s\n"
-msgstr "Okänd 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 ""
+"Användning: nmcli connection delete { ARGUMENT | help }\n"
+"\n"
+"ARGUMENT := [id | uuid | path] <ID>\n"
+"\n"
+"Ta bort en anslutningsprofil.\n"
+"Profilen identifieras genom dess namn, UUID, och D-Bus-sökväg.\n"
+"\n"
-#: ../cli/src/connections.c:583
+#: ../clients/cli/connections.c:451
#, c-format
-msgid "Error: no valid parameter specified."
-msgstr "Fel: ingen giltig parameter angiven."
+msgid ""
+"Usage: nmcli connection reload { help }\n"
+"\n"
+"Reload all connection files from disk.\n"
+"\n"
+msgstr ""
+"Användning: nmcli connection reload { help }\n"
+"\n"
+"Läs om alla anslutningsfiler från disk.\n"
+"\n"
-#: ../cli/src/connections.c:598
-#: ../cli/src/connections.c:1803
-#: ../cli/src/devices.c:1768
-#: ../cli/src/network-manager.c:456
+#: ../clients/cli/connections.c:459
#, c-format
-msgid "Error: %s."
-msgstr "Fel: %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 ""
+"Användning: nmcli connection load { ARGUMENT | help }\n"
+"\n"
+"ARGUMENT := <filnamn> [<filnamn>…]\n"
+"\n"
+"Läs in/om en eller flera anslutningsfiler från disk. Använd detta efter att "
+"ha uppdaterat\n"
+"en anslutningsfil manuellt för att försäkra dig om att Nätverkshanteraren är "
+"medveten om sitt senaste\n"
+"tillstånd.\n"
+"\n"
-#: ../cli/src/connections.c:611
+#: ../clients/cli/connections.c:530
msgid "activating"
msgstr "aktiverar"
-#: ../cli/src/connections.c:613
+#: ../clients/cli/connections.c:532
msgid "activated"
msgstr "aktiverad"
-#: ../cli/src/connections.c:615
-#: ../cli/src/devices.c:263
-msgid "deactivating"
-msgstr "inaktiverar"
-
-#: ../cli/src/connections.c:618
-#: ../cli/src/connections.c:641
-#: ../cli/src/connections.c:1327
-#: ../cli/src/devices.c:267
-#: ../cli/src/devices.c:796
-#: ../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:563
-#: ../cli/src/settings.c:591
-#: ../cli/src/utils.c:499
-#: ../src/main.c:450
-#: ../src/main.c:469
-msgid "unknown"
-msgstr "okänt"
+#: ../clients/cli/connections.c:536
+msgid "deactivated"
+msgstr "inaktiverad"
-#: ../cli/src/connections.c:627
+#: ../clients/cli/connections.c:548
msgid "VPN connecting (prepare)"
msgstr "VPN ansluter (förbereder)"
-#: ../cli/src/connections.c:629
+#: ../clients/cli/connections.c:550
msgid "VPN connecting (need authentication)"
msgstr "VPN ansluter (behöver autentisering)"
-#: ../cli/src/connections.c:631
+#: ../clients/cli/connections.c:552
msgid "VPN connecting"
msgstr "VPN ansluter"
-#: ../cli/src/connections.c:633
+#: ../clients/cli/connections.c:554
msgid "VPN connecting (getting IP configuration)"
msgstr "VPN ansluter (hämtar IP-konfiguration)"
-#: ../cli/src/connections.c:635
+#: ../clients/cli/connections.c:556
msgid "VPN connected"
msgstr "VPN ansluten"
-#: ../cli/src/connections.c:637
+#: ../clients/cli/connections.c:558
msgid "VPN connection failed"
msgstr "VPN-anslutning misslyckades"
-#: ../cli/src/connections.c:639
+#: ../clients/cli/connections.c:560
msgid "VPN disconnected"
msgstr "VPN frånkopplad"
-#: ../cli/src/connections.c:892
-#: ../cli/src/connections.c:1116
-#, c-format
-msgid "Error: 'con status': %s"
-msgstr "Fel: \"con status\": %s"
-
-#: ../cli/src/connections.c:894
-#: ../cli/src/connections.c:1118
-#, c-format
-msgid "Error: 'con status': %s; allowed fields: %s"
-msgstr "Fel: \"con status\": %s; tillåtna fält: %s"
-
-#: ../cli/src/connections.c:902
-msgid "Active connection details"
-msgstr "Detaljer för aktiv anslutning"
-
-#: ../cli/src/connections.c:1038
-#: ../cli/src/connections.c:1530
-#: ../cli/src/connections.c:1633
-#: ../cli/src/connections.c:1724
-#: ../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
-#, c-format
-msgid "Error: Can't find out if NetworkManager is running: %s."
-msgstr "Fel: Kunde inte ta reda på om Nätverkshanterare är igång: %s."
-
-#: ../cli/src/connections.c:1042
-#: ../cli/src/connections.c:1534
-#: ../cli/src/connections.c:1637
-#: ../cli/src/connections.c:1728
-#: ../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
+#: ../clients/cli/connections.c:628
+msgid "Connection profile details"
+msgstr "Detaljer för anslutningsprofil"
+
+#: ../clients/cli/connections.c:640 ../clients/cli/connections.c:1050
#, c-format
-msgid "Error: NetworkManager is not running."
-msgstr "Fel: Nätverkshanterare är inte igång."
+msgid "Error: 'connection show': %s"
+msgstr "Fel: â€connection showâ€: %s"
-#: ../cli/src/connections.c:1074
-msgid "Active connections"
-msgstr "Aktiva anslutningar"
+#: ../clients/cli/connections.c:786
+msgid "never"
+msgstr "aldrig"
+
+#. "CAPABILITIES"
+#: ../clients/cli/connections.c:787 ../clients/cli/connections.c:789
+#: ../clients/cli/connections.c:791 ../clients/cli/connections.c:823
+#: ../clients/cli/connections.c:890 ../clients/cli/connections.c:891
+#: ../clients/cli/connections.c:893 ../clients/cli/connections.c:2817
+#: ../clients/cli/connections.c:6544 ../clients/cli/connections.c:6545
+#: ../clients/cli/devices.c:586 ../clients/cli/devices.c:636
+#: ../clients/cli/devices.c:845 ../clients/cli/devices.c:846
+#: ../clients/cli/devices.c:847 ../clients/cli/devices.c:848
+#: ../clients/cli/devices.c:881 ../clients/cli/devices.c:883
+#: ../clients/cli/devices.c:911 ../clients/cli/devices.c:912
+#: ../clients/cli/devices.c:913 ../clients/cli/devices.c:914
+#: ../clients/cli/devices.c:915 ../clients/cli/devices.c:916
+#: ../clients/cli/devices.c:917 ../clients/cli/general.c:420
+msgid "yes"
+msgstr "ja"
+
+#: ../clients/cli/connections.c:787 ../clients/cli/connections.c:789
+#: ../clients/cli/connections.c:791 ../clients/cli/connections.c:890
+#: ../clients/cli/connections.c:891 ../clients/cli/connections.c:893
+#: ../clients/cli/connections.c:2818 ../clients/cli/connections.c:6544
+#: ../clients/cli/connections.c:6545 ../clients/cli/devices.c:586
+#: ../clients/cli/devices.c:636 ../clients/cli/devices.c:845
+#: ../clients/cli/devices.c:846 ../clients/cli/devices.c:847
+#: ../clients/cli/devices.c:848 ../clients/cli/devices.c:881
+#: ../clients/cli/devices.c:883 ../clients/cli/devices.c:911
+#: ../clients/cli/devices.c:912 ../clients/cli/devices.c:913
+#: ../clients/cli/devices.c:914 ../clients/cli/devices.c:915
+#: ../clients/cli/devices.c:916 ../clients/cli/devices.c:917
+#: ../clients/cli/general.c:422
+msgid "no"
+msgstr "nej"
-#: ../cli/src/connections.c:1099
+#: ../clients/cli/connections.c:1038
+msgid "Activate connection details"
+msgstr "Aktivera anslutningsdetaljer"
+
+#: ../clients/cli/connections.c:1271
#, c-format
-msgid "Error: '%s' is not an active connection."
-msgstr "Fel: \"%s\" är inte en aktiv anslutning."
+msgid "invalid field '%s'; allowed fields: %s and %s, or %s,%s"
+msgstr "ogiltigt fält â€%sâ€; tillÃ¥tna fält: %s och %s, eller %s, %s"
-#: ../cli/src/connections.c:1104
+#: ../clients/cli/connections.c:1286 ../clients/cli/connections.c:1294
#, c-format
-msgid "Error: unknown parameter: %s"
-msgstr "Fel: okänd parameter: %s"
+msgid "'%s' has to be alone"
+msgstr "â€%s†mÃ¥ste vara ensamt"
+
+#. Add headers
+#: ../clients/cli/connections.c:1348
+msgid "NetworkManager active profiles"
+msgstr "Aktiva profiler för Nätverkshanteraren"
-#: ../cli/src/connections.c:1211
+#: ../clients/cli/connections.c:1349
+msgid "NetworkManager connection profiles"
+msgstr "Anslutningsprofiler för Nätverkshanteraren"
+
+#: ../clients/cli/connections.c:1389 ../clients/cli/connections.c:1998
+#: ../clients/cli/connections.c:2014 ../clients/cli/connections.c:2023
+#: ../clients/cli/connections.c:2033 ../clients/cli/connections.c:2112
+#: ../clients/cli/connections.c:8052 ../clients/cli/connections.c:8269
+#: ../clients/cli/devices.c:1866 ../clients/cli/devices.c:1874
+#: ../clients/cli/devices.c:2190 ../clients/cli/devices.c:2197
+#: ../clients/cli/devices.c:2211 ../clients/cli/devices.c:2218
+#: ../clients/cli/devices.c:2235 ../clients/cli/devices.c:2243
+#: ../clients/cli/devices.c:2431 ../clients/cli/devices.c:2527
+#: ../clients/cli/devices.c:2534
#, c-format
-msgid "no active connection on device '%s'"
-msgstr "ingen aktiv anslutning på enheten \"%s\""
+msgid "Error: %s argument is missing."
+msgstr "Fel: %s-argument saknas."
+
+#: ../clients/cli/connections.c:1404
+#, c-format
+msgid "Error: %s - no such connection profile."
+msgstr "Fel: %s - inga sådana anslutningsprofiler."
-#: ../cli/src/connections.c:1219
+#: ../clients/cli/connections.c:1461 ../clients/cli/connections.c:2057
+#: ../clients/cli/connections.c:8558 ../clients/cli/devices.c:2410
+#: ../clients/cli/devices.c:2875 ../clients/cli/general.c:517
+#: ../clients/cli/general.c:563 ../clients/cli/general.c:580
+#: ../clients/cli/general.c:619 ../clients/cli/general.c:633
+#: ../clients/cli/general.c:748 ../clients/cli/general.c:792
+#: ../clients/cli/general.c:812
#, c-format
+msgid "Error: %s."
+msgstr "Fel: %s."
+
+#: ../clients/cli/connections.c:1556
+#, c-format
+msgid "no active connection on device '%s'"
+msgstr "ingen aktiv anslutning pÃ¥ enheten â€%sâ€"
+
+#: ../clients/cli/connections.c:1564
msgid "no active connection or device"
msgstr "ingen aktiv anslutning eller enhet"
-#: ../cli/src/connections.c:1290
+#: ../clients/cli/connections.c:1635
#, c-format
msgid "device '%s' not compatible with connection '%s'"
-msgstr "enheten \"%s\" är inte kompatibel med anslutningen \"%s\""
+msgstr "enheten â€%s†är inte kompatibel med anslutningen â€%sâ€"
-#: ../cli/src/connections.c:1292
+#: ../clients/cli/connections.c:1638
#, c-format
msgid "no device found for connection '%s'"
-msgstr "ingen enhet hittades för anslutningen \"%s\""
+msgstr "ingen enhet hittades för anslutningen â€%sâ€"
-#: ../cli/src/connections.c:1303
+#: ../clients/cli/connections.c:1650
msgid "unknown reason"
msgstr "okänd anledning"
-#: ../cli/src/connections.c:1305
+#: ../clients/cli/connections.c:1652 ../clients/cli/general.c:271
msgid "none"
msgstr "ingen"
-#: ../cli/src/connections.c:1307
+#: ../clients/cli/connections.c:1654
msgid "the user was disconnected"
msgstr "användaren kopplades från"
-#: ../cli/src/connections.c:1309
+#: ../clients/cli/connections.c:1656
msgid "the base network connection was interrupted"
msgstr "basnätverksanslutningen avbröts"
-#: ../cli/src/connections.c:1311
+#: ../clients/cli/connections.c:1658
msgid "the VPN service stopped unexpectedly"
msgstr "VPN-tjänsten stoppades oväntat"
-#: ../cli/src/connections.c:1313
+#: ../clients/cli/connections.c:1660
msgid "the VPN service returned invalid configuration"
msgstr "VPN-tjänsten returnerade en ogiltig konfiguration"
-#: ../cli/src/connections.c:1315
+#: ../clients/cli/connections.c:1662
msgid "the connection attempt timed out"
msgstr "anslutningsförsöket översteg tidsgränsen"
-#: ../cli/src/connections.c:1317
+#: ../clients/cli/connections.c:1664
msgid "the VPN service did not start in time"
msgstr "VPN-tjänsten startade inte i tid"
-#: ../cli/src/connections.c:1319
+#: ../clients/cli/connections.c:1666
msgid "the VPN service failed to start"
msgstr "VPN-tjänsten misslyckades med att starta"
-#: ../cli/src/connections.c:1321
+#: ../clients/cli/connections.c:1668
msgid "no valid VPN secrets"
msgstr "inga giltiga VPN-hemligheter"
-#: ../cli/src/connections.c:1323
+#: ../clients/cli/connections.c:1670
msgid "invalid VPN secrets"
msgstr "ogiltiga VPN-hemligheter"
-#: ../cli/src/connections.c:1325
+#: ../clients/cli/connections.c:1672
msgid "the connection was removed"
msgstr "anslutningen togs bort"
-#: ../cli/src/connections.c:1339
+#: ../clients/cli/connections.c:1694 ../clients/cli/connections.c:1722
+#: ../clients/cli/connections.c:1877 ../clients/cli/connections.c:6435
#, c-format
-msgid "state: %s\n"
-msgstr "tillstånd: %s\n"
+msgid "Connection successfully activated (D-Bus active path: %s)\n"
+msgstr "Anslutning aktiverades (aktiv sökväg för D-Bus: %s)\n"
-#: ../cli/src/connections.c:1342
-#: ../cli/src/connections.c:1368
+#: ../clients/cli/connections.c:1701
#, c-format
-msgid "Connection activated\n"
-msgstr "Anslutning aktiverad\n"
+msgid ""
+"Connection successfully activated (master waiting for slaves) (D-Bus active "
+"path: %s)\n"
+msgstr ""
+"Anslutning aktiverades (master väntar på slavar) (aktiv sökväg för D-Bus: "
+"%s)\n"
-#: ../cli/src/connections.c:1345
+#: ../clients/cli/connections.c:1705 ../clients/cli/connections.c:1728
#, c-format
msgid "Error: Connection activation failed."
msgstr "Fel: Aktivering av anslutning misslyckades."
-#: ../cli/src/connections.c:1364
+#: ../clients/cli/connections.c:1772
#, c-format
-msgid "state: %s (%d)\n"
-msgstr "tillstånd: %s (%d)\n"
+msgid "VPN connection successfully activated (D-Bus active path: %s)\n"
+msgstr "VPN-anslutning aktiverad (aktiv sökväg för D-Bus: %s)\n"
-#: ../cli/src/connections.c:1374
+#: ../clients/cli/connections.c:1780
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "Fel: Aktivering av anslutning misslyckades: %s."
-#: ../cli/src/connections.c:1391
-#: ../cli/src/devices.c:1148
+#: ../clients/cli/connections.c:1799 ../clients/cli/devices.c:1319
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "Fel: Tidsgränsen %d sekunder gick ut."
-#: ../cli/src/connections.c:1404
+#: ../clients/cli/connections.c:1859
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "Fel: Aktivering av anslutning misslyckades: %s"
-#: ../cli/src/connections.c:1410
+#: ../clients/cli/connections.c:1936 ../clients/cli/connections.c:2058
+msgid "unknown error"
+msgstr "Okänt fel"
+
+#: ../clients/cli/connections.c:1944
#, c-format
-msgid "Active connection state: %s\n"
-msgstr "Tillstånd för aktiv anslutning: %s\n"
+msgid "unknown device '%s'."
+msgstr "Okänd enhet â€%sâ€"
-#: ../cli/src/connections.c:1411
+#: ../clients/cli/connections.c:1949
+msgid "neither a valid connection nor device given"
+msgstr "ingen aktiv anslutning eller enhet angiven"
+
+#: ../clients/cli/connections.c:2042 ../clients/cli/devices.c:1218
+#: ../clients/cli/devices.c:1880 ../clients/cli/devices.c:2254
+#: ../clients/cli/devices.c:2540
#, c-format
-msgid "Active connection path: %s\n"
-msgstr "Sökväg för aktiv anslutning: %s\n"
+msgid "Unknown parameter: %s\n"
+msgstr "Okänd parameter: %s\n"
-#: ../cli/src/connections.c:1464
-#: ../cli/src/connections.c:1609
-#: ../cli/src/connections.c:1737
+#: ../clients/cli/connections.c:2066
+msgid "preparing"
+msgstr "förbereder"
+
+#: ../clients/cli/connections.c:2094 ../clients/cli/connections.c:8250
+#: ../clients/cli/connections.c:8364
#, c-format
-msgid "Error: Unknown connection: %s."
-msgstr "Fel: Okänd anslutning: %s."
+msgid "Error: No connection specified."
+msgstr "Fel: Ingen anslutning angiven."
-#: ../cli/src/connections.c:1510
-#: ../cli/src/devices.c:1220
+#: ../clients/cli/connections.c:2122
#, c-format
-msgid "Error: timeout value '%s' is not valid."
-msgstr "Fel: värdet \"%s\" för tidsgränsen är inte giltigt."
+msgid "Error: '%s' is not an active connection."
+msgstr "Fel: â€%s†är inte en aktiv anslutning."
-#: ../cli/src/connections.c:1523
-#: ../cli/src/connections.c:1626
-#: ../cli/src/connections.c:1717
+#: ../clients/cli/connections.c:2423 ../clients/cli/utils.c:517
#, c-format
-msgid "Error: id or uuid has to be specified."
-msgstr "Fel: id eller uuid måste anges."
+msgid "'%s' not among [%s]"
+msgstr "â€%s†inte bland [%s]"
-#: ../cli/src/connections.c:1555
+#: ../clients/cli/connections.c:2502
#, c-format
-msgid "Error: No suitable device found: %s."
-msgstr "Fel: Ingen lämplig enhet hittades: %s."
+msgid "Error: '%s': '%s' is not a valid %s MAC address."
+msgstr "Fel: '%s': '%s' är inte en giltig %s-MAC-adress."
-#: ../cli/src/connections.c:1557
+#. Ask for optional arguments
+#: ../clients/cli/connections.c:2503 ../clients/cli/connections.c:2933
+#: ../clients/tui/nm-editor-utils.c:164 ../libnm-core/nm-connection.c:1490
+#: ../libnm-glib/nm-device.c:1800 ../libnm/nm-device.c:1610
+msgid "InfiniBand"
+msgstr "InfiniBand"
+
+#: ../clients/cli/connections.c:2503 ../clients/tui/nm-editor-utils.c:147
+#: ../libnm-glib/nm-device.c:1788 ../libnm/nm-device.c:1598
+msgid "Ethernet"
+msgstr "Ethernet"
+
+#: ../clients/cli/connections.c:2523
#, c-format
-msgid "Error: No suitable device found."
-msgstr "Fel: Ingen lämplig enhet hittades."
+msgid "Error: 'mtu': '%s' is not a valid MTU."
+msgstr "Fel: â€mtuâ€: â€%s†är inte ett giltigt MTU."
-#: ../cli/src/connections.c:1662
+#: ../clients/cli/connections.c:2539
#, c-format
-msgid "Warning: Connection not active\n"
-msgstr "Varning: Anslutningen är inte aktiv\n"
+msgid "Error: 'parent': '%s' is not a valid interface name."
+msgstr "Fel: â€parentâ€: â€%s†är inte ett giltigt gränssnittsnamn."
-#: ../cli/src/connections.c:1676
+#: ../clients/cli/connections.c:2560
#, c-format
-msgid "Error: Connection deletion failed: %s"
-msgstr "Fel: Borttagning av anslutning misslyckades: %s"
+msgid "Error: 'p-key': '%s' is not a valid InfiniBand P_KEY."
+msgstr "Fel: â€p-keyâ€: â€%s†är inte en giltig InfiniBand P_KEY."
-#: ../cli/src/connections.c:1794
+#: ../clients/cli/connections.c:2589
#, c-format
-msgid "Error: 'con' command '%s' is not valid."
-msgstr "Fel: \"con\"-kommandot \"%s\" är inte giltigt."
+msgid ""
+"Error: 'mode': '%s' is not a valid InfiniBand transport mode [datagram, "
+"connected]."
+msgstr ""
+"Fel: â€mode“: â€%s†är inte ett giltigt transportläge för InfiniBand "
+"[datagram, connected]."
-#: ../cli/src/connections.c:1859
+#: ../clients/cli/connections.c:2603
#, c-format
-msgid "Error: could not connect to D-Bus."
-msgstr "Fel: kunde inte ansluta till D-Bus."
+msgid "Error: 'flags': '%s' is not valid; use <0-7>."
+msgstr "Fel: â€flagsâ€: â€%s†är inte giltig; använd <0-7>"
-#: ../cli/src/connections.c:1867
+#: ../clients/cli/connections.c:2625
#, c-format
-msgid "Error: Could not get system settings."
-msgstr "Fel: Kunde inte få systeminställningar."
+msgid "Error: '%s': '%s' is not valid; %s "
+msgstr "Fel: â€%sâ€: â€%s†är inte giltig; %s"
-#: ../cli/src/connections.c:1877
+#: ../clients/cli/connections.c:2808
#, c-format
-msgid "Error: Can't obtain connections: settings service is not running."
-msgstr "Fel: Kan inte läsa av anslutningar: inställningstjänster är inte igång."
+msgid "Error: '%s': '%s' is not valid; use <%u-%u>."
+msgstr "Fel: â€%sâ€: â€%s†är inte giltig; använd <%u-%u>."
-#. 0
-#. 9
-#. 3
-#: ../cli/src/devices.c:67
-#: ../cli/src/devices.c:103
-#: ../cli/src/devices.c:181
-#: ../cli/src/devices.c:197
-msgid "DEVICE"
-msgstr "ENHET"
+#. Ask for optional arguments.
+#: ../clients/cli/connections.c:2864
+#, 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] "Det finns %d valfritt argument för anslutningstypen â€%sâ€.\n"
+msgstr[1] "Det finns %d valfria argument för anslutningstypen â€%sâ€.\n"
-#. 0
-#: ../cli/src/devices.c:80
-msgid "CAPABILITIES"
-msgstr "FÖRMÅGOR"
+#: ../clients/cli/connections.c:2867
+#, c-format
+msgid "Do you want to provide it? %s"
+msgid_plural "Do you want to provide them? %s"
+msgstr[0] "Vill du tillhandahålla det? %s"
+msgstr[1] "Vill du tillhandahålla dem? %s"
-#. 1
-#: ../cli/src/devices.c:81
-msgid "WIFI-PROPERTIES"
-msgstr "WIFI-EGENSKAPER"
+#: ../clients/cli/connections.c:2882
+msgid "ethernet"
+msgstr "ethernet"
-#. 2
-#: ../cli/src/devices.c:82
-msgid "AP"
-msgstr "AP"
+#: ../clients/cli/connections.c:2882 ../clients/tui/nm-editor-utils.c:155
+#: ../libnm-glib/nm-device.c:1790 ../libnm/nm-device.c:1600
+msgid "Wi-Fi"
+msgstr "Wi-Fi"
-#. 3
-#: ../cli/src/devices.c:83
-msgid "WIRED-PROPERTIES"
-msgstr "TRÃ…DADE-EGENSKAPER"
+#: ../clients/cli/connections.c:2890 ../clients/cli/connections.c:2938
+#: ../clients/cli/connections.c:3047 ../clients/cli/connections.c:3126
+msgid "MTU [auto]: "
+msgstr "MTU [auto]:"
-#. 4
-#: ../cli/src/devices.c:84
-msgid "WIMAX-PROPERTIES"
-msgstr "WIMAX-EGENSKAPER"
+#: ../clients/cli/connections.c:2901 ../clients/cli/connections.c:2949
+#: ../clients/cli/connections.c:3019 ../clients/cli/connections.c:3058
+#: ../clients/cli/connections.c:3430
+msgid "MAC [none]: "
+msgstr "MAC [none]: "
-#. 5
-#. 0
-#: ../cli/src/devices.c:85
-#: ../cli/src/devices.c:194
-msgid "NSP"
-msgstr "NSP"
+#: ../clients/cli/connections.c:2912
+msgid "Cloned MAC [none]: "
+msgstr "Klonad MAC [none]: "
-#. 6
-#: ../cli/src/devices.c:86
-msgid "IP4"
-msgstr "IP4"
+#: ../clients/cli/connections.c:2960
+#, c-format
+msgid "Transport mode %s"
+msgstr "Transportläge %s"
-#. 7
-#: ../cli/src/devices.c:87
-msgid "DHCP4"
-msgstr "DHCP4"
+#: ../clients/cli/connections.c:2973
+msgid "Parent interface [none]: "
+msgstr "Föräldragränssnitt [none]: "
-#. 8
-#: ../cli/src/devices.c:88
-msgid "IP6"
-msgstr "IP6"
+#: ../clients/cli/connections.c:2984
+msgid "P_KEY [none]: "
+msgstr "P_KEY [none]: "
-#. 9
-#: ../cli/src/devices.c:89
-msgid "DHCP6"
-msgstr "DHCP6"
+#: ../clients/cli/connections.c:2994
+#, c-format
+msgid "Error: 'p-key' is mandatory when 'parent' is specified.\n"
+msgstr "Fel: â€p-key†är obligatoriskt när â€parent†är angett.\n"
+
+#. Ask for optional 'wimax' arguments.
+#: ../clients/cli/connections.c:3014 ../libnm-glib/nm-device.c:1796
+#: ../libnm/nm-device.c:1606
+msgid "WiMAX"
+msgstr "WiMAX"
+
+#. Ask for optional 'pppoe' arguments.
+#: ../clients/cli/connections.c:3037
+msgid "PPPoE"
+msgstr "PPPoE"
+
+#: ../clients/cli/connections.c:3041 ../clients/cli/connections.c:3079
+msgid "Password [none]: "
+msgstr "Lösenord [none]:"
+
+#: ../clients/cli/connections.c:3043
+msgid "Service [none]: "
+msgstr "Tjänst [none]:"
+
+#. Ask for optional 'gsm' or 'cdma' arguments.
+#: ../clients/cli/connections.c:3073
+msgid "mobile broadband"
+msgstr "mobilt bredband"
+
+#: ../clients/cli/connections.c:3077 ../clients/cli/connections.c:3502
+msgid "Username [none]: "
+msgstr "Användarnamn [none]:"
+
+#. Ask for optional 'bluetooth' arguments.
+#: ../clients/cli/connections.c:3092
+msgid "bluetooth"
+msgstr "bluetooth"
+
+#: ../clients/cli/connections.c:3099
+#, c-format
+msgid "Bluetooth type %s"
+msgstr "Bluetooth-typen %s"
+
+#: ../clients/cli/connections.c:3105
+#, c-format
+msgid "Error: 'bt-type': '%s' is not a valid bluetooth type.\n"
+msgstr "Fel: â€bt-type'â€: â€%s†är inte en giltig Bluetoothtyp.\n"
+
+#. Ask for optional 'vlan' arguments.
+#. 13
+#: ../clients/cli/connections.c:3121 ../clients/cli/devices.c:230
+#: ../clients/tui/nm-editor-utils.c:218 ../clients/tui/nmt-page-vlan.c:51
+#: ../libnm-core/nm-connection.c:1488 ../libnm-glib/nm-device.c:1808
+#: ../libnm-util/nm-connection.c:1612 ../libnm/nm-device.c:1618
+msgid "VLAN"
+msgstr "VLAN"
+
+#: ../clients/cli/connections.c:3137
+msgid "VLAN flags (<0-7>) [none]: "
+msgstr "VLAN-flaggor (<0-7>) [none]:"
+
+#: ../clients/cli/connections.c:3148
+msgid "Ingress priority maps [none]: "
+msgstr "Inträdesprioritetshash [none]:"
+
+#: ../clients/cli/connections.c:3159
+msgid "Egress priority maps [none]: "
+msgstr "Utträdesprioritetshash [none]:"
+
+#: ../clients/cli/connections.c:3170
+msgid "Bonding mode [balance-rr]: "
+msgstr "Kombineringsläge [balance-rr]:"
+
+#. Ask for optional 'bond' arguments.
+#: ../clients/cli/connections.c:3186
+msgid "bond"
+msgstr "kombinera"
+
+#: ../clients/cli/connections.c:3208
+msgid "Bonding primary interface [none]: "
+msgstr "Kombinerar primärt gränssnittet [none]:"
+
+#: ../clients/cli/connections.c:3211
+#, c-format
+msgid "Error: 'primary': '%s' is not a valid interface name.\n"
+msgstr "Fel: â€primaryâ€: â€%s†är inte ett giltigt gränssnittsnamn.\n"
+
+#: ../clients/cli/connections.c:3219
+#, c-format
+msgid "Bonding monitoring mode %s"
+msgstr "Kombinerar övervakningsläget %s"
+
+#: ../clients/cli/connections.c:3225
+#, c-format
+msgid "Error: '%s' is not a valid monitoring mode; use '%s' or '%s'.\n"
+msgstr ""
+"Fel: â€%sâ€: är inte ett giltigt övervakningsläge; använd â€%s†eller â€%sâ€.\n"
+
+#: ../clients/cli/connections.c:3234
+msgid "Bonding miimon [100]: "
+msgstr "Kombinerar miimon [100]:"
+
+#: ../clients/cli/connections.c:3237
+#, c-format
+msgid "Error: 'miimon': '%s' is not a valid number <0-%u>.\n"
+msgstr "Fel: â€miimon†: â€%s†är inte ett giltigt nummer <0-%u>.\n"
+
+#: ../clients/cli/connections.c:3245
+msgid "Bonding downdelay [0]: "
+msgstr "Kombinerar nedfördröjning [0]:"
+
+#: ../clients/cli/connections.c:3248
+#, c-format
+msgid "Error: 'downdelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "Fel: â€downdelayâ€: â€%s†är inte ett giltigt nummer <0-%u>.\n"
+
+#: ../clients/cli/connections.c:3256
+msgid "Bonding updelay [0]: "
+msgstr "Kombinerar uppfördröjning [0]:"
+
+#: ../clients/cli/connections.c:3259
+#, c-format
+msgid "Error: 'updelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "Fel: â€updelayâ€: â€%s†är inte ett giltigt nummer <0-%u>.\n"
+
+#: ../clients/cli/connections.c:3268
+msgid "Bonding arp-interval [0]: "
+msgstr "Kombinerar arp-intervall [0]:"
+
+#: ../clients/cli/connections.c:3271
+#, c-format
+msgid "Error: 'arp-interval': '%s' is not a valid number <0-%u>.\n"
+msgstr "Fel: â€arp-intervalâ€: â€%s†är inte ett giltigt nummer <0-%u>.\n"
+
+#. FIXME: verify the string
+#: ../clients/cli/connections.c:3279
+msgid "Bonding arp-ip-target [none]: "
+msgstr "Kombinerar arp-ip-target [none]:"
+
+#: ../clients/cli/connections.c:3286
+msgid "LACP rate ('slow' or 'fast') [slow]: "
+msgstr "LACP-hastighet (\"slow\" eller \"fast\") [slow]:"
+
+#: ../clients/cli/connections.c:3292
+#, c-format
+msgid "Error: 'lacp_rate': '%s' is invalid ('slow' or 'fast').\n"
+msgstr "Fel: â€lacp-rateâ€: â€%s†är ogiltig (â€slow†eller â€fastâ€).\n"
+
+#: ../clients/cli/connections.c:3315
+msgid "Team JSON configuration [none]: "
+msgstr "JSON-konfiguration för grupp [none]:"
+
+#: ../clients/cli/connections.c:3332
+msgid "team"
+msgstr "grupp"
+
+#: ../clients/cli/connections.c:3338
+msgid "team-slave"
+msgstr "grupp-slav"
+
+#. Ask for optional 'bridge' arguments.
+#: ../clients/cli/connections.c:3350
+msgid "bridge"
+msgstr "brygga"
+
+#: ../clients/cli/connections.c:3356
+#, c-format
+msgid "Enable STP %s"
+msgstr "Aktivera STP %s"
+
+#: ../clients/cli/connections.c:3361
+#, c-format
+msgid "Error: 'stp': %s.\n"
+msgstr "Fel: â€stpâ€: %s.\n"
+
+#: ../clients/cli/connections.c:3369
+msgid "STP priority [32768]: "
+msgstr "STP-prioritet [32768]:"
+
+#: ../clients/cli/connections.c:3373
+#, c-format
+msgid "Error: 'priority': '%s' is not a valid number <0-%d>.\n"
+msgstr "Fel: â€priorityâ€: â€%s†är inte ett giltigt nummer <0-%d>.\n"
+
+#: ../clients/cli/connections.c:3381
+msgid "Forward delay [15]: "
+msgstr "Framåtfördröjning [15]:"
+
+#: ../clients/cli/connections.c:3385
+#, c-format
+msgid "Error: 'forward-delay': '%s' is not a valid number <2-30>.\n"
+msgstr "Fel: â€forward-delayâ€: â€%s†är inte ett giltigt nummer <2-30>.\n"
+
+#: ../clients/cli/connections.c:3394
+msgid "Hello time [2]: "
+msgstr "Hallå-tid [2]:"
+
+#: ../clients/cli/connections.c:3398
+#, c-format
+msgid "Error: 'hello-time': '%s' is not a valid number <1-10>.\n"
+msgstr "Fel: â€hello-timeâ€: â€%s†är inte ett giltigt nummer <1-10>.\n"
+
+#: ../clients/cli/connections.c:3406
+msgid "Max age [20]: "
+msgstr "Max ålder [20]:"
+
+#: ../clients/cli/connections.c:3410
+#, c-format
+msgid "Error: 'max-age': '%s' is not a valid number <6-40>.\n"
+msgstr "Fel: â€max-ageâ€: â€%s†är inte ett giltig nummer <6-40>.\n"
+
+#: ../clients/cli/connections.c:3418
+msgid "MAC address ageing time [300]: "
+msgstr "Livstid för MAC-adress [300]:"
+
+#: ../clients/cli/connections.c:3422
+#, c-format
+msgid "Error: 'ageing-time': '%s' is not a valid number <0-1000000>.\n"
+msgstr "Fel: â€ageing-timeâ€: â€%s†är inte ett giltig nummer <0-1000000>.\n"
+
+#. Ask for optional 'bridge-slave' arguments.
+#: ../clients/cli/connections.c:3449
+msgid "bridge-slave"
+msgstr "brygga-slav"
+
+#: ../clients/cli/connections.c:3454
+msgid "Bridge port priority [32]: "
+msgstr "Prioritet för bryggport [32]:"
+
+#: ../clients/cli/connections.c:3467
+msgid "Bridge port STP path cost [100]: "
+msgstr "STP-sökvägskostnad för bryggport [100]:"
+
+#: ../clients/cli/connections.c:3481
+#, c-format
+msgid "Hairpin %s"
+msgstr "Hårnål %s"
+
+#: ../clients/cli/connections.c:3486
+#, c-format
+msgid "Error: 'hairpin': %s.\n"
+msgstr "Fel: â€hairpinâ€: %s.\n"
+
+#. Ask for optional 'olpc' arguments.
+#: ../clients/cli/connections.c:3513 ../libnm-glib/nm-device.c:1794
+#: ../libnm/nm-device.c:1604
+msgid "OLPC Mesh"
+msgstr "OLPC-mesh"
+
+#: ../clients/cli/connections.c:3518
+msgid "OLPC Mesh channel [1]: "
+msgstr "OLPC-meshkanal [1]:"
+
+#: ../clients/cli/connections.c:3521
+#, c-format
+msgid "Error: 'channel': '%s' is not a valid number <1-13>.\n"
+msgstr "Fel: â€channelâ€: â€%s†är inte ett giltigt nummer <1-13>.\n"
+
+#: ../clients/cli/connections.c:3529
+msgid "DHCP anycast MAC address [none]: "
+msgstr "DHCP-anycast MAC-adress [ingen]:"
+
+#: ../clients/cli/connections.c:3574
+msgid "IPv4 address (IP[/plen] [gateway]) [none]: "
+msgstr "IPv4-adress (IP[/plen] [gateway]) [none]: "
+
+#: ../clients/cli/connections.c:3576
+msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
+msgstr "IPv6-adress (IP[/plen] [gateway]) [none]: "
+
+#: ../clients/cli/connections.c:3594
+#, c-format
+msgid " Address successfully added: %s %s\n"
+msgstr " Adress lades till: %s %s\n"
+
+#: ../clients/cli/connections.c:3596
+#, c-format
+msgid " Warning: address already present: %s %s\n"
+msgstr " Varning: adressen finns redan: %s %s\n"
+
+#: ../clients/cli/connections.c:3598
+#, c-format
+msgid " Warning: ignoring garbage at the end: '%s'\n"
+msgstr " Varning: ignorerar skräp på slutet: '%s'\n"
+
+#: ../clients/cli/connections.c:3600 ../clients/cli/connections.c:4431
+#: ../clients/cli/connections.c:4492 ../clients/cli/connections.c:4894
+#: ../clients/cli/connections.c:4904
+msgid "Error: "
+msgstr "Fel:"
+
+#. Ask for IP addresses
+#: ../clients/cli/connections.c:3617
+#, c-format
+msgid "Do you want to add IP addresses? %s"
+msgstr "Vill du lägga till IP-adresser? %s"
+
+#: ../clients/cli/connections.c:3624
+#, c-format
+msgid "Press <Enter> to finish adding addresses.\n"
+msgstr "Tryck <Retur> för att sluta lägga till adresser.\n"
+
+#: ../clients/cli/connections.c:3763
+#, c-format
+msgid "Error: 'parent': not valid without 'p-key'."
+msgstr "Fel: â€parentâ€: inte giltig utan â€p-keyâ€."
+
+#: ../clients/cli/connections.c:3815 ../clients/cli/connections.c:4813
+msgid "SSID: "
+msgstr "SSID: "
+
+#: ../clients/cli/connections.c:3818 ../clients/cli/connections.c:4816
+msgid "Error: 'ssid' is required."
+msgstr "Fel: â€ssid†krävs."
+
+#: ../clients/cli/connections.c:3875
+msgid "WiMAX NSP name: "
+msgstr "WiMAX NSP-lista:"
+
+#: ../clients/cli/connections.c:3878
+msgid "Error: 'nsp' is required."
+msgstr "Fel: â€nsp†krävs."
+
+#: ../clients/cli/connections.c:3930
+msgid "PPPoE username: "
+msgstr "PPPoE-användarnamn:"
+
+#: ../clients/cli/connections.c:3933
+msgid "Error: 'username' is required."
+msgstr "Fel: â€username†krävs"
+
+#: ../clients/cli/connections.c:4002
+msgid "APN: "
+msgstr "APN: "
+
+#: ../clients/cli/connections.c:4005
+msgid "Error: 'apn' is required."
+msgstr "Fel: â€apn†krävs."
+
+#: ../clients/cli/connections.c:4063
+msgid "Bluetooth device address: "
+msgstr "Adress för Bluetooth-enhet:"
+
+#: ../clients/cli/connections.c:4066
+msgid "Error: 'addr' is required."
+msgstr "Fel: â€addr†krävs."
+
+#: ../clients/cli/connections.c:4107
+#, c-format
+msgid "Error: 'bt-type': '%s' not valid; use [%s, %s (%s), %s]."
+msgstr "Fel: â€bt-typeâ€: â€%s†inte giltig; använd [%s, %s (%s), %s]."
+
+#: ../clients/cli/connections.c:4151
+msgid "VLAN parent device or connection UUID: "
+msgstr "VLAN-föräldraenhet eller anslutnings-UUID:"
+
+#: ../clients/cli/connections.c:4154
+msgid "Error: 'dev' is required."
+msgstr "Fel: â€dev†krävs."
+
+#: ../clients/cli/connections.c:4158
+msgid "VLAN ID <0-4095>: "
+msgstr "VLAN ID <0-4095>: "
+
+#: ../clients/cli/connections.c:4161
+msgid "Error: 'id' is required."
+msgstr "Fel: â€id†krävs."
+
+#: ../clients/cli/connections.c:4167
+#, c-format
+msgid "Error: 'id': '%s' is not valid; use <0-4095>."
+msgstr "Fel: â€idâ€: â€%s†är inte giltigt: använd <0-4095>."
+
+#: ../clients/cli/connections.c:4177
+#, c-format
+msgid "Error: 'dev': '%s' is neither UUID, interface name, nor MAC."
+msgstr "Fel: â€devâ€: â€%s†är varken UUID, gränssnittsnamn eller MAC."
+
+#: ../clients/cli/connections.c:4311
+#, c-format
+msgid "Error: 'mode': %s."
+msgstr "Fel: â€modeâ€: %s"
+
+#: ../clients/cli/connections.c:4320
+#, c-format
+msgid "Error: 'primary': '%s' is not a valid interface name."
+msgstr "Fel: â€primaryâ€: â€%s†är inte ett giltigt gränssnittsnamn."
+
+#: ../clients/cli/connections.c:4372 ../clients/cli/connections.c:4470
+#: ../clients/cli/connections.c:4672
+msgid "Error: 'master' is required."
+msgstr "Fel: â€master†krävs."
+
+#: ../clients/cli/connections.c:4378 ../clients/cli/connections.c:4476
+#: ../clients/cli/connections.c:4678
+#, c-format
+msgid "Warning: master='%s' doesn't refer to any existing profile.\n"
+msgstr "Varning: master=â€%s†hänvisar inte till nÃ¥gon befintlig profil.\n"
+
+#: ../clients/cli/connections.c:4381 ../clients/cli/connections.c:4484
+#: ../clients/cli/connections.c:4681
+#, c-format
+msgid ""
+"Warning: 'type' is currently ignored. We only support ethernet slaves for "
+"now.\n"
+msgstr ""
+"Varning: â€type†ignoreras för närvarande. Vi stöder bara trÃ¥dbundna slavar "
+"för tillfället.\n"
+
+#: ../clients/cli/connections.c:4578
+#, c-format
+msgid "Error: 'stp': %s."
+msgstr "Fel: â€stpâ€: %s."
+
+#: ../clients/cli/connections.c:4708
+#, c-format
+msgid "Error: 'hairpin': %s."
+msgstr "Fel: â€hairpinâ€: %s."
+
+#: ../clients/cli/connections.c:4761
+msgid "Error: 'vpn-type' is required."
+msgstr "Fel: â€vpn-type†krävs."
+
+#: ../clients/cli/connections.c:4768
+#, c-format
+msgid "Warning: 'vpn-type': %s not known.\n"
+msgstr "Varning: â€vpn-typeâ€: %s okänd.\n"
+
+#: ../clients/cli/connections.c:4829
+#, c-format
+msgid "Error: 'channel': '%s' is not valid; use <1-13>."
+msgstr "Fel: â€channelâ€: â€%s†är inte giltigt; använd <1-13>."
+
+#: ../clients/cli/connections.c:4861
+#, c-format
+msgid "Error: '%s' is not a valid connection type."
+msgstr "Fel: â€%s†är inte en giltig anslutningstyp."
+
+#: ../clients/cli/connections.c:4961
+#, c-format
+msgid "Error: Failed to add '%s' connection: %s"
+msgstr "Fel: Misslyckades med att lägga till â€%sâ€-anslutning: %s"
+
+#: ../clients/cli/connections.c:4966
+#, c-format
+msgid "Connection '%s' (%s) successfully added.\n"
+msgstr "Anslutning â€%s†(%s) lades till.\n"
+
+#: ../clients/cli/connections.c:5177
+#, c-format
+msgid "Error: 'type' argument is required."
+msgstr "Fel: â€typeâ€-argument saknas."
+
+#: ../clients/cli/connections.c:5185
+#, c-format
+msgid "Error: invalid connection type; %s."
+msgstr "Fel: ogiltig anslutningstyp; %s."
+
+#: ../clients/cli/connections.c:5194
+#, c-format
+msgid "Error: 'autoconnect': %s."
+msgstr "Fel: â€autoconnectâ€: %s."
+
+#: ../clients/cli/connections.c:5204
+#, c-format
+msgid "Error: 'save': %s."
+msgstr "Fel: â€saveâ€: %s."
+
+#: ../clients/cli/connections.c:5220
+msgid "Interface name [*]: "
+msgstr "Gränssnittsnamn [*]:"
+
+#: ../clients/cli/connections.c:5225
+#, c-format
+msgid "Error: 'ifname' argument is required."
+msgstr "Fel: â€ifnameâ€-argument krävs."
+
+#: ../clients/cli/connections.c:5232
+#, c-format
+msgid "Error: 'ifname': '%s' is not a valid interface nor '*'."
+msgstr ""
+"Fel: â€ifnameâ€: â€%s†är inte ett giltigt gränssnittsnamn, inte heller â€*â€."
+
+#: ../clients/cli/connections.c:6020
+#, c-format
+msgid "['%s' setting values]\n"
+msgstr "[â€%sâ€-inställningsvärden]\n"
+
+#. TRANSLATORS: do not translate command names and keywords before ::
+#. * However, you should translate terms enclosed in <>.
+#.
+#: ../clients/cli/connections.c:6102
+#, 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 ""
+"---[ Huvudmeny ]---\n"
+"goto [<inställning> | <egenskap>] :: gå till inställning eller "
+"egenskap\n"
+"remove <inställning>[.<egenskap>] | <egenskap> :: ta bort inställning "
+"eller återståll egenskapsvärde\n"
+"set [<inställning>.<egenskap> <värde>] :: sätt egenskapsvärde\n"
+"describe [<inställning>.<egenskap>] :: beskriv egenskap\n"
+"print [all | <inställning>[.<egenskap>]] :: skriv ut anslutning\n"
+"verify [all] :: verifiera anslutning\n"
+"save [persistent|temporary] :: spara anslutning\n"
+"activate [<grnamn>] [/<ap>|<nsp>] :: aktivera ansluting\n"
+"back :: gå upp en nivå (backa)\n"
+"help/? [<kommando>] :: skriv ut denna hjälp\n"
+"nmcli <konf-flagga> <value> :: nmcli-konfiguration\n"
+"quit :: avsluta nmcli\n"
+
+#: ../clients/cli/connections.c:6129
+#, 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 <inställning>[.<egenskap>] | <egenskap> :: ange inställning/egenskap "
+"för redigering\n"
+"\n"
+"Det här kommandot anger en inställning eller egenskap för redigering.\n"
+"\n"
+"Exempel: nmcli> goto connection\n"
+" nmcli connection> goto secondaries\n"
+" nmcli> goto ipv4.addresses\n"
+
+#: ../clients/cli/connections.c:6136
+#, 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 <inställning>[.<egenskap>] :: ta bort inställning eller återställ "
+"egenskapsvärde\n"
+"\n"
+"Kommandot tar bort en hel inställning från anslutningen, eller om en "
+"egenskap\n"
+"angetts, återställs egenskapen till standardvärdet.\n"
+"\n"
+"Exempel: nmcli> remove wifi-sec\n"
+" nmcli> remove eth.mtu\n"
+
+#: ../clients/cli/connections.c:6143
+#, 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 [<inställning>.<egenskap> <värde>] :: sätt egenskapsvärde\n"
+"\n"
+"Detta kommando sätter egenskapsvärden.\n"
+"\n"
+"Exempel: nmcli> set con.id My connection\n"
+
+#: ../clients/cli/connections.c:6148
+#, 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 [<inställning>.<egenskap>] :: beskriv egenskap\n"
+"\n"
+"Visar egenskapsbeskrivning. Du kan titta i handboken för nm-settings(5) för "
+"att se alla NH-inställningar och egenskaper.\n"
+
+#: ../clients/cli/connections.c:6153
+#, 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] :: skriv ut inställnings- eller anslutningsvärden\n"
+"\n"
+"Visar aktuell egenskap eller hela anslutningen.\n"
+"\n"
+"Exempel: nmcli ipv4> print all\n"
+
+#: ../clients/cli/connections.c:6158
+#, 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] :: verifiera inställningen eller anslutningens giltighet\n"
+"\n"
+"Verifierar huruvida inställningen eller anslutningen är giltig och kan "
+"sparas senare. Indikerar ogiltiga värden vid fel.\n"
+"\n"
+"Exempel: nmcli> verify\n"
+" nmcli bond> verify\n"
+
+#: ../clients/cli/connections.c:6165
+#, 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] :: spara anslutningen\n"
+"\n"
+"Skickar anslutningsprofilen till Nätverkshanteraren som kommer att antingen\n"
+"spara den, eller behÃ¥lla den i minnet.â€save†utan argument\n"
+"betyder â€save persistentâ€.\n"
+"Observera att när du väl har sparat profilen så sparas inställningarna\n"
+"över omstart. Efterföljande ändringar kan också vara temporära eller\n"
+"kvarstående, men temporära ändringar kommer inte att kvarstå vid omstart.\n"
+"Om du vill ta bort den sparade anslutningen helt\n"
+"måste profilen tas bort.\n"
+
+#: ../clients/cli/connections.c:6176
+#, 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 [<grnamn>] [/<ap>|<nsp>] :: aktivera anslutningen\n"
+"\n"
+"Aktiverar anslutningen\n"
+"\n"
+"Tillgängliga alternativ:\n"
+"<grnamn> - den enhet anslutningen kommer att aktiveras på\n"
+"/<ap>|<nsp> - AP (Wi-Fi) eller NSP (WiMAX) (lägg till / i början när "
+"<grnamn> inte anges)\n"
+
+#: ../clients/cli/connections.c:6183 ../clients/cli/connections.c:6340
+#, c-format
+msgid ""
+"back :: go to upper menu level\n"
+"\n"
+msgstr ""
+"back :: gå upp en menynivå\n"
+"\n"
+
+#: ../clients/cli/connections.c:6186
+#, c-format
+msgid ""
+"help/? [<command>] :: help for the nmcli commands\n"
+"\n"
+msgstr ""
+"help/? [<kommando>] :: hjälp för nmcli-kommandot\n"
+"\n"
+
+#: ../clients/cli/connections.c:6189
+#, 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-flagga> <värde>] :: nmcli configuration\n"
+"\n"
+"Konfigurerar nmcli. Följande flaggor är tillgängliga:\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 = [30mblack[0m\n"
+" 2 = [31mred[0m\n"
+" 3 = [32mgreen[0m\n"
+" 4 = [33myellow[0m\n"
+" 5 = [34mblue[0m\n"
+" 6 = [35mmagenta[0m\n"
+" 7 = [36mcyan[0m\n"
+" 8 = [37mwhite[0m\n"
+"\n"
+"Exempel: nmcli> nmcli status-line yes\n"
+" nmcli> nmcli save-confirmation no\n"
+" nmcli> nmcli prompt-color 3\n"
+
+#: ../clients/cli/connections.c:6209 ../clients/cli/connections.c:6346
+#, 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 :: avsluta nmcli\n"
+"\n"
+"Kommandot avslutar nmcli. När anslutningen som redigerats inte sparas frågas "
+"användaren om att bekräfta åtgärden.\n"
+
+#: ../clients/cli/connections.c:6214 ../clients/cli/connections.c:6351
+#: ../clients/cli/connections.c:6755 ../clients/cli/connections.c:7644
+#, c-format
+msgid "Unknown command: '%s'\n"
+msgstr "Okänt kommando: â€%sâ€\n"
+
+#. TRANSLATORS: do not translate command names and keywords before ::
+#. * However, you should translate terms enclosed in <>.
+#.
+#: ../clients/cli/connections.c:6280
+#, 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 ""
+"---[ Egenskapsmeny ]---\n"
+"set [<värde>] :: sätt nytt värde\n"
+"add [<värde>] :: lägg till nytt alternativ till "
+"egenskapen\n"
+"change :: ändra aktuellt värde\n"
+"remove [<index> | <flagga>] :: ta bort värdet\n"
+"describe :: beskriv egenskapen\n"
+"print [setting | connection] :: skriv ut egenskapen (inställnings-/"
+"anslutnings-) värden)\n"
+"back :: gå upp en nivå\n"
+"help/? [<kommando>] :: skriv ut denna hjälp- eller "
+"kommandobeskrivning\n"
+"quit :: avsluta nmcli\n"
+
+#: ../clients/cli/connections.c:6305
+#, c-format
+msgid ""
+"set [<value>] :: set new value\n"
+"\n"
+"This command sets provided <value> to this property\n"
+msgstr ""
+"set [<värde>] :: sätt nytt värde\n"
+"\n"
+"Detta kommando sätter angivet <värde> till denna egenskap\n"
+
+#: ../clients/cli/connections.c:6309
+#, 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 [<värde>] :: lägg till nytt värde till egenskapen\n"
+"\n"
+"Detta kommando lägger till angivet <värde> till denna egenskap, om "
+"egenskapen är av en behållartyp. För egenskaper med ett värde ersätts "
+"egenskapsvärdet (samma som â€setâ€).\n"
+
+#: ../clients/cli/connections.c:6315
+#, c-format
+msgid ""
+"change :: change current value\n"
+"\n"
+"Displays current value and allows editing it.\n"
+msgstr ""
+"change :: ändra aktuellt värde\n"
+"\n"
+"Visar aktuellt värde och tillåter redigering av det.\n"
+
+#: ../clients/cli/connections.c:6319
+#, 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 [<värde>|<index>|<alternativnamn>] :: ta bort värdet\n"
+"\n"
+"Tar bort egenskapsvärdet. För enskilda egenskapsvärden sätter denna\n"
+"egenskapen till dess standardvärde. För värden av behållartyp tar denna "
+"bort\n"
+"alla värden egenskapen har, eller så kan du ange ett argument för att ta "
+"bort endast\n"
+"ett enskilt objekt eller alternativ. Argumentet är antingen ett värde eller "
+"index för objektet som ska\n"
+"tas bort, eller ett alternativt namn (för egenskaper med namngivna "
+"alternativ).\n"
+"\n"
+"Exempel: nmcli ipv4.dns> remove 8.8.8.8\n"
+" nmcli ipv4.dns> remove 2\n"
+" nmcli bond.options> remove downdelay\n"
+"\n"
+
+#: ../clients/cli/connections.c:6330
+#, 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 :: beskriv egenskap\n"
+"\n"
+"Visar egenskapsbeskrivning. Se nm-settings(5)-manualen för att se alla NM-"
+"inställningar och egenskaper.\n"
+
+#: ../clients/cli/connections.c:6335
+#, 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] :: utskriftsegenskap (inställning, "
+"anslutning) värde(n)\n"
+"\n"
+"Visar egenskapsvärdet. Med argument kan du också visa värden för hela "
+"inställningen eller anslutningen.\n"
+
+#: ../clients/cli/connections.c:6343
+#, c-format
+msgid ""
+"help/? [<command>] :: help for nmcli commands\n"
+"\n"
+msgstr ""
+"help/? [<kommando>] :: hjälp för nmcli-kommandon\n"
+"\n"
+
+#: ../clients/cli/connections.c:6441
+#, c-format
+msgid "Error: Connection activation failed.\n"
+msgstr "Fel: Aktivering av anslutning misslyckades.\n"
+
+#: ../clients/cli/connections.c:6524
+#, c-format
+msgid "Error: setting '%s' is mandatory and cannot be removed.\n"
+msgstr "Fel: inställningen â€%s†är obligatorisk och kan inte tas bort.\n"
+
+#. TRANSLATORS: status line in nmcli connection editor
+#: ../clients/cli/connections.c:6542
+#, c-format
+msgid "[ Type: %s | Name: %s | UUID: %s | Dirty: %s | Temp: %s ]\n"
+msgstr "[ Typ: %s | Namn: %s | UUID: %s | Dirty: %s | Temp: %s ]\n"
+
+#: ../clients/cli/connections.c:6577
+#, c-format
+msgid "The connection is not saved. Do you really want to quit? %s"
+msgstr "Anslutningen sparas inte. Vill du verkligen avsluta? %s"
+
+#: ../clients/cli/connections.c:6622
+#, 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 ""
+"Anslutningsprofilen har tagits bort från en annan klient. Du kan skriva "
+"â€save†i huvudmenyn för att Ã¥terställa den.\n"
+
+#: ../clients/cli/connections.c:6644 ../clients/cli/connections.c:7059
+#: ../clients/cli/connections.c:7114
+#, c-format
+msgid "Enter '%s' value: "
+msgstr "Ange â€%sâ€-värde:"
+
+#: ../clients/cli/connections.c:6659 ../clients/cli/connections.c:6677
+#: ../clients/cli/connections.c:7063 ../clients/cli/connections.c:7119
+#, c-format
+msgid "Error: failed to set '%s' property: %s\n"
+msgstr "Fel: misslyckades med att sätta â€%sâ€-egenskapen: %s\n"
+
+#: ../clients/cli/connections.c:6671
+#, c-format
+msgid "Edit '%s' value: "
+msgstr "Redigera â€%sâ€-värde:"
+
+#: ../clients/cli/connections.c:6698
+#, c-format
+msgid "Error: %s\n"
+msgstr "Fel: %s\n"
+
+#: ../clients/cli/connections.c:6704 ../clients/cli/connections.c:7198
+#: ../clients/cli/connections.c:7239
+#, c-format
+msgid "Error: failed to remove value of '%s': %s\n"
+msgstr "Fel: misslyckades med att ta bort värdet â€%sâ€: %s\n"
+
+#: ../clients/cli/connections.c:6725
+#, c-format
+msgid "Unknown command argument: '%s'\n"
+msgstr "Okänt kommandoargument: â€%sâ€\n"
+
+#: ../clients/cli/connections.c:6851
+#, c-format
+msgid "Available settings: %s\n"
+msgstr "Tillgängliga inställningar: %s\n"
+
+#: ../clients/cli/connections.c:6860
+#, c-format
+msgid "Error: invalid setting name; %s\n"
+msgstr "Fel: ogiltig namn på inställning; %s\n"
+
+#: ../clients/cli/connections.c:6877
+#, c-format
+msgid "Available properties: %s\n"
+msgstr "Tillgängliga egenskaper: %s\n"
+
+#: ../clients/cli/connections.c:6885
+#, c-format
+msgid "Error: property %s\n"
+msgstr "Fel: egenskapen %s\n"
+
+#: ../clients/cli/connections.c:6926
+#, 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 ""
+"Sparar anslutningen med â€autoconnect=yes†Det kan resultera i att "
+"anslutningen aktiveras omedelbart.\n"
+"Vill du fortfarande spara? %s"
+
+#: ../clients/cli/connections.c:7001
+#, c-format
+msgid "You may edit the following settings: %s\n"
+msgstr "Du kan redigera följande inställningar: %s\n"
+
+#: ../clients/cli/connections.c:7028
+#, c-format
+msgid ""
+"The connection profile has been removed from another client. You may type "
+"'save' to restore it.\n"
+msgstr ""
+"Anslutningsprofilen har tagits bort från en annan klient. Du kan skriva "
+"â€save†för att Ã¥terställa den.\n"
+
+#: ../clients/cli/connections.c:7057 ../clients/cli/connections.c:7112
+#, c-format
+msgid "Allowed values for '%s' property: %s\n"
+msgstr "Tillgängliga värden för â€%sâ€-egenskapen: %s\n"
+
+#: ../clients/cli/connections.c:7067 ../clients/cli/connections.c:7281
+#, c-format
+msgid "Error: no setting selected; valid are [%s]\n"
+msgstr "Fel: ingen inställning vald; giltiga är [%s]\n"
+
+#: ../clients/cli/connections.c:7068
+#, c-format
+msgid "use 'goto <setting>' first, or 'set <setting>.<property>'\n"
+msgstr ""
+"använd â€goto <inställning>†först eller â€set <inställning>.<egenskap>â€\n"
+
+#: ../clients/cli/connections.c:7082 ../clients/cli/connections.c:7218
+#: ../clients/cli/connections.c:7298
+#, c-format
+msgid "Error: invalid setting argument '%s'; valid are [%s]\n"
+msgstr "Fel: ogiltigt argument för inställningen â€%sâ€; giltiga är [%s]\n"
+
+#: ../clients/cli/connections.c:7092
+#, c-format
+msgid "Error: missing setting for '%s' property\n"
+msgstr "Fel: saknar inställning för egenskapen â€%sâ€\n"
+
+#: ../clients/cli/connections.c:7099
+#, c-format
+msgid "Error: invalid property: %s\n"
+msgstr "Fel: ogiltig egenskap: %s\n"
+
+#: ../clients/cli/connections.c:7146
+#, c-format
+msgid "Error: unknown setting '%s'\n"
+msgstr "Fel: Okänd inställning: â€%sâ€\n"
+
+#: ../clients/cli/connections.c:7159
+#, c-format
+msgid "You may edit the following properties: %s\n"
+msgstr "Du kan redigera följande egenskaper: %s\n"
+
+#: ../clients/cli/connections.c:7203
+#, c-format
+msgid "Error: no argument given; valid are [%s]\n"
+msgstr "Fel: inga argument givna; giltiga är [%s]\n"
+
+#: ../clients/cli/connections.c:7216
+#, c-format
+msgid "Setting '%s' is not present in the connection.\n"
+msgstr "Inställningen â€%s†är finns inte i anslutningen.\n"
+
+#: ../clients/cli/connections.c:7257
+#, c-format
+msgid "Error: %s properties, nor it is a setting name.\n"
+msgstr "Fel: %s-egenskaper, inte heller ett inställningsnamn.\n"
+
+#: ../clients/cli/connections.c:7282
+#, c-format
+msgid "use 'goto <setting>' first, or 'describe <setting>.<property>'\n"
+msgstr ""
+"använd â€goto <inställning>†först, eller â€describe <inställning>."
+"<egenskap>â€\n"
+
+#: ../clients/cli/connections.c:7323
+#, c-format
+msgid "Error: invalid property: %s, neither a valid setting name.\n"
+msgstr ""
+"Fel: ogiltig egenskap: %s, och inte heller ett giltigt inställningsnamn.\n"
+
+#: ../clients/cli/connections.c:7352
+#, c-format
+msgid "Error: unknown setting: '%s'\n"
+msgstr "Fel: okänd inställning: â€%sâ€\n"
+
+#: ../clients/cli/connections.c:7357
+#, c-format
+msgid "Error: '%s' setting not present in the connection\n"
+msgstr "Fel: inställningen â€%s†finns inte i anslutningen\n"
+
+#: ../clients/cli/connections.c:7382
+#, c-format
+msgid "Error: invalid property: %s%s\n"
+msgstr "Fel: ogiltig egenskap: %s%s\n"
+
+#: ../clients/cli/connections.c:7384
+msgid ", neither a valid setting name"
+msgstr ", inte heller ett giltigt inställningsnamn"
+
+#: ../clients/cli/connections.c:7404
+#, c-format
+msgid "Verify setting '%s': %s\n"
+msgstr "Verifiera inställningen â€%sâ€: %s\n"
+
+#: ../clients/cli/connections.c:7411
+#, c-format
+msgid "Verify connection: %s\n"
+msgstr "Verifiera anslutningen: %s\n"
+
+#: ../clients/cli/connections.c:7429
+#, c-format
+msgid "Error: invalid argument '%s'\n"
+msgstr "Fel: ogiltigt argument â€%sâ€\n"
+
+#: ../clients/cli/connections.c:7462
+#, c-format
+msgid "Error: Failed to save '%s' (%s) connection: %s\n"
+msgstr "Fel: Misslyckades med att spara â€%s†(%s)-anslutning %s\n"
+
+#: ../clients/cli/connections.c:7469
+#, c-format
+msgid "Connection '%s' (%s) successfully saved.\n"
+msgstr "Anslutningen â€%s†(%s) sparades.\n"
+
+#: ../clients/cli/connections.c:7470
+#, c-format
+msgid "Connection '%s' (%s) successfully updated.\n"
+msgstr "Anslutningen â€%s†(%s) uppdaterades.\n"
+
+#: ../clients/cli/connections.c:7503
+#, c-format
+msgid "Error: connection verification failed: %s\n"
+msgstr "Fel: verifiering av anslutning misslyckades: %s\n"
+
+#: ../clients/cli/connections.c:7504
+msgid "(unknown error)"
+msgstr "(okänt fel)"
+
+#: ../clients/cli/connections.c:7525
+#, c-format
+msgid "Error: connection is not saved. Type 'save' first.\n"
+msgstr "Fel: anslutningen sparas ej. Skriv â€save†först.\n"
+
+#: ../clients/cli/connections.c:7529
+#, c-format
+msgid "Error: connection is not valid: %s\n"
+msgstr "Fel: anslutningen är inte giltig: %s\n"
+
+#: ../clients/cli/connections.c:7539
+#, c-format
+msgid "Error: Cannot activate connection: %s.\n"
+msgstr "Fel: Kan inte aktivera anslutningen: %s.\n"
+
+#: ../clients/cli/connections.c:7549
+#, c-format
+msgid "Error: Failed to activate '%s' (%s) connection: %s\n"
+msgstr "Fel: Misslyckades med att aktivera â€%s†(%s)-anslutning: %s\n"
+
+#: ../clients/cli/connections.c:7555
+#, c-format
+msgid "Monitoring connection activation (press any key to continue)\n"
+msgstr ""
+"Övervakar anslutningsaktivering (tryck valfri tangent för att fortsätta)\n"
+
+#: ../clients/cli/connections.c:7593
+#, c-format
+msgid "Error: status-line: %s\n"
+msgstr "Fel: status-line: %s\n"
+
+#: ../clients/cli/connections.c:7601
+#, c-format
+msgid "Error: save-confirmation: %s\n"
+msgstr "Fel: save-confirmation: %s\n"
+
+#: ../clients/cli/connections.c:7609
+#, c-format
+msgid "Error: bad color number: '%s'; use <0-8>\n"
+msgstr "Fel: dÃ¥ligt färgnummer: â€%sâ€; använd <0-8>\n"
+
+#: ../clients/cli/connections.c:7621
+#, c-format
+msgid "Current nmcli configuration:\n"
+msgstr "Aktuell nmcli-konfiguration:\n"
+
+#: ../clients/cli/connections.c:7629
+#, c-format
+msgid "Invalid configuration option '%s'; allowed [%s]\n"
+msgstr "Ogiltigt konfigurationsalternativ â€%sâ€; tillÃ¥tet [%s]\n"
+
+#: ../clients/cli/connections.c:7871
+#, c-format
+msgid "Error: only one of 'id', uuid, or 'path' can be provided."
+msgstr "Fel: endast en av â€idâ€, uuid eller â€path†kan ges."
+
+#: ../clients/cli/connections.c:7883 ../clients/cli/connections.c:8067
+#: ../clients/cli/connections.c:8074
+#, c-format
+msgid "Error: Unknown connection '%s'."
+msgstr "Fel: Okänd anslutning: â€%sâ€."
+
+#: ../clients/cli/connections.c:7898
+#, c-format
+msgid "Warning: editing existing connection '%s'; 'type' argument is ignored\n"
+msgstr ""
+"Varning: redigerar befintliga anslutningen â€%sâ€; â€typeâ€-argument ignoreras\n"
+
+#: ../clients/cli/connections.c:7901
+#, c-format
+msgid ""
+"Warning: editing existing connection '%s'; 'con-name' argument is ignored\n"
+msgstr ""
+"Varning: redigerar befintliga anslutningen â€%sâ€; â€con-nameâ€-argument "
+"ignoreras\n"
+
+#: ../clients/cli/connections.c:7915
+#, c-format
+msgid "Valid connection types: %s\n"
+msgstr "Giltiga anslutningstyper: %s\n"
+
+#: ../clients/cli/connections.c:7917
+#, c-format
+msgid "Error: invalid connection type; %s\n"
+msgstr "Fel: ogiltig anslutningstyp: %s\n"
+
+#: ../clients/cli/connections.c:7956
+#, c-format
+msgid "===| nmcli interactive connection editor |==="
+msgstr "===| nmcli interaktiv anslutningsredigerare |==="
+
+#: ../clients/cli/connections.c:7959
+#, c-format
+msgid "Editing existing '%s' connection: '%s'"
+msgstr "Redigerar befintlig â€%sâ€-anslutning: â€%sâ€"
+
+#: ../clients/cli/connections.c:7961
+#, c-format
+msgid "Adding a new '%s' connection"
+msgstr "Lägger till en ny â€%sâ€-anslutning"
+
+#: ../clients/cli/connections.c:7963
+#, c-format
+msgid "Type 'help' or '?' for available commands."
+msgstr "Skriv â€help†eller â€?†för tillgängliga kommandon."
+
+#: ../clients/cli/connections.c:7965
+#, c-format
+msgid "Type 'describe [<setting>.<prop>]' for detailed property description."
+msgstr ""
+"Skriv â€describe [<inställning>.<egenskap>]†för en detaljerad "
+"egenskapsbeskrivning."
+
+#: ../clients/cli/connections.c:8003
+#, c-format
+msgid "Error: Failed to modify connection '%s': %s"
+msgstr "Fel: Misslyckades med att ändra konfigurationen: â€%s†%s"
+
+#: ../clients/cli/connections.c:8010
+#, c-format
+msgid "Connection '%s' (%s) successfully modified.\n"
+msgstr "Anslutningen â€%s†(%s) ändrades.\n"
+
+#: ../clients/cli/connections.c:8042
+#, c-format
+msgid "Error: No arguments provided."
+msgstr "Fel: Inga argument angavs."
+
+#: ../clients/cli/connections.c:8061
+#, c-format
+msgid "Error: connection ID is missing."
+msgstr "Fel: anslutnings-ID saknas."
+
+#: ../clients/cli/connections.c:8083 ../clients/cli/connections.c:8096
+#, c-format
+msgid "Error: <setting>.<property> argument is missing."
+msgstr "Fel: <inställning>.<egenskap>-argument saknas."
+
+#: ../clients/cli/connections.c:8101
+#, c-format
+msgid "Error: value for '%s' is missing."
+msgstr "Fel: värdet för â€%s†saknas."
+
+#: ../clients/cli/connections.c:8119
+#, c-format
+msgid "Error: invalid <setting>.<property> '%s'."
+msgstr "Fel: ogiltig <inställning>.<egenskap> â€%sâ€."
+
+#: ../clients/cli/connections.c:8127
+#, c-format
+msgid "Error: invalid or not allowed setting '%s': %s."
+msgstr "Fel: ogiltig eller ej tillÃ¥ten inställning: â€%sâ€: %s."
+
+#: ../clients/cli/connections.c:8148
+#, c-format
+msgid "Error: invalid property '%s': %s."
+msgstr "Fel: ogiltig egenskap â€%sâ€: %s."
+
+#: ../clients/cli/connections.c:8159
+#, c-format
+msgid "Error: failed to modify %s.%s: %s."
+msgstr "Fel: misslyckades med att ändra %s.%s: %s."
+
+#: ../clients/cli/connections.c:8177
+#, c-format
+msgid "Error: failed to remove a value from %s.%s: %s."
+msgstr "Fel: misslyckades att ta bort ett värde från %s.%s: %s."
+
+#: ../clients/cli/connections.c:8214
+#, c-format
+msgid "Error: Connection deletion failed: %s"
+msgstr "Fel: Borttagning av anslutningen misslyckades: %s"
+
+#: ../clients/cli/connections.c:8278
+#, c-format
+msgid "Error: unknown connection: %s\n"
+msgstr "Fel: Okänd anslutning: %s\n"
+
+#. truncate trailing ", "
+#: ../clients/cli/connections.c:8315
+#, c-format
+msgid "Error: cannot delete unknown connection(s): %s."
+msgstr "Fel: kan inte ta bort okänd(a) anslutning(ar): %s."
+
+#: ../clients/cli/connections.c:8332 ../clients/cli/connections.c:8358
+#: ../clients/cli/connections.c:8494 ../clients/cli/devices.c:2786
+#: ../clients/cli/general.c:324 ../clients/cli/general.c:462
+#, c-format
+msgid "Error: NetworkManager is not running."
+msgstr "Fel: Nätverkshanteraren är inte igång."
+
+#: ../clients/cli/connections.c:8338
+#, c-format
+msgid "Error: failed to reload connections: %s."
+msgstr "Fel: Misslyckades med att läsa om anslutningar: %s."
+
+#: ../clients/cli/connections.c:8377
+#, c-format
+msgid "Error: failed to load connection: %s."
+msgstr "Fel: misslyckades med att läsa in anslutningen: %s."
+
+#: ../clients/cli/connections.c:8385
+#, c-format
+msgid "Could not load file '%s'\n"
+msgstr "Kunde inte läsa in filen: â€%sâ€\n"
+
+#: ../clients/cli/connections.c:8550
+#, c-format
+msgid "Error: '%s' is not valid 'connection' command."
+msgstr "Fel: â€%s†är inte ett giltigt “connection“-kommando."
+
+#. define some prompts
+#: ../clients/cli/devices.c:36
+msgid "Interface: "
+msgstr "Gränssnitt:"
+
+#. 3
+#. 17
+#: ../clients/cli/devices.c:44 ../clients/cli/devices.c:73
+msgid "CONNECTION"
+msgstr "ANSLUTNING"
+
+#. 4
+#. 18
+#: ../clients/cli/devices.c:45 ../clients/cli/devices.c:74
+msgid "CON-UUID"
+msgstr "CON-UUID"
#. 2
-#: ../cli/src/devices.c:105
+#: ../clients/cli/devices.c:58
msgid "VENDOR"
msgstr "TILLVERKARE"
#. 3
-#: ../cli/src/devices.c:106
+#: ../clients/cli/devices.c:59
msgid "PRODUCT"
msgstr "PRODUKT"
#. 4
-#: ../cli/src/devices.c:107
+#: ../clients/cli/devices.c:60
msgid "DRIVER"
msgstr "DRIVRUTIN"
#. 5
-#: ../cli/src/devices.c:108
-msgid "HWADDR"
-msgstr "HWADDR"
+#: ../clients/cli/devices.c:61
+msgid "DRIVER-VERSION"
+msgstr "DRIVRUTINS-VERSION"
+
+#. 6
+#: ../clients/cli/devices.c:62
+msgid "FIRMWARE-VERSION"
+msgstr "FAST-PROGRAMVARA-VERSION"
#. 7
-#: ../cli/src/devices.c:110
+#: ../clients/cli/devices.c:63
+msgid "HWADDR"
+msgstr "HVADR"
+
+#. 8
+#: ../clients/cli/devices.c:64 ../clients/tui/nmt-page-ethernet.c:86
+#: ../clients/tui/nmt-page-infiniband.c:96 ../clients/tui/nmt-page-vlan.c:130
+#: ../clients/tui/nmt-page-wifi.c:372
+msgid "MTU"
+msgstr "MTU"
+
+#. 10
+#: ../clients/cli/devices.c:66
msgid "REASON"
msgstr "ANLEDNING"
-#. 8
-#: ../cli/src/devices.c:111
+#. 11
+#: ../clients/cli/devices.c:67
msgid "UDI"
msgstr "UDI"
-#. 9
-#: ../cli/src/devices.c:112
+#. 12
+#: ../clients/cli/devices.c:68
msgid "IP-IFACE"
msgstr "IP-GRÄNS"
-#. 10
-#: ../cli/src/devices.c:113
+#. 13
+#. 2
+#: ../clients/cli/devices.c:69 ../clients/cli/devices.c:97
+msgid "IS-SOFTWARE"
+msgstr "IS-SOFTWARE"
+
+#. 14
+#: ../clients/cli/devices.c:70
msgid "NM-MANAGED"
msgstr "NM-HANTERAD"
-#. 11
-#: ../cli/src/devices.c:114
+#. 16
+#: ../clients/cli/devices.c:72
msgid "FIRMWARE-MISSING"
msgstr "FAST-PROGRAMVARA-SAKNAS"
-#. 12
-#: ../cli/src/devices.c:115
-msgid "CONNECTION"
-msgstr "ANSLUTNING"
+#. 0
+#: ../clients/cli/devices.c:85
+msgid "AVAILABLE-CONNECTION-PATHS"
+msgstr "TILLGÄNGLIGA-ANSLUTNINGS-SÖKVÄGAR"
+
+#. 1
+#: ../clients/cli/devices.c:86
+msgid "AVAILABLE-CONNECTIONS"
+msgstr "TILLGÄNGLIGA-ANSLUTNINGAR"
#. 0
-#: ../cli/src/devices.c:124
+#: ../clients/cli/devices.c:95
msgid "CARRIER-DETECT"
-msgstr "CARRIER-DETECT"
+msgstr "BÄRARE-UPPTÄCK"
#. 1
-#: ../cli/src/devices.c:125
+#: ../clients/cli/devices.c:96
msgid "SPEED"
msgstr "HASTIGHET"
#. 0
-#: ../cli/src/devices.c:134
+#: ../clients/cli/devices.c:106
msgid "CARRIER"
msgstr "BÄRARE"
#. 0
-#: ../cli/src/devices.c:144
+#: ../clients/cli/devices.c:115 ../clients/cli/devices.c:545
msgid "WEP"
msgstr "WEP"
#. 1
-#: ../cli/src/devices.c:145
+#: ../clients/cli/devices.c:116
msgid "WPA"
msgstr "WPA"
#. 2
-#: ../cli/src/devices.c:146
+#: ../clients/cli/devices.c:117 ../clients/cli/devices.c:553
msgid "WPA2"
msgstr "WPA2"
#. 3
-#: ../cli/src/devices.c:147
+#: ../clients/cli/devices.c:118
msgid "TKIP"
msgstr "TKIP"
#. 4
-#: ../cli/src/devices.c:148
+#: ../clients/cli/devices.c:119
msgid "CCMP"
msgstr "CCMP"
+#. 5
+#. 2
+#: ../clients/cli/devices.c:120 ../clients/cli/devices.c:219
+msgid "AP"
+msgstr "AP"
+
+#. 6
+#: ../clients/cli/devices.c:121
+msgid "ADHOC"
+msgstr "ADHOC"
+
#. 0
-#: ../cli/src/devices.c:158
+#: ../clients/cli/devices.c:130
msgid "CTR-FREQ"
msgstr "CTR-FREQ"
#. 1
-#: ../cli/src/devices.c:159
+#: ../clients/cli/devices.c:131
msgid "RSSI"
msgstr "RSSI"
#. 2
-#: ../cli/src/devices.c:160
+#: ../clients/cli/devices.c:132
msgid "CINR"
msgstr "CINR"
#. 3
-#: ../cli/src/devices.c:161
+#: ../clients/cli/devices.c:133
msgid "TX-POW"
msgstr "TX-POW"
#. 4
-#: ../cli/src/devices.c:162
+#: ../clients/cli/devices.c:134
msgid "BSID"
msgstr "BSID"
#. 0
-#: ../cli/src/devices.c:172
+#: ../clients/cli/devices.c:143 ../clients/tui/nmt-page-wifi.c:226
msgid "SSID"
msgstr "SSID"
#. 1
-#: ../cli/src/devices.c:173
+#: ../clients/cli/devices.c:144
+msgid "SSID-HEX"
+msgstr "SSID-HEX"
+
+#. 2
+#: ../clients/cli/devices.c:145 ../clients/tui/nmt-page-wifi.c:360
msgid "BSSID"
msgstr "BSSID"
-#. 2
-#: ../cli/src/devices.c:174
+#. 3
+#: ../clients/cli/devices.c:146
msgid "MODE"
msgstr "LÄGE"
-#. 3
-#: ../cli/src/devices.c:175
+#. 4
+#: ../clients/cli/devices.c:147
+msgid "CHAN"
+msgstr "CHAN"
+
+#. 5
+#: ../clients/cli/devices.c:148
msgid "FREQ"
msgstr "FREK"
-#. 4
-#: ../cli/src/devices.c:176
+#. 6
+#: ../clients/cli/devices.c:149
msgid "RATE"
msgstr "FREKVENS"
-#. 5
+#. 7
#. 1
-#: ../cli/src/devices.c:177
-#: ../cli/src/devices.c:195
+#: ../clients/cli/devices.c:150 ../clients/cli/devices.c:170
msgid "SIGNAL"
msgstr "SIGNAL"
-#. 6
-#: ../cli/src/devices.c:178
+#. 8
+#: ../clients/cli/devices.c:151
+msgid "BARS"
+msgstr "BARS"
+
+#. 9
+#: ../clients/cli/devices.c:152
msgid "SECURITY"
msgstr "SÄKERHET"
-#. 7
-#: ../cli/src/devices.c:179
+#. 10
+#: ../clients/cli/devices.c:153
msgid "WPA-FLAGS"
msgstr "WPA-FLAGGOR"
-#. 8
-#: ../cli/src/devices.c:180
+#. 11
+#: ../clients/cli/devices.c:154
msgid "RSN-FLAGS"
msgstr "RSN-FLAGGOR"
-#. 10
+#. 14
+#: ../clients/cli/devices.c:157
+msgid "*"
+msgstr "*"
+
+#. 0
+#. 5
+#: ../clients/cli/devices.c:169 ../clients/cli/devices.c:222
+msgid "NSP"
+msgstr "NSP"
+
+#. 0
+#: ../clients/cli/devices.c:184
+msgid "SLAVES"
+msgstr "SLAVAR"
+
+#. 0
+#: ../clients/cli/devices.c:193
+msgid "ID"
+msgstr "ID"
+
+#. 0
+#: ../clients/cli/devices.c:202 ../clients/cli/devices.c:217
+msgid "CAPABILITIES"
+msgstr "FÖRMÅGOR"
+
+#. 1
+#: ../clients/cli/devices.c:218
+msgid "WIFI-PROPERTIES"
+msgstr "WIFI-EGENSKAPER"
+
+#. 3
+#: ../clients/cli/devices.c:220
+msgid "WIRED-PROPERTIES"
+msgstr "TRÃ…DADE-EGENSKAPER"
+
#. 4
-#: ../cli/src/devices.c:182
-#: ../cli/src/devices.c:198
-msgid "ACTIVE"
-msgstr "AKTIV"
+#: ../clients/cli/devices.c:221
+msgid "WIMAX-PROPERTIES"
+msgstr "WIMAX-EGENSKAPER"
+
+#. 10
+#: ../clients/cli/devices.c:227 ../clients/tui/nmt-page-bond.c:73
+msgid "BOND"
+msgstr "KOMBINERING"
-#: ../cli/src/devices.c:215
+#. 11
+#: ../clients/cli/devices.c:228 ../clients/tui/nmt-page-team.c:51
+msgid "TEAM"
+msgstr "GRUPP"
+
+#. 12
+#: ../clients/cli/devices.c:229 ../clients/tui/nmt-page-bridge.c:42
+msgid "BRIDGE"
+msgstr "BRYGGA"
+
+#. 14
+#: ../clients/cli/devices.c:231
+msgid "BLUETOOTH"
+msgstr "BLUETOOTH"
+
+#. 15
+#: ../clients/cli/devices.c:232
+msgid "CONNECTIONS"
+msgstr "ANSLUTNINGAR"
+
+#: ../clients/cli/devices.c:256
#, 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 | delete | wifi | wimax }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | delete | 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"
+" connect <ifname>\n"
+"\n"
+" disconnect <ifname>\n"
+"\n"
+" delete <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"
+" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
msgstr ""
-"Användning: nmcli dev { KOMMANDO | help }\n"
+"Användning: nmcli device { KOMMANDO | help }\n"
"\n"
-" KOMMANDO := { status | list | disconnect | wifi | wimax }\n"
+"KOMMANDO := { status | show | connect | disconnect | delete | wifi | "
+"wimax }\n"
"\n"
-" KOMMANDO := { status | list | disconnect | wifi }\n"
+"KOMMANDO := { status | show | connect | disconnect | delete | wifi }\n"
"\n"
" status\n"
-" list [iface <gränssnitt>]\n"
-" disconnect iface <gränssnitt> [--nowait] [--timeout <tidsgräns>]\n"
-" wifi [list [iface <gränssnitt>] [bssid <BSSID>]]\n"
-" wimax [list [iface <gränssnitt>] [nsp <namn>]]\n"
+"\n"
+" show [<grnamn>]\n"
+"\n"
+" connect <grnamn>\n"
+"\n"
+" disconnect <grnamn>\n"
+"\n"
+" delete <grnamn>\n"
+"\n"
+" wifi [list [ifname <grnamn>] [bssid <BSSID>]]\n"
+"\n"
+" wifi connect <(B)SSID> [password <lösenord>] [wep-key-type key|phrase] "
+"[ifname <grnamn>]\n"
+" [bssid <BSSID>] [name <namn>] [private yes|no]\n"
+"\n"
+" wifi rescan [[ifname] <grnamn>]\n"
+"\n"
+" wimax [list [ifname <grnamn>] [nsp <namn>]]\n"
"\n"
-#: ../cli/src/devices.c:243
-msgid "unmanaged"
-msgstr "ohanterad"
-
-#: ../cli/src/devices.c:245
-msgid "unavailable"
-msgstr "otillgänglig"
-
-#: ../cli/src/devices.c:247
-#: ../cli/src/network-manager.c:108
-msgid "disconnected"
-msgstr "frånkopplad"
-
-#: ../cli/src/devices.c:249
-msgid "connecting (prepare)"
-msgstr "ansluter (förbereder)"
-
-#: ../cli/src/devices.c:251
-msgid "connecting (configuring)"
-msgstr "ansluter (konfigurerar)"
-
-#: ../cli/src/devices.c:253
-msgid "connecting (need authentication)"
-msgstr "ansluter (behöver autentisering)"
-
-#: ../cli/src/devices.c:255
-msgid "connecting (getting IP configuration)"
-msgstr "ansluter (hämtar IP-konfiguration)"
-
-#: ../cli/src/devices.c:257
-msgid "connecting (checking IP connectivity)"
-msgstr "ansluter (kontrollerar IP-anslutning)"
-
-#: ../cli/src/devices.c:259
-msgid "connecting (starting secondary connections)"
-msgstr "ansluter (startar sekundära anslutningar)"
-
-#: ../cli/src/devices.c:261
-#: ../cli/src/network-manager.c:104
-msgid "connected"
-msgstr "ansluten"
-
-#: ../cli/src/devices.c:265
-msgid "connection failed"
-msgstr "anslutningen misslyckades"
-
-#: ../cli/src/devices.c:276
-msgid "No reason given"
-msgstr "Ingen anledning angiven"
-
-#: ../cli/src/devices.c:279
-msgid "Unknown error"
-msgstr "Okänt fel"
-
-#: ../cli/src/devices.c:282
-msgid "Device is now managed"
-msgstr "Enheten är nu hanterad"
-
-#: ../cli/src/devices.c:285
-msgid "Device is now unmanaged"
-msgstr "Enheten är nu ohanterad"
-
-#: ../cli/src/devices.c:288
-msgid "The device could not be readied for configuration"
-msgstr "Enheten kunde inte göras färdig för konfiguration"
-
-#: ../cli/src/devices.c:291
-msgid "IP configuration could not be reserved (no available address, timeout, etc)"
-msgstr "IP-konfigurationen kunde inte reserveras (ingen tillgänglig adress, tidsgräns, etc)"
-
-#: ../cli/src/devices.c:294
-msgid "The IP configuration is no longer valid"
-msgstr "IP-konfigurationen är inte längre giltig"
-
-#: ../cli/src/devices.c:297
-msgid "Secrets were required, but not provided"
-msgstr "Hemligheter krävdes men angavs inte"
-
-#: ../cli/src/devices.c:300
-msgid "802.1X supplicant disconnected"
-msgstr "802.1X-supplikanten kopplade från"
-
-#: ../cli/src/devices.c:303
-msgid "802.1X supplicant configuration failed"
-msgstr "Konfiguration av 802.1X-supplikanten misslyckades"
-
-#: ../cli/src/devices.c:306
-msgid "802.1X supplicant failed"
-msgstr "802.1X-supplikanten misslyckades"
-
-#: ../cli/src/devices.c:309
-msgid "802.1X supplicant took too long to authenticate"
-msgstr "802.1X-supplikanten tog för lång tid att autentisera"
-
-#: ../cli/src/devices.c:312
-msgid "PPP service failed to start"
-msgstr "PPP-tjänsten misslyckades med att starta"
-
-#: ../cli/src/devices.c:315
-msgid "PPP service disconnected"
-msgstr "PPP-tjänsten kopplades från"
-
-#: ../cli/src/devices.c:318
-msgid "PPP failed"
-msgstr "PPP misslyckades"
-
-#: ../cli/src/devices.c:321
-msgid "DHCP client failed to start"
-msgstr "DHCP-klienten misslyckades med att starta"
-
-#: ../cli/src/devices.c:324
-msgid "DHCP client error"
-msgstr "Fel i DHCP-klient"
-
-#: ../cli/src/devices.c:327
-msgid "DHCP client failed"
-msgstr "DHCP-klienten misslyckades"
-
-#: ../cli/src/devices.c:330
-msgid "Shared connection service failed to start"
-msgstr "Tjänst för delad anslutning misslyckades med att starta"
-
-#: ../cli/src/devices.c:333
-msgid "Shared connection service failed"
-msgstr "Tjänst för delad anslutning misslyckades"
-
-#: ../cli/src/devices.c:336
-msgid "AutoIP service failed to start"
-msgstr "AutoIP-tjänsten misslyckades med att starta"
-
-#: ../cli/src/devices.c:339
-msgid "AutoIP service error"
-msgstr "Fel i AutoIP-tjänsten"
-
-#: ../cli/src/devices.c:342
-msgid "AutoIP service failed"
-msgstr "AutoIP-tjänsten misslyckades"
-
-#: ../cli/src/devices.c:345
-msgid "The line is busy"
-msgstr "Linjen är upptagen"
-
-#: ../cli/src/devices.c:348
-msgid "No dial tone"
-msgstr "Ingen rington"
-
-#: ../cli/src/devices.c:351
-msgid "No carrier could be established"
-msgstr "Ingen bärare kunde etableras"
-
-#: ../cli/src/devices.c:354
-msgid "The dialing request timed out"
-msgstr "Uppringningsbegäran översteg tidsgränsen"
-
-#: ../cli/src/devices.c:357
-msgid "The dialing attempt failed"
-msgstr "Uppringningsförsöket misslyckades"
-
-#: ../cli/src/devices.c:360
-msgid "Modem initialization failed"
-msgstr "Initiering av modem misslyckades"
-
-#: ../cli/src/devices.c:363
-msgid "Failed to select the specified APN"
-msgstr "Misslyckades med att välja angiven APN"
-
-#: ../cli/src/devices.c:366
-msgid "Not searching for networks"
-msgstr "Söker inte efter nätverk"
-
-#: ../cli/src/devices.c:369
-msgid "Network registration denied"
-msgstr "Nätverksregistreringen nekades"
-
-#: ../cli/src/devices.c:372
-msgid "Network registration timed out"
-msgstr "Tidsgränsen för nätverksregistrering överstegs"
-
-#: ../cli/src/devices.c:375
-msgid "Failed to register with the requested network"
-msgstr "Misslyckades med att registrera mot det begärda nätverket"
-
-#: ../cli/src/devices.c:378
-msgid "PIN check failed"
-msgstr "Kontroll av PIN-kod misslyckades"
-
-#: ../cli/src/devices.c:381
-msgid "Necessary firmware for the device may be missing"
-msgstr "Nödvändig fast programvara för enheten kanske saknas"
-
-#: ../cli/src/devices.c:384
-msgid "The device was removed"
-msgstr "Enheten togs bort"
-
-#: ../cli/src/devices.c:387
-msgid "NetworkManager went to sleep"
-msgstr "Nätverkshanterare somnade"
-
-#: ../cli/src/devices.c:390
-msgid "The device's active connection disappeared"
-msgstr "Enhetens aktiva anslutning försvann"
-
-#: ../cli/src/devices.c:393
-msgid "Device disconnected by user or client"
-msgstr "Enheten kopplades från av användare eller klient"
-
-#: ../cli/src/devices.c:396
-msgid "Carrier/link changed"
-msgstr "Bärare/länk ändrades"
-
-#: ../cli/src/devices.c:399
-msgid "The device's existing connection was assumed"
-msgstr "Enhetens befintliga anslutning antogs"
-
-#: ../cli/src/devices.c:402
-msgid "The supplicant is now available"
-msgstr "Supplikanten finns nu tillgänglig"
-
-#: ../cli/src/devices.c:405
-msgid "The modem could not be found"
-msgstr "Modemet kunde inte hittas"
-
-#: ../cli/src/devices.c:408
-msgid "The Bluetooth connection failed or timed out"
-msgstr "Blåtandsanslutningen misslyckades eller översteg tidsgränsen"
-
-#: ../cli/src/devices.c:411
-msgid "GSM Modem's SIM card not inserted"
-msgstr "SIM-kortet i GSM-modemet är inte anslutet"
+#: ../clients/cli/devices.c:280
+#, 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 ""
+"Användning: nmcli device status { help }\n"
+"\n"
+"Visa status för alla enheter.\n"
+"Som standard kommer följande kolumnnamn visas:\n"
+" ENHET - gränssnittsnamn\n"
+" TYP - enhetstyp\n"
+" TILLSTÅND - enhetstillstånd\n"
+" ANSLUTNING - aktiverad anslutning på enheten (om någon)\n"
+"Visade kolumner kan ändras med globala flaggan â€--fieldsâ€. â€status†är\n"
+"standardflaggan, vilket betyder att â€nmcli device†anropar â€nmcli device "
+"statusâ€.\n"
+"\n"
-#: ../cli/src/devices.c:414
-msgid "GSM Modem's SIM PIN required"
-msgstr "PIN-kod för SIM-kortet i GSM-modemet krävs"
+#: ../clients/cli/devices.c:295
+#, 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 ""
+"Använding: nmcli device show { ARGUMENT ]| help }\n"
+"\n"
+"ARGUMENT := [<grnamn>]\n"
+"\n"
+"Visa enhetsdetaljer.\n"
+"Kommandot listar detaljer för alla enheter eller för en given enhet.\n"
+"\n"
-#: ../cli/src/devices.c:417
-msgid "GSM Modem's SIM PUK required"
-msgstr "PUK-kod för SIM-kortet i GSM-modemet krävs"
+#: ../clients/cli/devices.c:306
+#, 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 ""
+"Användning: nmcli device connect { ARGUMENT | help }\n"
+"\n"
+"ARGUMENT := <ifnamn>\n"
+"\n"
+"Anslut enheten.\n"
+"Nätverkshanteraren försöker då att finna en passande anslutning att "
+"aktivera.\n"
+"Den kommer också att ta hänsyn till anslutningar som inte är inställda på "
+"att autoansluta.\n"
+"\n"
-#: ../cli/src/devices.c:420
-msgid "GSM Modem's SIM wrong"
-msgstr "SIM-kortet i GSM-modemet är felaktigt"
+#: ../clients/cli/devices.c:318
+#, 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 ""
+"Användning: nmcli device disconnect { ARGUMENT | help }\n"
+"\n"
+"ARGUMENT := <ifnamn>\n"
+"\n"
+"Koppla från enheten.\n"
+"Kommandot kopplar från enheten och hindrar den från att autoaktivera\n"
+"vidare anslutningar utan användar-/manuellinblandning.\n"
+"\n"
-#: ../cli/src/devices.c:423
-#| msgid "Infiniband device does not support connected mode"
-msgid "InfiniBand device does not support connected mode"
-msgstr "InfiniBand-enheten saknar stöd för anslutet läge"
+#: ../clients/cli/devices.c:330
+#, c-format
+msgid ""
+"Usage: nmcli device delete { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Deletes the software device.\n"
+"The command removes the interface. It only works for software devices\n"
+"(like bonds, bridges, etc.). Hardware devices cannot be deleted by the\n"
+"command.\n"
+"\n"
+msgstr ""
+"Användning: nmcli device delete { ARGUMENT | help }\n"
+"\n"
+"ARGUMENT := <grnamn>\n"
+"\n"
+"Tar bort programvaruenheten.\n"
+"Kommandot tar bort gränssnittet. Det fungerar endast för programvaruenheter\n"
+"(som kombineringar, bryggor, etc.). HÃ¥rdvaruenheter kan inte tas bort med\n"
+"kommandot.\n"
+"\n"
-#: ../cli/src/devices.c:426
-#| msgid "connection failed"
-msgid "A dependency of the connection failed"
-msgstr "Ett beroende för anslutningen misslyckades"
+#: ../clients/cli/devices.c:343
+#, 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 ""
+"Användning: nmcli device wifi { ARGUMENT | help }\n"
+"\n"
+"Utför åtgärd på Wi-Fi-enheter.\n"
+"\n"
+"ARGUMENT := [list [ifname <grnamn>] [bssid <BSSID>]]\n"
+"\n"
+"List över tillgängliga trÃ¥dlösa accesspunkter. â€ifname†och â€bssidâ€-"
+"flaggorna kan\n"
+"användas för att lista accesspunkter för ett specifikt gränssnitt, eller med "
+"ett specifikt BSSID.\n"
+"\n"
+"ARGUMENT := connect <(B)SSID> [password <lösenord>] [wep-key-type key|"
+"phrase] [ifname <ifnamn>]\n"
+" [bssid <BSSID>] [name <namn>] [private yes|no]\n"
+"\n"
+"Anslut till ett trådlöst nätverk angivet genom SSID eller BSSID. Kommandot "
+"skapar\n"
+"en ny anslutning och aktiverar den på en enhet. Det är en kommandorad-\n"
+"motsvarighet till att klicka på ett SSID i en GUI-klient. Kommandot skapar "
+"alltid\n"
+"en ny anslutning och är därför mest användbart för att ansluta till nya "
+"trådlösa\n"
+"nätverk. Om en anslutning för nätverket redan finns är det bättre att\n"
+"ta fram befintliga profiler enligt: nmcli con up id <namn>. Observera att\n"
+"endast öppna WEP och WPA-PSK-nätverk stöds för tillfället. Det antas också\n"
+"att IP-konfiguration erhålls via DHCP.\n"
+"\n"
+"ARGUMENT := rescan [[ifnamn] <grnamn>]\n"
+"\n"
+"Begär att Nätverkshanteraren omedelbart söker av efter tillgängliga "
+"accesspunkter.\n"
+"Nätverkshanteraren söker av trådlösa nätverk periodiskt, men i några fall\n"
+"kan det vara användbart att söka av manuellt. Observera att detta kommando "
+"inte visar\n"
+"APs, använd â€nmcli device wifi list†för det.\n"
+"\n"
-#: ../cli/src/devices.c:428
-#: ../cli/src/devices.c:451
-#: ../cli/src/devices.c:467
-#: ../cli/src/devices.c:587
-#: ../cli/src/devices.c:631
-msgid "Unknown"
-msgstr "Okänt"
+#: ../clients/cli/devices.c:376
+#, 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 ""
+"Användning: nmcli device wimax { ARGUMENT | help }\n"
+"\n"
+"Utför åtgärder på WiMAX-enheter.\n"
+"\n"
+"ARGUMENT := [list [ifname <grnamn>] [nsp <namn>]]\n"
+"\n"
+"Lista tillgängliga WiMAX NSP:er. Flaggorna â€ifname†och â€nsp†kan användas "
+"för att\n"
+"lista nätverk för ett specifikt gränssnitt, eller med ett specifik NSP.\n"
+"\n"
-#: ../cli/src/devices.c:500
+#: ../clients/cli/devices.c:465 ../clients/cli/devices.c:656
msgid "(none)"
msgstr "(ingen)"
-#: ../cli/src/devices.c:556
+#: ../clients/cli/devices.c:533
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:557
+#: ../clients/cli/devices.c:534
#, c-format
msgid "%u Mbit/s"
msgstr "%u Mbit/s"
-#: ../cli/src/devices.c:566
-msgid "Encrypted: "
-msgstr "Krypterad: "
-
-#: ../cli/src/devices.c:571
-msgid "WEP "
-msgstr "WEP "
-
-#: ../cli/src/devices.c:573
-msgid "WPA "
-msgstr "WPA "
+#: ../clients/cli/devices.c:549
+msgid "WPA1"
+msgstr "WPA1"
-#: ../cli/src/devices.c:575
-msgid "WPA2 "
-msgstr "WPA2 "
+#: ../clients/cli/devices.c:558
+msgid "802.1X"
+msgstr "802.1X"
-#: ../cli/src/devices.c:578
-msgid "Enterprise "
-msgstr "Företag"
-
-#: ../cli/src/devices.c:587
+#: ../clients/cli/devices.c:574
msgid "Ad-Hoc"
msgstr "Ad-Hoc"
-#: ../cli/src/devices.c:587
-msgid "Infrastructure"
-msgstr "Infrastruktur"
+#: ../clients/cli/devices.c:575
+msgid "Infra"
+msgstr "Infra"
+
+#: ../clients/cli/devices.c:576
+msgid "N/A"
+msgstr "N/A"
-#: ../cli/src/devices.c:622
+#: ../clients/cli/devices.c:607
msgid "Home"
msgstr "Hem"
-#: ../cli/src/devices.c:625
+#: ../clients/cli/devices.c:610
msgid "Partner"
msgstr "Partner"
-#: ../cli/src/devices.c:628
+#: ../clients/cli/devices.c:613
msgid "Roaming"
msgstr "Roaming"
-#: ../cli/src/devices.c:700
-#, c-format
-msgid "Error: 'dev list': %s"
-msgstr "Fel: \"dev list\": %s"
-
-#: ../cli/src/devices.c:702
-#, c-format
-msgid "Error: 'dev list': %s; allowed fields: %s"
-msgstr "Fel: \"dev list\": %s; tillåtna fält: %s"
-
-#: ../cli/src/devices.c:711
+#: ../clients/cli/devices.c:773
msgid "Device details"
msgstr "Enhetsdetaljer"
-#: ../cli/src/devices.c:756
-#: ../cli/src/devices.c:757
-#: ../cli/src/devices.c:1164
-#: ../cli/src/utils.c:445
-msgid "(unknown)"
-msgstr "(okänt)"
+#: ../clients/cli/devices.c:785
+#, c-format
+msgid "Error: 'device show': %s"
+msgstr "Fel: â€device showâ€: %s"
-#: ../cli/src/devices.c:765
-msgid "not connected"
-msgstr "inte ansluten"
+#: ../clients/cli/devices.c:836 ../clients/cli/devices.c:839
+msgid "(unknown)"
+msgstr "(okänd)"
-#: ../cli/src/devices.c:792
+#: ../clients/cli/devices.c:877
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
-#. Print header
-#. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:865
+#: ../clients/cli/devices.c:963
msgid "on"
msgstr "på"
-#: ../cli/src/devices.c:865
+#: ../clients/cli/devices.c:963
msgid "off"
msgstr "av"
-#: ../cli/src/devices.c:1016
+#: ../clients/cli/devices.c:1235
#, c-format
-msgid "Error: 'dev status': %s"
-msgstr "Fel: \"dev status\": %s"
+msgid "Error: 'device status': %s"
+msgstr "Fel: â€device statusâ€: %s"
-#: ../cli/src/devices.c:1018
-#, c-format
-msgid "Error: 'dev status': %s; allowed fields: %s"
-msgstr "Fel: \"dev status\": %s; tillåtna fält: %s"
-
-#: ../cli/src/devices.c:1041
+#. Add headers
+#: ../clients/cli/devices.c:1242
msgid "Status of devices"
msgstr "Status för enheter"
-#: ../cli/src/devices.c:1072
+#: ../clients/cli/devices.c:1273
#, c-format
-msgid "Error: '%s' argument is missing."
-msgstr "Fel: \"%s\"-argument saknas."
+msgid "Error: invalid extra argument '%s'."
+msgstr "Fel: ogiltigt extra argument: â€%sâ€."
-#: ../cli/src/devices.c:1113
-#: ../cli/src/devices.c:1265
-#: ../cli/src/devices.c:1402
-#: ../cli/src/devices.c:1621
+#: ../clients/cli/devices.c:1290 ../clients/cli/devices.c:1565
+#: ../clients/cli/devices.c:1698 ../clients/cli/devices.c:1785
+#: ../clients/cli/devices.c:1918 ../clients/cli/devices.c:2579
#, c-format
msgid "Error: Device '%s' not found."
-msgstr "Fel: Enheten \"%s\" hittades inte."
+msgstr "Fel: Enheten â€%s†hittades inte."
-#: ../cli/src/devices.c:1136
+#: ../clients/cli/devices.c:1345
+#, c-format
+msgid "Device '%s' successfully activated with '%s'.\n"
+msgstr "Enheten â€%s†aktiverades med â€%sâ€.\n"
+
+#: ../clients/cli/devices.c:1367 ../clients/cli/devices.c:1418
+#, c-format
+msgid "Connection with UUID '%s' created and activated on device '%s'\n"
+msgstr "Anslutningen med UUID â€%s†skapad och aktiverad pÃ¥ enhet â€%sâ€\n"
+
+#: ../clients/cli/devices.c:1372
+#, c-format
+msgid "Error: Connection activation failed: (%d) %s."
+msgstr "Fel: Aktivering av anslutningen misslyckades: (%d) %s."
+
+#: ../clients/cli/devices.c:1399
+#, c-format
+msgid "Error: Failed to add/activate new connection: %s"
+msgstr "Fel: Misslyckades med att lägga till/aktivera ny anslutning: %s"
+
+#: ../clients/cli/devices.c:1408
+#, c-format
+msgid "Error: Failed to add/activate new connection: Unknown error"
+msgstr "Fel: Misslyckades att lägga till/aktivera ny anslutning: Okänt fel"
+
+#: ../clients/cli/devices.c:1480
+#, c-format
+msgid "Error: Device activation failed: %s"
+msgstr "Fel: Aktivering av enheten misslyckades: %s"
+
+#: ../clients/cli/devices.c:1489
+#, c-format
+msgid "Error: Device activation failed: device was disconnected"
+msgstr "Fel: Aktivering av enheten misslyckades: enheten blev frånkopplad"
+
+#: ../clients/cli/devices.c:1503
+#, c-format
+msgid "Device '%s' has been connected.\n"
+msgstr "Enheten â€%s†är ansluten.\n"
+
+#: ../clients/cli/devices.c:1534 ../clients/cli/devices.c:1543
+#: ../clients/cli/devices.c:1667 ../clients/cli/devices.c:1676
+#: ../clients/cli/devices.c:1755 ../clients/cli/devices.c:1763
+#, c-format
+msgid "Error: No interface specified."
+msgstr "Fel: Inget gränssnitt angivet."
+
+#: ../clients/cli/devices.c:1549 ../clients/cli/devices.c:1682
+#: ../clients/cli/devices.c:1769
+#, c-format
+msgid "Error: extra argument not allowed: '%s'."
+msgstr "Fel: extra argument saknas: â€%sâ€."
+
+#: ../clients/cli/devices.c:1608
#, c-format
msgid "Success: Device '%s' successfully disconnected."
-msgstr "Lyckades: Enheten \"%s\" kopplades från."
+msgstr "Lyckades: Enheten â€%s†kopplades frÃ¥n."
-#: ../cli/src/devices.c:1161
+#: ../clients/cli/devices.c:1622
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
-msgstr "Fel: Frånkoppling av enheten \"%s\" (%s) misslyckades: %s"
+msgstr "Fel: FrÃ¥nkoppling av enheten â€%s†(%s) misslyckades: %s"
-#: ../cli/src/devices.c:1169
+#: ../clients/cli/devices.c:1637
#, c-format
-msgid "Device state: %d (%s)\n"
-msgstr "Enhetstillstånd: %d (%s)\n"
+msgid "Device '%s' has been disconnected.\n"
+msgstr "Enheten â€%s†kopplades frÃ¥n.\n"
-#: ../cli/src/devices.c:1234
+#: ../clients/cli/devices.c:1727
#, c-format
-msgid "Error: iface has to be specified."
-msgstr "Fel: gränssnitt (iface) måste anges."
+msgid "Error: Device '%s' (%s) deletion failed: %s"
+msgstr "Fel: Borttagning av enheten â€%s†(%s) misslyckades: %s"
-#: ../cli/src/devices.c:1360
+#: ../clients/cli/devices.c:1791
#, c-format
-msgid "Error: 'dev wifi': %s"
-msgstr "Fel: \"dev wifi\": %s"
+msgid "Error: Device '%s' is a hardware device. It can't be deleted."
+msgstr "Fel: Enheten â€%s†är en hÃ¥rdvaruenhet. Det kan inte tas bort."
-#: ../cli/src/devices.c:1362
-#, c-format
-msgid "Error: 'dev wifi': %s; allowed fields: %s"
-msgstr "Fel: \"dev wifi\": %s; tillåtna fält: %s"
+#: ../clients/cli/devices.c:1861
+msgid "Wi-Fi scan list"
+msgstr "Trådlös avsökningslista"
-#: ../cli/src/devices.c:1385
-msgid "WiFi scan list"
-msgstr "WiFi-avsökningslista"
+#: ../clients/cli/devices.c:1899
+#, c-format
+msgid "Error: 'device wifi': %s"
+msgstr "Fel: â€device wifiâ€: %s"
-#: ../cli/src/devices.c:1422
-#: ../cli/src/devices.c:1476
+#: ../clients/cli/devices.c:1941 ../clients/cli/devices.c:2016
#, c-format
msgid "Error: Access point with bssid '%s' not found."
-msgstr "Fel: Accesspunkt med bssid \"%s\" hittades inte."
+msgstr "Fel: Accesspunkt med bssid â€%s†hittades inte."
-#: ../cli/src/devices.c:1439
+#: ../clients/cli/devices.c:1965 ../clients/cli/devices.c:2282
+#: ../clients/cli/devices.c:2446
#, c-format
-msgid "Error: Device '%s' is not a WiFi device."
-msgstr "Fel: Enheten \"%s\" är inte en WiFi-enhet."
+msgid "Error: Device '%s' is not a Wi-Fi device."
+msgstr "Fel: Enheten â€%s†är inte en trÃ¥dlös enhet."
+
+#: ../clients/cli/devices.c:2175
+msgid "SSID or BSSID: "
+msgstr "SSID eller BSSID: "
-#: ../cli/src/devices.c:1503
+#: ../clients/cli/devices.c:2180
#, c-format
-msgid "Error: 'dev wifi' command '%s' is not valid."
-msgstr "Fel: \"dev wifi\"-kommandot \"%s\" är inte giltigt."
+msgid "Error: SSID or BSSID are missing."
+msgstr "Fel: SSID eller BSSID saknas."
-#: ../cli/src/devices.c:1579
+#: ../clients/cli/devices.c:2204
#, c-format
-msgid "Error: 'dev wimax': %s"
-msgstr "Fel: \"dev wimax\": %s"
+msgid "Error: bssid argument value '%s' is not a valid BSSID."
+msgstr "Fel: bssid-argumentvärdet â€%s†är inte ett giltigt BSSID."
-#: ../cli/src/devices.c:1581
+#: ../clients/cli/devices.c:2228
#, c-format
-msgid "Error: 'dev wimax': %s; allowed fields: %s"
-msgstr "Fel: \"dev wimax\": %s; tillåtna fält: %s"
+msgid ""
+"Error: wep-key-type argument value '%s' is invalid, use 'key' or 'phrase'."
+msgstr ""
+"Fel: wep-key-type-argumentvärdet â€%s†är ogiltigt, använd â€key†eller "
+"â€phraseâ€."
+
+#: ../clients/cli/devices.c:2248
+#, c-format
+msgid "Error: %s: %s."
+msgstr "Fel: %s %s."
+
+#: ../clients/cli/devices.c:2263
+#, c-format
+msgid "Error: BSSID to connect to (%s) differs from bssid argument (%s)."
+msgstr ""
+"Fel: BSSID att ansluta till (%s) skiljer sig från bssid-argumentet (%s)."
-#: ../cli/src/devices.c:1604
+#: ../clients/cli/devices.c:2269
+#, c-format
+msgid "Error: Parameter '%s' is neither SSID nor BSSID."
+msgstr "Fel: Parameter â€%s†är varken SSID eller BSSID."
+
+#: ../clients/cli/devices.c:2284 ../clients/cli/devices.c:2448
+#, c-format
+msgid "Error: No Wi-Fi device found."
+msgstr "Fel: Ingen trådlös enhet hittades."
+
+#: ../clients/cli/devices.c:2302
+#, c-format
+msgid "Error: No network with SSID '%s' found."
+msgstr "Fel: Inget nätverk med SSID â€%s†hittades."
+
+#: ../clients/cli/devices.c:2304
+#, c-format
+msgid "Error: No access point with BSSID '%s' found."
+msgstr "Fel: Ingen accesspunkt med BSSID â€%s†hittades."
+
+#: ../clients/cli/devices.c:2343
+msgid "Password: "
+msgstr "Lösenord:"
+
+#: ../clients/cli/devices.c:2475
+#, c-format
+msgid "Error: 'device wifi' command '%s' is not valid."
+msgstr "Fel: “device wifi“-kommandot â€%s†är inte giltigt."
+
+#: ../clients/cli/devices.c:2522
msgid "WiMAX NSP list"
msgstr "WiMAX NSP-lista"
-#: ../cli/src/devices.c:1641
+#: ../clients/cli/devices.c:2559
+#, c-format
+msgid "Error: 'device wimax': %s"
+msgstr "Fel: â€device wimaxâ€: %s"
+
+#: ../clients/cli/devices.c:2602
#, c-format
msgid "Error: NSP with name '%s' not found."
-msgstr "Fel: NSP med namnet \"%s\" hittades inte."
+msgstr "Fel: NSP med namnet â€%s†hittades inte."
-#: ../cli/src/devices.c:1652
+#: ../clients/cli/devices.c:2615
#, c-format
msgid "Error: Device '%s' is not a WiMAX device."
-msgstr "Fel: Enheten \"%s\" är inte en WiMAX-enhet."
+msgstr "Fel: Enheten â€%s†är inte en WiMAX-enhet."
-#: ../cli/src/devices.c:1683
+#: ../clients/cli/devices.c:2659
#, c-format
msgid "Error: Access point with nsp '%s' not found."
-msgstr "Fel: Accesspunkt med nsp \"%s\" hittades inte."
+msgstr "Fel: Accesspunkt med nsp â€%s†hittades inte."
-#: ../cli/src/devices.c:1710
+#: ../clients/cli/devices.c:2696
#, c-format
-msgid "Error: 'dev wimax' command '%s' is not valid."
-msgstr "Fel: \"dev wimax\"-kommandot \"%s\" är inte giltigt."
+msgid "Error: 'device wimax' command '%s' is not valid."
+msgstr "Fel: â€device wimaxâ€-kommandot â€%s†är inte giltigt."
-#: ../cli/src/devices.c:1760
+#: ../clients/cli/devices.c:2866
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
-msgstr "Fel: \"dev\"-kommandot \"%s\" är inte giltigt."
+msgstr "Fel: â€devâ€-kommandot â€%s†är inte giltigt."
-#: ../cli/src/network-manager.c:37
+#: ../clients/cli/general.c:34
msgid "RUNNING"
msgstr "KÖR"
#. 0
-#: ../cli/src/network-manager.c:38
+#: ../clients/cli/general.c:35
msgid "VERSION"
msgstr "VERSION"
#. 2
-#: ../cli/src/network-manager.c:40
-msgid "NET-ENABLED"
-msgstr "NÄT-AKTIVERAT"
+#: ../clients/cli/general.c:37
+msgid "STARTUP"
+msgstr "UPPSTART"
#. 3
-#: ../cli/src/network-manager.c:41
-msgid "WIFI-HARDWARE"
-msgstr "WIFI-MASKINVARA"
+#: ../clients/cli/general.c:38
+msgid "CONNECTIVITY"
+msgstr "ANSLUTNING"
#. 4
-#: ../cli/src/network-manager.c:42
-msgid "WIFI"
-msgstr "WIFI"
+#: ../clients/cli/general.c:39
+msgid "NETWORKING"
+msgstr "NÄTVERK"
#. 5
-#: ../cli/src/network-manager.c:43
-msgid "WWAN-HARDWARE"
-msgstr "WWAN-MASKINVARA"
+#: ../clients/cli/general.c:40
+msgid "WIFI-HW"
+msgstr "WIFI-HW"
#. 6
-#: ../cli/src/network-manager.c:44
-msgid "WWAN"
-msgstr "WWAN"
+#: ../clients/cli/general.c:41
+msgid "WIFI"
+msgstr "WIFI"
#. 7
-#: ../cli/src/network-manager.c:45
-msgid "WIMAX-HARDWARE"
-msgstr "WIMAX-MASKINVARA"
+#: ../clients/cli/general.c:42
+msgid "WWAN-HW"
+msgstr "WWAN-HW"
#. 8
-#: ../cli/src/network-manager.c:46
+#: ../clients/cli/general.c:43
+msgid "WWAN"
+msgstr "WWAN"
+
+#. 9
+#: ../clients/cli/general.c:44
+msgid "WIMAX-HW"
+msgstr "WIMAX_HW"
+
+#. 10
+#: ../clients/cli/general.c:45
msgid "WIMAX"
msgstr "WIMAX"
-#: ../cli/src/network-manager.c:67
+#: ../clients/cli/general.c:67
+msgid "PERMISSION"
+msgstr "TILLSTÃ…ND"
+
+#. 0
+#: ../clients/cli/general.c:68
+msgid "VALUE"
+msgstr "VÄRDE"
+
+#: ../clients/cli/general.c:76
+msgid "LEVEL"
+msgstr "NIVÃ…"
+
+#. 0
+#: ../clients/cli/general.c:77
+msgid "DOMAINS"
+msgstr "DOMÄN"
+
+#: ../clients/cli/general.c:91
#, c-format
msgid ""
-"Usage: nmcli nm { COMMAND | help }\n"
+"Usage: nmcli general { COMMAND | help }\n"
+"\n"
+"COMMAND := { status | hostname | permissions | logging }\n"
+"\n"
+" status\n"
+"\n"
+" hostname [<hostname>]\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 ""
+"Användning: nmcli general { KOMMANDO | help }\n"
+"\n"
+"KOMMANDO := { status | hostname | 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"
+" hostname [<värdnamn>]\n"
+"\n"
+" permissions\n"
+"\n"
+" logging [level <loggnivå>] [domains <loggdomäner>]\n"
+"\n"
+
+#: ../clients/cli/general.c:102
+#, 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 ""
-"Användning: nmcli nm { KOMMANDO | help }\n"
+"Användning: nmcli general status { help }\n"
"\n"
-" KOMMANDO := { status | enable | sleep | wifi | wwan | wimax }\n"
+"Visar allmän status för Nätverkshanteraren.\n"
+"â€status†är standardÃ¥tgärden, vilket betyder â€nmcli gen†anropar â€nmcli gen "
+"statusâ€\n"
"\n"
-" KOMMANDO := { status | enable | sleep | wifi | wwan }\n"
+
+#: ../clients/cli/general.c:111
+#, c-format
+msgid ""
+"Usage: nmcli general hostname { ARGUMENTS | 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"
+"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 ""
+"Användning: nmcli general hostname { ARGUMENT | help }\n"
+"\n"
+"ARGUMENT := [<värdnamn>]\n"
+"\n"
+"Hämta eller ändra sparat systemvärdnamn.\n"
+"Om inga argument, skrivs aktuellt konfigurerat värdnamn ut. Om du anger\n"
+"ett värdnamn, kommer Nätverkshanteraren att sätta det som nya sparade "
+"systemvärdnamnet.\n"
+"\n"
+
+#: ../clients/cli/general.c:123
+#, c-format
+msgid ""
+"Usage: nmcli general permissions { help }\n"
+"\n"
+"Show caller permissions for authenticated operations.\n"
+"\n"
+msgstr ""
+"Användning: nmcli general permissions { help }\n"
+"\n"
+"Visar anropsrättigheter för autentiserade åtgärder.\n"
"\n"
-#: ../cli/src/network-manager.c:96
+#: ../clients/cli/general.c:131
+#, 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 ""
+"Användning: nmcli general logging { ARGUMENT| help }\n"
+"\n"
+"ARGUMENT := [level <loggnivå>] [domains <loggdomäner>]\n"
+"\n"
+"Hämta eller ändra Nätverkshanterarens loggnivå och domäner.\n"
+"Utan några arguement visas aktuell loggnivå och domäner. För att\n"
+"ändra loggtillstånd, skicka med nivå och/eller domän. Se manualsidan\n"
+"för en lista över möjliga loggdomäner.\n"
+"\n"
+
+#: ../clients/cli/general.c:144
+#, 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 ""
+"Användning: nmcli networking { KOMMANDO | help }\n"
+"\n"
+"KOMMANDO := { [ on | off | connectivity ] }\n"
+"\n"
+" on\n"
+"\n"
+" off\n"
+"\n"
+" connectivity [check]\n"
+"\n"
+
+#: ../clients/cli/general.c:154
+#, c-format
+msgid ""
+"Usage: nmcli networking on { help }\n"
+"\n"
+"Switch networking on.\n"
+"\n"
+msgstr ""
+"Användning: nmcli networking on { help }\n"
+"\n"
+"Slå på nätverk.\n"
+"\n"
+
+#: ../clients/cli/general.c:162
+#, c-format
+msgid ""
+"Usage: nmcli networking off { help }\n"
+"\n"
+"Switch networking off.\n"
+"\n"
+msgstr ""
+"Användning: nmcli networking off { help }\n"
+"\n"
+"Slå av nätverk.\n"
+"\n"
+
+#: ../clients/cli/general.c:170
+#, 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 ""
+"Användning: nmcli networking connectivity { ARGUMENT | help }\n"
+"\n"
+"ARGUMENT := [check]\n"
+"\n"
+"Hämta tillstånd för nätverksanslutning.\n"
+"Valfria argumentet â€check†gör att Nätverkshanteraren Ã¥terkontrollerar "
+"anslutning.\n"
+"\n"
+
+#: ../clients/cli/general.c:182
+#, 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 ""
+"Användning: nmcli radio { KOMMANDO | help }\n"
+"\n"
+"KOMMANDO := { all | wifi | wwan | wimax }\n"
+"\n"
+" all | wifi | wwan | wimax [ on | off ]\n"
+"\n"
+"KOMMANDO := { all | wifi | wwan }\n"
+"\n"
+" all | wifi | wwan [ on | off ]\n"
+"\n"
+
+#: ../clients/cli/general.c:196
+#, 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 ""
+"Användning: nmcli radio all { ARGUMENT | help }\n"
+"\n"
+"ARGUMENT := [on | off]\n"
+"\n"
+"Hämta statusen för alla radioväxlar eller slå på/av dem.\n"
+"\n"
+
+#: ../clients/cli/general.c:206
+#, 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 ""
+"Användning: nmcli radio wifi { ARGUMENT | help }\n"
+"\n"
+"ARGUMENT := [on | off]\n"
+"\n"
+"Hämta status för trådlösa radioväxeln eller slå på/av den.\n"
+"\n"
+
+#: ../clients/cli/general.c:216
+#, 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 ""
+"Användning: nmcli radio wwan { ARGUMENT | help }\n"
+"\n"
+"ARGUMENT := [on | off]\n"
+"\n"
+"Hämta status för mobila bredbandsradioväxeln eller slå på/av den.\n"
+"\n"
+
+#: ../clients/cli/general.c:227
+#, 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 ""
+"Användning: nmcli radio wimax { ARGUMENT | help }\n"
+"\n"
+"ARGUMENT := [on | off]\n"
+"\n"
+"Hämta status för WiMAX-radioväxeln, eller slå på/av den.\n"
+"\n"
+
+#: ../clients/cli/general.c:247
msgid "asleep"
msgstr "sover"
-#: ../cli/src/network-manager.c:98
+#: ../clients/cli/general.c:249
msgid "connecting"
msgstr "ansluter"
-#: ../cli/src/network-manager.c:100
+#: ../clients/cli/general.c:251
msgid "connected (local only)"
msgstr "ansluten (endast lokalt)"
-#: ../cli/src/network-manager.c:102
+#: ../clients/cli/general.c:253
msgid "connected (site only)"
msgstr "ansluten (endast plats)"
-#: ../cli/src/network-manager.c:106
+#: ../clients/cli/general.c:257
msgid "disconnecting"
msgstr "kopplar från"
-#: ../cli/src/network-manager.c:146
-#, c-format
-msgid "Error: 'nm status': %s"
-msgstr "Fel: \"nm status\": %s"
+#: ../clients/cli/general.c:273
+msgid "portal"
+msgstr "portal"
+
+#: ../clients/cli/general.c:275
+msgid "limited"
+msgstr "begränsad"
+
+#: ../clients/cli/general.c:277
+msgid "full"
+msgstr "full"
-#: ../cli/src/network-manager.c:148
+#: ../clients/cli/general.c:315
#, c-format
-msgid "Error: 'nm status': %s; allowed fields: %s"
-msgstr "Fel: \"nm status\": %s; tillåtna fält: %s"
+msgid "Error: only these fields are allowed: %s"
+msgstr "Fel: endast dessa fält är tillåtna: %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
+#: ../clients/cli/general.c:335 ../clients/cli/general.c:336
+#: ../clients/cli/general.c:337 ../clients/cli/general.c:338
+#: ../clients/cli/general.c:339 ../clients/cli/general.c:341
+#: ../clients/cli/general.c:342
msgid "enabled"
msgstr "aktiverad"
-#: ../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
+#: ../clients/cli/general.c:335 ../clients/cli/general.c:336
+#: ../clients/cli/general.c:337 ../clients/cli/general.c:338
+#: ../clients/cli/general.c:339 ../clients/cli/general.c:341
+#: ../clients/cli/general.c:342
msgid "disabled"
msgstr "inaktiverad"
-#: ../cli/src/network-manager.c:181
+#: ../clients/cli/general.c:345
msgid "NetworkManager status"
-msgstr "Status för Nätverkshanterare"
+msgstr "Status för Nätverkshanteraren"
-#. Print header
-#: ../cli/src/network-manager.c:184
+#: ../clients/cli/general.c:350
msgid "running"
msgstr "kör"
-#: ../cli/src/network-manager.c:184
-msgid "not running"
-msgstr "kör inte"
+#: ../clients/cli/general.c:353
+msgid "starting"
+msgstr "startar"
-#: ../cli/src/network-manager.c:215
-#: ../cli/src/utils.c:425
-#, c-format
-msgid "Error: Couldn't connect to system bus: %s"
-msgstr "Fel: kunde inte ansluta till systembussen: %s"
+#: ../clients/cli/general.c:353
+msgid "started"
+msgstr "startad"
-#: ../cli/src/network-manager.c:226
-#, c-format
-msgid "Error: Couldn't create D-Bus object proxy."
-msgstr "Fel: Kunde inte skapa proxy för D-Bus-objekt."
+#: ../clients/cli/general.c:424
+msgid "auth"
+msgstr "aute"
-#: ../cli/src/network-manager.c:232
+#: ../clients/cli/general.c:453
#, c-format
-msgid "Error in sleep: %s"
-msgstr "Fel i sömn: %s"
+msgid "Error: 'general permissions': %s"
+msgstr "Fel: â€general permissionsâ€: %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
+#: ../clients/cli/general.c:467
+msgid "NetworkManager permissions"
+msgstr "Rättigheter för Nätverkshanteraren"
+
+#: ../clients/cli/general.c:508
#, c-format
-msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
-msgstr "Fel: värdet \"%s\" för \"--fields\" är inte giltigt här; tillåtna fält: %s"
+msgid "Error: 'general logging': %s"
+msgstr "Fel: â€general loggingâ€: %s"
-#: ../cli/src/network-manager.c:284
-msgid "Networking enabled"
-msgstr "Nätverk aktiverat"
+#: ../clients/cli/general.c:523
+msgid "NetworkManager logging"
+msgstr "Loggning för Nätverkshanteraren"
-#: ../cli/src/network-manager.c:300
+#: ../clients/cli/general.c:545
#, c-format
-msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
-msgstr "Fel: ogiltig \"enable\"-parameter: \"%s\"; använd \"true\" eller \"false\"."
+msgid "Error: failed to set hostname: %s"
+msgstr "Fel: misslyckades med att sätta värdnamn: %s"
-#: ../cli/src/network-manager.c:310
+#: ../clients/cli/general.c:655
#, c-format
-msgid "Error: Sleeping status is not exported by NetworkManager."
-msgstr "Fel: Sömnstatus exporteras inte av Nätverkshanterare."
+msgid "Error: failed to set logging: %s"
+msgstr "Fel: misslyckades att sätta loggning: %s"
-#: ../cli/src/network-manager.c:318
+#: ../clients/cli/general.c:664
#, c-format
-msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
-msgstr "Fel: ogiltig \"sleep\"-parameter: \"%s\"; använd \"true\" eller \"false\"."
+msgid "Error: 'general' command '%s' is not valid."
+msgstr "Fel: â€generalâ€-kommandot â€%s†är inte giltigt."
-#: ../cli/src/network-manager.c:339
-msgid "WiFi enabled"
-msgstr "WiFi aktiverat"
+#: ../clients/cli/general.c:682
+#, c-format
+msgid "Error: '--fields' value '%s' is not valid here (allowed field: %s)"
+msgstr ""
+"Fel: värdet â€%s†för â€--fields†är inte giltigt här (tillÃ¥tna fält: %s)"
-#: ../cli/src/network-manager.c:355
+#: ../clients/cli/general.c:707
#, c-format
-msgid "Error: invalid 'wifi' parameter: '%s'."
-msgstr "Fel: ogiltig \"wifi\"-parameter: \"%s\"."
+msgid "Error: invalid '%s' argument: '%s' (use on/off)."
+msgstr "Fel: ogiltigt â€%sâ€-argument: â€%s†(använd pÃ¥/av)."
-#: ../cli/src/network-manager.c:377
-msgid "WWAN enabled"
-msgstr "WWAN aktiverat"
+#: ../clients/cli/general.c:718
+msgid "Connectivity"
+msgstr "Anslutning"
-#: ../cli/src/network-manager.c:393
-#, c-format
-msgid "Error: invalid 'wwan' parameter: '%s'."
-msgstr "Fel: ogiltig \"wwan\"-parameter: \"%s\"."
+#: ../clients/cli/general.c:730
+msgid "Networking"
+msgstr "Nätverk"
-#: ../cli/src/network-manager.c:416
-msgid "WiMAX enabled"
-msgstr "WiMAX aktiverat"
+#: ../clients/cli/general.c:755
+#, c-format
+msgid "Error: 'networking connectivity' command '%s' is not valid."
+msgstr "Fel: â€networking connectivityâ€-kommandot â€%s†är inte giltigt."
-#: ../cli/src/network-manager.c:432
+#: ../clients/cli/general.c:771
#, c-format
-msgid "Error: invalid 'wimax' parameter: '%s'."
-msgstr "Fel: ogiltig \"wimax\"-parameter: \"%s\"."
+msgid "Error: 'networking' command '%s' is not valid."
+msgstr "Fel: â€networkingâ€-kommandot â€%s†är inte giltigt."
+
+#: ../clients/cli/general.c:797 ../clients/cli/general.c:817
+msgid "Radio switches"
+msgstr "Radioväxlar"
+
+#. no argument, show current WiFi state
+#: ../clients/cli/general.c:835
+msgid "Wi-Fi radio switch"
+msgstr "Trådlös radioväxel"
-#: ../cli/src/network-manager.c:445
+#. no argument, show current WWAN (mobile broadband) state
+#: ../clients/cli/general.c:851
+msgid "WWAN radio switch"
+msgstr "WWAN radioväxel"
+
+#. no argument, show current WiMAX state
+#: ../clients/cli/general.c:868
+msgid "WiMAX radio switch"
+msgstr "WiMAX radioväxel"
+
+#: ../clients/cli/general.c:880
#, c-format
-msgid "Error: 'nm' command '%s' is not valid."
-msgstr "Fel: \"nm\"-kommandot \"%s\" är inte giltigt."
+msgid "Error: 'radio' command '%s' is not valid."
+msgstr "Fel: â€radioâ€-kommandot â€%s†är inte giltigt."
-#: ../cli/src/nmcli.c:64
+#: ../clients/cli/nmcli.c:81
#, c-format
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
@@ -1660,810 +4286,3185 @@ 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 ""
"Användning: %s [FLAGGOR] OBJEKT { KOMMANDO | help }\n"
"\n"
"FLAGGOR\n"
-" -t[erse] kort utdata\n"
-" -p[retty] vackert utdata\n"
+" -t[erse] sparsam utdata\n"
+" -p[retty] vacker utdata\n"
" -m[ode] tabular|multiline utdataläge\n"
-" -f[ields] <field1,field2,...>|all|common ange fält för utdata\n"
-" -e[scape] yes|no escape för kolumnavgränsare i värden\n"
-" -n[ocheck] kontrollera inte version av nmcli och Nätverkshanterare\n"
-" -v[ersion] visa programversion\n"
+" -f[ields] <field1,field2,…>|all|common ange fält för utdata\n"
+" -e[scape] yes|no escape columns separators in "
+"values\n"
+" -n[ocheck] kontrollera inte nmcli och "
+"Nätverkshanterarens versioner\n"
+" -a[sk] fråga efter saknade parametrar\n"
+" -w[ait] <seconds> sätt en tidsgräns för åtgärder\n"
+" -v[ersion] visa programversionen\n"
" -h[elp] skriv ut denna hjälp\n"
"\n"
"OBJEKT\n"
-" nm status för Nätverkshanterare\n"
-" con anslutningar i Nätverkshanterare\n"
-" dev enheter hanterade av Nätverkshanterare\n"
+" g[eneral] Nätverkshanterarens allmänna status och åtgärder\n"
+" n[etworking] generell nätverkskontroll\n"
+" r[adio] Nätverkshanterarens radioväxlar\n"
+" c[onnection] Nätverkshanterarens anslutningar\n"
+" d[evice] enheter som hanteras av Nätverkshanteraren\n"
"\n"
-#: ../cli/src/nmcli.c:109
+#: ../clients/cli/nmcli.c:135
#, c-format
msgid "Error: Object '%s' is unknown, try 'nmcli help'."
-msgstr "Fel: Objektet \"%s\" är okänt, prova \"nmcli help\"."
+msgstr "Fel: Objektet â€%s†är okänt, prova â€nmcli helpâ€."
-#: ../cli/src/nmcli.c:139
+#: ../clients/cli/nmcli.c:165
#, c-format
msgid "Error: Option '--terse' is specified the second time."
-msgstr "Fel: Flaggan \"--terse\" har angivits en andra gång."
+msgstr "Fel: Flaggan â€--terse†har angivits en andra gÃ¥ng."
-#: ../cli/src/nmcli.c:144
+#: ../clients/cli/nmcli.c:170
#, c-format
msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
-msgstr "Fel: Flaggan \"--terse\" är ömsesidigt uteslutande med \"--pretty\"."
+msgstr "Fel: Flaggan â€--terse†är ömsesidigt uteslutande med â€--prettyâ€."
-#: ../cli/src/nmcli.c:152
+#: ../clients/cli/nmcli.c:178
#, c-format
msgid "Error: Option '--pretty' is specified the second time."
-msgstr "Fel: Flaggan \"--pretty\" har angivits en andra gång."
+msgstr "Fel: Flaggan â€--pretty†har angivits en andra gÃ¥ng."
-#: ../cli/src/nmcli.c:157
+#: ../clients/cli/nmcli.c:183
#, c-format
msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
-msgstr "Fel: Flaggan \"--pretty\" är ömsesidigt uteslutande med \"--terse\"."
+msgstr "Fel: Flaggan â€--pretty†är ömsesidigt uteslutande med â€--terseâ€."
-#: ../cli/src/nmcli.c:167
-#: ../cli/src/nmcli.c:183
+#: ../clients/cli/nmcli.c:193 ../clients/cli/nmcli.c:209
+#: ../clients/cli/nmcli.c:238
#, c-format
msgid "Error: missing argument for '%s' option."
-msgstr "Fel: argument för flaggan \"%s\" saknas."
+msgstr "Fel: argument för flaggan â€%s†saknas."
-#: ../cli/src/nmcli.c:176
-#: ../cli/src/nmcli.c:192
+#: ../clients/cli/nmcli.c:202 ../clients/cli/nmcli.c:218
#, c-format
msgid "Error: '%s' is not valid argument for '%s' option."
-msgstr "Fel: \"%s\" är inte ett giltigt argument för flaggan \"%s\"."
+msgstr "Fel: â€%s†är inte ett giltigt argument för flaggan â€%sâ€."
-#: ../cli/src/nmcli.c:199
+#: ../clients/cli/nmcli.c:225
#, c-format
msgid "Error: fields for '%s' options are missing."
-msgstr "Fel: fält för \"%s\"-flaggor saknas."
+msgstr "Fel: fält för â€%sâ€-flaggor saknas."
+
+#: ../clients/cli/nmcli.c:243
+#, c-format
+msgid "Error: '%s' is not a valid timeout for '%s' option."
+msgstr "Fel: â€%s†är inte en giltig tidsgräns för flaggan â€%sâ€."
-#: ../cli/src/nmcli.c:207
+#: ../clients/cli/nmcli.c:250
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "nmcli-verktyg, version %s\n"
-#: ../cli/src/nmcli.c:213
+#: ../clients/cli/nmcli.c:256
#, c-format
msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
-msgstr "Fel: Flaggan \"%s\" är okänd, prova \"nmcli -help\"."
+msgstr "Fel: Flaggan â€%s†är okänd, prova â€nmcli -helpâ€."
-#: ../cli/src/nmcli.c:232
+#: ../clients/cli/nmcli.c:336 ../clients/cli/nmcli.c:345
#, c-format
-msgid "Caught signal %d, shutting down..."
-msgstr "Fångade signal %d, stänger av..."
+msgid ""
+"\n"
+"Error: nmcli terminated by signal %s (%d)\n"
+msgstr ""
+"\n"
+"Fel: nmcli dödad av signalen %s (%d)\n"
-#: ../cli/src/nmcli.c:257
-msgid "Error: Could not create NMClient object."
-msgstr "Fel: Kunde inte skapa NMClient-objekt."
+#: ../clients/cli/nmcli.c:376
+#, c-format
+msgid "Failed to set signal mask: %d\n"
+msgstr "Misslyckades med att sätta signalmasken: %d\n"
+
+#: ../clients/cli/nmcli.c:383
+#, c-format
+msgid "Failed to create signal handling thread: %d\n"
+msgstr "Misslyckades med att skapa signalhanteringstråd: %d\n"
+
+#: ../clients/cli/nmcli.c:480 ../clients/nm-online.c:197
+#, c-format
+msgid "Error: Could not create NMClient object: %s."
+msgstr "Fel: Kunde inte skapa NMClient-objektet: %s."
-#: ../cli/src/nmcli.c:273
+#: ../clients/cli/nmcli.c:497
msgid "Success"
msgstr "Lyckades"
-#: ../cli/src/settings.c:497
+#: ../clients/cli/settings.c:657
#, c-format
-msgid "%d (hex-ascii-key)"
-msgstr "%d (hex-ascii-nyckel)"
+msgid "%d (key)"
+msgstr "%d (nyckel)"
-#: ../cli/src/settings.c:499
+#: ../clients/cli/settings.c:659
#, c-format
-msgid "%d (104/128-bit passphrase)"
-msgstr "%d (104/128-bitars lösenfras)"
+msgid "%d (passphrase)"
+msgstr "%d (lösenfras)"
-#: ../cli/src/settings.c:502
+#: ../clients/cli/settings.c:662 ../clients/cli/settings.c:743
#, c-format
msgid "%d (unknown)"
msgstr "%d (okänt)"
-#: ../cli/src/settings.c:528
-msgid "0 (unknown)"
-msgstr "0 (okänt)"
+#: ../clients/cli/settings.c:691
+msgid "0 (NONE)"
+msgstr "0 (INGEN)"
-#: ../cli/src/settings.c:534
-msgid "any, "
-msgstr "valfri, "
+#: ../clients/cli/settings.c:697
+msgid "REORDER_HEADERS, "
+msgstr "REORDER_HEADERS, "
-#: ../cli/src/settings.c:536
-msgid "900 MHz, "
-msgstr "900 MHz, "
+#: ../clients/cli/settings.c:699
+msgid "GVRP, "
+msgstr "GVRP, "
-#: ../cli/src/settings.c:538
-msgid "1800 MHz, "
-msgstr "1800 MHz, "
+#: ../clients/cli/settings.c:701
+msgid "LOOSE_BINDING, "
+msgstr "LOOSE_BINDING, "
-#: ../cli/src/settings.c:540
-msgid "1900 MHz, "
-msgstr "1900 MHz, "
+#: ../clients/cli/settings.c:737
+#, c-format
+msgid "%d (disabled)"
+msgstr "(%d) (inaktiverad)"
-#: ../cli/src/settings.c:542
-msgid "850 MHz, "
-msgstr "850 MHz, "
+#: ../clients/cli/settings.c:739
+#, c-format
+msgid "%d (enabled, prefer public IP)"
+msgstr "%d (aktiverad, föredra publik IP)"
-#: ../cli/src/settings.c:544
-msgid "WCDMA 3GPP UMTS 2100 MHz, "
-msgstr "WCDMA 3GPP UMTS 2100 MHz, "
+#: ../clients/cli/settings.c:741
+#, c-format
+msgid "%d (enabled, prefer temporary IP)"
+msgstr "%d (aktiverad, föredra temporärt IP)"
-#: ../cli/src/settings.c:546
-msgid "WCDMA 3GPP UMTS 1800 MHz, "
-msgstr "WCDMA 3GPP UMTS 1800 MHz, "
+#: ../clients/cli/settings.c:753
+msgid "0 (none)"
+msgstr "0 (ingen)"
-#: ../cli/src/settings.c:548
-msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
-msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
+#: ../clients/cli/settings.c:759
+msgid "agent-owned, "
+msgstr "agent-owned, "
-#: ../cli/src/settings.c:550
-msgid "WCDMA 3GPP UMTS 800 MHz, "
-msgstr "WCDMA 3GPP UMTS 800 MHz, "
+#: ../clients/cli/settings.c:761
+msgid "not saved, "
+msgstr "inte sparad, "
-#: ../cli/src/settings.c:552
-msgid "WCDMA 3GPP UMTS 850 MHz, "
-msgstr "WCDMA 3GPP UMTS 850 MHz, "
+#: ../clients/cli/settings.c:763
+msgid "not required, "
+msgstr "krävs ej, "
-#: ../cli/src/settings.c:554
-msgid "WCDMA 3GPP UMTS 900 MHz, "
-msgstr "WCDMA 3GPP UMTS 900 MHz, "
+#: ../clients/cli/settings.c:1046
+msgid "0 (disabled)"
+msgstr "0 (inaktiverad)"
-#: ../cli/src/settings.c:556
-msgid "WCDMA 3GPP UMTS 1700 MHz, "
-msgstr "WCDMA 3GPP UMTS 1700 MHz, "
+#: ../clients/cli/settings.c:1052
+msgid "enabled, "
+msgstr "aktiverad, "
-#: ../cli/src/settings.c:558
-msgid "WCDMA 3GPP UMTS 1900 MHz, "
-msgstr "WCDMA 3GPP UMTS 1900 MHz, "
+#: ../clients/cli/settings.c:1054
+msgid "advertise, "
+msgstr "ropa ut, "
-#: ../cli/src/settings.c:560
-msgid "WCDMA 3GPP UMTS 2600 MHz, "
-msgstr "WCDMA 3GPP UMTS 2600 MHz, "
+#: ../clients/cli/settings.c:1056
+msgid "willing, "
+msgstr "villig, "
-#: ../cli/src/settings.c:578
-msgid "0 (NONE)"
-msgstr "0 (INGEN)"
+#: ../clients/cli/settings.c:1084
+msgid "-1 (unset)"
+msgstr "-1 (välj ej)"
-#: ../cli/src/settings.c:584
-msgid "REORDER_HEADERS, "
-msgstr "REORDER_HEADERS, "
+#: ../clients/cli/settings.c:1181 ../clients/cli/settings.c:1512
+#: ../clients/cli/settings.c:1554
+msgid "auto"
+msgstr "auto"
-#: ../cli/src/settings.c:586
-msgid "GVRP, "
-msgstr "GVRP, "
+#: ../clients/cli/settings.c:1194
+msgid "default"
+msgstr "standard"
-#: ../cli/src/settings.c:588
-msgid "LOOSE_BINDING, "
-msgstr "LOOSE_BINDING, "
+#: ../clients/cli/settings.c:1682
+#, c-format
+msgid "Do you also want to set '%s' to '%s'? [yes]: "
+msgstr "Vill du ocksÃ¥ sätta â€%s†till â€%sâ€? [yes]: "
-#: ../cli/src/settings.c:730
-#: ../cli/src/settings.c:926
-#: ../cli/src/settings.c:1630
-msgid "auto"
-msgstr "auto"
+#: ../clients/cli/settings.c:1684
+#, c-format
+msgid "Do you also want to clear '%s'? [yes]: "
+msgstr "Vill du ocksÃ¥ rensa â€%sâ€? [yes]: "
+
+#: ../clients/cli/settings.c:1845
+#, c-format
+msgid ""
+"Warning: %s.%s set to '%s', but it might be ignored in infrastructure mode\n"
+msgstr ""
+"Varning: %s.%s sätts till â€%sâ€, men kan ignoreras i infrastrukturläge\n"
+
+#: ../clients/cli/settings.c:1927 ../clients/cli/settings.c:2207
+#: ../clients/cli/settings.c:4307
+#, c-format
+msgid "'%s' is not valid"
+msgstr "â€%s†är inte giltigt."
+
+#: ../clients/cli/settings.c:1950
+#, c-format
+msgid "'%d' is not valid; use <%d-%d>"
+msgstr "â€%d†är inte giltigt; använd <%d-%d>"
+
+#: ../clients/cli/settings.c:1972
+#, c-format
+msgid "'%u' is not valid; use <%d-%d>"
+msgstr "â€%u†är inte giltigt; använd <%d-%d>"
+
+#: ../clients/cli/settings.c:2038
+#, c-format
+msgid "'%s' is not valid; use <option>=<value>"
+msgstr "â€%s†är inte giltigt; använd <flagga>=<värde>"
+
+#: ../clients/cli/settings.c:2072
+#, c-format
+msgid "index '%s' is not valid"
+msgstr "indexet â€%s†är inte giltigt"
+
+#: ../clients/cli/settings.c:2077 ../clients/cli/settings.c:2102
+msgid "no item to remove"
+msgstr "inget objekt att ta bort"
+
+#: ../clients/cli/settings.c:2081 ../clients/cli/settings.c:2106
+#, c-format
+msgid "index '%d' is not in range <0-%d>"
+msgstr "index â€%d†är inte i intervallet <0-%d>"
+
+#: ../clients/cli/settings.c:2121
+#, c-format
+msgid "invalid option '%s'"
+msgstr "ogiltig flagga â€%sâ€"
+
+#: ../clients/cli/settings.c:2123
+msgid "missing option"
+msgstr "saknat alternativ"
+
+#: ../clients/cli/settings.c:2153 ../clients/cli/settings.c:2173
+#, c-format
+msgid "'%s' is not a valid number (or out of range)"
+msgstr "â€%s†är inte ett giltigt nummer (eller utanför intervallet)"
+
+#: ../clients/cli/settings.c:2223
+#, c-format
+msgid "'%s' is not a valid Ethernet MAC"
+msgstr "â€%s†är inte en giltig Ethernet MAC"
+
+#: ../clients/cli/settings.c:2248 ../libnm-core/nm-setting-connection.c:796
+#: ../libnm-core/nm-setting-infiniband.c:254
+#: ../libnm-util/nm-setting-connection.c:833
+#: ../libnm-util/nm-setting-infiniband.c:268
+#, c-format
+msgid "'%s' is not a valid interface name"
+msgstr "'â€%s†är inte ett giltigt gränssnittsnamn"
+
+#: ../clients/cli/settings.c:2272
+#, c-format
+msgid "'%s' is not a valid flag number; use <0-%d>"
+msgstr "â€%s†är inte ett giltigt flaggnummer; använd <0-%d>"
+
+#: ../clients/cli/settings.c:2284
+#, c-format
+msgid "Warning: '%s' sum is higher than all flags => all flags set\n"
+msgstr "Varning: â€%sâ€-summan är högre än alla flaggor => alla flaggor satta\n"
+
+#: ../clients/cli/settings.c:2327
+#, c-format
+msgid "'%s' is not a valid hex character"
+msgstr "â€%s†är inte ett giltigt hextecken"
+
+#: ../clients/cli/settings.c:2357
+#, c-format
+msgid "'%s' is not a valid MAC"
+msgstr "â€%s†är inte ett giltigt MAC"
+
+#: ../clients/cli/settings.c:2394 ../libnm-core/nm-setting-connection.c:785
+#: ../libnm-util/nm-setting-connection.c:790
+#, c-format
+msgid "'%s' is not a valid UUID"
+msgstr "â€%s†är inte ett giltigt UUID"
+
+#: ../clients/cli/settings.c:2461
+#, c-format
+msgid "the property doesn't contain permission '%s'"
+msgstr "egenskapen innehÃ¥ller inte rättigheten â€%sâ€"
+
+#: ../clients/cli/settings.c:2473
+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 ""
+"Mata in en lista av användarrättigheter. Det är en lista av användarnamn "
+"formaterade som:\n"
+" [user:]<användarnamn 1>, [user:]<användarnamn 2>,…\n"
+"Objekten kan separeras med komman eller blanksteg.\n"
+"\n"
+"Exempel: Anders Sebastian Göran\n"
+
+#: ../clients/cli/settings.c:2492
+#, c-format
+msgid "'%s' is not valid master; use ifname or connection UUID"
+msgstr "â€%s†är inte en giltig master; använd ifnamn eller anslutnings-UUID"
+
+#: ../clients/cli/settings.c:2536
+#, c-format
+msgid "Warning: %s is not an UUID of any existing connection profile\n"
+msgstr "Varning: %s är inte ett UUID på någon befintlig anslutningsprofil\n"
+
+#: ../clients/cli/settings.c:2540 ../clients/cli/settings.c:2556
+#, c-format
+msgid "'%s' is not a VPN connection profile"
+msgstr "â€%s†är inte en giltig VPN-anslutningsprofil"
+
+#: ../clients/cli/settings.c:2549
+#, c-format
+msgid "'%s' is not a name of any exiting profile"
+msgstr "â€%s†är inte ett namn pÃ¥ nÃ¥gon befintlig profil"
+
+#: ../clients/cli/settings.c:2583
+#, c-format
+msgid "the value '%s' is not a valid UUID"
+msgstr "värdet â€%s†är inte ett giltigt UUID"
+
+#: ../clients/cli/settings.c:2590
+#, c-format
+msgid "the property doesn't contain UUID '%s'"
+msgstr "egenskapen innehÃ¥ller inte UUID â€%sâ€"
+
+#: ../clients/cli/settings.c:2602
+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 ""
+"Mata in sekundära anslutningar som ska aktiveras när denna anslutning\n"
+"aktiveras. Anslutningar kan anges antingen med UUID eller ID (namn). nmcli\n"
+"översätter transparent namn till UUIDn. Observera att Nätverkshanteraren "
+"bara stöder\n"
+"VPN som sekundära anslutningar för tillfället.\n"
+"Objekten kan separeras med komman eller blanksteg.\n"
+"\n"
+"Exempel: private-openvpn, fe6ba5d8-c2fc-4aae-b2e3-97efddd8d9a7\n"
+
+#: ../clients/cli/settings.c:2679
+msgid "private key password not provided"
+msgstr "lösenord för privat nyckel inte angivet"
+
+#: ../clients/cli/settings.c:2706
+#, c-format
+msgid "the property doesn't contain EAP method '%s'"
+msgstr "egenskapen innehÃ¥ller inte EAP-metoden â€%sâ€"
+
+#: ../clients/cli/settings.c:2731
+#, c-format
+msgid "the property doesn't contain alternative subject match '%s'"
+msgstr "egenskapen innehÃ¥ller inte alternativa ämnesmatchningen â€%sâ€"
+
+#: ../clients/cli/settings.c:2760
+#, c-format
+msgid "the property doesn't contain \"phase2\" alternative subject match '%s'"
+msgstr "egenskapen innehÃ¥ller inte â€phase2â€-alternativa ämnesmatchningen â€%sâ€"
+
+#: ../clients/cli/settings.c:2786
+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 ""
+"Mata in sökväg till en privat nyckel och nyckellösenordet (om inte angivet "
+"än):\n"
+" <filsökväg> [<lösenord>]\n"
+"Exempel: /home/cimrman/jara-priv-key Dardanely\n"
+
+#: ../clients/cli/settings.c:2856
+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 ""
+"Ange byte som en lista av hexadecimala värden.\n"
+"Två format accepteras:\n"
+"(a) en sträng av hexadecimala siffror där varje siffra representerar en "
+"byte\n"
+"(b) blankstegseparerad lista över byte skriven som hexadecimala siffror (med "
+"valfri 0x/0X prefix, och valfri inledande 0).\n"
+"\n"
+"Exempel: ab0455a6ea3a74C2\n"
+" ab 4 55 0xa6 ea 3a 74 C2\n"
+
+#: ../clients/cli/settings.c:2959
+#, 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 ""
+"Ange en lista över kombineringsmöjligheter formaterade som:\n"
+" option = <värde>, option = <värde>,… \n"
+"Giltiga flaggor är: %s\n"
+"â€mode†kan ges som namn eller nummer:\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"
+"Exempel: mode=2,miimon=120\n"
+
+#: ../clients/cli/settings.c:2997
+#, c-format
+msgid "'%s' is not a valid InfiniBand MAC"
+msgstr "â€%s†är inte en giltig InfiniBand MAC"
+
+#: ../clients/cli/settings.c:3034
+#, c-format
+msgid "'%s' is not a valid IBoIP P_Key"
+msgstr "â€%s†är inte en giltig IBoIP P_Key"
+
+#: ../clients/cli/settings.c:3103 ../clients/cli/settings.c:3449
+#, c-format
+msgid "the property doesn't contain DNS server '%s'"
+msgstr "egenskapen innehÃ¥ller inte DNS-servern â€%sâ€"
+
+#: ../clients/cli/settings.c:3115
+msgid ""
+"Enter a list of IPv4 addresses of DNS servers.\n"
+"\n"
+"Example: 8.8.8.8, 8.8.4.4\n"
+msgstr ""
+"Ange en lista av IPv4-adresser för DNS-servrar.\n"
+"\n"
+"Exempel: 8.8.8.8, 8.8.4.4\n"
+
+#: ../clients/cli/settings.c:3151 ../clients/cli/settings.c:3503
+#, c-format
+msgid "the property doesn't contain DNS search domain '%s'"
+msgstr "egenskapen innehÃ¥ller inte DNS-sökdomänen â€%sâ€"
+
+#: ../clients/cli/settings.c:3171 ../clients/cli/settings.c:3523
+#, c-format
+msgid "'%s' is not valid (use ip[/prefix] [gateway])"
+msgstr "â€%s†är inte giltig (använd ip[/prefix] [gateway])"
+
+#: ../clients/cli/settings.c:3220 ../clients/cli/settings.c:3571
+#, c-format
+msgid "the property doesn't contain IP address '%s'"
+msgstr "egenskapen innehÃ¥ller inte IP-adressen â€%sâ€"
+
+#: ../clients/cli/settings.c:3233
+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 ""
+"Ange en lista av IPv4-adresser formaterade som:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"Saknade prefix räknas som prefix av 32.\n"
+"\n"
+"Exempel: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
+
+#: ../clients/cli/settings.c:3286 ../clients/cli/settings.c:3602
+#, c-format
+msgid "'%s' is not valid (the format is: ip[/prefix] [next-hop] [metric])"
+msgstr "â€%s†är inte giltigt (formatet är: ip[/prefix] [next-hop] [metric])"
+
+#: ../clients/cli/settings.c:3334 ../clients/cli/settings.c:3650
+#, c-format
+msgid "the property doesn't contain route '%s'"
+msgstr "egenskapen innehÃ¥ller inte rutten â€%sâ€"
+
+#: ../clients/cli/settings.c:3347
+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 ""
+"Ange en lista av IPv4-rutter formaterade som:\n"
+" ip[/prefix] [next-hop] [metric],…\n"
+"\n"
+"Saknat prefix ses som ett prefix på 32.\n"
+"Saknat nästa-hopp ses som 0.0.0.0.\n"
+"Saknat mätvärde eller 0 ses som standard metric (NM/kärnan kommer att sätta "
+"ett standardvärde).\n"
+"\n"
+"Exempel: 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"
+
+#: ../clients/cli/settings.c:3461
+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 ""
+"Ange en lista av IPv6-adresser för DNS-servrar. Om konfigurationsmetoden för "
+"IPv6 är â€auto†läggs dessa DNS-servrar till de (om nÃ¥gra) som returneras "
+"genom automatisk konfiguration. DNS-servrar kan inte användas med IPv6-"
+"konfigurationsmetoderna för â€shared†eller â€link-local†eftersom det inte "
+"finns något uppströms nätverk. I alla andra IPv6-konfigurationsmetoder "
+"används dessa DNS-servrar som de enda DNS-servrarna för denna anslutning.\n"
+"\n"
+"Exempel: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
+
+#: ../clients/cli/settings.c:3584
+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 ""
+"Ange en lista med IPv6-adresser formaterade som:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],…\n"
+"Saknat prefix ses som ett prefix på 128.\n"
+"\n"
+"Exempel: 2607:f0d0:1002:51::4/64 2607:f0d0:1002:51::1, "
+"1050:0:0:0:5:600:300c:326b\n"
+
+#: ../clients/cli/settings.c:3663
+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 ""
+"Ange en lista över IPv6-rutter formaterade som:\n"
+" ip[/prefix] [next-hop] [metric],…\n"
+"\n"
+"Saknat prefix tolkas som ett prefix på 128.\n"
+"Saknat nästa-hopp ses som â€::â€.\n"
+"Saknad mätvärde eller 0 ses standard metric (NM/kärnan sätter ett "
+"standardvärde).\n"
+"\n"
+"Exempel: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
+"db8:beef::3 2\n"
+" abbe::/64 55\n"
+
+#: ../clients/cli/settings.c:3680 ../libnm-core/nm-setting-gsm.c:315
+#: ../libnm-util/nm-setting-gsm.c:372
+#, c-format
+msgid "'%s' is not a number"
+msgstr "â€%s†är inte ett nummer"
+
+#: ../clients/cli/settings.c:3687
+#, c-format
+msgid "'%s' is not valid; use 0, 1, or 2"
+msgstr "â€%s†är inte giltig; använd 0, 1 eller 2"
+
+#: ../clients/cli/settings.c:3704
+#, c-format
+msgid "'%s' is not a valid channel; use <1-13>"
+msgstr "â€%s†är inte en giltig kanal; använd <1-13>"
+
+#: ../clients/cli/settings.c:3741
+#, c-format
+msgid "'%s' is not valid; use [e, o, n]"
+msgstr "â€%s†är inte giltig; använd [e, o, n]"
+
+#: ../clients/cli/settings.c:3769
+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 kan acceptera både direkt JSON-konfigurationsdata och ett filnamn "
+"innehållandes konfigurationen. I det senare fallet läses filen in och "
+"innehållet läggs i denna egenskap.\n"
+"\n"
+"Exempel: set team.config { â€deviceâ€: â€team0â€, â€runnerâ€: {â€nameâ€: "
+"â€roundrobinâ€}, â€portsâ€: {â€eth1â€: {}, â€eth2â€: {}} }\n"
+" set team.config /etc/my-team.conf\n"
+
+#: ../clients/cli/settings.c:3809
+msgid "no priority to remove"
+msgstr "ingen prioritet att ta bort"
+
+#: ../clients/cli/settings.c:3813
+#, c-format
+msgid "index '%d' is not in the range of <0-%d>"
+msgstr "index â€%d†är inte i intervallet för <0-%d>"
+
+#: ../clients/cli/settings.c:3852
+#, c-format
+msgid ""
+"Warning: only one mapping at a time is supported; taking the first one (%s)\n"
+msgstr "Varning: endast en mappning åt gången stöds; tar den första (%s)\n"
+
+#: ../clients/cli/settings.c:3859
+#, c-format
+msgid "the property doesn't contain mapping '%s'"
+msgstr "egenskapen stöder inte mappningen â€%sâ€"
+
+#: ../clients/cli/settings.c:3968 ../clients/cli/settings.c:4136
+#: ../libnm-core/nm-setting-wired.c:604
+#: ../libnm-core/nm-setting-wireless.c:781
+#: ../libnm-core/nm-setting-wireless.c:793
+#: ../libnm-util/nm-setting-wired.c:648
+#: ../libnm-util/nm-setting-wireless.c:840
+#: ../libnm-util/nm-setting-wireless.c:854
+#, c-format
+msgid "'%s' is not a valid MAC address"
+msgstr "â€%s†är inte en giltig MAC-adress"
+
+#: ../clients/cli/settings.c:3974 ../clients/cli/settings.c:4142
+#, c-format
+msgid "the property doesn't contain MAC address '%s'"
+msgstr "egenskapen innehÃ¥ller inte MAC-adress â€%sâ€"
+
+#: ../clients/cli/settings.c:3993
+#, c-format
+msgid "'%s' is not valid; 3 strings should be provided"
+msgstr "â€%s†är ogiltig; Tre strängar ska ges"
+
+#: ../clients/cli/settings.c:4012
+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 ""
+"Ange en lista på tre kanaler (komma eller blankstegsseparerad).\n"
+"\n"
+"Exempel: 0.0.0e20 0.0.0e21 0.0.0e22\n"
+
+#: ../clients/cli/settings.c:4062
+#, c-format
+msgid ""
+"Enter a list of S/390 options formatted as:\n"
+" option = <value>, option = <value>,...\n"
+"Valid options are: %s\n"
+msgstr ""
+"Ange en lista över S/390-flaggor formaterade som:\n"
+" option = <värde>, option = <värde>,…\n"
+"Giltiga val är: %s\n"
+
+#: ../clients/cli/settings.c:4108
+#, c-format
+msgid "'%s' is not a valid channel"
+msgstr "â€%s†är inte en giltig kanal."
+
+#: ../clients/cli/settings.c:4114
+#, c-format
+msgid "'%ld' is not a valid channel"
+msgstr "â€%ld†är en ogiltig kanal"
+
+#: ../clients/cli/settings.c:4201 ../clients/cli/settings.c:4239
+#: ../clients/cli/settings.c:4277
+#, c-format
+msgid "the property doesn't contain protocol '%s'"
+msgstr "egenskapen innehÃ¥ller inte protokollet â€%sâ€"
+
+#: ../clients/cli/settings.c:4316
+#, c-format
+msgid ""
+"'%s' not compatible with %s '%s', please change the key or set the right %s "
+"first."
+msgstr ""
+"â€%s†är inte kompatibel med %s â€%sâ€, ändra nyckeln eller sätt rätt %s först."
+
+#: ../clients/cli/settings.c:4324
+#, c-format
+msgid "WEP key is guessed to be of '%s'\n"
+msgstr "WEP-nyckel antas vara â€%sâ€\n"
+
+#: ../clients/cli/settings.c:4326
+#, c-format
+msgid "WEP key index set to '%d'\n"
+msgstr "index för WEP-nyckel satt till â€%dâ€\n"
+
+#: ../clients/cli/settings.c:4349
+#, c-format
+msgid "'%s' not among [0 (unknown), 1 (key), 2 (passphrase)]"
+msgstr "â€%s†inte bland [0 (okänd), 1 (nyckel), 2 (lösenfras)]"
+
+#: ../clients/cli/settings.c:4365 ../clients/cli/settings.c:4368
+#: ../clients/cli/settings.c:4371 ../clients/cli/settings.c:4374
+#, c-format
+msgid ""
+"Warning: '%s' is not compatible with '%s' type, please change or delete the "
+"key.\n"
+msgstr ""
+"Varning:â€%s†är inte kompatibel med â€%sâ€-typ, ändra eller ta bort nyckeln.\n"
+
+#: ../clients/cli/settings.c:4387
+#, 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 ""
+"Ange typ på WEP-nycklarna. Accepterade värden är: 0 eller okänd, 1 eller "
+"nyckel, 2 eller lösenfras.\n"
+
+#: ../clients/cli/settings.c:4400
+#, c-format
+msgid "'%s' is not a valid PSK"
+msgstr "â€%s†inte en giltig PSK"
+
+#: ../clients/cli/settings.c:4444
+#, c-format
+msgid "'%s' is not a valid DCB flag"
+msgstr "â€%s†är inte en giltig DCB-flagga"
+
+#: ../clients/cli/settings.c:4467
+#, c-format
+msgid "'%s' is not a DCB app priority"
+msgstr "â€%s†är inte en giltig DCB-programprioritet"
+
+#: ../clients/cli/settings.c:4493
+msgid "must contain 8 comma-separated numbers"
+msgstr "måste innehålla 8 kommaseparerade siffror"
+
+#: ../clients/cli/settings.c:4510
+#, c-format
+msgid "'%s' not a number between 0 and %u (inclusive) or %u"
+msgstr "â€%s†inte en siffra mellan 0 och %u (inklusive) eller %u"
+
+#: ../clients/cli/settings.c:4513
+#, c-format
+msgid "'%s' not a number between 0 and %u (inclusive)"
+msgstr "â€%s†inte en siffra mellan 0 och %u (inklusive)"
+
+#: ../clients/cli/settings.c:4535
+#, c-format
+msgid ""
+"Warning: changes will have no effect until '%s' includes 1 (enabled)\n"
+"\n"
+msgstr ""
+"Varning: ändringar kommer inte att slÃ¥ igenom förrän â€%s†inkluderar 1 "
+"(aktiverad)\n"
+"\n"
+
+#: ../clients/cli/settings.c:4588
+#, c-format
+msgid "bandwidth percentages must total 100%%"
+msgstr "summan för bandbreddsprocenten måste vara 100%%"
+
+#: ../clients/cli/settings.c:6238
+msgid "don't know how to get the property value"
+msgstr "vet inte hur egenskapsvärdet ska hämtas"
+
+#: ../clients/cli/settings.c:6291 ../clients/cli/settings.c:6331
+msgid "the property can't be changed"
+msgstr "egenskapen kan inte ändras"
+
+#: ../clients/cli/settings.c:6414
+msgid "(not available)"
+msgstr "(ej tillgänglig)"
+
+#: ../clients/cli/settings.c:6439
+msgid "[NM property description]"
+msgstr "[NM egenskapsbeskrivning]"
-#: ../cli/src/settings.c:920
-#: ../cli/src/settings.c:923
-#: ../cli/src/settings.c:924
-#: ../cli/src/utils.c:247
-msgid "not set"
-msgstr "inte inställd"
+#: ../clients/cli/settings.c:6444
+msgid "[nmcli specific description]"
+msgstr "[nmcli specifik beskrivning]"
-#: ../cli/src/utils.c:103
+#: ../clients/cli/utils.c:127
+#, c-format
+msgid "Error: value for '%s' argument is required."
+msgstr "Fel: värde för â€%sâ€-argumentet krävs."
+
+#: ../clients/cli/utils.c:152
+#, c-format
+msgid "Error: Argument '%s' was expected, but '%s' provided."
+msgstr "Fel: Förväntade argumentet â€%s†men gavs â€%sâ€."
+
+#: ../clients/cli/utils.c:155
+#, c-format
+msgid "Error: Unexpected argument '%s'"
+msgstr "Fel: Oväntat argument â€%sâ€"
+
+#: ../clients/cli/utils.c:205
#, c-format
msgid "Error converting IP4 address '0x%X' to text form"
-msgstr "Fel vid konvertering av IP4-adress \"0x%X\" till textformat"
+msgstr "Fel vid konvertering av IP4-adress â€0x%X†till textformat"
-#: ../cli/src/utils.c:131
+#: ../clients/cli/utils.c:233
#, c-format
msgid "Error converting IP6 address '%s' to text form"
-msgstr "Fel vid konvertering av IP6-adress \"%s\" till textformat"
+msgstr "Fel vid konvertering av IP6-adress â€%s†till textformat"
-#: ../cli/src/utils.c:200
+#: ../clients/cli/utils.c:410
#, c-format
-msgid "field '%s' has to be alone"
-msgstr "fältet \"%s\" måste vara ensamt"
+msgid "'%s' is ambiguous (on x off)"
+msgstr "â€%s†är dubbeltydig (pÃ¥ x av)"
-#: ../cli/src/utils.c:203
+#: ../clients/cli/utils.c:420
#, c-format
-msgid "invalid field '%s'"
-msgstr "ogiltigt fält \"%s\""
+msgid "'%s' is not valid; use [%s] or [%s]"
+msgstr "â€%s†är inte giltig; använd [%s] eller [%s]"
-#: ../cli/src/utils.c:222
+#: ../clients/cli/utils.c:502
#, c-format
+msgid "'%s' is ambiguous (%s x %s)"
+msgstr "â€%s†är dubbeltydig (%s x %s)"
+
+#: ../clients/cli/utils.c:514
+#, c-format
+msgid "missing name, try one of [%s]"
+msgstr "saknat namn, prova en av [%s]"
+
+#: ../clients/cli/utils.c:731
+#, c-format
+msgid "field '%s' has to be alone"
+msgstr "fältet â€%s†mÃ¥ste vara ensamt"
+
+#: ../clients/cli/utils.c:734
+#, c-format
+msgid "invalid field '%s'; allowed fields: %s"
+msgstr "ogiltigt fält â€%sâ€; tillÃ¥tna fält: %s"
+
+#: ../clients/cli/utils.c:791
msgid "Option '--terse' requires specifying '--fields'"
-msgstr "Flaggan \"--terse\" kräver att \"--fields\" anges"
+msgstr "Flaggan â€--terse†kräver att â€--fields†anges"
-#: ../cli/src/utils.c:226
+#: ../clients/cli/utils.c:795
#, c-format
msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
-msgstr "Flaggan \"--terse\" kräver specifika värden för \"--fields\"-flagga , inte \"%s\""
+msgstr ""
+"Flaggan â€--terse†kräver angivna värden för â€--fieldsâ€-flaggan , inte â€%sâ€"
+
+#: ../clients/cli/utils.c:1113
+#, c-format
+msgid ""
+"Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --"
+"nocheck to suppress the warning.\n"
+msgstr ""
+"Varning: versionerna för nmcli (%s) och NetworkManager (%s) stämmer inte "
+"överens. Använd --nocheck för att inte visa varningen.\n"
+
+#: ../clients/cli/utils.c:1122
+#, c-format
+msgid ""
+"Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force "
+"execution using --nocheck, but the results are unpredictable."
+msgstr ""
+"Fel: versionerna för nmcli (%s) och NetworkManager (%s) matchar inte. Tvinga "
+"körning med --nocheck, men resultatet är inte förutsägbart."
+
+#: ../clients/nm-online.c:96
+#, c-format
+msgid "\rConnecting"
+msgstr "\rAnsluter"
+
+#: ../clients/nm-online.c:149
+msgid ""
+"Time to wait for a connection, in seconds (without the option, default value "
+"is 30)"
+msgstr "Tid att vänta på anslutning i sekunder (utan val är standardvärdet 30)"
+
+#: ../clients/nm-online.c:150
+msgid "Exit immediately if NetworkManager is not running or connecting"
+msgstr "Avsluta omedelbart om Nätverkshanteraren inte är igång eller ansluter"
+
+#: ../clients/nm-online.c:151
+msgid "Don't print anything"
+msgstr "Skriv inte ut någonting"
+
+#: ../clients/nm-online.c:152
+msgid "Wait for NetworkManager startup instead of a connection"
+msgstr "Vänta på att Nätverkshanteraren ska starta istället för en anslutning"
+
+#: ../clients/nm-online.c:173
+msgid ""
+"Waits for NetworkManager to finish activating startup network connections."
+msgstr ""
+"Väntar på att Nätverkshanteraren ska blir klar med att aktivera startande "
+"nätverksanslutningar."
+
+#: ../clients/nm-online.c:180 ../clients/nm-online.c:186
+msgid "Invalid option. Please use --help to see a list of valid options."
+msgstr ""
+"Ogiltig flagga. Använd --help för att se en lista över giltiga flaggor."
+
+#: ../clients/tui/newt/nmt-newt-utils.c:180 ../clients/tui/nmt-editor.c:244
+#: ../clients/tui/nmt-password-dialog.c:174
+#: ../clients/tui/nmt-route-editor.c:135 ../clients/tui/nmtui-hostname.c:71
+#: ../clients/tui/nmtui.c:117
+msgid "OK"
+msgstr "OK"
-#: ../cli/src/utils.c:436
+#: ../clients/tui/newt/nmt-newt-utils.c:328
+#: ../clients/tui/newt/nmt-newt-utils.c:360
#, c-format
-msgid "Error: Couldn't create D-Bus object proxy for org.freedesktop.DBus"
-msgstr "Fel: Kunde inte skapa proxy för D-Bus-objekt för org.freedesktop.DBus"
+msgid "Could not create temporary file: %s"
+msgstr "Kunde inte skapa temporära filen: %s"
-#: ../cli/src/utils.c:444
+#: ../clients/tui/newt/nmt-newt-utils.c:368
#, c-format
-msgid "Error: NameHasOwner request failed: %s"
-msgstr "Fel: NameHasOwner-begäran misslyckades: %s"
+msgid "Editor failed: %s"
+msgstr "Redigerare misslyckades: %s"
-#: ../cli/src/utils.c:489
+#: ../clients/tui/newt/nmt-newt-utils.c:376
#, c-format
-msgid "Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --nocheck to suppress the warning.\n"
-msgstr "Varning: versionerna för nmcli (%s) och NetworkManager (%s) stämmer inte överens. Använd --nocheck för att inte visa varningen.\n"
+msgid "Editor failed with status %d"
+msgstr "Redigare misslyckades med status %d"
-#: ../cli/src/utils.c:498
+#: ../clients/tui/newt/nmt-newt-utils.c:378
#, c-format
-msgid "Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force execution using --nocheck, but the results are unpredictable."
-msgstr "Fel: versionerna för nmcli (%s) och NetworkManager (%s) stämmer inte överens. Tvinga körning med --nocheck, men resultatet är inte förutsägbart."
+msgid "Editor failed with signal %d"
+msgstr "Redigare misslyckades med signal %d"
-#: ../libnm-util/crypto.c:133
+#: ../clients/tui/newt/nmt-newt-utils.c:382
+#, c-format
+msgid "Could not re-read file: %s"
+msgstr "Kunde inte läsa om filen: %s"
+
+#: ../clients/tui/nm-editor-utils.c:151
+#, c-format
+msgid "Ethernet connection %d"
+msgstr "Trådbunden anslutning %d"
+
+#: ../clients/tui/nm-editor-utils.c:159
+#, c-format
+msgid "Wi-Fi connection %d"
+msgstr "Trådlös anslutning %d"
+
+#: ../clients/tui/nm-editor-utils.c:168
+#, c-format
+msgid "InfiniBand connection %d"
+msgstr "InfiniBand-anslutning %d"
+
+#: ../clients/tui/nm-editor-utils.c:173 ../libnm-glib/nm-device.c:1798
+#: ../libnm/nm-device.c:1608
+msgid "Mobile Broadband"
+msgstr "Mobilt bredband"
+
+#: ../clients/tui/nm-editor-utils.c:176
+#, c-format
+msgid "Mobile broadband connection %d"
+msgstr "Mobil bredbandsanslutning %d"
+
+#: ../clients/tui/nm-editor-utils.c:182 ../clients/tui/nmt-page-dsl.c:39
+msgid "DSL"
+msgstr "DSL"
+
+#: ../clients/tui/nm-editor-utils.c:186
+#, c-format
+msgid "DSL connection %d"
+msgstr "DSL-anslutning %d"
+
+#: ../clients/tui/nm-editor-utils.c:191 ../libnm-core/nm-connection.c:1482
+#: ../libnm-glib/nm-device.c:1802 ../libnm-util/nm-connection.c:1606
+#: ../libnm/nm-device.c:1612 ../src/settings/plugins/ifcfg-rh/reader.c:3973
+msgid "Bond"
+msgstr "Kombinera"
+
+#: ../clients/tui/nm-editor-utils.c:195
+#, c-format
+msgid "Bond connection %d"
+msgstr "Kombinationsanslutning %d"
+
+#: ../clients/tui/nm-editor-utils.c:200 ../libnm-core/nm-connection.c:1486
+#: ../libnm-glib/nm-device.c:1806 ../libnm-util/nm-connection.c:1610
+#: ../libnm/nm-device.c:1616 ../src/settings/plugins/ifcfg-rh/reader.c:4264
+msgid "Bridge"
+msgstr "Brygga"
+
+#: ../clients/tui/nm-editor-utils.c:205
+#, c-format
+msgid "Bridge connection %d"
+msgstr "Brygganslutning %d"
+
+#: ../clients/tui/nm-editor-utils.c:209 ../libnm-core/nm-connection.c:1484
+#: ../libnm-glib/nm-device.c:1804 ../libnm-util/nm-connection.c:1608
+#: ../libnm/nm-device.c:1614 ../src/settings/plugins/ifcfg-rh/reader.c:4079
+msgid "Team"
+msgstr "Grupp"
+
+#: ../clients/tui/nm-editor-utils.c:214
+#, c-format
+msgid "Team connection %d"
+msgstr "Gruppanslutning %d"
+
+#: ../clients/tui/nm-editor-utils.c:222
+#, c-format
+msgid "VLAN connection %d"
+msgstr "VLAN-anslutning %d"
+
+#: ../clients/tui/nm-editor-utils.c:237
+#, c-format
+msgid "VPN connection %d"
+msgstr "VPN-anslutning %d"
+
+#: ../clients/tui/nmt-device-entry.c:371
+msgid "Select..."
+msgstr "Markera…"
+
+#: ../clients/tui/nmt-edit-connection-list.c:129
+msgid "Add"
+msgstr "Lägg till"
+
+#: ../clients/tui/nmt-edit-connection-list.c:132
+#: ../clients/tui/nmt-page-ip4.c:175 ../clients/tui/nmt-page-ip6.c:173
+#: ../clients/tui/nmt-page-team-port.c:110 ../clients/tui/nmt-page-team.c:174
+msgid "Edit..."
+msgstr "Redigera…"
+
+#: ../clients/tui/nmt-edit-connection-list.c:135
+#: ../clients/tui/nmtui-edit.c:523
+msgid "Delete"
+msgstr "Ta bort"
+
+#: ../clients/tui/nmt-editor.c:81
+#, c-format
+msgid "Could not create editor for connection '%s' of type '%s'."
+msgstr "Kunde inte skapa redigerare för anslutning â€%s†av typen â€%sâ€."
+
+#: ../clients/tui/nmt-editor.c:85
+#, c-format
+msgid "Could not create editor for invalid connection '%s'."
+msgstr "Kunde inte skapa redigerare för ogiltig anslutning â€%sâ€."
+
+#: ../clients/tui/nmt-editor.c:95
+msgid "Edit Connection"
+msgstr "Redigera anslutning"
+
+#: ../clients/tui/nmt-editor.c:148
+#, c-format
+msgid "Unable to save connection: %s"
+msgstr "Kunde inte spara anslutning: %s"
+
+#: ../clients/tui/nmt-editor.c:162
+#, c-format
+msgid "Unable to add new connection: %s"
+msgstr "Kunde inte lägga till ny anslutning: %s"
+
+#: ../clients/tui/nmt-editor.c:241 ../clients/tui/nmt-password-dialog.c:171
+#: ../clients/tui/nmt-route-editor.c:128 ../clients/tui/nmtui-edit.c:216
+#: ../clients/tui/nmtui-edit.c:522 ../clients/tui/nmtui-hostname.c:69
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: ../clients/tui/nmt-mtu-entry.c:86
+msgid "(default)"
+msgstr "(standard)"
+
+#: ../clients/tui/nmt-mtu-entry.c:88 ../clients/tui/nmt-mtu-entry.c:119
+msgid "bytes"
+msgstr "byte"
+
+#: ../clients/tui/nmt-page-bond.c:88
+msgid "Round-robin"
+msgstr "Round-robin"
+
+#: ../clients/tui/nmt-page-bond.c:89
+msgid "Active Backup"
+msgstr "Aktiv säkerhetskopia"
+
+#: ../clients/tui/nmt-page-bond.c:90
+msgid "XOR"
+msgstr "XOR"
+
+#: ../clients/tui/nmt-page-bond.c:91
+msgid "Broadcast"
+msgstr "Broadcast"
+
+#: ../clients/tui/nmt-page-bond.c:92
+msgid "802.3ad"
+msgstr "802.3ad"
+
+#: ../clients/tui/nmt-page-bond.c:93
+msgid "Adaptive Transmit Load Balancing (tlb)"
+msgstr "Adaptive Transmit Load Balancing (tlb)"
+
+#: ../clients/tui/nmt-page-bond.c:94
+msgid "Adaptive Load Balancing (alb)"
+msgstr "Adaptive Load Balancing (alb)"
+
+#: ../clients/tui/nmt-page-bond.c:100
+msgid "MII (recommended)"
+msgstr "MII (rekommenderad)"
+
+#: ../clients/tui/nmt-page-bond.c:101
+msgid "ARP"
+msgstr "ARP"
+
+#: ../clients/tui/nmt-page-bond.c:357 ../clients/tui/nmt-page-bridge.c:80
+#: ../clients/tui/nmt-page-team.c:153
+msgid "Slaves"
+msgstr "Slavar"
+
+#: ../clients/tui/nmt-page-bond.c:369 ../clients/tui/nmt-page-wifi.c:232
+msgid "Mode"
+msgstr "Läge"
+
+#: ../clients/tui/nmt-page-bond.c:375
+msgid "Primary"
+msgstr "Primär"
+
+#: ../clients/tui/nmt-page-bond.c:381
+msgid "Link monitoring"
+msgstr "Länkövervakning"
+
+#: ../clients/tui/nmt-page-bond.c:387 ../clients/tui/nmt-page-bond.c:394
+#: ../clients/tui/nmt-page-bond.c:401 ../clients/tui/nmt-page-bond.c:408
+msgctxt "milliseconds"
+msgid "ms"
+msgstr "ms"
+
+#: ../clients/tui/nmt-page-bond.c:388 ../clients/tui/nmt-page-bond.c:409
+msgid "Monitoring frequency"
+msgstr "Övervakningsfrekvens"
+
+#: ../clients/tui/nmt-page-bond.c:395
+msgid "Link up delay"
+msgstr "Fördröjning för länk upp"
+
+#: ../clients/tui/nmt-page-bond.c:402
+msgid "Link down delay"
+msgstr "Fördröjning för länk ned"
+
+#: ../clients/tui/nmt-page-bond.c:415
+msgid "ARP targets"
+msgstr "ARP-mål"
+
+#: ../clients/tui/nmt-page-bridge-port.c:38
+msgid "BRIDGE PORT"
+msgstr "BRYGGPORT"
+
+#: ../clients/tui/nmt-page-bridge-port.c:69
+#: ../clients/tui/nmt-page-bridge.c:106
+msgid "Priority"
+msgstr "Prioritet"
+
+#: ../clients/tui/nmt-page-bridge-port.c:75
+msgid "Path cost"
+msgstr "Sökvägskostnad"
+
+#: ../clients/tui/nmt-page-bridge-port.c:77
+msgid "Hairpin mode"
+msgstr "Hårnålsläge"
+
+#: ../clients/tui/nmt-page-bridge.c:90 ../clients/tui/nmt-page-bridge.c:115
+#: ../clients/tui/nmt-page-bridge.c:125 ../clients/tui/nmt-page-bridge.c:135
+msgid "seconds"
+msgstr "sekunder"
+
+#: ../clients/tui/nmt-page-bridge.c:91
+msgid "Aging time"
+msgstr "Ã…lder"
+
+#: ../clients/tui/nmt-page-bridge.c:93
+msgid "Enable STP (Spanning Tree Protocol)"
+msgstr "Aktivera STP (Spanning Tree Protocol)"
+
+#: ../clients/tui/nmt-page-bridge.c:116
+msgid "Forward delay"
+msgstr "Framåtfördröjning"
+
+#: ../clients/tui/nmt-page-bridge.c:126
+msgid "Hello time"
+msgstr "Hallåtid"
+
+#: ../clients/tui/nmt-page-bridge.c:136
+msgid "Max age"
+msgstr "Max ålder"
+
+#. 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)
+#.
+#: ../clients/tui/nmt-page-dsl.c:67 ../clients/tui/nmt-page-wifi.c:334
+#: ../clients/tui/nmt-secret-agent.c:206 ../clients/tui/nmt-secret-agent.c:301
+msgid "Username"
+msgstr "Användarnamn"
+
+#: ../clients/tui/nmt-page-dsl.c:76 ../clients/tui/nmt-page-wifi.c:279
+#: ../clients/tui/nmt-page-wifi.c:310 ../clients/tui/nmt-page-wifi.c:343
+#: ../clients/tui/nmt-secret-agent.c:211 ../clients/tui/nmt-secret-agent.c:248
+#: ../clients/tui/nmt-secret-agent.c:278 ../clients/tui/nmt-secret-agent.c:311
+#: ../clients/tui/nmt-secret-agent.c:380 ../clients/tui/nmt-secret-agent.c:393
+#: ../clients/tui/nmt-secret-agent.c:409
+msgid "Password"
+msgstr "Lösenord"
+
+#: ../clients/tui/nmt-page-dsl.c:79 ../clients/tui/nmt-secret-agent.c:306
+msgid "Service"
+msgstr "Tjänst"
+
+#: ../clients/tui/nmt-page-ethernet.c:41
+msgid "ETHERNET"
+msgstr "TRÃ…DBUNDET"
+
+#: ../clients/tui/nmt-page-ethernet.c:80 ../clients/tui/nmt-page-vlan.c:124
+#: ../clients/tui/nmt-page-wifi.c:366
+msgid "Cloned MAC address"
+msgstr "Klonade MAC-adress"
+
+#: ../clients/tui/nmt-page-infiniband.c:40
+msgid "INFINIBAND"
+msgstr "INFINIBAND"
+
+#: ../clients/tui/nmt-page-infiniband.c:51
+msgid "Datagram"
+msgstr "Datagram"
+
+#: ../clients/tui/nmt-page-infiniband.c:52
+msgid "Connected"
+msgstr "Ansluten"
+
+#: ../clients/tui/nmt-page-infiniband.c:90
+msgid "Transport mode"
+msgstr "Transportläge"
+
+#: ../clients/tui/nmt-page-ip4.c:41
+msgid "Disabled"
+msgstr "Inaktiverad"
+
+#: ../clients/tui/nmt-page-ip4.c:42 ../clients/tui/nmt-page-ip6.c:42
+msgid "Automatic"
+msgstr "Automatisk"
+
+#: ../clients/tui/nmt-page-ip4.c:43 ../clients/tui/nmt-page-ip6.c:44
+msgid "Link-Local"
+msgstr "Länk-lokal"
+
+#: ../clients/tui/nmt-page-ip4.c:44 ../clients/tui/nmt-page-ip6.c:45
+msgid "Manual"
+msgstr "Manuell"
+
+#: ../clients/tui/nmt-page-ip4.c:45
+msgid "Shared"
+msgstr "Delad"
+
+#: ../clients/tui/nmt-page-ip4.c:54
+msgid "IPv4 CONFIGURATION"
+msgstr "IPv4-KONFIGURATION"
+
+#: ../clients/tui/nmt-page-ip4.c:100 ../clients/tui/nmt-page-ip6.c:100
+msgid "(No custom routes)"
+msgstr "(Inga anpassade rutter)"
+
+#: ../clients/tui/nmt-page-ip4.c:103 ../clients/tui/nmt-page-ip6.c:103
+#, c-format
+msgid "One custom route"
+msgid_plural "%d custom routes"
+msgstr[0] "En anpassad rutt"
+msgstr[1] "%d anpassade rutter"
+
+#: ../clients/tui/nmt-page-ip4.c:144 ../clients/tui/nmt-page-ip6.c:144
+msgid "Addresses"
+msgstr "Adresser"
+
+#: ../clients/tui/nmt-page-ip4.c:150 ../clients/tui/nmt-page-ip6.c:150
+msgid "Gateway"
+msgstr "Gateway"
+
+#: ../clients/tui/nmt-page-ip4.c:156 ../clients/tui/nmt-page-ip6.c:156
+msgid "DNS servers"
+msgstr "DNS-servrar"
+
+#: ../clients/tui/nmt-page-ip4.c:162 ../clients/tui/nmt-page-ip6.c:162
+msgid "Search domains"
+msgstr "Sökdomäner"
+
+#: ../clients/tui/nmt-page-ip4.c:177 ../clients/tui/nmt-page-ip6.c:175
+msgid "Routing"
+msgstr "Routing"
+
+#: ../clients/tui/nmt-page-ip4.c:179 ../clients/tui/nmt-page-ip6.c:177
+msgid "Never use this network for default route"
+msgstr "Använd aldrig detta nätverk för standardrutten"
+
+#: ../clients/tui/nmt-page-ip4.c:187
+msgid "Require IPv4 addressing for this connection"
+msgstr "Kräv IPv4-adressering för denna anslutning"
+
+#: ../clients/tui/nmt-page-ip6.c:41
+msgid "Ignore"
+msgstr "Ignorera"
+
+#: ../clients/tui/nmt-page-ip6.c:43
+msgid "Automatic (DHCP-only)"
+msgstr "Automatisk (endast DHCP)"
+
+#: ../clients/tui/nmt-page-ip6.c:54
+msgid "IPv6 CONFIGURATION"
+msgstr "IPv6-KONFIGURATION"
+
+#: ../clients/tui/nmt-page-ip6.c:185
+msgid "Require IPv6 addressing for this connection"
+msgstr "Kräv IPv6-adressering för denna anslutning"
+
+#: ../clients/tui/nmt-page-main.c:139
+msgid "Hide"
+msgstr "Dölj"
+
+#: ../clients/tui/nmt-page-main.c:139
+msgid "Show"
+msgstr "Visa"
+
+#: ../clients/tui/nmt-page-main.c:188
+msgid "Profile name"
+msgstr "Profilnamn"
+
+#: ../clients/tui/nmt-page-main.c:199
+msgid "Ethernet device"
+msgstr "Ethernet-enhet"
+
+#: ../clients/tui/nmt-page-main.c:201
+msgid "Device"
+msgstr "Enhet"
+
+#: ../clients/tui/nmt-page-main.c:252
+msgid "Automatically connect"
+msgstr "Anslut automatiskt"
+
+#: ../clients/tui/nmt-page-main.c:258
+msgid "Available to all users"
+msgstr "Tillgänglig för alla användare"
+
+#: ../clients/tui/nmt-page-ppp.c:49
+msgid "PPP CONFIGURATION"
+msgstr "PPP-KONFIGURATION"
+
+#: ../clients/tui/nmt-page-ppp.c:142
+msgid "Allowed authentication methods:"
+msgstr "Tillåtna autentiseringsmetoder:"
+
+#: ../clients/tui/nmt-page-ppp.c:149
+msgid "EAP"
+msgstr "EAP"
+
+#: ../clients/tui/nmt-page-ppp.c:157
+msgid "PAP"
+msgstr "PAP"
+
+#: ../clients/tui/nmt-page-ppp.c:165
+msgid "CHAP"
+msgstr "CHAP"
+
+#: ../clients/tui/nmt-page-ppp.c:173
+msgid "MSCHAPv2"
+msgstr "MSCHAPv2"
+
+#: ../clients/tui/nmt-page-ppp.c:181
+msgid "MSCHAP"
+msgstr "MSCHAP"
+
+#: ../clients/tui/nmt-page-ppp.c:197
+msgid "Use point-to-point encryption (MPPE)"
+msgstr "Använd punkt-till-punkt-kryptering (MPPE)"
+
+#: ../clients/tui/nmt-page-ppp.c:209
+msgid "Require 128-bit encryption"
+msgstr "Kräv 128-bitars kryptering"
+
+#: ../clients/tui/nmt-page-ppp.c:219
+msgid "Use stateful MPPE"
+msgstr "Använd MPPE med tillstånd"
+
+#: ../clients/tui/nmt-page-ppp.c:231
+msgid "Allow BSD data compression"
+msgstr "Tillåt BSD-datakomprimering"
+
+#: ../clients/tui/nmt-page-ppp.c:239
+msgid "Allow Deflate data compression"
+msgstr "Tillåt Deflate-datakomprimering"
+
+#: ../clients/tui/nmt-page-ppp.c:247
+msgid "Use TCP header compression"
+msgstr "Använd TCP-huvudkomprimering"
+
+#: ../clients/tui/nmt-page-ppp.c:257
+msgid "Send PPP echo packets"
+msgstr "Skicka PPP-ekopaket"
+
+#: ../clients/tui/nmt-page-team-port.c:45
+msgid "TEAM PORT"
+msgstr "GRUPP-PORT"
+
+#: ../clients/tui/nmt-page-team-port.c:100 ../clients/tui/nmt-page-team.c:164
+msgid "JSON configuration"
+msgstr "JSON-konfiguration"
+
+#: ../clients/tui/nmt-page-vlan.c:101
+msgid "Parent"
+msgstr "Förälder"
+
+#: ../clients/tui/nmt-page-vlan.c:116
+msgid "VLAN id"
+msgstr "VLAN-ID"
+
+#: ../clients/tui/nmt-page-wifi.c:57
+msgid "WI-FI"
+msgstr "TRÅDLÖS"
+
+#: ../clients/tui/nmt-page-wifi.c:68
+msgctxt "Wi-Fi"
+msgid "Client"
+msgstr "Klient"
+
+#: ../clients/tui/nmt-page-wifi.c:69
+msgid "Access Point"
+msgstr "Accesspunkt"
+
+#: ../clients/tui/nmt-page-wifi.c:70
+msgid "Ad-Hoc Network"
+msgstr "Ad-Hoc-nätverk"
+
+#: ../clients/tui/nmt-page-wifi.c:75
+msgctxt "Wi-Fi"
+msgid "Automatic"
+msgstr "Automatisk"
+
+#. 802.11a Wi-Fi network
+#: ../clients/tui/nmt-page-wifi.c:77
+msgid "A (5 GHz)"
+msgstr "A (5 GHz)"
+
+#. 802.11b / 802.11g Wi-Fi network
+#: ../clients/tui/nmt-page-wifi.c:79
+msgid "B/G (2.4 GHz)"
+msgstr "B/G (2.4 GHz)"
+
+#: ../clients/tui/nmt-page-wifi.c:84
+msgctxt "Wi-Fi security"
+msgid "None"
+msgstr "Ingen"
+
+#: ../clients/tui/nmt-page-wifi.c:85
+msgid "WPA & WPA2 Personal"
+msgstr "WPA & WPA2 Personal"
+
+#: ../clients/tui/nmt-page-wifi.c:86
+msgid "WPA & WPA2 Enterprise"
+msgstr "WPA & WPA2 Enterprise"
+
+#: ../clients/tui/nmt-page-wifi.c:87
+msgid "WEP 40/128-bit Key (Hex or ASCII)"
+msgstr "WEP 40/128-bit nyckel (Hex eller ASCII)"
+
+#: ../clients/tui/nmt-page-wifi.c:88
+msgid "WEP 128-bit Passphrase"
+msgstr "WEP 128-bit lösenfras"
+
+#: ../clients/tui/nmt-page-wifi.c:89
+msgid "Dynamic WEP (802.1x)"
+msgstr "Dynamisk WEP (802.1x)"
+
+#: ../clients/tui/nmt-page-wifi.c:90
+msgid "LEAP"
+msgstr "LEAP"
+
+#: ../clients/tui/nmt-page-wifi.c:95
+msgctxt "WEP key index"
+msgid "1 (Default)"
+msgstr "1"
+
+#: ../clients/tui/nmt-page-wifi.c:96
+msgctxt "WEP key index"
+msgid "2"
+msgstr "2"
+
+#: ../clients/tui/nmt-page-wifi.c:97
+msgctxt "WEP key index"
+msgid "3"
+msgstr "3"
+
+#: ../clients/tui/nmt-page-wifi.c:98
+msgctxt "WEP key index"
+msgid "4"
+msgstr "4"
+
+#: ../clients/tui/nmt-page-wifi.c:103
+msgid "Open System"
+msgstr "Öppet system"
+
+#: ../clients/tui/nmt-page-wifi.c:104
+msgid "Shared Key"
+msgstr "Delad nyckel"
+
+#: ../clients/tui/nmt-page-wifi.c:258
+msgid "Channel"
+msgstr "Kanal"
+
+#: ../clients/tui/nmt-page-wifi.c:263
+msgid "Security"
+msgstr "Säkerhet"
+
+#. "wpa-enterprise"
+#. FIXME
+#: ../clients/tui/nmt-page-wifi.c:284
+msgid "(No support for wpa-enterprise yet...)"
+msgstr "(Inget stöd för wpa-enterprise än…)"
+
+#: ../clients/tui/nmt-page-wifi.c:291 ../clients/tui/nmt-secret-agent.c:262
+msgid "Key"
+msgstr "Nyckel"
+
+#: ../clients/tui/nmt-page-wifi.c:294 ../clients/tui/nmt-page-wifi.c:313
+msgid "WEP index"
+msgstr "WEP-index"
+
+#: ../clients/tui/nmt-page-wifi.c:302 ../clients/tui/nmt-page-wifi.c:321
+msgid "Authentication"
+msgstr "Autentisering"
+
+#. "dynamic-wep"
+#. FIXME
+#: ../clients/tui/nmt-page-wifi.c:327
+msgid "(No support for dynamic-wep yet...)"
+msgstr "(Inget stöd för dynamic-wep än…)"
+
+#: ../clients/tui/nmt-password-fields.c:130
+msgid "Ask for this password every time"
+msgstr "Fråga alltid efter lösenord"
+
+#: ../clients/tui/nmt-password-fields.c:131
+msgid "Show password"
+msgstr "Visa lösenord"
+
+#: ../clients/tui/nmt-route-table.c:219
+msgid "Destination"
+msgstr "Destination"
+
+#: ../clients/tui/nmt-route-table.c:219
+msgid "Prefix"
+msgstr "Prefix"
+
+#: ../clients/tui/nmt-route-table.c:228
+msgid "Next Hop"
+msgstr "Nästa hopp"
+
+#: ../clients/tui/nmt-route-table.c:236
+msgid "Metric"
+msgstr "Mätvärde"
+
+#: ../clients/tui/nmt-route-table.c:256
+msgid "No custom routes are defined."
+msgstr "Inga anpassade rutter är definerade."
+
+#: ../clients/tui/nmt-secret-agent.c:220
+msgid "Identity"
+msgstr "Identitet"
+
+#: ../clients/tui/nmt-secret-agent.c:225
+msgid "Private key password"
+msgstr "Lösenord för privat nyckel"
+
+#: ../clients/tui/nmt-secret-agent.c:340
+msgid "Authentication required by wireless network"
+msgstr "Autentisering krävs av trådlösa nätverket"
+
+#: ../clients/tui/nmt-secret-agent.c:341
+#, c-format
+msgid ""
+"Passwords or encryption keys are required to access the wireless network "
+"'%s'."
+msgstr ""
+"Lösenord eller krypteringsnycklar krävs för åtkomst till trådlösa nätverket "
+"â€%sâ€."
+
+#: ../clients/tui/nmt-secret-agent.c:349
+msgid "Wired 802.1X authentication"
+msgstr "Trådbunden 802.1X-autentisering"
+
+#: ../clients/tui/nmt-secret-agent.c:352
+msgid "Network name"
+msgstr "Nätverksnamn"
+
+#: ../clients/tui/nmt-secret-agent.c:359
+msgid "DSL authentication"
+msgstr "DSL-autentisering"
+
+#: ../clients/tui/nmt-secret-agent.c:367
+msgid "PIN code required"
+msgstr "PIN-kod krävs"
+
+#: ../clients/tui/nmt-secret-agent.c:368
+msgid "PIN code is needed for the mobile broadband device"
+msgstr "Det krävs PIN-kod för den mobila bredbandsenheten"
+
+#: ../clients/tui/nmt-secret-agent.c:370
+msgid "PIN"
+msgstr "PIN"
+
+#: ../clients/tui/nmt-secret-agent.c:376 ../clients/tui/nmt-secret-agent.c:389
+#: ../clients/tui/nmt-secret-agent.c:405
+msgid "Mobile broadband network password"
+msgstr "Nätverkslösenord för mobilt bredband"
+
+#: ../clients/tui/nmt-secret-agent.c:377 ../clients/tui/nmt-secret-agent.c:390
+#: ../clients/tui/nmt-secret-agent.c:406
+#, c-format
+msgid "A password is required to connect to '%s'."
+msgstr "Ett lösenord krävs för att ansluta till â€%sâ€."
+
+#: ../clients/tui/nmt-slave-list.c:137
+msgid "Select the type of slave connection you wish to add."
+msgstr "Välj den typ av slavanslutning du vill lägga till."
+
+#: ../clients/tui/nmt-widget-list.c:141
+msgid "Add..."
+msgstr "Lägg till…"
+
+#: ../clients/tui/nmt-widget-list.c:204
+msgid "Remove"
+msgstr "Ta bort"
+
+#: ../clients/tui/nmtui-connect.c:90
+msgid "Activation failed"
+msgstr "Aktivering misslyckades"
+
+#: ../clients/tui/nmtui-connect.c:145
+msgid "Connecting..."
+msgstr "Ansluter…"
+
+#: ../clients/tui/nmtui-connect.c:174 ../clients/tui/nmtui-connect.c:197
+#, c-format
+msgid "Could not activate connection: %s"
+msgstr "Kunde inte aktivera anslutningen: %s"
+
+#: ../clients/tui/nmtui-connect.c:257 ../clients/tui/nmtui-connect.c:306
+msgid "Activate"
+msgstr "Aktivera"
+
+#: ../clients/tui/nmtui-connect.c:259
+msgid "Deactivate"
+msgstr "Inaktivera"
+
+#: ../clients/tui/nmtui-connect.c:311 ../clients/tui/nmtui-edit.c:119
+#: ../clients/tui/nmtui.c:111
+msgid "Quit"
+msgstr "Avsluta"
+
+#: ../clients/tui/nmtui-connect.c:334
+#, c-format
+msgid "No such connection '%s'"
+msgstr "Ingen sÃ¥dan anslutning â€%sâ€"
+
+#: ../clients/tui/nmtui-connect.c:336
+msgid "Connection is already active"
+msgstr "Anslutningen är redan aktiv"
+
+#: ../clients/tui/nmtui-edit.c:224
+msgid "Create"
+msgstr "Skapa"
+
+#: ../clients/tui/nmtui-edit.c:366
+msgid "Select the type of connection you wish to create."
+msgstr "Välj den typ av anslutning du vill skapa."
+
+#: ../clients/tui/nmtui-edit.c:374
+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 ""
+"Om du skapar ett VPN, och VPN-konfigurationen du vill skapa inte visas i "
+"listan kanske du inte har rätt VPN-insticksmodul installerad."
+
+#: ../clients/tui/nmtui-edit.c:410 ../clients/tui/nmtui-edit.c:426
+msgid "New Connection"
+msgstr "Ny anslutning"
+
+#: ../clients/tui/nmtui-edit.c:465
+#, c-format
+msgid "Unable to delete connection: %s"
+msgstr "Kunde inte ta bort anslutningen: %s"
+
+#: ../clients/tui/nmtui-edit.c:504
+#, c-format
+msgid "Could not delete connection '%s': %s"
+msgstr "Kunde inte ta bort anslutningen â€%sâ€: %s"
+
+#: ../clients/tui/nmtui-edit.c:524
+#, c-format
+msgid "Are you sure you want to delete the connection '%s'?"
+msgstr "Är du säker pÃ¥ att du vill radera anslutningen â€%sâ€?"
+
+#: ../clients/tui/nmtui-hostname.c:47
+msgid "Set Hostname"
+msgstr "Sätt värdnamn"
+
+#: ../clients/tui/nmtui-hostname.c:55
+msgid "Hostname"
+msgstr "Värdnamn"
+
+#. Translators: this indicates the result. ie, "I have set the hostname to ..."
+#: ../clients/tui/nmtui-hostname.c:118
+#, c-format
+msgid "Set hostname to '%s'"
+msgstr "Värdnamnet sattes till â€%sâ€"
+
+#: ../clients/tui/nmtui-hostname.c:120
+#, c-format
+msgid "Unable to set hostname: %s"
+msgstr "Kunde inte sätta värdnamnet: %s"
+
+#: ../clients/tui/nmtui.c:56 ../clients/tui/nmtui.c:59
+msgid "connection"
+msgstr "anslutning"
+
+#: ../clients/tui/nmtui.c:57
+msgid "Edit a connection"
+msgstr "Redigera en anslutning"
+
+#: ../clients/tui/nmtui.c:60
+msgid "Activate a connection"
+msgstr "Aktivera en anslutning"
+
+#: ../clients/tui/nmtui.c:62
+msgid "new hostname"
+msgstr "nytt värdnamn"
+
+#: ../clients/tui/nmtui.c:63
+msgid "Set system hostname"
+msgstr "Ange systemvärdnamn"
+
+#: ../clients/tui/nmtui.c:86
+msgid "NetworkManager TUI"
+msgstr "Nätverkshanterare TUI"
+
+#: ../clients/tui/nmtui.c:94
+msgid "Please select an option"
+msgstr "Vänligen välj ett alternativ"
+
+#: ../clients/tui/nmtui.c:146
+msgid "Usage"
+msgstr "Användning"
+
+#: ../clients/tui/nmtui.c:227
+msgid "Could not parse arguments"
+msgstr "Kunde inte tolka argument"
+
+#: ../clients/tui/nmtui.c:237
+#, c-format
+msgid "Could not contact NetworkManager: %s.\n"
+msgstr "Kunde inte kontakta Nätverkshanteraren: %s.\n"
+
+#: ../clients/tui/nmtui.c:242
+msgid "NetworkManager is not running."
+msgstr "Nätverkshanteraren är inte startad"
+
+#: ../libnm-core/crypto.c:120 ../libnm-util/crypto.c:133
#, c-format
msgid "PEM key file had no end tag '%s'."
-msgstr "PEM-nyckelfilen hade ingen sluttagg \"%s\"."
+msgstr "PEM-nyckelfilen hade ingen sluttagg â€%sâ€."
-#: ../libnm-util/crypto.c:146
+#: ../libnm-core/crypto.c:133 ../libnm-util/crypto.c:146
#, c-format
msgid "Doesn't look like a PEM private key file."
msgstr "Ser inte ut som en privat PEM-nyckelfil."
-#: ../libnm-util/crypto.c:154
-#, c-format
-msgid "Not enough memory to store PEM file data."
-msgstr "Inte tillräckligt mycket minne för att lagra PEM-fildata."
-
-#: ../libnm-util/crypto.c:170
+#: ../libnm-core/crypto.c:150 ../libnm-util/crypto.c:163
#, c-format
msgid "Malformed PEM file: Proc-Type was not first tag."
msgstr "Felformulerad PEM-fil: Proc-Type var inte första taggen."
-#: ../libnm-util/crypto.c:178
+#: ../libnm-core/crypto.c:158 ../libnm-util/crypto.c:171
#, c-format
msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
-msgstr "Felformulerad PEM-fil: okänd Proc-Type-tagg \"%s\"."
+msgstr "Felformulerad PEM-fil: okänd Proc-Type-tagg â€%sâ€."
-#: ../libnm-util/crypto.c:188
+#: ../libnm-core/crypto.c:168 ../libnm-util/crypto.c:181
#, c-format
msgid "Malformed PEM file: DEK-Info was not the second tag."
msgstr "Felformulerad PEM-fil: DEK-Info var inte andra taggen."
-#: ../libnm-util/crypto.c:199
+#: ../libnm-core/crypto.c:179 ../libnm-util/crypto.c:192
#, c-format
msgid "Malformed PEM file: no IV found in DEK-Info tag."
msgstr "Felformulerad PEM-fil: ingen IV hittades i DEK-Info-taggen."
-#: ../libnm-util/crypto.c:206
+#: ../libnm-core/crypto.c:186 ../libnm-util/crypto.c:199
#, c-format
msgid "Malformed PEM file: invalid format of IV in DEK-Info tag."
msgstr "Felformulerad PEM-fil: ogiltigt format för IV i DEK-Info-taggen."
-#: ../libnm-util/crypto.c:219
+#: ../libnm-core/crypto.c:201 ../libnm-util/crypto.c:214
#, c-format
msgid "Malformed PEM file: unknown private key cipher '%s'."
-msgstr "Felformulerad PEM-fil: okänt chiffer för privat nyckel \"%s\"."
+msgstr "Felformulerad PEM-fil: okänt chiffer för privat nyckel â€%sâ€."
-#: ../libnm-util/crypto.c:238
+#: ../libnm-core/crypto.c:220 ../libnm-util/crypto.c:233
#, c-format
msgid "Could not decode private key."
msgstr "Kunde inte avkoda privat nyckel."
-#: ../libnm-util/crypto.c:284
+#: ../libnm-core/crypto.c:273 ../libnm-util/crypto.c:285
msgid "Failed to find expected PKCS#8 start tag."
msgstr "Misslyckades med att hitta förväntad PKCS#8-starttagg."
-#: ../libnm-util/crypto.c:292
+#: ../libnm-core/crypto.c:281 ../libnm-util/crypto.c:293
#, c-format
msgid "Failed to find expected PKCS#8 end tag '%s'."
-msgstr "Misslyckades med att hitta förväntad PKCS#8-sluttagg \"%s\"."
-
-#: ../libnm-util/crypto.c:312
-msgid "Not enough memory to store private key data."
-msgstr "Inte tillräckligt mycket minne för att lagra privat nyckeldata."
+msgstr "Misslyckades med att hitta förväntad PKCS#8-sluttagg â€%sâ€."
-#: ../libnm-util/crypto.c:317
+#: ../libnm-core/crypto.c:300 ../libnm-util/crypto.c:312
msgid "Failed to decode PKCS#8 private key."
msgstr "Misslyckades med att avkoda privat PKCS#8-nyckel."
-#: ../libnm-util/crypto.c:339
-#: ../libnm-util/crypto.c:625
-#, c-format
-msgid "Not enough memory to store certificate data."
-msgstr "Inte tillräckligt mycket minne för att lagra certifikatdata."
-
-#: ../libnm-util/crypto.c:365
+#: ../libnm-core/crypto.c:342 ../libnm-util/crypto.c:354
#, c-format
msgid "IV must be an even number of bytes in length."
msgstr "IV måste vara ett jämnt antal byte i längd."
-#: ../libnm-util/crypto.c:374
-#, c-format
-msgid "Not enough memory to store the IV."
-msgstr "Inte tillräckligt mycket minne för att lagra IV."
-
-#: ../libnm-util/crypto.c:385
+#: ../libnm-core/crypto.c:356 ../libnm-util/crypto.c:368
#, c-format
msgid "IV contains non-hexadecimal digits."
msgstr "IV innehåller icke-hexadecimala siffror."
-#: ../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-core/crypto.c:396 ../libnm-core/crypto_gnutls.c:151
+#: ../libnm-core/crypto_gnutls.c:269 ../libnm-core/crypto_nss.c:172
+#: ../libnm-core/crypto_nss.c:334 ../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 "Privata nyckelchiffret \"%s\" var okänt."
+msgstr "Privata nyckelchiffret â€%s†var okänt."
-#: ../libnm-util/crypto.c:432
-#, c-format
-msgid "Not enough memory to decrypt private key."
-msgstr "Inte tillräckligt mycket minne för att dekryptera privat nyckel."
-
-#: ../libnm-util/crypto.c:497
-#, c-format
-msgid "Not enough memory to store decrypted private key."
-msgstr "Inte tillräckligt mycket minne för att lagra dekrypterad privat nyckel."
-
-#: ../libnm-util/crypto.c:542
+#: ../libnm-core/crypto.c:508 ../libnm-util/crypto.c:518
#, c-format
msgid "Unable to determine private key type."
msgstr "Kunde inte bestämma typ av privat nyckel."
-#: ../libnm-util/crypto.c:597
+#: ../libnm-core/crypto.c:565 ../libnm-util/crypto.c:573
#, c-format
msgid "PEM certificate had no start tag '%s'."
-msgstr "PEM-certifikatet hade ingen starttagg \"%s\"."
+msgstr "PEM-certifikatet hade ingen starttagg â€%sâ€."
-#: ../libnm-util/crypto.c:606
+#: ../libnm-core/crypto.c:574 ../libnm-util/crypto.c:582
#, c-format
msgid "PEM certificate had no end tag '%s'."
-msgstr "PEM-certifikatet hade ingen sluttagg \"%s\"."
+msgstr "PEM-certifikatet hade ingen sluttagg â€%sâ€."
-#: ../libnm-util/crypto.c:630
+#: ../libnm-core/crypto.c:592 ../libnm-util/crypto.c:600
#, c-format
msgid "Failed to decode certificate."
msgstr "Misslyckades med att avkoda certifikat."
-#: ../libnm-util/crypto_gnutls.c:50
+#: ../libnm-core/crypto_gnutls.c:50 ../libnm-util/crypto_gnutls.c:50
msgid "Failed to initialize the crypto engine."
msgstr "Misslyckades med att initiera krypteringsmotorn."
-#: ../libnm-util/crypto_gnutls.c:92
+#: ../libnm-core/crypto_gnutls.c:92 ../libnm-util/crypto_gnutls.c:92
#, c-format
msgid "Failed to initialize the MD5 engine: %s / %s."
msgstr "Misslyckades med att initiera MD5-motorn: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:155
+#: ../libnm-core/crypto_gnutls.c:159 ../libnm-util/crypto_gnutls.c:158
#, c-format
msgid "Invalid IV length (must be at least %zd)."
msgstr "Ogiltig IV-längd (måste vara minst %zd)."
-#: ../libnm-util/crypto_gnutls.c:164
-#: ../libnm-util/crypto_nss.c:184
-#, c-format
-msgid "Not enough memory for decrypted key buffer."
-msgstr "Inte tillräckligt mycket minne för buffert för dekrypterade nycklar."
-
-#: ../libnm-util/crypto_gnutls.c:172
+#: ../libnm-core/crypto_gnutls.c:170 ../libnm-util/crypto_gnutls.c:169
#, c-format
msgid "Failed to initialize the decryption cipher context: %s / %s."
-msgstr "Misslyckades med att initiera chifferkontexten för dekryptering: %s / %s."
+msgstr ""
+"Misslyckades med att initiera chifferkontexten för dekryptering: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:181
+#: ../libnm-core/crypto_gnutls.c:179 ../libnm-util/crypto_gnutls.c:178
#, c-format
msgid "Failed to set symmetric key for decryption: %s / %s."
-msgstr "Misslyckades med att ställa in symmetrisk nyckel för dekryptering: %s / %s."
+msgstr ""
+"Misslyckades med att ställa in symmetrisk nyckel för dekryptering: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:190
+#: ../libnm-core/crypto_gnutls.c:188 ../libnm-util/crypto_gnutls.c:187
#, c-format
msgid "Failed to set IV for decryption: %s / %s."
msgstr "Misslyckades med att ställa in IV för dekryptering: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:199
+#: ../libnm-core/crypto_gnutls.c:197 ../libnm-util/crypto_gnutls.c:196
#, c-format
msgid "Failed to decrypt the private key: %s / %s."
msgstr "Misslyckades med att dekryptera den privata nyckeln: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:209
-#: ../libnm-util/crypto_nss.c:263
+#: ../libnm-core/crypto_gnutls.c:207 ../libnm-core/crypto_nss.c:262
+#: ../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 "Misslyckades med att dekryptera privata nyckeln: oväntad utfyllningslängd."
+msgstr ""
+"Misslyckades med att dekryptera privata nyckeln: oväntad utfyllningslängd."
-#: ../libnm-util/crypto_gnutls.c:220
-#: ../libnm-util/crypto_nss.c:274
+#: ../libnm-core/crypto_gnutls.c:218 ../libnm-core/crypto_nss.c:273
+#: ../libnm-util/crypto_gnutls.c:217 ../libnm-util/crypto_nss.c:271
#, c-format
msgid "Failed to decrypt the private key."
msgstr "Misslyckades med att dekryptera privata nyckeln."
-#: ../libnm-util/crypto_gnutls.c:285
-#: ../libnm-util/crypto_nss.c:352
-#, c-format
-msgid "Could not allocate memory for encrypting."
-msgstr "Kunde inte allokera minne för kryptering."
-
-#: ../libnm-util/crypto_gnutls.c:293
+#: ../libnm-core/crypto_gnutls.c:291 ../libnm-util/crypto_gnutls.c:289
#, c-format
msgid "Failed to initialize the encryption cipher context: %s / %s."
-msgstr "Misslyckades med att initiera chifferkontexten för kryptering: %s / %s."
+msgstr ""
+"Misslyckades med att initiera chifferkontexten för kryptering: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:302
+#: ../libnm-core/crypto_gnutls.c:300 ../libnm-util/crypto_gnutls.c:298
#, c-format
msgid "Failed to set symmetric key for encryption: %s / %s."
-msgstr "Misslyckades med att ställa in symmetrisk nyckel för kryptering: %s / %s."
+msgstr ""
+"Misslyckades med att ställa in symmetrisk nyckel för kryptering: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:312
+#: ../libnm-core/crypto_gnutls.c:310 ../libnm-util/crypto_gnutls.c:308
#, c-format
msgid "Failed to set IV for encryption: %s / %s."
msgstr "Misslyckades med att ställa in IV för kryptering: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:321
+#: ../libnm-core/crypto_gnutls.c:319 ../libnm-util/crypto_gnutls.c:317
#, c-format
msgid "Failed to encrypt the data: %s / %s."
msgstr "Misslyckades med att kryptera datat: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:361
+#: ../libnm-core/crypto_gnutls.c:359 ../libnm-util/crypto_gnutls.c:357
#, c-format
msgid "Error initializing certificate data: %s"
msgstr "Fel vid initiering av certifikatdata: %s"
-#: ../libnm-util/crypto_gnutls.c:383
+#: ../libnm-core/crypto_gnutls.c:381 ../libnm-util/crypto_gnutls.c:379
#, c-format
msgid "Couldn't decode certificate: %s"
msgstr "Kunde inte avkoda certifikat: %s"
-#: ../libnm-util/crypto_gnutls.c:407
+#: ../libnm-core/crypto_gnutls.c:406 ../libnm-util/crypto_gnutls.c:403
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %s"
msgstr "Kunde inte initiera PKCS#12-avkodare: %s"
-#: ../libnm-util/crypto_gnutls.c:420
+#: ../libnm-core/crypto_gnutls.c:419 ../libnm-util/crypto_gnutls.c:416
#, c-format
msgid "Couldn't decode PKCS#12 file: %s"
msgstr "Kunde inte avkoda PKCS#12-fil: %s"
-#: ../libnm-util/crypto_gnutls.c:432
+#: ../libnm-core/crypto_gnutls.c:431 ../libnm-util/crypto_gnutls.c:428
#, c-format
msgid "Couldn't verify PKCS#12 file: %s"
msgstr "Kunde inte verifiera PKCS#12-fil: %s"
-#: ../libnm-util/crypto_gnutls.c:460
+#: ../libnm-core/crypto_gnutls.c:460 ../libnm-util/crypto_gnutls.c:456
#, c-format
msgid "Couldn't initialize PKCS#8 decoder: %s"
msgstr "Kunde inte initiera PKCS#8-avkodare: %s"
-#: ../libnm-util/crypto_gnutls.c:483
+#: ../libnm-core/crypto_gnutls.c:483 ../libnm-util/crypto_gnutls.c:479
#, c-format
msgid "Couldn't decode PKCS#8 file: %s"
msgstr "Kunde inte avkoda PKCS#8-fil: %s"
-#: ../libnm-util/crypto_nss.c:56
+#: ../libnm-core/crypto_nss.c:57 ../libnm-util/crypto_nss.c:56
#, c-format
msgid "Failed to initialize the crypto engine: %d."
msgstr "Misslyckades med att initiera krypteringsmotorn: %d."
-#: ../libnm-util/crypto_nss.c:107
+#: ../libnm-core/crypto_nss.c:108 ../libnm-util/crypto_nss.c:107
#, c-format
msgid "Failed to initialize the MD5 context: %d."
msgstr "Misslyckades med att initiera MD5-kontexten: %d."
-#: ../libnm-util/crypto_nss.c:175
+#: ../libnm-core/crypto_nss.c:180 ../libnm-util/crypto_nss.c:178
#, c-format
msgid "Invalid IV length (must be at least %d)."
msgstr "Ogiltig IV-längd (måste vara minst %d)."
-#: ../libnm-util/crypto_nss.c:192
+#: ../libnm-core/crypto_nss.c:191 ../libnm-util/crypto_nss.c:189
#, c-format
msgid "Failed to initialize the decryption cipher slot."
msgstr "Misslyckades med att initiera dekrypteringschifferplatsen."
-#: ../libnm-util/crypto_nss.c:202
+#: ../libnm-core/crypto_nss.c:201 ../libnm-util/crypto_nss.c:199
#, c-format
msgid "Failed to set symmetric key for decryption."
msgstr "Misslyckades med att ställa in symmetrisk nyckel för dekryptering."
-#: ../libnm-util/crypto_nss.c:212
+#: ../libnm-core/crypto_nss.c:211 ../libnm-util/crypto_nss.c:209
#, c-format
msgid "Failed to set IV for decryption."
msgstr "Misslyckades med att ställa in IV för dekryptering."
-#: ../libnm-util/crypto_nss.c:220
+#: ../libnm-core/crypto_nss.c:219 ../libnm-util/crypto_nss.c:217
#, c-format
msgid "Failed to initialize the decryption context."
msgstr "Misslyckades med att initiera dekrypteringskontexten."
-#: ../libnm-util/crypto_nss.c:233
+#: ../libnm-core/crypto_nss.c:232 ../libnm-util/crypto_nss.c:230
#, c-format
msgid "Failed to decrypt the private key: %d."
msgstr "Misslyckades med att dekryptera privata nyckeln: %d."
-#: ../libnm-util/crypto_nss.c:241
+#: ../libnm-core/crypto_nss.c:240 ../libnm-util/crypto_nss.c:238
#, c-format
msgid "Failed to decrypt the private key: decrypted data too large."
-msgstr "Misslyckades med att dekryptera privata nyckeln: dekrypterat data är för stort."
+msgstr ""
+"Misslyckades med att dekryptera privata nyckeln: dekrypterat data är för "
+"stort."
-#: ../libnm-util/crypto_nss.c:252
+#: ../libnm-core/crypto_nss.c:251 ../libnm-util/crypto_nss.c:249
#, c-format
msgid "Failed to finalize decryption of the private key: %d."
-msgstr "Misslyckades med att färdigställa dekryptering av den privata nyckeln: %d."
+msgstr ""
+"Misslyckades med att färdigställa dekryptering av den privata nyckeln: %d."
-#: ../libnm-util/crypto_nss.c:360
+#: ../libnm-core/crypto_nss.c:356 ../libnm-util/crypto_nss.c:353
#, c-format
msgid "Failed to initialize the encryption cipher slot."
msgstr "Misslyckades med att initiera krypteringschifferplatsen."
-#: ../libnm-util/crypto_nss.c:368
+#: ../libnm-core/crypto_nss.c:364 ../libnm-util/crypto_nss.c:361
#, c-format
msgid "Failed to set symmetric key for encryption."
msgstr "Misslyckades med att ställa in symmetrisk nyckel för kryptering."
-#: ../libnm-util/crypto_nss.c:376
+#: ../libnm-core/crypto_nss.c:372 ../libnm-util/crypto_nss.c:369
#, c-format
msgid "Failed to set IV for encryption."
msgstr "Misslyckades med att ställa in IV för kryptering."
-#: ../libnm-util/crypto_nss.c:384
+#: ../libnm-core/crypto_nss.c:380 ../libnm-util/crypto_nss.c:377
#, c-format
msgid "Failed to initialize the encryption context."
msgstr "Misslyckades med att initiera krypteringskontexten."
-#: ../libnm-util/crypto_nss.c:392
+#: ../libnm-core/crypto_nss.c:388 ../libnm-util/crypto_nss.c:385
#, c-format
msgid "Failed to encrypt: %d."
msgstr "Misslyckades med att kryptera: %d."
-#: ../libnm-util/crypto_nss.c:400
+#: ../libnm-core/crypto_nss.c:396 ../libnm-util/crypto_nss.c:393
#, c-format
msgid "Unexpected amount of data after encrypting."
msgstr "Oväntad mängd data efter kryptering."
-#: ../libnm-util/crypto_nss.c:443
+#: ../libnm-core/crypto_nss.c:436 ../libnm-util/crypto_nss.c:433
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "Kunde inte avkoda certifikat: %d"
-#: ../libnm-util/crypto_nss.c:478
+#: ../libnm-core/crypto_nss.c:471
#, c-format
-msgid "Couldn't convert password to UCS2: %d"
-msgstr "Kunde inte konvertera lösenord till UCS2: %d"
+msgid "Password must be UTF-8"
+msgstr "Lösenord måste vara i UTF-8"
-#: ../libnm-util/crypto_nss.c:506
+#: ../libnm-core/crypto_nss.c:501 ../libnm-util/crypto_nss.c:496
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %d"
msgstr "Kunde inte initiera PKCS#12-avkodare: %d"
-#: ../libnm-util/crypto_nss.c:515
+#: ../libnm-core/crypto_nss.c:510 ../libnm-util/crypto_nss.c:505
#, c-format
msgid "Couldn't decode PKCS#12 file: %d"
msgstr "Kunde inte avkoda PKCS#12-fil: %d"
-#: ../libnm-util/crypto_nss.c:524
+#: ../libnm-core/crypto_nss.c:519 ../libnm-util/crypto_nss.c:514
#, c-format
msgid "Couldn't verify PKCS#12 file: %d"
msgstr "Kunde inte verifiera PKCS#12-fil: %d"
-#: ../libnm-util/crypto_nss.c:568
+#: ../libnm-core/crypto_nss.c:564 ../libnm-util/crypto_nss.c:558
msgid "Could not generate random data."
msgstr "Kunde inte generera slumpmässigt data."
-#: ../libnm-util/nm-utils.c:2040
+#: ../libnm-core/nm-connection.c:247
+msgid "wrong type; should be a list of strings."
+msgstr "fel typ; borde vara en lista av strängar."
+
+#: ../libnm-core/nm-connection.c:302
+msgid "unknown setting name"
+msgstr "okänt inställningsnamn"
+
+#: ../libnm-core/nm-connection.c:738
+msgid "setting not found"
+msgstr "inställningen hittades inte"
+
+#: ../libnm-core/nm-connection.c:803
+msgid "setting not allowed in slave connection"
+msgstr "inställningen finns inte i slavanslutningen"
+
+#: ../libnm-core/nm-connection.c:814
+msgid "setting is required for non-slave connections"
+msgstr "inställning krävs för anslutningar som inte är slavar"
+
+#: ../libnm-core/nm-connection.c:880
+msgid "Unexpected failure to verify the connection"
+msgstr "Oväntat misslyckande med att verifiera anslutningen"
+
+#: ../libnm-core/nm-connection.c:911
+msgid "Unexpected failure to normalize the connection"
+msgstr "Oväntat misslyckande med att normalisera anslutningen"
+
+#: ../libnm-core/nm-setting-8021x.c:577 ../libnm-util/nm-setting-8021x.c:596
+msgid "CA certificate must be in X.509 format"
+msgstr "CA-certifikat måste vara i X.509-format"
+
+#: ../libnm-core/nm-setting-8021x.c:892 ../libnm-core/nm-setting-8021x.c:1156
+#: ../libnm-core/nm-setting-8021x.c:1476 ../libnm-util/nm-setting-8021x.c:914
+#: ../libnm-util/nm-setting-8021x.c:1177 ../libnm-util/nm-setting-8021x.c:1500
+msgid "invalid certificate format"
+msgstr "ogiltigt certifikatformat"
+
+#: ../libnm-core/nm-setting-8021x.c:1758 ../libnm-util/nm-setting-8021x.c:1769
+msgid "invalid private key"
+msgstr "ogiltig privat nyckel"
+
+#: ../libnm-core/nm-setting-8021x.c:2068 ../libnm-util/nm-setting-8021x.c:2080
+msgid "invalid phase2 private key"
+msgstr "ogiltig privat nyckel för phase2"
+
+#: ../libnm-core/nm-setting-8021x.c:2270 ../libnm-core/nm-setting-8021x.c:2287
+#: ../libnm-core/nm-setting-8021x.c:2317 ../libnm-core/nm-setting-8021x.c:2334
+#: ../libnm-core/nm-setting-8021x.c:2375 ../libnm-core/nm-setting-8021x.c:2387
+#: ../libnm-core/nm-setting-8021x.c:2405 ../libnm-core/nm-setting-8021x.c:2417
+#: ../libnm-core/nm-setting-8021x.c:2441 ../libnm-core/nm-setting-8021x.c:2623
+#: ../libnm-core/nm-setting-adsl.c:188
+#: ../libnm-core/nm-setting-bluetooth.c:118
+#: ../libnm-core/nm-setting-bluetooth.c:136
+#: ../libnm-core/nm-setting-cdma.c:140
+#: ../libnm-core/nm-setting-connection.c:762
+#: ../libnm-core/nm-setting-connection.c:778
+#: ../libnm-core/nm-setting-connection.c:808
+#: ../libnm-core/nm-setting-ip4-config.c:880
+#: ../libnm-core/nm-setting-ip6-config.c:799
+#: ../libnm-core/nm-setting-ip6-config.c:863
+#: ../libnm-core/nm-setting-olpc-mesh.c:106
+#: ../libnm-core/nm-setting-pppoe.c:141 ../libnm-core/nm-setting-vpn.c:378
+#: ../libnm-core/nm-setting-wimax.c:115
+#: ../libnm-core/nm-setting-wireless-security.c:861
+#: ../libnm-core/nm-setting-wireless.c:692 ../libnm-core/nm-setting.c:1764
+#: ../libnm-util/nm-setting.c:1370 ../libnm-util/nm-setting.c:1389
+#: ../libnm-util/nm-setting.c:1407 ../libnm-util/nm-setting-8021x.c:2282
+#: ../libnm-util/nm-setting-8021x.c:2299 ../libnm-util/nm-setting-8021x.c:2340
+#: ../libnm-util/nm-setting-8021x.c:2357 ../libnm-util/nm-setting-8021x.c:2409
+#: ../libnm-util/nm-setting-8021x.c:2421 ../libnm-util/nm-setting-8021x.c:2439
+#: ../libnm-util/nm-setting-8021x.c:2451 ../libnm-util/nm-setting-8021x.c:2475
+#: ../libnm-util/nm-setting-8021x.c:2653 ../libnm-util/nm-setting-adsl.c:208
+#: ../libnm-util/nm-setting-bluetooth.c:140
+#: ../libnm-util/nm-setting-bluetooth.c:158
+#: ../libnm-util/nm-setting-cdma.c:161
+#: ../libnm-util/nm-setting-connection.c:767
+#: ../libnm-util/nm-setting-connection.c:783
+#: ../libnm-util/nm-setting-connection.c:844
+#: ../libnm-util/nm-setting-ip4-config.c:828
+#: ../libnm-util/nm-setting-ip6-config.c:809
+#: ../libnm-util/nm-setting-ip6-config.c:873
+#: ../libnm-util/nm-setting-olpc-mesh.c:122
+#: ../libnm-util/nm-setting-pppoe.c:162 ../libnm-util/nm-setting-vpn.c:402
+#: ../libnm-util/nm-setting-wimax.c:137
+#: ../libnm-util/nm-setting-wireless-security.c:891
+#: ../libnm-util/nm-setting-wireless.c:750
+msgid "property is missing"
+msgstr "egenskapen saknas"
+
+#: ../libnm-core/nm-setting-8021x.c:2277 ../libnm-core/nm-setting-8021x.c:2294
+#: ../libnm-core/nm-setting-8021x.c:2324 ../libnm-core/nm-setting-8021x.c:2341
+#: ../libnm-core/nm-setting-8021x.c:2381 ../libnm-core/nm-setting-8021x.c:2393
+#: ../libnm-core/nm-setting-8021x.c:2411 ../libnm-core/nm-setting-8021x.c:2423
+#: ../libnm-core/nm-setting-8021x.c:2448 ../libnm-core/nm-setting-adsl.c:195
+#: ../libnm-core/nm-setting-adsl.c:204 ../libnm-core/nm-setting-cdma.c:156
+#: ../libnm-core/nm-setting-cdma.c:165
+#: ../libnm-core/nm-setting-connection.c:769
+#: ../libnm-core/nm-setting-connection.c:819
+#: ../libnm-core/nm-setting-gsm.c:224 ../libnm-core/nm-setting-gsm.c:281
+#: ../libnm-core/nm-setting-gsm.c:290
+#: ../libnm-core/nm-setting-ip4-config.c:945
+#: ../libnm-core/nm-setting-ip4-config.c:954
+#: ../libnm-core/nm-setting-pppoe.c:148 ../libnm-core/nm-setting-pppoe.c:157
+#: ../libnm-core/nm-setting-vpn.c:387 ../libnm-core/nm-setting-vpn.c:397
+#: ../libnm-core/nm-setting-wimax.c:124
+#: ../libnm-core/nm-setting-wireless-security.c:891
+#: ../libnm-core/nm-setting-wireless-security.c:899
+#: ../libnm-core/nm-setting-wireless-security.c:923
+#: ../libnm-util/nm-setting-8021x.c:2289 ../libnm-util/nm-setting-8021x.c:2306
+#: ../libnm-util/nm-setting-8021x.c:2347 ../libnm-util/nm-setting-8021x.c:2364
+#: ../libnm-util/nm-setting-8021x.c:2415 ../libnm-util/nm-setting-8021x.c:2427
+#: ../libnm-util/nm-setting-8021x.c:2445 ../libnm-util/nm-setting-8021x.c:2457
+#: ../libnm-util/nm-setting-8021x.c:2482 ../libnm-util/nm-setting-adsl.c:215
+#: ../libnm-util/nm-setting-adsl.c:224 ../libnm-util/nm-setting-cdma.c:177
+#: ../libnm-util/nm-setting-cdma.c:186
+#: ../libnm-util/nm-setting-connection.c:774
+#: ../libnm-util/nm-setting-connection.c:851
+#: ../libnm-util/nm-setting-gsm.c:281 ../libnm-util/nm-setting-gsm.c:338
+#: ../libnm-util/nm-setting-gsm.c:347
+#: ../libnm-util/nm-setting-ip4-config.c:893
+#: ../libnm-util/nm-setting-ip4-config.c:902
+#: ../libnm-util/nm-setting-pppoe.c:169 ../libnm-util/nm-setting-pppoe.c:178
+#: ../libnm-util/nm-setting-vpn.c:411 ../libnm-util/nm-setting-vpn.c:421
+#: ../libnm-util/nm-setting-wimax.c:146
+#: ../libnm-util/nm-setting-wireless-security.c:921
+#: ../libnm-util/nm-setting-wireless-security.c:929
+#: ../libnm-util/nm-setting-wireless-security.c:953
+msgid "property is empty"
+msgstr "egenskap är tom"
+
+#: ../libnm-core/nm-setting-8021x.c:2306 ../libnm-core/nm-setting-8021x.c:2353
+#: ../libnm-util/nm-setting-8021x.c:2317 ../libnm-util/nm-setting-8021x.c:2329
+#: ../libnm-util/nm-setting-8021x.c:2375 ../libnm-util/nm-setting-8021x.c:2387
+#, c-format
+msgid "has to match '%s' property for PKCS#12"
+msgstr "mÃ¥ste matcha â€%sâ€-egenskapen för PKCS#12"
+
+#: ../libnm-core/nm-setting-8021x.c:2598 ../libnm-core/nm-setting-8021x.c:2632
+#: ../libnm-core/nm-setting-bluetooth.c:127
+#: ../libnm-core/nm-setting-infiniband.c:191
+#: ../libnm-core/nm-setting-infiniband.c:206
+#: ../libnm-core/nm-setting-ip4-config.c:936
+#: ../libnm-core/nm-setting-ip6-config.c:854
+#: ../libnm-core/nm-setting-olpc-mesh.c:135
+#: ../libnm-core/nm-setting-wimax.c:133 ../libnm-core/nm-setting-wired.c:618
+#: ../libnm-core/nm-setting-wired.c:628
+#: ../libnm-core/nm-setting-wireless-security.c:942
+#: ../libnm-core/nm-setting-wireless-security.c:951
+#: ../libnm-core/nm-setting-wireless-security.c:959
+#: ../libnm-core/nm-setting-wireless-security.c:967
+#: ../libnm-core/nm-setting-wireless-security.c:975
+#: ../libnm-core/nm-setting-wireless-security.c:984
+#: ../libnm-core/nm-setting-wireless-security.c:993
+#: ../libnm-core/nm-setting-wireless-security.c:1002
+#: ../libnm-core/nm-setting-wireless-security.c:1038
+#: ../libnm-core/nm-setting-wireless-security.c:1048
+#: ../libnm-core/nm-setting-wireless.c:753
+#: ../libnm-core/nm-setting-wireless.c:762
+#: ../libnm-core/nm-setting-wireless.c:771 ../libnm-util/nm-setting.c:1380
+#: ../libnm-util/nm-setting.c:1398 ../libnm-util/nm-setting.c:1417
+#: ../libnm-util/nm-setting-8021x.c:2628 ../libnm-util/nm-setting-8021x.c:2662
+#: ../libnm-util/nm-setting-bluetooth.c:149
+#: ../libnm-util/nm-setting-infiniband.c:204
+#: ../libnm-util/nm-setting-infiniband.c:220
+#: ../libnm-util/nm-setting-ip4-config.c:884
+#: ../libnm-util/nm-setting-ip6-config.c:864
+#: ../libnm-util/nm-setting-olpc-mesh.c:150
+#: ../libnm-util/nm-setting-wimax.c:155 ../libnm-util/nm-setting-wired.c:660
+#: ../libnm-util/nm-setting-wired.c:669
+#: ../libnm-util/nm-setting-wireless-security.c:972
+#: ../libnm-util/nm-setting-wireless-security.c:981
+#: ../libnm-util/nm-setting-wireless-security.c:989
+#: ../libnm-util/nm-setting-wireless-security.c:997
+#: ../libnm-util/nm-setting-wireless-security.c:1005
+#: ../libnm-util/nm-setting-wireless-security.c:1014
+#: ../libnm-util/nm-setting-wireless-security.c:1023
+#: ../libnm-util/nm-setting-wireless-security.c:1032
+#: ../libnm-util/nm-setting-wireless-security.c:1068
+#: ../libnm-util/nm-setting-wireless-security.c:1078
+#: ../libnm-util/nm-setting-wireless.c:810
+#: ../libnm-util/nm-setting-wireless.c:819
+#: ../libnm-util/nm-setting-wireless.c:828
+msgid "property is invalid"
+msgstr "ogiltig egenskap"
+
+#: ../libnm-core/nm-setting-8021x.c:2657 ../libnm-core/nm-setting-8021x.c:2667
+#: ../libnm-core/nm-setting-8021x.c:2677 ../libnm-core/nm-setting-8021x.c:2687
+#: ../libnm-core/nm-setting-8021x.c:2697 ../libnm-core/nm-setting-adsl.c:216
+#: ../libnm-core/nm-setting-adsl.c:228
+#: ../libnm-core/nm-setting-bluetooth.c:144
+#: ../libnm-core/nm-setting-wireless-security.c:870
+#: ../libnm-util/nm-setting-8021x.c:2687 ../libnm-util/nm-setting-8021x.c:2697
+#: ../libnm-util/nm-setting-8021x.c:2707 ../libnm-util/nm-setting-8021x.c:2717
+#: ../libnm-util/nm-setting-8021x.c:2727 ../libnm-util/nm-setting-adsl.c:236
+#: ../libnm-util/nm-setting-adsl.c:248
+#: ../libnm-util/nm-setting-bluetooth.c:166
+#: ../libnm-util/nm-setting-wireless-security.c:900
+#, c-format
+msgid "'%s' is not a valid value for the property"
+msgstr "Fel: â€%s†är inte ett giltigt värde för egenskapen"
+
+#: ../libnm-core/nm-setting-bluetooth.c:166
+#, c-format
+msgid "'%s' connection requires '%s' or '%s' setting"
+msgstr "â€%sâ€-anslutning kräver â€%s†eller â€%sâ€-inställning"
+
+#: ../libnm-core/nm-setting-bond.c:458 ../libnm-util/nm-setting-bond.c:501
+#, c-format
+msgid "invalid option '%s' or its value '%s'"
+msgstr "ogiltigt alternativ â€%s†eller dess värde â€%sâ€"
+
+#: ../libnm-core/nm-setting-bond.c:477 ../libnm-util/nm-setting-bond.c:520
+#, c-format
+msgid "only one of '%s' and '%s' can be set"
+msgstr "endast en av â€%s†och â€%s†kan sättas"
+
+#: ../libnm-core/nm-setting-bond.c:488 ../libnm-util/nm-setting-bond.c:531
+#, c-format
+msgid "mandatory option '%s' is missing"
+msgstr "obligatoriskt värde â€%s†saknas"
+
+#: ../libnm-core/nm-setting-bond.c:497 ../libnm-util/nm-setting-bond.c:540
+#, c-format
+msgid "'%s' is not a valid value for '%s'"
+msgstr "â€%s†är inte ett giltigt värde för â€%sâ€."
+
+#: ../libnm-core/nm-setting-bond.c:510 ../libnm-util/nm-setting-bond.c:553
+#, c-format
+msgid "'%s=%s' is incompatible with '%s > 0'"
+msgstr "â€%s=%s†är inte kompatibel med â€%s†> 0"
+
+#: ../libnm-core/nm-setting-bond.c:523 ../libnm-util/nm-setting-bond.c:566
+#, c-format
+msgid "'%s' is not a valid interface name for '%s' option"
+msgstr "â€%s†är inte ett giltigt gränssnittssnamn för flaggan â€%sâ€"
+
+#: ../libnm-core/nm-setting-bond.c:533 ../libnm-util/nm-setting-bond.c:576
+#, c-format
+msgid "'%s' option is only valid for '%s=%s'"
+msgstr "â€%sâ€-alternativet är endast giltigt dÃ¥ â€%s=%sâ€"
+
+#: ../libnm-core/nm-setting-bond.c:546 ../libnm-util/nm-setting-bond.c:589
+#, c-format
+msgid "'%s=%s' is not a valid configuration for '%s'"
+msgstr "â€%s=%s†är inte en giltig konfiguration â€%sâ€"
+
+#: ../libnm-core/nm-setting-bond.c:559 ../libnm-core/nm-setting-bond.c:568
+#: ../libnm-core/nm-setting-bond.c:588 ../libnm-core/nm-setting-bond.c:624
+#: ../libnm-util/nm-setting-bond.c:602 ../libnm-util/nm-setting-bond.c:611
+#: ../libnm-util/nm-setting-bond.c:631 ../libnm-util/nm-setting-bond.c:667
+#, c-format
+msgid "'%s' option requires '%s' option to be set"
+msgstr "â€%sâ€-alternativet kräver att â€%sâ€-alternativet är satt"
+
+#: ../libnm-core/nm-setting-bond.c:599 ../libnm-util/nm-setting-bond.c:642
+#, c-format
+msgid "'%s' option is empty"
+msgstr "â€%sâ€-alternativet är tomt"
+
+#: ../libnm-core/nm-setting-bond.c:611 ../libnm-util/nm-setting-bond.c:654
+#, c-format
+msgid "'%s' is not a valid IPv4 address for '%s' option"
+msgstr "â€%s†är inte en giltig IPv4-adress för flaggan â€%sâ€."
+
+#: ../libnm-core/nm-setting-bond.c:638 ../libnm-util/nm-setting-bond.c:681
+#, c-format
+msgid "'%s' option is only valid with mode '%s'"
+msgstr "â€%sâ€-alternativet är endast giltigt med läget â€%sâ€"
+
+#: ../libnm-core/nm-setting-bridge-port.c:121
+#: ../libnm-core/nm-setting-bridge-port.c:133
+#: ../libnm-util/nm-setting-bridge-port.c:153
+#: ../libnm-util/nm-setting-bridge-port.c:165
#, c-format
-msgid "Not enough memory to make encryption key."
-msgstr "Inte tillräckligt mycket minne för att skapa krypteringsnyckel."
+msgid "'%d' is not a valid value for the property (should be <= %d)"
+msgstr "â€%d†är inte ett giltigt värde för egenskapen (ska vara <=%d)"
-#: ../libnm-util/nm-utils.c:2150
-msgid "Could not allocate memory for PEM file creation."
-msgstr "Kunde inte allokera minne för att skapa PEM-fil."
+#: ../libnm-core/nm-setting-bridge-port.c:158
+#: ../libnm-core/nm-setting-team-port.c:101
+#, c-format
+msgid ""
+"A connection with a '%s' setting must have the slave-type set to '%s'. "
+"Instead it is '%s'"
+msgstr ""
+"En anslutning med â€%sâ€-inställning mÃ¥ste ha slavtypen satt till â€%sâ€. "
+"Istället är den â€%sâ€"
+
+#: ../libnm-core/nm-setting-bridge.c:204 ../libnm-util/nm-setting-bridge.c:268
+#, c-format
+msgid "value '%d' is out of range <%d-%d>"
+msgstr "värdet â€%d†är utanför intervallet <%d-%d>"
+
+#: ../libnm-core/nm-setting-bridge.c:221 ../libnm-core/nm-setting-wired.c:593
+#: ../libnm-core/nm-setting-wired.c:652 ../libnm-util/nm-setting-bridge.c:285
+#: ../libnm-util/nm-setting-wired.c:635 ../libnm-util/nm-setting-wired.c:693
+msgid "is not a valid MAC address"
+msgstr "är inte en giltigt MAC-adress"
+
+#: ../libnm-core/nm-setting-cdma.c:147 ../libnm-util/nm-setting-cdma.c:168
+msgid "property is empty'"
+msgstr "egenskap är tom'"
+
+#: ../libnm-core/nm-setting-connection.c:741
+#, c-format
+msgid "setting required for connection of type '%s'"
+msgstr "inställning krävs för anslutning av typen â€%sâ€"
-#: ../libnm-util/nm-utils.c:2162
+#: ../libnm-core/nm-setting-connection.c:829
#, c-format
-msgid "Could not allocate memory for writing IV to PEM file."
-msgstr "Kunde inte allokera minne för skrivning av IV till PEM-fil."
+msgid "connection type '%s' is not valid"
+msgstr "anslutningstypen â€%s†är inte giltig"
-#: ../libnm-util/nm-utils.c:2174
+#: ../libnm-core/nm-setting-connection.c:864
+#: ../libnm-util/nm-setting-connection.c:876
#, c-format
-msgid "Could not allocate memory for writing encrypted key to PEM file."
-msgstr "Kunde inte allokera minne för skrivning av krypterad nyckel till PEM-fil."
+msgid "Unknown slave type '%s'"
+msgstr "Okänd slavtyp â€%sâ€"
-#: ../libnm-util/nm-utils.c:2193
+#: ../libnm-core/nm-setting-connection.c:874
+#: ../libnm-util/nm-setting-connection.c:886
+msgid "Slave connections need a valid '"
+msgstr "Slavanslutningar behöver en giltig"
+
+#: ../libnm-core/nm-setting-connection.c:895
+#: ../libnm-util/nm-setting-connection.c:895
+msgid "Cannot set '"
+msgstr "kan inte sätta"
+
+#: ../libnm-core/nm-setting-connection.c:908
#, c-format
-msgid "Could not allocate memory for PEM file data."
-msgstr "Kunde inte allokera minne för PEM-fildata."
+msgid "property type should be set to '%s'"
+msgstr "egenskapstypen borde vara satt till â€%sâ€"
+
+#: ../libnm-core/nm-setting-connection.c:923
+#, c-format
+msgid "slave-type '%s' requires a '%s' setting in the connection"
+msgstr "slavtypen â€%s†kräver en â€%sâ€-inställning i anslutningen"
+
+#: ../libnm-core/nm-setting-connection.c:933
+#, c-format
+msgid "Detect a slave connection with '"
+msgstr "Upptäck en slavanslutning med '"
+
+#: ../libnm-core/nm-setting-dcb.c:521 ../libnm-util/nm-setting-dcb.c:593
+msgid "flags invalid"
+msgstr "ogiltiga flaggor"
+
+#: ../libnm-core/nm-setting-dcb.c:530 ../libnm-util/nm-setting-dcb.c:602
+msgid "flags invalid - disabled"
+msgstr "ogiltiga flaggor - inaktiverad"
+
+#: ../libnm-core/nm-setting-dcb.c:556 ../libnm-core/nm-setting-dcb.c:605
+#: ../libnm-util/nm-setting-dcb.c:628 ../libnm-util/nm-setting-dcb.c:677
+msgid "property invalid (not enabled)"
+msgstr "egenskap ogiltig (inaktiverad)"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1
+#: ../libnm-core/nm-setting-dcb.c:565 ../libnm-util/nm-setting-dcb.c:637
+msgid "element invalid"
+msgstr "ogiltigt element"
+
+#: ../libnm-core/nm-setting-dcb.c:580 ../libnm-util/nm-setting-dcb.c:652
+msgid "sum not 100%"
+msgstr "summan inte 100%"
+
+#: ../libnm-core/nm-setting-dcb.c:614 ../libnm-core/nm-setting-dcb.c:646
+#: ../libnm-util/nm-setting-dcb.c:686 ../libnm-util/nm-setting-dcb.c:718
+msgid "property invalid"
+msgstr "egenskap ogiltig"
+
+#: ../libnm-core/nm-setting-dcb.c:636 ../libnm-util/nm-setting-dcb.c:708
+msgid "property missing"
+msgstr "egenskap saknas"
+
+#: ../libnm-core/nm-setting-gsm.c:237 ../libnm-util/nm-setting-gsm.c:294
+#, c-format
+msgid "property value '%s' is empty or too long (>64)"
+msgstr "egenskapsvärde â€%s†är tomt eller för lÃ¥ngt (>64)"
+
+#: ../libnm-core/nm-setting-gsm.c:269 ../libnm-util/nm-setting-gsm.c:326
+#, c-format
+msgid "'%s' contains invalid char(s) (use [A-Za-z._-])"
+msgstr "â€%s†innehÃ¥ller ogiltig(t/a) tecken (använd [A-Za-z._-])"
+
+#: ../libnm-core/nm-setting-gsm.c:304 ../libnm-util/nm-setting-gsm.c:361
+#, c-format
+msgid "'%s' length is invalid (should be 5 or 6 digits)"
+msgstr "â€%sâ€-längden är ogiltig (ska vara 5 eller 6 siffror)"
+
+#: ../libnm-core/nm-setting-infiniband.c:216
+#: ../libnm-util/nm-setting-infiniband.c:230
+msgid "not a valid interface name"
+msgstr "ogiltigt gränssnittsnamn"
+
+#: ../libnm-core/nm-setting-infiniband.c:224
+#: ../libnm-util/nm-setting-infiniband.c:238
+msgid "Must specify a P_Key if specifying parent"
+msgstr "Måste ange en P_key om förälder anges"
+
+#: ../libnm-core/nm-setting-infiniband.c:234
+#: ../libnm-util/nm-setting-infiniband.c:248
+msgid "InfiniBand P_Key connection did not specify parent interface name"
+msgstr "IfiniBand P_Key-anslutning angav inte ett föräldragränssnittnamn"
+
+#: ../libnm-core/nm-setting-infiniband.c:270
+#: ../libnm-util/nm-setting-infiniband.c:284
+#, c-format
+msgid ""
+"interface name of software infiniband device must be '%s' or unset (instead "
+"it is '%s')"
+msgstr ""
+"gränssnittsnamnet pÃ¥ infiniband-mjukvaruenheten mÃ¥ste vara â€%s†eller inte "
+"sättas (istället är den â€%sâ€)"
+
+#: ../libnm-core/nm-setting-infiniband.c:285
+#, c-format
+msgid "mtu for transport mode '%s' can be at most %d but it is %d"
+msgstr "mtu för transportläge â€%s†kan som mest vara %d men är %d"
+
+#: ../libnm-core/nm-setting-ip4-config.c:890
+#: ../libnm-core/nm-setting-ip6-config.c:809
+#: ../libnm-util/nm-setting-ip4-config.c:838
+#: ../libnm-util/nm-setting-ip6-config.c:819
+#, c-format
+msgid "this property cannot be empty for '%s=%s'"
+msgstr "denna egenskap kan inte vara tom för â€%s=%sâ€"
+
+#: ../libnm-core/nm-setting-ip4-config.c:902
+#: ../libnm-core/nm-setting-ip4-config.c:912
+#: ../libnm-core/nm-setting-ip4-config.c:924
+#: ../libnm-core/nm-setting-ip6-config.c:822
+#: ../libnm-core/nm-setting-ip6-config.c:832
+#: ../libnm-core/nm-setting-ip6-config.c:842
+#: ../libnm-util/nm-setting-ip4-config.c:850
+#: ../libnm-util/nm-setting-ip4-config.c:860
+#: ../libnm-util/nm-setting-ip4-config.c:872
+#: ../libnm-util/nm-setting-ip6-config.c:832
+#: ../libnm-util/nm-setting-ip6-config.c:842
+#: ../libnm-util/nm-setting-ip6-config.c:852
+#, c-format
+msgid "this property is not allowed for '%s=%s'"
+msgstr "denna egenskap är inte tillÃ¥ten för â€%s=%sâ€"
+
+#: ../libnm-core/nm-setting-ip4-config.c:971
+#: ../libnm-util/nm-setting-ip4-config.c:916
+#, c-format
+msgid "%d. IPv4 address is invalid"
+msgstr "%d. IPv4-adressen är ogiltig"
+
+#: ../libnm-core/nm-setting-ip4-config.c:981
+#: ../libnm-util/nm-setting-ip4-config.c:926
+#, c-format
+msgid "%d. IPv4 address has invalid prefix"
+msgstr "%d. IPv4-adressen har ogiltigt prefix"
+
+#: ../libnm-core/nm-setting-ip4-config.c:991
+#, c-format
+msgid "%d. IPv4 address has invalid label '%s'"
+msgstr "%d. IPv4-adressen har ogiltig etikett â€%sâ€"
+
+#: ../libnm-core/nm-setting-ip4-config.c:1002
+#, c-format
+msgid "IPv4 address / label count mismatch (%d vs %d)"
+msgstr "IPv4-address / etikettsantal stämmer inte (%d vs %d)"
+
+#: ../libnm-core/nm-setting-ip4-config.c:1018
+#: ../libnm-util/nm-setting-ip4-config.c:942
+#, c-format
+msgid "%d. route is invalid"
+msgstr "%d.-rutt ogiltig"
+
+#: ../libnm-core/nm-setting-ip4-config.c:1028
+#: ../libnm-util/nm-setting-ip4-config.c:952
+#, c-format
+msgid "%d. route has invalid prefix"
+msgstr "%d.-rutten har ett ogiltigt prefix"
+
+#: ../libnm-core/nm-setting-ip4-config.c:1044
+#: ../libnm-core/nm-setting-ip6-config.c:876
+#, c-format
+msgid "%d. DNS server address is invalid"
+msgstr "%d. DNS-serveradressen är ogiltig"
+
+#: ../libnm-core/nm-setting-ip6-config.c:821
+#: ../libnm-util/nm-setting-ip6-config.c:831
+#, c-format
+msgid "'%s' not allowed for %s=%s"
+msgstr "â€%s†inte tillÃ¥tet för %s=%s"
+
+#: ../libnm-core/nm-setting-olpc-mesh.c:116
+#: ../libnm-core/nm-setting-wireless.c:702
+#: ../libnm-util/nm-setting-olpc-mesh.c:131
+#: ../libnm-util/nm-setting-wireless.c:759
+msgid "SSID length is out of range <1-32> bytes"
+msgstr "SSID-längden är utanför intervallet <1-32> byte"
+
+#: ../libnm-core/nm-setting-olpc-mesh.c:125
+#: ../libnm-core/nm-setting-wireless.c:742
+#: ../libnm-util/nm-setting-olpc-mesh.c:140
+#: ../libnm-util/nm-setting-wireless.c:799
+#, c-format
+msgid "'%d' is not a valid channel"
+msgstr "â€%d†är inte en giltig kanal"
+
+#: ../libnm-core/nm-setting-ppp.c:365 ../libnm-util/nm-setting-ppp.c:387
+#, c-format
+msgid "'%d' is out of valid range <128-16384>"
+msgstr "â€%d†är utanför giltigt intervall <128-16384>"
+
+#: ../libnm-core/nm-setting-ppp.c:378 ../libnm-util/nm-setting-ppp.c:400
+#, c-format
+msgid "setting this property requires non-zero '%s' property"
+msgstr "att sätta denna egenskap kräver icke-noll för â€%sâ€-egenskapen."
+
+#: ../libnm-core/nm-setting-vlan.c:512 ../libnm-util/nm-setting-vlan.c:554
+#, c-format
+msgid "'%s' value doesn't match '%s=%s'"
+msgstr "â€%sâ€-värde matchar inte â€%s=%sâ€"
+
+#: ../libnm-core/nm-setting-vlan.c:523 ../libnm-util/nm-setting-vlan.c:565
+#, c-format
+msgid "'%s' is neither an UUID nor an interface name"
+msgstr "â€%s†är varken ett UUID eller ett gränssnittsnamn"
+
+#: ../libnm-core/nm-setting-vlan.c:537 ../libnm-util/nm-setting-vlan.c:578
+#, c-format
+msgid "property is not specified and neither is '%s:%s'"
+msgstr "egenskapen är inte angiven och det är inte heller â€%s:%sâ€"
+
+#: ../libnm-core/nm-setting-vlan.c:550 ../libnm-util/nm-setting-vlan.c:591
+msgid "flags are invalid"
+msgstr "flaggorna är ogiltiga"
+
+#: ../libnm-core/nm-setting-vpn.c:419
+#, c-format
+msgid "secret was empty"
+msgstr "hemlighet är tom"
+
+#: ../libnm-core/nm-setting-vpn.c:449
+msgid "setting contained a secret with an empty name"
+msgstr "inställning innehåller en hemlighet med ett tomt namn"
+
+#: ../libnm-core/nm-setting-vpn.c:457
+#, c-format
+msgid "secret value was empty"
+msgstr "hemligt värde var tomt"
+
+#: ../libnm-core/nm-setting-vpn.c:504 ../libnm-core/nm-setting.c:1567
+msgid "not a secret property"
+msgstr "inte en hemlig egenskap"
+
+#: ../libnm-core/nm-setting-vpn.c:510
+msgid "secret is not of correct type"
+msgstr "hemlighet är inte av korrekt typ"
+
+#: ../libnm-core/nm-setting-vpn.c:545
+#, c-format
+msgid "failed to convert value '%s' to uint"
+msgstr "misslyckades med att konvertera värdet â€%s†till uint"
+
+#: ../libnm-core/nm-setting-vpn.c:553
+msgid "secret flags property not found"
+msgstr "hemliga flaggegenskaper hittades inte"
+
+#: ../libnm-core/nm-setting-wired.c:573 ../libnm-util/nm-setting-wired.c:615
+#, c-format
+msgid "'%s' is not a valid Ethernet port value"
+msgstr "â€%s†är inte ett giltigt portvärde för Ethernet"
+
+#: ../libnm-core/nm-setting-wired.c:583 ../libnm-util/nm-setting-wired.c:625
+#, c-format
+msgid "'%s' is not a valid duplex value"
+msgstr "â€%s†är inte ett giltigt värde för duplex"
+
+#: ../libnm-core/nm-setting-wired.c:641 ../libnm-util/nm-setting-wired.c:682
+#, c-format
+msgid "invalid '%s' or its value '%s'"
+msgstr "ogiltig â€%s†eller dess värde â€%s"
+
+#: ../libnm-core/nm-setting-wireless-security.c:882
+#: ../libnm-util/nm-setting-wireless-security.c:912
+#, c-format
+msgid "'%s' security requires '%s=%s'"
+msgstr "â€%sâ€-säkerhet kräver â€%s=%sâ€"
+
+#: ../libnm-core/nm-setting-wireless-security.c:911
+#: ../libnm-util/nm-setting-wireless-security.c:941
+#, c-format
+msgid "'%s' security requires '%s' setting presence"
+msgstr "â€%sâ€-säkerhet kräver en â€%sâ€-inställning"
+
+#: ../libnm-core/nm-setting-wireless-security.c:932
+#: ../libnm-util/nm-setting-wireless-security.c:962
+#, c-format
+msgid "'%d' value is out of range <0-3>"
+msgstr "â€%dâ€-värdet är utanför intervallet <0-3>"
+
+#: ../libnm-core/nm-setting-wireless-security.c:1029
+#: ../libnm-util/nm-setting-wireless-security.c:1059
+#, c-format
+msgid "'%s' connections require '%s' in this property"
+msgstr "â€%sâ€-anslutningar kräver â€%s†i denna egenskap"
+
+#: ../libnm-core/nm-setting-wireless-security.c:1059
+#: ../libnm-util/nm-setting-wireless-security.c:1089
+#, c-format
+msgid "'%s' can only be used with '%s=%s' (WEP)"
+msgstr "â€%s†kan endast användas med â€%s=%s†(WEP)"
+
+#: ../libnm-core/nm-setting-wireless.c:711
+#: ../libnm-util/nm-setting-wireless.c:768
+#, c-format
+msgid "'%s' is not a valid Wi-Fi mode"
+msgstr "â€%s†är inte ett giltig Wi-Fi-läge."
+
+#: ../libnm-core/nm-setting-wireless.c:721
+#: ../libnm-util/nm-setting-wireless.c:778
+#, c-format
+msgid "'%s' is not a valid band"
+msgstr "â€%s†är inte en giltig frekvens"
+
+#: ../libnm-core/nm-setting-wireless.c:731
+#, c-format
+msgid "'%s' requires setting '%s' property"
+msgstr "â€%s†kräver en â€%sâ€-inställning"
+
+#: ../libnm-core/nm-setting.c:1465
+msgid "secret not found"
+msgstr "hemlighet inte funnnen"
+
+#: ../libnm-core/nm-setting.c:1557
+msgid "secret is not set"
+msgstr "hemlighet inte angiven"
+
+#: ../libnm-core/nm-setting.c:1745
+msgid "missing setting"
+msgstr "saknar inställning"
+
+#: ../libnm-glib/nm-device.c:1792 ../libnm/nm-device.c:1602
+msgid "Bluetooth"
+msgstr "Bluetooth"
+
+#: ../libnm-glib/nm-device.c:1810 ../libnm/nm-device.c:1620
+msgid "ADSL"
+msgstr "ADSL"
+
+#: ../libnm-glib/nm-device.c:1838 ../libnm/nm-device.c:1648
+msgid "Wired"
+msgstr "Trådbunden"
+
+#: ../libnm-glib/nm-device.c:1869 ../libnm/nm-device.c:1679
+msgid "PCI"
+msgstr "PCI"
+
+#: ../libnm-glib/nm-device.c:1871 ../libnm/nm-device.c:1681
+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:1967 ../libnm-glib/nm-device.c:1986
+#: ../libnm/nm-device.c:1775 ../libnm/nm-device.c:1794
+#, c-format
+msgctxt "long device name"
+msgid "%s %s"
+msgstr "%s %s"
+
+#: ../libnm-glib/nm-remote-connection.c:149
+msgid "Disconnected by D-Bus"
+msgstr "Frånkopplad av D-Bus"
+
+#: ../libnm-util/crypto_nss.c:468
+#, c-format
+msgid "Couldn't convert password to UCS2: %d"
+msgstr "Kunde inte konvertera lösenord till UCS2: %d"
+
+#: ../libnm-util/nm-setting-bluetooth.c:184
+#, c-format
+msgid "requires '%s' or '%s' setting"
+msgstr "kräver â€%s†eller â€%sâ€-inställning"
+
+#: ../libnm-util/nm-setting-connection.c:861
+#, c-format
+msgid "requires presence of '%s' setting in the connection"
+msgstr "kräver â€%sâ€-inställning i anslutningen"
+
+#: ../libnm-util/nm-setting-vpn.c:561
+#, c-format
+msgid "Failed to convert '%s' value '%s' to uint"
+msgstr "Misslyckades med att konvertera â€%sâ€-värdet â€%s†till uint"
+
+#: ../libnm-util/nm-setting-vpn.c:568
+#, c-format
+msgid "Secret flags property '%s' not found"
+msgstr "Hemliga flaggegenskapen â€%s†hittades inte"
+
+#: ../libnm-util/nm-setting-wireless.c:788
+#, c-format
+msgid "requires setting '%s' property"
+msgstr "kräver en â€%sâ€-inställning"
+
+#: ../libnm/nm-device-adsl.c:70
+msgid "The connection was not an ADSL connection."
+msgstr "Anslutningen var inte en ADSL-anslutning."
+
+#: ../libnm/nm-device-bond.c:114
+msgid "The connection was not a bond connection."
+msgstr "Anslutningen var inte en kombinerad anslutning."
+
+#: ../libnm/nm-device-bridge.c:114
+msgid "The connection was not a bridge connection."
+msgstr "Anslutningen var inte en brygganslutning."
+
+#: ../libnm/nm-device-bt.c:139
+#, c-format
+msgid "The connection was not a Bluetooth connection."
+msgstr "Anslutningen var inte en Bluetooth-anslutning."
+
+#: ../libnm/nm-device-bt.c:148
+msgid "Invalid device Bluetooth address."
+msgstr "Ogiltig adress för Bluetooth-enhet."
+
+#: ../libnm/nm-device-bt.c:155
+msgid "The Bluetooth addresses of the device and the connection didn't match."
+msgstr "Adresserna för Bluetooth-enheten och anslutningen matchade inte."
+
+#: ../libnm/nm-device-bt.c:164
+msgid ""
+"The device is lacking Bluetooth capabilities required by the connection."
+msgstr "Enheten saknar Bluetooth-förmågorna som krävs av anslutningen."
+
+#: ../libnm/nm-device-ethernet.c:137
+msgid "The connection was not an Ethernet or PPPoE connection."
+msgstr "Anslutningen var inte en Ethernet eller PPPoE-anslutning."
+
+#: ../libnm/nm-device-ethernet.c:153 ../libnm/nm-device-infiniband.c:104
+#: ../libnm/nm-device-wifi.c:491 ../libnm/nm-device-wimax.c:310
+msgid "Invalid device MAC address."
+msgstr "Ogiltigt MAC-adress för enhet."
+
+#: ../libnm/nm-device-ethernet.c:159 ../libnm/nm-device-infiniband.c:112
+#: ../libnm/nm-device-wifi.c:498 ../libnm/nm-device-wimax.c:317
+msgid "The MACs of the device and the connection didn't match."
+msgstr "MAC-adresserna för enheten och anslutningen matchade inte."
+
+#: ../libnm/nm-device-generic.c:91
+msgid "The connection was not a generic connection."
+msgstr "Anslutningen var inte en generell anslutning."
+
+#: ../libnm/nm-device-generic.c:98
+msgid "The connection did not specify an interface name."
+msgstr "Anslutningen angav inte ett gränssnittsnamn."
+
+#: ../libnm/nm-device-infiniband.c:96
+msgid "The connection was not an InfiniBand connection."
+msgstr "Anslutningen var inte en InfiniBand-anslutning."
+
+#: ../libnm/nm-device-modem.c:122
+msgid "The connection was not a modem connection."
+msgstr "Anslutningen var inte en modemanslutning."
+
+#: ../libnm/nm-device-modem.c:130
+msgid "The connection was not a valid modem connection."
+msgstr "Anslutningen var inte en giltig modemanslutning."
+
+#: ../libnm/nm-device-modem.c:137
+msgid "The device is lacking capabilities required by the connection."
+msgstr "Enheten saknar förmågorna som krävs av anslutningen."
+
+#: ../libnm/nm-device-olpc-mesh.c:117
+msgid "The connection was not an OLPC Mesh connection."
+msgstr "Anslutningen var inte en OLPC Mesh-anslutning."
+
+#: ../libnm/nm-device-team.c:120
+msgid "The connection was not a team connection."
+msgstr "Anslutningen var inte en gruppanslutning."
+
+#: ../libnm/nm-device-vlan.c:113
+msgid "The connection was not a VLAN connection."
+msgstr "Anslutningen var inte en VLAN-anslutning."
+
+#: ../libnm/nm-device-vlan.c:120
+msgid "The VLAN identifiers of the device and the connection didn't match."
+msgstr "VLAN-identifierarna för enheten och anslutningen matchar inte."
+
+#: ../libnm/nm-device-vlan.c:133
+msgid "The hardware address of the device and the connection didn't match."
+msgstr "Hårdvaruadressen för enheten och anslutningen matchar inte."
+
+#: ../libnm/nm-device-wifi.c:482
+msgid "The connection was not a Wi-Fi connection."
+msgstr "Anslutningen var inte en Wi-Fi-anslutning."
+
+#: ../libnm/nm-device-wifi.c:518
+msgid "The device is lacking WPA capabilities required by the connection."
+msgstr "Enheten saknar WPA-förmågorna som krävs av anslutningen."
+
+#: ../libnm/nm-device-wifi.c:525
+msgid "The device is lacking WPA2/RSN capabilities required by the connection."
+msgstr "Enheten saknar WPA2/RSN-förmågorna som krävs av anslutningen."
+
+#: ../libnm/nm-device-wimax.c:301
+msgid "The connection was not a WiMAX connection."
+msgstr "Anslutningen var inte en WiMAX-anslutning."
+
+#: ../libnm/nm-device.c:2120
+#, c-format
+msgid "The connection was not valid: %s"
+msgstr "Anslutningen var inte giltig: %s"
+
+#: ../libnm/nm-device.c:2129
+#, c-format
+msgid "The interface names of the device and the connection didn't match."
+msgstr "Gränssnittsnamnen på enheten och anslutningen matchar inte."
+
+#: ../libnm/nm-manager.c:1053
+msgid "Active connection removed before it was initialized"
+msgstr "Aktiv anslutning togs bort innan den blev initialiserad"
+
+#: ../libnm/nm-object.c:155 ../libnm/nm-object.c:299
+msgid "Caller did not specify D-Bus path for object"
+msgstr "Anroparen angav inte D-Bus-sökvägen för objektet"
+
+#: ../libnm/nm-remote-settings.c:258
+msgid "Connection removed before it was initialized"
+msgstr "Anslutning togs bort innan den blev initialiserad"
+
+#: ../libnm/nm-vpn-plugin.c:713
+msgid "No service name specified"
+msgstr "Inget tjänstenamn angivet."
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:1
msgid "Enable or disable system networking"
msgstr "Aktivera eller inaktivera systemnätverk"
-#: ../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 "Systemets policy förhindrar aktivering eller inaktivering av systemnätverk"
+msgstr ""
+"Systemets policy förhindrar aktivering eller inaktivering av systemnätverk"
-#: ../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 "Försätt Nätverkshanterare i vänteläge eller återställ efter det (bör endast användas av systemets strömhantering)"
+#: ../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 ""
+"Försätt Nätverkshanterare i vänteläge eller återställ efter det (bör endast "
+"användas av systemets strömhantering)"
-#: ../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 "Systemets policy förhindrar att Nätverkshanterare försätts i vänteläge eller återställs efter det"
+msgstr ""
+"Systemets policy förhindrar att Nätverkshanterare försätts i vänteläge eller "
+"återställs efter det"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:5
msgid "Enable or disable WiFi devices"
-msgstr "Aktivera eller inaktivera WiFi-enheter"
+msgstr "Aktivera eller inaktivera trådlösa enheter"
-#: ../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 "Systemets policy förhindrar aktivering eller inaktivering av WiFi-enheter"
+msgstr ""
+"Systemets policy förhindrar aktivering eller inaktivering av trådlösa enheter"
-#: ../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 "Aktivera eller inaktivera mobila bredbandsenheter"
-#: ../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 "Systemets policy förhindrar aktivering eller inaktivering av mobila bredbandsenheter"
+msgstr ""
+"Systemets policy förhindrar aktivering eller inaktivering av mobila "
+"bredbandsenheter"
-#: ../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 "Aktivera eller inaktivera mobila WiMAX-bredbandsenheter"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:10
-msgid "System policy prevents enabling or disabling WiMAX mobile broadband devices"
-msgstr "Systemets policy förhindrar aktivering eller inaktivering av mobila WiMAX-bredbandsenheter"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:10
+msgid ""
+"System policy prevents enabling or disabling WiMAX mobile broadband devices"
+msgstr ""
+"Systemets policy förhindrar aktivering eller inaktivering av mobila WiMAX-"
+"bredbandsenheter"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:11
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:11
msgid "Allow control of network connections"
msgstr "Tillåt kontroll av nätverksanslutningar"
-#: ../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 "Systemets policy förhindrar kontroll av nätverksanslutningar"
-#: ../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 "Anslutningsdelning via ett skyddat trådlöst nätverk"
-#: ../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 "Systemets policy förhindrar delning av anslutningar via ett skyddat trådlöst nätverk"
+msgstr ""
+"Systemets policy förhindrar delning av anslutningar via ett skyddat trådlöst "
+"nätverk"
-#: ../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 "Anslutningsdelning via ett öppet trådlöst nätverk"
-#: ../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 "Systemets policy förhindrar delning av anslutningar via ett öppet trådlöst nätverk"
+msgstr ""
+"Systemets policy förhindrar delning av anslutningar via ett öppet trådlöst "
+"nätverk"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:17
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:17
msgid "Modify personal network connections"
msgstr "Ändra personliga nätverksanslutningar"
-#: ../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 "Systemets policy förhindrar ändring av personliga nätverksinställningar"
+msgstr ""
+"Systemets policy förhindrar ändring av personliga nätverksinställningar"
-#: ../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 "Ändra nätverksanslutningar för alla användare"
-#: ../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 "Systemets policy förhindrar ändring av nätverksinställningar för alla användare"
+msgstr ""
+"Systemets policy förhindrar ändring av nätverksinställningar för alla "
+"användare"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:21
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:21
msgid "Modify persistent system hostname"
msgstr "Ändra bestående värdnamn för systemet"
-#: ../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 "Systemets policy förhindrar ändring av bestående värdnamn för systemet"
-#: ../src/main.c:143
+#. Translators: the first %s is a prefix for the connection id, such
+#. * as "Wired Connection" or "VPN Connection". The %d is a number
+#. * that is combined with the first argument to create a unique
+#. * connection id.
+#: ../src/NetworkManagerUtils.c:1154
#, c-format
-msgid "Failed to initialize SIGTERM pipe: %d"
-msgstr "Misslyckades med att initiera SIGTERM-rör: %d"
+msgctxt "connection id fallback"
+msgid "%s %d"
+msgstr "%s %d"
-#: ../src/main.c:174
+#: ../src/main.c:135
+#, c-format
+msgid "Failed to set signal mask: %d"
+msgstr "Misslyckades med att sätta signalmask: %d."
+
+#: ../src/main.c:144
+#, c-format
+msgid "Failed to create signal handling thread: %d"
+msgstr "Misslyckades med att skapa signalhanteringstråd: %d"
+
+#: ../src/main.c:159
#, c-format
msgid "Opening %s failed: %s\n"
msgstr "Öppnandet av %s misslyckades: %s\n"
-#: ../src/main.c:180
+#: ../src/main.c:165
#, c-format
msgid "Writing to %s failed: %s\n"
msgstr "Skrivning till %s misslyckades: %s\n"
-#: ../src/main.c:185
+#: ../src/main.c:170
#, c-format
msgid "Closing %s failed: %s\n"
msgstr "Stängning av %s misslyckades: %s\n"
-#: ../src/main.c:228
+#: ../src/main.c:213
#, c-format
msgid "NetworkManager is already running (pid %ld)\n"
-msgstr "Nätverkshanterare är redan igång (pid %ld)\n"
+msgstr "Nätverkshanteraren är redan igång (pid %ld)\n"
-#: ../src/main.c:368
+#: ../src/main.c:366
msgid "Print NetworkManager version and exit"
-msgstr "Skriv ut version av Nätverkshanterare och avsluta"
+msgstr "Skriv ut version för Nätverkshanteraren och avsluta"
-#: ../src/main.c:369
+#: ../src/main.c:367
msgid "Don't become a daemon"
msgstr "Bli inte en demon"
-#: ../src/main.c:370
+#: ../src/main.c:368
+msgid "Don't become a daemon, and log to stderr"
+msgstr "Bli inte en demon, och logga till stderr"
+
+#: ../src/main.c:369
+#, c-format
+msgid "Log level: one of [%s]"
+msgstr "Loggnivå: en av [%s]"
+
+#: ../src/main.c:371
+#, c-format
+msgid "Log domains separated by ',': any combination of [%s]"
+msgstr "Logga domäner separerade med â€,â€: vilken kombination som helst av [%s]"
+
+#: ../src/main.c:373
msgid "Make all warnings fatal"
msgstr "Gör alla varningar till ödesdigra"
-#: ../src/main.c:371
+#: ../src/main.c:374
msgid "Specify the location of a PID file"
msgstr "Ange platsen för en PID-fil"
-#: ../src/main.c:371
+#: ../src/main.c:374
msgid "filename"
msgstr "filnamn"
-#: ../src/main.c:372
+#: ../src/main.c:375
msgid "State file location"
msgstr "Plats för tillståndsfil"
-#: ../src/main.c:372
+#: ../src/main.c:375
msgid "/path/to/state.file"
msgstr "/sökväg/till/tillstånds.fil"
-#: ../src/main.c:373
-msgid "Config file location"
-msgstr "Plats för konfigurationsfil"
-
-#: ../src/main.c:373
-msgid "/path/to/config.file"
-msgstr "/sökväg/till/konfigurations.fil"
-
-#: ../src/main.c:374
-msgid "List of plugins separated by ','"
-msgstr "Lista över insticksmoduler separerade med \",\""
-
-#: ../src/main.c:374
-msgid "plugin1,plugin2"
-msgstr "insticksmodul1,insticksmodul2"
-
-#. Translators: Do not translate the values in the square brackets
-#: ../src/main.c:376
-msgid "Log level: one of [ERR, WARN, INFO, DEBUG]"
-msgstr "Loggnivå: en av [ERR, WARN, INFO, DEBUG]"
-
-#. Translators: Do not translate the values in the square brackets
-#: ../src/main.c:379
-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 ""
-"Loggdomäner separerade med \",\": någon kombination av\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:392
+#: ../src/main.c:401
#, c-format
msgid "GModules are not supported on your platform!\n"
msgstr "GModules stöds inte på din plattform!\n"
-#: ../src/main.c:411
+#: ../src/main.c:406
+#, c-format
+msgid "You must be root to run NetworkManager!\n"
+msgstr "Du måste vara root för att köra Nätverkshanteraren!\n"
+
+#: ../src/main.c:429
msgid ""
"NetworkManager monitors all network connections and automatically\n"
"chooses the best connection to use. It also allows the user to\n"
@@ -2475,41 +7476,46 @@ msgstr ""
"att användaren anger trådlösa accesspunkter som trådlösa nätverks-\n"
"kort i datorn ska associeras med."
-#: ../src/main.c:417
+#: ../src/main.c:435 ../src/main.c:451
#, c-format
-msgid "Invalid option. Please use --help to see a list of valid options.\n"
-msgstr "Ogiltig flagga. Använd --help för att se en lista över giltiga flaggor.\n"
+msgid "%s. Please use --help to see a list of valid options.\n"
+msgstr "%s. Använd --help för att se en lista över giltiga flaggor.\n"
-#: ../src/main.c:427
+#: ../src/main.c:456
#, c-format
-msgid "You must be root to run NetworkManager!\n"
-msgstr "Du måste vara root för att köra Nätverkshanterare!\n"
+msgid "Ignoring unrecognized log domain(s) '%s' passed on command line.\n"
+msgstr "Ignorerar okända loggdomän(en|er) â€%s†given via kommandoraden.\n"
-#: ../src/main.c:448
+#: ../src/main.c:507
#, c-format
msgid "Failed to read configuration: (%d) %s\n"
msgstr "Misslyckades med att läsa konfiguration: (%d) %s\n"
-#: ../src/main.c:459
+#: ../src/main.c:521
#, c-format
-msgid "%s. Please use --help to see a list of valid options.\n"
-msgstr "%s. Använd --help för att se en lista över giltiga flaggor.\n"
+msgid "Error in configuration file: %s.\n"
+msgstr "Fel i konfigurationsfilen: %s.\n"
-#: ../src/main.c:466
+#: ../src/main.c:526
+#, c-format
+msgid "Ignoring unrecognized log domain(s) '%s' from config files.\n"
+msgstr "Ignorerar okända loggdomän(en|er) â€%s†frÃ¥n konfigurationsfiler.\n"
+
+#: ../src/main.c:534
#, c-format
msgid "State file %s parsing failed: (%d) %s\n"
msgstr "Tolkning av tillståndsfilen %s misslyckades: (%d) %s\n"
-#: ../src/main.c:483
+#: ../src/main.c:547
#, c-format
msgid "Could not daemonize: %s [error %u]\n"
msgstr "Kunde inte bli demon: %s [fel %u]\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:62
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:151
msgid "# Created by NetworkManager\n"
-msgstr "# Skapad av Nätverkshanterare\n"
+msgstr "# Skapad av Nätverkshanteraren\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:69
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:158
#, c-format
msgid ""
"# Merged from %s\n"
@@ -2518,200 +7524,368 @@ msgstr ""
"# Sammanfogad från %s\n"
"\n"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:266
+#: ../src/dhcp-manager/nm-dhcp-manager.c:291
msgid "no usable DHCP client could be found."
msgstr "ingen användbar DHCP-klient hittades."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:275
-msgid "'dhclient' could be found."
-msgstr "\"dhclient\" kunde inte hittas."
+#: ../src/dhcp-manager/nm-dhcp-manager.c:300
+msgid "'dhclient' could not be found or was disabled."
+msgstr "â€dhclient†kunde inte hittas eller var inaktiverad."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:285
-msgid "'dhcpcd' could be found."
-msgstr "\"dhcpcd\" kunde inte hittas."
+#: ../src/dhcp-manager/nm-dhcp-manager.c:310
+msgid "'dhcpcd' could not be found or was disabled."
+msgstr "â€dhcpcd†kunde inte hittas eller var inaktiverad."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:293
+#: ../src/dhcp-manager/nm-dhcp-manager.c:318
#, c-format
msgid "unsupported DHCP client '%s'"
-msgstr "DHCP-klienten \"%s\" stöds inte"
+msgstr "DHCP-klienten â€%s†stöds inte"
-#: ../src/dns-manager/nm-dns-manager.c:376
+#: ../src/dns-manager/nm-dns-manager.c:374
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
-msgstr "OBSERVERA: uppslag via glibc kanske inte har stöd för fler än 3 namnservrar."
+msgstr ""
+"OBSERVERA: uppslag via glibc kanske inte har stöd för fler än 3 namnservrar."
-#: ../src/dns-manager/nm-dns-manager.c:378
+#: ../src/dns-manager/nm-dns-manager.c:376
msgid "The nameservers listed below may not be recognized."
msgstr "Namnservrarna listade nedan kanske inte kommer att kännas igen."
-#: ../src/logging/nm-logging.c:130
-#, c-format
-msgid "Unknown log level '%s'"
-msgstr "Okänd loggnivå \"%s\""
+#: ../src/devices/adsl/nm-device-adsl.c:127
+msgid "ADSL connection"
+msgstr "ADSL-anslutning"
-#: ../src/logging/nm-logging.c:155
+#: ../src/devices/bluetooth/nm-bluez-device.c:195
#, c-format
-msgid "Unknown log domain '%s'"
-msgstr "Okänd loggdomän \"%s\""
+msgid "%s Network"
+msgstr "%s Nätverk"
-#: ../src/modem-manager/nm-modem-cdma.c:279
-#: ../src/nm-device-bt.c:325
-#, c-format
-msgid "CDMA connection %d"
-msgstr "CDMA-anslutning %d"
+#: ../src/devices/bluetooth/nm-device-bt.c:248
+msgid "PAN requested, but Bluetooth device does not support NAP"
+msgstr "PAN begärd, men Bluetooth-enheten stöder inte NAP"
-#: ../src/modem-manager/nm-modem-gsm.c:547
-#: ../src/nm-device-bt.c:321
-#, c-format
-msgid "GSM connection %d"
-msgstr "GSM-anslutning %d"
+#: ../src/devices/bluetooth/nm-device-bt.c:258
+msgid "PAN connections cannot specify GSM, CDMA, or serial settings"
+msgstr ""
+"PAN-anslutningar kan inte specifiera GSM, CDMA eller seriella inställningar"
-#: ../src/nm-device-bond.c:191
-#, c-format
-msgid "Bond connection %d"
-msgstr "Bond-anslutning %d"
+#: ../src/devices/bluetooth/nm-device-bt.c:271
+msgid "PAN connection"
+msgstr "PAN-anslutning"
-#: ../src/nm-device-bt.c:296
-#, c-format
-msgid "PAN connection %d"
-msgstr "PAN-anslutning %d"
+#: ../src/devices/bluetooth/nm-device-bt.c:278
+msgid "DUN requested, but Bluetooth device does not support DUN"
+msgstr "DUN begärd, men Bluetooth-enheten stödjer inte DUN"
-#: ../src/nm-device-bt.c:329
-#, c-format
-msgid "DUN connection %d"
-msgstr "DUN-anslutning %d"
+#: ../src/devices/bluetooth/nm-device-bt.c:288
+msgid "DUN connection must include a GSM or CDMA setting"
+msgstr "DUN-anslutning måste innehålla en GSM eller CDMA-inställningar"
-#: ../src/nm-device-ethernet.c:1326
-#, c-format
-msgid "PPPoE connection %d"
-msgstr "PPPoE-anslutning %d"
+#: ../src/devices/bluetooth/nm-device-bt.c:298
+#: ../src/devices/wwan/nm-modem-broadband.c:484
+msgid "GSM connection"
+msgstr "GSM-anslutning"
+
+#: ../src/devices/bluetooth/nm-device-bt.c:302
+#: ../src/devices/wwan/nm-modem-broadband.c:507
+msgid "CDMA connection"
+msgstr "CDMA-anslutning"
+
+#: ../src/devices/bluetooth/nm-device-bt.c:306
+msgid "DUN connection"
+msgstr "DUN-anslutning"
-#: ../src/nm-device-ethernet.c:1326
-#: ../src/settings/nm-settings-utils.c:50
+#: ../src/devices/bluetooth/nm-device-bt.c:311
+msgid "Unknown/unhandled Bluetooth connection type"
+msgstr "Okänd/ohanterad Bluetooth-anslutningstyp"
+
+#: ../src/devices/bluetooth/nm-device-bt.c:331
+#: ../src/devices/nm-device-ethernet.c:1443
+#: ../src/devices/nm-device-infiniband.c:196
+#: ../src/devices/wifi/nm-device-wifi.c:1130
+#: ../src/devices/wimax/nm-device-wimax.c:445
+msgid "connection does not match device"
+msgstr "anslutning matchar inte enhet"
+
+#: ../src/devices/nm-device-bond.c:124
+msgid "Bond connection"
+msgstr "Kombinationsanslutning"
+
+#: ../src/devices/nm-device-bridge.c:131
+msgid "Bridge connection"
+msgstr "Brygganslutning"
+
+#: ../src/devices/nm-device-ethernet.c:1426
+msgid "PPPoE connection"
+msgstr "PPPoE-anslutning"
+
+#: ../src/devices/nm-device-ethernet.c:1426
+msgid "Wired connection"
+msgstr "Trådbunden anslutning"
+
+#: ../src/devices/nm-device-ethernet-utils.c:38
#, c-format
msgid "Wired connection %d"
msgstr "Trådbunden anslutning %d"
-#: ../src/nm-device-infiniband.c:303
-#, c-format
-#| msgid "Infiniband connection %d"
-msgid "InfiniBand connection %d"
-msgstr "InfiniBand-anslutning %d"
+#: ../src/devices/nm-device-infiniband.c:178
+msgid "InfiniBand connection"
+msgstr "InfiniBand-anslutning"
-#: ../src/nm-device-olpc-mesh.c:293
-#, c-format
-msgid "Mesh %d"
-msgstr "Mesh %d"
+#: ../src/devices/nm-device-vlan.c:216
+msgid "VLAN connection"
+msgstr "VLAN-anslutning"
-#: ../src/nm-device-vlan.c:362
-#, c-format
-#| msgid "PAN connection %d"
-msgid "VLAN connection %d"
-msgstr "VLAN-anslutning %d"
+#: ../src/devices/team/nm-device-team.c:134
+msgid "Team connection"
+msgstr "Gruppanslutning"
-#: ../src/nm-manager.c:661
-#, c-format
-msgid "VPN connection %d"
-msgstr "VPN-anslutning %d"
+#: ../src/devices/wifi/nm-device-olpc-mesh.c:150
+msgid "Mesh"
+msgstr "Mesh"
+
+#: ../src/devices/wifi/nm-device-wifi.c:1099
+msgid "WPA Ad-Hoc disabled due to kernel bugs"
+msgstr "WPA Ad-Hoc inaktiverad på grund av kärnfel"
-#: ../src/nm-netlink-monitor.c:148
-#: ../src/nm-netlink-monitor.c:272
-#: ../src/nm-netlink-monitor.c:695
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:43
#, c-format
-msgid "error processing netlink message: %s"
-msgstr "fel vid behandling av netlink-meddelande: %s"
+msgid "%s is incompatible with static WEP keys"
+msgstr "%s är inte kompatibel med statiska WEP-nycklar"
-#: ../src/nm-netlink-monitor.c:251
-msgid "error occurred while waiting for data on socket"
-msgstr "fel inträffade vid väntan på data i uttaget"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:77
+msgid "LEAP authentication requires a LEAP username"
+msgstr "LEAP-autentisering kräver ett LEAP-användarnamn"
-#: ../src/nm-netlink-monitor.c:296
-#, c-format
-msgid "unable to connect to netlink for monitoring link status: %s"
-msgstr "kan inte ansluta till netlink för övervakning av länkstatus: %s"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:87
+msgid "LEAP username requires 'leap' authentication"
+msgstr "LEAP-användarnamn kräver â€leapâ€-autentisering"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:100
+msgid "LEAP authentication requires IEEE 802.1x key management"
+msgstr "LEAP-autentisering kräver IEEE 802.1x-nyckelhantering"
-#: ../src/nm-netlink-monitor.c:307
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:120
+msgid "LEAP authentication is incompatible with Ad-Hoc mode"
+msgstr "LEAP-autentisering är inkompatibelt med Ad-Hoc-läge"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:132
+msgid "LEAP authentication is incompatible with 802.1x setting"
+msgstr "LEAP-autentisering är inkompatibelt med 802.1x-inställning"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:154
#, c-format
-msgid "unable to enable netlink handle credential passing: %s"
-msgstr "kunde inte aktivera behörighetshantering för netlink-handtag: %s"
+msgid "a connection using '%s' authentication cannot use WPA key management"
+msgstr ""
+"en anslutning som använder â€%sâ€-autentisering kan inte använda WPA-"
+"nyckelhantering"
-#: ../src/nm-netlink-monitor.c:330
-#: ../src/nm-netlink-monitor.c:390
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:165
#, c-format
-msgid "unable to allocate netlink handle for monitoring link status: %s"
-msgstr "kan inte allokera netlink-handtag för övervakning av länkstatus: %s"
+msgid "a connection using '%s' authentication cannot specific WPA protocols"
+msgstr ""
+"en anslutning som använder â€%sâ€-autentisering kan inte specificera WPA-"
+"protokoll"
-#: ../src/nm-netlink-monitor.c:415
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:181
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:198
#, c-format
-msgid "unable to allocate netlink link cache for monitoring link status: %s"
-msgstr "kan inte allokera netlink-länkcache för övervakning av länkstatus: %s"
+msgid "a connection using '%s' authentication cannot specific WPA ciphers"
+msgstr ""
+"en anslutning som använder â€%sâ€-autentisering kan inte specificera WPA-"
+"chiffer"
-#: ../src/nm-netlink-monitor.c:542
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:210
#, c-format
-msgid "unable to join netlink group: %s"
-msgstr "kan inte gå med i netlink-grupp: %s"
+msgid "a connection using '%s' authentication cannot specific a WPA password"
+msgstr ""
+"en anslutning som använder â€%sâ€-autentisering kan inte specificera ett WPA-"
+"lösenord"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:241
+msgid "Dynamic WEP requires an 802.1x setting"
+msgstr "Dynamisk WEP kräver en 802.1x-inställning"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:251
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:279
+msgid "Dynamic WEP requires 'open' authentication"
+msgstr "Dynamisk WEP kräver â€openâ€-autentisering"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:266
+msgid "Dynamic WEP requires 'ieee8021x' key management"
+msgstr "Dynamisk WEP kräver â€ieee8021xâ€-nyckelhantering"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:313
+msgid "WPA-PSK authentication is incompatible with 802.1x"
+msgstr "WPA-PSK-autentisering är inkompatibelt med 802.1x"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:323
+msgid "WPA-PSK requires 'open' authentication"
+msgstr "WPA-PSK kräver â€openâ€-autentisering"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:335
+msgid "WPA Ad-Hoc authentication requires an Ad-Hoc mode AP"
+msgstr "WPA Ad-Hoc-autentisering kräver en Ad-Hoc-läges-AP"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:348
+msgid "WPA Ad-Hoc authentication requires 'wpa' protocol"
+msgstr "WPA Ad-Hoc-autentisering kräver â€wpaâ€-protokoll"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:360
+msgid "WPA Ad-Hoc authentication requires 'none' pairwise cipher"
+msgstr "WPA Ad-Hoc-autentisering kräver parvisa chiffret â€noneâ€"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:372
+msgid "WPA Ad-Hoc requires 'tkip' group cipher"
+msgstr "WPA Ad-Hoc kräver â€tkipâ€-gruppchiffer"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:386
+msgid "Access point does not support PSK but setting requires it"
+msgstr "Accesspunkten stöder inte PSK men inställningen kräver det"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:416
+msgid "WPA-EAP authentication requires an 802.1x setting"
+msgstr "WPA-EAP-autentisering kräver en 802.1x-inställning"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:426
+msgid "WPA-EAP requires 'open' authentication"
+msgstr "WPA-EAP kräver â€openâ€-autentisering"
-#: ../src/nm-netlink-monitor.c:671
-#: ../src/nm-netlink-monitor.c:684
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:437
+msgid "802.1x setting requires 'wpa-eap' key management"
+msgstr "802.1x-inställning kräver â€wpa-eapâ€-nyckelhantering"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:450
+msgid "Access point does not support 802.1x but setting requires it"
+msgstr "Accesspunktsläget stödjer inte 802.1x men inställningen kräver det"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:478
+msgid ""
+"Access point mode is Ad-Hoc but setting requires Infrastructure security"
+msgstr ""
+"Accesspunktsläget är Ad-Hoc men inställningen kräver infrastrukturssäkerhet"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:488
+msgid "Ad-Hoc mode is incompatible with 802.1x security"
+msgstr "Ad-Hoc-läge är inkompatibelt med 802.1x-säkerhet"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:497
+msgid "Ad-Hoc mode is incompatible with LEAP security"
+msgstr "Ad-Hoc-läge är inkompatibelt med LEAP-säkerhet"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:507
+msgid "Ad-Hoc mode requires 'open' authentication"
+msgstr "Ad-Hoc-läge kräver â€openâ€-autentisering"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:517
+msgid ""
+"Access point mode is Infrastructure but setting requires Ad-Hoc security"
+msgstr ""
+"Accesspunktsläge är infrastruktur men inställning kräver Ad-Hoc-säkerhet"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:559
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:589
#, c-format
-msgid "error updating link cache: %s"
-msgstr "fel vid uppdatering av länkcache: %s"
+msgid "connection does not match access point"
+msgstr "anslutningen matchar inte med accesspunkten"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:93
-msgid "System"
-msgstr "System"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:613
+msgid "Access point is unencrypted but setting specifies security"
+msgstr "Accespunkt är okrypterad men inställning specificerar säkerhet"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:3634
-msgid "Bond"
-msgstr "Bond"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:702
+msgid ""
+"WPA authentication is incompatible with non-EAP (original) LEAP or Dynamic "
+"WEP"
+msgstr ""
+"WPA-autentisering är inkompatibel med icke-EAP (original) LEAP eller "
+"dynamisk WEP"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:712
+msgid "WPA authentication is incompatible with Shared Key authentication"
+msgstr "WPA-autentisering är inkompatibelt med delad nyckelautentisering"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:759
+msgid "Failed to determine AP security information"
+msgstr "Misslyckades med att bestämma AP-säkerhetsinformation"
-#~ msgid "SCOPE"
-#~ msgstr "OMFÃ…NG"
+#: ../src/devices/wwan/nm-modem-broadband.c:471
+msgid "GSM mobile broadband connection requires a 'gsm' setting"
+msgstr "GSM-mobil bredbandsanslutning kräver en â€gsmâ€-inställning"
-#~ msgid "DBUS-SERVICE"
-#~ msgstr "DBUS-TJÄNST"
+#: ../src/nm-config.c:352
+msgid "Config file location"
+msgstr "Plats för konfigurationsfil"
+
+#: ../src/nm-config.c:352
+msgid "/path/to/config.file"
+msgstr "/sökväg/till/konfigurations.fil"
-#~ msgid "system"
-#~ msgstr "system"
+#: ../src/nm-config.c:353
+msgid "Config directory location"
+msgstr "Plats för konfigurationskatalog"
-#~ msgid "user"
-#~ msgstr "användare"
+#: ../src/nm-config.c:353
+msgid "/path/to/config/dir"
+msgstr "/sökväg/till/konfiguration/katalog"
-#~ msgid "System connections"
-#~ msgstr "systemanslutningar"
+#: ../src/nm-config.c:355
+msgid "List of plugins separated by ','"
+msgstr "Lista över insticksmoduler separerade med â€,â€"
+
+#: ../src/nm-config.c:355
+msgid "plugin1,plugin2"
+msgstr "insticksmodul1,insticksmodul2"
-#~ msgid "User connections"
-#~ msgstr "Användaranslutningar"
+#. These three are hidden for now, and should eventually just go away.
+#: ../src/nm-config.c:358
+msgid "An http(s) address for checking internet connectivity"
+msgstr "En http(s)-adress för att kontrollera internetanslutning"
-#~ msgid "Error: Obtaining active connection for '%s' failed."
-#~ msgstr "Fel: Hämtning av aktiv anslutning för \"%s\" misslyckades."
+#: ../src/nm-config.c:359
+msgid "The interval between connectivity checks (in seconds)"
+msgstr "Intervallet mellan anslutningskontroller (i sekunder)"
-#~ msgid "Error: Could not get user settings."
-#~ msgstr "Fel: Kunde inte få användarinställningar."
+#: ../src/nm-config.c:360
+msgid "The expected start of the response"
+msgstr "Den förväntade starten på svaret"
-#~ msgid "IP4-SETTINGS"
-#~ msgstr "IP4-INSTÄLLNINGAR"
+#: ../src/nm-config.c:360
+msgid "Bingo!"
+msgstr "Bingo!"
-#~ msgid "IP6-SETTINGS"
-#~ msgstr "IP6-INSTÄLLNINGAR"
+#: ../src/nm-logging.c:149
+#, c-format
+msgid "Unknown log level '%s'"
+msgstr "Okänd loggnivÃ¥ â€%sâ€"
-#~ msgid "PREFIX"
-#~ msgstr "PREFIX"
+#: ../src/nm-logging.c:231
+#, c-format
+msgid "Unknown log domain '%s'"
+msgstr "Okänd loggdomän â€%sâ€"
-#~ msgid "unknown)"
-#~ msgstr "okänt)"
+#: ../src/nm-manager.c:3363
+msgid "VPN connection"
+msgstr "VPN-anslutning"
-#~ msgid "Allow use of user-specific connections"
-#~ msgstr "Tillåt användning av användarspecifika anslutningar"
+#: ../src/nm-sleep-monitor-systemd.c:114
+msgid "NetworkManager needs to turn off networks"
+msgstr "Nätverkshanteraren behöver stänga av nätverk"
-#~ msgid "System policy prevents use of user-specific connections"
-#~ msgstr ""
-#~ "Systemets policy förhindrar användning av användarspecifika anslutningar"
+#: ../src/settings/plugins/ibft/plugin.c:65
+#, c-format
+msgid "ibft: failed to read iscsiadm records: %s"
+msgstr "ibft: misslyckades med att läsa iscsiadm-poster: %s"
-#~ msgid "Auto %s"
-#~ msgstr "Automatisk %s"
+#: ../src/settings/plugins/ibft/plugin.c:73
+#, c-format
+msgid "ibft: read connection '%s'"
+msgstr "ibft: läste anslutning â€%sâ€"
-#~ msgid "Type"
-#~ msgstr "Typ"
+#: ../src/settings/plugins/ibft/plugin.c:79
+#, c-format
+msgid "ibft: failed to read iscsiadm record: %s"
+msgstr "ibft: misslyckades med att läsa iscsiadm-post: %s"
-#~ msgid "Name"
-#~ msgstr "Namn"
+#: ../src/settings/plugins/ifcfg-rh/reader.c:112
+msgid "System"
+msgstr "System"
diff --git a/po/ta.po b/po/ta.po
index 00df5a8b6..9deb92f7f 100644
--- a/po/ta.po
+++ b/po/ta.po
@@ -3,6 +3,7 @@
# Copyright (C) 2009 NetworkManager's COPYRIGHT HOLDER
# This file is distributed under the same license as the NetworkManager package.
#
+#: ../src/nm-iface-helper.c:307
# Felix I <ifelix25@gmail.com>, 2009.
# I. Felix <ifelix@redhat.com>, 2009, 2010.
# I Felix <ifelix@redhat.com>, 2010.
@@ -11,9 +12,9 @@ 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: 2014-01-23 15:24+0000\n"
-"PO-Revision-Date: 2014-01-24 15:22+0530\n"
+"product=NetworkManager&keywords=I18N+L10N&component=Translations\n"
+"POT-Creation-Date: 2014-12-16 11:18+0000\n"
+"PO-Revision-Date: 2014-12-19 16:04+0630\n"
"Last-Translator: Shantha kumar <shkumar@redhat.com>\n"
"Language-Team: Tamil <kde-i18n-doc@kde.org>\n"
"Language: ta\n"
@@ -24,447 +25,570 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n!=1);\\n"
"\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:179
-#: ../cli/src/connections.c:201
+#: ../clients/cli/agent.c:42
+#, c-format
+msgid ""
+"Usage: nmcli agent { COMMAND | help }\n"
+"\n"
+"COMMAND := { secret | polkit | all }\n"
+"\n"
+msgstr ""
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli agent { COMMAND | help }\n"
+"\n"
+"கடà¯à®Ÿà®³à¯ˆ := { secret | polkit | all }\n"
+"\n"
+
+#: ../clients/cli/agent.c:50
+#, c-format
+msgid ""
+"Usage: nmcli agent secret { help }\n"
+"\n"
+"Runs nmcli as NetworkManager secret agent. When NetworkManager requires\n"
+"a password it asks registered agents for it. This command keeps nmcli "
+"running\n"
+"and if a password is required asks the user for it.\n"
+"\n"
+msgstr ""
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli agent secret { help }\n"
+"\n"
+"nmcli à® NetworkManager ரகசிய à®®à¯à®•à®µà®°à®¾à®• இயஙà¯à®•à¯. NetworkManager கà¯à®•à¯ கடவà¯à®šà¯à®šà¯Šà®²à¯ "
+"தேவைபà¯à®ªà®Ÿà¯à®®à¯ போதà¯\n"
+"பதிவà¯à®ªà¯†à®±à¯à®± à®®à¯à®•à®µà®°à¯à®•à®³à®¿à®Ÿà®®à¯ அத௠கடவà¯à®šà¯à®šà¯Šà®²à¯à®²à¯ˆà®•à¯ கேடà¯à®•à¯à®®à¯. இநà¯à®¤à®•à¯ கடà¯à®Ÿà®³à¯ˆ nmcli "
+"தொடரà¯à®¨à¯à®¤à¯ இயஙà¯à®•à¯à®®à¯à®ªà®Ÿà®¿ செயà¯à®¯à¯à®®à¯\n"
+"மேலà¯à®®à¯ கடவà¯à®šà¯à®šà¯Šà®²à¯ தேவைபà¯à®ªà®Ÿà¯à®Ÿà®¾à®²à¯, பயனரைக௠கேடà¯à®•à¯à®®à¯.\n"
+"\n"
+
+#: ../clients/cli/agent.c:60
+#, c-format
+msgid ""
+"Usage: nmcli agent polkit { help }\n"
+"\n"
+"Registers nmcli as a polkit action for the user session.\n"
+"When a polkit daemon requires an authorization, nmcli asks the user and "
+"gives\n"
+"the response back to polkit.\n"
+"\n"
+msgstr ""
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli agent polkit { help }\n"
+"\n"
+"பயனர௠அமரà¯à®µà¯à®•à¯à®•à®¾à®© polkit செயலாக nmcli à®à®ªà¯ பதிவ௠செயà¯à®•à®¿à®±à®¤à¯.\n"
+"ஒர௠polkit டீமானà¯à®•à¯à®•à¯ à®…à®™à¯à®•à¯€à®•à®°à®¿à®ªà¯à®ªà¯ தேவைபà¯à®ªà®Ÿà¯à®Ÿà®¾à®²à¯, nmcli பயனரிடம௠கேடà¯à®Ÿà¯,"
+"பதிலை\n"
+"polkit கà¯à®•à¯à®•à¯ கொடà¯à®•à¯à®•à®¿à®±à®¤à¯.\n"
+"\n"
+
+#: ../clients/cli/agent.c:70
+#, c-format
+msgid ""
+"Usage: nmcli agent all { help }\n"
+"\n"
+"Runs nmcli as both NetworkManager secret and a polkit agent.\n"
+"\n"
+msgstr ""
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli agent all { help }\n"
+"\n"
+"nmcli à® NetworkManager ரகசிய à®®à¯à®•à®µà®°à®¾à®•à®µà¯à®®à¯ polkit à®®à¯à®•à®µà®°à®¾à®•à®µà¯à®®à¯ இயகà¯à®•à¯à®•à®¿à®±à®¤à¯.\n"
+"\n"
+
+#: ../clients/cli/agent.c:152
+#, c-format
+msgid "nmcli successfully registered as a NetworkManager's secret agent.\n"
+msgstr ""
+"nmcli வெறà¯à®±à®¿à®•à®°à®®à®¾à®• NetworkManager -இன௠ரகசிய à®®à¯à®•à®µà®°à®¾à®•à®ªà¯ பதிவ௠செயà¯à®¯à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯.\n"
+
+#: ../clients/cli/agent.c:154
+#, c-format
+#| msgid "Modem initialization failed"
+msgid "Error: secret agent initialization failed"
+msgstr "பிழை: ரகசிய à®®à¯à®•à®µà®°à¯ தà¯à®µà®•à¯à®•à®®à¯ தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯"
+
+#: ../clients/cli/agent.c:169
+#, c-format
+#| msgid "Error: Connection activation failed: %s"
+msgid "Error: polkit agent initialization failed: %s"
+msgstr "பிழை: polkit à®®à¯à®•à®µà®°à¯ தà¯à®µà®•à¯à®•à®®à¯ தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯: %s"
+
+#: ../clients/cli/agent.c:177
+#, c-format
+msgid "nmcli successfully registered as a polkit agent.\n"
+msgstr "nmcli வெறà¯à®±à®¿à®•à®°à®®à®¾à®• polkit à®®à¯à®•à®µà®°à®¾à®•à®ªà¯ பதிவ௠செயà¯à®¯à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯.\n"
+
+#: ../clients/cli/agent.c:209 ../clients/cli/connections.c:8779
+#: ../clients/cli/connections.c:8805 ../clients/cli/connections.c:8943
+#: ../clients/cli/devices.c:2832 ../clients/cli/general.c:325
+#: ../clients/cli/general.c:463
+#, c-format
+msgid "Error: NetworkManager is not running."
+msgstr "பிழை: NetworkManager இயஙà¯à®•à®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../clients/cli/agent.c:245
+#, c-format
+#| msgid "Error: 'general' command '%s' is not valid."
+msgid "Error: 'agent' command '%s' is not valid."
+msgstr "பிழை: 'agent' கடà¯à®Ÿà®³à¯ˆ '%s' சரியலà¯à®²."
+
+#: ../clients/cli/common.c:40 ../clients/cli/common.c:53
+#: ../clients/cli/common.c:61 ../clients/cli/common.c:73
+#: ../clients/cli/connections.c:172 ../clients/cli/connections.c:194
msgid "GROUP"
msgstr "GROUP"
#. 0
-#: ../cli/src/common.c:35 ../cli/src/common.c:55
+#: ../clients/cli/common.c:41 ../clients/cli/common.c:62
msgid "ADDRESS"
msgstr "ADDRESS"
#. 1
-#: ../cli/src/common.c:36 ../cli/src/common.c:56
+#. 2
+#: ../clients/cli/common.c:42 ../clients/cli/common.c:63
+#: ../clients/cli/connections.c:197
+msgid "GATEWAY"
+msgstr "கேடà¯à®µà¯‡"
+
+#. 2
+#: ../clients/cli/common.c:43 ../clients/cli/common.c:64
msgid "ROUTE"
msgstr "ROUTE"
-#. 2
-#: ../cli/src/common.c:37 ../cli/src/common.c:57
+#. 3
+#: ../clients/cli/common.c:44 ../clients/cli/common.c:65
msgid "DNS"
msgstr "DNS"
-#. 3
-#: ../cli/src/common.c:38 ../cli/src/common.c:58
+#. 4
+#: ../clients/cli/common.c:45 ../clients/cli/common.c:66
msgid "DOMAIN"
msgstr "DOMAIN"
-#. 4
-#: ../cli/src/common.c:39
+#. 5
+#: ../clients/cli/common.c:46
msgid "WINS"
msgstr "WINS"
#. 0
-#: ../cli/src/common.c:47 ../cli/src/common.c:66
+#: ../clients/cli/common.c:54 ../clients/cli/common.c:74
msgid "OPTION"
msgstr "OPTION"
-#: ../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
+#: ../clients/cli/common.c:378 ../clients/cli/common.c:438
#, c-format
-msgid "invalid prefix '%s'; <1-128> allowed"
-msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà¯ '%s'; <1-128> அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯"
+msgid "invalid prefix '%s'; <1-%d> allowed"
+msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà¯ '%s'; <1-%d> அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯"
-#: ../cli/src/common.c:512
+#: ../clients/cli/common.c:386
#, c-format
-#| msgid "invalid field '%s'"
-msgid "invalid IPv4 route '%s'"
-msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ IPv4 தடம௠'%s'"
+#| msgid "invalid IPv4 address '%s'"
+msgid "invalid IP address: %s"
+msgstr "தவறான IP à®®à¯à®•à®µà®°à®¿: %s"
-#: ../cli/src/common.c:520
+#: ../clients/cli/common.c:450
#, 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'"
+msgid ""
+"the second component of route ('%s') is neither a next hop address nor a "
+"metric"
+msgstr ""
+"தடதà¯à®¤à®¿à®©à¯ இரணà¯à®Ÿà®¾à®µà®¤à¯ கூறானத௠('%s') அடà¯à®¤à¯à®¤ ஹாப௠மà¯à®•à®µà®°à®¿à®¯à¯à®®à®²à¯à®² ஒர௠மெடà¯à®°à®¿à®•à¯à®•à¯à®®à®²à¯à®²"
-#: ../cli/src/common.c:534 ../cli/src/common.c:598
+#: ../clients/cli/common.c:459
#, c-format
-#| msgid "invalid field '%s'"
msgid "invalid metric '%s'"
msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ மெடà¯à®°à®¿à®•à¯ '%s'"
-#: ../cli/src/common.c:575
+#: ../clients/cli/common.c:467
#, c-format
-#| msgid "invalid field '%s'"
-msgid "invalid IPv6 route '%s'"
-msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ IPv6 தடம௠'%s'"
+#| msgid "invalid IPv4 route '%s'"
+msgid "invalid route: %s"
+msgstr "தவறான தடமà¯: %s"
-#: ../cli/src/common.c:583
-#, c-format
-msgid "invalid prefix '%s'; <0-128> allowed"
-msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà¯ '%s'; <0-128> அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯"
+#: ../clients/cli/common.c:479
+msgid "default route cannot be added (NetworkManager handles it by itself)"
+msgstr ""
+"à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯à®¤à¯ தடதà¯à®¤à¯ˆà®šà¯ சேரà¯à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯ (NetworkManager அதைத௠தானே கையாளà¯à®®à¯)"
-#: ../cli/src/common.c:619
+#: ../clients/cli/common.c:496
msgid "unmanaged"
msgstr "பராமரிகà¯à®•à®ªà¯à®ªà®Ÿà®¾à®¤"
-#: ../cli/src/common.c:621
+#: ../clients/cli/common.c:498
msgid "unavailable"
msgstr "கிடைகà¯à®•à®ªà¯à®ªà¯†à®±à®¾à®¤"
-#: ../cli/src/common.c:623 ../cli/src/network-manager.c:276
+#: ../clients/cli/common.c:500 ../clients/cli/general.c:260
msgid "disconnected"
msgstr "தà¯à®£à¯à®Ÿà®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-#: ../cli/src/common.c:625
+#: ../clients/cli/common.c:502
msgid "connecting (prepare)"
msgstr "இணைகà¯à®•à®¿à®±à®¤à¯ (தயாராகà¯à®•à¯)"
-#: ../cli/src/common.c:627
+#: ../clients/cli/common.c:504
msgid "connecting (configuring)"
msgstr "இணைகà¯à®•à®¿à®±à®¤à¯ (கடà¯à®Ÿà®®à¯ˆà®•à¯à®•à®¿à®±à®¤à¯)"
-#: ../cli/src/common.c:629
+#: ../clients/cli/common.c:506
msgid "connecting (need authentication)"
msgstr "இணைகà¯à®•à®¿à®±à®¤à¯ (à®…à®™à¯à®•à¯€à®•à®¾à®°à®®à¯ தேவை)"
-#: ../cli/src/common.c:631
+#: ../clients/cli/common.c:508
msgid "connecting (getting IP configuration)"
msgstr "இணைகà¯à®•à®¿à®±à®¤à¯ (IP கடà¯à®Ÿà®®à¯ˆà®ªà¯à®ªà¯ˆ பெறà¯à®•à®¿à®±à®¤à¯)"
-#: ../cli/src/common.c:633
+#: ../clients/cli/common.c:510
msgid "connecting (checking IP connectivity)"
msgstr "இணைகà¯à®•à®¿à®±à®¤à¯ (IP இணைபà¯à®ªà¯ˆ சோதிகà¯à®•à®¿à®±à®¤à¯)"
-#: ../cli/src/common.c:635
+#: ../clients/cli/common.c:512
msgid "connecting (starting secondary connections)"
msgstr "இணைகà¯à®•à®¿à®±à®¤à¯ (இரணà¯à®Ÿà®¾à®®à¯ நிலை இணைபà¯à®ªà¯à®•à®³à¯ˆà®¤à¯ தொடஙà¯à®•à¯à®•à®¿à®±à®¤à¯)"
-#: ../cli/src/common.c:637 ../cli/src/network-manager.c:272
+#: ../clients/cli/common.c:514 ../clients/cli/general.c:256
msgid "connected"
msgstr "இணைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-#: ../cli/src/common.c:639 ../cli/src/connections.c:527
+#: ../clients/cli/common.c:516 ../clients/cli/connections.c:538
msgid "deactivating"
msgstr "à®®à¯à®Ÿà®•à¯à®•à¯à®•à®¿à®±à®¤à¯"
-#: ../cli/src/common.c:641
+#: ../clients/cli/common.c:518
msgid "connection failed"
msgstr "இணைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ"
-#: ../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
+#: ../clients/cli/common.c:520 ../clients/cli/connections.c:543
+#: ../clients/cli/connections.c:566 ../clients/cli/connections.c:1705
+#: ../clients/cli/devices.c:878 ../clients/cli/general.c:263
+#: ../clients/cli/general.c:281 ../clients/cli/general.c:411
+#: ../clients/cli/general.c:427 ../clients/cli/settings.c:717
+#: ../clients/cli/settings.c:779 ../clients/cli/settings.c:1072
+#: ../clients/cli/utils.c:1145 ../src/main.c:309 ../src/main.c:337
msgid "unknown"
msgstr "தெரியாத"
-#: ../cli/src/common.c:652
+#: ../clients/cli/common.c:529
msgid "No reason given"
msgstr "காரணம௠கொடà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ"
-#: ../cli/src/common.c:655 ../cli/src/connections.c:2466
+#: ../clients/cli/common.c:532 ../clients/cli/connections.c:2705
#, c-format
msgid "Unknown error"
msgstr "தெரியாத பிழை"
-#: ../cli/src/common.c:658
+#: ../clients/cli/common.c:535
msgid "Device is now managed"
msgstr "சாதனம௠இபà¯à®ªà¯‹à®¤à¯ நிரà¯à®µà®•à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯"
-#: ../cli/src/common.c:661
+#: ../clients/cli/common.c:538
msgid "Device is now unmanaged"
msgstr "சாதனம௠இபà¯à®ªà¯‹à®¤à¯ நிரà¯à®µà®•à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ"
-#: ../cli/src/common.c:664
+#: ../clients/cli/common.c:541
msgid "The device could not be readied for configuration"
msgstr "அமைவாகà¯à®•à®®à¯ செயà¯à®µà®¤à®±à¯à®•à¯ சாதனதà¯à®¤à¯ˆ தயாரà¯à®šà¯†à®¯à¯à®¯ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ"
-#: ../cli/src/common.c:667
+#: ../clients/cli/common.c:544
msgid ""
"IP configuration could not be reserved (no available address, timeout, etc.)"
msgstr ""
"IP அமைவாகà¯à®•à®¤à¯à®¤à¯ˆ ஒதà¯à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ (à®®à¯à®•à®µà®°à®¿ கிடைகà¯à®•à®µà®¿à®²à¯à®²à¯ˆ, காலாவதியாதல௠"
"போனà¯à®±à®µà¯ˆ)"
-#: ../cli/src/common.c:670
+#: ../clients/cli/common.c:547
msgid "The IP configuration is no longer valid"
msgstr "IP அமைவாகà¯à®•à®®à¯ இபà¯à®ªà¯‹à®¤à¯ செலà¯à®²à®¾à®¤à¯"
-#: ../cli/src/common.c:673
+#: ../clients/cli/common.c:550
msgid "Secrets were required, but not provided"
msgstr "ரகசியஙà¯à®•à®³à¯ தேவையாயிரà¯à®¨à¯à®¤à®©, ஆனால௠தரபà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ"
-#: ../cli/src/common.c:676
+#: ../clients/cli/common.c:553
msgid "802.1X supplicant disconnected"
msgstr "802.1x சபà¯à®³à®¿à®•à®©à¯à®Ÿà¯ தà¯à®£à¯à®Ÿà®¿à®•à¯à®•à®ªà®Ÿà¯à®Ÿà®¤à¯"
-#: ../cli/src/common.c:679
+#: ../clients/cli/common.c:556
msgid "802.1X supplicant configuration failed"
msgstr "802.1x சபà¯à®³à®¿à®•à®©à¯à®Ÿà¯ அமைவாகà¯à®•à®®à¯ தோலà¯à®µà®¿"
-#: ../cli/src/common.c:682
+#: ../clients/cli/common.c:559
msgid "802.1X supplicant failed"
msgstr "802.1x சபà¯à®³à®¿à®•à®©à¯à®Ÿà¯ தோலà¯à®µà®¿"
-#: ../cli/src/common.c:685
+#: ../clients/cli/common.c:562
msgid "802.1X supplicant took too long to authenticate"
msgstr "802.1x சபà¯à®³à®¿à®•à®©à¯à®Ÿà¯ à®…à®™à¯à®•à¯€à®•à®¾à®°à®¤à¯à®¤à®¿à®±à¯à®•à¯ நீணà¯à®Ÿ நேரம௠எடà¯à®¤à¯à®¤à¯à®•à¯à®•à¯Šà®£à¯à®Ÿà®¤à¯"
-#: ../cli/src/common.c:688
+#: ../clients/cli/common.c:565
msgid "PPP service failed to start"
msgstr "பிபிபி சேவை தà¯à®µà®•à¯à®•à®®à¯ தோலà¯à®µà®¿"
-#: ../cli/src/common.c:691
+#: ../clients/cli/common.c:568
msgid "PPP service disconnected"
msgstr "பிபிபி சேவை தà¯à®£à¯à®Ÿà®¿à®•à¯à®•à®ªà®Ÿà¯à®Ÿà®¤à¯"
-#: ../cli/src/common.c:694
+#: ../clients/cli/common.c:571
msgid "PPP failed"
msgstr "பிபிபி தோலà¯à®µà®¿à®¯à¯à®±à¯à®±à®¤à¯"
-#: ../cli/src/common.c:697
+#: ../clients/cli/common.c:574
msgid "DHCP client failed to start"
msgstr "டிஹெசà¯à®šà®¿à®ªà®¿ கிளையனà¯à®Ÿà¯ தà¯à®µà®•à¯à®•à®®à¯ தோலà¯à®µà®¿"
-#: ../cli/src/common.c:700
+#: ../clients/cli/common.c:577
msgid "DHCP client error"
msgstr "DHCP கிளையனà¯à®Ÿà¯ பிழை"
-#: ../cli/src/common.c:703
+#: ../clients/cli/common.c:580
msgid "DHCP client failed"
msgstr "DHCP கிளையனà¯à®Ÿà¯ தோலà¯à®µà®¿"
-#: ../cli/src/common.c:706
+#: ../clients/cli/common.c:583
msgid "Shared connection service failed to start"
msgstr "பகிரà¯à®¨à¯à®¤ இணைபà¯à®ªà¯ சேவை தà¯à®µà®•à¯à®•à®®à¯ தோலà¯à®µà®¿"
-#: ../cli/src/common.c:709
+#: ../clients/cli/common.c:586
msgid "Shared connection service failed"
msgstr "பகிரà¯à®¨à¯à®¤ இணைபà¯à®ªà¯ சேவை தோலà¯à®µà®¿à®¯à¯à®±à¯à®±à®¤à¯"
-#: ../cli/src/common.c:712
+#: ../clients/cli/common.c:589
msgid "AutoIP service failed to start"
msgstr "AutoIP சேவையைத௠தொடஙà¯à®•à¯à®µà®¤à®¿à®²à¯ தோலà¯à®µà®¿"
-#: ../cli/src/common.c:715
+#: ../clients/cli/common.c:592
msgid "AutoIP service error"
msgstr "AutoIP சேவை பிழை"
-#: ../cli/src/common.c:718
+#: ../clients/cli/common.c:595
msgid "AutoIP service failed"
msgstr "AutoIP சேவை தொடஙà¯à®•à¯à®µà®¤à®¿à®²à¯ தோலà¯à®µà®¿"
-#: ../cli/src/common.c:721
+#: ../clients/cli/common.c:598
msgid "The line is busy"
msgstr "தடம௠பயனà¯à®ªà®¾à®Ÿà¯à®Ÿà®¿à®²à¯ உளà¯à®³à®¤à¯"
-#: ../cli/src/common.c:724
+#: ../clients/cli/common.c:601
msgid "No dial tone"
msgstr "டயல௠டோன௠இலà¯à®²à¯ˆ"
-#: ../cli/src/common.c:727
+#: ../clients/cli/common.c:604
msgid "No carrier could be established"
msgstr "கேரியரை அமைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ"
-#: ../cli/src/common.c:730
+#: ../clients/cli/common.c:607
msgid "The dialing request timed out"
msgstr "டயல௠செயà¯à®¯à¯à®®à¯ நேரம௠கடநà¯à®¤à®¤à¯"
-#: ../cli/src/common.c:733
+#: ../clients/cli/common.c:610
msgid "The dialing attempt failed"
msgstr "டயல௠செயà¯à®¯à¯à®®à¯ à®®à¯à®¯à®±à¯à®šà®¿ தோலà¯à®µà®¿"
-#: ../cli/src/common.c:736
+#: ../clients/cli/common.c:613
msgid "Modem initialization failed"
msgstr "மோடதà¯à®¤à¯ˆà®¤à¯ தொடஙà¯à®•à¯à®¤à®²à¯ தோலà¯à®µà®¿"
-#: ../cli/src/common.c:739
+#: ../clients/cli/common.c:616
msgid "Failed to select the specified APN"
msgstr "கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà¯à®Ÿ à®à®ªà®¿à®Žà®©à¯ ஠தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®¤à¯à®¤à®²à¯ தோலà¯à®µà®¿"
-#: ../cli/src/common.c:742
+#: ../clients/cli/common.c:619
msgid "Not searching for networks"
msgstr "நெடà¯à®µà¯Šà®°à¯à®•à¯à®•à¯à®•à®³à¯ˆà®¤à¯ தேடவிலà¯à®²à¯ˆ"
-#: ../cli/src/common.c:745
+#: ../clients/cli/common.c:622
msgid "Network registration denied"
msgstr "நெடà¯à®µà¯Šà®°à¯à®•à¯à®•à®¿à®²à¯ பதிவà¯à®šà¯†à®¯à¯à®¤à®²à¯ மறà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-#: ../cli/src/common.c:748
+#: ../clients/cli/common.c:625
msgid "Network registration timed out"
msgstr "நெடà¯à®µà¯Šà®°à¯à®•à¯à®•à®¿à®²à¯ பதிவà¯à®šà¯†à®¯à¯à®¤à®²à¯ நேரம௠கடநà¯à®¤à®¤à¯"
-#: ../cli/src/common.c:751
+#: ../clients/cli/common.c:628
msgid "Failed to register with the requested network"
msgstr "வேணà¯à®Ÿà®¿à®¯ நெடà¯à®µà¯Šà®°à¯à®•à¯à®•à®¿à®²à¯ பதிவà¯à®šà¯†à®¯à¯à®¤à®²à¯ தோலà¯à®µà®¿"
-#: ../cli/src/common.c:754
+#: ../clients/cli/common.c:631
msgid "PIN check failed"
msgstr "PIN சோதனை தோலà¯à®µà®¿"
-#: ../cli/src/common.c:757
+#: ../clients/cli/common.c:634
msgid "Necessary firmware for the device may be missing"
msgstr "சாதனதà¯à®¤à®¿à®©à¯ தேவையான வரà¯à®¤à¯à®¤à®• மெனà¯à®ªà¯Šà®°à¯à®³à¯ இலà¯à®²à¯ˆ"
-#: ../cli/src/common.c:760
+#: ../clients/cli/common.c:637
msgid "The device was removed"
msgstr "சாதனம௠நீகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-#: ../cli/src/common.c:763
+#: ../clients/cli/common.c:640
msgid "NetworkManager went to sleep"
msgstr "NetworkManager உறஙà¯à®•à®¿à®µà®¿à®Ÿà¯à®Ÿà®¤à¯"
-#: ../cli/src/common.c:766
+#: ../clients/cli/common.c:643
msgid "The device's active connection disappeared"
msgstr "சாதனதà¯à®¤à®¿à®©à¯ செயலிலà¯à®³à¯à®³ இணைபà¯à®ªà¯ போயà¯à®µà®¿à®Ÿà¯à®Ÿà®¤à¯"
-#: ../cli/src/common.c:769
+#: ../clients/cli/common.c:646
msgid "Device disconnected by user or client"
msgstr "பயனர௠அலà¯à®²à®¤à¯ கிளையனà¯à®Ÿà¯ சாதனதà¯à®¤à¯ˆ இணைபà¯à®ªà¯ தà¯à®£à¯à®Ÿà®¿à®¤à¯à®¤à®¾à®°à¯"
-#: ../cli/src/common.c:772
+#: ../clients/cli/common.c:649
msgid "Carrier/link changed"
msgstr "கேரியரà¯/இணைபà¯à®ªà¯ மாறிவிடà¯à®Ÿà®¤à¯"
-#: ../cli/src/common.c:775
+#: ../clients/cli/common.c:652
msgid "The device's existing connection was assumed"
msgstr "சாதனதà¯à®¤à®¿à®©à¯ தறà¯à®ªà¯‹à®¤à¯à®³à¯à®³ இணைபà¯à®ªà¯ இரà¯à®ªà¯à®ªà®¤à®¾à®• கொளà¯à®³à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-#: ../cli/src/common.c:778
+#: ../clients/cli/common.c:655
msgid "The supplicant is now available"
msgstr "சபà¯à®³à®¿à®•à®©à¯à®Ÿà¯ உளà¯à®³à®¤à¯"
-#: ../cli/src/common.c:781
+#: ../clients/cli/common.c:658
msgid "The modem could not be found"
msgstr "மோடதà¯à®¤à¯ˆà®•à¯ கணà¯à®Ÿà®±à®¿à®¯ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ"
-#: ../cli/src/common.c:784
+#: ../clients/cli/common.c:661
msgid "The Bluetooth connection failed or timed out"
msgstr "Bluetooth இணைபà¯à®ªà¯ தோலà¯à®µà®¿ அலà¯à®²à®¤à¯ அதறà¯à®•à®¾à®© நேரம௠கடநà¯à®¤à¯à®µà®¿à®Ÿà¯à®Ÿà®¤à¯"
-#: ../cli/src/common.c:787
+#: ../clients/cli/common.c:664
msgid "GSM Modem's SIM card not inserted"
msgstr "GSM மோடதà¯à®¤à®¿à®©à¯ SIM காரà¯à®Ÿà¯ செரà¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ"
-#: ../cli/src/common.c:790
+#: ../clients/cli/common.c:667
msgid "GSM Modem's SIM PIN required"
msgstr "GSM மோடதà¯à®¤à®¿à®©à¯ SIM PIN தேவை"
-#: ../cli/src/common.c:793
+#: ../clients/cli/common.c:670
msgid "GSM Modem's SIM PUK required"
msgstr "GSM மோடதà¯à®¤à®¿à®©à¯ SIM PUK தேவை"
-#: ../cli/src/common.c:796
+#: ../clients/cli/common.c:673
msgid "GSM Modem's SIM wrong"
msgstr "GSM மோடதà¯à®¤à®¿à®©à¯ SIM தவறà¯"
-#: ../cli/src/common.c:799
+#: ../clients/cli/common.c:676
msgid "InfiniBand device does not support connected mode"
msgstr "இனà¯à®ªà®¿à®©à®¿à®ªà¯‡à®©à¯à®Ÿà¯ சாதனம௠இணைபà¯à®ªà¯ பாஙà¯à®•à¯ˆ ஆதரிகà¯à®•à®µà®¿à®²à¯à®²à¯ˆ"
-#: ../cli/src/common.c:802
+#: ../clients/cli/common.c:679
msgid "A dependency of the connection failed"
msgstr "இணைபà¯à®ªà®¿à®©à¯ சாரà¯à®¨à®¿à®²à¯ˆ தோலà¯à®µà®¿"
-#: ../cli/src/common.c:805
+#: ../clients/cli/common.c:682
msgid "A problem with the RFC 2684 Ethernet over ADSL bridge"
msgstr "RFC 2684 ஈதà¯à®¤à®°à¯à®©à¯†à®Ÿà¯ ஓவர௠ADSL பிரிடà¯à®œà®¿à®²à¯ சிகà¯à®•à®²à¯"
-#: ../cli/src/common.c:808
+#: ../clients/cli/common.c:685
msgid "ModemManager is unavailable"
msgstr "ModemManager இலà¯à®²à¯ˆ"
-#: ../cli/src/common.c:811
+#: ../clients/cli/common.c:688
msgid "The Wi-Fi network could not be found"
msgstr "Wi-Fi பிணையதà¯à®¤à¯ˆà®•à¯ கணà¯à®Ÿà®±à®¿à®¯ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ"
-#: ../cli/src/common.c:814
+#: ../clients/cli/common.c:691
msgid "A secondary connection of the base connection failed"
msgstr "அடிபà¯à®ªà®Ÿà¯ˆ இணைபà¯à®ªà®¿à®©à¯ இரணà¯à®Ÿà®¾à®®à¯ நிலை இணைபà¯à®ªà¯ தோலà¯à®µà®¿"
-#: ../cli/src/common.c:817
+#: ../clients/cli/common.c:694
msgid "DCB or FCoE setup failed"
msgstr "DCB அலà¯à®²à®¤à¯ FCoE அமைவ௠தோலà¯à®µà®¿"
-#: ../cli/src/common.c:820
-#| msgid "connection failed"
+#: ../clients/cli/common.c:697
msgid "teamd control failed"
msgstr "teamd கடà¯à®Ÿà¯à®ªà¯à®ªà®¾à®Ÿà¯ தோலà¯à®µà®¿"
+#: ../clients/cli/common.c:700
+msgid "Modem failed or no longer available"
+msgstr "மோடம௠தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯ அலà¯à®²à®¤à¯ கிடைகà¯à®•à®µà®¿à®²à¯à®²à¯ˆ"
+
+#: ../clients/cli/common.c:703
+msgid "Modem now ready and available"
+msgstr "இபà¯à®ªà¯‹à®¤à¯ மோடம௠தயாரà¯"
+
+#: ../clients/cli/common.c:706
+msgid "SIM PIN was incorrect"
+msgstr "SIM PIN தவறà¯"
+
#. 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
+#: ../clients/cli/common.c:710 ../clients/cli/devices.c:619
+#: ../libnm-glib/nm-device.c:1814 ../libnm/nm-device.c:1635
msgid "Unknown"
msgstr "தெரியாத"
-#: ../cli/src/common.c:866
+#: ../clients/cli/common.c:752
#, 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
+#: ../clients/cli/common.c:759 ../clients/cli/common.c:765
#, 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
+#: ../clients/cli/common.c:832
#, 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' செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© அணி அமைவாகà¯à®•à®®à¯ அலà¯à®²à®¤à¯ கோபà¯à®ªà¯à®ªà¯ பெயரலà¯à®²."
+#: ../clients/cli/common.c:933
+#, c-format
+msgid ""
+"Warning: password for '%s' not given in 'passwd-file' and nmcli cannot ask "
+"without '--ask' option.\n"
+msgstr ""
+"எசà¯à®šà®°à®¿à®•à¯à®•à¯ˆ: 'passwd-file' இல௠'%s' கà¯à®•à®¾à®© கடவà¯à®šà¯à®šà¯Šà®²à¯ கொடà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ, "
+"'--ask' விரà¯à®ªà¯à®ªà®®à¯ இலà¯à®²à®¾à®®à®²à¯ nmcli ஆல௠கேடà¯à®•à®µà¯à®®à¯ à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯.\n"
+
#. define some prompts for connection editor
-#: ../cli/src/connections.c:62
+#: ../clients/cli/connections.c:42
msgid "Setting name? "
msgstr "பெயரை அமைகà¯à®•à®¿à®±à¯€à®°à¯à®•à®³à®¾? "
-#: ../cli/src/connections.c:63
+#: ../clients/cli/connections.c:43
msgid "Property name? "
msgstr "பணà¯à®ªà®¿à®©à¯ பெயரà¯? "
-#: ../cli/src/connections.c:64
-#| msgid "Active connection state: %s\n"
+#: ../clients/cli/connections.c:44
msgid "Enter connection type: "
msgstr "இணைபà¯à®ªà¯ வகையை உளà¯à®³à®¿à®Ÿà®µà¯à®®à¯: "
+#. define some other prompts
+#: ../clients/cli/connections.c:47
+msgid "Connection type: "
+msgstr "இணைபà¯à®ªà¯ வகை: "
+
+#: ../clients/cli/connections.c:48
+msgid "VPN type: "
+msgstr "VPN வகை: "
+
+#: ../clients/cli/connections.c:49
+msgid "Bond master: "
+msgstr "பிணைபà¯à®ªà¯ பிரதானமà¯: "
+
+#: ../clients/cli/connections.c:50
+msgid "Team master: "
+msgstr "கà¯à®´à¯ மாஸà¯à®Ÿà¯à®Ÿà®°à¯: "
+
+#: ../clients/cli/connections.c:51
+msgid "Bridge master: "
+msgstr "பிரிடà¯à®œà¯ மாஸà¯à®Ÿà¯à®Ÿà®°à¯: "
+
+#: ../clients/cli/connections.c:52
+msgid "Connection (name, UUID, or path): "
+msgstr "இணைபà¯à®ªà¯ (பெயரà¯, UUID அலà¯à®²à®¤à¯ பாதை): "
+
#. 0
-#: ../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
+#: ../clients/cli/connections.c:60 ../clients/cli/connections.c:173
+#: ../clients/cli/devices.c:57 ../clients/cli/devices.c:86
+#: ../clients/cli/devices.c:96 ../clients/cli/devices.c:107
+#: ../clients/cli/devices.c:116 ../clients/cli/devices.c:131
+#: ../clients/cli/devices.c:144 ../clients/cli/devices.c:170
+#: ../clients/cli/devices.c:185 ../clients/cli/devices.c:194
+#: ../clients/cli/devices.c:204
msgid "NAME"
msgstr "பெயரà¯"
#. 0
#. 1
-#: ../cli/src/connections.c:69 ../cli/src/connections.c:181
+#: ../clients/cli/connections.c:61 ../clients/cli/connections.c:174
msgid "UUID"
msgstr "UUID"
@@ -472,193 +596,209 @@ msgstr "UUID"
#. 0
#. 1
#. 2
-#: ../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
+#: ../clients/cli/connections.c:62 ../clients/cli/connections.c:195
+#: ../clients/cli/devices.c:43 ../clients/cli/devices.c:59
+#: ../clients/cli/devices.c:173
msgid "TYPE"
msgstr "வகை"
#. 2
-#: ../cli/src/connections.c:71
+#: ../clients/cli/connections.c:63
msgid "TIMESTAMP"
msgstr "நேர à®®à¯à®¤à¯à®¤à®¿à®°à¯ˆ"
#. 3
-#: ../cli/src/connections.c:72
+#: ../clients/cli/connections.c:64
msgid "TIMESTAMP-REAL"
msgstr "நேர à®®à¯à®¤à¯à®¤à®¿à®°à¯ˆ-மெயà¯"
#. 4
-#. 14
-#: ../cli/src/connections.c:73 ../cli/src/devices.c:101
+#. 15
+#: ../clients/cli/connections.c:65 ../clients/cli/devices.c:73
msgid "AUTOCONNECT"
msgstr "தானியஙà¯à®•à¯ இணைபà¯à®ªà¯"
#. 5
-#: ../cli/src/connections.c:74
+#: ../clients/cli/connections.c:66
+#| msgid "AUTOCONNECT"
+msgid "AUTOCONNECT-PRIORITY"
+msgstr "AUTOCONNECT-PRIORITY"
+
+#. 6
+#: ../clients/cli/connections.c:67
msgid "READONLY"
msgstr "வாசிகà¯à®•à®®à®Ÿà¯à®Ÿà¯à®®à¯"
-#. 6
+#. 7
#. 8
#. 2
#. 15
#. 5
-#: ../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
+#: ../clients/cli/connections.c:68 ../clients/cli/connections.c:181
+#: ../clients/cli/devices.c:45 ../clients/cli/devices.c:160
+#: ../clients/cli/devices.c:176
msgid "DBUS-PATH"
msgstr "DBUS-பாதை"
-#. 7
+#. 8
#. 13
#. 4
-#: ../cli/src/connections.c:76 ../cli/src/devices.c:185
-#: ../cli/src/devices.c:202
+#: ../clients/cli/connections.c:69 ../clients/cli/devices.c:158
+#: ../clients/cli/devices.c:175
msgid "ACTIVE"
msgstr "செயலிலà¯"
-#. 8
+#. 9
#. 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
+#: ../clients/cli/connections.c:70 ../clients/cli/devices.c:42
+#: ../clients/cli/devices.c:58 ../clients/cli/devices.c:157
+#: ../clients/cli/devices.c:174
msgid "DEVICE"
msgstr "சாதனமà¯"
-#. 9
+#. 10
#. 3
#. 1
#. 9
#. 1
-#: ../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
+#: ../clients/cli/connections.c:71 ../clients/cli/connections.c:176
+#: ../clients/cli/devices.c:44 ../clients/cli/devices.c:67
+#: ../clients/cli/general.c:37
msgid "STATE"
msgstr "நிலை"
-#. 10
-#: ../cli/src/connections.c:79
-#| msgid "MASTER-PATH"
+#. 11
+#: ../clients/cli/connections.c:72
msgid "ACTIVE-PATH"
msgstr "செயலில௠உளà¯à®³ பாதை"
#. 2
-#: ../cli/src/connections.c:182
+#: ../clients/cli/connections.c:175
msgid "DEVICES"
msgstr "சாதனஙà¯à®•à®³à¯"
#. 4
-#: ../cli/src/connections.c:184
+#: ../clients/cli/connections.c:177
msgid "DEFAULT"
msgstr "à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯"
#. 5
-#: ../cli/src/connections.c:185
+#: ../clients/cli/connections.c:178
msgid "DEFAULT6"
msgstr "à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯6"
#. 6
-#: ../cli/src/connections.c:186
+#: ../clients/cli/connections.c:179
msgid "SPEC-OBJECT"
msgstr "SPEC-பொரà¯à®³à¯"
#. 7
#. 4
-#: ../cli/src/connections.c:187 ../cli/src/connections.c:225
-#: ../tui/nm-editor-utils.c:243 ../tui/nmt-connect-connection-list.c:343
+#. Ask for optional 'vpn' arguments.
+#: ../clients/cli/connections.c:180 ../clients/cli/connections.c:218
+#: ../clients/cli/connections.c:3816 ../clients/tui/nm-editor-utils.c:234
+#: ../clients/tui/nmt-connect-connection-list.c:406
msgid "VPN"
msgstr "VPN"
#. 9
#. 5
-#. 18
-#: ../cli/src/connections.c:189 ../cli/src/devices.c:77
-#: ../cli/src/devices.c:105
+#. 19
+#: ../clients/cli/connections.c:182 ../clients/cli/devices.c:48
+#: ../clients/cli/devices.c:77
msgid "CON-PATH"
msgstr "CON-பாதை"
#. 10
-#: ../cli/src/connections.c:190
+#: ../clients/cli/connections.c:183
msgid "ZONE"
msgstr "மணà¯à®Ÿà®²à®®à¯"
#. 11
-#: ../cli/src/connections.c:191
+#: ../clients/cli/connections.c:184
msgid "MASTER-PATH"
msgstr "MASTER-பாதை"
#. 1
-#: ../cli/src/connections.c:203
+#: ../clients/cli/connections.c:196
msgid "USERNAME"
msgstr "பயனரà¯à®ªà¯†à®¯à®°à¯"
-#. 2
-#: ../cli/src/connections.c:204
-msgid "GATEWAY"
-msgstr "கேடà¯à®µà¯‡"
-
#. 3
-#: ../cli/src/connections.c:205
+#: ../clients/cli/connections.c:198
msgid "BANNER"
msgstr "பேனரà¯"
#. 4
-#: ../cli/src/connections.c:206
+#: ../clients/cli/connections.c:199
msgid "VPN-STATE"
msgstr "VPN-நிலை"
#. 5
-#: ../cli/src/connections.c:207
+#: ../clients/cli/connections.c:200
msgid "CFG"
msgstr "CFG"
-#: ../cli/src/connections.c:220 ../cli/src/devices.c:236
+#: ../clients/cli/connections.c:213 ../clients/cli/devices.c:219
msgid "GENERAL"
msgstr "பொதà¯"
#. 0
#. 6
-#: ../cli/src/connections.c:221 ../cli/src/devices.c:243
+#: ../clients/cli/connections.c:214 ../clients/cli/devices.c:226
msgid "IP4"
msgstr "IP4"
#. 1
#. 7
-#: ../cli/src/connections.c:222 ../cli/src/devices.c:244
+#: ../clients/cli/connections.c:215 ../clients/cli/devices.c:227
msgid "DHCP4"
msgstr "DHCP4"
#. 2
#. 8
-#: ../cli/src/connections.c:223 ../cli/src/devices.c:245
+#: ../clients/cli/connections.c:216 ../clients/cli/devices.c:228
msgid "IP6"
msgstr "IP6"
#. 3
#. 9
-#: ../cli/src/connections.c:224 ../cli/src/devices.c:246
+#: ../clients/cli/connections.c:217 ../clients/cli/devices.c:229
msgid "DHCP6"
msgstr "DHCP6"
-#: ../cli/src/connections.c:261
+#: ../clients/cli/connections.c:251
#, c-format
#| msgid ""
#| "Usage: nmcli connection { COMMAND | help }\n"
-#| " COMMAND := { show | up | down | delete }\n"
#| "\n"
-#| " show configured [[ id | uuid | path ] <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"
-#| " show active [[ id | uuid | path | apath ] <ID>]\n"
+#| " down [id | uuid | path | apath] <ID>\n"
#| "\n"
-#| " up [ id | uuid | path ] <ID> [ifname <ifname>] [ap <BSSID>] [nsp "
-#| "<name>] [--nowait] [--timeout <timeout>]\n"
+#| " add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
#| "\n"
-#| " up [ id | uuid | path ] <ID> [ifname <ifname>] [ap <BSSID>] [--nowait] "
-#| "[--timeout <timeout>]\n"
+#| " modify [--temporary] [id | uuid | path] <ID> ([+|-]<setting>.<property> "
+#| "<value>)+\n"
#| "\n"
-#| " down [ id | uuid | path | apath ] <ID>\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"
+#| " delete [id | uuid | path] <ID>\n"
+#| "\n"
+#| " reload\n"
+#| "\n"
+#| " load <filename> [ <filename>... ]\n"
#| "\n"
msgid ""
"Usage: nmcli connection { COMMAND | help }\n"
@@ -666,17 +806,20 @@ msgid ""
"COMMAND := { show | up | down | add | modify | edit | delete | reload | "
"load }\n"
"\n"
-" show [--active] [[id | uuid | path | apath] <ID>] ...\n"
+" show [--active] [[--show-secrets] [id | uuid | path | apath] <ID>] ...\n"
"\n"
-" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>] "
+"[passwd-file <file with passwords>]\n"
"\n"
-" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>]\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [passwd-file "
+"<file with passwords>]\n"
"\n"
-" down [id | uuid | path | apath] <ID>\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"
+" 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"
@@ -693,17 +836,20 @@ msgstr ""
"கடà¯à®Ÿà®³à¯ˆ := { show | up | down | add | modify | edit | delete | reload | "
"load }\n"
"\n"
-" show [--active] [[id | uuid | path | apath] <ID>] ...\n"
+" show [--active] [[--show-secrets] [id | uuid | path | apath] <ID>] ...\n"
"\n"
-" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>] "
+"[passwd-file <file with passwords>]\n"
"\n"
-" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>]\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [passwd-file "
+"<file with passwords>]\n"
"\n"
-" down [id | uuid | path | apath] <ID>\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"
+" 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"
@@ -715,8 +861,31 @@ msgstr ""
" load <filename> [ <filename>... ]\n"
"\n"
-#: ../cli/src/connections.c:283
+#: ../clients/cli/connections.c:272
#, c-format
+#| 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"
msgid ""
"Usage: nmcli connection show { ARGUMENTS | help }\n"
"\n"
@@ -728,7 +897,8 @@ msgid ""
"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"
+"ARGUMENTS := [--active] [--show-secrets] [id | uuid | path | apath] "
+"<ID> ...\n"
"\n"
"Show details for specified connections. By default, both static "
"configuration\n"
@@ -737,79 +907,123 @@ msgid ""
"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"
+"account. --show-secrets option will reveal associated secrets as well.\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"
+"செயலில௠இரà¯à®•à¯à®•à®µà¯à®®à¯ கூடà¯à®®à¯. மதிபà¯à®ªà¯à®°à¯ இலà¯à®²à®¾à®®à®²à¯, "
+"பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®¿à®©à®¾à®²à¯,\n"
+"அனைதà¯à®¤à¯ தனியமைபà¯à®ªà¯à®•à®³à¯à®®à¯ படà¯à®Ÿà®¿à®¯à®²à®¿à®Ÿà®ªà¯à®ªà®Ÿà¯à®®à¯. --active விரà¯à®ªà¯à®ªà®®à¯ "
+"கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®ªà¯à®ªà®Ÿà¯à®Ÿà®¾à®²à¯,\n"
+"செயலில௠உளà¯à®³ தனியமைபà¯à®ªà¯à®•à®³à¯ மடà¯à®Ÿà¯à®®à¯ காணà¯à®ªà®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯.\n"
+"\n"
+"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := [--active] [--show-secrets] [id | uuid | path | apath] "
+"<ID> ...\n"
+"\n"
+"கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®ªà¯à®ªà®Ÿà¯à®Ÿ இணைபà¯à®ªà¯à®•à¯à®•à®¾à®© விவரஙà¯à®•à®³à¯ˆà®•à¯ காணà¯à®ªà®¿à®•à¯à®•à¯à®®à¯. à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà®¾à®•, "
+"நிலையான அமைவாகà¯à®•à®®à¯\n"
+"மறà¯à®±à¯à®®à¯ செயலில௠உளà¯à®³ இணைபà¯à®ªà¯ தரவ௠ஆகிய இரணà¯à®Ÿà¯à®®à¯ காணà¯à®ªà®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯. '--fields' "
+"எனà¯à®®à¯ ஒடà¯à®Ÿà¯à®®à¯Šà®¤à¯à®¤ விரà¯à®ªà¯à®ªà®¤à¯à®¤à¯ˆà®ªà¯ "
+"பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®¿,\n"
+"இதன௠வெளியீடà¯à®Ÿà¯ˆ"
+"வடிகடà¯à®Ÿà®µà¯à®®à¯ à®®à¯à®Ÿà®¿à®¯à¯à®®à¯. மேலà¯à®®à¯ தகவலà¯à®•à¯à®•à¯ "
"கையேடà¯à®Ÿà¯à®ªà¯ பகà¯à®•à®¤à¯à®¤à¯ˆà®ªà¯ பாரà¯à®•à¯à®•à®µà¯à®®à¯.\n"
-"--active விரà¯à®ªà¯à®ªà®®à¯ கொடà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¾à®²à¯, செயலில௠உளà¯à®³ தனியமைபà¯à®ªà¯à®•à®³à¯ மடà¯à®Ÿà¯à®®à¯\n"
-"கணகà¯à®•à®¿à®²à¯ எடà¯à®¤à¯à®¤à¯à®•à¯à®•à¯Šà®³à¯à®³à®ªà¯à®ªà®Ÿà¯à®®à¯.\n"
+"--active விரà¯à®ªà¯à®ªà®®à¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®ªà¯à®ªà®Ÿà¯à®Ÿà®¾à®²à¯, செயலில௠உளà¯à®³\n"
+"தனியமைபà¯à®ªà¯à®•à®³à¯ மடà¯à®Ÿà¯à®®à¯‡ கரà¯à®¤à¯à®¤à®¿à®²à¯ கொளà¯à®³à®ªà¯à®ªà®Ÿà¯à®®à¯. --show-secrets விரà¯à®ªà¯à®ªà®®à®¾à®©à®¤à¯ "
+"சமà¯à®ªà®¨à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿ ரகசியஙà¯à®•à®³à¯ˆà®¯à¯à®®à¯ தெரிவிகà¯à®•à¯à®®à¯.\n"
-#: ../cli/src/connections.c:305
+#: ../clients/cli/connections.c:293
#, 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"
msgid ""
"Usage: nmcli connection up { ARGUMENTS | help }\n"
"\n"
"ARGUMENTS := [id | uuid | path] <ID> [ifname <ifname>] [ap <BSSID>] [nsp "
-"<name>]\n"
+"<name>] [passwd-file <file with passwords>]\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"
+"ARGUMENTS := ifname <ifname> [ap <BSSID>] [nsp <name>] [passwd-file <file "
+"with passwords>]\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"
+"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"
+"passwd-file - file with password(s) required to activate the connection\n"
"\n"
msgstr ""
"பயனà¯à®ªà®¾à®Ÿà¯: nmcli connection up { ARGUMENTS | help }\n"
"\n"
"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := [id | uuid | path] <ID> [ifname <ifname>] [ap <BSSID>] [nsp "
-"<name>]\n"
+"<name>] [passwd-file <file with passwords>]\n"
"\n"
-"ஒர௠சாதனதà¯à®¤à®¿à®²à¯ ஒர௠இணைபà¯à®ªà¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯. செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤ வேணà¯à®Ÿà®¿à®¯ தனியமைபà¯à®ªà®¾à®©à®¤à¯\n"
-"அதன௠பெயரà¯, UUID அலà¯à®²à®¤à¯ D-Bus பாதை மூலம௠அடையாளம௠காணபà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯.\n"
+"ஒர௠சாதனதà¯à®¤à®¿à®²à¯ ஒர௠இணைபà¯à®ªà¯ˆà®šà¯ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®®à¯. செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤ வேணà¯à®Ÿà®¿à®¯ "
+"தனியமைபà¯à®ªà®¾à®©à®¤à¯ "
+"அதனà¯\n"
+"பெயரà¯, UUID அலà¯à®²à®¤à¯ D-Bus பாதையைக௠கொணà¯à®Ÿà¯ அடையாளம௠காணபà¯à®ªà®Ÿà¯à®®à¯.\n"
"\n"
-"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := ifname <ifname> [ap <BSSID>] [nsp <name>]\n"
+"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := ifname <ifname> [ap <BSSID>] [nsp <name>] [passwd-file <"
+"file "
+"with passwords>]\n"
"\n"
-"ஒர௠இணைபà¯à®ªà¯à®Ÿà®©à¯ உளà¯à®³ ஒர௠சாதனதà¯à®¤à¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯. இணைபà¯à®ªà¯ தனியமைபà¯à®ªà®¾à®©à®¤à¯\n"
-"NetworkManager ஆல௠தானாக தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯.\n"
+"ஒர௠சாதனதà¯à®¤à®¿à®²à¯ ஒர௠இணைபà¯à®ªà¯ˆà®šà¯ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®®à¯. இணைபà¯à®ªà¯ தனியமைபà¯à®ªà®¾à®©à®¤à¯\n"
+"NetworkManager ஆல௠தானாக தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯.\n"
"\n"
-"ifname - இணைபà¯à®ªà¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤ வேணà¯à®Ÿà®¿à®¯ சாதனதà¯à®¤à¯ˆà®•à¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà¯à®•à®¿à®±à®¤à¯\n"
-"ap - இணைகà¯à®• வேணà¯à®Ÿà®¿à®¯ AP à®à®•à¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà¯à®•à®¿à®±à®¤à¯ (Wi-Fi கà¯à®•à¯ மடà¯à®Ÿà¯à®®à¯‡ "
-"செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à¯à®®à¯)\n"
-"nsp - இணைகà¯à®• வேணà¯à®Ÿà®¿à®¯ NSP à®à®•à¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà¯à®•à®¿à®±à®¤à¯ (WiMAX கà¯à®•à¯ மடà¯à®Ÿà¯à®®à¯‡ "
-"செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à¯à®®à¯)\n"
+"ifname - எநà¯à®¤à®šà¯ சாதனதà¯à®¤à®¿à®²à¯ இணைபà¯à®ªà¯ˆà®šà¯ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤ வேணà¯à®Ÿà¯à®®à¯ எனக௠"
+"கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà¯à®•à®¿à®±à®¤à¯\n"
+"ap - எநà¯à®¤ AP உடன௠இணைகà¯à®• வேணà¯à®Ÿà¯à®®à¯ எனக௠கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà¯à®•à®¿à®±à®¤à¯ (Wi-Fi கà¯à®•à¯ "
+"மடà¯à®Ÿà¯à®®à¯‡ செயலà¯à®ªà®Ÿà¯à®®à¯)\n"
+"nsp - எநà¯à®¤ NSP உடன௠இணைகà¯à®• வேணà¯à®Ÿà¯à®®à¯ எனக௠கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà¯à®•à®¿à®±à®¤à¯ (WiMAX கà¯à®•à¯ "
+"மடà¯à®Ÿà¯à®®à¯‡ செயலà¯à®ªà®Ÿà¯à®®à¯)\n"
+"passwd-file - இணைபà¯à®ªà¯ˆà®šà¯ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®¤à¯ தேவைபà¯à®ªà®Ÿà¯à®®à¯ கடவà¯à®šà¯à®šà¯Šà®±à¯à®•à®³à¯ˆà®•à¯ கொணà¯à®Ÿà¯à®³à¯à®³ "
+"கோபà¯à®ªà¯\n"
"\n"
-#: ../cli/src/connections.c:326
+#: ../clients/cli/connections.c:314
#, 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"
msgid ""
"Usage: nmcli connection down { ARGUMENTS | help }\n"
"\n"
-"ARGUMENTS := [id | uuid | path | apath] <ID>\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 "
@@ -819,16 +1033,115 @@ msgid ""
msgstr ""
"பயனà¯à®ªà®¾à®Ÿà¯: nmcli connection down { ARGUMENTS | help }\n"
"\n"
-"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := [id | uuid | path | apath] <ID>\n"
+"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := [id | uuid | path | apath] <ID> ...\n"
"\n"
-"ஒர௠சாதனதà¯à®¤à®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ இணைபà¯à®ªà¯ˆ செயலà¯à®®à¯à®Ÿà®•à¯à®•à¯à®¤à®²à¯ (சாதனதà¯à®¤à®¿à®©à¯ மேறà¯à®ªà®Ÿà®¿à®¯à®¾à®© \n"
-"தானியஙà¯à®•à¯ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®²à¯ˆà®¤à¯ தடà¯à®•à¯à®•à®¾à®®à®²à¯). செயலà¯à®®à¯à®Ÿà®•à¯à®• வேணà¯à®Ÿà®¿à®¯ தனியமைபà¯à®ªà¯"
-"அதன௠பெயரà¯,\n"
-"UUID அலà¯à®²à®¤à¯ D-Bus பாதையினால௠அடையாளம௠காணபà¯à®ªà®Ÿà¯à®®à¯.\n"
+"ஒர௠சாதனதà¯à®¤à®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ ஒர௠இணைபà¯à®ªà¯ˆ à®®à¯à®Ÿà®•à¯à®•à¯à®®à¯ (சாதனமà¯\n"
+"மேறà¯à®•à¯Šà®£à¯à®Ÿà¯ தானியகà¯à®•à®®à®¾à®• செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®®à¯ செயலைத௠தடà¯à®•à¯à®•à®¾à®®à®²à¯). à®®à¯à®Ÿà®•à¯à®• வேணà¯à®Ÿà®¿à®¯ "
+"தனியமைபà¯à®ªà®¾à®©à®¤à¯, அதன௠"
+"பெயரà¯,\n"
+"UUID அலà¯à®²à®¤à¯ D-Bus பாதையைக௠கொணà¯à®Ÿà¯ அடையாளம௠காணபà¯à®ªà®Ÿà¯à®®à¯.\n"
"\n"
-#: ../cli/src/connections.c:339
+#: ../clients/cli/connections.c:326
#, 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"
msgid ""
"Usage: nmcli connection add { ARGUMENTS | help }\n"
"\n"
@@ -840,6 +1153,8 @@ msgid ""
" [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"
@@ -849,6 +1164,7 @@ msgid ""
" [mac <MAC address>]\n"
" [cloned-mac <cloned MAC address>]\n"
" [mtu <MTU>]\n"
+" [mode infrastructure|ap|adhoc]\n"
"\n"
" wimax: [mac <MAC address>]\n"
" [nsp <NSP>]\n"
@@ -892,12 +1208,13 @@ msgid ""
" [updelay <num>]\n"
" [arp-interval <num>]\n"
" [arp-ip-target <num>]\n"
+" [lacp-rate slow (0) | fast (1)]\n"
"\n"
-" bond-slave: master <master (ifname or connection UUID)>\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)>\n"
+" team-slave: master <master (ifname, or connection UUID or name)>\n"
" [config <file>|<raw JSON data>]\n"
"\n"
" bridge: [stp yes|no]\n"
@@ -906,13 +1223,15 @@ msgid ""
" [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)>\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"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan|libreswan|"
+"ssh|l2tp|iodine|...\n"
" [user <username>]\n"
"\n"
" olpc-mesh: ssid <SSID>\n"
@@ -934,6 +1253,8 @@ msgstr ""
" [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"
@@ -943,6 +1264,7 @@ msgstr ""
" [mac <MAC address>]\n"
" [cloned-mac <cloned MAC address>]\n"
" [mtu <MTU>]\n"
+" [mode infrastructure|ap|adhoc]\n"
"\n"
" wimax: [mac <MAC address>]\n"
" [nsp <NSP>]\n"
@@ -986,12 +1308,13 @@ msgstr ""
" [updelay <num>]\n"
" [arp-interval <num>]\n"
" [arp-ip-target <num>]\n"
+" [lacp-rate slow (0) | fast (1)]\n"
"\n"
-" bond-slave: master <master (ifname or connection UUID)>\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)>\n"
+" team-slave: master <master (ifname, or connection UUID or name)>\n"
" [config <file>|<raw JSON data>]\n"
"\n"
" bridge: [stp yes|no]\n"
@@ -1000,13 +1323,15 @@ msgstr ""
" [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)>\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"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan|libreswan|"
+"ssh|l2tp|iodine|...\n"
" [user <username>]\n"
"\n"
" olpc-mesh: ssid <SSID>\n"
@@ -1018,28 +1343,59 @@ msgstr ""
" [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
"\n"
-#: ../cli/src/connections.c:416
+#: ../clients/cli/connections.c:406
#, c-format
msgid ""
"Usage: nmcli connection modify { ARGUMENTS | help }\n"
"\n"
-"ARGUMENTS := [id | uuid | path] <ID> <setting name>.<property name> "
-"[<value>]\n"
+"ARGUMENTS := [id | uuid | path] <ID> ([+|-]<setting>.<property> <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"
+"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 { 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:428
+"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯:= [id | uuid | path] <ID> ([+|-]<setting>.<property> <value>"
+")+\n"
+"\n"
+"இணைபà¯à®ªà¯à®¤à¯ தனியமைபà¯à®ªà®¿à®©à¯ ஒனà¯à®±à¯ அலà¯à®²à®¤à¯ அதிக பணà¯à®ªà¯à®•à®³à¯ˆ மாறà¯à®±à®¿à®¯à®®à¯ˆà®•à¯à®•à¯à®®à¯.\n"
+"தனியமைபà¯à®ªà®¾à®©à®¤à¯ அதன௠பெயரà¯, UUID அலà¯à®²à®¤à¯ D-Bus பாதையால௠அடையாளம௠காணபà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯. "
+"பல "
+"மதிபà¯à®ªà¯ கொணà¯à®Ÿ\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"
+
+#: ../clients/cli/connections.c:429
#, c-format
msgid ""
"Usage: nmcli connection edit { ARGUMENTS | help }\n"
@@ -1062,13 +1418,13 @@ msgstr ""
"தனியமைபà¯à®ªà®¾à®©à®¤à¯ அதன௠பெயரà¯, UUID அலà¯à®²à®¤à¯ D-Bus பாதையின௠மூலம௠அடையாளம௠"
"காணபà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯\n"
"\n"
-"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := [type <new connection type>] [con-name <new connection name>"
-"]\n"
+"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := [type <new connection type>] [con-name <new connection "
+"name>]\n"
"\n"
"ஊடாட௠திரà¯à®¤à¯à®¤à®¿à®¯à®¿à®²à¯ ஒர௠பà¯à®¤à®¿à®¯ இணைபà¯à®ªà¯ தனியமைபà¯à®ªà¯ˆà®šà¯ சேரà¯.\n"
"\n"
-#: ../cli/src/connections.c:444
+#: ../clients/cli/connections.c:444
#, c-format
msgid ""
"Usage: nmcli connection delete { ARGUMENTS | help }\n"
@@ -1088,7 +1444,7 @@ msgstr ""
"காணபà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯\n"
"\n"
-#: ../cli/src/connections.c:456
+#: ../clients/cli/connections.c:455
#, c-format
msgid ""
"Usage: nmcli connection reload { help }\n"
@@ -1101,7 +1457,7 @@ msgstr ""
"இணைபà¯à®ªà¯ கோபà¯à®ªà¯à®•à®³à¯ அனைதà¯à®¤à¯ˆà®¯à¯à®®à¯ வடà¯à®Ÿà®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ மீளேறà¯à®±à¯.\n"
"\n"
-#: ../cli/src/connections.c:465
+#: ../clients/cli/connections.c:463
#, c-format
msgid ""
"Usage: nmcli connection load { ARGUMENTS | help }\n"
@@ -1119,1002 +1475,1021 @@ msgstr ""
"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := <filename> [<filename>...]\n"
"\n"
"வடà¯à®Ÿà®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ ஒனà¯à®±à¯ அலà¯à®²à®¤à¯ அதிக இணைபà¯à®ªà¯ கோபà¯à®ªà¯à®•à®³à¯ˆ à®à®±à¯à®±à¯/மீளேறà¯à®±à¯. இதன௠"
-"சமீபதà¯à®¤à®¿à®¯ நிலை NetworkManager கà¯à®•à¯à®¤à¯\n"
+"சமீபதà¯à®¤à®¿à®¯ நிலை "
+"NetworkManager கà¯à®•à¯à®¤à¯\n"
"தெரிநà¯à®¤à®¿à®°à¯à®•à¯à®• வேணà¯à®Ÿà¯à®®à¯ எனà¯à®ªà®¤à®¾à®²à¯, இணைபà¯à®ªà¯à®•à¯ கோபà¯à®ªà¯ˆ \n"
"கைமà¯à®±à¯ˆà®¯à®¾à®• திரà¯à®¤à¯à®¤à®¿à®¯ பிறகே \n"
-"இதைப௠பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯."
-"\n"
+"இதைப௠பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯.\n"
"\n"
-#: ../cli/src/connections.c:523
+#: ../clients/cli/connections.c:534
msgid "activating"
msgstr "செயலà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯"
-#: ../cli/src/connections.c:525
+#: ../clients/cli/connections.c:536
msgid "activated"
msgstr "செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-#: ../cli/src/connections.c:529
+#: ../clients/cli/connections.c:540
msgid "deactivated"
msgstr "à®®à¯à®Ÿà®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-#: ../cli/src/connections.c:541
+#: ../clients/cli/connections.c:552
msgid "VPN connecting (prepare)"
msgstr "VPN இணைகà¯à®•à®¿à®±à®¤à¯ (தயாராகà¯)"
-#: ../cli/src/connections.c:543
+#: ../clients/cli/connections.c:554
msgid "VPN connecting (need authentication)"
msgstr "VPN இணைகà¯à®•à®¿à®±à®¤à¯ (à®…à®™à¯à®•à¯€à®•à®¾à®°à®®à¯ தேவை)"
-#: ../cli/src/connections.c:545
+#: ../clients/cli/connections.c:556
msgid "VPN connecting"
msgstr "VPN இணைகà¯à®•à®¿à®±à®¤à¯"
-#: ../cli/src/connections.c:547
+#: ../clients/cli/connections.c:558
msgid "VPN connecting (getting IP configuration)"
msgstr "VPN இணைகà¯à®•à®¿à®±à®¤à¯ (IP கடà¯à®Ÿà®®à¯ˆà®ªà¯à®ªà¯ˆ பெறà¯à®•à®¿à®±à®¤à¯)"
-#: ../cli/src/connections.c:549
+#: ../clients/cli/connections.c:560
msgid "VPN connected"
msgstr "VPN இணைகà¯à®•à®¿à®±à®¤à¯"
-#: ../cli/src/connections.c:551
+#: ../clients/cli/connections.c:562
msgid "VPN connection failed"
msgstr "VPN ஠இணைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ"
-#: ../cli/src/connections.c:553
+#: ../clients/cli/connections.c:564
msgid "VPN disconnected"
msgstr "VPN தà¯à®£à¯à®Ÿà®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-#: ../cli/src/connections.c:636
-#| msgid "Connection details"
+#: ../clients/cli/connections.c:634
+#, c-format
+#| msgid "error updating link cache: %s"
+msgid "Error updating secrets for %s: %s\n"
+msgstr "%s-கà¯à®•à®¾à®© ரகசியஙà¯à®•à®³à¯ˆà®ªà¯ பà¯à®¤à¯à®ªà¯à®ªà®¿à®ªà¯à®ªà®¤à®¿à®²à¯ பிழை: %s\n"
+
+#: ../clients/cli/connections.c:654
msgid "Connection profile details"
msgstr "இணைபà¯à®ªà¯ தனியமைபà¯à®ªà¯ விவரஙà¯à®•à®³à¯"
-#: ../cli/src/connections.c:648 ../cli/src/connections.c:1045
+#: ../clients/cli/connections.c:666 ../clients/cli/connections.c:1075
#, c-format
-#| msgid "Error: 'device show': %s"
msgid "Error: 'connection show': %s"
msgstr "பிழை: 'connection show': %s"
-#: ../cli/src/connections.c:842
+#: ../clients/cli/connections.c:812
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
+#: ../clients/cli/connections.c:813 ../clients/cli/connections.c:815
+#: ../clients/cli/connections.c:817 ../clients/cli/connections.c:849
+#: ../clients/cli/connections.c:916 ../clients/cli/connections.c:917
+#: ../clients/cli/connections.c:919 ../clients/cli/connections.c:3111
+#: ../clients/cli/connections.c:6949 ../clients/cli/connections.c:6950
+#: ../clients/cli/devices.c:589 ../clients/cli/devices.c:639
+#: ../clients/cli/devices.c:846 ../clients/cli/devices.c:847
+#: ../clients/cli/devices.c:848 ../clients/cli/devices.c:849
+#: ../clients/cli/devices.c:882 ../clients/cli/devices.c:884
+#: ../clients/cli/devices.c:912 ../clients/cli/devices.c:913
+#: ../clients/cli/devices.c:914 ../clients/cli/devices.c:915
+#: ../clients/cli/devices.c:916 ../clients/cli/devices.c:917
+#: ../clients/cli/devices.c:918 ../clients/cli/general.c:421
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
+#: ../clients/cli/connections.c:813 ../clients/cli/connections.c:815
+#: ../clients/cli/connections.c:817 ../clients/cli/connections.c:916
+#: ../clients/cli/connections.c:917 ../clients/cli/connections.c:919
+#: ../clients/cli/connections.c:3112 ../clients/cli/connections.c:6949
+#: ../clients/cli/connections.c:6950 ../clients/cli/devices.c:589
+#: ../clients/cli/devices.c:639 ../clients/cli/devices.c:846
+#: ../clients/cli/devices.c:847 ../clients/cli/devices.c:848
+#: ../clients/cli/devices.c:849 ../clients/cli/devices.c:882
+#: ../clients/cli/devices.c:884 ../clients/cli/devices.c:912
+#: ../clients/cli/devices.c:913 ../clients/cli/devices.c:914
+#: ../clients/cli/devices.c:915 ../clients/cli/devices.c:916
+#: ../clients/cli/devices.c:917 ../clients/cli/devices.c:918
+#: ../clients/cli/general.c:423
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:1033
-#| msgid "Active connection details"
+#: ../clients/cli/connections.c:1063
msgid "Activate connection details"
msgstr "இணைபà¯à®ªà¯ விவரஙà¯à®•à®³à¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯"
-#: ../cli/src/connections.c:1266
+#: ../clients/cli/connections.c:1299
#, c-format
msgid "invalid field '%s'; allowed fields: %s and %s, or %s,%s"
msgstr ""
"செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ பà¯à®²à®®à¯ '%s'; அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯ பà¯à®²à®™à¯à®•à®³à¯: %s மறà¯à®±à¯à®®à¯ %s, அலà¯à®²à®¤à¯ %"
"s,%s"
-#: ../cli/src/connections.c:1281 ../cli/src/connections.c:1289
+#: ../clients/cli/connections.c:1314 ../clients/cli/connections.c:1322
#, c-format
-#| msgid "field '%s' has to be alone"
-msgid "'%s' has to be alone'"
+msgid "'%s' has to be alone"
msgstr "'%s' தனியாக இரà¯à®•à¯à®• வேணà¯à®Ÿà¯à®®à¯"
-#: ../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 இயஙà¯à®•à®µà®¿à®²à¯à®²à¯ˆ."
-
#. Add headers
-#: ../cli/src/connections.c:1350
-#| msgid "NetworkManager status"
+#: ../clients/cli/connections.c:1377
msgid "NetworkManager active profiles"
msgstr "NetworkManager செயலில௠உளà¯à®³ தனியமைபà¯à®ªà¯à®•à®³à¯"
-#: ../cli/src/connections.c:1351
-#| msgid "NetworkManager went to sleep"
+#: ../clients/cli/connections.c:1378
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
+#: ../clients/cli/connections.c:1418 ../clients/cli/connections.c:2145
+#: ../clients/cli/connections.c:2167 ../clients/cli/connections.c:2176
+#: ../clients/cli/connections.c:2186 ../clients/cli/connections.c:2196
+#: ../clients/cli/connections.c:2346 ../clients/cli/connections.c:8499
+#: ../clients/cli/connections.c:8716 ../clients/cli/devices.c:1909
+#: ../clients/cli/devices.c:1917 ../clients/cli/devices.c:2233
+#: ../clients/cli/devices.c:2240 ../clients/cli/devices.c:2254
+#: ../clients/cli/devices.c:2261 ../clients/cli/devices.c:2278
+#: ../clients/cli/devices.c:2286 ../clients/cli/devices.c:2474
+#: ../clients/cli/devices.c:2570 ../clients/cli/devices.c:2577
#, c-format
msgid "Error: %s argument is missing."
msgstr "பிழை: %s விவாதம௠விடà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯."
-#: ../cli/src/connections.c:1439
+#: ../clients/cli/connections.c:1433
#, c-format
-#| msgid "Error: %s - no such connection."
msgid "Error: %s - no such connection profile."
msgstr "பிழை: %s - இபà¯à®ªà®Ÿà®¿ ஒர௠இணைபà¯à®ªà¯ தனியமைபà¯à®ªà¯ இலà¯à®²à¯ˆ."
-#: ../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
+#: ../clients/cli/connections.c:1492 ../clients/cli/connections.c:2219
+#: ../clients/cli/connections.c:9016 ../clients/cli/devices.c:2453
+#: ../clients/cli/devices.c:2921 ../clients/cli/general.c:518
+#: ../clients/cli/general.c:567 ../clients/cli/general.c:584
+#: ../clients/cli/general.c:623 ../clients/cli/general.c:637
+#: ../clients/cli/general.c:755 ../clients/cli/general.c:802
+#: ../clients/cli/general.c:822
#, c-format
msgid "Error: %s."
msgstr "பிழை: %s."
-#: ../cli/src/connections.c:1550
+#: ../clients/cli/connections.c:1587
#, c-format
msgid "no active connection on device '%s'"
msgstr "சாதனம௠'%s' இல௠செயலà¯à®ªà®Ÿà¯à®®à¯ இணைபà¯à®ªà¯ இலà¯à®²à¯ˆ"
-#: ../cli/src/connections.c:1558
+#: ../clients/cli/connections.c:1595
msgid "no active connection or device"
msgstr "செயலà¯à®ªà®Ÿà¯à®®à¯ இணைபà¯à®ªà¯ அலà¯à®²à®¤à¯ சாதனம௠இலà¯à®²à¯ˆ"
-#: ../cli/src/connections.c:1629
+#: ../clients/cli/connections.c:1666
#, c-format
msgid "device '%s' not compatible with connection '%s'"
msgstr "சாதனம௠'%s' இணைபà¯à®ªà¯ '%s' உடன௠உகநà¯à®¤à®¤à¯ அலà¯à®²"
-#: ../cli/src/connections.c:1632
+#: ../clients/cli/connections.c:1669
#, c-format
msgid "no device found for connection '%s'"
msgstr "இணைபà¯à®ªà¯ '%s'கà¯à®•à¯ சாதனம௠எதà¯à®µà¯à®®à¯ இலà¯à®²à¯ˆ"
-#: ../cli/src/connections.c:1644
+#: ../clients/cli/connections.c:1681
msgid "unknown reason"
msgstr "தெரியாத காரணமà¯"
-#: ../cli/src/connections.c:1646 ../cli/src/network-manager.c:288
+#: ../clients/cli/connections.c:1683 ../clients/cli/general.c:272
msgid "none"
msgstr "ஒனà¯à®±à¯à®®à®¿à®²à¯à®²à®¾à®¤"
-#: ../cli/src/connections.c:1648
+#: ../clients/cli/connections.c:1685
msgid "the user was disconnected"
msgstr "பயனர௠செயலà¯à®¨à¯€à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¾à®°à¯"
-#: ../cli/src/connections.c:1650
+#: ../clients/cli/connections.c:1687
msgid "the base network connection was interrupted"
msgstr "தளப௠பிணைய இணைபà¯à®ªà®¾à®©à®¤à¯ தடை செயà¯à®¯à®ªà¯à®ªà®Ÿà¯à®Ÿà®¿à®°à¯à®¨à¯à®¤à®¤à¯"
-#: ../cli/src/connections.c:1652
+#: ../clients/cli/connections.c:1689
msgid "the VPN service stopped unexpectedly"
msgstr "எதிரà¯à®ªà®¾à®°à®¾à®®à®²à¯ VPN சேவை நிறà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-#: ../cli/src/connections.c:1654
+#: ../clients/cli/connections.c:1691
msgid "the VPN service returned invalid configuration"
msgstr "VPN சேவையானத௠தவறான கடà¯à®Ÿà®®à¯ˆà®ªà¯à®ªà®¿à®±à¯à®•à¯ திரà¯à®®à¯à®ªà®¿à®¯à®¤à¯"
-#: ../cli/src/connections.c:1656
+#: ../clients/cli/connections.c:1693
msgid "the connection attempt timed out"
msgstr "இணைபà¯à®ªà¯ à®®à¯à®¯à®±à¯à®šà®¿à®¯à®¿à®©à¯ நேரம௠மà¯à®Ÿà®¿à®¨à¯à®¤à®¤à¯"
-#: ../cli/src/connections.c:1658
+#: ../clients/cli/connections.c:1695
msgid "the VPN service did not start in time"
msgstr "VPN சேவை நேரதà¯à®¤à®¿à®±à¯à®•à¯ தà¯à®µà®™à¯à®•à®µà®¿à®²à¯à®²à¯ˆ"
-#: ../cli/src/connections.c:1660
+#: ../clients/cli/connections.c:1697
msgid "the VPN service failed to start"
msgstr "VPN சேவையை தà¯à®µà®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ"
-#: ../cli/src/connections.c:1662
+#: ../clients/cli/connections.c:1699
msgid "no valid VPN secrets"
msgstr "சரியான VPN இரகசியஙà¯à®•à®³à¯ இலà¯à®²à¯ˆ"
-#: ../cli/src/connections.c:1664
+#: ../clients/cli/connections.c:1701
msgid "invalid VPN secrets"
msgstr "தவறான VPN இரகசியஙà¯à®•à®³à¯"
-#: ../cli/src/connections.c:1666
+#: ../clients/cli/connections.c:1703
msgid "the connection was removed"
msgstr "இணைபà¯à®ªà®¾à®©à®¤à¯ நீகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-#: ../cli/src/connections.c:1683 ../cli/src/connections.c:1839
-#: ../cli/src/connections.c:6224
+#: ../clients/cli/connections.c:1725 ../clients/cli/connections.c:1753
+#: ../clients/cli/connections.c:1914 ../clients/cli/connections.c:6840
#, c-format
msgid "Connection successfully activated (D-Bus active path: %s)\n"
msgstr "இணைபà¯à®ªà¯ வெறà¯à®±à®¿à®•à®°à®®à®¾à®• செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯ (டி-பஸ௠செயல௠பாதை: %s)\n"
-#: ../cli/src/connections.c:1688
+#: ../clients/cli/connections.c:1732
+#, c-format
+msgid ""
+"Connection successfully activated (master waiting for slaves) (D-Bus active "
+"path: %s)\n"
+msgstr ""
+"இணைபà¯à®ªà¯ வெறà¯à®±à®¿à®•à®°à®®à®¾à®• செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯ (மாஸà¯à®Ÿà¯à®Ÿà®°à¯ ஸà¯à®²à¯‡à®µà¯à®•à®³à¯à®•à¯à®•à®¾à®• "
+"காதà¯à®¤à®¿à®°à¯à®•à¯à®•à®¿à®±à®¤à¯) (D-Bus "
+"செயலà¯à®®à®¿à®•à¯ பாதை: %s)\n"
+
+#: ../clients/cli/connections.c:1736 ../clients/cli/connections.c:1758
#, c-format
msgid "Error: Connection activation failed."
msgstr "பிழை: இணைபà¯à®ªà¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
-#: ../cli/src/connections.c:1713
+#: ../clients/cli/connections.c:1809
#, c-format
msgid "VPN connection successfully activated (D-Bus active path: %s)\n"
msgstr "VPN இணைபà¯à®ªà¯ வெறà¯à®±à®¿à®•à®°à®®à®¾à®• செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯ (டி-பஸ௠செயல௠பாதை: %s)\n"
-#: ../cli/src/connections.c:1720
+#: ../clients/cli/connections.c:1817
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "பிழை: இணைபà¯à®ªà¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s."
-#: ../cli/src/connections.c:1738 ../cli/src/devices.c:1294
+#: ../clients/cli/connections.c:1836 ../clients/cli/devices.c:1322
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "பிழை: நேரமà¯à®Ÿà®¿à®¨à¯à®¤ %d விநாடி காலாவதியானதà¯."
-#: ../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
+#: ../clients/cli/connections.c:1896
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "பிழை: இணைபà¯à®ªà¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ:%s"
-#: ../cli/src/connections.c:1928 ../cli/src/connections.c:2060
-#| msgid "Unknown error"
+#: ../clients/cli/connections.c:1981
+#, c-format
+#| msgid "Error: failed to remove value of '%s': %s\n"
+msgid "failed to read passwd-file '%s': %s"
+msgstr "'%s' எனà¯à®®à¯ passwd-file கோபà¯à®ªà¯ˆ வாசிகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+
+#: ../clients/cli/connections.c:1993
+#, c-format
+msgid "missing colon in 'password' entry '%s'"
+msgstr "'password' உளà¯à®³à¯€à®Ÿà¯ '%s' இல௠மà¯à®•à¯à®•à®¾à®±à¯à®ªà¯à®³à¯à®³à®¿ இலà¯à®²à¯ˆ"
+
+#: ../clients/cli/connections.c:2001
+#, c-format
+msgid "missing dot in 'password' entry '%s'"
+msgstr "'password' உளà¯à®³à¯€à®Ÿà¯ '%s' இல௠பà¯à®³à¯à®³à®¿ இலà¯à®²à¯ˆ"
+
+#: ../clients/cli/connections.c:2014
+#, c-format
+msgid "invalid setting name in 'password' entry '%s'"
+msgstr "'password' உளà¯à®³à¯€à®Ÿà¯ '%s' இல௠தவறான அமைபà¯à®ªà¯à®ªà¯ பெயர௠உளà¯à®³à®¤à¯"
+
+#: ../clients/cli/connections.c:2061 ../clients/cli/connections.c:2220
msgid "unknown error"
msgstr "தெரியாத பிழை"
-#: ../cli/src/connections.c:1936
+#: ../clients/cli/connections.c:2070
#, c-format
-#| msgid "Unknown log level '%s'"
msgid "unknown device '%s'."
msgstr "தெரியாத சாதனம௠'%s'."
-#: ../cli/src/connections.c:1941
-#| msgid "no active connection or device"
+#: ../clients/cli/connections.c:2075
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 அலà¯à®²à®¤à¯ பாதை): "
+#: ../clients/cli/connections.c:2158
+#, c-format
+#| msgid "Error: connection is not valid: %s\n"
+msgid "Error: Connection '%s' does not exist."
+msgstr "பிழை: '%s' எனà¯à®±à¯ ஒர௠இணைபà¯à®ªà¯ இலà¯à®²à¯ˆ."
-#: ../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
+#: ../clients/cli/connections.c:2204 ../clients/cli/devices.c:1221
+#: ../clients/cli/devices.c:1923 ../clients/cli/devices.c:2297
+#: ../clients/cli/devices.c:2583
#, c-format
msgid "Unknown parameter: %s\n"
msgstr "தெரியாத அளவà¯à®°à¯: %s\n"
-#: ../cli/src/connections.c:2068
+#: ../clients/cli/connections.c:2228
msgid "preparing"
msgstr "தயாராகிறதà¯"
-#: ../cli/src/connections.c:2096 ../cli/src/connections.c:7928
-#: ../cli/src/connections.c:8043
+#: ../clients/cli/connections.c:2267
+#, c-format
+#| msgid "Connection successfully activated (D-Bus active path: %s)\n"
+msgid "Connection '%s' successfully deactivated (D-Bus active path: %s)\n"
+msgstr "'%s' எனà¯à®®à¯ இணைபà¯à®ªà¯ வெறà¯à®±à®¿à®•à®°à®®à®¾à®• à®®à¯à®Ÿà®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯ (D-Bus செயல௠பாதை: %s)\n"
+
+#: ../clients/cli/connections.c:2325 ../clients/cli/connections.c:8697
+#: ../clients/cli/connections.c:8811
#, c-format
msgid "Error: No connection specified."
msgstr "பிழை: இணைபà¯à®ªà¯ எதà¯à®µà¯à®®à¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
-#: ../cli/src/connections.c:2133
+#: ../clients/cli/connections.c:2356
#, c-format
-msgid "Error: '%s' is not an active connection."
-msgstr "பிழை: '%s' எனà¯à®ªà®¤à¯ ஓர௠செயலிலà¯à®³à¯à®³ இணைபà¯à®ªà¯ இலà¯à®²à¯ˆ."
+#| msgid "Error: '%s' is not an active connection."
+msgid "Error: '%s' is not an active connection.\n"
+msgstr "பிழை: '%s' எனà¯à®ªà®¤à¯ செயலிலà¯à®³à¯à®³ ஒர௠இணைபà¯à®ªà®²à¯à®².\n"
-#: ../cli/src/connections.c:2445 ../cli/src/utils.c:507
+#: ../clients/cli/connections.c:2357
+#, c-format
+#| msgid "Error: '%s' is not an active connection."
+msgid "Error: not all active connections found."
+msgstr "பிழை: செயலிலà¯à®³à¯à®³ இணைபà¯à®ªà¯à®•à®³à¯ அனைதà¯à®¤à¯à®®à¯ கணà¯à®Ÿà®±à®¿à®¯à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../clients/cli/connections.c:2366
+#, c-format
+#| msgid "Error: %s - no such connection profile."
+msgid "Error: no active connection provided."
+msgstr "பிழை: செயலிலà¯à®³à¯à®³ இணைபà¯à®ªà¯ வழஙà¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../clients/cli/connections.c:2684 ../clients/cli/utils.c:516
#, c-format
-#| msgid "'%s' not allowed for %s=%s"
msgid "'%s' not among [%s]"
msgstr "'%s' ஆனத௠இலà¯à®²à¯ˆ [%s]"
-#: ../cli/src/connections.c:2527
+#: ../clients/cli/connections.c:2763
#, c-format
-#| 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
+#. Ask for optional arguments
+#: ../clients/cli/connections.c:2764 ../clients/cli/connections.c:3226
+#: ../clients/tui/nm-editor-utils.c:164 ../libnm-core/nm-connection.c:1551
+#: ../libnm-glib/nm-device.c:1802 ../libnm/nm-device.c:1623
msgid "InfiniBand"
msgstr "InfiniBand"
-#: ../cli/src/connections.c:2528 ../tui/nm-editor-utils.c:156
-#: ../tui/nm-ui-utils.c:335
+#: ../clients/cli/connections.c:2764 ../clients/tui/nm-editor-utils.c:147
+#: ../libnm-glib/nm-device.c:1790 ../libnm/nm-device.c:1611
msgid "Ethernet"
msgstr "ஈதà¯à®¤à®°à¯à®¨à¯†à®Ÿà¯"
-#: ../cli/src/connections.c:2551
+#: ../clients/cli/connections.c:2784
#, c-format
-#| 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:2567
+#: ../clients/cli/connections.c:2800
#, c-format
-#| 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:2588
+#: ../clients/cli/connections.c:2821
#, c-format
-#| 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:2604
+#: ../clients/cli/connections.c:2866
#, c-format
-msgid ""
-"Error: 'mode': '%s' is not a valid InfiniBand transport mode [datagram, "
-"connected]."
-msgstr ""
-"பிழை: 'mode': '%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© InfiniBand போகà¯à®•à¯à®µà®°à®¤à¯à®¤à¯à®ªà¯ பயனà¯à®®à¯à®±à¯ˆ "
-"அலà¯à®² [டேடà¯à®Ÿà®¾à®•à¯à®°à®¾à®®à¯, இணைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯]."
+#| msgid "Error: '%s': '%s' is not valid; %s "
+msgid "Error: '%s': '%s' is not a valid %s %s."
+msgstr "பிழை: '%s': '%s' எனà¯à®ªà®¤à¯ சரியான %s %s அலà¯à®²."
+
+#: ../clients/cli/connections.c:2879
+#| msgid "Wi-Fi"
+msgid "Wi-Fi mode"
+msgstr "Wi-Fi à®®à¯à®±à¯ˆ"
-#: ../cli/src/connections.c:2620
+#: ../clients/cli/connections.c:2888
+#| msgid "Transport mode"
+msgid "InfiniBand transport mode"
+msgstr "InfiniBand டிரானà¯à®¸à¯à®ªà¯‹à®°à¯à®Ÿà¯ à®®à¯à®±à¯ˆ"
+
+#: ../clients/cli/connections.c:2901
#, c-format
-#| msgid "Error: 'radio' command '%s' is not valid."
msgid "Error: 'flags': '%s' is not valid; use <0-7>."
msgstr "பிழை: 'flags': '%s' செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®²à¯à®²; <0-7> à®à®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯."
-#: ../cli/src/connections.c:2642
+#: ../clients/cli/connections.c:2923
#, c-format
-#| msgid "Error: 'dev' command '%s' is not valid."
msgid "Error: '%s': '%s' is not valid; %s "
msgstr "பிழை: '%s': '%s' செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®²à¯à®²; %s "
-#: ../cli/src/connections.c:2749
+#: ../clients/cli/connections.c:3102
#, 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> à®à®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯."
-#: ../cli/src/connections.c:2763
-msgid "ethernet"
-msgstr "ஈதà¯à®¤à®°à¯à®¨à¯†à®Ÿà¯"
+#. Ask for optional arguments.
+#: ../clients/cli/connections.c:3158
+#, 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] "'%2$s' இணைபà¯à®ªà¯ வகைகà¯à®•à¯ கடà¯à®Ÿà®¾à®¯à®®à®±à¯à®± %1$d மதிபà¯à®ªà¯à®°à¯ உளà¯à®³à®¤à¯\n"
+msgstr[1] "'%2$s' இணைபà¯à®ªà¯ வகைகà¯à®•à¯ கடà¯à®Ÿà®¾à®¯à®®à®±à¯à®± %1$d மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ உளà¯à®³à®©.\n"
-#: ../cli/src/connections.c:2763 ../tui/nm-editor-utils.c:164
-#: ../tui/nm-ui-utils.c:337
-msgid "Wi-Fi"
-msgstr "Wi-Fi"
+#: ../clients/cli/connections.c:3161
+#, c-format
+msgid "Do you want to provide it? %s"
+msgid_plural "Do you want to provide them? %s"
+msgstr[0] "அதை வழஙà¯à®• விரà¯à®®à¯à®ªà¯à®•à®¿à®±à¯€à®°à¯à®•à®³à®¾? %s"
+msgstr[1] "அவறà¯à®±à¯ˆ வழஙà¯à®• விரà¯à®®à¯à®ªà¯à®•à®¿à®±à¯€à®°à¯à®•à®³à®¾? %s"
#. 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"
-
-#: ../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] "
-
-#: ../cli/src/connections.c:2775 ../cli/src/connections.c:2829
-#: ../cli/src/connections.c:2956 ../cli/src/connections.c:3057
+#: ../clients/cli/connections.c:3178
+msgid "ethernet"
+msgstr "ஈதà¯à®¤à®°à¯à®¨à¯†à®Ÿà¯"
+
+#: ../clients/cli/connections.c:3183 ../clients/cli/connections.c:3231
+#: ../clients/cli/connections.c:3365 ../clients/cli/connections.c:3444
msgid "MTU [auto]: "
msgstr "MTU [auto]: "
-#: ../cli/src/connections.c:2786 ../cli/src/connections.c:2840
-#: ../cli/src/connections.c:2919 ../cli/src/connections.c:2967
+#: ../clients/cli/connections.c:3194 ../clients/cli/connections.c:3242
+#: ../clients/cli/connections.c:3337 ../clients/cli/connections.c:3376
+#: ../clients/cli/connections.c:3748
msgid "MAC [none]: "
msgstr "MAC [none]: "
-#: ../cli/src/connections.c:2797
+#: ../clients/cli/connections.c:3205
msgid "Cloned MAC [none]: "
msgstr "Cloned MAC [none]: "
-#. Ask for optional arguments
-#: ../cli/src/connections.c:2820
+#: ../clients/cli/connections.c:3253
#, c-format
-msgid "There are 5 optional arguments for 'InfiniBand' connection type.\n"
-msgstr "'InfiniBand' இணைபà¯à®ªà¯ வகைகà¯à®•à¯ 5 கடà¯à®Ÿà®¾à®¯à®®à®±à¯à®± மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ உளà¯à®³à®©.\n"
-
-#: ../cli/src/connections.c:2851
-msgid "Transport mode (datagram or connected) [datagram]: "
-msgstr ""
-"போகà¯à®•à¯à®µà®°à®¤à¯à®¤à¯à®ªà¯ பயனà¯à®®à¯à®±à¯ˆ (டேடà¯à®Ÿà®¾à®•à¯à®°à®¾à®®à¯ அலà¯à®²à®¤à¯ இணைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯) [datagram]: "
+msgid "Transport mode %s"
+msgstr "போகà¯à®•à¯à®µà®°à®¤à¯à®¤à¯ à®®à¯à®±à¯ˆà®®à¯ˆ %s"
-#: ../cli/src/connections.c:2864
+#: ../clients/cli/connections.c:3266
msgid "Parent interface [none]: "
msgstr "தாய௠இடைமà¯à®•à®®à¯ [none]: "
-#: ../cli/src/connections.c:2875
+#: ../clients/cli/connections.c:3277
msgid "P_KEY [none]: "
msgstr "P_KEY [none]: "
-#: ../cli/src/connections.c:2885
+#: ../clients/cli/connections.c:3287
#, 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
+#. Ask for optional arguments
+#: ../clients/cli/connections.c:3304 ../clients/tui/nm-editor-utils.c:155
+#: ../libnm-glib/nm-device.c:1792 ../libnm/nm-device.c:1613
+msgid "Wi-Fi"
+msgstr "Wi-Fi"
+
+#: ../clients/cli/connections.c:3312
#, c-format
-msgid "There is 1 optional argument for 'WiMax' connection type.\n"
-msgstr "'WiMax' இணைபà¯à®ªà¯ வகைகà¯à®•à¯ கடà¯à®Ÿà®¾à®¯à®®à®±à¯à®± 1 மதிபà¯à®ªà¯à®°à¯ உளà¯à®³à®¤à¯.\n"
+#| msgid "Mode"
+msgid "Mode %s"
+msgstr "à®®à¯à®±à¯ˆ %s"
-#: ../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 'wimax' arguments.
+#: ../clients/cli/connections.c:3332 ../libnm-glib/nm-device.c:1798
+#: ../libnm/nm-device.c:1619
+msgid "WiMAX"
+msgstr "WiMAX"
#. 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"
+#: ../clients/cli/connections.c:3355
+msgid "PPPoE"
+msgstr "PPPoE"
-#: ../cli/src/connections.c:2950 ../cli/src/connections.c:2998
+#: ../clients/cli/connections.c:3359 ../clients/cli/connections.c:3397
msgid "Password [none]: "
msgstr "கடவà¯à®šà¯à®šà¯Šà®²à¯ [none]: "
-#: ../cli/src/connections.c:2952
-#| msgid "Service"
+#: ../clients/cli/connections.c:3361
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"
+#: ../clients/cli/connections.c:3391
+msgid "mobile broadband"
+msgstr "மொபல௠பà¯à®°à®¾à®Ÿà¯à®ªà¯‡à®£à¯à®Ÿà¯"
-#: ../cli/src/connections.c:2996 ../cli/src/connections.c:3441
+#: ../clients/cli/connections.c:3395 ../clients/cli/connections.c:3820
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"
+#: ../clients/cli/connections.c:3410
+msgid "bluetooth"
+msgstr "bluetooth"
-#: ../cli/src/connections.c:3021
-msgid "Bluetooth type (panu, dun-gsm or dun-cdma) [panu]: "
-msgstr "Bluetooth வகை (panu, dun-gsm அலà¯à®²à®¤à¯ dun-cdma) [panu]: "
+#: ../clients/cli/connections.c:3417
+#, c-format
+msgid "Bluetooth type %s"
+msgstr "Bluetooth வகை %s"
-#: ../cli/src/connections.c:3029
+#: ../clients/cli/connections.c:3423
#, 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"
+#. 13
+#: ../clients/cli/connections.c:3439 ../clients/cli/devices.c:233
+#: ../clients/tui/nm-editor-utils.c:218 ../clients/tui/nmt-page-vlan.c:97
+#: ../libnm-core/nm-connection.c:1549 ../libnm-glib/nm-device.c:1810
+#: ../libnm-util/nm-connection.c:1614 ../libnm/nm-device.c:1631
+msgid "VLAN"
+msgstr "VLAN"
-#: ../cli/src/connections.c:3068
+#: ../clients/cli/connections.c:3455
msgid "VLAN flags (<0-7>) [none]: "
msgstr "VLAN கொடிகள௠(<0-7>) [none]: "
-#: ../cli/src/connections.c:3079
+#: ../clients/cli/connections.c:3466
msgid "Ingress priority maps [none]: "
msgstr "இனà¯à®•à®¿à®°à¯†à®¸à¯ à®®à¯à®©à¯à®©à¯à®°à®¿à®®à¯ˆ வரைபடஙà¯à®•à®³à¯ [none]: "
-#: ../cli/src/connections.c:3090
+#: ../clients/cli/connections.c:3477
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
+#: ../clients/cli/connections.c:3488
msgid "Bonding mode [balance-rr]: "
msgstr "பிணைபà¯à®ªà®¾à®•à¯à®•à®²à¯ பயனà¯à®®à¯à®±à¯ˆ [balance-rr]: "
-#: ../cli/src/connections.c:3142
+#. Ask for optional 'bond' arguments.
+#: ../clients/cli/connections.c:3504
+msgid "bond"
+msgstr "பிணைபà¯à®ªà¯"
+
+#: ../clients/cli/connections.c:3526
msgid "Bonding primary interface [none]: "
msgstr "பிணைபà¯à®ªà®¾à®•à¯à®•à¯à®®à¯ à®®à¯à®¤à®²à¯ நிலை இடைமà¯à®•à®®à¯ [none]: "
-#: ../cli/src/connections.c:3145
+#: ../clients/cli/connections.c:3529
#, 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]: "
+#: ../clients/cli/connections.c:3537
+#, c-format
+msgid "Bonding monitoring mode %s"
+msgstr "பிணைபà¯à®ªà®¾à®•à¯à®•à®²à¯ கணà¯à®•à®¾à®£à®¿à®ªà¯à®ªà¯ à®®à¯à®±à¯ˆà®®à¯ˆ %s"
-#: ../cli/src/connections.c:3158
+#: ../clients/cli/connections.c:3543
#, 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
+#: ../clients/cli/connections.c:3552
msgid "Bonding miimon [100]: "
msgstr "பிணைபà¯à®ªà®¾à®•à¯à®•à¯à®®à¯ miimon [100]: "
-#: ../cli/src/connections.c:3170
+#: ../clients/cli/connections.c:3555
#, 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
+#: ../clients/cli/connections.c:3563
msgid "Bonding downdelay [0]: "
msgstr "பிணைபà¯à®ªà®¾à®•à¯à®•à¯à®®à¯ downdelay [0]: "
-#: ../cli/src/connections.c:3181
+#: ../clients/cli/connections.c:3566
#, 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
+#: ../clients/cli/connections.c:3574
msgid "Bonding updelay [0]: "
msgstr "பிணைபà¯à®ªà®¾à®•à¯à®•à¯à®®à¯ updelay [0]: "
-#: ../cli/src/connections.c:3192
+#: ../clients/cli/connections.c:3577
#, 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
+#: ../clients/cli/connections.c:3586
msgid "Bonding arp-interval [0]: "
msgstr "பிணைபà¯à®ªà®¾à®•à¯à®•à¯à®®à¯ arp-interval [0]: "
-#: ../cli/src/connections.c:3204
+#: ../clients/cli/connections.c:3589
#, 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
+#: ../clients/cli/connections.c:3597
msgid "Bonding arp-ip-target [none]: "
msgstr "பிணைபà¯à®ªà®¾à®•à¯à®•à¯à®®à¯ arp-ip-target [none]: "
-#. Ask for optional 'team' arguments.
-#: ../cli/src/connections.c:3231
+#: ../clients/cli/connections.c:3604
+msgid "LACP rate ('slow' or 'fast') [slow]: "
+msgstr "LACP விகிதம௠('slow' அலà¯à®²à®¤à¯ 'fast') [slow]: "
+
+#: ../clients/cli/connections.c:3610
#, c-format
-#| msgid "Error: missing argument for '%s' option."
-msgid "There is 1 optional argument for '%s' connection type.\n"
-msgstr "'%s' இணைபà¯à®ªà¯ வகைகà¯à®•à¯ கடà¯à®Ÿà®¾à®¯à®®à®±à¯à®± 1 மதிபà¯à®ªà¯à®°à¯ உளà¯à®³à®¤à¯.\n"
+#| msgid "Error: 'master': '%s' is not valid UUID nor interface."
+msgid "Error: 'lacp_rate': '%s' is invalid ('slow' or 'fast').\n"
+msgstr "பிழை: 'lacp_rate': '%s' எனà¯à®ªà®¤à¯ தவறானத௠('slow' அலà¯à®²à®¤à¯ 'fast').\n"
-#: ../cli/src/connections.c:3240
-#| msgid "The IP configuration is no longer valid"
+#: ../clients/cli/connections.c:3633
msgid "Team JSON configuration [none]: "
msgstr "அணி JSON அமைவாகà¯à®•à®®à¯ [none]: "
-#: ../cli/src/connections.c:3259
+#: ../clients/cli/connections.c:3650
msgid "team"
msgstr "அணி"
-#: ../cli/src/connections.c:3265
+#: ../clients/cli/connections.c:3656
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"
+#: ../clients/cli/connections.c:3668
+msgid "bridge"
+msgstr "பிரிடà¯à®œà¯"
-#: ../cli/src/connections.c:3289
-msgid "Enable STP (yes/no) [yes]: "
-msgstr "STP ஠செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯ (yes/no) [yes]: "
+#: ../clients/cli/connections.c:3674
+#, c-format
+msgid "Enable STP %s"
+msgstr "STP %s ஠செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯"
-#: ../cli/src/connections.c:3293
+#: ../clients/cli/connections.c:3679
#, c-format
-#| msgid "Error: 'nm status': %s"
-msgid "Error: 'stp': '%s'.\n"
-msgstr "பிழை: 'stp': '%s'.\n"
+msgid "Error: 'stp': %s.\n"
+msgstr "பிழை: 'stp': %s.\n"
-#: ../cli/src/connections.c:3301
-msgid "STP priority [128]: "
-msgstr "STP à®®à¯à®©à¯à®©à¯à®°à®¿à®®à¯ˆ [128]: "
+#: ../clients/cli/connections.c:3687
+msgid "STP priority [32768]: "
+msgstr "STP à®®à¯à®©à¯à®©à¯à®°à®¿à®®à¯ˆ [32768]: "
-#: ../cli/src/connections.c:3305
+#: ../clients/cli/connections.c:3691
#, 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
+#: ../clients/cli/connections.c:3699
msgid "Forward delay [15]: "
msgstr "பகிரà¯à®¤à®²à¯ தாமதம௠[15]: "
-#: ../cli/src/connections.c:3317
+#: ../clients/cli/connections.c:3703
#, 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
+#: ../clients/cli/connections.c:3712
msgid "Hello time [2]: "
msgstr "ஹலோ நேரம௠[2]: "
-#: ../cli/src/connections.c:3330
+#: ../clients/cli/connections.c:3716
#, 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
+#: ../clients/cli/connections.c:3724
msgid "Max age [20]: "
msgstr "அதிகபடà¯à®š வயத௠[20]: "
-#: ../cli/src/connections.c:3342
+#: ../clients/cli/connections.c:3728
#, 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
+#: ../clients/cli/connections.c:3736
msgid "MAC address ageing time [300]: "
msgstr "MAC à®®à¯à®•à®µà®°à®¿ வயதாகà¯à®®à¯ காலம௠[300]: "
-#: ../cli/src/connections.c:3354
+#: ../clients/cli/connections.c:3740
#, 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"
+#: ../clients/cli/connections.c:3767
+msgid "bridge-slave"
+msgstr "பிரிடà¯à®œà¯-ஸà¯à®²à¯‡à®µà¯"
-#: ../cli/src/connections.c:3384
+#: ../clients/cli/connections.c:3772
msgid "Bridge port priority [32]: "
msgstr "பிரிடà¯à®œà¯ à®®à¯à®©à¯ˆà®¯ à®®à¯à®©à¯à®©à¯à®°à®¿à®®à¯ˆ [32]: "
-#: ../cli/src/connections.c:3397
+#: ../clients/cli/connections.c:3785
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
+#: ../clients/cli/connections.c:3799
#, c-format
-#| msgid "Error: 'show active': %s"
-msgid "Error: 'hairpin': '%s'.\n"
-msgstr "பிழை: 'hairpin': '%s'.\n"
+msgid "Hairpin %s"
+msgstr "ஹேரà¯à®ªà®¿à®©à¯ %s"
-#. Ask for optional 'vpn' arguments.
-#: ../cli/src/connections.c:3433
+#: ../clients/cli/connections.c:3804
#, c-format
-#| msgid "Error: missing argument for '%s' option."
-msgid "There is 1 optional argument for 'VPN' connection type.\n"
-msgstr "'VPN' இணைபà¯à®ªà¯ வகைகà¯à®•à¯ கடà¯à®Ÿà®¾à®¯à®®à®±à¯à®± 1 மதிபà¯à®ªà¯à®°à¯ உளà¯à®³à®¤à¯.\n"
+msgid "Error: 'hairpin': %s.\n"
+msgstr "பிழை: 'hairpin': %s. \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"
+#: ../clients/cli/connections.c:3831 ../libnm-glib/nm-device.c:1796
+#: ../libnm/nm-device.c:1617
+msgid "OLPC Mesh"
+msgstr "OLPC மெஷà¯"
-#: ../cli/src/connections.c:3466
+#: ../clients/cli/connections.c:3836
msgid "OLPC Mesh channel [1]: "
msgstr "OLPC Mesh சேனல௠[1]: "
-#: ../cli/src/connections.c:3469
+#: ../clients/cli/connections.c:3839
#, 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
+#: ../clients/cli/connections.c:3847
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]: "
+#: ../clients/cli/connections.c:3889
+#| msgid "IPv4 address (IP[/plen] [gateway]) [none]: "
+msgid "IPv4 address (IP[/plen]) [none]: "
+msgstr "IPv4 à®®à¯à®•à®µà®°à®¿ (IP[/plen]) [none]:"
-#: ../cli/src/connections.c:3527
-msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
-msgstr "IPv6 à®®à¯à®•à®µà®°à®¿ (IP[/plen] [gateway]) [none]: "
+#: ../clients/cli/connections.c:3891
+#| msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
+msgid "IPv6 address (IP[/plen]) [none]: "
+msgstr "IPv6 à®®à¯à®•à®µà®°à®¿ (IP[/plen]) [none]: "
-#: ../cli/src/connections.c:3545
+#: ../clients/cli/connections.c:3905
#, c-format
-msgid " Address successfully added: %s %s\n"
-msgstr " à®®à¯à®•à®µà®°à®¿ வெறà¯à®±à®¿à®•à®°à®®à®¾à®• சேரà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯: %s %s\n"
+#| msgid " Address successfully added: %s %s\n"
+msgid " Address successfully added: %s\n"
+msgstr " à®®à¯à®•à®µà®°à®¿ வெறà¯à®±à®¿à®•à®°à®®à®¾à®• சேரà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯: %s\n"
-#: ../cli/src/connections.c:3547
+#: ../clients/cli/connections.c:3907
#, c-format
-msgid " Warning: address already present: %s %s\n"
-msgstr " எசà¯à®šà®°à®¿à®•à¯à®•à¯ˆ: à®®à¯à®•à®µà®°à®¿ à®à®±à¯à®•à®©à®µà¯‡ உளà¯à®³à®¤à¯: %s %s\n"
+#| msgid " Warning: address already present: %s %s\n"
+msgid " Warning: address already present: %s\n"
+msgstr " எசà¯à®šà®°à®¿à®•à¯à®•à¯ˆ: à®®à¯à®•à®µà®°à®¿ à®à®±à¯à®•à®©à®µà¯‡ உளà¯à®³à®¤à¯: %s\n"
-#: ../cli/src/connections.c:3549
+#: ../clients/cli/connections.c:3909
#, 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"
+#: ../clients/cli/connections.c:3911 ../clients/cli/connections.c:4791
+#: ../clients/cli/connections.c:4852 ../clients/cli/connections.c:5253
+#: ../clients/cli/connections.c:5286
msgid "Error: "
msgstr "பிழை: "
+#: ../clients/cli/connections.c:3931
+#| msgid "IPv4 address (IP[/plen] [gateway]) [none]: "
+msgid "IPv4 gateway [none]: "
+msgstr "IPv4 நà¯à®´à¯ˆà®µà®¾à®¯à®¿à®²à¯ [none]: "
+
+#: ../clients/cli/connections.c:3934
+#| msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
+msgid "IPv6 gateway [none]: "
+msgstr "IPv6 நà¯à®´à¯ˆà®µà®¾à®¯à®¿à®²à¯ [none]:"
+
+#: ../clients/cli/connections.c:3954
+#, c-format
+#| msgid "Error: invalid argument '%s'\n"
+msgid "Error: invalid gateway address '%s'\n"
+msgstr "பிழை: '%s' எனà¯à®®à¯ நà¯à®´à¯ˆà®µà®¾à®¯à®¿à®²à¯ à®®à¯à®•à®µà®°à®¿ தவறானதà¯\n"
+
#. 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] "
+#: ../clients/cli/connections.c:3967
+#, c-format
+msgid "Do you want to add IP addresses? %s"
+msgstr "IP à®®à¯à®•à®µà®°à®¿à®•à®³à¯ˆà®šà¯ சேரà¯à®•à¯à®• வேணà¯à®Ÿà¯à®®à®¾? %s"
-#: ../cli/src/connections.c:3575
+#: ../clients/cli/connections.c:3975
#, c-format
msgid "Press <Enter> to finish adding addresses.\n"
msgstr "à®®à¯à®•à®µà®°à®¿à®•à®³à¯ˆà®šà¯ சேரà¯à®•à¯à®•à¯à®®à¯ செயலை à®®à¯à®Ÿà®¿à®•à¯à®• <Enter> à® à®…à®´à¯à®¤à¯à®¤à®µà¯à®®à¯.\n"
-#: ../cli/src/connections.c:3721
+#: ../clients/cli/connections.c:4113
#, 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"
+#: ../clients/cli/connections.c:4168 ../clients/cli/connections.c:5173
msgid "SSID: "
msgstr "SSID: "
-#: ../cli/src/connections.c:3780 ../cli/src/connections.c:4773
-#| msgid "Error: value for '%s' argument is required."
+#: ../clients/cli/connections.c:4171 ../clients/cli/connections.c:5176
msgid "Error: 'ssid' is required."
msgstr "பிழை: 'ssid' தேவை."
-#: ../cli/src/connections.c:3844
-#| msgid "WiMAX NSP list"
+#: ../clients/cli/connections.c:4235
msgid "WiMAX NSP name: "
msgstr "WiMAX NSP பெயரà¯: "
-#: ../cli/src/connections.c:3847
-#| msgid "Error: value for '%s' argument is required."
+#: ../clients/cli/connections.c:4238
msgid "Error: 'nsp' is required."
msgstr "பிழை: 'nsp' தேவை."
-#: ../cli/src/connections.c:3902
+#: ../clients/cli/connections.c:4290
msgid "PPPoE username: "
msgstr "PPPoE பயனரà¯à®ªà¯†à®¯à®°à¯: "
-#: ../cli/src/connections.c:3905
-#| msgid "Error: value for '%s' argument is required."
+#: ../clients/cli/connections.c:4293
msgid "Error: 'username' is required."
msgstr "பிழை: 'username' தேவை."
-#: ../cli/src/connections.c:3976
+#: ../clients/cli/connections.c:4362
msgid "APN: "
msgstr "APN: "
-#: ../cli/src/connections.c:3979
-#| msgid "Error: value for '%s' argument is required."
+#: ../clients/cli/connections.c:4365
msgid "Error: 'apn' is required."
msgstr "பிழை: 'apn' தேவை."
-#: ../cli/src/connections.c:4038
+#: ../clients/cli/connections.c:4423
msgid "Bluetooth device address: "
msgstr "Bluetooth சாதன à®®à¯à®•à®µà®°à®¿: "
-#: ../cli/src/connections.c:4041
-#| msgid "Error: value for '%s' argument is required."
+#: ../clients/cli/connections.c:4426
msgid "Error: 'addr' is required."
msgstr "பிழை: 'addr' தேவை."
-#: ../cli/src/connections.c:4084
+#: ../clients/cli/connections.c:4467
#, 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'"
+#: ../clients/cli/connections.c:4511
msgid "VLAN parent device or connection UUID: "
msgstr "VLAN தாய௠சாதனம௠அலà¯à®²à®¤à¯ இணைபà¯à®ªà¯ UUID: "
-#: ../cli/src/connections.c:4132
-#| msgid "Error: value for '%s' argument is required."
+#: ../clients/cli/connections.c:4514
msgid "Error: 'dev' is required."
msgstr "பிழை: 'dev' தேவை."
-#: ../cli/src/connections.c:4136
+#: ../clients/cli/connections.c:4518
msgid "VLAN ID <0-4095>: "
msgstr "VLAN ID <0-4095>: "
-#: ../cli/src/connections.c:4139
-#| msgid "Error: Timeout %d sec expired."
+#: ../clients/cli/connections.c:4521
msgid "Error: 'id' is required."
msgstr "பிழை: 'id' தேவை."
-#: ../cli/src/connections.c:4145
+#: ../clients/cli/connections.c:4527
#, 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
+#: ../clients/cli/connections.c:4537
#, 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
+#: ../clients/cli/connections.c:4671
#, c-format
-#| msgid "Error: 'show active': %s"
msgid "Error: 'mode': %s."
msgstr "பிழை: 'mode': %s."
-#: ../cli/src/connections.c:4299
+#: ../clients/cli/connections.c:4680
#, 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."
+#: ../clients/cli/connections.c:4732 ../clients/cli/connections.c:4830
+#: ../clients/cli/connections.c:5032
msgid "Error: 'master' is required."
msgstr "பிழை: 'master' தேவை."
-#: ../cli/src/connections.c:4350 ../cli/src/connections.c:4447
-#: ../cli/src/connections.c:4635
+#: ../clients/cli/connections.c:4738 ../clients/cli/connections.c:4836
+#: ../clients/cli/connections.c:5038
+#, c-format
+msgid "Warning: master='%s' doesn't refer to any existing profile.\n"
+msgstr ""
+"எசà¯à®šà®°à®¿à®•à¯à®•à¯ˆ: master='%s' தறà¯à®ªà¯‹à®¤à¯à®³à¯à®³ தனியமைபà¯à®ªà¯ எதனையà¯à®®à¯ கà¯à®±à®¿à®•à¯à®•à®µà®¿à®²à¯à®²à¯ˆ.\n"
+
+#: ../clients/cli/connections.c:4741 ../clients/cli/connections.c:4844
+#: ../clients/cli/connections.c:5041
#, 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 "கà¯à®´à¯ மாஸà¯à®Ÿà¯à®Ÿà®°à¯: "
+"ஸà¯à®²à¯‡à®µà¯à®•à®³à¯ˆ "
+"மடà¯à®Ÿà¯à®®à¯‡ ஆதரிகà¯à®•à®¿à®±à¯‹à®®à¯.\n"
-#: ../cli/src/connections.c:4537
+#: ../clients/cli/connections.c:4938
#, 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
+#: ../clients/cli/connections.c:5068
#, 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."
+#: ../clients/cli/connections.c:5121
msgid "Error: 'vpn-type' is required."
msgstr "பிழை: 'vpn-type' தேவை."
-#: ../cli/src/connections.c:4728
+#: ../clients/cli/connections.c:5128
#, c-format
-#| msgid "Error: 'nm status': %s"
-msgid "Error: 'vpn-type': %s."
-msgstr "பிழை: 'vpn-type': %s."
+msgid "Warning: 'vpn-type': %s not known.\n"
+msgstr "எசà¯à®šà®°à®¿à®•à¯à®•à¯ˆ: 'vpn-type': %s தெரியாததà¯.\n"
-#: ../cli/src/connections.c:4786
+#: ../clients/cli/connections.c:5189
#, 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
+#: ../clients/cli/connections.c:5221
#, 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
+#: ../clients/cli/connections.c:5265
+#, c-format
+msgid "Error: IPv4 gateway specified without IPv4 addresses"
+msgstr "பிழை: IPv4 à®®à¯à®•à®µà®°à®¿à®•à®³à¯ இலà¯à®²à®¾à®®à®²à¯, IPv4 நà¯à®´à¯ˆà®µà®¾à®¯à®¿à®²à¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
+
+#: ../clients/cli/connections.c:5269
+#, c-format
+#| msgid "Error: no valid parameter specified."
+msgid "Error: multiple IPv4 gateways specified"
+msgstr "பிழை: ஒனà¯à®±à¯à®•à¯à®•à¯à®®à¯ அதிக IPv4 நà¯à®´à¯ˆà®µà®¾à®¯à®¿à®²à¯à®•à®³à¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®ªà¯à®ªà®Ÿà¯à®Ÿà®©"
+
+#: ../clients/cli/connections.c:5273
+#, c-format
+#| msgid "invalid gateway '%s'"
+msgid "Error: Invalid IPv4 gateway '%s'"
+msgstr "பிழை: '%s' எனà¯à®ªà®¤à¯ தவறான IPv4 நà¯à®´à¯ˆà®µà®¾à®¯à®¿à®²à¯"
+
+#: ../clients/cli/connections.c:5298
+#, c-format
+msgid "Error: IPv6 gateway specified without IPv6 addresses"
+msgstr "பிழை: IPv6 à®®à¯à®•à®µà®°à®¿à®•à®³à¯ இலà¯à®²à®¾à®®à®²à¯ IPv6 நà¯à®´à¯ˆà®µà®¾à®¯à®¿à®²à¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
+
+#: ../clients/cli/connections.c:5302
+#, c-format
+#| msgid "Error: no valid parameter specified."
+msgid "Error: multiple IPv6 gateways specified"
+msgstr "பிழை: ஒனà¯à®•à¯à®•à¯à®®à¯ அதிகமான IPv6 நà¯à®´à¯ˆà®µà®¾à®¯à®¿à®²à¯à®•à®³à¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®ªà¯à®ªà®Ÿà¯à®Ÿà®©"
+
+#: ../clients/cli/connections.c:5306
#, 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"
+#| msgid "invalid gateway '%s'"
+msgid "Error: Invalid IPv6 gateway '%s'"
+msgstr "பிழை: '%s' எனà¯à®ªà®¤à¯ தவறான IPv6 நà¯à®´à¯ˆà®µà®¾à®¯à®¿à®²à¯"
-#: ../cli/src/connections.c:4923
+#: ../clients/cli/connections.c:5366
+#, c-format
+msgid "Error: Failed to add '%s' connection: %s"
+msgstr "பிழை: '%s' இணைபà¯à®ªà¯ˆà®šà¯ சேரà¯à®ªà¯à®ªà®¤à®¿à®²à¯ தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯: %s"
+
+#: ../clients/cli/connections.c:5371
#, 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
+#: ../clients/cli/connections.c:5591
#, c-format
-#| msgid "Error: value for '%s' argument is required."
msgid "Error: 'type' argument is required."
msgstr "பிழை: 'type' மதிபà¯à®ªà¯à®°à¯ தேவை."
-#: ../cli/src/connections.c:4979
+#: ../clients/cli/connections.c:5599
#, c-format
-#| msgid "Error: Unknown connection: %s."
msgid "Error: invalid connection type; %s."
msgstr "பிழை: செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ இணைபà¯à®ªà¯ வகை; %s."
-#: ../cli/src/connections.c:4988
+#: ../clients/cli/connections.c:5608
#, c-format
-#| msgid "Error: Unknown connection: %s."
msgid "Error: 'autoconnect': %s."
msgstr "பிழை: 'autoconnect': %s."
-#: ../cli/src/connections.c:5004
+#: ../clients/cli/connections.c:5618
+#, c-format
+msgid "Error: 'save': %s."
+msgstr "பிழை: 'save': %s."
+
+#: ../clients/cli/connections.c:5634
msgid "Interface name [*]: "
msgstr "இடைமà¯à®•à®ªà¯ பெயர௠[*]: "
-#: ../cli/src/connections.c:5009
+#: ../clients/cli/connections.c:5639
#, c-format
-#| msgid "Error: value for '%s' argument is required."
msgid "Error: 'ifname' argument is required."
msgstr "பிழை: 'ifname' மதிபà¯à®ªà¯à®°à¯ தேவை."
-#: ../cli/src/connections.c:5016
+#: ../clients/cli/connections.c:5646
#, 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
+#: ../clients/cli/connections.c:6422
#, c-format
msgid "['%s' setting values]\n"
msgstr "['%s' அமைவ௠மதிபà¯à®ªà¯à®•à®³à¯]\n"
@@ -2122,8 +2497,23 @@ msgstr "['%s' அமைவ௠மதிபà¯à®ªà¯à®•à®³à¯]\n"
#. TRANSLATORS: do not translate command names and keywords before ::
#. * However, you should translate terms enclosed in <>.
#.
-#: ../cli/src/connections.c:5916
+#: ../clients/cli/connections.c:6504
#, 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"
msgid ""
"---[ Main menu ]---\n"
"goto [<setting> | <prop>] :: go to a setting or property\n"
@@ -2131,31 +2521,32 @@ msgid ""
"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"
+"print [all | <setting>[.<prop>]] :: print the connection\n"
+"verify [all | fix] :: 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> :: அமைவை நீகà¯à®•à¯ அலà¯à®²à®¤à¯ பணà¯à®ªà¯ˆ மீடà¯à®Ÿà®®à¯ˆ "
-"value\n"
-"set [<setting>.<prop> <value>] :: பணà¯à®ªà¯ மதிபà¯à®ªà¯ˆ அமை\n"
+"---[ பிரதான மென௠]---\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"
+"print [all | <setting>[.<prop>]] :: இணைபà¯à®ªà¯ˆ அசà¯à®šà®¿à®Ÿà¯\n"
+"verify [all | fix] :: இணைபà¯à®ªà¯ˆà®šà¯ சரிபாரà¯\n"
+"save [persistent|temporary] :: இணைபà¯à®ªà¯ˆà®šà¯ சேமி\n"
"activate [<ifname>] [/<ap>|<nsp>] :: இணைபà¯à®ªà¯ˆà®šà¯ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯\n"
-"back :: ஒர௠நிலை மேலே செல௠(பினà¯)\n"
-"help/? [<command>] :: இநà¯à®¤ உதவியை அசà¯à®šà®¿à®Ÿà¯\n"
+"back :: ஒர௠நிலை மேலே செல௠(திரà¯à®®à¯à®ªà¯)\n"
+"help/? [<command>] :: இநà¯à®¤ உதவித௠தகவலை அசà¯à®šà®¿à®Ÿà¯\n"
"nmcli <conf-option> <value> :: nmcli அமைவாகà¯à®•à®®à¯\n"
"quit :: nmcli இலிரà¯à®¨à¯à®¤à¯ வெளியேறà¯\n"
-#: ../cli/src/connections.c:5943
+#: ../clients/cli/connections.c:6531
#, c-format
msgid ""
"goto <setting>[.<prop>] | <prop> :: enter setting/property for editing\n"
@@ -2174,7 +2565,7 @@ msgstr ""
" nmcli connection> goto secondaries\n"
" nmcli> goto ipv4.addresses\n"
-#: ../cli/src/connections.c:5950
+#: ../clients/cli/connections.c:6538
#, c-format
msgid ""
"remove <setting>[.<prop>] :: remove setting or reset property value\n"
@@ -2195,7 +2586,7 @@ msgstr ""
"எடà¯à®¤à¯à®¤à¯à®•à¯à®•à®¾à®Ÿà¯à®Ÿà¯à®•à®³à¯: nmcli> remove wifi-sec\n"
" nmcli> remove eth.mtu\n"
-#: ../cli/src/connections.c:5957
+#: ../clients/cli/connections.c:6545
#, c-format
msgid ""
"set [<setting>.<prop> <value>] :: set property value\n"
@@ -2210,7 +2601,7 @@ msgstr ""
"\n"
"எடà¯à®¤à¯à®¤à¯à®•à¯à®•à®¾à®Ÿà¯à®Ÿà¯: nmcli> set con.id My connection\n"
-#: ../cli/src/connections.c:5962
+#: ../clients/cli/connections.c:6550
#, c-format
msgid ""
"describe [<setting>.<prop>] :: describe property\n"
@@ -2221,9 +2612,10 @@ msgstr ""
"describe [<setting>.<prop>] :: பணà¯à®ªà¯ˆ விவரி\n"
"\n"
"இத௠பணà¯à®ªà®¿à®©à¯ விளகà¯à®•à®¤à¯à®¤à¯ˆà®•à¯ காடà¯à®Ÿà¯à®®à¯. அனைதà¯à®¤à¯ NM அமைவà¯à®•à®³à¯ˆà®¯à¯à®®à¯ பணà¯à®ªà¯à®•à®³à¯ˆà®¯à¯à®®à¯ காண "
-"nm-settings(5) கையேடà¯à®Ÿà¯à®ªà¯ பகà¯à®•à®¤à¯à®¤à¯ˆà®ªà¯ பாரà¯à®•à¯à®•à®²à®¾à®®à¯.\n"
+"nm-"
+"settings(5) கையேடà¯à®Ÿà¯à®ªà¯ பகà¯à®•à®¤à¯à®¤à¯ˆà®ªà¯ பாரà¯à®•à¯à®•à®²à®¾à®®à¯.\n"
-#: ../cli/src/connections.c:5967
+#: ../clients/cli/connections.c:6555
#, c-format
msgid ""
"print [all] :: print setting or connection values\n"
@@ -2238,38 +2630,72 @@ msgstr ""
"\n"
"எடà¯à®¤à¯à®¤à¯à®•à¯à®•à®¾à®Ÿà¯à®Ÿà¯: nmcli ipv4> print all\n"
-#: ../cli/src/connections.c:5972
+#: ../clients/cli/connections.c:6560
#, 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"
msgid ""
-"verify [all] :: verify setting or connection validity\n"
+"verify [all | fix] :: 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"
+"Verifies whether the setting or connection is valid and can be saved later.\n"
+"It indicates invalid values on error. Some errors may be fixed "
+"automatically\n"
+"by 'fix' option.\n"
"\n"
"Examples: nmcli> verify\n"
+" nmcli> verify fix\n"
" nmcli bond> verify\n"
msgstr ""
-"verify [all] :: அமைவ௠அலà¯à®²à®¤à¯ இணைபà¯à®ªà®¿à®©à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¤à¯à®¤à®©à¯à®®à¯ˆà®¯à¯ˆ சரிபாரà¯\n"
+"verify [all | fix] :: அமைவ௠அலà¯à®²à®¤à¯ இணைபà¯à®ªà¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®¾ எனச௠"
+"சரிபாரà¯à®•à¯à®•à¯à®®à¯\n"
"\n"
-"ஒர௠அமைவ௠அலà¯à®²à®¤à¯ இணைபà¯à®ªà¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®¾ எனà¯à®±à¯à®®à¯ அதை பிறக௠சேமிகà¯à®• à®®à¯à®Ÿà®¿à®¯à¯à®®à®¾ "
-"எனà¯à®±à¯à®®à¯ சரிபாரà¯à®•à¯à®•à¯à®®à¯. செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ மதிபà¯à®ªà¯à®•à®³à¯ இரà¯à®¨à¯à®¤à®¾à®²à¯ பிழை மூலம௠"
-"தெரிவிகà¯à®•à¯à®®à¯.\n"
+"அமைவ௠அலà¯à®²à®¤à¯ இணைபà¯à®ªà¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®¾ எனà¯à®±à¯à®®à¯ பினà¯à®©à®°à¯ அதனைச௠சேமிகà¯à®• à®®à¯à®Ÿà®¿à®¯à¯à®®à®¾ "
+"எனà¯à®±à¯à®®à¯ எனச௠சரிபாரà¯à®•à¯à®•à¯à®®à¯.\n"
+"இத௠பிழையில௠தவறான மதிபà¯à®ªà¯à®•à®³à¯ˆà®•à¯ காணà¯à®ªà®¿à®•à¯à®•à¯à®®à¯. 'fix' விரà¯à®ªà¯à®ªà®¤à¯à®¤à¯ˆà®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®¿ "
+"சில பிழைகளை\n"
+"தானாகவே சரிசெயà¯à®¯ à®®à¯à®Ÿà®¿à®¯à¯à®®à¯.\n"
"\n"
"எடà¯à®¤à¯à®¤à¯à®•à¯à®•à®¾à®Ÿà¯à®Ÿà¯à®•à®³à¯: nmcli> verify\n"
+" nmcli> verify fix\n"
" nmcli bond> verify\n"
-#: ../cli/src/connections.c:5979
+#: ../clients/cli/connections.c:6569
#, 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
+"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 ""
+"சேமி [persistent|temporary] :: இணைபà¯à®ªà¯ˆà®šà¯ சேமி\n"
+"\n"
+"இணைபà¯à®ªà¯ தனியமைபà¯à®ªà¯ˆ NetworkManager கà¯à®•à¯ அனà¯à®ªà¯à®ªà¯à®®à¯, அதà¯it\n"
+"அதை நிரநà¯à®¤à®°à®®à®¾à®•à®šà¯ சேமிகà¯à®•à¯à®®à¯ அலà¯à®²à®¤à¯ நினைவகதà¯à®¤à®¿à®²à¯ மடà¯à®Ÿà¯à®®à¯ வைதà¯à®¤à¯à®•à¯à®•à¯Šà®³à¯à®³à¯à®®à¯. "
+"மதிபà¯à®ªà¯à®°à¯ இலà¯à®²à®¾à®®à®²à¯ "
+"'save'\n"
+"விரà¯à®ªà¯à®ªà®¤à¯à®¤à¯ˆ வழஙà¯à®•à®¿à®©à®¾à®²à¯ 'நிரநà¯à®¤à®°à®®à®¾à®•à®šà¯ சேமி' எனப௠பொரà¯à®³à®¾à®•à¯à®®à¯.\n"
+"தனியமைபà¯à®ªà¯ˆ நீஙà¯à®•à®³à¯ நிரநà¯à®¤à®°à®®à®¾à®•à®šà¯ சேமிதà¯à®¤à¯à®µà®¿à®Ÿà¯à®Ÿà®¾à®²à¯, அநà¯à®¤ அமைவà¯à®•à®³à¯\n"
+"மறà¯à®¤à¯à®µà®•à¯à®•à®®à¯ செயà¯à®¯à¯à®®à¯ போதà¯à®®à¯ செயலில௠இரà¯à®•à¯à®•à¯à®®à¯. அடà¯à®¤à¯à®¤à¯ செயà¯à®¯à¯à®®à¯ மாறà¯à®±à®™à¯à®•à®³à¯à®®à¯ "
+"தறà¯à®•à®¾à®²à®¿à®•à®®à®¾à®•à®µà¯‹ "
+"அலà¯à®²à®¤à¯\n"
+"நிரநà¯à®¤à®°à®®à®¾à®•à®µà¯‹ இரà¯à®•à¯à®•à®²à®¾à®®à¯, ஆனால௠தறà¯à®•à®¾à®²à®¿à®• மாறà¯à®±à®™à¯à®•à®³à¯ மறà¯à®¤à¯à®µà®•à¯à®•à®®à¯ ஆகà¯à®®à¯ போதà¯\n"
+"செயலில௠இரà¯à®•à¯à®•à®¾à®¤à¯. நிரநà¯à®¤à®°à®®à®¾à®© இணைபà¯à®ªà¯ˆ à®®à¯à®´à¯à®µà®¤à¯à®®à¯ நீகà¯à®•, இணைபà¯à®ªà¯\n"
+"தனியமைபà¯à®ªà¯ˆ நீகà¯à®• வேணà¯à®Ÿà¯à®®à¯.\n"
+
+#: ../clients/cli/connections.c:6580
#, c-format
msgid ""
"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
@@ -2288,9 +2714,10 @@ msgstr ""
"உளà¯à®³ விரà¯à®ªà¯à®ªà®™à¯à®•à®³à¯:\n"
"<ifname> - இணைபà¯à®ªà¯ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿ உளà¯à®³ சாதனமà¯\n"
"/<ap>|<nsp> - AP (Wi-Fi) அலà¯à®²à®¤à¯ NSP (WiMAX) (<ifname> கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®ªà¯à®ªà®Ÿà®¾à®¤ போத௠/ "
-"à® à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà®¾à®• சேரà¯à®•à¯à®•à®µà¯à®®à¯)\n"
+"à® "
+"à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà®¾à®• சேரà¯à®•à¯à®•à®µà¯à®®à¯)\n"
-#: ../cli/src/connections.c:5990 ../cli/src/connections.c:6140
+#: ../clients/cli/connections.c:6587 ../clients/cli/connections.c:6745
#, c-format
msgid ""
"back :: go to upper menu level\n"
@@ -2299,7 +2726,7 @@ msgstr ""
"back :: மெனà¯à®µà®¿à®©à¯ மேல௠நிலைகà¯à®•à¯à®šà¯ செலà¯\n"
"\n"
-#: ../cli/src/connections.c:5993
+#: ../clients/cli/connections.c:6590
#, c-format
msgid ""
"help/? [<command>] :: help for the nmcli commands\n"
@@ -2308,14 +2735,35 @@ msgstr ""
"help/? [<command>] :: nmcli கடà¯à®Ÿà®³à¯ˆà®•à®³à¯à®•à¯à®•à®¾à®© உதவி\n"
"\n"
-#: ../cli/src/connections.c:5996
+#: ../clients/cli/connections.c:6593
#, 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"
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"
+"show-secrets yes | no [default: no]\n"
"prompt-color <0-8> [default: 0]\n"
" 0 = normal\n"
" 1 = black\n"
@@ -2331,11 +2779,12 @@ msgid ""
" nmcli> nmcli save-confirmation no\n"
" nmcli> nmcli prompt-color 3\n"
msgstr ""
-"nmcli [<conf-option> <value>] :: nmcli அமைவாகà¯à®•à®®à¯\n"
+"nmcli [<conf-option> <value>] :: nmcli configuration\n"
"\n"
"nmcli ஠அமைவாகà¯à®•à®®à¯ செயà¯à®¯à¯à®®à¯. பினà¯à®µà®°à¯à®®à¯ விரà¯à®ªà¯à®ªà®™à¯à®•à®³à¯ உளà¯à®³à®©:\n"
"status-line yes | no [à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯: no]\n"
"save-confirmation yes | no [à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯: yes]\n"
+"show-secrets yes | no [à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯: no]\n"
"prompt-color <0-8> [à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯: 0]\n"
" 0 = normal\n"
" 1 = black\n"
@@ -2351,7 +2800,7 @@ msgstr ""
" nmcli> nmcli save-confirmation no\n"
" nmcli> nmcli prompt-color 3\n"
-#: ../cli/src/connections.c:6016 ../cli/src/connections.c:6146
+#: ../clients/cli/connections.c:6614 ../clients/cli/connections.c:6751
#, c-format
msgid ""
"quit :: exit nmcli\n"
@@ -2362,20 +2811,19 @@ msgstr ""
"quit :: nmcli இலிரà¯à®¨à¯à®¤à¯ வெளியேறà¯\n"
"\n"
"இநà¯à®¤à®•à¯ கடà¯à®Ÿà®³à¯ˆà®¯à¯ˆ இயகà¯à®•à®¿à®©à®¾à®²à¯ nmcli இலிரà¯à®¨à¯à®¤à¯ வெளியேறà¯à®µà¯€à®°à¯à®•à®³à¯. திரà¯à®¤à¯à®¤à®¤à¯à®¤à®¿à®²à¯ "
-"உளà¯à®³ ஒர௠இணைபà¯à®ªà¯ சேமிகà¯à®•à®ªà¯à®ªà®Ÿà®¾à®¤à®¿à®°à¯à®¨à¯à®¤à®¾à®²à¯, செயலை உறà¯à®¤à®¿à®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®®à®¾à®±à¯ பயனரிடம௠"
-"கேடà¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯.\n"
+"உளà¯à®³ ஒர௠இணைபà¯à®ªà¯ "
+"சேமிகà¯à®•à®ªà¯à®ªà®Ÿà®¾à®¤à®¿à®°à¯à®¨à¯à®¤à®¾à®²à¯, செயலை உறà¯à®¤à®¿à®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®®à®¾à®±à¯ பயனரிடம௠கேடà¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯.\n"
-#: ../cli/src/connections.c:6021 ../cli/src/connections.c:6151
-#: ../cli/src/connections.c:6521 ../cli/src/connections.c:7370
+#: ../clients/cli/connections.c:6619 ../clients/cli/connections.c:6756
+#: ../clients/cli/connections.c:7167 ../clients/cli/connections.c:8083
#, 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
+#: ../clients/cli/connections.c:6685
#, c-format
msgid ""
"---[ Property menu ]---\n"
@@ -2402,7 +2850,7 @@ msgstr ""
"அசà¯à®šà®¿à®Ÿà¯\n"
"quit :: nmcli இலிரà¯à®¨à¯à®¤à¯ வெளியேறà¯\n"
-#: ../cli/src/connections.c:6112
+#: ../clients/cli/connections.c:6710
#, c-format
msgid ""
"set [<value>] :: set new value\n"
@@ -2413,22 +2861,24 @@ msgstr ""
"\n"
"இநà¯à®¤à®•à¯ கடà¯à®Ÿà®³à¯ˆ இநà¯à®¤ மதிபà¯à®ªà¯à®•à¯à®•à¯ வழஙà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ <value> ஠அமைகà¯à®•à¯à®®à¯\n"
-#: ../cli/src/connections.c:6116
+#: ../clients/cli/connections.c:6714
#, c-format
msgid ""
-"add [<value>] :: add new option to the property\n"
+"add [<value>] :: append new value 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"
+"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 [<value>] :: பணà¯à®ªà¯à®•à¯à®•à¯ பà¯à®¤à®¿à®¯ விரà¯à®ªà¯à®ªà®¤à¯à®¤à¯ˆà®šà¯ சேரà¯\n"
+"add [<value>] :: பணà¯à®ªà¯à®•à¯à®•à¯ பà¯à®¤à®¿à®¯ மதிபà¯à®ªà¯ˆà®šà¯ சேரà¯\n"
"\n"
-"பணà¯à®ªà®¾à®©à®¤à¯ à®’à®°à¯à®•à®©à¯à®Ÿà¯†à®¯à¯à®©à®°à¯ வகையின௠பணà¯à®ªà®¾à®• இரà¯à®¨à¯à®¤à®¾à®²à¯, இநà¯à®¤à®•à¯ கடà¯à®Ÿà®³à¯ˆ இநà¯à®¤à®ªà¯ "
-"பணà¯à®ªà¯à®•à¯à®•à¯ வழஙà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ <value> à®à®šà¯ சேரà¯à®•à¯à®•à¯à®®à¯. à®’à®±à¯à®±à¯ˆ மதிபà¯à®ªà¯à®³à¯à®³ பணà¯à®ªà¯à®•à®³à¯à®•à¯à®•à¯, "
-"இத௠மதிபà¯à®ªà¯ˆ மாறà¯à®±à¯à®®à¯ ('set' à®à®ªà¯ போலவே).\n"
+"பணà¯à®ªà®¾à®©à®¤à¯ ஒர௠கனà¯à®Ÿà¯†à®¯à¯à®©à®°à¯ வகையின௠பணà¯à®ªà®¾à®• இரà¯à®¨à¯à®¤à®¾à®²à¯, இநà¯à®¤à®•à¯ கடà¯à®Ÿà®³à¯ˆ வழஙà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ <"
+"value> à® "
+"பணà¯à®ªà¯à®•à¯à®•à¯ சேரà¯à®•à¯à®•à¯à®®à¯. à®’à®±à¯à®±à¯ˆ மதிபà¯à®ªà¯à®³à¯à®³ பணà¯à®ªà¯à®•à®³à¯à®•à¯à®•à¯, இத௠மதிபà¯à®ªà¯ˆ மாறà¯à®±à¯à®®à¯ "
+"('set' à®à®ªà¯ "
+"போலவே).\n"
-#: ../cli/src/connections.c:6122
+#: ../clients/cli/connections.c:6720
#, c-format
msgid ""
"change :: change current value\n"
@@ -2439,18 +2889,45 @@ msgstr ""
"\n"
"நடபà¯à®ªà¯ மதிபà¯à®ªà¯ˆà®•à¯ காடà¯à®Ÿà¯à®®à¯, அபà¯à®ªà¯‹à®¤à¯ மதிபà¯à®ªà¯ˆà®¤à¯ திரà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à¯à®®à¯.\n"
-#: ../cli/src/connections.c:6126
+#: ../clients/cli/connections.c:6724
#, c-format
msgid ""
-"remove [<index>|<option>] :: delete the value\n"
+"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"
-"Removes the property value (sets it to default).\n"
msgstr ""
-"remove [<index>|<option>] :: மதிபà¯à®ªà¯ˆ அழி\n"
+"remove [<value>|<index>|<option name>] :: மதிபà¯à®ªà¯ˆ நீகà¯à®•à¯à®®à¯\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"
-"பணà¯à®ªà®¿à®©à¯ மதிபà¯à®ªà¯ˆ நீகà¯à®•à¯à®®à¯ (அதன௠மà¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯ மதிபà¯à®ªà¯à®•à¯à®•à¯ அமைகà¯à®•à¯à®®à¯).\n"
-#: ../cli/src/connections.c:6130
+#: ../clients/cli/connections.c:6735
#, c-format
msgid ""
"describe :: describe property\n"
@@ -2461,9 +2938,10 @@ msgstr ""
"describe :: பணà¯à®ªà¯ˆ விவரி\n"
"\n"
"இத௠பணà¯à®ªà®¿à®©à¯ விளகà¯à®•à®¤à¯à®¤à¯ˆà®•à¯ காடà¯à®Ÿà¯à®®à¯. அனைதà¯à®¤à¯ NM அமைவà¯à®•à®³à¯ˆà®¯à¯à®®à¯ பணà¯à®ªà¯à®•à®³à¯ˆà®¯à¯à®®à¯ காண "
-"nm-settings(5) கையேடà¯à®Ÿà¯à®ªà¯ பகà¯à®•à®¤à¯à®¤à¯ˆà®ªà¯ பாரà¯à®•à¯à®•à®²à®¾à®®à¯.\n"
+"nm-"
+"settings(5) கையேடà¯à®Ÿà¯à®ªà¯ பகà¯à®•à®¤à¯à®¤à¯ˆà®ªà¯ பாரà¯à®•à¯à®•à®²à®¾à®®à¯.\n"
-#: ../cli/src/connections.c:6135
+#: ../clients/cli/connections.c:6740
#, c-format
msgid ""
"print [property|setting|connection] :: print property (setting, connection) "
@@ -2476,9 +2954,10 @@ msgstr ""
"மதிபà¯à®ªà¯à®•à®³à¯\n"
"\n"
"பணà¯à®ªà®¿à®©à¯ மதிபà¯à®ªà¯ˆà®•à¯ காடà¯à®Ÿà¯à®®à¯. ஒர௠மதிபà¯à®ªà¯à®°à¯à®µà¯ˆ வழஙà¯à®•à¯à®µà®¤à®©à¯ மூலம௠நீஙà¯à®•à®³à¯ ஒர௠"
-"அமைவ௠அலà¯à®²à®¤à¯ இணைபà¯à®ªà®¿à®©à¯ à®®à¯à®´à¯ மதிபà¯à®ªà¯à®•à®³à¯ˆà®¯à¯à®®à¯ காணà¯à®ªà®¿à®•à¯à®•à®µà¯à®®à¯ à®®à¯à®Ÿà®¿à®¯à¯à®®à¯.\n"
+"அமைவ௠அலà¯à®²à®¤à¯ "
+"இணைபà¯à®ªà®¿à®©à¯ à®®à¯à®´à¯ மதிபà¯à®ªà¯à®•à®³à¯ˆà®¯à¯à®®à¯ காணà¯à®ªà®¿à®•à¯à®•à®µà¯à®®à¯ à®®à¯à®Ÿà®¿à®¯à¯à®®à¯.\n"
-#: ../cli/src/connections.c:6143
+#: ../clients/cli/connections.c:6748
#, c-format
msgid ""
"help/? [<command>] :: help for nmcli commands\n"
@@ -2487,336 +2966,340 @@ msgstr ""
"help/? [<command>] :: nmcli கடà¯à®Ÿà®³à¯ˆà®•à®³à¯à®•à¯à®•à®¾à®© உதவி\n"
"\n"
-#: ../cli/src/connections.c:6230
+#: ../clients/cli/connections.c:6846
#, c-format
-#| msgid "Error: Connection activation failed."
msgid "Error: Connection activation failed.\n"
msgstr "பிழை: இணைபà¯à®ªà¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®µà®¤à®¿à®²à¯ தோலà¯à®µà®¿.\n"
-#: ../cli/src/connections.c:6301
+#: ../clients/cli/connections.c:6929
#, 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
+#: ../clients/cli/connections.c:6947
+#, c-format
+msgid "[ Type: %s | Name: %s | UUID: %s | Dirty: %s | Temp: %s ]\n"
+msgstr "[ Type: %s | Name: %s | UUID: %s | Dirty: %s | Temp: %s ]\n"
+
+#: ../clients/cli/connections.c:6983
#, c-format
-msgid "[ Connection type: %s | name: %s | UUID: %s | dirty: %s ]\n"
-msgstr "[ Connection type: %s | name: %s | UUID: %s | dirty: %s ]\n"
+msgid "The connection is not saved. Do you really want to quit? %s"
+msgstr "இணைபà¯à®ªà¯ சேமிகà¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ. நிசà¯à®šà®¯à®®à¯ வெளியேற வேணà¯à®Ÿà¯à®®à®¾? %s"
-#: ../cli/src/connections.c:6379
+#: ../clients/cli/connections.c:7028
#, 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"
+"பிரதான "
+"மெனà¯à®µà®¿à®²à¯ 'save' என தடà¯à®Ÿà®šà¯à®šà¯ செயà¯à®¯à®²à®¾à®®à¯.\n"
-#: ../cli/src/connections.c:6400 ../cli/src/connections.c:6823
-#: ../cli/src/connections.c:6881
+#: ../clients/cli/connections.c:7050 ../clients/cli/connections.c:7471
+#: ../clients/cli/connections.c:7526
#, 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
+#: ../clients/cli/connections.c:7065 ../clients/cli/connections.c:7087
+#: ../clients/cli/connections.c:7475 ../clients/cli/connections.c:7531
#, 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
+#: ../clients/cli/connections.c:7081
#, c-format
msgid "Edit '%s' value: "
msgstr "'%s' மதிபà¯à®ªà¯ˆà®¤à¯ திரà¯à®¤à¯à®¤à¯: "
-#: ../cli/src/connections.c:6458
+#: ../clients/cli/connections.c:7110
#, 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
+#: ../clients/cli/connections.c:7116 ../clients/cli/connections.c:7610
+#: ../clients/cli/connections.c:7651
#, c-format
msgid "Error: failed to remove value of '%s': %s\n"
msgstr "பிழை: '%s' இன௠மதிபà¯à®ªà¯ˆ நீகà¯à®•à¯à®µà®¤à®¿à®²à¯ தோலà¯à®µà®¿: %s\n"
-#: ../cli/src/connections.c:6485
+#: ../clients/cli/connections.c:7137
#, 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
+#: ../clients/cli/connections.c:7263
#, c-format
msgid "Available settings: %s\n"
msgstr "கிடைகà¯à®•à¯à®®à¯ அமைவà¯à®•à®³à¯: %s\n"
-#: ../cli/src/connections.c:6626
+#: ../clients/cli/connections.c:7272
#, c-format
-#| msgid "Error: invalid extra argument '%s'."
msgid "Error: invalid setting name; %s\n"
msgstr "பிழை: செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ அமைவ௠பெயரà¯; %s\n"
-#: ../cli/src/connections.c:6643
+#: ../clients/cli/connections.c:7289
#, c-format
msgid "Available properties: %s\n"
msgstr "கிடைகà¯à®•à¯à®®à¯ பணà¯à®ªà¯à®•à®³à¯: %s\n"
-#: ../cli/src/connections.c:6651
+#: ../clients/cli/connections.c:7297
#, c-format
-#| msgid "Error: %s"
msgid "Error: property %s\n"
msgstr "பிழை: பணà¯à®ªà¯ %s\n"
-#: ../cli/src/connections.c:6692
+#: ../clients/cli/connections.c:7338
+#, 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] "
+"Do you still want to save? %s"
msgstr ""
-"'autoconnect=yes' கொணà¯à®Ÿ இணைபà¯à®ªà¯ˆà®šà¯ சேமிகà¯à®•à®¿à®±à®¤à¯. இதனால௠இணைபà¯à®ªà¯ உடனடியாக "
+"'autoconnect=yes' எனà¯à®±à¯à®³à¯à®³ இணைபà¯à®ªà¯ˆà®šà¯ சேமிகà¯à®•à®¿à®±à®¤à¯. இதனால௠இணைபà¯à®ªà¯ உடனடியாக "
"செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà®•à¯à®•à¯‚டà¯à®®à¯.\n"
-"இரà¯à®ªà¯à®ªà®¿à®©à¯à®®à¯ சேமிகà¯à®• வேணà¯à®Ÿà¯à®®à®¾? [yes] "
+"இரà¯à®ªà¯à®ªà®¿à®©à¯à®®à¯ சேமிகà¯à®• வேணà¯à®Ÿà¯à®®à®¾? %s"
-#: ../cli/src/connections.c:6765
+#: ../clients/cli/connections.c:7413
#, c-format
msgid "You may edit the following settings: %s\n"
msgstr "நீஙà¯à®•à®³à¯ பினà¯à®µà®°à¯à®®à¯ அமைவà¯à®•à®³à¯ˆà®¤à¯ திரà¯à®¤à¯à®¤à®²à®¾à®®à¯: %s\n"
-#: ../cli/src/connections.c:6791
+#: ../clients/cli/connections.c:7440
#, c-format
msgid ""
"The connection profile has been removed from another client. You may type "
"'save' to restore it.\n"
msgstr ""
"இணைபà¯à®ªà¯ தனியமைபà¯à®ªà¯ மறà¯à®±à¯Šà®°à¯ கிளையனà¯à®Ÿà¯à®Ÿà®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ அகறà¯à®±à®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯. அதை மீடà¯à®• "
-"'save' என தடà¯à®Ÿà®šà¯à®šà¯ செயà¯à®¯à®²à®¾à®®à¯.\n"
+"'save' என "
+"தடà¯à®Ÿà®šà¯à®šà¯ செயà¯à®¯à®²à®¾à®®à¯.\n"
-#: ../cli/src/connections.c:6821 ../cli/src/connections.c:6879
+#: ../clients/cli/connections.c:7469 ../clients/cli/connections.c:7524
#, c-format
msgid "Allowed values for '%s' property: %s\n"
msgstr "'%s' பணà¯à®ªà¯à®•à¯à®•à¯ அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯ மதிபà¯à®ªà¯à®•à®³à¯: %s\n"
-#: ../cli/src/connections.c:6833 ../cli/src/connections.c:7050
+#: ../clients/cli/connections.c:7479 ../clients/cli/connections.c:7693
#, 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
+#: ../clients/cli/connections.c:7480
#, 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
+#: ../clients/cli/connections.c:7494 ../clients/cli/connections.c:7630
+#: ../clients/cli/connections.c:7710
#, 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
+#: ../clients/cli/connections.c:7504
#, 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
+#: ../clients/cli/connections.c:7511
#, c-format
-#| msgid "Error: invalid 'wimax' parameter: '%s'."
msgid "Error: invalid property: %s\n"
msgstr "பிழை: செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ பணà¯à®ªà¯: %s\n"
-#: ../cli/src/connections.c:6915
+#: ../clients/cli/connections.c:7558
#, c-format
-#| msgid "Error: unknown connection: %s\n"
msgid "Error: unknown setting '%s'\n"
msgstr "பிழை: தெரியாத அமைவ௠'%s'\n"
-#: ../cli/src/connections.c:6928
+#: ../clients/cli/connections.c:7571
#, c-format
msgid "You may edit the following properties: %s\n"
msgstr "நீஙà¯à®•à®³à¯ பினà¯à®µà®°à¯à®®à¯ அமைவà¯à®•à®³à¯ˆà®¤à¯ திரà¯à®¤à¯à®¤à®²à®¾à®®à¯: %s\n"
-#: ../cli/src/connections.c:6972
+#: ../clients/cli/connections.c:7615
#, c-format
-#| msgid "Error: unknown argument '%s'."
msgid "Error: no argument given; valid are [%s]\n"
msgstr "பிழை: மதிபà¯à®ªà¯à®°à¯ கொடà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ; செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®µà¯ˆ [%s]\n"
-#: ../cli/src/connections.c:6985
+#: ../clients/cli/connections.c:7628
#, 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
+#: ../clients/cli/connections.c:7669
#, c-format
msgid "Error: %s properties, nor it is a setting name.\n"
msgstr "பிழை: %s பணà¯à®ªà¯à®•à®³à¯, அத௠ஒர௠அமைவ௠பெயரà¯à®®à¯ அலà¯à®².\n"
-#: ../cli/src/connections.c:7051
+#: ../clients/cli/connections.c:7694
#, c-format
msgid "use 'goto <setting>' first, or 'describe <setting>.<property>'\n"
msgstr ""
"à®®à¯à®¤à®²à®¿à®²à¯ 'goto <setting>'அலà¯à®²à®¤à¯ 'describe <setting>.<property>' à®à®ªà¯ "
"பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯\n"
-#: ../cli/src/connections.c:7092
+#: ../clients/cli/connections.c:7735
#, 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
+#: ../clients/cli/connections.c:7764
#, c-format
-#| msgid "Error: unknown connection: %s\n"
msgid "Error: unknown setting: '%s'\n"
msgstr "பிழை: தெரியாத அமைவà¯: '%s'\n"
-#: ../cli/src/connections.c:7135
+#: ../clients/cli/connections.c:7769
+#, c-format
+msgid "Error: '%s' setting not present in the connection\n"
+msgstr "பிழை: இணைபà¯à®ªà®¿à®²à¯ அமைவ௠'%s' இலà¯à®²à¯ˆ\n"
+
+#: ../clients/cli/connections.c:7794
+#, c-format
+msgid "Error: invalid property: %s%s\n"
+msgstr "பிழை: செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ பணà¯à®ªà¯: %s%s\n"
+
+#: ../clients/cli/connections.c:7796
+msgid ", neither a valid setting name"
+msgstr ", செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© அமைவ௠பெயரà¯à®®à¯ அலà¯à®²"
+
+#: ../clients/cli/connections.c:7813
+#, c-format
+#| msgid "invalid option '%s'"
+msgid "Invalid verify option: %s\n"
+msgstr "தவறான verify விரà¯à®ªà¯à®ªà®®à¯: %s\n"
+
+#: ../clients/cli/connections.c:7821
#, c-format
msgid "Verify setting '%s': %s\n"
msgstr "அமைவ௠'%s' à®à®šà¯ சரிபாரà¯: %s\n"
-#: ../cli/src/connections.c:7142
+#: ../clients/cli/connections.c:7836
#, c-format
-#| msgid "User connections:\n"
msgid "Verify connection: %s\n"
msgstr "இணைபà¯à®ªà¯ˆ சரிபாரà¯: %s\n"
-#: ../cli/src/connections.c:7181
+#: ../clients/cli/connections.c:7839
#, 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"
+msgid "The error cannot be fixed automatically.\n"
+msgstr "இநà¯à®¤à®ªà¯ பிழையை தானாக சரிசெயà¯à®¯ à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯.\n"
-#: ../cli/src/connections.c:7188
+#: ../clients/cli/connections.c:7856
+#, c-format
+msgid "Error: invalid argument '%s'\n"
+msgstr "பிழை: செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ மதிபà¯à®ªà¯à®°à¯ '%s'\n"
+
+#: ../clients/cli/connections.c:7889
+#, c-format
+#| msgid "Error: Failed to save '%s' (%s) connection: (%d) %s\n"
+msgid "Error: Failed to save '%s' (%s) connection: %s\n"
+msgstr "பிழை: '%s' (%s) இணைபà¯à®ªà¯ˆà®šà¯ சேமிகà¯à®• à®®à¯à®Ÿà®¿à®¯à®¾à®®à®²à¯ போனதà¯: %s\n"
+
+#: ../clients/cli/connections.c:7896
#, c-format
msgid "Connection '%s' (%s) successfully saved.\n"
msgstr "இணைபà¯à®ªà¯ '%s' (%s) வெறà¯à®±à®¿à®•à®°à®®à®¾à®•à®šà¯ சேமிகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯\n"
-#: ../cli/src/connections.c:7222
+#: ../clients/cli/connections.c:7897
+#, c-format
+msgid "Connection '%s' (%s) successfully updated.\n"
+msgstr "இணைபà¯à®ªà¯ '%s' (%s) வெறà¯à®±à®¿à®•à®°à®®à®¾à®• பà¯à®¤à¯à®ªà¯à®ªà®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯.\n"
+
+#: ../clients/cli/connections.c:7930
#, 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"
+#: ../clients/cli/connections.c:7931
msgid "(unknown error)"
msgstr "(தெரியாத பிழை)"
-#: ../cli/src/connections.c:7244
+#: ../clients/cli/connections.c:7932
+#, c-format
+msgid "You may try running 'verify fix' to fix errors.\n"
+msgstr "'verify fix' கடà¯à®Ÿà®³à¯ˆà®¯à¯ˆ இயகà¯à®•à®¿ பிழைகளைச௠சரிசெயà¯à®¯ à®®à¯à®¯à®±à¯à®šà®¿à®•à¯à®•à®²à®¾à®®à¯.\n"
+
+#: ../clients/cli/connections.c:7954
#, c-format
msgid "Error: connection is not saved. Type 'save' first.\n"
msgstr ""
"பிழை: இணைபà¯à®ªà¯ சேமிகà¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ. à®®à¯à®¤à®²à®¿à®²à¯ 'save' ஠தடà¯à®Ÿà®šà¯à®šà¯ செயà¯à®¯à®µà¯à®®à¯.\n"
-#: ../cli/src/connections.c:7248
+#: ../clients/cli/connections.c:7958
#, c-format
-#| msgid "Error: Connection deletion failed: %s"
msgid "Error: connection is not valid: %s\n"
msgstr "பிழை: இணைபà¯à®ªà¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®²à¯à®²: %s\n"
-#: ../cli/src/connections.c:7259
+#: ../clients/cli/connections.c:7968
#, c-format
-#| msgid "Error: Unknown connection: %s."
msgid "Error: Cannot activate connection: %s.\n"
msgstr "பிழை: இணைபà¯à®ªà¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s.\n"
-#: ../cli/src/connections.c:7269
+#: ../clients/cli/connections.c:7978
#, 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"
+#| msgid "Error: Failed to activate '%s' (%s) connection: (%d) %s\n"
+msgid "Error: Failed to activate '%s' (%s) connection: %s\n"
+msgstr "பிழை: '%s' (%s) இணைபà¯à®ªà¯ˆà®šà¯ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à®¾à®®à®²à¯ போனதà¯: %s\n"
-#: ../cli/src/connections.c:7275
+#: ../clients/cli/connections.c:7984
#, c-format
msgid "Monitoring connection activation (press any key to continue)\n"
msgstr ""
-"இணைபà¯à®ªà¯ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®²à¯ˆà®•à¯ கணà¯à®•à®¾à®£à®¿à®•à¯à®•à®¿à®±à®¤à¯ (தொடர à®à®¤à¯‡à®©à¯à®®à¯ ஒர௠விசையை "
-"à®…à®´à¯à®¤à¯à®¤à®µà¯à®®à¯)\n"
+"இணைபà¯à®ªà¯ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®²à¯ˆà®•à¯ கணà¯à®•à®¾à®£à®¿à®•à¯à®•à®¿à®±à®¤à¯ (தொடர à®à®¤à¯‡à®©à¯à®®à¯ ஒர௠விசையை à®…à®´à¯à®¤à¯à®¤à®µà¯à®®à¯)\n"
-#: ../cli/src/connections.c:7313
+#: ../clients/cli/connections.c:8022
#, c-format
-#| msgid "Error: 'nm status': %s"
msgid "Error: status-line: %s\n"
msgstr "பிழை: நிலை-வரி: %s\n"
-#: ../cli/src/connections.c:7321
+#: ../clients/cli/connections.c:8030
#, c-format
-#| msgid "Error: unknown connection: %s\n"
msgid "Error: save-confirmation: %s\n"
msgstr "பிழை: சேமிதà¯à®¤à®²à¯-உறà¯à®¤à®¿à®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à®²à¯: %s\n"
-#: ../cli/src/connections.c:7329
+#: ../clients/cli/connections.c:8038
+#, c-format
+#| msgid "Error: property %s\n"
+msgid "Error: show-secrets: %s\n"
+msgstr "பிழை: show-secrets: %s\n"
+
+#: ../clients/cli/connections.c:8046
#, c-format
msgid "Error: bad color number: '%s'; use <0-8>\n"
msgstr "பிழை: நிற எண௠தவறà¯: '%s'; <0-8> à®à®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯\n"
-#: ../cli/src/connections.c:7341
+#: ../clients/cli/connections.c:8058
#, c-format
msgid "Current nmcli configuration:\n"
msgstr "நடபà¯à®ªà¯ nmcli அமைவாகà¯à®•à®®à¯:\n"
-#: ../cli/src/connections.c:7349
+#: ../clients/cli/connections.c:8068
#, c-format
msgid "Invalid configuration option '%s'; allowed [%s]\n"
msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ அமைவாகà¯à®• விரà¯à®ªà¯à®ªà®®à¯ '%s'; அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®µà®¤à¯ [%s]\n"
-#: ../cli/src/connections.c:7572
+#: ../clients/cli/connections.c:8315
#, 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
+#: ../clients/cli/connections.c:8327 ../clients/cli/connections.c:8514
+#: ../clients/cli/connections.c:8521
#, c-format
-#| msgid "Error: Unknown connection: %s."
msgid "Error: Unknown connection '%s'."
msgstr "பிழை: தெரியாத இணைபà¯à®ªà¯: '%s'."
-#: ../cli/src/connections.c:7625
+#: ../clients/cli/connections.c:8345
#, c-format
msgid "Warning: editing existing connection '%s'; 'type' argument is ignored\n"
msgstr ""
"எசà¯à®šà®°à®¿à®•à¯à®•à¯ˆ: à®®à¯à®©à¯à®ªà¯‡ உளà¯à®³ இணைபà¯à®ªà¯ '%s' à®à®¤à¯ திரà¯à®¤à¯à®¤à¯à®•à®¿à®±à®¤à¯; 'type' மதிபà¯à®ªà¯à®°à¯ "
"பà¯à®±à®•à¯à®•à®£à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯\n"
-#: ../cli/src/connections.c:7628
+#: ../clients/cli/connections.c:8348
#, c-format
msgid ""
"Warning: editing existing connection '%s'; 'con-name' argument is ignored\n"
@@ -2824,449 +3307,447 @@ msgstr ""
"எசà¯à®šà®°à®¿à®•à¯à®•à¯ˆ: à®®à¯à®©à¯à®ªà¯‡ உளà¯à®³ இணைபà¯à®ªà¯ '%s' à®à®¤à¯ திரà¯à®¤à¯à®¤à¯à®•à®¿à®±à®¤à¯; 'con-name' மதிபà¯à®ªà¯à®°à¯ "
"பà¯à®±à®•à¯à®•à®£à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯\n"
-#: ../cli/src/connections.c:7642
+#: ../clients/cli/connections.c:8362
#, c-format
-#| msgid "Active connection state: %s\n"
msgid "Valid connection types: %s\n"
msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© இணைபà¯à®ªà¯ வகைகளà¯: %s\n"
-#: ../cli/src/connections.c:7644
+#: ../clients/cli/connections.c:8364
#, c-format
-#| msgid "Error: unknown connection: %s\n"
msgid "Error: invalid connection type; %s\n"
msgstr "பிழை: செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ இணைபà¯à®ªà¯ வகை; %s\n"
-#: ../cli/src/connections.c:7680
+#: ../clients/cli/connections.c:8403
#, c-format
-#| msgid "no active connection or device"
msgid "===| nmcli interactive connection editor |==="
msgstr "===| nmcli தொடரà¯à®ªà¯à®¤à¯à®¤à®¿à®±à®©à¯ கொணà¯à®Ÿ இணைபà¯à®ªà¯à®¤à¯ திரà¯à®¤à¯à®¤à®¿ |==="
-#: ../cli/src/connections.c:7683
+#: ../clients/cli/connections.c:8406
#, c-format
-#| msgid "no device found for connection '%s'"
msgid "Editing existing '%s' connection: '%s'"
msgstr "à®®à¯à®©à¯à®ªà¯‡ உளà¯à®³ '%s' இணைபà¯à®ªà¯ˆà®¤à¯ திரà¯à®¤à¯à®¤à¯à®•à®¿à®±à®¤à¯: '%s'"
-#: ../cli/src/connections.c:7685
+#: ../clients/cli/connections.c:8408
#, c-format
-#| msgid "Modify personal network connections"
msgid "Adding a new '%s' connection"
msgstr "பà¯à®¤à®¿à®¯ '%s' இணைபà¯à®ªà¯ˆà®šà¯ சேரà¯à®•à¯à®•à®¿à®±à®¤à¯"
-#: ../cli/src/connections.c:7687
+#: ../clients/cli/connections.c:8410
#, c-format
msgid "Type 'help' or '?' for available commands."
msgstr "கிடைகà¯à®•à¯à®®à¯ கடà¯à®Ÿà®³à¯ˆà®•à®³à¯ˆà®•à¯ காண 'help' அலà¯à®²à®¤à¯ '?' எனத௠தடà¯à®Ÿà®šà¯à®šà¯ செயà¯à®¯à®µà¯à®®à¯."
-#: ../cli/src/connections.c:7689
+#: ../clients/cli/connections.c:8412
#, c-format
msgid "Type 'describe [<setting>.<prop>]' for detailed property description."
msgstr ""
"பணà¯à®ªà®¿à®©à¯ விரிவான விளகà¯à®•à®¤à¯à®¤à¯ˆà®•à¯ காண 'describe [<setting>.<prop>]' எனத௠தடà¯à®Ÿà®šà¯à®šà¯ "
"செயà¯à®¯à®µà¯à®®à¯."
-#: ../cli/src/connections.c:7728
+#: ../clients/cli/connections.c:8450
#, 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"
+msgid "Error: Failed to modify connection '%s': %s"
+msgstr "பிழை: இணைபà¯à®ªà¯ '%s' இல௠மாறà¯à®±à®®à¯ செயà¯à®µà®¤à®¿à®²à¯ தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯: %s"
-#: ../cli/src/connections.c:7734
+#: ../clients/cli/connections.c:8457
#, c-format
msgid "Connection '%s' (%s) successfully modified.\n"
msgstr "இணைபà¯à®ªà¯ '%s' இல௠(%s) வெறà¯à®±à®¿à®•à®°à®®à®¾à®• மாறà¯à®±à®®à¯ செயà¯à®¯à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯.\n"
-#: ../cli/src/connections.c:7761
+#: ../clients/cli/connections.c:8489
#, c-format
-#| msgid "Error: %s argument is missing."
msgid "Error: No arguments provided."
msgstr "பிழை: மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ வழஙà¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
-#: ../cli/src/connections.c:7785
+#: ../clients/cli/connections.c:8508
#, c-format
-#| msgid "Error: No connection specified."
msgid "Error: connection ID is missing."
msgstr "பிழை: இணைபà¯à®ªà¯ ID விடà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯."
-#: ../cli/src/connections.c:7790
+#: ../clients/cli/connections.c:8530 ../clients/cli/connections.c:8543
#, c-format
-#| msgid "Error: %s argument is missing."
msgid "Error: <setting>.<property> argument is missing."
msgstr "பிழை: <setting>.<property> மதிபà¯à®ªà¯à®°à¯ விடà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯."
-#: ../cli/src/connections.c:7813
+#: ../clients/cli/connections.c:8548
+#, c-format
+msgid "Error: value for '%s' is missing."
+msgstr "பிழை: '%s' கà¯à®•à¯ மதிபà¯à®ªà¯ விடà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯."
+
+#: ../clients/cli/connections.c:8566
#, c-format
-#| msgid "Error: invalid extra argument '%s'."
msgid "Error: invalid <setting>.<property> '%s'."
msgstr "பிழை: செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ <setting>.<property> '%s'."
-#: ../cli/src/connections.c:7828
+#: ../clients/cli/connections.c:8574
#, 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
+#: ../clients/cli/connections.c:8595
#, c-format
-#| msgid "Error: invalid extra argument '%s'."
msgid "Error: invalid property '%s': %s."
msgstr "பிழை: செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ பணà¯à®ªà¯ '%s': %s."
-#: ../cli/src/connections.c:7855
+#: ../clients/cli/connections.c:8606
#, c-format
msgid "Error: failed to modify %s.%s: %s."
msgstr "பிழை: %s.%s இல௠மாறà¯à®±à®®à¯ செயà¯à®µà®¤à®¿à®²à¯ தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯: %s."
-#: ../cli/src/connections.c:7885
+#: ../clients/cli/connections.c:8624
+#, c-format
+msgid "Error: failed to remove a value from %s.%s: %s."
+msgstr "பிழை: %s.%s இல௠இரà¯à®¨à¯à®¤à¯ மதிபà¯à®ªà¯ˆ நீகà¯à®•à¯à®µà®¤à®¿à®²à¯ தோலà¯à®µà®¿: %s."
+
+#: ../clients/cli/connections.c:8661
#, c-format
msgid "Error: Connection deletion failed: %s"
msgstr "பிழை: இணைபà¯à®ªà¯ˆ நீகà¯à®•à¯à®µà®¤à®¿à®²à¯ தோலà¯à®µà®¿: %s"
-#: ../cli/src/connections.c:7956
+#: ../clients/cli/connections.c:8725
#, c-format
msgid "Error: unknown connection: %s\n"
msgstr "பிழை: தெரியாத இணைபà¯à®ªà¯: %s\n"
#. truncate trailing ", "
-#: ../cli/src/connections.c:7992
+#: ../clients/cli/connections.c:8762
#, c-format
msgid "Error: cannot delete unknown connection(s): %s."
msgstr "பிழை: தெரியாத இணைபà¯à®ªà¯à®•à®³à¯ˆ நீகà¯à®• à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯: %s."
-#: ../cli/src/connections.c:8063
+#: ../clients/cli/connections.c:8785
+#, c-format
+#| msgid "Error: Failed to add '%s' connection: %s"
+msgid "Error: failed to reload connections: %s."
+msgstr "பிழை: இணைபà¯à®ªà¯à®•à®³à¯ˆ மீணà¯à®Ÿà¯à®®à¯ à®à®±à¯à®± à®®à¯à®Ÿà®¿à®¯à®¾à®®à®²à¯ போனதà¯: %s."
+
+#: ../clients/cli/connections.c:8824
+#, c-format
+#| msgid "Error: Failed to add '%s' connection: %s"
+msgid "Error: failed to load connection: %s."
+msgstr "பிழை: இணைபà¯à®ªà¯ˆ மீணà¯à®Ÿà¯à®®à¯ à®à®±à¯à®± à®®à¯à®Ÿà®¿à®¯à®¾à®®à®²à¯ போனதà¯: %s."
+
+#: ../clients/cli/connections.c:8832
#, 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
+#: ../clients/cli/connections.c:9008
#, 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 "பிழை: இணைபà¯à®ªà¯à®•à®³à¯ˆà®ªà¯ பெற à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: அமைவà¯à®•à®³à®¿à®©à¯ சேவை இயஙà¯à®•à®µà®¿à®²à¯à®²à¯ˆ."
+#. define some prompts
+#: ../clients/cli/devices.c:38
+msgid "Interface: "
+msgstr "இடைமà¯à®•à®®à¯: "
#. 3
-#. 16
-#: ../cli/src/devices.c:75 ../cli/src/devices.c:103
+#. 17
+#: ../clients/cli/devices.c:46 ../clients/cli/devices.c:75
msgid "CONNECTION"
msgstr "CONNECTION"
#. 4
-#. 17
-#: ../cli/src/devices.c:76 ../cli/src/devices.c:104
-#| msgid "UUID"
+#. 18
+#: ../clients/cli/devices.c:47 ../clients/cli/devices.c:76
msgid "CON-UUID"
msgstr "CON-UUID"
#. 2
-#: ../cli/src/devices.c:89
+#: ../clients/cli/devices.c:60
msgid "VENDOR"
msgstr "VENDOR"
#. 3
-#: ../cli/src/devices.c:90
+#: ../clients/cli/devices.c:61
msgid "PRODUCT"
msgstr "PRODUCT"
#. 4
-#: ../cli/src/devices.c:91
+#: ../clients/cli/devices.c:62
msgid "DRIVER"
msgstr "DRIVER"
#. 5
-#: ../cli/src/devices.c:92
+#: ../clients/cli/devices.c:63
msgid "DRIVER-VERSION"
msgstr "DRIVER-VERSION"
#. 6
-#: ../cli/src/devices.c:93
+#: ../clients/cli/devices.c:64
msgid "FIRMWARE-VERSION"
msgstr "FIRMWARE-VERSION"
#. 7
-#: ../cli/src/devices.c:94
+#: ../clients/cli/devices.c:65
msgid "HWADDR"
msgstr "HWADDR"
#. 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
+#: ../clients/cli/devices.c:66 ../clients/tui/nmt-page-ethernet.c:86
+#: ../clients/tui/nmt-page-infiniband.c:97 ../clients/tui/nmt-page-vlan.c:131
+#: ../clients/tui/nmt-page-wifi.c:373
msgid "MTU"
msgstr "MTU"
#. 10
-#: ../cli/src/devices.c:97
+#: ../clients/cli/devices.c:68
msgid "REASON"
msgstr "REASON"
#. 11
-#: ../cli/src/devices.c:98
+#: ../clients/cli/devices.c:69
msgid "UDI"
msgstr "UDI"
#. 12
-#: ../cli/src/devices.c:99
+#: ../clients/cli/devices.c:70
msgid "IP-IFACE"
msgstr "IP-IFACE"
#. 13
-#: ../cli/src/devices.c:100
+#. 2
+#: ../clients/cli/devices.c:71 ../clients/cli/devices.c:99
+msgid "IS-SOFTWARE"
+msgstr "IS-SOFTWARE"
+
+#. 14
+#: ../clients/cli/devices.c:72
msgid "NM-MANAGED"
msgstr "NM-MANAGED"
-#. 15
-#: ../cli/src/devices.c:102
+#. 16
+#: ../clients/cli/devices.c:74
msgid "FIRMWARE-MISSING"
msgstr "FIRMWARE-MISSING"
#. 0
-#: ../cli/src/devices.c:115
+#: ../clients/cli/devices.c:87
msgid "AVAILABLE-CONNECTION-PATHS"
msgstr "AVAILABLE-CONNECTION-PATHS"
#. 1
-#: ../cli/src/devices.c:116
+#: ../clients/cli/devices.c:88
msgid "AVAILABLE-CONNECTIONS"
msgstr "AVAILABLE-CONNECTIONS"
#. 0
-#: ../cli/src/devices.c:125
+#: ../clients/cli/devices.c:97
msgid "CARRIER-DETECT"
msgstr "CARRIER-DETECT"
#. 1
-#: ../cli/src/devices.c:126
+#: ../clients/cli/devices.c:98
msgid "SPEED"
msgstr "SPEED"
#. 0
-#: ../cli/src/devices.c:135
+#: ../clients/cli/devices.c:108
msgid "CARRIER"
msgstr "CARRIER"
#. 0
-#: ../cli/src/devices.c:144 ../cli/src/devices.c:563
+#: ../clients/cli/devices.c:117 ../clients/cli/devices.c:548
msgid "WEP"
msgstr "WEP"
#. 1
-#: ../cli/src/devices.c:145
+#: ../clients/cli/devices.c:118
msgid "WPA"
msgstr "WPA"
#. 2
-#: ../cli/src/devices.c:146 ../cli/src/devices.c:571
+#: ../clients/cli/devices.c:119 ../clients/cli/devices.c:556
msgid "WPA2"
msgstr "WPA2"
#. 3
-#: ../cli/src/devices.c:147
+#: ../clients/cli/devices.c:120
msgid "TKIP"
msgstr "TKIP"
#. 4
-#: ../cli/src/devices.c:148
+#: ../clients/cli/devices.c:121
msgid "CCMP"
msgstr "CCMP"
#. 5
#. 2
-#: ../cli/src/devices.c:149 ../cli/src/devices.c:239
+#: ../clients/cli/devices.c:122 ../clients/cli/devices.c:222
msgid "AP"
msgstr "AP"
#. 6
-#: ../cli/src/devices.c:150
+#: ../clients/cli/devices.c:123
msgid "ADHOC"
msgstr "ADHOC"
#. 0
-#: ../cli/src/devices.c:159
+#: ../clients/cli/devices.c:132
msgid "CTR-FREQ"
msgstr "CTR-FREQ"
#. 1
-#: ../cli/src/devices.c:160
+#: ../clients/cli/devices.c:133
msgid "RSSI"
msgstr "RSSI"
#. 2
-#: ../cli/src/devices.c:161
+#: ../clients/cli/devices.c:134
msgid "CINR"
msgstr "CINR"
#. 3
-#: ../cli/src/devices.c:162
+#: ../clients/cli/devices.c:135
msgid "TX-POW"
msgstr "TX-POW"
#. 4
-#: ../cli/src/devices.c:163
+#: ../clients/cli/devices.c:136
msgid "BSID"
msgstr "BSID"
#. 0
-#: ../cli/src/devices.c:172 ../tui/nmt-page-wifi.c:221
+#: ../clients/cli/devices.c:145 ../clients/tui/nmt-page-wifi.c:227
msgid "SSID"
msgstr "SSID"
#. 1
-#: ../cli/src/devices.c:173
-#| msgid "SSID"
+#: ../clients/cli/devices.c:146
msgid "SSID-HEX"
msgstr "SSID-HEX"
#. 2
-#: ../cli/src/devices.c:174 ../tui/nmt-page-wifi.c:352
+#: ../clients/cli/devices.c:147 ../clients/tui/nmt-page-wifi.c:361
msgid "BSSID"
msgstr "BSSID"
#. 3
-#: ../cli/src/devices.c:175
+#: ../clients/cli/devices.c:148
msgid "MODE"
msgstr "MODE"
#. 4
-#: ../cli/src/devices.c:176
+#: ../clients/cli/devices.c:149
msgid "CHAN"
msgstr "CHAN"
#. 5
-#: ../cli/src/devices.c:177
+#: ../clients/cli/devices.c:150
msgid "FREQ"
msgstr "FREQ"
#. 6
-#: ../cli/src/devices.c:178
+#: ../clients/cli/devices.c:151
msgid "RATE"
msgstr "RATE"
#. 7
#. 1
-#: ../cli/src/devices.c:179 ../cli/src/devices.c:199
+#: ../clients/cli/devices.c:152 ../clients/cli/devices.c:172
msgid "SIGNAL"
msgstr "SIGNAL"
#. 8
-#: ../cli/src/devices.c:180
+#: ../clients/cli/devices.c:153
msgid "BARS"
msgstr "BARS"
#. 9
-#: ../cli/src/devices.c:181
+#: ../clients/cli/devices.c:154
msgid "SECURITY"
msgstr "SECURITY"
#. 10
-#: ../cli/src/devices.c:182
+#: ../clients/cli/devices.c:155
msgid "WPA-FLAGS"
msgstr "WPA-FLAGS"
#. 11
-#: ../cli/src/devices.c:183
+#: ../clients/cli/devices.c:156
msgid "RSN-FLAGS"
msgstr "RSN-FLAGS"
#. 14
-#: ../cli/src/devices.c:186
+#: ../clients/cli/devices.c:159
msgid "*"
msgstr "*"
#. 0
#. 5
-#: ../cli/src/devices.c:198 ../cli/src/devices.c:242
+#: ../clients/cli/devices.c:171 ../clients/cli/devices.c:225
msgid "NSP"
msgstr "NSP"
#. 0
-#: ../cli/src/devices.c:213
+#: ../clients/cli/devices.c:186
msgid "SLAVES"
msgstr "SLAVES"
#. 0
-#: ../cli/src/devices.c:222
+#: ../clients/cli/devices.c:195
+msgid "PARENT"
+msgstr "பெறà¯à®±à¯‹à®°à¯"
+
+#. 1
+#: ../clients/cli/devices.c:196
msgid "ID"
msgstr "ID"
#. 0
-#: ../cli/src/devices.c:237
+#: ../clients/cli/devices.c:205 ../clients/cli/devices.c:220
msgid "CAPABILITIES"
msgstr "CAPABILITIES"
#. 1
-#: ../cli/src/devices.c:238
+#: ../clients/cli/devices.c:221
msgid "WIFI-PROPERTIES"
msgstr "WIFI-PROPERTIES"
#. 3
-#: ../cli/src/devices.c:240
+#: ../clients/cli/devices.c:223
msgid "WIRED-PROPERTIES"
msgstr "WIRED-PROPERTIES"
#. 4
-#: ../cli/src/devices.c:241
+#: ../clients/cli/devices.c:224
msgid "WIMAX-PROPERTIES"
msgstr "WIMAX-PROPERTIES"
#. 10
-#: ../cli/src/devices.c:247 ../tui/nmt-page-bond.c:73
+#: ../clients/cli/devices.c:230 ../clients/tui/nmt-page-bond.c:354
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"
+#: ../clients/cli/devices.c:231 ../clients/tui/nmt-page-team.c:148
+msgid "TEAM"
+msgstr "அணி"
#. 12
-#: ../cli/src/devices.c:249
+#: ../clients/cli/devices.c:232 ../clients/tui/nmt-page-bridge.c:77
+msgid "BRIDGE"
+msgstr "பிரிடà¯à®œà¯"
+
+#. 14
+#: ../clients/cli/devices.c:234
+msgid "BLUETOOTH"
+msgstr "BLUETOOTH"
+
+#. 15
+#: ../clients/cli/devices.c:235
msgid "CONNECTIONS"
msgstr "CONNECTIONS"
-#: ../cli/src/devices.c:274
+#: ../clients/cli/devices.c:259
#, 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 | show | connect | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | delete | wifi | wimax }\n"
"\n"
-"COMMAND := { status | show | connect | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | delete | wifi }\n"
"\n"
" status\n"
"\n"
@@ -3276,6 +3757,8 @@ msgid ""
"\n"
" disconnect <ifname>\n"
"\n"
+" delete <ifname>\n"
+"\n"
" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
"\n"
" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
@@ -3289,9 +3772,9 @@ msgid ""
msgstr ""
"பயனà¯à®ªà®¾à®Ÿà¯: nmcli device { COMMAND | help }\n"
"\n"
-"கடà¯à®Ÿà®³à¯ˆ := { status | show | connect | disconnect | wifi | wimax }\n"
+"கடà¯à®Ÿà®³à¯ˆ := { status | show | connect | disconnect | delete | wifi | wimax }\n"
"\n"
-"கடà¯à®Ÿà®³à¯ˆ := { status | show | connect | disconnect | wifi }\n"
+"கடà¯à®Ÿà®³à¯ˆ := { status | show | connect | disconnect | delete | wifi }\n"
"\n"
" status\n"
"\n"
@@ -3301,6 +3784,8 @@ msgstr ""
"\n"
" disconnect <ifname>\n"
"\n"
+" delete <ifname>\n"
+"\n"
" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
"\n"
" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
@@ -3312,7 +3797,7 @@ msgstr ""
" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
-#: ../cli/src/devices.c:298
+#: ../clients/cli/devices.c:283
#, c-format
msgid ""
"Usage: nmcli device status { help }\n"
@@ -3340,11 +3825,11 @@ msgstr ""
"'--fields' பொத௠விரà¯à®ªà¯à®ªà®¤à¯à®¤à¯ˆà®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®®à¯ போத௠நெடà¯à®µà®°à®¿à®šà¯ˆà®•à®³à¯ மாறலாமà¯. "
"'status' "
"எனà¯à®ªà®¤à¯\n"
-"à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯ கடà¯à®Ÿà®³à¯ˆà®¯à®¾à®•à¯à®®à¯, அத௠'nmcli device' ஆனத௠'nmcli device "
-"status' ஠அழைகà¯à®•à®¿à®±à®¤à¯ எனப௠பொரà¯à®³à¯à®ªà®Ÿà¯à®®à¯.\n"
+"à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯ கடà¯à®Ÿà®³à¯ˆà®¯à®¾à®•à¯à®®à¯, அத௠'nmcli device' ஆனத௠'nmcli device status' à® "
+"அழைகà¯à®•à®¿à®±à®¤à¯ எனப௠பொரà¯à®³à¯à®ªà®Ÿà¯à®®à¯.\n"
"\n"
-#: ../cli/src/devices.c:314
+#: ../clients/cli/devices.c:298
#, c-format
msgid ""
"Usage: nmcli device show { ARGUMENTS | help }\n"
@@ -3361,10 +3846,11 @@ msgstr ""
"\n"
"சாதனஙà¯à®•à®³à®¿à®©à¯ விவரஙà¯à®•à®³à¯ˆà®•à¯ காணà¯à®ªà®¿.\n"
"கடà¯à®Ÿà®³à¯ˆ அனைதà¯à®¤à¯ சாதனஙà¯à®•à®³à¯à®•à¯à®•à®¾à®© அலà¯à®²à®¤à¯ கொடà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ ஒர௠சாதனதà¯à®¤à®¿à®±à¯à®•à®¾à®© "
-"விவரஙà¯à®•à®³à¯ˆà®ªà¯ படà¯à®Ÿà®¿à®¯à®²à®¿à®Ÿà¯à®•à®¿à®±à®¤à¯.\n"
+"விவரஙà¯à®•à®³à¯ˆà®ªà¯ "
+"படà¯à®Ÿà®¿à®¯à®²à®¿à®Ÿà¯à®•à®¿à®±à®¤à¯.\n"
"\n"
-#: ../cli/src/devices.c:326
+#: ../clients/cli/devices.c:309
#, c-format
msgid ""
"Usage: nmcli device connect { ARGUMENTS | help }\n"
@@ -3387,7 +3873,7 @@ msgstr ""
"தானாக இணைகà¯à®•à¯à®®à¯à®ªà®Ÿà®¿ அமைகà¯à®•à®ªà¯à®ªà®Ÿà®¾à®¤ இணைபà¯à®ªà¯à®•à®³à¯ˆà®¯à¯à®®à¯ கணகà¯à®•à®¿à®²à¯ எடà¯à®¤à¯à®¤à¯à®•à¯à®•à¯Šà®³à¯à®³à¯à®®à¯.\n"
"\n"
-#: ../cli/src/devices.c:339
+#: ../clients/cli/devices.c:321
#, c-format
msgid ""
"Usage: nmcli device disconnect { ARGUMENTS | help }\n"
@@ -3408,7 +3894,31 @@ msgstr ""
"இணைபà¯à®ªà¯à®•à®³à¯ தானாக செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®µà®¤à¯ˆà®¯à¯à®®à¯ தடà¯à®•à¯à®•à¯à®®à¯.\n"
"\n"
-#: ../cli/src/devices.c:352
+#: ../clients/cli/devices.c:333
+#, c-format
+msgid ""
+"Usage: nmcli device delete { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Deletes the software device.\n"
+"The command removes the interface. It only works for software devices\n"
+"(like bonds, bridges, etc.). Hardware devices cannot be deleted by the\n"
+"command.\n"
+"\n"
+msgstr ""
+"பயனà¯à®ªà®¾à®Ÿà¯: nmcli device delete { ARGUMENTS | help }\n"
+"\n"
+"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := <ifname>\n"
+"\n"
+"மெனà¯à®ªà¯Šà®°à¯à®³à¯ சாதனதà¯à®¤à¯ˆ நீகà¯à®•à¯à®®à¯.\n"
+"இநà¯à®¤à®•à¯ கடà¯à®Ÿà®³à¯ˆ இடைமà¯à®•à®¤à¯à®¤à¯ˆ நீகà¯à®•à¯à®®à¯. மெனà¯à®ªà¯Šà®°à¯à®³à¯ சாதனஙà¯à®•à®³à¯à®•à¯à®•à¯ மடà¯à®Ÿà¯à®®à¯ "
+"செயலà¯à®ªà®Ÿà¯à®®à¯\n"
+"(பிணைபà¯à®ªà¯à®•à®³à¯, பிரிடà¯à®œà¯à®•à®³à¯ போனà¯à®±à®µà¯ˆ). வனà¯à®ªà¯Šà®°à¯à®³à¯ சாதனஙà¯à®•à®³à¯ˆ இநà¯à®¤à®•à¯ கடà¯à®Ÿà®³à¯ˆ மூலமà¯\n"
+"நீகà¯à®• à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯.\n"
+"\n"
+
+#: ../clients/cli/devices.c:346
#, c-format
msgid ""
"Usage: nmcli device wifi { ARGUMENTS | help }\n"
@@ -3450,38 +3960,43 @@ msgstr ""
"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := [list [ifname <ifname>] [bssid <BSSID>]]\n"
"\n"
"கிடைகà¯à®•à¯à®®à¯ Wi-Fi அணà¯à®•à®²à¯ பà¯à®³à¯à®³à®¿à®•à®³à¯ˆà®ªà¯ படà¯à®Ÿà®¿à®¯à®²à®¿à®Ÿà¯à®®à¯. 'ifname' மறà¯à®±à¯à®®à¯ 'bssid' "
-"ஆகிய விரà¯à®ªà¯à®ªà®™à¯à®•à®³à¯ˆà®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®¿\n"
+"ஆகிய "
+"விரà¯à®ªà¯à®ªà®™à¯à®•à®³à¯ˆà®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®¿\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"
+"\n"
+" SSID அலà¯à®²à®¤à¯ BSSID ஆல௠கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà¯à®®à¯ ஒர௠Wi-Fi பிணையதà¯à®¤à®¿à®±à¯à®•à¯ இணைகà¯à®•à¯à®®à¯ . "
+"இநà¯à®¤à®•à¯ கடà¯à®Ÿà®³à¯ˆ\n"
"ஒர௠பà¯à®¤à®¿à®¯ இணைபà¯à®ªà¯ˆ உரà¯à®µà®¾à®•à¯à®•à®¿ அதை ஒர௠சாதனதà¯à®¤à®¿à®²à¯ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®®à¯. இத௠GUI "
-"கிளையனà¯à®Ÿà¯à®Ÿà®¿à®²à¯ SSID ஠சொடà¯à®•à¯à®•à¯à®µà®¤à®±à¯à®•à®¾à®© கடà¯à®Ÿà®³à¯ˆ வரி\n"
+"கிளையனà¯à®Ÿà¯à®Ÿà®¿à®²à¯ "
+"SSID ஠சொடà¯à®•à¯à®•à¯à®µà®¤à®±à¯à®•à®¾à®© கடà¯à®Ÿà®³à¯ˆ வரி\n"
"மாறà¯à®±à®¾à®•à¯à®®à¯. இநà¯à®¤à®•à¯ கடà¯à®Ÿà®³à¯ˆ எபà¯à®ªà¯‹à®¤à¯à®®à¯\n"
"ஒர௠பà¯à®¤à®¿à®¯ இணைபà¯à®ªà¯ˆ உரà¯à®µà®¾à®•à¯à®•à¯à®®à¯, ஆகவே பà¯à®¤à®¿à®¯ Wi-Fi\n"
"பிணையஙà¯à®•à®³à¯à®Ÿà®©à¯ இணைகà¯à®• பயனà¯à®ªà®Ÿà¯à®®à¯. பிணையதà¯à®¤à®¿à®±à¯à®•à®¾à®© இணைபà¯à®ªà¯ à®à®±à¯à®•à®©à®µà¯‡ இரà¯à®ªà¯à®ªà®¿à®©à¯, \n"
"பினà¯à®µà®°à¯à®®à¯à®ªà®Ÿà®¿ à®®à¯à®©à¯à®ªà¯‡ உளà¯à®³ தனியமைபà¯à®ªà¯ˆà®•à¯ கொணà¯à®Ÿà¯à®µà®°à¯à®µà®¤à¯ நலà¯à®²à®¤à¯: nmcli con up id <"
-"name>. இபà¯à®ªà¯‹à®¤à¯\n"
+"name>. "
+"இபà¯à®ªà¯‹à®¤à¯\n"
"open, WEP மறà¯à®±à¯à®®à¯ WPA-PSK பிணையஙà¯à®•à®³à¯à®•à¯à®•à¯ மடà¯à®Ÿà¯à®®à¯‡ ஆதரவà¯à®³à¯à®³à®¤à¯ எனà¯à®ªà®¤à¯ˆ நினைவில௠"
-"கொளà¯à®³à®µà¯à®®à¯. IP அமைவாகà¯à®•à®®à¯à®®à¯\n"
+"கொளà¯à®³à®µà¯à®®à¯. "
+"IP அமைவாகà¯à®•à®®à¯à®®à¯\n"
"DHCP வழியாக பெறபà¯à®ªà®Ÿà¯à®µà®¤à®¾à®•à®µà¯‡ கரà¯à®¤à®ªà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯.\n"
"\n"
"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ := rescan [[ifname] <ifname>]\n"
"\n"
"கிடைகà¯à®•à¯à®®à¯ அணà¯à®•à®²à¯ பà¯à®³à¯à®³à®¿à®•à®³à¯ உளà¯à®³à®¤à®¾ என மீணà¯à®Ÿà¯à®®à¯ தேடி ஸà¯à®•à¯‡à®©à¯ செயà¯à®¯ "
-"NetworkManager à®à®•à¯ கோரà¯à®®à¯.\n"
+"NetworkManager à®à®•à¯ "
+"கோரà¯à®®à¯.\n"
"NetworkManager அவà¯à®µà®ªà¯à®ªà¯‹à®¤à¯ Wi-Fi பிணையஙà¯à®•à®³à¯ உளà¯à®³à®¤à®¾ என ஸà¯à®•à¯‡à®©à¯ செயà¯à®¯à¯à®®à¯, ஆனால௠"
"சில சமயமà¯\n"
"கைமà¯à®±à¯ˆà®¯à®¾à®• ஸà¯à®•à¯‡à®©à¯ செயà¯à®¯à®¤à¯ தொடஙà¯à®•à¯à®µà®¤à¯ பயனà¯à®³à¯à®³à®¤à¯. இநà¯à®¤à®•à¯ கடà¯à®Ÿà®³à¯ˆ\n"
"APகளைக௠காடà¯à®Ÿà®¾à®¤à¯, அதறà¯à®•à¯ 'nmcli device wifi list' à®à®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯.\n"
"\n"
-#: ../cli/src/devices.c:386
+#: ../clients/cli/devices.c:379
#, c-format
msgid ""
"Usage: nmcli device wimax { ARGUMENTS | help }\n"
@@ -3506,203 +4021,219 @@ msgstr ""
"படà¯à®Ÿà®¿à®¯à®²à®¿à®Ÿà®²à®¾à®®à¯.\n"
"\n"
-#: ../cli/src/devices.c:480
+#: ../clients/cli/devices.c:468 ../clients/cli/devices.c:659
msgid "(none)"
msgstr "(ஒனà¯à®±à¯à®®à®¿à®²à¯à®²à®¾à®¤)"
-#: ../cli/src/devices.c:547
+#: ../clients/cli/devices.c:536
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:548
+#: ../clients/cli/devices.c:537
#, c-format
msgid "%u Mbit/s"
msgstr "%u Mbit/s"
-#: ../cli/src/devices.c:567
+#: ../clients/cli/devices.c:552
msgid "WPA1"
msgstr "WPA1"
-#: ../cli/src/devices.c:576
+#: ../clients/cli/devices.c:561
msgid "802.1X"
msgstr "802.1X"
-#: ../cli/src/devices.c:592
+#: ../clients/cli/devices.c:577
msgid "Ad-Hoc"
msgstr "Ad-Hoc"
-#: ../cli/src/devices.c:593
+#: ../clients/cli/devices.c:578
msgid "Infra"
msgstr "Infra"
-#: ../cli/src/devices.c:625
+#: ../clients/cli/devices.c:579
+msgid "N/A"
+msgstr "பொரà¯à®¨à¯à®¤à®¾à®¤à¯ "
+
+#: ../clients/cli/devices.c:610
msgid "Home"
msgstr "இலà¯à®²à®®à¯"
-#: ../cli/src/devices.c:628
+#: ../clients/cli/devices.c:613
msgid "Partner"
msgstr "கூடà¯à®Ÿà®¾à®³à®°à¯"
-#: ../cli/src/devices.c:631
+#: ../clients/cli/devices.c:616
msgid "Roaming"
msgstr "ரோமிஙà¯"
-#: ../cli/src/devices.c:725
+#: ../clients/cli/devices.c:774
msgid "Device details"
msgstr "சாதன விவரஙà¯à®•à®³à¯"
-#: ../cli/src/devices.c:737
+#: ../clients/cli/devices.c:786
#, 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
+#: ../clients/cli/devices.c:837 ../clients/cli/devices.c:840
msgid "(unknown)"
msgstr "(தெரியாத)"
-#: ../cli/src/devices.c:827
+#: ../clients/cli/devices.c:878
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
-#: ../cli/src/devices.c:913
+#: ../clients/cli/devices.c:964
msgid "on"
msgstr "ஆன௠"
-#: ../cli/src/devices.c:913
+#: ../clients/cli/devices.c:964
msgid "off"
msgstr "ஆஃபà¯"
-#: ../cli/src/devices.c:1188
+#: ../clients/cli/devices.c:1238
#, c-format
msgid "Error: 'device status': %s"
msgstr "பிழை: 'device status': %s"
#. Add headers
-#: ../cli/src/devices.c:1206
+#: ../clients/cli/devices.c:1245
msgid "Status of devices"
msgstr "சாதனஙà¯à®•à®³à®¿à®©à¯ நிலை"
-#: ../cli/src/devices.c:1237
+#: ../clients/cli/devices.c:1276
#, c-format
msgid "Error: invalid extra argument '%s'."
msgstr "பிழை: செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ கூடà¯à®¤à®²à¯ மதிபà¯à®ªà¯à®°à¯ '%s'."
-#: ../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
+#: ../clients/cli/devices.c:1293 ../clients/cli/devices.c:1591
+#: ../clients/cli/devices.c:1741 ../clients/cli/devices.c:1828
+#: ../clients/cli/devices.c:1961 ../clients/cli/devices.c:2622
#, c-format
msgid "Error: Device '%s' not found."
msgstr "பிழை: சாதனம௠'%s' காணபà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
-#: ../cli/src/devices.c:1319
+#: ../clients/cli/devices.c:1371
#, c-format
-#| msgid "Success: Device '%s' successfully disconnected."
-msgid "Success: Device '%s' successfully activated."
-msgstr "வெறà¯à®±à®¿: சாதனம௠'%s' வெறà¯à®±à®¿à®•à®°à®®à®¾à®• செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯."
+msgid "Device '%s' successfully activated with '%s'.\n"
+msgstr "சாதனம௠'%s' '%s' உடன௠வெறà¯à®±à®¿à®•à®°à®®à®¾à®• செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯.\n"
-#: ../cli/src/devices.c:1333
+#: ../clients/cli/devices.c:1377
+#, c-format
+#| msgid "Error: Connection activation failed: (%d) %s."
+msgid "Error: Connection activation failed: (%d) %s.\n"
+msgstr "பிழை: இணைபà¯à®ªà¯ˆà®šà¯ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à®¾à®®à®²à¯ போனதà¯: (%d) %s.\n"
+
+#: ../clients/cli/devices.c:1411
+#, c-format
+msgid "Error: Failed to add/activate new connection: %s"
+msgstr "பிழை: பà¯à®¤à®¿à®¯ இணைபà¯à®ªà¯ˆ சேரà¯à®•à¯à®•/செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+
+#: ../clients/cli/devices.c:1420
+#, c-format
+msgid "Error: Failed to add/activate new connection: Unknown error"
+msgstr "பிழை: பà¯à®¤à®¿à®¯ இணைபà¯à®ªà¯ˆ சேரà¯à®•à¯à®•/செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: தெரியாத பிழை"
+
+#: ../clients/cli/devices.c:1431
+#, c-format
+msgid "Connection with UUID '%s' created and activated on device '%s'\n"
+msgstr ""
+"'%s' சாதனதà¯à®¤à®¿à®²à¯ '%s' எனà¯à®®à¯ UUID கொணà¯à®Ÿ இணைபà¯à®ªà¯ உரà¯à®µà®¾à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà¯ "
+"செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯\n"
+
+#: ../clients/cli/devices.c:1495
#, c-format
-#| msgid "Error: Connection activation failed: %s"
msgid "Error: Device activation failed: %s"
msgstr "பிழை: சாதனதà¯à®¤à¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®µà®¤à®¿à®²à¯ தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯: %s"
-#: ../cli/src/devices.c:1350
+#: ../clients/cli/devices.c:1504
+#, c-format
+msgid "Error: Device activation failed: device was disconnected"
+msgstr ""
+"பிழை: சாதனதà¯à®¤à¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®¤à®²à¯ தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯: சாதனம௠இணைபà¯à®ªà¯ "
+"தà¯à®£à¯à®Ÿà®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
+
+#: ../clients/cli/devices.c:1519
#, 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
+#: ../clients/cli/devices.c:1560 ../clients/cli/devices.c:1569
+#: ../clients/cli/devices.c:1710 ../clients/cli/devices.c:1719
+#: ../clients/cli/devices.c:1798 ../clients/cli/devices.c:1806
#, c-format
msgid "Error: No interface specified."
msgstr "பிழை: இடைமà¯à®•à®™à¯à®•à®³à¯ எதà¯à®µà¯à®®à¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
-#: ../cli/src/devices.c:1396 ../cli/src/devices.c:1531
+#: ../clients/cli/devices.c:1575 ../clients/cli/devices.c:1725
+#: ../clients/cli/devices.c:1812
#, c-format
-#| msgid "Error: invalid extra argument '%s'."
msgid "Error: extra argument not allowed: '%s'."
msgstr "பிழை: கூடà¯à®¤à®²à¯ மதிபà¯à®ªà¯à®°à¯à®µà¯à®•à¯à®•à¯ அனà¯à®®à®¤à®¿à®¯à®¿à®²à¯à®²à¯ˆ: '%s'."
-#: ../cli/src/devices.c:1459
+#: ../clients/cli/devices.c:1639 ../clients/cli/devices.c:1650
#, c-format
-msgid "Success: Device '%s' successfully disconnected."
-msgstr "வெறà¯à®±à®¿: சாதனம௠'%s' வெறà¯à®±à®¿à®•à®°à®®à®¾à®• தà¯à®£à¯à®Ÿà®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯."
+#| msgid "Success: Device '%s' successfully disconnected."
+msgid "Device '%s' successfully disconnected.\n"
+msgstr "'%s' எனà¯à®®à¯ சாதனம௠வெறà¯à®±à®¿à®•à®°à®®à®¾à®• இணைபà¯à®ªà¯ தà¯à®£à¯à®Ÿà®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯.\n"
-#: ../cli/src/devices.c:1471
+#: ../clients/cli/devices.c:1664
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "பிழை: சாதனம௠'%s' (%s) தà¯à®£à¯à®Ÿà®¿à®•à¯à®•à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ: %s"
-#: ../cli/src/devices.c:1485
+#: ../clients/cli/devices.c:1679
#, c-format
msgid "Device '%s' has been disconnected.\n"
msgstr "சாதனம௠'%s' தà¯à®£à¯à®Ÿà®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯.\n"
-#: ../cli/src/devices.c:1628
+#: ../clients/cli/devices.c:1770
+#, c-format
+msgid "Error: Device '%s' (%s) deletion failed: %s"
+msgstr "பிழை: சாதனம௠'%s' à® (%s) நீகà¯à®•à¯à®¤à®²à¯ தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯: %s"
+
+#: ../clients/cli/devices.c:1834
+#, c-format
+msgid "Error: Device '%s' is a hardware device. It can't be deleted."
+msgstr "பிழை: சாதனம௠'%s' ஒர௠வனà¯à®ªà¯Šà®°à¯à®³à¯ சாதனமà¯. அதை நீகà¯à®• à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯."
+
+#: ../clients/cli/devices.c:1904
msgid "Wi-Fi scan list"
msgstr "Wi-Fi ஸà¯à®•à¯‡à®©à¯ படà¯à®Ÿà®¿à®¯à®²à¯"
-#: ../cli/src/devices.c:1666
+#: ../clients/cli/devices.c:1942
#, c-format
msgid "Error: 'device wifi': %s"
msgstr "பிழை: 'device wifi': %s"
-#: ../cli/src/devices.c:1719 ../cli/src/devices.c:1788
+#: ../clients/cli/devices.c:1984 ../clients/cli/devices.c:2059
#, c-format
msgid "Error: Access point with bssid '%s' not found."
msgstr "பிழை: '%s' எனà¯à®± bssis கொணà¯à®Ÿ அணà¯à®•à®²à¯ பà¯à®³à¯à®³à®¿ காணபà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
-#: ../cli/src/devices.c:1743 ../cli/src/devices.c:2131
-#: ../cli/src/devices.c:2293
+#: ../clients/cli/devices.c:2008 ../clients/cli/devices.c:2325
+#: ../clients/cli/devices.c:2489
#, c-format
msgid "Error: Device '%s' is not a Wi-Fi device."
msgstr "பிழை: '%s' சாதனம௠ஒர௠Wi-Fi சாதனமலà¯à®²."
-#: ../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"
-
-#: ../cli/src/devices.c:1829
-#, c-format
-msgid "Error: Connection activation failed: (%d) %s."
-msgstr "பிழை: இணைபà¯à®ªà¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®µà®¤à®¿à®²à¯ தோலà¯à®µà®¿: (%d) %s."
-
-#: ../cli/src/devices.c:1854
-#, c-format
-msgid "Error: Failed to add/activate new connection: (%d) %s"
-msgstr "பிழை: பà¯à®¤à®¿à®¯ இணைபà¯à®ªà¯ˆ சேரà¯à®•à¯à®•/செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: (%d) %s"
-
-#: ../cli/src/devices.c:1862
-#, c-format
-msgid "Error: Failed to add/activate new connection: Unknown error"
-msgstr "பிழை: பà¯à®¤à®¿à®¯ இணைபà¯à®ªà¯ˆ சேரà¯à®•à¯à®•/செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: தெரியாத பிழை"
-
-#: ../cli/src/devices.c:2013
+#: ../clients/cli/devices.c:2218
msgid "SSID or BSSID: "
msgstr "SSID அலà¯à®²à®¤à¯ BSSID: "
-#: ../cli/src/devices.c:2018
+#: ../clients/cli/devices.c:2223
#, c-format
msgid "Error: SSID or BSSID are missing."
msgstr "பிழை: SSID அலலà¯à®¤à¯ BSSID இலà¯à®²à¯ˆ."
-#: ../cli/src/devices.c:2042
+#: ../clients/cli/devices.c:2247
#, c-format
msgid "Error: bssid argument value '%s' is not a valid BSSID."
msgstr "பிழை: bssid அளவà¯à®°à¯ மதிபà¯à®ªà¯ '%s' ஒர௠சரியான BSSID அலà¯à®²."
-#: ../cli/src/devices.c:2066
+#: ../clients/cli/devices.c:2271
#, c-format
msgid ""
"Error: wep-key-type argument value '%s' is invalid, use 'key' or 'phrase'."
@@ -3710,168 +4241,155 @@ msgstr ""
"பிழை: wep-key-type அளவà¯à®°à¯ மதிபà¯à®ªà¯ '%s' தவறானத௠'key' அலà¯à®²à®¤à¯ 'phrase' à®à®ªà¯ "
"பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯."
-#: ../cli/src/devices.c:2086
+#: ../clients/cli/devices.c:2291
#, c-format
-#| msgid "Error: %s."
msgid "Error: %s: %s."
msgstr "பிழை: %s: %s."
-#: ../cli/src/devices.c:2101
+#: ../clients/cli/devices.c:2306
#, c-format
msgid "Error: BSSID to connect to (%s) differs from bssid argument (%s)."
msgstr ""
"பிழை: (%s) கà¯à®•à¯ இணைகà¯à®• வேணà¯à®Ÿà®¿à®¯ BSSID bssid அளவà¯à®°à¯à®µà®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ (%s) "
"வேறà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯."
-#: ../cli/src/devices.c:2107
+#: ../clients/cli/devices.c:2312
#, c-format
msgid "Error: Parameter '%s' is neither SSID nor BSSID."
msgstr "பிழை: அளவà¯à®°à¯ '%s' SSID ஆகவà¯à®®à¯ இலà¯à®²à¯ˆ BSSID ஆகவà¯à®®à¯ இலà¯à®²à¯ˆ."
-#: ../cli/src/devices.c:2133 ../cli/src/devices.c:2295
+#: ../clients/cli/devices.c:2327 ../clients/cli/devices.c:2491
#, c-format
msgid "Error: No Wi-Fi device found."
msgstr "பிழை: Wi-Fi சாதனம௠இலà¯à®²à¯ˆ."
-#: ../cli/src/devices.c:2151
+#: ../clients/cli/devices.c:2345
#, c-format
msgid "Error: No network with SSID '%s' found."
msgstr "பிழை: '%s' எனà¯à®± SSID கொணà¯à®Ÿ பிணையம௠இலà¯à®²à¯ˆ."
-#: ../cli/src/devices.c:2153
+#: ../clients/cli/devices.c:2347
#, c-format
msgid "Error: No access point with BSSID '%s' found."
msgstr "பிழை: '%s' எனà¯à®± BSSID கொணà¯à®Ÿ அணà¯à®•à®²à¯ பà¯à®³à¯à®³à®¿ காணபà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
-#: ../cli/src/devices.c:2192
+#: ../clients/cli/devices.c:2386
msgid "Password: "
msgstr "கடவà¯à®šà¯à®šà¯Šà®²à¯:"
-#: ../cli/src/devices.c:2321
+#: ../clients/cli/devices.c:2518
#, c-format
msgid "Error: 'device wifi' command '%s' is not valid."
msgstr "பிழை: 'device wifi' கடà¯à®Ÿà®³à¯ˆ '%s' செலà¯à®²à®¾à®¤à®¤à¯."
-#: ../cli/src/devices.c:2368
+#: ../clients/cli/devices.c:2565
msgid "WiMAX NSP list"
msgstr "WiMAX NSP படà¯à®Ÿà®¿à®¯à®²à¯"
-#: ../cli/src/devices.c:2405
+#: ../clients/cli/devices.c:2602
#, c-format
msgid "Error: 'device wimax': %s"
msgstr "பிழை: 'device wimax': %s"
-#: ../cli/src/devices.c:2459
+#: ../clients/cli/devices.c:2645
#, c-format
msgid "Error: NSP with name '%s' not found."
msgstr "பிழை: '%s' எனà¯à®± பெயர௠கொணà¯à®Ÿ NSP இலà¯à®²à¯ˆ."
-#: ../cli/src/devices.c:2472
+#: ../clients/cli/devices.c:2658
#, c-format
msgid "Error: Device '%s' is not a WiMAX device."
msgstr "பிழை: சாதனம௠'%s' ஒர௠WiMAX சாதனம௠இலà¯à®²à¯ˆ."
-#: ../cli/src/devices.c:2510
+#: ../clients/cli/devices.c:2702
#, c-format
msgid "Error: Access point with nsp '%s' not found."
msgstr "பிழை: '%s' எனà¯à®± nsp கொணà¯à®Ÿ அணà¯à®•à®²à¯ பà¯à®³à¯à®³à®¿ காணபà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
-#: ../cli/src/devices.c:2542
+#: ../clients/cli/devices.c:2739
#, c-format
msgid "Error: 'device wimax' command '%s' is not valid."
msgstr "பிழை: 'device wimax' கடà¯à®Ÿà®³à¯ˆ '%s' செலà¯à®²à®¾à®¤à®¤à¯."
-#: ../cli/src/devices.c:2621
+#: ../clients/cli/devices.c:2912
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "பிழை: 'dev' கடà¯à®Ÿà®³à¯ˆ '%s' தவறானதà¯."
-#: ../cli/src/network-manager.c:37
+#: ../clients/cli/general.c:35
msgid "RUNNING"
msgstr "RUNNING"
#. 0
-#: ../cli/src/network-manager.c:38
+#: ../clients/cli/general.c:36
msgid "VERSION"
msgstr "VERSION"
#. 2
-#: ../cli/src/network-manager.c:40
+#: ../clients/cli/general.c:38
msgid "STARTUP"
msgstr "தà¯à®µà®•à¯à®•à®®à¯"
#. 3
-#: ../cli/src/network-manager.c:41
-#| msgid "CONNECTION"
+#: ../clients/cli/general.c:39
msgid "CONNECTIVITY"
msgstr "இணைபà¯à®ªà¯à®¤à¯à®¤à®¿à®±à®©à¯"
#. 4
-#: ../cli/src/network-manager.c:42
+#: ../clients/cli/general.c:40
msgid "NETWORKING"
msgstr "NETWORKING"
#. 5
-#: ../cli/src/network-manager.c:43
+#: ../clients/cli/general.c:41
msgid "WIFI-HW"
msgstr "WIFI-HW"
#. 6
-#: ../cli/src/network-manager.c:44
+#: ../clients/cli/general.c:42
msgid "WIFI"
msgstr "WIFI"
#. 7
-#: ../cli/src/network-manager.c:45
+#: ../clients/cli/general.c:43
msgid "WWAN-HW"
msgstr "WWAN-HW"
#. 8
-#: ../cli/src/network-manager.c:46
+#: ../clients/cli/general.c:44
msgid "WWAN"
msgstr "WWAN"
#. 9
-#: ../cli/src/network-manager.c:47
+#: ../clients/cli/general.c:45
msgid "WIMAX-HW"
msgstr "WIMAX-HW"
#. 10
-#: ../cli/src/network-manager.c:48
+#: ../clients/cli/general.c:46
msgid "WIMAX"
msgstr "WIMAX"
-#: ../cli/src/network-manager.c:70
+#: ../clients/cli/general.c:68
msgid "PERMISSION"
msgstr "PERMISSION"
#. 0
-#: ../cli/src/network-manager.c:71
+#: ../clients/cli/general.c:69
msgid "VALUE"
msgstr "VALUE"
-#: ../cli/src/network-manager.c:79
+#: ../clients/cli/general.c:77
msgid "LEVEL"
msgstr "LEVEL"
#. 0
-#: ../cli/src/network-manager.c:80
+#: ../clients/cli/general.c:78
msgid "DOMAINS"
msgstr "DOMAINS"
-#: ../cli/src/network-manager.c:95
+#: ../clients/cli/general.c:92
#, 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 general { COMMAND | help }\n"
"\n"
@@ -3899,7 +4417,7 @@ msgstr ""
" logging [level <log level>] [domains <log domains>]\n"
"\n"
-#: ../cli/src/network-manager.c:107
+#: ../clients/cli/general.c:103
#, c-format
msgid ""
"Usage: nmcli general status { help }\n"
@@ -3913,10 +4431,11 @@ msgstr ""
"\n"
"NetworkManager இன௠ஒடà¯à®Ÿà¯à®®à¯Šà®¤à¯à®¤ நிலையைக௠காடà¯à®Ÿà¯.\n"
"'status' எனà¯à®ªà®¤à¯‡ à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯ செயலà¯, அதாவத௠'nmcli gen' ஆனத௠'nmcli gen "
-"status' ஠அழைகà¯à®•à®¿à®±à®¤à¯ எனப௠பொரà¯à®³à¯\n"
+"status' à® "
+"அழைகà¯à®•à®¿à®±à®¤à¯ எனப௠பொரà¯à®³à¯\n"
"\n"
-#: ../cli/src/network-manager.c:117
+#: ../clients/cli/general.c:112
#, c-format
msgid ""
"Usage: nmcli general hostname { ARGUMENTS | help }\n"
@@ -3936,10 +4455,11 @@ msgstr ""
"கணினி வழஙà¯à®•à®¿à®ªà¯†à®¯à®°à¯ˆ நிரநà¯à®¤à®°à®®à®¾à®•à®ªà¯ பெறà¯à®¤à®²à¯ அலà¯à®²à®¤à¯ மாறà¯à®±à¯à®¤à®²à¯.\n"
"மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ இலà¯à®²à®¾à®µà®¿à®Ÿà¯à®Ÿà®¾à®²à¯, இத௠தறà¯à®ªà¯‹à®¤à¯ˆà®¯ வழஙà¯à®•à®¿ பெயரைக௠கொடà¯à®•à¯à®•à¯à®®à¯. à®’à®°à¯\n"
"வழஙà¯à®•à®¿ பெயரைக௠கொடà¯à®¤à¯à®¤à®¾à®²à¯, NetworkManager அதை பà¯à®¤à®¿à®¯ நிரநà¯à®¤à®° கணினி வழஙà¯à®•à®¿ "
-"பெயராக அமைகà¯à®•à¯à®®à¯.\n"
+"பெயராக "
+"அமைகà¯à®•à¯à®®à¯.\n"
"\n"
-#: ../cli/src/network-manager.c:130
+#: ../clients/cli/general.c:124
#, c-format
msgid ""
"Usage: nmcli general permissions { help }\n"
@@ -3952,7 +4472,7 @@ msgstr ""
"à®…à®™à¯à®•à¯€à®•à®°à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ செயலà¯à®ªà®¾à®Ÿà¯à®•à®³à¯à®•à¯à®•à®¾à®© காலர௠அனà¯à®®à®¤à®¿à®•à®³à¯ˆà®•à¯ காடà¯à®Ÿà¯.\n"
"\n"
-#: ../cli/src/network-manager.c:139
+#: ../clients/cli/general.c:132
#, c-format
msgid ""
"Usage: nmcli general logging { ARGUMENTS | help }\n"
@@ -3973,20 +4493,15 @@ msgstr ""
"\n"
"NetworkManager பதிவிடல௠நிலை அலà¯à®²à®¤à¯ களஙà¯à®•à®³à¯ˆ பெற௠அலà¯à®²à®¤à¯ மாறà¯à®±à¯.\n"
"மதிபà¯à®ªà¯à®°à¯ கொடà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà®¾à®µà®¿à®Ÿà¯à®Ÿà®¾à®²à¯, நடபà¯à®ªà¯ பதிவிடல௠நிலையà¯à®®à¯ களஙà¯à®•à®³à¯à®®à¯ "
-"காடà¯à®Ÿà®ªà¯à®ªà®Ÿà¯à®®à¯. பதிவிடல௠நிலையை மாறà¯à®±,"
-"\n"
-"நிலை மறà¯à®±à¯à®®à¯/அலà¯à®²à®¤à¯ களதà¯à®¤à¯ˆ வழஙà¯à®•à®µà¯à®®à¯. சாதà¯à®¤à®¿à®¯à®®à¯à®³à¯à®³ பதிவிடல௠களஙà¯à®•à®³à®¿à®©à¯"
-"படà¯à®Ÿà®¿à®¯à®²à¯à®•à¯à®•à¯\n"
+"காடà¯à®Ÿà®ªà¯à®ªà®Ÿà¯à®®à¯. பதிவிடல௠"
+"நிலையை மாறà¯à®±,\n"
+"நிலை மறà¯à®±à¯à®®à¯/அலà¯à®²à®¤à¯ களதà¯à®¤à¯ˆ வழஙà¯à®•à®µà¯à®®à¯. சாதà¯à®¤à®¿à®¯à®®à¯à®³à¯à®³ பதிவிடல௠"
+"களஙà¯à®•à®³à®¿à®©à¯à®ªà®Ÿà¯à®Ÿà®¿à®¯à®²à¯à®•à¯à®•à¯\n"
"கையேடà¯à®Ÿà¯à®ªà¯ பகà¯à®•à®¤à¯à®¤à¯ˆà®ªà¯ பாரà¯à®•à¯à®•à®µà¯à®®à¯.\n"
"\n"
-#: ../cli/src/network-manager.c:153
+#: ../clients/cli/general.c:145
#, c-format
-#| msgid ""
-#| "Usage: nmcli networking { COMMAND | help }\n"
-#| "\n"
-#| " COMMAND := { [ on | off ] }\n"
-#| "\n"
msgid ""
"Usage: nmcli networking { COMMAND | help }\n"
"\n"
@@ -4010,13 +4525,8 @@ msgstr ""
" connectivity [check]\n"
"\n"
-#: ../cli/src/network-manager.c:164
+#: ../clients/cli/general.c:155
#, c-format
-#| msgid ""
-#| "Usage: nmcli networking { COMMAND | help }\n"
-#| "\n"
-#| " COMMAND := { [ on | off ] }\n"
-#| "\n"
msgid ""
"Usage: nmcli networking on { help }\n"
"\n"
@@ -4028,13 +4538,8 @@ msgstr ""
"பிணையதà¯à®¤à¯ˆ ஆன௠செயà¯.\n"
"\n"
-#: ../cli/src/network-manager.c:173
+#: ../clients/cli/general.c:163
#, c-format
-#| msgid ""
-#| "Usage: nmcli networking { COMMAND | help }\n"
-#| "\n"
-#| " COMMAND := { [ on | off ] }\n"
-#| "\n"
msgid ""
"Usage: nmcli networking off { help }\n"
"\n"
@@ -4046,7 +4551,7 @@ msgstr ""
"பிணையதà¯à®¤à¯ˆ ஆஃப௠செயà¯.\n"
"\n"
-#: ../cli/src/network-manager.c:182
+#: ../clients/cli/general.c:171
#, c-format
msgid ""
"Usage: nmcli networking connectivity { ARGUMENTS | help }\n"
@@ -4066,19 +4571,8 @@ msgstr ""
"'check' விரà¯à®ªà¯à®ªà®®à¯ கொடà¯à®¤à¯à®¤à®²à¯ NetworkManager இணைபà¯à®ªà¯ மீணà¯à®Ÿà¯à®®à¯ சோதிகà¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯.\n"
"\n"
-#: ../cli/src/network-manager.c:195
+#: ../clients/cli/general.c:183
#, 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"
@@ -4102,7 +4596,7 @@ msgstr ""
" all | wifi | wwan [ on | off ]\n"
"\n"
-#: ../cli/src/network-manager.c:210
+#: ../clients/cli/general.c:197
#, c-format
msgid ""
"Usage: nmcli radio all { ARGUMENTS | help }\n"
@@ -4120,7 +4614,7 @@ msgstr ""
"செயà¯.\n"
"\n"
-#: ../cli/src/network-manager.c:221
+#: ../clients/cli/general.c:207
#, c-format
msgid ""
"Usage: nmcli radio wifi { ARGUMENTS | help }\n"
@@ -4137,7 +4631,7 @@ msgstr ""
"Wi-Fi ரேடியோ ஸà¯à®µà®¿à®Ÿà¯à®šà¯à®šà®¿à®©à¯ நிலையைப௠பெறà¯, அலà¯à®²à®¤à¯ அதை ஆன௠அலà¯à®²à®¤à¯ ஆஃப௠செயà¯.\n"
"\n"
-#: ../cli/src/network-manager.c:232
+#: ../clients/cli/general.c:217
#, c-format
msgid ""
"Usage: nmcli radio wwan { ARGUMENTS | help }\n"
@@ -4155,7 +4649,7 @@ msgstr ""
"ஆஃப௠செயà¯.\n"
"\n"
-#: ../cli/src/network-manager.c:244
+#: ../clients/cli/general.c:228
#, c-format
msgid ""
"Usage: nmcli radio wimax { ARGUMENTS | help }\n"
@@ -4172,181 +4666,167 @@ msgstr ""
"WiMAX ரேடியோ ஸà¯à®µà®¿à®Ÿà¯à®šà¯à®šà®¿à®©à¯ நிலையைப௠பெறà¯, அலà¯à®²à®¤à¯ அதை ஆன௠அலà¯à®²à®¤à¯ ஆஃப௠செயà¯.\n"
"\n"
-#: ../cli/src/network-manager.c:264
+#: ../clients/cli/general.c:248
msgid "asleep"
msgstr "தூஙà¯à®•à®¿à®•à¯ கொணà¯à®Ÿà®¿à®°à¯à®¤à¯à®¤à®²à¯"
-#: ../cli/src/network-manager.c:266
+#: ../clients/cli/general.c:250
msgid "connecting"
msgstr "இணைகà¯à®•à®¿à®±à®¤à¯"
-#: ../cli/src/network-manager.c:268
+#: ../clients/cli/general.c:252
msgid "connected (local only)"
msgstr "இணைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯ (கணினிகà¯à®•à¯à®³à¯ மடà¯à®Ÿà¯à®®à¯)"
-#: ../cli/src/network-manager.c:270
+#: ../clients/cli/general.c:254
msgid "connected (site only)"
msgstr "இணைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯ (தளம௠மடà¯à®Ÿà¯à®®à¯)"
-#: ../cli/src/network-manager.c:274
+#: ../clients/cli/general.c:258
msgid "disconnecting"
msgstr "தà¯à®£à¯à®Ÿà®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯"
-#: ../cli/src/network-manager.c:290
+#: ../clients/cli/general.c:274
msgid "portal"
msgstr "வலைவாசலà¯"
-#: ../cli/src/network-manager.c:292
+#: ../clients/cli/general.c:276
msgid "limited"
msgstr "வரமà¯à®ªà¯à®Ÿà¯ˆà®¯à®¤à¯"
-#: ../cli/src/network-manager.c:294
+#: ../clients/cli/general.c:278
msgid "full"
msgstr "à®®à¯à®´à¯"
-#: ../cli/src/network-manager.c:332
+#: ../clients/cli/general.c:316
#, c-format
-#| msgid "Error: 'list configured': %s; allowed fields: %s"
msgid "Error: only these fields are allowed: %s"
msgstr "பிழை: இநà¯à®¤à®ªà¯ பà¯à®²à®™à¯à®•à®³à¯ மடà¯à®Ÿà¯à®®à¯‡ அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯: %s"
-#: ../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
+#: ../clients/cli/general.c:336 ../clients/cli/general.c:337
+#: ../clients/cli/general.c:338 ../clients/cli/general.c:339
+#: ../clients/cli/general.c:340 ../clients/cli/general.c:342
+#: ../clients/cli/general.c:343
msgid "enabled"
msgstr "செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-#: ../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
+#: ../clients/cli/general.c:336 ../clients/cli/general.c:337
+#: ../clients/cli/general.c:338 ../clients/cli/general.c:339
+#: ../clients/cli/general.c:340 ../clients/cli/general.c:342
+#: ../clients/cli/general.c:343
msgid "disabled"
msgstr "செயலà¯à®¨à¯€à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-#: ../cli/src/network-manager.c:367
+#: ../clients/cli/general.c:346
msgid "NetworkManager status"
msgstr "பிணைய மேலாளர௠நிலை"
-#: ../cli/src/network-manager.c:372
+#: ../clients/cli/general.c:351
msgid "running"
msgstr "இயஙà¯à®•à¯à®•à®¿à®±à®¤à¯"
-#: ../cli/src/network-manager.c:372
-msgid "not running"
-msgstr "இயஙà¯à®•à®µà®¿à®²à¯à®²à¯ˆ"
-
-#: ../cli/src/network-manager.c:375
-#| msgid "activating"
+#: ../clients/cli/general.c:354
msgid "starting"
msgstr "தà¯à®µà®•à¯à®•à¯à®•à®¿à®±à®¤à¯"
-#: ../cli/src/network-manager.c:375
+#: ../clients/cli/general.c:354
msgid "started"
msgstr "தொடஙà¯à®•à®¿à®¯à®¤à¯"
-#: ../cli/src/network-manager.c:446
+#: ../clients/cli/general.c:425
msgid "auth"
msgstr "auth"
-#: ../cli/src/network-manager.c:475
+#: ../clients/cli/general.c:454
#, c-format
msgid "Error: 'general permissions': %s"
msgstr "பிழை: 'general permissions': %s"
-#: ../cli/src/network-manager.c:489
+#: ../clients/cli/general.c:468
msgid "NetworkManager permissions"
msgstr "NetworkManager அனà¯à®®à®¤à®¿à®•à®³à¯"
-#: ../cli/src/network-manager.c:530
+#: ../clients/cli/general.c:509
#, c-format
msgid "Error: 'general logging': %s"
msgstr "பிழை: 'general logging': %s"
-#: ../cli/src/network-manager.c:545
+#: ../clients/cli/general.c:524
msgid "NetworkManager logging"
msgstr "NetworkManager பதிவிடலà¯"
-#: ../cli/src/network-manager.c:565
+#: ../clients/cli/general.c:546
#, c-format
-#| msgid "Error: Failed to add/activate new connection: (%d) %s"
-msgid "Error: failed to set hostname: (%d) %s"
-msgstr "பிழை: வழஙà¯à®•à®¿ பெயரை அமைபà¯à®ªà®¤à®¿à®²à¯ தோலà¯à®µà®¿: (%d) %s"
+#| msgid "Error: failed to set hostname: (%d) %s"
+msgid "Error: failed to set hostname: %s"
+msgstr "பிழை: வழஙà¯à®•à®¿ பெயரை அமைபà¯à®ªà®¤à®¿à®²à¯ தோலà¯à®µà®¿: %s"
-#: ../cli/src/network-manager.c:682
+#: ../clients/cli/general.c:659
#, c-format
-#| msgid "Error: 'general logging': %s"
-msgid "Error: access denied to set logging; %s"
-msgstr "பிழை: பதிவிடலை அமைகà¯à®• அணà¯à®•à®²à¯ மறà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯; %s"
+#| msgid "Error: access denied to set logging; %s"
+msgid "Error: failed to set logging: %s"
+msgstr "பிழை: பதிவிடலை அமைபà¯à®ªà®¤à®¿à®²à¯ தோலà¯à®µà®¿: %s"
-#: ../cli/src/network-manager.c:684
-#, c-format
-msgid "Error: %s"
-msgstr "பிழை: %s"
-
-#: ../cli/src/network-manager.c:692
+#: ../clients/cli/general.c:668
#, c-format
msgid "Error: 'general' command '%s' is not valid."
msgstr "பிழை: 'general' கடà¯à®Ÿà®³à¯ˆ '%s' செலà¯à®²à®¾à®¤à®¤à¯."
-#: ../cli/src/network-manager.c:710
+#: ../clients/cli/general.c:686
#, 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
+#: ../clients/cli/general.c:711
#, 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"
+#: ../clients/cli/general.c:722
msgid "Connectivity"
msgstr "இணைபà¯à®ªà¯à®¤à¯à®¤à®¿à®±à®©à¯"
-#: ../cli/src/network-manager.c:758
+#: ../clients/cli/general.c:737
msgid "Networking"
msgstr "பிணையமாகà¯à®•à®®à¯"
-#: ../cli/src/network-manager.c:783
+#: ../clients/cli/general.c:762
#, 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
+#: ../clients/cli/general.c:778
#, 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
+#: ../clients/cli/general.c:807 ../clients/cli/general.c:827
msgid "Radio switches"
msgstr "ரேடியோ ஸà¯à®µà®¿à®Ÿà¯à®šà¯à®šà¯à®•à®³à¯"
#. no argument, show current WiFi state
-#: ../cli/src/network-manager.c:863
+#: ../clients/cli/general.c:845
msgid "Wi-Fi radio switch"
msgstr "Wi-Fi ரேடியோ ஸà¯à®µà®¿à®Ÿà¯à®šà¯"
#. no argument, show current WWAN (mobile broadband) state
-#: ../cli/src/network-manager.c:879
+#: ../clients/cli/general.c:861
msgid "WWAN radio switch"
msgstr "WWAN ரேடியோ ஸà¯à®µà®¿à®Ÿà¯à®šà¯"
#. no argument, show current WiMAX state
-#: ../cli/src/network-manager.c:896
+#: ../clients/cli/general.c:878
msgid "WiMAX radio switch"
msgstr "WiMAX ரேடியோ ஸà¯à®µà®¿à®Ÿà¯à®šà¯"
-#: ../cli/src/network-manager.c:908
+#: ../clients/cli/general.c:890
#, c-format
msgid "Error: 'radio' command '%s' is not valid."
msgstr "பிழை: 'radio' கடà¯à®Ÿà®³à¯ˆ '%s' செலà¯à®²à®¾à®¤à®¤à¯."
-#: ../cli/src/nmcli.c:78
+#: ../clients/cli/nmcli.c:86
#, c-format
#| msgid ""
#| "Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
@@ -4361,6 +4841,8 @@ msgstr "பிழை: 'radio' கடà¯à®Ÿà®³à¯ˆ '%s' செலà¯à®²à®¾à®¤à®¤à¯
#| " -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"
@@ -4395,19 +4877,21 @@ msgid ""
" r[adio] NetworkManager radio switches\n"
" c[onnection] NetworkManager's connections\n"
" d[evice] devices managed by NetworkManager\n"
+" a[gent] NetworkManager secret agent or polkit agent\n"
"\n"
msgstr ""
"பயனà¯à®ªà®¾à®Ÿà¯: %s [OPTIONS] OBJECT { COMMAND | help }\n"
"\n"
"விரà¯à®ªà¯à®ªà®™à¯à®•à®³à¯\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"
+" -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] ask for missing parameters\n"
" -w[ait] <seconds> set timeout waiting for "
"finishing operations\n"
@@ -4420,350 +4904,337 @@ msgstr ""
" r[adio] NetworkManager radio switches\n"
" c[onnection] NetworkManager's connections\n"
" d[evice] devices managed by NetworkManager\n"
+" a[gent] NetworkManager secret agent or polkit agent\n"
"\n"
-#: ../cli/src/nmcli.c:132
+#: ../clients/cli/nmcli.c:142
#, c-format
msgid "Error: Object '%s' is unknown, try 'nmcli help'."
msgstr "பிழை: பொரà¯à®³à¯ '%s' ஆனத௠தெரியாததà¯, 'nmcli உதவியை' à®®à¯à®¯à®±à¯à®šà®¿à®•à¯à®•à®µà¯à®®à¯."
-#: ../cli/src/nmcli.c:162
+#: ../clients/cli/nmcli.c:172
#, c-format
msgid "Error: Option '--terse' is specified the second time."
msgstr "பிழை: விரà¯à®ªà¯à®ªà®®à¯ '--terse' இரணà¯à®Ÿà®¾à®µà®¤à¯ à®®à¯à®±à¯ˆ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯."
-#: ../cli/src/nmcli.c:167
+#: ../clients/cli/nmcli.c:177
#, c-format
msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
msgstr "பிழை: விரà¯à®ªà¯à®ªà®®à¯ '--terse'ஆனத௠'--pretty' உடன௠ஒனà¯à®±à®¾à®• உளà¯à®³à®¤à¯."
-#: ../cli/src/nmcli.c:175
+#: ../clients/cli/nmcli.c:185
#, c-format
msgid "Error: Option '--pretty' is specified the second time."
msgstr "பிழை: விரà¯à®ªà¯à®ªà®®à¯ '--pretty' இரணà¯à®Ÿà®¾à®µà®¤à¯ à®®à¯à®±à¯ˆ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà¯à®Ÿà®¤à¯."
-#: ../cli/src/nmcli.c:180
+#: ../clients/cli/nmcli.c:190
#, c-format
msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
msgstr "பிழை: விரà¯à®ªà¯à®ªà®®à¯ '--pretty'ஆனத௠'--terse' உடன௠ஒனà¯à®±à®¾à®• உளà¯à®³à®¤à¯"
-#: ../cli/src/nmcli.c:190 ../cli/src/nmcli.c:206 ../cli/src/nmcli.c:235
+#: ../clients/cli/nmcli.c:200 ../clients/cli/nmcli.c:216
+#: ../clients/cli/nmcli.c:245
#, c-format
msgid "Error: missing argument for '%s' option."
msgstr "பிழை: '%s' விரà¯à®ªà¯à®ªà®¤à¯à®¤à®¿à®±à¯à®•à¯ விவாதம௠விடà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯."
-#: ../cli/src/nmcli.c:199 ../cli/src/nmcli.c:215
+#: ../clients/cli/nmcli.c:209 ../clients/cli/nmcli.c:225
#, c-format
msgid "Error: '%s' is not valid argument for '%s' option."
msgstr "பிழை: '%s' ஆனத௠'%s' விரà¯à®ªà¯à®ªà®¤à¯à®¤à®¿à®±à¯à®•à¯ சரியான விவாதம௠அலà¯à®²."
-#: ../cli/src/nmcli.c:222
+#: ../clients/cli/nmcli.c:232
#, c-format
msgid "Error: fields for '%s' options are missing."
msgstr "பிழை: '%s' கà¯à®•à¯ பà¯à®²à®™à¯à®•à®³à¯ விடà¯à®ªà®Ÿà¯à®Ÿà®¤à¯."
-#: ../cli/src/nmcli.c:240
+#: ../clients/cli/nmcli.c:250
#, 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
+#: ../clients/cli/nmcli.c:257
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "nmcli கரà¯à®µà®¿, பதிபà¯à®ªà¯ %s\n"
-#: ../cli/src/nmcli.c:253
+#: ../clients/cli/nmcli.c:263
#, c-format
msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
msgstr "பிழை: விரà¯à®ªà¯à®ªà®®à¯ '%s'ஆனத௠தெரியாததà¯, 'nmcli -உதவியை' à®®à¯à®¯à®±à¯à®šà®¿à®•à¯à®•à®µà¯à®®à¯."
-#: ../cli/src/nmcli.c:288
+#: ../clients/cli/nmcli.c:346 ../clients/cli/nmcli.c:356
#, c-format
msgid ""
"\n"
-"Error: nmcli terminated by signal %d."
+"Error: nmcli terminated by signal %s (%d)\n"
msgstr ""
"\n"
-"பிழை: சமிகà¯à®žà¯ˆ %d மூலம௠nmcli à®®à¯à®Ÿà®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯."
+"பிழை: சமிகà¯à®žà¯ˆ %s (%d) மூலம௠nmcli à®®à¯à®Ÿà®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯.\n"
-#: ../cli/src/nmcli.c:318 ../src/main.c:130
+#: ../clients/cli/nmcli.c:387
#, c-format
-msgid "Failed to set signal mask: %d"
-msgstr "சிகà¯à®©à®²à¯ மூடà¯à®¤à®²à¯ˆ அமைபà¯à®ªà®¤à®¿à®²à¯ தோலà¯à®µà®¿: %d"
+msgid "Failed to set signal mask: %d\n"
+msgstr "சிகà¯à®©à®²à¯ மூடà¯à®¤à®²à¯ˆ அமைபà¯à®ªà®¤à®¿à®²à¯ தோலà¯à®µà®¿: %d\n"
-#: ../cli/src/nmcli.c:325 ../src/main.c:139
+#: ../clients/cli/nmcli.c:394
#, c-format
-msgid "Failed to create signal handling thread: %d"
-msgstr "சிகà¯à®©à®²à¯ˆà®•à¯ கையாளà¯à®®à¯ இழையை உரà¯à®µà®¾à®•à¯à®•à¯à®µà®¤à®¿à®²à¯ தோலà¯à®µà®¿: %d"
+msgid "Failed to create signal handling thread: %d\n"
+msgstr "சிகà¯à®©à®²à¯ˆà®•à¯ கையாளà¯à®®à¯ இழையை உரà¯à®µà®¾à®•à¯à®•à¯à®µà®¤à®¿à®²à¯ தோலà¯à®µà®¿: %d\n"
-#: ../cli/src/nmcli.c:338 ../test/nm-online.c:149
+#: ../clients/cli/nmcli.c:491 ../clients/nm-online.c:197
#, c-format
-msgid "Error: Could not create NMClient object."
-msgstr "பிழை: NMClient பொரà¯à®³à¯ˆ உரà¯à®µà®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
+msgid "Error: Could not create NMClient object: %s."
+msgstr "பிழை: NMClient பொரà¯à®³à¯ˆ உரà¯à®µà®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
-#: ../cli/src/nmcli.c:354
+#: ../clients/cli/nmcli.c:508
msgid "Success"
msgstr "வெறà¯à®±à®¿"
-#: ../cli/src/settings.c:666
+#: ../clients/cli/polkit-agent.c:82
#, c-format
-msgid "%d (hex-ascii-key)"
-msgstr "%d (hex-ascii-key)"
+#| msgid "Authentication"
+msgid "Authentication message: %s\n"
+msgstr "à®…à®™à¯à®•à¯€à®•à®°à®¿à®ªà¯à®ªà¯ செயà¯à®¤à®¿: %s\n"
-#: ../cli/src/settings.c:668
+#: ../clients/cli/polkit-agent.c:88
#, c-format
-msgid "%d (104/128-bit passphrase)"
-msgstr "%d (104/128-bit கடவà¯à®šà¯à®šà¯Šà®²à¯)"
+#| msgid "Authentication"
+msgid "Authentication error: %s\n"
+msgstr "à®…à®™à¯à®•à¯€à®•à®¾à®°à®ªà¯ பிழை: %s\n"
-#: ../cli/src/settings.c:671 ../cli/src/settings.c:799
+#: ../clients/cli/polkit-agent.c:134
#, c-format
-msgid "%d (unknown)"
-msgstr "%d (தெரியாத)"
-
-#: ../cli/src/settings.c:697
-msgid "0 (unknown)"
-msgstr "0 (தெரியாத)"
+#| msgid "Modem initialization failed"
+msgid "Warning: polkit agent initialization failed: %s\n"
+msgstr "எசà¯à®šà®°à®¿à®•à¯à®•à¯ˆ: polkit à®®à¯à®•à®µà®°à¯ˆà®¤à¯ தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®¾à®®à®²à¯ போனதà¯: %s\n"
-#: ../cli/src/settings.c:703
-msgid "any, "
-msgstr "à®à®¤à®¾à®µà®¤à¯,"
-
-#: ../cli/src/settings.c:705
-msgid "900 MHz, "
-msgstr "900 MHz, "
-
-#: ../cli/src/settings.c:707
-msgid "1800 MHz, "
-msgstr "1800 MHz, "
-
-#: ../cli/src/settings.c:709
-msgid "1900 MHz, "
-msgstr "1900 MHz, "
-
-#: ../cli/src/settings.c:711
-msgid "850 MHz, "
-msgstr "850 MHz, "
-
-#: ../cli/src/settings.c:713
-msgid "WCDMA 3GPP UMTS 2100 MHz, "
-msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-
-#: ../cli/src/settings.c:715
-msgid "WCDMA 3GPP UMTS 1800 MHz, "
-msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-
-#: ../cli/src/settings.c:717
-msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
-msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-
-#: ../cli/src/settings.c:719
-msgid "WCDMA 3GPP UMTS 800 MHz, "
-msgstr "WCDMA 3GPP UMTS 800 MHz, "
-
-#: ../cli/src/settings.c:721
-msgid "WCDMA 3GPP UMTS 850 MHz, "
-msgstr "WCDMA 3GPP UMTS 850 MHz, "
-
-#: ../cli/src/settings.c:723
-msgid "WCDMA 3GPP UMTS 900 MHz, "
-msgstr "WCDMA 3GPP UMTS 900 MHz, "
-
-#: ../cli/src/settings.c:725
-msgid "WCDMA 3GPP UMTS 1700 MHz, "
-msgstr "WCDMA 3GPP UMTS 1700 MHz, "
+#: ../clients/cli/settings.c:670
+#, c-format
+msgid "%d (key)"
+msgstr "%d (விசை)"
-#: ../cli/src/settings.c:727
-msgid "WCDMA 3GPP UMTS 1900 MHz, "
-msgstr "WCDMA 3GPP UMTS 1900 MHz, "
+#: ../clients/cli/settings.c:672
+#, c-format
+msgid "%d (passphrase)"
+msgstr "%d (கடவ௠வாகà¯à®•à®¿à®¯à®®à¯)"
-#: ../cli/src/settings.c:729
-msgid "WCDMA 3GPP UMTS 2600 MHz, "
-msgstr "WCDMA 3GPP UMTS 2600 MHz, "
+#: ../clients/cli/settings.c:675 ../clients/cli/settings.c:756
+#, c-format
+msgid "%d (unknown)"
+msgstr "%d (தெரியாத)"
-#: ../cli/src/settings.c:747
+#: ../clients/cli/settings.c:704
msgid "0 (NONE)"
msgstr "0 (NONE)"
-#: ../cli/src/settings.c:753
+#: ../clients/cli/settings.c:710
msgid "REORDER_HEADERS, "
msgstr "REORDER_HEADERS, "
-#: ../cli/src/settings.c:755
+#: ../clients/cli/settings.c:712
msgid "GVRP, "
msgstr "GVRP, "
-#: ../cli/src/settings.c:757
+#: ../clients/cli/settings.c:714
msgid "LOOSE_BINDING, "
msgstr "LOOSE_BINDING, "
-#: ../cli/src/settings.c:793
+#: ../clients/cli/settings.c:750
#, c-format
msgid "%d (disabled)"
msgstr "%d (à®®à¯à®Ÿà®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯)"
-#: ../cli/src/settings.c:795
+#: ../clients/cli/settings.c:752
#, c-format
msgid "%d (enabled, prefer public IP)"
msgstr "%d (செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯, பொத௠IP சிறநà¯à®¤à®¤à¯)"
-#: ../cli/src/settings.c:797
+#: ../clients/cli/settings.c:754
#, c-format
msgid "%d (enabled, prefer temporary IP)"
msgstr "%d (செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯, தறà¯à®•à®¾à®²à®¿à®• IP சிறநà¯à®¤à®¤à¯)"
-#: ../cli/src/settings.c:809
+#: ../clients/cli/settings.c:766
msgid "0 (none)"
msgstr "0 (எதà¯à®µà¯à®®à®¿à®²à¯à®²à¯ˆ)"
-#: ../cli/src/settings.c:815
+#: ../clients/cli/settings.c:772
msgid "agent-owned, "
msgstr "à®à®œà®©à¯à®Ÿà¯ உரிமைகொணà¯à®Ÿà®¤à¯, "
-#: ../cli/src/settings.c:817
+#: ../clients/cli/settings.c:774
msgid "not saved, "
msgstr "சேமிகà¯à®•à®µà®¿à®²à¯à®²à¯ˆ, "
-#: ../cli/src/settings.c:819
+#: ../clients/cli/settings.c:776
msgid "not required, "
msgstr "தேவைபà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ, "
-#: ../cli/src/settings.c:1124
-#| msgid "%d (disabled)"
+#: ../clients/cli/settings.c:1059
msgid "0 (disabled)"
msgstr "0 (à®®à¯à®Ÿà®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯)"
-#: ../cli/src/settings.c:1130
-#| msgid "enabled"
+#: ../clients/cli/settings.c:1065
msgid "enabled, "
msgstr "செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯, "
-#: ../cli/src/settings.c:1132
+#: ../clients/cli/settings.c:1067
msgid "advertise, "
msgstr "காடà¯à®Ÿà®¿à®•à¯à®•à¯Šà®³à¯"
-#: ../cli/src/settings.c:1134
+#: ../clients/cli/settings.c:1069
msgid "willing, "
msgstr "விரà¯à®®à¯à®ªà¯à®µà®¤à¯, "
-#: ../cli/src/settings.c:1162
+#: ../clients/cli/settings.c:1097
msgid "-1 (unset)"
msgstr "-1 (அமைகà¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ)"
-#: ../cli/src/settings.c:1270 ../cli/src/settings.c:1453
-#: ../cli/src/settings.c:1493
+#: ../clients/cli/settings.c:1194 ../clients/cli/settings.c:1481
+#: ../clients/cli/settings.c:1523
msgid "auto"
msgstr "தானே"
-#: ../cli/src/settings.c:1283
-#| msgid "Default"
+#: ../clients/cli/settings.c:1207
msgid "default"
msgstr "à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯"
-#: ../cli/src/settings.c:1614
+#: ../clients/cli/settings.c:1651
#, c-format
msgid "Do you also want to set '%s' to '%s'? [yes]: "
msgstr "'%s' à® '%s' கà¯à®•à¯ அமைகà¯à®•à®µà¯à®®à¯ விரà¯à®®à¯à®ªà¯à®•à®¿à®±à¯€à®°à¯à®•à®³à®¾? [yes]: "
-#: ../cli/src/settings.c:1616
+#: ../clients/cli/settings.c:1653
#, 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
+#: ../clients/cli/settings.c:1814
+#, c-format
+msgid ""
+"Warning: %s.%s set to '%s', but it might be ignored in infrastructure mode\n"
+msgstr ""
+"எசà¯à®šà®°à®¿à®•à¯à®•à¯ˆ: %s.%s ஆனத௠'%s' என அமைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯, ஆனால௠அககà¯à®•à®Ÿà¯à®Ÿà®®à¯ˆà®ªà¯à®ªà¯ "
+"à®®à¯à®±à¯ˆà®®à¯ˆà®¯à®¿à®²à¯ அத௠"
+"பà¯à®±à®•à¯à®•à®£à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà®²à®¾à®®à¯\n"
+
+#: ../clients/cli/settings.c:1833
+#, c-format
+msgid "Warning: setting %s.%s requires removing ipv4 and ipv6 settings\n"
+msgstr ""
+"எசà¯à®šà®°à®¿à®•à¯à®•à¯ˆ: %s.%s ஠அமைகà¯à®•, ipv4 மறà¯à®±à¯à®®à¯ ipv6 அமைவà¯à®•à®³à¯ˆ அகறà¯à®± வேணà¯à®Ÿà¯à®®à¯\n"
+
+#: ../clients/cli/settings.c:1835
+#| msgid "Do you want to provide them? (yes/no) [yes] "
+msgid "Do you want to remove them? [yes] "
+msgstr "அவறà¯à®±à¯ˆ அகறà¯à®±à®µà®¾? [yes] "
+
+#: ../clients/cli/settings.c:1931 ../clients/cli/settings.c:2253
+#: ../clients/cli/settings.c:4326
#, c-format
-#| msgid "'%s' is not a valid UUID"
msgid "'%s' is not valid"
msgstr "'%s' செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®²à¯à®²"
-#: ../cli/src/settings.c:1837
+#: ../clients/cli/settings.c:1954
#, 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
+#: ../clients/cli/settings.c:1976
+#, c-format
+#| msgid "'%d' is not valid; use <%d-%d>"
+msgid "'%lld' is not valid; use <%lld-%lld>"
+msgstr "'%lld' எனà¯à®ªà®¤à¯ தவறானதà¯; <%lld-%lld> à®à®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯"
+
+#: ../clients/cli/settings.c:1998
#, c-format
-#| msgid "'%s' is not a valid band"
-msgid "'%u' is not valid; use <%d-%d>"
-msgstr "'%u' செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®²à¯à®²; <%d-%d> à®à®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯"
+#| msgid "'%u' is not valid; use <%d-%d>"
+msgid "'%u' is not valid; use <%u-%u>"
+msgstr "'%u' எனà¯à®ªà®¤à¯ தவறானதà¯; <%u-%u> à®à®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯"
-#: ../cli/src/settings.c:1925
+#: ../clients/cli/settings.c:2064
#, 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
+#: ../clients/cli/settings.c:2098
#, c-format
-#| msgid "'%s' is not a valid UUID"
msgid "index '%s' is not valid"
msgstr "அடà¯à®Ÿà®µà®£à¯ˆ '%s' செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®²à¯à®²"
-#: ../cli/src/settings.c:1964
+#: ../clients/cli/settings.c:2103 ../clients/cli/settings.c:2128
msgid "no item to remove"
msgstr "நீகà¯à®•à¯à®µà®¤à®±à¯à®•à¯ எதà¯à®µà¯à®®à¯ இலà¯à®²à¯ˆ"
-#: ../cli/src/settings.c:1968
+#: ../clients/cli/settings.c:2107 ../clients/cli/settings.c:2132
#, 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
+#: ../clients/cli/settings.c:2147
#, c-format
-#| msgid "invalid field '%s'"
msgid "invalid option '%s'"
msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ விரà¯à®ªà¯à®ªà®®à¯ '%s'"
-#: ../cli/src/settings.c:1985
+#: ../clients/cli/settings.c:2149
msgid "missing option"
msgstr "விரà¯à®ªà¯à®ªà®®à¯ விடà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯"
-#: ../cli/src/settings.c:2015 ../cli/src/settings.c:2035
+#: ../clients/cli/settings.c:2179 ../clients/cli/settings.c:2199
+#: ../clients/cli/settings.c:2219
#, 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
+#: ../clients/cli/settings.c:2269
#, 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
+#: ../clients/cli/settings.c:2294 ../libnm-core/nm-setting-connection.c:795
+#: ../libnm-core/nm-setting-infiniband.c:256
+#: ../libnm-util/nm-setting-connection.c:835
+#: ../libnm-util/nm-setting-infiniband.c:270
#, 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
+#: ../clients/cli/settings.c:2318
#, c-format
-msgid "'%s' is not a number"
-msgstr "'%s' எனà¯à®ªà®¤à¯ ஒர௠எணà¯à®£à®²à¯à®²"
+#| msgid "'%s' is not a valid channel; use <1-13>"
+msgid "'%s' is not a valid flag number; use <0-%d>"
+msgstr "'%s' எனà¯à®ªà®¤à¯ தவறான கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®²à¯ எணà¯; <0-%d> à®à®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯"
+
+#: ../clients/cli/settings.c:2330
+#, c-format
+msgid "Warning: '%s' sum is higher than all flags => all flags set\n"
+msgstr ""
+"எசà¯à®šà®°à®¿à®•à¯à®•à¯ˆ: '%s' கூடà¯à®¤à®²à®¾à®©à®¤à¯ அனைதà¯à®¤à¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®²à¯à®•à®³à¯ˆ விட அதிகமாக உளà¯à®³à®¤à¯ => "
+"அமைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³ அனைதà¯à®¤à¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®²à¯à®•à®³à¯\n"
-#: ../cli/src/settings.c:2185
+#: ../clients/cli/settings.c:2371
#, 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
+#: ../clients/cli/settings.c:2401
#, 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
+#: ../clients/cli/settings.c:2438 ../libnm-core/nm-setting-connection.c:784
+#: ../libnm-util/nm-setting-connection.c:792
#, c-format
msgid "'%s' is not a valid UUID"
msgstr "'%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à¯à®®à¯ UUID அலà¯à®²"
-#: ../cli/src/settings.c:2317
+#: ../clients/cli/settings.c:2505
+#, c-format
+msgid "the property doesn't contain permission '%s'"
+msgstr "பணà¯à®ªà®¿à®²à¯ '%s' அனà¯à®®à®¤à®¿ இலà¯à®²à¯ˆ"
+
+#: ../clients/cli/settings.c:2517
msgid ""
"Enter a list of user permissions. This is a list of user names formatted "
"as:\n"
@@ -4773,25 +5244,86 @@ msgid ""
"Example: alice bob charlie\n"
msgstr ""
"பயனர௠அனà¯à®®à®¤à®¿à®•à®³à®¿à®©à¯ ஒர௠படà¯à®Ÿà®¿à®¯à®²à¯ˆ உளà¯à®³à®¿à®Ÿà®µà¯à®®à¯. இத௠பினà¯à®µà®°à¯à®®à¯à®ªà®Ÿà®¿ வடிவமைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ "
-"பயனர௠பெயரà¯à®•à®³à®¿à®©à¯ ஒர௠படà¯à®Ÿà®¿à®¯à®²à®¾à®•à¯à®®à¯:\n"
+"பயனர௠"
+"பெயரà¯à®•à®³à®¿à®©à¯ ஒர௠படà¯à®Ÿà®¿à®¯à®²à®¾à®•à¯à®®à¯:\n"
" [user:]<user name 1>, [user:]<user name 2>,... \n"
"ஒவà¯à®µà¯Šà®©à¯à®±à¯ˆà®¯à¯à®®à¯ காறà¯à®ªà¯à®³à¯à®³à®¿ அலà¯à®²à®¤à¯ இடைவெளி மூலம௠பிரிகà¯à®•à®²à®¾à®®à¯.\n"
"\n"
"எடà¯à®¤à¯à®¤à¯à®•à¯à®•à®¾à®Ÿà¯à®Ÿà¯: alice bob charlie\n"
-#: ../cli/src/settings.c:2332
+#: ../clients/cli/settings.c:2536
#, 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
+#: ../clients/cli/settings.c:2580
+#, c-format
+msgid "Warning: %s is not an UUID of any existing connection profile\n"
+msgstr "எசà¯à®šà®°à®¿à®•à¯à®•à¯ˆ: %s எனà¯à®ªà®¤à¯ தறà¯à®ªà¯‹à®¤à¯à®³à¯à®³ எநà¯à®¤à®¤à¯ தனியமைபà¯à®ªà®¿à®©à¯ UUID யà¯à®®à®²à¯à®²\n"
+
+#: ../clients/cli/settings.c:2584 ../clients/cli/settings.c:2600
+#, c-format
+msgid "'%s' is not a VPN connection profile"
+msgstr "'%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© VPN இணைபà¯à®ªà¯ தனியமைபà¯à®ªà®²à¯à®²."
+
+#: ../clients/cli/settings.c:2593
+#, c-format
+msgid "'%s' is not a name of any exiting profile"
+msgstr "'%s' எனà¯à®ªà®¤à¯ தறà¯à®ªà¯‹à®¤à¯à®³à¯à®³ தனியமைபà¯à®ªà®¿à®©à¯ பெயரலà¯à®²"
+
+#: ../clients/cli/settings.c:2627
+#, c-format
+msgid "the value '%s' is not a valid UUID"
+msgstr "'%s' எனà¯à®± மதிபà¯à®ªà¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à¯à®®à¯ UUID அலà¯à®²"
+
+#: ../clients/cli/settings.c:2634
+#, c-format
+msgid "the property doesn't contain UUID '%s'"
+msgstr "பணà¯à®ªà®¿à®²à¯ UUID '%s' இலà¯à®²à¯ˆ"
+
+#: ../clients/cli/settings.c:2646
+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 அலà¯à®²à®¤à¯ ID (பெயரà¯) கொணà¯à®Ÿà¯ "
+"கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®²à®¾à®®à¯. nmcli\n"
+"வெளிபà¯à®ªà®Ÿà¯ˆà®¯à®¾à®• பெயரà¯à®•à®³à¯ˆ UUIDகளாக மாறà¯à®±à¯à®®à¯. NetworkManager ஆனதà¯à®¤à®±à¯à®ªà¯‹à®¤à¯\n"
+"VPNகளை இரணà¯à®Ÿà®¾à®®à¯ நிலை இணைபà¯à®ªà¯à®•à®³à®¾à®•à®µà¯‡ கரà¯à®¤à¯à®®à¯ எனà¯à®ªà®¤à¯ˆ நினைவில௠கொளà¯à®³à®µà¯à®®à¯.\n"
+"உரà¯à®ªà¯à®ªà®Ÿà®¿à®•à®³à¯ˆ காறà¯à®ªà¯à®³à¯à®³à®¿ அலà¯à®²à®¤à¯ இடைவெளி கொணà¯à®Ÿà¯ பிரிகà¯à®•à®²à®¾à®®à¯.\n"
+"\n"
+"எடà¯à®¤à¯à®¤à¯à®•à¯à®•à®¾à®Ÿà¯à®Ÿà¯: private-openvpn, fe6ba5d8-c2fc-4aae-b2e3-97efddd8d9a7\n"
+
+#: ../clients/cli/settings.c:2723
msgid "private key password not provided"
msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ விசை கடவà¯à®šà¯à®šà¯Šà®²à¯ வழஙà¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ"
-#: ../cli/src/settings.c:2513
+#: ../clients/cli/settings.c:2750
+#, c-format
+msgid "the property doesn't contain EAP method '%s'"
+msgstr "பணà¯à®ªà®¿à®²à¯ EAP à®®à¯à®±à¯ˆ '%s' இலà¯à®²à¯ˆ"
+
+#: ../clients/cli/settings.c:2775
+#, c-format
+msgid "the property doesn't contain alternative subject match '%s'"
+msgstr "பணà¯à®ªà®¿à®²à¯ மாறà¯à®±à¯à®¤à¯ தலைபà¯à®ªà¯à®ªà¯ பொரà¯à®¤à¯à®¤à®®à¯ '%s' இலà¯à®²à¯ˆ"
+
+#: ../clients/cli/settings.c:2804
+#, c-format
+msgid "the property doesn't contain \"phase2\" alternative subject match '%s'"
+msgstr "பணà¯à®ªà®¿à®²à¯ \"phase2\" மாறà¯à®±à¯à®¤à¯ தலைபà¯à®ªà¯à®ªà¯ பொரà¯à®¤à¯à®¤à®®à¯ '%s' இலà¯à®²à¯ˆ"
+
+#: ../clients/cli/settings.c:2830
msgid ""
"Enter path to a private key and the key password (if not set yet):\n"
" <file path> [<password>]\n"
@@ -4802,7 +5334,7 @@ msgstr ""
" <file path> [<password>]\n"
"எடà¯à®¤à¯à®¤à¯à®•à¯à®•à®¾à®Ÿà¯à®Ÿà¯: /home/cimrman/jara-priv-key Dardanely\n"
-#: ../cli/src/settings.c:2583
+#: ../clients/cli/settings.c:2900
msgid ""
"Enter bytes as a list of hexadecimal values.\n"
"Two formats are accepted:\n"
@@ -4817,15 +5349,17 @@ msgstr ""
"hexadecimal மதிபà¯à®ªà¯à®•à®³à®¿à®©à¯ படà¯à®Ÿà®¿à®¯à®²à®¾à®• பைடà¯à®Ÿà¯à®•à®³à¯ˆ உளà¯à®³à®¿à®Ÿà®µà¯à®®à¯.\n"
"பினà¯à®µà®°à¯à®®à¯ இர௠வடிவஙà¯à®•à®³à¯ à®à®±à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯:\n"
"(a) hexadecimal இலகà¯à®•à®™à¯à®•à®³à®¿à®©à¯ சரமà¯, இதில௠ஒவà¯à®µà¯Šà®°à¯ இரணà¯à®Ÿà¯ இலகà¯à®•à®™à¯à®•à®³à¯à®®à¯ ஒர௠"
-"பைடà¯à®Ÿà¯ˆà®•à¯ கà¯à®±à®¿à®•à¯à®•à¯à®®à¯\n"
+"பைடà¯à®Ÿà¯ˆà®•à¯ "
+"கà¯à®±à®¿à®•à¯à®•à¯à®®à¯\n"
"(b) பைடà¯à®Ÿà¯à®•à®³à®¿à®©à¯ இடைவெளியால௠பிரிகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ படà¯à®Ÿà®¿à®¯à®²à¯, hexadecimal இலகà¯à®•à®™à¯à®•à®³à®¾à®• "
"எழà¯à®¤à®ªà¯à®ªà®Ÿà¯à®µà®¤à¯ (விரà¯à®®à¯à®ªà®¿à®©à®¾à®²à¯ 0x/0X à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà¯ மறà¯à®±à¯à®®à¯ விரà¯à®®à¯à®ªà®¿à®©à®¾à®²à¯ à®®à¯à®©à¯à®©à®¤à®¾à®• 0 "
-"சேரà¯à®¤à¯à®¤à¯ எழà¯à®¤à®ªà¯à®ªà®Ÿà¯à®®à¯).\n"
+"சேரà¯à®¤à¯à®¤à¯ "
+"எழà¯à®¤à®ªà¯à®ªà®Ÿà¯à®®à¯).\n"
"\n"
"எடà¯à®¤à¯à®¤à¯à®•à¯à®•à®¾à®Ÿà¯à®Ÿà¯à®•à®³à¯: ab0455a6ea3a74C2\n"
" ab 4 55 0xa6 ea 3a 74 C2\n"
-#: ../cli/src/settings.c:2686
+#: ../clients/cli/settings.c:3003
#, c-format
msgid ""
"Enter a list of bonding options formatted as:\n"
@@ -4856,19 +5390,33 @@ msgstr ""
"\n"
"எடà¯à®¤à¯à®¤à¯à®•à¯à®•à®¾à®Ÿà¯à®Ÿà¯: mode=2,miimon=120\n"
-#: ../cli/src/settings.c:2727
+#: ../clients/cli/settings.c:3041
#, 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
+#: ../clients/cli/settings.c:3078
#, 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
+#: ../clients/cli/settings.c:3109
+#, c-format
+msgid "'%s' is not valid (the format is: ip[/prefix] [next-hop] [metric])"
+msgstr ""
+"'%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®²à¯à®² (வடிவமைபà¯à®ªà¯: ip[/prefix] [next-hop] [metric])"
+
+#: ../clients/cli/settings.c:3157 ../clients/cli/settings.c:3176
+#, c-format
+msgid "invalid IPv4 address '%s'"
+msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ IPv4 à®®à¯à®•à®µà®°à®¿ '%s'"
+
+#: ../clients/cli/settings.c:3182 ../clients/cli/settings.c:3483
+#, c-format
+msgid "the property doesn't contain DNS server '%s'"
+msgstr "பணà¯à®ªà®¿à®²à¯ DNS சேவையகம௠'%s' இலà¯à®²à¯ˆ"
+
+#: ../clients/cli/settings.c:3194
msgid ""
"Enter a list of IPv4 addresses of DNS servers.\n"
"\n"
@@ -4878,50 +5426,87 @@ msgstr ""
"\n"
"எடà¯à®¤à¯à®¤à¯à®•à¯à®•à®¾à®Ÿà¯à®Ÿà¯: 8.8.8.8, 8.8.4.4\n"
-#: ../cli/src/settings.c:2871 ../cli/src/settings.c:3123
+#: ../clients/cli/settings.c:3230 ../clients/cli/settings.c:3537
#, c-format
-#| msgid "'%s' is not a valid duplex value"
-msgid "'%s' is not valid (use ip[/prefix] [gateway])"
-msgstr "'%s' செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®²à¯à®² (ip[/prefix] [gateway] à®à®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯)"
+msgid "the property doesn't contain DNS search domain '%s'"
+msgstr "பணà¯à®ªà®¿à®²à¯ DNS தேடல௠டொமைன௠'%s' இலà¯à®²à¯ˆ"
-#: ../cli/src/settings.c:2897
+#: ../clients/cli/settings.c:3284 ../clients/cli/settings.c:3590
+#, c-format
+msgid "the property doesn't contain IP address '%s'"
+msgstr "பணà¯à®ªà®¿à®²à¯ IP à®®à¯à®•à®µà®°à®¿ '%s' இலà¯à®²à¯ˆ"
+
+#: ../clients/cli/settings.c:3297
+#| 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"
msgid ""
"Enter a list of IPv4 addresses formatted as:\n"
-" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+" ip[/prefix], ip[/prefix],...\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"
+"Example: 192.168.1.5/24, 10.0.0.11/24\n"
msgstr ""
-"பினà¯à®µà®°à¯à®®à¯ வடிவதà¯à®¤à®¿à®²à¯ அமைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ IPv4 à®®à¯à®•à®µà®°à®¿à®•à®³à®¿à®©à¯ ஒர௠படà¯à®Ÿà®¿à®¯à®²à¯ˆ உளà¯à®³à®¿à®Ÿà®µà¯à®®à¯:\n"
-" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"பினà¯à®µà®°à¯à®®à¯ வடிவதà¯à®¤à®¿à®²à¯ IPv4 à®®à¯à®•à®µà®°à®¿à®•à®³à®¿à®©à¯ படà¯à®Ÿà®¿à®¯à®²à¯ˆ உளà¯à®³à®¿à®Ÿà®µà¯à®®à¯:\n"
+" ip[/prefix], ip[/prefix],...\n"
"à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà¯ இலà¯à®²à®¾à®µà®¿à®Ÿà¯à®Ÿà®¾à®²à¯ 32 எனà¯à®ªà®¤à¯ à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà®¾à®•à®•à¯ கரà¯à®¤à®ªà¯à®ªà®Ÿà¯à®®à¯.\n"
"\n"
-"எடà¯à®¤à¯à®¤à¯à®•à¯à®•à®¾à®Ÿà¯à®Ÿà¯: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
+"எடà¯à®¤à¯à®¤à¯à®•à¯à®•à®¾à®Ÿà¯à®Ÿà¯: 192.168.1.5/24, 10.0.0.11/24\n"
-#: ../cli/src/settings.c:2954
+#: ../clients/cli/settings.c:3313 ../clients/cli/settings.c:3619
#, 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] à®à®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯)"
+#| msgid "invalid gateway '%s'"
+msgid "invalid gateway address '%s'"
+msgstr "தவறான நà¯à®´à¯ˆà®µà®¾à®¯à®¿à®²à¯: '%s'"
-#: ../cli/src/settings.c:2980
+#: ../clients/cli/settings.c:3368 ../clients/cli/settings.c:3674
+#, c-format
+msgid "the property doesn't contain route '%s'"
+msgstr "பணà¯à®ªà®¿à®²à¯ தடம௠'%s' இலà¯à®²à¯ˆ"
+
+#: ../clients/cli/settings.c:3381
+#| 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"
msgid ""
"Enter a list of IPv4 routes formatted as:\n"
-" ip/[prefix] next-hop [metric],...\n"
+" ip[/prefix] [next-hop] [metric],...\n"
+"\n"
"Missing prefix is regarded as a prefix of 32.\n"
-"Missing metric is regarded as a metric of 0.\n"
+"Missing next-hop is regarded as 0.0.0.0.\n"
+"Missing metric means default (NM/kernel will set a default value).\n"
"\n"
-"Example: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\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/[prefix] next-hop [metric],... \n"
+" ip[/prefix] [next-hop] [metric],...\n"
"à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà¯ இலà¯à®²à®¾à®µà®¿à®Ÿà¯à®Ÿà®¾à®²à¯ 32 எனà¯à®ªà®¤à¯ à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà®¾à®•à®•à¯ கரà¯à®¤à®ªà¯à®ªà®Ÿà¯à®®à¯.\n"
-"மெடà¯à®°à®¿à®•à¯ இலà¯à®²à®¾à®µà®¿à®Ÿà¯à®Ÿà®¾à®²à¯ 0 எனà¯à®ªà®¤à¯ மெடà¯à®°à®¿à®•à¯à®•à®¾à®•à®•à¯ கரà¯à®¤à®ªà¯à®ªà®Ÿà¯à®®à¯.\n"
+"அடà¯à®¤à¯à®¤ ஹாப௠இலà¯à®²à®¾à®µà®¿à®Ÿà¯à®Ÿà®¾à®²à¯ 0.0.0.0. பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®®à¯\n"
+"மெடà¯à®°à®¿à®•à¯ இலà¯à®²à®¾à®µà®¿à®Ÿà¯à®Ÿà®¾à®²à¯ à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯ மெடà¯à®°à®¿à®•à¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®®à¯ "
+"(NM/கெரà¯à®©à®²à¯ ஒர௠"
+"à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯ மதிபà¯à®ªà¯ˆ அமைகà¯à®•à¯à®®à¯).\n"
"\n"
-"எடà¯à®¤à¯à®¤à¯à®•à¯à®•à®¾à®Ÿà¯à®Ÿà¯: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\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"
+
+#: ../clients/cli/settings.c:3458 ../clients/cli/settings.c:3477
+#, c-format
+msgid "invalid IPv6 address '%s'"
+msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ IPv6 à®®à¯à®•à®µà®°à®¿ '%s'"
-#: ../cli/src/settings.c:3071
+#: ../clients/cli/settings.c:3495
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 "
@@ -4933,76 +5518,100 @@ msgid ""
"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"
+"à®®à¯à®±à¯ˆà®¯à®¾à®©à®¤à¯ "
+"'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
+#: ../clients/cli/settings.c:3603
+#| 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"
msgid ""
"Enter a list of IPv6 addresses formatted as:\n"
-" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+" ip[/prefix], ip[/prefix],...\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"
+"Example: 2607:f0d0:1002:51::4/64, 1050:0:0:0:5:600:300c:326b\n"
msgstr ""
-"பினà¯à®µà®°à¯à®®à¯ வடிவதà¯à®¤à®¿à®²à¯ அமைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ IPv6 à®®à¯à®•à®µà®°à®¿à®•à®³à®¿à®©à¯ ஒர௠படà¯à®Ÿà®¿à®¯à®²à¯ˆ உளà¯à®³à®¿à®Ÿà®µà¯à®®à¯:\n"
-" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"பினà¯à®µà®°à¯à®®à¯ வடிவதà¯à®¤à®¿à®²à¯ IPv6 à®®à¯à®•à®µà®°à®¿à®•à®³à®¿à®©à¯ படà¯à®Ÿà®¿à®¯à®²à¯ˆ உளà¯à®³à®¿à®Ÿà®µà¯à®®à¯:\n"
+" ip[/prefix], ip[/prefix],...\n"
"à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà¯ இலà¯à®²à®¾à®µà®¿à®Ÿà¯à®Ÿà®¾à®²à¯ 128 எனà¯à®ªà®¤à¯ à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà®¾à®•à®•à¯ கரà¯à®¤à®ªà¯à®ªà®Ÿà¯à®®à¯.\n"
"\n"
-"எடà¯à®¤à¯à®¤à¯à®•à¯à®•à®¾à®Ÿà¯à®Ÿà¯: 2607:f0d0:1002:51::4/64 2607:f0d0:1002:51::1, "
-"1050:0:0:0:5:"
-"600:300c:326b\n"
+"எடà¯à®¤à¯à®¤à¯à®•à¯à®•à®¾à®Ÿà¯à®Ÿà¯: 2607:f0d0:1002:51::4/64, 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
+#: ../clients/cli/settings.c:3687
+#| 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"
msgid ""
"Enter a list of IPv6 routes formatted as:\n"
-" ip/[prefix] next-hop [metric],...\n"
+" ip[/prefix] [next-hop] [metric],...\n"
+"\n"
"Missing prefix is regarded as a prefix of 128.\n"
-"Missing metric is regarded as a metric of 0.\n"
+"Missing next-hop is regarded as \"::\".\n"
+"Missing metric means default (NM/kernel will set a default value).\n"
"\n"
-"Example: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
+"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/[prefix] next-hop [metric],... \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"
+"அடà¯à®¤à¯à®¤ ஹாப௠இலà¯à®²à®¾à®µà®¿à®Ÿà¯à®Ÿà®¾à®²à¯ \"::\" பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®®à¯\n"
+"மெடà¯à®°à®¿à®•à¯ இலà¯à®²à®¾à®µà®¿à®Ÿà¯à®Ÿà®¾à®²à¯ à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯ மெடà¯à®°à®¿à®•à¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®®à¯ "
+"(NM/கெரà¯à®©à®²à¯ ஒர௠"
+"à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯ மதிபà¯à®ªà¯ˆ அமைகà¯à®•à¯à®®à¯).\n"
+"\n"
+"எடà¯à®¤à¯à®¤à¯à®•à¯à®•à®¾à®Ÿà¯à®Ÿà¯à®•à®³à¯: 2001:db8:beef:2::/64 "
+"2001:db8:beef::2,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:3219
+#: ../clients/cli/settings.c:3704 ../libnm-core/nm-setting-gsm.c:317
+#: ../libnm-util/nm-setting-gsm.c:374
+#, c-format
+msgid "'%s' is not a number"
+msgstr "'%s' எனà¯à®ªà®¤à¯ ஒர௠எணà¯à®£à®²à¯à®²"
+
+#: ../clients/cli/settings.c:3711
#, 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
+#: ../clients/cli/settings.c:3728
#, 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
+#: ../clients/cli/settings.c:3765
#, 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
+#: ../clients/cli/settings.c:3793
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 "
@@ -5013,42 +5622,77 @@ msgid ""
" set team.config /etc/my-team.conf\n"
msgstr ""
"nmcli ஆனத௠JSON அமைவாகà¯à®•à®¤à¯ தரவ௠மறà¯à®±à¯à®®à¯ அமைவாகà¯à®•à®¤à¯à®¤à¯ˆà®•à¯ கொணà¯à®Ÿà¯à®³à¯à®³ ஒர௠கோபà¯à®ªà¯à®ªà¯ "
-"பெயர௠ஆகிய இரணà¯à®Ÿà¯ˆà®¯à¯à®®à¯ à®à®±à¯à®•à¯à®®à¯. கோபà¯à®ªà¯ˆ வழஙà¯à®•à®¿à®©à®¾à®²à¯, கோபà¯à®ªà¯ வாசிகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà¯ "
-"அதிலà¯à®³à¯à®³à®µà¯ˆ பணà¯à®ªà¯à®•à®³à®¿à®²à¯ அமைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯.\n"
+"பெயர௠ஆகிய "
+"இரணà¯à®Ÿà¯ˆà®¯à¯à®®à¯ à®à®±à¯à®•à¯à®®à¯. கோபà¯à®ªà¯ˆ வழஙà¯à®•à®¿à®©à®¾à®²à¯, கோபà¯à®ªà¯ வாசிகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà¯ அதிலà¯à®³à¯à®³à®µà¯ˆ "
+"பணà¯à®ªà¯à®•à®³à®¿à®²à¯ "
+"அமைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯.\n"
"\n"
"எடà¯à®¤à¯à®¤à¯à®•à¯à®•à®¾à®Ÿà¯à®Ÿà¯à®•à®³à¯: set team.config { \"device\": \"team0\", \"runner\": "
-"{\"name\": "
-"\"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n"
+"{\"name"
+"\": \"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n"
" set team.config /etc/my-team.conf\n"
-#: ../cli/src/settings.c:3325
+#: ../clients/cli/settings.c:3833
msgid "no priority to remove"
msgstr "நீகà¯à®•à¯à®µà®¤à®±à¯à®•à¯ à®®à¯à®©à¯à®©à¯à®°à®¿à®®à¯ˆ எதà¯à®µà¯à®®à¯ இலà¯à®²à¯ˆ"
-#: ../cli/src/settings.c:3329
+#: ../clients/cli/settings.c:3837
#, 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
+#: ../clients/cli/settings.c:3876
+#, c-format
+msgid ""
+"Warning: only one mapping at a time is supported; taking the first one (%s)\n"
+msgstr ""
+"எசà¯à®šà®°à®¿à®•à¯à®•à¯ˆ: ஒர௠நேரதà¯à®¤à®¿à®²à¯ ஒர௠மேபà¯à®ªà®¿à®™à¯ மடà¯à®Ÿà¯à®®à¯‡ ஆதரிகà¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯; à®®à¯à®¤à®²à®¿à®²à¯ "
+"பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®¿à®¯à®¤à¯ "
+"எடà¯à®¤à¯à®¤à¯à®•à¯à®•à¯Šà®³à¯à®³à®ªà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯ (%s)\n"
+
+#: ../clients/cli/settings.c:3883
+#, c-format
+msgid "the property doesn't contain mapping '%s'"
+msgstr "பணà¯à®ªà®¿à®²à¯ மேபà¯à®ªà®¿à®™à¯ '%s' இலà¯à®²à¯ˆ"
+
+#: ../clients/cli/settings.c:3992 ../clients/cli/settings.c:4155
+#: ../libnm-core/nm-setting-wired.c:607
+#: ../libnm-core/nm-setting-wireless.c:785
+#: ../libnm-core/nm-setting-wireless.c:797
+#: ../libnm-util/nm-setting-wired.c:650
+#: ../libnm-util/nm-setting-wireless.c:842
+#: ../libnm-util/nm-setting-wireless.c:856
+#, c-format
+msgid "'%s' is not a valid MAC address"
+msgstr "'%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© MAC à®®à¯à®•à®µà®°à®¿à®¯à®²à¯à®²"
+
+#: ../clients/cli/settings.c:3998 ../clients/cli/settings.c:4161
+#, c-format
+msgid "the property doesn't contain MAC address '%s'"
+msgstr "பணà¯à®ªà®¿à®²à¯ MAC à®®à¯à®•à®µà®°à®¿ '%s' இலà¯à®²à¯ˆ"
+
+#: ../clients/cli/settings.c:4017
#, 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 சரஙà¯à®•à®³à¯ வழஙà¯à®•à®ªà¯à®ªà®Ÿ வேணà¯à®Ÿà¯à®®à¯"
+#| msgid "'%s' is not valid; 3 strings should be provided"
+msgid "'%s' is not valid; 2 or 3 strings should be provided"
+msgstr "'%s' எனà¯à®ªà®¤à¯ தவறானதà¯; 2 அலà¯à®²à®¤à¯ 3 சரஙà¯à®•à®³à¯ வழஙà¯à®•à®ªà¯à®ªà®Ÿ வேணà¯à®Ÿà¯à®®à¯"
-#: ../cli/src/settings.c:3463
+#: ../clients/cli/settings.c:4031
+#| msgid ""
+#| "Enter a list of three channels (comma or space separated).\n"
+#| "\n"
+#| "Example: 0.0.0e20 0.0.0e21 0.0.0e22\n"
msgid ""
-"Enter a list of three channels (comma or space separated).\n"
+"Enter a list of subchannels (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
+#: ../clients/cli/settings.c:4081
#, c-format
msgid ""
"Enter a list of S/390 options formatted as:\n"
@@ -5059,70 +5703,97 @@ msgstr ""
" option = <value>, option = <value>,... \n"
"செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© விரà¯à®ªà¯à®ªà®™à¯à®•à®³à¯: %s\n"
-#: ../cli/src/settings.c:3559
+#: ../clients/cli/settings.c:4127
#, c-format
-#| msgid "'%d' is not a valid channel"
msgid "'%s' is not a valid channel"
msgstr "'%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© சேனல௠அலà¯à®²"
-#: ../cli/src/settings.c:3565
+#: ../clients/cli/settings.c:4133
#, 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
+#: ../clients/cli/settings.c:4220 ../clients/cli/settings.c:4258
+#: ../clients/cli/settings.c:4296
+#, c-format
+msgid "the property doesn't contain protocol '%s'"
+msgstr "பணà¯à®ªà®¿à®²à¯ நெறிமà¯à®±à¯ˆ '%s' இலà¯à®²à¯ˆ"
+
+#: ../clients/cli/settings.c:4335
+#, c-format
+msgid ""
+"'%s' not compatible with %s '%s', please change the key or set the right %s "
+"first."
+msgstr ""
+"'%s' ஆனத௠%s '%s' உடன௠இணகà¯à®•à®®à®¾à®©à®¤à®²à¯à®², விசையை மாறà¯à®±à®µà¯à®®à¯ அலà¯à®²à®¤à¯ à®®à¯à®¤à®²à®¿à®²à¯ சரியான %"
+"s à® "
+"அமைகà¯à®•à®µà¯à®®à¯."
+
+#: ../clients/cli/settings.c:4343
#, c-format
msgid "WEP key is guessed to be of '%s'\n"
msgstr "WEP விசை '%s' இன௠விசையாக இரà¯à®•à¯à®•à¯à®®à¯ என ஊகிகà¯à®•à®ªà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯\n"
-#: ../cli/src/settings.c:3695
+#: ../clients/cli/settings.c:4345
+#, c-format
+msgid "WEP key index set to '%d'\n"
+msgstr "WEP கà¯à®±à®¿à®¯à¯€à®Ÿà¯ '%d' கà¯à®•à¯ அமைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯\n"
+
+#: ../clients/cli/settings.c:4368
#, 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
+#: ../clients/cli/settings.c:4384 ../clients/cli/settings.c:4387
+#: ../clients/cli/settings.c:4390 ../clients/cli/settings.c:4393
+#, c-format
+msgid ""
+"Warning: '%s' is not compatible with '%s' type, please change or delete the "
+"key.\n"
+msgstr ""
+"எசà¯à®šà®°à®¿à®•à¯à®•à¯ˆ: '%s' ஆனத௠'%s' வகையà¯à®Ÿà®©à¯ இணகà¯à®•à®®à®¾à®©à®¤à®²à¯à®², விசையை மாறà¯à®±à®µà¯à®®à¯ அலà¯à®²à®¤à¯ "
+"நீகà¯à®•à®µà¯à®®à¯.\n"
+
+#: ../clients/cli/settings.c:4406
#, 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"
+"WEP விசைகளின௠வகையை உளà¯à®³à®¿à®Ÿà®µà¯à®®à¯. à®à®±à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯ மதிபà¯à®ªà¯à®•à®³à¯: 0 அலà¯à®²à®¤à¯ தெரியாததà¯, 1 "
+"அலà¯à®²à®¤à¯ "
+"விசை, மறà¯à®±à¯à®®à¯ 2 அலà¯à®²à®¤à¯ கடவà¯à®µà®¾à®•à¯à®•à®¿à®¯à®®à¯.\n"
-#: ../cli/src/settings.c:3728
+#: ../clients/cli/settings.c:4419
#, c-format
-#| msgid "'%s' is not a valid UUID"
msgid "'%s' is not a valid PSK"
msgstr "'%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© PSK அலà¯à®²"
-#: ../cli/src/settings.c:3772
+#: ../clients/cli/settings.c:4463
#, 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
+#: ../clients/cli/settings.c:4486
#, 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
+#: ../clients/cli/settings.c:4512
msgid "must contain 8 comma-separated numbers"
msgstr "காறà¯à®ªà¯à®³à¯à®³à®¿à®•à®³à®¾à®²à¯ பிரிகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ 8 எணà¯à®•à®³à¯ˆà®•à¯ கொணà¯à®Ÿà®¿à®°à¯à®•à¯à®• வேணà¯à®Ÿà¯à®®à¯"
-#: ../cli/src/settings.c:3838
+#: ../clients/cli/settings.c:4529
#, c-format
msgid "'%s' not a number between 0 and %u (inclusive) or %u"
msgstr "'%s' எனà¯à®ªà®¤à¯ 0 மறà¯à®±à¯à®®à¯ %u (உடà¯à®ªà®Ÿ) அலà¯à®²à®¤à¯ %u கà¯à®•à¯ இடையிலான எணà¯à®£à®²à¯à®²"
-#: ../cli/src/settings.c:3841
+#: ../clients/cli/settings.c:4532
#, c-format
msgid "'%s' not a number between 0 and %u (inclusive)"
msgstr "'%s' எனà¯à®ªà®¤à¯ 0 மறà¯à®±à¯à®®à¯ %u கà¯à®•à¯ (உடà¯à®ªà®Ÿ) இடையிலான எணà¯à®£à®²à¯à®²"
-#: ../cli/src/settings.c:3863
+#: ../clients/cli/settings.c:4554
#, c-format
msgid ""
"Warning: changes will have no effect until '%s' includes 1 (enabled)\n"
@@ -5132,91 +5803,103 @@ msgstr ""
"செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà®¾à®¤à¯\n"
"\n"
-#: ../cli/src/settings.c:3916
+#: ../clients/cli/settings.c:4607
#, c-format
msgid "bandwidth percentages must total 100%%"
msgstr "கறà¯à®±à¯ˆà®¯à®•à®²à®®à¯ சதவீதஙà¯à®•à®³à®¿à®©à¯ கூடà¯à®¤à®²à¯ 100%% ஆக இரà¯à®•à¯à®• வேணà¯à®Ÿà¯à®®à¯"
-#: ../cli/src/settings.c:5594
+#: ../clients/cli/settings.c:6301
msgid "don't know how to get the property value"
msgstr "பணà¯à®ªà®¿à®©à¯ மதிபà¯à®ªà¯ˆ எபà¯à®ªà®Ÿà®¿à®ªà¯ பெறà¯à®µà®¤à¯ எனத௠தெரியவிலà¯à®²à¯ˆ"
-#: ../cli/src/settings.c:5647 ../cli/src/settings.c:5687
+#: ../clients/cli/settings.c:6354 ../clients/cli/settings.c:6394
msgid "the property can't be changed"
msgstr "பணà¯à®ªà¯ˆ மாறà¯à®± à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯"
-#: ../cli/src/settings.c:5791
+#: ../clients/cli/settings.c:6477
+msgid "(not available)"
+msgstr "(கிடைகà¯à®•à®µà®¿à®²à¯à®²à¯ˆ)"
+
+#: ../clients/cli/settings.c:6502
msgid "[NM property description]"
msgstr "[NM பணà¯à®ªà®¿à®©à¯ விளகà¯à®•à®®à¯]"
-#: ../cli/src/settings.c:5797
+#: ../clients/cli/settings.c:6507
msgid "[nmcli specific description]"
msgstr "[nmcli சாரà¯à®¨à¯à®¤ விளகà¯à®•à®®à¯]"
-#: ../cli/src/utils.c:128
+#. ----------------------------------------------------------------------------
+#: ../clients/cli/settings.c:6556
+msgid "<hidden>"
+msgstr "<hidden>"
+
+#: ../clients/cli/utils.c:127
#, c-format
msgid "Error: value for '%s' argument is required."
msgstr "பிழை: '%s' மதிபà¯à®ªà¯à®°à¯à®µà®•à¯à®•à¯ மதிபà¯à®ªà¯ தேவை."
-#: ../cli/src/utils.c:153
+#: ../clients/cli/utils.c:152
#, c-format
msgid "Error: Argument '%s' was expected, but '%s' provided."
msgstr "பிழை: '%s' மதிபà¯à®ªà¯à®°à¯ எதிரà¯à®ªà®¾à®°à¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯, ஆனால௠'%s' வழஙà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯."
-#: ../cli/src/utils.c:156
+#: ../clients/cli/utils.c:155
#, c-format
msgid "Error: Unexpected argument '%s'"
msgstr "பிழை: எதிரà¯à®ªà®¾à®°à®¾à®¤ மதிபà¯à®ªà¯à®°à¯ '%s'"
-#: ../cli/src/utils.c:206
+#: ../clients/cli/utils.c:205
#, c-format
msgid "Error converting IP4 address '0x%X' to text form"
msgstr "IP4 à®®à¯à®•à®µà®°à®¿ '0x%X' ஠உரை வடிவதà¯à®¤à®¿à®±à¯à®•à¯ மாறà¯à®±à¯à®µà®¤à®¿à®²à¯ பிழை"
-#: ../cli/src/utils.c:234
+#: ../clients/cli/utils.c:233
#, c-format
msgid "Error converting IP6 address '%s' to text form"
msgstr "IP6 à®®à¯à®•à®µà®°à®¿ '%s' ஠உரை வடிவதà¯à®¤à®¿à®±à¯à®•à¯ மாறà¯à®±à¯à®µà®¤à®¿à®²à¯ பிழை"
-#: ../cli/src/utils.c:410
+#: ../clients/cli/utils.c:410
+#, c-format
+msgid "'%s' is ambiguous (on x off)"
+msgstr "'%s' தெளிவாக இலà¯à®²à¯ˆ (ஆன௠x ஆஃபà¯)"
+
+#: ../clients/cli/utils.c:420
#, 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
+#: ../clients/cli/utils.c:502
#, c-format
msgid "'%s' is ambiguous (%s x %s)"
msgstr "'%s' தெளிவாக இலà¯à®²à¯ˆ (%s x %s)"
-#: ../cli/src/utils.c:504
+#: ../clients/cli/utils.c:514
#, c-format
msgid "missing name, try one of [%s]"
msgstr "பெயர௠விடà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯, [%s] இல௠ஒனà¯à®±à¯ˆ à®®à¯à®¯à®±à¯à®šà®¿à®•à¯à®•à®µà¯à®®à¯"
-#: ../cli/src/utils.c:721
+#: ../clients/cli/utils.c:753
#, c-format
msgid "field '%s' has to be alone"
msgstr "பà¯à®²à®®à¯ '%s' தனியாக இரà¯à®•à¯à®• வேணà¯à®Ÿà¯à®®à¯"
-#: ../cli/src/utils.c:724
+#: ../clients/cli/utils.c:756
#, c-format
-#| msgid "Error: 'list configured': %s; allowed fields: %s"
msgid "invalid field '%s'; allowed fields: %s"
msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ பà¯à®²à®®à¯ '%s'; அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯ பà¯à®²à®™à¯à®•à®³à¯: %s"
-#: ../cli/src/utils.c:781
+#: ../clients/cli/utils.c:813
msgid "Option '--terse' requires specifying '--fields'"
msgstr "விரà¯à®ªà¯à®ªà®®à¯ '--terse' '--fields'஠கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿ தேவைபà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯"
-#: ../cli/src/utils.c:785
+#: ../clients/cli/utils.c:817
#, c-format
msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
msgstr ""
"விரà¯à®ªà¯à®ªà®®à¯ '--terse'கà¯à®•à¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà¯à®Ÿ '--fields' விரà¯à®ªà¯à®ª மதிபà¯à®ªà¯à®•à®³à¯ தேவை, '%s' "
"அலà¯à®²"
-#: ../cli/src/utils.c:1104
+#: ../clients/cli/utils.c:1135
#, c-format
msgid ""
"Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --"
@@ -5226,7 +5909,7 @@ msgstr ""
"பொரà¯à®¨à¯à®¤à®µà®¿à®²à¯à®²à¯ˆ. "
"எசà¯à®šà®°à®¿à®•à¯à®•à¯ˆà®¯à¯ˆà®¤à¯ தவிரà¯à®•à¯à®• --nocheck கடà¯à®Ÿà®³à¯ˆà®¯à¯ˆà®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯.\n"
-#: ../cli/src/utils.c:1113
+#: ../clients/cli/utils.c:1144
#, c-format
msgid ""
"Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force "
@@ -5237,243 +5920,1161 @@ msgstr ""
"இரà¯à®•à¯à®•à¯à®®à¯ என "
"கணிகà¯à®• à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯."
-#: ../libnm-util/crypto.c:133
+#: ../clients/common/nm-polkit-listener.c:215
+msgid "An authentication session is already underway."
+msgstr "à®à®±à¯à®•à®©à®µà¯‡ ஒர௠அஙà¯à®•à¯€à®•à®°à®¿à®ªà¯à®ªà¯ அமரà¯à®µà¯ நடைபெறà¯à®±à¯à®•à¯à®•à¯Šà®£à¯à®Ÿà¯à®³à¯à®³à®¤à¯."
+
+#. 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)
+#.
+#: ../clients/common/nm-secret-agent-simple.c:209
+#: ../clients/common/nm-secret-agent-simple.c:300
+#: ../clients/tui/nmt-page-dsl.c:69 ../clients/tui/nmt-page-wifi.c:335
+msgid "Username"
+msgstr "பயனரà¯à®ªà¯†à®¯à®°à¯"
+
+#: ../clients/common/nm-secret-agent-simple.c:214
+#: ../clients/common/nm-secret-agent-simple.c:251
+#: ../clients/common/nm-secret-agent-simple.c:277
+#: ../clients/common/nm-secret-agent-simple.c:310
+#: ../clients/common/nm-secret-agent-simple.c:379
+#: ../clients/common/nm-secret-agent-simple.c:392
+#: ../clients/common/nm-secret-agent-simple.c:408
+#: ../clients/tui/nmt-page-dsl.c:78 ../clients/tui/nmt-page-wifi.c:280
+#: ../clients/tui/nmt-page-wifi.c:311 ../clients/tui/nmt-page-wifi.c:344
+msgid "Password"
+msgstr "கடவà¯à®šà¯à®šà¯Šà®²à¯"
+
+#: ../clients/common/nm-secret-agent-simple.c:223
+msgid "Identity"
+msgstr "அடையாளமà¯"
+
+#: ../clients/common/nm-secret-agent-simple.c:228
+msgid "Private key password"
+msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ விசை கடவà¯à®šà¯à®šà¯Šà®²à¯"
+
+#: ../clients/common/nm-secret-agent-simple.c:265
+#: ../clients/tui/nmt-page-wifi.c:292
+msgid "Key"
+msgstr "விசை"
+
+#: ../clients/common/nm-secret-agent-simple.c:305
+#: ../clients/tui/nmt-page-dsl.c:81
+msgid "Service"
+msgstr "சேவை"
+
+#: ../clients/common/nm-secret-agent-simple.c:339
+msgid "Authentication required by wireless network"
+msgstr "வயரà¯à®²à¯†à®¸à¯ பிணையதà¯à®¤à®¿à®±à¯à®•à¯ à®…à®™à¯à®•à¯€à®•à®¾à®°à®®à¯ தேவைபà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯"
+
+#: ../clients/common/nm-secret-agent-simple.c:340
+#, c-format
+msgid ""
+"Passwords or encryption keys are required to access the wireless network "
+"'%s'."
+msgstr ""
+"வயரà¯à®²à¯†à®¸à¯ பிணையம௠'%s' ஠அணà¯à®• கடவà¯à®šà¯à®šà¯Šà®±à¯à®•à®³à¯ அலà¯à®²à®¤à¯ மறைகà¯à®±à®¿à®¯à®¾à®•à®•à¯ விசைகள௠"
+"தேவைபà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯"
+
+#: ../clients/common/nm-secret-agent-simple.c:348
+msgid "Wired 802.1X authentication"
+msgstr "ஒயரà¯à®Ÿà¯ 802.1X à®…à®™à¯à®•à¯€à®•à®¾à®°à®®à¯"
+
+#: ../clients/common/nm-secret-agent-simple.c:351
+msgid "Network name"
+msgstr "பிணைய பெயரà¯"
+
+#: ../clients/common/nm-secret-agent-simple.c:358
+msgid "DSL authentication"
+msgstr "DSL à®…à®™à¯à®•à¯€à®•à®°à®¿à®ªà¯à®ªà¯"
+
+#: ../clients/common/nm-secret-agent-simple.c:366
+msgid "PIN code required"
+msgstr "PIN கà¯à®±à®¿à®¯à¯€à®Ÿà¯ தேவைபà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯"
+
+#: ../clients/common/nm-secret-agent-simple.c:367
+msgid "PIN code is needed for the mobile broadband device"
+msgstr "PIN கà¯à®±à®¿à®¯à¯€à®Ÿà¯ மொபைல௠பிராடà¯à®ªà¯‡à®£à¯à®Ÿà¯ சாதனதà¯à®¤à®¿à®±à¯à®•à¯ தேவைபà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯"
+
+#: ../clients/common/nm-secret-agent-simple.c:369
+msgid "PIN"
+msgstr "PIN"
+
+#: ../clients/common/nm-secret-agent-simple.c:375
+#: ../clients/common/nm-secret-agent-simple.c:388
+#: ../clients/common/nm-secret-agent-simple.c:404
+msgid "Mobile broadband network password"
+msgstr "மொபைல௠பிராடà¯à®ªà¯‡à®£à¯à®Ÿà¯ பிணையதà¯à®¤à®¿à®©à¯ கடவà¯à®šà¯à®šà¯Šà®²à¯"
+
+#: ../clients/common/nm-secret-agent-simple.c:376
+#: ../clients/common/nm-secret-agent-simple.c:389
+#: ../clients/common/nm-secret-agent-simple.c:405
+#, c-format
+msgid "A password is required to connect to '%s'."
+msgstr "'%s'஠இணைபà¯à®ªà®¤à®±à¯à®•à¯ ஒர௠கடவà¯à®šà¯à®šà¯Šà®²à¯ தேவைபà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯."
+
+#: ../clients/nm-online.c:96
+#, c-format
+msgid "\rConnecting"
+msgstr "\rஇணைகà¯à®•à®¿à®±à®¤à¯"
+
+#: ../clients/nm-online.c:149
+msgid ""
+"Time to wait for a connection, in seconds (without the option, default value "
+"is 30)"
+msgstr ""
+"ஒர௠இணைபà¯à®ªà¯à®•à¯à®•à®¾à®• காதà¯à®¤à®¿à®°à¯à®•à¯à®• வேணà¯à®Ÿà®¿à®¯ நேரமà¯, வினாடிகளில௠(விரà¯à®ªà¯à®ªà®®à¯ "
+"இலà¯à®²à®¾à®µà®¿à®Ÿà¯à®Ÿà®¾à®²à¯, "
+"à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯ மதிபà¯à®ªà¯ 30)"
+
+#: ../clients/nm-online.c:150
+msgid "Exit immediately if NetworkManager is not running or connecting"
+msgstr "NetworkManager இயஙà¯à®•à®¾à®µà®¿à®Ÿà¯à®Ÿà®¾à®²à¯ அலà¯à®²à®¤à¯ இணைகà¯à®•à®¾à®µà®¿à®Ÿà¯à®Ÿà®¾à®²à¯ உடனடியாக வெளியேறà¯"
+
+#: ../clients/nm-online.c:151
+msgid "Don't print anything"
+msgstr "எதையà¯à®®à¯ அசà¯à®šà®¿à®Ÿ வேணà¯à®Ÿà®¾à®®à¯"
+
+#: ../clients/nm-online.c:152
+msgid "Wait for NetworkManager startup instead of a connection"
+msgstr ""
+"இணைபà¯à®ªà¯à®•à¯à®•à®¾à®• காதà¯à®¤à®¿à®°à¯à®•à¯à®•à®¾à®®à®²à¯ NetworkManager தொடஙà¯à®•à¯à®µà®¤à®±à¯à®•à¯ காதà¯à®¤à®¿à®°à¯à®•à¯à®•à®µà¯à®®à¯"
+
+#: ../clients/nm-online.c:173
+msgid ""
+"Waits for NetworkManager to finish activating startup network connections."
+msgstr ""
+"NetworkManager தொடகà¯à®• பிணைய இணைபà¯à®ªà¯à®•à®³à¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®®à¯ செயலை à®®à¯à®Ÿà®¿à®•à¯à®•à¯à®®à¯ வரை "
+"காதà¯à®¤à®¿à®°à¯à®•à¯à®•à¯à®®à¯."
+
+#: ../clients/nm-online.c:180 ../clients/nm-online.c:186
+msgid "Invalid option. Please use --help to see a list of valid options."
+msgstr ""
+"தவறான விரà¯à®ªà¯à®ªà®®à¯. சரியான விரà¯à®ªà¯à®ªà®™à¯à®•à®³à®¿à®©à¯ படà¯à®Ÿà®¿à®¯à®²à¯ˆà®ªà¯ பாரà¯à®•à¯à®• --help à®à®ªà¯ "
+"பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯."
+
+#: ../clients/tui/newt/nmt-newt-utils.c:180 ../clients/tui/nmt-editor.c:417
+#: ../clients/tui/nmt-password-dialog.c:174
+#: ../clients/tui/nmt-route-editor.c:125 ../clients/tui/nmtui-hostname.c:71
+#: ../clients/tui/nmtui.c:117
+msgid "OK"
+msgstr "சரி"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:328
+#: ../clients/tui/newt/nmt-newt-utils.c:360
+#, c-format
+msgid "Could not create temporary file: %s"
+msgstr "தறà¯à®•à®¾à®²à®¿à®• கோபà¯à®ªà®¿à®©à¯ˆ உரà¯à®µà®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:368
+#, c-format
+msgid "Editor failed: %s"
+msgstr "திரà¯à®¤à¯à®¤à®¿ தோலà¯à®µà®¿à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯: %s"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:376
+#, c-format
+msgid "Editor failed with status %d"
+msgstr "திரà¯à®¤à¯à®¤à®¿ %d நிலையà¯à®Ÿà®©à¯ தோலà¯à®µà®¿à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:378
+#, c-format
+msgid "Editor failed with signal %d"
+msgstr "திரà¯à®¤à¯à®¤à®¿ சமிகà¯à®žà¯ˆ %d உடன௠தோலà¯à®µà®¿à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:382
+#, c-format
+msgid "Could not re-read file: %s"
+msgstr "கோபà¯à®ªà¯ˆ மீணà¯à®Ÿà¯à®®à¯ வாசிகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+
+#: ../clients/tui/nm-editor-utils.c:151
+#, c-format
+msgid "Ethernet connection %d"
+msgstr "ஈதà¯à®¤à®°à¯à®¨à¯†à®Ÿà¯ இணைபà¯à®ªà¯ %d"
+
+#: ../clients/tui/nm-editor-utils.c:159
+#, c-format
+msgid "Wi-Fi connection %d"
+msgstr "Wi-Fi இணைபà¯à®ªà¯ %d"
+
+#: ../clients/tui/nm-editor-utils.c:168
+#, c-format
+msgid "InfiniBand connection %d"
+msgstr "InfiniBand இணைபà¯à®ªà¯ %d"
+
+#: ../clients/tui/nm-editor-utils.c:173 ../libnm-glib/nm-device.c:1800
+#: ../libnm/nm-device.c:1621
+msgid "Mobile Broadband"
+msgstr "மொபல௠பà¯à®°à®¾à®Ÿà¯à®ªà¯‡à®£à¯à®Ÿà¯"
+
+#: ../clients/tui/nm-editor-utils.c:176
+#, c-format
+msgid "Mobile broadband connection %d"
+msgstr "மொபைல௠பிராடà¯à®ªà¯‡à®£à¯à®Ÿà¯ இணைபà¯à®ªà¯ %d"
+
+#: ../clients/tui/nm-editor-utils.c:182 ../clients/tui/nmt-page-dsl.c:65
+msgid "DSL"
+msgstr "DSL"
+
+#: ../clients/tui/nm-editor-utils.c:186
+#, c-format
+msgid "DSL connection %d"
+msgstr "DSL இணைபà¯à®ªà¯ %d"
+
+#: ../clients/tui/nm-editor-utils.c:191 ../libnm-core/nm-connection.c:1543
+#: ../libnm-glib/nm-device.c:1804 ../libnm-util/nm-connection.c:1608
+#: ../libnm/nm-device.c:1625 ../src/settings/plugins/ifcfg-rh/reader.c:3910
+msgid "Bond"
+msgstr "பிணைபà¯à®ªà¯"
+
+#: ../clients/tui/nm-editor-utils.c:195
+#, c-format
+msgid "Bond connection %d"
+msgstr "பிணைபà¯à®ªà¯ இணைபà¯à®ªà¯ %d"
+
+#: ../clients/tui/nm-editor-utils.c:200 ../libnm-core/nm-connection.c:1547
+#: ../libnm-glib/nm-device.c:1808 ../libnm-util/nm-connection.c:1612
+#: ../libnm/nm-device.c:1629 ../src/settings/plugins/ifcfg-rh/reader.c:4201
+msgid "Bridge"
+msgstr "பிரிடà¯à®œà¯"
+
+#: ../clients/tui/nm-editor-utils.c:205
+#, c-format
+msgid "Bridge connection %d"
+msgstr "பிணைபà¯à®ªà¯ இணைபà¯à®ªà¯ %d"
+
+#: ../clients/tui/nm-editor-utils.c:209 ../libnm-core/nm-connection.c:1545
+#: ../libnm-glib/nm-device.c:1806 ../libnm-util/nm-connection.c:1610
+#: ../libnm/nm-device.c:1627 ../src/settings/plugins/ifcfg-rh/reader.c:4016
+msgid "Team"
+msgstr "அணி"
+
+#: ../clients/tui/nm-editor-utils.c:214
+#, c-format
+msgid "Team connection %d"
+msgstr "கà¯à®´à¯ இணைபà¯à®ªà¯ %d"
+
+#: ../clients/tui/nm-editor-utils.c:222
+#, c-format
+msgid "VLAN connection %d"
+msgstr "VLAN இணைபà¯à®ªà¯ %d"
+
+#: ../clients/tui/nm-editor-utils.c:237
+#, c-format
+msgid "VPN connection %d"
+msgstr "VPN இணைபà¯à®ªà¯ %d"
+
+#: ../clients/tui/nmt-device-entry.c:371
+msgid "Select..."
+msgstr "தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•à®µà¯à®®à¯..."
+
+#: ../clients/tui/nmt-edit-connection-list.c:112
+msgid "Add"
+msgstr "சேரà¯"
+
+#: ../clients/tui/nmt-edit-connection-list.c:115
+#: ../clients/tui/nmt-page-ip4.c:172 ../clients/tui/nmt-page-ip6.c:170
+#: ../clients/tui/nmt-page-team-port.c:112 ../clients/tui/nmt-page-team.c:176
+msgid "Edit..."
+msgstr "திரà¯à®¤à¯à®¤à¯..."
+
+#: ../clients/tui/nmt-edit-connection-list.c:118
+#: ../clients/tui/nmtui-edit.c:527
+msgid "Delete"
+msgstr "அழி"
+
+#: ../clients/tui/nmt-editor-section.c:105
+msgid "Hide"
+msgstr "மறை"
+
+#: ../clients/tui/nmt-editor-section.c:105
+msgid "Show"
+msgstr "காடà¯à®Ÿà¯"
+
+#: ../clients/tui/nmt-editor.c:99
+#, c-format
+msgid "Could not create editor for connection '%s' of type '%s'."
+msgstr ""
+"'%s' வகையைச௠சேரà¯à®¨à¯à®¤ இணைபà¯à®ªà¯ '%s' கà¯à®•à¯ திரà¯à®¤à¯à®¤à®¿à®¯à¯ˆ உரà¯à®µà®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../clients/tui/nmt-editor.c:103
+#, c-format
+msgid "Could not create editor for invalid connection '%s'."
+msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ இணைபà¯à®ªà¯ '%s' கà¯à®•à¯ திரà¯à®¤à¯à®¤à®¿à®¯à¯ˆ உரà¯à®µà®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../clients/tui/nmt-editor.c:113
+msgid "Edit Connection"
+msgstr "இணைபà¯à®ªà¯ˆà®¤à¯ திரà¯à®¤à¯à®¤à¯"
+
+#: ../clients/tui/nmt-editor.c:166
+#, c-format
+msgid "Unable to save connection: %s"
+msgstr "இணைபà¯à®ªà¯ˆ சேமிகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+
+#: ../clients/tui/nmt-editor.c:180
+#, c-format
+msgid "Unable to add new connection: %s"
+msgstr "பà¯à®¤à®¿à®¯ இணைபà¯à®ªà¯ˆà®šà¯ சேரà¯à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+
+#: ../clients/tui/nmt-editor.c:322
+msgid "Profile name"
+msgstr "தனியமைபà¯à®ªà¯ பெயரà¯"
+
+#: ../clients/tui/nmt-editor.c:333
+#| msgid "Ethernet"
+msgid "Ethernet device"
+msgstr "ஈதà¯à®¤à®°à¯à®¨à¯†à®Ÿà¯ சாதனமà¯"
+
+#: ../clients/tui/nmt-editor.c:335
+msgid "Device"
+msgstr "சாதனமà¯"
+
+#. And finally the bottom widgets
+#: ../clients/tui/nmt-editor.c:393
+msgid "Automatically connect"
+msgstr "தானாகவே இணைகà¯à®•à®µà¯à®®à¯"
+
+#: ../clients/tui/nmt-editor.c:399
+msgid "Available to all users"
+msgstr "அனைதà¯à®¤à¯ பயனரà¯à®•à®³à¯à®•à¯à®•à¯à®®à¯ கிடைகà¯à®•à¯à®®à¯"
+
+#: ../clients/tui/nmt-editor.c:414 ../clients/tui/nmt-password-dialog.c:171
+#: ../clients/tui/nmt-route-editor.c:118 ../clients/tui/nmtui-edit.c:218
+#: ../clients/tui/nmtui-edit.c:526 ../clients/tui/nmtui-hostname.c:69
+msgid "Cancel"
+msgstr "ரதà¯à®¤à¯à®šà¯†à®¯à¯"
+
+#: ../clients/tui/nmt-mtu-entry.c:86
+msgid "(default)"
+msgstr "(à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯)"
+
+#: ../clients/tui/nmt-mtu-entry.c:88 ../clients/tui/nmt-mtu-entry.c:119
+msgid "bytes"
+msgstr "பைடà¯à®Ÿà¯à®•à®³à¯"
+
+#: ../clients/tui/nmt-page-bond.c:87
+msgid "Round-robin"
+msgstr "ரவà¯à®©à¯à®Ÿà¯-ராபினà¯"
+
+#: ../clients/tui/nmt-page-bond.c:88
+msgid "Active Backup"
+msgstr "செயலà¯à®®à®¿à®•à¯ மறà¯à®ªà®¿à®°à®¤à®¿"
+
+#: ../clients/tui/nmt-page-bond.c:89
+msgid "XOR"
+msgstr "XOR"
+
+#: ../clients/tui/nmt-page-bond.c:90
+msgid "Broadcast"
+msgstr "ஒளிபà¯à®ªà®°à®ªà¯à®ªà¯"
+
+#: ../clients/tui/nmt-page-bond.c:91
+msgid "802.3ad"
+msgstr "802.3ad"
+
+#: ../clients/tui/nmt-page-bond.c:92
+msgid "Adaptive Transmit Load Balancing (tlb)"
+msgstr "சரிசெயà¯à®¤à¯à®•à¯Šà®³à¯à®³à¯à®®à¯ பரபà¯à®ªà®²à¯ சà¯à®®à¯ˆ சமநிலைபà¯à®ªà®Ÿà¯à®¤à¯à®¤à®²à¯ (tlb)"
+
+#: ../clients/tui/nmt-page-bond.c:93
+msgid "Adaptive Load Balancing (alb)"
+msgstr "சரிசெயà¯à®¤à¯à®•à¯Šà®³à¯à®³à¯à®®à¯ சà¯à®®à¯ˆ சமநிலைபà¯à®ªà®Ÿà¯à®¤à¯à®¤à®²à¯ (alb)"
+
+#: ../clients/tui/nmt-page-bond.c:99
+msgid "MII (recommended)"
+msgstr "MII (பரிநà¯à®¤à¯à®°à¯ˆà®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®µà®¤à¯)"
+
+#: ../clients/tui/nmt-page-bond.c:100
+msgid "ARP"
+msgstr "ARP"
+
+#: ../clients/tui/nmt-page-bond.c:358 ../clients/tui/nmt-page-bridge.c:81
+#: ../clients/tui/nmt-page-team.c:155
+msgid "Slaves"
+msgstr "அடிமைகளà¯"
+
+#: ../clients/tui/nmt-page-bond.c:370 ../clients/tui/nmt-page-wifi.c:233
+msgid "Mode"
+msgstr "à®®à¯à®±à¯ˆ"
+
+#: ../clients/tui/nmt-page-bond.c:376
+msgid "Primary"
+msgstr "à®®à¯à®¤à®©à¯à®®à¯ˆ"
+
+#: ../clients/tui/nmt-page-bond.c:382
+msgid "Link monitoring"
+msgstr "இணைபà¯à®ªà¯ கணà¯à®•à®¾à®£à®¿à®ªà¯à®ªà¯"
+
+#: ../clients/tui/nmt-page-bond.c:388 ../clients/tui/nmt-page-bond.c:395
+#: ../clients/tui/nmt-page-bond.c:402 ../clients/tui/nmt-page-bond.c:409
+msgctxt "milliseconds"
+msgid "ms"
+msgstr "ms"
+
+#: ../clients/tui/nmt-page-bond.c:389 ../clients/tui/nmt-page-bond.c:410
+msgid "Monitoring frequency"
+msgstr "அதிரà¯à®µà¯†à®£à¯ கணà¯à®•à®¾à®£à®¿à®ªà¯à®ªà¯"
+
+#: ../clients/tui/nmt-page-bond.c:396
+msgid "Link up delay"
+msgstr "லிஙà¯à®•à¯ அப௠தாமதமà¯"
+
+#: ../clients/tui/nmt-page-bond.c:403
+msgid "Link down delay"
+msgstr "லிஙà¯à®•à¯ டவà¯à®©à¯ தாமதமà¯"
+
+#: ../clients/tui/nmt-page-bond.c:416
+msgid "ARP targets"
+msgstr "ARP இலகà¯à®•à¯à®•à®³à¯"
+
+#: ../clients/tui/nmt-page-bridge-port.c:63
+msgid "BRIDGE PORT"
+msgstr "பிரிடà¯à®œà¯ போரà¯à®Ÿà¯"
+
+#: ../clients/tui/nmt-page-bridge-port.c:70
+#: ../clients/tui/nmt-page-bridge.c:107
+msgid "Priority"
+msgstr "à®®à¯à®©à¯à®©à¯à®°à®¿à®®à¯ˆ"
+
+#: ../clients/tui/nmt-page-bridge-port.c:76
+msgid "Path cost"
+msgstr "பாதை செலவà¯"
+
+#: ../clients/tui/nmt-page-bridge-port.c:78
+msgid "Hairpin mode"
+msgstr "ஹேரà¯à®ªà®¿à®©à¯ à®®à¯à®±à¯ˆà®®à¯ˆ"
+
+#: ../clients/tui/nmt-page-bridge.c:91 ../clients/tui/nmt-page-bridge.c:116
+#: ../clients/tui/nmt-page-bridge.c:126 ../clients/tui/nmt-page-bridge.c:136
+msgid "seconds"
+msgstr "விநாடிகளà¯"
+
+#: ../clients/tui/nmt-page-bridge.c:92
+msgid "Aging time"
+msgstr "பழையதாகà¯à®®à¯ நேரமà¯"
+
+#: ../clients/tui/nmt-page-bridge.c:94
+msgid "Enable STP (Spanning Tree Protocol)"
+msgstr "STP ஠செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯ (பரவà¯à®®à¯ மரகà¯à®•à®¿à®³à¯ˆ நெறிமà¯à®±à¯ˆ)"
+
+#: ../clients/tui/nmt-page-bridge.c:117
+msgid "Forward delay"
+msgstr "பகிரà¯à®¤à®²à¯ தாமதமà¯"
+
+#: ../clients/tui/nmt-page-bridge.c:127
+msgid "Hello time"
+msgstr "ஹலோ நேரமà¯"
+
+#: ../clients/tui/nmt-page-bridge.c:137
+msgid "Max age"
+msgstr "அதிகபடà¯à®š வயதà¯"
+
+#: ../clients/tui/nmt-page-ethernet.c:73
+msgid "ETHERNET"
+msgstr "ஈதà¯à®¤à®°à¯à®¨à¯†à®Ÿà¯"
+
+#: ../clients/tui/nmt-page-ethernet.c:80 ../clients/tui/nmt-page-vlan.c:125
+#: ../clients/tui/nmt-page-wifi.c:367
+msgid "Cloned MAC address"
+msgstr "நகலெடà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ MAC à®®à¯à®•à®µà®°à®¿"
+
+#: ../clients/tui/nmt-page-infiniband.c:50
+msgid "Datagram"
+msgstr "தரவà¯à®ªà¯à®ªà®Ÿà®®à¯"
+
+#: ../clients/tui/nmt-page-infiniband.c:51
+msgid "Connected"
+msgstr "இணைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
+
+#: ../clients/tui/nmt-page-infiniband.c:84
+msgid "INFINIBAND"
+msgstr "INFINIBAND"
+
+#: ../clients/tui/nmt-page-infiniband.c:91
+msgid "Transport mode"
+msgstr "போகà¯à®•à¯à®µà®°à®¤à¯à®¤à¯ à®®à¯à®±à¯ˆà®®à¯ˆ"
+
+#: ../clients/tui/nmt-page-ip4.c:41
+msgid "Disabled"
+msgstr "à®®à¯à®Ÿà®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
+
+#: ../clients/tui/nmt-page-ip4.c:42 ../clients/tui/nmt-page-ip6.c:42
+msgid "Automatic"
+msgstr "தானியகà¯à®•à®®à¯"
+
+#: ../clients/tui/nmt-page-ip4.c:43 ../clients/tui/nmt-page-ip6.c:44
+msgid "Link-Local"
+msgstr "உளà¯à®³à®®à¯ˆ இணைபà¯à®ªà¯"
+
+#: ../clients/tui/nmt-page-ip4.c:44 ../clients/tui/nmt-page-ip6.c:45
+msgid "Manual"
+msgstr "கைமà¯à®±à¯ˆ"
+
+#: ../clients/tui/nmt-page-ip4.c:45
+msgid "Shared"
+msgstr "பகிரபà¯à®ªà®Ÿà¯à®Ÿ"
+
+#: ../clients/tui/nmt-page-ip4.c:85 ../clients/tui/nmt-page-ip6.c:85
+msgid "(No custom routes)"
+msgstr "(தனிபà¯à®ªà®¯à®©à¯ தடஙà¯à®•à®³à¯ இலà¯à®²à¯ˆ)"
+
+#: ../clients/tui/nmt-page-ip4.c:88 ../clients/tui/nmt-page-ip6.c:88
+#, c-format
+msgid "One custom route"
+msgid_plural "%d custom routes"
+msgstr[0] "ஒர௠தனிபà¯à®ªà®¯à®©à¯ தடமà¯"
+msgstr[1] "%d தனிபà¯à®ªà®¯à®©à¯ தடஙà¯à®•à®³à¯"
+
+#: ../clients/tui/nmt-page-ip4.c:131
+msgid "IPv4 CONFIGURATION"
+msgstr "IPv4 அமைவாகà¯à®•à®®à¯"
+
+#: ../clients/tui/nmt-page-ip4.c:139 ../clients/tui/nmt-page-ip6.c:139
+msgid "Addresses"
+msgstr "à®®à¯à®•à®µà®°à®¿à®•à®³à¯"
+
+#: ../clients/tui/nmt-page-ip4.c:146 ../clients/tui/nmt-page-ip6.c:146
+msgid "Gateway"
+msgstr "நà¯à®´à¯ˆà®µà®¾à®¯à®¿à®²à¯"
+
+#: ../clients/tui/nmt-page-ip4.c:153 ../clients/tui/nmt-page-ip6.c:153
+msgid "DNS servers"
+msgstr "DNS சேவையகஙà¯à®•à®³à¯"
+
+#: ../clients/tui/nmt-page-ip4.c:159 ../clients/tui/nmt-page-ip6.c:159
+msgid "Search domains"
+msgstr "தேடல௠டொமைனà¯à®•à®³à¯"
+
+#: ../clients/tui/nmt-page-ip4.c:174 ../clients/tui/nmt-page-ip6.c:172
+msgid "Routing"
+msgstr "ரௌடà¯à®Ÿà®¿à®™à¯"
+
+#: ../clients/tui/nmt-page-ip4.c:176 ../clients/tui/nmt-page-ip6.c:174
+msgid "Never use this network for default route"
+msgstr "à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯ தடதà¯à®¤à®¿à®±à¯à®•à¯ இநà¯à®¤ பிணையதà¯à®¤à¯ˆ à®’à®°à¯à®ªà¯‹à®¤à¯à®®à¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤ வேணà¯à®Ÿà®¾à®®à¯"
+
+#: ../clients/tui/nmt-page-ip4.c:184
+msgid "Require IPv4 addressing for this connection"
+msgstr "இநà¯à®¤ இணைபà¯à®ªà¯à®•à¯à®•à¯ IPv4 à®®à¯à®•à®µà®°à®¿ தேவை"
+
+#: ../clients/tui/nmt-page-ip6.c:41
+msgid "Ignore"
+msgstr "தவிரà¯"
+
+#: ../clients/tui/nmt-page-ip6.c:43
+msgid "Automatic (DHCP-only)"
+msgstr "தானியகà¯à®• (DHCP) மடà¯à®Ÿà¯à®®à¯)"
+
+#: ../clients/tui/nmt-page-ip6.c:131
+msgid "IPv6 CONFIGURATION"
+msgstr "IPv6 அமைவாகà¯à®•à®®à¯"
+
+#: ../clients/tui/nmt-page-ip6.c:182
+msgid "Require IPv6 addressing for this connection"
+msgstr "இநà¯à®¤ இணைபà¯à®ªà¯à®•à¯à®•à¯ IPv6 à®®à¯à®•à®µà®°à®¿ தேவை"
+
+#: ../clients/tui/nmt-page-ppp.c:134
+msgid "PPP CONFIGURATION"
+msgstr "PPP அமைவாகà¯à®•à®®à¯"
+
+#: ../clients/tui/nmt-page-ppp.c:143
+msgid "Allowed authentication methods:"
+msgstr "அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯ à®…à®™à¯à®•à¯€à®•à®°à®¿à®ªà¯à®ªà¯ à®®à¯à®±à¯ˆà®•à®³à¯:"
+
+#: ../clients/tui/nmt-page-ppp.c:150
+msgid "EAP"
+msgstr "EAP"
+
+#: ../clients/tui/nmt-page-ppp.c:158
+msgid "PAP"
+msgstr "PAP"
+
+#: ../clients/tui/nmt-page-ppp.c:166
+msgid "CHAP"
+msgstr "CHAP"
+
+#: ../clients/tui/nmt-page-ppp.c:174
+msgid "MSCHAPv2"
+msgstr "MSCHAPv2"
+
+#: ../clients/tui/nmt-page-ppp.c:182
+msgid "MSCHAP"
+msgstr "MSCHAP"
+
+#: ../clients/tui/nmt-page-ppp.c:198
+msgid "Use point-to-point encryption (MPPE)"
+msgstr "பாயிணà¯à®Ÿà¯ ட௠பாயிணà¯à®Ÿà¯ மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®•à®¤à¯à®¤à¯ˆ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯ (MPPE)"
+
+#: ../clients/tui/nmt-page-ppp.c:210
+msgid "Require 128-bit encryption"
+msgstr "128-பிட௠கà¯à®±à®¿à®®à¯à®±à¯ˆà®¯à®¾à®•à¯à®•à®®à¯ தேவை"
+
+#: ../clients/tui/nmt-page-ppp.c:220
+msgid "Use stateful MPPE"
+msgstr "ஸà¯à®Ÿà¯‡à®Ÿà¯à®ƒà®ªà¯à®²à¯ MPPE à®à®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯"
+
+#: ../clients/tui/nmt-page-ppp.c:232
+msgid "Allow BSD data compression"
+msgstr "BSD தரவ௠அமà¯à®•à¯à®•à®¤à¯à®¤à¯ˆ அனà¯à®®à®¤à®¿"
+
+#: ../clients/tui/nmt-page-ppp.c:240
+msgid "Allow Deflate data compression"
+msgstr "டீஃபà¯à®³à¯‡à®Ÿà¯ தரவ௠அமà¯à®•à¯à®•à®¤à¯à®¤à¯ˆ அனà¯à®®à®¤à®¿"
+
+#: ../clients/tui/nmt-page-ppp.c:248
+msgid "Use TCP header compression"
+msgstr "TCP தலைபà¯à®ªà¯ à®…à®®à¯à®•à¯à®•à®¤à¯à®¤à¯ˆà®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯"
+
+#: ../clients/tui/nmt-page-ppp.c:258
+msgid "Send PPP echo packets"
+msgstr "PPP எகà¯à®•à¯‹ பொதிகளை அனà¯à®ªà¯à®ªà¯"
+
+#: ../clients/tui/nmt-page-team-port.c:95
+msgid "TEAM PORT"
+msgstr "அணி போரà¯à®Ÿà¯"
+
+#: ../clients/tui/nmt-page-team-port.c:102 ../clients/tui/nmt-page-team.c:166
+msgid "JSON configuration"
+msgstr "JSON அமைவாகà¯à®•à®®à¯"
+
+#: ../clients/tui/nmt-page-vlan.c:102
+msgid "Parent"
+msgstr "பெறà¯à®±à¯‹à®°à¯"
+
+#: ../clients/tui/nmt-page-vlan.c:117
+msgid "VLAN id"
+msgstr "VLAN id"
+
+#: ../clients/tui/nmt-page-wifi.c:67
+msgctxt "Wi-Fi"
+msgid "Client"
+msgstr "கிளையனà¯à®Ÿà¯"
+
+#: ../clients/tui/nmt-page-wifi.c:68
+msgid "Access Point"
+msgstr "அணà¯à®•à®²à¯ பà¯à®³à¯à®³à®¿"
+
+#: ../clients/tui/nmt-page-wifi.c:69
+msgid "Ad-Hoc Network"
+msgstr "Ad-Hoc பிணையமà¯"
+
+#: ../clients/tui/nmt-page-wifi.c:74
+msgctxt "Wi-Fi"
+msgid "Automatic"
+msgstr "தானியஙà¯à®•à®¿"
+
+#. 802.11a Wi-Fi network
+#: ../clients/tui/nmt-page-wifi.c:76
+msgid "A (5 GHz)"
+msgstr "A (5 GHz)"
+
+#. 802.11b / 802.11g Wi-Fi network
+#: ../clients/tui/nmt-page-wifi.c:78
+msgid "B/G (2.4 GHz)"
+msgstr "B/G (2.4 GHz)"
+
+#: ../clients/tui/nmt-page-wifi.c:83
+msgctxt "Wi-Fi security"
+msgid "None"
+msgstr "எதà¯à®µà¯à®®à®¿à®²à¯à®²à¯ˆ"
+
+#: ../clients/tui/nmt-page-wifi.c:84
+msgid "WPA & WPA2 Personal"
+msgstr "WPA & WPA2 தனிபà¯à®ªà®Ÿà¯à®Ÿ"
+
+#: ../clients/tui/nmt-page-wifi.c:85
+msgid "WPA & WPA2 Enterprise"
+msgstr "WPA & WPA2 கடவà¯à®šà¯à®šà¯Šà®²à¯"
+
+#: ../clients/tui/nmt-page-wifi.c:86
+msgid "WEP 40/128-bit Key (Hex or ASCII)"
+msgstr "WEP 40/128-பிட௠விசை (Hex அலà¯à®²à®¤à¯ ASCII)"
+
+#: ../clients/tui/nmt-page-wifi.c:87
+msgid "WEP 128-bit Passphrase"
+msgstr "WEP 128-பிட௠கடவà¯à®µà®¾à®•à¯à®•à®¿à®¯à®®à¯"
+
+#: ../clients/tui/nmt-page-wifi.c:88
+msgid "Dynamic WEP (802.1x)"
+msgstr "மாறà¯à®®à¯ WEP (802.1x)"
+
+#: ../clients/tui/nmt-page-wifi.c:89
+msgid "LEAP"
+msgstr "LEAP"
+
+#: ../clients/tui/nmt-page-wifi.c:94
+msgctxt "WEP key index"
+msgid "1 (Default)"
+msgstr "1 (à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯)"
+
+#: ../clients/tui/nmt-page-wifi.c:95
+msgctxt "WEP key index"
+msgid "2"
+msgstr "2"
+
+#: ../clients/tui/nmt-page-wifi.c:96
+msgctxt "WEP key index"
+msgid "3"
+msgstr "3"
+
+#: ../clients/tui/nmt-page-wifi.c:97
+msgctxt "WEP key index"
+msgid "4"
+msgstr "4"
+
+#: ../clients/tui/nmt-page-wifi.c:102
+msgid "Open System"
+msgstr "Open System"
+
+#: ../clients/tui/nmt-page-wifi.c:103
+msgid "Shared Key"
+msgstr "பகிரபà¯à®ªà®Ÿà¯à®Ÿ விசை"
+
+#: ../clients/tui/nmt-page-wifi.c:217
+msgid "WI-FI"
+msgstr "WI-FI"
+
+#: ../clients/tui/nmt-page-wifi.c:259
+msgid "Channel"
+msgstr "சேனலà¯"
+
+#: ../clients/tui/nmt-page-wifi.c:264
+msgid "Security"
+msgstr "பாதà¯à®•à®¾à®ªà¯à®ªà¯"
+
+#. "wpa-enterprise"
+#. FIXME
+#: ../clients/tui/nmt-page-wifi.c:285
+msgid "(No support for wpa-enterprise yet...)"
+msgstr "(இபà¯à®ªà¯‹à®¤à¯ wpa-enterprise கà¯à®•à¯ ஆதரவ௠இலà¯à®²à¯ˆ...)"
+
+#: ../clients/tui/nmt-page-wifi.c:295 ../clients/tui/nmt-page-wifi.c:314
+msgid "WEP index"
+msgstr "WEP அடà¯à®Ÿà®µà®£à¯ˆ"
+
+#: ../clients/tui/nmt-page-wifi.c:303 ../clients/tui/nmt-page-wifi.c:322
+msgid "Authentication"
+msgstr "à®…à®™à¯à®•à¯€à®•à®¾à®°à®®à¯"
+
+#. "dynamic-wep"
+#. FIXME
+#: ../clients/tui/nmt-page-wifi.c:328
+msgid "(No support for dynamic-wep yet...)"
+msgstr "(இபà¯à®ªà¯‹à®¤à¯ dynamic-wep கà¯à®•à¯ ஆதரவ௠இலà¯à®²à¯ˆ...)"
+
+#: ../clients/tui/nmt-password-fields.c:130
+msgid "Ask for this password every time"
+msgstr "ஒவà¯à®µà¯Šà®°à¯ à®®à¯à®±à¯ˆà®¯à¯à®®à¯ இநà¯à®¤ கடவà¯à®šà¯à®šà¯Šà®²à¯à®²à¯ˆà®•à¯ கேடà¯à®•à®µà¯à®®à¯"
+
+#: ../clients/tui/nmt-password-fields.c:131
+msgid "Show password"
+msgstr "கடவà¯à®šà¯à®šà¯Šà®²à¯à®²à¯ˆà®•à¯ காடà¯à®Ÿà¯"
+
+#: ../clients/tui/nmt-route-table.c:192
+msgid "Destination"
+msgstr "இலகà¯à®•à¯"
+
+#: ../clients/tui/nmt-route-table.c:192
+msgid "Prefix"
+msgstr "à®®à¯à®©à¯à®ªà¯Šà®°à¯à®¤à¯à®¤à®®à¯"
+
+#: ../clients/tui/nmt-route-table.c:201
+msgid "Next Hop"
+msgstr "அடà¯à®¤à¯à®¤ ஹாபà¯"
+
+#: ../clients/tui/nmt-route-table.c:209
+msgid "Metric"
+msgstr "மெடà¯à®°à®¿à®•à¯"
+
+#: ../clients/tui/nmt-route-table.c:229
+msgid "No custom routes are defined."
+msgstr "தனிபà¯à®ªà®¯à®©à¯ தடஙà¯à®•à®³à¯ à®à®¤à¯à®®à¯ வரையறà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../clients/tui/nmt-slave-list.c:137
+msgid "Select the type of slave connection you wish to add."
+msgstr "நீஙà¯à®•à®³à¯ சேரà¯à®•à¯à®• விரà¯à®®à¯à®ªà¯à®®à¯ அடிமை இணைபà¯à®ªà¯ வகையைத௠தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•à®µà¯à®®à¯."
+
+#: ../clients/tui/nmt-widget-list.c:141
+msgid "Add..."
+msgstr "சேரà¯..."
+
+#: ../clients/tui/nmt-widget-list.c:204
+msgid "Remove"
+msgstr "அகறà¯à®±à¯"
+
+#: ../clients/tui/nmtui-connect.c:90
+msgid "Activation failed"
+msgstr "செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®µà®¤à®¿à®²à¯ தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯"
+
+#: ../clients/tui/nmtui-connect.c:145
+msgid "Connecting..."
+msgstr "இணைகà¯à®•à®¿à®±à®¤à¯..."
+
+#: ../clients/tui/nmtui-connect.c:180 ../clients/tui/nmtui-connect.c:211
+#, c-format
+msgid "Could not activate connection: %s"
+msgstr "இணைபà¯à®ªà¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+
+#: ../clients/tui/nmtui-connect.c:271 ../clients/tui/nmtui-connect.c:320
+msgid "Activate"
+msgstr "செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯"
+
+#: ../clients/tui/nmtui-connect.c:273
+msgid "Deactivate"
+msgstr "செயலà¯à®®à¯à®Ÿà®•à¯à®•à¯"
+
+#: ../clients/tui/nmtui-connect.c:325 ../clients/tui/nmtui-edit.c:121
+#: ../clients/tui/nmtui.c:111
+msgid "Quit"
+msgstr "வெளியேறà¯"
+
+#: ../clients/tui/nmtui-connect.c:348
+#, c-format
+msgid "No such connection '%s'"
+msgstr "'%s' என ஒர௠இணைபà¯à®ªà¯ இலà¯à®²à¯ˆ"
+
+#: ../clients/tui/nmtui-connect.c:350
+msgid "Connection is already active"
+msgstr "இணைபà¯à®ªà¯ à®®à¯à®©à¯à®ªà¯‡ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯"
+
+#: ../clients/tui/nmtui-edit.c:226
+msgid "Create"
+msgstr "உரà¯à®µà®¾à®•à¯à®•à®µà¯à®®à¯"
+
+#: ../clients/tui/nmtui-edit.c:368
+msgid "Select the type of connection you wish to create."
+msgstr "உரà¯à®µà®¾à®•à¯à®• விரà¯à®®à¯à®ªà¯à®®à¯ இணைபà¯à®ªà¯ வகையை தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•à®µà¯à®®à¯."
+
+#: ../clients/tui/nmtui-edit.c:376
+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 செரà¯à®•à¯à®¨à®¿à®°à®²à¯ நிறà¯à®µà®ªà¯à®ªà®Ÿà®¾à®¤à®¿à®°à¯à®•à¯à®•à®²à®¾à®®à¯."
+
+#: ../clients/tui/nmtui-edit.c:412 ../clients/tui/nmtui-edit.c:428
+msgid "New Connection"
+msgstr "பà¯à®¤à®¿à®¯ இணைபà¯à®ªà¯"
+
+#: ../clients/tui/nmtui-edit.c:467
+#, c-format
+msgid "Unable to delete connection: %s"
+msgstr "இணைபà¯à®ªà¯ˆà®•à¯ கணà¯à®Ÿà®±à®¿à®¯ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+
+#: ../clients/tui/nmtui-edit.c:506
+#, c-format
+#| msgid "Could not delete connection: %s"
+msgid "Could not delete connection '%s': %s"
+msgstr "இணைபà¯à®ªà¯ˆ நீகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: '%s': %s"
+
+#: ../clients/tui/nmtui-edit.c:528
+#, c-format
+msgid "Are you sure you want to delete the connection '%s'?"
+msgstr "நிசà¯à®šà®¯à®®à¯ இணைபà¯à®ªà¯ '%s' ஠அழிகà¯à®• வேணà¯à®Ÿà¯à®®à®¾?"
+
+#: ../clients/tui/nmtui-hostname.c:47
+msgid "Set Hostname"
+msgstr "வழஙà¯à®•à®¿ பெயரை அமைகà¯à®•à®µà¯à®®à¯"
+
+#: ../clients/tui/nmtui-hostname.c:55
+msgid "Hostname"
+msgstr "வழஙà¯à®•à®¿ பெயரà¯"
+
+#. Translators: this indicates the result. ie, "I have set the hostname to ..."
+#: ../clients/tui/nmtui-hostname.c:118
+#, c-format
+msgid "Set hostname to '%s'"
+msgstr "வாழஙà¯à®•à®¿ பெயரை '%s' என அமைகà¯à®•à®µà¯à®®à¯"
+
+#: ../clients/tui/nmtui-hostname.c:120
+#, c-format
+msgid "Unable to set hostname: %s"
+msgstr "வழஙà¯à®•à®¿ பெயரை அமைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+
+#: ../clients/tui/nmtui.c:56 ../clients/tui/nmtui.c:59
+msgid "connection"
+msgstr "இணைபà¯à®ªà¯"
+
+#: ../clients/tui/nmtui.c:57
+msgid "Edit a connection"
+msgstr "ஒர௠இணைபà¯à®ªà¯ˆà®¤à¯ திரà¯à®¤à¯à®¤à®µà¯à®®à¯"
+
+#: ../clients/tui/nmtui.c:60
+msgid "Activate a connection"
+msgstr "ஒர௠இணைபà¯à®ªà¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯"
+
+#: ../clients/tui/nmtui.c:62
+msgid "new hostname"
+msgstr "பà¯à®¤à®¿à®¯ வழஙà¯à®•à®¿ பெயரà¯"
+
+#: ../clients/tui/nmtui.c:63
+msgid "Set system hostname"
+msgstr "கணினி வழஙà¯à®•à®¿ பெயரை அமைகà¯à®•à®µà¯à®®à¯"
+
+#: ../clients/tui/nmtui.c:86
+msgid "NetworkManager TUI"
+msgstr "NetworkManager TUI"
+
+#: ../clients/tui/nmtui.c:94
+msgid "Please select an option"
+msgstr "ஒர௠விரà¯à®ªà¯à®ªà®¤à¯à®¤à¯ˆ தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•à®µà¯à®®à¯"
+
+#: ../clients/tui/nmtui.c:146
+msgid "Usage"
+msgstr "பயனà¯à®ªà®¾à®Ÿà¯"
+
+#: ../clients/tui/nmtui.c:227
+msgid "Could not parse arguments"
+msgstr "மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ˆ பாகà¯à®ªà®Ÿà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ"
+
+#: ../clients/tui/nmtui.c:237
+#, c-format
+msgid "Could not contact NetworkManager: %s.\n"
+msgstr "NetworkManager à®à®¤à¯ தொடரà¯à®ªà¯à®•à¯Šà®³à¯à®³ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s.\n"
+
+#: ../clients/tui/nmtui.c:242
+msgid "NetworkManager is not running."
+msgstr "NetworkManager இயஙà¯à®•à®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../libnm-core/crypto.c:120 ../libnm-util/crypto.c:133
#, c-format
msgid "PEM key file had no end tag '%s'."
msgstr "PEM விசைக௠கோபà¯à®ªà®¿à®±à¯à®•à¯ à®®à¯à®Ÿà®¿à®µà¯ ஒடà¯à®Ÿà¯'%s' இலà¯à®²à¯ˆ."
-#: ../libnm-util/crypto.c:146
+#: ../libnm-core/crypto.c:133 ../libnm-util/crypto.c:146
#, c-format
msgid "Doesn't look like a PEM private key file."
msgstr "இதைப௠பாரà¯à®ªà¯à®ªà®¤à®±à¯à®•à¯ ஒர௠PEM தனிபà¯à®ªà®Ÿà¯à®Ÿ விசைக௠கோபà¯à®ªà¯ போல௠இலà¯à®²à¯ˆ."
-#: ../libnm-util/crypto.c:163
+#: ../libnm-core/crypto.c:150 ../libnm-util/crypto.c:163
#, c-format
msgid "Malformed PEM file: Proc-Type was not first tag."
msgstr "à®®à¯à®±à¯ˆà®¯à®±à¯à®± PEM கோபà¯à®ªà¯: Proc-வகையானத௠மà¯à®¤à®²à¯ ஒடà¯à®Ÿà¯ இலà¯à®²à¯ˆ."
-#: ../libnm-util/crypto.c:171
+#: ../libnm-core/crypto.c:158 ../libnm-util/crypto.c:171
#, c-format
msgid "Malformed PEM file: unknown Proc-Type tag '%s'."
msgstr "à®®à¯à®±à¯ˆà®¯à®±à¯à®± PEM கோபà¯à®ªà¯: தெரியாத Proc-வகை ஒடà¯à®Ÿà¯ '%s'."
-#: ../libnm-util/crypto.c:181
+#: ../libnm-core/crypto.c:168 ../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:192
+#: ../libnm-core/crypto.c:179 ../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:199
+#: ../libnm-core/crypto.c:186 ../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:212
+#: ../libnm-core/crypto.c:201 ../libnm-util/crypto.c:214
#, c-format
msgid "Malformed PEM file: unknown private key cipher '%s'."
msgstr "à®®à¯à®±à¯ˆà®¯à®±à¯à®± PEM கோபà¯à®ªà¯: தெரியாத தனிபà¯à®ªà®Ÿà¯à®Ÿ விசை cipher '%s'."
-#: ../libnm-util/crypto.c:231
+#: ../libnm-core/crypto.c:220 ../libnm-util/crypto.c:233
#, c-format
msgid "Could not decode private key."
msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ விசையை கà¯à®±à®¿à®¯à®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
-#: ../libnm-util/crypto.c:283
+#: ../libnm-core/crypto.c:274 ../libnm-util/crypto.c:285
msgid "Failed to find expected PKCS#8 start tag."
msgstr "எதிரà¯à®ªà®¾à®°à¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ PKCS#8 தொடகà¯à®•à®•à¯ கà¯à®±à®¿à®šà¯à®šà¯Šà®²à¯à®²à¯ˆà®•à¯ கணà¯à®Ÿà®±à®¿à®µà®¤à®¿à®²à¯ தோலà¯à®µà®¿."
-#: ../libnm-util/crypto.c:291
+#: ../libnm-core/crypto.c:282 ../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:310
+#: ../libnm-core/crypto.c:301 ../libnm-util/crypto.c:312
msgid "Failed to decode PKCS#8 private key."
msgstr "PKCS#8 தனிபà¯à®ªà®Ÿà¯à®Ÿ விசையை கà¯à®±à®¿à®¨à¯€à®•à¯à®•à®®à¯ செயà¯à®¤à®²à¯ தோலà¯à®µà®¿."
-#: ../libnm-util/crypto.c:352
+#: ../libnm-core/crypto.c:343 ../libnm-util/crypto.c:354
#, c-format
msgid "IV must be an even number of bytes in length."
msgstr "IV ஆனத௠நீளதà¯à®¤à®¿à®²à¯ ஒர௠பைடà¯à®Ÿà®¿à®•à®³à®¿à®©à¯ எணà¯à®©à¯ˆà®ªà¯ பெறà¯à®±à¯à®³à¯à®³à®¤à¯."
-#: ../libnm-util/crypto.c:366
+#: ../libnm-core/crypto.c:357 ../libnm-util/crypto.c:368
#, c-format
msgid "IV contains non-hexadecimal digits."
msgstr "IV ஆனதà¯-ஹெகà¯à®¸à®¾ தசம எணà¯à®•à®³à¯ˆ பெறà¯à®±à®¿à®°à¯à®•à¯à®•à®µà®¿à®²à¯à®²à¯ˆ."
-#: ../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
+#: ../libnm-core/crypto.c:397 ../libnm-core/crypto_gnutls.c:93
+#: ../libnm-core/crypto_gnutls.c:214 ../libnm-core/crypto_nss.c:115
+#: ../libnm-core/crypto_nss.c:280 ../libnm-util/crypto.c:408
+#: ../libnm-util/crypto_gnutls.c:146 ../libnm-util/crypto_gnutls.c:263
+#: ../libnm-util/crypto_nss.c:165 ../libnm-util/crypto_nss.c:326
#, c-format
msgid "Private key cipher '%s' was unknown."
msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ விசை cipher '%s' ஆனத௠தெரியாததà¯."
-#: ../libnm-util/crypto.c:511
+#: ../libnm-core/crypto.c:496 ../libnm-util/crypto.c:518
#, c-format
msgid "Unable to determine private key type."
msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ விசை வகையை வரையறà¯à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
-#: ../libnm-util/crypto.c:566
+#: ../libnm-core/crypto.c:504
+#, c-format
+msgid "Password provided, but key was not encrypted."
+msgstr ""
+"கடவà¯à®šà¯à®šà¯Šà®²à¯ வழஙà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯, ஆனால௠திறபà¯à®ªà¯ மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®•à®®à¯ செயà¯à®¯à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../libnm-core/crypto.c:557 ../libnm-util/crypto.c:573
#, c-format
msgid "PEM certificate had no start tag '%s'."
msgstr "PEM சானà¯à®±à®¿à®¤à®´à®¿à®²à¯ '%s' எனà¯à®± தொடகà¯à®•à®•à¯ கà¯à®±à®¿à®šà¯à®šà¯Šà®²à¯ இலà¯à®²à¯ˆ."
-#: ../libnm-util/crypto.c:575
+#: ../libnm-core/crypto.c:566 ../libnm-util/crypto.c:582
#, c-format
msgid "PEM certificate had no end tag '%s'."
msgstr "PEM சானà¯à®±à®¿à®¤à®´à®¿à®²à¯ '%s' எனà¯à®± à®®à¯à®Ÿà®¿à®µà¯à®•à¯ கà¯à®±à®¿à®šà¯à®šà¯Šà®²à¯ இலà¯à®²à¯ˆ."
-#: ../libnm-util/crypto.c:593
+#: ../libnm-core/crypto.c:584 ../libnm-util/crypto.c:600
#, c-format
msgid "Failed to decode certificate."
msgstr "சானà¯à®±à®¿à®¤à®´à¯ˆ கà¯à®±à®¿à®¯à®¾à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
-#: ../libnm-util/crypto_gnutls.c:50
+#: ../libnm-core/crypto_gnutls.c:51 ../libnm-util/crypto_gnutls.c:51
msgid "Failed to initialize the crypto engine."
msgstr "crypto எனà¯à®œà®¿à®©à¯ˆà®¤à¯ தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
-#: ../libnm-util/crypto_gnutls.c:92
-#, c-format
-msgid "Failed to initialize the MD5 engine: %s / %s."
-msgstr "MD5 எனà¯à®œà®¿à®©à¯ˆà®¤à¯ தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s / %s."
-
-#: ../libnm-util/crypto_gnutls.c:155
+#: ../libnm-core/crypto_gnutls.c:101 ../libnm-util/crypto_gnutls.c:154
#, c-format
msgid "Invalid IV length (must be at least %zd)."
msgstr "தவறான IV நீளம௠( %zdவத௠இரà¯à®•à¯à®• வேணà¯à®Ÿà¯à®®à¯)."
-#: ../libnm-util/crypto_gnutls.c:166
+#: ../libnm-core/crypto_gnutls.c:112 ../libnm-util/crypto_gnutls.c:165
#, c-format
msgid "Failed to initialize the decryption cipher context: %s / %s."
msgstr "cipher சேரà¯à®¤à¯à®¤à¯ மறைகà¯à®±à®¿à®®à¯à®±à¯ˆ நீகà¯à®•à®¤à¯à®¤à¯ˆ தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:175
+#: ../libnm-core/crypto_gnutls.c:121 ../libnm-util/crypto_gnutls.c:174
#, c-format
msgid "Failed to set symmetric key for decryption: %s / %s."
msgstr "மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¨à¯€à®•à¯à®•à®¤à¯à®¤à®¿à®±à¯à®•à®¾à®© ஒதà¯à®¤ விசையை அமைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ.: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:184
+#: ../libnm-core/crypto_gnutls.c:130 ../libnm-util/crypto_gnutls.c:183
#, c-format
msgid "Failed to set IV for decryption: %s / %s."
msgstr "IV கான மறைகà¯à®±à®¿à®®à¯à®±à¯ˆ நீகà¯à®•à®¤à¯à®¤à¯ˆ அமைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:193
+#: ../libnm-core/crypto_gnutls.c:139 ../libnm-util/crypto_gnutls.c:192
#, c-format
msgid "Failed to decrypt the private key: %s / %s."
msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ விசைகà¯à®•à¯ மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¯à¯ˆ நீகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:203 ../libnm-util/crypto_nss.c:257
+#: ../libnm-core/crypto_gnutls.c:149 ../libnm-core/crypto_nss.c:205
+#: ../libnm-util/crypto_gnutls.c:202 ../libnm-util/crypto_nss.c:255
#, c-format
msgid "Failed to decrypt the private key: unexpected padding length."
msgstr ""
"தனிபà¯à®ªà®Ÿà¯à®Ÿ விசைகà¯à®•à¯ மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¯à¯ˆ நீகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: எதிரà¯à®ªà®¾à®°à®¾à®¤ பாடிங௠நீளமà¯."
-#: ../libnm-util/crypto_gnutls.c:214 ../libnm-util/crypto_nss.c:268
+#: ../libnm-core/crypto_gnutls.c:160 ../libnm-core/crypto_nss.c:216
+#: ../libnm-util/crypto_gnutls.c:213 ../libnm-util/crypto_nss.c:266
#, c-format
msgid "Failed to decrypt the private key."
msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ விசைகà¯à®•à¯ மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¯à¯ˆ நீகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
-#: ../libnm-util/crypto_gnutls.c:281
+#: ../libnm-core/crypto_gnutls.c:236 ../libnm-util/crypto_gnutls.c:285
#, c-format
msgid "Failed to initialize the encryption cipher context: %s / %s."
msgstr "cipher சேரà¯à®¤à¯à®¤à¯ மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®•à®¤à¯à®¤à¯ˆ தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:290
+#: ../libnm-core/crypto_gnutls.c:245 ../libnm-util/crypto_gnutls.c:294
#, c-format
msgid "Failed to set symmetric key for encryption: %s / %s."
msgstr "மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®•à®¤à¯à®¤à®¿à®±à¯à®•à®¾à®© ஒதà¯à®¤ விசையை அமைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ.: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:300
+#: ../libnm-core/crypto_gnutls.c:255 ../libnm-util/crypto_gnutls.c:304
#, c-format
msgid "Failed to set IV for encryption: %s / %s."
msgstr "IV கான மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®•à®¤à¯à®¤à¯ˆ அமைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:309
+#: ../libnm-core/crypto_gnutls.c:264 ../libnm-util/crypto_gnutls.c:313
#, c-format
msgid "Failed to encrypt the data: %s / %s."
msgstr "தரவை மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:349
+#: ../libnm-core/crypto_gnutls.c:307 ../libnm-util/crypto_gnutls.c:353
#, c-format
msgid "Error initializing certificate data: %s"
msgstr "சானà¯à®±à®¿à®¤à®´à¯ தரவை தà¯à®µà®•à¯à®•à¯à®µà®¤à®¿à®²à¯ பிழை: %s"
-#: ../libnm-util/crypto_gnutls.c:371
+#: ../libnm-core/crypto_gnutls.c:329 ../libnm-util/crypto_gnutls.c:375
#, c-format
msgid "Couldn't decode certificate: %s"
msgstr "சானà¯à®±à®¿à®¤à®´à¯ˆ கà¯à®±à®¿à®¯à®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
-#: ../libnm-util/crypto_gnutls.c:395
+#: ../libnm-core/crypto_gnutls.c:357 ../libnm-util/crypto_gnutls.c:399
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %s"
msgstr "PKCS#12 கà¯à®±à®¿à®¯à®¾à®³à®°à¯ˆ தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
-#: ../libnm-util/crypto_gnutls.c:408
+#: ../libnm-core/crypto_gnutls.c:370 ../libnm-util/crypto_gnutls.c:412
#, c-format
msgid "Couldn't decode PKCS#12 file: %s"
msgstr "PKCS#12 கோபà¯à®ªà¯ˆ கà¯à®±à®¿à®¯à®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
-#: ../libnm-util/crypto_gnutls.c:420
+#: ../libnm-core/crypto_gnutls.c:382 ../libnm-util/crypto_gnutls.c:424
#, c-format
msgid "Couldn't verify PKCS#12 file: %s"
msgstr "PKCS#12 கோபà¯à®ªà¯ˆ சரிபாரà¯à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
-#: ../libnm-util/crypto_gnutls.c:448
+#: ../libnm-core/crypto_gnutls.c:414 ../libnm-util/crypto_gnutls.c:452
#, c-format
msgid "Couldn't initialize PKCS#8 decoder: %s"
msgstr "PKCS#8 டீகோடரைத௠தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
-#: ../libnm-util/crypto_gnutls.c:471
+#: ../libnm-core/crypto_gnutls.c:437 ../libnm-util/crypto_gnutls.c:475
#, c-format
msgid "Couldn't decode PKCS#8 file: %s"
msgstr "PKCS#8 கோபà¯à®ªà¯ˆ கà¯à®±à®¿à®¨à¯€à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
-#: ../libnm-util/crypto_nss.c:56
+#: ../libnm-core/crypto_nss.c:57 ../libnm-util/crypto_nss.c:56
#, c-format
msgid "Failed to initialize the crypto engine: %d."
msgstr "crypto எனà¯à®œà®¿à®©à¯ˆà®¤à¯ தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %d."
-#: ../libnm-util/crypto_nss.c:107
-#, c-format
-msgid "Failed to initialize the MD5 context: %d."
-msgstr "MD5 உரையை தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %d."
-
-#: ../libnm-util/crypto_nss.c:175
+#: ../libnm-core/crypto_nss.c:123 ../libnm-util/crypto_nss.c:173
#, c-format
msgid "Invalid IV length (must be at least %d)."
msgstr "தவறான IV நீளம௠(%dயாவத௠இரà¯à®•à¯à®• வேணà¯à®Ÿà¯à®®à¯)."
-#: ../libnm-util/crypto_nss.c:186
+#: ../libnm-core/crypto_nss.c:134 ../libnm-util/crypto_nss.c:184
#, c-format
msgid "Failed to initialize the decryption cipher slot."
msgstr "மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¯à¯ˆ நீகà¯à®• cipher வரிசையை தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
-#: ../libnm-util/crypto_nss.c:196
+#: ../libnm-core/crypto_nss.c:144 ../libnm-util/crypto_nss.c:194
#, c-format
msgid "Failed to set symmetric key for decryption."
msgstr "மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¨à¯€à®•à¯à®•à®¤à¯à®¤à®¿à®±à¯à®•à®¾à®© ஒதà¯à®¤ விசையை அமைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
-#: ../libnm-util/crypto_nss.c:206
+#: ../libnm-core/crypto_nss.c:154 ../libnm-util/crypto_nss.c:204
#, c-format
msgid "Failed to set IV for decryption."
msgstr "IV கான மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¯à¯ˆ அமைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
-#: ../libnm-util/crypto_nss.c:214
+#: ../libnm-core/crypto_nss.c:162 ../libnm-util/crypto_nss.c:212
#, c-format
msgid "Failed to initialize the decryption context."
msgstr "மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¨à¯€à®•à¯à®•à®¤à¯à®¤à¯ˆ சேரà¯à®¤à¯à®¤à¯ தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
-#: ../libnm-util/crypto_nss.c:227
+#: ../libnm-core/crypto_nss.c:175 ../libnm-util/crypto_nss.c:225
#, c-format
msgid "Failed to decrypt the private key: %d."
msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ விசையின௠மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¯à¯ˆ நீகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %d."
-#: ../libnm-util/crypto_nss.c:235
+#: ../libnm-core/crypto_nss.c:183 ../libnm-util/crypto_nss.c:233
#, c-format
msgid "Failed to decrypt the private key: decrypted data too large."
msgstr ""
@@ -5481,463 +7082,1019 @@ msgstr ""
"தரவ௠மிக "
"நீளமானதà¯."
-#: ../libnm-util/crypto_nss.c:246
+#: ../libnm-core/crypto_nss.c:194 ../libnm-util/crypto_nss.c:244
#, c-format
msgid "Failed to finalize decryption of the private key: %d."
msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ விசையின௠மறைகà¯à®±à®¿à®®à¯à®±à¯ˆà®¯à¯ˆ à®®à¯à®Ÿà®¿ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %d."
-#: ../libnm-util/crypto_nss.c:348
+#: ../libnm-core/crypto_nss.c:302 ../libnm-util/crypto_nss.c:348
#, c-format
msgid "Failed to initialize the encryption cipher slot."
msgstr "மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®• cipher வரிசையை தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
-#: ../libnm-util/crypto_nss.c:356
+#: ../libnm-core/crypto_nss.c:310 ../libnm-util/crypto_nss.c:356
#, c-format
msgid "Failed to set symmetric key for encryption."
msgstr "மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®•à®¤à¯à®¤à®¿à®±à¯à®•à®¾à®© ஒதà¯à®¤ விசையை அமைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
-#: ../libnm-util/crypto_nss.c:364
+#: ../libnm-core/crypto_nss.c:318 ../libnm-util/crypto_nss.c:364
#, c-format
msgid "Failed to set IV for encryption."
msgstr "IV கான மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®•à®¤à¯à®¤à¯ˆ அமைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
-#: ../libnm-util/crypto_nss.c:372
+#: ../libnm-core/crypto_nss.c:326 ../libnm-util/crypto_nss.c:372
#, c-format
msgid "Failed to initialize the encryption context."
msgstr "மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®• சேரà¯à®¤à¯à®¤à¯ தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
-#: ../libnm-util/crypto_nss.c:380
+#: ../libnm-core/crypto_nss.c:334 ../libnm-util/crypto_nss.c:380
#, c-format
msgid "Failed to encrypt: %d."
msgstr "மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %d."
-#: ../libnm-util/crypto_nss.c:388
+#: ../libnm-core/crypto_nss.c:342 ../libnm-util/crypto_nss.c:388
#, c-format
msgid "Unexpected amount of data after encrypting."
msgstr "மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®•à®¤à¯à®¤à®¿à®±à¯à®•à¯à®ªà¯ பின௠எதிரà¯à®ªà®¾à®°à®¾à®¤ தரவின௠எணà¯à®£à®¿à®•à¯à®•à¯ˆ."
-#: ../libnm-util/crypto_nss.c:431
+#: ../libnm-core/crypto_nss.c:385 ../libnm-util/crypto_nss.c:428
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "சானà¯à®±à®¿à®¤à®´à¯ˆ கà¯à®±à®¿à®¯à®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %d"
-#: ../libnm-util/crypto_nss.c:466
+#: ../libnm-core/crypto_nss.c:423
#, c-format
-msgid "Couldn't convert password to UCS2: %d"
-msgstr "கடவà¯à®šà¯à®šà¯Šà®²à¯à®²à¯ˆ UCS2கà¯à®•à¯ மாறà¯à®± à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %d"
+msgid "Password must be UTF-8"
+msgstr "கடவà¯à®šà¯à®šà¯Šà®²à¯à®²à®¾à®©à®¤à¯ UTF-8 கà¯à®±à®¿à®¯à¯€à®Ÿà®¾à®•à¯à®•à®¤à¯à®¤à¯ˆà®•à¯ கொணà¯à®Ÿà®¿à®°à¯à®•à¯à®• வேணà¯à®Ÿà¯à®®à¯"
-#: ../libnm-util/crypto_nss.c:494
+#: ../libnm-core/crypto_nss.c:453 ../libnm-util/crypto_nss.c:491
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %d"
msgstr "PKCS#12 கà¯à®±à®¿à®¯à®¾à®•à¯à®•à®¤à¯à®¤à¯ˆ தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %d"
-#: ../libnm-util/crypto_nss.c:503
+#: ../libnm-core/crypto_nss.c:462 ../libnm-util/crypto_nss.c:500
#, c-format
msgid "Couldn't decode PKCS#12 file: %d"
msgstr "PKCS#12 கோபà¯à®ªà¯ˆ கà¯à®±à®¿à®¯à®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %d"
-#: ../libnm-util/crypto_nss.c:512
+#: ../libnm-core/crypto_nss.c:471 ../libnm-util/crypto_nss.c:509
#, c-format
msgid "Couldn't verify PKCS#12 file: %d"
msgstr "PKCS#12 கோபà¯à®ªà¯ˆ சரிபாரà¯à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %d"
-#: ../libnm-util/crypto_nss.c:556
+#: ../libnm-core/crypto_nss.c:522 ../libnm-util/crypto_nss.c:553
msgid "Could not generate random data."
msgstr "தறà¯à®šà¯†à®¯à®²à®¾à®© தரவை உரà¯à®µà®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
-#: ../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-core/nm-connection.c:225
+#| msgid "property type should be set to '%s'"
+msgid "wrong type; should be a list of strings."
+msgstr "தவறான வகை; வகையானத௠சரஙà¯à®•à®³à®¿à®©à¯ படà¯à®Ÿà®¿à®¯à®²à®¾à®•à®µà¯‡ இரà¯à®•à¯à®• வேணà¯à®Ÿà¯à®®à¯."
+
+#: ../libnm-core/nm-connection.c:280
+#| msgid "Error: unknown setting '%s'\n"
+msgid "unknown setting name"
+msgstr "தெரியாத அமைவà¯à®ªà¯ பெயரà¯"
+
+#: ../libnm-core/nm-connection.c:781
+msgid "setting not found"
+msgstr "அமைவ௠இலà¯à®²à¯ˆ"
+
+#: ../libnm-core/nm-connection.c:845
+#| msgid "Error: '%s' setting not present in the connection\n"
+msgid "setting not allowed in slave connection"
+msgstr "அடிமை இணைபà¯à®ªà®¿à®²à¯ அமைவà¯à®•à¯à®•à¯ அனà¯à®®à®¤à®¿ இலà¯à®²à¯ˆ"
+
+#: ../libnm-core/nm-connection.c:856
+#| msgid "'%s' setting is required for the connection when the property is set"
+msgid "setting is required for non-slave connections"
+msgstr "அடிமையலà¯à®²à®¾à®¤ இணைபà¯à®ªà¯à®•à®³à¯à®•à¯à®•à¯ அமைவ௠தேவை"
+
+#: ../libnm-core/nm-connection.c:922
+msgid "Unexpected failure to verify the connection"
+msgstr "இணைபà¯à®ªà¯ˆ சரிபாரà¯à®ªà¯à®ªà®¤à®¿à®²à¯ எதிரà¯à®ªà®¾à®°à®¾à®¤ தோலà¯à®µà®¿"
+
+#: ../libnm-core/nm-connection.c:954
+msgid "Unexpected failure to normalize the connection"
+msgstr "இணைபà¯à®ªà¯ˆ இயலà¯à®ªà®®à¯ˆà®ªà¯à®ªà®¤à®¿à®²à¯ எதிரà¯à®ªà®¾à®°à®¾à®¤ தோலà¯à®µà®¿"
+
+#: ../libnm-core/nm-connection.c:1418 ../libnm-core/nm-setting-8021x.c:2273
+#: ../libnm-core/nm-setting-8021x.c:2290 ../libnm-core/nm-setting-8021x.c:2321
+#: ../libnm-core/nm-setting-8021x.c:2338 ../libnm-core/nm-setting-8021x.c:2380
+#: ../libnm-core/nm-setting-8021x.c:2392 ../libnm-core/nm-setting-8021x.c:2410
+#: ../libnm-core/nm-setting-8021x.c:2422 ../libnm-core/nm-setting-8021x.c:2446
+#: ../libnm-core/nm-setting-8021x.c:2628 ../libnm-core/nm-setting-adsl.c:190
+#: ../libnm-core/nm-setting-bluetooth.c:121
+#: ../libnm-core/nm-setting-bluetooth.c:139
+#: ../libnm-core/nm-setting-cdma.c:142
+#: ../libnm-core/nm-setting-connection.c:768
+#: ../libnm-core/nm-setting-connection.c:807
+#: ../libnm-core/nm-setting-connection.c:908
+#: ../libnm-core/nm-setting-ip-config.c:1837
+#: ../libnm-core/nm-setting-olpc-mesh.c:113
+#: ../libnm-core/nm-setting-pppoe.c:143 ../libnm-core/nm-setting-vpn.c:400
+#: ../libnm-core/nm-setting-wimax.c:117
+#: ../libnm-core/nm-setting-wireless-security.c:862
+#: ../libnm-core/nm-setting-wireless.c:694 ../libnm-util/nm-setting.c:1366
+#: ../libnm-util/nm-setting.c:1385 ../libnm-util/nm-setting.c:1403
+#: ../libnm-util/nm-setting-8021x.c:2284 ../libnm-util/nm-setting-8021x.c:2301
+#: ../libnm-util/nm-setting-8021x.c:2342 ../libnm-util/nm-setting-8021x.c:2359
+#: ../libnm-util/nm-setting-8021x.c:2411 ../libnm-util/nm-setting-8021x.c:2423
+#: ../libnm-util/nm-setting-8021x.c:2441 ../libnm-util/nm-setting-8021x.c:2453
+#: ../libnm-util/nm-setting-8021x.c:2477 ../libnm-util/nm-setting-8021x.c:2655
+#: ../libnm-util/nm-setting-adsl.c:210
+#: ../libnm-util/nm-setting-bluetooth.c:142
+#: ../libnm-util/nm-setting-bluetooth.c:160
#: ../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
+#: ../libnm-util/nm-setting-connection.c:769
+#: ../libnm-util/nm-setting-connection.c:785
+#: ../libnm-util/nm-setting-connection.c:846
+#: ../libnm-util/nm-setting-ip4-config.c:852
+#: ../libnm-util/nm-setting-ip6-config.c:833
+#: ../libnm-util/nm-setting-ip6-config.c:897
+#: ../libnm-util/nm-setting-olpc-mesh.c:124
+#: ../libnm-util/nm-setting-pppoe.c:164 ../libnm-util/nm-setting-vpn.c:424
+#: ../libnm-util/nm-setting-wimax.c:139
+#: ../libnm-util/nm-setting-wireless-security.c:892
+#: ../libnm-util/nm-setting-wireless.c:752
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-core/nm-setting-8021x.c:579 ../libnm-util/nm-setting-8021x.c:598
+msgid "CA certificate must be in X.509 format"
+msgstr "CA சானà¯à®±à®¿à®¤à®´à¯ X.509 வடிவமைபà¯à®ªà®¿à®²à¯‡à®¯à¯‡ இரà¯à®•à¯à®• வேணà¯à®Ÿà¯à®®à¯"
+
+#: ../libnm-core/nm-setting-8021x.c:894 ../libnm-core/nm-setting-8021x.c:1158
+#: ../libnm-core/nm-setting-8021x.c:1478 ../libnm-util/nm-setting-8021x.c:916
+#: ../libnm-util/nm-setting-8021x.c:1179 ../libnm-util/nm-setting-8021x.c:1502
+msgid "invalid certificate format"
+msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ சானà¯à®±à®¿à®¤à®´à¯ வடிவமைபà¯à®ªà¯"
+
+#: ../libnm-core/nm-setting-8021x.c:1761 ../libnm-util/nm-setting-8021x.c:1771
+msgid "invalid private key"
+msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ தனிபà¯à®ªà®Ÿà¯à®Ÿ விசை"
+
+#: ../libnm-core/nm-setting-8021x.c:2071 ../libnm-util/nm-setting-8021x.c:2082
+msgid "invalid phase2 private key"
+msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ phase2 தனிபà¯à®ªà®Ÿà¯à®Ÿ விசை"
+
+#: ../libnm-core/nm-setting-8021x.c:2280 ../libnm-core/nm-setting-8021x.c:2297
+#: ../libnm-core/nm-setting-8021x.c:2328 ../libnm-core/nm-setting-8021x.c:2345
+#: ../libnm-core/nm-setting-8021x.c:2386 ../libnm-core/nm-setting-8021x.c:2398
+#: ../libnm-core/nm-setting-8021x.c:2416 ../libnm-core/nm-setting-8021x.c:2428
+#: ../libnm-core/nm-setting-8021x.c:2453 ../libnm-core/nm-setting-adsl.c:197
+#: ../libnm-core/nm-setting-adsl.c:206 ../libnm-core/nm-setting-cdma.c:158
+#: ../libnm-core/nm-setting-cdma.c:167
+#: ../libnm-core/nm-setting-connection.c:775
+#: ../libnm-core/nm-setting-connection.c:818
+#: ../libnm-core/nm-setting-gsm.c:226 ../libnm-core/nm-setting-gsm.c:283
+#: ../libnm-core/nm-setting-gsm.c:292
+#: ../libnm-core/nm-setting-ip-config.c:1844
+#: ../libnm-core/nm-setting-ip4-config.c:178
+#: ../libnm-core/nm-setting-pppoe.c:150 ../libnm-core/nm-setting-pppoe.c:159
+#: ../libnm-core/nm-setting-vpn.c:409 ../libnm-core/nm-setting-vpn.c:419
+#: ../libnm-core/nm-setting-wimax.c:126
+#: ../libnm-core/nm-setting-wireless-security.c:892
+#: ../libnm-core/nm-setting-wireless-security.c:900
+#: ../libnm-core/nm-setting-wireless-security.c:924
+#: ../libnm-util/nm-setting-8021x.c:2291 ../libnm-util/nm-setting-8021x.c:2308
+#: ../libnm-util/nm-setting-8021x.c:2349 ../libnm-util/nm-setting-8021x.c:2366
+#: ../libnm-util/nm-setting-8021x.c:2417 ../libnm-util/nm-setting-8021x.c:2429
+#: ../libnm-util/nm-setting-8021x.c:2447 ../libnm-util/nm-setting-8021x.c:2459
+#: ../libnm-util/nm-setting-8021x.c:2484 ../libnm-util/nm-setting-adsl.c:217
+#: ../libnm-util/nm-setting-adsl.c:226 ../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
+#: ../libnm-util/nm-setting-connection.c:776
+#: ../libnm-util/nm-setting-connection.c:853
+#: ../libnm-util/nm-setting-gsm.c:283 ../libnm-util/nm-setting-gsm.c:340
+#: ../libnm-util/nm-setting-gsm.c:349
+#: ../libnm-util/nm-setting-ip4-config.c:917
+#: ../libnm-util/nm-setting-ip4-config.c:926
+#: ../libnm-util/nm-setting-pppoe.c:171 ../libnm-util/nm-setting-pppoe.c:180
+#: ../libnm-util/nm-setting-vpn.c:433 ../libnm-util/nm-setting-vpn.c:443
+#: ../libnm-util/nm-setting-wimax.c:148
+#: ../libnm-util/nm-setting-wireless-security.c:922
+#: ../libnm-util/nm-setting-wireless-security.c:930
+#: ../libnm-util/nm-setting-wireless-security.c:954
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
+#: ../libnm-core/nm-setting-8021x.c:2310 ../libnm-core/nm-setting-8021x.c:2358
+#: ../libnm-util/nm-setting-8021x.c:2319 ../libnm-util/nm-setting-8021x.c:2331
+#: ../libnm-util/nm-setting-8021x.c:2377 ../libnm-util/nm-setting-8021x.c:2389
#, 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-core/nm-setting-8021x.c:2603 ../libnm-core/nm-setting-8021x.c:2637
+#: ../libnm-core/nm-setting-bluetooth.c:130
+#: ../libnm-core/nm-setting-infiniband.c:193
+#: ../libnm-core/nm-setting-infiniband.c:208
+#: ../libnm-core/nm-setting-ip4-config.c:169
+#: ../libnm-core/nm-setting-ip6-config.c:166
+#: ../libnm-core/nm-setting-olpc-mesh.c:142
+#: ../libnm-core/nm-setting-wimax.c:135 ../libnm-core/nm-setting-wired.c:621
+#: ../libnm-core/nm-setting-wired.c:631
+#: ../libnm-core/nm-setting-wireless-security.c:943
+#: ../libnm-core/nm-setting-wireless-security.c:952
+#: ../libnm-core/nm-setting-wireless-security.c:960
+#: ../libnm-core/nm-setting-wireless-security.c:968
+#: ../libnm-core/nm-setting-wireless-security.c:976
+#: ../libnm-core/nm-setting-wireless-security.c:985
+#: ../libnm-core/nm-setting-wireless-security.c:994
+#: ../libnm-core/nm-setting-wireless-security.c:1003
+#: ../libnm-core/nm-setting-wireless-security.c:1039
+#: ../libnm-core/nm-setting-wireless-security.c:1049
+#: ../libnm-core/nm-setting-wireless.c:755
+#: ../libnm-core/nm-setting-wireless.c:764
+#: ../libnm-core/nm-setting-wireless.c:773 ../libnm-util/nm-setting.c:1376
+#: ../libnm-util/nm-setting.c:1394 ../libnm-util/nm-setting.c:1413
+#: ../libnm-util/nm-setting-8021x.c:2630 ../libnm-util/nm-setting-8021x.c:2664
+#: ../libnm-util/nm-setting-bluetooth.c:151
+#: ../libnm-util/nm-setting-infiniband.c:206
+#: ../libnm-util/nm-setting-infiniband.c:222
+#: ../libnm-util/nm-setting-ip4-config.c:908
+#: ../libnm-util/nm-setting-ip6-config.c:888
+#: ../libnm-util/nm-setting-olpc-mesh.c:152
+#: ../libnm-util/nm-setting-wimax.c:157 ../libnm-util/nm-setting-wired.c:662
+#: ../libnm-util/nm-setting-wired.c:671
+#: ../libnm-util/nm-setting-wireless-security.c:973
#: ../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
+#: ../libnm-util/nm-setting-wireless-security.c:990
+#: ../libnm-util/nm-setting-wireless-security.c:998
+#: ../libnm-util/nm-setting-wireless-security.c:1006
+#: ../libnm-util/nm-setting-wireless-security.c:1015
+#: ../libnm-util/nm-setting-wireless-security.c:1024
+#: ../libnm-util/nm-setting-wireless-security.c:1033
+#: ../libnm-util/nm-setting-wireless-security.c:1069
+#: ../libnm-util/nm-setting-wireless-security.c:1079
+#: ../libnm-util/nm-setting-wireless.c:812
+#: ../libnm-util/nm-setting-wireless.c:821
+#: ../libnm-util/nm-setting-wireless.c:830
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-core/nm-setting-8021x.c:2662 ../libnm-core/nm-setting-8021x.c:2672
+#: ../libnm-core/nm-setting-8021x.c:2682 ../libnm-core/nm-setting-8021x.c:2692
+#: ../libnm-core/nm-setting-8021x.c:2702 ../libnm-core/nm-setting-adsl.c:218
+#: ../libnm-core/nm-setting-adsl.c:230
+#: ../libnm-core/nm-setting-bluetooth.c:147
+#: ../libnm-core/nm-setting-wireless-security.c:871
+#: ../libnm-util/nm-setting-8021x.c:2689 ../libnm-util/nm-setting-8021x.c:2699
+#: ../libnm-util/nm-setting-8021x.c:2709 ../libnm-util/nm-setting-8021x.c:2719
+#: ../libnm-util/nm-setting-8021x.c:2729 ../libnm-util/nm-setting-adsl.c:238
#: ../libnm-util/nm-setting-adsl.c:250
-#: ../libnm-util/nm-setting-bluetooth.c:170
-#: ../libnm-util/nm-setting-wireless-security.c:804
+#: ../libnm-util/nm-setting-bluetooth.c:168
+#: ../libnm-util/nm-setting-wireless-security.c:901
#, c-format
msgid "'%s' is not a valid value for the property"
msgstr "பணà¯à®ªà¯à®•à¯à®•à¯ '%s' ஆனத௠செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© மதிபà¯à®ªà®²à¯à®²"
-#: ../libnm-util/nm-setting-bluetooth.c:188
+#: ../libnm-core/nm-setting-bluetooth.c:169
#, c-format
-msgid "requires '%s' or '%s' setting"
-msgstr "'%s' அலà¯à®²à®¤à¯ '%s' அமைவ௠தேவைபà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯"
+#| msgid "requires '%s' or '%s' setting"
+msgid "'%s' connection requires '%s' or '%s' setting"
+msgstr "'%s' இணைபà¯à®ªà¯à®•à¯à®•à¯ '%s' அலà¯à®²à®¤à¯ '%s' அமைவ௠தேவைபà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯"
-#: ../libnm-util/nm-setting-bond.c:518
+#: ../libnm-core/nm-setting-bond.c:462 ../libnm-util/nm-setting-bond.c:503
#, c-format
msgid "invalid option '%s' or its value '%s'"
msgstr "'%s' விரà¯à®ªà¯à®ªà®®à¯ அலà¯à®²à®¤à¯ அதன௠மதிபà¯à®ªà¯ '%s' செலà¯à®²à®¾à®¤à®¤à¯"
-#: ../libnm-util/nm-setting-bond.c:537
+#: ../libnm-core/nm-setting-bond.c:481 ../libnm-util/nm-setting-bond.c:522
#, c-format
msgid "only one of '%s' and '%s' can be set"
msgstr "'%s' மறà¯à®±à¯à®®à¯ '%s' இரணà¯à®Ÿà®¿à®²à¯ ஒனà¯à®±à¯ˆ மடà¯à®Ÿà¯à®®à¯‡ அமைகà¯à®•à®²à®¾à®®à¯"
-#: ../libnm-util/nm-setting-bond.c:548
+#: ../libnm-core/nm-setting-bond.c:492 ../libnm-util/nm-setting-bond.c:533
#, c-format
msgid "mandatory option '%s' is missing"
msgstr "அவசியமான விரà¯à®ªà¯à®ªà®®à¯ '%s' விடà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯"
-#: ../libnm-util/nm-setting-bond.c:557
+#: ../libnm-core/nm-setting-bond.c:501 ../libnm-util/nm-setting-bond.c:542
#, c-format
msgid "'%s' is not a valid value for '%s'"
msgstr "'%s' கà¯à®•à¯ '%s' ஒர௠செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© மதிபà¯à®ªà®²à¯à®²"
-#: ../libnm-util/nm-setting-bond.c:570
+#: ../libnm-core/nm-setting-bond.c:514 ../libnm-util/nm-setting-bond.c:555
#, c-format
msgid "'%s=%s' is incompatible with '%s > 0'"
msgstr "'%s=%s' ஆனத௠'%s > 0' உடன௠இணகà¯à®•à®®à®¾à®©à®¤à®²à¯à®²"
-#: ../libnm-util/nm-setting-bond.c:583
+#: ../libnm-core/nm-setting-bond.c:527 ../libnm-util/nm-setting-bond.c:568
#, 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
+#: ../libnm-core/nm-setting-bond.c:537 ../libnm-util/nm-setting-bond.c:578
#, 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
+#: ../libnm-core/nm-setting-bond.c:550 ../libnm-util/nm-setting-bond.c:591
#, 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
+#: ../libnm-core/nm-setting-bond.c:563 ../libnm-core/nm-setting-bond.c:572
+#: ../libnm-core/nm-setting-bond.c:592 ../libnm-core/nm-setting-bond.c:628
+#: ../libnm-util/nm-setting-bond.c:604 ../libnm-util/nm-setting-bond.c:613
+#: ../libnm-util/nm-setting-bond.c:633 ../libnm-util/nm-setting-bond.c:669
#, 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
+#: ../libnm-core/nm-setting-bond.c:603 ../libnm-util/nm-setting-bond.c:644
#, c-format
msgid "'%s' option is empty"
msgstr "'%s' விரà¯à®ªà¯à®ªà®®à¯ காலியாக உளà¯à®³à®¤à¯"
-#: ../libnm-util/nm-setting-bond.c:671
+#: ../libnm-core/nm-setting-bond.c:615 ../libnm-util/nm-setting-bond.c:656
#, c-format
msgid "'%s' is not a valid IPv4 address for '%s' option"
msgstr "'%s' ஆனத௠'%s' விரà¯à®ªà¯à®ªà®¤à¯à®¤à®¿à®±à¯à®•à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© IPv4 à®®à¯à®•à®µà®°à®¿à®¯à®²à¯à®²"
+#: ../libnm-core/nm-setting-bond.c:642 ../libnm-util/nm-setting-bond.c:683
+#, c-format
+#| msgid "'%s' option is only valid for '%s=%s'"
+msgid "'%s' option is only valid with mode '%s'"
+msgstr "'%s' விரà¯à®ªà¯à®ªà®®à¯ '%s' உடன௠பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®¿à®©à®¾à®²à¯ மடà¯à®Ÿà¯à®®à¯‡ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à¯à®®à¯"
+
+#: ../libnm-core/nm-setting-bridge-port.c:125
+#: ../libnm-core/nm-setting-bridge-port.c:137
#: ../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
+#: ../libnm-core/nm-setting-bridge-port.c:155
+#: ../libnm-core/nm-setting-team-port.c:98
+#, c-format
+#| msgid "Missing '%s' setting"
+msgid "missing setting"
+msgstr "அமைவ௠இலà¯à®²à¯ˆ"
+
+#: ../libnm-core/nm-setting-bridge-port.c:166
+#: ../libnm-core/nm-setting-team-port.c:109
+#, c-format
+msgid ""
+"A connection with a '%s' setting must have the slave-type set to '%s'. "
+"Instead it is '%s'"
+msgstr ""
+"'%s' அமைவà¯à®Ÿà®©à®¾à®© ஒர௠இணைபà¯à®ªà¯à®•à¯à®•à¯ ஸà¯à®²à¯‡à®µà¯-வகை '%s' எனà¯à®±à¯ இரà¯à®•à¯à®• வேணà¯à®Ÿà¯à®®à¯. ஆனால௠'%"
+"s' என "
+"உளà¯à®³à®¤à¯"
+
+#: ../libnm-core/nm-setting-bridge.c:206 ../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-cdma.c:170
+#: ../libnm-core/nm-setting-bridge.c:223 ../libnm-core/nm-setting-wired.c:595
+#: ../libnm-core/nm-setting-wired.c:655 ../libnm-util/nm-setting-bridge.c:287
+#: ../libnm-util/nm-setting-wired.c:637 ../libnm-util/nm-setting-wired.c:695
+msgid "is not a valid MAC address"
+msgstr "எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© MAC à®®à¯à®•à®µà®°à®¿à®¯à®²à¯à®²"
+
+#: ../libnm-core/nm-setting-cdma.c:149 ../libnm-util/nm-setting-cdma.c:170
msgid "property is empty'"
msgstr "பணà¯à®ªà¯ காலியாக உளà¯à®³à®¤à¯'"
-#: ../libnm-util/nm-setting-connection.c:734
+#: ../libnm-core/nm-setting-connection.c:747
#, c-format
-msgid "'%s' doesn't match the virtual interface name '%s'"
-msgstr "'%s' ஆனத௠மெயà¯à®¨à®¿à®•à®°à¯ இடைமà¯à®•à®ªà¯ பெயர௠'%s' கà¯à®•à¯à®ªà¯ பொரà¯à®¨à¯à®¤à®µà®¿à®²à¯à®²à¯ˆ"
+#| msgid "'%s' setting is required for the connection when the property is set"
+msgid "setting required for connection of type '%s'"
+msgstr "'%s' வகை இணைபà¯à®ªà¯à®•à¯à®•à¯ அமைவ௠தேவை"
-#: ../libnm-util/nm-setting-connection.c:780
+#: ../libnm-core/nm-setting-connection.c:828
#, c-format
-msgid "requires presence of '%s' setting in the connection"
-msgstr "இணைபà¯à®ªà®¿à®²à¯ '%s' அமைபà¯à®ªà¯ இரà¯à®•à¯à®• வேணà¯à®Ÿà®¿à®¯à®¤à¯ அவசியமà¯"
+msgid "connection type '%s' is not valid"
+msgstr "இணைபà¯à®ªà¯ வகை '%s' செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®²à¯à®²"
+
+#: ../libnm-core/nm-setting-connection.c:863
+#: ../libnm-util/nm-setting-connection.c:878
+#, c-format
+msgid "Unknown slave type '%s'"
+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-core/nm-setting-connection.c:873
+#, c-format
+#| msgid "Slave connections need a valid '"
+msgid "Slave connections need a valid '%s' property"
+msgstr "அடிமை இணைபà¯à®ªà¯à®•à®³à¯à®•à¯à®•à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© '%s' பணà¯à®ªà¯ தேவை"
-#: ../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-core/nm-setting-connection.c:894
+#, c-format
+#| msgid "Cannot set '"
+msgid "Cannot set '%s' without '%s'"
+msgstr "'%s' இலà¯à®²à®¾à®®à®²à¯ '%s' ஠அமைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯"
-#: ../libnm-util/nm-setting-dcb.c:595
-#| msgid "flags are invalid"
+#: ../libnm-core/nm-setting-connection.c:917
+#, c-format
+msgid "property type should be set to '%s'"
+msgstr "பணà¯à®ªà¯ வகை '%s' என அமைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¿à®°à¯à®•à¯à®• வேணà¯à®Ÿà¯à®®à¯"
+
+#: ../libnm-core/nm-setting-connection.c:932
+#, c-format
+msgid "slave-type '%s' requires a '%s' setting in the connection"
+msgstr "ஸà¯à®²à¯‡à®µà¯ வகை '%s' கà¯à®•à¯ இணைபà¯à®ªà®¿à®²à¯ '%s' அமைபà¯à®ªà¯ அவசியமà¯"
+
+#: ../libnm-core/nm-setting-connection.c:942
+#, c-format
+msgid ""
+"Detect a slave connection with '%s' set and a port type '%s'. '%s' should be "
+"set to '%s'"
+msgstr ""
+"'%s' அமைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³ மறà¯à®±à¯à®®à¯ '%s' வகை தà¯à®±à¯ˆ வகையைக௠கொணà¯à®Ÿà¯à®³à¯à®³ அடிமை இணைபà¯à®ªà¯ˆà®•à¯ "
+"கணà¯à®Ÿà®±à®¿à®¯à®µà¯à®®à¯. '%s' ஆனத௠'%s' கà¯à®•à¯ அமைகà¯à®•à®ªà¯à®ªà®Ÿ வேணà¯à®Ÿà¯à®®à¯."
+
+#: ../libnm-core/nm-setting-dcb.c:523 ../libnm-util/nm-setting-dcb.c:595
msgid "flags invalid"
msgstr "கொடிகள௠செலà¯à®²à®¾à®¤à®¤à¯"
-#: ../libnm-util/nm-setting-dcb.c:604
-#| msgid "flags are invalid"
+#: ../libnm-core/nm-setting-dcb.c:532 ../libnm-util/nm-setting-dcb.c:604
msgid "flags invalid - disabled"
msgstr "கொடிகள௠செலà¯à®²à®¾à®¤à®¤à¯ - à®®à¯à®Ÿà®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯"
+#: ../libnm-core/nm-setting-dcb.c:558 ../libnm-core/nm-setting-dcb.c:607
#: ../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"
+#: ../libnm-core/nm-setting-dcb.c:567 ../libnm-util/nm-setting-dcb.c:639
msgid "element invalid"
msgstr "கூற௠செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®²à¯à®²"
-#: ../libnm-util/nm-setting-dcb.c:654
+#: ../libnm-core/nm-setting-dcb.c:582 ../libnm-util/nm-setting-dcb.c:654
msgid "sum not 100%"
msgstr "கூடà¯à®¤à®²à¯ 100% அலà¯à®²"
+#: ../libnm-core/nm-setting-dcb.c:616 ../libnm-core/nm-setting-dcb.c:648
#: ../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"
+#: ../libnm-core/nm-setting-dcb.c:638 ../libnm-util/nm-setting-dcb.c:710
msgid "property missing"
msgstr "பணà¯à®ªà¯ விடà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯"
-#: ../libnm-util/nm-setting-gsm.c:297
+#: ../libnm-core/nm-setting-gsm.c:239 ../libnm-util/nm-setting-gsm.c:296
#, c-format
msgid "property value '%s' is empty or too long (>64)"
msgstr "பணà¯à®ªà¯ மதிபà¯à®ªà¯ '%s' காலியாக உளà¯à®³à®¤à¯ அலà¯à®²à®¤à¯ மிக நீளமாக உளà¯à®³à®¤à¯ (>64)"
-#: ../libnm-util/nm-setting-gsm.c:329
+#: ../libnm-core/nm-setting-gsm.c:271 ../libnm-util/nm-setting-gsm.c:328
#, c-format
msgid "'%s' contains invalid char(s) (use [A-Za-z._-])"
msgstr ""
"'%s' இல௠செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ எழà¯à®¤à¯à®¤à¯à®•à®³à¯ உளà¯à®³à®© ([A-Za-z._-] à®à®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯)"
-#: ../libnm-util/nm-setting-gsm.c:364
+#: ../libnm-core/nm-setting-gsm.c:306 ../libnm-util/nm-setting-gsm.c:363
#, 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"
+#: ../libnm-core/nm-setting-infiniband.c:218
+#: ../libnm-util/nm-setting-infiniband.c:232
msgid "not a valid interface name"
msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© இடைமà¯à®• பெயர௠இலà¯à®²à¯ˆ"
-#: ../libnm-util/nm-setting-infiniband.c:236
+#: ../libnm-core/nm-setting-infiniband.c:226
+#: ../libnm-util/nm-setting-infiniband.c:240
msgid "Must specify a P_Key if specifying parent"
msgstr "தாயைக௠கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà¯à®Ÿà®¾à®²à¯, ஒர௠P_Key à®à®•à¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿ வேணà¯à®Ÿà¯à®®à¯"
-#: ../libnm-util/nm-setting-infiniband.c:246
+#: ../libnm-core/nm-setting-infiniband.c:236
+#: ../libnm-util/nm-setting-infiniband.c:250
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
+#: ../libnm-core/nm-setting-infiniband.c:272
+#: ../libnm-util/nm-setting-infiniband.c:286
#, c-format
-msgid "this property is not allowed for '%s=%s'"
-msgstr "'%s=%s' கà¯à®•à¯ இநà¯à®¤ பணà¯à®ªà¯ அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà®¾à®¤à¯"
+msgid ""
+"interface name of software infiniband device must be '%s' or unset (instead "
+"it is '%s')"
+msgstr ""
+"மெனà¯à®ªà¯Šà®°à¯à®³à¯ இனà¯à®ƒà®ªà®¿à®©à®¿à®ªà¯‡à®©à¯à®Ÿà¯ சாதனதà¯à®¤à®¿à®©à¯ இடைமà¯à®•à®ªà¯ பெயர௠'%s' எனà¯à®±à¯ இரà¯à®•à¯à®• "
+"வேணà¯à®Ÿà¯à®®à¯ அலà¯à®²à®¤à¯ "
+"அமைகà¯à®•à®ªà¯à®ªà®Ÿà®¾à®¤à®¿à®°à¯à®•à¯à®• வேணà¯à®Ÿà¯à®®à¯ (ஆனால௠'%s' எனà¯à®±à¯ உளà¯à®³à®¤à¯)"
-#: ../libnm-util/nm-setting-ip4-config.c:789
+#: ../libnm-core/nm-setting-infiniband.c:287
#, c-format
-msgid "%d. IPv4 address is invalid"
-msgstr "%d. IPv4 à®®à¯à®•à®µà®°à®¿ செலà¯à®²à®¾à®¤à®¤à¯"
+msgid "mtu for transport mode '%s' can be at most %d but it is %d"
+msgstr ""
+"போகà¯à®•à¯à®µà®°à®¤à¯à®¤à¯ à®®à¯à®±à¯ˆà®®à¯ˆ '%s' கà¯à®•à®¾à®© mtu அதிகபடà¯à®šà®®à¯ %d இரà¯à®•à¯à®•à®²à®¾à®®à¯, ஆனால௠%d உளà¯à®³à®¤à¯"
-#: ../libnm-util/nm-setting-ip4-config.c:799
+#: ../libnm-core/nm-setting-ip-config.c:79
#, c-format
-msgid "%d. IPv4 address has invalid prefix"
-msgstr "%d. IPv4 à®®à¯à®•à®µà®°à®¿à®¯à®¿à®²à¯ செலà¯à®²à®¾à®¤ à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà¯ உளà¯à®³à®¤à¯"
+#| msgid "invalid IPv4 address '%s'"
+msgid "Invalid IPv4 address '%s'"
+msgstr "தவறான IPv4 à®®à¯à®•à®µà®°à®¿ '%s'"
-#: ../libnm-util/nm-setting-ip4-config.c:815
+#: ../libnm-core/nm-setting-ip-config.c:79
+#, c-format
+#| msgid "invalid IPv6 address '%s'"
+msgid "Invalid IPv6 address '%s"
+msgstr "தவறான IPv6 à®®à¯à®•à®µà®°à®¿ '%s'"
+
+#: ../libnm-core/nm-setting-ip-config.c:93
+#, c-format
+#| msgid "invalid IPv4 address '%s'"
+msgid "Invalid IPv4 address prefix '%u'"
+msgstr "தவறான IPv4 à®®à¯à®•à®µà®°à®¿ à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà¯ '%u'"
+
+#: ../libnm-core/nm-setting-ip-config.c:93
+#, c-format
+#| msgid "invalid IPv6 address '%s'"
+msgid "Invalid IPv6 address prefix '%u"
+msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ IPv6 à®®à¯à®•à®µà®°à®¿ à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà¯ '%u"
+
+#: ../libnm-core/nm-setting-ip-config.c:111
+#, c-format
+#| msgid "invalid metric '%s'"
+msgid "Invalid routing metric '%s'"
+msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ தடமாகà¯à®•à®²à¯ மெடà¯à®°à®¿à®•à¯ '%s'"
+
+#: ../libnm-core/nm-setting-ip-config.c:1857
+#, c-format
+msgid "%d. DNS server address is invalid"
+msgstr "%d. DNS சேவையக à®®à¯à®•à®µà®°à®¿ செலà¯à®²à®¾à®¤à®¤à¯"
+
+#: ../libnm-core/nm-setting-ip-config.c:1873
+#, c-format
+#| msgid "%d. IPv4 address is invalid"
+msgid "%d. IP address is invalid"
+msgstr "%d. IP à®®à¯à®•à®µà®°à®¿ செலà¯à®²à®¾à®¤à®¤à¯"
+
+#: ../libnm-core/nm-setting-ip-config.c:1885
+#, c-format
+#| msgid "%d. IPv4 address has invalid prefix"
+msgid "%d. IP address has 'label' property with invalid type"
+msgstr "%d. IP à®®à¯à®•à®µà®°à®¿à®¯à®¿à®²à¯ உளà¯à®³ 'label' பணà¯à®ªà®¿à®©à¯ வகை செலà¯à®²à®¾à®¤à®¤à¯"
+
+#: ../libnm-core/nm-setting-ip-config.c:1894
+#, c-format
+#| msgid "%d. IPv4 address has invalid label '%s'"
+msgid "%d. IP address has invalid label '%s'"
+msgstr "%d. IP à®®à¯à®•à®µà®°à®¿à®¯à®¿à®²à¯ '%s' எனà¯à®± செலà¯à®²à®¾à®¤ லேபிள௠உளà¯à®³à®¤à¯"
+
+#: ../libnm-core/nm-setting-ip-config.c:1908
+msgid "gateway cannot be set if there are no addresses configured"
+msgstr "à®®à¯à®•à®µà®°à®¿à®•à®³à¯ அமைவாகà¯à®•à®ªà¯à®ªà®Ÿà®¾à®µà®¿à®Ÿà¯à®Ÿà®¾à®²à¯, நà¯à®´à¯ˆà®µà®¾à®¯à®¿à®²à¯ˆ அமைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯"
+
+#: ../libnm-core/nm-setting-ip-config.c:1917
+#| msgid "property is invalid"
+msgid "gateway is invalid"
+msgstr "நà¯à®´à¯ˆà®µà®¾à®¯à®¿à®²à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤à®¤à¯"
+
+#: ../libnm-core/nm-setting-ip-config.c:1931
+#: ../libnm-util/nm-setting-ip4-config.c:966
#, c-format
msgid "%d. route is invalid"
msgstr "%d. பாதை செலà¯à®²à®¾à®¤à®¤à¯"
-#: ../libnm-util/nm-setting-ip4-config.c:825
+#: ../libnm-core/nm-setting-ip-config.c:1940
#, c-format
-msgid "%d. route has invalid prefix"
-msgstr "%d. பாதையில௠செலà¯à®²à®¾à®¤ à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà¯ உளà¯à®³à®¤à¯"
+msgid "%d. route cannot be a default route"
+msgstr "%d. தடமà¯, à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯à®¤à¯ தடமாக இரà¯à®•à¯à®•à®•à¯à®•à¯‚டாதà¯"
-#: ../libnm-util/nm-setting-ip6-config.c:708
+#: ../libnm-core/nm-setting-ip4-config.c:123
+#: ../libnm-core/nm-setting-ip6-config.c:121
+#: ../libnm-util/nm-setting-ip4-config.c:862
+#: ../libnm-util/nm-setting-ip6-config.c:843
+#, c-format
+msgid "this property cannot be empty for '%s=%s'"
+msgstr "'%s=%s' கà¯à®•à¯ இநà¯à®¤à®ªà¯ பணà¯à®ªà¯ காலியாக இரà¯à®•à¯à®•à®•à¯à®•à¯‚டாதà¯"
+
+#: ../libnm-core/nm-setting-ip4-config.c:135
+#: ../libnm-core/nm-setting-ip4-config.c:145
+#: ../libnm-core/nm-setting-ip4-config.c:157
+#: ../libnm-core/nm-setting-ip6-config.c:134
+#: ../libnm-core/nm-setting-ip6-config.c:144
+#: ../libnm-core/nm-setting-ip6-config.c:154
+#: ../libnm-util/nm-setting-ip4-config.c:874
+#: ../libnm-util/nm-setting-ip4-config.c:884
+#: ../libnm-util/nm-setting-ip4-config.c:896
+#: ../libnm-util/nm-setting-ip6-config.c:856
+#: ../libnm-util/nm-setting-ip6-config.c:866
+#: ../libnm-util/nm-setting-ip6-config.c:876
+#, c-format
+msgid "this property is not allowed for '%s=%s'"
+msgstr "'%s=%s' கà¯à®•à¯ இநà¯à®¤ பணà¯à®ªà¯ அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà®¾à®¤à¯"
+
+#: ../libnm-core/nm-setting-ip6-config.c:133
+#: ../libnm-util/nm-setting-ip6-config.c:855
#, 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
+#: ../libnm-core/nm-setting-olpc-mesh.c:123
+#: ../libnm-core/nm-setting-wireless.c:704
+#: ../libnm-util/nm-setting-olpc-mesh.c:133
+#: ../libnm-util/nm-setting-wireless.c:761
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
+#: ../libnm-core/nm-setting-olpc-mesh.c:132
+#: ../libnm-core/nm-setting-wireless.c:744
+#: ../libnm-util/nm-setting-olpc-mesh.c:142
+#: ../libnm-util/nm-setting-wireless.c:801
#, c-format
msgid "'%d' is not a valid channel"
msgstr "'%d' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© சேனல௠அலà¯à®²"
-#: ../libnm-util/nm-setting-ppp.c:390
+#: ../libnm-core/nm-setting-ppp.c:367 ../libnm-util/nm-setting-ppp.c:389
#, c-format
msgid "'%d' is out of valid range <128-16384>"
msgstr "'%d' ஆனத௠செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© வரமà¯à®ªà¯à®•à¯à®•à¯ வெளியே உளà¯à®³à®¤à¯ <128-16384>"
-#: ../libnm-util/nm-setting-ppp.c:403
+#: ../libnm-core/nm-setting-ppp.c:380 ../libnm-util/nm-setting-ppp.c:402
#, c-format
msgid "setting this property requires non-zero '%s' property"
msgstr "இநà¯à®¤ பணà¯à®ªà¯ˆ அமைகà¯à®• வேணà¯à®Ÿà¯à®®à®¾à®©à®¾à®²à¯ பூசà¯à®šà®¿à®¯à®®à®²à¯à®²à®¾à®¤ '%s' பணà¯à®ªà¯ அவசியமà¯"
-#: ../libnm-util/nm-setting-vlan.c:497
+#: ../libnm-core/nm-setting-vlan.c:516 ../libnm-util/nm-setting-vlan.c:557
#, c-format
msgid "'%s' value doesn't match '%s=%s'"
msgstr "'%s' மதிபà¯à®ªà®¾à®©à®¤à¯ '%s=%s' கà¯à®•à¯à®ªà¯ பொரà¯à®¨à¯à®¤à®µà®¿à®²à¯à®²à¯ˆ"
-#: ../libnm-util/nm-setting-vlan.c:508
+#: ../libnm-core/nm-setting-vlan.c:527 ../libnm-util/nm-setting-vlan.c:568
#, c-format
msgid "'%s' is neither an UUID nor an interface name"
msgstr "'%s' ஆனத௠UUID மறà¯à®±à¯à®®à¯ இடைமà¯à®•à®ªà¯ பெயர௠இரணà¯à®Ÿà¯à®•à¯à®•à¯à®®à¯ பொரà¯à®¨à¯à®¤à®µà®¿à®²à¯à®²à¯ˆ"
-#: ../libnm-util/nm-setting-vlan.c:521
+#: ../libnm-core/nm-setting-vlan.c:541 ../libnm-util/nm-setting-vlan.c:581
#, c-format
msgid "property is not specified and neither is '%s:%s'"
msgstr "பணà¯à®ªà¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®ªà¯à®ªà®Ÿà®µà¯à®®à¯ இலà¯à®²à¯ˆ அத௠'%s:%s' ஆகவà¯à®®à¯ இலà¯à®²à¯ˆ"
-#: ../libnm-util/nm-setting-vlan.c:534
+#: ../libnm-core/nm-setting-vlan.c:554 ../libnm-util/nm-setting-vlan.c:594
msgid "flags are invalid"
msgstr "கொடிகள௠செலà¯à®²à®¾à®¤à®¤à¯"
-#: ../libnm-util/nm-setting-wired.c:562
+#: ../libnm-core/nm-setting-vpn.c:441
#, c-format
-msgid "'%s' is not a valid ethernet port value"
-msgstr "'%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© ஈதà¯à®¤à®°à¯à®¨à¯†à®Ÿà¯ à®®à¯à®©à¯ˆà®¯ மதிபà¯à®ªà®²à¯à®²"
+#| msgid "property is empty"
+msgid "secret was empty"
+msgstr "ரகசியம௠காலியாக இரà¯à®¨à¯à®¤à®¤à¯"
-#: ../libnm-util/nm-setting-wired.c:572
+#: ../libnm-core/nm-setting-vpn.c:471
+msgid "setting contained a secret with an empty name"
+msgstr "அமைவில௠காலியான பெயரைக௠கொணà¯à®Ÿà®¿à®°à¯à®¨à¯à®¤ ஒர௠ரகசியம௠இரà¯à®¨à¯à®¤à®¤à¯"
+
+#: ../libnm-core/nm-setting-vpn.c:479
#, c-format
-msgid "'%s' is not a valid duplex value"
-msgstr "'%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© டியூபà¯à®²à¯†à®•à¯à®¸à¯ மதிபà¯à®ªà®²à¯à®²"
+msgid "secret value was empty"
+msgstr "ரகசியதà¯à®¤à®¿à®©à¯ மதிபà¯à®ªà¯ காலியாக இரà¯à®¨à¯à®¤à®¤à¯"
-#: ../libnm-util/nm-setting-wired.c:582 ../libnm-util/nm-setting-wired.c:640
-msgid "is not a valid MAC address"
-msgstr "எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© MAC à®®à¯à®•à®µà®°à®¿à®¯à®²à¯à®²"
+#: ../libnm-core/nm-setting-vpn.c:526 ../libnm-core/nm-setting.c:1572
+msgid "not a secret property"
+msgstr "இத௠ஒர௠ரகசியதà¯à®¤à®¿à®©à¯ பணà¯à®ªà®²à¯à®²"
-#: ../libnm-util/nm-setting-wired.c:595
-#: ../libnm-util/nm-setting-wireless.c:787
-#: ../libnm-util/nm-setting-wireless.c:801
+#: ../libnm-core/nm-setting-vpn.c:532
+msgid "secret is not of correct type"
+msgstr "ரகசியதà¯à®¤à®¿à®©à¯ வகை தவறà¯"
+
+#: ../libnm-core/nm-setting-vpn.c:567
#, c-format
-msgid "'%s' is not a valid MAC address"
-msgstr "'%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© MAC à®®à¯à®•à®µà®°à®¿à®¯à®²à¯à®²"
+#| msgid "Error: failed to remove value of '%s': %s\n"
+msgid "failed to convert value '%s' to uint"
+msgstr "'%s' எனà¯à®®à¯ மதிபà¯à®ªà¯ˆ அலகாக மாறà¯à®± à®®à¯à®Ÿà®¿à®¯à®¾à®®à®²à¯ போனதà¯"
+
+#: ../libnm-core/nm-setting-vpn.c:575
+msgid "secret flags property not found"
+msgstr "ரகசியக௠கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®²à¯à®•à®³à¯ பணà¯à®ªà¯ இலà¯à®²à¯ˆ"
+
+#: ../libnm-core/nm-setting-wired.c:575 ../libnm-util/nm-setting-wired.c:617
+#, c-format
+msgid "'%s' is not a valid Ethernet port value"
+msgstr "'%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© ஈதà¯à®¤à®°à¯à®¨à¯†à®Ÿà¯ à®®à¯à®©à¯ˆà®¯ மதிபà¯à®ªà®²à¯à®²"
+
+#: ../libnm-core/nm-setting-wired.c:585 ../libnm-util/nm-setting-wired.c:627
+#, c-format
+msgid "'%s' is not a valid duplex value"
+msgstr "'%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© டியூபà¯à®²à¯†à®•à¯à®¸à¯ மதிபà¯à®ªà®²à¯à®²"
-#: ../libnm-util/nm-setting-wired.c:629
+#: ../libnm-core/nm-setting-wired.c:644 ../libnm-util/nm-setting-wired.c:684
#, c-format
msgid "invalid '%s' or its value '%s'"
msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ '%s' அலà¯à®²à®¤à¯ அதன௠மதிபà¯à®ªà¯ '%s'"
-#: ../libnm-util/nm-setting-wireless-security.c:816
+#: ../libnm-core/nm-setting-wireless-security.c:883
+#: ../libnm-util/nm-setting-wireless-security.c:913
#, c-format
msgid "'%s' security requires '%s=%s'"
msgstr "'%s' பாதà¯à®•à®¾à®ªà¯à®ªà¯à®•à¯à®•à¯ '%s=%s' அவசியமà¯"
-#: ../libnm-util/nm-setting-wireless-security.c:845
+#: ../libnm-core/nm-setting-wireless-security.c:912
+#: ../libnm-util/nm-setting-wireless-security.c:942
#, c-format
msgid "'%s' security requires '%s' setting presence"
msgstr "'%s' பாதà¯à®•à®¾à®ªà¯à®ªà¯à®•à¯à®•à¯ '%s' அமைவ௠இரà¯à®•à¯à®• வேணà¯à®Ÿà®¿à®¯à®¤à¯ அவசியமà¯"
-#: ../libnm-util/nm-setting-wireless-security.c:866
+#: ../libnm-core/nm-setting-wireless-security.c:933
+#: ../libnm-util/nm-setting-wireless-security.c:963
#, c-format
msgid "'%d' value is out of range <0-3>"
msgstr "'%d' மதிபà¯à®ªà¯ வரமà¯à®ªà®¿à®±à¯à®•à¯ வெளியே உளà¯à®³à®¤à¯ <0-3>"
-#: ../libnm-util/nm-setting-wireless-security.c:963
+#: ../libnm-core/nm-setting-wireless-security.c:1030
+#: ../libnm-util/nm-setting-wireless-security.c:1060
#, c-format
msgid "'%s' connections require '%s' in this property"
msgstr "'%s' இணைபà¯à®ªà¯à®•à®³à¯à®•à¯à®•à¯ இநà¯à®¤à®ªà¯ பணà¯à®ªà®¿à®²à¯ '%s' இரà¯à®•à¯à®• வேணà¯à®Ÿà¯à®®à¯"
-#: ../libnm-util/nm-setting-wireless-security.c:993
+#: ../libnm-core/nm-setting-wireless-security.c:1060
+#: ../libnm-util/nm-setting-wireless-security.c:1090
#, c-format
msgid "'%s' can only be used with '%s=%s' (WEP)"
msgstr "'%s' à® '%s=%s' (WEP) உடன௠மடà¯à®Ÿà¯à®®à¯‡ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à¯à®®à¯"
-#: ../libnm-util/nm-setting-wireless.c:715
+#: ../libnm-core/nm-setting-wireless.c:713
+#: ../libnm-util/nm-setting-wireless.c:770
#, c-format
msgid "'%s' is not a valid Wi-Fi mode"
msgstr "'%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© Wi-Fi பயனà¯à®®à¯à®±à¯ˆà®¯à®²à¯à®²"
-#: ../libnm-util/nm-setting-wireless.c:725
+#: ../libnm-core/nm-setting-wireless.c:723
+#: ../libnm-util/nm-setting-wireless.c:780
#, c-format
msgid "'%s' is not a valid band"
msgstr "'%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à¯à®®à¯ படà¯à®Ÿà¯ˆà®¯à®²à¯à®²"
-#: ../libnm-util/nm-setting-wireless.c:735
+#: ../libnm-core/nm-setting-wireless.c:733
+#, c-format
+#| msgid "requires setting '%s' property"
+msgid "'%s' requires setting '%s' property"
+msgstr "'%s' கà¯à®•à¯ '%s' பணà¯à®ªà¯ˆ அமைகà¯à®• வேணà¯à®Ÿà®¿à®¯à®¤à¯ அவசியமà¯"
+
+#: ../libnm-core/nm-setting.c:1470
+msgid "secret not found"
+msgstr "ரகசியதà¯à®¤à¯ˆ காண à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ"
+
+#: ../libnm-core/nm-setting.c:1562
+msgid "secret is not set"
+msgstr "ரகசியம௠அமைகà¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ"
+
+#: ../libnm-core/nm-utils.c:2269 ../libnm-util/nm-utils.c:1807
+#, c-format
+msgid "Could not find \"%s\" binary"
+msgstr "\"%s\" பைனரி இலà¯à®²à¯ˆ"
+
+#: ../libnm-glib/nm-device.c:1794 ../libnm/nm-device.c:1615
+msgid "Bluetooth"
+msgstr "Bluetooth"
+
+#: ../libnm-glib/nm-device.c:1812 ../libnm/nm-device.c:1633
+msgid "ADSL"
+msgstr "ADSL"
+
+#: ../libnm-glib/nm-device.c:1840 ../libnm/nm-device.c:1661
+msgid "Wired"
+msgstr "வயரà¯à®Ÿà¯"
+
+#: ../libnm-glib/nm-device.c:1871 ../libnm/nm-device.c:1692
+msgid "PCI"
+msgstr "PCI"
+
+#: ../libnm-glib/nm-device.c:1873 ../libnm/nm-device.c:1694
+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
+#: ../libnm/nm-device.c:1788 ../libnm/nm-device.c:1807
+#, 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_gnutls.c:88
+#, c-format
+msgid "Failed to initialize the MD5 engine: %s / %s."
+msgstr "MD5 எனà¯à®œà®¿à®©à¯ˆà®¤à¯ தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s / %s."
+
+#: ../libnm-util/crypto_nss.c:102
+#, c-format
+msgid "Failed to initialize the MD5 context: %d."
+msgstr "MD5 உரையை தà¯à®µà®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %d."
+
+#: ../libnm-util/crypto_nss.c:463
+#, c-format
+msgid "Couldn't convert password to UCS2: %d"
+msgstr "கடவà¯à®šà¯à®šà¯Šà®²à¯à®²à¯ˆ UCS2கà¯à®•à¯ மாறà¯à®± à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %d"
+
+#: ../libnm-util/nm-setting-bluetooth.c:186
+#, c-format
+msgid "requires '%s' or '%s' setting"
+msgstr "'%s' அலà¯à®²à®¤à¯ '%s' அமைவ௠தேவைபà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯"
+
+#: ../libnm-util/nm-setting-connection.c:863
+#, c-format
+msgid "requires presence of '%s' setting in the connection"
+msgstr "இணைபà¯à®ªà®¿à®²à¯ '%s' அமைபà¯à®ªà¯ இரà¯à®•à¯à®• வேணà¯à®Ÿà®¿à®¯à®¤à¯ அவசியமà¯"
+
+#: ../libnm-util/nm-setting-connection.c:888
+msgid "Slave connections need a valid '"
+msgstr "ஸà¯à®²à¯‡à®µà¯ இணைபà¯à®ªà¯à®•à®³à¯à®•à¯à®•à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© இவை தேவை: '"
+
+#: ../libnm-util/nm-setting-connection.c:897
+msgid "Cannot set '"
+msgstr "இதை அமைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: '"
+
+#: ../libnm-util/nm-setting-ip4-config.c:940
+#, c-format
+msgid "%d. IPv4 address is invalid"
+msgstr "%d. IPv4 à®®à¯à®•à®µà®°à®¿ செலà¯à®²à®¾à®¤à®¤à¯"
+
+#: ../libnm-util/nm-setting-ip4-config.c:950
+#, c-format
+msgid "%d. IPv4 address has invalid prefix"
+msgstr "%d. IPv4 à®®à¯à®•à®µà®°à®¿à®¯à®¿à®²à¯ செலà¯à®²à®¾à®¤ à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà¯ உளà¯à®³à®¤à¯"
+
+#: ../libnm-util/nm-setting-ip4-config.c:976
+#, c-format
+msgid "%d. route has invalid prefix"
+msgstr "%d. பாதையில௠செலà¯à®²à®¾à®¤ à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà¯ உளà¯à®³à®¤à¯"
+
+#: ../libnm-util/nm-setting-vpn.c:583
+#, c-format
+msgid "Failed to convert '%s' value '%s' to uint"
+msgstr "'%s' மதிபà¯à®ªà¯ˆ '%s' அலகாக மாறà¯à®± à®®à¯à®Ÿà®¿à®¯à®¾à®®à®²à¯ போனதà¯"
+
+#: ../libnm-util/nm-setting-vpn.c:590
+#, c-format
+msgid "Secret flags property '%s' not found"
+msgstr "'%s' எனà¯à®®à¯ ரகசியக௠கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®²à¯à®•à®³à¯ பணà¯à®ªà¯ இலà¯à®²à¯ˆ"
+
+#: ../libnm-util/nm-setting-wireless.c:790
#, c-format
msgid "requires setting '%s' property"
msgstr "இதறà¯à®•à¯ '%s' பணà¯à®ªà¯ˆ அமைகà¯à®• வேணà¯à®Ÿà¯à®®à¯"
+#: ../libnm/nm-device-adsl.c:73
+#| msgid "connecting (starting secondary connections)"
+msgid "The connection was not an ADSL connection."
+msgstr "இணைபà¯à®ªà¯ ஒர௠ADSL இணைபà¯à®ªà®²à¯à®²."
+
+#: ../libnm/nm-device-bond.c:115
+#| msgid "connecting (starting secondary connections)"
+msgid "The connection was not a bond connection."
+msgstr "இணைபà¯à®ªà®¾à®©à®¤à¯ ஒர௠பிணைபà¯à®ªà¯ இணைபà¯à®ªà®²à¯à®²."
+
+#: ../libnm/nm-device-bridge.c:115
+#| msgid "connecting (starting secondary connections)"
+msgid "The connection was not a bridge connection."
+msgstr "இணைபà¯à®ªà¯ ஒர௠பிரிடà¯à®œà¯ இணைபà¯à®ªà®²à¯à®²."
+
+#: ../libnm/nm-device-bt.c:140
+#, c-format
+#| msgid "There is 1 optional argument for 'bluetooth' connection type.\n"
+msgid "The connection was not a Bluetooth connection."
+msgstr "இணைபà¯à®ªà¯ ஒர௠Bluetooth இணைபà¯à®ªà®²à¯à®²."
+
+#: ../libnm/nm-device-bt.c:149
+msgid "Invalid device Bluetooth address."
+msgstr "தவறான சாதன Bluetooth à®®à¯à®•à®µà®°à®¿."
+
+#: ../libnm/nm-device-bt.c:156
+msgid "The Bluetooth addresses of the device and the connection didn't match."
+msgstr "சாதனம௠மறà¯à®±à¯à®®à¯ இணைபà¯à®ªà®¿à®©à¯ Bluetooth à®®à¯à®•à®µà®°à®¿à®•à®³à¯ பொரà¯à®¨à¯à®¤à®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../libnm/nm-device-bt.c:165
+msgid ""
+"The device is lacking Bluetooth capabilities required by the connection."
+msgstr "இணைபà¯à®ªà¯à®•à¯à®•à¯à®¤à¯ தேவையான Bluetooth à®…à®®à¯à®šà®™à¯à®•à®³à¯ சாதனதà¯à®¤à®¿à®²à¯ இலà¯à®²à¯ˆ."
+
+#: ../libnm/nm-device-ethernet.c:138
+#| msgid "There are 4 optional arguments for 'PPPoE' connection type.\n"
+msgid "The connection was not an Ethernet or PPPoE connection."
+msgstr "இணைபà¯à®ªà¯ ஒர௠ஈதà¯à®¤à®°à¯à®¨à¯†à®Ÿà¯ அலà¯à®²à®¤à¯ PPPoE இணைபà¯à®ªà®²à¯à®²."
+
+#: ../libnm/nm-device-ethernet.c:154 ../libnm/nm-device-infiniband.c:105
+#: ../libnm/nm-device-wifi.c:492 ../libnm/nm-device-wimax.c:311
+#| msgid "is not a valid MAC address"
+msgid "Invalid device MAC address."
+msgstr "தவறான சாதன MAC à®®à¯à®•à®µà®°à®¿."
+
+#: ../libnm/nm-device-ethernet.c:160 ../libnm/nm-device-infiniband.c:113
+#: ../libnm/nm-device-wifi.c:499 ../libnm/nm-device-wimax.c:318
+msgid "The MACs of the device and the connection didn't match."
+msgstr "சாதனம௠மறà¯à®±à¯à®®à¯ இணைபà¯à®ªà®¿à®©à¯ MAC à®®à¯à®•à®µà®°à®¿à®•à®³à¯ பொரà¯à®¨à¯à®¤à®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../libnm/nm-device-generic.c:92
+#| msgid "connecting (starting secondary connections)"
+msgid "The connection was not a generic connection."
+msgstr "இணைபà¯à®ªà¯ ஒர௠பொதà¯à®µà®¾à®© இணைபà¯à®ªà®²à¯à®²."
+
+#: ../libnm/nm-device-generic.c:99
+#| msgid "InfiniBand P_Key connection did not specify parent interface name"
+msgid "The connection did not specify an interface name."
+msgstr "இணைபà¯à®ªà®¾à®©à®¤à¯ ஒர௠இடைமà¯à®•à®ªà¯ பெயரைக௠கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®µà®¿à®²à¯à®²à¯ˆ.."
+
+#: ../libnm/nm-device-infiniband.c:97
+#| msgid "There are 5 optional arguments for 'InfiniBand' connection type.\n"
+msgid "The connection was not an InfiniBand connection."
+msgstr "இணைபà¯à®ªà¯ ஒர௠InfiniBand இணைபà¯à®ªà®²à¯à®²."
+
+#: ../libnm/nm-device-modem.c:123
+#| msgid "the connection was removed"
+msgid "The connection was not a modem connection."
+msgstr "இணைபà¯à®ªà¯ ஒர௠மோடம௠இணைபà¯à®ªà®²à¯à®²."
+
+#: ../libnm/nm-device-modem.c:131
+#| msgid "connecting (starting secondary connections)"
+msgid "The connection was not a valid modem connection."
+msgstr "இணைபà¯à®ªà®¾à®©à®¤à¯ சரியான மோடம௠இணைபà¯à®ªà®²à¯à®²."
+
+#: ../libnm/nm-device-modem.c:138
+msgid "The device is lacking capabilities required by the connection."
+msgstr "இணைபà¯à®ªà¯à®•à¯à®•à¯à®¤à¯ தேவையான à®…à®®à¯à®šà®™à¯à®•à®³à¯ சாதனதà¯à®¤à®¿à®²à¯ இலà¯à®²à¯ˆ."
+
+#: ../libnm/nm-device-olpc-mesh.c:118
+#| msgid "There are 2 optional arguments for 'OLPC Mesh' connection type.\n"
+msgid "The connection was not an OLPC Mesh connection."
+msgstr "இணைபà¯à®ªà®¾à®©à®¤à¯ OLPC மெஷ௠இணைபà¯à®ªà®¿à®²à¯ இலà¯à®²à¯ˆ."
+
+#: ../libnm/nm-device-team.c:121
+#| msgid "the connection was removed"
+msgid "The connection was not a team connection."
+msgstr "இணைபà¯à®ªà®¾à®©à®¤à¯ ஒர௠அணி இணைபà¯à®ªà®²à¯à®²."
+
+#: ../libnm/nm-device-vlan.c:131
+#| msgid "There are 4 optional arguments for 'VLAN' connection type.\n"
+msgid "The connection was not a VLAN connection."
+msgstr "இணைபà¯à®ªà®¾à®©à®¤à¯ ஒர௠VLAN இணைபà¯à®ªà®²à¯à®²."
+
+#: ../libnm/nm-device-vlan.c:138
+msgid "The VLAN identifiers of the device and the connection didn't match."
+msgstr "சாதனம௠மறà¯à®±à¯à®®à¯ இணைபà¯à®ªà®¿à®©à¯ VLAN அடையாளம௠காடà¯à®Ÿà®¿à®•à®³à¯ பொரà¯à®¨à¯à®¤à®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../libnm/nm-device-vlan.c:151
+msgid "The hardware address of the device and the connection didn't match."
+msgstr "சாதனம௠மறà¯à®±à¯à®®à¯ இணைபà¯à®ªà®¿à®©à¯ வனà¯à®ªà¯Šà®°à¯à®³à¯ à®®à¯à®•à®µà®°à®¿à®•à®³à¯ பொரà¯à®¨à¯à®¤à®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../libnm/nm-device-wifi.c:483
+msgid "The connection was not a Wi-Fi connection."
+msgstr "இணைபà¯à®ªà®¾à®©à®¤à¯ ஒர௠Wi-Fi இணைபà¯à®ªà®²à¯à®²."
+
+#: ../libnm/nm-device-wifi.c:519
+msgid "The device is lacking WPA capabilities required by the connection."
+msgstr "இணைபà¯à®ªà¯à®•à¯à®•à¯à®¤à¯ தேவையான WPA à®…à®®à¯à®šà®™à¯à®•à®³à¯ சாதனதà¯à®¤à®¿à®²à¯ இலà¯à®²à¯ˆ."
+
+#: ../libnm/nm-device-wifi.c:526
+msgid "The device is lacking WPA2/RSN capabilities required by the connection."
+msgstr "இணைபà¯à®ªà¯à®•à¯à®•à¯à®¤à¯ தேவையான WPA2/RSN à®…à®®à¯à®šà®™à¯à®•à®³à¯ சாதனதà¯à®¤à®¿à®²à¯ இலà¯à®²à¯ˆ."
+
+#: ../libnm/nm-device-wimax.c:302
+#| msgid "There is 1 optional argument for 'WiMax' connection type.\n"
+msgid "The connection was not a WiMAX connection."
+msgstr "இணைபà¯à®ªà®¾à®©à®¤à¯ ஒர௠WiMAX இணைபà¯à®ªà®²à¯à®²."
+
+#: ../libnm/nm-device.c:2133
+#, c-format
+#| msgid "Error: connection is not valid: %s\n"
+msgid "The connection was not valid: %s"
+msgstr "இணைபà¯à®ªà¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤à®¤à¯: %s"
+
+#: ../libnm/nm-device.c:2142
+#, c-format
+msgid "The interface names of the device and the connection didn't match."
+msgstr "சாதனம௠மறà¯à®±à¯à®®à¯ இணைபà¯à®ªà®¿à®©à¯ இடைமà¯à®•à®ªà¯ பெயரà¯à®•à®³à¯ பொரà¯à®¨à¯à®¤à®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../libnm/nm-manager.c:858
+#| msgid "no active connection or device"
+msgid "Active connection could not be attached to the device"
+msgstr "செயலிலà¯à®³à¯à®³ இணைபà¯à®ªà¯ˆ சாதனதà¯à®¤à¯à®Ÿà®©à¯ இணைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯"
+
+#: ../libnm/nm-manager.c:1082
+#| msgid "Activate connection details"
+msgid "Active connection removed before it was initialized"
+msgstr "செயலிலà¯à®³à¯à®³ இணைபà¯à®ªà®¾à®©à®¤à¯ தà¯à®µà®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯ à®®à¯à®©à¯à®ªà¯ அகறà¯à®±à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
+
+#: ../libnm/nm-object.c:1439 ../libnm/nm-object.c:1585
+msgid "Caller did not specify D-Bus path for object"
+msgstr "அழைபà¯à®ªà®¾à®³à®°à¯ பொரà¯à®³à¯à®•à¯à®•à®¾à®© D-Bus பாதையைக௠கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®µà®¿à®²à¯à®²à¯ˆ"
+
+#: ../libnm/nm-remote-settings.c:261
+msgid "Connection removed before it was initialized"
+msgstr "இணைபà¯à®ªà¯ தà¯à®µà®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯ à®®à¯à®©à¯à®ªà¯ அகறà¯à®±à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
+
+#: ../libnm/nm-vpn-plugin-old.c:885
+msgid "No service name specified"
+msgstr "சேவைப௠பெயர௠கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ"
+
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:1
msgid "Enable or disable system networking"
msgstr "கணினி நெடà¯à®µà¯Šà®°à¯à®•à¯à®•à®¿à®™à¯ வசதியை செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯ அலà¯à®²à®¤à¯ நீகà¯à®•à¯"
@@ -6042,80 +8199,60 @@ msgstr "நிலையான கணினி பà¯à®°à®µà®²à®ªà¯à®ªà¯†à®¯à®°à
msgid "System policy prevents modification of the persistent system hostname"
msgstr "நிலையான கணினி பà¯à®°à®µà®²à®ªà¯†à®¯à®°à¯ மாறà¯à®±à®¿à®¯à®®à¯ˆà®ªà¯à®ªà®¤à¯ˆ கணினி பாலிசி தடà¯à®•à¯à®•à®¿à®±à®¤à¯"
-#: ../src/main.c:154
+#. Translators: the first %s is a prefix for the connection id, such
+#. * as "Wired Connection" or "VPN Connection". The %d is a number
+#. * that is combined with the first argument to create a unique
+#. * connection id.
+#: ../src/NetworkManagerUtils.c:1138
#, c-format
-msgid "Opening %s failed: %s\n"
-msgstr "%s à®à®¤à¯ திறபà¯à®ªà®¤à®¿à®²à¯ தோலà¯à®µà®¿: %s\n"
-
-#: ../src/main.c:160
-#, c-format
-msgid "Writing to %s failed: %s\n"
-msgstr "%s இல௠எழà¯à®¤à¯à®¤à®²à¯ தோலà¯à®µà®¿: %s\n"
-
-#: ../src/main.c:165
-#, c-format
-msgid "Closing %s failed: %s\n"
-msgstr "%s ஠மூடà¯à®¤à®²à¯ தோலà¯à®µà®¿: %s\n"
+msgctxt "connection id fallback"
+msgid "%s %d"
+msgstr "%s %d"
-#: ../src/main.c:208
-#, c-format
-msgid "NetworkManager is already running (pid %ld)\n"
-msgstr "NetworkManager à®à®±à¯à®•à®©à®µà¯‡ இயஙà¯à®•à®¿à®•à¯à®•à¯Šà®£à¯à®Ÿà¯à®³à¯à®³à®¤à¯ (pid %ld)\n"
-
-#: ../src/main.c:329
+#. Logging/debugging
+#: ../src/main.c:221 ../src/nm-iface-helper.c:310
msgid "Print NetworkManager version and exit"
msgstr "NetworkManager பதிபà¯à®ªà¯ˆ அசà¯à®šà®¿à®Ÿà¯à®Ÿà¯ விடà¯à®Ÿà¯à®µà¯†à®³à®¿à®¯à¯‡à®±à¯"
-#: ../src/main.c:330
+#: ../src/main.c:222 ../src/nm-iface-helper.c:311
msgid "Don't become a daemon"
msgstr "ஒர௠டெமானாக ஆக வேணà¯à®Ÿà®¾à®®à¯"
-#: ../src/main.c:331
-#| msgid "Don't become a daemon"
+#: ../src/main.c:223 ../src/nm-iface-helper.c:312
msgid "Don't become a daemon, and log to stderr"
msgstr "ஒர௠டெமானாக ஆகி sterr இல௠பதிவிட வேணà¯à®Ÿà®¾à®®à¯"
-#: ../src/main.c:332
+#: ../src/main.c:224 ../src/nm-iface-helper.c:313
#, c-format
msgid "Log level: one of [%s]"
msgstr "பதிவ௠நிலை: [%s] இல௠ஒனà¯à®±à¯"
-#: ../src/main.c:334
+#: ../src/main.c:226 ../src/nm-iface-helper.c:315
#, c-format
msgid "Log domains separated by ',': any combination of [%s]"
msgstr "',' ஆல௠பிரிகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ பதிவ௠டொமைனà¯à®•à®³à¯: [%s] இன௠à®à®¤à¯‡à®©à¯à®®à¯ ஒர௠சேரà¯à®•à¯à®•à¯ˆ"
-#: ../src/main.c:336
+#: ../src/main.c:228 ../src/nm-iface-helper.c:317
msgid "Make all warnings fatal"
msgstr "அனைதà¯à®¤à¯ எசà¯à®šà®°à®¿à®•à¯à®•à¯ˆ செயà¯à®¤à®¿à®•à®³à¯ˆà®¯à¯à®®à¯ à®®à¯à®Ÿà®¿à®µà®Ÿà¯ˆà®¯ செயà¯à®¯à®µà¯à®®à¯"
-#: ../src/main.c:337
+#: ../src/main.c:229
msgid "Specify the location of a PID file"
msgstr "ஒர௠PID கோபà¯à®ªà®¿à®©à¯ இரà¯à®ªà¯à®ªà®¿à®Ÿà®¤à¯à®¤à¯ˆà®•à¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®µà¯à®®à¯"
-#: ../src/main.c:337
+#: ../src/main.c:229
msgid "filename"
msgstr "கோபà¯à®ªà¯ பெயரà¯"
-#: ../src/main.c:338
+#: ../src/main.c:230
msgid "State file location"
msgstr "கோபà¯à®ªà®¿à®©à¯ இரà¯à®ªà¯à®ªà®¿à®Ÿà®¤à¯à®¤à¯ˆà®•à¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®µà¯à®®à¯"
-#: ../src/main.c:338
+#: ../src/main.c:230
msgid "/path/to/state.file"
msgstr "/path/to/state.file"
-#: ../src/main.c:364
-#, c-format
-msgid "GModules are not supported on your platform!\n"
-msgstr "உஙà¯à®•à®³à¯ இயகà¯à®•à¯à®¤à®³à®¤à¯à®¤à®¿à®²à¯ GModules கà¯à®•à¯ ஆதரவிலà¯à®²à¯ˆ!\n"
-
-#: ../src/main.c:369
-#, c-format
-msgid "You must be root to run NetworkManager!\n"
-msgstr "NetworkManager ஠இயகà¯à®• நீஙà¯à®•à®³à¯ மூலப௠பயனராக இரà¯à®•à¯à®• வேணà¯à®Ÿà¯à®®à¯!\n"
-
-#: ../src/main.c:392
+#: ../src/main.c:244
msgid ""
"NetworkManager monitors all network connections and automatically\n"
"chooses the best connection to use. It also allows the user to\n"
@@ -6129,65 +8266,88 @@ msgstr ""
"வயரà¯à®²à¯†à®¸à¯ அணà¯à®•à®²à¯ பà¯à®³à¯à®³à®¿à®•à®³à¯ˆ பயனரே கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®µà¯à®®à¯ அனà¯à®®à®¤à®¿à®•à¯à®•à®¿à®±à®¤à¯\n"
"."
-#: ../src/main.c:398
-#, c-format
-msgid "Invalid option. Please use --help to see a list of valid options.\n"
-msgstr ""
-"தவறான விரà¯à®ªà¯à®ªà®®à¯. உதவியை --பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®¿ சரியான விரà¯à®ªà¯à®ªà®™à¯à®•à®³à®¿à®©à¯ படà¯à®Ÿà®¿à®¯à®²à¯ˆà®ªà¯ "
-"பாரà¯à®•à¯à®•à®µà¯à®®à¯.\n"
-
-#: ../src/main.c:412
+#: ../src/main.c:257 ../src/main-utils.c:271 ../src/nm-iface-helper.c:346
#, c-format
msgid "%s. Please use --help to see a list of valid options.\n"
msgstr ""
"%s. --help஠பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®¿ சரியான விரà¯à®ªà¯à®ªà®™à¯à®•à®³à®¿à®©à¯ படà¯à®Ÿà®¿à®¯à®²à¯ˆà®ªà¯ பாரà¯à®•à¯à®•à®µà¯à®®à¯.\n"
-#: ../src/main.c:417
+#: ../src/main.c:262 ../src/nm-iface-helper.c:351
#, c-format
msgid "Ignoring unrecognized log domain(s) '%s' passed on command line.\n"
msgstr ""
"கடà¯à®Ÿà®³à¯ˆà®µà®°à®¿à®¯à®¿à®²à¯ வழஙà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ அடையாளம௠காணபà¯à®ªà®Ÿà®¾à®¤ பதிவிடல௠களஙà¯à®•à®³à¯ '%s' "
"பà¯à®±à®•à¯à®•à®ªà¯à®ªà®£à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®©.\n"
-#: ../src/main.c:468
+#: ../src/main.c:307
#, c-format
msgid "Failed to read configuration: (%d) %s\n"
msgstr "அமைவாகà¯à®•à®¤à¯à®¤à¯ˆ வாசிபà¯à®ªà®¤à®¿à®²à¯ பிழை: (%d) %s\n"
-#: ../src/main.c:482
+#: ../src/main.c:321
#, c-format
-#| msgid "Error: Connection activation failed: %s."
msgid "Error in configuration file: %s.\n"
msgstr "அமைவாகà¯à®•à®•à¯ கோபà¯à®ªà®¿à®²à¯ பிழை: %s.\n"
-#: ../src/main.c:487
+#: ../src/main.c:326
#, c-format
msgid "Ignoring unrecognized log domain(s) '%s' from config files.\n"
msgstr ""
"அமைவாகà¯à®•à®•à¯ கோபà¯à®ªà®¿à®²à¯à®³à¯à®³ அடையாளம௠காணபà¯à®ªà®Ÿà®¾à®¤ பதிவிடல௠களஙà¯à®•à®³à¯ '%s' "
"பà¯à®±à®•à¯à®•à®ªà¯à®ªà®£à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®©.\n"
-#: ../src/main.c:495
+#: ../src/main.c:334
#, c-format
msgid "State file %s parsing failed: (%d) %s\n"
msgstr "நிலைக௠கோபà¯à®ªà¯ %s à®à®ªà¯ பாகà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®µà®¤à®¿à®²à¯ தோலà¯à®µà®¿: (%d) %s\n"
-#: ../src/main.c:508
+#: ../src/main.c:347 ../src/nm-iface-helper.c:368
#, c-format
msgid "Could not daemonize: %s [error %u]\n"
msgstr "டெமானாகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s [error %u]\n"
-#: ../src/bluez-manager/nm-bluez-device.c:198
+#: ../src/main-utils.c:115
#, c-format
-#| msgid "Networking"
-msgid "%s Network"
-msgstr "%s பிணையமà¯"
+msgid "Failed to set signal mask: %d"
+msgstr "சிகà¯à®©à®²à¯ மூடà¯à®¤à®²à¯ˆ அமைபà¯à®ªà®¤à®¿à®²à¯ தோலà¯à®µà®¿: %d"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:143
+#: ../src/main-utils.c:124
+#, c-format
+msgid "Failed to create signal handling thread: %d"
+msgstr "சிகà¯à®©à®²à¯ˆà®•à¯ கையாளà¯à®®à¯ இழையை உரà¯à®µà®¾à®•à¯à®•à¯à®µà®¤à®¿à®²à¯ தோலà¯à®µà®¿: %d"
+
+#: ../src/main-utils.c:139
+#, c-format
+msgid "Opening %s failed: %s\n"
+msgstr "%s à®à®¤à¯ திறபà¯à®ªà®¤à®¿à®²à¯ தோலà¯à®µà®¿: %s\n"
+
+#: ../src/main-utils.c:145
+#, c-format
+msgid "Writing to %s failed: %s\n"
+msgstr "%s இல௠எழà¯à®¤à¯à®¤à®²à¯ தோலà¯à®µà®¿: %s\n"
+
+#: ../src/main-utils.c:150
+#, c-format
+msgid "Closing %s failed: %s\n"
+msgstr "%s ஠மூடà¯à®¤à®²à¯ தோலà¯à®µà®¿: %s\n"
+
+#: ../src/main-utils.c:206
+#, c-format
+#| msgid "NetworkManager is already running (pid %ld)\n"
+msgid "%s is already running (pid %ld)\n"
+msgstr "%s à®à®±à¯à®•à®©à®µà¯‡ இயஙà¯à®•à®¿à®•à¯à®•à¯Šà®£à¯à®Ÿà¯à®³à¯à®³à®¤à¯ (pid %ld)\n"
+
+#: ../src/main-utils.c:248
+#, c-format
+#| msgid "You must be root to run NetworkManager!\n"
+msgid "You must be root to run %s!\n"
+msgstr "%s ஠இயகà¯à®• நீஙà¯à®•à®³à¯ ரூட௠பயனராக இரà¯à®•à¯à®• வேணà¯à®Ÿà¯à®®à¯!\n"
+
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:204
msgid "# Created by NetworkManager\n"
msgstr "# Created by NetworkManager\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:150
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:211
#, c-format
msgid ""
"# Merged from %s\n"
@@ -6196,1085 +8356,734 @@ msgstr ""
"# Merged from %s\n"
"\n"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:313
+#: ../src/dhcp-manager/nm-dhcp-manager.c:130
+#, c-format
+#| msgid "'dhcpcd' could not be found or was disabled."
+msgid "'%s' support not found or not enabled."
+msgstr "'%s' ஆதரவ௠இலà¯à®²à¯ˆ அலà¯à®²à®¤à¯ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:177
msgid "no usable DHCP client could be found."
msgstr "பயனà¯à®ªà®Ÿà®•à¯à®•à¯‚டிய DHCP வாடிகà¯à®•à¯ˆà®¯à®¾à®³à®°à¯ காணபà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:322
-msgid "'dhclient' could be found."
-msgstr "'dhclient' காணபà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
-
-#: ../src/dhcp-manager/nm-dhcp-manager.c:332
-msgid "'dhcpcd' could be found."
-msgstr "'dhcpcd' காணபà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
-
-#: ../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:401
+#: ../src/dns-manager/nm-dns-manager.c:374
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr ""
"கà¯à®±à®¿à®ªà¯à®ªà¯: இநà¯à®¤ libc மறà¯à®¤à¯€à®°à¯à®µà®¾à®³à®°à¯ 3 பெயரà¯à®šà¯‡à®µà¯ˆà®¯à®°à¯à®•à®³à¯à®•à¯à®•à¯ மேல௠தà¯à®£à¯ˆà®ªà¯à®°à®¿à®¯à®µà®¤à®¿à®²à¯à®²à¯ˆ."
-#: ../src/dns-manager/nm-dns-manager.c:403
+#: ../src/dns-manager/nm-dns-manager.c:376
msgid "The nameservers listed below may not be recognized."
msgstr "கீழே படà¯à®Ÿà®¿à®¯à®²à®¿à®Ÿà¯à®Ÿà®ªà¯à®ªà®Ÿà¯à®³à¯à®³ பெயரà¯à®šà¯‡à®µà¯ˆà®¯à®•à®™à¯à®•à®³à¯ கணà¯à®Ÿà¯à®ªà®¿à®Ÿà®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
-#: ../src/logging/nm-logging.c:149
-#, c-format
-msgid "Unknown log level '%s'"
-msgstr "தெரியாத பதிவ௠நிலை '%s'"
+#: ../src/devices/adsl/nm-device-adsl.c:129
+msgid "ADSL connection"
+msgstr "ADSL இணைபà¯à®ªà¯"
-#: ../src/logging/nm-logging.c:226
+#: ../src/devices/bluetooth/nm-bluez-device.c:200
#, c-format
-msgid "Unknown log domain '%s'"
-msgstr "தெரியாத பதிவ௠டொமைன௠'%s'"
+msgid "%s Network"
+msgstr "%s பிணையமà¯"
-#: ../src/config/nm-config.c:271
-msgid "Config file location"
-msgstr "அமைவாகà¯à®•à®•à¯ கோபà¯à®ªà®¿à®©à¯ இரà¯à®ªà¯à®ªà®¿à®Ÿà®®à¯"
+#: ../src/devices/bluetooth/nm-device-bt.c:254
+msgid "PAN requested, but Bluetooth device does not support NAP"
+msgstr "PAN கோரபà¯à®ªà®Ÿà¯à®Ÿà®¤à¯, ஆனால௠Bluetooth சாதனமானத௠NAP ஠ஆதரிகà¯à®•à®µà®¿à®²à¯à®²à¯ˆ"
-#: ../src/config/nm-config.c:271
-msgid "/path/to/config.file"
-msgstr "/path/to/config.file"
+#: ../src/devices/bluetooth/nm-device-bt.c:264
+msgid "PAN connections cannot specify GSM, CDMA, or serial settings"
+msgstr "PAN இணைபà¯à®ªà¯à®•à®³à¯ GSM, CDMA அலà¯à®²à®¤à¯ தொடர௠அமைவà¯à®•à®³à¯ˆà®•à¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà®•à¯à®•à¯‚டாதà¯"
-#: ../src/config/nm-config.c:272
-msgid "Config directory location"
-msgstr "அமைவாகà¯à®•à®•à¯ கோபà¯à®ªà®•à®¤à¯à®¤à®¿à®©à¯ இரà¯à®ªà¯à®ªà®¿à®Ÿà®®à¯"
+#: ../src/devices/bluetooth/nm-device-bt.c:277
+msgid "PAN connection"
+msgstr "PAN இணைபà¯à®ªà¯"
-#: ../src/config/nm-config.c:272
-msgid "/path/to/config/dir"
-msgstr "/அமைவாகà¯à®•/கோபà¯à®ªà®•à®¤à¯à®¤à®¿/à®±à¯à®•à®¾à®©/இரà¯à®ªà¯à®ªà®¿à®Ÿà®®à¯"
+#: ../src/devices/bluetooth/nm-device-bt.c:284
+msgid "DUN requested, but Bluetooth device does not support DUN"
+msgstr "DUN கோரபà¯à®ªà®Ÿà¯à®Ÿà®¤à¯, ஆனால௠Bluetooth சாதனமானத௠DUN ஠ஆதரிகà¯à®•à®µà®¿à®²à¯à®²à¯ˆ"
-#: ../src/config/nm-config.c:274
-msgid "List of plugins separated by ','"
-msgstr "',' ஆல௠பிரிதà¯à®¤à®ªà®Ÿà®¿ செரà¯à®•à¯à®¨à®¿à®°à®²à¯à®•à®³à®¿à®©à¯ படà¯à®Ÿà®¿à®¯à®²à¯"
+#: ../src/devices/bluetooth/nm-device-bt.c:294
+msgid "DUN connection must include a GSM or CDMA setting"
+msgstr "DUN இணைபà¯à®ªà®¿à®²à¯ GSM அலà¯à®²à®¤à¯ CDMA அமைவ௠கடà¯à®Ÿà®¾à®¯à®®à¯ இடமà¯à®ªà¯†à®± வேணà¯à®Ÿà¯à®®à¯"
-#: ../src/config/nm-config.c:274
-msgid "plugin1,plugin2"
-msgstr "plugin1,plugin2"
+#: ../src/devices/bluetooth/nm-device-bt.c:304
+#: ../src/devices/wwan/nm-modem-broadband.c:488
+msgid "GSM connection"
+msgstr "GSM இணைபà¯à®ªà¯"
-#. 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/devices/bluetooth/nm-device-bt.c:308
+#: ../src/devices/wwan/nm-modem-broadband.c:511
+msgid "CDMA connection"
+msgstr "CDMA இணைபà¯à®ªà¯"
-#: ../src/config/nm-config.c:278
-msgid "The interval between connectivity checks (in seconds)"
-msgstr "இணைபà¯à®ªà¯ˆ சோதிகà¯à®•à¯à®®à¯ இடைவெளி (வினாடி)"
+#: ../src/devices/bluetooth/nm-device-bt.c:316
+msgid "Unknown/unhandled Bluetooth connection type"
+msgstr "தெரியாத/கையாளபà¯à®ªà®Ÿà®¾à®¤ Bluetooth இணைபà¯à®ªà¯ வகை"
-#: ../src/config/nm-config.c:279
-msgid "The expected start of the response"
-msgstr "எதிரà¯à®ªà®¾à®°à¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯ பதிலளிபà¯à®ªà®¿à®©à¯ தொடகà¯à®•à®®à¯"
+#: ../src/devices/bluetooth/nm-device-bt.c:336
+#: ../src/devices/nm-device-ethernet.c:1442
+#: ../src/devices/nm-device-infiniband.c:196
+#: ../src/devices/wifi/nm-device-wifi.c:1123
+#: ../src/devices/wimax/nm-device-wimax.c:450
+#| msgid "connection type '%s' is not valid"
+msgid "connection does not match device"
+msgstr "இணைபà¯à®ªà¯à®®à¯ சாதனமà¯à®®à¯ பொரà¯à®¨à¯à®¤à®µà®¿à®²à¯à®²à¯ˆ"
-#: ../src/config/nm-config.c:279
-msgid "Bingo!"
-msgstr "Bingo!"
+#: ../src/devices/nm-device-bond.c:124
+msgid "Bond connection"
+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/devices/nm-device-bridge.c:131
+msgid "Bridge connection"
+msgstr "பிரிடà¯à®œà¯ இணைபà¯à®ªà¯"
-#: ../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-ethernet.c:1425
+msgid "PPPoE connection"
+msgstr "PPPoE இணைபà¯à®ªà¯"
-#: ../src/devices/nm-device-bond.c:146 ../tui/nm-editor-utils.c:204
-#, c-format
-msgid "Bond connection %d"
-msgstr "பிணைபà¯à®ªà¯ இணைபà¯à®ªà¯ %d"
+#: ../src/devices/nm-device-ethernet.c:1425
+msgid "Wired connection"
+msgstr "வயர௠இணைபà¯à®ªà¯"
-#: ../src/devices/nm-device-adsl.c:150
+#: ../src/devices/nm-device-ethernet-utils.c:40
#, c-format
-msgid "ADSL connection %d"
-msgstr "ADSL இணைபà¯à®ªà¯ %d"
+msgid "Wired connection %d"
+msgstr "வயர௠இணைபà¯à®ªà¯ %d"
-#: ../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-infiniband.c:178
+msgid "InfiniBand connection"
+msgstr "InfiniBand இணைபà¯à®ªà¯"
-#: ../src/devices/nm-device-bt.c:308
-#, c-format
-msgid "PAN connection %d"
-msgstr "PAN இணைபà¯à®ªà¯ %d"
+#: ../src/devices/nm-device-vlan.c:218
+msgid "VLAN connection"
+msgstr "VLAN இணைபà¯à®ªà¯"
-#: ../src/devices/nm-device-bt.c:341
-#, c-format
-msgid "DUN connection %d"
-msgstr "DUN இணைபà¯à®ªà¯ %d"
+#: ../src/devices/team/nm-device-team.c:134
+msgid "Team connection"
+msgstr "கà¯à®´à¯ இணைபà¯à®ªà¯"
-#: ../src/devices/nm-device-ethernet.c:1254
-#, c-format
-msgid "PPPoE connection %d"
-msgstr "PPPoE இணைபà¯à®ªà¯ %d"
+#: ../src/devices/wifi/nm-device-olpc-mesh.c:151
+msgid "Mesh"
+msgstr "மெஷà¯"
-#: ../src/devices/nm-device-ethernet.c:1254
-#: ../src/settings/nm-settings-utils.c:50
-#, c-format
-msgid "Wired connection %d"
-msgstr "வயர௠இணைபà¯à®ªà¯ %d"
+#: ../src/devices/wifi/nm-device-wifi.c:1093
+msgid "WPA Ad-Hoc disabled due to kernel bugs"
+msgstr "கெரà¯à®©à®²à¯ வழà¯à®•à¯à®•à®³à®¿à®©à¯ காரணமாக WPA Ad-Hoc à®®à¯à®Ÿà®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-#: ../src/devices/nm-device-infiniband.c:270 ../tui/nm-editor-utils.c:177
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:44
#, c-format
-msgid "InfiniBand connection %d"
-msgstr "InfiniBand இணைபà¯à®ªà¯ %d"
+#| msgid "'%s=%s' is incompatible with '%s > 0'"
+msgid "%s is incompatible with static WEP keys"
+msgstr "%s ஆனத௠நிலையான WEP திறபà¯à®ªà¯à®•à®³à¯à®Ÿà®©à¯ இணகà¯à®•à®®à®±à¯à®±à®¤à¯"
-#: ../src/devices/nm-device-olpc-mesh.c:242
-#, c-format
-msgid "Mesh %d"
-msgstr "மெஷ௠%d"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:78
+#| msgid "Authentication required by wireless network"
+msgid "LEAP authentication requires a LEAP username"
+msgstr "LEAP à®…à®™à¯à®•à¯€à®•à®°à®¿à®ªà¯à®ªà¯à®•à¯à®•à¯ LEAP பயனர௠பெயர௠அவசியமà¯"
-#: ../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/wifi/nm-wifi-ap-utils.c:88
+msgid "LEAP username requires 'leap' authentication"
+msgstr "LEAP பயனர௠பெயரà¯à®•à¯à®•à¯ 'leap' à®…à®™à¯à®•à¯€à®•à®°à®¿à®ªà¯à®ªà¯ அவசியமà¯"
-#: ../src/devices/nm-device-vlan.c:255 ../tui/nm-editor-utils.c:231
-#, c-format
-msgid "VLAN connection %d"
-msgstr "VLAN இணைபà¯à®ªà¯ %d"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:101
+msgid "LEAP authentication requires IEEE 802.1x key management"
+msgstr "LEAP à®…à®™à¯à®•à¯€à®•à®°à®¿à®ªà¯à®ªà¯à®•à¯à®•à¯, IEEE 802.1x திறபà¯à®ªà¯ நிரà¯à®µà®¾à®•à®®à¯ அவசியமà¯"
-#: ../src/nm-manager.c:3420 ../tui/nm-editor-utils.c:246
-#, c-format
-msgid "VPN connection %d"
-msgstr "VPN இணைபà¯à®ªà¯ %d"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:121
+msgid "LEAP authentication is incompatible with Ad-Hoc mode"
+msgstr "LEAP à®…à®™à¯à®•à¯€à®•à®°à®¿à®ªà¯à®ªà®¾à®©à®¤à¯ Ad-Hoc à®®à¯à®±à¯ˆà®¯à¯à®Ÿà®©à¯ இணகà¯à®•à®®à®±à¯à®±à®¤à¯"
-#: ../src/nm-netlink-monitor.c:219
-msgid "error occurred while waiting for data on socket"
-msgstr "சாகà¯à®•à¯†à®Ÿà¯à®Ÿà®¿à®²à¯ தரவிறà¯à®•à®¾à®• காதà¯à®¤à®¿à®°à¯à®•à¯à®•à¯à®®à¯ போத௠பிழை à®à®±à¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:133
+msgid "LEAP authentication is incompatible with 802.1x setting"
+msgstr "LEAP à®…à®™à¯à®•à¯€à®•à®°à®¿à®ªà¯à®ªà®¾à®©à®¤à¯ 802.1x அமைவà¯à®Ÿà®©à¯ இணகà¯à®•à®®à®±à¯à®±à®¤à¯"
-#: ../src/nm-netlink-monitor.c:240
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:155
#, c-format
-msgid "error processing netlink message: %s"
-msgstr "netlink செயà¯à®¤à®¿à®¯à®¿à®©à¯ செயலà¯à®®à¯à®±à¯ˆà®¯à®¿à®²à¯ பிழை: %s"
+msgid "a connection using '%s' authentication cannot use WPA key management"
+msgstr ""
+"'%s' à®…à®™à¯à®•à¯€à®•à®°à®¿à®ªà¯à®ªà¯ˆà®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®®à¯ இணைபà¯à®ªà®¾à®²à¯ WPA திறபà¯à®ªà¯ நிரà¯à®µà®¾à®•à®¤à¯à®¤à¯ˆà®ªà¯ "
+"பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯"
-#: ../src/nm-netlink-monitor.c:264
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:166
#, c-format
-msgid "unable to connect to netlink for monitoring link status: %s"
-msgstr "இணைபà¯à®ªà¯ நிலையை பாரà¯à®µà¯ˆà®¯à®¿à®Ÿ நெடà¯à®‡à®£à¯ˆà®ªà¯à®ªà¯ˆ இணைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+msgid "a connection using '%s' authentication cannot specific WPA protocols"
+msgstr ""
+"'%s' à®…à®™à¯à®•à¯€à®•à®°à®¿à®ªà¯à®ªà¯ˆà®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®®à¯ இணைபà¯à®ªà®¾à®©à®¤à¯ WPA நெறிமà¯à®±à¯ˆà®•à®³à¯ˆà®•à¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿ "
+"à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯"
-#: ../src/nm-netlink-monitor.c:275
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:182
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:199
#, c-format
-msgid "unable to enable netlink handle credential passing: %s"
-msgstr "netlink ஹாணà¯à®Ÿà®¿à®²à¯ நறà¯à®šà®¾à®©à¯à®±à¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+msgid "a connection using '%s' authentication cannot specific WPA ciphers"
+msgstr ""
+"'%s' à®…à®™à¯à®•à¯€à®•à®°à®¿à®ªà¯à®ªà¯ˆà®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®®à¯ இணைபà¯à®ªà®¾à®©à®¤à¯ WPA சிபரà¯à®•à®³à¯ˆà®•à¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿ à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯"
-#: ../src/nm-netlink-monitor.c:319 ../src/nm-netlink-monitor.c:381
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:211
#, c-format
-msgid "unable to allocate netlink handle for monitoring link status: %s"
-msgstr "இணைபà¯à®ªà¯ நிலைகà¯à®•à®¾à®© netlink ஹாணà¯à®Ÿà®¿à®²à¯ˆ ஒதà¯à®•à¯à®•à®¿à®Ÿ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+msgid "a connection using '%s' authentication cannot specific a WPA password"
+msgstr ""
+"'%s' à®…à®™à¯à®•à¯€à®•à®°à®¿à®ªà¯à®ªà¯ˆà®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®®à¯ இணைபà¯à®ªà®¾à®©à®¤à¯ WPA கடவà¯à®šà¯à®šà¯Šà®²à¯à®²à¯ˆà®•à¯ கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿ "
+"à®®à¯à®Ÿà®¿à®¯à®¾à®¤à¯"
-#: ../src/nm-netlink-monitor.c:469
-#, c-format
-msgid "unable to join netlink group: %s"
-msgstr "netlink கà¯à®´à¯à®µà¯à®Ÿà®©à¯ சேர à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:242
+#| msgid "Dynamic WEP (802.1x)"
+msgid "Dynamic WEP requires an 802.1x setting"
+msgstr "டயனமிக௠WEP கà¯à®•à¯ 802.1x அமைவ௠அவசியமà¯"
-#: ../src/nm-sleep-monitor-systemd.c:116
-#| msgid "NetworkManager status"
-msgid "NetworkManager needs to turn off networks"
-msgstr "NetworkManager பிணையஙà¯à®•à®³à¯ˆ அணைகà¯à®• வேணà¯à®Ÿà®¿à®¯à¯à®³à¯à®³à®¤à¯"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:252
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:280
+msgid "Dynamic WEP requires 'open' authentication"
+msgstr "டயனமிக௠WEP கà¯à®•à¯ 'open' à®…à®™à¯à®•à¯€à®•à®°à®¿à®ªà¯à®ªà¯ அவசியமà¯"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:115
-msgid "System"
-msgstr "கணினி"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:267
+msgid "Dynamic WEP requires 'ieee8021x' key management"
+msgstr "டயனமிக௠WEP கà¯à®•à¯ 'ieee8021x' திறபà¯à®ªà¯ நிரà¯à®µà®¾à®•à®®à¯ அவசியமà¯"
-#: ../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/devices/wifi/nm-wifi-ap-utils.c:314
+msgid "WPA-PSK authentication is incompatible with 802.1x"
+msgstr "WPA-PSK à®…à®™à¯à®•à¯€à®•à®°à®¿à®ªà¯à®ªà®¾à®©à®¤à¯ 802.1x உடன௠இணகà¯à®•à®®à®±à¯à®±à®¤à¯"
-#: ../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/devices/wifi/nm-wifi-ap-utils.c:324
+#| msgid "Wired 802.1X authentication"
+msgid "WPA-PSK requires 'open' authentication"
+msgstr "WPA-PSK கà¯à®•à¯ 'open' à®…à®™à¯à®•à¯€à®•à®°à®¿à®ªà¯à®ªà¯ அவசியமà¯"
-#: ../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 "பிரிடà¯à®œà¯"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:336
+msgid "WPA Ad-Hoc authentication requires an Ad-Hoc mode AP"
+msgstr "WPA Ad-Hoc à®…à®™à¯à®•à¯€à®•à®°à®¿à®ªà¯à®ªà¯à®•à¯à®•à¯ ஒர௠Ad-Hoc à®®à¯à®±à¯ˆ AP அவசியமà¯"
-#: ../test/nm-online.c:73
-#, c-format
-msgid "\rConnecting"
-msgstr "\rஇணைகà¯à®•à®¿à®±à®¤à¯"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:349
+msgid "WPA Ad-Hoc authentication requires 'wpa' protocol"
+msgstr "WPA Ad-Hoc à®…à®™à¯à®•à¯€à®•à®°à®¿à®ªà¯à®ªà¯à®•à¯à®•à¯ 'wpa' நெறிமà¯à®±à¯ˆ அவசியமà¯"
-#: ../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)"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:361
+#| msgid "Authentication required by wireless network"
+msgid "WPA Ad-Hoc authentication requires 'none' pairwise cipher"
+msgstr "WPA Ad-Hoc à®…à®™à¯à®•à¯€à®•à®°à®¿à®ªà¯à®ªà¯à®•à¯à®•à¯ 'none' பேரà¯à®µà¯ˆà®¸à¯ சிபர௠அவசியமà¯"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:373
+msgid "WPA Ad-Hoc requires 'tkip' group cipher"
+msgstr "WPA Ad-Hoc கà¯à®•à¯ 'tkip' கà¯à®´à¯ சிபர௠அவசியமà¯"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:387
+msgid "Access point does not support PSK but setting requires it"
msgstr ""
-"ஒர௠இணைபà¯à®ªà¯à®•à¯à®•à®¾à®• காதà¯à®¤à®¿à®°à¯à®•à¯à®• வேணà¯à®Ÿà®¿à®¯ நேரமà¯, வினாடிகளில௠(விரà¯à®ªà¯à®ªà®®à¯ "
-"இலà¯à®²à®¾à®µà®¿à®Ÿà¯à®Ÿà®¾à®²à¯, à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯ மதிபà¯à®ªà¯ 30)"
+"அணà¯à®•à®²à¯ பà¯à®³à¯à®³à®¿à®¯à®¾à®©à®¤à¯ PSK ஠ஆதரிகà¯à®•à®µà®¿à®²à¯à®²à¯ˆ, ஆனால௠அமைவà¯à®•à¯à®•à¯ அத௠அவசியபà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯"
-#: ../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 இயஙà¯à®•à®¾à®µà®¿à®Ÿà¯à®Ÿà®¾à®²à¯ உடனடியாக வெளியேறà¯"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:417
+msgid "WPA-EAP authentication requires an 802.1x setting"
+msgstr "WPA-EAP à®…à®™à¯à®•à¯€à®•à®°à®¿à®ªà¯à®ªà¯à®•à¯à®•à¯ ஒர௠802.1x அமைவ௠அவசியமà¯"
-#: ../test/nm-online.c:106
-msgid "Don't print anything"
-msgstr "எதையà¯à®®à¯ அசà¯à®šà®¿à®Ÿ வேணà¯à®Ÿà®¾à®®à¯"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:427
+#| msgid "Wired 802.1X authentication"
+msgid "WPA-EAP requires 'open' authentication"
+msgstr "WPA-EAP கà¯à®•à¯ 'open' à®…à®™à¯à®•à¯€à®•à®°à®¿à®ªà¯à®ªà¯ அவசியமà¯"
-#: ../test/nm-online.c:124
-msgid ""
-"Waits for NetworkManager to finish activating startup network connections."
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:438
+msgid "802.1x setting requires 'wpa-eap' key management"
+msgstr "802.1x அமைவà¯à®•à¯à®•à¯ 'wpa-eap' திறபà¯à®ªà¯ நிரà¯à®µà®¾à®•à®®à¯ அவசியமà¯"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:451
+msgid "Access point does not support 802.1x but setting requires it"
msgstr ""
-"NetworkManager தொடகà¯à®• பிணைய இணைபà¯à®ªà¯à®•à®³à¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®®à¯ செயலை à®®à¯à®Ÿà®¿à®•à¯à®•à¯à®®à¯ வரை "
-"காதà¯à®¤à®¿à®°à¯à®•à¯à®•à¯à®®à¯."
+"அணà¯à®•à®²à¯ பà¯à®³à¯à®³à®¿à®¯à®¾à®©à®¤à¯ 802.1x ஠ஆதரிகà¯à®•à®µà®¿à®²à¯à®²à¯ˆ, ஆனால௠அமைவà¯à®•à¯à®•à¯ அத௠அவசியபà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯"
-#: ../test/nm-online.c:131 ../test/nm-online.c:141
-msgid "Invalid option. Please use --help to see a list of valid options."
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:479
+msgid ""
+"Access point mode is Ad-Hoc but setting requires Infrastructure security"
msgstr ""
-"தவறான விரà¯à®ªà¯à®ªà®®à¯. சரியான விரà¯à®ªà¯à®ªà®™à¯à®•à®³à®¿à®©à¯ படà¯à®Ÿà®¿à®¯à®²à¯ˆà®ªà¯ பாரà¯à®•à¯à®• --help à®à®ªà¯ "
-"பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯."
+"அணà¯à®•à®²à¯ பà¯à®³à¯à®³à®¿ à®®à¯à®±à¯ˆ Ad-Hoc ஆக உளà¯à®³à®¤à¯, ஆனால௠அமைவà¯à®•à¯à®•à¯ உளà¯à®•à®Ÿà¯à®Ÿà®®à¯ˆà®ªà¯à®ªà¯ பாதà¯à®•à®¾à®ªà¯à®ªà¯ "
+"அவசியபà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯"
-#: ../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 "சரி"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:489
+msgid "Ad-Hoc mode is incompatible with 802.1x security"
+msgstr "Ad-Hoc à®®à¯à®±à¯ˆà®¯à®¾à®©à®¤à¯ 802.1x பாதà¯à®•à®¾à®ªà¯à®ªà¯à®Ÿà®©à¯ இணகà¯à®•à®®à®±à¯à®±à®¤à¯"
-#: ../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"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:498
+msgid "Ad-Hoc mode is incompatible with LEAP security"
+msgstr "Ad-Hoc à®®à¯à®±à¯ˆà®¯à®¾à®©à®¤à¯ LEAP பாதà¯à®•à®¾à®ªà¯à®ªà¯à®Ÿà®©à¯ இணகà¯à®•à®®à®±à¯à®±à®¤à¯"
-#: ../tui/newt/nmt-newt-utils.c:354
-#, c-format
-#| msgid "Writing to %s failed: %s\n"
-msgid "Editor failed: %s"
-msgstr "திரà¯à®¤à¯à®¤à®¿ தோலà¯à®µà®¿à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯: %s"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:508
+msgid "Ad-Hoc mode requires 'open' authentication"
+msgstr "Ad-Hoc à®®à¯à®±à¯ˆà®•à¯à®•à¯ 'open' à®…à®™à¯à®•à¯€à®•à®°à®¿à®ªà¯à®ªà¯ அவசியமà¯"
-#: ../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"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:518
+msgid ""
+"Access point mode is Infrastructure but setting requires Ad-Hoc security"
+msgstr ""
+"அணà¯à®•à®²à¯ பà¯à®³à¯à®³à®¿ à®®à¯à®±à¯ˆà®¯à®¾à®©à®¤à¯ உளà¯à®•à®Ÿà¯à®Ÿà®®à¯ˆà®ªà¯à®ªà¯ எனà¯à®±à¯à®³à¯à®³à®¤à¯, ஆனால௠அமைவà¯à®•à¯à®•à¯ Ad-Hoc "
+"பாதà¯à®•à®¾à®ªà¯à®ªà¯ தேவைபà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯"
-#: ../tui/nm-editor-utils.c:160
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:560
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:590
#, c-format
-#| msgid "Wired connection %d"
-msgid "Ethernet connection %d"
-msgstr "ஈதà¯à®¤à®°à¯à®¨à¯†à®Ÿà¯ இணைபà¯à®ªà¯ %d"
+msgid "connection does not match access point"
+msgstr "இணைபà¯à®ªà¯ அணà¯à®•à®²à¯ பà¯à®³à¯à®³à®¿à®¯à¯à®Ÿà®©à¯ பொரà¯à®¨à¯à®¤à®µà®¿à®²à¯à®²à¯ˆ"
-#: ../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"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:614
+msgid "Access point is unencrypted but setting specifies security"
+msgstr ""
+"அணà¯à®•à®²à¯ பà¯à®³à¯à®³à®¿à®¯à®¾à®©à®¤à¯ மறைகà¯à®±à®¿à®¯à®¾à®•à¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ, ஆனால௠அமைவானத௠பாதà¯à®•à®¾à®ªà¯à®ªà¯ˆà®•à¯ "
+"கà¯à®±à®¿à®ªà¯à®ªà®¿à®Ÿà¯à®•à®¿à®±à®¤à¯"
-#: ../tui/nm-editor-utils.c:190
-#| msgid "DNS"
-msgid "DSL"
-msgstr "DSL"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:703
+msgid ""
+"WPA authentication is incompatible with non-EAP (original) LEAP or Dynamic "
+"WEP"
+msgstr ""
+"WPA à®…à®™à¯à®•à¯€à®•à®°à®¿à®ªà¯à®ªà®¾à®©à®¤à¯ EAP அலà¯à®²à®¾à®¤ (à®®à¯à®¤à®²à¯) LEAP அலà¯à®²à®¤à¯ டயனமிக௠"
+"WEP ஆகியவறà¯à®±à¯à®Ÿà®©à¯ இணகà¯à®•à®®à®±à¯à®±à®¤à¯"
-#: ../tui/nm-editor-utils.c:194
-#, c-format
-#| msgid "ADSL connection %d"
-msgid "DSL connection %d"
-msgstr "DSL இணைபà¯à®ªà¯ %d"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:713
+msgid "WPA authentication is incompatible with Shared Key authentication"
+msgstr "WPA à®…à®™à¯à®•à¯€à®•à®°à®¿à®ªà¯à®ªà®¾à®©à®¤à¯ பகிரபà¯à®ªà®Ÿà¯à®Ÿ திறபà¯à®ªà¯ à®…à®™à¯à®•à¯€à®•à®°à®¿à®ªà¯à®ªà¯à®Ÿà®©à¯ இணகà¯à®•à®®à®±à¯à®±à®¤à¯"
-#: ../tui/nm-ui-utils.c:316 ../tui/nm-ui-utils.c:385
-msgid "Wired"
-msgstr "வயரà¯à®Ÿà¯"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:760
+#| msgid "Failed to set symmetric key for decryption."
+msgid "Failed to determine AP security information"
+msgstr "AP பாதà¯à®•à®¾à®ªà¯à®ªà¯à®¤à¯ தகவலைத௠தீரà¯à®®à®¾à®©à®¿à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®¾à®®à®²à¯ போனதà¯"
-#: ../tui/nm-ui-utils.c:339
-msgid "Bluetooth"
-msgstr "Bluetooth"
+#: ../src/devices/wwan/nm-modem-broadband.c:475
+#| msgid "Mobile broadband connection %d"
+msgid "GSM mobile broadband connection requires a 'gsm' setting"
+msgstr "GSM மொபைல௠பிராடà¯à®ªà¯‡à®£à¯à®Ÿà¯ இணைபà¯à®ªà¯à®•à¯à®•à¯ 'gsm' அமைவ௠அவசியமà¯"
-#: ../tui/nm-ui-utils.c:341
-msgid "OLPC Mesh"
-msgstr "OLPC மெஷà¯"
+#: ../src/nm-config.c:356
+msgid "Config file location"
+msgstr "அமைவாகà¯à®•à®•à¯ கோபà¯à®ªà®¿à®©à¯ இரà¯à®ªà¯à®ªà®¿à®Ÿà®®à¯"
-#: ../tui/nm-ui-utils.c:343
-msgid "WiMAX"
-msgstr "WiMAX"
+#: ../src/nm-config.c:356
+msgid "/path/to/config.file"
+msgstr "/path/to/config.file"
-#: ../tui/nm-ui-utils.c:357
-msgid "ADSL"
-msgstr "ADSL"
+#: ../src/nm-config.c:357
+msgid "Config directory location"
+msgstr "அமைவாகà¯à®•à®•à¯ கோபà¯à®ªà®•à®¤à¯à®¤à®¿à®©à¯ இரà¯à®ªà¯à®ªà®¿à®Ÿà®®à¯"
-#: ../tui/nm-ui-utils.c:420
-msgid "PCI"
-msgstr "PCI"
+#: ../src/nm-config.c:357
+msgid "/path/to/config/dir"
+msgstr "/அமைவாகà¯à®•/கோபà¯à®ªà®•à®¤à¯à®¤à®¿/à®±à¯à®•à®¾à®©/இரà¯à®ªà¯à®ªà®¿à®Ÿà®®à¯"
-#: ../tui/nm-ui-utils.c:422
-msgid "USB"
-msgstr "USB"
+#: ../src/nm-config.c:359
+msgid "List of plugins separated by ','"
+msgstr "',' ஆல௠பிரிதà¯à®¤à®ªà®Ÿà®¿ செரà¯à®•à¯à®¨à®¿à®°à®²à¯à®•à®³à®¿à®©à¯ படà¯à®Ÿà®¿à®¯à®²à¯"
-#. 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"
+#: ../src/nm-config.c:359
+msgid "plugin1,plugin2"
+msgstr "plugin1,plugin2"
-#: ../tui/nmt-device-entry.c:391
-msgid "Select..."
-msgstr "தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•à®µà¯à®®à¯..."
+#. These three are hidden for now, and should eventually just go away.
+#: ../src/nm-config.c:362
+msgid "An http(s) address for checking internet connectivity"
+msgstr "இணைய இணைபà¯à®ªà¯ˆà®šà¯ சோதிகà¯à®• ஒர௠http(s) à®®à¯à®•à®µà®°à®¿"
-#: ../tui/nmt-edit-connection-list.c:129
-#| msgid "Address"
-msgid "Add"
-msgstr "சேரà¯"
+#: ../src/nm-config.c:363
+msgid "The interval between connectivity checks (in seconds)"
+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 "திரà¯à®¤à¯à®¤à¯..."
+#: ../src/nm-config.c:364
+msgid "The expected start of the response"
+msgstr "எதிரà¯à®ªà®¾à®°à¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯ பதிலளிபà¯à®ªà®¿à®©à¯ தொடகà¯à®•à®®à¯"
-#: ../tui/nmt-edit-connection-list.c:135 ../tui/nmtui-edit.c:471
-msgid "Delete"
-msgstr "அழி"
+#: ../src/nm-config.c:364
+msgid "Bingo!"
+msgstr "Bingo!"
-#: ../tui/nmt-editor.c:81
-#, c-format
-msgid "Could not create editor for connection '%s' of type '%s'."
+#. Interface/IP config
+#: ../src/nm-iface-helper.c:296
+#| msgid "Parent interface [none]: "
+msgid "The interface to manage"
+msgstr "நிரà¯à®µà®•à®¿à®•à¯à®• வேணà¯à®Ÿà®¿à®¯ இடைமà¯à®•à®®à¯"
+
+#: ../src/nm-iface-helper.c:296
+msgid "eth0"
+msgstr "eth0"
+
+#: ../src/nm-iface-helper.c:297
+#| msgid "connection"
+msgid "Connection UUID"
+msgstr "இணைபà¯à®ªà¯ UUID"
+
+#: ../src/nm-iface-helper.c:297
+msgid "661e8cd0-b618-46b8-9dc9-31a52baaa16b"
+msgstr "661e8cd0-b618-46b8-9dc9-31a52baaa16b"
+
+#: ../src/nm-iface-helper.c:298
+msgid "Whether to manage IPv6 SLAAC"
+msgstr "IPv6 SLAAC ஠நிரà¯à®µà®•à®¿à®•à¯à®• வேணà¯à®Ÿà¯à®®à®¾"
+
+#: ../src/nm-iface-helper.c:299
+msgid "Whether SLAAC must be successful"
+msgstr "SLAAC வெறà¯à®±à®¿à®•à®°à®®à®¾à®• இரà¯à®•à¯à®• வேணà¯à®Ÿà¯à®®à®¾"
+
+#: ../src/nm-iface-helper.c:300
+msgid "Use an IPv6 temporary privacy address"
+msgstr "IPv6 தறà¯à®•à®¾à®²à®¿à®• தனியà¯à®°à®¿à®®à¯ˆ à®®à¯à®•à®µà®°à®¿ ஒனà¯à®±à¯ˆà®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯"
+
+#: ../src/nm-iface-helper.c:301
+#| msgid "Cloned MAC address"
+msgid "Current DHCPv4 address"
+msgstr "தறà¯à®ªà¯‹à®¤à¯ˆà®¯ DHCPv4 à®®à¯à®•à®µà®°à®¿"
+
+#: ../src/nm-iface-helper.c:302
+msgid "Whether DHCPv4 must be successful"
+msgstr "DHCPv4 வெறà¯à®±à®¿à®•à®°à®®à®¾à®• இரà¯à®•à¯à®• வேணà¯à®Ÿà¯à®®à®¾"
+
+#: ../src/nm-iface-helper.c:303
+#| msgid "unsupported DHCP client '%s'"
+msgid "Hex-encoded DHCPv4 client ID"
+msgstr "ஹெகà¯à®¸à¯-கà¯à®±à®¿à®¯à¯€à®Ÿà®¾à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ DHCPv4 கிளையன௠ID"
+
+#: ../src/nm-iface-helper.c:304
+msgid "Hostname to send to DHCP server"
+msgstr "DHCP சேவையகதà¯à®¤à®¿à®±à¯à®•à¯ அனà¯à®ªà¯à®ª வேணà¯à®Ÿà®¿à®¯ வழஙà¯à®•à®¿ பெயரà¯"
+
+#: ../src/nm-iface-helper.c:304
+msgid "barbar"
+msgstr "barbar"
+
+#: ../src/nm-iface-helper.c:305
+#| msgid "no priority to remove"
+msgid "Route priority for IPv4"
+msgstr "IPv4 கà¯à®•à®¾à®© தட à®®à¯à®©à¯à®©à¯à®°à®¿à®®à¯ˆ"
+
+#: ../src/nm-iface-helper.c:305
+msgid "0"
+msgstr "0"
+
+#: ../src/nm-iface-helper.c:306
+#| msgid "no priority to remove"
+msgid "Route priority for IPv6"
+msgstr "IPv6 கà¯à®•à®¾à®© தட à®®à¯à®©à¯à®©à¯à®°à®¿à®®à¯ˆ"
+
+#: ../src/nm-iface-helper.c:306
+msgid "1024"
+msgstr "1024"
+
+#: ../src/nm-iface-helper.c:307
+msgid "Hex-encoded Interface Identifier"
+msgstr "ஹெகà¯à®¸à¯-கà¯à®±à®¿à®¯à¯€à®Ÿà®¾à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ இடைமà¯à®• அடையாளஙà¯à®•à®¾à®Ÿà¯à®Ÿà®¿"
+
+#: ../src/nm-iface-helper.c:328
+msgid ""
+"nm-iface-helper is a small, standalone process that manages a single network "
+"interface."
msgstr ""
-"'%s' வகையைச௠சேரà¯à®¨à¯à®¤ இணைபà¯à®ªà¯ '%s' கà¯à®•à¯ திரà¯à®¤à¯à®¤à®¿à®¯à¯ˆ உரà¯à®µà®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
+"nm-iface-helper எனà¯à®ªà®¤à¯ சிறிய, தனிதà¯à®¤à¯ இயஙà¯à®•à¯à®•à®¿à®©à¯à®± ஒர௠செயலாகà¯à®•à®®à®¾à®•à¯à®®à¯. அத௠ஒர௠"
+"பிணைய இடைமà¯à®•à®¤à¯à®¤à¯ˆ நிரà¯à®µà®•à®¿à®•à¯à®•à¯à®®à¯."
-#: ../tui/nmt-editor.c:85
+#: ../src/nm-iface-helper.c:337
#, c-format
-#| msgid "Could not allocate memory for PEM file creation."
-msgid "Could not create editor for invalid connection '%s'."
-msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ இணைபà¯à®ªà¯ '%s' கà¯à®•à¯ திரà¯à®¤à¯à®¤à®¿à®¯à¯ˆ உரà¯à®µà®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ."
+msgid "An interface name and UUID are required\n"
+msgstr "இடைமà¯à®•à®ªà¯ பெயர௠மறà¯à®±à¯à®®à¯ UUID தேவைபà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯\n"
-#: ../tui/nmt-editor.c:95
-#| msgid "disconnecting"
-msgid "Edit connection"
-msgstr "இணைபà¯à®ªà¯ˆà®¤à¯ திரà¯à®¤à¯à®¤à¯"
-
-#: ../tui/nmt-editor.c:134
+#: ../src/nm-iface-helper.c:402
#, c-format
-#| msgid "Error: Unknown connection: %s."
-msgid "Error saving connection: %s"
-msgstr "இணைபà¯à®ªà¯ˆ சேமிகà¯à®•à¯à®®à¯ போத௠பிழை: %s"
+#| msgid "Failed to find expected PKCS#8 end tag '%s'."
+msgid "Failed to find interface index for %s\n"
+msgstr "%s கà¯à®•à®¾à®© இடைமà¯à®• கà¯à®±à®¿à®ªà¯à®ªà¯ˆà®•à¯ கணà¯à®Ÿà®±à®¿à®¯ à®®à¯à®Ÿà®¿à®¯à®¾à®®à®²à¯ போனதà¯\n"
-#: ../tui/nmt-editor.c:144
+#: ../src/nm-iface-helper.c:418
#, c-format
-#| msgid "unable to connect to netlink: %s"
-msgid "Unable to save connection: %s"
-msgstr "இணைபà¯à®ªà¯ˆ சேமிகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+msgid "(%s): Invalid IID %s\n"
+msgstr "(%s): தவறான IID %s\n"
-#: ../tui/nmt-editor.c:158
+#: ../src/nm-logging.c:137
#, 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 "(தனிபà¯à®ªà®¯à®©à¯ தடஙà¯à®•à®³à¯ இலà¯à®²à¯ˆ)"
+msgid "Unknown log level '%s'"
+msgstr "தெரியாத பதிவ௠நிலை '%s'"
-#: ../tui/nmt-page-ip4.c:103 ../tui/nmt-page-ip6.c:103
+#: ../src/nm-logging.c:219
#, 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 "எதà¯à®µà¯à®®à®¿à®²à¯à®²à¯ˆ"
+msgid "Unknown log domain '%s'"
+msgstr "தெரியாத பதிவ௠டொமைன௠'%s'"
-#: ../tui/nmt-page-wifi.c:86
-msgid "WPA & WPA2 Personal"
-msgstr "WPA & WPA2 தனிபà¯à®ªà®Ÿà¯à®Ÿ"
+#: ../src/nm-manager.c:3369
+msgid "VPN connection"
+msgstr "VPN இணைபà¯à®ªà¯"
-#: ../tui/nmt-page-wifi.c:87
-#| msgid "Enterprise "
-msgid "WPA & WPA2 Enterprise"
-msgstr "WPA & WPA2 கடவà¯à®šà¯à®šà¯Šà®²à¯"
+#: ../src/nm-sleep-monitor-systemd.c:115
+msgid "NetworkManager needs to turn off networks"
+msgstr "NetworkManager பிணையஙà¯à®•à®³à¯ˆ அணைகà¯à®• வேணà¯à®Ÿà®¿à®¯à¯à®³à¯à®³à®¤à¯"
-#: ../tui/nmt-page-wifi.c:88
-msgid "WEP 40/128-bit Key (Hex or ASCII)"
-msgstr "WEP 40/128-பிட௠விசை (Hex அலà¯à®²à®¤à¯ ASCII)"
+#: ../src/settings/plugins/ibft/plugin.c:66
+#, c-format
+msgid "ibft: failed to read iscsiadm records: %s"
+msgstr "ibft: iscsiadm பதிவà¯à®•à®³à¯ˆ வாசிபà¯à®ªà®¤à¯ தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯: %s"
-#: ../tui/nmt-page-wifi.c:89
-#| msgid "%d (104/128-bit passphrase)"
-msgid "WEP 128-bit Passphrase"
-msgstr "WEP 128-பிட௠கடவà¯à®µà®¾à®•à¯à®•à®¿à®¯à®®à¯"
+#: ../src/settings/plugins/ibft/plugin.c:74
+#, c-format
+msgid "ibft: read connection '%s'"
+msgstr "ibft: இணைபà¯à®ªà¯ '%s' ஠வாசி"
-#: ../tui/nmt-page-wifi.c:90
-msgid "Dynamic WEP (802.1x)"
-msgstr "மாறà¯à®®à¯ WEP (802.1x)"
+#: ../src/settings/plugins/ibft/plugin.c:80
+#, c-format
+msgid "ibft: failed to read iscsiadm record: %s"
+msgstr "ibft: iscsiadm பதிவை வாசிதà¯à®¤à®²à¯ தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯: %s"
-#: ../tui/nmt-page-wifi.c:91
-msgid "LEAP"
-msgstr "LEAP"
+#: ../src/settings/plugins/ifcfg-rh/reader.c:112
+msgid "System"
+msgstr "கணினி"
-#: ../tui/nmt-page-wifi.c:96
-#| msgid "Default"
-msgctxt "WEP key index"
-msgid "1 (Default)"
-msgstr "1 (à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯)"
+#~ msgid "invalid prefix '%s'; <1-32> allowed"
+#~ msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà¯ '%s' ; <1-32> அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯"
-#: ../tui/nmt-page-wifi.c:97
-msgctxt "WEP key index"
-msgid "2"
-msgstr "2"
+#~ msgid "invalid prefix '%s'; <1-128> allowed"
+#~ msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà¯ '%s'; <1-128> அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯"
-#: ../tui/nmt-page-wifi.c:98
-msgctxt "WEP key index"
-msgid "3"
-msgstr "3"
+#~ msgid "invalid route destination address '%s'"
+#~ msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ தட இலகà¯à®•à¯ à®®à¯à®•à®µà®°à®¿ '%s'"
-#: ../tui/nmt-page-wifi.c:99
-msgctxt "WEP key index"
-msgid "4"
-msgstr "4"
+#~ msgid "invalid next hop address '%s'"
+#~ msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ hop à®®à¯à®•à®µà®°à®¿ '%s'"
-#: ../tui/nmt-page-wifi.c:104
-#| msgid "System"
-msgid "Open System"
-msgstr "Open System"
+#~ msgid ""
+#~ "Error: 'mode': '%s' is not a valid InfiniBand transport mode [datagram, "
+#~ "connected]."
+#~ msgstr ""
+#~ "பிழை: 'mode': '%s' எனà¯à®ªà®¤à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© InfiniBand போகà¯à®•à¯à®µà®°à®¤à¯à®¤à¯à®ªà¯ பயனà¯à®®à¯à®±à¯ˆ அலà¯à®² "
+#~ "[டேடà¯à®Ÿà®¾à®•à¯à®°à®¾à®®à¯, இணைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯]."
-#: ../tui/nmt-page-wifi.c:105
-msgid "Shared Key"
-msgstr "பகிரபà¯à®ªà®Ÿà¯à®Ÿ விசை"
+#~ msgid "Error: Could not get system settings: %s."
+#~ msgstr "பிழை: கணினி அமைவà¯à®•à®³à¯ˆà®ªà¯ பெற à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s."
-#: ../tui/nmt-page-wifi.c:253
-msgid "Channel"
-msgstr "சேனலà¯"
+#~ msgid "Error: Can't obtain connections: settings service is not running."
+#~ msgstr "பிழை: இணைபà¯à®ªà¯à®•à®³à¯ˆà®ªà¯ பெற à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: அமைவà¯à®•à®³à®¿à®©à¯ சேவை இயஙà¯à®•à®µà®¿à®²à¯à®²à¯ˆ."
-#: ../tui/nmt-page-wifi.c:258
-msgid "Security"
-msgstr "பாதà¯à®•à®¾à®ªà¯à®ªà¯"
+#~ msgid "Error: %s"
+#~ msgstr "பிழை: %s"
-#: ../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 "கடவà¯à®šà¯à®šà¯Šà®²à¯"
+#~ msgid "'%s' is not valid (use ip[/prefix] [gateway])"
+#~ msgstr "'%s' செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®²à¯à®² (ip[/prefix] [gateway] à®à®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯)"
-#. "wpa-enterprise"
-#. FIXME
-#: ../tui/nmt-page-wifi.c:279
-msgid "(No support for wpa-enterprise yet...)"
-msgstr "(இபà¯à®ªà¯‹à®¤à¯ wpa-enterprise கà¯à®•à¯ ஆதரவ௠இலà¯à®²à¯ˆ...)"
+#~ msgid ""
+#~ "Update secrets expects a full connection, instead only a setting is "
+#~ "provided."
+#~ msgstr ""
+#~ "இரகசியஙà¯à®•à®³à¯ˆà®ªà¯ பà¯à®¤à¯à®ªà¯à®ªà®¿à®•à¯à®• à®®à¯à®´à¯ இணைபà¯à®ªà¯ எதிரà¯à®ªà®¾à®°à¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯, ஆனால௠ஒர௠அமைவ௠"
+#~ "மடà¯à®Ÿà¯à®®à¯‡ வழஙà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯."
-#: ../tui/nmt-page-wifi.c:286 ../tui/nmt-secret-agent.c:265
-msgid "Key"
-msgstr "விசை"
+#~ msgid "connection type '%s' is not a valid base type"
+#~ msgstr "இணைபà¯à®ªà¯ வகை '%s' செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®© அடிபà¯à®ªà®Ÿà¯ˆ வகையலà¯à®²"
-#: ../tui/nmt-page-wifi.c:289 ../tui/nmt-page-wifi.c:308
-#| msgid "WEP "
-msgid "WEP index"
-msgstr "WEP அடà¯à®Ÿà®µà®£à¯ˆ"
+#~ msgid "Detect a slave connection with '"
+#~ msgstr "இதைக௠கொணà¯à®Ÿ ஒர௠ஸà¯à®²à¯‡à®µà¯ இணைபà¯à®ªà¯ˆà®•à¯ கணà¯à®Ÿà¯à®ªà®¿à®Ÿà®¿: '"
-#: ../tui/nmt-page-wifi.c:297 ../tui/nmt-page-wifi.c:316
-msgid "Authentication"
-msgstr "à®…à®™à¯à®•à¯€à®•à®¾à®°à®®à¯"
+#~ msgid "IPv4 address / label count mismatch (%d vs %d)"
+#~ msgstr "IPv4 à®®à¯à®•à®µà®°à®¿ / லேபிள௠எணà¯à®£à®¿à®•à¯à®•à¯ˆ பொரà¯à®¨à¯à®¤à®µà®¿à®²à¯à®²à¯ˆ (%d மறà¯à®±à¯à®®à¯ %d)"
-#. "dynamic-wep"
-#. FIXME
-#: ../tui/nmt-page-wifi.c:322
-msgid "(No support for dynamic-wep yet...)"
-msgstr "(இபà¯à®ªà¯‹à®¤à¯ dynamic-wep கà¯à®•à¯ ஆதரவ௠இலà¯à®²à¯ˆ...)"
+#~ msgid "GModules are not supported on your platform!\n"
+#~ msgstr "உஙà¯à®•à®³à¯ இயகà¯à®•à¯à®¤à®³à®¤à¯à®¤à®¿à®²à¯ GModules கà¯à®•à¯ ஆதரவிலà¯à®²à¯ˆ!\n"
-#. 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 "பயனரà¯à®ªà¯†à®¯à®°à¯"
+#~ msgid "'dhclient' could not be found or was disabled."
+#~ msgstr "'dhclient' à®à®•à¯ கணà¯à®Ÿà¯à®ªà®¿à®Ÿà®¿à®•à¯à®•à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ அலà¯à®²à®¤à¯ à®®à¯à®Ÿà®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯."
-#: ../tui/nmt-password-fields.c:130
-msgid "Ask for this password every time"
-msgstr "ஒவà¯à®µà¯Šà®°à¯ à®®à¯à®±à¯ˆà®¯à¯à®®à¯ இநà¯à®¤ கடவà¯à®šà¯à®šà¯Šà®²à¯à®²à¯ˆà®•à¯ கேடà¯à®•à®µà¯à®®à¯"
+#~ msgid "DUN connection"
+#~ msgstr "DUN இணைபà¯à®ªà¯"
-#: ../tui/nmt-password-fields.c:131
-msgid "Show password"
-msgstr "கடவà¯à®šà¯à®šà¯Šà®²à¯à®²à¯ˆà®•à¯ காடà¯à®Ÿà¯"
+#~ msgid "not running"
+#~ msgstr "இயஙà¯à®•à®µà®¿à®²à¯à®²à¯ˆ"
-#: ../tui/nmt-route-table.c:219
-msgid "Destination"
-msgstr "இலகà¯à®•à¯"
+#~ msgid "Error saving connection: %s"
+#~ msgstr "இணைபà¯à®ªà¯ˆ சேமிகà¯à®•à¯à®®à¯ போத௠பிழை: %s"
-#: ../tui/nmt-route-table.c:219
-msgid "Prefix"
-msgstr "à®®à¯à®©à¯à®ªà¯Šà®°à¯à®¤à¯à®¤à®®à¯"
+#~| msgid "'%s' is not a valid value for the property"
+#~ msgid "invalid value in compatibility property"
+#~ msgstr "இணகà¯à®•à®¤à¯à®¤à®©à¯à®®à¯ˆ பணà¯à®ªà®¿à®²à¯ செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ மதிபà¯à®ªà¯"
-#: ../tui/nmt-route-table.c:228
-msgid "Next Hop"
-msgstr "அடà¯à®¤à¯à®¤ ஹாபà¯"
+#~ msgid "invalid prefix '%s'; <0-32> allowed"
+#~ msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà¯ '%s'; <0-32> அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯"
-#: ../tui/nmt-route-table.c:236
-msgid "Metric"
-msgstr "மெடà¯à®°à®¿à®•à¯"
+#~| msgid "invalid field '%s'"
+#~ msgid "invalid IPv6 route '%s'"
+#~ msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ IPv6 தடம௠'%s'"
-#: ../tui/nmt-route-table.c:256
-msgid "No custom routes are defined."
-msgstr "தனிபà¯à®ªà®¯à®©à¯ தடஙà¯à®•à®³à¯ à®à®¤à¯à®®à¯ வரையறà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ."
+#~ msgid "invalid prefix '%s'; <0-128> allowed"
+#~ msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ à®®à¯à®©à¯à®©à¯Šà®Ÿà¯à®Ÿà¯ '%s'; <0-128> அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯"
-#: ../tui/nmt-secret-agent.c:223
-msgid "Identity"
-msgstr "அடையாளமà¯"
+#~ 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"
-#: ../tui/nmt-secret-agent.c:228
-msgid "Private key password"
-msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ விசை கடவà¯à®šà¯à®šà¯Šà®²à¯"
+#~ msgid ""
+#~ "Error: Device '%s' is waiting for slaves before proceeding with "
+#~ "activation."
+#~ msgstr ""
+#~ "பிழை: சாதனம௠'%s' செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®²à¯ˆà®¤à¯ தொடரà¯à®®à¯ à®®à¯à®©à¯à®ªà¯ ஸà¯à®²à¯‡à®µà¯à®•à®³à¯à®•à¯à®•à®¾à®• காதà¯à®¤à®¿à®°à¯à®•à¯à®•à®¿à®±à®¤à¯."
-#: ../tui/nmt-secret-agent.c:309
-msgid "Service"
-msgstr "சேவை"
+#~| msgid "Error: missing argument for '%s' option."
+#~ msgid "There are 3 optional arguments for '%s' connection type.\n"
+#~ msgstr "'%s' இணைபà¯à®ªà¯ வகைகà¯à®•à¯ 3 கடà¯à®Ÿà®¾à®¯à®®à®±à¯à®± மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ உளà¯à®³à®©.\n"
-#: ../tui/nmt-secret-agent.c:340
-msgid "Authentication required by wireless network"
-msgstr "வயரà¯à®²à¯†à®¸à¯ பிணையதà¯à®¤à®¿à®±à¯à®•à¯ à®…à®™à¯à®•à¯€à®•à®¾à®°à®®à¯ தேவைபà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯"
+#~ msgid "Transport mode (datagram or connected) [datagram]: "
+#~ msgstr "போகà¯à®•à¯à®µà®°à®¤à¯à®¤à¯à®ªà¯ பயனà¯à®®à¯à®±à¯ˆ (டேடà¯à®Ÿà®¾à®•à¯à®°à®¾à®®à¯ அலà¯à®²à®¤à¯ இணைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯) [datagram]: "
-#: ../tui/nmt-secret-agent.c:341
-#, c-format
-msgid ""
-"Passwords or encryption keys are required to access the wireless network "
-"'%s'."
-msgstr ""
-"வயரà¯à®²à¯†à®¸à¯ பிணையம௠'%s' ஠அணà¯à®• கடவà¯à®šà¯à®šà¯Šà®±à¯à®•à®³à¯ அலà¯à®²à®¤à¯ மறைகà¯à®±à®¿à®¯à®¾à®•à®•à¯ விசைகள௠"
-"தேவைபà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯"
+#~ msgid ""
+#~ "There are 2 optional arguments for 'mobile broadband' connection type.\n"
+#~ msgstr "'மொபைல௠பிராடà¯à®ªà¯‡à®©à¯à®Ÿà¯' இணைபà¯à®ªà¯ வகைகà¯à®•à¯ 2 கடà¯à®Ÿà®¾à®¯à®®à®±à¯à®± மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ உளà¯à®³à®©.\n"
-#: ../tui/nmt-secret-agent.c:349
-#| msgid "connecting (need authentication)"
-msgid "Wired 802.1X authentication"
-msgstr "ஒயரà¯à®Ÿà¯ 802.1X à®…à®™à¯à®•à¯€à®•à®¾à®°à®®à¯"
+#~ msgid "Bluetooth type (panu, dun-gsm or dun-cdma) [panu]: "
+#~ msgstr "Bluetooth வகை (panu, dun-gsm அலà¯à®²à®¤à¯ dun-cdma) [panu]: "
-#: ../tui/nmt-secret-agent.c:352
-#| msgid "Networking"
-msgid "Network name"
-msgstr "பிணைய பெயரà¯"
+#~ msgid "There are optional arguments for 'bond' connection type.\n"
+#~ msgstr "'bond' இணைபà¯à®ªà¯ வகைகà¯à®•à¯ கடà¯à®Ÿà®¾à®¯à®®à®±à¯à®± மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ உளà¯à®³à®©.\n"
-#: ../tui/nmt-secret-agent.c:359
-#| msgid "connecting (need authentication)"
-msgid "DSL authentication"
-msgstr "DSL à®…à®™à¯à®•à¯€à®•à®°à®¿à®ªà¯à®ªà¯"
+#~ msgid "Bonding monitoring mode (miimon or arp) [miimon]: "
+#~ msgstr "பிணைபà¯à®ªà®¾à®•à¯à®•à¯à®®à¯ கணà¯à®•à®¾à®£à®¿à®ªà¯à®ªà¯à®ªà¯ பயனà¯à®®à¯à®±à¯ˆ (miimon அலà¯à®²à®¤à¯ arp) [miimon]: "
-#: ../tui/nmt-secret-agent.c:367
-#| msgid "not required, "
-msgid "PIN code required"
-msgstr "PIN கà¯à®±à®¿à®¯à¯€à®Ÿà¯ தேவைபà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯"
+#~ msgid "There are 6 optional arguments for 'bridge' connection type.\n"
+#~ msgstr "'bridge' இணைபà¯à®ªà¯ வகைகà¯à®•à¯ 6 கடà¯à®Ÿà®¾à®¯à®®à®±à¯à®± மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ உளà¯à®³à®©.\n"
-#: ../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 கà¯à®±à®¿à®¯à¯€à®Ÿà¯ மொபைல௠பிராடà¯à®ªà¯‡à®£à¯à®Ÿà¯ சாதனதà¯à®¤à®¿à®±à¯à®•à¯ தேவைபà¯à®ªà®Ÿà¯à®•à®¿à®±à®¤à¯"
+#~| msgid "Error: 'nm status': %s"
+#~ msgid "Error: 'stp': '%s'.\n"
+#~ msgstr "பிழை: 'stp': '%s'.\n"
-#: ../tui/nmt-secret-agent.c:370
-#| msgid "VPN"
-msgid "PIN"
-msgstr "PIN"
+#~ msgid "There are 3 optional arguments for 'bridge-slave' connection type.\n"
+#~ msgstr "'bridge-slave' இணைபà¯à®ªà¯ வகைகà¯à®•à¯ 3 கடà¯à®Ÿà®¾à®¯à®®à®±à¯à®± மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ உளà¯à®³à®©.\n"
-#: ../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 "Hairpin (yes/no) [yes]: "
+#~ msgstr "ஹேரà¯à®ªà®¿à®©à¯ (yes/no) [yes]: "
-#: ../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 "Error: 'show active': %s"
+#~ msgid "Error: 'hairpin': '%s'.\n"
+#~ msgstr "பிழை: 'hairpin': '%s'.\n"
-#: ../tui/nmt-slave-list.c:138
-msgid "Select the type of slave connection you wish to add."
-msgstr "நீஙà¯à®•à®³à¯ சேரà¯à®•à¯à®• விரà¯à®®à¯à®ªà¯à®®à¯ அடிமை இணைபà¯à®ªà¯ வகையைத௠தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•à®µà¯à®®à¯."
+#~| msgid "Error: missing argument for '%s' option."
+#~ msgid "There is 1 optional argument for 'VPN' connection type.\n"
+#~ msgstr "'VPN' இணைபà¯à®ªà¯ வகைகà¯à®•à¯ கடà¯à®Ÿà®¾à®¯à®®à®±à¯à®± 1 மதிபà¯à®ªà¯à®°à¯ உளà¯à®³à®¤à¯.\n"
-#: ../tui/nmt-widget-list.c:142
-msgid "Add..."
-msgstr "சேரà¯..."
+#~ msgid ""
+#~ "save :: save the connection\n"
+#~ "\n"
+#~ "Sends the connection to NetworkManager that will save it.\n"
+#~ msgstr ""
+#~ "save :: இணைபà¯à®ªà¯ˆà®šà¯ சேமி\n"
+#~ "\n"
+#~ "இணைபà¯à®ªà¯ˆ NetworkManager கà¯à®•à¯ அனà¯à®ªà¯à®ªà¯à®®à¯, NetworkManager அதைச௠சேமிகà¯à®•à¯à®®à¯.\n"
-#: ../tui/nmt-widget-list.c:205
-msgid "Remove"
-msgstr "அகறà¯à®±à¯"
+#~ 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"
-#: ../tui/nmtui-connect.c:82
-#| msgid "connection failed"
-msgid "Activation failed"
-msgstr "செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®µà®¤à®¿à®²à¯ தோலà¯à®µà®¿à®¯à®Ÿà¯ˆà®¨à¯à®¤à®¤à¯"
+#~| msgid "'%s' security requires '%s' setting presence"
+#~ msgid "Error: '%s' setting not present\n"
+#~ msgstr "பிழை: '%s' அமைவ௠இலà¯à®²à¯ˆ\n"
-#: ../tui/nmtui-connect.c:134
-#| msgid "\rConnecting"
-msgid "Connecting..."
-msgstr "இணைகà¯à®•à®¿à®±à®¤à¯..."
+#~ 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"
-#: ../tui/nmtui-connect.c:159
-#, c-format
-#| msgid "List of active connections"
-msgid "Could not activate connection: %s"
-msgstr "இணைபà¯à®ªà¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+#~ msgid "0 (unknown)"
+#~ msgstr "0 (தெரியாத)"
-#: ../tui/nmtui-connect.c:218 ../tui/nmtui-connect.c:274
-#| msgid "activated"
-msgid "Activate"
-msgstr "செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯"
+#~ msgid "any, "
+#~ msgstr "à®à®¤à®¾à®µà®¤à¯,"
-#: ../tui/nmtui-connect.c:220
-#| msgid "deactivated"
-msgid "Deactivate"
-msgstr "செயலà¯à®®à¯à®Ÿà®•à¯à®•à¯"
+#~ msgid "900 MHz, "
+#~ msgstr "900 MHz, "
-#: ../tui/nmtui-connect.c:279 ../tui/nmtui-edit.c:102 ../tui/nmtui.c:114
-msgid "Quit"
-msgstr "வெளியேறà¯"
+#~ msgid "1800 MHz, "
+#~ msgstr "1800 MHz, "
-#: ../tui/nmtui-connect.c:304
-#, c-format
-#| msgid "PAN connection %d"
-msgid "No such connection '%s'"
-msgstr "'%s' என ஒர௠இணைபà¯à®ªà¯ இலà¯à®²à¯ˆ"
+#~ msgid "1900 MHz, "
+#~ msgstr "1900 MHz, "
-#: ../tui/nmtui-connect.c:306
-#| msgid "Connection activated\n"
-msgid "Connection is already active"
-msgstr "இணைபà¯à®ªà¯ à®®à¯à®©à¯à®ªà¯‡ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯"
+#~ msgid "850 MHz, "
+#~ msgstr "850 MHz, "
-#: ../tui/nmtui-edit.c:209
-msgid "Create"
-msgstr "உரà¯à®µà®¾à®•à¯à®•à®µà¯à®®à¯"
+#~ msgid "WCDMA 3GPP UMTS 2100 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../tui/nmtui-edit.c:350
-msgid "Select the type of connection you wish to create."
-msgstr "உரà¯à®µà®¾à®•à¯à®• விரà¯à®®à¯à®ªà¯à®®à¯ இணைபà¯à®ªà¯ வகையை தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•à®µà¯à®®à¯."
+#~ msgid "WCDMA 3GPP UMTS 1800 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../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 "பà¯à®¤à®¿à®¯ இணைபà¯à®ªà¯"
+#~ msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../tui/nmtui-edit.c:443
-#, c-format
-#| msgid "unable to connect to netlink: %s"
-msgid "Unable to delete connection: %s"
-msgstr "இணைபà¯à®ªà¯ˆà®•à¯ கணà¯à®Ÿà®±à®¿à®¯ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+#~ msgid "WCDMA 3GPP UMTS 800 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../tui/nmtui-edit.c:472
-#, c-format
-msgid "Are you sure you want to delete the connection '%s'?"
-msgstr "நிசà¯à®šà®¯à®®à¯ இணைபà¯à®ªà¯ '%s' ஠அழிகà¯à®• வேணà¯à®Ÿà¯à®®à®¾?"
+#~ msgid "WCDMA 3GPP UMTS 850 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../tui/nmtui-edit.c:486
-#, c-format
-#| msgid "Error: cannot delete unknown connection(s): %s."
-msgid "Could not delete connection: %s"
-msgstr "இணைபà¯à®ªà¯ˆ அழிகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+#~ msgid "WCDMA 3GPP UMTS 900 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../tui/nmtui-hostname.c:47
-msgid "Set Hostname"
-msgstr "வழஙà¯à®•à®¿ பெயரை அமைகà¯à®•à®µà¯à®®à¯"
+#~ msgid "WCDMA 3GPP UMTS 1700 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../tui/nmtui-hostname.c:55
-msgid "Hostname"
-msgstr "வழஙà¯à®•à®¿ பெயரà¯"
+#~ msgid "WCDMA 3GPP UMTS 1900 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 1900 MHz, "
-#. 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 "WCDMA 3GPP UMTS 2600 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 2600 MHz, "
-#: ../tui/nmtui-hostname.c:116
-#, c-format
-#| msgid "unable to connect to netlink: %s"
-msgid "Unable to set hostname: %s"
-msgstr "வழஙà¯à®•à®¿ பெயரை அமைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
+#~ msgid "'%s' is not valid (use <dest IP>/prefix <next-hop IP> [metric])"
+#~ msgstr ""
+#~ "'%s' செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®©à®¤à®²à¯à®² (<dest IP>/prefix <next-hop IP> [metric] à®à®ªà¯ "
+#~ "பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯)"
-#: ../tui/nmtui.c:59 ../tui/nmtui.c:62
-#| msgid "connecting"
-msgid "connection"
-msgstr "இணைபà¯à®ªà¯"
+#~ msgid "'%s' doesn't match the virtual interface name '%s'"
+#~ msgstr "'%s' ஆனத௠மெயà¯à®¨à®¿à®•à®°à¯ இடைமà¯à®•à®ªà¯ பெயர௠'%s' கà¯à®•à¯à®ªà¯ பொரà¯à®¨à¯à®¤à®µà®¿à®²à¯à®²à¯ˆ"
-#: ../tui/nmtui.c:60
-#| msgid "disconnecting"
-msgid "Edit a connection"
-msgstr "ஒர௠இணைபà¯à®ªà¯ˆà®¤à¯ திரà¯à®¤à¯à®¤à®µà¯à®®à¯"
+#~| msgid "IPv4 configuration is not allowed for bonding slave"
+#~ msgid "IPv4 configuration is not allowed for slave"
+#~ msgstr "ஸà¯à®²à¯‡à®µà¯à®•à¯à®•à¯ IPv4 அமைவாகà¯à®•à®®à¯ அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà®¾à®¤à¯"
-#: ../tui/nmtui.c:63
-#| msgid "Active connection details"
-msgid "Activate a connection"
-msgstr "ஒர௠இணைபà¯à®ªà¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯"
+#~| msgid "IPv6 configuration is not allowed for bonding slave"
+#~ msgid "IPv6 configuration is not allowed for slave"
+#~ msgstr "ஸà¯à®²à¯‡à®µà¯à®•à¯à®•à¯ IPv6 அமைவாகà¯à®•à®®à¯ அனà¯à®®à®¤à®¿à®•à¯à®•à®ªà¯à®ªà®Ÿà®¾à®¤à¯"
-#: ../tui/nmtui.c:65
-msgid "new hostname"
-msgstr "பà¯à®¤à®¿à®¯ வழஙà¯à®•à®¿ பெயரà¯"
+#~ msgid "Invalid option. Please use --help to see a list of valid options.\n"
+#~ msgstr ""
+#~ "தவறான விரà¯à®ªà¯à®ªà®®à¯. உதவியை --பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®¿ சரியான விரà¯à®ªà¯à®ªà®™à¯à®•à®³à®¿à®©à¯ படà¯à®Ÿà®¿à®¯à®²à¯ˆà®ªà¯ பாரà¯à®•à¯à®•à®µà¯à®®à¯.\n"
-#: ../tui/nmtui.c:66
-#| msgid "Modify persistent system hostname"
-msgid "Set system hostname"
-msgstr "கணினி வழஙà¯à®•à®¿ பெயரை அமைகà¯à®•à®µà¯à®®à¯"
+#~ msgid "error occurred while waiting for data on socket"
+#~ msgstr "சாகà¯à®•à¯†à®Ÿà¯à®Ÿà®¿à®²à¯ தரவிறà¯à®•à®¾à®• காதà¯à®¤à®¿à®°à¯à®•à¯à®•à¯à®®à¯ போத௠பிழை à®à®±à¯à®ªà®Ÿà¯à®Ÿà®¤à¯"
-#: ../tui/nmtui.c:89
-#| msgid "NetworkManager status"
-msgid "NetworkManager TUI"
-msgstr "NetworkManager TUI"
+#~ msgid "error processing netlink message: %s"
+#~ msgstr "netlink செயà¯à®¤à®¿à®¯à®¿à®©à¯ செயலà¯à®®à¯à®±à¯ˆà®¯à®¿à®²à¯ பிழை: %s"
-#: ../tui/nmtui.c:97
-msgid "Please select an option"
-msgstr "ஒர௠விரà¯à®ªà¯à®ªà®¤à¯à®¤à¯ˆ தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•à®µà¯à®®à¯"
+#~ msgid "unable to connect to netlink for monitoring link status: %s"
+#~ msgstr "இணைபà¯à®ªà¯ நிலையை பாரà¯à®µà¯ˆà®¯à®¿à®Ÿ நெடà¯à®‡à®£à¯ˆà®ªà¯à®ªà¯ˆ இணைகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
-#: ../tui/nmtui.c:154
-msgid "Usage"
-msgstr "பயனà¯à®ªà®¾à®Ÿà¯"
+#~ msgid "unable to enable netlink handle credential passing: %s"
+#~ msgstr "netlink ஹாணà¯à®Ÿà®¿à®²à¯ நறà¯à®šà®¾à®©à¯à®±à¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
-#: ../tui/nmtui.c:221
-msgid "Could not parse arguments"
-msgstr "மதிபà¯à®ªà¯à®°à¯à®•à¯à®•à®³à¯ˆ பாகà¯à®ªà®Ÿà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ"
+#~ msgid "unable to allocate netlink handle for monitoring link status: %s"
+#~ msgstr "இணைபà¯à®ªà¯ நிலைகà¯à®•à®¾à®© netlink ஹாணà¯à®Ÿà®¿à®²à¯ˆ ஒதà¯à®•à¯à®•à®¿à®Ÿ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
-#: ../tui/nmtui.c:229
-#| msgid "Error: NetworkManager is not running."
-msgid "NetworkManager is not running."
-msgstr "NetworkManager இயஙà¯à®•à®µà®¿à®²à¯à®²à¯ˆ."
+#~ msgid "unable to join netlink group: %s"
+#~ msgstr "netlink கà¯à®´à¯à®µà¯à®Ÿà®©à¯ சேர à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ: %s"
#~ msgid "IP"
#~ msgstr "IP"
@@ -7368,21 +9177,12 @@ msgstr "NetworkManager இயஙà¯à®•à®µà®¿à®²à¯à®²à¯ˆ."
#~ 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."
@@ -7395,9 +9195,6 @@ msgstr "NetworkManager இயஙà¯à®•à®µà®¿à®²à¯à®²à¯ˆ."
#~ 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"
@@ -7526,9 +9323,6 @@ msgstr "NetworkManager இயஙà¯à®•à®µà®¿à®²à¯à®²à¯ˆ."
#~ msgid "Error: Obtaining active connection for '%s' failed."
#~ msgstr "Error: Obtaining active connection for '%s' failed."
-#~ msgid "Active connection path: %s\n"
-#~ msgstr "செயலà¯à®ªà®Ÿà¯à®®à¯ இணைபà¯à®ªà®¿à®©à¯ பாதை: %s\n"
-
#~ msgid "IP4-SETTINGS"
#~ msgstr "IP4-SETTINGS"
diff --git a/po/te.po b/po/te.po
index dbbd14c98..6b105dbff 100644
--- a/po/te.po
+++ b/po/te.po
@@ -6,555 +6,713 @@
# Krishna Babu K <kkrothap@redhat.com>, 2009, 2010, 2012, 2013, 2014.
msgid ""
msgstr ""
-"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"
+"Project-Id-Version: "
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=NetworkManager&keywords=I18N+L10N&component=Translations\n"
+"POT-Creation-Date: 2014-09-22 22:27+0000\n"
+"PO-Revision-Date: 2014-09-23 23:35+0530\n"
"Last-Translator: Krishnababu Krothapalli <kkrothap@redhat.com>\n"
"Language-Team: Telugu <kde-i18n-doc@kde.org>\n"
"Language: te\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"
-#: ../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
+#: ../clients/cli/common.c:38 ../clients/cli/common.c:50
+#: ../clients/cli/common.c:58 ../clients/cli/common.c:69
+#: ../clients/cli/connections.c:169 ../clients/cli/connections.c:191
msgid "GROUP"
-msgstr "GROUP"
+msgstr "సమూహం"
-#: ../cli/src/common.c:35 ../cli/src/common.c:55
+#. 0
+#: ../clients/cli/common.c:39 ../clients/cli/common.c:59
msgid "ADDRESS"
msgstr "ADDRESS"
-#: ../cli/src/common.c:36 ../cli/src/common.c:56
+#. 1
+#: ../clients/cli/common.c:40 ../clients/cli/common.c:60
msgid "ROUTE"
msgstr "ROUTE"
-#: ../cli/src/common.c:37 ../cli/src/common.c:57
+#. 2
+#: ../clients/cli/common.c:41 ../clients/cli/common.c:61
msgid "DNS"
msgstr "DNS"
-#: ../cli/src/common.c:38 ../cli/src/common.c:58
+#. 3
+#: ../clients/cli/common.c:42 ../clients/cli/common.c:62
msgid "DOMAIN"
msgstr "DOMAIN"
-#: ../cli/src/common.c:39
+#. 4
+#: ../clients/cli/common.c:43
msgid "WINS"
msgstr "WINS"
-#: ../cli/src/common.c:47 ../cli/src/common.c:66
+#. 0
+#: ../clients/cli/common.c:51 ../clients/cli/common.c:70
msgid "OPTION"
msgstr "OPTION"
-#: ../cli/src/common.c:404 ../cli/src/settings.c:2808
+#: ../clients/cli/common.c:377 ../clients/cli/settings.c:3049
+#: ../clients/cli/settings.c:3068
#, c-format
msgid "invalid IPv4 address '%s'"
msgstr "చెలà±à°²à°¨à°¿ IPv4 à°šà°¿à°°à±à°¨à°¾à°®à°¾ '%s'"
-#: ../cli/src/common.c:412
+#: ../clients/cli/common.c:385
#, c-format
msgid "invalid prefix '%s'; <1-32> allowed"
msgstr "చెలà±à°²à°¨à°¿ à°ªà±à°°à°¿à°«à°¿à°•à±à°¸à± '%s'; <1-32> à°…à°¨à±à°®à°¤à°¿à°‚à°šà°¿à°¨"
-#: ../cli/src/common.c:419 ../cli/src/common.c:472
+#: ../clients/cli/common.c:392 ../clients/cli/common.c:445
#, c-format
msgid "invalid gateway '%s'"
msgstr "చెలà±à°²à°¨à°¿ గేటà±â€Œà°µà±‡ '%s'"
-#: ../cli/src/common.c:457 ../cli/src/settings.c:3054
+#: ../clients/cli/common.c:430 ../clients/cli/settings.c:3395
+#: ../clients/cli/settings.c:3414
#, c-format
msgid "invalid IPv6 address '%s'"
msgstr "చెలà±à°²à°¨à°¿ IPv6 à°šà°¿à°°à±à°¨à°¾à°®à°¾ '%s'"
-#: ../cli/src/common.c:465
+#: ../clients/cli/common.c:438
#, c-format
msgid "invalid prefix '%s'; <1-128> allowed"
msgstr "చెలà±à°²à°¨à°¿ à°ªà±à°°à°¿à°«à°¿à°•à±à°¸à± '%s'; <1-128> à°…à°¨à±à°®à°¤à°¿à°‚చెనà±"
-#: ../cli/src/common.c:512
+#: ../clients/cli/common.c:521
#, c-format
-msgid "invalid IPv4 route '%s'"
-msgstr "చెలà±à°²à°¨à°¿ IPv4 రౌటౠ'%s'"
+#| msgid "invalid next hop address '%s'"
+msgid "invalid route destination address '%s'"
+msgstr "చెలà±à°²à°¨à°¿ రౌటౠగమà±à°¯ à°šà°¿à°°à±à°¨à°¾à°®à°¾ '%s'"
-#: ../cli/src/common.c:520
+#: ../clients/cli/common.c:528
#, c-format
-msgid "invalid prefix '%s'; <0-32> allowed"
-msgstr "చెలà±à°²à°¨à°¿ à°ªà±à°°à°¿à°«à°¿à°•à±à°¸à± '%s'; <0-32> à°…à°¨à±à°®à°¤à°¿à°‚à°šà°¿à°¨"
+#| msgid "invalid prefix '%s'; <1-32> allowed"
+msgid "invalid prefix '%s'; <1-%d> allowed"
+msgstr "చెలà±à°²à°¨à°¿ à°ªà±à°°à°¿à°«à°¿à°•à±à°¸à± '%s'; <1-%d> à°…à°¨à±à°®à°¤à°¿à°‚à°šà°¿à°¨"
-#: ../cli/src/common.c:527 ../cli/src/common.c:590
+#: ../clients/cli/common.c:538
#, c-format
msgid "invalid next hop address '%s'"
msgstr "తరà±à°µà°¾à°¤à°¿ చెలà±à°²à°¨à°¿ హాపౠచిరà±à°¨à°¾à°®à°¾ '%s'"
-#: ../cli/src/common.c:534 ../cli/src/common.c:598
+#: ../clients/cli/common.c:543
#, c-format
-msgid "invalid metric '%s'"
-msgstr "చెలà±à°²à°¨à°¿ మాటà±à°°à°¿à°•à± '%s'"
+msgid ""
+"the second component of route ('%s') is neither a next hop address nor a "
+"metric"
+msgstr ""
+"route ('%s') యొకà±à°• రెండవ కాంపోనెంటౠతరà±à°µà°¾à°¤à°¿ హాపౠచిరà±à°¨à°¾à°®à°¾ కాదౠమెటà±à°°à°¿à°•à± కాదà±"
-#: ../cli/src/common.c:575
+#: ../clients/cli/common.c:553
#, c-format
-msgid "invalid IPv6 route '%s'"
-msgstr "చెలà±à°²à°¨à°¿ IPv6 రౌటౠ'%s'"
+msgid "invalid metric '%s'"
+msgstr "చెలà±à°²à°¨à°¿ మాటà±à°°à°¿à°•à± '%s'"
-#: ../cli/src/common.c:583
-#, c-format
-msgid "invalid prefix '%s'; <0-128> allowed"
-msgstr "చెలà±à°²à°¨à°¿ à°ªà±à°°à°¿à°«à°¿à°•à±à°¸à± '%s'; <0-128> à°…à°¨à±à°®à°¤à°¿à°‚à°šà°¿à°¨"
+#: ../clients/cli/common.c:562
+msgid "default route cannot be added (NetworkManager handles it by itself)"
+msgstr ""
+"à°…à°ªà±à°°à°®à±‡à°¯ రౌటౠజతచేయబడలేదౠ(నెటà±à°µà°°à±à°•à±â€Œà°®à±‡à°¨à±‡à°œà°°à± దానిని తనంతటతానే సంభాలించà±à°¨à±)"
-#: ../cli/src/common.c:619
+#: ../clients/cli/common.c:650
msgid "unmanaged"
msgstr "నిరà±à°µà°¹à°¿à°‚చని"
-#: ../cli/src/common.c:621
+#: ../clients/cli/common.c:652
msgid "unavailable"
msgstr "à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹à°²à±‡à°¨à°¿"
-#: ../cli/src/common.c:623 ../cli/src/network-manager.c:276
+#: ../clients/cli/common.c:654 ../clients/cli/network-manager.c:274
msgid "disconnected"
msgstr "అననà±à°¸à°‚ధానమైన"
-#: ../cli/src/common.c:625
+#: ../clients/cli/common.c:656
msgid "connecting (prepare)"
msgstr "à°…à°¨à±à°¸à°‚ధానమౌచà±à°¨à±à°¨à°¦à°¿ (సిదà±à°¦à°ªà°¡à±à°¤à±‹à°‚ది)"
-#: ../cli/src/common.c:627
+#: ../clients/cli/common.c:658
msgid "connecting (configuring)"
msgstr "à°…à°¨à±à°¸à°‚ధానమౌచà±à°¨à±à°¨à°¦à°¿ (ఆకృతీకరించబడà±à°¤à±‹à°‚ది)"
-#: ../cli/src/common.c:629
+#: ../clients/cli/common.c:660
msgid "connecting (need authentication)"
msgstr "à°…à°¨à±à°¸à°‚ధానమౌచà±à°¨à±à°¨à°¦à°¿ (ధృవీకరణమౠఅవసరమà±)"
-#: ../cli/src/common.c:631
+#: ../clients/cli/common.c:662
msgid "connecting (getting IP configuration)"
msgstr "à°…à°¨à±à°¸à°‚ధానమౌచà±à°¨à±à°¨à°¦à°¿ (IP ఆకృతీకరణనౠపొందà±à°šà±à°¨à±à°¨à°¦à°¿)"
-#: ../cli/src/common.c:633
+#: ../clients/cli/common.c:664
msgid "connecting (checking IP connectivity)"
msgstr "à°…à°¨à±à°¸à°‚ధానమౌచà±à°¨à±à°¨à°¦à°¿ (IP à°…à°¨à±à°¸à°‚ధానతనౠపరిశీలిసà±à°¤à±‹à°‚ది)"
-#: ../cli/src/common.c:635
+#: ../clients/cli/common.c:666
msgid "connecting (starting secondary connections)"
msgstr "à°…à°¨à±à°¸à°‚ధానమౌచà±à°¨à±à°¨à°¦à°¿ (à°¦à±à°µà°¿à°¤à±€à°¯ à°…à°¨à±à°¸à°‚ధానాలనౠపà±à°°à°¾à°°à°‚à°­à°¿à°¸à±à°¤à±‹à°‚ది)"
-#: ../cli/src/common.c:637 ../cli/src/network-manager.c:272
+#: ../clients/cli/common.c:668 ../clients/cli/network-manager.c:270
msgid "connected"
msgstr "à°…à°¨à±à°¸à°‚ధానమైంది"
-#: ../cli/src/common.c:639 ../cli/src/connections.c:732
+#: ../clients/cli/common.c:670 ../clients/cli/connections.c:542
msgid "deactivating"
msgstr "à°•à±à°°à°¿à°¯à°¾à°¹à±€à°¨à°‚చేసà±à°¤à±‹à°‚ది"
-#: ../cli/src/common.c:641
+#: ../clients/cli/common.c:672
msgid "connection failed"
msgstr "à°…à°¨à±à°¸à°‚ధానమౠవిఫలమైంది"
-#: ../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
+#: ../clients/cli/common.c:674 ../clients/cli/connections.c:547
+#: ../clients/cli/connections.c:570 ../clients/cli/connections.c:1631
+#: ../clients/cli/devices.c:816 ../clients/cli/devices.c:2336
+#: ../clients/cli/network-manager.c:277 ../clients/cli/network-manager.c:295
+#: ../clients/cli/network-manager.c:425 ../clients/cli/network-manager.c:441
+#: ../clients/cli/settings.c:703 ../clients/cli/settings.c:765
+#: ../clients/cli/settings.c:1057 ../clients/cli/utils.c:1121
+#: ../src/main.c:504 ../src/main.c:532
msgid "unknown"
msgstr "తెలియని"
-#: ../cli/src/common.c:652
+#: ../clients/cli/common.c:683
msgid "No reason given"
msgstr "ఠకారణం ఇవà±à°µà°²à±‡à°¦à±"
-#: ../cli/src/common.c:655 ../cli/src/connections.c:2258
+#: ../clients/cli/common.c:686 ../clients/cli/connections.c:2388
#, c-format
msgid "Unknown error"
msgstr "తెలియని దోషం"
-#: ../cli/src/common.c:658
+#: ../clients/cli/common.c:689
msgid "Device is now managed"
msgstr "పరికరం యిపà±à°ªà±à°¡à± నిరà±à°µà°¹à°¿à°‚చబడà±à°¤à±‹à°‚ది"
-#: ../cli/src/common.c:661
+#: ../clients/cli/common.c:692
msgid "Device is now unmanaged"
msgstr "పరికరం యిపà±à°ªà±à°¡à± నిరà±à°µà°¹à°¿à°‚చబడà±à°Ÿà°²à±‡à°¦à±"
-#: ../cli/src/common.c:664
+#: ../clients/cli/common.c:695
msgid "The device could not be readied for configuration"
msgstr "ఆకృతీకరణ కొరకౠపరికరం సిదà±à°¦à°‚కాలేదà±"
-#: ../cli/src/common.c:667
+#: ../clients/cli/common.c:698
msgid ""
"IP configuration could not be reserved (no available address, timeout, etc.)"
msgstr ""
"à°à°ªà°¿ ఆకృతీకరణననౠరిజరà±à°µà±à°šà±‡à°¸à°¿ కలిగివà±à°‚డలేదౠ(à°šà°¿à°°à±à°¨à°¾à°®à°¾, సమయమà±à°—à°¿à°‚à°ªà±, మొద. "
"à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹à°²à±‡à°µà±)"
-#: ../cli/src/common.c:670
+#: ../clients/cli/common.c:701
msgid "The IP configuration is no longer valid"
msgstr "à°à°ªà°¿ ఆకృతీకరణ యిక చెలà±à°²à±à°¨à°¦à°¿ కాదà±"
-#: ../cli/src/common.c:673
+#: ../clients/cli/common.c:704
msgid "Secrets were required, but not provided"
msgstr "రహసà±à°¯à°¾à°²à± అవసరమైనవి, అయితే అందించబడలేదà±"
-#: ../cli/src/common.c:676
+#: ../clients/cli/common.c:707
msgid "802.1X supplicant disconnected"
msgstr "802.1X సపà±à°²à°¿à°•à±†à°‚à°Ÿà± à°…à°¨à±à°¸à°‚ధానంపోయింది"
-#: ../cli/src/common.c:679
+#: ../clients/cli/common.c:710
msgid "802.1X supplicant configuration failed"
msgstr "802.1X సపà±à°²à°¿à°•à±†à°‚టౠఆకృతీకరణ విఫలమైంది"
-#: ../cli/src/common.c:682
+#: ../clients/cli/common.c:713
msgid "802.1X supplicant failed"
msgstr "802.1X సపà±à°²à°¿à°•à±†à°‚టౠవిఫలమైంది"
-#: ../cli/src/common.c:685
+#: ../clients/cli/common.c:716
msgid "802.1X supplicant took too long to authenticate"
msgstr "ధృవీకరణకౠ802.1X సపà±à°²à°¿à°•à±†à°‚టౠచాలా సమయం తీసà±à°•à±Šà°‚ది"
-#: ../cli/src/common.c:688
+#: ../clients/cli/common.c:719
msgid "PPP service failed to start"
msgstr "à°ªà±à°°à°¾à°°à°‚భమవà±à°Ÿà°•à± PPP సేవ విఫలమైంది"
-#: ../cli/src/common.c:691
+#: ../clients/cli/common.c:722
msgid "PPP service disconnected"
msgstr "PPP సేవ తెంచబడింది"
-#: ../cli/src/common.c:694
+#: ../clients/cli/common.c:725
msgid "PPP failed"
msgstr "PPP విఫలమైంది"
-#: ../cli/src/common.c:697
+#: ../clients/cli/common.c:728
msgid "DHCP client failed to start"
msgstr "à°ªà±à°°à°¾à°°à°‚భమగà±à°Ÿà°•à± DHCP à°•à±à°²à±ˆà°‚టౠవిఫలమైంది"
-#: ../cli/src/common.c:700
+#: ../clients/cli/common.c:731
msgid "DHCP client error"
msgstr "DHCP à°•à±à°²à±ˆà°‚టౠదోషం"
-#: ../cli/src/common.c:703
+#: ../clients/cli/common.c:734
msgid "DHCP client failed"
msgstr "DHCP à°•à±à°²à±ˆà°‚టౠవిఫలమైంది"
-#: ../cli/src/common.c:706
+#: ../clients/cli/common.c:737
msgid "Shared connection service failed to start"
msgstr "à°ªà±à°°à°¾à°°à°‚భమగà±à°Ÿà°•à± భాగసà±à°µà°¾à°®à±à°¯ à°…à°¨à±à°¸à°‚ధానం విఫలమైంది"
-#: ../cli/src/common.c:709
+#: ../clients/cli/common.c:740
msgid "Shared connection service failed"
msgstr "భాగసà±à°µà°¾à°®à±à°¯ à°…à°¨à±à°¸à°‚ధానం సేవ విఫలమైంది"
-#: ../cli/src/common.c:712
+#: ../clients/cli/common.c:743
msgid "AutoIP service failed to start"
msgstr "à°ªà±à°°à°¾à°°à°‚భమగà±à°Ÿà°•à± AutoIP సేవ విఫలమైంది"
-#: ../cli/src/common.c:715
+#: ../clients/cli/common.c:746
msgid "AutoIP service error"
msgstr "AutoIP సేవ దోషం"
-#: ../cli/src/common.c:718
+#: ../clients/cli/common.c:749
msgid "AutoIP service failed"
msgstr "AutoIP సేవ విఫలమైంది"
-#: ../cli/src/common.c:721
+#: ../clients/cli/common.c:752
msgid "The line is busy"
msgstr "లైనౠరదà±à°¦à±€à°—à°¾ à°µà±à°‚ది"
-#: ../cli/src/common.c:724
+#: ../clients/cli/common.c:755
msgid "No dial tone"
msgstr "డైలౠటోనౠలేదà±"
-#: ../cli/src/common.c:727
+#: ../clients/cli/common.c:758
msgid "No carrier could be established"
msgstr "ఠవాహకం à°à°°à±à°ªà°°à°šà°²à±‡à°• పోయింది"
-#: ../cli/src/common.c:730
+#: ../clients/cli/common.c:761
msgid "The dialing request timed out"
msgstr "డయిలింగౠఅభà±à°¯à°°à±à°§à°¨ కాలం మించినది"
-#: ../cli/src/common.c:733
+#: ../clients/cli/common.c:764
msgid "The dialing attempt failed"
msgstr "డయిలింగౠయతà±à°¨à°‚ విఫలమైంది"
-#: ../cli/src/common.c:736
+#: ../clients/cli/common.c:767
msgid "Modem initialization failed"
msgstr "మోడెమౠసిదà±à°¦à±€à°•à°°à°£ విఫలమైంది"
-#: ../cli/src/common.c:739
+#: ../clients/cli/common.c:770
msgid "Failed to select the specified APN"
msgstr "తెలిపిన APNనౠయెంపికచేయà±à°Ÿà°•à± విఫలమైంది"
-#: ../cli/src/common.c:742
+#: ../clients/cli/common.c:773
msgid "Not searching for networks"
msgstr "నెటà±à°µà°°à±à°•à±à°² కొరకౠఅనà±à°µà±‡à°·à°¿à°‚à°šà±à°Ÿà°²à±‡à°¦à±"
-#: ../cli/src/common.c:745
+#: ../clients/cli/common.c:776
msgid "Network registration denied"
msgstr "నెటà±à°µà°°à±à°•à± నమోదీకరణ తిరసà±à°•à°°à°¿à°‚చబడింది"
-#: ../cli/src/common.c:748
+#: ../clients/cli/common.c:779
msgid "Network registration timed out"
msgstr "నెటà±à°µà°°à±à°•à± నమోదీకరణ సమయం మించినది"
-#: ../cli/src/common.c:751
+#: ../clients/cli/common.c:782
msgid "Failed to register with the requested network"
msgstr "à°…à°­à±à°¯à°°à±à°§à°¿à°‚à°šà°¿à°¨ నెటà±à°µà°°à±à°•à±à°¤à±‹ నమోదగà±à°Ÿà°•à± విఫలమైంది"
-#: ../cli/src/common.c:754
+#: ../clients/cli/common.c:785
msgid "PIN check failed"
msgstr "పినౠపరిశీలన విఫలమైంది"
-#: ../cli/src/common.c:757
+#: ../clients/cli/common.c:788
msgid "Necessary firmware for the device may be missing"
msgstr "పరికరమౠకొరకౠతపà±à°ªà°¨à°¿à°¸à°°à°¿à°—à°¾ కావలసిన à°«à°°à±à°®à±à°µà±‡à°°à± దొరకటà±à°²à±‡à°¦à±"
-#: ../cli/src/common.c:760
+#: ../clients/cli/common.c:791
msgid "The device was removed"
msgstr "పరికరం తీసివేయబడింది"
-#: ../cli/src/common.c:763
+#: ../clients/cli/common.c:794
msgid "NetworkManager went to sleep"
msgstr "నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± à°¸à±à°²à±€à°ªà±â€Œà°²à±‹à°•à°¿ వెళà±à°³à°¿à°‚ది"
-#: ../cli/src/common.c:766
+#: ../clients/cli/common.c:797
msgid "The device's active connection disappeared"
msgstr "పరికరం యొకà±à°• à°•à±à°°à°¿à°¯à°¾à°¶à±€à°² à°…à°¨à±à°¸à°‚ధానం మాయమైంది"
-#: ../cli/src/common.c:769
+#: ../clients/cli/common.c:800
msgid "Device disconnected by user or client"
msgstr "వాడà±à°•à°°à°¿ లేదా à°•à±à°²à±ˆà°‚టౠచేత పరికరం à°…à°¨à±à°¸à°‚ధానం తీసివేయబడింది"
-#: ../cli/src/common.c:772
+#: ../clients/cli/common.c:803
msgid "Carrier/link changed"
msgstr "వాహకం/లంకె మారà±à°šà°¬à°¡à°¿à°‚ది"
-#: ../cli/src/common.c:775
+#: ../clients/cli/common.c:806
msgid "The device's existing connection was assumed"
msgstr "పరికరపౠవà±à°¨à±à°¨ à°…à°¨à±à°¸à°‚ధానం పరిగణించడమైంది"
-#: ../cli/src/common.c:778
+#: ../clients/cli/common.c:809
msgid "The supplicant is now available"
msgstr "సపà±à°²à°¿à°•à±†à°‚టౠయిపà±à°ªà±à°¡à± à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹ à°µà±à°‚ది"
-#: ../cli/src/common.c:781
+#: ../clients/cli/common.c:812
msgid "The modem could not be found"
msgstr "మోడెమౠకనà±à°—ొనబడలేదà±"
-#: ../cli/src/common.c:784
+#: ../clients/cli/common.c:815
msgid "The Bluetooth connection failed or timed out"
msgstr "à°¬à±à°²à±‚టూతౠఅనà±à°¸à°‚ధానం విఫలమైంది లేదా సమయం మించెనà±"
-#: ../cli/src/common.c:787
+#: ../clients/cli/common.c:818
msgid "GSM Modem's SIM card not inserted"
msgstr "GSM మోడెమౠయొకà±à°• సిమౠకారà±à°¡à± చొపà±à°ªà°¿à°‚చలేదà±"
-#: ../cli/src/common.c:790
+#: ../clients/cli/common.c:821
msgid "GSM Modem's SIM PIN required"
msgstr "GSM మోడెమౠయొకà±à°• సిమౠపినౠఅవసరం"
-#: ../cli/src/common.c:793
+#: ../clients/cli/common.c:824
msgid "GSM Modem's SIM PUK required"
msgstr "GSM మోడెమౠయొకà±à°• సిమౠPUK అవసరం"
-#: ../cli/src/common.c:796
+#: ../clients/cli/common.c:827
msgid "GSM Modem's SIM wrong"
msgstr "GSM మోడెమౠయొకà±à°• సిమౠసరికానిది"
-#: ../cli/src/common.c:799
+#: ../clients/cli/common.c:830
msgid "InfiniBand device does not support connected mode"
msgstr "à°…à°¨à±à°¸à°‚ధానించిన రీతిని యినà±à°«à±€à°¬à°¾à°‚డౠపరికరం తోడà±à°ªà°¾à°Ÿà±à°¨à±€à°¯à°Ÿà±à°²à±‡à°¦à±"
-#: ../cli/src/common.c:802
+#: ../clients/cli/common.c:833
msgid "A dependency of the connection failed"
msgstr "à°…à°¨à±à°¸à°‚ధానం యొకà±à°• ఆధారం విఫలమైంది"
-#: ../cli/src/common.c:805
+#: ../clients/cli/common.c:836
msgid "A problem with the RFC 2684 Ethernet over ADSL bridge"
msgstr "ADSL à°¬à±à°°à°¿à°¡à±à°œà± నందౠRFC 2684 ఈథరà±à°¨à±†à°Ÿà±â€Œà°¤à±‹ వొక సమసà±à°¯"
-#: ../cli/src/common.c:808
+#: ../clients/cli/common.c:839
msgid "ModemManager is unavailable"
msgstr "ModemManager à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹ లేదà±"
-#: ../cli/src/common.c:811
+#: ../clients/cli/common.c:842
msgid "The Wi-Fi network could not be found"
msgstr "Wi-Fi నెటà±à°µà°°à±à°•à± à°•à°¨à±à°—ొనలేక పోయింది"
-#: ../cli/src/common.c:814
+#: ../clients/cli/common.c:845
msgid "A secondary connection of the base connection failed"
msgstr "à°ªà±à°°à°¾à°§à°®à°¿à°• à°…à°¨à±à°¸à°‚ధానం యొకà±à°• à°¦à±à°µà°¿à°¤à±€à°¯ à°…à°¨à±à°¸à°‚ధానం విఫలమైంది"
-#: ../cli/src/common.c:817
+#: ../clients/cli/common.c:848
msgid "DCB or FCoE setup failed"
msgstr "DCB లేదా FCoE అమరà±à°ªà± విఫలమైంది"
-#: ../cli/src/common.c:820
+#: ../clients/cli/common.c:851
msgid "teamd control failed"
msgstr "teamd నియంతà±à°°à°£ విఫలమైంది"
-#: ../cli/src/common.c:824 ../cli/src/devices.c:634 ../tui/nm-ui-utils.c:359
+#: ../clients/cli/common.c:854
+#| msgid "ModemManager is unavailable"
+msgid "Modem failed or no longer available"
+msgstr "మోడెమౠవిఫలమైంది లేదా à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹ లేదà±"
+
+#: ../clients/cli/common.c:857
+#| msgid "ModemManager is unavailable"
+msgid "Modem now ready and available"
+msgstr "మోడెమౠఇపà±à°ªà±à°¡à± సిదà±à°¦à°‚ మరియౠఅందà±à°¬à°¾à°Ÿà±à°²à±‹à°µà±à°‚ది"
+
+#: ../clients/cli/common.c:860
+msgid "SIM PIN was incorrect"
+msgstr "సిమౠపినౠసరికానిది"
+
+#. TRANSLATORS: Unknown reason for a device state change (NMDeviceStateReason)
+#: ../clients/cli/common.c:864 ../clients/cli/devices.c:621
+#: ../libnm-glib/nm-device.c:1812
msgid "Unknown"
msgstr "తెలియని"
-#: ../cli/src/common.c:866
+#: ../clients/cli/common.c:906
#, c-format
msgid "invalid priority map '%s'"
msgstr "చెలà±à°²à°¨à°¿ à°ªà±à°°à°¾à°®à±à°–à±à°¯à°¤à°¾ మాపౠ'%s'"
-#: ../cli/src/common.c:873 ../cli/src/common.c:879
+#: ../clients/cli/common.c:913 ../clients/cli/common.c:919
#, c-format
msgid "priority '%s' is not valid (<0-%ld>)"
msgstr "à°ªà±à°°à°¾à°®à±à°–à±à°¯à°¤ '%s' చెలà±à°²à°¨à°¿à°¦à°¿ (<0-%ld>)"
-#: ../cli/src/common.c:935
+#: ../clients/cli/common.c:986
#, c-format
msgid "'%s' is not a valid team configuration or file name."
msgstr "'%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ టీమౠఆకృతీకరణ కాదౠలేదా ఫైలౠపేరౠకాదà±."
-#: ../cli/src/connections.c:62
+#. define some prompts for connection editor
+#: ../clients/cli/connections.c:40
msgid "Setting name? "
msgstr "పేరౠఅమరà±à°šà°¾à°²à°¾?"
-#: ../cli/src/connections.c:63
+#: ../clients/cli/connections.c:41
msgid "Property name? "
msgstr "లకà±à°·à°£à°‚ పేరా?"
-#: ../cli/src/connections.c:64
+#: ../clients/cli/connections.c:42
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
+#. define some other prompts
+#: ../clients/cli/connections.c:45
+msgid "Connection type: "
+msgstr "à°…à°¨à±à°¸à°‚ధానమౠరకం:"
+
+#: ../clients/cli/connections.c:46
+msgid "VPN type: "
+msgstr "VPN à°°à°•à°‚: "
+
+#: ../clients/cli/connections.c:47
+msgid "Bond master: "
+msgstr "బాండౠమాసà±à°Ÿà°°à±:"
+
+#: ../clients/cli/connections.c:48
+msgid "Team master: "
+msgstr "టీమౠమాసà±à°Ÿà°°à±:"
+
+#: ../clients/cli/connections.c:49
+msgid "Bridge master: "
+msgstr "à°¬à±à°°à°¿à°¡à±à°œà± మాసà±à°Ÿà°°à±:"
+
+#: ../clients/cli/connections.c:50
+msgid "Connection (name, UUID, or path): "
+msgstr "à°…à°¨à±à°¸à°‚ధానం (పేరà±, UUID, లేదా పాతà±):"
+
+#. 0
+#: ../clients/cli/connections.c:58 ../clients/cli/connections.c:170
+#: ../clients/cli/devices.c:55 ../clients/cli/devices.c:84
+#: ../clients/cli/devices.c:94 ../clients/cli/devices.c:105
+#: ../clients/cli/devices.c:114 ../clients/cli/devices.c:129
+#: ../clients/cli/devices.c:142 ../clients/cli/devices.c:168
+#: ../clients/cli/devices.c:183 ../clients/cli/devices.c:192
msgid "NAME"
msgstr "NAME"
-#: ../cli/src/connections.c:69 ../cli/src/connections.c:176
+#. 0
+#. 1
+#: ../clients/cli/connections.c:59 ../clients/cli/connections.c:171
msgid "UUID"
msgstr "UUID"
-#: ../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
+#. 1
+#. 0
+#. 1
+#. 2
+#: ../clients/cli/connections.c:60 ../clients/cli/connections.c:192
+#: ../clients/cli/devices.c:41 ../clients/cli/devices.c:57
+#: ../clients/cli/devices.c:171
msgid "TYPE"
msgstr "TYPE"
-#: ../cli/src/connections.c:71
+#. 2
+#: ../clients/cli/connections.c:61
msgid "TIMESTAMP"
msgstr "TIMESTAMP"
-#: ../cli/src/connections.c:72
+#. 3
+#: ../clients/cli/connections.c:62
msgid "TIMESTAMP-REAL"
msgstr "TIMESTAMP-REAL"
-#: ../cli/src/connections.c:73 ../cli/src/devices.c:101
+#. 4
+#. 15
+#: ../clients/cli/connections.c:63 ../clients/cli/devices.c:71
msgid "AUTOCONNECT"
msgstr "AUTOCONNECT"
-#: ../cli/src/connections.c:74
+#. 5
+#: ../clients/cli/connections.c:64
msgid "READONLY"
msgstr "READONLY"
-#: ../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
+#. 6
+#. 8
+#. 2
+#. 15
+#. 5
+#: ../clients/cli/connections.c:65 ../clients/cli/connections.c:178
+#: ../clients/cli/devices.c:43 ../clients/cli/devices.c:158
+#: ../clients/cli/devices.c:174
msgid "DBUS-PATH"
msgstr "DBUS-PATH"
-#: ../cli/src/connections.c:177
-msgid "DEVICES"
-msgstr "DEVICES"
+#. 7
+#. 13
+#. 4
+#: ../clients/cli/connections.c:66 ../clients/cli/devices.c:156
+#: ../clients/cli/devices.c:173
+msgid "ACTIVE"
+msgstr "ACTIVE"
+
+#. 8
+#. 0
+#. 12
+#. 3
+#: ../clients/cli/connections.c:67 ../clients/cli/devices.c:40
+#: ../clients/cli/devices.c:56 ../clients/cli/devices.c:155
+#: ../clients/cli/devices.c:172
+msgid "DEVICE"
+msgstr "DEVICE"
-#: ../cli/src/connections.c:178 ../cli/src/devices.c:73
-#: ../cli/src/devices.c:96 ../cli/src/network-manager.c:39
+#. 9
+#. 3
+#. 1
+#. 9
+#. 1
+#: ../clients/cli/connections.c:68 ../clients/cli/connections.c:173
+#: ../clients/cli/devices.c:42 ../clients/cli/devices.c:65
+#: ../clients/cli/network-manager.c:37
msgid "STATE"
msgstr "STATE"
-#: ../cli/src/connections.c:179
+#. 10
+#: ../clients/cli/connections.c:69
+#| msgid "MASTER-PATH"
+msgid "ACTIVE-PATH"
+msgstr "à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²-పాతà±"
+
+#. 2
+#: ../clients/cli/connections.c:172
+msgid "DEVICES"
+msgstr "DEVICES"
+
+#. 4
+#: ../clients/cli/connections.c:174
msgid "DEFAULT"
msgstr "DEFAULT"
-#: ../cli/src/connections.c:180
+#. 5
+#: ../clients/cli/connections.c:175
msgid "DEFAULT6"
msgstr "DEFAULT6"
-#: ../cli/src/connections.c:181
+#. 6
+#: ../clients/cli/connections.c:176
msgid "SPEC-OBJECT"
msgstr "SPEC-OBJECT"
-#: ../cli/src/connections.c:182 ../cli/src/connections.c:224
-#: ../tui/nm-editor-utils.c:243 ../tui/nmt-connect-connection-list.c:343
+#. 7
+#. 4
+#. Ask for optional 'vpn' arguments.
+#: ../clients/cli/connections.c:177 ../clients/cli/connections.c:215
+#: ../clients/cli/connections.c:3425 ../clients/tui/nm-editor-utils.c:234
+#: ../clients/tui/nmt-connect-connection-list.c:409
msgid "VPN"
msgstr "VPN"
-#: ../cli/src/connections.c:184 ../cli/src/devices.c:77
-#: ../cli/src/devices.c:105
+#. 9
+#. 5
+#. 19
+#: ../clients/cli/connections.c:179 ../clients/cli/devices.c:46
+#: ../clients/cli/devices.c:75
msgid "CON-PATH"
msgstr "CON-PATH"
-#: ../cli/src/connections.c:185
+#. 10
+#: ../clients/cli/connections.c:180
msgid "ZONE"
msgstr "ZONE"
-#: ../cli/src/connections.c:186
+#. 11
+#: ../clients/cli/connections.c:181
msgid "MASTER-PATH"
msgstr "MASTER-PATH"
-#: ../cli/src/connections.c:202
+#. 1
+#: ../clients/cli/connections.c:193
msgid "USERNAME"
msgstr "USERNAME"
-#: ../cli/src/connections.c:203
+#. 2
+#: ../clients/cli/connections.c:194
msgid "GATEWAY"
msgstr "GATEWAY"
-#: ../cli/src/connections.c:204
+#. 3
+#: ../clients/cli/connections.c:195
msgid "BANNER"
msgstr "BANNER"
-#: ../cli/src/connections.c:205
+#. 4
+#: ../clients/cli/connections.c:196
msgid "VPN-STATE"
msgstr "VPN-STATE"
-#: ../cli/src/connections.c:206
+#. 5
+#: ../clients/cli/connections.c:197
msgid "CFG"
msgstr "CFG"
-#: ../cli/src/connections.c:219 ../cli/src/devices.c:236
+#: ../clients/cli/connections.c:210 ../clients/cli/devices.c:207
msgid "GENERAL"
msgstr "GENERAL"
-#: ../cli/src/connections.c:220 ../cli/src/devices.c:243
+#. 0
+#. 6
+#: ../clients/cli/connections.c:211 ../clients/cli/devices.c:214
msgid "IP4"
msgstr "IP4"
-#: ../cli/src/connections.c:221 ../cli/src/devices.c:244
+#. 1
+#. 7
+#: ../clients/cli/connections.c:212 ../clients/cli/devices.c:215
msgid "DHCP4"
msgstr "DHCP4"
-#: ../cli/src/connections.c:222 ../cli/src/devices.c:245
+#. 2
+#. 8
+#: ../clients/cli/connections.c:213 ../clients/cli/devices.c:216
msgid "IP6"
msgstr "IP6"
-#: ../cli/src/connections.c:223 ../cli/src/devices.c:246
+#. 3
+#. 9
+#: ../clients/cli/connections.c:214 ../clients/cli/devices.c:217
msgid "DHCP6"
msgstr "DHCP6"
-#: ../cli/src/connections.c:255
-#, c-format
+#: ../clients/cli/connections.c:249
+#, 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"
msgid ""
"Usage: nmcli connection { COMMAND | help }\n"
"\n"
-"COMMAND := { show | up | down | add | modify | edit | delete | reload | load "
-"}\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"
+" show [--active] [[id | uuid | path | apath] <ID>] ...\n"
"\n"
" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
"\n"
@@ -564,7 +722,8 @@ msgid ""
"\n"
" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
"\n"
-" modify [id | uuid | path] <ID> <setting>.<property> <value>\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"
@@ -576,13 +735,12 @@ msgid ""
" load <filename> [ <filename>... ]\n"
"\n"
msgstr ""
-"వాడà±à°•: nmcli connection { COMMAND | help }\n"
+"Usage: nmcli connection { COMMAND | help }\n"
"\n"
-"COMMAND := { show | up | down | add | modify | edit | delete | reload | load "
-"}\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"
+" show [--active] [[id | uuid | path | apath] <ID>] ...\n"
"\n"
" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
"\n"
@@ -592,7 +750,8 @@ msgstr ""
"\n"
" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
"\n"
-" modify [id | uuid | path] <ID> <setting>.<property> <value>\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"
@@ -604,48 +763,53 @@ msgstr ""
" load <filename> [ <filename>... ]\n"
"\n"
-#: ../cli/src/connections.c:278
+#: ../clients/cli/connections.c:271
#, 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"
+"ARGUMENTS := [--active]\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."
+"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 [[id | uuid | path | apath] <ID>]\n"
-"\n"
-"నెటà±à°µà°°à±à°•à±à°•à± à°…à°¨à±à°¸à°‚ధానమగà±à°Ÿà°•à± పరికరంచేత à°ªà±à°°à°¸à±à°¤à±à°¤à°‚ ఉపయోగించబడే à°…à°¨à±à°¸à°‚ధానాలౠ"
-"చూపà±à°¨à±.\n"
-"పారామితి లేకà±à°‚à°¡à°¾, à°…à°¨à±à°¨à°¿ à°•à±à°°à°¿à°¯à°¾à°¶à±€à°² à°…à°¨à±à°¸à°‚ధానాలౠజాబితా చేయబడà±à°¨à±. <ID> "
-"ఇచà±à°šà°¿à°¨à°ªà±à°ªà±à°¡à±,\n"
-"à°…à°¨à±à°¸à°‚ధానం వివరాలౠపà±à°°à°¦à°°à±à°¶à°¿à°‚చబడà±à°¨à±.\n"
+"Usage: nmcli connection show { ARGUMENTS | help }\n"
"\n"
-"ARGUMENTS := configured [[id | uuid | path] <ID>]\n"
+"ARGUMENTS := [--active]\n"
"\n"
-"in-memory మరియౠon-disk à°…à°¨à±à°¸à°‚ధానాలౠచూపà±à°¨à±, ఒకవేళ పరికరం à°† à°…à°¨à±à°¸à°‚ధానం à°ªà±à°°à±Šà°«à±ˆà°²à± "
-"ఉపయోగిసà±à°¤à±à°‚టే\n"
-"వాటిలో కొనà±à°¨à°¿ à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°‚à°—à°¾ à°µà±à°‚డివండవచà±à°šà±. పారామితి లేకà±à°‚à°¡à°¾, à°…à°¨à±à°¨à°¿ à°ªà±à°°à±Šà°«à±ˆà°³à±à°³à±\n"
-"జాబితా చేయబడి à°µà±à°¨à±à°¨à°¾à°¯à°¿. <ID> అందించబడినపà±à°ªà±à°¡à±, à°ªà±à°°à±Šà°«à±ˆà°²à± వివరాలౠ"
-"à°ªà±à°°à°¦à°°à±à°¶à°¿à°‚చబడà±à°¨à±."
+"ఇనà±-మెమొరీ మరియౠఆనà±-à°¡à°¿à°¸à±à°•à± à°…à°¨à±à°¸à°‚ధాన à°ªà±à°°à±Šà°«à±ˆà°³à±à°³à°¨à± జాబితాచేయà±à°¨à±, వాటిలో కొనà±à°¨à°¿\n"
+"à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°‚à°—à°¾ కూడా ఉండవచà±à°šà± ఒకవేళ పరికరం à°† à°…à°¨à±à°¸à°‚ధాన à°ªà±à°°à±Šà°«à±ˆà°²à± ఉపయోగిసà±à°¤à±à°‚టే. "
+"పారామితి లేకà±à°‚à°¡à°¾, "
+"à°…à°¨à±à°¨à°¿\n"
+"à°ªà±à°°à±Šà°«à±ˆà°³à±à°³à± జాబితా చేయబడెనà±. --active à°à°šà±à°šà°¿à°•à°‚ తెలిపినపà±à°ªà±à°¡à±, à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²\n"
+"à°ªà±à°°à±Šà°«à±ˆà°²à± మాతà±à°°à°®à±‡ చూపబడà±à°¨à±.\n"
"\n"
+"ARGUMENTS := [--active] [id | uuid | path | apath] <ID> ...\n"
"\n"
+"తెలిపిన à°…à°¨à±à°¸à°‚ధానాల కొరకౠవివరాలనౠచూపà±à°¨à±. à°…à°ªà±à°°à°®à±‡à°¯à°‚à°—à°¾, à°¸à±à°Ÿà°¾à°Ÿà°¿à°•à± "
+"ఆకృతీకరణ\n"
+"మరియౠకà±à°°à°¿à°¯à°¾à°¶à±€à°² à°…à°¨à±à°¸à°‚ధాన డేటా రెండౠపà±à°°à°¦à°°à±à°¶à°¿à°‚చబడà±à°¨à±. "
+"à°…à°µà±à°Ÿà±à°ªà±à°Ÿà±\n"
+"నౠవడపోయà±à°Ÿ సాధà±à°¯à°®à±‡ à°—à±à°²à±‹à°¬à°²à± '--fields' à°à°šà±à°šà°¿à°•à°‚ ఉపయోగించి. మరింత సమాచారం "
+"కొరకౠమానà±à°¯à±à°µà°²à± పేజీ చూడండి.\n"
+"--active à°à°šà±à°šà°¿à°•à°‚ తెలిపినపà±à°ªà±à°¡à±, à°•à±à°°à°¿à°¯à°¾à°¶à±€à°² à°ªà±à°°à±Šà°«à±ˆà°³à±à°³à± మాతà±à°°à°®à±‡ పరిగణలోకి\n"
+"తీసà±à°•à±‹à°¬à°¡à±à°¨à±.\n"
-#: ../cli/src/connections.c:297
+#: ../clients/cli/connections.c:293
#, c-format
msgid ""
"Usage: nmcli connection up { ARGUMENTS | help }\n"
@@ -686,7 +850,7 @@ msgstr ""
"nsp - à°…à°¨à±à°¸à°‚ధానం కావడానికి NSP తెలà±à°ªà±à°¨à± (WiMAX కొరకౠమాతà±à°°à°®à±‡ చెలà±à°²à±à°¨à±)\n"
"\n"
-#: ../cli/src/connections.c:318
+#: ../clients/cli/connections.c:314
#, c-format
msgid ""
"Usage: nmcli connection down { ARGUMENTS | help }\n"
@@ -705,13 +869,106 @@ msgstr ""
"\n"
"à°’à°• పరికరం à°¨à±à°‚à°¡à°¿ à°…à°¨à±à°¸à°‚ధానం à°•à±à°°à°¿à°¯à°¾à°¹à±€à°¨à°‚ చేయి (పరికరంనౠఇకపై "
"à°¸à±à°µà°¯à°‚చాలకంగా-à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°‚ à°…à°—à±à°Ÿà°¨à±\n"
-"నిరోధించకà±à°‚à°¡à°¾). à°•à±à°°à°¿à°¯à°¾à°¹à±€à°¨à°‚ చేయవలసిన à°ªà±à°°à±Šà°«à±ˆà°²à± దాని "
-"పేరà±,\n"
+"నిరోధించకà±à°‚à°¡à°¾). à°•à±à°°à°¿à°¯à°¾à°¹à±€à°¨à°‚ చేయవలసిన à°ªà±à°°à±Šà°«à±ˆà°²à± దాని పేరà±,\n"
"UUID లేదా D-Bus పాతౠచేత à°—à±à°°à±à°¤à°¿à°‚చబడà±à°¨à±.\n"
"\n"
-#: ../cli/src/connections.c:331
-#, c-format
+#: ../clients/cli/connections.c:327
+#, 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"
@@ -723,6 +980,8 @@ msgid ""
" [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"
@@ -776,11 +1035,11 @@ msgid ""
" [arp-interval <num>]\n"
" [arp-ip-target <num>]\n"
"\n"
-" bond-slave: master <master (ifname or connection UUID)>\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)>\n"
+" team-slave: master <master (ifname, or connection UUID or name)>\n"
" [config <file>|<raw JSON data>]\n"
"\n"
" bridge: [stp yes|no]\n"
@@ -789,13 +1048,15 @@ msgid ""
" [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)>\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"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan|libreswan|"
+"ssh|l2tp|iodine|...\n"
" [user <username>]\n"
"\n"
" olpc-mesh: ssid <SSID>\n"
@@ -807,7 +1068,7 @@ msgid ""
" [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
"\n"
msgstr ""
-"వాడà±à°•: nmcli connection add { ARGUMENTS | help }\n"
+"Usage: nmcli connection add { ARGUMENTS | help }\n"
"\n"
"ARGUMENTS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS IP_OPTIONS\n"
"\n"
@@ -817,6 +1078,8 @@ msgstr ""
" [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"
@@ -870,11 +1133,11 @@ msgstr ""
" [arp-interval <num>]\n"
" [arp-ip-target <num>]\n"
"\n"
-" bond-slave: master <master (ifname or connection UUID)>\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)>\n"
+" team-slave: master <master (ifname, or connection UUID or name)>\n"
" [config <file>|<raw JSON data>]\n"
"\n"
" bridge: [stp yes|no]\n"
@@ -883,13 +1146,15 @@ msgstr ""
" [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)>\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"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan|libreswan|"
+"ssh|l2tp|iodine|...\n"
" [user <username>]\n"
"\n"
" olpc-mesh: ssid <SSID>\n"
@@ -901,28 +1166,52 @@ msgstr ""
" [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n"
"\n"
-#: ../cli/src/connections.c:408
+#: ../clients/cli/connections.c:406
#, c-format
msgid ""
"Usage: nmcli connection modify { ARGUMENTS | help }\n"
"\n"
-"ARGUMENTS := [id | uuid | path] <ID> <setting name>.<property name> "
-"[<value>]\n"
+"ARGUMENTS := [id | uuid | path] <ID> ([+|-]<setting>.<property> <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"
+"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 { ARGUMENTS | help }\n"
"\n"
-"ARGUMENTS := [id | uuid | path] <ID> <setting name>.<property name> "
-"[<value>]\n"
+"ARGUMENTS := [id | uuid | path] <ID> ([+|-]<setting>.<property> <value>)+\n"
"\n"
-"à°…à°¨à±à°¸à°‚ధానం à°ªà±à°°à±Šà°«à±ˆà°²à± నందౠఒక లకà±à°·à°£à°‚ మాతà±à°°à°®à±‡ సవరించà±à°¨à±.\n"
-"à°ªà±à°°à±Šà°«à±ˆà°²à± దాని పేరà±, UUID లేదా D-Bus పాతౠచే à°—à±à°°à±à°¤à°¿à°‚చబడà±à°¨à±.\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"
+"ఉదాహరణలà±:\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:420
+#: ../clients/cli/connections.c:430
#, c-format
msgid ""
"Usage: nmcli connection edit { ARGUMENTS | help }\n"
@@ -949,7 +1238,7 @@ msgstr ""
"ఇంటరాకà±à°Ÿà°¿à°µà± ఎడిటరౠనందౠకొతà±à°¤ à°…à°¨à±à°¸à°‚ధాన à°ªà±à°°à±Šà°«à±ˆà°²à± జతచేయి.\n"
"\n"
-#: ../cli/src/connections.c:436
+#: ../clients/cli/connections.c:446
#, c-format
msgid ""
"Usage: nmcli connection delete { ARGUMENTS | help }\n"
@@ -968,7 +1257,7 @@ msgstr ""
"à°ªà±à°°à±Šà°«à±ˆà°²à± దాని పేరà±, UUID లేదా D-Bus పాతౠచే à°—à±à°°à±à°¤à°¿à°‚చబడà±à°¨à±.\n"
"\n"
-#: ../cli/src/connections.c:448
+#: ../clients/cli/connections.c:458
#, c-format
msgid ""
"Usage: nmcli connection reload { help }\n"
@@ -981,7 +1270,7 @@ msgstr ""
"à°¡à°¿à°¸à±à°•à± à°¨à±à°‚à°¡à°¿ à°…à°¨à±à°¨à°¿ à°…à°¨à±à°¸à°‚ధాన ఫైళà±à°³à°¨à± తిరిగిలోడà±à°šà±‡à°¯à°¿.\n"
"\n"
-#: ../cli/src/connections.c:457
+#: ../clients/cli/connections.c:467
#, c-format
msgid ""
"Usage: nmcli connection load { ARGUMENTS | help }\n"
@@ -1000,342 +1289,346 @@ msgstr ""
"\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:589
-msgid "never"
-msgstr "à°Žà°ªà±à°ªà°Ÿà°¿à°•à°¿à°•à°¾à°¦à±"
-
-#: ../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: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: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:698
-#, c-format
-msgid "Error: %s - no such connection."
-msgstr "దోషమà±: %s - à°…à°Ÿà±à°µà°‚à°Ÿà°¿ à°…à°¨à±à°¸à°‚ధానమౠలేదà±."
-
-#: ../cli/src/connections.c:710
-#, c-format
-msgid "Error: 'show configured': %s"
-msgstr "దోషం: 'ఆకృతీకరించినవి చూపà±': %s"
-
-#: ../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:728
+#: ../clients/cli/connections.c:538
msgid "activating"
msgstr "à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà±à°šà±à°¨à±à°¨à°¦à°¿"
-#: ../cli/src/connections.c:730
+#: ../clients/cli/connections.c:540
msgid "activated"
msgstr "à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà°¬à°¡à°¿à°‚ది"
-#: ../cli/src/connections.c:734
+#: ../clients/cli/connections.c:544
msgid "deactivated"
msgstr "à°•à±à°°à°¿à°¯à°¾à°¹à±€à°¨à°ªà°°à°šà°¬à°¡à°¿à°‚ది"
-#: ../cli/src/connections.c:746
+#: ../clients/cli/connections.c:556
msgid "VPN connecting (prepare)"
msgstr "VPN à°…à°¨à±à°¸à°‚ధానమౌచà±à°¨à±à°¨à°¦à°¿ (సిదà±à°¦à°ªà°°à°šà±)"
-#: ../cli/src/connections.c:748
+#: ../clients/cli/connections.c:558
msgid "VPN connecting (need authentication)"
msgstr "VPN à°…à°¨à±à°¸à°‚ధానమౌచà±à°¨à±à°¨à°¦à°¿ (ధృవీకరణమౠఅవసరమà±)"
-#: ../cli/src/connections.c:750
+#: ../clients/cli/connections.c:560
msgid "VPN connecting"
msgstr "VPN à°…à°¨à±à°¸à°‚ధానమౌచà±à°¨à±à°¨à°¦à°¿"
-#: ../cli/src/connections.c:752
+#: ../clients/cli/connections.c:562
msgid "VPN connecting (getting IP configuration)"
msgstr "VPN à°…à°¨à±à°¸à°‚ధానమౌచà±à°¨à±à°¨à°¦à°¿ (IP ఆకృతీకరణనౠపొందà±à°šà±à°¨à±à°¨à°¦à°¿)"
-#: ../cli/src/connections.c:754
+#: ../clients/cli/connections.c:564
msgid "VPN connected"
msgstr "VPN à°…à°¨à±à°¸à°‚ధానమైంది"
-#: ../cli/src/connections.c:756
+#: ../clients/cli/connections.c:566
msgid "VPN connection failed"
msgstr "VPN à°…à°¨à±à°¸à°‚ధానమౠవిఫలమైంది"
-#: ../cli/src/connections.c:758
+#: ../clients/cli/connections.c:568
msgid "VPN disconnected"
msgstr "VPN అననà±à°¸à°‚ధానమైంది"
-#: ../cli/src/connections.c:829 ../cli/src/connections.c:839
-#: ../cli/src/devices.c:594
-msgid "N/A"
-msgstr "N/A"
+#: ../clients/cli/connections.c:651
+#| msgid "Connection details"
+msgid "Connection profile details"
+msgstr "à°…à°¨à±à°¸à°‚ధానమౠపà±à°°à±Šà°«à±ˆà°²à± వివరమà±à°²à±"
-#: ../cli/src/connections.c:1012
+#: ../clients/cli/connections.c:663 ../clients/cli/connections.c:1015
#, c-format
-msgid "Error: 'list active': %s"
-msgstr "Error: 'à°•à±à°°à°¿à°¯à°¾à°¶à±€à°² జాబితా': %s"
+#| msgid "Error: 'device show': %s"
+msgid "Error: 'connection show': %s"
+msgstr "దోషం: 'à°…à°¨à±à°¸à°‚ధానం చూపà±': %s"
-#: ../cli/src/connections.c:1020
-msgid "Active connection details"
+#: ../clients/cli/connections.c:807
+msgid "never"
+msgstr "à°Žà°ªà±à°ªà°Ÿà°¿à°•à°¿à°•à°¾à°¦à±"
+
+#. "CAPABILITIES"
+#: ../clients/cli/connections.c:808 ../clients/cli/connections.c:809
+#: ../clients/cli/connections.c:811 ../clients/cli/connections.c:870
+#: ../clients/cli/connections.c:871 ../clients/cli/connections.c:873
+#: ../clients/cli/connections.c:2761 ../clients/cli/connections.c:6447
+#: ../clients/cli/connections.c:6448 ../clients/cli/devices.c:591
+#: ../clients/cli/devices.c:641 ../clients/cli/devices.c:784
+#: ../clients/cli/devices.c:785 ../clients/cli/devices.c:786
+#: ../clients/cli/devices.c:787 ../clients/cli/devices.c:820
+#: ../clients/cli/devices.c:822 ../clients/cli/devices.c:850
+#: ../clients/cli/devices.c:851 ../clients/cli/devices.c:852
+#: ../clients/cli/devices.c:853 ../clients/cli/devices.c:854
+#: ../clients/cli/devices.c:855 ../clients/cli/devices.c:856
+#: ../clients/cli/network-manager.c:435
+msgid "yes"
+msgstr "à°…à°µà±à°¨à±"
+
+#: ../clients/cli/connections.c:808 ../clients/cli/connections.c:809
+#: ../clients/cli/connections.c:811 ../clients/cli/connections.c:870
+#: ../clients/cli/connections.c:871 ../clients/cli/connections.c:873
+#: ../clients/cli/connections.c:2762 ../clients/cli/connections.c:6447
+#: ../clients/cli/connections.c:6448 ../clients/cli/devices.c:591
+#: ../clients/cli/devices.c:641 ../clients/cli/devices.c:784
+#: ../clients/cli/devices.c:785 ../clients/cli/devices.c:786
+#: ../clients/cli/devices.c:787 ../clients/cli/devices.c:820
+#: ../clients/cli/devices.c:822 ../clients/cli/devices.c:850
+#: ../clients/cli/devices.c:851 ../clients/cli/devices.c:852
+#: ../clients/cli/devices.c:853 ../clients/cli/devices.c:854
+#: ../clients/cli/devices.c:855 ../clients/cli/devices.c:856
+#: ../clients/cli/network-manager.c:437
+msgid "no"
+msgstr "కాదà±"
+
+#: ../clients/cli/connections.c:866 ../clients/cli/connections.c:876
+#: ../clients/cli/devices.c:581
+msgid "N/A"
+msgstr "N/A"
+
+#: ../clients/cli/connections.c:1003
+#| msgid "Active connection details"
+msgid "Activate connection details"
msgstr "à°•à±à°°à°¿à°¯à°¾à°¶à±€à°² à°…à°¨à±à°¸à°‚ధానమౠవివరాలà±"
-#: ../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
+#: ../clients/cli/connections.c:1236
#, c-format
-msgid "Error: NetworkManager is not running."
-msgstr "దోషం: నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± నడà±à°šà±à°Ÿà°²à±‡à°¦à±."
-
-#: ../cli/src/connections.c:1203
-msgid "List of active connections"
-msgstr "à°•à±à°°à°¿à°¯à°¾à°¶à±€à°² à°…à°¨à±à°¸à°‚ధానమà±à°² జాబితా"
+#| msgid "invalid field '%s'; allowed fields: %s"
+msgid "invalid field '%s'; allowed fields: %s and %s, or %s,%s"
+msgstr ""
+"చెలà±à°²à°¨à°¿ à°•à±à°·à±‡à°¤à±à°°à°¾à°®à± '%s'; à°…à°¨à±à°®à°¤à°¿à°‚à°šà°¿à°¨ à°•à±à°·à±‡à°¤à±à°°à°¾à°²à±: %s మరియౠ%s, లేదా %s, %s"
+
+#: ../clients/cli/connections.c:1251 ../clients/cli/connections.c:1259
+#, c-format
+#| msgid "field '%s' has to be alone"
+msgid "'%s' has to be alone"
+msgstr "'%s' వొంటరిగా à°µà±à°‚డాలి"
+
+#. Add headers
+#: ../clients/cli/connections.c:1313
+#| msgid "NetworkManager status"
+msgid "NetworkManager active profiles"
+msgstr "నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± à°•à±à°°à°¿à°¯à°¾à°¶à±€à°² à°ªà±à°°à±Šà°«à±ˆà°³à±à°³à±"
+
+#: ../clients/cli/connections.c:1314
+#| msgid "NetworkManager went to sleep"
+msgid "NetworkManager connection profiles"
+msgstr "నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± à°…à°¨à±à°¸à°‚ధానం à°ªà±à°°à±Šà°«à±ˆà°³à±à°³à±"
+
+#: ../clients/cli/connections.c:1351 ../clients/cli/connections.c:1942
+#: ../clients/cli/connections.c:1958 ../clients/cli/connections.c:1967
+#: ../clients/cli/connections.c:1977 ../clients/cli/connections.c:2056
+#: ../clients/cli/connections.c:7953 ../clients/cli/connections.c:8167
+#: ../clients/cli/devices.c:1794 ../clients/cli/devices.c:1802
+#: ../clients/cli/devices.c:2118 ../clients/cli/devices.c:2125
+#: ../clients/cli/devices.c:2139 ../clients/cli/devices.c:2146
+#: ../clients/cli/devices.c:2163 ../clients/cli/devices.c:2171
+#: ../clients/cli/devices.c:2356 ../clients/cli/devices.c:2451
+#: ../clients/cli/devices.c:2458
+#, c-format
+msgid "Error: %s argument is missing."
+msgstr "దోషమà±: %s ఆరà±à°—à±à°®à±†à°‚టౠతపà±à°ªà°¿à°ªà±‹à°¯à°¿à°¨à°¦à°¿."
-#: ../cli/src/connections.c:1239 ../cli/src/connections.c:1926
+#: ../clients/cli/connections.c:1402
#, 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:1251
+#: ../clients/cli/connections.c:1418 ../clients/cli/connections.c:2001
+#: ../clients/cli/connections.c:8235 ../clients/cli/connections.c:8276
+#: ../clients/cli/connections.c:8474 ../clients/cli/devices.c:2335
+#: ../clients/cli/devices.c:2799 ../clients/cli/network-manager.c:532
+#: ../clients/cli/network-manager.c:575 ../clients/cli/network-manager.c:592
+#: ../clients/cli/network-manager.c:639 ../clients/cli/network-manager.c:653
+#: ../clients/cli/network-manager.c:770 ../clients/cli/network-manager.c:814
+#: ../clients/cli/network-manager.c:834
#, c-format
-msgid "Error: 'show active': %s"
-msgstr "దోషం: 'à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°®à±ˆà°¨à°µà°¿ చూపà±': %s"
+msgid "Error: %s."
+msgstr "దోషమà±: %s."
-#: ../cli/src/connections.c:1344
+#: ../clients/cli/connections.c:1513
#, c-format
msgid "no active connection on device '%s'"
msgstr "పరికరమౠ'%s' పైన యెటà±à°µà°‚à°Ÿà°¿ à°•à±à°°à°¿à°¯à°¾à°¶à±€à°² à°…à°¨à±à°¸à°‚ధానమౠలేదà±"
-#: ../cli/src/connections.c:1352
+#: ../clients/cli/connections.c:1521
msgid "no active connection or device"
msgstr "à°Žà°Ÿà±à°µà°‚à°Ÿà°¿ à°•à±à°°à°¿à°¯à°¾à°¶à±€à°² à°…à°¨à±à°¸à°‚ధానమౠలేదా పరికరమౠలేదà±"
-#: ../cli/src/connections.c:1423
+#: ../clients/cli/connections.c:1592
#, c-format
msgid "device '%s' not compatible with connection '%s'"
msgstr "పరికరమౠ'%s' à°…à°¨à±à°¸à°‚ధానమౠ'%s'తో సారూపà±à°¯à°®à±ˆà°¨à°¦à°¿ కాదà±"
-#: ../cli/src/connections.c:1426
+#: ../clients/cli/connections.c:1595
#, c-format
msgid "no device found for connection '%s'"
msgstr "à°…à°¨à±à°¸à°‚ధానమౠ'%s' కొరకౠయే పరికరమౠకనà±à°—ొనబడలేదà±"
-#: ../cli/src/connections.c:1438
+#: ../clients/cli/connections.c:1607
msgid "unknown reason"
msgstr "తెలియని కారణమà±"
-#: ../cli/src/connections.c:1440 ../cli/src/network-manager.c:288
+#: ../clients/cli/connections.c:1609 ../clients/cli/network-manager.c:286
msgid "none"
msgstr "à°à°¦à±€à°•à°¾à°¦à±"
-#: ../cli/src/connections.c:1442
+#: ../clients/cli/connections.c:1611
msgid "the user was disconnected"
msgstr "వినియోగదారి అననà±à°¸à°‚ధానింప బడినారà±"
-#: ../cli/src/connections.c:1444
+#: ../clients/cli/connections.c:1613
msgid "the base network connection was interrupted"
msgstr "ఆధార నెటà±à°µà°°à±à°•à± à°…à°¨à±à°¸à°‚ధానమౠఆటంకపరచబడింది"
-#: ../cli/src/connections.c:1446
+#: ../clients/cli/connections.c:1615
msgid "the VPN service stopped unexpectedly"
msgstr "VPN సేవ à°…à°¨à±à°•à±‹à°•à±à°‚à°¡à°¾ ఆపివేయబడింది"
-#: ../cli/src/connections.c:1448
+#: ../clients/cli/connections.c:1617
msgid "the VPN service returned invalid configuration"
msgstr "VPN సేవ చెలà±à°²à°¨à°¿ ఆకృతీకరణనౠతిపà±à°ªà°¿à°¯à°¿à°šà±à°šà°¿à°¨à°¦à°¿"
-#: ../cli/src/connections.c:1450
+#: ../clients/cli/connections.c:1619
msgid "the connection attempt timed out"
msgstr "à°…à°¨à±à°¸à°‚ధానపౠపà±à°°à°¯à°¤à±à°¨à°‚ సమయం మించిపోయినది"
-#: ../cli/src/connections.c:1452
+#: ../clients/cli/connections.c:1621
msgid "the VPN service did not start in time"
msgstr "VPN సేవ సమయం లోపల à°ªà±à°°à°¾à°°à°‚భించబడలేదà±"
-#: ../cli/src/connections.c:1454
+#: ../clients/cli/connections.c:1623
msgid "the VPN service failed to start"
msgstr "VPN సేవ à°ªà±à°°à°¾à°°à°‚భమగà±à°Ÿà°•à± విఫలమైంది"
-#: ../cli/src/connections.c:1456
+#: ../clients/cli/connections.c:1625
msgid "no valid VPN secrets"
msgstr "ఠవిలà±à°µà±ˆà°¨ VPN రహసà±à°¯à°¾à°²à± లేవà±"
-#: ../cli/src/connections.c:1458
+#: ../clients/cli/connections.c:1627
msgid "invalid VPN secrets"
msgstr "చెలà±à°²à°¨à°¿ VPN రహసà±à°¯à°¾à°²à±"
-#: ../cli/src/connections.c:1460
+#: ../clients/cli/connections.c:1629
msgid "the connection was removed"
msgstr "à°…à°¨à±à°¸à°‚ధానమౠతీసివేయబడింది"
-#: ../cli/src/connections.c:1477 ../cli/src/connections.c:1633
-#: ../cli/src/connections.c:6016
+#: ../clients/cli/connections.c:1651 ../clients/cli/connections.c:1679
+#: ../clients/cli/connections.c:1824 ../clients/cli/connections.c:6343
#, c-format
msgid "Connection successfully activated (D-Bus active path: %s)\n"
msgstr "à°…à°¨à±à°¸à°‚ధానం సఫలవంతంగా à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà°¬à°¡à±†à°¨à± (à°¡à°¿-బసౠకà±à°°à°¿à°¯à°¾à°¶à±€à°² పాతà±: %s)\n"
-#: ../cli/src/connections.c:1482
+#: ../clients/cli/connections.c:1658
+#, c-format
+#| msgid "Connection successfully activated (D-Bus active path: %s)\n"
+msgid ""
+"Connection successfully activated (master waiting for slaves) (D-Bus active "
+"path: %s)\n"
+msgstr ""
+"à°…à°¨à±à°¸à°‚ధానం సఫలవంతంగా à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà°¬à°¡à±†à°¨à± (మాసà±à°Ÿà°°à± à°¸à±à°²à±‡à°µà±à°¸à± కొరకౠవేచివà±à°‚ది) "
+"(à°¡à°¿-బసౠకà±à°°à°¿à°¯à°¾à°¶à±€à°² పాతà±: %s)\n"
+
+#: ../clients/cli/connections.c:1662 ../clients/cli/connections.c:1684
#, c-format
msgid "Error: Connection activation failed."
msgstr "దోషమà±: à°…à°¨à±à°¸à°‚ధానమౠకà±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà±à°Ÿ విఫలమైంది."
-#: ../cli/src/connections.c:1507
+#: ../clients/cli/connections.c:1727
#, c-format
msgid "VPN connection successfully activated (D-Bus active path: %s)\n"
msgstr ""
"VPN à°…à°¨à±à°¸à°‚ధానం సఫలవంతంగా à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà°¬à°¡à±†à°¨à± (à°¡à°¿-బసౠకà±à°°à°¿à°¯à°¾à°¶à±€à°² పాతà±: %s)\n"
-#: ../cli/src/connections.c:1514
+#: ../clients/cli/connections.c:1734
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "దోషమà±: à°…à°¨à±à°¸à°‚ధానమౠకà±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà±à°Ÿ విఫలమైంది: %s."
-#: ../cli/src/connections.c:1532 ../cli/src/devices.c:1294
+#: ../clients/cli/connections.c:1752 ../clients/cli/devices.c:1261
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "దోషమà±: కాలపరిమితి %d సె మించినది."
-#: ../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
+#: ../clients/cli/connections.c:1808
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "దోషమà±: à°…à°¨à±à°¸à°‚ధానమౠకà±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà±à°Ÿ విఫలమైంది: %s"
-#: ../cli/src/connections.c:1722 ../cli/src/connections.c:1854
+#: ../clients/cli/connections.c:1881 ../clients/cli/connections.c:2002
msgid "unknown error"
msgstr "తెలియని దోషం"
-#: ../cli/src/connections.c:1730
+#: ../clients/cli/connections.c:1889
#, c-format
msgid "unknown device '%s'."
msgstr "తెలియని పరికరం '%s'."
-#: ../cli/src/connections.c:1735
+#: ../clients/cli/connections.c:1894
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
+#: ../clients/cli/connections.c:1986 ../clients/cli/devices.c:1160
+#: ../clients/cli/devices.c:1808 ../clients/cli/devices.c:2182
+#: ../clients/cli/devices.c:2464
#, c-format
msgid "Unknown parameter: %s\n"
msgstr "తెలియని పారామితి: %s\n"
-#: ../cli/src/connections.c:1862
+#: ../clients/cli/connections.c:2010
msgid "preparing"
msgstr "సిదà±à°¦à°®à±Œà°¤à±‹à°‚ది"
-#: ../cli/src/connections.c:1889 ../cli/src/connections.c:7719
-#: ../cli/src/connections.c:7832
+#: ../clients/cli/connections.c:2038 ../clients/cli/connections.c:8148
+#: ../clients/cli/connections.c:8263
#, c-format
msgid "Error: No connection specified."
msgstr "దోషమà±: à° à°…à°¨à±à°¸à°‚ధానం తెలà±à°ªà°²à±‡à°¦à±."
-#: ../cli/src/connections.c:2237 ../cli/src/utils.c:490
+#: ../clients/cli/connections.c:2066
+#, c-format
+msgid "Error: '%s' is not an active connection."
+msgstr "దోషమà±: '%s' à°•à±à°°à°¿à°¯à°¾à°¶à±€à°² à°…à°¨à±à°¸à°‚ధానం కాదà±."
+
+#: ../clients/cli/connections.c:2367 ../clients/cli/utils.c:514
#, c-format
msgid "'%s' not among [%s]"
msgstr "'%s' [%s] నందౠలేదà±"
-#: ../cli/src/connections.c:2319
+#: ../clients/cli/connections.c:2446
#, c-format
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
+#. Ask for optional arguments
+#: ../clients/cli/connections.c:2447 ../clients/cli/connections.c:2877
+#: ../clients/tui/nm-editor-utils.c:164 ../libnm-core/nm-connection.c:1509
+#: ../libnm-glib/nm-device.c:1800
msgid "InfiniBand"
msgstr "ఇనà±à°«à°¿à°¬à°¾à°‚à°¡à±"
-#: ../cli/src/connections.c:2320 ../tui/nm-editor-utils.c:156
-#: ../tui/nm-ui-utils.c:335
+#: ../clients/cli/connections.c:2447 ../clients/tui/nm-editor-utils.c:147
+#: ../libnm-glib/nm-device.c:1788
msgid "Ethernet"
msgstr "ఈథరà±à°¨à±†à°Ÿà±"
-#: ../cli/src/connections.c:2343
+#: ../clients/cli/connections.c:2467
#, c-format
msgid "Error: 'mtu': '%s' is not a valid MTU."
msgstr "దోషం: 'mtu': '%s' à°…à°¨à±à°¨à°¦à°¿ చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ MTU కాదà±."
-#: ../cli/src/connections.c:2359
+#: ../clients/cli/connections.c:2483
#, c-format
msgid "Error: 'parent': '%s' is not a valid interface name."
msgstr "దోషం: 'parent': '%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ ఇంటరà±à°«à±‡à°¸à± పేరౠకాదà±."
-#: ../cli/src/connections.c:2380
+#: ../clients/cli/connections.c:2504
#, c-format
msgid "Error: 'p-key': '%s' is not a valid InfiniBand P_KEY."
msgstr "దోషం: 'p-key': '%s' à°…à°¨à±à°¨à°¦à°¿ చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ ఇనà±à°«à°¿à°¬à°¾à°‚à°¡à± P_KEY కాదà±."
-#: ../cli/src/connections.c:2396
+#: ../clients/cli/connections.c:2533
#, c-format
msgid ""
"Error: 'mode': '%s' is not a valid InfiniBand transport mode [datagram, "
@@ -1344,467 +1637,478 @@ msgstr ""
"దోషం: 'mode': '%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°šà°¿ ఇనà±à°«à°¿à°¬à°¾à°‚డౠసరఫరా రీతి [datagram, connected] "
"కాదà±."
-#: ../cli/src/connections.c:2412
+#: ../clients/cli/connections.c:2547
#, c-format
msgid "Error: 'flags': '%s' is not valid; use <0-7>."
msgstr "దోషం: 'flags': '%s' చెలà±à°²à±à°¨à°¦à°¿ కాదà±; <0-7> à°µà±à°ªà°¯à±‹à°—à°¿à°‚à°šà±."
-#: ../cli/src/connections.c:2434
+#: ../clients/cli/connections.c:2569
#, c-format
msgid "Error: '%s': '%s' is not valid; %s "
msgstr "దోషం: '%s': '%s' చెలà±à°²à±à°¨à°¦à°¿à°•à°¾à°¦à±; %s "
-#: ../cli/src/connections.c:2541
+#: ../clients/cli/connections.c:2752
#, c-format
msgid "Error: '%s': '%s' is not valid; use <%u-%u>."
msgstr "దోషం: '%s': '%s' చెలà±à°²à±à°¨à°¦à°¿ కాదà±; <%u-%u> ఉపయోగించà±."
-#: ../cli/src/connections.c:2555
+#. Ask for optional arguments.
+#: ../clients/cli/connections.c:2808
+#, 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] "'%s' à°…à°¨à±à°¸à°‚ధాన à°°à°•à°‚ కొరకౠ%d à°à°šà±à°šà°¿à°• ఆరà±à°—à±à°®à±†à°‚టౠఉంది.\n"
+msgstr[1] "'%s' à°…à°¨à±à°¸à°‚ధాన à°°à°•à°‚ కొరకౠ%d à°à°šà±à°šà°¿à°• ఆరà±à°—à±à°®à±†à°‚à°Ÿà±à°²à± ఉనà±à°¨à°¾à°¯à°¿.\n"
+
+#: ../clients/cli/connections.c:2811
+#, 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"
+
+#: ../clients/cli/connections.c:2826
msgid "ethernet"
msgstr "ఈథరà±à°¨à±†à°Ÿà±"
-#: ../cli/src/connections.c:2555 ../tui/nm-editor-utils.c:164
-#: ../tui/nm-ui-utils.c:337
+#: ../clients/cli/connections.c:2826 ../clients/tui/nm-editor-utils.c:155
+#: ../libnm-glib/nm-device.c:1790
msgid "Wi-Fi"
msgstr "Wi-Fi"
-#: ../cli/src/connections.c:2558
-#, c-format
-msgid "There are 3 optional arguments for '%s' connection type.\n"
-msgstr "'%s' à°…à°¨à±à°¸à°‚ధాన à°°à°•à°‚à°•à± 3 à°à°šà±à°šà°¿à°• ఆరà±à°—à±à°®à±†à°‚à°Ÿà±à°²à± à°µà±à°¨à±à°¨à°¾à°¯à°¿.\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 "మీరౠవాటిని అందించాలని à°…à°¨à±à°•à±Šà°‚à°Ÿà±à°¨à±à°¨à°¾à°°à°¾? (yes/no) [yes] "
-
-#: ../cli/src/connections.c:2567 ../cli/src/connections.c:2621
-#: ../cli/src/connections.c:2748 ../cli/src/connections.c:2849
+#: ../clients/cli/connections.c:2834 ../clients/cli/connections.c:2882
+#: ../clients/cli/connections.c:2991 ../clients/cli/connections.c:3070
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
+#: ../clients/cli/connections.c:2845 ../clients/cli/connections.c:2893
+#: ../clients/cli/connections.c:2963 ../clients/cli/connections.c:3002
+#: ../clients/cli/connections.c:3357
msgid "MAC [none]: "
msgstr "MAC [none]: "
-#: ../cli/src/connections.c:2589
+#: ../clients/cli/connections.c:2856
msgid "Cloned MAC [none]: "
msgstr "à°•à±à°²à±‹à°¨à±â€Œà°¡à± MAC [none]:"
-#: ../cli/src/connections.c:2612
+#: ../clients/cli/connections.c:2904
#, c-format
-msgid "There are 5 optional arguments for 'InfiniBand' connection type.\n"
-msgstr "'InfiniBand' à°…à°¨à±à°¸à°‚ధాన à°°à°•à°‚à°•à± 5 à°à°šà±à°šà°¿à°• ఆరà±à°—à±à°®à±†à°‚à°Ÿà±à°²à± à°µà±à°¨à±à°¨à°¾à°¯à°¿.\n"
-
-#: ../cli/src/connections.c:2643
-msgid "Transport mode (datagram or connected) [datagram]: "
-msgstr "సరఫరా రీతి (datagram లేదా connected) [datagram]"
+#| msgid "Transport mode"
+msgid "Transport mode %s"
+msgstr "బదిలి రీతి %s"
-#: ../cli/src/connections.c:2656
+#: ../clients/cli/connections.c:2917
msgid "Parent interface [none]: "
msgstr "మాతà±à°°à±à°• ఇంటరà±à°«à±‡à°¸à± [none]:"
-#: ../cli/src/connections.c:2667
+#: ../clients/cli/connections.c:2928
msgid "P_KEY [none]: "
msgstr "P_KEY [none]: "
-#: ../cli/src/connections.c:2677
+#: ../clients/cli/connections.c:2938
#, 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] "
+#. Ask for optional 'wimax' arguments.
+#: ../clients/cli/connections.c:2958 ../libnm-glib/nm-device.c:1796
+msgid "WiMAX"
+msgstr "వైమాకà±à°¸à±"
-#: ../cli/src/connections.c:2734
-#, c-format
-msgid "There are 4 optional arguments for 'PPPoE' connection type.\n"
-msgstr "'PPPoE' à°…à°¨à±à°¸à°‚ధాన à°°à°•à°‚ కొరకౠ4 à°à°šà±à°šà°¿à°• ఆరà±à°—à±à°®à±†à°‚à°Ÿà±à°²à± ఉనà±à°¨à°¾à°¯à°¿.\n"
+#. Ask for optional 'pppoe' arguments.
+#: ../clients/cli/connections.c:2981
+msgid "PPPoE"
+msgstr "PPPoE"
-#: ../cli/src/connections.c:2742 ../cli/src/connections.c:2790
+#: ../clients/cli/connections.c:2985 ../clients/cli/connections.c:3023
msgid "Password [none]: "
msgstr "Password [none]: "
-#: ../cli/src/connections.c:2744
+#: ../clients/cli/connections.c:2987
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"
+#. Ask for optional 'gsm' or 'cdma' arguments.
+#: ../clients/cli/connections.c:3017
+#| msgid "Mobile Broadband"
+msgid "mobile broadband"
+msgstr "మొబైలౠబà±à°°à°¾à°¡à±â€Œà°¬à°¾à°‚à°¡à±"
-#: ../cli/src/connections.c:2788 ../cli/src/connections.c:3233
+#: ../clients/cli/connections.c:3021 ../clients/cli/connections.c:3429
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"
+#. Ask for optional 'bluetooth' arguments.
+#: ../clients/cli/connections.c:3036
+#| msgid "Bluetooth"
+msgid "bluetooth"
+msgstr "à°¬à±à°²à±‚టూతà±"
-#: ../cli/src/connections.c:2813
-msgid "Bluetooth type (panu, dun-gsm or dun-cdma) [panu]: "
-msgstr "à°¬à±à°²à±‚టూతౠరకం (panu, dun-gsm or dun-cdma) [panu]:"
+#: ../clients/cli/connections.c:3043
+#, c-format
+#| msgid "Bluetooth"
+msgid "Bluetooth type %s"
+msgstr "à°¬à±à°²à±‚టూతౠరకం %s"
-#: ../cli/src/connections.c:2821
+#: ../clients/cli/connections.c:3049
#, 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"
+#. Ask for optional 'vlan' arguments.
+#. 11
+#: ../clients/cli/connections.c:3065 ../clients/cli/devices.c:219
+#: ../clients/tui/nm-editor-utils.c:218 ../clients/tui/nmt-page-vlan.c:51
+#: ../libnm-core/nm-connection.c:1507 ../libnm-glib/nm-device.c:1808
+#: ../libnm-util/nm-connection.c:1612
+msgid "VLAN"
+msgstr "VLAN"
-#: ../cli/src/connections.c:2860
+#: ../clients/cli/connections.c:3081
msgid "VLAN flags (<0-7>) [none]: "
msgstr "VLAN flags (<0-7>) [none]: "
-#: ../cli/src/connections.c:2871
+#: ../clients/cli/connections.c:3092
msgid "Ingress priority maps [none]: "
msgstr "Ingress priority maps [none]: "
-#: ../cli/src/connections.c:2882
+#: ../clients/cli/connections.c:3103
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
+#: ../clients/cli/connections.c:3114
msgid "Bonding mode [balance-rr]: "
msgstr "Bonding mode [balance-rr]: "
-#: ../cli/src/connections.c:2934
+#. Ask for optional 'bond' arguments.
+#: ../clients/cli/connections.c:3129
+msgid "bond"
+msgstr "బందనం"
+
+#: ../clients/cli/connections.c:3151
msgid "Bonding primary interface [none]: "
msgstr "Bonding primary interface [none]: "
-#: ../cli/src/connections.c:2937
+#: ../clients/cli/connections.c:3154
#, 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]: "
+#: ../clients/cli/connections.c:3162
+#, c-format
+#| msgid "Link monitoring"
+msgid "Bonding monitoring mode %s"
+msgstr "బాండింగౠమానిటరింగౠరీతి %s"
-#: ../cli/src/connections.c:2950
+#: ../clients/cli/connections.c:3168
#, 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
+#: ../clients/cli/connections.c:3177
msgid "Bonding miimon [100]: "
msgstr "Bonding miimon [100]: "
-#: ../cli/src/connections.c:2962
+#: ../clients/cli/connections.c:3180
#, 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
+#: ../clients/cli/connections.c:3188
msgid "Bonding downdelay [0]: "
msgstr "Bonding downdelay [0]: "
-#: ../cli/src/connections.c:2973
+#: ../clients/cli/connections.c:3191
#, 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
+#: ../clients/cli/connections.c:3199
msgid "Bonding updelay [0]: "
msgstr "Bonding updelay [0]: "
-#: ../cli/src/connections.c:2984
+#: ../clients/cli/connections.c:3202
#, 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
+#: ../clients/cli/connections.c:3211
msgid "Bonding arp-interval [0]: "
msgstr "Bonding arp-interval [0]: "
-#: ../cli/src/connections.c:2996
+#: ../clients/cli/connections.c:3214
#, 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
+#. FIXME: verify the string
+#: ../clients/cli/connections.c:3222
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
+#: ../clients/cli/connections.c:3242
msgid "Team JSON configuration [none]: "
msgstr "Team JSON configuration [none]: "
-#: ../cli/src/connections.c:3051
+#: ../clients/cli/connections.c:3259
msgid "team"
msgstr "టీమà±"
-#: ../cli/src/connections.c:3057
+#: ../clients/cli/connections.c:3265
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"
+#. Ask for optional 'bridge' arguments.
+#: ../clients/cli/connections.c:3277
+#| msgid "Bridge"
+msgid "bridge"
+msgstr "à°¬à±à°°à°¿à°¡à±à°œà±"
-#: ../cli/src/connections.c:3081
-msgid "Enable STP (yes/no) [yes]: "
-msgstr "STP చేతనంచేయాలా (yes/no) [yes]: "
+#: ../clients/cli/connections.c:3283
+#, c-format
+#| msgid "Enable STP (yes/no) [yes]: "
+msgid "Enable STP %s"
+msgstr "STP %s చేతనంచేయి"
-#: ../cli/src/connections.c:3085
+#: ../clients/cli/connections.c:3288
#, c-format
-msgid "Error: 'stp': '%s'.\n"
-msgstr "దోషం: 'stp': '%s'.\n"
+#| msgid "Error: 'stp': %s."
+msgid "Error: 'stp': %s.\n"
+msgstr "దోషం: 'stp': %s.\n"
-#: ../cli/src/connections.c:3093
-msgid "STP priority [128]: "
-msgstr "STP à°ªà±à°°à°¾à°®à±à°–à±à°¯à°¤ [128]: "
+#: ../clients/cli/connections.c:3296
+#| msgid "STP priority [128]: "
+msgid "STP priority [32768]: "
+msgstr "STP à°ªà±à°°à°¾à°®à±à°–à±à°¯à°¤ [32768]: "
-#: ../cli/src/connections.c:3097
+#: ../clients/cli/connections.c:3300
#, 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
+#: ../clients/cli/connections.c:3308
msgid "Forward delay [15]: "
msgstr "ఫారà±à°µà°¾à°°à±à°¡à± ఆలసà±à°¯à°‚ [15]: "
-#: ../cli/src/connections.c:3109
+#: ../clients/cli/connections.c:3312
#, 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
+#: ../clients/cli/connections.c:3321
msgid "Hello time [2]: "
msgstr "హెలà±à°²à±‹ సమయం [2]: "
-#: ../cli/src/connections.c:3122
+#: ../clients/cli/connections.c:3325
#, 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
+#: ../clients/cli/connections.c:3333
msgid "Max age [20]: "
msgstr "à°—à°°à°¿à°·à±à°Ÿ వయసౠ[20]: "
-#: ../cli/src/connections.c:3134
+#: ../clients/cli/connections.c:3337
#, 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
+#: ../clients/cli/connections.c:3345
msgid "MAC address ageing time [300]: "
msgstr "MAC à°šà°¿à°°à±à°¨à°¾à°®à°¾ à°à°œà°¿à°‚గౠసమయం [300]: "
-#: ../cli/src/connections.c:3146
+#: ../clients/cli/connections.c:3349
#, 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"
+#. Ask for optional 'bridge-slave' arguments.
+#: ../clients/cli/connections.c:3376
+#| msgid "team-slave"
+msgid "bridge-slave"
+msgstr "à°¬à±à°°à°¿à°¡à±à°œà±-à°¸à±à°²à±‡à°µà±"
-#: ../cli/src/connections.c:3176
+#: ../clients/cli/connections.c:3381
msgid "Bridge port priority [32]: "
msgstr "à°¬à±à°°à°¿à°¡à±à°œà± పోరà±à°Ÿà± à°ªà±à°°à°¾à°®à±à°–à±à°¯à°¤ [32]:"
-#: ../cli/src/connections.c:3189
+#: ../clients/cli/connections.c:3394
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
+#: ../clients/cli/connections.c:3408
#, c-format
-msgid "Error: 'hairpin': '%s'.\n"
-msgstr "దోషం: 'hairpin': '%s'.\n"
+#| msgid "Hairpin mode"
+msgid "Hairpin %s"
+msgstr "హెయిరà±â€Œà°ªà°¿à°¨à± %s"
-#: ../cli/src/connections.c:3225
+#: ../clients/cli/connections.c:3413
#, c-format
-msgid "There is 1 optional argument for 'VPN' connection type.\n"
-msgstr "'VPN' à°…à°¨à±à°¸à°‚ధాన à°°à°•à°‚ కొరకౠ1 à°à°šà±à°šà°¿à°• ఆరà±à°—à±à°®à±†à°‚టౠఉంది.\n"
+#| msgid "Error: 'hairpin': %s."
+msgid "Error: 'hairpin': %s.\n"
+msgstr "దోషం: 'hairpin': %s.\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"
+#. Ask for optional 'olpc' arguments.
+#: ../clients/cli/connections.c:3440 ../libnm-glib/nm-device.c:1794
+msgid "OLPC Mesh"
+msgstr "OLPC మెషà±"
-#: ../cli/src/connections.c:3258
+#: ../clients/cli/connections.c:3445
msgid "OLPC Mesh channel [1]: "
msgstr "OLPC మెషౠఛానలౠ[1]: "
-#: ../cli/src/connections.c:3261
+#: ../clients/cli/connections.c:3448
#, 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
+#: ../clients/cli/connections.c:3456
msgid "DHCP anycast MAC address [none]: "
msgstr "DHCP anycast MAC à°šà°¿à°°à±à°¨à°¾à°®à°¾ [none]: "
-#: ../cli/src/connections.c:3317
+#: ../clients/cli/connections.c:3501
msgid "IPv4 address (IP[/plen] [gateway]) [none]: "
msgstr "IPv4 à°šà°¿à°°à±à°¨à°¾à°®à°¾ (IP[/plen] [gateway]) [none]: "
-#: ../cli/src/connections.c:3319
+#: ../clients/cli/connections.c:3503
msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
msgstr "IPv6 à°šà°¿à°°à±à°¨à°¾à°®à°¾ (IP[/plen] [gateway]) [none]: "
-#: ../cli/src/connections.c:3337
+#: ../clients/cli/connections.c:3521
#, c-format
msgid " Address successfully added: %s %s\n"
msgstr " à°šà°¿à°°à±à°¨à°¾à°®à°¾ విజయవంతంగా జతచేయబడెనà±: %s %s\n"
-#: ../cli/src/connections.c:3339
+#: ../clients/cli/connections.c:3523
#, c-format
msgid " Warning: address already present: %s %s\n"
msgstr " హెచà±à°šà°°à°¿à°•: à°šà°¿à°°à±à°¨à°¾à°®à°¾ ఇపà±à°ªà°Ÿà°¿à°•à±‡ à°µà±à°‚ది: %s %s\n"
-#: ../cli/src/connections.c:3341
+#: ../clients/cli/connections.c:3525
#, 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
+#: ../clients/cli/connections.c:3527 ../clients/cli/connections.c:4350
+#: ../clients/cli/connections.c:4411 ../clients/cli/connections.c:4813
+#: ../clients/cli/connections.c:4823
msgid "Error: "
msgstr "దోషమà±:"
-#: ../cli/src/connections.c:3361
-msgid "Do you want to add IP addresses? (yes/no) [yes] "
-msgstr "మీరౠIP à°šà°¿à°°à±à°¨à°¾à°®à°¾à°²à± జతచేయాలని à°…à°¨à±à°•à±Šà°‚à°Ÿà±à°¨à±à°¨à°¾à°°à°¾? (yes/no) [yes] "
+#. Ask for IP addresses
+#: ../clients/cli/connections.c:3544
+#, 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:3367
+#: ../clients/cli/connections.c:3551
#, c-format
msgid "Press <Enter> to finish adding addresses.\n"
msgstr "à°šà°¿à°°à±à°¨à°¾à°®à°¾à°²à± జతచేయà±à°Ÿà°¨à± <Enter> వతà±à°¤à±à°Ÿ à°¦à±à°µà°¾à°°à°¾ పూరà±à°¤à°¿à°šà±‡à°¯à±à°®à±.\n"
-#: ../cli/src/connections.c:3513
+#: ../clients/cli/connections.c:3690
#, c-format
msgid "Error: 'parent': not valid without 'p-key'."
msgstr "దోషమà±: 'parent': 'p-key' లేకà±à°‚à°¡à°¾ చెలà±à°²à°¦à±."
-#: ../cli/src/connections.c:3569 ../cli/src/connections.c:4562
+#: ../clients/cli/connections.c:3742 ../clients/cli/connections.c:4732
msgid "SSID: "
msgstr "SSID: "
-#: ../cli/src/connections.c:3572 ../cli/src/connections.c:4565
+#: ../clients/cli/connections.c:3745 ../clients/cli/connections.c:4735
msgid "Error: 'ssid' is required."
msgstr "దోషం: 'ssid' అవసరమైంది."
-#: ../cli/src/connections.c:3636
+#: ../clients/cli/connections.c:3802
msgid "WiMAX NSP name: "
msgstr "WiMAX NSP పేరà±: "
-#: ../cli/src/connections.c:3639
+#: ../clients/cli/connections.c:3805
msgid "Error: 'nsp' is required."
msgstr "దోషం: 'nsp' అనసరమైంది."
-#: ../cli/src/connections.c:3694
+#: ../clients/cli/connections.c:3857
msgid "PPPoE username: "
msgstr "PPPoE వాడà±à°•à°°à°¿à°ªà±‡à°°à±: "
-#: ../cli/src/connections.c:3697
+#: ../clients/cli/connections.c:3860
msgid "Error: 'username' is required."
msgstr "దోషం: 'username' కావాలి."
-#: ../cli/src/connections.c:3768
+#: ../clients/cli/connections.c:3929
msgid "APN: "
msgstr "APN: "
-#: ../cli/src/connections.c:3771
+#: ../clients/cli/connections.c:3932
msgid "Error: 'apn' is required."
msgstr "దోషమà±: 'apn' అవసరమైంది."
-#: ../cli/src/connections.c:3830
+#: ../clients/cli/connections.c:3990
msgid "Bluetooth device address: "
msgstr "à°¬à±à°²à±‚టూతౠపరికర à°šà°¿à°°à±à°¨à°¾à°®à°¾:"
-#: ../cli/src/connections.c:3833
+#: ../clients/cli/connections.c:3993
msgid "Error: 'addr' is required."
msgstr "దోషం: 'addr' అవసరమైంది."
-#: ../cli/src/connections.c:3876
+#: ../clients/cli/connections.c:4034
#, 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
+#: ../clients/cli/connections.c:4078
msgid "VLAN parent device or connection UUID: "
msgstr "VLAN పేరెంటౠపరికరం లేదా à°…à°¨à±à°¸à°‚ధానం UUID: "
-#: ../cli/src/connections.c:3924
+#: ../clients/cli/connections.c:4081
msgid "Error: 'dev' is required."
msgstr "దోషం: 'dev' అవసరమైంది."
-#: ../cli/src/connections.c:3928
+#: ../clients/cli/connections.c:4085
msgid "VLAN ID <0-4095>: "
msgstr "VLAN ID <0-4095>: "
-#: ../cli/src/connections.c:3931
+#: ../clients/cli/connections.c:4088
msgid "Error: 'id' is required."
msgstr "దోషం: 'id' అవసరమైంది."
-#: ../cli/src/connections.c:3937
+#: ../clients/cli/connections.c:4094
#, c-format
msgid "Error: 'id': '%s' is not valid; use <0-4095>."
msgstr "దోషం: 'id': '%s' చెలà±à°²à±à°¨à°¦à°¿ కాదà±; <0-4095> à°µà±à°ªà°¯à±‹à°—à°¿à°‚à°šà±."
-#: ../cli/src/connections.c:3947
+#: ../clients/cli/connections.c:4104
#, c-format
msgid "Error: 'dev': '%s' is neither UUID, interface name, nor MAC."
msgstr "దోషం: 'dev': '%s' à°…à°¨à±à°¨à°¦à°¿ UUID, ఇంటరà±à°«à±‡à°¸à± పేరà±, MAC యేదీ కాదà±."
-#: ../cli/src/connections.c:4082
+#: ../clients/cli/connections.c:4233
#, c-format
msgid "Error: 'mode': %s."
msgstr "దోషం: 'mode': %s."
-#: ../cli/src/connections.c:4091
+#: ../clients/cli/connections.c:4242
#, 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
+#: ../clients/cli/connections.c:4291 ../clients/cli/connections.c:4389
+#: ../clients/cli/connections.c:4591
msgid "Error: 'master' is required."
msgstr "దోషం: 'master' అవసరమైంది."
-#: ../cli/src/connections.c:4142 ../cli/src/connections.c:4239
-#: ../cli/src/connections.c:4427
+#: ../clients/cli/connections.c:4297 ../clients/cli/connections.c:4395
+#: ../clients/cli/connections.c:4597
+#, c-format
+msgid "Warning: master='%s' doesn't refer to any existing profile.\n"
+msgstr "హెచà±à°šà°°à°¿à°•: master='%s' మనà±à°—డలోవà±à°¨à±à°¨ à°ªà±à°°à±Šà°«à±ˆà°²à± రిఫరౠచేయదà±.\n"
+
+#: ../clients/cli/connections.c:4300 ../clients/cli/connections.c:4403
+#: ../clients/cli/connections.c:4600
#, c-format
msgid ""
"Warning: 'type' is currently ignored. We only support ethernet slaves for "
@@ -1813,102 +2117,106 @@ msgstr ""
"హెచà±à°šà°°à°¿à°•: 'type' à°ªà±à°°à°¸à±à°¤à±à°¤à°‚ విసà±à°®à°°à°¿à°‚చబడింది. ఇపà±à°ªà°Ÿà°¿à°•à°¿ మేమౠఈథరà±à°¨à±†à°Ÿà± à°¸à±à°²à±‡à°µà±à°¸à± "
"మాతà±à°°à°®à±‡ తోడà±à°ªà°¾à°Ÿà±à°¨à°¿à°¸à±à°¤à°¾à°®à±.\n"
-#: ../cli/src/connections.c:4226
-msgid "Team master: "
-msgstr "టీమౠమాసà±à°Ÿà°°à±:"
-
-#: ../cli/src/connections.c:4329
+#: ../clients/cli/connections.c:4497
#, 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
+#: ../clients/cli/connections.c:4627
#, c-format
msgid "Error: 'hairpin': %s."
msgstr "దోషం: 'hairpin': %s."
-#: ../cli/src/connections.c:4506
-msgid "VPN type: "
-msgstr "VPN à°°à°•à°‚: "
-
-#: ../cli/src/connections.c:4509
+#: ../clients/cli/connections.c:4680
msgid "Error: 'vpn-type' is required."
msgstr "దోషం: 'vpn-type' అవసరమైంది."
-#: ../cli/src/connections.c:4520
+#: ../clients/cli/connections.c:4687
#, c-format
-msgid "Error: 'vpn-type': %s."
-msgstr "దోషం: 'vpn-type': %s."
+#| msgid "Error: 'vpn-type': %s."
+msgid "Warning: 'vpn-type': %s not known.\n"
+msgstr "హెచà±à°šà°°à°¿à°•: 'vpn-type': %s తెలియనిది.\n"
-#: ../cli/src/connections.c:4578
+#: ../clients/cli/connections.c:4748
#, c-format
msgid "Error: 'channel': '%s' is not valid; use <1-13>."
msgstr "దోషం: 'channel': '%s' చెలà±à°²à±à°¨à°¦à°¿ కాదà±; <1-13> à°µà±à°ªà°¯à±‹à°—à°¿à°‚à°šà±."
-#: ../cli/src/connections.c:4613
+#: ../clients/cli/connections.c:4780
#, c-format
msgid "Error: '%s' is not a valid connection type."
msgstr "దోషం: '%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ à°…à°¨à±à°¸à°‚ధాన à°°à°•à°‚ కాదà±."
-#: ../cli/src/connections.c:4711
+#: ../clients/cli/connections.c:4878
#, c-format
msgid "Error: Failed to add '%s' connection: (%d) %s"
msgstr "దోషం: '%s' à°…à°¨à±à°¸à°‚ధానం జతచేయà±à°Ÿà°•à± విఫలమైంది: (%d) %s"
-#: ../cli/src/connections.c:4715
+#: ../clients/cli/connections.c:4882
#, 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
+#: ../clients/cli/connections.c:5096
#, c-format
msgid "Error: 'type' argument is required."
msgstr "దోషమà±: 'type' ఆరà±à°—à±à°®à±†à°‚టౠఅవసరమైంది."
-#: ../cli/src/connections.c:4771
+#: ../clients/cli/connections.c:5104
#, c-format
msgid "Error: invalid connection type; %s."
msgstr "దోషమà±: చెలà±à°²à°¨à°¿ à°…à°¨à±à°¸à°‚ధానం à°°à°•à°‚; %s."
-#: ../cli/src/connections.c:4780
+#: ../clients/cli/connections.c:5113
#, c-format
msgid "Error: 'autoconnect': %s."
msgstr "దోషం: 'autoconnect': %s."
-#: ../cli/src/connections.c:4796
+#: ../clients/cli/connections.c:5123
+#, c-format
+#| msgid "Error: 'stp': %s."
+msgid "Error: 'save': %s."
+msgstr "దోషం: 'save': %s."
+
+#: ../clients/cli/connections.c:5139
msgid "Interface name [*]: "
msgstr "ఇంటరà±à°«à±‡à°¸à± పేరౠ[*]:"
-#: ../cli/src/connections.c:4801
+#: ../clients/cli/connections.c:5144
#, c-format
msgid "Error: 'ifname' argument is required."
msgstr "దోషం: 'ifname' ఆరà±à°—à±à°®à±†à°‚టౠకావాలి."
-#: ../cli/src/connections.c:4808
+#: ../clients/cli/connections.c:5151
#, c-format
msgid "Error: 'ifname': '%s' is not a valid interface nor '*'."
msgstr "దోషం: 'ifname': '%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ ఇంటరà±à°«à±‡à°¸à± కాదౠ'*' కాదà±."
-#: ../cli/src/connections.c:5627
+#: ../clients/cli/connections.c:5939
#, c-format
msgid "['%s' setting values]\n"
msgstr "['%s' విలà±à°µà°²à± అమరà±à°šà±à°¤à±‹à°‚ది]\n"
-#: ../cli/src/connections.c:5708
-#, c-format
+#. TRANSLATORS: do not translate command names and keywords before ::
+#. * However, you should translate terms enclosed in <>.
+#.
+#: ../clients/cli/connections.c:6021
+#, 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"
@@ -1916,9 +2224,9 @@ msgid ""
"value\n"
"set [<setting>.<prop> <value>] :: set property value\n"
"describe [<setting>.<prop>] :: describe property\n"
-"print [all] :: print the connection\n"
+"print [all | <setting>[.<prop>]] :: print the connection\n"
"verify [all] :: verify the connection\n"
-"save :: save 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"
@@ -1928,19 +2236,20 @@ msgstr ""
"---[ à°®à±à°–à±à°¯à°®à±†à°¨à± ]---\n"
"goto [<setting> | <prop>] :: అమరà±à°ªà± లేదా లకà±à°·à°£à°‚కౠవెళà±à°²à±à°®à±\n"
"remove <setting>[.<prop>] | <prop> :: అమరà±à°ªà± తీసివేయà±à°¨à± లేదా లకà±à°·à°£à°‚ "
-"తిరిగివà±à°‚à°šà±à°¨à± value\n"
+"తిరిగివà±à°‚à°šà±à°¨à± "
+"value\n"
"set [<setting>.<prop> <value>] :: లకà±à°·à°£à°‚ విలà±à°µ అమరà±à°šà±\n"
"describe [<setting>.<prop>] :: లకà±à°·à°£à°‚ వివరించà±\n"
-"print [all] :: à°…à°¨à±à°¸à°‚ధానం à°®à±à°¦à±à°°à°¿à°‚à°šà±\n"
+"print [all | <setting>[.<prop>]] :: à°…à°¨à±à°¸à°‚ధానం à°®à±à°¦à±à°°à°¿à°‚à°šà±\n"
"verify [all] :: à°…à°¨à±à°¸à°‚ధానం నిరà±à°§à°¾à°°à°¿à°‚à°šà±\n"
-"save :: à°…à°¨à±à°¸à°‚ధానం దాయి\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:5735
+#: ../clients/cli/connections.c:6048
#, c-format
msgid ""
"goto <setting>[.<prop>] | <prop> :: enter setting/property for editing\n"
@@ -1959,12 +2268,13 @@ msgstr ""
" nmcli connection> goto secondaries\n"
" nmcli> goto ipv4.addresses\n"
-#: ../cli/src/connections.c:5742
+#: ../clients/cli/connections.c:6055
#, 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"
+"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"
@@ -1979,7 +2289,7 @@ msgstr ""
"ఉదాహరణలà±: nmcli> remove wifi-sec\n"
" nmcli> remove eth.mtu\n"
-#: ../cli/src/connections.c:5749
+#: ../clients/cli/connections.c:6062
#, c-format
msgid ""
"set [<setting>.<prop> <value>] :: set property value\n"
@@ -1994,7 +2304,7 @@ msgstr ""
"\n"
"ఉదాహరణ: nmcli> set con.id My connection\n"
-#: ../cli/src/connections.c:5754
+#: ../clients/cli/connections.c:6067
#, c-format
msgid ""
"describe [<setting>.<prop>] :: describe property\n"
@@ -2004,10 +2314,11 @@ msgid ""
msgstr ""
"describe [<setting>.<prop>] :: లకà±à°·à°£à°‚ వివరించà±à°¨à±\n"
"\n"
-"లకà±à°·à°£à°‚ వివరణనౠచూపà±à°¨à±. à°…à°¨à±à°¨à°¿ NM అమరికలౠమరియౠలకà±à°·à°£à°¾à°²à± చూడà±à°Ÿà°•à± మీరౠnm-"
-"settings(5) మానà±à°¯à±‚వలౠపేజీ సంపà±à°°à°¦à°¿à°‚చవచà±à°šà±.\n"
+"లకà±à°·à°£à°‚ వివరణనౠచూపà±à°¨à±. à°…à°¨à±à°¨à°¿ NM అమరికలౠమరియౠలకà±à°·à°£à°¾à°²à± చూడà±à°Ÿà°•à± మీరౠ"
+"nm-settings(5) "
+"మానà±à°¯à±‚వలౠపేజీ సంపà±à°°à°¦à°¿à°‚చవచà±à°šà±.\n"
-#: ../cli/src/connections.c:5759
+#: ../clients/cli/connections.c:6072
#, c-format
msgid ""
"print [all] :: print setting or connection values\n"
@@ -2022,7 +2333,7 @@ msgstr ""
"\n"
"ఉదాహరణ: nmcli ipv4> print all\n"
-#: ../cli/src/connections.c:5764
+#: ../clients/cli/connections.c:6077
#, c-format
msgid ""
"verify [all] :: verify setting or connection validity\n"
@@ -2036,23 +2347,40 @@ msgstr ""
"verify [all] :: అమరిక లేదా à°…à°¨à±à°¸à°‚ధానం చెలà±à°²à±à°¬à°¾à°Ÿà± నిరà±à°¥à°¾à°°à°¿à°‚à°šà±à°¨à±\n"
"\n"
"అమరిక లేదా à°…à°¨à±à°¸à°‚ధానం చెలà±à°²à±à°¨à°¦à°¾ లేదా నిరà±à°¥à°¾à°°à°¿à°‚à°šà±à°¨à± మరియౠతరà±à°µà°¾à°¤ దాచగలదà±. "
-"చెలà±à°²à°¨à°¿ విలà±à°µà°²à°¨à± అది దోషమà±à°ªà±ˆ సూచించà±à°¨à±.\n"
+"చెలà±à°²à°¨à°¿ విలà±à°µà°²à°¨à± అది "
+"దోషమà±à°ªà±ˆ సూచించà±à°¨à±.\n"
"\n"
"ఉదాహరణలà±: nmcli> verify\n"
" nmcli bond> verify\n"
-#: ../cli/src/connections.c:5771
+#: ../clients/cli/connections.c:6084
#, c-format
msgid ""
-"save :: save the connection\n"
-"\n"
-"Sends the connection to NetworkManager that will save it.\n"
+"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 :: à°…à°¨à±à°¸à°‚ధానం దాయి\n"
+"save [persistent|temporary] :: save the connection\n"
"\n"
-"à°…à°¨à±à°¸à°‚ధానంనౠనెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à±à°•à± పంపà±à°¨à± అది దానిని దాచà±à°¨à±.\n"
+"à°…à°¨à±à°¸à°‚ధానం à°ªà±à°°à±Šà°«à±ˆà°²à±â€Œà°¨à± నెటà±à°µà°°à±à°•à±â€Œà°®à±‡à°¨à±‡à°œà°°à±â€Œà°•à± పంపà±à°¨à± అది దానిని à°­à°¦à±à°°à°ªà°°à±à°¸à±à°¤à±à°‚ది\n"
+"లేదా మెమొరీనందౠదాసà±à°¤à±à°‚ది. 'save' ఆరà±à°—à±à°®à±†à°‚టౠలేకà±à°‚à°¡à°¾\n"
+"అంటే 'save persistent'.\n"
+"à°ªà±à°°à±Šà°«à±ˆà°²à± à°¸à±à°¥à°¿à°°à°‚à°—à°¾ à°­à°¦à±à°°à°ªà°°à°¿à°¸à±à°¤à±‡ à°† అమరికలà±\n"
+"à°ªà±à°¨à°ƒà°ªà±à°°à°¾à°°à°‚భంనందౠకూడా పోవà±. తదà±à°ªà°°à°¿ మారà±à°ªà±à°²à± కూడా తాతà±à°•à°¾à°²à°¿à°•à°‚ కావచà±à°šà± లేదా\n"
+"à°¸à±à°¥à°¿à°°à°®à±ˆà°¨à°µà°¿ కావచà±à°šà±, అయితే తాతà±à°•à°¾à°²à°¿à°• మారà±à°ªà±à°²à± à°ªà±à°¨à°ƒà°ªà±à°°à°¾à°°à°‚à°­à°®à±à°¨à°‚దౠకోలà±à°ªà±‹à°¤à°¾à°¯à°¿.\n"
+"à°¸à±à°¥à°¿à°°à°®à±ˆà°¨ à°…à°¨à±à°¸à°‚ధానం మీరౠపూరà±à°¤à°¿à°—à°¾ తీసివేయాంటే, à°†"
+"à°…à°¨à±à°¸à°‚ధానం\n"
+"à°ªà±à°°à±Šà°«à±ˆà°²à± తొలగించాలి.\n"
-#: ../cli/src/connections.c:5775
+#: ../clients/cli/connections.c:6095
#, c-format
msgid ""
"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
@@ -2073,7 +2401,7 @@ msgstr ""
"/<ap>|<nsp> - AP (Wi-Fi) లేదా NSP (WiMAX) (<ifname> తెలà±à°ªà°¬à°¡à°¨à°ªà±à°ªà±à°¡à± / "
"à°®à±à°‚à°¦à±à°šà±‡à°°à±à°šà°¬à°¡à±à°¨à±)\n"
-#: ../cli/src/connections.c:5782 ../cli/src/connections.c:5932
+#: ../clients/cli/connections.c:6102 ../clients/cli/connections.c:6259
#, c-format
msgid ""
"back :: go to upper menu level\n"
@@ -2082,7 +2410,7 @@ msgstr ""
"back :: పై మెనూ à°¸à±à°¥à°¾à°¯à°¿à°¨à°•à± వెళà±à°³à±à°¨à±\n"
"\n"
-#: ../cli/src/connections.c:5785
+#: ../clients/cli/connections.c:6105
#, c-format
msgid ""
"help/? [<command>] :: help for the nmcli commands\n"
@@ -2091,7 +2419,7 @@ msgstr ""
"help/? [<command>] :: nmcli ఆదేశాల కొరకౠసహాయం\n"
"\n"
-#: ../cli/src/connections.c:5788
+#: ../clients/cli/connections.c:6108
#, c-format
msgid ""
"nmcli [<conf-option> <value>] :: nmcli configuration\n"
@@ -2134,7 +2462,7 @@ msgstr ""
" nmcli> nmcli save-confirmation no\n"
" nmcli> nmcli prompt-color 3\n"
-#: ../cli/src/connections.c:5808 ../cli/src/connections.c:5938
+#: ../clients/cli/connections.c:6128 ../clients/cli/connections.c:6265
#, c-format
msgid ""
"quit :: exit nmcli\n"
@@ -2144,16 +2472,20 @@ msgid ""
msgstr ""
"quit :: nmcli నిషà±à°•à±à°°à°®à°¿à°‚à°šà±à°¨à±\n"
"\n"
-"à°ˆ ఆదేశం nmcli నిషà±à°•à±à°°à°®à°¿à°‚పచేయà±à°¨à±. మారà±à°šà°¬à°¡à±à°¤à±à°¨à±à°¨ à°…à°¨à±à°¸à°‚ధానం దాయనపà±à°ªà±à°¡à±, à°† "
-"à°šà°°à±à°¯à°¨à± ఖాయం చేయమని వాడà±à°•à°°à°¿ à°…à°¡à±à°—బడతాడà±.\n"
+"à°ˆ ఆదేశం nmcli నిషà±à°•à±à°°à°®à°¿à°‚పచేయà±à°¨à±. మారà±à°šà°¬à°¡à±à°¤à±à°¨à±à°¨ à°…à°¨à±à°¸à°‚ధానం దాయనపà±à°ªà±à°¡à±, à°† à°šà°°à±à°¯à°¨à± "
+"ఖాయం చేయమని "
+"వాడà±à°•à°°à°¿ à°…à°¡à±à°—బడతాడà±.\n"
-#: ../cli/src/connections.c:5813 ../cli/src/connections.c:5943
-#: ../cli/src/connections.c:6313 ../cli/src/connections.c:7162
+#: ../clients/cli/connections.c:6133 ../clients/cli/connections.c:6270
+#: ../clients/cli/connections.c:6658 ../clients/cli/connections.c:7548
#, c-format
msgid "Unknown command: '%s'\n"
msgstr "తెలియని ఆదేశం: '%s'\n"
-#: ../cli/src/connections.c:5879
+#. TRANSLATORS: do not translate command names and keywords before ::
+#. * However, you should translate terms enclosed in <>.
+#.
+#: ../clients/cli/connections.c:6199
#, c-format
msgid ""
"---[ Property menu ]---\n"
@@ -2180,7 +2512,7 @@ msgstr ""
"help/? [<command>] :: à°ˆ సహాయం లేదా ఆదేశ వివరణ à°®à±à°¦à±à°°à°¿à°‚à°šà±\n"
"quit :: nmcli నిషà±à°•à±à°°à°®à°¿à°‚à°šà±\n"
-#: ../cli/src/connections.c:5904
+#: ../clients/cli/connections.c:6224
#, c-format
msgid ""
"set [<value>] :: set new value\n"
@@ -2191,21 +2523,28 @@ msgstr ""
"\n"
"అందించబడిన <value> నౠఈ లకà±à°·à°£à°‚à°•à± à°ˆ ఆదేశం అమరà±à°šà±à°¨à±\n"
-#: ../cli/src/connections.c:5908
+#: ../clients/cli/connections.c:6228
#, 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"
msgid ""
-"add [<value>] :: add new option to the property\n"
+"add [<value>] :: append new value 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"
+"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 [<value>] :: లకà±à°·à°£à°‚కౠకొతà±à°¤ à°à°šà±à°šà°¿à°•à°‚ జతచేయి\n"
+"add [<value>] :: లకà±à°·à°£à°‚కౠకొతà±à°¤ విలà±à°µ జతచేయి\n"
"\n"
"అందించిన <value> నౠఈ లకà±à°·à°£à°‚à°•à± à°ˆ ఆదేశం జతచేయà±à°¨à±, లకà±à°·à°£à°‚ à°—à°¨à±à°• కంటైనరౠరకం "
-"అయితే. à°’à°‚à°Ÿà°°à°¿-విలà±à°µ లకà±à°·à°£à°¾à°²à°•à± అది విలà±à°µà°¨à± à°ªà±à°¨à°ƒà°¸à±à°¥à°¾à°ªà°¿à°‚à°šà±à°¨à± ('set' వలె).\n"
+"అయితే. ఒంటరి-"
+"విలà±à°µ లకà±à°·à°£à°¾à°²à°•à± అది విలà±à°µà°¨à± à°ªà±à°¨à°ƒà°¸à±à°¥à°¾à°ªà°¿à°‚à°šà±à°¨à± ('set' వలె).\n"
-#: ../cli/src/connections.c:5914
+#: ../clients/cli/connections.c:6234
#, c-format
msgid ""
"change :: change current value\n"
@@ -2216,18 +2555,45 @@ msgstr ""
"\n"
"à°ªà±à°°à°¸à±à°¤à±à°¤ విలà±à°µà°¨à± à°ªà±à°°à°¦à°°à±à°¶à°¿à°‚à°šà±à°¨à± మరియౠదానిని సరికూరà±à°šà±à°Ÿà°•à± à°…à°¨à±à°®à°¤à°¿à°‚à°šà±à°¨à±.\n"
-#: ../cli/src/connections.c:5918
+#: ../clients/cli/connections.c:6238
#, c-format
msgid ""
-"remove [<index>|<option>] :: delete the value\n"
+"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"
-"Removes the property value (sets it to default).\n"
msgstr ""
-"remove [<index>|<option>] :: విలà±à°µà°¨à± తొలగించà±\n"
+"remove [<value>|<index>|<option name>] :: delete the value\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"
-"లకà±à°·à°£à°‚ విలà±à°µà°¨à± తీసివేయà±à°¨à± (దానిని à°…à°ªà±à°°à°®à±‡à°¯à°‚కౠఅమరà±à°šà±à°¨à±).\n"
-#: ../cli/src/connections.c:5922
+#: ../clients/cli/connections.c:6249
#, c-format
msgid ""
"describe :: describe property\n"
@@ -2237,10 +2603,11 @@ msgid ""
msgstr ""
"describe :: లకà±à°·à°£à°‚ వివరించà±\n"
"\n"
-"లకà±à°·à°£à°‚ వివరణనౠచూపà±à°®à±. à°…à°¨à±à°¨à°¿ NM అమరికలౠమరియౠలకà±à°·à°£à°¾à°²à°¨à± చూడà±à°Ÿà°•à± మీరౠnm-"
-"settings(5) మానà±à°¯à±à°µà°²à± పేజీనౠసంపà±à°°à°¦à°¿à°‚చవచà±à°šà±.\n"
+"లకà±à°·à°£à°‚ వివరణనౠచూపà±à°®à±. à°…à°¨à±à°¨à°¿ NM అమరికలౠమరియౠలకà±à°·à°£à°¾à°²à°¨à± చూడà±à°Ÿà°•à± మీరౠ"
+"nm-settings(5) "
+"మానà±à°¯à±à°µà°²à± పేజీనౠసంపà±à°°à°¦à°¿à°‚చవచà±à°šà±.\n"
-#: ../cli/src/connections.c:5927
+#: ../clients/cli/connections.c:6254
#, c-format
msgid ""
"print [property|setting|connection] :: print property (setting, connection) "
@@ -2250,12 +2617,14 @@ msgid ""
"the whole setting or connection.\n"
msgstr ""
"print [property|setting|connection] :: లకà±à°·à°£à°‚ (setting, connection) "
-"విలà±à°µ(à°²à±) à°®à±à°¦à±à°°à°¿à°‚à°šà±à°¨à±\n"
+"విలà±à°µ(à°²à±) "
+"à°®à±à°¦à±à°°à°¿à°‚à°šà±à°¨à±\n"
"\n"
"లకà±à°·à°£à°‚ విలà±à°µà°¨à± చూపà±à°¨à±. ఆరà±à°—à±à°®à±†à°‚à°Ÿà±à°¨à± అందించà±à°Ÿà°¤à±‹ పాటà±à°—à°¾ మీరౠమొతà±à°¤à°‚ అమరిక లేదా "
-"à°…à°¨à±à°¸à°‚ధానం కొరకౠవిలà±à°µà°²à± కూడా à°ªà±à°°à°¦à°°à±à°¶à°¿à°‚చగలరà±.\n"
+"à°…à°¨à±à°¸à°‚ధానం కొరకౠ"
+"విలà±à°µà°²à± కూడా à°ªà±à°°à°¦à°°à±à°¶à°¿à°‚చగలరà±.\n"
-#: ../cli/src/connections.c:5935
+#: ../clients/cli/connections.c:6262
#, c-format
msgid ""
"help/? [<command>] :: help for nmcli commands\n"
@@ -2264,303 +2633,322 @@ msgstr ""
"help/? [<command>] :: nmcli ఆదేశాల కొరకౠసహాయం\n"
"\n"
-#: ../cli/src/connections.c:6022
+#: ../clients/cli/connections.c:6349
#, c-format
msgid "Error: Connection activation failed.\n"
msgstr "దోషం: à°…à°¨à±à°¸à°‚ధానం à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°¤ విఫలమైంది.\n"
-#: ../cli/src/connections.c:6093
+#: ../clients/cli/connections.c:6427
#, c-format
msgid "Error: setting '%s' is mandatory and cannot be removed.\n"
msgstr "దోషం: అమరిక '%s' తపà±à°ªà°¨à°¿à°¸à°°à°¿ మరియౠతీసివేయబడలేదà±.\n"
-#: ../cli/src/connections.c:6111
+#. TRANSLATORS: status line in nmcli connection editor
+#: ../clients/cli/connections.c:6445
+#, 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"
+
+#: ../clients/cli/connections.c:6480
#, c-format
-msgid "[ Connection type: %s | name: %s | UUID: %s | dirty: %s ]\n"
-msgstr "[ à°…à°¨à±à°¸à°‚ధానం à°°à°•à°‚: %s | పేరà±: %s | UUID: %s | à°¡à°°à±à°Ÿà±€: %s ]\n"
+#| 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:6171
+#: ../clients/cli/connections.c:6525
#, 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"
+"ఉంచà±à°Ÿà°•à± à°®à±à°–à±à°¯ మెనూ నందౠ"
+"'save' టైపౠచేయవచà±à°šà±.\n"
-#: ../cli/src/connections.c:6192 ../cli/src/connections.c:6615
-#: ../cli/src/connections.c:6673
+#: ../clients/cli/connections.c:6547 ../clients/cli/connections.c:6962
+#: ../clients/cli/connections.c:7017
#, 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
+#: ../clients/cli/connections.c:6562 ../clients/cli/connections.c:6580
+#: ../clients/cli/connections.c:6966 ../clients/cli/connections.c:7022
#, c-format
msgid "Error: failed to set '%s' property: %s\n"
msgstr "దోషం: '%s' లకà±à°·à°£à°‚ అమరà±à°šà±à°Ÿà°•à± విఫలమైంది: %s\n"
-#: ../cli/src/connections.c:6221
+#: ../clients/cli/connections.c:6574
#, c-format
msgid "Edit '%s' value: "
msgstr "'%s' విలà±à°µ సరికూరà±à°šà±: "
-#: ../cli/src/connections.c:6250
+#: ../clients/cli/connections.c:6601
#, c-format
msgid "Error: %s\n"
msgstr "దోషమà±: %s\n"
-#: ../cli/src/connections.c:6256 ../cli/src/connections.c:6759
-#: ../cli/src/connections.c:6800
+#: ../clients/cli/connections.c:6607 ../clients/cli/connections.c:7101
+#: ../clients/cli/connections.c:7142
#, c-format
msgid "Error: failed to remove value of '%s': %s\n"
msgstr "దోషమà±: '%s' విలà±à°µ తీసివేయà±à°Ÿà°•à± విఫలమైంది: %s\n"
-#: ../cli/src/connections.c:6277
+#: ../clients/cli/connections.c:6628
#, 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
+#: ../clients/cli/connections.c:6754
#, c-format
msgid "Available settings: %s\n"
msgstr "à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹à°¨à°¿ అమరికలà±: %s\n"
-#: ../cli/src/connections.c:6418
+#: ../clients/cli/connections.c:6763
#, c-format
msgid "Error: invalid setting name; %s\n"
msgstr "దోషం: చెలà±à°²à°¨à°¿ అమరిక పేరà±; %s\n"
-#: ../cli/src/connections.c:6435
+#: ../clients/cli/connections.c:6780
#, c-format
msgid "Available properties: %s\n"
msgstr "à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹à°¨à°¿ లకà±à°·à°£à°¾à°²à±: %s\n"
-#: ../cli/src/connections.c:6443
+#: ../clients/cli/connections.c:6788
#, c-format
msgid "Error: property %s\n"
msgstr "దోషం: లకà±à°·à°£à°‚ %s\n"
-#: ../cli/src/connections.c:6484
+#: ../clients/cli/connections.c:6829
+#, 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? [yes] "
+"Do you still want to save? %s"
msgstr ""
"'autoconnect=yes' తో à°…à°¨à±à°¸à°‚ధానం దాయà±à°šà±à°¨à±à°¨à°¦à°¿. అది à°…à°¨à±à°¸à°‚ధానం తకà±à°·à°£à°‚ à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°‚ "
-"à°…à°—à±à°¨à°Ÿà±à°²à± చేయà±à°¨à±.\n"
-"మీరౠఇంకా దాయలని à°…à°¨à±à°•à±Šà°‚à°Ÿà±à°¨à±à°¨à°¾à°°à°¾? [yes] "
+"à°…à°—à±à°¨à°Ÿà±à°²à± "
+"చేయà±à°¨à±.\n"
+"మీరౠఇంకా దాయలని à°…à°¨à±à°•à±Šà°‚à°Ÿà±à°¨à±à°¨à°¾à°°à°¾? %s"
-#: ../cli/src/connections.c:6557
+#: ../clients/cli/connections.c:6904
#, c-format
msgid "You may edit the following settings: %s\n"
msgstr "మీరౠకింది అమరికలనౠసరికూరà±à°šà°µà°šà±à°šà±: %s\n"
-#: ../cli/src/connections.c:6583
+#: ../clients/cli/connections.c:6931
#, c-format
msgid ""
"The connection profile has been removed from another client. You may type "
"'save' to restore it.\n"
msgstr ""
"à°…à°¨à±à°¸à°‚ధాన à°ªà±à°°à±Šà°«à±ˆà°²à± à°…à°¨à±à°¨à°¦à°¿ వేరొక à°•à±à°²à±ˆà°‚à°Ÿà± à°¨à±à°‚à°¡à°¿ తీసివేయబడింది. దానిని తిరిగి "
-"ఉంచà±à°Ÿà°•à± మీరౠ'save' టైపౠచేయవచà±à°šà±.\n"
+"ఉంచà±à°Ÿà°•à± మీరౠ'save' టైపౠ"
+"చేయవచà±à°šà±.\n"
-#: ../cli/src/connections.c:6613 ../cli/src/connections.c:6671
+#: ../clients/cli/connections.c:6960 ../clients/cli/connections.c:7015
#, c-format
msgid "Allowed values for '%s' property: %s\n"
msgstr "'%s' లకà±à°·à°£à°‚ కొరకౠఅనà±à°®à°¤à°¿à°¨à°¿à°šà±à°šà± విలà±à°µà°²à±: %s\n"
-#: ../cli/src/connections.c:6625 ../cli/src/connections.c:6842
+#: ../clients/cli/connections.c:6970 ../clients/cli/connections.c:7184
#, c-format
msgid "Error: no setting selected; valid are [%s]\n"
msgstr "దోషం: ఠఅమరిక ఎంపికకాలేదà±; చెలà±à°²à±à°¨à°µà°¿ [%s]\n"
-#: ../cli/src/connections.c:6626
+#: ../clients/cli/connections.c:6971
#, 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
+#: ../clients/cli/connections.c:6985 ../clients/cli/connections.c:7121
+#: ../clients/cli/connections.c:7201
#, c-format
msgid "Error: invalid setting argument '%s'; valid are [%s]\n"
msgstr "దోషం: చెలà±à°²à°¨à°¿ అమరిక ఆరà±à°—à±à°®à±†à°‚à°Ÿà± '%s'; చెలà±à°²à±à°¨à°µà°¿ [%s]\n"
-#: ../cli/src/connections.c:6651
+#: ../clients/cli/connections.c:6995
#, c-format
msgid "Error: missing setting for '%s' property\n"
msgstr "దోషం: '%s' లకà±à°·à°£à°‚ కొరకౠదొరకని అమరిక\n"
-#: ../cli/src/connections.c:6658
+#: ../clients/cli/connections.c:7002
#, c-format
msgid "Error: invalid property: %s\n"
msgstr "దోషం: చెలà±à°²à°¨à°¿ లకà±à°·à°£à°‚: %s\n"
-#: ../cli/src/connections.c:6707
+#: ../clients/cli/connections.c:7049
#, c-format
msgid "Error: unknown setting '%s'\n"
msgstr "దోషం: తెలియని అమరిక '%s'\n"
-#: ../cli/src/connections.c:6720
+#: ../clients/cli/connections.c:7062
#, c-format
msgid "You may edit the following properties: %s\n"
msgstr "బహà±à°¶à°¾ మీరౠకింది లకà±à°·à°£à°¾à°²à°¨à± సరికూరà±à°šà°µà°šà±à°šà±: %s\n"
-#: ../cli/src/connections.c:6764
+#: ../clients/cli/connections.c:7106
#, c-format
msgid "Error: no argument given; valid are [%s]\n"
msgstr "దోషం: ఠఆరà±à°—à±à°®à±†à°‚టౠఈయలేదà±; చెలà±à°²à±à°¨à°µà°¿ [%s]\n"
-#: ../cli/src/connections.c:6777
+#: ../clients/cli/connections.c:7119
#, c-format
msgid "Setting '%s' is not present in the connection.\n"
msgstr "అమరిక '%s' à°…à°¨à±à°¨à°¦à°¿ à°…à°¨à±à°¸à°‚ధానం నందౠలేదà±.\n"
-#: ../cli/src/connections.c:6818
+#: ../clients/cli/connections.c:7160
#, c-format
msgid "Error: %s properties, nor it is a setting name.\n"
msgstr "దోషం: %s లకà±à°·à°£à°¾à°²à±, అది పేరà±à°¨à± అమరà±à°šà±à°Ÿà°²à±‡à°¦à±.\n"
-#: ../cli/src/connections.c:6843
+#: ../clients/cli/connections.c:7185
#, 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
+#: ../clients/cli/connections.c:7226
#, 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
+#: ../clients/cli/connections.c:7255
#, c-format
msgid "Error: unknown setting: '%s'\n"
msgstr "దోషం: తెలియని అమరిక: '%s'\n"
-#: ../cli/src/connections.c:6927
+#: ../clients/cli/connections.c:7260
+#, 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"
+
+#: ../clients/cli/connections.c:7285
+#, c-format
+#| msgid "Error: invalid property: %s\n"
+msgid "Error: invalid property: %s%s\n"
+msgstr "దోషం: చెలà±à°²à°¨à°¿ లకà±à°·à°£à°‚: %s%s\n"
+
+#: ../clients/cli/connections.c:7287
+#| msgid "Error: invalid property: %s, neither a valid setting name.\n"
+msgid ", neither a valid setting name"
+msgstr ", చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ అమరిక పేరౠకాదà±"
+
+#: ../clients/cli/connections.c:7307
#, c-format
msgid "Verify setting '%s': %s\n"
msgstr "అమరిక '%s' నిరà±à°¥à°¾à°°à°¿à°‚à°šà±: %s\n"
-#: ../cli/src/connections.c:6934
+#: ../clients/cli/connections.c:7314
#, c-format
msgid "Verify connection: %s\n"
msgstr "à°…à°¨à±à°¸à°‚ధానం నిరà±à°¥à°¾à°°à°¿à°‚à°šà±: %s\n"
-#: ../cli/src/connections.c:6973
+#: ../clients/cli/connections.c:7332
+#, c-format
+#| msgid "Error: invalid extra argument '%s'."
+msgid "Error: invalid argument '%s'\n"
+msgstr "దోషమà±: చెలà±à°²à°¨à°¿ ఆరà±à°—à±à°®à±†à°‚à°Ÿà± '%s'\n"
+
+#: ../clients/cli/connections.c:7365
#, c-format
msgid "Error: Failed to save '%s' (%s) connection: (%d) %s\n"
msgstr "దోషం: '%s' (%s) à°…à°¨à±à°¸à°‚ధానం దాయà±à°Ÿà°•à± విఫలమైంది: (%d) %s\n"
-#: ../cli/src/connections.c:6980
+#: ../clients/cli/connections.c:7373
#, c-format
msgid "Connection '%s' (%s) successfully saved.\n"
msgstr "à°…à°¨à±à°¸à°‚ధానం '%s' (%s) విజయవంతంగా దాయబడింది.\n"
-#: ../cli/src/connections.c:7014
+#: ../clients/cli/connections.c:7374
+#, c-format
+#| msgid "Connection '%s' (%s) successfully added.\n"
+msgid "Connection '%s' (%s) successfully updated.\n"
+msgstr "à°…à°¨à±à°¸à°‚ధానం '%s' (%s) విజయవంతంగా నవీకరించబడెనà±.\n"
+
+#: ../clients/cli/connections.c:7407
#, c-format
msgid "Error: connection verification failed: %s\n"
msgstr "దోషం: à°…à°¨à±à°¸à°‚ధానం నిరà±à°§à°¾à°°à°£ విఫలమైంది: %s\n"
-#: ../cli/src/connections.c:7015
+#: ../clients/cli/connections.c:7408
msgid "(unknown error)"
msgstr "(తెలియని దోషం)"
-#: ../cli/src/connections.c:7036
+#: ../clients/cli/connections.c:7429
#, c-format
msgid "Error: connection is not saved. Type 'save' first.\n"
msgstr "దోషం: à°…à°¨à±à°¸à°‚ధానం దాయబడలేదà±. à°®à±à°‚దౠ'save' టైపà±à°šà±‡à°¯à°¿.\n"
-#: ../cli/src/connections.c:7040
+#: ../clients/cli/connections.c:7433
#, c-format
msgid "Error: connection is not valid: %s\n"
msgstr "దోషం: à°…à°¨à±à°¸à°‚ధానం చెలà±à°²à±à°¨à°¦à°¿ కాదà±: %s\n"
-#: ../cli/src/connections.c:7051
+#: ../clients/cli/connections.c:7443
#, c-format
msgid "Error: Cannot activate connection: %s.\n"
msgstr "దోషం: à°…à°¨à±à°¸à°‚ధానం à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà°²à±‡à°¦à±: %s.\n"
-#: ../cli/src/connections.c:7061
+#: ../clients/cli/connections.c:7453
#, c-format
msgid "Error: Failed to activate '%s' (%s) connection: (%d) %s\n"
msgstr "దోషం: '%s' (%s) à°…à°¨à±à°¸à°‚ధానం à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà±à°Ÿà°•à± విఫలమైంది: (%d) %s\n"
-#: ../cli/src/connections.c:7067
+#: ../clients/cli/connections.c:7459
#, c-format
msgid "Monitoring connection activation (press any key to continue)\n"
msgstr "à°…à°¨à±à°¸à°‚ధానం à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°¤ పరà±à°¯à°µà±‡à°•à±à°·à°£ (కొనసాగà±à°Ÿà°•à± à°à°¦à±‡à°¨à°¿ కీనౠవతà±à°¤à±à°®à±)\n"
-#: ../cli/src/connections.c:7105
+#: ../clients/cli/connections.c:7497
#, c-format
msgid "Error: status-line: %s\n"
msgstr "దోషం: à°¸à±à°¥à°¿à°¤à°¿-వరà±à°¸: %s\n"
-#: ../cli/src/connections.c:7113
+#: ../clients/cli/connections.c:7505
#, c-format
msgid "Error: save-confirmation: %s\n"
msgstr "దోషం: దాపà±-నిరà±à°§à°¾à°°à°£: %s\n"
-#: ../cli/src/connections.c:7121
+#: ../clients/cli/connections.c:7513
#, c-format
msgid "Error: bad color number: '%s'; use <0-8>\n"
msgstr "దోషం: చెడà±à°¡ రంగౠసంఖà±à°¯: '%s'; వాడà±à°• <0-8>\n"
-#: ../cli/src/connections.c:7133
+#: ../clients/cli/connections.c:7525
#, c-format
msgid "Current nmcli configuration:\n"
msgstr "à°ªà±à°°à°¸à±à°¤à±à°¤ nmcli ఆకృతీకరణ:\n"
-#: ../cli/src/connections.c:7141
+#: ../clients/cli/connections.c:7533
#, 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
+#: ../clients/cli/connections.c:7775
#, 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
+#: ../clients/cli/connections.c:7787 ../clients/cli/connections.c:7968
+#: ../clients/cli/connections.c:7975
#, c-format
msgid "Error: Unknown connection '%s'."
msgstr "దోషం: తెలియని à°…à°¨à±à°¸à°‚ధానం '%s'."
-#: ../cli/src/connections.c:7417
+#: ../clients/cli/connections.c:7802
#, c-format
msgid "Warning: editing existing connection '%s'; 'type' argument is ignored\n"
msgstr ""
"హెచà±à°šà°°à°¿à°•: ఉనà±à°¨ à°…à°¨à±à°¸à°‚ధానం '%s' సరికూరà±à°šà±à°¤à±‹à°‚ది; 'type' ఆరà±à°—à±à°®à±†à°‚à°Ÿà± "
"విసà±à°®à°°à°¿à°‚చబడెనà±\n"
-#: ../cli/src/connections.c:7420
+#: ../clients/cli/connections.c:7805
#, c-format
msgid ""
"Warning: editing existing connection '%s'; 'con-name' argument is ignored\n"
@@ -2568,363 +2956,458 @@ msgstr ""
"హెచà±à°šà°°à°¿à°•: ఉనà±à°¨ à°…à°¨à±à°¸à°‚ధానం '%s' సరికూరà±à°šà±à°¤à±‹à°‚ది; 'con-name' ఆరà±à°—à±à°®à±†à°‚à°Ÿà± "
"విసà±à°®à°°à°¿à°‚చబడెనà±\n"
-#: ../cli/src/connections.c:7434
+#: ../clients/cli/connections.c:7819
#, c-format
msgid "Valid connection types: %s\n"
msgstr "చెలà±à°²à°¨à°¿ à°…à°¨à±à°¸à°‚ధాన రకాలà±: %s\n"
-#: ../cli/src/connections.c:7436
+#: ../clients/cli/connections.c:7821
#, c-format
msgid "Error: invalid connection type; %s\n"
msgstr "దోషం: చెలà±à°²à°¨à°¿ à°…à°¨à±à°¸à°‚ధాన à°°à°•à°‚; %s\n"
-#: ../cli/src/connections.c:7472
+#: ../clients/cli/connections.c:7860
#, c-format
msgid "===| nmcli interactive connection editor |==="
msgstr "===| nmcli ఇంటరాకà±à°Ÿà°¿à°µà± à°…à°¨à±à°¸à°‚ధాన సరికూరà±à°ªà°°à°¿ |==="
-#: ../cli/src/connections.c:7475
+#: ../clients/cli/connections.c:7863
#, c-format
msgid "Editing existing '%s' connection: '%s'"
msgstr "ఉనà±à°¨ '%s' à°…à°¨à±à°¸à°‚ధానం సరికూరà±à°šà±à°¤à±‹à°‚ది: '%s'"
-#: ../cli/src/connections.c:7477
+#: ../clients/cli/connections.c:7865
#, c-format
msgid "Adding a new '%s' connection"
msgstr "కొతà±à°¤ '%s' à°…à°¨à±à°¸à°‚ధానం జతచేసà±à°¤à±‹à°‚ది"
-#: ../cli/src/connections.c:7479
+#: ../clients/cli/connections.c:7867
#, c-format
msgid "Type 'help' or '?' for available commands."
msgstr "à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹à°¨à°¿ ఆదేశాల కొరకౠ'help' లేదా '?' టైపౠచేయండి."
-#: ../cli/src/connections.c:7481
+#: ../clients/cli/connections.c:7869
#, c-format
msgid "Type 'describe [<setting>.<prop>]' for detailed property description."
msgstr "లకà±à°·à°£à°‚ విశదీకృత వివరమ కొరకౠ'describe [<setting>.<prop>]' టైపౠచేయండి."
-#: ../cli/src/connections.c:7520
+#: ../clients/cli/connections.c:7905
#, c-format
msgid "Error: Failed to modify connection '%s': (%d) %s"
msgstr "దోషం: à°…à°¨à±à°¸à°‚ధానం '%s' సవరించà±à°Ÿà°•à± విఫలమైంది: (%d) %s"
-#: ../cli/src/connections.c:7526
+#: ../clients/cli/connections.c:7911
#, c-format
msgid "Connection '%s' (%s) successfully modified.\n"
msgstr "à°…à°¨à±à°¸à°‚ధానం '%s' (%s) విజయవంతంగా సవరించబడింది.\n"
-#: ../cli/src/connections.c:7553
+#: ../clients/cli/connections.c:7943
#, c-format
msgid "Error: No arguments provided."
msgstr "దోషం: ఠఆరà±à°—à±à°®à±†à°‚à°Ÿà±à°²à± అందించబడలేదà±."
-#: ../cli/src/connections.c:7577
+#: ../clients/cli/connections.c:7962
#, c-format
msgid "Error: connection ID is missing."
msgstr "దోషం: à°…à°¨à±à°¸à°‚ధానం ID దొరకలేదà±."
-#: ../cli/src/connections.c:7582
+#: ../clients/cli/connections.c:7984 ../clients/cli/connections.c:7997
#, c-format
msgid "Error: <setting>.<property> argument is missing."
msgstr "దోషం: <setting>.<property> ఆరà±à°—à±à°®à±†à°‚టౠదొరకలేదà±."
-#: ../cli/src/connections.c:7605
+#: ../clients/cli/connections.c:8002
+#, c-format
+#| msgid "Error: fields for '%s' options are missing."
+msgid "Error: value for '%s' is missing."
+msgstr "దోషం: '%s' కొరకౠవిలà±à°µ దొరకలేదà±."
+
+#: ../clients/cli/connections.c:8020
#, c-format
msgid "Error: invalid <setting>.<property> '%s'."
msgstr "దోషà°: చెలà±à°²à°¨à°¿ <setting>.<property> '%s'."
-#: ../cli/src/connections.c:7620
+#: ../clients/cli/connections.c:8028
#, c-format
msgid "Error: invalid or not allowed setting '%s': %s."
msgstr "దోషం: చెలà±à°²à°¨à°¿à°¦à°¿ లేదా '%s' అమరిక à°…à°¨à±à°®à°¤à°¿à°‚చబడదà±: %s."
-#: ../cli/src/connections.c:7641
+#: ../clients/cli/connections.c:8049
#, c-format
msgid "Error: invalid property '%s': %s."
msgstr "దోషం: చెలà±à°²à°¨à°¿ లకà±à°·à°£à°‚ '%s': %s."
-#: ../cli/src/connections.c:7647
+#: ../clients/cli/connections.c:8060
#, c-format
msgid "Error: failed to modify %s.%s: %s."
msgstr "దోషం: %s సవరించà±à°Ÿà°•à± విఫలమైంది.%s: %s."
-#: ../cli/src/connections.c:7677
+#: ../clients/cli/connections.c:8078
+#, c-format
+#| msgid "Error: failed to remove value of '%s': %s\n"
+msgid "Error: failed to remove a value from %s.%s: %s."
+msgstr "దోషం: '%s' à°¨à±à°‚à°¡à°¿ విలà±à°µ తీసివేయà±à°Ÿà°•à± విఫలమైంది. %s: %s."
+
+#: ../clients/cli/connections.c:8114
#, c-format
msgid "Error: Connection deletion failed: %s"
msgstr "దోషమà±: à°…à°¨à±à°¸à°‚ధానమౠతొలగింపౠవిఫలమైంది: %s"
-#: ../cli/src/connections.c:7747
+#: ../clients/cli/connections.c:8176
#, c-format
msgid "Error: unknown connection: %s\n"
msgstr "దోషమà±: తెలియని à°…à°¨à±à°¸à°‚ధానం: %s\n"
-#: ../cli/src/connections.c:7781
+#. truncate trailing ", "
+#: ../clients/cli/connections.c:8212
#, 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
+#: ../clients/cli/connections.c:8229 ../clients/cli/connections.c:8257
+#: ../clients/cli/connections.c:8392 ../clients/cli/devices.c:2710
+#: ../clients/cli/network-manager.c:339 ../clients/cli/network-manager.c:477
#, c-format
-msgid ""
-"Error: 'configured' or 'active' command is expected for 'connection show'."
-msgstr "దోషం: 'configured' లేదా 'active' ఆదేశం 'connection show' కౠకావాలి."
+msgid "Error: NetworkManager is not running."
+msgstr "దోషం: నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± నడà±à°šà±à°Ÿà°²à±‡à°¦à±."
-#: ../cli/src/connections.c:7984
+#: ../clients/cli/connections.c:8283
#, c-format
-msgid "Error: '%s' is not valid 'connection' command."
-msgstr "దోషమà±: '%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ 'à°…à°¨à±à°¸à°‚ధాన' ఆదేశం కాదà±."
+msgid "Could not load file '%s'\n"
+msgstr "ఫైలౠ'%s' లోడౠచేయలేక పోయింది\n"
-#: ../cli/src/connections.c:8053 ../cli/src/network-manager.c:615
+#: ../clients/cli/connections.c:8402 ../clients/cli/network-manager.c:608
#, c-format
-msgid "Error: Could not get system settings."
-msgstr "దోషమà±: సిసà±à°Ÿà°®à± అమరికలనౠపొందలేక పోయింది."
+#| msgid "Error: Could not get system settings."
+msgid "Error: Could not get system settings: %s."
+msgstr "దోషం: సిసà±à°Ÿà°®à± అమరికలనౠపొందలేక పోయింది: %s."
-#: ../cli/src/connections.c:8063
+#: ../clients/cli/connections.c:8412
#, 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"
+#: ../clients/cli/connections.c:8466
+#, c-format
+msgid "Error: '%s' is not valid 'connection' command."
+msgstr "దోషమà±: '%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ 'à°…à°¨à±à°¸à°‚ధాన' ఆదేశం కాదà±."
+
+#. define some prompts
+#: ../clients/cli/devices.c:36
+msgid "Interface: "
+msgstr "ఇంటరà±à°«à±‡à°¸à±:"
-#: ../cli/src/devices.c:75 ../cli/src/devices.c:103
+#. 3
+#. 17
+#: ../clients/cli/devices.c:44 ../clients/cli/devices.c:73
msgid "CONNECTION"
msgstr "CONNECTION"
-#: ../cli/src/devices.c:76 ../cli/src/devices.c:104
+#. 4
+#. 18
+#: ../clients/cli/devices.c:45 ../clients/cli/devices.c:74
msgid "CON-UUID"
msgstr "CON-UUID"
-#: ../cli/src/devices.c:89
+#. 2
+#: ../clients/cli/devices.c:58
msgid "VENDOR"
msgstr "à°…à°®à±à°®à°•à°‚దారà±"
-#: ../cli/src/devices.c:90
+#. 3
+#: ../clients/cli/devices.c:59
msgid "PRODUCT"
msgstr "ఉతà±à°ªà°¤à±à°¤à°¿"
-#: ../cli/src/devices.c:91
+#. 4
+#: ../clients/cli/devices.c:60
msgid "DRIVER"
msgstr "à°¡à±à°°à±ˆà°µà°°à±"
-#: ../cli/src/devices.c:92
+#. 5
+#: ../clients/cli/devices.c:61
msgid "DRIVER-VERSION"
msgstr "à°¡à±à°°à±ˆà°µà°°à±-వరà±à°·à°¨à±"
-#: ../cli/src/devices.c:93
+#. 6
+#: ../clients/cli/devices.c:62
msgid "FIRMWARE-VERSION"
msgstr "FIRMWARE-VERSION"
-#: ../cli/src/devices.c:94
+#. 7
+#: ../clients/cli/devices.c:63
msgid "HWADDR"
msgstr "HWADDR"
-#: ../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
+#. 8
+#: ../clients/cli/devices.c:64 ../clients/tui/nmt-page-ethernet.c:86
+#: ../clients/tui/nmt-page-infiniband.c:96 ../clients/tui/nmt-page-vlan.c:130
+#: ../clients/tui/nmt-page-wifi.c:366
msgid "MTU"
msgstr "MTU"
-#: ../cli/src/devices.c:97
+#. 10
+#: ../clients/cli/devices.c:66
msgid "REASON"
msgstr "REASON"
-#: ../cli/src/devices.c:98
+#. 11
+#: ../clients/cli/devices.c:67
msgid "UDI"
msgstr "UDI"
-#: ../cli/src/devices.c:99
+#. 12
+#: ../clients/cli/devices.c:68
msgid "IP-IFACE"
msgstr "IP-IFACE"
-#: ../cli/src/devices.c:100
+#. 13
+#. 2
+#: ../clients/cli/devices.c:69 ../clients/cli/devices.c:97
+msgid "IS-SOFTWARE"
+msgstr "à°à°Žà°¸à±-సాఫà±à°Ÿà±â€Œà°µà±‡à°°à±"
+
+#. 14
+#: ../clients/cli/devices.c:70
msgid "NM-MANAGED"
msgstr "NM-MANAGED"
-#: ../cli/src/devices.c:102
+#. 16
+#: ../clients/cli/devices.c:72
msgid "FIRMWARE-MISSING"
msgstr "à°«à°°à±à°®à±à°µà±‡à°°à±-దొరకటà±à°²à±‡à°¦à±"
-#: ../cli/src/devices.c:115
+#. 0
+#: ../clients/cli/devices.c:85
msgid "AVAILABLE-CONNECTION-PATHS"
msgstr "AVAILABLE-CONNECTION-PATHS"
-#: ../cli/src/devices.c:116
+#. 1
+#: ../clients/cli/devices.c:86
msgid "AVAILABLE-CONNECTIONS"
msgstr "à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹à°¨à°¿-à°…à°¨à±à°¸à°‚ధానాలà±"
-#: ../cli/src/devices.c:125
+#. 0
+#: ../clients/cli/devices.c:95
msgid "CARRIER-DETECT"
msgstr "CARRIER-DETECT"
-#: ../cli/src/devices.c:126
+#. 1
+#: ../clients/cli/devices.c:96
msgid "SPEED"
msgstr "SPEED"
-#: ../cli/src/devices.c:135
+#. 0
+#: ../clients/cli/devices.c:106
msgid "CARRIER"
msgstr "CARRIER"
-#: ../cli/src/devices.c:144 ../cli/src/devices.c:563
+#. 0
+#: ../clients/cli/devices.c:115 ../clients/cli/devices.c:550
msgid "WEP"
msgstr "WEP"
-#: ../cli/src/devices.c:145
+#. 1
+#: ../clients/cli/devices.c:116
msgid "WPA"
msgstr "WPA"
-#: ../cli/src/devices.c:146 ../cli/src/devices.c:571
+#. 2
+#: ../clients/cli/devices.c:117 ../clients/cli/devices.c:558
msgid "WPA2"
msgstr "WPA2"
-#: ../cli/src/devices.c:147
+#. 3
+#: ../clients/cli/devices.c:118
msgid "TKIP"
msgstr "TKIP"
-#: ../cli/src/devices.c:148
+#. 4
+#: ../clients/cli/devices.c:119
msgid "CCMP"
msgstr "CCMP"
-#: ../cli/src/devices.c:149 ../cli/src/devices.c:239
+#. 5
+#. 2
+#: ../clients/cli/devices.c:120 ../clients/cli/devices.c:210
msgid "AP"
msgstr "AP"
-#: ../cli/src/devices.c:150
+#. 6
+#: ../clients/cli/devices.c:121
msgid "ADHOC"
msgstr "ADHOC"
-#: ../cli/src/devices.c:159
+#. 0
+#: ../clients/cli/devices.c:130
msgid "CTR-FREQ"
msgstr "CTR-FREQ"
-#: ../cli/src/devices.c:160
+#. 1
+#: ../clients/cli/devices.c:131
msgid "RSSI"
msgstr "RSSI"
-#: ../cli/src/devices.c:161
+#. 2
+#: ../clients/cli/devices.c:132
msgid "CINR"
msgstr "CINR"
-#: ../cli/src/devices.c:162
+#. 3
+#: ../clients/cli/devices.c:133
msgid "TX-POW"
msgstr "TX-POW"
-#: ../cli/src/devices.c:163
+#. 4
+#: ../clients/cli/devices.c:134
msgid "BSID"
msgstr "BSID"
-#: ../cli/src/devices.c:172 ../tui/nmt-page-wifi.c:221
+#. 0
+#: ../clients/cli/devices.c:143 ../clients/tui/nmt-page-wifi.c:220
msgid "SSID"
msgstr "SSID"
-#: ../cli/src/devices.c:173
+#. 1
+#: ../clients/cli/devices.c:144
msgid "SSID-HEX"
msgstr "SSID-HEX"
-#: ../cli/src/devices.c:174 ../tui/nmt-page-wifi.c:352
+#. 2
+#: ../clients/cli/devices.c:145 ../clients/tui/nmt-page-wifi.c:354
msgid "BSSID"
msgstr "BSSID"
-#: ../cli/src/devices.c:175
+#. 3
+#: ../clients/cli/devices.c:146
msgid "MODE"
msgstr "MODE"
-#: ../cli/src/devices.c:176
+#. 4
+#: ../clients/cli/devices.c:147
msgid "CHAN"
msgstr "CHAN"
-#: ../cli/src/devices.c:177
+#. 5
+#: ../clients/cli/devices.c:148
msgid "FREQ"
msgstr "FREQ"
-#: ../cli/src/devices.c:178
+#. 6
+#: ../clients/cli/devices.c:149
msgid "RATE"
msgstr "RATE"
-#: ../cli/src/devices.c:179 ../cli/src/devices.c:199
+#. 7
+#. 1
+#: ../clients/cli/devices.c:150 ../clients/cli/devices.c:170
msgid "SIGNAL"
msgstr "SIGNAL"
-#: ../cli/src/devices.c:180
+#. 8
+#: ../clients/cli/devices.c:151
msgid "BARS"
msgstr "BARS"
-#: ../cli/src/devices.c:181
+#. 9
+#: ../clients/cli/devices.c:152
msgid "SECURITY"
msgstr "SECURITY"
-#: ../cli/src/devices.c:182
+#. 10
+#: ../clients/cli/devices.c:153
msgid "WPA-FLAGS"
msgstr "WPA-FLAGS"
-#: ../cli/src/devices.c:183
+#. 11
+#: ../clients/cli/devices.c:154
msgid "RSN-FLAGS"
msgstr "RSN-FLAGS"
-#: ../cli/src/devices.c:185 ../cli/src/devices.c:202
-msgid "ACTIVE"
-msgstr "ACTIVE"
-
-#: ../cli/src/devices.c:186
+#. 14
+#: ../clients/cli/devices.c:157
msgid "*"
msgstr "*"
-#: ../cli/src/devices.c:198 ../cli/src/devices.c:242
+#. 0
+#. 5
+#: ../clients/cli/devices.c:169 ../clients/cli/devices.c:213
msgid "NSP"
msgstr "NSP"
-#: ../cli/src/devices.c:213
+#. 0
+#: ../clients/cli/devices.c:184
msgid "SLAVES"
msgstr "à°¸à±à°²à±‡à°µà±à°¸à±"
-#: ../cli/src/devices.c:222
+#. 0
+#: ../clients/cli/devices.c:193
msgid "ID"
msgstr "ID"
-#: ../cli/src/devices.c:237
+#. 0
+#: ../clients/cli/devices.c:208
msgid "CAPABILITIES"
msgstr "CAPABILITIES"
-#: ../cli/src/devices.c:238
+#. 1
+#: ../clients/cli/devices.c:209
msgid "WIFI-PROPERTIES"
msgstr "WIFI-PROPERTIES"
-#: ../cli/src/devices.c:240
+#. 3
+#: ../clients/cli/devices.c:211
msgid "WIRED-PROPERTIES"
msgstr "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:241
+#. 4
+#: ../clients/cli/devices.c:212
msgid "WIMAX-PROPERTIES"
msgstr "WIMAX-PROPERTIES"
-#: ../cli/src/devices.c:247 ../tui/nmt-page-bond.c:73
+#. 10
+#: ../clients/cli/devices.c:218 ../clients/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
+#. 12
+#: ../clients/cli/devices.c:220
msgid "CONNECTIONS"
msgstr "à°…à°¨à±à°¸à°‚ధానాలà±"
-#: ../cli/src/devices.c:274
-#, c-format
+#: ../clients/cli/devices.c:245
+#, c-format
+#| msgid ""
+#| "Usage: nmcli device { COMMAND | help }\n"
+#| "\n"
+#| "COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
+#| "\n"
+#| "COMMAND := { status | show | connect | disconnect | wifi }\n"
+#| "\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"
+#| " wimax [list [ifname <ifname>] [nsp <name>]]\n"
+#| "\n"
msgid ""
"Usage: nmcli device { COMMAND | help }\n"
"\n"
-"COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | delete | wifi | wimax }\n"
"\n"
-"COMMAND := { status | show | connect | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | delete | wifi }\n"
"\n"
" status\n"
"\n"
@@ -2934,6 +3417,8 @@ msgid ""
"\n"
" disconnect <ifname>\n"
"\n"
+" delete <ifname>\n"
+"\n"
" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
"\n"
" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
@@ -2945,11 +3430,11 @@ msgid ""
" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
msgstr ""
-"వాడà±à°•: nmcli device { COMMAND | help }\n"
+"Usage: nmcli device { COMMAND | help }\n"
"\n"
-"COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | delete | wifi | wimax }\n"
"\n"
-"COMMAND := { status | show | connect | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | delete | wifi }\n"
"\n"
" status\n"
"\n"
@@ -2959,6 +3444,8 @@ msgstr ""
"\n"
" disconnect <ifname>\n"
"\n"
+" delete <ifname>\n"
+"\n"
" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
"\n"
" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
@@ -2970,7 +3457,7 @@ msgstr ""
" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
-#: ../cli/src/devices.c:298
+#: ../clients/cli/devices.c:270
#, c-format
msgid ""
"Usage: nmcli device status { help }\n"
@@ -2981,8 +3468,10 @@ msgid ""
" 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"
+"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"
@@ -2999,7 +3488,7 @@ msgstr ""
"చేయà±à°¨à±.\n"
"\n"
-#: ../cli/src/devices.c:314
+#: ../clients/cli/devices.c:286
#, c-format
msgid ""
"Usage: nmcli device show { ARGUMENTS | help }\n"
@@ -3018,7 +3507,7 @@ msgstr ""
"ఆదేశం à°…à°¨à±à°¨à°¦à°¿ à°…à°¨à±à°¨à°¿ పరికరాల, లేదా ఇచà±à°šà°¿à°¨ పరికరం యొకà±à°• వివరాలౠజాబితాచేయà±à°¨à±.\n"
"\n"
-#: ../cli/src/devices.c:326
+#: ../clients/cli/devices.c:298
#, c-format
msgid ""
"Usage: nmcli device connect { ARGUMENTS | help }\n"
@@ -3026,8 +3515,8 @@ msgid ""
"ARGUMENTS := <ifname>\n"
"\n"
"Connect the device.\n"
-"NetworkManager will try to find a suitable connection that will be activated."
-"\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 ""
@@ -3036,12 +3525,11 @@ msgstr ""
"ARGUMENTS := <ifname>\n"
"\n"
"పరికరం à°…à°¨à±à°¸à°‚ధానించà±à°¨à±.\n"
-"à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°‚ చేయà±à°Ÿà°•à± à°…à°¨à±à°µà±ˆà°¨ à°…à°¨à±à°¸à°‚ధానం కొరకౠనెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± à°ªà±à°°à°¯à°¤à±à°¨à°¿à°‚à°šà±à°¨à±."
-"\n"
+"à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°‚ చేయà±à°Ÿà°•à± à°…à°¨à±à°µà±ˆà°¨ à°…à°¨à±à°¸à°‚ధానం కొరకౠనెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± à°ªà±à°°à°¯à°¤à±à°¨à°¿à°‚à°šà±à°¨à±.\n"
"à°¸à±à°µà°¯à°‚చాలకంగా-à°…à°¨à±à°¸à°‚ధానమగà±à°Ÿà°•à± అమరà±à°šà°¨à°¿ à°…à°¨à±à°¸à°‚ధానాలనౠకూడా అది పరిగణించà±à°¨à±.\n"
"\n"
-#: ../cli/src/devices.c:339
+#: ../clients/cli/devices.c:311
#, c-format
msgid ""
"Usage: nmcli device disconnect { ARGUMENTS | help }\n"
@@ -3063,7 +3551,38 @@ msgstr ""
"à°¸à±à°µà°¯à°‚చాలకంగా-à°•à±à°°à°¿à°¯à°¾à°¶à±€à°² పరచడం నిరోధించà±à°¨à±.\n"
"\n"
-#: ../cli/src/devices.c:352
+#: ../clients/cli/devices.c:324
+#, 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"
+msgid ""
+"Usage: nmcli device delete { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Deletes the software device.\n"
+"The command removes the interface. It only works for software devices\n"
+"(like bonds, bridges, etc.). Hardware devices cannot be deleted by the\n"
+"command.\n"
+"\n"
+msgstr ""
+"వాడà±à°•: nmcli device show { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [<ifname>]\n"
+"\n"
+"సాఫà±à°Ÿà±â€Œà°µà±‡à°°à± పరికరం తొలగించà±à°¨à±.\n"
+"ఆదేశం ఇంటరà±à°«à±‡à°¸à± తీసివేయà±à°¨à±. ఇది సాఫà±à°Ÿà±â€Œà°µà±‡à°°à± పరికరాల కొరకౠమాతà±à°°à°®à±‡ పనిచేయà±à°¨à±\n"
+"(బాండà±à°¸à±, à°¬à±à°°à°¿à°¡à±à°œà±†à°¸à±, మొదలగà±.). హారà±à°¡à±â€Œà°µà±‡à°°à± పరికరాలౠఆదేశమౠచేత\n"
+" తొలగించబడలేవà±.\n"
+"\n"
+
+#: ../clients/cli/devices.c:338
#, c-format
msgid ""
"Usage: nmcli device wifi { ARGUMENTS | help }\n"
@@ -3075,8 +3594,8 @@ msgid ""
"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"
+"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"
@@ -3090,8 +3609,10 @@ msgid ""
"\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"
+"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"
@@ -3103,11 +3624,12 @@ msgstr ""
"ARGUMENTS := [list [ifname <ifname>] [bssid <BSSID>]]\n"
"\n"
"à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹à°¨à°¿ Wi-Fi à°à°•à±à°¸à±†à°¸à± పాయింటà±à°²à°¨à± జాబితా చేయà±à°¨à±. ఫలానా ఇంటరà±à°«à±‡à°¸à±, లేదా "
-"ఫలానా BSSID కొరకౠAP లనౠజాబితా చేయà±à°Ÿà°•à±\n"
+"ఫలానా BSSID కొరకౠAP లనౠ"
+"జాబితా చేయà±à°Ÿà°•à±\n"
"'ifname' మరియౠ'bssid' à°à°šà±à°šà°¿à°•à°¾à°²à± ఉపయోగించవచà±à°šà±.\n"
"\n"
-"ARGUMENTS := connect <(B)SSID> [password <password>] [wep-key-type "
-"key|phrase] [ifname <ifname>]\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"
@@ -3133,7 +3655,7 @@ msgstr ""
"దాని కొరకౠ'nmcli device wifi list' ఉపయోగించండి.\n"
"\n"
-#: ../cli/src/devices.c:386
+#: ../clients/cli/devices.c:372
#, c-format
msgid ""
"Usage: nmcli device wimax { ARGUMENTS | help }\n"
@@ -3157,199 +3679,217 @@ msgstr ""
"జాబితా చేయà±à°Ÿà°•à± 'ifname' మరియౠ'nsp' à°à°šà±à°šà°¿à°•à°¾à°²à± ఉపయోగించవచà±à°šà±.\n"
"\n"
-#: ../cli/src/devices.c:480
+#: ../clients/cli/devices.c:461
msgid "(none)"
msgstr "(à°à°¦à±€à°•à°¾à°¦à±)"
-#: ../cli/src/devices.c:547
+#: ../clients/cli/devices.c:534
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:548
+#: ../clients/cli/devices.c:535
#, c-format
msgid "%u Mbit/s"
msgstr "%u Mbit/s"
-#: ../cli/src/devices.c:567
+#: ../clients/cli/devices.c:554
msgid "WPA1"
msgstr "WPA1"
-#: ../cli/src/devices.c:576
+#: ../clients/cli/devices.c:563
msgid "802.1X"
msgstr "802.1X"
-#: ../cli/src/devices.c:592
+#: ../clients/cli/devices.c:579
msgid "Ad-Hoc"
msgstr "Ad-Hoc"
-#: ../cli/src/devices.c:593
+#: ../clients/cli/devices.c:580
msgid "Infra"
msgstr "Infra"
-#: ../cli/src/devices.c:625
+#: ../clients/cli/devices.c:612
msgid "Home"
msgstr "నివాసం"
-#: ../cli/src/devices.c:628
+#: ../clients/cli/devices.c:615
msgid "Partner"
msgstr "భాగసà±à°µà°¾à°®à°¿"
-#: ../cli/src/devices.c:631
+#: ../clients/cli/devices.c:618
msgid "Roaming"
msgstr "రోమింగà±"
-#: ../cli/src/devices.c:725
+#: ../clients/cli/devices.c:712
msgid "Device details"
msgstr "పరికరమౠవివరమà±à°²à±"
-#: ../cli/src/devices.c:737
+#: ../clients/cli/devices.c:724
#, 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
+#: ../clients/cli/devices.c:775 ../clients/cli/devices.c:778
+#: ../clients/cli/devices.c:1417 ../clients/cli/devices.c:1557
+#: ../clients/cli/devices.c:1659
msgid "(unknown)"
msgstr "(తెలియని)"
-#: ../cli/src/devices.c:827
+#: ../clients/cli/devices.c:816
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
-#: ../cli/src/devices.c:913
+#: ../clients/cli/devices.c:902
msgid "on"
msgstr "ఆనà±"
-#: ../cli/src/devices.c:913
+#: ../clients/cli/devices.c:902
msgid "off"
msgstr "ఆఫà±"
-#: ../cli/src/devices.c:1188
+#: ../clients/cli/devices.c:1177
#, c-format
msgid "Error: 'device status': %s"
msgstr "దోషం: 'పరికరం చూపà±': %s"
-#: ../cli/src/devices.c:1206
+#. Add headers
+#: ../clients/cli/devices.c:1184
msgid "Status of devices"
msgstr "పరికరమà±à°² యొకà±à°• à°¸à±à°¥à°¿à°¤à°¿"
-#: ../cli/src/devices.c:1237
+#: ../clients/cli/devices.c:1215
#, c-format
msgid "Error: invalid extra argument '%s'."
msgstr "దోషమà±: చెలà±à°²à°¨à°¿ అదనపౠఆరà±à°—à±à°®à±†à°‚à°Ÿà± '%s'."
-#: ../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
+#: ../clients/cli/devices.c:1232 ../clients/cli/devices.c:1500
+#: ../clients/cli/devices.c:1629 ../clients/cli/devices.c:1713
+#: ../clients/cli/devices.c:1846 ../clients/cli/devices.c:2503
#, c-format
msgid "Error: Device '%s' not found."
msgstr "దోషమà±: పరికరమౠ'%s' కనబడలేదà±."
-#: ../cli/src/devices.c:1319
+#: ../clients/cli/devices.c:1287
#, c-format
-msgid "Success: Device '%s' successfully activated."
-msgstr "సఫలం: పరికరం '%s' సఫలవంతంగా à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà°¬à°¡à±†à°¨à±."
+#| msgid "Success: Device '%s' successfully activated."
+msgid "Device '%s' successfully activated with '%s'.\n"
+msgstr "పరికరం '%s' సఫలవంతంగా à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà°¬à°¡à±†à°¨à± '%s'తో.\n"
-#: ../cli/src/devices.c:1333
+#: ../clients/cli/devices.c:1308 ../clients/cli/devices.c:1356
+#, c-format
+msgid "Connection with UUID '%s' created and activated on device '%s'\n"
+msgstr ""
+"UUID '%s' తో à°…à°¨à±à°¸à°‚ధానం సృషà±à°Ÿà°¿à°‚చబడింది మరియౠపరికరం '%s' పై à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà°¬à°¡à±†à°¨à±\n"
+
+#: ../clients/cli/devices.c:1313
+#, c-format
+msgid "Error: Connection activation failed: (%d) %s."
+msgstr "దోషమà±: à°…à°¨à±à°¸à°‚ధానమౠకà±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà±à°Ÿ విఫలమైంది: (%d) %s."
+
+#: ../clients/cli/devices.c:1338
+#, c-format
+msgid "Error: Failed to add/activate new connection: (%d) %s"
+msgstr "దోషం: కొతà±à°¤ à°…à°¨à±à°¸à°‚ధానం జతచేయà±à°Ÿà°•à±/à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà±à°Ÿà°•à± విఫలమైంది: (%d) %s"
+
+#: ../clients/cli/devices.c:1346
+#, c-format
+msgid "Error: Failed to add/activate new connection: Unknown error"
+msgstr ""
+"దోషం: కొతà±à°¤ à°…à°¨à±à°¸à°‚ధానం జతచేయà±à°Ÿà°•à±/à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà±à°Ÿà°•à± విఫలమైంది: తెలియని దోషం"
+
+#: ../clients/cli/devices.c:1416
#, c-format
msgid "Error: Device activation failed: %s"
msgstr "దోషం: పరికరం à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°¤ విఫలమైంది: %s"
-#: ../cli/src/devices.c:1350
+#: ../clients/cli/devices.c:1424
+#, c-format
+#| msgid "Error: Device activation failed: %s"
+msgid "Error: Device activation failed: device was disconnected"
+msgstr "దోషం: పరికరం à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°¤ విఫలమైంది: పరికరం అననà±à°¸à°‚ధానించబడెనà±"
+
+#: ../clients/cli/devices.c:1438
#, 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
+#: ../clients/cli/devices.c:1469 ../clients/cli/devices.c:1478
+#: ../clients/cli/devices.c:1598 ../clients/cli/devices.c:1607
+#: ../clients/cli/devices.c:1683 ../clients/cli/devices.c:1691
#, c-format
msgid "Error: No interface specified."
msgstr "దోషమà±: ఠయింటరà±à°«à±‡à°¸à± తెలà±à°ªà°²à±‡à°¦à±."
-#: ../cli/src/devices.c:1396 ../cli/src/devices.c:1531
+#: ../clients/cli/devices.c:1484 ../clients/cli/devices.c:1613
+#: ../clients/cli/devices.c:1697
#, c-format
msgid "Error: extra argument not allowed: '%s'."
msgstr "దోషం: అదనపౠఆరà±à°—à±à°®à±†à°‚à°Ÿà± à°…à°¨à±à°®à°¤à°¿à°‚చబడదà±: '%s'."
-#: ../cli/src/devices.c:1459
+#: ../clients/cli/devices.c:1542
#, c-format
msgid "Success: Device '%s' successfully disconnected."
msgstr "సఫలమైంది: పరికరమౠ'%s' సఫలవంతంగా అననà±à°¸à°‚ధానించబడింది."
-#: ../cli/src/devices.c:1471
+#: ../clients/cli/devices.c:1554
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "దోషమà±: పరికరమౠ'%s' (%s) అననà±à°¸à°‚ధానమౠవిఫలమైంది: %s"
-#: ../cli/src/devices.c:1485
+#: ../clients/cli/devices.c:1568
#, c-format
msgid "Device '%s' has been disconnected.\n"
msgstr "పరికరమౠ'%s' à°…à°¨à±à°¸à°‚ధానం తెంచబడింది.\n"
-#: ../cli/src/devices.c:1628
+#: ../clients/cli/devices.c:1656
+#, c-format
+#| msgid "Error: Device '%s' (%s) disconnecting failed: %s"
+msgid "Error: Device '%s' (%s) deletion failed: %s"
+msgstr "దోషమà±: పరికరమౠ'%s' (%s) తొలగింపౠవిఫలమైంది: %s"
+
+#: ../clients/cli/devices.c:1719
+#, c-format
+#| msgid "Error: setting '%s' is mandatory and cannot be removed.\n"
+msgid "Error: Device '%s' is a hardware device. It can't be deleted."
+msgstr "దోషం: పరికరం '%s' హారà±à°¡à±â€Œà°µà±‡à°°à± పరికరం. అది తొలగించబడదà±."
+
+#: ../clients/cli/devices.c:1789
msgid "Wi-Fi scan list"
msgstr "వై-ఫై à°¸à±à°•à°¾à°¨à± జాబితా"
-#: ../cli/src/devices.c:1666
+#: ../clients/cli/devices.c:1827
#, c-format
msgid "Error: 'device wifi': %s"
msgstr "దోషం: 'పరికర వైఫై': %s"
-#: ../cli/src/devices.c:1719 ../cli/src/devices.c:1788
+#: ../clients/cli/devices.c:1869 ../clients/cli/devices.c:1944
#, c-format
msgid "Error: Access point with bssid '%s' not found."
msgstr "దోషమà±: bssid '%s' తో యాకà±à°¸à±†à°¸à± పాయింటౠకనబడలేదà±."
-#: ../cli/src/devices.c:1743 ../cli/src/devices.c:2131
-#: ../cli/src/devices.c:2293
+#: ../clients/cli/devices.c:1893 ../clients/cli/devices.c:2210
+#: ../clients/cli/devices.c:2371
#, c-format
msgid "Error: Device '%s' is not a Wi-Fi device."
msgstr "దోషమà±: పరికరమౠ'%s' à°…à°¨à±à°¨à°¦à°¿ Wi-Fi పరికరమౠకాదà±."
-#: ../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:1829
-#, c-format
-msgid "Error: Connection activation failed: (%d) %s."
-msgstr "దోషమà±: à°…à°¨à±à°¸à°‚ధానమౠకà±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà±à°Ÿ విఫలమైంది: (%d) %s."
-
-#: ../cli/src/devices.c:1854
-#, c-format
-msgid "Error: Failed to add/activate new connection: (%d) %s"
-msgstr "దోషం: కొతà±à°¤ à°…à°¨à±à°¸à°‚ధానం జతచేయà±à°Ÿà°•à±/à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà±à°Ÿà°•à± విఫలమైంది: (%d) %s"
-
-#: ../cli/src/devices.c:1862
-#, c-format
-msgid "Error: Failed to add/activate new connection: Unknown error"
-msgstr ""
-"దోషం: కొతà±à°¤ à°…à°¨à±à°¸à°‚ధానం జతచేయà±à°Ÿà°•à±/à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà±à°Ÿà°•à± విఫలమైంది: తెలియని దోషం"
-
-#: ../cli/src/devices.c:2013
+#: ../clients/cli/devices.c:2103
msgid "SSID or BSSID: "
msgstr "SSID లేదా BSSID: "
-#: ../cli/src/devices.c:2018
+#: ../clients/cli/devices.c:2108
#, c-format
msgid "Error: SSID or BSSID are missing."
msgstr "దోషమà±: SSID లేదా BSSID దొరకటà±à°²à±‡à°¦à±."
-#: ../cli/src/devices.c:2042
+#: ../clients/cli/devices.c:2132
#, c-format
msgid "Error: bssid argument value '%s' is not a valid BSSID."
msgstr "దోషమà±: bssid ఆరà±à°—à±à°®à±†à°‚టౠవిలà±à°µ '%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ BSSID కాదà±."
-#: ../cli/src/devices.c:2066
+#: ../clients/cli/devices.c:2156
#, c-format
msgid ""
"Error: wep-key-type argument value '%s' is invalid, use 'key' or 'phrase'."
@@ -3357,142 +3897,154 @@ msgstr ""
"దోషం: wep-key-type ఆరà±à°—à±à°®à±†à°‚టౠవిలà±à°µ '%s' చెలà±à°²à°¨à°¿à°¦à°¿, 'key' లేదా 'phrase' "
"à°µà±à°ªà°¯à±‹à°—à°¿à°‚à°šà±."
-#: ../cli/src/devices.c:2086
+#: ../clients/cli/devices.c:2176
#, c-format
msgid "Error: %s: %s."
msgstr "దోషం: %s: %s."
-#: ../cli/src/devices.c:2101
+#: ../clients/cli/devices.c:2191
#, c-format
msgid "Error: BSSID to connect to (%s) differs from bssid argument (%s)."
msgstr ""
"దోషం: (%s) à°•à± à°…à°¨à±à°¸à°‚ధానమగà±à°Ÿà°•à± BSSID à°…à°¨à±à°¨à°¦à°¿ bssid ఆరà±à°—à±à°®à±†à°‚à°Ÿà± (%s)తో "
"విభేదిసà±à°¤à±‹à°‚ది."
-#: ../cli/src/devices.c:2107
+#: ../clients/cli/devices.c:2197
#, c-format
msgid "Error: Parameter '%s' is neither SSID nor BSSID."
msgstr "దోషం: పారామితి '%s' à°…à°¨à±à°¨à°¦à°¿ SSID లేదా BSSID కాదà±."
-#: ../cli/src/devices.c:2133 ../cli/src/devices.c:2295
+#: ../clients/cli/devices.c:2212 ../clients/cli/devices.c:2373
#, c-format
msgid "Error: No Wi-Fi device found."
msgstr "దోషమà±: à° Wi-Fi పరికరమౠకనబడలేదà±."
-#: ../cli/src/devices.c:2151
+#: ../clients/cli/devices.c:2230
#, c-format
msgid "Error: No network with SSID '%s' found."
msgstr "దోషమà±: SSID '%s'తో ఠనెటà±à°µà°°à±à°•à± కనబడలేదà±."
-#: ../cli/src/devices.c:2153
+#: ../clients/cli/devices.c:2232
#, c-format
msgid "Error: No access point with BSSID '%s' found."
msgstr "దోషమà±: BSSID '%s'తో యే యాకà±à°¸à±†à°¸à± పాయింటౠకనబడలేదà±."
-#: ../cli/src/devices.c:2192
+#: ../clients/cli/devices.c:2271
msgid "Password: "
msgstr "సంకేతపదం:"
-#: ../cli/src/devices.c:2321
+#: ../clients/cli/devices.c:2399
#, c-format
msgid "Error: 'device wifi' command '%s' is not valid."
msgstr "దోషమà±: 'పరికర వైఫే' ఆదేశమౠ'%s' చెలà±à°²à°¨à°¿à°¦à°¿."
-#: ../cli/src/devices.c:2368
+#: ../clients/cli/devices.c:2446
msgid "WiMAX NSP list"
msgstr "WiMAX NSP జాబితా"
-#: ../cli/src/devices.c:2405
+#: ../clients/cli/devices.c:2483
#, c-format
msgid "Error: 'device wimax': %s"
msgstr "దోషమà±: 'పరికర wimax': %s"
-#: ../cli/src/devices.c:2459
+#: ../clients/cli/devices.c:2526
#, c-format
msgid "Error: NSP with name '%s' not found."
msgstr "దోషమà±: పేరౠ'%s'తో NSP కనబడలేదà±."
-#: ../cli/src/devices.c:2472
+#: ../clients/cli/devices.c:2539
#, c-format
msgid "Error: Device '%s' is not a WiMAX device."
msgstr "దోషమà±: పరికరం '%s' WiMAX పరికరం కాదà±."
-#: ../cli/src/devices.c:2510
+#: ../clients/cli/devices.c:2583
#, c-format
msgid "Error: Access point with nsp '%s' not found."
msgstr "దోషం: nsp '%s'తో యాకà±à°¸à±†à°¸à± పాయింటౠకనబడలేదà±."
-#: ../cli/src/devices.c:2542
+#: ../clients/cli/devices.c:2620
#, c-format
msgid "Error: 'device wimax' command '%s' is not valid."
msgstr "దోషం: 'పరికర wimax' ఆదేశం '%s' చెలà±à°²à±à°¨à°¦à°¿à°•à°¾à°¦à±."
-#: ../cli/src/devices.c:2621
+#: ../clients/cli/devices.c:2790
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "దోషమà±: 'dev' ఆదేశమౠ'%s' చెలà±à°²à°¨à°¿à°¦à°¿."
-#: ../cli/src/network-manager.c:37
+#: ../clients/cli/network-manager.c:35
msgid "RUNNING"
msgstr "RUNNING"
-#: ../cli/src/network-manager.c:38
+#. 0
+#: ../clients/cli/network-manager.c:36
msgid "VERSION"
msgstr "వరà±à°·à°¨à±"
-#: ../cli/src/network-manager.c:40
+#. 2
+#: ../clients/cli/network-manager.c:38
msgid "STARTUP"
msgstr "à°ªà±à°°à°¾à°°à°‚à°­à°‚"
-#: ../cli/src/network-manager.c:41
+#. 3
+#: ../clients/cli/network-manager.c:39
msgid "CONNECTIVITY"
msgstr "à°…à°¨à±à°¸à°‚ధానత"
-#: ../cli/src/network-manager.c:42
+#. 4
+#: ../clients/cli/network-manager.c:40
msgid "NETWORKING"
msgstr "నెటà±à°µà°°à±à°•à°¿à°‚à°—à±"
-#: ../cli/src/network-manager.c:43
+#. 5
+#: ../clients/cli/network-manager.c:41
msgid "WIFI-HW"
msgstr "WIFI-HW"
-#: ../cli/src/network-manager.c:44
+#. 6
+#: ../clients/cli/network-manager.c:42
msgid "WIFI"
msgstr "WIFI"
-#: ../cli/src/network-manager.c:45
+#. 7
+#: ../clients/cli/network-manager.c:43
msgid "WWAN-HW"
msgstr "WWAN-HW"
-#: ../cli/src/network-manager.c:46
+#. 8
+#: ../clients/cli/network-manager.c:44
msgid "WWAN"
msgstr "WWAN"
-#: ../cli/src/network-manager.c:47
+#. 9
+#: ../clients/cli/network-manager.c:45
msgid "WIMAX-HW"
msgstr "WIMAX-HW"
-#: ../cli/src/network-manager.c:48
+#. 10
+#: ../clients/cli/network-manager.c:46
msgid "WIMAX"
msgstr "వైమాకà±à°¸à±"
-#: ../cli/src/network-manager.c:70
+#: ../clients/cli/network-manager.c:68
msgid "PERMISSION"
msgstr "à°…à°¨à±à°®à°¤à°¿"
-#: ../cli/src/network-manager.c:71
+#. 0
+#: ../clients/cli/network-manager.c:69
msgid "VALUE"
msgstr "విలà±à°µ"
-#: ../cli/src/network-manager.c:79
+#: ../clients/cli/network-manager.c:77
msgid "LEVEL"
msgstr "à°¸à±à°¥à°¾à°¯à°¿"
-#: ../cli/src/network-manager.c:80
+#. 0
+#: ../clients/cli/network-manager.c:78
msgid "DOMAINS"
msgstr "డొమైనà±à°²à±"
-#: ../cli/src/network-manager.c:95
+#: ../clients/cli/network-manager.c:93
#, c-format
msgid ""
"Usage: nmcli general { COMMAND | help }\n"
@@ -3521,7 +4073,7 @@ msgstr ""
" logging [level <log level>] [domains <log domains>]\n"
"\n"
-#: ../cli/src/network-manager.c:107
+#: ../clients/cli/network-manager.c:105
#, c-format
msgid ""
"Usage: nmcli general status { help }\n"
@@ -3534,11 +4086,11 @@ msgstr ""
"వాడà±à°•: nmcli general status { help }\n"
"\n"
"నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± యొకà±à°• మొతà±à°¤à°‚ à°¸à±à°¥à°¿à°¤à°¿à°¨à°¿ చూపà±à°¨à±.\n"
-"'status' à°…à°¨à±à°¨à°¦à°¿ à°…à°ªà±à°°à°®à±‡à°¯ à°šà°°à±à°¯, దానరà±à°§à°‚ 'nmcli gen' à°…à°¨à±à°¨à°¦à°¿ 'nmcli gen "
-"status' పిలà±à°šà±à°¨à±\n"
+"'status' à°…à°¨à±à°¨à°¦à°¿ à°…à°ªà±à°°à°®à±‡à°¯ à°šà°°à±à°¯, దానరà±à°§à°‚ 'nmcli gen' à°…à°¨à±à°¨à°¦à°¿ 'nmcli gen status' "
+"పిలà±à°šà±à°¨à±\n"
"\n"
-#: ../cli/src/network-manager.c:117
+#: ../clients/cli/network-manager.c:115
#, c-format
msgid ""
"Usage: nmcli general hostname { ARGUMENTS | help }\n"
@@ -3547,8 +4099,8 @@ msgid ""
"\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"
+"a hostname, NetworkManager will set it as the new persistent system "
+"hostname.\n"
"\n"
msgstr ""
"వాడà±à°•: nmcli general hostname { ARGUMENTS | help }\n"
@@ -3557,12 +4109,12 @@ msgstr ""
"\n"
"à°¸à±à°¥à°¿à°°à°®à±ˆà°¨ à°µà±à°¯à°µà°¸à±à°¥ అతిధేయపేరౠపొందండి లేదా మారà±à°šà°‚à°¡à°¿.\n"
"ఠఆరà±à°—à±à°®à±†à°‚à°Ÿà±à°¸à± లేకà±à°‚à°¡à°¾, ఇది à°ªà±à°°à°¸à±à°¤à±à°¤à°‚ ఆకృతీకరించిన అతిధేయపేరౠమà±à°¦à±à°°à°¿à°‚à°šà±à°¨à±. "
-"మీరౠఅతిధేయపేరౠపంపినపà±à°ªà±à°¡à±,\n"
-"నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± దానిని కొతà±à°¤ à°¸à±à°¥à°¿à°°à°®à±ˆà°¨ à°µà±à°¯à°µà°¸à±à°¥ అతిధేయపేరౠవలె అమరà±à°šà±à°¨à±."
-"\n"
+"మీరౠఅతిధేయపేరౠ"
+"పంపినపà±à°ªà±à°¡à±,\n"
+"నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± దానిని కొతà±à°¤ à°¸à±à°¥à°¿à°°à°®à±ˆà°¨ à°µà±à°¯à°µà°¸à±à°¥ అతిధేయపేరౠవలె అమరà±à°šà±à°¨à±.\n"
"\n"
-#: ../cli/src/network-manager.c:130
+#: ../clients/cli/network-manager.c:128
#, c-format
msgid ""
"Usage: nmcli general permissions { help }\n"
@@ -3575,7 +4127,7 @@ msgstr ""
"ధృవీకృత ఆపరేషనà±à°² కొరకౠకాలరౠపరిమితà±à°²à°¨à± చూపà±à°®à±.\n"
"\n"
-#: ../cli/src/network-manager.c:139
+#: ../clients/cli/network-manager.c:137
#, c-format
msgid ""
"Usage: nmcli general logging { ARGUMENTS | help }\n"
@@ -3596,14 +4148,13 @@ msgstr ""
"\n"
"నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± లాగింగౠసà±à°¥à°¾à°¯à°¿ మరియౠడొమైనà±à°²à± పొందౠలేదా మారà±à°šà±.\n"
"ఠఆరà±à°—à±à°®à±†à°‚టౠలేకà±à°‚à°¡à°¾ à°ªà±à°°à°¸à±à°¤à±à°¤ లాగింగౠసà±à°¥à°¾à°¯à°¿ మరియౠడొమైనà±à°²à± చూపà±à°¨à±. లాగింగౠ"
-"à°¸à±à°¥à°¿à°¤à°¿à°¨à°¿ "
-"మారà±à°šà±à°Ÿà°•à±,\n"
+"à°¸à±à°¥à°¿à°¤à°¿à°¨à°¿ మారà±à°šà±à°Ÿà°•à±,\n"
"à°¸à±à°¥à°¾à°¯à°¿ మరియà±/లేదా డొమైనౠఅందించà±à°®à±. సాధà±à°¯à°®à°—ౠలాగింగౠడొమైనà±à°² కొరకౠదచయేసి man "
"పేజీ\n"
"చూడండి.\n"
"\n"
-#: ../cli/src/network-manager.c:153
+#: ../clients/cli/network-manager.c:151
#, c-format
msgid ""
"Usage: nmcli networking { COMMAND | help }\n"
@@ -3628,7 +4179,7 @@ msgstr ""
" connectivity [check]\n"
"\n"
-#: ../cli/src/network-manager.c:164
+#: ../clients/cli/network-manager.c:162
#, c-format
msgid ""
"Usage: nmcli networking on { help }\n"
@@ -3641,7 +4192,7 @@ msgstr ""
"నెటà±à°µà°°à±à°•à°¿à°‚గౠఆనౠచేయà±à°¨à±.\n"
"\n"
-#: ../cli/src/network-manager.c:173
+#: ../clients/cli/network-manager.c:171
#, c-format
msgid ""
"Usage: nmcli networking off { help }\n"
@@ -3654,7 +4205,7 @@ msgstr ""
"నెటà±à°µà°°à±à°•à°¿à°‚గౠఆఫౠచేయà±à°¨à±.\n"
"\n"
-#: ../cli/src/network-manager.c:182
+#: ../clients/cli/network-manager.c:180
#, c-format
msgid ""
"Usage: nmcli networking connectivity { ARGUMENTS | help }\n"
@@ -3662,8 +4213,8 @@ msgid ""
"ARGUMENTS := [check]\n"
"\n"
"Get network connectivity state.\n"
-"The optional 'check' argument makes NetworkManager re-check the connectivity."
-"\n"
+"The optional 'check' argument makes NetworkManager re-check the "
+"connectivity.\n"
"\n"
msgstr ""
"వాడà±à°•: nmcli networking connectivity { ARGUMENTS | help }\n"
@@ -3672,11 +4223,11 @@ msgstr ""
"\n"
"నెటà±à°µà°°à±à°•à± à°…à°¨à±à°¸à°‚ధాన à°¸à±à°¥à°¿à°¤à°¿ పొందà±à°¨à±.\n"
"à°à°šà±à°šà°¿à°• 'check' ఆరà±à°—à±à°®à±†à°‚à°Ÿà± à°…à°¨à±à°¨à°¦à°¿ నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± నౠఅనà±à°¸à°‚ధానం కొరకౠ"
-"తిరిగి-పరిశీలించà±à°¨à°Ÿà±à°²à± చేయà±à°¨à±."
-"\n"
+"తిరిగి-పరిశీలించà±à°¨à°Ÿà±à°²à± "
+"చేయà±à°¨à±.\n"
"\n"
-#: ../cli/src/network-manager.c:195
+#: ../clients/cli/network-manager.c:193
#, c-format
msgid ""
"Usage: nmcli radio { COMMAND | help }\n"
@@ -3701,7 +4252,7 @@ msgstr ""
" all | wifi | wwan [ on | off ]\n"
"\n"
-#: ../cli/src/network-manager.c:210
+#: ../clients/cli/network-manager.c:208
#, c-format
msgid ""
"Usage: nmcli radio all { ARGUMENTS | help }\n"
@@ -3718,7 +4269,7 @@ msgstr ""
"à°…à°¨à±à°¨à°¿ రేడియో à°¸à±à°µà°¿à°šà±à°šà±à°² à°¸à±à°¥à°¿à°¤à°¿à°¨à°¿ పొందà±à°¨à±, లేదా వాటిని ఆనà±/ఆఫౠచేయà±à°¨à±.\n"
"\n"
-#: ../cli/src/network-manager.c:221
+#: ../clients/cli/network-manager.c:219
#, c-format
msgid ""
"Usage: nmcli radio wifi { ARGUMENTS | help }\n"
@@ -3735,7 +4286,7 @@ msgstr ""
"వై-ఫై రేడియో à°¸à±à°µà°¿à°šà± à°¸à±à°¥à°¿à°¤à°¿à°¨à°¿ పొందà±à°¨à±, లేదా ఆనà±/ఆఫౠచేయà±à°¨à±.\n"
"\n"
-#: ../cli/src/network-manager.c:232
+#: ../clients/cli/network-manager.c:230
#, c-format
msgid ""
"Usage: nmcli radio wwan { ARGUMENTS | help }\n"
@@ -3753,7 +4304,7 @@ msgstr ""
"చేయà±à°¨à±.\n"
"\n"
-#: ../cli/src/network-manager.c:244
+#: ../clients/cli/network-manager.c:242
#, c-format
msgid ""
"Usage: nmcli radio wimax { ARGUMENTS | help }\n"
@@ -3770,170 +4321,169 @@ msgstr ""
"WiMAX రేడియో à°¸à±à°µà°¿à°šà± à°¸à±à°¥à°¿à°¤à°¿ పొందà±à°¨à±, లేదా దానిని ఆనà±/ఆఫౠచేయà±à°¨à±.\n"
"\n"
-#: ../cli/src/network-manager.c:264
+#: ../clients/cli/network-manager.c:262
msgid "asleep"
msgstr "à°¸à±à°¥à°¬à±à°¦à±à°—à°¾(asleep)"
-#: ../cli/src/network-manager.c:266
+#: ../clients/cli/network-manager.c:264
msgid "connecting"
msgstr "à°…à°¨à±à°¸à°‚ధానమౌచà±à°¨à±à°¨à°¦à°¿"
-#: ../cli/src/network-manager.c:268
+#: ../clients/cli/network-manager.c:266
msgid "connected (local only)"
msgstr "à°…à°¨à±à°¸à°‚ధానమైంది(à°¸à±à°¥à°¾à°¨à°¿à°•à°‚ మాతà±à°°à°®à±‡)"
-#: ../cli/src/network-manager.c:270
+#: ../clients/cli/network-manager.c:268
msgid "connected (site only)"
msgstr "à°…à°¨à±à°¸à°‚ధానమైంది (సైటౠమాతà±à°°à°®à±‡)"
-#: ../cli/src/network-manager.c:274
+#: ../clients/cli/network-manager.c:272
msgid "disconnecting"
msgstr "సంధానం తెంచà±à°¤à±‹à°‚ది"
-#: ../cli/src/network-manager.c:290
+#: ../clients/cli/network-manager.c:288
msgid "portal"
msgstr "పోరà±à°Ÿà°²à±"
-#: ../cli/src/network-manager.c:292
+#: ../clients/cli/network-manager.c:290
msgid "limited"
msgstr "పరిమితమైన"
-#: ../cli/src/network-manager.c:294
+#: ../clients/cli/network-manager.c:292
msgid "full"
msgstr "పూరà±à°¤à°¿"
-#: ../cli/src/network-manager.c:332
+#: ../clients/cli/network-manager.c:330
#, c-format
msgid "Error: only these fields are allowed: %s"
msgstr "దోషం: à°ˆ à°•à±à°·à±‡à°¤à±à°°à°®à±à°²à± మాతà±à°°à°®à±‡ à°…à°¨à±à°®à°¤à°¿à°‚చబడà±à°¨à±: %s"
-#: ../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
+#: ../clients/cli/network-manager.c:350 ../clients/cli/network-manager.c:351
+#: ../clients/cli/network-manager.c:352 ../clients/cli/network-manager.c:353
+#: ../clients/cli/network-manager.c:354 ../clients/cli/network-manager.c:356
+#: ../clients/cli/network-manager.c:357
msgid "enabled"
msgstr "చేతనమైంది"
-#: ../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
+#: ../clients/cli/network-manager.c:350 ../clients/cli/network-manager.c:351
+#: ../clients/cli/network-manager.c:352 ../clients/cli/network-manager.c:353
+#: ../clients/cli/network-manager.c:354 ../clients/cli/network-manager.c:356
+#: ../clients/cli/network-manager.c:357
msgid "disabled"
msgstr "అచేతనమైంది"
-#: ../cli/src/network-manager.c:367
+#: ../clients/cli/network-manager.c:360
msgid "NetworkManager status"
msgstr "నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± à°¸à±à°¥à°¿à°¤à°¿"
-#: ../cli/src/network-manager.c:372
+#: ../clients/cli/network-manager.c:365
msgid "running"
msgstr "నడà±à°šà±à°šà±à°¨à±à°¨à°¦à°¿"
-#: ../cli/src/network-manager.c:372
-msgid "not running"
-msgstr "నడà±à°šà±à°Ÿà°²à±‡à°¦à±"
-
-#: ../cli/src/network-manager.c:375
+#: ../clients/cli/network-manager.c:368
msgid "starting"
msgstr "à°ªà±à°°à°¾à°°à°‚à°­à°¿à°¸à±à°¤à±‹à°‚ది"
-#: ../cli/src/network-manager.c:375
+#: ../clients/cli/network-manager.c:368
msgid "started"
msgstr "à°ªà±à°°à°¾à°°à°‚భమైనà±"
-#: ../cli/src/network-manager.c:446
+#: ../clients/cli/network-manager.c:439
msgid "auth"
msgstr "auth"
-#: ../cli/src/network-manager.c:475
+#: ../clients/cli/network-manager.c:468
#, c-format
msgid "Error: 'general permissions': %s"
msgstr "దోషం: 'సాధారణ à°…à°¨à±à°®à°¤à±à°²à±': %s"
-#: ../cli/src/network-manager.c:489
+#: ../clients/cli/network-manager.c:482
msgid "NetworkManager permissions"
msgstr "నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± à°…à°¨à±à°®à°¤à±à°²à±"
-#: ../cli/src/network-manager.c:530
+#: ../clients/cli/network-manager.c:523
#, c-format
msgid "Error: 'general logging': %s"
msgstr "దోషమà±: 'సాధారణ లాగింగà±': %s"
-#: ../cli/src/network-manager.c:545
+#: ../clients/cli/network-manager.c:538
msgid "NetworkManager logging"
msgstr "నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± లాగింగà±"
-#: ../cli/src/network-manager.c:565
+#: ../clients/cli/network-manager.c:558
#, c-format
msgid "Error: failed to set hostname: (%d) %s"
msgstr "దోషం: అతిధేయ పేరౠఅమరà±à°šà±à°Ÿà°•à± విఫలమైంది: (%d) %s"
-#: ../cli/src/network-manager.c:682
+#: ../clients/cli/network-manager.c:676
#, c-format
msgid "Error: access denied to set logging; %s"
msgstr "దోషం: లాగింగౠఅమరà±à°šà±à°Ÿà°•à± à°à°•à±à°¸à±†à°¸à± నిరాకరించబడెనà±; %s"
-#: ../cli/src/network-manager.c:684
+#: ../clients/cli/network-manager.c:678
#, c-format
msgid "Error: %s"
msgstr "దోషమà±: %s"
-#: ../cli/src/network-manager.c:692
+#: ../clients/cli/network-manager.c:686
#, c-format
msgid "Error: 'general' command '%s' is not valid."
msgstr "దోషమà±: 'సాధారణ' ఆదేశమౠ'%s' చెలà±à°²à°¨à°¿à°¦à°¿."
-#: ../cli/src/network-manager.c:710
+#: ../clients/cli/network-manager.c:704
#, c-format
msgid "Error: '--fields' value '%s' is not valid here (allowed field: %s)"
msgstr ""
"దోషమà±: '--fields' విలà±à°µ '%s' ఇకà±à°•à°¡ చెలà±à°²à±à°¨à°¦à°¿ కాదౠ(à°…à°¨à±à°®à°¤à°¿à°‚à°šà± à°•à±à°·à±‡à°¤à±à°°à°‚: %s)"
-#: ../cli/src/network-manager.c:735
+#: ../clients/cli/network-manager.c:729
#, c-format
msgid "Error: invalid '%s' argument: '%s' (use on/off)."
msgstr "దోషమà±: చెలà±à°²à°¨à°¿ '%s' ఆరà±à°—à±à°®à±†à°‚à°Ÿà±: '%s' (ఆనà±/ఆఫౠవà±à°ªà°¯à±‹à°—à°¿à°‚à°šà±)."
-#: ../cli/src/network-manager.c:746
+#: ../clients/cli/network-manager.c:740
msgid "Connectivity"
msgstr "à°…à°¨à±à°¸à°‚ధానత"
-#: ../cli/src/network-manager.c:758
+#: ../clients/cli/network-manager.c:752
msgid "Networking"
msgstr "నెటà±à°µà°°à±à°•à°¿à°‚à°—à±"
-#: ../cli/src/network-manager.c:783
+#: ../clients/cli/network-manager.c:777
#, c-format
msgid "Error: 'networking connectivity' command '%s' is not valid."
msgstr "దోషం: 'నెటà±à°µà°°à±à°•à°¿à°‚à°—à± à°…à°¨à±à°¸à°‚ధానత' ఆదేశం '%s' చెలà±à°²à±à°¨à°¦à°¿ కాదà±."
-#: ../cli/src/network-manager.c:799
+#: ../clients/cli/network-manager.c:793
#, c-format
msgid "Error: 'networking' command '%s' is not valid."
msgstr "దోషమà±: 'నెటà±à°µà°°à±à°•à°¿à°‚à°—à±' ఆదేశమౠ'%s' చెలà±à°²à±à°¨à°¦à°¿ కాదà±."
-#: ../cli/src/network-manager.c:825 ../cli/src/network-manager.c:845
+#: ../clients/cli/network-manager.c:819 ../clients/cli/network-manager.c:839
msgid "Radio switches"
msgstr "రేడియో à°¸à±à°µà°¿à°šà±†à°¸à±"
-#: ../cli/src/network-manager.c:863
+#. no argument, show current WiFi state
+#: ../clients/cli/network-manager.c:857
msgid "Wi-Fi radio switch"
msgstr "వై-ఫై రేడియో à°¸à±à°µà°¿à°šà±"
-#: ../cli/src/network-manager.c:879
+#. no argument, show current WWAN (mobile broadband) state
+#: ../clients/cli/network-manager.c:873
msgid "WWAN radio switch"
msgstr "WWAN రేడియో à°¸à±à°µà°¿à°šà±"
-#: ../cli/src/network-manager.c:896
+#. no argument, show current WiMAX state
+#: ../clients/cli/network-manager.c:890
msgid "WiMAX radio switch"
msgstr "WiMAX రేడియో à°¸à±à°µà°¿à°šà±"
-#: ../cli/src/network-manager.c:908
+#: ../clients/cli/network-manager.c:902
#, c-format
msgid "Error: 'radio' command '%s' is not valid."
msgstr "దోషమà±: 'రేడియో' ఆదేశమౠ'%s' చెలà±à°²à±à°¨à°¦à°¿ కాదà±."
-#: ../cli/src/nmcli.c:78
+#: ../clients/cli/nmcli.c:82
#, c-format
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
@@ -3986,337 +4536,302 @@ msgstr ""
" d[evice] devices managed by NetworkManager\n"
"\n"
-#: ../cli/src/nmcli.c:132
+#: ../clients/cli/nmcli.c:136
#, c-format
msgid "Error: Object '%s' is unknown, try 'nmcli help'."
msgstr "దోషమà±: ఆబà±à°œà°•à±à°Ÿà± '%s' తెలియనిది, 'nmcli help' à°ªà±à°°à°¯à°¤à±à°¨à°¿à°‚à°šà±."
-#: ../cli/src/nmcli.c:162
+#: ../clients/cli/nmcli.c:166
#, c-format
msgid "Error: Option '--terse' is specified the second time."
msgstr "దోషమà±: à°à°šà±à°šà°¿à°•à°®à± '--terse' రెండవ సమయానà±à°¨à°¿ తెలిపినది."
-#: ../cli/src/nmcli.c:167
+#: ../clients/cli/nmcli.c:171
#, c-format
msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
msgstr ""
"దోషమà±: à°à°šà±à°šà°¿à°•à°®à± '--terse' à°…à°¨à±à°¨à°¦à°¿ '--pretty'తో పరసà±à°ªà°°à°‚ విభేదించà±à°šà±à°¨à±à°¨à°¦à°¿."
-#: ../cli/src/nmcli.c:175
+#: ../clients/cli/nmcli.c:179
#, c-format
msgid "Error: Option '--pretty' is specified the second time."
msgstr "దోషమà±: à°à°šà±à°šà°¿à°•à°®à± '--pretty' రెండవసారి తెలà±à°ªà°¬à°¡à°¿à°‚ది."
-#: ../cli/src/nmcli.c:180
+#: ../clients/cli/nmcli.c:184
#, c-format
msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
msgstr ""
"దోషమà±: à°à°šà±à°šà°¿à°•à°®à± '--pretty' à°…à°¨à±à°¨à°¦à°¿ '--terse'తో పరసà±à°ªà°°à°‚ విభేదించà±à°šà±à°¨à±à°¨à°¦à°¿."
-#: ../cli/src/nmcli.c:190 ../cli/src/nmcli.c:206 ../cli/src/nmcli.c:235
+#: ../clients/cli/nmcli.c:194 ../clients/cli/nmcli.c:210
+#: ../clients/cli/nmcli.c:239
#, c-format
msgid "Error: missing argument for '%s' option."
msgstr "దోషమà±: '%s' à°à°šà±à°šà°¿à°•à°®à± కొరకౠతపà±à°ªà°¿à°ªà±‹à°¯à°¿à°¨ ఆరà±à°—à±à°®à±†à°‚à°Ÿà±."
-#: ../cli/src/nmcli.c:199 ../cli/src/nmcli.c:215
+#: ../clients/cli/nmcli.c:203 ../clients/cli/nmcli.c:219
#, c-format
msgid "Error: '%s' is not valid argument for '%s' option."
msgstr "దోషమà±: '%s' à°…à°¨à±à°¨à°¦à°¿ '%s' à°à°šà±à°šà°¿à°•à°®à± కొరకౠచెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ ఆరà±à°—à±à°®à±†à°‚టౠకాదà±."
-#: ../cli/src/nmcli.c:222
+#: ../clients/cli/nmcli.c:226
#, c-format
msgid "Error: fields for '%s' options are missing."
msgstr "దోషమà±: '%s' à°à°šà±à°šà°¿à°•à°®à±à°² కొరకౠకà±à°·à±‡à°¤à±à°°à°®à±à°²à± à°…à°¨à±à°¨à°µà°¿ తపà±à°ªà°¿à°ªà±‹à°µà±à°šà±à°¨à±à°¨à°µà°¿."
-#: ../cli/src/nmcli.c:240
+#: ../clients/cli/nmcli.c:244
#, c-format
msgid "Error: '%s' is not a valid timeout for '%s' option."
msgstr "దోషం: '%s' à°…à°¨à±à°¨à°¦à°¿ '%s' à°à°šà±à°šà°¿à°•à°‚ కొరకౠచెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ సమయమà±à°—ింపౠకాదà±."
-#: ../cli/src/nmcli.c:247
+#: ../clients/cli/nmcli.c:251
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "nmcli సాధనమà±, వరà±à°·à°¨à± %s\n"
-#: ../cli/src/nmcli.c:253
+#: ../clients/cli/nmcli.c:257
#, c-format
msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
msgstr "దోషమà±: à°à°šà±à°šà°¿à°•à°®à± '%s' తెలియనిది, 'nmcli -help' à°ªà±à°°à°¯à°¤à±à°¨à°¿à°‚à°šà±à°®à±."
-#: ../cli/src/nmcli.c:288
+#: ../clients/cli/nmcli.c:337 ../clients/cli/nmcli.c:346
#, c-format
+#| msgid ""
+#| "\n"
+#| "Error: nmcli terminated by signal %d."
msgid ""
"\n"
-"Error: nmcli terminated by signal %d."
+"Error: nmcli terminated by signal %s (%d)\n"
msgstr ""
"\n"
-"దోషం: nmcli à°…à°¨à±à°¨à°¦à°¿ సంకేతం %d చేత ఆంతంచేయబడెనà±."
+"దోషం: nmcli à°…à°¨à±à°¨à°¦à°¿ సంకేతం %s (%d)చేత ఆంతంచేయబడెనà±.\n"
-#: ../cli/src/nmcli.c:318 ../src/main.c:130
+#: ../clients/cli/nmcli.c:377
#, c-format
-msgid "Failed to set signal mask: %d"
-msgstr "సంకేత మాసà±à°•à± అమరà±à°šà±à°Ÿà°•à± విఫలమైంది: %d"
+#| msgid "Failed to set signal mask: %d"
+msgid "Failed to set signal mask: %d\n"
+msgstr "సంకేత మాసà±à°•à± అమరà±à°šà±à°Ÿà°•à± విఫలమైంది: %d\n"
-#: ../cli/src/nmcli.c:325 ../src/main.c:139
+#: ../clients/cli/nmcli.c:384
#, c-format
-msgid "Failed to create signal handling thread: %d"
-msgstr "సంకేతం సంభాలించౠతà±à°°à±†à°¡à± సృషà±à°Ÿà°¿à°‚à°šà±à°Ÿà°²à±‹ విఫలమైంది: %d"
+#| msgid "Failed to create signal handling thread: %d"
+msgid "Failed to create signal handling thread: %d\n"
+msgstr "సంకేతం సంభాలించౠతà±à°°à±†à°¡à± సృషà±à°Ÿà°¿à°‚à°šà±à°Ÿà°²à±‹ విఫలమైంది: %d\n"
-#: ../cli/src/nmcli.c:338 ../test/nm-online.c:149
+#: ../clients/cli/nmcli.c:481 ../clients/nm-online.c:197
#, c-format
-msgid "Error: Could not create NMClient object."
-msgstr "దోషమà±: NMClient ఆబà±à°œà°•à±à°Ÿà± సృషà±à°Ÿà°¿à°‚చలేక పోయింది."
+#| msgid "Error: Could not create NMClient object."
+msgid "Error: Could not create NMClient object: %s."
+msgstr "దోషమà±: NMClient ఆబà±à°œà°•à±à°Ÿà± సృషà±à°Ÿà°¿à°‚చలేక పోయింది: %s."
-#: ../cli/src/nmcli.c:354
+#: ../clients/cli/nmcli.c:498
msgid "Success"
msgstr "సఫలంమైంది"
-#: ../cli/src/settings.c:666
+#: ../clients/cli/settings.c:656
#, c-format
-msgid "%d (hex-ascii-key)"
-msgstr "%d (hex-ascii-key)"
+#| msgid "%d (hex-ascii-key)"
+msgid "%d (key)"
+msgstr "%d (key)"
-#: ../cli/src/settings.c:668
+#: ../clients/cli/settings.c:658
#, c-format
-msgid "%d (104/128-bit passphrase)"
-msgstr "%d (104/128-bit passphrase)"
+#| msgid "%d (104/128-bit passphrase)"
+msgid "%d (passphrase)"
+msgstr "%d (passphrase)"
-#: ../cli/src/settings.c:671 ../cli/src/settings.c:799
+#: ../clients/cli/settings.c:661 ../clients/cli/settings.c:742
#, c-format
msgid "%d (unknown)"
msgstr "%d (తెలియని)"
-#: ../cli/src/settings.c:697
-msgid "0 (unknown)"
-msgstr "0 (తెలియని)"
-
-#: ../cli/src/settings.c:703
-msgid "any, "
-msgstr "à°à°¦à±ˆà°¨à°¾, "
-
-#: ../cli/src/settings.c:705
-msgid "900 MHz, "
-msgstr "900 MHz, "
-
-#: ../cli/src/settings.c:707
-msgid "1800 MHz, "
-msgstr "1800 MHz, "
-
-#: ../cli/src/settings.c:709
-msgid "1900 MHz, "
-msgstr "1900 MHz, "
-
-#: ../cli/src/settings.c:711
-msgid "850 MHz, "
-msgstr "850 MHz, "
-
-#: ../cli/src/settings.c:713
-msgid "WCDMA 3GPP UMTS 2100 MHz, "
-msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-
-#: ../cli/src/settings.c:715
-msgid "WCDMA 3GPP UMTS 1800 MHz, "
-msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-
-#: ../cli/src/settings.c:717
-msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
-msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-
-#: ../cli/src/settings.c:719
-msgid "WCDMA 3GPP UMTS 800 MHz, "
-msgstr "WCDMA 3GPP UMTS 800 MHz, "
-
-#: ../cli/src/settings.c:721
-msgid "WCDMA 3GPP UMTS 850 MHz, "
-msgstr "WCDMA 3GPP UMTS 850 MHz, "
-
-#: ../cli/src/settings.c:723
-msgid "WCDMA 3GPP UMTS 900 MHz, "
-msgstr "WCDMA 3GPP UMTS 900 MHz, "
-
-#: ../cli/src/settings.c:725
-msgid "WCDMA 3GPP UMTS 1700 MHz, "
-msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-
-#: ../cli/src/settings.c:727
-msgid "WCDMA 3GPP UMTS 1900 MHz, "
-msgstr "WCDMA 3GPP UMTS 1900 MHz, "
-
-#: ../cli/src/settings.c:729
-msgid "WCDMA 3GPP UMTS 2600 MHz, "
-msgstr "WCDMA 3GPP UMTS 2600 MHz, "
-
-#: ../cli/src/settings.c:747
+#: ../clients/cli/settings.c:690
msgid "0 (NONE)"
msgstr "0 (à°à°¦à±€à°•à°¾à°¦à±)"
-#: ../cli/src/settings.c:753
+#: ../clients/cli/settings.c:696
msgid "REORDER_HEADERS, "
msgstr "REORDER_HEADERS, "
-#: ../cli/src/settings.c:755
+#: ../clients/cli/settings.c:698
msgid "GVRP, "
msgstr "GVRP, "
-#: ../cli/src/settings.c:757
+#: ../clients/cli/settings.c:700
msgid "LOOSE_BINDING, "
msgstr "LOOSE_BINDING, "
-#: ../cli/src/settings.c:793
+#: ../clients/cli/settings.c:736
#, c-format
msgid "%d (disabled)"
msgstr "%d (అచేతనమైంది)"
-#: ../cli/src/settings.c:795
+#: ../clients/cli/settings.c:738
#, c-format
msgid "%d (enabled, prefer public IP)"
msgstr "%d (చైతనమైన, అభీషà±à°Ÿ పబà±à°²à°¿à°•à± à°à°ªà°¿)"
-#: ../cli/src/settings.c:797
+#: ../clients/cli/settings.c:740
#, c-format
msgid "%d (enabled, prefer temporary IP)"
msgstr "%d (చేతనమైన, అభీషà±à°Ÿ తాతà±à°•à°¾à°²à°¿à°• à°à°ªà°¿)"
-#: ../cli/src/settings.c:809
+#: ../clients/cli/settings.c:752
msgid "0 (none)"
msgstr "0 (à°à°¦à±€à°•à°¾à°¦à±)"
-#: ../cli/src/settings.c:815
+#: ../clients/cli/settings.c:758
msgid "agent-owned, "
msgstr "ఎజెంటà±-à°¸à±à°µà°‚తమైన,"
-#: ../cli/src/settings.c:817
+#: ../clients/cli/settings.c:760
msgid "not saved, "
msgstr "దాయ లేదà±,"
-#: ../cli/src/settings.c:819
+#: ../clients/cli/settings.c:762
msgid "not required, "
msgstr "అవసరం లేని,"
-#: ../cli/src/settings.c:1124
+#: ../clients/cli/settings.c:1044
msgid "0 (disabled)"
msgstr "0 (అచేతనమైనà±)"
-#: ../cli/src/settings.c:1130
+#: ../clients/cli/settings.c:1050
msgid "enabled, "
msgstr "చేతనమైంది,"
-#: ../cli/src/settings.c:1132
+#: ../clients/cli/settings.c:1052
msgid "advertise, "
msgstr "à°ªà±à°°à°•à°Ÿà°¿à°‚à°šà±,"
-#: ../cli/src/settings.c:1134
+#: ../clients/cli/settings.c:1054
msgid "willing, "
msgstr "విలà±à°²à°¿à°‚à°—à±,"
-#: ../cli/src/settings.c:1162
+#: ../clients/cli/settings.c:1082
msgid "-1 (unset)"
msgstr "-1 (అమరà±à°ªà±à°¤à±€à°¯à°¿)"
-#: ../cli/src/settings.c:1270 ../cli/src/settings.c:1453
-#: ../cli/src/settings.c:1493
+#: ../clients/cli/settings.c:1179 ../clients/cli/settings.c:1511
+#: ../clients/cli/settings.c:1553
msgid "auto"
msgstr "à°¸à±à°µà°¯à°‚చాలక"
-#: ../cli/src/settings.c:1283
+#: ../clients/cli/settings.c:1192
msgid "default"
msgstr "à°…à°ªà±à°°à°®à±‡à°¯à°‚"
-#: ../cli/src/settings.c:1614
+#: ../clients/cli/settings.c:1681
#, c-format
msgid "Do you also want to set '%s' to '%s'? [yes]: "
msgstr "మీరౠ'%s' నౠ'%s' కౠఅమరà±à°šà°¾à°²à°¨à°¿ à°…à°¨à±à°•à±Šà°¨à±à°šà±à°¨à±à°¨à°¾à°°à°¾? [yes]:"
-#: ../cli/src/settings.c:1616
+#: ../clients/cli/settings.c:1683
#, 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
+#: ../clients/cli/settings.c:1844
+#, c-format
+msgid ""
+"Warning: %s.%s set to '%s', but it might be ignored in infrastructure mode\n"
+msgstr ""
+"హెచà±à°šà°°à°¿à°•: %s.%s అనేది '%s' కౠఅమరà±à°šà±à°¨à±, అయితే అది ఇనà±à°«à±à°°à°¾à°¸à±à°Ÿà±à°°à°•à±à°šà°°à± రీతినందౠ"
+"విసà±à°®à°°à°¿à°‚చబడà±à°¨à±\n"
+
+#: ../clients/cli/settings.c:1926 ../clients/cli/settings.c:2186
+#: ../clients/cli/settings.c:4262
#, c-format
msgid "'%s' is not valid"
msgstr "'%s' చెలà±à°²à°¨à°¿à°¦à°¿"
-#: ../cli/src/settings.c:1837
+#: ../clients/cli/settings.c:1949
#, c-format
msgid "'%d' is not valid; use <%d-%d>"
msgstr "'%d' చెలà±à°²à±à°¨à°¦à°¿ కాదà±; ఉపయోగించౠ<%d-%d>"
-#: ../cli/src/settings.c:1859
+#: ../clients/cli/settings.c:1971
#, c-format
msgid "'%u' is not valid; use <%d-%d>"
msgstr "'%u' చెలà±à°²à±à°¨à°¦à°¿ కాదà±; వాడà±à°• <%d-%d>"
-#: ../cli/src/settings.c:1925
+#: ../clients/cli/settings.c:2037
#, c-format
msgid "'%s' is not valid; use <option>=<value>"
msgstr "'%s' చెలà±à°²à±à°¨à°¦à°¿ కాదà±; వాడà±à°• <option>=<value>"
-#: ../cli/src/settings.c:1959
+#: ../clients/cli/settings.c:2071
#, c-format
msgid "index '%s' is not valid"
msgstr "విషయసూచిక '%s' చెలà±à°²à±à°¨à°¦à°¿à°•à°¾à°¦à±"
-#: ../cli/src/settings.c:1964
+#: ../clients/cli/settings.c:2076 ../clients/cli/settings.c:2101
msgid "no item to remove"
msgstr "తొలగించà±à°Ÿà°•à± ఠఅంశం లేదà±"
-#: ../cli/src/settings.c:1968
+#: ../clients/cli/settings.c:2080 ../clients/cli/settings.c:2105
#, c-format
msgid "index '%d' is not in range <0-%d>"
msgstr "విషయసూచిక '%d' విసà±à°¤à±ƒà°¤à°¿ <0-%d> నందౠలేదà±"
-#: ../cli/src/settings.c:1983
+#: ../clients/cli/settings.c:2120
#, c-format
msgid "invalid option '%s'"
msgstr "చెలà±à°²à°¨à°¿ à°à°šà±à°šà°¿à°•à°‚ '%s'"
-#: ../cli/src/settings.c:1985
+#: ../clients/cli/settings.c:2122
msgid "missing option"
msgstr "తపà±à°ªà°¿à°ªà±‹à°¯à°¿à°¨ à°à°šà±à°šà°¿à°•à°‚"
-#: ../cli/src/settings.c:2015 ../cli/src/settings.c:2035
+#: ../clients/cli/settings.c:2152
#, c-format
msgid "'%s' is not a valid number (or out of range)"
msgstr "'%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ సంఖà±à°¯ కాదౠ(లేదా విసà±à°¤à±ƒà°¤à°¿ దాటి à°µà±à°‚ది)"
-#: ../cli/src/settings.c:2089
+#: ../clients/cli/settings.c:2203
#, 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
+#: ../clients/cli/settings.c:2228 ../libnm-core/nm-setting-connection.c:795
+#: ../libnm-core/nm-setting-infiniband.c:271
+#: ../libnm-util/nm-setting-connection.c:833
+#: ../libnm-util/nm-setting-infiniband.c:268
#, 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
+#: ../clients/cli/settings.c:2246 ../clients/cli/settings.c:3651
+#: ../libnm-core/nm-setting-gsm.c:332 ../libnm-util/nm-setting-gsm.c:372
#, c-format
msgid "'%s' is not a number"
msgstr "'%s' సంఖà±à°¯ కాదà±"
-#: ../cli/src/settings.c:2185
+#: ../clients/cli/settings.c:2298
#, c-format
msgid "'%s' is not a valid hex character"
msgstr "'%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ hex à°…à°•à±à°·à°°à°‚ కాదà±"
-#: ../cli/src/settings.c:2215
+#: ../clients/cli/settings.c:2328
#, c-format
msgid "'%s' is not a valid MAC"
msgstr "'%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ MAC కాదà±"
-#: ../cli/src/settings.c:2252 ../libnm-util/nm-setting-connection.c:715
+#: ../clients/cli/settings.c:2365 ../libnm-core/nm-setting-connection.c:784
+#: ../libnm-util/nm-setting-connection.c:790
#, c-format
msgid "'%s' is not a valid UUID"
msgstr "'%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ UUID కాదà±"
-#: ../cli/src/settings.c:2317
+#: ../clients/cli/settings.c:2432
+#, c-format
+msgid "the property doesn't contain permission '%s'"
+msgstr "లకà±à°·à°£à°‚ à°…à°¨à±à°®à°¤à°¿à°¨à°¿ '%s' కలిగివà±à°‚à°¡à°¦à±"
+
+#: ../clients/cli/settings.c:2444
msgid ""
-"Enter a list of user permissions. This is a list of user names formatted as:\n"
+"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"
@@ -4329,16 +4844,83 @@ msgstr ""
"\n"
"ఉదాహరణ: alice bob charlie\n"
-#: ../cli/src/settings.c:2332
+#: ../clients/cli/settings.c:2463
#, c-format
msgid "'%s' is not valid master; use ifname or connection UUID"
msgstr "'%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ మాసà±à°Ÿà°°à± కాదà±; ifname లేదా à°…à°¨à±à°¸à°‚ధానం UUID à°µà±à°ªà°¯à±‹à°—à°¿à°‚à°šà±"
-#: ../cli/src/settings.c:2453
+#: ../clients/cli/settings.c:2507
+#, c-format
+msgid "Warning: %s is not an UUID of any existing connection profile\n"
+msgstr "హెచà±à°šà°°à°¿à°•: %s à°…à°¨à±à°¨à°¦à°¿ మనà±à°—డలోవà±à°¨à±à°¨ à°…à°¨à±à°¸à°‚ధాన à°ªà±à°°à±Šà°«à±ˆà°²à± యొకà±à°• UUID కాదà±\n"
+
+#: ../clients/cli/settings.c:2511 ../clients/cli/settings.c:2527
+#, c-format
+#| msgid "Error: '%s' is not a valid connection type."
+msgid "'%s' is not a VPN connection profile"
+msgstr "'%s' VPN à°…à°¨à±à°¸à°‚ధానం à°ªà±à°°à±Šà°«à±ˆà°²à± కాదà±"
+
+#: ../clients/cli/settings.c:2520
+#, c-format
+#| msgid "'%s' is not a valid team configuration or file name."
+msgid "'%s' is not a name of any exiting profile"
+msgstr "'%s' à°…à°¨à±à°¨à°¦à°¿ ఇపà±à°ªà°Ÿà°¿à°•à±‡à°µà±à°¨à±à°¨ à°ªà±à°°à±Šà°«à±ˆà°²à± పేరౠకాదà±"
+
+#: ../clients/cli/settings.c:2554
+#, c-format
+#| msgid "'%s' is not a valid UUID"
+msgid "the value '%s' is not a valid UUID"
+msgstr "విలà±à°µ '%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ UUID కాదà±"
+
+#: ../clients/cli/settings.c:2561
+#, c-format
+msgid "the property doesn't contain UUID '%s'"
+msgstr "లకà±à°·à°£à°‚ UUID '%s' కలిగిలేదà±"
+
+#: ../clients/cli/settings.c:2573
+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 లేదా ID (పేరà±) తో "
+"తెలà±à°ªà°µà°šà±à°šà±. nmcli\n"
+"పారదరà±à°¶à°•à°‚à°—à°¾ పేరà±à°²à°¨à± UUIDలకౠఅనà±à°µà°¦à°¿à°‚à°šà±à°¨à±. నెటà±à°µà°°à±à°•à± నిరà±à°µà°¾à°¹à°¿à°• ఇది మాతà±à°°à°®à±‡ "
+"తోడà±à°ªà°¾à°Ÿà±\n"
+"చేయà±à°¨à°¨à°¿ à°—à±à°°à±à°¤à°¿à°‚à°šà°‚à°¡à°¿ VPNలనౠదà±à°µà°¿à°¤à±€à°¯ à°…à°¨à±à°¸à°‚ధానాలà±à°—à°¾ à°ˆ సందరà±à°­à°®à±à°²à±‹.\n"
+"అంశాలౠకామాలతో లేదా ఖాళీలతో వేరà±à°šà±‡à°¯à°µà°šà±à°šà±.\n"
+"\n"
+"ఉదాహరణ: private-openvpn, fe6ba5d8-c2fc-4aae-b2e3-97efddd8d9a7\n"
+
+#: ../clients/cli/settings.c:2650
msgid "private key password not provided"
msgstr "à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ à°•à±€ సంకేతపదం అందిచబడలేదà±"
-#: ../cli/src/settings.c:2513
+#: ../clients/cli/settings.c:2677
+#, c-format
+#| msgid "the property can't be changed"
+msgid "the property doesn't contain EAP method '%s'"
+msgstr "లకà±à°·à°£à°‚ EAP మెథడౠ'%s' కలిగిలేదà±"
+
+#: ../clients/cli/settings.c:2702
+#, c-format
+msgid "the property doesn't contain alternative subject match '%s'"
+msgstr "లకà±à°·à°£à°‚ à°ªà±à°°à°¤à±à°¯à°¾à°®à±à°¨à°¾à°¯ సబà±à°œà°•à±à°Ÿà± పోలిక '%s' కలిగివà±à°‚à°¡à°¦à±"
+
+#: ../clients/cli/settings.c:2731
+#, c-format
+msgid "the property doesn't contain \"phase2\" alternative subject match '%s'"
+msgstr "లకà±à°·à°£à°‚ \"phase2\" à°ªà±à°°à°¤à±à°¯à°¾à°®à±à°¨à°¾à°¯ సబà±à°œà°•à±à°Ÿà± పోలిక '%s' కలిగివà±à°‚à°¡à°¦à±"
+
+#: ../clients/cli/settings.c:2757
msgid ""
"Enter path to a private key and the key password (if not set yet):\n"
" <file path> [<password>]\n"
@@ -4349,11 +4931,12 @@ msgstr ""
" <file path> [<password>]\n"
"ఉదాహరణ: /home/cimrman/jara-priv-key Dardanely\n"
-#: ../cli/src/settings.c:2583
+#: ../clients/cli/settings.c:2827
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"
+"(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"
@@ -4363,14 +4946,15 @@ msgstr ""
"హెకà±à°¸à°¾à°¡à±†à°¸à°¿à°®à°²à± విలà±à°µà°² జాబితావలె బైటà±à°²à°¨à± à°ªà±à°°à°µà±‡à°¶à°ªà±†à°Ÿà±à°Ÿà±à°®à±.\n"
"రెండౠఫారà±à°®à°¾à°Ÿà±à°²à± ఆమోదించబడెనà±:\n"
"(a) హెకà±à°¸à°¾à°¡à±†à°¸à°¿à°®à°²à± అంకెల à°¸à±à°Ÿà±à°°à°¿à°‚à°—à±, ఇకà±à°•à°¡ à°ªà±à°°à°¤à°¿ రెండౠఅంకెలౠఒక బైటà±â€Œà°¨à± "
-"సూచించà±à°¨à±where each two digits represent one byte\n"
+"సూచించà±à°¨à±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
+#: ../clients/cli/settings.c:2930
#, c-format
msgid ""
"Enter a list of bonding options formatted as:\n"
@@ -4401,17 +4985,22 @@ msgstr ""
"\n"
"ఉదాహరణ: mode=2,miimon=120\n"
-#: ../cli/src/settings.c:2727
+#: ../clients/cli/settings.c:2968
#, c-format
msgid "'%s' is not a valid InfiniBand MAC"
msgstr "'%s' చెలà±à°²à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ ఇనà±à°«à°¿à°¬à°¾à°‚à°¡à± MAC కాదà±"
-#: ../cli/src/settings.c:2765
+#: ../clients/cli/settings.c:3005
#, c-format
msgid "'%s' is not a valid IBoIP P_Key"
msgstr "'%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ IBoIP P_Key కాదà±"
-#: ../cli/src/settings.c:2825
+#: ../clients/cli/settings.c:3074 ../clients/cli/settings.c:3420
+#, c-format
+msgid "the property doesn't contain DNS server '%s'"
+msgstr "లకà±à°·à°£à°‚ à°…à°¨à±à°¨à°¦à°¿ DNS సేవిక '%s' కలిగివà±à°‚à°¡à°¦à±"
+
+#: ../clients/cli/settings.c:3086
msgid ""
"Enter a list of IPv4 addresses of DNS servers.\n"
"\n"
@@ -4421,12 +5010,22 @@ msgstr ""
"\n"
"ఉదాహరణ: 8.8.8.8, 8.8.4.4\n"
-#: ../cli/src/settings.c:2871 ../cli/src/settings.c:3123
+#: ../clients/cli/settings.c:3122 ../clients/cli/settings.c:3474
+#, c-format
+msgid "the property doesn't contain DNS search domain '%s'"
+msgstr "లకà±à°·à°£à°‚ DNS à°…à°¨à±à°µà±‡à°·à°£ డొమైనౠ'%s' కలిగివà±à°‚à°¡à°¦à±"
+
+#: ../clients/cli/settings.c:3142 ../clients/cli/settings.c:3494
#, c-format
msgid "'%s' is not valid (use ip[/prefix] [gateway])"
msgstr "'%s' చెలà±à°²à±à°¨à°¦à°¿ కాదౠ(ip[/prefix] [gateway] ఉపయోగించà±)"
-#: ../cli/src/settings.c:2897
+#: ../clients/cli/settings.c:3191 ../clients/cli/settings.c:3542
+#, c-format
+msgid "the property doesn't contain IP address '%s'"
+msgstr "లకà±à°·à°£à°‚ à°…à°¨à±à°¸à°‚ధానం à°à°ªà°¿ à°šà°¿à°°à±à°¨à°¾à°®à°¾ '%s' కలిగివà±à°‚à°¡à°¦à±"
+
+#: ../clients/cli/settings.c:3204
msgid ""
"Enter a list of IPv4 addresses formatted as:\n"
" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
@@ -4440,28 +5039,50 @@ msgstr ""
"\n"
"ఉదాహరణ: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
-#: ../cli/src/settings.c:2954
+#: ../clients/cli/settings.c:3257 ../clients/cli/settings.c:3573
#, c-format
-msgid "'%s' is not valid (use ip/[prefix] next-hop [metric])"
-msgstr "'%s' చెలà±à°²à±à°¨à°¦à°¿ కాదౠ(ip/[prefix] next-hop [metric] ఉపయోగించà±)"
+#| 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[/prefix] [next-hop] [metric])"
-#: ../cli/src/settings.c:2980
+#: ../clients/cli/settings.c:3305 ../clients/cli/settings.c:3621
+#, c-format
+#| msgid "the property can't be changed"
+msgid "the property doesn't contain route '%s'"
+msgstr "లకà±à°·à°£à°‚ రౌటౠ'%s' కలిగిలేదà±"
+
+#: ../clients/cli/settings.c:3318
+#| 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"
+" ip[/prefix] [next-hop] [metric],...\n"
+"\n"
"Missing prefix is regarded as a prefix of 32.\n"
-"Missing metric is regarded as a metric of 0.\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"
-"Example: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\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/[prefix] next-hop [metric],...\n"
-"దొరకని à°ªà±à°°à°¿à°«à°¿à°•à±à°¸à± 32 à°ªà±à°°à°¿à°«à°¿à°•à±à°¸à± వలె à°—à±à°°à±à°¤à°¿à°‚చబడెనà±.\n"
-"దొరకని మెటà±à°°à°¿à°•à± 0 మెటà±à°°à°¿à°•à± వలె à°—à±à°°à±à°¤à°¿à°‚చబడెనà±.\n"
+"Enter a list of IPv4 routes formatted as:\n"
+" ip[/prefix] [next-hop] [metric],...\n"
"\n"
-"ఉదాహరణ: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\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"
-#: ../cli/src/settings.c:3071
+#: ../clients/cli/settings.c:3432
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 "
@@ -4472,71 +5093,84 @@ msgid ""
"\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"
+"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
+#: ../clients/cli/settings.c:3555
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"
+"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
+"ఉదాహరణ: 2607:f0d0:1002:51::4/64 2607:f0d0:1002:51::1, "
+"1050:0:0:0:5:600:300c:326b\n"
+
+#: ../clients/cli/settings.c:3634
+#| 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"
+" ip[/prefix] [next-hop] [metric],...\n"
+"\n"
"Missing prefix is regarded as a prefix of 128.\n"
-"Missing metric is regarded as a metric of 0.\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"
-"Example: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
+"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/[prefix] next-hop [metric],...\n"
-"దొరకని à°ªà±à°°à°¿à°«à°¿à°•à±à°¸à± 128 à°ªà±à°°à°¿à°«à°¿à°•à±à°¸à±à°—à°¾ à°—à±à°°à±à°¤à°¿à°‚చబడà±à°¨à±.\n"
-"దొరకని మెటà±à°°à°¿à°•à± 0 మెటà±à°°à°¿à°•à±â€Œà°—à°¾ à°—à±à°°à±à°¤à°¿à°‚చబడà±à°¨à±.\n"
+"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"
-"ఉదాహరణ: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
+"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"
-#: ../cli/src/settings.c:3219
+#: ../clients/cli/settings.c:3658
#, c-format
msgid "'%s' is not valid; use 0, 1, or 2"
msgstr "'%s' చెలà±à°²à±à°¨à°¦à°¿ కాదà±; 0, 1, లేదా 2 ఉపయోగించà±"
-#: ../cli/src/settings.c:3236
+#: ../clients/cli/settings.c:3675
#, c-format
msgid "'%s' is not a valid channel; use <1-13>"
msgstr "'%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ ఛానలౠలాదà±; ఉపయోగించౠ<1-13>"
-#: ../cli/src/settings.c:3257
+#: ../clients/cli/settings.c:3696
#, c-format
msgid "'%s' is not valid; use [e, o, n]"
msgstr "'%s' చెలà±à°²à±à°¨à°¦à°¿ కాదà±; [e, o, n] ఉపయోగించౠ"
-#: ../cli/src/settings.c:3285
+#: ../clients/cli/settings.c:3724
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 "
@@ -4555,21 +5189,51 @@ msgstr ""
"\"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n"
" set team.config /etc/my-team.conf\n"
-#: ../cli/src/settings.c:3325
+#: ../clients/cli/settings.c:3764
msgid "no priority to remove"
msgstr "తీసివేయà±à°Ÿà°•à± à° à°ªà±à°°à°¾à°®à±à°–à±à°¯à°¤ లేదà±"
-#: ../cli/src/settings.c:3329
+#: ../clients/cli/settings.c:3768
#, c-format
msgid "index '%d' is not in the range of <0-%d>"
msgstr "విషయసూచిక '%d' విసà±à°¤à±ƒà°¤à°¿ <0-%d> నందౠలేదà±"
-#: ../cli/src/settings.c:3444
+#: ../clients/cli/settings.c:3807
+#, c-format
+msgid ""
+"Warning: only one mapping at a time is supported; taking the first one (%s)\n"
+msgstr ""
+"హెచà±à°šà°°à°¿à°•: ఒకసారి à°’à°• మాపింగౠమాతà±à°°à°®à±‡ తోడà±à°ªà°¾à°Ÿà±à°¨à°¿à°šà±à°šà±à°¨à±; మొదటి దానిని (%s) "
+"తీసà±à°•à±‹à°‚టోంది\n"
+
+#: ../clients/cli/settings.c:3814
+#, c-format
+#| msgid "the property can't be changed"
+msgid "the property doesn't contain mapping '%s'"
+msgstr "లకà±à°·à°£à°‚ మాపింగౠ'%s' కలిగిలేదà±"
+
+#: ../clients/cli/settings.c:3923 ../clients/cli/settings.c:4091
+#: ../libnm-core/nm-setting-wired.c:622
+#: ../libnm-core/nm-setting-wireless.c:799
+#: ../libnm-core/nm-setting-wireless.c:811
+#: ../libnm-util/nm-setting-wired.c:648
+#: ../libnm-util/nm-setting-wireless.c:840
+#: ../libnm-util/nm-setting-wireless.c:854
+#, c-format
+msgid "'%s' is not a valid MAC address"
+msgstr "'%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°šà°¿ MAC à°šà°¿à°°à±à°¨à°¾à°®à°¾ కాదà±"
+
+#: ../clients/cli/settings.c:3929 ../clients/cli/settings.c:4097
+#, c-format
+msgid "the property doesn't contain MAC address '%s'"
+msgstr "లకà±à°·à°£à°‚ MAC à°šà°¿à°°à±à°¨à°¾à°®à°¾ '%s' కలిగిలేదà±"
+
+#: ../clients/cli/settings.c:3948
#, c-format
msgid "'%s' is not valid; 3 strings should be provided"
msgstr "'%s' చెలà±à°²à±à°¨à°¦à°¿ కాదà±; 3 à°¸à±à°Ÿà±à°°à°¿à°‚à°—à±à°¸à± అందించబడాలి"
-#: ../cli/src/settings.c:3463
+#: ../clients/cli/settings.c:3967
msgid ""
"Enter a list of three channels (comma or space separated).\n"
"\n"
@@ -4579,7 +5243,7 @@ msgstr ""
"\n"
"ఉదాహరణ: 0.0.0e20 0.0.0e21 0.0.0e22\n"
-#: ../cli/src/settings.c:3513
+#: ../clients/cli/settings.c:4017
#, c-format
msgid ""
"Enter a list of S/390 options formatted as:\n"
@@ -4590,857 +5254,2094 @@ msgstr ""
" option = <value>, option = <value>,...\n"
"చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ విలà±à°µà°²à±: %s\n"
-#: ../cli/src/settings.c:3559
+#: ../clients/cli/settings.c:4063
#, c-format
msgid "'%s' is not a valid channel"
msgstr "'%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ ఛానలౠకాదà±"
-#: ../cli/src/settings.c:3565
+#: ../clients/cli/settings.c:4069
#, c-format
msgid "'%ld' is not a valid channel"
msgstr "'%ld' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ ఛానలౠకాదà±"
-#: ../cli/src/settings.c:3668 ../cli/src/settings.c:3671
+#: ../clients/cli/settings.c:4156 ../clients/cli/settings.c:4194
+#: ../clients/cli/settings.c:4232
+#, c-format
+msgid "the property doesn't contain protocol '%s'"
+msgstr "లకà±à°·à°£à°‚ à°ªà±à°°à±Šà°Ÿà±‹à°•à°¾à°²à± '%s' కలిగిలేదà±"
+
+#: ../clients/cli/settings.c:4271
+#, c-format
+msgid ""
+"'%s' not compatible with %s '%s', please change the key or set the right %s "
+"first."
+msgstr ""
+"'%s' à°…à°¨à±à°¨à°¦à°¿ %s '%s' తో సారూపà±à°¯à°®à±ˆà°‚ది కాదà±, దయచేసి à°•à±€ మారà±à°šà°‚à°¡à°¿ లేదా సరైన %s "
+"à°®à±à°‚దౠఅమరà±à°šà°‚à°¡à°¿."
+
+#: ../clients/cli/settings.c:4279
#, c-format
msgid "WEP key is guessed to be of '%s'\n"
msgstr "WEP à°•à±€ '%s' à°…à°¯à±à°¯à±à°‚à°Ÿà±à°‚దని à°…à°¨à±à°•à±‹à°¬à°¡à°¿à°‚ది\n"
-#: ../cli/src/settings.c:3695
+#: ../clients/cli/settings.c:4281
+#, c-format
+#| msgid "WEP key is guessed to be of '%s'\n"
+msgid "WEP key index set to '%d'\n"
+msgstr "WEP à°•à±€ ఇండెకà±à°¸à± '%d' కౠఅమరà±à°šà±†à°¨à±\n"
+
+#: ../clients/cli/settings.c:4304
#, 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
+#: ../clients/cli/settings.c:4320 ../clients/cli/settings.c:4323
+#: ../clients/cli/settings.c:4326 ../clients/cli/settings.c:4329
+#, c-format
+msgid ""
+"Warning: '%s' is not compatible with '%s' type, please change or delete the "
+"key.\n"
+msgstr ""
+"హెచà±à°šà°°à°¿à°•: '%s' à°…à°¨à±à°¨à°¦à°¿ '%s' రకంతో సారూపà±à°¯à°®à±ˆà°‚ది కాదà±, దయచేసి కీనౠమారà±à°šà°‚à°¡à°¿ లేదా "
+"తొలగించండి.\n"
+
+#: ../clients/cli/settings.c:4342
#, 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"
+"WEP కీల à°°à°•à°‚ à°ªà±à°°à°µà±‡à°¶à°ªà±†à°Ÿà±à°Ÿà±à°®à±. ఆమోదించబడిన విలà±à°µà°²à±: 0 లేదా తెలియనిది, 1 లేదా à°•à±€, "
+"మరియౠ2 లేదా "
+"సంకేతపదం.\n"
-#: ../cli/src/settings.c:3728
+#: ../clients/cli/settings.c:4355
#, c-format
msgid "'%s' is not a valid PSK"
msgstr "'%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ PSK కాదà±"
-#: ../cli/src/settings.c:3772
+#: ../clients/cli/settings.c:4399
#, c-format
msgid "'%s' is not a valid DCB flag"
msgstr "'%s' à°…à°¨à±à°¨à°¦à°¿ చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ DCB à°«à±à°²à°¾à°—ౠకాదà±"
-#: ../cli/src/settings.c:3795
+#: ../clients/cli/settings.c:4422
#, c-format
msgid "'%s' is not a DCB app priority"
msgstr "'%s' à°…à°¨à±à°¨à°¦à°¿ DCB à°…à°¨à±à°µà°°à±à°¤à°¨ à°ªà±à°°à°¾à°®à±à°–à±à°¯à°¤ కాదà±"
-#: ../cli/src/settings.c:3821
+#: ../clients/cli/settings.c:4448
msgid "must contain 8 comma-separated numbers"
msgstr "తపà±à°ªà°•à±à°‚à°¡à°¾ కామాతో వేరà±à°šà±‡à°¸à°¿à°¨ 8 అంకెలౠకావాలి"
-#: ../cli/src/settings.c:3838
+#: ../clients/cli/settings.c:4465
#, c-format
msgid "'%s' not a number between 0 and %u (inclusive) or %u"
msgstr "'%s' à°…à°¨à±à°¨à°¦à°¿ 0 మరియౠ%u (à°•à°²à±à°ªà±à°•à±Šà°¨à°¿) లేదా %u మధà±à°¯à°¨à°¿ సంఖà±à°¯à°•à°¾à°¦à±"
-#: ../cli/src/settings.c:3841
+#: ../clients/cli/settings.c:4468
#, c-format
msgid "'%s' not a number between 0 and %u (inclusive)"
msgstr "'%s' à°…à°¨à±à°¨à°¦à°¿ 0 మరియౠ%u (à°•à°²à±à°ªà±à°•à±Šà°¨à°¿) మదà±à°¯à°¨à°¿ సంఖà±à°¯ కాదà±"
-#: ../cli/src/settings.c:3863
+#: ../clients/cli/settings.c:4490
#, c-format
msgid ""
"Warning: changes will have no effect until '%s' includes 1 (enabled)\n"
"\n"
msgstr ""
-"హెచà±à°šà°°à°¿à°•: '%s' à°…à°¨à±à°¨à°¦à°¿ 1 à°•à°²à±à°ªà±à°•à±Šà°¨à±à°¨à°‚à°¤ వరకౠమారà±à°ªà±à°²à± à°ªà±à°°à°­à°¾à°µà°¿à°¤à°‚ కావౠ(చేతనమైనà±)\n\n"
+"హెచà±à°šà°°à°¿à°•: '%s' à°…à°¨à±à°¨à°¦à°¿ 1 à°•à°²à±à°ªà±à°•à±Šà°¨à±à°¨à°‚à°¤ వరకౠమారà±à°ªà±à°²à± à°ªà±à°°à°­à°¾à°µà°¿à°¤à°‚ కావౠ(చేతనమైనà±)\n"
+"\n"
-#: ../cli/src/settings.c:3916
+#: ../clients/cli/settings.c:4543
#, c-format
msgid "bandwidth percentages must total 100%%"
msgstr "బాండà±â€Œà°µà°¿à°¡à±à°¤à± శాతాల మొతà±à°¤à°‚ తపà±à°ªà°• 100%% కావాలి"
-#: ../cli/src/settings.c:5594
+#: ../clients/cli/settings.c:6186
msgid "don't know how to get the property value"
msgstr "లకà±à°·à°£à°‚ విలà±à°µ ఎలా పొందాలో తెలియదà±"
-#: ../cli/src/settings.c:5647 ../cli/src/settings.c:5687
+#: ../clients/cli/settings.c:6239 ../clients/cli/settings.c:6279
msgid "the property can't be changed"
msgstr "లకà±à°·à°£à°‚ మారà±à°šà°¬à°¡à°²à±‡à°¦à±"
-#: ../cli/src/settings.c:5791
+#: ../clients/cli/settings.c:6362
+#| msgid "unavailable"
+msgid "(not available)"
+msgstr "(à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹ లేదà±)"
+
+#: ../clients/cli/settings.c:6387
msgid "[NM property description]"
msgstr "[NM లకà±à°·à°£à°‚ వివరణ]"
-#: ../cli/src/settings.c:5797
+#: ../clients/cli/settings.c:6392
msgid "[nmcli specific description]"
msgstr "[nmcli à°ªà±à°°à°¤à±à°¯à±‡à°• వివరణ]"
-#: ../cli/src/utils.c:111
+#: ../clients/cli/utils.c:127
#, c-format
msgid "Error: value for '%s' argument is required."
msgstr "దోషమà±: '%s' ఆరà±à°—à±à°®à±†à°‚టౠకొరకౠవిలà±à°µ అవసరమైంది."
-#: ../cli/src/utils.c:136
+#: ../clients/cli/utils.c:152
#, c-format
msgid "Error: Argument '%s' was expected, but '%s' provided."
msgstr "దోషం: ఆరà±à°—à±à°®à±†à°‚à°Ÿà± '%s' కావలసివà±à°‚à°¡à°—à°¾, '%s' యివà±à°µà°¬à°¡à°¿à°‚ది."
-#: ../cli/src/utils.c:139
+#: ../clients/cli/utils.c:155
#, c-format
msgid "Error: Unexpected argument '%s'"
msgstr "దోషమà±: à°…à°¨à±à°•à±‹à°¨à°¿ ఆరà±à°—à±à°®à±†à°‚à°Ÿà± '%s'"
-#: ../cli/src/utils.c:189
+#: ../clients/cli/utils.c:205
#, c-format
msgid "Error converting IP4 address '0x%X' to text form"
msgstr "IP4 à°šà°¿à°°à±à°¨à°¾à°®à°¾ '0x%X'నౠపాఠ రూపంలోనికి మారà±à°šà±à°Ÿà°²à±‹ దోషం"
-#: ../cli/src/utils.c:217
+#: ../clients/cli/utils.c:233
#, c-format
msgid "Error converting IP6 address '%s' to text form"
msgstr "IP6 à°šà°¿à°°à±à°¨à°¾à°®à°¾ '%s' నౠపాఠం రూపంలోనికి మారà±à°šà±à°Ÿà°²à±‹ దోషం"
-#: ../cli/src/utils.c:393
+#: ../clients/cli/utils.c:407
+#, c-format
+#| msgid "'%s' is ambiguous (%s x %s)"
+msgid "'%s' is ambiguous (on x off)"
+msgstr "'%s' సందిగà±à°§à°‚à°—à°¾ à°µà±à°‚ది (ఆనౠx ఆఫà±)"
+
+#: ../clients/cli/utils.c:417
#, c-format
msgid "'%s' is not valid; use [%s] or [%s]"
msgstr "'%s' చెలà±à°²à±à°¨à°¦à°¿ కాదà±; [%s] లేదా [%s] à°µà±à°ªà°¯à±‹à°—à°¿à°‚à°šà±"
-#: ../cli/src/utils.c:475
+#: ../clients/cli/utils.c:499
#, c-format
msgid "'%s' is ambiguous (%s x %s)"
msgstr "'%s' సందిగà±à°§à°‚à°—à°¾ à°µà±à°‚ది (%s x %s)"
-#: ../cli/src/utils.c:487
+#: ../clients/cli/utils.c:511
#, c-format
msgid "missing name, try one of [%s]"
msgstr "దొరకని పేరà±, [%s] లో à°’à°•à°Ÿà°¿ à°ªà±à°°à°¯à°¤à±à°¨à°¿à°‚à°šà±"
-#: ../cli/src/utils.c:718
+#: ../clients/cli/utils.c:728
#, c-format
msgid "field '%s' has to be alone"
msgstr "à°•à±à°·à±‡à°¤à±à°°à°®à± '%s' వొంటరిగా à°µà±à°‚డాలి"
-#: ../cli/src/utils.c:720
+#: ../clients/cli/utils.c:731
#, c-format
msgid "invalid field '%s'; allowed fields: %s"
msgstr "చెలà±à°²à°¨à°¿ à°•à±à°·à±‡à°¤à±à°°à°¾à°®à± '%s'; à°…à°¨à±à°®à°¤à°¿à°‚à°šà°¿à°¨ à°•à±à°·à±‡à°¤à±à°°à°¾à°²à±: %s"
-#: ../cli/src/utils.c:747
+#: ../clients/cli/utils.c:788
msgid "Option '--terse' requires specifying '--fields'"
msgstr "à°à°šà±à°šà°¿à°•à°®à± '--terse' à°•à± '--fields' తెలà±à°ªà±à°Ÿ అవసరమà±"
-#: ../cli/src/utils.c:751
+#: ../clients/cli/utils.c:792
#, c-format
msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
msgstr ""
"à°à°šà±à°šà°¿à°•à°®à± '--terse' à°•à± à°ªà±à°°à°¤à±à°¯à±‡à°•à°¿à°‚à°šà°¿ '--fields' à°à°šà±à°šà°¿à°•à°®à± విలà±à°µà°²à± అవసరమౠ, '%s' "
"కాదà±"
-#: ../cli/src/utils.c:1070
+#: ../clients/cli/utils.c:1111
#, 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:1079
+#: ../clients/cli/utils.c:1120
#, 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 "
+"à°µà±à°ªà°¯à±‹à°—à°¿à°‚à°šà°¿ "
+"బలవంతపౠనిరà±à°µà°°à±à°¤à°¨, అయితే ఫలితాలౠఊహించనివిధంగా à°µà±à°‚టాయి."
+
+#: ../clients/nm-online.c:96
+#, c-format
+msgid "\rConnecting"
+msgstr "\rà°…à°¨à±à°¸à°‚ధానమౌచà±à°¨à±à°¨à°¦à°¿"
+
+#: ../clients/nm-online.c:149
+msgid ""
+"Time to wait for a connection, in seconds (without the option, default value "
+"is 30)"
+msgstr ""
+"à°…à°¨à±à°¸à°‚ధానం కొరకౠవేచివà±à°‚డాలà±à°¸à°¿à°¨ సమయం, à°•à±à°·à°£à°¾à°²à°²à±‹ (à°à°šà±à°šà°¿à°•à°‚ లేకà±à°‚à°¡à°¾, à°…à°ªà±à°°à°®à±‡à°¯ విలà±à°µ "
+"30)"
+
+#: ../clients/nm-online.c:150
+#| msgid "Exit immediately if NetworkManager is not running"
+msgid "Exit immediately if NetworkManager is not running or connecting"
+msgstr ""
+"నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± నడà±à°µà°•à°ªà±‹à°¯à°¿à°¨à°¾ లేదా à°…à°¨à±à°¸à°‚ధానమవà±à°µà°•à°ªà±‹à°¯à°¿à°¨à°¾ తకà±à°·à°£à°®à±‡ నిషà±à°•à±à°°à°®à°¿à°‚à°šà±"
+
+#: ../clients/nm-online.c:151
+msgid "Don't print anything"
+msgstr "దేనిని à°®à±à°¦à±à°°à°¿à°‚చవదà±à°¦à±"
+
+#: ../clients/nm-online.c:152
+#| msgid ""
+#| "Waits for NetworkManager to finish activating startup network connections."
+msgid "Wait for NetworkManager startup instead of a connection"
+msgstr "à°…à°¨à±à°¸à°‚ధానంకౠబదà±à°²à±à°—à°¾ నెటà±à°µà°°à±à°•à±â€Œà°¨à°¿à°°à±à°µà°¾à°¹à°¿à°• à°ªà±à°°à°¾à°°à°‚à°­à°‚ కొరకౠవేచివà±à°‚à°¡à±"
+
+#: ../clients/nm-online.c:173
+msgid ""
+"Waits for NetworkManager to finish activating startup network connections."
+msgstr ""
+"à°ªà±à°°à°¾à°°à°‚à°­ నెటà±à°µà°°à±à°•à± à°…à°¨à±à°¸à°‚ధానాలనౠకà±à°°à°¿à°¯à°¾à°¶à±€à°²à°‚చేయà±à°Ÿ పూరà±à°¤à°¿à°šà±‡à°¯à±à°Ÿà°•à± నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± "
+"కొరకౠవేచివà±à°‚ది."
+
+#: ../clients/nm-online.c:180 ../clients/nm-online.c:186
+msgid "Invalid option. Please use --help to see a list of valid options."
+msgstr ""
+"చెలà±à°²à°¨à°¿ à°à°šà±à°šà°¿à°•à°®à±. చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ à°à°šà±à°šà°¿à°•à°®à±à°² జాబితా కొరకౠ--help à°µà±à°ªà°¯à±‹à°—à°¿à°‚à°šà°‚à°¡à°¿."
+
+#: ../clients/tui/newt/nmt-newt-utils.c:180 ../clients/tui/nmt-editor.c:230
+#: ../clients/tui/nmt-password-dialog.c:174
+#: ../clients/tui/nmt-route-editor.c:135 ../clients/tui/nmtui-hostname.c:71
+#: ../clients/tui/nmtui.c:118
+msgid "OK"
+msgstr "సరే"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:328
+#: ../clients/tui/newt/nmt-newt-utils.c:360
+#, c-format
+msgid "Could not create temporary file: %s"
+msgstr "తాతà±à°•à°¾à°²à°¿à°• ఫైలౠసృషà±à°Ÿà°¿à°‚చలేక పోయింది: %s"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:368
+#, c-format
+msgid "Editor failed: %s"
+msgstr "సరికూరà±à°ªà°°à°¿ విఫలమైంది: %s"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:376
+#, c-format
+#| msgid "Editor failed: %s"
+msgid "Editor failed with status %d"
+msgstr "సరికూరà±à°ªà°°à°¿ à°¸à±à°¥à°¿à°¤à°¿ %d తో విఫలమైనà±"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:378
+#, c-format
+#| msgid "Editor failed: %s"
+msgid "Editor failed with signal %d"
+msgstr "సరికూరà±à°ªà°°à°¿ సిగà±à°¨à°²à± %d తో విఫలమైనà±"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:382
+#, c-format
+msgid "Could not re-read file: %s"
+msgstr "ఫైలà±à°¨à± తిరిగి-à°šà°¦à±à°µ లేక పోయింది: %s"
+
+#: ../clients/tui/nm-editor-utils.c:151
+#, c-format
+msgid "Ethernet connection %d"
+msgstr "ఈథరà±à°¨à±†à°Ÿà± à°…à°¨à±à°¸à°‚ధానం %d"
+
+#: ../clients/tui/nm-editor-utils.c:159
+#, c-format
+msgid "Wi-Fi connection %d"
+msgstr "వై-ఫై à°…à°¨à±à°¸à°‚ధానం %d"
+
+#: ../clients/tui/nm-editor-utils.c:168
+#, c-format
+msgid "InfiniBand connection %d"
+msgstr "ఇనà±à°«à°¿à°¬à°¾à°‚à°¡à± à°…à°¨à±à°¸à°‚ధానం %d"
+
+#: ../clients/tui/nm-editor-utils.c:173 ../libnm-glib/nm-device.c:1798
+msgid "Mobile Broadband"
+msgstr "మొబైలౠబà±à°°à°¾à°¡à±â€Œà°¬à°¾à°‚à°¡à±"
+
+#: ../clients/tui/nm-editor-utils.c:176
+#, c-format
+msgid "Mobile broadband connection %d"
+msgstr "మొబైలౠబà±à°°à°¾à°¡à±â€Œà°¬à°¾à°‚à°¡à± à°…à°¨à±à°¸à°‚ధానమౠ%d"
+
+#: ../clients/tui/nm-editor-utils.c:182 ../clients/tui/nmt-page-dsl.c:39
+msgid "DSL"
+msgstr "DSL"
+
+#: ../clients/tui/nm-editor-utils.c:186
+#, c-format
+msgid "DSL connection %d"
+msgstr "DSL à°…à°¨à±à°¸à°‚ధానం %d"
+
+#: ../clients/tui/nm-editor-utils.c:191 ../libnm-core/nm-connection.c:1501
+#: ../libnm-glib/nm-device.c:1802 ../libnm-util/nm-connection.c:1606
+#: ../src/settings/plugins/ifcfg-rh/reader.c:3931
+msgid "Bond"
+msgstr "బాండà±"
+
+#: ../clients/tui/nm-editor-utils.c:195
+#, c-format
+msgid "Bond connection %d"
+msgstr "బాండౠఅనà±à°¸à°‚ధానం %d"
+
+#: ../clients/tui/nm-editor-utils.c:200 ../libnm-core/nm-connection.c:1505
+#: ../libnm-glib/nm-device.c:1806 ../libnm-util/nm-connection.c:1610
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4219
+msgid "Bridge"
+msgstr "à°¬à±à°°à°¿à°¡à±à°œà±"
+
+#: ../clients/tui/nm-editor-utils.c:205
+#, c-format
+msgid "Bridge connection %d"
+msgstr "à°¬à±à°°à°¿à°¡à±à°œà± à°…à°¨à±à°¸à°‚ధానం %d"
+
+#: ../clients/tui/nm-editor-utils.c:209 ../libnm-core/nm-connection.c:1503
+#: ../libnm-glib/nm-device.c:1804 ../libnm-util/nm-connection.c:1608
+#: ../src/settings/plugins/ifcfg-rh/reader.c:4035
+msgid "Team"
+msgstr "టీమà±"
+
+#: ../clients/tui/nm-editor-utils.c:214
+#, c-format
+msgid "Team connection %d"
+msgstr "టీమౠఅనà±à°¸à°‚ధానం %d"
+
+#: ../clients/tui/nm-editor-utils.c:222
+#, c-format
+msgid "VLAN connection %d"
+msgstr "VLAN à°…à°¨à±à°¸à°‚ధానం %d"
+
+#: ../clients/tui/nm-editor-utils.c:237
+#, c-format
+msgid "VPN connection %d"
+msgstr "VPN à°…à°¨à±à°¸à°‚ధానం %d"
+
+#: ../clients/tui/nmt-device-entry.c:371
+msgid "Select..."
+msgstr "ఎంపికచేయి..."
+
+#: ../clients/tui/nmt-edit-connection-list.c:129
+msgid "Add"
+msgstr "జతచేయి"
+
+#: ../clients/tui/nmt-edit-connection-list.c:132
+#: ../clients/tui/nmt-page-ip4.c:175 ../clients/tui/nmt-page-ip6.c:173
+#: ../clients/tui/nmt-page-team-port.c:110 ../clients/tui/nmt-page-team.c:174
+msgid "Edit..."
+msgstr "సరికూరà±à°šà±..."
+
+#: ../clients/tui/nmt-edit-connection-list.c:135
+#: ../clients/tui/nmtui-edit.c:471
+msgid "Delete"
+msgstr "తొలగించà±"
+
+#: ../clients/tui/nmt-editor.c:81
+#, c-format
+msgid "Could not create editor for connection '%s' of type '%s'."
+msgstr "à°…à°¨à±à°¸à°‚ధానం '%s' à°°à°•à°‚ '%s' కొరకౠసరికూరà±à°ªà°°à°¿ సృషà±à°Ÿà°¿à°‚చలేక పోయింది."
+
+#: ../clients/tui/nmt-editor.c:85
+#, c-format
+msgid "Could not create editor for invalid connection '%s'."
+msgstr "చెలà±à°²à°¨à°¿ à°…à°¨à±à°¸à°‚ధానం '%s' కొరకౠసరికూరà±à°ªà°°à°¿ సృషà±à°Ÿà°¿à°‚చలేక పోయింది."
+
+#: ../clients/tui/nmt-editor.c:95
+#| msgid "Edit connection"
+msgid "Edit Connection"
+msgstr "à°…à°¨à±à°¸à°‚ధానమౠసరికూరà±à°šà±"
+
+#: ../clients/tui/nmt-editor.c:139
+#, c-format
+msgid "Unable to save connection: %s"
+msgstr "à°…à°¨à±à°¸à°‚ధానం దాయలేక పోయింది: %s"
+
+#: ../clients/tui/nmt-editor.c:153
+#, c-format
+msgid "Unable to add new connection: %s"
+msgstr "కొతà±à°¤ à°…à°¨à±à°¸à°‚ధానం జతచేయలేక పోయింది: %s"
+
+#: ../clients/tui/nmt-editor.c:227 ../clients/tui/nmt-password-dialog.c:171
+#: ../clients/tui/nmt-route-editor.c:128 ../clients/tui/nmtui-edit.c:192
+#: ../clients/tui/nmtui-edit.c:470 ../clients/tui/nmtui-hostname.c:69
+msgid "Cancel"
+msgstr "à°°à°¦à±à°¦à±à°šà±‡à°¯à°¿"
+
+#: ../clients/tui/nmt-mtu-entry.c:86
+msgid "(default)"
+msgstr "(à°…à°ªà±à°°à°®à±‡à°¯à°‚)"
+
+#: ../clients/tui/nmt-mtu-entry.c:88 ../clients/tui/nmt-mtu-entry.c:119
+msgid "bytes"
+msgstr "బైటà±à°²à±"
+
+#: ../clients/tui/nmt-page-bond.c:88
+msgid "Round-robin"
+msgstr "రౌండà±-రాబినà±"
+
+#: ../clients/tui/nmt-page-bond.c:89
+msgid "Active Backup"
+msgstr "à°•à±à°°à°¿à°¯à°¾à°¶à±€à°² à°¬à±à°¯à°¾à°•à°ªà±"
+
+#: ../clients/tui/nmt-page-bond.c:90
+msgid "XOR"
+msgstr "XOR"
+
+#: ../clients/tui/nmt-page-bond.c:91
+msgid "Broadcast"
+msgstr "à°¬à±à°°à°¾à°¡à±â€Œà°•à°¾à°¸à±à°Ÿà±"
+
+#: ../clients/tui/nmt-page-bond.c:92
+msgid "802.3ad"
+msgstr "802.3ad"
+
+#: ../clients/tui/nmt-page-bond.c:93
+msgid "Adaptive Transmit Load Balancing (tlb)"
+msgstr "ఎడాపà±à°Ÿà°¿à°µà± à°Ÿà±à°°à°¾à°¨à±à°¸à°¿à°®à°¿à°Ÿà± లోడౠబాలెనà±à°¸à°¿à°‚à°—à± (tlb)"
+
+#: ../clients/tui/nmt-page-bond.c:94
+msgid "Adaptive Load Balancing (alb)"
+msgstr "ఎడాపà±à°Ÿà°¿à°µà± లోడౠబాలెనà±à°¸à°¿à°‚à°—à± (alb)"
+
+#: ../clients/tui/nmt-page-bond.c:100
+msgid "MII (recommended)"
+msgstr "MII (సిఫారà±à°¸à±à°šà±‡à°¸à°¿à°¨)"
+
+#: ../clients/tui/nmt-page-bond.c:101
+msgid "ARP"
+msgstr "ARP"
+
+#: ../clients/tui/nmt-page-bond.c:357 ../clients/tui/nmt-page-bridge.c:80
+#: ../clients/tui/nmt-page-team.c:153
+msgid "Slaves"
+msgstr "à°¸à±à°²à±‡à°µà±à°¸à±"
+
+#: ../clients/tui/nmt-page-bond.c:369 ../clients/tui/nmt-page-wifi.c:226
+msgid "Mode"
+msgstr "విధమà±"
+
+#: ../clients/tui/nmt-page-bond.c:375
+msgid "Primary"
+msgstr "à°ªà±à°°à°¾à°¥à°®à°¿à°•"
+
+#: ../clients/tui/nmt-page-bond.c:381
+msgid "Link monitoring"
+msgstr "లింకౠమానిటరింగà±"
+
+#: ../clients/tui/nmt-page-bond.c:387 ../clients/tui/nmt-page-bond.c:394
+#: ../clients/tui/nmt-page-bond.c:401 ../clients/tui/nmt-page-bond.c:408
+msgctxt "milliseconds"
+msgid "ms"
+msgstr "మిసె"
+
+#: ../clients/tui/nmt-page-bond.c:388 ../clients/tui/nmt-page-bond.c:409
+msgid "Monitoring frequency"
+msgstr "మానిటరింగౠఫà±à°°à±€à°•à±à°µà±†à°¨à±à°¸à±€"
+
+#: ../clients/tui/nmt-page-bond.c:395
+msgid "Link up delay"
+msgstr "లింకౠఅపౠఆలసà±à°¯à°‚"
+
+#: ../clients/tui/nmt-page-bond.c:402
+msgid "Link down delay"
+msgstr "లింకౠడౌనౠఆలసà±à°¯à°‚"
+
+#: ../clients/tui/nmt-page-bond.c:415
+msgid "ARP targets"
+msgstr "ARP లకà±à°·à±à°¯à°¾à°²à±"
+
+#: ../clients/tui/nmt-page-bridge-port.c:38
+msgid "BRIDGE PORT"
+msgstr "à°¬à±à°°à°¿à°¡à±à°œà± పోరà±à°Ÿà±"
+
+#: ../clients/tui/nmt-page-bridge-port.c:69
+#: ../clients/tui/nmt-page-bridge.c:106
+msgid "Priority"
+msgstr "à°ªà±à°°à°¾à°§à°¾à°¨à±à°¯à°¤"
+
+#: ../clients/tui/nmt-page-bridge-port.c:75
+msgid "Path cost"
+msgstr "పాతౠకాసà±à°Ÿà±"
+
+#: ../clients/tui/nmt-page-bridge-port.c:77
+msgid "Hairpin mode"
+msgstr "హెయిరà±â€Œà°ªà°¿à°¨à± రీతి"
+
+#: ../clients/tui/nmt-page-bridge.c:42
+msgid "BRIDGE"
+msgstr "à°¬à±à°°à°¿à°¡à±à°œà±"
+
+#: ../clients/tui/nmt-page-bridge.c:90 ../clients/tui/nmt-page-bridge.c:115
+#: ../clients/tui/nmt-page-bridge.c:125 ../clients/tui/nmt-page-bridge.c:135
+msgid "seconds"
+msgstr "à°•à±à°·à°£à°¾à°²à±"
+
+#: ../clients/tui/nmt-page-bridge.c:91
+msgid "Aging time"
+msgstr "à°à°œà°¿à°‚గౠసమయం"
+
+#: ../clients/tui/nmt-page-bridge.c:93
+msgid "Enable STP (Spanning Tree Protocol)"
+msgstr "STP (à°¸à±à°ªà°¾à°¨à°¿à°‚à°—à± à°Ÿà±à°°à±€ à°ªà±à°°à±Šà°Ÿà±‹à°•à°¾à°²à±) చేతనం చేయి"
+
+#: ../clients/tui/nmt-page-bridge.c:116
+msgid "Forward delay"
+msgstr "ఫారà±à°µà°¾à°°à±à°¡à± డిలే"
+
+#: ../clients/tui/nmt-page-bridge.c:126
+msgid "Hello time"
+msgstr "హెలో సమయం"
+
+#: ../clients/tui/nmt-page-bridge.c:136
+msgid "Max age"
+msgstr "à°—à°°à°¿à°·à±à°Ÿ కాలపరిమితి"
+
+#. 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)
+#.
+#: ../clients/tui/nmt-page-dsl.c:67 ../clients/tui/nmt-page-wifi.c:328
+#: ../clients/tui/nmt-secret-agent.c:206 ../clients/tui/nmt-secret-agent.c:301
+msgid "Username"
+msgstr "వాడà±à°•à°°à°¿à°ªà±‡à°°à±"
+
+#: ../clients/tui/nmt-page-dsl.c:76 ../clients/tui/nmt-page-wifi.c:273
+#: ../clients/tui/nmt-page-wifi.c:304 ../clients/tui/nmt-page-wifi.c:337
+#: ../clients/tui/nmt-secret-agent.c:211 ../clients/tui/nmt-secret-agent.c:248
+#: ../clients/tui/nmt-secret-agent.c:278 ../clients/tui/nmt-secret-agent.c:311
+#: ../clients/tui/nmt-secret-agent.c:380 ../clients/tui/nmt-secret-agent.c:393
+#: ../clients/tui/nmt-secret-agent.c:409
+msgid "Password"
+msgstr "సంకేతపదం"
+
+#: ../clients/tui/nmt-page-dsl.c:79 ../clients/tui/nmt-secret-agent.c:306
+msgid "Service"
+msgstr "సేవ"
+
+#: ../clients/tui/nmt-page-ethernet.c:41
+msgid "ETHERNET"
+msgstr "ఈథరà±à°¨à±†à°Ÿà±"
+
+#: ../clients/tui/nmt-page-ethernet.c:80 ../clients/tui/nmt-page-vlan.c:124
+#: ../clients/tui/nmt-page-wifi.c:360
+msgid "Cloned MAC address"
+msgstr "à°•à±à°²à±‹à°¨à± చేసిన MAC à°šà°¿à°°à±à°¨à°¾à°®à°¾"
+
+#: ../clients/tui/nmt-page-infiniband.c:40
+msgid "INFINIBAND"
+msgstr "ఇనà±à°«à°¿à°¬à°¾à°‚à°¡à±"
+
+#: ../clients/tui/nmt-page-infiniband.c:51
+msgid "Datagram"
+msgstr "డాటాగà±à°°à°¾à°®à±"
+
+#: ../clients/tui/nmt-page-infiniband.c:52
+msgid "Connected"
+msgstr "à°…à°¨à±à°¸à°‚ధానమైంది"
+
+#: ../clients/tui/nmt-page-infiniband.c:90
+msgid "Transport mode"
+msgstr "బదిలి రీతి"
+
+#: ../clients/tui/nmt-page-ip4.c:41
+msgid "Disabled"
+msgstr "అచేతనమైన"
+
+#: ../clients/tui/nmt-page-ip4.c:42 ../clients/tui/nmt-page-ip6.c:42
+msgid "Automatic"
+msgstr "à°¸à±à°µà°¯à°‚చాలక"
+
+#: ../clients/tui/nmt-page-ip4.c:43 ../clients/tui/nmt-page-ip6.c:44
+msgid "Link-Local"
+msgstr "లింకà±-లోకలà±"
+
+#: ../clients/tui/nmt-page-ip4.c:44 ../clients/tui/nmt-page-ip6.c:45
+msgid "Manual"
+msgstr "మానవీయం"
+
+#: ../clients/tui/nmt-page-ip4.c:45
+msgid "Shared"
+msgstr "పంచà±à°•à±Šà°¨à°¿à°¨"
+
+#: ../clients/tui/nmt-page-ip4.c:54
+msgid "IPv4 CONFIGURATION"
+msgstr "IPv4 ఆకృతీకరణ"
+
+#: ../clients/tui/nmt-page-ip4.c:100 ../clients/tui/nmt-page-ip6.c:100
+msgid "(No custom routes)"
+msgstr "(మలచిన రౌటà±à°²à± లేవà±)"
+
+#: ../clients/tui/nmt-page-ip4.c:103 ../clients/tui/nmt-page-ip6.c:103
+#, c-format
+msgid "One custom route"
+msgid_plural "%d custom routes"
+msgstr[0] "à°’à°• మలచిన రౌటà±"
+msgstr[1] "%d మలచిన రౌటà±à°²à±"
+
+#: ../clients/tui/nmt-page-ip4.c:144 ../clients/tui/nmt-page-ip6.c:144
+msgid "Addresses"
+msgstr "à°šà°¿à°°à±à°¨à°¾à°®à°¾"
+
+#: ../clients/tui/nmt-page-ip4.c:150 ../clients/tui/nmt-page-ip6.c:150
+msgid "Gateway"
+msgstr "గేటà±â€Œà°µà±‡"
+
+#: ../clients/tui/nmt-page-ip4.c:156 ../clients/tui/nmt-page-ip6.c:156
+msgid "DNS servers"
+msgstr "DNS సేవికలà±"
+
+#: ../clients/tui/nmt-page-ip4.c:162 ../clients/tui/nmt-page-ip6.c:162
+msgid "Search domains"
+msgstr "à°…à°¨à±à°µà±‡à°·à°£ డొమైనà±à°²à±"
+
+#: ../clients/tui/nmt-page-ip4.c:177 ../clients/tui/nmt-page-ip6.c:175
+msgid "Routing"
+msgstr "రౌటింగà±"
+
+#: ../clients/tui/nmt-page-ip4.c:179 ../clients/tui/nmt-page-ip6.c:177
+msgid "Never use this network for default route"
+msgstr "à°…à°ªà±à°°à°®à±‡à°¯ రౌటౠకొరకౠఈ నెటà±à°µà°°à±à°•à± ఉపయోగించవదà±à°¦à±"
+
+#: ../clients/tui/nmt-page-ip4.c:187
+msgid "Require IPv4 addressing for this connection"
+msgstr "à°ˆ à°…à°¨à±à°¸à°‚ధానం కొరకౠIPv4 à°Žà°¡à±à°°à±†à°¸à±à°¸à°¿à°‚గౠకావాలి"
+
+#: ../clients/tui/nmt-page-ip6.c:41
+msgid "Ignore"
+msgstr "విసà±à°®à°°à°¿à°‚à°šà±"
+
+#: ../clients/tui/nmt-page-ip6.c:43
+msgid "Automatic (DHCP-only)"
+msgstr "à°¸à±à°µà°¯à°‚చాలక DHCP మాతà±à°°à°®à±‡"
+
+#: ../clients/tui/nmt-page-ip6.c:54
+msgid "IPv6 CONFIGURATION"
+msgstr "IPv6 ఆకృతీకరణ"
+
+#: ../clients/tui/nmt-page-ip6.c:185
+msgid "Require IPv6 addressing for this connection"
+msgstr "à°ˆ à°…à°¨à±à°¸à°‚ధానం కొరకౠIPv6 à°Žà°¡à±à°°à°¸à°¿à°‚గౠకావాలి"
+
+#: ../clients/tui/nmt-page-main.c:139
+msgid "Hide"
+msgstr "దాయి"
+
+#: ../clients/tui/nmt-page-main.c:139
+msgid "Show"
+msgstr "చూపà±"
+
+#: ../clients/tui/nmt-page-main.c:187
+msgid "Profile name"
+msgstr "à°ªà±à°°à±Šà°«à±ˆà°²à± పేరà±"
+
+#: ../clients/tui/nmt-page-main.c:194
+msgid "Device"
+msgstr "పరికరం"
+
+#: ../clients/tui/nmt-page-main.c:243
+msgid "Automatically connect"
+msgstr "à°¸à±à°µà°¯à°‚చాలకంగా à°…à°¨à±à°¸à°‚ధానించà±"
+
+#: ../clients/tui/nmt-page-main.c:249
+msgid "Available to all users"
+msgstr "వినియోగదారà±à°²à°‚దరికీ à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹ ఉంది"
+
+#: ../clients/tui/nmt-page-ppp.c:49
+#| msgid "IPv4 CONFIGURATION"
+msgid "PPP CONFIGURATION"
+msgstr "PPP ఆకృతీకరణ"
+
+#: ../clients/tui/nmt-page-ppp.c:142
+#| msgid "Authentication"
+msgid "Allowed authentication methods:"
+msgstr "à°…à°¨à±à°®à°¤à°¿à°‚à°šà± à°ªà±à°°à°¾à°®à°¾à°£à±€à°•à°°à°£ పదà±à°¦à°¤à±à°²à±:"
+
+#: ../clients/tui/nmt-page-ppp.c:149
+#| msgid "LEAP"
+msgid "EAP"
+msgstr "EAP"
+
+#: ../clients/tui/nmt-page-ppp.c:157
+#| msgid "AP"
+msgid "PAP"
+msgstr "PAP"
+
+#: ../clients/tui/nmt-page-ppp.c:165
+msgid "CHAP"
+msgstr "CHAP"
+
+#: ../clients/tui/nmt-page-ppp.c:173
+msgid "MSCHAPv2"
+msgstr "MSCHAPv2"
+
+#: ../clients/tui/nmt-page-ppp.c:181
+msgid "MSCHAP"
+msgstr "MSCHAP"
+
+#: ../clients/tui/nmt-page-ppp.c:197
+msgid "Use point-to-point encryption (MPPE)"
+msgstr "పాయింటà±-à°Ÿà±-పాయింటౠఎనà±à°•à±à°°à°¿à°ªà±à°·à°¨à± (MPPE) ఉపయోగించండి"
+
+#: ../clients/tui/nmt-page-ppp.c:209
+msgid "Require 128-bit encryption"
+msgstr "128-బిటౠఎనà±à°•à±à°°à°¿à°ªà±à°·à°¨à± అవసరం"
+
+#: ../clients/tui/nmt-page-ppp.c:219
+msgid "Use stateful MPPE"
+msgstr "à°¸à±à°Ÿà±‡à°Ÿà±â€Œà°«à±à°²à± MPPE ఉపయోగించండి"
+
+#: ../clients/tui/nmt-page-ppp.c:231
+msgid "Allow BSD data compression"
+msgstr "BSD డేటా à°•à°‚à°ªà±à°°à±†à°·à°¨à± à°…à°¨à±à°®à°¤à°¿à°‚à°šà±"
+
+#: ../clients/tui/nmt-page-ppp.c:239
+msgid "Allow Deflate data compression"
+msgstr "à°…à°ªà±à°°à°®à±‡à°¯ డేటా à°•à°‚à°ªà±à°°à±†à°·à°¨à± à°…à°¨à±à°®à°¤à°¿à°‚à°šà±"
+
+#: ../clients/tui/nmt-page-ppp.c:247
+msgid "Use TCP header compression"
+msgstr "TCP హెడరౠకంపà±à°°à±†à°·à°¨à± ఉపయోగించà±"
+
+#: ../clients/tui/nmt-page-ppp.c:257
+msgid "Send PPP echo packets"
+msgstr "PPP ఎకో పాకెటà±à°¸à± పంపà±"
+
+#: ../clients/tui/nmt-page-team-port.c:45
+msgid "TEAM PORT"
+msgstr "టీమౠపోరà±à°Ÿà±"
+
+#: ../clients/tui/nmt-page-team-port.c:100 ../clients/tui/nmt-page-team.c:164
+msgid "JSON configuration"
+msgstr "JSON ఆకృతీకరణ"
+
+#: ../clients/tui/nmt-page-team.c:51
+msgid "TEAM"
+msgstr "టీమà±"
+
+#: ../clients/tui/nmt-page-vlan.c:101
+msgid "Parent"
+msgstr "పేరెంటà±"
+
+#: ../clients/tui/nmt-page-vlan.c:116
+msgid "VLAN id"
+msgstr "VLAN à°â€à°¡à°¿"
+
+#: ../clients/tui/nmt-page-wifi.c:57
+msgid "WI-FI"
+msgstr "వై-ఫై"
+
+#: ../clients/tui/nmt-page-wifi.c:68
+msgctxt "Wi-Fi"
+msgid "Client"
+msgstr "à°•à°•à±à°·à°¿à°¦à°¾à°°à±"
+
+#: ../clients/tui/nmt-page-wifi.c:69
+msgid "Access Point"
+msgstr "à°Žà°•à±à°¸à±†à°¸à± పాయింటà±"
+
+#: ../clients/tui/nmt-page-wifi.c:70
+msgid "Ad-Hoc Network"
+msgstr "à°Žà°¡à±-హాకౠనెటà±à°µà°°à±à°•à±"
+
+#: ../clients/tui/nmt-page-wifi.c:75
+msgctxt "Wi-Fi"
+msgid "Automatic"
+msgstr "à°¸à±à°µà°¯à°‚చాలక"
+
+#. 802.11a Wi-Fi network
+#: ../clients/tui/nmt-page-wifi.c:77
+msgid "A (5 GHz)"
+msgstr "A (5 GHz)"
+
+#. 802.11b / 802.11g Wi-Fi network
+#: ../clients/tui/nmt-page-wifi.c:79
+msgid "B/G (2.4 GHz)"
+msgstr "B/G (2.4 GHz)"
+
+#: ../clients/tui/nmt-page-wifi.c:84
+msgctxt "Wi-Fi security"
+msgid "None"
+msgstr "à°à°¦à±€à°•à°¾à°¦à±"
+
+#: ../clients/tui/nmt-page-wifi.c:85
+msgid "WPA & WPA2 Personal"
+msgstr "WPA & WPA2 పరà±à°¸à°¨à°²à±"
+
+#: ../clients/tui/nmt-page-wifi.c:86
+msgid "WPA & WPA2 Enterprise"
+msgstr "WPA & WPA2 à°Žà°‚à°Ÿà°°à±â€Œà°ªà±à°°à±ˆà°œà±"
+
+#: ../clients/tui/nmt-page-wifi.c:87
+msgid "WEP 40/128-bit Key (Hex or ASCII)"
+msgstr "WEP 40/128-bit Key (Hex లేదా ASCII)"
+
+#: ../clients/tui/nmt-page-wifi.c:88
+msgid "WEP 128-bit Passphrase"
+msgstr "WEP 128-bit పాసà±â€Œà°«à±à°°à±‡à°œà±"
+
+#: ../clients/tui/nmt-page-wifi.c:89
+msgid "Dynamic WEP (802.1x)"
+msgstr "డైనమికౠWEP (802.1x)"
+
+#: ../clients/tui/nmt-page-wifi.c:90
+msgid "LEAP"
+msgstr "LEAP"
+
+#: ../clients/tui/nmt-page-wifi.c:95
+msgctxt "WEP key index"
+msgid "1 (Default)"
+msgstr "1 (à°…à°ªà±à°°à°®à±‡à°¯à°‚)"
+
+#: ../clients/tui/nmt-page-wifi.c:96
+msgctxt "WEP key index"
+msgid "2"
+msgstr "2"
+
+#: ../clients/tui/nmt-page-wifi.c:97
+msgctxt "WEP key index"
+msgid "3"
+msgstr "3"
+
+#: ../clients/tui/nmt-page-wifi.c:98
+msgctxt "WEP key index"
+msgid "4"
+msgstr "4"
+
+#: ../clients/tui/nmt-page-wifi.c:103
+msgid "Open System"
+msgstr "ఓపెనౠవà±à°¯à°µà°¸à±à°¥"
+
+#: ../clients/tui/nmt-page-wifi.c:104
+msgid "Shared Key"
+msgstr "భాగసà±à°µà°¾à°®à±à°¯ à°•à±€"
+
+#: ../clients/tui/nmt-page-wifi.c:252
+msgid "Channel"
+msgstr "ఛానలà±"
+
+#: ../clients/tui/nmt-page-wifi.c:257
+msgid "Security"
+msgstr "à°°à°•à±à°·à°£"
+
+#. "wpa-enterprise"
+#. FIXME
+#: ../clients/tui/nmt-page-wifi.c:278
+msgid "(No support for wpa-enterprise yet...)"
+msgstr "(wpa-enterprise కౠఇంకా తోడà±à°ªà°¾à°Ÿà± లేదà±...)"
+
+#: ../clients/tui/nmt-page-wifi.c:285 ../clients/tui/nmt-secret-agent.c:262
+msgid "Key"
+msgstr "à°•à±€"
+
+#: ../clients/tui/nmt-page-wifi.c:288 ../clients/tui/nmt-page-wifi.c:307
+msgid "WEP index"
+msgstr "WEP సూచిక"
+
+#: ../clients/tui/nmt-page-wifi.c:296 ../clients/tui/nmt-page-wifi.c:315
+msgid "Authentication"
+msgstr "à°ªà±à°°à°¾à°®à°¾à°£à±€à°•à°°à°£"
+
+#. "dynamic-wep"
+#. FIXME
+#: ../clients/tui/nmt-page-wifi.c:321
+msgid "(No support for dynamic-wep yet...)"
+msgstr "(dynamic-wep కౠఇంకా తోడà±à°ªà°¾à°Ÿà± లేదà±...)"
+
+#: ../clients/tui/nmt-password-fields.c:130
+msgid "Ask for this password every time"
+msgstr "à°ˆ సంకేతపదం కొరకౠపà±à°°à°¤à°¿à°¸à°¾à°°à°¿ à°…à°¡à±à°—à±"
+
+#: ../clients/tui/nmt-password-fields.c:131
+msgid "Show password"
+msgstr "సంకేతపదమà±à°¨à± చూపà±à°®à±"
+
+#: ../clients/tui/nmt-route-table.c:217
+msgid "Destination"
+msgstr "à°—à°®à±à°¯à°‚"
+
+#: ../clients/tui/nmt-route-table.c:217
+msgid "Prefix"
+msgstr "à°ªà±à°°à°¿à°«à°¿à°•à±à°¸à±"
+
+#: ../clients/tui/nmt-route-table.c:226
+msgid "Next Hop"
+msgstr "తరà±à°µà°¾à°¤à°¿ హాపà±"
+
+#: ../clients/tui/nmt-route-table.c:234
+msgid "Metric"
+msgstr "మెటà±à°°à°¿à°•à±"
+
+#: ../clients/tui/nmt-route-table.c:254
+msgid "No custom routes are defined."
+msgstr "ఠమలచిన రౌటà±à°²à± నిరà±à°µà°šà°¿à°‚చలేదà±."
+
+#: ../clients/tui/nmt-secret-agent.c:220
+msgid "Identity"
+msgstr "à°—à±à°°à±à°¤à°¿à°‚à°ªà±"
+
+#: ../clients/tui/nmt-secret-agent.c:225
+msgid "Private key password"
+msgstr "à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ à°•à±€ సంకేతపదం"
+
+#: ../clients/tui/nmt-secret-agent.c:340
+msgid "Authentication required by wireless network"
+msgstr "వైరà±â€Œà°²à±†à°¸à± నెటà±â€Œà°µà°°à±à°•à± చేత ధృవీకరణ అవసరమైంది"
+
+#: ../clients/tui/nmt-secret-agent.c:341
+#, c-format
+msgid ""
+"Passwords or encryption keys are required to access the wireless network "
+"'%s'."
+msgstr ""
+"వైరà±â€Œà°²à±†à°¸à± నెటà±â€Œà°µà°°à±à°•à± '%s' యాకà±à°¸à±†à°¸à± చేయà±à°Ÿà°•à± సంకేతపదాలౠలేదా à°Žà°¨à±à°•à±à°°à°¿à°ªà±à°·à°¨à± కీలౠ"
+"అవసరం."
+
+#: ../clients/tui/nmt-secret-agent.c:349
+msgid "Wired 802.1X authentication"
+msgstr "వైరà±à°¡à± 802.1X ధృవీకరణ"
+
+#: ../clients/tui/nmt-secret-agent.c:352
+msgid "Network name"
+msgstr "నెటà±â€â€Œà°µà°°à±à°•à± పేరà±"
+
+#: ../clients/tui/nmt-secret-agent.c:359
+msgid "DSL authentication"
+msgstr "DSL ధృవీకరణ"
+
+#: ../clients/tui/nmt-secret-agent.c:367
+msgid "PIN code required"
+msgstr "PIN కోడౠఅవసరమైంది"
+
+#: ../clients/tui/nmt-secret-agent.c:368
+msgid "PIN code is needed for the mobile broadband device"
+msgstr "మొబైలౠబà±à°°à°¾à°¡à±â€Œà°¬à°¾à°‚డౠపరికరం కొరకౠPIN కోడౠఅవసరమైంది"
+
+#: ../clients/tui/nmt-secret-agent.c:370
+msgid "PIN"
+msgstr "పినà±"
+
+#: ../clients/tui/nmt-secret-agent.c:376 ../clients/tui/nmt-secret-agent.c:389
+#: ../clients/tui/nmt-secret-agent.c:405
+msgid "Mobile broadband network password"
+msgstr "మొబైలౠబà±à°°à°¾à°¡à±â€Œà°¬à°¾à°‚డౠనెటà±à°µà°°à±à°•à± సంకేతపదం"
+
+#: ../clients/tui/nmt-secret-agent.c:377 ../clients/tui/nmt-secret-agent.c:390
+#: ../clients/tui/nmt-secret-agent.c:406
+#, c-format
+msgid "A password is required to connect to '%s'."
+msgstr "%s'à°•à± à°…à°¨à±à°¸à°‚ధానమగà±à°Ÿà°•à± వొక సంకేతపదం అవసరమైంది."
+
+#: ../clients/tui/nmt-slave-list.c:137
+msgid "Select the type of slave connection you wish to add."
+msgstr "మీరౠజతచేయాలని à°…à°¨à±à°•à±Šà°‚à°Ÿà±à°¨à±à°¨ à°¸à±à°²à±‡à°µà± à°…à°¨à±à°¸à°‚ధానం à°°à°•à°‚ ఎంపికచేయి."
+
+#: ../clients/tui/nmt-widget-list.c:141
+msgid "Add..."
+msgstr "జతచేయి..."
+
+#: ../clients/tui/nmt-widget-list.c:204
+msgid "Remove"
+msgstr "తీసివేయి"
+
+#: ../clients/tui/nmtui-connect.c:90
+msgid "Activation failed"
+msgstr "à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà±à°Ÿ విఫలమైంది"
+
+#: ../clients/tui/nmtui-connect.c:138
+msgid "Connecting..."
+msgstr "à°…à°¨à±à°¸à°‚ధానిసà±à°¤à±‹à°‚ది..."
+
+#: ../clients/tui/nmtui-connect.c:167 ../clients/tui/nmtui-connect.c:190
+#, c-format
+msgid "Could not activate connection: %s"
+msgstr "à°…à°¨à±à°¸à°‚ధానం à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà°²à±‡à°• పోయింది: %s"
+
+#: ../clients/tui/nmtui-connect.c:250 ../clients/tui/nmtui-connect.c:299
+msgid "Activate"
+msgstr "à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°¿à°‚à°šà±"
+
+#: ../clients/tui/nmtui-connect.c:252
+msgid "Deactivate"
+msgstr "à°•à±à°°à°¿à°¯à°¾à°¹à±€à°¨à°‚చేయి"
+
+#: ../clients/tui/nmtui-connect.c:304 ../clients/tui/nmtui-edit.c:95
+#: ../clients/tui/nmtui.c:112
+msgid "Quit"
+msgstr "నిషà±à°•à±à°°à°®à°¿à°‚à°šà±"
+
+#: ../clients/tui/nmtui-connect.c:327
+#, c-format
+msgid "No such connection '%s'"
+msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ à°…à°¨à±à°¸à°‚ధానాం '%s' లేదà±"
+
+#: ../clients/tui/nmtui-connect.c:329
+msgid "Connection is already active"
+msgstr "à°…à°¨à±à°¸à°‚ధానం ఇపà±à°ªà°Ÿà°¿à°•à±‡ à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°®à±ˆà°µà±à°‚ది"
+
+#: ../clients/tui/nmtui-edit.c:200
+msgid "Create"
+msgstr "సృషà±à°Ÿà°¿à°‚à°šà±"
+
+#: ../clients/tui/nmtui-edit.c:342
+msgid "Select the type of connection you wish to create."
+msgstr "మీరౠసృషà±à°Ÿà°¿à°‚à°šà±à°¦à°¾à°®à°¨à°¿ à°…à°¨à±à°•à±Šà°‚à°Ÿà±à°¨à±à°¨ à°…à°¨à±à°¸à°‚ధానం à°°à°•à°‚ ఎంపికచేయండి."
+
+#: ../clients/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 చొపà±à°ªà°¿à°‚à°¤ సంసà±à°¥à°¾à°ªà°¿à°‚à°šà°¿ ఉండకపోవచà±à°šà±."
+
+#: ../clients/tui/nmtui-edit.c:386 ../clients/tui/nmtui-edit.c:402
+msgid "New Connection"
+msgstr "కొతà±à°¤ à°…à°¨à±à°¸à°‚ధానం"
+
+#: ../clients/tui/nmtui-edit.c:440
+#, c-format
+msgid "Unable to delete connection: %s"
+msgstr "à°…à°¨à±à°¸à°‚ధానం తొలగించలేక పోయింది: %s"
+
+#: ../clients/tui/nmtui-edit.c:472
+#, c-format
+msgid "Are you sure you want to delete the connection '%s'?"
+msgstr "మీరౠఖచà±à°šà°¿à°¤à°‚à°—à°¾ à°…à°¨à±à°¸à°‚ధానమౠ'%sనౠతొలగించà±à°¦à°¾à°®à°¨à°¿ à°…à°¨à±à°•à±Šà°¨à±à°šà±à°¨à±à°¨à°¾à°°à°¾?"
+
+#: ../clients/tui/nmtui-edit.c:486
+#, c-format
+msgid "Could not delete connection: %s"
+msgstr "à°…à°¨à±à°¸à°‚ధానమà±à°¨à± తొలగించలేక పోయింది: %s"
+
+#: ../clients/tui/nmtui-hostname.c:47
+msgid "Set Hostname"
+msgstr "అతిధేయపేరౠఅమరà±à°šà±"
+
+#: ../clients/tui/nmtui-hostname.c:55
+msgid "Hostname"
+msgstr "అతిధేయపేరà±"
-#: ../libnm-util/crypto.c:133
+#. Translators: this indicates the result. ie, "I have set the hostname to ..."
+#: ../clients/tui/nmtui-hostname.c:114
+#, c-format
+msgid "Set hostname to '%s'"
+msgstr "అతిధేయపేరౠ'%s' కౠఅమరà±à°šà±"
+
+#: ../clients/tui/nmtui-hostname.c:116
+#, c-format
+msgid "Unable to set hostname: %s"
+msgstr "అతిధేయపేరౠఅమరà±à°šà°²à±‡à°• పోయింది: %s"
+
+#: ../clients/tui/nmtui.c:57 ../clients/tui/nmtui.c:60
+msgid "connection"
+msgstr "à°…à°¨à±à°¸à°‚ధానమà±"
+
+#: ../clients/tui/nmtui.c:58
+msgid "Edit a connection"
+msgstr "à°…à°¨à±à°¸à°‚ధానమౠసరికూరà±à°šà±"
+
+#: ../clients/tui/nmtui.c:61
+msgid "Activate a connection"
+msgstr "à°…à°¨à±à°¸à°‚ధానం à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°‚చేయి"
+
+#: ../clients/tui/nmtui.c:63
+msgid "new hostname"
+msgstr "కొతà±à°¤ అతిధేయపేరà±"
+
+#: ../clients/tui/nmtui.c:64
+msgid "Set system hostname"
+msgstr "à°µà±à°¯à°µà°¸à±à°¥ అతిధేయపేరౠఅమరà±à°šà±"
+
+#: ../clients/tui/nmtui.c:87
+msgid "NetworkManager TUI"
+msgstr "నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± à°Ÿà°¿à°¯à±à°"
+
+#: ../clients/tui/nmtui.c:95
+msgid "Please select an option"
+msgstr "దయచేసి à°’à°• à°à°šà±à°šà°¿à°•à°‚ ఎంపికచేయి"
+
+#: ../clients/tui/nmtui.c:147
+msgid "Usage"
+msgstr "వినిమయం"
+
+#: ../clients/tui/nmtui.c:228
+msgid "Could not parse arguments"
+msgstr "పరామితà±à°²à± పారà±à°¸à± చేయలేకపోయింది"
+
+#: ../clients/tui/nmtui.c:238 ../clients/tui/nmtui.c:249
+#, c-format
+#| msgid "Could not activate connection: %s"
+msgid "Could not contact NetworkManager: %s.\n"
+msgstr "నెటà±à°µà°°à±à°•à±â€Œà°¨à°¿à°°à±à°µà°¾à°¹à°¿à°•à°¤à±‹ సంపà±à°°à°¦à°¿à°‚చలేక పోయింది: %s.\n"
+
+#: ../clients/tui/nmtui.c:243
+msgid "NetworkManager is not running."
+msgstr "నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± నడà±à°šà±à°Ÿà°²à±‡à°¦à±."
+
+#: ../libnm-core/crypto.c:135 ../libnm-util/crypto.c:133
#, c-format
msgid "PEM key file had no end tag '%s'."
msgstr "PEM à°•à±€ ఫైలౠఅంతà±à°¯ టాగౠ'%s' కలిగిలేదà±."
-#: ../libnm-util/crypto.c:146
+#: ../libnm-core/crypto.c:148 ../libnm-util/crypto.c:146
#, c-format
msgid "Doesn't look like a PEM private key file."
msgstr "PEM à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ à°•à±€ ఫైలà±à°µà°²à±† అనిపించà±à°Ÿà°²à±‡à°¦à±."
-#: ../libnm-util/crypto.c:163
+#: ../libnm-core/crypto.c:165 ../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:171
+#: ../libnm-core/crypto.c:173 ../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:181
+#: ../libnm-core/crypto.c:183 ../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:192
+#: ../libnm-core/crypto.c:194 ../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:199
+#: ../libnm-core/crypto.c:201 ../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:212
+#: ../libnm-core/crypto.c:216 ../libnm-util/crypto.c:214
#, c-format
msgid "Malformed PEM file: unknown private key cipher '%s'."
msgstr "తపà±à°ªà±à°—ావà±à°¨à±à°¨ PEM ఫైలà±: తెలియని à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ à°•à±€ సైఫరౠ'%s'."
-#: ../libnm-util/crypto.c:231
+#: ../libnm-core/crypto.c:235 ../libnm-util/crypto.c:233
#, c-format
msgid "Could not decode private key."
msgstr "à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ కీనౠడీకోడౠచేయలేక పోయింది."
-#: ../libnm-util/crypto.c:283
+#: ../libnm-core/crypto.c:288 ../libnm-util/crypto.c:285
msgid "Failed to find expected PKCS#8 start tag."
msgstr "కావలసిన PKCS#8 à°ªà±à°°à°¾à°°à°‚à°­ టాగౠకనà±à°—ొనలేక పోయింది."
-#: ../libnm-util/crypto.c:291
+#: ../libnm-core/crypto.c:296 ../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:310
+#: ../libnm-core/crypto.c:315 ../libnm-util/crypto.c:312
msgid "Failed to decode PKCS#8 private key."
msgstr "PKCS#8 à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ à°•à±€ డీకోడౠచేయà±à°Ÿà°•à± విఫలమైంది."
-#: ../libnm-util/crypto.c:352
+#: ../libnm-core/crypto.c:357 ../libnm-util/crypto.c:354
#, c-format
msgid "IV must be an even number of bytes in length."
msgstr "IV పొడవౠతపà±à°ªà°• సరిసంఖà±à°¯ బైటà±à°²à°²à±‹à°¨à±‡ à°µà±à°‚డాలి."
-#: ../libnm-util/crypto.c:366
+#: ../libnm-core/crypto.c:371 ../libnm-util/crypto.c:368
#, c-format
msgid "IV contains non-hexadecimal digits."
msgstr "IV నానà±-హెకà±à°¸à°¾à°¡à±†à°¸à°¿à°®à°²à± సంఖà±à°¯à°²à°¨à± కలిగివà±à°‚ది."
-#: ../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
+#: ../libnm-core/crypto.c:411 ../libnm-core/crypto_gnutls.c:151
+#: ../libnm-core/crypto_gnutls.c:269 ../libnm-core/crypto_nss.c:171
+#: ../libnm-core/crypto_nss.c:333 ../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:511
+#: ../libnm-core/crypto.c:523 ../libnm-util/crypto.c:518
#, c-format
msgid "Unable to determine private key type."
msgstr "à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ à°•à±€ à°°à°•à°®à±à°¨à± నిరà±à°£à°¯à°¿à°‚చలేక పోయింది."
-#: ../libnm-util/crypto.c:566
+#: ../libnm-core/crypto.c:580 ../libnm-util/crypto.c:573
#, c-format
msgid "PEM certificate had no start tag '%s'."
msgstr "PEM దృవీకరణపతà±à°°à°®à± à°ªà±à°°à°¾à°°à°‚à°­ టాగà±â€Œ '%s'నౠకలిగిలేదà±."
-#: ../libnm-util/crypto.c:575
+#: ../libnm-core/crypto.c:589 ../libnm-util/crypto.c:582
#, c-format
msgid "PEM certificate had no end tag '%s'."
msgstr "PEM దృవీకరణపతà±à°°à°®à± à°…à°‚à°¤à±à°¯ టాగà±â€Œ '%s'నౠకలిగిలేదà±."
-#: ../libnm-util/crypto.c:593
+#: ../libnm-core/crypto.c:607 ../libnm-util/crypto.c:600
#, c-format
msgid "Failed to decode certificate."
msgstr "దృవీకరణపతà±à°°à°®à±à°¨à± డీకోడౠచేయà±à°Ÿà°•à± విఫలమైంది."
-#: ../libnm-util/crypto_gnutls.c:50
+#: ../libnm-core/crypto_gnutls.c:50 ../libnm-util/crypto_gnutls.c:50
msgid "Failed to initialize the crypto engine."
msgstr "à°•à±à°°à°¿à°ªà±à°Ÿà±‹ యింజనà±â€Œà°¨à± సిదà±à°¦à°®à±à°šà±‡à°¯à±à°Ÿà°²à±‹ విఫలమైంది."
-#: ../libnm-util/crypto_gnutls.c:92
+#: ../libnm-core/crypto_gnutls.c:92 ../libnm-util/crypto_gnutls.c:92
#, c-format
msgid "Failed to initialize the MD5 engine: %s / %s."
msgstr "MD5 యింజనౠసిదà±à°¦à°®à± చేయà±à°Ÿà°²à±‹ విఫలమైంది: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:155
+#: ../libnm-core/crypto_gnutls.c:159 ../libnm-util/crypto_gnutls.c:158
#, c-format
msgid "Invalid IV length (must be at least %zd)."
msgstr "చెలà±à°²à°¨à°¿ IV పొడవౠ(తపà±à°ªà°• కనీసం %zd అయివà±à°‚డాలి)."
-#: ../libnm-util/crypto_gnutls.c:166
+#: ../libnm-core/crypto_gnutls.c:170 ../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:175
+#: ../libnm-core/crypto_gnutls.c:179 ../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:184
+#: ../libnm-core/crypto_gnutls.c:188 ../libnm-util/crypto_gnutls.c:187
#, c-format
msgid "Failed to set IV for decryption: %s / %s."
msgstr "వివరణ కొరకౠIV అమరà±à°šà±à°Ÿà°²à±‹ విఫలమైంది: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:193
+#: ../libnm-core/crypto_gnutls.c:197 ../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:203 ../libnm-util/crypto_nss.c:257
+#: ../libnm-core/crypto_gnutls.c:207 ../libnm-core/crypto_nss.c:261
+#: ../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:214 ../libnm-util/crypto_nss.c:268
+#: ../libnm-core/crypto_gnutls.c:218 ../libnm-core/crypto_nss.c:272
+#: ../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:281
+#: ../libnm-core/crypto_gnutls.c:291 ../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:290
+#: ../libnm-core/crypto_gnutls.c:300 ../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:300
+#: ../libnm-core/crypto_gnutls.c:310 ../libnm-util/crypto_gnutls.c:308
#, c-format
msgid "Failed to set IV for encryption: %s / %s."
msgstr "à°Žà°¨à±à°•à±à°°à°¿à°ªà±à°·à°¨à± కొరకౠIV అమరà±à°šà±à°Ÿà°²à±‹ విఫలమైంది: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:309
+#: ../libnm-core/crypto_gnutls.c:319 ../libnm-util/crypto_gnutls.c:317
#, c-format
msgid "Failed to encrypt the data: %s / %s."
msgstr "డాటానౠఎనà±à°•à±à°°à°¿à°ªà±à°Ÿà± చేయà±à°Ÿà°²à±‹ విఫలమైంది: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:349
+#: ../libnm-core/crypto_gnutls.c:359 ../libnm-util/crypto_gnutls.c:357
#, c-format
msgid "Error initializing certificate data: %s"
msgstr "దృవీకరణపతà±à°°à°‚ డాటానౠసిదà±à°¦à°ªà°°à°šà±à°Ÿà°²à±‹ దోషమà±: %s"
-#: ../libnm-util/crypto_gnutls.c:371
+#: ../libnm-core/crypto_gnutls.c:381 ../libnm-util/crypto_gnutls.c:379
#, c-format
msgid "Couldn't decode certificate: %s"
msgstr "దృవీకరణపతà±à°°à°®à±à°¨à± డీకోడౠచేయలేక పోయింది: %s"
-#: ../libnm-util/crypto_gnutls.c:395
+#: ../libnm-core/crypto_gnutls.c:406 ../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:408
+#: ../libnm-core/crypto_gnutls.c:419 ../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:420
+#: ../libnm-core/crypto_gnutls.c:431 ../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:448
+#: ../libnm-core/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:471
+#: ../libnm-core/crypto_gnutls.c:483 ../libnm-util/crypto_gnutls.c:479
#, c-format
msgid "Couldn't decode PKCS#8 file: %s"
msgstr "PKCS#8 ఫైలౠడీకోడౠచేయలేక పోయింది: %s"
-#: ../libnm-util/crypto_nss.c:56
+#: ../libnm-core/crypto_nss.c:56 ../libnm-util/crypto_nss.c:56
#, c-format
msgid "Failed to initialize the crypto engine: %d."
msgstr "à°•à±à°°à°¿à°ªà±à°Ÿà±‹ యింజనౠసిదà±à°¦à°®à± చేయà±à°Ÿà°²à±‹ విఫలమైంది: %d."
-#: ../libnm-util/crypto_nss.c:107
+#: ../libnm-core/crypto_nss.c:107 ../libnm-util/crypto_nss.c:107
#, c-format
msgid "Failed to initialize the MD5 context: %d."
msgstr "MD5 కాంటెసà±à°Ÿà±à°¨à± సిదà±à°¦à°®à± చేయà±à°Ÿà°²à±‹ విఫలమైంది: %d."
-#: ../libnm-util/crypto_nss.c:175
+#: ../libnm-core/crypto_nss.c:179 ../libnm-util/crypto_nss.c:178
#, c-format
msgid "Invalid IV length (must be at least %d)."
msgstr "చెలà±à°²à°¨à°¿ IV పొడవౠ(తపà±à°ªà°• కనీసం %d à°µà±à°‚డాలి)."
-#: ../libnm-util/crypto_nss.c:186
+#: ../libnm-core/crypto_nss.c:190 ../libnm-util/crypto_nss.c:189
#, c-format
msgid "Failed to initialize the decryption cipher slot."
msgstr "à°¡à°¿à°•à±à°°à°¿à°ªà±à°·à°¨à± సైఫరౠసà±à°²à°¾à°Ÿà±â€Œà°¨à± సిదà±à°¦à°®à± చేయà±à°Ÿà°²à±‹ విఫలమైంది."
-#: ../libnm-util/crypto_nss.c:196
+#: ../libnm-core/crypto_nss.c:200 ../libnm-util/crypto_nss.c:199
#, c-format
msgid "Failed to set symmetric key for decryption."
msgstr "వివరణ కొరకౠసిమెటà±à°°à°¿à°•à± à°•à±€ అమరà±à°šà±à°Ÿà°²à±‹ విఫలమైంది."
-#: ../libnm-util/crypto_nss.c:206
+#: ../libnm-core/crypto_nss.c:210 ../libnm-util/crypto_nss.c:209
#, c-format
msgid "Failed to set IV for decryption."
msgstr "వివరణ కొరకౠIV అమరà±à°šà±à°Ÿà°²à±‹ విఫలమైంది."
-#: ../libnm-util/crypto_nss.c:214
+#: ../libnm-core/crypto_nss.c:218 ../libnm-util/crypto_nss.c:217
#, c-format
msgid "Failed to initialize the decryption context."
msgstr "వివరణ సందరà±à°­à°®à±à°¨à± సిదà±à°¦à°ªà°°à°šà±à°Ÿà°²à±‹ విఫలమైంది."
-#: ../libnm-util/crypto_nss.c:227
+#: ../libnm-core/crypto_nss.c:231 ../libnm-util/crypto_nss.c:230
#, c-format
msgid "Failed to decrypt the private key: %d."
msgstr "à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ కీనౠడికà±à°°à°¿à°ªà±à°Ÿà± చేయà±à°Ÿà°²à±‹ విఫలమైంది: %d."
-#: ../libnm-util/crypto_nss.c:235
+#: ../libnm-core/crypto_nss.c:239 ../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:246
+#: ../libnm-core/crypto_nss.c:250 ../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:348
+#: ../libnm-core/crypto_nss.c:355 ../libnm-util/crypto_nss.c:353
#, c-format
msgid "Failed to initialize the encryption cipher slot."
msgstr "à°Žà°¨à±à°•à±à°°à°¿à°ªà±à°·à°¨à± సైఫరౠసà±à°²à°¾à°Ÿà±â€Œà°¨à± సిదà±à°¦à°®à±à°šà±‡à°¯à±à°Ÿà°²à±‹ విఫలమైంది."
-#: ../libnm-util/crypto_nss.c:356
+#: ../libnm-core/crypto_nss.c:363 ../libnm-util/crypto_nss.c:361
#, c-format
msgid "Failed to set symmetric key for encryption."
msgstr "à°Žà°¨à±à°•à±à°°à°¿à°ªà±à°·à°¨à± కొరకౠసిమà±à°®à±†à°Ÿà±à°°à°¿à°•à± కీనౠఅమరà±à°šà±à°Ÿà°²à±‹ విఫలమైంది."
-#: ../libnm-util/crypto_nss.c:364
+#: ../libnm-core/crypto_nss.c:371 ../libnm-util/crypto_nss.c:369
#, c-format
msgid "Failed to set IV for encryption."
msgstr "à°Žà°¨à±à°•à±à°°à°¿à°ªà±à°·à°¨à± కొరకౠIV అమరà±à°šà±à°Ÿà°²à±‹ విఫలమైంది."
-#: ../libnm-util/crypto_nss.c:372
+#: ../libnm-core/crypto_nss.c:379 ../libnm-util/crypto_nss.c:377
#, c-format
msgid "Failed to initialize the encryption context."
msgstr "à°Žà°¨à±à°•à±à°°à°¿à°ªà±à°·à°¨à± సందరà±à°­à°®à±à°¨à± సిదà±à°¦à°®à±à°šà±‡à°¯à±à°Ÿà°²à±‹ విఫలమైంది."
-#: ../libnm-util/crypto_nss.c:380
+#: ../libnm-core/crypto_nss.c:387 ../libnm-util/crypto_nss.c:385
#, c-format
msgid "Failed to encrypt: %d."
msgstr "à°Žà°¨à±à°•à±à°°à°¿à°ªà±à°Ÿà± చేయà±à°Ÿà°•à± విఫలమైంది: %d."
-#: ../libnm-util/crypto_nss.c:388
+#: ../libnm-core/crypto_nss.c:395 ../libnm-util/crypto_nss.c:393
#, c-format
msgid "Unexpected amount of data after encrypting."
msgstr "à°Žà°¨à±à°•à±à°°à°¿à°ªà±à°Ÿà± చేసిన తరà±à°µà°¾à°¤ à°…à°¨à±à°•à±‹à°¨à°¿ డాటా మొతà±à°¤à°®à±."
-#: ../libnm-util/crypto_nss.c:431
+#: ../libnm-core/crypto_nss.c:435 ../libnm-util/crypto_nss.c:433
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "దృవీకరణపతà±à°°à°®à±à°¨à± డీకోడౠచేయలేక పోయింది: %d"
-#: ../libnm-util/crypto_nss.c:466
+#: ../libnm-core/crypto_nss.c:471 ../libnm-util/crypto_nss.c:468
#, c-format
msgid "Couldn't convert password to UCS2: %d"
msgstr "సంకేతపదమà±à°¨à± UCS2కౠమారà±à°šà°²à±‡à°• పోయింది: %d"
-#: ../libnm-util/crypto_nss.c:494
+#: ../libnm-core/crypto_nss.c:499 ../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:503
+#: ../libnm-core/crypto_nss.c:508 ../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:512
+#: ../libnm-core/crypto_nss.c:517 ../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:556
+#: ../libnm-core/crypto_nss.c:562 ../libnm-util/crypto_nss.c:558
msgid "Could not generate random data."
msgstr "యాదృశà±à°šà°¿à°• డాటానౠజనియింపచేయలేక పోయింది."
-#: ../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
+#: ../libnm-core/nm-connection.c:892
+#| msgid "Unable to delete connection: %s"
+msgid "Unexpected failure to verify the connection"
+msgstr "à°…à°¨à±à°¸à°‚ధానం నిరà±à°§à°¾à°°à°¿à°‚à°šà±à°Ÿà°•à± à°…à°¨à±à°•à±‹à°¨à°¿ వైఫలà±à°¯à°‚"
+
+#: ../libnm-core/nm-connection.c:923
+#| msgid "Unable to delete connection: %s"
+msgid "Unexpected failure to normalize the connection"
+msgstr "à°…à°¨à±à°¸à°‚ధానం నారà±à°®à°²à±ˆà°œà± చేయà±à°Ÿà°•à± à°…à°¨à±à°•à±‹à°¨à°¿ వైఫలà±à°¯à°‚"
+
+#: ../libnm-core/nm-connection.c:1016
+msgid ""
+"Update secrets expects a full connection, instead only a setting is provided."
+msgstr ""
+"సీకà±à°°à±†à°Ÿà±à°¸à± నవీకరణకౠపూరà±à°¤à°¿ à°…à°¨à±à°¸à°‚ధానం కావాలి, కాని à°’à°• అమరిక మాతà±à°°à°®à±‡ ఇవà±à°µà°¬à°¡à°¿à°‚ది."
+
+#: ../libnm-core/nm-setting-8021x.c:593 ../libnm-util/nm-setting-8021x.c:596
+msgid "CA certificate must be in X.509 format"
+msgstr "CA ధృవీకరణపతà±à°°à°‚ తపà±à°ªà°• X.509 ఫారà±à°®à°¾à°Ÿà± à°—à°¾ ఉండాలి"
+
+#: ../libnm-core/nm-setting-8021x.c:908 ../libnm-core/nm-setting-8021x.c:1172
+#: ../libnm-core/nm-setting-8021x.c:1492 ../libnm-util/nm-setting-8021x.c:914
+#: ../libnm-util/nm-setting-8021x.c:1177 ../libnm-util/nm-setting-8021x.c:1500
+#| msgid "Error initializing certificate data: %s"
+msgid "invalid certificate format"
+msgstr "చెలà±à°²à°¨à°¿ ధృవీకరణపతà±à°°à°‚ ఫారà±à°®à°¾à°Ÿà±"
+
+#: ../libnm-core/nm-setting-8021x.c:1774 ../libnm-util/nm-setting-8021x.c:1769
+#| msgid "invalid gateway '%s'"
+msgid "invalid private key"
+msgstr "చెలà±à°²à°¨à°¿ à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ à°•à±€"
+
+#: ../libnm-core/nm-setting-8021x.c:2084 ../libnm-util/nm-setting-8021x.c:2080
+#| msgid "Failed to decrypt the private key."
+msgid "invalid phase2 private key"
+msgstr "చెలà±à°²à°¨à°¿ ఫేజà±2 à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ à°•à±€"
+
+#: ../libnm-core/nm-setting-8021x.c:2286 ../libnm-core/nm-setting-8021x.c:2303
+#: ../libnm-core/nm-setting-8021x.c:2333 ../libnm-core/nm-setting-8021x.c:2350
+#: ../libnm-core/nm-setting-8021x.c:2391 ../libnm-core/nm-setting-8021x.c:2403
+#: ../libnm-core/nm-setting-8021x.c:2421 ../libnm-core/nm-setting-8021x.c:2433
+#: ../libnm-core/nm-setting-8021x.c:2457 ../libnm-core/nm-setting-8021x.c:2639
+#: ../libnm-core/nm-setting-adsl.c:204
+#: ../libnm-core/nm-setting-bluetooth.c:136
+#: ../libnm-core/nm-setting-bluetooth.c:154
+#: ../libnm-core/nm-setting-cdma.c:157
+#: ../libnm-core/nm-setting-connection.c:761
+#: ../libnm-core/nm-setting-connection.c:777
+#: ../libnm-core/nm-setting-connection.c:807
+#: ../libnm-core/nm-setting-ip4-config.c:897
+#: ../libnm-core/nm-setting-ip6-config.c:815
+#: ../libnm-core/nm-setting-ip6-config.c:879
+#: ../libnm-core/nm-setting-olpc-mesh.c:116
+#: ../libnm-core/nm-setting-pppoe.c:158 ../libnm-core/nm-setting-vpn.c:396
+#: ../libnm-core/nm-setting-wimax.c:133
+#: ../libnm-core/nm-setting-wireless-security.c:878
+#: ../libnm-core/nm-setting-wireless.c:710 ../libnm-core/nm-setting.c:1731
+#: ../libnm-util/nm-setting.c:1279 ../libnm-util/nm-setting.c:1298
+#: ../libnm-util/nm-setting.c:1316 ../libnm-util/nm-setting-8021x.c:2282
+#: ../libnm-util/nm-setting-8021x.c:2299 ../libnm-util/nm-setting-8021x.c:2340
+#: ../libnm-util/nm-setting-8021x.c:2357 ../libnm-util/nm-setting-8021x.c:2409
+#: ../libnm-util/nm-setting-8021x.c:2421 ../libnm-util/nm-setting-8021x.c:2439
+#: ../libnm-util/nm-setting-8021x.c:2451 ../libnm-util/nm-setting-8021x.c:2475
+#: ../libnm-util/nm-setting-8021x.c:2653 ../libnm-util/nm-setting-adsl.c:208
+#: ../libnm-util/nm-setting-bluetooth.c:140
+#: ../libnm-util/nm-setting-bluetooth.c:158
+#: ../libnm-util/nm-setting-cdma.c:161
+#: ../libnm-util/nm-setting-connection.c:767
+#: ../libnm-util/nm-setting-connection.c:783
+#: ../libnm-util/nm-setting-connection.c:844
+#: ../libnm-util/nm-setting-ip4-config.c:828
+#: ../libnm-util/nm-setting-ip6-config.c:809
+#: ../libnm-util/nm-setting-ip6-config.c:873
+#: ../libnm-util/nm-setting-olpc-mesh.c:122
+#: ../libnm-util/nm-setting-pppoe.c:162 ../libnm-util/nm-setting-vpn.c:402
+#: ../libnm-util/nm-setting-wimax.c:137
+#: ../libnm-util/nm-setting-wireless-security.c:891
+#: ../libnm-util/nm-setting-wireless.c:750
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-core/nm-setting-8021x.c:2293 ../libnm-core/nm-setting-8021x.c:2310
+#: ../libnm-core/nm-setting-8021x.c:2340 ../libnm-core/nm-setting-8021x.c:2357
+#: ../libnm-core/nm-setting-8021x.c:2397 ../libnm-core/nm-setting-8021x.c:2409
+#: ../libnm-core/nm-setting-8021x.c:2427 ../libnm-core/nm-setting-8021x.c:2439
+#: ../libnm-core/nm-setting-8021x.c:2464 ../libnm-core/nm-setting-adsl.c:211
+#: ../libnm-core/nm-setting-adsl.c:220 ../libnm-core/nm-setting-cdma.c:173
+#: ../libnm-core/nm-setting-cdma.c:182
+#: ../libnm-core/nm-setting-connection.c:768
+#: ../libnm-core/nm-setting-connection.c:818
+#: ../libnm-core/nm-setting-gsm.c:241 ../libnm-core/nm-setting-gsm.c:298
+#: ../libnm-core/nm-setting-gsm.c:307
+#: ../libnm-core/nm-setting-ip4-config.c:962
+#: ../libnm-core/nm-setting-ip4-config.c:971
+#: ../libnm-core/nm-setting-pppoe.c:165 ../libnm-core/nm-setting-pppoe.c:174
+#: ../libnm-core/nm-setting-vpn.c:405 ../libnm-core/nm-setting-vpn.c:415
+#: ../libnm-core/nm-setting-wimax.c:142
+#: ../libnm-core/nm-setting-wireless-security.c:908
+#: ../libnm-core/nm-setting-wireless-security.c:916
+#: ../libnm-core/nm-setting-wireless-security.c:940
+#: ../libnm-util/nm-setting-8021x.c:2289 ../libnm-util/nm-setting-8021x.c:2306
+#: ../libnm-util/nm-setting-8021x.c:2347 ../libnm-util/nm-setting-8021x.c:2364
+#: ../libnm-util/nm-setting-8021x.c:2415 ../libnm-util/nm-setting-8021x.c:2427
+#: ../libnm-util/nm-setting-8021x.c:2445 ../libnm-util/nm-setting-8021x.c:2457
+#: ../libnm-util/nm-setting-8021x.c:2482 ../libnm-util/nm-setting-adsl.c:215
+#: ../libnm-util/nm-setting-adsl.c:224 ../libnm-util/nm-setting-cdma.c:177
+#: ../libnm-util/nm-setting-cdma.c:186
+#: ../libnm-util/nm-setting-connection.c:774
+#: ../libnm-util/nm-setting-connection.c:851
+#: ../libnm-util/nm-setting-gsm.c:281 ../libnm-util/nm-setting-gsm.c:338
+#: ../libnm-util/nm-setting-gsm.c:347
+#: ../libnm-util/nm-setting-ip4-config.c:893
+#: ../libnm-util/nm-setting-ip4-config.c:902
+#: ../libnm-util/nm-setting-pppoe.c:169 ../libnm-util/nm-setting-pppoe.c:178
+#: ../libnm-util/nm-setting-vpn.c:411 ../libnm-util/nm-setting-vpn.c:421
#: ../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
+#: ../libnm-util/nm-setting-wireless-security.c:921
+#: ../libnm-util/nm-setting-wireless-security.c:929
+#: ../libnm-util/nm-setting-wireless-security.c:953
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
+#: ../libnm-core/nm-setting-8021x.c:2322 ../libnm-core/nm-setting-8021x.c:2369
+#: ../libnm-util/nm-setting-8021x.c:2317 ../libnm-util/nm-setting-8021x.c:2329
+#: ../libnm-util/nm-setting-8021x.c:2375 ../libnm-util/nm-setting-8021x.c:2387
#, 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-core/nm-setting-8021x.c:2614 ../libnm-core/nm-setting-8021x.c:2648
+#: ../libnm-core/nm-setting-bluetooth.c:145
+#: ../libnm-core/nm-setting-infiniband.c:208
+#: ../libnm-core/nm-setting-infiniband.c:223
+#: ../libnm-core/nm-setting-ip4-config.c:953
+#: ../libnm-core/nm-setting-ip6-config.c:870
+#: ../libnm-core/nm-setting-olpc-mesh.c:145
+#: ../libnm-core/nm-setting-wimax.c:151 ../libnm-core/nm-setting-wired.c:636
+#: ../libnm-core/nm-setting-wired.c:646
+#: ../libnm-core/nm-setting-wireless-security.c:959
+#: ../libnm-core/nm-setting-wireless-security.c:968
+#: ../libnm-core/nm-setting-wireless-security.c:976
+#: ../libnm-core/nm-setting-wireless-security.c:984
+#: ../libnm-core/nm-setting-wireless-security.c:992
+#: ../libnm-core/nm-setting-wireless-security.c:1001
+#: ../libnm-core/nm-setting-wireless-security.c:1010
+#: ../libnm-core/nm-setting-wireless-security.c:1019
+#: ../libnm-core/nm-setting-wireless-security.c:1055
+#: ../libnm-core/nm-setting-wireless-security.c:1065
+#: ../libnm-core/nm-setting-wireless.c:771
+#: ../libnm-core/nm-setting-wireless.c:780
+#: ../libnm-core/nm-setting-wireless.c:789 ../libnm-util/nm-setting.c:1289
+#: ../libnm-util/nm-setting.c:1307 ../libnm-util/nm-setting.c:1326
+#: ../libnm-util/nm-setting-8021x.c:2628 ../libnm-util/nm-setting-8021x.c:2662
+#: ../libnm-util/nm-setting-bluetooth.c:149
+#: ../libnm-util/nm-setting-infiniband.c:204
+#: ../libnm-util/nm-setting-infiniband.c:220
+#: ../libnm-util/nm-setting-ip4-config.c:884
+#: ../libnm-util/nm-setting-ip6-config.c:864
+#: ../libnm-util/nm-setting-olpc-mesh.c:150
+#: ../libnm-util/nm-setting-wimax.c:155 ../libnm-util/nm-setting-wired.c:660
+#: ../libnm-util/nm-setting-wired.c:669
#: ../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
+#: ../libnm-util/nm-setting-wireless-security.c:981
+#: ../libnm-util/nm-setting-wireless-security.c:989
+#: ../libnm-util/nm-setting-wireless-security.c:997
+#: ../libnm-util/nm-setting-wireless-security.c:1005
+#: ../libnm-util/nm-setting-wireless-security.c:1014
+#: ../libnm-util/nm-setting-wireless-security.c:1023
+#: ../libnm-util/nm-setting-wireless-security.c:1032
+#: ../libnm-util/nm-setting-wireless-security.c:1068
+#: ../libnm-util/nm-setting-wireless-security.c:1078
+#: ../libnm-util/nm-setting-wireless.c:810
+#: ../libnm-util/nm-setting-wireless.c:819
+#: ../libnm-util/nm-setting-wireless.c:828
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
+#: ../libnm-core/nm-setting-8021x.c:2673 ../libnm-core/nm-setting-8021x.c:2683
+#: ../libnm-core/nm-setting-8021x.c:2693 ../libnm-core/nm-setting-8021x.c:2703
+#: ../libnm-core/nm-setting-8021x.c:2713 ../libnm-core/nm-setting-adsl.c:232
+#: ../libnm-core/nm-setting-adsl.c:244
+#: ../libnm-core/nm-setting-bluetooth.c:162
+#: ../libnm-core/nm-setting-wireless-security.c:887
+#: ../libnm-util/nm-setting-8021x.c:2687 ../libnm-util/nm-setting-8021x.c:2697
+#: ../libnm-util/nm-setting-8021x.c:2707 ../libnm-util/nm-setting-8021x.c:2717
+#: ../libnm-util/nm-setting-8021x.c:2727 ../libnm-util/nm-setting-adsl.c:236
+#: ../libnm-util/nm-setting-adsl.c:248
+#: ../libnm-util/nm-setting-bluetooth.c:166
+#: ../libnm-util/nm-setting-wireless-security.c:900
#, c-format
msgid "'%s' is not a valid value for the property"
msgstr "లకà±à°·à°£à°‚ కొరకౠ'%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ విలà±à°µ కాదà±"
-#: ../libnm-util/nm-setting-bluetooth.c:188
+#: ../libnm-core/nm-setting-bluetooth.c:180
+#: ../libnm-util/nm-setting-bluetooth.c:184
#, c-format
msgid "requires '%s' or '%s' setting"
msgstr "'%s' లేదా '%s' అమరిక కావాలి"
-#: ../libnm-util/nm-setting-bond.c:518
+#: ../libnm-core/nm-setting-bond.c:473 ../libnm-util/nm-setting-bond.c:498
#, c-format
msgid "invalid option '%s' or its value '%s'"
msgstr "చెలà±à°²à°¨à°¿ à°à°šà±à°šà°¿à°•à°‚ '%s' లేదా దాని విలà±à°µ '%s'"
-#: ../libnm-util/nm-setting-bond.c:537
+#: ../libnm-core/nm-setting-bond.c:492 ../libnm-util/nm-setting-bond.c:517
#, c-format
msgid "only one of '%s' and '%s' can be set"
msgstr "'%s' మరియౠ'%s' లో వొకటే అమరà±à°šà°—లదà±"
-#: ../libnm-util/nm-setting-bond.c:548
+#: ../libnm-core/nm-setting-bond.c:503 ../libnm-util/nm-setting-bond.c:528
#, c-format
msgid "mandatory option '%s' is missing"
msgstr "తపà±à°ªà°¨à°¿à°¸à°°à°¿ à°à°šà±à°šà°¿à°•à°‚ '%s' దొరకలేదà±"
-#: ../libnm-util/nm-setting-bond.c:557
+#: ../libnm-core/nm-setting-bond.c:512 ../libnm-util/nm-setting-bond.c:537
#, c-format
msgid "'%s' is not a valid value for '%s'"
msgstr "'%s' à°…à°¨à±à°¨à°¦à°¿ '%s' కొరకౠచెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ విలà±à°µ కాదà±"
-#: ../libnm-util/nm-setting-bond.c:570
+#: ../libnm-core/nm-setting-bond.c:525 ../libnm-util/nm-setting-bond.c:550
#, c-format
msgid "'%s=%s' is incompatible with '%s > 0'"
msgstr "'%s=%s' à°…à°¨à±à°¨à°¦à°¿ '%s > 0' తో సారూపà±à°¯à°¤à°•à°¾à°¨à°¿à°¦à°¿"
-#: ../libnm-util/nm-setting-bond.c:583
+#: ../libnm-core/nm-setting-bond.c:538 ../libnm-util/nm-setting-bond.c:563
#, c-format
msgid "'%s' is not a valid interface name for '%s' option"
msgstr "'%s' à°…à°¨à±à°¨à°¦à°¿ '%s' à°à°šà±à°šà°¿à°•à°‚ కొరకౠచెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ ఇంటరà±à°«à±‡à°¸à± పేరౠకాదà±"
-#: ../libnm-util/nm-setting-bond.c:593
+#: ../libnm-core/nm-setting-bond.c:548 ../libnm-util/nm-setting-bond.c:573
#, c-format
msgid "'%s' option is only valid for '%s=%s'"
msgstr "'%s' à°à°šà±à°šà°¿à°•à°‚ à°…à°¨à±à°¨à°¦à°¿ '%s=%s' కొరకౠమాతà±à°°à°®à±‡ చెలà±à°²à±à°¨à°¦à°¿"
-#: ../libnm-util/nm-setting-bond.c:606
+#: ../libnm-core/nm-setting-bond.c:561 ../libnm-util/nm-setting-bond.c:586
#, 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
+#: ../libnm-core/nm-setting-bond.c:574 ../libnm-core/nm-setting-bond.c:583
+#: ../libnm-core/nm-setting-bond.c:603 ../libnm-core/nm-setting-bond.c:639
+#: ../libnm-util/nm-setting-bond.c:599 ../libnm-util/nm-setting-bond.c:608
+#: ../libnm-util/nm-setting-bond.c:628 ../libnm-util/nm-setting-bond.c:664
#, c-format
msgid "'%s' option requires '%s' option to be set"
msgstr "'%s' à°à°šà±à°šà°¿à°•à°‚à°•à± '%s' à°à°šà±à°šà°¿à°•à°‚ అమరà±à°šà°µà°²à°¸à°¿à°µà±à°‚à°Ÿà±à°‚ది"
-#: ../libnm-util/nm-setting-bond.c:659
+#: ../libnm-core/nm-setting-bond.c:614 ../libnm-util/nm-setting-bond.c:639
#, c-format
msgid "'%s' option is empty"
msgstr "'%s' à°à°šà±à°šà°¿à°•à°‚ ఖాళీ"
-#: ../libnm-util/nm-setting-bond.c:671
+#: ../libnm-core/nm-setting-bond.c:626 ../libnm-util/nm-setting-bond.c:651
#, 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
+#: ../libnm-core/nm-setting-bridge-port.c:138
+#: ../libnm-core/nm-setting-bridge-port.c:150
+#: ../libnm-util/nm-setting-bridge-port.c:153
+#: ../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
+#: ../libnm-core/nm-setting-bridge-port.c:175
+#: ../libnm-core/nm-setting-team-port.c:118
+#, c-format
+msgid ""
+"A connection with a '%s' setting must have the slave-type set to '%s'. "
+"Instead it is '%s'"
+msgstr ""
+"à°…à°¨à±à°¸à°‚ధానం '%s' అమరిక తపà±à°ªà°•à±à°‚à°¡à°¾ à°¸à±à°²à±‡à°µà±-à°°à°•à°‚ '%s'కౠఅమరà±à°šà°¿ ఉండాలి. బదà±à°²à±à°—à°¾ అది '%"
+"s' గా ఉంది"
+
+#: ../libnm-core/nm-setting-bridge.c:222 ../libnm-util/nm-setting-bridge.c:268
#, c-format
msgid "value '%d' is out of range <%d-%d>"
msgstr "విలà±à°µ '%d' విసà±à°¤à±ƒà°¤à°¿ <%d-%d> బయట à°µà±à°‚ది"
-#: ../libnm-util/nm-setting-cdma.c:170
+#: ../libnm-core/nm-setting-bridge.c:239 ../libnm-core/nm-setting-wired.c:611
+#: ../libnm-core/nm-setting-wired.c:670 ../libnm-util/nm-setting-bridge.c:285
+#: ../libnm-util/nm-setting-wired.c:635 ../libnm-util/nm-setting-wired.c:693
+msgid "is not a valid MAC address"
+msgstr "చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ MAC à°šà°¿à°°à±à°¨à°¾à°®à°¾ కాదà±"
+
+#: ../libnm-core/nm-setting-cdma.c:164 ../libnm-util/nm-setting-cdma.c:168
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
+#: ../libnm-core/nm-setting-connection.c:740
+#: ../libnm-util/nm-setting-connection.c:861
#, 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-core/nm-setting-connection.c:828
+#, c-format
+#| msgid "index '%s' is not valid"
+msgid "connection type '%s' is not valid"
+msgstr "à°…à°¨à±à°¸à°‚ధానం à°°à°•à°‚ '%s' చెలà±à°²à°¨à°¿à°¦à°¿"
-#: ../libnm-util/nm-setting-connection.c:815
-msgid "IPv6 configuration is not allowed for slave"
-msgstr "IPv6 ఆకృతీకరణ à°¸à±à°²à±‡à°µà± కొరకౠఅనà±à°®à°¤à°¿à°‚చబడదà±"
+#: ../libnm-core/nm-setting-connection.c:838
+#, c-format
+#| msgid "Error: 'bt-type': '%s' is not a valid bluetooth type.\n"
+msgid "connection type '%s' is not a valid base type"
+msgstr "à°…à°¨à±à°¸à°‚ధానం à°°à°•à°‚ '%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ బేసౠరకం కాదà±"
+
+#: ../libnm-core/nm-setting-connection.c:873
+#: ../libnm-util/nm-setting-connection.c:876
+#, c-format
+#| msgid "Unknown log level '%s'"
+msgid "Unknown slave type '%s'"
+msgstr "తెలియని à°¸à±à°²à±‡à°µà± à°°à°•à°‚ '%s'"
+
+#: ../libnm-core/nm-setting-connection.c:883
+#: ../libnm-util/nm-setting-connection.c:886
+#| msgid "Shared connection service failed"
+msgid "Slave connections need a valid '"
+msgstr "à°¸à±à°²à±‡à°µà± à°…à°¨à±à°¸à°‚ధానాలకౠచెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ ' కావాలి"
+
+#: ../libnm-core/nm-setting-connection.c:904
+#: ../libnm-util/nm-setting-connection.c:895
+#| msgid "not saved, "
+msgid "Cannot set '"
+msgstr "అమరà±à°šà°²à±‡à°¦à± '"
+
+#: ../libnm-core/nm-setting-connection.c:917
+#, c-format
+msgid "property type should be set to '%s'"
+msgstr "లకà±à°·à°£à°‚ à°°à°•à°‚ '%s' కౠఅమరà±à°šà°¾à°²à°¿"
-#: ../libnm-util/nm-setting-dcb.c:595
+#: ../libnm-core/nm-setting-connection.c:932
+#, c-format
+#| msgid "requires presence of '%s' setting in the connection"
+msgid "slave-type '%s' requires a '%s' setting in the connection"
+msgstr "à°¸à±à°²à±‡à°µà±-à°°à°•à°‚ '%s' à°•à± '%s' అమరిక à°…à°¨à±à°¸à°‚ధానం నందౠకావాలి"
+
+#: ../libnm-core/nm-setting-connection.c:942
+#, c-format
+#| msgid "Select the type of slave connection you wish to add."
+msgid "Detect a slave connection with '"
+msgstr "à°¸à±à°²à±‡à°µà± à°…à°¨à±à°¸à°‚ధానం దీనితో à°—à±à°°à±à°¤à°¿à°‚à°šà± '"
+
+#: ../libnm-core/nm-setting-dcb.c:538 ../libnm-util/nm-setting-dcb.c:593
msgid "flags invalid"
msgstr "à°«à±à°²à°¾à°—à±à°¸à± చెలà±à°²à°¨à°¿à°µà°¿"
-#: ../libnm-util/nm-setting-dcb.c:604
+#: ../libnm-core/nm-setting-dcb.c:547 ../libnm-util/nm-setting-dcb.c:602
msgid "flags invalid - disabled"
msgstr "à°«à±à°²à°¾à°—à±à°¸à± చెలà±à°²à°¨à°¿à°µà°¿ - అచేతనమైనà±"
-#: ../libnm-util/nm-setting-dcb.c:630 ../libnm-util/nm-setting-dcb.c:679
+#: ../libnm-core/nm-setting-dcb.c:573 ../libnm-core/nm-setting-dcb.c:622
+#: ../libnm-util/nm-setting-dcb.c:628 ../libnm-util/nm-setting-dcb.c:677
msgid "property invalid (not enabled)"
msgstr "లకà±à°·à°£à°‚ చెలà±à°²à°¨à°¿à°¦à°¿ (చేతనం కాలేదà±)"
-#: ../libnm-util/nm-setting-dcb.c:639
+#: ../libnm-core/nm-setting-dcb.c:582 ../libnm-util/nm-setting-dcb.c:637
msgid "element invalid"
msgstr "మూలకం చెలà±à°²à°¨à°¿à°¦à°¿"
-#: ../libnm-util/nm-setting-dcb.c:654
+#: ../libnm-core/nm-setting-dcb.c:597 ../libnm-util/nm-setting-dcb.c:652
msgid "sum not 100%"
msgstr "sum 100% కాదà±"
-#: ../libnm-util/nm-setting-dcb.c:688 ../libnm-util/nm-setting-dcb.c:720
+#: ../libnm-core/nm-setting-dcb.c:631 ../libnm-core/nm-setting-dcb.c:663
+#: ../libnm-util/nm-setting-dcb.c:686 ../libnm-util/nm-setting-dcb.c:718
msgid "property invalid"
msgstr "లకà±à°·à°£à°‚ చెలà±à°²à°¨à°¿à°¦à°¿"
-#: ../libnm-util/nm-setting-dcb.c:710
+#: ../libnm-core/nm-setting-dcb.c:653 ../libnm-util/nm-setting-dcb.c:708
msgid "property missing"
msgstr "లకà±à°·à°£à°‚ దొరకలేదà±"
-#: ../libnm-util/nm-setting-gsm.c:297
+#: ../libnm-core/nm-setting-gsm.c:254 ../libnm-util/nm-setting-gsm.c:294
#, c-format
msgid "property value '%s' is empty or too long (>64)"
msgstr "లకà±à°·à°£à°‚ విలà±à°µ '%s' ఖాళీ లేదా మరీ పొడవౠ(>64)"
-#: ../libnm-util/nm-setting-gsm.c:329
+#: ../libnm-core/nm-setting-gsm.c:286 ../libnm-util/nm-setting-gsm.c:326
#, c-format
msgid "'%s' contains invalid char(s) (use [A-Za-z._-])"
msgstr "'%s' చెలà±à°²à°¨à°¿ à°…à°•à±à°·à°°à°®à±(à°²à±) కలిగివà±à°¨à±à°¨à°¾à°¯à°¿ (à°µà±à°ªà°¯à±‹à°—à°¿à°‚à°šà± [A-Za-z._-])"
-#: ../libnm-util/nm-setting-gsm.c:364
+#: ../libnm-core/nm-setting-gsm.c:321 ../libnm-util/nm-setting-gsm.c:361
#, c-format
msgid "'%s' length is invalid (should be 5 or 6 digits)"
msgstr "'%s' పొడవౠచెలà±à°²à°¨à°¿à°¦à°¿ (5 లేదా 6 అంకెలౠవà±à°‚డాలి)"
-#: ../libnm-util/nm-setting-infiniband.c:228
+#: ../libnm-core/nm-setting-infiniband.c:233
+#: ../libnm-util/nm-setting-infiniband.c:230
msgid "not a valid interface name"
msgstr "చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ ఇంటరà±à°«à±‡à°¸à± పేరౠకాదà±"
-#: ../libnm-util/nm-setting-infiniband.c:236
+#: ../libnm-core/nm-setting-infiniband.c:241
+#: ../libnm-util/nm-setting-infiniband.c:238
msgid "Must specify a P_Key if specifying parent"
msgstr "మాతà±à°°à±à°• తెలà±à°ªà±à°¤à±à°‚టే తపà±à°ªà°•à±à°‚à°¡à°¾ P_Key తెలà±à°ªà°¾à°²à°¿"
-#: ../libnm-util/nm-setting-infiniband.c:246
+#: ../libnm-core/nm-setting-infiniband.c:251
+#: ../libnm-util/nm-setting-infiniband.c:248
msgid "InfiniBand P_Key connection did not specify parent interface name"
msgstr "ఇనà±à°«à°¿à°¬à°¾à°‚à°¡à± 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
+#: ../libnm-core/nm-setting-infiniband.c:287
+#: ../libnm-util/nm-setting-infiniband.c:284
+#, c-format
+msgid ""
+"interface name of software infiniband device must be '%s' or unset (instead "
+"it is '%s')"
+msgstr ""
+"సాఫà±à°Ÿà±â€Œà°µà±‡à°°à± ఇనà±à°«à°¿à°¬à°¾à°‚డౠపరికరం యొకà±à°• ఇంటరà±à°«à±‡à°¸à± పేరౠతపà±à°ªà°• '%s' లేదా అమరà±à°šà°•à±à°‚à°¡à°¾ "
+"ఉండాలి (అది '%s' గా ఉంది)"
+
+#: ../libnm-core/nm-setting-infiniband.c:302
+#, c-format
+msgid "mtu for transport mode '%s' can be at most %d but it is %d"
+msgstr ""
+"à°Ÿà±à°°à°¾à°¨à±à°¸à±à°ªà±‹à°°à±à°Ÿà± రీతి '%s' కొరకౠmtu à°—à°°à°¿à°·à±à°Ÿà°‚à°—à°¾ %d కాగలదౠఅయితే అది %d à°—à°¾ ఉంది"
+
+#: ../libnm-core/nm-setting-ip4-config.c:907
+#: ../libnm-core/nm-setting-ip6-config.c:825
+#: ../libnm-util/nm-setting-ip4-config.c:838
+#: ../libnm-util/nm-setting-ip6-config.c:819
+#, c-format
+#| msgid "this property is not allowed for '%s=%s'"
+msgid "this property cannot be empty for '%s=%s'"
+msgstr "'%s=%s' కొరకౠయీ లకà±à°·à°£à°‚ ఖాళీగా ఉండలేదà±"
+
+#: ../libnm-core/nm-setting-ip4-config.c:919
+#: ../libnm-core/nm-setting-ip4-config.c:929
+#: ../libnm-core/nm-setting-ip4-config.c:941
+#: ../libnm-core/nm-setting-ip6-config.c:838
+#: ../libnm-core/nm-setting-ip6-config.c:848
+#: ../libnm-core/nm-setting-ip6-config.c:858
+#: ../libnm-util/nm-setting-ip4-config.c:850
+#: ../libnm-util/nm-setting-ip4-config.c:860
+#: ../libnm-util/nm-setting-ip4-config.c:872
+#: ../libnm-util/nm-setting-ip6-config.c:832
+#: ../libnm-util/nm-setting-ip6-config.c:842
+#: ../libnm-util/nm-setting-ip6-config.c:852
#, c-format
msgid "this property is not allowed for '%s=%s'"
msgstr "'%s=%s' కొరకౠయీ లకà±à°·à°£à°‚ à°…à°¨à±à°®à°¤à°¿à°‚చబడదà±"
-#: ../libnm-util/nm-setting-ip4-config.c:789
+#: ../libnm-core/nm-setting-ip4-config.c:988
+#: ../libnm-util/nm-setting-ip4-config.c:916
#, c-format
msgid "%d. IPv4 address is invalid"
msgstr "%d. IPv4 à°šà°¿à°°à±à°¨à°¾à°®à°¾ చెలà±à°²à°¨à°¿à°¦à°¿"
-#: ../libnm-util/nm-setting-ip4-config.c:799
+#: ../libnm-core/nm-setting-ip4-config.c:998
+#: ../libnm-util/nm-setting-ip4-config.c:926
#, c-format
msgid "%d. IPv4 address has invalid prefix"
msgstr "%d. IPv4 à°šà°¿à°°à±à°¨à°¾à°®à°¾ చెలà±à°²à°¨à°¿ à°ªà±à°°à°¿à°«à°¿à°•à±à°¸à± కలిగివà±à°‚ది"
-#: ../libnm-util/nm-setting-ip4-config.c:815
+#: ../libnm-core/nm-setting-ip4-config.c:1008
+#, c-format
+#| msgid "%d. IPv4 address has invalid prefix"
+msgid "%d. IPv4 address has invalid label '%s'"
+msgstr "%d. IPv4 à°šà°¿à°°à±à°¨à°¾à°®à°¾ చెలà±à°²à°¨à°¿ లేబà±à°²à± '%s' కలిగివà±à°‚ది"
+
+#: ../libnm-core/nm-setting-ip4-config.c:1019
+#, c-format
+msgid "IPv4 address / label count mismatch (%d vs %d)"
+msgstr "IPv4 à°šà°¿à°°à±à°¨à°¾à°®à°¾ / లేబà±à°²à± కౌంటౠసరిపోలడం లేదౠ(%d vs %d)"
+
+#: ../libnm-core/nm-setting-ip4-config.c:1035
+#: ../libnm-util/nm-setting-ip4-config.c:942
#, c-format
msgid "%d. route is invalid"
msgstr "%d. రౌటౠచెలà±à°²à°¨à°¿à°¦à°¿"
-#: ../libnm-util/nm-setting-ip4-config.c:825
+#: ../libnm-core/nm-setting-ip4-config.c:1045
+#: ../libnm-util/nm-setting-ip4-config.c:952
#, c-format
msgid "%d. route has invalid prefix"
msgstr "%d. చెలà±à°²à°¨à°¿ à°ªà±à°°à°¿à°«à°¿à°•à±à°¸à± కలిగివà±à°‚ది"
-#: ../libnm-util/nm-setting-ip6-config.c:708
+#: ../libnm-core/nm-setting-ip4-config.c:1061
+#: ../libnm-core/nm-setting-ip6-config.c:892
+#, c-format
+#| msgid "%d. IPv4 address is invalid"
+msgid "%d. DNS server address is invalid"
+msgstr "%d. DNS సేవిక à°šà°¿à°°à±à°¨à°¾à°®à°¾ చెలà±à°²à°¨à°¿à°¦à°¿"
+
+#: ../libnm-core/nm-setting-ip6-config.c:837
+#: ../libnm-util/nm-setting-ip6-config.c:831
#, 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
+#: ../libnm-core/nm-setting-olpc-mesh.c:126
+#: ../libnm-core/nm-setting-wireless.c:720
+#: ../libnm-util/nm-setting-olpc-mesh.c:131
+#: ../libnm-util/nm-setting-wireless.c:759
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
+#: ../libnm-core/nm-setting-olpc-mesh.c:135
+#: ../libnm-core/nm-setting-wireless.c:760
+#: ../libnm-util/nm-setting-olpc-mesh.c:140
+#: ../libnm-util/nm-setting-wireless.c:799
#, c-format
msgid "'%d' is not a valid channel"
msgstr "'%d' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ చానలౠకాదà±"
-#: ../libnm-util/nm-setting-ppp.c:390
+#: ../libnm-core/nm-setting-ppp.c:383 ../libnm-util/nm-setting-ppp.c:387
#, c-format
msgid "'%d' is out of valid range <128-16384>"
msgstr "'%d' à°…à°¨à±à°¨à°¦à°¿ చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ విసà±à°¤à±ƒà°¤à°¿ <128-16384> బయట à°µà±à°‚ది"
-#: ../libnm-util/nm-setting-ppp.c:403
+#: ../libnm-core/nm-setting-ppp.c:396 ../libnm-util/nm-setting-ppp.c:400
#, c-format
msgid "setting this property requires non-zero '%s' property"
msgstr "à°ˆ లకà±à°·à°£à°‚ అమరà±à°šà±à°Ÿà°•à± à°¸à±à°¨à±à°¨à°¾-కాని '%s' లకà±à°·à°£à°‚ అవసరం"
-#: ../libnm-util/nm-setting-vlan.c:497
+#: ../libnm-core/nm-setting-vlan.c:528 ../libnm-util/nm-setting-vlan.c:554
#, c-format
msgid "'%s' value doesn't match '%s=%s'"
msgstr "'%s' విలà±à°µ '%s=%s' తో సరిపోలడం లేదà±"
-#: ../libnm-util/nm-setting-vlan.c:508
+#: ../libnm-core/nm-setting-vlan.c:539 ../libnm-util/nm-setting-vlan.c:565
#, c-format
msgid "'%s' is neither an UUID nor an interface name"
msgstr "'%s' à°…à°¨à±à°¨à°¦à°¿ UUID కాదౠయింటరà±à°«à±‡à°¸à± పేరౠకాదà±"
-#: ../libnm-util/nm-setting-vlan.c:521
+#: ../libnm-core/nm-setting-vlan.c:553 ../libnm-util/nm-setting-vlan.c:578
#, c-format
msgid "property is not specified and neither is '%s:%s'"
msgstr "లకà±à°·à°£à°‚ తెలà±à°ªà°²à±‡à°¦à± మరియౠ'%s కాదà±:%s'"
-#: ../libnm-util/nm-setting-vlan.c:534
+#: ../libnm-core/nm-setting-vlan.c:566 ../libnm-util/nm-setting-vlan.c:591
msgid "flags are invalid"
msgstr "à°«à±à°²à°¾à°—à±à°¸à± చెలà±à°²à±à°¨à°µà°¿ కావà±"
-#: ../libnm-util/nm-setting-wired.c:562
+#: ../libnm-core/nm-setting-wired.c:591 ../libnm-util/nm-setting-wired.c:615
#, c-format
-msgid "'%s' is not a valid ethernet port value"
+#| msgid "'%s' is not a valid ethernet port value"
+msgid "'%s' is not a valid Ethernet port value"
msgstr "'%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ ఈథరà±à°¨à±†à°Ÿà± పోరà±à°Ÿà± విలà±à°µ కాదà±"
-#: ../libnm-util/nm-setting-wired.c:572
+#: ../libnm-core/nm-setting-wired.c:601 ../libnm-util/nm-setting-wired.c:625
#, 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
+#: ../libnm-core/nm-setting-wired.c:659 ../libnm-util/nm-setting-wired.c:682
#, c-format
msgid "invalid '%s' or its value '%s'"
msgstr "చెలà±à°²à°¨à°¿ '%s' లేదా దాని విలà±à°µ '%s'"
-#: ../libnm-util/nm-setting-wireless-security.c:816
+#: ../libnm-core/nm-setting-wireless-security.c:899
+#: ../libnm-util/nm-setting-wireless-security.c:912
#, c-format
msgid "'%s' security requires '%s=%s'"
msgstr "'%s' à°°à°•à±à°·à°£ అవసరం '%s=%s'"
-#: ../libnm-util/nm-setting-wireless-security.c:845
+#: ../libnm-core/nm-setting-wireless-security.c:928
+#: ../libnm-util/nm-setting-wireless-security.c:941
#, c-format
msgid "'%s' security requires '%s' setting presence"
msgstr "'%s' à°°à°•à±à°·à°£à°•à± '%s' అమరిక అభీషà±à°Ÿà°‚ అవసరం"
-#: ../libnm-util/nm-setting-wireless-security.c:866
+#: ../libnm-core/nm-setting-wireless-security.c:949
+#: ../libnm-util/nm-setting-wireless-security.c:962
#, c-format
msgid "'%d' value is out of range <0-3>"
msgstr "'%d' విసà±à°¤à±ƒà°¤à°¿ <0-3> బయట à°µà±à°‚ది"
-#: ../libnm-util/nm-setting-wireless-security.c:963
+#: ../libnm-core/nm-setting-wireless-security.c:1046
+#: ../libnm-util/nm-setting-wireless-security.c:1059
#, c-format
msgid "'%s' connections require '%s' in this property"
msgstr "'%s' à°…à°¨à±à°¸à°‚ధానంకౠ'%s' కావాలి యీ లకà±à°·à°£à°‚ నందà±"
-#: ../libnm-util/nm-setting-wireless-security.c:993
+#: ../libnm-core/nm-setting-wireless-security.c:1076
+#: ../libnm-util/nm-setting-wireless-security.c:1089
#, c-format
msgid "'%s' can only be used with '%s=%s' (WEP)"
msgstr "'%s' à°…à°¨à±à°¨à°¦à°¿ '%s=%s' (WEP) తో మాతà±à°°à°®à±‡ à°µà±à°ªà°¯à±‹à°—ించగలం"
-#: ../libnm-util/nm-setting-wireless.c:715
+#: ../libnm-core/nm-setting-wireless.c:729
+#: ../libnm-util/nm-setting-wireless.c:768
#, c-format
msgid "'%s' is not a valid Wi-Fi mode"
msgstr "'%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ వై-ఫై రీతి కాదà±"
-#: ../libnm-util/nm-setting-wireless.c:725
+#: ../libnm-core/nm-setting-wireless.c:739
+#: ../libnm-util/nm-setting-wireless.c:778
#, c-format
msgid "'%s' is not a valid band"
msgstr "'%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ బాండౠకాదà±"
-#: ../libnm-util/nm-setting-wireless.c:735
+#: ../libnm-core/nm-setting-wireless.c:749
+#: ../libnm-util/nm-setting-wireless.c:788
#, c-format
msgid "requires setting '%s' property"
msgstr "అమరిక '%s' లకà±à°·à°£à°‚ కావాలి"
+#: ../libnm-core/nm-setting.c:1710
+#, c-format
+#| msgid "requires '%s' or '%s' setting"
+msgid "Missing '%s' setting"
+msgstr "'%s' అమరిక దొరకలేదà±"
+
+#: ../libnm-glib/nm-device.c:1792
+msgid "Bluetooth"
+msgstr "à°¬à±à°²à±‚టూతà±"
+
+#: ../libnm-glib/nm-device.c:1810
+msgid "ADSL"
+msgstr "ADSL"
+
+#: ../libnm-glib/nm-device.c:1838
+msgid "Wired"
+msgstr "వైరà±à°¡à±"
+
+#: ../libnm-glib/nm-device.c:1869
+msgid "PCI"
+msgstr "PCI"
+
+#: ../libnm-glib/nm-device.c:1871
+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:1967 ../libnm-glib/nm-device.c:1986
+#, c-format
+msgctxt "long device name"
+msgid "%s %s"
+msgstr "%s %s"
+
+#: ../libnm-glib/nm-remote-connection.c:149
+#| msgid "disconnected"
+msgid "Disconnected by D-Bus"
+msgstr "D-బసౠచేత అననà±à°¸à°‚ధానించబడెనà±"
+
+#: ../libnm/nm-object.c:174 ../libnm/nm-object.c:317
+msgid "Caller did not specify D-Bus path for object"
+msgstr "ఆబà±à°œà°•à±à°Ÿà± కొరకౠకాలరౠD-బసౠతెలà±à°ªà°²à±‡à°¦à±"
+
+#: ../libnm/nm-vpn-plugin.c:726
+#| msgid "Error: No interface specified."
+msgid "No service name specified"
+msgstr "ఠసేవ పేరౠతెలà±à°ªà°²à±‡à°¦à±"
+
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:1
msgid "Enable or disable system networking"
msgstr "సిసà±à°Ÿà°®à± నెటà±à°µà°°à±à°•à°¿à°‚à°—à±â€Œà°¨à± చేతనమౠలేదా అచేతనమౠచేయà±à°®à±"
@@ -5457,7 +7358,8 @@ 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"
@@ -5549,6 +7451,28 @@ msgid "System policy prevents modification of the persistent system hostname"
msgstr ""
"నిరంతర సిసà±à°Ÿà°®à± హోసà±à°Ÿà±à°¨à°¾à°®à°®à±à°¨à± సవరించà±à°Ÿà°¨à± సిసà±à°Ÿà°®à± విధానమౠనిరోధించà±à°šà±à°¨à±à°¨à°¦à°¿"
+#. Translators: the first %s is a prefix for the connection id, such
+#. * as "Wired Connection" or "VPN Connection". The %d is a number
+#. * that is combined with the first argument to create a unique
+#. * connection id.
+#: ../src/NetworkManagerUtils.c:953
+#, c-format
+#| msgctxt "long device name"
+#| msgid "%s %s"
+msgctxt "connection id fallback"
+msgid "%s %d"
+msgstr "%s %d"
+
+#: ../src/main.c:130
+#, c-format
+msgid "Failed to set signal mask: %d"
+msgstr "సంకేత మాసà±à°•à± అమరà±à°šà±à°Ÿà°•à± విఫలమైంది: %d"
+
+#: ../src/main.c:139
+#, c-format
+msgid "Failed to create signal handling thread: %d"
+msgstr "సంకేతం సంభాలించౠతà±à°°à±†à°¡à± సృషà±à°Ÿà°¿à°‚à°šà±à°Ÿà°²à±‹ విఫలమైంది: %d"
+
#: ../src/main.c:154
#, c-format
msgid "Opening %s failed: %s\n"
@@ -5569,59 +7493,59 @@ msgstr "%s మూయà±à°Ÿà°•à± విఫలమైంది: %s\n"
msgid "NetworkManager is already running (pid %ld)\n"
msgstr "నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± యిపà±à°ªà°Ÿà°¿à°•à±‡ నడà±à°¸à±à°¤à±‹à°‚ది (pid %ld)\n"
-#: ../src/main.c:329
+#: ../src/main.c:361
msgid "Print NetworkManager version and exit"
msgstr "నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± వరà±à°·à°¨à± à°®à±à°¦à±à°°à°¿à°‚à°šà°¿ నిషà±à°•à±à°°à°®à°¿à°‚à°šà±à°®à±"
-#: ../src/main.c:330
+#: ../src/main.c:362
msgid "Don't become a daemon"
msgstr "డీమనౠకావదà±à°¦à±"
-#: ../src/main.c:331
+#: ../src/main.c:363
msgid "Don't become a daemon, and log to stderr"
msgstr "డీమనౠకావదà±à°¦à±, stderr కౠలాగవà±à°µà±"
-#: ../src/main.c:332
+#: ../src/main.c:364
#, c-format
msgid "Log level: one of [%s]"
msgstr "లాగౠసà±à°¥à°¾à°¯à°¿: వీటిలో వొకటి [%s]"
-#: ../src/main.c:334
+#: ../src/main.c:366
#, c-format
msgid "Log domains separated by ',': any combination of [%s]"
msgstr "',' తో వేరà±à°šà±‡à°¯à°¬à°¡à°¿à°¨ లాగౠడొమైనà±à°²à±: [%s] యొకà±à°• à°à°¦à±‡à°¨à°¿ మేళనమà±"
-#: ../src/main.c:336
+#: ../src/main.c:368
msgid "Make all warnings fatal"
msgstr "à°…à°¨à±à°¨à°¿ హెచà±à°šà°°à°¿à°•à°²à°¨à± హానికారకంగా à°—à±à°°à±à°¤à±à°‚à°šà±"
-#: ../src/main.c:337
+#: ../src/main.c:369
msgid "Specify the location of a PID file"
msgstr "PID ఫైలౠయొకà±à°• à°¸à±à°¥à°¾à°¨à°®à± తెలà±à°ªà±à°®à±"
-#: ../src/main.c:337
+#: ../src/main.c:369
msgid "filename"
msgstr "ఫైలà±â€Œà°ªà±‡à°°à±"
-#: ../src/main.c:338
+#: ../src/main.c:370
msgid "State file location"
msgstr "ఫైలౠసà±à°¥à°¾à°¨à°®à± తెలియజెపà±à°ªà±"
-#: ../src/main.c:338
+#: ../src/main.c:370
msgid "/path/to/state.file"
msgstr "/path/to/state.file"
-#: ../src/main.c:364
+#: ../src/main.c:396
#, c-format
msgid "GModules are not supported on your platform!\n"
msgstr "మీ à°ªà±à°²à°¾à°Ÿà±â€Œà°«à°¾à°‚ పై GModules తోడà±à°ªà°¾à°Ÿà±à°¨à±€à°¯à°µà±!\n"
-#: ../src/main.c:369
+#: ../src/main.c:401
#, c-format
msgid "You must be root to run NetworkManager!\n"
msgstr "నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à±à°¨à± నడà±à°ªà±à°Ÿà°•à± మీరౠతపà±à°ªà°• రూటౠగా à°µà±à°‚డాలి!\n"
-#: ../src/main.c:392
+#: ../src/main.c:424
msgid ""
"NetworkManager monitors all network connections and automatically\n"
"chooses the best connection to use. It also allows the user to\n"
@@ -5634,55 +7558,43 @@ msgstr ""
"తెలà±à°ªà±à°Ÿà°•à±\n"
"వాడà±à°•à°°à±à°²à°¨à± à°…à°¨à±à°®à°¤à°¿à°‚à°šà±à°¨à±."
-#: ../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:412
+#: ../src/main.c:430 ../src/main.c:446
#, c-format
msgid "%s. Please use --help to see a list of valid options.\n"
msgstr ""
"%s. చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ à°à°šà±à°šà°¿à°•à°®à±à°² జాబితా చూచà±à°Ÿà°•à± దయచేసి --help à°µà±à°ªà°¯à±‹à°—à°¿à°‚à°šà±à°®à±.\n"
-#: ../src/main.c:417
+#: ../src/main.c:451
#, c-format
msgid "Ignoring unrecognized log domain(s) '%s' passed on command line.\n"
msgstr ""
"కమాండౠలైనౠపైన పాసౠఅయిన à°—à±à°°à±à°¤à°¿à°‚చని లాగౠడొమైనà±(à°²à±) '%s' విసà±à°®à°°à°¿à°¸à±à°¤à±‹à°‚ది.\n"
-#: ../src/main.c:468
+#: ../src/main.c:502
#, c-format
msgid "Failed to read configuration: (%d) %s\n"
msgstr "ఆకృతీకరణనౠచదà±à°µà±à°Ÿà°•à± విఫలమైంది: (%d) %s\n"
-#: ../src/main.c:482
+#: ../src/main.c:516
#, c-format
msgid "Error in configuration file: %s.\n"
msgstr "ఆకృతీకరణ ఫైలౠనందౠదోషం: %s.\n"
-#: ../src/main.c:487
+#: ../src/main.c:521
#, c-format
msgid "Ignoring unrecognized log domain(s) '%s' from config files.\n"
msgstr "ఆకృతీకరణ ఫైళà±à°³ à°¨à±à°‚à°¡à°¿ à°—à±à°°à±à°¤à°¿à°‚చని లాగౠడొమైనà±(à°²à±) '%s' విసà±à°®à°°à°¿à°¸à±à°¤à±‹à°‚ది.\n"
-#: ../src/main.c:495
+#: ../src/main.c:529
#, c-format
msgid "State file %s parsing failed: (%d) %s\n"
msgstr "à°¸à±à°Ÿà±‡à°Ÿà± ఫైలౠ%s పారà±à°¸à°¿à°‚గౠవిఫలమైంది: (%d) %s\n"
-#: ../src/main.c:508
+#: ../src/main.c:542
#, c-format
msgid "Could not daemonize: %s [error %u]\n"
msgstr "డెమొనైజౠచేయలేదà±: %s [error %u]\n"
-#: ../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"
@@ -5696,1008 +7608,463 @@ msgstr ""
"# %sà°¨à±à°‚à°¡à°¿ à°•à°²à±à°ªà°¬à°¡à°¿à°‚ది\n"
"\n"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:313
+#: ../src/dhcp-manager/nm-dhcp-manager.c:302
msgid "no usable DHCP client could be found."
msgstr "à°Žà°Ÿà±à°µà°‚à°Ÿà°¿ à°µà±à°ªà°¯à±‹à°—à°•à°° DHCP à°•à±à°²à±ˆà°‚à°Ÿà± à°•à°¨à±à°—ొనబడలేదà±."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:322
-msgid "'dhclient' could be found."
-msgstr "'dhclient' à°•à°¨à±à°—ొనబడ గలదà±."
+#: ../src/dhcp-manager/nm-dhcp-manager.c:311
+#| msgid "'dhclient' could be found."
+msgid "'dhclient' could not be found or was disabled."
+msgstr "'dhclient' à°•à°¨à±à°—ొనబడలేదౠలేదా అచేతనించబడెనà±."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:332
-msgid "'dhcpcd' could be found."
-msgstr "'dhcpcd' à°•à°¨à±à°—ొనబడ గలదà±."
+#: ../src/dhcp-manager/nm-dhcp-manager.c:321
+#| msgid "'dhcpcd' could be found."
+msgid "'dhcpcd' could not be found or was disabled."
+msgstr "'dhcpcd' à°•à°¨à±à°—ొనబడ గలదౠలేదా అచేతనించబడెనà±."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:340
+#: ../src/dhcp-manager/nm-dhcp-manager.c:329
#, c-format
msgid "unsupported DHCP client '%s'"
msgstr "మదà±à°¦à°¤à±€à°¯à°¨à°¿ DHCP à°•à±à°²à±ˆà°‚à°Ÿà± '%s'"
-#: ../src/dns-manager/nm-dns-manager.c:401
+#: ../src/dns-manager/nm-dns-manager.c:374
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr ""
"గమనిక: libc రిజాలà±à°µà°°à± 3 నామపౠసేవికలకనà±à°¨à°¾ యెకà±à°•à±à°µ వాటికి మదà±à°¦à°¤à°¿à°µà±à°µà°²à±‡à°¦à±."
-#: ../src/dns-manager/nm-dns-manager.c:403
+#: ../src/dns-manager/nm-dns-manager.c:376
msgid "The nameservers listed below may not be recognized."
msgstr "à°•à±à°°à°¿à°‚దన జాబితాచేసివà±à°¨à±à°¨ నామపà±à°¸à±‡à°µà°¿à°•à°²à± à°—à±à°°à±à°¤à°¿à°‚చబడక పోవచà±à°šà±à°¨à±."
-#: ../src/logging/nm-logging.c:149
+#: ../src/devices/adsl/nm-device-adsl.c:127
+#| msgid "ADSL connection %d"
+msgid "ADSL connection"
+msgstr "ADSL à°…à°¨à±à°¸à°‚ధానం"
+
+#: ../src/devices/bluetooth/nm-bluez-device.c:190
#, c-format
-msgid "Unknown log level '%s'"
-msgstr "తెలియని లాగౠసà±à°¥à°¾à°¯à°¿ '%s'"
+msgid "%s Network"
+msgstr "%s నెటà±à°µà°°à±à°•à±"
-#: ../src/logging/nm-logging.c:226
+#: ../src/devices/bluetooth/nm-device-bt.c:274
+#| msgid "PAN connection %d"
+msgid "PAN connection"
+msgstr "PAN à°…à°¨à±à°¸à°‚ధానం"
+
+#: ../src/devices/bluetooth/nm-device-bt.c:299
+#: ../src/devices/wwan/nm-modem-broadband.c:483
+#| msgid "GSM connection %d"
+msgid "GSM connection"
+msgstr "GSM à°…à°¨à±à°¸à°‚ధానం"
+
+#: ../src/devices/bluetooth/nm-device-bt.c:303
+#: ../src/devices/wwan/nm-modem-broadband.c:506
+#| msgid "CDMA connection %d"
+msgid "CDMA connection"
+msgstr "CDMA à°…à°¨à±à°¸à°‚ధానం"
+
+#: ../src/devices/bluetooth/nm-device-bt.c:307
+#| msgid "DUN connection %d"
+msgid "DUN connection"
+msgstr "DUN à°…à°¨à±à°¸à°‚ధానం"
+
+#: ../src/devices/nm-device-bond.c:137
+#| msgid "Bond connection %d"
+msgid "Bond connection"
+msgstr "బాండౠఅనà±à°¸à°‚ధానం"
+
+#: ../src/devices/nm-device-bridge.c:144
+#| msgid "Bridge connection %d"
+msgid "Bridge connection"
+msgstr "à°¬à±à°°à°¿à°¡à±à°œà± à°…à°¨à±à°¸à°‚ధానం"
+
+#: ../src/devices/nm-device-ethernet.c:1437
+#| msgid "PPPoE connection %d"
+msgid "PPPoE connection"
+msgstr "PPPoE à°…à°¨à±à°¸à°‚ధానం"
+
+#: ../src/devices/nm-device-ethernet.c:1437
+#| msgid "Wired connection %d"
+msgid "Wired connection"
+msgstr "వైరà±à°¤à±‹ à°…à°¨à±à°¸à°‚ధానం"
+
+#: ../src/devices/nm-device-ethernet-utils.c:38
#, c-format
-msgid "Unknown log domain '%s'"
-msgstr "తెలియని లాగౠడొమైనౠ'%s'"
+msgid "Wired connection %d"
+msgstr "వైరà±à°¤à±‹ à°…à°¨à±à°¸à°‚ధానం %d"
+
+#: ../src/devices/nm-device-infiniband.c:189
+#| msgid "InfiniBand connection %d"
+msgid "InfiniBand connection"
+msgstr "ఇనà±à°«à°¿à°¬à°¾à°‚à°¡à± à°…à°¨à±à°¸à°‚ధానం"
-#: ../src/config/nm-config.c:271
+#: ../src/devices/nm-device-vlan.c:229
+#| msgid "VLAN connection %d"
+msgid "VLAN connection"
+msgstr "VLAN à°…à°¨à±à°¸à°‚ధానం"
+
+#: ../src/devices/team/nm-device-team.c:147
+#| msgid "Team connection %d"
+msgid "Team connection"
+msgstr "టీమౠఅనà±à°¸à°‚ధానం"
+
+#: ../src/devices/wifi/nm-device-olpc-mesh.c:163
+#| msgid "Mesh %d"
+msgid "Mesh"
+msgstr "మెషà±"
+
+#: ../src/nm-config.c:303
msgid "Config file location"
msgstr "ఆకృతీకరణ ఫైలౠసà±à°¥à°¾à°¨à°®à±"
-#: ../src/config/nm-config.c:271
+#: ../src/nm-config.c:303
msgid "/path/to/config.file"
msgstr "/path/to/config.file"
-#: ../src/config/nm-config.c:272
+#: ../src/nm-config.c:304
msgid "Config directory location"
msgstr "ఆకృతీకరణ సంచయం à°¸à±à°¥à°¾à°¨à°®à±"
-#: ../src/config/nm-config.c:272
+#: ../src/nm-config.c:304
msgid "/path/to/config/dir"
msgstr "/path/to/config/dir"
-#: ../src/config/nm-config.c:274
+#: ../src/nm-config.c:306
msgid "List of plugins separated by ','"
msgstr "',' తో వేరà±à°šà±‡à°¯à°¬à°¡à°¿à°¨ చొపà±à°ªà°¿à°‚తల జాబితా"
-#: ../src/config/nm-config.c:274
+#: ../src/nm-config.c:306
msgid "plugin1,plugin2"
msgstr "చొపà±à°ªà°¿à°‚à°¤1,చొపà±à°ªà°¿à°‚à°¤2"
-#: ../src/config/nm-config.c:277
+#. These three are hidden for now, and should eventually just go away.
+#: ../src/nm-config.c:309
msgid "An http(s) address for checking internet connectivity"
msgstr "ఇంటరà±à°¨à±†à°Ÿà± à°…à°¨à±à°¸à°‚ధానత పరిశీలించà±à°Ÿà°•à± వొక http(s) à°šà°¿à°°à±à°¨à°¾à°®à°¾"
-#: ../src/config/nm-config.c:278
+#: ../src/nm-config.c:310
msgid "The interval between connectivity checks (in seconds)"
msgstr "à°…à°¨à±à°¸à°‚ధానత పరిశీలన మధà±à°¯ విరామం (à°•à±à°·à°£à°¾à°²à°²à±‹)"
-#: ../src/config/nm-config.c:279
+#: ../src/nm-config.c:311
msgid "The expected start of the response"
msgstr "à°ªà±à°°à°¤à°¿à°¸à±à°ªà°‚దన యొకà±à°• à°…à°¨à±à°•à±Šà°¨à±à°¨ à°ªà±à°°à°¾à°°à°‚à°­à°‚"
-#: ../src/config/nm-config.c:279
+#: ../src/nm-config.c:311
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/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
+#: ../src/nm-logging.c:159
#, c-format
-msgid "Bond connection %d"
-msgstr "బాండౠఅనà±à°¸à°‚ధానం %d"
-
-#: ../src/devices/nm-device-adsl.c:150
-#, c-format
-msgid "ADSL connection %d"
-msgstr "ADSL à°…à°¨à±à°¸à°‚ధానం %d"
-
-#: ../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/devices/nm-device-bt.c:341
-#, c-format
-msgid "DUN connection %d"
-msgstr "DUN à°…à°¨à±à°¸à°‚ధానం %d"
-
-#: ../src/devices/nm-device-ethernet.c:1254
-#, c-format
-msgid "PPPoE connection %d"
-msgstr "PPPoE à°…à°¨à±à°¸à°‚ధానం %d"
-
-#: ../src/devices/nm-device-ethernet.c:1254
-#: ../src/settings/nm-settings-utils.c:50
-#, c-format
-msgid "Wired connection %d"
-msgstr "వైరà±à°¤à±‹ à°…à°¨à±à°¸à°‚ధానం %d"
-
-#: ../src/devices/nm-device-infiniband.c:270 ../tui/nm-editor-utils.c:177
-#, c-format
-msgid "InfiniBand connection %d"
-msgstr "ఇనà±à°«à°¿à°¬à°¾à°‚à°¡à± à°…à°¨à±à°¸à°‚ధానం %d"
-
-#: ../src/devices/nm-device-olpc-mesh.c:242
-#, c-format
-msgid "Mesh %d"
-msgstr "మెషౠ%d"
-
-#: ../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:3420 ../tui/nm-editor-utils.c:246
-#, c-format
-msgid "VPN connection %d"
-msgstr "VPN à°…à°¨à±à°¸à°‚ధానం %d"
-
-#: ../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:264
-#, c-format
-msgid "unable to connect to netlink for monitoring link status: %s"
-msgstr ""
-"లింకౠసà±à°¥à°¿à°¤à°¿à°¨à°¿ పరà±à°¯à°µà±‡à°•à±à°·à°¿à°‚à°šà±à°Ÿà°•à± నెటà±â€Œà°²à°¿à°‚à°•à±à°•à± à°…à°¨à±à°¸à°‚ధానమౠకాలేకపోయింది: %s"
-
-#: ../src/nm-netlink-monitor.c:275
-#, c-format
-msgid "unable to enable netlink handle credential passing: %s"
-msgstr "నెటà±â€Œà°²à°¿à°‚కౠహాండిలౠకà±à°°à±†à°¡à±†à°¨à±à°·à°¿à°¯à°²à± పాసింగౠచేతమౠచేయలేదà±: %s"
+msgid "Unknown log level '%s'"
+msgstr "తెలియని లాగౠసà±à°¥à°¾à°¯à°¿ '%s'"
-#: ../src/nm-netlink-monitor.c:319 ../src/nm-netlink-monitor.c:381
+#: ../src/nm-logging.c:241
#, c-format
-msgid "unable to allocate netlink handle for monitoring link status: %s"
-msgstr ""
-"లింకౠసà±à°¥à°¿à°¤à°¿à°¨à°¿ పరà±à°¯à°µà±‡à°•à±à°·à°¿à°‚à°šà±à°Ÿà°•à± నెటà±â€Œà°²à°¿à°‚కౠహాండిలà±â€Œà°¨à± కేటాయించలేక పోయింది: "
-"%s"
+msgid "Unknown log domain '%s'"
+msgstr "తెలియని లాగౠడొమైనౠ'%s'"
-#: ../src/nm-netlink-monitor.c:469
-#, c-format
-msgid "unable to join netlink group: %s"
-msgstr "నెటà±â€Œà°²à°¿à°‚కౠసమూహానà±à°¨à°¿ చేరà±à°šà±à°•à±Šà°¨à°²à±‡à°• పోయింది: %s"
+#: ../src/nm-manager.c:3338
+#| msgid "VPN connecting"
+msgid "VPN connection"
+msgstr "VPN à°…à°¨à±à°¸à°‚ధానం"
-#: ../src/nm-sleep-monitor-systemd.c:116
+#: ../src/nm-sleep-monitor-systemd.c:114
msgid "NetworkManager needs to turn off networks"
msgstr "నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± నెటà±à°µà°°à±à°•à±à°²à°¨à± ఆపౠచేయవలసివà±à°‚ది"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:115
-msgid "System"
-msgstr "సిసà±à°Ÿà°®à±"
-
-#: ../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: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:104
-msgid ""
-"Time to wait for a connection, in seconds (without the option, default value "
-"is 30)"
-msgstr ""
-"à°…à°¨à±à°¸à°‚ధానం కొరకౠవేచివà±à°‚డాలà±à°¸à°¿à°¨ సమయం, à°•à±à°·à°£à°¾à°²à°²à±‹ (à°à°šà±à°šà°¿à°•à°‚ లేకà±à°‚à°¡à°¾, à°…à°ªà±à°°à°®à±‡à°¯ "
-"విలà±à°µ 30)"
-
-#: ../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:124
-msgid ""
-"Waits for NetworkManager to finish activating startup network connections."
-msgstr ""
-"à°ªà±à°°à°¾à°°à°‚à°­ నెటà±à°µà°°à±à°•à± à°…à°¨à±à°¸à°‚ధానాలనౠకà±à°°à°¿à°¯à°¾à°¶à±€à°²à°‚చేయà±à°Ÿ పూరà±à°¤à°¿à°šà±‡à°¯à±à°Ÿà°•à± "
-"నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± కొరకౠవేచివà±à°‚ది."
-
-#: ../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
+#: ../src/settings/plugins/ibft/plugin.c:67
#, c-format
-msgid "Could not create temporary file: %s"
-msgstr "తాతà±à°•à°¾à°²à°¿à°• ఫైలౠసృషà±à°Ÿà°¿à°‚చలేక పోయింది: %s"
+msgid "ibft: failed to read iscsiadm records: %s"
+msgstr "ibft: iscsiadm రికారà±à°¡à±à°¸à± à°šà°¦à±à°µà±à°Ÿà°•à± విఫలమైంది: %s"
-#: ../tui/newt/nmt-newt-utils.c:354
+#: ../src/settings/plugins/ibft/plugin.c:75
#, c-format
-msgid "Editor failed: %s"
-msgstr "సరికూరà±à°ªà°°à°¿ విఫలమైంది: %s"
+#| msgid "Wired connection %d"
+msgid "ibft: read connection '%s'"
+msgstr "ibft: రీడౠఅనà±à°¸à°‚ధానం '%s'"
-#: ../tui/newt/nmt-newt-utils.c:360
+#: ../src/settings/plugins/ibft/plugin.c:81
#, c-format
-msgid "Could not re-read file: %s"
-msgstr "ఫైలà±à°¨à± తిరిగి-à°šà°¦à±à°µ లేక పోయింది: %s"
+msgid "ibft: failed to read iscsiadm record: %s"
+msgstr "ibft: iscsiadm రికారà±à°¡à± à°šà°¦à±à°µà±à°Ÿà°•à± విఫలమైంది: %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 "జతచేయి"
-
-#: ../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 "à°¸à±à°²à±‡à°µà±à°¸à±"
-
-#: ../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 "హెయిరà±â€Œà°ªà°¿à°¨à± రీతి"
-
-#: ../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 కోడౠఅవసరమైంది"
+#: ../src/settings/plugins/ifcfg-rh/reader.c:112
+msgid "System"
+msgstr "సిసà±à°Ÿà°®à±"
-#: ../tui/nmt-secret-agent.c:368
-msgid "PIN code is needed for the mobile broadband device"
-msgstr "మొబైలౠబà±à°°à°¾à°¡à±â€Œà°¬à°¾à°‚డౠపరికరం కొరకౠPIN కోడౠఅవసరమైంది"
+#~ 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 ""
+#~ "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"
+
+#~ 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"
+
+#~ 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 "Error: 'à°•à±à°°à°¿à°¯à°¾à°¶à±€à°² జాబితా': %s"
+
+#~ msgid "List of active connections"
+#~ msgstr "à°•à±à°°à°¿à°¯à°¾à°¶à±€à°² à°…à°¨à±à°¸à°‚ధానమà±à°² జాబితా"
+
+#~ msgid "Error: 'show active': %s"
+#~ msgstr "దోషం: 'à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°®à±ˆà°¨à°µà°¿ చూపà±': %s"
+
+#~ msgid ""
+#~ "Error: Device '%s' is waiting for slaves before proceeding with "
+#~ "activation."
+#~ msgstr "దోషం: à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà±à°Ÿà°•à± à°®à±à°‚à°¦à±à°—à°¾ పరికరం '%s' à°¸à±à°²à±‡à°µà±à°¸à± కొరకౠవేచివà±à°‚ది."
+
+#~ 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' à°…à°¨à±à°¸à°‚ధాన à°°à°•à°‚ కొరకౠ1 à°à°šà±à°šà°¿à°• ఆరà±à°—à±à°®à±†à°‚à°Ÿà± à°µà±à°‚ది.\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 "'మొబైలౠబà±à°°à°¾à°¡à±â€Œà°¬à°¾à°‚à°¡à±' à°…à°¨à±à°¸à°‚ధాన à°°à°•à°‚à°•à± 2 à°à°šà±à°šà°¿à°• ఆరà±à°—à±à°®à±†à°‚à°Ÿà±à°²à±à°µà±à°¨à±à°¨à°¾à°¯à°¿.\n"
+
+#~ 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 "à°¬à±à°²à±‚టూతౠరకం (panu, dun-gsm or 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]: "
-#: ../tui/nmt-secret-agent.c:370
-msgid "PIN"
-msgstr "పినà±"
+#~ msgid "Error: 'hairpin': '%s'.\n"
+#~ msgstr "దోషం: 'hairpin': '%s'.\n"
-#: ../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 "There is 1 optional argument for 'VPN' connection type.\n"
+#~ msgstr "'VPN' à°…à°¨à±à°¸à°‚ధాన à°°à°•à°‚ కొరకౠ1 à°à°šà±à°šà°¿à°• ఆరà±à°—à±à°®à±†à°‚టౠఉంది.\n"
-#: ../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 "There are 2 optional arguments for 'OLPC Mesh' connection type.\n"
+#~ msgstr "'OLPC Mesh' à°…à°¨à±à°¸à°‚ధాన à°°à°•à°‚ కొరకౠ2 à°à°šà±à°šà°¿à°• ఆరà±à°—à±à°®à±†à°‚à°Ÿà±à°²à± ఉనà±à°¨à°¾à°¯à°¿.\n"
-#: ../tui/nmt-slave-list.c:138
-msgid "Select the type of slave connection you wish to add."
-msgstr "మీరౠజతచేయాలని à°…à°¨à±à°•à±Šà°‚à°Ÿà±à°¨à±à°¨ à°¸à±à°²à±‡à°µà± à°…à°¨à±à°¸à°‚ధానం à°°à°•à°‚ ఎంపికచేయి."
+#~ msgid "Error: 'master': '%s' is not valid UUID nor interface."
+#~ msgstr "దోషం: 'master': '%s' చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ UUID లేదా యింటరà±à°«à±‡à°¸à± కాదà±."
-#: ../tui/nmt-widget-list.c:142
-msgid "Add..."
-msgstr "జతచేయి..."
+#~ msgid ""
+#~ "save :: save the connection\n"
+#~ "\n"
+#~ "Sends the connection to NetworkManager that will save it.\n"
+#~ msgstr ""
+#~ "save :: à°…à°¨à±à°¸à°‚ధానం దాయి\n"
+#~ "\n"
+#~ "à°…à°¨à±à°¸à°‚ధానంనౠనెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à±à°•à± పంపà±à°¨à± అది దానిని దాచà±à°¨à±.\n"
-#: ../tui/nmt-widget-list.c:205
-msgid "Remove"
-msgstr "తీసివేయి"
+#~ 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"
-#: ../tui/nmtui-connect.c:82
-msgid "Activation failed"
-msgstr "à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà±à°Ÿ విఫలమైంది"
+#~ msgid "Error: '%s' setting not present\n"
+#~ msgstr "దోషం: '%s' అమరిక లేదà±\n"
-#: ../tui/nmtui-connect.c:134
-msgid "Connecting..."
-msgstr "à°…à°¨à±à°¸à°‚ధానిసà±à°¤à±‹à°‚ది..."
+#~ 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"
-#: ../tui/nmtui-connect.c:159
-#, c-format
-msgid "Could not activate connection: %s"
-msgstr "à°…à°¨à±à°¸à°‚ధానం à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°ªà°°à°šà°²à±‡à°• పోయింది: %s"
+#~ msgid ""
+#~ "Error: 'configured' or 'active' command is expected for 'connection show'."
+#~ msgstr "దోషం: 'configured' లేదా 'active' ఆదేశం 'connection show' కౠకావాలి."
-#: ../tui/nmtui-connect.c:218 ../tui/nmtui-connect.c:274
-msgid "Activate"
-msgstr "à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°¿à°‚à°šà±"
+#~ msgid "not running"
+#~ msgstr "నడà±à°šà±à°Ÿà°²à±‡à°¦à±"
-#: ../tui/nmtui-connect.c:220
-msgid "Deactivate"
-msgstr "à°•à±à°°à°¿à°¯à°¾à°¹à±€à°¨à°‚చేయి"
+#~ msgid "0 (unknown)"
+#~ msgstr "0 (తెలియని)"
-#: ../tui/nmtui-connect.c:279 ../tui/nmtui-edit.c:102 ../tui/nmtui.c:114
-msgid "Quit"
-msgstr "నిషà±à°•à±à°°à°®à°¿à°‚à°šà±"
+#~ msgid "any, "
+#~ msgstr "à°à°¦à±ˆà°¨à°¾, "
-#: ../tui/nmtui-connect.c:304
-#, c-format
-msgid "No such connection '%s'"
-msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ à°…à°¨à±à°¸à°‚ధానాం '%s' లేదà±"
+#~ msgid "900 MHz, "
+#~ msgstr "900 MHz, "
-#: ../tui/nmtui-connect.c:306
-msgid "Connection is already active"
-msgstr "à°…à°¨à±à°¸à°‚ధానం ఇపà±à°ªà°Ÿà°¿à°•à±‡ à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°®à±ˆà°µà±à°‚ది"
+#~ msgid "1800 MHz, "
+#~ msgstr "1800 MHz, "
-#: ../tui/nmtui-edit.c:209
-msgid "Create"
-msgstr "సృషà±à°Ÿà°¿à°‚à°šà±"
+#~ msgid "1900 MHz, "
+#~ msgstr "1900 MHz, "
-#: ../tui/nmtui-edit.c:350
-msgid "Select the type of connection you wish to create."
-msgstr "మీరౠసృషà±à°Ÿà°¿à°‚à°šà±à°¦à°¾à°®à°¨à°¿ à°…à°¨à±à°•à±Šà°‚à°Ÿà±à°¨à±à°¨ à°…à°¨à±à°¸à°‚ధానం à°°à°•à°‚ ఎంపికచేయండి."
+#~ msgid "850 MHz, "
+#~ msgstr "850 MHz, "
-#: ../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 "WCDMA 3GPP UMTS 2100 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../tui/nmtui-edit.c:390 ../tui/nmtui-edit.c:406
-msgid "New Connection"
-msgstr "కొతà±à°¤ à°…à°¨à±à°¸à°‚ధానం"
+#~ msgid "WCDMA 3GPP UMTS 1800 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../tui/nmtui-edit.c:443
-#, c-format
-msgid "Unable to delete connection: %s"
-msgstr "à°…à°¨à±à°¸à°‚ధానం తొలగించలేక పోయింది: %s"
+#~ msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../tui/nmtui-edit.c:472
-#, c-format
-msgid "Are you sure you want to delete the connection '%s'?"
-msgstr "మీరౠఖచà±à°šà°¿à°¤à°‚à°—à°¾ à°…à°¨à±à°¸à°‚ధానమౠ'%sనౠతొలగించà±à°¦à°¾à°®à°¨à°¿ à°…à°¨à±à°•à±Šà°¨à±à°šà±à°¨à±à°¨à°¾à°°à°¾?"
+#~ msgid "WCDMA 3GPP UMTS 800 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../tui/nmtui-edit.c:486
-#, c-format
-msgid "Could not delete connection: %s"
-msgstr "à°…à°¨à±à°¸à°‚ధానమà±à°¨à± తొలగించలేక పోయింది: %s"
+#~ msgid "WCDMA 3GPP UMTS 850 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../tui/nmtui-hostname.c:47
-msgid "Set Hostname"
-msgstr "అతిధేయపేరౠఅమరà±à°šà±"
+#~ msgid "WCDMA 3GPP UMTS 900 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../tui/nmtui-hostname.c:55
-msgid "Hostname"
-msgstr "అతిధేయపేరà±"
+#~ msgid "WCDMA 3GPP UMTS 1700 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../tui/nmtui-hostname.c:114
-#, c-format
-msgid "Set hostname to '%s'"
-msgstr "అతిధేయపేరౠ'%s' కౠఅమరà±à°šà±"
+#~ msgid "WCDMA 3GPP UMTS 1900 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 1900 MHz, "
-#: ../tui/nmtui-hostname.c:116
-#, c-format
-msgid "Unable to set hostname: %s"
-msgstr "అతిధేయపేరౠఅమరà±à°šà°²à±‡à°• పోయింది: %s"
+#~ msgid "WCDMA 3GPP UMTS 2600 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 2600 MHz, "
-#: ../tui/nmtui.c:59 ../tui/nmtui.c:62
-msgid "connection"
-msgstr "à°…à°¨à±à°¸à°‚ధానమà±"
+#~ msgid "'%s' is not valid (use <dest IP>/prefix <next-hop IP> [metric])"
+#~ msgstr "'%s' చెలà±à°²à±à°¨à°¦à°¿ కాదౠ(<dest IP>/prefix <next-hop IP> [metric] ఉపయోగించà±)"
-#: ../tui/nmtui.c:60
-msgid "Edit a connection"
-msgstr "à°…à°¨à±à°¸à°‚ధానమౠసరికూరà±à°šà±"
+#~ msgid "'%s' doesn't match the virtual interface name '%s'"
+#~ msgstr "'%s' à°…à°¨à±à°¨à°¦à°¿ వరà±à°šà±à°¯à±à°µà°²à± యింటరà±à°«à±‡à°¸à± పేరౠ'%s' తో సరిపోలడంలేదà±"
-#: ../tui/nmtui.c:63
-msgid "Activate a connection"
-msgstr "à°…à°¨à±à°¸à°‚ధానం à°•à±à°°à°¿à°¯à°¾à°¶à±€à°²à°‚చేయి"
+#~ msgid "IPv4 configuration is not allowed for slave"
+#~ msgstr "IPv4 ఆకృతీకరణ à°¸à±à°²à±‡à°µà± కొరకౠఅనà±à°®à°¤à°¿à°‚చబడదà±"
-#: ../tui/nmtui.c:65
-msgid "new hostname"
-msgstr "కొతà±à°¤ అతిధేయపేరà±"
+#~ msgid "IPv6 configuration is not allowed for slave"
+#~ msgstr "IPv6 ఆకృతీకరణ à°¸à±à°²à±‡à°µà± కొరకౠఅనà±à°®à°¤à°¿à°‚చబడదà±"
-#: ../tui/nmtui.c:66
-msgid "Set system hostname"
-msgstr "à°µà±à°¯à°µà°¸à±à°¥ అతిధేయపేరౠఅమరà±à°šà±"
+#~ msgid "Invalid option. Please use --help to see a list of valid options.\n"
+#~ msgstr "చెలà±à°²à°¨à°¿ à°à°šà±à°šà°¿à°•à°®à±. చెలà±à°²à±à°¨à°Ÿà±à°µà°‚à°Ÿà°¿ à°à°šà±à°šà°¿à°•à°®à±à°² జాబితా కొరకౠ--help à°µà±à°ªà°¯à±‹à°—à°¿à°‚à°šà°‚à°¡à°¿.\n"
-#: ../tui/nmtui.c:89
-msgid "NetworkManager TUI"
-msgstr "నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± à°Ÿà°¿à°¯à±à°"
+#~ msgid "error occurred while waiting for data on socket"
+#~ msgstr "సాకెటౠనందౠడాటా కొరకౠవేచివà±à°‚à°¡à±à°¨à°ªà±à°ªà±à°¡à± దోషమౠసంభవించినది"
-#: ../tui/nmtui.c:97
-msgid "Please select an option"
-msgstr "దయచేసి à°’à°• à°à°šà±à°šà°¿à°•à°‚ ఎంపికచేయి"
+#~ msgid "error processing netlink message: %s"
+#~ msgstr "నెటà±â€Œà°²à°¿à°‚కౠసందేశమà±à°¨à± à°ªà±à°°à±‹à°¸à±†à°¸à°¿à°‚గౠచేయà±à°Ÿà°²à±‹ దోషమà±: %s"
-#: ../tui/nmtui.c:154
-msgid "Usage"
-msgstr "వినిమయం"
+#~ msgid "unable to connect to netlink for monitoring link status: %s"
+#~ msgstr "లింకౠసà±à°¥à°¿à°¤à°¿à°¨à°¿ పరà±à°¯à°µà±‡à°•à±à°·à°¿à°‚à°šà±à°Ÿà°•à± నెటà±â€Œà°²à°¿à°‚à°•à±à°•à± à°…à°¨à±à°¸à°‚ధానమౠకాలేకపోయింది: %s"
-#: ../tui/nmtui.c:221
-msgid "Could not parse arguments"
-msgstr "పరామితà±à°²à± పారà±à°¸à± చేయలేకపోయింది"
+#~ msgid "unable to enable netlink handle credential passing: %s"
+#~ msgstr "నెటà±â€Œà°²à°¿à°‚కౠహాండిలౠకà±à°°à±†à°¡à±†à°¨à±à°·à°¿à°¯à°²à± పాసింగౠచేతమౠచేయలేదà±: %s"
-#: ../tui/nmtui.c:229
-msgid "NetworkManager is not running."
-msgstr "నెటà±à°µà°°à±à°•à±à°®à±‡à°¨à±‡à°œà°°à± నడà±à°šà±à°Ÿà°²à±‡à°¦à±."
+#~ msgid "unable to allocate netlink handle for monitoring link status: %s"
+#~ msgstr "లింకౠసà±à°¥à°¿à°¤à°¿à°¨à°¿ పరà±à°¯à°µà±‡à°•à±à°·à°¿à°‚à°šà±à°Ÿà°•à± నెటà±â€Œà°²à°¿à°‚కౠహాండిలà±â€Œà°¨à± కేటాయించలేక పోయింది: %s"
+#~ msgid "unable to join netlink group: %s"
+#~ msgstr "నెటà±â€Œà°²à°¿à°‚కౠసమూహానà±à°¨à°¿ చేరà±à°šà±à°•à±Šà°¨à°²à±‡à°• పోయింది: %s"
+#~ msgid "Error saving connection: %s"
+#~ msgstr "à°…à°¨à±à°¸à°‚ధానమౠసమాచారమà±à°¨à± దాచà±à°Ÿà°²à±‹ దోషమà±: %s"
diff --git a/po/tr.po b/po/tr.po
index 713163b44..e85b27b65 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -4,382 +4,607 @@
#
# Alperen Yusuf Aybar <alperen@aybar.biz>, 2006.
# Muhammet Kara <muhammet.k@gmail.com>, 2012.
+# Necdet Yücel <necdetyucel@gmail.com>, 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: 2013-03-30 15:29+0000\n"
-"PO-Revision-Date: 2013-04-06 18:00+0200\n"
-"Last-Translator: etc <etcetin@gmail.com>\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=Network"
+"Manager&keywords=I18N+L10N&component=Translations\n"
+"POT-Creation-Date: 2014-11-07 11:13+0000\n"
+"PO-Revision-Date: 2014-11-30 21:11+0000\n"
+"Last-Translator: Necdet Yücel <necdetyucel@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-Generator: Pootle 2.5.1.1\n"
"X-Launchpad-Export-Date: 2012-01-03 09:56+0000\n"
-"X-Generator: Poedit 1.5.4\n"
+"X-POOTLE-MTIME: 1417381917.000000\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
+#: ../clients/cli/agent.c:42
+#, c-format
+msgid ""
+"Usage: nmcli agent { COMMAND | help }\n"
+"\n"
+"COMMAND := { secret | polkit | all }\n"
+"\n"
+msgstr ""
+"Kullanım: nmcli agent { KOMUT | help }\n"
+"\n"
+"KOMUT := { sır | polkit | tümü }\n"
+"\n"
+
+#: ../clients/cli/agent.c:50
+#, c-format
+msgid ""
+"Usage: nmcli agent secret { help }\n"
+"\n"
+"Runs nmcli as NetworkManager secret agent. When NetworkManager requires\n"
+"a password it asks registered agents for it. This command keeps nmcli "
+"running\n"
+"and if a password is required asks the user for it.\n"
+"\n"
+msgstr ""
+"Kullanım: nmcli agent secret { help }\n"
+"\n"
+"nmcli'yi NetworkManager gizli ajanı olarak çalıştırır. NetworkManager parola "
+"sorduÄŸunda\n"
+"bunu kayıtlı ajana sorar. Bu komut nmcli'yi çalışır halde tutar\n"
+"ve bir parola sorulduğunda bunu kullanıcıya iletir.\n"
+"\n"
+
+#: ../clients/cli/agent.c:60
+#, c-format
+msgid ""
+"Usage: nmcli agent polkit { help }\n"
+"\n"
+"Registers nmcli as a polkit action for the user session.\n"
+"When a polkit daemon requires an authorization, nmcli asks the user and "
+"gives\n"
+"the reponse back to polkit.\n"
+"\n"
+msgstr ""
+"Kullanım: nmcli agent polkit { help }\n"
+"\n"
+"Kullanıcı oturumu için nmcli'yi bir polkit aracı olarak kaydeder.\n"
+"Polkit sürecinin kimlik doğrulamaya ihtiyacı olduğunda nmcli bunu "
+"kullanıcıya\n"
+"sorar ver aldığı cevabı polkit'e iletir.\n"
+"\n"
+
+#: ../clients/cli/agent.c:70
+#, c-format
+msgid ""
+"Usage: nmcli agent all { help }\n"
+"\n"
+"Runs nmcli as both NetworkManager secret and a polkit agent.\n"
+"\n"
+msgstr ""
+"Kullanım: nmcli agent all { help }\n"
+"\n"
+"nmcli hem NetworkManager sırrı hem de bir polkit aaracı olarak çalıştırılır."
+"\n"
+"\n"
+
+#: ../clients/cli/agent.c:151
+#, c-format
+msgid "nmcli successfully registered as a NetworkManager's secret agent.\n"
+msgstr "nmcli başarıyla NetworkManager'ın sır aracı olarak kaydettirildi.\n"
+
+#: ../clients/cli/agent.c:153
+#, c-format
+#| msgid "Modem initialization failed"
+msgid "Error: secret agent initialization failed"
+msgstr "Hata: sır aracı başlatılamadı"
+
+#: ../clients/cli/agent.c:168
+#, c-format
+#| msgid "Error: Connection activation failed: %s"
+msgid "Error: polkit agent initialization failed: %s"
+msgstr "Hata: polkit aracı başlatılamadı: %s"
+
+#: ../clients/cli/agent.c:176
+#, c-format
+msgid "nmcli successfully registered as a polkit agent.\n"
+msgstr "nmcli başarıyla bir polkit aracı olarak kaydettirildi.\n"
+
+#: ../clients/cli/agent.c:208 ../clients/cli/connections.c:8657
+#: ../clients/cli/connections.c:8683 ../clients/cli/connections.c:8821
+#: ../clients/cli/devices.c:2790 ../clients/cli/general.c:325
+#: ../clients/cli/general.c:463
+#, c-format
+msgid "Error: NetworkManager is not running."
+msgstr "Hata: Ağ Yöneticisi çalışmıyor."
+
+#: ../clients/cli/agent.c:244
+#, c-format
+#| msgid "Error: 'nm' command '%s' is not valid."
+msgid "Error: 'agent' command '%s' is not valid."
+msgstr "Hata: ''agent' komutu '%s' geçerli değil."
+
+#: ../clients/cli/common.c:38 ../clients/cli/common.c:50
+#: ../clients/cli/common.c:58 ../clients/cli/common.c:69
+#: ../clients/cli/connections.c:172 ../clients/cli/connections.c:194
msgid "GROUP"
msgstr "GRUP"
#. 0
-#: ../cli/src/common.c:33 ../cli/src/common.c:53
+#: ../clients/cli/common.c:39 ../clients/cli/common.c:59
msgid "ADDRESS"
msgstr "ADRES"
#. 1
-#: ../cli/src/common.c:34 ../cli/src/common.c:54
+#: ../clients/cli/common.c:40 ../clients/cli/common.c:60
msgid "ROUTE"
-msgstr ""
+msgstr "ROTA"
#. 2
-#: ../cli/src/common.c:35 ../cli/src/common.c:55
+#: ../clients/cli/common.c:41 ../clients/cli/common.c:61
msgid "DNS"
msgstr "DNS"
#. 3
-#: ../cli/src/common.c:36 ../cli/src/common.c:56
+#: ../clients/cli/common.c:42 ../clients/cli/common.c:62
msgid "DOMAIN"
-msgstr ""
+msgstr "ALAN"
#. 4
-#: ../cli/src/common.c:37
+#: ../clients/cli/common.c:43
msgid "WINS"
-msgstr ""
+msgstr "WINS"
#. 0
-#: ../cli/src/common.c:45 ../cli/src/common.c:64
-#| msgid "CONNECTION"
+#: ../clients/cli/common.c:51 ../clients/cli/common.c:70
msgid "OPTION"
msgstr "SEÇENEK"
-#: ../cli/src/common.c:366
+#: ../clients/cli/common.c:377 ../clients/cli/settings.c:3113
+#: ../clients/cli/settings.c:3132
+#, c-format
+#| msgid "Error: '%s' is not valid argument for '%s' option."
+msgid "invalid IPv4 address '%s'"
+msgstr "geçersiz IPv4 adresi '%s'"
+
+#: ../clients/cli/common.c:385
+#, c-format
+msgid "invalid prefix '%s'; <1-32> allowed"
+msgstr "geçersiz önek '%s'; <1-32> izin veriliyor"
+
+#: ../clients/cli/common.c:392 ../clients/cli/common.c:445
+#, c-format
+#| msgid "invalid field '%s'"
+msgid "invalid gateway '%s'"
+msgstr "geçersiz ağ geçidi '%s'"
+
+#: ../clients/cli/common.c:430 ../clients/cli/settings.c:3459
+#: ../clients/cli/settings.c:3478
+#, c-format
+#| msgid "Error: '%s' is not valid argument for '%s' option."
+msgid "invalid IPv6 address '%s'"
+msgstr "geçersiz IPv6 adresi '%s'"
+
+#: ../clients/cli/common.c:438
+#, c-format
+msgid "invalid prefix '%s'; <1-128> allowed"
+msgstr "geçersiz önek '%s'; <1-128> izin veriliyor"
+
+#: ../clients/cli/common.c:521
+#, c-format
+msgid "invalid route destination address '%s'"
+msgstr "geçersiz rota adresi '%s'"
+
+#: ../clients/cli/common.c:528
+#, c-format
+msgid "invalid prefix '%s'; <1-%d> allowed"
+msgstr "geçersiz önek '%s'; <1-%d> izin veriliyor"
+
+#: ../clients/cli/common.c:538
+#, c-format
+#| msgid "invalid field '%s'"
+msgid "invalid next hop address '%s'"
+msgstr "geçersiz sonraki atlama adresi '%s'"
+
+#: ../clients/cli/common.c:543
+#, c-format
+msgid ""
+"the second component of route ('%s') is neither a next hop address nor a "
+"metric"
+msgstr ""
+"rotanın ikinci atlama adresi ('%s') ne bir atlama adresi ne de bir metrik"
+
+#: ../clients/cli/common.c:553
+#, c-format
+#| msgid "invalid field '%s'"
+msgid "invalid metric '%s'"
+msgstr "geçersiz metrik '%s'"
+
+#: ../clients/cli/common.c:562
+msgid "default route cannot be added (NetworkManager handles it by itself)"
+msgstr "varsayılan rota eklenemedi (NetworkManager yönlendirecek)"
+
+#: ../clients/cli/common.c:650
msgid "unmanaged"
msgstr "yönetilmeyen"
-#: ../cli/src/common.c:368
+#: ../clients/cli/common.c:652
msgid "unavailable"
msgstr "mevcut deÄŸil"
-#: ../cli/src/common.c:370 ../cli/src/network-manager.c:120
+#: ../clients/cli/common.c:654 ../clients/cli/general.c:260
msgid "disconnected"
msgstr "bağlantı kesildi"
-#: ../cli/src/common.c:372
+#: ../clients/cli/common.c:656
msgid "connecting (prepare)"
msgstr "bağlanıyor (hazırlama)"
-#: ../cli/src/common.c:374
+#: ../clients/cli/common.c:658
msgid "connecting (configuring)"
msgstr "bağlanıyor (yapılandırılıyor)"
-#: ../cli/src/common.c:376
+#: ../clients/cli/common.c:660
msgid "connecting (need authentication)"
msgstr "bağlanıyor (kimlik doğrulama gerekiyor)"
-#: ../cli/src/common.c:378
+#: ../clients/cli/common.c:662
msgid "connecting (getting IP configuration)"
msgstr "bağlanıyor (IP yapılandırması alınıyor)"
-#: ../cli/src/common.c:380
+#: ../clients/cli/common.c:664
msgid "connecting (checking IP connectivity)"
msgstr "bağlanılıyor (IP bağlanılırlığı denetleniyor)"
-#: ../cli/src/common.c:382
+#: ../clients/cli/common.c:666
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
+#: ../clients/cli/common.c:668 ../clients/cli/general.c:256
msgid "connected"
msgstr "bağlandı"
-#: ../cli/src/common.c:386 ../cli/src/connections.c:466
+#: ../clients/cli/common.c:670 ../clients/cli/connections.c:552
msgid "deactivating"
msgstr "etkisizleÅŸtiriliyor"
-#: ../cli/src/common.c:388
+#: ../clients/cli/common.c:672
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
+#: ../clients/cli/common.c:674 ../clients/cli/connections.c:557
+#: ../clients/cli/connections.c:580 ../clients/cli/connections.c:1709
+#: ../clients/cli/devices.c:878 ../clients/cli/general.c:263
+#: ../clients/cli/general.c:281 ../clients/cli/general.c:411
+#: ../clients/cli/general.c:427 ../clients/cli/settings.c:704
+#: ../clients/cli/settings.c:766 ../clients/cli/settings.c:1059
+#: ../clients/cli/utils.c:1148 ../src/main.c:509 ../src/main.c:537
msgid "unknown"
msgstr "bilinmeyen"
-#: ../cli/src/common.c:399
+#: ../clients/cli/common.c:683
msgid "No reason given"
-msgstr ""
+msgstr "Açıklama verilmedi"
-#: ../cli/src/common.c:402
-#| msgid "Unknown"
+#: ../clients/cli/common.c:686 ../clients/cli/connections.c:2660
+#, c-format
msgid "Unknown error"
msgstr "Bilinmeyen hata"
-#: ../cli/src/common.c:405
+#: ../clients/cli/common.c:689
msgid "Device is now managed"
msgstr "Aygıt yönetiliyor"
-#: ../cli/src/common.c:408
+#: ../clients/cli/common.c:692
msgid "Device is now unmanaged"
msgstr "Aygıt yönetilmiyor"
-#: ../cli/src/common.c:411
-#| msgid "the VPN service returned invalid configuration"
+#: ../clients/cli/common.c:695
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
+#: ../clients/cli/common.c:698
msgid ""
"IP configuration could not be reserved (no available address, timeout, etc.)"
msgstr ""
+"IP yapılandrıması saklanamadı (kullanılabili adres yok veya zaman aşımı gibi "
+"nedenlerle)"
-#: ../cli/src/common.c:417
+#: ../clients/cli/common.c:701
msgid "The IP configuration is no longer valid"
-msgstr ""
+msgstr "IP yapılandırması artık geçerli değil"
-#: ../cli/src/common.c:420
+#: ../clients/cli/common.c:704
msgid "Secrets were required, but not provided"
-msgstr ""
+msgstr "Gizli bilgiler gerekliydi ama girilmedi"
-#: ../cli/src/common.c:423
+#: ../clients/cli/common.c:707
msgid "802.1X supplicant disconnected"
msgstr "802.1X iletiÅŸimi koptu"
-#: ../cli/src/common.c:426
+#: ../clients/cli/common.c:710
msgid "802.1X supplicant configuration failed"
msgstr "802.1X iletişim yapılandırması başarısız"
-#: ../cli/src/common.c:429
+#: ../clients/cli/common.c:713
msgid "802.1X supplicant failed"
msgstr "802.1X iletişimi başarısız"
-#: ../cli/src/common.c:432
+#: ../clients/cli/common.c:716
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"
+#: ../clients/cli/common.c:719
msgid "PPP service failed to start"
msgstr "PPP hizmeti başlatılamadı"
-#: ../cli/src/common.c:438
-#| msgid "VPN disconnected"
+#: ../clients/cli/common.c:722
msgid "PPP service disconnected"
msgstr "PPP hizmeti koptu"
-#: ../cli/src/common.c:441
+#: ../clients/cli/common.c:725
msgid "PPP failed"
msgstr "PPP başarısız"
-#: ../cli/src/common.c:444
-#| msgid "the VPN service failed to start"
+#: ../clients/cli/common.c:728
msgid "DHCP client failed to start"
msgstr "DHCP istemcisi başlatılamadı"
-#: ../cli/src/common.c:447
+#: ../clients/cli/common.c:731
msgid "DHCP client error"
msgstr "DHCP istemci hatası"
-#: ../cli/src/common.c:450
-#| msgid "VPN connection failed"
+#: ../clients/cli/common.c:734
msgid "DHCP client failed"
msgstr "DHCP istemcisi başarısız"
-#: ../cli/src/common.c:453
-#| msgid "the VPN service failed to start"
+#: ../clients/cli/common.c:737
msgid "Shared connection service failed to start"
msgstr "Paylaşımlı ağ hizmeti başlatılamadı"
-#: ../cli/src/common.c:456
-#| msgid "connection failed"
+#: ../clients/cli/common.c:740
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"
+#: ../clients/cli/common.c:743
msgid "AutoIP service failed to start"
msgstr "AutoIP hizmeti başlatılamadı"
-#: ../cli/src/common.c:462
+#: ../clients/cli/common.c:746
msgid "AutoIP service error"
msgstr "AutoIP hizmet hatası"
-#: ../cli/src/common.c:465
-#| msgid "the VPN service failed to start"
+#: ../clients/cli/common.c:749
msgid "AutoIP service failed"
msgstr "AutoIP hizmeti başarısız"
-#: ../cli/src/common.c:468
+#: ../clients/cli/common.c:752
msgid "The line is busy"
msgstr "Hat meÅŸgul"
-#: ../cli/src/common.c:471
+#: ../clients/cli/common.c:755
msgid "No dial tone"
msgstr "Arama tonu yok"
-#: ../cli/src/common.c:474
+#: ../clients/cli/common.c:758
msgid "No carrier could be established"
msgstr "Bir operatöre bağlanılamadı"
-#: ../cli/src/common.c:477
+#: ../clients/cli/common.c:761
msgid "The dialing request timed out"
msgstr "Arama isteği zaman aşımına uğradı"
-#: ../cli/src/common.c:480
+#: ../clients/cli/common.c:764
msgid "The dialing attempt failed"
msgstr "Arama girişimi başarısız"
-#: ../cli/src/common.c:483
-#| msgid "Error: Connection activation failed."
+#: ../clients/cli/common.c:767
msgid "Modem initialization failed"
msgstr "Modem kurulumu başarısız"
-#: ../cli/src/common.c:486
-#| msgid "Failed to decrypt the private key."
+#: ../clients/cli/common.c:770
msgid "Failed to select the specified APN"
msgstr "Belirtilen APN seçimi başarısız"
-#: ../cli/src/common.c:489
+#: ../clients/cli/common.c:773
msgid "Not searching for networks"
msgstr "Ağlar için arama yapılmıyor"
-#: ../cli/src/common.c:492
-#| msgid "Networking enabled"
+#: ../clients/cli/common.c:776
msgid "Network registration denied"
msgstr "Ağa katılım engellendi"
-#: ../cli/src/common.c:495
+#: ../clients/cli/common.c:779
msgid "Network registration timed out"
msgstr "Ağ kaydı zaman aşımına uğradı"
-#: ../cli/src/common.c:498
+#: ../clients/cli/common.c:782
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"
+#: ../clients/cli/common.c:785
msgid "PIN check failed"
msgstr "PIN sorgulaması başarısız"
-#: ../cli/src/common.c:504
+#: ../clients/cli/common.c:788
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"
+#: ../clients/cli/common.c:791
msgid "The device was removed"
msgstr "Aygıt kaldırıldı"
-#: ../cli/src/common.c:510
-#| msgid "NetworkManager status"
+#: ../clients/cli/common.c:794
msgid "NetworkManager went to sleep"
msgstr "NetworkManager uyudu"
-#: ../cli/src/common.c:513
-#| msgid "no active connection or device"
+#: ../clients/cli/common.c:797
msgid "The device's active connection disappeared"
msgstr "Aygıtın varolan bağlantısı koptu"
-#: ../cli/src/common.c:516
+#: ../clients/cli/common.c:800
msgid "Device disconnected by user or client"
msgstr "Kullanıcı ya da istemci tarafından bağlantı koparıldı"
-#: ../cli/src/common.c:519
+#: ../clients/cli/common.c:803
msgid "Carrier/link changed"
msgstr "Operatör/bağlantı değişti"
-#: ../cli/src/common.c:522
-#| msgid "the connection was removed"
+#: ../clients/cli/common.c:806
msgid "The device's existing connection was assumed"
msgstr "Aygıtın mevcut bağlantısı kabul edildi"
-#: ../cli/src/common.c:525
+#: ../clients/cli/common.c:809
msgid "The supplicant is now available"
msgstr "Ä°letiÅŸim ÅŸimdi uygun"
-#: ../cli/src/common.c:528
-#| msgid "'dhcpcd' could be found."
+#: ../clients/cli/common.c:812
msgid "The modem could not be found"
msgstr "Modem bulunamadı"
-#: ../cli/src/common.c:531
-#| msgid "the connection attempt timed out"
+#: ../clients/cli/common.c:815
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
+#: ../clients/cli/common.c:818
msgid "GSM Modem's SIM card not inserted"
msgstr "GSM Modem'in SIM kartı yerleştirilmemiş"
-#: ../cli/src/common.c:537
+#: ../clients/cli/common.c:821
msgid "GSM Modem's SIM PIN required"
msgstr "GSM Modem'in SIM PIN'i gerekli"
-#: ../cli/src/common.c:540
+#: ../clients/cli/common.c:824
msgid "GSM Modem's SIM PUK required"
msgstr "GSM Modem'in SIM PUK'u gerekli"
-#: ../cli/src/common.c:543
+#: ../clients/cli/common.c:827
msgid "GSM Modem's SIM wrong"
msgstr "GSM Modem'in SIM'i yanlış"
-#: ../cli/src/common.c:546
+#: ../clients/cli/common.c:830
msgid "InfiniBand device does not support connected mode"
-msgstr ""
+msgstr "InfiniBand aygıtı bağlanılan kipi desteklemiyor"
-#: ../cli/src/common.c:549
-#| msgid "connection failed"
+#: ../clients/cli/common.c:833
msgid "A dependency of the connection failed"
msgstr "Bir bağlantı gereksinimi sağlanamadı, başarısız"
-#: ../cli/src/common.c:552
+#: ../clients/cli/common.c:836
msgid "A problem with the RFC 2684 Ethernet over ADSL bridge"
-msgstr ""
+msgstr "ADSL köprüsü üzerinden RFC 2684 Ethernet ile bir sorun oluştu"
-#: ../cli/src/common.c:555
+#: ../clients/cli/common.c:839
msgid "ModemManager is unavailable"
-msgstr ""
+msgstr "ModemManager kullanılabilir değil"
-#: ../cli/src/common.c:558
-#| msgid "'dhclient' could be found."
+#: ../clients/cli/common.c:842
msgid "The Wi-Fi network could not be found"
msgstr "Wi-Fi ağı bulunamadı"
-#: ../cli/src/common.c:561
+#: ../clients/cli/common.c:845
msgid "A secondary connection of the base connection failed"
-msgstr ""
+msgstr "Temel bağlantının ikincil bağlantısı başarısız"
-#: ../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
+#: ../clients/cli/common.c:848
+msgid "DCB or FCoE setup failed"
+msgstr "DCB veya FCoE kurulumu başarısız"
+
+#: ../clients/cli/common.c:851
+#| msgid "connection failed"
+msgid "teamd control failed"
+msgstr "teamd kontrolü başarısız"
+
+#: ../clients/cli/common.c:854
+msgid "Modem failed or no longer available"
+msgstr "Modem başarısız oldu veya artık kullanılabilir değil"
+
+#: ../clients/cli/common.c:857
+msgid "Modem now ready and available"
+msgstr "Modem şimdi hazır ve kullanılabilir"
+
+#: ../clients/cli/common.c:860
+msgid "SIM PIN was incorrect"
+msgstr "SIM PIN hatalı"
+
+#. TRANSLATORS: Unknown reason for a device state change (NMDeviceStateReason)
+#: ../clients/cli/common.c:864 ../clients/cli/devices.c:617
+#: ../libnm-glib/nm-device.c:1812 ../libnm/nm-device.c:1624
msgid "Unknown"
msgstr "Bilinmeyen"
+#: ../clients/cli/common.c:906
+#, c-format
+#| msgid "invalid field '%s'"
+msgid "invalid priority map '%s'"
+msgstr "geçersiz öncelik alanı '%s'"
+
+#: ../clients/cli/common.c:913 ../clients/cli/common.c:919
+#, c-format
+#| msgid "Error: timeout value '%s' is not valid."
+msgid "priority '%s' is not valid (<0-%ld>)"
+msgstr "'%s' önceliği geçerli değil (<0-%ld>)"
+
+#: ../clients/cli/common.c:986
+#, c-format
+#| msgid "Error: '%s' is not valid argument for '%s' option."
+msgid "'%s' is not a valid team configuration or file name."
+msgstr "'%s' geçerli bir takım yapılandırması veya dosya adı değil."
+
+#. define some prompts for connection editor
+#: ../clients/cli/connections.c:42
+msgid "Setting name? "
+msgstr "İsim ayarlansın mı? "
+
+#: ../clients/cli/connections.c:43
+msgid "Property name? "
+msgstr "Özellik ismi? "
+
+#: ../clients/cli/connections.c:44
+#| msgid "Active connection state: %s\n"
+msgid "Enter connection type: "
+msgstr "Bağlantı türünü girin: "
+
+#. define some other prompts
+#: ../clients/cli/connections.c:47
+#| msgid "Connection list"
+msgid "Connection type: "
+msgstr "Bağlantı türü: "
+
+#: ../clients/cli/connections.c:48
+msgid "VPN type: "
+msgstr "VPN türü: "
+
+#: ../clients/cli/connections.c:49
+msgid "Bond master: "
+msgstr "Birincil bağlantı: "
+
+#: ../clients/cli/connections.c:50
+msgid "Team master: "
+msgstr "Birincil takım: "
+
+#: ../clients/cli/connections.c:51
+msgid "Bridge master: "
+msgstr "Birincil köprü: "
+
+#: ../clients/cli/connections.c:52
+msgid "Connection (name, UUID, or path): "
+msgstr "Bağlantı (isim, UUID veya yol): "
+
#. 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
+#: ../clients/cli/connections.c:60 ../clients/cli/connections.c:173
+#: ../clients/cli/devices.c:56 ../clients/cli/devices.c:85
+#: ../clients/cli/devices.c:95 ../clients/cli/devices.c:106
+#: ../clients/cli/devices.c:115 ../clients/cli/devices.c:130
+#: ../clients/cli/devices.c:143 ../clients/cli/devices.c:169
+#: ../clients/cli/devices.c:184 ../clients/cli/devices.c:193
+#: ../clients/cli/devices.c:202
msgid "NAME"
msgstr "Ä°SÄ°M"
#. 0
#. 1
-#: ../cli/src/connections.c:61 ../cli/src/connections.c:135
+#: ../clients/cli/connections.c:61 ../clients/cli/connections.c:174
msgid "UUID"
msgstr "Kullanıcı Kimliği"
@@ -387,796 +612,2893 @@ msgstr "Kullanıcı Kimliği"
#. 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
+#: ../clients/cli/connections.c:62 ../clients/cli/connections.c:195
+#: ../clients/cli/devices.c:42 ../clients/cli/devices.c:58
+#: ../clients/cli/devices.c:172
msgid "TYPE"
msgstr "TÃœR"
#. 2
-#: ../cli/src/connections.c:63
+#: ../clients/cli/connections.c:63
msgid "TIMESTAMP"
msgstr "ZAMANDAMGASI"
#. 3
-#: ../cli/src/connections.c:64
+#: ../clients/cli/connections.c:64
msgid "TIMESTAMP-REAL"
msgstr "ZAMANDAMGASI-GERÇEK"
#. 4
-#. 13
-#: ../cli/src/connections.c:65 ../cli/src/devices.c:123
+#. 15
+#: ../clients/cli/connections.c:65 ../clients/cli/devices.c:72
msgid "AUTOCONNECT"
msgstr "OTOMATÄ°K-BAÄžLANTI"
#. 5
-#: ../cli/src/connections.c:66
+#: ../clients/cli/connections.c:66
+#| msgid "AUTOCONNECT"
+msgid "AUTOCONNECT-PRIORITY"
+msgstr "OTOMATİKBAĞLAN-ÖNCELİK"
+
+#. 6
+#: ../clients/cli/connections.c:67
msgid "READONLY"
msgstr "SALT-OKUNUR"
-#. 6
+#. 7
#. 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
+#: ../clients/cli/connections.c:68 ../clients/cli/connections.c:181
+#: ../clients/cli/devices.c:44 ../clients/cli/devices.c:159
+#: ../clients/cli/devices.c:175
msgid "DBUS-PATH"
msgstr "DBUS-YOLU"
-#. 2
-#: ../cli/src/connections.c:136
-msgid "DEVICES"
-msgstr "AYGITLAR"
+#. 8
+#. 13
+#. 4
+#: ../clients/cli/connections.c:69 ../clients/cli/devices.c:157
+#: ../clients/cli/devices.c:174
+msgid "ACTIVE"
+msgstr "ETKÄ°N"
+
+#. 9
+#. 0
+#. 12
+#. 3
+#: ../clients/cli/connections.c:70 ../clients/cli/devices.c:41
+#: ../clients/cli/devices.c:57 ../clients/cli/devices.c:156
+#: ../clients/cli/devices.c:173
+msgid "DEVICE"
+msgstr "AYGIT"
+#. 10
#. 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
+#: ../clients/cli/connections.c:71 ../clients/cli/connections.c:176
+#: ../clients/cli/devices.c:43 ../clients/cli/devices.c:66
+#: ../clients/cli/general.c:37
msgid "STATE"
msgstr "DURUM"
+#. 11
+#: ../clients/cli/connections.c:72
+#| msgid "MASTER-PATH"
+msgid "ACTIVE-PATH"
+msgstr "ETKÄ°N-YOL"
+
+#. 2
+#: ../clients/cli/connections.c:175
+msgid "DEVICES"
+msgstr "AYGITLAR"
+
#. 4
-#: ../cli/src/connections.c:138
+#: ../clients/cli/connections.c:177
msgid "DEFAULT"
msgstr "ÖNTANIMLI"
#. 5
-#: ../cli/src/connections.c:139
+#: ../clients/cli/connections.c:178
msgid "DEFAULT6"
msgstr "ÖNTANIMLI6"
#. 6
-#: ../cli/src/connections.c:140
+#: ../clients/cli/connections.c:179
msgid "SPEC-OBJECT"
msgstr "BELÄ°RLÄ°-NESNE"
#. 7
-#. 1
-#: ../cli/src/connections.c:141 ../cli/src/connections.c:155
+#. 4
+#. Ask for optional 'vpn' arguments.
+#: ../clients/cli/connections.c:180 ../clients/cli/connections.c:218
+#: ../clients/cli/connections.c:3771 ../clients/tui/nm-editor-utils.c:234
+#: ../clients/tui/nmt-connect-connection-list.c:406
msgid "VPN"
msgstr "VPN"
#. 9
-#: ../cli/src/connections.c:143
+#. 5
+#. 19
+#: ../clients/cli/connections.c:182 ../clients/cli/devices.c:47
+#: ../clients/cli/devices.c:76
msgid "CON-PATH"
-msgstr ""
+msgstr "BAÄž-YOL"
#. 10
-#: ../cli/src/connections.c:144
+#: ../clients/cli/connections.c:183
msgid "ZONE"
msgstr "BÖLGE"
#. 11
-#: ../cli/src/connections.c:145
-#| msgid "DBUS-PATH"
+#: ../clients/cli/connections.c:184
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
-#: ../cli/src/connections.c:169
-#| msgid "NAME"
+#: ../clients/cli/connections.c:196
msgid "USERNAME"
msgstr "KULLANICI ADI"
#. 2
-#: ../cli/src/connections.c:170
+#: ../clients/cli/connections.c:197
msgid "GATEWAY"
msgstr "AĞ GEÇİDİ"
#. 3
-#: ../cli/src/connections.c:171
+#: ../clients/cli/connections.c:198
msgid "BANNER"
-msgstr ""
+msgstr "SEMBOL"
#. 4
-#: ../cli/src/connections.c:172
-#| msgid "STATE"
+#: ../clients/cli/connections.c:199
msgid "VPN-STATE"
msgstr "VPN DURUMU"
#. 5
-#: ../cli/src/connections.c:173
+#: ../clients/cli/connections.c:200
msgid "CFG"
-msgstr ""
+msgstr "CFG"
-#: ../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"
+#: ../clients/cli/connections.c:213 ../clients/cli/devices.c:217
+msgid "GENERAL"
+msgstr "GENEL"
+
+#. 0
+#. 6
+#: ../clients/cli/connections.c:214 ../clients/cli/devices.c:224
+msgid "IP4"
+msgstr "IP4"
+
+#. 1
+#. 7
+#: ../clients/cli/connections.c:215 ../clients/cli/devices.c:225
+msgid "DHCP4"
+msgstr "DHCP4"
+
+#. 2
+#. 8
+#: ../clients/cli/connections.c:216 ../clients/cli/devices.c:226
+msgid "IP6"
+msgstr "IP6"
+
+#. 3
+#. 9
+#: ../clients/cli/connections.c:217 ../clients/cli/devices.c:227
+msgid "DHCP6"
+msgstr "DHCP6"
+
+#: ../clients/cli/connections.c:251
+#, 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] [[--show-secrets] [id | uuid | path | apath] <ID>] ...\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>] "
+"[passwd-file <file with passwords>]\n"
+"\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [passwd-file "
+"<file with passwords>]\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 ""
-"Kullanımı: nmcli con { KOMUT | help }\n"
-" KOMUT := { list | status | up | down | delete }\n"
+"Kullanım: nmcli bağlantı { KOMUT | help }\n"
+"\n"
+"KOMUT := { show | up | down | add | modify | edit | delete | reload | load }"
+"\n"
+"\n"
+" show [--active] [[--show-secrets] [id | uuid | yol | apath] <ID>] ...\n"
+"\n"
+" up [[id | uuid | yol] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <isim>] "
+"[passwd-dosyası <parola dosyası>]\n"
+"\n"
+" up [[id | uuid | yol] <ID>] [ifname <ifname>] [ap <BSSID>] [passwd-dosyası "
+"<parola dosyası>]\n"
+"\n"
+" down [id | uuid | path | apath] <ID>\n"
+"\n"
+" add GENEL_SEÇENEKLER TÜRE_ÖZEL_SEÇENEKLER IP_SEÇENEKLERİ\n"
+"\n"
+" modify [--temporary] [id | uuid | yol] <ID> ([+|-]<ayar>.<özellik> "
+"<deÄŸer>)+\n"
+"\n"
+" edit [id | uuid | yol] <ID>\n"
+" edit [tür <yeni_bağlantı_türü>] [bağlantı-adı <yeni_bağlantı_adı>]\n"
+"\n"
+" delete [id | uuid | yol] <ID>\n"
+"\n"
+" reload\n"
+"\n"
+" load <dosyadı> [ <dosyadı>... ]\n"
"\n"
-" list [id <id> | uuid <id>]\n"
-" status\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [nsp <isim>] [--"
-"nowait] [--timeout <zamanaşımı>]\n"
-" up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--timeout "
-"<zamanaşımı>]\n"
-" down id <id> | uuid <id>\n"
-" delete id <id> | uuid <id>\n"
-#: ../cli/src/connections.c:256 ../cli/src/connections.c:442
+#: ../clients/cli/connections.c:272
#, c-format
-msgid "Error: 'con list': %s"
-msgstr "Hata: 'baÄŸ. listesi': %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] [--show-secrets] [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. --show-secrets option will reveal associated secrets as well.\n"
+msgstr ""
+"Kullanım: nmcli connection show { DEĞİŞKENLER | help }\n"
+"\n"
+"DEĞİŞKENLER := [--active]\n"
+"\n"
+"Bellekteki ve diskteki bağlantı profillerini listeler, bu profillerden "
+"bazılarını\n"
+"kullanan aygıtlar olduğunda etkin de olabilirler. Bir parametre olmadan tüm\n"
+"profiller listelenir. Eğer --active seçeneği kullanılırsa sadece\n"
+"etkin bağlantılar görüntülenir.\n"
+"\n"
+"DEĞİŞKENLER := [--active] [--show-secrets] [id | uuid | path | apath] <ID> "
+"...\n"
+"\n"
+"Belirtilen bağlantının ayrıntılarını görüntüler. Varsayılan olarak hem "
+"statik\n"
+"yapılandırmalar hem de etkin bağlantılar görüntülenir. Çıktıyı '--fields'\n"
+"seçeneğini kullanarak filtrelemek mümkündür. Kılavuz sayfasında daha fazla\n"
+"bilgi bulabilirsiniz. --active seçeneği kullanıldığında sadece etkin "
+"profiller\n"
+"hesaba katılır. --show-secrets seçeneği gizli bilgileri de görüntüleyecektir."
+"\n"
-#: ../cli/src/connections.c:258 ../cli/src/connections.c:444
+#: ../clients/cli/connections.c:293
#, c-format
-msgid "Error: 'con list': %s; allowed fields: %s"
-msgstr "Hata: 'bağlantı listesi': %s; izin verilen alanlar :%s"
-
-#: ../cli/src/connections.c:266
-msgid "Connection details"
-msgstr "Bağlantı ayrıntıları"
-
-#: ../cli/src/connections.c:317
-msgid "never"
-msgstr "hiçbir zaman"
+msgid ""
+"Usage: nmcli connection up { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := [id | uuid | path] <ID> [ifname <ifname>] [ap <BSSID>] [nsp "
+"<name>] [passwd-file <file with passwords>]\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>] [passwd-file <file "
+"with passwords>]\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"
+"passwd-file - file with password(s) required to activate the connection\n"
+"\n"
+msgstr ""
+"Kullanım: nmcli connection up { DEĞİŞKENLER | help }\n"
+"\n"
+"DEĞİŞKENLER := [id | uuid | yol] <ID> [ifname <ifname>] [ap <BSSID>] [nsp "
+"<isim>] [passwd-dosyası <parola dosyası>]\n"
+"\n"
+"Bir aygıtta bir bağlantıyı etkinleştir. Etkinleştirilecek profil isim, UUID "
+"veya\n"
+"D-Bus yolu ile belirtilir.\n"
+"\n"
+"DEĞİŞKENLER := ifname <ifname> [ap <BSSID>] [nsp <isim>] [passwd-dosyası <"
+"parola dosyası>]\n"
+"\n"
+"Bir aygıtı bir bağlantı ile etkinleştirir. Bağlantı profili NetworkManager "
+"tarafından\n"
+"otomatik olarak seçilir.\n"
+"\n"
+"ifname - bağlantının etkin olacağı aygıtı belirtir\n"
+"ap - bağlanılacak erişim noktasını belirtir (sadece kablosuz "
+"bağlantı için)\n"
+"nsp - bağlanılacak NSP'yi belirtir (sadece WiMAX için geçerlidir)\n"
+"passwd-file - bağlantıyı etkinleştirmek için gerekli olan parolaları içeren "
+"dosya\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
-msgid "yes"
-msgstr "evet"
+#: ../clients/cli/connections.c:314
+#, 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 ""
+"Kullanım: nmcli connection down { DEĞİŞKENLER | help }\n"
+"\n"
+"DEĞİŞKENLER := [id | uuid | yol | apath] <ID>\n"
+"\n"
+"Bir aygıtın bağlantısını etkisiz hale getir (aygıtı sonraki otomatik "
+"etkinleÅŸtirme\n"
+"listesinden çıkarmadan). Etkisiz hale getirilecek bağlantı isim, UUID veya\n"
+"D-Bus yolu ile belirlenir.\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
-msgid "no"
-msgstr "hayır"
+#: ../clients/cli/connections.c:326
+#, 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"
+" [mode infrastructure|ap|adhoc]\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"
+" [lacp-rate slow (0) | fast (1)]\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 ""
+"Kullanım: nmcli connection add { DEĞİŞKENLER | help }\n"
+"\n"
+"DEĞİŞKENLER := GENEL_SEÇENEKLER TÜRE_BAĞLI_SEÇENEKLER IP_SEÇENEKLERİ\n"
+"\n"
+" GENEL_SEÇENEKLER:\n"
+" type <tür>\n"
+" ifname <arayüz adı> | \"*\"\n"
+" [con-name <bağlantı adı>]\n"
+" [autoconnect yes|no]\n"
+"\n"
+" [save yes|no]\n"
+"\n"
+" TÜRE_BAĞLI_SEÇENEKLER:\n"
+" ethernet: [mac <MAC address>]\n"
+" [cloned-mac <klonlanmış MAC adresi>]\n"
+" [mtu <MTU>]\n"
+"\n"
+" wifi: ssid <SSID>\n"
+" [mac <MAC adresi>]\n"
+" [cloned-mac <klonlanmış MAC adresi>]\n"
+" [mtu <MTU>]\n"
+" [mode infrastructure|ap|adhoc]\n"
+"\n"
+" wimax: [mac <MAC adresi>]\n"
+" [nsp <NSP>]\n"
+"\n"
+" pppoe: username <PPPoE kullanıcı adı>\n"
+" [password <PPPoE parolası>]\n"
+" [service <PPPoE servis adı>]\n"
+" [mtu <MTU>]\n"
+" [mac <MAC adresi>]\n"
+"\n"
+" gsm: apn <APN>\n"
+" [user <kullanıcı adı>]\n"
+" [password <parola>]\n"
+"\n"
+" cdma: [user <kullanıcı adı>]\n"
+" [password <parola>]\n"
+"\n"
+" infiniband: [mac <MAC adresi>]\n"
+" [mtu <MTU>]\n"
+" [transport-mode datagram | connected]\n"
+" [parent <ifname>]\n"
+" [p-key <IPoIB P_Key>]\n"
+"\n"
+" bluetooth: [addr <bluetooth adresi>]\n"
+" [bt-type panu|dun-gsm|dun-cdma]\n"
+"\n"
+" vlan: dev <üst cihaz (bağlantı UUID, ifname veya MAC)>\n"
+" id <VLAN ID>\n"
+" [flags <VLAN bayrakları>]\n"
+" [ingress <giriş önceliği haritalaması>]\n"
+" [egress <çıkış önceliği haritalaması>]\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"
+" [lacp-rate slow (0) | fast (1)]\n"
+"\n"
+" bond-slave: master <master (ifname veya UUID veya isim)>\n"
+"\n"
+" team: [config <dosya>|<ham JSON verisi>]\n"
+"\n"
+" team-slave: master <master (ifname veya bağlantı UUID veya isim)>\n"
+" [config <dosya>|<ham JSON verisi>]\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 adresi>]\n"
+"\n"
+" bridge-slave: master <master (ifname veya bağlantı UUID veya isim)>\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 <kullanıcı adı>]\n"
+"\n"
+" olpc-mesh: ssid <SSID>\n"
+" [channel <1-13>]\n"
+" [dhcp-anycast <MAC adresi>]\n"
+"\n"
+" IP_SEÇENEKLERİ:\n"
+" [ip4 <IPv4 adresi>] [gw4 <IPv4 ağ geçidi>]\n"
+" [ip6 <IPv6 adresi>] [gw6 <IPv6 ağ geçidi>]\n"
+"\n"
-#: ../cli/src/connections.c:393
-msgid "Connection list"
-msgstr "Bağlantı listesi"
-
-#: ../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
+#: ../clients/cli/connections.c:406
#, c-format
-msgid "Error: %s argument is missing."
-msgstr "Hata: %s bağımsız değişken eksik."
+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 ""
+"Kullanım: nmcli connection modify { DEĞİŞKENLER | help }\n"
+"\n"
+"DEĞİŞKENLER := [id | uuid | yol] <ID> ([+|-]<ayar>.<özellik> <değer>)+\n"
+"\n"
+"Bağlantı profilinin bir veya daha fazla özelliğini değiştir.\n"
+"Profil ismi, UUID veya D-Bus yolu ile belirlenir. Çoklu değerli\n"
+"özellikler için '+' veya '-' öneklerini kullanabilirsiniz.\n"
+"'+' işareti tüm değerin üzerine yazmak yerine ögeleri eklemeye izin verir.\n"
+" '-' işareti tüm değerleri çıkarmadan seçili değerlerin çıkartılmasına izin "
+"verir.\n"
+"\n"
+"Örnekler:\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
+#: ../clients/cli/connections.c:429
#, c-format
-msgid "Error: %s - no such connection."
-msgstr "Hata: %s - böyle bir bağlantı yok."
+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 ""
+"Kullanım: nmcli connection edit { DEĞİŞKENLER | help }\n"
+"\n"
+"DEĞİŞKENLER := [id | uuid | yol] <ID>\n"
+"\n"
+"Etkileşimli bir düzenleyicide mevcut bağlantı profilini düzenle.\n"
+"Profil isim, UUID veya D-Bus yolu ile belirlenir\n"
+"\n"
+"DEĞİŞKENLER := [type <yeni bağlantı türü>] [bağlantı-adı <yeni bağlantı adı>]"
+"\n"
+"\n"
+"Etkileşimli bir düzenleyicide yeni bir bağlantı profili ekle.\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
+#: ../clients/cli/connections.c:444
#, c-format
-msgid "Unknown parameter: %s\n"
-msgstr "Bilinmeyen deÄŸiÅŸtirge: %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 ""
+"Kullanım: nmcli connection delete { DEĞİŞKENLER | help }\n"
+"\n"
+"DEĞİŞKENLER := [id | uuid | yol] <ID>\n"
+"\n"
+"Bir bağlantı profilini sil.\n"
+"Profil isim, UUID veya D-Bus yolu ile belirlenir.\n"
+"\n"
-#: ../cli/src/connections.c:434
+#: ../clients/cli/connections.c:455
#, c-format
-msgid "Error: no valid parameter specified."
-msgstr "Hata: geçerli bir değiştirge belirtilmedi."
+msgid ""
+"Usage: nmcli connection reload { help }\n"
+"\n"
+"Reload all connection files from disk.\n"
+"\n"
+msgstr ""
+"Kullanım: nmcli connection reload { help }\n"
+"\n"
+"Diskteki tüm bağlantı dosyalarını yeniden yükle.\n"
+"\n"
-#: ../cli/src/connections.c:449 ../cli/src/connections.c:1846
-#: ../cli/src/devices.c:2193 ../cli/src/network-manager.c:599
+#: ../clients/cli/connections.c:463
#, c-format
-msgid "Error: %s."
-msgstr "Hata: %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 ""
+"Kullanım: nmcli connection load { DEĞİŞKENLER | help }\n"
+"\n"
+"DEĞİŞKENLER := <dosya adı> [<dosya adı>...]\n"
+"\n"
+"Diskteki bir veya daha fazla bağlantı dosyasını yükle/yeniden yükle. Bunu\n"
+"bir bağlantı dosyasında elle değişiklik yaptığınızda NetworkManager'ın\n"
+"son durumdan haberi olması için yapın.\n"
+"\n"
-#: ../cli/src/connections.c:462
+#: ../clients/cli/connections.c:548
msgid "activating"
msgstr "etkinleÅŸtiriliyor"
-#: ../cli/src/connections.c:464
+#: ../clients/cli/connections.c:550
msgid "activated"
msgstr "etkinleÅŸtirildi"
-#: ../cli/src/connections.c:468
-#| msgid "activated"
+#: ../clients/cli/connections.c:554
msgid "deactivated"
msgstr "devre dışı"
-#: ../cli/src/connections.c:480
+#: ../clients/cli/connections.c:566
msgid "VPN connecting (prepare)"
msgstr "VPN bağlantısı (hazırlama)"
-#: ../cli/src/connections.c:482
+#: ../clients/cli/connections.c:568
msgid "VPN connecting (need authentication)"
msgstr "VPN bağlantısı (kimlik doğrulama gerekiyor)"
-#: ../cli/src/connections.c:484
+#: ../clients/cli/connections.c:570
msgid "VPN connecting"
msgstr "VPN bağlantısı"
-#: ../cli/src/connections.c:486
+#: ../clients/cli/connections.c:572
msgid "VPN connecting (getting IP configuration)"
msgstr "VPN bağlantısı (IP yapılandırması alınıyor)"
-#: ../cli/src/connections.c:488
+#: ../clients/cli/connections.c:574
msgid "VPN connected"
msgstr "VPN bağlı"
-#: ../cli/src/connections.c:490
+#: ../clients/cli/connections.c:576
msgid "VPN connection failed"
msgstr "VPN bağlantısı başarısız"
-#: ../cli/src/connections.c:492
+#: ../clients/cli/connections.c:578
msgid "VPN disconnected"
msgstr "VPN bağlı değil"
-#: ../cli/src/connections.c:548 ../cli/src/connections.c:558
-msgid "N/A"
-msgstr ""
+#: ../clients/cli/connections.c:661
+#| msgid "Connection details"
+msgid "Connection profile details"
+msgstr "Bağlantı profili ayrıntıları"
-#: ../cli/src/connections.c:752 ../cli/src/connections.c:976
+#: ../clients/cli/connections.c:673 ../clients/cli/connections.c:1082
#, c-format
-msgid "Error: 'con status': %s"
-msgstr "Hata: 'bağlantı durumu':%s"
+#| msgid "Error: 'con list': %s"
+msgid "Error: 'connection show': %s"
+msgstr "Hata: 'bağlantıyı göster': %s"
+
+#: ../clients/cli/connections.c:819
+msgid "never"
+msgstr "hiçbir zaman"
+
+#. "CAPABILITIES"
+#: ../clients/cli/connections.c:820 ../clients/cli/connections.c:822
+#: ../clients/cli/connections.c:824 ../clients/cli/connections.c:856
+#: ../clients/cli/connections.c:923 ../clients/cli/connections.c:924
+#: ../clients/cli/connections.c:926 ../clients/cli/connections.c:3066
+#: ../clients/cli/connections.c:6827 ../clients/cli/connections.c:6828
+#: ../clients/cli/devices.c:587 ../clients/cli/devices.c:637
+#: ../clients/cli/devices.c:846 ../clients/cli/devices.c:847
+#: ../clients/cli/devices.c:848 ../clients/cli/devices.c:849
+#: ../clients/cli/devices.c:882 ../clients/cli/devices.c:884
+#: ../clients/cli/devices.c:912 ../clients/cli/devices.c:913
+#: ../clients/cli/devices.c:914 ../clients/cli/devices.c:915
+#: ../clients/cli/devices.c:916 ../clients/cli/devices.c:917
+#: ../clients/cli/devices.c:918 ../clients/cli/general.c:421
+msgid "yes"
+msgstr "evet"
-#: ../cli/src/connections.c:754 ../cli/src/connections.c:978
+#: ../clients/cli/connections.c:820 ../clients/cli/connections.c:822
+#: ../clients/cli/connections.c:824 ../clients/cli/connections.c:923
+#: ../clients/cli/connections.c:924 ../clients/cli/connections.c:926
+#: ../clients/cli/connections.c:3067 ../clients/cli/connections.c:6827
+#: ../clients/cli/connections.c:6828 ../clients/cli/devices.c:587
+#: ../clients/cli/devices.c:637 ../clients/cli/devices.c:846
+#: ../clients/cli/devices.c:847 ../clients/cli/devices.c:848
+#: ../clients/cli/devices.c:849 ../clients/cli/devices.c:882
+#: ../clients/cli/devices.c:884 ../clients/cli/devices.c:912
+#: ../clients/cli/devices.c:913 ../clients/cli/devices.c:914
+#: ../clients/cli/devices.c:915 ../clients/cli/devices.c:916
+#: ../clients/cli/devices.c:917 ../clients/cli/devices.c:918
+#: ../clients/cli/general.c:423
+msgid "no"
+msgstr "hayır"
+
+#: ../clients/cli/connections.c:1070
+#| msgid "Active connection details"
+msgid "Activate connection details"
+msgstr "Bağlantı ayrıntılarını etkinleştir"
+
+#: ../clients/cli/connections.c:1303
#, c-format
-msgid "Error: 'con status': %s; allowed fields: %s"
-msgstr "Hata: 'bağlantı durumu': %s; izin verilen alanlar :%s"
+msgid "invalid field '%s'; allowed fields: %s and %s, or %s,%s"
+msgstr "geçersiz alan '%s'; izin verilen alanlar: %s ve %s veya %s,%s"
-#: ../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: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
+#: ../clients/cli/connections.c:1318 ../clients/cli/connections.c:1326
#, c-format
-msgid "Error: NetworkManager is not running."
-msgstr "Hata: Ağ Yöneticisi çalışmıyor."
+#| msgid "field '%s' has to be alone"
+msgid "'%s' has to be alone"
+msgstr "'%s' alanı yanlız olmalı"
-#: ../cli/src/connections.c:934
-msgid "Active connections"
-msgstr "Etkin bağlantılar"
+#. Add headers
+#: ../clients/cli/connections.c:1381
+#| msgid "NetworkManager status"
+msgid "NetworkManager active profiles"
+msgstr "NetworkManager etkin profilleri"
+
+#: ../clients/cli/connections.c:1382
+#| msgid "NetworkManager went to sleep"
+msgid "NetworkManager connection profiles"
+msgstr "NetworkManager bağlantı profilleri"
+
+#: ../clients/cli/connections.c:1422 ../clients/cli/connections.c:2205
+#: ../clients/cli/connections.c:2221 ../clients/cli/connections.c:2230
+#: ../clients/cli/connections.c:2240 ../clients/cli/connections.c:2250
+#: ../clients/cli/connections.c:2328 ../clients/cli/connections.c:8377
+#: ../clients/cli/connections.c:8594 ../clients/cli/devices.c:1867
+#: ../clients/cli/devices.c:1875 ../clients/cli/devices.c:2191
+#: ../clients/cli/devices.c:2198 ../clients/cli/devices.c:2212
+#: ../clients/cli/devices.c:2219 ../clients/cli/devices.c:2236
+#: ../clients/cli/devices.c:2244 ../clients/cli/devices.c:2432
+#: ../clients/cli/devices.c:2528 ../clients/cli/devices.c:2535
+#, c-format
+msgid "Error: %s argument is missing."
+msgstr "Hata: %s bağımsız değişken eksik."
-#: ../cli/src/connections.c:959
+#: ../clients/cli/connections.c:1437
#, 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."
+msgid "Error: %s - no such connection profile."
+msgstr "Hata: %s - böyle bir bağlantı profili yok."
-#: ../cli/src/connections.c:964
+#: ../clients/cli/connections.c:1496 ../clients/cli/connections.c:2273
+#: ../clients/cli/connections.c:8894 ../clients/cli/devices.c:2411
+#: ../clients/cli/devices.c:2879 ../clients/cli/general.c:518
+#: ../clients/cli/general.c:567 ../clients/cli/general.c:584
+#: ../clients/cli/general.c:623 ../clients/cli/general.c:637
+#: ../clients/cli/general.c:755 ../clients/cli/general.c:802
+#: ../clients/cli/general.c:822
#, c-format
-#| msgid "Unknown parameter: %s\n"
-msgid "Error: unknown parameter: %s"
-msgstr "Hata: bilinmeyen parametre: %s"
+msgid "Error: %s."
+msgstr "Hata: %s."
-#: ../cli/src/connections.c:1071
+#: ../clients/cli/connections.c:1591
#, c-format
msgid "no active connection on device '%s'"
msgstr "'%s' aygıtı üzerinde etkin bir bağlantı yok"
-#: ../cli/src/connections.c:1079
+#: ../clients/cli/connections.c:1599
msgid "no active connection or device"
msgstr "etkin bağlantı veya aygıt yok"
-#: ../cli/src/connections.c:1150
+#: ../clients/cli/connections.c:1670
#, 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:1153
+#: ../clients/cli/connections.c:1673
#, c-format
msgid "no device found for connection '%s'"
msgstr "'%s' bağlantısı için aygıt bulunamadı"
-#: ../cli/src/connections.c:1165
+#: ../clients/cli/connections.c:1685
msgid "unknown reason"
msgstr "bilinmeyen neden"
-#: ../cli/src/connections.c:1167
+#: ../clients/cli/connections.c:1687 ../clients/cli/general.c:272
msgid "none"
msgstr "yok"
-#: ../cli/src/connections.c:1169
+#: ../clients/cli/connections.c:1689
msgid "the user was disconnected"
msgstr "kullanıcı bağlantısı kesildi"
-#: ../cli/src/connections.c:1171
+#: ../clients/cli/connections.c:1691
msgid "the base network connection was interrupted"
msgstr "ana ağ bağlantısı yarıda kesildi"
-#: ../cli/src/connections.c:1173
+#: ../clients/cli/connections.c:1693
msgid "the VPN service stopped unexpectedly"
msgstr "VPN hizmeti beklenmedik bir biçimde durdu"
-#: ../cli/src/connections.c:1175
+#: ../clients/cli/connections.c:1695
msgid "the VPN service returned invalid configuration"
msgstr "VPN hizmeti geçersiz bir yapılandırma döndürdü"
-#: ../cli/src/connections.c:1177
+#: ../clients/cli/connections.c:1697
msgid "the connection attempt timed out"
msgstr "bağlantı denemesi zaman aşımına uğradı"
-#: ../cli/src/connections.c:1179
+#: ../clients/cli/connections.c:1699
msgid "the VPN service did not start in time"
msgstr "VPN hizmeti zamanında başlatılmadı"
-#: ../cli/src/connections.c:1181
+#: ../clients/cli/connections.c:1701
msgid "the VPN service failed to start"
msgstr "VPN hizmeti başlatılamadı"
-#: ../cli/src/connections.c:1183
+#: ../clients/cli/connections.c:1703
msgid "no valid VPN secrets"
msgstr "geçerli bir VPN parolası yok"
-#: ../cli/src/connections.c:1185
+#: ../clients/cli/connections.c:1705
msgid "invalid VPN secrets"
msgstr "geçersiz VPN parolaları"
-#: ../cli/src/connections.c:1187
+#: ../clients/cli/connections.c:1707
msgid "the connection was removed"
msgstr "bağlantı kaldırıldı"
-#: ../cli/src/connections.c:1204 ../cli/src/connections.c:1409
+#: ../clients/cli/connections.c:1729 ../clients/cli/connections.c:1757
+#: ../clients/cli/connections.c:1911 ../clients/cli/connections.c:6718
#, c-format
msgid "Connection successfully activated (D-Bus active path: %s)\n"
+msgstr "Bağlantı başarıyla etkinleştirildi (D-Bus etkin yolu: %s)\n"
+
+#: ../clients/cli/connections.c:1736
+#, c-format
+#| msgid "VPN connection successfully activated (D-Bus active path: %s)\n"
+msgid ""
+"Connection successfully activated (master waiting for slaves) (D-Bus active "
+"path: %s)\n"
msgstr ""
+"Bağlantı başarıyla etkinleştirildi (birincil bağlantı diğerlerini bekliyor) "
+"(D-Bus etkin yolu: %s)\n"
-#. Active connection failed and dissapeared, quit.
-#: ../cli/src/connections.c:1209 ../cli/src/connections.c:1310
+#: ../clients/cli/connections.c:1740 ../clients/cli/connections.c:1762
#, c-format
msgid "Error: Connection activation failed."
msgstr "Hata: Bağlantı etkinleştirilemedi."
-#: ../cli/src/connections.c:1234
+#: ../clients/cli/connections.c:1806
#, c-format
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:1242
+#: ../clients/cli/connections.c:1814
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "Hata: Bağlantı etkinleştirilemedi: %s."
-#: ../cli/src/connections.c:1339 ../cli/src/devices.c:1125
+#: ../clients/cli/connections.c:1833 ../clients/cli/devices.c:1320
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "Hata: %d saniye zaman aşımı sona erdi."
-#: ../cli/src/connections.c:1400
+#: ../clients/cli/connections.c:1893
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "Hata: Bağlantı etkinleştirilemedi: %s"
-#: ../cli/src/connections.c:1494 ../cli/src/connections.c:1649
-#: ../cli/src/connections.c:1777
+#: ../clients/cli/connections.c:1978
#, c-format
-msgid "Error: Unknown connection: %s."
-msgstr "Hata: Bilinmeyen bağlantı: %s."
+msgid "failed to read passwd-file '%s': %s"
+msgstr "'%s' passwd dosyası okunamadı: %s"
-#: ../cli/src/connections.c:1540 ../cli/src/devices.c:1210
-#: ../cli/src/devices.c:1756
+#: ../clients/cli/connections.c:1990
#, c-format
-msgid "Error: timeout value '%s' is not valid."
-msgstr "Hata: '%s' zaman aşımı değeri geçerli değil."
+msgid "missing colon in 'password' entry '%s'"
+msgstr "'%s' dosyasında 'password' girdi alanı eksik"
-#: ../cli/src/connections.c:1553 ../cli/src/connections.c:1666
-#: ../cli/src/connections.c:1757
+#: ../clients/cli/connections.c:1998
#, c-format
-msgid "Error: id or uuid has to be specified."
-msgstr "Hata: id veya uuid deÄŸeri belirtilmeli."
+msgid "missing dot in 'password' entry '%s'"
+msgstr "'%s' dosyasında 'password' girdisinde nokta eksik"
-#: ../cli/src/connections.c:1586
+#: ../clients/cli/connections.c:2011
#, c-format
-msgid "Error: No suitable device found: %s."
-msgstr "Hata: Uygun bir aygıt bulunamadı: %s."
+msgid "invalid setting name in 'password' entry '%s'"
+msgstr "'%s' dosyasında 'password' girdisinde geçersiz isim"
-#: ../cli/src/connections.c:1588
+#: ../clients/cli/connections.c:2059
#, c-format
-msgid "Error: No suitable device found."
-msgstr "Hata: Uygun bir aygıt bulunamadı."
+msgid ""
+"Warning: password for '%s' not given in 'passwd-file' and nmcli cannot ask "
+"without '--ask' option.\n"
+msgstr ""
+"Uyarı: '%s' kullanıcısı için parola 'passwd-doyasında' verilmemiş ve nmcli '"
+"--ask' seçeneği olmadan parola soramaz.\n"
-#: ../cli/src/connections.c:1702
+#: ../clients/cli/connections.c:2127 ../clients/cli/connections.c:2274
+#| msgid "Unknown error"
+msgid "unknown error"
+msgstr "bilinmeyen hata"
+
+#: ../clients/cli/connections.c:2135
#, c-format
-msgid "Warning: Connection not active\n"
-msgstr "Uyarı: Bağlantı etkin değil\n"
+#| msgid "Unknown log level '%s'"
+msgid "unknown device '%s'."
+msgstr "bilinmeyen aygıt '%s'."
+
+#: ../clients/cli/connections.c:2140
+#| msgid "no active connection or device"
+msgid "neither a valid connection nor device given"
+msgstr "geçerli bağlantı veya aygıt verilmedi"
-#: ../cli/src/connections.c:1716
+#: ../clients/cli/connections.c:2258 ../clients/cli/devices.c:1219
+#: ../clients/cli/devices.c:1881 ../clients/cli/devices.c:2255
+#: ../clients/cli/devices.c:2541
#, c-format
-#| msgid "Error: Connection activation failed: %s"
-msgid "Error: Connection deletion failed: %s"
-msgstr "Hata: Bağlantı silinemedi: %s"
+msgid "Unknown parameter: %s\n"
+msgstr "Bilinmeyen deÄŸiÅŸtirge: %s\n"
+
+#: ../clients/cli/connections.c:2282
+msgid "preparing"
+msgstr "hazırlanıyor"
-#: ../cli/src/connections.c:1837
+#: ../clients/cli/connections.c:2310 ../clients/cli/connections.c:8575
+#: ../clients/cli/connections.c:8689
#, c-format
-msgid "Error: 'con' command '%s' is not valid."
-msgstr "HATA: 'bağlantı' '%s' komutu geçerli değil"
+#| msgid "Error: Unknown connection: %s."
+msgid "Error: No connection specified."
+msgstr "Hata: Bağlantı belirtilmedi."
-#: ../cli/src/connections.c:1905
+#: ../clients/cli/connections.c:2338
#, c-format
-msgid "Error: could not connect to D-Bus."
-msgstr "Hata: D-Bus'a bağlanılamadı."
+msgid "Error: '%s' is not an active connection."
+msgstr "Hata: %s etkin bir bağlantı değil."
-#: ../cli/src/connections.c:1913
+#: ../clients/cli/connections.c:2639 ../clients/cli/utils.c:517
#, c-format
-msgid "Error: Could not get system settings."
-msgstr "Hata: Sistem ayarları alınamadı."
+msgid "'%s' not among [%s]"
+msgstr "'%s' [%s] arasında değil"
-#: ../cli/src/connections.c:1923
+#: ../clients/cli/connections.c:2718
#, 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."
+#| msgid "'%s' is not a valid MAC address"
+msgid "Error: '%s': '%s' is not a valid %s MAC address."
+msgstr "Hata: '%s': '%s' geçerli bir %s MAC adresi değildir."
-#. 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 "AYGIT"
+#. Ask for optional arguments
+#: ../clients/cli/connections.c:2719 ../clients/cli/connections.c:3181
+#: ../clients/tui/nm-editor-utils.c:164 ../libnm-core/nm-connection.c:1532
+#: ../libnm-glib/nm-device.c:1800 ../libnm/nm-device.c:1612
+msgid "InfiniBand"
+msgstr "InfiniBand"
-#. 0
-#: ../cli/src/devices.c:84
-msgid "CAPABILITIES"
-msgstr "YETENEKLER"
+#: ../clients/cli/connections.c:2719 ../clients/tui/nm-editor-utils.c:147
+#: ../libnm-glib/nm-device.c:1788 ../libnm/nm-device.c:1600
+msgid "Ethernet"
+msgstr "Ethernet"
-#. 1
-#: ../cli/src/devices.c:85
-msgid "WIFI-PROPERTIES"
-msgstr "WIFI-ÖZELLİKLER"
+#: ../clients/cli/connections.c:2739
+#, c-format
+#| msgid "Error: 'nm' command '%s' is not valid."
+msgid "Error: 'mtu': '%s' is not a valid MTU."
+msgstr "Hata: 'mtu': '%s' geçerli bir MTU değeri değil."
-#. 2
-#. 5
-#: ../cli/src/devices.c:86 ../cli/src/devices.c:170
-msgid "AP"
-msgstr "AP"
+#: ../clients/cli/connections.c:2755
+#, c-format
+#| msgid "Error: 'nm' command '%s' is not valid."
+msgid "Error: 'parent': '%s' is not a valid interface name."
+msgstr "Hata: 'parent': '%s' geçerli bir arayüz adı değil."
-#. 3
-#: ../cli/src/devices.c:87
-msgid "WIRED-PROPERTIES"
-msgstr "KABLOLU-ÖZELLİKLER"
+#: ../clients/cli/connections.c:2776
+#, c-format
+#| msgid "Error: 'dev' command '%s' is not valid."
+msgid "Error: 'p-key': '%s' is not a valid InfiniBand P_KEY."
+msgstr "Hata: 'p-key': '%s' geçerli bir InfiniBand P_KEY değeri değil."
-#. 4
-#: ../cli/src/devices.c:88
-msgid "WIMAX-PROPERTIES"
-msgstr "WIMAX-ÖZELLİKLERİ"
+#: ../clients/cli/connections.c:2821
+#, c-format
+#| msgid "Error: 'nm' command '%s' is not valid."
+msgid "Error: '%s': '%s' is not a valid %s %s."
+msgstr "Hata: '%s': '%s' geçerli bir %s %s değeri değil."
-#. 5
-#. 0
-#: ../cli/src/devices.c:89 ../cli/src/devices.c:217
-msgid "NSP"
-msgstr "NSP"
+#: ../clients/cli/connections.c:2834
+msgid "Wi-Fi mode"
+msgstr "Kablosuz kipi"
-#. 6
-#: ../cli/src/devices.c:90
-#| msgid "IP4-DNS"
-msgid "IP4"
-msgstr "IP4"
+#: ../clients/cli/connections.c:2843
+#| msgid "InfiniBand connection %d"
+msgid "InfiniBand transport mode"
+msgstr "InfiniBand taşıma kipi"
-#. 7
-#: ../cli/src/devices.c:91
-msgid "DHCP4"
-msgstr "DHCP4"
+#: ../clients/cli/connections.c:2856
+#, c-format
+#| msgid "Error: 'nm' command '%s' is not valid."
+msgid "Error: 'flags': '%s' is not valid; use <0-7>."
+msgstr "Hata: 'flags': '%s' geçerli değil; <0-7> kullanın."
-#. 8
-#: ../cli/src/devices.c:92
-#| msgid "IP6-DNS"
-msgid "IP6"
-msgstr "IP6"
+#: ../clients/cli/connections.c:2878
+#, c-format
+#| msgid "Error: 'nm' command '%s' is not valid."
+msgid "Error: '%s': '%s' is not valid; %s "
+msgstr "Hata: '%s': '%s' geçerli değil; %s "
-#. 9
-#: ../cli/src/devices.c:93
-msgid "DHCP6"
-msgstr "DHCP6"
+#: ../clients/cli/connections.c:3057
+#, c-format
+#| msgid "Error: 'nm' command '%s' is not valid."
+msgid "Error: '%s': '%s' is not valid; use <%u-%u>."
+msgstr "Hata: '%s': '%s' geçerli değil; <%u-%u> kullanın."
-#. 10
-#: ../cli/src/devices.c:94
-msgid "BOND"
-msgstr "BOND"
+#. Ask for optional arguments.
+#: ../clients/cli/connections.c:3113
+#, c-format
+#| msgid "Error: missing argument for '%s' option."
+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] "'%s' bağlantı türü için %d isteğe bağlı seçenek mevcut.\n"
+msgstr[1] "'%s' bağlantı türü için %d isteğe bağlı seçenek mevcut.\n"
-#. 11
-#: ../cli/src/devices.c:95
+#: ../clients/cli/connections.c:3116
+#, c-format
+msgid "Do you want to provide it? %s"
+msgid_plural "Do you want to provide them? %s"
+msgstr[0] "Bunu saÄŸlamak istiyor musunuz? %s"
+msgstr[1] "Bunları sağlamak istiyor musunuz? %s"
+
+#. Ask for optional arguments
+#: ../clients/cli/connections.c:3133
+msgid "ethernet"
+msgstr "ethernet"
+
+#: ../clients/cli/connections.c:3138 ../clients/cli/connections.c:3186
+#: ../clients/cli/connections.c:3320 ../clients/cli/connections.c:3399
+msgid "MTU [auto]: "
+msgstr "MTU [otomatik]: "
+
+#: ../clients/cli/connections.c:3149 ../clients/cli/connections.c:3197
+#: ../clients/cli/connections.c:3292 ../clients/cli/connections.c:3331
+#: ../clients/cli/connections.c:3703
+msgid "MAC [none]: "
+msgstr "MAC [hiçbiri]: "
+
+#: ../clients/cli/connections.c:3160
+msgid "Cloned MAC [none]: "
+msgstr "Klonlanmış MAC [hiçbiri]: "
+
+#: ../clients/cli/connections.c:3208
+#, c-format
+msgid "Transport mode %s"
+msgstr "Aktarım kipi %s"
+
+#: ../clients/cli/connections.c:3221
+msgid "Parent interface [none]: "
+msgstr "Üst arayüz [hiçbiri]: "
+
+#: ../clients/cli/connections.c:3232
+msgid "P_KEY [none]: "
+msgstr "P_KEY [hiçbiri]: "
+
+#: ../clients/cli/connections.c:3242
+#, c-format
+msgid "Error: 'p-key' is mandatory when 'parent' is specified.\n"
+msgstr "Hata: 'parent' belirtildiÄŸinde 'p-key' zorunludur.\n"
+
+#. Ask for optional arguments
+#: ../clients/cli/connections.c:3259 ../clients/tui/nm-editor-utils.c:155
+#: ../libnm-glib/nm-device.c:1790 ../libnm/nm-device.c:1602
+msgid "Wi-Fi"
+msgstr "Kablosuz"
+
+#: ../clients/cli/connections.c:3267
+#, c-format
+msgid "Mode %s"
+msgstr "Kip %s"
+
+#. Ask for optional 'wimax' arguments.
+#: ../clients/cli/connections.c:3287 ../libnm-glib/nm-device.c:1796
+#: ../libnm/nm-device.c:1608
+msgid "WiMAX"
+msgstr "WiMAX"
+
+#. Ask for optional 'pppoe' arguments.
+#: ../clients/cli/connections.c:3310
+msgid "PPPoE"
+msgstr "PPPoE"
+
+#: ../clients/cli/connections.c:3314 ../clients/cli/connections.c:3352
+msgid "Password [none]: "
+msgstr "Parola [hiçbiri]: "
+
+#: ../clients/cli/connections.c:3316
+msgid "Service [none]: "
+msgstr "Servis [hiçbiri]: "
+
+#. Ask for optional 'gsm' or 'cdma' arguments.
+#: ../clients/cli/connections.c:3346
+msgid "mobile broadband"
+msgstr "mobil geniÅŸ bant"
+
+#: ../clients/cli/connections.c:3350 ../clients/cli/connections.c:3775
+msgid "Username [none]: "
+msgstr "Kullanıcı adı [hiçbiri]: "
+
+#. Ask for optional 'bluetooth' arguments.
+#: ../clients/cli/connections.c:3365
+msgid "bluetooth"
+msgstr "bluetooth"
+
+#: ../clients/cli/connections.c:3372
+#, c-format
+msgid "Bluetooth type %s"
+msgstr "Bluetooth türü %s"
+
+#: ../clients/cli/connections.c:3378
+#, c-format
+#| msgid "Error: 'dev' command '%s' is not valid."
+msgid "Error: 'bt-type': '%s' is not a valid bluetooth type.\n"
+msgstr "Hata: 'bt-type': '%s' geçerli bir bluetooth türü değil.\n"
+
+#. Ask for optional 'vlan' arguments.
+#. 13
+#: ../clients/cli/connections.c:3394 ../clients/cli/devices.c:231
+#: ../clients/tui/nm-editor-utils.c:218 ../clients/tui/nmt-page-vlan.c:51
+#: ../libnm-core/nm-connection.c:1530 ../libnm-glib/nm-device.c:1808
+#: ../libnm-util/nm-connection.c:1612 ../libnm/nm-device.c:1620
msgid "VLAN"
msgstr "VLAN"
-#. 12
-#: ../cli/src/devices.c:96
-#| msgid "CONNECTION"
-msgid "CONNECTIONS"
-msgstr "BAÄžLANTILAR"
+#: ../clients/cli/connections.c:3410
+msgid "VLAN flags (<0-7>) [none]: "
+msgstr "VLAN bayrakları (<0-7>) [hiçbiri]: "
+
+#: ../clients/cli/connections.c:3421
+msgid "Ingress priority maps [none]: "
+msgstr "Giriş öncelikli haritalar [hiçbiri]: "
+
+#: ../clients/cli/connections.c:3432
+msgid "Egress priority maps [none]: "
+msgstr "Çıkış öncelikli haritalar [hiçbiri]: "
+
+#: ../clients/cli/connections.c:3443
+msgid "Bonding mode [balance-rr]: "
+msgstr "BirleÅŸtirme kipi [balance-rr]: "
+
+#. Ask for optional 'bond' arguments.
+#: ../clients/cli/connections.c:3459
+msgid "bond"
+msgstr "bond"
+
+#: ../clients/cli/connections.c:3481
+msgid "Bonding primary interface [none]: "
+msgstr "Birincil arayüz birleştiriliyor [hiçbiri]: "
+
+#: ../clients/cli/connections.c:3484
+#, c-format
+#| msgid "Error: 'nm' command '%s' is not valid."
+msgid "Error: 'primary': '%s' is not a valid interface name.\n"
+msgstr "Hata: 'birincil': '%s' geçerli bir arayüz adı değil.\n"
+
+#: ../clients/cli/connections.c:3492
+#, c-format
+msgid "Bonding monitoring mode %s"
+msgstr "%s izleme kipi birleÅŸtiriliyor"
+
+#: ../clients/cli/connections.c:3498
+#, 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 "Hata: '%s' geçerli bir izleme kipi değil, '%s' veya '%s' kullanın.\n"
+
+#: ../clients/cli/connections.c:3507
+msgid "Bonding miimon [100]: "
+msgstr "miimon birleÅŸtiriliyor[100]: "
+
+#: ../clients/cli/connections.c:3510
+#, c-format
+#| msgid "Error: 'nm' command '%s' is not valid."
+msgid "Error: 'miimon': '%s' is not a valid number <0-%u>.\n"
+msgstr "Hata: 'miimon': '%s' geçerli bir sayı değil <0-%u>.\n"
+
+#: ../clients/cli/connections.c:3518
+msgid "Bonding downdelay [0]: "
+msgstr "downdelay birleÅŸtiriliyor [0]: "
+
+#: ../clients/cli/connections.c:3521
+#, c-format
+#| msgid "Error: 'dev' command '%s' is not valid."
+msgid "Error: 'downdelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "Hata: 'downdelay': '%s' geçerli bir sayı değil <0-%u>.\n"
+
+#: ../clients/cli/connections.c:3529
+msgid "Bonding updelay [0]: "
+msgstr "updelay birleÅŸtiriliyor [0]: "
+
+#: ../clients/cli/connections.c:3532
+#, c-format
+#| msgid "Error: 'dev' command '%s' is not valid."
+msgid "Error: 'updelay': '%s' is not a valid number <0-%u>.\n"
+msgstr "Hata: 'updelay': '%s' geçerli bir sayı değil <0-%u>.\n"
+
+#: ../clients/cli/connections.c:3541
+msgid "Bonding arp-interval [0]: "
+msgstr "arp-interval birleÅŸtiriliyor [0]: "
+
+#: ../clients/cli/connections.c:3544
+#, c-format
+#| msgid "Error: bssid argument value '%s' is not a valid BSSID."
+msgid "Error: 'arp-interval': '%s' is not a valid number <0-%u>.\n"
+msgstr "Hata: 'arp-interval': '%s' geçerli bir sayı değil <0-%u>.\n"
+
+#. FIXME: verify the string
+#: ../clients/cli/connections.c:3552
+msgid "Bonding arp-ip-target [none]: "
+msgstr "arp-ip-target birleştiriliyor [hiçbiri]: "
+
+#: ../clients/cli/connections.c:3559
+msgid "LACP rate ('slow' or 'fast') [slow]: "
+msgstr "LACP değeri ('yavaş' veya 'hızlı')[yavaş]: "
+
+#: ../clients/cli/connections.c:3565
+#, c-format
+msgid "Error: 'lacp_rate': '%s' is invalid ('slow' or 'fast').\n"
+msgstr "Hata: 'lacp_rate': '%s' geçerli değil ('yavaş' veya 'hızlı').\n"
+
+#: ../clients/cli/connections.c:3588
+msgid "Team JSON configuration [none]: "
+msgstr "Takım JSON yapılandırması [hiçbiri]: "
+
+#: ../clients/cli/connections.c:3605
+msgid "team"
+msgstr "takım"
+
+#: ../clients/cli/connections.c:3611
+msgid "team-slave"
+msgstr "takım-ikincil"
+
+#. Ask for optional 'bridge' arguments.
+#: ../clients/cli/connections.c:3623
+#| msgid "Bridge"
+msgid "bridge"
+msgstr "köprü"
+
+#: ../clients/cli/connections.c:3629
+#, c-format
+msgid "Enable STP %s"
+msgstr "STP %s etkinleÅŸtir"
+
+#: ../clients/cli/connections.c:3634
+#, c-format
+#| msgid "Error: 'con list': %s"
+msgid "Error: 'stp': %s.\n"
+msgstr "Hata: 'stp': %s.\n"
+
+#: ../clients/cli/connections.c:3642
+msgid "STP priority [32768]: "
+msgstr "STP önceliği [32768]: "
+
+#: ../clients/cli/connections.c:3646
+#, c-format
+#| msgid "Error: 'con' command '%s' is not valid."
+msgid "Error: 'priority': '%s' is not a valid number <0-%d>.\n"
+msgstr "Hata: 'priority': '%s' geçerli bir sayı değil <0-%d>.\n"
+
+#: ../clients/cli/connections.c:3654
+msgid "Forward delay [15]: "
+msgstr "Ä°letim gecikmesi [15]: "
+
+#: ../clients/cli/connections.c:3658
+#, c-format
+#| msgid "Error: 'nm' command '%s' is not valid."
+msgid "Error: 'forward-delay': '%s' is not a valid number <2-30>.\n"
+msgstr "Hata: 'forward-delay': '%s' geçerli bir sayı değil <2-30>.\n"
+
+#: ../clients/cli/connections.c:3667
+msgid "Hello time [2]: "
+msgstr "Selamlaşma zamanı [2]: "
+
+#: ../clients/cli/connections.c:3671
+#, c-format
+#| msgid "Error: timeout value '%s' is not valid."
+msgid "Error: 'hello-time': '%s' is not a valid number <1-10>.\n"
+msgstr "Hata: 'hello-time': '%s' geçerli bir sayı değil <1-10>.\n"
+
+#: ../clients/cli/connections.c:3679
+msgid "Max age [20]: "
+msgstr "En fazla yaÅŸ [20]: "
+
+#: ../clients/cli/connections.c:3683
+#, c-format
+#| msgid "Error: 'nm' command '%s' is not valid."
+msgid "Error: 'max-age': '%s' is not a valid number <6-40>.\n"
+msgstr "Hata: 'max-age': '%s' geçerli bir sayı değil <6-40>.\n"
+
+#: ../clients/cli/connections.c:3691
+msgid "MAC address ageing time [300]: "
+msgstr "MAC adresi yaşlanma zamanı [300]: "
+
+#: ../clients/cli/connections.c:3695
+#, c-format
+#| msgid "Error: bssid argument value '%s' is not a valid BSSID."
+msgid "Error: 'ageing-time': '%s' is not a valid number <0-1000000>.\n"
+msgstr "Hata: 'ageing-time': '%s' geçerli bir sayı değil <0-1000000>.\n"
+
+#. Ask for optional 'bridge-slave' arguments.
+#: ../clients/cli/connections.c:3722
+msgid "bridge-slave"
+msgstr "bridge-slave"
+
+#: ../clients/cli/connections.c:3727
+msgid "Bridge port priority [32]: "
+msgstr "Köprü bağlantı noktası önceliği [32]: "
+
+#: ../clients/cli/connections.c:3740
+msgid "Bridge port STP path cost [100]: "
+msgstr "Köprü bağlantı noktası STP yol maliyeti [100]: "
+
+#: ../clients/cli/connections.c:3754
+#, c-format
+msgid "Hairpin %s"
+msgstr "Hairpin %s"
+
+#: ../clients/cli/connections.c:3759
+#, c-format
+#| msgid "Error: 'dev wifi': %s"
+msgid "Error: 'hairpin': %s.\n"
+msgstr "Hata: 'hairpin': %s.\n"
+
+#. Ask for optional 'olpc' arguments.
+#: ../clients/cli/connections.c:3786 ../libnm-glib/nm-device.c:1794
+#: ../libnm/nm-device.c:1606
+msgid "OLPC Mesh"
+msgstr "OLPC Mesh"
+
+#: ../clients/cli/connections.c:3791
+msgid "OLPC Mesh channel [1]: "
+msgstr "OLPC Mesh kanalı [1]: "
+
+#: ../clients/cli/connections.c:3794
+#, c-format
+#| msgid "Error: 'nm' command '%s' is not valid."
+msgid "Error: 'channel': '%s' is not a valid number <1-13>.\n"
+msgstr "Hata: 'channel': '%s' geçerli bir sayı değil <1-13>.\n"
+
+#: ../clients/cli/connections.c:3802
+msgid "DHCP anycast MAC address [none]: "
+msgstr "DHCP anycast MAC adresi [none]: "
+
+#: ../clients/cli/connections.c:3847
+msgid "IPv4 address (IP[/plen] [gateway]) [none]: "
+msgstr "IPv4 adresi (IP[/plen] [ağ geçidi]) [hiçbiri]: "
+
+#: ../clients/cli/connections.c:3849
+msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
+msgstr "IPv6 adresi (IP[/plen] [ağ geçidi]) [hiçbiri]: "
+
+#: ../clients/cli/connections.c:3867
+#, c-format
+msgid " Address successfully added: %s %s\n"
+msgstr " Adres başarıyla eklendi: %s %s\n"
+
+#: ../clients/cli/connections.c:3869
+#, c-format
+msgid " Warning: address already present: %s %s\n"
+msgstr " Uyarı: adres zaten var: %s %s\n"
+
+#: ../clients/cli/connections.c:3871
+#, c-format
+msgid " Warning: ignoring garbage at the end: '%s'\n"
+msgstr " Uyarı: sondaki yanlışlık görmezden geliniyor: '%s'\n"
+
+#: ../clients/cli/connections.c:3873 ../clients/cli/connections.c:4714
+#: ../clients/cli/connections.c:4775 ../clients/cli/connections.c:5177
+#: ../clients/cli/connections.c:5187
+#| msgid "Error: %s."
+msgid "Error: "
+msgstr "Hata: "
+
+#. Ask for IP addresses
+#: ../clients/cli/connections.c:3890
+#, c-format
+msgid "Do you want to add IP addresses? %s"
+msgstr "IP adresleri eklemek istiyor musunuz? %s"
+
+#: ../clients/cli/connections.c:3897
+#, c-format
+msgid "Press <Enter> to finish adding addresses.\n"
+msgstr "Adres eklemeyi tamamlamak için <Enter> tuşuna basın.\n"
+
+#: ../clients/cli/connections.c:4036
+#, c-format
+msgid "Error: 'parent': not valid without 'p-key'."
+msgstr "Hata: 'parent': 'p-key' olmadan geçerli değil."
+
+#: ../clients/cli/connections.c:4091 ../clients/cli/connections.c:5096
+#| msgid "SSID"
+msgid "SSID: "
+msgstr "SSID: "
+
+#: ../clients/cli/connections.c:4094 ../clients/cli/connections.c:5099
+#| msgid "Error: Timeout %d sec expired."
+msgid "Error: 'ssid' is required."
+msgstr "Hata: 'ssid' gerekli."
+
+#: ../clients/cli/connections.c:4158
+#| msgid "WiMAX NSP list"
+msgid "WiMAX NSP name: "
+msgstr "WiMAX NSP adı: "
+
+#: ../clients/cli/connections.c:4161
+msgid "Error: 'nsp' is required."
+msgstr "Hata: 'nsp' gereklidir."
+
+#: ../clients/cli/connections.c:4213
+msgid "PPPoE username: "
+msgstr "PPPoE kullanıcı adı: "
+
+#: ../clients/cli/connections.c:4216
+#| msgid "Error: Timeout %d sec expired."
+msgid "Error: 'username' is required."
+msgstr "Hata: 'kullanıcı adı' gereklidir."
+
+#: ../clients/cli/connections.c:4285
+msgid "APN: "
+msgstr "APN: "
+
+#: ../clients/cli/connections.c:4288
+msgid "Error: 'apn' is required."
+msgstr "Hata: 'apn' gereklidir."
+
+#: ../clients/cli/connections.c:4346
+msgid "Bluetooth device address: "
+msgstr "Bluetooth aygıt adresi: "
+
+#: ../clients/cli/connections.c:4349
+#| msgid "Error: Timeout %d sec expired."
+msgid "Error: 'addr' is required."
+msgstr "Hata: 'addr' gereklidir."
+
+#: ../clients/cli/connections.c:4390
+#, c-format
+msgid "Error: 'bt-type': '%s' not valid; use [%s, %s (%s), %s]."
+msgstr "Hata: 'bt-type': '%s' geçerli değil; [%s, %s (%s), %s] kullanın."
+
+#: ../clients/cli/connections.c:4434
+#| msgid "no device found for connection '%s'"
+msgid "VLAN parent device or connection UUID: "
+msgstr "VLAN üst aygıtı veya bağlantı UUID: "
+
+#: ../clients/cli/connections.c:4437
+#| msgid "Error: 'dev list': %s"
+msgid "Error: 'dev' is required."
+msgstr "Hata: 'dev' gereklidir."
+
+#: ../clients/cli/connections.c:4441
+msgid "VLAN ID <0-4095>: "
+msgstr "VLAN ID <0-4095>: "
+
+#: ../clients/cli/connections.c:4444
+#| msgid "Error: Timeout %d sec expired."
+msgid "Error: 'id' is required."
+msgstr "Hata: 'id' gereklidir."
+
+#: ../clients/cli/connections.c:4450
+#, c-format
+#| msgid "Error: 'dev' command '%s' is not valid."
+msgid "Error: 'id': '%s' is not valid; use <0-4095>."
+msgstr "Hata: 'id': '%s' geçerli değil; <0-4095> kullanın."
+
+#: ../clients/cli/connections.c:4460
+#, c-format
+msgid "Error: 'dev': '%s' is neither UUID, interface name, nor MAC."
+msgstr "Hata: 'dev': '%s', UUID, arayüz adı veya MAC değil."
+
+#: ../clients/cli/connections.c:4594
+#, c-format
+#| msgid "Error: 'dev list': %s"
+msgid "Error: 'mode': %s."
+msgstr "Hata: 'kip': %s."
+
+#: ../clients/cli/connections.c:4603
+#, c-format
+#| msgid "Error: 'nm' command '%s' is not valid."
+msgid "Error: 'primary': '%s' is not a valid interface name."
+msgstr "Hata: 'primary': '%s' geçerli bir arayüz adı değil."
+
+#: ../clients/cli/connections.c:4655 ../clients/cli/connections.c:4753
+#: ../clients/cli/connections.c:4955
+#| msgid "Error: Timeout %d sec expired."
+msgid "Error: 'master' is required."
+msgstr "Hata: 'master' gereklidir."
+
+#: ../clients/cli/connections.c:4661 ../clients/cli/connections.c:4759
+#: ../clients/cli/connections.c:4961
+#, c-format
+msgid "Warning: master='%s' doesn't refer to any existing profile.\n"
+msgstr "Uyarı: master='%s' mevcut bir profile karşılık gelmiyor.\n"
+
+#: ../clients/cli/connections.c:4664 ../clients/cli/connections.c:4767
+#: ../clients/cli/connections.c:4964
+#, c-format
+msgid ""
+"Warning: 'type' is currently ignored. We only support ethernet slaves for "
+"now.\n"
+msgstr ""
+"Uyarı: 'type' şimdilik yoksayıldı. Şimdi sadece ikincil ethernetleri "
+"destekliyoruz .\n"
+
+#: ../clients/cli/connections.c:4861
+#, c-format
+#| msgid "Error: 'con list': %s"
+msgid "Error: 'stp': %s."
+msgstr "Hata: 'stp': %s."
+
+#: ../clients/cli/connections.c:4991
+#, c-format
+#| msgid "Error: 'dev wifi': %s"
+msgid "Error: 'hairpin': %s."
+msgstr "Hata: 'hairpin': %s."
+
+#: ../clients/cli/connections.c:5044
+msgid "Error: 'vpn-type' is required."
+msgstr "Hata: 'vpn-type' gereklidir."
+
+#: ../clients/cli/connections.c:5051
+#, c-format
+msgid "Warning: 'vpn-type': %s not known.\n"
+msgstr "Uyarı: 'vpn-type': %s bilinmiyor.\n"
+
+#: ../clients/cli/connections.c:5112
+#, c-format
+#| msgid "Error: 'nm' command '%s' is not valid."
+msgid "Error: 'channel': '%s' is not valid; use <1-13>."
+msgstr "Hata: 'kanal': '%s' geçerli değil; <1-13> kullanın."
+
+#: ../clients/cli/connections.c:5144
+#, c-format
+#| msgid "Error: '%s' is not an active connection."
+msgid "Error: '%s' is not a valid connection type."
+msgstr "Hata: '%s' geçerli bir bağlantı türü değil."
+
+#: ../clients/cli/connections.c:5244
+#, c-format
+#| msgid "Error: Failed to add/activate new connection: (%d) %s"
+msgid "Error: Failed to add '%s' connection: %s"
+msgstr "Hata: '%s' bağlantısı eklenemedi: %s"
+
+#: ../clients/cli/connections.c:5249
+#, c-format
+msgid "Connection '%s' (%s) successfully added.\n"
+msgstr "'%s' (%s) bağlantısı başarıyla eklendi.\n"
+
+#: ../clients/cli/connections.c:5469
+#, c-format
+#| msgid "Error: '%s' argument is missing."
+msgid "Error: 'type' argument is required."
+msgstr "Hata: 'tür' değişkeni gereklidir."
+
+#: ../clients/cli/connections.c:5477
+#, c-format
+#| msgid "Error: Unknown connection: %s."
+msgid "Error: invalid connection type; %s."
+msgstr "Hata: geçersiz bağlantı türü; %s."
+
+#: ../clients/cli/connections.c:5486
+#, c-format
+#| msgid "Error: 'con list': %s"
+msgid "Error: 'autoconnect': %s."
+msgstr "Hata: 'otomatik baÄŸlan': %s."
+
+#: ../clients/cli/connections.c:5496
+#, c-format
+#| msgid "Error: 'nm status': %s"
+msgid "Error: 'save': %s."
+msgstr "Hata: 'kaydet': %s."
+
+#: ../clients/cli/connections.c:5512
+msgid "Interface name [*]: "
+msgstr "Arayüz adı [*]: "
+
+#: ../clients/cli/connections.c:5517
+#, c-format
+#| msgid "Error: '%s' argument is missing."
+msgid "Error: 'ifname' argument is required."
+msgstr "Hata: 'ifname' deÄŸiÅŸkeni gereklidir."
+
+#: ../clients/cli/connections.c:5524
+#, c-format
+#| msgid "Error: '%s' is not valid argument for '%s' option."
+msgid "Error: 'ifname': '%s' is not a valid interface nor '*'."
+msgstr "Hata: 'ifname': '%s' geçerli bir arayüz veya '*' değil."
+
+#: ../clients/cli/connections.c:6300
+#, c-format
+msgid "['%s' setting values]\n"
+msgstr "['%s' değerleri ayarlıyor]\n"
+
+#. TRANSLATORS: do not translate command names and keywords before ::
+#. * However, you should translate terms enclosed in <>.
+#.
+#: ../clients/cli/connections.c:6382
+#, 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 | fix] :: 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 ""
+"---[ Ana menü ]---\n"
+"goto [<ayar> | <özellik>] :: bir ayara veya özelliğe git\n"
+"remove <ayar>[.<özellik>] | <prop> :: ayarı kaldır veya özellik değerini "
+"sıfırla\n"
+"set [<ayar>.<özellik> <değer>] :: özellik değerini ayarla\n"
+"describe [<ayar>.<özellik>] :: özelliği tanımla\n"
+"print [tümü | <ayar>[.<özellik>]] :: bağlantıyı yazdır\n"
+"verify [tümü | fix] :: bağlantıyı doğrula\n"
+"save [kalıcı|geçici] :: bağlantıyı kaydet\n"
+"activate [<ifname>] [/<ap>|<nsp>] :: bağlantıyı etkinleştir\n"
+"back :: bir seviye yukarı çık (geri)\n"
+"help/? [<komut>] :: bu yardımı yazdır\n"
+"nmcli <yapılandırma-seçeneği> <değer> :: nmcli yapılandırması\n"
+"quit :: çık nmcli\n"
+
+#: ../clients/cli/connections.c:6409
+#, 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 <ayar>[.<özellik>] | <özellik> :: düzenlemek için ayarı/özelliği "
+"girin\n"
+"\n"
+"Bu komut bir ayar veya özelliği düzenlemek için girer.\n"
+"\n"
+"Örnekler: nmcli> goto connection\n"
+" nmcli connection> goto secondaries\n"
+" nmcli> goto ipv4.addresses\n"
+
+#: ../clients/cli/connections.c:6416
+#, 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 <ayar>[.<özellik>] :: ayarı kaldır veya özellik değerini sıfırla\n"
+"\n"
+"Bu komut bağlantının tüm ayarlarını kaldırır, veya bir özellik verilmişse\n"
+"onu varsayılan değerine sıfırlar.\n"
+"\n"
+"Örnekler: nmcli> remove wifi-sec\n"
+" nmcli> remove eth.mtu\n"
+
+#: ../clients/cli/connections.c:6423
+#, 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 [<ayar>.<özellik> <değer>] :: özelliğin değerini ayarla\n"
+"\n"
+"Bu komut bir özelliğin değerini ayarlar.\n"
+"\n"
+"Örnek: nmcli> set con.id Bağlantım\n"
+
+#: ../clients/cli/connections.c:6428
+#, 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 [<ayar>.<özellik>] :: özellik tanımla\n"
+"\n"
+"Özellik tanımını gösterir. Tüm NM ayarlarını ve özelliklerini görmek için nm-"
+"settings(5) kılavuz sayfasına bakabilirsiniz.\n"
+
+#: ../clients/cli/connections.c:6433
+#, 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] :: ayarı veya bağlantı değerini yazdır\n"
+"\n"
+"Mevcut özelliği veya tüm bağlantıyı gösterir.\n"
+"\n"
+"Örnek: nmcli ipv4> print all\n"
+
+#: ../clients/cli/connections.c:6438
+#, c-format
+msgid ""
+"verify [all | fix] :: verify setting or connection validity\n"
+"\n"
+"Verifies whether the setting or connection is valid and can be saved later.\n"
+"It indicates invalid values on error. Some errors may be fixed "
+"automatically\n"
+"by 'fix' option.\n"
+"\n"
+"Examples: nmcli> verify\n"
+" nmcli> verify fix\n"
+" nmcli bond> verify\n"
+msgstr ""
+"verify [all | fix] :: ayarların veya bağlantının geçerliliğini onayla\n"
+"\n"
+"Ayarın veya bağlantının geçerli olduğunu ve ileride kaydedilebileceğini "
+"onaylar.\n"
+"Geçersiz değerleri hatalarda gösterir. Bazı hatalar \n"
+"'fix' seçeneği ile düzeltilebilir.\n"
+"\n"
+"Örnekler: nmcli> verify\n"
+" nmcli> verify fix\n"
+" nmcli bond> verify\n"
+
+#: ../clients/cli/connections.c:6447
+#, 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] :: bağlantıyı kaydet\n"
+"\n"
+"Bağlantı profilini NetworkManager'a ya kalıcı olarak kaydetmesi için ya da\n"
+"sadece bellekte tutması için gönderir. 'save' seçeneğini parametre olmadan "
+"kullanmak\n"
+"'save persistent'. anlamına gelir.\n"
+"Bir kere profili kalıcı olarak kaydettiğinizde bu ayarlar yeniden başlatma "
+"sonrasında da\n"
+"geçerli olacağını unutmayın. Sonra yapacağınız değişiklikler de kalıcı veya "
+"geçici olabilir\n"
+"ama geçici değişiklikler yeniden başlatma sonrasında silineceklerdir.\n"
+"Kalıcı bir bağlantıyı tamamen kaldırmak isterseniz\n"
+"bağlantı profilini silmeniz gerekir.\n"
+
+#: ../clients/cli/connections.c:6458
+#, 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>] :: bağlantıyı etkinleştir\n"
+"\n"
+"Bağlantıyı etkinleştirir.\n"
+"\n"
+"Kullanılabilir seçenekler:\n"
+"<ifname> - bağlantısı etkinleştirilecek aygıt\n"
+"/<ap>|<nsp> - AP (Wi-Fi) veya NSP (WiMAX) (<ifname> belirtilmediÄŸinde)\n"
+
+#: ../clients/cli/connections.c:6465 ../clients/cli/connections.c:6623
+#, c-format
+msgid ""
+"back :: go to upper menu level\n"
+"\n"
+msgstr ""
+"back :: bir üst menüye git\n"
+"\n"
+
+#: ../clients/cli/connections.c:6468
+#, c-format
+msgid ""
+"help/? [<command>] :: help for the nmcli commands\n"
+"\n"
+msgstr ""
+"help/? [<komut>] :: nmcli komutları için yardım\n"
+"\n"
+
+#: ../clients/cli/connections.c:6471
+#, 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"
+"show-secrets yes | no [default: no]\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 [<yapılandırma seçeneği> <değer>] :: nmcli yapılandırması\n"
+"\n"
+"nmcli'yi yapılandırır. Aşağıdaki seçenekler kullanılabilir:\n"
+"status-line yes | no [varsayılan: no]\n"
+"save-confirmation yes | no [varsayılan yes]\n"
+"show-secrets yes | no [varsayılan: no]\n"
+"prompt-color <0-8> [varsayılan: 0]\n"
+" 0 = normal\n"
+" 1 = siyah\n"
+" 2 = kırmızı\n"
+" 3 = yeÅŸil\n"
+" 4 = sarı\n"
+" 5 = mavi[0m\n"
+" 6 = eflatun\n"
+" 7 = cam göbeği[0m\n"
+" 8 = beyaz\n"
+"\n"
+"Örnekler: nmcli> nmcli status-line yes\n"
+" nmcli> nmcli save-confirmation no\n"
+" nmcli> nmcli prompt-color 3\n"
+
+#: ../clients/cli/connections.c:6492 ../clients/cli/connections.c:6629
+#, 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 uygulamasından çık\n"
+"\n"
+"Bu komutla nmcli uygulamasından çıkılır. Düzenlenen bağlantı kaydedilmemişse "
+"çıkışta kullanıcıya ne yapılacağı sorulur.\n"
+
+#: ../clients/cli/connections.c:6497 ../clients/cli/connections.c:6634
+#: ../clients/cli/connections.c:7044 ../clients/cli/connections.c:7960
+#, c-format
+#| msgid "Unknown log domain '%s'"
+msgid "Unknown command: '%s'\n"
+msgstr "Bilinmeyen komut: '%s'\n"
+
+#. TRANSLATORS: do not translate command names and keywords before ::
+#. * However, you should translate terms enclosed in <>.
+#.
+#: ../clients/cli/connections.c:6563
+#, 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 ""
+"---[ Özelllek menüsü ]---\n"
+"set [<deÄŸer>] :: yeni deÄŸer ata\n"
+"add [<değer>] :: özelliğe yeni seçenek ekle\n"
+"change :: mevcut deÄŸeri deÄŸiÅŸtir\n"
+"remove [<indeks> | <seçenek>] :: değeri sil\n"
+"describe :: özelliği tanımla\n"
+"print [ayar | bağlantı] :: özellik (ayar/bağlantı) değerini yazdır\n"
+"back :: bir üst seviyeye git\n"
+"help/? [<komut>] :: bu yardımı veya komut tanımlamasını "
+"yazdır\n"
+"quit :: nmcli uygulamasından çık\n"
+
+#: ../clients/cli/connections.c:6588
+#, c-format
+msgid ""
+"set [<value>] :: set new value\n"
+"\n"
+"This command sets provided <value> to this property\n"
+msgstr ""
+"set [<deÄŸer>] :: yeni deÄŸer ata\n"
+"\n"
+"Bu komut verilen <değeri> bu özelliğe atar\n"
+
+#: ../clients/cli/connections.c:6592
+#, 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 [<değer>] :: özelliğe yeni bir değer ekler\n"
+"\n"
+"Eğer özellik bir kap çeşidi ise bu komut bu özelliğe verilen <değeri> ekler. "
+"Tek değerli bir özellik ise bu değerin üzerine yazılır ('set' ile aynı "
+"işlevi görür).\n"
+
+#: ../clients/cli/connections.c:6598
+#, c-format
+msgid ""
+"change :: change current value\n"
+"\n"
+"Displays current value and allows editing it.\n"
+msgstr ""
+"change :: mevcut deÄŸeri deÄŸiÅŸtir\n"
+"\n"
+"Mevcut değeri görüntüler ve düzenlenmesine izin verir.\n"
+
+#: ../clients/cli/connections.c:6602
+#, 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 [<değer>|<indeks>|<seçenek adı>] :: değeri sil\n"
+"\n"
+"Özelliğin değerini siler. Tek değerli özellikler için özelliğin varsayılan "
+"deÄŸerini\n"
+"geri yükler. Kap türündeki özellikler için özelliğin bütün değerlerini "
+"siler\n"
+"veya tek bir ögeyi ya da seçeneği silmesini sağlayacak parametre de\n"
+"kullanabilirsiniz. Bu parametre bir değer veya silinecek ögenin indeksi\n"
+"veya seçenek adı (seçenek adına sahip özellikler için) olabilir.\n"
+"\n"
+"Örnekler: nmcli ipv4.dns> remove 8.8.8.8\n"
+" nmcli ipv4.dns> remove 2\n"
+" nmcli bond.options> remove downdelay\n"
+"\n"
+
+#: ../clients/cli/connections.c:6613
+#, 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 :: özellik tanımla\n"
+"\n"
+"Özellik tanımını gösterir. Tüm NM ayarlarını ve özelliklerini görmek için nm-"
+"settings(5) kılavuz sayfasına bakabilirsiniz.\n"
+
+#: ../clients/cli/connections.c:6618
+#, 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"
+"Özellik değerlerini gösterir. Bir değişken belirterek, tüm ayar ve "
+"bağlantılar için değerleri de gösterebilirsiniz.\n"
+
+#: ../clients/cli/connections.c:6626
+#, c-format
+msgid ""
+"help/? [<command>] :: help for nmcli commands\n"
+"\n"
+msgstr ""
+"help/? [<komut>] :: nmcli komutları için yardım\n"
+"\n"
+
+#: ../clients/cli/connections.c:6724
+#, c-format
+#| msgid "Error: Connection activation failed."
+msgid "Error: Connection activation failed.\n"
+msgstr "Hata: Bağlantı etkinleştirilemedi.\n"
+
+#: ../clients/cli/connections.c:6807
+#, c-format
+msgid "Error: setting '%s' is mandatory and cannot be removed.\n"
+msgstr "Hata: '%s' ayarı zorunludur ve kaldırılamaz.\n"
+
+#. TRANSLATORS: status line in nmcli connection editor
+#: ../clients/cli/connections.c:6825
+#, c-format
+msgid "[ Type: %s | Name: %s | UUID: %s | Dirty: %s | Temp: %s ]\n"
+msgstr "[ Tür: %s | İsim: %s | UUID: %s | Kirli: %s | Geçici: %s ]\n"
+
+#: ../clients/cli/connections.c:6860
+#, c-format
+msgid "The connection is not saved. Do you really want to quit? %s"
+msgstr "Bağlantı kaydedilmedi. Gerçekten çıkmak istiyor musunuz? %s"
+
+#: ../clients/cli/connections.c:6905
+#, 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 ""
+"Bağlantı profili başka bir istemciden kaldırıldı. Ama menüden 'kaydet'e "
+"tıklayarak geri yükleyebilirsiniz.\n"
+
+#: ../clients/cli/connections.c:6927 ../clients/cli/connections.c:7348
+#: ../clients/cli/connections.c:7403
+#, c-format
+msgid "Enter '%s' value: "
+msgstr "'%s' deÄŸerini girin: "
+
+#: ../clients/cli/connections.c:6942 ../clients/cli/connections.c:6964
+#: ../clients/cli/connections.c:7352 ../clients/cli/connections.c:7408
+#, c-format
+msgid "Error: failed to set '%s' property: %s\n"
+msgstr "Hata: '%s' özelliği ayarlanamadı: %s\n"
+
+#: ../clients/cli/connections.c:6958
+#, c-format
+msgid "Edit '%s' value: "
+msgstr "'%s' değerini düzenle: "
+
+#: ../clients/cli/connections.c:6987
+#, c-format
+#| msgid "Error: %s."
+msgid "Error: %s\n"
+msgstr "Hata: %s\n"
+
+#: ../clients/cli/connections.c:6993 ../clients/cli/connections.c:7487
+#: ../clients/cli/connections.c:7528
+#, c-format
+msgid "Error: failed to remove value of '%s': %s\n"
+msgstr "Hata: '%s' değeri kaldırılamadı: %s\n"
+
+#: ../clients/cli/connections.c:7014
+#, c-format
+#| msgid "Unknown parameter: %s\n"
+msgid "Unknown command argument: '%s'\n"
+msgstr "Bilinmeyen komut deÄŸiÅŸkeni: '%s'\n"
+
+#: ../clients/cli/connections.c:7140
+#, c-format
+msgid "Available settings: %s\n"
+msgstr "Kullanılabilir ayarlar: %s\n"
+
+#: ../clients/cli/connections.c:7149
+#, c-format
+#| msgid "Error: invalid 'wifi' parameter: '%s'."
+msgid "Error: invalid setting name; %s\n"
+msgstr "Hata: geçersiz ayar adı: '%s'\n"
+
+#: ../clients/cli/connections.c:7166
+#, c-format
+msgid "Available properties: %s\n"
+msgstr "Kullanılabilir özellikler: %s\n"
+
+#: ../clients/cli/connections.c:7174
+#, c-format
+#| msgid "Error: %s."
+msgid "Error: property %s\n"
+msgstr "Hata: özellik %s\n"
+
+#: ../clients/cli/connections.c:7215
+#, 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 ""
+"Bağlantı 'autoconnect=yes' ile kaydediliyor. Bu bağlantının hemen "
+"etkinleÅŸtirilmesine neden olur.\n"
+"Yine de kaydetmek istiyor musunuz? %s"
+
+#: ../clients/cli/connections.c:7290
+#, c-format
+msgid "You may edit the following settings: %s\n"
+msgstr "Bu ayarları değiştirebilirsiniz: %s\n"
+
+#: ../clients/cli/connections.c:7317
+#, c-format
+msgid ""
+"The connection profile has been removed from another client. You may type "
+"'save' to restore it.\n"
+msgstr ""
+"Bağlantı profili başka bir istemciden kaldırıldı. 'Kaydet' ile geri "
+"yükleyebilirsiniz.\n"
+
+#: ../clients/cli/connections.c:7346 ../clients/cli/connections.c:7401
+#, c-format
+msgid "Allowed values for '%s' property: %s\n"
+msgstr "'%s' özelliği için izin verilen değerler: %s\n"
+
+#: ../clients/cli/connections.c:7356 ../clients/cli/connections.c:7570
+#, c-format
+#| msgid "Error: Connection deletion failed: %s"
+msgid "Error: no setting selected; valid are [%s]\n"
+msgstr "Hata: hiç ayar seçilmedi; geçerli olanlar [%s]\n"
+
+#: ../clients/cli/connections.c:7357
+#, c-format
+msgid "use 'goto <setting>' first, or 'set <setting>.<property>'\n"
+msgstr "önce 'goto <ayar>'ı kullanın, veya 'set <ayar>.<özellik>'\n"
+
+#: ../clients/cli/connections.c:7371 ../clients/cli/connections.c:7507
+#: ../clients/cli/connections.c:7587
+#, c-format
+#| msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
+msgid "Error: invalid setting argument '%s'; valid are [%s]\n"
+msgstr "Hata: geçersiz ayar değişkeni '%s'; geçerli olanlar [%s]\n"
+
+#: ../clients/cli/connections.c:7381
+#, c-format
+#| msgid "Error: missing argument for '%s' option."
+msgid "Error: missing setting for '%s' property\n"
+msgstr "Hata: '%s' özelliği için eksik ayar.\n"
+
+#: ../clients/cli/connections.c:7388
+#, c-format
+#| msgid "Error: invalid 'wifi' parameter: '%s'."
+msgid "Error: invalid property: %s\n"
+msgstr "Hata: geçersiz özellik: %s\n"
+
+#: ../clients/cli/connections.c:7435
+#, c-format
+#| msgid "Error: Unknown connection: %s."
+msgid "Error: unknown setting '%s'\n"
+msgstr "Hata: bilinmeyen ayar '%s'\n"
+
+#: ../clients/cli/connections.c:7448
+#, c-format
+msgid "You may edit the following properties: %s\n"
+msgstr "Aşağıdaki özellikleri düzenleyebilirsiniz: %s\n"
+
+#: ../clients/cli/connections.c:7492
+#, c-format
+msgid "Error: no argument given; valid are [%s]\n"
+msgstr "Hata: hiç değişken verilmedi; geçerli olanlar [%s]\n"
+
+#: ../clients/cli/connections.c:7505
+#, c-format
+#| msgid "Error: '%s' is not an active connection."
+msgid "Setting '%s' is not present in the connection.\n"
+msgstr "'%s' ayarı bağlantıda bulunmuyor.\n"
+
+#: ../clients/cli/connections.c:7546
+#, c-format
+msgid "Error: %s properties, nor it is a setting name.\n"
+msgstr "Hata: %s özellikleri veya bu bir ayar adı.\n"
+
+#: ../clients/cli/connections.c:7571
+#, c-format
+msgid "use 'goto <setting>' first, or 'describe <setting>.<property>'\n"
+msgstr "ilk olarak 'goto <ayar>' kullan ya da 'describe <ayar>.<özellik>'\n"
+
+#: ../clients/cli/connections.c:7612
+#, c-format
+msgid "Error: invalid property: %s, neither a valid setting name.\n"
+msgstr "Hata: geçersiz özellik: %s geçerli bir ayar adı değil.\n"
+
+#: ../clients/cli/connections.c:7641
+#, c-format
+#| msgid "Error: Unknown connection: %s."
+msgid "Error: unknown setting: '%s'\n"
+msgstr "Hata: bilinmeyen ayar: '%s'\n"
+
+#: ../clients/cli/connections.c:7646
+#, c-format
+#| msgid "Error: '%s' is not an active connection."
+msgid "Error: '%s' setting not present in the connection\n"
+msgstr "Hata: '%s' ayarı bağlantıda bulunmuyor\n"
+
+#: ../clients/cli/connections.c:7671
+#, c-format
+#| msgid "Error: invalid 'wifi' parameter: '%s'."
+msgid "Error: invalid property: %s%s\n"
+msgstr "Hata: geçersiz özellik: %s%s\n"
+
+#: ../clients/cli/connections.c:7673
+msgid ", neither a valid setting name"
+msgstr ", ya da geçersiz ayar adı"
+
+#: ../clients/cli/connections.c:7690
+#, c-format
+msgid "Invalid verify option: %s\n"
+msgstr "Geçersiz onaylama seçeneği: %s\n"
+
+#: ../clients/cli/connections.c:7698
+#, c-format
+msgid "Verify setting '%s': %s\n"
+msgstr "'%s' ayarını onaylayın: %s\n"
+
+#: ../clients/cli/connections.c:7713
+#, c-format
+#| msgid "VPN connection %d"
+msgid "Verify connection: %s\n"
+msgstr "Bağlantıyı onayla: %s\n"
+
+#: ../clients/cli/connections.c:7716
+#, c-format
+msgid "The error cannot be fixed automatically.\n"
+msgstr "Hata otomatik olarak onarılamadı.\n"
+
+#: ../clients/cli/connections.c:7733
+#, c-format
+#| msgid "Error: invalid 'wifi' parameter: '%s'."
+msgid "Error: invalid argument '%s'\n"
+msgstr "Hata: geçersiz parametre '%s'\n"
+
+#: ../clients/cli/connections.c:7766
+#, c-format
+#| msgid "Error: Failed to add/activate new connection: (%d) %s"
+msgid "Error: Failed to save '%s' (%s) connection: %s\n"
+msgstr "Hata: '%s' (%s) bağlantısı kaydedilemedi: %s\n"
+
+#: ../clients/cli/connections.c:7773
+#, c-format
+msgid "Connection '%s' (%s) successfully saved.\n"
+msgstr "'%s' (%s) bağlantısı başarıyla kaydedildi.\n"
+
+#: ../clients/cli/connections.c:7774
+#, c-format
+msgid "Connection '%s' (%s) successfully updated.\n"
+msgstr "'%s' (%s) bağlantısı başarıyla güncellendi.\n"
+
+#: ../clients/cli/connections.c:7807
+#, c-format
+#| msgid "Error: Connection activation failed: %s"
+msgid "Error: connection verification failed: %s\n"
+msgstr "Hata: bağlantı doğrulaması başarısız oldu: %s\n"
+
+#: ../clients/cli/connections.c:7808
+#| msgid "Unknown error"
+msgid "(unknown error)"
+msgstr "(bilinmeyen hata)"
+
+#: ../clients/cli/connections.c:7809
+#, c-format
+msgid "You may try running 'verify fix' to fix errors.\n"
+msgstr "Hataları düzeltmek için 'onarmayı doğrula' 'yı çalıştırabilirsiniz.\n"
+
+#: ../clients/cli/connections.c:7831
+#, c-format
+msgid "Error: connection is not saved. Type 'save' first.\n"
+msgstr "Hata: bağlantı kaydedilmedi. İlk olarak 'kaydet' yazın.\n"
+
+#: ../clients/cli/connections.c:7835
+#, c-format
+#| msgid "Error: Connection deletion failed: %s"
+msgid "Error: connection is not valid: %s\n"
+msgstr "Hata: bağlantı geçerli değil: %s\n"
+
+#: ../clients/cli/connections.c:7845
+#, c-format
+#| msgid "Error: Unknown connection: %s."
+msgid "Error: Cannot activate connection: %s.\n"
+msgstr "Hata: Bağlantı etkinleştirilemedi: %s.\n"
+
+#: ../clients/cli/connections.c:7855
+#, c-format
+#| msgid "Error: Failed to add/activate new connection: (%d) %s"
+msgid "Error: Failed to activate '%s' (%s) connection: %s\n"
+msgstr "Hata: Yeni bağlantı '%s' (%s) etkinleştirme başarısız: %s\n"
+
+#: ../clients/cli/connections.c:7861
+#, c-format
+msgid "Monitoring connection activation (press any key to continue)\n"
+msgstr ""
+"Bağlantı izleme etkinleştirme (devam etmek için herhangi bir tuşa basın)\n"
+
+#: ../clients/cli/connections.c:7899
+#, c-format
+#| msgid "Error: 'nm status': %s"
+msgid "Error: status-line: %s\n"
+msgstr "Hata: durum-çizgisi: %s\n"
+
+#: ../clients/cli/connections.c:7907
+#, c-format
+#| msgid "Error: 'con list': %s"
+msgid "Error: save-confirmation: %s\n"
+msgstr "Hata: kayıt onaylaması: %s\n"
+
+#: ../clients/cli/connections.c:7915
+#, c-format
+#| msgid "Error: 'con status': %s"
+msgid "Error: show-secrets: %s\n"
+msgstr "Hata: 'gizi bilgi gösterimi':%s\n"
+
+#: ../clients/cli/connections.c:7923
+#, c-format
+msgid "Error: bad color number: '%s'; use <0-8>\n"
+msgstr "Hata: hatalı renk numarası: '%s'; <0-8> kullanın\n"
+
+#: ../clients/cli/connections.c:7935
+#, c-format
+msgid "Current nmcli configuration:\n"
+msgstr "Geçerli nmcli yapılandırması:\n"
+
+#: ../clients/cli/connections.c:7945
+#, c-format
+msgid "Invalid configuration option '%s'; allowed [%s]\n"
+msgstr "Geçersiz yapılandırma seçeneği '%s'; izin verilenler [%s]\n"
+
+#: ../clients/cli/connections.c:8193
+#, c-format
+msgid "Error: only one of 'id', uuid, or 'path' can be provided."
+msgstr "Hata: 'id', uuid ya da 'path' bunlardan biri saÄŸlanabilir."
+
+#: ../clients/cli/connections.c:8205 ../clients/cli/connections.c:8392
+#: ../clients/cli/connections.c:8399
+#, c-format
+#| msgid "Error: Unknown connection: %s."
+msgid "Error: Unknown connection '%s'."
+msgstr "Hata: Bilinmeyen bağlantı '%s'."
+
+#: ../clients/cli/connections.c:8223
+#, c-format
+msgid "Warning: editing existing connection '%s'; 'type' argument is ignored\n"
+msgstr ""
+"Uyarı: mevcut '%s' bağlantısını düzenleme; 'type' değişkeni yoksayıldı\n"
+
+#: ../clients/cli/connections.c:8226
+#, c-format
+msgid ""
+"Warning: editing existing connection '%s'; 'con-name' argument is ignored\n"
+msgstr ""
+"Uyarı: mevcut '%s' bağlantısını düzenleme; 'con-name' değişkeni yoksayıldı\n"
+
+#: ../clients/cli/connections.c:8240
+#, c-format
+#| msgid "Active connection state: %s\n"
+msgid "Valid connection types: %s\n"
+msgstr "Geçerli bağlantı türleri: %s\n"
+
+#: ../clients/cli/connections.c:8242
+#, c-format
+#| msgid "Error: Unknown connection: %s."
+msgid "Error: invalid connection type; %s\n"
+msgstr "Hata: geçersiz bağlantı türü: %s\n"
+
+#: ../clients/cli/connections.c:8281
+#, c-format
+#| msgid "no active connection or device"
+msgid "===| nmcli interactive connection editor |==="
+msgstr "===| nmcli etkileşimli bağlantı düzenleyicisi |==="
+
+#: ../clients/cli/connections.c:8284
+#, c-format
+#| msgid "no device found for connection '%s'"
+msgid "Editing existing '%s' connection: '%s'"
+msgstr "Mevcut '%s' bağlantısı düzenleme: '%s'"
+
+#: ../clients/cli/connections.c:8286
+#, c-format
+#| msgid "Active connections"
+msgid "Adding a new '%s' connection"
+msgstr "Bir yeni '%s' bağlantı ekleniyor"
+
+#: ../clients/cli/connections.c:8288
+#, c-format
+msgid "Type 'help' or '?' for available commands."
+msgstr "Kullanılabilir komutlar için 'help' veya '?' kullanmayı deneyin."
+
+#: ../clients/cli/connections.c:8290
+#, c-format
+msgid "Type 'describe [<setting>.<prop>]' for detailed property description."
+msgstr "Detaylı özellik tanımlaması için 'describe [<ayar>.<özellik>]' yazın."
+
+#: ../clients/cli/connections.c:8328
+#, c-format
+#| msgid "Error: Failed to add/activate new connection: (%d) %s"
+msgid "Error: Failed to modify connection '%s': %s"
+msgstr "Hata: Bağlantı düzenleme başarısız '%s': %s"
+
+#: ../clients/cli/connections.c:8335
+#, c-format
+msgid "Connection '%s' (%s) successfully modified.\n"
+msgstr "'%s' (%s) bağlantısı başarıyla düzenlendi.\n"
+
+#: ../clients/cli/connections.c:8367
+#, c-format
+#| msgid "Error: %s argument is missing."
+msgid "Error: No arguments provided."
+msgstr "Hata: Değişken sağlanamadı."
+
+#: ../clients/cli/connections.c:8386
+#, c-format
+#| msgid "Error: %s argument is missing."
+msgid "Error: connection ID is missing."
+msgstr "Hata: bağlantı ID 'si eksik."
+
+#: ../clients/cli/connections.c:8408 ../clients/cli/connections.c:8421
+#, c-format
+#| msgid "Error: %s argument is missing."
+msgid "Error: <setting>.<property> argument is missing."
+msgstr "Hata: <ayar>.<özellik> değişkeni eksik."
+
+#: ../clients/cli/connections.c:8426
+#, c-format
+#| msgid "Error: fields for '%s' options are missing."
+msgid "Error: value for '%s' is missing."
+msgstr "Hata: '%s' için değer eksik."
+
+#: ../clients/cli/connections.c:8444
+#, c-format
+#| msgid "Error: invalid 'wifi' parameter: '%s'."
+msgid "Error: invalid <setting>.<property> '%s'."
+msgstr "Hata: geçersiz <ayar>.<özellik> '%s'."
+
+#: ../clients/cli/connections.c:8452
+#, c-format
+#| msgid "Error: invalid 'wwan' parameter: '%s'."
+msgid "Error: invalid or not allowed setting '%s': %s."
+msgstr "Hata: geçersiz ya da izinsiz ayar '%s': %s."
+
+#: ../clients/cli/connections.c:8473
+#, c-format
+#| msgid "Error: invalid 'wifi' parameter: '%s'."
+msgid "Error: invalid property '%s': %s."
+msgstr "Hata: geçersiz özellik '%s': %s."
+
+#: ../clients/cli/connections.c:8484
+#, c-format
+msgid "Error: failed to modify %s.%s: %s."
+msgstr "Hata: düzenleme başarısız %s.%s: %s."
+
+#: ../clients/cli/connections.c:8502
+#, c-format
+msgid "Error: failed to remove a value from %s.%s: %s."
+msgstr "Hata: şuradan bir değer silme başarısız %s.%s: %s."
+
+#: ../clients/cli/connections.c:8539
+#, c-format
+msgid "Error: Connection deletion failed: %s"
+msgstr "Hata: Bağlantı silinemedi: %s"
+
+#: ../clients/cli/connections.c:8603
+#, c-format
+#| msgid "Error: Unknown connection: %s."
+msgid "Error: unknown connection: %s\n"
+msgstr "Hata: bilinmeyen bağlantı: %s\n"
+
+#. truncate trailing ", "
+#: ../clients/cli/connections.c:8640
+#, c-format
+#| msgid "Error: Unknown connection: %s."
+msgid "Error: cannot delete unknown connection(s): %s."
+msgstr "Hata: Bilinmeyen bağlantı(lar) silinemedi: %s."
+
+#: ../clients/cli/connections.c:8663
+#, c-format
+#| msgid "Error: Failed to add/activate new connection: (%d) %s"
+msgid "Error: failed to reload connections: %s."
+msgstr "Hata: bağlantılar yeniden yüklenemedi: %s."
+
+#: ../clients/cli/connections.c:8702
+#, c-format
+#| msgid "Error: Failed to add/activate new connection: (%d) %s"
+msgid "Error: failed to load connection: %s."
+msgstr "Hata: bağlantı yüklenemedi: %s."
+
+#: ../clients/cli/connections.c:8710
+#, c-format
+#| msgid "Couldn't decode PKCS#8 file: %s"
+msgid "Could not load file '%s'\n"
+msgstr "'%s' dosyası yüklenemedi\n"
+
+#: ../clients/cli/connections.c:8886
+#, c-format
+#| msgid "Error: '%s' is not an active connection."
+msgid "Error: '%s' is not valid 'connection' command."
+msgstr "Hata: '%s' geçerli bir 'bağlantı' komutu değil."
+
+#. define some prompts
+#: ../clients/cli/devices.c:37
+msgid "Interface: "
+msgstr "Arayüz: "
+
+#. 3
+#. 17
+#: ../clients/cli/devices.c:45 ../clients/cli/devices.c:74
+msgid "CONNECTION"
+msgstr "BAÄžLANTI"
+
+#. 4
+#. 18
+#: ../clients/cli/devices.c:46 ../clients/cli/devices.c:75
+#| msgid "UUID"
+msgid "CON-UUID"
+msgstr "CON-UUID"
#. 2
-#: ../cli/src/devices.c:112
+#: ../clients/cli/devices.c:59
msgid "VENDOR"
-msgstr "SATICI"
+msgstr "ÃœRETÄ°CÄ°"
#. 3
-#: ../cli/src/devices.c:113
+#: ../clients/cli/devices.c:60
msgid "PRODUCT"
msgstr "ÃœRÃœN"
#. 4
-#: ../cli/src/devices.c:114
+#: ../clients/cli/devices.c:61
msgid "DRIVER"
msgstr "SÜRÜCÜ"
#. 5
-#: ../cli/src/devices.c:115
-#| msgid "VERSION"
+#: ../clients/cli/devices.c:62
msgid "DRIVER-VERSION"
msgstr "SÃœRÃœM"
#. 6
-#: ../cli/src/devices.c:116
-#| msgid "FIRMWARE-MISSING"
+#: ../clients/cli/devices.c:63
msgid "FIRMWARE-VERSION"
msgstr "AYGIT-YAZILIMI"
#. 7
-#: ../cli/src/devices.c:117
+#: ../clients/cli/devices.c:64
msgid "HWADDR"
msgstr "HWADDR"
-#. 9
-#: ../cli/src/devices.c:119
-msgid "REASON"
-msgstr ""
+#. 8
+#: ../clients/cli/devices.c:65 ../clients/tui/nmt-page-ethernet.c:86
+#: ../clients/tui/nmt-page-infiniband.c:96 ../clients/tui/nmt-page-vlan.c:130
+#: ../clients/tui/nmt-page-wifi.c:372
+msgid "MTU"
+msgstr "MTU"
#. 10
-#: ../cli/src/devices.c:120
+#: ../clients/cli/devices.c:67
+msgid "REASON"
+msgstr "NEDEN"
+
+#. 11
+#: ../clients/cli/devices.c:68
msgid "UDI"
msgstr "UDI"
-#. 11
-#: ../cli/src/devices.c:121
+#. 12
+#: ../clients/cli/devices.c:69
msgid "IP-IFACE"
msgstr "IP-IFACE"
-#. 12
-#: ../cli/src/devices.c:122
+#. 13
+#. 2
+#: ../clients/cli/devices.c:70 ../clients/cli/devices.c:98
+msgid "IS-SOFTWARE"
+msgstr "IS-YAZILIM"
+
+#. 14
+#: ../clients/cli/devices.c:71
msgid "NM-MANAGED"
msgstr "AY-YÖNETİMLİ"
-#. 14
-#: ../cli/src/devices.c:124
+#. 16
+#: ../clients/cli/devices.c:73
msgid "FIRMWARE-MISSING"
msgstr "AYGIT-YAZILIMI-EKSÄ°K"
-#. 15
-#: ../cli/src/devices.c:125
-msgid "CONNECTION"
-msgstr "BAÄžLANTI"
-
#. 0
-#: ../cli/src/devices.c:135
+#: ../clients/cli/devices.c:86
msgid "AVAILABLE-CONNECTION-PATHS"
msgstr "UYGUN-BAÄžLANTI-YOLLARI"
#. 1
-#: ../cli/src/devices.c:136
-#| msgid "CONNECTION"
+#: ../clients/cli/devices.c:87
msgid "AVAILABLE-CONNECTIONS"
msgstr "UYGUN-BAÄžLANTILAR"
#. 0
-#: ../cli/src/devices.c:145
+#: ../clients/cli/devices.c:96
msgid "CARRIER-DETECT"
msgstr "TAÅžIYICI-ALGILAMA"
#. 1
-#: ../cli/src/devices.c:146
+#: ../clients/cli/devices.c:97
msgid "SPEED"
msgstr "HIZ"
#. 0
-#: ../cli/src/devices.c:155
+#: ../clients/cli/devices.c:107
msgid "CARRIER"
msgstr "TAÅžIYICI"
#. 0
-#: ../cli/src/devices.c:165
+#: ../clients/cli/devices.c:116 ../clients/cli/devices.c:546
msgid "WEP"
msgstr "WEP"
#. 1
-#: ../cli/src/devices.c:166
+#: ../clients/cli/devices.c:117
msgid "WPA"
msgstr "WPA"
#. 2
-#: ../cli/src/devices.c:167
+#: ../clients/cli/devices.c:118 ../clients/cli/devices.c:554
msgid "WPA2"
msgstr "WPA2"
#. 3
-#: ../cli/src/devices.c:168
+#: ../clients/cli/devices.c:119
msgid "TKIP"
msgstr "TKIP"
#. 4
-#: ../cli/src/devices.c:169
+#: ../clients/cli/devices.c:120
msgid "CCMP"
msgstr "CCMP"
+#. 5
+#. 2
+#: ../clients/cli/devices.c:121 ../clients/cli/devices.c:220
+msgid "AP"
+msgstr "AP"
+
#. 6
-#: ../cli/src/devices.c:171
+#: ../clients/cli/devices.c:122
msgid "ADHOC"
msgstr "ADHOC"
#. 0
-#: ../cli/src/devices.c:181
+#: ../clients/cli/devices.c:131
msgid "CTR-FREQ"
msgstr "CTR-FREK"
#. 1
-#: ../cli/src/devices.c:182
+#: ../clients/cli/devices.c:132
msgid "RSSI"
msgstr "RSSI"
#. 2
-#: ../cli/src/devices.c:183
+#: ../clients/cli/devices.c:133
msgid "CINR"
msgstr "CINR"
#. 3
-#: ../cli/src/devices.c:184
+#: ../clients/cli/devices.c:134
msgid "TX-POW"
msgstr "TX-POW"
#. 4
-#: ../cli/src/devices.c:185
+#: ../clients/cli/devices.c:135
msgid "BSID"
msgstr "BSID"
#. 0
-#: ../cli/src/devices.c:195
+#: ../clients/cli/devices.c:144 ../clients/tui/nmt-page-wifi.c:226
msgid "SSID"
msgstr "SSID"
#. 1
-#: ../cli/src/devices.c:196
+#: ../clients/cli/devices.c:145
+#| msgid "SSID"
+msgid "SSID-HEX"
+msgstr "SSID-HEX"
+
+#. 2
+#: ../clients/cli/devices.c:146 ../clients/tui/nmt-page-wifi.c:360
msgid "BSSID"
msgstr "BSSID"
-#. 2
-#: ../cli/src/devices.c:197
+#. 3
+#: ../clients/cli/devices.c:147
msgid "MODE"
msgstr "KÄ°P"
-#. 3
-#: ../cli/src/devices.c:198
+#. 4
+#: ../clients/cli/devices.c:148
+msgid "CHAN"
+msgstr "CHAN"
+
+#. 5
+#: ../clients/cli/devices.c:149
msgid "FREQ"
msgstr "FREKANS"
-#. 4
-#: ../cli/src/devices.c:199
+#. 6
+#: ../clients/cli/devices.c:150
msgid "RATE"
msgstr "ORAN"
-#. 5
+#. 7
#. 1
-#: ../cli/src/devices.c:200 ../cli/src/devices.c:218
+#: ../clients/cli/devices.c:151 ../clients/cli/devices.c:171
msgid "SIGNAL"
msgstr "SiNYAL"
-#. 6
-#: ../cli/src/devices.c:201
+#. 8
+#: ../clients/cli/devices.c:152
+msgid "BARS"
+msgstr "BARS"
+
+#. 9
+#: ../clients/cli/devices.c:153
msgid "SECURITY"
msgstr "GÃœVENLÄ°K"
-#. 7
-#: ../cli/src/devices.c:202
+#. 10
+#: ../clients/cli/devices.c:154
msgid "WPA-FLAGS"
msgstr "WPA-BAYRAKLAR"
-#. 8
-#: ../cli/src/devices.c:203
+#. 11
+#: ../clients/cli/devices.c:155
msgid "RSN-FLAGS"
msgstr "RSN-BAYRAKLAR"
-#. 10
-#. 4
-#: ../cli/src/devices.c:205 ../cli/src/devices.c:221
-msgid "ACTIVE"
-msgstr "ETKÄ°N"
+#. 14
+#: ../clients/cli/devices.c:158
+msgid "*"
+msgstr "*"
+
+#. 0
+#. 5
+#: ../clients/cli/devices.c:170 ../clients/cli/devices.c:223
+msgid "NSP"
+msgstr "NSP"
#. 0
-#: ../cli/src/devices.c:233
+#: ../clients/cli/devices.c:185
msgid "SLAVES"
-msgstr ""
+msgstr "Ä°KÄ°NCÄ°LLER"
#. 0
-#: ../cli/src/devices.c:242
-#| msgid "UUID"
+#: ../clients/cli/devices.c:194
msgid "ID"
msgstr "ID"
-#: ../cli/src/devices.c:258
-#, fuzzy, c-format
+#. 0
+#: ../clients/cli/devices.c:203 ../clients/cli/devices.c:218
+msgid "CAPABILITIES"
+msgstr "YETENEKLER"
+
+#. 1
+#: ../clients/cli/devices.c:219
+msgid "WIFI-PROPERTIES"
+msgstr "WIFI-ÖZELLİKLER"
+
+#. 3
+#: ../clients/cli/devices.c:221
+msgid "WIRED-PROPERTIES"
+msgstr "KABLOLU-ÖZELLİKLER"
+
+#. 4
+#: ../clients/cli/devices.c:222
+msgid "WIMAX-PROPERTIES"
+msgstr "WIMAX-ÖZELLİKLERİ"
+
+#. 10
+#: ../clients/cli/devices.c:228 ../clients/tui/nmt-page-bond.c:73
+msgid "BOND"
+msgstr "BOND"
+
+#. 11
+#: ../clients/cli/devices.c:229 ../clients/tui/nmt-page-team.c:51
+msgid "TEAM"
+msgstr "TAKIM"
+
+#. 12
+#: ../clients/cli/devices.c:230 ../clients/tui/nmt-page-bridge.c:42
+msgid "BRIDGE"
+msgstr "KÖPRÜ"
+
+#. 14
+#: ../clients/cli/devices.c:232
+msgid "BLUETOOTH"
+msgstr "BLUETOOTH"
+
+#. 15
+#: ../clients/cli/devices.c:233
+msgid "CONNECTIONS"
+msgstr "BAÄžLANTILAR"
+
+#: ../clients/cli/devices.c:257
+#, c-format
#| msgid ""
#| "Usage: nmcli dev { COMMAND | help }\n"
#| "\n"
@@ -1193,370 +3515,831 @@ msgstr "ID"
msgid ""
"Usage: nmcli device { COMMAND | help }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | delete | wifi | wimax }\n"
"\n"
-" COMMAND := { status | list | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | delete | 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"
+" delete <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 ""
-"Kullanımı: nmcli dev { KOMUT | help }\n"
+"Kullanım: nmcli device { KOMUT | help }\n"
"\n"
-" KOMUT := { status | list | disconnect | wifi | wimax }\n"
+"KOMUT := { status | show | connect | disconnect | delete | wifi | wimax }\n"
"\n"
-" KOMUT := { status | list | disconnect | wifi }\n"
+"KOMUT := { status | show | connect | disconnect | delete | wifi }\n"
"\n"
" status\n"
-" list [iface <iface>]\n"
-" disconnect iface <iface> [--nowait] [--timeout <zamanaşımı>]\n"
-" wifi [list [iface <iface>] [bssid <BSSID>]]\n"
-" wimax [list [iface <iface>] [nsp <isim>]]\n"
+"\n"
+" show [<ifname>]\n"
+"\n"
+" connect <ifname>\n"
+"\n"
+" disconnect <ifname>\n"
+"\n"
+" delete <ifname>\n"
+"\n"
+" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
+" wifi connect <(B)SSID> [password <parola>] [wep-key-type key|phrase] ["
+"ifname <ifname>]\n"
+" [bssid <BSSID>] [name <isim>] [private yes|no]\n"
+"\n"
+" wifi rescan [[ifname] <ifname>]\n"
+"\n"
+" wimax [list [ifname <ifname>] [nsp <isim>]]\n"
+"\n"
+
+#: ../clients/cli/devices.c:281
+#, 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 ""
+"Kullanım: nmcli aygıt durumu { yardımı }\n"
+"\n"
+"Tüm aygıtlar için durumları göster\n"
+"Varsayılan olarak aşağıdaki sütınlar gösterilecektir:\n"
+" AYGIT - arayüz adı\n"
+" TİP - aygıt tipi\n"
+" DURUM - aygıt durumu\n"
+" BAĞLANTI - aygıttaki etkin bağlantılar (eğer varsa)\n"
+"Gösterilen kolonlar '--fields' genel seçeneği kullanılarak değiştirilebilir. "
+"'status' is\n"
+"varsayılan komut, 'nmcli device' çağrıları 'nmcli device status'.\n"
+"\n"
+
+#: ../clients/cli/devices.c:296
+#, 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 ""
+"Kullanım: nmcli device show { DEĞİŞKENLER | help }\n"
+"\n"
+"DEĞİŞKENLER := [<ifname>]\n"
+"\n"
+"Aygıt(lar)ın ayrıntılarını göster.\n"
+"Bu komut tüm aygıtların ya da verilen aygıt için detayları listeler\n"
+"\n"
+
+#: ../clients/cli/devices.c:307
+#, 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 ""
+"Kullanım: nmcli device connect { DEĞİŞKENLER | help }\n"
+"\n"
+"DEĞİŞKENLER := <ifname>\n"
+"\n"
+"Aygıta bağlan.\n"
+"NetworkManager etkinleştirmek için uygun bir bağlantı arıyacaktır.\n"
+"Ayrıca otomatik bağlanma ayarlarınıda göz önünde bulunduracaktır.\n"
+"\n"
+
+#: ../clients/cli/devices.c:319
+#, 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 ""
+"Kullanım: nmcli device disconnect { DEĞİŞKENLER | help }\n"
+"\n"
+"DEĞİŞKENLER := <ifname>\n"
+"\n"
+"Aygıtı ayır.\n"
+"Bu komut cihazı ayırır ve otomatik bağlanmaları önler\n"
+"el ile bağlantıları hariç.\n"
+"\n"
+
+#: ../clients/cli/devices.c:331
+#, c-format
+msgid ""
+"Usage: nmcli device delete { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Deletes the software device.\n"
+"The command removes the interface. It only works for software devices\n"
+"(like bonds, bridges, etc.). Hardware devices cannot be deleted by the\n"
+"command.\n"
+"\n"
+msgstr ""
+"Kullanım: nmcli device delete { DEĞİŞKENLER | help }\n"
+"\n"
+"DEĞİŞKENLER := <ifname>\n"
+"\n"
+"Yazılımsal aygıtları siler.\n"
+"Bu komut arayüzleri siler. Sadece yazılımsal aygıtlar için çalışır\n"
+"(köprüler, atlamalar). Donanımsal aygıtlar bu komut kullanılarak\n"
+"silinemezler.\n"
"\n"
-#: ../cli/src/devices.c:361
+#: ../clients/cli/devices.c:344
+#, 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 ""
+"Kullanım: nmcli device wifi { DEĞİŞKENLER | help }\n"
+"\n"
+"İşlemleri Wi-Fi aygıtlar üzerinde yapın.\n"
+"\n"
+"DEĞİŞKENLER := [list [ifname <ifname>] [bssid <BSSID>]]\n"
+"\n"
+"Kullanılabilir Wi-Fi erişim noktalarını listeler. 'ifname' ve 'bssid' "
+"seçenekleri\n"
+"belirli erişim noktalarını ve ya belirtilmiş BSSID için kullanılır.\n"
+"\n"
+"DEĞİŞKENLER := connect <(B)SSID> [password <parola>] [wep-key-type "
+"key|phrase] [ifname <ifname>]\n"
+" [bssid <BSSID>] [name <name>] [private yes|no]\n"
+"\n"
+"SSID ya da BSSID ile belirtilmiş Wi-Fi ağlarına bağlanır. Bu komut yeni bir\n"
+"bağlantı oluşturur ve o aygıt üzerinde etkinleştirir. Bu GUI istemcide SSID\n"
+"üzerine tıklama olayının komut satırı karşılığıdır. Bu komut her zaman\n"
+"yeni bir bağlantı yaratır ve bunu kolaylaştırır.\n"
+"Eğer ağa bir bağlantı zaten mevcut ise, mevcut profil şöyle\n"
+"ayaÄŸa kalkabilir: nmcli con up id <isim>.Dikkat\n"
+"Şu anda sadece açık WEP ve WPA-PSK ağları desteklenmektedirler.\n"
+"IP yapılandırmalırını DHCP üzerinden alırlar.\n"
+"\n"
+"DEĞİŞKENLER := rescan [[ifname] <ifname>]\n"
+"\n"
+"NetworkManager için kullanılabilir erişim noktalarını yeniden taratır.\n"
+"NetworkManage Wi-Fi ağlarını belli periyodlarda taratır, ancak bu "
+"taratmanın\n"
+"elle yapılması daha iyidir. Dikkat edin bu komut erişim noktalarını "
+"göstermez.\n"
+"Onun için 'nmcli device wifi list komutunu kullanın.\n"
+"\n"
+
+#: ../clients/cli/devices.c:377
+#, 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 ""
+"Kullanım: nmcli device wimax { DEĞİŞKENLER | help }\n"
+"\n"
+"WiMAX aygıtları üzerinde işlemler yürütür.\n"
+"\n"
+"DEĞİŞKENLER := [list [ifname <ifname>] [nsp <isim>]]\n"
+"\n"
+"Kullanılabilir WiMAX NSP leri listeler. 'ifname' ve 'nsp' seçenekleri "
+"belirli bir arayüz\n"
+"ya da NSP için ağları listeler.\n"
+"\n"
+
+#: ../clients/cli/devices.c:466 ../clients/cli/devices.c:657
msgid "(none)"
msgstr "(hiçbiri)"
-#: ../cli/src/devices.c:417
+#: ../clients/cli/devices.c:534
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:418
+#: ../clients/cli/devices.c:535
#, c-format
msgid "%u Mbit/s"
msgstr "%u Mbit/s"
-#: ../cli/src/devices.c:427
-msgid "Encrypted: "
-msgstr "Åžifreli: "
+#: ../clients/cli/devices.c:550
+msgid "WPA1"
+msgstr "WPA1"
-#: ../cli/src/devices.c:432
-msgid "WEP "
-msgstr "WEP "
+#: ../clients/cli/devices.c:559
+msgid "802.1X"
+msgstr "802.1X"
-#: ../cli/src/devices.c:434
-msgid "WPA "
-msgstr "WPA "
-
-#: ../cli/src/devices.c:436
-msgid "WPA2 "
-msgstr "WPA2 "
-
-#: ../cli/src/devices.c:439
-msgid "Enterprise "
-msgstr "Kurumsal "
-
-#: ../cli/src/devices.c:448
+#: ../clients/cli/devices.c:575
msgid "Ad-Hoc"
msgstr "Ad-Hoc"
-#: ../cli/src/devices.c:449
-msgid "Infrastructure"
-msgstr "Altyapı"
+#: ../clients/cli/devices.c:576
+msgid "Infra"
+msgstr "Infra"
+
+#: ../clients/cli/devices.c:577
+msgid "N/A"
+msgstr "N/A"
-#: ../cli/src/devices.c:485
+#: ../clients/cli/devices.c:608
msgid "Home"
msgstr "Ev"
-#: ../cli/src/devices.c:488
+#: ../clients/cli/devices.c:611
msgid "Partner"
msgstr "Ortak"
-#: ../cli/src/devices.c:491
+#: ../clients/cli/devices.c:614
msgid "Roaming"
msgstr "Dolaşım"
-#: ../cli/src/devices.c:563
-#, c-format
-msgid "Error: 'dev list': %s"
-msgstr "Hata: 'dev list':%s"
-
-#: ../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:574
+#: ../clients/cli/devices.c:774
msgid "Device details"
msgstr "Aygıt ayrıntıları"
-#: ../cli/src/devices.c:621 ../cli/src/devices.c:624 ../cli/src/devices.c:1151
-#: ../cli/src/utils.c:495
+#: ../clients/cli/devices.c:786
+#, c-format
+#| msgid "Error: 'dev list': %s"
+msgid "Error: 'device show': %s"
+msgstr "Hata: 'device show': %s"
+
+#: ../clients/cli/devices.c:837 ../clients/cli/devices.c:840
msgid "(unknown)"
msgstr "(bilinmeyen)"
-#: ../cli/src/devices.c:633
-msgid "not connected"
-msgstr "bağlı değil"
-
-#: ../cli/src/devices.c:660
+#: ../clients/cli/devices.c:878
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
-#. Print header
-#. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:736
+#: ../clients/cli/devices.c:964
msgid "on"
msgstr "açık"
-#: ../cli/src/devices.c:736
+#: ../clients/cli/devices.c:964
msgid "off"
msgstr "kapalı"
-#: ../cli/src/devices.c:993
-#, c-format
-msgid "Error: 'dev status': %s"
-msgstr "Hata: 'dev status':%s"
-
-#: ../cli/src/devices.c:995
+#: ../clients/cli/devices.c:1236
#, c-format
-msgid "Error: 'dev status': %s; allowed fields: %s"
-msgstr "Hata: 'dev status': %s; izin verilen alanlar: %s"
+#| msgid "Error: 'dev status': %s"
+msgid "Error: 'device status': %s"
+msgstr "Hata: 'aygıt durumu': %s"
-#: ../cli/src/devices.c:1018
+#. Add headers
+#: ../clients/cli/devices.c:1243
msgid "Status of devices"
msgstr "Aygıtların durumu"
-#: ../cli/src/devices.c:1049
+#: ../clients/cli/devices.c:1274
#, c-format
-msgid "Error: '%s' argument is missing."
-msgstr "Hata: '%s' değişkeni bulunamadı."
+#| msgid "Error: invalid 'wwan' parameter: '%s'."
+msgid "Error: invalid extra argument '%s'."
+msgstr "Hata: geçersiz fazladan değişken '%s'."
-#: ../cli/src/devices.c:1090 ../cli/src/devices.c:1255
-#: ../cli/src/devices.c:1396 ../cli/src/devices.c:2043
+#: ../clients/cli/devices.c:1291 ../clients/cli/devices.c:1566
+#: ../clients/cli/devices.c:1699 ../clients/cli/devices.c:1786
+#: ../clients/cli/devices.c:1919 ../clients/cli/devices.c:2580
#, c-format
msgid "Error: Device '%s' not found."
msgstr "Hata: '%s' aygıtı bulunamadı."
-#: ../cli/src/devices.c:1113
+#: ../clients/cli/devices.c:1346
#, c-format
-msgid "Success: Device '%s' successfully disconnected."
-msgstr "Başarılı: '%s' aygıtının bağlantısı başarıyla kesildi."
+#| msgid "Success: Device '%s' successfully disconnected."
+msgid "Device '%s' successfully activated with '%s'.\n"
+msgstr "'%s' aygıtı '%s' ile başarıyla etkinleştirildi.\n"
-#: ../cli/src/devices.c:1148
+#: ../clients/cli/devices.c:1368 ../clients/cli/devices.c:1419
#, c-format
-msgid "Error: Device '%s' (%s) disconnecting failed: %s"
-msgstr "Hata: '%s' aygıtının (%s) bağlantısı kesilemedi: %s"
+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:1161
+#: ../clients/cli/devices.c:1373
#, c-format
-#| 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"
+msgid "Error: Connection activation failed: (%d) %s."
+msgstr "Hata: Bağlantı etkinleştirilemedi: (%d) %s."
-#: ../cli/src/devices.c:1224
+#: ../clients/cli/devices.c:1400
#, c-format
-msgid "Error: iface has to be specified."
-msgstr "Hata: iface belirtilmeli."
+#| msgid "Error: Failed to add/activate new connection: (%d) %s"
+msgid "Error: Failed to add/activate new connection: %s"
+msgstr "Hata: Yeni bir bağlantı ekleme/etkinleştirme başarısız: %s"
-#: ../cli/src/devices.c:1354
+#: ../clients/cli/devices.c:1409
#, c-format
-msgid "Error: 'dev wifi': %s"
-msgstr "Hata: 'dev wifi': %s"
+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:1356
+#: ../clients/cli/devices.c:1481
#, c-format
-msgid "Error: 'dev wifi': %s; allowed fields: %s"
-msgstr "Hata: 'dev wifi': %s; izin verilen alanlar: %s"
+#| msgid "Error: Connection activation failed: %s"
+msgid "Error: Device activation failed: %s"
+msgstr "Hata: Aygıt etkinleştirilemedi: %s"
-#: ../cli/src/devices.c:1379
-msgid "WiFi scan list"
-msgstr "WiFi tarama listesi"
+#: ../clients/cli/devices.c:1490
+#, c-format
+#| msgid "Error: Connection activation failed: (%d) %s."
+msgid "Error: Device activation failed: device was disconnected"
+msgstr "Hata: Bağlantı etkinleştirilemedi: aygıt bağlantısı kesilmiş"
-#: ../cli/src/devices.c:1416 ../cli/src/devices.c:1470
+#: ../clients/cli/devices.c:1504
#, c-format
-msgid "Error: Access point with bssid '%s' not found."
-msgstr "Hata: '%s' bssid'li erişim noktası bulunamadı."
+#| msgid "Device '%s' has been disconnected.\n"
+msgid "Device '%s' has been connected.\n"
+msgstr "'%s' aygıtı başarıyla bağlandı.\n"
-#: ../cli/src/devices.c:1433
+#: ../clients/cli/devices.c:1535 ../clients/cli/devices.c:1544
+#: ../clients/cli/devices.c:1668 ../clients/cli/devices.c:1677
+#: ../clients/cli/devices.c:1756 ../clients/cli/devices.c:1764
#, c-format
-msgid "Error: Device '%s' is not a WiFi device."
-msgstr "Hata: '%s' aygıtı bir WiFi aygıtı değil."
+#| msgid "Error: iface has to be specified."
+msgid "Error: No interface specified."
+msgstr "Hata: Belirtilen bir arayüz yok."
-#: ../cli/src/devices.c:1501 ../cli/src/devices.c:1547
+#: ../clients/cli/devices.c:1550 ../clients/cli/devices.c:1683
+#: ../clients/cli/devices.c:1770
#, 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"
+#| msgid "Error: missing argument for '%s' option."
+msgid "Error: extra argument not allowed: '%s'."
+msgstr "Hata: fazladan deÄŸiÅŸken olamaz: '%s'."
-#: ../cli/src/devices.c:1506
+#: ../clients/cli/devices.c:1609
#, c-format
-#| msgid "Error: Connection activation failed: %s."
-msgid "Error: Connection activation failed: (%d) %s."
-msgstr "Hata: Bağlantı etkinleştirilemedi: (%d) %s."
+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:1531
+#: ../clients/cli/devices.c:1623
#, 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"
+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:1539
+#: ../clients/cli/devices.c:1638
#, 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"
+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:1683
+#: ../clients/cli/devices.c:1728
+#, c-format
+#| msgid "Error: Device '%s' (%s) disconnecting failed: %s"
+msgid "Error: Device '%s' (%s) deletion failed: %s"
+msgstr "Hata: '%s' aygıtının (%s) silinmesi başarısız: %s"
+
+#: ../clients/cli/devices.c:1792
+#, c-format
+#| msgid "Error: Device '%s' is not a WiFi device."
+msgid "Error: Device '%s' is a hardware device. It can't be deleted."
+msgstr "Hata: '%s' aygıtı bir donanımsay aygıt. Silinemedi."
+
+#: ../clients/cli/devices.c:1862
+#| msgid "WiFi scan list"
+msgid "Wi-Fi scan list"
+msgstr "Wi-Fi tarama listesi"
+
+#: ../clients/cli/devices.c:1900
+#, c-format
+#| msgid "Error: 'dev wifi': %s"
+msgid "Error: 'device wifi': %s"
+msgstr "Hata: 'wifi aygıtı': %s"
+
+#: ../clients/cli/devices.c:1942 ../clients/cli/devices.c:2017
+#, c-format
+msgid "Error: Access point with bssid '%s' not found."
+msgstr "Hata: '%s' bssid'li erişim noktası bulunamadı."
+
+#: ../clients/cli/devices.c:1966 ../clients/cli/devices.c:2283
+#: ../clients/cli/devices.c:2447
+#, c-format
+msgid "Error: Device '%s' is not a Wi-Fi device."
+msgstr "Hata: '%s' aygıtı bir Wi-Fi aygıtı değil."
+
+#: ../clients/cli/devices.c:2176
+msgid "SSID or BSSID: "
+msgstr "SSID veya BSSID: "
+
+#: ../clients/cli/devices.c:2181
#, 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
+#: ../clients/cli/devices.c:2205
#, 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
+#: ../clients/cli/devices.c:2229
#, c-format
msgid ""
"Error: wep-key-type argument value '%s' is invalid, use 'key' or 'phrase'."
msgstr ""
+"Hata: wep-key-type değişkeni için '%s' değeri geçersiz, 'key' ya da 'phrase' "
+"kullanın."
-#: ../cli/src/devices.c:1770
+#: ../clients/cli/devices.c:2249
#, c-format
-msgid "Error: BSSID to connect to (%s) differs from bssid argument (%s)."
-msgstr ""
+#| msgid "Error: %s."
+msgid "Error: %s: %s."
+msgstr "Error: %s: %s."
-#: ../cli/src/devices.c:1776
+#: ../clients/cli/devices.c:2264
#, c-format
-msgid "Error: Parameter '%s' is neither SSID nor BSSID."
-msgstr ""
+msgid "Error: BSSID to connect to (%s) differs from bssid argument (%s)."
+msgstr "Hata: (%s) bağlantı için verilen BSSID değişkenden (%s) farklı."
-#: ../cli/src/devices.c:1805
+#: ../clients/cli/devices.c:2270
#, 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."
+msgid "Error: Parameter '%s' is neither SSID nor BSSID."
+msgstr "Hata: '%s' parametresi SSID ya da BSSID deÄŸil."
-#: ../cli/src/devices.c:1807
+#: ../clients/cli/devices.c:2285 ../clients/cli/devices.c:2449
#, 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
+#: ../clients/cli/devices.c:2303
#, 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
+#: ../clients/cli/devices.c:2305
#, 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:2001
-#, c-format
-msgid "Error: 'dev wimax': %s"
-msgstr "Hata: 'dev wimax': %s"
+#: ../clients/cli/devices.c:2344
+msgid "Password: "
+msgstr "Parola: "
-#: ../cli/src/devices.c:2003
+#: ../clients/cli/devices.c:2476
#, c-format
-msgid "Error: 'dev wimax': %s; allowed fields: %s"
-msgstr "Hara: 'dev wimax': %s; izin verilen alanlar: %s"
+#| msgid "Error: 'dev wifi' command '%s' is not valid."
+msgid "Error: 'device wifi' command '%s' is not valid."
+msgstr "Hata: 'device wifi' komut '%s' tanımlı değil."
-#: ../cli/src/devices.c:2026
+#: ../clients/cli/devices.c:2523
msgid "WiMAX NSP list"
msgstr "WiMAX NSP listesi"
-#: ../cli/src/devices.c:2063
+#: ../clients/cli/devices.c:2560
+#, c-format
+#| msgid "Error: 'dev wimax': %s"
+msgid "Error: 'device wimax': %s"
+msgstr "Hata: 'device wimax': %s"
+
+#: ../clients/cli/devices.c:2603
#, c-format
msgid "Error: NSP with name '%s' not found."
msgstr "Hata: '%s' adlı NSP bulunamadı."
-#: ../cli/src/devices.c:2074
+#: ../clients/cli/devices.c:2616
#, 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:2105
+#: ../clients/cli/devices.c:2660
#, c-format
msgid "Error: Access point with nsp '%s' not found."
msgstr "Hata: '%s' nsp'li erişim noktası bulunamadı."
-#: ../cli/src/devices.c:2132
+#: ../clients/cli/devices.c:2697
#, c-format
-msgid "Error: 'dev wimax' command '%s' is not valid."
-msgstr "Hata: 'dev wimax' komutu '%s' geçerli değil."
+#| msgid "Error: 'dev wimax' command '%s' is not valid."
+msgid "Error: 'device wimax' command '%s' is not valid."
+msgstr "Hata: 'device wimax' komutu '%s' geçerli değil."
-#: ../cli/src/devices.c:2185
+#: ../clients/cli/devices.c:2870
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "Hata: 'dev' komut '%s' tanımlı değil."
-#: ../cli/src/network-manager.c:37
+#: ../clients/cli/general.c:35
msgid "RUNNING"
msgstr "ÇALIŞIYOR"
#. 0
-#: ../cli/src/network-manager.c:38
+#: ../clients/cli/general.c:36
msgid "VERSION"
msgstr "SÃœRÃœM"
#. 2
-#: ../cli/src/network-manager.c:40
-msgid "NET-ENABLED"
-msgstr "NET-ENABLED"
+#: ../clients/cli/general.c:38
+msgid "STARTUP"
+msgstr "BAŞLANGIÇ"
#. 3
-#: ../cli/src/network-manager.c:41
-msgid "WIFI-HARDWARE"
-msgstr "WIFI-DONANIM"
+#: ../clients/cli/general.c:39
+#| msgid "CONNECTION"
+msgid "CONNECTIVITY"
+msgstr "BAÄžLANTI"
#. 4
-#: ../cli/src/network-manager.c:42
-msgid "WIFI"
-msgstr "WIFI"
+#: ../clients/cli/general.c:40
+msgid "NETWORKING"
+msgstr "AÄž"
#. 5
-#: ../cli/src/network-manager.c:43
-msgid "WWAN-HARDWARE"
-msgstr "WWAN-DONANIM"
+#: ../clients/cli/general.c:41
+#| msgid "WIFI"
+msgid "WIFI-HW"
+msgstr "WIFI-HW"
#. 6
-#: ../cli/src/network-manager.c:44
-msgid "WWAN"
-msgstr "WWAN"
+#: ../clients/cli/general.c:42
+msgid "WIFI"
+msgstr "KABLOSUZ"
#. 7
-#: ../cli/src/network-manager.c:45
-msgid "WIMAX-HARDWARE"
-msgstr "WIMAX-DONANIMI"
+#: ../clients/cli/general.c:43
+#| msgid "WWAN"
+msgid "WWAN-HW"
+msgstr "WWAN-HW"
#. 8
-#: ../cli/src/network-manager.c:46
+#: ../clients/cli/general.c:44
+msgid "WWAN"
+msgstr "WWAN"
+
+#. 9
+#: ../clients/cli/general.c:45
+#| msgid "WIMAX"
+msgid "WIMAX-HW"
+msgstr "WIMAX-HW"
+
+#. 10
+#: ../clients/cli/general.c:46
msgid "WIMAX"
msgstr "WIMAX"
-#: ../cli/src/network-manager.c:62
-#| msgid "VERSION"
+#: ../clients/cli/general.c:68
msgid "PERMISSION"
msgstr "Ä°ZÄ°N"
#. 0
-#: ../cli/src/network-manager.c:63
+#: ../clients/cli/general.c:69
msgid "VALUE"
msgstr "DEÄžER"
-#: ../cli/src/network-manager.c:77
-#, fuzzy, c-format
+#: ../clients/cli/general.c:77
+msgid "LEVEL"
+msgstr "SEVÄ°YE"
+
+#. 0
+#: ../clients/cli/general.c:78
+msgid "DOMAINS"
+msgstr "ALANLAR"
+
+#: ../clients/cli/general.c:92
+#, c-format
+msgid ""
+"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"
+msgstr ""
+"Kullanım: nmcli general { KOMUT | help }\n"
+"\n"
+"KOMUT := { status | hostname | permissions | logging }\n"
+"\n"
+" status\n"
+"\n"
+" hostname [<makine_adi>]\n"
+"\n"
+" permissions\n"
+"\n"
+" logging [level <log seviyesi>] [domains <log alanları>]\n"
+"\n"
+
+#: ../clients/cli/general.c:103
+#, 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 ""
+"Kullanım: nmcli general status { help }\n"
+"\n"
+"NetworkManager için genel durumları gösterir.\n"
+"'status' varsayılan eylemdir, yani 'nmcli gen' aslında 'nmcli gen status' "
+"komutunu çağırır\n"
+"\n"
+
+#: ../clients/cli/general.c:112
+#, 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 ""
+"Kullanım: nmcli general hostname { DEĞİŞKENLER | help }\n"
+"\n"
+"DEĞİŞKENLER := [<makine_adi>]\n"
+"\n"
+"Sistem makine adını getirir ya da değiştirir.\n"
+"Hiç değişken verilmez ise sistemde kayıtlı makine adını döndürür. Bir makine "
+"adı girerseniz\n"
+"NetworkManager yeni makine adını ayarlayacaktır.\n"
+"\n"
+
+#: ../clients/cli/general.c:124
+#, c-format
+msgid ""
+"Usage: nmcli general permissions { help }\n"
+"\n"
+"Show caller permissions for authenticated operations.\n"
+"\n"
+msgstr ""
+"Kullanım: nmcli general permissions { help }\n"
+"\n"
+"Doğrulanmış işlemler için çağrıcı izinlerini gösterir.\n"
+"\n"
+
+#: ../clients/cli/general.c:132
+#, 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 ""
+"Kullanım: nmcli general logging { DEĞİŞKENLER | help }\n"
+"\n"
+"DEĞİŞKENLER := [level <log seviyesi>] [domains <log alanları>]\n"
+"\n"
+"NetworkManager için loglama seviyesini ve alanlarını getirir ya da "
+"deÄŸiÅŸtirir.\n"
+"Bir değişken kullanılmaz ise log durumunu değiştirmek, seviye ve/veya alan\n"
+"ayarlamak yerine mevcut loglama seviyesi ve alanları gösterilir. Uygun "
+"loglama\n"
+"alanlarını listeletmek için, lütfen kılavuz sayfasına göz atın.\n"
+"\n"
+
+#: ../clients/cli/general.c:145
+#, 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 ""
+"Kullanım: nmcli networking { KOMUT | help }\n"
+"\n"
+"KOMUT := { [ on | off | connectivity ] }\n"
+"\n"
+" on\n"
+"\n"
+" off\n"
+"\n"
+" connectivity [check]\n"
+"\n"
+
+#: ../clients/cli/general.c:155
+#, c-format
+msgid ""
+"Usage: nmcli networking on { help }\n"
+"\n"
+"Switch networking on.\n"
+"\n"
+msgstr ""
+"Kullanım: nmcli networking on { help }\n"
+"\n"
+"Ağı etkinleştirir.\n"
+"\n"
+
+#: ../clients/cli/general.c:163
+#, c-format
+msgid ""
+"Usage: nmcli networking off { help }\n"
+"\n"
+"Switch networking off.\n"
+"\n"
+msgstr ""
+"Kullanım: nmcli networking off { help }\n"
+"\n"
+"Ağı etkinsizleştirir.\n"
+"\n"
+
+#: ../clients/cli/general.c:171
+#, 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 ""
+"Kullanım: nmcli networking connectivity { DEĞİŞKENLER | help }\n"
+"\n"
+"DEĞİŞKENLER := [check]\n"
+"\n"
+"Ağın bağlantı durumunu gösterir.\n"
+"İsteğe bağlı değişken 'check' ile NetworkManager bağlantıyı yeniden kontrol "
+"eder.\n"
+"\n"
+
+#: ../clients/cli/general.c:183
+#, c-format
#| msgid ""
#| "Usage: nmcli nm { COMMAND | help }\n"
#| "\n"
@@ -1572,196 +4355,269 @@ msgstr "DEÄžER"
#| " wimax [on|off]\n"
#| "\n"
msgid ""
-"Usage: nmcli nm { COMMAND | help }\n"
+"Usage: nmcli radio { COMMAND | help }\n"
"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan | "
-"wimax }\n"
+"COMMAND := { all | wifi | wwan | wimax }\n"
"\n"
-" COMMAND := { status | permissions | enable | sleep | wifi | wwan }\n"
+" all | wifi | wwan | wimax [ on | off ]\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"
+"COMMAND := { all | wifi | wwan }\n"
+"\n"
+" all | wifi | wwan [ on | off ]\n"
"\n"
msgstr ""
-"Kullanımı: nmcli nm { KOMUT | help }\n"
+"Kullanım: nmcli radio { KOMUT | help }\n"
"\n"
-" KOMUT := { status | enable | sleep | wifi | wwan | wimax }\n"
+"KOMUT := { all | wifi | wwan | wimax }\n"
"\n"
-" KOMUT := { status | enable | sleep | wifi | wwan }\n"
+" all | wifi | wwan | wimax [ on | off ]\n"
"\n"
-" status\n"
-" enable [true|false]\n"
-" sleep [true|false]\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
-" wimax [on|off]\n"
+"KOMUT := { all | wifi | wwan }\n"
+"\n"
+" all | wifi | wwan [ on | off ]\n"
"\n"
-#: ../cli/src/network-manager.c:108
+#: ../clients/cli/general.c:197
+#, 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 ""
+"Kullanım: nmcli radio all { DEĞİŞKENLER | help }\n"
+"\n"
+"DEĞİŞKENLER := [on | off]\n"
+"\n"
+"Tüm radyo anahtarlarının durumunu gösterir, ya da açar/kapatır.\n"
+"\n"
+
+#: ../clients/cli/general.c:207
+#, 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 ""
+"Kullanım: nmcli radio wifi { DEĞİŞKENLER | help }\n"
+"\n"
+"DEĞİŞKENLER := [on | off]\n"
+"\n"
+"Wi-Fi radyo anahtarının durumunu gösterir, ya da açar/kapar.\n"
+"\n"
+
+#: ../clients/cli/general.c:217
+#, 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 ""
+"Kullanım: nmcli radio wwan { DEĞİŞKENLER | help }\n"
+"\n"
+"DEĞİŞKENLER := [on | off]\n"
+"\n"
+"Mobil geniş bant radyo anahtarınının durumunu gösterir, ya da açar/kapatır.\n"
+"\n"
+
+#: ../clients/cli/general.c:228
+#, 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 ""
+"Kullanım: nmcli radio wimax { DEĞİŞKENLER | help }\n"
+"\n"
+"DEĞİŞKENLER := [on | off]\n"
+"\n"
+"WiMAX radyo anahtarının durumunu gösterir, ya da açar/kapatır.\n"
+"\n"
+
+#: ../clients/cli/general.c:248
msgid "asleep"
msgstr "uykuda"
-#: ../cli/src/network-manager.c:110
+#: ../clients/cli/general.c:250
msgid "connecting"
msgstr "bağlanıyor"
-#: ../cli/src/network-manager.c:112
+#: ../clients/cli/general.c:252
msgid "connected (local only)"
msgstr "bağlandı (sadece yerel)"
-#: ../cli/src/network-manager.c:114
+#: ../clients/cli/general.c:254
msgid "connected (site only)"
msgstr "bağlandı (sadece siteye)"
-#: ../cli/src/network-manager.c:118
+#: ../clients/cli/general.c:258
msgid "disconnecting"
msgstr "bağlantı kesiliyor"
-#: ../cli/src/network-manager.c:158
-#, c-format
-msgid "Error: 'nm status': %s"
-msgstr "Hata: 'nm durumu': %s"
+#: ../clients/cli/general.c:274
+msgid "portal"
+msgstr "kapı"
+
+#: ../clients/cli/general.c:276
+msgid "limited"
+msgstr "sınırlı"
-#: ../cli/src/network-manager.c:160
+#: ../clients/cli/general.c:278
+msgid "full"
+msgstr "tam"
+
+#: ../clients/cli/general.c:316
#, c-format
-msgid "Error: 'nm status': %s; allowed fields: %s"
-msgstr "Hata: 'nm status': %s; izin verilen alanlar: %s"
+#| msgid "Error: 'con status': %s; allowed fields: %s"
+msgid "Error: only these fields are allowed: %s"
+msgstr "Hata: sadece bu alanlar kullanılabilir: %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
+#: ../clients/cli/general.c:336 ../clients/cli/general.c:337
+#: ../clients/cli/general.c:338 ../clients/cli/general.c:339
+#: ../clients/cli/general.c:340 ../clients/cli/general.c:342
+#: ../clients/cli/general.c:343
msgid "enabled"
msgstr "etkin"
-#: ../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
+#: ../clients/cli/general.c:336 ../clients/cli/general.c:337
+#: ../clients/cli/general.c:338 ../clients/cli/general.c:339
+#: ../clients/cli/general.c:340 ../clients/cli/general.c:342
+#: ../clients/cli/general.c:343
msgid "disabled"
msgstr "etkin deÄŸil"
-#: ../cli/src/network-manager.c:193
+#: ../clients/cli/general.c:346
msgid "NetworkManager status"
msgstr "NetworkManager durumu"
-#. Print header
-#: ../cli/src/network-manager.c:196
+#: ../clients/cli/general.c:351
msgid "running"
msgstr "çalışıyor"
-#: ../cli/src/network-manager.c:196
-msgid "not running"
-msgstr "çalışmıyor"
+#: ../clients/cli/general.c:354
+#| msgid "activating"
+msgid "starting"
+msgstr "başlatılıyor"
-#: ../cli/src/network-manager.c:271
-msgid "auth"
-msgstr ""
+#: ../clients/cli/general.c:354
+msgid "started"
+msgstr "başlatıldı"
-#: ../cli/src/network-manager.c:301
-#, c-format
-#| msgid "Error: 'nm status': %s"
-msgid "Error: 'nm permissions': %s"
-msgstr "Hata: 'nm izinleri': %s"
+#: ../clients/cli/general.c:425
+msgid "auth"
+msgstr "yetkilendirme"
-#: ../cli/src/network-manager.c:303
+#: ../clients/cli/general.c:454
#, 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"
+#| msgid "Error: 'nm permissions': %s"
+msgid "Error: 'general permissions': %s"
+msgstr "Hata: 'genel izinler': %s"
-#: ../cli/src/network-manager.c:324
-#| msgid "NetworkManager status"
+#: ../clients/cli/general.c:468
msgid "NetworkManager permissions"
msgstr "NetworkManager izinleri"
-#: ../cli/src/network-manager.c:350 ../cli/src/utils.c:475
+#: ../clients/cli/general.c:509
#, c-format
-msgid "Error: Couldn't connect to system bus: %s"
-msgstr "Hata: Sistem veri yoluna bağlanamadı: %s"
+#| msgid "Error: 'con list': %s"
+msgid "Error: 'general logging': %s"
+msgstr "Hata: 'genel loglama': %s"
-#: ../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ı."
+#: ../clients/cli/general.c:524
+#| msgid "NetworkManager permissions"
+msgid "NetworkManager logging"
+msgstr "NetworkManager günlükleme"
-#: ../cli/src/network-manager.c:367
+#: ../clients/cli/general.c:546
#, c-format
-msgid "Error in sleep: %s"
-msgstr "Uyku hatası: %s"
+#| msgid "Failed to set signal mask: %d"
+msgid "Error: failed to set hostname: %s"
+msgstr "Hata: makine adı ayarlama başarısız: %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
+#: ../clients/cli/general.c:659
#, 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:424
-msgid "Networking enabled"
-msgstr "AÄŸ oluÅŸturma etkinleÅŸtirildi"
+#| msgid "Error: 'dev list': %s"
+msgid "Error: failed to set logging: %s"
+msgstr "Hata: günlükleme ayarlama başarısız: %s"
-#: ../cli/src/network-manager.c:440
+#: ../clients/cli/general.c:668
#, c-format
-msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
-msgstr ""
-"Hata: geçersiz 'enable' parametresi: %s'; kullanım 'true' yada 'false'."
+#| msgid "Error: 'nm' command '%s' is not valid."
+msgid "Error: 'general' command '%s' is not valid."
+msgstr "Hata: 'general' komutu '%s' geçerli değil."
-#: ../cli/src/network-manager.c:450
+#: ../clients/cli/general.c:686
#, c-format
-msgid "Error: Sleeping status is not exported by NetworkManager."
-msgstr "Hata: Uyku durumu Ağ Yöneticisi ile verilemez."
+#| 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 "Hata: '--fields' değeri '%s' burada geçerli değil (izinli alan: %s)"
-#: ../cli/src/network-manager.c:458
+#: ../clients/cli/general.c:711
#, c-format
-msgid "Error: invalid 'sleep' parameter: '%s'; use 'true' or 'false'."
-msgstr "Hata: geçersiz 'sleep' parametresi: %s'; kullanım 'true' yada 'false'."
+#| msgid "Error: invalid 'wifi' parameter: '%s'."
+msgid "Error: invalid '%s' argument: '%s' (use on/off)."
+msgstr "Hata: geçersiz '%s' değişkeni: '%s' (on/off kullanın)"
-#: ../cli/src/network-manager.c:479
-msgid "WiFi enabled"
-msgstr "WiFi etkin"
+#: ../clients/cli/general.c:722
+#| msgid "Connection list"
+msgid "Connectivity"
+msgstr "Bağlanabilirlik"
-#: ../cli/src/network-manager.c:495
-#, c-format
-msgid "Error: invalid 'wifi' parameter: '%s'."
-msgstr "Hata: geçersiz 'wifi' parametresi: '%s'."
+#: ../clients/cli/general.c:737
+#| msgid "Networking enabled"
+msgid "Networking"
+msgstr "AÄŸ"
-#: ../cli/src/network-manager.c:517
-msgid "WWAN enabled"
-msgstr "WWAN etkin"
+#: ../clients/cli/general.c:762
+#, c-format
+#| msgid "Error: 'con' command '%s' is not valid."
+msgid "Error: 'networking connectivity' command '%s' is not valid."
+msgstr "Hata: 'ağ bağlantısı' '%s' komutu geçerli değil."
-#: ../cli/src/network-manager.c:533
+#: ../clients/cli/general.c:778
#, c-format
-msgid "Error: invalid 'wwan' parameter: '%s'."
-msgstr "Hata: geçersiz 'wwan parametresi: '%s'."
+#| msgid "Error: 'con' command '%s' is not valid."
+msgid "Error: 'networking' command '%s' is not valid."
+msgstr "Hata: 'networking' komutu '%s' geçerli değil."
-#: ../cli/src/network-manager.c:556
-msgid "WiMAX enabled"
-msgstr "WiMAX etkin"
+#: ../clients/cli/general.c:807 ../clients/cli/general.c:827
+msgid "Radio switches"
+msgstr "Radyo anahtarları"
-#: ../cli/src/network-manager.c:572
-#, c-format
-msgid "Error: invalid 'wimax' parameter: '%s'."
-msgstr "Hata: geçersiz 'wimax' değiştirgesi: '%s'."
+#. no argument, show current WiFi state
+#: ../clients/cli/general.c:845
+msgid "Wi-Fi radio switch"
+msgstr "Wi-Fi radyo anahtarı"
-#: ../cli/src/network-manager.c:588
+#. no argument, show current WWAN (mobile broadband) state
+#: ../clients/cli/general.c:861
+msgid "WWAN radio switch"
+msgstr "WWAN radyo anahtarı"
+
+#. no argument, show current WiMAX state
+#: ../clients/cli/general.c:878
+msgid "WiMAX radio switch"
+msgstr "WiMAX radyo anahtarı"
+
+#: ../clients/cli/general.c:890
#, c-format
-msgid "Error: 'nm' command '%s' is not valid."
-msgstr "Hata: '%s' nm komutu geçerli değil."
+#| msgid "Error: 'con' command '%s' is not valid."
+msgid "Error: 'radio' command '%s' is not valid."
+msgstr "Hata: 'radyo' '%s' komutu geçerli değil."
-#: ../cli/src/nmcli.c:76
-#, fuzzy, c-format
+#: ../clients/cli/nmcli.c:86
+#, c-format
#| msgid ""
#| "Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
#| "\n"
@@ -1794,273 +4650,999 @@ 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"
+" a[gent] NetworkManager secret agent or polkit agent\n"
"\n"
msgstr ""
-"Kullanımı: %s [SEÇENEKLER] NESNE { KOMUT | help }\n"
+"Kullanım: %s [SEÇENEKLER] NESNE { KOMUT | help }\n"
"\n"
"SEÇENEKLER\n"
-" -t[erse] kısa ve öz çıktı\n"
+" -t[erse] kısa çıktı\n"
" -p[retty] güzel çıktı\n"
" -m[ode] tabular|multiline çıktı kipi\n"
-" -f[ields] <field1,field2,...>|all|common çıktıda yer alacak alanları "
-"belirtir\n"
-" -e[scape] yes|no değerler arasındaki sütun "
-"ayraçları\n"
+" -f[ields] <alan1,alan2,...>|all|common çıktısı olacak alanları belirler\n"
+" -e[scape] yes|no değerlerdeki kaçış sütunları "
+"ayırıcıları\n"
" -n[ocheck] nmcli ve NetworkManager "
-"sürümlerini denetleme\n"
-" -v[ersion] program sürümünü göster\n"
-" -h[elp] bu yardımı ekrana yaz\n"
+"sürümlerini kontrol etmez\n"
+" -a[sk] eksik parametreleri sorar\n"
+" -w[ait] <seconds> biten işlemler için zaman aşımı "
+"ayarlar\n"
+" -v[ersion] program sürümünü gösterir\n"
+" -h[elp] bu yardımı ekrana yazdırır\n"
"\n"
"NESNE\n"
-" nm NetworkManager durumu\n"
-" con NetworkManager bağlantıları\n"
-" dev NetworkManager tarafından yönetilen aygıtlar\n"
+" g[eneral] NetworkManager için genel durum ve işlemler\n"
+" n[etworking] Tüm ağ kontrolleri\n"
+" r[adio] NetworkManager radyo anahtarları\n"
+" c[onnection] NetworkManager bağlantıları\n"
+" d[evice] NetworkManager tarafından yönetilen aygıtlar\n"
+" a[gent] NetworkManager gizli araç ya da polkit aracı\n"
"\n"
-#: ../cli/src/nmcli.c:124
+#: ../clients/cli/nmcli.c:142
#, c-format
msgid "Error: Object '%s' is unknown, try 'nmcli help'."
msgstr "Hata: '%s' nesnesi bilinmiyor, 'nmcli help' komutunu deneyin."
-#: ../cli/src/nmcli.c:154
+#: ../clients/cli/nmcli.c:172
#, 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:159
+#: ../clients/cli/nmcli.c:177
#, c-format
msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
msgstr "Hata: '--terse' parametresi '--pretty' parametresi ile çakışıyor."
-#: ../cli/src/nmcli.c:167
+#: ../clients/cli/nmcli.c:185
#, 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:172
+#: ../clients/cli/nmcli.c:190
#, c-format
msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
msgstr "Hata: '--pretty' parametresi '--terse' parametresi ile çakışıyor."
-#: ../cli/src/nmcli.c:182 ../cli/src/nmcli.c:198
+#: ../clients/cli/nmcli.c:200 ../clients/cli/nmcli.c:216
+#: ../clients/cli/nmcli.c:245
#, 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:191 ../cli/src/nmcli.c:207
+#: ../clients/cli/nmcli.c:209 ../clients/cli/nmcli.c:225
#, 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:214
+#: ../clients/cli/nmcli.c:232
#, c-format
msgid "Error: fields for '%s' options are missing."
msgstr "Hata: '%s' seçeneği için alanlar eksik."
-#: ../cli/src/nmcli.c:222
+#: ../clients/cli/nmcli.c:250
+#, c-format
+#| msgid "Error: '%s' is not valid argument for '%s' option."
+msgid "Error: '%s' is not a valid timeout for '%s' option."
+msgstr "Hata: '%s' geçerli bir zaman aşımı süresi değil, '%s' seçeneği için."
+
+#: ../clients/cli/nmcli.c:257
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "nmcli aracı, sürüm %s\n"
-#: ../cli/src/nmcli.c:228
+#: ../clients/cli/nmcli.c:263
#, 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:247
+#: ../clients/cli/nmcli.c:346 ../clients/cli/nmcli.c:356
#, c-format
-msgid "Caught signal %d, shutting down..."
-msgstr "%d sinyali yakalandı, kapatılıyor..."
-
-#: ../cli/src/nmcli.c:272
-msgid "Error: Could not create NMClient object."
-msgstr "Hata: NMClient nesnesi oluşturulamadı."
-
-#: ../cli/src/nmcli.c:288
-msgid "Success"
-msgstr "Başarılı"
+msgid ""
+"\n"
+"Error: nmcli terminated by signal %s (%d)\n"
+msgstr ""
+"\n"
+"Hata: nmcli %s (%d) sinyali tarafından sonlandırıldı\n"
-#: ../cli/src/settings.c:604
+#: ../clients/cli/nmcli.c:387
#, c-format
-msgid "%d (hex-ascii-key)"
-msgstr "%d (hex-ascii-key)"
+#| msgid "Failed to set signal mask: %d"
+msgid "Failed to set signal mask: %d\n"
+msgstr "Sinyal maskeleme başarısız: %d\n"
-#: ../cli/src/settings.c:606
+#: ../clients/cli/nmcli.c:394
#, c-format
-msgid "%d (104/128-bit passphrase)"
-msgstr "%d (104/128-bit parola)"
+#| msgid "Failed to set signal mask: %d"
+msgid "Failed to create signal handling thread: %d\n"
+msgstr "Sinyal yakalama iş parçaçığı oluşturma başarısız: %d\n"
-#: ../cli/src/settings.c:609 ../cli/src/settings.c:737
+#: ../clients/cli/nmcli.c:491 ../clients/nm-online.c:197
#, c-format
-msgid "%d (unknown)"
-msgstr "%d (bilinmeyen)"
-
-#: ../cli/src/settings.c:635
-msgid "0 (unknown)"
-msgstr "0 (bilinmeyen)"
-
-#: ../cli/src/settings.c:641
-msgid "any, "
-msgstr "herhangi, "
-
-#: ../cli/src/settings.c:643
-msgid "900 MHz, "
-msgstr "900 MHz, "
-
-#: ../cli/src/settings.c:645
-msgid "1800 MHz, "
-msgstr "1800 MHz, "
-
-#: ../cli/src/settings.c:647
-msgid "1900 MHz, "
-msgstr "1900 MHz, "
-
-#: ../cli/src/settings.c:649
-msgid "850 MHz, "
-msgstr "850 MHz, "
+#| msgid "Error: Could not create NMClient object."
+msgid "Error: Could not create NMClient object: %s."
+msgstr "Hata: NMClient nesnesi oluşturulamadı: %s."
-#: ../cli/src/settings.c:651
-msgid "WCDMA 3GPP UMTS 2100 MHz, "
-msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-
-#: ../cli/src/settings.c:653
-msgid "WCDMA 3GPP UMTS 1800 MHz, "
-msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-
-#: ../cli/src/settings.c:655
-msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
-msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
+#: ../clients/cli/nmcli.c:508
+msgid "Success"
+msgstr "Başarılı"
-#: ../cli/src/settings.c:657
-msgid "WCDMA 3GPP UMTS 800 MHz, "
-msgstr "WCDMA 3GPP UMTS 800 MHz, "
+#: ../clients/cli/polkit-agent.c:82
+#, c-format
+#| msgid "Active connection state: %s\n"
+msgid "Authentication message: %s\n"
+msgstr "Kimlik doÄŸrulama iletisi: %s\n"
-#: ../cli/src/settings.c:659
-msgid "WCDMA 3GPP UMTS 850 MHz, "
-msgstr "WCDMA 3GPP UMTS 850 MHz, "
+#: ../clients/cli/polkit-agent.c:88
+#, c-format
+#| msgid "Active connection state: %s\n"
+msgid "Authentication error: %s\n"
+msgstr "Kimlik doğrulama hatası: %s\n"
-#: ../cli/src/settings.c:661
-msgid "WCDMA 3GPP UMTS 900 MHz, "
-msgstr "WCDMA 3GPP UMTS 900 MHz, "
+#: ../clients/cli/polkit-agent.c:134
+#, c-format
+#| msgid "Modem initialization failed"
+msgid "Warning: polkit agent initialization failed: %s\n"
+msgstr "Uyarı: polkit aracı oluşturma başarısız: %s\n"
-#: ../cli/src/settings.c:663
-msgid "WCDMA 3GPP UMTS 1700 MHz, "
-msgstr "WCDMA 3GPP UMTS 1700 MHz, "
+#: ../clients/cli/settings.c:657
+#, c-format
+#| msgid "%d (hex-ascii-key)"
+msgid "%d (key)"
+msgstr "%d (anahtar)"
-#: ../cli/src/settings.c:665
-msgid "WCDMA 3GPP UMTS 1900 MHz, "
-msgstr "WCDMA 3GPP UMTS 1900 MHz, "
+#: ../clients/cli/settings.c:659
+#, c-format
+#| msgid "%d (104/128-bit passphrase)"
+msgid "%d (passphrase)"
+msgstr "%d (parola)"
-#: ../cli/src/settings.c:667
-msgid "WCDMA 3GPP UMTS 2600 MHz, "
-msgstr "WCDMA 3GPP UMTS 2600 MHz, "
+#: ../clients/cli/settings.c:662 ../clients/cli/settings.c:743
+#, c-format
+msgid "%d (unknown)"
+msgstr "%d (bilinmeyen)"
-#: ../cli/src/settings.c:685
+#: ../clients/cli/settings.c:691
msgid "0 (NONE)"
msgstr "0 (YOK)"
-#: ../cli/src/settings.c:691
+#: ../clients/cli/settings.c:697
msgid "REORDER_HEADERS, "
-msgstr ""
+msgstr "BAÅžLIKLARI_YENÄ°DEN_SIRALA, "
-#: ../cli/src/settings.c:693
+#: ../clients/cli/settings.c:699
msgid "GVRP, "
-msgstr ""
+msgstr "GVRP, "
-#: ../cli/src/settings.c:695
+#: ../clients/cli/settings.c:701
msgid "LOOSE_BINDING, "
-msgstr ""
+msgstr "BAÄžLAMAYI_AYIR, "
-#: ../cli/src/settings.c:731
+#: ../clients/cli/settings.c:737
#, c-format
-#| msgid "disabled"
msgid "%d (disabled)"
msgstr "%d (devre dışı)"
-#: ../cli/src/settings.c:733
+#: ../clients/cli/settings.c:739
#, c-format
msgid "%d (enabled, prefer public IP)"
msgstr "%d (etkinleÅŸtirildi, tercih edilen genel IP)"
-#: ../cli/src/settings.c:735
+#: ../clients/cli/settings.c:741
#, c-format
msgid "%d (enabled, prefer temporary IP)"
msgstr "%d (etkinleştirildi, tercih edilen geçici IP)"
-#: ../cli/src/settings.c:747
-#| msgid "(none)"
+#: ../clients/cli/settings.c:753
msgid "0 (none)"
msgstr "0 (hiçbiri)"
-#: ../cli/src/settings.c:753
+#: ../clients/cli/settings.c:759
msgid "agent-owned, "
-msgstr ""
+msgstr "uygulamaya-ait, "
-#: ../cli/src/settings.c:755
-#| msgid "not set"
+#: ../clients/cli/settings.c:761
msgid "not saved, "
-msgstr "kaydedilmemiÅŸ,"
+msgstr "kaydedilmemiÅŸ, "
-#: ../cli/src/settings.c:757
+#: ../clients/cli/settings.c:763
msgid "not required, "
-msgstr "gerekli deÄŸil,"
+msgstr "gerekli deÄŸil, "
+
+#: ../clients/cli/settings.c:1046
+#| msgid "%d (disabled)"
+msgid "0 (disabled)"
+msgstr "0 (devre dışı)"
-#: ../cli/src/settings.c:1071 ../cli/src/settings.c:1241
-#: ../cli/src/settings.c:1282
+#: ../clients/cli/settings.c:1052
+#| msgid "enabled"
+msgid "enabled, "
+msgstr "etkin, "
+
+#: ../clients/cli/settings.c:1054
+msgid "advertise, "
+msgstr "duyur, "
+
+#: ../clients/cli/settings.c:1056
+msgid "willing, "
+msgstr "hazır, "
+
+#: ../clients/cli/settings.c:1084
+msgid "-1 (unset)"
+msgstr "-1 (ayarlanmamış)"
+
+#: ../clients/cli/settings.c:1181 ../clients/cli/settings.c:1512
+#: ../clients/cli/settings.c:1554
msgid "auto"
msgstr "otomatik"
-#: ../cli/src/utils.c:105
-#, fuzzy, c-format
+#: ../clients/cli/settings.c:1194
+msgid "default"
+msgstr "varsayılan"
+
+#: ../clients/cli/settings.c:1682
+#, c-format
+msgid "Do you also want to set '%s' to '%s'? [yes]: "
+msgstr "Ayrıca şunu: '%s' şu şekilde: '%s' ayarlamak istiyor musunuz? [evet]: "
+
+#: ../clients/cli/settings.c:1684
+#, c-format
+msgid "Do you also want to clear '%s'? [yes]: "
+msgstr "Ayrıca '%s' temizlemek istiyor musunuz? [yes]: "
+
+#: ../clients/cli/settings.c:1845
+#, c-format
+msgid ""
+"Warning: %s.%s set to '%s', but it might be ignored in infrastructure mode\n"
+msgstr ""
+"Uyarı: %s.%s şu olarak: '%s' ayarlandı, ancak altyapı kipi tarafından "
+"yoksayılabilir\n"
+
+#: ../clients/cli/settings.c:1864
+#, c-format
+msgid "Warning: setting %s.%s requires removing ipv4 and ipv6 settings\n"
+msgstr "Uyarı: %s.%s ayarı, iv4 ve ipv6 ayarlarının silinmesini gerektiriyor.\n"
+
+#: ../clients/cli/settings.c:1866
+msgid "Do you want to remove them? [yes] "
+msgstr "Bunları kaldırmak istiyor musunuz? [evet] "
+
+#: ../clients/cli/settings.c:1962 ../clients/cli/settings.c:2242
+#: ../clients/cli/settings.c:4342
+#, c-format
+#| msgid "'%s' is not a valid UUID"
+msgid "'%s' is not valid"
+msgstr "'%s' geçerli değil"
+
+#: ../clients/cli/settings.c:1985
+#, c-format
+#| msgid "Error: '%s' is not valid argument for '%s' option."
+msgid "'%d' is not valid; use <%d-%d>"
+msgstr "'%d' geçerli değil, <%d-%d> kullanın"
+
+#: ../clients/cli/settings.c:2007
+#, c-format
+#| msgid "Error: '%s' is not valid argument for '%s' option."
+msgid "'%u' is not valid; use <%d-%d>"
+msgstr "'%u' geçerli değil; <%d-%d> kullanın"
+
+#: ../clients/cli/settings.c:2073
+#, c-format
+#| msgid "'%s' is not a valid ethernet port value"
+msgid "'%s' is not valid; use <option>=<value>"
+msgstr "'%s' geçerli değil; <seçenek>=<değer> kullanın"
+
+#: ../clients/cli/settings.c:2107
+#, c-format
+#| msgid "'%s' is not a valid UUID"
+msgid "index '%s' is not valid"
+msgstr "'%s' geçerli bir indeks değil"
+
+#: ../clients/cli/settings.c:2112 ../clients/cli/settings.c:2137
+msgid "no item to remove"
+msgstr "silinecek öge yok"
+
+#: ../clients/cli/settings.c:2116 ../clients/cli/settings.c:2141
+#, c-format
+msgid "index '%d' is not in range <0-%d>"
+msgstr "'%d' indeksi <0-%d> aralığında değil"
+
+#: ../clients/cli/settings.c:2156
+#, c-format
+#| msgid "invalid field '%s'"
+msgid "invalid option '%s'"
+msgstr "geçersiz seçenek '%s'"
+
+#: ../clients/cli/settings.c:2158
+msgid "missing option"
+msgstr "eksik seçenek"
+
+#: ../clients/cli/settings.c:2188 ../clients/cli/settings.c:2208
+#, c-format
+#| msgid "'%s' is not a valid ethernet port value"
+msgid "'%s' is not a valid number (or out of range)"
+msgstr "'%s' geçerli bir sayı değil (sınırların dışında)"
+
+#: ../clients/cli/settings.c:2258
+#, c-format
+#| msgid "'%s' is not a valid ethernet port value"
+msgid "'%s' is not a valid Ethernet MAC"
+msgstr "'%s' geçerli bir Ethernet MAC adresi değil"
+
+#: ../clients/cli/settings.c:2283 ../libnm-core/nm-setting-connection.c:800
+#: ../libnm-core/nm-setting-infiniband.c:254
+#: ../libnm-util/nm-setting-connection.c:833
+#: ../libnm-util/nm-setting-infiniband.c:268
+#, c-format
+msgid "'%s' is not a valid interface name"
+msgstr "'%s' geçerli bir arayüz adı değil"
+
+#: ../clients/cli/settings.c:2307
+#, c-format
+#| msgid "Error: '%s' is not valid argument for '%s' option."
+msgid "'%s' is not a valid flag number; use <0-%d>"
+msgstr "'%s' geçerli bayrak sayısı değil: <0-%d> kullanın"
+
+#: ../clients/cli/settings.c:2319
+#, c-format
+msgid "Warning: '%s' sum is higher than all flags => all flags set\n"
+msgstr "Uyarı: '%s' toplamı tüm bayraklardan büyük => tüm bayraklar ayarlandı\n"
+
+#: ../clients/cli/settings.c:2362
+#, c-format
+#| msgid "'%s' is not a valid MAC address"
+msgid "'%s' is not a valid hex character"
+msgstr "'%s' geçerli bir on altılık karakter değil"
+
+#: ../clients/cli/settings.c:2392
+#, c-format
+#| msgid "'%s' is not a valid MAC address"
+msgid "'%s' is not a valid MAC"
+msgstr "'%s' geçerli bir MAC adresi değil"
+
+#: ../clients/cli/settings.c:2429 ../libnm-core/nm-setting-connection.c:789
+#: ../libnm-util/nm-setting-connection.c:790
+#, c-format
+msgid "'%s' is not a valid UUID"
+msgstr "'%s' geçerli bir UUID değil"
+
+#: ../clients/cli/settings.c:2496
+#, c-format
+msgid "the property doesn't contain permission '%s'"
+msgstr "özellik '%s' izinini içermiyor"
+
+#: ../clients/cli/settings.c:2508
+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 ""
+"Kullanıcı izinlerinin listesini girin. Bu listedeki isimler şu şekilde "
+"biçimlendirilmelidir:\n"
+" [user:]<kullanici adi 1>, [user:]<kullanici adi 2>,...\n"
+"Öğeler virgül ve ya boşluk ile birbirinden ayrılabilirler.\n"
+"\n"
+"Örneğin: ali ayşe deniz\n"
+
+#: ../clients/cli/settings.c:2527
+#, c-format
+#| msgid "Error: '%s' is not an active connection."
+msgid "'%s' is not valid master; use ifname or connection UUID"
+msgstr "'%s' geçerli bir ana bağlantı değil; ifname ya da UUID kullanın"
+
+#: ../clients/cli/settings.c:2571
+#, c-format
+msgid "Warning: %s is not an UUID of any existing connection profile\n"
+msgstr "Uyarı: %s herhangi bir mevcut bağlantı profilinin UUID 'si değil\n"
+
+#: ../clients/cli/settings.c:2575 ../clients/cli/settings.c:2591
+#, c-format
+#| msgid "VPN connection failed"
+msgid "'%s' is not a VPN connection profile"
+msgstr "'%s' bir VPN bağlantı profili değil"
+
+#: ../clients/cli/settings.c:2584
+#, c-format
+#| msgid "Error: '%s' is not valid argument for '%s' option."
+msgid "'%s' is not a name of any exiting profile"
+msgstr "'%s' mevcut bir profilin adı değil"
+
+#: ../clients/cli/settings.c:2618
+#, c-format
+#| msgid "'%s' is not a valid UUID"
+msgid "the value '%s' is not a valid UUID"
+msgstr "'%s' değeri geçerli bir UUID değil"
+
+#: ../clients/cli/settings.c:2625
+#, c-format
+msgid "the property doesn't contain UUID '%s'"
+msgstr "Özellik UUID '%s' barındırmıyor"
+
+#: ../clients/cli/settings.c:2637
+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 ""
+"İkincil bağlantıları girin ki bu bağlantı etkinleştiğinde o da etkinleşmiş "
+"olmalıdır.\n"
+"Bağlantılar UUID ya da ID (isim) ile belirtilebilirler. nmcli şeffaf bir "
+"biçimde\n"
+"isimleri UUID olarak çevirir. NetworkManager sadece VPN leri\n"
+"ikincil bağlantı olarak kabul edebilirler.\n"
+"Ögeler virgül veya boşluklar ile birbirinden ayrılabilirler.\n"
+"\n"
+"Örneğin: private-openvpn, fe6ba5d8-c2fc-4aae-b2e3-97efddd8d9a7\n"
+
+#: ../clients/cli/settings.c:2714
+msgid "private key password not provided"
+msgstr "özel anahtar parolası girilmedi"
+
+#: ../clients/cli/settings.c:2741
+#, c-format
+msgid "the property doesn't contain EAP method '%s'"
+msgstr "özellik '%s' EAP yönetimi içermiyor"
+
+#: ../clients/cli/settings.c:2766
+#, c-format
+msgid "the property doesn't contain alternative subject match '%s'"
+msgstr "özellik diğer bir başlık eşleşmesi '%s' içermiyor."
+
+#: ../clients/cli/settings.c:2795
+#, c-format
+msgid "the property doesn't contain \"phase2\" alternative subject match '%s'"
+msgstr "özellik diğer bir \"phase2\" başlık eşleşmesi '%s' içermiyor. "
+
+#: ../clients/cli/settings.c:2821
+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 ""
+"Gizli anahtarın yolunu ve parolasını girin (henüz ayarlamadıysanız):\n"
+" <dosya yolu> [<parola>]\n"
+"Örneğin: /home/ali/gizli-anahtar Parolam123\n"
+
+#: ../clients/cli/settings.c:2891
+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 ""
+"Onaltılık değerlerin bir listesi olarak baytlar girin\n"
+"İki biçim kabul ediliyor:\n"
+"(a) onaltılık sayılarından bir karakter dizisi, her iki sayı bir bayta denk "
+"gelir\n"
+"(b) boşlık ile ayrılmış onaltılık sayılardan oluşan bir liste (tercihen 0x/"
+"0X öneki ile ve tercihen 0 ile başlayan).\n"
+"\n"
+"Örneğin: ab0455a6ea3a74C2\n"
+" ab 4 55 0xa6 ea 3a 74 C2\n"
+
+#: ../clients/cli/settings.c:2994
+#, 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 ""
+"Bağlama seçeneklerini aşağıdaki biçimde listeleyin:\n"
+" seçenek = <değer>, seçenek = <değer>,... \n"
+"Geçerli seçenekler: %s\n"
+"'kip' ismiyle veya numarasıyla kullanılabilir:\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"
+"Örnek: mode=2,miimon=120\n"
+
+#: ../clients/cli/settings.c:3032
+#, c-format
+#| msgid "'%s' is not a valid UUID"
+msgid "'%s' is not a valid InfiniBand MAC"
+msgstr "'%s' geçerli bir InfiniBand MAC adresi değil"
+
+#: ../clients/cli/settings.c:3069
+#, c-format
+#| msgid "'%s' is not a valid UUID"
+msgid "'%s' is not a valid IBoIP P_Key"
+msgstr "'%s' geçerli bir IBoIP P_Key değil"
+
+#: ../clients/cli/settings.c:3138 ../clients/cli/settings.c:3484
+#, c-format
+msgid "the property doesn't contain DNS server '%s'"
+msgstr "özellik '%s' DNS sunucusunu içermiyor"
+
+#: ../clients/cli/settings.c:3150
+msgid ""
+"Enter a list of IPv4 addresses of DNS servers.\n"
+"\n"
+"Example: 8.8.8.8, 8.8.4.4\n"
+msgstr ""
+"DNS sunucuların IPv4 adres listesini girin.\n"
+"\n"
+"Örnek: 8.8.8.8, 8.8.4.4\n"
+
+#: ../clients/cli/settings.c:3186 ../clients/cli/settings.c:3538
+#, c-format
+msgid "the property doesn't contain DNS search domain '%s'"
+msgstr "özellik, DNS arama alanı '%s' içermiyor"
+
+#: ../clients/cli/settings.c:3206 ../clients/cli/settings.c:3558
+#, c-format
+msgid "'%s' is not valid (use ip[/prefix] [gateway])"
+msgstr "'%s' geçerli değil (ip[/prefix] [gateway] kullanın)"
+
+#: ../clients/cli/settings.c:3255 ../clients/cli/settings.c:3606
+#, c-format
+msgid "the property doesn't contain IP address '%s'"
+msgstr "özellik IP adresi '%s' içermiyor"
+
+#: ../clients/cli/settings.c:3268
+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 adresleri listesini şu biçimde girin:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"Eksik prefix var ise varsayılan olarak 32 kullanılır.\n"
+"\n"
+"Örneğin: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
+
+#: ../clients/cli/settings.c:3321 ../clients/cli/settings.c:3637
+#, c-format
+msgid "'%s' is not valid (the format is: ip[/prefix] [next-hop] [metric])"
+msgstr ""
+"'%s' geçerli değil (format şöyle olmalı: ip[/önek] [sonraki-atlama-noktası] "
+"[metrik])"
+
+#: ../clients/cli/settings.c:3369 ../clients/cli/settings.c:3685
+#, c-format
+msgid "the property doesn't contain route '%s'"
+msgstr "özellik '%s' yönlendirmesini içermiyor"
+
+#: ../clients/cli/settings.c:3382
+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 yönlendirmelerinin listesini girin, şu biçimde:\n"
+" ip[/prefix] [next-hop] [metric],...\n"
+"\n"
+"Eksik önek(prefix) 32 olarak kabul edilir.\n"
+"Eksik next-hop(sonraki-atlama) 0.0.0.0. olarak kabul edilir \n"
+"Eksik metric(ölçü) ya da 0 değeri varsayılan olarak kabul edilir (NM/kernel "
+"varsayılan değeri ayarlar).\n"
+"\n"
+"Örneğin: 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"
+
+#: ../clients/cli/settings.c:3496
+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 sunucunlarının IPv6 adreslerinin listesini girin. Eğer IPv6 "
+"yapılandırma yöntemi 'auto' olarak ayarlanmış ise, DNS sunucları "
+"yapılandırmadan(var ise) otomatik olarak girilir. DNS sunucuları 'shared' "
+"ya da 'link-local' IPv6 ayarlama yöntemlerini bir üst ağ olarak kullanamaz. "
+"Tüm diğer IPv6 yapılandırma yöntemlerinde, bu DNS sunucları bu bağlantı için "
+"sadece DNS sunucusu olarak kullanılırlar.\n"
+"\n"
+"Örneğin: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
+
+#: ../clients/cli/settings.c:3619
+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 adresleri listesini girin, şu biçimde olmalı:\n"
+" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+"Eksik prefix öğesi varsayılan olarak 128 kabul edilir.\n"
+"\n"
+"Örneğin: 2607:f0d0:1002:51::4/64 2607:f0d0:1002:51::1, 1050:0:0:0:5:600:300c:"
+"326b\n"
+
+#: ../clients/cli/settings.c:3698
+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 yönlendirmelirini listesini girin, şu biçimde olmalı:\n"
+" ip[/prefix] [next-hop] [metric],...\n"
+"\n"
+"Eksik prefix(ön ek) 128 olarak kabul edilir.\n"
+"Eksik next-hop(sonraki atlama) \"::\" olarak kabul edilir.\n"
+"Eksik metric(ölçü) 0 olarak kabul edilir (NM/kernel varsayılan değeri "
+"ayarlar).\n"
+"\n"
+"Örneğin: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 "
+"2001:db8:beef::3 2\n"
+" abbe::/64 55\n"
+
+#: ../clients/cli/settings.c:3715 ../libnm-core/nm-setting-gsm.c:315
+#: ../libnm-util/nm-setting-gsm.c:372
+#, c-format
+msgid "'%s' is not a number"
+msgstr "'%s' bir numara deÄŸil"
+
+#: ../clients/cli/settings.c:3722
+#, c-format
+#| msgid "Error: '%s' is not valid argument for '%s' option."
+msgid "'%s' is not valid; use 0, 1, or 2"
+msgstr "'%s' geçerli değil; 0,1 ve ya 2 kullanın"
+
+#: ../clients/cli/settings.c:3739
+#, c-format
+#| msgid "Error: '%s' is not valid argument for '%s' option."
+msgid "'%s' is not a valid channel; use <1-13>"
+msgstr "'%s' geçerli bir kanal değil; <1-13> kullanın"
+
+#: ../clients/cli/settings.c:3776
+#, c-format
+#| msgid "Error: '%s' is not valid argument for '%s' option."
+msgid "'%s' is not valid; use [e, o, n]"
+msgstr "'%s' geçerli değil: [e, o, n] kullanın"
+
+#: ../clients/cli/settings.c:3804
+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 yapılandırma verisi ve yapılandırma içeren bir dosyayı kabul "
+"edebilir. İkinci durumda dosya okunur ve içeriği bu özelliğe konur.\n"
+"\n"
+"Örnekler: set team.config { \"device\": \"team0\", \"runner\": {\"name\": \""
+"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n"
+" set team.config /etc/my-team.conf\n"
+
+#: ../clients/cli/settings.c:3844
+msgid "no priority to remove"
+msgstr "silmek için öncelik yok"
+
+#: ../clients/cli/settings.c:3848
+#, c-format
+msgid "index '%d' is not in the range of <0-%d>"
+msgstr "'%d' indeksi <0-%d> aralığı içinde değil"
+
+#: ../clients/cli/settings.c:3887
+#, c-format
+msgid ""
+"Warning: only one mapping at a time is supported; taking the first one (%s)\n"
+msgstr ""
+"Uyarı: aynı anda sadece bir haritalama işlemi destekleniyor; birincisi "
+"seçiliyor (%s)\n"
+
+#: ../clients/cli/settings.c:3894
+#, c-format
+msgid "the property doesn't contain mapping '%s'"
+msgstr "özellik, '%s' haritalamayı içermiyor"
+
+#: ../clients/cli/settings.c:4003 ../clients/cli/settings.c:4171
+#: ../libnm-core/nm-setting-wired.c:604
+#: ../libnm-core/nm-setting-wireless.c:783
+#: ../libnm-core/nm-setting-wireless.c:795
+#: ../libnm-util/nm-setting-wired.c:648
+#: ../libnm-util/nm-setting-wireless.c:840
+#: ../libnm-util/nm-setting-wireless.c:854
+#, c-format
+msgid "'%s' is not a valid MAC address"
+msgstr "'%s' geçerli bir MAC adresi değildir"
+
+#: ../clients/cli/settings.c:4009 ../clients/cli/settings.c:4177
+#, c-format
+msgid "the property doesn't contain MAC address '%s'"
+msgstr "özellik '%s' MAC adresini içermiyor"
+
+#: ../clients/cli/settings.c:4028
+#, c-format
+#| msgid "Error: '%s' is not valid argument for '%s' option."
+msgid "'%s' is not valid; 3 strings should be provided"
+msgstr "'%s' geçerli değil; 3 karakter dizisi gerekli"
+
+#: ../clients/cli/settings.c:4047
+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 ""
+"Üç kanalın listesini girin (virgül ya da boşluk ile ayrılmış).\n"
+"\n"
+"Örneğin: 0.0.0e20 0.0.0e21 0.0.0e22\n"
+
+#: ../clients/cli/settings.c:4097
+#, 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 seçeneklerinin listesini şu biçimde girin:\n"
+" seçenek = <değer>, seçenek = <değer>,...\n"
+"Geçerli seçenekler: %s\n"
+
+#: ../clients/cli/settings.c:4143
+#, c-format
+#| msgid "'%s' is not a valid UUID"
+msgid "'%s' is not a valid channel"
+msgstr "'%s' geçerli bir kanal değil"
+
+#: ../clients/cli/settings.c:4149
+#, c-format
+#| msgid "'%s' is not a valid UUID"
+msgid "'%ld' is not a valid channel"
+msgstr "'%ld' geçerli bir kanal değil"
+
+#: ../clients/cli/settings.c:4236 ../clients/cli/settings.c:4274
+#: ../clients/cli/settings.c:4312
+#, c-format
+msgid "the property doesn't contain protocol '%s'"
+msgstr "özellik '%s' protokolünü içermiyor"
+
+#: ../clients/cli/settings.c:4351
+#, c-format
+msgid ""
+"'%s' not compatible with %s '%s', please change the key or set the right %s "
+"first."
+msgstr ""
+"'%s' şunla uyumlu değil %s '%s', lütfen anahtar değişin ya da önce %s "
+"ayarlayın."
+
+#: ../clients/cli/settings.c:4359
+#, c-format
+msgid "WEP key is guessed to be of '%s'\n"
+msgstr "WEP anahtarı '%s' olarak tahmin edildi\n"
+
+#: ../clients/cli/settings.c:4361
+#, c-format
+msgid "WEP key index set to '%d'\n"
+msgstr "WEP key dizini '%d' olarak ayarlandı\n"
+
+#: ../clients/cli/settings.c:4384
+#, c-format
+msgid "'%s' not among [0 (unknown), 1 (key), 2 (passphrase)]"
+msgstr "'%s' ÅŸunlardan biri deÄŸil [0 (bilinmeyen), 1 (anahtar), 2 (parola)]"
+
+#: ../clients/cli/settings.c:4400 ../clients/cli/settings.c:4403
+#: ../clients/cli/settings.c:4406 ../clients/cli/settings.c:4409
+#, c-format
+msgid ""
+"Warning: '%s' is not compatible with '%s' type, please change or delete the "
+"key.\n"
+msgstr ""
+"Uyarı: '%s', '%s' tipi ile uyumlu değil, lütfen anahtarı değiştirin ya da "
+"silin.\n"
+
+#: ../clients/cli/settings.c:4422
+#, 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 anahtarları tipinde birşey girin. Kabul edilen değerler: 0 ve ya "
+"bilinmeyen, 1 ve ya anahtar, 2 ve ya parola.\n"
+
+#: ../clients/cli/settings.c:4435
+#, c-format
+#| msgid "'%s' is not a valid UUID"
+msgid "'%s' is not a valid PSK"
+msgstr "'%s' geçerli bir PSK değil"
+
+#: ../clients/cli/settings.c:4479
+#, c-format
+#| msgid "'%s' is not a valid UUID"
+msgid "'%s' is not a valid DCB flag"
+msgstr "'%s' geçerli bir DCB bayrağı değil"
+
+#: ../clients/cli/settings.c:4502
+#, c-format
+#| msgid "Error: '%s' is not valid argument for '%s' option."
+msgid "'%s' is not a DCB app priority"
+msgstr "'%s' bir DCP uygulama önceliği değil"
+
+#: ../clients/cli/settings.c:4528
+msgid "must contain 8 comma-separated numbers"
+msgstr "virgül ile ayrılmış 8 numara bulunmak zorundadır"
+
+#: ../clients/cli/settings.c:4545
+#, c-format
+msgid "'%s' not a number between 0 and %u (inclusive) or %u"
+msgstr "'%s', 0 ile %u (dahil) ya da %u arasında bir sayu değil"
+
+#: ../clients/cli/settings.c:4548
+#, c-format
+msgid "'%s' not a number between 0 and %u (inclusive)"
+msgstr "'%s' 0 ve %u(kendisi dahil) arasında bir sayı değil"
+
+#: ../clients/cli/settings.c:4570
+#, c-format
+msgid ""
+"Warning: changes will have no effect until '%s' includes 1 (enabled)\n"
+"\n"
+msgstr ""
+"Uyarı: değişiklikler '%s' 1 (etkin) içermediği sürece etkili olmayacaktır\n"
+"\n"
+
+#: ../clients/cli/settings.c:4623
+#, c-format
+msgid "bandwidth percentages must total 100%%"
+msgstr "bant genişliği yüzdeleri toplam 100%% olmak zorundadır"
+
+#: ../clients/cli/settings.c:6273
+msgid "don't know how to get the property value"
+msgstr "özellik değerinin nasıl alınacağı bilinmiyor"
+
+#: ../clients/cli/settings.c:6326 ../clients/cli/settings.c:6366
+msgid "the property can't be changed"
+msgstr "özellik değişemedi"
+
+#: ../clients/cli/settings.c:6449
+#| msgid "unavailable"
+msgid "(not available)"
+msgstr "(uygun deÄŸil)"
+
+#: ../clients/cli/settings.c:6474
+msgid "[NM property description]"
+msgstr "[NM özellik açıklaması]"
+
+#: ../clients/cli/settings.c:6479
+msgid "[nmcli specific description]"
+msgstr "[nmcli belirli açıklaması]"
+
+#. ----------------------------------------------------------------------------
+#: ../clients/cli/settings.c:6528
+msgid "<hidden>"
+msgstr "<gizli>"
+
+#: ../clients/cli/utils.c:127
+#, c-format
+#| msgid "Error: '%s' argument is missing."
+msgid "Error: value for '%s' argument is required."
+msgstr "Hata: '%s' değişkeni için değer gerekli."
+
+#: ../clients/cli/utils.c:152
+#, c-format
+msgid "Error: Argument '%s' was expected, but '%s' provided."
+msgstr "Hata: '%s' değeri bekleniyordu, ancak '%s' alındı."
+
+#: ../clients/cli/utils.c:155
+#, c-format
+#| msgid "Error: missing argument for '%s' option."
+msgid "Error: Unexpected argument '%s'"
+msgstr "Hata: Beklenmeyen deÄŸiÅŸken '%s'"
+
+#: ../clients/cli/utils.c:205
+#, 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"
+msgstr "'0x%X' IP4 adresini metin biçimine çevrilirken hata oluştu"
-#: ../cli/src/utils.c:133
-#, fuzzy, c-format
+#: ../clients/cli/utils.c:233
+#, 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"
+msgstr "'%s' IP6 adresini metin biçimine çevirilirken hata oluştu"
-#: ../cli/src/utils.c:250
+#: ../clients/cli/utils.c:410
+#, c-format
+msgid "'%s' is ambiguous (on x off)"
+msgstr "'%s' belirsiz (on x off)"
+
+#: ../clients/cli/utils.c:420
+#, c-format
+#| msgid "Error: '%s' is not valid argument for '%s' option."
+msgid "'%s' is not valid; use [%s] or [%s]"
+msgstr "'%s' geçerli değil; [%s] ya da [%s] kullanın"
+
+#: ../clients/cli/utils.c:502
+#, c-format
+msgid "'%s' is ambiguous (%s x %s)"
+msgstr "'%s' belirsiz (%s x %s)"
+
+#: ../clients/cli/utils.c:514
+#, c-format
+msgid "missing name, try one of [%s]"
+msgstr "eksik isim, ÅŸunlardan birini deneyin [%s]"
+
+#: ../clients/cli/utils.c:756
#, c-format
msgid "field '%s' has to be alone"
msgstr "'%s' alanı boş olmalı"
-#: ../cli/src/utils.c:253
+#: ../clients/cli/utils.c:759
#, c-format
-msgid "invalid field '%s'"
-msgstr "geçersiz alan '%s'"
+#| msgid "Error: 'dev wifi': %s; allowed fields: %s"
+msgid "invalid field '%s'; allowed fields: %s"
+msgstr "geçersiz alan '%s'; olası alanlar: %s"
-#: ../cli/src/utils.c:272
+#: ../clients/cli/utils.c:816
msgid "Option '--terse' requires specifying '--fields'"
msgstr "'--terse' parametresi özel '--fields' parametresine ihtiyaç duyar"
-#: ../cli/src/utils.c:276
+#: ../clients/cli/utils.c:820
#, 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: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:494
-#, c-format
-msgid "Error: NameHasOwner request failed: %s"
-msgstr "Hata: NameHasOwner isteği başarısız oldu: %s"
-
-#: ../cli/src/utils.c:539
+#: ../clients/cli/utils.c:1138
#, c-format
msgid ""
"Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --"
@@ -2069,684 +5651,2163 @@ 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:548
+#: ../clients/cli/utils.c:1147
#, 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."
+
+#: ../clients/common/nm-polkit-listener.c:215
+msgid "An authentication session is already underway."
+msgstr "Bir kimlik doÄŸrulama oturu zaten var. "
+
+#. 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)
+#.
+#: ../clients/common/nm-secret-agent-simple.c:204
+#: ../clients/common/nm-secret-agent-simple.c:295
+#: ../clients/tui/nmt-page-dsl.c:67 ../clients/tui/nmt-page-wifi.c:334
+#| msgid "filename"
+msgid "Username"
+msgstr "Kullanıcı adı"
+
+#: ../clients/common/nm-secret-agent-simple.c:209
+#: ../clients/common/nm-secret-agent-simple.c:246
+#: ../clients/common/nm-secret-agent-simple.c:272
+#: ../clients/common/nm-secret-agent-simple.c:305
+#: ../clients/common/nm-secret-agent-simple.c:374
+#: ../clients/common/nm-secret-agent-simple.c:387
+#: ../clients/common/nm-secret-agent-simple.c:403
+#: ../clients/tui/nmt-page-dsl.c:76 ../clients/tui/nmt-page-wifi.c:279
+#: ../clients/tui/nmt-page-wifi.c:310 ../clients/tui/nmt-page-wifi.c:343
+msgid "Password"
+msgstr "Parola"
+
+#: ../clients/common/nm-secret-agent-simple.c:218
+msgid "Identity"
+msgstr "Kimlik"
+
+#: ../clients/common/nm-secret-agent-simple.c:223
+msgid "Private key password"
+msgstr "Özel anahtar parolası"
+
+#: ../clients/common/nm-secret-agent-simple.c:260
+#: ../clients/tui/nmt-page-wifi.c:291
+msgid "Key"
+msgstr "Anahtar"
+
+#: ../clients/common/nm-secret-agent-simple.c:300
+#: ../clients/tui/nmt-page-dsl.c:79
+msgid "Service"
+msgstr "Servis"
+
+#: ../clients/common/nm-secret-agent-simple.c:334
+msgid "Authentication required by wireless network"
+msgstr "Kablosuz aÄŸ kimlik doÄŸrulama gerektiriyor"
+
+#: ../clients/common/nm-secret-agent-simple.c:335
+#, c-format
+msgid ""
+"Passwords or encryption keys are required to access the wireless network "
+"'%s'."
+msgstr ""
+"'%s' kablosuz ağına bağlanmak için parola veya şifreleme anahtarı gerekiyor."
+
+#: ../clients/common/nm-secret-agent-simple.c:343
+#| msgid "connecting (need authentication)"
+msgid "Wired 802.1X authentication"
+msgstr "Kablolu 802.1X kimlik doğrulaması"
+
+#: ../clients/common/nm-secret-agent-simple.c:346
+#| msgid "Networking enabled"
+msgid "Network name"
+msgstr "Ağ adı"
+
+#: ../clients/common/nm-secret-agent-simple.c:353
+#| msgid "connecting (need authentication)"
+msgid "DSL authentication"
+msgstr "DSL kimlik doğrulaması"
+
+#: ../clients/common/nm-secret-agent-simple.c:361
+#| msgid "not required, "
+msgid "PIN code required"
+msgstr "PIN kodu gerekiyor"
+
+#: ../clients/common/nm-secret-agent-simple.c:362
+#| msgid "Enable or disable mobile broadband devices"
+msgid "PIN code is needed for the mobile broadband device"
+msgstr "Mobil geniş bant aygıtı için PIN kodu gerekli"
+
+#: ../clients/common/nm-secret-agent-simple.c:364
+#| msgid "VPN"
+msgid "PIN"
+msgstr "PIN"
+
+#: ../clients/common/nm-secret-agent-simple.c:370
+#: ../clients/common/nm-secret-agent-simple.c:383
+#: ../clients/common/nm-secret-agent-simple.c:399
+msgid "Mobile broadband network password"
+msgstr "Mobil geniş ağ parolası"
+
+#: ../clients/common/nm-secret-agent-simple.c:371
+#: ../clients/common/nm-secret-agent-simple.c:384
+#: ../clients/common/nm-secret-agent-simple.c:400
+#, c-format
+msgid "A password is required to connect to '%s'."
+msgstr "'%s' ağına bağlanmak için parola gerekiyor."
+
+#: ../clients/nm-online.c:96
+#, c-format
+msgid "\rConnecting"
+msgstr "\rBağlanıyor"
+
+#: ../clients/nm-online.c:149
+#| 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 ""
+"Bağlantı için bekleme zamanı, saniye cinsinden (seçenek olmadan, varsayılan "
+"30)"
+
+#: ../clients/nm-online.c:150
+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"
+
+#: ../clients/nm-online.c:151
+msgid "Don't print anything"
+msgstr "Herhangi bir şey yazdırma"
+
+#: ../clients/nm-online.c:152
+#| msgid "Exit immediately if NetworkManager is not running or connecting"
+msgid "Wait for NetworkManager startup instead of a connection"
+msgstr "Bağlantı yerine NetworkManager başlaması bekleniyor"
+
+#: ../clients/nm-online.c:173
+msgid ""
+"Waits for NetworkManager to finish activating startup network connections."
+msgstr ""
+"NetworkManager 'ın ağ bağlantıları etkinleştirmesinin bitmesi bekleniyor."
+
+#: ../clients/nm-online.c:180 ../clients/nm-online.c:186
+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."
+
+#: ../clients/tui/newt/nmt-newt-utils.c:180 ../clients/tui/nmt-editor.c:244
+#: ../clients/tui/nmt-password-dialog.c:174
+#: ../clients/tui/nmt-route-editor.c:135 ../clients/tui/nmtui-hostname.c:71
+#: ../clients/tui/nmtui.c:117
+msgid "OK"
+msgstr "Tamam"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:328
+#: ../clients/tui/newt/nmt-newt-utils.c:360
+#, c-format
+#| msgid "Could not allocate memory for PEM file data."
+msgid "Could not create temporary file: %s"
+msgstr "Geçici dosya oluşturulamadı: %s"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:368
+#, c-format
+#| msgid "Writing to %s failed: %s\n"
+msgid "Editor failed: %s"
+msgstr "Düzenleyici başarısız: %s"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:376
+#, c-format
+msgid "Editor failed with status %d"
+msgstr "Düzenleyici %d durumu ile sonlandı"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:378
+#, c-format
+msgid "Editor failed with signal %d"
+msgstr "Düzenleyici %d sinyali ile sonlandı"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:382
+#, c-format
+#| msgid "Couldn't decode PKCS#8 file: %s"
+msgid "Could not re-read file: %s"
+msgstr "Dosya yeniden okunamadı: %s"
+
+#: ../clients/tui/nm-editor-utils.c:151
+#, c-format
+#| msgid "Wired connection %d"
+msgid "Ethernet connection %d"
+msgstr "Eternet bağlantısı %d"
+
+#: ../clients/tui/nm-editor-utils.c:159
+#, c-format
+#| msgid "Wired connection %d"
+msgid "Wi-Fi connection %d"
+msgstr "Wi-Fi bağlantısı %d"
+
+#: ../clients/tui/nm-editor-utils.c:168
+#, c-format
+msgid "InfiniBand connection %d"
+msgstr "InfiniBand bağlantısı %d"
+
+#: ../clients/tui/nm-editor-utils.c:173 ../libnm-glib/nm-device.c:1798
+#: ../libnm/nm-device.c:1610
+msgid "Mobile Broadband"
+msgstr "Mobil GeniÅŸ Bant"
+
+#: ../clients/tui/nm-editor-utils.c:176
+#, c-format
+#| msgid "Bond connection %d"
+msgid "Mobile broadband connection %d"
+msgstr "Mobil geniş bant bağlantısı %d"
+
+#: ../clients/tui/nm-editor-utils.c:182 ../clients/tui/nmt-page-dsl.c:39
+#| msgid "DNS"
+msgid "DSL"
+msgstr "DSL"
+
+#: ../clients/tui/nm-editor-utils.c:186
+#, c-format
+#| msgid "ADSL connection %d"
+msgid "DSL connection %d"
+msgstr "DSL bağlantısı %d"
+
+#: ../clients/tui/nm-editor-utils.c:191 ../libnm-core/nm-connection.c:1524
+#: ../libnm-glib/nm-device.c:1802 ../libnm-util/nm-connection.c:1606
+#: ../libnm/nm-device.c:1614 ../src/settings/plugins/ifcfg-rh/reader.c:3975
+msgid "Bond"
+msgstr "BaÄŸ"
+
+#: ../clients/tui/nm-editor-utils.c:195
+#, c-format
+msgid "Bond connection %d"
+msgstr "Bond bağlantısı %d"
+
+#: ../clients/tui/nm-editor-utils.c:200 ../libnm-core/nm-connection.c:1528
+#: ../libnm-glib/nm-device.c:1806 ../libnm-util/nm-connection.c:1610
+#: ../libnm/nm-device.c:1618 ../src/settings/plugins/ifcfg-rh/reader.c:4266
+msgid "Bridge"
+msgstr "Köprü"
+
+#: ../clients/tui/nm-editor-utils.c:205
+#, c-format
+msgid "Bridge connection %d"
+msgstr "Köprü bağlantısı %d"
+
+#: ../clients/tui/nm-editor-utils.c:209 ../libnm-core/nm-connection.c:1526
+#: ../libnm-glib/nm-device.c:1804 ../libnm-util/nm-connection.c:1608
+#: ../libnm/nm-device.c:1616 ../src/settings/plugins/ifcfg-rh/reader.c:4081
+msgid "Team"
+msgstr "Takım"
+
+#: ../clients/tui/nm-editor-utils.c:214
+#, c-format
+#| msgid "Wired connection %d"
+msgid "Team connection %d"
+msgstr "Takım bağlantısı %d"
+
+#: ../clients/tui/nm-editor-utils.c:222
+#, c-format
+msgid "VLAN connection %d"
+msgstr "VLAN bağlatısı %d"
+
+#: ../clients/tui/nm-editor-utils.c:237
+#, c-format
+msgid "VPN connection %d"
+msgstr "VPN bağlantısı %d"
+
+#: ../clients/tui/nmt-device-entry.c:371
+msgid "Select..."
+msgstr "Seç..."
+
+#: ../clients/tui/nmt-edit-connection-list.c:112
+msgid "Add"
+msgstr "Ekle"
+
+#: ../clients/tui/nmt-edit-connection-list.c:115
+#: ../clients/tui/nmt-page-ip4.c:175 ../clients/tui/nmt-page-ip6.c:173
+#: ../clients/tui/nmt-page-team-port.c:110 ../clients/tui/nmt-page-team.c:174
+msgid "Edit..."
+msgstr "Düzenle..."
+
+#: ../clients/tui/nmt-edit-connection-list.c:118
+#: ../clients/tui/nmtui-edit.c:526
+msgid "Delete"
+msgstr "Sil"
+
+#: ../clients/tui/nmt-editor.c:81
+#, c-format
+msgid "Could not create editor for connection '%s' of type '%s'."
+msgstr "'%s' bağlantısı '%s' türünde oluşturulamadı."
+
+#: ../clients/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 "Geçersiz bağlantı '%s' için bir düzenleyici oluşturulamadı."
+
+#: ../clients/tui/nmt-editor.c:95
+#| msgid "disconnecting"
+msgid "Edit Connection"
+msgstr "Bağlantıyı Düzenle"
+
+#: ../clients/tui/nmt-editor.c:148
+#, c-format
+#| msgid "unable to join netlink group: %s"
+msgid "Unable to save connection: %s"
+msgstr "Bağlantı kaydedilemedi: %s"
+
+#: ../clients/tui/nmt-editor.c:162
+#, c-format
+#| msgid "Error: Failed to add/activate new connection: (%d) %s"
+msgid "Unable to add new connection: %s"
+msgstr "Yeni bağlantı eklenemedi: %s"
+
+#: ../clients/tui/nmt-editor.c:241 ../clients/tui/nmt-password-dialog.c:171
+#: ../clients/tui/nmt-route-editor.c:128 ../clients/tui/nmtui-edit.c:218
+#: ../clients/tui/nmtui-edit.c:525 ../clients/tui/nmtui-hostname.c:69
+msgid "Cancel"
+msgstr "Ä°ptal"
+
+#: ../clients/tui/nmt-mtu-entry.c:86
+msgid "(default)"
+msgstr "(varsayılan)"
+
+#: ../clients/tui/nmt-mtu-entry.c:88 ../clients/tui/nmt-mtu-entry.c:119
+msgid "bytes"
+msgstr "bayt"
+
+#: ../clients/tui/nmt-page-bond.c:88
+msgid "Round-robin"
+msgstr "Round-robin"
+
+#: ../clients/tui/nmt-page-bond.c:89
+msgid "Active Backup"
+msgstr "Etkin Yedek"
+
+#: ../clients/tui/nmt-page-bond.c:90
+msgid "XOR"
+msgstr "XOR"
+
+#: ../clients/tui/nmt-page-bond.c:91
+msgid "Broadcast"
+msgstr "Çoklu gönderim"
+
+#: ../clients/tui/nmt-page-bond.c:92
+msgid "802.3ad"
+msgstr "802.3ad"
+
+#: ../clients/tui/nmt-page-bond.c:93
+msgid "Adaptive Transmit Load Balancing (tlb)"
+msgstr "Uyarlanabilir İletim Yük Dengelemesi (tlb)"
+
+#: ../clients/tui/nmt-page-bond.c:94
+msgid "Adaptive Load Balancing (alb)"
+msgstr "Uyarlanabilir Yük Dengelemesi (alb)"
+
+#: ../clients/tui/nmt-page-bond.c:100
+msgid "MII (recommended)"
+msgstr "MII (önerilen)"
+
+#: ../clients/tui/nmt-page-bond.c:101
+#| msgid "AP"
+msgid "ARP"
+msgstr "ARP"
+
+#: ../clients/tui/nmt-page-bond.c:357 ../clients/tui/nmt-page-bridge.c:80
+#: ../clients/tui/nmt-page-team.c:153
+msgid "Slaves"
+msgstr "Bağımlılar"
+
+#: ../clients/tui/nmt-page-bond.c:369 ../clients/tui/nmt-page-wifi.c:232
+msgid "Mode"
+msgstr "Kip"
+
+#: ../clients/tui/nmt-page-bond.c:375
+msgid "Primary"
+msgstr "Birincil"
+
+#: ../clients/tui/nmt-page-bond.c:381
+msgid "Link monitoring"
+msgstr "Bağlantı izleme"
+
+#: ../clients/tui/nmt-page-bond.c:387 ../clients/tui/nmt-page-bond.c:394
+#: ../clients/tui/nmt-page-bond.c:401 ../clients/tui/nmt-page-bond.c:408
+msgctxt "milliseconds"
+msgid "ms"
+msgstr "ms"
-#: ../libnm-util/crypto.c:133
+#: ../clients/tui/nmt-page-bond.c:388 ../clients/tui/nmt-page-bond.c:409
+msgid "Monitoring frequency"
+msgstr "İzleme sıklığı"
+
+#: ../clients/tui/nmt-page-bond.c:395
+msgid "Link up delay"
+msgstr "Giden bağlantı gecikmesi:"
+
+#: ../clients/tui/nmt-page-bond.c:402
+msgid "Link down delay"
+msgstr "Gelen bağlantı gecikmesi"
+
+#: ../clients/tui/nmt-page-bond.c:415
+msgid "ARP targets"
+msgstr "ARP hedefleri"
+
+#: ../clients/tui/nmt-page-bridge-port.c:38
+msgid "BRIDGE PORT"
+msgstr "KÖPRÜ PORTU"
+
+#: ../clients/tui/nmt-page-bridge-port.c:69
+#: ../clients/tui/nmt-page-bridge.c:106
+msgid "Priority"
+msgstr "Öncelik"
+
+#: ../clients/tui/nmt-page-bridge-port.c:75
+msgid "Path cost"
+msgstr "Yol maliyeti"
+
+#: ../clients/tui/nmt-page-bridge-port.c:77
+msgid "Hairpin mode"
+msgstr "Hairpin kipi"
+
+#: ../clients/tui/nmt-page-bridge.c:90 ../clients/tui/nmt-page-bridge.c:115
+#: ../clients/tui/nmt-page-bridge.c:125 ../clients/tui/nmt-page-bridge.c:135
+msgid "seconds"
+msgstr "saniye"
+
+#: ../clients/tui/nmt-page-bridge.c:91
+msgid "Aging time"
+msgstr "Yaşlandırma zamanı"
+
+#: ../clients/tui/nmt-page-bridge.c:93
+msgid "Enable STP (Spanning Tree Protocol)"
+msgstr "STP Etkinleştir (Yayılım Ağacı Protokolü)"
+
+#: ../clients/tui/nmt-page-bridge.c:116
+msgid "Forward delay"
+msgstr "Ä°letme gecikmesi"
+
+#: ../clients/tui/nmt-page-bridge.c:126
+msgid "Hello time"
+msgstr "Merhaba zamanı"
+
+#: ../clients/tui/nmt-page-bridge.c:136
+msgid "Max age"
+msgstr "En fazla yaÅŸ"
+
+#: ../clients/tui/nmt-page-ethernet.c:41
+msgid "ETHERNET"
+msgstr "ETHERNET"
+
+#: ../clients/tui/nmt-page-ethernet.c:80 ../clients/tui/nmt-page-vlan.c:124
+#: ../clients/tui/nmt-page-wifi.c:366
+#| msgid "is not a valid MAC address"
+msgid "Cloned MAC address"
+msgstr "Klonlanmış MAC adresi"
+
+#: ../clients/tui/nmt-page-infiniband.c:40
+msgid "INFINIBAND"
+msgstr "INFINIBAND"
+
+#: ../clients/tui/nmt-page-infiniband.c:51
+msgid "Datagram"
+msgstr "Veri birimi"
+
+#: ../clients/tui/nmt-page-infiniband.c:52
+#| msgid "connected"
+msgid "Connected"
+msgstr "Bağlandı"
+
+#: ../clients/tui/nmt-page-infiniband.c:90
+msgid "Transport mode"
+msgstr "Aktarım kipi"
+
+#: ../clients/tui/nmt-page-ip4.c:41
+#| msgid "disabled"
+msgid "Disabled"
+msgstr "Kapalı"
+
+#: ../clients/tui/nmt-page-ip4.c:42 ../clients/tui/nmt-page-ip6.c:42
+msgid "Automatic"
+msgstr "Otomatik"
+
+#: ../clients/tui/nmt-page-ip4.c:43 ../clients/tui/nmt-page-ip6.c:44
+msgid "Link-Local"
+msgstr "Yerel Bağlantı"
+
+#: ../clients/tui/nmt-page-ip4.c:44 ../clients/tui/nmt-page-ip6.c:45
+msgid "Manual"
+msgstr "Elle"
+
+#: ../clients/tui/nmt-page-ip4.c:45
+msgid "Shared"
+msgstr "Paylaşılmış"
+
+#: ../clients/tui/nmt-page-ip4.c:54
+msgid "IPv4 CONFIGURATION"
+msgstr "IPv4 YAPILANDIRMASI"
+
+#: ../clients/tui/nmt-page-ip4.c:100 ../clients/tui/nmt-page-ip6.c:100
+msgid "(No custom routes)"
+msgstr "(Özel bir yönlendirme yok)"
+
+#: ../clients/tui/nmt-page-ip4.c:103 ../clients/tui/nmt-page-ip6.c:103
+#, c-format
+msgid "One custom route"
+msgid_plural "%d custom routes"
+msgstr[0] "Bir özel yönlendirme"
+msgstr[1] "%d özel yönlendirme"
+
+#: ../clients/tui/nmt-page-ip4.c:144 ../clients/tui/nmt-page-ip6.c:144
+msgid "Addresses"
+msgstr "Adresler"
+
+#: ../clients/tui/nmt-page-ip4.c:150 ../clients/tui/nmt-page-ip6.c:150
+msgid "Gateway"
+msgstr "Geçit"
+
+#: ../clients/tui/nmt-page-ip4.c:156 ../clients/tui/nmt-page-ip6.c:156
+msgid "DNS servers"
+msgstr "DNS sunucuları"
+
+#: ../clients/tui/nmt-page-ip4.c:162 ../clients/tui/nmt-page-ip6.c:162
+msgid "Search domains"
+msgstr "Alan adlarını ara"
+
+#: ../clients/tui/nmt-page-ip4.c:177 ../clients/tui/nmt-page-ip6.c:175
+msgid "Routing"
+msgstr "Yönlendirme"
+
+#: ../clients/tui/nmt-page-ip4.c:179 ../clients/tui/nmt-page-ip6.c:177
+msgid "Never use this network for default route"
+msgstr "Bu ağı varsayılan yönlendirme olarak asla kullanma"
+
+#: ../clients/tui/nmt-page-ip4.c:187
+msgid "Require IPv4 addressing for this connection"
+msgstr "Bu bağlantı için IPv4 adresleme gerekir"
+
+#: ../clients/tui/nmt-page-ip6.c:41
+msgid "Ignore"
+msgstr "Yoksay"
+
+#: ../clients/tui/nmt-page-ip6.c:43
+msgid "Automatic (DHCP-only)"
+msgstr "Otomatik (sadece DHCP)"
+
+#: ../clients/tui/nmt-page-ip6.c:54
+msgid "IPv6 CONFIGURATION"
+msgstr "IPv6 YAPILANDIRMASI"
+
+#: ../clients/tui/nmt-page-ip6.c:185
+msgid "Require IPv6 addressing for this connection"
+msgstr "Bu bağlantı IPv6 adreslemesi gerektiriyor"
+
+#: ../clients/tui/nmt-page-main.c:139
+msgid "Hide"
+msgstr "Gizle"
+
+#: ../clients/tui/nmt-page-main.c:139
+msgid "Show"
+msgstr "Göster"
+
+#: ../clients/tui/nmt-page-main.c:188
+#| msgid "filename"
+msgid "Profile name"
+msgstr "Profil adı"
+
+#: ../clients/tui/nmt-page-main.c:199
+msgid "Ethernet device"
+msgstr "Ethernet aygıtı"
+
+#: ../clients/tui/nmt-page-main.c:201
+#| msgid "Device details"
+msgid "Device"
+msgstr "Aygıt"
+
+#: ../clients/tui/nmt-page-main.c:252
+msgid "Automatically connect"
+msgstr "Otomatik baÄŸlan"
+
+#: ../clients/tui/nmt-page-main.c:258
+msgid "Available to all users"
+msgstr "Tüm kullanıcılar kullanabilir"
+
+#: ../clients/tui/nmt-page-ppp.c:49
+msgid "PPP CONFIGURATION"
+msgstr "PPP YAPILANDIRMASI"
+
+#: ../clients/tui/nmt-page-ppp.c:142
+msgid "Allowed authentication methods:"
+msgstr "İzin verilen kimlik doğrulama yöntemleri:"
+
+#: ../clients/tui/nmt-page-ppp.c:149
+#| msgid "AP"
+msgid "EAP"
+msgstr "EAP"
+
+#: ../clients/tui/nmt-page-ppp.c:157
+#| msgid "AP"
+msgid "PAP"
+msgstr "PAP"
+
+#: ../clients/tui/nmt-page-ppp.c:165
+msgid "CHAP"
+msgstr "CHAP"
+
+#: ../clients/tui/nmt-page-ppp.c:173
+msgid "MSCHAPv2"
+msgstr "MSCHAPv2"
+
+#: ../clients/tui/nmt-page-ppp.c:181
+msgid "MSCHAP"
+msgstr "MSCHAP"
+
+#: ../clients/tui/nmt-page-ppp.c:197
+msgid "Use point-to-point encryption (MPPE)"
+msgstr "Uçtan uca şifreleme kullan (MPPE)"
+
+#: ../clients/tui/nmt-page-ppp.c:209
+msgid "Require 128-bit encryption"
+msgstr "128-bit ÅŸifreleme gerektiriyor"
+
+#: ../clients/tui/nmt-page-ppp.c:219
+msgid "Use stateful MPPE"
+msgstr "Durumlu MPPE kullan"
+
+#: ../clients/tui/nmt-page-ppp.c:231
+msgid "Allow BSD data compression"
+msgstr "BSD veri sıkıştırmasına izin ver"
+
+#: ../clients/tui/nmt-page-ppp.c:239
+msgid "Allow Deflate data compression"
+msgstr "Deflate veri sıkıştırmasına izin ver"
+
+#: ../clients/tui/nmt-page-ppp.c:247
+msgid "Use TCP header compression"
+msgstr "TCP başlık sıkıştırması kullan"
+
+#: ../clients/tui/nmt-page-ppp.c:257
+msgid "Send PPP echo packets"
+msgstr "PPP yankı paketleri gönder"
+
+#: ../clients/tui/nmt-page-team-port.c:45
+msgid "TEAM PORT"
+msgstr "TAKIM PORTU"
+
+#: ../clients/tui/nmt-page-team-port.c:100 ../clients/tui/nmt-page-team.c:164
+msgid "JSON configuration"
+msgstr "JSON yapılandırması"
+
+#: ../clients/tui/nmt-page-vlan.c:101
+msgid "Parent"
+msgstr "Ãœst"
+
+#: ../clients/tui/nmt-page-vlan.c:116
+#| msgid "VLAN"
+msgid "VLAN id"
+msgstr "VLAN kimliÄŸi"
+
+#: ../clients/tui/nmt-page-wifi.c:57
+msgid "WI-FI"
+msgstr "Kablosuz"
+
+#: ../clients/tui/nmt-page-wifi.c:68
+msgctxt "Wi-Fi"
+msgid "Client"
+msgstr "Ä°stemci"
+
+#: ../clients/tui/nmt-page-wifi.c:69
+msgid "Access Point"
+msgstr "Erişim Noktası"
+
+#: ../clients/tui/nmt-page-wifi.c:70
+#| msgid "Ad-Hoc"
+msgid "Ad-Hoc Network"
+msgstr "Ad-Hoc AÄŸ"
+
+#: ../clients/tui/nmt-page-wifi.c:75
+msgctxt "Wi-Fi"
+msgid "Automatic"
+msgstr "Otomatik"
+
+#. 802.11a Wi-Fi network
+#: ../clients/tui/nmt-page-wifi.c:77
+msgid "A (5 GHz)"
+msgstr "A (5 GHz)"
+
+#. 802.11b / 802.11g Wi-Fi network
+#: ../clients/tui/nmt-page-wifi.c:79
+msgid "B/G (2.4 GHz)"
+msgstr "B/G (2.4 GHz)"
+
+#: ../clients/tui/nmt-page-wifi.c:84
+msgctxt "Wi-Fi security"
+msgid "None"
+msgstr "Hiçbiri"
+
+#: ../clients/tui/nmt-page-wifi.c:85
+msgid "WPA & WPA2 Personal"
+msgstr "WPA & WPA2 KiÅŸisel"
+
+#: ../clients/tui/nmt-page-wifi.c:86
+#| msgid "Enterprise "
+msgid "WPA & WPA2 Enterprise"
+msgstr "WPA & WPA2 Kurumsal"
+
+#: ../clients/tui/nmt-page-wifi.c:87
+msgid "WEP 40/128-bit Key (Hex or ASCII)"
+msgstr "WEP 40/128-bit Anahtar (Hex veya ASCII)"
+
+#: ../clients/tui/nmt-page-wifi.c:88
+#| msgid "%d (104/128-bit passphrase)"
+msgid "WEP 128-bit Passphrase"
+msgstr "WEP 128-bit Parola"
+
+#: ../clients/tui/nmt-page-wifi.c:89
+msgid "Dynamic WEP (802.1x)"
+msgstr "Dinamik WEP (802.1x)"
+
+#: ../clients/tui/nmt-page-wifi.c:90
+msgid "LEAP"
+msgstr "LEAP"
+
+#: ../clients/tui/nmt-page-wifi.c:95
+msgctxt "WEP key index"
+msgid "1 (Default)"
+msgstr "1 (Varsayılan)"
+
+#: ../clients/tui/nmt-page-wifi.c:96
+msgctxt "WEP key index"
+msgid "2"
+msgstr "2"
+
+#: ../clients/tui/nmt-page-wifi.c:97
+msgctxt "WEP key index"
+msgid "3"
+msgstr "3"
+
+#: ../clients/tui/nmt-page-wifi.c:98
+msgctxt "WEP key index"
+msgid "4"
+msgstr "4"
+
+#: ../clients/tui/nmt-page-wifi.c:103
+#| msgid "System"
+msgid "Open System"
+msgstr "Açık Sistem"
+
+#: ../clients/tui/nmt-page-wifi.c:104
+msgid "Shared Key"
+msgstr "Paylaşılan Anahtar"
+
+#: ../clients/tui/nmt-page-wifi.c:258
+msgid "Channel"
+msgstr "Kanal"
+
+#: ../clients/tui/nmt-page-wifi.c:263
+msgid "Security"
+msgstr "Güvenlik"
+
+#. "wpa-enterprise"
+#. FIXME
+#: ../clients/tui/nmt-page-wifi.c:284
+msgid "(No support for wpa-enterprise yet...)"
+msgstr "(Henüz wpa-enterprise desteği yok...)"
+
+#: ../clients/tui/nmt-page-wifi.c:294 ../clients/tui/nmt-page-wifi.c:313
+#| msgid "WEP "
+msgid "WEP index"
+msgstr "WEP indeks"
+
+#: ../clients/tui/nmt-page-wifi.c:302 ../clients/tui/nmt-page-wifi.c:321
+msgid "Authentication"
+msgstr "Kimlik doÄŸrulama"
+
+#. "dynamic-wep"
+#. FIXME
+#: ../clients/tui/nmt-page-wifi.c:327
+msgid "(No support for dynamic-wep yet...)"
+msgstr "(Henüz dynamic-wep için destek yok...)"
+
+#: ../clients/tui/nmt-password-fields.c:130
+msgid "Ask for this password every time"
+msgstr "Bu parolayı her zaman sor"
+
+#: ../clients/tui/nmt-password-fields.c:131
+msgid "Show password"
+msgstr "Parolayı göster"
+
+#: ../clients/tui/nmt-route-table.c:219
+msgid "Destination"
+msgstr "Hedef"
+
+#: ../clients/tui/nmt-route-table.c:219
+msgid "Prefix"
+msgstr "Ön ek"
+
+#: ../clients/tui/nmt-route-table.c:228
+msgid "Next Hop"
+msgstr "Sonraki Atlama"
+
+#: ../clients/tui/nmt-route-table.c:236
+msgid "Metric"
+msgstr "Ölçü"
+
+#: ../clients/tui/nmt-route-table.c:256
+msgid "No custom routes are defined."
+msgstr "Tanımlanmış bir özel yönlendirme yok."
+
+#: ../clients/tui/nmt-slave-list.c:137
+msgid "Select the type of slave connection you wish to add."
+msgstr "Eklemek istediğiniz ikincil bağlantının türünü seçin."
+
+#: ../clients/tui/nmt-widget-list.c:141
+msgid "Add..."
+msgstr "Ekle..."
+
+#: ../clients/tui/nmt-widget-list.c:204
+msgid "Remove"
+msgstr "Sil"
+
+#: ../clients/tui/nmtui-connect.c:90
+#| msgid "connection failed"
+msgid "Activation failed"
+msgstr "Etkinleştirme başarısız"
+
+#: ../clients/tui/nmtui-connect.c:145
+#| msgid "\rConnecting"
+msgid "Connecting..."
+msgstr "Bağlanıyor..."
+
+#: ../clients/tui/nmtui-connect.c:174 ../clients/tui/nmtui-connect.c:197
+#, c-format
+#| msgid "no active connection on device '%s'"
+msgid "Could not activate connection: %s"
+msgstr "Bağlantı etkinleştirilemedi: %s"
+
+#: ../clients/tui/nmtui-connect.c:257 ../clients/tui/nmtui-connect.c:306
+#| msgid "activated"
+msgid "Activate"
+msgstr "EtkinleÅŸtir"
+
+#: ../clients/tui/nmtui-connect.c:259
+#| msgid "deactivated"
+msgid "Deactivate"
+msgstr "Devre Dışı Bırak"
+
+#: ../clients/tui/nmtui-connect.c:311 ../clients/tui/nmtui-edit.c:121
+#: ../clients/tui/nmtui.c:111
+msgid "Quit"
+msgstr "Çık"
+
+#: ../clients/tui/nmtui-connect.c:334
+#, c-format
+#| msgid "PAN connection %d"
+msgid "No such connection '%s'"
+msgstr "'%s' gibi bir bağlantı yok"
+
+#: ../clients/tui/nmtui-connect.c:336
+#| msgid "Connection activated\n"
+msgid "Connection is already active"
+msgstr "Bağlantı zaten etkin"
+
+#: ../clients/tui/nmtui-edit.c:226
+msgid "Create"
+msgstr "OluÅŸtur"
+
+#: ../clients/tui/nmtui-edit.c:368
+msgid "Select the type of connection you wish to create."
+msgstr "Oluşturmak istediğiniz bağlantı tipini seçin."
+
+#: ../clients/tui/nmtui-edit.c:376
+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 ""
+"Bir VPN oluşturuyorsanız, ve VPN bağlantısı listede gözükmüyor ise, doğru "
+"VPN eklentisini kuramamış olabilirsiniz."
+
+#: ../clients/tui/nmtui-edit.c:412 ../clients/tui/nmtui-edit.c:428
+#| msgid "\rConnecting"
+msgid "New Connection"
+msgstr "Yeni Bağlantı"
+
+#: ../clients/tui/nmtui-edit.c:467
+#, c-format
+#| msgid "unable to join netlink group: %s"
+msgid "Unable to delete connection: %s"
+msgstr "Bağlantı silinemedi: %s"
+
+#: ../clients/tui/nmtui-edit.c:506
+#, c-format
+#| msgid "no device found for connection '%s'"
+msgid "Could not delete connection '%s': %s"
+msgstr "'%s' bağlantısı silinemedi: %s"
+
+#: ../clients/tui/nmtui-edit.c:527
+#, c-format
+msgid "Are you sure you want to delete the connection '%s'?"
+msgstr "'%s' bağlantısını silmek istediğinize emin misiniz?"
+
+#: ../clients/tui/nmtui-hostname.c:47
+msgid "Set Hostname"
+msgstr "Makine Adını Ayarla"
+
+#: ../clients/tui/nmtui-hostname.c:55
+msgid "Hostname"
+msgstr "Makine Adı"
+
+#. Translators: this indicates the result. ie, "I have set the hostname to ..."
+#: ../clients/tui/nmtui-hostname.c:118
+#, c-format
+msgid "Set hostname to '%s'"
+msgstr "Makine adını '%s' olarak ayarla"
+
+#: ../clients/tui/nmtui-hostname.c:120
+#, c-format
+#| msgid "Failed to set signal mask: %d"
+msgid "Unable to set hostname: %s"
+msgstr "Makine adı ayarlanamadı: %s"
+
+#: ../clients/tui/nmtui.c:56 ../clients/tui/nmtui.c:59
+#| msgid "connecting"
+msgid "connection"
+msgstr "bağlantı"
+
+#: ../clients/tui/nmtui.c:57
+#| msgid "disconnecting"
+msgid "Edit a connection"
+msgstr "Bir bağlantıyı düzenle"
+
+#: ../clients/tui/nmtui.c:60
+#| msgid "Active connections"
+msgid "Activate a connection"
+msgstr "Bir bağlantıyı etkinleştir"
+
+#: ../clients/tui/nmtui.c:62
+msgid "new hostname"
+msgstr "yeni makine adı"
+
+#: ../clients/tui/nmtui.c:63
+#| msgid "Modify persistent system hostname"
+msgid "Set system hostname"
+msgstr "Sistem makine adını ayarla"
+
+#: ../clients/tui/nmtui.c:86
+#| msgid "NetworkManager status"
+msgid "NetworkManager TUI"
+msgstr "NetworkManager TUI"
+
+#: ../clients/tui/nmtui.c:94
+msgid "Please select an option"
+msgstr "Lütfen bir seçenek seçin"
+
+#: ../clients/tui/nmtui.c:146
+msgid "Usage"
+msgstr "Kullanım"
+
+#: ../clients/tui/nmtui.c:227
+msgid "Could not parse arguments"
+msgstr "Değişkenler ayrıştırılamadı"
+
+#: ../clients/tui/nmtui.c:237
+#, c-format
+#| msgid "You must be root to run NetworkManager!\n"
+msgid "Could not contact NetworkManager: %s.\n"
+msgstr "NetworkManager ile bağlantı kurulamadı: %s.\n"
+
+#: ../clients/tui/nmtui.c:242
+#| msgid "Error: NetworkManager is not running."
+msgid "NetworkManager is not running."
+msgstr "NetworkManager çalışmıyor."
+
+#: ../libnm-core/crypto.c:120 ../libnm-util/crypto.c:133
#, c-format
msgid "PEM key file had no end tag '%s'."
msgstr "PEM anahtar dosyası '%s' son etiketine sahip değil."
-#: ../libnm-util/crypto.c:146
+#: ../libnm-core/crypto.c:133 ../libnm-util/crypto.c:146
#, c-format
msgid "Doesn't look like a PEM private key file."
msgstr "Bir PEM özel anahtar dosyasına benzemiyor."
-#: ../libnm-util/crypto.c:163
+#: ../libnm-core/crypto.c:150 ../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:171
+#: ../libnm-core/crypto.c:158 ../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:181
+#: ../libnm-core/crypto.c:168 ../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:192
+#: ../libnm-core/crypto.c:179 ../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:199
+#: ../libnm-core/crypto.c:186 ../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:212
+#: ../libnm-core/crypto.c:201 ../libnm-util/crypto.c:214
#, c-format
msgid "Malformed PEM file: unknown private key cipher '%s'."
msgstr "Bozuk PEM dosyası: bilinmeyen özel anahtar şifresi '%s'."
-#: ../libnm-util/crypto.c:231
+#: ../libnm-core/crypto.c:220 ../libnm-util/crypto.c:233
#, c-format
msgid "Could not decode private key."
msgstr "Özel anahtar çözülemedi."
-#: ../libnm-util/crypto.c:283
+#: ../libnm-core/crypto.c:273 ../libnm-util/crypto.c:285
msgid "Failed to find expected PKCS#8 start tag."
msgstr "Beklenen PKCS#8 başlama etiketi bulunamadı."
-#: ../libnm-util/crypto.c:291
+#: ../libnm-core/crypto.c:281 ../libnm-util/crypto.c:293
#, c-format
msgid "Failed to find expected PKCS#8 end tag '%s'."
msgstr "Beklenen PKCS#8 bitiş etiketi '%s' bulunamadı."
-#: ../libnm-util/crypto.c:310
+#: ../libnm-core/crypto.c:300 ../libnm-util/crypto.c:312
msgid "Failed to decode PKCS#8 private key."
msgstr "PKCS#8 özel anahtarının şifresi çözülemedi."
-#: ../libnm-util/crypto.c:352
+#: ../libnm-core/crypto.c:342 ../libnm-util/crypto.c:354
#, 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:366
+#: ../libnm-core/crypto.c:356 ../libnm-util/crypto.c:368
#, c-format
msgid "IV contains non-hexadecimal digits."
msgstr "IV, onaltılık olmayan sayılar barınırıyor."
-#: ../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
+#: ../libnm-core/crypto.c:396 ../libnm-core/crypto_gnutls.c:151
+#: ../libnm-core/crypto_gnutls.c:269 ../libnm-core/crypto_nss.c:172
+#: ../libnm-core/crypto_nss.c:334 ../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' özel anahtar şifresi bilinmiyor."
-#: ../libnm-util/crypto.c:511
+#: ../libnm-core/crypto.c:508 ../libnm-util/crypto.c:518
#, c-format
msgid "Unable to determine private key type."
msgstr "Özel anahtar türü belirlenemedi."
-#: ../libnm-util/crypto.c:566
+#: ../libnm-core/crypto.c:565 ../libnm-util/crypto.c:573
#, c-format
msgid "PEM certificate had no start tag '%s'."
msgstr "PEM sertifikasının başlama etiketi '%s' yok."
-#: ../libnm-util/crypto.c:575
+#: ../libnm-core/crypto.c:574 ../libnm-util/crypto.c:582
#, c-format
msgid "PEM certificate had no end tag '%s'."
msgstr "PEM sertifikasının bitiş etiketi '%s' yok."
-#: ../libnm-util/crypto.c:593
+#: ../libnm-core/crypto.c:592 ../libnm-util/crypto.c:600
#, c-format
msgid "Failed to decode certificate."
msgstr "Sertifika çözülemedi."
-#: ../libnm-util/crypto_gnutls.c:50
+#: ../libnm-core/crypto_gnutls.c:50 ../libnm-util/crypto_gnutls.c:50
msgid "Failed to initialize the crypto engine."
msgstr "Kripto cihazını sıfırlama başarısız."
-#: ../libnm-util/crypto_gnutls.c:92
+#: ../libnm-core/crypto_gnutls.c:92 ../libnm-util/crypto_gnutls.c:92
#, c-format
msgid "Failed to initialize the MD5 engine: %s / %s."
msgstr "MD5 cihazını başlatma başarısız oldu: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:155
+#: ../libnm-core/crypto_gnutls.c:159 ../libnm-util/crypto_gnutls.c:158
#, c-format
msgid "Invalid IV length (must be at least %zd)."
msgstr "Geçersiz IV uzunluğu (en az %zd olmalı)."
-#: ../libnm-util/crypto_gnutls.c:166
+#: ../libnm-core/crypto_gnutls.c:170 ../libnm-util/crypto_gnutls.c:169
#, 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:175
+#: ../libnm-core/crypto_gnutls.c:179 ../libnm-util/crypto_gnutls.c:178
#, 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."
-#: ../libnm-util/crypto_gnutls.c:184
+#: ../libnm-core/crypto_gnutls.c:188 ../libnm-util/crypto_gnutls.c:187
#, 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:193
+#: ../libnm-core/crypto_gnutls.c:197 ../libnm-util/crypto_gnutls.c:196
#, 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:203 ../libnm-util/crypto_nss.c:257
+#: ../libnm-core/crypto_gnutls.c:207 ../libnm-core/crypto_nss.c:262
+#: ../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 ""
"Özel anahtarın şifresini çözme başarısız oldu: beklenmeyen dolgu uzunluğu."
-#: ../libnm-util/crypto_gnutls.c:214 ../libnm-util/crypto_nss.c:268
+#: ../libnm-core/crypto_gnutls.c:218 ../libnm-core/crypto_nss.c:273
+#: ../libnm-util/crypto_gnutls.c:217 ../libnm-util/crypto_nss.c:271
#, 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:281
+#: ../libnm-core/crypto_gnutls.c:291 ../libnm-util/crypto_gnutls.c:289
#, 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:290
+#: ../libnm-core/crypto_gnutls.c:300 ../libnm-util/crypto_gnutls.c:298
#, 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:300
+#: ../libnm-core/crypto_gnutls.c:310 ../libnm-util/crypto_gnutls.c:308
#, 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:309
+#: ../libnm-core/crypto_gnutls.c:319 ../libnm-util/crypto_gnutls.c:317
#, c-format
msgid "Failed to encrypt the data: %s / %s."
msgstr "Veri şifreleme başarısız: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:349
+#: ../libnm-core/crypto_gnutls.c:359 ../libnm-util/crypto_gnutls.c:357
#, c-format
msgid "Error initializing certificate data: %s"
msgstr "Sertifika verisi başlatma hatası: %s"
-#: ../libnm-util/crypto_gnutls.c:371
+#: ../libnm-core/crypto_gnutls.c:381 ../libnm-util/crypto_gnutls.c:379
#, c-format
msgid "Couldn't decode certificate: %s"
msgstr "Sertifika çözülemedi: %s"
-#: ../libnm-util/crypto_gnutls.c:395
+#: ../libnm-core/crypto_gnutls.c:406 ../libnm-util/crypto_gnutls.c:403
#, 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:408
+#: ../libnm-core/crypto_gnutls.c:419 ../libnm-util/crypto_gnutls.c:416
#, c-format
msgid "Couldn't decode PKCS#12 file: %s"
msgstr "PKCS#12 dosya şifresi çözülemedi: %s"
-#: ../libnm-util/crypto_gnutls.c:420
+#: ../libnm-core/crypto_gnutls.c:431 ../libnm-util/crypto_gnutls.c:428
#, c-format
msgid "Couldn't verify PKCS#12 file: %s"
msgstr "PKCS#12 dosyası doğrulanamadı: %s"
-#: ../libnm-util/crypto_gnutls.c:448
+#: ../libnm-core/crypto_gnutls.c:460 ../libnm-util/crypto_gnutls.c:456
#, c-format
msgid "Couldn't initialize PKCS#8 decoder: %s"
msgstr "PKCS#8 şifre çözücü ilklendirilemedi: %s"
-#: ../libnm-util/crypto_gnutls.c:471
+#: ../libnm-core/crypto_gnutls.c:483 ../libnm-util/crypto_gnutls.c:479
#, c-format
msgid "Couldn't decode PKCS#8 file: %s"
msgstr "PKCS#8 dosya şifresi çözülemedi: %s"
-#: ../libnm-util/crypto_nss.c:56
+#: ../libnm-core/crypto_nss.c:57 ../libnm-util/crypto_nss.c:56
#, c-format
msgid "Failed to initialize the crypto engine: %d."
msgstr "Kripto motoru başlatılamadı: %d."
-#: ../libnm-util/crypto_nss.c:107
+#: ../libnm-core/crypto_nss.c:108 ../libnm-util/crypto_nss.c:107
#, c-format
msgid "Failed to initialize the MD5 context: %d."
msgstr "MD5 içeriği sıfırlama başarısız: %d."
-#: ../libnm-util/crypto_nss.c:175
+#: ../libnm-core/crypto_nss.c:180 ../libnm-util/crypto_nss.c:178
#, c-format
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:186
+#: ../libnm-core/crypto_nss.c:191 ../libnm-util/crypto_nss.c:189
#, 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:196
+#: ../libnm-core/crypto_nss.c:201 ../libnm-util/crypto_nss.c:199
#, 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:206
+#: ../libnm-core/crypto_nss.c:211 ../libnm-util/crypto_nss.c:209
#, 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:214
+#: ../libnm-core/crypto_nss.c:219 ../libnm-util/crypto_nss.c:217
#, 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:227
+#: ../libnm-core/crypto_nss.c:232 ../libnm-util/crypto_nss.c:230
#, c-format
msgid "Failed to decrypt the private key: %d."
msgstr "Özel anahtar şifre çözme hatası: %d."
-#: ../libnm-util/crypto_nss.c:235
+#: ../libnm-core/crypto_nss.c:240 ../libnm-util/crypto_nss.c:238
#, 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:246
+#: ../libnm-core/crypto_nss.c:251 ../libnm-util/crypto_nss.c:249
#, 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:348
+#: ../libnm-core/crypto_nss.c:356 ../libnm-util/crypto_nss.c:353
#, c-format
msgid "Failed to initialize the encryption cipher slot."
msgstr "Şifreleme anahtar yuvası sıfırlama hatası."
-#: ../libnm-util/crypto_nss.c:356
+#: ../libnm-core/crypto_nss.c:364 ../libnm-util/crypto_nss.c:361
#, c-format
msgid "Failed to set symmetric key for encryption."
msgstr "Şifreleme için simetrik anahtar ayarlama hatası."
-#: ../libnm-util/crypto_nss.c:364
+#: ../libnm-core/crypto_nss.c:372 ../libnm-util/crypto_nss.c:369
#, c-format
msgid "Failed to set IV for encryption."
msgstr "Şifreleme için IV ayarlama hatası."
-#: ../libnm-util/crypto_nss.c:372
+#: ../libnm-core/crypto_nss.c:380 ../libnm-util/crypto_nss.c:377
#, c-format
msgid "Failed to initialize the encryption context."
msgstr "Şifreleme içeriği sıfırlama hatası."
-#: ../libnm-util/crypto_nss.c:380
+#: ../libnm-core/crypto_nss.c:388 ../libnm-util/crypto_nss.c:385
#, c-format
msgid "Failed to encrypt: %d."
msgstr "Åžifrelenemedi: %d."
-#: ../libnm-util/crypto_nss.c:388
+#: ../libnm-core/crypto_nss.c:396 ../libnm-util/crypto_nss.c:393
#, c-format
msgid "Unexpected amount of data after encrypting."
msgstr "Åžifrelemeden sonra beklenmeyen miktarda veri."
-#: ../libnm-util/crypto_nss.c:431
+#: ../libnm-core/crypto_nss.c:436 ../libnm-util/crypto_nss.c:433
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "Sertifikanın kodu çözülemedi: %d"
-#: ../libnm-util/crypto_nss.c:466
+#: ../libnm-core/crypto_nss.c:471
#, c-format
-msgid "Couldn't convert password to UCS2: %d"
-msgstr "Şifre UCS2'ye dönüştürülemedi: %d"
+msgid "Password must be UTF-8"
+msgstr "Parola UTF-8 olmalı"
-#: ../libnm-util/crypto_nss.c:494
+#: ../libnm-core/crypto_nss.c:501 ../libnm-util/crypto_nss.c:496
#, 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:503
+#: ../libnm-core/crypto_nss.c:510 ../libnm-util/crypto_nss.c:505
#, c-format
msgid "Couldn't decode PKCS#12 file: %d"
msgstr "PKCS#12 dosyası kodu çözülemedi: %d"
-#: ../libnm-util/crypto_nss.c:512
+#: ../libnm-core/crypto_nss.c:519 ../libnm-util/crypto_nss.c:514
#, c-format
msgid "Couldn't verify PKCS#12 file: %d"
msgstr "PKCS#12 dosyası doğrulanamadı: %d"
-#: ../libnm-util/crypto_nss.c:556
+#: ../libnm-core/crypto_nss.c:564 ../libnm-util/crypto_nss.c:558
msgid "Could not generate random data."
msgstr "Rastgele veri üretilemedi."
-#: ../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-core/nm-connection.c:223
+msgid "wrong type; should be a list of strings."
+msgstr "yanlış tip; karakter dizilerinin listesi olmalı."
+
+#: ../libnm-core/nm-connection.c:278
+msgid "unknown setting name"
+msgstr "bilinmeyen ayar adı"
+
+#: ../libnm-core/nm-connection.c:763
+msgid "setting not found"
+msgstr "ayar bulunamadı"
+
+#: ../libnm-core/nm-connection.c:827
+#| msgid "Error: '%s' is not an active connection."
+msgid "setting not allowed in slave connection"
+msgstr "ikincil bağlantıda ayara izin verilmiyor"
+
+#: ../libnm-core/nm-connection.c:838
+msgid "setting is required for non-slave connections"
+msgstr "ikincil olmayan bağlantılar için ayarlar gerekli"
+
+#: ../libnm-core/nm-connection.c:904
+msgid "Unexpected failure to verify the connection"
+msgstr "Bağlantı doğrulamada beklenmedik hata"
+
+#: ../libnm-core/nm-connection.c:935
+msgid "Unexpected failure to normalize the connection"
+msgstr "Bağlantıyı normalleştirmede beklenmedik hata"
+
+#: ../libnm-core/nm-connection.c:1399 ../libnm-core/nm-setting-8021x.c:2270
+#: ../libnm-core/nm-setting-8021x.c:2287 ../libnm-core/nm-setting-8021x.c:2317
+#: ../libnm-core/nm-setting-8021x.c:2334 ../libnm-core/nm-setting-8021x.c:2375
+#: ../libnm-core/nm-setting-8021x.c:2387 ../libnm-core/nm-setting-8021x.c:2405
+#: ../libnm-core/nm-setting-8021x.c:2417 ../libnm-core/nm-setting-8021x.c:2441
+#: ../libnm-core/nm-setting-8021x.c:2623 ../libnm-core/nm-setting-adsl.c:188
+#: ../libnm-core/nm-setting-bluetooth.c:118
+#: ../libnm-core/nm-setting-bluetooth.c:136
+#: ../libnm-core/nm-setting-cdma.c:140
+#: ../libnm-core/nm-setting-connection.c:766
+#: ../libnm-core/nm-setting-connection.c:782
+#: ../libnm-core/nm-setting-connection.c:812
+#: ../libnm-core/nm-setting-ip4-config.c:881
+#: ../libnm-core/nm-setting-ip6-config.c:799
+#: ../libnm-core/nm-setting-ip6-config.c:863
+#: ../libnm-core/nm-setting-olpc-mesh.c:106
+#: ../libnm-core/nm-setting-pppoe.c:141 ../libnm-core/nm-setting-vpn.c:398
+#: ../libnm-core/nm-setting-wimax.c:115
+#: ../libnm-core/nm-setting-wireless-security.c:861
+#: ../libnm-core/nm-setting-wireless.c:692 ../libnm-util/nm-setting.c:1370
+#: ../libnm-util/nm-setting.c:1389 ../libnm-util/nm-setting.c:1407
+#: ../libnm-util/nm-setting-8021x.c:2282 ../libnm-util/nm-setting-8021x.c:2299
+#: ../libnm-util/nm-setting-8021x.c:2340 ../libnm-util/nm-setting-8021x.c:2357
+#: ../libnm-util/nm-setting-8021x.c:2409 ../libnm-util/nm-setting-8021x.c:2421
+#: ../libnm-util/nm-setting-8021x.c:2439 ../libnm-util/nm-setting-8021x.c:2451
+#: ../libnm-util/nm-setting-8021x.c:2475 ../libnm-util/nm-setting-8021x.c:2653
+#: ../libnm-util/nm-setting-adsl.c:208
+#: ../libnm-util/nm-setting-bluetooth.c:140
+#: ../libnm-util/nm-setting-bluetooth.c:158
+#: ../libnm-util/nm-setting-cdma.c:161
+#: ../libnm-util/nm-setting-connection.c:767
+#: ../libnm-util/nm-setting-connection.c:783
+#: ../libnm-util/nm-setting-connection.c:844
+#: ../libnm-util/nm-setting-ip4-config.c:828
+#: ../libnm-util/nm-setting-ip6-config.c:809
+#: ../libnm-util/nm-setting-ip6-config.c:873
+#: ../libnm-util/nm-setting-olpc-mesh.c:122
+#: ../libnm-util/nm-setting-pppoe.c:162 ../libnm-util/nm-setting-vpn.c:422
#: ../libnm-util/nm-setting-wimax.c:137
-#: ../libnm-util/nm-setting-wireless-security.c:792
-#: ../libnm-util/nm-setting-wireless.c:610
-#, fuzzy
+#: ../libnm-util/nm-setting-wireless-security.c:891
+#: ../libnm-util/nm-setting-wireless.c:750
#| msgid "Error: %s argument is missing."
msgid "property is missing"
-msgstr "Hata: %s bağımsız değişken eksik."
+msgstr "özellik eksik"
+
+#: ../libnm-core/nm-setting-8021x.c:577 ../libnm-util/nm-setting-8021x.c:596
+msgid "CA certificate must be in X.509 format"
+msgstr "CA sertifikası X.509 biçiminde olmalı"
+
+#: ../libnm-core/nm-setting-8021x.c:892 ../libnm-core/nm-setting-8021x.c:1156
+#: ../libnm-core/nm-setting-8021x.c:1476 ../libnm-util/nm-setting-8021x.c:914
+#: ../libnm-util/nm-setting-8021x.c:1177 ../libnm-util/nm-setting-8021x.c:1500
+#| msgid "Error initializing certificate data: %s"
+msgid "invalid certificate format"
+msgstr "geçersiz sertifika biçimi"
-#: ../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-core/nm-setting-8021x.c:1758 ../libnm-util/nm-setting-8021x.c:1769
+msgid "invalid private key"
+msgstr "geçersiz özel anahtar"
+
+#: ../libnm-core/nm-setting-8021x.c:2068 ../libnm-util/nm-setting-8021x.c:2080
+#| msgid "Failed to decrypt the private key."
+msgid "invalid phase2 private key"
+msgstr "geçersiz faz2 özel anahtarı"
+
+#: ../libnm-core/nm-setting-8021x.c:2277 ../libnm-core/nm-setting-8021x.c:2294
+#: ../libnm-core/nm-setting-8021x.c:2324 ../libnm-core/nm-setting-8021x.c:2341
+#: ../libnm-core/nm-setting-8021x.c:2381 ../libnm-core/nm-setting-8021x.c:2393
+#: ../libnm-core/nm-setting-8021x.c:2411 ../libnm-core/nm-setting-8021x.c:2423
+#: ../libnm-core/nm-setting-8021x.c:2448 ../libnm-core/nm-setting-adsl.c:195
+#: ../libnm-core/nm-setting-adsl.c:204 ../libnm-core/nm-setting-cdma.c:156
+#: ../libnm-core/nm-setting-cdma.c:165
+#: ../libnm-core/nm-setting-connection.c:773
+#: ../libnm-core/nm-setting-connection.c:823
+#: ../libnm-core/nm-setting-gsm.c:224 ../libnm-core/nm-setting-gsm.c:281
+#: ../libnm-core/nm-setting-gsm.c:290
+#: ../libnm-core/nm-setting-ip4-config.c:946
+#: ../libnm-core/nm-setting-ip4-config.c:955
+#: ../libnm-core/nm-setting-pppoe.c:148 ../libnm-core/nm-setting-pppoe.c:157
+#: ../libnm-core/nm-setting-vpn.c:407 ../libnm-core/nm-setting-vpn.c:417
+#: ../libnm-core/nm-setting-wimax.c:124
+#: ../libnm-core/nm-setting-wireless-security.c:891
+#: ../libnm-core/nm-setting-wireless-security.c:899
+#: ../libnm-core/nm-setting-wireless-security.c:923
+#: ../libnm-util/nm-setting-8021x.c:2289 ../libnm-util/nm-setting-8021x.c:2306
+#: ../libnm-util/nm-setting-8021x.c:2347 ../libnm-util/nm-setting-8021x.c:2364
+#: ../libnm-util/nm-setting-8021x.c:2415 ../libnm-util/nm-setting-8021x.c:2427
+#: ../libnm-util/nm-setting-8021x.c:2445 ../libnm-util/nm-setting-8021x.c:2457
+#: ../libnm-util/nm-setting-8021x.c:2482 ../libnm-util/nm-setting-adsl.c:215
+#: ../libnm-util/nm-setting-adsl.c:224 ../libnm-util/nm-setting-cdma.c:177
+#: ../libnm-util/nm-setting-cdma.c:186
+#: ../libnm-util/nm-setting-connection.c:774
+#: ../libnm-util/nm-setting-connection.c:851
+#: ../libnm-util/nm-setting-gsm.c:281 ../libnm-util/nm-setting-gsm.c:338
+#: ../libnm-util/nm-setting-gsm.c:347
+#: ../libnm-util/nm-setting-ip4-config.c:893
+#: ../libnm-util/nm-setting-ip4-config.c:902
+#: ../libnm-util/nm-setting-pppoe.c:169 ../libnm-util/nm-setting-pppoe.c:178
+#: ../libnm-util/nm-setting-vpn.c:431 ../libnm-util/nm-setting-vpn.c:441
#: ../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
+#: ../libnm-util/nm-setting-wireless-security.c:921
+#: ../libnm-util/nm-setting-wireless-security.c:929
+#: ../libnm-util/nm-setting-wireless-security.c:953
msgid "property is empty"
-msgstr ""
+msgstr "özellik boş"
-#: ../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
+#: ../libnm-core/nm-setting-8021x.c:2306 ../libnm-core/nm-setting-8021x.c:2353
+#: ../libnm-util/nm-setting-8021x.c:2317 ../libnm-util/nm-setting-8021x.c:2329
+#: ../libnm-util/nm-setting-8021x.c:2375 ../libnm-util/nm-setting-8021x.c:2387
#, c-format
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
+msgstr "PKCS#12 için '%s' özelliği eşleşmek zorunda"
+
+#: ../libnm-core/nm-setting-8021x.c:2598 ../libnm-core/nm-setting-8021x.c:2632
+#: ../libnm-core/nm-setting-bluetooth.c:127
+#: ../libnm-core/nm-setting-infiniband.c:191
+#: ../libnm-core/nm-setting-infiniband.c:206
+#: ../libnm-core/nm-setting-ip4-config.c:937
+#: ../libnm-core/nm-setting-ip6-config.c:854
+#: ../libnm-core/nm-setting-olpc-mesh.c:135
+#: ../libnm-core/nm-setting-wimax.c:133 ../libnm-core/nm-setting-wired.c:618
+#: ../libnm-core/nm-setting-wired.c:628
+#: ../libnm-core/nm-setting-wireless-security.c:942
+#: ../libnm-core/nm-setting-wireless-security.c:951
+#: ../libnm-core/nm-setting-wireless-security.c:959
+#: ../libnm-core/nm-setting-wireless-security.c:967
+#: ../libnm-core/nm-setting-wireless-security.c:975
+#: ../libnm-core/nm-setting-wireless-security.c:984
+#: ../libnm-core/nm-setting-wireless-security.c:993
+#: ../libnm-core/nm-setting-wireless-security.c:1002
+#: ../libnm-core/nm-setting-wireless-security.c:1038
+#: ../libnm-core/nm-setting-wireless-security.c:1048
+#: ../libnm-core/nm-setting-wireless.c:753
+#: ../libnm-core/nm-setting-wireless.c:762
+#: ../libnm-core/nm-setting-wireless.c:771 ../libnm-util/nm-setting.c:1380
+#: ../libnm-util/nm-setting.c:1398 ../libnm-util/nm-setting.c:1417
+#: ../libnm-util/nm-setting-8021x.c:2628 ../libnm-util/nm-setting-8021x.c:2662
+#: ../libnm-util/nm-setting-bluetooth.c:149
+#: ../libnm-util/nm-setting-infiniband.c:204
+#: ../libnm-util/nm-setting-infiniband.c:220
+#: ../libnm-util/nm-setting-ip4-config.c:884
+#: ../libnm-util/nm-setting-ip6-config.c:864
+#: ../libnm-util/nm-setting-olpc-mesh.c:150
+#: ../libnm-util/nm-setting-wimax.c:155 ../libnm-util/nm-setting-wired.c:660
+#: ../libnm-util/nm-setting-wired.c:669
+#: ../libnm-util/nm-setting-wireless-security.c:972
+#: ../libnm-util/nm-setting-wireless-security.c:981
+#: ../libnm-util/nm-setting-wireless-security.c:989
+#: ../libnm-util/nm-setting-wireless-security.c:997
+#: ../libnm-util/nm-setting-wireless-security.c:1005
+#: ../libnm-util/nm-setting-wireless-security.c:1014
+#: ../libnm-util/nm-setting-wireless-security.c:1023
+#: ../libnm-util/nm-setting-wireless-security.c:1032
+#: ../libnm-util/nm-setting-wireless-security.c:1068
+#: ../libnm-util/nm-setting-wireless-security.c:1078
+#: ../libnm-util/nm-setting-wireless.c:810
+#: ../libnm-util/nm-setting-wireless.c:819
+#: ../libnm-util/nm-setting-wireless.c:828
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:560
-#: ../libnm-util/nm-setting-wireless-security.c:801
-#, fuzzy, c-format
+msgstr "özellik geçersiz"
+
+#: ../libnm-core/nm-setting-8021x.c:2657 ../libnm-core/nm-setting-8021x.c:2667
+#: ../libnm-core/nm-setting-8021x.c:2677 ../libnm-core/nm-setting-8021x.c:2687
+#: ../libnm-core/nm-setting-8021x.c:2697 ../libnm-core/nm-setting-adsl.c:216
+#: ../libnm-core/nm-setting-adsl.c:228
+#: ../libnm-core/nm-setting-bluetooth.c:144
+#: ../libnm-core/nm-setting-wireless-security.c:870
+#: ../libnm-util/nm-setting-8021x.c:2687 ../libnm-util/nm-setting-8021x.c:2697
+#: ../libnm-util/nm-setting-8021x.c:2707 ../libnm-util/nm-setting-8021x.c:2717
+#: ../libnm-util/nm-setting-8021x.c:2727 ../libnm-util/nm-setting-adsl.c:236
+#: ../libnm-util/nm-setting-adsl.c:248
+#: ../libnm-util/nm-setting-bluetooth.c:166
+#: ../libnm-util/nm-setting-wireless-security.c:900
+#, 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."
+msgstr "'%s' özellik için geçerli bir değer değil"
-#: ../libnm-util/nm-setting-bluetooth.c:201
+#: ../libnm-core/nm-setting-bluetooth.c:166
#, c-format
-msgid "requires '%s' or '%s' setting"
-msgstr ""
+msgid "'%s' connection requires '%s' or '%s' setting"
+msgstr "'%s' bağlantısı '%s' ya da '%s' ayarı istiyor"
-#: ../libnm-util/nm-setting-bond.c:391
+#: ../libnm-core/nm-setting-bond.c:459 ../libnm-util/nm-setting-bond.c:501
#, c-format
msgid "invalid option '%s' or its value '%s'"
-msgstr ""
+msgstr "geçersiz seçenek '%s' ya da değeri '%s'"
-#: ../libnm-util/nm-setting-bond.c:410
+#: ../libnm-core/nm-setting-bond.c:478 ../libnm-util/nm-setting-bond.c:520
#, c-format
msgid "only one of '%s' and '%s' can be set"
-msgstr ""
+msgstr "sadece ÅŸunlardan biri ayarlanabilir; '%s' ve '%s'"
-#: ../libnm-util/nm-setting-bond.c:421
+#: ../libnm-core/nm-setting-bond.c:489 ../libnm-util/nm-setting-bond.c:531
#, c-format
-msgid "setting '%s' is required"
-msgstr ""
+msgid "mandatory option '%s' is missing"
+msgstr "zorunlu seçenek '%s' eksik"
-#: ../libnm-util/nm-setting-bond.c:430
-#, fuzzy, c-format
+#: ../libnm-core/nm-setting-bond.c:498 ../libnm-util/nm-setting-bond.c:540
+#, 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."
+msgstr "'%s', '%s' için geçerli bir değer değil"
-#: ../libnm-util/nm-setting-bond.c:443
-#, fuzzy, c-format
+#: ../libnm-core/nm-setting-bond.c:511 ../libnm-util/nm-setting-bond.c:553
+#, 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"
+msgstr "'%s=%s', '%s > 0' ile uyumlu deÄŸil"
-#: ../libnm-util/nm-setting-bond.c:454
-#, fuzzy, c-format
+#: ../libnm-core/nm-setting-bond.c:524 ../libnm-util/nm-setting-bond.c:566
+#, c-format
+#| msgid "Error: '%s' is not valid argument for '%s' option."
+msgid "'%s' is not a valid interface name for '%s' option"
+msgstr "'%s', '%s' seçeneği için geçerli bir arayüz ismi değil"
+
+#: ../libnm-core/nm-setting-bond.c:534 ../libnm-util/nm-setting-bond.c:576
+#, c-format
+#| msgid "Error: '%s' is not valid argument for '%s' option."
+msgid "'%s' option is only valid for '%s=%s'"
+msgstr "'%s' seçeneği sadece '%s=%s' için geçerli"
+
+#: ../libnm-core/nm-setting-bond.c:547 ../libnm-util/nm-setting-bond.c:589
+#, 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."
+msgstr "'%s=%s', '%s' için geçerli bir yapılandırma değil"
-#: ../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
+#: ../libnm-core/nm-setting-bond.c:560 ../libnm-core/nm-setting-bond.c:569
+#: ../libnm-core/nm-setting-bond.c:589 ../libnm-core/nm-setting-bond.c:625
+#: ../libnm-util/nm-setting-bond.c:602 ../libnm-util/nm-setting-bond.c:611
+#: ../libnm-util/nm-setting-bond.c:631 ../libnm-util/nm-setting-bond.c:667
#, c-format
-msgid "'%s' option requires setting '%s' option"
-msgstr ""
+msgid "'%s' option requires '%s' option to be set"
+msgstr "'%s' seçeneği, '%s' seçeneğinin ayarlanması için gerekli"
-#: ../libnm-util/nm-setting-bond.c:508
+#: ../libnm-core/nm-setting-bond.c:600 ../libnm-util/nm-setting-bond.c:642
#, c-format
msgid "'%s' option is empty"
msgstr "'%s' seçeneği boş"
-#: ../libnm-util/nm-setting-bond.c:520
-#, fuzzy, c-format
+#: ../libnm-core/nm-setting-bond.c:612 ../libnm-util/nm-setting-bond.c:654
+#, 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."
+msgstr "'%s', '%s' seçeneği için geçerli bir IPv4 adresi değil"
+
+#: ../libnm-core/nm-setting-bond.c:639 ../libnm-util/nm-setting-bond.c:681
+#, c-format
+#| msgid "'%s' is not a valid Wi-Fi mode"
+msgid "'%s' option is only valid with mode '%s'"
+msgstr "'%s' seçeneği sadece '%s' kipi ile geçerli olur"
-#: ../libnm-util/nm-setting-bridge-port.c:155
+#: ../libnm-core/nm-setting-bridge-port.c:123
+#: ../libnm-core/nm-setting-bridge-port.c:135
+#: ../libnm-util/nm-setting-bridge-port.c:153
#: ../libnm-util/nm-setting-bridge-port.c:165
#, c-format
msgid "'%d' is not a valid value for the property (should be <= %d)"
-msgstr ""
+msgstr "'%d' özellik için geçerli bir değere değil (<= %d olmalı)"
-#: ../libnm-util/nm-setting-bridge.c:251
+#: ../libnm-core/nm-setting-bridge-port.c:153
+#: ../libnm-core/nm-setting-team-port.c:96
#, c-format
-msgid "value '%d' is out of range <%d-%d>"
-msgstr ""
+msgid "missing setting"
+msgstr "eksik ayar"
-#: ../libnm-util/nm-setting-bridge.c:277
-#: ../libnm-util/nm-setting-connection.c:732
-#: ../libnm-util/nm-setting-vlan.c:486
+#: ../libnm-core/nm-setting-bridge-port.c:164
+#: ../libnm-core/nm-setting-team-port.c:107
#, c-format
-msgid "'%s' is not a valid interface name"
+msgid ""
+"A connection with a '%s' setting must have the slave-type set to '%s'. "
+"Instead it is '%s'"
msgstr ""
+"'%s' ayarını içeren bir bağlantının ikincil tür ayarı '%s' olmalıdır. Bunun "
+"yerine '%s'"
-#: ../libnm-util/nm-setting-cdma.c:170
+#: ../libnm-core/nm-setting-bridge.c:204 ../libnm-util/nm-setting-bridge.c:268
+#, c-format
+msgid "value '%d' is out of range <%d-%d>"
+msgstr "'%d' değeri aralığın dışında <%d-%d>"
+
+#: ../libnm-core/nm-setting-bridge.c:221 ../libnm-core/nm-setting-wired.c:592
+#: ../libnm-core/nm-setting-wired.c:652 ../libnm-util/nm-setting-bridge.c:285
+#: ../libnm-util/nm-setting-wired.c:635 ../libnm-util/nm-setting-wired.c:693
+msgid "is not a valid MAC address"
+msgstr "geçerli bir MAC adresi değildir"
+
+#: ../libnm-core/nm-setting-cdma.c:147 ../libnm-util/nm-setting-cdma.c:168
msgid "property is empty'"
-msgstr ""
+msgstr "özellik boş'"
-#: ../libnm-util/nm-setting-connection.c:697
+#: ../libnm-core/nm-setting-connection.c:745
#, c-format
-msgid "'%s' is not a valid UUID"
-msgstr "'%s' geçerli bir UUID değil"
+#| msgid "no device found for connection '%s'"
+msgid "setting required for connection of type '%s'"
+msgstr "'%s' tipinin bağlantısı için ayar gerekli"
-#: ../libnm-util/nm-setting-connection.c:716
+#: ../libnm-core/nm-setting-connection.c:833
#, c-format
-msgid "'%s' doesn't match the virtual interface name '%s'"
-msgstr ""
+#| msgid "Error: timeout value '%s' is not valid."
+msgid "connection type '%s' is not valid"
+msgstr "bağlantı tipi '%s' geçerli değil"
-#: ../libnm-util/nm-setting-connection.c:760
+#: ../libnm-core/nm-setting-connection.c:868
+#: ../libnm-util/nm-setting-connection.c:876
#, c-format
-msgid "requires presence of '%s' setting in the connection"
-msgstr ""
+#| msgid "Unknown log level '%s'"
+msgid "Unknown slave type '%s'"
+msgstr "Bilinmeyen ikincil tür '%s'"
-#: ../libnm-util/nm-setting-connection.c:784
-msgid "IPv4 configuration is not allowed for bonding slave"
-msgstr ""
+#: ../libnm-core/nm-setting-connection.c:878
+#: ../libnm-util/nm-setting-connection.c:886
+#| msgid "Shared connection service failed"
+msgid "Slave connections need a valid '"
+msgstr "İkincil bağlantının ihtiyacı bir geçerli '"
-#: ../libnm-util/nm-setting-connection.c:801
-msgid "IPv6 configuration is not allowed for bonding slave"
-msgstr ""
+#: ../libnm-core/nm-setting-connection.c:899
+#: ../libnm-util/nm-setting-connection.c:895
+#| msgid "not saved, "
+msgid "Cannot set '"
+msgstr "Ayarlanamadı '"
+
+#: ../libnm-core/nm-setting-connection.c:912
+#, c-format
+msgid "property type should be set to '%s'"
+msgstr "özellik türü '%s' olarak ayarlanmalı"
+
+#: ../libnm-core/nm-setting-connection.c:927
+#, c-format
+msgid "slave-type '%s' requires a '%s' setting in the connection"
+msgstr "ikincil tür '%s' bağlantı ayarı olarak bir '%s' gereksinimi duyuyor"
-#: ../libnm-util/nm-setting-gsm.c:293
+#: ../libnm-core/nm-setting-connection.c:937
+#, c-format
+#| msgid "Active connection path: %s\n"
+msgid "Detect a slave connection with '"
+msgstr "İkincil bir bağlantıyı algıla '"
+
+#: ../libnm-core/nm-setting-dcb.c:521 ../libnm-util/nm-setting-dcb.c:593
+msgid "flags invalid"
+msgstr "bayraklar geçersiz"
+
+#: ../libnm-core/nm-setting-dcb.c:530 ../libnm-util/nm-setting-dcb.c:602
+msgid "flags invalid - disabled"
+msgstr "bayraklar geçersiz - kapatılmış"
+
+#: ../libnm-core/nm-setting-dcb.c:556 ../libnm-core/nm-setting-dcb.c:605
+#: ../libnm-util/nm-setting-dcb.c:628 ../libnm-util/nm-setting-dcb.c:677
+msgid "property invalid (not enabled)"
+msgstr "özellik geçersiz (etkin değil)"
+
+#: ../libnm-core/nm-setting-dcb.c:565 ../libnm-util/nm-setting-dcb.c:637
+msgid "element invalid"
+msgstr "öğe geçersiz"
+
+#: ../libnm-core/nm-setting-dcb.c:580 ../libnm-util/nm-setting-dcb.c:652
+msgid "sum not 100%"
+msgstr "toplam %100 etmiyor"
+
+#: ../libnm-core/nm-setting-dcb.c:614 ../libnm-core/nm-setting-dcb.c:646
+#: ../libnm-util/nm-setting-dcb.c:686 ../libnm-util/nm-setting-dcb.c:718
+#| msgid "Error: %s argument is missing."
+msgid "property invalid"
+msgstr "özellik geçersiz"
+
+#: ../libnm-core/nm-setting-dcb.c:636 ../libnm-util/nm-setting-dcb.c:708
+#| msgid "Error: %s argument is missing."
+msgid "property missing"
+msgstr "özellik eksik"
+
+#: ../libnm-core/nm-setting-gsm.c:237 ../libnm-util/nm-setting-gsm.c:294
#, c-format
msgid "property value '%s' is empty or too long (>64)"
-msgstr ""
+msgstr "özellik değeri '%s' boş ya da çok uzun (>64)"
-#: ../libnm-util/nm-setting-gsm.c:325
+#: ../libnm-core/nm-setting-gsm.c:269 ../libnm-util/nm-setting-gsm.c:326
#, c-format
msgid "'%s' contains invalid char(s) (use [A-Za-z._-])"
-msgstr ""
+msgstr "'%s' geçersiz karakter(ler) içeriyor ([A-Za-z._-] kullanın)"
-#: ../libnm-util/nm-setting-gsm.c:360
+#: ../libnm-core/nm-setting-gsm.c:304 ../libnm-util/nm-setting-gsm.c:361
#, c-format
msgid "'%s' length is invalid (should be 5 or 6 digits)"
-msgstr ""
+msgstr "'%s' uzunluğu geçerli değil (5 ya da 6 basamak olmalı)"
-#: ../libnm-util/nm-setting-gsm.c:371
-#, c-format
-msgid "'%s' is not a number"
-msgstr "'%s' bir numara deÄŸil"
+#: ../libnm-core/nm-setting-infiniband.c:216
+#: ../libnm-util/nm-setting-infiniband.c:230
+msgid "not a valid interface name"
+msgstr "geçerli bir arayüz ismi değil"
+
+#: ../libnm-core/nm-setting-infiniband.c:224
+#: ../libnm-util/nm-setting-infiniband.c:238
+msgid "Must specify a P_Key if specifying parent"
+msgstr "Eğer üst belirtilmiş ise P_Key belirtilmek zorundadır"
-#: ../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
+#: ../libnm-core/nm-setting-infiniband.c:234
+#: ../libnm-util/nm-setting-infiniband.c:248
+msgid "InfiniBand P_Key connection did not specify parent interface name"
+msgstr "InfiniBand P_Key bağlantısı bir üst arayüz ismi belirtmemiş"
+
+#: ../libnm-core/nm-setting-infiniband.c:270
+#: ../libnm-util/nm-setting-infiniband.c:284
#, c-format
-msgid "this property is not allowed for '%s=%s'"
+msgid ""
+"interface name of software infiniband device must be '%s' or unset (instead "
+"it is '%s')"
msgstr ""
+"yazılımsal sınırsız bant aygıtının arayüz ismi '%s' ve ya ayarlanmamış olmak "
+"zorundadır ('%s' yerine)"
+
+#: ../libnm-core/nm-setting-infiniband.c:285
+#, c-format
+msgid "mtu for transport mode '%s' can be at most %d but it is %d"
+msgstr "taşıma kipi '%s' için mtu en fazla %d olmalı ancak şu anda %d"
+
+#: ../libnm-core/nm-setting-ip4-config.c:891
+#: ../libnm-core/nm-setting-ip6-config.c:809
+#: ../libnm-util/nm-setting-ip4-config.c:838
+#: ../libnm-util/nm-setting-ip6-config.c:819
+#, c-format
+msgid "this property cannot be empty for '%s=%s'"
+msgstr "özellik '%s=%s' için boş olamaz"
+
+#: ../libnm-core/nm-setting-ip4-config.c:903
+#: ../libnm-core/nm-setting-ip4-config.c:913
+#: ../libnm-core/nm-setting-ip4-config.c:925
+#: ../libnm-core/nm-setting-ip6-config.c:822
+#: ../libnm-core/nm-setting-ip6-config.c:832
+#: ../libnm-core/nm-setting-ip6-config.c:842
+#: ../libnm-util/nm-setting-ip4-config.c:850
+#: ../libnm-util/nm-setting-ip4-config.c:860
+#: ../libnm-util/nm-setting-ip4-config.c:872
+#: ../libnm-util/nm-setting-ip6-config.c:832
+#: ../libnm-util/nm-setting-ip6-config.c:842
+#: ../libnm-util/nm-setting-ip6-config.c:852
+#, c-format
+msgid "this property is not allowed for '%s=%s'"
+msgstr "bu özellik '%s=%s' için kullanılamaz"
-#: ../libnm-util/nm-setting-ip4-config.c:777
+#: ../libnm-core/nm-setting-ip4-config.c:972
+#: ../libnm-util/nm-setting-ip4-config.c:916
#, c-format
msgid "%d. IPv4 address is invalid"
msgstr "%d. IPv4 adresi geçersiz"
-#: ../libnm-util/nm-setting-ip4-config.c:787
+#: ../libnm-core/nm-setting-ip4-config.c:982
+#: ../libnm-util/nm-setting-ip4-config.c:926
#, 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
+#: ../libnm-core/nm-setting-ip4-config.c:992
+#, c-format
+#| msgid "%d. IPv4 address has invalid prefix"
+msgid "%d. IPv4 address has invalid label '%s'"
+msgstr "%d. IPv4 adresi geçersiz '%s' etiketine sahip"
+
+#: ../libnm-core/nm-setting-ip4-config.c:1003
+#, c-format
+msgid "IPv4 address / label count mismatch (%d vs %d)"
+msgstr "IPv4 adresi / etiket sayısı eşleşmiyor (%d vs %d)"
+
+#: ../libnm-core/nm-setting-ip4-config.c:1019
+#: ../libnm-util/nm-setting-ip4-config.c:942
#, c-format
msgid "%d. route is invalid"
-msgstr ""
+msgstr "%d. yönlendirme geçersiz"
-#: ../libnm-util/nm-setting-ip4-config.c:813
+#: ../libnm-core/nm-setting-ip4-config.c:1029
+#: ../libnm-util/nm-setting-ip4-config.c:952
#, c-format
msgid "%d. route has invalid prefix"
-msgstr ""
+msgstr "%d. yönlendirme geçersiz bir ön eke sahip"
+
+#: ../libnm-core/nm-setting-ip4-config.c:1045
+#: ../libnm-core/nm-setting-ip6-config.c:876
+#, c-format
+#| msgid "%d. IPv4 address is invalid"
+msgid "%d. DNS server address is invalid"
+msgstr "%d. DNS sunucusu adresi geçersiz"
-#: ../libnm-util/nm-setting-ip6-config.c:696
+#: ../libnm-core/nm-setting-ip6-config.c:821
+#: ../libnm-util/nm-setting-ip6-config.c:831
#, c-format
msgid "'%s' not allowed for %s=%s"
-msgstr ""
+msgstr "'%s' şunun için kullanılamaz %s=%s"
-#: ../libnm-util/nm-setting-olpc-mesh.c:137
-#: ../libnm-util/nm-setting-wireless.c:619
+#: ../libnm-core/nm-setting-olpc-mesh.c:116
+#: ../libnm-core/nm-setting-wireless.c:702
+#: ../libnm-util/nm-setting-olpc-mesh.c:131
+#: ../libnm-util/nm-setting-wireless.c:759
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
+#: ../libnm-core/nm-setting-olpc-mesh.c:125
+#: ../libnm-core/nm-setting-wireless.c:742
+#: ../libnm-util/nm-setting-olpc-mesh.c:140
+#: ../libnm-util/nm-setting-wireless.c:799
#, c-format
msgid "'%d' is not a valid channel"
-msgstr ""
+msgstr "'%d' geçerli olmayan bir kanal"
-#: ../libnm-util/nm-setting-ppp.c:390
+#: ../libnm-core/nm-setting-ppp.c:365 ../libnm-util/nm-setting-ppp.c:387
#, c-format
msgid "'%d' is out of valid range <128-16384>"
-msgstr ""
+msgstr "'%d' geçerli aralığın dışında <128-16384>"
-#: ../libnm-util/nm-setting-ppp.c:403
+#: ../libnm-core/nm-setting-ppp.c:378 ../libnm-util/nm-setting-ppp.c:400
#, c-format
msgid "setting this property requires non-zero '%s' property"
-msgstr ""
+msgstr "bu özelllik sıfır olmayan bir '%s' özelliği istiyor"
-#: ../libnm-util/nm-setting-vlan.c:508
+#: ../libnm-core/nm-setting-vlan.c:513 ../libnm-util/nm-setting-vlan.c:554
#, c-format
msgid "'%s' value doesn't match '%s=%s'"
-msgstr ""
+msgstr "'%s' deÄŸer '%s=%s' ile eÅŸleÅŸmiyor"
-#: ../libnm-util/nm-setting-vlan.c:519
+#: ../libnm-core/nm-setting-vlan.c:524 ../libnm-util/nm-setting-vlan.c:565
#, c-format
msgid "'%s' is neither an UUID nor an interface name"
-msgstr ""
+msgstr "'%s' UUID ya da bir arayüz ismi değil"
-#: ../libnm-util/nm-setting-vlan.c:532
+#: ../libnm-core/nm-setting-vlan.c:538 ../libnm-util/nm-setting-vlan.c:578
#, c-format
msgid "property is not specified and neither is '%s:%s'"
-msgstr ""
+msgstr "özellik belirtilmemiş ve '%s:%s' değil"
-#: ../libnm-util/nm-setting-vlan.c:545
+#: ../libnm-core/nm-setting-vlan.c:551 ../libnm-util/nm-setting-vlan.c:591
msgid "flags are invalid"
-msgstr ""
+msgstr "bayraklar geçersiz"
-#: ../libnm-util/nm-setting-wired.c:473
+#: ../libnm-core/nm-setting-vpn.c:439
#, c-format
-msgid "'%s' is not a valid ethernet port value"
-msgstr "'%s' geçerli bir ethernet port numarası değildir"
+msgid "secret was empty"
+msgstr "gizli bilgi boÅŸ"
-#: ../libnm-util/nm-setting-wired.c:483
+#: ../libnm-core/nm-setting-vpn.c:469
+msgid "setting contained a secret with an empty name"
+msgstr "ayar ismi olmayan bir gizli bilgi içeriyor"
+
+#: ../libnm-core/nm-setting-vpn.c:477
#, c-format
-msgid "'%s' is not a valid duplex value"
-msgstr ""
+msgid "secret value was empty"
+msgstr "gizli deÄŸer boÅŸ"
-#: ../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-core/nm-setting-vpn.c:524 ../libnm-core/nm-setting.c:1496
+msgid "not a secret property"
+msgstr "gizli bir özellik değil"
+
+#: ../libnm-core/nm-setting-vpn.c:530
+msgid "secret is not of correct type"
+msgstr "gizli bilgi doğru türde değil"
-#: ../libnm-util/nm-setting-wired.c:506
-#: ../libnm-util/nm-setting-wireless.c:700
-#: ../libnm-util/nm-setting-wireless.c:714
+#: ../libnm-core/nm-setting-vpn.c:565
#, c-format
-msgid "'%s' is not a valid MAC address"
-msgstr "'%s' geçerli bir MAC adresi değildir"
+msgid "failed to convert value '%s' to uint"
+msgstr "'%s' değeri uint'e dönüştürülemedi"
+
+#: ../libnm-core/nm-setting-vpn.c:573
+msgid "secret flags property not found"
+msgstr "gizli bayrak özelliği bulunamadı"
+
+#: ../libnm-core/nm-setting-wired.c:572 ../libnm-util/nm-setting-wired.c:615
+#, c-format
+#| msgid "'%s' is not a valid ethernet port value"
+msgid "'%s' is not a valid Ethernet port value"
+msgstr "'%s' geçerli bir ethernet port numarası değildir"
+
+#: ../libnm-core/nm-setting-wired.c:582 ../libnm-util/nm-setting-wired.c:625
+#, c-format
+msgid "'%s' is not a valid duplex value"
+msgstr "'%s' geçerli bir dupleks değeri değil"
-#: ../libnm-util/nm-setting-wired.c:540
-#, fuzzy, c-format
+#: ../libnm-core/nm-setting-wired.c:641 ../libnm-util/nm-setting-wired.c:682
+#, c-format
#| msgid "invalid field '%s'"
msgid "invalid '%s' or its value '%s'"
-msgstr "geçersiz alan '%s'"
+msgstr "geçersiz '%s' ya da değeri '%s'"
-#: ../libnm-util/nm-setting-wireless-security.c:813
+#: ../libnm-core/nm-setting-wireless-security.c:882
+#: ../libnm-util/nm-setting-wireless-security.c:912
#, c-format
msgid "'%s' security requires '%s=%s'"
-msgstr ""
+msgstr "'%s' güvenliği için '%s=%s' gereklidir"
-#: ../libnm-util/nm-setting-wireless-security.c:842
+#: ../libnm-core/nm-setting-wireless-security.c:911
+#: ../libnm-util/nm-setting-wireless-security.c:941
#, c-format
msgid "'%s' security requires '%s' setting presence"
-msgstr ""
+msgstr "'%s' güvenliği için '%s' ayarı gereklidir"
-#: ../libnm-util/nm-setting-wireless-security.c:863
+#: ../libnm-core/nm-setting-wireless-security.c:932
+#: ../libnm-util/nm-setting-wireless-security.c:962
#, c-format
msgid "'%d' value is out of range <0-3>"
-msgstr ""
+msgstr "'%d' değeri geçerli aralığın dışında <0-3>"
-#: ../libnm-util/nm-setting-wireless-security.c:960
+#: ../libnm-core/nm-setting-wireless-security.c:1029
+#: ../libnm-util/nm-setting-wireless-security.c:1059
#, c-format
msgid "'%s' connections require '%s' in this property"
-msgstr ""
+msgstr "'%s' bağlantıları için bu özellikte '%s' gerekli"
-#: ../libnm-util/nm-setting-wireless-security.c:990
+#: ../libnm-core/nm-setting-wireless-security.c:1059
+#: ../libnm-util/nm-setting-wireless-security.c:1089
#, c-format
msgid "'%s' can only be used with '%s=%s' (WEP)"
-msgstr ""
+msgstr "'%s' sadece şunun ile birlikte kullanılabilir '%s=%s' (WEP)"
-#: ../libnm-util/nm-setting-wireless.c:628
+#: ../libnm-core/nm-setting-wireless.c:711
+#: ../libnm-util/nm-setting-wireless.c:768
#, 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
+#: ../libnm-core/nm-setting-wireless.c:721
+#: ../libnm-util/nm-setting-wireless.c:778
#, c-format
msgid "'%s' is not a valid band"
-msgstr ""
+msgstr "'%s' geçerli bir bant değil"
+
+#: ../libnm-core/nm-setting-wireless.c:731
+#, c-format
+msgid "'%s' requires setting '%s' property"
+msgstr "'%s' ayarı '%s' özelliği istiyor"
+
+#: ../libnm-core/nm-setting.c:1394
+msgid "secret not found"
+msgstr "gizli bilgi bulunamadı"
+
+#: ../libnm-core/nm-setting.c:1486
+msgid "secret is not set"
+msgstr "secret ayarlı değil"
+
+#: ../libnm-glib/nm-device.c:1792 ../libnm/nm-device.c:1604
+msgid "Bluetooth"
+msgstr "Bluetooth"
+
+#: ../libnm-glib/nm-device.c:1810 ../libnm/nm-device.c:1622
+msgid "ADSL"
+msgstr "ADSL"
+
+#: ../libnm-glib/nm-device.c:1838 ../libnm/nm-device.c:1650
+msgid "Wired"
+msgstr "Kablolu"
+
+#: ../libnm-glib/nm-device.c:1869 ../libnm/nm-device.c:1681
+msgid "PCI"
+msgstr "PCI"
+
+#: ../libnm-glib/nm-device.c:1871 ../libnm/nm-device.c:1683
+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:1967 ../libnm-glib/nm-device.c:1986
+#: ../libnm/nm-device.c:1777 ../libnm/nm-device.c:1796
+#, c-format
+msgctxt "long device name"
+msgid "%s %s"
+msgstr "%s %s"
+
+#: ../libnm-glib/nm-remote-connection.c:149
+#| msgid "disconnected"
+msgid "Disconnected by D-Bus"
+msgstr "D-Bus tarafından bağlantı kesildi"
+
+#: ../libnm-util/crypto_nss.c:468
+#, c-format
+msgid "Couldn't convert password to UCS2: %d"
+msgstr "Şifre UCS2'ye dönüştürülemedi: %d"
+
+#: ../libnm-util/nm-setting-bluetooth.c:184
+#, c-format
+msgid "requires '%s' or '%s' setting"
+msgstr "'%s' ya da '%s' ayarı gerekli"
-#: ../libnm-util/nm-setting-wireless.c:648
+#: ../libnm-util/nm-setting-connection.c:861
+#, c-format
+msgid "requires presence of '%s' setting in the connection"
+msgstr "bağlantıda var olan '%s' ayarı gerekli"
+
+#: ../libnm-util/nm-setting-vpn.c:581
+#, c-format
+msgid "Failed to convert '%s' value '%s' to uint"
+msgstr "'%s' değerini '%s' uint olarak dönüştürme başarısız"
+
+#: ../libnm-util/nm-setting-vpn.c:588
+#, c-format
+msgid "Secret flags property '%s' not found"
+msgstr "Gizli bayraklar özelliği '%s' bulunamadı"
+
+#: ../libnm-util/nm-setting-wireless.c:788
#, c-format
msgid "requires setting '%s' property"
-msgstr ""
+msgstr "'%s' ayarı özelliği gerekli"
+
+#: ../libnm/nm-device-adsl.c:71
+#| msgid "connecting (starting secondary connections)"
+msgid "The connection was not an ADSL connection."
+msgstr "Bağlantı bir ADSL bağlantısı değildi."
-#: ../libnm-util/nm-setting-wireless.c:726
+#: ../libnm/nm-device-bond.c:114
+#| msgid "connecting (starting secondary connections)"
+msgid "The connection was not a bond connection."
+msgstr "Bağlantı birleştirilmiş bir bağlantı değildi."
+
+#: ../libnm/nm-device-bridge.c:114
+#| msgid "connecting (starting secondary connections)"
+msgid "The connection was not a bridge connection."
+msgstr "Bağlantı bir köprü bağlantısı değildi."
+
+#: ../libnm/nm-device-bt.c:139
#, c-format
-msgid "'%s' setting is required for the connection when the property is set"
-msgstr ""
+#| msgid "connecting (starting secondary connections)"
+msgid "The connection was not a Bluetooth connection."
+msgstr "Bağlantı bir Bluetooth bağlantısı değildi."
+
+#: ../libnm/nm-device-bt.c:148
+msgid "Invalid device Bluetooth address."
+msgstr "Geçersiz aygıt Bluetooth adresi."
+
+#: ../libnm/nm-device-bt.c:155
+msgid "The Bluetooth addresses of the device and the connection didn't match."
+msgstr "Aygıtın Bluetooth adresi ve bağlantı eşleşmiyor."
+
+#: ../libnm/nm-device-bt.c:164
+msgid ""
+"The device is lacking Bluetooth capabilities required by the connection."
+msgstr "Aygıt bağlantının gerektirdiği Bluetooth yeteneklerini kaybediyor."
+
+#: ../libnm/nm-device-ethernet.c:137
+msgid "The connection was not an Ethernet or PPPoE connection."
+msgstr "Bağlantı bir Ethernet veya PPPoE bağlantısı değil."
+
+#: ../libnm/nm-device-ethernet.c:153 ../libnm/nm-device-infiniband.c:104
+#: ../libnm/nm-device-wifi.c:491 ../libnm/nm-device-wimax.c:310
+#| msgid "is not a valid MAC address"
+msgid "Invalid device MAC address."
+msgstr "Geçersiz aygıt MAC adresi."
+
+#: ../libnm/nm-device-ethernet.c:159 ../libnm/nm-device-infiniband.c:112
+#: ../libnm/nm-device-wifi.c:498 ../libnm/nm-device-wimax.c:317
+msgid "The MACs of the device and the connection didn't match."
+msgstr "Aygıtın MAC adresleri ile bağlantı eşleşmiyor."
+
+#: ../libnm/nm-device-generic.c:92
+#| msgid "connecting (starting secondary connections)"
+msgid "The connection was not a generic connection."
+msgstr "Bağlantı bir genel bağlantı değildi."
+
+#: ../libnm/nm-device-generic.c:99
+msgid "The connection did not specify an interface name."
+msgstr "Bağlantı bir arayüz adı belirtmiyor."
+
+#: ../libnm/nm-device-infiniband.c:96
+#| msgid "connecting (starting secondary connections)"
+msgid "The connection was not an InfiniBand connection."
+msgstr "Bağlantı bir InfiniBand bağlantısı değildi."
+
+#: ../libnm/nm-device-modem.c:122
+#| msgid "the connection was removed"
+msgid "The connection was not a modem connection."
+msgstr "Bağlantı bir modem bağlantısı değildi."
+
+#: ../libnm/nm-device-modem.c:130
+#| msgid "connecting (starting secondary connections)"
+msgid "The connection was not a valid modem connection."
+msgstr "Bağlantı geçerli bir modem bağlantısı değildi."
+
+#: ../libnm/nm-device-modem.c:137
+msgid "The device is lacking capabilities required by the connection."
+msgstr "Aygıt bağlantının gerektirdiği yetenekleri kaybediyor."
+
+#: ../libnm/nm-device-olpc-mesh.c:117
+#| msgid "connecting (starting secondary connections)"
+msgid "The connection was not an OLPC Mesh connection."
+msgstr "Bağlantı bir OLPC Mesh bağlantısı değildi."
+
+#: ../libnm/nm-device-team.c:120
+#| msgid "the connection was removed"
+msgid "The connection was not a team connection."
+msgstr "Bağlantı bir takım bağlantısı değildi."
+
+#: ../libnm/nm-device-vlan.c:114
+msgid "The connection was not a VLAN connection."
+msgstr "Bağlantı bir VLAN bağlantısı değildi."
+
+#: ../libnm/nm-device-vlan.c:121
+msgid "The VLAN identifiers of the device and the connection didn't match."
+msgstr "Aygıtın VLAN tanımlayıcıları ile bağlantı eşleşmiyor."
+
+#: ../libnm/nm-device-vlan.c:134
+msgid "The hardware address of the device and the connection didn't match."
+msgstr "Aygıtın donanım adresi ve bağlantı eşleşmiyor."
+
+#: ../libnm/nm-device-wifi.c:482
+msgid "The connection was not a Wi-Fi connection."
+msgstr "Bağlantı bir kablosuz bağlantısı değildi."
+
+#: ../libnm/nm-device-wifi.c:518
+msgid "The device is lacking WPA capabilities required by the connection."
+msgstr "Aygıt bağlantının gerektirdiği WPA yetenekleri kaybediyor."
+
+#: ../libnm/nm-device-wifi.c:525
+msgid "The device is lacking WPA2/RSN capabilities required by the connection."
+msgstr "Aygıt bağlantının gerektirdiği WPA2/RSN yetenekleri kaybediyor."
+
+#: ../libnm/nm-device-wimax.c:301
+msgid "The connection was not a WiMAX connection."
+msgstr "Bağlantı bir WiMAX bağlantısı değildi."
+
+#: ../libnm/nm-device.c:2122
+#, c-format
+#| msgid "the connection was removed"
+msgid "The connection was not valid: %s"
+msgstr "Bağlantı geçerli değildi: %s"
+
+#: ../libnm/nm-device.c:2131
+#, c-format
+msgid "The interface names of the device and the connection didn't match."
+msgstr "Aygıtın arayüz isimleri ve bağlantı eşleşmiyor."
+
+#: ../libnm/nm-manager.c:1054
+#| msgid "Active connection details"
+msgid "Active connection removed before it was initialized"
+msgstr "Etkin bağlantı başlatılmadan kaldırıldı."
+
+#: ../libnm/nm-object.c:1434 ../libnm/nm-object.c:1580
+msgid "Caller did not specify D-Bus path for object"
+msgstr "Arayan nesne için D-Bus yolunu belirtmedi"
+
+#: ../libnm/nm-remote-settings.c:259
+msgid "Connection removed before it was initialized"
+msgstr "Bağlantı başlatılmadan kaldırıldı."
+
+#: ../libnm/nm-vpn-plugin-old.c:883
+#| msgid "Error: iface has to be specified."
+msgid "No service name specified"
+msgstr "Servis adı belirtilmedi"
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:1
msgid "Enable or disable system networking"
@@ -2856,170 +7917,158 @@ msgstr "Direşken sistemin adını değiştir"
msgid "System policy prevents modification of the persistent system hostname"
msgstr "Sistem kuralları, direşken sistemin adının değiştirilmesini önlüyor"
-#: ../src/main.c:130
+#. Translators: the first %s is a prefix for the connection id, such
+#. * as "Wired Connection" or "VPN Connection". The %d is a number
+#. * that is combined with the first argument to create a unique
+#. * connection id.
+#: ../src/NetworkManagerUtils.c:1158
+#, c-format
+msgctxt "connection id fallback"
+msgid "%s %d"
+msgstr "%s %d"
+
+#: ../src/main.c:135
#, 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
+#: ../src/main.c:144
#, c-format
msgid "Failed to create signal handling thread: %d"
-msgstr ""
+msgstr "Sinyal yakalama iş parçacığı oluşturma başarısız: %d"
-#: ../src/main.c:154
+#: ../src/main.c:159
#, c-format
msgid "Opening %s failed: %s\n"
msgstr "%s açılması başarısız: %s\n"
-#: ../src/main.c:160
+#: ../src/main.c:165
#, c-format
msgid "Writing to %s failed: %s\n"
msgstr "%s yazılması başarısız: %s\n"
-#: ../src/main.c:165
+#: ../src/main.c:170
#, c-format
msgid "Closing %s failed: %s\n"
msgstr "%s kapatılması başarısız: %s\n"
-#: ../src/main.c:208
+#: ../src/main.c:213
#, 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"
+#: ../src/main.c:366
msgid "Print NetworkManager version and exit"
msgstr "Ağ Yöneticisinin sürümünü yazdır ve çık"
-#: ../src/main.c:329
+#: ../src/main.c:367
msgid "Don't become a daemon"
-msgstr ""
+msgstr "Bir servis haline gelme"
-#: ../src/main.c:330
+#: ../src/main.c:368
+msgid "Don't become a daemon, and log to stderr"
+msgstr "Artalan işlemi olma be stderr üstüne günlükle"
+
+#: ../src/main.c:369
+#, c-format
+msgid "Log level: one of [%s]"
+msgstr "Günlükleme seviyesi: bir ['%s']"
+
+#: ../src/main.c:371
+#, c-format
+msgid "Log domains separated by ',': any combination of [%s]"
+msgstr "Günlükleme alanlar ',' ile ayrılmıştır: herhangi bi [%s]"
+
+#: ../src/main.c:373
msgid "Make all warnings fatal"
-msgstr ""
+msgstr "Bütün uyarıları ölümcül yap"
-#: ../src/main.c:331
+#: ../src/main.c:374
msgid "Specify the location of a PID file"
msgstr "PID dosyasının konumunu belirtin"
-#: ../src/main.c:331
+#: ../src/main.c:374
msgid "filename"
msgstr "dosya adı"
-#: ../src/main.c:332
+#: ../src/main.c:375
msgid "State file location"
-msgstr ""
+msgstr "Durum dosyası konumu"
-#: ../src/main.c:332
+#: ../src/main.c:375
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!"
+msgstr "/dizin/yol/durum.dosyasi"
-#: ../src/main.c:352
+#: ../src/main.c:401
#, c-format
msgid "GModules are not supported on your platform!\n"
-msgstr ""
+msgstr "GModule leri platformunuzu desteklemiyor!\n"
-#: ../src/main.c:371
+#: ../src/main.c:406
+#, 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:429
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 tüm bağlantılarınızı izler ve kullanım için en iyi olanını "
+"otomatik\n"
+"olarak seçer. Ayrıca kullanıcalara, bilgisayarlarındaki kablosuz kartları\n"
+"kullanarak, kablosuz erişim noktalarını belirtmelerine\n"
+"izin verir."
-#: ../src/main.c:377
+#: ../src/main.c:435 ../src/main.c:451
#, 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 ""
-"Geçersiz seçenek. Lütfen geçerli seçeneklerin listesini görmek için --help "
+"%s. Geçerli seçeneklerin bir listesini görmek için lütfen --help komutunu "
"kullanın.\n"
-#: ../src/main.c:387
+#: ../src/main.c:456
#, 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"
+msgid "Ignoring unrecognized log domain(s) '%s' passed on command line.\n"
+msgstr ""
+"Komut satırına geçilen tanınmayan '%s' günlük etki alan(lar)ı yok sayılıyor."
+"\n"
-#: ../src/main.c:420
+#: ../src/main.c:507
#, 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
+#: ../src/main.c:521
#, c-format
-msgid "%s. Please use --help to see a list of valid options.\n"
+#| msgid "Error: Connection activation failed: %s."
+msgid "Error in configuration file: %s.\n"
+msgstr "Yapılandırma dosyasında hata: %s\n"
+
+#: ../src/main.c:526
+#, c-format
+msgid "Ignoring unrecognized log domain(s) '%s' from config files.\n"
msgstr ""
-"%s. Geçerli seçeneklerin bir listesini görmek için lütfen --help komutunu "
-"kullanın.\n"
+"Yapılandırma dosyalarındaki tanınmayan '%s' günlük etki alan(lar)ı yok "
+"sayılıyor.\n"
-#: ../src/main.c:438
+#: ../src/main.c:534
#, c-format
msgid "State file %s parsing failed: (%d) %s\n"
-msgstr ""
+msgstr "Durum dosyası %s ayrıştırması başarısız: (%d) %s\n"
-#: ../src/main.c:455
+#: ../src/main.c:547
#, c-format
msgid "Could not daemonize: %s [error %u]\n"
-msgstr ""
+msgstr "Artalan işlemi yapılamadı: %s [hata %u]\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:139
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:151
msgid "# Created by NetworkManager\n"
msgstr "# Ağ Yöneticisi Tarafından Oluşturuldu\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:146
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:158
#, c-format
msgid ""
"# Merged from %s\n"
@@ -3028,210 +8077,630 @@ msgstr ""
"# %s'den birleÅŸmiÅŸ\n"
"\n"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:264
+#: ../src/dhcp-manager/nm-dhcp-manager.c:292
msgid "no usable DHCP client could be found."
msgstr "kullanılabilir bir DHCP istemcisi bulunamadı."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:273
-msgid "'dhclient' could be found."
-msgstr "'dhclient' bulunamadı."
+#: ../src/dhcp-manager/nm-dhcp-manager.c:301
+#| msgid "'dhclient' could be found."
+msgid "'dhclient' could not be found or was disabled."
+msgstr "'dhclient' bulunamadı veya kapalı."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:283
-msgid "'dhcpcd' could be found."
-msgstr "'dhcpcd' bulunamadı."
+#: ../src/dhcp-manager/nm-dhcp-manager.c:311
+#| msgid "'dhcpcd' could be found."
+msgid "'dhcpcd' could not be found or was disabled."
+msgstr "'dhcpcd' bulunamadı veya kapalı."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:291
+#: ../src/dhcp-manager/nm-dhcp-manager.c:322
#, c-format
msgid "unsupported DHCP client '%s'"
msgstr "desteklenmeyen DHCP istemcisi '%s'"
-#: ../src/dns-manager/nm-dns-manager.c:376
+#: ../src/dns-manager/nm-dns-manager.c:374
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr "NOT: libc çözücü 3'den fazla sunucu adını desteklemeyebilir."
-#: ../src/dns-manager/nm-dns-manager.c:378
+#: ../src/dns-manager/nm-dns-manager.c:376
msgid "The nameservers listed below may not be recognized."
msgstr "Aşağıda listelenen sunucu adları tanınmayabilir."
-#: ../src/logging/nm-logging.c:142
-#, c-format
-msgid "Unknown log level '%s'"
-msgstr "Bilinmeyen kayıt seviyesi '%s'"
+#: ../src/devices/adsl/nm-device-adsl.c:127
+#| msgid "ADSL connection %d"
+msgid "ADSL connection"
+msgstr "ADSL bağlantısı"
-#: ../src/logging/nm-logging.c:188
+#: ../src/devices/bluetooth/nm-bluez-device.c:193
#, c-format
-msgid "Unknown log domain '%s'"
-msgstr "Bilinmeyen kayıt etki alanı '%s'"
+msgid "%s Network"
+msgstr "%s Ağı"
-#: ../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/devices/bluetooth/nm-device-bt.c:248
+msgid "PAN requested, but Bluetooth device does not support NAP"
+msgstr "PAN isteği yapıldı, ancak Bluetooth aygıtı NAP desteklemiyor"
-#: ../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/devices/bluetooth/nm-device-bt.c:258
+msgid "PAN connections cannot specify GSM, CDMA, or serial settings"
+msgstr "PAN bağlantıları GSM, CDMA ya da seri ayarlar belirtmiyor"
-#: ../src/nm-device-bond.c:166
-#, c-format
-#| msgid "Wired connection %d"
-msgid "Bond connection %d"
-msgstr "Bond bağlantısı %d"
+#: ../src/devices/bluetooth/nm-device-bt.c:271
+#| msgid "PAN connection %d"
+msgid "PAN connection"
+msgstr "PAN bağlantısı"
-#: ../src/nm-device-adsl.c:196
-#, c-format
+#: ../src/devices/bluetooth/nm-device-bt.c:278
+msgid "DUN requested, but Bluetooth device does not support DUN"
+msgstr "DUN isteği yapıldı, ancak Bluetooth aygıtı DUN desteklemiyor"
+
+#: ../src/devices/bluetooth/nm-device-bt.c:288
+msgid "DUN connection must include a GSM or CDMA setting"
+msgstr "DUN bağlantısı bir GSM ya da CDMA ayarı içermek zorundadır"
+
+#: ../src/devices/bluetooth/nm-device-bt.c:298
+#: ../src/devices/wwan/nm-modem-broadband.c:485
#| msgid "GSM connection %d"
-msgid "ADSL connection %d"
-msgstr "ADSL bağlantısı %d"
+msgid "GSM connection"
+msgstr "GSM bağlantısı"
+
+#: ../src/devices/bluetooth/nm-device-bt.c:302
+#: ../src/devices/wwan/nm-modem-broadband.c:508
+#| msgid "CDMA connection %d"
+msgid "CDMA connection"
+msgstr "CDMA bağlantısı"
+
+#: ../src/devices/bluetooth/nm-device-bt.c:306
+#| msgid "DUN connection %d"
+msgid "DUN connection"
+msgstr "DUN bağlantısı"
+
+#: ../src/devices/bluetooth/nm-device-bt.c:311
+msgid "Unknown/unhandled Bluetooth connection type"
+msgstr "Bilinmeyen/yakalanmamoş Bluetooth bağlantı tipi"
+
+#: ../src/devices/bluetooth/nm-device-bt.c:331
+#: ../src/devices/nm-device-ethernet.c:1438
+#: ../src/devices/nm-device-infiniband.c:196
+#: ../src/devices/wifi/nm-device-wifi.c:1121
+#: ../src/devices/wimax/nm-device-wimax.c:448
+#| msgid "no active connection or device"
+msgid "connection does not match device"
+msgstr "bağlantı aygıtla eşleşmiyor"
-#: ../src/nm-device-bridge.c:164
-#, c-format
-#| msgid "Wired connection %d"
-msgid "Bridge connection %d"
-msgstr "Köprü bağlantısı %d"
+#: ../src/devices/nm-device-bond.c:124
+#| msgid "Bond connection %d"
+msgid "Bond connection"
+msgstr "Bond bağlantısı"
-#: ../src/nm-device-bt.c:302
-#, c-format
-msgid "PAN connection %d"
-msgstr "PAN bağlantısı %d"
+#: ../src/devices/nm-device-bridge.c:131
+#| msgid "Bridge connection %d"
+msgid "Bridge connection"
+msgstr "Köprü bağlantısı"
-#: ../src/nm-device-bt.c:335
-#, c-format
-msgid "DUN connection %d"
-msgstr "DUN bağlantısı %d"
+#: ../src/devices/nm-device-ethernet.c:1421
+#| msgid "PPPoE connection %d"
+msgid "PPPoE connection"
+msgstr "PPPoE bağlantısı"
-#: ../src/nm-device-ethernet.c:1294
-#, c-format
-msgid "PPPoE connection %d"
-msgstr "PPPoE bağlantısı %d"
+#: ../src/devices/nm-device-ethernet.c:1421
+#| msgid "Wired connection %d"
+msgid "Wired connection"
+msgstr "Kablolu bağlantı"
-#: ../src/nm-device-ethernet.c:1294 ../src/settings/nm-settings-utils.c:50
+#: ../src/devices/nm-device-ethernet-utils.c:38
#, c-format
msgid "Wired connection %d"
msgstr "Kablolu bağlantı %d"
-#: ../src/nm-device-infiniband.c:270
+#: ../src/devices/nm-device-infiniband.c:178
+#| msgid "InfiniBand connection %d"
+msgid "InfiniBand connection"
+msgstr "InfiniBand bağlantısı"
+
+#: ../src/devices/nm-device-vlan.c:216
+#| msgid "VLAN connection %d"
+msgid "VLAN connection"
+msgstr "VLAN bağlatısı"
+
+#: ../src/devices/team/nm-device-team.c:134
+#| msgid "Active connections"
+msgid "Team connection"
+msgstr "Takım bağlantı"
+
+#: ../src/devices/wifi/nm-device-olpc-mesh.c:150
+#| msgid "Mesh %d"
+msgid "Mesh"
+msgstr "Mesh"
+
+#: ../src/devices/wifi/nm-device-wifi.c:1091
+msgid "WPA Ad-Hoc disabled due to kernel bugs"
+msgstr "WPA Ad-Hoc çekirdek hataları nedeniyle kapatıldı"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:43
#, c-format
-msgid "InfiniBand connection %d"
-msgstr "InfiniBand bağlantısı %d"
+#| msgid "device '%s' not compatible with connection '%s'"
+msgid "%s is incompatible with static WEP keys"
+msgstr "%s, statik WEP anahtarları ile uyumlu değili"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:77
+msgid "LEAP authentication requires a LEAP username"
+msgstr "LEAP kimlik doğrulaması, LEAP kullanıcı adı istiyor"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:87
+msgid "LEAP username requires 'leap' authentication"
+msgstr "LEAP kullanıcı adı 'leap' kimlik doğrulama istiyor"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:100
+msgid "LEAP authentication requires IEEE 802.1x key management"
+msgstr "LEAP kimli doğrulaması, IEEE 802.1x anahtar yönetimi istiyor"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:120
+msgid "LEAP authentication is incompatible with Ad-Hoc mode"
+msgstr "LEAP kimlik doğrulaması, Ad-Hoc kipi ile uyumlu değil"
-#: ../src/nm-device-olpc-mesh.c:304
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:132
+msgid "LEAP authentication is incompatible with 802.1x setting"
+msgstr "LEAP kimlik doğrulaması 802.1x ayarı ile uyumlu değil"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:154
#, c-format
-msgid "Mesh %d"
-msgstr "Mesh %d"
+msgid "a connection using '%s' authentication cannot use WPA key management"
+msgstr ""
+"'%s' kimlik doğrulamasını kullanan bir bağlantı, WPA anahtar yönetimi "
+"kullanamaz"
-#: ../src/nm-device-vlan.c:310
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:165
#, c-format
-#| msgid "PAN connection %d"
-msgid "VLAN connection %d"
-msgstr "VLAN bağlatısı %d"
+msgid "a connection using '%s' authentication cannot specific WPA protocols"
+msgstr ""
+"'%s' kimlik doğrulamasını kullanan bir bağlantı WPA protokollerini kullanamaz"
-#: ../src/nm-manager.c:751
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:181
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:198
#, c-format
-msgid "VPN connection %d"
-msgstr "VPN bağlantısı %d"
+msgid "a connection using '%s' authentication cannot specific WPA ciphers"
+msgstr "'%s' kimlik doğrulamasını kullanan bir bağlantı WPA şifresi belirtemez"
-#: ../src/nm-netlink-monitor.c:162 ../src/nm-netlink-monitor.c:286
-#: ../src/nm-netlink-monitor.c:671
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:210
#, c-format
-msgid "error processing netlink message: %s"
-msgstr "netlink iletisinin iÅŸlenmesinde hata: %s"
+msgid "a connection using '%s' authentication cannot specific a WPA password"
+msgstr "'%s' kimlik doğrulaması kullanan bir bağlantı WPA parolası belirtemez"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:241
+msgid "Dynamic WEP requires an 802.1x setting"
+msgstr "Devingen WEP için bir 802.1x ayarı gerekli"
-#: ../src/nm-netlink-monitor.c:265
-msgid "error occurred while waiting for data on socket"
-msgstr "yuva üzerinde veri beklenirken hata oluştu"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:251
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:279
+msgid "Dynamic WEP requires 'open' authentication"
+msgstr "Devingen WEP için 'open' kimlik doğrulama gerekli"
-#: ../src/nm-netlink-monitor.c:310
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:266
+msgid "Dynamic WEP requires 'ieee8021x' key management"
+msgstr "Devingen WEP için 'ieee8021x' anahtar yönetimi gerekli"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:313
+msgid "WPA-PSK authentication is incompatible with 802.1x"
+msgstr "WPA-PSK kimlik doğrulaması 802.1x ile uyumlu değil"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:323
+msgid "WPA-PSK requires 'open' authentication"
+msgstr "WPA-PSK için 'open' kimlik doğrulama gerekli"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:335
+msgid "WPA Ad-Hoc authentication requires an Ad-Hoc mode AP"
+msgstr "WPA Ad-Hoc kimli doğrulaması, bir Ad-Hoc kipi AP istiyor"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:348
+msgid "WPA Ad-Hoc authentication requires 'wpa' protocol"
+msgstr "WPA Ad-Hoc kimlik doğrulamas 'wpa' protokolü istiyor"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:360
+msgid "WPA Ad-Hoc authentication requires 'none' pairwise cipher"
+msgstr "WPA Ad-Hoc kimlik doğrulaması 'none ' ikili şifrelemesi istiyor"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:372
+msgid "WPA Ad-Hoc requires 'tkip' group cipher"
+msgstr "WPA Ad-Hoc 'tkip' grup ÅŸifrelemesi istiyor"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:386
+msgid "Access point does not support PSK but setting requires it"
+msgstr "Erişim noktası PSK desteklemiyor, ancak ayar onu istiyor"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:416
+msgid "WPA-EAP authentication requires an 802.1x setting"
+msgstr "WPA-EAP kimlik doğrulaması 802.1x ayarı istiyor"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:426
+msgid "WPA-EAP requires 'open' authentication"
+msgstr "WPA-EAP 'open' kimlik doğrulaması istiyor"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:437
+msgid "802.1x setting requires 'wpa-eap' key management"
+msgstr "802.1x ayarı 'wpa-eap' anahtar yönetimi istiyor"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:450
+msgid "Access point does not support 802.1x but setting requires it"
+msgstr "Erişim noktası 802.1x desteklemiyor, ancak ayar onu istiyor"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:478
+msgid ""
+"Access point mode is Ad-Hoc but setting requires Infrastructure security"
+msgstr "Erişim noktası kipi Ad-Hoc ancak ayar altyapı güvenliği istiyor"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:488
+msgid "Ad-Hoc mode is incompatible with 802.1x security"
+msgstr "Ad-Hoc kipi, 802.1x güvenliği ile uyumlu değil"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:497
+msgid "Ad-Hoc mode is incompatible with LEAP security"
+msgstr "Ad-Hoc kipi, LEAP güvenliği ile uyumlu değil"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:507
+msgid "Ad-Hoc mode requires 'open' authentication"
+msgstr "Ad-Hoc kipi için 'open' kimlik doğrulama gerekli"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:517
+msgid ""
+"Access point mode is Infrastructure but setting requires Ad-Hoc security"
+msgstr ""
+"Erişim noktası kipi bir altyapı ancak ayar için Ad-Hoc güvenliği gerekli"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:559
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:589
#, 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"
+msgid "connection does not match access point"
+msgstr "bağlantı, erişim noktası ile eşleşmiyor"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:613
+msgid "Access point is unencrypted but setting specifies security"
+msgstr "Erişim noktası şifresiz ama ayar bir güvenlik belirtiyor"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:702
+msgid ""
+"WPA authentication is incompatible with non-EAP (original) LEAP or Dynamic "
+"WEP"
+msgstr ""
+"WPA kimlik doğrulaması, non-EAP (özgün) LEAP ya da Devingen WEP ile uyumlu "
+"deÄŸil"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:712
+msgid "WPA authentication is incompatible with Shared Key authentication"
+msgstr ""
+"WPA kimlik doğrulama Paylaşımlı Anahtar kimlik doğrulaması ile uyumlu değil"
+
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:759
+#| msgid "Failed to set symmetric key for decryption."
+msgid "Failed to determine AP security information"
+msgstr "Erişim noktası güvenlik bilgisi belirleme başarısız"
+
+#: ../src/devices/wwan/nm-modem-broadband.c:472
+msgid "GSM mobile broadband connection requires a 'gsm' setting"
+msgstr "GSM mobile geniş bant bağlantısı 'gsm' ayarı istiyor"
+
+#: ../src/nm-config.c:352
+msgid "Config file location"
+msgstr "Yapılandırma dosyasının konumu"
+
+#: ../src/nm-config.c:352
+msgid "/path/to/config.file"
+msgstr "/yol/altyol/config.file"
+
+#: ../src/nm-config.c:353
+#| msgid "Config file location"
+msgid "Config directory location"
+msgstr "Yapılandırma dizini konumu"
+
+#: ../src/nm-config.c:353
+#| msgid "/path/to/config.file"
+msgid "/path/to/config/dir"
+msgstr "/yol/dizin/yapilandirma.dosyasi"
-#: ../src/nm-netlink-monitor.c:321
+#: ../src/nm-config.c:355
+msgid "List of plugins separated by ','"
+msgstr "Eklentilerin listesi (',' ile ayrılmış)"
+
+#: ../src/nm-config.c:355
+msgid "plugin1,plugin2"
+msgstr "eklenti1,eklenti2"
+
+#. These three are hidden for now, and should eventually just go away.
+#: ../src/nm-config.c:358
+msgid "An http(s) address for checking internet connectivity"
+msgstr "İnternet bağlanılabilirliğini kontrol etmek için bir http(s) adresi"
+
+#: ../src/nm-config.c:359
+msgid "The interval between connectivity checks (in seconds)"
+msgstr "Bağlantı kontrolleri aralığı süresi (saniye cinsinden)"
+
+#: ../src/nm-config.c:360
+msgid "The expected start of the response"
+msgstr "Yanıtın beklenen başlangıcı"
+
+#: ../src/nm-config.c:360
+msgid "Bingo!"
+msgstr "Bingo!"
+
+#: ../src/nm-logging.c:137
#, c-format
-msgid "unable to enable netlink handle credential passing: %s"
-msgstr "kimlik gönderimi için ağ köprüsü etkinleştirilemiyor: %s"
+msgid "Unknown log level '%s'"
+msgstr "Bilinmeyen kayıt seviyesi '%s'"
-#: ../src/nm-netlink-monitor.c:364 ../src/nm-netlink-monitor.c:424
+#: ../src/nm-logging.c:219
#, 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"
+msgid "Unknown log domain '%s'"
+msgstr "Bilinmeyen kayıt etki alanı '%s'"
-#: ../src/nm-netlink-monitor.c:449
+#: ../src/nm-manager.c:3360
+#| msgid "VPN connecting"
+msgid "VPN connection"
+msgstr "VPN bağlantısı"
+
+#: ../src/nm-sleep-monitor-systemd.c:114
+#| msgid "NetworkManager status"
+msgid "NetworkManager needs to turn off networks"
+msgstr "NetworkManager 'ın ağları kapatması gerekiyor"
+
+#: ../src/settings/plugins/ibft/plugin.c:65
#, 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"
+msgid "ibft: failed to read iscsiadm records: %s"
+msgstr "ibft: iscsiadm kayıtlarını okuma başarısız: %s"
-#: ../src/nm-netlink-monitor.c:541
+#: ../src/settings/plugins/ibft/plugin.c:73
#, c-format
-msgid "unable to join netlink group: %s"
-msgstr "netlink kümesine girilemedi: %s"
+#| msgid "Wired connection %d"
+msgid "ibft: read connection '%s'"
+msgstr "ibft: okuma bağlantısı '%s'"
-#: ../src/nm-netlink-monitor.c:647 ../src/nm-netlink-monitor.c:660
+#: ../src/settings/plugins/ibft/plugin.c:79
#, c-format
-msgid "error updating link cache: %s"
-msgstr "bağ önbelleğinin güncellenmesinde hata: %s"
+msgid "ibft: failed to read iscsiadm record: %s"
+msgstr "ibft: iscsiadm kaydı okuma başarısız: %s"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:110
+#: ../src/settings/plugins/ifcfg-rh/reader.c:112
msgid "System"
msgstr "Sistem"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:3680
-msgid "Bond"
-msgstr "BaÄŸ"
+#~| msgid "TKIP"
+#~ msgid "IP"
+#~ msgstr "IP"
-#: ../src/settings/plugins/ifcfg-rh/reader.c:3868
-msgid "Bridge"
-msgstr "Köprü"
+#, fuzzy
+#~| 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 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"
+#~ "\n"
+#~ msgstr ""
+#~ "Kullanımı: nmcli con { KOMUT | help }\n"
+#~ " KOMUT := { 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 <isim>] [--"
+#~ "nowait] [--timeout <zamanaşımı>]\n"
+#~ " up id <id> | uuid <id> [iface <iface>] [ap <BSSID>] [--nowait] [--"
+#~ "timeout <zamanaşımı>]\n"
+#~ " down id <id> | uuid <id>\n"
+#~ " delete id <id> | uuid <id>\n"
-#: ../test/nm-online.c:111
-#, c-format
-#| msgid "connecting"
-msgid "\rConnecting"
-msgstr "\rBağlanıyor"
+#~ msgid "Error: 'con list': %s; allowed fields: %s"
+#~ msgstr "Hata: 'bağlantı listesi': %s; izin verilen alanlar :%s"
-#: ../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)"
+#~ msgid "Error: no valid parameter specified."
+#~ msgstr "Hata: geçerli bir değiştirge belirtilmedi."
-#: ../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"
+#~ msgid "Error: Can't find out if NetworkManager is running: %s."
+#~ msgstr "Hata: Ağ Yöneticisi çalışıyorsa bulunamıyor: %s"
-#: ../test/nm-online.c:144
-msgid "Don't print anything"
-msgstr "Herhangi bir şey yazdırma"
+#~| msgid "Unknown parameter: %s\n"
+#~ msgid "Error: unknown parameter: %s"
+#~ msgstr "Hata: bilinmeyen parametre: %s"
-#: ../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"
+#~ msgid "Error: id or uuid has to be specified."
+#~ msgstr "Hata: id veya uuid deÄŸeri belirtilmeli."
-#: ../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 "Error: No suitable device found: %s."
+#~ msgstr "Hata: Uygun bir aygıt bulunamadı: %s."
+
+#~ msgid "Error: No suitable device found."
+#~ msgstr "Hata: Uygun bir aygıt bulunamadı."
+
+#~ msgid "Warning: Connection not active\n"
+#~ msgstr "Uyarı: Bağlantı etkin değil\n"
+
+#~ msgid "Error: could not connect to D-Bus."
+#~ msgstr "Hata: D-Bus'a bağlanılamadı."
+
+#~ msgid "Error: Could not get system settings."
+#~ msgstr "Hata: Sistem ayarları alınamadı."
+
+#~ msgid "Error: Can't obtain connections: settings service is not running."
+#~ msgstr "Hata: Bağlantılar alınamıyor: ayarlar hizmeti çalışmıyor."
+
+#~ msgid "Encrypted: "
+#~ msgstr "Åžifreli: "
+
+#~ msgid "WPA "
+#~ msgstr "WPA "
+
+#~ msgid "WPA2 "
+#~ msgstr "WPA2 "
+
+#~ msgid "Infrastructure"
+#~ msgstr "Altyapı"
+
+#~ msgid "Error: 'dev list': %s; allowed fields: %s"
+#~ msgstr "Hata: 'dev list':%s; izin verilen alanlar :%s"
+
+#~ msgid "not connected"
+#~ msgstr "bağlı değil"
+
+#~ msgid "Error: 'dev status': %s; allowed fields: %s"
+#~ msgstr "Hata: 'dev status': %s; izin verilen alanlar: %s"
+
+#~ msgid "Error: 'dev wimax': %s; allowed fields: %s"
+#~ msgstr "Hara: 'dev wimax': %s; izin verilen alanlar: %s"
+
+#~ msgid "NET-ENABLED"
+#~ msgstr "NET-ENABLED"
+
+#~ msgid "WIFI-HARDWARE"
+#~ msgstr "WIFI-DONANIM"
+
+#~ msgid "WWAN-HARDWARE"
+#~ msgstr "WWAN-DONANIM"
+
+#~ msgid "WIMAX-HARDWARE"
+#~ msgstr "WIMAX-DONANIMI"
+
+#~ msgid "Error: 'nm status': %s; allowed fields: %s"
+#~ msgstr "Hata: 'nm status': %s; izin verilen alanlar: %s"
+
+#~ msgid "not running"
+#~ msgstr "çalışmıyor"
+
+#~| 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"
+
+#~ msgid "Error: Couldn't connect to system bus: %s"
+#~ msgstr "Hata: Sistem veri yoluna bağlanamadı: %s"
+
+#~ msgid "Error: Couldn't create D-Bus object proxy."
+#~ msgstr "Hata: D-Bus nesnesi proxy oluşturamadı."
+
+#~ msgid "Error in sleep: %s"
+#~ msgstr "Uyku hatası: %s"
+
+#~ msgid "Error: invalid 'enable' parameter: '%s'; use 'true' or 'false'."
+#~ msgstr ""
+#~ "Hata: geçersiz 'enable' parametresi: %s'; kullanım 'true' yada 'false'."
+
+#~ msgid "Error: Sleeping status is not exported by NetworkManager."
+#~ msgstr "Hata: Uyku durumu Ağ Yöneticisi ile verilemez."
+
+#~ msgid "WiFi enabled"
+#~ msgstr "WiFi etkin"
+
+#~ msgid "WWAN enabled"
+#~ msgstr "WWAN etkin"
+
+#~ msgid "WiMAX enabled"
+#~ msgstr "WiMAX etkin"
+
+#~ msgid "Error: invalid 'wimax' parameter: '%s'."
+#~ msgstr "Hata: geçersiz 'wimax' değiştirgesi: '%s'."
+
+#~ msgid "Caught signal %d, shutting down..."
+#~ msgstr "%d sinyali yakalandı, kapatılıyor..."
+
+#~ msgid "0 (unknown)"
+#~ msgstr "0 (bilinmeyen)"
+
+#~ msgid "any, "
+#~ msgstr "herhangi, "
+
+#~ msgid "900 MHz, "
+#~ msgstr "900 MHz, "
+
+#~ msgid "1800 MHz, "
+#~ msgstr "1800 MHz, "
+
+#~ msgid "1900 MHz, "
+#~ msgstr "1900 MHz, "
+
+#~ msgid "850 MHz, "
+#~ msgstr "850 MHz, "
+
+#~ msgid "WCDMA 3GPP UMTS 2100 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 2100 MHz, "
+
+#~ msgid "WCDMA 3GPP UMTS 1800 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 1800 MHz, "
+
+#~ msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
+
+#~ msgid "WCDMA 3GPP UMTS 800 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 800 MHz, "
+
+#~ msgid "WCDMA 3GPP UMTS 850 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 850 MHz, "
+
+#~ msgid "WCDMA 3GPP UMTS 900 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 900 MHz, "
+
+#~ msgid "WCDMA 3GPP UMTS 1700 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 1700 MHz, "
+
+#~ msgid "WCDMA 3GPP UMTS 1900 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 1900 MHz, "
+
+#~ msgid "WCDMA 3GPP UMTS 2600 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 2600 MHz, "
+
+#~ 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ı"
+
+#~ msgid "Error: NameHasOwner request failed: %s"
+#~ msgstr "Hata: NameHasOwner isteği başarısız oldu: %s"
+
+#~ 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"
+
+#~ msgid "error processing netlink message: %s"
+#~ msgstr "netlink iletisinin iÅŸlenmesinde hata: %s"
+
+#~ msgid "error occurred while waiting for data on socket"
+#~ msgstr "yuva üzerinde veri beklenirken hata oluştu"
+
+#~ msgid "unable to connect to netlink for monitoring link status: %s"
+#~ msgstr "bağ durumunu izlemek için netlink'e bağlanılamadı: %s"
+
+#~ msgid "unable to enable netlink handle credential passing: %s"
+#~ msgstr "kimlik gönderimi için ağ köprüsü etkinleştirilemiyor: %s"
+
+#~ msgid "unable to allocate netlink handle for monitoring link status: %s"
+#~ msgstr "adres durumunu izlemek için ağ-adresi paylaşımı yapılamadı: %s"
+
+#~ 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"
+
+#~ msgid "error updating link cache: %s"
+#~ msgstr "bağ önbelleğinin güncellenmesinde hata: %s"
+
+#~ msgid "Waits for a successful connection in NetworkManager."
+#~ msgstr "Ağ Yöneticisi başarılı bir bağlantı için bekliyor"
#~ 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"
@@ -3271,18 +8740,12 @@ msgstr ""
#~ 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 eff91f3ab..0828e3cef 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -1,14 +1,15 @@
# Copyright (C) 2011 Free Software Foundation, Inc.
# This file is distributed under the same license as the NetworkManager package.
#
+#: ../src/nm-iface-helper.c:303
# Yuri Chornoivan <yurchor@ukr.net>, 2011, 2012, 2013, 2014.
msgid ""
msgstr ""
-"Project-Id-Version: \n"
+"Project-Id-Version: NetworkManager\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-24 10:05+0000\n"
-"PO-Revision-Date: 2014-06-24 19:45+0300\n"
+"POT-Creation-Date: 2014-11-21 23:07+0000\n"
+"PO-Revision-Date: 2014-11-22 17:01+0200\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <kde-i18n-uk@kde.org>\n"
"Language: uk\n"
@@ -19,93 +20,163 @@ msgstr ""
"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: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
+#: ../clients/cli/agent.c:42
+#, c-format
+msgid ""
+"Usage: nmcli agent { COMMAND | help }\n"
+"\n"
+"COMMAND := { secret | polkit | all }\n"
+"\n"
+msgstr ""
+"КориÑтуваннÑ: nmcli agent { КОМÐÐДР| help }\n"
+"\n"
+"КОМÐÐДР:= { secret | polkit | all }\n"
+"\n"
+
+#: ../clients/cli/agent.c:50
+#, c-format
+msgid ""
+"Usage: nmcli agent secret { help }\n"
+"\n"
+"Runs nmcli as NetworkManager secret agent. When NetworkManager requires\n"
+"a password it asks registered agents for it. This command keeps nmcli "
+"running\n"
+"and if a password is required asks the user for it.\n"
+"\n"
+msgstr ""
+"КориÑтуваннÑ: nmcli agent secret { help }\n"
+"\n"
+"ЗапуÑкає nmcli у режимі агента реєÑтраційних даних NetworkManager. Якщо\n"
+"NetworkManager потрібен буде пароль, ÑиÑтема проÑитиме агентів надати\n"
+"його. Ð¦Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° підтримуватиме nmcli у запущеному Ñтані Ñ–, Ñкщо\n"
+"знадобитьÑÑ Ð¿Ð°Ñ€Ð¾Ð»ÑŒ, запитуватиме про нього у кориÑтувача.\n"
+"\n"
+
+#: ../clients/cli/agent.c:60
+#, c-format
+msgid ""
+"Usage: nmcli agent polkit { help }\n"
+"\n"
+"Registers nmcli as a polkit action for the user session.\n"
+"When a polkit daemon requires an authorization, nmcli asks the user and "
+"gives\n"
+"the response back to polkit.\n"
+"\n"
+msgstr ""
+"КориÑтуваннÑ: nmcli agent polkit { help }\n"
+"\n"
+"ЗареєÑтрувати nmcli Ñк дію polkit Ð´Ð»Ñ ÑеанÑу кориÑтувача.\n"
+"Коли фоновій Ñлужбі polkit потрібне буде уповноваженнÑ, nmcli надішле "
+"кориÑтувачеві\n"
+"запит Ñ– передаÑÑ‚ÑŒ відповідь на нього polkit.\n"
+"\n"
+
+#: ../clients/cli/agent.c:70
+#, c-format
+msgid ""
+"Usage: nmcli agent all { help }\n"
+"\n"
+"Runs nmcli as both NetworkManager secret and a polkit agent.\n"
+"\n"
+msgstr ""
+"КориÑтуваннÑ: nmcli agent all { help }\n"
+"\n"
+"ЗапуÑтити nmcli Ñк агент паролів NetworkManager та polkit.\n"
+"\n"
+
+#: ../clients/cli/agent.c:152
+#, c-format
+msgid "nmcli successfully registered as a NetworkManager's secret agent.\n"
+msgstr "nmcli уÑпішно зареєÑтровано Ñк агент паролів NetworkManager.\n"
+
+#: ../clients/cli/agent.c:154
+#, c-format
+#| msgid "Modem initialization failed"
+msgid "Error: secret agent initialization failed"
+msgstr "Помилка: не вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ агент обробки паролів"
+
+#: ../clients/cli/agent.c:169
+#, c-format
+#| msgid "Error: Connection activation failed: %s"
+msgid "Error: polkit agent initialization failed: %s"
+msgstr "Помилка: не вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ агент polkit: %s"
+
+#: ../clients/cli/agent.c:177
+#, c-format
+msgid "nmcli successfully registered as a polkit agent.\n"
+msgstr "nmcli уÑпішно зареєÑтровано Ñк агент polkit.\n"
+
+#: ../clients/cli/agent.c:209 ../clients/cli/connections.c:8678
+#: ../clients/cli/connections.c:8704 ../clients/cli/connections.c:8842
+#: ../clients/cli/devices.c:2829 ../clients/cli/general.c:325
+#: ../clients/cli/general.c:463
+#, c-format
+msgid "Error: NetworkManager is not running."
+msgstr "Помилка: NetworkManager не працює."
+
+#: ../clients/cli/agent.c:245
+#, c-format
+#| msgid "Error: 'general' command '%s' is not valid."
+msgid "Error: 'agent' command '%s' is not valid."
+msgstr "Помилка: команда «agent» «%s» є некоректною."
+
+#: ../clients/cli/common.c:40 ../clients/cli/common.c:53
+#: ../clients/cli/common.c:61 ../clients/cli/common.c:73
+#: ../clients/cli/connections.c:172 ../clients/cli/connections.c:194
msgid "GROUP"
msgstr "ГРУПÐ"
#. 0
-#: ../cli/src/common.c:39 ../cli/src/common.c:59
+#: ../clients/cli/common.c:41 ../clients/cli/common.c:62
msgid "ADDRESS"
msgstr "ÐДРЕСÐ"
#. 1
-#: ../cli/src/common.c:40 ../cli/src/common.c:60
+#. 2
+#: ../clients/cli/common.c:42 ../clients/cli/common.c:63
+#: ../clients/cli/connections.c:197
+msgid "GATEWAY"
+msgstr "ШЛЮЗ"
+
+#. 2
+#: ../clients/cli/common.c:43 ../clients/cli/common.c:64
msgid "ROUTE"
msgstr "ÐœÐРШРУТ"
-#. 2
-#: ../cli/src/common.c:41 ../cli/src/common.c:61
+#. 3
+#: ../clients/cli/common.c:44 ../clients/cli/common.c:65
msgid "DNS"
msgstr "DNS"
-#. 3
-#: ../cli/src/common.c:42 ../cli/src/common.c:62
+#. 4
+#: ../clients/cli/common.c:45 ../clients/cli/common.c:66
msgid "DOMAIN"
msgstr "ДОМЕÐ"
-#. 4
-#: ../cli/src/common.c:43
+#. 5
+#: ../clients/cli/common.c:46
msgid "WINS"
msgstr "WINS"
#. 0
-#: ../cli/src/common.c:51 ../cli/src/common.c:70
+#: ../clients/cli/common.c:54 ../clients/cli/common.c:74
msgid "OPTION"
msgstr "ПÐРÐМЕТР"
-#: ../cli/src/common.c:408 ../cli/src/settings.c:3020
-#: ../cli/src/settings.c:3039
+#: ../clients/cli/common.c:378 ../clients/cli/common.c:438
#, 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
+#: ../clients/cli/common.c:386
#, c-format
-msgid "invalid next hop address '%s'"
-msgstr "некоректна адреÑа наÑтупного переходу, «%s»"
+#| msgid "invalid IPv4 address '%s'"
+msgid "invalid IP address: %s"
+msgstr "некоректна адреÑа IP: %s"
-#: ../cli/src/common.c:574
+#: ../clients/cli/common.c:450
#, c-format
msgid ""
"the second component of route ('%s') is neither a next hop address nor a "
@@ -114,400 +185,412 @@ msgstr ""
"другим компонентом маршруту («%s») не Ñ” ні наÑтупна адреÑа переходу, ні "
"метрика"
-#: ../cli/src/common.c:584
+#: ../clients/cli/common.c:459
#, c-format
msgid "invalid metric '%s'"
msgstr "некоректна метрика, «%s»"
-#: ../cli/src/common.c:593
+#: ../clients/cli/common.c:467
+#, c-format
+#| msgid "invalid IPv4 route '%s'"
+msgid "invalid route: %s"
+msgstr "некоректний маршрут: %s"
+
+#: ../clients/cli/common.c:479
msgid "default route cannot be added (NetworkManager handles it by itself)"
msgstr ""
"не можна додавати типовий маршрут (NetworkManager оброблÑÑ” його Ñамотужки)"
-#: ../cli/src/common.c:681
+#: ../clients/cli/common.c:496
msgid "unmanaged"
msgstr "некерований"
-#: ../cli/src/common.c:683
+#: ../clients/cli/common.c:498
msgid "unavailable"
msgstr "недоÑтупний"
-#: ../cli/src/common.c:685 ../cli/src/network-manager.c:276
+#: ../clients/cli/common.c:500 ../clients/cli/general.c:260
msgid "disconnected"
msgstr "роз'єднано"
-#: ../cli/src/common.c:687
+#: ../clients/cli/common.c:502
msgid "connecting (prepare)"
msgstr "Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ (приготуваннÑ)"
-#: ../cli/src/common.c:689
+#: ../clients/cli/common.c:504
msgid "connecting (configuring)"
msgstr "Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ (налаштовуваннÑ)"
-#: ../cli/src/common.c:691
+#: ../clients/cli/common.c:506
msgid "connecting (need authentication)"
msgstr "Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ (потрібне розпізнаваннÑ)"
-#: ../cli/src/common.c:693
+#: ../clients/cli/common.c:508
msgid "connecting (getting IP configuration)"
msgstr "Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ (Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½ÑŒ IP)"
-#: ../cli/src/common.c:695
+#: ../clients/cli/common.c:510
msgid "connecting (checking IP connectivity)"
msgstr "Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ (перевірка можливоÑÑ‚Ñ– з’єднаннÑ)"
-#: ../cli/src/common.c:697
+#: ../clients/cli/common.c:512
msgid "connecting (starting secondary connections)"
msgstr "Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ (вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð´Ñ€ÑƒÐ³Ð¾Ñ€Ñдних з’єднань)"
-#: ../cli/src/common.c:699 ../cli/src/network-manager.c:272
+#: ../clients/cli/common.c:514 ../clients/cli/general.c:256
msgid "connected"
msgstr "з'єднано"
-#: ../cli/src/common.c:701 ../cli/src/connections.c:560
+#: ../clients/cli/common.c:516 ../clients/cli/connections.c:538
msgid "deactivating"
msgstr "деактиваціÑ"
-#: ../cli/src/common.c:703
+#: ../clients/cli/common.c:518
msgid "connection failed"
msgstr "невдала Ñпроба з’єднаннÑ"
-#: ../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
+#: ../clients/cli/common.c:520 ../clients/cli/connections.c:543
+#: ../clients/cli/connections.c:566 ../clients/cli/connections.c:1705
+#: ../clients/cli/devices.c:877 ../clients/cli/general.c:263
+#: ../clients/cli/general.c:281 ../clients/cli/general.c:411
+#: ../clients/cli/general.c:427 ../clients/cli/settings.c:715
+#: ../clients/cli/settings.c:777 ../clients/cli/settings.c:1070
+#: ../clients/cli/utils.c:1148 ../src/main.c:309 ../src/main.c:337
msgid "unknown"
msgstr "невідомо"
-#: ../cli/src/common.c:714
+#: ../clients/cli/common.c:529
msgid "No reason given"
msgstr "Причину не вказано"
-#: ../cli/src/common.c:717 ../cli/src/connections.c:2452
+#: ../clients/cli/common.c:532 ../clients/cli/connections.c:2606
#, c-format
msgid "Unknown error"
msgstr "Ðевідома помилка"
-#: ../cli/src/common.c:720
+#: ../clients/cli/common.c:535
msgid "Device is now managed"
msgstr "Тепер приÑтрій Ñ” керованим"
-#: ../cli/src/common.c:723
+#: ../clients/cli/common.c:538
msgid "Device is now unmanaged"
msgstr "Тепер приÑтрій Ñ” некерованим"
-#: ../cli/src/common.c:726
+#: ../clients/cli/common.c:541
msgid "The device could not be readied for configuration"
msgstr "ПриÑтрій не може бути приготовано до налаштовуваннÑ"
-#: ../cli/src/common.c:729
+#: ../clients/cli/common.c:544
msgid ""
"IP configuration could not be reserved (no available address, timeout, etc.)"
msgstr ""
"Ðе вдалоÑÑ Ð·Ð°Ñ€ÐµÐ·ÐµÑ€Ð²ÑƒÐ²Ð°Ñ‚Ð¸ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ IP (немає доÑтупної адреÑи, чаÑу "
"Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚Ð¾Ñ‰Ð¾)"
-#: ../cli/src/common.c:732
+#: ../clients/cli/common.c:547
msgid "The IP configuration is no longer valid"
msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ IP вже не Ñ” коректними"
-#: ../cli/src/common.c:735
+#: ../clients/cli/common.c:550
msgid "Secrets were required, but not provided"
msgstr "Потрібні були реєÑтраційні дані, Ñких не було надано"
-#: ../cli/src/common.c:738
+#: ../clients/cli/common.c:553
msgid "802.1X supplicant disconnected"
msgstr "Допоміжну програму 802.1X від’єднано"
-#: ../cli/src/common.c:741
+#: ../clients/cli/common.c:556
msgid "802.1X supplicant configuration failed"
msgstr "Спроба налаштувати допоміжну програму 802.1X завершилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾"
-#: ../cli/src/common.c:744
+#: ../clients/cli/common.c:559
msgid "802.1X supplicant failed"
msgstr "Помилка допоміжної програми 802.1X"
-#: ../cli/src/common.c:747
+#: ../clients/cli/common.c:562
msgid "802.1X supplicant took too long to authenticate"
msgstr ""
"Ð Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Ð·Ð° допомогою допоміжної програми 802.1X триває занадто довго"
-#: ../cli/src/common.c:750
+#: ../clients/cli/common.c:565
msgid "PPP service failed to start"
msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити Ñлужбу PPP"
-#: ../cli/src/common.c:753
+#: ../clients/cli/common.c:568
msgid "PPP service disconnected"
msgstr "Службу PPP від’єднано"
-#: ../cli/src/common.c:756
+#: ../clients/cli/common.c:571
msgid "PPP failed"
msgstr "помилка PPP"
-#: ../cli/src/common.c:759
+#: ../clients/cli/common.c:574
msgid "DHCP client failed to start"
msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити клієнтÑьку програму DHCP"
-#: ../cli/src/common.c:762
+#: ../clients/cli/common.c:577
msgid "DHCP client error"
msgstr "помилка клієнтÑької програми DHCP"
-#: ../cli/src/common.c:765
+#: ../clients/cli/common.c:580
msgid "DHCP client failed"
msgstr "критична помилка клієнтÑької програми DHCP"
-#: ../cli/src/common.c:768
+#: ../clients/cli/common.c:583
msgid "Shared connection service failed to start"
msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити Ñлужбу Ñпільного викориÑÑ‚Ð°Ð½Ð½Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ"
-#: ../cli/src/common.c:771
+#: ../clients/cli/common.c:586
msgid "Shared connection service failed"
msgstr "Критична помилка Ñлужби Ñпільного викориÑÑ‚Ð°Ð½Ð½Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ"
-#: ../cli/src/common.c:774
+#: ../clients/cli/common.c:589
msgid "AutoIP service failed to start"
msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити Ñлужбу AutoIP"
-#: ../cli/src/common.c:777
+#: ../clients/cli/common.c:592
msgid "AutoIP service error"
msgstr "Помилка Ñлужби AutoIP"
-#: ../cli/src/common.c:780
+#: ../clients/cli/common.c:595
msgid "AutoIP service failed"
msgstr "Помилка Ñлужби AutoIP"
-#: ../cli/src/common.c:783
+#: ../clients/cli/common.c:598
msgid "The line is busy"
msgstr "Лінію зайнÑто"
-#: ../cli/src/common.c:786
+#: ../clients/cli/common.c:601
msgid "No dial tone"
msgstr "Ðемає гудка"
-#: ../cli/src/common.c:789
+#: ../clients/cli/common.c:604
msgid "No carrier could be established"
msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ ноÑій Ñигналу"
-#: ../cli/src/common.c:792
+#: ../clients/cli/common.c:607
msgid "The dialing request timed out"
msgstr "Перевищено Ñ‡Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñƒ щодо набору номера"
-#: ../cli/src/common.c:795
+#: ../clients/cli/common.c:610
msgid "The dialing attempt failed"
msgstr "Спроба Ð½Ð°Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð½Ð¾Ð¼ÐµÑ€Ð° завершилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾"
-#: ../cli/src/common.c:798
+#: ../clients/cli/common.c:613
msgid "Modem initialization failed"
msgstr "Ðе вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ модем"
-#: ../cli/src/common.c:801
+#: ../clients/cli/common.c:616
msgid "Failed to select the specified APN"
msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð±Ñ€Ð°Ñ‚Ð¸ вказаний APN"
-#: ../cli/src/common.c:804
+#: ../clients/cli/common.c:619
msgid "Not searching for networks"
msgstr "Пошук мереж не виконуєтьÑÑ"
-#: ../cli/src/common.c:807
+#: ../clients/cli/common.c:622
msgid "Network registration denied"
msgstr "РеєÑтрацію у мережі заборонено"
-#: ../cli/src/common.c:810
+#: ../clients/cli/common.c:625
msgid "Network registration timed out"
msgstr "Перевищено Ñ‡Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° реєÑтрацію у мережі"
-#: ../cli/src/common.c:813
+#: ../clients/cli/common.c:628
msgid "Failed to register with the requested network"
msgstr "Ðе вдалоÑÑ Ð·Ð°Ñ€ÐµÑ”ÑтруватиÑÑ Ñƒ потрібній мережі"
-#: ../cli/src/common.c:816
+#: ../clients/cli/common.c:631
msgid "PIN check failed"
msgstr "Помилка під Ñ‡Ð°Ñ Ñпроби перевірити PIN-код"
-#: ../cli/src/common.c:819
+#: ../clients/cli/common.c:634
msgid "Necessary firmware for the device may be missing"
msgstr "Можливо, не виÑтачає потрібної Ð´Ð»Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ приÑтрою мікропрограми"
-#: ../cli/src/common.c:822
+#: ../clients/cli/common.c:637
msgid "The device was removed"
msgstr "ПриÑтрій вилучено"
-#: ../cli/src/common.c:825
+#: ../clients/cli/common.c:640
msgid "NetworkManager went to sleep"
msgstr "NetworkManager переведено у режим Ñну"
-#: ../cli/src/common.c:828
+#: ../clients/cli/common.c:643
msgid "The device's active connection disappeared"
msgstr "Ðктивне Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· приÑтроєм зникло"
-#: ../cli/src/common.c:831
+#: ../clients/cli/common.c:646
msgid "Device disconnected by user or client"
msgstr "ПриÑтрій роз’єднано з боку кориÑтувача або клієнтÑької програми"
-#: ../cli/src/common.c:834
+#: ../clients/cli/common.c:649
msgid "Carrier/link changed"
msgstr "Змінено ноÑій або зв’Ñзок"
-#: ../cli/src/common.c:837
+#: ../clients/cli/common.c:652
msgid "The device's existing connection was assumed"
msgstr ""
"Зроблено Ð¿Ñ€Ð¸Ð¿ÑƒÑ‰ÐµÐ½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ викориÑÑ‚Ð°Ð½Ð½Ñ Ð²Ð¶Ðµ вÑтановленого Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· приÑтроєм"
-#: ../cli/src/common.c:840
+#: ../clients/cli/common.c:655
msgid "The supplicant is now available"
msgstr "Відкрито доÑтуп до допоміжної програми"
-#: ../cli/src/common.c:843
+#: ../clients/cli/common.c:658
msgid "The modem could not be found"
msgstr "Ðе вдалоÑÑ Ð²Ð¸Ñвити модем"
-#: ../cli/src/common.c:846
+#: ../clients/cli/common.c:661
msgid "The Bluetooth connection failed or timed out"
msgstr ""
"Помилка Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Bluetooth або Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÐµÐ½Ð½Ñ Ñ‡Ð°Ñу Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ð½Ð½Ñ "
"даних з’єднаннÑм"
-#: ../cli/src/common.c:849
+#: ../clients/cli/common.c:664
msgid "GSM Modem's SIM card not inserted"
msgstr "До модема GSM не вÑтавлено SIM-картки"
-#: ../cli/src/common.c:852
+#: ../clients/cli/common.c:667
msgid "GSM Modem's SIM PIN required"
msgstr "Слід вказати PIN-код SIM-картки у модемі GSM"
-#: ../cli/src/common.c:855
+#: ../clients/cli/common.c:670
msgid "GSM Modem's SIM PUK required"
msgstr "Слід вказати код Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ (PUK) SIM-картки у модемі GSM"
-#: ../cli/src/common.c:858
+#: ../clients/cli/common.c:673
msgid "GSM Modem's SIM wrong"
msgstr "Помилкова SIM-картка у модемі GSM"
-#: ../cli/src/common.c:861
+#: ../clients/cli/common.c:676
msgid "InfiniBand device does not support connected mode"
msgstr "У приÑтрої InfiniBand не передбачено режиму з’єднаннÑ"
-#: ../cli/src/common.c:864
+#: ../clients/cli/common.c:679
msgid "A dependency of the connection failed"
msgstr "Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñтати залежніÑÑ‚ÑŒ з’єднаннÑ"
-#: ../cli/src/common.c:867
+#: ../clients/cli/common.c:682
msgid "A problem with the RFC 2684 Ethernet over ADSL bridge"
msgstr "Проблема з міÑтком Ethernet на оÑнові ADSL відповідно до RFC 2684"
-#: ../cli/src/common.c:870
+#: ../clients/cli/common.c:685
msgid "ModemManager is unavailable"
msgstr "ModemManager недоÑтупнийІ"
-#: ../cli/src/common.c:873
+#: ../clients/cli/common.c:688
msgid "The Wi-Fi network could not be found"
msgstr "Ðе вдалоÑÑ Ð²Ð¸Ñвити мережу Wi-Fi"
-#: ../cli/src/common.c:876
+#: ../clients/cli/common.c:691
msgid "A secondary connection of the base connection failed"
msgstr "Ðе вдалоÑÑ Ð²Ñтановити вторинне щодо оÑновного з’єднаннÑ"
-#: ../cli/src/common.c:879
+#: ../clients/cli/common.c:694
msgid "DCB or FCoE setup failed"
msgstr "Ðе вдалоÑÑ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ñ‚Ð¸ DCB або FCoE"
-#: ../cli/src/common.c:882
+#: ../clients/cli/common.c:697
msgid "teamd control failed"
msgstr "помилка ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ teamd"
-#: ../cli/src/common.c:885
-#| msgid "ModemManager is unavailable"
+#: ../clients/cli/common.c:700
msgid "Modem failed or no longer available"
msgstr "Помилка модема або модем недоÑтупний"
-#: ../cli/src/common.c:888
-#| msgid "ModemManager is unavailable"
+#: ../clients/cli/common.c:703
msgid "Modem now ready and available"
msgstr "Модем готовий до роботи Ñ– доÑтупний"
-#: ../cli/src/common.c:891
+#: ../clients/cli/common.c:706
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
+#: ../clients/cli/common.c:710 ../clients/cli/devices.c:618
+#: ../libnm-glib/nm-device.c:1814 ../libnm/nm-device.c:1635
msgid "Unknown"
msgstr "Ðевідомо"
-#: ../cli/src/common.c:937
+#: ../clients/cli/common.c:752
#, c-format
msgid "invalid priority map '%s'"
msgstr "некоректне Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ñ–Ð¾Ñ€Ð¸Ñ‚ÐµÑ‚Ð½Ð¾ÑÑ‚Ñ–, «%s»"
-#: ../cli/src/common.c:944 ../cli/src/common.c:950
+#: ../clients/cli/common.c:759 ../clients/cli/common.c:765
#, c-format
msgid "priority '%s' is not valid (<0-%ld>)"
msgstr ""
"Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ñ–Ð¾Ñ€Ð¸Ñ‚ÐµÑ‚Ð½Ð¾ÑÑ‚Ñ– «%s» Ñ” некоректним (можливий діапазон значень: <0-"
"%ld>)"
-#: ../cli/src/common.c:1017
+#: ../clients/cli/common.c:832
#, c-format
msgid "'%s' is not a valid team configuration or file name."
msgstr "«%s» не Ñ” коректним налаштуваннÑм команди або назвою файла."
+#: ../clients/cli/common.c:933
+#, c-format
+msgid ""
+"Warning: password for '%s' not given in 'passwd-file' and nmcli cannot ask "
+"without '--ask' option.\n"
+msgstr ""
+"ПопередженнÑ: у «passwd-file» не вказано Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð´Ð¾ «%s», а nmcli не може "
+"запитати про пароль без параметра «--ask».\n"
+
#. define some prompts for connection editor
-#: ../cli/src/connections.c:64
+#: ../clients/cli/connections.c:42
msgid "Setting name? "
msgstr "Ðазва параметра? "
-#: ../cli/src/connections.c:65
+#: ../clients/cli/connections.c:43
msgid "Property name? "
msgstr "Ðазва влаÑтивоÑÑ‚Ñ–? "
-#: ../cli/src/connections.c:66
+#: ../clients/cli/connections.c:44
msgid "Enter connection type: "
msgstr "Вкажіть тип з’єднаннÑ: "
#. define some other prompts
-#: ../cli/src/connections.c:69
+#: ../clients/cli/connections.c:47
msgid "Connection type: "
msgstr "Тип з’єднаннÑ: "
-#: ../cli/src/connections.c:70
+#: ../clients/cli/connections.c:48
msgid "VPN type: "
msgstr "Тип VPN: "
-#: ../cli/src/connections.c:71
+#: ../clients/cli/connections.c:49
msgid "Bond master: "
msgstr "ОÑнова прив’Ñзки: "
-#: ../cli/src/connections.c:72
+#: ../clients/cli/connections.c:50
msgid "Team master: "
msgstr "ОÑнова команди: "
-#: ../cli/src/connections.c:73
+#: ../clients/cli/connections.c:51
msgid "Bridge master: "
msgstr "ОÑнова міÑтка: "
-#: ../cli/src/connections.c:74
+#: ../clients/cli/connections.c:52
msgid "Connection (name, UUID, or path): "
msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ (назва, UUID або шлÑÑ…): "
#. 0
-#: ../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
+#: ../clients/cli/connections.c:60 ../clients/cli/connections.c:173
+#: ../clients/cli/devices.c:57 ../clients/cli/devices.c:86
+#: ../clients/cli/devices.c:96 ../clients/cli/devices.c:107
+#: ../clients/cli/devices.c:116 ../clients/cli/devices.c:131
+#: ../clients/cli/devices.c:144 ../clients/cli/devices.c:170
+#: ../clients/cli/devices.c:185 ../clients/cli/devices.c:194
+#: ../clients/cli/devices.c:203
msgid "NAME"
msgstr "ÐÐЗВÐ"
#. 0
#. 1
-#: ../cli/src/connections.c:83 ../cli/src/connections.c:195
+#: ../clients/cli/connections.c:61 ../clients/cli/connections.c:174
msgid "UUID"
msgstr "UUID"
@@ -515,188 +598,223 @@ msgstr "UUID"
#. 0
#. 1
#. 2
-#: ../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
+#: ../clients/cli/connections.c:62 ../clients/cli/connections.c:195
+#: ../clients/cli/devices.c:43 ../clients/cli/devices.c:59
+#: ../clients/cli/devices.c:173
msgid "TYPE"
msgstr "ТИП"
#. 2
-#: ../cli/src/connections.c:85
+#: ../clients/cli/connections.c:63
msgid "TIMESTAMP"
msgstr "ЧÐСОВРМІТКÐ"
#. 3
-#: ../cli/src/connections.c:86
+#: ../clients/cli/connections.c:64
msgid "TIMESTAMP-REAL"
msgstr "ДІЙСÐРЧÐСОВРМІТКÐ"
#. 4
-#. 14
-#: ../cli/src/connections.c:87 ../cli/src/devices.c:104
+#. 15
+#: ../clients/cli/connections.c:65 ../clients/cli/devices.c:73
msgid "AUTOCONNECT"
msgstr "ÐВТОЗ’ЄДÐÐÐÐЯ"
#. 5
-#: ../cli/src/connections.c:88
+#: ../clients/cli/connections.c:66
+#| msgid "AUTOCONNECT"
+msgid "AUTOCONNECT-PRIORITY"
+msgstr "ПРІОРИТЕТ-ÐВТОЗ’ЄДÐÐÐÐЯ"
+
+#. 6
+#: ../clients/cli/connections.c:67
msgid "READONLY"
msgstr "ЛИШЕ ЧИТÐÐÐЯ"
-#. 6
+#. 7
#. 8
#. 2
#. 15
#. 5
-#: ../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
+#: ../clients/cli/connections.c:68 ../clients/cli/connections.c:181
+#: ../clients/cli/devices.c:45 ../clients/cli/devices.c:160
+#: ../clients/cli/devices.c:176
msgid "DBUS-PATH"
msgstr "ШЛЯХ-DBUS"
-#. 7
+#. 8
#. 13
#. 4
-#: ../cli/src/connections.c:90 ../cli/src/devices.c:188
-#: ../cli/src/devices.c:205
+#: ../clients/cli/connections.c:69 ../clients/cli/devices.c:158
+#: ../clients/cli/devices.c:175
msgid "ACTIVE"
msgstr "ÐКТИВÐИЙ"
-#. 8
+#. 9
#. 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
+#: ../clients/cli/connections.c:70 ../clients/cli/devices.c:42
+#: ../clients/cli/devices.c:58 ../clients/cli/devices.c:157
+#: ../clients/cli/devices.c:174
msgid "DEVICE"
msgstr "ПРИСТРІЙ"
-#. 9
+#. 10
#. 3
#. 1
#. 9
#. 1
-#: ../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
+#: ../clients/cli/connections.c:71 ../clients/cli/connections.c:176
+#: ../clients/cli/devices.c:44 ../clients/cli/devices.c:67
+#: ../clients/cli/general.c:37
msgid "STATE"
msgstr "СТÐÐ"
-#. 10
-#: ../cli/src/connections.c:93
+#. 11
+#: ../clients/cli/connections.c:72
msgid "ACTIVE-PATH"
msgstr "ÐКТИВÐИЙ-ШЛЯХ"
#. 2
-#: ../cli/src/connections.c:196
+#: ../clients/cli/connections.c:175
msgid "DEVICES"
msgstr "ПРИСТРОЇ"
#. 4
-#: ../cli/src/connections.c:198
+#: ../clients/cli/connections.c:177
msgid "DEFAULT"
msgstr "ТИПОВЕ"
#. 5
-#: ../cli/src/connections.c:199
+#: ../clients/cli/connections.c:178
msgid "DEFAULT6"
msgstr "ТИПОВИЙ6"
#. 6
-#: ../cli/src/connections.c:200
+#: ../clients/cli/connections.c:179
msgid "SPEC-OBJECT"
msgstr "SPEC-OBJECT"
#. 7
#. 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
+#: ../clients/cli/connections.c:180 ../clients/cli/connections.c:218
+#: ../clients/cli/connections.c:3717 ../clients/tui/nm-editor-utils.c:234
+#: ../clients/tui/nmt-connect-connection-list.c:406
msgid "VPN"
msgstr "VPN"
#. 9
#. 5
-#. 18
-#: ../cli/src/connections.c:203 ../cli/src/devices.c:80
-#: ../cli/src/devices.c:108
+#. 19
+#: ../clients/cli/connections.c:182 ../clients/cli/devices.c:48
+#: ../clients/cli/devices.c:77
msgid "CON-PATH"
msgstr "ШЛЯХ-ДО-CON"
#. 10
-#: ../cli/src/connections.c:204
+#: ../clients/cli/connections.c:183
msgid "ZONE"
msgstr "ЗОÐÐ"
#. 11
-#: ../cli/src/connections.c:205
+#: ../clients/cli/connections.c:184
msgid "MASTER-PATH"
msgstr "ОСÐОВÐИЙ-ШЛЯХ"
#. 1
-#: ../cli/src/connections.c:217
+#: ../clients/cli/connections.c:196
msgid "USERNAME"
msgstr "КОРИСТУВÐЧ"
-#. 2
-#: ../cli/src/connections.c:218
-msgid "GATEWAY"
-msgstr "ШЛЮЗ"
-
#. 3
-#: ../cli/src/connections.c:219
+#: ../clients/cli/connections.c:198
msgid "BANNER"
msgstr "БÐÐЕР"
#. 4
-#: ../cli/src/connections.c:220
+#: ../clients/cli/connections.c:199
msgid "VPN-STATE"
msgstr "СТÐÐ-VPN"
#. 5
-#: ../cli/src/connections.c:221
+#: ../clients/cli/connections.c:200
msgid "CFG"
msgstr "КОÐФ"
-#: ../cli/src/connections.c:234 ../cli/src/devices.c:239
+#: ../clients/cli/connections.c:213 ../clients/cli/devices.c:218
msgid "GENERAL"
msgstr "ЗÐГÐЛЬÐІ"
#. 0
#. 6
-#: ../cli/src/connections.c:235 ../cli/src/devices.c:246
+#: ../clients/cli/connections.c:214 ../clients/cli/devices.c:225
msgid "IP4"
msgstr "IP4"
#. 1
#. 7
-#: ../cli/src/connections.c:236 ../cli/src/devices.c:247
+#: ../clients/cli/connections.c:215 ../clients/cli/devices.c:226
msgid "DHCP4"
msgstr "DHCP4"
#. 2
#. 8
-#: ../cli/src/connections.c:237 ../cli/src/devices.c:248
+#: ../clients/cli/connections.c:216 ../clients/cli/devices.c:227
msgid "IP6"
msgstr "IP6"
#. 3
#. 9
-#: ../cli/src/connections.c:238 ../cli/src/devices.c:249
+#: ../clients/cli/connections.c:217 ../clients/cli/devices.c:228
msgid "DHCP6"
msgstr "DHCP6"
-#: ../cli/src/connections.c:280
+#: ../clients/cli/connections.c:251
#, c-format
+#| msgid ""
+#| "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"
msgid ""
"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"
+" show [--active] [[--show-secrets] [id | uuid | path | apath] <ID>] ...\n"
"\n"
-" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>]\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [nsp <name>] "
+"[passwd-file <file with passwords>]\n"
"\n"
-" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>]\n"
+" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [passwd-file "
+"<file with passwords>]\n"
"\n"
" down [id | uuid | path | apath] <ID>\n"
"\n"
@@ -719,13 +837,14 @@ msgstr ""
"\n"
" КОМÐÐДР:= { show | up | down | add | modify | edit | | delete }\n"
"\n"
-" show [--active] [[id | uuid | path | apath ] <ідентифікатор>] ...\n"
+" show [--active] [[--show-secrets] [id | uuid | path | apath ] <"
+"ідентифікатор>] ...\n"
"\n"
" up [[id | uuid | path] <ідентифікатор>] [iface <інтерфейÑ>] [ap "
-"<ідентифікатор BSS>] [nsp <назва>] [--nowait] [--timeout <очікуваннÑ>]\n"
+"<ідентифікатор BSS>] [nsp <назва>] [passwd-file <файл з паролÑми>]\n"
"\n"
" up [[id | uuid | path] <ідентифікатор>] [iface <інтерфейÑ>] [ap "
-"<ідентифікатор BSS>] [--nowait] [--timeout <очікуваннÑ>]\n"
+"<ідентифікатор BSS>] [passwd-file <файл з паролÑми>]\n"
"\n"
" down [id | uuid | path | apath] <ідентифікатор>\n"
"\n"
@@ -744,8 +863,31 @@ msgstr ""
" load <назва файла> [ <назва файла>... ]\n"
"\n"
-#: ../cli/src/connections.c:302
+#: ../clients/cli/connections.c:272
#, c-format
+#| 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"
msgid ""
"Usage: nmcli connection show { ARGUMENTS | help }\n"
"\n"
@@ -757,7 +899,8 @@ msgid ""
"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"
+"ARGUMENTS := [--active] [--show-secrets] [id | uuid | path | apath] "
+"<ID> ...\n"
"\n"
"Show details for specified connections. By default, both static "
"configuration\n"
@@ -766,7 +909,7 @@ msgid ""
"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"
+"account. --show-secrets option will reveal associated secrets as well.\n"
msgstr ""
"КориÑтуваннÑ: nmcli connection show { ÐРГУМЕÐТИ | help }\n"
"\n"
@@ -777,7 +920,8 @@ msgstr ""
"приÑтроєм. Без параметрів команда покаже ÑпиÑок уÑÑ–Ñ… профілів. Якщо\n"
"вказано параметр --active, буде показано лише активі профілі.\n"
"\n"
-"ÐРГУМЕÐТИ := [--active] [id | uuid | path | apath] <ідентифікатор> ...\n"
+"ÐРГУМЕÐТИ := [--active] [--show-secrets] [id | uuid | path | apath] <"
+"ідентифікатор> ...\n"
"\n"
"Показати параметри вказаних з’єднань. Типово, буде показано Ñк дані "
"Ñтатичних\n"
@@ -786,40 +930,62 @@ msgstr ""
"на\n"
"Ñторінці підручника (man).\n"
"Якщо вказано параметр «--active», братимутьÑÑ Ð´Ð¾ уваги лише активні "
-"профілі.\n"
+"профілі. Параметр --show-secrets покаже також пов’Ñзані паролі.\n"
-#: ../cli/src/connections.c:324
+#: ../clients/cli/connections.c:293
#, 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"
msgid ""
"Usage: nmcli connection up { ARGUMENTS | help }\n"
"\n"
"ARGUMENTS := [id | uuid | path] <ID> [ifname <ifname>] [ap <BSSID>] [nsp "
-"<name>]\n"
+"<name>] [passwd-file <file with passwords>]\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"
+"ARGUMENTS := ifname <ifname> [ap <BSSID>] [nsp <name>] [passwd-file <file "
+"with passwords>]\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"
+"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"
+"passwd-file - file with password(s) required to activate the connection\n"
"\n"
msgstr ""
"КориÑтуваннÑ: nmcli connection up { ÐРГУМЕÐТИ | help }\n"
"\n"
"ÐРГУМЕÐТИ := [id | uuid | path] <ідентифікатор> [ifname <назва інтерфейÑу>] "
-"[ap <BSSID>] [nsp <назва>]\n"
+"[ap <BSSID>] [nsp <назва>] [passwd-file <файл з паролÑми>]\n"
"\n"
"Ðктивувати Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ð° приÑтрої. Профіль Ð´Ð»Ñ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ— можна визначити за "
"назвою,\n"
"UUID або шлÑхом D-Bus.\n"
"\n"
-"ÐРГУМЕÐТИ := ifname <назва інтерфейÑу> [ap <BSSID>] [nsp <назва>]\n"
+"ÐРГУМЕÐТИ := ifname <назва інтерфейÑу> [ap <BSSID>] [nsp <назва>] "
+"[passwd-file <файл з паролÑми>]\n"
"\n"
"Ðктивувати приÑтрій зі з’єднаннÑм. Профіль Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð°Ñ”Ñ‚ÑŒÑÑ "
"NetworkManager\n"
@@ -828,9 +994,10 @@ msgstr ""
"ifname - визначає приÑтрій, на Ñкому Ñлід активувати з’єднаннÑ\n"
"ap - визначає точку доÑтупу Ð´Ð»Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ (актуальне лише Ð´Ð»Ñ Wi-Fi)\n"
"nsp - визначає Ñлужбу доÑтупу Ð´Ð»Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ (актуальне лише Ð´Ð»Ñ WiMAX)\n"
+"passwd-file - файл з паролÑми, потрібними Ð´Ð»Ñ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ— з’єднаннÑ\n"
"\n"
-#: ../cli/src/connections.c:345
+#: ../clients/cli/connections.c:314
#, c-format
msgid ""
"Usage: nmcli connection down { ARGUMENTS | help }\n"
@@ -852,7 +1019,7 @@ msgstr ""
"назвою, UUID або шлÑхом D-Bus.\n"
"\n"
-#: ../cli/src/connections.c:358
+#: ../clients/cli/connections.c:326
#, c-format
#| msgid ""
#| "Usage: nmcli connection add { ARGUMENTS | help }\n"
@@ -933,13 +1100,15 @@ msgstr ""
#| " [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\n"
+#| " vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan|"
+#| "libreswan|ssh|l2tp|iodine|...\n"
#| " [user <username>]\n"
#| "\n"
#| " olpc-mesh: ssid <SSID>\n"
@@ -972,6 +1141,7 @@ msgid ""
" [mac <MAC address>]\n"
" [cloned-mac <cloned MAC address>]\n"
" [mtu <MTU>]\n"
+" [mode infrastructure|ap|adhoc]\n"
"\n"
" wimax: [mac <MAC address>]\n"
" [nsp <NSP>]\n"
@@ -1015,6 +1185,7 @@ msgid ""
" [updelay <num>]\n"
" [arp-interval <num>]\n"
" [arp-ip-target <num>]\n"
+" [lacp-rate slow (0) | fast (1)]\n"
"\n"
" bond-slave: master <master (ifname, or connection UUID or name)>\n"
"\n"
@@ -1070,6 +1241,7 @@ msgstr ""
" [mac <MAC-адреÑа>]\n"
" [cloned-mac <клонована MAC-адреÑа>]\n"
" [mtu <MTU>]\n"
+" [mode infrastructure|ap|adhoc]\n"
"\n"
" wimax: [mac <MAC-адреÑа>]\n"
" [nsp <NSP>]\n"
@@ -1114,7 +1286,7 @@ msgstr ""
" [updelay <чиÑло>]\n"
" [arp-interval <чиÑло>]\n"
" [arp-ip-target <чиÑло>]\n"
-"\n"
+" [lacp-rate slow (0) | fast (1)]\n"
" bond-slave: master <оÑновний Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ (назва інтерфейÑу чи назва або "
"UUID з’єднаннÑ)>\n"
"\n"
@@ -1138,7 +1310,8 @@ msgstr ""
" [path-cost <1-65535>]\n"
" [hairpin yes|no]\n"
"\n"
-" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan\n"
+" vpn: vpn-type vpnc|openvpn|pptp|openconnect|openswan|libreswan|"
+"ssh|l2tp|iodine|...\n"
" [user <кориÑтувач>]\n"
"\n"
" olpc-mesh: ssid <SSID>\n"
@@ -1150,7 +1323,7 @@ msgstr ""
" [ip6 <адреÑа IPv6>] [gw6 <шлюз IPv6>]\n"
"\n"
-#: ../cli/src/connections.c:437
+#: ../clients/cli/connections.c:406
#, c-format
msgid ""
"Usage: nmcli connection modify { ARGUMENTS | help }\n"
@@ -1197,7 +1370,7 @@ msgstr ""
"nmcli con mod bond0 -bond.options downdelay\n"
"\n"
-#: ../cli/src/connections.c:461
+#: ../clients/cli/connections.c:429
#, c-format
msgid ""
"Usage: nmcli connection edit { ARGUMENTS | help }\n"
@@ -1225,7 +1398,7 @@ msgstr ""
"Додати новий профіль Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð·Ð° допомогою інтерактивного редактора.\n"
"\n"
-#: ../cli/src/connections.c:477
+#: ../clients/cli/connections.c:444
#, c-format
msgid ""
"Usage: nmcli connection delete { ARGUMENTS | help }\n"
@@ -1244,7 +1417,7 @@ msgstr ""
"Профіль можна вказати за допомогою назви, UUID або шлÑху D-Bus.\n"
"\n"
-#: ../cli/src/connections.c:489
+#: ../clients/cli/connections.c:455
#, c-format
msgid ""
"Usage: nmcli connection reload { help }\n"
@@ -1257,7 +1430,7 @@ msgstr ""
"Перезавантажити уÑÑ–Ñ… файли з’єднань з диÑка.\n"
"\n"
-#: ../cli/src/connections.c:498
+#: ../clients/cli/connections.c:463
#, c-format
msgid ""
"Usage: nmcli connection load { ARGUMENTS | help }\n"
@@ -1280,364 +1453,394 @@ msgstr ""
"того, щоб завантажити до NetworkManager найÑвіжіші налаштуваннÑ.\n"
"\n"
-#: ../cli/src/connections.c:556
+#: ../clients/cli/connections.c:534
msgid "activating"
msgstr "активаціÑ"
-#: ../cli/src/connections.c:558
+#: ../clients/cli/connections.c:536
msgid "activated"
msgstr "активовано"
-#: ../cli/src/connections.c:562
+#: ../clients/cli/connections.c:540
msgid "deactivated"
msgstr "вимкнено"
-#: ../cli/src/connections.c:574
+#: ../clients/cli/connections.c:552
msgid "VPN connecting (prepare)"
msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ VPN (приготуваннÑ)"
-#: ../cli/src/connections.c:576
+#: ../clients/cli/connections.c:554
msgid "VPN connecting (need authentication)"
msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ VPN (потрібне розпізнаваннÑ)"
-#: ../cli/src/connections.c:578
+#: ../clients/cli/connections.c:556
msgid "VPN connecting"
msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ VPN"
-#: ../cli/src/connections.c:580
+#: ../clients/cli/connections.c:558
msgid "VPN connecting (getting IP configuration)"
msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ VPN (Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½ÑŒ IP)"
-#: ../cli/src/connections.c:582
+#: ../clients/cli/connections.c:560
msgid "VPN connected"
msgstr "VPN з’єднано"
-#: ../cli/src/connections.c:584
+#: ../clients/cli/connections.c:562
msgid "VPN connection failed"
msgstr "Ðевдала Ñпроба Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ VPN"
-#: ../cli/src/connections.c:586
+#: ../clients/cli/connections.c:564
msgid "VPN disconnected"
msgstr "VPN роз’єднано"
-#: ../cli/src/connections.c:669
+#: ../clients/cli/connections.c:634
+#, c-format
+#| msgid "error updating link cache: %s"
+msgid "Error updating secrets for %s: %s\n"
+msgstr "Помилка під Ñ‡Ð°Ñ Ð¿Ñ€Ð¾Ð±Ð¸ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ–Ð² Ð´Ð»Ñ %s: %s\n"
+
+#: ../clients/cli/connections.c:654
msgid "Connection profile details"
msgstr "Параметри профілю з’єднаннÑ"
-#: ../cli/src/connections.c:681 ../cli/src/connections.c:1033
+#: ../clients/cli/connections.c:666 ../clients/cli/connections.c:1075
#, c-format
msgid "Error: 'connection show': %s"
msgstr "Помилка: «connection show»: %s"
-#: ../cli/src/connections.c:825
+#: ../clients/cli/connections.c:812
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
+#: ../clients/cli/connections.c:813 ../clients/cli/connections.c:815
+#: ../clients/cli/connections.c:817 ../clients/cli/connections.c:849
+#: ../clients/cli/connections.c:916 ../clients/cli/connections.c:917
+#: ../clients/cli/connections.c:919 ../clients/cli/connections.c:3012
+#: ../clients/cli/connections.c:6848 ../clients/cli/connections.c:6849
+#: ../clients/cli/devices.c:588 ../clients/cli/devices.c:638
+#: ../clients/cli/devices.c:845 ../clients/cli/devices.c:846
+#: ../clients/cli/devices.c:847 ../clients/cli/devices.c:848
+#: ../clients/cli/devices.c:881 ../clients/cli/devices.c:883
+#: ../clients/cli/devices.c:911 ../clients/cli/devices.c:912
+#: ../clients/cli/devices.c:913 ../clients/cli/devices.c:914
+#: ../clients/cli/devices.c:915 ../clients/cli/devices.c:916
+#: ../clients/cli/devices.c:917 ../clients/cli/general.c:421
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
+#: ../clients/cli/connections.c:813 ../clients/cli/connections.c:815
+#: ../clients/cli/connections.c:817 ../clients/cli/connections.c:916
+#: ../clients/cli/connections.c:917 ../clients/cli/connections.c:919
+#: ../clients/cli/connections.c:3013 ../clients/cli/connections.c:6848
+#: ../clients/cli/connections.c:6849 ../clients/cli/devices.c:588
+#: ../clients/cli/devices.c:638 ../clients/cli/devices.c:845
+#: ../clients/cli/devices.c:846 ../clients/cli/devices.c:847
+#: ../clients/cli/devices.c:848 ../clients/cli/devices.c:881
+#: ../clients/cli/devices.c:883 ../clients/cli/devices.c:911
+#: ../clients/cli/devices.c:912 ../clients/cli/devices.c:913
+#: ../clients/cli/devices.c:914 ../clients/cli/devices.c:915
+#: ../clients/cli/devices.c:916 ../clients/cli/devices.c:917
+#: ../clients/cli/general.c:423
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:1021
+#: ../clients/cli/connections.c:1063
msgid "Activate connection details"
msgstr "Ðктивувати параметри з’єднаннÑ"
-#: ../cli/src/connections.c:1254
+#: ../clients/cli/connections.c:1299
#, c-format
msgid "invalid field '%s'; allowed fields: %s and %s, or %s,%s"
msgstr "некоректне поле «%s»; дозволені полÑ: %s Ñ– %s або %s,%s"
-#: ../cli/src/connections.c:1269 ../cli/src/connections.c:1277
+#: ../clients/cli/connections.c:1314 ../clients/cli/connections.c:1322
#, c-format
msgid "'%s' has to be alone"
msgstr "«%s» має бути єдиним"
-#: ../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 не працює."
-
#. Add headers
-#: ../cli/src/connections.c:1338
+#: ../clients/cli/connections.c:1377
msgid "NetworkManager active profiles"
msgstr "Ðктивні профілі NetworkManager"
-#: ../cli/src/connections.c:1339
+#: ../clients/cli/connections.c:1378
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
+#: ../clients/cli/connections.c:1418 ../clients/cli/connections.c:2145
+#: ../clients/cli/connections.c:2167 ../clients/cli/connections.c:2176
+#: ../clients/cli/connections.c:2186 ../clients/cli/connections.c:2196
+#: ../clients/cli/connections.c:2274 ../clients/cli/connections.c:8398
+#: ../clients/cli/connections.c:8615 ../clients/cli/devices.c:1906
+#: ../clients/cli/devices.c:1914 ../clients/cli/devices.c:2230
+#: ../clients/cli/devices.c:2237 ../clients/cli/devices.c:2251
+#: ../clients/cli/devices.c:2258 ../clients/cli/devices.c:2275
+#: ../clients/cli/devices.c:2283 ../clients/cli/devices.c:2471
+#: ../clients/cli/devices.c:2567 ../clients/cli/devices.c:2574
#, c-format
msgid "Error: %s argument is missing."
msgstr "Помилка: пропущено аргумент %s."
-#: ../cli/src/connections.c:1427
+#: ../clients/cli/connections.c:1433
#, c-format
msgid "Error: %s - no such connection profile."
msgstr "Помилка: профілю Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ %s не Ñ–Ñнує."
-#: ../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
+#: ../clients/cli/connections.c:1492 ../clients/cli/connections.c:2219
+#: ../clients/cli/connections.c:8915 ../clients/cli/devices.c:2450
+#: ../clients/cli/devices.c:2918 ../clients/cli/general.c:518
+#: ../clients/cli/general.c:567 ../clients/cli/general.c:584
+#: ../clients/cli/general.c:623 ../clients/cli/general.c:637
+#: ../clients/cli/general.c:755 ../clients/cli/general.c:802
+#: ../clients/cli/general.c:822
#, c-format
msgid "Error: %s."
msgstr "Помилка: %s."
-#: ../cli/src/connections.c:1538
+#: ../clients/cli/connections.c:1587
#, c-format
msgid "no active connection on device '%s'"
msgstr "на приÑтрої «%s» немає активних з’єднань"
-#: ../cli/src/connections.c:1546
+#: ../clients/cli/connections.c:1595
msgid "no active connection or device"
msgstr "немає активних з’єднань або приÑтроїв"
-#: ../cli/src/connections.c:1617
+#: ../clients/cli/connections.c:1666
#, c-format
msgid "device '%s' not compatible with connection '%s'"
msgstr "приÑтрій «%s» неÑуміÑний зі з’єднаннÑм «%s»"
-#: ../cli/src/connections.c:1620
+#: ../clients/cli/connections.c:1669
#, c-format
msgid "no device found for connection '%s'"
msgstr "не виÑвлено приÑтрою Ð´Ð»Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s»"
-#: ../cli/src/connections.c:1632
+#: ../clients/cli/connections.c:1681
msgid "unknown reason"
msgstr "невідома причина"
-#: ../cli/src/connections.c:1634 ../cli/src/network-manager.c:288
+#: ../clients/cli/connections.c:1683 ../clients/cli/general.c:272
msgid "none"
msgstr "немає"
-#: ../cli/src/connections.c:1636
+#: ../clients/cli/connections.c:1685
msgid "the user was disconnected"
msgstr "кориÑтувача від’єднано"
-#: ../cli/src/connections.c:1638
+#: ../clients/cli/connections.c:1687
msgid "the base network connection was interrupted"
msgstr "оÑновне Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· мережею розірвано"
-#: ../cli/src/connections.c:1640
+#: ../clients/cli/connections.c:1689
msgid "the VPN service stopped unexpectedly"
msgstr "Ñлужба VPN неочікувано завершила роботу"
-#: ../cli/src/connections.c:1642
+#: ../clients/cli/connections.c:1691
msgid "the VPN service returned invalid configuration"
msgstr "Ñлужбою VPN повернуто неприпуÑтимі налаштуваннÑ"
-#: ../cli/src/connections.c:1644
+#: ../clients/cli/connections.c:1693
msgid "the connection attempt timed out"
msgstr "перевищено Ñ‡Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ"
-#: ../cli/src/connections.c:1646
+#: ../clients/cli/connections.c:1695
msgid "the VPN service did not start in time"
msgstr "Ñлужбу VPN не було вчаÑно запущено"
-#: ../cli/src/connections.c:1648
+#: ../clients/cli/connections.c:1697
msgid "the VPN service failed to start"
msgstr "не вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити Ñлужбу VPN"
-#: ../cli/src/connections.c:1650
+#: ../clients/cli/connections.c:1699
msgid "no valid VPN secrets"
msgstr "не виÑвлено коректних реєÑтраційних даних VPN"
-#: ../cli/src/connections.c:1652
+#: ../clients/cli/connections.c:1701
msgid "invalid VPN secrets"
msgstr "некоректні реєÑтраційні дані VPN"
-#: ../cli/src/connections.c:1654
+#: ../clients/cli/connections.c:1703
msgid "the connection was removed"
msgstr "Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð±ÑƒÐ»Ð¾ вилучено"
-#: ../cli/src/connections.c:1671 ../cli/src/connections.c:1827
-#: ../cli/src/connections.c:6468
+#: ../clients/cli/connections.c:1725 ../clients/cli/connections.c:1753
+#: ../clients/cli/connections.c:1914 ../clients/cli/connections.c:6739
#, c-format
msgid "Connection successfully activated (D-Bus active path: %s)\n"
msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÑƒÑпішно задіÑно (активний шлÑÑ… D-Bus: %s)\n"
-#: ../cli/src/connections.c:1676
+#: ../clients/cli/connections.c:1732
+#, c-format
+#| msgid "Connection successfully activated (D-Bus active path: %s)\n"
+msgid ""
+"Connection successfully activated (master waiting for slaves) (D-Bus active "
+"path: %s)\n"
+msgstr ""
+"Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ÑƒÑпішно задіÑно (оÑновне Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¾Ñ‡Ñ–ÐºÑƒÑ” на допоміжні) (активний "
+"шлÑÑ… D-Bus: %s)\n"
+
+#: ../clients/cli/connections.c:1736 ../clients/cli/connections.c:1758
#, c-format
msgid "Error: Connection activation failed."
msgstr "Помилка: невдала Ñпроба активації з’єднаннÑ."
-#: ../cli/src/connections.c:1701
+#: ../clients/cli/connections.c:1809
#, c-format
msgid "VPN connection successfully activated (D-Bus active path: %s)\n"
msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ VPN уÑпішно задіÑно (активний шлÑÑ… D-Bus: %s)\n"
-#: ../cli/src/connections.c:1708
+#: ../clients/cli/connections.c:1817
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "Помилка: не вдалоÑÑ Ð°ÐºÑ‚Ð¸Ð²ÑƒÐ²Ð°Ñ‚Ð¸ з’єднаннÑ: %s."
-#: ../cli/src/connections.c:1726 ../cli/src/devices.c:1299
+#: ../clients/cli/connections.c:1836 ../clients/cli/devices.c:1319
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "Помилка: перевищено Ñ‡Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ %d Ñ."
-#: ../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
+#: ../clients/cli/connections.c:1896
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "Помилка: не вдалоÑÑ Ð°ÐºÑ‚Ð¸Ð²ÑƒÐ²Ð°Ñ‚Ð¸ з’єднаннÑ: %s"
-#: ../cli/src/connections.c:1916 ../cli/src/connections.c:2046
+#: ../clients/cli/connections.c:1981
+#, c-format
+#| msgid "Error: failed to remove value of '%s': %s\n"
+msgid "failed to read passwd-file '%s': %s"
+msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ файл passwd «%s»: %s"
+
+#: ../clients/cli/connections.c:1993
+#, c-format
+msgid "missing colon in 'password' entry '%s'"
+msgstr "пропущено двокрапку у запиÑÑ– «password» «%s»"
+
+#: ../clients/cli/connections.c:2001
+#, c-format
+msgid "missing dot in 'password' entry '%s'"
+msgstr "пропущено крапку у запиÑÑ– «password» «%s»"
+
+#: ../clients/cli/connections.c:2014
+#, c-format
+msgid "invalid setting name in 'password' entry '%s'"
+msgstr "некоректна назва параметра у запиÑÑ– «password» «%s»"
+
+#: ../clients/cli/connections.c:2061 ../clients/cli/connections.c:2220
msgid "unknown error"
msgstr "невідома помилка"
-#: ../cli/src/connections.c:1924
+#: ../clients/cli/connections.c:2070
#, c-format
msgid "unknown device '%s'."
msgstr "невідомий приÑтрій, «%s»."
-#: ../cli/src/connections.c:1929
+#: ../clients/cli/connections.c:2075
msgid "neither a valid connection nor device given"
msgstr "не вказано ні коректного з’єднаннÑ, ні приÑтрою"
-#: ../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
+#: ../clients/cli/connections.c:2158
+#, c-format
+#| msgid "Error: connection is not valid: %s\n"
+msgid "Error: Connection '%s' does not exist."
+msgstr "Помилка: Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s» не Ñ–Ñнує."
+
+#: ../clients/cli/connections.c:2204 ../clients/cli/devices.c:1218
+#: ../clients/cli/devices.c:1920 ../clients/cli/devices.c:2294
+#: ../clients/cli/devices.c:2580
#, c-format
msgid "Unknown parameter: %s\n"
msgstr "Ðевідомий параметр: %s\n"
-#: ../cli/src/connections.c:2054
+#: ../clients/cli/connections.c:2228
msgid "preparing"
msgstr "приготуваннÑ"
-#: ../cli/src/connections.c:2082 ../cli/src/connections.c:8295
-#: ../cli/src/connections.c:8410
+#: ../clients/cli/connections.c:2256 ../clients/cli/connections.c:8596
+#: ../clients/cli/connections.c:8710
#, c-format
msgid "Error: No connection specified."
msgstr "Помилка: не вказано з’єднаннÑ."
-#: ../cli/src/connections.c:2119
+#: ../clients/cli/connections.c:2284
#, c-format
msgid "Error: '%s' is not an active connection."
msgstr "Помилка: «%s» не Ñ” активним з’єднаннÑм."
-#: ../cli/src/connections.c:2431 ../cli/src/utils.c:515
+#: ../clients/cli/connections.c:2585 ../clients/cli/utils.c:517
#, c-format
msgid "'%s' not among [%s]"
msgstr "«%s» немає Ñеред [%s]"
-#: ../cli/src/connections.c:2513
+#: ../clients/cli/connections.c:2664
#, c-format
msgid "Error: '%s': '%s' is not a valid %s MAC address."
msgstr "Помилка: «%s»: «%s» не Ñ” коректною MAC-адреÑою %s."
#. 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
+#: ../clients/cli/connections.c:2665 ../clients/cli/connections.c:3127
+#: ../clients/tui/nm-editor-utils.c:164 ../libnm-core/nm-connection.c:1532
+#: ../libnm-glib/nm-device.c:1802 ../libnm/nm-device.c:1623
msgid "InfiniBand"
msgstr "InfiniBand"
-#: ../cli/src/connections.c:2514 ../libnm-glib/nm-device.c:1790
-#: ../tui/nm-editor-utils.c:156
+#: ../clients/cli/connections.c:2665 ../clients/tui/nm-editor-utils.c:147
+#: ../libnm-glib/nm-device.c:1790 ../libnm/nm-device.c:1611
msgid "Ethernet"
msgstr "Ethernet"
-#: ../cli/src/connections.c:2537
+#: ../clients/cli/connections.c:2685
#, c-format
msgid "Error: 'mtu': '%s' is not a valid MTU."
msgstr "Помилка: «mtu»: «%s» не Ñ” коректним значеннÑм MTU."
-#: ../cli/src/connections.c:2553
+#: ../clients/cli/connections.c:2701
#, c-format
msgid "Error: 'parent': '%s' is not a valid interface name."
msgstr "Помилка: «parent»: «%s» не Ñ” коректною назвою інтерфейÑу."
-#: ../cli/src/connections.c:2574
+#: ../clients/cli/connections.c:2722
#, c-format
msgid "Error: 'p-key': '%s' is not a valid InfiniBand P_KEY."
msgstr "Помилка: «p-key»: «%s» не є коректним закритим ключем InfiniBand"
-#: ../cli/src/connections.c:2603
+#: ../clients/cli/connections.c:2767
#, c-format
-msgid ""
-"Error: 'mode': '%s' is not a valid InfiniBand transport mode [datagram, "
-"connected]."
-msgstr ""
-"Помилка: «mode»: «%s» не Ñ” коректним режимом Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… InfiniBand "
-"[datagram, connected]."
+#| msgid "Error: '%s': '%s' is not valid; %s "
+msgid "Error: '%s': '%s' is not a valid %s %s."
+msgstr "Помилка: «%s»: «%s» Ñ” некоректним значеннÑм параметра %s %s."
+
+#: ../clients/cli/connections.c:2780
+#| msgid "Wi-Fi"
+msgid "Wi-Fi mode"
+msgstr "Режим Wi-Fi"
-#: ../cli/src/connections.c:2617
+#: ../clients/cli/connections.c:2789
+#| msgid "Transport mode"
+msgid "InfiniBand transport mode"
+msgstr "Режим Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ð½Ð½Ñ InfiniBand"
+
+#: ../clients/cli/connections.c:2802
#, c-format
msgid "Error: 'flags': '%s' is not valid; use <0-7>."
msgstr ""
"Помилка: «flags»: «%s» Ñ” некоректним; мало бути чиÑло у діапазоні <0-7>."
-#: ../cli/src/connections.c:2639
+#: ../clients/cli/connections.c:2824
#, c-format
msgid "Error: '%s': '%s' is not valid; %s "
msgstr "Помилка: «%s»: «%s» є некоректним; %s "
-#: ../cli/src/connections.c:2832
+#: ../clients/cli/connections.c:3003
#, 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
+#: ../clients/cli/connections.c:3059
#, 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"
@@ -1645,9 +1848,8 @@ msgstr[1] "Ð”Ð»Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½ÑŒ типу «%2$s» передбачено %1$
msgstr[2] "Ð”Ð»Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½ÑŒ типу «%2$s» передбачено %1$d додаткових аргументів.\n"
msgstr[3] "Ð”Ð»Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½ÑŒ типу «%2$s» передбачено %1$d додатковий аргумент.\n"
-#: ../cli/src/connections.c:2891
+#: ../clients/cli/connections.c:3062
#, 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"
@@ -1655,451 +1857,480 @@ msgstr[1] "Хочете вказати їх? %s"
msgstr[2] "Хочете вказати їх? %s"
msgstr[3] "Хочете вказати його? %s"
-#: ../cli/src/connections.c:2906
+#. Ask for optional arguments
+#: ../clients/cli/connections.c:3079
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
+#: ../clients/cli/connections.c:3084 ../clients/cli/connections.c:3132
+#: ../clients/cli/connections.c:3266 ../clients/cli/connections.c:3345
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
+#: ../clients/cli/connections.c:3095 ../clients/cli/connections.c:3143
+#: ../clients/cli/connections.c:3238 ../clients/cli/connections.c:3277
+#: ../clients/cli/connections.c:3649
msgid "MAC [none]: "
msgstr "MAC [типово немає]: "
-#: ../cli/src/connections.c:2936
+#: ../clients/cli/connections.c:3106
msgid "Cloned MAC [none]: "
msgstr "Клонований MAC [типово немає]: "
-#: ../cli/src/connections.c:2984
+#: ../clients/cli/connections.c:3154
#, c-format
-#| msgid "Transport mode"
msgid "Transport mode %s"
msgstr "Режим Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ð½Ð½Ñ %s"
-#: ../cli/src/connections.c:2997
+#: ../clients/cli/connections.c:3167
msgid "Parent interface [none]: "
msgstr "БатьківÑький Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ [типово немає]: "
-#: ../cli/src/connections.c:3008
+#: ../clients/cli/connections.c:3178
msgid "P_KEY [none]: "
msgstr "P_KEY [типово немає]: "
-#: ../cli/src/connections.c:3018
+#: ../clients/cli/connections.c:3188
#, c-format
msgid "Error: 'p-key' is mandatory when 'parent' is specified.\n"
msgstr ""
"Помилка: параметр «p-key» обов’Ñзковим, Ñкщо вказано параметр «parent».\n"
+#. Ask for optional arguments
+#: ../clients/cli/connections.c:3205 ../clients/tui/nm-editor-utils.c:155
+#: ../libnm-glib/nm-device.c:1792 ../libnm/nm-device.c:1613
+msgid "Wi-Fi"
+msgstr "Wi-Fi"
+
+#: ../clients/cli/connections.c:3213
+#, c-format
+#| msgid "Mode"
+msgid "Mode %s"
+msgstr "Режим %s"
+
#. Ask for optional 'wimax' arguments.
-#: ../cli/src/connections.c:3038 ../libnm-glib/nm-device.c:1798
+#: ../clients/cli/connections.c:3233 ../libnm-glib/nm-device.c:1798
+#: ../libnm/nm-device.c:1619
msgid "WiMAX"
msgstr "WiMAX"
#. Ask for optional 'pppoe' arguments.
-#: ../cli/src/connections.c:3061
+#: ../clients/cli/connections.c:3256
msgid "PPPoE"
msgstr "PPPoE"
-#: ../cli/src/connections.c:3065 ../cli/src/connections.c:3103
+#: ../clients/cli/connections.c:3260 ../clients/cli/connections.c:3298
msgid "Password [none]: "
msgstr "Пароль [типово немає]: "
-#: ../cli/src/connections.c:3067
+#: ../clients/cli/connections.c:3262
msgid "Service [none]: "
msgstr "Служба [типово немає]: "
#. Ask for optional 'gsm' or 'cdma' arguments.
-#: ../cli/src/connections.c:3097
-#| msgid "Mobile Broadband"
+#: ../clients/cli/connections.c:3292
msgid "mobile broadband"
msgstr "мобільна радіомережа"
-#: ../cli/src/connections.c:3101 ../cli/src/connections.c:3509
+#: ../clients/cli/connections.c:3296 ../clients/cli/connections.c:3721
msgid "Username [none]: "
msgstr "КориÑтувач [типово немає]: "
#. Ask for optional 'bluetooth' arguments.
-#: ../cli/src/connections.c:3116
-#| msgid "Bluetooth"
+#: ../clients/cli/connections.c:3311
msgid "bluetooth"
msgstr "bluetooth"
-#: ../cli/src/connections.c:3123
+#: ../clients/cli/connections.c:3318
#, c-format
-#| msgid "Bluetooth"
msgid "Bluetooth type %s"
msgstr "Тип Bluetooth %s"
-#: ../cli/src/connections.c:3129
+#: ../clients/cli/connections.c:3324
#, 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/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
+#. 13
+#: ../clients/cli/connections.c:3340 ../clients/cli/devices.c:232
+#: ../clients/tui/nm-editor-utils.c:218 ../clients/tui/nmt-page-vlan.c:97
+#: ../libnm-core/nm-connection.c:1530 ../libnm-glib/nm-device.c:1810
+#: ../libnm-util/nm-connection.c:1614 ../libnm/nm-device.c:1631
msgid "VLAN"
msgstr "VLAN"
-#: ../cli/src/connections.c:3161
+#: ../clients/cli/connections.c:3356
msgid "VLAN flags (<0-7>) [none]: "
msgstr "Прапорці VLAN (<0-7>) [типово немає]: "
-#: ../cli/src/connections.c:3172
+#: ../clients/cli/connections.c:3367
msgid "Ingress priority maps [none]: "
msgstr "Ð’Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ñ–Ð¾Ñ€Ð¸Ñ‚ÐµÑ‚Ð½Ð¾ÑÑ‚Ñ– вхідного доÑтупу [типово немає]: "
-#: ../cli/src/connections.c:3183
+#: ../clients/cli/connections.c:3378
msgid "Egress priority maps [none]: "
msgstr "Ð’Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ñ–Ð¾Ñ€Ð¸Ñ‚ÐµÑ‚Ð½Ð¾ÑÑ‚Ñ– вихідного доÑтупу [типово немає]: "
-#: ../cli/src/connections.c:3194
+#: ../clients/cli/connections.c:3389
msgid "Bonding mode [balance-rr]: "
msgstr "Режим прив’ÑÐ·ÑƒÐ²Ð°Ð½Ð½Ñ [типово balance-rr]: "
#. Ask for optional 'bond' arguments.
-#: ../cli/src/connections.c:3209
+#: ../clients/cli/connections.c:3405
msgid "bond"
msgstr "прив’Ñзка"
-#: ../cli/src/connections.c:3231
+#: ../clients/cli/connections.c:3427
msgid "Bonding primary interface [none]: "
msgstr "ОÑновний Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð¿Ñ€Ð¸Ð²â€™ÑÐ·ÑƒÐ²Ð°Ð½Ð½Ñ [типово немає]: "
-#: ../cli/src/connections.c:3234
+#: ../clients/cli/connections.c:3430
#, c-format
msgid "Error: 'primary': '%s' is not a valid interface name.\n"
msgstr "Помилка: «primary»: «%s» не Ñ” коректною назвою інтерфейÑу.\n"
-#: ../cli/src/connections.c:3242
+#: ../clients/cli/connections.c:3438
#, c-format
-#| msgid "Link monitoring"
msgid "Bonding monitoring mode %s"
msgstr "Режим ÑпоÑÑ‚ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð° зв’Ñзком %s"
-#: ../cli/src/connections.c:3248
+#: ../clients/cli/connections.c:3444
#, 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
+#: ../clients/cli/connections.c:3453
msgid "Bonding miimon [100]: "
msgstr "ЧаÑтота ÑпоÑÑ‚ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ MII прив’ÑÐ·ÑƒÐ²Ð°Ð½Ð½Ñ [типово 100]: "
-#: ../cli/src/connections.c:3260
+#: ../clients/cli/connections.c:3456
#, 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
+#: ../clients/cli/connections.c:3464
msgid "Bonding downdelay [0]: "
msgstr "downdelay прив’ÑÐ·ÑƒÐ²Ð°Ð½Ð½Ñ [типово 0]: "
-#: ../cli/src/connections.c:3271
+#: ../clients/cli/connections.c:3467
#, 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
+#: ../clients/cli/connections.c:3475
msgid "Bonding updelay [0]: "
msgstr "updelay прив’ÑÐ·ÑƒÐ²Ð°Ð½Ð½Ñ [типово 0]: "
-#: ../cli/src/connections.c:3282
+#: ../clients/cli/connections.c:3478
#, 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
+#: ../clients/cli/connections.c:3487
msgid "Bonding arp-interval [0]: "
msgstr "arp-interval прив’ÑÐ·ÑƒÐ²Ð°Ð½Ð½Ñ [типово 0]: "
-#: ../cli/src/connections.c:3294
+#: ../clients/cli/connections.c:3490
#, 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
+#: ../clients/cli/connections.c:3498
msgid "Bonding arp-ip-target [none]: "
msgstr "arp-ip-target прив’ÑÐ·ÑƒÐ²Ð°Ð½Ð½Ñ [типово немає]: "
-#: ../cli/src/connections.c:3322
+#: ../clients/cli/connections.c:3505
+msgid "LACP rate ('slow' or 'fast') [slow]: "
+msgstr "ШвидкіÑÑ‚ÑŒ LACP (slow або fast) [slow]: "
+
+#: ../clients/cli/connections.c:3511
+#, c-format
+#| msgid "Error: 'master': '%s' is not valid UUID nor interface."
+msgid "Error: 'lacp_rate': '%s' is invalid ('slow' or 'fast').\n"
+msgstr "Помилка: «lacp_rate»: «%s» є некоректним («slow» або «fast»).\n"
+
+#: ../clients/cli/connections.c:3534
msgid "Team JSON configuration [none]: "
msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ JSON команди [немає]: "
-#: ../cli/src/connections.c:3339
+#: ../clients/cli/connections.c:3551
msgid "team"
msgstr "команда"
-#: ../cli/src/connections.c:3345
+#: ../clients/cli/connections.c:3557
msgid "team-slave"
msgstr "підлеглий-команди"
#. Ask for optional 'bridge' arguments.
-#: ../cli/src/connections.c:3357
-#| msgid "Bridge"
+#: ../clients/cli/connections.c:3569
msgid "bridge"
msgstr "міÑток"
-#: ../cli/src/connections.c:3363
+#: ../clients/cli/connections.c:3575
#, c-format
-#| msgid "Enable STP (yes/no) [yes]: "
msgid "Enable STP %s"
msgstr "Ð’Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ STP %s"
-#: ../cli/src/connections.c:3368
+#: ../clients/cli/connections.c:3580
#, c-format
-#| msgid "Error: 'stp': %s."
msgid "Error: 'stp': %s.\n"
msgstr "Помилка: «stp»: %s.\n"
-#: ../cli/src/connections.c:3376
+#: ../clients/cli/connections.c:3588
msgid "STP priority [32768]: "
msgstr "Пріоритет STP [типово 32768]: "
-#: ../cli/src/connections.c:3380
+#: ../clients/cli/connections.c:3592
#, 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
+#: ../clients/cli/connections.c:3600
msgid "Forward delay [15]: "
msgstr "Затримка переÑпрÑÐ¼ÑƒÐ²Ð°Ð½Ð½Ñ [типово 15]:"
-#: ../cli/src/connections.c:3392
+#: ../clients/cli/connections.c:3604
#, 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
+#: ../clients/cli/connections.c:3613
msgid "Hello time [2]: "
msgstr "Ð§Ð°Ñ Ð½Ð° Ð²Ñ–Ñ‚Ð°Ð½Ð½Ñ [типово 2]:"
-#: ../cli/src/connections.c:3405
+#: ../clients/cli/connections.c:3617
#, 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
+#: ../clients/cli/connections.c:3625
msgid "Max age [20]: "
msgstr "МакÑ. вік [типово 20]: "
-#: ../cli/src/connections.c:3417
+#: ../clients/cli/connections.c:3629
#, 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
+#: ../clients/cli/connections.c:3637
msgid "MAC address ageing time [300]: "
msgstr "Ð§Ð°Ñ Ð·Ð°ÑÑ‚Ð°Ñ€Ñ–Ð²Ð°Ð½Ð½Ñ MAC-адреÑи [типово 300]: "
-#: ../cli/src/connections.c:3429
+#: ../clients/cli/connections.c:3641
#, 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"
+#: ../clients/cli/connections.c:3668
msgid "bridge-slave"
msgstr "міÑток-підлеглий"
-#: ../cli/src/connections.c:3461
+#: ../clients/cli/connections.c:3673
msgid "Bridge port priority [32]: "
msgstr "Пріоритетний порт міÑтка [типово 32]: "
-#: ../cli/src/connections.c:3474
+#: ../clients/cli/connections.c:3686
msgid "Bridge port STP path cost [100]: "
msgstr "ВартіÑÑ‚ÑŒ маршруту STP порту міÑтка [типово 100]: "
-#: ../cli/src/connections.c:3488
+#: ../clients/cli/connections.c:3700
#, c-format
-#| msgid "Hairpin mode"
msgid "Hairpin %s"
msgstr "Початкова зона (hairpin) %s"
-#: ../cli/src/connections.c:3493
+#: ../clients/cli/connections.c:3705
#, 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
+#: ../clients/cli/connections.c:3732 ../libnm-glib/nm-device.c:1796
+#: ../libnm/nm-device.c:1617
msgid "OLPC Mesh"
msgstr "Сітка OLPC"
-#: ../cli/src/connections.c:3525
+#: ../clients/cli/connections.c:3737
msgid "OLPC Mesh channel [1]: "
msgstr "Канал OLPC Mesh [типово 1]: "
-#: ../cli/src/connections.c:3528
+#: ../clients/cli/connections.c:3740
#, 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
+#: ../clients/cli/connections.c:3748
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]: "
+#: ../clients/cli/connections.c:3790
+#| msgid "IPv4 address (IP[/plen] [gateway]) [none]: "
+msgid "IPv4 address (IP[/plen]) [none]: "
+msgstr "ÐдреÑа IPv4 (IP[/plen]) [немає]: "
-#: ../cli/src/connections.c:3583
-msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
-msgstr "ÐдреÑа IPv6 (IP[/префікÑ] [шлюз]) [none]: "
+#: ../clients/cli/connections.c:3792
+#| msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
+msgid "IPv6 address (IP[/plen]) [none]: "
+msgstr "ÐдреÑа IPv6 (IP[/plen]) [немає]: "
-#: ../cli/src/connections.c:3601
+#: ../clients/cli/connections.c:3806
#, c-format
-msgid " Address successfully added: %s %s\n"
-msgstr " ÐдреÑу уÑпішно додано: %s %s\n"
+#| msgid " Address successfully added: %s %s\n"
+msgid " Address successfully added: %s\n"
+msgstr " ÐдреÑу уÑпішно додано: %s\n"
-#: ../cli/src/connections.c:3603
+#: ../clients/cli/connections.c:3808
#, c-format
-msgid " Warning: address already present: %s %s\n"
-msgstr " ПопередженнÑ: адреÑу вже викориÑтано: %s %s\n"
+#| msgid " Warning: address already present: %s %s\n"
+msgid " Warning: address already present: %s\n"
+msgstr " ПопердженнÑ: адреÑу вже вказано: %s\n"
-#: ../cli/src/connections.c:3605
+#: ../clients/cli/connections.c:3810
#, 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
+#: ../clients/cli/connections.c:3812 ../clients/cli/connections.c:4692
+#: ../clients/cli/connections.c:4753 ../clients/cli/connections.c:5154
+#: ../clients/cli/connections.c:5186
msgid "Error: "
msgstr "Помилка: "
+#: ../clients/cli/connections.c:3832
+#| msgid "IPv4 address (IP[/plen] [gateway]) [none]: "
+msgid "IPv4 gateway [none]: "
+msgstr "Шлюз IPv4 [немає]: "
+
+#: ../clients/cli/connections.c:3835
+#| msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
+msgid "IPv6 gateway [none]: "
+msgstr "Шлюз IPv6 [немає]: "
+
+#: ../clients/cli/connections.c:3855
+#, c-format
+#| msgid "Error: invalid argument '%s'\n"
+msgid "Error: invalid gateway address '%s'\n"
+msgstr "Помилка: некоректна адреÑа шлюзу, «%s»\n"
+
#. Ask for IP addresses
-#: ../cli/src/connections.c:3624
+#: ../clients/cli/connections.c:3868
#, 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
+#: ../clients/cli/connections.c:3876
#, c-format
msgid "Press <Enter> to finish adding addresses.\n"
msgstr "ÐатиÑніть <Enter>, щоб завершити Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð°Ð´Ñ€ÐµÑ.\n"
-#: ../cli/src/connections.c:3777
+#: ../clients/cli/connections.c:4014
#, c-format
msgid "Error: 'parent': not valid without 'p-key'."
msgstr "Помилка: «parent»: є некоректним без «p-key»."
-#: ../cli/src/connections.c:3833 ../cli/src/connections.c:4854
+#: ../clients/cli/connections.c:4069 ../clients/cli/connections.c:5074
msgid "SSID: "
msgstr "SSID: "
-#: ../cli/src/connections.c:3836 ../cli/src/connections.c:4857
+#: ../clients/cli/connections.c:4072 ../clients/cli/connections.c:5077
msgid "Error: 'ssid' is required."
msgstr "Помилка: Ñлід вказати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «ssid»."
-#: ../cli/src/connections.c:3900
+#: ../clients/cli/connections.c:4136
msgid "WiMAX NSP name: "
msgstr "Ðазва NSP WiMAX: "
-#: ../cli/src/connections.c:3903
+#: ../clients/cli/connections.c:4139
msgid "Error: 'nsp' is required."
msgstr "Помилка: Ñлід вказати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «nsp»."
-#: ../cli/src/connections.c:3958
+#: ../clients/cli/connections.c:4191
msgid "PPPoE username: "
msgstr "КориÑтувач PPPoE: "
-#: ../cli/src/connections.c:3961
+#: ../clients/cli/connections.c:4194
msgid "Error: 'username' is required."
msgstr "Помилка: Ñлід вказати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «username»."
-#: ../cli/src/connections.c:4032
+#: ../clients/cli/connections.c:4263
msgid "APN: "
msgstr "APN: "
-#: ../cli/src/connections.c:4035
+#: ../clients/cli/connections.c:4266
msgid "Error: 'apn' is required."
msgstr "Помилка: Ñлід вказати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «apn»."
-#: ../cli/src/connections.c:4094
+#: ../clients/cli/connections.c:4324
msgid "Bluetooth device address: "
msgstr "ÐдреÑа приÑтрою Bluetooth: "
-#: ../cli/src/connections.c:4097
+#: ../clients/cli/connections.c:4327
msgid "Error: 'addr' is required."
msgstr "Помилка: Ñлід вказати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «addr»."
-#: ../cli/src/connections.c:4140
+#: ../clients/cli/connections.c:4368
#, 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
+#: ../clients/cli/connections.c:4412
msgid "VLAN parent device or connection UUID: "
msgstr "БатьківÑький приÑтрій VLAN або UUID з’єднаннÑ: "
-#: ../cli/src/connections.c:4188
+#: ../clients/cli/connections.c:4415
msgid "Error: 'dev' is required."
msgstr "Помилка: Ñлід вказати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «dev»."
-#: ../cli/src/connections.c:4192
+#: ../clients/cli/connections.c:4419
msgid "VLAN ID <0-4095>: "
msgstr "Ід. VLAN <0-4095>: "
-#: ../cli/src/connections.c:4195
+#: ../clients/cli/connections.c:4422
msgid "Error: 'id' is required."
msgstr "Помилка: Ñлід вказати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «id»."
-#: ../cli/src/connections.c:4201
+#: ../clients/cli/connections.c:4428
#, c-format
msgid "Error: 'id': '%s' is not valid; use <0-4095>."
msgstr ""
"Помилка: «id»: «%s» Ñ” некоректним; мало бути чиÑло у діапазоні <0-4095>."
-#: ../cli/src/connections.c:4211
+#: ../clients/cli/connections.c:4438
#, c-format
msgid "Error: 'dev': '%s' is neither UUID, interface name, nor MAC."
msgstr ""
"Помилка: «dev»: «%s» не Ñ” ні UUID, ні назвою інтерфейÑу, ні MAC-адреÑою."
-#: ../cli/src/connections.c:4346
+#: ../clients/cli/connections.c:4572
#, c-format
msgid "Error: 'mode': %s."
msgstr "Помилка: «mode»: %s."
-#: ../cli/src/connections.c:4355
+#: ../clients/cli/connections.c:4581
#, 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
+#: ../clients/cli/connections.c:4633 ../clients/cli/connections.c:4731
+#: ../clients/cli/connections.c:4933
msgid "Error: 'master' is required."
msgstr "Помилка: Ñлід вказати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «master»."
-#: ../cli/src/connections.c:4411 ../cli/src/connections.c:4511
-#: ../cli/src/connections.c:4718
+#: ../clients/cli/connections.c:4639 ../clients/cli/connections.c:4737
+#: ../clients/cli/connections.c:4939
#, 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
+#: ../clients/cli/connections.c:4642 ../clients/cli/connections.c:4745
+#: ../clients/cli/connections.c:4942
#, c-format
msgid ""
"Warning: 'type' is currently ignored. We only support ethernet slaves for "
@@ -2109,83 +2340,117 @@ msgstr ""
"поточній верÑÑ–Ñ— підтримку підлеглих інтерфейÑів передбачено лише Ð´Ð»Ñ "
"Ethernet.\n"
-#: ../cli/src/connections.c:4614
+#: ../clients/cli/connections.c:4839
#, c-format
msgid "Error: 'stp': %s."
msgstr "Помилка: «stp»: %s."
-#: ../cli/src/connections.c:4748
+#: ../clients/cli/connections.c:4969
#, c-format
msgid "Error: 'hairpin': %s."
msgstr "Помилка: «hairpin»: %s."
-#: ../cli/src/connections.c:4801
+#: ../clients/cli/connections.c:5022
msgid "Error: 'vpn-type' is required."
msgstr "Помилка: Ñлід вказати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «vpn-type»."
-#: ../cli/src/connections.c:4808
+#: ../clients/cli/connections.c:5029
#, 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
+#: ../clients/cli/connections.c:5090
#, c-format
msgid "Error: 'channel': '%s' is not valid; use <1-13>."
msgstr ""
"Помилка: «channel»: «%s» Ñ” некоректним; Ñлід викориÑтовувати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð· "
"діапазону <1-13>."
-#: ../cli/src/connections.c:4905
+#: ../clients/cli/connections.c:5122
#, c-format
msgid "Error: '%s' is not a valid connection type."
msgstr "Помилка: «%s» не Ñ” коректним типом з’єднаннÑ."
-#: ../cli/src/connections.c:5003
+#: ../clients/cli/connections.c:5165
+#, c-format
+msgid "Error: IPv4 gateway specified without IPv4 addresses"
+msgstr "Помилка: шлюз IPv4 вказано без Ð°Ð´Ñ€ÐµÑ IPv4"
+
+#: ../clients/cli/connections.c:5169
+#, c-format
+#| msgid "Error: no valid parameter specified."
+msgid "Error: multiple IPv4 gateways specified"
+msgstr "Помилка: вказано декілька шлюзів IPv4"
+
+#: ../clients/cli/connections.c:5173
+#, c-format
+#| msgid "invalid gateway '%s'"
+msgid "Error: Invalid IPv4 gateway '%s'"
+msgstr "Помилка: некоректний шлюз IPv4, «%s»"
+
+#: ../clients/cli/connections.c:5197
+#, c-format
+msgid "Error: IPv6 gateway specified without IPv6 addresses"
+msgstr "Помилка: шлюз IPv6 вказано без Ð°Ð´Ñ€ÐµÑ IPv6"
+
+#: ../clients/cli/connections.c:5201
+#, c-format
+#| msgid "Error: no valid parameter specified."
+msgid "Error: multiple IPv6 gateways specified"
+msgstr "Помилка: вказано декілька шлюзів IPv6"
+
+#: ../clients/cli/connections.c:5205
#, c-format
-msgid "Error: Failed to add '%s' connection: (%d) %s"
-msgstr "Помилка: не вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s»: (%d) %s"
+#| msgid "invalid gateway '%s'"
+msgid "Error: Invalid IPv6 gateway '%s'"
+msgstr "Помилка: некоректний шлюз IPv6, «%s»"
+
+#: ../clients/cli/connections.c:5265
+#, c-format
+#| msgid "Error: Failed to add '%s' connection: (%d) %s"
+msgid "Error: Failed to add '%s' connection: %s"
+msgstr "Помилка: не вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s»: %s"
-#: ../cli/src/connections.c:5007
+#: ../clients/cli/connections.c:5270
#, c-format
msgid "Connection '%s' (%s) successfully added.\n"
msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s» (%s) уÑпішно додано.\n"
-#: ../cli/src/connections.c:5221
+#: ../clients/cli/connections.c:5490
#, c-format
msgid "Error: 'type' argument is required."
msgstr "Помилка: Ñлід вказати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«type»."
-#: ../cli/src/connections.c:5229
+#: ../clients/cli/connections.c:5498
#, c-format
msgid "Error: invalid connection type; %s."
msgstr "Помилка: некоректний тип з’єднаннÑ; %s."
-#: ../cli/src/connections.c:5238
+#: ../clients/cli/connections.c:5507
#, c-format
msgid "Error: 'autoconnect': %s."
msgstr "Помилка: «autoconnect»: %s."
-#: ../cli/src/connections.c:5248
+#: ../clients/cli/connections.c:5517
#, c-format
msgid "Error: 'save': %s."
msgstr "Помилка: «save»: %s."
-#: ../cli/src/connections.c:5264
+#: ../clients/cli/connections.c:5533
msgid "Interface name [*]: "
msgstr "Ðазва інтерфейÑу [типово *]: "
-#: ../cli/src/connections.c:5269
+#: ../clients/cli/connections.c:5538
#, c-format
msgid "Error: 'ifname' argument is required."
msgstr "Помилка: Ñлід вказати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«ifname»."
-#: ../cli/src/connections.c:5276
+#: ../clients/cli/connections.c:5545
#, c-format
msgid "Error: 'ifname': '%s' is not a valid interface nor '*'."
msgstr "Помилка: «ifname»: «%s» не Ñ” коректним інтерфейÑом Ñ– не дорівнює «*»."
-#: ../cli/src/connections.c:6064
+#: ../clients/cli/connections.c:6321
#, c-format
msgid "['%s' setting values]\n"
msgstr "['%s' Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°]\n"
@@ -2193,7 +2458,7 @@ msgstr "['%s' Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°]\n"
#. TRANSLATORS: do not translate command names and keywords before ::
#. * However, you should translate terms enclosed in <>.
#.
-#: ../cli/src/connections.c:6146
+#: ../clients/cli/connections.c:6403
#, c-format
#| msgid ""
#| "---[ Main menu ]---\n"
@@ -2202,7 +2467,7 @@ msgstr "['%s' Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°]\n"
#| "value\n"
#| "set [<setting>.<prop> <value>] :: set property value\n"
#| "describe [<setting>.<prop>] :: describe property\n"
-#| "print [all] :: print the connection\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"
@@ -2218,7 +2483,7 @@ msgid ""
"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"
+"verify [all | fix] :: 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"
@@ -2233,8 +2498,8 @@ msgstr ""
"початкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ–\n"
"set [<парам.>.<влаÑÑ‚.> <знач.>] :: вÑтановити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ–\n"
"describe [<парам.>.<влаÑÑ‚.>] :: показати Ð¾Ð¿Ð¸Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ–\n"
-"print [all| <параметр>[.<влаÑÑ‚.>]] :: вивеÑти дані з’єднаннÑ\n"
-"verify [all] :: перевірити з’єднаннÑ\n"
+"print [all | <парам.>.<влаÑÑ‚.>] :: вивеÑти дані з’єднаннÑ\n"
+"verify [all | fix] :: перевірити з’єднаннÑ\n"
"save [persistent|temporary] :: зберегти з’єднаннÑ\n"
"activate [<інтерфейÑ>] [/<ap>|<nsp>] :: задіÑти з’єднаннÑ\n"
"back :: перейти на рівень вище (назад)\n"
@@ -2242,7 +2507,7 @@ msgstr ""
"nmcli <параметр-налашт.> <знач.> :: Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ nmcli\n"
"quit :: завершити роботу nmcli\n"
-#: ../cli/src/connections.c:6173
+#: ../clients/cli/connections.c:6430
#, c-format
msgid ""
"goto <setting>[.<prop>] | <prop> :: enter setting/property for editing\n"
@@ -2263,7 +2528,7 @@ msgstr ""
" nmcli connection> goto secondaries\n"
" nmcli> goto ipv4.addresses\n"
-#: ../cli/src/connections.c:6180
+#: ../clients/cli/connections.c:6437
#, c-format
msgid ""
"remove <setting>[.<prop>] :: remove setting or reset property value\n"
@@ -2285,7 +2550,7 @@ msgstr ""
"Приклади: nmcli> remove wifi-sec\n"
" nmcli> remove eth.mtu\n"
-#: ../cli/src/connections.c:6187
+#: ../clients/cli/connections.c:6444
#, c-format
msgid ""
"set [<setting>.<prop> <value>] :: set property value\n"
@@ -2301,7 +2566,7 @@ msgstr ""
"\n"
"Приклад: nmcli> s con.id My connection\n"
-#: ../cli/src/connections.c:6192
+#: ../clients/cli/connections.c:6449
#, c-format
msgid ""
"describe [<setting>.<prop>] :: describe property\n"
@@ -2314,7 +2579,7 @@ msgstr ""
"Показує Ð¾Ð¿Ð¸Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ–. СпиÑок уÑÑ–Ñ… параметрів Ñ– влаÑтивоÑтей NM можна "
"знайти на Ñторінці довідника (man) nm-settings(5).\n"
-#: ../cli/src/connections.c:6197
+#: ../clients/cli/connections.c:6454
#, c-format
msgid ""
"print [all] :: print setting or connection values\n"
@@ -2329,27 +2594,40 @@ msgstr ""
"\n"
"Приклад: nmcli ipv4> print all\n"
-#: ../cli/src/connections.c:6202
+#: ../clients/cli/connections.c:6459
#, 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"
msgid ""
-"verify [all] :: verify setting or connection validity\n"
+"verify [all | fix] :: 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"
+"Verifies whether the setting or connection is valid and can be saved later.\n"
+"It indicates invalid values on error. Some errors may be fixed "
+"automatically\n"
+"by 'fix' option.\n"
"\n"
"Examples: nmcli> verify\n"
+" nmcli> verify fix\n"
" nmcli bond> verify\n"
msgstr ""
-"verify [all] :: перевірити чинніÑÑ‚ÑŒ параметра або запиÑу з’єднаннÑ\n"
+"verify [all | fix] :: перевірити чинніÑÑ‚ÑŒ параметра або запиÑу з’єднаннÑ\n"
"\n"
-"ПеревірÑÑ”, чи Ñ” коректним Ð·Ð°Ð¿Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° або Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ– чи можна його "
-"згодом зберегти. Показує ÑпиÑок некоректних значень, Ñкщо було виÑвлено "
-"помилку.\n"
+"ПеревірÑÑ”, чи Ñ” коректним Ð·Ð°Ð¿Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° або Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ– чи можна його \n"
+"згодом зберегти. Показує ÑпиÑок некоректних значень, Ñкщо було виÑвлено \n"
+"помилку. ДеÑкі помилки може бути виправлено автоматично за допомогою \n"
+"параметра «fix».\n"
"\n"
"Приклади: nmcli> verify\n"
+" nmcli> verify fix\n"
" nmcli bond> verify\n"
-#: ../cli/src/connections.c:6209
+#: ../clients/cli/connections.c:6468
#, c-format
msgid ""
"save [persistent|temporary] :: save the connection\n"
@@ -2376,7 +2654,7 @@ msgstr ""
"потрібно\n"
"повніÑÑ‚ÑŽ вилучити поÑтійне з’єднаннÑ, вам доведетьÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ його профіль.\n"
-#: ../cli/src/connections.c:6220
+#: ../clients/cli/connections.c:6479
#, c-format
msgid ""
"activate [<ifname>] [/<ap>|<nsp>] :: activate the connection\n"
@@ -2397,7 +2675,7 @@ msgstr ""
"/<ap>|<nsp> - AP (Wi-Fi) або NSP (WiMAX) (додайте на початку «/», Ñкщо не "
"вказано <інтерфейÑ>)\n"
-#: ../cli/src/connections.c:6227 ../cli/src/connections.c:6384
+#: ../clients/cli/connections.c:6486 ../clients/cli/connections.c:6644
#, c-format
msgid ""
"back :: go to upper menu level\n"
@@ -2406,7 +2684,7 @@ msgstr ""
"back :: піднÑтиÑÑ Ñƒ меню на один рівень\n"
"\n"
-#: ../cli/src/connections.c:6230
+#: ../clients/cli/connections.c:6489
#, c-format
msgid ""
"help/? [<command>] :: help for the nmcli commands\n"
@@ -2415,14 +2693,35 @@ msgstr ""
"help/? [<команда>] :: довідка з команди nmcli\n"
"\n"
-#: ../cli/src/connections.c:6233
+#: ../clients/cli/connections.c:6492
#, 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"
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"
+"show-secrets yes | no [default: no]\n"
"prompt-color <0-8> [default: 0]\n"
" 0 = normal\n"
" 1 = black\n"
@@ -2443,6 +2742,7 @@ msgstr ""
"ÐÐ°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ nmcli. Можна керувати такими параметрами:\n"
"status-line yes | no [типово: no]\n"
"save-confirmation yes | no [типово: yes]\n"
+"show-secrets yes | no [типово: no]\n"
"prompt-color <0-8> [типово: 0]\n"
" 0 = normal\n"
" 1 = чорний\n"
@@ -2458,7 +2758,7 @@ msgstr ""
" nmcli> nmcli save-confirmation no\n"
" nmcli> nmcli prompt-color 3\n"
-#: ../cli/src/connections.c:6253 ../cli/src/connections.c:6390
+#: ../clients/cli/connections.c:6513 ../clients/cli/connections.c:6650
#, c-format
msgid ""
"quit :: exit nmcli\n"
@@ -2472,8 +2772,8 @@ msgstr ""
"Ð·Ð°Ð¿Ð¸Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ було збережено, кориÑтувачеві буде запропоновано "
"підтвердити дію з виходу з програми.\n"
-#: ../cli/src/connections.c:6258 ../cli/src/connections.c:6395
-#: ../cli/src/connections.c:6783 ../cli/src/connections.c:7676
+#: ../clients/cli/connections.c:6518 ../clients/cli/connections.c:6655
+#: ../clients/cli/connections.c:7066 ../clients/cli/connections.c:7982
#, c-format
msgid "Unknown command: '%s'\n"
msgstr "Ðевідома команда «%s».\n"
@@ -2481,7 +2781,7 @@ msgstr "Ðевідома команда «%s».\n"
#. TRANSLATORS: do not translate command names and keywords before ::
#. * However, you should translate terms enclosed in <>.
#.
-#: ../cli/src/connections.c:6324
+#: ../clients/cli/connections.c:6584
#, c-format
msgid ""
"---[ Property menu ]---\n"
@@ -2508,7 +2808,7 @@ msgstr ""
"help/? [<команда>] :: вивеÑти цю довідку або Ð¾Ð¿Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸\n"
"quit :: вийти з nmcli\n"
-#: ../cli/src/connections.c:6349
+#: ../clients/cli/connections.c:6609
#, c-format
msgid ""
"set [<value>] :: set new value\n"
@@ -2520,7 +2820,7 @@ msgstr ""
"За допомогою цієї команди можна змінити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ– на вказане "
"<значеннÑ>\n"
-#: ../cli/src/connections.c:6353
+#: ../clients/cli/connections.c:6613
#, c-format
msgid ""
"add [<value>] :: append new value to the property\n"
@@ -2535,7 +2835,7 @@ msgstr ""
"Ñкщо влаÑтивіÑÑ‚ÑŒ належить до типу контейнерів. Якщо влаÑтивіÑÑ‚ÑŒ ÑкладаєтьÑÑ "
"лише з одного значеннÑ, це Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð±ÑƒÐ´Ðµ замінено (те Ñаме, що Ñ– «set»).\n"
-#: ../cli/src/connections.c:6359
+#: ../clients/cli/connections.c:6619
#, c-format
msgid ""
"change :: change current value\n"
@@ -2546,7 +2846,7 @@ msgstr ""
"\n"
"Показує поточне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ– надає змогу його редагувати.\n"
-#: ../cli/src/connections.c:6363
+#: ../clients/cli/connections.c:6623
#, c-format
msgid ""
"remove [<value>|<index>|<option name>] :: delete the value\n"
@@ -2579,7 +2879,7 @@ msgstr ""
" nmcli bond.options> remove downdelay\n"
"\n"
-#: ../cli/src/connections.c:6374
+#: ../clients/cli/connections.c:6634
#, c-format
msgid ""
"describe :: describe property\n"
@@ -2592,7 +2892,7 @@ msgstr ""
"Показує Ð¾Ð¿Ð¸Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ–. СпиÑок уÑÑ–Ñ… параметрів Ñ– влаÑтивоÑтей NM можна "
"знайти на Ñторінці довідника (man) nm-settings(5).\n"
-#: ../cli/src/connections.c:6379
+#: ../clients/cli/connections.c:6639
#, c-format
msgid ""
"print [property|setting|connection] :: print property (setting, connection) "
@@ -2607,7 +2907,7 @@ msgstr ""
"Виводить Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ–. За допомогою аргументу команди ви можете "
"виводити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÑƒÑього параметра або уÑього запиÑу з’єднаннÑ.\n"
-#: ../cli/src/connections.c:6387
+#: ../clients/cli/connections.c:6647
#, c-format
msgid ""
"help/? [<command>] :: help for nmcli commands\n"
@@ -2616,30 +2916,29 @@ msgstr ""
"help/? [<команда>] :: довідка з команди nmcli\n"
"\n"
-#: ../cli/src/connections.c:6474
+#: ../clients/cli/connections.c:6745
#, c-format
msgid "Error: Connection activation failed.\n"
msgstr "Помилка: невдала Ñпроба активації з’єднаннÑ.\n"
-#: ../cli/src/connections.c:6552
+#: ../clients/cli/connections.c:6828
#, 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
+#: ../clients/cli/connections.c:6846
#, 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
+#: ../clients/cli/connections.c:6882
#, 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
+#: ../clients/cli/connections.c:6927
#, c-format
msgid ""
"The connection profile has been removed from another client. You may type "
@@ -2648,65 +2947,61 @@ msgstr ""
"Профіль Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð±ÑƒÐ»Ð¾ вилучено з іншого клієнта. Ви можете ввеÑти «save» у "
"головному меню, щоб відновити його.\n"
-#: ../cli/src/connections.c:6672 ../cli/src/connections.c:7087
-#: ../cli/src/connections.c:7142
+#: ../clients/cli/connections.c:6949 ../clients/cli/connections.c:7370
+#: ../clients/cli/connections.c:7425
#, 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
+#: ../clients/cli/connections.c:6964 ../clients/cli/connections.c:6986
+#: ../clients/cli/connections.c:7374 ../clients/cli/connections.c:7430
#, c-format
msgid "Error: failed to set '%s' property: %s\n"
msgstr "Помилка: не вдалоÑÑ Ð²Ñтановити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ– «%s»: %s\n"
-#: ../cli/src/connections.c:6699
+#: ../clients/cli/connections.c:6980
#, c-format
msgid "Edit '%s' value: "
msgstr "Ð ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s»: "
-#: ../cli/src/connections.c:6726
+#: ../clients/cli/connections.c:7009
#, c-format
msgid "Error: %s\n"
msgstr "Помилка: %s\n"
-#: ../cli/src/connections.c:6732 ../cli/src/connections.c:7226
-#: ../cli/src/connections.c:7267
+#: ../clients/cli/connections.c:7015 ../clients/cli/connections.c:7509
+#: ../clients/cli/connections.c:7550
#, c-format
msgid "Error: failed to remove value of '%s': %s\n"
msgstr "Помилка: не вдалоÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s»: %s\n"
-#: ../cli/src/connections.c:6753
+#: ../clients/cli/connections.c:7036
#, c-format
msgid "Unknown command argument: '%s'\n"
msgstr "Ðевідомий аргумент команди: «%s»\n"
-#: ../cli/src/connections.c:6879
+#: ../clients/cli/connections.c:7162
#, c-format
msgid "Available settings: %s\n"
msgstr "ДоÑтупні параметри: %s\n"
-#: ../cli/src/connections.c:6888
+#: ../clients/cli/connections.c:7171
#, c-format
msgid "Error: invalid setting name; %s\n"
msgstr "Помилка: некоректна назва параметра; %s\n"
-#: ../cli/src/connections.c:6905
+#: ../clients/cli/connections.c:7188
#, c-format
msgid "Available properties: %s\n"
msgstr "ДоÑтупні влаÑтивоÑÑ‚Ñ–: %s\n"
-#: ../cli/src/connections.c:6913
+#: ../clients/cli/connections.c:7196
#, c-format
msgid "Error: property %s\n"
msgstr "Помилка: влаÑтивіÑÑ‚ÑŒ %s\n"
-#: ../cli/src/connections.c:6954
+#: ../clients/cli/connections.c:7237
#, 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"
@@ -2716,12 +3011,12 @@ msgstr ""
"Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° може призвеÑти до негайного задіÑÐ½Ð½Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ.\n"
"Хочете зберегти запиÑ? %s"
-#: ../cli/src/connections.c:7029
+#: ../clients/cli/connections.c:7312
#, c-format
msgid "You may edit the following settings: %s\n"
msgstr "Можна редагувати такі параметри: %s\n"
-#: ../cli/src/connections.c:7056
+#: ../clients/cli/connections.c:7339
#, c-format
msgid ""
"The connection profile has been removed from another client. You may type "
@@ -2730,216 +3025,237 @@ msgstr ""
"Профіль Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð±ÑƒÐ»Ð¾ вилучено з іншого клієнта. Ви можете ввеÑти «save», "
"щоб відновити його.\n"
-#: ../cli/src/connections.c:7085 ../cli/src/connections.c:7140
+#: ../clients/cli/connections.c:7368 ../clients/cli/connections.c:7423
#, c-format
msgid "Allowed values for '%s' property: %s\n"
msgstr "Можливі Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ– «%s»: %s\n"
-#: ../cli/src/connections.c:7095 ../cli/src/connections.c:7309
+#: ../clients/cli/connections.c:7378 ../clients/cli/connections.c:7592
#, c-format
msgid "Error: no setting selected; valid are [%s]\n"
msgstr ""
"Помилка: не вибрано Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°; коректними значеннÑми Ñ” такі: [%s]\n"
-#: ../cli/src/connections.c:7096
+#: ../clients/cli/connections.c:7379
#, 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
+#: ../clients/cli/connections.c:7393 ../clients/cli/connections.c:7529
+#: ../clients/cli/connections.c:7609
#, c-format
msgid "Error: invalid setting argument '%s'; valid are [%s]\n"
msgstr ""
"Помилка: некоректний аргумент параметра, «%s»; коректними є такі аргументи: "
"[%s]\n"
-#: ../cli/src/connections.c:7120
+#: ../clients/cli/connections.c:7403
#, c-format
msgid "Error: missing setting for '%s' property\n"
msgstr "Помилка: не вказано параметра Ð´Ð»Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ– «%s»\n"
-#: ../cli/src/connections.c:7127
+#: ../clients/cli/connections.c:7410
#, c-format
msgid "Error: invalid property: %s\n"
msgstr "Помилка: некоректна влаÑтивіÑÑ‚ÑŒ: %s\n"
-#: ../cli/src/connections.c:7174
+#: ../clients/cli/connections.c:7457
#, c-format
msgid "Error: unknown setting '%s'\n"
msgstr "Помилка: невідоме Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s»\n"
-#: ../cli/src/connections.c:7187
+#: ../clients/cli/connections.c:7470
#, c-format
msgid "You may edit the following properties: %s\n"
msgstr "Можна редагувати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ‚Ð°ÐºÐ¸Ñ… влаÑтивоÑтей: %s\n"
-#: ../cli/src/connections.c:7231
+#: ../clients/cli/connections.c:7514
#, c-format
msgid "Error: no argument given; valid are [%s]\n"
msgstr "Помилка: не вказано аргументу; коректними аргументами є такі: [%s]\n"
-#: ../cli/src/connections.c:7244
+#: ../clients/cli/connections.c:7527
#, c-format
msgid "Setting '%s' is not present in the connection.\n"
msgstr "У Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½ÐµÐ¼Ð°Ñ” параметра «%s».\n"
-#: ../cli/src/connections.c:7285
+#: ../clients/cli/connections.c:7568
#, c-format
msgid "Error: %s properties, nor it is a setting name.\n"
msgstr "Помилка: влаÑтивоÑÑ‚Ñ– %s Ñ– не Ñ” назвою параметра.\n"
-#: ../cli/src/connections.c:7310
+#: ../clients/cli/connections.c:7593
#, c-format
msgid "use 'goto <setting>' first, or 'describe <setting>.<property>'\n"
msgstr ""
"ÑкориÑтайтеÑÑ Ñпочатку командою «goto <параметр> або командою «describe "
"<параметр>.<влаÑтивіÑÑ‚ÑŒ>»\n"
-#: ../cli/src/connections.c:7351
+#: ../clients/cli/connections.c:7634
#, c-format
msgid "Error: invalid property: %s, neither a valid setting name.\n"
msgstr ""
"Помилка: некоректна влаÑтивіÑÑ‚ÑŒ: %s Ñ– не Ñ” коректною назвою параметра.\n"
-#: ../cli/src/connections.c:7380
+#: ../clients/cli/connections.c:7663
#, c-format
msgid "Error: unknown setting: '%s'\n"
msgstr "Помилка: невідомий параметр: «%s»\n"
-#: ../cli/src/connections.c:7385
+#: ../clients/cli/connections.c:7668
#, 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
+#: ../clients/cli/connections.c:7693
#, 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"
+#: ../clients/cli/connections.c:7695
msgid ", neither a valid setting name"
msgstr ", і не є коректною назвою параметра"
-#: ../cli/src/connections.c:7432
+#: ../clients/cli/connections.c:7712
+#, c-format
+#| msgid "invalid option '%s'"
+msgid "Invalid verify option: %s\n"
+msgstr "Ðекоректний параметр verify: %s\n"
+
+#: ../clients/cli/connections.c:7720
#, c-format
msgid "Verify setting '%s': %s\n"
msgstr "Перевірка параметра «%s»: %s\n"
-#: ../cli/src/connections.c:7439
+#: ../clients/cli/connections.c:7735
#, c-format
msgid "Verify connection: %s\n"
msgstr "Перевірка з’єднаннÑ: %s\n"
-#: ../cli/src/connections.c:7457
+#: ../clients/cli/connections.c:7738
+#, c-format
+msgid "The error cannot be fixed automatically.\n"
+msgstr "Помилку не можна виправити у автоматичному режимі.\n"
+
+#: ../clients/cli/connections.c:7755
#, c-format
msgid "Error: invalid argument '%s'\n"
msgstr "Помилка: некоректний аргумент «%s»\n"
-#: ../cli/src/connections.c:7491
+#: ../clients/cli/connections.c:7788
#, c-format
-msgid "Error: Failed to save '%s' (%s) connection: (%d) %s\n"
-msgstr "Помилка: не вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s» (%s): (%d) %s\n"
+#| msgid "Error: Failed to save '%s' (%s) connection: (%d) %s\n"
+msgid "Error: Failed to save '%s' (%s) connection: %s\n"
+msgstr "Помилка: не вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s» (%s): %s\n"
-#: ../cli/src/connections.c:7499
+#: ../clients/cli/connections.c:7795
#, c-format
msgid "Connection '%s' (%s) successfully saved.\n"
msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s» (%s) уÑпішно збережено.\n"
-#: ../cli/src/connections.c:7500
+#: ../clients/cli/connections.c:7796
#, c-format
msgid "Connection '%s' (%s) successfully updated.\n"
msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s» (%s) уÑпішно оновлено.\n"
-#: ../cli/src/connections.c:7534
+#: ../clients/cli/connections.c:7829
#, c-format
msgid "Error: connection verification failed: %s\n"
msgstr "Помилка: Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ пройшло перевірки: %s\n"
-#: ../cli/src/connections.c:7535
+#: ../clients/cli/connections.c:7830
msgid "(unknown error)"
msgstr "(невідома помилка)"
-#: ../cli/src/connections.c:7556
+#: ../clients/cli/connections.c:7831
+#, c-format
+msgid "You may try running 'verify fix' to fix errors.\n"
+msgstr "Ви можете Ñпробувати запуÑтити «verify fix» Ð´Ð»Ñ Ð²Ð¸Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¼Ð¸Ð»Ð¾Ðº.\n"
+
+#: ../clients/cli/connections.c:7853
#, c-format
msgid "Error: connection is not saved. Type 'save' first.\n"
msgstr "Помилка: Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ збережено. Спочатку введіть «save».\n"
-#: ../cli/src/connections.c:7560
+#: ../clients/cli/connections.c:7857
#, c-format
msgid "Error: connection is not valid: %s\n"
msgstr "Помилка: некоректне з’єднаннÑ: %s\n"
-#: ../cli/src/connections.c:7571
+#: ../clients/cli/connections.c:7867
#, c-format
msgid "Error: Cannot activate connection: %s.\n"
msgstr "Помилка: не вдалоÑÑ Ð·Ð°Ð´Ñ–Ñти з’єднаннÑ: %s.\n"
-#: ../cli/src/connections.c:7581
+#: ../clients/cli/connections.c:7877
#, c-format
-msgid "Error: Failed to activate '%s' (%s) connection: (%d) %s\n"
-msgstr "Помилка: не вдалоÑÑ Ð·Ð°Ð´Ñ–Ñти Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s» (%s): (%d) %s\n"
+#| msgid "Error: Failed to activate '%s' (%s) connection: (%d) %s\n"
+msgid "Error: Failed to activate '%s' (%s) connection: %s\n"
+msgstr "Помилка: не вдалоÑÑ Ð·Ð°Ð´Ñ–Ñти Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s» (%s): %s\n"
-#: ../cli/src/connections.c:7587
+#: ../clients/cli/connections.c:7883
#, c-format
msgid "Monitoring connection activation (press any key to continue)\n"
msgstr ""
"СпоÑтерігаємо за активацією Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ (натиÑніть будь-Ñку клавішу, щоб "
"продовжити)\n"
-#: ../cli/src/connections.c:7625
+#: ../clients/cli/connections.c:7921
#, c-format
msgid "Error: status-line: %s\n"
msgstr "Помилка: Ñ€Ñдок Ñтану: %s\n"
-#: ../cli/src/connections.c:7633
+#: ../clients/cli/connections.c:7929
#, c-format
msgid "Error: save-confirmation: %s\n"
msgstr "Помилка: save-confirmation: %s\n"
-#: ../cli/src/connections.c:7641
+#: ../clients/cli/connections.c:7937
+#, c-format
+#| msgid "Error: 'show active': %s"
+msgid "Error: show-secrets: %s\n"
+msgstr "Помилка: show-secrets: %s\n"
+
+#: ../clients/cli/connections.c:7945
#, c-format
msgid "Error: bad color number: '%s'; use <0-8>\n"
msgstr ""
"Помилковий номер кольору: «%s»; Ñлід викориÑтовувати номери з діапазону "
"<0-8>\n"
-#: ../cli/src/connections.c:7653
+#: ../clients/cli/connections.c:7957
#, c-format
msgid "Current nmcli configuration:\n"
msgstr "Поточне Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ nmcli:\n"
-#: ../cli/src/connections.c:7661
+#: ../clients/cli/connections.c:7967
#, c-format
msgid "Invalid configuration option '%s'; allowed [%s]\n"
msgstr ""
"Ðекоректний параметр налаштуваннÑ, «%s»; можна викориÑтовувати лише такі: "
"[%s]\n"
-#: ../cli/src/connections.c:7904
+#: ../clients/cli/connections.c:8214
#, 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
+#: ../clients/cli/connections.c:8226 ../clients/cli/connections.c:8413
+#: ../clients/cli/connections.c:8420
#, c-format
msgid "Error: Unknown connection '%s'."
msgstr "Помилка: невідоме з’єднаннÑ, «%s»."
-#: ../cli/src/connections.c:7931
+#: ../clients/cli/connections.c:8244
#, c-format
msgid "Warning: editing existing connection '%s'; 'type' argument is ignored\n"
msgstr ""
"ПопередженнÑ: Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¶Ðµ Ñтвореного запиÑу Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s»; аргумент "
"«type» проігноровано\n"
-#: ../cli/src/connections.c:7934
+#: ../clients/cli/connections.c:8247
#, c-format
msgid ""
"Warning: editing existing connection '%s'; 'con-name' argument is ignored\n"
@@ -2947,420 +3263,468 @@ msgstr ""
"ПопередженнÑ: Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¶Ðµ Ñтвореного запиÑу Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s»; аргумент "
"«con-name» проігноровано\n"
-#: ../cli/src/connections.c:7948
+#: ../clients/cli/connections.c:8261
#, c-format
msgid "Valid connection types: %s\n"
msgstr "Коректні типи з’єднань: %s\n"
-#: ../cli/src/connections.c:7950
+#: ../clients/cli/connections.c:8263
#, c-format
msgid "Error: invalid connection type; %s\n"
msgstr "Помилка: некоректний тип з’єднаннÑ; %s\n"
-#: ../cli/src/connections.c:7989
+#: ../clients/cli/connections.c:8302
#, c-format
msgid "===| nmcli interactive connection editor |==="
msgstr "===| Інтерактивний редактор з’єднань nmcli |==="
-#: ../cli/src/connections.c:7992
+#: ../clients/cli/connections.c:8305
#, c-format
msgid "Editing existing '%s' connection: '%s'"
msgstr "Ð ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð°Ñвного Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s»: «%s»"
-#: ../cli/src/connections.c:7994
+#: ../clients/cli/connections.c:8307
#, c-format
msgid "Adding a new '%s' connection"
msgstr "Ð”Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s»"
-#: ../cli/src/connections.c:7996
+#: ../clients/cli/connections.c:8309
#, c-format
msgid "Type 'help' or '?' for available commands."
msgstr "Введіть «help» або «?», щоб ознайомитиÑÑ Ð·Ñ– ÑпиÑком доÑтупних команд."
-#: ../cli/src/connections.c:7998
+#: ../clients/cli/connections.c:8311
#, c-format
msgid "Type 'describe [<setting>.<prop>]' for detailed property description."
msgstr ""
"Щоб ознайомитиÑÑ Ð· докладним опиÑом влаÑтивоÑÑ‚Ñ–, ÑкориÑтайтеÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾ÑŽ "
"«describe [<параметр>.<влаÑтивіÑÑ‚ÑŒ>]."
-#: ../cli/src/connections.c:8034
+#: ../clients/cli/connections.c:8349
#, c-format
-msgid "Error: Failed to modify connection '%s': (%d) %s"
-msgstr "Помилка: не вдалоÑÑ Ð²Ð½ÐµÑти зміни до запиÑу Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s»: (%d) %s"
+#| msgid "Error: Failed to modify connection '%s': (%d) %s"
+msgid "Error: Failed to modify connection '%s': %s"
+msgstr "Помилка: не вдалоÑÑ Ð²Ð½ÐµÑти зміни до запиÑу Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s»: %s"
-#: ../cli/src/connections.c:8040
+#: ../clients/cli/connections.c:8356
#, c-format
msgid "Connection '%s' (%s) successfully modified.\n"
msgstr "Зміни до Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s» (%s) уÑпішно внеÑено.\n"
-#: ../cli/src/connections.c:8081
+#: ../clients/cli/connections.c:8388
#, c-format
msgid "Error: No arguments provided."
msgstr "Помилка: не надано аргументів."
-#: ../cli/src/connections.c:8100
+#: ../clients/cli/connections.c:8407
#, c-format
msgid "Error: connection ID is missing."
msgstr "Помилка: не вказано ідентифікатора з’єднаннÑ."
-#: ../cli/src/connections.c:8122 ../cli/src/connections.c:8135
+#: ../clients/cli/connections.c:8429 ../clients/cli/connections.c:8442
#, c-format
msgid "Error: <setting>.<property> argument is missing."
msgstr "Помилка: пропущено аргумент <параметр>.<влаÑтивіÑÑ‚ÑŒ>."
-#: ../cli/src/connections.c:8140
+#: ../clients/cli/connections.c:8447
#, c-format
msgid "Error: value for '%s' is missing."
msgstr "Помилка: не вказано Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s»."
-#: ../cli/src/connections.c:8158
+#: ../clients/cli/connections.c:8465
#, c-format
msgid "Error: invalid <setting>.<property> '%s'."
msgstr "Помилка: некоректний аргумент <параметр>.<влаÑтивіÑÑ‚ÑŒ>, «%s»."
-#: ../cli/src/connections.c:8166
+#: ../clients/cli/connections.c:8473
#, c-format
msgid "Error: invalid or not allowed setting '%s': %s."
msgstr "Помилка: некоректний або заборонений параметр, «%s»: %s."
-#: ../cli/src/connections.c:8187
+#: ../clients/cli/connections.c:8494
#, c-format
msgid "Error: invalid property '%s': %s."
msgstr "Помилка: некоректна влаÑтивіÑÑ‚ÑŒ, «%s»: %s."
-#: ../cli/src/connections.c:8198
+#: ../clients/cli/connections.c:8505
#, c-format
msgid "Error: failed to modify %s.%s: %s."
msgstr "Помилка: не вдалоÑÑ Ð²Ð½ÐµÑти зміни до %s.%s: %s."
-#: ../cli/src/connections.c:8216
+#: ../clients/cli/connections.c:8523
#, c-format
msgid "Error: failed to remove a value from %s.%s: %s."
msgstr "Помилка: не вдалоÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð· %s.%s: %s."
-#: ../cli/src/connections.c:8252
+#: ../clients/cli/connections.c:8560
#, c-format
msgid "Error: Connection deletion failed: %s"
msgstr "Помилка: не вдалоÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ з’єднаннÑ: %s"
-#: ../cli/src/connections.c:8323
+#: ../clients/cli/connections.c:8624
#, c-format
msgid "Error: unknown connection: %s\n"
msgstr "Помилка: невідоме з’єднаннÑ: %s\n"
#. truncate trailing ", "
-#: ../cli/src/connections.c:8359
+#: ../clients/cli/connections.c:8661
#, c-format
msgid "Error: cannot delete unknown connection(s): %s."
msgstr "Помилка: не можна вилучати невідомі з’єднаннÑ: %s."
-#: ../cli/src/connections.c:8430
+#: ../clients/cli/connections.c:8684
#, c-format
-msgid "Could not load file '%s'\n"
-msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ файл «%s»\n"
+#| msgid "Error: Failed to add '%s' connection: (%d) %s"
+msgid "Error: failed to reload connections: %s."
+msgstr "Помилка: не вдалоÑÑ Ð¿ÐµÑ€ÐµÐ·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ з’єднаннÑ: %s."
-#: ../cli/src/connections.c:8615
+#: ../clients/cli/connections.c:8723
#, c-format
-msgid "Error: '%s' is not valid 'connection' command."
-msgstr "Помилка: «%s» не є коректною командою набору «connection»."
+#| msgid "Error: Failed to add '%s' connection: (%d) %s"
+msgid "Error: failed to load connection: %s."
+msgstr "Помилка: не вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ з’єднаннÑ: %s."
-#: ../cli/src/connections.c:8684 ../cli/src/network-manager.c:615
+#: ../clients/cli/connections.c:8731
#, c-format
-msgid "Error: Could not get system settings."
-msgstr "Помилка: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ параметри ÑиÑтеми."
+msgid "Could not load file '%s'\n"
+msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ файл «%s»\n"
-#: ../cli/src/connections.c:8694
+#: ../clients/cli/connections.c:8907
#, c-format
-msgid "Error: Can't obtain connections: settings service is not running."
-msgstr ""
-"Помилка: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ ÑпиÑок з’єднань: Ñлужба параметрів не працює."
+msgid "Error: '%s' is not valid 'connection' command."
+msgstr "Помилка: «%s» не є коректною командою набору «connection»."
#. define some prompts
-#: ../cli/src/devices.c:70
+#: ../clients/cli/devices.c:38
msgid "Interface: "
msgstr "ІнтерфейÑ: "
#. 3
-#. 16
-#: ../cli/src/devices.c:78 ../cli/src/devices.c:106
+#. 17
+#: ../clients/cli/devices.c:46 ../clients/cli/devices.c:75
msgid "CONNECTION"
msgstr "З’ЄДÐÐÐÐЯ"
#. 4
-#. 17
-#: ../cli/src/devices.c:79 ../cli/src/devices.c:107
+#. 18
+#: ../clients/cli/devices.c:47 ../clients/cli/devices.c:76
msgid "CON-UUID"
msgstr "CON-UUID"
#. 2
-#: ../cli/src/devices.c:92
+#: ../clients/cli/devices.c:60
msgid "VENDOR"
msgstr "ВИРОБÐИК"
#. 3
-#: ../cli/src/devices.c:93
+#: ../clients/cli/devices.c:61
msgid "PRODUCT"
msgstr "ПРОДУКТ"
#. 4
-#: ../cli/src/devices.c:94
+#: ../clients/cli/devices.c:62
msgid "DRIVER"
msgstr "ДРÐЙВЕР"
#. 5
-#: ../cli/src/devices.c:95
+#: ../clients/cli/devices.c:63
msgid "DRIVER-VERSION"
msgstr "ВЕРСІЯ-ДРÐЙВЕРÐ"
#. 6
-#: ../cli/src/devices.c:96
+#: ../clients/cli/devices.c:64
msgid "FIRMWARE-VERSION"
msgstr "ВЕРСІЯ-МІКРОПРОГРÐМИ"
#. 7
-#: ../cli/src/devices.c:97
+#: ../clients/cli/devices.c:65
msgid "HWADDR"
msgstr "ÐП.ÐДРЕСÐ"
#. 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
+#: ../clients/cli/devices.c:66 ../clients/tui/nmt-page-ethernet.c:86
+#: ../clients/tui/nmt-page-infiniband.c:97 ../clients/tui/nmt-page-vlan.c:131
+#: ../clients/tui/nmt-page-wifi.c:373
msgid "MTU"
msgstr "MTU"
#. 10
-#: ../cli/src/devices.c:100
+#: ../clients/cli/devices.c:68
msgid "REASON"
msgstr "ПРИЧИÐÐ"
#. 11
-#: ../cli/src/devices.c:101
+#: ../clients/cli/devices.c:69
msgid "UDI"
msgstr "UDI"
#. 12
-#: ../cli/src/devices.c:102
+#: ../clients/cli/devices.c:70
msgid "IP-IFACE"
msgstr "IP-IFACE"
#. 13
-#: ../cli/src/devices.c:103
+#. 2
+#: ../clients/cli/devices.c:71 ../clients/cli/devices.c:99
+msgid "IS-SOFTWARE"
+msgstr "Є-ПРОГРÐÐœÐИМ"
+
+#. 14
+#: ../clients/cli/devices.c:72
msgid "NM-MANAGED"
msgstr "КЕРОВÐÐЕ-NM"
-#. 15
-#: ../cli/src/devices.c:105
+#. 16
+#: ../clients/cli/devices.c:74
msgid "FIRMWARE-MISSING"
msgstr "ПОТРІБÐИЙ-МІКРОКОД"
#. 0
-#: ../cli/src/devices.c:118
+#: ../clients/cli/devices.c:87
msgid "AVAILABLE-CONNECTION-PATHS"
msgstr "ДОСТУПÐІ-ШЛЯХИ-З’ЄДÐÐÐÐЯ"
#. 1
-#: ../cli/src/devices.c:119
+#: ../clients/cli/devices.c:88
msgid "AVAILABLE-CONNECTIONS"
msgstr "ДОСТУПÐІ-З’ЄДÐÐÐÐЯ"
#. 0
-#: ../cli/src/devices.c:128
+#: ../clients/cli/devices.c:97
msgid "CARRIER-DETECT"
msgstr "ВИЗÐ.ÐОСІЯ"
#. 1
-#: ../cli/src/devices.c:129
+#: ../clients/cli/devices.c:98
msgid "SPEED"
msgstr "ШВИДКІСТЬ"
#. 0
-#: ../cli/src/devices.c:138
+#: ../clients/cli/devices.c:108
msgid "CARRIER"
msgstr "ÐОСІЙ"
#. 0
-#: ../cli/src/devices.c:147 ../cli/src/devices.c:568
+#: ../clients/cli/devices.c:117 ../clients/cli/devices.c:547
msgid "WEP"
msgstr "WEP"
#. 1
-#: ../cli/src/devices.c:148
+#: ../clients/cli/devices.c:118
msgid "WPA"
msgstr "WPA"
#. 2
-#: ../cli/src/devices.c:149 ../cli/src/devices.c:576
+#: ../clients/cli/devices.c:119 ../clients/cli/devices.c:555
msgid "WPA2"
msgstr "WPA2"
#. 3
-#: ../cli/src/devices.c:150
+#: ../clients/cli/devices.c:120
msgid "TKIP"
msgstr "TKIP"
#. 4
-#: ../cli/src/devices.c:151
+#: ../clients/cli/devices.c:121
msgid "CCMP"
msgstr "CCMP"
#. 5
#. 2
-#: ../cli/src/devices.c:152 ../cli/src/devices.c:242
+#: ../clients/cli/devices.c:122 ../clients/cli/devices.c:221
msgid "AP"
msgstr "ТД"
#. 6
-#: ../cli/src/devices.c:153
+#: ../clients/cli/devices.c:123
msgid "ADHOC"
msgstr "ADHOC"
#. 0
-#: ../cli/src/devices.c:162
+#: ../clients/cli/devices.c:132
msgid "CTR-FREQ"
msgstr "CTR-FREQ"
#. 1
-#: ../cli/src/devices.c:163
+#: ../clients/cli/devices.c:133
msgid "RSSI"
msgstr "RSSI"
#. 2
-#: ../cli/src/devices.c:164
+#: ../clients/cli/devices.c:134
msgid "CINR"
msgstr "CINR"
#. 3
-#: ../cli/src/devices.c:165
+#: ../clients/cli/devices.c:135
msgid "TX-POW"
msgstr "TX-POW"
#. 4
-#: ../cli/src/devices.c:166
+#: ../clients/cli/devices.c:136
msgid "BSID"
msgstr "BSID"
#. 0
-#: ../cli/src/devices.c:175 ../tui/nmt-page-wifi.c:221
+#: ../clients/cli/devices.c:145 ../clients/tui/nmt-page-wifi.c:227
msgid "SSID"
msgstr "SSID"
#. 1
-#: ../cli/src/devices.c:176
+#: ../clients/cli/devices.c:146
msgid "SSID-HEX"
msgstr "SSID-HEX"
#. 2
-#: ../cli/src/devices.c:177 ../tui/nmt-page-wifi.c:352
+#: ../clients/cli/devices.c:147 ../clients/tui/nmt-page-wifi.c:361
msgid "BSSID"
msgstr "BSSID"
#. 3
-#: ../cli/src/devices.c:178
+#: ../clients/cli/devices.c:148
msgid "MODE"
msgstr "РЕЖИМ"
#. 4
-#: ../cli/src/devices.c:179
+#: ../clients/cli/devices.c:149
msgid "CHAN"
msgstr "КÐÐÐЛ"
#. 5
-#: ../cli/src/devices.c:180
+#: ../clients/cli/devices.c:150
msgid "FREQ"
msgstr "ЧÐСТОТÐ"
#. 6
-#: ../cli/src/devices.c:181
+#: ../clients/cli/devices.c:151
msgid "RATE"
msgstr "ШВИДКІСТЬ"
#. 7
#. 1
-#: ../cli/src/devices.c:182 ../cli/src/devices.c:202
+#: ../clients/cli/devices.c:152 ../clients/cli/devices.c:172
msgid "SIGNAL"
msgstr "СИГÐÐЛ"
#. 8
-#: ../cli/src/devices.c:183
+#: ../clients/cli/devices.c:153
msgid "BARS"
msgstr "ГРÐФ"
#. 9
-#: ../cli/src/devices.c:184
+#: ../clients/cli/devices.c:154
msgid "SECURITY"
msgstr "ЗÐХИСТ"
#. 10
-#: ../cli/src/devices.c:185
+#: ../clients/cli/devices.c:155
msgid "WPA-FLAGS"
msgstr "ПРÐПОРЦІ WPA"
#. 11
-#: ../cli/src/devices.c:186
+#: ../clients/cli/devices.c:156
msgid "RSN-FLAGS"
msgstr "ПРÐПОРЦІ RSN"
#. 14
-#: ../cli/src/devices.c:189
+#: ../clients/cli/devices.c:159
msgid "*"
msgstr "*"
#. 0
#. 5
-#: ../cli/src/devices.c:201 ../cli/src/devices.c:245
+#: ../clients/cli/devices.c:171 ../clients/cli/devices.c:224
msgid "NSP"
msgstr "NSP"
#. 0
-#: ../cli/src/devices.c:216
+#: ../clients/cli/devices.c:186
msgid "SLAVES"
msgstr "SLAVES"
#. 0
-#: ../cli/src/devices.c:225
+#: ../clients/cli/devices.c:195
msgid "ID"
msgstr "Ід"
#. 0
-#: ../cli/src/devices.c:240
+#: ../clients/cli/devices.c:204 ../clients/cli/devices.c:219
msgid "CAPABILITIES"
msgstr "МОЖЛИВОСТІ"
#. 1
-#: ../cli/src/devices.c:241
+#: ../clients/cli/devices.c:220
msgid "WIFI-PROPERTIES"
msgstr "ПÐРÐМЕТРИ WIFI"
#. 3
-#: ../cli/src/devices.c:243
+#: ../clients/cli/devices.c:222
msgid "WIRED-PROPERTIES"
msgstr "ПÐРÐМЕТРИ WIRED"
#. 4
-#: ../cli/src/devices.c:244
+#: ../clients/cli/devices.c:223
msgid "WIMAX-PROPERTIES"
msgstr "ПÐРÐМЕТРИ WIMAX"
#. 10
-#: ../cli/src/devices.c:250 ../tui/nmt-page-bond.c:73
+#: ../clients/cli/devices.c:229 ../clients/tui/nmt-page-bond.c:354
msgid "BOND"
msgstr "BOND"
+#. 11
+#: ../clients/cli/devices.c:230 ../clients/tui/nmt-page-team.c:148
+msgid "TEAM"
+msgstr "КОМÐÐДÐ"
+
#. 12
-#: ../cli/src/devices.c:252
+#: ../clients/cli/devices.c:231 ../clients/tui/nmt-page-bridge.c:77
+msgid "BRIDGE"
+msgstr "МІСТОК"
+
+#. 14
+#: ../clients/cli/devices.c:233
+msgid "BLUETOOTH"
+msgstr "BLUETOOTH"
+
+#. 15
+#: ../clients/cli/devices.c:234
msgid "CONNECTIONS"
msgstr "З’ЄДÐÐÐÐЯ"
-#: ../cli/src/devices.c:277
+#: ../clients/cli/devices.c:258
#, c-format
+#| msgid ""
+#| "Usage: nmcli device { COMMAND | help }\n"
+#| "\n"
+#| "COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
+#| "\n"
+#| "COMMAND := { status | show | connect | disconnect | wifi }\n"
+#| "\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"
+#| " wimax [list [ifname <ifname>] [nsp <name>]]\n"
+#| "\n"
msgid ""
"Usage: nmcli device { COMMAND | help }\n"
"\n"
-"COMMAND := { status | show | connect | disconnect | wifi | wimax }\n"
+"COMMAND := { status | show | connect | disconnect | delete | wifi | wimax }\n"
"\n"
-"COMMAND := { status | show | connect | disconnect | wifi }\n"
+"COMMAND := { status | show | connect | disconnect | delete | wifi }\n"
"\n"
" status\n"
"\n"
@@ -3370,6 +3734,8 @@ msgid ""
"\n"
" disconnect <ifname>\n"
"\n"
+" delete <ifname>\n"
+"\n"
" wifi [list [ifname <ifname>] [bssid <BSSID>]]\n"
"\n"
" wifi connect <(B)SSID> [password <password>] [wep-key-type key|phrase] "
@@ -3383,9 +3749,10 @@ msgid ""
msgstr ""
"КориÑтуваннÑ: nmcli приÑтрій { КОМÐÐДР| help }\n"
"\n"
-" КОМÐÐДР:= { status | show | connect | disconnect | wifi | wimax }\n"
+" КОМÐÐДР:= { status | show | connect | disconnect | delete | wifi | wimax "
+"}\n"
"\n"
-" КОМÐÐДР:= { status | show | connect | disconnect | wifi }\n"
+" КОМÐÐДР:= { status | show | connect | disconnect | delete | wifi }\n"
"\n"
" status\n"
"\n"
@@ -3395,6 +3762,8 @@ msgstr ""
"\n"
" disconnect <інтерфейÑ> [--nowait] [--timeout <очікуваннÑ>]\n"
"\n"
+" delete <інтерфейÑ>\n"
+"\n"
" wifi [list [iface <інтерфейÑ>] [bssid <BSSID>]]\n"
"\n"
" wifi connect <(B)SSID> [password <пароль>] [wep-key-type key|phrase] "
@@ -3406,7 +3775,7 @@ msgstr ""
" wimax [list [ifname <назва інтерфейÑу>] [nsp <назва>]]\n"
"\n"
-#: ../cli/src/devices.c:301
+#: ../clients/cli/devices.c:282
#, c-format
msgid ""
"Usage: nmcli device status { help }\n"
@@ -3437,7 +3806,7 @@ msgstr ""
"device status».\n"
"\n"
-#: ../cli/src/devices.c:317
+#: ../clients/cli/devices.c:297
#, c-format
msgid ""
"Usage: nmcli device show { ARGUMENTS | help }\n"
@@ -3457,7 +3826,7 @@ msgstr ""
"аргументу приÑтрою.\n"
"\n"
-#: ../cli/src/devices.c:329
+#: ../clients/cli/devices.c:308
#, c-format
msgid ""
"Usage: nmcli device connect { ARGUMENTS | help }\n"
@@ -3481,7 +3850,7 @@ msgstr ""
"з’єднаннÑ.\n"
"\n"
-#: ../cli/src/devices.c:342
+#: ../clients/cli/devices.c:320
#, c-format
msgid ""
"Usage: nmcli device disconnect { ARGUMENTS | help }\n"
@@ -3502,7 +3871,38 @@ msgstr ""
"повторну активацію Ð´Ð»Ñ Ð¿Ð¾Ð´Ð°Ð»ÑŒÑˆÐ¸Ñ… з’єднань без ручного втручаннÑ.\n"
"\n"
-#: ../cli/src/devices.c:355
+#: ../clients/cli/devices.c:332
+#, 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"
+msgid ""
+"Usage: nmcli device delete { ARGUMENTS | help }\n"
+"\n"
+"ARGUMENTS := <ifname>\n"
+"\n"
+"Deletes the software device.\n"
+"The command removes the interface. It only works for software devices\n"
+"(like bonds, bridges, etc.). Hardware devices cannot be deleted by the\n"
+"command.\n"
+"\n"
+msgstr ""
+"Usage: nmcli device delete { ÐРГУМЕÐТИ | help }\n"
+"\n"
+"ÐРГУМЕÐТИ := <інтерфейÑ>\n"
+"\n"
+"Вилучити програмний приÑтрій.\n"
+"Команда вилучає інтерфейÑ. Працює лише Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ð¸Ñ… приÑтроїв\n"
+"(зокрема зв’Ñзків, міÑтків тощо). Ðпаратні приÑтрої не можна вилучати\n"
+"за допомогою цієї команди.\n"
+"\n"
+
+#: ../clients/cli/devices.c:345
#, c-format
msgid ""
"Usage: nmcli device wifi { ARGUMENTS | help }\n"
@@ -3575,7 +3975,7 @@ msgstr ""
"ÑкориÑтатиÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾ÑŽ «nmcli device wifi list».\n"
"\n"
-#: ../cli/src/devices.c:389
+#: ../clients/cli/devices.c:378
#, c-format
msgid ""
"Usage: nmcli device wimax { ARGUMENTS | help }\n"
@@ -3599,199 +3999,219 @@ msgstr ""
"Ð´Ð»Ñ Ð¿ÐµÐ²Ð½Ð¾Ð³Ð¾ інтерфейÑу або певної Ñлужби Ð½Ð°Ð´Ð°Ð½Ð½Ñ Ð¿Ð¾Ñлуг.\n"
"\n"
-#: ../cli/src/devices.c:483
+#: ../clients/cli/devices.c:467 ../clients/cli/devices.c:658
msgid "(none)"
msgstr "(немає)"
-#: ../cli/src/devices.c:552
+#: ../clients/cli/devices.c:535
#, c-format
msgid "%u MHz"
msgstr "%u МГц"
-#: ../cli/src/devices.c:553
+#: ../clients/cli/devices.c:536
#, c-format
msgid "%u Mbit/s"
msgstr "%u МБ/Ñ"
-#: ../cli/src/devices.c:572
+#: ../clients/cli/devices.c:551
msgid "WPA1"
msgstr "WPA1"
-#: ../cli/src/devices.c:581
+#: ../clients/cli/devices.c:560
msgid "802.1X"
msgstr "802.1X"
-#: ../cli/src/devices.c:597
+#: ../clients/cli/devices.c:576
msgid "Ad-Hoc"
msgstr "Ad-Hoc"
-#: ../cli/src/devices.c:598
+#: ../clients/cli/devices.c:577
msgid "Infra"
msgstr "ІнфраÑтруктура"
-#: ../cli/src/devices.c:630
+#: ../clients/cli/devices.c:578
+msgid "N/A"
+msgstr "н/д"
+
+#: ../clients/cli/devices.c:609
msgid "Home"
msgstr "Домівка"
-#: ../cli/src/devices.c:633
+#: ../clients/cli/devices.c:612
msgid "Partner"
msgstr "Партнер"
-#: ../cli/src/devices.c:636
+#: ../clients/cli/devices.c:615
msgid "Roaming"
msgstr "Роумінг"
-#: ../cli/src/devices.c:730
+#: ../clients/cli/devices.c:773
msgid "Device details"
msgstr "Дані щодо приÑтрою"
-#: ../cli/src/devices.c:742
+#: ../clients/cli/devices.c:785
#, 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
+#: ../clients/cli/devices.c:836 ../clients/cli/devices.c:839
msgid "(unknown)"
msgstr "(невідомо)"
-#: ../cli/src/devices.c:832
+#: ../clients/cli/devices.c:877
#, c-format
msgid "%u Mb/s"
msgstr "%u Мб/Ñ"
-#: ../cli/src/devices.c:918
+#: ../clients/cli/devices.c:963
msgid "on"
msgstr "увімкн."
-#: ../cli/src/devices.c:918
+#: ../clients/cli/devices.c:963
msgid "off"
msgstr "вимкн."
-#: ../cli/src/devices.c:1193
+#: ../clients/cli/devices.c:1235
#, c-format
msgid "Error: 'device status': %s"
msgstr "Помилка: «device status»: %s"
#. Add headers
-#: ../cli/src/devices.c:1211
+#: ../clients/cli/devices.c:1242
msgid "Status of devices"
msgstr "Стан приÑтрою"
-#: ../cli/src/devices.c:1242
+#: ../clients/cli/devices.c:1273
#, c-format
msgid "Error: invalid extra argument '%s'."
msgstr "Помилка: некоректний додатковий аргумент, «%s»."
-#: ../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
+#: ../clients/cli/devices.c:1290 ../clients/cli/devices.c:1588
+#: ../clients/cli/devices.c:1738 ../clients/cli/devices.c:1825
+#: ../clients/cli/devices.c:1958 ../clients/cli/devices.c:2619
#, c-format
msgid "Error: Device '%s' not found."
msgstr "Помилка: не знайдено приÑтрій «%s»."
-#: ../cli/src/devices.c:1325
+#: ../clients/cli/devices.c:1368
#, c-format
msgid "Device '%s' successfully activated with '%s'.\n"
msgstr "ПриÑтрій «%s» уÑпішно активовано з «%s».\n"
-#: ../cli/src/devices.c:1341
+#: ../clients/cli/devices.c:1374
+#, c-format
+#| msgid "Error: Connection activation failed: (%d) %s."
+msgid "Error: Connection activation failed: (%d) %s.\n"
+msgstr "Помилка: не вдалоÑÑ Ð°ÐºÑ‚Ð¸Ð²ÑƒÐ²Ð°Ñ‚Ð¸ з’єднаннÑ: (%d) %s.\n"
+
+#: ../clients/cli/devices.c:1408
+#, c-format
+#| msgid "Error: Failed to add/activate new connection: (%d) %s"
+msgid "Error: Failed to add/activate new connection: %s"
+msgstr "Помилка: не вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ або задіÑти нове з’єднаннÑ: %s"
+
+#: ../clients/cli/devices.c:1417
+#, c-format
+msgid "Error: Failed to add/activate new connection: Unknown error"
+msgstr ""
+"Помилка: не вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ або задіÑти нове Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ (невідома помилка)"
+
+#: ../clients/cli/devices.c:1428
+#, c-format
+msgid "Connection with UUID '%s' created and activated on device '%s'\n"
+msgstr "Створено Ñ– задіÑно Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· UUID «%s» на приÑтрої «%s»\n"
+
+#: ../clients/cli/devices.c:1492
#, c-format
msgid "Error: Device activation failed: %s"
msgstr "Помилка: не вдалоÑÑ Ð°ÐºÑ‚Ð¸Ð²ÑƒÐ²Ð°Ñ‚Ð¸ приÑтрій: %s"
-#: ../cli/src/devices.c:1349
+#: ../clients/cli/devices.c:1501
#, c-format
msgid "Error: Device activation failed: device was disconnected"
msgstr "Помилка: не вдалоÑÑ Ð°ÐºÑ‚Ð¸Ð²ÑƒÐ²Ð°Ñ‚Ð¸ приÑтрій: приÑтрій було від’єднано"
-#: ../cli/src/devices.c:1362
+#: ../clients/cli/devices.c:1516
#, 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
+#: ../clients/cli/devices.c:1557 ../clients/cli/devices.c:1566
+#: ../clients/cli/devices.c:1707 ../clients/cli/devices.c:1716
+#: ../clients/cli/devices.c:1795 ../clients/cli/devices.c:1803
#, c-format
msgid "Error: No interface specified."
msgstr "Помилка: мало бути вказано інтерфейÑ."
-#: ../cli/src/devices.c:1406 ../cli/src/devices.c:1540
+#: ../clients/cli/devices.c:1572 ../clients/cli/devices.c:1722
+#: ../clients/cli/devices.c:1809
#, c-format
msgid "Error: extra argument not allowed: '%s'."
msgstr "Помилка: некоректний додатковий аргумент, «%s»."
-#: ../cli/src/devices.c:1469
+#: ../clients/cli/devices.c:1636 ../clients/cli/devices.c:1647
#, c-format
-msgid "Success: Device '%s' successfully disconnected."
-msgstr "Виконано: приÑтрій «%s» уÑпішно від’єднано."
+#| msgid "Success: Device '%s' successfully disconnected."
+msgid "Device '%s' successfully disconnected.\n"
+msgstr "ПриÑтрій «%s» уÑпішно від’єднано.\n"
-#: ../cli/src/devices.c:1481
+#: ../clients/cli/devices.c:1661
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "Помилка: невдала Ñпроба Ð²Ñ–Ð´â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s» (%s): %s"
-#: ../cli/src/devices.c:1495
+#: ../clients/cli/devices.c:1676
#, c-format
msgid "Device '%s' has been disconnected.\n"
msgstr "ПриÑтрій «%s» було від’єднано.\n"
-#: ../cli/src/devices.c:1637
+#: ../clients/cli/devices.c:1767
+#, c-format
+#| msgid "Error: Device '%s' (%s) disconnecting failed: %s"
+msgid "Error: Device '%s' (%s) deletion failed: %s"
+msgstr "Помилка: помилка під Ñ‡Ð°Ñ Ñпроби Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸Ñтрою «%s» (%s): %s"
+
+#: ../clients/cli/devices.c:1831
+#, c-format
+#| msgid "Error: Device '%s' is not a WiFi device."
+msgid "Error: Device '%s' is a hardware device. It can't be deleted."
+msgstr "Помилка: приÑтрій «%s» Ñ” апаратним. Його не можна вилучити."
+
+#: ../clients/cli/devices.c:1901
msgid "Wi-Fi scan list"
msgstr "СпиÑок ÑÐºÐ°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Wi-Fi"
-#: ../cli/src/devices.c:1675
+#: ../clients/cli/devices.c:1939
#, c-format
msgid "Error: 'device wifi': %s"
msgstr "Помилка: «device wifi»: %s"
-#: ../cli/src/devices.c:1728 ../cli/src/devices.c:1797
+#: ../clients/cli/devices.c:1981 ../clients/cli/devices.c:2056
#, c-format
msgid "Error: Access point with bssid '%s' not found."
msgstr "Помилка: не знайдено точки доÑтупу з bssid «%s»."
-#: ../cli/src/devices.c:1752 ../cli/src/devices.c:2144
-#: ../cli/src/devices.c:2306
+#: ../clients/cli/devices.c:2005 ../clients/cli/devices.c:2322
+#: ../clients/cli/devices.c:2486
#, c-format
msgid "Error: Device '%s' is not a Wi-Fi device."
msgstr "Помилка: приÑтрій «%s» не Ñ” приÑтроєм Wi-Fi."
-#: ../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:1838
-#, c-format
-msgid "Error: Connection activation failed: (%d) %s."
-msgstr "Помилка: не вдалоÑÑ Ð°ÐºÑ‚Ð¸Ð²ÑƒÐ²Ð°Ñ‚Ð¸ з’єднаннÑ: (%d) %s."
-
-#: ../cli/src/devices.c:1863
-#, c-format
-msgid "Error: Failed to add/activate new connection: (%d) %s"
-msgstr "Помилка: не вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ або задіÑти нове з’єднаннÑ: (%d) %s"
-
-#: ../cli/src/devices.c:1871
-#, c-format
-msgid "Error: Failed to add/activate new connection: Unknown error"
-msgstr ""
-"Помилка: не вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ або задіÑти нове Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ (невідома помилка)"
-
-#: ../cli/src/devices.c:2026
+#: ../clients/cli/devices.c:2215
msgid "SSID or BSSID: "
msgstr "SSID або BSSID: "
-#: ../cli/src/devices.c:2031
+#: ../clients/cli/devices.c:2220
#, c-format
msgid "Error: SSID or BSSID are missing."
msgstr "Помилка: не виÑтачає SSID або BSSID."
-#: ../cli/src/devices.c:2055
+#: ../clients/cli/devices.c:2244
#, c-format
msgid "Error: bssid argument value '%s' is not a valid BSSID."
msgstr "Помилка: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° bssid, «%s», не Ñ” коректним BSSID."
-#: ../cli/src/devices.c:2079
+#: ../clients/cli/devices.c:2268
#, c-format
msgid ""
"Error: wep-key-type argument value '%s' is invalid, use 'key' or 'phrase'."
@@ -3799,153 +4219,153 @@ msgstr ""
"Помилка: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° wep-key-type, «%s», Ñ” некоректним, Ñлід "
"викориÑтовувати «key» або «phrase»."
-#: ../cli/src/devices.c:2099
+#: ../clients/cli/devices.c:2288
#, c-format
msgid "Error: %s: %s."
msgstr "Помилка: %s: %s."
-#: ../cli/src/devices.c:2114
+#: ../clients/cli/devices.c:2303
#, c-format
msgid "Error: BSSID to connect to (%s) differs from bssid argument (%s)."
msgstr ""
"Помилка: BSSID Ð´Ð»Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· (%s) відрізнÑєтьÑÑ Ð²Ñ–Ð´ параметра bssid (%s)."
-#: ../cli/src/devices.c:2120
+#: ../clients/cli/devices.c:2309
#, c-format
msgid "Error: Parameter '%s' is neither SSID nor BSSID."
msgstr "Помилка: параметр «%s» не дорівнює ні SSID, ні BSSID."
-#: ../cli/src/devices.c:2146 ../cli/src/devices.c:2308
+#: ../clients/cli/devices.c:2324 ../clients/cli/devices.c:2488
#, c-format
msgid "Error: No Wi-Fi device found."
msgstr "Помилка: не знайдено жодного приÑтрою Wi-Fi."
-#: ../cli/src/devices.c:2164
+#: ../clients/cli/devices.c:2342
#, c-format
msgid "Error: No network with SSID '%s' found."
msgstr "Помилка: не знайдено мережі з SSID «%s»."
-#: ../cli/src/devices.c:2166
+#: ../clients/cli/devices.c:2344
#, c-format
msgid "Error: No access point with BSSID '%s' found."
msgstr "Помилка: не знайдено точки доÑтупу з BSSID «%s»."
-#: ../cli/src/devices.c:2205
+#: ../clients/cli/devices.c:2383
msgid "Password: "
msgstr "Пароль: "
-#: ../cli/src/devices.c:2334
+#: ../clients/cli/devices.c:2515
#, c-format
msgid "Error: 'device wifi' command '%s' is not valid."
msgstr "Помилка: команда «device wifi» «%s» є некоректною."
-#: ../cli/src/devices.c:2381
+#: ../clients/cli/devices.c:2562
msgid "WiMAX NSP list"
msgstr "СпиÑок WiMAX NSP"
-#: ../cli/src/devices.c:2418
+#: ../clients/cli/devices.c:2599
#, c-format
msgid "Error: 'device wimax': %s"
msgstr "Помилка: «device wimax»: %s"
-#: ../cli/src/devices.c:2472
+#: ../clients/cli/devices.c:2642
#, c-format
msgid "Error: NSP with name '%s' not found."
msgstr "Помилка: не знайдено NSP з назвою «%s»."
-#: ../cli/src/devices.c:2485
+#: ../clients/cli/devices.c:2655
#, c-format
msgid "Error: Device '%s' is not a WiMAX device."
msgstr "Помилка: приÑтрій «%s» не Ñ” приÑтроєм WiMAX."
-#: ../cli/src/devices.c:2523
+#: ../clients/cli/devices.c:2699
#, c-format
msgid "Error: Access point with nsp '%s' not found."
msgstr "Помилка: не знайдено точки доÑтупу з nsp «%s»."
-#: ../cli/src/devices.c:2555
+#: ../clients/cli/devices.c:2736
#, c-format
msgid "Error: 'device wimax' command '%s' is not valid."
msgstr "Помилка: команда «device wimax» «%s» є некоректною."
-#: ../cli/src/devices.c:2705
+#: ../clients/cli/devices.c:2909
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "Помилка: команда «dev» «%s» є некоректною."
-#: ../cli/src/network-manager.c:37
+#: ../clients/cli/general.c:35
msgid "RUNNING"
msgstr "ВИКОÐУЄТЬСЯ"
#. 0
-#: ../cli/src/network-manager.c:38
+#: ../clients/cli/general.c:36
msgid "VERSION"
msgstr "ВЕРСІЯ"
#. 2
-#: ../cli/src/network-manager.c:40
+#: ../clients/cli/general.c:38
msgid "STARTUP"
msgstr "ЗÐПУСК"
#. 3
-#: ../cli/src/network-manager.c:41
+#: ../clients/cli/general.c:39
msgid "CONNECTIVITY"
msgstr "МОЖЛИВІСТЬ З’ЄДÐÐÐÐЯ"
#. 4
-#: ../cli/src/network-manager.c:42
+#: ../clients/cli/general.c:40
msgid "NETWORKING"
msgstr "РОБОТРУ МЕРЕЖІ"
#. 5
-#: ../cli/src/network-manager.c:43
+#: ../clients/cli/general.c:41
msgid "WIFI-HW"
msgstr "WIFI-HW"
#. 6
-#: ../cli/src/network-manager.c:44
+#: ../clients/cli/general.c:42
msgid "WIFI"
msgstr "WIFI"
#. 7
-#: ../cli/src/network-manager.c:45
+#: ../clients/cli/general.c:43
msgid "WWAN-HW"
msgstr "WWAN-HW"
#. 8
-#: ../cli/src/network-manager.c:46
+#: ../clients/cli/general.c:44
msgid "WWAN"
msgstr "WWAN"
#. 9
-#: ../cli/src/network-manager.c:47
+#: ../clients/cli/general.c:45
msgid "WIMAX-HW"
msgstr "WIMAX-HW"
#. 10
-#: ../cli/src/network-manager.c:48
+#: ../clients/cli/general.c:46
msgid "WIMAX"
msgstr "WIMAX"
-#: ../cli/src/network-manager.c:70
+#: ../clients/cli/general.c:68
msgid "PERMISSION"
msgstr "ДОСТУП"
#. 0
-#: ../cli/src/network-manager.c:71
+#: ../clients/cli/general.c:69
msgid "VALUE"
msgstr "ЗÐÐЧЕÐÐЯ"
-#: ../cli/src/network-manager.c:79
+#: ../clients/cli/general.c:77
msgid "LEVEL"
msgstr "РІВЕÐЬ"
#. 0
-#: ../cli/src/network-manager.c:80
+#: ../clients/cli/general.c:78
msgid "DOMAINS"
msgstr "ДОМЕÐИ"
-#: ../cli/src/network-manager.c:95
+#: ../clients/cli/general.c:92
#, c-format
msgid ""
"Usage: nmcli general { COMMAND | help }\n"
@@ -3975,7 +4395,7 @@ msgstr ""
"журналу>]\n"
"\n"
-#: ../cli/src/network-manager.c:107
+#: ../clients/cli/general.c:103
#, c-format
msgid ""
"Usage: nmcli general status { help }\n"
@@ -3992,7 +4412,7 @@ msgstr ""
"status»\n"
"\n"
-#: ../cli/src/network-manager.c:117
+#: ../clients/cli/general.c:112
#, c-format
msgid ""
"Usage: nmcli general hostname { ARGUMENTS | help }\n"
@@ -4017,7 +4437,7 @@ msgstr ""
"назвою вузла ÑиÑтеми.\n"
"\n"
-#: ../cli/src/network-manager.c:130
+#: ../clients/cli/general.c:124
#, c-format
msgid ""
"Usage: nmcli general permissions { help }\n"
@@ -4031,7 +4451,7 @@ msgstr ""
"пройти розпізнаваннÑ.\n"
"\n"
-#: ../cli/src/network-manager.c:139
+#: ../clients/cli/general.c:132
#, c-format
msgid ""
"Usage: nmcli general logging { ARGUMENTS | help }\n"
@@ -4058,7 +4478,7 @@ msgstr ""
"Ð¶ÑƒÑ€Ð½Ð°Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð¾ на Ñторінці підручника (man).\n"
"\n"
-#: ../cli/src/network-manager.c:153
+#: ../clients/cli/general.c:145
#, c-format
msgid ""
"Usage: nmcli networking { COMMAND | help }\n"
@@ -4083,7 +4503,7 @@ msgstr ""
" connectivity [перевірити]\n"
"\n"
-#: ../cli/src/network-manager.c:164
+#: ../clients/cli/general.c:155
#, c-format
msgid ""
"Usage: nmcli networking on { help }\n"
@@ -4096,7 +4516,7 @@ msgstr ""
"Увімкнути роботу у мережі\n"
"\n"
-#: ../cli/src/network-manager.c:173
+#: ../clients/cli/general.c:163
#, c-format
msgid ""
"Usage: nmcli networking off { help }\n"
@@ -4109,7 +4529,7 @@ msgstr ""
"Вимкнути роботу у мережі.\n"
"\n"
-#: ../cli/src/network-manager.c:182
+#: ../clients/cli/general.c:171
#, c-format
msgid ""
"Usage: nmcli networking connectivity { ARGUMENTS | help }\n"
@@ -4130,7 +4550,7 @@ msgstr ""
"виконати повторну перевірку можливоÑÑ‚Ñ– з’єднаннÑ.\n"
"\n"
-#: ../cli/src/network-manager.c:195
+#: ../clients/cli/general.c:183
#, c-format
msgid ""
"Usage: nmcli radio { COMMAND | help }\n"
@@ -4155,7 +4575,7 @@ msgstr ""
" all | wifi | wwan [ on | off ]\n"
"\n"
-#: ../cli/src/network-manager.c:210
+#: ../clients/cli/general.c:197
#, c-format
msgid ""
"Usage: nmcli radio all { ARGUMENTS | help }\n"
@@ -4172,7 +4592,7 @@ msgstr ""
"Отримати Ñтан уÑÑ–Ñ… перемикачів або перемкнути Ñ—Ñ… (увімкнути чи вимкнути).\n"
"\n"
-#: ../cli/src/network-manager.c:221
+#: ../clients/cli/general.c:207
#, c-format
msgid ""
"Usage: nmcli radio wifi { ARGUMENTS | help }\n"
@@ -4189,7 +4609,7 @@ msgstr ""
"Отримати Ñтан перемикача Wi-Fi або перемкнути його (увімкнути чи вимкнути).\n"
"\n"
-#: ../cli/src/network-manager.c:232
+#: ../clients/cli/general.c:217
#, c-format
msgid ""
"Usage: nmcli radio wwan { ARGUMENTS | help }\n"
@@ -4207,7 +4627,7 @@ msgstr ""
"(увімкнути чи вимкнути).\n"
"\n"
-#: ../cli/src/network-manager.c:244
+#: ../clients/cli/general.c:228
#, c-format
msgid ""
"Usage: nmcli radio wimax { ARGUMENTS | help }\n"
@@ -4224,175 +4644,193 @@ msgstr ""
"Отримати Ñтан перемикача WiMAX або перемкнути його (увімкнути чи вимкнути).\n"
"\n"
-#: ../cli/src/network-manager.c:264
+#: ../clients/cli/general.c:248
msgid "asleep"
msgstr "приÑпаний"
-#: ../cli/src/network-manager.c:266
+#: ../clients/cli/general.c:250
msgid "connecting"
msgstr "з’єднуєтьÑÑ"
-#: ../cli/src/network-manager.c:268
+#: ../clients/cli/general.c:252
msgid "connected (local only)"
msgstr "з’єднуєтьÑÑ (локально)"
-#: ../cli/src/network-manager.c:270
+#: ../clients/cli/general.c:254
msgid "connected (site only)"
msgstr "з’єднано (на вузлі)"
-#: ../cli/src/network-manager.c:274
+#: ../clients/cli/general.c:258
msgid "disconnecting"
msgstr "роз’єднуєтьÑÑ"
-#: ../cli/src/network-manager.c:290
+#: ../clients/cli/general.c:274
msgid "portal"
msgstr "портал"
-#: ../cli/src/network-manager.c:292
+#: ../clients/cli/general.c:276
msgid "limited"
msgstr "обмежена"
-#: ../cli/src/network-manager.c:294
+#: ../clients/cli/general.c:278
msgid "full"
msgstr "повна"
-#: ../cli/src/network-manager.c:332
+#: ../clients/cli/general.c:316
#, c-format
msgid "Error: only these fields are allowed: %s"
msgstr "Помилка: можна викориÑтовувати лише такі полÑ: %s"
-#: ../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
+#: ../clients/cli/general.c:336 ../clients/cli/general.c:337
+#: ../clients/cli/general.c:338 ../clients/cli/general.c:339
+#: ../clients/cli/general.c:340 ../clients/cli/general.c:342
+#: ../clients/cli/general.c:343
msgid "enabled"
msgstr "увімкнено"
-#: ../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
+#: ../clients/cli/general.c:336 ../clients/cli/general.c:337
+#: ../clients/cli/general.c:338 ../clients/cli/general.c:339
+#: ../clients/cli/general.c:340 ../clients/cli/general.c:342
+#: ../clients/cli/general.c:343
msgid "disabled"
msgstr "вимкнено"
-#: ../cli/src/network-manager.c:367
+#: ../clients/cli/general.c:346
msgid "NetworkManager status"
msgstr "Стан NetworkManager"
-#: ../cli/src/network-manager.c:372
+#: ../clients/cli/general.c:351
msgid "running"
msgstr "виконуєтьÑÑ"
-#: ../cli/src/network-manager.c:372
-msgid "not running"
-msgstr "не виконуєтьÑÑ"
-
-#: ../cli/src/network-manager.c:375
+#: ../clients/cli/general.c:354
msgid "starting"
msgstr "запуÑк"
-#: ../cli/src/network-manager.c:375
+#: ../clients/cli/general.c:354
msgid "started"
msgstr "запущено"
-#: ../cli/src/network-manager.c:446
+#: ../clients/cli/general.c:425
msgid "auth"
msgstr "розпізн"
-#: ../cli/src/network-manager.c:475
+#: ../clients/cli/general.c:454
#, c-format
msgid "Error: 'general permissions': %s"
msgstr "Помилка: «general permissions»: %s"
-#: ../cli/src/network-manager.c:489
+#: ../clients/cli/general.c:468
msgid "NetworkManager permissions"
msgstr "Права доÑтупу NetworkManager"
-#: ../cli/src/network-manager.c:530
+#: ../clients/cli/general.c:509
#, c-format
msgid "Error: 'general logging': %s"
msgstr "Помилка: «general logging»: %s"
-#: ../cli/src/network-manager.c:545
+#: ../clients/cli/general.c:524
msgid "NetworkManager logging"
msgstr "Ð’ÐµÐ´ÐµÐ½Ð½Ñ Ð¶ÑƒÑ€Ð½Ð°Ð»Ñƒ NetworkManager"
-#: ../cli/src/network-manager.c:565
-#, c-format
-msgid "Error: failed to set hostname: (%d) %s"
-msgstr "Помилка: не вдалоÑÑ Ð²Ñтановити назву вузла: (%d) %s"
-
-#: ../cli/src/network-manager.c:682
+#: ../clients/cli/general.c:546
#, c-format
-msgid "Error: access denied to set logging; %s"
-msgstr "Помилка: заборонено доÑтуп до ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð¶ÑƒÑ€Ð½Ð°Ð»Ð¾Ð¼; %s"
+#| msgid "Error: failed to set hostname: (%d) %s"
+msgid "Error: failed to set hostname: %s"
+msgstr "Помилка: не вдалоÑÑ Ð²Ñтановити назву вузла: %s"
-#: ../cli/src/network-manager.c:684
+#: ../clients/cli/general.c:659
#, c-format
-msgid "Error: %s"
-msgstr "Помилка: %s"
+#| msgid "Error: access denied to set logging; %s"
+msgid "Error: failed to set logging: %s"
+msgstr "Помилка: не вдалоÑÑ Ð²Ñтановити параметри Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð¶ÑƒÑ€Ð½Ð°Ð»Ñƒ: %s"
-#: ../cli/src/network-manager.c:692
+#: ../clients/cli/general.c:668
#, c-format
msgid "Error: 'general' command '%s' is not valid."
msgstr "Помилка: команда «general» «%s» є некоректною."
-#: ../cli/src/network-manager.c:710
+#: ../clients/cli/general.c:686
#, c-format
msgid "Error: '--fields' value '%s' is not valid here (allowed field: %s)"
msgstr ""
"Помилка: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«--fields» «%s» не можна викориÑтовувати тут (дозволене "
"поле: %s)"
-#: ../cli/src/network-manager.c:735
+#: ../clients/cli/general.c:711
#, c-format
msgid "Error: invalid '%s' argument: '%s' (use on/off)."
msgstr "Помилка: некоректний аргумент «%s»: «%s» (мало бути on/off)."
-#: ../cli/src/network-manager.c:746
+#: ../clients/cli/general.c:722
msgid "Connectivity"
msgstr "МожливіÑÑ‚ÑŒ з’єднаннÑ"
-#: ../cli/src/network-manager.c:758
+#: ../clients/cli/general.c:737
msgid "Networking"
msgstr "Робота у мережі"
-#: ../cli/src/network-manager.c:783
+#: ../clients/cli/general.c:762
#, c-format
msgid "Error: 'networking connectivity' command '%s' is not valid."
msgstr "Помилка: команда «networking connectivity» «%s» є некоректною."
-#: ../cli/src/network-manager.c:799
+#: ../clients/cli/general.c:778
#, 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
+#: ../clients/cli/general.c:807 ../clients/cli/general.c:827
msgid "Radio switches"
msgstr "Радіоперемикачі"
#. no argument, show current WiFi state
-#: ../cli/src/network-manager.c:863
+#: ../clients/cli/general.c:845
msgid "Wi-Fi radio switch"
msgstr "Перемикач Wi-Fi"
#. no argument, show current WWAN (mobile broadband) state
-#: ../cli/src/network-manager.c:879
+#: ../clients/cli/general.c:861
msgid "WWAN radio switch"
msgstr "Перемикач WWAN"
#. no argument, show current WiMAX state
-#: ../cli/src/network-manager.c:896
+#: ../clients/cli/general.c:878
msgid "WiMAX radio switch"
msgstr "Перемикач WiMAX"
-#: ../cli/src/network-manager.c:908
+#: ../clients/cli/general.c:890
#, c-format
msgid "Error: 'radio' command '%s' is not valid."
msgstr "Помилка: команда «radio» «%s» є некоректною."
-#: ../cli/src/nmcli.c:85
+#: ../clients/cli/nmcli.c:86
#, 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"
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
"\n"
@@ -4417,6 +4855,7 @@ msgid ""
" r[adio] NetworkManager radio switches\n"
" c[onnection] NetworkManager's connections\n"
" d[evice] devices managed by NetworkManager\n"
+" a[gent] NetworkManager secret agent or polkit agent\n"
"\n"
msgstr ""
"КориÑтуваннÑ: %s [ПÐРÐМЕТРИ] ОБ’ЄКТ { КОМÐÐДР| help }\n"
@@ -4443,70 +4882,69 @@ msgstr ""
" r[adio] перемикачі радіозв’Ñзку NetworkManager\n"
" c[onnection] Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ NetworkManager\n"
" d[evice] приÑтрої, Ñкими керує NetworkManager\n"
+" a[gent] агент паролів NetworkManager або агент polkit\n"
"\n"
-#: ../cli/src/nmcli.c:139
+#: ../clients/cli/nmcli.c:142
#, c-format
msgid "Error: Object '%s' is unknown, try 'nmcli help'."
msgstr "Помилка: невідомий об’єкт «%s», Ñпробуйте «nmcli help»."
-#: ../cli/src/nmcli.c:169
+#: ../clients/cli/nmcli.c:172
#, c-format
msgid "Error: Option '--terse' is specified the second time."
msgstr "Помилка: параметр «--terse» вказано двічі."
-#: ../cli/src/nmcli.c:174
+#: ../clients/cli/nmcli.c:177
#, c-format
msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
msgstr ""
"Помилка: параметр «--terse» Ñ– «--pretty» не можна викориÑтовувати одночаÑно."
-#: ../cli/src/nmcli.c:182
+#: ../clients/cli/nmcli.c:185
#, c-format
msgid "Error: Option '--pretty' is specified the second time."
msgstr "Помилка: параметр «--pretty» вказано двічі."
-#: ../cli/src/nmcli.c:187
+#: ../clients/cli/nmcli.c:190
#, c-format
msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
msgstr ""
"Помилка: параметр «--pretty» Ñ– «--terse» не можна викориÑтовувати одночаÑно"
-#: ../cli/src/nmcli.c:197 ../cli/src/nmcli.c:213 ../cli/src/nmcli.c:242
+#: ../clients/cli/nmcli.c:200 ../clients/cli/nmcli.c:216
+#: ../clients/cli/nmcli.c:245
#, c-format
msgid "Error: missing argument for '%s' option."
msgstr "Помилка: не вказано аргумент параметра «%s»."
-#: ../cli/src/nmcli.c:206 ../cli/src/nmcli.c:222
+#: ../clients/cli/nmcli.c:209 ../clients/cli/nmcli.c:225
#, c-format
msgid "Error: '%s' is not valid argument for '%s' option."
msgstr "Помилка: «%s» не є коректним аргументом «%s»."
-#: ../cli/src/nmcli.c:229
+#: ../clients/cli/nmcli.c:232
#, c-format
msgid "Error: fields for '%s' options are missing."
msgstr "Помилка: не вказано полів Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ–Ð² «%s»."
-#: ../cli/src/nmcli.c:247
+#: ../clients/cli/nmcli.c:250
#, c-format
msgid "Error: '%s' is not a valid timeout for '%s' option."
msgstr "Помилка: «%s» не Ñ” коректним чаÑом Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «%s»."
-#: ../cli/src/nmcli.c:254
+#: ../clients/cli/nmcli.c:257
#, c-format
msgid "nmcli tool, version %s\n"
msgstr "інÑтрумент nmcli, верÑÑ–Ñ %s\n"
-#: ../cli/src/nmcli.c:260
+#: ../clients/cli/nmcli.c:263
#, c-format
msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
msgstr "Помилка: невідомий параметр «%s», Ñпробуйте «nmcli -help»."
-#: ../cli/src/nmcli.c:340 ../cli/src/nmcli.c:349
+#: ../clients/cli/nmcli.c:346 ../clients/cli/nmcli.c:356
#, c-format
-#| msgid ""
-#| "\n"
-#| "Error: nmcli terminated by signal %d."
msgid ""
"\n"
"Error: nmcli terminated by signal %s (%d)\n"
@@ -4514,189 +4952,146 @@ msgstr ""
"\n"
"Помилка: роботу nmcli перервано Ñигналом %s (%d).\n"
-#: ../cli/src/nmcli.c:380
+#: ../clients/cli/nmcli.c:387
#, 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
+#: ../clients/cli/nmcli.c:394
#, 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
+#: ../clients/cli/nmcli.c:491 ../clients/nm-online.c:197
#, c-format
-msgid "Error: Could not create NMClient object."
-msgstr "Помилка: не вдалоÑÑ Ñтворити об’єкт NMClient."
+#| msgid "Error: Could not create NMClient object."
+msgid "Error: Could not create NMClient object: %s."
+msgstr "Помилка: не вдалоÑÑ Ñтворити об’єкт NMClient: %s."
-#: ../cli/src/nmcli.c:416
+#: ../clients/cli/nmcli.c:508
msgid "Success"
msgstr "Виконано"
-#: ../cli/src/settings.c:669
+#: ../clients/cli/polkit-agent.c:82
+#, c-format
+#| msgid "Authentication"
+msgid "Authentication message: %s\n"
+msgstr "ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ розпізнаваннÑ: %s\n"
+
+#: ../clients/cli/polkit-agent.c:88
+#, c-format
+#| msgid "Authentication"
+msgid "Authentication error: %s\n"
+msgstr "Помилка розпізнаваннÑ: %s\n"
+
+#: ../clients/cli/polkit-agent.c:134
+#, c-format
+#| msgid "Modem initialization failed"
+msgid "Warning: polkit agent initialization failed: %s\n"
+msgstr "ПопередженнÑ: не вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ агент polkit: %s\n"
+
+#: ../clients/cli/settings.c:668
#, c-format
msgid "%d (key)"
msgstr "%d (ключ)"
-#: ../cli/src/settings.c:671
+#: ../clients/cli/settings.c:670
#, c-format
msgid "%d (passphrase)"
msgstr "%d (пароль)"
-#: ../cli/src/settings.c:674 ../cli/src/settings.c:802
+#: ../clients/cli/settings.c:673 ../clients/cli/settings.c:754
#, c-format
msgid "%d (unknown)"
msgstr "%d (невідомо)"
-#: ../cli/src/settings.c:700
-msgid "0 (unknown)"
-msgstr "0 (невідомо)"
-
-#: ../cli/src/settings.c:706
-msgid "any, "
-msgstr "будь-Ñкий, "
-
-#: ../cli/src/settings.c:708
-msgid "900 MHz, "
-msgstr "900 МГц, "
-
-#: ../cli/src/settings.c:710
-msgid "1800 MHz, "
-msgstr "1800 МГц, "
-
-#: ../cli/src/settings.c:712
-msgid "1900 MHz, "
-msgstr "1900 МГц, "
-
-#: ../cli/src/settings.c:714
-msgid "850 MHz, "
-msgstr "800 МГц, "
-
-#: ../cli/src/settings.c:716
-msgid "WCDMA 3GPP UMTS 2100 MHz, "
-msgstr "WCDMA 3GPP UMTS 2100 МГц, "
-
-#: ../cli/src/settings.c:718
-msgid "WCDMA 3GPP UMTS 1800 MHz, "
-msgstr "WCDMA 3GPP UMTS 1800 МГц, "
-
-#: ../cli/src/settings.c:720
-msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
-msgstr "WCDMA 3GPP UMTS 1700/2100 МГц, "
-
-#: ../cli/src/settings.c:722
-msgid "WCDMA 3GPP UMTS 800 MHz, "
-msgstr "WCDMA 3GPP UMTS 800 МГц, "
-
-#: ../cli/src/settings.c:724
-msgid "WCDMA 3GPP UMTS 850 MHz, "
-msgstr "WCDMA 3GPP UMTS 850 МГц, "
-
-#: ../cli/src/settings.c:726
-msgid "WCDMA 3GPP UMTS 900 MHz, "
-msgstr "WCDMA 3GPP UMTS 900 МГц, "
-
-#: ../cli/src/settings.c:728
-msgid "WCDMA 3GPP UMTS 1700 MHz, "
-msgstr "WCDMA 3GPP UMTS 1700 МГц, "
-
-#: ../cli/src/settings.c:730
-msgid "WCDMA 3GPP UMTS 1900 MHz, "
-msgstr "WCDMA 3GPP UMTS 1900 МГц, "
-
-#: ../cli/src/settings.c:732
-msgid "WCDMA 3GPP UMTS 2600 MHz, "
-msgstr "WCDMA 3GPP UMTS 2600 МГц, "
-
-#: ../cli/src/settings.c:750
+#: ../clients/cli/settings.c:702
msgid "0 (NONE)"
msgstr "0 (ÐЕМÐЄ)"
-#: ../cli/src/settings.c:756
+#: ../clients/cli/settings.c:708
msgid "REORDER_HEADERS, "
msgstr "ПЕРЕВПОРЯДКОВУВÐÐÐЯ_ЗÐГОЛОВКІВ, "
-#: ../cli/src/settings.c:758
+#: ../clients/cli/settings.c:710
msgid "GVRP, "
msgstr "GVRP, "
-#: ../cli/src/settings.c:760
+#: ../clients/cli/settings.c:712
msgid "LOOSE_BINDING, "
msgstr "ШИРОКЕ_ПРИВ’ЯЗУВÐÐÐЯ, "
-#: ../cli/src/settings.c:796
+#: ../clients/cli/settings.c:748
#, c-format
msgid "%d (disabled)"
msgstr "%d (вимкнено)"
-#: ../cli/src/settings.c:798
+#: ../clients/cli/settings.c:750
#, c-format
msgid "%d (enabled, prefer public IP)"
msgstr "%d (увімкнено, перевага відкритого IP)"
-#: ../cli/src/settings.c:800
+#: ../clients/cli/settings.c:752
#, c-format
msgid "%d (enabled, prefer temporary IP)"
msgstr "%d (увімкнено, перевага тимчаÑового IP)"
-#: ../cli/src/settings.c:812
+#: ../clients/cli/settings.c:764
msgid "0 (none)"
msgstr "0 (немає)"
-#: ../cli/src/settings.c:818
+#: ../clients/cli/settings.c:770
msgid "agent-owned, "
msgstr ", влаÑником Ñ” агент, "
-#: ../cli/src/settings.c:820
+#: ../clients/cli/settings.c:772
msgid "not saved, "
msgstr "не збережено, "
-#: ../cli/src/settings.c:822
+#: ../clients/cli/settings.c:774
msgid "not required, "
msgstr "не Ñ” обов’Ñзковим, "
-#: ../cli/src/settings.c:1128
+#: ../clients/cli/settings.c:1057
msgid "0 (disabled)"
msgstr "0 (вимкнено)"
-#: ../cli/src/settings.c:1134
+#: ../clients/cli/settings.c:1063
msgid "enabled, "
msgstr "увімкнено, "
-#: ../cli/src/settings.c:1136
+#: ../clients/cli/settings.c:1065
msgid "advertise, "
msgstr "оголошеннÑ, "
-#: ../cli/src/settings.c:1138
+#: ../clients/cli/settings.c:1067
msgid "willing, "
msgstr "наданнÑ, "
-#: ../cli/src/settings.c:1166
+#: ../clients/cli/settings.c:1095
msgid "-1 (unset)"
msgstr "-1 (не вÑтановлено)"
-#: ../cli/src/settings.c:1274 ../cli/src/settings.c:1457
-#: ../cli/src/settings.c:1497
+#: ../clients/cli/settings.c:1192 ../clients/cli/settings.c:1477
+#: ../clients/cli/settings.c:1519
msgid "auto"
msgstr "авто"
-#: ../cli/src/settings.c:1287
+#: ../clients/cli/settings.c:1205
msgid "default"
msgstr "типовий"
-#: ../cli/src/settings.c:1625
+#: ../clients/cli/settings.c:1647
#, c-format
msgid "Do you also want to set '%s' to '%s'? [yes]: "
msgstr "Хочете також вÑтановити Ð´Ð»Ñ Â«%s» Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s»? [типово yes або так]: "
-#: ../cli/src/settings.c:1627
+#: ../clients/cli/settings.c:1649
#, c-format
msgid "Do you also want to clear '%s'? [yes]: "
msgstr "Хочете також Ñпорожнити «%s»? [типово yes — так]: "
-#: ../cli/src/settings.c:1788
+#: ../clients/cli/settings.c:1810
#, c-format
msgid ""
"Warning: %s.%s set to '%s', but it might be ignored in infrastructure mode\n"
@@ -4704,97 +5099,128 @@ msgstr ""
"ПопередженнÑ: %s.%s вÑтановлено у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s», але це може бути "
"проігноровано у режимі інфраÑтруктури\n"
-#: ../cli/src/settings.c:1870 ../cli/src/settings.c:2150
-#: ../cli/src/settings.c:4232
+#: ../clients/cli/settings.c:1829
+#, c-format
+msgid "Warning: setting %s.%s requires removing ipv4 and ipv6 settings\n"
+msgstr ""
+"ПопередженнÑ: вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ %s.%s потребує Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ–Ð² ipv4 та ipv6\n"
+
+#: ../clients/cli/settings.c:1831
+#| msgid "Do you want to provide them? (yes/no) [yes] "
+msgid "Do you want to remove them? [yes] "
+msgstr "Хочете вилучити їх? [yes — так] "
+
+#: ../clients/cli/settings.c:1927 ../clients/cli/settings.c:2249
+#: ../clients/cli/settings.c:4327
#, c-format
msgid "'%s' is not valid"
msgstr "«%s» не є коректним"
-#: ../cli/src/settings.c:1893
+#: ../clients/cli/settings.c:1950
#, c-format
msgid "'%d' is not valid; use <%d-%d>"
msgstr "«%d» Ñ” некоректним значеннÑм; Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” належати діапазону <%d-%d>"
-#: ../cli/src/settings.c:1915
+#: ../clients/cli/settings.c:1972
#, c-format
-msgid "'%u' is not valid; use <%d-%d>"
-msgstr "«%u» не Ñ” коректним значеннÑм; Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” належати діапазону <%d-%d>"
+#| msgid "'%d' is not valid; use <%d-%d>"
+msgid "'%lld' is not valid; use <%lld-%lld>"
+msgstr ""
+"«%lld» Ñ” некоректним значеннÑм; ÑкориÑтайтеÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñм у діапазоні <%lld-%"
+"lld>"
+
+#: ../clients/cli/settings.c:1994
+#, c-format
+#| msgid "'%u' is not valid; use <%d-%d>"
+msgid "'%u' is not valid; use <%u-%u>"
+msgstr "«%u» Ñ” некоректним; ÑкориÑтайтеÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñм у діапазоні <%u-%u>"
-#: ../cli/src/settings.c:1981
+#: ../clients/cli/settings.c:2060
#, c-format
msgid "'%s' is not valid; use <option>=<value>"
msgstr ""
"Ð—Ð°Ð¿Ð¸Ñ Â«%s» Ñ” некоректним; Ñлід викориÑтовувати формат <параметр>=<значеннÑ>"
-#: ../cli/src/settings.c:2015
+#: ../clients/cli/settings.c:2094
#, c-format
msgid "index '%s' is not valid"
msgstr "Ñ–Ð½Ð´ÐµÐºÑ Â«%s» Ñ” некоректним"
-#: ../cli/src/settings.c:2020 ../cli/src/settings.c:2045
+#: ../clients/cli/settings.c:2099 ../clients/cli/settings.c:2124
msgid "no item to remove"
msgstr "немає пунктів Ð´Ð»Ñ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ"
-#: ../cli/src/settings.c:2024 ../cli/src/settings.c:2049
+#: ../clients/cli/settings.c:2103 ../clients/cli/settings.c:2128
#, c-format
msgid "index '%d' is not in range <0-%d>"
msgstr "Ñ–Ð½Ð´ÐµÐºÑ Â«%d» лежить поза діапазоном <0-%d>"
-#: ../cli/src/settings.c:2064
+#: ../clients/cli/settings.c:2143
#, c-format
msgid "invalid option '%s'"
msgstr "некоректний параметр, «%s»"
-#: ../cli/src/settings.c:2066
+#: ../clients/cli/settings.c:2145
msgid "missing option"
msgstr "пропущено параметр"
-#: ../cli/src/settings.c:2096 ../cli/src/settings.c:2116
+#: ../clients/cli/settings.c:2175 ../clients/cli/settings.c:2195
+#: ../clients/cli/settings.c:2215
#, c-format
msgid "'%s' is not a valid number (or out of range)"
msgstr ""
"«%s» не Ñ” коректним значеннÑм номер (або лежить поза діапазоном припуÑтимих "
"номерів)"
-#: ../cli/src/settings.c:2170
+#: ../clients/cli/settings.c:2265
#, 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
+#: ../clients/cli/settings.c:2290 ../libnm-core/nm-setting-connection.c:802
+#: ../libnm-core/nm-setting-infiniband.c:256
+#: ../libnm-util/nm-setting-connection.c:835
+#: ../libnm-util/nm-setting-infiniband.c:270
#, 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
+#: ../clients/cli/settings.c:2314
#, c-format
-msgid "'%s' is not a number"
-msgstr "«%s» не Ñ” чиÑлом"
+#| msgid "'%s' is not a valid channel; use <1-13>"
+msgid "'%s' is not a valid flag number; use <0-%d>"
+msgstr ""
+"«%s» не Ñ” коректним номером прапорцÑ; ÑкориÑтайтеÑÑ Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð¼ у діапазоні <0-%d>"
-#: ../cli/src/settings.c:2266
+#: ../clients/cli/settings.c:2326
+#, c-format
+msgid "Warning: '%s' sum is higher than all flags => all flags set\n"
+msgstr ""
+"ПопередженнÑ: Ñума «%s» перевищує уÑÑ– прапорці => вÑтановлено нове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ "
+"Ð´Ð»Ñ ÑƒÑÑ–Ñ… прапорців\n"
+
+#: ../clients/cli/settings.c:2367
#, c-format
msgid "'%s' is not a valid hex character"
msgstr "«%s» не Ñ” коректним шіÑтнадцÑтковим Ñимволом"
-#: ../cli/src/settings.c:2296
+#: ../clients/cli/settings.c:2397
#, c-format
msgid "'%s' is not a valid MAC"
msgstr "«%s» не Ñ” коректною MAC-адреÑою"
-#: ../cli/src/settings.c:2333 ../libnm-util/nm-setting-connection.c:793
+#: ../clients/cli/settings.c:2434 ../libnm-core/nm-setting-connection.c:791
+#: ../libnm-util/nm-setting-connection.c:792
#, c-format
msgid "'%s' is not a valid UUID"
msgstr "«%s» не є коректним UUID"
-#: ../cli/src/settings.c:2400
+#: ../clients/cli/settings.c:2501
#, c-format
msgid "the property doesn't contain permission '%s'"
msgstr "влаÑтивіÑÑ‚ÑŒ не міÑтить права доÑтупу «%s»"
-#: ../cli/src/settings.c:2412
+#: ../clients/cli/settings.c:2513
msgid ""
"Enter a list of user permissions. This is a list of user names formatted "
"as:\n"
@@ -4809,42 +5235,39 @@ msgstr ""
"\n"
"Приклад: alice bob charlie\n"
-#: ../cli/src/settings.c:2431
+#: ../clients/cli/settings.c:2532
#, c-format
msgid "'%s' is not valid master; use ifname or connection UUID"
msgstr ""
"«%s» не Ñ” коректним значеннÑм оÑновного інтерфейÑу; ÑкориÑтайтеÑÑ Ð½Ð°Ð·Ð²Ð¾ÑŽ "
"інтерфейÑу або UUID з’єднаннÑ"
-#: ../cli/src/settings.c:2475
+#: ../clients/cli/settings.c:2576
#, 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
+#: ../clients/cli/settings.c:2580 ../clients/cli/settings.c:2596
#, 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
+#: ../clients/cli/settings.c:2589
#, 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
+#: ../clients/cli/settings.c:2623
#, c-format
msgid "the value '%s' is not a valid UUID"
msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s» не Ñ” коректним UUID"
-#: ../cli/src/settings.c:2529
+#: ../clients/cli/settings.c:2630
#, c-format
msgid "the property doesn't contain UUID '%s'"
msgstr "влаÑтивіÑÑ‚ÑŒ не міÑтить UUID «%s»"
-#: ../cli/src/settings.c:2541
+#: ../clients/cli/settings.c:2642
msgid ""
"Enter secondary connections that should be activated when this connection "
"is\n"
@@ -4865,28 +5288,28 @@ msgstr ""
"\n"
"Приклад: private-openvpn, fe6ba5d8-c2fc-4aae-b2e3-97efddd8d9a7\n"
-#: ../cli/src/settings.c:2618
+#: ../clients/cli/settings.c:2719
msgid "private key password not provided"
msgstr "не надано Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð´Ð¾ закритого ключа"
-#: ../cli/src/settings.c:2645
+#: ../clients/cli/settings.c:2746
#, c-format
msgid "the property doesn't contain EAP method '%s'"
msgstr "влаÑтивіÑÑ‚ÑŒ не міÑтить методу EAP «%s»"
-#: ../cli/src/settings.c:2670
+#: ../clients/cli/settings.c:2771
#, c-format
msgid "the property doesn't contain alternative subject match '%s'"
msgstr "влаÑтивіÑÑ‚ÑŒ не міÑтить альтернативної відповідноÑÑ‚Ñ– «%s»"
-#: ../cli/src/settings.c:2699
+#: ../clients/cli/settings.c:2800
#, c-format
msgid "the property doesn't contain \"phase2\" alternative subject match '%s'"
msgstr ""
"влаÑтивіÑÑ‚ÑŒ не міÑтить відповідноÑÑ‚Ñ– альтернативного Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«phase2» "
"«%s»"
-#: ../cli/src/settings.c:2725
+#: ../clients/cli/settings.c:2826
msgid ""
"Enter path to a private key and the key password (if not set yet):\n"
" <file path> [<password>]\n"
@@ -4897,7 +5320,7 @@ msgstr ""
" <шлÑÑ… до ключа> [<пароль>]\n"
"Приклад: /home/cimrman/jara-priv-key Dardanely\n"
-#: ../cli/src/settings.c:2795
+#: ../clients/cli/settings.c:2896
msgid ""
"Enter bytes as a list of hexadecimal values.\n"
"Two formats are accepted:\n"
@@ -4919,7 +5342,7 @@ msgstr ""
"Приклади: ab0455a6ea3a74C2\n"
" ab 4 55 0xa6 ea 3a 74 C2\n"
-#: ../cli/src/settings.c:2898
+#: ../clients/cli/settings.c:2999
#, c-format
msgid ""
"Enter a list of bonding options formatted as:\n"
@@ -4950,22 +5373,33 @@ msgstr ""
"\n"
"Приклад: mode=2,miimon=120\n"
-#: ../cli/src/settings.c:2939
+#: ../clients/cli/settings.c:3037
#, c-format
msgid "'%s' is not a valid InfiniBand MAC"
msgstr "«%s» не Ñ” коректним значеннÑм MAC-адреÑи InfiniBand"
-#: ../cli/src/settings.c:2977
+#: ../clients/cli/settings.c:3074
#, c-format
msgid "'%s' is not a valid IBoIP P_Key"
msgstr "«%s» не є коректним закритим ключем IBoIP"
-#: ../cli/src/settings.c:3045 ../cli/src/settings.c:3390
+#: ../clients/cli/settings.c:3105
+#, c-format
+msgid "'%s' is not valid (the format is: ip[/prefix] [next-hop] [metric])"
+msgstr ""
+"«%s» Ñ” некоректним (формат: ip[/префікÑ] [наÑтупний_перехід] [метрика])"
+
+#: ../clients/cli/settings.c:3153 ../clients/cli/settings.c:3172
+#, c-format
+msgid "invalid IPv4 address '%s'"
+msgstr "некоректна адреÑа IPv4, «%s»"
+
+#: ../clients/cli/settings.c:3178 ../clients/cli/settings.c:3479
#, c-format
msgid "the property doesn't contain DNS server '%s'"
msgstr "влаÑтивіÑÑ‚ÑŒ не міÑтить Ñервера DNS «%s»"
-#: ../cli/src/settings.c:3057
+#: ../clients/cli/settings.c:3190
msgid ""
"Enter a list of IPv4 addresses of DNS servers.\n"
"\n"
@@ -4975,63 +5409,66 @@ msgstr ""
"\n"
"Приклад: 8.8.8.8, 8.8.4.4\n"
-#: ../cli/src/settings.c:3093 ../cli/src/settings.c:3444
+#: ../clients/cli/settings.c:3226 ../clients/cli/settings.c:3533
#, 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
+#: ../clients/cli/settings.c:3280 ../clients/cli/settings.c:3586
#, c-format
msgid "the property doesn't contain IP address '%s'"
msgstr "влаÑтивіÑÑ‚ÑŒ не міÑтить адреÑи IP «%s»"
-#: ../cli/src/settings.c:3175
+#: ../clients/cli/settings.c:3293
+#| 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"
msgid ""
"Enter a list of IPv4 addresses formatted as:\n"
-" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+" ip[/prefix], ip[/prefix],...\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"
+"Example: 192.168.1.5/24, 10.0.0.11/24\n"
msgstr ""
"Вкажіть ÑпиÑок Ð°Ð´Ñ€ÐµÑ IPv4 у такому форматуванні:\n"
-" ip[/префікÑ] [шлюз], ip[/префікÑ] [шлюз],...\n"
+" ip[/префікÑ], ip[/префікÑ]...\n"
"Якщо Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ Ð½Ðµ буде вказано, викориÑтовуватиметьÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ 32.\n"
"\n"
-"Приклад: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24\n"
+"Приклад: 192.168.1.5/24, 10.0.0.11/24\n"
-#: ../cli/src/settings.c:3228 ../cli/src/settings.c:3543
+#: ../clients/cli/settings.c:3309 ../clients/cli/settings.c:3615
#, 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[/префікÑ] [наÑтупний_перехід] [метрика])"
+#| msgid "invalid gateway '%s'"
+msgid "invalid gateway address '%s'"
+msgstr "некоректна адреÑа шлюзу, «%s»"
-#: ../cli/src/settings.c:3276 ../cli/src/settings.c:3591
+#: ../clients/cli/settings.c:3364 ../clients/cli/settings.c:3670
#, c-format
msgid "the property doesn't contain route '%s'"
msgstr "влаÑтивіÑÑ‚ÑŒ не міÑтить маршруту «%s»"
-#: ../cli/src/settings.c:3289
+#: ../clients/cli/settings.c:3377
#| msgid ""
#| "Enter a list of IPv4 routes formatted as:\n"
-#| " ip/[prefix] next-hop [metric],...\n"
+#| " ip[/prefix] [next-hop] [metric],...\n"
+#| "\n"
#| "Missing prefix is regarded as a prefix of 32.\n"
-#| "Missing metric is regarded as a metric of 0.\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"
-#| "Example: 192.168.2.0/24 192.168.2.1 3, 10.1.0.0/16 10.0.0.254\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"
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"
+"Missing metric means default (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"
@@ -5041,13 +5478,18 @@ msgstr ""
"\n"
"Якщо Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ Ð½Ðµ вказано, буде викориÑтано Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ 32.\n"
"Якщо не вказано наÑтупний перехід, викориÑтовуєтьÑÑ 0.0.0.0.\n"
-"Якщо метрику не вказано або вказано 0, викориÑтовувати типову метрику (типове "
-"Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð±ÑƒÐ´Ðµ визначено NM або Ñдром).\n"
+"Якщо метрику не вказано, викориÑтовувати типову метрику "
+"(типове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð±ÑƒÐ´Ðµ визначено 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
+#: ../clients/cli/settings.c:3454 ../clients/cli/settings.c:3473
+#, c-format
+msgid "invalid IPv6 address '%s'"
+msgstr "некоректна адреÑа IPv6, «%s»"
+
+#: ../clients/cli/settings.c:3491
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 "
@@ -5068,39 +5510,47 @@ msgstr ""
"\n"
"Приклад: 2607:f0d0:1002:51::4, 2607:f0d0:1002:51::1\n"
-#: ../cli/src/settings.c:3525
+#: ../clients/cli/settings.c:3599
+#| 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"
msgid ""
"Enter a list of IPv6 addresses formatted as:\n"
-" ip[/prefix] [gateway], ip[/prefix] [gateway],...\n"
+" ip[/prefix], ip[/prefix],...\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"
+"Example: 2607:f0d0:1002:51::4/64, 1050:0:0:0:5:600:300c:326b\n"
msgstr ""
"Вкажіть ÑпиÑок Ð°Ð´Ñ€ÐµÑ IPv6 у такому форматуванні:\n"
-" ip[/префікÑ] [шлюз], ip[/префікÑ] [шлюз],...\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"
+"Приклад: 2607:f0d0:1002:51::4/64, 1050:0:0:0:5:600:300c:326b\n"
-#: ../cli/src/settings.c:3604
+#: ../clients/cli/settings.c:3683
#| msgid ""
#| "Enter a list of IPv6 routes formatted as:\n"
-#| " ip/[prefix] next-hop [metric],...\n"
+#| " ip[/prefix] [next-hop] [metric],...\n"
+#| "\n"
#| "Missing prefix is regarded as a prefix of 128.\n"
-#| "Missing metric is regarded as a metric of 0.\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"
-#| "Example: 2001:db8:beef:2::/64 2001:db8:beef::2, 2001:db8:beef:3::/64 2001:"
-#| "db8:beef::3 2\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"
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"
+"Missing metric means default (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"
@@ -5110,32 +5560,38 @@ msgstr ""
" ip/[префікÑ] [наÑтупний_перехід] [метрика],...\n"
"\n"
"Якщо Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ Ð½Ðµ вказано, буде викориÑтано Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ 128.\n"
-"Якщо не вказано наÑтупний перехід, викориÑтовуєтьÑÑ Â«::».\n"
-"Якщо метрику не вказано або вказано 0, викориÑтовувати типову метрику (типове "
-"Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð±ÑƒÐ´Ðµ визначено NM або Ñдром).\n"
+"Якщо не вказано наÑтупний перехід, викориÑтовуєтьÑÑ \"::\".\n"
+"Якщо метрику не вказано, викориÑтовувати типову метрику "
+"(типове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð±ÑƒÐ´Ðµ визначено 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
+#: ../clients/cli/settings.c:3700 ../libnm-core/nm-setting-gsm.c:317
+#: ../libnm-util/nm-setting-gsm.c:374
+#, c-format
+msgid "'%s' is not a number"
+msgstr "«%s» не Ñ” чиÑлом"
+
+#: ../clients/cli/settings.c:3707
#, c-format
msgid "'%s' is not valid; use 0, 1, or 2"
msgstr ""
"«%s» не Ñ” коректним значеннÑм; можна викориÑтовувати лише Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ 0, 1, 2"
-#: ../cli/src/settings.c:3645
+#: ../clients/cli/settings.c:3724
#, c-format
msgid "'%s' is not a valid channel; use <1-13>"
msgstr "«%s» не є коректним каналом; канал має належати діапазону <1-13>"
-#: ../cli/src/settings.c:3666
+#: ../clients/cli/settings.c:3761
#, c-format
msgid "'%s' is not valid; use [e, o, n]"
msgstr ""
"«%s» Ñ” некоректним значеннÑм; Ñлід викориÑтовувати такі значеннÑ: [e, o, n]"
-#: ../cli/src/settings.c:3694
+#: ../clients/cli/settings.c:3789
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 "
@@ -5154,16 +5610,16 @@ msgstr ""
"\"roundrobin\"}, \"ports\": {\"eth1\": {}, \"eth2\": {}} }\n"
" set team.config /etc/my-team.conf\n"
-#: ../cli/src/settings.c:3734
+#: ../clients/cli/settings.c:3829
msgid "no priority to remove"
msgstr "немає пріоритетноÑÑ‚Ñ– Ð´Ð»Ñ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ"
-#: ../cli/src/settings.c:3738
+#: ../clients/cli/settings.c:3833
#, c-format
msgid "index '%d' is not in the range of <0-%d>"
msgstr "Ñ–Ð½Ð´ÐµÐºÑ Â«%d» лежить поза діапазоном <0-%d>"
-#: ../cli/src/settings.c:3777
+#: ../clients/cli/settings.c:3872
#, c-format
msgid ""
"Warning: only one mapping at a time is supported; taking the first one (%s)\n"
@@ -5171,30 +5627,33 @@ msgstr ""
"ПопередженнÑ: передбачено підтримку лише одної прив’Ñзки одночаÑно; вибрано "
"першу прив’Ñзку (%s)\n"
-#: ../cli/src/settings.c:3784
+#: ../clients/cli/settings.c:3879
#, 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
+#: ../clients/cli/settings.c:3988 ../clients/cli/settings.c:4156
+#: ../libnm-core/nm-setting-wired.c:607
+#: ../libnm-core/nm-setting-wireless.c:785
+#: ../libnm-core/nm-setting-wireless.c:797
+#: ../libnm-util/nm-setting-wired.c:650
+#: ../libnm-util/nm-setting-wireless.c:842
+#: ../libnm-util/nm-setting-wireless.c:856
#, c-format
msgid "'%s' is not a valid MAC address"
msgstr "%s не Ñ” припуÑтимою MAC-адреÑою"
-#: ../cli/src/settings.c:3899 ../cli/src/settings.c:4067
+#: ../clients/cli/settings.c:3994 ../clients/cli/settings.c:4162
#, c-format
msgid "the property doesn't contain MAC address '%s'"
msgstr "влаÑтивіÑÑ‚ÑŒ не міÑтить адреÑи MAC «%s»"
-#: ../cli/src/settings.c:3918
+#: ../clients/cli/settings.c:4013
#, c-format
msgid "'%s' is not valid; 3 strings should be provided"
msgstr "«%s» не Ñ” коректним значеннÑм; Ñлід вказати 3 Ñ€Ñдки"
-#: ../cli/src/settings.c:3937
+#: ../clients/cli/settings.c:4032
msgid ""
"Enter a list of three channels (comma or space separated).\n"
"\n"
@@ -5205,7 +5664,7 @@ msgstr ""
"\n"
"Приклад: 0.0.0e20 0.0.0e21 0.0.0e22\n"
-#: ../cli/src/settings.c:3987
+#: ../clients/cli/settings.c:4082
#, c-format
msgid ""
"Enter a list of S/390 options formatted as:\n"
@@ -5216,23 +5675,23 @@ msgstr ""
" параметр = <значеннÑ>, параметр = <значеннÑ>,...\n"
"Коректні Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ–Ð²: %s\n"
-#: ../cli/src/settings.c:4033
+#: ../clients/cli/settings.c:4128
#, c-format
msgid "'%s' is not a valid channel"
msgstr "«%s» не є коректним каналом"
-#: ../cli/src/settings.c:4039
+#: ../clients/cli/settings.c:4134
#, 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
+#: ../clients/cli/settings.c:4221 ../clients/cli/settings.c:4259
+#: ../clients/cli/settings.c:4297
#, c-format
msgid "the property doesn't contain protocol '%s'"
msgstr "влаÑтивіÑÑ‚ÑŒ не міÑтить протоколу «%s»"
-#: ../cli/src/settings.c:4241
+#: ../clients/cli/settings.c:4336
#, c-format
msgid ""
"'%s' not compatible with %s '%s', please change the key or set the right %s "
@@ -5241,23 +5700,23 @@ msgstr ""
"«%s» Ñ” неÑуміÑним з %s «%s», будь лаÑка, Ñпочатку змініть ключ або "
"вÑтановіть правильне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %s."
-#: ../cli/src/settings.c:4249
+#: ../clients/cli/settings.c:4344
#, c-format
msgid "WEP key is guessed to be of '%s'\n"
msgstr "ПрипуÑкаємо, що ключем WEP Ñ” «%s»\n"
-#: ../cli/src/settings.c:4251
+#: ../clients/cli/settings.c:4346
#, c-format
msgid "WEP key index set to '%d'\n"
msgstr "Ñ–Ð½Ð´ÐµÐºÑ ÐºÐ»ÑŽÑ‡Ð° WEP вÑтановлено у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%d»\n"
-#: ../cli/src/settings.c:4274
+#: ../clients/cli/settings.c:4369
#, 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
+#: ../clients/cli/settings.c:4385 ../clients/cli/settings.c:4388
+#: ../clients/cli/settings.c:4391 ../clients/cli/settings.c:4394
#, c-format
msgid ""
"Warning: '%s' is not compatible with '%s' type, please change or delete the "
@@ -5266,7 +5725,7 @@ msgstr ""
"ПопередженнÑ: «%s» неÑуміÑний з типом «%s». Будь лаÑка, змініть або вилучіть "
"ключ.\n"
-#: ../cli/src/settings.c:4312
+#: ../clients/cli/settings.c:4407
#, c-format
msgid ""
"Enter the type of WEP keys. The accepted values are: 0 or unknown, 1 or key, "
@@ -5275,36 +5734,36 @@ msgstr ""
"Вкажіть тип ключів WEP. Можливі значеннÑ: 0 або unknown (невідомо), 1 або "
"key (ключ) та 2 або passphrase (пароль).\n"
-#: ../cli/src/settings.c:4325
+#: ../clients/cli/settings.c:4420
#, c-format
msgid "'%s' is not a valid PSK"
msgstr "«%s» не є коректним PSK"
-#: ../cli/src/settings.c:4369
+#: ../clients/cli/settings.c:4464
#, c-format
msgid "'%s' is not a valid DCB flag"
msgstr "«%s» не є коректним прапорцем DCB"
-#: ../cli/src/settings.c:4392
+#: ../clients/cli/settings.c:4487
#, c-format
msgid "'%s' is not a DCB app priority"
msgstr "«%s» не є пріоритетом програм DCB"
-#: ../cli/src/settings.c:4418
+#: ../clients/cli/settings.c:4513
msgid "must contain 8 comma-separated numbers"
msgstr "має міÑтити 8 чиÑел, відокремлених комами"
-#: ../cli/src/settings.c:4435
+#: ../clients/cli/settings.c:4530
#, c-format
msgid "'%s' not a number between 0 and %u (inclusive) or %u"
msgstr "«%s» не Ñ” чиÑлом у діапазоні від 0 до %u (включно) або %u"
-#: ../cli/src/settings.c:4438
+#: ../clients/cli/settings.c:4533
#, c-format
msgid "'%s' not a number between 0 and %u (inclusive)"
msgstr "«%s» не Ñ” чиÑлом у діапазоні від 0 до %u (включно)"
-#: ../cli/src/settings.c:4460
+#: ../clients/cli/settings.c:4555
#, c-format
msgid ""
"Warning: changes will have no effect until '%s' includes 1 (enabled)\n"
@@ -5313,100 +5772,103 @@ msgstr ""
"ПопередженнÑ: зміни не буде задіÑно, доки «%s» не включатиме 1 (увімкнено)\n"
"\n"
-#: ../cli/src/settings.c:4513
+#: ../clients/cli/settings.c:4608
#, c-format
msgid "bandwidth percentages must total 100%%"
msgstr "Ñума чаÑтин каналу у відÑотках має Ñкладати 100%%"
-#: ../cli/src/settings.c:6198
+#: ../clients/cli/settings.c:6295
msgid "don't know how to get the property value"
msgstr "програмі невідомий ÑпоÑіб Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ–"
-#: ../cli/src/settings.c:6251 ../cli/src/settings.c:6291
+#: ../clients/cli/settings.c:6348 ../clients/cli/settings.c:6388
msgid "the property can't be changed"
msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ– не можна змінювати"
-#: ../cli/src/settings.c:6374
-#| msgid "unavailable"
+#: ../clients/cli/settings.c:6471
msgid "(not available)"
msgstr "(недоÑтупний)"
-#: ../cli/src/settings.c:6399
+#: ../clients/cli/settings.c:6496
msgid "[NM property description]"
msgstr "[Ð¾Ð¿Ð¸Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ– NM]"
-#: ../cli/src/settings.c:6404
+#: ../clients/cli/settings.c:6501
msgid "[nmcli specific description]"
msgstr "[Ñпецифічний Ð´Ð»Ñ nmcli опиÑ]"
-#: ../cli/src/utils.c:128
+#. ----------------------------------------------------------------------------
+#: ../clients/cli/settings.c:6550
+msgid "<hidden>"
+msgstr "<приховано>"
+
+#: ../clients/cli/utils.c:127
#, c-format
msgid "Error: value for '%s' argument is required."
msgstr "Помилка: Ñлід вказати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s» аргументу."
-#: ../cli/src/utils.c:153
+#: ../clients/cli/utils.c:152
#, c-format
msgid "Error: Argument '%s' was expected, but '%s' provided."
msgstr "Помилка: мало бути вказано аргумент «%s», втім вказано аргумент «%s»."
-#: ../cli/src/utils.c:156
+#: ../clients/cli/utils.c:155
#, c-format
msgid "Error: Unexpected argument '%s'"
msgstr "Помилка: неочікуваний аргумент «%s»."
-#: ../cli/src/utils.c:206
+#: ../clients/cli/utils.c:205
#, c-format
msgid "Error converting IP4 address '0x%X' to text form"
msgstr ""
"Помилка під Ñ‡Ð°Ñ Ñпроби Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð°Ð´Ñ€ÐµÑи IP4 «0x%X» у текÑтовий формат"
-#: ../cli/src/utils.c:234
+#: ../clients/cli/utils.c:233
#, c-format
msgid "Error converting IP6 address '%s' to text form"
msgstr "Помилка під Ñ‡Ð°Ñ Ñпроби Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð°Ð´Ñ€ÐµÑи IP6 «%s» у текÑтовий формат"
-#: ../cli/src/utils.c:408
+#: ../clients/cli/utils.c:410
#, 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
+#: ../clients/cli/utils.c:420
#, c-format
msgid "'%s' is not valid; use [%s] or [%s]"
msgstr "«%s» не Ñ” коректним значеннÑм; мало бути [%s] або [%s]"
-#: ../cli/src/utils.c:500
+#: ../clients/cli/utils.c:502
#, c-format
msgid "'%s' is ambiguous (%s x %s)"
msgstr "«%s» є неоднозначним (%s x %s)"
-#: ../cli/src/utils.c:512
+#: ../clients/cli/utils.c:514
#, c-format
msgid "missing name, try one of [%s]"
msgstr "пропущено назву, Ñпробуйте одну з таких назв: [%s]"
-#: ../cli/src/utils.c:729
+#: ../clients/cli/utils.c:756
#, c-format
msgid "field '%s' has to be alone"
msgstr "поле «%s» має бути єдиним"
-#: ../cli/src/utils.c:732
+#: ../clients/cli/utils.c:759
#, c-format
msgid "invalid field '%s'; allowed fields: %s"
msgstr "некоректне поле «%s»; дозволені полÑ: %s"
-#: ../cli/src/utils.c:789
+#: ../clients/cli/utils.c:816
msgid "Option '--terse' requires specifying '--fields'"
msgstr "ВикориÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «--terse» потребує Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«--fields»"
-#: ../cli/src/utils.c:793
+#: ../clients/cli/utils.c:820
#, c-format
msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
msgstr ""
"Параметр «--terse» потребує певних значень параметра «--fields», а не «%s»"
-#: ../cli/src/utils.c:1112
+#: ../clients/cli/utils.c:1138
#, c-format
msgid ""
"Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --"
@@ -5415,7 +5877,7 @@ msgstr ""
"Увага: верÑÑ–Ñ— nmcli (%s) Ñ– NetworkManager (%s) не збігаютьÑÑ. СкориÑтайтеÑÑ "
"параметром --nocheck Ð´Ð»Ñ Ð²Ð¸Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ попередженнÑ.\n"
-#: ../cli/src/utils.c:1121
+#: ../clients/cli/utils.c:1147
#, c-format
msgid ""
"Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force "
@@ -5426,780 +5888,2183 @@ msgstr ""
"можуть бути непередбачуваними.\n"
"."
-#: ../libnm-glib/nm-device.c:1794
-msgid "Bluetooth"
-msgstr "Bluetooth"
+#: ../clients/common/nm-polkit-listener.c:215
+msgid "An authentication session is already underway."
+msgstr "Ð¡ÐµÐ°Ð½Ñ Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Ð²Ð¶Ðµ триває."
+
+#. 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)
+#.
+#: ../clients/common/nm-secret-agent-simple.c:209
+#: ../clients/common/nm-secret-agent-simple.c:300
+#: ../clients/tui/nmt-page-dsl.c:69 ../clients/tui/nmt-page-wifi.c:335
+msgid "Username"
+msgstr "КориÑтувач"
+
+#: ../clients/common/nm-secret-agent-simple.c:214
+#: ../clients/common/nm-secret-agent-simple.c:251
+#: ../clients/common/nm-secret-agent-simple.c:277
+#: ../clients/common/nm-secret-agent-simple.c:310
+#: ../clients/common/nm-secret-agent-simple.c:379
+#: ../clients/common/nm-secret-agent-simple.c:392
+#: ../clients/common/nm-secret-agent-simple.c:408
+#: ../clients/tui/nmt-page-dsl.c:78 ../clients/tui/nmt-page-wifi.c:280
+#: ../clients/tui/nmt-page-wifi.c:311 ../clients/tui/nmt-page-wifi.c:344
+msgid "Password"
+msgstr "Пароль"
+
+#: ../clients/common/nm-secret-agent-simple.c:223
+msgid "Identity"
+msgstr "Профіль"
+
+#: ../clients/common/nm-secret-agent-simple.c:228
+msgid "Private key password"
+msgstr "Пароль закритого ключа"
+
+#: ../clients/common/nm-secret-agent-simple.c:265
+#: ../clients/tui/nmt-page-wifi.c:292
+msgid "Key"
+msgstr "Ключ"
+
+#: ../clients/common/nm-secret-agent-simple.c:305
+#: ../clients/tui/nmt-page-dsl.c:81
+msgid "Service"
+msgstr "Служба"
+
+#: ../clients/common/nm-secret-agent-simple.c:339
+msgid "Authentication required by wireless network"
+msgstr "Ð”Ð»Ñ Ð´Ð¾Ñтупу до бездротової мережі Ñлід пройти розпізнаваннÑ"
+
+#: ../clients/common/nm-secret-agent-simple.c:340
+#, c-format
+msgid ""
+"Passwords or encryption keys are required to access the wireless network "
+"'%s'."
+msgstr ""
+"Ð”Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð´Ð¾Ñтупу до бездротової мережі потрібні паролі або ключі "
+"ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Â«%s»."
+
+#: ../clients/common/nm-secret-agent-simple.c:348
+msgid "Wired 802.1X authentication"
+msgstr "Ð Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Ð´Ñ€Ð¾Ñ‚Ð¾Ð²Ð¾Ñ— мережі 802.1X"
+
+#: ../clients/common/nm-secret-agent-simple.c:351
+msgid "Network name"
+msgstr "Ðазва мережі"
-#: ../libnm-glib/nm-device.c:1800 ../tui/nm-editor-utils.c:182
+#: ../clients/common/nm-secret-agent-simple.c:358
+msgid "DSL authentication"
+msgstr "Ð Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ DSL"
+
+#: ../clients/common/nm-secret-agent-simple.c:366
+msgid "PIN code required"
+msgstr "Потрібен PIN-код"
+
+#: ../clients/common/nm-secret-agent-simple.c:367
+msgid "PIN code is needed for the mobile broadband device"
+msgstr ""
+"Ð”Ð»Ñ ÐºÐ¾Ñ€Ð¸ÑÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¸Ñтроєм мобільної широкоÑмугової мережі Ñлід вказати PIN-"
+"код"
+
+#: ../clients/common/nm-secret-agent-simple.c:369
+msgid "PIN"
+msgstr "PIN"
+
+#: ../clients/common/nm-secret-agent-simple.c:375
+#: ../clients/common/nm-secret-agent-simple.c:388
+#: ../clients/common/nm-secret-agent-simple.c:404
+msgid "Mobile broadband network password"
+msgstr "Пароль до мобільної широкоÑмугової мережі"
+
+#: ../clients/common/nm-secret-agent-simple.c:376
+#: ../clients/common/nm-secret-agent-simple.c:389
+#: ../clients/common/nm-secret-agent-simple.c:405
+#, c-format
+msgid "A password is required to connect to '%s'."
+msgstr "Ð”Ð»Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· «%s» Ñлід вказати пароль."
+
+#: ../clients/nm-online.c:96
+#, c-format
+msgid "\rConnecting"
+msgstr "\rÐ’ÑтановлюєтьÑÑ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ"
+
+#: ../clients/nm-online.c:149
+msgid ""
+"Time to wait for a connection, in seconds (without the option, default value "
+"is 30)"
+msgstr ""
+"Ð§Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° з’єднаннÑ, у Ñекундах (без цього параметра типовим "
+"значеннÑм Ñ” 30)"
+
+#: ../clients/nm-online.c:150
+msgid "Exit immediately if NetworkManager is not running or connecting"
+msgstr ""
+"Ðегайно завершити роботу, Ñкщо NetworkManager не запущено або виконуєтьÑÑ "
+"Ñпроба з’єднаннÑ"
+
+#: ../clients/nm-online.c:151
+msgid "Don't print anything"
+msgstr "Ðічого не виводити"
+
+#: ../clients/nm-online.c:152
+msgid "Wait for NetworkManager startup instead of a connection"
+msgstr "Чекати на запуÑк NetworkManager, а не на з’єднаннÑ"
+
+#: ../clients/nm-online.c:173
+msgid ""
+"Waits for NetworkManager to finish activating startup network connections."
+msgstr ""
+"Очікує на Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ— NetworkManager з’єднань, Ñкі Ñлід активувати "
+"під Ñ‡Ð°Ñ Ð·Ð°Ð¿ÑƒÑку."
+
+#: ../clients/nm-online.c:180 ../clients/nm-online.c:186
+msgid "Invalid option. Please use --help to see a list of valid options."
+msgstr ""
+"Ðекоректний параметр. Щоб ознайомитиÑÑ Ð·Ñ– ÑпиÑком параметрів, ÑкориÑтайтеÑÑ "
+"параметром --help."
+
+#: ../clients/tui/newt/nmt-newt-utils.c:180 ../clients/tui/nmt-editor.c:417
+#: ../clients/tui/nmt-password-dialog.c:174
+#: ../clients/tui/nmt-route-editor.c:125 ../clients/tui/nmtui-hostname.c:71
+#: ../clients/tui/nmtui.c:117
+msgid "OK"
+msgstr "Гаразд"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:328
+#: ../clients/tui/newt/nmt-newt-utils.c:360
+#, c-format
+msgid "Could not create temporary file: %s"
+msgstr "Ðе вдалоÑÑ Ñтворити тимчаÑовий файл «%s»"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:368
+#, c-format
+msgid "Editor failed: %s"
+msgstr "Помилка редактора: %s"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:376
+#, c-format
+msgid "Editor failed with status %d"
+msgstr "Помилка редактора з кодом Ñтану %d"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:378
+#, c-format
+msgid "Editor failed with signal %d"
+msgstr "Помилка редактора з Ñигналом %d"
+
+#: ../clients/tui/newt/nmt-newt-utils.c:382
+#, c-format
+msgid "Could not re-read file: %s"
+msgstr "Ðе вдалоÑÑ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ прочитати файл: %s"
+
+#: ../clients/tui/nm-editor-utils.c:151
+#, c-format
+msgid "Ethernet connection %d"
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ethernet %d"
+
+#: ../clients/tui/nm-editor-utils.c:159
+#, c-format
+msgid "Wi-Fi connection %d"
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Wi-Fi %d"
+
+#: ../clients/tui/nm-editor-utils.c:168
+#, c-format
+msgid "InfiniBand connection %d"
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ InfiniBand %d"
+
+#: ../clients/tui/nm-editor-utils.c:173 ../libnm-glib/nm-device.c:1800
+#: ../libnm/nm-device.c:1621
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
+#: ../clients/tui/nm-editor-utils.c:176
+#, c-format
+msgid "Mobile broadband connection %d"
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð·Ð° допомогою мобільної радіомережі %d"
+
+#: ../clients/tui/nm-editor-utils.c:182 ../clients/tui/nmt-page-dsl.c:65
+msgid "DSL"
+msgstr "DSL"
+
+#: ../clients/tui/nm-editor-utils.c:186
+#, c-format
+msgid "DSL connection %d"
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ DSL %d"
+
+#: ../clients/tui/nm-editor-utils.c:191 ../libnm-core/nm-connection.c:1524
+#: ../libnm-glib/nm-device.c:1804 ../libnm-util/nm-connection.c:1608
+#: ../libnm/nm-device.c:1625 ../src/settings/plugins/ifcfg-rh/reader.c:3911
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 "Команда"
+#: ../clients/tui/nm-editor-utils.c:195
+#, c-format
+msgid "Bond connection %d"
+msgstr "Прив’Ñзане Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ %d"
-#: ../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
+#: ../clients/tui/nm-editor-utils.c:200 ../libnm-core/nm-connection.c:1528
+#: ../libnm-glib/nm-device.c:1808 ../libnm-util/nm-connection.c:1612
+#: ../libnm/nm-device.c:1629 ../src/settings/plugins/ifcfg-rh/reader.c:4202
msgid "Bridge"
msgstr "МіÑток"
-#: ../libnm-glib/nm-device.c:1812
-msgid "ADSL"
-msgstr "ADSL"
+#: ../clients/tui/nm-editor-utils.c:205
+#, c-format
+msgid "Bridge connection %d"
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¼Ñ–Ñтка %d"
-#: ../libnm-glib/nm-device.c:1840
-msgid "Wired"
-msgstr "Дротове"
+#: ../clients/tui/nm-editor-utils.c:209 ../libnm-core/nm-connection.c:1526
+#: ../libnm-glib/nm-device.c:1806 ../libnm-util/nm-connection.c:1610
+#: ../libnm/nm-device.c:1627 ../src/settings/plugins/ifcfg-rh/reader.c:4017
+msgid "Team"
+msgstr "Команда"
-#: ../libnm-glib/nm-device.c:1871
-msgid "PCI"
-msgstr "PCI"
+#: ../clients/tui/nm-editor-utils.c:214
+#, c-format
+msgid "Team connection %d"
+msgstr "Командне Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ %d"
-#: ../libnm-glib/nm-device.c:1873
-msgid "USB"
-msgstr "USB"
+#: ../clients/tui/nm-editor-utils.c:222
+#, c-format
+msgid "VLAN connection %d"
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ VLAN %d"
-#. 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
+#: ../clients/tui/nm-editor-utils.c:237
#, c-format
-msgctxt "long device name"
-msgid "%s %s"
-msgstr "%s %s"
+msgid "VPN connection %d"
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ VPN %d"
-#: ../libnm-glib/nm-remote-connection.c:151
-msgid "Disconnected by D-Bus"
-msgstr "Від’єднано D-Bus"
+#: ../clients/tui/nmt-device-entry.c:371
+msgid "Select..."
+msgstr "Вибрати…"
+
+#: ../clients/tui/nmt-edit-connection-list.c:112
+msgid "Add"
+msgstr "Додати"
+
+#: ../clients/tui/nmt-edit-connection-list.c:115
+#: ../clients/tui/nmt-page-ip4.c:172 ../clients/tui/nmt-page-ip6.c:170
+#: ../clients/tui/nmt-page-team-port.c:112 ../clients/tui/nmt-page-team.c:176
+msgid "Edit..."
+msgstr "Змінити..."
+
+#: ../clients/tui/nmt-edit-connection-list.c:118
+#: ../clients/tui/nmtui-edit.c:526
+msgid "Delete"
+msgstr "Вилучити"
+
+#: ../clients/tui/nmt-editor-section.c:105
+msgid "Hide"
+msgstr "Сховати"
+
+#: ../clients/tui/nmt-editor-section.c:105
+msgid "Show"
+msgstr "Показати"
+
+#: ../clients/tui/nmt-editor.c:99
+#, c-format
+msgid "Could not create editor for connection '%s' of type '%s'."
+msgstr "Ðе вдалоÑÑ Ñтворити редактор Ð´Ð»Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s» типу «%s»."
+
+#: ../clients/tui/nmt-editor.c:103
+#, c-format
+msgid "Could not create editor for invalid connection '%s'."
+msgstr "Ðе вдалоÑÑ Ñтворити редактор Ð´Ð»Ñ Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¾Ð³Ð¾ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s»."
+
+#: ../clients/tui/nmt-editor.c:113
+msgid "Edit Connection"
+msgstr "Редагувати з’єднаннÑ"
+
+#: ../clients/tui/nmt-editor.c:166
+#, c-format
+msgid "Unable to save connection: %s"
+msgstr "Ðе вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ: %s"
+
+#: ../clients/tui/nmt-editor.c:180
+#, c-format
+msgid "Unable to add new connection: %s"
+msgstr "Ðе вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ нове з’єднаннÑ: %s"
+
+#: ../clients/tui/nmt-editor.c:322
+msgid "Profile name"
+msgstr "Ðазва профілю"
+
+#: ../clients/tui/nmt-editor.c:333
+#| msgid "Ethernet"
+msgid "Ethernet device"
+msgstr "ПриÑтрій Ethernet"
+
+#: ../clients/tui/nmt-editor.c:335
+msgid "Device"
+msgstr "ПриÑтрій"
+
+#. And finally the bottom widgets
+#: ../clients/tui/nmt-editor.c:393
+msgid "Automatically connect"
+msgstr "З’єднуватиÑÑŒ автоматично"
+
+#: ../clients/tui/nmt-editor.c:399
+msgid "Available to all users"
+msgstr "ДоÑтупне уÑім кориÑтувачам"
+
+#: ../clients/tui/nmt-editor.c:414 ../clients/tui/nmt-password-dialog.c:171
+#: ../clients/tui/nmt-route-editor.c:118 ../clients/tui/nmtui-edit.c:218
+#: ../clients/tui/nmtui-edit.c:525 ../clients/tui/nmtui-hostname.c:69
+msgid "Cancel"
+msgstr "СкаÑувати"
+
+#: ../clients/tui/nmt-mtu-entry.c:86
+msgid "(default)"
+msgstr "(типово)"
+
+#: ../clients/tui/nmt-mtu-entry.c:88 ../clients/tui/nmt-mtu-entry.c:119
+msgid "bytes"
+msgstr "байтів"
+
+#: ../clients/tui/nmt-page-bond.c:87
+msgid "Round-robin"
+msgstr "Циклічний"
+
+#: ../clients/tui/nmt-page-bond.c:88
+msgid "Active Backup"
+msgstr "Ðктивне резервуваннÑ"
+
+#: ../clients/tui/nmt-page-bond.c:89
+msgid "XOR"
+msgstr "XOR"
+
+#: ../clients/tui/nmt-page-bond.c:90
+msgid "Broadcast"
+msgstr "ТранÑлÑціÑ"
+
+#: ../clients/tui/nmt-page-bond.c:91
+msgid "802.3ad"
+msgstr "802.3ad"
+
+#: ../clients/tui/nmt-page-bond.c:92
+msgid "Adaptive Transmit Load Balancing (tlb)"
+msgstr "Ðдаптивне ÑƒÑ€Ñ–Ð²Ð½Ð¾Ð²Ð°Ð¶ÐµÐ½Ð½Ñ Ð½Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð° передаваннÑм (tlb)"
+
+#: ../clients/tui/nmt-page-bond.c:93
+msgid "Adaptive Load Balancing (alb)"
+msgstr "Ðдаптивне ÑƒÑ€Ñ–Ð²Ð½Ð¾Ð²Ð°Ð¶ÐµÐ½Ð½Ñ Ð½Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ (alb)"
+
+#: ../clients/tui/nmt-page-bond.c:99
+msgid "MII (recommended)"
+msgstr "MII (рекомендоване)"
+
+#: ../clients/tui/nmt-page-bond.c:100
+msgid "ARP"
+msgstr "ARP"
+
+#: ../clients/tui/nmt-page-bond.c:358 ../clients/tui/nmt-page-bridge.c:81
+#: ../clients/tui/nmt-page-team.c:155
+msgid "Slaves"
+msgstr "Підлеглі"
+
+#: ../clients/tui/nmt-page-bond.c:370 ../clients/tui/nmt-page-wifi.c:233
+msgid "Mode"
+msgstr "Режим"
+
+#: ../clients/tui/nmt-page-bond.c:376
+msgid "Primary"
+msgstr "ОÑновний"
+
+#: ../clients/tui/nmt-page-bond.c:382
+msgid "Link monitoring"
+msgstr "СпоÑÑ‚ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð° зв’Ñзком"
+
+#: ../clients/tui/nmt-page-bond.c:388 ../clients/tui/nmt-page-bond.c:395
+#: ../clients/tui/nmt-page-bond.c:402 ../clients/tui/nmt-page-bond.c:409
+msgctxt "milliseconds"
+msgid "ms"
+msgstr "мÑ"
+
+#: ../clients/tui/nmt-page-bond.c:389 ../clients/tui/nmt-page-bond.c:410
+msgid "Monitoring frequency"
+msgstr "ЧаÑтота оновленнÑ"
+
+#: ../clients/tui/nmt-page-bond.c:396
+msgid "Link up delay"
+msgstr "Затримка вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð²â€™Ñзку"
+
+#: ../clients/tui/nmt-page-bond.c:403
+msgid "Link down delay"
+msgstr "Затримка Ñ€Ð¾Ð·Ñ–Ñ€Ð²Ð°Ð½Ð½Ñ Ð·Ð²â€™Ñзку"
+
+#: ../clients/tui/nmt-page-bond.c:416
+msgid "ARP targets"
+msgstr "Цілі ARP"
+
+#: ../clients/tui/nmt-page-bridge-port.c:63
+msgid "BRIDGE PORT"
+msgstr "ПОРТ МІСТКÐ"
+
+#: ../clients/tui/nmt-page-bridge-port.c:70
+#: ../clients/tui/nmt-page-bridge.c:107
+msgid "Priority"
+msgstr "Пріоритет"
+
+#: ../clients/tui/nmt-page-bridge-port.c:76
+msgid "Path cost"
+msgstr "ВартіÑÑ‚ÑŒ маршруту"
+
+#: ../clients/tui/nmt-page-bridge-port.c:78
+msgid "Hairpin mode"
+msgstr "Режим початкової зони (hairpin)"
+
+#: ../clients/tui/nmt-page-bridge.c:91 ../clients/tui/nmt-page-bridge.c:116
+#: ../clients/tui/nmt-page-bridge.c:126 ../clients/tui/nmt-page-bridge.c:136
+msgid "seconds"
+msgstr "Ñекунд"
+
+#: ../clients/tui/nmt-page-bridge.c:92
+msgid "Aging time"
+msgstr "Ð§Ð°Ñ Ð·Ð°ÑтаріваннÑ"
+
+#: ../clients/tui/nmt-page-bridge.c:94
+msgid "Enable STP (Spanning Tree Protocol)"
+msgstr "Увімкнути STP (протокол розподілу за деревом)"
+
+#: ../clients/tui/nmt-page-bridge.c:117
+msgid "Forward delay"
+msgstr "Затримка переÑпрÑмуваннÑ"
+
+#: ../clients/tui/nmt-page-bridge.c:127
+msgid "Hello time"
+msgstr "Ð§Ð°Ñ Ð½Ð° вітаннÑ"
+
+#: ../clients/tui/nmt-page-bridge.c:137
+msgid "Max age"
+msgstr "МакÑ. вік"
+
+#: ../clients/tui/nmt-page-ethernet.c:73
+msgid "ETHERNET"
+msgstr "ETHERNET"
+
+#: ../clients/tui/nmt-page-ethernet.c:80 ../clients/tui/nmt-page-vlan.c:125
+#: ../clients/tui/nmt-page-wifi.c:367
+msgid "Cloned MAC address"
+msgstr "Клонована MAC-адреÑа"
+
+#: ../clients/tui/nmt-page-infiniband.c:50
+msgid "Datagram"
+msgstr "Данограма"
+
+#: ../clients/tui/nmt-page-infiniband.c:51
+msgid "Connected"
+msgstr "З'єднано"
+
+#: ../clients/tui/nmt-page-infiniband.c:84
+msgid "INFINIBAND"
+msgstr "INFINIBAND"
+
+#: ../clients/tui/nmt-page-infiniband.c:91
+msgid "Transport mode"
+msgstr "Режим передаваннÑ"
+
+#: ../clients/tui/nmt-page-ip4.c:41
+msgid "Disabled"
+msgstr "Вимкнено"
+
+#: ../clients/tui/nmt-page-ip4.c:42 ../clients/tui/nmt-page-ip6.c:42
+msgid "Automatic"
+msgstr "Ðвтоматично"
+
+#: ../clients/tui/nmt-page-ip4.c:43 ../clients/tui/nmt-page-ip6.c:44
+msgid "Link-Local"
+msgstr "Link-Local"
+
+#: ../clients/tui/nmt-page-ip4.c:44 ../clients/tui/nmt-page-ip6.c:45
+msgid "Manual"
+msgstr "Вручну"
+
+#: ../clients/tui/nmt-page-ip4.c:45
+msgid "Shared"
+msgstr "Спільний"
-#: ../libnm-util/crypto.c:133
+#: ../clients/tui/nmt-page-ip4.c:85 ../clients/tui/nmt-page-ip6.c:85
+msgid "(No custom routes)"
+msgstr "(Ðемає нетипових маршрутів)"
+
+#: ../clients/tui/nmt-page-ip4.c:88 ../clients/tui/nmt-page-ip6.c:88
+#, c-format
+msgid "One custom route"
+msgid_plural "%d custom routes"
+msgstr[0] "%d нетипове правило"
+msgstr[1] "%d нетипових правила"
+msgstr[2] "%d нетипових правил"
+msgstr[3] "Одне нетипове правило"
+
+#: ../clients/tui/nmt-page-ip4.c:131
+msgid "IPv4 CONFIGURATION"
+msgstr "ÐÐЛÐШТУВÐÐÐЯ IPv4"
+
+#: ../clients/tui/nmt-page-ip4.c:139 ../clients/tui/nmt-page-ip6.c:139
+msgid "Addresses"
+msgstr "ÐдреÑи"
+
+#: ../clients/tui/nmt-page-ip4.c:146 ../clients/tui/nmt-page-ip6.c:146
+msgid "Gateway"
+msgstr "Шлюз"
+
+#: ../clients/tui/nmt-page-ip4.c:153 ../clients/tui/nmt-page-ip6.c:153
+msgid "DNS servers"
+msgstr "Сервери DNS"
+
+#: ../clients/tui/nmt-page-ip4.c:159 ../clients/tui/nmt-page-ip6.c:159
+msgid "Search domains"
+msgstr "Домени пошуку"
+
+#: ../clients/tui/nmt-page-ip4.c:174 ../clients/tui/nmt-page-ip6.c:172
+msgid "Routing"
+msgstr "Маршрути"
+
+#: ../clients/tui/nmt-page-ip4.c:176 ../clients/tui/nmt-page-ip6.c:174
+msgid "Never use this network for default route"
+msgstr "Ðіколи не викориÑтовувати цю мережу Ð´Ð»Ñ Ñ‚Ð¸Ð¿Ð¾Ð²Ð¾Ñ— маршрутизації"
+
+#: ../clients/tui/nmt-page-ip4.c:184
+msgid "Require IPv4 addressing for this connection"
+msgstr "Ð”Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±Ð½Ðµ адреÑÑƒÐ²Ð°Ð½Ð½Ñ IPv4"
+
+#: ../clients/tui/nmt-page-ip6.c:41
+msgid "Ignore"
+msgstr "Ігнорувати"
+
+#: ../clients/tui/nmt-page-ip6.c:43
+msgid "Automatic (DHCP-only)"
+msgstr "Ðвтоматично (лише DHCP)"
+
+#: ../clients/tui/nmt-page-ip6.c:131
+msgid "IPv6 CONFIGURATION"
+msgstr "ÐÐЛÐШТУВÐÐÐЯ IPv6"
+
+#: ../clients/tui/nmt-page-ip6.c:182
+msgid "Require IPv6 addressing for this connection"
+msgstr "Ð”Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±Ð½Ðµ адреÑÑƒÐ²Ð°Ð½Ð½Ñ IPv6"
+
+#: ../clients/tui/nmt-page-ppp.c:134
+#| msgid "IPv4 CONFIGURATION"
+msgid "PPP CONFIGURATION"
+msgstr "ÐÐЛÐШТУВÐÐÐЯ PPP"
+
+#: ../clients/tui/nmt-page-ppp.c:143
+#| msgid "Authentication"
+msgid "Allowed authentication methods:"
+msgstr "Дозволені методи розпізнаваннÑ:"
+
+#: ../clients/tui/nmt-page-ppp.c:150
+#| msgid "LEAP"
+msgid "EAP"
+msgstr "EAP"
+
+#: ../clients/tui/nmt-page-ppp.c:158
+#| msgid "AP"
+msgid "PAP"
+msgstr "PAP"
+
+#: ../clients/tui/nmt-page-ppp.c:166
+msgid "CHAP"
+msgstr "CHAP"
+
+#: ../clients/tui/nmt-page-ppp.c:174
+msgid "MSCHAPv2"
+msgstr "MSCHAPv2"
+
+#: ../clients/tui/nmt-page-ppp.c:182
+msgid "MSCHAP"
+msgstr "MSCHAP"
+
+#: ../clients/tui/nmt-page-ppp.c:198
+msgid "Use point-to-point encryption (MPPE)"
+msgstr "ВикориÑтовувати міжточкове ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ (MPPE)"
+
+#: ../clients/tui/nmt-page-ppp.c:210
+msgid "Require 128-bit encryption"
+msgstr "Потрібне 128-бітове шифруваннÑ"
+
+#: ../clients/tui/nmt-page-ppp.c:220
+msgid "Use stateful MPPE"
+msgstr "ВикориÑтовувати MPPE зі збереженнÑм Ñтану"
+
+#: ../clients/tui/nmt-page-ppp.c:232
+msgid "Allow BSD data compression"
+msgstr "Дозволити ÑтиÑÐºÐ°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… BSD"
+
+#: ../clients/tui/nmt-page-ppp.c:240
+msgid "Allow Deflate data compression"
+msgstr "Дозволити ÑтиÑÐºÐ°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… DEFLATE"
+
+#: ../clients/tui/nmt-page-ppp.c:248
+msgid "Use TCP header compression"
+msgstr "ВикориÑтовувати ÑтиÑÐºÐ°Ð½Ð½Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° TCP"
+
+#: ../clients/tui/nmt-page-ppp.c:258
+msgid "Send PPP echo packets"
+msgstr "ÐадÑилати PPP-луна пакети"
+
+#: ../clients/tui/nmt-page-team-port.c:95
+msgid "TEAM PORT"
+msgstr "ПОРТ КОМÐÐДИ"
+
+#: ../clients/tui/nmt-page-team-port.c:102 ../clients/tui/nmt-page-team.c:166
+msgid "JSON configuration"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ JSON"
+
+#: ../clients/tui/nmt-page-vlan.c:102
+msgid "Parent"
+msgstr "БатьківÑький"
+
+#: ../clients/tui/nmt-page-vlan.c:117
+msgid "VLAN id"
+msgstr "Ід. VLAN"
+
+#: ../clients/tui/nmt-page-wifi.c:67
+msgctxt "Wi-Fi"
+msgid "Client"
+msgstr "Клієнт"
+
+#: ../clients/tui/nmt-page-wifi.c:68
+msgid "Access Point"
+msgstr "Точка доÑтупу"
+
+#: ../clients/tui/nmt-page-wifi.c:69
+msgid "Ad-Hoc Network"
+msgstr "Спеціальна мережа"
+
+#: ../clients/tui/nmt-page-wifi.c:74
+msgctxt "Wi-Fi"
+msgid "Automatic"
+msgstr "Ðвтоматично"
+
+#. 802.11a Wi-Fi network
+#: ../clients/tui/nmt-page-wifi.c:76
+msgid "A (5 GHz)"
+msgstr "A (5 ГГц)"
+
+#. 802.11b / 802.11g Wi-Fi network
+#: ../clients/tui/nmt-page-wifi.c:78
+msgid "B/G (2.4 GHz)"
+msgstr "B/G (2,4 ГГц)"
+
+#: ../clients/tui/nmt-page-wifi.c:83
+msgctxt "Wi-Fi security"
+msgid "None"
+msgstr "Ðемає"
+
+#: ../clients/tui/nmt-page-wifi.c:84
+msgid "WPA & WPA2 Personal"
+msgstr "WPA/WPA2 Personal"
+
+#: ../clients/tui/nmt-page-wifi.c:85
+msgid "WPA & WPA2 Enterprise"
+msgstr "WPA/WPA2 Enterprise"
+
+#: ../clients/tui/nmt-page-wifi.c:86
+msgid "WEP 40/128-bit Key (Hex or ASCII)"
+msgstr "40/128-бітовий ключ WEP (шіÑтнадцÑтковий або ASCII)"
+
+#: ../clients/tui/nmt-page-wifi.c:87
+msgid "WEP 128-bit Passphrase"
+msgstr "128-бітовий пароль WEP"
+
+#: ../clients/tui/nmt-page-wifi.c:88
+msgid "Dynamic WEP (802.1x)"
+msgstr "Динамічна WEP (802.1x)"
+
+#: ../clients/tui/nmt-page-wifi.c:89
+msgid "LEAP"
+msgstr "LEAP"
+
+#: ../clients/tui/nmt-page-wifi.c:94
+msgctxt "WEP key index"
+msgid "1 (Default)"
+msgstr "1 (типово)"
+
+#: ../clients/tui/nmt-page-wifi.c:95
+msgctxt "WEP key index"
+msgid "2"
+msgstr "2"
+
+#: ../clients/tui/nmt-page-wifi.c:96
+msgctxt "WEP key index"
+msgid "3"
+msgstr "3"
+
+#: ../clients/tui/nmt-page-wifi.c:97
+msgctxt "WEP key index"
+msgid "4"
+msgstr "4"
+
+#: ../clients/tui/nmt-page-wifi.c:102
+msgid "Open System"
+msgstr "Відкрита ÑиÑтема"
+
+#: ../clients/tui/nmt-page-wifi.c:103
+msgid "Shared Key"
+msgstr "Відкритий ключ"
+
+#: ../clients/tui/nmt-page-wifi.c:217
+msgid "WI-FI"
+msgstr "WI-FI"
+
+#: ../clients/tui/nmt-page-wifi.c:259
+msgid "Channel"
+msgstr "Канал"
+
+#: ../clients/tui/nmt-page-wifi.c:264
+msgid "Security"
+msgstr "ЗахиÑÑ‚"
+
+#. "wpa-enterprise"
+#. FIXME
+#: ../clients/tui/nmt-page-wifi.c:285
+msgid "(No support for wpa-enterprise yet...)"
+msgstr "(Підтримки wpa-enterprise ще не передбачено...)"
+
+#: ../clients/tui/nmt-page-wifi.c:295 ../clients/tui/nmt-page-wifi.c:314
+msgid "WEP index"
+msgstr "Ð†Ð½Ð´ÐµÐºÑ WEP"
+
+#: ../clients/tui/nmt-page-wifi.c:303 ../clients/tui/nmt-page-wifi.c:322
+msgid "Authentication"
+msgstr "РозпізнаваннÑ"
+
+#. "dynamic-wep"
+#. FIXME
+#: ../clients/tui/nmt-page-wifi.c:328
+msgid "(No support for dynamic-wep yet...)"
+msgstr "(Підтримки dynamic-wep ще не передбачено...)"
+
+#: ../clients/tui/nmt-password-fields.c:130
+msgid "Ask for this password every time"
+msgstr "Запитувати про цей пароль щоразу"
+
+#: ../clients/tui/nmt-password-fields.c:131
+msgid "Show password"
+msgstr "Показати фразу паролÑ"
+
+#: ../clients/tui/nmt-route-table.c:192
+msgid "Destination"
+msgstr "ПризначеннÑ"
+
+#: ../clients/tui/nmt-route-table.c:192
+msgid "Prefix"
+msgstr "ПрефікÑ"
+
+#: ../clients/tui/nmt-route-table.c:201
+msgid "Next Hop"
+msgstr "ÐаÑтупне переÑиланнÑ"
+
+#: ../clients/tui/nmt-route-table.c:209
+msgid "Metric"
+msgstr "Метрика"
+
+#: ../clients/tui/nmt-route-table.c:229
+msgid "No custom routes are defined."
+msgstr "Ðетипових маршрутів не визначено."
+
+#: ../clients/tui/nmt-slave-list.c:137
+msgid "Select the type of slave connection you wish to add."
+msgstr "Виберіть тип підлеглого з’єднаннÑ, Ñке ви хочете додати."
+
+#: ../clients/tui/nmt-widget-list.c:141
+msgid "Add..."
+msgstr "Додати…"
+
+#: ../clients/tui/nmt-widget-list.c:204
+msgid "Remove"
+msgstr "Вилучити"
+
+#: ../clients/tui/nmtui-connect.c:90
+msgid "Activation failed"
+msgstr "Ðевдала Ñпроба активації"
+
+#: ../clients/tui/nmtui-connect.c:145
+msgid "Connecting..."
+msgstr "Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ..."
+
+#: ../clients/tui/nmtui-connect.c:180 ../clients/tui/nmtui-connect.c:211
+#, c-format
+msgid "Could not activate connection: %s"
+msgstr "Ðе вдалоÑÑ Ð·Ð°Ð´Ñ–Ñти з’єднаннÑ: %s"
+
+#: ../clients/tui/nmtui-connect.c:271 ../clients/tui/nmtui-connect.c:320
+msgid "Activate"
+msgstr "Ðктивізувати"
+
+#: ../clients/tui/nmtui-connect.c:273
+msgid "Deactivate"
+msgstr "Вимкнути"
+
+#: ../clients/tui/nmtui-connect.c:325 ../clients/tui/nmtui-edit.c:121
+#: ../clients/tui/nmtui.c:111
+msgid "Quit"
+msgstr "Вийти"
+
+#: ../clients/tui/nmtui-connect.c:348
+#, c-format
+msgid "No such connection '%s'"
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s» не Ñ–Ñнує"
+
+#: ../clients/tui/nmtui-connect.c:350
+msgid "Connection is already active"
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð²Ð¶Ðµ Ñ” активним"
+
+#: ../clients/tui/nmtui-edit.c:226
+msgid "Create"
+msgstr "Створити"
+
+#: ../clients/tui/nmtui-edit.c:368
+msgid "Select the type of connection you wish to create."
+msgstr "Виберіть тип з’єднаннÑ, Ñке Ñлід Ñтворити."
+
+#: ../clients/tui/nmtui-edit.c:376
+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 не вÑтановлено або вÑтановлено неналежним "
+"чином."
+
+#: ../clients/tui/nmtui-edit.c:412 ../clients/tui/nmtui-edit.c:428
+msgid "New Connection"
+msgstr "Ðове з’єднаннÑ"
+
+#: ../clients/tui/nmtui-edit.c:467
+#, c-format
+msgid "Unable to delete connection: %s"
+msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ з’єднаннÑ: %s"
+
+#: ../clients/tui/nmtui-edit.c:506
+#, c-format
+#| msgid "Could not delete connection: %s"
+msgid "Could not delete connection '%s': %s"
+msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s»: %s"
+
+#: ../clients/tui/nmtui-edit.c:527
+#, c-format
+msgid "Are you sure you want to delete the connection '%s'?"
+msgstr "Ви Ñправді хочете вилучити Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s»?"
+
+#: ../clients/tui/nmtui-hostname.c:47
+msgid "Set Hostname"
+msgstr "Ð’Ñтановити назву вузла"
+
+#: ../clients/tui/nmtui-hostname.c:55
+msgid "Hostname"
+msgstr "Ðазва вузла"
+
+#. Translators: this indicates the result. ie, "I have set the hostname to ..."
+#: ../clients/tui/nmtui-hostname.c:118
+#, c-format
+msgid "Set hostname to '%s'"
+msgstr "Ð’Ñтановити назву вузла «%s»"
+
+#: ../clients/tui/nmtui-hostname.c:120
+#, c-format
+msgid "Unable to set hostname: %s"
+msgstr "Ðе вдалоÑÑ Ð²Ñтановити назву вузла: %s"
+
+#: ../clients/tui/nmtui.c:56 ../clients/tui/nmtui.c:59
+msgid "connection"
+msgstr "з’єднаннÑ"
+
+#: ../clients/tui/nmtui.c:57
+msgid "Edit a connection"
+msgstr "Змінити Ð·Ð°Ð¿Ð¸Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ"
+
+#: ../clients/tui/nmtui.c:60
+msgid "Activate a connection"
+msgstr "ЗадіÑти з’єднаннÑ"
+
+#: ../clients/tui/nmtui.c:62
+msgid "new hostname"
+msgstr "нова назва вузла"
+
+#: ../clients/tui/nmtui.c:63
+msgid "Set system hostname"
+msgstr "Ð’Ñтановити назву вузла ÑиÑтеми"
+
+#: ../clients/tui/nmtui.c:86
+msgid "NetworkManager TUI"
+msgstr "КонÑольний Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð´Ð¾ NetworkManager"
+
+#: ../clients/tui/nmtui.c:94
+msgid "Please select an option"
+msgstr "Будь лаÑка, виберіть варіант"
+
+#: ../clients/tui/nmtui.c:146
+msgid "Usage"
+msgstr "КориÑтуваннÑ"
+
+#: ../clients/tui/nmtui.c:227
+msgid "Could not parse arguments"
+msgstr "Ðе вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ аргументи"
+
+#: ../clients/tui/nmtui.c:237
+#, c-format
+#| msgid "Could not activate connection: %s"
+msgid "Could not contact NetworkManager: %s.\n"
+msgstr "Ðе вдалоÑÑ Ð·Ð²â€™ÑзатиÑÑ Ñ–Ð· NetworkManager: %s.\n"
+
+#: ../clients/tui/nmtui.c:242
+msgid "NetworkManager is not running."
+msgstr "NetworkManager не запущено."
+
+#: ../libnm-core/crypto.c:120 ../libnm-util/crypto.c:133
#, c-format
msgid "PEM key file had no end tag '%s'."
msgstr "У файлі ключа PEM не міÑтитьÑÑ Ð·Ð°Ð²ÐµÑ€ÑˆÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ теґу «%s»."
-#: ../libnm-util/crypto.c:146
+#: ../libnm-core/crypto.c:133 ../libnm-util/crypto.c:146
#, c-format
msgid "Doesn't look like a PEM private key file."
msgstr "Ймовірно, цей файл не є файлом закритого ключа PEM."
-#: ../libnm-util/crypto.c:163
+#: ../libnm-core/crypto.c:150 ../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:171
+#: ../libnm-core/crypto.c:158 ../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:181
+#: ../libnm-core/crypto.c:168 ../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:192
+#: ../libnm-core/crypto.c:179 ../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:199
+#: ../libnm-core/crypto.c:186 ../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:214
+#: ../libnm-core/crypto.c:201 ../libnm-util/crypto.c:214
#, c-format
msgid "Malformed PEM file: unknown private key cipher '%s'."
msgstr ""
"Помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° PEM: невідоме ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°ÐºÑ€Ð¸Ñ‚Ð¾Ð³Ð¾ ключа «%s»."
-#: ../libnm-util/crypto.c:233
+#: ../libnm-core/crypto.c:220 ../libnm-util/crypto.c:233
#, c-format
msgid "Could not decode private key."
msgstr "Ðе вдалоÑÑ Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ñ‚Ð¸ закритий ключ."
-#: ../libnm-util/crypto.c:285
+#: ../libnm-core/crypto.c:274 ../libnm-util/crypto.c:285
msgid "Failed to find expected PKCS#8 start tag."
msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ очікуваний початковий теґ PKCS#8."
-#: ../libnm-util/crypto.c:293
+#: ../libnm-core/crypto.c:282 ../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
+#: ../libnm-core/crypto.c:301 ../libnm-util/crypto.c:312
msgid "Failed to decode PKCS#8 private key."
msgstr "Ðе вдалоÑÑ Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ñ‚Ð¸ закритий ключ PKCS#8."
-#: ../libnm-util/crypto.c:354
+#: ../libnm-core/crypto.c:343 ../libnm-util/crypto.c:354
#, c-format
msgid "IV must be an even number of bytes in length."
msgstr "Довжина ВІ має дорівнювати парній кількоÑÑ‚Ñ– байтів."
-#: ../libnm-util/crypto.c:368
+#: ../libnm-core/crypto.c:357 ../libnm-util/crypto.c:368
#, c-format
msgid "IV contains non-hexadecimal digits."
msgstr "ВІ міÑтить не шіÑтнадцÑткові цифри."
-#: ../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
+#: ../libnm-core/crypto.c:397 ../libnm-core/crypto_gnutls.c:152
+#: ../libnm-core/crypto_gnutls.c:270 ../libnm-core/crypto_nss.c:172
+#: ../libnm-core/crypto_nss.c:334 ../libnm-util/crypto.c:408
+#: ../libnm-util/crypto_gnutls.c:151 ../libnm-util/crypto_gnutls.c:268
+#: ../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:518
+#: ../libnm-core/crypto.c:503 ../libnm-util/crypto.c:518
#, c-format
msgid "Unable to determine private key type."
msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ тип закритого ключа."
-#: ../libnm-util/crypto.c:573
+#: ../libnm-core/crypto.c:511
+#, c-format
+msgid "Password provided, but key was not encrypted."
+msgstr "Ðадано пароль, але ключ не зашифровано."
+
+#: ../libnm-core/crypto.c:561 ../libnm-util/crypto.c:573
#, c-format
msgid "PEM certificate had no start tag '%s'."
msgstr "Сертифікат PEM не міÑтить початкового теґу «%s»."
-#: ../libnm-util/crypto.c:582
+#: ../libnm-core/crypto.c:570 ../libnm-util/crypto.c:582
#, c-format
msgid "PEM certificate had no end tag '%s'."
msgstr "Сертифікат PEM не міÑтить завершального теґу «%s»."
-#: ../libnm-util/crypto.c:600
+#: ../libnm-core/crypto.c:588 ../libnm-util/crypto.c:600
#, c-format
msgid "Failed to decode certificate."
msgstr "Ðе вдалоÑÑ Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ñ‚Ð¸ Ñертифікат."
-#: ../libnm-util/crypto_gnutls.c:50
+#: ../libnm-core/crypto_gnutls.c:51 ../libnm-util/crypto_gnutls.c:51
msgid "Failed to initialize the crypto engine."
msgstr "Ðе вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ рушій шифруваннÑ."
-#: ../libnm-util/crypto_gnutls.c:92
+#: ../libnm-core/crypto_gnutls.c:93 ../libnm-util/crypto_gnutls.c:93
#, c-format
msgid "Failed to initialize the MD5 engine: %s / %s."
msgstr "Ðе вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ рушій обчиÑÐ»ÐµÐ½Ð½Ñ MD5: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:158
+#: ../libnm-core/crypto_gnutls.c:160 ../libnm-util/crypto_gnutls.c:159
#, c-format
msgid "Invalid IV length (must be at least %zd)."
msgstr "Ðекоректна довжина ВІ (має бути принаймні %zd)."
-#: ../libnm-util/crypto_gnutls.c:169
+#: ../libnm-core/crypto_gnutls.c:171 ../libnm-util/crypto_gnutls.c:170
#, c-format
msgid "Failed to initialize the decryption cipher context: %s / %s."
msgstr "Ðе вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ контекÑÑ‚ шифру декодуваннÑ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:178
+#: ../libnm-core/crypto_gnutls.c:180 ../libnm-util/crypto_gnutls.c:179
#, c-format
msgid "Failed to set symmetric key for decryption: %s / %s."
msgstr "Ðе вдалоÑÑ Ð²Ñтановити Ñиметричний ключ Ð´Ð»Ñ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:187
+#: ../libnm-core/crypto_gnutls.c:189 ../libnm-util/crypto_gnutls.c:188
#, c-format
msgid "Failed to set IV for decryption: %s / %s."
msgstr "Ðе вдалоÑÑ Ð²Ñтановити ВІ Ð´Ð»Ñ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:196
+#: ../libnm-core/crypto_gnutls.c:198 ../libnm-util/crypto_gnutls.c:197
#, c-format
msgid "Failed to decrypt the private key: %s / %s."
msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ñ‚Ð¸ закритий ключ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:206 ../libnm-util/crypto_nss.c:260
+#: ../libnm-core/crypto_gnutls.c:208 ../libnm-core/crypto_nss.c:262
+#: ../libnm-util/crypto_gnutls.c:207 ../libnm-util/crypto_nss.c:260
#, c-format
msgid "Failed to decrypt the private key: unexpected padding length."
msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ñ‚Ð¸ закритий ключ: неочікувана довжина доповненнÑ."
-#: ../libnm-util/crypto_gnutls.c:217 ../libnm-util/crypto_nss.c:271
+#: ../libnm-core/crypto_gnutls.c:219 ../libnm-core/crypto_nss.c:273
+#: ../libnm-util/crypto_gnutls.c:218 ../libnm-util/crypto_nss.c:271
#, c-format
msgid "Failed to decrypt the private key."
msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ñ‚Ð¸ закритий ключ."
-#: ../libnm-util/crypto_gnutls.c:289
+#: ../libnm-core/crypto_gnutls.c:292 ../libnm-util/crypto_gnutls.c:290
#, c-format
msgid "Failed to initialize the encryption cipher context: %s / %s."
msgstr "Ðе вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ контекÑÑ‚ шифру кодуваннÑ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:298
+#: ../libnm-core/crypto_gnutls.c:301 ../libnm-util/crypto_gnutls.c:299
#, c-format
msgid "Failed to set symmetric key for encryption: %s / %s."
msgstr "Ðе вдалоÑÑ Ð²Ñтановити Ñиметричний ключ Ð´Ð»Ñ ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:308
+#: ../libnm-core/crypto_gnutls.c:311 ../libnm-util/crypto_gnutls.c:309
#, c-format
msgid "Failed to set IV for encryption: %s / %s."
msgstr "Ðе вдалоÑÑ Ð²Ñтановити ВІ Ð´Ð»Ñ ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:317
+#: ../libnm-core/crypto_gnutls.c:320 ../libnm-util/crypto_gnutls.c:318
#, c-format
msgid "Failed to encrypt the data: %s / %s."
msgstr "Ðе вдалоÑÑ Ð·Ð°ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ñ‚Ð¸ дані: %s / %s."
-#: ../libnm-util/crypto_gnutls.c:357
+#: ../libnm-core/crypto_gnutls.c:360 ../libnm-util/crypto_gnutls.c:358
#, c-format
msgid "Error initializing certificate data: %s"
msgstr "Помилка під Ñ‡Ð°Ñ Ñпроби ініціалізації даних Ñертифіката: %s"
-#: ../libnm-util/crypto_gnutls.c:379
+#: ../libnm-core/crypto_gnutls.c:382 ../libnm-util/crypto_gnutls.c:380
#, c-format
msgid "Couldn't decode certificate: %s"
msgstr "Ðе вдалоÑÑ Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ñ‚Ð¸ Ñертифікат: %s"
-#: ../libnm-util/crypto_gnutls.c:403
+#: ../libnm-core/crypto_gnutls.c:407 ../libnm-util/crypto_gnutls.c:404
#, c-format
msgid "Couldn't initialize PKCS#12 decoder: %s"
msgstr "Ðе вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ інÑтрумент Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ PKCS#12: %s"
-#: ../libnm-util/crypto_gnutls.c:416
+#: ../libnm-core/crypto_gnutls.c:420 ../libnm-util/crypto_gnutls.c:417
#, c-format
msgid "Couldn't decode PKCS#12 file: %s"
msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ñ‚Ð¸ файл PKCS#12: %s"
-#: ../libnm-util/crypto_gnutls.c:428
+#: ../libnm-core/crypto_gnutls.c:432 ../libnm-util/crypto_gnutls.c:429
#, c-format
msgid "Couldn't verify PKCS#12 file: %s"
msgstr "Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€Ð¸Ñ‚Ð¸ файл PKCS#12: %s"
-#: ../libnm-util/crypto_gnutls.c:456
+#: ../libnm-core/crypto_gnutls.c:461 ../libnm-util/crypto_gnutls.c:457
#, c-format
msgid "Couldn't initialize PKCS#8 decoder: %s"
msgstr "Ðе вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ інÑтрумент Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ PKCS#8: %s"
-#: ../libnm-util/crypto_gnutls.c:479
+#: ../libnm-core/crypto_gnutls.c:484 ../libnm-util/crypto_gnutls.c:480
#, c-format
msgid "Couldn't decode PKCS#8 file: %s"
msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ñ‚Ð¸ файл PKCS#8: %s"
-#: ../libnm-util/crypto_nss.c:56
+#: ../libnm-core/crypto_nss.c:57 ../libnm-util/crypto_nss.c:56
#, c-format
msgid "Failed to initialize the crypto engine: %d."
msgstr "Ðе вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ рушій шифруваннÑ: %d."
-#: ../libnm-util/crypto_nss.c:107
+#: ../libnm-core/crypto_nss.c:108 ../libnm-util/crypto_nss.c:107
#, c-format
msgid "Failed to initialize the MD5 context: %d."
msgstr "Ðе вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ контекÑÑ‚ MD5: %d."
-#: ../libnm-util/crypto_nss.c:178
+#: ../libnm-core/crypto_nss.c:180 ../libnm-util/crypto_nss.c:178
#, c-format
msgid "Invalid IV length (must be at least %d)."
msgstr "Ðекоректна довжина ВІ (має бути принаймні %d)."
-#: ../libnm-util/crypto_nss.c:189
+#: ../libnm-core/crypto_nss.c:191 ../libnm-util/crypto_nss.c:189
#, c-format
msgid "Failed to initialize the decryption cipher slot."
msgstr "Ðе вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ Ñлот шифру декодуваннÑ."
-#: ../libnm-util/crypto_nss.c:199
+#: ../libnm-core/crypto_nss.c:201 ../libnm-util/crypto_nss.c:199
#, c-format
msgid "Failed to set symmetric key for decryption."
msgstr "Ðе вдалоÑÑ Ð²Ñтановити Ñиметричний ключ Ð´Ð»Ñ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ."
-#: ../libnm-util/crypto_nss.c:209
+#: ../libnm-core/crypto_nss.c:211 ../libnm-util/crypto_nss.c:209
#, c-format
msgid "Failed to set IV for decryption."
msgstr "Ðе вдалоÑÑ Ð²Ñтановити ВІ Ð´Ð»Ñ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ."
-#: ../libnm-util/crypto_nss.c:217
+#: ../libnm-core/crypto_nss.c:219 ../libnm-util/crypto_nss.c:217
#, c-format
msgid "Failed to initialize the decryption context."
msgstr "Ðе вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ контекÑÑ‚ розшифруваннÑ."
-#: ../libnm-util/crypto_nss.c:230
+#: ../libnm-core/crypto_nss.c:232 ../libnm-util/crypto_nss.c:230
#, c-format
msgid "Failed to decrypt the private key: %d."
msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ñ‚Ð¸ закритий ключ: %d."
-#: ../libnm-util/crypto_nss.c:238
+#: ../libnm-core/crypto_nss.c:240 ../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:249
+#: ../libnm-core/crypto_nss.c:251 ../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:353
+#: ../libnm-core/crypto_nss.c:356 ../libnm-util/crypto_nss.c:353
#, c-format
msgid "Failed to initialize the encryption cipher slot."
msgstr "Ðе вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ Ñлот шифру розкодуваннÑ."
-#: ../libnm-util/crypto_nss.c:361
+#: ../libnm-core/crypto_nss.c:364 ../libnm-util/crypto_nss.c:361
#, c-format
msgid "Failed to set symmetric key for encryption."
msgstr "Ðе вдалоÑÑ Ð²Ñтановити Ñиметричний ключ Ð´Ð»Ñ ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ."
-#: ../libnm-util/crypto_nss.c:369
+#: ../libnm-core/crypto_nss.c:372 ../libnm-util/crypto_nss.c:369
#, c-format
msgid "Failed to set IV for encryption."
msgstr "Ðе вдалоÑÑ Ð²Ñтановити вектор ініціалізації Ð´Ð»Ñ ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ."
-#: ../libnm-util/crypto_nss.c:377
+#: ../libnm-core/crypto_nss.c:380 ../libnm-util/crypto_nss.c:377
#, c-format
msgid "Failed to initialize the encryption context."
msgstr "Ðе вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ контекÑÑ‚ шифруваннÑ."
-#: ../libnm-util/crypto_nss.c:385
+#: ../libnm-core/crypto_nss.c:388 ../libnm-util/crypto_nss.c:385
#, c-format
msgid "Failed to encrypt: %d."
msgstr "Ðе вдалоÑÑ Ð·Ð°ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ñ‚Ð¸: %d."
-#: ../libnm-util/crypto_nss.c:393
+#: ../libnm-core/crypto_nss.c:396 ../libnm-util/crypto_nss.c:393
#, c-format
msgid "Unexpected amount of data after encrypting."
msgstr "Ðеочікуваний об’єм даних піÑÐ»Ñ ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ."
-#: ../libnm-util/crypto_nss.c:433
+#: ../libnm-core/crypto_nss.c:436 ../libnm-util/crypto_nss.c:433
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ñ‚Ð¸ Ñертифікат: %d"
-#: ../libnm-util/crypto_nss.c:468
+#: ../libnm-core/crypto_nss.c:471
#, c-format
-msgid "Couldn't convert password to UCS2: %d"
-msgstr "Ðе вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð½Ð° UCS2: %d"
+msgid "Password must be UTF-8"
+msgstr "Пароль має бути вказано у кодуванні UTF-8"
-#: ../libnm-util/crypto_nss.c:496
+#: ../libnm-core/crypto_nss.c:501 ../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:505
+#: ../libnm-core/crypto_nss.c:510 ../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:514
+#: ../libnm-core/crypto_nss.c:519 ../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:558
+#: ../libnm-core/crypto_nss.c:564 ../libnm-util/crypto_nss.c:558
msgid "Could not generate random data."
msgstr "Ðе вдалоÑÑ Ñтворити пÑевдовипадкові дані."
-#: ../libnm-util/nm-setting-8021x.c:594
+#: ../libnm-core/nm-connection.c:225
+msgid "wrong type; should be a list of strings."
+msgstr "помилковий тип; має бути ÑпиÑок Ñ€Ñдків."
+
+#: ../libnm-core/nm-connection.c:280
+#| msgid "Error: unknown setting '%s'\n"
+msgid "unknown setting name"
+msgstr "невідома назва параметра"
+
+#: ../libnm-core/nm-connection.c:763
+msgid "setting not found"
+msgstr "параметра не знайдено"
+
+#: ../libnm-core/nm-connection.c:827
+#| msgid "Error: '%s' setting not present in the connection\n"
+msgid "setting not allowed in slave connection"
+msgstr "параметр не можна викориÑтовувати у підлеглому з’єднанні"
+
+#: ../libnm-core/nm-connection.c:838
+#| msgid "'%s' setting is required for the connection when the property is set"
+msgid "setting is required for non-slave connections"
+msgstr "Ð´Ð»Ñ Ð½ÐµÐ¿Ñ–Ð´Ð»ÐµÐ³Ð»Ð¸Ñ… з’єднань потрібен параметр"
+
+#: ../libnm-core/nm-connection.c:904
+#| msgid "Unable to delete connection: %s"
+msgid "Unexpected failure to verify the connection"
+msgstr "Ðеочікувана помилка під Ñ‡Ð°Ñ Ñпроби перевірити з’єднаннÑ"
+
+#: ../libnm-core/nm-connection.c:935
+#| msgid "Unable to delete connection: %s"
+msgid "Unexpected failure to normalize the connection"
+msgstr "Ðеочікувана помилка під Ñ‡Ð°Ñ Ñпроби нормалізувати з’єднаннÑ"
+
+#: ../libnm-core/nm-connection.c:1399 ../libnm-core/nm-setting-8021x.c:2272
+#: ../libnm-core/nm-setting-8021x.c:2289 ../libnm-core/nm-setting-8021x.c:2319
+#: ../libnm-core/nm-setting-8021x.c:2336 ../libnm-core/nm-setting-8021x.c:2377
+#: ../libnm-core/nm-setting-8021x.c:2389 ../libnm-core/nm-setting-8021x.c:2407
+#: ../libnm-core/nm-setting-8021x.c:2419 ../libnm-core/nm-setting-8021x.c:2443
+#: ../libnm-core/nm-setting-8021x.c:2625 ../libnm-core/nm-setting-adsl.c:190
+#: ../libnm-core/nm-setting-bluetooth.c:121
+#: ../libnm-core/nm-setting-bluetooth.c:139
+#: ../libnm-core/nm-setting-cdma.c:142
+#: ../libnm-core/nm-setting-connection.c:768
+#: ../libnm-core/nm-setting-connection.c:784
+#: ../libnm-core/nm-setting-connection.c:814
+#: ../libnm-core/nm-setting-ip-config.c:1837
+#: ../libnm-core/nm-setting-olpc-mesh.c:113
+#: ../libnm-core/nm-setting-pppoe.c:143 ../libnm-core/nm-setting-vpn.c:400
+#: ../libnm-core/nm-setting-wimax.c:117
+#: ../libnm-core/nm-setting-wireless-security.c:862
+#: ../libnm-core/nm-setting-wireless.c:694 ../libnm-util/nm-setting.c:1372
+#: ../libnm-util/nm-setting.c:1391 ../libnm-util/nm-setting.c:1409
+#: ../libnm-util/nm-setting-8021x.c:2284 ../libnm-util/nm-setting-8021x.c:2301
+#: ../libnm-util/nm-setting-8021x.c:2342 ../libnm-util/nm-setting-8021x.c:2359
+#: ../libnm-util/nm-setting-8021x.c:2411 ../libnm-util/nm-setting-8021x.c:2423
+#: ../libnm-util/nm-setting-8021x.c:2441 ../libnm-util/nm-setting-8021x.c:2453
+#: ../libnm-util/nm-setting-8021x.c:2477 ../libnm-util/nm-setting-8021x.c:2655
+#: ../libnm-util/nm-setting-adsl.c:210
+#: ../libnm-util/nm-setting-bluetooth.c:142
+#: ../libnm-util/nm-setting-bluetooth.c:160
+#: ../libnm-util/nm-setting-cdma.c:163
+#: ../libnm-util/nm-setting-connection.c:769
+#: ../libnm-util/nm-setting-connection.c:785
+#: ../libnm-util/nm-setting-connection.c:846
+#: ../libnm-util/nm-setting-ip4-config.c:852
+#: ../libnm-util/nm-setting-ip6-config.c:833
+#: ../libnm-util/nm-setting-ip6-config.c:897
+#: ../libnm-util/nm-setting-olpc-mesh.c:124
+#: ../libnm-util/nm-setting-pppoe.c:164 ../libnm-util/nm-setting-vpn.c:424
+#: ../libnm-util/nm-setting-wimax.c:139
+#: ../libnm-util/nm-setting-wireless-security.c:892
+#: ../libnm-util/nm-setting-wireless.c:752
+msgid "property is missing"
+msgstr "не вказано влаÑтивоÑÑ‚Ñ–"
+
+#: ../libnm-core/nm-setting-8021x.c:579 ../libnm-util/nm-setting-8021x.c:598
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"
+#: ../libnm-core/nm-setting-8021x.c:894 ../libnm-core/nm-setting-8021x.c:1158
+#: ../libnm-core/nm-setting-8021x.c:1478 ../libnm-util/nm-setting-8021x.c:916
+#: ../libnm-util/nm-setting-8021x.c:1179 ../libnm-util/nm-setting-8021x.c:1502
msgid "invalid certificate format"
msgstr "некоректний формат Ñертифіката"
-#: ../libnm-util/nm-setting-8021x.c:1767
-#| msgid "invalid gateway '%s'"
+#: ../libnm-core/nm-setting-8021x.c:1760 ../libnm-util/nm-setting-8021x.c:1771
msgid "invalid private key"
msgstr "некоректний закритий ключ"
-#: ../libnm-util/nm-setting-8021x.c:2078
-#| msgid "Failed to decrypt the private key."
+#: ../libnm-core/nm-setting-8021x.c:2070 ../libnm-util/nm-setting-8021x.c:2082
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-core/nm-setting-8021x.c:2279 ../libnm-core/nm-setting-8021x.c:2296
+#: ../libnm-core/nm-setting-8021x.c:2326 ../libnm-core/nm-setting-8021x.c:2343
+#: ../libnm-core/nm-setting-8021x.c:2383 ../libnm-core/nm-setting-8021x.c:2395
+#: ../libnm-core/nm-setting-8021x.c:2413 ../libnm-core/nm-setting-8021x.c:2425
+#: ../libnm-core/nm-setting-8021x.c:2450 ../libnm-core/nm-setting-adsl.c:197
+#: ../libnm-core/nm-setting-adsl.c:206 ../libnm-core/nm-setting-cdma.c:158
+#: ../libnm-core/nm-setting-cdma.c:167
+#: ../libnm-core/nm-setting-connection.c:775
+#: ../libnm-core/nm-setting-connection.c:825
+#: ../libnm-core/nm-setting-gsm.c:226 ../libnm-core/nm-setting-gsm.c:283
+#: ../libnm-core/nm-setting-gsm.c:292
+#: ../libnm-core/nm-setting-ip-config.c:1844
+#: ../libnm-core/nm-setting-ip4-config.c:178
+#: ../libnm-core/nm-setting-pppoe.c:150 ../libnm-core/nm-setting-pppoe.c:159
+#: ../libnm-core/nm-setting-vpn.c:409 ../libnm-core/nm-setting-vpn.c:419
+#: ../libnm-core/nm-setting-wimax.c:126
+#: ../libnm-core/nm-setting-wireless-security.c:892
+#: ../libnm-core/nm-setting-wireless-security.c:900
+#: ../libnm-core/nm-setting-wireless-security.c:924
+#: ../libnm-util/nm-setting-8021x.c:2291 ../libnm-util/nm-setting-8021x.c:2308
+#: ../libnm-util/nm-setting-8021x.c:2349 ../libnm-util/nm-setting-8021x.c:2366
+#: ../libnm-util/nm-setting-8021x.c:2417 ../libnm-util/nm-setting-8021x.c:2429
+#: ../libnm-util/nm-setting-8021x.c:2447 ../libnm-util/nm-setting-8021x.c:2459
+#: ../libnm-util/nm-setting-8021x.c:2484 ../libnm-util/nm-setting-adsl.c:217
+#: ../libnm-util/nm-setting-adsl.c:226 ../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
+#: ../libnm-util/nm-setting-connection.c:776
+#: ../libnm-util/nm-setting-connection.c:853
+#: ../libnm-util/nm-setting-gsm.c:283 ../libnm-util/nm-setting-gsm.c:340
+#: ../libnm-util/nm-setting-gsm.c:349
+#: ../libnm-util/nm-setting-ip4-config.c:917
+#: ../libnm-util/nm-setting-ip4-config.c:926
+#: ../libnm-util/nm-setting-pppoe.c:171 ../libnm-util/nm-setting-pppoe.c:180
+#: ../libnm-util/nm-setting-vpn.c:433 ../libnm-util/nm-setting-vpn.c:443
+#: ../libnm-util/nm-setting-wimax.c:148
+#: ../libnm-util/nm-setting-wireless-security.c:922
+#: ../libnm-util/nm-setting-wireless-security.c:930
+#: ../libnm-util/nm-setting-wireless-security.c:954
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
+#: ../libnm-core/nm-setting-8021x.c:2308 ../libnm-core/nm-setting-8021x.c:2355
+#: ../libnm-util/nm-setting-8021x.c:2319 ../libnm-util/nm-setting-8021x.c:2331
+#: ../libnm-util/nm-setting-8021x.c:2377 ../libnm-util/nm-setting-8021x.c:2389
#, 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
+#: ../libnm-core/nm-setting-8021x.c:2600 ../libnm-core/nm-setting-8021x.c:2634
+#: ../libnm-core/nm-setting-bluetooth.c:130
+#: ../libnm-core/nm-setting-infiniband.c:193
+#: ../libnm-core/nm-setting-infiniband.c:208
+#: ../libnm-core/nm-setting-ip4-config.c:169
+#: ../libnm-core/nm-setting-ip6-config.c:166
+#: ../libnm-core/nm-setting-olpc-mesh.c:142
+#: ../libnm-core/nm-setting-wimax.c:135 ../libnm-core/nm-setting-wired.c:621
+#: ../libnm-core/nm-setting-wired.c:631
+#: ../libnm-core/nm-setting-wireless-security.c:943
+#: ../libnm-core/nm-setting-wireless-security.c:952
+#: ../libnm-core/nm-setting-wireless-security.c:960
+#: ../libnm-core/nm-setting-wireless-security.c:968
+#: ../libnm-core/nm-setting-wireless-security.c:976
+#: ../libnm-core/nm-setting-wireless-security.c:985
+#: ../libnm-core/nm-setting-wireless-security.c:994
+#: ../libnm-core/nm-setting-wireless-security.c:1003
+#: ../libnm-core/nm-setting-wireless-security.c:1039
+#: ../libnm-core/nm-setting-wireless-security.c:1049
+#: ../libnm-core/nm-setting-wireless.c:755
+#: ../libnm-core/nm-setting-wireless.c:764
+#: ../libnm-core/nm-setting-wireless.c:773 ../libnm-util/nm-setting.c:1382
+#: ../libnm-util/nm-setting.c:1400 ../libnm-util/nm-setting.c:1419
+#: ../libnm-util/nm-setting-8021x.c:2630 ../libnm-util/nm-setting-8021x.c:2664
+#: ../libnm-util/nm-setting-bluetooth.c:151
+#: ../libnm-util/nm-setting-infiniband.c:206
+#: ../libnm-util/nm-setting-infiniband.c:222
+#: ../libnm-util/nm-setting-ip4-config.c:908
+#: ../libnm-util/nm-setting-ip6-config.c:888
+#: ../libnm-util/nm-setting-olpc-mesh.c:152
+#: ../libnm-util/nm-setting-wimax.c:157 ../libnm-util/nm-setting-wired.c:662
+#: ../libnm-util/nm-setting-wired.c:671
+#: ../libnm-util/nm-setting-wireless-security.c:973
+#: ../libnm-util/nm-setting-wireless-security.c:982
+#: ../libnm-util/nm-setting-wireless-security.c:990
+#: ../libnm-util/nm-setting-wireless-security.c:998
+#: ../libnm-util/nm-setting-wireless-security.c:1006
+#: ../libnm-util/nm-setting-wireless-security.c:1015
+#: ../libnm-util/nm-setting-wireless-security.c:1024
+#: ../libnm-util/nm-setting-wireless-security.c:1033
+#: ../libnm-util/nm-setting-wireless-security.c:1069
+#: ../libnm-util/nm-setting-wireless-security.c:1079
+#: ../libnm-util/nm-setting-wireless.c:812
+#: ../libnm-util/nm-setting-wireless.c:821
+#: ../libnm-util/nm-setting-wireless.c:830
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-core/nm-setting-8021x.c:2659 ../libnm-core/nm-setting-8021x.c:2669
+#: ../libnm-core/nm-setting-8021x.c:2679 ../libnm-core/nm-setting-8021x.c:2689
+#: ../libnm-core/nm-setting-8021x.c:2699 ../libnm-core/nm-setting-adsl.c:218
+#: ../libnm-core/nm-setting-adsl.c:230
+#: ../libnm-core/nm-setting-bluetooth.c:147
+#: ../libnm-core/nm-setting-wireless-security.c:871
+#: ../libnm-util/nm-setting-8021x.c:2689 ../libnm-util/nm-setting-8021x.c:2699
+#: ../libnm-util/nm-setting-8021x.c:2709 ../libnm-util/nm-setting-8021x.c:2719
+#: ../libnm-util/nm-setting-8021x.c:2729 ../libnm-util/nm-setting-adsl.c:238
#: ../libnm-util/nm-setting-adsl.c:250
-#: ../libnm-util/nm-setting-bluetooth.c:170
-#: ../libnm-util/nm-setting-wireless-security.c:903
+#: ../libnm-util/nm-setting-bluetooth.c:168
+#: ../libnm-util/nm-setting-wireless-security.c:901
#, c-format
msgid "'%s' is not a valid value for the property"
msgstr "«%s» не Ñ” коректним значеннÑм влаÑтивоÑÑ‚Ñ–"
-#: ../libnm-util/nm-setting-bluetooth.c:188
+#: ../libnm-core/nm-setting-bluetooth.c:169
#, c-format
-msgid "requires '%s' or '%s' setting"
-msgstr "Ñлід вказати параметр «%s» або «%s»"
+#| msgid "requires '%s' or '%s' setting"
+msgid "'%s' connection requires '%s' or '%s' setting"
+msgstr "Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s» потребує параметра «%s» або «%s»"
-#: ../libnm-util/nm-setting-bond.c:518
+#: ../libnm-core/nm-setting-bond.c:462 ../libnm-util/nm-setting-bond.c:503
#, c-format
msgid "invalid option '%s' or its value '%s'"
msgstr "некоректний параметр «%s» або його Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s»"
-#: ../libnm-util/nm-setting-bond.c:537
+#: ../libnm-core/nm-setting-bond.c:481 ../libnm-util/nm-setting-bond.c:522
#, c-format
msgid "only one of '%s' and '%s' can be set"
msgstr "можна вÑтановлювати лише одне з «%s» або «%s»"
-#: ../libnm-util/nm-setting-bond.c:548
+#: ../libnm-core/nm-setting-bond.c:492 ../libnm-util/nm-setting-bond.c:533
#, c-format
msgid "mandatory option '%s' is missing"
msgstr "пропущено обов’Ñзковий параметр «%s»"
-#: ../libnm-util/nm-setting-bond.c:557
+#: ../libnm-core/nm-setting-bond.c:501 ../libnm-util/nm-setting-bond.c:542
#, c-format
msgid "'%s' is not a valid value for '%s'"
msgstr "«%s» не Ñ” коректним значеннÑм «%s»"
-#: ../libnm-util/nm-setting-bond.c:570
+#: ../libnm-core/nm-setting-bond.c:514 ../libnm-util/nm-setting-bond.c:555
#, c-format
msgid "'%s=%s' is incompatible with '%s > 0'"
msgstr "«%s=%s» Ñ” неÑуміÑним з «%s > 0»"
-#: ../libnm-util/nm-setting-bond.c:583
+#: ../libnm-core/nm-setting-bond.c:527 ../libnm-util/nm-setting-bond.c:568
#, c-format
msgid "'%s' is not a valid interface name for '%s' option"
msgstr "«%s» не Ñ” коректною назвою інтерфейÑу Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «%s»"
-#: ../libnm-util/nm-setting-bond.c:593
+#: ../libnm-core/nm-setting-bond.c:537 ../libnm-util/nm-setting-bond.c:578
#, c-format
msgid "'%s' option is only valid for '%s=%s'"
msgstr "параметр «%s» можна викориÑтовувати, лише Ñкщо «%s=%s»"
-#: ../libnm-util/nm-setting-bond.c:606
+#: ../libnm-core/nm-setting-bond.c:550 ../libnm-util/nm-setting-bond.c:591
#, 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
+#: ../libnm-core/nm-setting-bond.c:563 ../libnm-core/nm-setting-bond.c:572
+#: ../libnm-core/nm-setting-bond.c:592 ../libnm-core/nm-setting-bond.c:628
+#: ../libnm-util/nm-setting-bond.c:604 ../libnm-util/nm-setting-bond.c:613
+#: ../libnm-util/nm-setting-bond.c:633 ../libnm-util/nm-setting-bond.c:669
#, c-format
msgid "'%s' option requires '%s' option to be set"
msgstr "викориÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «%s» вимагає вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «%s»"
-#: ../libnm-util/nm-setting-bond.c:659
+#: ../libnm-core/nm-setting-bond.c:603 ../libnm-util/nm-setting-bond.c:644
#, c-format
msgid "'%s' option is empty"
msgstr "параметр «%s» є порожнім"
-#: ../libnm-util/nm-setting-bond.c:671
+#: ../libnm-core/nm-setting-bond.c:615 ../libnm-util/nm-setting-bond.c:656
#, c-format
msgid "'%s' is not a valid IPv4 address for '%s' option"
msgstr "«%s» не Ñ” припуÑтимою адреÑою IPv4 Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «%s»"
+#: ../libnm-core/nm-setting-bond.c:642 ../libnm-util/nm-setting-bond.c:683
+#, c-format
+#| msgid "'%s' option is only valid for '%s=%s'"
+msgid "'%s' option is only valid with mode '%s'"
+msgstr "параметр «%s» є коректним лише у режимі «%s»"
+
+#: ../libnm-core/nm-setting-bridge-port.c:125
+#: ../libnm-core/nm-setting-bridge-port.c:137
#: ../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
+#: ../libnm-core/nm-setting-bridge-port.c:155
+#: ../libnm-core/nm-setting-team-port.c:98
+#, c-format
+#| msgid "missing option"
+msgid "missing setting"
+msgstr "пропущено параметр"
+
+#: ../libnm-core/nm-setting-bridge-port.c:166
+#: ../libnm-core/nm-setting-team-port.c:109
+#, c-format
+msgid ""
+"A connection with a '%s' setting must have the slave-type set to '%s'. "
+"Instead it is '%s'"
+msgstr ""
+"Ð”Ð»Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· параметром «%s» має бути вÑтановлено тип підлеглоÑÑ‚Ñ– «%s». "
+"ЗаміÑÑ‚ÑŒ цього маємо «%s»."
+
+#: ../libnm-core/nm-setting-bridge.c:206 ../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
+#: ../libnm-core/nm-setting-bridge.c:223 ../libnm-core/nm-setting-wired.c:595
+#: ../libnm-core/nm-setting-wired.c:655 ../libnm-util/nm-setting-bridge.c:287
+#: ../libnm-util/nm-setting-wired.c:637 ../libnm-util/nm-setting-wired.c:695
msgid "is not a valid MAC address"
msgstr "не Ñ” коректною MAC-адреÑою"
-#: ../libnm-util/nm-setting-cdma.c:170
+#: ../libnm-core/nm-setting-cdma.c:149 ../libnm-util/nm-setting-cdma.c:170
msgid "property is empty'"
msgstr "влаÑтивіÑÑ‚ÑŒ Ñ” порожньою"
-#: ../libnm-util/nm-setting-connection.c:812
+#: ../libnm-core/nm-setting-connection.c:747
#, c-format
-msgid "'%s' doesn't match the virtual interface name '%s'"
-msgstr "«%s» не відповідає назві віртуального інтерфейÑу «%s»"
+#| msgid "'%s' setting is required for the connection when the property is set"
+msgid "setting required for connection of type '%s'"
+msgstr "Ð´Ð»Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ‚Ð¸Ð¿Ñƒ «%s» потрібен параметр"
-#: ../libnm-util/nm-setting-connection.c:858
+#: ../libnm-core/nm-setting-connection.c:835
#, c-format
-msgid "requires presence of '%s' setting in the connection"
-msgstr "потребує Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s» у параметрах з’єднаннÑ"
+#| msgid "index '%s' is not valid"
+msgid "connection type '%s' is not valid"
+msgstr "тип Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s» Ñ” некоректним"
-#: ../libnm-util/nm-setting-connection.c:880
-msgid "IPv4 configuration is not allowed for slave"
-msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ IPv4 Ð´Ð»Ñ Ð¿Ñ–Ð´Ð»ÐµÐ³Ð»Ð¾Ð³Ð¾ приÑтрою неможливе"
+#: ../libnm-core/nm-setting-connection.c:870
+#: ../libnm-util/nm-setting-connection.c:878
+#, c-format
+#| msgid "Unknown log level '%s'"
+msgid "Unknown slave type '%s'"
+msgstr "Ðевідомий тип підлеглого «%s»"
-#: ../libnm-util/nm-setting-connection.c:893
-msgid "IPv6 configuration is not allowed for slave"
-msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ IPv6 Ð´Ð»Ñ Ð¿Ñ–Ð´Ð»ÐµÐ³Ð»Ð¾Ð³Ð¾ приÑтрою неможливе"
+#: ../libnm-core/nm-setting-connection.c:880
+#, c-format
+#| msgid "'%s' connections require '%s' in this property"
+msgid "Slave connections need a valid '%s' property"
+msgstr "Ð”Ð»Ñ Ð¿Ñ–Ð´Ð»ÐµÐ³Ð»Ð¸Ñ… з’єднань потрібна коректна влаÑтивіÑÑ‚ÑŒ «%s»"
+
+#: ../libnm-core/nm-setting-connection.c:901
+#, c-format
+msgid "Cannot set '%s' without '%s'"
+msgstr "Ðе можна вÑтановити «%s» без «%s»"
+
+#: ../libnm-core/nm-setting-connection.c:915
+#, c-format
+#| msgid "this property cannot be empty for '%s=%s'"
+msgid "property type should be set to '%s'"
+msgstr "тип влаÑтивоÑÑ‚Ñ– має бути вÑтановлено у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s»"
+
+#: ../libnm-core/nm-setting-connection.c:930
+#, c-format
+#| msgid "requires presence of '%s' setting in the connection"
+msgid "slave-type '%s' requires a '%s' setting in the connection"
+msgstr "тип підлеглого Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s» потребує параметра «%s» у з’єднанні"
-#: ../libnm-util/nm-setting-dcb.c:595
+#: ../libnm-core/nm-setting-connection.c:940
+#, c-format
+msgid ""
+"Detect a slave connection with '%s' set and a port type '%s'. '%s' should be "
+"set to '%s'"
+msgstr ""
+"Визначити підлегле Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð·Ñ– вÑтановленим «%s» Ñ– типом порту «%s». «%s» "
+"Ñлід вÑтановити у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s»"
+
+#: ../libnm-core/nm-setting-dcb.c:523 ../libnm-util/nm-setting-dcb.c:595
msgid "flags invalid"
msgstr "некоректні прапорці"
-#: ../libnm-util/nm-setting-dcb.c:604
+#: ../libnm-core/nm-setting-dcb.c:532 ../libnm-util/nm-setting-dcb.c:604
msgid "flags invalid - disabled"
msgstr "некоректні прапорці — вимкнено"
+#: ../libnm-core/nm-setting-dcb.c:558 ../libnm-core/nm-setting-dcb.c:607
#: ../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
+#: ../libnm-core/nm-setting-dcb.c:567 ../libnm-util/nm-setting-dcb.c:639
msgid "element invalid"
msgstr "некоректний елемент"
-#: ../libnm-util/nm-setting-dcb.c:654
+#: ../libnm-core/nm-setting-dcb.c:582 ../libnm-util/nm-setting-dcb.c:654
msgid "sum not 100%"
msgstr "Ñума не дорівнює 100%"
+#: ../libnm-core/nm-setting-dcb.c:616 ../libnm-core/nm-setting-dcb.c:648
#: ../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
+#: ../libnm-core/nm-setting-dcb.c:638 ../libnm-util/nm-setting-dcb.c:710
msgid "property missing"
msgstr "пропущено влаÑтивіÑÑ‚ÑŒ"
-#: ../libnm-util/nm-setting-gsm.c:297
+#: ../libnm-core/nm-setting-gsm.c:239 ../libnm-util/nm-setting-gsm.c:296
#, c-format
msgid "property value '%s' is empty or too long (>64)"
msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ–, «%s», Ñ” порожнім або надто довгим (>64)"
-#: ../libnm-util/nm-setting-gsm.c:329
+#: ../libnm-core/nm-setting-gsm.c:271 ../libnm-util/nm-setting-gsm.c:328
#, c-format
msgid "'%s' contains invalid char(s) (use [A-Za-z._-])"
msgstr "«%s» міÑтить некоректні Ñимволи (Ñлід викориÑтовувати [A-Za-z._-])"
-#: ../libnm-util/nm-setting-gsm.c:364
+#: ../libnm-core/nm-setting-gsm.c:306 ../libnm-util/nm-setting-gsm.c:363
#, c-format
msgid "'%s' length is invalid (should be 5 or 6 digits)"
msgstr "довжина «%s» є некоректною (має бути 5 або 6 цифр)"
-#: ../libnm-util/nm-setting-infiniband.c:228
+#: ../libnm-core/nm-setting-infiniband.c:218
+#: ../libnm-util/nm-setting-infiniband.c:232
msgid "not a valid interface name"
msgstr "не Ñ” коректною назвою інтерфейÑу"
-#: ../libnm-util/nm-setting-infiniband.c:236
+#: ../libnm-core/nm-setting-infiniband.c:226
+#: ../libnm-util/nm-setting-infiniband.c:240
msgid "Must specify a P_Key if specifying parent"
msgstr "Якщо вказано параметр parent, Ñлід вказати Ñ– P_Key"
-#: ../libnm-util/nm-setting-infiniband.c:246
+#: ../libnm-core/nm-setting-infiniband.c:236
+#: ../libnm-util/nm-setting-infiniband.c:250
msgid "InfiniBand P_Key connection did not specify parent interface name"
msgstr ""
"У запиÑÑ– Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð·Ð°ÐºÑ€Ð¸Ñ‚Ð¾Ð³Ð¾ ключа InfiniBand не вказано назви батьківÑького "
"інтерфейÑу"
-#: ../libnm-util/nm-setting-ip4-config.c:897
-#: ../libnm-util/nm-setting-ip6-config.c:822
+#: ../libnm-core/nm-setting-infiniband.c:272
+#: ../libnm-util/nm-setting-infiniband.c:286
#, c-format
-msgid "this property cannot be empty for '%s=%s'"
-msgstr "Ñ†Ñ Ð²Ð»Ð°ÑтивіÑÑ‚ÑŒ не може бути порожньою, Ñкщо «%s=%s»"
+msgid ""
+"interface name of software infiniband device must be '%s' or unset (instead "
+"it is '%s')"
+msgstr ""
+"назвою інтерфейÑу програмного приÑтрою infiniband має бути «%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
+#: ../libnm-core/nm-setting-infiniband.c:287
#, c-format
-msgid "this property is not allowed for '%s=%s'"
-msgstr "цю влаÑтивіÑÑ‚ÑŒ не можна заÑтоÑовувати до «%s=%s»"
+msgid "mtu for transport mode '%s' can be at most %d but it is %d"
+msgstr "mtu Ð´Ð»Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ñƒ Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ð½Ð½Ñ Â«%s» має не перевищувати %d, але маємо %d"
-#: ../libnm-util/nm-setting-ip4-config.c:978
+#: ../libnm-core/nm-setting-ip-config.c:79
#, c-format
-msgid "%d. IPv4 address is invalid"
-msgstr "%d. ÐдреÑа IPv4 Ñ” некоректною"
+#| msgid "invalid IPv4 address '%s'"
+msgid "Invalid IPv4 address '%s'"
+msgstr "Ðекоректна адреÑа IPv4, «%s»"
-#: ../libnm-util/nm-setting-ip4-config.c:988
+#: ../libnm-core/nm-setting-ip-config.c:79
#, c-format
-msgid "%d. IPv4 address has invalid prefix"
-msgstr "%d. ÐдреÑа IPv4 має некоректний префікÑ"
+#| msgid "invalid IPv6 address '%s'"
+msgid "Invalid IPv6 address '%s"
+msgstr "некоректна адреÑа IPv6, «%s»"
+
+#: ../libnm-core/nm-setting-ip-config.c:93
+#, c-format
+#| msgid "invalid IPv4 address '%s'"
+msgid "Invalid IPv4 address prefix '%u'"
+msgstr "Ðекоректний Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ Ð°Ð´Ñ€ÐµÑи IPv4, «%u»"
+
+#: ../libnm-core/nm-setting-ip-config.c:93
+#, c-format
+#| msgid "invalid IPv6 address '%s'"
+msgid "Invalid IPv6 address prefix '%u"
+msgstr "Ðекоректний Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ Ð°Ð´Ñ€ÐµÑи IPv6, «%u»"
+
+#: ../libnm-core/nm-setting-ip-config.c:111
+#, c-format
+#| msgid "invalid metric '%s'"
+msgid "Invalid routing metric '%s'"
+msgstr "Ðекоректна метрика маршрутизації, «%s»"
-#: ../libnm-util/nm-setting-ip4-config.c:998
+#: ../libnm-core/nm-setting-ip-config.c:1857
+#, c-format
+#| msgid "%d. IPv4 address is invalid"
+msgid "%d. DNS server address is invalid"
+msgstr "%d. ÐдреÑа Ñервера DNS Ñ” некоректною."
+
+#: ../libnm-core/nm-setting-ip-config.c:1873
+#, c-format
+#| msgid "%d. IPv4 address is invalid"
+msgid "%d. IP address is invalid"
+msgstr "%d. IP-адреÑа Ñ” некоректною."
+
+#: ../libnm-core/nm-setting-ip-config.c:1885
#, c-format
#| msgid "%d. IPv4 address has invalid prefix"
-msgid "%d. IPv4 address has invalid label '%s'"
-msgstr "%d. ÐдреÑа IPv4 має некоректну мітку, «%s»"
+msgid "%d. IP address has 'label' property with invalid type"
+msgstr "%d. IP-адреÑа має влаÑтивіÑÑ‚ÑŒ «label» некоректного типу"
-#: ../libnm-util/nm-setting-ip4-config.c:1009
+#: ../libnm-core/nm-setting-ip-config.c:1894
#, c-format
-msgid "IPv4 address / label count mismatch (%d vs %d)"
-msgstr "ÐевідповідніÑÑ‚ÑŒ кількоÑÑ‚Ñ– Ð°Ð´Ñ€ÐµÑ IPv4 Ñ– кількоÑÑ‚Ñ– міток (%d Ñ– %d)"
+#| msgid "%d. IPv4 address has invalid label '%s'"
+msgid "%d. IP address has invalid label '%s'"
+msgstr "%d. IP-адреÑа має некоректну мітку, «%s»"
-#: ../libnm-util/nm-setting-ip4-config.c:1025
+#: ../libnm-core/nm-setting-ip-config.c:1908
+msgid "gateway cannot be set if there are no addresses configured"
+msgstr "шлюз не може бути вÑтановлено, Ñкщо не налаштовано адреÑ"
+
+#: ../libnm-core/nm-setting-ip-config.c:1917
+#| msgid "property is invalid"
+msgid "gateway is invalid"
+msgstr "шлюз є некоректним"
+
+#: ../libnm-core/nm-setting-ip-config.c:1931
+#: ../libnm-util/nm-setting-ip4-config.c:966
#, c-format
msgid "%d. route is invalid"
msgstr "%d. Ðекоректний маршрут"
-#: ../libnm-util/nm-setting-ip4-config.c:1035
+#: ../libnm-core/nm-setting-ip4-config.c:123
+#: ../libnm-core/nm-setting-ip6-config.c:121
+#: ../libnm-util/nm-setting-ip4-config.c:862
+#: ../libnm-util/nm-setting-ip6-config.c:843
#, c-format
-msgid "%d. route has invalid prefix"
-msgstr "%d. Маршрут має некоректний префікÑ"
+msgid "this property cannot be empty for '%s=%s'"
+msgstr "Ñ†Ñ Ð²Ð»Ð°ÑтивіÑÑ‚ÑŒ не може бути порожньою, Ñкщо «%s=%s»"
-#: ../libnm-util/nm-setting-ip6-config.c:834
+#: ../libnm-core/nm-setting-ip4-config.c:135
+#: ../libnm-core/nm-setting-ip4-config.c:145
+#: ../libnm-core/nm-setting-ip4-config.c:157
+#: ../libnm-core/nm-setting-ip6-config.c:134
+#: ../libnm-core/nm-setting-ip6-config.c:144
+#: ../libnm-core/nm-setting-ip6-config.c:154
+#: ../libnm-util/nm-setting-ip4-config.c:874
+#: ../libnm-util/nm-setting-ip4-config.c:884
+#: ../libnm-util/nm-setting-ip4-config.c:896
+#: ../libnm-util/nm-setting-ip6-config.c:856
+#: ../libnm-util/nm-setting-ip6-config.c:866
+#: ../libnm-util/nm-setting-ip6-config.c:876
+#, c-format
+msgid "this property is not allowed for '%s=%s'"
+msgstr "цю влаÑтивіÑÑ‚ÑŒ не можна заÑтоÑовувати до «%s=%s»"
+
+#: ../libnm-core/nm-setting-ip6-config.c:133
+#: ../libnm-util/nm-setting-ip6-config.c:855
#, 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:762
+#: ../libnm-core/nm-setting-olpc-mesh.c:123
+#: ../libnm-core/nm-setting-wireless.c:704
+#: ../libnm-util/nm-setting-olpc-mesh.c:133
+#: ../libnm-util/nm-setting-wireless.c:761
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
+#: ../libnm-core/nm-setting-olpc-mesh.c:132
+#: ../libnm-core/nm-setting-wireless.c:744
+#: ../libnm-util/nm-setting-olpc-mesh.c:142
+#: ../libnm-util/nm-setting-wireless.c:801
#, c-format
msgid "'%d' is not a valid channel"
msgstr "«%d» не є коректним каналом"
-#: ../libnm-util/nm-setting-ppp.c:390
+#: ../libnm-core/nm-setting-ppp.c:367 ../libnm-util/nm-setting-ppp.c:389
#, c-format
msgid "'%d' is out of valid range <128-16384>"
msgstr "«%d» не належить до коректного діапазону <128-16384>"
-#: ../libnm-util/nm-setting-ppp.c:403
+#: ../libnm-core/nm-setting-ppp.c:380 ../libnm-util/nm-setting-ppp.c:402
#, c-format
msgid "setting this property requires non-zero '%s' property"
msgstr ""
"вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ†Ñ–Ñ”Ñ— влаÑтивоÑÑ‚Ñ– вимагає ненульового Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ– «%s»"
-#: ../libnm-util/nm-setting-vlan.c:570
+#: ../libnm-core/nm-setting-vlan.c:515 ../libnm-util/nm-setting-vlan.c:556
#, c-format
msgid "'%s' value doesn't match '%s=%s'"
msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s» не відповідає «%s=%s»"
-#: ../libnm-util/nm-setting-vlan.c:581
+#: ../libnm-core/nm-setting-vlan.c:526 ../libnm-util/nm-setting-vlan.c:567
#, c-format
msgid "'%s' is neither an UUID nor an interface name"
msgstr "«%s» не Ñ” ні UUID, ні назвою інтерфейÑу"
-#: ../libnm-util/nm-setting-vlan.c:594
+#: ../libnm-core/nm-setting-vlan.c:540 ../libnm-util/nm-setting-vlan.c:580
#, c-format
msgid "property is not specified and neither is '%s:%s'"
msgstr "влаÑтивіÑÑ‚ÑŒ не вказано Ñ– не визначено «%s:%s»"
-#: ../libnm-util/nm-setting-vlan.c:607
+#: ../libnm-core/nm-setting-vlan.c:553 ../libnm-util/nm-setting-vlan.c:593
msgid "flags are invalid"
msgstr "прапорці є некоректними"
-#: ../libnm-util/nm-setting-wired.c:618
+#: ../libnm-core/nm-setting-vpn.c:441
+#, c-format
+#| msgid "property is empty"
+msgid "secret was empty"
+msgstr "пароль є порожнім"
+
+#: ../libnm-core/nm-setting-vpn.c:471
+msgid "setting contained a secret with an empty name"
+msgstr "параметри міÑтив пароль з порожньою назвою"
+
+#: ../libnm-core/nm-setting-vpn.c:479
+#, c-format
+msgid "secret value was empty"
+msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ Ñ” порожнім"
+
+#: ../libnm-core/nm-setting-vpn.c:526 ../libnm-core/nm-setting.c:1572
+msgid "not a secret property"
+msgstr "не Ñ” влаÑтивіÑÑ‚ÑŽ паролÑ"
+
+#: ../libnm-core/nm-setting-vpn.c:532
+msgid "secret is not of correct type"
+msgstr "пароль не належить до коректного типу"
+
+#: ../libnm-core/nm-setting-vpn.c:567
+#, c-format
+#| msgid "Error: failed to remove value of '%s': %s\n"
+msgid "failed to convert value '%s' to uint"
+msgstr "не вдалоÑÑ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s» на uint"
+
+#: ../libnm-core/nm-setting-vpn.c:575
+msgid "secret flags property not found"
+msgstr "влаÑтивоÑÑ‚Ñ– прапорців паролів не знайдено"
+
+#: ../libnm-core/nm-setting-wired.c:575 ../libnm-util/nm-setting-wired.c:617
#, 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
+#: ../libnm-core/nm-setting-wired.c:585 ../libnm-util/nm-setting-wired.c:627
#, c-format
msgid "'%s' is not a valid duplex value"
msgstr "«%s» не Ñ” коректним значеннÑм дуплекÑного режиму"
-#: ../libnm-util/nm-setting-wired.c:685
+#: ../libnm-core/nm-setting-wired.c:644 ../libnm-util/nm-setting-wired.c:684
#, c-format
msgid "invalid '%s' or its value '%s'"
msgstr "некоректний «%s» або його Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s»"
-#: ../libnm-util/nm-setting-wireless-security.c:915
+#: ../libnm-core/nm-setting-wireless-security.c:883
+#: ../libnm-util/nm-setting-wireless-security.c:913
#, c-format
msgid "'%s' security requires '%s=%s'"
msgstr "Ð´Ð»Ñ Ð·Ð°Ñ…Ð¸Ñту «%s» Ñлід вказати «%s=%s»"
-#: ../libnm-util/nm-setting-wireless-security.c:944
+#: ../libnm-core/nm-setting-wireless-security.c:912
+#: ../libnm-util/nm-setting-wireless-security.c:942
#, c-format
msgid "'%s' security requires '%s' setting presence"
msgstr "захиÑÑ‚ «%s» вимагає викориÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «%s»"
-#: ../libnm-util/nm-setting-wireless-security.c:965
+#: ../libnm-core/nm-setting-wireless-security.c:933
+#: ../libnm-util/nm-setting-wireless-security.c:963
#, c-format
msgid "'%d' value is out of range <0-3>"
msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%d» лежить поза діапазоном <0-3>"
-#: ../libnm-util/nm-setting-wireless-security.c:1062
+#: ../libnm-core/nm-setting-wireless-security.c:1030
+#: ../libnm-util/nm-setting-wireless-security.c:1060
#, c-format
msgid "'%s' connections require '%s' in this property"
msgstr "Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s» потребують «%s» у цій влаÑтивоÑÑ‚Ñ–"
-#: ../libnm-util/nm-setting-wireless-security.c:1092
+#: ../libnm-core/nm-setting-wireless-security.c:1060
+#: ../libnm-util/nm-setting-wireless-security.c:1090
#, c-format
msgid "'%s' can only be used with '%s=%s' (WEP)"
msgstr "«%s» можна викориÑтовувати лише з «%s=%s» (WEP)"
-#: ../libnm-util/nm-setting-wireless.c:771
+#: ../libnm-core/nm-setting-wireless.c:713
+#: ../libnm-util/nm-setting-wireless.c:770
#, c-format
msgid "'%s' is not a valid Wi-Fi mode"
msgstr "«%s» не є коректним режимом Wi-Fi"
-#: ../libnm-util/nm-setting-wireless.c:781
+#: ../libnm-core/nm-setting-wireless.c:723
+#: ../libnm-util/nm-setting-wireless.c:780
#, c-format
msgid "'%s' is not a valid band"
msgstr "«%s» не Ñ” коректним значеннÑм Ñмуги"
-#: ../libnm-util/nm-setting-wireless.c:791
+#: ../libnm-core/nm-setting-wireless.c:733
+#, c-format
+#| msgid "requires setting '%s' property"
+msgid "'%s' requires setting '%s' property"
+msgstr "«%s» потребує вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ– «%s»"
+
+#: ../libnm-core/nm-setting.c:1470
+msgid "secret not found"
+msgstr "не знайдено ключа"
+
+#: ../libnm-core/nm-setting.c:1562
+msgid "secret is not set"
+msgstr "пароль не вÑтановлено"
+
+#: ../libnm-glib/nm-device.c:1794 ../libnm/nm-device.c:1615
+msgid "Bluetooth"
+msgstr "Bluetooth"
+
+#: ../libnm-glib/nm-device.c:1812 ../libnm/nm-device.c:1633
+msgid "ADSL"
+msgstr "ADSL"
+
+#: ../libnm-glib/nm-device.c:1840 ../libnm/nm-device.c:1661
+msgid "Wired"
+msgstr "Дротове"
+
+#: ../libnm-glib/nm-device.c:1871 ../libnm/nm-device.c:1692
+msgid "PCI"
+msgstr "PCI"
+
+#: ../libnm-glib/nm-device.c:1873 ../libnm/nm-device.c:1694
+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
+#: ../libnm/nm-device.c:1788 ../libnm/nm-device.c:1807
+#, 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_nss.c:468
+#, c-format
+msgid "Couldn't convert password to UCS2: %d"
+msgstr "Ðе вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð½Ð° UCS2: %d"
+
+#: ../libnm-util/nm-setting-bluetooth.c:186
+#, c-format
+msgid "requires '%s' or '%s' setting"
+msgstr "Ñлід вказати параметр «%s» або «%s»"
+
+#: ../libnm-util/nm-setting-connection.c:863
+#, c-format
+msgid "requires presence of '%s' setting in the connection"
+msgstr "потребує Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s» у параметрах з’єднаннÑ"
+
+#: ../libnm-util/nm-setting-connection.c:888
+#| msgid "Shared connection service failed"
+msgid "Slave connections need a valid '"
+msgstr "Ð”Ð»Ñ Ð¿Ñ–Ð´Ð»ÐµÐ³Ð»Ð¸Ñ… з’єднань потрібна коректна влаÑтивіÑÑ‚ÑŒ «"
+
+#: ../libnm-util/nm-setting-connection.c:897
+#| msgid "not saved, "
+msgid "Cannot set '"
+msgstr "Ðе вдалоÑÑ Ð²Ñтановити «"
+
+#: ../libnm-util/nm-setting-ip4-config.c:940
+#, c-format
+msgid "%d. IPv4 address is invalid"
+msgstr "%d. ÐдреÑа IPv4 Ñ” некоректною"
+
+#: ../libnm-util/nm-setting-ip4-config.c:950
+#, c-format
+msgid "%d. IPv4 address has invalid prefix"
+msgstr "%d. ÐдреÑа IPv4 має некоректний префікÑ"
+
+#: ../libnm-util/nm-setting-ip4-config.c:976
+#, c-format
+msgid "%d. route has invalid prefix"
+msgstr "%d. Маршрут має некоректний префікÑ"
+
+#: ../libnm-util/nm-setting-vpn.c:583
+#, c-format
+msgid "Failed to convert '%s' value '%s' to uint"
+msgstr "не вдалоÑÑ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%2$s» «%1$s» на uint"
+
+#: ../libnm-util/nm-setting-vpn.c:590
+#, c-format
+msgid "Secret flags property '%s' not found"
+msgstr "ВлаÑтивіÑÑ‚ÑŒ прапорців паролів «%s» не знайдено"
+
+#: ../libnm-util/nm-setting-wireless.c:790
#, c-format
msgid "requires setting '%s' property"
msgstr "потребує вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ– «%s»"
+#: ../libnm/nm-device-adsl.c:73
+#| msgid "connecting (starting secondary connections)"
+msgid "The connection was not an ADSL connection."
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ Ñ” з’єднаннÑм ADSL."
+
+#: ../libnm/nm-device-bond.c:115
+#| msgid "connecting (starting secondary connections)"
+msgid "The connection was not a bond connection."
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ Ñ” з’єднаннÑм зв’Ñзку."
+
+#: ../libnm/nm-device-bridge.c:115
+#| msgid "connecting (starting secondary connections)"
+msgid "The connection was not a bridge connection."
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ Ñ” з’єднаннÑм міÑтка."
+
+#: ../libnm/nm-device-bt.c:140
+#, c-format
+#| msgid "There is 1 optional argument for 'bluetooth' connection type.\n"
+msgid "The connection was not a Bluetooth connection."
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ Ñ” з’єднаннÑм Bluetooth."
+
+#: ../libnm/nm-device-bt.c:149
+msgid "Invalid device Bluetooth address."
+msgstr "Ðекоректна адреÑа Bluetooth приÑтрою."
+
+#: ../libnm/nm-device-bt.c:156
+msgid "The Bluetooth addresses of the device and the connection didn't match."
+msgstr "ÐдреÑи Bluetooth приÑтрою Ñ– Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ збігаютьÑÑ."
+
+#: ../libnm/nm-device-bt.c:165
+msgid ""
+"The device is lacking Bluetooth capabilities required by the connection."
+msgstr "У приÑтрою немає можливоÑтей Bluetooth, потрібних з’єднанню."
+
+#: ../libnm/nm-device-ethernet.c:138
+#| msgid "There are 4 optional arguments for 'PPPoE' connection type.\n"
+msgid "The connection was not an Ethernet or PPPoE connection."
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ Ñ” з’єднаннÑм Ethernet або PPPoE."
+
+#: ../libnm/nm-device-ethernet.c:154 ../libnm/nm-device-infiniband.c:105
+#: ../libnm/nm-device-wifi.c:492 ../libnm/nm-device-wimax.c:311
+#| msgid "is not a valid MAC address"
+msgid "Invalid device MAC address."
+msgstr "Ðекоректна MAC-адреÑа приÑтрою."
+
+#: ../libnm/nm-device-ethernet.c:160 ../libnm/nm-device-infiniband.c:113
+#: ../libnm/nm-device-wifi.c:499 ../libnm/nm-device-wimax.c:318
+msgid "The MACs of the device and the connection didn't match."
+msgstr "ÐдреÑи MAC приÑтрою Ñ– Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ збігаютьÑÑ."
+
+#: ../libnm/nm-device-generic.c:92
+#| msgid "connecting (starting secondary connections)"
+msgid "The connection was not a generic connection."
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ Ñ” загальним з’єднаннÑм."
+
+#: ../libnm/nm-device-generic.c:99
+#| msgid "InfiniBand P_Key connection did not specify parent interface name"
+msgid "The connection did not specify an interface name."
+msgstr "У запиÑÑ– Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ вказано назви інтерфейÑу."
+
+#: ../libnm/nm-device-infiniband.c:97
+#| msgid "There are 5 optional arguments for 'InfiniBand' connection type.\n"
+msgid "The connection was not an InfiniBand connection."
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ Ñ” з’єднаннÑм InfiniBand."
+
+#: ../libnm/nm-device-modem.c:123
+#| msgid "the connection was removed"
+msgid "The connection was not a modem connection."
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ Ñ” модемним з’єднаннÑм."
+
+#: ../libnm/nm-device-modem.c:131
+#| msgid "connecting (starting secondary connections)"
+msgid "The connection was not a valid modem connection."
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ Ñ” коректним модемним з’єднаннÑм."
+
+#: ../libnm/nm-device-modem.c:138
+msgid "The device is lacking capabilities required by the connection."
+msgstr "У приÑтрою немає можливоÑтей, потрібних з’єднанню."
+
+#: ../libnm/nm-device-olpc-mesh.c:118
+#| msgid "There are 2 optional arguments for 'OLPC Mesh' connection type.\n"
+msgid "The connection was not an OLPC Mesh connection."
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ Ñ” з’єднаннÑм OLPC Mesh."
+
+#: ../libnm/nm-device-team.c:121
+#| msgid "the connection was removed"
+msgid "The connection was not a team connection."
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ Ñ” командним з’єднаннÑм."
+
+#: ../libnm/nm-device-vlan.c:115
+#| msgid "There are 4 optional arguments for 'VLAN' connection type.\n"
+msgid "The connection was not a VLAN connection."
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ Ñ” з’єднаннÑм VLAN."
+
+#: ../libnm/nm-device-vlan.c:122
+msgid "The VLAN identifiers of the device and the connection didn't match."
+msgstr "Ідентифікатори VLAN приÑтрою Ñ– Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ збігаютьÑÑ."
+
+#: ../libnm/nm-device-vlan.c:135
+msgid "The hardware address of the device and the connection didn't match."
+msgstr "Ðпаратні адреÑи приÑтрою Ñ– Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ збігаютьÑÑ."
+
+#: ../libnm/nm-device-wifi.c:483
+msgid "The connection was not a Wi-Fi connection."
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ Ñ” з’єднаннÑм Wi-Fi."
+
+#: ../libnm/nm-device-wifi.c:519
+msgid "The device is lacking WPA capabilities required by the connection."
+msgstr "У приÑтрою немає можливоÑтей WPA, потрібних з’єднанню."
+
+#: ../libnm/nm-device-wifi.c:526
+msgid "The device is lacking WPA2/RSN capabilities required by the connection."
+msgstr "У приÑтрою немає можливоÑтей WPA2/RSN, потрібних з’єднанню."
+
+#: ../libnm/nm-device-wimax.c:302
+#| msgid "There is 1 optional argument for 'WiMax' connection type.\n"
+msgid "The connection was not a WiMAX connection."
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ Ñ” з’єднаннÑм WiMAX."
+
+#: ../libnm/nm-device.c:2133
+#, c-format
+#| msgid "Error: connection is not valid: %s\n"
+msgid "The connection was not valid: %s"
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ Ñ” коректним: %s"
+
+#: ../libnm/nm-device.c:2142
+#, c-format
+msgid "The interface names of the device and the connection didn't match."
+msgstr "Ðазви інтерфейÑу приÑтрою Ñ– Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ збігаютьÑÑ."
+
+#: ../libnm/nm-manager.c:858
+#| msgid "no active connection or device"
+msgid "Active connection could not be attached to the device"
+msgstr "Ðктивне Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ вдалоÑÑ Ð´Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ до приÑтрою"
+
+#: ../libnm/nm-manager.c:1082
+#| msgid "Activate connection details"
+msgid "Active connection removed before it was initialized"
+msgstr "Ðктивне Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð¾ до його ініціалізації"
+
+#: ../libnm/nm-object.c:1439 ../libnm/nm-object.c:1585
+msgid "Caller did not specify D-Bus path for object"
+msgstr "Ð¤ÑƒÐ½ÐºÑ†Ñ–Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑƒ не вказала шлÑÑ… D-Bus Ð´Ð»Ñ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð°"
+
+#: ../libnm/nm-remote-settings.c:261
+msgid "Connection removed before it was initialized"
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð¾ до його ініціалізації"
+
+#: ../libnm/nm-vpn-plugin-old.c:885
+#| msgid "Error: No interface specified."
+msgid "No service name specified"
+msgstr "Ðе вказано назви Ñлужби"
+
#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:1
msgid "Enable or disable system networking"
msgstr "Увімкнути або вимкнути ÑиÑтемну роботу у мережі"
@@ -6308,95 +8173,66 @@ 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"
-msgstr "Помилка під Ñ‡Ð°Ñ Ñпроби відкрити %s: %s\n"
-
-#: ../src/main.c:159
-#, c-format
-msgid "Writing to %s failed: %s\n"
-msgstr "Помилка під Ñ‡Ð°Ñ Ñпроби запиÑу даних до %s: %s\n"
-
-#: ../src/main.c:164
-#, c-format
-msgid "Closing %s failed: %s\n"
-msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ñ‚Ð¸ роботу %s: %s\n"
-
-#: ../src/main.c:207
+#. Translators: the first %s is a prefix for the connection id, such
+#. * as "Wired Connection" or "VPN Connection". The %d is a number
+#. * that is combined with the first argument to create a unique
+#. * connection id.
+#: ../src/NetworkManagerUtils.c:1160
#, c-format
-msgid "NetworkManager is already running (pid %ld)\n"
-msgstr "NetworkManager вже запущено (pid %ld)\n"
+#| msgctxt "long device name"
+#| msgid "%s %s"
+msgctxt "connection id fallback"
+msgid "%s %d"
+msgstr "%s %d"
-#: ../src/main.c:360
+#. Logging/debugging
+#: ../src/main.c:221 ../src/nm-iface-helper.c:306
msgid "Print NetworkManager version and exit"
msgstr "ВивеÑти дані щодо верÑÑ–Ñ— NetworkManager Ñ– завершити роботу"
-#: ../src/main.c:361
+#: ../src/main.c:222 ../src/nm-iface-helper.c:307
msgid "Don't become a daemon"
msgstr "Ðе переходити у Ñтан фонової Ñлужби"
-#: ../src/main.c:362
+#: ../src/main.c:223 ../src/nm-iface-helper.c:308
msgid "Don't become a daemon, and log to stderr"
msgstr ""
"Ðе переходити у Ñтан фонової Ñлужби Ñ– запиÑувати Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¶ÑƒÑ€Ð½Ð°Ð»Ñƒ до "
"stderr"
-#: ../src/main.c:363
+#: ../src/main.c:224 ../src/nm-iface-helper.c:309
#, c-format
msgid "Log level: one of [%s]"
msgstr "Рівень докладноÑÑ‚Ñ– журналу: одне з таких значень: [%s]"
-#: ../src/main.c:365
+#: ../src/main.c:226 ../src/nm-iface-helper.c:311
#, c-format
msgid "Log domains separated by ',': any combination of [%s]"
msgstr ""
"СпиÑок доменів Ð´Ð»Ñ Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð¶ÑƒÑ€Ð½Ð°Ð»Ñƒ, відокремлених Ñимволом «,»: будь-Ñка "
"ÐºÐ¾Ð¼Ð±Ñ–Ð½Ð°Ñ†Ñ–Ñ Ð· [%s]"
-#: ../src/main.c:367
+#: ../src/main.c:228 ../src/nm-iface-helper.c:313
msgid "Make all warnings fatal"
msgstr "Вважати вÑÑ– Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°Ð¼Ð¸"
-#: ../src/main.c:368
+#: ../src/main.c:229
msgid "Specify the location of a PID file"
msgstr "Вказати Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° ідентифікатора процеÑу (PID)"
-#: ../src/main.c:368
+#: ../src/main.c:229
msgid "filename"
msgstr "назва файла"
-#: ../src/main.c:369
+#: ../src/main.c:230
msgid "State file location"
msgstr "Ð Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° Ñтану"
-#: ../src/main.c:369
+#: ../src/main.c:230
msgid "/path/to/state.file"
msgstr "/шлÑÑ…/до/файла.Ñтану"
-#: ../src/main.c:395
-#, c-format
-msgid "GModules are not supported on your platform!\n"
-msgstr "Підтримки GModules на цій платформі не передбачено!\n"
-
-#: ../src/main.c:400
-#, c-format
-msgid "You must be root to run NetworkManager!\n"
-msgstr ""
-"ЗапуÑк NetworkManager Ñлід здійÑнювати з облікового запиÑу адмініÑтратора "
-"(root)!\n"
-
-#: ../src/main.c:423
+#: ../src/main.c:244
msgid ""
"NetworkManager monitors all network connections and automatically\n"
"chooses the best connection to use. It also allows the user to\n"
@@ -6409,51 +8245,88 @@ msgstr ""
"з Ñкими Ñлід пов’Ñзувати картки бездротового доÑтупу на вашому\n"
"комп’ютері."
-#: ../src/main.c:429 ../src/main.c:445
+#: ../src/main.c:257 ../src/main-utils.c:274 ../src/nm-iface-helper.c:342
#, c-format
msgid "%s. Please use --help to see a list of valid options.\n"
msgstr ""
"%s. Щоб ознайомитиÑÑ Ð·Ñ– ÑпиÑком параметрів, ÑкориÑтайтеÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ --"
"help.\n"
-#: ../src/main.c:450
+#: ../src/main.c:262 ../src/nm-iface-helper.c:347
#, c-format
msgid "Ignoring unrecognized log domain(s) '%s' passed on command line.\n"
msgstr ""
"Ігноруємо нерозпізнані домени журналюваннÑ, «%s», передані за допомогою "
"командного Ñ€Ñдка.\n"
-#: ../src/main.c:501
+#: ../src/main.c:307
#, c-format
msgid "Failed to read configuration: (%d) %s\n"
msgstr "Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ налаштуваннÑ: (%d) %s\n"
-#: ../src/main.c:515
+#: ../src/main.c:321
#, c-format
msgid "Error in configuration file: %s.\n"
msgstr "Помилка у файлі налаштувань: %s.\n"
-#: ../src/main.c:520
+#: ../src/main.c:326
#, c-format
msgid "Ignoring unrecognized log domain(s) '%s' from config files.\n"
msgstr ""
"Ігноруємо нерозпізнані домени журналюваннÑ, «%s», з файлів налаштувань.\n"
-#: ../src/main.c:528
+#: ../src/main.c:334
#, c-format
msgid "State file %s parsing failed: (%d) %s\n"
msgstr "Помилка під Ñ‡Ð°Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ файла Ñтану %s: (%d) %s\n"
-#: ../src/main.c:541
+#: ../src/main.c:347 ../src/nm-iface-helper.c:364
#, c-format
msgid "Could not daemonize: %s [error %u]\n"
msgstr "Ðе вдалоÑÑ Ñтворити фонову Ñлужбу: %s [помилка %u]\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:140
+#: ../src/main-utils.c:115
+#, c-format
+msgid "Failed to set signal mask: %d"
+msgstr "Ðе вдалоÑÑ Ð²Ñтановити маÑку Ñигналу: %d"
+
+#: ../src/main-utils.c:124
+#, c-format
+msgid "Failed to create signal handling thread: %d"
+msgstr "Ðе вдалоÑÑ Ñтворити потік обробки Ñигналів: %d"
+
+#: ../src/main-utils.c:139
+#, c-format
+msgid "Opening %s failed: %s\n"
+msgstr "Помилка під Ñ‡Ð°Ñ Ñпроби відкрити %s: %s\n"
+
+#: ../src/main-utils.c:145
+#, c-format
+msgid "Writing to %s failed: %s\n"
+msgstr "Помилка під Ñ‡Ð°Ñ Ñпроби запиÑу даних до %s: %s\n"
+
+#: ../src/main-utils.c:150
+#, c-format
+msgid "Closing %s failed: %s\n"
+msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ñ‚Ð¸ роботу %s: %s\n"
+
+#: ../src/main-utils.c:206
+#, c-format
+#| msgid "NetworkManager is already running (pid %ld)\n"
+msgid "%s is already running (pid %ld)\n"
+msgstr "%s вже працює (pid %ld)\n"
+
+#: ../src/main-utils.c:251
+#, c-format
+#| msgid "You must be root to run NetworkManager!\n"
+msgid "You must be root to run %s!\n"
+msgstr "Ð”Ð»Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ %s потрібно перейти у режим root!\n"
+
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:204
msgid "# Created by NetworkManager\n"
msgstr "# Створено за допомогою NetworkManager\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:147
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:211
#, c-format
msgid ""
"# Merged from %s\n"
@@ -6462,973 +8335,611 @@ msgstr ""
"# Об’єднано з %s\n"
"\n"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:311
+#: ../src/dhcp-manager/nm-dhcp-manager.c:130
+#, c-format
+msgid "'%s' support not found or not enabled."
+msgstr "Підтримки «%s» не знайдено або підтримку не увімкнено."
+
+#: ../src/dhcp-manager/nm-dhcp-manager.c:177
msgid "no usable DHCP client could be found."
msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ придатного до викориÑÑ‚Ð°Ð½Ð½Ñ ÐºÐ»Ñ–Ñ”Ð½Ñ‚Ð° DHCP."
-#: ../src/dhcp-manager/nm-dhcp-manager.c:320
-msgid "'dhclient' could be found."
-msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ «dhclient»."
-
-#: ../src/dhcp-manager/nm-dhcp-manager.c:330
-msgid "'dhcpcd' could be found."
-msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ «dhcpcd»."
-
-#: ../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:385
+#: ../src/dns-manager/nm-dns-manager.c:374
msgid "NOTE: the libc resolver may not support more than 3 nameservers."
msgstr ""
"ЗÐУВÐЖЕÐÐЯ: можливо, інÑтрумент Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð°Ð´Ñ€ÐµÑ Ð·Ð° назвами libc вашої "
"ÑиÑтеми не підтримує викориÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ð¾Ð½Ð°Ð´ 3 Ñерверів назв."
-#: ../src/dns-manager/nm-dns-manager.c:387
+#: ../src/dns-manager/nm-dns-manager.c:376
msgid "The nameservers listed below may not be recognized."
msgstr "Вказані у наведеному нижче ÑпиÑку Ñервери назв може бути пропущено."
-#: ../src/logging/nm-logging.c:150
-#, c-format
-msgid "Unknown log level '%s'"
-msgstr "Ðевідомий рівень Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð¶ÑƒÑ€Ð½Ð°Ð»Ñƒ, «%s»"
+#: ../src/devices/adsl/nm-device-adsl.c:129
+#| msgid "ADSL connection %d"
+msgid "ADSL connection"
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ADSL"
-#: ../src/logging/nm-logging.c:229
-#, c-format
-msgid "Unknown log domain '%s'"
-msgstr "Ðевідомий домен Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð¶ÑƒÑ€Ð½Ð°Ð»Ñƒ, «%s»"
-
-#: ../src/config/nm-config.c:281
-msgid "Config file location"
-msgstr "Ð Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° налаштувань"
-
-#: ../src/config/nm-config.c:281
-msgid "/path/to/config.file"
-msgstr "/шлÑÑ…/до/файла.налаштувань"
-
-#: ../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/devices/adsl/nm-device-adsl.c:122
-#, c-format
-msgid "ADSL connection %d"
-msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ADSL %d"
-
-#: ../src/devices/bluetooth/nm-bluez-device.c:194
+#: ../src/devices/bluetooth/nm-bluez-device.c:200
#, c-format
msgid "%s Network"
msgstr "Мережа %s"
-#: ../src/devices/bluetooth/nm-device-bt.c:284
-#, c-format
-msgid "PAN connection %d"
-msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ PAN %d"
-
-#: ../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/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/devices/nm-device-ethernet.c:1486
-#: ../src/settings/nm-settings-utils.c:50
-#, c-format
-msgid "Wired connection %d"
-msgstr "Дротове Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ %d"
-
-#: ../src/devices/nm-device-infiniband.c:255 ../tui/nm-editor-utils.c:177
-#, c-format
-msgid "InfiniBand connection %d"
-msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ InfiniBand %d"
-
-#: ../src/devices/nm-device-team.c:152 ../tui/nm-editor-utils.c:223
-#, c-format
-msgid "Team connection %d"
-msgstr "Командне Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ %d"
-
-#: ../src/devices/nm-device-vlan.c:230 ../tui/nm-editor-utils.c:231
-#, c-format
-msgid "VLAN connection %d"
-msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ VLAN %d"
-
-#: ../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-sleep-monitor-systemd.c:116
-msgid "NetworkManager needs to turn off networks"
-msgstr "NetworkManager потрібно вимкнути роботу мереж"
-
-#: ../src/settings/plugins/ifcfg-rh/reader.c:113
-msgid "System"
-msgstr "СиÑтема"
-
-#: ../test/nm-online.c:96
-#, c-format
-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)"
+#: ../src/devices/bluetooth/nm-device-bt.c:254
+msgid "PAN requested, but Bluetooth device does not support NAP"
msgstr ""
-"Ð§Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° з’єднаннÑ, у Ñекундах (без цього параметра типовим "
-"значеннÑм Ñ” 30)"
+"ÐадіÑлано запит щодо PAN, але у приÑтрої Bluetooth не передбачено підтримки "
+"NAP"
-#: ../test/nm-online.c:149
-#| msgid "Exit immediately if NetworkManager is not running"
-msgid "Exit immediately if NetworkManager is not running or connecting"
+#: ../src/devices/bluetooth/nm-device-bt.c:264
+msgid "PAN connections cannot specify GSM, CDMA, or serial settings"
msgstr ""
-"Ðегайно завершити роботу, Ñкщо NetworkManager не запущено або виконуєтьÑÑ "
-"Ñпроба з’єднаннÑ"
+"ЗапиÑи Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ PAN не можуть вказувати параметрів GSM, CDMA або "
+"поÑлідовного приÑтрою"
-#: ../test/nm-online.c:150
-msgid "Don't print anything"
-msgstr "Ðічого не виводити"
+#: ../src/devices/bluetooth/nm-device-bt.c:277
+#| msgid "PAN connection %d"
+msgid "PAN connection"
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ PAN"
-#: ../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 ""
-"Очікує на Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ— NetworkManager з’єднань, Ñкі Ñлід активувати "
-"під Ñ‡Ð°Ñ Ð·Ð°Ð¿ÑƒÑку."
-
-#: ../test/nm-online.c:179 ../test/nm-online.c:185
-msgid "Invalid option. Please use --help to see a list of valid options."
+#: ../src/devices/bluetooth/nm-device-bt.c:284
+msgid "DUN requested, but Bluetooth device does not support DUN"
msgstr ""
-"Ðекоректний параметр. Щоб ознайомитиÑÑ Ð·Ñ– ÑпиÑком параметрів, ÑкориÑтайтеÑÑ "
-"параметром --help."
+"ÐадіÑлано запит щодо DUN, але у приÑтрої Bluetooth не передбачено підтримки "
+"DUN"
-#: ../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/devices/bluetooth/nm-device-bt.c:294
+msgid "DUN connection must include a GSM or CDMA setting"
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ DUN має включати параметр GSM або CDMA"
-#: ../tui/newt/nmt-newt-utils.c:327 ../tui/newt/nmt-newt-utils.c:359
-#, c-format
-msgid "Could not create temporary file: %s"
-msgstr "Ðе вдалоÑÑ Ñтворити тимчаÑовий файл «%s»"
+#: ../src/devices/bluetooth/nm-device-bt.c:304
+#: ../src/devices/wwan/nm-modem-broadband.c:488
+#| msgid "GSM connection %d"
+msgid "GSM connection"
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ GSM"
-#: ../tui/newt/nmt-newt-utils.c:367
-#, c-format
-msgid "Editor failed: %s"
-msgstr "Помилка редактора: %s"
+#: ../src/devices/bluetooth/nm-device-bt.c:308
+#: ../src/devices/wwan/nm-modem-broadband.c:511
+#| msgid "CDMA connection %d"
+msgid "CDMA connection"
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ CDMA"
-#: ../tui/newt/nmt-newt-utils.c:375
-#, c-format
-msgid "Editor failed with status %d"
-msgstr "Помилка редактора з кодом Ñтану %d"
+#: ../src/devices/bluetooth/nm-device-bt.c:312
+#| msgid "DUN connection %d"
+msgid "DUN connection"
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ DUN"
-#: ../tui/newt/nmt-newt-utils.c:377
+#: ../src/devices/bluetooth/nm-device-bt.c:317
+msgid "Unknown/unhandled Bluetooth connection type"
+msgstr "Ðевідомий або непридатний тип Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Bluetooth"
+
+#: ../src/devices/bluetooth/nm-device-bt.c:337
+#: ../src/devices/nm-device-ethernet.c:1439
+#: ../src/devices/nm-device-infiniband.c:196
+#: ../src/devices/wifi/nm-device-wifi.c:1122
+#: ../src/devices/wimax/nm-device-wimax.c:450
+#| msgid "no active connection or device"
+msgid "connection does not match device"
+msgstr "Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ відповідає приÑтрою"
+
+#: ../src/devices/nm-device-bond.c:124
+#| msgid "Bond connection %d"
+msgid "Bond connection"
+msgstr "Прив’Ñзане з’єднаннÑ"
+
+#: ../src/devices/nm-device-bridge.c:131
+#| msgid "Bridge connection %d"
+msgid "Bridge connection"
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¼Ñ–Ñтка"
+
+#: ../src/devices/nm-device-ethernet.c:1422
+#| msgid "PPPoE connection %d"
+msgid "PPPoE connection"
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ PPPoE"
+
+#: ../src/devices/nm-device-ethernet.c:1422
+#| msgid "Wired connection %d"
+msgid "Wired connection"
+msgstr "Дротове з’єднаннÑ"
+
+#: ../src/devices/nm-device-ethernet-utils.c:40
#, c-format
-msgid "Editor failed with signal %d"
-msgstr "Помилка редактора з Ñигналом %d"
+msgid "Wired connection %d"
+msgstr "Дротове Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ %d"
-#: ../tui/newt/nmt-newt-utils.c:381
-#, c-format
-msgid "Could not re-read file: %s"
-msgstr "Ðе вдалоÑÑ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ прочитати файл: %s"
+#: ../src/devices/nm-device-infiniband.c:178
+#| msgid "InfiniBand connection %d"
+msgid "InfiniBand connection"
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ InfiniBand"
-#: ../tui/nm-editor-utils.c:160
-#, c-format
-msgid "Ethernet connection %d"
-msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ethernet %d"
+#: ../src/devices/nm-device-vlan.c:216
+#| msgid "VLAN connection %d"
+msgid "VLAN connection"
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ VLAN"
-#: ../tui/nm-editor-utils.c:168
-#, c-format
-msgid "Wi-Fi connection %d"
-msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Wi-Fi %d"
+#: ../src/devices/team/nm-device-team.c:134
+#| msgid "Team connection %d"
+msgid "Team connection"
+msgstr "Командне з’єднаннÑ"
-#: ../tui/nm-editor-utils.c:185
-#, c-format
-msgid "Mobile broadband connection %d"
-msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð·Ð° допомогою мобільної радіомережі %d"
+#: ../src/devices/wifi/nm-device-olpc-mesh.c:151
+#| msgid "Mesh %d"
+msgid "Mesh"
+msgstr "Сітка"
-#: ../tui/nm-editor-utils.c:190
-msgid "DSL"
-msgstr "DSL"
+#: ../src/devices/wifi/nm-device-wifi.c:1092
+msgid "WPA Ad-Hoc disabled due to kernel bugs"
+msgstr "Спеціальний WPA вимкнено через вади у Ñдрі"
-#: ../tui/nm-editor-utils.c:194
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:44
#, c-format
-msgid "DSL connection %d"
-msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ DSL %d"
+#| msgid "'%s=%s' is incompatible with '%s > 0'"
+msgid "%s is incompatible with static WEP keys"
+msgstr "%s Ñ” неÑуміÑним зі Ñтатичними ключами WEP"
-#: ../tui/nmt-device-entry.c:391
-msgid "Select..."
-msgstr "Вибрати…"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:78
+#| msgid "Authentication required by wireless network"
+msgid "LEAP authentication requires a LEAP username"
+msgstr "Ð”Ð»Ñ Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ LEAP потрібне Ñ–Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача LEAP"
-#: ../tui/nmt-edit-connection-list.c:129
-msgid "Add"
-msgstr "Додати"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:88
+msgid "LEAP username requires 'leap' authentication"
+msgstr "Ð†Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача LEAP потребує Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Â«leap»"
-#: ../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 "Змінити..."
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:101
+msgid "LEAP authentication requires IEEE 802.1x key management"
+msgstr "Ð Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ LEAP потребує ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð°Ð¼Ð¸ IEEE 802.1x"
-#: ../tui/nmt-edit-connection-list.c:135 ../tui/nmtui-edit.c:467
-msgid "Delete"
-msgstr "Вилучити"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:121
+msgid "LEAP authentication is incompatible with Ad-Hoc mode"
+msgstr "Ð Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ LEAP Ñ” неÑуміÑним зі Ñпеціальним (Ad-Hoc) режимом"
-#: ../tui/nmt-editor.c:81
-#, c-format
-msgid "Could not create editor for connection '%s' of type '%s'."
-msgstr "Ðе вдалоÑÑ Ñтворити редактор Ð´Ð»Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s» типу «%s»."
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:133
+msgid "LEAP authentication is incompatible with 802.1x setting"
+msgstr "Ð Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ LEAP Ñ” неÑуміÑним із вÑтановленнÑм 802.1x"
-#: ../tui/nmt-editor.c:85
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:155
#, 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 "Редагувати з’єднаннÑ"
+msgid "a connection using '%s' authentication cannot use WPA key management"
+msgstr ""
+"з’єднаннÑ, де викориÑтовуєтьÑÑ Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Â«%s», не може викориÑтовувати "
+"ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð°Ð¼Ð¸ WPA"
-#: ../tui/nmt-editor.c:134
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:166
#, c-format
-msgid "Error saving connection: %s"
-msgstr "Помилка під Ñ‡Ð°Ñ Ñпроби зберегти Ð·Ð°Ð¿Ð¸Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ: %s"
+msgid "a connection using '%s' authentication cannot specific WPA protocols"
+msgstr ""
+"з’єднаннÑ, де викориÑтовуєтьÑÑ Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Â«%s», не може викориÑтовувати "
+"Ñпецифічні протоколи WPA"
-#: ../tui/nmt-editor.c:144
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:182
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:199
#, c-format
-msgid "Unable to save connection: %s"
-msgstr "Ðе вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ: %s"
+msgid "a connection using '%s' authentication cannot specific WPA ciphers"
+msgstr ""
+"з’єднаннÑ, де викориÑтовуєтьÑÑ Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Â«%s», не може викориÑтовувати "
+"Ñпецифічні шифри WPA"
-#: ../tui/nmt-editor.c:158
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:211
#, 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 "ВартіÑÑ‚ÑŒ маршруту"
+msgid "a connection using '%s' authentication cannot specific a WPA password"
+msgstr ""
+"з’єднаннÑ, де викориÑтовуєтьÑÑ Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Â«%s», не може викориÑтовувати "
+"Ñпецифічний пароль WPA"
-#: ../tui/nmt-page-bridge-port.c:77
-msgid "Hairpin mode"
-msgstr "Режим початкової зони (hairpin)"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:242
+#| msgid "Dynamic WEP (802.1x)"
+msgid "Dynamic WEP requires an 802.1x setting"
+msgstr "Динамічний WEP потребує вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° 802.1x"
-#: ../tui/nmt-page-bridge.c:42
-msgid "BRIDGE"
-msgstr "МІСТОК"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:252
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:280
+msgid "Dynamic WEP requires 'open' authentication"
+msgstr "Динамічний WEP потребує Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Â«open»"
-#: ../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 "Ñекунд"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:267
+msgid "Dynamic WEP requires 'ieee8021x' key management"
+msgstr "Динамічний WEP потребує ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð°Ð¼Ð¸ «ieee8021x»"
-#: ../tui/nmt-page-bridge.c:97
-msgid "Aging time"
-msgstr "Ð§Ð°Ñ Ð·Ð°ÑтаріваннÑ"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:314
+msgid "WPA-PSK authentication is incompatible with 802.1x"
+msgstr "Ð Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Ð·Ð° допомогою WPA-PSK Ñ” неÑуміÑним з 802.1x"
-#: ../tui/nmt-page-bridge.c:99
-msgid "Enable STP (Spanning Tree Protocol)"
-msgstr "Увімкнути STP (протокол розподілу за деревом)"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:324
+#| msgid "Wired 802.1X authentication"
+msgid "WPA-PSK requires 'open' authentication"
+msgstr "WPA-PSK потребує Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Â«open»"
-#: ../tui/nmt-page-bridge.c:122
-msgid "Forward delay"
-msgstr "Затримка переÑпрÑмуваннÑ"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:336
+msgid "WPA Ad-Hoc authentication requires an Ad-Hoc mode AP"
+msgstr ""
+"Ð Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Ð·Ð° Ñпеціальним WPA потребує точки доÑтупу у Ñпеціальному "
+"(Ad-Hoc) режимі"
-#: ../tui/nmt-page-bridge.c:132
-msgid "Hello time"
-msgstr "Ð§Ð°Ñ Ð½Ð° вітаннÑ"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:349
+msgid "WPA Ad-Hoc authentication requires 'wpa' protocol"
+msgstr "Ð Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Ð·Ð° Ñпеціальним WPA потребує протоколу «wpa»"
-#: ../tui/nmt-page-bridge.c:142
-msgid "Max age"
-msgstr "МакÑ. вік"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:361
+#| msgid "Authentication required by wireless network"
+msgid "WPA Ad-Hoc authentication requires 'none' pairwise cipher"
+msgstr "Ð Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Ð·Ð° Ñпеціальним WPA потребує парного шифру «none»"
-#: ../tui/nmt-page-ethernet.c:41
-msgid "ETHERNET"
-msgstr "ETHERNET"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:373
+msgid "WPA Ad-Hoc requires 'tkip' group cipher"
+msgstr "Спеціальний (Ad-Hoc) режим WPA потребує групового ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Â«tkip»"
-#: ../tui/nmt-page-ethernet.c:80 ../tui/nmt-page-vlan.c:132
-#: ../tui/nmt-page-wifi.c:358
-msgid "Cloned MAC address"
-msgstr "Клонована MAC-адреÑа"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:387
+msgid "Access point does not support PSK but setting requires it"
+msgstr ""
+"У точці доÑтупу не передбачено підтримки PSK, але параметром передбачено таку "
+"підтримку"
-#: ../tui/nmt-page-infiniband.c:40
-msgid "INFINIBAND"
-msgstr "INFINIBAND"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:417
+msgid "WPA-EAP authentication requires an 802.1x setting"
+msgstr "Ð Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ WPA-EAP потребує параметра 802.1x"
-#: ../tui/nmt-page-infiniband.c:51
-msgid "Datagram"
-msgstr "Данограма"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:427
+#| msgid "Wired 802.1X authentication"
+msgid "WPA-EAP requires 'open' authentication"
+msgstr "WPA-EAP потребує Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Â«open»"
-#: ../tui/nmt-page-infiniband.c:52
-msgid "Connected"
-msgstr "З'єднано"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:438
+msgid "802.1x setting requires 'wpa-eap' key management"
+msgstr "Параметр 802.1x потребує ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð°Ð¼Ð¸ «wpa-eap»"
-#: ../tui/nmt-page-infiniband.c:90
-msgid "Transport mode"
-msgstr "Режим передаваннÑ"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:451
+msgid "Access point does not support 802.1x but setting requires it"
+msgstr ""
+"У точці доÑтупу не передбачено підтримки 802.1x, але параметром передбачено "
+"таку підтримку"
-#: ../tui/nmt-page-ip4.c:41
-msgid "Disabled"
-msgstr "Вимкнено"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:479
+msgid ""
+"Access point mode is Ad-Hoc but setting requires Infrastructure security"
+msgstr ""
+"Режимом роботи точки доÑтупу вказано Ñпеціальний (Ad-Hoc), але параметр "
+"потребує захиÑту інфраÑтруктури"
-#: ../tui/nmt-page-ip4.c:42 ../tui/nmt-page-ip6.c:42
-msgid "Automatic"
-msgstr "Ðвтоматично"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:489
+msgid "Ad-Hoc mode is incompatible with 802.1x security"
+msgstr "Спеціальний (Ad-Hoc) режим Ñ” неÑуміÑним із захиÑтом 802.1x"
-#: ../tui/nmt-page-ip4.c:43 ../tui/nmt-page-ip6.c:44
-msgid "Link-Local"
-msgstr "Link-Local"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:498
+msgid "Ad-Hoc mode is incompatible with LEAP security"
+msgstr "Спеціальний (Ad-Hoc) режим Ñ” неÑуміÑним із захиÑтом LEAP"
-#: ../tui/nmt-page-ip4.c:44 ../tui/nmt-page-ip6.c:45
-msgid "Manual"
-msgstr "Вручну"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:508
+msgid "Ad-Hoc mode requires 'open' authentication"
+msgstr "Ð”Ð»Ñ Ñпеціального (Ad-Hoc) режиму потрібне Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Â«open»"
-#: ../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 "(Ðемає нетипових маршрутів)"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:518
+msgid ""
+"Access point mode is Infrastructure but setting requires Ad-Hoc security"
+msgstr ""
+"Режим роботи точки доÑтупу вÑтановлено у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ–Ð½Ñ„Ñ€Ð°Ñтруктура "
+"(infrastructure), а параметр потребує Ñпеціального (Ad-Hoc) з’єднаннÑ"
-#: ../tui/nmt-page-ip4.c:103 ../tui/nmt-page-ip6.c:103
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:560
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:590
#, 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 "Канал"
+msgid "connection does not match access point"
+msgstr "Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ відповідає точці доÑтупу"
-#: ../tui/nmt-page-wifi.c:258
-msgid "Security"
-msgstr "ЗахиÑÑ‚"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:614
+msgid "Access point is unencrypted but setting specifies 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 "Пароль"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:703
+msgid ""
+"WPA authentication is incompatible with non-EAP (original) LEAP or Dynamic "
+"WEP"
+msgstr ""
+"Ð Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Ð·Ð° допомогою WPA Ñ” неÑуміÑним з LEAP без EAP (оригінальним) або "
+"динамічним WEP"
-#. "wpa-enterprise"
-#. FIXME
-#: ../tui/nmt-page-wifi.c:279
-msgid "(No support for wpa-enterprise yet...)"
-msgstr "(Підтримки wpa-enterprise ще не передбачено...)"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:713
+msgid "WPA authentication is incompatible with Shared Key authentication"
+msgstr ""
+"Ð Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Ð·Ð° допомогою WPA Ñ” неÑуміÑним із розпізнаваннÑм за допомогою "
+"розповÑюдженого ключа"
-#: ../tui/nmt-page-wifi.c:286 ../tui/nmt-secret-agent.c:265
-msgid "Key"
-msgstr "Ключ"
+#: ../src/devices/wifi/nm-wifi-ap-utils.c:760
+#| msgid "Failed to set symmetric key for decryption."
+msgid "Failed to determine AP security information"
+msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ дані щодо захиÑту точки доÑтупу"
-#: ../tui/nmt-page-wifi.c:289 ../tui/nmt-page-wifi.c:308
-msgid "WEP index"
-msgstr "Ð†Ð½Ð´ÐµÐºÑ WEP"
+#: ../src/devices/wwan/nm-modem-broadband.c:475
+#| msgid "Mobile broadband connection %d"
+msgid "GSM mobile broadband connection requires a 'gsm' setting"
+msgstr ""
+"Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð·Ð° допомогою мобільної радіомережі GSM потребує параметра «gsm»"
-#: ../tui/nmt-page-wifi.c:297 ../tui/nmt-page-wifi.c:316
-msgid "Authentication"
-msgstr "РозпізнаваннÑ"
+#: ../src/nm-config.c:356
+msgid "Config file location"
+msgstr "Ð Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° налаштувань"
-#. "dynamic-wep"
-#. FIXME
-#: ../tui/nmt-page-wifi.c:322
-msgid "(No support for dynamic-wep yet...)"
-msgstr "(Підтримки dynamic-wep ще не передбачено...)"
+#: ../src/nm-config.c:356
+msgid "/path/to/config.file"
+msgstr "/шлÑÑ…/до/файла.налаштувань"
-#. 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 "КориÑтувач"
+#: ../src/nm-config.c:357
+msgid "Config directory location"
+msgstr "Ð Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ налаштувань"
-#: ../tui/nmt-password-fields.c:130
-msgid "Ask for this password every time"
-msgstr "Запитувати про цей пароль щоразу"
+#: ../src/nm-config.c:357
+msgid "/path/to/config/dir"
+msgstr "/шлÑÑ…/до/каталогу/налаштувань"
-#: ../tui/nmt-password-fields.c:131
-msgid "Show password"
-msgstr "Показати фразу паролÑ"
+#: ../src/nm-config.c:359
+msgid "List of plugins separated by ','"
+msgstr "СпиÑок додатків, відокремлених комами («,»)"
-#: ../tui/nmt-route-table.c:226
-msgid "Destination"
-msgstr "ПризначеннÑ"
+#: ../src/nm-config.c:359
+msgid "plugin1,plugin2"
+msgstr "додаток1,додаток2"
-#: ../tui/nmt-route-table.c:226
-msgid "Prefix"
-msgstr "ПрефікÑ"
+#. These three are hidden for now, and should eventually just go away.
+#: ../src/nm-config.c:362
+msgid "An http(s) address for checking internet connectivity"
+msgstr "ÐдреÑа http(s) Ð´Ð»Ñ Ñпроб перевірки можливоÑÑ‚Ñ– вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ"
-#: ../tui/nmt-route-table.c:235
-msgid "Next Hop"
-msgstr "ÐаÑтупне переÑиланнÑ"
+#: ../src/nm-config.c:363
+msgid "The interval between connectivity checks (in seconds)"
+msgstr "Інтервал між перевірками можливоÑÑ‚Ñ– Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ (у Ñекундах)"
-#: ../tui/nmt-route-table.c:243
-msgid "Metric"
-msgstr "Метрика"
+#: ../src/nm-config.c:364
+msgid "The expected start of the response"
+msgstr "Очікуваний початок відповіді"
-#: ../tui/nmt-route-table.c:263
-msgid "No custom routes are defined."
-msgstr "Ðетипових маршрутів не визначено."
+#: ../src/nm-config.c:364
+msgid "Bingo!"
+msgstr "Влучно!"
-#: ../tui/nmt-secret-agent.c:223
-msgid "Identity"
-msgstr "Профіль"
+#. Interface/IP config
+#: ../src/nm-iface-helper.c:293
+#| msgid "Parent interface [none]: "
+msgid "The interface to manage"
+msgstr "Ð†Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð´Ð»Ñ ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ"
+
+#: ../src/nm-iface-helper.c:293
+msgid "eth0"
+msgstr "eth0"
+
+#: ../src/nm-iface-helper.c:294
+#| msgid "connection"
+msgid "Connection UUID"
+msgstr "UUID з’єднаннÑ"
+
+#: ../src/nm-iface-helper.c:294
+msgid "661e8cd0-b618-46b8-9dc9-31a52baaa16b"
+msgstr "661e8cd0-b618-46b8-9dc9-31a52baaa16b"
+
+#: ../src/nm-iface-helper.c:295
+msgid "Whether to manage IPv6 SLAAC"
+msgstr "Чи Ñлід керувати SLAAC IPv6"
+
+#: ../src/nm-iface-helper.c:296
+msgid "Whether SLAAC must be successful"
+msgstr "Чи має бути SLAAC уÑпішним"
+
+#: ../src/nm-iface-helper.c:297
+msgid "Use an IPv6 temporary privacy address"
+msgstr "ВикориÑтовувати тимчаÑову приватну адреÑу IPv6"
+
+#: ../src/nm-iface-helper.c:298
+#| msgid "Cloned MAC address"
+msgid "Current DHCPv4 address"
+msgstr "Поточна адреÑа DHCPv4"
+
+#: ../src/nm-iface-helper.c:299
+msgid "Whether DHCPv4 must be successful"
+msgstr "Чи має DHCPv4 бути уÑпішним"
+
+#: ../src/nm-iface-helper.c:300
+#| msgid "unsupported DHCP client '%s'"
+msgid "Hex-encoded DHCPv4 client ID"
+msgstr "Закодований у шіÑтнадцÑткову форму ідентифікатор клієнта DHCPv4"
+
+#: ../src/nm-iface-helper.c:301
+msgid "Hostname to send to DHCP server"
+msgstr "Ðазва вузла Ð´Ð»Ñ Ð½Ð°Ð´ÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° Ñервер DHCP"
+
+#: ../src/nm-iface-helper.c:301
+msgid "barbar"
+msgstr "щоÑьщоÑÑŒ"
+
+#: ../src/nm-iface-helper.c:302
+#| msgid "Priority"
+msgid "Route priority"
+msgstr "Пріоритет маршруту"
+
+#: ../src/nm-iface-helper.c:302
+msgid "10"
+msgstr "10"
+
+#: ../src/nm-iface-helper.c:303
+msgid "Hex-encoded Interface Identifier"
+msgstr "Закодований у шіÑтнадцÑткове чиÑло ідентифікатор інтерфейÑу"
+
+#: ../src/nm-iface-helper.c:324
+msgid ""
+"nm-iface-helper is a small, standalone process that manages a single network "
+"interface."
+msgstr ""
+"nm-iface-helper — малий окремий процеÑ, Ñкий керує окремим інтерфейÑом мережі."
-#: ../tui/nmt-secret-agent.c:228
-msgid "Private key password"
-msgstr "Пароль закритого ключа"
+#: ../src/nm-iface-helper.c:333
+#, c-format
+msgid "An interface name and UUID are required\n"
+msgstr "Потрібні назва Ñ– UUID інтерфейÑу\n"
-#: ../tui/nmt-secret-agent.c:309
-msgid "Service"
-msgstr "Служба"
+#: ../src/nm-iface-helper.c:398
+#, c-format
+#| msgid "Failed to find expected PKCS#8 end tag '%s'."
+msgid "Failed to find interface index for %s\n"
+msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ покажчик інтерфейÑу Ð´Ð»Ñ %s\n"
-#: ../tui/nmt-secret-agent.c:340
-msgid "Authentication required by wireless network"
-msgstr "Ð”Ð»Ñ Ð´Ð¾Ñтупу до бездротової мережі Ñлід пройти розпізнаваннÑ"
+#: ../src/nm-iface-helper.c:414
+#, c-format
+msgid "(%s): Invalid IID %s\n"
+msgstr "(%s): некоректний IID %s\n"
-#: ../tui/nmt-secret-agent.c:341
+#: ../src/nm-logging.c:137
#, c-format
-msgid ""
-"Passwords or encryption keys are required to access the wireless network "
-"'%s'."
-msgstr ""
-"Ð”Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð´Ð¾Ñтупу до бездротової мережі потрібні паролі або ключі "
-"ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Â«%s»."
+msgid "Unknown log level '%s'"
+msgstr "Ðевідомий рівень Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð¶ÑƒÑ€Ð½Ð°Ð»Ñƒ, «%s»"
-#: ../tui/nmt-secret-agent.c:349
-msgid "Wired 802.1X authentication"
-msgstr "Ð Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Ð´Ñ€Ð¾Ñ‚Ð¾Ð²Ð¾Ñ— мережі 802.1X"
+#: ../src/nm-logging.c:219
+#, c-format
+msgid "Unknown log domain '%s'"
+msgstr "Ðевідомий домен Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð¶ÑƒÑ€Ð½Ð°Ð»Ñƒ, «%s»"
-#: ../tui/nmt-secret-agent.c:352
-msgid "Network name"
-msgstr "Ðазва мережі"
+#: ../src/nm-manager.c:3369
+#| msgid "VPN connecting"
+msgid "VPN connection"
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ VPN"
-#: ../tui/nmt-secret-agent.c:359
-msgid "DSL authentication"
-msgstr "Ð Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ DSL"
+#: ../src/nm-sleep-monitor-systemd.c:115
+msgid "NetworkManager needs to turn off networks"
+msgstr "NetworkManager потрібно вимкнути роботу мереж"
-#: ../tui/nmt-secret-agent.c:367
-msgid "PIN code required"
-msgstr "Потрібен PIN-код"
+#: ../src/settings/plugins/ibft/plugin.c:66
+#, c-format
+msgid "ibft: failed to read iscsiadm records: %s"
+msgstr "ibft: не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ запиÑи iscsiadm: %s"
-#: ../tui/nmt-secret-agent.c:368
-msgid "PIN code is needed for the mobile broadband device"
-msgstr ""
-"Ð”Ð»Ñ ÐºÐ¾Ñ€Ð¸ÑÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¸Ñтроєм мобільної широкоÑмугової мережі Ñлід вказати PIN-"
-"код"
+#: ../src/settings/plugins/ibft/plugin.c:74
+#, c-format
+#| msgid "Wired connection %d"
+msgid "ibft: read connection '%s'"
+msgstr "ibft: Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s»"
-#: ../tui/nmt-secret-agent.c:370
-msgid "PIN"
-msgstr "PIN"
+#: ../src/settings/plugins/ibft/plugin.c:80
+#, c-format
+msgid "ibft: failed to read iscsiadm record: %s"
+msgstr "ibft: не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ iscsiadm: %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 "Пароль до мобільної широкоÑмугової мережі"
+#: ../src/settings/plugins/ifcfg-rh/reader.c:113
+msgid "System"
+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» Ñлід вказати пароль."
+#~ msgid "invalid prefix '%s'; <1-32> allowed"
+#~ msgstr ""
+#~ "некоректний префікÑ, «%s»; можна викориÑтовувати префікÑи лише у "
+#~ "діапазоні <1-32>"
-#: ../tui/nmt-slave-list.c:138
-msgid "Select the type of slave connection you wish to add."
-msgstr "Виберіть тип підлеглого з’єднаннÑ, Ñке ви хочете додати."
+#~ msgid "invalid prefix '%s'; <1-128> allowed"
+#~ msgstr ""
+#~ "некоректний префікÑ, «%s»; можна викориÑтовувати префікÑи лише у "
+#~ "діапазоні <1-128>"
-#: ../tui/nmt-widget-list.c:142
-msgid "Add..."
-msgstr "Додати…"
+#~| msgid "invalid next hop address '%s'"
+#~ msgid "invalid route destination address '%s'"
+#~ msgstr "некоректна адреÑа Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ€ÑˆÑ€ÑƒÑ‚Ñƒ, «%s»"
-#: ../tui/nmt-widget-list.c:205
-msgid "Remove"
-msgstr "Вилучити"
+#~ msgid "invalid next hop address '%s'"
+#~ msgstr "некоректна адреÑа наÑтупного переходу, «%s»"
-#: ../tui/nmtui-connect.c:94
-msgid "Activation failed"
-msgstr "Ðевдала Ñпроба активації"
+#~ msgid ""
+#~ "Error: Device '%s' is waiting for slaves before proceeding with "
+#~ "activation."
+#~ msgstr ""
+#~ "Помилка: приÑтрій «%s» очікує на реакцію підлеглих приÑтроїв, перш ніж "
+#~ "продовжувати активацію."
-#: ../tui/nmtui-connect.c:142
-msgid "Connecting..."
-msgstr "Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ..."
+#~ msgid ""
+#~ "Error: 'mode': '%s' is not a valid InfiniBand transport mode [datagram, "
+#~ "connected]."
+#~ msgstr ""
+#~ "Помилка: «mode»: «%s» не Ñ” коректним режимом Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… InfiniBand "
+#~ "[datagram, connected]."
-#: ../tui/nmtui-connect.c:172 ../tui/nmtui-connect.c:195
-#, c-format
-msgid "Could not activate connection: %s"
-msgstr "Ðе вдалоÑÑ Ð·Ð°Ð´Ñ–Ñти з’єднаннÑ: %s"
+#~ msgid "Error: Could not get system settings."
+#~ msgstr "Помилка: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ параметри ÑиÑтеми."
-#: ../tui/nmtui-connect.c:259 ../tui/nmtui-connect.c:308
-msgid "Activate"
-msgstr "Ðктивізувати"
+#~ msgid "Error: Can't obtain connections: settings service is not running."
+#~ msgstr ""
+#~ "Помилка: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ ÑпиÑок з’єднань: Ñлужба параметрів не працює."
-#: ../tui/nmtui-connect.c:261
-msgid "Deactivate"
-msgstr "Вимкнути"
+#~ msgid "not running"
+#~ msgstr "не виконуєтьÑÑ"
-#: ../tui/nmtui-connect.c:313 ../tui/nmtui-edit.c:95 ../tui/nmtui.c:115
-msgid "Quit"
-msgstr "Вийти"
+#~ msgid "Error: %s"
+#~ msgstr "Помилка: %s"
-#: ../tui/nmtui-connect.c:336
-#, c-format
-msgid "No such connection '%s'"
-msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s» не Ñ–Ñнує"
+#~ msgid "0 (unknown)"
+#~ msgstr "0 (невідомо)"
-#: ../tui/nmtui-connect.c:338
-msgid "Connection is already active"
-msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð²Ð¶Ðµ Ñ” активним"
+#~ msgid "any, "
+#~ msgstr "будь-Ñкий, "
-#: ../tui/nmtui-edit.c:200
-msgid "Create"
-msgstr "Створити"
+#~ msgid "900 MHz, "
+#~ msgstr "900 МГц, "
-#: ../tui/nmtui-edit.c:342
-msgid "Select the type of connection you wish to create."
-msgstr "Виберіть тип з’єднаннÑ, Ñке Ñлід Ñтворити."
+#~ msgid "1800 MHz, "
+#~ msgstr "1800 МГц, "
-#: ../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 не вÑтановлено або вÑтановлено неналежним "
-"чином."
+#~ msgid "1900 MHz, "
+#~ msgstr "1900 МГц, "
-#: ../tui/nmtui-edit.c:386 ../tui/nmtui-edit.c:402
-msgid "New Connection"
-msgstr "Ðове з’єднаннÑ"
+#~ msgid "850 MHz, "
+#~ msgstr "800 МГц, "
-#: ../tui/nmtui-edit.c:439
-#, c-format
-msgid "Unable to delete connection: %s"
-msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ з’єднаннÑ: %s"
+#~ msgid "WCDMA 3GPP UMTS 2100 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 2100 МГц, "
-#: ../tui/nmtui-edit.c:468
-#, c-format
-msgid "Are you sure you want to delete the connection '%s'?"
-msgstr "Ви Ñправді хочете вилучити Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Â«%s»?"
+#~ msgid "WCDMA 3GPP UMTS 1800 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 1800 МГц, "
-#: ../tui/nmtui-edit.c:482
-#, c-format
-msgid "Could not delete connection: %s"
-msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ з’єднаннÑ: %s"
+#~ msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 1700/2100 МГц, "
-#: ../tui/nmtui-hostname.c:47
-msgid "Set Hostname"
-msgstr "Ð’Ñтановити назву вузла"
+#~ msgid "WCDMA 3GPP UMTS 800 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 800 МГц, "
-#: ../tui/nmtui-hostname.c:55
-msgid "Hostname"
-msgstr "Ðазва вузла"
+#~ msgid "WCDMA 3GPP UMTS 850 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 850 МГц, "
-#. 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 "WCDMA 3GPP UMTS 900 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 900 МГц, "
-#: ../tui/nmtui-hostname.c:116
-#, c-format
-msgid "Unable to set hostname: %s"
-msgstr "Ðе вдалоÑÑ Ð²Ñтановити назву вузла: %s"
+#~ msgid "WCDMA 3GPP UMTS 1700 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 1700 МГц, "
-#: ../tui/nmtui.c:60 ../tui/nmtui.c:63
-msgid "connection"
-msgstr "з’єднаннÑ"
+#~ msgid "WCDMA 3GPP UMTS 1900 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 1900 МГц, "
-#: ../tui/nmtui.c:61
-msgid "Edit a connection"
-msgstr "Змінити Ð·Ð°Ð¿Ð¸Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ"
+#~ msgid "WCDMA 3GPP UMTS 2600 MHz, "
+#~ msgstr "WCDMA 3GPP UMTS 2600 МГц, "
-#: ../tui/nmtui.c:64
-msgid "Activate a connection"
-msgstr "ЗадіÑти з’єднаннÑ"
+#~ msgid "'%s' is not valid (use ip[/prefix] [gateway])"
+#~ msgstr "«%s» не Ñ” коректним значеннÑм (мало бути ip[/префікÑ] [шлюз])"
-#: ../tui/nmtui.c:66
-msgid "new hostname"
-msgstr "нова назва вузла"
+#~ msgid "'%s' doesn't match the virtual interface name '%s'"
+#~ msgstr "«%s» не відповідає назві віртуального інтерфейÑу «%s»"
-#: ../tui/nmtui.c:67
-msgid "Set system hostname"
-msgstr "Ð’Ñтановити назву вузла ÑиÑтеми"
+#~ msgid "IPv4 configuration is not allowed for slave"
+#~ msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ IPv4 Ð´Ð»Ñ Ð¿Ñ–Ð´Ð»ÐµÐ³Ð»Ð¾Ð³Ð¾ приÑтрою неможливе"
-#: ../tui/nmtui.c:90
-msgid "NetworkManager TUI"
-msgstr "КонÑольний Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð´Ð¾ NetworkManager"
+#~ msgid "IPv6 configuration is not allowed for slave"
+#~ msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ IPv6 Ð´Ð»Ñ Ð¿Ñ–Ð´Ð»ÐµÐ³Ð»Ð¾Ð³Ð¾ приÑтрою неможливе"
-#: ../tui/nmtui.c:98
-msgid "Please select an option"
-msgstr "Будь лаÑка, виберіть варіант"
+#~ msgid "IPv4 address / label count mismatch (%d vs %d)"
+#~ msgstr "ÐевідповідніÑÑ‚ÑŒ кількоÑÑ‚Ñ– Ð°Ð´Ñ€ÐµÑ IPv4 Ñ– кількоÑÑ‚Ñ– міток (%d Ñ– %d)"
-#: ../tui/nmtui.c:159
-msgid "Usage"
-msgstr "КориÑтуваннÑ"
+#~ msgid "GModules are not supported on your platform!\n"
+#~ msgstr "Підтримки GModules на цій платформі не передбачено!\n"
-#: ../tui/nmtui.c:241
-msgid "Could not parse arguments"
-msgstr "Ðе вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ аргументи"
+#~ msgid "'dhclient' could be found."
+#~ msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ «dhclient»."
-#: ../tui/nmtui.c:251
-msgid "NetworkManager is not running."
-msgstr "NetworkManager не запущено."
+#~ msgid "'dhcpcd' could be found."
+#~ msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ «dhcpcd»."
-#~ msgid "invalid IPv4 route '%s'"
-#~ msgstr "некоректний маршрут IPv4, «%s»"
+#~ msgid "Error saving connection: %s"
+#~ msgstr "Помилка під Ñ‡Ð°Ñ Ñпроби зберегти Ð·Ð°Ð¿Ð¸Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ: %s"
#~ msgid "invalid prefix '%s'; <0-32> allowed"
#~ msgstr ""
@@ -7446,37 +8957,17 @@ msgstr "NetworkManager не запущено."
#~ 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"
@@ -7504,9 +8995,6 @@ msgstr "NetworkManager не запущено."
#~ 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"
@@ -7605,12 +9093,6 @@ msgstr "NetworkManager не запущено."
#~ 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"
@@ -7810,25 +9292,14 @@ msgstr "NetworkManager не запущено."
#~ 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."
@@ -7841,9 +9312,6 @@ msgstr "NetworkManager не запущено."
#~ 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"
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 742e0844f..5579d7f0d 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -6,976 +6,3877 @@
# Funda Wang <fundawang@linux.net.cn>, 2004.
# Leah Liu <lliu@redhat.com>, 2010.
# Aron Xu <happyaron.xu@gmail.com>, 2009, 2010.
-#
+# Leah Liu <lliu@redhat.com>, 2013. #zanata
+# Leah Liu <lliu@redhat.com>, 2014. #zanata
msgid ""
msgstr ""
"Project-Id-Version: NetworkManager master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=NetworkManager&component=general\n"
-"POT-Creation-Date: 2010-08-11 03:24+0000\n"
-"PO-Revision-Date: 2010-08-11 21:16+0800\n"
-"Last-Translator: Aron Xu <happyaron.xu@gmail.com>\n"
+"POT-Creation-Date: 2014-01-23 17:13+0530\n"
+"PO-Revision-Date: 2014-02-19 12:16-0500\n"
+"Last-Translator: Leah Liu <lliu@redhat.com>\n"
"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
+"Language: zh-CN\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-Generator: KBabel 1.11.4\n"
+"X-Generator: Zanata 3.2.3\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:174
+#: ../cli/src/connections.c:200
+msgid "GROUP"
+msgstr "组"
+
+#: ../cli/src/common.c:35 ../cli/src/common.c:55
+msgid "ADDRESS"
+msgstr "地å€"
+
+#: ../cli/src/common.c:36 ../cli/src/common.c:56
+msgid "ROUTE"
+msgstr "路由器"
+
+#: ../cli/src/common.c:37 ../cli/src/common.c:57
+msgid "DNS"
+msgstr "DNS"
+
+#: ../cli/src/common.c:38 ../cli/src/common.c:58
+msgid "DOMAIN"
+msgstr "域"
+
+#: ../cli/src/common.c:39
+msgid "WINS"
+msgstr "WINS"
+
+#: ../cli/src/common.c:47 ../cli/src/common.c:66
+msgid "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: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:621
+msgid "unavailable"
+msgstr "ä¸å¯ç”¨"
+
+#: ../cli/src/common.c:623 ../cli/src/network-manager.c:276
+msgid "disconnected"
+msgstr "已断开"
-#: ../cli/src/connections.c:60 ../cli/src/connections.c:75
-#: ../cli/src/devices.c:88 ../cli/src/devices.c:101 ../cli/src/devices.c:111
-#: ../cli/src/devices.c:121 ../cli/src/devices.c:134 ../cli/src/devices.c:145
-#: ../cli/src/devices.c:156 ../cli/src/devices.c:165 ../cli/src/devices.c:174
+#: ../cli/src/common.c:625
+msgid "connecting (prepare)"
+msgstr "连接中(准备)"
+
+#: ../cli/src/common.c:627
+msgid "connecting (configuring)"
+msgstr "连接中(é…ç½®)"
+
+#: ../cli/src/common.c:629
+msgid "connecting (need authentication)"
+msgstr "连接中(需è¦éªŒè¯)"
+
+#: ../cli/src/common.c:631
+msgid "connecting (getting IP configuration)"
+msgstr "连接中(获得 IP é…ç½®)"
+
+#: ../cli/src/common.c:633
+msgid "connecting (checking IP connectivity)"
+msgstr "连接中(正在检查 IP 连接性)"
+
+#: ../cli/src/common.c:635
+msgid "connecting (starting secondary connections)"
+msgstr "连接中(开始二次连接)"
+
+#: ../cli/src/common.c:637 ../cli/src/network-manager.c:272
+msgid "connected"
+msgstr "连接的"
+
+#: ../cli/src/common.c:639 ../cli/src/connections.c:732
+msgid "deactivating"
+msgstr "å–消激活中"
+
+#: ../cli/src/common.c:641
+msgid "connection failed"
+msgstr "连接失败"
+
+#: ../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 "未知"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:652
+msgid "No reason given"
+msgstr "没有给出ç†ç”±"
+
+#: ../cli/src/common.c:655 ../cli/src/connections.c:2258
+#, c-format
+msgid "Unknown error"
+msgstr "未知错误"
+
+#: ../cli/src/common.c:658
+msgid "Device is now managed"
+msgstr "现在已管ç†çš„设备"
+
+#: ../cli/src/common.c:661
+msgid "Device is now unmanaged"
+msgstr "现在未管ç†çš„设备"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:664
+msgid "The device could not be readied for configuration"
+msgstr "无法让该设备准备é…ç½®"
+
+#: ../cli/src/common.c:667
+msgid ""
+"IP configuration could not be reserved (no available address, timeout, etc.)"
+msgstr "IP é…置无法ä¿ç•™ï¼ˆæ²¡æœ‰å¯ç”¨åœ°å€ï¼Œè¶…时等等。)"
+
+#: ../cli/src/common.c:670
+msgid "The IP configuration is no longer valid"
+msgstr "该 IP é…ç½®ä¸å†æœ‰æ•ˆ"
+
+#: ../cli/src/common.c:673
+msgid "Secrets were required, but not provided"
+msgstr "éœ€è¦ secrets 但没有æ供。"
+
+#: ../cli/src/common.c:676
+msgid "802.1X supplicant disconnected"
+msgstr "802.1X 请求被断开"
+
+#: ../cli/src/common.c:679
+msgid "802.1X supplicant configuration failed"
+msgstr "802.1X 请求é…置失败"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:682
+msgid "802.1X supplicant failed"
+msgstr "802.1X 请求失败"
+
+#: ../cli/src/common.c:685
+msgid "802.1X supplicant took too long to authenticate"
+msgstr "802.1X 请求时间太长无法验è¯"
+
+#: ../cli/src/common.c:688
+msgid "PPP service failed to start"
+msgstr "PPP æœåŠ¡å¯åŠ¨å¤±è´¥"
+
+#: ../cli/src/common.c:691
+msgid "PPP service disconnected"
+msgstr "PPP æœåŠ¡å·²æ–­å¼€"
+
+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0
+#: ../cli/src/common.c:694
+msgid "PPP failed"
+msgstr "PPP 失败"
+
+#: ../cli/src/common.c:697
+msgid "DHCP client failed to start"
+msgstr "DHCP æœåŠ¡å¯åŠ¨å¤±è´¥"
+
+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0
+#: ../cli/src/common.c:700
+msgid "DHCP client error"
+msgstr "DHCP 客户端错误"
+
+#: ../cli/src/common.c:703
+msgid "DHCP client failed"
+msgstr "DHCP 客户端失败"
+
+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0
+#: ../cli/src/common.c:706
+msgid "Shared connection service failed to start"
+msgstr "共享连接æœåŠ¡å¯åŠ¨å¤±è´¥"
+
+#: ../cli/src/common.c:709
+msgid "Shared connection service failed"
+msgstr "共享连接æœåŠ¡å¤±è´¥"
+
+#: ../cli/src/common.c:712
+msgid "AutoIP service failed to start"
+msgstr "AutoIP æœåŠ¡å¯åŠ¨å¤±è´¥"
+
+#: ../cli/src/common.c:715
+msgid "AutoIP service error"
+msgstr "AutoIP æœåŠ¡å‡ºé”™"
+
+#: ../cli/src/common.c:718
+msgid "AutoIP service failed"
+msgstr "AutoIP æœåŠ¡å¤±è´¥"
+
+#: ../cli/src/common.c:721
+msgid "The line is busy"
+msgstr "线路ç¹å¿™"
+
+#: ../cli/src/common.c:724
+msgid "No dial tone"
+msgstr "无拨å·éŸ³"
+
+#: ../cli/src/common.c:727
+msgid "No carrier could be established"
+msgstr "无法建立载波"
+
+#: ../cli/src/common.c:730
+msgid "The dialing request timed out"
+msgstr "拨å·è¯·æ±‚超时"
+
+#: ../cli/src/common.c:733
+msgid "The dialing attempt failed"
+msgstr "拨å·å°è¯•å¤±è´¥"
+
+#: ../cli/src/common.c:736
+msgid "Modem initialization failed"
+msgstr "调制解调器åˆå§‹åŒ–失败"
+
+#: ../cli/src/common.c:739
+msgid "Failed to select the specified APN"
+msgstr "无法选择指定的 APN"
+
+#: ../cli/src/common.c:742
+msgid "Not searching for networks"
+msgstr "未æœç´¢ç½‘络"
+
+#: ../cli/src/common.c:745
+msgid "Network registration denied"
+msgstr "网络注册é­æ‹’ç»"
+
+#: ../cli/src/common.c:748
+msgid "Network registration timed out"
+msgstr "网络注册超时"
+
+#: ../cli/src/common.c:751
+msgid "Failed to register with the requested network"
+msgstr "无法在请求的网络上注册"
+
+#: ../cli/src/common.c:754
+msgid "PIN check failed"
+msgstr "PIN 检查未通过"
+
+#: ../cli/src/common.c:757
+msgid "Necessary firmware for the device may be missing"
+msgstr "å¯èƒ½ç¼ºå°‘å¿…è¦çš„设备固件"
+
+#: ../cli/src/common.c:760
+msgid "The device was removed"
+msgstr "设备被删除"
+
+#: ../cli/src/common.c:763
+msgid "NetworkManager went to sleep"
+msgstr "NetworkManager 进入ç¡çœ çŠ¶æ€"
+
+#: ../cli/src/common.c:766
+msgid "The device's active connection disappeared"
+msgstr "该设备的活跃连接消失"
+
+#: ../cli/src/common.c:769
+msgid "Device disconnected by user or client"
+msgstr "用户或者客户端断开与该设备的连接"
+
+#: ../cli/src/common.c:772
+msgid "Carrier/link changed"
+msgstr "载波/链接已å˜æ›´"
+
+#: ../cli/src/common.c:775
+msgid "The device's existing connection was assumed"
+msgstr "å·²æ¢å¤è®¾å¤‡çš„现有连接"
+
+#: ../cli/src/common.c:778
+msgid "The supplicant is now available"
+msgstr "请求现已å¯ç”¨"
+
+#: ../cli/src/common.c:781
+msgid "The modem could not be found"
+msgstr "未找到调制解调器"
+
+#: ../cli/src/common.c:784
+msgid "The Bluetooth connection failed or timed out"
+msgstr "è“牙连接失败或者超时"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:787
+msgid "GSM Modem's SIM card not inserted"
+msgstr "未æ’å…¥ GSM 调制解调器的 SIM å¡"
+
+#: ../cli/src/common.c:790
+msgid "GSM Modem's SIM PIN required"
+msgstr "éœ€è¦ GSM 调制解调器 SIM å¡çš„ PIN ç "
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:793
+msgid "GSM Modem's SIM PUK required"
+msgstr "éœ€è¦ GSM 调制解调器 SIM å¡çš„ PUK ç "
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:796
+msgid "GSM Modem's SIM wrong"
+msgstr "GSM 调制解调器的 SIM å¡é”™è¯¯"
+
+# auto translated by TM merge from project: control-center, version: 3.8.3, DocId: gnome-control-center-2.0
+#: ../cli/src/common.c:799
+msgid "InfiniBand device does not support connected mode"
+msgstr "高速互è”设备ä¸æ”¯æŒå·²è¿žæŽ¥æ¨¡å¼"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:802
+msgid "A dependency of the connection failed"
+msgstr "连接的相ä¾æ€§å¤±è´¥"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:805
+msgid "A problem with the RFC 2684 Ethernet over ADSL bridge"
+msgstr "ADSL 桥接的 RFC 2684 网å¡æœ‰é—®é¢˜"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:808
+msgid "ModemManager is unavailable"
+msgstr "ModemManager ä¸å¯ç”¨"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../cli/src/common.c:811
+msgid "The Wi-Fi network could not be found"
+msgstr "无法找到 Wi-Fi 网络"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../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 控制失败"
+
+#: ../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' 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
-#: ../cli/src/connections.c:61 ../cli/src/connections.c:76
+#: ../cli/src/connections.c:69 ../cli/src/connections.c:176
msgid "UUID"
msgstr "UUID"
-#. 1
-#: ../cli/src/connections.c:62
+#: ../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 "类型"
+
+#: ../cli/src/connections.c:71
+msgid "TIMESTAMP"
+msgstr "时间戳"
+
+#: ../cli/src/connections.c:72
+msgid "TIMESTAMP-REAL"
+msgstr "真实时间戳"
+
+#: ../cli/src/connections.c:73 ../cli/src/devices.c:101
+msgid "AUTOCONNECT"
+msgstr "自动连接"
+
+#: ../cli/src/connections.c:74
+msgid "READONLY"
+msgstr "åªè¯»"
+
+# auto translated by TM merge from project: NetworkManager, version: 0.9.8.2, DocId: NetworkManager
+#: ../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"
+
+#: ../cli/src/connections.c:177
msgid "DEVICES"
msgstr "设备"
-#. 2
-#: ../cli/src/connections.c:63 ../cli/src/connections.c:78
-msgid "SCOPE"
-msgstr "范围"
+#: ../cli/src/connections.c:178 ../cli/src/devices.c:73
+#: ../cli/src/devices.c:96 ../cli/src/network-manager.c:39
+msgid "STATE"
+msgstr "状æ€"
-#. 3
-#: ../cli/src/connections.c:64
+#: ../cli/src/connections.c:179
msgid "DEFAULT"
msgstr "默认"
-#. 4
-#: ../cli/src/connections.c:65
-msgid "DBUS-SERVICE"
-msgstr "DBUS æœåŠ¡"
+#: ../cli/src/connections.c:180
+msgid "DEFAULT6"
+msgstr "DEFAULT6"
-#. 5
-#: ../cli/src/connections.c:66
+#: ../cli/src/connections.c:181
msgid "SPEC-OBJECT"
msgstr "SPEC 对象"
-#. 6
-#: ../cli/src/connections.c:67
+#: ../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"
-#. 1
-#. 0
-#. 1
-#: ../cli/src/connections.c:77 ../cli/src/devices.c:62 ../cli/src/devices.c:90
-msgid "TYPE"
-msgstr "类型"
+#: ../cli/src/connections.c:184 ../cli/src/devices.c:77
+#: ../cli/src/devices.c:105
+msgid "CON-PATH"
+msgstr "CON-PATH"
-#. 3
-#: ../cli/src/connections.c:79
-msgid "TIMESTAMP"
-msgstr "时间戳"
+#: ../cli/src/connections.c:185
+msgid "ZONE"
+msgstr "ZONE"
-#. 4
-#: ../cli/src/connections.c:80
-msgid "TIMESTAMP-REAL"
-msgstr "真实时间戳"
+#: ../cli/src/connections.c:186
+msgid "MASTER-PATH"
+msgstr "MASTER-PATH"
-#. 5
-#: ../cli/src/connections.c:81
-msgid "AUTOCONNECT"
-msgstr "自动连接"
+#: ../cli/src/connections.c:202
+msgid "USERNAME"
+msgstr "USERNAME"
-#. 6
-#: ../cli/src/connections.c:82
-msgid "READONLY"
-msgstr "åªè¯»"
+#: ../cli/src/connections.c:203
+msgid "GATEWAY"
+msgstr "网关"
+
+#: ../cli/src/connections.c:204
+msgid "BANNER"
+msgstr "BANNER"
+
+#: ../cli/src/connections.c:205
+msgid "VPN-STATE"
+msgstr "VPN-STATE"
+
+#: ../cli/src/connections.c:206
+msgid "CFG"
+msgstr "CFG"
+
+#: ../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:158
+#: ../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"
+"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"
-" 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"
msgstr ""
-"用法:nmcli con { 命令 | help }\n"
-" 命令 := { list | status | up | down }\n"
+"用法: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"
-" 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:198 ../cli/src/connections.c:537
+#: ../cli/src/connections.c:278
#, c-format
-msgid "Error: 'con list': %s"
-msgstr "错误:'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 ""
+"用法: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"
-#: ../cli/src/connections.c:200 ../cli/src/connections.c:539
+#: ../cli/src/connections.c:297
#, c-format
-msgid "Error: 'con list': %s; allowed fields: %s"
-msgstr "错误:'con list': %sï¼›å…许的字段:%s"
+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"
+"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"
-#: ../cli/src/connections.c:208
-msgid "Connection details"
-msgstr "连接详情"
+#: ../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"
+"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"
-#: ../cli/src/connections.c:382 ../cli/src/connections.c:602
-msgid "system"
-msgstr "系统"
+#: ../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"
+"Modify a single property in the connection profile.\n"
+"The profile is identified by its name, UUID or D-Bus path.\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"
+"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"
+
+#: ../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"
+"Delete a connection profile.\n"
+"The profile is identified by its name, UUID or D-Bus path.\n"
+"\n"
-#: ../cli/src/connections.c:382 ../cli/src/connections.c:602
-msgid "user"
-msgstr "用户"
+#: ../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"
+"Reload all connection files from disk.\n"
+"\n"
-#: ../cli/src/connections.c:384
+#: ../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"
+"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"
+
+#: ../cli/src/connections.c:515
+#, c-format
+msgid "Error: 'list configured': %s"
+msgstr "错误:'list configured': %s"
+
+#: ../cli/src/connections.c:523
+msgid "Connection details"
+msgstr "连接详情"
+
+#: ../cli/src/connections.c:589
msgid "never"
msgstr "从ä¸"
-#. "CAPABILITIES"
-#. Print header
-#. "WIFI-PROPERTIES"
-#: ../cli/src/connections.c:385 ../cli/src/connections.c:386
-#: ../cli/src/connections.c:603 ../cli/src/connections.c:606
-#: ../cli/src/devices.c:432 ../cli/src/devices.c:557 ../cli/src/devices.c:583
-#: ../cli/src/devices.c:584 ../cli/src/devices.c:585 ../cli/src/devices.c:586
-#: ../cli/src/devices.c:587 ../cli/src/settings.c:508
-#: ../cli/src/settings.c:551 ../cli/src/settings.c:652
-#: ../cli/src/settings.c:926 ../cli/src/settings.c:927
-#: ../cli/src/settings.c:929 ../cli/src/settings.c:931
-#: ../cli/src/settings.c:1056 ../cli/src/settings.c:1057
-#: ../cli/src/settings.c:1058 ../cli/src/settings.c:1137
-#: ../cli/src/settings.c:1138 ../cli/src/settings.c:1139
-#: ../cli/src/settings.c:1140 ../cli/src/settings.c:1141
-#: ../cli/src/settings.c:1142 ../cli/src/settings.c:1143
-#: ../cli/src/settings.c:1144 ../cli/src/settings.c:1145
-#: ../cli/src/settings.c:1146 ../cli/src/settings.c:1147
-#: ../cli/src/settings.c:1148 ../cli/src/settings.c:1149
-#: ../cli/src/settings.c:1224
+#: ../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:385 ../cli/src/connections.c:386
-#: ../cli/src/connections.c:603 ../cli/src/connections.c:606
-#: ../cli/src/devices.c:432 ../cli/src/devices.c:557 ../cli/src/devices.c:583
-#: ../cli/src/devices.c:584 ../cli/src/devices.c:585 ../cli/src/devices.c:586
-#: ../cli/src/devices.c:587 ../cli/src/settings.c:508
-#: ../cli/src/settings.c:510 ../cli/src/settings.c:551
-#: ../cli/src/settings.c:652 ../cli/src/settings.c:926
-#: ../cli/src/settings.c:927 ../cli/src/settings.c:929
-#: ../cli/src/settings.c:931 ../cli/src/settings.c:1056
-#: ../cli/src/settings.c:1057 ../cli/src/settings.c:1058
-#: ../cli/src/settings.c:1137 ../cli/src/settings.c:1138
-#: ../cli/src/settings.c:1139 ../cli/src/settings.c:1140
-#: ../cli/src/settings.c:1141 ../cli/src/settings.c:1142
-#: ../cli/src/settings.c:1143 ../cli/src/settings.c:1144
-#: ../cli/src/settings.c:1145 ../cli/src/settings.c:1146
-#: ../cli/src/settings.c:1147 ../cli/src/settings.c:1148
-#: ../cli/src/settings.c:1149 ../cli/src/settings.c:1224
+#: ../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:458 ../cli/src/connections.c:501
-msgid "System connections"
-msgstr "系统连接"
-
-#: ../cli/src/connections.c:463 ../cli/src/connections.c:514
-msgid "User connections"
-msgstr "用户连接"
-
-#: ../cli/src/connections.c:475 ../cli/src/connections.c:1335
-#: ../cli/src/connections.c:1351 ../cli/src/connections.c:1360
-#: ../cli/src/connections.c:1371 ../cli/src/connections.c:1456
-#: ../cli/src/devices.c:962 ../cli/src/devices.c:972 ../cli/src/devices.c:1074
-#: ../cli/src/devices.c:1081
+#: ../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:488
+#: ../cli/src/connections.c:698
#, c-format
msgid "Error: %s - no such connection."
msgstr "错误:%s - 没有这个连接。"
-#: ../cli/src/connections.c:520 ../cli/src/connections.c:1384
-#: ../cli/src/connections.c:1474 ../cli/src/devices.c:785
-#: ../cli/src/devices.c:852 ../cli/src/devices.c:986 ../cli/src/devices.c:1087
+#: ../cli/src/connections.c:710
#, c-format
-msgid "Unknown parameter: %s\n"
-msgstr "未知å‚数:%s\n"
+msgid "Error: 'show configured': %s"
+msgstr "错误:'show configured': %s"
-#: ../cli/src/connections.c:529
-#, c-format
-msgid "Error: no valid parameter specified."
-msgstr "错误:没有指定有效å‚数。"
-
-#: ../cli/src/connections.c:544 ../cli/src/connections.c:1577
-#: ../cli/src/devices.c:1293 ../cli/src/network-manager.c:274
+#: ../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:650
-#, c-format
-msgid "Error: 'con status': %s"
-msgstr "错误:'con status': %s"
-
-#: ../cli/src/connections.c:652
-#, c-format
-msgid "Error: 'con status': %s; allowed fields: %s"
-msgstr "错误:'con status': %sï¼›å…许的字段:%s"
-
-#: ../cli/src/connections.c:659
-msgid "Active connections"
-msgstr "活跃连接"
-
-#: ../cli/src/connections.c:1027
-#, c-format
-msgid "no active connection on device '%s'"
-msgstr "设备 '%s' 中没有活跃连接"
-
-#: ../cli/src/connections.c:1035
-#, c-format
-msgid "no active connection or device"
-msgstr "没有活跃连接或者设备"
-
-#: ../cli/src/connections.c:1085
-#, c-format
-msgid "device '%s' not compatible with connection '%s'"
-msgstr "设备 '%s' ä¸å…¼å®¹è¿žæŽ¥ '%s'"
-
-#: ../cli/src/connections.c:1087
-#, c-format
-msgid "no device found for connection '%s'"
-msgstr "没有找到å¯ç”¨äºŽè¿žæŽ¥ '%s' 的设备"
-
-#: ../cli/src/connections.c:1098
+#: ../cli/src/connections.c:728
msgid "activating"
msgstr "激活中"
-#: ../cli/src/connections.c:1100
+#: ../cli/src/connections.c:730
msgid "activated"
msgstr "已激活"
-#: ../cli/src/connections.c:1103 ../cli/src/connections.c:1126
-#: ../cli/src/connections.c:1159 ../cli/src/devices.c:246
-#: ../cli/src/devices.c:558 ../cli/src/network-manager.c:92
-#: ../cli/src/network-manager.c:145 ../cli/src/settings.c:473
-msgid "unknown"
-msgstr "未知"
+#: ../cli/src/connections.c:734
+msgid "deactivated"
+msgstr "å·²å–消激活的"
-#: ../cli/src/connections.c:1112
+#: ../cli/src/connections.c:746
msgid "VPN connecting (prepare)"
msgstr "VPN 连接(准备)"
-#: ../cli/src/connections.c:1114
+#: ../cli/src/connections.c:748
msgid "VPN connecting (need authentication)"
msgstr "VPN 连接中(需è¦éªŒè¯)"
-#: ../cli/src/connections.c:1116
+#: ../cli/src/connections.c:750
msgid "VPN connecting"
msgstr "VPN 连接中"
-#: ../cli/src/connections.c:1118
+#: ../cli/src/connections.c:752
msgid "VPN connecting (getting IP configuration)"
msgstr "VPN 连接中(èŽ·å– IP é…ç½®)"
-#: ../cli/src/connections.c:1120
+#: ../cli/src/connections.c:754
msgid "VPN connected"
msgstr "VPN 连接"
-#: ../cli/src/connections.c:1122
+#: ../cli/src/connections.c:756
msgid "VPN connection failed"
msgstr "VPN 连接失败"
-#: ../cli/src/connections.c:1124
+#: ../cli/src/connections.c:758
msgid "VPN disconnected"
msgstr "断开 VPN 连接"
-#: ../cli/src/connections.c:1135
+#: ../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:1012
+#, c-format
+msgid "Error: 'list active': %s"
+msgstr "错误:'list active': %s"
+
+#: ../cli/src/connections.c:1020
+msgid "Active connection details"
+msgstr "活跃连接详情"
+
+#: ../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:1203
+msgid "List of active connections"
+msgstr "活跃连接列表"
+
+#: ../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:1251
+#, c-format
+msgid "Error: 'show active': %s"
+msgstr "错误:'show active': %s"
+
+#: ../cli/src/connections.c:1344
+#, c-format
+msgid "no active connection on device '%s'"
+msgstr "设备 '%s' 中没有活跃连接"
+
+#: ../cli/src/connections.c:1352
+msgid "no active connection or device"
+msgstr "没有活跃连接或者设备"
+
+#: ../cli/src/connections.c:1423
+#, c-format
+msgid "device '%s' not compatible with connection '%s'"
+msgstr "设备 '%s' ä¸å…¼å®¹è¿žæŽ¥ '%s'"
+
+#: ../cli/src/connections.c:1426
+#, c-format
+msgid "no device found for connection '%s'"
+msgstr "没有找到å¯ç”¨äºŽè¿žæŽ¥ '%s' 的设备"
+
+#: ../cli/src/connections.c:1438
msgid "unknown reason"
msgstr "未知原因"
-#: ../cli/src/connections.c:1137
+#: ../cli/src/connections.c:1440 ../cli/src/network-manager.c:288
msgid "none"
msgstr "æ— "
-#: ../cli/src/connections.c:1139
+#: ../cli/src/connections.c:1442
msgid "the user was disconnected"
msgstr "用户已断开连接"
-#: ../cli/src/connections.c:1141
+#: ../cli/src/connections.c:1444
msgid "the base network connection was interrupted"
msgstr "基点网络连接中断"
-#: ../cli/src/connections.c:1143
+#: ../cli/src/connections.c:1446
msgid "the VPN service stopped unexpectedly"
msgstr "VPN æœåŠ¡æ„外åœæ­¢"
-#: ../cli/src/connections.c:1145
+#: ../cli/src/connections.c:1448
msgid "the VPN service returned invalid configuration"
msgstr "VPN æœåŠ¡è¿”回无效é…ç½®"
-#: ../cli/src/connections.c:1147
+#: ../cli/src/connections.c:1450
msgid "the connection attempt timed out"
msgstr "连接å°è¯•è¶…æ—¶"
-#: ../cli/src/connections.c:1149
+#: ../cli/src/connections.c:1452
msgid "the VPN service did not start in time"
msgstr "VPN 连接没有按时å¯åŠ¨"
-#: ../cli/src/connections.c:1151
+#: ../cli/src/connections.c:1454
msgid "the VPN service failed to start"
msgstr "VPN æœåŠ¡å¯åŠ¨å¤±è´¥"
-#: ../cli/src/connections.c:1153
+#: ../cli/src/connections.c:1456
msgid "no valid VPN secrets"
msgstr "没有有效的 VPN 加密"
-#: ../cli/src/connections.c:1155
+#: ../cli/src/connections.c:1458
msgid "invalid VPN secrets"
msgstr "无效 VPN 加密"
-#: ../cli/src/connections.c:1157
+#: ../cli/src/connections.c:1460
msgid "the connection was removed"
msgstr "连接被删除"
-#: ../cli/src/connections.c:1171
-#, c-format
-msgid "state: %s\n"
-msgstr "状æ€ï¼š%s\n"
-
-#: ../cli/src/connections.c:1174 ../cli/src/connections.c:1200
+#: ../cli/src/connections.c:1477 ../cli/src/connections.c:1633
+#: ../cli/src/connections.c:6016
#, c-format
-msgid "Connection activated\n"
-msgstr "连接已激活\n"
+msgid "Connection successfully activated (D-Bus active path: %s)\n"
+msgstr "æˆåŠŸæ¿€æ´»çš„连接(D-Bus 激活路径:%s)\n"
-#: ../cli/src/connections.c:1177
+#: ../cli/src/connections.c:1482
#, c-format
msgid "Error: Connection activation failed."
msgstr "错误:激活连接失败。"
-#: ../cli/src/connections.c:1196
+#: ../cli/src/connections.c:1507
#, c-format
-msgid "state: %s (%d)\n"
-msgstr "状æ€ï¼š%s (%d)\n"
+msgid "VPN connection successfully activated (D-Bus active path: %s)\n"
+msgstr "æˆåŠŸæ¿€æ´»çš„ VPN 连接(D-Bus 激活路径:%s)\n"
-#: ../cli/src/connections.c:1206
+#: ../cli/src/connections.c:1514
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "错误:激活连接失败:%s。"
-#: ../cli/src/connections.c:1223 ../cli/src/devices.c:909
+#: ../cli/src/connections.c:1532 ../cli/src/devices.c:1294
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "错误:超时 %d 秒过期。"
-#: ../cli/src/connections.c:1266
+#: ../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:1280
+#: ../cli/src/connections.c:1722 ../cli/src/connections.c:1854
+msgid "unknown error"
+msgstr "未知错误"
+
+#: ../cli/src/connections.c:1730
+#, c-format
+msgid "unknown device '%s'."
+msgstr "未知设备 '%s'。"
+
+#: ../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 "Unknown parameter: %s\n"
+msgstr "未知å‚数:%s\n"
+
+#: ../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: Obtaining active connection for '%s' failed."
-msgstr "é”™è¯¯ï¼šèŽ·å– '%s' 的活跃连接失败。"
+msgid "Error: No connection specified."
+msgstr "错误:未指定连接。"
-#: ../cli/src/connections.c:1289
+#: ../cli/src/connections.c:2237 ../cli/src/utils.c:490
#, c-format
-msgid "Active connection state: %s\n"
-msgstr "活跃连接状æ€ï¼š%s\n"
+msgid "'%s' not among [%s]"
+msgstr "'%s' ä¸å† [%s] 中"
-#: ../cli/src/connections.c:1290
+#: ../cli/src/connections.c:2319
#, c-format
-msgid "Active connection path: %s\n"
-msgstr "活跃连接路径:%s\n"
+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:1344 ../cli/src/connections.c:1465
+#: ../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 "Error: Unknown connection: %s."
-msgstr "错误:未知连接:%s"
+msgid "Error: 'mtu': '%s' is not a valid MTU."
+msgstr "错误:'mtu': '%s' ä¸æ˜¯æœ‰æ•ˆ MTU。"
-#: ../cli/src/connections.c:1379 ../cli/src/devices.c:980
+#: ../cli/src/connections.c:2359
#, c-format
-msgid "Error: timeout value '%s' is not valid."
-msgstr "错误:超时值 '%s' 无效。"
+msgid "Error: 'parent': '%s' is not a valid interface name."
+msgstr "错误:'parent': '%s' ä¸æ˜¯æœ‰æ•ˆæŽ¥å£å。"
-#: ../cli/src/connections.c:1392 ../cli/src/connections.c:1482
+#: ../cli/src/connections.c:2380
#, c-format
-msgid "Error: id or uuid has to be specified."
-msgstr "错误:必须指定 ID 或者 UUID。"
+msgid "Error: 'p-key': '%s' is not a valid InfiniBand P_KEY."
+msgstr "错误:'p-key': '%s' ä¸æ˜¯æœ‰æ•ˆ InfiniBand P_KEY。"
-#: ../cli/src/connections.c:1412
+#: ../cli/src/connections.c:2396
#, c-format
-msgid "Error: No suitable device found: %s."
-msgstr "错误:没有找到åˆé€‚的设备:%s。"
+msgid ""
+"Error: 'mode': '%s' is not a valid InfiniBand transport mode [datagram, "
+"connected]."
+msgstr "错误:'mode': '%s' ä¸æ˜¯æœ‰æ•ˆ InfiniBand ä¼ è¾“æ¨¡å¼ [datagram, connected]。"
-#: ../cli/src/connections.c:1414
+#: ../cli/src/connections.c:2412
#, c-format
-msgid "Error: No suitable device found."
-msgstr "错误:没有找到åˆé€‚的设备。"
+msgid "Error: 'flags': '%s' is not valid; use <0-7>."
+msgstr "错误:'flags': '%s' 无效;使用 <0-7>。"
-#: ../cli/src/connections.c:1509
+#: ../cli/src/connections.c:2434
#, c-format
-msgid "Warning: Connection not active\n"
-msgstr "警告:连接没有激活\n"
+msgid "Error: '%s': '%s' is not valid; %s "
+msgstr "错误:'%s': '%s' 无效; %s"
-#: ../cli/src/connections.c:1566
+#: ../cli/src/connections.c:2541
#, c-format
-msgid "Error: 'con' command '%s' is not valid."
-msgstr "错误:'con' 命令 '%s' 无效。"
+msgid "Error: '%s': '%s' is not valid; use <%u-%u>."
+msgstr "错误:'%s': '%s' 无效;使用 <%u-%u>。"
+
+#: ../cli/src/connections.c:2555
+msgid "ethernet"
+msgstr "以太网"
+
+#: ../cli/src/connections.c:2555 ../tui/nm-editor-utils.c:164
+#: ../tui/nm-ui-utils.c:337
+msgid "Wi-Fi"
+msgstr "Wi-Fi"
-#: ../cli/src/connections.c:1602
+#: ../cli/src/connections.c:2558
#, c-format
-msgid "Error: could not connect to D-Bus."
-msgstr "错误:无法连接到 D-Bus。"
+msgid "There are 3 optional arguments for '%s' connection type.\n"
+msgstr "'%s' 连接类型有 3 个自选å‚数。\n"
-#: ../cli/src/connections.c:1609
+#: ../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]"
+
+#: ../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 [none]: "
+
+#: ../cli/src/connections.c:2589
+msgid "Cloned MAC [none]: "
+msgstr "克隆的 MAC [none]: "
+
+#: ../cli/src/connections.c:2612
#, c-format
-msgid "Error: Could not get system settings."
-msgstr "错误:无法获得系统设置。"
+msgid "There are 5 optional arguments for 'InfiniBand' connection type.\n"
+msgstr "'InfiniBand' 连接类型有 5 个自选å‚数。\n"
-#: ../cli/src/connections.c:1617
+#: ../cli/src/connections.c:2643
+msgid "Transport mode (datagram or connected) [datagram]: "
+msgstr "传输模å¼ï¼ˆdatagram 或者 connected)[datagram]:"
+
+#: ../cli/src/connections.c:2656
+msgid "Parent interface [none]: "
+msgstr "ä¸Šçº§æŽ¥å£ [none]:"
+
+#: ../cli/src/connections.c:2667
+msgid "P_KEY [none]: "
+msgstr "P_KEY [none]: "
+
+#: ../cli/src/connections.c:2677
#, c-format
-msgid "Error: Could not get user settings."
-msgstr "错误:无法获得用户设置。"
+msgid "Error: 'p-key' is mandatory when 'parent' is specified.\n"
+msgstr "错误:指定 'parent' 时 'p-key' 是强制性的。\n"
-#: ../cli/src/connections.c:1627
+#: ../cli/src/connections.c:2702
#, c-format
-msgid "Error: Can't obtain connections: settings services are not running."
-msgstr "错误:无法获得连接:设定æœåŠ¡æ²¡æœ‰è¿è¡Œã€‚"
+msgid "There is 1 optional argument for 'WiMax' connection type.\n"
+msgstr "'WiMax' 连接类型有 1 个自选å‚数。\n"
-#. 0
-#. 9
-#: ../cli/src/devices.c:61 ../cli/src/devices.c:89 ../cli/src/devices.c:184
-msgid "DEVICE"
-msgstr "设备"
+#: ../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]"
-#. 1
-#. 4
-#. 0
-#: ../cli/src/devices.c:63 ../cli/src/devices.c:93
-#: ../cli/src/network-manager.c:36
-msgid "STATE"
-msgstr "状æ€"
+#: ../cli/src/connections.c:2734
+#, c-format
+msgid "There are 4 optional arguments for 'PPPoE' connection type.\n"
+msgstr "'PPPoE' 连接类型有四个å¯é€‰å‚数。\n"
-#: ../cli/src/devices.c:72
-msgid "GENERAL"
-msgstr "常规"
+#: ../cli/src/connections.c:2742 ../cli/src/connections.c:2790
+msgid "Password [none]: "
+msgstr "å¯†ç  [none]: "
-#. 0
-#: ../cli/src/devices.c:73
-msgid "CAPABILITIES"
-msgstr "功能"
+#: ../cli/src/connections.c:2744
+msgid "Service [none]: "
+msgstr "æœåŠ¡[æ— ]:"
-#. 1
-#: ../cli/src/devices.c:74
-msgid "WIFI-PROPERTIES"
-msgstr "WIFI 属性"
+#: ../cli/src/connections.c:2780
+#, c-format
+msgid ""
+"There are 2 optional arguments for 'mobile broadband' connection type.\n"
+msgstr "'mobile broadband' 连接类型有 2 个自选å‚数。\n"
-#. 2
-#: ../cli/src/devices.c:75
-msgid "AP"
-msgstr "AP"
+#: ../cli/src/connections.c:2788 ../cli/src/connections.c:3233
+msgid "Username [none]: "
+msgstr "用户å [none]: "
-#. 3
-#: ../cli/src/devices.c:76
-msgid "WIRED-PROPERTIES"
-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 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 标签 (<0-7>) [none]: "
+
+#: ../cli/src/connections.c:2871
+msgid "Ingress priority maps [none]: "
+msgstr "å…¥å£é¦–选项映射 [none]: "
+
+#: ../cli/src/connections.c:2882
+msgid "Egress priority maps [none]: "
+msgstr "出å£é¦–选项映射 [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 "ç»‘å®šæ¨¡å¼ [balance-rr]: "
+
+#: ../cli/src/connections.c:2934
+msgid "Bonding primary interface [none]: "
+msgstr "ç»‘å®šçš„ä¸»æŽ¥å£ [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 "绑定 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' 连接类型有一个å¯é€‰å‚数。\n"
+
+#: ../cli/src/connections.c:3032
+msgid "Team JSON configuration [none]: "
+msgstr "Team JSON é…ç½® [none]:"
+
+#: ../cli/src/connections.c:3051
+msgid "team"
+msgstr "team"
+
+#: ../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' 连接类型有 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 Mesh é¢‘é“ [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 åœ°å€ [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 å称:"
-#. 4
-#: ../cli/src/devices.c:77
-msgid "IP4-SETTINGS"
-msgstr "IP4 设置"
+#: ../cli/src/connections.c:3639
+msgid "Error: 'nsp' is required."
+msgstr "错误:ä¸éœ€è¦ 'nsp'。"
-#. 5
-#: ../cli/src/devices.c:78
-msgid "IP4-DNS"
-msgstr "IP4-DNS"
+#: ../cli/src/connections.c:3694
+msgid "PPPoE username: "
+msgstr "PPPoE 用户å:"
-#. 6
-#: ../cli/src/devices.c:79
-msgid "IP6-SETTINGS"
-msgstr "IP6 设置"
+#: ../cli/src/connections.c:3697
+msgid "Error: 'username' is required."
+msgstr "é”™è¯¯ï¼šéœ€è¦ 'username'。"
-#. 7
-#: ../cli/src/devices.c:80
-msgid "IP6-DNS"
-msgstr "IP6-DNS"
+#: ../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 "Team master: "
+
+#: ../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' setting values]\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 ""
+"进入 <setting>[.<prop>] | <prop> :: 输入è¦ç¼–辑的设置/属性\n"
+"\n"
+"这个命令å¯è¿›å…¥è¦ç¼–辑的设置或者属性。\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"
+"这个命令删除整个连接中的设置,或者如果给定属性,则将该属性é‡ç½®ä¸ºé»˜è®¤å€¼ã€‚\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"
+"这个命令设定属性值。\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"
+"显示属性æ述。您å¯ä»¥å‚考 nm-settings(5) 手册页é¢æŸ¥çœ‹æ‰€æœ‰ 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] :: print setting or connection values\n"
+"\n"
+"显示当å‰å±žæ€§æˆ–者整个连接。\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"
+"验è¯è¯¥è®¾ç½®æˆ–者连接是å¦æœ‰æ•ˆä¸”å¯åœ¨ä»¥åŽä¿å­˜ã€‚它以错误信æ¯ä½œä¸ºæ— æ•ˆå€¼ã€‚\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"
+"将连接å‘é€åˆ°å¯ä¿å­˜å®ƒçš„ 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> - 在其中激活连接的设备。\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 :: 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"
+"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"
+"这个命令退出 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"
+"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"
+"显示属性æ述。您å¯ä»¥å‚考 nm-settings(5) 手册页é¢æŸ¥çœ‹æ‰€æœ‰ 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] :: 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 "[ 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 "错误: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 ""
+">>> 命令行编辑ä¸å¯ç”¨ã€‚考虑安装编辑库的行å¯ç”¨è¯¥åŠŸèƒ½ã€‚ <<<\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 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 "错误:'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 "设备"
+
+#: ../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"
+
+#: ../cli/src/devices.c:90
+msgid "PRODUCT"
+msgstr "PRODUCT"
-#. 2
#: ../cli/src/devices.c:91
msgid "DRIVER"
msgstr "驱动程åº"
-#. 3
#: ../cli/src/devices.c:92
+msgid "DRIVER-VERSION"
+msgstr "DRIVER-VERSION"
+
+#: ../cli/src/devices.c:93
+msgid "FIRMWARE-VERSION"
+msgstr "FIRMWARE-VERSION"
+
+#: ../cli/src/devices.c:94
msgid "HWADDR"
msgstr "硬盘"
-#. 0
+#: ../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"
+
+#: ../cli/src/devices.c:98
+msgid "UDI"
+msgstr "UDI"
+
+#: ../cli/src/devices.c:99
+msgid "IP-IFACE"
+msgstr "IP-IFACE"
+
+#: ../cli/src/devices.c:100
+msgid "NM-MANAGED"
+msgstr "NM-MANAGED"
+
#: ../cli/src/devices.c:102
+msgid "FIRMWARE-MISSING"
+msgstr "FIRMWARE-MISSING"
+
+#: ../cli/src/devices.c:115
+msgid "AVAILABLE-CONNECTION-PATHS"
+msgstr "AVAILABLE-CONNECTION-PATHS"
+
+#: ../cli/src/devices.c:116
+msgid "AVAILABLE-CONNECTIONS"
+msgstr "AVAILABLE-CONNECTIONS"
+
+#: ../cli/src/devices.c:125
msgid "CARRIER-DETECT"
msgstr "容器探测"
-#. 1
-#: ../cli/src/devices.c:103
+#: ../cli/src/devices.c:126
msgid "SPEED"
msgstr "速度"
-#. 0
-#: ../cli/src/devices.c:112
+#: ../cli/src/devices.c:135
msgid "CARRIER"
msgstr "容器"
-#. 0
-#: ../cli/src/devices.c:122
+#: ../cli/src/devices.c:144 ../cli/src/devices.c:563
msgid "WEP"
msgstr "WEP"
-#. 1
-#: ../cli/src/devices.c:123
+#: ../cli/src/devices.c:145
msgid "WPA"
msgstr "WPA"
-#. 2
-#: ../cli/src/devices.c:124
+#: ../cli/src/devices.c:146 ../cli/src/devices.c:571
msgid "WPA2"
msgstr "WPA2"
-#. 3
-#: ../cli/src/devices.c:125
+#: ../cli/src/devices.c:147
msgid "TKIP"
msgstr "TKIP"
-#. 4
-#: ../cli/src/devices.c:126
+#: ../cli/src/devices.c:148
msgid "CCMP"
msgstr "CCMP"
-#. 0
-#: ../cli/src/devices.c:135 ../cli/src/devices.c:146
-msgid "ADDRESS"
-msgstr "地å€"
+#: ../cli/src/devices.c:149 ../cli/src/devices.c:239
+msgid "AP"
+msgstr "AP"
-#. 1
-#: ../cli/src/devices.c:136 ../cli/src/devices.c:147
-msgid "PREFIX"
-msgstr "å‰ç¼€"
+#: ../cli/src/devices.c:150
+msgid "ADHOC"
+msgstr "ADHOC"
-#. 2
-#: ../cli/src/devices.c:137 ../cli/src/devices.c:148
-msgid "GATEWAY"
-msgstr "网关"
+#: ../cli/src/devices.c:159
+msgid "CTR-FREQ"
+msgstr "CTR-FREQ"
-#. 0
-#: ../cli/src/devices.c:157 ../cli/src/devices.c:166
-msgid "DNS"
-msgstr "DNS"
+#: ../cli/src/devices.c:160
+msgid "RSSI"
+msgstr "RSSI"
-#. 0
-#: ../cli/src/devices.c:175
+#: ../cli/src/devices.c:161
+msgid "CINR"
+msgstr "CINR"
+
+#: ../cli/src/devices.c:162
+msgid "TX-POW"
+msgstr "TX-POW"
+
+#: ../cli/src/devices.c:163
+msgid "BSID"
+msgstr "BSID"
+
+#: ../cli/src/devices.c:172 ../tui/nmt-page-wifi.c:221
msgid "SSID"
msgstr "SSID"
-#. 1
-#: ../cli/src/devices.c:176
+#: ../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:177
+#: ../cli/src/devices.c:175
msgid "MODE"
msgstr "åž‹å·"
-#. 3
-#: ../cli/src/devices.c:178
+#: ../cli/src/devices.c:176
+msgid "CHAN"
+msgstr "CHAN"
+
+#: ../cli/src/devices.c:177
msgid "FREQ"
msgstr "FREQ"
-#. 4
-#: ../cli/src/devices.c:179
+#: ../cli/src/devices.c:178
msgid "RATE"
msgstr "频率"
-#. 5
-#: ../cli/src/devices.c:180
+#: ../cli/src/devices.c:179 ../cli/src/devices.c:199
msgid "SIGNAL"
msgstr "ä¿¡å·"
-#. 6
+#: ../cli/src/devices.c:180
+msgid "BARS"
+msgstr "BARS"
+
#: ../cli/src/devices.c:181
msgid "SECURITY"
msgstr "安全性"
-#. 7
#: ../cli/src/devices.c:182
msgid "WPA-FLAGS"
msgstr "WPA-标志"
-#. 8
#: ../cli/src/devices.c:183
msgid "RSN-FLAGS"
msgstr "RSN-标志"
-#. 10
-#: ../cli/src/devices.c:185
+#: ../cli/src/devices.c:185 ../cli/src/devices.c:202
msgid "ACTIVE"
msgstr "活跃"
-#: ../cli/src/devices.c:208
+#: ../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"
+
+#: ../cli/src/devices.c:222
+msgid "ID"
+msgstr "ID"
+
+#: ../cli/src/devices.c:237
+msgid "CAPABILITIES"
+msgstr "功能"
+
+#: ../cli/src/devices.c:238
+msgid "WIFI-PROPERTIES"
+msgstr "WIFI 属性"
+
+#: ../cli/src/devices.c:240
+msgid "WIRED-PROPERTIES"
+msgstr "有线连接属性"
+
+#: ../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"
+"Usage: nmcli device { COMMAND | help }\n"
+"\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>] [hwaddr <hwaddr>]]\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"
+" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
msgstr ""
-"用法:nmcli dev { COMMAND | help }\n"
+"用法:nmcli device { COMMAND | help }\n"
+"\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>] | apinfo iface <iface> hwaddr <hwaddr>]\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"
+" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
-#: ../cli/src/devices.c:228
-msgid "unmanaged"
-msgstr "未管ç†"
-
-#: ../cli/src/devices.c:230
-msgid "unavailable"
-msgstr "ä¸å¯ç”¨"
-
-#: ../cli/src/devices.c:232 ../cli/src/network-manager.c:89
-msgid "disconnected"
-msgstr "已断开"
-
-#: ../cli/src/devices.c:234
-msgid "connecting (prepare)"
-msgstr "连接中(准备)"
-
-#: ../cli/src/devices.c:236
-msgid "connecting (configuring)"
-msgstr "连接中(é…ç½®)"
+#: ../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 - connection activated on device (if any)\n"
+"å¯ä½¿ç”¨ '--fields' 全局选项更改显示æ ã€‚ 'status' 是\n"
+"默认命令,æ„æ€æ˜¯ 'nmcli device' 调用 'nmcli device status'。\n"
+"\n"
-#: ../cli/src/devices.c:238
-msgid "connecting (need authentication)"
-msgstr "连接中(需è¦éªŒè¯)"
+#: ../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:240
-msgid "connecting (getting IP configuration)"
-msgstr "连接中(获得 IP é…ç½®)"
+#: ../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"
+"它也将考虑哪些没有设定为 set to auto-connect 的连接。\n"
+"\n"
-#: ../cli/src/devices.c:242 ../cli/src/network-manager.c:87
-msgid "connected"
-msgstr "连接的"
+#: ../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:244
-msgid "connection failed"
-msgstr "连接失败"
+#: ../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 客户端\n"
+"中点击 SSID å½¢æˆçš„命令行副本。该命令总是生æˆä¸€ä¸ª\n"
+"新连接,因此主è¦ç”¨äºŽè¿žæŽ¥åˆ°æ–° Wi-Fi\n"
+"网络。如果该网络已存在,最好使用如下\n"
+"已存在的侧写:nmcli con up id <name>. 注:\n"
+"ç›®å‰åªæ”¯æŒ Openã€WEP å’Œ WPA-PSK 网络。åŒæ—¶ä¹Ÿå‡è®¾\n"
+"通过 DHCP 获得 IP é…置。\n"
+"\n"
+"ARGUMENTS := rescan [[ifname] <ifname>]\n"
+"\n"
+"请求 NetworkManager ç«‹å³é‡æ–°æ‰«æå¯ç”¨æŽ¥å…¥ç‚¹ã€‚\n"
+"NetworkManager 周期性扫æ Wi-Fi 网络,但也å¯ä»¥\n"
+"å¯åŠ¨æ‰‹åŠ¨æ‰«æ。注:这个命令ä¸æ˜¾ç¤º\n"
+"AP,使用 'nmcli device wifi list' 显示 AP。\n"
+"\n"
-#: ../cli/src/devices.c:267 ../cli/src/devices.c:424
-msgid "Unknown"
-msgstr "未知"
+#: ../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:299
+#: ../cli/src/devices.c:480
msgid "(none)"
msgstr "(æ— )"
-#: ../cli/src/devices.c:324
-#, c-format
-msgid "%s: error converting IP4 address 0x%X"
-msgstr "%sï¼šè½¬æ¢ IP4 åœ°å€ 0x%X 出错"
-
-#: ../cli/src/devices.c:393
+#: ../cli/src/devices.c:547
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:394
+#: ../cli/src/devices.c:548
#, c-format
msgid "%u Mbit/s"
msgstr "%u Mbit/s"
-#: ../cli/src/devices.c:403
-msgid "Encrypted: "
-msgstr "加密:"
-
-#: ../cli/src/devices.c:408
-msgid "WEP "
-msgstr "WEP"
-
-#: ../cli/src/devices.c:410
-msgid "WPA "
-msgstr "WPA"
-
-#: ../cli/src/devices.c:412
-msgid "WPA2 "
-msgstr "WPA2"
+#: ../cli/src/devices.c:567
+msgid "WPA1"
+msgstr "WPA1"
-#: ../cli/src/devices.c:415
-msgid "Enterprise "
-msgstr "ä¼ä¸šçº§"
+#: ../cli/src/devices.c:576
+msgid "802.1X"
+msgstr "802.1X"
-#: ../cli/src/devices.c:424
+#: ../cli/src/devices.c:592
msgid "Ad-Hoc"
msgstr "Ad-Hoc"
-#: ../cli/src/devices.c:424
-msgid "Infrastructure"
-msgstr "基础构架"
+#: ../cli/src/devices.c:593
+msgid "Infra"
+msgstr "Infra"
-#: ../cli/src/devices.c:486
-#, c-format
-msgid "Error: 'dev list': %s"
-msgstr "错误:'dev list': %s"
+#: ../cli/src/devices.c:625
+msgid "Home"
+msgstr "主目录"
-#: ../cli/src/devices.c:488
-#, c-format
-msgid "Error: 'dev list': %s; allowed fields: %s"
-msgstr "错误:'dev list': %sï¼›å…许的字段:%s"
+#: ../cli/src/devices.c:628
+msgid "Partner"
+msgstr "åˆä½œä¼™ä¼´"
+
+#: ../cli/src/devices.c:631
+msgid "Roaming"
+msgstr "漫游"
-#: ../cli/src/devices.c:497
+#: ../cli/src/devices.c:725
msgid "Device details"
msgstr "设备详情"
-#: ../cli/src/devices.c:527 ../cli/src/devices.c:925
+#: ../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:528
-msgid "unknown)"
-msgstr "未知)"
-
-#: ../cli/src/devices.c:554
+#: ../cli/src/devices.c:827
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
-#. Print header
-#. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:627
+#: ../cli/src/devices.c:913
msgid "on"
msgstr "å¼€"
-#: ../cli/src/devices.c:627
+#: ../cli/src/devices.c:913
msgid "off"
msgstr "å…³"
-#: ../cli/src/devices.c:808
-#, c-format
-msgid "Error: 'dev status': %s"
-msgstr "错误:'dev status': %s"
-
-#: ../cli/src/devices.c:810
+#: ../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:817
+#: ../cli/src/devices.c:1206
msgid "Status of devices"
msgstr "设备状æ€"
-#: ../cli/src/devices.c:845
+#: ../cli/src/devices.c:1237
#, c-format
-msgid "Error: '%s' argument is missing."
-msgstr "错误:缺少 '%s' å‚数。"
+msgid "Error: invalid extra argument '%s'."
+msgstr "错误:无效é¢å¤–å‚æ•°E '%s'。"
-#: ../cli/src/devices.c:874 ../cli/src/devices.c:1013
-#: ../cli/src/devices.c:1136
+#: ../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:897
+#: ../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:922
+#: ../cli/src/devices.c:1471
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "错误:断开设备 '%s'(%s)失败:%s"
-#: ../cli/src/devices.c:930
+#: ../cli/src/devices.c:1485
#, c-format
-msgid "Device state: %d (%s)\n"
-msgstr "设备状æ€ï¼š%d (%s)\n"
+msgid "Device '%s' has been disconnected.\n"
+msgstr "已断开设备 '%s' 的连接。\n"
+
+#: ../cli/src/devices.c:1628
+msgid "Wi-Fi scan list"
+msgstr "Wi-Fi 扫æ列表"
-#: ../cli/src/devices.c:994
+#: ../cli/src/devices.c:1666
#, c-format
-msgid "Error: iface has to be specified."
-msgstr "错误:没有指定 iface。"
+msgid "Error: 'device wifi': %s"
+msgstr "错误:'device wifi': %s"
-#: ../cli/src/devices.c:1112
+#: ../cli/src/devices.c:1719 ../cli/src/devices.c:1788
#, c-format
-msgid "Error: 'dev wifi': %s"
-msgstr "错误:'dev wifi':%s"
+msgid "Error: Access point with bssid '%s' not found."
+msgstr "错误:未找到 bssid '%s' 的接入点。"
-#: ../cli/src/devices.c:1114
+#: ../cli/src/devices.c:1743 ../cli/src/devices.c:2131
+#: ../cli/src/devices.c:2293
#, c-format
-msgid "Error: 'dev wifi': %s; allowed fields: %s"
-msgstr "错误:'dev wifi': %sï¼›å…许的字段:%s"
+msgid "Error: Device '%s' is not a Wi-Fi device."
+msgstr "错误:设备 '%s' ä¸æ˜¯ä¸€ä¸ª Wi-Fi 设备。"
-#: ../cli/src/devices.c:1121
-msgid "WiFi scan list"
-msgstr "WiFi 扫æ列表"
+#: ../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 "使用 UUI的 '%s' 连接,并在设备 '%s' 中激活。\n"
-#: ../cli/src/devices.c:1156 ../cli/src/devices.c:1210
+#: ../cli/src/devices.c:1829
#, c-format
-msgid "Error: Access point with hwaddr '%s' not found."
-msgstr "é”™è¯¯ï¼šæ²¡æœ‰æ‰¾åˆ°ä½¿ç”¨ç¡¬ä»¶åœ°å€ '%s' 的访问点。"
+msgid "Error: Connection activation failed: (%d) %s."
+msgstr "错误:连接激活失败:(%d)%s。"
-#: ../cli/src/devices.c:1173
+#: ../cli/src/devices.c:1854
#, c-format
-msgid "Error: Device '%s' is not a WiFi device."
-msgstr "错误:设备 '%s' ä¸æ˜¯ WiFi 设备。"
+msgid "Error: Failed to add/activate new connection: (%d) %s"
+msgstr "错误:添加/激活新连接失败:(%d)%s"
-#: ../cli/src/devices.c:1237
+#: ../cli/src/devices.c:1862
#, c-format
-msgid "Error: 'dev wifi' command '%s' is not valid."
-msgstr "错误:'dev wifi' 命令 '%s' 无效。"
+msgid "Error: Failed to add/activate new connection: Unknown error"
+msgstr "错误:添加/激活新连接失败:未知错误"
-#: ../cli/src/devices.c:1284
+#: ../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:2042
+#, c-format
+msgid "Error: bssid argument value '%s' is not a valid BSSID."
+msgstr "错误:bssid å‚数值 '%s' 是一个无效 BSSID。"
+
+#: ../cli/src/devices.c:2066
+#, 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: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:2107
+#, c-format
+msgid "Error: Parameter '%s' is neither SSID nor BSSID."
+msgstr "错误:å‚æ•° '%s' ä¸æ˜¯ SSID,也ä¸æ˜¯ BSSID。"
+
+#: ../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:2151
+#, c-format
+msgid "Error: No network with SSID '%s' found."
+msgstr "错误:未找到 SSID 为 '%s' 的网络。"
+
+#: ../cli/src/devices.c:2153
+#, c-format
+msgid "Error: No access point with BSSID '%s' found."
+msgstr "错误:未找到 BSSID '%s' 的接入点。"
+
+#: ../cli/src/devices.c:2192
+msgid "Password: "
+msgstr "密ç ï¼š"
+
+#: ../cli/src/devices.c:2321
+#, c-format
+msgid "Error: 'device wifi' command '%s' is not valid."
+msgstr "错误:'device wifi' 命令 '%s' 无效。"
+
+#: ../cli/src/devices.c:2368
+msgid "WiMAX NSP list"
+msgstr "WiMAX NSP 列表"
+
+#: ../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 "错误:未找到 NSP 为 '%s' 的网络。"
+
+#: ../cli/src/devices.c:2472
+#, c-format
+msgid "Error: Device '%s' is not a WiMAX device."
+msgstr "错误:设备 '%s' ä¸æ˜¯ WiMAX 设备。"
+
+#: ../cli/src/devices.c:2510
+#, c-format
+msgid "Error: Access point with nsp '%s' not found."
+msgstr "错误:未找到 nsp '%s' 的接入点。"
+
+#: ../cli/src/devices.c:2542
+#, c-format
+msgid "Error: 'device wimax' command '%s' is not valid."
+msgstr "错误:'device wimax' 命令 '%s' 无效。"
+
+#: ../cli/src/devices.c:2621
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "错误:'dev' 命令 '%s' 无效。"
-#: ../cli/src/network-manager.c:35
+#: ../cli/src/network-manager.c:37
msgid "RUNNING"
msgstr "è¿è¡Œä¸­"
-#. 1
-#: ../cli/src/network-manager.c:37
-msgid "WIFI-HARDWARE"
-msgstr "WIFI 硬件"
-
-#. 2
#: ../cli/src/network-manager.c:38
+msgid "VERSION"
+msgstr "VERSION"
+
+#: ../cli/src/network-manager.c:40
+msgid "STARTUP"
+msgstr "STARTUP"
+
+#: ../cli/src/network-manager.c:41
+msgid "CONNECTIVITY"
+msgstr "CONNECTIVITY"
+
+#: ../cli/src/network-manager.c:42
+msgid "NETWORKING"
+msgstr "NETWORKING"
+
+#: ../cli/src/network-manager.c:43
+msgid "WIFI-HW"
+msgstr "WIFI-HW"
+
+#: ../cli/src/network-manager.c:44
msgid "WIFI"
msgstr "WIFI"
-#. 3
-#: ../cli/src/network-manager.c:39
-msgid "WWAN-HARDWARE"
-msgstr "WWAN 硬件"
+#: ../cli/src/network-manager.c:45
+msgid "WWAN-HW"
+msgstr "WWAN-HW"
-#. 4
-#: ../cli/src/network-manager.c:40
+#: ../cli/src/network-manager.c:46
msgid "WWAN"
msgstr "WWAN"
-#: ../cli/src/network-manager.c:62
+#: ../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:70
+msgid "PERMISSION"
+msgstr "PERMISSION"
+
+#: ../cli/src/network-manager.c:71
+msgid "VALUE"
+msgstr "VALUE"
+
+#: ../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"
+"Usage: nmcli general { COMMAND | help }\n"
"\n"
-" COMMAND := { status | sleep | wakeup | wifi | wwan }\n"
+"COMMAND := { status | hostname | permissions | logging }\n"
"\n"
" status\n"
-" sleep\n"
-" wakeup\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
+"\n"
+" hostname [<hostname>]\n"
+"\n"
+" permissions\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 | sleep | wakeup | wifi | wwan }\n"
+"COMMAND := { status | hostname | permissions | logging }\n"
"\n"
" status\n"
-" sleep\n"
-" wakeup\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
+"\n"
+" hostname [<hostname>]\n"
+"\n"
+" permissions\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 page。\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:83
+#: ../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:85
+#: ../cli/src/network-manager.c:266
msgid "connecting"
msgstr "连接中"
-#: ../cli/src/network-manager.c:125
-#, c-format
-msgid "Error: 'nm status': %s"
-msgstr "错误:'nm status': %s"
+#: ../cli/src/network-manager.c:268
+msgid "connected (local only)"
+msgstr "已连接(åªåœ¨æœ¬åœ°ï¼‰"
-#: ../cli/src/network-manager.c:127
-#, c-format
-msgid "Error: 'nm status': %s; allowed fields: %s"
-msgstr "错误:'nm status': %sï¼›å…许的字段:%s"
+#: ../cli/src/network-manager.c:270
+msgid "connected (site only)"
+msgstr "已连接(åªåœ¨ç½‘站)"
-#: ../cli/src/network-manager.c:134
-msgid "NetworkManager status"
-msgstr "网络管ç†å™¨çŠ¶æ€"
+#: ../cli/src/network-manager.c:274
+msgid "disconnecting"
+msgstr "正在断开连接"
+
+#: ../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:332
+#, c-format
+msgid "Error: only these fields are allowed: %s"
+msgstr "错误:åªå…许使用这些字段:%s"
-#. Print header
-#: ../cli/src/network-manager.c:140 ../cli/src/network-manager.c:141
-#: ../cli/src/network-manager.c:142 ../cli/src/network-manager.c:143
-#: ../cli/src/network-manager.c:211 ../cli/src/network-manager.c:243
+#: ../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:140 ../cli/src/network-manager.c:141
-#: ../cli/src/network-manager.c:142 ../cli/src/network-manager.c:143
-#: ../cli/src/network-manager.c:211 ../cli/src/network-manager.c:243
+#: ../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:148
+#: ../cli/src/network-manager.c:367
+msgid "NetworkManager status"
+msgstr "网络管ç†å™¨çŠ¶æ€"
+
+#: ../cli/src/network-manager.c:372
msgid "running"
msgstr "è¿è¡Œä¸­"
-#: ../cli/src/network-manager.c:148
+#: ../cli/src/network-manager.c:372
msgid "not running"
msgstr "未è¿è¡Œ"
-#: ../cli/src/network-manager.c:201 ../cli/src/network-manager.c:233
+#: ../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:475
+#, c-format
+msgid "Error: 'general permissions': %s"
+msgstr "错误:'general permissions': %s"
+
+#: ../cli/src/network-manager.c:489
+msgid "NetworkManager permissions"
+msgstr "NetworkManager æƒé™"
+
+#: ../cli/src/network-manager.c:530
#, c-format
-msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
-msgstr "错误:'--fields' 值 '%s' 在此无效;å…许的字段:%s"
+msgid "Error: 'general logging': %s"
+msgstr "错误:'general logging': %s"
-#: ../cli/src/network-manager.c:209
-msgid "WiFi enabled"
-msgstr "å·²å¯ç”¨ WiFi"
+#: ../cli/src/network-manager.c:545
+msgid "NetworkManager logging"
+msgstr "NetworkManager 日志"
+
+#: ../cli/src/network-manager.c:565
+#, c-format
+msgid "Error: failed to set hostname: (%d) %s"
+msgstr "错误:设定主机å失败:(%d) %s"
-#: ../cli/src/network-manager.c:220
+#: ../cli/src/network-manager.c:682
#, c-format
-msgid "Error: invalid 'wifi' parameter: '%s'."
-msgstr "错误:无效 'wifi' å‚数:'%s'。"
+msgid "Error: access denied to set logging; %s"
+msgstr "错误:拒ç»è®¾ç½®æ—¥å¿—的访问;%s"
-#: ../cli/src/network-manager.c:241
-msgid "WWAN enabled"
-msgstr "å·²å¯ç”¨ WWAN"
+#: ../cli/src/network-manager.c:684
+#, c-format
+msgid "Error: %s"
+msgstr "错误:%s"
-#: ../cli/src/network-manager.c:252
+#: ../cli/src/network-manager.c:692
#, c-format
-msgid "Error: invalid 'wwan' parameter: '%s'."
-msgstr "错误:无效 'wwan' å‚数:'%s'。"
+msgid "Error: 'general' command '%s' is not valid."
+msgstr "错误:'general' 命令 '%s' 无效。"
-#: ../cli/src/network-manager.c:263
+#: ../cli/src/network-manager.c:710
#, c-format
-msgid "Error: 'nm' command '%s' is not valid."
-msgstr "错误:'nm' 命令 '%s' 无效。"
+msgid "Error: '--fields' value '%s' is not valid here (allowed field: %s)"
+msgstr "错误:'--fields' 值 '%s' 在此无效(å…许的字段:%s)"
-#: ../cli/src/nmcli.c:69
+#: ../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 "Connectivity"
+msgstr "连接性"
+
+#: ../cli/src/network-manager.c:758
+msgid "Networking"
+msgstr "è”网"
+
+#: ../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: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 "收音机开关"
+
+#: ../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: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"
@@ -987,714 +3888,2691 @@ 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 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 [选项] 对象 { 命令 | help }\n"
+"用法:%s [OPTIONS] OBJECT { COMMAND | help }\n"
"\n"
-"选项\n"
-" -t[erse] 简æ´è¾“出\n"
-" -p[retty] 美观输出\n"
-" -v[ersion] 显示程åºç‰ˆæœ¬\n"
-" -h[elp] 显示此帮助\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"
-"对象\n"
-" nm NetworkManager 状æ€\n"
-" con NetworkManager 连接\n"
-" dev NetworkManager 管ç†çš„设备\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:113
+#: ../cli/src/nmcli.c:132
#, c-format
msgid "Error: Object '%s' is unknown, try 'nmcli help'."
msgstr "错误:对象 '%s' 未知,å°è¯• 'nmcli help'。"
-#: ../cli/src/nmcli.c:143
+#: ../cli/src/nmcli.c:162
#, c-format
msgid "Error: Option '--terse' is specified the second time."
msgstr "错误:第二次指定选项 '--terse'。"
-#: ../cli/src/nmcli.c:148
+#: ../cli/src/nmcli.c:167
#, c-format
msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
msgstr "错误:选项 '--terse' 与 '--pretty' 相互排斥。"
-#: ../cli/src/nmcli.c:156
+#: ../cli/src/nmcli.c:175
#, c-format
msgid "Error: Option '--pretty' is specified the second time."
msgstr "错误:第二次指定选项 '--pretty'。"
-#: ../cli/src/nmcli.c:161
+#: ../cli/src/nmcli.c:180
#, c-format
msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
msgstr "错误:选项 '--pretty' 与 '--terse' 相互排斥。"
-#: ../cli/src/nmcli.c:171 ../cli/src/nmcli.c:187
+#: ../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:180 ../cli/src/nmcli.c:196
+#: ../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:203
+#: ../cli/src/nmcli.c:222
#, c-format
msgid "Error: fields for '%s' options are missing."
msgstr "错误:缺少 '%s' 选项字段。"
-#: ../cli/src/nmcli.c:209
+#: ../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:215
+#: ../cli/src/nmcli.c:253
#, c-format
msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
msgstr "错误:选项 '%s' 未知,å°è¯• 'nmcli -help'。"
-#: ../cli/src/nmcli.c:234
+#: ../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:259
+#: ../cli/src/nmcli.c:318 ../src/main.c:130
#, c-format
-msgid "Error: Could not connect to NetworkManager."
-msgstr "错误:无法连接到网络管ç†å™¨ã€‚"
+msgid "Failed to set signal mask: %d"
+msgstr "设定信å·æŽ©ç å¤±è´¥ï¼š%d"
-#: ../cli/src/nmcli.c:275
+#: ../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:354
msgid "Success"
msgstr "æˆåŠŸ"
-#: ../cli/src/settings.c:411
+#: ../cli/src/settings.c:666
#, c-format
msgid "%d (hex-ascii-key)"
msgstr "%d (hex-ascii-key)"
-#: ../cli/src/settings.c:413
+#: ../cli/src/settings.c:668
#, c-format
msgid "%d (104/128-bit passphrase)"
msgstr "%d (104/128 ä½å¯†ç çŸ­è¯­)"
-#: ../cli/src/settings.c:416
+#: ../cli/src/settings.c:671 ../cli/src/settings.c:799
#, c-format
msgid "%d (unknown)"
msgstr "%d (未知)"
-#: ../cli/src/settings.c:442
+#: ../cli/src/settings.c:697
msgid "0 (unknown)"
msgstr "0 (未知)"
-#: ../cli/src/settings.c:448
+#: ../cli/src/settings.c:703
msgid "any, "
msgstr "ä»»æ„,"
-#: ../cli/src/settings.c:450
+#: ../cli/src/settings.c:705
msgid "900 MHz, "
msgstr "900 MHz,"
-#: ../cli/src/settings.c:452
+#: ../cli/src/settings.c:707
msgid "1800 MHz, "
msgstr "1800 MHz,"
-#: ../cli/src/settings.c:454
+#: ../cli/src/settings.c:709
msgid "1900 MHz, "
msgstr "1900 MHz,"
-#: ../cli/src/settings.c:456
+#: ../cli/src/settings.c:711
msgid "850 MHz, "
msgstr "850 MHz,"
-#: ../cli/src/settings.c:458
+#: ../cli/src/settings.c:713
msgid "WCDMA 3GPP UMTS 2100 MHz, "
msgstr "WCDMA 3GPP UMTS 2100 MHz,"
-#: ../cli/src/settings.c:460
+#: ../cli/src/settings.c:715
msgid "WCDMA 3GPP UMTS 1800 MHz, "
msgstr "WCDMA 3GPP UMTS 1800 MHz,"
-#: ../cli/src/settings.c:462
+#: ../cli/src/settings.c:717
msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
msgstr "WCDMA 3GPP UMTS 1700/2100 MHz,"
-#: ../cli/src/settings.c:464
+#: ../cli/src/settings.c:719
msgid "WCDMA 3GPP UMTS 800 MHz, "
msgstr "WCDMA 3GPP UMTS 800 MHz,"
-#: ../cli/src/settings.c:466
+#: ../cli/src/settings.c:721
msgid "WCDMA 3GPP UMTS 850 MHz, "
msgstr "WCDMA 3GPP UMTS 850 MHz,"
-#: ../cli/src/settings.c:468
+#: ../cli/src/settings.c:723
msgid "WCDMA 3GPP UMTS 900 MHz, "
msgstr "WCDMA 3GPP UMTS 900 MHz,"
-#: ../cli/src/settings.c:470
+#: ../cli/src/settings.c:725
msgid "WCDMA 3GPP UMTS 1700 MHz, "
msgstr "WCDMA 3GPP UMTS 1700 MHz,"
-#: ../cli/src/settings.c:554 ../cli/src/settings.c:721
+#: ../cli/src/settings.c:727
+msgid "WCDMA 3GPP UMTS 1900 MHz, "
+msgstr "WCDMA 3GPP UMTS 1900 MHz, "
+
+#: ../cli/src/settings.c:729
+msgid "WCDMA 3GPP UMTS 2600 MHz, "
+msgstr "WCDMA 3GPP UMTS 2600 MHz, "
+
+#: ../cli/src/settings.c:747
+msgid "0 (NONE)"
+msgstr "0 (NONE)"
+
+#: ../cli/src/settings.c:753
+msgid "REORDER_HEADERS, "
+msgstr "REORDER_HEADERS, "
+
+#: ../cli/src/settings.c:755
+msgid "GVRP, "
+msgstr "GVRP, "
+
+#: ../cli/src/settings.c:757
+msgid "LOOSE_BINDING, "
+msgstr "LOOSE_BINDING, "
+
+#: ../cli/src/settings.c:793
+#, c-format
+msgid "%d (disabled)"
+msgstr "%d (å·²ç¦ç”¨)"
+
+#: ../cli/src/settings.c:795
+#, c-format
+msgid "%d (enabled, prefer public IP)"
+msgstr "%d (å·²å¯ç”¨ï¼Œé¦–选公共 IP)"
+
+#: ../cli/src/settings.c:797
+#, c-format
+msgid "%d (enabled, prefer temporary IP)"
+msgstr "%d (å·²å¯ç”¨ï¼Œé¦–选临时 IP)"
+
+#: ../cli/src/settings.c:809
+msgid "0 (none)"
+msgstr "0 (none)"
+
+#: ../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/settings.c:716 ../cli/src/settings.c:719
-#: ../cli/src/settings.c:720 ../cli/src/utils.c:172
-msgid "not set"
-msgstr "未设置"
+#: ../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"
+"Example: /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/utils.c:124
+#: ../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"
+"示例: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 "Error converting IP4 address '0x%X' to text form"
+msgstr "å°† IP4 åœ°å€ '0x%X' 转æ¢ä¸ºæ–‡æœ¬æ ¼å¼å‡ºé”™"
+
+#: ../cli/src/utils.c:217
+#, c-format
+msgid "Error converting IP6 address '%s' to text form"
+msgstr "å°† IP6 åœ°å€ '%s' 转æ¢ä¸ºæ–‡æœ¬æ ¼å¼å‡ºé”™"
+
+#: ../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:127
+#: ../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:146
-#, c-format
+#: ../cli/src/utils.c:747
msgid "Option '--terse' requires specifying '--fields'"
msgstr "选项 '--terse' è¦æ±‚指定 '--fields'"
-#: ../cli/src/utils.c:150
+#: ../cli/src/utils.c:751
#, c-format
msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
msgstr "选项 '--terse' 需è¦ç‰¹å®š '--fields' 选项值,ä¸æ˜¯ '%s'"
-#: ../libnm-util/crypto.c:120
+#: ../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"
+
+#: ../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,但结果无法预测。"
+
+#: ../libnm-util/crypto.c:133
#, c-format
msgid "PEM key file had no end tag '%s'."
msgstr "PEM 密钥文件没有结æŸæ ‡è®°â€œ%sâ€ã€‚"
-#: ../libnm-util/crypto.c:130
+#: ../libnm-util/crypto.c:146
#, c-format
msgid "Doesn't look like a PEM private key file."
msgstr "ä¸åƒæ˜¯ä¸€ä¸ª PEM ç§é’¥æ–‡ä»¶ã€‚"
-#: ../libnm-util/crypto.c:138
-#, c-format
-msgid "Not enough memory to store PEM file data."
-msgstr "没有足够的空间储存 PEM 文件数æ®"
-
-#: ../libnm-util/crypto.c:154
+#: ../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:162
+#: ../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:172
+#: ../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:183
+#: ../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:190
+#: ../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:203
+#: ../libnm-util/crypto.c:212
#, c-format
msgid "Malformed PEM file: unknown private key cipher '%s'."
msgstr "对 PEM 文件进行æ“作:未知专用密钥 '%s'。"
-#: ../libnm-util/crypto.c:222
+#: ../libnm-util/crypto.c:231
#, c-format
msgid "Could not decode private key."
msgstr "无法解ç ç§é’¥ã€‚"
-#: ../libnm-util/crypto.c:267
-#, c-format
-msgid "PEM certificate '%s' had no end tag '%s'."
-msgstr "PEM è¯ä¹¦â€œ%sâ€æ²¡æœ‰ç»“æŸæ ‡è®°â€œ%sâ€ã€‚"
+#: ../libnm-util/crypto.c:283
+msgid "Failed to find expected PKCS#8 start tag."
+msgstr "查找预期的 PKCS#8 起始标签失败。"
-#: ../libnm-util/crypto.c:277
+#: ../libnm-util/crypto.c:291
#, c-format
-msgid "Failed to decode certificate."
-msgstr "无法解ç è¯ä¹¦ã€‚"
+msgid "Failed to find expected PKCS#8 end tag '%s'."
+msgstr "查找预期的 PKCS#8 终止标签 '%s' 失败。"
-#: ../libnm-util/crypto.c:286
-#, c-format
-msgid "Not enough memory to store certificate data."
-msgstr "没有足够的空间存储è¯ä¹¦æ•°æ®ã€‚"
+#: ../libnm-util/crypto.c:310
+msgid "Failed to decode PKCS#8 private key."
+msgstr "è§£ç  PKCS#8 ç§é’¥å¤±è´¥ã€‚"
-#: ../libnm-util/crypto.c:294
-#, c-format
-msgid "Not enough memory to store file data."
-msgstr "没有足够的空间储存文件数æ®ã€‚"
-
-#: ../libnm-util/crypto.c:324
+#: ../libnm-util/crypto.c:352
#, c-format
msgid "IV must be an even number of bytes in length."
msgstr "åˆå§‹å‘é‡é•¿åº¦å¿…须是å¶æ•°å­—节。"
-#: ../libnm-util/crypto.c:333
-#, c-format
-msgid "Not enough memory to store the IV."
-msgstr "没有足够的空间储存åˆå§‹å‘é‡ã€‚"
-
-#: ../libnm-util/crypto.c:344
+#: ../libnm-util/crypto.c:366
#, c-format
msgid "IV contains non-hexadecimal digits."
msgstr "åˆå§‹å‘é‡ä¸­åŒ…å«éžå六进制数字。"
-#: ../libnm-util/crypto.c:382 ../libnm-util/crypto_gnutls.c:148
-#: ../libnm-util/crypto_gnutls.c:266 ../libnm-util/crypto_nss.c:171
-#: ../libnm-util/crypto_nss.c:336
+#: ../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:391
-#, c-format
-msgid "Not enough memory to decrypt private key."
-msgstr "没有足够的空间解密ç§é’¥ã€‚"
-
#: ../libnm-util/crypto.c:511
#, c-format
msgid "Unable to determine private key type."
msgstr "无法确定ç§é’¥ç±»åž‹ã€‚"
-#: ../libnm-util/crypto.c:530
+#: ../libnm-util/crypto.c:566
+#, c-format
+msgid "PEM certificate had no start tag '%s'."
+msgstr "PEM è¯ä¹¦æ–‡ä»¶æ²¡æœ‰èµ·å§‹æ ‡ç­¾ '%s'。"
+
+#: ../libnm-util/crypto.c:575
+#, c-format
+msgid "PEM certificate had no end tag '%s'."
+msgstr "PEM è¯ä¹¦æ–‡ä»¶æ²¡æœ‰ç»ˆæ­¢æ ‡ç­¾ '%s'。"
+
+#: ../libnm-util/crypto.c:593
#, c-format
-msgid "Not enough memory to store decrypted private key."
-msgstr "没有足够的空间储存解密åŽçš„ç§é’¥ã€‚"
+msgid "Failed to decode certificate."
+msgstr "无法解ç è¯ä¹¦ã€‚"
-#: ../libnm-util/crypto_gnutls.c:49
+#: ../libnm-util/crypto_gnutls.c:50
msgid "Failed to initialize the crypto engine."
msgstr "åˆå§‹åŒ–加密引擎失败。"
-#: ../libnm-util/crypto_gnutls.c:93
+#: ../libnm-util/crypto_gnutls.c:92
#, c-format
msgid "Failed to initialize the MD5 engine: %s / %s."
msgstr "åˆå§‹åŒ– MD5 引擎失败:%s / %s。"
-#: ../libnm-util/crypto_gnutls.c:156
+#: ../libnm-util/crypto_gnutls.c:155
#, c-format
msgid "Invalid IV length (must be at least %zd)."
msgstr "无效åˆå§‹å‘é‡é•¿åº¦(至少为为 %zd)。"
-#: ../libnm-util/crypto_gnutls.c:165 ../libnm-util/crypto_nss.c:188
-#, c-format
-msgid "Not enough memory for decrypted key buffer."
-msgstr "没有足够的空间作为已解密密钥缓冲。"
-
-#: ../libnm-util/crypto_gnutls.c:173
+#: ../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:182
+#: ../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:191
+#: ../libnm-util/crypto_gnutls.c:184
#, c-format
msgid "Failed to set IV for decryption: %s / %s."
msgstr "为解密设置åˆå§‹å‘é‡å¤±è´¥ï¼š%s / %s。"
-#: ../libnm-util/crypto_gnutls.c:200
+#: ../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:210 ../libnm-util/crypto_nss.c:267
+#: ../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:221 ../libnm-util/crypto_nss.c:278
+#: ../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:286 ../libnm-util/crypto_nss.c:356
-#, c-format
-msgid "Could not allocate memory for encrypting."
-msgstr "无法为加密分é…内存。"
-
-#: ../libnm-util/crypto_gnutls.c:294
+#: ../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:303
+#: ../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:313
+#: ../libnm-util/crypto_gnutls.c:300
#, c-format
msgid "Failed to set IV for encryption: %s / %s."
msgstr "为加密设置åˆå§‹å‘é‡å¤±è´¥ï¼š%s / %s。"
-#: ../libnm-util/crypto_gnutls.c:322
+#: ../libnm-util/crypto_gnutls.c:309
#, c-format
msgid "Failed to encrypt the data: %s / %s."
msgstr "加密数æ®å¤±è´¥ï¼š%s / %s。"
-#: ../libnm-util/crypto_gnutls.c:362
+#: ../libnm-util/crypto_gnutls.c:349
#, c-format
msgid "Error initializing certificate data: %s"
msgstr "åˆå§‹åŒ–è¯ä¹¦æ•°æ®å‡ºé”™ï¼š%s"
-#: ../libnm-util/crypto_gnutls.c:384
+#: ../libnm-util/crypto_gnutls.c:371
#, c-format
msgid "Couldn't decode certificate: %s"
msgstr "无法解ç è¯ä¹¦ï¼š%s"
-#: ../libnm-util/crypto_gnutls.c:408
+#: ../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:421
+#: ../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:433
+#: ../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:448
+#, c-format
+msgid "Couldn't initialize PKCS#8 decoder: %s"
+msgstr "无法åˆå§‹åŒ– PKCS#8 解ç å™¨ï¼š%s"
+
+#: ../libnm-util/crypto_gnutls.c:471
+#, c-format
+msgid "Couldn't decode PKCS#8 file: %s"
+msgstr "æ— æ³•è§£ç  PKCS#8 文件:%s"
+
#: ../libnm-util/crypto_nss.c:56
#, c-format
msgid "Failed to initialize the crypto engine: %d."
msgstr "åˆå§‹åŒ–加密引擎失败:%d。"
-#: ../libnm-util/crypto_nss.c:111
+#: ../libnm-util/crypto_nss.c:107
#, c-format
msgid "Failed to initialize the MD5 context: %d."
msgstr "åˆå§‹åŒ– MD5 环境失败:%d。"
-#: ../libnm-util/crypto_nss.c:179
+#: ../libnm-util/crypto_nss.c:175
#, c-format
msgid "Invalid IV length (must be at least %d)."
msgstr "无效的åˆå§‹å‘é‡é•¿åº¦(至少为 %d)。"
-#: ../libnm-util/crypto_nss.c:196
+#: ../libnm-util/crypto_nss.c:186
#, c-format
msgid "Failed to initialize the decryption cipher slot."
msgstr "åˆå§‹åŒ–解密计算æ’槽失败。"
-#: ../libnm-util/crypto_nss.c:206
+#: ../libnm-util/crypto_nss.c:196
#, c-format
msgid "Failed to set symmetric key for decryption."
msgstr "为解密设置对称密钥失败。"
-#: ../libnm-util/crypto_nss.c:216
+#: ../libnm-util/crypto_nss.c:206
#, c-format
msgid "Failed to set IV for decryption."
msgstr "为解密设置åˆå§‹å‘é‡å¤±è´¥ã€‚"
-#: ../libnm-util/crypto_nss.c:224
+#: ../libnm-util/crypto_nss.c:214
#, c-format
msgid "Failed to initialize the decryption context."
msgstr "åˆå§‹åŒ–解密环境失败。"
-#: ../libnm-util/crypto_nss.c:237
+#: ../libnm-util/crypto_nss.c:227
#, c-format
msgid "Failed to decrypt the private key: %d."
msgstr "解密ç§é’¥å¤±è´¥ï¼š%d。"
-#: ../libnm-util/crypto_nss.c:245
+#: ../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:256
+#: ../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:364
+#: ../libnm-util/crypto_nss.c:348
#, c-format
msgid "Failed to initialize the encryption cipher slot."
msgstr "åˆå§‹åŒ–加密计算æ’槽失败。"
-#: ../libnm-util/crypto_nss.c:372
+#: ../libnm-util/crypto_nss.c:356
#, c-format
msgid "Failed to set symmetric key for encryption."
msgstr "为加密设置对称密钥失败。"
-#: ../libnm-util/crypto_nss.c:380
+#: ../libnm-util/crypto_nss.c:364
#, c-format
msgid "Failed to set IV for encryption."
msgstr "为加密设置 IV 失败。"
-#: ../libnm-util/crypto_nss.c:388
+#: ../libnm-util/crypto_nss.c:372
#, c-format
msgid "Failed to initialize the encryption context."
msgstr "åˆå§‹åŒ–加密内容失败。"
-#: ../libnm-util/crypto_nss.c:396
+#: ../libnm-util/crypto_nss.c:380
#, c-format
msgid "Failed to encrypt: %d."
msgstr "加密失败:%d。"
-#: ../libnm-util/crypto_nss.c:404
+#: ../libnm-util/crypto_nss.c:388
#, c-format
msgid "Unexpected amount of data after encrypting."
msgstr "加密åŽæ„外的数æ®é‡ã€‚"
-#: ../libnm-util/crypto_nss.c:447
+#: ../libnm-util/crypto_nss.c:431
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "无法解ç è¯ä¹¦ï¼š%d"
-#: ../libnm-util/crypto_nss.c:482
+#: ../libnm-util/crypto_nss.c:466
#, c-format
msgid "Couldn't convert password to UCS2: %d"
msgstr "无法将密ç è½¬æ¢ä¸º USC2 æ–¹å¼ï¼š%d"
-#: ../libnm-util/crypto_nss.c:510
+#: ../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:519
+#: ../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:528
+#: ../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:557
+#: ../libnm-util/crypto_nss.c:556
msgid "Could not generate random data."
msgstr "无法生æˆéšæœºæ•°æ®ã€‚"
-#: ../libnm-util/nm-utils.c:1975
+#: ../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:2085
-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:2097
+#: ../libnm-util/nm-setting-bond.c:593
#, c-format
-msgid "Could not allocate memory for writing IV to PEM file."
-msgstr "无法为在 PEM 文件中写入 IV 分é…内存。"
+msgid "'%s' option is only valid for '%s=%s'"
+msgstr "'%s' 选项åªèƒ½åœ¨ '%s=%s' 中使用"
-#: ../libnm-util/nm-utils.c:2109
+#: ../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-utils.c:2128
+#: ../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 PEM file data."
-msgstr "无法为 PEM 文件数æ®åˆ†é…内存。"
+msgid "'%s' option requires '%s' option to be set"
+msgstr "'%s' 选项需è¦è®¾ç½® '%s' 选项"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
-msgid "Connection sharing via a protected WiFi network"
-msgstr "通过å—ä¿æŠ¤çš„ WiFi 网络共享连接"
+#: ../libnm-util/nm-setting-bond.c:659
+#, c-format
+msgid "'%s' option is empty"
+msgstr "'%s' 选项为空"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
-msgid "Connection sharing via an open WiFi network"
-msgstr "通过公开 WiFi 网络共享连接"
+#: ../libnm-util/nm-setting-bond.c:671
+#, c-format
+msgid "'%s' is not a valid IPv4 address for '%s' option"
+msgstr "'%s' ä¸æ˜¯ '%s' 选项的有效 IPv4 地å€"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
-msgid "Modify persistent system hostname"
-msgstr "更改系统固有主机å"
+#: ../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)"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
-msgid "Modify system connections"
-msgstr "更改系统连接"
+#: ../libnm-util/nm-setting-bridge.c:251
+#, c-format
+msgid "value '%d' is out of range <%d-%d>"
+msgstr "值 '%d' 在 <%d-%d> 范围之外 "
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
-msgid "System policy prevents modification of system settings"
-msgstr "系统策略阻止更改系统设置"
+#: ../libnm-util/nm-setting-cdma.c:170
+msgid "property is empty'"
+msgstr "属性为空"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
-msgid "System policy prevents modification of the persistent system hostname"
-msgstr "系统策略阻止更改系统固有主机å"
+#: ../libnm-util/nm-setting-connection.c:734
+#, c-format
+msgid "'%s' doesn't match the virtual interface name '%s'"
+msgstr "'%s' ä¸ä¸Žè™šæ‹ŸæŽ¥å£å '%s' 匹é…"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
-msgid "System policy prevents sharing connections via a protected WiFi network"
-msgstr "系统策略阻止使用å—ä¿æŠ¤çš„ WiFi 网络共享连接"
+#: ../libnm-util/nm-setting-connection.c:780
+#, c-format
+msgid "requires presence of '%s' setting in the connection"
+msgstr "需è¦åœ¨è¯¥è¿žæŽ¥ä¸­æœ‰ '%s' 设置"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
-msgid "System policy prevents sharing connections via an open WiFi network"
-msgstr "系统策略阻止使用公开 WiFi 网络共享连接"
+#: ../libnm-util/nm-setting-connection.c:802
+msgid "IPv4 configuration is not allowed for slave"
+msgstr "IPv4 é…ç½®ä¸å…许在辅接å£ä¸­ä½¿ç”¨"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:1
-msgid "Allow control of network connections"
-msgstr "å…许控制网络连接"
+#: ../libnm-util/nm-setting-connection.c:815
+msgid "IPv6 configuration is not allowed for slave"
+msgstr "IPv6 é…ç½®ä¸å…许在辅接å£ä¸­ä½¿ç”¨"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:2
-msgid "Allow use of user-specific connections"
-msgstr "å…许用户连接"
+#: ../libnm-util/nm-setting-dcb.c:595
+msgid "flags invalid"
+msgstr "标签无效"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:3
-msgid "Enable or disable WiFi devices"
-msgstr "å¯ç”¨æˆ–ç¦ç”¨ WiFi 设备"
+#: ../libnm-util/nm-setting-dcb.c:604
+msgid "flags invalid - disabled"
+msgstr "标签无效 - å·²ç¦ç”¨"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:4
-msgid "Enable or disable mobile broadband devices"
-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 "缺少的属性"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:5
+#: ../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"
msgstr "å¯ç”¨æˆ–ç¦ç”¨ç³»ç»Ÿç½‘络"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:6
+#: ../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.in.h:3
msgid ""
"Put NetworkManager to sleep or wake it up (should only be used by system "
"power management)"
-msgstr ""
-"挂起或唤醒 NetworkManager (应仅用于系统电æºç®¡ç†)"
+msgstr "挂起或唤醒 NetworkManager (应仅用于系统电æºç®¡ç†)"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:7
-msgid "System policy prevents control of network connections"
-msgstr "系统策略阻止更改网络连接"
+#: ../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"
+msgstr "å¯ç”¨æˆ–ç¦ç”¨ WiFi 设备"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:8
+#: ../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:9
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:7
+msgid "Enable or disable mobile broadband devices"
+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.h:10
-msgid "System policy prevents enabling or disabling system networking"
-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.h:11
-msgid "System policy prevents putting NetworkManager to sleep or waking it up"
-msgstr "系统策略阻止挂起或唤醒 NetworkManager"
+#: ../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.in.h:11
+msgid "Allow control of network connections"
+msgstr "å…许控制网络连接"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:12
+msgid "System policy prevents control of network connections"
+msgstr "系统策略阻止更改网络连接"
+
+#: ../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.in.h:14
+msgid ""
+"System policy prevents sharing connections via a protected WiFi network"
+msgstr "系统策略阻止使用å—ä¿æŠ¤çš„ WiFi 网络共享连接"
+
+#: ../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.in.h:16
+msgid "System policy prevents sharing connections via an open WiFi network"
+msgstr "系统策略阻止使用公开 WiFi 网络共享连接"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:17
+msgid "Modify personal network connections"
+msgstr "修改个人网络连接"
+
+#: ../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.in.h:19
+msgid "Modify network connections for all users"
+msgstr "为所有用户修改网络连接"
-#: ../policy/org.freedesktop.NetworkManager.policy.in.h:12
-msgid "System policy prevents use of user-specific connections"
-msgstr "系统策略阻止使用用户连接"
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:20
+msgid "System policy prevents modification of network settings for all users"
+msgstr "系统策略防止为所有用户修改网络设置"
-#: ../src/nm-netlink-monitor.c:100 ../src/nm-netlink-monitor.c:231
-#: ../src/nm-netlink-monitor.c:653
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:21
+msgid "Modify persistent system hostname"
+msgstr "更改系统固有主机å"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:22
+msgid "System policy prevents modification of the persistent system hostname"
+msgstr "系统策略阻止更改系统固有主机å"
+
+#: ../src/main.c:154
#, c-format
-msgid "error processing netlink message: %s"
-msgstr "处ç†ç½‘路信æ¯å‡ºé”™ï¼š%s"
+msgid "Opening %s failed: %s\n"
+msgstr "打开 %s 失败:%s\n"
-#: ../src/nm-netlink-monitor.c:214
-msgid "error occurred while waiting for data on socket"
-msgstr "等候套接字上的数æ®æ—¶å‘生了错误"
+#: ../src/main.c:160
+#, c-format
+msgid "Writing to %s failed: %s\n"
+msgstr "写入 %s 失败:%s\n"
-#: ../src/nm-netlink-monitor.c:254
+#: ../src/main.c:165
#, c-format
-msgid "unable to connect to netlink for monitoring link status: %s"
-msgstr "无法为监视连接状æ€è¿žæŽ¥åˆ°ç½‘路:%s"
+msgid "Closing %s failed: %s\n"
+msgstr "关闭 %s 失败:%s\n"
-#: ../src/nm-netlink-monitor.c:265
+#: ../src/main.c:208
#, c-format
-msgid "unable to enable netlink handle credential passing: %s"
-msgstr "无法å¯ç”¨ç½‘络链接å¥æŸ„è¯ä¹¦é€šè¿‡ï¼š%s"
+msgid "NetworkManager is already running (pid %ld)\n"
+msgstr "NetworkManager 已在è¿è¡Œä¸­ (pid %ld)\n"
+
+#: ../src/main.c:329
+msgid "Print NetworkManager version and exit"
+msgstr "显示 NetworkManager 版本并退出"
-#: ../src/nm-netlink-monitor.c:291 ../src/nm-netlink-monitor.c:353
+#: ../src/main.c:330
+msgid "Don't become a daemon"
+msgstr "ä¸è¦æˆä¸ºå®ˆæŠ¤è¿›ç¨‹"
+
+#: ../src/main.c:331
+msgid "Don't become a daemon, and log to stderr"
+msgstr "ä¸è¦æˆä¸ºå®ˆæŠ¤è¿›ç¨‹å¹¶åœ¨ stderr 中记录"
+
+#: ../src/main.c:332
#, c-format
-msgid "unable to allocate netlink handle for monitoring link status: %s"
-msgstr "无法为监视连接状æ€åˆ†é…网路å¥æŸ„:%s"
+msgid "Log level: one of [%s]"
+msgstr "日志等级: [%s] 之一"
-#: ../src/nm-netlink-monitor.c:376
+#: ../src/main.c:334
#, c-format
-msgid "unable to allocate netlink link cache for monitoring link status: %s"
-msgstr "无法为监视连接状æ€åˆ†é…网路连接:%s"
+msgid "Log domains separated by ',': any combination of [%s]"
+msgstr "以 ',' 分开的日志域:å¯ä»¥æ˜¯ [%s] çš„ä»»æ„组åˆ"
+
+#: ../src/main.c:336
+msgid "Make all warnings fatal"
+msgstr "置所有警告为致命错误"
+
+#: ../src/main.c:337
+msgid "Specify the location of a PID file"
+msgstr "指定 PID 文件ä½ç½®"
+
+#: ../src/main.c:337
+msgid "filename"
+msgstr "文件å"
-#: ../src/nm-netlink-monitor.c:502
+#: ../src/main.c:338
+msgid "State file location"
+msgstr "状æ€æ–‡ä»¶ä½ç½®"
+
+#: ../src/main.c:338
+msgid "/path/to/state.file"
+msgstr "/path/to/state.file"
+
+#: ../src/main.c:364
#, c-format
-msgid "unable to join netlink group: %s"
-msgstr "无法加入网络链接组群:%s"
+msgid "GModules are not supported on your platform!\n"
+msgstr "您的平å°ä¸æ”¯æŒ GModulesï¼\n"
-#: ../src/nm-netlink-monitor.c:629 ../src/nm-netlink-monitor.c:642
+#: ../src/main.c:369
#, c-format
-msgid "error updating link cache: %s"
-msgstr "更新链接缓存出错:%s"
+msgid "You must be root to run NetworkManager!\n"
+msgstr "è¿è¡Œ NetworkManager 必须是 root 用户ï¼\n"
-#: ../src/main.c:502
+#: ../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 监控所有网络连接并自动\n"
+"选择最佳连接使用。它还å¯è®©ç”¨æˆ·\n"
+"指定无线连接点,å³è®¡ç®—机中\n"
+"应与之关è”的无线网å¡ã€‚"
+
+#: ../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:573
+#: ../src/main.c:412
#, c-format
msgid "%s. Please use --help to see a list of valid options.\n"
msgstr "%s。请使用 --help 查看有效选项列表。\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:324
+#: ../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:482
+#, c-format
+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:495
+#, c-format
+msgid "State file %s parsing failed: (%d) %s\n"
+msgstr "解æžçŠ¶æ€æ–‡ä»¶ %s 失败:(%d)%s\n"
+
+#: ../src/main.c:508
+#, c-format
+msgid "Could not daemonize: %s [error %u]\n"
+msgstr "无法守护进程化:%s [error %u]\n"
+
+#: ../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 "# 由 NetworkManger 创建\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:340
+#: ../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:284
+#: ../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:293
+#: ../src/dhcp-manager/nm-dhcp-manager.c:322
msgid "'dhclient' could be found."
msgstr "找到 'dhclient'。"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:303
+#: ../src/dhcp-manager/nm-dhcp-manager.c:332
msgid "'dhcpcd' could be found."
msgstr "找到 'dhcpcd'。"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:311
+#: ../src/dhcp-manager/nm-dhcp-manager.c:340
#, c-format
msgid "unsupported DHCP client '%s'"
msgstr "ä¸æ”¯æŒçš„ DHCP 客户端 '%s'"
-#: ../src/logging/nm-logging.c:146
+#: ../src/dns-manager/nm-dns-manager.c:401
+msgid "NOTE: the libc resolver may not support more than 3 nameservers."
+msgstr "注æ„:libc 解æžå™¨å¯èƒ½ä¸æ”¯æŒè¶…过三个åå­—æœåŠ¡å™¨ã€‚"
+
+#: ../src/dns-manager/nm-dns-manager.c:403
+msgid "The nameservers listed below may not be recognized."
+msgstr "以下列出的åå­—æœåŠ¡å™¨å¯èƒ½æ— æ³•è¢«è¯†åˆ«ã€‚"
+
+#: ../src/logging/nm-logging.c:149
#, c-format
msgid "Unknown log level '%s'"
msgstr "未知日志等级 '%s'"
-#: ../src/logging/nm-logging.c:171
+#: ../src/logging/nm-logging.c:226
#, c-format
msgid "Unknown log domain '%s'"
msgstr "未知日志域 '%s'"
-#: ../src/dns-manager/nm-dns-manager.c:384
-msgid "NOTE: the libc resolver may not support more than 3 nameservers."
-msgstr "注æ„:libc 解æžå™¨å¯èƒ½ä¸æ”¯æŒè¶…过三个åå­—æœåŠ¡å™¨ã€‚"
+#: ../src/config/nm-config.c:271
+msgid "Config file location"
+msgstr "é…置文件ä½ç½®"
-#: ../src/dns-manager/nm-dns-manager.c:386
-msgid "The nameservers listed below may not be recognized."
-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 "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/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/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/settings/nm-default-wired-connection.c:157
+#: ../src/devices/nm-device-adsl.c:150
#, c-format
-msgid "Auto %s"
-msgstr "自动 %s"
+msgid "ADSL connection %d"
+msgstr "ADSL 连接 %d"
-#: ../system-settings/plugins/ifcfg-rh/reader.c:3412
+#: ../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/devices/nm-device-bt.c:341
+#, c-format
+msgid "DUN connection %d"
+msgstr "DUN 连接 %d"
+
+#: ../src/devices/nm-device-ethernet.c:1254
+#, c-format
+msgid "PPPoE connection %d"
+msgstr "PPPoE 连接 %d"
+
+#: ../src/devices/nm-device-ethernet.c:1254
+#: ../src/settings/nm-settings-utils.c:50
+#, c-format
+msgid "Wired connection %d"
+msgstr "有线连接 %d"
+
+#: ../src/devices/nm-device-infiniband.c:270 ../tui/nm-editor-utils.c:177
+#, c-format
+msgid "InfiniBand connection %d"
+msgstr "InfiniBand 连接 %d"
+
+#: ../src/devices/nm-device-olpc-mesh.c:242
+#, c-format
+msgid "Mesh %d"
+msgstr "Mesh %d"
+
+#: ../src/devices/nm-device-team.c:158 ../tui/nm-editor-utils.c:223
+#, c-format
+msgid "Team connection %d"
+msgstr "Team 连接 %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:3420 ../tui/nm-editor-utils.c:246
+#, c-format
+msgid "VPN connection %d"
+msgstr "VPN 连接 %d"
+
+#: ../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:264
+#, c-format
+msgid "unable to connect to netlink for monitoring link status: %s"
+msgstr "无法为监视连接状æ€è¿žæŽ¥åˆ°ç½‘路:%s"
+
+#: ../src/nm-netlink-monitor.c:275
+#, c-format
+msgid "unable to enable netlink handle credential passing: %s"
+msgstr "无法å¯ç”¨ç½‘络链接å¥æŸ„è¯ä¹¦é€šè¿‡ï¼š%s"
+
+#: ../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:469
+#, c-format
+msgid "unable to join netlink group: %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:115
msgid "System"
msgstr "系统"
+
+#: ../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: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 "连接中"
+
+#: ../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:105
+msgid "Exit immediately if NetworkManager is not running"
+msgstr "如果 NetworkManager 未è¿è¡Œåˆ™ç«‹å³é€€å‡º"
+
+#: ../test/nm-online.c:106
+msgid "Don't print anything"
+msgstr "ä¸è¦æ˜¾ç¤ºä»»ä½•ä¿¡æ¯"
+
+#: ../test/nm-online.c:124
+msgid ""
+"Waits for NetworkManager to finish activating startup network connections."
+msgstr "等待 NetworkManager 完æˆæ¿€æ´»å¯åŠ¨ç½‘络连接。"
+
+#: ../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 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 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 "选择......"
+
+#: ../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)"
+
+#: ../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 "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 "以太网"
+
+#: ../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 "Datagram"
+
+#: ../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] "%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 "TEAM 端å£"
+
+#: ../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 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 "Ad-Hoc 网络"
+
+#: ../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-字节密ç çŸ­è¯­"
+
+#: ../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 "认è¯"
+
+#: ../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 "下一步 Hop"
+
+#: ../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"
+
+#: ../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 未è¿è¡Œã€‚"
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 7d5e1fe31..cef76ef2e 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -8,963 +8,3865 @@
# Chester Cheng <ccheng@紅帽å­>, 2010.
# Terry Chuang <tchuang at redhat>, 2010.
# Terry Chuang <tchuang@redhat.com>, 2010.
+# ccheng <ccheng@redhat.com>, 2014. #zanata
+# tchuang <tchuang@redhat.com>, 2014. #zanata
msgid ""
msgstr ""
"Project-Id-Version: zh_TW\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-06 14:31+0530\n"
-"PO-Revision-Date: 2010-05-07 10:59+1000\n"
-"Last-Translator: Terry Chuang <tchuang@redhat.com>\n"
+"POT-Creation-Date: 2014-01-23 17:13+0530\n"
+"PO-Revision-Date: 2014-01-28 02:24-0500\n"
+"Last-Translator: tchuang <tchuang@redhat.com>\n"
"Language-Team: Traditional Chinese <zh@li.org>\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-Generator: KBabel 1.11.4\n"
+"X-Generator: Zanata 3.2.3\n"
+"Language: zh-TW\n"
-#: ../cli/src/connections.c:59 ../cli/src/connections.c:74
-#: ../cli/src/devices.c:85 ../cli/src/devices.c:98 ../cli/src/devices.c:108
-#: ../cli/src/devices.c:118 ../cli/src/devices.c:131 ../cli/src/devices.c:142
-#: ../cli/src/devices.c:152
+#: ../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"
+
+#: ../cli/src/common.c:35 ../cli/src/common.c:55
+msgid "ADDRESS"
+msgstr "ADDRESS"
+
+#: ../cli/src/common.c:36 ../cli/src/common.c:56
+msgid "ROUTE"
+msgstr "ROUTE"
+
+#: ../cli/src/common.c:37 ../cli/src/common.c:57
+msgid "DNS"
+msgstr "DNS"
+
+#: ../cli/src/common.c:38 ../cli/src/common.c:58
+msgid "DOMAIN"
+msgstr "DOMAIN"
+
+#: ../cli/src/common.c:39
+msgid "WINS"
+msgstr "WINS"
+
+#: ../cli/src/common.c:47 ../cli/src/common.c:66
+msgid "OPTION"
+msgstr "OPTION"
+
+#: ../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:621
+msgid "unavailable"
+msgstr "無法使用"
+
+#: ../cli/src/common.c:623 ../cli/src/network-manager.c:276
+msgid "disconnected"
+msgstr "離線"
+
+#: ../cli/src/common.c:625
+msgid "connecting (prepare)"
+msgstr "連線中(準備)"
+
+#: ../cli/src/common.c:627
+msgid "connecting (configuring)"
+msgstr "連線中(é…置中)"
+
+#: ../cli/src/common.c:629
+msgid "connecting (need authentication)"
+msgstr "連線中(需è¦èº«ä»½èªè­‰ï¼‰"
+
+#: ../cli/src/common.c:631
+msgid "connecting (getting IP configuration)"
+msgstr "連線中(正在å–å¾— IP é…置)"
+
+#: ../cli/src/common.c:633
+msgid "connecting (checking IP connectivity)"
+msgstr "正在連線(正在檢查 IP 連線)"
+
+#: ../cli/src/common.c:635
+msgid "connecting (starting secondary connections)"
+msgstr "正在連線(正在啟用次è¦é€£ç·šï¼‰"
+
+#: ../cli/src/common.c:637 ../cli/src/network-manager.c:272
+msgid "connected"
+msgstr "已連線"
+
+#: ../cli/src/common.c:639 ../cli/src/connections.c:732
+msgid "deactivating"
+msgstr "正在åœç”¨"
+
+#: ../cli/src/common.c:641
+msgid "connection failed"
+msgstr "連線失敗"
+
+#: ../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:652
+msgid "No reason given"
+msgstr "未æä¾›ç†ç”±"
+
+#: ../cli/src/common.c:655 ../cli/src/connections.c:2258
+#, c-format
+msgid "Unknown error"
+msgstr "ä¸æ˜Žçš„錯誤"
+
+#: ../cli/src/common.c:658
+msgid "Device is now managed"
+msgstr "è£ç½®ç¾åœ¨å·²å—管ç†"
+
+#: ../cli/src/common.c:661
+msgid "Device is now unmanaged"
+msgstr "è£ç½®ç¾åœ¨å·²ä¸å—管ç†"
+
+#: ../cli/src/common.c:664
+msgid "The device could not be readied for configuration"
+msgstr "è£ç½®å°šæœªæº–備好進行é…ç½®"
+
+#: ../cli/src/common.c:667
+msgid ""
+"IP configuration could not be reserved (no available address, timeout, etc.)"
+msgstr "IP é…置無法é ç•™ï¼ˆæ²’有å¯ç”¨çš„ä½å€ã€é€¾æ™‚等等。)"
+
+#: ../cli/src/common.c:670
+msgid "The IP configuration is no longer valid"
+msgstr "IP é…置已ä¸å†æœ‰æ•ˆ"
+
+#: ../cli/src/common.c:673
+msgid "Secrets were required, but not provided"
+msgstr "需è¦æ©Ÿå¯†ï¼Œä½†å°šæœªæä¾›"
+
+#: ../cli/src/common.c:676
+msgid "802.1X supplicant disconnected"
+msgstr "802.1X 請求已斷線"
+
+#: ../cli/src/common.c:679
+msgid "802.1X supplicant configuration failed"
+msgstr "802.1X 請求組態失敗"
+
+#: ../cli/src/common.c:682
+msgid "802.1X supplicant failed"
+msgstr "802.1X 請求已失敗"
+
+#: ../cli/src/common.c:685
+msgid "802.1X supplicant took too long to authenticate"
+msgstr "802.1X 請求花了太長時間進行èªè­‰"
+
+#: ../cli/src/common.c:688
+msgid "PPP service failed to start"
+msgstr "無法啟動 PPP æœå‹™"
+
+#: ../cli/src/common.c:691
+msgid "PPP service disconnected"
+msgstr "PPP æœå‹™å·²æ–·ç·š"
+
+#: ../cli/src/common.c:694
+msgid "PPP failed"
+msgstr "PPP 失敗"
+
+#: ../cli/src/common.c:697
+msgid "DHCP client failed to start"
+msgstr "DHCP 客戶端啟動失敗"
+
+#: ../cli/src/common.c:700
+msgid "DHCP client error"
+msgstr "DHCP 客戶端錯誤"
+
+#: ../cli/src/common.c:703
+msgid "DHCP client failed"
+msgstr "DHCP 客戶端失敗"
+
+#: ../cli/src/common.c:706
+msgid "Shared connection service failed to start"
+msgstr "共享的連線æœå‹™å•Ÿå‹•å¤±æ•—"
+
+#: ../cli/src/common.c:709
+msgid "Shared connection service failed"
+msgstr "共享連線æœå‹™å¤±æ•—"
+
+#: ../cli/src/common.c:712
+msgid "AutoIP service failed to start"
+msgstr "AutoIP æœå‹™å•Ÿç”¨å¤±æ•—"
+
+#: ../cli/src/common.c:715
+msgid "AutoIP service error"
+msgstr "AutoIP æœå‹™éŒ¯èª¤"
+
+#: ../cli/src/common.c:718
+msgid "AutoIP service failed"
+msgstr "AutoIP æœå‹™å¤±æ•—"
+
+#: ../cli/src/common.c:721
+msgid "The line is busy"
+msgstr "忙線中"
+
+#: ../cli/src/common.c:724
+msgid "No dial tone"
+msgstr "沒有撥號音"
+
+#: ../cli/src/common.c:727
+msgid "No carrier could be established"
+msgstr "無法建立載體"
+
+#: ../cli/src/common.c:730
+msgid "The dialing request timed out"
+msgstr "撥號è¦æ±‚逾時"
+
+#: ../cli/src/common.c:733
+msgid "The dialing attempt failed"
+msgstr "嘗試撥號失敗"
+
+#: ../cli/src/common.c:736
+msgid "Modem initialization failed"
+msgstr "數據機åˆå§‹åŒ–失敗"
+
+#: ../cli/src/common.c:739
+msgid "Failed to select the specified APN"
+msgstr "無法é¸æ“‡æŒ‡å®šçš„ APN"
+
+#: ../cli/src/common.c:742
+msgid "Not searching for networks"
+msgstr "ä¸è¦æœå°‹ç¶²è·¯"
+
+#: ../cli/src/common.c:745
+msgid "Network registration denied"
+msgstr "網路登記被拒絕"
+
+#: ../cli/src/common.c:748
+msgid "Network registration timed out"
+msgstr "網路登記逾時"
+
+#: ../cli/src/common.c:751
+msgid "Failed to register with the requested network"
+msgstr "無法å‘è¦æ±‚的網路登記"
+
+#: ../cli/src/common.c:754
+msgid "PIN check failed"
+msgstr "PIN 檢查失敗"
+
+#: ../cli/src/common.c:757
+msgid "Necessary firmware for the device may be missing"
+msgstr "å¯èƒ½ç¼ºå°‘è£ç½®çš„å¿…è¦éŸŒé«”"
+
+#: ../cli/src/common.c:760
+msgid "The device was removed"
+msgstr "è£ç½®å·²ç§»é™¤"
+
+#: ../cli/src/common.c:763
+msgid "NetworkManager went to sleep"
+msgstr "NetworkManager 進入了ç¡çœ ç‹€æ…‹"
+
+#: ../cli/src/common.c:766
+msgid "The device's active connection disappeared"
+msgstr "è£ç½®çš„連線消失"
+
+#: ../cli/src/common.c:769
+msgid "Device disconnected by user or client"
+msgstr "è£ç½®çš„連線已被使用者或客戶端切斷"
+
+#: ../cli/src/common.c:772
+msgid "Carrier/link changed"
+msgstr "載體/連çµå·²æ›´æ”¹"
+
+#: ../cli/src/common.c:775
+msgid "The device's existing connection was assumed"
+msgstr "å·²å‡è¨­äº†è£ç½®çš„既有連線"
+
+#: ../cli/src/common.c:778
+msgid "The supplicant is now available"
+msgstr "è¦æ±‚ç¾åœ¨å·²èƒ½é€²è¡Œ"
+
+#: ../cli/src/common.c:781
+msgid "The modem could not be found"
+msgstr "找ä¸åˆ°æ•¸æ“šæ©Ÿ"
+
+#: ../cli/src/common.c:784
+msgid "The Bluetooth connection failed or timed out"
+msgstr "è—牙連線失敗或逾時"
+
+#: ../cli/src/common.c:787
+msgid "GSM Modem's SIM card not inserted"
+msgstr "GSM 數據機的 SIM å¡å°šæœªæ’å…¥"
+
+#: ../cli/src/common.c:790
+msgid "GSM Modem's SIM PIN required"
+msgstr "éœ€è¦ GSM 數據機的 SIM PIN"
+
+#: ../cli/src/common.c:793
+msgid "GSM Modem's SIM PUK required"
+msgstr "éœ€è¦ GSM 數據機的 SIM PUK"
+
+#: ../cli/src/common.c:796
+msgid "GSM Modem's SIM wrong"
+msgstr "GSM 數據機的 SIM 錯誤"
+
+#: ../cli/src/common.c:799
+msgid "InfiniBand device does not support connected mode"
+msgstr "InfiniBand è£ç½®ä¸æ”¯æ´å·²é€£æŽ¥æ¨¡å¼"
+
+#: ../cli/src/common.c:802
+msgid "A dependency of the connection failed"
+msgstr "連線的相ä¾æ€§ç™¼ç”ŸéŒ¯èª¤"
+
+#: ../cli/src/common.c:805
+msgid "A problem with the RFC 2684 Ethernet over ADSL bridge"
+msgstr "ADSL 橋接上發生了 RFC 2684 乙太網路上的å•é¡Œ"
+
+#: ../cli/src/common.c:808
+msgid "ModemManager is unavailable"
+msgstr "ModemManager 無法使用"
+
+#: ../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 控制失敗"
+
+#: ../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' is not a valid team configuration or file name."
+msgstr "'%s' ä¸æ˜¯åˆæ–¼è¦å®šçš„ team é…置或檔å"
+
+#: ../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
-#: ../cli/src/connections.c:60 ../cli/src/connections.c:75
+#: ../cli/src/connections.c:69 ../cli/src/connections.c:176
msgid "UUID"
msgstr "UUID"
-#. 1
-#: ../cli/src/connections.c:61
+#: ../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"
+
+#: ../cli/src/connections.c:71
+msgid "TIMESTAMP"
+msgstr "TIMESTAMP"
+
+#: ../cli/src/connections.c:72
+msgid "TIMESTAMP-REAL"
+msgstr "TIMESTAMP-REAL"
+
+#: ../cli/src/connections.c:73 ../cli/src/devices.c:101
+msgid "AUTOCONNECT"
+msgstr "AUTOCONNECT"
+
+#: ../cli/src/connections.c:74
+msgid "READONLY"
+msgstr "READONLY"
+
+#: ../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"
+
+#: ../cli/src/connections.c:177
msgid "DEVICES"
msgstr "DEVICES"
-#. 2
-#: ../cli/src/connections.c:62 ../cli/src/connections.c:77
-msgid "SCOPE"
-msgstr "SCOPE"
+#: ../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"
-#. 3
-#: ../cli/src/connections.c:63
+#: ../cli/src/connections.c:179
msgid "DEFAULT"
msgstr "DEFAULT"
-#. 4
-#: ../cli/src/connections.c:64
-msgid "DBUS-SERVICE"
-msgstr "DBUS-SERVICE"
+#: ../cli/src/connections.c:180
+msgid "DEFAULT6"
+msgstr "DEFAULT6"
-#. 5
-#: ../cli/src/connections.c:65
+#: ../cli/src/connections.c:181
msgid "SPEC-OBJECT"
msgstr "SPEC-OBJECT"
-#. 6
-#: ../cli/src/connections.c:66
+#: ../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"
-#. 1
-#. 0
-#. 1
-#: ../cli/src/connections.c:76 ../cli/src/devices.c:61 ../cli/src/devices.c:87
-msgid "TYPE"
-msgstr "TYPE"
+#: ../cli/src/connections.c:184 ../cli/src/devices.c:77
+#: ../cli/src/devices.c:105
+msgid "CON-PATH"
+msgstr "CON-PATH"
-#. 3
-#: ../cli/src/connections.c:78
-msgid "TIMESTAMP"
-msgstr "TIMESTAMP"
+#: ../cli/src/connections.c:185
+msgid "ZONE"
+msgstr "ZONE"
-#. 4
-#: ../cli/src/connections.c:79
-msgid "TIMESTAMP-REAL"
-msgstr "TIMESTAMP-REAL"
+#: ../cli/src/connections.c:186
+msgid "MASTER-PATH"
+msgstr "MASTER-PATH"
-#. 5
-#: ../cli/src/connections.c:80
-msgid "AUTOCONNECT"
-msgstr "AUTOCONNECT"
+#: ../cli/src/connections.c:202
+msgid "USERNAME"
+msgstr "USERNAME"
-#. 6
-#: ../cli/src/connections.c:81
-msgid "READONLY"
-msgstr "READONLY"
+#: ../cli/src/connections.c:203
+msgid "GATEWAY"
+msgstr "GATEWAY"
+
+#: ../cli/src/connections.c:204
+msgid "BANNER"
+msgstr "BANNER"
-#: ../cli/src/connections.c:157
+#: ../cli/src/connections.c:205
+msgid "VPN-STATE"
+msgstr "VPN-STATE"
+
+#: ../cli/src/connections.c:206
+msgid "CFG"
+msgstr "CFG"
+
+#: ../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"
+"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"
-" 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"
msgstr ""
-"Usage: nmcli con { COMMAND | help }\n"
-" COMMAND := { list | status | up | down }\n"
+"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"
-" 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:197 ../cli/src/connections.c:536
+#: ../cli/src/connections.c:278
#, c-format
-msgid "Error: 'con list': %s"
-msgstr "錯誤:'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 ""
+"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"
-#: ../cli/src/connections.c:199 ../cli/src/connections.c:538
+#: ../cli/src/connections.c:297
#, c-format
-msgid "Error: 'con list': %s; allowed fields: %s"
-msgstr "錯誤:'con list': %s; å…許的欄ä½ç‚ºï¼š%s"
+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 ""
+"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"
-#: ../cli/src/connections.c:207
-msgid "Connection details"
-msgstr "連線詳情"
+#: ../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 ""
+"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"
-#: ../cli/src/connections.c:381 ../cli/src/connections.c:601
-msgid "system"
-msgstr "系統"
+#: ../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 ""
+"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"
-#: ../cli/src/connections.c:381 ../cli/src/connections.c:601
-msgid "user"
-msgstr "使用者"
+#: ../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 ""
+"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"
-#: ../cli/src/connections.c:383
+#: ../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 ""
+"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"
+
+#: ../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 ""
+"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"
+
+#: ../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: nmcli connection reload { help }\n"
+"\n"
+"Reload all connection files from disk.\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 ""
+"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"
+
+#: ../cli/src/connections.c:515
+#, c-format
+msgid "Error: 'list configured': %s"
+msgstr "錯誤:'list configured':%s"
+
+#: ../cli/src/connections.c:523
+msgid "Connection details"
+msgstr "連線詳情"
+
+#: ../cli/src/connections.c:589
msgid "never"
msgstr "æ°¸ä¸"
-#. "CAPABILITIES"
-#. Print header
-#. "WIFI-PROPERTIES"
-#: ../cli/src/connections.c:384 ../cli/src/connections.c:385
-#: ../cli/src/connections.c:602 ../cli/src/connections.c:605
-#: ../cli/src/devices.c:388 ../cli/src/devices.c:513 ../cli/src/devices.c:539
-#: ../cli/src/devices.c:540 ../cli/src/devices.c:541 ../cli/src/devices.c:542
-#: ../cli/src/devices.c:543 ../cli/src/settings.c:504
-#: ../cli/src/settings.c:544 ../cli/src/settings.c:643
-#: ../cli/src/settings.c:912 ../cli/src/settings.c:913
-#: ../cli/src/settings.c:915 ../cli/src/settings.c:917
-#: ../cli/src/settings.c:1042 ../cli/src/settings.c:1043
-#: ../cli/src/settings.c:1044 ../cli/src/settings.c:1123
-#: ../cli/src/settings.c:1124 ../cli/src/settings.c:1125
-#: ../cli/src/settings.c:1126 ../cli/src/settings.c:1127
-#: ../cli/src/settings.c:1128 ../cli/src/settings.c:1129
-#: ../cli/src/settings.c:1130 ../cli/src/settings.c:1131
-#: ../cli/src/settings.c:1132 ../cli/src/settings.c:1133
-#: ../cli/src/settings.c:1134 ../cli/src/settings.c:1135
-#: ../cli/src/settings.c:1210
+#: ../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:384 ../cli/src/connections.c:385
-#: ../cli/src/connections.c:602 ../cli/src/connections.c:605
-#: ../cli/src/devices.c:388 ../cli/src/devices.c:513 ../cli/src/devices.c:539
-#: ../cli/src/devices.c:540 ../cli/src/devices.c:541 ../cli/src/devices.c:542
-#: ../cli/src/devices.c:543 ../cli/src/settings.c:504
-#: ../cli/src/settings.c:506 ../cli/src/settings.c:544
-#: ../cli/src/settings.c:643 ../cli/src/settings.c:912
-#: ../cli/src/settings.c:913 ../cli/src/settings.c:915
-#: ../cli/src/settings.c:917 ../cli/src/settings.c:1042
-#: ../cli/src/settings.c:1043 ../cli/src/settings.c:1044
-#: ../cli/src/settings.c:1123 ../cli/src/settings.c:1124
-#: ../cli/src/settings.c:1125 ../cli/src/settings.c:1126
-#: ../cli/src/settings.c:1127 ../cli/src/settings.c:1128
-#: ../cli/src/settings.c:1129 ../cli/src/settings.c:1130
-#: ../cli/src/settings.c:1131 ../cli/src/settings.c:1132
-#: ../cli/src/settings.c:1133 ../cli/src/settings.c:1134
-#: ../cli/src/settings.c:1135 ../cli/src/settings.c:1210
+#: ../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:457 ../cli/src/connections.c:500
-msgid "System connections"
-msgstr "系統連線"
-
-#: ../cli/src/connections.c:462 ../cli/src/connections.c:513
-msgid "User connections"
-msgstr "使用者連線"
-
-#: ../cli/src/connections.c:474 ../cli/src/connections.c:1334
-#: ../cli/src/connections.c:1350 ../cli/src/connections.c:1359
-#: ../cli/src/connections.c:1370 ../cli/src/connections.c:1452
-#: ../cli/src/devices.c:864 ../cli/src/devices.c:874 ../cli/src/devices.c:973
-#: ../cli/src/devices.c:980
+#: ../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:487
+#: ../cli/src/connections.c:698
#, c-format
msgid "Error: %s - no such connection."
msgstr "錯誤:%s - 此連線ä¸å­˜åœ¨ã€‚"
-#: ../cli/src/connections.c:519 ../cli/src/connections.c:1383
-#: ../cli/src/connections.c:1470 ../cli/src/devices.c:687
-#: ../cli/src/devices.c:754 ../cli/src/devices.c:888 ../cli/src/devices.c:986
-#, c-format
-msgid "Unknown parameter: %s\n"
-msgstr "ä¸æ˜Žçš„åƒæ•¸ï¼š%s\n"
-
-#: ../cli/src/connections.c:528
+#: ../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:543 ../cli/src/connections.c:1572
-#: ../cli/src/devices.c:1192 ../cli/src/network-manager.c:274
+#: ../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:649
-#, c-format
-msgid "Error: 'con status': %s"
-msgstr "錯誤:'con status': %s"
-
-#: ../cli/src/connections.c:651
-#, c-format
-msgid "Error: 'con status': %s; allowed fields: %s"
-msgstr "錯誤:'con status': %s; å…許的欄ä½ç‚ºï¼š%s"
-
-#: ../cli/src/connections.c:658
-msgid "Active connections"
-msgstr "使用中的連線"
-
-#: ../cli/src/connections.c:1026
-#, c-format
-msgid "no active connection on device '%s'"
-msgstr "è£ç½®ã€Œ%sã€æ²’有使用中的連線"
-
-#: ../cli/src/connections.c:1034
-#, c-format
-msgid "no active connection or device"
-msgstr "沒有使用中的連線或è£ç½®"
-
-#: ../cli/src/connections.c:1084
-#, c-format
-msgid "device '%s' not compatible with connection '%s'"
-msgstr "è£ç½® '%s' 和連線 '%s' ä¸ç›¸å®¹"
-
-#: ../cli/src/connections.c:1086
-#, c-format
-msgid "no device found for connection '%s'"
-msgstr "連線「%sã€æ²’有找到任何è£ç½®"
-
-#: ../cli/src/connections.c:1097
+#: ../cli/src/connections.c:728
msgid "activating"
msgstr "啟用中"
-#: ../cli/src/connections.c:1099
+#: ../cli/src/connections.c:730
msgid "activated"
msgstr "已啟用"
-#: ../cli/src/connections.c:1102 ../cli/src/connections.c:1125
-#: ../cli/src/connections.c:1158 ../cli/src/devices.c:224
-#: ../cli/src/devices.c:514 ../cli/src/network-manager.c:92
-#: ../cli/src/network-manager.c:145 ../cli/src/settings.c:469
-msgid "unknown"
-msgstr "ä¸æ˜Ž"
+# auto translated by TM merge from project: firewalld, version: 0.3.4, DocId: firewalld
+#: ../cli/src/connections.c:734
+msgid "deactivated"
+msgstr "å·²åœæ­¢"
-#: ../cli/src/connections.c:1111
+#: ../cli/src/connections.c:746
msgid "VPN connecting (prepare)"
msgstr "VPN 連線(準備)"
-#: ../cli/src/connections.c:1113
+#: ../cli/src/connections.c:748
msgid "VPN connecting (need authentication)"
msgstr "VPN 連線(需è¦èº«ä»½èªè­‰ï¼‰"
-#: ../cli/src/connections.c:1115
+#: ../cli/src/connections.c:750
msgid "VPN connecting"
msgstr "VPN 連線"
-#: ../cli/src/connections.c:1117
+#: ../cli/src/connections.c:752
msgid "VPN connecting (getting IP configuration)"
msgstr "VPN 連線(å–å¾— IP é…置)"
-#: ../cli/src/connections.c:1119
+#: ../cli/src/connections.c:754
msgid "VPN connected"
msgstr "VPN 已連線"
-#: ../cli/src/connections.c:1121
+#: ../cli/src/connections.c:756
msgid "VPN connection failed"
msgstr "VPN 連線失敗"
-#: ../cli/src/connections.c:1123
+#: ../cli/src/connections.c:758
msgid "VPN disconnected"
msgstr "VPN 已離線"
-#: ../cli/src/connections.c:1134
+# auto translated by TM merge from project: gnome-system-monitor, version: 3.8.2.1, DocId: gnome-system-monitor
+#: ../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:1012
+#, c-format
+msgid "Error: 'list active': %s"
+msgstr "錯誤:「list activeã€ï¼š%s"
+
+#: ../cli/src/connections.c:1020
+msgid "Active connection details"
+msgstr "有效連線的詳細資訊"
+
+#: ../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:1203
+msgid "List of active connections"
+msgstr "啟用中的連線之清單"
+
+#: ../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:1251
+#, c-format
+msgid "Error: 'show active': %s"
+msgstr "錯誤:「show activeã€ï¼š%s"
+
+#: ../cli/src/connections.c:1344
+#, c-format
+msgid "no active connection on device '%s'"
+msgstr "è£ç½®ã€Œ%sã€ä¸Šæ²’有使用中的連線"
+
+#: ../cli/src/connections.c:1352
+msgid "no active connection or device"
+msgstr "沒有使用中的連線或è£ç½®"
+
+#: ../cli/src/connections.c:1423
+#, c-format
+msgid "device '%s' not compatible with connection '%s'"
+msgstr "è£ç½®ã€Œ%sã€å’Œé€£ç·šã€Œ%sã€ä¸ç›¸å®¹"
+
+#: ../cli/src/connections.c:1426
+#, c-format
+msgid "no device found for connection '%s'"
+msgstr "連線「%sã€æ²’有找到任何è£ç½®"
+
+#: ../cli/src/connections.c:1438
msgid "unknown reason"
msgstr "原因ä¸æ˜Ž"
-#: ../cli/src/connections.c:1136
+#: ../cli/src/connections.c:1440 ../cli/src/network-manager.c:288
msgid "none"
msgstr "none"
-#: ../cli/src/connections.c:1138
+#: ../cli/src/connections.c:1442
msgid "the user was disconnected"
msgstr "該使用者已經斷線"
-#: ../cli/src/connections.c:1140
+#: ../cli/src/connections.c:1444
msgid "the base network connection was interrupted"
msgstr "基礎的網路連線已經中斷"
-#: ../cli/src/connections.c:1142
+#: ../cli/src/connections.c:1446
msgid "the VPN service stopped unexpectedly"
msgstr "VPN æœå‹™ç„¡é æœŸåœæ­¢"
-#: ../cli/src/connections.c:1144
+#: ../cli/src/connections.c:1448
msgid "the VPN service returned invalid configuration"
msgstr "VPN æœå‹™å‚³å›žç„¡æ•ˆçš„é…ç½®"
-#: ../cli/src/connections.c:1146
+#: ../cli/src/connections.c:1450
msgid "the connection attempt timed out"
msgstr "åšè©¦é€£ç·šå·²ç¶“逾時"
-#: ../cli/src/connections.c:1148
+#: ../cli/src/connections.c:1452
msgid "the VPN service did not start in time"
msgstr "VPN æœå‹™ä¸¦æ²’有按時開始"
-#: ../cli/src/connections.c:1150
+#: ../cli/src/connections.c:1454
msgid "the VPN service failed to start"
msgstr "VPN æœå‹™ç„¡æ³•é–‹å§‹"
-#: ../cli/src/connections.c:1152
+#: ../cli/src/connections.c:1456
msgid "no valid VPN secrets"
msgstr "VPN 密碼ä¸æ­£ç¢º"
-#: ../cli/src/connections.c:1154
+#: ../cli/src/connections.c:1458
msgid "invalid VPN secrets"
msgstr "VPN 密碼ä¸æ­£ç¢º"
-#: ../cli/src/connections.c:1156
+#: ../cli/src/connections.c:1460
msgid "the connection was removed"
msgstr "連線已移除"
-#: ../cli/src/connections.c:1170
-#, c-format
-msgid "state: %s\n"
-msgstr "狀態:%s\n"
-
-#: ../cli/src/connections.c:1173 ../cli/src/connections.c:1199
+#: ../cli/src/connections.c:1477 ../cli/src/connections.c:1633
+#: ../cli/src/connections.c:6016
#, c-format
-msgid "Connection activated\n"
-msgstr "連線已啟動\n"
+msgid "Connection successfully activated (D-Bus active path: %s)\n"
+msgstr "連線已æˆåŠŸå•Ÿç”¨ï¼ˆD-Bus 啟用路徑:%s)\n"
-#: ../cli/src/connections.c:1176
+#: ../cli/src/connections.c:1482
#, c-format
msgid "Error: Connection activation failed."
msgstr "錯誤:啟動連線失敗。"
-#: ../cli/src/connections.c:1195
+#: ../cli/src/connections.c:1507
#, c-format
-msgid "state: %s (%d)\n"
-msgstr "狀態:%s (%d)\n"
+msgid "VPN connection successfully activated (D-Bus active path: %s)\n"
+msgstr "VPN 連線已æˆåŠŸå•Ÿç”¨ï¼ˆD-Bus 啟用路徑:%s)\n"
-#: ../cli/src/connections.c:1205
+#: ../cli/src/connections.c:1514
#, c-format
msgid "Error: Connection activation failed: %s."
msgstr "錯誤:啟動連線失敗:%s。"
-#: ../cli/src/connections.c:1222 ../cli/src/devices.c:811
+#: ../cli/src/connections.c:1532 ../cli/src/devices.c:1294
#, c-format
msgid "Error: Timeout %d sec expired."
msgstr "錯誤:逾時 %d 秒。"
-#: ../cli/src/connections.c:1265
+#: ../cli/src/connections.c:1597
+#, c-format
+msgid ""
+"Error: Device '%s' is waiting for slaves before proceeding with activation."
+msgstr "錯誤:è£ç½®ã€Œ%sã€æ­£åœ¨ç­‰å¾… slave,以繼續進行啟用。"
+
+#: ../cli/src/connections.c:1617
#, c-format
msgid "Error: Connection activation failed: %s"
msgstr "錯誤:啟動連線失敗:%s"
-#: ../cli/src/connections.c:1279
+#: ../cli/src/connections.c:1722 ../cli/src/connections.c:1854
+msgid "unknown error"
+msgstr "ä¸æ˜Žçš„錯誤"
+
+#: ../cli/src/connections.c:1730
#, c-format
-msgid "Error: Obtaining active connection for '%s' failed."
-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:1773 ../cli/src/connections.c:1884
+#: ../cli/src/connections.c:7714
+msgid "Connection (name, UUID, or path): "
+msgstr "連線(å稱ã€UUID 或是路徑):"
-#: ../cli/src/connections.c:1288
+#: ../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 "Active connection state: %s\n"
-msgstr "啟用中連線的狀態:%s\n"
+msgid "Unknown parameter: %s\n"
+msgstr "ä¸æ˜Žçš„åƒæ•¸ï¼š%s\n"
+
+#: ../cli/src/connections.c:1862
+msgid "preparing"
+msgstr "正在準備"
-#: ../cli/src/connections.c:1289
+#: ../cli/src/connections.c:1889 ../cli/src/connections.c:7719
+#: ../cli/src/connections.c:7832
#, c-format
-msgid "Active connection path: %s\n"
-msgstr "啟用中連線的路徑:%s\n"
+msgid "Error: No connection specified."
+msgstr "錯誤:尚未指定連線。"
-#: ../cli/src/connections.c:1343 ../cli/src/connections.c:1461
+#: ../cli/src/connections.c:2237 ../cli/src/utils.c:490
#, c-format
-msgid "Error: Unknown connection: %s."
-msgstr "錯誤:ä¸æ˜Žçš„連線:%s。"
+msgid "'%s' not among [%s]"
+msgstr "「%sã€ä¸åœ¨ã€Œ%sã€ä¹‹é–“"
-#: ../cli/src/connections.c:1378 ../cli/src/devices.c:882
+#: ../cli/src/connections.c:2319
#, c-format
-msgid "Error: timeout value '%s' is not valid."
-msgstr "錯誤:逾時值「%sã€ä¸åˆä¹Žè¦å®šã€‚"
+msgid "Error: '%s': '%s' is not a valid %s MAC address."
+msgstr "錯誤:「%sã€ï¼šã€Œ%sã€ä¸æ˜¯å€‹æœ‰æ•ˆçš„ %s MAC ä½å€ã€‚"
-#: ../cli/src/connections.c:1391 ../cli/src/connections.c:1478
+#: ../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: id or uuid has to be specified."
-msgstr "錯誤:未指定 id 或 uuid。"
+msgid "Error: 'mtu': '%s' is not a valid MTU."
+msgstr "錯誤:「mtuã€ï¼šã€Œ%sã€ä¸æ˜¯å€‹æœ‰æ•ˆçš„ MTU。"
-#: ../cli/src/connections.c:1411
+#: ../cli/src/connections.c:2359
#, c-format
-msgid "Error: No suitable device found: %s."
-msgstr "錯誤:找ä¸åˆ°é©ç”¨çš„è£ç½®ï¼š%s。"
+msgid "Error: 'parent': '%s' is not a valid interface name."
+msgstr "錯誤:「parentã€ï¼šã€Œ%sã€ä¸æ˜¯çµ„有效的介é¢å¡å稱。"
-#: ../cli/src/connections.c:1413
+#: ../cli/src/connections.c:2380
#, c-format
-msgid "Error: No suitable device found."
-msgstr "錯誤:找ä¸åˆ°é©ç”¨çš„è£ç½®ã€‚"
+msgid "Error: 'p-key': '%s' is not a valid InfiniBand P_KEY."
+msgstr "錯誤:「p-keyã€ï¼šã€Œ%sã€ä¸æ˜¯çµ„有效的 InfiniBand P_KEY。"
-#: ../cli/src/connections.c:1505
+#: ../cli/src/connections.c:2396
#, c-format
-msgid "Warning: Connection not active\n"
-msgstr "警告:連線並未啟用\n"
+msgid ""
+"Error: 'mode': '%s' is not a valid InfiniBand transport mode [datagram, "
+"connected]."
+msgstr "錯誤:「modeã€ï¼šã€Œ%sã€ä¸æ˜¯å€‹æœ‰æ•ˆçš„ InfiniBand 傳輸模å¼ã€Œdatagramã€connectedã€ã€‚"
-#: ../cli/src/connections.c:1561
+#: ../cli/src/connections.c:2412
#, c-format
-msgid "Error: 'con' command '%s' is not valid."
-msgstr "錯誤:「conã€æŒ‡ä»¤ã€Œ%sã€ä¸åˆä¹Žè¦å®šã€‚"
+msgid "Error: 'flags': '%s' is not valid; use <0-7>."
+msgstr "錯誤:「flagsã€ï¼šã€Œ%sã€ç„¡æ•ˆï¼›ä½¿ç”¨ <0-7>。"
-#: ../cli/src/connections.c:1597
+#: ../cli/src/connections.c:2434
#, c-format
-msgid "Error: could not connect to D-Bus."
-msgstr "錯誤:無法連到 D-Bus。"
+msgid "Error: '%s': '%s' is not valid; %s "
+msgstr "錯誤:「%sã€ï¼šã€Œ%sã€ç„¡æ•ˆï¼›%s"
-#: ../cli/src/connections.c:1604
+#: ../cli/src/connections.c:2541
#, c-format
-msgid "Error: Could not get system settings."
-msgstr "錯誤:無法å–得系統設定。"
+msgid "Error: '%s': '%s' is not valid; use <%u-%u>."
+msgstr "錯誤:「%sã€ï¼šã€Œ%sã€ç„¡æ•ˆï¼›ä½¿ç”¨ <%u-%u>。"
+
+#: ../cli/src/connections.c:2555
+msgid "ethernet"
+msgstr "乙太網路"
+
+#: ../cli/src/connections.c:2555 ../tui/nm-editor-utils.c:164
+#: ../tui/nm-ui-utils.c:337
+msgid "Wi-Fi"
+msgstr "無線網路"
-#: ../cli/src/connections.c:1612
+#: ../cli/src/connections.c:2558
#, c-format
-msgid "Error: Could not get user settings."
-msgstr "錯誤:無法å–得使用者設定。"
+msgid "There are 3 optional arguments for '%s' connection type.\n"
+msgstr "「%sã€é€£ç·šé¡žåž‹æœ‰ä¸‰å€‹é¸ç”¨æ€§å¼•æ•¸ã€‚\n"
-#: ../cli/src/connections.c:1622
+#: ../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]"
+
+#: ../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 [none]:"
+
+#: ../cli/src/connections.c:2589
+msgid "Cloned MAC [none]: "
+msgstr "Cloned MAC [none]:"
+
+#: ../cli/src/connections.c:2612
#, c-format
-msgid "Error: Can't obtain connections: settings services are not running."
-msgstr "錯誤:無法å–得連線:設定æœå‹™ä¸¦æœªåŸ·è¡Œã€‚"
+msgid "There are 5 optional arguments for 'InfiniBand' connection type.\n"
+msgstr "「InfiniBandã€é€£ç·šé¡žåž‹æœ‰äº”個é¸ç”¨æ€§å¼•æ•¸ã€‚\n"
-#. 0
-#. 9
-#: ../cli/src/devices.c:60 ../cli/src/devices.c:86 ../cli/src/devices.c:162
-msgid "DEVICE"
-msgstr "DEVICE"
+#: ../cli/src/connections.c:2643
+msgid "Transport mode (datagram or connected) [datagram]: "
+msgstr "傳輸模å¼ï¼ˆdatagram 或是 connected)[datagram]:"
-#. 1
-#. 4
-#. 0
-#: ../cli/src/devices.c:62 ../cli/src/devices.c:90
-#: ../cli/src/network-manager.c:36
-msgid "STATE"
-msgstr "STATE"
+#: ../cli/src/connections.c:2656
+msgid "Parent interface [none]: "
+msgstr "父介é¢å¡ [none]:"
-#: ../cli/src/devices.c:71
-msgid "GENERAL"
-msgstr "GENERAL"
+#: ../cli/src/connections.c:2667
+msgid "P_KEY [none]: "
+msgstr "P_KEY [none]:"
-#. 0
-#: ../cli/src/devices.c:72
-msgid "CAPABILITIES"
-msgstr "CAPABILITIES"
+#: ../cli/src/connections.c:2677
+#, c-format
+msgid "Error: 'p-key' is mandatory when 'parent' is specified.\n"
+msgstr "錯誤:當指定了「parentã€æ™‚,「p-keyã€æ˜¯å¿…è¦çš„。\n"
-#. 1
-#: ../cli/src/devices.c:73
-msgid "WIFI-PROPERTIES"
-msgstr "WIFI-PROPERTIES"
+#: ../cli/src/connections.c:2702
+#, c-format
+msgid "There is 1 optional argument for 'WiMax' connection type.\n"
+msgstr "「WiMaxã€é€£ç·šé¡žåž‹æœ‰ä¸€é …é¸ç”¨æ€§å¼•æ•¸ã€‚\n"
-#. 2
-#: ../cli/src/devices.c:74
-msgid "AP"
-msgstr "AP"
+#: ../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]"
-#. 3
-#: ../cli/src/devices.c:75
-msgid "WIRED-PROPERTIES"
-msgstr "WIRED-PROPERTIES"
+#: ../cli/src/connections.c:2734
+#, c-format
+msgid "There are 4 optional arguments for 'PPPoE' connection type.\n"
+msgstr "「PPPoEã€çš„連線類型有四個é¸ç”¨å¼•æ•¸ã€‚\n"
+
+#: ../cli/src/connections.c:2742 ../cli/src/connections.c:2790
+msgid "Password [none]: "
+msgstr "密碼 [none]:"
+
+#: ../cli/src/connections.c:2744
+msgid "Service [none]: "
+msgstr "æœå‹™ [none]:"
+
+#: ../cli/src/connections.c:2780
+#, c-format
+msgid ""
+"There are 2 optional arguments for 'mobile broadband' connection type.\n"
+msgstr "「行動寬頻ã€é€£ç·šé¡žåž‹æœ‰å…©å€‹é¸ç”¨æ€§å¼•æ•¸ã€‚\n"
+
+#: ../cli/src/connections.c:2788 ../cli/src/connections.c:3233
+msgid "Username [none]: "
+msgstr "使用者å稱 [none]:"
+
+#: ../cli/src/connections.c:2804
+#, c-format
+msgid "There is 1 optional argument for 'bluetooth' connection type.\n"
+msgstr "「bluetoothã€é€£ç·šé¡žåž‹æœ‰ä¸€é …é¸ç”¨æ€§å¼•æ•¸ã€‚\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"
+
+#: ../cli/src/connections.c:2840
+#, c-format
+msgid "There are 4 optional arguments for 'VLAN' connection type.\n"
+msgstr "「VLANã€é€£ç·šé¡žåž‹æœ‰å››å€‹é¸ç”¨æ€§å¼•æ•¸ã€‚\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 "Ingress 優先順åºå°æ˜  [none]:"
+
+#: ../cli/src/connections.c:2882
+msgid "Egress priority maps [none]: "
+msgstr "Egress 優先順åºå°æ˜  [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 æ¨¡å¼ [balance-rr]:"
+
+#: ../cli/src/connections.c:2934
+msgid "Bonding primary interface [none]: "
+msgstr "Bonding 主è¦ä»‹é¢å¡ [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 "Bonding 監控模å¼ï¼ˆ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ã€çš„連線類型有一個é¸ç”¨å¼•æ•¸ã€‚\n"
+
+#: ../cli/src/connections.c:3032
+msgid "Team JSON configuration [none]: "
+msgstr "團隊 JSON çš„é…ç½® [none]:"
+
+#: ../cli/src/connections.c:3051
+msgid "team"
+msgstr "team"
+
+#: ../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ã€é€£ç·šé¡žåž‹æœ‰å…­å€‹é¸ç”¨æ€§å¼•æ•¸ã€‚\n"
+
+#: ../cli/src/connections.c:3081
+msgid "Enable STP (yes/no) [yes]: "
+msgstr "啟用 STP(yes/no)[yes]:"
-#. 4
-#: ../cli/src/devices.c:76
-msgid "IP4-SETTINGS"
-msgstr "IP4-SETTINGS"
+#: ../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 "Forward delay [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 "Hello time [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 "Max age [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 address ageing time [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ã€é€£ç·šé¡žåž‹æœ‰ä¸‰å€‹é¸ç”¨æ€§å¼•æ•¸ã€‚\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 path cost [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ã€é€£ç·šé¡žåž‹æœ‰å…©å€‹é¸ç”¨æ€§å¼•æ•¸ã€‚\n"
+
+#: ../cli/src/connections.c:3258
+msgid "OLPC Mesh channel [1]: "
+msgstr "OLPC Mesh channel [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 address [none]:"
+
+#: ../cli/src/connections.c:3317
+msgid "IPv4 address (IP[/plen] [gateway]) [none]: "
+msgstr "IPv4 address (IP[/plen] [gateway]) [none]:"
+
+#: ../cli/src/connections.c:3319
+msgid "IPv6 address (IP[/plen] [gateway]) [none]: "
+msgstr "IPv6 address (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 "Bond master:"
+
+#: ../cli/src/connections.c:4137 ../cli/src/connections.c:4229
+#: ../cli/src/connections.c:4416
+msgid "Error: 'master' is required."
+msgstr "錯誤:需è¦ã€Œmaterã€ã€‚"
+
+#: ../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ã€ç›®å‰å·²è¢«å¿½ç•¥ã€‚我們目å‰åƒ…支æ´ä¹™å¤ªç¶²è·¯ slave。\n"
+
+#: ../cli/src/connections.c:4226
+msgid "Team master: "
+msgstr "Team master:"
+
+#: ../cli/src/connections.c:4329
+#, c-format
+msgid "Error: 'stp': %s."
+msgstr "錯誤:「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 "錯誤:「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>] :: å‰å¾€æŸé …設定或內容\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"
-#. 5
-#: ../cli/src/devices.c:77
-msgid "IP4-DNS"
-msgstr "IP4-DNS"
+#: ../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-settings(5) man page,以檢視所有的 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] :: å°å‡ºè¨­å®šæˆ–是連線值\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 [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 :: 退出 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> 新增至此內容(若這項內容乃 container 類型的話)。若是單值的內容,它會將值替æ›æŽ‰ï¼ˆå’Œã€Œ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-settings(5) man page 以檢視所有的 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] :: å°å‡ºå…§å®¹ï¼ˆè¨­å®šã€é€£ç·šï¼‰çš„值\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 "連線設定檔已經從å¦ä¸€å€‹å®¢æˆ¶ç«¯ä¸Šç§»é™¤ã€‚您å¯ä»¥åœ¨ä¸»é¸å–®è¼¸å…¥ã€Œå„²å­˜ã€ä¾†å¾©åŽŸã€‚\n"
+
+#: ../cli/src/connections.c:6192 ../cli/src/connections.c:6615
+#: ../cli/src/connections.c:6673
+#, c-format
+msgid "Enter '%s' value: "
+msgstr "輸入「%sã€çš„值:"
-#. 2
-#: ../cli/src/devices.c:88
+#: ../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 "錯誤:連線尚未儲存。請先輸入「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 "錯誤: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 ""
+">>> 無法使用指令列編輯。請考慮安è£ä¸€é …行列編輯函å¼åº«ï¼Œä»¥å•Ÿç”¨é€™é …功能。<<<\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"
+
+#: ../cli/src/devices.c:90
+msgid "PRODUCT"
+msgstr "PRODUCT"
+
+#: ../cli/src/devices.c:91
msgid "DRIVER"
msgstr "DRIVER"
-#. 3
-#: ../cli/src/devices.c:89
+#: ../cli/src/devices.c:92
+msgid "DRIVER-VERSION"
+msgstr "DRIVER-VERSION"
+
+#: ../cli/src/devices.c:93
+msgid "FIRMWARE-VERSION"
+msgstr "FIRMWARE-VERSION"
+
+#: ../cli/src/devices.c:94
msgid "HWADDR"
msgstr "HWADDR"
-#. 0
+#: ../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"
+
+#: ../cli/src/devices.c:98
+msgid "UDI"
+msgstr "UDI"
+
#: ../cli/src/devices.c:99
+msgid "IP-IFACE"
+msgstr "IP-IFACE"
+
+#: ../cli/src/devices.c:100
+msgid "NM-MANAGED"
+msgstr "NM-MANAGED"
+
+#: ../cli/src/devices.c:102
+msgid "FIRMWARE-MISSING"
+msgstr "FIRMWARE-MISSING"
+
+#: ../cli/src/devices.c:115
+msgid "AVAILABLE-CONNECTION-PATHS"
+msgstr "AVAILABLE-CONNECTION-PATHS"
+
+#: ../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:100
+#: ../cli/src/devices.c:126
msgid "SPEED"
msgstr "SPEED"
-#. 0
-#: ../cli/src/devices.c:109
+#: ../cli/src/devices.c:135
msgid "CARRIER"
msgstr "CARRIER"
-#. 0
-#: ../cli/src/devices.c:119
+#: ../cli/src/devices.c:144 ../cli/src/devices.c:563
msgid "WEP"
msgstr "WEP"
-#. 1
-#: ../cli/src/devices.c:120
+#: ../cli/src/devices.c:145
msgid "WPA"
msgstr "WPA"
-#. 2
-#: ../cli/src/devices.c:121
+#: ../cli/src/devices.c:146 ../cli/src/devices.c:571
msgid "WPA2"
msgstr "WPA2"
-#. 3
-#: ../cli/src/devices.c:122
+#: ../cli/src/devices.c:147
msgid "TKIP"
msgstr "TKIP"
-#. 4
-#: ../cli/src/devices.c:123
+#: ../cli/src/devices.c:148
msgid "CCMP"
msgstr "CCMP"
-#. 0
-#: ../cli/src/devices.c:132
-msgid "ADDRESS"
-msgstr "ADDRESS"
+#: ../cli/src/devices.c:149 ../cli/src/devices.c:239
+msgid "AP"
+msgstr "AP"
-#. 1
-#: ../cli/src/devices.c:133
-msgid "PREFIX"
-msgstr "PREFIX"
+#: ../cli/src/devices.c:150
+msgid "ADHOC"
+msgstr "ADHOC"
-#. 2
-#: ../cli/src/devices.c:134
-msgid "GATEWAY"
-msgstr "GATEWAY"
+#: ../cli/src/devices.c:159
+msgid "CTR-FREQ"
+msgstr "CTR-FREQ"
-#. 0
-#: ../cli/src/devices.c:143
-msgid "DNS"
-msgstr "DNS"
+#: ../cli/src/devices.c:160
+msgid "RSSI"
+msgstr "RSSI"
+
+#: ../cli/src/devices.c:161
+msgid "CINR"
+msgstr "CINR"
+
+#: ../cli/src/devices.c:162
+msgid "TX-POW"
+msgstr "TX-POW"
-#. 0
-#: ../cli/src/devices.c:153
+#: ../cli/src/devices.c:163
+msgid "BSID"
+msgstr "BSID"
+
+#: ../cli/src/devices.c:172 ../tui/nmt-page-wifi.c:221
msgid "SSID"
msgstr "SSID"
-#. 1
-#: ../cli/src/devices.c:154
+#: ../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:155
+#: ../cli/src/devices.c:175
msgid "MODE"
msgstr "MODE"
-#. 3
-#: ../cli/src/devices.c:156
+#: ../cli/src/devices.c:176
+msgid "CHAN"
+msgstr "CHAN"
+
+#: ../cli/src/devices.c:177
msgid "FREQ"
msgstr "FREQ"
-#. 4
-#: ../cli/src/devices.c:157
+#: ../cli/src/devices.c:178
msgid "RATE"
msgstr "RATE"
-#. 5
-#: ../cli/src/devices.c:158
+#: ../cli/src/devices.c:179 ../cli/src/devices.c:199
msgid "SIGNAL"
msgstr "SIGNAL"
-#. 6
-#: ../cli/src/devices.c:159
+#: ../cli/src/devices.c:180
+msgid "BARS"
+msgstr "BARS"
+
+#: ../cli/src/devices.c:181
msgid "SECURITY"
msgstr "SECURITY"
-#. 7
-#: ../cli/src/devices.c:160
+#: ../cli/src/devices.c:182
msgid "WPA-FLAGS"
msgstr "WPA-FLAGS"
-#. 8
-#: ../cli/src/devices.c:161
+#: ../cli/src/devices.c:183
msgid "RSN-FLAGS"
msgstr "RSN-FLAGS"
-#. 10
-#: ../cli/src/devices.c:163
+#: ../cli/src/devices.c:185 ../cli/src/devices.c:202
msgid "ACTIVE"
msgstr "ACTIVE"
#: ../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"
+
+#: ../cli/src/devices.c:222
+msgid "ID"
+msgstr "ID"
+
+#: ../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"
+"Usage: nmcli device { COMMAND | help }\n"
+"\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>] [hwaddr <hwaddr>]]\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"
+" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
msgstr ""
-"Usage: nmcli dev { COMMAND | help }\n"
+"Usage: nmcli device { COMMAND | help }\n"
+"\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>] [hwaddr <hwaddr>]]\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"
+" wimax [list [ifname <ifname>] [nsp <name>]]\n"
"\n"
-#: ../cli/src/devices.c:206
-msgid "unmanaged"
-msgstr "ä¸å—管ç†çš„"
-
-#: ../cli/src/devices.c:208
-msgid "unavailable"
-msgstr "無法使用"
-
-#: ../cli/src/devices.c:210 ../cli/src/network-manager.c:89
-msgid "disconnected"
-msgstr "離線"
-
-#: ../cli/src/devices.c:212
-msgid "connecting (prepare)"
-msgstr "連線中(準備)"
-
-#: ../cli/src/devices.c:214
-msgid "connecting (configuring)"
-msgstr "連線中(é…置中)"
+#: ../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 ""
+"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"
-#: ../cli/src/devices.c:216
-msgid "connecting (need authentication)"
-msgstr "連線中(需è¦èº«ä»½èªè­‰ï¼‰"
+#: ../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 ""
+"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"
-#: ../cli/src/devices.c:218
-msgid "connecting (getting IP configuration)"
-msgstr "連線中(正在å–å¾— IP é…置)"
+#: ../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 ""
+"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"
-#: ../cli/src/devices.c:220 ../cli/src/network-manager.c:87
-msgid "connected"
-msgstr "已連線"
+#: ../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 ""
+"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"
-#: ../cli/src/devices.c:222
-msgid "connection failed"
-msgstr "連線失敗"
+#: ../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 ""
+"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"
-#: ../cli/src/devices.c:245 ../cli/src/devices.c:380
-msgid "Unknown"
-msgstr "ä¸æ˜Ž"
+#: ../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 ""
+"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"
-#: ../cli/src/devices.c:277
+#: ../cli/src/devices.c:480
msgid "(none)"
msgstr "(none)"
-#: ../cli/src/devices.c:302
-#, c-format
-msgid "%s: error converting IP4 address 0x%X"
-msgstr "%sï¼šè½‰æ› IP4 ä½å€ 0x%x 時發生錯誤"
-
-#: ../cli/src/devices.c:349
+#: ../cli/src/devices.c:547
#, c-format
msgid "%u MHz"
msgstr "%u MHz"
-#: ../cli/src/devices.c:350
+#: ../cli/src/devices.c:548
#, c-format
msgid "%u Mbit/s"
msgstr "%u Mbit/s"
-#: ../cli/src/devices.c:359
-msgid "Encrypted: "
-msgstr "已加密:"
+#: ../cli/src/devices.c:567
+msgid "WPA1"
+msgstr "WPA1"
-#: ../cli/src/devices.c:364
-msgid "WEP "
-msgstr "WEP "
+#: ../cli/src/devices.c:576
+msgid "802.1X"
+msgstr "802.1X"
-#: ../cli/src/devices.c:366
-msgid "WPA "
-msgstr "WPA "
-
-#: ../cli/src/devices.c:368
-msgid "WPA2 "
-msgstr "WPA2 "
-
-#: ../cli/src/devices.c:371
-msgid "Enterprise "
-msgstr "ä¼æ¥­ç‰ˆ "
-
-#: ../cli/src/devices.c:380
+#: ../cli/src/devices.c:592
msgid "Ad-Hoc"
-msgstr "點å°é»ž"
+msgstr "Ad-Hoc"
-#: ../cli/src/devices.c:380
-msgid "Infrastructure"
-msgstr "基礎建設"
+#: ../cli/src/devices.c:593
+msgid "Infra"
+msgstr "Infra"
-#: ../cli/src/devices.c:442
-#, c-format
-msgid "Error: 'dev list': %s"
-msgstr "錯誤:'dev list': %s"
+#: ../cli/src/devices.c:625
+msgid "Home"
+msgstr "Home"
-#: ../cli/src/devices.c:444
-#, c-format
-msgid "Error: 'dev list': %s; allowed fields: %s"
-msgstr "錯誤:'dev list': %s; å…許的欄ä½ç‚ºï¼š%s"
+#: ../cli/src/devices.c:628
+msgid "Partner"
+msgstr "Partner"
+
+#: ../cli/src/devices.c:631
+msgid "Roaming"
+msgstr "Roaming"
-#: ../cli/src/devices.c:453
+#: ../cli/src/devices.c:725
msgid "Device details"
msgstr "è£ç½®è©³ç´°è³‡è¨Š"
-#: ../cli/src/devices.c:483 ../cli/src/devices.c:827
+#: ../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:484
-msgid "unknown)"
-msgstr "ä¸æ˜Ž)"
-
-#: ../cli/src/devices.c:510
+#: ../cli/src/devices.c:827
#, c-format
msgid "%u Mb/s"
msgstr "%u Mb/s"
-#. Print header
-#. "WIRED-PROPERTIES"
-#: ../cli/src/devices.c:583
+#: ../cli/src/devices.c:913
msgid "on"
msgstr "é–‹"
-#: ../cli/src/devices.c:583
+#: ../cli/src/devices.c:913
msgid "off"
msgstr "關"
-#: ../cli/src/devices.c:710
-#, c-format
-msgid "Error: 'dev status': %s"
-msgstr "錯誤:'dev status': %s"
-
-#: ../cli/src/devices.c:712
+#: ../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:719
+#: ../cli/src/devices.c:1206
msgid "Status of devices"
msgstr "è£ç½®çš„狀態"
-#: ../cli/src/devices.c:747
+#: ../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:776 ../cli/src/devices.c:915 ../cli/src/devices.c:1035
+#: ../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:799
+#: ../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:824
+#: ../cli/src/devices.c:1471
#, c-format
msgid "Error: Device '%s' (%s) disconnecting failed: %s"
msgstr "錯誤:è£ç½®ã€Œ%sã€ï¼ˆ%s)斷線失敗:%s"
-#: ../cli/src/devices.c:832
+#: ../cli/src/devices.c:1485
+#, c-format
+msgid "Device '%s' has been disconnected.\n"
+msgstr "è£ç½®ã€Œ%sã€å·²æ–·ç·šã€‚\n"
+
+#: ../cli/src/devices.c:1628
+msgid "Wi-Fi scan list"
+msgstr "Wi-Fi 掃æ清單"
+
+#: ../cli/src/devices.c:1666
+#, c-format
+msgid "Error: 'device wifi': %s"
+msgstr "錯誤:「device wifiã€ï¼š%s"
+
+#: ../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:1743 ../cli/src/devices.c:2131
+#: ../cli/src/devices.c:2293
+#, c-format
+msgid "Error: Device '%s' is not a Wi-Fi device."
+msgstr "錯誤:è£ç½®ã€Œ%sã€ä¸æ˜¯å€‹ Wi-Fi è£ç½®ã€‚"
+
+#: ../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:1829
+#, c-format
+msgid "Error: Connection activation failed: (%d) %s."
+msgstr "錯誤:連線啟用失敗:(%d) %s。"
+
+#: ../cli/src/devices.c:1854
+#, c-format
+msgid "Error: Failed to add/activate new connection: (%d) %s"
+msgstr "錯誤:新增/啟用新連線失敗:(%d) %s"
+
+#: ../cli/src/devices.c:1862
+#, c-format
+msgid "Error: Failed to add/activate new connection: Unknown error"
+msgstr "錯誤:新增/啟用新連線失敗:ä¸æ˜Žçš„錯誤"
+
+#: ../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:2042
+#, c-format
+msgid "Error: bssid argument value '%s' is not a valid BSSID."
+msgstr "錯誤:bssid 引數值「%sã€ä¸æ˜¯å€‹æœ‰æ•ˆçš„ BSSID。"
+
+#: ../cli/src/devices.c:2066
+#, 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:2086
+#, c-format
+msgid "Error: %s: %s."
+msgstr "錯誤:%s:%s。"
+
+#: ../cli/src/devices.c:2101
#, c-format
-msgid "Device state: %d (%s)\n"
-msgstr "è£ç½®ç‹€æ…‹ï¼š%d (%s)\n"
+msgid "Error: BSSID to connect to (%s) differs from bssid argument (%s)."
+msgstr "錯誤:欲連上的 BSSID(%s)與 bssid 引數(%s)ä¸åŒã€‚"
-#: ../cli/src/devices.c:896
+#: ../cli/src/devices.c:2107
#, c-format
-msgid "Error: iface has to be specified."
-msgstr "錯誤:必須指定 iface。"
+msgid "Error: Parameter '%s' is neither SSID nor BSSID."
+msgstr "錯誤:åƒæ•¸ã€Œ%sã€æ—¢ä¸æ˜¯ SSID 也ä¸æ˜¯ BSSID。"
-#: ../cli/src/devices.c:1011
+#: ../cli/src/devices.c:2133 ../cli/src/devices.c:2295
#, c-format
-msgid "Error: 'dev wifi': %s"
-msgstr "錯誤:'dev wifi':%s"
+msgid "Error: No Wi-Fi device found."
+msgstr "錯誤:找ä¸åˆ° Wi-Fi è£ç½®ã€‚"
-#: ../cli/src/devices.c:1013
+#: ../cli/src/devices.c:2151
#, c-format
-msgid "Error: 'dev wifi': %s; allowed fields: %s"
-msgstr "錯誤:'dev wifi':%s; å…許的欄ä½ç‚ºï¼š%s"
+msgid "Error: No network with SSID '%s' found."
+msgstr "錯誤:找ä¸åˆ° SSID 爲「%sã€çš„網路。"
-#: ../cli/src/devices.c:1020
-msgid "WiFi scan list"
-msgstr "WiFi 掃æ清單"
+#: ../cli/src/devices.c:2153
+#, c-format
+msgid "Error: No access point with BSSID '%s' found."
+msgstr "錯誤:找ä¸åˆ° BSSID 爲「%sã€çš„å­˜å–點。"
+
+#: ../cli/src/devices.c:2192
+msgid "Password: "
+msgstr "密碼:"
+
+#: ../cli/src/devices.c:2321
+#, c-format
+msgid "Error: 'device wifi' command '%s' is not valid."
+msgstr "錯誤:「device wifiã€æŒ‡ä»¤ã€Œ%sã€ç„¡æ•ˆã€‚"
-#: ../cli/src/devices.c:1055 ../cli/src/devices.c:1109
+#: ../cli/src/devices.c:2368
+msgid "WiMAX NSP list"
+msgstr "WiMAX NSP 清單"
+
+#: ../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: Access point with hwaddr '%s' not found."
-msgstr "錯誤:找ä¸åˆ°æ“有 hwaddr「%sã€çš„å­˜å–點。"
+msgid "Error: NSP with name '%s' not found."
+msgstr "錯誤:找ä¸åˆ°å稱爲「%sã€çš„ NSP。"
-#: ../cli/src/devices.c:1072
+#: ../cli/src/devices.c:2472
#, c-format
-msgid "Error: Device '%s' is not a WiFi device."
-msgstr "錯誤:「%sã€ä¸æ˜¯ WiFi è£ç½®ã€‚"
+msgid "Error: Device '%s' is not a WiMAX device."
+msgstr "錯誤:è£ç½®ã€Œ%sã€ä¸æ˜¯å€‹ WiMAX è£ç½®ã€‚"
-#: ../cli/src/devices.c:1136
+#: ../cli/src/devices.c:2510
#, c-format
-msgid "Error: 'dev wifi' command '%s' is not valid."
-msgstr "錯誤:「dev wifiã€æŒ‡ä»¤ã€Œ%sã€ä¸åˆä¹Žè¦å®šã€‚"
+msgid "Error: Access point with nsp '%s' not found."
+msgstr "錯誤:找ä¸åˆ° nsp 爲「%sã€çš„å­˜å–點。"
-#: ../cli/src/devices.c:1183
+#: ../cli/src/devices.c:2542
+#, c-format
+msgid "Error: 'device wimax' command '%s' is not valid."
+msgstr "錯誤:「device wimaxã€æŒ‡ä»¤ã€Œ%sã€ç„¡æ•ˆã€‚"
+
+#: ../cli/src/devices.c:2621
#, c-format
msgid "Error: 'dev' command '%s' is not valid."
msgstr "錯誤:「devã€æŒ‡ä»¤ã€Œ%sã€ä¸åˆä¹Žè¦å®šã€‚"
-#: ../cli/src/network-manager.c:35
+#: ../cli/src/network-manager.c:37
msgid "RUNNING"
msgstr "RUNNING"
-#. 1
-#: ../cli/src/network-manager.c:37
-msgid "WIFI-HARDWARE"
-msgstr "WIFI-HARDWARE"
-
-#. 2
#: ../cli/src/network-manager.c:38
+msgid "VERSION"
+msgstr "VERSION"
+
+#: ../cli/src/network-manager.c:40
+msgid "STARTUP"
+msgstr "STARTUP"
+
+#: ../cli/src/network-manager.c:41
+msgid "CONNECTIVITY"
+msgstr "CONNECTIVITY"
+
+#: ../cli/src/network-manager.c:42
+msgid "NETWORKING"
+msgstr "NETWORKING"
+
+#: ../cli/src/network-manager.c:43
+msgid "WIFI-HW"
+msgstr "WIFI-HW"
+
+#: ../cli/src/network-manager.c:44
msgid "WIFI"
msgstr "WIFI-HARDWARE"
-#. 3
-#: ../cli/src/network-manager.c:39
-msgid "WWAN-HARDWARE"
-msgstr "WWAN-HARDWARE"
+#: ../cli/src/network-manager.c:45
+msgid "WWAN-HW"
+msgstr "WWAN-HW"
-#. 4
-#: ../cli/src/network-manager.c:40
+#: ../cli/src/network-manager.c:46
msgid "WWAN"
msgstr "WWAN"
-#: ../cli/src/network-manager.c:62
+#: ../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:70
+msgid "PERMISSION"
+msgstr "PERMISSION"
+
+#: ../cli/src/network-manager.c:71
+msgid "VALUE"
+msgstr "VALUE"
+
+#: ../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"
+"Usage: nmcli general { COMMAND | help }\n"
"\n"
-" COMMAND := { status | sleep | wakeup | wifi | wwan }\n"
+"COMMAND := { status | hostname | permissions | logging }\n"
"\n"
" status\n"
-" sleep\n"
-" wakeup\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
+"\n"
+" hostname [<hostname>]\n"
+"\n"
+" permissions\n"
+"\n"
+" logging [level <log level>] [domains <log domains>]\n"
"\n"
msgstr ""
-"Usage: nmcli nm { COMMAND | help }\n"
+"Usage: nmcli general { COMMAND | help }\n"
"\n"
-" COMMAND := { status | sleep | wakeup | wifi | wwan }\n"
+"COMMAND := { status | hostname | permissions | logging }\n"
"\n"
" status\n"
-" sleep\n"
-" wakeup\n"
-" wifi [on|off]\n"
-" wwan [on|off]\n"
+"\n"
+" hostname [<hostname>]\n"
+"\n"
+" permissions\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 ""
+"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"
-#: ../cli/src/network-manager.c:83
+#: ../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 ""
+"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"
+
+#: ../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 ""
+"Usage: nmcli general permissions { help }\n"
+"\n"
+"Show caller permissions for authenticated operations.\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 ""
+"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"
+
+#: ../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 ""
+"Usage: 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 "Usage: nmcli networking on { help }\n"
+"\n"
+"Switch networking on.\n"
+"\n"
+
+#: ../cli/src/network-manager.c:173
+#, c-format
+msgid "Usage: nmcli networking off { help }\n"
+"\n"
+"Switch networking off.\n"
+"\n"
+msgstr "Usage: nmcli networking off { help }\n"
+"\n"
+"Switch networking off.\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 ""
+"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"
+
+#: ../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 ""
+"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: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 ""
+"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"
+
+#: ../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 ""
+"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"
+
+#: ../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 ""
+"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"
+
+#: ../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 ""
+"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"
+
+#: ../cli/src/network-manager.c:264
msgid "asleep"
-msgstr "asleep"
+msgstr "ç¡çœ ä¸­"
-#: ../cli/src/network-manager.c:85
+#: ../cli/src/network-manager.c:266
msgid "connecting"
msgstr "連線中"
-#: ../cli/src/network-manager.c:125
-#, c-format
-msgid "Error: 'nm status': %s"
-msgstr "錯誤:'nm status':%s"
+#: ../cli/src/network-manager.c:268
+msgid "connected (local only)"
+msgstr "已連上(åªæœ‰æœ¬æ©Ÿï¼‰"
-#: ../cli/src/network-manager.c:127
-#, c-format
-msgid "Error: 'nm status': %s; allowed fields: %s"
-msgstr "錯誤:'nm status':%s; å…許的欄ä½ç‚ºï¼š%s"
+#: ../cli/src/network-manager.c:270
+msgid "connected (site only)"
+msgstr "已連上(åªæœ‰ç¶²ç«™ï¼‰"
-#: ../cli/src/network-manager.c:134
-msgid "NetworkManager status"
-msgstr "NetworkManager 狀態"
+#: ../cli/src/network-manager.c:274
+msgid "disconnecting"
+msgstr "正在切斷連線"
+
+#: ../cli/src/network-manager.c:290
+msgid "portal"
+msgstr "å…¥å£ç¶²ç«™"
-#. Print header
-#: ../cli/src/network-manager.c:140 ../cli/src/network-manager.c:141
-#: ../cli/src/network-manager.c:142 ../cli/src/network-manager.c:143
-#: ../cli/src/network-manager.c:211 ../cli/src/network-manager.c:243
+#: ../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: only these fields are allowed: %s"
+msgstr "錯誤:åªå…許這些欄ä½ï¼š%s"
+
+#: ../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:140 ../cli/src/network-manager.c:141
-#: ../cli/src/network-manager.c:142 ../cli/src/network-manager.c:143
-#: ../cli/src/network-manager.c:211 ../cli/src/network-manager.c:243
+#: ../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:148
+#: ../cli/src/network-manager.c:367
+msgid "NetworkManager status"
+msgstr "NetworkManager 狀態"
+
+#: ../cli/src/network-manager.c:372
msgid "running"
msgstr "執行中"
-#: ../cli/src/network-manager.c:148
+#: ../cli/src/network-manager.c:372
msgid "not running"
msgstr "éžåŸ·è¡Œä¸­"
-#: ../cli/src/network-manager.c:201 ../cli/src/network-manager.c:233
+#: ../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:475
+#, c-format
+msgid "Error: 'general permissions': %s"
+msgstr "錯誤:「general permissionsã€ï¼š%s"
+
+#: ../cli/src/network-manager.c:489
+msgid "NetworkManager permissions"
+msgstr "NetworkManager 權é™"
+
+#: ../cli/src/network-manager.c:530
+#, c-format
+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:565
+#, c-format
+msgid "Error: failed to set hostname: (%d) %s"
+msgstr "錯誤:無法設定主機å稱:(%d) %s"
+
+#: ../cli/src/network-manager.c:682
+#, c-format
+msgid "Error: access denied to set logging; %s"
+msgstr "錯誤:設置日誌的存å–被拒絕;%s"
+
+#: ../cli/src/network-manager.c:684
+#, c-format
+msgid "Error: %s"
+msgstr "錯誤:%s"
+
+#: ../cli/src/network-manager.c:692
#, c-format
-msgid "Error: '--fields' value '%s' is not valid here; allowed fields: %s"
-msgstr "錯誤:'--fields' 值 '%s' 在此無效; å…許的欄ä½ç‚ºï¼š%s"
+msgid "Error: 'general' command '%s' is not valid."
+msgstr "錯誤:「generalã€æŒ‡ä»¤ã€Œ%sã€ç„¡æ•ˆã€‚"
-#: ../cli/src/network-manager.c:209
-msgid "WiFi enabled"
-msgstr "WiFi 已啟用"
+#: ../cli/src/network-manager.c:710
+#, c-format
+msgid "Error: '--fields' value '%s' is not valid here (allowed field: %s)"
+msgstr "錯誤:「--fieldsã€å€¼ã€Œ%sã€åœ¨æ­¤ç„¡æ•ˆï¼ˆå…許的欄ä½ï¼š%s)"
-#: ../cli/src/network-manager.c:220
+#: ../cli/src/network-manager.c:735
#, c-format
-msgid "Error: invalid 'wifi' parameter: '%s'."
-msgstr "錯誤:ä¸åˆä¹Žè¦å®šçš„「wifiã€åƒæ•¸ï¼š%s。"
+msgid "Error: invalid '%s' argument: '%s' (use on/off)."
+msgstr "錯誤:無效的「%sã€å¼•æ•¸ï¼šã€Œ%sã€ï¼ˆè«‹ä½¿ç”¨ on/off)。"
+
+#: ../cli/src/network-manager.c:746
+msgid "Connectivity"
+msgstr "連線性"
-#: ../cli/src/network-manager.c:241
-msgid "WWAN enabled"
-msgstr "WWAN 已啟用"
+#: ../cli/src/network-manager.c:758
+msgid "Networking"
+msgstr "網路作業"
+
+#: ../cli/src/network-manager.c:783
+#, c-format
+msgid "Error: 'networking connectivity' command '%s' is not valid."
+msgstr "錯誤:「network connectivityã€æŒ‡ä»¤ã€Œ%sã€ç„¡æ•ˆã€‚"
-#: ../cli/src/network-manager.c:252
+#: ../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:825 ../cli/src/network-manager.c:845
+msgid "Radio switches"
+msgstr "Radio 開關"
+
+#: ../cli/src/network-manager.c:863
+msgid "Wi-Fi radio switch"
+msgstr "Wi-fi radio 開關"
+
+#: ../cli/src/network-manager.c:879
+msgid "WWAN radio switch"
+msgstr "WWAN radio 開關"
+
+#: ../cli/src/network-manager.c:896
+msgid "WiMAX radio switch"
+msgstr "WiMAX radio 開關"
-#: ../cli/src/network-manager.c:263
+#: ../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:69
+#: ../cli/src/nmcli.c:78
#, c-format
msgid ""
"Usage: %s [OPTIONS] OBJECT { COMMAND | help }\n"
@@ -976,16 +3878,23 @@ 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 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"
@@ -994,649 +3903,2665 @@ msgstr ""
" -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 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:113
+#: ../cli/src/nmcli.c:132
#, c-format
msgid "Error: Object '%s' is unknown, try 'nmcli help'."
msgstr "錯誤:物件 '%s' ä¸æ˜Žï¼Œè«‹å˜—試 'nmcli help'。"
-#: ../cli/src/nmcli.c:143
+#: ../cli/src/nmcli.c:162
#, c-format
msgid "Error: Option '--terse' is specified the second time."
msgstr "錯誤:é¸é … '--terse' 已指定了第二次。"
-#: ../cli/src/nmcli.c:148
+#: ../cli/src/nmcli.c:167
#, c-format
msgid "Error: Option '--terse' is mutually exclusive with '--pretty'."
msgstr "錯誤:é¸é … '--terse' å’Œ '--pretty' 是互斥的。"
-#: ../cli/src/nmcli.c:156
+#: ../cli/src/nmcli.c:175
#, c-format
msgid "Error: Option '--pretty' is specified the second time."
msgstr "錯誤:é¸é … '--pretty' 已指定了第二次。"
-#: ../cli/src/nmcli.c:161
+#: ../cli/src/nmcli.c:180
#, c-format
msgid "Error: Option '--pretty' is mutually exclusive with '--terse'."
msgstr "錯誤:é¸é … '--pretty' å’Œ '--terse' 是互斥的。"
-#: ../cli/src/nmcli.c:171 ../cli/src/nmcli.c:187
+#: ../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:180 ../cli/src/nmcli.c:196
+#: ../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:203
+#: ../cli/src/nmcli.c:222
#, c-format
msgid "Error: fields for '%s' options are missing."
msgstr "錯誤:找ä¸åˆ° '%s' é¸é …的欄ä½ã€‚"
-#: ../cli/src/nmcli.c:209
+#: ../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:215
+#: ../cli/src/nmcli.c:253
#, c-format
msgid "Error: Option '%s' is unknown, try 'nmcli -help'."
msgstr "錯誤:é¸é … '%s' ä¸æ˜Žï¼Œè«‹åšè©¦ 'nmcli -help'。"
-#: ../cli/src/nmcli.c:234
+#: ../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:259
+#: ../cli/src/nmcli.c:338 ../test/nm-online.c:149
#, c-format
-msgid "Error: Could not connect to NetworkManager."
-msgstr "錯誤:無法連上 NetworkManager。"
+msgid "Error: Could not create NMClient object."
+msgstr "錯誤:無法建立 NMClient 物件。"
-#: ../cli/src/nmcli.c:275
+#: ../cli/src/nmcli.c:354
msgid "Success"
msgstr "æˆåŠŸ"
-#: ../cli/src/settings.c:407
+#: ../cli/src/settings.c:666
#, c-format
msgid "%d (hex-ascii-key)"
msgstr "%d(å六進ä½çš„ ascii-key)"
-#: ../cli/src/settings.c:409
+#: ../cli/src/settings.c:668
#, c-format
msgid "%d (104/128-bit passphrase)"
msgstr "%d(104/128 ä½å…ƒå¯†ç¢¼ï¼‰"
-#: ../cli/src/settings.c:412
+#: ../cli/src/settings.c:671 ../cli/src/settings.c:799
#, c-format
msgid "%d (unknown)"
msgstr "%d(ä¸æ˜Žï¼‰"
-#: ../cli/src/settings.c:438
+#: ../cli/src/settings.c:697
msgid "0 (unknown)"
msgstr "0(ä¸æ˜Žï¼‰"
-#: ../cli/src/settings.c:444
+#: ../cli/src/settings.c:703
msgid "any, "
msgstr "任何,"
-#: ../cli/src/settings.c:446
+#: ../cli/src/settings.c:705
msgid "900 MHz, "
msgstr "900 MHz, "
-#: ../cli/src/settings.c:448
+#: ../cli/src/settings.c:707
msgid "1800 MHz, "
msgstr "1800 MHz, "
-#: ../cli/src/settings.c:450
+#: ../cli/src/settings.c:709
msgid "1900 MHz, "
msgstr "1900 MHz, "
-#: ../cli/src/settings.c:452
+#: ../cli/src/settings.c:711
msgid "850 MHz, "
msgstr "850 MHz, "
-#: ../cli/src/settings.c:454
+#: ../cli/src/settings.c:713
msgid "WCDMA 3GPP UMTS 2100 MHz, "
msgstr "WCDMA 3GPP UMTS 2100 MHz, "
-#: ../cli/src/settings.c:456
+#: ../cli/src/settings.c:715
msgid "WCDMA 3GPP UMTS 1800 MHz, "
msgstr "WCDMA 3GPP UMTS 1800 MHz, "
-#: ../cli/src/settings.c:458
+#: ../cli/src/settings.c:717
msgid "WCDMA 3GPP UMTS 1700/2100 MHz, "
msgstr "WCDMA 3GPP UMTS 1700/2100 MHz, "
-#: ../cli/src/settings.c:460
+#: ../cli/src/settings.c:719
msgid "WCDMA 3GPP UMTS 800 MHz, "
msgstr "WCDMA 3GPP UMTS 800 MHz, "
-#: ../cli/src/settings.c:462
+#: ../cli/src/settings.c:721
msgid "WCDMA 3GPP UMTS 850 MHz, "
msgstr "WCDMA 3GPP UMTS 850 MHz, "
-#: ../cli/src/settings.c:464
+#: ../cli/src/settings.c:723
msgid "WCDMA 3GPP UMTS 900 MHz, "
msgstr "WCDMA 3GPP UMTS 900 MHz, "
-#: ../cli/src/settings.c:466
+#: ../cli/src/settings.c:725
msgid "WCDMA 3GPP UMTS 1700 MHz, "
msgstr "WCDMA 3GPP UMTS 1700 MHz, "
-#: ../cli/src/settings.c:546 ../cli/src/settings.c:708
+#: ../cli/src/settings.c:727
+msgid "WCDMA 3GPP UMTS 1900 MHz, "
+msgstr "WCDMA 3GPP UMTS 1900 MHz, "
+
+#: ../cli/src/settings.c:729
+msgid "WCDMA 3GPP UMTS 2600 MHz, "
+msgstr "WCDMA 3GPP UMTS 2600 MHz, "
+
+#: ../cli/src/settings.c:747
+msgid "0 (NONE)"
+msgstr "0 (NONE)"
+
+#: ../cli/src/settings.c:753
+msgid "REORDER_HEADERS, "
+msgstr "REORDER_HEADERS, "
+
+#: ../cli/src/settings.c:755
+msgid "GVRP, "
+msgstr "GVRP, "
+
+#: ../cli/src/settings.c:757
+msgid "LOOSE_BINDING, "
+msgstr "LOOSE_BINDING, "
+
+#: ../cli/src/settings.c:793
+#, c-format
+msgid "%d (disabled)"
+msgstr "%d (å·²åœç”¨)"
+
+#: ../cli/src/settings.c:795
+#, c-format
+msgid "%d (enabled, prefer public IP)"
+msgstr "%d (已啟用,建議使用公用 IP)"
+
+#: ../cli/src/settings.c:797
+#, c-format
+msgid "%d (enabled, prefer temporary IP)"
+msgstr "%d (已啟用,建議使用暫時性 IP)"
+
+#: ../cli/src/settings.c:809
+msgid "0 (none)"
+msgstr "0 (none)"
+
+#: ../cli/src/settings.c:815
+msgid "agent-owned, "
+msgstr "agent-owned, "
+
+#: ../cli/src/settings.c:817
+msgid "not saved, "
+msgstr "not saved, "
+
+#: ../cli/src/settings.c:819
+msgid "not required, "
+msgstr "not required, "
+
+#: ../cli/src/settings.c:1124
+msgid "0 (disabled)"
+msgstr "0(已åœç”¨ï¼‰"
+
+#: ../cli/src/settings.c:1130
+msgid "enabled, "
+msgstr "enabled, "
+
+#: ../cli/src/settings.c:1132
+msgid "advertise, "
+msgstr "advertise, "
+
+#: ../cli/src/settings.c:1134
+msgid "willing, "
+msgstr "willing, "
+
+#: ../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 "自動"
+msgstr "auto"
+
+#: ../cli/src/settings.c:1283
+msgid "default"
+msgstr "default"
-#: ../cli/src/settings.c:704 ../cli/src/settings.c:707 ../cli/src/utils.c:172
-msgid "not set"
-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/utils.c:124
+#: ../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ã€ä¸æ˜¯å€‹æœ‰æ•ˆçš„ master;請使用 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 ""
+"輸入一列 bonding é¸é …,格å¼çˆ²ï¼š\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"
+"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"
+
+#: ../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"
+"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"
+
+#: ../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"
+"範例: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 key 為「%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 key 的類型。接å—的值為: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ã€ä¸æ˜¯æœ‰æ•ˆçš„ DCP 應用程å¼å„ªå…ˆé †åº"
+
+#: ../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 property description]"
+
+#: ../cli/src/settings.c:5797
+msgid "[nmcli specific description]"
+msgstr "[nmcli specific description]"
+
+#: ../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:217
+#, c-format
+msgid "Error converting IP6 address '%s' to text form"
+msgstr "å°‡ IP6 ä½å€ã€Œ%sã€è½‰æ›ç‚ºæ–‡å­—æ ¼å¼æ™‚發生了錯誤"
+
+#: ../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:127
+#: ../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:146
-#, c-format
+#: ../cli/src/utils.c:747
msgid "Option '--terse' requires specifying '--fields'"
msgstr "é¸é … '--terse' 需指定 '--fields'"
-#: ../cli/src/utils.c:150
+#: ../cli/src/utils.c:751
#, c-format
msgid "Option '--terse' requires specific '--fields' option values , not '%s'"
msgstr "é¸é … '--terse' 需è¦ç‰¹å®šçš„ '--fields' é¸é …值,而ä¸æ˜¯ '%s'"
-#: ../libnm-util/crypto.c:120
+#: ../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"
+
+#: ../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 來強制執行,ä¸éŽçµæžœç„¡æ³•é æœŸã€‚"
+
+#: ../libnm-util/crypto.c:133
#, c-format
msgid "PEM key file had no end tag '%s'."
msgstr "PEM 金鑰檔案沒有çµæŸæ¨™ç±¤ã€Œ%sã€ã€‚"
-#: ../libnm-util/crypto.c:130
+#: ../libnm-util/crypto.c:146
#, c-format
msgid "Doesn't look like a PEM private key file."
msgstr "看起來ä¸åƒæ˜¯ PEM ç§å¯†é‡‘鑰檔案。"
-#: ../libnm-util/crypto.c:138
-#, c-format
-msgid "Not enough memory to store PEM file data."
-msgstr "沒有足夠的記憶體å¯å„²å­˜ PEM 檔案資料。"
-
-#: ../libnm-util/crypto.c:154
+#: ../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:162
+#: ../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:172
+#: ../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:183
+#: ../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:190
+#: ../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:203
+#: ../libnm-util/crypto.c:212
#, c-format
msgid "Malformed PEM file: unknown private key cipher '%s'."
msgstr "æ ¼å¼ä¸è‰¯çš„ PEM 檔案:ä¸æ˜Žçš„ç§å¯†é‡‘鑰加密器「%sã€ã€‚"
-#: ../libnm-util/crypto.c:222
+#: ../libnm-util/crypto.c:231
#, c-format
msgid "Could not decode private key."
msgstr "無法解碼ç§å¯†é‡‘鑰。"
-#: ../libnm-util/crypto.c:267
-#, c-format
-msgid "PEM certificate '%s' had no end tag '%s'."
-msgstr "PEM 憑證「%sã€æ²’有çµæŸæ¨™ç±¤ã€Œ%sã€ã€‚"
-
-#: ../libnm-util/crypto.c:277
-#, c-format
-msgid "Failed to decode certificate."
-msgstr "解碼憑證失敗。"
+#: ../libnm-util/crypto.c:283
+msgid "Failed to find expected PKCS#8 start tag."
+msgstr "找ä¸åˆ°é æœŸçš„ PKCS#8 起始標籤。"
-#: ../libnm-util/crypto.c:286
+#: ../libnm-util/crypto.c:291
#, c-format
-msgid "Not enough memory to store certificate data."
-msgstr "沒有足夠的記憶體å¯å„²å­˜æ†‘證資料。"
+msgid "Failed to find expected PKCS#8 end tag '%s'."
+msgstr "找ä¸åˆ°é æœŸçš„ PKCS#8 çµæŸæ¨™ç±¤ã€Œ%sã€ã€‚"
-#: ../libnm-util/crypto.c:294
-#, c-format
-msgid "Not enough memory to store file data."
-msgstr "沒有足夠的記憶體å¯å„²å­˜æª”案資料。"
+#: ../libnm-util/crypto.c:310
+msgid "Failed to decode PKCS#8 private key."
+msgstr "無法將 PKCS#8 ç§å¯†é‡‘鑰解碼。"
-#: ../libnm-util/crypto.c:324
+#: ../libnm-util/crypto.c:352
#, c-format
msgid "IV must be an even number of bytes in length."
msgstr "IV 的長度必須為å¶æ•¸ä½å…ƒçµ„。"
-#: ../libnm-util/crypto.c:333
-#, c-format
-msgid "Not enough memory to store the IV."
-msgstr "沒有足夠的記憶體å¯å„²å­˜ IV。"
-
-#: ../libnm-util/crypto.c:344
+#: ../libnm-util/crypto.c:366
#, c-format
msgid "IV contains non-hexadecimal digits."
msgstr "IV 包å«éžå六進ä½çš„數字。"
-#: ../libnm-util/crypto.c:382 ../libnm-util/crypto_gnutls.c:148
-#: ../libnm-util/crypto_gnutls.c:266 ../libnm-util/crypto_nss.c:171
-#: ../libnm-util/crypto_nss.c:336
+#: ../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:391
-#, c-format
-msgid "Not enough memory to decrypt private key."
-msgstr "沒有足夠的記憶體å¯è§£å¯†ç§å¯†é‡‘鑰。"
-
#: ../libnm-util/crypto.c:511
#, c-format
msgid "Unable to determine private key type."
msgstr "無法決定ç§å¯†é‡‘鑰的類型。"
-#: ../libnm-util/crypto.c:530
+#: ../libnm-util/crypto.c:566
#, c-format
-msgid "Not enough memory to store decrypted private key."
-msgstr "沒有足夠的記憶體å¯å„²å­˜è§£å¯†çš„ç§å¯†é‡‘鑰。"
+msgid "PEM certificate had no start tag '%s'."
+msgstr "PEM 憑證沒有起始標籤「%sã€ã€‚"
-#: ../libnm-util/crypto_gnutls.c:49
+#: ../libnm-util/crypto.c:575
+#, c-format
+msgid "PEM certificate had no end tag '%s'."
+msgstr "PEM 憑證沒有çµæŸæ¨™ç±¤ã€Œ%sã€ã€‚"
+
+#: ../libnm-util/crypto.c:593
+#, c-format
+msgid "Failed to decode certificate."
+msgstr "解碼憑證失敗。"
+
+#: ../libnm-util/crypto_gnutls.c:50
msgid "Failed to initialize the crypto engine."
msgstr "åˆå§‹åŒ– crypto 引擎失敗。"
-#: ../libnm-util/crypto_gnutls.c:93
+#: ../libnm-util/crypto_gnutls.c:92
#, c-format
msgid "Failed to initialize the MD5 engine: %s / %s."
msgstr "åˆå§‹åŒ– MD5 引擎失敗: %s / %s。"
-#: ../libnm-util/crypto_gnutls.c:156
+#: ../libnm-util/crypto_gnutls.c:155
#, c-format
msgid "Invalid IV length (must be at least %zd)."
msgstr "ä¸åˆä¹Žè¦å®šçš„ IV 長度(必須至少是 %zd)。"
-#: ../libnm-util/crypto_gnutls.c:165 ../libnm-util/crypto_nss.c:188
-#, c-format
-msgid "Not enough memory for decrypted key buffer."
-msgstr "沒有足夠的記憶體供作解密金鑰緩è¡å€ã€‚"
-
-#: ../libnm-util/crypto_gnutls.c:173
+#: ../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:182
+#: ../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:191
+#: ../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:200
+#: ../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:210 ../libnm-util/crypto_nss.c:267
+#: ../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:221 ../libnm-util/crypto_nss.c:278
+#: ../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:286 ../libnm-util/crypto_nss.c:356
-#, c-format
-msgid "Could not allocate memory for encrypting."
-msgstr "無法分é…記憶體,以供加密。"
-
-#: ../libnm-util/crypto_gnutls.c:294
+#: ../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:303
+#: ../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:313
+#: ../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:322
+#: ../libnm-util/crypto_gnutls.c:309
#, c-format
msgid "Failed to encrypt the data: %s / %s."
msgstr "加密ç§å¯†é‡‘鑰失敗: %s / %s。"
-#: ../libnm-util/crypto_gnutls.c:362
+#: ../libnm-util/crypto_gnutls.c:349
#, c-format
msgid "Error initializing certificate data: %s"
msgstr "åˆå§‹åŒ–憑證資料時發生錯誤:%s"
-#: ../libnm-util/crypto_gnutls.c:384
+#: ../libnm-util/crypto_gnutls.c:371
#, c-format
msgid "Couldn't decode certificate: %s"
msgstr "無法解碼憑證:%s"
-#: ../libnm-util/crypto_gnutls.c:408
+#: ../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:421
+#: ../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:433
+#: ../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:448
+#, c-format
+msgid "Couldn't initialize PKCS#8 decoder: %s"
+msgstr "無法åˆå§‹åŒ– PKCS#8 解碼器:%s"
+
+#: ../libnm-util/crypto_gnutls.c:471
+#, c-format
+msgid "Couldn't decode PKCS#8 file: %s"
+msgstr "無法解碼 PKCS#8 檔案:%s"
+
#: ../libnm-util/crypto_nss.c:56
#, c-format
msgid "Failed to initialize the crypto engine: %d."
msgstr "åˆå§‹åŒ– crypto 引擎失敗: %d。"
-#: ../libnm-util/crypto_nss.c:111
+#: ../libnm-util/crypto_nss.c:107
#, c-format
msgid "Failed to initialize the MD5 context: %d."
msgstr "åˆå§‹åŒ– MD5 本文失敗:%d。"
-#: ../libnm-util/crypto_nss.c:179
+#: ../libnm-util/crypto_nss.c:175
#, c-format
msgid "Invalid IV length (must be at least %d)."
msgstr "ä¸åˆæ–¼è¦å®šçš„ IV 長度(必須至少是 %d)。"
-#: ../libnm-util/crypto_nss.c:196
+#: ../libnm-util/crypto_nss.c:186
#, c-format
msgid "Failed to initialize the decryption cipher slot."
msgstr "åˆå§‹åŒ–解密用的加密器æ’槽失敗。"
-#: ../libnm-util/crypto_nss.c:206
+#: ../libnm-util/crypto_nss.c:196
#, c-format
msgid "Failed to set symmetric key for decryption."
msgstr "設定解密用的å°ç¨±å¼é‡‘鑰失敗。"
-#: ../libnm-util/crypto_nss.c:216
+#: ../libnm-util/crypto_nss.c:206
#, c-format
msgid "Failed to set IV for decryption."
msgstr "設定解密用的 IV 失敗。"
-#: ../libnm-util/crypto_nss.c:224
+#: ../libnm-util/crypto_nss.c:214
#, c-format
msgid "Failed to initialize the decryption context."
msgstr "åˆå§‹åŒ–解密上下文失敗。"
-#: ../libnm-util/crypto_nss.c:237
+#: ../libnm-util/crypto_nss.c:227
#, c-format
msgid "Failed to decrypt the private key: %d."
msgstr "解密ç§å¯†é‡‘鑰失敗:%d。"
-#: ../libnm-util/crypto_nss.c:245
+#: ../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:256
+#: ../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:364
+#: ../libnm-util/crypto_nss.c:348
#, c-format
msgid "Failed to initialize the encryption cipher slot."
msgstr "åˆå§‹åŒ–加密用的加密器æ’槽失敗。"
-#: ../libnm-util/crypto_nss.c:372
+#: ../libnm-util/crypto_nss.c:356
#, c-format
msgid "Failed to set symmetric key for encryption."
msgstr "設定加密用的å°ç¨±å¼é‡‘鑰失敗。"
-#: ../libnm-util/crypto_nss.c:380
+#: ../libnm-util/crypto_nss.c:364
#, c-format
msgid "Failed to set IV for encryption."
msgstr "設定加密用的 IV 失敗。"
-#: ../libnm-util/crypto_nss.c:388
+#: ../libnm-util/crypto_nss.c:372
#, c-format
msgid "Failed to initialize the encryption context."
msgstr "åˆå§‹åŒ–加密本文失敗。"
-#: ../libnm-util/crypto_nss.c:396
+#: ../libnm-util/crypto_nss.c:380
#, c-format
msgid "Failed to encrypt: %d."
msgstr "加密失敗:%d。"
-#: ../libnm-util/crypto_nss.c:404
+#: ../libnm-util/crypto_nss.c:388
#, c-format
msgid "Unexpected amount of data after encrypting."
msgstr "加密後無é æœŸçš„資料é‡ã€‚"
-#: ../libnm-util/crypto_nss.c:447
+#: ../libnm-util/crypto_nss.c:431
#, c-format
msgid "Couldn't decode certificate: %d"
msgstr "無法解碼憑證:%d"
-#: ../libnm-util/crypto_nss.c:482
+#: ../libnm-util/crypto_nss.c:466
#, c-format
msgid "Couldn't convert password to UCS2: %d"
msgstr "無法將密碼轉為 UCS2:%d"
-#: ../libnm-util/crypto_nss.c:510
+#: ../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:519
+#: ../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:528
+#: ../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:557
+#: ../libnm-util/crypto_nss.c:556
msgid "Could not generate random data."
msgstr "無法產生隨機資料。"
-#: ../libnm-util/nm-utils.c:1925
+#: ../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:2035
-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:2047
+#: ../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:2059
+#: ../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-utils.c:2078
+#: ../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 PEM file data."
-msgstr "無法分é…記憶體給 PEM 檔案資料。"
+msgid "'%s' option requires '%s' option to be set"
+msgstr "'%s' é¸é …需è¦å…ˆè¨­å®š '%s' é¸é …"
-#: ../src/nm-netlink-monitor.c:100 ../src/nm-netlink-monitor.c:231
-#: ../src/nm-netlink-monitor.c:653
+#: ../libnm-util/nm-setting-bond.c:659
#, c-format
-msgid "error processing netlink message: %s"
-msgstr "è™•ç† netlink 訊æ¯æ™‚發生錯誤:%s"
+msgid "'%s' option is empty"
+msgstr "未設定 '%s' é¸é …"
-#: ../src/nm-netlink-monitor.c:214
-msgid "error occurred while waiting for data on socket"
-msgstr "等待 socket 上的資料時發生錯誤"
+#: ../libnm-util/nm-setting-bond.c:671
+#, c-format
+msgid "'%s' is not a valid IPv4 address for '%s' option"
+msgstr "'%s' ä¸æ˜¯åˆæ–¼ '%s' é¸é …çš„ IPv4 ä½å€ã€‚"
-#: ../src/nm-netlink-monitor.c:254
+#: ../libnm-util/nm-setting-bridge-port.c:155
+#: ../libnm-util/nm-setting-bridge-port.c:167
#, c-format
-msgid "unable to connect to netlink for monitoring link status: %s"
-msgstr "ç„¡æ³•é€£çµ netlink 以監控連線狀態:%s"
+msgid "'%d' is not a valid value for the property (should be <= %d)"
+msgstr "'%d' ä¸æ˜¯å±¬æ€§åˆæ–¼è¦å®šçš„值(應該 <= %d)"
-#: ../src/nm-netlink-monitor.c:265
+#: ../libnm-util/nm-setting-bridge.c:251
#, c-format
-msgid "unable to enable netlink handle credential passing: %s"
-msgstr "無法啟用 netlink handle credential passing:%s"
+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 "屬性為空"
-#: ../src/nm-netlink-monitor.c:291 ../src/nm-netlink-monitor.c:353
+#: ../libnm-util/nm-setting-connection.c:734
#, c-format
-msgid "unable to allocate netlink handle for monitoring link status: %s"
-msgstr "無法é…ç½® netlink 處ç†å™¨ä»¥ç›£æŽ§é€£ç·šç‹€æ…‹ï¼š%s"
+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 "slave 並ä¸å…許 IPv4 é…ç½®"
+
+#: ../libnm-util/nm-setting-connection.c:815
+msgid "IPv6 configuration is not allowed for slave"
+msgstr "slave 並ä¸å…許 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 "屬性ä¸åˆè¦å®šï¼ˆæœªå•Ÿç”¨ï¼‰"
-#: ../src/nm-netlink-monitor.c:376
+#: ../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 "unable to allocate netlink link cache for monitoring link status: %s"
-msgstr "無法é…ç½® netlink 連線快å–以監控連線狀態:%s"
+msgid "property value '%s' is empty or too long (>64)"
+msgstr "屬性值 '%s' 是空的,或太長(>64)"
-#: ../src/nm-netlink-monitor.c:502
+#: ../libnm-util/nm-setting-gsm.c:329
#, c-format
-msgid "unable to join netlink group: %s"
-msgstr "無法加入 netlink 群組:%s"
+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 ä½å€ä¸åˆè¦å®š"
-#: ../src/nm-netlink-monitor.c:629 ../src/nm-netlink-monitor.c:642
+#: ../libnm-util/nm-setting-ip4-config.c:799
#, c-format
-msgid "error updating link cache: %s"
-msgstr "更新連線快å–時發生錯誤:%s"
+msgid "%d. IPv4 address has invalid prefix"
+msgstr "%d。IPv4 ä½å€çš„å‰ç¶´ä¸åˆè¦å®š"
-#: ../src/main.c:502
+#: ../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"
+msgstr "啟用或åœç”¨ç³»çµ±ç¶²è·¯"
+
+#: ../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.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.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"
+msgstr "啟用或åœç”¨ WiFi è£ç½®"
+
+#: ../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.in.h:7
+msgid "Enable or disable mobile broadband devices"
+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"
+msgstr "系統政策防止啟用或åœç”¨ WiMAX 行動寬頻è£ç½®"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:11
+msgid "Allow control of network connections"
+msgstr "å…許控制網路連線"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:12
+msgid "System policy prevents control of network connections"
+msgstr "系統政策防止網路連線的控制"
+
+#: ../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.in.h:14
+msgid ""
+"System policy prevents sharing connections via a protected WiFi network"
+msgstr "系統政策讓您無法é€éŽå—ä¿è­·çš„ WiFi 網路共享連çµ"
+
+#: ../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.in.h:16
+msgid "System policy prevents sharing connections via an open WiFi network"
+msgstr "系統政策讓您無法é€éŽé–‹æ”¾çš„ WiFi 網路共享連線"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:17
+msgid "Modify personal network connections"
+msgstr "修改個人網路連線"
+
+#: ../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.in.h:19
+msgid "Modify network connections for all users"
+msgstr "修改所有使用者的網路連線"
+
+#: ../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.in.h:21
+msgid "Modify persistent system hostname"
+msgstr "修改永久系統的主機å稱"
+
+#: ../policy/org.freedesktop.NetworkManager.policy.in.in.h:22
+msgid "System policy prevents modification of the persistent system hostname"
+msgstr "系統政策讓您無法修改永久的系統主機å稱"
+
+#: ../src/main.c:154
+#, c-format
+msgid "Opening %s failed: %s\n"
+msgstr "開啟 %s 失敗:%s\n"
+
+#: ../src/main.c:160
+#, c-format
+msgid "Writing to %s failed: %s\n"
+msgstr "寫入 %s 失敗:%s\n"
+
+#: ../src/main.c:165
+#, c-format
+msgid "Closing %s failed: %s\n"
+msgstr "關閉 %s 失敗:%s\n"
+
+#: ../src/main.c:208
+#, c-format
+msgid "NetworkManager is already running (pid %ld)\n"
+msgstr "NetworkManager 已在執行(pid %ld)\n"
+
+#: ../src/main.c:329
+msgid "Print NetworkManager version and exit"
+msgstr "å°å‡º NetworkManager 的版本並退出"
+
+#: ../src/main.c:330
+msgid "Don't become a daemon"
+msgstr "ä¸è¦æˆç‚º daemon"
+
+#: ../src/main.c:331
+msgid "Don't become a daemon, and log to stderr"
+msgstr "ä¸è¦æˆç‚º daemon,並記錄至 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:337
+msgid "Specify the location of a PID file"
+msgstr "指定 PID 檔案的ä½ç½®"
+
+#: ../src/main.c:337
+msgid "filename"
+msgstr "檔案å稱"
+
+#: ../src/main.c:338
+msgid "State file location"
+msgstr "指定檔案ä½ç½®"
+
+#: ../src/main.c:338
+msgid "/path/to/state.file"
+msgstr "/path/to/state.file"
+
+#: ../src/main.c:364
+#, c-format
+msgid "GModules are not supported on your platform!\n"
+msgstr "您的平å°ä¸æ”¯æ´ GModulesï¼\n"
+
+#: ../src/main.c:369
+#, c-format
+msgid "You must be root to run NetworkManager!\n"
+msgstr "您必須æˆç‚º root æ‰èƒ½åŸ·è¡Œ 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 會監控所有網路連線並自動\n"
+"é¸æ“‡æœ€ä½³çš„連線。它也能å…許使用者指定\n"
+"電腦中的無線網路å¡æ‡‰èˆ‡å“ªå€‹\n"
+"ç„¡ç·šå­˜å–點相è¯ã€‚"
+
+#: ../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:562
+#: ../src/main.c:412
#, c-format
msgid "%s. Please use --help to see a list of valid options.\n"
msgstr "%s。請使用 --help 來查看有效é¸é …的清單。\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:325
+#: ../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:482
+#, c-format
+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:495
+#, c-format
+msgid "State file %s parsing failed: (%d) %s\n"
+msgstr "狀態檔案 %s åµæžå¤±æ•—:(%d)%s\n"
+
+#: ../src/main.c:508
+#, c-format
+msgid "Could not daemonize: %s [error %u]\n"
+msgstr "無法æˆç‚º daemon:%s [error %u]\n"
+
+#: ../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 "# Created by NetworkManager\n"
-#: ../src/dhcp-manager/nm-dhcp-dhclient.c:341
+#: ../src/dhcp-manager/nm-dhcp-dhclient-utils.c:150
#, c-format
-msgid ""
-"# Merged from %s\n"
+msgid "# Merged from %s\n"
"\n"
-msgstr ""
-"# Merged from %s\n"
+msgstr "# Merged from %s\n"
"\n"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:279
+#: ../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:288
+#: ../src/dhcp-manager/nm-dhcp-manager.c:322
msgid "'dhclient' could be found."
msgstr "找ä¸åˆ°ã€Œdhclientã€ã€‚"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:298
+#: ../src/dhcp-manager/nm-dhcp-manager.c:332
msgid "'dhcpcd' could be found."
msgstr "找ä¸åˆ°ã€Œdhcpcdã€ã€‚"
-#: ../src/dhcp-manager/nm-dhcp-manager.c:306
+#: ../src/dhcp-manager/nm-dhcp-manager.c:340
#, c-format
msgid "unsupported DHCP client '%s'"
msgstr "ä¸æ”¯æ´çš„ DHCP 用戶端「%sã€"
-#: ../src/logging/nm-logging.c:146
+#: ../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:403
+msgid "The nameservers listed below may not be recognized."
+msgstr "下é¢åˆ—出的å稱伺æœå™¨å¯èƒ½ä¸æœƒè¢«è¾¨è­˜ã€‚"
+
+#: ../src/logging/nm-logging.c:149
#, c-format
msgid "Unknown log level '%s'"
msgstr "ä¸æ˜Žæ—¥èªŒå±¤ç´šã€Œ%sã€"
-#: ../src/logging/nm-logging.c:171
+#: ../src/logging/nm-logging.c:226
#, c-format
msgid "Unknown log domain '%s'"
msgstr "ä¸æ˜Žæ—¥èªŒç¶²åŸŸã€Œ%sã€"
-#: ../src/dns-manager/nm-dns-manager.c:343
-msgid "NOTE: the libc resolver may not support more than 3 nameservers."
-msgstr "注æ„:libc 解æžå™¨ä¸æ”¯æ´ 3 個以上的å稱伺æœå™¨ã€‚"
+#: ../src/config/nm-config.c:271
+msgid "Config file location"
+msgstr "é…置檔案ä½ç½®"
-#: ../src/dns-manager/nm-dns-manager.c:345
-msgid "The nameservers listed below may not be recognized."
-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 "plugin1,plugin2"
+
+#: ../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/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 "Bond 連線 %d"
+
+#: ../src/devices/nm-device-adsl.c:150
+#, c-format
+msgid "ADSL connection %d"
+msgstr "ADSL 連線 %d"
+
+#: ../src/devices/nm-device-bridge.c:143 ../tui/nm-editor-utils.c:214
+#, c-format
+msgid "Bridge connection %d"
+msgstr "橋接連線 %d"
-#: ../src/settings/nm-default-wired-connection.c:157
+#: ../src/devices/nm-device-bt.c:308
#, c-format
-msgid "Auto %s"
-msgstr "自動 %s"
+msgid "PAN connection %d"
+msgstr "PAN 連線 %d"
-#: ../system-settings/plugins/ifcfg-rh/reader.c:3256
+#: ../src/devices/nm-device-bt.c:341
+#, c-format
+msgid "DUN connection %d"
+msgstr "DUN 連線 %d"
+
+#: ../src/devices/nm-device-ethernet.c:1254
+#, c-format
+msgid "PPPoE connection %d"
+msgstr "PPPoE 連線 %d"
+
+#: ../src/devices/nm-device-ethernet.c:1254
+#: ../src/settings/nm-settings-utils.c:50
+#, c-format
+msgid "Wired connection %d"
+msgstr "有線連線 %d"
+
+#: ../src/devices/nm-device-infiniband.c:270 ../tui/nm-editor-utils.c:177
+#, c-format
+msgid "InfiniBand connection %d"
+msgstr "InfiniBand 連線 %d"
+
+#: ../src/devices/nm-device-olpc-mesh.c:242
+#, c-format
+msgid "Mesh %d"
+msgstr "Mesh 連線 %d"
+
+#: ../src/devices/nm-device-team.c:158 ../tui/nm-editor-utils.c:223
+#, c-format
+msgid "Team connection %d"
+msgstr "Team 連線 %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:3420 ../tui/nm-editor-utils.c:246
+#, c-format
+msgid "VPN connection %d"
+msgstr "VPN 連線 %d"
+
+#: ../src/nm-netlink-monitor.c:219
+msgid "error occurred while waiting for data on socket"
+msgstr "等待 socket 上的資料時發生錯誤"
+
+#: ../src/nm-netlink-monitor.c:240
+#, c-format
+msgid "error processing netlink message: %s"
+msgstr "è™•ç† netlink 訊æ¯æ™‚發生錯誤:%s"
+
+#: ../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:275
+#, c-format
+msgid "unable to enable netlink handle credential passing: %s"
+msgstr "無法啟用 netlink handle credential passing:%s"
+
+#: ../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:469
+#, c-format
+msgid "unable to join netlink group: %s"
+msgstr "無法加入 netlink 群組:%s"
+
+#: ../src/nm-sleep-monitor-systemd.c:116
+msgid "NetworkManager needs to turn off networks"
+msgstr "NetworkManager 需è¦é—œé–‰ç¶²è·¯"
+
+#: ../src/settings/plugins/ifcfg-rh/reader.c:115
msgid "System"
msgstr "系統"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:1
-msgid "Connection sharing via a protected WiFi network"
-msgstr "é€éŽå—ä¿è­·çš„ WiFi 網路共享連線"
+#: ../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 "Bond"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:2
-msgid "Connection sharing via an open WiFi network"
-msgstr "é€éŽé–‹æ”¾çš„ WiFi 網路共享連線"
+#: ../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"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:3
-msgid "Modify persistent system hostname"
-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 "橋接"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:4
-msgid "Modify system connections"
-msgstr "修改系統連線"
+#: ../test/nm-online.c:73
+#, c-format
+msgid "\rConnecting"
+msgstr "正在連線"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:5
-msgid "System policy prevents modification of system settings"
-msgstr "系統政策讓您無法修改系統設定"
+#: ../test/nm-online.c:104
+msgid ""
+"Time to wait for a connection, in seconds (without the option, default value "
+"is 30)"
+msgstr "連線的等待時間,以秒為單ä½ï¼ˆå°‘了此é¸é …,é è¨­å€¼å°‡æœƒæ˜¯ 30)"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:6
-msgid "System policy prevents modification of the persistent system hostname"
-msgstr "系統政策讓您無法修改永久的系統主機å稱"
+#: ../test/nm-online.c:105
+msgid "Exit immediately if NetworkManager is not running"
+msgstr "è‹¥ NetworkManager 沒有在執行的話,å³åˆ»é€€å‡º"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:7
-msgid "System policy prevents sharing connections via a protected WiFi network"
-msgstr "系統政策讓您無法é€éŽå—ä¿è­·çš„ WiFi 網路共享連çµ"
+#: ../test/nm-online.c:106
+msgid "Don't print anything"
+msgstr "ä¸å°å‡ºä»»ä½•æ±è¥¿"
-#: ../policy/org.freedesktop.network-manager-settings.system.policy.in.h:8
-msgid "System policy prevents sharing connections via an open WiFi network"
-msgstr "系統政策讓您無法é€éŽé–‹æ”¾çš„ WiFi 網路共享連線"
+#: ../test/nm-online.c:124
+msgid ""
+"Waits for NetworkManager to finish activating startup network connections."
+msgstr "等待 NetworkManager 完æˆå•Ÿç”¨é–‹å•Ÿç¶²è·¯é€£ç·šã€‚"
+
+#: ../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 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 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 "é¸æ“‡..."
+
+#: ../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)"
+
+#: ../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 "Slave"
+
+#: ../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 "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 "秒"
+
+#: ../tui/nmt-page-bridge.c:97
+msgid "Aging time"
+msgstr "éŽæ™‚時間"
+
+#: ../tui/nmt-page-bridge.c:99
+msgid "Enable STP (Spanning Tree Protocol)"
+msgstr "啟用 STP(Spanning Tree Protocol)"
+
+#: ../tui/nmt-page-bridge.c:122
+msgid "Forward delay"
+msgstr "轉é€å»¶é²"
+
+#: ../tui/nmt-page-bridge.c:132
+msgid "Hello time"
+msgstr "Hello time"
+
+#: ../tui/nmt-page-bridge.c:142
+msgid "Max age"
+msgstr "Max age"
+
+#: ../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 "Datagram"
+
+#: ../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 "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 個自訂路由"
+
+#: ../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 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 "(尚ä¸æ”¯æ´å‹•æ…‹ 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 "é¸æ“‡æ‚¨æƒ³è¦æ–°å¢žçš„ slave 連線類型。"
+
+#: ../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ã€"
+
+#: ../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/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 並ä¸åœ¨åŸ·è¡Œä¸­ã€‚"
diff --git a/policy/Makefile.in b/policy/Makefile.in
index 68fe00f3c..fa19f5c31 100644
--- a/policy/Makefile.in
+++ b/policy/Makefile.in
@@ -160,6 +160,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -283,6 +285,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -302,6 +305,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -328,7 +332,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
diff --git a/policy/org.freedesktop.NetworkManager.policy.in.in b/policy/org.freedesktop.NetworkManager.policy.in.in
index cb229990c..daefd80f2 100644
--- a/policy/org.freedesktop.NetworkManager.policy.in.in
+++ b/policy/org.freedesktop.NetworkManager.policy.in.in
@@ -58,6 +58,7 @@
<_description>Allow control of network connections</_description>
<_message>System policy prevents control of network connections</_message>
<defaults>
+ <allow_any>auth_admin</allow_any>
<allow_inactive>yes</allow_inactive>
<allow_active>yes</allow_active>
</defaults>
diff --git a/src/Makefile.am b/src/Makefile.am
index 2929e18c0..808e59eb3 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -5,43 +5,121 @@ include $(GLIB_MAKEFILE)
SUBDIRS = \
. \
devices/adsl \
- devices/wwan \
- devices/bluetooth \
- devices/wifi \
+ devices/wifi \
dhcp-manager \
ppp-manager \
settings/plugins
+if WITH_MODEM_MANAGER_1
+SUBDIRS += \
+ devices/wwan \
+ devices/bluetooth
+endif
+
if WITH_WIMAX
SUBDIRS += devices/wimax
endif
+if WITH_TEAMDCTL
+SUBDIRS += devices/team
+endif
+
if ENABLE_TESTS
SUBDIRS += \
- config/tests \
dhcp-manager/tests \
dnsmasq-manager/tests \
platform \
rdisc \
- settings/tests \
supplicant-manager/tests \
tests
endif
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)/libnm-core \
+ -I$(top_builddir)/libnm-core \
-I$(top_srcdir)/callouts \
+ -DPREFIX=\"$(prefix)\" \
-DG_LOG_DOMAIN=\""NetworkManager"\" \
+ -DNETWORKMANAGER_COMPILATION \
-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)
+noinst_LTLIBRARIES = \
+ libNetworkManager.la \
+ libnm-iface-helper.la \
+ libsystemd-dhcp.la
+
+######################
+# libsystemd-dhcp
+######################
+
+SYSTEMD_DHCP_CFLAGS = \
+ -I$(top_srcdir)/src/dhcp-manager/systemd-dhcp/src/systemd \
+ -I$(top_srcdir)/src/dhcp-manager/systemd-dhcp/src/libsystemd-network \
+ -I$(top_srcdir)/src/dhcp-manager/systemd-dhcp/src/shared \
+ -I$(top_srcdir)/src/dhcp-manager/systemd-dhcp
+
+libsystemd_dhcp_la_SOURCES = \
+ dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-network.c \
+ dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-packet.c \
+ dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-internal.h \
+ dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-network.c \
+ dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-lease-internal.h \
+ dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-option.c \
+ dhcp-manager/systemd-dhcp/src/libsystemd-network/network-internal.c \
+ dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp-lease.c \
+ dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp-client.c \
+ dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-option.c \
+ dhcp-manager/systemd-dhcp/src/libsystemd-network/network-internal.h \
+ dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp6-lease.c \
+ dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-protocol.h \
+ dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-internal.h \
+ dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-protocol.h \
+ dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-lease-internal.h \
+ dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp6-client.c \
+ dhcp-manager/systemd-dhcp/src/shared/async.h \
+ dhcp-manager/systemd-dhcp/src/shared/time-util.h \
+ dhcp-manager/systemd-dhcp/src/shared/siphash24.h \
+ dhcp-manager/systemd-dhcp/src/shared/time-util.c \
+ dhcp-manager/systemd-dhcp/src/shared/socket-util.h \
+ dhcp-manager/systemd-dhcp/src/shared/sparse-endian.h \
+ dhcp-manager/systemd-dhcp/src/shared/macro.h \
+ dhcp-manager/systemd-dhcp/src/shared/refcnt.h \
+ dhcp-manager/systemd-dhcp/src/shared/util.c \
+ dhcp-manager/systemd-dhcp/src/shared/in-addr-util.c \
+ dhcp-manager/systemd-dhcp/src/shared/siphash24.c \
+ dhcp-manager/systemd-dhcp/src/shared/util.h \
+ dhcp-manager/systemd-dhcp/src/shared/in-addr-util.h \
+ dhcp-manager/systemd-dhcp/src/shared/list.h \
+ dhcp-manager/systemd-dhcp/src/shared/fileio.h \
+ dhcp-manager/systemd-dhcp/src/shared/fileio.c \
+ dhcp-manager/systemd-dhcp/src/shared/strv.h \
+ dhcp-manager/systemd-dhcp/src/shared/strv.c \
+ dhcp-manager/systemd-dhcp/src/shared/unaligned.h \
+ dhcp-manager/systemd-dhcp/src/shared/utf8.h \
+ dhcp-manager/systemd-dhcp/src/shared/utf8.c \
+ dhcp-manager/systemd-dhcp/src/systemd/sd-dhcp-lease.h \
+ dhcp-manager/systemd-dhcp/src/systemd/sd-dhcp-client.h \
+ dhcp-manager/systemd-dhcp/src/systemd/sd-id128.h \
+ dhcp-manager/systemd-dhcp/src/systemd/sd-dhcp6-lease.h \
+ dhcp-manager/systemd-dhcp/src/systemd/sd-dhcp6-client.h \
+ dhcp-manager/systemd-dhcp/src/systemd/sd-event.h \
+ dhcp-manager/systemd-dhcp/src/systemd/_sd-common.h \
+ dhcp-manager/systemd-dhcp/nm-sd-adapt.h \
+ dhcp-manager/systemd-dhcp/nm-sd-adapt.c
+
+libsystemd_dhcp_la_CPPFLAGS = \
+ -I$(top_srcdir)/include \
+ $(SYSTEMD_DHCP_CFLAGS) \
+ $(GLIB_CFLAGS)
+
+libsystemd_dhcp_la_LIBADD = \
+ $(GLIB_LIBS)
+
###########################################
# NetworkManager
###########################################
@@ -49,56 +127,71 @@ AM_CPPFLAGS += $(foreach d,$(sort $(dir $(libNetworkManager_la_SOURCES))),-I$(to
sbin_PROGRAMS = NetworkManager
NetworkManager_SOURCES = \
+ $(nm_device_sources) $(nm_device_headers) \
+ $(nm_dhcp_client_sources) $(nm_dhcp_client_headers) \
+ main-utils.c \
+ main-utils.h \
main.c
-NetworkManager_LDADD = libNetworkManager.la $(top_builddir)/libgsystem.la $(LIBNDP_LIBS)
+NetworkManager_LDADD = libNetworkManager.la
-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 \
+nm_device_sources = \
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 \
+ $(NULL)
+
+nm_device_headers = \
+ devices/nm-device-bond.h \
+ devices/nm-device-bridge.h \
+ devices/nm-device-ethernet.h \
+ devices/nm-device-gre.h \
+ devices/nm-device-infiniband.h \
+ devices/nm-device-macvlan.h \
+ devices/nm-device-tun.h \
+ devices/nm-device-veth.h \
+ devices/nm-device-vlan.h \
+ devices/nm-device-vxlan.h
+
+nm_dhcp_client_sources = \
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-systemd.c
+
+nm_dhcp_client_headers = \
+ dhcp-manager/nm-dhcp-dhclient.h \
+ dhcp-manager/nm-dhcp-dhclient-utils.h \
dhcp-manager/nm-dhcp-dhcpcd.h \
+ dhcp-manager/nm-dhcp-systemd.h
+
+nm_sources = \
+ $(nm_device_headers) \
+ $(nm_dhcp_client_headers) \
+ devices/nm-device.c \
+ devices/nm-device.h \
+ devices/nm-device-ethernet-utils.c \
+ devices/nm-device-ethernet-utils.h \
+ devices/nm-device-factory.c \
+ devices/nm-device-factory.h \
+ devices/nm-device-generic.c \
+ devices/nm-device-generic.h \
+ devices/nm-device-logging.h \
+ devices/nm-device-private.h \
+ \
+ dhcp-manager/nm-dhcp-client.c \
+ dhcp-manager/nm-dhcp-client.h \
+ dhcp-manager/nm-dhcp-utils.c \
+ dhcp-manager/nm-dhcp-utils.h \
+ dhcp-manager/nm-dhcp-listener.c \
+ dhcp-manager/nm-dhcp-listener.h \
dhcp-manager/nm-dhcp-manager.c \
dhcp-manager/nm-dhcp-manager.h \
\
@@ -118,12 +211,6 @@ nm_sources = \
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 \
@@ -143,9 +230,6 @@ nm_sources = \
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 \
@@ -158,17 +242,12 @@ nm_sources = \
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 \
@@ -203,6 +282,8 @@ nm_sources = \
nm-activation-request.h \
nm-active-connection.c \
nm-active-connection.h \
+ nm-config.c \
+ nm-config.h \
nm-connection-provider.c \
nm-connection-provider.h \
nm-connectivity.c \
@@ -211,6 +292,8 @@ nm_sources = \
nm-dbus-manager.h \
nm-dcb.c \
nm-dcb.h \
+ nm-default-route-manager.c \
+ nm-default-route-manager.h \
nm-dhcp4-config.c \
nm-dhcp4-config.h \
nm-dhcp6-config.c \
@@ -219,18 +302,26 @@ nm_sources = \
nm-dispatcher.h \
nm-enum-types.c \
nm-enum-types.h \
+ nm-firewall-manager.c \
+ nm-firewall-manager.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-logging.c \
+ nm-logging.h \
+ nm-auth-manager.c \
+ nm-auth-manager.h \
nm-auth-subject.c \
nm-auth-subject.h \
+ nm-auth-utils.c \
+ nm-auth-utils.h \
nm-manager.c \
nm-manager.h \
nm-policy.c \
nm-policy.h \
+ nm-posix-signals.c \
+ nm-posix-signals.h \
nm-properties-changed-signal.c \
nm-properties-changed-signal.h \
nm-rfkill-manager.c \
@@ -268,7 +359,7 @@ endif
GLIB_GENERATED = nm-enum-types.h nm-enum-types.c
-GLIB_MKENUMS_H_FLAGS = --identifier-prefix NM
+GLIB_MKENUMS_H_FLAGS = --identifier-prefix NM --fhead '\#include <nm-core-enum-types.h>\n'
GLIB_MKENUMS_C_FLAGS = --identifier-prefix NM
nm_enum_types_sources = $(nm_sources)
@@ -292,7 +383,6 @@ glue_sources = \
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 \
@@ -320,8 +410,8 @@ AM_CPPFLAGS += \
$(LIBNL_CFLAGS) \
$(LIBNDP_CFLAGS) \
$(LIBSOUP_CFLAGS) \
- $(POLKIT_CFLAGS) \
$(SYSTEMD_LOGIN_CFLAGS) \
+ $(SYSTEMD_DHCP_CFLAGS) \
\
-DBINDIR=\"$(bindir)\" \
-DDATADIR=\"$(datadir)\" \
@@ -347,35 +437,109 @@ if SESSION_TRACKING_CK
AM_CPPFLAGS += -DCKDB_PATH=\"${CKDB_PATH}\"
endif
-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 \
+ $(top_builddir)/libnm-core/libnm-core.la \
+ libsystemd-dhcp.la \
$(DBUS_LIBS) \
$(GLIB_LIBS) \
$(GUDEV_LIBS) \
$(LIBNL_LIBS) \
- $(POLKIT_LIBS) \
$(SYSTEMD_LOGIN_LIBS) \
+ $(LIBNDP_LIBS) \
$(LIBDL) \
$(LIBM)
-if WITH_CONCHECK
+if WITH_LIBSOUP
libNetworkManager_la_LIBADD += $(LIBSOUP_LIBS)
endif
-if WITH_TEAMDCTL
-libNetworkManager_la_LIBADD += $(LIBTEAMDCTL_LIBS)
+NetworkManager_LDFLAGS = -rdynamic
+
+######################
+
+libnm_iface_helper_la_SOURCES = \
+ dhcp-manager/nm-dhcp-client.c \
+ dhcp-manager/nm-dhcp-client.h \
+ dhcp-manager/nm-dhcp-utils.c \
+ dhcp-manager/nm-dhcp-utils.h \
+ dhcp-manager/nm-dhcp-manager.c \
+ dhcp-manager/nm-dhcp-manager.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 \
+ \
+ nm-ip4-config.c \
+ nm-ip4-config.h \
+ nm-ip6-config.c \
+ nm-ip6-config.h \
+ \
+ nm-enum-types.c \
+ nm-enum-types.h \
+ nm-logging.c \
+ nm-logging.h \
+ nm-posix-signals.c \
+ nm-posix-signals.h \
+ NetworkManagerUtils.c \
+ NetworkManagerUtils.h
+
+if WITH_WEXT
+libnm_iface_helper_la_SOURCES += \
+ platform/wifi/wifi-utils-wext.c \
+ platform/wifi/wifi-utils-wext.h
endif
-NetworkManager_LDFLAGS = -rdynamic
+libnm_iface_helper_la_LIBADD = \
+ $(top_builddir)/libnm-core/libnm-core.la \
+ libsystemd-dhcp.la \
+ $(DBUS_LIBS) \
+ $(GLIB_LIBS) \
+ $(GUDEV_LIBS) \
+ $(LIBNL_LIBS) \
+ $(LIBNDP_LIBS) \
+ $(LIBDL) \
+ $(LIBM)
+
+libexec_PROGRAMS = nm-iface-helper
+
+nm_iface_helper_SOURCES = \
+ dhcp-manager/nm-dhcp-systemd.h \
+ dhcp-manager/nm-dhcp-systemd.c \
+ nm-iface-helper.c \
+ main-utils.c \
+ main-utils.h
+
+nm_iface_helper_LDADD = \
+ $(top_builddir)/libnm-core/libnm-core.la \
+ libsystemd-dhcp.la \
+ libnm-iface-helper.la \
+ $(DBUS_LIBS) \
+ $(GLIB_LIBS) \
+ $(GUDEV_LIBS) \
+ $(LIBNL_LIBS) \
+ $(LIBNDP_LIBS) \
+ $(LIBM)
+
+nm_iface_helper_LDFLAGS = -rdynamic
+
+######################
dbusservicedir = $(DBUS_SYS_DIR)
dbusservice_DATA = org.freedesktop.NetworkManager.conf
diff --git a/src/Makefile.in b/src/Makefile.in
index 6aa8aa0a1..6828f69c1 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -80,34 +80,40 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-@WITH_WIMAX_TRUE@am__append_1 = devices/wimax
-@ENABLE_TESTS_TRUE@am__append_2 = \
-@ENABLE_TESTS_TRUE@ config/tests \
+@WITH_MODEM_MANAGER_1_TRUE@am__append_1 = \
+@WITH_MODEM_MANAGER_1_TRUE@ devices/wwan \
+@WITH_MODEM_MANAGER_1_TRUE@ devices/bluetooth
+
+@WITH_WIMAX_TRUE@am__append_2 = devices/wimax
+@WITH_TEAMDCTL_TRUE@am__append_3 = devices/team
+@ENABLE_TESTS_TRUE@am__append_4 = \
@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_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
+@SESSION_TRACKING_SYSTEMD_TRUE@am__append_5 = nm-session-monitor-systemd.c
+@SESSION_TRACKING_CK_TRUE@@SESSION_TRACKING_SYSTEMD_FALSE@am__append_6 = nm-session-monitor-ck.c
+@SESSION_TRACKING_CK_FALSE@@SESSION_TRACKING_SYSTEMD_FALSE@am__append_7 = nm-session-monitor-null.c
+@SUSPEND_RESUME_SYSTEMD_TRUE@am__append_8 = nm-sleep-monitor-systemd.c
# UPower suspend/resume used whenever systemd is not enabled
-@SUSPEND_RESUME_SYSTEMD_FALSE@am__append_7 = nm-sleep-monitor-upower.c
-@WITH_WEXT_TRUE@am__append_8 = \
+@SUSPEND_RESUME_SYSTEMD_FALSE@am__append_9 = nm-sleep-monitor-upower.c
+@WITH_WEXT_TRUE@am__append_10 = \
+@WITH_WEXT_TRUE@ platform/wifi/wifi-utils-wext.c \
+@WITH_WEXT_TRUE@ platform/wifi/wifi-utils-wext.h
+
+@WITH_WIMAX_TRUE@am__append_11 = devices/wimax/nm-device-wimax.h
+@WITH_WIMAX_TRUE@am__append_12 = -I$(top_srcdir)/src/devices/wimax
+@SESSION_TRACKING_CK_TRUE@am__append_13 = -DCKDB_PATH=\"${CKDB_PATH}\"
+@WITH_LIBSOUP_TRUE@am__append_14 = $(LIBSOUP_LIBS)
+@WITH_WEXT_TRUE@am__append_15 = \
@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)
+libexec_PROGRAMS = nm-iface-helper$(EXEEXT)
subdir = src
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
@@ -133,51 +139,41 @@ CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
LTLIBRARIES = $(noinst_LTLIBRARIES)
am__DEPENDENCIES_1 =
-@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) \
+@WITH_LIBSOUP_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)
+libNetworkManager_la_DEPENDENCIES = \
+ $(top_builddir)/libnm-core/libnm-core.la libsystemd-dhcp.la \
$(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 \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_2)
+am__libNetworkManager_la_SOURCES_DIST = devices/nm-device-bond.h \
+ devices/nm-device-bridge.h devices/nm-device-ethernet.h \
+ devices/nm-device-gre.h devices/nm-device-infiniband.h \
+ devices/nm-device-macvlan.h devices/nm-device-tun.h \
+ devices/nm-device-veth.h devices/nm-device-vlan.h \
+ devices/nm-device-vxlan.h dhcp-manager/nm-dhcp-dhclient.h \
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 \
+ dhcp-manager/nm-dhcp-dhcpcd.h dhcp-manager/nm-dhcp-systemd.h \
+ devices/nm-device.c devices/nm-device.h \
+ devices/nm-device-ethernet-utils.c \
+ devices/nm-device-ethernet-utils.h devices/nm-device-factory.c \
+ devices/nm-device-factory.h devices/nm-device-generic.c \
+ devices/nm-device-generic.h devices/nm-device-logging.h \
+ devices/nm-device-private.h dhcp-manager/nm-dhcp-client.c \
+ dhcp-manager/nm-dhcp-client.h dhcp-manager/nm-dhcp-utils.c \
+ dhcp-manager/nm-dhcp-utils.h dhcp-manager/nm-dhcp-listener.c \
+ dhcp-manager/nm-dhcp-listener.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 \
+ dnsmasq-manager/nm-dnsmasq-utils.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 \
@@ -186,20 +182,15 @@ am__libNetworkManager_la_SOURCES_DIST = config/nm-config.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 \
+ 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.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 \
@@ -226,20 +217,23 @@ am__libNetworkManager_la_SOURCES_DIST = config/nm-config.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-active-connection.h nm-config.c nm-config.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-default-route-manager.c \
+ nm-default-route-manager.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-firewall-manager.c nm-firewall-manager.h nm-ip4-config.c \
+ nm-ip4-config.h nm-ip6-config.c nm-ip6-config.h nm-logging.c \
+ nm-logging.h nm-auth-manager.c nm-auth-manager.h \
+ nm-auth-subject.c nm-auth-subject.h nm-auth-utils.c \
+ nm-auth-utils.h nm-manager.c nm-manager.h nm-policy.c \
+ nm-policy.h nm-posix-signals.c nm-posix-signals.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 \
@@ -249,71 +243,137 @@ am__libNetworkManager_la_SOURCES_DIST = config/nm-config.c \
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 = \
+ 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
+am__objects_1 =
+@SESSION_TRACKING_SYSTEMD_TRUE@am__objects_2 = \
@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 = \
+@SESSION_TRACKING_CK_TRUE@@SESSION_TRACKING_SYSTEMD_FALSE@am__objects_3 = nm-session-monitor-ck.lo
+@SESSION_TRACKING_CK_FALSE@@SESSION_TRACKING_SYSTEMD_FALSE@am__objects_4 = nm-session-monitor-null.lo
+@SUSPEND_RESUME_SYSTEMD_TRUE@am__objects_5 = \
@SUSPEND_RESUME_SYSTEMD_TRUE@ nm-sleep-monitor-systemd.lo
-@SUSPEND_RESUME_SYSTEMD_FALSE@am__objects_5 = \
+@SUSPEND_RESUME_SYSTEMD_FALSE@am__objects_6 = \
@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 \
+@WITH_WEXT_TRUE@am__objects_7 = wifi-utils-wext.lo
+am__objects_8 = $(am__objects_1) $(am__objects_1) nm-device.lo \
+ nm-device-ethernet-utils.lo nm-device-factory.lo \
+ nm-device-generic.lo nm-dhcp-client.lo nm-dhcp-utils.lo \
+ nm-dhcp-listener.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-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-lndp-rdisc.lo nm-rdisc.lo nm-ppp-manager.lo \
+ nm-agent-manager.lo nm-inotify-helper.lo nm-secret-agent.lo \
+ nm-settings-connection.lo nm-settings.lo \
+ nm-system-config-interface.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-config.lo \
+ nm-connection-provider.lo nm-connectivity.lo \
+ nm-dbus-manager.lo nm-dcb.lo nm-default-route-manager.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-enum-types.lo nm-firewall-manager.lo nm-ip4-config.lo \
+ nm-ip6-config.lo nm-logging.lo nm-auth-manager.lo \
+ nm-auth-subject.lo nm-auth-utils.lo nm-manager.lo nm-policy.lo \
+ nm-posix-signals.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)
+ NetworkManagerUtils.lo $(am__objects_2) $(am__objects_3) \
+ $(am__objects_4) $(am__objects_5) $(am__objects_6) \
+ $(am__objects_7)
+am_libNetworkManager_la_OBJECTS = $(am__objects_8) $(am__objects_1)
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 =
-am__installdirs = "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(dbusservicedir)"
-PROGRAMS = $(sbin_PROGRAMS)
-am_NetworkManager_OBJECTS = main.$(OBJEXT)
+libnm_iface_helper_la_DEPENDENCIES = \
+ $(top_builddir)/libnm-core/libnm-core.la libsystemd-dhcp.la \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+am__libnm_iface_helper_la_SOURCES_DIST = \
+ dhcp-manager/nm-dhcp-client.c dhcp-manager/nm-dhcp-client.h \
+ dhcp-manager/nm-dhcp-utils.c dhcp-manager/nm-dhcp-utils.h \
+ dhcp-manager/nm-dhcp-manager.c dhcp-manager/nm-dhcp-manager.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 \
+ nm-ip4-config.c nm-ip4-config.h nm-ip6-config.c \
+ nm-ip6-config.h nm-enum-types.c nm-enum-types.h nm-logging.c \
+ nm-logging.h nm-posix-signals.c nm-posix-signals.h \
+ NetworkManagerUtils.c NetworkManagerUtils.h \
+ platform/wifi/wifi-utils-wext.c \
+ platform/wifi/wifi-utils-wext.h
+am_libnm_iface_helper_la_OBJECTS = nm-dhcp-client.lo nm-dhcp-utils.lo \
+ nm-dhcp-manager.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-ip4-config.lo nm-ip6-config.lo \
+ nm-enum-types.lo nm-logging.lo nm-posix-signals.lo \
+ NetworkManagerUtils.lo $(am__objects_7)
+libnm_iface_helper_la_OBJECTS = $(am_libnm_iface_helper_la_OBJECTS)
+libsystemd_dhcp_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_libsystemd_dhcp_la_OBJECTS = libsystemd_dhcp_la-dhcp-network.lo \
+ libsystemd_dhcp_la-dhcp-packet.lo \
+ libsystemd_dhcp_la-dhcp6-network.lo \
+ libsystemd_dhcp_la-dhcp6-option.lo \
+ libsystemd_dhcp_la-network-internal.lo \
+ libsystemd_dhcp_la-sd-dhcp-lease.lo \
+ libsystemd_dhcp_la-sd-dhcp-client.lo \
+ libsystemd_dhcp_la-dhcp-option.lo \
+ libsystemd_dhcp_la-sd-dhcp6-lease.lo \
+ libsystemd_dhcp_la-sd-dhcp6-client.lo \
+ libsystemd_dhcp_la-time-util.lo libsystemd_dhcp_la-util.lo \
+ libsystemd_dhcp_la-in-addr-util.lo \
+ libsystemd_dhcp_la-siphash24.lo libsystemd_dhcp_la-fileio.lo \
+ libsystemd_dhcp_la-strv.lo libsystemd_dhcp_la-utf8.lo \
+ libsystemd_dhcp_la-nm-sd-adapt.lo
+libsystemd_dhcp_la_OBJECTS = $(am_libsystemd_dhcp_la_OBJECTS)
+am__installdirs = "$(DESTDIR)$(libexecdir)" "$(DESTDIR)$(sbindir)" \
+ "$(DESTDIR)$(dbusservicedir)"
+PROGRAMS = $(libexec_PROGRAMS) $(sbin_PROGRAMS)
+am__objects_9 = nm-device-bond.$(OBJEXT) nm-device-bridge.$(OBJEXT) \
+ nm-device-ethernet.$(OBJEXT) nm-device-gre.$(OBJEXT) \
+ nm-device-infiniband.$(OBJEXT) nm-device-macvlan.$(OBJEXT) \
+ nm-device-tun.$(OBJEXT) nm-device-veth.$(OBJEXT) \
+ nm-device-vlan.$(OBJEXT) nm-device-vxlan.$(OBJEXT)
+am__objects_10 = nm-dhcp-dhclient.$(OBJEXT) \
+ nm-dhcp-dhclient-utils.$(OBJEXT) nm-dhcp-dhcpcd.$(OBJEXT) \
+ nm-dhcp-systemd.$(OBJEXT)
+am_NetworkManager_OBJECTS = $(am__objects_9) $(am__objects_1) \
+ $(am__objects_10) $(am__objects_1) main-utils.$(OBJEXT) \
+ main.$(OBJEXT)
NetworkManager_OBJECTS = $(am_NetworkManager_OBJECTS)
-NetworkManager_DEPENDENCIES = libNetworkManager.la \
- $(top_builddir)/libgsystem.la $(am__DEPENDENCIES_1)
+NetworkManager_DEPENDENCIES = libNetworkManager.la
NetworkManager_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(AM_CFLAGS) $(CFLAGS) $(NetworkManager_LDFLAGS) $(LDFLAGS) -o \
$@
+am_nm_iface_helper_OBJECTS = nm-dhcp-systemd.$(OBJEXT) \
+ nm-iface-helper.$(OBJEXT) main-utils.$(OBJEXT)
+nm_iface_helper_OBJECTS = $(am_nm_iface_helper_OBJECTS)
+nm_iface_helper_DEPENDENCIES = \
+ $(top_builddir)/libnm-core/libnm-core.la libsystemd-dhcp.la \
+ libnm-iface-helper.la $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+nm_iface_helper_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(AM_CFLAGS) $(CFLAGS) $(nm_iface_helper_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
@@ -348,9 +408,13 @@ 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 = $(libNetworkManager_la_SOURCES) $(NetworkManager_SOURCES)
+SOURCES = $(libNetworkManager_la_SOURCES) \
+ $(libnm_iface_helper_la_SOURCES) $(libsystemd_dhcp_la_SOURCES) \
+ $(NetworkManager_SOURCES) $(nm_iface_helper_SOURCES)
DIST_SOURCES = $(am__libNetworkManager_la_SOURCES_DIST) \
- $(NetworkManager_SOURCES)
+ $(am__libnm_iface_helper_la_SOURCES_DIST) \
+ $(libsystemd_dhcp_la_SOURCES) $(NetworkManager_SOURCES) \
+ $(nm_iface_helper_SOURCES)
RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
ctags-recursive dvi-recursive html-recursive info-recursive \
install-data-recursive install-dvi-recursive \
@@ -419,11 +483,10 @@ am__define_uniq_tagged_files = \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
-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
+DIST_SUBDIRS = . devices/adsl devices/wifi dhcp-manager ppp-manager \
+ settings/plugins devices/wwan devices/bluetooth devices/wimax \
+ devices/team dhcp-manager/tests dnsmasq-manager/tests platform \
+ rdisc supplicant-manager/tests tests
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
dir0=`pwd`; \
@@ -459,6 +522,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -582,6 +647,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -601,6 +667,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -627,7 +694,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -706,22 +773,22 @@ with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
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)
+SUBDIRS = . devices/adsl devices/wifi dhcp-manager ppp-manager \
+ settings/plugins $(am__append_1) $(am__append_2) \
+ $(am__append_3) $(am__append_4)
# 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"\" \
+AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/libnm-core \
+ -I$(top_builddir)/libnm-core -I$(top_srcdir)/callouts \
+ -DPREFIX=\"$(prefix)\" -DG_LOG_DOMAIN=\""NetworkManager"\" \
+ -DNETWORKMANAGER_COMPILATION \
-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) \
+ $(am__append_12) $(DBUS_CFLAGS) $(GLIB_CFLAGS) $(GUDEV_CFLAGS) \
$(LIBNL_CFLAGS) $(LIBNDP_CFLAGS) $(LIBSOUP_CFLAGS) \
- $(POLKIT_CFLAGS) $(SYSTEMD_LOGIN_CFLAGS) \
+ $(SYSTEMD_LOGIN_CFLAGS) $(SYSTEMD_DHCP_CFLAGS) \
-DBINDIR=\"$(bindir)\" -DDATADIR=\"$(datadir)\" \
-DLIBEXECDIR=\"$(libexecdir)\" \
-DLOCALSTATEDIR=\"$(localstatedir)\" -DSBINDIR=\"$(sbindir)\" \
@@ -733,47 +800,144 @@ AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/include \
-DDHCLIENT_PATH=\"$(DHCLIENT_PATH)\" \
-DDHCPCD_PATH=\"$(DHCPCD_PATH)\" \
-DPPPD_PLUGIN_DIR=\"$(PPPD_PLUGIN_DIR)\" $(NULL) \
- $(am__append_11) $(am__append_12)
+ $(am__append_13)
+noinst_LTLIBRARIES = \
+ libNetworkManager.la \
+ libnm-iface-helper.la \
+ libsystemd-dhcp.la
+
+
+######################
+# libsystemd-dhcp
+######################
+SYSTEMD_DHCP_CFLAGS = \
+ -I$(top_srcdir)/src/dhcp-manager/systemd-dhcp/src/systemd \
+ -I$(top_srcdir)/src/dhcp-manager/systemd-dhcp/src/libsystemd-network \
+ -I$(top_srcdir)/src/dhcp-manager/systemd-dhcp/src/shared \
+ -I$(top_srcdir)/src/dhcp-manager/systemd-dhcp
+
+libsystemd_dhcp_la_SOURCES = \
+ dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-network.c \
+ dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-packet.c \
+ dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-internal.h \
+ dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-network.c \
+ dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-lease-internal.h \
+ dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-option.c \
+ dhcp-manager/systemd-dhcp/src/libsystemd-network/network-internal.c \
+ dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp-lease.c \
+ dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp-client.c \
+ dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-option.c \
+ dhcp-manager/systemd-dhcp/src/libsystemd-network/network-internal.h \
+ dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp6-lease.c \
+ dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-protocol.h \
+ dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-internal.h \
+ dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-protocol.h \
+ dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-lease-internal.h \
+ dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp6-client.c \
+ dhcp-manager/systemd-dhcp/src/shared/async.h \
+ dhcp-manager/systemd-dhcp/src/shared/time-util.h \
+ dhcp-manager/systemd-dhcp/src/shared/siphash24.h \
+ dhcp-manager/systemd-dhcp/src/shared/time-util.c \
+ dhcp-manager/systemd-dhcp/src/shared/socket-util.h \
+ dhcp-manager/systemd-dhcp/src/shared/sparse-endian.h \
+ dhcp-manager/systemd-dhcp/src/shared/macro.h \
+ dhcp-manager/systemd-dhcp/src/shared/refcnt.h \
+ dhcp-manager/systemd-dhcp/src/shared/util.c \
+ dhcp-manager/systemd-dhcp/src/shared/in-addr-util.c \
+ dhcp-manager/systemd-dhcp/src/shared/siphash24.c \
+ dhcp-manager/systemd-dhcp/src/shared/util.h \
+ dhcp-manager/systemd-dhcp/src/shared/in-addr-util.h \
+ dhcp-manager/systemd-dhcp/src/shared/list.h \
+ dhcp-manager/systemd-dhcp/src/shared/fileio.h \
+ dhcp-manager/systemd-dhcp/src/shared/fileio.c \
+ dhcp-manager/systemd-dhcp/src/shared/strv.h \
+ dhcp-manager/systemd-dhcp/src/shared/strv.c \
+ dhcp-manager/systemd-dhcp/src/shared/unaligned.h \
+ dhcp-manager/systemd-dhcp/src/shared/utf8.h \
+ dhcp-manager/systemd-dhcp/src/shared/utf8.c \
+ dhcp-manager/systemd-dhcp/src/systemd/sd-dhcp-lease.h \
+ dhcp-manager/systemd-dhcp/src/systemd/sd-dhcp-client.h \
+ dhcp-manager/systemd-dhcp/src/systemd/sd-id128.h \
+ dhcp-manager/systemd-dhcp/src/systemd/sd-dhcp6-lease.h \
+ dhcp-manager/systemd-dhcp/src/systemd/sd-dhcp6-client.h \
+ dhcp-manager/systemd-dhcp/src/systemd/sd-event.h \
+ dhcp-manager/systemd-dhcp/src/systemd/_sd-common.h \
+ dhcp-manager/systemd-dhcp/nm-sd-adapt.h \
+ dhcp-manager/systemd-dhcp/nm-sd-adapt.c
+
+libsystemd_dhcp_la_CPPFLAGS = \
+ -I$(top_srcdir)/include \
+ $(SYSTEMD_DHCP_CFLAGS) \
+ $(GLIB_CFLAGS)
+
+libsystemd_dhcp_la_LIBADD = \
+ $(GLIB_LIBS)
+
NetworkManager_SOURCES = \
+ $(nm_device_sources) $(nm_device_headers) \
+ $(nm_dhcp_client_sources) $(nm_dhcp_client_headers) \
+ main-utils.c \
+ main-utils.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 \
+NetworkManager_LDADD = libNetworkManager.la
+nm_device_sources = \
+ devices/nm-device-bond.c \
+ devices/nm-device-bridge.c \
+ devices/nm-device-ethernet.c \
+ devices/nm-device-gre.c \
+ devices/nm-device-infiniband.c \
+ devices/nm-device-macvlan.c \
+ devices/nm-device-tun.c \
+ devices/nm-device-veth.c \
+ devices/nm-device-vlan.c \
+ devices/nm-device-vxlan.c \
+ $(NULL)
+
+nm_device_headers = \
+ devices/nm-device-bond.h \
+ devices/nm-device-bridge.h \
+ devices/nm-device-ethernet.h \
+ devices/nm-device-gre.h \
+ devices/nm-device-infiniband.h \
+ devices/nm-device-macvlan.h \
+ devices/nm-device-tun.h \
+ devices/nm-device-veth.h \
+ devices/nm-device-vlan.h \
+ devices/nm-device-vxlan.h
+
+nm_dhcp_client_sources = \
+ dhcp-manager/nm-dhcp-dhclient.c \
dhcp-manager/nm-dhcp-dhclient-utils.c \
+ dhcp-manager/nm-dhcp-dhcpcd.c \
+ dhcp-manager/nm-dhcp-systemd.c
+
+nm_dhcp_client_headers = \
+ dhcp-manager/nm-dhcp-dhclient.h \
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 \
+ dhcp-manager/nm-dhcp-dhcpcd.h \
+ dhcp-manager/nm-dhcp-systemd.h
+
+nm_sources = $(nm_device_headers) $(nm_dhcp_client_headers) \
+ devices/nm-device.c devices/nm-device.h \
+ devices/nm-device-ethernet-utils.c \
+ devices/nm-device-ethernet-utils.h devices/nm-device-factory.c \
+ devices/nm-device-factory.h devices/nm-device-generic.c \
+ devices/nm-device-generic.h devices/nm-device-logging.h \
+ devices/nm-device-private.h dhcp-manager/nm-dhcp-client.c \
+ dhcp-manager/nm-dhcp-client.h dhcp-manager/nm-dhcp-utils.c \
+ dhcp-manager/nm-dhcp-utils.h dhcp-manager/nm-dhcp-listener.c \
+ dhcp-manager/nm-dhcp-listener.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 \
+ dnsmasq-manager/nm-dnsmasq-utils.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 \
@@ -782,20 +946,15 @@ nm_sources = config/nm-config.c config/nm-config.h \
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 \
+ 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.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 \
@@ -822,26 +981,29 @@ nm_sources = config/nm-config.c config/nm-config.h \
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 $(am__append_3) \
- $(am__append_4) $(am__append_5) $(am__append_6) \
- $(am__append_7) $(am__append_8)
+ nm-active-connection.h nm-config.c nm-config.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-default-route-manager.c \
+ nm-default-route-manager.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-firewall-manager.c nm-firewall-manager.h nm-ip4-config.c \
+ nm-ip4-config.h nm-ip6-config.c nm-ip6-config.h nm-logging.c \
+ nm-logging.h nm-auth-manager.c nm-auth-manager.h \
+ nm-auth-subject.c nm-auth-subject.h nm-auth-utils.c \
+ nm-auth-utils.h nm-manager.c nm-manager.h nm-policy.c \
+ nm-policy.h nm-posix-signals.c nm-posix-signals.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_5) $(am__append_6) $(am__append_7) \
+ $(am__append_8) $(am__append_9) $(am__append_10)
GLIB_GENERATED = nm-enum-types.h nm-enum-types.c
-GLIB_MKENUMS_H_FLAGS = --identifier-prefix NM
+GLIB_MKENUMS_H_FLAGS = --identifier-prefix NM --fhead '\#include <nm-core-enum-types.h>\n'
GLIB_MKENUMS_C_FLAGS = --identifier-prefix NM
-nm_enum_types_sources = $(nm_sources) $(am__append_9)
+nm_enum_types_sources = $(nm_sources) $(am__append_11)
BUILT_SOURCES = $(GLIB_GENERATED) $(glue_sources)
glue_sources = \
nm-access-point-glue.h \
@@ -855,7 +1017,6 @@ glue_sources = \
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 \
@@ -874,12 +1035,61 @@ 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) \
+libNetworkManager_la_LIBADD = \
+ $(top_builddir)/libnm-core/libnm-core.la libsystemd-dhcp.la \
+ $(DBUS_LIBS) $(GLIB_LIBS) $(GUDEV_LIBS) $(LIBNL_LIBS) \
+ $(SYSTEMD_LOGIN_LIBS) $(LIBNDP_LIBS) $(LIBDL) $(LIBM) \
$(am__append_14)
NetworkManager_LDFLAGS = -rdynamic
+
+######################
+libnm_iface_helper_la_SOURCES = dhcp-manager/nm-dhcp-client.c \
+ dhcp-manager/nm-dhcp-client.h dhcp-manager/nm-dhcp-utils.c \
+ dhcp-manager/nm-dhcp-utils.h dhcp-manager/nm-dhcp-manager.c \
+ dhcp-manager/nm-dhcp-manager.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 \
+ nm-ip4-config.c nm-ip4-config.h nm-ip6-config.c \
+ nm-ip6-config.h nm-enum-types.c nm-enum-types.h nm-logging.c \
+ nm-logging.h nm-posix-signals.c nm-posix-signals.h \
+ NetworkManagerUtils.c NetworkManagerUtils.h $(am__append_15)
+libnm_iface_helper_la_LIBADD = \
+ $(top_builddir)/libnm-core/libnm-core.la \
+ libsystemd-dhcp.la \
+ $(DBUS_LIBS) \
+ $(GLIB_LIBS) \
+ $(GUDEV_LIBS) \
+ $(LIBNL_LIBS) \
+ $(LIBNDP_LIBS) \
+ $(LIBDL) \
+ $(LIBM)
+
+nm_iface_helper_SOURCES = \
+ dhcp-manager/nm-dhcp-systemd.h \
+ dhcp-manager/nm-dhcp-systemd.c \
+ nm-iface-helper.c \
+ main-utils.c \
+ main-utils.h
+
+nm_iface_helper_LDADD = \
+ $(top_builddir)/libnm-core/libnm-core.la \
+ libsystemd-dhcp.la \
+ libnm-iface-helper.la \
+ $(DBUS_LIBS) \
+ $(GLIB_LIBS) \
+ $(GUDEV_LIBS) \
+ $(LIBNL_LIBS) \
+ $(LIBNDP_LIBS) \
+ $(LIBM)
+
+nm_iface_helper_LDFLAGS = -rdynamic
+
+######################
dbusservicedir = $(DBUS_SYS_DIR)
dbusservice_DATA = org.freedesktop.NetworkManager.conf
EXTRA_DIST = \
@@ -943,6 +1153,61 @@ clean-noinstLTLIBRARIES:
libNetworkManager.la: $(libNetworkManager_la_OBJECTS) $(libNetworkManager_la_DEPENDENCIES) $(EXTRA_libNetworkManager_la_DEPENDENCIES)
$(AM_V_CCLD)$(LINK) $(libNetworkManager_la_OBJECTS) $(libNetworkManager_la_LIBADD) $(LIBS)
+
+libnm-iface-helper.la: $(libnm_iface_helper_la_OBJECTS) $(libnm_iface_helper_la_DEPENDENCIES) $(EXTRA_libnm_iface_helper_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libnm_iface_helper_la_OBJECTS) $(libnm_iface_helper_la_LIBADD) $(LIBS)
+
+libsystemd-dhcp.la: $(libsystemd_dhcp_la_OBJECTS) $(libsystemd_dhcp_la_DEPENDENCIES) $(EXTRA_libsystemd_dhcp_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libsystemd_dhcp_la_OBJECTS) $(libsystemd_dhcp_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
install-sbinPROGRAMS: $(sbin_PROGRAMS)
@$(NORMAL_INSTALL)
@list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
@@ -997,6 +1262,10 @@ NetworkManager$(EXEEXT): $(NetworkManager_OBJECTS) $(NetworkManager_DEPENDENCIES
@rm -f NetworkManager$(EXEEXT)
$(AM_V_CCLD)$(NetworkManager_LINK) $(NetworkManager_OBJECTS) $(NetworkManager_LDADD) $(LIBS)
+nm-iface-helper$(EXEEXT): $(nm_iface_helper_OBJECTS) $(nm_iface_helper_DEPENDENCIES) $(EXTRA_nm_iface_helper_DEPENDENCIES)
+ @rm -f nm-iface-helper$(EXEEXT)
+ $(AM_V_CCLD)$(nm_iface_helper_LINK) $(nm_iface_helper_OBJECTS) $(nm_iface_helper_LDADD) $(LIBS)
+
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -1004,38 +1273,61 @@ distclean-compile:
-rm -f *.tab.c
@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)/libsystemd_dhcp_la-dhcp-network.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsystemd_dhcp_la-dhcp-option.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsystemd_dhcp_la-dhcp-packet.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsystemd_dhcp_la-dhcp6-network.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsystemd_dhcp_la-dhcp6-option.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsystemd_dhcp_la-fileio.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsystemd_dhcp_la-in-addr-util.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsystemd_dhcp_la-network-internal.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsystemd_dhcp_la-nm-sd-adapt.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsystemd_dhcp_la-sd-dhcp-client.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsystemd_dhcp_la-sd-dhcp-lease.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsystemd_dhcp_la-sd-dhcp6-client.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsystemd_dhcp_la-sd-dhcp6-lease.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsystemd_dhcp_la-siphash24.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsystemd_dhcp_la-strv.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsystemd_dhcp_la-time-util.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsystemd_dhcp_la-utf8.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsystemd_dhcp_la-util.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main-utils.Po@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-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-auth-utils.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-default-route-manager.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-device-bond.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-device-bridge.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-device-ethernet-utils.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-device-ethernet.Po@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-gre.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-device-infiniband.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-device-macvlan.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-device-tun.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-device-veth.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-device-vlan.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-device-vxlan.Po@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-dhclient-utils.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-dhcp-dhclient.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-dhcp-dhcpcd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-dhcp-listener.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-dhcp-manager.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-dhcp-systemd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-dhcp-utils.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@
@@ -1050,6 +1342,7 @@ distclean-compile:
@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-iface-helper.Po@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@
@@ -1057,7 +1350,6 @@ distclean-compile:
@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@
@@ -1072,8 +1364,6 @@ distclean-compile:
@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@
@@ -1114,20 +1404,6 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-config.lo `test -f 'config/nm-config.c' || echo '$(srcdir)/'`config/nm-config.c
-
-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) $(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
-
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
@@ -1135,26 +1411,12 @@ nm-device.lo: devices/nm-device.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) $(AM_CFLAGS) $(CFLAGS) -c -o nm-device.lo `test -f 'devices/nm-device.c' || echo '$(srcdir)/'`devices/nm-device.c
-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) $(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
-
-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@
+nm-device-ethernet-utils.lo: devices/nm-device-ethernet-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-device-ethernet-utils.lo -MD -MP -MF $(DEPDIR)/nm-device-ethernet-utils.Tpo -c -o nm-device-ethernet-utils.lo `test -f 'devices/nm-device-ethernet-utils.c' || echo '$(srcdir)/'`devices/nm-device-ethernet-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-device-ethernet-utils.Tpo $(DEPDIR)/nm-device-ethernet-utils.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices/nm-device-ethernet-utils.c' object='nm-device-ethernet-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) $(AM_CFLAGS) $(CFLAGS) -c -o nm-device-bridge.lo `test -f 'devices/nm-device-bridge.c' || echo '$(srcdir)/'`devices/nm-device-bridge.c
-
-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) $(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
+@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-utils.lo `test -f 'devices/nm-device-ethernet-utils.c' || echo '$(srcdir)/'`devices/nm-device-ethernet-utils.c
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
@@ -1170,62 +1432,6 @@ nm-device-generic.lo: devices/nm-device-generic.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) $(AM_CFLAGS) $(CFLAGS) -c -o nm-device-generic.lo `test -f 'devices/nm-device-generic.c' || echo '$(srcdir)/'`devices/nm-device-generic.c
-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@)$(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
-
-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@)$(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
-
-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@)$(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
-
-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@)$(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
-
-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@)$(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
-
-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@)$(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
-
-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@)$(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
-
-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@)$(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
-
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
@@ -1233,26 +1439,19 @@ nm-dhcp-client.lo: dhcp-manager/nm-dhcp-client.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) $(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
-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@)$(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
-
-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@
+nm-dhcp-utils.lo: dhcp-manager/nm-dhcp-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-utils.lo -MD -MP -MF $(DEPDIR)/nm-dhcp-utils.Tpo -c -o nm-dhcp-utils.lo `test -f 'dhcp-manager/nm-dhcp-utils.c' || echo '$(srcdir)/'`dhcp-manager/nm-dhcp-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-dhcp-utils.Tpo $(DEPDIR)/nm-dhcp-utils.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dhcp-manager/nm-dhcp-utils.c' object='nm-dhcp-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) $(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
+@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-utils.lo `test -f 'dhcp-manager/nm-dhcp-utils.c' || echo '$(srcdir)/'`dhcp-manager/nm-dhcp-utils.c
-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@
+nm-dhcp-listener.lo: dhcp-manager/nm-dhcp-listener.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-listener.lo -MD -MP -MF $(DEPDIR)/nm-dhcp-listener.Tpo -c -o nm-dhcp-listener.lo `test -f 'dhcp-manager/nm-dhcp-listener.c' || echo '$(srcdir)/'`dhcp-manager/nm-dhcp-listener.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-dhcp-listener.Tpo $(DEPDIR)/nm-dhcp-listener.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dhcp-manager/nm-dhcp-listener.c' object='nm-dhcp-listener.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) $(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
+@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-listener.lo `test -f 'dhcp-manager/nm-dhcp-listener.c' || echo '$(srcdir)/'`dhcp-manager/nm-dhcp-listener.c
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
@@ -1310,20 +1509,6 @@ nm-dnsmasq-utils.lo: dnsmasq-manager/nm-dnsmasq-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) $(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
-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@)$(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
-
-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@)$(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
-
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
@@ -1380,13 +1565,6 @@ nm-rdisc.lo: rdisc/nm-rdisc.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) $(AM_CFLAGS) $(CFLAGS) -c -o nm-rdisc.lo `test -f 'rdisc/nm-rdisc.c' || echo '$(srcdir)/'`rdisc/nm-rdisc.c
-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@)$(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
-
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
@@ -1422,20 +1600,6 @@ nm-settings-connection.lo: settings/nm-settings-connection.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) $(AM_CFLAGS) $(CFLAGS) -c -o nm-settings-connection.lo `test -f 'settings/nm-settings-connection.c' || echo '$(srcdir)/'`settings/nm-settings-connection.c
-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@)$(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
-
-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@)$(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
-
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
@@ -1450,13 +1614,6 @@ nm-system-config-interface.lo: settings/nm-system-config-interface.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) $(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
-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@)$(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
-
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
@@ -1555,6 +1712,328 @@ wifi-utils-wext.lo: platform/wifi/wifi-utils-wext.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) $(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
+libsystemd_dhcp_la-dhcp-network.lo: dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-network.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsystemd_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsystemd_dhcp_la-dhcp-network.lo -MD -MP -MF $(DEPDIR)/libsystemd_dhcp_la-dhcp-network.Tpo -c -o libsystemd_dhcp_la-dhcp-network.lo `test -f 'dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-network.c' || echo '$(srcdir)/'`dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-network.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsystemd_dhcp_la-dhcp-network.Tpo $(DEPDIR)/libsystemd_dhcp_la-dhcp-network.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-network.c' object='libsystemd_dhcp_la-dhcp-network.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) $(libsystemd_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsystemd_dhcp_la-dhcp-network.lo `test -f 'dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-network.c' || echo '$(srcdir)/'`dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-network.c
+
+libsystemd_dhcp_la-dhcp-packet.lo: dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-packet.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsystemd_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsystemd_dhcp_la-dhcp-packet.lo -MD -MP -MF $(DEPDIR)/libsystemd_dhcp_la-dhcp-packet.Tpo -c -o libsystemd_dhcp_la-dhcp-packet.lo `test -f 'dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-packet.c' || echo '$(srcdir)/'`dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-packet.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsystemd_dhcp_la-dhcp-packet.Tpo $(DEPDIR)/libsystemd_dhcp_la-dhcp-packet.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-packet.c' object='libsystemd_dhcp_la-dhcp-packet.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) $(libsystemd_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsystemd_dhcp_la-dhcp-packet.lo `test -f 'dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-packet.c' || echo '$(srcdir)/'`dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-packet.c
+
+libsystemd_dhcp_la-dhcp6-network.lo: dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-network.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsystemd_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsystemd_dhcp_la-dhcp6-network.lo -MD -MP -MF $(DEPDIR)/libsystemd_dhcp_la-dhcp6-network.Tpo -c -o libsystemd_dhcp_la-dhcp6-network.lo `test -f 'dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-network.c' || echo '$(srcdir)/'`dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-network.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsystemd_dhcp_la-dhcp6-network.Tpo $(DEPDIR)/libsystemd_dhcp_la-dhcp6-network.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-network.c' object='libsystemd_dhcp_la-dhcp6-network.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) $(libsystemd_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsystemd_dhcp_la-dhcp6-network.lo `test -f 'dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-network.c' || echo '$(srcdir)/'`dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-network.c
+
+libsystemd_dhcp_la-dhcp6-option.lo: dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-option.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsystemd_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsystemd_dhcp_la-dhcp6-option.lo -MD -MP -MF $(DEPDIR)/libsystemd_dhcp_la-dhcp6-option.Tpo -c -o libsystemd_dhcp_la-dhcp6-option.lo `test -f 'dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-option.c' || echo '$(srcdir)/'`dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-option.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsystemd_dhcp_la-dhcp6-option.Tpo $(DEPDIR)/libsystemd_dhcp_la-dhcp6-option.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-option.c' object='libsystemd_dhcp_la-dhcp6-option.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) $(libsystemd_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsystemd_dhcp_la-dhcp6-option.lo `test -f 'dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-option.c' || echo '$(srcdir)/'`dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-option.c
+
+libsystemd_dhcp_la-network-internal.lo: dhcp-manager/systemd-dhcp/src/libsystemd-network/network-internal.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsystemd_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsystemd_dhcp_la-network-internal.lo -MD -MP -MF $(DEPDIR)/libsystemd_dhcp_la-network-internal.Tpo -c -o libsystemd_dhcp_la-network-internal.lo `test -f 'dhcp-manager/systemd-dhcp/src/libsystemd-network/network-internal.c' || echo '$(srcdir)/'`dhcp-manager/systemd-dhcp/src/libsystemd-network/network-internal.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsystemd_dhcp_la-network-internal.Tpo $(DEPDIR)/libsystemd_dhcp_la-network-internal.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dhcp-manager/systemd-dhcp/src/libsystemd-network/network-internal.c' object='libsystemd_dhcp_la-network-internal.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) $(libsystemd_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsystemd_dhcp_la-network-internal.lo `test -f 'dhcp-manager/systemd-dhcp/src/libsystemd-network/network-internal.c' || echo '$(srcdir)/'`dhcp-manager/systemd-dhcp/src/libsystemd-network/network-internal.c
+
+libsystemd_dhcp_la-sd-dhcp-lease.lo: dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp-lease.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsystemd_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsystemd_dhcp_la-sd-dhcp-lease.lo -MD -MP -MF $(DEPDIR)/libsystemd_dhcp_la-sd-dhcp-lease.Tpo -c -o libsystemd_dhcp_la-sd-dhcp-lease.lo `test -f 'dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp-lease.c' || echo '$(srcdir)/'`dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp-lease.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsystemd_dhcp_la-sd-dhcp-lease.Tpo $(DEPDIR)/libsystemd_dhcp_la-sd-dhcp-lease.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp-lease.c' object='libsystemd_dhcp_la-sd-dhcp-lease.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) $(libsystemd_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsystemd_dhcp_la-sd-dhcp-lease.lo `test -f 'dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp-lease.c' || echo '$(srcdir)/'`dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp-lease.c
+
+libsystemd_dhcp_la-sd-dhcp-client.lo: dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-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) $(libsystemd_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsystemd_dhcp_la-sd-dhcp-client.lo -MD -MP -MF $(DEPDIR)/libsystemd_dhcp_la-sd-dhcp-client.Tpo -c -o libsystemd_dhcp_la-sd-dhcp-client.lo `test -f 'dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp-client.c' || echo '$(srcdir)/'`dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp-client.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsystemd_dhcp_la-sd-dhcp-client.Tpo $(DEPDIR)/libsystemd_dhcp_la-sd-dhcp-client.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp-client.c' object='libsystemd_dhcp_la-sd-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) $(libsystemd_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsystemd_dhcp_la-sd-dhcp-client.lo `test -f 'dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp-client.c' || echo '$(srcdir)/'`dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp-client.c
+
+libsystemd_dhcp_la-dhcp-option.lo: dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-option.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsystemd_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsystemd_dhcp_la-dhcp-option.lo -MD -MP -MF $(DEPDIR)/libsystemd_dhcp_la-dhcp-option.Tpo -c -o libsystemd_dhcp_la-dhcp-option.lo `test -f 'dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-option.c' || echo '$(srcdir)/'`dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-option.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsystemd_dhcp_la-dhcp-option.Tpo $(DEPDIR)/libsystemd_dhcp_la-dhcp-option.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-option.c' object='libsystemd_dhcp_la-dhcp-option.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) $(libsystemd_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsystemd_dhcp_la-dhcp-option.lo `test -f 'dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-option.c' || echo '$(srcdir)/'`dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-option.c
+
+libsystemd_dhcp_la-sd-dhcp6-lease.lo: dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp6-lease.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsystemd_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsystemd_dhcp_la-sd-dhcp6-lease.lo -MD -MP -MF $(DEPDIR)/libsystemd_dhcp_la-sd-dhcp6-lease.Tpo -c -o libsystemd_dhcp_la-sd-dhcp6-lease.lo `test -f 'dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp6-lease.c' || echo '$(srcdir)/'`dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp6-lease.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsystemd_dhcp_la-sd-dhcp6-lease.Tpo $(DEPDIR)/libsystemd_dhcp_la-sd-dhcp6-lease.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp6-lease.c' object='libsystemd_dhcp_la-sd-dhcp6-lease.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) $(libsystemd_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsystemd_dhcp_la-sd-dhcp6-lease.lo `test -f 'dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp6-lease.c' || echo '$(srcdir)/'`dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp6-lease.c
+
+libsystemd_dhcp_la-sd-dhcp6-client.lo: dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp6-client.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsystemd_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsystemd_dhcp_la-sd-dhcp6-client.lo -MD -MP -MF $(DEPDIR)/libsystemd_dhcp_la-sd-dhcp6-client.Tpo -c -o libsystemd_dhcp_la-sd-dhcp6-client.lo `test -f 'dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp6-client.c' || echo '$(srcdir)/'`dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp6-client.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsystemd_dhcp_la-sd-dhcp6-client.Tpo $(DEPDIR)/libsystemd_dhcp_la-sd-dhcp6-client.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp6-client.c' object='libsystemd_dhcp_la-sd-dhcp6-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) $(libsystemd_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsystemd_dhcp_la-sd-dhcp6-client.lo `test -f 'dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp6-client.c' || echo '$(srcdir)/'`dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp6-client.c
+
+libsystemd_dhcp_la-time-util.lo: dhcp-manager/systemd-dhcp/src/shared/time-util.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsystemd_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsystemd_dhcp_la-time-util.lo -MD -MP -MF $(DEPDIR)/libsystemd_dhcp_la-time-util.Tpo -c -o libsystemd_dhcp_la-time-util.lo `test -f 'dhcp-manager/systemd-dhcp/src/shared/time-util.c' || echo '$(srcdir)/'`dhcp-manager/systemd-dhcp/src/shared/time-util.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsystemd_dhcp_la-time-util.Tpo $(DEPDIR)/libsystemd_dhcp_la-time-util.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dhcp-manager/systemd-dhcp/src/shared/time-util.c' object='libsystemd_dhcp_la-time-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) $(libsystemd_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsystemd_dhcp_la-time-util.lo `test -f 'dhcp-manager/systemd-dhcp/src/shared/time-util.c' || echo '$(srcdir)/'`dhcp-manager/systemd-dhcp/src/shared/time-util.c
+
+libsystemd_dhcp_la-util.lo: dhcp-manager/systemd-dhcp/src/shared/util.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsystemd_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsystemd_dhcp_la-util.lo -MD -MP -MF $(DEPDIR)/libsystemd_dhcp_la-util.Tpo -c -o libsystemd_dhcp_la-util.lo `test -f 'dhcp-manager/systemd-dhcp/src/shared/util.c' || echo '$(srcdir)/'`dhcp-manager/systemd-dhcp/src/shared/util.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsystemd_dhcp_la-util.Tpo $(DEPDIR)/libsystemd_dhcp_la-util.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dhcp-manager/systemd-dhcp/src/shared/util.c' object='libsystemd_dhcp_la-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) $(libsystemd_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsystemd_dhcp_la-util.lo `test -f 'dhcp-manager/systemd-dhcp/src/shared/util.c' || echo '$(srcdir)/'`dhcp-manager/systemd-dhcp/src/shared/util.c
+
+libsystemd_dhcp_la-in-addr-util.lo: dhcp-manager/systemd-dhcp/src/shared/in-addr-util.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsystemd_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsystemd_dhcp_la-in-addr-util.lo -MD -MP -MF $(DEPDIR)/libsystemd_dhcp_la-in-addr-util.Tpo -c -o libsystemd_dhcp_la-in-addr-util.lo `test -f 'dhcp-manager/systemd-dhcp/src/shared/in-addr-util.c' || echo '$(srcdir)/'`dhcp-manager/systemd-dhcp/src/shared/in-addr-util.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsystemd_dhcp_la-in-addr-util.Tpo $(DEPDIR)/libsystemd_dhcp_la-in-addr-util.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dhcp-manager/systemd-dhcp/src/shared/in-addr-util.c' object='libsystemd_dhcp_la-in-addr-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) $(libsystemd_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsystemd_dhcp_la-in-addr-util.lo `test -f 'dhcp-manager/systemd-dhcp/src/shared/in-addr-util.c' || echo '$(srcdir)/'`dhcp-manager/systemd-dhcp/src/shared/in-addr-util.c
+
+libsystemd_dhcp_la-siphash24.lo: dhcp-manager/systemd-dhcp/src/shared/siphash24.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsystemd_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsystemd_dhcp_la-siphash24.lo -MD -MP -MF $(DEPDIR)/libsystemd_dhcp_la-siphash24.Tpo -c -o libsystemd_dhcp_la-siphash24.lo `test -f 'dhcp-manager/systemd-dhcp/src/shared/siphash24.c' || echo '$(srcdir)/'`dhcp-manager/systemd-dhcp/src/shared/siphash24.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsystemd_dhcp_la-siphash24.Tpo $(DEPDIR)/libsystemd_dhcp_la-siphash24.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dhcp-manager/systemd-dhcp/src/shared/siphash24.c' object='libsystemd_dhcp_la-siphash24.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) $(libsystemd_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsystemd_dhcp_la-siphash24.lo `test -f 'dhcp-manager/systemd-dhcp/src/shared/siphash24.c' || echo '$(srcdir)/'`dhcp-manager/systemd-dhcp/src/shared/siphash24.c
+
+libsystemd_dhcp_la-fileio.lo: dhcp-manager/systemd-dhcp/src/shared/fileio.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsystemd_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsystemd_dhcp_la-fileio.lo -MD -MP -MF $(DEPDIR)/libsystemd_dhcp_la-fileio.Tpo -c -o libsystemd_dhcp_la-fileio.lo `test -f 'dhcp-manager/systemd-dhcp/src/shared/fileio.c' || echo '$(srcdir)/'`dhcp-manager/systemd-dhcp/src/shared/fileio.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsystemd_dhcp_la-fileio.Tpo $(DEPDIR)/libsystemd_dhcp_la-fileio.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dhcp-manager/systemd-dhcp/src/shared/fileio.c' object='libsystemd_dhcp_la-fileio.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) $(libsystemd_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsystemd_dhcp_la-fileio.lo `test -f 'dhcp-manager/systemd-dhcp/src/shared/fileio.c' || echo '$(srcdir)/'`dhcp-manager/systemd-dhcp/src/shared/fileio.c
+
+libsystemd_dhcp_la-strv.lo: dhcp-manager/systemd-dhcp/src/shared/strv.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsystemd_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsystemd_dhcp_la-strv.lo -MD -MP -MF $(DEPDIR)/libsystemd_dhcp_la-strv.Tpo -c -o libsystemd_dhcp_la-strv.lo `test -f 'dhcp-manager/systemd-dhcp/src/shared/strv.c' || echo '$(srcdir)/'`dhcp-manager/systemd-dhcp/src/shared/strv.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsystemd_dhcp_la-strv.Tpo $(DEPDIR)/libsystemd_dhcp_la-strv.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dhcp-manager/systemd-dhcp/src/shared/strv.c' object='libsystemd_dhcp_la-strv.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) $(libsystemd_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsystemd_dhcp_la-strv.lo `test -f 'dhcp-manager/systemd-dhcp/src/shared/strv.c' || echo '$(srcdir)/'`dhcp-manager/systemd-dhcp/src/shared/strv.c
+
+libsystemd_dhcp_la-utf8.lo: dhcp-manager/systemd-dhcp/src/shared/utf8.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsystemd_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsystemd_dhcp_la-utf8.lo -MD -MP -MF $(DEPDIR)/libsystemd_dhcp_la-utf8.Tpo -c -o libsystemd_dhcp_la-utf8.lo `test -f 'dhcp-manager/systemd-dhcp/src/shared/utf8.c' || echo '$(srcdir)/'`dhcp-manager/systemd-dhcp/src/shared/utf8.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsystemd_dhcp_la-utf8.Tpo $(DEPDIR)/libsystemd_dhcp_la-utf8.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dhcp-manager/systemd-dhcp/src/shared/utf8.c' object='libsystemd_dhcp_la-utf8.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) $(libsystemd_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsystemd_dhcp_la-utf8.lo `test -f 'dhcp-manager/systemd-dhcp/src/shared/utf8.c' || echo '$(srcdir)/'`dhcp-manager/systemd-dhcp/src/shared/utf8.c
+
+libsystemd_dhcp_la-nm-sd-adapt.lo: dhcp-manager/systemd-dhcp/nm-sd-adapt.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsystemd_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsystemd_dhcp_la-nm-sd-adapt.lo -MD -MP -MF $(DEPDIR)/libsystemd_dhcp_la-nm-sd-adapt.Tpo -c -o libsystemd_dhcp_la-nm-sd-adapt.lo `test -f 'dhcp-manager/systemd-dhcp/nm-sd-adapt.c' || echo '$(srcdir)/'`dhcp-manager/systemd-dhcp/nm-sd-adapt.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsystemd_dhcp_la-nm-sd-adapt.Tpo $(DEPDIR)/libsystemd_dhcp_la-nm-sd-adapt.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dhcp-manager/systemd-dhcp/nm-sd-adapt.c' object='libsystemd_dhcp_la-nm-sd-adapt.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) $(libsystemd_dhcp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsystemd_dhcp_la-nm-sd-adapt.lo `test -f 'dhcp-manager/systemd-dhcp/nm-sd-adapt.c' || echo '$(srcdir)/'`dhcp-manager/systemd-dhcp/nm-sd-adapt.c
+
+nm-device-bond.o: devices/nm-device-bond.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-device-bond.o -MD -MP -MF $(DEPDIR)/nm-device-bond.Tpo -c -o nm-device-bond.o `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.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices/nm-device-bond.c' object='nm-device-bond.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-device-bond.o `test -f 'devices/nm-device-bond.c' || echo '$(srcdir)/'`devices/nm-device-bond.c
+
+nm-device-bond.obj: devices/nm-device-bond.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-device-bond.obj -MD -MP -MF $(DEPDIR)/nm-device-bond.Tpo -c -o nm-device-bond.obj `if test -f 'devices/nm-device-bond.c'; then $(CYGPATH_W) 'devices/nm-device-bond.c'; else $(CYGPATH_W) '$(srcdir)/devices/nm-device-bond.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-device-bond.Tpo $(DEPDIR)/nm-device-bond.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices/nm-device-bond.c' object='nm-device-bond.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-device-bond.obj `if test -f 'devices/nm-device-bond.c'; then $(CYGPATH_W) 'devices/nm-device-bond.c'; else $(CYGPATH_W) '$(srcdir)/devices/nm-device-bond.c'; fi`
+
+nm-device-bridge.o: devices/nm-device-bridge.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-device-bridge.o -MD -MP -MF $(DEPDIR)/nm-device-bridge.Tpo -c -o nm-device-bridge.o `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.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices/nm-device-bridge.c' object='nm-device-bridge.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-device-bridge.o `test -f 'devices/nm-device-bridge.c' || echo '$(srcdir)/'`devices/nm-device-bridge.c
+
+nm-device-bridge.obj: devices/nm-device-bridge.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-device-bridge.obj -MD -MP -MF $(DEPDIR)/nm-device-bridge.Tpo -c -o nm-device-bridge.obj `if test -f 'devices/nm-device-bridge.c'; then $(CYGPATH_W) 'devices/nm-device-bridge.c'; else $(CYGPATH_W) '$(srcdir)/devices/nm-device-bridge.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-device-bridge.Tpo $(DEPDIR)/nm-device-bridge.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices/nm-device-bridge.c' object='nm-device-bridge.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-device-bridge.obj `if test -f 'devices/nm-device-bridge.c'; then $(CYGPATH_W) 'devices/nm-device-bridge.c'; else $(CYGPATH_W) '$(srcdir)/devices/nm-device-bridge.c'; fi`
+
+nm-device-ethernet.o: devices/nm-device-ethernet.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-device-ethernet.o -MD -MP -MF $(DEPDIR)/nm-device-ethernet.Tpo -c -o nm-device-ethernet.o `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.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices/nm-device-ethernet.c' object='nm-device-ethernet.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-device-ethernet.o `test -f 'devices/nm-device-ethernet.c' || echo '$(srcdir)/'`devices/nm-device-ethernet.c
+
+nm-device-ethernet.obj: devices/nm-device-ethernet.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-device-ethernet.obj -MD -MP -MF $(DEPDIR)/nm-device-ethernet.Tpo -c -o nm-device-ethernet.obj `if test -f 'devices/nm-device-ethernet.c'; then $(CYGPATH_W) 'devices/nm-device-ethernet.c'; else $(CYGPATH_W) '$(srcdir)/devices/nm-device-ethernet.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-device-ethernet.Tpo $(DEPDIR)/nm-device-ethernet.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices/nm-device-ethernet.c' object='nm-device-ethernet.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-device-ethernet.obj `if test -f 'devices/nm-device-ethernet.c'; then $(CYGPATH_W) 'devices/nm-device-ethernet.c'; else $(CYGPATH_W) '$(srcdir)/devices/nm-device-ethernet.c'; fi`
+
+nm-device-gre.o: devices/nm-device-gre.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-device-gre.o -MD -MP -MF $(DEPDIR)/nm-device-gre.Tpo -c -o nm-device-gre.o `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.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices/nm-device-gre.c' object='nm-device-gre.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-device-gre.o `test -f 'devices/nm-device-gre.c' || echo '$(srcdir)/'`devices/nm-device-gre.c
+
+nm-device-gre.obj: devices/nm-device-gre.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-device-gre.obj -MD -MP -MF $(DEPDIR)/nm-device-gre.Tpo -c -o nm-device-gre.obj `if test -f 'devices/nm-device-gre.c'; then $(CYGPATH_W) 'devices/nm-device-gre.c'; else $(CYGPATH_W) '$(srcdir)/devices/nm-device-gre.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-device-gre.Tpo $(DEPDIR)/nm-device-gre.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices/nm-device-gre.c' object='nm-device-gre.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-device-gre.obj `if test -f 'devices/nm-device-gre.c'; then $(CYGPATH_W) 'devices/nm-device-gre.c'; else $(CYGPATH_W) '$(srcdir)/devices/nm-device-gre.c'; fi`
+
+nm-device-infiniband.o: devices/nm-device-infiniband.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-device-infiniband.o -MD -MP -MF $(DEPDIR)/nm-device-infiniband.Tpo -c -o nm-device-infiniband.o `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.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices/nm-device-infiniband.c' object='nm-device-infiniband.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-device-infiniband.o `test -f 'devices/nm-device-infiniband.c' || echo '$(srcdir)/'`devices/nm-device-infiniband.c
+
+nm-device-infiniband.obj: devices/nm-device-infiniband.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-device-infiniband.obj -MD -MP -MF $(DEPDIR)/nm-device-infiniband.Tpo -c -o nm-device-infiniband.obj `if test -f 'devices/nm-device-infiniband.c'; then $(CYGPATH_W) 'devices/nm-device-infiniband.c'; else $(CYGPATH_W) '$(srcdir)/devices/nm-device-infiniband.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-device-infiniband.Tpo $(DEPDIR)/nm-device-infiniband.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices/nm-device-infiniband.c' object='nm-device-infiniband.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-device-infiniband.obj `if test -f 'devices/nm-device-infiniband.c'; then $(CYGPATH_W) 'devices/nm-device-infiniband.c'; else $(CYGPATH_W) '$(srcdir)/devices/nm-device-infiniband.c'; fi`
+
+nm-device-macvlan.o: devices/nm-device-macvlan.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-device-macvlan.o -MD -MP -MF $(DEPDIR)/nm-device-macvlan.Tpo -c -o nm-device-macvlan.o `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.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices/nm-device-macvlan.c' object='nm-device-macvlan.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-device-macvlan.o `test -f 'devices/nm-device-macvlan.c' || echo '$(srcdir)/'`devices/nm-device-macvlan.c
+
+nm-device-macvlan.obj: devices/nm-device-macvlan.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-device-macvlan.obj -MD -MP -MF $(DEPDIR)/nm-device-macvlan.Tpo -c -o nm-device-macvlan.obj `if test -f 'devices/nm-device-macvlan.c'; then $(CYGPATH_W) 'devices/nm-device-macvlan.c'; else $(CYGPATH_W) '$(srcdir)/devices/nm-device-macvlan.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-device-macvlan.Tpo $(DEPDIR)/nm-device-macvlan.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices/nm-device-macvlan.c' object='nm-device-macvlan.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-device-macvlan.obj `if test -f 'devices/nm-device-macvlan.c'; then $(CYGPATH_W) 'devices/nm-device-macvlan.c'; else $(CYGPATH_W) '$(srcdir)/devices/nm-device-macvlan.c'; fi`
+
+nm-device-tun.o: devices/nm-device-tun.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-device-tun.o -MD -MP -MF $(DEPDIR)/nm-device-tun.Tpo -c -o nm-device-tun.o `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.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices/nm-device-tun.c' object='nm-device-tun.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-device-tun.o `test -f 'devices/nm-device-tun.c' || echo '$(srcdir)/'`devices/nm-device-tun.c
+
+nm-device-tun.obj: devices/nm-device-tun.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-device-tun.obj -MD -MP -MF $(DEPDIR)/nm-device-tun.Tpo -c -o nm-device-tun.obj `if test -f 'devices/nm-device-tun.c'; then $(CYGPATH_W) 'devices/nm-device-tun.c'; else $(CYGPATH_W) '$(srcdir)/devices/nm-device-tun.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-device-tun.Tpo $(DEPDIR)/nm-device-tun.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices/nm-device-tun.c' object='nm-device-tun.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-device-tun.obj `if test -f 'devices/nm-device-tun.c'; then $(CYGPATH_W) 'devices/nm-device-tun.c'; else $(CYGPATH_W) '$(srcdir)/devices/nm-device-tun.c'; fi`
+
+nm-device-veth.o: devices/nm-device-veth.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-device-veth.o -MD -MP -MF $(DEPDIR)/nm-device-veth.Tpo -c -o nm-device-veth.o `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.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices/nm-device-veth.c' object='nm-device-veth.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-device-veth.o `test -f 'devices/nm-device-veth.c' || echo '$(srcdir)/'`devices/nm-device-veth.c
+
+nm-device-veth.obj: devices/nm-device-veth.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-device-veth.obj -MD -MP -MF $(DEPDIR)/nm-device-veth.Tpo -c -o nm-device-veth.obj `if test -f 'devices/nm-device-veth.c'; then $(CYGPATH_W) 'devices/nm-device-veth.c'; else $(CYGPATH_W) '$(srcdir)/devices/nm-device-veth.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-device-veth.Tpo $(DEPDIR)/nm-device-veth.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices/nm-device-veth.c' object='nm-device-veth.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-device-veth.obj `if test -f 'devices/nm-device-veth.c'; then $(CYGPATH_W) 'devices/nm-device-veth.c'; else $(CYGPATH_W) '$(srcdir)/devices/nm-device-veth.c'; fi`
+
+nm-device-vlan.o: devices/nm-device-vlan.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-device-vlan.o -MD -MP -MF $(DEPDIR)/nm-device-vlan.Tpo -c -o nm-device-vlan.o `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.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices/nm-device-vlan.c' object='nm-device-vlan.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-device-vlan.o `test -f 'devices/nm-device-vlan.c' || echo '$(srcdir)/'`devices/nm-device-vlan.c
+
+nm-device-vlan.obj: devices/nm-device-vlan.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-device-vlan.obj -MD -MP -MF $(DEPDIR)/nm-device-vlan.Tpo -c -o nm-device-vlan.obj `if test -f 'devices/nm-device-vlan.c'; then $(CYGPATH_W) 'devices/nm-device-vlan.c'; else $(CYGPATH_W) '$(srcdir)/devices/nm-device-vlan.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-device-vlan.Tpo $(DEPDIR)/nm-device-vlan.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices/nm-device-vlan.c' object='nm-device-vlan.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-device-vlan.obj `if test -f 'devices/nm-device-vlan.c'; then $(CYGPATH_W) 'devices/nm-device-vlan.c'; else $(CYGPATH_W) '$(srcdir)/devices/nm-device-vlan.c'; fi`
+
+nm-device-vxlan.o: devices/nm-device-vxlan.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-device-vxlan.o -MD -MP -MF $(DEPDIR)/nm-device-vxlan.Tpo -c -o nm-device-vxlan.o `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.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices/nm-device-vxlan.c' object='nm-device-vxlan.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-device-vxlan.o `test -f 'devices/nm-device-vxlan.c' || echo '$(srcdir)/'`devices/nm-device-vxlan.c
+
+nm-device-vxlan.obj: devices/nm-device-vxlan.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-device-vxlan.obj -MD -MP -MF $(DEPDIR)/nm-device-vxlan.Tpo -c -o nm-device-vxlan.obj `if test -f 'devices/nm-device-vxlan.c'; then $(CYGPATH_W) 'devices/nm-device-vxlan.c'; else $(CYGPATH_W) '$(srcdir)/devices/nm-device-vxlan.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-device-vxlan.Tpo $(DEPDIR)/nm-device-vxlan.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices/nm-device-vxlan.c' object='nm-device-vxlan.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-device-vxlan.obj `if test -f 'devices/nm-device-vxlan.c'; then $(CYGPATH_W) 'devices/nm-device-vxlan.c'; else $(CYGPATH_W) '$(srcdir)/devices/nm-device-vxlan.c'; fi`
+
+nm-dhcp-dhclient.o: dhcp-manager/nm-dhcp-dhclient.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-dhcp-dhclient.o -MD -MP -MF $(DEPDIR)/nm-dhcp-dhclient.Tpo -c -o nm-dhcp-dhclient.o `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.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dhcp-manager/nm-dhcp-dhclient.c' object='nm-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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-dhcp-dhclient.o `test -f 'dhcp-manager/nm-dhcp-dhclient.c' || echo '$(srcdir)/'`dhcp-manager/nm-dhcp-dhclient.c
+
+nm-dhcp-dhclient.obj: dhcp-manager/nm-dhcp-dhclient.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-dhcp-dhclient.obj -MD -MP -MF $(DEPDIR)/nm-dhcp-dhclient.Tpo -c -o nm-dhcp-dhclient.obj `if test -f 'dhcp-manager/nm-dhcp-dhclient.c'; then $(CYGPATH_W) 'dhcp-manager/nm-dhcp-dhclient.c'; else $(CYGPATH_W) '$(srcdir)/dhcp-manager/nm-dhcp-dhclient.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-dhcp-dhclient.Tpo $(DEPDIR)/nm-dhcp-dhclient.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dhcp-manager/nm-dhcp-dhclient.c' object='nm-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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-dhcp-dhclient.obj `if test -f 'dhcp-manager/nm-dhcp-dhclient.c'; then $(CYGPATH_W) 'dhcp-manager/nm-dhcp-dhclient.c'; else $(CYGPATH_W) '$(srcdir)/dhcp-manager/nm-dhcp-dhclient.c'; fi`
+
+nm-dhcp-dhclient-utils.o: dhcp-manager/nm-dhcp-dhclient-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-dhcp-dhclient-utils.o -MD -MP -MF $(DEPDIR)/nm-dhcp-dhclient-utils.Tpo -c -o nm-dhcp-dhclient-utils.o `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.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dhcp-manager/nm-dhcp-dhclient-utils.c' object='nm-dhcp-dhclient-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 nm-dhcp-dhclient-utils.o `test -f 'dhcp-manager/nm-dhcp-dhclient-utils.c' || echo '$(srcdir)/'`dhcp-manager/nm-dhcp-dhclient-utils.c
+
+nm-dhcp-dhclient-utils.obj: dhcp-manager/nm-dhcp-dhclient-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-dhcp-dhclient-utils.obj -MD -MP -MF $(DEPDIR)/nm-dhcp-dhclient-utils.Tpo -c -o nm-dhcp-dhclient-utils.obj `if test -f 'dhcp-manager/nm-dhcp-dhclient-utils.c'; then $(CYGPATH_W) 'dhcp-manager/nm-dhcp-dhclient-utils.c'; else $(CYGPATH_W) '$(srcdir)/dhcp-manager/nm-dhcp-dhclient-utils.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-dhcp-dhclient-utils.Tpo $(DEPDIR)/nm-dhcp-dhclient-utils.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dhcp-manager/nm-dhcp-dhclient-utils.c' object='nm-dhcp-dhclient-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 nm-dhcp-dhclient-utils.obj `if test -f 'dhcp-manager/nm-dhcp-dhclient-utils.c'; then $(CYGPATH_W) 'dhcp-manager/nm-dhcp-dhclient-utils.c'; else $(CYGPATH_W) '$(srcdir)/dhcp-manager/nm-dhcp-dhclient-utils.c'; fi`
+
+nm-dhcp-dhcpcd.o: dhcp-manager/nm-dhcp-dhcpcd.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-dhcp-dhcpcd.o -MD -MP -MF $(DEPDIR)/nm-dhcp-dhcpcd.Tpo -c -o nm-dhcp-dhcpcd.o `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.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dhcp-manager/nm-dhcp-dhcpcd.c' object='nm-dhcp-dhcpcd.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-dhcp-dhcpcd.o `test -f 'dhcp-manager/nm-dhcp-dhcpcd.c' || echo '$(srcdir)/'`dhcp-manager/nm-dhcp-dhcpcd.c
+
+nm-dhcp-dhcpcd.obj: dhcp-manager/nm-dhcp-dhcpcd.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-dhcp-dhcpcd.obj -MD -MP -MF $(DEPDIR)/nm-dhcp-dhcpcd.Tpo -c -o nm-dhcp-dhcpcd.obj `if test -f 'dhcp-manager/nm-dhcp-dhcpcd.c'; then $(CYGPATH_W) 'dhcp-manager/nm-dhcp-dhcpcd.c'; else $(CYGPATH_W) '$(srcdir)/dhcp-manager/nm-dhcp-dhcpcd.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-dhcp-dhcpcd.Tpo $(DEPDIR)/nm-dhcp-dhcpcd.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dhcp-manager/nm-dhcp-dhcpcd.c' object='nm-dhcp-dhcpcd.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-dhcp-dhcpcd.obj `if test -f 'dhcp-manager/nm-dhcp-dhcpcd.c'; then $(CYGPATH_W) 'dhcp-manager/nm-dhcp-dhcpcd.c'; else $(CYGPATH_W) '$(srcdir)/dhcp-manager/nm-dhcp-dhcpcd.c'; fi`
+
+nm-dhcp-systemd.o: dhcp-manager/nm-dhcp-systemd.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-dhcp-systemd.o -MD -MP -MF $(DEPDIR)/nm-dhcp-systemd.Tpo -c -o nm-dhcp-systemd.o `test -f 'dhcp-manager/nm-dhcp-systemd.c' || echo '$(srcdir)/'`dhcp-manager/nm-dhcp-systemd.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-dhcp-systemd.Tpo $(DEPDIR)/nm-dhcp-systemd.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dhcp-manager/nm-dhcp-systemd.c' object='nm-dhcp-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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-dhcp-systemd.o `test -f 'dhcp-manager/nm-dhcp-systemd.c' || echo '$(srcdir)/'`dhcp-manager/nm-dhcp-systemd.c
+
+nm-dhcp-systemd.obj: dhcp-manager/nm-dhcp-systemd.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-dhcp-systemd.obj -MD -MP -MF $(DEPDIR)/nm-dhcp-systemd.Tpo -c -o nm-dhcp-systemd.obj `if test -f 'dhcp-manager/nm-dhcp-systemd.c'; then $(CYGPATH_W) 'dhcp-manager/nm-dhcp-systemd.c'; else $(CYGPATH_W) '$(srcdir)/dhcp-manager/nm-dhcp-systemd.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-dhcp-systemd.Tpo $(DEPDIR)/nm-dhcp-systemd.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dhcp-manager/nm-dhcp-systemd.c' object='nm-dhcp-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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-dhcp-systemd.obj `if test -f 'dhcp-manager/nm-dhcp-systemd.c'; then $(CYGPATH_W) 'dhcp-manager/nm-dhcp-systemd.c'; else $(CYGPATH_W) '$(srcdir)/dhcp-manager/nm-dhcp-systemd.c'; fi`
+
mostlyclean-libtool:
-rm -f *.lo
@@ -1742,7 +2221,7 @@ check: $(BUILT_SOURCES)
all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(DATA)
installdirs: installdirs-recursive
installdirs-am:
- for dir in "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(dbusservicedir)"; do \
+ for dir in "$(DESTDIR)$(libexecdir)" "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(dbusservicedir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: $(BUILT_SOURCES)
@@ -1780,8 +2259,8 @@ maintainer-clean-generic:
-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
clean: clean-recursive
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
- clean-sbinPROGRAMS mostlyclean-am
+clean-am: clean-generic clean-libexecPROGRAMS clean-libtool \
+ clean-noinstLTLIBRARIES clean-sbinPROGRAMS mostlyclean-am
distclean: distclean-recursive
-rm -rf ./$(DEPDIR)
@@ -1808,7 +2287,7 @@ install-dvi: install-dvi-recursive
install-dvi-am:
-install-exec-am: install-sbinPROGRAMS
+install-exec-am: install-libexecPROGRAMS install-sbinPROGRAMS
install-html: install-html-recursive
@@ -1848,27 +2327,29 @@ ps: ps-recursive
ps-am:
-uninstall-am: uninstall-dbusserviceDATA uninstall-sbinPROGRAMS
+uninstall-am: uninstall-dbusserviceDATA uninstall-libexecPROGRAMS \
+ uninstall-sbinPROGRAMS
.MAKE: $(am__recursive_targets) all check install install-am \
install-data-am install-strip
.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
- check-am clean clean-generic clean-libtool \
- clean-noinstLTLIBRARIES clean-sbinPROGRAMS 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-data-hook install-dbusserviceDATA \
- install-dvi install-dvi-am install-exec install-exec-am \
- install-html install-html-am install-info install-info-am \
+ check-am clean clean-generic clean-libexecPROGRAMS \
+ clean-libtool clean-noinstLTLIBRARIES clean-sbinPROGRAMS \
+ 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-data-hook \
+ install-dbusserviceDATA install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-libexecPROGRAMS \
install-man install-pdf install-pdf-am install-ps \
install-ps-am install-sbinPROGRAMS 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-dbusserviceDATA \
- uninstall-sbinPROGRAMS
+ uninstall-libexecPROGRAMS uninstall-sbinPROGRAMS
include $(GLIB_MAKEFILE)
diff --git a/src/NetworkManagerUtils.c b/src/NetworkManagerUtils.c
index 0aaa344f9..2c291cdbc 100644
--- a/src/NetworkManagerUtils.c
+++ b/src/NetworkManagerUtils.c
@@ -15,20 +15,30 @@
* 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 2004 - 2014 Red Hat, Inc.
+ * Copyright 2005 - 2008 Novell, Inc.
*/
+#include "config.h"
+
#include <glib.h>
+#include <gio/gio.h>
+#include <glib/gi18n.h>
#include <errno.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <resolv.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <linux/if.h>
+#include <linux/if_infiniband.h>
#include "NetworkManagerUtils.h"
+#include "nm-platform.h"
#include "nm-utils.h"
+#include "nm-core-internal.h"
#include "nm-logging.h"
#include "nm-device.h"
#include "nm-setting-connection.h"
@@ -36,40 +46,60 @@
#include "nm-setting-ip6-config.h"
#include "nm-setting-wireless.h"
#include "nm-setting-wireless-security.h"
-#include "nm-manager-auth.h"
+#include "nm-auth-utils.h"
#include "nm-posix-signals.h"
+#include "nm-dbus-glib-types.h"
+
+/*
+ * Some toolchains (E.G. uClibc 0.9.33 and earlier) don't export
+ * CLOCK_BOOTTIME even though the kernel supports it, so provide a
+ * local definition
+ */
+#ifndef CLOCK_BOOTTIME
+#define CLOCK_BOOTTIME 7
+#endif
/*
- * nm_ethernet_address_is_valid
+ * nm_ethernet_address_is_valid:
+ * @addr: pointer to a binary or ASCII Ethernet address
+ * @len: length of @addr, or -1 if @addr is ASCII
*
* Compares an Ethernet address against known invalid addresses.
- *
+
+ * Returns: %TRUE if @addr is a valid Ethernet address, %FALSE if it is not.
*/
gboolean
-nm_ethernet_address_is_valid (const struct ether_addr *test_addr)
+nm_ethernet_address_is_valid (gconstpointer addr, gssize len)
{
guint8 invalid_addr1[ETH_ALEN] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
guint8 invalid_addr2[ETH_ALEN] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
guint8 invalid_addr3[ETH_ALEN] = {0x44, 0x44, 0x44, 0x44, 0x44, 0x44};
guint8 invalid_addr4[ETH_ALEN] = {0x00, 0x30, 0xb4, 0x00, 0x00, 0x00}; /* prism54 dummy MAC */
+ guchar first_octet;
- g_return_val_if_fail (test_addr != NULL, FALSE);
+ g_return_val_if_fail (addr != NULL, FALSE);
+ g_return_val_if_fail (len == ETH_ALEN || len == -1, FALSE);
/* Compare the AP address the card has with invalid ethernet MAC addresses. */
- if (!memcmp (test_addr->ether_addr_octet, &invalid_addr1, ETH_ALEN))
+ if (nm_utils_hwaddr_matches (addr, len, invalid_addr1, ETH_ALEN))
return FALSE;
- if (!memcmp (test_addr->ether_addr_octet, &invalid_addr2, ETH_ALEN))
+ if (nm_utils_hwaddr_matches (addr, len, invalid_addr2, ETH_ALEN))
return FALSE;
- if (!memcmp (test_addr->ether_addr_octet, &invalid_addr3, ETH_ALEN))
+ if (nm_utils_hwaddr_matches (addr, len, invalid_addr3, ETH_ALEN))
return FALSE;
- if (!memcmp (test_addr->ether_addr_octet, &invalid_addr4, ETH_ALEN))
+ if (nm_utils_hwaddr_matches (addr, len, invalid_addr4, ETH_ALEN))
return FALSE;
- if (test_addr->ether_addr_octet[0] & 1) /* Multicast addresses */
- return FALSE;
+ /* Check for multicast address */
+ if (len == -1)
+ first_octet = strtoul (addr, NULL, 16);
+ else
+ first_octet = ((guint8 *)addr)[0];
+ if (first_octet & 0x01)
+ return FALSE;
return TRUE;
}
@@ -92,15 +122,15 @@ nm_utils_ip4_address_clear_host_address (in_addr_t addr, guint8 plen)
* @src: source ip6 address
* @plen: prefix length of network
*
- * Note: this function is self assignment save, to update @src inplace, set both
+ * Note: this function is self assignment safe, to update @src inplace, set both
* @dst and @src to the same destination.
*/
-void
+const struct in6_addr *
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);
+ g_return_val_if_fail (plen <= 128, NULL);
+ g_return_val_if_fail (src, NULL);
+ g_return_val_if_fail (dst, NULL);
if (plen < 128) {
guint nbytes = plen / 8;
@@ -116,6 +146,8 @@ nm_utils_ip6_address_clear_host_address (struct in6_addr *dst, const struct in6_
memset (&dst->s6_addr[nbytes], 0, 16 - nbytes);
} else if (src != dst)
*dst = *src;
+
+ return dst;
}
@@ -144,6 +176,657 @@ nm_spawn_process (const char *args)
return status;
}
+/**
+ * nm_utils_get_start_time_for_pid:
+ * @pid: the process identifier
+ *
+ * Originally copied from polkit source (src/polkit/polkitunixprocess.c)
+ * and adjusted.
+ *
+ * Returns: the timestamp when the process started (by parsing /proc/$PID/stat).
+ * If an error occurs (e.g. the process does not exist), 0 is returned.
+ *
+ * The returned start time counts since boot, in the unit HZ (with HZ usually being (1/100) seconds)
+ **/
+guint64
+nm_utils_get_start_time_for_pid (pid_t pid)
+{
+ guint64 start_time;
+ gchar *filename;
+ gchar *contents;
+ size_t length;
+ gchar **tokens;
+ guint num_tokens;
+ gchar *p;
+ gchar *endp;
+
+ start_time = 0;
+ contents = NULL;
+
+ g_return_val_if_fail (pid > 0, 0);
+
+ filename = g_strdup_printf ("/proc/%"G_GUINT64_FORMAT"/stat", (guint64) pid);
+
+ if (!g_file_get_contents (filename, &contents, &length, NULL))
+ goto out;
+
+ /* start time is the token at index 19 after the '(process name)' entry - since only this
+ * field can contain the ')' character, search backwards for this to avoid malicious
+ * processes trying to fool us
+ */
+ p = strrchr (contents, ')');
+ if (p == NULL)
+ goto out;
+ p += 2; /* skip ') ' */
+ if (p - contents >= (int) length)
+ goto out;
+
+ tokens = g_strsplit (p, " ", 0);
+
+ num_tokens = g_strv_length (tokens);
+
+ if (num_tokens < 20)
+ goto out;
+
+ start_time = strtoull (tokens[19], &endp, 10);
+ if (endp == tokens[19])
+ goto out;
+
+ g_strfreev (tokens);
+
+ out:
+ g_free (filename);
+ g_free (contents);
+
+ return start_time;
+}
+
+/******************************************************************************************/
+
+typedef struct {
+ pid_t pid;
+ guint64 log_domain;
+ union {
+ struct {
+ gint64 wait_start_us;
+ guint source_timeout_kill_id;
+ } async;
+ struct {
+ gboolean success;
+ int child_status;
+ } sync;
+ };
+ NMUtilsKillChildAsyncCb callback;
+ void *user_data;
+
+ char log_name[1]; /* variable-length object, must be last element!! */
+} KillChildAsyncData;
+
+#define LOG_NAME_FMT "kill child process '%s' (%ld)"
+#define LOG_NAME_PROCESS_FMT "kill process '%s' (%ld)"
+#define LOG_NAME_ARGS log_name,(long)pid
+
+static KillChildAsyncData *
+_kc_async_data_alloc (pid_t pid, guint64 log_domain, const char *log_name, NMUtilsKillChildAsyncCb callback, void *user_data)
+{
+ KillChildAsyncData *data;
+ size_t log_name_len;
+
+ /* append the name at the end of our KillChildAsyncData. */
+ log_name_len = strlen (LOG_NAME_FMT) + 20 + strlen (log_name);
+ data = g_malloc (sizeof (KillChildAsyncData) - 1 + log_name_len);
+ g_snprintf (data->log_name, log_name_len, LOG_NAME_FMT, LOG_NAME_ARGS);
+
+ data->pid = pid;
+ data->user_data = user_data;
+ data->callback = callback;
+ data->log_domain = log_domain;
+
+ return data;
+}
+
+#define KC_EXIT_TO_STRING_BUF_SIZE 128
+static const char *
+_kc_exit_to_string (char *buf, int exit)
+#define _kc_exit_to_string(buf, exit) ( G_STATIC_ASSERT_EXPR(sizeof (buf) == KC_EXIT_TO_STRING_BUF_SIZE && sizeof ((buf)[0]) == 1), _kc_exit_to_string (buf, exit) )
+{
+ if (WIFEXITED (exit))
+ g_snprintf (buf, KC_EXIT_TO_STRING_BUF_SIZE, "normally with status %d", WEXITSTATUS (exit));
+ else if (WIFSIGNALED (exit))
+ g_snprintf (buf, KC_EXIT_TO_STRING_BUF_SIZE, "by signal %d", WTERMSIG (exit));
+ else
+ g_snprintf (buf, KC_EXIT_TO_STRING_BUF_SIZE, "with unexpected status %d", exit);
+ return buf;
+}
+
+static const char *
+_kc_signal_to_string (int sig)
+{
+ switch (sig) {
+ case 0: return "no signal (0)";
+ case SIGKILL: return "SIGKILL (" G_STRINGIFY (SIGKILL) ")";
+ case SIGTERM: return "SIGTERM (" G_STRINGIFY (SIGTERM) ")";
+ default:
+ return "Unexpected signal";
+ }
+}
+
+#define KC_WAITED_TO_STRING 100
+static const char *
+_kc_waited_to_string (char *buf, gint64 wait_start_us)
+#define _kc_waited_to_string(buf, wait_start_us) ( G_STATIC_ASSERT_EXPR(sizeof (buf) == KC_WAITED_TO_STRING && sizeof ((buf)[0]) == 1), _kc_waited_to_string (buf, wait_start_us) )
+{
+ g_snprintf (buf, KC_WAITED_TO_STRING, " (%ld usec elapsed)", (long) (nm_utils_get_monotonic_timestamp_us () - wait_start_us));
+ return buf;
+}
+
+static void
+_kc_cb_watch_child (GPid pid, gint status, gpointer user_data)
+{
+ KillChildAsyncData *data = user_data;
+ char buf_exit[KC_EXIT_TO_STRING_BUF_SIZE], buf_wait[KC_WAITED_TO_STRING];
+
+ if (data->async.source_timeout_kill_id)
+ g_source_remove (data->async.source_timeout_kill_id);
+
+ nm_log_dbg (data->log_domain, "%s: terminated %s%s",
+ data->log_name, _kc_exit_to_string (buf_exit, status),
+ _kc_waited_to_string (buf_wait, data->async.wait_start_us));
+
+ if (data->callback)
+ data->callback (pid, TRUE, status, data->user_data);
+
+ g_free (data);
+}
+
+static gboolean
+_kc_cb_timeout_grace_period (void *user_data)
+{
+ KillChildAsyncData *data = user_data;
+ int ret, errsv;
+
+ data->async.source_timeout_kill_id = 0;
+
+ if ((ret = kill (data->pid, SIGKILL)) != 0) {
+ errsv = errno;
+ /* ESRCH means, process does not exist or is already a zombie. */
+ if (errsv != ESRCH) {
+ nm_log_err (LOGD_CORE | data->log_domain, "%s: kill(SIGKILL) returned unexpected return value %d: (%s, %d)",
+ data->log_name, ret, strerror (errsv), errsv);
+ }
+ } else {
+ nm_log_dbg (data->log_domain, "%s: process not terminated after %ld usec. Sending SIGKILL signal",
+ data->log_name, (long) (nm_utils_get_monotonic_timestamp_us () - data->async.wait_start_us));
+ }
+
+ return G_SOURCE_REMOVE;
+}
+
+static gboolean
+_kc_invoke_callback_idle (gpointer user_data)
+{
+ KillChildAsyncData *data = user_data;
+
+ if (data->sync.success) {
+ char buf_exit[KC_EXIT_TO_STRING_BUF_SIZE];
+
+ nm_log_dbg (data->log_domain, "%s: invoke callback: terminated %s",
+ data->log_name, _kc_exit_to_string (buf_exit, data->sync.child_status));
+ } else
+ nm_log_dbg (data->log_domain, "%s: invoke callback: killing child failed", data->log_name);
+
+ data->callback (data->pid, data->sync.success, data->sync.child_status, data->user_data);
+ g_free (data);
+
+ return G_SOURCE_REMOVE;
+}
+
+static void
+_kc_invoke_callback (pid_t pid, guint64 log_domain, const char *log_name, NMUtilsKillChildAsyncCb callback, void *user_data, gboolean success, int child_status)
+{
+ KillChildAsyncData *data;
+
+ if (!callback)
+ return;
+
+ data = _kc_async_data_alloc (pid, log_domain, log_name, callback, user_data);
+ data->sync.success = success;
+ data->sync.child_status = child_status;
+
+ g_idle_add (_kc_invoke_callback_idle, data);
+}
+
+/* nm_utils_kill_child_async:
+ * @pid: the process id of the process to kill
+ * @sig: signal to send initially. Set to 0 to send not signal.
+ * @log_domain: the logging domain used for logging (LOGD_NONE to suppress logging)
+ * @log_name: for logging, the name of the processes to kill
+ * @wait_before_kill_msec: Waittime in milliseconds before sending %SIGKILL signal. Set this value
+ * to zero, not to send %SIGKILL. If @sig is already %SIGKILL, this parameter is ignored.
+ * @callback: (allow-none): callback after the child terminated. This function will always
+ * be invoked asynchronously.
+ * @user_data: passed on to callback
+ *
+ * Uses g_child_watch_add(), so note the glib comment: if you obtain pid from g_spawn_async() or
+ * g_spawn_async_with_pipes() you will need to pass %G_SPAWN_DO_NOT_REAP_CHILD as flag to the spawn
+ * function for the child watching to work.
+ * Also note, that you must g_source_remove() any other child watchers for @pid because glib
+ * supports only one watcher per child.
+ **/
+void
+nm_utils_kill_child_async (pid_t pid, int sig, guint64 log_domain,
+ const char *log_name, guint32 wait_before_kill_msec,
+ NMUtilsKillChildAsyncCb callback, void *user_data)
+{
+ int status = 0, errsv;
+ pid_t ret;
+ KillChildAsyncData *data;
+ char buf_exit[KC_EXIT_TO_STRING_BUF_SIZE];
+
+ g_return_if_fail (pid > 0);
+ g_return_if_fail (log_name != NULL);
+
+ /* let's see if the child already terminated... */
+ ret = waitpid (pid, &status, WNOHANG);
+ if (ret > 0) {
+ nm_log_dbg (log_domain, LOG_NAME_FMT ": process %ld already terminated %s",
+ LOG_NAME_ARGS, (long) ret, _kc_exit_to_string (buf_exit, status));
+ _kc_invoke_callback (pid, log_domain, log_name, callback, user_data, TRUE, status);
+ return;
+ } else if (ret != 0) {
+ errsv = errno;
+ /* ECHILD means, the process is not a child/does not exist or it has SIGCHILD blocked. */
+ if (errsv != ECHILD) {
+ nm_log_err (LOGD_CORE | log_domain, LOG_NAME_FMT ": unexpected error while waitpid: %s (%d)",
+ LOG_NAME_ARGS, strerror (errsv), errsv);
+ _kc_invoke_callback (pid, log_domain, log_name, callback, user_data, FALSE, -1);
+ return;
+ }
+ }
+
+ /* send the first signal. */
+ if (kill (pid, sig) != 0) {
+ errsv = errno;
+ /* ESRCH means, process does not exist or is already a zombie. */
+ if (errsv != ESRCH) {
+ nm_log_err (LOGD_CORE | log_domain, LOG_NAME_FMT ": unexpected error sending %s: %s (%d)",
+ LOG_NAME_ARGS, _kc_signal_to_string (sig), strerror (errsv), errsv);
+ _kc_invoke_callback (pid, log_domain, log_name, callback, user_data, FALSE, -1);
+ return;
+ }
+
+ /* let's try again with waitpid, probably there was a race... */
+ ret = waitpid (pid, &status, 0);
+ if (ret > 0) {
+ nm_log_dbg (log_domain, LOG_NAME_FMT ": process %ld already terminated %s",
+ LOG_NAME_ARGS, (long) ret, _kc_exit_to_string (buf_exit, status));
+ _kc_invoke_callback (pid, log_domain, log_name, callback, user_data, TRUE, status);
+ } else {
+ errsv = errno;
+ nm_log_err (LOGD_CORE | log_domain, LOG_NAME_FMT ": failed due to unexpected return value %ld by waitpid (%s, %d) after sending %s",
+ LOG_NAME_ARGS, (long) ret, strerror (errsv), errsv, _kc_signal_to_string (sig));
+ _kc_invoke_callback (pid, log_domain, log_name, callback, user_data, FALSE, -1);
+ }
+ return;
+ }
+
+ data = _kc_async_data_alloc (pid, log_domain, log_name, callback, user_data);
+ data->async.wait_start_us = nm_utils_get_monotonic_timestamp_us ();
+
+ if (sig != SIGKILL && wait_before_kill_msec > 0) {
+ data->async.source_timeout_kill_id = g_timeout_add (wait_before_kill_msec, _kc_cb_timeout_grace_period, data);
+ nm_log_dbg (log_domain, "%s: wait for process to terminate after sending %s (send SIGKILL in %ld milliseconds)...",
+ data->log_name, _kc_signal_to_string (sig), (long) wait_before_kill_msec);
+ } else {
+ data->async.source_timeout_kill_id = 0;
+ nm_log_dbg (log_domain, "%s: wait for process to terminate after sending %s...",
+ data->log_name, _kc_signal_to_string (sig));
+ }
+
+ g_child_watch_add (pid, _kc_cb_watch_child, data);
+}
+
+static inline gulong
+_sleep_duration_convert_ms_to_us (guint32 sleep_duration_msec)
+{
+ if (sleep_duration_msec > 0) {
+ guint64 x = (gint64) sleep_duration_msec * (guint64) 1000L;
+
+ return x < G_MAXULONG ? (gulong) x : G_MAXULONG;
+ }
+ return G_USEC_PER_SEC / 20;
+}
+
+/* nm_utils_kill_child_sync:
+ * @pid: process id to kill
+ * @sig: signal to sent initially. If 0, no signal is sent. If %SIGKILL, the
+ * second %SIGKILL signal is not sent after @wait_before_kill_msec milliseconds.
+ * @log_domain: log debug information for this domain. Errors and warnings are logged both
+ * as %LOGD_CORE and @log_domain.
+ * @log_name: name of the process to kill for logging.
+ * @child_status: (out) (allow-none): return the exit status of the child, if no error occured.
+ * @wait_before_kill_msec: Waittime in milliseconds before sending %SIGKILL signal. Set this value
+ * to zero, not to send %SIGKILL. If @sig is already %SIGKILL, this parameter has not effect.
+ * @sleep_duration_msec: the synchronous function sleeps repeatedly waiting for the child to terminate.
+ * Set to zero, to use the default (meaning 20 wakeups per seconds).
+ *
+ * Kill a child process synchronously and wait. The function first checks if the child already terminated
+ * and if it did, return the exit status. Otherwise send one @sig signal. @sig will always be
+ * sent unless the child already exited. If the child does not exit within @wait_before_kill_msec milliseconds,
+ * the function will send %SIGKILL and waits for the child indefinitly. If @wait_before_kill_msec is zero, no
+ * %SIGKILL signal will be sent.
+ **/
+gboolean
+nm_utils_kill_child_sync (pid_t pid, int sig, guint64 log_domain, const char *log_name,
+ int *child_status, guint32 wait_before_kill_msec,
+ guint32 sleep_duration_msec)
+{
+ int status = 0, errsv;
+ pid_t ret;
+ gboolean success = FALSE;
+ gboolean was_waiting = FALSE, send_kill = FALSE;
+ char buf_exit[KC_EXIT_TO_STRING_BUF_SIZE];
+ char buf_wait[KC_WAITED_TO_STRING];
+ gint64 wait_start_us;
+
+ g_return_val_if_fail (pid > 0, FALSE);
+ g_return_val_if_fail (log_name != NULL, FALSE);
+
+ /* check if the child process already terminated... */
+ ret = waitpid (pid, &status, WNOHANG);
+ if (ret > 0) {
+ nm_log_dbg (log_domain, LOG_NAME_FMT ": process %ld already terminated %s",
+ LOG_NAME_ARGS, (long) ret, _kc_exit_to_string (buf_exit, status));
+ success = TRUE;
+ goto out;
+ } else if (ret != 0) {
+ errsv = errno;
+ /* ECHILD means, the process is not a child/does not exist or it has SIGCHILD blocked. */
+ if (errsv != ECHILD) {
+ nm_log_err (LOGD_CORE | log_domain, LOG_NAME_FMT ": unexpected error while waitpid: %s (%d)",
+ LOG_NAME_ARGS, strerror (errsv), errsv);
+ goto out;
+ }
+ }
+
+ /* send first signal @sig */
+ if (kill (pid, sig) != 0) {
+ errsv = errno;
+ /* ESRCH means, process does not exist or is already a zombie. */
+ if (errsv != ESRCH) {
+ nm_log_err (LOGD_CORE | log_domain, LOG_NAME_FMT ": failed to send %s: %s (%d)",
+ LOG_NAME_ARGS, _kc_signal_to_string (sig), strerror (errsv), errsv);
+ } else {
+ /* let's try again with waitpid, probably there was a race... */
+ ret = waitpid (pid, &status, 0);
+ if (ret > 0) {
+ nm_log_dbg (log_domain, LOG_NAME_FMT ": process %ld already terminated %s",
+ LOG_NAME_ARGS, (long) ret, _kc_exit_to_string (buf_exit, status));
+ success = TRUE;
+ } else {
+ errsv = errno;
+ nm_log_err (LOGD_CORE | log_domain, LOG_NAME_FMT ": failed due to unexpected return value %ld by waitpid (%s, %d) after sending %s",
+ LOG_NAME_ARGS, (long) ret, strerror (errsv), errsv, _kc_signal_to_string (sig));
+ }
+ }
+ goto out;
+ }
+
+ wait_start_us = nm_utils_get_monotonic_timestamp_us ();
+
+ /* wait for the process to terminated... */
+ if (sig != SIGKILL) {
+ gint64 wait_until, now;
+ gulong sleep_time, sleep_duration_usec;
+ int loop_count = 0;
+
+ sleep_duration_usec = _sleep_duration_convert_ms_to_us (sleep_duration_msec);
+ wait_until = wait_before_kill_msec <= 0 ? 0 : wait_start_us + (((gint64) wait_before_kill_msec) * 1000L);
+
+ while (TRUE) {
+ ret = waitpid (pid, &status, WNOHANG);
+ if (ret > 0) {
+ nm_log_dbg (log_domain, LOG_NAME_FMT ": after sending %s, process %ld exited %s%s",
+ LOG_NAME_ARGS, _kc_signal_to_string (sig), (long) ret, _kc_exit_to_string (buf_exit, status),
+ was_waiting ? _kc_waited_to_string (buf_wait, wait_start_us) : "");
+ success = TRUE;
+ goto out;
+ }
+ if (ret == -1) {
+ errsv = errno;
+ /* ECHILD means, the process is not a child/does not exist or it has SIGCHILD blocked. */
+ if (errsv != ECHILD) {
+ nm_log_err (LOGD_CORE | log_domain, LOG_NAME_FMT ": after sending %s, waitpid failed with %s (%d)%s",
+ LOG_NAME_ARGS, _kc_signal_to_string (sig), strerror (errsv), errsv,
+ was_waiting ? _kc_waited_to_string (buf_wait, wait_start_us) : "");
+ goto out;
+ }
+ }
+
+ if (!wait_until)
+ break;
+
+ now = nm_utils_get_monotonic_timestamp_us ();
+ if (now >= wait_until)
+ break;
+
+ if (!was_waiting) {
+ nm_log_dbg (log_domain, LOG_NAME_FMT ": waiting up to %ld milliseconds for process to terminate normally after sending %s...",
+ LOG_NAME_ARGS, (long) MAX (wait_before_kill_msec, 0), _kc_signal_to_string (sig));
+ was_waiting = TRUE;
+ }
+
+ sleep_time = MIN (wait_until - now, sleep_duration_usec);
+ if (loop_count < 20) {
+ /* At the beginning we expect the process to die fast.
+ * Limit the sleep time, the limit doubles with every iteration. */
+ sleep_time = MIN (sleep_time, (((guint64) 1) << loop_count) * G_USEC_PER_SEC / 2000);
+ loop_count++;
+ }
+ g_usleep (sleep_time);
+ }
+
+ /* send SIGKILL, if called with @wait_before_kill_msec > 0 */
+ if (wait_until) {
+ nm_log_dbg (log_domain, LOG_NAME_FMT ": sending SIGKILL...", LOG_NAME_ARGS);
+
+ send_kill = TRUE;
+ if (kill (pid, SIGKILL) != 0) {
+ errsv = errno;
+ /* ESRCH means, process does not exist or is already a zombie. */
+ if (errsv != ESRCH) {
+ nm_log_err (LOGD_CORE | log_domain, LOG_NAME_FMT ": failed to send SIGKILL (after sending %s), %s (%d)",
+ LOG_NAME_ARGS, _kc_signal_to_string (sig), strerror (errsv), errsv);
+ goto out;
+ }
+ }
+ }
+ }
+
+ if (!was_waiting) {
+ nm_log_dbg (log_domain, LOG_NAME_FMT ": waiting for process to terminate after sending %s%s...",
+ LOG_NAME_ARGS, _kc_signal_to_string (sig), send_kill ? " and SIGKILL" : "");
+ }
+
+ /* block until the child terminates. */
+ while ((ret = waitpid (pid, &status, 0)) <= 0) {
+ errsv = errno;
+
+ if (errsv != EINTR) {
+ nm_log_err (LOGD_CORE | log_domain, LOG_NAME_FMT ": after sending %s%s, waitpid failed with %s (%d)%s",
+ LOG_NAME_ARGS, _kc_signal_to_string (sig), send_kill ? " and SIGKILL" : "", strerror (errsv), errsv,
+ _kc_waited_to_string (buf_wait, wait_start_us));
+ goto out;
+ }
+ }
+
+ nm_log_dbg (log_domain, LOG_NAME_FMT ": after sending %s%s, process %ld exited %s%s",
+ LOG_NAME_ARGS, _kc_signal_to_string (sig), send_kill ? " and SIGKILL" : "", (long) ret,
+ _kc_exit_to_string (buf_exit, status), _kc_waited_to_string (buf_wait, wait_start_us));
+ success = TRUE;
+out:
+ if (child_status)
+ *child_status = success ? status : -1;
+ return success;
+}
+
+/* nm_utils_kill_process_sync:
+ * @pid: process id to kill
+ * @start_time: the start time of the process to kill (as obtained by nm_utils_get_start_time_for_pid()).
+ * This is an optional argument, to avoid (somewhat) killing the wrong process as @pid
+ * might get recycled. You can pass 0, to not provide this parameter.
+ * @sig: signal to sent initially. If 0, no signal is sent. If %SIGKILL, the
+ * second %SIGKILL signal is not sent after @wait_before_kill_msec milliseconds.
+ * @log_domain: log debug information for this domain. Errors and warnings are logged both
+ * as %LOGD_CORE and @log_domain.
+ * @log_name: name of the process to kill for logging.
+ * @wait_before_kill_msec: Waittime in milliseconds before sending %SIGKILL signal. Set this value
+ * to zero, not to send %SIGKILL. If @sig is already %SIGKILL, this parameter has no effect.
+ * @sleep_duration_msec: the synchronous function sleeps repeatedly waiting for the child to terminate.
+ * Set to zero, to use the default (meaning 20 wakeups per seconds).
+ *
+ * Kill a non-child process synchronously and wait. This function will not return before the
+ * process with PID @pid is gone.
+ **/
+void
+nm_utils_kill_process_sync (pid_t pid, guint64 start_time, int sig, guint64 log_domain,
+ const char *log_name, guint32 wait_before_kill_msec,
+ guint32 sleep_duration_msec)
+{
+ int errsv;
+ guint64 start_time0;
+ gint64 wait_until, now, wait_start_us;
+ gulong sleep_time, sleep_duration_usec;
+ int loop_count = 0;
+ gboolean was_waiting = FALSE;
+ char buf_wait[KC_WAITED_TO_STRING];
+
+ g_return_if_fail (pid > 0);
+ g_return_if_fail (log_name != NULL);
+ g_return_if_fail (wait_before_kill_msec > 0);
+
+ start_time0 = nm_utils_get_start_time_for_pid (pid);
+ if (start_time0 == 0) {
+ nm_log_dbg (log_domain, LOG_NAME_PROCESS_FMT ": cannot kill process %ld because it seems already gone",
+ LOG_NAME_ARGS, (long int) pid);
+ return;
+ }
+ if (start_time != 0 && start_time != start_time0) {
+ nm_log_dbg (log_domain, LOG_NAME_PROCESS_FMT ": don't kill process %ld because the start_time is unexpectedly %lu instead of %ld",
+ LOG_NAME_ARGS, (long int) pid, (long unsigned) start_time0, (long unsigned) start_time);
+ return;
+ }
+
+ if (kill (pid, sig) != 0) {
+ errsv = errno;
+ /* ESRCH means, process does not exist or is already a zombie. */
+ if (errsv == ESRCH) {
+ nm_log_dbg (log_domain, LOG_NAME_PROCESS_FMT ": failed to send %s because process seems gone",
+ LOG_NAME_ARGS, _kc_signal_to_string (sig));
+ } else {
+ nm_log_warn (LOGD_CORE | log_domain, LOG_NAME_PROCESS_FMT ": failed to send %s: %s (%d)",
+ LOG_NAME_ARGS, _kc_signal_to_string (sig), strerror (errsv), errsv);
+ }
+ return;
+ }
+
+ /* wait for the process to terminated... */
+
+ wait_start_us = nm_utils_get_monotonic_timestamp_us ();
+
+ sleep_duration_usec = _sleep_duration_convert_ms_to_us (sleep_duration_msec);
+ wait_until = wait_start_us + (((gint64) wait_before_kill_msec) * 1000L);
+
+ while (TRUE) {
+ start_time = nm_utils_get_start_time_for_pid (pid);
+
+ if (start_time != start_time0) {
+ nm_log_dbg (log_domain, LOG_NAME_PROCESS_FMT ": process is gone after sending signal %s%s",
+ LOG_NAME_ARGS, _kc_signal_to_string (sig),
+ was_waiting ? _kc_waited_to_string (buf_wait, wait_start_us) : "");
+ return;
+ }
+
+ if (kill (pid, 0) != 0) {
+ errsv = errno;
+ /* ESRCH means, process does not exist or is already a zombie. */
+ if (errsv == ESRCH) {
+ nm_log_dbg (log_domain, LOG_NAME_PROCESS_FMT ": process is gone or a zombie after sending signal %s%s",
+ LOG_NAME_ARGS, _kc_signal_to_string (sig),
+ was_waiting ? _kc_waited_to_string (buf_wait, wait_start_us) : "");
+ } else {
+ nm_log_warn (LOGD_CORE | log_domain, LOG_NAME_PROCESS_FMT ": failed to kill(%ld, 0): %s (%d)%s",
+ LOG_NAME_ARGS, (long int) pid, strerror (errsv), errsv,
+ was_waiting ? _kc_waited_to_string (buf_wait, wait_start_us) : "");
+ }
+ return;
+ }
+
+ sleep_time = sleep_duration_usec;
+ if (wait_until != 0) {
+ now = nm_utils_get_monotonic_timestamp_us ();
+ if (sig != SIGKILL && now >= wait_until) {
+ /* Still not dead. SIGKILL now... */
+ nm_log_dbg (log_domain, LOG_NAME_PROCESS_FMT ": sending SIGKILL", LOG_NAME_ARGS);
+ if (kill (pid, SIGKILL) != 0) {
+ errsv = errno;
+ /* ESRCH means, process does not exist or is already a zombie. */
+ if (errsv != ESRCH) {
+ nm_log_dbg (log_domain, LOG_NAME_PROCESS_FMT ": process is gone or a zombie%s",
+ LOG_NAME_ARGS, _kc_waited_to_string (buf_wait, wait_start_us));
+ } else {
+ nm_log_warn (LOGD_CORE | log_domain, LOG_NAME_PROCESS_FMT ": failed to send SIGKILL (after sending %s), %s (%d)%s",
+ LOG_NAME_ARGS, _kc_signal_to_string (sig), strerror (errsv), errsv,
+ _kc_waited_to_string (buf_wait, wait_start_us));
+ }
+ return;
+ }
+ sig = SIGKILL;
+ was_waiting = TRUE;
+ wait_until = 0;
+ loop_count = 0; /* reset the loop_count. Now we really expect the process to die quickly. */
+ } else {
+ if (!was_waiting) {
+ nm_log_dbg (log_domain, LOG_NAME_PROCESS_FMT ": waiting up to %ld milliseconds for process to disappear after sending %s...",
+ LOG_NAME_ARGS, (long) wait_before_kill_msec, _kc_signal_to_string (sig));
+ was_waiting = TRUE;
+ }
+ sleep_time = MIN (wait_until - now, sleep_duration_usec);
+ }
+ }
+
+ if (loop_count < 20) {
+ /* At the beginning we expect the process to die fast.
+ * Limit the sleep time, the limit doubles with every iteration. */
+ sleep_time = MIN (sleep_time, (((guint64) 1) << loop_count) * G_USEC_PER_SEC / 2000);
+ loop_count++;
+ }
+ g_usleep (sleep_time);
+ }
+}
+#undef LOG_NAME_FMT
+#undef LOG_NAME_PROCESS_FMT
+#undef LOG_NAME_ARGS
+
+const char *const NM_PATHS_DEFAULT[] = {
+ PREFIX "/sbin/",
+ PREFIX "/bin/",
+ "/sbin/",
+ "/usr/sbin/",
+ "/usr/local/sbin/",
+ "/usr/bin/",
+ "/usr/local/bin/",
+ NULL,
+};
+
+const char *
+nm_utils_find_helper(const char *progname, const char *try_first, GError **error)
+{
+ return nm_utils_file_search_in_paths (progname, try_first, NM_PATHS_DEFAULT, G_FILE_TEST_IS_EXECUTABLE, NULL, NULL, error);
+}
+
+/******************************************************************************************/
+
gboolean
nm_match_spec_string (const GSList *specs, const char *match)
{
@@ -160,15 +843,22 @@ nm_match_spec_string (const GSList *specs, const char *match)
gboolean
nm_match_spec_hwaddr (const GSList *specs, const char *hwaddr)
{
- char *hwaddr_match;
- gboolean matched;
+ const GSList *iter;
g_return_val_if_fail (hwaddr != NULL, FALSE);
- hwaddr_match = g_strdup_printf ("mac:%s", hwaddr);
- matched = nm_match_spec_string (specs, hwaddr_match);
- g_free (hwaddr_match);
- return matched;
+ for (iter = specs; iter; iter = g_slist_next (iter)) {
+ const char *spec_str = iter->data;
+
+ if ( !g_ascii_strncasecmp (spec_str, "mac:", 4)
+ && nm_utils_hwaddr_matches (spec_str + 4, -1, hwaddr, -1))
+ return TRUE;
+
+ if (nm_utils_hwaddr_matches (spec_str, -1, hwaddr, -1))
+ return TRUE;
+ }
+
+ return FALSE;
}
gboolean
@@ -179,6 +869,9 @@ nm_match_spec_interface_name (const GSList *specs, const char *interface_name)
g_return_val_if_fail (interface_name != NULL, FALSE);
+ if (nm_match_spec_string (specs, interface_name))
+ return TRUE;
+
iface_match = g_strdup_printf ("interface-name:%s", interface_name);
matched = nm_match_spec_string (specs, iface_match);
g_free (iface_match);
@@ -402,8 +1095,8 @@ value_hash_add_object_property (GHashTable *hash,
static char *
get_new_connection_name (const GSList *existing,
- const char *format,
- const char *preferred)
+ const char *preferred,
+ const char *fallback_prefix)
{
GSList *names = NULL;
const GSList *iter;
@@ -411,6 +1104,8 @@ get_new_connection_name (const GSList *existing,
int i = 0;
gboolean preferred_found = FALSE;
+ g_assert (fallback_prefix);
+
for (iter = existing; iter; iter = g_slist_next (iter)) {
NMConnection *candidate = NM_CONNECTION (iter->data);
const char *id;
@@ -436,7 +1131,12 @@ get_new_connection_name (const GSList *existing,
char *temp;
gboolean found = FALSE;
- temp = g_strdup_printf (format, i);
+ /* Translators: the first %s is a prefix for the connection id, such
+ * as "Wired Connection" or "VPN Connection". The %d is a number
+ * that is combined with the first argument to create a unique
+ * connection id. */
+ temp = g_strdup_printf (C_("connection id fallback", "%s %d"),
+ fallback_prefix, i);
for (iter = names; iter; iter = g_slist_next (iter)) {
if (!strcmp (iter->data, temp)) {
found = TRUE;
@@ -453,68 +1153,38 @@ get_new_connection_name (const GSList *existing,
return cname;
}
-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;
+static char *
+get_new_connection_ifname (const GSList *existing,
+ const char *prefix)
+{
+ int i;
+ char *name;
+ const GSList *iter;
+ gboolean found;
- s_ip4 = nm_connection_get_setting_ip4_config (connection);
- s_ip6 = nm_connection_get_setting_ip6_config (connection);
+ for (i = 0; i < 500; i++) {
+ name = g_strdup_printf ("%s%d", prefix, i);
- if (nm_setting_connection_get_master (s_con)) {
- /* Slave connections don't have IP configuration. */
+ if (nm_platform_link_exists (name))
+ goto next;
- 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;
- }
+ for (iter = existing, found = FALSE; iter; iter = g_slist_next (iter)) {
+ NMConnection *candidate = iter->data;
- 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));
+ if (g_strcmp0 (nm_connection_get_interface_name (candidate), name) == 0) {
+ found = TRUE;
+ break;
}
- 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);
- }
+ if (!found)
+ return name;
+
+ next:
+ g_free (name);
}
+
+ return NULL;
}
const char *
@@ -522,8 +1192,7 @@ nm_utils_get_ip_config_method (NMConnection *connection,
GType ip_setting_type)
{
NMSettingConnection *s_con;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4, *s_ip6;
const char *method;
s_con = nm_connection_get_setting_connection (connection);
@@ -536,7 +1205,7 @@ nm_utils_get_ip_config_method (NMConnection *connection,
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);
+ method = nm_setting_ip_config_get_method (s_ip4);
g_return_val_if_fail (method != NULL, NM_SETTING_IP4_CONFIG_METHOD_AUTO);
return method;
@@ -550,7 +1219,7 @@ nm_utils_get_ip_config_method (NMConnection *connection,
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);
+ method = nm_setting_ip_config_get_method (s_ip6);
g_return_val_if_fail (method != NULL, NM_SETTING_IP6_CONFIG_METHOD_AUTO);
return method;
@@ -564,12 +1233,16 @@ void
nm_utils_complete_generic (NMConnection *connection,
const char *ctype,
const GSList *existing,
- const char *format,
- const char *preferred,
+ const char *preferred_id,
+ const char *fallback_id_prefix,
+ const char *ifname_prefix,
gboolean default_enable_ipv6)
{
NMSettingConnection *s_con;
- char *id, *uuid;
+ char *id, *uuid, *ifname;
+ GHashTable *parameters;
+
+ g_assert (fallback_id_prefix);
s_con = nm_connection_get_setting_connection (connection);
if (!s_con) {
@@ -586,13 +1259,24 @@ nm_utils_complete_generic (NMConnection *connection,
/* Add a connection ID if absent */
if (!nm_setting_connection_get_id (s_con)) {
- id = get_new_connection_name (existing, format, preferred);
+ id = get_new_connection_name (existing, preferred_id, fallback_id_prefix);
g_object_set (G_OBJECT (s_con), NM_SETTING_CONNECTION_ID, id, NULL);
g_free (id);
}
+ /* Add an interface name, if requested */
+ if (ifname_prefix && !nm_setting_connection_get_interface_name (s_con)) {
+ ifname = get_new_connection_ifname (existing, ifname_prefix);
+ g_object_set (G_OBJECT (s_con), NM_SETTING_CONNECTION_INTERFACE_NAME, ifname, NULL);
+ g_free (ifname);
+ }
+
/* Normalize */
- nm_utils_normalize_connection (connection, default_enable_ipv6);
+ parameters = g_hash_table_new (g_str_hash, g_str_equal);
+ g_hash_table_insert (parameters, NM_CONNECTION_NORMALIZE_PARAM_IP6_CONFIG_METHOD,
+ default_enable_ipv6 ? NM_SETTING_IP6_CONFIG_METHOD_AUTO : NM_SETTING_IP6_CONFIG_METHOD_IGNORE);
+ nm_connection_normalize (connection, parameters, NULL, NULL);
+ g_hash_table_destroy (parameters);
}
char *
@@ -682,12 +1366,12 @@ check_ip6_method (NMConnection *orig,
{
GHashTable *props;
const char *orig_ip6_method, *candidate_ip6_method;
- NMSettingIP6Config *candidate_ip6;
+ NMSettingIPConfig *candidate_ip6;
gboolean allow = FALSE;
props = check_property_in_hash (settings,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_METHOD);
+ NM_SETTING_IP_CONFIG_METHOD);
if (!props)
return TRUE;
@@ -703,7 +1387,7 @@ check_ip6_method (NMConnection *orig,
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))) {
+ && (!candidate_ip6 || nm_setting_ip_config_get_may_fail (candidate_ip6))) {
allow = TRUE;
}
@@ -720,7 +1404,7 @@ check_ip6_method (NMConnection *orig,
if (allow) {
remove_from_hash (settings, props,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_METHOD);
+ NM_SETTING_IP_CONFIG_METHOD);
}
return allow;
}
@@ -733,11 +1417,11 @@ check_ip4_method (NMConnection *orig,
{
GHashTable *props;
const char *orig_ip4_method, *candidate_ip4_method;
- NMSettingIP4Config *candidate_ip4;
+ NMSettingIPConfig *candidate_ip4;
props = check_property_in_hash (settings,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_METHOD);
+ NM_SETTING_IP_CONFIG_METHOD);
if (!props)
return TRUE;
@@ -752,11 +1436,11 @@ check_ip4_method (NMConnection *orig,
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))
+ && (!candidate_ip4 || nm_setting_ip_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);
+ NM_SETTING_IP_CONFIG_METHOD);
return TRUE;
}
return FALSE;
@@ -798,7 +1482,7 @@ check_connection_mac_address (NMConnection *orig,
GHashTable *settings)
{
GHashTable *props;
- const GByteArray *orig_mac = NULL, *cand_mac = NULL;
+ const char *orig_mac = NULL, *cand_mac = NULL;
NMSettingWired *s_wired_orig, *s_wired_cand;
props = check_property_in_hash (settings,
@@ -933,6 +1617,31 @@ nm_utils_match_connection (GSList *connections,
return best_match;
}
+int
+nm_utils_cmp_connection_by_autoconnect_priority (NMConnection **a, NMConnection **b)
+{
+ NMSettingConnection *a_s_con, *b_s_con;
+ gboolean a_ac, b_ac;
+ gint a_ap, b_ap;
+
+ a_s_con = nm_connection_get_setting_connection (*a);
+ b_s_con = nm_connection_get_setting_connection (*b);
+
+ a_ac = !!nm_setting_connection_get_autoconnect (a_s_con);
+ b_ac = !!nm_setting_connection_get_autoconnect (b_s_con);
+ if (a_ac != b_ac)
+ return ((int) b_ac) - ((int) a_ac);
+ if (!a_ac)
+ return 0;
+
+ a_ap = nm_setting_connection_get_autoconnect_priority (a_s_con);
+ b_ap = nm_setting_connection_get_autoconnect_priority (b_s_con);
+ if (a_ap != b_ap)
+ return (a_ap > b_ap) ? -1 : 1;
+
+ return 0;
+}
+
/* nm_utils_ascii_str_to_int64:
*
* A wrapper for g_ascii_strtoll, that checks whether the whole string
@@ -1008,21 +1717,85 @@ nm_utils_ascii_str_to_int64 (const char *str, guint base, gint64 min, gint64 max
return v;
}
+/**
+ * nm_utils_uuid_generate_from_strings:
+ * @string1: a variadic list of strings. Must be NULL terminated.
+ *
+ * Returns a variant3 UUID based on the concatenated C strings.
+ * It does not simply concatenate them, but also includes the
+ * terminating '\0' character. For example "a", "b", gives
+ * "a\0b\0\0".
+ *
+ * This has the advantage, that the following invocations
+ * all give different UUIDs: (""), ("",""), ("","a"), ("a",""),
+ * ("aa"), ("aa", ""), ("", "aa"), ...
+ */
+char *
+nm_utils_uuid_generate_from_strings (const char *string1, ...)
+{
+ GString *str;
+ va_list args;
+ const char *s;
+ char *uuid;
+
+ if (!string1)
+ return nm_utils_uuid_generate_from_string (NULL, 0, NM_UTILS_UUID_TYPE_VARIANT3, NM_UTILS_UUID_NS);
+
+ str = g_string_sized_new (120); /* effectively allocates power of 2 (128)*/
+
+ g_string_append_len (str, string1, strlen (string1) + 1);
+
+ va_start (args, string1);
+ s = va_arg (args, const char *);
+ while (s) {
+ g_string_append_len (str, s, strlen (s) + 1);
+ s = va_arg (args, const char *);
+ }
+ va_end (args);
+
+ uuid = nm_utils_uuid_generate_from_string (str->str, str->len, NM_UTILS_UUID_TYPE_VARIANT3, NM_UTILS_UUID_NS);
+
+ g_string_free (str, TRUE);
+ return uuid;
+}
+
+/**************************************************************************/
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);
+ static int clock_mode = 0;
+ gboolean first_time = FALSE;
+ int err = 0;
+
+ switch (clock_mode) {
+ case 0:
+ /* the clock is not yet initialized (first run) */
+ err = clock_gettime (CLOCK_BOOTTIME, tp);
+ if (err == -1 && errno == EINVAL) {
+ clock_mode = 2;
+ err = clock_gettime (CLOCK_MONOTONIC, tp);
+ } else
+ clock_mode = 1;
+ first_time = TRUE;
+ break;
+ case 1:
+ /* default, return CLOCK_BOOTTIME */
+ err = clock_gettime (CLOCK_BOOTTIME, tp);
+ break;
+ case 2:
+ /* fallback, return CLOCK_MONOTONIC. Kernels prior to 2.6.39
+ * don't support CLOCK_BOOTTIME. */
+ err = clock_gettime (CLOCK_MONOTONIC, tp);
+ break;
+ }
g_assert (err == 0); (void)err;
g_assert (tp->tv_nsec >= 0 && tp->tv_nsec < NM_UTILS_NS_PER_SECOND);
- if (G_LIKELY (initialized))
+ if (G_LIKELY (!first_time))
return;
/* Calculate an offset for the time stamp.
@@ -1039,7 +1812,6 @@ monotonic_timestamp_get (struct timespec *tp)
* 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);
@@ -1048,8 +1820,9 @@ monotonic_timestamp_get (struct timespec *tp)
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);
+ "an offset of %lld.0 seconds to %s (local time is %s)",
+ tp->tv_nsec, (long long) -monotonic_timestamp_offset_sec,
+ clock_mode == 1 ? "CLOCK_BOOTTIME" : "CLOCK_MONOTONIC", s);
}
}
@@ -1068,7 +1841,7 @@ monotonic_timestamp_get (struct timespec *tp)
gint64
nm_utils_get_monotonic_timestamp_ns (void)
{
- struct timespec tp;
+ struct timespec tp = { 0 };
monotonic_timestamp_get (&tp);
@@ -1095,7 +1868,7 @@ nm_utils_get_monotonic_timestamp_ns (void)
gint64
nm_utils_get_monotonic_timestamp_us (void)
{
- struct timespec tp;
+ struct timespec tp = { 0 };
monotonic_timestamp_get (&tp);
@@ -1122,7 +1895,7 @@ nm_utils_get_monotonic_timestamp_us (void)
gint64
nm_utils_get_monotonic_timestamp_ms (void)
{
- struct timespec tp;
+ struct timespec tp = { 0 };
monotonic_timestamp_get (&tp);
@@ -1149,12 +1922,286 @@ nm_utils_get_monotonic_timestamp_ms (void)
gint32
nm_utils_get_monotonic_timestamp_s (void)
{
- struct timespec tp;
+ struct timespec tp = { 0 };
monotonic_timestamp_get (&tp);
return (((gint64) tp.tv_sec) + monotonic_timestamp_offset_sec);
}
+typedef struct
+{
+ const char *name;
+ NMSetting *setting;
+ NMSetting *diff_base_setting;
+ GHashTable *setting_diff;
+} LogConnectionSettingData;
+
+typedef struct
+{
+ const char *item_name;
+ NMSettingDiffResult diff_result;
+} LogConnectionSettingItem;
+
+static gint
+_log_connection_sort_hashes_fcn (gconstpointer a, gconstpointer b)
+{
+ const LogConnectionSettingData *v1 = a;
+ const LogConnectionSettingData *v2 = b;
+ guint32 p1, p2;
+ NMSetting *s1, *s2;
+
+ s1 = v1->setting ? v1->setting : v1->diff_base_setting;
+ s2 = v2->setting ? v2->setting : v2->diff_base_setting;
+
+ g_assert (s1 && s2);
+
+ p1 = _nm_setting_get_setting_priority (s1);
+ p2 = _nm_setting_get_setting_priority (s2);
+
+ if (p1 != p2)
+ return p1 > p2 ? 1 : -1;
+
+ return strcmp (v1->name, v2->name);
+}
+
+static GArray *
+_log_connection_sort_hashes (NMConnection *connection, NMConnection *diff_base, GHashTable *connection_diff)
+{
+ GHashTableIter iter;
+ GArray *sorted_hashes;
+ LogConnectionSettingData setting_data;
+
+ sorted_hashes = g_array_sized_new (TRUE, FALSE, sizeof (LogConnectionSettingData), g_hash_table_size (connection_diff));
+
+ g_hash_table_iter_init (&iter, connection_diff);
+ while (g_hash_table_iter_next (&iter, (gpointer) &setting_data.name, (gpointer) &setting_data.setting_diff)) {
+ setting_data.setting = nm_connection_get_setting_by_name (connection, setting_data.name);
+ setting_data.diff_base_setting = diff_base ? nm_connection_get_setting_by_name (diff_base, setting_data.name) : NULL;
+ g_assert (setting_data.setting || setting_data.diff_base_setting);
+ g_array_append_val (sorted_hashes, setting_data);
+ }
+
+ g_array_sort (sorted_hashes, _log_connection_sort_hashes_fcn);
+ return sorted_hashes;
+}
+
+static gint
+_log_connection_sort_names_fcn (gconstpointer a, gconstpointer b)
+{
+ const LogConnectionSettingItem *v1 = a;
+ const LogConnectionSettingItem *v2 = b;
+
+ /* we want to first show the items, that disappeared, then the one that changed and
+ * then the ones that were added. */
+
+ if ((v1->diff_result & NM_SETTING_DIFF_RESULT_IN_A) != (v2->diff_result & NM_SETTING_DIFF_RESULT_IN_A))
+ return (v1->diff_result & NM_SETTING_DIFF_RESULT_IN_A) ? -1 : 1;
+ if ((v1->diff_result & NM_SETTING_DIFF_RESULT_IN_B) != (v2->diff_result & NM_SETTING_DIFF_RESULT_IN_B))
+ return (v1->diff_result & NM_SETTING_DIFF_RESULT_IN_B) ? 1 : -1;
+ return strcmp (v1->item_name, v2->item_name);
+}
+
+static char *
+_log_connection_get_property (NMSetting *setting, const char *name)
+{
+ GValue val = G_VALUE_INIT;
+ char *s;
+
+ g_return_val_if_fail (setting, NULL);
+
+ if ( !NM_IS_SETTING_VPN (setting)
+ && nm_setting_get_secret_flags (setting, name, NULL, NULL))
+ return g_strdup ("****");
+
+ if (!_nm_setting_get_property (setting, name, &val))
+ g_return_val_if_reached (FALSE);
+
+ if (G_VALUE_HOLDS_STRING (&val)) {
+ const char *val_s;
+
+ val_s = g_value_get_string (&val);
+ if (!val_s) {
+ /* for NULL, we want to return the unquoted string "NULL". */
+ s = g_strdup ("NULL");
+ } else {
+ char *escaped = g_strescape (val_s, "'");
+
+ s = g_strdup_printf ("'%s'", escaped);
+ g_free (escaped);
+ }
+ } else {
+ s = g_strdup_value_contents (&val);
+ if (s == NULL)
+ s = g_strdup ("NULL");
+ else {
+ char *escaped = g_strescape (s, "'");
+
+ g_free (s);
+ s = escaped;
+ }
+ }
+ g_value_unset(&val);
+ return s;
+}
+
+static void
+_log_connection_sort_names (LogConnectionSettingData *setting_data, GArray *sorted_names)
+{
+ GHashTableIter iter;
+ LogConnectionSettingItem item;
+ gpointer p;
+
+ g_array_set_size (sorted_names, 0);
+
+ g_hash_table_iter_init (&iter, setting_data->setting_diff);
+ while (g_hash_table_iter_next (&iter, (gpointer) &item.item_name, &p)) {
+ item.diff_result = GPOINTER_TO_UINT (p);
+ g_array_append_val (sorted_names, item);
+ }
+
+ g_array_sort (sorted_names, _log_connection_sort_names_fcn);
+}
+
+void
+nm_utils_log_connection_diff (NMConnection *connection, NMConnection *diff_base, guint32 level, guint64 domain, const char *name, const char *prefix)
+{
+ GHashTable *connection_diff = NULL;
+ GArray *sorted_hashes;
+ GArray *sorted_names = NULL;
+ int i, j;
+ gboolean connection_diff_are_same;
+ gboolean print_header = TRUE;
+ gboolean print_setting_header;
+ GString *str1;
+
+ g_return_if_fail (NM_IS_CONNECTION (connection));
+ g_return_if_fail (!diff_base || (NM_IS_CONNECTION (diff_base) && diff_base != connection));
+
+ /* For VPN setting types, this is broken, because we cannot (generically) print the content of data/secrets. Bummer... */
+
+ if (!nm_logging_enabled (level, domain))
+ return;
+
+ if (!prefix)
+ prefix = "";
+ if (!name)
+ name = "";
+
+ connection_diff_are_same = nm_connection_diff (connection, diff_base, NM_SETTING_COMPARE_FLAG_EXACT | NM_SETTING_COMPARE_FLAG_DIFF_RESULT_NO_DEFAULT, &connection_diff);
+ if (connection_diff_are_same) {
+ if (diff_base)
+ nm_log (level, domain, "%sconnection '%s' (%p and %p): no difference", prefix, name, connection, diff_base);
+ else
+ nm_log (level, domain, "%sconnection '%s' (%p): no properties set", prefix, name, connection);
+ g_assert (!connection_diff);
+ return;
+ }
+
+ /* FIXME: it doesn't nicely show the content of NMSettingVpn, becuase nm_connection_diff() does not
+ * expand the hash values. */
+
+ sorted_hashes = _log_connection_sort_hashes (connection, diff_base, connection_diff);
+ if (sorted_hashes->len <= 0)
+ goto out;
+
+ sorted_names = g_array_new (FALSE, FALSE, sizeof (LogConnectionSettingItem));
+ str1 = g_string_new (NULL);
+
+ for (i = 0; i < sorted_hashes->len; i++) {
+ LogConnectionSettingData *setting_data = &g_array_index (sorted_hashes, LogConnectionSettingData, i);
+
+ _log_connection_sort_names (setting_data, sorted_names);
+ print_setting_header = TRUE;
+ for (j = 0; j < sorted_names->len; j++) {
+ char *str_conn, *str_diff;
+ LogConnectionSettingItem *item = &g_array_index (sorted_names, LogConnectionSettingItem, j);
+
+ str_conn = (item->diff_result & NM_SETTING_DIFF_RESULT_IN_A)
+ ? _log_connection_get_property (setting_data->setting, item->item_name)
+ : NULL;
+ str_diff = (item->diff_result & NM_SETTING_DIFF_RESULT_IN_B)
+ ? _log_connection_get_property (setting_data->diff_base_setting, item->item_name)
+ : NULL;
+
+ if (print_header) {
+ GError *err_verify = NULL;
+
+ if (diff_base)
+ nm_log (level, domain, "%sconnection '%s' (%p < %p):", prefix, name, connection, diff_base);
+ else
+ nm_log (level, domain, "%sconnection '%s' (%p):", prefix, name, connection);
+ print_header = FALSE;
+
+ if (!nm_connection_verify (connection, &err_verify)) {
+ nm_log (level, domain, "%sconnection %p does not verify: %s", prefix, connection, err_verify->message);
+ g_clear_error (&err_verify);
+ }
+ }
+#define _NM_LOG_ALIGN "-25"
+ if (print_setting_header) {
+ if (diff_base) {
+ if (setting_data->setting && setting_data->diff_base_setting)
+ g_string_printf (str1, "%p < %p", setting_data->setting, setting_data->diff_base_setting);
+ else if (setting_data->diff_base_setting)
+ g_string_printf (str1, "*missing* < %p", setting_data->diff_base_setting);
+ else
+ g_string_printf (str1, "%p < *missing*", setting_data->setting);
+ nm_log (level, domain, "%s%"_NM_LOG_ALIGN"s [ %s ]", prefix, setting_data->name, str1->str);
+ } else
+ nm_log (level, domain, "%s%"_NM_LOG_ALIGN"s [ %p ]", prefix, setting_data->name, setting_data->setting);
+ print_setting_header = FALSE;
+ }
+ g_string_printf (str1, "%s.%s", setting_data->name, item->item_name);
+ switch (item->diff_result & (NM_SETTING_DIFF_RESULT_IN_A | NM_SETTING_DIFF_RESULT_IN_B)) {
+ case NM_SETTING_DIFF_RESULT_IN_B:
+ nm_log (level, domain, "%s%"_NM_LOG_ALIGN"s < %s", prefix, str1->str, str_diff ? str_diff : "NULL");
+ break;
+ case NM_SETTING_DIFF_RESULT_IN_A:
+ nm_log (level, domain, "%s%"_NM_LOG_ALIGN"s = %s", prefix, str1->str, str_conn ? str_conn : "NULL");
+ break;
+ default:
+ nm_log (level, domain, "%s%"_NM_LOG_ALIGN"s = %s < %s", prefix, str1->str, str_conn ? str_conn : "NULL", str_diff ? str_diff : "NULL");
+ break;
+#undef _NM_LOG_ALIGN
+ }
+ g_free (str_conn);
+ g_free (str_diff);
+ }
+ }
+
+ g_array_free (sorted_names, TRUE);
+ g_string_free (str1, TRUE);
+out:
+ g_hash_table_destroy (connection_diff);
+ g_array_free (sorted_hashes, TRUE);
+}
+
+
+#define IPV6_PROPERTY_DIR "/proc/sys/net/ipv6/conf/"
+#define IPV4_PROPERTY_DIR "/proc/sys/net/ipv4/conf/"
+G_STATIC_ASSERT (sizeof (IPV4_PROPERTY_DIR) == sizeof (IPV6_PROPERTY_DIR));
+
+static const char *
+_get_property_path (const char *ifname,
+ const char *property,
+ gboolean ipv6)
+{
+ 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),
+ "%s%s/%s",
+ ipv6 ? IPV6_PROPERTY_DIR : IPV4_PROPERTY_DIR,
+ ifname,
+ property);
+ g_assert (len < sizeof (path) - 1);
+
+ return path;
+}
/**
* nm_utils_ip6_property_path:
@@ -1167,18 +2214,21 @@ nm_utils_get_monotonic_timestamp_s (void)
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 _get_property_path (ifname, property, TRUE);
+}
- return path;
+/**
+ * nm_utils_ip4_property_path:
+ * @ifname: an interface name
+ * @property: a property name
+ *
+ * Returns the path to IPv4 property @property on @ifname. Note that
+ * this uses a static buffer.
+ */
+const char *
+nm_utils_ip4_property_path (const char *ifname, const char *property)
+{
+ return _get_property_path (ifname, property, FALSE);
}
const char *
@@ -1208,5 +2258,291 @@ fail:
else
nm_log_err (LOGD_CORE, "Failed asserting path component: \"%s\"", name);
g_error ("FATAL: Failed asserting path component: %s", name ? name : "(null)");
+ g_assert_not_reached ();
+}
+
+gboolean
+nm_utils_is_specific_hostname (const char *name)
+{
+ if (!name)
+ return FALSE;
+ if ( strcmp (name, "(none)")
+ && strcmp (name, "localhost")
+ && strcmp (name, "localhost6")
+ && strcmp (name, "localhost.localdomain")
+ && strcmp (name, "localhost6.localdomain6"))
+ return TRUE;
+ return FALSE;
+}
+
+/******************************************************************/
+
+/* Returns the "u" (universal/local) bit value for a Modified EUI-64 */
+static gboolean
+get_gre_eui64_u_bit (guint32 addr)
+{
+ static const struct {
+ guint32 mask;
+ guint32 result;
+ } items[] = {
+ { 0xff000000 }, { 0x7f000000 }, /* IPv4 loopback */
+ { 0xf0000000 }, { 0xe0000000 }, /* IPv4 multicast */
+ { 0xffffff00 }, { 0xe0000000 }, /* IPv4 local multicast */
+ { 0xffffffff }, { INADDR_BROADCAST }, /* limited broadcast */
+ { 0xff000000 }, { 0x00000000 }, /* zero net */
+ { 0xff000000 }, { 0x0a000000 }, /* private 10 (RFC3330) */
+ { 0xfff00000 }, { 0xac100000 }, /* private 172 */
+ { 0xffff0000 }, { 0xc0a80000 }, /* private 192 */
+ { 0xffff0000 }, { 0xa9fe0000 }, /* IPv4 link-local */
+ { 0xffffff00 }, { 0xc0586300 }, /* anycast 6-to-4 */
+ { 0xffffff00 }, { 0xc0000200 }, /* test 192 */
+ { 0xfffe0000 }, { 0xc6120000 }, /* test 198 */
+ };
+ guint i;
+
+ for (i = 0; i < G_N_ELEMENTS (items); i++) {
+ if ((addr & htonl (items[i].mask)) == htonl (items[i].result))
+ return 0x00; /* "local" scope */
+ }
+ return 0x02; /* "universal" scope */
+}
+
+/**
+ * nm_utils_get_ipv6_interface_identifier:
+ * @link_type: the hardware link type
+ * @hwaddr: the hardware address of the interface
+ * @hwaddr_len: the length (in bytes) of @hwaddr
+ * @out_iid: on success, filled with the interface identifier; on failure
+ * zeroed out
+ *
+ * Constructs an interface identifier in "Modified EUI-64" format which is
+ * suitable for constructing IPv6 addresses. Note that the identifier is
+ * not obscured in any way (eg, RFC3041).
+ *
+ * Returns: %TRUE if the interface identifier could be constructed, %FALSE if
+ * if could not be constructed.
+ */
+gboolean
+nm_utils_get_ipv6_interface_identifier (NMLinkType link_type,
+ const guint8 *hwaddr,
+ guint hwaddr_len,
+ NMUtilsIPv6IfaceId *out_iid)
+{
+ guint32 addr;
+
+ g_return_val_if_fail (hwaddr != NULL, FALSE);
+ g_return_val_if_fail (hwaddr_len > 0, FALSE);
+ g_return_val_if_fail (out_iid != NULL, FALSE);
+
+ out_iid->id = 0;
+
+ switch (link_type) {
+ case NM_LINK_TYPE_INFINIBAND:
+ /* Use the port GUID per http://tools.ietf.org/html/rfc4391#section-8,
+ * making sure to set the 'u' bit to 1. The GUID is the lower 64 bits
+ * of the IPoIB interface's hardware address.
+ */
+ g_return_val_if_fail (hwaddr_len == INFINIBAND_ALEN, FALSE);
+ memcpy (out_iid->id_u8, hwaddr + INFINIBAND_ALEN - 8, 8);
+ out_iid->id_u8[0] |= 0x02;
+ return TRUE;
+ case NM_LINK_TYPE_GRE:
+ case NM_LINK_TYPE_GRETAP:
+ /* Hardware address is the network-endian IPv4 address */
+ g_return_val_if_fail (hwaddr_len == 4, FALSE);
+ addr = * (guint32 *) hwaddr;
+ out_iid->id_u8[0] = get_gre_eui64_u_bit (addr);
+ out_iid->id_u8[1] = 0x00;
+ out_iid->id_u8[2] = 0x5E;
+ out_iid->id_u8[3] = 0xFE;
+ memcpy (out_iid->id_u8 + 4, &addr, 4);
+ return TRUE;
+ default:
+ if (hwaddr_len == ETH_ALEN) {
+ /* Translate 48-bit MAC address to a 64-bit Modified EUI-64. See
+ * http://tools.ietf.org/html/rfc4291#appendix-A
+ */
+ out_iid->id_u8[0] = hwaddr[0] ^ 0x02;
+ out_iid->id_u8[1] = hwaddr[1];
+ out_iid->id_u8[2] = hwaddr[2];
+ out_iid->id_u8[3] = 0xff;
+ out_iid->id_u8[4] = 0xfe;
+ out_iid->id_u8[5] = hwaddr[3];
+ out_iid->id_u8[6] = hwaddr[4];
+ out_iid->id_u8[7] = hwaddr[5];
+ return TRUE;
+ }
+ break;
+ }
+ return FALSE;
+}
+
+void
+nm_utils_ipv6_addr_set_interface_identfier (struct in6_addr *addr,
+ const NMUtilsIPv6IfaceId iid)
+{
+ memcpy (addr->s6_addr + 8, &iid.id_u8, 8);
+}
+
+void
+nm_utils_ipv6_interface_identfier_get_from_addr (NMUtilsIPv6IfaceId *iid,
+ const struct in6_addr *addr)
+{
+ memcpy (iid, addr->s6_addr + 8, 8);
+}
+
+/**
+ * nm_utils_connection_hash_to_dict:
+ * @hash: a hashed #NMConnection
+ *
+ * Returns: a (floating) #GVariant equivalent to @hash.
+ */
+GVariant *
+nm_utils_connection_hash_to_dict (GHashTable *hash)
+{
+ GValue val = { 0, };
+ GVariant *variant;
+
+ if (!hash)
+ return NULL;
+
+ g_value_init (&val, DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT);
+ g_value_set_boxed (&val, hash);
+ variant = dbus_g_value_build_g_variant (&val);
+ g_value_unset (&val);
+
+ return variant;
+}
+
+/**
+ * nm_utils_connection_dict_to_hash:
+ * @dict: a #GVariant-serialized #NMConnection
+ *
+ * Returns: a #GHashTable equivalent to @dict.
+ */
+GHashTable *
+nm_utils_connection_dict_to_hash (GVariant *dict)
+{
+ GValue val = { 0, };
+
+ if (!dict)
+ return NULL;
+
+ dbus_g_value_parse_g_variant (dict, &val);
+ return g_value_get_boxed (&val);
}
+GSList *
+nm_utils_ip4_routes_from_gvalue (const GValue *value)
+{
+ GPtrArray *routes;
+ int i;
+ GSList *list = NULL;
+
+ routes = (GPtrArray *) g_value_get_boxed (value);
+ for (i = 0; routes && (i < routes->len); i++) {
+ GArray *array = (GArray *) g_ptr_array_index (routes, i);
+ guint32 *array_val = (guint32 *) array->data;
+ NMIPRoute *route;
+ GError *error = NULL;
+
+ if (array->len < 4) {
+ g_warning ("Ignoring invalid IP4 route");
+ continue;
+ }
+
+ route = nm_ip_route_new_binary (AF_INET,
+ &array_val[0], array_val[1],
+ &array_val[2], array_val[3],
+ &error);
+ if (route)
+ list = g_slist_prepend (list, route);
+ else {
+ g_warning ("Ignoring invalid IP4 route: %s", error->message);
+ g_clear_error (&error);
+ }
+ }
+
+ return g_slist_reverse (list);
+}
+
+static gboolean
+_nm_utils_gvalue_array_validate (GValueArray *elements, guint n_expected, ...)
+{
+ va_list args;
+ GValue *tmp;
+ int i;
+ gboolean valid = FALSE;
+
+ if (n_expected != elements->n_values)
+ return FALSE;
+
+ 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;
+
+done:
+ va_end (args);
+ return valid;
+}
+
+GSList *
+nm_utils_ip6_routes_from_gvalue (const GValue *value)
+{
+ GPtrArray *routes;
+ int i;
+ GSList *list = NULL;
+
+ routes = (GPtrArray *) g_value_get_boxed (value);
+ for (i = 0; routes && (i < routes->len); i++) {
+ GValueArray *route_values = (GValueArray *) g_ptr_array_index (routes, i);
+ GByteArray *dest, *next_hop;
+ guint prefix, metric;
+ NMIPRoute *route;
+ GError *error = NULL;
+
+ 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;
+ }
+
+ dest = g_value_get_boxed (g_value_array_get_nth (route_values, 0));
+ if (dest->len != 16) {
+ g_warning ("%s: ignoring invalid IP6 dest address of length %d",
+ __func__, dest->len);
+ continue;
+ }
+
+ prefix = g_value_get_uint (g_value_array_get_nth (route_values, 1));
+
+ next_hop = g_value_get_boxed (g_value_array_get_nth (route_values, 2));
+ if (next_hop->len != 16) {
+ g_warning ("%s: ignoring invalid IP6 next_hop address of length %d",
+ __func__, next_hop->len);
+ continue;
+ }
+
+ metric = g_value_get_uint (g_value_array_get_nth (route_values, 3));
+
+ route = nm_ip_route_new_binary (AF_INET6,
+ dest->data, prefix,
+ next_hop->data, metric,
+ &error);
+ if (route)
+ list = g_slist_prepend (list, route);
+ else {
+ g_warning ("Ignoring invalid IP6 route: %s", error->message);
+ g_clear_error (&error);
+ }
+ }
+
+ return g_slist_reverse (list);
+}
diff --git a/src/NetworkManagerUtils.h b/src/NetworkManagerUtils.h
index a09a30e23..40315c6ef 100644
--- a/src/NetworkManagerUtils.h
+++ b/src/NetworkManagerUtils.h
@@ -15,33 +15,84 @@
* 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 - 2011 Red Hat, Inc.
- * Copyright (C) 2005 - 2008 Novell, Inc.
+ * Copyright 2004 - 2014 Red Hat, Inc.
+ * Copyright 2005 - 2008 Novell, Inc.
*/
-#ifndef NETWORK_MANAGER_UTILS_H
-#define NETWORK_MANAGER_UTILS_H
+#ifndef __NETWORKMANAGER_UTILS_H__
+#define __NETWORKMANAGER_UTILS_H__
#include <glib.h>
#include <stdio.h>
-#include <net/ethernet.h>
+#include <arpa/inet.h>
-#include "nm-ip4-config.h"
-#include "nm-setting-ip4-config.h"
-#include "nm-ip6-config.h"
-#include "nm-setting-ip6-config.h"
#include "nm-connection.h"
-#include "nm-setting-private.h"
+#include "nm-types.h"
-gboolean nm_ethernet_address_is_valid (const struct ether_addr *test_addr);
+gboolean nm_ethernet_address_is_valid (gconstpointer addr, gssize len);
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);
+const struct in6_addr *nm_utils_ip6_address_clear_host_address (struct in6_addr *dst, const struct in6_addr *src, guint8 plen);
+
+/**
+ * nm_utils_ip6_route_metric_normalize:
+ * @metric: the route metric
+ *
+ * For IPv6 route, kernel treats the value 0 as IP6_RT_PRIO_USER (1024).
+ * Thus, when comparing metric (values), we want to treat zero as NM_PLATFORM_ROUTE_METRIC_DEFAULT_IP6.
+ *
+ * Returns: @metric, if @metric is not zero, otherwise 1024.
+ */
+static inline guint32
+nm_utils_ip6_route_metric_normalize (guint32 metric)
+{
+ return metric ? metric : 1024 /*NM_PLATFORM_ROUTE_METRIC_DEFAULT_IP6*/;
+}
int nm_spawn_process (const char *args);
-/* macro to return strlen() of a compile time string. */
-#define STRLEN(str) ( sizeof ("" str) - 1 )
+/* check if @flags has exactly one flag (@check) set. You should call this
+ * only with @check being a compile time constant and a power of two. */
+#define NM_FLAGS_HAS(flags, check) \
+ ( (G_STATIC_ASSERT_EXPR ( ((check) != 0) && ((check) & ((check)-1)) == 0 )), (NM_FLAGS_ANY ((flags), (check))) )
+
+#define NM_FLAGS_ANY(flags, check) ( ( ((flags) & (check)) != 0 ) ? TRUE : FALSE )
+#define NM_FLAGS_ALL(flags, check) ( ( ((flags) & (check)) == (check) ) ? TRUE : FALSE )
+
+
+/**
+ * str_if_set:
+ * @str: input string that will be returned if @str is not %NULL
+ * @fallback: if @str is %NULL, return @fallback instead
+ *
+ * This utility function is useful when printing a string to avoid passing
+ * %NULL. E.g. printf ("%s", str_if_set (get_string(), "(none)"));
+ *
+ * Returns: either @str or @fallback, depending on whether @str is %NULL.
+ */
+static inline const char *
+str_if_set (const char *str, const char *fallback)
+{
+ return str ? str : fallback;
+}
+
+guint64 nm_utils_get_start_time_for_pid (pid_t pid);
+
+void nm_utils_kill_process_sync (pid_t pid, guint64 start_time, int sig, guint64 log_domain,
+ const char *log_name, guint32 wait_before_kill_msec,
+ guint32 sleep_duration_msec);
+
+typedef void (*NMUtilsKillChildAsyncCb) (pid_t pid, gboolean success, int child_status, void *user_data);
+void nm_utils_kill_child_async (pid_t pid, int sig, guint64 log_domain, const char *log_name,
+ guint32 wait_before_kill_msec,
+ NMUtilsKillChildAsyncCb callback, void *user_data);
+gboolean nm_utils_kill_child_sync (pid_t pid, int sig, guint64 log_domain, const char *log_name,
+ int *child_status, guint32 wait_before_kill_msec,
+ guint32 sleep_duration_msec);
+
+const char *nm_utils_find_helper (const char *progname,
+ const char *try_first,
+ GError **error);
gboolean nm_match_spec_string (const GSList *specs, const char *string);
gboolean nm_match_spec_hwaddr (const GSList *specs, const char *hwaddr);
@@ -77,16 +128,15 @@ void value_hash_add_object_property (GHashTable *hash,
const char *prop,
GType val_type);
-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,
const GSList *existing,
- const char *format,
- const char *preferred,
+ const char *preferred_id,
+ const char *fallback_id_prefix,
+ const char *ifname_prefix,
gboolean default_enable_ipv6);
char *nm_utils_new_vlan_name (const char *parent_iface, guint32 vlan_id);
@@ -101,8 +151,16 @@ NMConnection *nm_utils_match_connection (GSList *connections,
NMUtilsMatchFilterFunc match_filter_func,
gpointer match_filter_data);
+int nm_utils_cmp_connection_by_autoconnect_priority (NMConnection **a, NMConnection **b);
+
+void nm_utils_log_connection_diff (NMConnection *connection, NMConnection *diff_base, guint32 level, guint64 domain, const char *name, const char *prefix);
+
gint64 nm_utils_ascii_str_to_int64 (const char *str, guint base, gint64 min, gint64 max, gint64 fallback);
+#define NM_UTILS_UUID_NS "b425e9fb-7598-44b4-9e3b-5a2e3aaa4905"
+
+char *nm_utils_uuid_generate_from_strings (const char *string1, ...) G_GNUC_NULL_TERMINATED;
+
#define NM_UTILS_NS_PER_SECOND ((gint64) 1000000000)
gint64 nm_utils_get_monotonic_timestamp_ns (void);
gint64 nm_utils_get_monotonic_timestamp_us (void);
@@ -111,5 +169,45 @@ 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);
+const char *nm_utils_ip4_property_path (const char *ifname, const char *property);
+
+gboolean nm_utils_is_specific_hostname (const char *name);
+
+/* IPv6 Interface Identifer helpers */
+
+/**
+ * NMUtilsIPv6IfaceId:
+ * @id: convenience member for validity checking; never use directly
+ * @id_u8: the 64-bit Interface Identifier
+ *
+ * Holds a 64-bit IPv6 Interface Identifier. The IID is a sequence of bytes
+ * and should not normally be treated as a %guint64, but this is done for
+ * convenience of validity checking and initialization.
+ */
+typedef struct {
+ union {
+ guint64 id;
+ guint8 id_u8[8];
+ };
+} NMUtilsIPv6IfaceId;
+
+#define NM_UTILS_IPV6_IFACE_ID_INIT { .id = 0 }
+
+gboolean nm_utils_get_ipv6_interface_identifier (NMLinkType link_type,
+ const guint8 *hwaddr,
+ guint len,
+ NMUtilsIPv6IfaceId *out_iid);
+
+void nm_utils_ipv6_addr_set_interface_identfier (struct in6_addr *addr,
+ const NMUtilsIPv6IfaceId iid);
+
+void nm_utils_ipv6_interface_identfier_get_from_addr (NMUtilsIPv6IfaceId *iid,
+ const struct in6_addr *addr);
+
+GVariant *nm_utils_connection_hash_to_dict (GHashTable *hash);
+GHashTable *nm_utils_connection_dict_to_hash (GVariant *dict);
+
+GSList *nm_utils_ip4_routes_from_gvalue (const GValue *value);
+GSList *nm_utils_ip6_routes_from_gvalue (const GValue *value);
-#endif /* NETWORK_MANAGER_UTILS_H */
+#endif /* __NETWORKMANAGER_UTILS_H__ */
diff --git a/src/config/nm-config-device.c b/src/config/nm-config-device.c
deleted file mode 100644
index 6914f033a..000000000
--- a/src/config/nm-config-device.c
+++ /dev/null
@@ -1,82 +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 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
deleted file mode 100644
index 8b5409a02..000000000
--- a/src/config/nm-config-device.h
+++ /dev/null
@@ -1,47 +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 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/tests/nm-test-device.c b/src/config/tests/nm-test-device.c
deleted file mode 100644
index b671f2558..000000000
--- a/src/config/tests/nm-test-device.c
+++ /dev/null
@@ -1,101 +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 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/devices/adsl/Makefile.am b/src/devices/adsl/Makefile.am
index 0430f47d0..07a8f9eeb 100644
--- a/src/devices/adsl/Makefile.am
+++ b/src/devices/adsl/Makefile.am
@@ -5,20 +5,15 @@ include $(GLIB_MAKEFILE)
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 \
+ -I${top_builddir}/libnm-core \
+ -I${top_srcdir}/libnm-core \
-DG_LOG_DOMAIN=\""NetworkManager-adsl"\" \
+ -DNETWORKMANAGER_COMPILATION \
-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
diff --git a/src/devices/adsl/Makefile.in b/src/devices/adsl/Makefile.in
index 708a45d2c..7942c559c 100644
--- a/src/devices/adsl/Makefile.in
+++ b/src/devices/adsl/Makefile.in
@@ -217,6 +217,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -340,6 +342,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -359,6 +362,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -385,7 +389,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -467,20 +471,15 @@ 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 \
+ -I${top_builddir}/libnm-core \
+ -I${top_srcdir}/libnm-core \
-DG_LOG_DOMAIN=\""NetworkManager-adsl"\" \
+ -DNETWORKMANAGER_COMPILATION \
-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
diff --git a/src/devices/adsl/exports.ver b/src/devices/adsl/exports.ver
index d2c451244..24cd848ce 100644
--- a/src/devices/adsl/exports.ver
+++ b/src/devices/adsl/exports.ver
@@ -1,7 +1,6 @@
{
global:
nm_device_factory_create;
- nm_device_factory_get_device_type;
local:
*;
};
diff --git a/src/devices/adsl/nm-atm-manager.c b/src/devices/adsl/nm-atm-manager.c
index e8db3596d..6f34c02bb 100644
--- a/src/devices/adsl/nm-atm-manager.c
+++ b/src/devices/adsl/nm-atm-manager.c
@@ -18,7 +18,7 @@
* Copyright (C) 2009 - 2013 Red Hat, Inc.
*/
-#include <config.h>
+#include "config.h"
#include <string.h>
#include <gudev/gudev.h>
@@ -28,11 +28,11 @@
#include "nm-device-adsl.h"
#include "nm-device-factory.h"
#include "nm-logging.h"
+#include "nm-glib-compat.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))
@@ -46,20 +46,12 @@ G_DEFINE_TYPE_EXTENDED (NMAtmManager, nm_atm_manager, G_TYPE_OBJECT, 0,
/**************************************************************************/
-#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
@@ -163,9 +155,10 @@ adsl_remove (NMAtmManager *self, GUdevDevice *udev_device)
}
}
-static gboolean
-query_devices (NMAtmManager *self)
+static void
+start (NMDeviceFactory *factory)
{
+ NMAtmManager *self = NM_ATM_MANAGER (factory);
NMAtmManagerPrivate *priv = NM_ATM_MANAGER_GET_PRIVATE (self);
GUdevEnumerator *enumerator;
GList *devices, *iter;
@@ -180,8 +173,6 @@ query_devices (NMAtmManager *self)
}
g_list_free (devices);
g_object_unref (enumerator);
-
- return G_SOURCE_REMOVE;
}
static void
@@ -212,6 +203,12 @@ handle_uevent (GUdevClient *client,
adsl_remove (self, device);
}
+static NMDeviceType
+get_device_type (NMDeviceFactory *factory)
+{
+ return NM_DEVICE_TYPE_ADSL;
+}
+
/*********************************************************************/
static void
@@ -222,13 +219,13 @@ nm_atm_manager_init (NMAtmManager *self)
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)
{
+ factory_iface->get_device_type = get_device_type;
+ factory_iface->start = start;
}
static void
@@ -242,11 +239,6 @@ dispose (GObject *object)
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);
diff --git a/src/devices/adsl/nm-atm-manager.h b/src/devices/adsl/nm-atm-manager.h
index 005252207..e4ec3e6ae 100644
--- a/src/devices/adsl/nm-atm-manager.h
+++ b/src/devices/adsl/nm-atm-manager.h
@@ -19,8 +19,8 @@
* Copyright (C) 2007 - 2014 Red Hat, Inc.
*/
-#ifndef NM_ATM_MANAGER_H
-#define NM_ATM_MANAGER_H
+#ifndef __NETWORKMANAGER_ATM_MANAGER_H__
+#define __NETWORKMANAGER_ATM_MANAGER_H__
#include <glib.h>
#include <glib-object.h>
@@ -38,5 +38,5 @@ typedef struct {
GObjectClass parent;
} NMAtmManagerClass;
-#endif /* NM_ATM_MANAGER_H */
+#endif /* __NETWORKMANAGER_ATM_MANAGER_H__ */
diff --git a/src/devices/adsl/nm-device-adsl.c b/src/devices/adsl/nm-device-adsl.c
index 0c35bb7ad..e664ff485 100644
--- a/src/devices/adsl/nm-device-adsl.c
+++ b/src/devices/adsl/nm-device-adsl.c
@@ -18,7 +18,7 @@
* Pantelis Koukousoulas <pktoss@gmail.com>
*/
-#include <config.h>
+#include "config.h"
#include <sys/socket.h>
#include <linux/atmdev.h>
@@ -44,9 +44,13 @@
#include "ppp-manager/nm-ppp-manager.h"
#include "nm-setting-adsl.h"
+#include "nm-utils.h"
#include "nm-device-adsl-glue.h"
+#include "nm-device-logging.h"
+_LOG_DECLARE_SELF (NMDeviceAdsl);
+
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))
@@ -72,7 +76,9 @@ typedef struct {
static guint32
get_generic_capabilities (NMDevice *dev)
{
- return (NM_DEVICE_CAP_CARRIER_DETECT | NM_DEVICE_CAP_NONSTANDARD_CARRIER);
+ return ( NM_DEVICE_CAP_CARRIER_DETECT
+ | NM_DEVICE_CAP_NONSTANDARD_CARRIER
+ | NM_DEVICE_CAP_IS_NON_KERNEL);
}
static gboolean
@@ -119,7 +125,8 @@ complete_connection (NMDevice *device,
nm_utils_complete_generic (connection,
NM_SETTING_ADSL_SETTING_NAME,
existing_connections,
- _("ADSL connection %d"),
+ NULL,
+ _("ADSL connection"),
NULL,
FALSE); /* No IPv6 yet by default */
@@ -142,18 +149,14 @@ set_nas_iface (NMDeviceAdsl *self, int idx, const char *name)
g_warn_if_fail (priv->nas_ifname == NULL);
priv->nas_ifname = g_strdup (name);
-
- /* Update NAS interface's MAC address */
- nm_device_update_hw_address (NM_DEVICE (self));
}
static gboolean
br2684_create_iface (NMDeviceAdsl *self, NMSettingAdsl *s_adsl)
{
NMDeviceAdslPrivate *priv = NM_DEVICE_ADSL_GET_PRIVATE (self);
- const char *iface = nm_device_get_iface (NM_DEVICE (self));
struct atm_newif_br2684 ni;
- int err, fd;
+ int err, fd, errsv;
gboolean success = FALSE;
guint num = 0;
@@ -161,8 +164,8 @@ br2684_create_iface (NMDeviceAdsl *self, NMSettingAdsl *s_adsl)
fd = socket (PF_ATMPVC, SOCK_DGRAM, ATM_AAL5);
if (fd < 0) {
- nm_log_err (LOGD_ADSL, "(%s): failed to open ATM control socket (%d)",
- iface, errno);
+ errsv = errno;
+ _LOGE (LOGD_ADSL, "failed to open ATM control socket (%d)", errsv);
return FALSE;
}
@@ -183,17 +186,19 @@ br2684_create_iface (NMDeviceAdsl *self, NMSettingAdsl *s_adsl)
err = ioctl (fd, ATM_NEWBACKENDIF, &ni);
if (err == 0) {
set_nas_iface (self, -1, ni.ifname);
- nm_log_info (LOGD_ADSL, "(%s): using NAS interface %s (%d)",
- iface, priv->nas_ifname, priv->nas_ifindex);
+ _LOGI (LOGD_ADSL, "using NAS interface %s (%d)",
+ priv->nas_ifname, priv->nas_ifindex);
success = TRUE;
break;
- } else if (errno == -EEXIST) {
- /* Try again */
- num++;
} else {
- nm_log_warn (LOGD_ADSL, "(%s): failed to create br2684 interface (%d)",
- iface, errno);
- break;
+ errsv = errno;
+ if (errsv == -EEXIST) {
+ /* Try again */
+ num++;
+ } else {
+ _LOGW (LOGD_ADSL, "failed to create br2684 interface (%d)", errsv);
+ break;
+ }
}
}
@@ -205,11 +210,10 @@ static gboolean
br2684_assign_vcc (NMDeviceAdsl *self, NMSettingAdsl *s_adsl)
{
NMDeviceAdslPrivate *priv = NM_DEVICE_ADSL_GET_PRIVATE (self);
- const char *iface = nm_device_get_iface (NM_DEVICE (self));
struct sockaddr_atmpvc addr;
struct atm_backend_br2684 be;
struct atm_qos qos;
- int err, bufsize = 8192;
+ int errsv, err, bufsize = 8192;
const char *encapsulation;
gboolean is_llc;
@@ -218,15 +222,15 @@ br2684_assign_vcc (NMDeviceAdsl *self, NMSettingAdsl *s_adsl)
priv->brfd = socket (PF_ATMPVC, SOCK_DGRAM, ATM_AAL5);
if (priv->brfd < 0) {
- nm_log_err (LOGD_ADSL, "(%s): failed to open ATM control socket (%d)",
- iface, errno);
+ errsv = errno;
+ _LOGE (LOGD_ADSL, "failed to open ATM control socket (%d)", errsv);
return FALSE;
}
err = setsockopt (priv->brfd, SOL_SOCKET, SO_SNDBUF, &bufsize, sizeof (bufsize));
if (err != 0) {
- nm_log_err (LOGD_ADSL, "(%s): failed to set SNDBUF option (%d)",
- iface, errno);
+ errsv = errno;
+ _LOGE (LOGD_ADSL, "failed to set SNDBUF option (%d)", errsv);
goto error;
}
@@ -240,8 +244,8 @@ br2684_assign_vcc (NMDeviceAdsl *self, NMSettingAdsl *s_adsl)
err = setsockopt (priv->brfd, SOL_ATM, SO_ATMQOS, &qos, sizeof (qos));
if (err != 0) {
- nm_log_err (LOGD_ADSL, "(%s): failed to set QoS (%d)",
- iface, errno);
+ errsv = errno;
+ _LOGE (LOGD_ADSL, "failed to set QoS (%d)", errsv);
goto error;
}
@@ -254,15 +258,14 @@ br2684_assign_vcc (NMDeviceAdsl *self, NMSettingAdsl *s_adsl)
addr.sap_addr.vpi = (guint16) nm_setting_adsl_get_vpi (s_adsl);
addr.sap_addr.vci = (int) nm_setting_adsl_get_vci (s_adsl);
- nm_log_dbg (LOGD_ADSL, "(%s): assigning address %d.%d.%d encapsulation %s",
- nm_device_get_iface (NM_DEVICE (self)),
- priv->atm_index, addr.sap_addr.vpi, addr.sap_addr.vci,
- encapsulation);
+ _LOGD (LOGD_ADSL, "assigning address %d.%d.%d encapsulation %s",
+ priv->atm_index, addr.sap_addr.vpi, addr.sap_addr.vci,
+ encapsulation ? encapsulation : "(none)");
err = connect (priv->brfd, (struct sockaddr*) &addr, sizeof (addr));
if (err != 0) {
- nm_log_err (LOGD_ADSL, "(%s): failed to set VPI/VCI (%d)",
- iface, errno);
+ errsv = errno;
+ _LOGE (LOGD_ADSL, "failed to set VPI/VCI (%d)", errsv);
goto error;
}
@@ -278,8 +281,8 @@ br2684_assign_vcc (NMDeviceAdsl *self, NMSettingAdsl *s_adsl)
be.encaps = is_llc ? BR2684_ENCAPS_LLC : BR2684_ENCAPS_VC;
err = ioctl (priv->brfd, ATM_SETBACKEND, &be);
if (err != 0) {
- nm_log_err (LOGD_ADSL, "(%s): failed to attach VCC (%d)",
- iface, errno);
+ errsv = errno;
+ _LOGE (LOGD_ADSL, "failed to attach VCC (%d)", errsv);
goto error;
}
@@ -292,18 +295,17 @@ error:
}
static void
-link_changed_cb (NMPlatform *platform, int ifindex, NMPlatformLink *info, NMPlatformSignalChangeType change_type, NMPlatformReason reason, NMDeviceAdsl *device_adsl)
+link_changed_cb (NMPlatform *platform, int ifindex, NMPlatformLink *info, NMPlatformSignalChangeType change_type, NMPlatformReason reason, NMDeviceAdsl *self)
{
if (change_type == NM_PLATFORM_SIGNAL_REMOVED) {
- NMDeviceAdslPrivate *priv = NM_DEVICE_ADSL_GET_PRIVATE (device_adsl);
- NMDevice *device = NM_DEVICE (device_adsl);
+ NMDeviceAdslPrivate *priv = NM_DEVICE_ADSL_GET_PRIVATE (self);
+ NMDevice *device = NM_DEVICE (self);
/* 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));
+ _LOGD (LOGD_ADSL, "NAS interface disappeared");
nm_device_state_changed (device,
NM_DEVICE_STATE_FAILED,
NM_DEVICE_STATE_REASON_BR2684_FAILED);
@@ -326,8 +328,7 @@ act_stage2_config (NMDevice *device, NMDeviceStateReason *out_reason)
g_assert (s_adsl);
protocol = nm_setting_adsl_get_protocol (s_adsl);
- nm_log_dbg (LOGD_ADSL, "(%s): using ADSL protocol '%s'",
- nm_device_get_iface (device), protocol);
+ _LOGD (LOGD_ADSL, "using ADSL protocol '%s'", protocol);
if (g_strcmp0 (protocol, NM_SETTING_ADSL_PROTOCOL_PPPOE) == 0) {
@@ -348,7 +349,7 @@ act_stage2_config (NMDevice *device, NMDeviceStateReason *out_reason)
G_CALLBACK (link_changed_cb),
self);
- nm_log_dbg (LOGD_ADSL, "(%s): ATM setup successful", nm_device_get_iface (device));
+ _LOGD (LOGD_ADSL, "ATM setup successful");
/* otherwise we're good for stage3 */
nm_platform_link_set_up (priv->nas_ifindex);
@@ -357,10 +358,8 @@ act_stage2_config (NMDevice *device, NMDeviceStateReason *out_reason)
} else if (g_strcmp0 (protocol, NM_SETTING_ADSL_PROTOCOL_PPPOA) == 0) {
/* PPPoA doesn't need anything special */
ret = NM_ACT_STAGE_RETURN_SUCCESS;
- } else {
- nm_log_warn (LOGD_ADSL, "(%s): unhandled ADSL protocol '%s'",
- nm_device_get_iface (device), protocol);
- }
+ } else
+ _LOGW (LOGD_ADSL, "unhandled ADSL protocol '%s'", protocol);
done:
return ret;
@@ -410,7 +409,6 @@ act_stage3_ip4_config_start (NMDevice *device,
NMActRequest *req;
GError *err = NULL;
NMActStageReturn ret = NM_ACT_STAGE_RETURN_FAILURE;
- const char *iface = nm_device_get_iface (device);
const char *ppp_iface;
req = nm_device_get_act_request (device);
@@ -427,11 +425,10 @@ act_stage3_ip4_config_start (NMDevice *device,
g_assert (priv->nas_ifname);
ppp_iface = priv->nas_ifname;
- nm_log_dbg (LOGD_ADSL, "(%s): starting PPPoE on NAS interface %s",
- iface, priv->nas_ifname);
+ _LOGD (LOGD_ADSL, "starting PPPoE on NAS interface %s", priv->nas_ifname);
} else {
- ppp_iface = iface;
- nm_log_dbg (LOGD_ADSL, "(%s): starting PPPoA", iface);
+ ppp_iface = nm_device_get_iface (device);
+ _LOGD (LOGD_ADSL, "starting PPPoA");
}
priv->ppp_manager = nm_ppp_manager_new (ppp_iface);
@@ -444,7 +441,7 @@ act_stage3_ip4_config_start (NMDevice *device,
self);
ret = NM_ACT_STAGE_RETURN_POSTPONE;
} else {
- nm_log_warn (LOGD_ADSL, "(%s): PPP failed to start: %s", iface, err->message);
+ _LOGW (LOGD_ADSL, "PPP failed to start: %s", err->message);
g_error_free (err);
g_object_unref (priv->ppp_manager);
@@ -482,33 +479,19 @@ deactivate (NMDevice *device)
priv->nas_ifindex = -1;
g_free (priv->nas_ifname);
priv->nas_ifname = NULL;
-
- /* Poke NMDevice to notice that our hw_address is no longer valid */
- nm_device_update_hw_address (NM_DEVICE (self));
}
/**************************************************************/
-static guint
-get_hw_address_length (NMDevice *device, gboolean *out_permanent)
-{
- NMDeviceAdslPrivate *priv = NM_DEVICE_ADSL_GET_PRIVATE (device);
-
- return priv->nas_ifname ? ETH_ALEN : 0;
-}
-
static gboolean
carrier_update_cb (gpointer user_data)
{
NMDeviceAdsl *self = NM_DEVICE_ADSL (user_data);
int carrier;
char *path;
- const char *iface;
-
- iface = nm_device_get_iface (NM_DEVICE (self));
path = g_strdup_printf ("/sys/class/atm/%s/carrier",
- ASSERT_VALID_PATH_COMPONENT (iface));
+ ASSERT_VALID_PATH_COMPONENT (nm_device_get_iface (NM_DEVICE (self))));
carrier = (int) nm_platform_sysctl_get_int_checked (path, 10, 0, 1, -1);
g_free (path);
@@ -555,6 +538,7 @@ constructor (GType type,
GObjectConstructParam *construct_params)
{
GObject *object;
+ NMDeviceAdsl *self;
NMDeviceAdslPrivate *priv;
object = G_OBJECT_CLASS (nm_device_adsl_parent_class)->constructor (type,
@@ -563,18 +547,16 @@ constructor (GType type,
if (!object)
return NULL;
+ self = NM_DEVICE_ADSL (object);
priv = NM_DEVICE_ADSL_GET_PRIVATE (object);
priv->atm_index = get_atm_index (nm_device_get_iface (NM_DEVICE (object)));
if (priv->atm_index < 0) {
- nm_log_err (LOGD_ADSL, "(%s): error reading ATM device index",
- nm_device_get_iface (NM_DEVICE (object)));
+ _LOGE (LOGD_ADSL, "error reading ATM device index");
g_object_unref (object);
return NULL;
- } else {
- nm_log_dbg (LOGD_ADSL, "(%s): ATM device index %d",
- nm_device_get_iface (NM_DEVICE (object)), priv->atm_index);
- }
+ } else
+ _LOGD (LOGD_ADSL, "ATM device index %d", priv->atm_index);
/* Poll the carrier */
priv->carrier_poll_id = g_timeout_add_seconds (5, carrier_update_cb, object);
@@ -629,7 +611,6 @@ nm_device_adsl_class_init (NMDeviceAdslClass *klass)
parent_class->check_connection_compatible = check_connection_compatible;
parent_class->complete_connection = complete_connection;
- 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;
diff --git a/src/devices/adsl/nm-device-adsl.h b/src/devices/adsl/nm-device-adsl.h
index bbd0e63f0..f21381c21 100644
--- a/src/devices/adsl/nm-device-adsl.h
+++ b/src/devices/adsl/nm-device-adsl.h
@@ -19,8 +19,8 @@
* Copyright (C) 2009 - 2011 Red Hat Inc.
*/
-#ifndef NM_DEVICE_ADSL_H
-#define NM_DEVICE_ADSL_H
+#ifndef __NETWORKMANAGER_DEVICE_ADSL_H__
+#define __NETWORKMANAGER_DEVICE_ADSL_H__
#include <glib-object.h>
diff --git a/src/devices/bluetooth/Makefile.am b/src/devices/bluetooth/Makefile.am
index 639a1ad7a..8ab561acf 100644
--- a/src/devices/bluetooth/Makefile.am
+++ b/src/devices/bluetooth/Makefile.am
@@ -5,26 +5,22 @@ include $(GLIB_MAKEFILE)
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 \
+ -I${top_builddir}/libnm-core \
+ -I${top_srcdir}/libnm-core \
-DG_LOG_DOMAIN=\""NetworkManager-bluetooth"\" \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
- $(DBUS_CFLAGS) \
- $(POLKIT_CFLAGS) \
- $(LIBNL_CFLAGS) \
- $(GUDEV_CFLAGS)
+ $(DBUS_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_bt_enum_types_sources = $(srcdir)/nm-bt-error.h
nm-device-bt-glue.h: $(top_srcdir)/introspection/nm-device-bt.xml
dbus-binding-tool --prefix=nm_device_bt --mode=glib-server --output=$@ $<
@@ -47,6 +43,8 @@ libnm_device_plugin_bluetooth_la_SOURCES = \
nm-bluez4-manager.h \
nm-bluez5-manager.c \
nm-bluez5-manager.h \
+ nm-bt-error.h \
+ nm-bt-error.c \
\
nm-device-bt.c \
nm-device-bt.h \
@@ -62,6 +60,16 @@ libnm_device_plugin_bluetooth_la_LIBADD = \
$(DBUS_LIBS) \
$(GUDEV_LIBS)
+if WITH_BLUEZ5_DUN
+AM_CPPFLAGS += $(BLUEZ5_CFLAGS)
+
+libnm_device_plugin_bluetooth_la_SOURCES += \
+ nm-bluez5-dun.c \
+ nm-bluez5-dun.h
+
+libnm_device_plugin_bluetooth_la_LIBADD += $(BLUEZ5_LIBS)
+endif
+
CLEANFILES = $(BUILT_SOURCES)
EXTRA_DIST = $(SYMBOL_VIS_FILE)
diff --git a/src/devices/bluetooth/Makefile.in b/src/devices/bluetooth/Makefile.in
index 3145c52da..0a285fdad 100644
--- a/src/devices/bluetooth/Makefile.in
+++ b/src/devices/bluetooth/Makefile.in
@@ -78,6 +78,12 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
+@WITH_BLUEZ5_DUN_TRUE@am__append_1 = $(BLUEZ5_CFLAGS)
+@WITH_BLUEZ5_DUN_TRUE@am__append_2 = \
+@WITH_BLUEZ5_DUN_TRUE@ nm-bluez5-dun.c \
+@WITH_BLUEZ5_DUN_TRUE@ nm-bluez5-dun.h
+
+@WITH_BLUEZ5_DUN_TRUE@am__append_3 = $(BLUEZ5_LIBS)
subdir = src/devices/bluetooth
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
@@ -131,14 +137,26 @@ am__uninstall_files_from_dir = { \
am__installdirs = "$(DESTDIR)$(pkglibdir)"
LTLIBRARIES = $(pkglib_LTLIBRARIES)
am__DEPENDENCIES_1 =
+@WITH_BLUEZ5_DUN_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)
libnm_device_plugin_bluetooth_la_DEPENDENCIES = \
$(top_builddir)/src/devices/wwan/libnm-wwan.la \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_2)
+am__libnm_device_plugin_bluetooth_la_SOURCES_DIST = \
+ 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-bt-error.h \
+ nm-bt-error.c nm-device-bt.c nm-device-bt.h nm-bt-enum-types.h \
+ nm-bt-enum-types.c nm-device-bt-glue.h nm-bluez5-dun.c \
+ nm-bluez5-dun.h
am__objects_1 = nm-bt-enum-types.lo
am__objects_2 = $(am__objects_1)
+@WITH_BLUEZ5_DUN_TRUE@am__objects_3 = nm-bluez5-dun.lo
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)
+ nm-bluez5-manager.lo nm-bt-error.lo nm-device-bt.lo \
+ $(am__objects_2) $(am__objects_3)
libnm_device_plugin_bluetooth_la_OBJECTS = \
$(am_libnm_device_plugin_bluetooth_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
@@ -184,7 +202,7 @@ am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = $(libnm_device_plugin_bluetooth_la_SOURCES)
-DIST_SOURCES = $(libnm_device_plugin_bluetooth_la_SOURCES)
+DIST_SOURCES = $(am__libnm_device_plugin_bluetooth_la_SOURCES_DIST)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -219,6 +237,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -342,6 +362,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -361,6 +382,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -387,7 +409,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -466,59 +488,35 @@ with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
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/devices/wwan \
- -I${top_builddir}/include \
- -I${top_srcdir}/include \
- -I${top_builddir}/libnm-util \
- -I${top_srcdir}/libnm-util \
+AM_CPPFLAGS = -I${top_srcdir}/src -I${top_builddir}/src \
+ -I${top_srcdir}/src/devices -I${top_srcdir}/src/settings \
+ -I${top_srcdir}/src/platform -I${top_srcdir}/src/devices/wwan \
+ -I${top_srcdir}/include -I${top_builddir}/libnm-core \
+ -I${top_srcdir}/libnm-core \
-DG_LOG_DOMAIN=\""NetworkManager-bluetooth"\" \
- -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
- $(DBUS_CFLAGS) \
- $(POLKIT_CFLAGS) \
- $(LIBNL_CFLAGS) \
- $(GUDEV_CFLAGS)
-
+ -DNETWORKMANAGER_COMPILATION \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE $(DBUS_CFLAGS) \
+ $(am__append_1)
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_bt_enum_types_sources = $(srcdir)/nm-bt-error.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_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-bt-error.h nm-bt-error.c nm-device-bt.c \
+ nm-device-bt.h $(BUILT_SOURCES) $(am__append_2)
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)
-
+libnm_device_plugin_bluetooth_la_LIBADD = \
+ $(top_builddir)/src/devices/wwan/libnm-wwan.la $(DBUS_LIBS) \
+ $(GUDEV_LIBS) $(am__append_3)
CLEANFILES = $(BUILT_SOURCES)
EXTRA_DIST = $(SYMBOL_VIS_FILE)
all: $(BUILT_SOURCES)
@@ -605,8 +603,10 @@ distclean-compile:
@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-dun.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-bt-error.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-device-bt.Plo@am__quote@
.c.o:
diff --git a/src/devices/bluetooth/exports.ver b/src/devices/bluetooth/exports.ver
index d2c451244..24cd848ce 100644
--- a/src/devices/bluetooth/exports.ver
+++ b/src/devices/bluetooth/exports.ver
@@ -1,7 +1,6 @@
{
global:
nm_device_factory_create;
- nm_device_factory_get_device_type;
local:
*;
};
diff --git a/src/devices/bluetooth/nm-bluez-common.h b/src/devices/bluetooth/nm-bluez-common.h
index f80cfc2e3..f0cab43b3 100644
--- a/src/devices/bluetooth/nm-bluez-common.h
+++ b/src/devices/bluetooth/nm-bluez-common.h
@@ -18,8 +18,8 @@
* Copyright (C) 2009 Red Hat, Inc.
*/
-#ifndef NM_BLUEZ_COMMON_H
-#define NM_BLUEZ_COMMON_H
+#ifndef __NETWORKMANAGER_BLUEZ_COMMON_H__
+#define __NETWORKMANAGER_BLUEZ_COMMON_H__
#include <config.h>
diff --git a/src/devices/bluetooth/nm-bluez-device.c b/src/devices/bluetooth/nm-bluez-device.c
index 4c448a376..fe1a97bba 100644
--- a/src/devices/bluetooth/nm-bluez-device.c
+++ b/src/devices/bluetooth/nm-bluez-device.c
@@ -19,22 +19,24 @@
* Copyright (C) 2013 Intel Corporation.
*/
+#include "config.h"
+
#include <glib.h>
#include <glib/gi18n.h>
#include <gio/gio.h>
#include <string.h>
-#include <net/ethernet.h>
-#include <netinet/ether.h>
-#include "NetworkManager.h"
-#include "nm-setting-bluetooth.h"
+#include "nm-core-internal.h"
#include "nm-bluez-common.h"
#include "nm-bluez-device.h"
#include "nm-logging.h"
-#include "nm-utils.h"
#include "nm-settings-connection.h"
+#include "NetworkManagerUtils.h"
+#if WITH_BLUEZ5_DUN
+#include "nm-bluez5-dun.h"
+#endif
G_DEFINE_TYPE (NMBluezDevice, nm_bluez_device, G_TYPE_OBJECT)
@@ -55,19 +57,21 @@ typedef struct {
gboolean usable;
NMBluetoothCapabilities connection_bt_type;
+ char *adapter_address;
char *address;
- guint8 bin_address[ETH_ALEN];
char *name;
guint32 capabilities;
gboolean connected;
- char *bt_iface;
+ char *b4_iface;
+#if WITH_BLUEZ5_DUN
+ NMBluez5DunContext *b5_dun_context;
+#endif
NMConnectionProvider *provider;
GSList *connections;
NMConnection *pan_connection;
- NMConnection *pan_connection_original;
gboolean pan_connection_no_autocreate;
} NMBluezDevicePrivate;
@@ -156,9 +160,12 @@ nm_bluez_device_get_capabilities (NMBluezDevice *self)
gboolean
nm_bluez_device_get_connected (NMBluezDevice *self)
{
+ NMBluezDevicePrivate *priv;
+
g_return_val_if_fail (NM_IS_BLUEZ_DEVICE (self), FALSE);
- return NM_BLUEZ_DEVICE_GET_PRIVATE (self)->connected;
+ priv = NM_BLUEZ_DEVICE_GET_PRIVATE (self);
+ return priv->connected;
}
static void
@@ -168,7 +175,6 @@ pan_connection_check_create (NMBluezDevice *self)
NMConnection *added;
NMSetting *setting;
char *uuid, *id;
- GByteArray *bdaddr_array;
GError *error = NULL;
NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE (self);
@@ -187,7 +193,7 @@ pan_connection_check_create (NMBluezDevice *self)
/* create a new connection */
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Setting: Connection */
uuid = nm_utils_uuid_generate ();
@@ -202,29 +208,26 @@ pan_connection_check_create (NMBluezDevice *self)
nm_connection_add_setting (connection, setting);
/* Setting: Bluetooth */
- bdaddr_array = g_byte_array_sized_new (sizeof (priv->bin_address));
- g_byte_array_append (bdaddr_array, priv->bin_address, sizeof (priv->bin_address));
setting = nm_setting_bluetooth_new ();
g_object_set (G_OBJECT (setting),
- NM_SETTING_BLUETOOTH_BDADDR, bdaddr_array,
+ NM_SETTING_BLUETOOTH_BDADDR, priv->address,
NM_SETTING_BLUETOOTH_TYPE, NM_SETTING_BLUETOOTH_TYPE_PANU,
NULL);
nm_connection_add_setting (connection, setting);
- g_byte_array_free (bdaddr_array, TRUE);
/* Setting: IPv4 */
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_MAY_FAIL, FALSE,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
+ NM_SETTING_IP_CONFIG_MAY_FAIL, FALSE,
NULL);
nm_connection_add_setting (connection, setting);
/* Setting: IPv6 */
setting = nm_setting_ip6_config_new ();
g_object_set (G_OBJECT (setting),
- NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO,
- NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO,
+ NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
NULL);
nm_connection_add_setting (connection, setting);
@@ -240,9 +243,10 @@ pan_connection_check_create (NMBluezDevice *self)
g_assert (connection_compatible (self, added));
g_assert (nm_connection_compare (added, connection, NM_SETTING_COMPARE_FLAG_EXACT));
+ nm_settings_connection_set_flags (NM_SETTINGS_CONNECTION (added), NM_SETTINGS_CONNECTION_FLAGS_NM_GENERATED, TRUE);
+
priv->connections = g_slist_prepend (priv->connections, g_object_ref (added));
priv->pan_connection = added;
- 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_BT, "bluez[%s] couldn't add new Bluetooth connection for NAP device: '%s' (%s): %d / %s",
@@ -250,8 +254,8 @@ pan_connection_check_create (NMBluezDevice *self)
(error && error->message) ? error->message : "(unknown)");
g_clear_error (&error);
- g_object_unref (connection);
}
+ g_object_unref (connection);
g_free (id);
g_free (uuid);
@@ -264,13 +268,12 @@ check_emit_usable (NMBluezDevice *self)
gboolean new_usable;
/* only expect the supported capabilities set. */
- 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 ));
+ g_assert ((priv->capabilities & ~(NM_BT_CAPABILITY_NAP | NM_BT_CAPABILITY_DUN)) == NM_BT_CAPABILITY_NONE );
new_usable = (priv->initialized && priv->capabilities && priv->name &&
((priv->bluez_version == 4) ||
(priv->bluez_version == 5 && priv->adapter5 && priv->adapter_powered) ) &&
- priv->dbus_connection && priv->address);
+ priv->dbus_connection && priv->address && priv->adapter_address);
if (!new_usable)
goto END;
@@ -302,7 +305,7 @@ connection_compatible (NMBluezDevice *self, NMConnection *connection)
NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE (self);
NMSettingBluetooth *s_bt;
const char *bt_type;
- const GByteArray *bdaddr;
+ const char *bdaddr;
if (!nm_connection_is_type (connection, NM_SETTING_BLUETOOTH_SETTING_NAME))
return FALSE;
@@ -311,14 +314,13 @@ connection_compatible (NMBluezDevice *self, NMConnection *connection)
if (!s_bt)
return FALSE;
- if (!priv->address) {
- /* unless address is set, bin_address is not initialized. */
+ if (!priv->address)
return FALSE;
- }
+
bdaddr = nm_setting_bluetooth_get_bdaddr (s_bt);
- if (!bdaddr || bdaddr->len != ETH_ALEN)
+ if (!bdaddr)
return FALSE;
- if (memcmp (bdaddr->data, priv->bin_address, ETH_ALEN) != 0)
+ if (!nm_utils_hwaddr_matches (bdaddr, -1, priv->address, -1))
return FALSE;
bt_type = nm_setting_bluetooth_get_connection_type (s_bt);
@@ -362,10 +364,8 @@ cp_connection_removed (NMConnectionProvider *provider,
if (g_slist_find (priv->connections, connection)) {
priv->connections = g_slist_remove (priv->connections, connection);
- if (priv->pan_connection == 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);
}
@@ -420,26 +420,37 @@ nm_bluez_device_disconnect (NMBluezDevice *self)
{
NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE (self);
GVariant *args = NULL;
- const char *dbus_iface;
+ const char *dbus_iface = NULL;
g_return_if_fail (priv->dbus_connection);
- 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.
- */
- if (!priv->bt_iface)
- return;
-
- args = g_variant_new ("(s)", priv->bt_iface),
- 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;
- }
+ if (priv->connection_bt_type == NM_BT_CAPABILITY_DUN) {
+ if (priv->bluez_version == 4) {
+ /* Can't pass a NULL interface name through dbus to bluez, so just
+ * ignore the disconnect if the interface isn't known.
+ */
+ if (!priv->b4_iface)
+ goto out;
+ args = g_variant_new ("(s)", priv->b4_iface),
+ dbus_iface = BLUEZ4_SERIAL_INTERFACE;
+ } else if (priv->bluez_version == 5) {
+#if WITH_BLUEZ5_DUN
+ nm_bluez5_dun_cleanup (priv->b5_dun_context);
+#else
+ g_assert_not_reached ();
+#endif
+ priv->connected = FALSE;
+ goto out;
+ }
+ } else if (priv->connection_bt_type == NM_BT_CAPABILITY_NAP) {
+ if (priv->bluez_version == 4)
+ dbus_iface = BLUEZ4_NETWORK_INTERFACE;
+ else if (priv->bluez_version == 5)
+ dbus_iface = BLUEZ5_NETWORK_INTERFACE;
+ else
+ g_assert_not_reached ();
+ } else
+ g_assert_not_reached ();
g_dbus_connection_call (priv->dbus_connection,
BLUEZ_SERVICE,
@@ -454,6 +465,8 @@ nm_bluez_device_disconnect (NMBluezDevice *self)
(GAsyncReadyCallback) bluez_disconnect_cb,
g_object_ref (self));
+out:
+ g_clear_pointer (&priv->b4_iface, g_free);
priv->connection_bt_type = NM_BT_CAPABILITY_NONE;
}
@@ -480,7 +493,7 @@ bluez_connect_cb (GDBusConnection *dbus_connection,
g_simple_async_result_set_op_res_gpointer (result,
g_strdup (device),
g_free);
- priv->bt_iface = device;
+ priv->b4_iface = device;
g_variant_unref (variant);
}
@@ -489,6 +502,28 @@ bluez_connect_cb (GDBusConnection *dbus_connection,
g_object_unref (result_object);
}
+#if WITH_BLUEZ5_DUN
+static void
+bluez5_dun_connect_cb (NMBluez5DunContext *context,
+ const char *device,
+ GError *error,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *result = G_SIMPLE_ASYNC_RESULT (user_data);
+
+ if (error) {
+ g_simple_async_result_take_error (result, error);
+ } else {
+ g_simple_async_result_set_op_res_gpointer (result,
+ g_strdup (device),
+ g_free);
+ }
+
+ g_simple_async_result_complete (result);
+ g_object_unref (result);
+}
+#endif
+
void
nm_bluez_device_connect_async (NMBluezDevice *self,
NMBluetoothCapabilities connection_bt_type,
@@ -497,26 +532,39 @@ nm_bluez_device_connect_async (NMBluezDevice *self,
{
GSimpleAsyncResult *simple;
NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE (self);
- const char *dbus_iface;
- const char *connect_type = BLUETOOTH_CONNECT_NAP;
+ const char *dbus_iface = NULL;
+ const char *connect_type = NULL;
g_return_if_fail (priv->capabilities & connection_bt_type & (NM_BT_CAPABILITY_DUN | NM_BT_CAPABILITY_NAP));
- 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;
- }
-
simple = g_simple_async_result_new (G_OBJECT (self),
callback,
user_data,
nm_bluez_device_connect_async);
+ priv->connection_bt_type = connection_bt_type;
+
+ if (connection_bt_type == NM_BT_CAPABILITY_NAP) {
+ connect_type = BLUETOOTH_CONNECT_NAP;
+ if (priv->bluez_version == 4)
+ dbus_iface = BLUEZ4_NETWORK_INTERFACE;
+ else if (priv->bluez_version == 5)
+ dbus_iface = BLUEZ5_NETWORK_INTERFACE;
+ } else if (connection_bt_type == NM_BT_CAPABILITY_DUN) {
+ connect_type = BLUETOOTH_CONNECT_DUN;
+ if (priv->bluez_version == 4)
+ dbus_iface = BLUEZ4_SERIAL_INTERFACE;
+ else if (priv->bluez_version == 5) {
+#if WITH_BLUEZ5_DUN
+ if (priv->b5_dun_context == NULL)
+ priv->b5_dun_context = nm_bluez5_dun_new (priv->adapter_address, priv->address);
+ nm_bluez5_dun_connect (priv->b5_dun_context, bluez5_dun_connect_cb, simple);
+#else
+ g_assert_not_reached ();
+#endif
+ return;
+ }
+ } else
+ g_assert_not_reached ();
g_dbus_connection_call (priv->dbus_connection,
BLUEZ_SERVICE,
@@ -530,8 +578,6 @@ nm_bluez_device_connect_async (NMBluezDevice *self,
NULL,
(GAsyncReadyCallback) bluez_connect_cb,
simple);
-
- priv->connection_bt_type = connection_bt_type;
}
const char *
@@ -539,6 +585,7 @@ nm_bluez_device_connect_finish (NMBluezDevice *self,
GAsyncResult *result,
GError **error)
{
+ NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE (self);
GSimpleAsyncResult *simple;
const char *device;
@@ -553,13 +600,28 @@ nm_bluez_device_connect_finish (NMBluezDevice *self,
return NULL;
device = (const char *) g_simple_async_result_get_op_res_gpointer (simple);
+ if (device && priv->bluez_version == 5)
+ priv->connected = TRUE;
+
return device;
}
/***********************************************************/
+static void
+set_adapter_address (NMBluezDevice *self, const char *address)
+{
+ NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE (self);
+
+ g_return_if_fail (address);
+
+ if (priv->adapter_address)
+ g_free (priv->adapter_address);
+ priv->adapter_address = g_strdup (address);
+}
+
static guint32
-convert_uuids_to_capabilities (const char **strings, int bluez_version)
+convert_uuids_to_capabilities (const char **strings)
{
const char **iter;
guint32 capabilities = 0;
@@ -571,8 +633,7 @@ convert_uuids_to_capabilities (const char **strings, int bluez_version)
if (parts && parts[0]) {
switch (g_ascii_strtoull (parts[0], NULL, 16)) {
case 0x1103:
- if (bluez_version == 4)
- capabilities |= NM_BT_CAPABILITY_DUN;
+ capabilities |= NM_BT_CAPABILITY_DUN;
break;
case 0x1116:
capabilities |= NM_BT_CAPABILITY_NAP;
@@ -593,7 +654,7 @@ _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, priv->bluez_version);
+ uint_val = convert_uuids_to_capabilities (uuids);
if (priv->capabilities != uint_val) {
if (priv->capabilities) {
/* changing (relevant) capabilities is not supported and ignored -- except setting initially */
@@ -613,13 +674,10 @@ _set_property_capabilities (NMBluezDevice *self, const char **uuids)
/**
* priv->address can only be set one to a certain (non NULL) value. Every later attempt
* to reset it to another value will be ignored and a warning will be logged.
- *
- * When setting the address for the first time, we also set bin_address.
**/
static void
_set_property_address (NMBluezDevice *self, const char *addr)
{
- struct ether_addr *tmp;
NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE (self);
if (g_strcmp0 (priv->address, addr) == 0)
@@ -635,15 +693,11 @@ _set_property_address (NMBluezDevice *self, const char *addr)
return;
}
- tmp = ether_aton (addr);
- if (!tmp) {
- if (priv->address)
- 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, "bluez[%s] cannot reset address from NULL to '%s' (invalid value)", priv->path, addr);
+ if (!nm_utils_hwaddr_valid (addr, ETH_ALEN)) {
+ nm_log_warn (LOGD_BT, "bluez[%s] cannot set address to '%s' (invalid value)", priv->path, addr);
return;
}
- memcpy (priv->bin_address, tmp->ether_addr_octet, ETH_ALEN);
+
priv->address = g_strdup (addr);
g_object_notify (G_OBJECT (self), NM_BLUEZ_DEVICE_ADDRESS);
}
@@ -752,6 +806,10 @@ adapter5_on_acquired (GObject *object, GAsyncResult *res, NMBluezDevice *self)
if (v)
g_variant_unref (v);
+ v = g_dbus_proxy_get_cached_property (priv->adapter5, "Address");
+ if (VARIANT_IS_OF_TYPE_STRING (v))
+ set_adapter_address (self, g_variant_get_string (v, NULL));
+
priv->initialized = TRUE;
g_signal_emit (self, signals[INITIALIZED], 0, TRUE);
@@ -957,7 +1015,10 @@ on_bus_acquired (GObject *object, GAsyncResult *res, NMBluezDevice *self)
/********************************************************************/
NMBluezDevice *
-nm_bluez_device_new (const char *path, NMConnectionProvider *provider, int bluez_version)
+nm_bluez_device_new (const char *path,
+ const char *adapter_address,
+ NMConnectionProvider *provider,
+ int bluez_version)
{
NMBluezDevice *self;
NMBluezDevicePrivate *priv;
@@ -978,8 +1039,10 @@ nm_bluez_device_new (const char *path, NMConnectionProvider *provider, int bluez
priv = NM_BLUEZ_DEVICE_GET_PRIVATE (self);
priv->bluez_version = bluez_version;
-
priv->provider = provider;
+ g_return_val_if_fail (bluez_version == 5 || (bluez_version == 4 && adapter_address), NULL);
+ if (adapter_address)
+ set_adapter_address (self, adapter_address);
g_signal_connect (priv->provider,
NM_CP_SIGNAL_CONNECTION_ADDED,
@@ -1037,14 +1100,19 @@ dispose (GObject *object)
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))
+ if (nm_settings_connection_get_nm_generated (NM_SETTINGS_CONNECTION (priv->pan_connection)))
to_delete = g_object_ref (priv->pan_connection);
priv->pan_connection = NULL;
- g_clear_object (&priv->pan_connection_original);
}
+#if WITH_BLUEZ5_DUN
+ if (priv->b5_dun_context) {
+ nm_bluez5_dun_free (priv->b5_dun_context);
+ priv->b5_dun_context = NULL;
+ }
+#endif
+
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);
@@ -1073,9 +1141,10 @@ finalize (GObject *object)
nm_log_dbg (LOGD_BT, "bluez[%s]: finalize NMBluezDevice", priv->path);
g_free (priv->path);
+ g_free (priv->adapter_address);
g_free (priv->address);
g_free (priv->name);
- g_free (priv->bt_iface);
+ g_free (priv->b4_iface);
if (priv->proxy)
g_signal_handlers_disconnect_by_data (priv->proxy, object);
@@ -1148,51 +1217,45 @@ nm_bluez_device_class_init (NMBluezDeviceClass *config_class)
/* Properties */
g_object_class_install_property
(object_class, PROP_PATH,
- g_param_spec_string (NM_BLUEZ_DEVICE_PATH,
- "DBus Path",
- "DBus Path",
+ g_param_spec_string (NM_BLUEZ_DEVICE_PATH, "", "",
NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_ADDRESS,
- g_param_spec_string (NM_BLUEZ_DEVICE_ADDRESS,
- "Address",
- "Address",
+ g_param_spec_string (NM_BLUEZ_DEVICE_ADDRESS, "", "",
NULL,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_NAME,
- g_param_spec_string (NM_BLUEZ_DEVICE_NAME,
- "Name",
- "Name",
+ g_param_spec_string (NM_BLUEZ_DEVICE_NAME, "", "",
NULL,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_CAPABILITIES,
- g_param_spec_uint (NM_BLUEZ_DEVICE_CAPABILITIES,
- "Capabilities",
- "Capabilities",
- 0, G_MAXUINT, 0,
- G_PARAM_READABLE));
+ g_param_spec_uint (NM_BLUEZ_DEVICE_CAPABILITIES, "", "",
+ 0, G_MAXUINT, 0,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_USABLE,
- g_param_spec_boolean (NM_BLUEZ_DEVICE_USABLE,
- "Usable",
- "Usable",
+ g_param_spec_boolean (NM_BLUEZ_DEVICE_USABLE, "", "",
FALSE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_CONNECTED,
- g_param_spec_boolean (NM_BLUEZ_DEVICE_CONNECTED,
- "Connected",
- "Connected",
+ g_param_spec_boolean (NM_BLUEZ_DEVICE_CONNECTED, "", "",
FALSE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/* Signals */
signals[INITIALIZED] = g_signal_new ("initialized",
diff --git a/src/devices/bluetooth/nm-bluez-device.h b/src/devices/bluetooth/nm-bluez-device.h
index 0bf7d898b..92d99fa75 100644
--- a/src/devices/bluetooth/nm-bluez-device.h
+++ b/src/devices/bluetooth/nm-bluez-device.h
@@ -18,8 +18,8 @@
* Copyright (C) 2009 - 2014 Red Hat, Inc.
*/
-#ifndef NM_BLUEZ_DEVICE_H
-#define NM_BLUEZ_DEVICE_H
+#ifndef __NETWORKMANAGER_BLUEZ_DEVICE_H__
+#define __NETWORKMANAGER_BLUEZ_DEVICE_H__
#include <glib.h>
#include <glib-object.h>
@@ -62,7 +62,10 @@ typedef struct {
GType nm_bluez_device_get_type (void);
-NMBluezDevice *nm_bluez_device_new (const char *path, NMConnectionProvider *provider, int bluez_version);
+NMBluezDevice *nm_bluez_device_new (const char *path,
+ const char *adapter_address,
+ NMConnectionProvider *provider,
+ int bluez_version);
const char *nm_bluez_device_get_path (NMBluezDevice *self);
@@ -94,5 +97,5 @@ nm_bluez_device_connect_finish (NMBluezDevice *self,
void
nm_bluez_device_disconnect (NMBluezDevice *self);
-#endif /* NM_BLUEZ_DEVICE_H */
+#endif /* __NETWORKMANAGER_BLUEZ_DEVICE_H__ */
diff --git a/src/devices/bluetooth/nm-bluez-manager.c b/src/devices/bluetooth/nm-bluez-manager.c
index 04ffb0a47..e176a4b46 100644
--- a/src/devices/bluetooth/nm-bluez-manager.c
+++ b/src/devices/bluetooth/nm-bluez-manager.c
@@ -18,6 +18,8 @@
* Copyright (C) 2013 - 2014 Red Hat, Inc.
*/
+#include "config.h"
+
#include <signal.h>
#include <string.h>
#include <stdlib.h>
@@ -62,20 +64,12 @@ 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 {
@@ -368,6 +362,18 @@ check_bluez_and_try_setup (NMBluezManager *self)
async_data_pack (self));
}
+static void
+start (NMDeviceFactory *factory)
+{
+ check_bluez_and_try_setup (NM_BLUEZ_MANAGER (factory));
+}
+
+static NMDeviceType
+get_device_type (NMDeviceFactory *factory)
+{
+ return NM_DEVICE_TYPE_BT;
+}
+
/*********************************************************************/
static void
@@ -391,16 +397,6 @@ dispose (GObject *object)
}
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);
@@ -412,6 +408,8 @@ nm_bluez_manager_init (NMBluezManager *self)
static void
device_factory_interface_init (NMDeviceFactory *factory_iface)
{
+ factory_iface->get_device_type = get_device_type;
+ factory_iface->start = start;
}
static void
@@ -423,6 +421,5 @@ nm_bluez_manager_class_init (NMBluezManagerClass *klass)
/* 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
index 68d6dbe5e..8320b2987 100644
--- a/src/devices/bluetooth/nm-bluez-manager.h
+++ b/src/devices/bluetooth/nm-bluez-manager.h
@@ -19,8 +19,8 @@
* Copyright (C) 2007 - 2014 Red Hat, Inc.
*/
-#ifndef NM_BLUEZ_MANAGER_H
-#define NM_BLUEZ_MANAGER_H
+#ifndef __NETWORKMANAGER_BLUEZ_MANAGER_H__
+#define __NETWORKMANAGER_BLUEZ_MANAGER_H__
#include <glib.h>
#include <glib-object.h>
@@ -40,5 +40,5 @@ typedef struct {
GObjectClass parent;
} NMBluezManagerClass;
-#endif /* NM_BLUEZ_MANAGER_H */
+#endif /* __NETWORKMANAGER_BLUEZ_MANAGER_H__ */
diff --git a/src/devices/bluetooth/nm-bluez4-adapter.c b/src/devices/bluetooth/nm-bluez4-adapter.c
index ad1786f02..9d1cfe1fe 100644
--- a/src/devices/bluetooth/nm-bluez4-adapter.c
+++ b/src/devices/bluetooth/nm-bluez4-adapter.c
@@ -18,10 +18,12 @@
* Copyright (C) 2009 - 2012 Red Hat, Inc.
*/
+#include "config.h"
+
#include <glib.h>
#include <string.h>
-#include "NetworkManager.h"
+#include "nm-dbus-interface.h"
#include "nm-dbus-manager.h"
#include "nm-bluez4-adapter.h"
#include "nm-bluez-device.h"
@@ -162,7 +164,7 @@ device_created (DBusGProxy *proxy, const char *path, gpointer user_data)
NMBluez4AdapterPrivate *priv = NM_BLUEZ4_ADAPTER_GET_PRIVATE (self);
NMBluezDevice *device;
- device = nm_bluez_device_new (path, priv->provider, 4);
+ device = nm_bluez_device_new (path, priv->address, 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);
@@ -371,19 +373,17 @@ nm_bluez4_adapter_class_init (NMBluez4AdapterClass *config_class)
/* Properties */
g_object_class_install_property
(object_class, PROP_PATH,
- g_param_spec_string (NM_BLUEZ4_ADAPTER_PATH,
- "DBus Path",
- "DBus Path",
+ g_param_spec_string (NM_BLUEZ4_ADAPTER_PATH, "", "",
NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_ADDRESS,
- g_param_spec_string (NM_BLUEZ4_ADAPTER_ADDRESS,
- "Address",
- "Address",
+ g_param_spec_string (NM_BLUEZ4_ADAPTER_ADDRESS, "", "",
NULL,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/* Signals */
signals[INITIALIZED] = g_signal_new ("initialized",
diff --git a/src/devices/bluetooth/nm-bluez4-adapter.h b/src/devices/bluetooth/nm-bluez4-adapter.h
index 454ca557e..a62564127 100644
--- a/src/devices/bluetooth/nm-bluez4-adapter.h
+++ b/src/devices/bluetooth/nm-bluez4-adapter.h
@@ -18,8 +18,8 @@
* Copyright (C) 2009 - 2012 Red Hat, Inc.
*/
-#ifndef NM_BLUEZ4_ADAPTER_H
-#define NM_BLUEZ4_ADAPTER_H
+#ifndef __NETWORKMANAGER_BLUEZ4_ADAPTER_H__
+#define __NETWORKMANAGER_BLUEZ4_ADAPTER_H__
#include <glib.h>
#include <glib-object.h>
@@ -65,5 +65,5 @@ gboolean nm_bluez4_adapter_get_initialized (NMBluez4Adapter *self);
GSList *nm_bluez4_adapter_get_devices (NMBluez4Adapter *self);
-#endif /* NM_BLUEZ4_ADAPTER_H */
+#endif /* __NETWORKMANAGER_BLUEZ4_ADAPTER_H__ */
diff --git a/src/devices/bluetooth/nm-bluez4-manager.c b/src/devices/bluetooth/nm-bluez4-manager.c
index 2660cbd92..23b13d32d 100644
--- a/src/devices/bluetooth/nm-bluez4-manager.c
+++ b/src/devices/bluetooth/nm-bluez4-manager.c
@@ -19,6 +19,8 @@
* Copyright (C) 2007 - 2013 Red Hat, Inc.
*/
+#include "config.h"
+
#include <signal.h>
#include <string.h>
#include <stdlib.h>
diff --git a/src/devices/bluetooth/nm-bluez4-manager.h b/src/devices/bluetooth/nm-bluez4-manager.h
index 19b1c65a1..13cfef939 100644
--- a/src/devices/bluetooth/nm-bluez4-manager.h
+++ b/src/devices/bluetooth/nm-bluez4-manager.h
@@ -19,8 +19,8 @@
* Copyright (C) 2007 - 2013 Red Hat, Inc.
*/
-#ifndef NM_BLUEZ4_MANAGER_H
-#define NM_BLUEZ4_MANAGER_H
+#ifndef __NETWORKMANAGER_BLUEZ4_MANAGER_H__
+#define __NETWORKMANAGER_BLUEZ4_MANAGER_H__
#include <glib.h>
#include <glib-object.h>
@@ -58,5 +58,5 @@ NMBluez4Manager *nm_bluez4_manager_new (NMConnectionProvider *provider);
void nm_bluez4_manager_query_devices (NMBluez4Manager *manager);
-#endif /* NM_BLUEZ4_MANAGER_H */
+#endif /* __NETWORKMANAGER_BLUEZ4_MANAGER_H__ */
diff --git a/src/devices/bluetooth/nm-bluez5-dun.c b/src/devices/bluetooth/nm-bluez5-dun.c
new file mode 100644
index 000000000..a97eaa770
--- /dev/null
+++ b/src/devices/bluetooth/nm-bluez5-dun.c
@@ -0,0 +1,410 @@
+/* -*- 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 "config.h"
+
+#include <sys/socket.h>
+#include <bluetooth/sdp.h>
+#include <bluetooth/sdp_lib.h>
+#include <bluetooth/rfcomm.h>
+#include <net/ethernet.h>
+#include <sys/ioctl.h>
+#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+
+#include "nm-bluez5-dun.h"
+#include "nm-bt-error.h"
+#include "nm-logging.h"
+#include "NetworkManagerUtils.h"
+
+struct _NMBluez5DunContext {
+ bdaddr_t src;
+ bdaddr_t dst;
+ char *src_str;
+ char *dst_str;
+ int rfcomm_channel;
+ int rfcomm_fd;
+ int rfcomm_tty_fd;
+ int rfcomm_id;
+ NMBluez5DunFunc callback;
+ gpointer user_data;
+ sdp_session_t *sdp_session;
+ guint sdp_watch_id;
+};
+
+static void
+dun_connect (NMBluez5DunContext *context)
+{
+ struct sockaddr_rc sa;
+ int devid, try = 30;
+ char tty[100];
+ const int ttylen = sizeof (tty) - 1;
+ GError *error = NULL;
+
+ struct rfcomm_dev_req req = {
+ .flags = (1 << RFCOMM_REUSE_DLC) | (1 << RFCOMM_RELEASE_ONHUP),
+ .dev_id = -1,
+ .channel = context->rfcomm_channel
+ };
+
+ context->rfcomm_fd = socket (AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM);
+ if (context->rfcomm_fd < 0) {
+ int errsv = errno;
+ error = g_error_new (NM_BT_ERROR, NM_BT_ERROR_DUN_CONNECT_FAILED,
+ "Failed to create RFCOMM socket: (%d) %s",
+ errsv, strerror (errsv));
+ goto done;
+ }
+
+ /* Connect to the remote device */
+ sa.rc_family = AF_BLUETOOTH;
+ sa.rc_channel = 0;
+ memcpy (&sa.rc_bdaddr, &context->src, ETH_ALEN);
+ if (bind (context->rfcomm_fd, (struct sockaddr *) &sa, sizeof(sa))) {
+ int errsv = errno;
+ error = g_error_new (NM_BT_ERROR, NM_BT_ERROR_DUN_CONNECT_FAILED,
+ "Failed to bind socket: (%d) %s",
+ errsv, strerror (errsv));
+ goto done;
+ }
+
+ sa.rc_channel = context->rfcomm_channel;
+ memcpy (&sa.rc_bdaddr, &context->dst, ETH_ALEN);
+ if (connect (context->rfcomm_fd, (struct sockaddr *) &sa, sizeof (sa)) ) {
+ int errsv = errno;
+ error = g_error_new (NM_BT_ERROR, NM_BT_ERROR_DUN_CONNECT_FAILED,
+ "Failed to connect to remote device: (%d) %s",
+ errsv, strerror (errsv));
+ goto done;
+ }
+
+ nm_log_dbg (LOGD_BT, "(%s): connected to %s on channel %d",
+ context->src_str, context->dst_str, context->rfcomm_channel);
+
+ /* Create an RFCOMM kernel device for the DUN channel */
+ memcpy (&req.src, &context->src, ETH_ALEN);
+ memcpy (&req.dst, &context->dst, ETH_ALEN);
+ devid = ioctl (context->rfcomm_fd, RFCOMMCREATEDEV, &req);
+ if (devid < 0) {
+ int errsv = errno;
+ error = g_error_new (NM_BT_ERROR, NM_BT_ERROR_DUN_CONNECT_FAILED,
+ "Failed to create rfcomm device: (%d) %s",
+ errsv, strerror (errsv));
+ goto done;
+ }
+ context->rfcomm_id = devid;
+
+ snprintf (tty, ttylen, "/dev/rfcomm%d", devid);
+ while ((context->rfcomm_tty_fd = open (tty, O_RDONLY | O_NOCTTY)) < 0 && try--) {
+ if (try) {
+ g_usleep (100 * 1000);
+ continue;
+ }
+
+ error = g_error_new (NM_BT_ERROR, NM_BT_ERROR_DUN_CONNECT_FAILED,
+ "Failed to find rfcomm device: %s",
+ tty);
+ break;
+ }
+
+done:
+ context->callback (context, tty, error, context->user_data);
+}
+
+static void
+sdp_search_cleanup (NMBluez5DunContext *context)
+{
+ if (context->sdp_session) {
+ sdp_close (context->sdp_session);
+ context->sdp_session = NULL;
+ }
+
+ if (context->sdp_watch_id) {
+ g_source_remove (context->sdp_watch_id);
+ context->sdp_watch_id = 0;
+ }
+}
+
+static void
+sdp_search_completed_cb (uint8_t type, uint16_t status, uint8_t *rsp, size_t size, void *user_data)
+{
+ NMBluez5DunContext *context = user_data;
+ int scanned, seqlen = 0, bytesleft = size;
+ uint8_t dataType;
+ int channel = -1;
+
+ nm_log_dbg (LOGD_BT, "(%s -> %s): SDP search finished with type=%d status=%d",
+ context->src_str, context->dst_str, status, type);
+
+ /* SDP response received */
+ if (status || type != SDP_SVC_SEARCH_ATTR_RSP) {
+ GError *error = g_error_new (NM_BT_ERROR,
+ NM_BT_ERROR_DUN_CONNECT_FAILED,
+ "Did not get a Service Discovery response");
+ context->callback (context, NULL, error, context->user_data);
+ goto done;
+ }
+
+ scanned = sdp_extract_seqtype (rsp, bytesleft, &dataType, &seqlen);
+
+ nm_log_dbg (LOGD_BT, "(%s -> %s): SDP sequence type scanned=%d length=%d",
+ context->src_str, context->dst_str, scanned, seqlen);
+
+ scanned = sdp_extract_seqtype (rsp, bytesleft, &dataType, &seqlen);
+ if (!scanned || !seqlen) {
+ /* Short read or unknown sequence type */
+ GError *error = g_error_new (NM_BT_ERROR,
+ NM_BT_ERROR_DUN_CONNECT_FAILED,
+ "Improper Service Discovery response");
+ context->callback (context, NULL, error, context->user_data);
+ goto done;
+ }
+
+ rsp += scanned;
+ bytesleft -= scanned;
+ do {
+ sdp_record_t *rec;
+ int recsize = 0;
+ sdp_list_t *protos;
+
+ rec = sdp_extract_pdu (rsp, bytesleft, &recsize);
+ if (!rec)
+ break;
+
+ if (!recsize) {
+ sdp_record_free (rec);
+ break;
+ }
+
+ if (sdp_get_access_protos (rec, &protos) == 0) {
+ /* Extract the DUN channel number */
+ channel = sdp_get_proto_port (protos, RFCOMM_UUID);
+ sdp_list_free (protos, NULL);
+
+ nm_log_dbg (LOGD_BT, "(%s -> %s): SDP channel=%d",
+ context->src_str, context->dst_str, channel);
+ }
+ sdp_record_free (rec);
+
+ scanned += recsize;
+ rsp += recsize;
+ bytesleft -= recsize;
+ } while ((scanned < (ssize_t) size) && (bytesleft > 0) && (channel < 0));
+
+done:
+ if (channel != -1) {
+ context->rfcomm_channel = channel;
+ dun_connect (context);
+ }
+
+ sdp_search_cleanup (context);
+}
+
+static gboolean
+sdp_search_process_cb (GIOChannel *channel, GIOCondition condition, gpointer user_data)
+{
+ NMBluez5DunContext *context = user_data;
+
+ nm_log_dbg (LOGD_BT, "(%s -> %s): SDP search progressed with condition=%d",
+ context->src_str, context->dst_str, condition);
+
+ if (condition & (G_IO_ERR | G_IO_HUP | G_IO_NVAL)) {
+ GError *error = g_error_new (NM_BT_ERROR,
+ NM_BT_ERROR_DUN_CONNECT_FAILED,
+ "Service Discovery interrupted");
+ context->callback (context, NULL, error, context->user_data);
+ sdp_search_cleanup (context);
+ return FALSE;
+ }
+
+ if (sdp_process (context->sdp_session) < 0) {
+ nm_log_dbg (LOGD_BT, "(%s -> %s): SDP search finished",
+ context->src_str, context->dst_str);
+
+ /* Search finished successfully. */
+ return FALSE;
+ }
+
+ /* Search progressed successfully. */
+ return TRUE;
+}
+
+static gboolean
+sdp_connect_watch (GIOChannel *channel, GIOCondition condition, gpointer user_data)
+{
+ NMBluez5DunContext *context = user_data;
+ sdp_list_t *search, *attrs;
+ uuid_t svclass;
+ uint16_t attr;
+ int fd, err, fd_err = 0;
+ socklen_t len = sizeof (fd_err);
+ GError *error = NULL;
+
+ context->sdp_watch_id = 0;
+
+ fd = g_io_channel_unix_get_fd (channel);
+ if (getsockopt (fd, SOL_SOCKET, SO_ERROR, &fd_err, &len) < 0) {
+ nm_log_dbg (LOGD_BT, "(%s -> %s): getsockopt error=%d",
+ context->src_str, context->dst_str, errno);
+ err = errno;
+ } else {
+ nm_log_dbg (LOGD_BT, "(%s -> %s): SO_ERROR error=%d",
+ context->src_str, context->dst_str, fd_err);
+ err = fd_err;
+ }
+
+ if (err != 0) {
+ error = g_error_new (NM_BT_ERROR, NM_BT_ERROR_DUN_CONNECT_FAILED,
+ "Error on Service Discovery socket: (%d) %s",
+ err, strerror (err));
+ goto done;
+ }
+
+ if (sdp_set_notify (context->sdp_session, sdp_search_completed_cb, context) < 0) {
+ /* Should not be reached, only can fail if we passed bad sdp_session. */
+ error = g_error_new (NM_BT_ERROR, NM_BT_ERROR_DUN_CONNECT_FAILED,
+ "Could not request Service Discovery notification");
+ goto done;
+ }
+
+ sdp_uuid16_create (&svclass, DIALUP_NET_SVCLASS_ID);
+ search = sdp_list_append (NULL, &svclass);
+ attr = SDP_ATTR_PROTO_DESC_LIST;
+ attrs = sdp_list_append (NULL, &attr);
+
+ if (!sdp_service_search_attr_async (context->sdp_session, search, SDP_ATTR_REQ_INDIVIDUAL, attrs)) {
+ /* Set callback responsible for update the internal SDP transaction */
+ context->sdp_watch_id = g_io_add_watch (channel,
+ G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL,
+ sdp_search_process_cb,
+ context);
+ } else {
+ err = sdp_get_error (context->sdp_session);
+ error = g_error_new (NM_BT_ERROR,
+ NM_BT_ERROR_DUN_CONNECT_FAILED,
+ "Error starting Service Discovery: (%d) %s",
+ err, strerror (err));
+ }
+
+ sdp_list_free (attrs, NULL);
+ sdp_list_free (search, NULL);
+
+done:
+ if (error) {
+ context->callback (context, NULL, error, context->user_data);
+ sdp_search_cleanup (context);
+ }
+
+ return G_SOURCE_REMOVE;
+}
+
+NMBluez5DunContext *
+nm_bluez5_dun_new (const char *adapter,
+ const char *remote)
+
+{
+ NMBluez5DunContext *context;
+
+ context = g_slice_new0 (NMBluez5DunContext);
+ str2ba (adapter, &context->src);
+ str2ba (remote, &context->dst);
+ context->src_str = g_strdup (adapter);
+ context->dst_str = g_strdup (remote);
+ context->rfcomm_channel = -1;
+ context->rfcomm_id = -1;
+ context->rfcomm_fd = -1;
+ return context;
+}
+
+void
+nm_bluez5_dun_connect (NMBluez5DunContext *context,
+ NMBluez5DunFunc callback,
+ gpointer user_data)
+{
+ GIOChannel *channel;
+
+ context->callback = callback;
+ context->user_data = user_data;
+
+ if (context->rfcomm_channel != -1) {
+ nm_log_dbg (LOGD_BT, "(%s): channel number on device %s cached: %d",
+ context->src_str, context->dst_str, context->rfcomm_channel);
+ dun_connect (context);
+ return;
+ }
+
+ nm_log_dbg (LOGD_BT, "(%s): starting channel number discovery for device %s",
+ context->src_str, context->dst_str);
+
+ context->sdp_session = sdp_connect (&context->src, &context->dst, SDP_NON_BLOCKING);
+ if (!context->sdp_session) {
+ GError *error;
+ int err = sdp_get_error (context->sdp_session);
+
+ error = g_error_new (NM_BT_ERROR, NM_BT_ERROR_DUN_CONNECT_FAILED,
+ "Failed to connect to the SDP server: (%d) %s",
+ err, strerror (err));
+ context->callback (context, NULL, error, context->user_data);
+ return;
+ }
+
+ channel = g_io_channel_unix_new (sdp_get_socket (context->sdp_session));
+ context->sdp_watch_id = g_io_add_watch (channel,
+ G_IO_OUT | G_IO_HUP | G_IO_ERR | G_IO_NVAL,
+ sdp_connect_watch,
+ context);
+ g_io_channel_unref (channel);
+}
+
+/* Only clean up connection-related stuff to allow reconnect */
+void
+nm_bluez5_dun_cleanup (NMBluez5DunContext *context)
+{
+ g_return_if_fail (context != NULL);
+
+ sdp_search_cleanup (context);
+
+ if (context->rfcomm_fd >= 0) {
+ if (context->rfcomm_id >= 0) {
+ struct rfcomm_dev_req req = { 0 };
+
+ req.dev_id = context->rfcomm_id;
+ ioctl (context->rfcomm_fd, RFCOMMRELEASEDEV, &req);
+ context->rfcomm_id = -1;
+ }
+ close (context->rfcomm_fd);
+ context->rfcomm_fd = -1;
+ }
+
+ close (context->rfcomm_tty_fd);
+ context->rfcomm_tty_fd = -1;
+}
+
+void
+nm_bluez5_dun_free (NMBluez5DunContext *context)
+{
+ g_return_if_fail (context != NULL);
+
+ nm_bluez5_dun_cleanup (context);
+ g_clear_pointer (&context->src_str, g_free);
+ g_clear_pointer (&context->dst_str, g_free);
+ g_slice_free (NMBluez5DunContext, context);
+}
diff --git a/src/devices/bluetooth/nm-bluez5-dun.h b/src/devices/bluetooth/nm-bluez5-dun.h
new file mode 100644
index 000000000..7e2597255
--- /dev/null
+++ b/src/devices/bluetooth/nm-bluez5-dun.h
@@ -0,0 +1,46 @@
+/* -*- 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.
+ */
+
+#ifndef _NM_BLUEZ5_UTILS_H_
+#define _NM_BLUEZ5_UTILS_H_
+
+#include <glib.h>
+#include <gio/gio.h>
+
+typedef struct _NMBluez5DunContext NMBluez5DunContext;
+
+typedef void (*NMBluez5DunFunc) (NMBluez5DunContext *context,
+ const char *rfcomm_dev,
+ GError *error,
+ gpointer user_data);
+
+NMBluez5DunContext *nm_bluez5_dun_new (const char *adapter,
+ const char *remote);
+
+void nm_bluez5_dun_connect (NMBluez5DunContext *context,
+ NMBluez5DunFunc callback, gpointer user_data);
+
+/* Clean up connection resources */
+void nm_bluez5_dun_cleanup (NMBluez5DunContext *context);
+
+/* Clean up and dispose all resources */
+void nm_bluez5_dun_free (NMBluez5DunContext *context);
+
+#endif /* _NM_BLUEZ5_UTILS_H_ */
diff --git a/src/devices/bluetooth/nm-bluez5-manager.c b/src/devices/bluetooth/nm-bluez5-manager.c
index 63006b3ab..b85685239 100644
--- a/src/devices/bluetooth/nm-bluez5-manager.c
+++ b/src/devices/bluetooth/nm-bluez5-manager.c
@@ -20,6 +20,8 @@
* Copyright (C) 2013 Intel Corporation.
*/
+#include "config.h"
+
#include <signal.h>
#include <string.h>
#include <stdlib.h>
@@ -143,7 +145,7 @@ device_added (GDBusProxy *proxy, const gchar *path, NMBluez5Manager *self)
NMBluez5ManagerPrivate *priv = NM_BLUEZ5_MANAGER_GET_PRIVATE (self);
NMBluezDevice *device;
- device = nm_bluez_device_new (path, priv->provider, 5);
+ device = nm_bluez_device_new (path, NULL, 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);
diff --git a/src/devices/bluetooth/nm-bluez5-manager.h b/src/devices/bluetooth/nm-bluez5-manager.h
index 79f347bce..8152976dc 100644
--- a/src/devices/bluetooth/nm-bluez5-manager.h
+++ b/src/devices/bluetooth/nm-bluez5-manager.h
@@ -19,8 +19,8 @@
* Copyright (C) 2007 - 2013 Red Hat, Inc.
*/
-#ifndef NM_BLUEZ5_MANAGER_H
-#define NM_BLUEZ5_MANAGER_H
+#ifndef __NETWORKMANAGER_BLUEZ5_MANAGER_H__
+#define __NETWORKMANAGER_BLUEZ5_MANAGER_H__
#include <glib.h>
#include <glib-object.h>
@@ -58,5 +58,5 @@ NMBluez5Manager *nm_bluez5_manager_new (NMConnectionProvider *provider);
void nm_bluez5_manager_query_devices (NMBluez5Manager *manager);
-#endif /* NM_BLUEZ5_MANAGER_H */
+#endif /* __NETWORKMANAGER_BLUEZ5_MANAGER_H__ */
diff --git a/src/devices/bluetooth/nm-bt-enum-types.c b/src/devices/bluetooth/nm-bt-enum-types.c
index 2595caeb7..16741c9fa 100644
--- a/src/devices/bluetooth/nm-bt-enum-types.c
+++ b/src/devices/bluetooth/nm-bt-enum-types.c
@@ -5,7 +5,7 @@
#include "nm-bt-enum-types.h"
-#include "nm-device-bt.h"
+#include "nm-bt-error.h"
GType
nm_bt_error_get_type (void)
@@ -18,6 +18,7 @@ nm_bt_error_get_type (void)
{ 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_BT_ERROR_DUN_CONNECT_FAILED, "NM_BT_ERROR_DUN_CONNECT_FAILED", "DunConnectFailed" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
diff --git a/src/settings/plugins/ifnet/errors.h b/src/devices/bluetooth/nm-bt-error.c
index 52517d007..e3b8e7f58 100644
--- a/src/settings/plugins/ifnet/errors.h
+++ b/src/devices/bluetooth/nm-bt-error.c
@@ -1,5 +1,5 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager system settings service
+/* 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
@@ -15,16 +15,21 @@
* 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.
+ * Copyright (C) 2014 Red Hat, Inc.
*/
-#ifndef __ERRORS_H__
-#define __ERRORS_H__
+#include "config.h"
#include <glib.h>
+#include "nm-bt-error.h"
-#define IFNET_PLUGIN_ERROR (ifnet_plugin_error_quark ())
-GQuark ifnet_plugin_error_quark (void);
+GQuark
+nm_bt_error_quark (void)
+{
+ static GQuark quark = 0;
+ if (!quark)
+ quark = g_quark_from_static_string ("nm-bt-error");
+ return quark;
+}
-#endif /* __ERRORS_H__ */
diff --git a/src/devices/bluetooth/nm-bt-error.h b/src/devices/bluetooth/nm-bt-error.h
new file mode 100644
index 000000000..fa3a95705
--- /dev/null
+++ b/src/devices/bluetooth/nm-bt-error.h
@@ -0,0 +1,35 @@
+/* -*- 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.
+ */
+
+#ifndef _NM_BLUEZ5_ERROR_H_
+#define _NM_BLUEZ5_ERROR_H_
+
+typedef enum {
+ NM_BT_ERROR_CONNECTION_NOT_BT = 0, /*< nick=ConnectionNotBt >*/
+ NM_BT_ERROR_CONNECTION_INVALID, /*< nick=ConnectionInvalid >*/
+ NM_BT_ERROR_CONNECTION_INCOMPATIBLE, /*< nick=ConnectionIncompatible >*/
+ NM_BT_ERROR_DUN_CONNECT_FAILED, /*< nick=DunConnectFailed >*/
+} NMBtError;
+
+#define NM_BT_ERROR (nm_bt_error_quark ())
+GQuark nm_bt_error_quark (void);
+
+#endif /* _NM_BT_ERROR_H_ */
+
diff --git a/src/devices/bluetooth/nm-device-bt.c b/src/devices/bluetooth/nm-device-bt.c
index 0bd2f17d1..689f37c9b 100644
--- a/src/devices/bluetooth/nm-device-bt.c
+++ b/src/devices/bluetooth/nm-device-bt.c
@@ -22,8 +22,6 @@
#include <stdio.h>
#include <string.h>
-#include <net/ethernet.h>
-#include <netinet/ether.h>
#include <glib/gi18n.h>
#include <gio/gio.h>
@@ -46,9 +44,13 @@
#include "NetworkManagerUtils.h"
#include "nm-bt-enum-types.h"
#include "nm-utils.h"
+#include "nm-bt-error.h"
+#include "nm-bt-enum-types.h"
+
+#define MM_DBUS_SERVICE "org.freedesktop.ModemManager1"
-#define MM_OLD_DBUS_SERVICE "org.freedesktop.ModemManager"
-#define MM_NEW_DBUS_SERVICE "org.freedesktop.ModemManager1"
+#include "nm-device-logging.h"
+_LOG_DECLARE_SELF(NMDeviceBt);
G_DEFINE_TYPE (NMDeviceBt, nm_device_bt, NM_TYPE_DEVICE)
@@ -63,7 +65,7 @@ typedef struct {
NMBluezDevice *bt_device;
- guint8 bdaddr[ETH_ALEN];
+ char *bdaddr;
char *name;
guint32 capabilities;
@@ -94,17 +96,6 @@ enum {
static guint signals[LAST_SIGNAL] = { 0 };
-#define NM_BT_ERROR (nm_bt_error_quark ())
-
-static GQuark
-nm_bt_error_quark (void)
-{
- static GQuark quark = 0;
- if (!quark)
- quark = g_quark_from_static_string ("nm-bt-error");
- return quark;
-}
-
guint32 nm_device_bt_get_capabilities (NMDeviceBt *self)
{
g_return_val_if_fail (NM_IS_DEVICE_BT (self), NM_BT_CAPABILITY_NONE);
@@ -112,15 +103,6 @@ guint32 nm_device_bt_get_capabilities (NMDeviceBt *self)
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)
{
@@ -142,6 +124,12 @@ get_connection_bt_type (NMConnection *connection)
return NM_BT_CAPABILITY_NONE;
}
+static guint32
+get_generic_capabilities (NMDevice *device)
+{
+ return NM_DEVICE_CAP_IS_NON_KERNEL;
+}
+
static gboolean
can_auto_connect (NMDevice *device,
NMConnection *connection,
@@ -167,7 +155,7 @@ check_connection_compatible (NMDevice *device, NMConnection *connection)
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (device);
NMSettingConnection *s_con;
NMSettingBluetooth *s_bt;
- const GByteArray *array;
+ const char *bdaddr;
guint32 bt_type;
if (!NM_DEVICE_CLASS (nm_device_bt_parent_class)->check_connection_compatible (device, connection))
@@ -187,11 +175,10 @@ check_connection_compatible (NMDevice *device, NMConnection *connection)
if (!(bt_type & priv->capabilities))
return FALSE;
- array = nm_setting_bluetooth_get_bdaddr (s_bt);
- if (!array || (array->len != ETH_ALEN))
+ bdaddr = nm_setting_bluetooth_get_bdaddr (s_bt);
+ if (!bdaddr)
return FALSE;
-
- if (memcmp (priv->bdaddr, array->data, ETH_ALEN) != 0)
+ if (!nm_utils_hwaddr_matches (priv->bdaddr, -1, bdaddr, -1))
return FALSE;
return TRUE;
@@ -225,14 +212,14 @@ complete_connection (NMDevice *device,
{
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (device);
NMSettingBluetooth *s_bt;
- const GByteArray *setting_bdaddr;
+ const char *setting_bdaddr;
const char *ctype;
gboolean is_dun = FALSE, is_pan = FALSE;
NMSettingGsm *s_gsm;
NMSettingCdma *s_cdma;
NMSettingSerial *s_serial;
- NMSettingPPP *s_ppp;
- const char *format = NULL, *preferred = NULL;
+ NMSettingPpp *s_ppp;
+ const char *fallback_prefix = NULL, *preferred = NULL;
s_gsm = nm_connection_get_setting_gsm (connection);
s_cdma = nm_connection_get_setting_cdma (connection);
@@ -262,18 +249,24 @@ complete_connection (NMDevice *device,
/* Make sure the device supports PAN */
if (!(priv->capabilities & NM_BT_CAPABILITY_NAP)) {
g_set_error_literal (error,
- NM_SETTING_BLUETOOTH_ERROR,
- NM_SETTING_BLUETOOTH_ERROR_INVALID_PROPERTY,
- "PAN required but Bluetooth device does not support NAP");
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("PAN requested, but Bluetooth device does not support NAP"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_BLUETOOTH_SETTING_NAME, NM_SETTING_BLUETOOTH_TYPE);
return FALSE;
}
/* PAN can't use any DUN-related settings */
if (s_gsm || s_cdma || s_serial || s_ppp) {
g_set_error_literal (error,
- NM_SETTING_BLUETOOTH_ERROR,
- NM_SETTING_BLUETOOTH_ERROR_INVALID_PROPERTY,
- "PAN incompatible with GSM, CDMA, or serial settings");
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_SETTING,
+ _("PAN connections cannot specify GSM, CDMA, or serial settings"));
+ g_prefix_error (error, "%s: ",
+ s_gsm ? NM_SETTING_GSM_SETTING_NAME :
+ s_cdma ? NM_SETTING_CDMA_SETTING_NAME :
+ s_serial ? NM_SETTING_SERIAL_SETTING_NAME :
+ NM_SETTING_PPP_SETTING_NAME);
return FALSE;
}
@@ -281,23 +274,25 @@ complete_connection (NMDevice *device,
NM_SETTING_BLUETOOTH_TYPE, NM_SETTING_BLUETOOTH_TYPE_PANU,
NULL);
- format = _("PAN connection %d");
+ fallback_prefix = _("PAN connection");
} else if (is_dun) {
/* Make sure the device supports PAN */
if (!(priv->capabilities & NM_BT_CAPABILITY_DUN)) {
g_set_error_literal (error,
- NM_SETTING_BLUETOOTH_ERROR,
- NM_SETTING_BLUETOOTH_ERROR_INVALID_PROPERTY,
- "DUN required but Bluetooth device does not support DUN");
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("DUN requested, but Bluetooth device does not support DUN"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_BLUETOOTH_SETTING_NAME, NM_SETTING_BLUETOOTH_TYPE);
return FALSE;
}
/* Need at least a GSM or a CDMA setting */
if (!s_gsm && !s_cdma) {
g_set_error_literal (error,
- NM_SETTING_BLUETOOTH_ERROR,
- NM_SETTING_BLUETOOTH_ERROR_INVALID_PROPERTY,
- "Setting requires DUN but no GSM or CDMA setting is present");
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_SETTING,
+ _("DUN connection must include a GSM or CDMA setting"));
+ g_prefix_error (error, "%s: ", NM_SETTING_BLUETOOTH_SETTING_NAME);
return FALSE;
}
@@ -306,51 +301,46 @@ complete_connection (NMDevice *device,
NULL);
if (s_gsm) {
- format = _("GSM connection %d");
+ fallback_prefix = _("GSM connection");
if (!nm_setting_gsm_get_number (s_gsm))
g_object_set (G_OBJECT (s_gsm), NM_SETTING_GSM_NUMBER, "*99#", NULL);
- } else if (s_cdma) {
- format = _("CDMA connection %d");
+ } else {
+ fallback_prefix = _("CDMA connection");
if (!nm_setting_cdma_get_number (s_cdma))
g_object_set (G_OBJECT (s_cdma), NM_SETTING_GSM_NUMBER, "#777", NULL);
- } else
- format = _("DUN connection %d");
+ }
} else {
g_set_error_literal (error,
- NM_SETTING_BLUETOOTH_ERROR,
- NM_SETTING_BLUETOOTH_ERROR_INVALID_PROPERTY,
- "Unknown/unhandled Bluetooth connection type");
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("Unknown/unhandled Bluetooth connection type"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_BLUETOOTH_SETTING_NAME, NM_SETTING_BLUETOOTH_TYPE);
return FALSE;
}
nm_utils_complete_generic (connection,
NM_SETTING_BLUETOOTH_SETTING_NAME,
existing_connections,
- format,
preferred,
+ fallback_prefix,
+ NULL,
is_dun ? FALSE : TRUE); /* No IPv6 yet for DUN */
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, priv->bdaddr, ETH_ALEN)) {
+ if (!nm_utils_hwaddr_matches (setting_bdaddr, -1, priv->bdaddr, -1)) {
g_set_error_literal (error,
- NM_SETTING_BLUETOOTH_ERROR,
- NM_SETTING_BLUETOOTH_ERROR_INVALID_PROPERTY,
- NM_SETTING_BLUETOOTH_BDADDR);
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("connection does not match device"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_BLUETOOTH_SETTING_NAME, NM_SETTING_BLUETOOTH_BDADDR);
return FALSE;
}
} else {
- GByteArray *bdaddr;
- const guint8 null_mac[ETH_ALEN] = { 0, 0, 0, 0, 0, 0 };
-
/* Lock the connection to this device by default */
- if (memcmp (priv->bdaddr, null_mac, ETH_ALEN)) {
- bdaddr = g_byte_array_sized_new (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);
- }
+ if (!nm_utils_hwaddr_matches (priv->bdaddr, -1, NULL, ETH_ALEN))
+ g_object_set (G_OBJECT (s_bt), NM_SETTING_BLUETOOTH_BDADDR, priv->bdaddr, NULL);
}
return TRUE;
@@ -437,7 +427,8 @@ modem_prepare_result (NMModem *modem,
NMDeviceStateReason reason,
gpointer user_data)
{
- NMDevice *device = NM_DEVICE (user_data);
+ NMDeviceBt *self = NM_DEVICE_BT (user_data);
+ NMDevice *device = NM_DEVICE (self);
NMDeviceState state;
state = nm_device_get_state (device);
@@ -470,8 +461,7 @@ modem_prepare_result (NMModem *modem,
* 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));
+ _LOGI (LOGD_MB, "disabling autoconnect due to failed SIM PIN");
}
nm_device_state_changed (device, NM_DEVICE_STATE_FAILED, reason);
@@ -491,21 +481,20 @@ device_state_changed (NMDevice *device,
}
static void
-modem_ip4_config_result (NMModem *self,
+modem_ip4_config_result (NMModem *modem,
NMIP4Config *config,
GError *error,
gpointer user_data)
{
- NMDevice *device = NM_DEVICE (user_data);
+ NMDeviceBt *self = NM_DEVICE_BT (user_data);
+ NMDevice *device = NM_DEVICE (self);
g_return_if_fail (nm_device_activate_ip4_state_in_conf (device) == TRUE);
if (error) {
- nm_log_warn (LOGD_MB | LOGD_IP4 | LOGD_BT,
- "(%s): retrieving IP4 configuration failed: (%d) %s",
- nm_device_get_ip_iface (device),
- error ? error->code : -1,
- error && error->message ? error->message : "(unknown)");
+ _LOGW (LOGD_MB | LOGD_IP4 | LOGD_BT,
+ "retrieving IP4 configuration failed: (%d) %s",
+ error->code, error->message ? error->message : "(unknown)");
nm_device_state_changed (device, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE);
} else
@@ -648,16 +637,14 @@ component_added (NMDevice *device, GObject *component)
*/
state = nm_device_get_state (NM_DEVICE (self));
if (state != NM_DEVICE_STATE_CONFIG) {
- nm_log_warn (LOGD_BT | LOGD_MB,
- "(%s): modem found but device not in correct state (%d)",
- nm_device_get_iface (NM_DEVICE (self)),
- nm_device_get_state (NM_DEVICE (self)));
+ _LOGW (LOGD_BT | LOGD_MB,
+ "modem found but device not in correct state (%d)",
+ nm_device_get_state (NM_DEVICE (self)));
return TRUE;
}
- nm_log_info (LOGD_BT | LOGD_MB,
- "Activation (%s/bluetooth) Stage 2 of 5 (Device Configure) modem found.",
- nm_device_get_iface (NM_DEVICE (self)));
+ _LOGI (LOGD_BT | LOGD_MB,
+ "Activation: (bluetooth) Stage 2 of 5 (Device Configure) modem found.");
if (priv->modem) {
g_warn_if_reached ();
@@ -674,11 +661,6 @@ component_added (NMDevice *device, GObject *component)
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
- * created */
- if (modem_data_port)
- nm_device_set_ip_iface (NM_DEVICE (self), modem_data_port);
g_signal_connect (modem, "notify::" NM_MODEM_DATA_PORT, G_CALLBACK (data_port_changed_cb), self);
/* Kick off the modem connection */
@@ -711,11 +693,9 @@ check_connect_continue (NMDeviceBt *self)
if (!priv->connected || !priv->have_iface)
return;
- nm_log_info (LOGD_BT, "Activation (%s %s/bluetooth) Stage 2 of 5 (Device Configure) "
- "successful. Will connect via %s.",
- nm_device_get_iface (device),
- nm_device_get_ip_iface (device),
- dun ? "DUN" : (pan ? "PAN" : "unknown"));
+ _LOGI (LOGD_BT,
+ "Activation: (bluetooth) Stage 2 of 5 (Device Configure) successful. Will connect via %s.",
+ dun ? "DUN" : (pan ? "PAN" : "unknown"));
/* Kill the connect timeout since we're connected now */
if (priv->timeout_id) {
@@ -730,9 +710,8 @@ check_connect_continue (NMDeviceBt *self)
/* Wait for ModemManager to find the modem */
priv->timeout_id = g_timeout_add_seconds (30, modem_find_timeout, self);
- nm_log_info (LOGD_BT | LOGD_MB, "Activation (%s/bluetooth) Stage 2 of 5 (Device Configure) "
- "waiting for modem to appear.",
- nm_device_get_iface (device));
+ _LOGI (LOGD_BT | LOGD_MB,
+ "Activation: (bluetooth) Stage 2 of 5 (Device Configure) waiting for modem to appear.");
} else
g_assert_not_reached ();
}
@@ -751,13 +730,14 @@ bluez_connect_cb (GObject *object,
res, &error);
if (!device) {
- nm_log_warn (LOGD_BT, "Error connecting with bluez: %s",
- error && error->message ? error->message : "(unknown)");
+ _LOGW (LOGD_BT, "Error connecting with bluez: %s",
+ error && error->message ? error->message : "(unknown)");
g_clear_error (&error);
nm_device_state_changed (NM_DEVICE (self),
NM_DEVICE_STATE_FAILED,
NM_DEVICE_STATE_REASON_BT_FAILED);
+ g_object_unref (self);
return;
}
@@ -768,12 +748,12 @@ bluez_connect_cb (GObject *object,
nm_device_set_ip_iface (NM_DEVICE (self), device);
}
- nm_log_dbg (LOGD_BT, "(%s): connect request successful",
- nm_device_get_iface (NM_DEVICE (self)));
+ _LOGD (LOGD_BT, "connect request successful");
/* Stage 3 gets scheduled when Bluez says we're connected */
priv->have_iface = TRUE;
check_connect_continue (self);
+ g_object_unref (self);
}
static void
@@ -790,8 +770,7 @@ bluez_connected_changed (NMBluezDevice *bt_device,
connected = nm_bluez_device_get_connected (bt_device);
if (connected) {
if (state == NM_DEVICE_STATE_CONFIG) {
- nm_log_dbg (LOGD_BT, "(%s): connected to the device",
- nm_device_get_iface (device));
+ _LOGD (LOGD_BT, "connected to the device");
priv->connected = TRUE;
check_connect_continue (self);
@@ -802,13 +781,10 @@ bluez_connected_changed (NMBluezDevice *bt_device,
/* Bluez says we're disconnected from the device. Suck. */
if (nm_device_is_activating (device)) {
- nm_log_info (LOGD_BT,
- "Activation (%s/bluetooth): bluetooth link disconnected.",
- nm_device_get_iface (device));
+ _LOGI (LOGD_BT, "Activation: (bluetooth) bluetooth link disconnected.");
fail = TRUE;
} else if (state == NM_DEVICE_STATE_ACTIVATED) {
- nm_log_info (LOGD_BT, "(%s): bluetooth link disconnected.",
- nm_device_get_iface (device));
+ _LOGI (LOGD_BT, "bluetooth link disconnected.");
fail = TRUE;
}
@@ -824,8 +800,7 @@ bt_connect_timeout (gpointer user_data)
{
NMDeviceBt *self = NM_DEVICE_BT (user_data);
- nm_log_dbg (LOGD_BT, "(%s): initial connection timed out",
- nm_device_get_iface (NM_DEVICE (self)));
+ _LOGD (LOGD_BT, "initial connection timed out");
NM_DEVICE_BT_GET_PRIVATE (self)->timeout_id = 0;
nm_device_state_changed (NM_DEVICE (self),
@@ -837,6 +812,7 @@ bt_connect_timeout (gpointer user_data)
static NMActStageReturn
act_stage2_config (NMDevice *device, NMDeviceStateReason *reason)
{
+ NMDeviceBt *self = NM_DEVICE_BT (device);
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (device);
NMConnection *connection;
@@ -853,13 +829,12 @@ act_stage2_config (NMDevice *device, NMDeviceStateReason *reason)
return NM_ACT_STAGE_RETURN_FAILURE;
}
- nm_log_dbg (LOGD_BT, "(%s): requesting connection to the device",
- nm_device_get_iface (device));
+ _LOGD (LOGD_BT, "requesting connection to the device");
/* Connect to the BT device */
nm_bluez_device_connect_async (priv->bt_device,
priv->bt_type & (NM_BT_CAPABILITY_DUN | NM_BT_CAPABILITY_NAP),
- bluez_connect_cb, device);
+ bluez_connect_cb, g_object_ref (device));
if (priv->timeout_id)
g_source_remove (priv->timeout_id);
@@ -897,8 +872,7 @@ act_stage3_ip6_config_start (NMDevice *device,
if (priv->bt_type == NM_BT_CAPABILITY_DUN) {
ret = nm_modem_stage3_ip6_config_start (NM_DEVICE_BT_GET_PRIVATE (device)->modem,
- device,
- NM_DEVICE_CLASS (nm_device_bt_parent_class),
+ nm_device_get_act_request (device),
reason);
} else
ret = NM_DEVICE_CLASS (nm_device_bt_parent_class)->act_stage3_ip6_config_start (device, out_config, reason);
@@ -979,8 +953,7 @@ handle_availability_change (NMDeviceBt *self,
state = nm_device_get_state (device);
if (state < NM_DEVICE_STATE_UNAVAILABLE) {
- nm_log_dbg (LOGD_BT, "(%s): availability blocked by UNMANAGED state",
- nm_device_get_iface (device));
+ _LOGD (LOGD_BT, "availability blocked by UNMANAGED state");
return;
}
@@ -990,7 +963,7 @@ handle_availability_change (NMDeviceBt *self,
if (available) {
if (state != NM_DEVICE_STATE_UNAVAILABLE)
- nm_log_warn (LOGD_CORE | LOGD_BT, "not in expected unavailable state!");
+ _LOGW (LOGD_CORE | LOGD_BT, "not in expected unavailable state!");
nm_device_state_changed (device,
NM_DEVICE_STATE_DISCONNECTED,
@@ -1011,9 +984,8 @@ set_mm_running (NMDeviceBt *self, gboolean running)
if (priv->mm_running == running)
return;
- nm_log_dbg (LOGD_BT, "(%s): ModemManager now %s",
- nm_device_get_iface (NM_DEVICE (self)),
- running ? "available" : "unavailable");
+ _LOGD (LOGD_BT, "ModemManager now %s",
+ running ? "available" : "unavailable");
old_available = nm_device_is_available (NM_DEVICE (self));
priv->mm_running = running;
@@ -1038,11 +1010,7 @@ mm_name_owner_changed (NMDBusManager *dbus_mgr,
gboolean new_owner_good;
/* Can't handle the signal if its not from the modem service */
- if ( strcmp (MM_OLD_DBUS_SERVICE, name) != 0
-#if WITH_MODEM_MANAGER_1
- && strcmp (MM_NEW_DBUS_SERVICE, name) != 0
-#endif
- )
+ if (strcmp (MM_DBUS_SERVICE, name) != 0)
return;
old_owner_good = (old_owner && strlen (old_owner));
@@ -1096,11 +1064,7 @@ nm_device_bt_init (NMDeviceBt *self)
self);
/* Initial check to see if ModemManager is running */
- mm_running = nm_dbus_manager_name_has_owner (priv->dbus_mgr, MM_OLD_DBUS_SERVICE);
-#if WITH_MODEM_MANAGER_1
- if (!mm_running)
- mm_running = nm_dbus_manager_name_has_owner (priv->dbus_mgr, MM_NEW_DBUS_SERVICE);
-#endif
+ mm_running = nm_dbus_manager_name_has_owner (priv->dbus_mgr, MM_DBUS_SERVICE);
set_mm_running (self, mm_running);
}
@@ -1108,15 +1072,13 @@ static void
constructed (GObject *object)
{
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (object);
- const guint8 *my_hwaddr;
- guint my_hwaddr_len = 0;
+ const char *my_hwaddr;
G_OBJECT_CLASS (nm_device_bt_parent_class)->constructed (object);
- my_hwaddr = nm_device_get_hw_address (NM_DEVICE (object), &my_hwaddr_len);
+ my_hwaddr = nm_device_get_hw_address (NM_DEVICE (object));
g_assert (my_hwaddr);
- g_assert_cmpint (my_hwaddr_len, ==, ETH_ALEN);
- memcpy (priv->bdaddr, my_hwaddr, ETH_ALEN);
+ priv->bdaddr = g_strdup (my_hwaddr);
/* Watch for BT device property changes */
g_signal_connect (priv->bt_device, "notify::" NM_BLUEZ_DEVICE_CONNECTED,
@@ -1203,6 +1165,7 @@ finalize (GObject *object)
g_free (priv->rfcomm_iface);
g_free (priv->name);
+ g_free (priv->bdaddr);
G_OBJECT_CLASS (nm_device_bt_parent_class)->finalize (object);
}
@@ -1221,7 +1184,7 @@ nm_device_bt_class_init (NMDeviceBtClass *klass)
object_class->dispose = dispose;
object_class->finalize = finalize;
- device_class->get_hw_address_length = get_hw_address_length;
+ device_class->get_generic_capabilities = get_generic_capabilities;
device_class->can_auto_connect = can_auto_connect;
device_class->deactivate = deactivate;
device_class->act_stage2_config = act_stage2_config;
@@ -1238,27 +1201,24 @@ nm_device_bt_class_init (NMDeviceBtClass *klass)
/* Properties */
g_object_class_install_property
(object_class, PROP_BT_NAME,
- g_param_spec_string (NM_DEVICE_BT_NAME,
- "Bluetooth device name",
- "Bluetooth device name",
+ g_param_spec_string (NM_DEVICE_BT_NAME, "", "",
NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_BT_CAPABILITIES,
- g_param_spec_uint (NM_DEVICE_BT_CAPABILITIES,
- "Bluetooth device capabilities",
- "Bluetooth device capabilities",
+ g_param_spec_uint (NM_DEVICE_BT_CAPABILITIES, "", "",
NM_BT_CAPABILITY_NONE, G_MAXUINT, NM_BT_CAPABILITY_NONE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_BT_DEVICE,
- g_param_spec_object (NM_DEVICE_BT_DEVICE,
- "NMBluezDevice object for the Device",
- "NMBluezDevice object for the Device",
+ g_param_spec_object (NM_DEVICE_BT_DEVICE, "", "",
NM_TYPE_BLUEZ_DEVICE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
/* Signals */
signals[PPP_STATS] =
@@ -1273,6 +1233,4 @@ nm_device_bt_class_init (NMDeviceBtClass *klass)
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/devices/bluetooth/nm-device-bt.h b/src/devices/bluetooth/nm-device-bt.h
index 83732bc09..c1e95d915 100644
--- a/src/devices/bluetooth/nm-device-bt.h
+++ b/src/devices/bluetooth/nm-device-bt.h
@@ -18,8 +18,8 @@
* Copyright (C) 2009 Red Hat, Inc.
*/
-#ifndef NM_DEVICE_BT_H
-#define NM_DEVICE_BT_H
+#ifndef __NETWORKMANAGER_DEVICE_BT_H__
+#define __NETWORKMANAGER_DEVICE_BT_H__
#include <nm-device.h>
#include "nm-bluez-device.h"
@@ -34,12 +34,6 @@ G_BEGIN_DECLS
#define NM_IS_DEVICE_BT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_BT))
#define NM_DEVICE_BT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_BT, NMDeviceBtClass))
-typedef enum {
- NM_BT_ERROR_CONNECTION_NOT_BT = 0, /*< nick=ConnectionNotBt >*/
- NM_BT_ERROR_CONNECTION_INVALID, /*< nick=ConnectionInvalid >*/
- NM_BT_ERROR_CONNECTION_INCOMPATIBLE, /*< nick=ConnectionIncompatible >*/
-} NMBtError;
-
#define NM_DEVICE_BT_NAME "name"
#define NM_DEVICE_BT_CAPABILITIES "bt-capabilities"
#define NM_DEVICE_BT_DEVICE "bt-device"
@@ -71,4 +65,4 @@ gboolean nm_device_bt_modem_added (NMDeviceBt *device,
G_END_DECLS
-#endif /* NM_DEVICE_BT_H */
+#endif /* __NETWORKMANAGER_DEVICE_BT_H__ */
diff --git a/src/devices/nm-device-bond.c b/src/devices/nm-device-bond.c
index 6f8caeb40..9d9fe426b 100644
--- a/src/devices/nm-device-bond.c
+++ b/src/devices/nm-device-bond.c
@@ -23,30 +23,30 @@
#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-factory.h"
+#include "nm-core-internal.h"
#include "nm-device-bond-glue.h"
+#include "nm-device-logging.h"
+_LOG_DECLARE_SELF(NMDeviceBond);
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;
@@ -60,17 +60,6 @@ enum {
/******************************************************************/
-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)
{
@@ -110,7 +99,7 @@ check_connection_compatible (NMDevice *device, NMConnection *connection)
return FALSE;
/* Bond connections must specify the virtual interface name */
- iface = nm_connection_get_virtual_iface_name (connection);
+ iface = nm_connection_get_interface_name (connection);
if (!iface || strcmp (nm_device_get_iface (device), iface))
return FALSE;
@@ -126,17 +115,14 @@ complete_connection (NMDevice *device,
const GSList *existing_connections,
GError **error)
{
- NMSettingBond *s_bond, *tmp;
- guint32 i = 0;
- char *name;
- const GSList *iter;
- gboolean found;
+ NMSettingBond *s_bond;
nm_utils_complete_generic (connection,
NM_SETTING_BOND_SETTING_NAME,
existing_connections,
- _("Bond connection %d"),
NULL,
+ _("Bond connection"),
+ "bond",
TRUE);
s_bond = nm_connection_get_setting_bond (connection);
@@ -145,34 +131,6 @@ complete_connection (NMDevice *device,
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;
}
@@ -181,14 +139,13 @@ complete_connection (NMDevice *device,
static gboolean
set_bond_attr (NMDevice *device, const char *attr, const char *value)
{
+ NMDeviceBond *self = NM_DEVICE_BOND (device);
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);
- }
+ if (!ret)
+ _LOGW (LOGD_HW, "failed to set bonding attribute '%s' to '%s'", attr, value);
return ret;
}
@@ -209,14 +166,12 @@ 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 */
@@ -243,6 +198,19 @@ update_connection (NMDevice *device, NMConnection *connection)
}
}
+static gboolean
+master_update_slave_connection (NMDevice *self,
+ NMDevice *slave,
+ NMConnection *connection,
+ GError **error)
+{
+ g_object_set (nm_connection_get_setting_connection (connection),
+ NM_SETTING_CONNECTION_MASTER, nm_device_get_iface (self),
+ NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_BOND_SETTING_NAME,
+ NULL);
+ return TRUE;
+}
+
static void
set_arp_targets (NMDevice *device,
const char *value,
@@ -380,6 +348,10 @@ apply_bonding_config (NMDevice *device)
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);
+ if ( g_strcmp0 (mode, "4") == 0
+ || g_strcmp0 (mode, "802.3ad") == 0)
+ set_simple_option (device, "lacp_rate", s_bond, NM_SETTING_BOND_OPTION_LACP_RATE);
+
return NM_ACT_STAGE_RETURN_SUCCESS;
}
@@ -410,8 +382,8 @@ enslave_slave (NMDevice *device,
NMConnection *connection,
gboolean configure)
{
+ NMDeviceBond *self = NM_DEVICE_BOND (device);
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);
@@ -425,9 +397,9 @@ enslave_slave (NMDevice *device,
if (!success)
return FALSE;
- nm_log_info (LOGD_BOND, "(%s): enslaved bond slave %s", iface, slave_iface);
+ _LOGI (LOGD_BOND, "enslaved bond slave %s", slave_iface);
} else
- nm_log_info (LOGD_BOND, "(%s): bond slave %s was enslaved", iface, slave_iface);
+ _LOGI (LOGD_BOND, "bond slave %s was enslaved", slave_iface);
g_object_notify (G_OBJECT (device), NM_DEVICE_BOND_SLAVES);
return TRUE;
@@ -438,6 +410,7 @@ release_slave (NMDevice *device,
NMDevice *slave,
gboolean configure)
{
+ NMDeviceBond *self = NM_DEVICE_BOND (device);
gboolean success = TRUE, no_firmware = FALSE;
if (configure) {
@@ -445,17 +418,14 @@ release_slave (NMDevice *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));
+ _LOGI (LOGD_BOND, "released bond slave %s",
+ 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));
+ _LOGW (LOGD_BOND, "failed to release bond slave %s",
+ nm_device_get_ip_iface (slave));
}
} else {
- nm_log_info (LOGD_BOND, "(%s): bond slave %s was released",
- nm_device_get_ip_iface (device),
+ _LOGI (LOGD_BOND, "bond slave %s was released",
nm_device_get_ip_iface (slave));
}
@@ -467,10 +437,8 @@ release_slave (NMDevice *device,
* 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));
- }
+ if (!nm_device_bring_up (slave, TRUE, &no_firmware))
+ _LOGW (LOGD_BOND, "released bond slave could not be brought up.");
}
return success;
@@ -478,57 +446,6 @@ release_slave (NMDevice *device,
/******************************************************************/
-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)
{
@@ -579,7 +496,6 @@ nm_device_bond_class_init (NMDeviceBondClass *klass)
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;
@@ -590,6 +506,7 @@ nm_device_bond_class_init (NMDeviceBondClass *klass)
parent_class->complete_connection = complete_connection;
parent_class->update_connection = update_connection;
+ parent_class->master_update_slave_connection = master_update_slave_connection;
parent_class->act_stage1_prepare = act_stage1_prepare;
parent_class->enslave_slave = enslave_slave;
@@ -598,15 +515,69 @@ nm_device_bond_class_init (NMDeviceBondClass *klass)
/* properties */
g_object_class_install_property
(object_class, PROP_SLAVES,
- g_param_spec_boxed (NM_DEVICE_BOND_SLAVES,
- "Slaves",
- "Slaves",
+ g_param_spec_boxed (NM_DEVICE_BOND_SLAVES, "", "",
DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH,
- G_PARAM_READABLE));
+ 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_bond_object_info);
+}
+
+/*************************************************************/
+
+#define NM_TYPE_BOND_FACTORY (nm_bond_factory_get_type ())
+#define NM_BOND_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_BOND_FACTORY, NMBondFactory))
+
+static NMDevice *
+new_link (NMDeviceFactory *factory, NMPlatformLink *plink, GError **error)
+{
+ if (plink->type == NM_LINK_TYPE_BOND) {
+ return (NMDevice *) g_object_new (NM_TYPE_DEVICE_BOND,
+ NM_DEVICE_PLATFORM_DEVICE, plink,
+ NM_DEVICE_DRIVER, "bonding",
+ NM_DEVICE_TYPE_DESC, "Bond",
+ NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_BOND,
+ NM_DEVICE_IS_MASTER, TRUE,
+ NULL);
+ }
+ return NULL;
+}
+
+static NMDevice *
+create_virtual_device_for_connection (NMDeviceFactory *factory,
+ NMConnection *connection,
+ NMDevice *parent,
+ GError **error)
+{
+ const char *iface;
+
+ if (!nm_connection_is_type (connection, NM_SETTING_BOND_SETTING_NAME))
+ return NULL;
+
+ iface = nm_connection_get_interface_name (connection);
+ g_return_val_if_fail (iface != NULL, NULL);
- dbus_g_error_domain_register (NM_BOND_ERROR, NULL, NM_TYPE_BOND_ERROR);
+ 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);
}
+
+DEFINE_DEVICE_FACTORY_INTERNAL(BOND, Bond, bond,
+ factory_iface->new_link = new_link;
+ factory_iface->create_virtual_device_for_connection = create_virtual_device_for_connection;
+ )
+
diff --git a/src/devices/nm-device-bond.h b/src/devices/nm-device-bond.h
index f4683ad85..17217a57c 100644
--- a/src/devices/nm-device-bond.h
+++ b/src/devices/nm-device-bond.h
@@ -18,8 +18,8 @@
* Copyright 2012 Red Hat, Inc.
*/
-#ifndef NM_DEVICE_BOND_H
-#define NM_DEVICE_BOND_H
+#ifndef __NETWORKMANAGER_DEVICE_BOND_H__
+#define __NETWORKMANAGER_DEVICE_BOND_H__
#include <glib-object.h>
@@ -34,29 +34,13 @@ G_BEGIN_DECLS
#define NM_IS_DEVICE_BOND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_BOND))
#define NM_DEVICE_BOND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_BOND, NMDeviceBondClass))
-typedef enum {
- NM_BOND_ERROR_CONNECTION_NOT_BOND = 0, /*< nick=ConnectionNotBond >*/
- NM_BOND_ERROR_CONNECTION_INVALID, /*< nick=ConnectionInvalid >*/
- NM_BOND_ERROR_CONNECTION_INCOMPATIBLE, /*< nick=ConnectionIncompatible >*/
-} NMBondError;
-
#define NM_DEVICE_BOND_SLAVES "slaves"
-typedef struct {
- NMDevice parent;
-} NMDeviceBond;
-
-typedef struct {
- NMDeviceClass parent;
-
-} NMDeviceBondClass;
-
+typedef NMDevice NMDeviceBond;
+typedef NMDeviceClass NMDeviceBondClass;
GType nm_device_bond_get_type (void);
-NMDevice *nm_device_bond_new (NMPlatformLink *platform_device);
-NMDevice *nm_device_bond_new_for_connection (NMConnection *connection);
-
G_END_DECLS
#endif /* NM_DEVICE_BOND_H */
diff --git a/src/devices/nm-device-bridge.c b/src/devices/nm-device-bridge.c
index edc41838f..a70cfd957 100644
--- a/src/devices/nm-device-bridge.c
+++ b/src/devices/nm-device-bridge.c
@@ -23,29 +23,29 @@
#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-factory.h"
+#include "nm-core-internal.h"
#include "nm-device-bridge-glue.h"
+#include "nm-device-logging.h"
+_LOG_DECLARE_SELF(NMDeviceBridge);
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;
@@ -59,17 +59,6 @@ enum {
/******************************************************************/
-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)
{
@@ -100,7 +89,7 @@ check_connection_compatible (NMDevice *device, NMConnection *connection)
{
const char *iface;
NMSettingBridge *s_bridge;
- const GByteArray *mac_address;
+ const char *mac_address;
if (!NM_DEVICE_CLASS (nm_device_bridge_parent_class)->check_connection_compatible (device, connection))
return FALSE;
@@ -110,19 +99,16 @@ check_connection_compatible (NMDevice *device, NMConnection *connection)
return FALSE;
/* Bridge connections must specify the virtual interface name */
- iface = nm_connection_get_virtual_iface_name (connection);
+ iface = nm_connection_get_interface_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;
+ const char *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)
+ hw_addr = nm_device_get_hw_address (device);
+ if (!hw_addr || !nm_utils_hwaddr_matches (hw_addr, -1, mac_address, -1))
return FALSE;
}
@@ -136,17 +122,14 @@ complete_connection (NMDevice *device,
const GSList *existing_connections,
GError **error)
{
- NMSettingBridge *s_bridge, *tmp;
- guint32 i = 0;
- char *name;
- const GSList *iter;
- gboolean found;
+ NMSettingBridge *s_bridge;
nm_utils_complete_generic (connection,
NM_SETTING_BRIDGE_SETTING_NAME,
existing_connections,
- _("Bridge connection %d"),
NULL,
+ _("Bridge connection"),
+ "bridge",
TRUE);
s_bridge = nm_connection_get_setting_bridge (connection);
@@ -155,34 +138,6 @@ complete_connection (NMDevice *device,
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;
}
@@ -292,15 +247,14 @@ commit_slave_options (NMDevice *device, NMSettingBridgePort *setting)
static void
update_connection (NMDevice *device, NMConnection *connection)
{
+ NMDeviceBridge *self = NM_DEVICE_BRIDGE (device);
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++) {
@@ -315,34 +269,27 @@ update_connection (NMDevice *device, NMConnection *connection)
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);
- }
+ } else
+ _LOGW (LOGD_BRIDGE, "failed to read bridge setting '%s'", 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)
+static gboolean
+master_update_slave_connection (NMDevice *device,
+ NMDevice *slave,
+ NMConnection *connection,
+ GError **error)
{
+ NMDeviceBridge *self = NM_DEVICE_BRIDGE (device);
+ NMSettingConnection *s_con;
NMSettingBridgePort *s_port;
- int ifindex = nm_device_get_ifindex (slave);
+ int ifindex_slave = nm_device_get_ifindex (slave);
+ const char *iface = nm_device_get_iface (device);
const Option *option;
- g_return_val_if_fail (NM_IS_DEVICE (slave), FALSE);
- g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE);
+ g_return_val_if_fail (ifindex_slave > 0, FALSE);
+ s_con = nm_connection_get_setting_connection (connection);
s_port = nm_connection_get_setting_bridge_port (connection);
if (!s_port) {
s_port = (NMSettingBridgePort *) nm_setting_bridge_port_new ();
@@ -350,7 +297,7 @@ nm_bridge_update_slave_connection (NMDevice *slave, NMConnection *connection)
}
for (option = slave_options; option->name; option++) {
- gs_free char *str = nm_platform_slave_get_option (ifindex, option->sysname);
+ gs_free char *str = nm_platform_slave_get_option (ifindex_slave, option->sysname);
int value;
if (str) {
@@ -361,12 +308,14 @@ nm_bridge_update_slave_connection (NMDevice *slave, NMConnection *connection)
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);
- }
+ } else
+ _LOGW (LOGD_BRIDGE, "failed to read bridge port setting '%s'", option->sysname);
}
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_MASTER, iface,
+ NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_BRIDGE_SETTING_NAME,
+ NULL);
return TRUE;
}
@@ -393,19 +342,19 @@ enslave_slave (NMDevice *device,
NMConnection *connection,
gboolean configure)
{
+ NMDeviceBridge *self = NM_DEVICE_BRIDGE (device);
+
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));
+ _LOGI (LOGD_BRIDGE, "attached bridge port %s",
+ 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));
+ _LOGI (LOGD_BRIDGE, "bridge port %s was attached",
+ nm_device_get_ip_iface (slave));
}
g_object_notify (G_OBJECT (device), NM_DEVICE_BRIDGE_SLAVES);
@@ -418,6 +367,7 @@ release_slave (NMDevice *device,
NMDevice *slave,
gboolean configure)
{
+ NMDeviceBridge *self = NM_DEVICE_BRIDGE (device);
gboolean success = TRUE;
if (configure) {
@@ -425,18 +375,15 @@ release_slave (NMDevice *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));
+ _LOGI (LOGD_BRIDGE, "detached bridge port %s",
+ 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));
+ _LOGW (LOGD_BRIDGE, "failed to detach bridge port %s",
+ 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));
+ _LOGI (LOGD_BRIDGE, "bridge port %s was detached",
+ nm_device_get_ip_iface (slave));
}
g_object_notify (G_OBJECT (device), NM_DEVICE_BRIDGE_SLAVES);
@@ -445,66 +392,6 @@ release_slave (NMDevice *device,
/******************************************************************/
-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)
{
@@ -518,7 +405,6 @@ get_property (GObject *object, guint prop_id,
GSList *list, *iter;
switch (prop_id) {
- break;
case PROP_SLAVES:
slaves = g_ptr_array_new ();
list = nm_device_master_get_slaves (NM_DEVICE (object));
@@ -555,7 +441,6 @@ nm_device_bridge_class_init (NMDeviceBridgeClass *klass)
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;
@@ -566,6 +451,7 @@ nm_device_bridge_class_init (NMDeviceBridgeClass *klass)
parent_class->complete_connection = complete_connection;
parent_class->update_connection = update_connection;
+ parent_class->master_update_slave_connection = master_update_slave_connection;
parent_class->act_stage1_prepare = act_stage1_prepare;
parent_class->enslave_slave = enslave_slave;
@@ -574,15 +460,85 @@ nm_device_bridge_class_init (NMDeviceBridgeClass *klass)
/* properties */
g_object_class_install_property
(object_class, PROP_SLAVES,
- g_param_spec_boxed (NM_DEVICE_BRIDGE_SLAVES,
- "Slaves",
- "Slaves",
+ g_param_spec_boxed (NM_DEVICE_BRIDGE_SLAVES, "", "",
DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH,
- G_PARAM_READABLE));
+ 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_bridge_object_info);
+}
+
+/*************************************************************/
- dbus_g_error_domain_register (NM_BRIDGE_ERROR, NULL, NM_TYPE_BRIDGE_ERROR);
+#define NM_TYPE_BRIDGE_FACTORY (nm_bridge_factory_get_type ())
+#define NM_BRIDGE_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_BRIDGE_FACTORY, NMBridgeFactory))
+
+static NMDevice *
+new_link (NMDeviceFactory *factory, NMPlatformLink *plink, GError **error)
+{
+ if (plink->type == NM_LINK_TYPE_BRIDGE) {
+ return (NMDevice *) g_object_new (NM_TYPE_DEVICE_BRIDGE,
+ NM_DEVICE_PLATFORM_DEVICE, plink,
+ NM_DEVICE_DRIVER, "bridge",
+ NM_DEVICE_TYPE_DESC, "Bridge",
+ NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_BRIDGE,
+ NM_DEVICE_IS_MASTER, TRUE,
+ NULL);
+ }
+ return NULL;
}
+
+static NMDevice *
+create_virtual_device_for_connection (NMDeviceFactory *factory,
+ NMConnection *connection,
+ NMDevice *parent,
+ GError **error)
+{
+ const char *iface;
+ NMSettingBridge *s_bridge;
+ const char *mac_address_str;
+ guint8 mac_address[NM_UTILS_HWADDR_LEN_MAX];
+
+ if (!nm_connection_is_type (connection, NM_SETTING_BRIDGE_SETTING_NAME))
+ return NULL;
+
+ g_return_val_if_fail (connection != NULL, NULL);
+
+ iface = nm_connection_get_interface_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_str = nm_setting_bridge_get_mac_address (s_bridge);
+ if (mac_address_str) {
+ if (!nm_utils_hwaddr_aton (mac_address_str, mac_address, ETH_ALEN))
+ mac_address_str = NULL;
+ }
+
+ if ( !nm_platform_bridge_add (iface,
+ mac_address_str ? mac_address : NULL,
+ mac_address_str ? ETH_ALEN : 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);
+}
+
+DEFINE_DEVICE_FACTORY_INTERNAL(BRIDGE, Bridge, bridge,
+ factory_iface->new_link = new_link;
+ factory_iface->create_virtual_device_for_connection = create_virtual_device_for_connection;
+ )
+
diff --git a/src/devices/nm-device-bridge.h b/src/devices/nm-device-bridge.h
index 4194f5a41..c11a2c40f 100644
--- a/src/devices/nm-device-bridge.h
+++ b/src/devices/nm-device-bridge.h
@@ -18,8 +18,8 @@
* Copyright 2012 Red Hat, Inc.
*/
-#ifndef NM_DEVICE_BRIDGE_H
-#define NM_DEVICE_BRIDGE_H
+#ifndef __NETWORKMANAGER_DEVICE_BRIDGE_H__
+#define __NETWORKMANAGER_DEVICE_BRIDGE_H__
#include <glib-object.h>
@@ -34,31 +34,13 @@ G_BEGIN_DECLS
#define NM_IS_DEVICE_BRIDGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_BRIDGE))
#define NM_DEVICE_BRIDGE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_BRIDGE, NMDeviceBridgeClass))
-typedef enum {
- NM_BRIDGE_ERROR_CONNECTION_NOT_BRIDGE = 0, /*< nick=ConnectionNotBridge >*/
- NM_BRIDGE_ERROR_CONNECTION_INVALID, /*< nick=ConnectionInvalid >*/
- NM_BRIDGE_ERROR_CONNECTION_INCOMPATIBLE, /*< nick=ConnectionIncompatible >*/
-} NMBridgeError;
-
#define NM_DEVICE_BRIDGE_SLAVES "slaves"
-typedef struct {
- NMDevice parent;
-} NMDeviceBridge;
-
-typedef struct {
- NMDeviceClass parent;
-
-} NMDeviceBridgeClass;
-
+typedef NMDevice NMDeviceBridge;
+typedef NMDeviceClass NMDeviceBridgeClass;
GType nm_device_bridge_get_type (void);
-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
#endif /* NM_DEVICE_BRIDGE_H */
diff --git a/src/settings/nm-settings-utils.c b/src/devices/nm-device-ethernet-utils.c
index d0e21fbdf..585f6a0e0 100644
--- a/src/settings/nm-settings-utils.c
+++ b/src/devices/nm-device-ethernet-utils.c
@@ -16,40 +16,30 @@
* (C) Copyright 2011 Red Hat, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include <glib.h>
#include <glib/gi18n.h>
#include <nm-connection.h>
-#include "nm-settings-utils.h"
+#include "nm-device-ethernet-utils.h"
char *
-nm_settings_utils_get_default_wired_name (GHashTable *connections)
+nm_device_ethernet_utils_get_default_wired_name (const GSList *connections)
{
- GHashTableIter iter;
- NMConnection *connection = NULL;
- GSList *names = NULL, *niter;
+ const GSList *iter;
char *cname = NULL;
int i = 0;
- /* Build up a list of all existing connection names for dupe checking */
- g_hash_table_iter_init (&iter, connections);
- while (g_hash_table_iter_next (&iter, NULL, (gpointer) &connection)) {
- const char *id;
-
- id = nm_connection_get_id (connection);
- g_assert (id);
- names = g_slist_append (names, (gpointer) id);
- }
-
/* Find the next available unique connection name */
while (!cname && (i++ < 10000)) {
char *temp;
gboolean found = FALSE;
temp = g_strdup_printf (_("Wired connection %d"), i);
- for (niter = names; niter; niter = g_slist_next (niter)) {
- if (g_strcmp0 (niter->data, temp) == 0) {
+ for (iter = connections; iter; iter = iter->next) {
+ if (g_strcmp0 (nm_connection_get_id (NM_CONNECTION (iter->data)), temp) == 0) {
found = TRUE;
g_free (temp);
break;
@@ -59,7 +49,6 @@ nm_settings_utils_get_default_wired_name (GHashTable *connections)
if (found == FALSE)
cname = temp;
}
- g_slist_free (names);
return cname;
}
diff --git a/src/settings/nm-settings-utils.h b/src/devices/nm-device-ethernet-utils.h
index f669d2b10..5848f7e60 100644
--- a/src/settings/nm-settings-utils.h
+++ b/src/devices/nm-device-ethernet-utils.h
@@ -16,11 +16,11 @@
* (C) Copyright 2011 Red Hat, Inc.
*/
-#ifndef NM_SETTINGS_UTILS_H
-#define NM_SETTINGS_UTILS_H
+#ifndef __NETWORKMANAGER_DEVICE_ETHERNET_UTILS_H__
+#define __NETWORKMANAGER_DEVICE_ETHERNET_UTILS_H__
#include <glib.h>
-char *nm_settings_utils_get_default_wired_name (GHashTable *connections);
+char *nm_device_ethernet_utils_get_default_wired_name (const GSList *connections);
-#endif /* NM_SETTINGS_UTILS_H */
+#endif /* NETWORKMANAGER_DEVICE_ETHERNET_UTILS_H */
diff --git a/src/devices/nm-device-ethernet.c b/src/devices/nm-device-ethernet.c
index f4a90c747..ac408d3d9 100644
--- a/src/devices/nm-device-ethernet.c
+++ b/src/devices/nm-device-ethernet.c
@@ -20,6 +20,7 @@
*/
#include "config.h"
+
#include <glib.h>
#include <glib/gi18n.h>
#include <netinet/in.h>
@@ -30,9 +31,7 @@
#include <linux/version.h>
#include <sys/ioctl.h>
#include <unistd.h>
-#include <linux/if.h>
#include <errno.h>
-#include <netinet/ether.h>
#include <gudev/gudev.h>
@@ -44,22 +43,23 @@
#include "nm-supplicant-manager.h"
#include "nm-supplicant-interface.h"
#include "nm-supplicant-config.h"
-#include "nm-setting-connection.h"
-#include "nm-setting-wired.h"
-#include "nm-setting-8021x.h"
-#include "nm-setting-pppoe.h"
-#include "nm-setting-bond.h"
#include "ppp-manager/nm-ppp-manager.h"
#include "nm-logging.h"
-#include "nm-utils.h"
#include "nm-enum-types.h"
#include "nm-dbus-manager.h"
#include "nm-platform.h"
#include "nm-dcb.h"
#include "nm-settings-connection.h"
+#include "nm-config.h"
+#include "nm-device-ethernet-utils.h"
+#include "nm-connection-provider.h"
+#include "nm-device-factory.h"
+#include "nm-core-internal.h"
#include "nm-device-ethernet-glue.h"
+#include "nm-device-logging.h"
+_LOG_DECLARE_SELF(NMDeviceEthernet);
G_DEFINE_TYPE (NMDeviceEthernet, nm_device_ethernet, NM_TYPE_DEVICE)
@@ -69,8 +69,6 @@ G_DEFINE_TYPE (NMDeviceEthernet, nm_device_ethernet, NM_TYPE_DEVICE)
#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 {
@@ -101,8 +99,8 @@ typedef enum {
} DcbWait;
typedef struct {
- guint8 perm_hw_addr[ETH_ALEN]; /* Permanent MAC address */
- guint8 initial_hw_addr[ETH_ALEN]; /* Initial MAC address (as seen when NM starts) */
+ char * perm_hw_addr; /* Permanent MAC address */
+ char * initial_hw_addr; /* Initial MAC address (as seen when NM starts) */
guint32 speed;
@@ -138,15 +136,6 @@ enum {
};
-static GQuark
-nm_ethernet_error_quark (void)
-{
- static GQuark quark = 0;
- if (!quark)
- quark = g_quark_from_static_string ("nm-ethernet-error");
- return quark;
-}
-
static char *
get_link_basename (const char *parent_path, const char *name, GError **error)
{
@@ -167,7 +156,6 @@ static void
_update_s390_subchannels (NMDeviceEthernet *self)
{
NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
- const char *iface;
GUdevClient *client;
GUdevDevice *dev;
GUdevDevice *parent = NULL;
@@ -176,17 +164,16 @@ _update_s390_subchannels (NMDeviceEthernet *self)
GDir *dir;
GError *error = NULL;
- iface = nm_device_get_iface (NM_DEVICE (self));
-
client = g_udev_client_new (subsystems);
if (!client) {
- nm_log_warn (LOGD_DEVICE | LOGD_HW, "(%s): failed to initialize GUdev client", iface);
+ _LOGW (LOGD_DEVICE | LOGD_HW, "failed to initialize GUdev client");
return;
}
- dev = g_udev_client_query_by_subsystem_and_name (client, "net", iface);
+ dev = g_udev_client_query_by_subsystem_and_name (client, "net",
+ nm_device_get_iface (NM_DEVICE (self)));
if (!dev) {
- nm_log_warn (LOGD_DEVICE | LOGD_HW, "(%s): failed to find device with udev", iface);
+ _LOGW (LOGD_DEVICE | LOGD_HW, "failed to find device with udev");
goto out;
}
@@ -203,9 +190,8 @@ _update_s390_subchannels (NMDeviceEthernet *self)
parent_path = g_udev_device_get_sysfs_path (parent);
dir = g_dir_open (parent_path, 0, &error);
if (!dir) {
- nm_log_warn (LOGD_DEVICE | LOGD_HW, "(%s): failed to open directory '%s': %s",
- iface, parent_path,
- error && error->message ? error->message : "(unknown)");
+ _LOGW (LOGD_DEVICE | LOGD_HW, "failed to open directory '%s': %s",
+ parent_path, error && error->message ? error->message : "(unknown)");
g_clear_error (&error);
goto out;
}
@@ -228,12 +214,12 @@ _update_s390_subchannels (NMDeviceEthernet *self)
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);
+ _LOGW (LOGD_DEVICE | LOGD_HW, "error reading %s", path);
g_free (path);
g_free (value);
}
if (error) {
- nm_log_warn (LOGD_DEVICE | LOGD_HW, "(%s): %s", iface, error->message);
+ _LOGW (LOGD_DEVICE | LOGD_HW, "%s", error->message);
g_clear_error (&error);
}
}
@@ -253,9 +239,8 @@ _update_s390_subchannels (NMDeviceEthernet *self)
priv->subchannels = g_strdup (priv->subchan1);
driver = nm_device_get_driver (NM_DEVICE (self));
- nm_log_info (LOGD_DEVICE | LOGD_HW,
- "(%s): found s390 '%s' subchannels [%s]",
- iface, driver ? driver : "(unknown driver)", priv->subchannels);
+ _LOGI (LOGD_DEVICE | LOGD_HW, "found s390 '%s' subchannels [%s]",
+ driver ? driver : "(unknown driver)", priv->subchannels);
out:
if (parent)
@@ -271,25 +256,22 @@ constructor (GType type,
GObjectConstructParam *construct_params)
{
GObject *object;
- NMDevice *self;
- int ifindex;
object = G_OBJECT_CLASS (nm_device_ethernet_parent_class)->constructor (type,
n_construct_params,
construct_params);
if (object) {
- self = NM_DEVICE (object);
- ifindex = nm_device_get_ifindex (self);
+#ifndef G_DISABLE_ASSERT
+ int ifindex = nm_device_get_ifindex (NM_DEVICE (object));
+ NMLinkType link_type = nm_platform_link_get_type (ifindex);
- 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)));
+ g_assert ( link_type == NM_LINK_TYPE_ETHERNET
+ || link_type == NM_LINK_TYPE_VETH
+ || link_type == NM_LINK_TYPE_NONE);
+#endif
/* s390 stuff */
- _update_s390_subchannels (NM_DEVICE_ETHERNET (self));
+ _update_s390_subchannels (NM_DEVICE_ETHERNET (object));
}
return object;
@@ -328,18 +310,6 @@ nm_device_ethernet_init (NMDeviceEthernet *self)
priv->s390_options = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
}
-NMDevice *
-nm_device_ethernet_new (NMPlatformLink *platform_device)
-{
- g_return_val_if_fail (platform_device != NULL, NULL);
-
- return (NMDevice *) g_object_new (NM_TYPE_DEVICE_ETHERNET,
- NM_DEVICE_PLATFORM_DEVICE, platform_device,
- NM_DEVICE_TYPE_DESC, "Ethernet",
- NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_ETHERNET,
- NULL);
-}
-
static void
update_permanent_hw_address (NMDevice *dev)
{
@@ -347,12 +317,14 @@ update_permanent_hw_address (NMDevice *dev)
NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
struct ifreq req;
struct ethtool_perm_addr *epaddr = NULL;
- int fd, ret;
- const guint8 *mac;
+ int fd, ret, errsv;
+ const char *mac;
+
+ g_return_if_fail (priv->perm_hw_addr == NULL);
fd = socket (PF_INET, SOCK_DGRAM, 0);
if (fd < 0) {
- nm_log_warn (LOGD_HW, "couldn't open control socket.");
+ _LOGW (LOGD_HW, "couldn't open control socket.");
return;
}
@@ -367,21 +339,18 @@ update_permanent_hw_address (NMDevice *dev)
errno = 0;
ret = ioctl (fd, SIOCETHTOOL, &req);
- if ((ret < 0) || !nm_ethernet_address_is_valid ((struct ether_addr *) epaddr->data)) {
- nm_log_dbg (LOGD_HW | LOGD_ETHER, "(%s): unable to read permanent MAC address (error %d)",
- nm_device_get_iface (dev), errno);
+ errsv = errno;
+ if ((ret < 0) || !nm_ethernet_address_is_valid (epaddr->data, ETH_ALEN)) {
+ _LOGD (LOGD_HW | LOGD_ETHER, "unable to read permanent MAC address (error %d)", errsv);
/* Fall back to current address */
- mac = nm_device_get_hw_address (dev, NULL);
+ mac = nm_device_get_hw_address (dev);
if (mac)
- memcpy (epaddr->data, mac, ETH_ALEN);
+ nm_utils_hwaddr_aton (mac, epaddr->data, ETH_ALEN);
else
memset (epaddr->data, 0, ETH_ALEN);
}
- if (memcmp (&priv->perm_hw_addr, epaddr->data, ETH_ALEN)) {
- memcpy (&priv->perm_hw_addr, epaddr->data, ETH_ALEN);
- g_object_notify (G_OBJECT (dev), NM_DEVICE_ETHERNET_PERMANENT_HW_ADDRESS);
- }
+ priv->perm_hw_addr = nm_utils_hwaddr_ntoa (epaddr->data, ETH_ALEN);
g_free (epaddr);
close (fd);
@@ -392,32 +361,25 @@ update_initial_hw_address (NMDevice *dev)
{
NMDeviceEthernet *self = NM_DEVICE_ETHERNET (dev);
NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
- 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.
*/
- 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);
+ priv->initial_hw_addr = g_strdup (nm_device_get_hw_address (dev));
+
+ _LOGD (LOGD_DEVICE | LOGD_ETHER, "read initial MAC address %s", priv->initial_hw_addr);
}
static guint32
-get_generic_capabilities (NMDevice *dev)
+get_generic_capabilities (NMDevice *device)
{
- if (nm_platform_link_supports_carrier_detect (nm_device_get_ifindex (dev)))
+ NMDeviceEthernet *self = NM_DEVICE_ETHERNET (device);
+
+ if (nm_platform_link_supports_carrier_detect (nm_device_get_ifindex (device)))
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));
+ _LOGI (LOGD_HW, "driver '%s' does not support carrier detection.",
+ nm_device_get_driver (device));
return NM_DEVICE_CAP_NONE;
}
}
@@ -426,7 +388,7 @@ static gboolean
match_subchans (NMDeviceEthernet *self, NMSettingWired *s_wired, gboolean *try_mac)
{
NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
- const GPtrArray *subchans;
+ const char * const *subchans;
int i;
*try_mac = TRUE;
@@ -440,8 +402,8 @@ match_subchans (NMDeviceEthernet *self, NMSettingWired *s_wired, gboolean *try_m
return FALSE;
/* Make sure each subchannel in the connection is a subchannel of this device */
- for (i = 0; i < subchans->len; i++) {
- const char *candidate = g_ptr_array_index (subchans, i);
+ for (i = 0; subchans[i]; i++) {
+ const char *candidate = subchans[i];
if ( (priv->subchan1 && !strcmp (priv->subchan1, candidate))
|| (priv->subchan2 && !strcmp (priv->subchan2, candidate))
@@ -476,29 +438,27 @@ check_connection_compatible (NMDevice *device, NMConnection *connection)
return FALSE;
if (s_wired) {
- const GByteArray *mac;
+ const char *mac;
gboolean try_mac = TRUE;
- const GSList *mac_blacklist, *mac_blacklist_iter;
+ const char * const *mac_blacklist;
+ int i;
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))
+ if (try_mac && mac && !nm_utils_hwaddr_matches (mac, -1, priv->perm_hw_addr, -1))
return FALSE;
/* Check for MAC address blacklist */
mac_blacklist = nm_setting_wired_get_mac_address_blacklist (s_wired);
- 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)) {
+ for (i = 0; mac_blacklist[i]; i++) {
+ if (!nm_utils_hwaddr_valid (mac_blacklist[i], ETH_ALEN)) {
g_warn_if_reached ();
return FALSE;
}
- if (memcmp (&addr, &priv->perm_hw_addr, ETH_ALEN) == 0)
+ if (nm_utils_hwaddr_matches (mac_blacklist[i], -1, priv->perm_hw_addr, -1))
return FALSE;
}
}
@@ -588,14 +548,15 @@ wired_secrets_cb (NMActRequest *req,
GError *error,
gpointer user_data)
{
- NMDevice *dev = NM_DEVICE (user_data);
+ NMDeviceEthernet *self = NM_DEVICE_ETHERNET (user_data);
+ NMDevice *dev = NM_DEVICE (self);
g_return_if_fail (req == nm_device_get_act_request (dev));
g_return_if_fail (nm_device_get_state (dev) == NM_DEVICE_STATE_NEED_AUTH);
g_return_if_fail (nm_act_request_get_connection (req) == connection);
if (error) {
- nm_log_warn (LOGD_ETHER, "%s", error->message);
+ _LOGW (LOGD_ETHER, "%s", error->message);
nm_device_state_changed (dev,
NM_DEVICE_STATE_FAILED,
NM_DEVICE_STATE_REASON_NO_SECRETS);
@@ -637,16 +598,14 @@ link_timeout_cb (gpointer user_data)
if (!setting_name)
goto time_out;
- nm_log_info (LOGD_DEVICE | LOGD_ETHER,
- "Activation (%s/wired): disconnected during authentication,"
- " asking for new key.",
- nm_device_get_iface (dev));
+ _LOGI (LOGD_DEVICE | LOGD_ETHER,
+ "Activation: (ethernet) disconnected during authentication, asking for new key.");
supplicant_interface_release (self);
nm_device_state_changed (dev, NM_DEVICE_STATE_NEED_AUTH, NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT);
nm_act_request_get_secrets (req,
setting_name,
- NM_SETTINGS_GET_SECRETS_FLAG_REQUEST_NEW,
+ NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW,
NULL,
wired_secrets_cb,
self);
@@ -654,8 +613,7 @@ link_timeout_cb (gpointer user_data)
return FALSE;
time_out:
- nm_log_warn (LOGD_DEVICE | LOGD_ETHER,
- "(%s): link timed out.", nm_device_get_iface (dev));
+ _LOGW (LOGD_DEVICE | LOGD_ETHER, "link timed out.");
nm_device_state_changed (dev, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT);
return FALSE;
@@ -677,7 +635,7 @@ build_supplicant_config (NMDeviceEthernet *self)
security = nm_connection_get_setting_802_1x (connection);
if (!nm_supplicant_config_add_setting_8021x (config, security, con_uuid, TRUE)) {
- nm_log_warn (LOGD_DEVICE, "Couldn't add 802.1X security setting to supplicant config.");
+ _LOGW (LOGD_DEVICE, "Couldn't add 802.1X security setting to supplicant config.");
g_object_unref (config);
config = NULL;
}
@@ -702,11 +660,9 @@ supplicant_iface_state_cb (NMSupplicantInterface *iface,
if (new_state == old_state)
return;
- nm_log_info (LOGD_DEVICE | LOGD_ETHER,
- "(%s): supplicant interface state: %s -> %s",
- nm_device_get_iface (device),
- nm_supplicant_interface_state_to_string (old_state),
- nm_supplicant_interface_state_to_string (new_state));
+ _LOGI (LOGD_DEVICE | LOGD_ETHER, "supplicant interface state: %s -> %s",
+ nm_supplicant_interface_state_to_string (old_state),
+ nm_supplicant_interface_state_to_string (new_state));
devstate = nm_device_get_state (device);
@@ -718,15 +674,12 @@ supplicant_iface_state_cb (NMSupplicantInterface *iface,
g_object_unref (config);
if (!success) {
- nm_log_err (LOGD_DEVICE | LOGD_ETHER,
- "Activation (%s/wired): couldn't send security "
- "configuration to the supplicant.",
- nm_device_get_iface (device));
+ _LOGE (LOGD_DEVICE | LOGD_ETHER,
+ "Activation: (ethernet) couldn't send security configuration to the supplicant.");
}
} else {
- nm_log_warn (LOGD_DEVICE | LOGD_ETHER,
- "Activation (%s/wired): couldn't build security configuration.",
- nm_device_get_iface (device));
+ _LOGW (LOGD_DEVICE | LOGD_ETHER,
+ "Activation: (ethernet) couldn't build security configuration.");
}
if (!success) {
@@ -743,9 +696,8 @@ supplicant_iface_state_cb (NMSupplicantInterface *iface,
* schedule the next activation stage.
*/
if (devstate == NM_DEVICE_STATE_CONFIG) {
- nm_log_info (LOGD_DEVICE | LOGD_ETHER,
- "Activation (%s/wired) Stage 2 of 5 (Device Configure) successful.",
- nm_device_get_iface (device));
+ _LOGI (LOGD_DEVICE | LOGD_ETHER,
+ "Activation: (ethernet) Stage 2 of 5 (Device Configure) successful.");
nm_device_activate_schedule_stage3_ip_config_start (device);
}
break;
@@ -794,9 +746,9 @@ supplicant_iface_connection_error_cb (NMSupplicantInterface *iface,
NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
guint id;
- nm_log_warn (LOGD_DEVICE | LOGD_ETHER,
- "Activation (%s/wired): association request to the supplicant failed: %s - %s",
- nm_device_get_iface (NM_DEVICE (self)), name, message);
+ _LOGW (LOGD_DEVICE | LOGD_ETHER,
+ "Activation: (ethernet) association request to the supplicant failed: %s - %s",
+ name, message);
if (priv->supplicant.iface_con_error_cb_id)
g_source_remove (priv->supplicant.iface_con_error_cb_id);
@@ -826,16 +778,15 @@ handle_auth_or_fail (NMDeviceEthernet *self,
nm_connection_clear_secrets (connection);
setting_name = nm_connection_need_secrets (connection, NULL);
if (setting_name) {
- NMSettingsGetSecretsFlags flags = NM_SETTINGS_GET_SECRETS_FLAG_ALLOW_INTERACTION;
+ NMSecretAgentGetSecretsFlags flags = NM_SECRET_AGENT_GET_SECRETS_FLAG_ALLOW_INTERACTION;
if (new_secrets)
- flags |= NM_SETTINGS_GET_SECRETS_FLAG_REQUEST_NEW;
+ flags |= NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW;
nm_act_request_get_secrets (req, setting_name, flags, NULL, wired_secrets_cb, self);
g_object_set_data (G_OBJECT (connection), WIRED_SECRETS_TRIES, GUINT_TO_POINTER (++tries));
- } else {
- nm_log_info (LOGD_DEVICE, "Cleared secrets, but setting didn't need any secrets.");
- }
+ } else
+ _LOGI (LOGD_DEVICE, "Cleared secrets, but setting didn't need any secrets.");
return NM_ACT_STAGE_RETURN_POSTPONE;
}
@@ -848,19 +799,16 @@ supplicant_connection_timeout_cb (gpointer user_data)
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; 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);
+ _LOGW (LOGD_DEVICE | LOGD_ETHER,
+ "Activation: (ethernet) association took too long.");
supplicant_interface_release (self);
req = nm_device_get_act_request (device);
@@ -876,10 +824,9 @@ supplicant_connection_timeout_cb (gpointer user_data)
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
+ if (handle_auth_or_fail (self, req, new_secrets) == NM_ACT_STAGE_RETURN_POSTPONE)
+ _LOGW (LOGD_DEVICE | LOGD_ETHER, "Activation: (ethernet) asking for new secrets");
+ else
nm_device_state_changed (device, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_NO_SECRETS);
return FALSE;
@@ -889,16 +836,14 @@ static gboolean
supplicant_interface_init (NMDeviceEthernet *self)
{
NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
- const char *iface;
-
- iface = nm_device_get_iface (NM_DEVICE (self));
/* Create supplicant interface */
- priv->supplicant.iface = nm_supplicant_manager_iface_get (priv->supplicant.mgr, iface, FALSE);
+ priv->supplicant.iface = nm_supplicant_manager_iface_get (priv->supplicant.mgr,
+ nm_device_get_iface (NM_DEVICE (self)),
+ FALSE);
if (!priv->supplicant.iface) {
- nm_log_err (LOGD_DEVICE | LOGD_ETHER,
- "Couldn't initialize supplicant interface for %s.",
- iface);
+ _LOGE (LOGD_DEVICE | LOGD_ETHER,
+ "Couldn't initialize supplicant interface");
supplicant_interface_release (self);
return FALSE;
}
@@ -924,13 +869,12 @@ supplicant_interface_init (NMDeviceEthernet *self)
static gboolean
pppoe_reconnect_delay (gpointer user_data)
{
- NMDevice *device = NM_DEVICE (user_data);
- NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (device);
+ NMDeviceEthernet *self = NM_DEVICE_ETHERNET (user_data);
+ NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
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);
+ _LOGI (LOGD_DEVICE, "PPPoE reconnect delay complete, resuming connection...");
+ nm_device_activate_schedule_stage2_device_config (NM_DEVICE (self));
return FALSE;
}
@@ -941,7 +885,7 @@ act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
NMActRequest *req;
NMSettingWired *s_wired;
- const GByteArray *cloned_mac;
+ const char *cloned_mac;
NMActStageReturn ret = NM_ACT_STAGE_RETURN_SUCCESS;
g_return_val_if_fail (reason != NULL, NM_ACT_STAGE_RETURN_FAILURE);
@@ -955,8 +899,8 @@ act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
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, cloned_mac->data, "set", LOGD_ETHER);
+ if (cloned_mac)
+ nm_device_set_hw_addr (dev, cloned_mac, "set", LOGD_ETHER);
}
/* If we're re-activating a PPPoE connection a short while after
@@ -968,8 +912,8 @@ act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
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);
+ _LOGI (LOGD_DEVICE, "delaying PPPoE reconnect for %d seconds to ensure peer is ready...",
+ delay);
g_assert (!priv->pppoe_wait_id);
priv->pppoe_wait_id = g_timeout_add_seconds (delay,
pppoe_reconnect_delay,
@@ -990,14 +934,13 @@ nm_8021x_stage2_config (NMDeviceEthernet *self, NMDeviceStateReason *reason)
NMConnection *connection;
NMSetting8021x *security;
const char *setting_name;
- const char *iface;
NMActStageReturn ret = NM_ACT_STAGE_RETURN_FAILURE;
connection = nm_device_get_connection (NM_DEVICE (self));
g_assert (connection);
security = nm_connection_get_setting_802_1x (connection);
if (!security) {
- nm_log_err (LOGD_DEVICE, "Invalid or missing 802.1X security");
+ _LOGE (LOGD_DEVICE, "Invalid or missing 802.1X security");
*reason = NM_DEVICE_STATE_REASON_CONFIG_FAILED;
return ret;
}
@@ -1005,24 +948,22 @@ nm_8021x_stage2_config (NMDeviceEthernet *self, NMDeviceStateReason *reason)
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 */
setting_name = nm_connection_need_secrets (connection, NULL);
if (setting_name) {
NMActRequest *req = nm_device_get_act_request (NM_DEVICE (self));
- nm_log_info (LOGD_DEVICE | LOGD_ETHER,
- "Activation (%s/wired): connection '%s' has security, but secrets are required.",
- iface, nm_connection_get_id (connection));
+ _LOGI (LOGD_DEVICE | LOGD_ETHER,
+ "Activation: (ethernet) connection '%s' has security, but secrets are required.",
+ nm_connection_get_id (connection));
ret = handle_auth_or_fail (self, req, FALSE);
if (ret != NM_ACT_STAGE_RETURN_POSTPONE)
*reason = NM_DEVICE_STATE_REASON_NO_SECRETS;
} else {
- nm_log_info (LOGD_DEVICE | LOGD_ETHER,
- "Activation (%s/wired): connection '%s' requires no security. No secrets needed.",
- iface, nm_connection_get_id (connection));
+ _LOGI (LOGD_DEVICE | LOGD_ETHER,
+ "Activation: (ethernet) connection '%s' requires no security. No secrets needed.",
+ nm_connection_get_id (connection));
if (supplicant_interface_init (self))
ret = NM_ACT_STAGE_RETURN_POSTPONE;
@@ -1073,7 +1014,7 @@ pppoe_stage3_ip4_config_start (NMDeviceEthernet *self, NMDeviceStateReason *reas
{
NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
NMConnection *connection;
- NMSettingPPPOE *s_pppoe;
+ NMSettingPppoe *s_pppoe;
NMActRequest *req;
GError *err = NULL;
NMActStageReturn ret = NM_ACT_STAGE_RETURN_FAILURE;
@@ -1097,8 +1038,7 @@ pppoe_stage3_ip4_config_start (NMDeviceEthernet *self, NMDeviceStateReason *reas
self);
ret = NM_ACT_STAGE_RETURN_POSTPONE;
} else {
- nm_log_warn (LOGD_DEVICE, "(%s): PPPoE failed to start: %s",
- nm_device_get_iface (NM_DEVICE (self)), err->message);
+ _LOGW (LOGD_DEVICE, "PPPoE failed to start: %s", err->message);
g_error_free (err);
g_object_unref (priv->ppp_manager);
@@ -1139,17 +1079,16 @@ static void dcb_state (NMDevice *device, gboolean timeout);
static gboolean
dcb_carrier_timeout (gpointer user_data)
{
+ NMDeviceEthernet *self = NM_DEVICE_ETHERNET (user_data);
+ NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
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);
+ _LOGW (LOGD_DCB, "DCB: timed out waiting for carrier (step %d)",
+ priv->dcb_wait);
}
dcb_state (device, TRUE);
return G_SOURCE_REMOVE;
@@ -1158,19 +1097,18 @@ dcb_carrier_timeout (gpointer user_data)
static gboolean
dcb_configure (NMDevice *device)
{
+ NMDeviceEthernet *self = NM_DEVICE_ETHERNET (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);
+ if (!nm_dcb_setup (nm_device_get_iface (device), s_dcb, &error)) {
+ _LOGW (LOGD_DCB, "Activation: (ethernet) failed to enable DCB/FCoE: %s",
+ error->message);
g_clear_error (&error);
return FALSE;
}
@@ -1178,7 +1116,7 @@ dcb_configure (NMDevice *device)
/* 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);
+ _LOGD (LOGD_DCB, "waiting for carrier (postconfig down)");
priv->dcb_wait = DCB_WAIT_CARRIER_POSTCONFIG_DOWN;
priv->dcb_timeout_id = g_timeout_add_seconds (3, dcb_carrier_timeout, device);
return TRUE;
@@ -1187,15 +1125,14 @@ dcb_configure (NMDevice *device)
static gboolean
dcb_enable (NMDevice *device)
{
- NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (device);
- const char *iface = nm_device_get_iface (device);
+ NMDeviceEthernet *self = NM_DEVICE_ETHERNET (device);
+ NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
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);
+ if (!nm_dcb_enable (nm_device_get_iface (device), TRUE, &error)) {
+ _LOGW (LOGD_DCB, "Activation: (ethernet) failed to enable DCB/FCoE: %s",
+ error->message);
g_clear_error (&error);
return FALSE;
}
@@ -1207,7 +1144,7 @@ dcb_enable (NMDevice *device)
* 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);
+ _LOGD (LOGD_DCB, "waiting for carrier (preconfig down)");
priv->dcb_wait = DCB_WAIT_CARRIER_PRECONFIG_DOWN;
priv->dcb_timeout_id = g_timeout_add_seconds (3, dcb_carrier_timeout, device);
return TRUE;
@@ -1216,25 +1153,25 @@ dcb_enable (NMDevice *device)
static void
dcb_state (NMDevice *device, gboolean timeout)
{
- NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (device);
- const char *iface = nm_device_get_iface (device);
+ NMDeviceEthernet *self = NM_DEVICE_ETHERNET (device);
+ NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
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);
+ _LOGD (LOGD_DCB, "dcb_state() wait %d carrier %d timeout %d", 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);
+ _LOGD (LOGD_DCB, "dcb_state() enabling DCB");
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_FAILED,
NM_DEVICE_STATE_REASON_DCB_FCOE_FAILED);
}
}
@@ -1245,20 +1182,20 @@ dcb_state (NMDevice *device, gboolean timeout)
if (!carrier) {
/* Wait for the carrier to come back up */
- nm_log_dbg (LOGD_DCB, "(%s): waiting for carrier (preconfig up)", iface);
+ _LOGD (LOGD_DCB, "waiting for carrier (preconfig up)");
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);
+ _LOGD (LOGD_DCB, "dcb_state() preconfig down falling through");
/* 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);
+ _LOGD (LOGD_DCB, "dcb_state() preconfig up configuring DCB");
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_FAILED,
NM_DEVICE_STATE_REASON_DCB_FCOE_FAILED);
}
}
@@ -1269,15 +1206,15 @@ dcb_state (NMDevice *device, gboolean timeout)
if (!carrier) {
/* Wait for the carrier to come back up */
- nm_log_dbg (LOGD_DCB, "(%s): waiting for carrier (postconfig up)", iface);
+ _LOGD (LOGD_DCB, "waiting for carrier (postconfig up)");
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);
+ _LOGD (LOGD_DCB, "dcb_state() postconfig down falling through");
/* 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);
+ _LOGD (LOGD_DCB, "dcb_state() postconfig up starting IP");
dcb_timeout_cleanup (device);
dcb_carrier_cleanup (device);
priv->dcb_wait = DCB_WAIT_UNKNOWN;
@@ -1292,12 +1229,13 @@ dcb_state (NMDevice *device, gboolean timeout)
static void
dcb_carrier_changed (NMDevice *device, GParamSpec *pspec, gpointer unused)
{
- NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (device);
+ NMDeviceEthernet *self = NM_DEVICE_ETHERNET (device);
+ NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
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));
+ _LOGD (LOGD_DCB, "carrier_changed() calling dcb_state()");
dcb_state (device, FALSE);
}
}
@@ -1307,7 +1245,8 @@ dcb_carrier_changed (NMDevice *device, GParamSpec *pspec, gpointer unused)
static NMActStageReturn
act_stage2_config (NMDevice *device, NMDeviceStateReason *reason)
{
- NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (device);
+ NMDeviceEthernet *self = NM_DEVICE_ETHERNET (device);
+ NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
NMSettingConnection *s_con;
const char *connection_type;
NMActStageReturn ret = NM_ACT_STAGE_RETURN_SUCCESS;
@@ -1331,7 +1270,7 @@ act_stage2_config (NMDevice *device, NMDeviceStateReason *reason)
security = (NMSetting8021x *) device_get_setting (device, NM_TYPE_SETTING_802_1X);
if (security) {
/* FIXME: for now 802.1x is mutually exclusive with DCB */
- return nm_8021x_stage2_config (NM_DEVICE_ETHERNET (device), reason);
+ return nm_8021x_stage2_config (self, reason);
}
}
@@ -1345,8 +1284,7 @@ act_stage2_config (NMDevice *device, NMDeviceStateReason *reason)
return NM_ACT_STAGE_RETURN_FAILURE;
}
} else {
- nm_log_dbg (LOGD_DCB, "(%s): waiting for carrier (preenable up)",
- nm_device_get_iface (device));
+ _LOGD (LOGD_DCB, "waiting for carrier (preenable up)");
priv->dcb_wait = DCB_WAIT_CARRIER_PREENABLE_UP;
priv->dcb_timeout_id = g_timeout_add_seconds (4, dcb_carrier_timeout, device);
}
@@ -1403,7 +1341,7 @@ ip4_config_pre_commit (NMDevice *device, NMIP4Config *config)
/* MTU override */
mtu = nm_setting_wired_get_mtu (s_wired);
if (mtu)
- nm_ip4_config_set_mtu (config, mtu);
+ nm_ip4_config_set_mtu (config, mtu, NM_IP_CONFIG_SOURCE_USER);
}
static void
@@ -1442,9 +1380,8 @@ deactivate (NMDevice *device)
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);
+ _LOGW (LOGD_DEVICE | LOGD_HW, "failed to disable DCB/FCoE: %s",
+ error->message);
g_clear_error (&error);
}
}
@@ -1454,7 +1391,8 @@ deactivate (NMDevice *device)
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);
+ if (priv->initial_hw_addr)
+ nm_device_set_hw_addr (device, priv->initial_hw_addr, "reset", LOGD_ETHER);
}
static gboolean
@@ -1466,8 +1404,8 @@ complete_connection (NMDevice *device,
{
NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (device);
NMSettingWired *s_wired;
- NMSettingPPPOE *s_pppoe;
- const GByteArray *setting_mac;
+ NMSettingPppoe *s_pppoe;
+ const char *setting_mac;
s_pppoe = nm_connection_get_setting_pppoe (connection);
@@ -1483,7 +1421,8 @@ complete_connection (NMDevice *device,
nm_utils_complete_generic (connection,
s_pppoe ? NM_SETTING_PPPOE_SETTING_NAME : NM_SETTING_WIRED_SETTING_NAME,
existing_connections,
- s_pppoe ? _("PPPoE connection %d") : _("Wired connection %d"),
+ NULL,
+ s_pppoe ? _("PPPoE connection") : _("Wired connection"),
NULL,
s_pppoe ? FALSE : TRUE); /* No IPv6 by default yet for PPPoE */
@@ -1496,29 +1435,66 @@ complete_connection (NMDevice *device,
setting_mac = nm_setting_wired_get_mac_address (s_wired);
if (setting_mac) {
/* Make sure the setting MAC (if any) matches the device's permanent MAC */
- if (memcmp (setting_mac->data, priv->perm_hw_addr, ETH_ALEN)) {
+ if (!nm_utils_hwaddr_matches (setting_mac, -1, priv->perm_hw_addr, -1)) {
g_set_error_literal (error,
- NM_SETTING_WIRED_ERROR,
- NM_SETTING_WIRED_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIRED_MAC_ADDRESS);
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("connection does not match device"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRED_SETTING_NAME, NM_SETTING_WIRED_MAC_ADDRESS);
return FALSE;
}
} else {
- GByteArray *mac;
- const guint8 null_mac[ETH_ALEN] = { 0, 0, 0, 0, 0, 0 };
-
- /* Lock the connection to this device by default */
- if (memcmp (priv->perm_hw_addr, null_mac, ETH_ALEN)) {
- mac = g_byte_array_sized_new (ETH_ALEN);
- g_byte_array_append (mac, priv->perm_hw_addr, ETH_ALEN);
- g_object_set (G_OBJECT (s_wired), NM_SETTING_WIRED_MAC_ADDRESS, mac, NULL);
- g_byte_array_free (mac, TRUE);
+ if (!nm_utils_hwaddr_matches (priv->perm_hw_addr, -1, NULL, ETH_ALEN)) {
+ g_object_set (G_OBJECT (s_wired),
+ NM_SETTING_WIRED_MAC_ADDRESS, priv->perm_hw_addr,
+ NULL);
}
}
return TRUE;
}
+static NMConnection *
+new_default_connection (NMDevice *self)
+{
+ NMConnection *connection;
+ const GSList *connections;
+ NMSetting *setting;
+ const char *hw_address;
+ char *defname, *uuid;
+
+ if (!nm_config_get_ethernet_can_auto_default (nm_config_get (), self))
+ return NULL;
+
+ hw_address = nm_device_get_hw_address (self);
+ if (!hw_address)
+ return NULL;
+
+ connection = nm_simple_connection_new ();
+ setting = nm_setting_connection_new ();
+ nm_connection_add_setting (connection, setting);
+
+ connections = nm_connection_provider_get_connections (nm_connection_provider_get ());
+ defname = nm_device_ethernet_utils_get_default_wired_name (connections);
+ 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);
+
+ /* Lock the connection to the device */
+ setting = nm_setting_wired_new ();
+ g_object_set (setting, NM_SETTING_WIRED_MAC_ADDRESS, hw_address, NULL);
+ nm_connection_add_setting (connection, setting);
+
+ return connection;
+}
+
static gboolean
spec_match_list (NMDevice *device, const GSList *specs)
{
@@ -1535,11 +1511,8 @@ update_connection (NMDevice *device, NMConnection *connection)
{
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 = nm_device_get_hw_address (device);
const char *mac_prop = NM_SETTING_WIRED_MAC_ADDRESS;
- GByteArray *array;
GHashTableIter iter;
gpointer key, value;
@@ -1551,37 +1524,29 @@ update_connection (NMDevice *device, NMConnection *connection)
/* If the device reports a permanent address, use that for the MAC address
* and the current MAC, if different, is the cloned MAC.
*/
- 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);
+ if (!nm_utils_hwaddr_matches (priv->perm_hw_addr, -1, NULL, ETH_ALEN)) {
+ g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, priv->perm_hw_addr, NULL);
mac_prop = NULL;
- if (mac && memcmp (priv->perm_hw_addr, mac, ETH_ALEN))
+ if (mac && !nm_utils_hwaddr_matches (priv->perm_hw_addr, -1, mac, -1))
mac_prop = NM_SETTING_WIRED_CLONED_MAC_ADDRESS;
}
- 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 (mac_prop && mac && nm_utils_hwaddr_valid (mac, ETH_ALEN))
+ g_object_set (s_wired, mac_prop, mac, NULL);
/* We don't set the MTU as we don't know whether it was set explicitly */
/* 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);
+ char **subchannels = g_new (char *, 3 + 1);
+
+ subchannels[0] = g_strdup (priv->subchan1);
+ subchannels[1] = g_strdup (priv->subchan2);
+ subchannels[2] = g_strdup (priv->subchan3);
+ subchannels[3] = NULL;
+ g_object_set (s_wired, NM_SETTING_WIRED_S390_SUBCHANNELS, subchannels, NULL);
+ g_strfreev (subchannels);
}
if (priv->s390_nettype)
g_object_set (s_wired, NM_SETTING_WIRED_S390_NETTYPE, priv->s390_nettype, NULL);
@@ -1595,7 +1560,8 @@ update_connection (NMDevice *device, NMConnection *connection)
static void
get_link_speed (NMDevice *device)
{
- NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (device);
+ NMDeviceEthernet *self = NM_DEVICE_ETHERNET (device);
+ NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
struct ifreq ifr;
struct ethtool_cmd edata = {
.cmd = ETHTOOL_GSET,
@@ -1605,7 +1571,7 @@ get_link_speed (NMDevice *device)
fd = socket (PF_INET, SOCK_DGRAM, 0);
if (fd < 0) {
- nm_log_warn (LOGD_HW | LOGD_ETHER, "couldn't open ethtool control socket.");
+ _LOGW (LOGD_HW | LOGD_ETHER, "couldn't open ethtool control socket.");
return;
}
@@ -1633,8 +1599,7 @@ get_link_speed (NMDevice *device)
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);
+ _LOGD (LOGD_HW | LOGD_ETHER, "speed is now %d Mb/s", speed);
}
static void
@@ -1669,6 +1634,8 @@ finalize (GObject *object)
NMDeviceEthernet *self = NM_DEVICE_ETHERNET (object);
NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
+ g_free (priv->perm_hw_addr);
+ g_free (priv->initial_hw_addr);
g_clear_object (&priv->supplicant.mgr);
g_free (priv->subchan1);
g_free (priv->subchan2);
@@ -1689,7 +1656,7 @@ get_property (GObject *object, guint prop_id,
switch (prop_id) {
case PROP_PERM_HW_ADDRESS:
- g_value_take_string (value, nm_utils_hwaddr_ntoa (&priv->perm_hw_addr, ARPHRD_ETHER));
+ g_value_set_string (value, priv->perm_hw_addr);
break;
case PROP_SPEED:
g_value_set_uint (value, priv->speed);
@@ -1733,6 +1700,7 @@ nm_device_ethernet_class_init (NMDeviceEthernetClass *klass)
parent_class->update_initial_hw_address = update_initial_hw_address;
parent_class->check_connection_compatible = check_connection_compatible;
parent_class->complete_connection = complete_connection;
+ parent_class->new_default_connection = new_default_connection;
parent_class->act_stage1_prepare = act_stage1_prepare;
parent_class->act_stage2_config = act_stage2_config;
@@ -1748,23 +1716,42 @@ nm_device_ethernet_class_init (NMDeviceEthernetClass *klass)
/* properties */
g_object_class_install_property
(object_class, PROP_PERM_HW_ADDRESS,
- g_param_spec_string (NM_DEVICE_ETHERNET_PERMANENT_HW_ADDRESS,
- "Permanent MAC Address",
- "Permanent hardware MAC address",
- NULL,
- G_PARAM_READABLE));
+ g_param_spec_string (NM_DEVICE_ETHERNET_PERMANENT_HW_ADDRESS, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_SPEED,
- g_param_spec_uint (NM_DEVICE_ETHERNET_SPEED,
- "Speed",
- "Speed",
- 0, G_MAXUINT32, 0,
- G_PARAM_READABLE));
+ g_param_spec_uint (NM_DEVICE_ETHERNET_SPEED, "", "",
+ 0, G_MAXUINT32, 0,
+ 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_ethernet_object_info);
+}
+
+/*************************************************************/
- dbus_g_error_domain_register (NM_ETHERNET_ERROR, NULL, NM_TYPE_ETHERNET_ERROR);
+#define NM_TYPE_ETHERNET_FACTORY (nm_ethernet_factory_get_type ())
+#define NM_ETHERNET_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_ETHERNET_FACTORY, NMEthernetFactory))
+
+static NMDevice *
+new_link (NMDeviceFactory *factory, NMPlatformLink *plink, GError **error)
+{
+ if (plink->type == NM_LINK_TYPE_ETHERNET) {
+ return (NMDevice *) g_object_new (NM_TYPE_DEVICE_ETHERNET,
+ NM_DEVICE_PLATFORM_DEVICE, plink,
+ NM_DEVICE_TYPE_DESC, "Ethernet",
+ NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_ETHERNET,
+ NULL);
+ }
+ return NULL;
}
+
+DEFINE_DEVICE_FACTORY_INTERNAL(ETHERNET, Ethernet, ethernet, \
+ factory_iface->new_link = new_link; \
+ )
+
diff --git a/src/devices/nm-device-ethernet.h b/src/devices/nm-device-ethernet.h
index bcaf270a0..ad9ce8566 100644
--- a/src/devices/nm-device-ethernet.h
+++ b/src/devices/nm-device-ethernet.h
@@ -19,8 +19,8 @@
* Copyright (C) 2006 - 2008 Novell, Inc.
*/
-#ifndef NM_DEVICE_ETHERNET_H
-#define NM_DEVICE_ETHERNET_H
+#ifndef __NETWORKMANAGER_DEVICE_ETHERNET_H__
+#define __NETWORKMANAGER_DEVICE_ETHERNET_H__
#include <glib-object.h>
@@ -35,31 +35,14 @@ G_BEGIN_DECLS
#define NM_IS_DEVICE_ETHERNET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_ETHERNET))
#define NM_DEVICE_ETHERNET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_ETHERNET, NMDeviceEthernetClass))
-typedef enum
-{
- NM_ETHERNET_ERROR_CONNECTION_NOT_WIRED = 0, /*< nick=ConnectionNotWired >*/
- NM_ETHERNET_ERROR_CONNECTION_INVALID, /*< nick=ConnectionInvalid >*/
- NM_ETHERNET_ERROR_CONNECTION_INCOMPATIBLE, /*< nick=ConnectionIncompatible >*/
-} NMEthernetError;
-
#define NM_DEVICE_ETHERNET_PERMANENT_HW_ADDRESS "perm-hw-address"
#define NM_DEVICE_ETHERNET_SPEED "speed"
-typedef struct {
- NMDevice parent;
-} NMDeviceEthernet;
-
-typedef struct {
- NMDeviceClass parent;
-
-} NMDeviceEthernetClass;
-
+typedef NMDevice NMDeviceEthernet;
+typedef NMDeviceClass NMDeviceEthernetClass;
GType nm_device_ethernet_get_type (void);
-
-NMDevice *nm_device_ethernet_new (NMPlatformLink *platform_device);
-
G_END_DECLS
#endif /* NM_DEVICE_ETHERNET_H */
diff --git a/src/devices/nm-device-factory.c b/src/devices/nm-device-factory.c
index fc4d1c248..abfb8d4a6 100644
--- a/src/devices/nm-device-factory.c
+++ b/src/devices/nm-device-factory.c
@@ -18,6 +18,8 @@
* Copyright (C) 2014 Red Hat, Inc.
*/
+#include "config.h"
+
#include "nm-device-factory.h"
enum {
@@ -27,6 +29,21 @@ enum {
};
static guint signals[LAST_SIGNAL] = { 0 };
+static GSList *internal_types = NULL;
+
+void
+_nm_device_factory_internal_register_type (GType factory_type)
+{
+ g_return_if_fail (g_slist_find (internal_types, GUINT_TO_POINTER (factory_type)) == NULL);
+ internal_types = g_slist_prepend (internal_types, GUINT_TO_POINTER (factory_type));
+}
+
+const GSList *
+nm_device_factory_get_internal_factory_types (void)
+{
+ return internal_types;
+}
+
gboolean
nm_device_factory_emit_component_added (NMDeviceFactory *factory, GObject *component)
{
@@ -91,6 +108,23 @@ nm_device_factory_get_type (void)
return device_factory_type;
}
+NMDeviceType
+nm_device_factory_get_device_type (NMDeviceFactory *factory)
+{
+ g_return_val_if_fail (factory != NULL, NM_DEVICE_TYPE_UNKNOWN);
+
+ return NM_DEVICE_FACTORY_GET_INTERFACE (factory)->get_device_type (factory);
+}
+
+void
+nm_device_factory_start (NMDeviceFactory *factory)
+{
+ g_return_if_fail (factory != NULL);
+
+ if (NM_DEVICE_FACTORY_GET_INTERFACE (factory)->start)
+ NM_DEVICE_FACTORY_GET_INTERFACE (factory)->start (factory);
+}
+
NMDevice *
nm_device_factory_new_link (NMDeviceFactory *factory,
NMPlatformLink *plink,
@@ -104,3 +138,21 @@ nm_device_factory_new_link (NMDeviceFactory *factory,
return NULL;
}
+NMDevice *
+nm_device_factory_create_virtual_device_for_connection (NMDeviceFactory *factory,
+ NMConnection *connection,
+ NMDevice *parent,
+ GError **error)
+{
+ NMDeviceFactory *interface;
+
+ g_return_val_if_fail (factory, NULL);
+ g_return_val_if_fail (connection, NULL);
+ g_return_val_if_fail (!error || !*error, NULL);
+
+ interface = NM_DEVICE_FACTORY_GET_INTERFACE (factory);
+ if (interface->create_virtual_device_for_connection)
+ return interface->create_virtual_device_for_connection (factory, connection, parent, error);
+ return NULL;
+}
+
diff --git a/src/devices/nm-device-factory.h b/src/devices/nm-device-factory.h
index f0e3dc197..ce672b8bf 100644
--- a/src/devices/nm-device-factory.h
+++ b/src/devices/nm-device-factory.h
@@ -18,14 +18,13 @@
* Copyright (C) 2007 - 2014 Red Hat, Inc.
*/
-#ifndef NM_DEVICE_FACTORY_H
-#define NM_DEVICE_FACTORY_H
+#ifndef __NETWORKMANAGER_DEVICE_FACTORY_H__
+#define __NETWORKMANAGER_DEVICE_FACTORY_H__
#include <glib.h>
#include <glib-object.h>
-#include "NetworkManager.h"
-#include "nm-platform.h"
+#include "nm-dbus-interface.h"
#include "nm-device.h"
/* WARNING: this file is private API between NetworkManager and its internal
@@ -43,7 +42,7 @@ typedef struct _NMDeviceFactory NMDeviceFactory;
* 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.
+ * deferred to the "start" interface method.
*
* Returns: the #GObject implementing #NMDeviceFactory or %NULL
*/
@@ -52,16 +51,6 @@ 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 ())
@@ -77,6 +66,25 @@ struct _NMDeviceFactory {
GTypeInterface g_iface;
/**
+ * get_device_type:
+ * @factory: the #NMDeviceFactory
+ *
+ * This function MUST be implemented.
+ *
+ * Returns: the #NMDeviceType that this plugin creates
+ */
+ NMDeviceType (*get_device_type) (NMDeviceFactory *factory);
+
+ /**
+ * start:
+ * @factory: the #NMDeviceFactory
+ *
+ * Start the factory and discover any existing devices that the factory
+ * can manage.
+ */
+ void (*start) (NMDeviceFactory *factory);
+
+ /**
* new_link:
* @factory: the #NMDeviceFactory
* @link: the new link
@@ -95,6 +103,25 @@ struct _NMDeviceFactory {
NMPlatformLink *plink,
GError **error);
+ /**
+ * create_virtual_device_for_connection:
+ * @factory: the #NMDeviceFactory
+ * @connection: the #NMConnection
+ * @error: a @GError in case of failure
+ *
+ * Virtual device types (such as team, bond, bridge) may need to be created.
+ * This function tries to create a device based on the given @connection.
+ *
+ * Returns: the newly created #NMDevice. If the factory does not support the
+ * connection type, it should return %NULL and leave @error unset. On error
+ * it should set @error and return %NULL.
+ */
+ NMDevice * (*create_virtual_device_for_connection) (NMDeviceFactory *factory,
+ NMConnection *connection,
+ NMDevice *parent,
+ GError **error);
+
+
/* Signals */
/**
@@ -124,13 +151,77 @@ struct _NMDeviceFactory {
GType nm_device_factory_get_type (void);
+NMDeviceType nm_device_factory_get_device_type (NMDeviceFactory *factory);
+
+void nm_device_factory_start (NMDeviceFactory *factory);
+
NMDevice * nm_device_factory_new_link (NMDeviceFactory *factory,
NMPlatformLink *plink,
GError **error);
+NMDevice * nm_device_factory_create_virtual_device_for_connection (NMDeviceFactory *factory,
+ NMConnection *connection,
+ NMDevice *parent,
+ GError **error);
+
/* For use by implementations */
gboolean nm_device_factory_emit_component_added (NMDeviceFactory *factory,
GObject *component);
-#endif /* NM_DEVICE_FACTORY_H */
-
+/**************************************************************************
+ * INTERNAL DEVICE FACTORY FUNCTIONS - devices provided by plugins should
+ * not use these functions.
+ **************************************************************************/
+
+#define DEFINE_DEVICE_FACTORY_INTERNAL(upper, mixed, lower, dfi_code) \
+ DEFINE_DEVICE_FACTORY_INTERNAL_WITH_DEVTYPE(upper, mixed, lower, upper, dfi_code)
+
+#define DEFINE_DEVICE_FACTORY_INTERNAL_WITH_DEVTYPE(upper, mixed, lower, devtype, dfi_code) \
+ typedef GObject NM##mixed##Factory; \
+ typedef GObjectClass NM##mixed##FactoryClass; \
+ \
+ static GType nm_##lower##_factory_get_type (void); \
+ static void device_factory_interface_init (NMDeviceFactory *factory_iface); \
+ \
+ G_DEFINE_TYPE_EXTENDED (NM##mixed##Factory, nm_##lower##_factory, G_TYPE_OBJECT, 0, \
+ G_IMPLEMENT_INTERFACE (NM_TYPE_DEVICE_FACTORY, device_factory_interface_init) \
+ _nm_device_factory_internal_register_type (g_define_type_id);) \
+ \
+ /* Use a module constructor to register the factory's GType at load \
+ * time, which then calls _nm_device_factory_internal_register_type() \
+ * to register the factory's GType with the Manager. \
+ */ \
+ static void __attribute__((constructor)) \
+ register_device_factory_internal_##lower (void) \
+ { \
+ g_type_init (); \
+ g_type_ensure (NM_TYPE_##upper##_FACTORY); \
+ } \
+ \
+ static NMDeviceType \
+ get_device_type (NMDeviceFactory *factory) \
+ { \
+ return NM_DEVICE_TYPE_##devtype; \
+ } \
+ \
+ static void \
+ device_factory_interface_init (NMDeviceFactory *factory_iface) \
+ { \
+ factory_iface->get_device_type = get_device_type; \
+ dfi_code \
+ } \
+ \
+ static void \
+ nm_##lower##_factory_init (NM##mixed##Factory *self) \
+ { \
+ } \
+ \
+ static void \
+ nm_##lower##_factory_class_init (NM##mixed##FactoryClass *lower##_class) \
+ { \
+ }
+
+void _nm_device_factory_internal_register_type (GType factory_type);
+const GSList *nm_device_factory_get_internal_factory_types (void);
+
+#endif /* __NETWORKMANAGER_DEVICE_FACTORY_H__ */
diff --git a/src/devices/nm-device-generic.c b/src/devices/nm-device-generic.c
index 5261c1333..f103ef830 100644
--- a/src/devices/nm-device-generic.c
+++ b/src/devices/nm-device-generic.c
@@ -24,9 +24,9 @@
#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-core-internal.h"
#include "nm-device-generic-glue.h"
@@ -45,19 +45,6 @@ enum {
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)
{
@@ -203,15 +190,12 @@ nm_device_generic_class_init (NMDeviceGenericClass *klass)
/* properties */
g_object_class_install_property
(object_class, PROP_TYPE_DESCRIPTION,
- g_param_spec_string (NM_DEVICE_GENERIC_TYPE_DESCRIPTION,
- "Type Description",
- "Type description",
+ g_param_spec_string (NM_DEVICE_GENERIC_TYPE_DESCRIPTION, "", "",
NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
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
index e7b7090b1..c889b1ddc 100644
--- a/src/devices/nm-device-generic.h
+++ b/src/devices/nm-device-generic.h
@@ -18,8 +18,8 @@
* Copyright 2013 Red Hat, Inc.
*/
-#ifndef NM_DEVICE_GENERIC_H
-#define NM_DEVICE_GENERIC_H
+#ifndef __NETWORKMANAGER_DEVICE_GENERIC_H__
+#define __NETWORKMANAGER_DEVICE_GENERIC_H__
#include <glib-object.h>
@@ -34,13 +34,6 @@ G_BEGIN_DECLS
#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 {
diff --git a/src/devices/nm-device-gre.c b/src/devices/nm-device-gre.c
index 0412e9931..9c25b398c 100644
--- a/src/devices/nm-device-gre.c
+++ b/src/devices/nm-device-gre.c
@@ -21,6 +21,7 @@
#include "config.h"
#include <string.h>
+#include <arpa/inet.h>
#include "nm-device-gre.h"
#include "nm-device-private.h"
@@ -28,9 +29,14 @@
#include "nm-logging.h"
#include "nm-manager.h"
#include "nm-platform.h"
+#include "nm-device-factory.h"
+#include "nm-core-internal.h"
#include "nm-device-gre-glue.h"
+#include "nm-device-logging.h"
+_LOG_DECLARE_SELF(NMDeviceGre);
+
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))
@@ -60,13 +66,13 @@ enum {
static void
update_properties (NMDevice *device)
{
- NMDeviceGrePrivate *priv = NM_DEVICE_GRE_GET_PRIVATE (device);
+ NMDeviceGre *self = NM_DEVICE_GRE (device);
+ NMDeviceGrePrivate *priv = NM_DEVICE_GRE_GET_PRIVATE (self);
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));
+ _LOGW (LOGD_HW, "could not read gre properties");
return;
}
@@ -107,18 +113,6 @@ link_changed (NMDevice *device, NMPlatformLink *info)
/**************************************************************/
-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)
{
@@ -194,85 +188,98 @@ nm_device_gre_class_init (NMDeviceGreClass *klass)
/* properties */
g_object_class_install_property
(object_class, PROP_PARENT,
- g_param_spec_boxed (NM_DEVICE_GRE_PARENT,
- "Parent",
- "Parent device",
+ g_param_spec_boxed (NM_DEVICE_GRE_PARENT, "", "",
DBUS_TYPE_G_OBJECT_PATH,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_INPUT_FLAGS,
- g_param_spec_uint (NM_DEVICE_GRE_INPUT_FLAGS,
- "Input flags",
- "Input flags",
+ g_param_spec_uint (NM_DEVICE_GRE_INPUT_FLAGS, "", "",
0, G_MAXUINT16, 0,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_OUTPUT_FLAGS,
- g_param_spec_uint (NM_DEVICE_GRE_OUTPUT_FLAGS,
- "Output flags",
- "Output flags",
+ g_param_spec_uint (NM_DEVICE_GRE_OUTPUT_FLAGS, "", "",
0, G_MAXUINT16, 0,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_INPUT_KEY,
- g_param_spec_uint (NM_DEVICE_GRE_INPUT_KEY,
- "Input key",
- "Input key",
+ g_param_spec_uint (NM_DEVICE_GRE_INPUT_KEY, "", "",
0, G_MAXUINT32, 0,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_OUTPUT_KEY,
- g_param_spec_uint (NM_DEVICE_GRE_OUTPUT_KEY,
- "Output key",
- "Output key",
+ g_param_spec_uint (NM_DEVICE_GRE_OUTPUT_KEY, "", "",
0, G_MAXUINT32, 0,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_LOCAL,
- g_param_spec_string (NM_DEVICE_GRE_LOCAL,
- "Local",
- "Local",
+ g_param_spec_string (NM_DEVICE_GRE_LOCAL, "", "",
NULL,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_REMOTE,
- g_param_spec_string (NM_DEVICE_GRE_REMOTE,
- "Remote",
- "Remote",
+ g_param_spec_string (NM_DEVICE_GRE_REMOTE, "", "",
NULL,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_TTL,
- g_param_spec_uchar (NM_DEVICE_GRE_TTL,
- "TTL",
- "TTL",
+ g_param_spec_uchar (NM_DEVICE_GRE_TTL, "", "",
0, 255, 0,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_TOS,
- g_param_spec_uchar (NM_DEVICE_GRE_TOS,
- "ToS",
- "ToS",
+ g_param_spec_uchar (NM_DEVICE_GRE_TOS, "", "",
0, 255, 0,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
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",
+ g_param_spec_boolean (NM_DEVICE_GRE_PATH_MTU_DISCOVERY, "", "",
FALSE,
- G_PARAM_READABLE));
+ 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_gre_object_info);
}
+
+/*************************************************************/
+
+#define NM_TYPE_GRE_FACTORY (nm_gre_factory_get_type ())
+#define NM_GRE_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_GRE_FACTORY, NMGreFactory))
+
+static NMDevice *
+new_link (NMDeviceFactory *factory, NMPlatformLink *plink, GError **error)
+{
+ if (plink->type == NM_LINK_TYPE_GRE || plink->type == NM_LINK_TYPE_GRETAP) {
+ return (NMDevice *) g_object_new (NM_TYPE_DEVICE_GRE,
+ NM_DEVICE_PLATFORM_DEVICE, plink,
+ NM_DEVICE_TYPE_DESC, "Gre",
+ NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_GENERIC,
+ NULL);
+ }
+ return NULL;
+}
+
+DEFINE_DEVICE_FACTORY_INTERNAL_WITH_DEVTYPE(GRE, Gre, gre, ETHERNET, \
+ factory_iface->new_link = new_link; \
+ )
+
diff --git a/src/devices/nm-device-gre.h b/src/devices/nm-device-gre.h
index 610b38050..7acff5f7f 100644
--- a/src/devices/nm-device-gre.h
+++ b/src/devices/nm-device-gre.h
@@ -18,8 +18,8 @@
* Copyright 2013 Red Hat, Inc.
*/
-#ifndef NM_DEVICE_GRE_H
-#define NM_DEVICE_GRE_H
+#ifndef __NETWORKMANAGER_DEVICE_GRE_H__
+#define __NETWORKMANAGER_DEVICE_GRE_H__
#include <glib-object.h>
@@ -45,19 +45,11 @@ G_BEGIN_DECLS
#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;
+typedef NMDeviceGeneric NMDeviceGre;
+typedef NMDeviceGenericClass 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/devices/nm-device-infiniband.c b/src/devices/nm-device-infiniband.c
index 8ec79157f..e1af89950 100644
--- a/src/devices/nm-device-infiniband.c
+++ b/src/devices/nm-device-infiniband.c
@@ -24,15 +24,18 @@
#include <glib/gi18n.h>
#include <linux/if_infiniband.h>
-#include <netinet/ether.h>
#include "nm-device-infiniband.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-activation-request.h"
+#include "nm-ip4-config.h"
+#include "nm-platform.h"
+#include "nm-device-factory.h"
+#include "nm-core-internal.h"
#include "nm-device-infiniband-glue.h"
@@ -41,8 +44,6 @@ 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 {
int dummy;
} NMDeviceInfinibandPrivate;
@@ -53,88 +54,11 @@ enum {
LAST_PROP
};
-static GQuark
-nm_infiniband_error_quark (void)
-{
- static GQuark quark = 0;
- if (!quark)
- quark = g_quark_from_static_string ("nm-infiniband-error");
- return quark;
-}
-
-static GObject*
-constructor (GType type,
- guint n_construct_params,
- GObjectConstructParam *construct_params)
-{
- GObject *object;
- NMDevice *self;
-
- object = G_OBJECT_CLASS (nm_device_infiniband_parent_class)->constructor (type,
- n_construct_params,
- construct_params);
- if (!object)
- return NULL;
-
- self = NM_DEVICE (object);
-
- nm_log_dbg (LOGD_HW | LOGD_INFINIBAND, "(%s): kernel ifindex %d",
- nm_device_get_iface (self),
- nm_device_get_ifindex (self));
- return object;
-}
-
static void
nm_device_infiniband_init (NMDeviceInfiniband * self)
{
}
-NMDevice *
-nm_device_infiniband_new (NMPlatformLink *platform_device)
-{
- g_return_val_if_fail (platform_device != NULL, NULL);
-
- return (NMDevice *) g_object_new (NM_TYPE_DEVICE_INFINIBAND,
- NM_DEVICE_PLATFORM_DEVICE, platform_device,
- NM_DEVICE_TYPE_DESC, "InfiniBand",
- NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_INFINIBAND,
- NULL);
-}
-
-NMDevice *
-nm_device_infiniband_new_partition (NMConnection *connection,
- NMDevice *parent)
-{
- 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;
- }
-
- 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)
{
@@ -207,14 +131,13 @@ ip4_config_pre_commit (NMDevice *self, NMIP4Config *config)
/* MTU override */
mtu = nm_setting_infiniband_get_mtu (s_infiniband);
if (mtu)
- nm_ip4_config_set_mtu (config, mtu);
+ nm_ip4_config_set_mtu (config, mtu, NM_IP_CONFIG_SOURCE_USER);
}
static gboolean
check_connection_compatible (NMDevice *device, NMConnection *connection)
{
NMSettingInfiniband *s_infiniband;
- const GByteArray *mac;
if (!NM_DEVICE_CLASS (nm_device_infiniband_parent_class)->check_connection_compatible (device, connection))
return FALSE;
@@ -227,11 +150,10 @@ check_connection_compatible (NMDevice *device, NMConnection *connection)
return FALSE;
if (s_infiniband) {
+ const char *mac;
+
mac = nm_setting_infiniband_get_mac_address (s_infiniband);
- /* 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))
+ if (mac && !nm_utils_hwaddr_matches (mac, -1, nm_device_get_hw_address (device), -1))
return FALSE;
}
@@ -246,13 +168,14 @@ complete_connection (NMDevice *device,
GError **error)
{
NMSettingInfiniband *s_infiniband;
- const GByteArray *setting_mac;
- const guint8 *hw_address;
+ const char *setting_mac;
+ const char *hw_address;
nm_utils_complete_generic (connection,
NM_SETTING_INFINIBAND_SETTING_NAME,
existing_connections,
- _("InfiniBand connection %d"),
+ NULL,
+ _("InfiniBand connection"),
NULL,
TRUE);
@@ -263,24 +186,20 @@ complete_connection (NMDevice *device,
}
setting_mac = nm_setting_infiniband_get_mac_address (s_infiniband);
- hw_address = nm_device_get_hw_address (device, NULL);
+ hw_address = nm_device_get_hw_address (device);
if (setting_mac) {
/* Make sure the setting MAC (if any) matches the device's MAC */
- if (memcmp (setting_mac->data, hw_address, INFINIBAND_ALEN)) {
+ if (!nm_utils_hwaddr_matches (setting_mac, -1, hw_address, -1)) {
g_set_error_literal (error,
- NM_SETTING_INFINIBAND_ERROR,
- NM_SETTING_INFINIBAND_ERROR_INVALID_PROPERTY,
- NM_SETTING_INFINIBAND_MAC_ADDRESS);
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("connection does not match device"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_INFINIBAND_SETTING_NAME, NM_SETTING_INFINIBAND_MAC_ADDRESS);
return FALSE;
}
} else {
- GByteArray *mac;
-
/* Lock the connection to this device by default */
- 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);
+ g_object_set (G_OBJECT (s_infiniband), NM_SETTING_INFINIBAND_MAC_ADDRESS, hw_address, NULL);
}
if (!nm_setting_infiniband_get_transport_mode (s_infiniband))
@@ -293,10 +212,7 @@ static void
update_connection (NMDevice *device, NMConnection *connection)
{
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;
+ const char *mac = nm_device_get_hw_address (device);
char *mode_path, *contents = NULL;
const char *transport_mode = "datagram";
@@ -305,12 +221,8 @@ update_connection (NMDevice *device, NMConnection *connection)
nm_connection_add_setting (connection, (NMSetting *) s_infiniband);
}
- 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);
- }
+ if (mac && !nm_utils_hwaddr_matches (mac, -1, NULL, INFINIBAND_ALEN))
+ g_object_set (s_infiniband, NM_SETTING_INFINIBAND_MAC_ADDRESS, mac, NULL);
mode_path = g_strdup_printf ("/sys/class/net/%s/mode",
ASSERT_VALID_PATH_COMPONENT (nm_device_get_iface (device)));
@@ -326,38 +238,6 @@ update_connection (NMDevice *device, NMConnection *connection)
g_object_set (G_OBJECT (s_infiniband), NM_SETTING_INFINIBAND_TRANSPORT_MODE, transport_mode, NULL);
}
-static gboolean
-spec_match_list (NMDevice *device, const GSList *specs)
-{
- char *hwaddr_str, *spec_str;
- const GSList *iter;
-
- if (NM_DEVICE_CLASS (nm_device_infiniband_parent_class)->spec_match_list (device, specs))
- return TRUE;
-
- hwaddr_str = nm_utils_hwaddr_ntoa (nm_device_get_hw_address (device, NULL),
- ARPHRD_INFINIBAND);
-
- /* 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;
-
- 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;
- }
- }
-
- g_free (hwaddr_str);
- return FALSE;
-}
-
static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
@@ -389,7 +269,6 @@ nm_device_infiniband_class_init (NMDeviceInfinibandClass *klass)
g_type_class_add_private (object_class, sizeof (NMDeviceInfinibandPrivate));
/* virtual methods */
- object_class->constructor = constructor;
object_class->get_property = get_property;
object_class->set_property = set_property;
@@ -397,7 +276,6 @@ nm_device_infiniband_class_init (NMDeviceInfinibandClass *klass)
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;
@@ -407,6 +285,67 @@ nm_device_infiniband_class_init (NMDeviceInfinibandClass *klass)
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);
+/*************************************************************/
+
+#define NM_TYPE_INFINIBAND_FACTORY (nm_infiniband_factory_get_type ())
+#define NM_INFINIBAND_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_INFINIBAND_FACTORY, NMInfinibandFactory))
+
+static NMDevice *
+new_link (NMDeviceFactory *factory, NMPlatformLink *plink, GError **error)
+{
+ if (plink->type == NM_LINK_TYPE_INFINIBAND) {
+ return (NMDevice *) g_object_new (NM_TYPE_DEVICE_INFINIBAND,
+ NM_DEVICE_PLATFORM_DEVICE, plink,
+ NM_DEVICE_TYPE_DESC, "InfiniBand",
+ NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_INFINIBAND,
+ NULL);
+ }
+ return NULL;
}
+
+static NMDevice *
+create_virtual_device_for_connection (NMDeviceFactory *factory,
+ NMConnection *connection,
+ NMDevice *parent,
+ GError **error)
+{
+ NMSettingInfiniband *s_infiniband;
+ int p_key, parent_ifindex;
+ const char *iface;
+
+ if (!nm_connection_is_type (connection, NM_SETTING_INFINIBAND_SETTING_NAME))
+ return NULL;
+
+ g_return_val_if_fail (NM_IS_DEVICE_INFINIBAND (parent), NULL);
+
+ s_infiniband = nm_connection_get_setting_infiniband (connection);
+
+ iface = nm_setting_infiniband_get_virtual_interface_name (s_infiniband);
+ g_return_val_if_fail (iface != NULL, NULL);
+
+ parent_ifindex = nm_device_get_ifindex (parent);
+ 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;
+ }
+
+ 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);
+}
+
+DEFINE_DEVICE_FACTORY_INTERNAL(INFINIBAND, Infiniband, infiniband, \
+ factory_iface->new_link = new_link; \
+ factory_iface->create_virtual_device_for_connection = create_virtual_device_for_connection;
+ )
+
diff --git a/src/devices/nm-device-infiniband.h b/src/devices/nm-device-infiniband.h
index 45dc1ab6a..b81b762ad 100644
--- a/src/devices/nm-device-infiniband.h
+++ b/src/devices/nm-device-infiniband.h
@@ -18,8 +18,8 @@
* Copyright 2011 Red Hat, Inc.
*/
-#ifndef NM_DEVICE_INFINIBAND_H
-#define NM_DEVICE_INFINIBAND_H
+#ifndef __NETWORKMANAGER_DEVICE_INFINIBAND_H__
+#define __NETWORKMANAGER_DEVICE_INFINIBAND_H__
#include <glib-object.h>
@@ -34,28 +34,11 @@ G_BEGIN_DECLS
#define NM_IS_DEVICE_INFINIBAND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_INFINIBAND))
#define NM_DEVICE_INFINIBAND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_INFINIBAND, NMDeviceInfinibandClass))
-typedef enum {
- NM_INFINIBAND_ERROR_CONNECTION_NOT_INFINIBAND = 0, /*< nick=ConnectionNotInfiniband >*/
- NM_INFINIBAND_ERROR_CONNECTION_INVALID, /*< nick=ConnectionInvalid >*/
- NM_INFINIBAND_ERROR_CONNECTION_INCOMPATIBLE, /*< nick=ConnectionIncompatible >*/
-} NMInfinibandError;
-
-typedef struct {
- NMDevice parent;
-} NMDeviceInfiniband;
-
-typedef struct {
- NMDeviceClass parent;
-
-} NMDeviceInfinibandClass;
-
+typedef NMDevice NMDeviceInfiniband;
+typedef NMDeviceClass NMDeviceInfinibandClass;
GType nm_device_infiniband_get_type (void);
-NMDevice *nm_device_infiniband_new (NMPlatformLink *platform_device);
-NMDevice *nm_device_infiniband_new_partition (NMConnection *connection,
- NMDevice *parent);
-
G_END_DECLS
#endif /* NM_DEVICE_INFINIBAND_H */
diff --git a/src/devices/nm-device-logging.h b/src/devices/nm-device-logging.h
new file mode 100644
index 000000000..acca32e55
--- /dev/null
+++ b/src/devices/nm-device-logging.h
@@ -0,0 +1,46 @@
+/* -*- 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.
+ */
+
+#ifndef __NETWORKMANAGER_DEVICE_LOGGING_H__
+#define __NETWORKMANAGER_DEVICE_LOGGING_H__
+
+#include "nm-logging.h"
+#include "nm-device.h"
+
+#define _LOG_DECLARE_SELF(t) \
+inline static NMDevice * \
+_nm_device_log_self_to_device (t *self) \
+{ \
+ return (NMDevice *) self; \
+}
+
+#define _LOG(level, domain, ...) \
+ nm_log_obj ((level), (domain), (self), \
+ "(%s): " _NM_UTILS_MACRO_FIRST(__VA_ARGS__), \
+ (self) ? str_if_set (nm_device_get_iface (_nm_device_log_self_to_device (self)), "(null)") : "(none)" \
+ _NM_UTILS_MACRO_REST(__VA_ARGS__))
+
+#define _LOGT(domain, ...) _LOG (LOGL_TRACE, domain, __VA_ARGS__)
+#define _LOGD(domain, ...) _LOG (LOGL_DEBUG, domain, __VA_ARGS__)
+#define _LOGI(domain, ...) _LOG (LOGL_INFO, domain, __VA_ARGS__)
+#define _LOGW(domain, ...) _LOG (LOGL_WARN, domain, __VA_ARGS__)
+#define _LOGE(domain, ...) _LOG (LOGL_ERR, domain, __VA_ARGS__)
+
+#endif /* __NETWORKMANAGER_DEVICE_LOGGING_H__ */
diff --git a/src/devices/nm-device-macvlan.c b/src/devices/nm-device-macvlan.c
index 22848fe78..bcd386177 100644
--- a/src/devices/nm-device-macvlan.c
+++ b/src/devices/nm-device-macvlan.c
@@ -28,9 +28,13 @@
#include "nm-logging.h"
#include "nm-manager.h"
#include "nm-platform.h"
+#include "nm-device-factory.h"
#include "nm-device-macvlan-glue.h"
+#include "nm-device-logging.h"
+_LOG_DECLARE_SELF(NMDeviceMacvlan);
+
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))
@@ -55,13 +59,13 @@ enum {
static void
update_properties (NMDevice *device)
{
+ NMDeviceMacvlan *self = NM_DEVICE_MACVLAN (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));
+ _LOGW (LOGD_HW, "could not read macvlan properties");
return;
}
@@ -88,18 +92,6 @@ link_changed (NMDevice *device, NMPlatformLink *info)
/**************************************************************/
-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)
{
@@ -153,29 +145,49 @@ nm_device_macvlan_class_init (NMDeviceMacvlanClass *klass)
/* properties */
g_object_class_install_property
(object_class, PROP_PARENT,
- g_param_spec_boxed (NM_DEVICE_MACVLAN_PARENT,
- "Parent",
- "Parent device",
+ g_param_spec_boxed (NM_DEVICE_MACVLAN_PARENT, "", "",
DBUS_TYPE_G_OBJECT_PATH,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_MODE,
- g_param_spec_string (NM_DEVICE_MACVLAN_MODE,
- "Mode",
- "Mode: 'private', 'vepa', 'bridge', or 'passthru'",
+ g_param_spec_string (NM_DEVICE_MACVLAN_MODE, "", "",
NULL,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_NO_PROMISC,
- g_param_spec_boolean (NM_DEVICE_MACVLAN_NO_PROMISC,
- "No-promisc",
- "No promiscuous mode",
+ g_param_spec_boolean (NM_DEVICE_MACVLAN_NO_PROMISC, "", "",
FALSE,
- G_PARAM_READABLE));
+ 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_macvlan_object_info);
}
+
+/*************************************************************/
+
+#define NM_TYPE_MACVLAN_FACTORY (nm_macvlan_factory_get_type ())
+#define NM_MACVLAN_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_MACVLAN_FACTORY, NMMacvlanFactory))
+
+static NMDevice *
+new_link (NMDeviceFactory *factory, NMPlatformLink *plink, GError **error)
+{
+ if (plink->type == NM_LINK_TYPE_MACVLAN || plink->type == NM_LINK_TYPE_MACVTAP) {
+ return (NMDevice *) g_object_new (NM_TYPE_DEVICE_MACVLAN,
+ NM_DEVICE_PLATFORM_DEVICE, plink,
+ NM_DEVICE_TYPE_DESC, "Macvlan",
+ NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_GENERIC,
+ NULL);
+ }
+ return NULL;
+}
+
+DEFINE_DEVICE_FACTORY_INTERNAL_WITH_DEVTYPE(MACVLAN, Macvlan, macvlan, ETHERNET, \
+ factory_iface->new_link = new_link; \
+ )
+
diff --git a/src/devices/nm-device-macvlan.h b/src/devices/nm-device-macvlan.h
index 348ed2f96..24f15437c 100644
--- a/src/devices/nm-device-macvlan.h
+++ b/src/devices/nm-device-macvlan.h
@@ -18,8 +18,8 @@
* Copyright 2013 Red Hat, Inc.
*/
-#ifndef NM_DEVICE_MACVLAN_H
-#define NM_DEVICE_MACVLAN_H
+#ifndef __NETWORKMANAGER_DEVICE_MACVLAN_H__
+#define __NETWORKMANAGER_DEVICE_MACVLAN_H__
#include <glib-object.h>
@@ -38,19 +38,11 @@ G_BEGIN_DECLS
#define NM_DEVICE_MACVLAN_MODE "mode"
#define NM_DEVICE_MACVLAN_NO_PROMISC "no-promisc"
-typedef struct {
- NMDeviceGeneric parent;
-} NMDeviceMacvlan;
-
-typedef struct {
- NMDeviceGenericClass parent;
-
-} NMDeviceMacvlanClass;
+typedef NMDeviceGeneric NMDeviceMacvlan;
+typedef NMDeviceGenericClass 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/devices/nm-device-private.h b/src/devices/nm-device-private.h
index 24bb0b336..65a9a71af 100644
--- a/src/devices/nm-device-private.h
+++ b/src/devices/nm-device-private.h
@@ -19,8 +19,8 @@
* Copyright (C) 2007 - 2011 Red Hat, Inc.
*/
-#ifndef NM_DEVICE_PRIVATE_H
-#define NM_DEVICE_PRIVATE_H
+#ifndef __NETWORKMANAGER_DEVICE_PRIVATE_H__
+#define __NETWORKMANAGER_DEVICE_PRIVATE_H__
#include "nm-device.h"
@@ -37,8 +37,9 @@ enum NMActStageReturn {
};
#define NM_DEVICE_CAP_NONSTANDARD_CARRIER 0x80000000
+#define NM_DEVICE_CAP_IS_NON_KERNEL 0x40000000
-#define NM_DEVICE_CAP_INTERNAL_MASK 0x80000000
+#define NM_DEVICE_CAP_INTERNAL_MASK 0xc0000000
void nm_device_set_ip_iface (NMDevice *self, const char *iface);
@@ -52,12 +53,9 @@ gboolean nm_device_bring_up (NMDevice *self, gboolean wait, gboolean *no_firmwar
void nm_device_take_down (NMDevice *self, gboolean block);
-gboolean nm_device_update_hw_address (NMDevice *self);
-gboolean nm_device_set_hw_addr (NMDevice *device, const guint8 *addr,
+gboolean nm_device_set_hw_addr (NMDevice *device, const char *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);
void nm_device_activate_schedule_stage1_device_prepare (NMDevice *device);
@@ -76,7 +74,7 @@ gboolean nm_device_activate_ip6_state_in_conf (NMDevice *device);
gboolean nm_device_activate_ip6_state_in_wait (NMDevice *device);
void nm_device_set_dhcp_timeout (NMDevice *device, guint32 timeout);
-void nm_device_set_dhcp_anycast_address (NMDevice *device, guint8 *addr);
+void nm_device_set_dhcp_anycast_address (NMDevice *device, const char *addr);
gboolean nm_device_dhcp4_renew (NMDevice *device, gboolean release);
gboolean nm_device_dhcp6_renew (NMDevice *device, gboolean release);
@@ -91,12 +89,17 @@ 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,
+void nm_device_master_check_slave_physical_port (NMDevice *self, NMDevice *slave,
guint64 log_domain);
-void nm_device_set_carrier (NMDevice *device, gboolean carrier);
+void nm_device_set_carrier (NMDevice *self, gboolean carrier);
void nm_device_emit_recheck_auto_activate (NMDevice *device);
void nm_device_queue_recheck_assume (NMDevice *device);
+void nm_device_set_wwan_ip4_config (NMDevice *device, NMIP4Config *config);
+void nm_device_set_wwan_ip6_config (NMDevice *device, NMIP6Config *config);
+
+gboolean nm_device_ipv6_sysctl_set (NMDevice *self, const char *property, const char *value);
+
#endif /* NM_DEVICE_PRIVATE_H */
diff --git a/src/devices/nm-device-tun.c b/src/devices/nm-device-tun.c
index d52228f99..9a3fab5ec 100644
--- a/src/devices/nm-device-tun.c
+++ b/src/devices/nm-device-tun.c
@@ -28,9 +28,13 @@
#include "nm-dbus-manager.h"
#include "nm-logging.h"
#include "nm-platform.h"
+#include "nm-device-factory.h"
#include "nm-device-tun-glue.h"
+#include "nm-device-logging.h"
+_LOG_DECLARE_SELF(NMDeviceTun);
+
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))
@@ -55,15 +59,14 @@ enum {
};
static void
-reload_tun_properties (NMDeviceTun *device)
+reload_tun_properties (NMDeviceTun *self)
{
- NMDeviceTunPrivate *priv = NM_DEVICE_TUN_GET_PRIVATE (device);
- GObject *object = G_OBJECT (device);
+ NMDeviceTunPrivate *priv = NM_DEVICE_TUN_GET_PRIVATE (self);
+ GObject *object = G_OBJECT (self);
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)));
+ if (!nm_platform_tun_get_properties (nm_device_get_ifindex (NM_DEVICE (self)), &props)) {
+ _LOGD (LOGD_HW, "could not read tun properties");
return;
}
@@ -108,27 +111,6 @@ delay_tun_get_properties_cb (gpointer user_data)
/**************************************************************/
-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)
{
@@ -137,18 +119,18 @@ nm_device_tun_init (NMDeviceTun *self)
static void
constructed (GObject *object)
{
+ NMDeviceTun *self = NM_DEVICE_TUN (object);
gboolean properties_read;
- NMDeviceTunPrivate *priv = NM_DEVICE_TUN_GET_PRIVATE (object);
+ NMDeviceTunPrivate *priv = NM_DEVICE_TUN_GET_PRIVATE (self);
- properties_read = nm_platform_tun_get_properties (nm_device_get_ifindex (NM_DEVICE (object)), &priv->props);
+ properties_read = nm_platform_tun_get_properties (nm_device_get_ifindex (NM_DEVICE (self)), &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);
+ _LOGD (LOGD_HW, "could not read tun properties (retry)");
+ priv->delay_tun_get_properties_id = g_timeout_add_seconds (1, delay_tun_get_properties_cb, self);
}
}
@@ -174,10 +156,10 @@ get_property (GObject *object, guint prop_id,
switch (prop_id) {
case PROP_OWNER:
- g_value_set_uint (value, priv->props.owner);
+ g_value_set_int64 (value, priv->props.owner);
break;
case PROP_GROUP:
- g_value_set_uint (value, priv->props.group);
+ g_value_set_int64 (value, priv->props.group);
break;
case PROP_MODE:
g_value_set_string (value, priv->mode);
@@ -242,49 +224,37 @@ nm_device_tun_class_init (NMDeviceTunClass *klass)
/* properties */
g_object_class_install_property
(object_class, PROP_OWNER,
- g_param_spec_int64 (NM_DEVICE_TUN_OWNER,
- "Owner",
- "Owner",
+ g_param_spec_int64 (NM_DEVICE_TUN_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",
+ g_param_spec_int64 (NM_DEVICE_TUN_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",
+ g_param_spec_string (NM_DEVICE_TUN_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_param_spec_boolean (NM_DEVICE_TUN_NO_PI, "", "",
+ 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",
+ g_param_spec_boolean (NM_DEVICE_TUN_VNET_HDR, "", "",
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",
+ g_param_spec_boolean (NM_DEVICE_TUN_MULTI_QUEUE, "", "",
FALSE,
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
@@ -292,3 +262,34 @@ nm_device_tun_class_init (NMDeviceTunClass *klass)
G_TYPE_FROM_CLASS (klass),
&dbus_glib_nm_device_tun_object_info);
}
+
+
+/*************************************************************/
+
+#define NM_TYPE_TUN_FACTORY (nm_tun_factory_get_type ())
+#define NM_TUN_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_TUN_FACTORY, NMTunFactory))
+
+static NMDevice *
+new_link (NMDeviceFactory *factory, NMPlatformLink *plink, GError **error)
+{
+ const char *mode = NULL;
+
+ if (plink->type == NM_LINK_TYPE_TUN)
+ mode = "tun";
+ else if (plink->type == NM_LINK_TYPE_TAP)
+ mode = "tap";
+ else
+ return NULL;
+
+ return (NMDevice *) g_object_new (NM_TYPE_DEVICE_TUN,
+ NM_DEVICE_PLATFORM_DEVICE, plink,
+ NM_DEVICE_TYPE_DESC, "Tun",
+ NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_GENERIC,
+ NM_DEVICE_TUN_MODE, mode,
+ NULL);
+}
+
+DEFINE_DEVICE_FACTORY_INTERNAL_WITH_DEVTYPE(TUN, Tun, tun, GENERIC, \
+ factory_iface->new_link = new_link; \
+ )
+
diff --git a/src/devices/nm-device-tun.h b/src/devices/nm-device-tun.h
index cfcf4d7be..393c58018 100644
--- a/src/devices/nm-device-tun.h
+++ b/src/devices/nm-device-tun.h
@@ -18,8 +18,8 @@
* Copyright 2013 Red Hat, Inc.
*/
-#ifndef NM_DEVICE_TUN_H
-#define NM_DEVICE_TUN_H
+#ifndef __NETWORKMANAGER_DEVICE_TUN_H__
+#define __NETWORKMANAGER_DEVICE_TUN_H__
#include <glib-object.h>
@@ -41,19 +41,11 @@ G_BEGIN_DECLS
#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;
+typedef NMDeviceGeneric NMDeviceTun;
+typedef NMDeviceGenericClass 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
index df1075238..db29c00d2 100644
--- a/src/devices/nm-device-veth.c
+++ b/src/devices/nm-device-veth.c
@@ -33,9 +33,13 @@
#include "nm-manager.h"
#include "nm-platform.h"
#include "nm-dbus-manager.h"
+#include "nm-device-factory.h"
#include "nm-device-veth-glue.h"
+#include "nm-device-logging.h"
+_LOG_DECLARE_SELF(NMDeviceVeth);
+
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))
@@ -79,8 +83,7 @@ get_peer (NMDeviceVeth *self)
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));
+ _LOGW (LOGD_HW, "could not read veth properties");
return NULL;
}
@@ -96,18 +99,6 @@ get_peer (NMDeviceVeth *self)
/**************************************************************/
-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)
{
@@ -159,13 +150,35 @@ nm_device_veth_class_init (NMDeviceVethClass *klass)
/* properties */
g_object_class_install_property
(object_class, PROP_PEER,
- g_param_spec_boxed (NM_DEVICE_VETH_PEER,
- "Peer",
- "Peer device",
+ g_param_spec_boxed (NM_DEVICE_VETH_PEER, "", "",
DBUS_TYPE_G_OBJECT_PATH,
- G_PARAM_READABLE));
+ 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_veth_object_info);
}
+
+/*************************************************************/
+
+#define NM_TYPE_VETH_FACTORY (nm_veth_factory_get_type ())
+#define NM_VETH_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_VETH_FACTORY, NMVethFactory))
+
+static NMDevice *
+new_link (NMDeviceFactory *factory, NMPlatformLink *plink, GError **error)
+{
+ if (plink->type == NM_LINK_TYPE_VETH) {
+ return (NMDevice *) g_object_new (NM_TYPE_DEVICE_VETH,
+ NM_DEVICE_PLATFORM_DEVICE, plink,
+ NM_DEVICE_TYPE_DESC, "Veth",
+ NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_ETHERNET,
+ NULL);
+ }
+ return NULL;
+}
+
+DEFINE_DEVICE_FACTORY_INTERNAL_WITH_DEVTYPE(VETH, Veth, veth, ETHERNET, \
+ factory_iface->new_link = new_link; \
+ )
+
diff --git a/src/devices/nm-device-veth.h b/src/devices/nm-device-veth.h
index bc8fedffd..51e8db45e 100644
--- a/src/devices/nm-device-veth.h
+++ b/src/devices/nm-device-veth.h
@@ -18,8 +18,8 @@
* Copyright 2013 Red Hat, Inc.
*/
-#ifndef NM_DEVICE_VETH_H
-#define NM_DEVICE_VETH_H
+#ifndef __NETWORKMANAGER_DEVICE_VETH_H__
+#define __NETWORKMANAGER_DEVICE_VETH_H__
#include <glib-object.h>
@@ -36,19 +36,11 @@ G_BEGIN_DECLS
#define NM_DEVICE_VETH_PEER "peer"
-typedef struct {
- NMDeviceEthernet parent;
-} NMDeviceVeth;
-
-typedef struct {
- NMDeviceEthernetClass parent;
-
-} NMDeviceVethClass;
+typedef NMDeviceEthernet NMDeviceVeth;
+typedef NMDeviceEthernetClass 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
index 348be3528..c69bcdedd 100644
--- a/src/devices/nm-device-vlan.c
+++ b/src/devices/nm-device-vlan.c
@@ -24,8 +24,6 @@
#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"
@@ -35,20 +33,25 @@
#include "nm-device-private.h"
#include "nm-enum-types.h"
#include "nm-dbus-manager.h"
+#include "nm-connection-provider.h"
+#include "nm-activation-request.h"
+#include "nm-ip4-config.h"
#include "nm-platform.h"
-#include "nm-utils.h"
+#include "nm-device-factory.h"
+#include "nm-manager.h"
+#include "nm-core-internal.h"
#include "nm-device-vlan-glue.h"
+#include "nm-device-logging.h"
+_LOG_DECLARE_SELF(NMDeviceVlan);
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];
+ char *initial_hw_addr;
gboolean disposed;
gboolean invalid;
@@ -64,35 +67,21 @@ enum {
PROP_PARENT,
PROP_VLAN_ID,
+ PROP_INT_PARENT_DEVICE,
+
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);
+ priv->initial_hw_addr = g_strdup (nm_device_get_hw_address (dev));
+ _LOGD (LOGD_DEVICE | LOGD_VLAN, "read initial MAC address %s", priv->initial_hw_addr);
}
static guint32
@@ -156,22 +145,20 @@ 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;
+ const char *setting_mac;
+ const char *device_mac;
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)
+ setting_mac = nm_setting_wired_get_mac_address (s_wired);
+ if (!setting_mac)
return !fail_if_no_hwaddr;
- device_mac = nm_device_get_hw_address (device, &device_mac_len);
+ device_mac = nm_device_get_hw_address (device);
- return ( mac->len == device_mac_len
- && memcmp (mac->data, device_mac, device_mac_len) == 0);
+ return nm_utils_hwaddr_matches (setting_mac, -1, device_mac, -1);
}
static gboolean
@@ -206,7 +193,7 @@ check_connection_compatible (NMDevice *device, NMConnection *connection)
* since both the parent interface and the VLAN ID matched by the time we
* get here.
*/
- iface = nm_connection_get_virtual_iface_name (connection);
+ iface = nm_connection_get_interface_name (connection);
if (iface) {
if (g_strcmp0 (nm_device_get_ip_iface (device), iface) != 0)
return FALSE;
@@ -227,13 +214,14 @@ complete_connection (NMDevice *device,
nm_utils_complete_generic (connection,
NM_SETTING_VLAN_SETTING_NAME,
existing_connections,
- _("VLAN connection %d"),
+ NULL,
+ _("VLAN connection"),
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,
+ g_set_error_literal (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_INVALID_CONNECTION,
"A 'vlan' setting is required.");
return FALSE;
}
@@ -243,7 +231,7 @@ complete_connection (NMDevice *device,
*/
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,
+ g_set_error_literal (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_INVALID_CONNECTION,
"The 'vlan' setting had no interface name, parent, or hardware address.");
return FALSE;
}
@@ -280,6 +268,7 @@ nm_device_vlan_set_parent (NMDeviceVlan *device, NMDevice *parent)
static void
update_connection (NMDevice *device, NMConnection *connection)
{
+ NMDeviceVlan *self = NM_DEVICE_VLAN (device);
NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (device);
NMSettingVlan *s_vlan = nm_connection_get_setting_vlan (connection);
int ifindex = nm_device_get_ifindex (device);
@@ -290,12 +279,10 @@ update_connection (NMDevice *device, NMConnection *connection)
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));
+ _LOGW (LOGD_VLAN, "failed to get VLAN interface info while updating connection.");
return;
}
@@ -334,7 +321,7 @@ act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
NMConnection *connection;
NMSettingVlan *s_vlan;
NMSettingWired *s_wired;
- const GByteArray *cloned_mac;
+ const char *cloned_mac;
NMActStageReturn ret;
g_return_val_if_fail (reason != NULL, NM_ACT_STAGE_RETURN_FAILURE);
@@ -353,8 +340,8 @@ act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
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);
+ if (cloned_mac)
+ nm_device_set_hw_addr (dev, cloned_mac, "set", LOGD_VLAN);
}
s_vlan = nm_connection_get_setting_vlan (connection);
@@ -392,7 +379,7 @@ ip4_config_pre_commit (NMDevice *device, NMIP4Config *config)
if (s_wired) {
mtu = nm_setting_wired_get_mtu (s_wired);
if (mtu)
- nm_ip4_config_set_mtu (config, mtu);
+ nm_ip4_config_set_mtu (config, mtu, NM_IP_CONFIG_SOURCE_USER);
}
}
@@ -403,7 +390,8 @@ deactivate (NMDevice *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);
+ if (priv->initial_hw_addr)
+ nm_device_set_hw_addr (device, priv->initial_hw_addr, "reset", LOGD_VLAN);
}
/******************************************************************/
@@ -421,89 +409,11 @@ parent_state_changed (NMDevice *parent,
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);
- }
+ nm_device_set_unmanaged (NM_DEVICE (self), NM_UNMANAGED_PARENT, !nm_device_get_managed (parent), 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)
{
@@ -512,10 +422,9 @@ 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);
+ NMDeviceVlan *self = NM_DEVICE_VLAN (object);
+ NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (self);
+ int ifindex = nm_device_get_ifindex (NM_DEVICE (self));
int parent_ifindex = -1, itype;
int vlan_id;
@@ -523,20 +432,20 @@ constructed (GObject *object)
G_OBJECT_CLASS (nm_device_vlan_parent_class)->constructed (object);
if (!priv->parent) {
- nm_log_err (LOGD_VLAN, "(%s): no parent specified.", iface);
+ _LOGE (LOGD_VLAN, "no parent specified.");
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);
+ _LOGE (LOGD_VLAN, "failed to get VLAN interface type.");
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);
+ _LOGW (LOGD_VLAN, "failed to get VLAN interface info.");
priv->invalid = TRUE;
return;
}
@@ -544,16 +453,15 @@ constructed (GObject *object)
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);
+ _LOGW (LOGD_VLAN, "VLAN parent ifindex (%d) or VLAN ID (%d) invalid.",
+ 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));
+ _LOGI (LOGD_HW | LOGD_VLAN, "VLAN ID %d with parent %s",
+ priv->vlan_id, nm_device_get_iface (priv->parent));
}
static void
@@ -563,6 +471,12 @@ get_property (GObject *object, guint prop_id,
NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (object);
switch (prop_id) {
+ case PROP_PARENT:
+ g_value_set_boxed (value, priv->parent ? nm_device_get_path (priv->parent) : "/");
+ break;
+ case PROP_INT_PARENT_DEVICE:
+ g_value_set_object (value, priv->parent);
+ break;
case PROP_VLAN_ID:
g_value_set_uint (value, priv->vlan_id);
break;
@@ -579,7 +493,7 @@ set_property (GObject *object, guint prop_id,
NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (object);
switch (prop_id) {
- case PROP_PARENT:
+ case PROP_INT_PARENT_DEVICE:
nm_device_vlan_set_parent (NM_DEVICE_VLAN (object), g_value_get_object (value));
break;
case PROP_VLAN_ID:
@@ -609,6 +523,17 @@ dispose (GObject *object)
}
static void
+finalize (GObject *object)
+{
+ NMDeviceVlan *self = NM_DEVICE_VLAN (object);
+ NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (self);
+
+ g_free (priv->initial_hw_addr);
+
+ G_OBJECT_CLASS (nm_device_vlan_parent_class)->finalize (object);
+}
+
+static void
nm_device_vlan_class_init (NMDeviceVlanClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
@@ -623,6 +548,7 @@ nm_device_vlan_class_init (NMDeviceVlanClass *klass)
object_class->get_property = get_property;
object_class->set_property = set_property;
object_class->dispose = dispose;
+ object_class->finalize = finalize;
parent_class->update_initial_hw_address = update_initial_hw_address;
parent_class->get_generic_capabilities = get_generic_capabilities;
@@ -638,22 +564,137 @@ nm_device_vlan_class_init (NMDeviceVlanClass *klass)
/* 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_param_spec_boxed (NM_DEVICE_VLAN_PARENT, "", "",
+ DBUS_TYPE_G_OBJECT_PATH,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_VLAN_ID,
- g_param_spec_uint (NM_DEVICE_VLAN_ID,
- "VLAN ID",
- "VLAN ID",
+ g_param_spec_uint (NM_DEVICE_VLAN_ID, "", "",
0, 4095, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+
+ /* Internal properties */
+ g_object_class_install_property
+ (object_class, PROP_INT_PARENT_DEVICE,
+ g_param_spec_object (NM_DEVICE_VLAN_INT_PARENT_DEVICE, "", "",
+ NM_TYPE_DEVICE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
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);
+#define NM_TYPE_VLAN_FACTORY (nm_vlan_factory_get_type ())
+#define NM_VLAN_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_VLAN_FACTORY, NMVlanFactory))
+
+static NMDevice *
+new_link (NMDeviceFactory *factory, NMPlatformLink *plink, GError **error)
+{
+ int parent_ifindex = -1;
+ NMDevice *parent, *device;
+
+ if (plink->type != NM_LINK_TYPE_VLAN)
+ return NULL;
+
+ /* Have to find the parent device */
+ if (!nm_platform_vlan_get_info (plink->ifindex, &parent_ifindex, NULL)) {
+ nm_log_err (LOGD_HW, "(%s): failed to get VLAN parent ifindex", plink->name);
+ return NULL;
+ }
+
+ parent = nm_manager_get_device_by_ifindex (nm_manager_get (), parent_ifindex);
+ if (!parent) {
+ /* 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", plink->name);
+ return NULL;
+ }
+
+ device = (NMDevice *) g_object_new (NM_TYPE_DEVICE_VLAN,
+ NM_DEVICE_PLATFORM_DEVICE, plink,
+ NM_DEVICE_VLAN_INT_PARENT_DEVICE, 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;
+ }
+
+ /* Set initial parent-dependent unmanaged flag */
+ if (device)
+ nm_device_set_initial_unmanaged_flag (device, NM_UNMANAGED_PARENT, !nm_device_get_managed (parent));
+
+ return device;
}
+
+static NMDevice *
+create_virtual_device_for_connection (NMDeviceFactory *factory,
+ NMConnection *connection,
+ NMDevice *parent,
+ GError **error)
+{
+ NMDevice *device;
+ NMSettingVlan *s_vlan;
+ char *iface;
+
+ if (!nm_connection_is_type (connection, NM_SETTING_VLAN_SETTING_NAME))
+ return 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_interface_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_INT_PARENT_DEVICE, 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;
+ }
+
+ /* Set initial parent-dependent unmanaged flag */
+ if (device)
+ nm_device_set_initial_unmanaged_flag (device, NM_UNMANAGED_PARENT, !nm_device_get_managed (parent));
+
+ return device;
+}
+
+DEFINE_DEVICE_FACTORY_INTERNAL(VLAN, Vlan, vlan, \
+ factory_iface->new_link = new_link; \
+ factory_iface->create_virtual_device_for_connection = create_virtual_device_for_connection;
+ )
+
diff --git a/src/devices/nm-device-vlan.h b/src/devices/nm-device-vlan.h
index 0f2ac70d5..20fc34537 100644
--- a/src/devices/nm-device-vlan.h
+++ b/src/devices/nm-device-vlan.h
@@ -18,8 +18,8 @@
* Copyright 2012 Red Hat, Inc.
*/
-#ifndef NM_DEVICE_VLAN_H
-#define NM_DEVICE_VLAN_H
+#ifndef __NETWORKMANAGER_DEVICE_VLAN_H__
+#define __NETWORKMANAGER_DEVICE_VLAN_H__
#include <glib-object.h>
@@ -40,26 +40,18 @@ typedef enum {
NM_VLAN_ERROR_CONNECTION_INCOMPATIBLE, /*< nick=ConnectionIncompatible >*/
} NMVlanError;
+/* D-Bus exported properties */
#define NM_DEVICE_VLAN_PARENT "parent"
#define NM_DEVICE_VLAN_ID "vlan-id"
-typedef struct {
- NMDevice parent;
-} NMDeviceVlan;
-
-typedef struct {
- NMDeviceClass parent;
-
-} NMDeviceVlanClass;
+/* Internal non-exported properties */
+#define NM_DEVICE_VLAN_INT_PARENT_DEVICE "int-parent-device"
+typedef NMDevice NMDeviceVlan;
+typedef NMDeviceClass NMDeviceVlanClass;
GType nm_device_vlan_get_type (void);
-NMDevice *nm_device_vlan_new (NMPlatformLink *platform_link,
- NMDevice *parent);
-NMDevice *nm_device_vlan_new_for_connection (NMConnection *connection,
- NMDevice *parent);
-
G_END_DECLS
#endif /* NM_DEVICE_VLAN_H */
diff --git a/src/devices/nm-device-vxlan.c b/src/devices/nm-device-vxlan.c
index 0be57106e..ed6b8fa05 100644
--- a/src/devices/nm-device-vxlan.c
+++ b/src/devices/nm-device-vxlan.c
@@ -29,9 +29,13 @@
#include "nm-manager.h"
#include "nm-platform.h"
#include "nm-utils.h"
+#include "nm-device-factory.h"
#include "nm-device-vxlan-glue.h"
+#include "nm-device-logging.h"
+_LOG_DECLARE_SELF(NMDeviceVxlan);
+
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))
@@ -67,13 +71,13 @@ enum {
static void
update_properties (NMDevice *device)
{
+ NMDeviceVxlan *self = NM_DEVICE_VXLAN (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));
+ _LOGW (LOGD_HW, "could not read vxlan properties");
return;
}
@@ -130,18 +134,6 @@ link_changed (NMDevice *device, NMPlatformLink *info)
/**************************************************************/
-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)
{
@@ -240,133 +232,140 @@ nm_device_vxlan_class_init (NMDeviceVxlanClass *klass)
/* properties */
g_object_class_install_property
(object_class, PROP_PARENT,
- g_param_spec_boxed (NM_DEVICE_VXLAN_PARENT,
- "Parent",
- "Parent device",
+ g_param_spec_boxed (NM_DEVICE_VXLAN_PARENT, "", "",
DBUS_TYPE_G_OBJECT_PATH,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_ID,
- g_param_spec_uint (NM_DEVICE_VXLAN_ID,
- "Id",
- "Id",
+ g_param_spec_uint (NM_DEVICE_VXLAN_ID, "", "",
0, G_MAXUINT32, 0,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_GROUP,
- g_param_spec_string (NM_DEVICE_VXLAN_GROUP,
- "Group",
- "Group",
+ g_param_spec_string (NM_DEVICE_VXLAN_GROUP, "", "",
NULL,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_LOCAL,
- g_param_spec_string (NM_DEVICE_VXLAN_LOCAL,
- "Local",
- "Local",
+ g_param_spec_string (NM_DEVICE_VXLAN_LOCAL, "", "",
NULL,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_TOS,
- g_param_spec_uchar (NM_DEVICE_VXLAN_TOS,
- "ToS",
- "ToS",
+ g_param_spec_uchar (NM_DEVICE_VXLAN_TOS, "", "",
0, 255, 0,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_TTL,
- g_param_spec_uchar (NM_DEVICE_VXLAN_TTL,
- "TTL",
- "TTL",
+ g_param_spec_uchar (NM_DEVICE_VXLAN_TTL, "", "",
0, 255, 0,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_LEARNING,
- g_param_spec_boolean (NM_DEVICE_VXLAN_LEARNING,
- "Learning",
- "Learning",
+ g_param_spec_boolean (NM_DEVICE_VXLAN_LEARNING, "", "",
FALSE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_AGEING,
- g_param_spec_uint (NM_DEVICE_VXLAN_AGEING,
- "Ageing",
- "Ageing",
+ g_param_spec_uint (NM_DEVICE_VXLAN_AGEING, "", "",
0, G_MAXUINT32, 0,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_LIMIT,
- g_param_spec_uint (NM_DEVICE_VXLAN_LIMIT,
- "Limit",
- "Limit",
+ g_param_spec_uint (NM_DEVICE_VXLAN_LIMIT, "", "",
0, G_MAXUINT32, 0,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_DST_PORT,
- g_param_spec_uint (NM_DEVICE_VXLAN_DST_PORT,
- "Destination port",
- "Destination port",
+ g_param_spec_uint (NM_DEVICE_VXLAN_DST_PORT, "", "",
0, 65535, 0,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
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",
+ g_param_spec_uint (NM_DEVICE_VXLAN_SRC_PORT_MIN, "", "",
0, 65535, 0,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
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",
+ g_param_spec_uint (NM_DEVICE_VXLAN_SRC_PORT_MAX, "", "",
0, 65535, 0,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_PROXY,
- g_param_spec_boolean (NM_DEVICE_VXLAN_PROXY,
- "Proxy",
- "Proxy",
+ g_param_spec_boolean (NM_DEVICE_VXLAN_PROXY, "", "",
FALSE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_RSC,
- g_param_spec_boolean (NM_DEVICE_VXLAN_RSC,
- "RSC",
- "RSC",
+ g_param_spec_boolean (NM_DEVICE_VXLAN_RSC, "", "",
FALSE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_L2MISS,
- g_param_spec_boolean (NM_DEVICE_VXLAN_L2MISS,
- "L2miss",
- "L2miss",
+ g_param_spec_boolean (NM_DEVICE_VXLAN_L2MISS, "", "",
FALSE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_L3MISS,
- g_param_spec_boolean (NM_DEVICE_VXLAN_L3MISS,
- "L3miss",
- "L3miss",
+ g_param_spec_boolean (NM_DEVICE_VXLAN_L3MISS, "", "",
FALSE,
- G_PARAM_READABLE));
+ 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_vxlan_object_info);
}
+
+/*************************************************************/
+
+#define NM_TYPE_VXLAN_FACTORY (nm_vxlan_factory_get_type ())
+#define NM_VXLAN_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_VXLAN_FACTORY, NMVxlanFactory))
+
+static NMDevice *
+new_link (NMDeviceFactory *factory, NMPlatformLink *plink, GError **error)
+{
+ if (plink->type == NM_LINK_TYPE_VXLAN) {
+ return (NMDevice *) g_object_new (NM_TYPE_DEVICE_VXLAN,
+ NM_DEVICE_PLATFORM_DEVICE, plink,
+ NM_DEVICE_TYPE_DESC, "Vxlan",
+ NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_GENERIC,
+ NULL);
+ }
+ return NULL;
+}
+
+DEFINE_DEVICE_FACTORY_INTERNAL_WITH_DEVTYPE(VXLAN, Vxlan, vxlan, GENERIC, \
+ factory_iface->new_link = new_link; \
+ )
+
diff --git a/src/devices/nm-device-vxlan.h b/src/devices/nm-device-vxlan.h
index 14b158ded..cc6081e65 100644
--- a/src/devices/nm-device-vxlan.h
+++ b/src/devices/nm-device-vxlan.h
@@ -18,8 +18,8 @@
* Copyright 2013, 2014 Red Hat, Inc.
*/
-#ifndef NM_DEVICE_VXLAN_H
-#define NM_DEVICE_VXLAN_H
+#ifndef __NETWORKMANAGER_DEVICE_VXLAN_H__
+#define __NETWORKMANAGER_DEVICE_VXLAN_H__
#include <glib-object.h>
@@ -51,19 +51,11 @@ G_BEGIN_DECLS
#define NM_DEVICE_VXLAN_L2MISS "l2miss"
#define NM_DEVICE_VXLAN_L3MISS "l3miss"
-typedef struct {
- NMDeviceGeneric parent;
-} NMDeviceVxlan;
-
-typedef struct {
- NMDeviceGenericClass parent;
-
-} NMDeviceVxlanClass;
+typedef NMDeviceGeneric NMDeviceVxlan;
+typedef NMDeviceGenericClass 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
index 4788a604d..a9899535d 100644
--- a/src/devices/nm-device.c
+++ b/src/devices/nm-device.c
@@ -19,7 +19,8 @@
* Copyright (C) 2006 - 2008 Novell, Inc.
*/
-#include <config.h>
+#include "config.h"
+
#include <glib.h>
#include <glib/gi18n.h>
#include <dbus/dbus.h>
@@ -35,10 +36,9 @@
#include <sys/wait.h>
#include <arpa/inet.h>
#include <fcntl.h>
-#include <linux/if.h>
#include <netlink/route/addr.h>
-#include "libgsystem.h"
+#include "gsystem-local-alloc.h"
#include "nm-glib-compat.h"
#include "nm-device.h"
#include "nm-device-private.h"
@@ -49,13 +49,13 @@
#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-activation-request.h"
+#include "nm-ip4-config.h"
+#include "nm-ip6-config.h"
#include "nm-dnsmasq-manager.h"
#include "nm-dhcp4-config.h"
+#include "nm-dhcp6-config.h"
#include "nm-rfkill-manager.h"
#include "nm-firewall-manager.h"
#include "nm-properties-changed-signal.h"
@@ -63,25 +63,23 @@
#include "nm-settings-connection.h"
#include "nm-connection-provider.h"
#include "nm-posix-signals.h"
-#include "nm-manager-auth.h"
+#include "nm-auth-utils.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-core-internal.h"
+#include "nm-default-route-manager.h"
-#include "nm-device-bridge.h"
-#include "nm-device-bond.h"
-#include "nm-device-team.h"
+#include "nm-device-logging.h"
+_LOG_DECLARE_SELF (NMDevice);
-static void impl_device_disconnect (NMDevice *device, DBusGMethodInvocation *context);
+static void impl_device_disconnect (NMDevice *self, DBusGMethodInvocation *context);
+static void impl_device_delete (NMDevice *self, 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))
+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))
@@ -176,6 +174,7 @@ typedef struct {
typedef struct {
gboolean in_state_changed;
+ gboolean initialized;
NMDeviceState state;
NMDeviceStateReason state_reason;
@@ -199,7 +198,7 @@ typedef struct {
RfKillType rfkill_type;
gboolean firmware_missing;
GHashTable * available_connections;
- guint8 hw_addr[NM_UTILS_HWADDR_LEN_MAX];
+ char * hw_addr;
guint hw_addr_len;
char * physical_port_id;
@@ -230,22 +229,32 @@ typedef struct {
guint carrier_wait_id;
gboolean ignore_carrier;
guint32 mtu;
+ gboolean up; /* IFF_UP */
/* Generic DHCP stuff */
guint32 dhcp_timeout;
- GByteArray * dhcp_anycast_address;
+ char * 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 */
+ gboolean ext_ip4_config_had_any_addresses;
+ NMIP4Config * wwan_ip4_config; /* WWAN configuration */
+ struct {
+ gboolean v4_has;
+ gboolean v4_is_assumed;
+ NMPlatformIP4Route v4;
+ gboolean v6_has;
+ gboolean v6_is_assumed;
+ NMPlatformIP6Route v6;
+ } default_route;
/* DHCPv4 tracking */
- NMDHCPClient * dhcp4_client;
+ NMDhcpClient * dhcp4_client;
gulong dhcp4_state_sigid;
- gulong dhcp4_timeout_sigid;
- NMDHCP4Config * dhcp4_config;
+ NMDhcp4Config * dhcp4_config;
NMIP4Config * vpn4_config; /* routes added by a VPN which uses this device */
guint arp_round2_id;
@@ -255,9 +264,8 @@ typedef struct {
NMDnsMasqManager *dnsmasq_manager;
gulong dnsmasq_state_id;
- /* Firewall Manager */
- NMFirewallManager *fw_manager;
- DBusGProxyCall *fw_call;
+ /* Firewall */
+ NMFirewallPendingCall fw_call;
/* avahi-autoipd stuff */
GPid aipd_pid;
@@ -268,10 +276,14 @@ typedef struct {
NMIP6Config * ip6_config;
IpState ip6_state;
NMIP6Config * vpn6_config; /* routes added by a VPN which uses this device */
+ NMIP6Config * wwan_ip6_config;
NMIP6Config * ext_ip6_config; /* Stuff added outside NM */
+ gboolean ext_ip6_config_had_any_addresses;
+ gboolean nm_ipv6ll; /* TRUE if NM handles the device's IPv6LL address */
NMRDisc * rdisc;
- gulong rdisc_config_changed_sigid;
+ gulong rdisc_changed_id;
+ gulong rdisc_timeout_id;
NMSettingIP6ConfigPrivacy rdisc_use_tempaddr;
/* IP6 config from autoconf */
NMIP6Config * ac_ip6_config;
@@ -280,11 +292,10 @@ typedef struct {
GHashTable * ip6_saved_properties;
- NMDHCPClient * dhcp6_client;
+ NMDhcpClient * dhcp6_client;
NMRDiscDHCPLevel dhcp6_mode;
gulong dhcp6_state_sigid;
- gulong dhcp6_timeout_sigid;
- NMDHCP6Config * dhcp6_config;
+ NMDhcp6Config * dhcp6_config;
/* IP6 config from DHCP */
NMIP6Config * dhcp6_ip6_config;
@@ -303,8 +314,9 @@ typedef struct {
NMConnectionProvider *con_provider;
} NMDevicePrivate;
-static gboolean nm_device_set_ip4_config (NMDevice *dev,
+static gboolean nm_device_set_ip4_config (NMDevice *self,
NMIP4Config *config,
+ guint32 default_route_metric,
gboolean commit,
NMDeviceStateReason *reason);
static gboolean ip4_config_merge_and_apply (NMDevice *self,
@@ -312,36 +324,27 @@ static gboolean ip4_config_merge_and_apply (NMDevice *self,
gboolean commit,
NMDeviceStateReason *out_reason);
-static gboolean nm_device_set_ip6_config (NMDevice *dev,
+static gboolean nm_device_set_ip6_config (NMDevice *self,
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 gboolean nm_device_master_add_slave (NMDevice *self, NMDevice *slave, gboolean configure);
+static void nm_device_slave_notify_enslave (NMDevice *self, gboolean success);
+static void nm_device_slave_notify_release (NMDevice *self, NMDeviceStateReason reason);
-static void addrconf6_start_with_link_ready (NMDevice *self);
+static gboolean addrconf6_start_with_link_ready (NMDevice *self);
+static gboolean dhcp6_start_with_link_ready (NMDevice *self, NMConnection *connection);
+static NMActStageReturn linklocal6_start (NMDevice *self);
-static gboolean nm_device_get_default_unmanaged (NMDevice *device);
+static gboolean nm_device_get_default_unmanaged (NMDevice *self);
-static void _set_state_full (NMDevice *device,
+static void _set_state_full (NMDevice *self,
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 ())
+static void nm_device_update_hw_address (NMDevice *self);
/***********************************************************/
@@ -366,7 +369,7 @@ static const char *state_table[] = {
static const char *
queued_state_to_string (NMDeviceState state)
{
- if (state >= 0 && state < G_N_ELEMENTS (state_table))
+ if ((gsize) state < G_N_ELEMENTS (state_table))
return state_table[state];
return state_table[NM_DEVICE_STATE_UNKNOWN];
}
@@ -442,41 +445,41 @@ static const char *reason_table[] = {
static const char *
reason_to_string (NMDeviceStateReason reason)
{
- if (reason >= 0 && reason < G_N_ELEMENTS (reason_table))
+ if ((gsize) reason < G_N_ELEMENTS (reason_table))
return reason_table[reason];
return reason_table[NM_DEVICE_STATE_REASON_UNKNOWN];
}
/***********************************************************/
-static inline gboolean
+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)
+device_has_capability (NMDevice *self, NMDeviceCapabilities caps)
{
- return !!(NM_DEVICE_GET_PRIVATE (device)->capabilities & caps);
+ return !!(NM_DEVICE_GET_PRIVATE (self)->capabilities & caps);
}
/***********************************************************/
void
-nm_device_dbus_export (NMDevice *device)
+nm_device_dbus_export (NMDevice *self)
{
static guint32 devcount = 0;
NMDevicePrivate *priv;
- g_return_if_fail (NM_IS_DEVICE (device));
+ g_return_if_fail (NM_IS_DEVICE (self));
- priv = NM_DEVICE_GET_PRIVATE (device);
+ priv = NM_DEVICE_GET_PRIVATE (self);
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);
+ _LOGI (LOGD_DEVICE, "exported as %s", priv->path);
+ nm_dbus_manager_register_object (nm_dbus_manager_get (), priv->path, self);
}
const char *
@@ -498,7 +501,7 @@ nm_device_get_udi (NMDevice *self)
const char *
nm_device_get_iface (NMDevice *self)
{
- g_return_val_if_fail (self != NULL, NULL);
+ g_return_val_if_fail (NM_IS_DEVICE (self), 0);
return NM_DEVICE_GET_PRIVATE (self)->iface;
}
@@ -512,9 +515,9 @@ nm_device_get_ifindex (NMDevice *self)
}
gboolean
-nm_device_is_software (NMDevice *device)
+nm_device_is_software (NMDevice *self)
{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
return priv->is_software;
}
@@ -562,11 +565,14 @@ nm_device_set_ip_iface (NMDevice *self, const char *iface)
if (priv->ip_iface) {
priv->ip_ifindex = nm_platform_link_get_ifindex (priv->ip_iface);
if (priv->ip_ifindex > 0) {
+ if (nm_platform_check_support_user_ipv6ll ())
+ nm_platform_link_set_user_ipv6ll_enabled (priv->ip_ifindex, TRUE);
+
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);
+ _LOGW (LOGD_HW, "failed to look up interface index");
}
}
@@ -579,6 +585,43 @@ nm_device_set_ip_iface (NMDevice *self, const char *iface)
g_free (old_ip_iface);
}
+static gboolean
+get_ip_iface_identifier (NMDevice *self, NMUtilsIPv6IfaceId *out_iid)
+{
+ NMLinkType link_type;
+ const guint8 *hwaddr = NULL;
+ size_t hwaddr_len = 0;
+ int ifindex;
+ gboolean success;
+
+ /* If we get here, we *must* have a kernel netdev, which implies an ifindex */
+ ifindex = nm_device_get_ip_ifindex (self);
+ g_assert (ifindex);
+
+ link_type = nm_platform_link_get_type (ifindex);
+ g_return_val_if_fail (link_type > NM_LINK_TYPE_UNKNOWN, 0);
+
+ hwaddr = nm_platform_link_get_address (ifindex, &hwaddr_len);
+ if (!hwaddr_len)
+ return FALSE;
+
+ success = nm_utils_get_ipv6_interface_identifier (link_type,
+ hwaddr,
+ hwaddr_len,
+ out_iid);
+ if (!success) {
+ _LOGW (LOGD_HW, "failed to generate interface identifier "
+ "for link type %u hwaddr_len %zu", link_type, hwaddr_len);
+ }
+ return success;
+}
+
+static gboolean
+nm_device_get_ip_iface_identifier (NMDevice *self, NMUtilsIPv6IfaceId *iid)
+{
+ return NM_DEVICE_GET_CLASS (self)->get_ip_iface_identifier (self, iid);
+}
+
const char *
nm_device_get_driver (NMDevice *self)
{
@@ -606,54 +649,124 @@ nm_device_get_device_type (NMDevice *self)
/**
* nm_device_get_priority():
- * @dev: the #NMDevice
+ * @self: the #NMDevice
*
* Returns: the device's routing priority. Lower numbers means a "better"
* device, eg higher priority.
*/
int
-nm_device_get_priority (NMDevice *dev)
+nm_device_get_priority (NMDevice *self)
{
- g_return_val_if_fail (NM_IS_DEVICE (dev), 100);
+ g_return_val_if_fail (NM_IS_DEVICE (self), 1000);
- /* Device 'priority' is used for two things:
+ /* Device 'priority' is used for the default route-metric and is based on
+ * the device type. The settings ipv4.route-metric and ipv6.route-metric
+ * can overwrite this default.
+ *
+ * Currently for both IPv4 and IPv6 we use the same default values.
+ *
+ * The route-metric is used for the metric of the routes of device.
+ * This also applies to the default route. Therefore it affects also
+ * which device is the "best".
*
- * 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.
+ * For comparison, note that iproute2 by default adds IPv4 routes with
+ * metric 0, and IPv6 routes with metric 1024. The latter is the IPv6
+ * "user default" in the kernel (NM_PLATFORM_ROUTE_METRIC_DEFAULT_IP6).
+ * In kernel, the full uint32_t range is available for route
+ * metrics (except for IPv6, where 0 means 1024).
*/
- switch (nm_device_get_device_type (dev)) {
+ switch (nm_device_get_device_type (self)) {
+ /* 50 is reserved for VPN (NM_VPN_ROUTE_METRIC_DEFAULT) */
case NM_DEVICE_TYPE_ETHERNET:
- return 1;
+ return 100;
case NM_DEVICE_TYPE_INFINIBAND:
- return 2;
+ return 150;
case NM_DEVICE_TYPE_ADSL:
- return 3;
+ return 200;
case NM_DEVICE_TYPE_WIMAX:
- return 4;
+ return 250;
case NM_DEVICE_TYPE_BOND:
- return 5;
+ return 300;
case NM_DEVICE_TYPE_TEAM:
- return 6;
+ return 350;
case NM_DEVICE_TYPE_VLAN:
- return 7;
+ return 400;
case NM_DEVICE_TYPE_MODEM:
- return 8;
+ return 450;
case NM_DEVICE_TYPE_BT:
- return 9;
+ return 550;
case NM_DEVICE_TYPE_WIFI:
- return 10;
+ return 600;
case NM_DEVICE_TYPE_OLPC_MESH:
- return 11;
+ return 650;
default:
- return 20;
+ return 950;
}
}
+guint32
+nm_device_get_ip4_route_metric (NMDevice *self)
+{
+ NMConnection *connection;
+ gint64 route_metric = -1;
+
+ g_return_val_if_fail (NM_IS_DEVICE (self), G_MAXUINT32);
+
+ connection = nm_device_get_connection (self);
+
+ if (connection)
+ route_metric = nm_setting_ip_config_get_route_metric (nm_connection_get_setting_ip4_config (connection));
+
+ return route_metric >= 0 ? route_metric : nm_device_get_priority (self);
+}
+
+guint32
+nm_device_get_ip6_route_metric (NMDevice *self)
+{
+ NMConnection *connection;
+ gint64 route_metric = -1;
+
+ g_return_val_if_fail (NM_IS_DEVICE (self), G_MAXUINT32);
+
+ connection = nm_device_get_connection (self);
+
+ if (connection)
+ route_metric = nm_setting_ip_config_get_route_metric (nm_connection_get_setting_ip6_config (connection));
+
+ return route_metric >= 0 ? route_metric : nm_device_get_priority (self);
+}
+
+const NMPlatformIP4Route *
+nm_device_get_ip4_default_route (NMDevice *self, gboolean *out_is_assumed)
+{
+ NMDevicePrivate *priv;
+
+ g_return_val_if_fail (NM_IS_DEVICE (self), NULL);
+
+ priv = NM_DEVICE_GET_PRIVATE (self);
+
+ if (out_is_assumed)
+ *out_is_assumed = priv->default_route.v4_is_assumed;
+
+ return priv->default_route.v4_has ? &priv->default_route.v4 : NULL;
+}
+
+const NMPlatformIP6Route *
+nm_device_get_ip6_default_route (NMDevice *self, gboolean *out_is_assumed)
+{
+ NMDevicePrivate *priv;
+
+ g_return_val_if_fail (NM_IS_DEVICE (self), NULL);
+
+ priv = NM_DEVICE_GET_PRIVATE (self);
+
+ if (out_is_assumed)
+ *out_is_assumed = priv->default_route.v6_is_assumed;
+
+ return priv->default_route.v6_has ? &priv->default_route.v6 : NULL;
+}
+
const char *
nm_device_get_type_desc (NMDevice *self)
{
@@ -663,9 +776,9 @@ nm_device_get_type_desc (NMDevice *self)
}
gboolean
-nm_device_has_carrier (NMDevice *device)
+nm_device_has_carrier (NMDevice *self)
{
- return NM_DEVICE_GET_PRIVATE (device)->carrier;
+ return NM_DEVICE_GET_PRIVATE (self)->carrier;
}
NMActRequest *
@@ -693,22 +806,38 @@ nm_device_get_rfkill_type (NMDevice *self)
}
static const char *
-nm_device_get_physical_port_id (NMDevice *device)
+nm_device_get_physical_port_id (NMDevice *self)
{
- return NM_DEVICE_GET_PRIVATE (device)->physical_port_id;
+ return NM_DEVICE_GET_PRIVATE (self)->physical_port_id;
}
/***********************************************************/
static gboolean
-nm_device_uses_generated_connection (NMDevice *self)
+nm_device_uses_generated_assumed_connection (NMDevice *self)
{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
NMConnection *connection;
- connection = nm_device_get_connection (self);
- if (!connection)
- return FALSE;
- return nm_settings_connection_get_nm_generated (NM_SETTINGS_CONNECTION (connection));
+ if ( priv->act_request
+ && nm_active_connection_get_assumed (NM_ACTIVE_CONNECTION (priv->act_request))) {
+ connection = nm_act_request_get_connection (priv->act_request);
+ if ( connection
+ && nm_settings_connection_get_nm_generated_assumed (NM_SETTINGS_CONNECTION (connection)))
+ return TRUE;
+ }
+ return FALSE;
+}
+
+gboolean
+nm_device_uses_assumed_connection (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ if ( priv->act_request
+ && nm_active_connection_get_assumed (NM_ACTIVE_CONNECTION (priv->act_request)))
+ return TRUE;
+ return FALSE;
}
static SlaveInfo *
@@ -737,28 +866,28 @@ free_slave_info (SlaveInfo *info)
/**
* nm_device_enslave_slave:
- * @dev: the master device
+ * @self: 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,
+ * If @self 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)
+nm_device_enslave_slave (NMDevice *self, NMDevice *slave, NMConnection *connection)
{
SlaveInfo *info;
gboolean success = FALSE;
gboolean configure;
- g_return_val_if_fail (dev != NULL, FALSE);
+ g_return_val_if_fail (self != NULL, FALSE);
g_return_val_if_fail (slave != NULL, FALSE);
- g_return_val_if_fail (NM_DEVICE_GET_CLASS (dev)->enslave_slave != NULL, FALSE);
+ g_return_val_if_fail (NM_DEVICE_GET_CLASS (self)->enslave_slave != NULL, FALSE);
- info = find_slave_info (dev, slave);
+ info = find_slave_info (self, slave);
if (!info)
return FALSE;
@@ -769,7 +898,7 @@ nm_device_enslave_slave (NMDevice *dev, NMDevice *slave, NMConnection *connectio
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);
+ success = NM_DEVICE_GET_CLASS (self)->enslave_slave (self, slave, connection, configure);
info->enslaved = success;
}
@@ -778,18 +907,18 @@ nm_device_enslave_slave (NMDevice *dev, NMDevice *slave, NMConnection *connectio
/* Ensure the device's hardware address is up-to-date; it often changes
* when slaves change.
*/
- nm_device_update_hw_address (dev);
+ nm_device_update_hw_address (self);
/* 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 (self)->ip4_state == IP_WAIT)
+ nm_device_activate_stage3_ip4_start (self);
- if (NM_DEVICE_GET_PRIVATE (dev)->ip6_state == IP_WAIT)
- nm_device_activate_stage3_ip6_start (dev);
+ if (NM_DEVICE_GET_PRIVATE (self)->ip6_state == IP_WAIT)
+ nm_device_activate_stage3_ip6_start (self);
}
return success;
@@ -797,42 +926,42 @@ nm_device_enslave_slave (NMDevice *dev, NMDevice *slave, NMConnection *connectio
/**
* nm_device_release_one_slave:
- * @dev: the master device
+ * @self: the master device
* @slave: the slave device to release
- * @configure: whether @dev needs to actually release @slave
+ * @configure: whether @self 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,
+ * If @self 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.
+ * updates the state of @self 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)
+nm_device_release_one_slave (NMDevice *self, NMDevice *slave, gboolean configure, NMDeviceStateReason reason)
{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (dev);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
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);
+ g_return_val_if_fail (NM_DEVICE_GET_CLASS (self)->release_slave != NULL, FALSE);
- info = find_slave_info (dev, slave);
+ info = find_slave_info (self, 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);
+ success = NM_DEVICE_GET_CLASS (self)->release_slave (self, 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);
+ g_warn_if_fail (reason == NM_DEVICE_STATE_REASON_NONE || reason == NM_DEVICE_STATE_REASON_REMOVED);
reason = NM_DEVICE_STATE_REASON_NONE;
} else if (reason == NM_DEVICE_STATE_REASON_NONE) {
g_warn_if_reached ();
@@ -845,20 +974,53 @@ nm_device_release_one_slave (NMDevice *dev, NMDevice *slave, gboolean configure,
/* Ensure the device's hardware address is up-to-date; it often changes
* when slaves change.
*/
- nm_device_update_hw_address (dev);
+ nm_device_update_hw_address (self);
return success;
}
+static gboolean
+is_software_external (NMDevice *self)
+{
+ return nm_device_is_software (self)
+ && !nm_device_get_is_nm_owned (self);
+}
+
+/**
+ * nm_device_finish_init:
+ * @self: the master device
+ *
+ * Whatever needs to be done post-initialization, when the device has a DBus
+ * object name.
+ */
+void
+nm_device_finish_init (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ g_assert (priv->initialized == FALSE);
+
+ /* Do not manage externally created software devices until they are IFF_UP */
+ if ( is_software_external (self)
+ && !nm_platform_link_is_up (priv->ifindex)
+ && priv->ifindex > 0)
+ nm_device_set_initial_unmanaged_flag (self, NM_UNMANAGED_EXTERNAL_DOWN, TRUE);
+
+ if (priv->master)
+ nm_device_enslave_slave (priv->master, self, NULL);
+
+ priv->initialized = TRUE;
+}
+
static void
-carrier_changed (NMDevice *device, gboolean carrier)
+carrier_changed (NMDevice *self, gboolean carrier)
{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- if (!nm_device_get_managed (device))
+ if (!nm_device_get_managed (self))
return;
- nm_device_recheck_available_connections (device);
+ nm_device_recheck_available_connections (self);
/* ignore-carrier devices ignore all carrier-down events */
if (priv->ignore_carrier && !carrier)
@@ -872,13 +1034,13 @@ carrier_changed (NMDevice *device, gboolean carrier)
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);
+ if (nm_device_activate_ip4_state_in_wait (self))
+ nm_device_activate_stage3_ip4_start (self);
+ if (nm_device_activate_ip6_state_in_wait (self))
+ nm_device_activate_stage3_ip6_start (self);
return;
- } else if (nm_device_get_enslaved (device) && !carrier) {
+ } else if (nm_device_get_enslaved (self) && !carrier) {
/* Slaves don't deactivate when they lose carrier; for
* bonds/teams in particular that would be actively
* counterproductive.
@@ -890,7 +1052,7 @@ carrier_changed (NMDevice *device, gboolean 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_queue_state (self, 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
@@ -898,14 +1060,16 @@ carrier_changed (NMDevice *device, gboolean carrier)
* when the carrier appears, auto connections are rechecked for
* the device.
*/
- nm_device_emit_recheck_auto_activate (device);
+ nm_device_emit_recheck_auto_activate (self);
}
} else {
+ g_return_if_fail (priv->state >= NM_DEVICE_STATE_UNAVAILABLE);
+
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,
+ if (nm_device_queued_state_peek (self) >= NM_DEVICE_STATE_DISCONNECTED)
+ nm_device_queued_state_clear (self);
+ } else {
+ nm_device_queue_state (self, NM_DEVICE_STATE_UNAVAILABLE,
NM_DEVICE_STATE_REASON_CARRIER);
}
}
@@ -916,18 +1080,16 @@ carrier_changed (NMDevice *device, gboolean carrier)
static gboolean
link_disconnect_action_cb (gpointer user_data)
{
- NMDevice *device = NM_DEVICE (user_data);
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ NMDevice *self = NM_DEVICE (user_data);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- nm_log_dbg (LOGD_DEVICE, "(%s): link disconnected (calling deferred action) (id=%u)",
- nm_device_get_iface (device), priv->carrier_defer_id);
+ _LOGD (LOGD_DEVICE, "link disconnected (calling deferred action) (id=%u)", 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));
+ _LOGI (LOGD_DEVICE, "link disconnected (calling deferred action)");
- NM_DEVICE_GET_CLASS (device)->carrier_changed (device, FALSE);
+ NM_DEVICE_GET_CLASS (self)->carrier_changed (self, FALSE);
return FALSE;
}
@@ -939,67 +1101,64 @@ link_disconnect_action_cancel (NMDevice *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);
+ _LOGD (LOGD_DEVICE, "link disconnected (canceling deferred action) (id=%u)", priv->carrier_defer_id);
priv->carrier_defer_id = 0;
}
}
void
-nm_device_set_carrier (NMDevice *device, gboolean carrier)
+nm_device_set_carrier (NMDevice *self, 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);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ NMDeviceClass *klass = NM_DEVICE_GET_CLASS (self);
+ NMDeviceState state = nm_device_get_state (self);
if (priv->carrier == carrier)
return;
priv->carrier = carrier;
- g_object_notify (G_OBJECT (device), NM_DEVICE_CARRIER);
+ g_object_notify (G_OBJECT (self), 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);
+ _LOGI (LOGD_DEVICE, "link connected");
+ link_disconnect_action_cancel (self);
+ klass->carrier_changed (self, 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);
+ nm_device_remove_pending_action (self, "carrier wait", TRUE);
}
} else if (state <= NM_DEVICE_STATE_DISCONNECTED) {
- nm_log_info (LOGD_DEVICE, "(%s): link disconnected", iface);
- klass->carrier_changed (device, FALSE);
+ _LOGI (LOGD_DEVICE, "link disconnected");
+ klass->carrier_changed (self, FALSE);
} else {
- nm_log_info (LOGD_DEVICE, "(%s): link disconnected (deferring action for %d seconds)",
- iface, LINK_DISCONNECT_DELAY);
+ _LOGI (LOGD_DEVICE, "link disconnected (deferring action for %d seconds)", 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);
+ link_disconnect_action_cb, self);
+ _LOGD (LOGD_DEVICE, "link disconnected (deferring action for %d seconds) (id=%u)",
+ LINK_DISCONNECT_DELAY, priv->carrier_defer_id);
}
}
static void
-update_for_ip_ifname_change (NMDevice *device)
+update_for_ip_ifname_change (NMDevice *self)
{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
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,
+ if (!nm_device_dhcp4_renew (self, FALSE)) {
+ nm_device_state_changed (self,
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,
+ if (!nm_device_dhcp6_renew (self, FALSE)) {
+ nm_device_state_changed (self,
NM_DEVICE_STATE_FAILED,
NM_DEVICE_STATE_REASON_DHCP_FAILED);
return;
@@ -1014,98 +1173,152 @@ update_for_ip_ifname_change (NMDevice *device)
}
static void
-device_link_changed (NMDevice *device, NMPlatformLink *info)
+device_set_master (NMDevice *self, int ifindex)
+{
+ NMDevice *master;
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ master = nm_manager_get_device_by_ifindex (nm_manager_get (), ifindex);
+ 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, self, FALSE);
+ } else if (master) {
+ _LOGI (LOGD_DEVICE, "enslaved to non-master-type device %s; ignoring",
+ nm_device_get_iface (master));
+ } else {
+ _LOGW (LOGD_DEVICE, "enslaved to unknown device %d %s",
+ ifindex,
+ nm_platform_link_get_name (ifindex));
+ }
+}
+
+static void
+device_link_changed (NMDevice *self, NMPlatformLink *info)
{
- NMDeviceClass *klass = NM_DEVICE_GET_CLASS (device);
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ NMDeviceClass *klass = NM_DEVICE_GET_CLASS (self);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
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);
+ g_object_notify (G_OBJECT (self), 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);
+ g_object_notify (G_OBJECT (self), 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);
+ _LOGI (LOGD_DEVICE, "interface index %d renamed iface from '%s' to '%s'",
+ 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);
+ g_object_notify (G_OBJECT (self), NM_DEVICE_IFACE);
if (ip_ifname_changed)
- g_object_notify (G_OBJECT (device), NM_DEVICE_IP_IFACE);
+ g_object_notify (G_OBJECT (self), NM_DEVICE_IP_IFACE);
/* Re-match available connections against the new interface name */
- nm_device_recheck_available_connections (device);
+ nm_device_recheck_available_connections (self);
/* 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);
+ nm_device_emit_recheck_auto_activate (self);
}
/* Update slave status for external changes */
+ if (priv->enslaved && info->master != nm_device_get_ifindex (priv->master))
+ nm_device_release_one_slave (priv->master, self, FALSE, NM_DEVICE_STATE_REASON_NONE);
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);
+ device_set_master (self, info->master);
+ if (priv->master)
+ nm_device_enslave_slave (priv->master, self, NULL);
+ }
if (klass->link_changed)
- klass->link_changed (device, info);
-
+ klass->link_changed (self, info);
/* Update DHCP, etc, if needed */
if (ip_ifname_changed)
- update_for_ip_ifname_change (device);
+ update_for_ip_ifname_change (self);
+
+ if (priv->up != info->up) {
+ priv->up = info->up;
+
+ /* Manage externally-created software interfaces only when they are IFF_UP */
+ g_assert (priv->ifindex > 0);
+ if (is_software_external (self)) {
+ gboolean external_down = nm_device_get_unmanaged_flag (self, NM_UNMANAGED_EXTERNAL_DOWN);
+
+ if (external_down && info->up) {
+ if (nm_device_get_state (self) < NM_DEVICE_STATE_DISCONNECTED) {
+ /* Ensure the assume check is queued before any queued state changes
+ * from the transition to UNAVAILABLE.
+ */
+ nm_device_queue_recheck_assume (self);
+
+ /* Resetting the EXTERNAL_DOWN flag may change the device's state
+ * to UNAVAILABLE. To ensure that the state change doesn't touch
+ * the device before assumption occurs, pass
+ * NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED as the reason.
+ */
+ nm_device_set_unmanaged (self,
+ NM_UNMANAGED_EXTERNAL_DOWN,
+ FALSE,
+ NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED);
+ } else {
+ /* Don't trigger a state change; if the device is in a
+ * state higher than UNAVAILABLE, it is already IFF_UP
+ * or an explicit activation request was received.
+ */
+ priv->unmanaged_flags &= ~NM_UNMANAGED_EXTERNAL_DOWN;
+ }
+ } else if (!external_down && !info->up && nm_device_get_state (self) <= NM_DEVICE_STATE_DISCONNECTED) {
+ /* If the device is already disconnected and is set !IFF_UP,
+ * unmanage it.
+ */
+ nm_device_set_unmanaged (self,
+ NM_UNMANAGED_EXTERNAL_DOWN,
+ TRUE,
+ NM_DEVICE_STATE_REASON_USER_REQUESTED);
+ }
+ }
+ }
}
static void
-device_ip_link_changed (NMDevice *device, NMPlatformLink *info)
+device_ip_link_changed (NMDevice *self, NMPlatformLink *info)
{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
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);
+ _LOGI (LOGD_DEVICE, "interface index %d renamed ip_iface (%d) from '%s' to '%s'",
+ priv->ifindex, nm_device_get_ip_ifindex (self),
+ 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);
+ g_object_notify (G_OBJECT (self), NM_DEVICE_IP_IFACE);
+ update_for_ip_ifname_change (self);
}
}
static void
-link_changed_cb (NMPlatform *platform, int ifindex, NMPlatformLink *info, NMPlatformSignalChangeType change_type, NMPlatformReason reason, NMDevice *device)
+link_changed_cb (NMPlatform *platform,
+ int ifindex,
+ NMPlatformLink *info,
+ NMPlatformSignalChangeType change_type,
+ NMPlatformReason reason,
+ NMDevice *self)
{
if (change_type != NM_PLATFORM_SIGNAL_CHANGED)
return;
@@ -1116,24 +1329,24 @@ link_changed_cb (NMPlatform *platform, int ifindex, NMPlatformLink *info, NMPlat
* 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);
+ if (ifindex == nm_device_get_ifindex (self))
+ device_link_changed (self, info);
+ else if (ifindex == nm_device_get_ip_ifindex (self))
+ device_ip_link_changed (self, info);
}
static void
-link_changed (NMDevice *device, NMPlatformLink *info)
+link_changed (NMDevice *self, 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);
+ if ( device_has_capability (self, NM_DEVICE_CAP_CARRIER_DETECT)
+ && !device_has_capability (self, NM_DEVICE_CAP_NONSTANDARD_CARRIER))
+ nm_device_set_carrier (self, info->connected);
}
/**
* nm_device_notify_component_added():
- * @device: the #NMDevice
+ * @self: the #NMDevice
* @component: the component being added by a plugin
*
* Called by the manager to notify the device that a new component has
@@ -1144,16 +1357,16 @@ link_changed (NMDevice *device, NMPlatformLink *info)
* claimed.
*/
gboolean
-nm_device_notify_component_added (NMDevice *device, GObject *component)
+nm_device_notify_component_added (NMDevice *self, GObject *component)
{
- if (NM_DEVICE_GET_CLASS (device)->component_added)
- return NM_DEVICE_GET_CLASS (device)->component_added (device, component);
+ if (NM_DEVICE_GET_CLASS (self)->component_added)
+ return NM_DEVICE_GET_CLASS (self)->component_added (self, component);
return FALSE;
}
/**
* nm_device_owns_iface():
- * @device: the #NMDevice
+ * @self: the #NMDevice
* @iface: an interface name
*
* Called by the manager to ask if the device or any of its components owns
@@ -1162,17 +1375,25 @@ nm_device_notify_component_added (NMDevice *device, GObject *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,
+ * Returns: %TRUE if @self or it's components owns the interface name,
* %FALSE if not
*/
gboolean
-nm_device_owns_iface (NMDevice *device, const char *iface)
+nm_device_owns_iface (NMDevice *self, const char *iface)
{
- if (NM_DEVICE_GET_CLASS (device)->owns_iface)
- return NM_DEVICE_GET_CLASS (device)->owns_iface (device, iface);
+ if (NM_DEVICE_GET_CLASS (self)->owns_iface)
+ return NM_DEVICE_GET_CLASS (self)->owns_iface (self, iface);
return FALSE;
}
+NMConnection *
+nm_device_new_default_connection (NMDevice *self)
+{
+ if (NM_DEVICE_GET_CLASS (self)->new_default_connection)
+ return NM_DEVICE_GET_CLASS (self)->new_default_connection (self);
+ return NULL;
+}
+
static void
slave_state_changed (NMDevice *slave,
NMDeviceState slave_new_state,
@@ -1183,13 +1404,12 @@ slave_state_changed (NMDevice *slave,
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));
+ _LOGD (LOGD_DEVICE, "slave %s state change %d (%s) -> %d (%s)",
+ 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)
@@ -1208,46 +1428,45 @@ slave_state_changed (NMDevice *slave,
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));
- }
+ if (priv->slaves == NULL && priv->state == NM_DEVICE_STATE_ACTIVATED)
+ _LOGD (LOGD_DEVICE, "last slave removed; remaining activated");
}
}
/**
* nm_device_master_add_slave:
- * @dev: the master device
+ * @self: 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,
+ * If @self 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)
+nm_device_master_add_slave (NMDevice *self, NMDevice *slave, gboolean configure)
{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (dev);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
SlaveInfo *info;
- g_return_val_if_fail (dev != NULL, FALSE);
+ g_return_val_if_fail (self != NULL, FALSE);
g_return_val_if_fail (slave != NULL, FALSE);
- g_return_val_if_fail (NM_DEVICE_GET_CLASS (dev)->enslave_slave != NULL, FALSE);
+ g_return_val_if_fail (NM_DEVICE_GET_CLASS (self)->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)) {
+ if (!find_slave_info (self, 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);
+ G_CALLBACK (slave_state_changed), self);
priv->slaves = g_slist_append (priv->slaves, info);
}
+ nm_device_queue_recheck_assume (self);
return TRUE;
}
@@ -1255,14 +1474,14 @@ nm_device_master_add_slave (NMDevice *dev, NMDevice *slave, gboolean configure)
/**
* nm_device_master_get_slaves:
- * @dev: the master device
+ * @self: the master device
*
- * Returns: any slaves of which @device is the master. Caller owns returned list.
+ * Returns: any slaves of which @self is the master. Caller owns returned list.
*/
GSList *
-nm_device_master_get_slaves (NMDevice *dev)
+nm_device_master_get_slaves (NMDevice *self)
{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (dev);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
GSList *slaves = NULL, *iter;
for (iter = priv->slaves; iter; iter = g_slist_next (iter))
@@ -1273,18 +1492,18 @@ nm_device_master_get_slaves (NMDevice *dev)
/**
* nm_device_master_get_slave_by_ifindex:
- * @dev: the master device
+ * @self: 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.
+ * Returns: the slave with the given @ifindex of which @self is the master,
+ * or %NULL if no device with @ifindex is a slave of @self.
*/
NMDevice *
-nm_device_master_get_slave_by_ifindex (NMDevice *dev, int ifindex)
+nm_device_master_get_slave_by_ifindex (NMDevice *self, int ifindex)
{
GSList *iter;
- for (iter = NM_DEVICE_GET_PRIVATE (dev)->slaves; iter; iter = g_slist_next (iter)) {
+ for (iter = NM_DEVICE_GET_PRIVATE (self)->slaves; iter; iter = g_slist_next (iter)) {
SlaveInfo *info = iter->data;
if (nm_device_get_ip_ifindex (info->slave) == ifindex)
@@ -1295,18 +1514,18 @@ nm_device_master_get_slave_by_ifindex (NMDevice *dev, int ifindex)
/**
* nm_device_master_check_slave_physical_port:
- * @dev: the master device
+ * @self: 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
+ * Checks if @self 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,
+nm_device_master_check_slave_physical_port (NMDevice *self, NMDevice *slave,
guint64 log_domain)
{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (dev);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
const char *slave_physical_port_id, *existing_physical_port_id;
SlaveInfo *info;
GSList *iter;
@@ -1322,10 +1541,9 @@ nm_device_master_check_slave_physical_port (NMDevice *dev, NMDevice *slave,
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));
+ _LOGW (log_domain, "slave %s shares a physical port with existing slave %s",
+ 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
@@ -1344,7 +1562,7 @@ nm_device_master_release_slaves (NMDevice *self)
NMDeviceStateReason reason;
/* Don't release the slaves if this connection doesn't belong to NM. */
- if (nm_device_uses_generated_connection (self))
+ if (nm_device_uses_generated_assumed_connection (self))
return;
reason = priv->state_reason;
@@ -1360,19 +1578,19 @@ nm_device_master_release_slaves (NMDevice *self)
/**
* nm_device_get_master:
- * @dev: the device
+ * @self: the device
*
- * If @dev has been enslaved by another device, this returns that
+ * If @self 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
+ * @self 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
+ * Returns: (transfer none): @self's master, or %NULL
*/
NMDevice *
-nm_device_get_master (NMDevice *dev)
+nm_device_get_master (NMDevice *self)
{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (dev);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
if (priv->enslaved)
return priv->master;
@@ -1382,17 +1600,17 @@ nm_device_get_master (NMDevice *dev)
/**
* nm_device_slave_notify_enslave:
- * @dev: the slave device
+ * @self: 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)
+nm_device_slave_notify_enslave (NMDevice *self, gboolean success)
{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (dev);
- NMConnection *connection = nm_device_get_connection (dev);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ NMConnection *connection = nm_device_get_connection (self);
gboolean activating = (priv->state == NM_DEVICE_STATE_IP_CONFIG);
g_assert (priv->master);
@@ -1400,49 +1618,41 @@ nm_device_slave_notify_enslave (NMDevice *dev, gboolean success)
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));
- }
+ _LOGI (LOGD_DEVICE, "Activation: connection '%s' enslaved, continuing activation",
+ nm_connection_get_id (connection));
+ } else
+ _LOGI (LOGD_DEVICE, "enslaved to %s", nm_device_get_iface (priv->master));
priv->enslaved = TRUE;
- g_object_notify (G_OBJECT (dev), NM_DEVICE_MASTER);
+ g_object_notify (G_OBJECT (self), 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));
+ _LOGW (LOGD_DEVICE, "Activation: connection '%s' could not be enslaved",
+ nm_connection_get_id (connection));
}
}
if (activating) {
priv->ip4_state = IP_DONE;
priv->ip6_state = IP_DONE;
- nm_device_queue_state (dev,
+ nm_device_queue_state (self,
success ? NM_DEVICE_STATE_SECONDARIES : NM_DEVICE_STATE_FAILED,
NM_DEVICE_STATE_REASON_NONE);
} else
- nm_device_queue_recheck_assume (dev);
+ nm_device_queue_recheck_assume (self);
}
/**
* nm_device_slave_notify_release:
- * @dev: the slave device
+ * @self: 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)
+nm_device_slave_notify_release (NMDevice *self, NMDeviceStateReason reason)
{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (dev);
- NMConnection *connection = nm_device_get_connection (dev);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ NMConnection *connection = nm_device_get_connection (self);
NMDeviceState new_state;
const char *master_status;
@@ -1460,43 +1670,56 @@ nm_device_slave_notify_release (NMDevice *dev, NMDeviceStateReason reason)
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);
+ _LOGD (LOGD_DEVICE, "Activation: connection '%s' master %s",
+ 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));
- }
+ nm_device_queue_state (self, new_state, reason);
+ } else if (priv->master)
+ _LOGI (LOGD_DEVICE, "released from master %s", nm_device_get_iface (priv->master));
+ else
+ _LOGD (LOGD_DEVICE, "released from master%s", priv->enslaved ? "" : " (was not enslaved)");
if (priv->enslaved) {
priv->enslaved = FALSE;
- g_object_notify (G_OBJECT (dev), NM_DEVICE_MASTER);
+ g_object_notify (G_OBJECT (self), NM_DEVICE_MASTER);
}
}
/**
* nm_device_get_enslaved:
- * @device: the #NMDevice
+ * @self: 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)
+nm_device_get_enslaved (NMDevice *self)
{
- return NM_DEVICE_GET_PRIVATE (device)->enslaved;
+ return NM_DEVICE_GET_PRIVATE (self)->enslaved;
}
+/**
+ * nm_device_removed:
+ * @self: the #NMDevice
+ *
+ * Called by the manager when the device was removed. Releases the device from
+ * the master in case it's enslaved.
+ */
+void
+nm_device_removed (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ if (priv->enslaved)
+ nm_device_release_one_slave (priv->master, self, FALSE, NM_DEVICE_STATE_REASON_REMOVED);
+}
+
+
static gboolean
-is_available (NMDevice *device)
+is_available (NMDevice *self)
{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
return priv->carrier || priv->ignore_carrier;
}
@@ -1548,12 +1771,44 @@ nm_device_set_enabled (NMDevice *self, gboolean enabled)
NM_DEVICE_GET_CLASS (self)->set_enabled (self, enabled);
}
+/**
+ * nm_device_get_autoconnect:
+ * @self: the #NMDevice
+ *
+ * Returns: %TRUE if the device allows autoconnect connections, or %FALSE if the
+ * device is explicitly blocking all autoconnect connections. Does not take
+ * into account transient conditions like companion devices that may wish to
+ * block the device.
+ */
gboolean
-nm_device_get_autoconnect (NMDevice *device)
+nm_device_get_autoconnect (NMDevice *self)
{
- g_return_val_if_fail (NM_IS_DEVICE (device), FALSE);
+ g_return_val_if_fail (NM_IS_DEVICE (self), FALSE);
- return NM_DEVICE_GET_PRIVATE (device)->autoconnect;
+ return NM_DEVICE_GET_PRIVATE (self)->autoconnect;
+}
+
+static void
+nm_device_set_autoconnect (NMDevice *self, gboolean autoconnect)
+{
+ NMDevicePrivate *priv;
+
+ g_return_if_fail (NM_IS_DEVICE (self));
+
+ priv = NM_DEVICE_GET_PRIVATE (self);
+ if (priv->autoconnect == autoconnect)
+ return;
+
+ if (autoconnect) {
+ /* Default-unmanaged devices never autoconnect */
+ if (!nm_device_get_default_unmanaged (self)) {
+ priv->autoconnect = TRUE;
+ g_object_notify (G_OBJECT (self), NM_DEVICE_AUTOCONNECT);
+ }
+ } else {
+ priv->autoconnect = FALSE;
+ g_object_notify (G_OBJECT (self), NM_DEVICE_AUTOCONNECT);
+ }
}
static gboolean
@@ -1566,6 +1821,14 @@ autoconnect_allowed_accumulator (GSignalInvocationHint *ihint,
return TRUE;
}
+/**
+ * nm_device_autoconnect_allowed:
+ * @self: the #NMDevice
+ *
+ * Returns: %TRUE if the device can be auto-connected immediately, taking
+ * transient conditions into account (like companion devices that may wish to
+ * block autoconnect for a time).
+ */
gboolean
nm_device_autoconnect_allowed (NMDevice *self)
{
@@ -1573,6 +1836,16 @@ nm_device_autoconnect_allowed (NMDevice *self)
GValue instance = G_VALUE_INIT;
GValue retval = G_VALUE_INIT;
+ if (priv->state < NM_DEVICE_STATE_DISCONNECTED || !priv->autoconnect)
+ return FALSE;
+
+ /* The 'autoconnect-allowed' signal is emitted on a device to allow
+ * other listeners to block autoconnect on the device if they wish.
+ * This is mainly used by the OLPC Mesh devices to block autoconnect
+ * on their companion WiFi device as they share radio resources and
+ * cannot be connected at the same time.
+ */
+
g_value_init (&instance, G_TYPE_OBJECT);
g_value_set_object (&instance, self);
@@ -1590,7 +1863,7 @@ nm_device_autoconnect_allowed (NMDevice *self)
}
static gboolean
-can_auto_connect (NMDevice *device,
+can_auto_connect (NMDevice *self,
NMConnection *connection,
char **specific_object)
{
@@ -1600,13 +1873,44 @@ can_auto_connect (NMDevice *device,
if (!nm_setting_connection_get_autoconnect (s_con))
return FALSE;
- return nm_device_connection_is_available (device, connection, FALSE);
+ return nm_device_connection_is_available (self, connection, FALSE);
+}
+
+/**
+ * nm_device_can_auto_connect:
+ * @self: an #NMDevice
+ * @connection: a #NMConnection
+ * @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.
+ *
+ * Checks if @connection can be auto-activated on @self right now.
+ * This requires, at a minimum, that the connection be compatible with
+ * @self, and that it have the #NMSettingConnection:autoconnect property
+ * set, and that the device allow auto connections. Some devices impose
+ * additional requirements. (Eg, a Wi-Fi connection can only be activated
+ * if its SSID was seen in the last scan.)
+ *
+ * Returns: %TRUE, if the @connection can be auto-activated.
+ **/
+gboolean
+nm_device_can_auto_connect (NMDevice *self,
+ NMConnection *connection,
+ char **specific_object)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (self), FALSE);
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE);
+ g_return_val_if_fail (specific_object && !*specific_object, FALSE);
+
+ if (nm_device_autoconnect_allowed (self))
+ return NM_DEVICE_GET_CLASS (self)->can_auto_connect (self, connection, specific_object);
+ return FALSE;
}
static gboolean
-device_has_config (NMDevice *device)
+device_has_config (NMDevice *self)
{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
/* Check for IP configuration. */
if (priv->ip4_config && nm_ip4_config_get_num_addresses (priv->ip4_config))
@@ -1615,7 +1919,7 @@ device_has_config (NMDevice *device)
return TRUE;
/* The existence of a software device is good enough. */
- if (nm_device_is_software (device))
+ if (nm_device_is_software (self))
return TRUE;
/* Slaves are also configured by definition */
@@ -1625,20 +1929,64 @@ device_has_config (NMDevice *device)
return FALSE;
}
+/**
+ * nm_device_master_update_slave_connection:
+ * @self: the master #NMDevice
+ * @slave: the slave #NMDevice
+ * @connection: the #NMConnection to update with the slave settings
+ * @GError: (out): error description
+ *
+ * Reads the slave configuration for @slave and updates @connection with those
+ * properties. This invokes a virtual function on the master device @self.
+ *
+ * Returns: %TRUE if the configuration was read and @connection updated,
+ * %FALSE on failure.
+ */
+gboolean
+nm_device_master_update_slave_connection (NMDevice *self,
+ NMDevice *slave,
+ NMConnection *connection,
+ GError **error)
+{
+ NMDeviceClass *klass;
+ gboolean success;
+
+ g_return_val_if_fail (self, FALSE);
+ g_return_val_if_fail (NM_IS_DEVICE (self), FALSE);
+ g_return_val_if_fail (slave, FALSE);
+ g_return_val_if_fail (connection, FALSE);
+ g_return_val_if_fail (!error || !*error, FALSE);
+ g_return_val_if_fail (nm_connection_get_setting_connection (connection), FALSE);
+
+ g_return_val_if_fail (nm_device_get_iface (self), FALSE);
+
+ klass = NM_DEVICE_GET_CLASS (self);
+ if (klass->master_update_slave_connection) {
+ success = klass->master_update_slave_connection (self, slave, connection, error);
+
+ g_return_val_if_fail (!error || (success && !*error) || *error, success);
+ return success;
+ }
+
+ g_set_error (error,
+ NM_DEVICE_ERROR,
+ NM_DEVICE_ERROR_FAILED,
+ "master device '%s' cannot update a slave connection for slave device '%s' (master type not supported?)",
+ nm_device_get_iface (self), nm_device_get_iface (slave));
+ return FALSE;
+}
+
NMConnection *
-nm_device_generate_connection (NMDevice *device)
+nm_device_generate_connection (NMDevice *self, NMDevice *master)
{
- 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);
+ NMDeviceClass *klass = NM_DEVICE_GET_CLASS (self);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ const char *ifname = nm_device_get_iface (self);
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;
@@ -1647,32 +1995,18 @@ nm_device_generate_connection (NMDevice *device)
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);
+ if (!device_has_config (self)) {
+ _LOGD (LOGD_DEVICE, "device has no existing configuration");
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 ();
+ connection = nm_simple_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_ID, ifname,
NM_SETTING_CONNECTION_AUTOCONNECT, FALSE,
NM_SETTING_CONNECTION_INTERFACE_NAME, ifname,
NM_SETTING_CONNECTION_TIMESTAMP, (guint64) time (NULL),
@@ -1682,36 +2016,18 @@ nm_device_generate_connection (NMDevice *device)
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 (master) {
+ if (!nm_device_master_update_slave_connection (master,
+ self,
+ connection,
+ &error))
+ {
+ _LOGE (LOGD_DEVICE, "master device '%s' failed to update slave connection: %s",
+ nm_device_get_iface (master), error ? error->message : "(unknown error)");
+ g_error_free (error);
+ g_object_unref (connection);
+ return NULL;
}
-
- 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);
@@ -1721,12 +2037,11 @@ nm_device_generate_connection (NMDevice *device)
nm_connection_add_setting (connection, s_ip6);
}
- klass->update_connection (device, connection);
+ klass->update_connection (self, 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);
+ _LOGE (LOGD_DEVICE, "Generated connection does not verify: %s", error->message);
g_clear_error (&error);
g_object_unref (connection);
return NULL;
@@ -1739,8 +2054,9 @@ nm_device_generate_connection (NMDevice *device)
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);
+ && !nm_setting_connection_get_master (NM_SETTING_CONNECTION (s_con))
+ && !priv->slaves) {
+ _LOGD (LOGD_DEVICE, "ignoring generated connection (no IP and not in master-slave relationship)");
g_object_unref (connection);
connection = NULL;
}
@@ -1748,46 +2064,6 @@ nm_device_generate_connection (NMDevice *device)
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,
@@ -1801,7 +2077,7 @@ nm_device_complete_connection (NMDevice *self,
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,
+ g_set_error (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_INVALID_CONNECTION,
"Device class %s had no complete_connection method",
G_OBJECT_TYPE_NAME (self));
return FALSE;
@@ -1819,7 +2095,7 @@ nm_device_complete_connection (NMDevice *self,
}
static gboolean
-check_connection_compatible (NMDevice *device, NMConnection *connection)
+check_connection_compatible (NMDevice *self, NMConnection *connection)
{
NMSettingConnection *s_con;
const char *config_iface, *device_iface;
@@ -1828,7 +2104,7 @@ check_connection_compatible (NMDevice *device, NMConnection *connection)
g_assert (s_con);
config_iface = nm_setting_connection_get_interface_name (s_con);
- device_iface = nm_device_get_iface (device);
+ device_iface = nm_device_get_iface (self);
if (config_iface && strcmp (config_iface, device_iface) != 0)
return FALSE;
@@ -1837,43 +2113,31 @@ check_connection_compatible (NMDevice *device, NMConnection *connection)
/**
* nm_device_check_connection_compatible:
- * @device: an #NMDevice
+ * @self: 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
+ * Checks if @connection could potentially be activated on @self.
+ * This means only that @self 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
+ * necessarily mean that @connection could be activated on @self
* 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.
+ * @self.
*/
gboolean
-nm_device_check_connection_compatible (NMDevice *device, NMConnection *connection)
+nm_device_check_connection_compatible (NMDevice *self, NMConnection *connection)
{
- g_return_val_if_fail (NM_IS_DEVICE (device), FALSE);
+ g_return_val_if_fail (NM_IS_DEVICE (self), 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;
+ return NM_DEVICE_GET_CLASS (self)->check_connection_compatible (self, connection);
}
/**
* nm_device_can_assume_connections:
- * @device: #NMDevice instance
+ * @self: #NMDevice instance
*
* This is a convenience function to determine whether connection assumption
* is available for this device.
@@ -1881,14 +2145,14 @@ string_in_list (const char *str, const char **array, gsize array_len)
* Returns: %TRUE if the device is capable of assuming connections, %FALSE if not
*/
static gboolean
-nm_device_can_assume_connections (NMDevice *device)
+nm_device_can_assume_connections (NMDevice *self)
{
- return !!NM_DEVICE_GET_CLASS (device)->update_connection;
+ return !!NM_DEVICE_GET_CLASS (self)->update_connection;
}
/**
* nm_device_can_assume_active_connection:
- * @device: #NMDevice instance
+ * @self: #NMDevice instance
*
* This is a convenience function to determine whether the device's active
* connection can be assumed if NetworkManager restarts. This method returns
@@ -1900,9 +2164,9 @@ nm_device_can_assume_connections (NMDevice *device)
* assumed.
*/
gboolean
-nm_device_can_assume_active_connection (NMDevice *device)
+nm_device_can_assume_active_connection (NMDevice *self)
{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
NMConnection *connection;
const char *method;
const char *assumable_ip6_methods[] = {
@@ -1911,17 +2175,19 @@ nm_device_can_assume_active_connection (NMDevice *device)
NM_SETTING_IP6_CONFIG_METHOD_DHCP,
NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL,
NM_SETTING_IP6_CONFIG_METHOD_MANUAL,
+ NULL
};
const char *assumable_ip4_methods[] = {
NM_SETTING_IP4_CONFIG_METHOD_DISABLED,
NM_SETTING_IP6_CONFIG_METHOD_AUTO,
NM_SETTING_IP6_CONFIG_METHOD_MANUAL,
+ NULL
};
- if (!nm_device_can_assume_connections (device))
+ if (!nm_device_can_assume_connections (self))
return FALSE;
- connection = nm_device_get_connection (device);
+ connection = nm_device_get_connection (self);
if (!connection)
return FALSE;
@@ -1934,11 +2200,11 @@ nm_device_can_assume_active_connection (NMDevice *device)
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)))
+ if (!_nm_utils_string_in_list (method, 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)))
+ if (!_nm_utils_string_in_list (method, assumable_ip4_methods))
return FALSE;
return TRUE;
@@ -1950,8 +2216,10 @@ 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))
+ if (!nm_device_get_act_request (self)) {
+ _LOGD (LOGD_DEVICE, "emit RECHECK_ASSUME signal");
g_signal_emit (self, signals[RECHECK_ASSUME], 0);
+ }
return G_SOURCE_REMOVE;
}
@@ -2022,9 +2290,8 @@ activation_source_schedule (NMDevice *self, GSourceFunc func, int family)
act_source_func = &priv->act_source_func;
}
- if (*act_source_id) {
- nm_log_err (LOGD_DEVICE, "activation stage already scheduled");
- }
+ if (*act_source_id)
+ _LOGE (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
@@ -2038,12 +2305,11 @@ activation_source_schedule (NMDevice *self, GSourceFunc func, int family)
}
}
-gboolean
-nm_device_ip_config_should_fail (NMDevice *self, gboolean ip6)
+static gboolean
+get_ip_config_may_fail (NMDevice *self, int family)
{
NMConnection *connection;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip = NULL;
g_return_val_if_fail (self != NULL, TRUE);
@@ -2051,17 +2317,18 @@ nm_device_ip_config_should_fail (NMDevice *self, gboolean ip6)
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;
+ switch (family) {
+ case AF_INET:
+ s_ip = nm_connection_get_setting_ip4_config (connection);
+ break;
+ case AF_INET6:
+ s_ip = nm_connection_get_setting_ip6_config (connection);
+ break;
+ default:
+ g_assert_not_reached ();
}
- return FALSE;
+ return nm_setting_ip_config_get_may_fail (s_ip);
}
static void
@@ -2083,9 +2350,8 @@ master_ready_cb (NMActiveConnection *active,
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));
+ _LOGD (LOGD_DEVICE, "master connection ready; master device %s",
+ nm_device_get_iface (priv->master));
if (priv->master_ready_id) {
g_signal_handler_disconnect (active, priv->master_ready_id);
@@ -2112,7 +2378,6 @@ 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);
@@ -2125,8 +2390,7 @@ nm_device_activate_stage1_device_prepare (gpointer user_data)
/* 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);
+ _LOGI (LOGD_DEVICE, "Activation: Stage 1 of 5 (Device Prepare) started...");
nm_device_state_changed (self, NM_DEVICE_STATE_PREPARE, NM_DEVICE_STATE_REASON_NONE);
/* Assumed connections were already set up outside NetworkManager */
@@ -2146,8 +2410,7 @@ nm_device_activate_stage1_device_prepare (gpointer user_data)
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));
+ _LOGD (LOGD_DEVICE, "waiting for master connection to become ready");
/* Attach a signal handler and wait for the master connection to begin activating */
g_assert (priv->master_ready_id == 0);
@@ -2161,7 +2424,7 @@ nm_device_activate_stage1_device_prepare (gpointer user_data)
nm_device_activate_schedule_stage2_device_config (self);
out:
- nm_log_info (LOGD_DEVICE, "Activation (%s) Stage 1 of 5 (Device Prepare) complete.", iface);
+ _LOGI (LOGD_DEVICE, "Activation: Stage 1 of 5 (Device Prepare) complete.");
return FALSE;
}
@@ -2184,12 +2447,11 @@ nm_device_activate_schedule_stage1_device_prepare (NMDevice *self)
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));
+ _LOGI (LOGD_DEVICE, "Activation: Stage 1 of 5 (Device Prepare) scheduled...");
}
static NMActStageReturn
-act_stage2_config (NMDevice *dev, NMDeviceStateReason *reason)
+act_stage2_config (NMDevice *self, NMDeviceStateReason *reason)
{
/* Nothing to do */
return NM_ACT_STAGE_RETURN_SUCCESS;
@@ -2207,7 +2469,6 @@ 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;
@@ -2217,8 +2478,7 @@ nm_device_activate_stage2_device_config (gpointer user_data)
/* 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);
+ _LOGI (LOGD_DEVICE, "Activation: Stage 2 of 5 (Device Configure) starting...");
nm_device_state_changed (self, NM_DEVICE_STATE_CONFIG, NM_DEVICE_STATE_REASON_NONE);
/* Assumed connections were already set up outside NetworkManager */
@@ -2248,17 +2508,17 @@ nm_device_activate_stage2_device_config (gpointer user_data)
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)
+ else if ( nm_device_uses_generated_assumed_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);
+ _LOGI (LOGD_DEVICE, "Activation: Stage 2 of 5 (Device Configure) successful.");
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);
+ _LOGI (LOGD_DEVICE, "Activation: Stage 2 of 5 (Device Configure) complete.");
return FALSE;
}
@@ -2281,8 +2541,7 @@ nm_device_activate_schedule_stage2_device_config (NMDevice *self)
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));
+ _LOGI (LOGD_DEVICE, "Activation: Stage 2 of 5 (Device Configure) scheduled...");
}
/*********************************************/
@@ -2310,13 +2569,7 @@ aipd_cleanup (NMDevice *self)
}
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);
-
+ nm_utils_kill_child_sync (priv->aipd_pid, SIGKILL, LOGD_AUTOIP4, "avahi-autoipd", NULL, 0, 0);
priv->aipd_pid = -1;
}
@@ -2336,15 +2589,15 @@ aipd_get_ip4_config (NMDevice *self, guint32 lla)
memset (&address, 0, sizeof (address));
address.address = lla;
address.plen = 16;
- address.source = NM_PLATFORM_SOURCE_IP4LL;
+ address.source = NM_IP_CONFIG_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);
+ route.source = NM_IP_CONFIG_SOURCE_IP4LL;
+ route.metric = nm_device_get_ip4_route_metric (self);
nm_ip4_config_add_route (config, &route);
return config;
@@ -2360,7 +2613,7 @@ nm_device_handle_autoip4_event (NMDevice *self,
{
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
NMConnection *connection = NULL;
- const char *iface, *method;
+ const char *method;
NMDeviceStateReason reason = NM_DEVICE_STATE_REASON_NONE;
g_return_if_fail (event != NULL);
@@ -2376,29 +2629,25 @@ nm_device_handle_autoip4_event (NMDevice *self,
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);
+ _LOGE (LOGD_AUTOIP4, "invalid address %s received from avahi-autoipd.", 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);
+ _LOGE (LOGD_AUTOIP4, "invalid address %s received from avahi-autoipd (not link-local).", 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");
+ _LOGE (LOGD_AUTOIP4, "failed to get autoip config");
nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE);
return;
}
@@ -2408,8 +2657,7 @@ nm_device_handle_autoip4_event (NMDevice *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));
+ _LOGE (LOGD_AUTOIP4, "failed to update IP4 config for autoip change.");
nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, reason);
}
} else
@@ -2417,8 +2665,7 @@ nm_device_handle_autoip4_event (NMDevice *self,
g_object_unref (config);
} else {
- nm_log_warn (LOGD_AUTOIP4, "(%s): autoip address %s no longer valid because '%s'.",
- iface, address, event);
+ _LOGW (LOGD_AUTOIP4, "autoip address %s no longer valid because '%s'.", 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);
@@ -2431,26 +2678,19 @@ 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);
- }
+ if (WIFEXITED (status))
+ _LOGD (LOGD_AUTOIP4, "avahi-autoipd exited with error code %d", WEXITSTATUS (status));
+ else if (WIFSTOPPED (status))
+ _LOGW (LOGD_AUTOIP4, "avahi-autoipd stopped unexpectedly with signal %d", WSTOPSIG (status));
+ else if (WIFSIGNALED (status))
+ _LOGW (LOGD_AUTOIP4, "avahi-autoipd died with signal %d", WTERMSIG (status));
+ else
+ _LOGW (LOGD_AUTOIP4, "avahi-autoipd died from an unknown cause");
aipd_cleanup (self);
@@ -2466,7 +2706,7 @@ aipd_timeout_cb (gpointer 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));
+ _LOGI (LOGD_AUTOIP4, "avahi-autoipd timed out.");
priv->aipd_timeout = 0;
aipd_cleanup (self);
@@ -2501,63 +2741,51 @@ 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
- };
+ const char *argv[6];
+ char *cmdline;
+ const char *aipd_binary;
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);
+ aipd_binary = nm_utils_find_helper ("avahi-autoipd", NULL, NULL);
+ if (!aipd_binary) {
+ _LOGW (LOGD_DEVICE | LOGD_AUTOIP4,
+ "Activation: Stage 3 of 5 (IP Configure Start) failed"
+ " to start avahi-autoipd: not found");
*reason = NM_DEVICE_STATE_REASON_AUTOIP_START_FAILED;
return NM_ACT_STAGE_RETURN_FAILURE;
}
- argv[i++] = (char *) (*aipd_binary);
+ argv[i++] = aipd_binary;
argv[i++] = "--script";
- argv[i++] = (char *) nm_device_autoipd_helper_path;
+ argv[i++] = 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++] = nm_device_get_ip_iface (self);
argv[i++] = NULL;
- cmdline = g_strjoinv (" ", argv);
- nm_log_dbg (LOGD_AUTOIP4, "running: %s", cmdline);
+ cmdline = g_strjoinv (" ", (char **) argv);
+ _LOGD (LOGD_AUTOIP4, "running: %s", cmdline);
g_free (cmdline);
- if (!g_spawn_async ("/", argv, NULL, G_SPAWN_DO_NOT_REAP_CHILD,
+ if (!g_spawn_async ("/", (char **) 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)");
+ _LOGW (LOGD_DEVICE | LOGD_AUTOIP4,
+ "Activation: Stage 3 of 5 (IP Configure Start) failed"
+ " to start avahi-autoipd: %s",
+ 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);
+ _LOGI (LOGD_DEVICE | LOGD_AUTOIP4,
+ "Activation: Stage 3 of 5 (IP Configure Start) started"
+ " avahi-autoipd...");
/* Monitor the child process so we know when it dies */
priv->aipd_watch = g_child_watch_add (priv->aipd_pid, aipd_watch_cb, self);
@@ -2569,6 +2797,52 @@ aipd_start (NMDevice *self, NMDeviceStateReason *reason)
}
/*********************************************/
+
+static gboolean
+_device_get_default_route_from_platform (NMDevice *self, int addr_family, NMPlatformIPRoute *out_route)
+{
+ gboolean success = FALSE;
+ int ifindex = nm_device_get_ip_ifindex (self);
+ GArray *routes;
+
+ if (addr_family == AF_INET)
+ routes = nm_platform_ip4_route_get_all (ifindex, NM_PLATFORM_GET_ROUTE_MODE_ONLY_DEFAULT);
+ else
+ routes = nm_platform_ip6_route_get_all (ifindex, NM_PLATFORM_GET_ROUTE_MODE_ONLY_DEFAULT);
+
+ if (routes) {
+ guint route_metric = G_MAXUINT32, m;
+ const NMPlatformIPRoute *route = NULL, *r;
+ guint i;
+
+ /* if there are several default routes, find the one with the best metric */
+ for (i = 0; i < routes->len; i++) {
+ if (addr_family == AF_INET) {
+ r = (const NMPlatformIPRoute *) &g_array_index (routes, NMPlatformIP4Route, i);
+ m = r->metric;
+ } else {
+ r = (const NMPlatformIPRoute *) &g_array_index (routes, NMPlatformIP6Route, i);
+ m = nm_utils_ip6_route_metric_normalize (r->metric);
+ }
+ if (!route || m < route_metric) {
+ route = r;
+ route_metric = m;
+ }
+ }
+
+ if (route) {
+ if (addr_family == AF_INET)
+ *((NMPlatformIP4Route *) out_route) = *((NMPlatformIP4Route *) route);
+ else
+ *((NMPlatformIP6Route *) out_route) = *((NMPlatformIP6Route *) route);
+ success = TRUE;
+ }
+ g_array_free (routes, TRUE);
+ }
+ return success;
+}
+
+/*********************************************/
/* DHCPv4 stuff */
static void
@@ -2583,11 +2857,6 @@ dhcp4_cleanup (NMDevice *self, gboolean stop, gboolean release)
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)
@@ -2602,14 +2871,6 @@ dhcp4_cleanup (NMDevice *self, gboolean stop, gboolean release)
}
}
-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,
@@ -2620,6 +2881,7 @@ ip4_config_merge_and_apply (NMDevice *self,
NMConnection *connection;
gboolean success;
NMIP4Config *composite;
+ const guint32 default_route_metric = nm_device_get_ip4_route_metric (self);
/* Merge all the configs into the composite config */
if (config) {
@@ -2635,12 +2897,79 @@ ip4_config_merge_and_apply (NMDevice *self,
if (priv->ext_ip4_config)
nm_ip4_config_merge (composite, priv->ext_ip4_config);
- /* Merge user overrides into the composite config */
+ /* Merge WWAN config *last* to ensure modem-given settings overwrite
+ * any external stuff set by pppd or other scripts.
+ */
+ if (priv->wwan_ip4_config)
+ nm_ip4_config_merge (composite, priv->wwan_ip4_config);
+
+ /* Merge user overrides into the composite config. Generated+assumed
+ * connections come from the system not the user and merging them would
+ * be redundant, so don't bother.
+ */
connection = nm_device_get_connection (self);
+ priv->default_route.v4_has = FALSE;
+ priv->default_route.v4_is_assumed = TRUE;
if (connection) {
- nm_ip4_config_merge_setting (composite,
- nm_connection_get_setting_ip4_config (connection),
- nm_device_get_priority (self));
+ gboolean assumed = nm_device_uses_assumed_connection (self);
+ NMPlatformIP4Route *route = &priv->default_route.v4;
+
+ if (!nm_settings_connection_get_nm_generated_assumed (NM_SETTINGS_CONNECTION (connection))) {
+ nm_ip4_config_merge_setting (composite,
+ nm_connection_get_setting_ip4_config (connection),
+ default_route_metric);
+ }
+
+ /* Add the default route.
+ *
+ * We keep track of the default route of a device in a private field.
+ * NMDevice needs to know the default route at this point, because the gateway
+ * might require a direct route (see below).
+ *
+ * But also, we don't want to add the default route to priv->ip4_config,
+ * because the default route from the setting might not be the same that
+ * NMDefaultRouteManager eventually configures (because the it might
+ * tweak the effective metric).
+ */
+ if ( !assumed
+ && nm_default_route_manager_ip4_connection_has_default_route (nm_default_route_manager_get (), connection)) {
+ guint32 gateway = 0;
+
+ priv->default_route.v4_is_assumed = FALSE;
+ if ( (!commit && priv->ext_ip4_config_had_any_addresses)
+ || ( commit && nm_ip4_config_get_num_addresses (composite))) {
+ /* For managed interfaces, we can only configure a gateway, if either the external config indicates
+ * that we already have addresses, or if we are about to commit any addresses.
+ * Otherwise adding a default route will fail, because NMDefaultRouteManager does not add any
+ * addresses for the route. */
+ gateway = nm_ip4_config_get_gateway (composite);
+ if ( gateway
+ || nm_device_get_device_type (self) == NM_DEVICE_TYPE_MODEM) {
+ memset (route, 0, sizeof (*route));
+ route->source = NM_IP_CONFIG_SOURCE_USER;
+ route->gateway = gateway;
+ route->metric = default_route_metric;
+ route->mss = nm_ip4_config_get_mss (composite);
+ priv->default_route.v4_has = TRUE;
+
+ if ( gateway
+ && !nm_ip4_config_get_subnet_for_host (composite, gateway)
+ && !nm_ip4_config_get_direct_route_for_host (composite, gateway)) {
+ /* add a direct route to the gateway */
+ NMPlatformIP4Route r = *route;
+
+ r.network = gateway;
+ r.plen = 32;
+ r.gateway = 0;
+ nm_ip4_config_add_route (composite, &r);
+ }
+ }
+ }
+ } else {
+ /* For interfaces that are assumed and that have no default-route by configuration, we assume
+ * the default connection and pick up whatever is configured. */
+ priv->default_route.v4_has = _device_get_default_route_from_platform (self, AF_INET, (NMPlatformIPRoute *) route);
+ }
}
/* Allow setting MTU etc */
@@ -2649,7 +2978,7 @@ ip4_config_merge_and_apply (NMDevice *self,
NM_DEVICE_GET_CLASS (self)->ip4_config_pre_commit (self, composite);
}
- success = nm_device_set_ip4_config (self, composite, commit, out_reason);
+ success = nm_device_set_ip4_config (self, composite, default_route_metric, commit, out_reason);
g_object_unref (composite);
return success;
}
@@ -2662,8 +2991,7 @@ dhcp4_lease_change (NMDevice *self, NMIP4Config *config)
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));
+ _LOGW (LOGD_DHCP4, "failed to update IPv4 config for DHCP change.");
nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, reason);
} else {
/* Notify dispatcher scripts of new DHCP4 config */
@@ -2677,94 +3005,93 @@ dhcp4_lease_change (NMDevice *self, NMIP4Config *config)
}
static void
-dhcp4_fail (NMDevice *device, gboolean timeout)
+dhcp4_fail (NMDevice *self, gboolean timeout)
{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
-
- nm_dhcp4_config_reset (priv->dhcp4_config);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ dhcp4_cleanup (self, TRUE, FALSE);
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);
+ nm_device_activate_schedule_ip4_config_timeout (self);
+ else if (priv->ip4_state == IP_DONE)
+ nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED);
+ else
+ g_warn_if_reached ();
+}
+
+static void
+dhcp4_update_config (NMDevice *self, NMDhcp4Config *config, GHashTable *options)
+{
+ GHashTableIter iter;
+ const char *key, *value;
+
+ /* Update the DHCP4 config object with new DHCP options */
+ nm_dhcp4_config_reset (config);
+
+ g_hash_table_iter_init (&iter, options);
+ while (g_hash_table_iter_next (&iter, (gpointer) &key, (gpointer) &value))
+ nm_dhcp4_config_add_option (config, key, value);
+
+ g_object_notify (G_OBJECT (self), NM_DEVICE_DHCP4_CONFIG);
}
static void
-dhcp4_state_changed (NMDHCPClient *client,
- NMDHCPState state,
+dhcp4_state_changed (NMDhcpClient *client,
+ NMDhcpState state,
+ NMIP4Config *ip4_config,
+ GHashTable *options,
gpointer user_data)
{
- NMDevice *device = NM_DEVICE (user_data);
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
- NMIP4Config *config;
+ NMDevice *self = NM_DEVICE (user_data);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
g_return_if_fail (nm_dhcp_client_get_ipv6 (client) == FALSE);
+ g_return_if_fail (!ip4_config || NM_IS_IP4_CONFIG (ip4_config));
- nm_log_dbg (LOGD_DHCP4, "(%s): new DHCPv4 client state %d",
- nm_device_get_iface (device), state);
+ _LOGD (LOGD_DHCP4, "new DHCPv4 client state %d", 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,
+ case NM_DHCP_STATE_BOUND:
+ if (!ip4_config) {
+ _LOGW (LOGD_DHCP4, "failed to get IPv4 config in response to DHCP event.");
+ nm_device_state_changed (self,
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);
+ dhcp4_update_config (self, priv->dhcp4_config, options);
if (priv->ip4_state == IP_CONF)
- nm_device_activate_schedule_ip4_config_result (device, config);
+ nm_device_activate_schedule_ip4_config_result (self, ip4_config);
else if (priv->ip4_state == IP_DONE)
- dhcp4_lease_change (device, config);
- g_object_unref (config);
-
+ dhcp4_lease_change (self, ip4_config);
break;
- case DHC_TIMEOUT: /* timed out contacting DHCP server */
- dhcp4_fail (device, TRUE);
+ case NM_DHCP_STATE_TIMEOUT:
+ dhcp4_fail (self, 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);
+ case NM_DHCP_STATE_EXPIRE:
+ /* Ignore expiry before we even have a lease (NAK, old lease, etc) */
+ if (priv->ip4_state == IP_CONF)
+ break;
+ /* Fall through */
+ case NM_DHCP_STATE_DONE:
+ case NM_DHCP_STATE_FAIL:
+ dhcp4_fail (self, 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;
+ NMSettingIPConfig *s_ip4;
+ const guint8 *hw_addr;
+ size_t hw_addr_len = 0;
GByteArray *tmp = NULL;
s_ip4 = nm_connection_get_setting_ip4_config (connection);
@@ -2774,21 +3101,26 @@ dhcp4_start (NMDevice *self,
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);
+ hw_addr = nm_platform_link_get_address (nm_device_get_ip_ifindex (self), &hw_addr_len);
+ if (hw_addr_len) {
+ tmp = g_byte_array_sized_new (hw_addr_len);
+ g_byte_array_append (tmp, hw_addr, 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),
+ nm_device_get_ip_ifindex (self),
tmp,
nm_connection_get_uuid (connection),
- nm_device_get_priority (self),
- s_ip4,
+ nm_device_get_ip4_route_metric (self),
+ nm_setting_ip_config_get_dhcp_send_hostname (s_ip4),
+ nm_setting_ip_config_get_dhcp_hostname (s_ip4),
+ nm_setting_ip4_config_get_dhcp_client_id (NM_SETTING_IP4_CONFIG (s_ip4)),
priv->dhcp_timeout,
- priv->dhcp_anycast_address);
+ priv->dhcp_anycast_address,
+ NULL);
if (tmp)
g_byte_array_free (tmp, TRUE);
@@ -2802,10 +3134,6 @@ dhcp4_start (NMDevice *self,
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);
@@ -2823,8 +3151,7 @@ nm_device_dhcp4_renew (NMDevice *self, gboolean release)
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));
+ _LOGI (LOGD_DHCP4, "DHCPv4 lease renewal requested");
/* Terminate old DHCP instance and release the old lease */
dhcp4_cleanup (self, TRUE, release);
@@ -2849,20 +3176,20 @@ release_shared_ip (gpointer data)
}
static gboolean
-reserve_shared_ip (NMSettingIP4Config *s_ip4, NMPlatformIP4Address *address)
+reserve_shared_ip (NMDevice *self, NMSettingIPConfig *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)) {
+ if (s_ip4 && nm_setting_ip_config_get_num_addresses (s_ip4)) {
/* Use the first user-supplied address */
- NMIP4Address *user = nm_setting_ip4_config_get_address (s_ip4, 0);
+ NMIPAddress *user = nm_setting_ip_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);
+ nm_ip_address_get_address_binary (user, &address->address);
+ address->plen = nm_ip_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 */
@@ -2871,7 +3198,7 @@ reserve_shared_ip (NMSettingIP4Config *s_ip4, NMPlatformIP4Address *address)
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!");
+ _LOGE (LOGD_SHARING, "ran out of shared IP addresses!");
return FALSE;
}
}
@@ -2894,13 +3221,13 @@ shared4_new_config (NMDevice *self, NMConnection *connection, NMDeviceStateReaso
g_return_val_if_fail (self != NULL, NULL);
- if (!reserve_shared_ip (nm_connection_get_setting_ip4_config (connection), &address)) {
+ if (!reserve_shared_ip (self, 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;
+ address.source = NM_IP_CONFIG_SOURCE_SHARED;
nm_ip4_config_add_address (config, &address);
/* Remove the address lock when the object gets disposed */
@@ -2914,7 +3241,79 @@ shared4_new_config (NMDevice *self, NMConnection *connection, NMDeviceStateReaso
/*********************************************/
static gboolean
-have_any_ready_slaves (NMDevice *device, const GSList *slaves)
+connection_ip4_method_requires_carrier (NMConnection *connection,
+ gboolean *out_ip4_enabled)
+{
+ const char *method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP4_CONFIG);
+ static const char *ip4_carrier_methods[] = {
+ NM_SETTING_IP4_CONFIG_METHOD_AUTO,
+ NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL,
+ NULL
+ };
+
+ if (out_ip4_enabled)
+ *out_ip4_enabled = !!strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED);
+ return _nm_utils_string_in_list (method, ip4_carrier_methods);
+}
+
+static gboolean
+connection_ip6_method_requires_carrier (NMConnection *connection,
+ gboolean *out_ip6_enabled)
+{
+ const char *method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP6_CONFIG);
+ static const char *ip6_carrier_methods[] = {
+ NM_SETTING_IP6_CONFIG_METHOD_AUTO,
+ NM_SETTING_IP6_CONFIG_METHOD_DHCP,
+ NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL,
+ NULL
+ };
+
+ if (out_ip6_enabled)
+ *out_ip6_enabled = !!strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_IGNORE);
+ return _nm_utils_string_in_list (method, ip6_carrier_methods);
+}
+
+static gboolean
+connection_requires_carrier (NMConnection *connection)
+{
+ NMSettingIPConfig *s_ip4, *s_ip6;
+ gboolean ip4_carrier_wanted, ip6_carrier_wanted;
+ gboolean ip4_used = FALSE, ip6_used = FALSE;
+
+ ip4_carrier_wanted = connection_ip4_method_requires_carrier (connection, &ip4_used);
+ if (ip4_carrier_wanted) {
+ /* 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_ip_config_get_may_fail (s_ip4))
+ return TRUE;
+ }
+
+ ip6_carrier_wanted = connection_ip6_method_requires_carrier (connection, &ip6_used);
+ if (ip6_carrier_wanted) {
+ /* 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_ip_config_get_may_fail (s_ip6))
+ return TRUE;
+ }
+
+ /* 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
+have_any_ready_slaves (NMDevice *self, const GSList *slaves)
{
const GSList *iter;
@@ -2955,16 +3354,11 @@ act_stage3_ip4_config_start (NMDevice *self,
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
+ if ( connection_ip4_method_requires_carrier (connection, NULL)
&& 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));
+ _LOGI (LOGD_IP4 | LOGD_DEVICE,
+ "IPv4 config waiting until carrier is on");
return NM_ACT_STAGE_RETURN_WAIT;
}
@@ -2977,13 +3371,14 @@ act_stage3_ip4_config_start (NMDevice *self,
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));
+ _LOGI (LOGD_DEVICE | LOGD_IP4,
+ "IPv4 config waiting until slaves are ready");
return NM_ACT_STAGE_RETURN_WAIT;
}
}
+ method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP4_CONFIG);
+
/* Start IPv4 addressing based on the method requested */
if (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0)
ret = dhcp4_start (self, connection, reason);
@@ -3004,10 +3399,8 @@ act_stage3_ip4_config_start (NMDevice *self,
} 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);
- }
+ } else
+ _LOGW (LOGD_IP4, "unhandled IPv4 config method '%s'; will fail", method);
return ret;
}
@@ -3029,33 +3422,20 @@ dhcp6_cleanup (NMDevice *self, gboolean stop, gboolean release)
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);
}
+ nm_device_remove_pending_action (self, PENDING_ACTION_DHCP6, FALSE);
+
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,
@@ -3080,109 +3460,216 @@ ip6_config_merge_and_apply (NMDevice *self,
if (priv->ext_ip6_config)
nm_ip6_config_merge (composite, priv->ext_ip6_config);
- /* Merge user overrides into the composite config */
+ /* Merge WWAN config *last* to ensure modem-given settings overwrite
+ * any external stuff set by pppd or other scripts.
+ */
+ if (priv->wwan_ip6_config)
+ nm_ip6_config_merge (composite, priv->wwan_ip6_config);
+
+ /* Merge user overrides into the composite config. Generated+assumed
+ * connections come from the system not the user and merging them would
+ * be redundant, so don't bother.
+ */
connection = nm_device_get_connection (self);
+ priv->default_route.v6_has = FALSE;
+ priv->default_route.v6_is_assumed = TRUE;
if (connection) {
- nm_ip6_config_merge_setting (composite,
- nm_connection_get_setting_ip6_config (connection),
- nm_device_get_priority (self));
+ gboolean assumed = nm_device_uses_assumed_connection (self);
+ NMPlatformIP6Route *route = &priv->default_route.v6;
+
+ if (!nm_settings_connection_get_nm_generated_assumed (NM_SETTINGS_CONNECTION (connection))) {
+ nm_ip6_config_merge_setting (composite,
+ nm_connection_get_setting_ip6_config (connection),
+ nm_device_get_ip6_route_metric (self));
+ }
+
+ /* Add the default route.
+ *
+ * We keep track of the default route of a device in a private field.
+ * NMDevice needs to know the default route at this point, because the gateway
+ * might require a direct route (see below).
+ *
+ * But also, we don't want to add the default route to priv->ip4_config,
+ * because the default route from the setting might not be the same that
+ * NMDefaultRouteManager eventually configures (because the it might
+ * tweak the effective metric).
+ */
+ if ( !assumed
+ && nm_default_route_manager_ip6_connection_has_default_route (nm_default_route_manager_get (), connection)) {
+ const struct in6_addr *gateway = NULL;
+
+ priv->default_route.v6_is_assumed = FALSE;
+ if ( (!commit && priv->ext_ip6_config_had_any_addresses)
+ || ( commit && nm_ip6_config_get_num_addresses (composite))) {
+ /* For managed interfaces, we can only configure a gateway, if either the external config indicates
+ * that we already have addresses, or if we are about to commit any addresses.
+ * Otherwise adding a default route will fail, because NMDefaultRouteManager does not add any
+ * addresses for the route. */
+ gateway = nm_ip6_config_get_gateway (composite);
+ if (gateway) {
+ memset (route, 0, sizeof (*route));
+ route->source = NM_IP_CONFIG_SOURCE_USER;
+ route->gateway = *gateway;
+ route->metric = nm_device_get_ip6_route_metric (self);
+ route->mss = nm_ip6_config_get_mss (composite);
+ priv->default_route.v6_has = TRUE;
+
+ if ( gateway
+ && !nm_ip6_config_get_subnet_for_host (composite, gateway)
+ && !nm_ip6_config_get_direct_route_for_host (composite, gateway)) {
+ /* add a direct route to the gateway */
+ NMPlatformIP6Route r = *route;
+
+ r.network = *gateway;
+ r.plen = 128;
+ r.gateway = in6addr_any;
+ nm_ip6_config_add_route (composite, &r);
+ }
+ }
+ }
+ } else {
+ /* For interfaces that are assumed and that have no default-route by configuration, we assume
+ * the default connection and pick up whatever is configured. */
+ priv->default_route.v6_has = _device_get_default_route_from_platform (self, AF_INET6, (NMPlatformIPRoute *) route);
+ }
}
nm_ip6_config_addresses_sort (composite,
priv->rdisc ? priv->rdisc_use_tempaddr : NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN);
+ /* Allow setting MTU etc */
+ if (commit) {
+ if (NM_DEVICE_GET_CLASS (self)->ip6_config_pre_commit)
+ NM_DEVICE_GET_CLASS (self)->ip6_config_pre_commit (self, composite);
+ }
+
success = nm_device_set_ip6_config (self, composite, commit, out_reason);
g_object_unref (composite);
return success;
}
static void
-dhcp6_lease_change (NMDevice *device)
+dhcp6_lease_change (NMDevice *self)
{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
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);
+ _LOGW (LOGD_DHCP6, "failed to get DHCPv6 config for rebind");
+ nm_device_state_changed (self, 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);
+ connection = nm_device_get_connection (self);
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);
+ if (ip6_config_merge_and_apply (self, TRUE, &reason) == FALSE) {
+ _LOGW (LOGD_DHCP6, "failed to update IPv6 config in response to DHCP event.");
+ nm_device_state_changed (self, 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);
+ nm_dispatcher_call (DISPATCHER_ACTION_DHCP6_CHANGE, connection, self, NULL, NULL, NULL);
}
}
static void
-dhcp6_fail (NMDevice *device, gboolean timeout)
+dhcp6_fail (NMDevice *self, gboolean timeout)
{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ dhcp6_cleanup (self, TRUE, FALSE);
+
+ if (priv->dhcp6_mode == NM_RDISC_DHCP_LEVEL_MANAGED) {
+ if (timeout || (priv->ip6_state == IP_CONF))
+ nm_device_activate_schedule_ip6_config_timeout (self);
+ else if (priv->ip6_state == IP_DONE)
+ nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED);
+ else
+ g_warn_if_reached ();
+ } else {
+ /* not a hard failure; just live with the RA info */
+ if (priv->ip6_state == IP_CONF)
+ nm_device_activate_schedule_ip6_config_result (self);
+ }
+}
- nm_dhcp6_config_reset (priv->dhcp6_config);
+static void
+dhcp6_timeout (NMDevice *self, NMDhcpClient *client)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- 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);
+ if (priv->dhcp6_mode == NM_RDISC_DHCP_LEVEL_MANAGED)
+ dhcp6_fail (self, TRUE);
+ else {
+ /* not a hard failure; just live with the RA info */
+ dhcp6_cleanup (self, TRUE, FALSE);
+ if (priv->ip6_state == IP_CONF)
+ nm_device_activate_schedule_ip6_config_result (self);
+ }
}
static void
-dhcp6_state_changed (NMDHCPClient *client,
- NMDHCPState state,
+dhcp6_update_config (NMDevice *self, NMDhcp6Config *config, GHashTable *options)
+{
+ GHashTableIter iter;
+ const char *key, *value;
+
+ /* Update the DHCP6 config object with new DHCP options */
+ nm_dhcp6_config_reset (config);
+
+ g_hash_table_iter_init (&iter, options);
+ while (g_hash_table_iter_next (&iter, (gpointer) &key, (gpointer) &value))
+ nm_dhcp6_config_add_option (config, key, value);
+
+ g_object_notify (G_OBJECT (self), NM_DEVICE_DHCP6_CONFIG);
+}
+
+static void
+dhcp6_state_changed (NMDhcpClient *client,
+ NMDhcpState state,
+ NMIP6Config *ip6_config,
+ GHashTable *options,
gpointer user_data)
{
- NMDevice *device = NM_DEVICE (user_data);
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ NMDevice *self = NM_DEVICE (user_data);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
g_return_if_fail (nm_dhcp_client_get_ipv6 (client) == TRUE);
+ g_return_if_fail (!ip6_config || NM_IS_IP6_CONFIG (ip6_config));
- nm_log_dbg (LOGD_DHCP6, "(%s): new DHCPv6 client state %d",
- nm_device_get_iface (device), state);
+ _LOGD (LOGD_DHCP6, "new DHCPv6 client state %d", 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 */
+ case NM_DHCP_STATE_BOUND:
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);
+ if (ip6_config) {
+ priv->dhcp6_ip6_config = g_object_ref (ip6_config);
+ dhcp6_update_config (self, priv->dhcp6_config, options);
}
- 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);
+ nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_DHCP_FAILED);
break;
}
- nm_device_activate_schedule_ip6_config_result (device);
+ nm_device_activate_schedule_ip6_config_result (self);
} else if (priv->ip6_state == IP_DONE)
- dhcp6_lease_change (device);
+ dhcp6_lease_change (self);
break;
- case DHC_TIMEOUT: /* timed out contacting DHCP server */
- dhcp6_fail (device, TRUE);
+ case NM_DHCP_STATE_TIMEOUT:
+ dhcp6_timeout (self, client);
break;
- case DHC_END: /* dhclient exited normally */
+ case NM_DHCP_STATE_EXPIRE:
+ /* Ignore expiry before we even have a lease (NAK, old lease, etc) */
+ if (priv->ip6_state != IP_CONF)
+ dhcp6_fail (self, FALSE);
+ break;
+ case NM_DHCP_STATE_DONE:
/* 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.
@@ -3190,83 +3677,45 @@ dhcp6_state_changed (NMDHCPClient *client,
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);
+ case NM_DHCP_STATE_FAIL:
+ dhcp6_fail (self, 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)
+static gboolean
+dhcp6_start_with_link_ready (NMDevice *self, NMConnection *connection)
{
- NMSettingIP6Config *s_ip6;
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- NMActStageReturn ret = NM_ACT_STAGE_RETURN_FAILURE;
+ NMSettingIPConfig *s_ip6;
GByteArray *tmp = NULL;
+ const guint8 *hw_addr;
+ size_t hw_addr_len = 0;
- 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;
- }
+ g_assert (connection);
+ s_ip6 = nm_connection_get_setting_ip6_config (connection);
+ g_assert (s_ip6);
- 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);
+ hw_addr = nm_platform_link_get_address (nm_device_get_ip_ifindex (self), &hw_addr_len);
+ if (hw_addr_len) {
+ tmp = g_byte_array_sized_new (hw_addr_len);
+ g_byte_array_append (tmp, hw_addr, hw_addr_len);
}
priv->dhcp6_client = nm_dhcp_manager_start_ip6 (nm_dhcp_manager_get (),
nm_device_get_ip_iface (self),
+ nm_device_get_ip_ifindex (self),
tmp,
nm_connection_get_uuid (connection),
- nm_device_get_priority (self),
- nm_connection_get_setting_ip6_config (connection),
+ nm_device_get_ip6_route_metric (self),
+ nm_setting_ip_config_get_dhcp_send_hostname (s_ip6),
+ nm_setting_ip_config_get_dhcp_hostname (s_ip6),
priv->dhcp_timeout,
priv->dhcp_anycast_address,
- (dhcp_opt == NM_RDISC_DHCP_LEVEL_OTHERCONF) ? TRUE : FALSE);
+ (priv->dhcp6_mode == NM_RDISC_DHCP_LEVEL_OTHERCONF) ? TRUE : FALSE,
+ nm_setting_ip6_config_get_ip6_privacy (NM_SETTING_IP6_CONFIG (s_ip6)));
if (tmp)
g_byte_array_free (tmp, TRUE);
@@ -3275,65 +3724,85 @@ dhcp6_start (NMDevice *self,
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);
+ return !!priv->dhcp6_client;
+}
- /* DHCP devices will be notified by the DHCP manager when stuff happens */
- ret = NM_ACT_STAGE_RETURN_POSTPONE;
- } else {
+static gboolean
+dhcp6_start (NMDevice *self, gboolean wait_for_ll, NMDeviceStateReason *reason)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ NMConnection *connection;
+ NMSettingIPConfig *s_ip6;
+
+ g_clear_object (&priv->dhcp6_config);
+ priv->dhcp6_config = nm_dhcp6_config_new ();
+
+ g_warn_if_fail (priv->dhcp6_ip6_config == NULL);
+ g_clear_object (&priv->dhcp6_ip6_config);
+
+ connection = nm_device_get_connection (self);
+ g_assert (connection);
+ s_ip6 = nm_connection_get_setting_ip6_config (connection);
+ if (!nm_setting_ip_config_get_may_fail (s_ip6) ||
+ !strcmp (nm_setting_ip_config_get_method (s_ip6), NM_SETTING_IP6_CONFIG_METHOD_DHCP))
+ nm_device_add_pending_action (self, PENDING_ACTION_DHCP6, TRUE);
+
+ if (wait_for_ll) {
+ NMActStageReturn ret;
+
+ /* ensure link local is ready... */
+ ret = linklocal6_start (self);
+ if (ret == NM_ACT_STAGE_RETURN_POSTPONE) {
+ /* success; wait for the LL address to show up */
+ return TRUE;
+ }
+
+ /* success; already have the LL address; kick off DHCP */
+ g_assert (ret == NM_ACT_STAGE_RETURN_SUCCESS);
+ }
+
+ if (!dhcp6_start_with_link_ready (self, connection)) {
*reason = NM_DEVICE_STATE_REASON_DHCP_START_FAILED;
- ret = NM_ACT_STAGE_RETURN_FAILURE;
+ return FALSE;
}
- return ret;
+ return TRUE;
}
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));
+ _LOGI (LOGD_DHCP6, "DHCPv6 lease renewal requested");
/* 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);
+ return dhcp6_start (self, FALSE, NULL);
}
/******************************************/
static gboolean
-linklocal6_config_is_ready (const NMIP6Config *ip6_config)
+have_ip6_address (const NMIP6Config *ip6_config, gboolean linklocal)
{
- int i;
+ guint i;
if (!ip6_config)
return FALSE;
+ linklocal = !!linklocal;
+
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) &&
+ if ((IN6_IS_ADDR_LINKLOCAL (&addr->address) == linklocal) &&
!(addr->flags & IFA_F_TENTATIVE))
return TRUE;
}
@@ -3359,8 +3828,7 @@ linklocal6_timeout_cb (gpointer 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));
+ _LOGD (LOGD_DEVICE, "linklocal6: waiting for link-local addresses failed due to timeout");
nm_device_activate_schedule_ip6_config_timeout (self);
return G_SOURCE_REMOVE;
@@ -3374,7 +3842,7 @@ linklocal6_complete (NMDevice *self)
const char *method;
g_assert (priv->linklocal6_timeout_id);
- g_assert (linklocal6_config_is_ready (priv->ip6_config));
+ g_assert (have_ip6_address (priv->ip6_config, TRUE));
linklocal6_cleanup (self);
@@ -3383,17 +3851,70 @@ linklocal6_complete (NMDevice *self)
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);
+ _LOGD (LOGD_DEVICE, "linklocal6: waiting for link-local addresses successful, continue with method %s", 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)
+ if (strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_AUTO) == 0) {
+ if (!addrconf6_start_with_link_ready (self)) {
+ /* Time out IPv6 instead of failing the entire activation */
+ nm_device_activate_schedule_ip6_config_timeout (self);
+ }
+ } else if (strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_DHCP) == 0) {
+ if (!dhcp6_start_with_link_ready (self, connection)) {
+ /* Time out IPv6 instead of failing the entire activation */
+ nm_device_activate_schedule_ip6_config_timeout (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 void
+check_and_add_ipv6ll_addr (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ int ip_ifindex = nm_device_get_ip_ifindex (self);
+ NMUtilsIPv6IfaceId iid;
+ struct in6_addr lladdr;
+ guint i, n;
+
+ if (priv->nm_ipv6ll == FALSE)
+ return;
+
+ if (priv->ip6_config) {
+ n = nm_ip6_config_get_num_addresses (priv->ip6_config);
+ for (i = 0; i < n; i++) {
+ const NMPlatformIP6Address *addr;
+
+ addr = nm_ip6_config_get_address (priv->ip6_config, i);
+ if (IN6_IS_ADDR_LINKLOCAL (&addr->address)) {
+ /* Already have an LL address, nothing to do */
+ return;
+ }
+ }
+ }
+
+ if (!nm_device_get_ip_iface_identifier (self, &iid)) {
+ _LOGW (LOGD_IP6, "failed to get interface identifier; IPv6 may be broken");
+ return;
+ }
+
+ memset (&lladdr, 0, sizeof (lladdr));
+ lladdr.s6_addr16[0] = htons (0xfe80);
+ nm_utils_ipv6_addr_set_interface_identfier (&lladdr, iid);
+ _LOGD (LOGD_IP6, "adding IPv6LL address %s", nm_utils_inet6_ntop (&lladdr, NULL));
+ if (!nm_platform_ip6_address_add (ip_ifindex,
+ lladdr,
+ in6addr_any,
+ 64,
+ NM_PLATFORM_LIFETIME_PERMANENT,
+ NM_PLATFORM_LIFETIME_PERMANENT,
+ 0)) {
+ _LOGW (LOGD_IP6, "failed to add IPv6 link-local address %s",
+ nm_utils_inet6_ntop (&lladdr, NULL));
+ }
+}
+
static NMActStageReturn
linklocal6_start (NMDevice *self)
{
@@ -3403,15 +3924,16 @@ linklocal6_start (NMDevice *self)
linklocal6_cleanup (self);
- if (linklocal6_config_is_ready (priv->ip6_config))
+ if (have_ip6_address (priv->ip6_config, TRUE))
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);
+ _LOGD (LOGD_DEVICE, "linklocal6: starting IPv6 with method '%s', but the device has no link-local addresses configured. Wait.", method);
+
+ check_and_add_ipv6ll_addr (self);
priv->linklocal6_timeout_id = g_timeout_add_seconds (5, linklocal6_timeout_cb, self);
@@ -3468,12 +3990,10 @@ print_support_extended_ifa_flags (NMSettingIP6ConfigPrivacy use_tempaddr)
}
static void
-rdisc_config_changed (NMRDisc *rdisc, NMRDiscConfigMap changed, NMDevice *device)
+rdisc_config_changed (NMRDisc *rdisc, NMRDiscConfigMap changed, NMDevice *self)
{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
- NMConnection *connection;
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
int i;
- NMDeviceStateReason reason;
static int system_support = -1;
guint ifa_flags = 0x00;
@@ -3499,8 +4019,6 @@ rdisc_config_changed (NMRDisc *rdisc, NMRDiscConfigMap changed, NMDevice *device
}
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 ();
@@ -3536,7 +4054,7 @@ rdisc_config_changed (NMRDisc *rdisc, NMRDiscConfigMap changed, NMDevice *device
address.preferred = discovered_address->preferred;
if (address.preferred > address.lifetime)
address.preferred = address.lifetime;
- address.source = NM_PLATFORM_SOURCE_RDISC;
+ address.source = NM_IP_CONFIG_SOURCE_RDISC;
address.flags = ifa_flags;
nm_ip6_config_add_address (priv->ac_ip6_config, &address);
@@ -3560,8 +4078,8 @@ rdisc_config_changed (NMRDisc *rdisc, NMRDiscConfigMap changed, NMDevice *device
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);
+ route.source = NM_IP_CONFIG_SOURCE_RDISC;
+ route.metric = nm_device_get_ip6_route_metric (self);
nm_ip6_config_add_route (priv->ac_ip6_config, &route);
}
@@ -3591,39 +4109,99 @@ rdisc_config_changed (NMRDisc *rdisc, NMRDiscConfigMap changed, NMDevice *device
}
if (changed & NM_RDISC_CONFIG_DHCP_LEVEL) {
- dhcp6_cleanup (device, TRUE, TRUE);
+ dhcp6_cleanup (self, 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 (priv->dhcp6_mode != NM_RDISC_DHCP_LEVEL_NONE) {
+ NMDeviceStateReason reason;
+
+ _LOGI (LOGD_DEVICE | LOGD_DHCP6,
+ "Activation: Stage 3 of 5 (IP Configure Start) starting DHCPv6"
+ " as requested by IPv6 router...");
+ if (!dhcp6_start (self, FALSE, &reason)) {
+ if (priv->dhcp6_mode == NM_RDISC_DHCP_LEVEL_MANAGED)
+ nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, reason);
}
+ return;
}
}
- if (changed & NM_RDISC_CONFIG_HOP_LIMIT) {
+ /* hop_limit == 0 is a special value "unspecified", so do not touch
+ * in this case */
+ if (changed & NM_RDISC_CONFIG_HOP_LIMIT && rdisc->hop_limit > 0) {
char val[16];
g_snprintf (val, sizeof (val), "%d", rdisc->hop_limit);
- nm_device_ipv6_sysctl_set (device, "hop_limit", val);
+ nm_device_ipv6_sysctl_set (self, "hop_limit", val);
}
- nm_device_activate_schedule_ip6_config_result (device);
+ if (changed & NM_RDISC_CONFIG_MTU) {
+ char val[16];
+
+ g_snprintf (val, sizeof (val), "%d", rdisc->mtu);
+ nm_device_ipv6_sysctl_set (self, "mtu", val);
+ }
+
+ nm_device_activate_schedule_ip6_config_result (self);
+}
+
+static void
+rdisc_ra_timeout (NMRDisc *rdisc, NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ /* We don't want to stop listening for router advertisements completely,
+ * but instead let device activation continue activating. If an RA
+ * shows up later, we'll use it as long as the device is not disconnected.
+ */
+
+ _LOGD (LOGD_IP6, "timed out waiting for IPv6 router advertisement");
+ if (priv->ip6_state == IP_CONF) {
+ /* If RA is our only source of addressing information and we don't
+ * ever receive one, then time out IPv6. But if there is other
+ * IPv6 configuration, like manual IPv6 addresses or external IPv6
+ * config, consider that sufficient for IPv6 success.
+ */
+ if (have_ip6_address (priv->ip6_config, FALSE))
+ nm_device_activate_schedule_ip6_config_result (self);
+ else
+ nm_device_activate_schedule_ip6_config_timeout (self);
+ }
+}
+
+static gboolean
+addrconf6_start_with_link_ready (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ NMUtilsIPv6IfaceId iid;
+
+ g_assert (priv->rdisc);
+
+ if (!nm_device_get_ip_iface_identifier (self, &iid)) {
+ _LOGW (LOGD_IP6, "failed to get interface identifier; IPv6 cannot continue");
+ return FALSE;
+ }
+ nm_rdisc_set_iid (priv->rdisc, iid);
+
+ /* Apply any manual configuration before starting RA */
+ if (!ip6_config_merge_and_apply (self, TRUE, NULL))
+ _LOGW (LOGD_IP6, "failed to apply manual IPv6 configuration");
+
+ 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_changed_id = g_signal_connect (priv->rdisc,
+ NM_RDISC_CONFIG_CHANGED,
+ G_CALLBACK (rdisc_config_changed),
+ self);
+ priv->rdisc_timeout_id = g_signal_connect (priv->rdisc,
+ NM_RDISC_RA_TIMEOUT,
+ G_CALLBACK (rdisc_ra_timeout),
+ self);
+ nm_rdisc_start (priv->rdisc);
+ return TRUE;
}
static gboolean
@@ -3645,46 +4223,26 @@ addrconf6_start (NMDevice *self, NMSettingIP6ConfigPrivacy use_tempaddr)
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);
+ _LOGE (LOGD_IP6, "failed to start router discovery (%s)", 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)))
+ if (!nm_setting_ip_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);
+ if (ret == NM_ACT_STAGE_RETURN_POSTPONE) {
+ /* success; wait for the LL address to show up */
+ return TRUE;
+ }
- nm_rdisc_start (priv->rdisc);
+ /* success; already have the LL address; kick off router discovery */
+ g_assert (ret == NM_ACT_STAGE_RETURN_SUCCESS);
+ return addrconf6_start_with_link_ready (self);
}
static void
@@ -3692,10 +4250,14 @@ 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;
+ if (priv->rdisc_changed_id) {
+ g_signal_handler_disconnect (priv->rdisc, priv->rdisc_changed_id);
+ priv->rdisc_changed_id = 0;
+ }
+
+ if (priv->rdisc_timeout_id) {
+ g_signal_handler_disconnect (priv->rdisc, priv->rdisc_timeout_id);
+ priv->rdisc_timeout_id = 0;
}
nm_device_remove_pending_action (self, PENDING_ACTION_AUTOCONF6, FALSE);
@@ -3744,8 +4306,53 @@ restore_ip6_properties (NMDevice *self)
gpointer key, value;
g_hash_table_iter_init (&iter, priv->ip6_saved_properties);
- while (g_hash_table_iter_next (&iter, &key, &value))
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ /* Don't touch "disable_ipv6" if we're doing userland IPv6LL */
+ if (priv->nm_ipv6ll && strcmp (key, "disable_ipv6") == 0)
+ continue;
nm_device_ipv6_sysctl_set (self, key, value);
+ }
+}
+
+static inline void
+set_disable_ipv6 (NMDevice *self, const char *value)
+{
+ /* We only touch disable_ipv6 when NM is not managing the IPv6LL address */
+ if (NM_DEVICE_GET_PRIVATE (self)->nm_ipv6ll == FALSE)
+ nm_device_ipv6_sysctl_set (self, "disable_ipv6", value);
+}
+
+static inline void
+set_nm_ipv6ll (NMDevice *self, gboolean enable)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ int ifindex = nm_device_get_ip_ifindex (self);
+ const char *iface = nm_device_get_ip_iface (self);
+ char *value;
+
+ if (!nm_platform_check_support_user_ipv6ll ())
+ return;
+
+ priv->nm_ipv6ll = enable;
+ if (ifindex > 0) {
+ const char *detail = enable ? "enable" : "disable";
+
+ _LOGD (LOGD_IP6, "will %s userland IPv6LL", detail);
+ if ( !nm_platform_link_set_user_ipv6ll_enabled (ifindex, enable)
+ && nm_platform_get_error () != NM_PLATFORM_ERROR_NOT_FOUND)
+ _LOGW (LOGD_IP6, "failed to %s userspace IPv6LL address handling", detail);
+
+ if (enable) {
+ /* Bounce IPv6 to ensure the kernel stops IPv6LL address generation */
+ value = nm_platform_sysctl_get (nm_utils_ip6_property_path (iface, "disable_ipv6"));
+ if (g_strcmp0 (value, "0") == 0) {
+ nm_device_ipv6_sysctl_set (self, "disable_ipv6", "1");
+ nm_device_ipv6_sysctl_set (self, "disable_ipv6", "0");
+ }
+ g_free (value);
+ }
+
+ }
}
static NMSettingIP6ConfigPrivacy
@@ -3838,15 +4445,11 @@ act_stage3_ip6_config_start (NMDevice *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
+ if ( connection_ip4_method_requires_carrier (connection, NULL)
&& priv->is_master
&& !priv->carrier) {
- nm_log_info (LOGD_IP6 | LOGD_DEVICE,
- "(%s): IPv6 config waiting until carrier is on", ip_iface);
+ _LOGI (LOGD_IP6 | LOGD_DEVICE,
+ "IPv6 config waiting until carrier is on");
return NM_ACT_STAGE_RETURN_WAIT;
}
@@ -3859,23 +4462,41 @@ act_stage3_ip6_config_start (NMDevice *self,
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);
+ _LOGI (LOGD_DEVICE | LOGD_IP6,
+ "IPv6 config waiting until slaves are ready");
return NM_ACT_STAGE_RETURN_WAIT;
}
}
priv->dhcp6_mode = NM_RDISC_DHCP_LEVEL_NONE;
+ method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP6_CONFIG);
+
if (strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_IGNORE) == 0) {
- if (!priv->master)
+ if (!priv->master) {
+ gboolean old_nm_ipv6ll = priv->nm_ipv6ll;
+
+ /* When activating an IPv6 'ignore' connection we need to revert back
+ * to kernel IPv6LL, but the kernel won't actually assign an address
+ * to the interface until disable_ipv6 is bounced.
+ */
+ set_nm_ipv6ll (self, FALSE);
+ if (old_nm_ipv6ll == TRUE)
+ nm_device_ipv6_sysctl_set (self, "disable_ipv6", "1");
restore_ip6_properties (self);
+ }
return NM_ACT_STAGE_RETURN_STOP;
}
+ /* Any method past this point requires an IPv6LL address. Use NM-controlled
+ * IPv6LL if this is not an assumed connection, since assumed connections
+ * will already have IPv6 set up.
+ */
+ if (!nm_device_uses_assumed_connection (self))
+ set_nm_ipv6ll (self, TRUE);
+
/* Re-enable IPv6 on the interface */
- nm_device_ipv6_sysctl_set (self, "disable_ipv6", "0");
+ set_disable_ipv6 (self, "0");
/* Enable/disable IPv6 Privacy Extensions.
* If a global value is configured by sysadmin (e.g. /etc/sysctl.conf),
@@ -3883,10 +4504,10 @@ act_stage3_ip6_config_start (NMDevice *self,
*/
ip6_privacy = ip6_use_tempaddr ();
if (ip6_privacy == NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN) {
- NMSettingIP6Config *s_ip6 = nm_connection_get_setting_ip6_config (connection);
+ NMSettingIPConfig *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 = nm_setting_ip6_config_get_ip6_privacy (NM_SETTING_IP6_CONFIG (s_ip6));
}
ip6_privacy = use_tempaddr_clamp (ip6_privacy);
@@ -3905,17 +4526,19 @@ act_stage3_ip6_config_start (NMDevice *self,
}
} 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);
+ if (!dhcp6_start (self, TRUE, reason)) {
+ /* 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_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);
- }
+ } else
+ _LOGW (LOGD_IP6, "unhandled IPv6 config method '%s'; will fail", method);
/* Other methods (shared) aren't implemented yet */
@@ -4015,6 +4638,42 @@ nm_device_activate_stage3_ip6_start (NMDevice *self)
}
/*
+ * nm_device_check_ip_failed
+ *
+ * Progress the device to appropriate state if both IPv4 and IPv6 failed
+ */
+static void
+nm_device_check_ip_failed (NMDevice *self, gboolean may_fail)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ NMDeviceState state;
+
+ if ( priv->ip4_state != IP_FAIL
+ || priv->ip6_state != IP_FAIL)
+ return;
+
+ if (nm_device_uses_assumed_connection (self)) {
+ /* We have assumed configuration, but couldn't
+ * redo it. No problem, move to check state. */
+ priv->ip4_state = priv->ip6_state = IP_DONE;
+ state = NM_DEVICE_STATE_IP_CHECK;
+ } else if ( may_fail
+ && get_ip_config_may_fail (self, AF_INET)
+ && get_ip_config_may_fail (self, AF_INET6)) {
+ /* Couldn't start either IPv6 and IPv4 autoconfiguration,
+ * but both are allowed to fail. */
+ state = NM_DEVICE_STATE_SECONDARIES;
+ } else {
+ /* Autoconfiguration attempted without success. */
+ state = NM_DEVICE_STATE_FAILED;
+ }
+
+ nm_device_state_changed (self,
+ state,
+ NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE);
+}
+
+/*
* nm_device_activate_stage3_ip_config_start
*
* Begin automatic/manual IP configuration
@@ -4025,7 +4684,6 @@ 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;
@@ -4034,15 +4692,12 @@ nm_device_activate_stage3_ip_config_start (gpointer user_data)
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);
+ _LOGI (LOGD_DEVICE, "Activation: Stage 3 of 5 (IP Configure Start) started...");
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 (!nm_platform_link_is_up (nm_device_get_ip_ifindex (self)))
+ _LOGW (LOGD_DEVICE, "interface %s not up for IP configuration", 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
@@ -4057,10 +4712,9 @@ nm_device_activate_stage3_ip_config_start (gpointer user_data)
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)");
+ _LOGI (LOGD_DEVICE, "Activation: connection '%s' waiting on master '%s'",
+ nm_connection_get_id (nm_device_get_connection (self)),
+ master_device ? nm_device_get_iface (master_device) : "(unknown)");
}
goto out;
}
@@ -4073,13 +4727,10 @@ nm_device_activate_stage3_ip_config_start (gpointer user_data)
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);
- }
+ nm_device_check_ip_failed (self, TRUE);
out:
- nm_log_info (LOGD_DEVICE, "Activation (%s) Stage 3 of 5 (IP Configure Start) complete.", iface);
+ _LOGI (LOGD_DEVICE, "Activation: Stage 3 of 5 (IP Configure Start) complete.");
return FALSE;
}
@@ -4087,8 +4738,14 @@ out:
static void
fw_change_zone_cb (GError *error, gpointer user_data)
{
- NMDevice *self = NM_DEVICE (user_data);
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ NMDevice *self;
+ NMDevicePrivate *priv;
+
+ if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+ return;
+
+ self = NM_DEVICE (user_data);
+ priv = NM_DEVICE_GET_PRIVATE (self);
priv->fw_call = NULL;
@@ -4097,9 +4754,7 @@ fw_change_zone_cb (GError *error, gpointer user_data)
}
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));
+ _LOGI (LOGD_DEVICE, "Activation: Stage 3 of 5 (IP Configure Start) scheduled.");
}
/*
@@ -4120,15 +4775,24 @@ nm_device_activate_schedule_stage3_ip_config_start (NMDevice *self)
priv = NM_DEVICE_GET_PRIVATE (self);
g_return_if_fail (priv->act_request);
+ g_return_if_fail (!priv->fw_call);
+
/* 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,
+
+ if (nm_device_uses_assumed_connection (self)) {
+ _LOGD (LOGD_DEVICE, "Activation: skip setting firewall zone '%s' for assumed device", zone ? zone : "default");
+ activation_source_schedule (self, nm_device_activate_stage3_ip_config_start, 0);
+ _LOGI (LOGD_DEVICE, "Activation: Stage 3 of 5 (IP Configure Start) scheduled.");
+ return;
+ }
+
+ _LOGD (LOGD_DEVICE, "Activation: setting firewall zone '%s'", zone ? zone : "default");
+ priv->fw_call = nm_firewall_manager_add_or_change_zone (nm_firewall_manager_get (),
nm_device_get_ip_iface (self),
zone,
FALSE,
@@ -4139,7 +4803,7 @@ nm_device_activate_schedule_stage3_ip_config_start (NMDevice *self)
static NMActStageReturn
act_stage4_ip4_config_timeout (NMDevice *self, NMDeviceStateReason *reason)
{
- if (nm_device_ip_config_should_fail (self, FALSE)) {
+ if (!get_ip_config_may_fail (self, AF_INET)) {
*reason = NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE;
return NM_ACT_STAGE_RETURN_FAILURE;
}
@@ -4158,17 +4822,14 @@ 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);
+ _LOGI (LOGD_DEVICE | LOGD_IP4,
+ "Activation: Stage 4 of 5 (IPv4 Configure Timeout) started...");
ret = NM_DEVICE_GET_CLASS (self)->act_stage4_ip4_config_timeout (self, &reason);
if (ret == NM_ACT_STAGE_RETURN_POSTPONE)
@@ -4181,16 +4842,11 @@ nm_device_activate_ip4_config_timeout (gpointer user_data)
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);
+ nm_device_check_ip_failed (self, FALSE);
out:
- nm_log_info (LOGD_DEVICE | LOGD_IP4,
- "Activation (%s) Stage 4 of 5 (IPv4 Configure Timeout) complete.",
- iface);
+ _LOGI (LOGD_DEVICE | LOGD_IP4,
+ "Activation: Stage 4 of 5 (IPv4 Configure Timeout) complete.");
return FALSE;
}
@@ -4213,16 +4869,15 @@ nm_device_activate_schedule_ip4_config_timeout (NMDevice *self)
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));
+ _LOGI (LOGD_DEVICE | LOGD_IP4,
+ "Activation: Stage 4 of 5 (IPv4 Configure Timeout) scheduled...");
}
static NMActStageReturn
act_stage4_ip6_config_timeout (NMDevice *self, NMDeviceStateReason *reason)
{
- if (nm_device_ip_config_should_fail (self, TRUE)) {
+ if (!get_ip_config_may_fail (self, AF_INET6)) {
*reason = NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE;
return NM_ACT_STAGE_RETURN_FAILURE;
}
@@ -4242,17 +4897,14 @@ 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);
+ _LOGI (LOGD_DEVICE | LOGD_IP6,
+ "Activation: Stage 4 of 5 (IPv6 Configure Timeout) started...");
ret = NM_DEVICE_GET_CLASS (self)->act_stage4_ip6_config_timeout (self, &reason);
if (ret == NM_ACT_STAGE_RETURN_POSTPONE)
@@ -4265,16 +4917,11 @@ nm_device_activate_ip6_config_timeout (gpointer user_data)
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);
+ nm_device_check_ip_failed (self, FALSE);
out:
- nm_log_info (LOGD_DEVICE | LOGD_IP6,
- "Activation (%s) Stage 4 of 5 (IPv6 Configure Timeout) complete.",
- iface);
+ _LOGI (LOGD_DEVICE | LOGD_IP6,
+ "Activation: Stage 4 of 5 (IPv6 Configure Timeout) complete.");
return FALSE;
}
@@ -4297,9 +4944,8 @@ nm_device_activate_schedule_ip6_config_timeout (NMDevice *self)
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));
+ _LOGI (LOGD_DEVICE | LOGD_IP6,
+ "Activation: Stage 4 of 5 (IPv6 Configure Timeout) scheduled...");
}
static void
@@ -4320,16 +4966,19 @@ share_init (void)
"nf_nat_sip", "nf_nat_tftp", "nf_nat_pptp", "nf_nat_h323",
NULL };
char **iter;
+ int errsv;
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));
+ errsv = errno;
+ nm_log_err (LOGD_SHARING, "share: error starting IP forwarding: (%d) %s",
+ errsv, strerror (errsv));
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));
+ errsv = errno;
+ nm_log_err (LOGD_SHARING, "share: error starting IP forwarding: (%d) %s",
+ errsv, strerror (errsv));
}
for (iter = modules; *iter; iter++) {
@@ -4339,7 +4988,7 @@ share_init (void)
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",
+ nm_log_err (LOGD_SHARING, "share: error loading NAT module %s: (%d) %s",
*iter, error ? error->code : 0,
(error && error->message) ? error->message : "unknown");
if (error)
@@ -4412,9 +5061,8 @@ start_sharing (NMDevice *self, NMIP4Config *config)
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)");
+ _LOGE (LOGD_SHARING, "share: (%s) failed to start dnsmasq: %s",
+ ip_iface, (error && error->message) ? error->message : "(unknown)");
g_error_free (error);
nm_act_request_set_shared (req, FALSE);
return FALSE;
@@ -4429,13 +5077,12 @@ start_sharing (NMDevice *self, NMIP4Config *config)
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 };
+ const char *argv[] = { NULL, 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;
+ NMSettingIPConfig *s_ip4;
int i, num;
- NMIP4Address *addr;
- guint32 ipaddr;
+ NMIPAddress *addr;
GError *error = NULL;
connection = nm_device_get_connection (self);
@@ -4444,24 +5091,33 @@ send_arps (NMDevice *self, const char *mode_arg)
s_ip4 = nm_connection_get_setting_ip4_config (connection);
if (!s_ip4)
return;
- num = nm_setting_ip4_config_get_num_addresses (s_ip4);
+ num = nm_setting_ip_config_get_num_addresses (s_ip4);
+ if (num == 0)
+ return;
+
+ argv[0] = nm_utils_find_helper ("arping", NULL, NULL);
+ if (!argv[0]) {
+ _LOGW (LOGD_DEVICE | LOGD_IP4, "arping could not be found; no ARPs will be sent");
+ return;
+ }
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);
+ gs_free char *tmp_str = NULL;
+ gboolean success;
+
+ addr = nm_setting_ip_config_get_address (s_ip4, i);
+ argv[ip_arg] = nm_ip_address_get_address (addr);
+
+ _LOGD (LOGD_DEVICE | LOGD_IP4,
+ "arping: run %s", (tmp_str = g_strjoinv (" ", (char **) argv)));
+ success = 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 (!success) {
+ _LOGW (LOGD_DEVICE | LOGD_IP4,
+ "arping: could not send ARP for local address %s: %s",
+ argv[ip_arg], error->message);
g_clear_error (&error);
}
}
@@ -4497,7 +5153,7 @@ arp_announce (NMDevice *self)
{
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
NMConnection *connection;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
int num;
arp_cleanup (self);
@@ -4511,7 +5167,7 @@ arp_announce (NMDevice *self)
s_ip4 = nm_connection_get_setting_ip4_config (connection);
if (!s_ip4)
return;
- num = nm_setting_ip4_config_get_num_addresses (s_ip4);
+ num = nm_setting_ip_config_get_num_addresses (s_ip4);
if (num == 0)
return;
@@ -4525,33 +5181,33 @@ 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;
+ const char *method;
NMConnection *connection;
NMDeviceStateReason reason = NM_DEVICE_STATE_REASON_NONE;
+ int ip_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);
+ _LOGI (LOGD_DEVICE, "Activation: Stage 5 of 5 (IPv4 Commit) started...");
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));
+ /* Interface must be IFF_UP before IP config can be applied */
+ ip_ifindex = nm_device_get_ip_ifindex (self);
+ if (!nm_platform_link_is_up (ip_ifindex) && !nm_device_uses_assumed_connection (self)) {
+ nm_platform_link_set_up (ip_ifindex);
+ if (!nm_platform_link_is_up (ip_ifindex))
+ _LOGW (LOGD_DEVICE, "interface %s not up for IP configuration", 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);
+ _LOGI (LOGD_DEVICE | LOGD_IP4,
+ "Activation: Stage 5 of 5 (IPv4 Commit) failed");
nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, reason);
goto out;
}
@@ -4561,7 +5217,7 @@ nm_device_activate_ip4_config_commit (gpointer user_data)
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);
+ _LOGW (LOGD_SHARING, "Activation: Stage 5 of 5 (IPv4 Commit) start sharing failed.");
nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_SHARED_START_FAILED);
goto out;
}
@@ -4593,8 +5249,7 @@ nm_device_activate_ip4_config_commit (gpointer user_data)
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);
+ _LOGI (LOGD_DEVICE, "Activation: Stage 5 of 5 (IPv4 Commit) complete.");
return FALSE;
}
@@ -4605,17 +5260,16 @@ nm_device_activate_schedule_ip4_config_result (NMDevice *self, NMIP4Config *conf
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);
+ if (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));
+ _LOGI (LOGD_DEVICE | LOGD_IP4,
+ "Activation: Stage 5 of 5 (IPv4 Configure Commit) scheduled...");
}
gboolean
@@ -4639,27 +5293,27 @@ nm_device_activate_ip6_config_commit (gpointer 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;
+ int ip_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 (LOGD_DEVICE, level, "Activation (%s) Stage 5 of 5 (IPv6 Commit) started...", iface);
+ _LOG (level, LOGD_DEVICE, "Activation: Stage 5 of 5 (IPv6 Commit) started...");
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);
+ /* Interface must be IFF_UP before IP config can be applied */
+ ip_ifindex = nm_device_get_ip_ifindex (self);
+ if (!nm_platform_link_is_up (ip_ifindex) && !nm_device_uses_assumed_connection (self)) {
+ nm_platform_link_set_up (ip_ifindex);
+ if (!nm_platform_link_is_up (ip_ifindex))
+ _LOGW (LOGD_DEVICE, "interface %s not up for IP configuration", nm_device_get_ip_iface (self));
+ }
if (ip6_config_merge_and_apply (self, TRUE, &reason)) {
/* If IPv6 wasn't the first IP to complete, and DHCP was used,
@@ -4686,13 +5340,12 @@ nm_device_activate_ip6_config_commit (gpointer user_data)
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);
+ _LOGW (LOGD_DEVICE | LOGD_IP6,
+ "Activation: Stage 5 of 5 (IPv6 Commit) failed");
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);
+ _LOG (level, LOGD_DEVICE, "Activation: Stage 5 of 5 (IPv6 Commit) complete.");
return FALSE;
}
@@ -4705,11 +5358,16 @@ nm_device_activate_schedule_ip6_config_result (NMDevice *self)
g_return_if_fail (NM_IS_DEVICE (self));
+ /* If IP had previously failed, move it back to IP_CONF since we
+ * clearly now have configuration.
+ */
+ if (priv->ip6_state == IP_FAIL)
+ priv->ip6_state = IP_CONF;
+
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));
+ _LOG (level, LOGD_DEVICE | LOGD_IP6,
+ "Activation: Stage 5 of 5 (IPv6 Commit) scheduled...");
}
gboolean
@@ -4775,7 +5433,7 @@ _update_ip4_address (NMDevice *self)
fd = socket (PF_INET, SOCK_DGRAM, 0);
if (fd < 0) {
- nm_log_err (LOGD_IP4, "couldn't open control socket.");
+ _LOGE (LOGD_IP4, "couldn't open control socket.");
return;
}
@@ -4790,17 +5448,17 @@ _update_ip4_address (NMDevice *self)
}
gboolean
-nm_device_get_is_nm_owned (NMDevice *device)
+nm_device_get_is_nm_owned (NMDevice *self)
{
- return NM_DEVICE_GET_PRIVATE (device)->is_nm_owned;
+ return NM_DEVICE_GET_PRIVATE (self)->is_nm_owned;
}
void
-nm_device_set_nm_owned (NMDevice *device)
+nm_device_set_nm_owned (NMDevice *self)
{
- g_return_if_fail (NM_IS_DEVICE (device));
+ g_return_if_fail (NM_IS_DEVICE (self));
- NM_DEVICE_GET_PRIVATE (device)->is_nm_owned = TRUE;
+ NM_DEVICE_GET_PRIVATE (self)->is_nm_owned = TRUE;
}
/*
@@ -4814,6 +5472,7 @@ static gboolean
delete_on_deactivate_link_delete (gpointer user_data)
{
DeleteOnDeactivateData *data = user_data;
+ NMDevice *self = data->device;
if (data->device) {
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (data->device);
@@ -4822,8 +5481,8 @@ delete_on_deactivate_link_delete (gpointer user_data)
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);
+ _LOGD (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;
@@ -4841,8 +5500,8 @@ delete_on_deactivate_unschedule (NMDevice *self)
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);
+ _LOGD (LOGD_DEVICE, "delete_on_deactivate: cancel cleanup and delete virtual link #%d (id=%u)",
+ data->ifindex, data->idle_add_id);
g_free (data);
}
}
@@ -4857,6 +5516,8 @@ delete_on_deactivate_check_and_schedule (NMDevice *self, int ifindex)
return;
if (!priv->is_nm_owned)
return;
+ if (priv->queued_act_request)
+ return;
if (!nm_device_is_software (self))
return;
if (nm_device_get_state (self) == NM_DEVICE_STATE_UNMANAGED)
@@ -4872,17 +5533,17 @@ delete_on_deactivate_check_and_schedule (NMDevice *self, int 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);
+ _LOGD (LOGD_DEVICE, "delete_on_deactivate: schedule cleanup and delete virtual link #%d (id=%u)",
+ ifindex, data->idle_add_id);
}
static void
-disconnect_cb (NMDevice *device,
+disconnect_cb (NMDevice *self,
DBusGMethodInvocation *context,
GError *error,
gpointer user_data)
{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
GError *local = NULL;
if (error) {
@@ -4898,9 +5559,9 @@ disconnect_cb (NMDevice *device,
dbus_g_method_return_error (context, local);
g_error_free (local);
} else {
- priv->autoconnect = FALSE;
+ nm_device_set_autoconnect (self, FALSE);
- nm_device_state_changed (device,
+ nm_device_state_changed (self,
NM_DEVICE_STATE_DEACTIVATING,
NM_DEVICE_STATE_REASON_USER_REQUESTED);
dbus_g_method_return (context);
@@ -4908,12 +5569,12 @@ disconnect_cb (NMDevice *device,
}
static void
-impl_device_disconnect (NMDevice *device, DBusGMethodInvocation *context)
+impl_device_disconnect (NMDevice *self, DBusGMethodInvocation *context)
{
NMConnection *connection;
GError *error = NULL;
- if (NM_DEVICE_GET_PRIVATE (device)->act_request == NULL) {
+ if (NM_DEVICE_GET_PRIVATE (self)->act_request == NULL) {
error = g_error_new_literal (NM_DEVICE_ERROR,
NM_DEVICE_ERROR_NOT_ACTIVE,
"This device is not active");
@@ -4922,11 +5583,11 @@ impl_device_disconnect (NMDevice *device, DBusGMethodInvocation *context)
return;
}
- connection = nm_device_get_connection (device);
+ connection = nm_device_get_connection (self);
g_assert (connection);
/* Ask the manager to authenticate this request for us */
- g_signal_emit (device, signals[AUTH_REQUEST], 0,
+ g_signal_emit (self, signals[AUTH_REQUEST], 0,
context,
connection,
NM_AUTH_PERMISSION_NETWORK_CONTROL,
@@ -4936,6 +5597,46 @@ impl_device_disconnect (NMDevice *device, DBusGMethodInvocation *context)
}
static void
+delete_cb (NMDevice *self,
+ DBusGMethodInvocation *context,
+ GError *error,
+ gpointer user_data)
+{
+ if (error) {
+ dbus_g_method_return_error (context, error);
+ return;
+ }
+
+ /* Authorized */
+ nm_platform_link_delete (nm_device_get_ifindex (self));
+ dbus_g_method_return (context);
+}
+
+static void
+impl_device_delete (NMDevice *self, DBusGMethodInvocation *context)
+{
+ GError *error = NULL;
+
+ if (!nm_device_is_software (self)) {
+ error = g_error_new_literal (NM_DEVICE_ERROR,
+ NM_DEVICE_ERROR_NOT_SOFTWARE,
+ "This device is not a software device");
+ dbus_g_method_return_error (context, error);
+ g_error_free (error);
+ return;
+ }
+
+ /* Ask the manager to authenticate this request for us */
+ g_signal_emit (self, signals[AUTH_REQUEST], 0,
+ context,
+ NULL,
+ NM_AUTH_PERMISSION_NETWORK_CONTROL,
+ TRUE,
+ delete_cb,
+ NULL);
+}
+
+static void
_device_activate (NMDevice *self, NMActRequest *req)
{
NMDevicePrivate *priv;
@@ -4949,9 +5650,8 @@ _device_activate (NMDevice *self, NMActRequest *req)
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));
+ _LOGI (LOGD_DEVICE, "Activation: starting connection '%s'",
+ nm_connection_get_id (connection));
delete_on_deactivate_unschedule (self);
@@ -4986,8 +5686,7 @@ nm_device_queue_activation (NMDevice *self, NMActRequest *req)
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));
+ _LOGI (LOGD_DEVICE, "disconnecting for new activation request.");
nm_device_state_changed (self,
NM_DEVICE_STATE_DEACTIVATING,
NM_DEVICE_STATE_REASON_NONE);
@@ -5000,14 +5699,14 @@ nm_device_queue_activation (NMDevice *self, NMActRequest *req)
*
*/
gboolean
-nm_device_is_activating (NMDevice *device)
+nm_device_is_activating (NMDevice *self)
{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
NMDeviceState state;
- g_return_val_if_fail (NM_IS_DEVICE (device), FALSE);
+ g_return_val_if_fail (NM_IS_DEVICE (self), FALSE);
- state = nm_device_get_state (device);
+ state = nm_device_get_state (self);
if (state >= NM_DEVICE_STATE_PREPARE && state <= NM_DEVICE_STATE_SECONDARIES)
return TRUE;
@@ -5021,7 +5720,7 @@ nm_device_is_activating (NMDevice *device)
/* IP Configuration stuff */
-NMDHCP4Config *
+NMDhcp4Config *
nm_device_get_dhcp4_config (NMDevice *self)
{
g_return_val_if_fail (NM_IS_DEVICE (self), NULL);
@@ -5041,6 +5740,7 @@ nm_device_get_ip4_config (NMDevice *self)
static gboolean
nm_device_set_ip4_config (NMDevice *self,
NMIP4Config *new_config,
+ guint32 default_route_metric,
gboolean commit,
NMDeviceStateReason *reason)
{
@@ -5062,7 +5762,12 @@ nm_device_set_ip4_config (NMDevice *self,
/* Always commit to nm-platform to update lifetimes */
if (commit && new_config) {
- success = nm_ip4_config_commit (new_config, ip_ifindex);
+ gboolean assumed = nm_device_uses_assumed_connection (self);
+
+ /* for assumed devices we set the device_route_metric to the default which will
+ * stop nm_platform_ip4_address_sync() to replace the device routes. */
+ success = nm_ip4_config_commit (new_config, ip_ifindex,
+ assumed ? NM_PLATFORM_ROUTE_METRIC_IP4_DEVICE_ROUTE : default_route_metric);
if (!success)
reason_local = NM_DEVICE_STATE_REASON_CONFIG_FAILED;
}
@@ -5073,8 +5778,8 @@ nm_device_set_ip4_config (NMDevice *self,
* 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));
+ _LOGD (LOGD_IP4, "update IP4Config instance (%s)",
+ nm_ip4_config_get_dbus_path (old_config));
}
} else {
has_changes = TRUE;
@@ -5085,18 +5790,20 @@ nm_device_set_ip4_config (NMDevice *self,
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));
+ _LOGD (LOGD_IP4, "set IP4Config instance (%s)",
+ 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));
+ _LOGD (LOGD_IP4, "clear IP4Config instance (%s)",
+ nm_ip4_config_get_dbus_path (old_config));
/* Device config is invalid if combined config is invalid */
g_clear_object (&priv->dev_ip4_config);
}
+ nm_default_route_manager_ip4_update_default_route (nm_default_route_manager_get (), self);
+
if (has_changes) {
_update_ip4_address (self);
@@ -5107,7 +5814,7 @@ nm_device_set_ip4_config (NMDevice *self,
if (old_config != priv->ip4_config && old_config)
g_object_unref (old_config);
- if (nm_device_uses_generated_connection (self)) {
+ if (nm_device_uses_generated_assumed_connection (self)) {
NMConnection *connection = nm_device_get_connection (self);
NMSetting *s_ip4;
@@ -5128,9 +5835,9 @@ nm_device_set_ip4_config (NMDevice *self,
}
void
-nm_device_set_vpn4_config (NMDevice *device, NMIP4Config *config)
+nm_device_set_vpn4_config (NMDevice *self, NMIP4Config *config)
{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
if (priv->vpn4_config == config)
return;
@@ -5140,10 +5847,25 @@ nm_device_set_vpn4_config (NMDevice *device, NMIP4Config *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));
- }
+ if (!ip4_config_merge_and_apply (self, NULL, TRUE, NULL))
+ _LOGW (LOGD_IP4, "failed to set VPN routes for device");
+}
+
+void
+nm_device_set_wwan_ip4_config (NMDevice *self, NMIP4Config *config)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ if (priv->wwan_ip4_config == config)
+ return;
+
+ g_clear_object (&priv->wwan_ip4_config);
+ if (config)
+ priv->wwan_ip4_config = g_object_ref (config);
+
+ /* NULL to use existing configs */
+ if (!ip4_config_merge_and_apply (self, NULL, TRUE, NULL))
+ _LOGW (LOGD_IP4, "failed to set WWAN IPv4 configuration");
}
static gboolean
@@ -5181,8 +5903,8 @@ nm_device_set_ip6_config (NMDevice *self,
* 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));
+ _LOGD (LOGD_IP6, "update IP6Config instance (%s)",
+ nm_ip6_config_get_dbus_path (old_config));
}
} else {
has_changes = TRUE;
@@ -5193,16 +5915,18 @@ nm_device_set_ip6_config (NMDevice *self,
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));
+ _LOGD (LOGD_IP4, "set IP6Config instance (%s)",
+ 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));
+ _LOGD (LOGD_IP6, "clear IP6Config instance (%s)",
+ nm_ip6_config_get_dbus_path (old_config));
}
+ nm_default_route_manager_ip6_update_default_route (nm_default_route_manager_get (), self);
+
if (has_changes) {
if (old_config != priv->ip6_config)
g_object_notify (G_OBJECT (self), NM_DEVICE_IP6_CONFIG);
@@ -5211,7 +5935,7 @@ nm_device_set_ip6_config (NMDevice *self,
if (old_config != priv->ip6_config && old_config)
g_object_unref (old_config);
- if (nm_device_uses_generated_connection (self)) {
+ if (nm_device_uses_generated_assumed_connection (self)) {
NMConnection *connection = nm_device_get_connection (self);
NMSetting *s_ip6;
@@ -5232,9 +5956,9 @@ nm_device_set_ip6_config (NMDevice *self,
}
void
-nm_device_set_vpn6_config (NMDevice *device, NMIP6Config *config)
+nm_device_set_vpn6_config (NMDevice *self, NMIP6Config *config)
{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
if (priv->vpn6_config == config)
return;
@@ -5244,13 +5968,28 @@ nm_device_set_vpn6_config (NMDevice *device, NMIP6Config *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));
- }
+ if (!ip6_config_merge_and_apply (self, TRUE, NULL))
+ _LOGW (LOGD_IP6, "failed to set VPN routes for device");
+}
+
+void
+nm_device_set_wwan_ip6_config (NMDevice *self, NMIP6Config *config)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ if (priv->wwan_ip6_config == config)
+ return;
+
+ g_clear_object (&priv->wwan_ip6_config);
+ if (config)
+ priv->wwan_ip6_config = g_object_ref (config);
+
+ /* NULL to use existing configs */
+ if (!ip6_config_merge_and_apply (self, TRUE, NULL))
+ _LOGW (LOGD_IP6, "failed to set WWAN IPv6 configuration");
}
-NMDHCP6Config *
+NMDhcp6Config *
nm_device_get_dhcp6_config (NMDevice *self)
{
g_return_val_if_fail (NM_IS_DEVICE (self), NULL);
@@ -5336,16 +6075,7 @@ ip_check_gw_ping_cleanup (NMDevice *self)
}
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--);
-
+ nm_utils_kill_child_async (priv->gw_ping.pid, SIGTERM, priv->gw_ping.log_domain, "ping", 1000, NULL, NULL);
priv->gw_ping.pid = 0;
}
}
@@ -5355,7 +6085,6 @@ 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)
@@ -5363,17 +6092,15 @@ ip_check_ping_watch_cb (GPid pid, gint status, gpointer user_data)
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);
+ _LOGD (log_domain, "ping: gateway ping succeeded");
else {
- nm_log_warn (log_domain, "(%s): gateway ping failed with error code %d",
- iface, WEXITSTATUS (status));
+ _LOGW (log_domain, "ping: gateway ping failed with error code %d",
+ WEXITSTATUS (status));
}
} else
- nm_log_warn (log_domain, "(%s): ping stopped unexpectedly with status %d", iface, status);
+ _LOGW (log_domain, "ping: stopped unexpectedly with status %d", status);
/* We've got connectivity, proceed to pre_up */
ip_check_gw_ping_cleanup (self);
@@ -5388,8 +6115,7 @@ ip_check_ping_timeout_cb (gpointer user_data)
priv->gw_ping.timeout = 0;
- nm_log_warn (priv->gw_ping.log_domain, "(%s): gateway ping timed out",
- nm_device_get_iface (self));
+ _LOGW (priv->gw_ping.log_domain, "ping: gateway ping timed out");
ip_check_gw_ping_cleanup (self);
ip_check_pre_up (self);
@@ -5406,7 +6132,8 @@ spawn_ping (NMDevice *self,
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;
+ char *str_timeout;
+ gs_free char *tmp_str = NULL;
gboolean success;
g_return_val_if_fail (priv->gw_ping.watch == 0, FALSE);
@@ -5414,13 +6141,8 @@ spawn_ping (NMDevice *self,
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);
- }
+ _LOGD (log_domain, "ping: running '%s'",
+ (tmp_str = g_strjoinv (" ", (gchar **) args)));
success = g_spawn_async ("/",
(gchar **) args,
@@ -5435,7 +6157,7 @@ spawn_ping (NMDevice *self,
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);
+ _LOGW (log_domain, "ping: could not spawn %s: %s", binary, error->message);
g_clear_error (&error);
}
@@ -5471,7 +6193,7 @@ nm_device_start_ip_check (NMDevice *self)
timeout = nm_setting_connection_get_gateway_ping_timeout (s_con);
if (timeout) {
- if (priv->ip4_state == IP_DONE) {
+ if (priv->ip4_config && priv->ip4_state == IP_DONE) {
guint gw = 0;
ping_binary = "/usr/bin/ping";
@@ -5524,9 +6246,9 @@ nm_device_is_up (NMDevice *self)
}
static gboolean
-is_up (NMDevice *device)
+is_up (NMDevice *self)
{
- int ifindex = nm_device_get_ip_ifindex (device);
+ int ifindex = nm_device_get_ip_ifindex (self);
return ifindex > 0 ? nm_platform_link_is_up (ifindex) : TRUE;
}
@@ -5539,7 +6261,7 @@ nm_device_bring_up (NMDevice *self, gboolean block, gboolean *no_firmware)
g_return_val_if_fail (NM_IS_DEVICE (self), FALSE);
- nm_log_dbg (LOGD_HW, "(%s): bringing up device.", nm_device_get_iface (self));
+ _LOGD (LOGD_HW, "bringing up device.");
if (NM_DEVICE_GET_CLASS (self)->bring_up) {
if (!NM_DEVICE_GET_CLASS (self)->bring_up (self, no_firmware))
@@ -5561,9 +6283,9 @@ nm_device_bring_up (NMDevice *self, gboolean block, gboolean *no_firmware)
if (!device_is_up) {
if (block)
- nm_log_warn (LOGD_HW, "(%s): device not up after timeout!", nm_device_get_iface (self));
+ _LOGW (LOGD_HW, "device not up after timeout!");
else
- nm_log_dbg (LOGD_HW, "(%s): device not up immediately", nm_device_get_iface (self));
+ _LOGD (LOGD_HW, "device not up immediately");
return FALSE;
}
@@ -5589,18 +6311,18 @@ nm_device_bring_up (NMDevice *self, gboolean block, gboolean *no_firmware)
}
static void
-check_carrier (NMDevice *device)
+check_carrier (NMDevice *self)
{
- int ifindex = nm_device_get_ip_ifindex (device);
+ int ifindex = nm_device_get_ip_ifindex (self);
- if (!device_has_capability (device, NM_DEVICE_CAP_NONSTANDARD_CARRIER))
- nm_device_set_carrier (device, nm_platform_link_is_connected (ifindex));
+ if (!device_has_capability (self, NM_DEVICE_CAP_NONSTANDARD_CARRIER))
+ nm_device_set_carrier (self, nm_platform_link_is_connected (ifindex));
}
static gboolean
-bring_up (NMDevice *device, gboolean *no_firmware)
+bring_up (NMDevice *self, gboolean *no_firmware)
{
- int ifindex = nm_device_get_ip_ifindex (device);
+ int ifindex = nm_device_get_ip_ifindex (self);
gboolean result;
if (ifindex <= 0) {
@@ -5614,8 +6336,8 @@ bring_up (NMDevice *device, gboolean *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);
+ if (result && device_has_capability (self, NM_DEVICE_CAP_CARRIER_DETECT))
+ check_carrier (self);
return result;
}
@@ -5627,7 +6349,7 @@ nm_device_take_down (NMDevice *self, gboolean block)
g_return_if_fail (NM_IS_DEVICE (self));
- nm_log_dbg (LOGD_HW, "(%s): taking down device.", nm_device_get_iface (self));
+ _LOGD (LOGD_HW, "taking down device.");
if (NM_DEVICE_GET_CLASS (self)->take_down) {
if (!NM_DEVICE_GET_CLASS (self)->take_down (self))
@@ -5649,22 +6371,22 @@ nm_device_take_down (NMDevice *self, gboolean block)
if (device_is_up) {
if (block)
- nm_log_warn (LOGD_HW, "(%s): device not down after timeout!", nm_device_get_iface (self));
+ _LOGW (LOGD_HW, "device not down after timeout!");
else
- nm_log_dbg (LOGD_HW, "(%s): device not down immediately", nm_device_get_iface (self));
+ _LOGD (LOGD_HW, "device not down immediately");
}
}
static gboolean
-take_down (NMDevice *device)
+take_down (NMDevice *self)
{
- int ifindex = nm_device_get_ip_ifindex (device);
+ int ifindex = nm_device_get_ip_ifindex (self);
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));
+ _LOGD (LOGD_HW, "cannot take down device without ifindex");
return FALSE;
}
@@ -5689,11 +6411,11 @@ nm_device_get_firmware_missing (NMDevice *self)
}
static NMIP4Config *
-find_ip4_lease_config (NMDevice *device,
+find_ip4_lease_config (NMDevice *self,
NMConnection *connection,
NMIP4Config *ext_ip4_config)
{
- const char *ip_iface = nm_device_get_ip_iface (device);
+ const char *ip_iface = nm_device_get_ip_iface (self);
GSList *leases, *liter;
NMIP4Config *found = NULL;
@@ -5703,7 +6425,8 @@ find_ip4_lease_config (NMDevice *device,
leases = nm_dhcp_manager_get_lease_ip_configs (nm_dhcp_manager_get (),
ip_iface,
nm_connection_get_uuid (connection),
- FALSE);
+ FALSE,
+ nm_device_get_ip4_route_metric (self));
for (liter = leases; liter && !found; liter = liter->next) {
NMIP4Config *lease_config = liter->data;
const NMPlatformIP4Address *address = nm_ip4_config_get_address (lease_config, 0);
@@ -5722,13 +6445,13 @@ find_ip4_lease_config (NMDevice *device,
}
static void
-capture_lease_config (NMDevice *device,
+capture_lease_config (NMDevice *self,
NMIP4Config *ext_ip4_config,
NMIP4Config **out_ip4_config,
NMIP6Config *ext_ip6_config,
NMIP6Config **out_ip6_config)
{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
const GSList *connections, *citer;
guint i;
gboolean dhcp_used = FALSE;
@@ -5767,13 +6490,13 @@ capture_lease_config (NMDevice *device,
NMConnection *candidate = citer->data;
const char *method;
- if (!nm_device_check_connection_compatible (device, candidate))
+ if (!nm_device_check_connection_compatible (self, 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);
+ *out_ip4_config = find_ip4_lease_config (self, candidate, ext_ip4_config);
if (*out_ip4_config)
return;
}
@@ -5805,7 +6528,8 @@ update_ip_config (NMDevice *self, gboolean initial)
/* IPv4 */
g_clear_object (&priv->ext_ip4_config);
priv->ext_ip4_config = nm_ip4_config_capture (ifindex, capture_resolv_conf);
-
+ priv->ext_ip4_config_had_any_addresses = ( priv->ext_ip4_config
+ && nm_ip4_config_get_num_addresses (priv->ext_ip4_config) > 0);
if (priv->ext_ip4_config) {
if (initial) {
g_clear_object (&priv->dev_ip4_config);
@@ -5815,6 +6539,8 @@ update_ip_config (NMDevice *self, gboolean initial)
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);
+ if (priv->wwan_ip4_config)
+ nm_ip4_config_subtract (priv->ext_ip4_config, priv->wwan_ip4_config);
ip4_config_merge_and_apply (self, NULL, FALSE, NULL);
}
@@ -5822,16 +6548,20 @@ update_ip_config (NMDevice *self, gboolean initial)
/* 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);
+ priv->ext_ip6_config_had_any_addresses = ( priv->ext_ip6_config
+ && nm_ip6_config_get_num_addresses (priv->ext_ip6_config) > 0);
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);
+ have_ip6_address (priv->ext_ip6_config, TRUE);
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->wwan_ip6_config)
+ nm_ip6_config_subtract (priv->ext_ip6_config, priv->wwan_ip6_config);
if (priv->vpn6_config)
nm_ip6_config_subtract (priv->ext_ip6_config, priv->vpn6_config);
@@ -5847,9 +6577,9 @@ update_ip_config (NMDevice *self, gboolean initial)
}
void
-nm_device_capture_initial_config (NMDevice *dev)
+nm_device_capture_initial_config (NMDevice *self)
{
- update_ip_config (dev, TRUE);
+ update_ip_config (self, TRUE);
}
static gboolean
@@ -5864,22 +6594,33 @@ queued_ip_config_change (gpointer user_data)
priv->queued_ip_config_id = 0;
update_ip_config (self, FALSE);
+
+ /* If no IPv6 link-local address exists but other addresses do then we
+ * must add the LL address to remain conformant with RFC 3513 chapter 2.1
+ * ("Addressing Model"): "All interfaces are required to have at least
+ * one link-local unicast address".
+ */
+ if (priv->ip6_config && nm_ip6_config_get_num_addresses (priv->ip6_config))
+ check_and_add_ipv6ll_addr (self);
+
return FALSE;
}
static void
-device_ip_changed (NMPlatform *platform, int ifindex, gpointer platform_object, NMPlatformSignalChangeType change_type, NMPlatformReason reason, gpointer user_data)
+device_ip_changed (NMPlatform *platform,
+ int ifindex,
+ gpointer platform_object,
+ NMPlatformSignalChangeType change_type,
+ NMPlatformReason reason,
+ NMDevice *self)
{
- NMDevice *self = user_data;
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
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));
+ _LOGD (LOGD_DEVICE, "queued IP config change");
}
}
@@ -5889,8 +6630,7 @@ 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));
+ _LOGD (LOGD_DEVICE, "clearing queued IP config change");
g_source_remove (priv->queued_ip_config_id);
priv->queued_ip_config_id = 0;
}
@@ -5898,19 +6638,19 @@ nm_device_queued_ip_config_change_clear (NMDevice *self)
/**
* nm_device_get_managed():
- * @device: the #NMDevice
+ * @self: the #NMDevice
*
* Returns: %TRUE if the device is managed
*/
gboolean
-nm_device_get_managed (NMDevice *device)
+nm_device_get_managed (NMDevice *self)
{
NMDevicePrivate *priv;
gboolean managed;
- g_return_val_if_fail (NM_IS_DEVICE (device), FALSE);
+ g_return_val_if_fail (NM_IS_DEVICE (self), FALSE);
- priv = NM_DEVICE_GET_PRIVATE (device);
+ priv = NM_DEVICE_GET_PRIVATE (self);
/* Return the composite of all managed flags. However, if the device
* is a default-unmanaged device, and would be managed except for the
@@ -5926,30 +6666,30 @@ nm_device_get_managed (NMDevice *device)
/**
* nm_device_get_unmanaged_flag():
- * @device: the #NMDevice
+ * @self: the #NMDevice
*
* Returns: %TRUE if the device is unmanaged for @flag.
*/
gboolean
-nm_device_get_unmanaged_flag (NMDevice *device, NMUnmanagedFlags flag)
+nm_device_get_unmanaged_flag (NMDevice *self, NMUnmanagedFlags flag)
{
- return NM_DEVICE_GET_PRIVATE (device)->unmanaged_flags & flag;
+ return NM_FLAGS_ANY (NM_DEVICE_GET_PRIVATE (self)->unmanaged_flags, flag);
}
/**
* nm_device_get_default_unmanaged():
- * @device: the #NMDevice
+ * @self: the #NMDevice
*
* Returns: %TRUE if the device is by default unmanaged
*/
static gboolean
-nm_device_get_default_unmanaged (NMDevice *device)
+nm_device_get_default_unmanaged (NMDevice *self)
{
- return nm_device_get_unmanaged_flag (device, NM_UNMANAGED_DEFAULT);
+ return nm_device_get_unmanaged_flag (self, NM_UNMANAGED_DEFAULT);
}
void
-nm_device_set_unmanaged (NMDevice *device,
+nm_device_set_unmanaged (NMDevice *self,
NMUnmanagedFlags flag,
gboolean unmanaged,
NMDeviceStateReason reason)
@@ -5957,42 +6697,40 @@ nm_device_set_unmanaged (NMDevice *device,
NMDevicePrivate *priv;
gboolean was_managed, now_managed;
- g_return_if_fail (NM_IS_DEVICE (device));
+ g_return_if_fail (NM_IS_DEVICE (self));
g_return_if_fail (flag <= NM_UNMANAGED_LAST);
- priv = NM_DEVICE_GET_PRIVATE (device);
+ priv = NM_DEVICE_GET_PRIVATE (self);
- was_managed = nm_device_get_managed (device);
+ was_managed = nm_device_get_managed (self);
if (unmanaged)
priv->unmanaged_flags |= flag;
else
priv->unmanaged_flags &= ~flag;
- now_managed = nm_device_get_managed (device);
+ now_managed = nm_device_get_managed (self);
if (was_managed != now_managed) {
- nm_log_dbg (LOGD_DEVICE, "(%s): now %s",
- nm_device_get_iface (device),
- unmanaged ? "unmanaged" : "managed");
+ _LOGD (LOGD_DEVICE, "now %s", unmanaged ? "unmanaged" : "managed");
- g_object_notify (G_OBJECT (device), NM_DEVICE_MANAGED);
+ g_object_notify (G_OBJECT (self), NM_DEVICE_MANAGED);
if (unmanaged)
- nm_device_state_changed (device, NM_DEVICE_STATE_UNMANAGED, reason);
+ nm_device_state_changed (self, NM_DEVICE_STATE_UNMANAGED, reason);
else
- nm_device_state_changed (device, NM_DEVICE_STATE_UNAVAILABLE, reason);
+ nm_device_state_changed (self, NM_DEVICE_STATE_UNAVAILABLE, reason);
}
}
void
-nm_device_set_unmanaged_quitting (NMDevice *device)
+nm_device_set_unmanaged_quitting (NMDevice *self)
{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
/* 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);
+ if (nm_device_is_activating (self) || priv->state == NM_DEVICE_STATE_ACTIVATED)
+ _set_state_full (self, NM_DEVICE_STATE_DEACTIVATING, NM_DEVICE_STATE_REASON_REMOVED, TRUE);
- nm_device_set_unmanaged (device,
+ nm_device_set_unmanaged (self,
NM_UNMANAGED_INTERNAL,
TRUE,
NM_DEVICE_STATE_REASON_REMOVED);
@@ -6000,26 +6738,26 @@ nm_device_set_unmanaged_quitting (NMDevice *device)
/**
* nm_device_set_initial_unmanaged_flag():
- * @device: the #NMDevice
+ * @self: 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.
+ * Like nm_device_set_unmanaged(), but must be set before the device is
+ * initialized by nm_device_finish_init(), and does not trigger state changes.
+ * Should only be used when initializing a device.
*/
void
-nm_device_set_initial_unmanaged_flag (NMDevice *device,
+nm_device_set_initial_unmanaged_flag (NMDevice *self,
NMUnmanagedFlags flag,
gboolean unmanaged)
{
NMDevicePrivate *priv;
- g_return_if_fail (NM_IS_DEVICE (device));
+ g_return_if_fail (NM_IS_DEVICE (self));
g_return_if_fail (flag <= NM_UNMANAGED_LAST);
- priv = NM_DEVICE_GET_PRIVATE (device);
- g_return_if_fail (priv->path == NULL);
+ priv = NM_DEVICE_GET_PRIVATE (self);
+ g_return_if_fail (priv->initialized == FALSE);
if (unmanaged)
priv->unmanaged_flags |= flag;
@@ -6028,60 +6766,54 @@ nm_device_set_initial_unmanaged_flag (NMDevice *device,
}
void
-nm_device_set_dhcp_timeout (NMDevice *device, guint32 timeout)
+nm_device_set_dhcp_timeout (NMDevice *self, guint32 timeout)
{
- g_return_if_fail (NM_IS_DEVICE (device));
+ g_return_if_fail (NM_IS_DEVICE (self));
- NM_DEVICE_GET_PRIVATE (device)->dhcp_timeout = timeout;
+ NM_DEVICE_GET_PRIVATE (self)->dhcp_timeout = timeout;
}
void
-nm_device_set_dhcp_anycast_address (NMDevice *device, guint8 *addr)
+nm_device_set_dhcp_anycast_address (NMDevice *self, const char *addr)
{
NMDevicePrivate *priv;
- g_return_if_fail (NM_IS_DEVICE (device));
-
- priv = NM_DEVICE_GET_PRIVATE (device);
+ g_return_if_fail (NM_IS_DEVICE (self));
+ g_return_if_fail (!addr || nm_utils_hwaddr_valid (addr, ETH_ALEN));
- if (priv->dhcp_anycast_address) {
- g_byte_array_free (priv->dhcp_anycast_address, TRUE);
- priv->dhcp_anycast_address = NULL;
- }
+ priv = NM_DEVICE_GET_PRIVATE (self);
- if (addr) {
- priv->dhcp_anycast_address = g_byte_array_sized_new (ETH_ALEN);
- g_byte_array_append (priv->dhcp_anycast_address, addr, ETH_ALEN);
- }
+ g_free (priv->dhcp_anycast_address);
+ priv->dhcp_anycast_address = g_strdup (addr);
}
/**
* nm_device_connection_is_available():
- * @device: the #NMDevice
+ * @self: 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.
+ * Check if @connection is available to be activated on @self. Normally this
+ * only checks if the connection is in @self'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
+ * Returns: %TRUE if @connection can be activated on @self
*/
gboolean
-nm_device_connection_is_available (NMDevice *device,
+nm_device_connection_is_available (NMDevice *self,
NMConnection *connection,
gboolean allow_device_override)
{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
gboolean available = FALSE;
- if (nm_device_get_default_unmanaged (device) && (priv->state == NM_DEVICE_STATE_UNMANAGED)) {
+ if (nm_device_get_default_unmanaged (self) && (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))
+ if ( nm_device_check_connection_compatible (self, connection)
+ && NM_DEVICE_GET_CLASS (self)->check_connection_available (self, connection, NULL))
return TRUE;
}
@@ -6092,32 +6824,33 @@ nm_device_connection_is_available (NMDevice *device,
* 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);
+ if ( nm_device_check_connection_compatible (self, connection)
+ && NM_DEVICE_GET_CLASS (self)->check_connection_available_wifi_hidden)
+ available = NM_DEVICE_GET_CLASS (self)->check_connection_available_wifi_hidden (self, connection);
}
return available;
}
static void
-_signal_available_connections_changed (NMDevice *device)
+_signal_available_connections_changed (NMDevice *self)
{
- g_object_notify (G_OBJECT (device), NM_DEVICE_AVAILABLE_CONNECTIONS);
+ g_object_notify (G_OBJECT (self), NM_DEVICE_AVAILABLE_CONNECTIONS);
}
static void
-_clear_available_connections (NMDevice *device, gboolean do_signal)
+_clear_available_connections (NMDevice *self, gboolean do_signal)
{
- g_hash_table_remove_all (NM_DEVICE_GET_PRIVATE (device)->available_connections);
+ g_hash_table_remove_all (NM_DEVICE_GET_PRIVATE (self)->available_connections);
if (do_signal == TRUE)
- _signal_available_connections_changed (device);
+ _signal_available_connections_changed (self);
}
static gboolean
_try_add_available_connection (NMDevice *self, NMConnection *connection)
{
- if (nm_device_get_state (self) < NM_DEVICE_STATE_DISCONNECTED)
+ if ( nm_device_get_state (self) < NM_DEVICE_STATE_DISCONNECTED
+ && !nm_device_get_default_unmanaged (self))
return FALSE;
if (nm_device_check_connection_compatible (self, connection)) {
@@ -6132,98 +6865,49 @@ _try_add_available_connection (NMDevice *self, NMConnection *connection)
}
static gboolean
-_del_available_connection (NMDevice *device, NMConnection *connection)
+_del_available_connection (NMDevice *self, NMConnection *connection)
{
- return g_hash_table_remove (NM_DEVICE_GET_PRIVATE (device)->available_connections, connection);
+ return g_hash_table_remove (NM_DEVICE_GET_PRIVATE (self)->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,
+check_connection_available (NMDevice *self,
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)
+ if (NM_DEVICE_GET_PRIVATE (self)->carrier == FALSE)
return connection_requires_carrier (connection) ? FALSE : TRUE;
return TRUE;
}
void
-nm_device_recheck_available_connections (NMDevice *device)
+nm_device_recheck_available_connections (NMDevice *self)
{
NMDevicePrivate *priv;
const GSList *connections, *iter;
- g_return_if_fail (NM_IS_DEVICE (device));
+ g_return_if_fail (NM_IS_DEVICE (self));
- priv = NM_DEVICE_GET_PRIVATE(device);
+ priv = NM_DEVICE_GET_PRIVATE(self);
if (priv->con_provider) {
- _clear_available_connections (device, FALSE);
+ _clear_available_connections (self, 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));
+ _try_add_available_connection (self, NM_CONNECTION (iter->data));
- _signal_available_connections_changed (device);
+ _signal_available_connections_changed (self);
}
}
/**
* nm_device_get_available_connections:
- * @device: the #NMDevice
+ * @self: the #NMDevice
* @specific_object: a specific object path if any
*
* Returns a list of connections available to activate on the device, taking
@@ -6233,9 +6917,9 @@ nm_device_recheck_available_connections (NMDevice *device)
* Returns: caller-owned #GPtrArray of #NMConnections
*/
GPtrArray *
-nm_device_get_available_connections (NMDevice *device, const char *specific_object)
+nm_device_get_available_connections (NMDevice *self, const char *specific_object)
{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
GHashTableIter iter;
guint num_available;
NMConnection *connection = NULL;
@@ -6250,7 +6934,7 @@ nm_device_get_available_connections (NMDevice *device, const char *specific_obje
* compatible with it.
*/
if ( !specific_object
- || NM_DEVICE_GET_CLASS (device)->check_connection_available (device, connection, specific_object))
+ || NM_DEVICE_GET_CLASS (self)->check_connection_available (self, connection, specific_object))
g_ptr_array_add (array, connection);
}
}
@@ -6286,14 +6970,14 @@ cp_connection_updated (NMConnectionProvider *cp, NMConnection *connection, gpoin
}
gboolean
-nm_device_supports_vlans (NMDevice *device)
+nm_device_supports_vlans (NMDevice *self)
{
- return nm_platform_link_supports_vlans (nm_device_get_ifindex (device));
+ return nm_platform_link_supports_vlans (nm_device_get_ifindex (self));
}
/**
* nm_device_add_pending_action():
- * @device: the #NMDevice to add the pending action to
+ * @self: 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.
@@ -6305,9 +6989,9 @@ nm_device_supports_vlans (NMDevice *device)
* a second time.
*/
gboolean
-nm_device_add_pending_action (NMDevice *device, const char *action, gboolean assert_not_yet_pending)
+nm_device_add_pending_action (NMDevice *self, const char *action, gboolean assert_not_yet_pending)
{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
GSList *iter;
guint count = 0;
@@ -6317,16 +7001,12 @@ nm_device_add_pending_action (NMDevice *device, const char *action, gboolean ass
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);
+ _LOGW (LOGD_DEVICE, "add_pending_action (%d): '%s' already pending",
+ 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);
+ _LOGD (LOGD_DEVICE, "add_pending_action (%d): '%s' already pending (expected)",
+ count + g_slist_length (iter), action);
}
return FALSE;
}
@@ -6336,20 +7016,17 @@ nm_device_add_pending_action (NMDevice *device, const char *action, gboolean ass
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);
+ _LOGD (LOGD_DEVICE, "add_pending_action (%d): '%s'", count, action);
if (count == 1)
- g_object_notify (G_OBJECT (device), NM_DEVICE_HAS_PENDING_ACTION);
+ g_object_notify (G_OBJECT (self), NM_DEVICE_HAS_PENDING_ACTION);
return TRUE;
}
/**
* nm_device_remove_pending_action():
- * @device: the #NMDevice to remove the pending action from
+ * @self: 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
@@ -6360,9 +7037,9 @@ nm_device_add_pending_action (NMDevice *device, const char *action, gboolean ass
* 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)
+nm_device_remove_pending_action (NMDevice *self, const char *action, gboolean assert_is_pending)
{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
GSList *iter;
guint count = 0;
@@ -6370,38 +7047,31 @@ nm_device_remove_pending_action (NMDevice *device, const char *action, gboolean
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);
+ _LOGD (LOGD_DEVICE, "remove_pending_action (%d): '%s'",
+ 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);
+ g_object_notify (G_OBJECT (self), 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);
+ _LOGW (LOGD_DEVICE, "remove_pending_action (%d): '%s' not pending", 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);
- }
+ } else
+ _LOGD (LOGD_DEVICE, "remove_pending_action (%d): '%s' not pending (expected)", count, action);
+
return FALSE;
}
gboolean
-nm_device_has_pending_action (NMDevice *device)
+nm_device_has_pending_action (NMDevice *self)
{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
return !!priv->pending_actions;
}
@@ -6409,25 +7079,41 @@ nm_device_has_pending_action (NMDevice *device)
/***********************************************************/
static void
+_cleanup_ip_pre (NMDevice *self, gboolean deconfigure)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+ priv->ip4_state = priv->ip6_state = IP_NONE;
+ nm_device_queued_ip_config_change_clear (self);
+
+ 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_pre (NMDevice *self, gboolean deconfigure)
{
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ NMConnection *connection;
/* 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;
- }
+ if (priv->fw_call) {
+ nm_firewall_manager_cancel_call (nm_firewall_manager_get (), 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);
- }
+ connection = nm_device_get_connection (self);
+ if ( deconfigure
+ && connection
+ && !nm_device_uses_assumed_connection (self)) {
+ nm_firewall_manager_remove_from_zone (nm_firewall_manager_get (),
+ nm_device_get_ip_iface (self),
+ NULL);
}
ip_check_gw_ping_cleanup (self);
@@ -6438,17 +7124,8 @@ _cleanup_generic_pre (NMDevice *self, gboolean deconfigure)
/* 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);
+ _cleanup_ip_pre (self, deconfigure);
}
static void
@@ -6457,20 +7134,33 @@ _cleanup_generic_post (NMDevice *self, gboolean deconfigure)
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
NMDeviceStateReason ignored = NM_DEVICE_STATE_REASON_NONE;
+ priv->default_route.v4_has = FALSE;
+ priv->default_route.v4_is_assumed = TRUE;
+ priv->default_route.v6_has = FALSE;
+ priv->default_route.v6_is_assumed = TRUE;
+
+ nm_default_route_manager_ip4_update_default_route (nm_default_route_manager_get (), self);
+ nm_default_route_manager_ip6_update_default_route (nm_default_route_manager_get (), self);
+
/* 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_ip4_config (self, NULL, 0, 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->wwan_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->wwan_ip6_config);
g_clear_object (&priv->ip6_config);
+ priv->ext_ip4_config_had_any_addresses = FALSE;
+ priv->ext_ip6_config_had_any_addresses = FALSE;
+
clear_act_request (self);
/* Clear legacy IPv4 address property */
@@ -6507,13 +7197,10 @@ nm_device_cleanup (NMDevice *self, NMDeviceStateReason reason)
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);
- }
+ if (reason == NM_DEVICE_STATE_REASON_NOW_MANAGED)
+ _LOGI (LOGD_DEVICE, "preparing device");
+ else
+ _LOGI (LOGD_DEVICE, "deactivating device (reason '%s') [%d]", reason_to_string (reason), reason);
/* Save whether or not we tried IPv6 for later */
priv = NM_DEVICE_GET_PRIVATE (self);
@@ -6521,7 +7208,7 @@ nm_device_cleanup (NMDevice *self, NMDeviceStateReason reason)
_cleanup_generic_pre (self, TRUE);
/* Turn off kernel IPv6 */
- nm_device_ipv6_sysctl_set (self, "disable_ipv6", "1");
+ set_disable_ipv6 (self, "1");
nm_device_ipv6_sysctl_set (self, "accept_ra", "0");
nm_device_ipv6_sysctl_set (self, "use_tempaddr", "0");
@@ -6547,6 +7234,170 @@ nm_device_cleanup (NMDevice *self, NMDeviceStateReason reason)
_cleanup_generic_post (self, TRUE);
}
+static char *
+bin2hexstr (const char *bytes, gsize len)
+{
+ GString *str;
+ int i;
+
+ g_return_val_if_fail (bytes != NULL, NULL);
+ g_return_val_if_fail (len > 0, NULL);
+
+ str = g_string_sized_new (len * 2 + 1);
+ for (i = 0; i < len; i++) {
+ if (str->len)
+ g_string_append_c (str, ':');
+ g_string_append_printf (str, "%02x", (guint8) bytes[i]);
+ }
+ return g_string_free (str, FALSE);
+}
+
+static char *
+find_dhcp4_address (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ guint i, n;
+
+ if (!priv->ip4_config)
+ return NULL;
+
+ n = nm_ip4_config_get_num_addresses (priv->ip4_config);
+ for (i = 0; i < n; i++) {
+ const NMPlatformIP4Address *a = nm_ip4_config_get_address (priv->ip4_config, i);
+
+ if (a->source == NM_IP_CONFIG_SOURCE_DHCP)
+ return g_strdup (nm_utils_inet4_ntop (a->address, NULL));
+ }
+ return NULL;
+}
+
+void
+nm_device_spawn_iface_helper (NMDevice *self)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ gboolean configured = FALSE;
+ NMConnection *connection;
+ GError *error = NULL;
+ const char *method;
+ GPtrArray *argv;
+ gs_free char *dhcp4_address = NULL;
+
+ if (priv->state != NM_DEVICE_STATE_ACTIVATED)
+ return;
+ if (!nm_device_can_assume_connections (self))
+ return;
+
+ connection = nm_device_get_connection (self);
+ g_assert (connection);
+
+ argv = g_ptr_array_sized_new (10);
+ g_ptr_array_set_free_func (argv, g_free);
+
+ g_ptr_array_add (argv, g_strdup (LIBEXECDIR "/nm-iface-helper"));
+ g_ptr_array_add (argv, g_strdup ("--ifname"));
+ g_ptr_array_add (argv, g_strdup (nm_device_get_ip_iface (self)));
+ g_ptr_array_add (argv, g_strdup ("--uuid"));
+ g_ptr_array_add (argv, g_strdup (nm_connection_get_uuid (connection)));
+
+ dhcp4_address = find_dhcp4_address (self);
+
+ method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP4_CONFIG);
+ if ( priv->ip4_config
+ && priv->ip4_state == IP_DONE
+ && g_strcmp0 (method, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0
+ && priv->dhcp4_client
+ && dhcp4_address) {
+ NMSettingIPConfig *s_ip4;
+ GBytes *client_id;
+ char *hex_client_id;
+ const char *hostname;
+
+ s_ip4 = nm_connection_get_setting_ip4_config (connection);
+ g_assert (s_ip4);
+
+ g_ptr_array_add (argv, g_strdup ("--priority4"));
+ g_ptr_array_add (argv, g_strdup_printf ("%u", nm_device_get_ip4_route_metric (self)));
+
+ g_ptr_array_add (argv, g_strdup ("--dhcp4"));
+ g_ptr_array_add (argv, g_strdup (dhcp4_address));
+ if (nm_setting_ip_config_get_may_fail (s_ip4) == FALSE)
+ g_ptr_array_add (argv, g_strdup ("--dhcp4-required"));
+
+ client_id = nm_dhcp_client_get_client_id (priv->dhcp4_client);
+ if (client_id) {
+ g_ptr_array_add (argv, g_strdup ("--dhcp4-clientid"));
+ hex_client_id = bin2hexstr (g_bytes_get_data (client_id, NULL),
+ g_bytes_get_size (client_id));
+ g_ptr_array_add (argv, hex_client_id);
+ }
+
+ hostname = nm_dhcp_client_get_hostname (priv->dhcp4_client);
+ if (client_id) {
+ g_ptr_array_add (argv, g_strdup ("--dhcp4-hostname"));
+ g_ptr_array_add (argv, g_strdup (hostname));
+ }
+
+ configured = TRUE;
+ }
+
+ method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP6_CONFIG);
+ if ( priv->ip6_config
+ && priv->ip6_state == IP_DONE
+ && g_strcmp0 (method, NM_SETTING_IP6_CONFIG_METHOD_AUTO) == 0
+ && priv->rdisc
+ && priv->ac_ip6_config) {
+ NMSettingIPConfig *s_ip6;
+ char *hex_iid;
+ NMUtilsIPv6IfaceId iid = NM_UTILS_IPV6_IFACE_ID_INIT;
+
+ s_ip6 = nm_connection_get_setting_ip6_config (connection);
+ g_assert (s_ip6);
+
+ g_ptr_array_add (argv, g_strdup ("--priority6"));
+ g_ptr_array_add (argv, g_strdup_printf ("%u", nm_device_get_ip6_route_metric (self)));
+
+ g_ptr_array_add (argv, g_strdup ("--slaac"));
+
+ if (nm_setting_ip_config_get_may_fail (s_ip6) == FALSE)
+ g_ptr_array_add (argv, g_strdup ("--slaac-required"));
+
+ g_ptr_array_add (argv, g_strdup ("--slaac-tempaddr"));
+ g_ptr_array_add (argv, g_strdup_printf ("%d", priv->rdisc_use_tempaddr));
+
+ if (nm_device_get_ip_iface_identifier (self, &iid)) {
+ g_ptr_array_add (argv, g_strdup ("--iid"));
+ hex_iid = bin2hexstr ((const char *) iid.id_u8, sizeof (NMUtilsIPv6IfaceId));
+ g_ptr_array_add (argv, hex_iid);
+ }
+
+ configured = TRUE;
+ }
+
+ if (configured) {
+ GPid pid;
+
+ g_ptr_array_add (argv, NULL);
+
+ if (nm_logging_enabled (LOGL_DEBUG, LOGD_DEVICE)) {
+ char *tmp;
+
+ tmp = g_strjoinv (" ", (char **) argv->pdata);
+ _LOGD (LOGD_DEVICE, "running '%s'", tmp);
+ g_free (tmp);
+ }
+
+ if (g_spawn_async (NULL, (char **) argv->pdata, NULL,
+ G_SPAWN_DO_NOT_REAP_CHILD, NULL, NULL, &pid, &error)) {
+ _LOGI (LOGD_DEVICE, "spawned helper PID %u", (guint) pid);
+ } else {
+ _LOGW (LOGD_DEVICE, "failed to spawn helper: %s", error->message);
+ g_error_free (error);
+ }
+ }
+
+ g_ptr_array_unref (argv);
+}
+
/***********************************************************/
static gboolean
@@ -6558,22 +7409,33 @@ ip_config_valid (NMDeviceState state)
}
static void
-notify_ip_properties (NMDevice *device)
+notify_ip_properties (NMDevice *self)
+{
+ g_object_notify (G_OBJECT (self), NM_DEVICE_IP_IFACE);
+ g_object_notify (G_OBJECT (self), NM_DEVICE_IP4_CONFIG);
+ g_object_notify (G_OBJECT (self), NM_DEVICE_DHCP4_CONFIG);
+ g_object_notify (G_OBJECT (self), NM_DEVICE_IP6_CONFIG);
+ g_object_notify (G_OBJECT (self), NM_DEVICE_DHCP6_CONFIG);
+}
+
+static void
+ip6_managed_setup (NMDevice *self)
{
- 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);
+ set_nm_ipv6ll (self, TRUE);
+ set_disable_ipv6 (self, "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");
+ nm_device_ipv6_sysctl_set (self, "use_tempaddr", "0");
}
static void
-_set_state_full (NMDevice *device,
+_set_state_full (NMDevice *self,
NMDeviceState state,
NMDeviceStateReason reason,
gboolean quitting)
{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
NMDeviceState old_state;
NMActRequest *req;
gboolean no_firmware = FALSE;
@@ -6583,7 +7445,7 @@ _set_state_full (NMDevice *device,
g_warn_if_fail (priv->in_state_changed == FALSE);
priv->in_state_changed = TRUE;
- g_return_if_fail (NM_IS_DEVICE (device));
+ g_return_if_fail (NM_IS_DEVICE (self));
/* 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
@@ -6599,78 +7461,96 @@ _set_state_full (NMDevice *device,
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);
+ _LOGI (LOGD_DEVICE, "device state change: %s -> %s (reason '%s') [%d %d %d]",
+ 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);
+ nm_device_queued_state_clear (self);
- dispatcher_cleanup (device);
+ dispatcher_cleanup (self);
/* 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);
+ _clear_available_connections (self, 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);
+ if ( (state >= NM_DEVICE_STATE_DISCONNECTED && old_state < NM_DEVICE_STATE_DISCONNECTED)
+ || nm_device_get_default_unmanaged (self))
+ nm_device_recheck_available_connections (self);
/* 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);
+ nm_device_set_firmware_missing (self, 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);
+ if (nm_device_get_act_request (self))
+ nm_device_cleanup (self, reason);
+ nm_device_take_down (self, TRUE);
+ set_nm_ipv6ll (self, FALSE);
+ restore_ip6_properties (self);
}
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");
- }
+ save_ip6_properties (self);
+ if (reason != NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED)
+ ip6_managed_setup (self);
}
- 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);
+ if (reason != NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED) {
+ if (old_state == NM_DEVICE_STATE_UNMANAGED || priv->firmware_missing) {
+ if (!nm_device_bring_up (self, TRUE, &no_firmware) && no_firmware)
+ _LOGW (LOGD_HW, "firmware may be missing.");
+ nm_device_set_firmware_missing (self, 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.
+ */
+ nm_device_cleanup (self, reason);
}
- /* 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);
+ if (old_state > NM_DEVICE_STATE_DISCONNECTED) {
+ /* Ensure devices that previously assumed a connection now have
+ * userspace IPv6LL enabled.
+ */
+ set_nm_ipv6ll (self, TRUE);
+
+ nm_device_cleanup (self, reason);
+ } else if (old_state < NM_DEVICE_STATE_DISCONNECTED) {
+ if (reason != NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED) {
+ /* Ensure IPv6 is set up as it may not have been done when
+ * entering the UNAVAILABLE state depending on the reason.
+ */
+ ip6_managed_setup (self);
+ }
+ }
+ break;
+ case NM_DEVICE_STATE_NEED_AUTH:
+ if (old_state > NM_DEVICE_STATE_NEED_AUTH) {
+ /* Clean up any half-done IP operations if the device's layer2
+ * finds out it needs authentication during IP config.
+ */
+ _cleanup_ip_pre (self, TRUE);
+ }
break;
default:
break;
@@ -6679,11 +7559,11 @@ _set_state_full (NMDevice *device,
/* Reset autoconnect flag when the device is activating or connected. */
if ( state >= NM_DEVICE_STATE_PREPARE
&& state <= NM_DEVICE_STATE_ACTIVATED)
- priv->autoconnect = TRUE;
+ nm_device_set_autoconnect (self, 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);
+ g_object_notify (G_OBJECT (self), NM_DEVICE_STATE);
+ g_object_notify (G_OBJECT (self), NM_DEVICE_STATE_REASON);
+ g_signal_emit_by_name (self, "state-changed", state, old_state, reason);
/* Post-process the event after internal notification */
@@ -6695,35 +7575,33 @@ _set_state_full (NMDevice *device,
* 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);
+ if (nm_device_is_available (self)) {
+ _LOGD (LOGD_DEVICE, "device is available, will transition to DISCONNECTED");
+ nm_device_queue_state (self, 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);
+ if (old_state == NM_DEVICE_STATE_UNMANAGED)
+ _LOGD (LOGD_DEVICE, "device not yet available for transition to DISCONNECTED");
+ else if ( old_state > NM_DEVICE_STATE_UNAVAILABLE
+ && nm_device_get_default_unmanaged (self))
+ nm_device_queue_state (self, 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);
+ self);
} 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,
+ self,
dispatcher_complete_proceed_state,
- device,
+ self,
&priv->dispatcher.call_id)) {
/* Just proceed on errors */
- dispatcher_complete_proceed_state (0, device);
+ dispatcher_complete_proceed_state (0, self);
}
}
break;
@@ -6733,26 +7611,32 @@ _set_state_full (NMDevice *device,
queued_req = priv->queued_act_request;
priv->queued_act_request = NULL;
- _device_activate (device, queued_req);
+ _device_activate (self, 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);
+ && nm_device_get_default_unmanaged (self))
+ nm_device_queue_state (self, 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);
+ _LOGI (LOGD_DEVICE, "Activation: successful, device activated.");
+ nm_dispatcher_call (DISPATCHER_ACTION_UP, nm_act_request_get_connection (req), self, 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>");
+ if (nm_device_uses_assumed_connection (self)) {
+ /* Avoid tearing down assumed connection, assume it's connected */
+ nm_device_queue_state (self,
+ NM_DEVICE_STATE_ACTIVATED,
+ NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED);
+ break;
+ }
+
+ connection = nm_device_get_connection (self);
+ _LOGW (LOGD_DEVICE | LOGD_WIFI,
+ "Activation: failed for connection '%s'",
+ connection ? nm_connection_get_id (connection) : "<unknown>");
/* Notify any slaves of the unexpected failure */
- nm_device_master_release_slaves (device);
+ nm_device_master_release_slaves (self);
/* 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
@@ -6769,41 +7653,40 @@ _set_state_full (NMDevice *device,
* 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);
+ nm_device_queue_state (self, NM_DEVICE_STATE_DISCONNECTED, NM_DEVICE_STATE_REASON_NONE);
break;
case NM_DEVICE_STATE_IP_CHECK:
- nm_device_start_ip_check (device);
+ nm_device_start_ip_check (self);
/* 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);
+ notify_ip_properties (self);
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));
+ ip_check_gw_ping_cleanup (self);
+ _LOGD (LOGD_DEVICE, "device entered SECONDARIES state");
break;
default:
break;
}
if (state > NM_DEVICE_STATE_DISCONNECTED)
- delete_on_deactivate_unschedule (device);
+ delete_on_deactivate_unschedule (self);
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);
+ nm_dispatcher_call_sync (DISPATCHER_ACTION_DOWN, nm_act_request_get_connection (req), self);
else
- nm_dispatcher_call (DISPATCHER_ACTION_DOWN, nm_act_request_get_connection (req), device, NULL, NULL, NULL);
+ nm_dispatcher_call (DISPATCHER_ACTION_DOWN, nm_act_request_get_connection (req), self, 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);
+ notify_ip_properties (self);
/* Dispose of the cached activation request */
if (req)
@@ -6813,11 +7696,11 @@ _set_state_full (NMDevice *device,
}
void
-nm_device_state_changed (NMDevice *device,
+nm_device_state_changed (NMDevice *self,
NMDeviceState state,
NMDeviceStateReason reason)
{
- _set_state_full (device, state, reason, FALSE);
+ _set_state_full (self, state, reason, FALSE);
}
static gboolean
@@ -6829,10 +7712,9 @@ queued_set_state (gpointer user_data)
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);
+ _LOGD (LOGD_DEVICE, "running queued state change to %s (id %d)",
+ 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.
@@ -6871,10 +7753,9 @@ nm_device_queue_state (NMDevice *self,
/* 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));
+ _LOGW (LOGD_DEVICE, "overwriting previously queued state change to %s (%s)",
+ state_to_string (priv->queued_state.state),
+ reason_to_string (priv->queued_state.reason));
nm_device_queued_state_clear (self);
}
@@ -6882,9 +7763,9 @@ nm_device_queue_state (NMDevice *self,
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);
+ _LOGD (LOGD_DEVICE, "queued state change to %s due to %s (id %d)",
+ state_to_string (state), reason_to_string (reason),
+ priv->queued_state.id);
}
NMDeviceState
@@ -6905,8 +7786,8 @@ 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);
+ _LOGD (LOGD_DEVICE, "clearing queued state transition (id %d)",
+ 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);
}
@@ -6914,152 +7795,112 @@ nm_device_queued_state_clear (NMDevice *self)
}
NMDeviceState
-nm_device_get_state (NMDevice *device)
+nm_device_get_state (NMDevice *self)
{
- g_return_val_if_fail (NM_IS_DEVICE (device), NM_DEVICE_STATE_UNKNOWN);
+ g_return_val_if_fail (NM_IS_DEVICE (self), NM_DEVICE_STATE_UNKNOWN);
- return NM_DEVICE_GET_PRIVATE (device)->state;
+ return NM_DEVICE_GET_PRIVATE (self)->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)
+const char *
+nm_device_get_hw_address (NMDevice *self)
{
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;
+ g_return_val_if_fail (NM_IS_DEVICE (self), NULL);
+ priv = NM_DEVICE_GET_PRIVATE (self);
- if (priv->hw_addr_len == 0)
- return NULL;
- else
- return priv->hw_addr;
+ return priv->hw_addr_len ? priv->hw_addr : NULL;
}
-gboolean
-nm_device_update_hw_address (NMDevice *dev)
+static void
+nm_device_update_hw_address (NMDevice *self)
{
- 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;
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ int ifindex = nm_device_get_ifindex (self);
+ const guint8 *hwaddr;
+ gsize hwaddrlen = 0;
- if (priv->hw_addr_len) {
- int ifindex = nm_device_get_ip_ifindex (dev);
- gsize addrlen;
- const guint8 *binaddr;
+ if (ifindex <= 0)
+ return;
- g_return_val_if_fail (ifindex > 0, FALSE);
+ hwaddr = nm_platform_link_get_address (ifindex, &hwaddrlen);
- binaddr = nm_platform_link_get_address (ifindex, &addrlen);
+ if (hwaddrlen) {
+ if (!priv->hw_addr || !nm_utils_hwaddr_matches (priv->hw_addr, -1, hwaddr, hwaddrlen)) {
+ g_free (priv->hw_addr);
+ priv->hw_addr = nm_utils_hwaddr_ntoa (hwaddr, hwaddrlen);
- 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);
- }
+ _LOGD (LOGD_HW | LOGD_DEVICE, "hardware address now %s", priv->hw_addr);
+ g_object_notify (G_OBJECT (self), 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);
+ /* Invalid or no hardware address */
+ if (priv->hw_addr_len != 0) {
+ g_clear_pointer (&priv->hw_addr, g_free);
+ _LOGD (LOGD_HW | LOGD_DEVICE,
+ "previous hardware address is no longer valid");
+ g_object_notify (G_OBJECT (self), NM_DEVICE_HW_ADDRESS);
}
}
-
- return changed;
+ priv->hw_addr_len = hwaddrlen;
}
gboolean
-nm_device_set_hw_addr (NMDevice *device, const guint8 *addr,
+nm_device_set_hw_addr (NMDevice *self, const char *addr,
const char *detail, guint64 hw_log_domain)
{
- const char *iface;
- char *mac_str = NULL;
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
gboolean success = FALSE;
- guint len;
- const guint8 *cur_addr = nm_device_get_hw_address (device, &len);
+ const char *cur_addr = nm_device_get_hw_address (self);
+ guint8 addr_bytes[NM_UTILS_HWADDR_LEN_MAX];
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);
+ if (cur_addr && nm_utils_hwaddr_matches (cur_addr, -1, addr, -1)) {
+ _LOGD (LOGD_DEVICE | hw_log_domain, "no MAC address change needed");
return TRUE;
}
-
- mac_str = nm_utils_hwaddr_ntoa_len (addr, len);
+ if (!nm_utils_hwaddr_aton (addr, addr_bytes, priv->hw_addr_len)) {
+ _LOGW (LOGD_DEVICE | hw_log_domain, "invalid MAC address %s", addr);
+ return FALSE;
+ }
/* Can't change MAC address while device is up */
- nm_device_take_down (device, FALSE);
+ nm_device_take_down (self, FALSE);
- success = nm_platform_link_set_address (nm_device_get_ip_ifindex (device), addr, len);
+ success = nm_platform_link_set_address (nm_device_get_ip_ifindex (self), addr_bytes, priv->hw_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);
+ nm_device_update_hw_address (self);
+ cur_addr = nm_device_get_hw_address (self);
+ if (cur_addr && nm_utils_hwaddr_matches (cur_addr, -1, addr, -1)) {
+ _LOGI (LOGD_DEVICE | hw_log_domain, "%s MAC address to %s",
+ detail, addr);
} else {
- nm_log_warn (LOGD_DEVICE | hw_log_domain, "(%s): new MAC address %s "
- "not successfully set",
- iface, mac_str);
+ _LOGW (LOGD_DEVICE | hw_log_domain,
+ "new MAC address %s not successfully set", addr);
success = FALSE;
}
} else {
- nm_log_warn (LOGD_DEVICE | hw_log_domain, "(%s): failed to %s MAC address to %s",
- iface, detail, mac_str);
+ _LOGW (LOGD_DEVICE | hw_log_domain, "failed to %s MAC address to %s",
+ detail, addr);
}
- nm_device_bring_up (device, TRUE, NULL);
- g_free (mac_str);
+ nm_device_bring_up (self, TRUE, NULL);
return success;
}
/**
* nm_device_spec_match_list:
- * @device: an #NMDevice
+ * @self: an #NMDevice
* @specs: (element-type utf8): a list of device specs
*
- * Checks if @device matches any of the specifications in @specs. The
+ * Checks if @self 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
@@ -7073,52 +7914,37 @@ nm_device_set_hw_addr (NMDevice *device, const guint8 *addr,
*
* "*" - matches any device
*
- * Returns: #TRUE if @device matches one of the specs in @specs
+ * Returns: #TRUE if @self matches one of the specs in @specs
*/
gboolean
-nm_device_spec_match_list (NMDevice *device, const GSList *specs)
+nm_device_spec_match_list (NMDevice *self, const GSList *specs)
{
- g_return_val_if_fail (NM_IS_DEVICE (device), FALSE);
+ g_return_val_if_fail (NM_IS_DEVICE (self), FALSE);
if (!specs)
return FALSE;
- return NM_DEVICE_GET_CLASS (device)->spec_match_list (device, specs);
+ return NM_DEVICE_GET_CLASS (self)->spec_match_list (self, specs);
}
static gboolean
-spec_match_list (NMDevice *device, const GSList *specs)
+spec_match_list (NMDevice *self, const GSList *specs)
{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device);
- char *hwaddr_str;
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
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 (priv->hw_addr_len)
+ matched = nm_match_spec_hwaddr (specs, priv->hw_addr);
if (!matched)
- matched = nm_match_spec_interface_name (specs, nm_device_get_iface (device));
+ matched = nm_match_spec_interface_name (specs, nm_device_get_iface (self));
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
@@ -7138,13 +7964,9 @@ nm_device_init (NMDevice *self)
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;
+ priv->default_route.v4_is_assumed = TRUE;
+ priv->default_route.v6_is_assumed = TRUE;
}
/*
@@ -7152,7 +7974,7 @@ nm_device_config_device_interface_init (NMConfigDeviceInterface *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)
+device_get_driver_info (NMDevice *self, const char *iface, char **driver_version, char **firmware_version)
{
struct ethtool_drvinfo drvinfo;
struct ifreq req;
@@ -7160,7 +7982,7 @@ device_get_driver_info (const char *iface, char **driver_version, char **firmwar
fd = socket (PF_INET, SOCK_DGRAM, 0);
if (fd < 0) {
- nm_log_warn (LOGD_HW, "couldn't open control socket.");
+ _LOGW (LOGD_HW, "couldn't open control socket.");
return FALSE;
}
@@ -7173,8 +7995,8 @@ device_get_driver_info (const char *iface, char **driver_version, char **firmwar
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);
+ _LOGD (LOGD_HW, "SIOCETHTOOL ioctl() failed: cmd=ETHTOOL_GDRVINFO, iface=%s, errno=%d",
+ iface, errno);
close (fd);
return FALSE;
}
@@ -7193,7 +8015,7 @@ constructor (GType type,
GObjectConstructParam *construct_params)
{
GObject *object;
- NMDevice *dev;
+ NMDevice *self;
NMDevicePrivate *priv;
NMPlatform *platform;
static guint32 id = 0;
@@ -7204,11 +8026,13 @@ constructor (GType type,
if (!object)
return NULL;
- dev = NM_DEVICE (object);
- priv = NM_DEVICE_GET_PRIVATE (dev);
+ self = NM_DEVICE (object);
+ priv = NM_DEVICE_GET_PRIVATE (self);
+
+ _LOGD (LOGD_DEVICE, "constructor(): %s, kernel ifindex %d", G_OBJECT_TYPE_NAME (self), priv->ifindex);
if (!priv->iface) {
- nm_log_err (LOGD_DEVICE, "No device interface provided, ignoring");
+ _LOGE (LOGD_DEVICE, "No device interface provided, ignoring");
goto error;
}
@@ -7217,52 +8041,60 @@ constructor (GType type,
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);
+ if (NM_DEVICE_GET_CLASS (self)->get_generic_capabilities)
+ priv->capabilities |= NM_DEVICE_GET_CLASS (self)->get_generic_capabilities (self);
- priv->fw_manager = nm_firewall_manager_get ();
+ if (priv->ifindex <= 0 && !device_has_capability (self, NM_DEVICE_CAP_IS_NON_KERNEL))
+ _LOGW (LOGD_HW, "failed to look up interface index");
- device_get_driver_info (priv->iface, &priv->driver_version, &priv->firmware_version);
+ device_get_driver_info (self, 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);
+ g_signal_connect (platform, NM_PLATFORM_SIGNAL_IP4_ADDRESS_CHANGED, G_CALLBACK (device_ip_changed), self);
+ g_signal_connect (platform, NM_PLATFORM_SIGNAL_IP6_ADDRESS_CHANGED, G_CALLBACK (device_ip_changed), self);
+ g_signal_connect (platform, NM_PLATFORM_SIGNAL_IP4_ROUTE_CHANGED, G_CALLBACK (device_ip_changed), self);
+ g_signal_connect (platform, NM_PLATFORM_SIGNAL_IP6_ROUTE_CHANGED, G_CALLBACK (device_ip_changed), self);
+ g_signal_connect (platform, NM_PLATFORM_SIGNAL_LINK_CHANGED, G_CALLBACK (link_changed_cb), self);
+
+ if (nm_platform_check_support_user_ipv6ll ()) {
+ int ip_ifindex = nm_device_get_ip_ifindex (self);
+
+ if (ip_ifindex > 0)
+ priv->nm_ipv6ll = nm_platform_link_get_user_ipv6ll_enabled (ip_ifindex);
+ }
return object;
error:
- g_object_unref (dev);
+ g_object_unref (self);
return NULL;
}
static void
constructed (GObject *object)
{
- NMDevice *dev = NM_DEVICE (object);
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (dev);
+ NMDevice *self = NM_DEVICE (object);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ int master;
- nm_device_update_hw_address (dev);
+ nm_device_update_hw_address (self);
- 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 (self)->update_permanent_hw_address)
+ NM_DEVICE_GET_CLASS (self)->update_permanent_hw_address (self);
- if (NM_DEVICE_GET_CLASS (dev)->update_initial_hw_address)
- NM_DEVICE_GET_CLASS (dev)->update_initial_hw_address (dev);
+ if (NM_DEVICE_GET_CLASS (self)->update_initial_hw_address)
+ NM_DEVICE_GET_CLASS (self)->update_initial_hw_address (self);
/* 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)" : "");
+ if (device_has_capability (self, NM_DEVICE_CAP_CARRIER_DETECT)) {
+ priv->ignore_carrier = nm_config_get_ignore_carrier (nm_config_get (), self);
+
+ check_carrier (self);
+ _LOGI (LOGD_HW,
+ "carrier is %s%s",
+ priv->carrier ? "ON" : "OFF",
+ priv->ignore_carrier ? " (but ignored)" : "");
} else {
/* Fake online link when carrier detection is not available. */
priv->carrier = TRUE;
@@ -7271,27 +8103,42 @@ constructed (GObject *object)
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);
+ priv->mtu = nm_platform_link_get_mtu (priv->ifindex);
}
+ /* Indicate software device in capabilities. */
+ if (priv->is_software)
+ priv->capabilities |= NM_DEVICE_CAP_IS_SOFTWARE;
- if (priv->ifindex > 0)
- priv->mtu = nm_platform_link_get_mtu (priv->ifindex);
+ /* Enslave ourselves */
+ master = nm_platform_link_get_master (priv->ifindex);
+ if (master)
+ device_set_master (self, master);
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);
+ self);
g_signal_connect (priv->con_provider,
NM_CP_SIGNAL_CONNECTION_REMOVED,
G_CALLBACK (cp_connection_removed),
- dev);
+ self);
g_signal_connect (priv->con_provider,
NM_CP_SIGNAL_CONNECTION_UPDATED,
G_CALLBACK (cp_connection_updated),
- dev);
+ self);
+
+ /* Update default-unmanaged device available connections immediately,
+ * since they don't transition from UNMANAGED (and thus the state handler
+ * doesn't run and update them) until something external happens.
+ */
+ if (nm_device_get_default_unmanaged (self)) {
+ nm_device_set_autoconnect (self, FALSE);
+ nm_device_recheck_available_connections (self);
+ }
G_OBJECT_CLASS (nm_device_parent_class)->constructed (object);
}
@@ -7303,6 +8150,8 @@ dispose (GObject *object)
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
NMPlatform *platform;
+ _LOGD (LOGD_DEVICE, "dispose(): %s", G_OBJECT_TYPE_NAME (self));
+
dispatcher_cleanup (self);
_cleanup_generic_pre (self, FALSE);
@@ -7310,6 +8159,9 @@ dispose (GObject *object)
g_warn_if_fail (priv->slaves == NULL);
g_assert (priv->master_ready_id == 0);
+ /* Let the kernel manage IPv6LL again */
+ set_nm_ipv6ll (self, FALSE);
+
_cleanup_generic_post (self, FALSE);
g_clear_pointer (&priv->ip6_saved_properties, g_hash_table_unref);
@@ -7342,8 +8194,6 @@ dispose (GObject *object)
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);
}
@@ -7353,6 +8203,9 @@ finalize (GObject *object)
NMDevice *self = NM_DEVICE (object);
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ _LOGD (LOGD_DEVICE, "finalize(): %s", G_OBJECT_TYPE_NAME (self));
+
+ g_free (priv->hw_addr);
g_slist_free_full (priv->pending_actions, g_free);
g_clear_pointer (&priv->physical_port_id, g_free);
g_free (priv->udi);
@@ -7363,8 +8216,7 @@ finalize (GObject *object)
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_free (priv->dhcp_anycast_address);
G_OBJECT_CLASS (nm_device_parent_class)->finalize (object);
}
@@ -7373,9 +8225,11 @@ static void
set_property (GObject *object, guint prop_id,
const GValue *value, GParamSpec *pspec)
{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (object);
+ NMDevice *self = NM_DEVICE (object);
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
NMPlatformLink *platform_device;
- const char *hw_addr;
+ const char *hw_addr, *p;
+ guint count;
switch (prop_id) {
case PROP_PLATFORM_DEVICE:
@@ -7386,6 +8240,7 @@ set_property (GObject *object, guint prop_id,
g_free (priv->iface);
priv->iface = g_strdup (platform_device->name);
priv->ifindex = platform_device->ifindex;
+ priv->up = platform_device->up;
g_free (priv->driver);
priv->driver = g_strdup (platform_device->driver);
}
@@ -7399,18 +8254,10 @@ set_property (GObject *object, guint prop_id,
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);
- }
+ priv->ifindex = nm_platform_link_get_ifindex (priv->iface);
+ if (priv->ifindex > 0)
+ priv->up = nm_platform_link_is_up (priv->ifindex);
}
break;
case PROP_DRIVER:
@@ -7434,7 +8281,7 @@ set_property (GObject *object, guint prop_id,
priv->ip4_address = g_value_get_uint (value);
break;
case PROP_AUTOCONNECT:
- priv->autoconnect = g_value_get_boolean (value);
+ nm_device_set_autoconnect (self, g_value_get_boolean (value));
break;
case PROP_FIRMWARE_MISSING:
priv->firmware_missing = g_value_get_boolean (value);
@@ -7454,19 +8301,30 @@ set_property (GObject *object, guint prop_id,
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');
+ /* construct only */
+ p = hw_addr = g_value_get_string (value);
+
+ /* Hardware address length is the number of ':' plus 1 */
+ count = 1;
+ while (p && *p) {
+ if (*p++ == ':')
+ count++;
+ }
+ if (count < ETH_ALEN || count > NM_UTILS_HWADDR_LEN_MAX) {
+ if (hw_addr && *hw_addr) {
+ _LOGW (LOGD_DEVICE, "ignoring hardware address '%s' with unexpected length %d",
+ hw_addr, count);
+ }
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));
+ priv->hw_addr_len = count;
+ g_free (priv->hw_addr);
+ if (nm_utils_hwaddr_valid (hw_addr, priv->hw_addr_len))
+ priv->hw_addr = g_strdup (hw_addr);
+ else {
+ _LOGW (LOGD_DEVICE, "could not parse hw-address '%s'", hw_addr);
+ priv->hw_addr = NULL;
}
break;
default:
@@ -7596,10 +8454,7 @@ get_property (GObject *object, guint prop_id,
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);
+ g_value_set_string (value, priv->hw_addr);
break;
case PROP_HAS_PENDING_ACTION:
g_value_set_boolean (value, nm_device_has_pending_action (self));
@@ -7644,257 +8499,226 @@ nm_device_class_init (NMDeviceClass *klass)
klass->bring_up = bring_up;
klass->take_down = take_down;
klass->carrier_changed = carrier_changed;
- klass->get_hw_address_length = get_hw_address_length;
+ klass->get_ip_iface_identifier = get_ip_iface_identifier;
/* 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_param_spec_pointer (NM_DEVICE_PLATFORM_DEVICE, "", "",
+ G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_UDI,
- g_param_spec_string (NM_DEVICE_UDI,
- "UDI",
- "Unique Device Identifier",
+ g_param_spec_string (NM_DEVICE_UDI, "", "",
NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_IFACE,
- g_param_spec_string (NM_DEVICE_IFACE,
- "Interface",
- "Interface",
+ g_param_spec_string (NM_DEVICE_IFACE, "", "",
NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_IP_IFACE,
- g_param_spec_string (NM_DEVICE_IP_IFACE,
- "IP Interface",
- "IP Interface",
+ g_param_spec_string (NM_DEVICE_IP_IFACE, "", "",
NULL,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_DRIVER,
- g_param_spec_string (NM_DEVICE_DRIVER,
- "Driver",
- "Driver",
+ g_param_spec_string (NM_DEVICE_DRIVER, "", "",
NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_DRIVER_VERSION,
- g_param_spec_string (NM_DEVICE_DRIVER_VERSION,
- "Driver Version",
- "Driver Version",
+ g_param_spec_string (NM_DEVICE_DRIVER_VERSION, "", "",
NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_FIRMWARE_VERSION,
- g_param_spec_string (NM_DEVICE_FIRMWARE_VERSION,
- "Firmware Version",
- "Firmware Version",
+ g_param_spec_string (NM_DEVICE_FIRMWARE_VERSION, "", "",
NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_CAPABILITIES,
- g_param_spec_uint (NM_DEVICE_CAPABILITIES,
- "Capabilities",
- "Capabilities",
+ g_param_spec_uint (NM_DEVICE_CAPABILITIES, "", "",
0, G_MAXUINT32, NM_DEVICE_CAP_NONE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_CARRIER,
- g_param_spec_boolean (NM_DEVICE_CARRIER,
- "Carrier",
- "Carrier",
+ g_param_spec_boolean (NM_DEVICE_CARRIER, "", "",
FALSE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_MTU,
- g_param_spec_uint (NM_DEVICE_MTU,
- "MTU",
- "MTU",
+ g_param_spec_uint (NM_DEVICE_MTU, "", "",
0, G_MAXUINT32, 1500,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_IP4_ADDRESS,
- g_param_spec_uint (NM_DEVICE_IP4_ADDRESS,
- "IP4 address",
- "IP4 address",
+ g_param_spec_uint (NM_DEVICE_IP4_ADDRESS, "", "",
0, G_MAXUINT32, 0, /* FIXME */
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_IP4_CONFIG,
- g_param_spec_boxed (NM_DEVICE_IP4_CONFIG,
- "IP4 Config",
- "IP4 Config",
+ g_param_spec_boxed (NM_DEVICE_IP4_CONFIG, "", "",
DBUS_TYPE_G_OBJECT_PATH,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_DHCP4_CONFIG,
- g_param_spec_boxed (NM_DEVICE_DHCP4_CONFIG,
- "DHCP4 Config",
- "DHCP4 Config",
+ g_param_spec_boxed (NM_DEVICE_DHCP4_CONFIG, "", "",
DBUS_TYPE_G_OBJECT_PATH,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_IP6_CONFIG,
- g_param_spec_boxed (NM_DEVICE_IP6_CONFIG,
- "IP6 Config",
- "IP6 Config",
+ g_param_spec_boxed (NM_DEVICE_IP6_CONFIG, "", "",
DBUS_TYPE_G_OBJECT_PATH,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_DHCP6_CONFIG,
- g_param_spec_boxed (NM_DEVICE_DHCP6_CONFIG,
- "DHCP6 Config",
- "DHCP6 Config",
+ g_param_spec_boxed (NM_DEVICE_DHCP6_CONFIG, "", "",
DBUS_TYPE_G_OBJECT_PATH,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_STATE,
- g_param_spec_uint (NM_DEVICE_STATE,
- "State",
- "State",
+ g_param_spec_uint (NM_DEVICE_STATE, "", "",
0, G_MAXUINT32, NM_DEVICE_STATE_UNKNOWN,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_STATE_REASON,
- g_param_spec_boxed (NM_DEVICE_STATE_REASON,
- "StateReason",
- "StateReason",
+ g_param_spec_boxed (NM_DEVICE_STATE_REASON, "", "",
DBUS_TYPE_STATE_REASON_STRUCT,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_ACTIVE_CONNECTION,
- g_param_spec_boxed (NM_DEVICE_ACTIVE_CONNECTION,
- "ActiveConnection",
- "ActiveConnection",
+ g_param_spec_boxed (NM_DEVICE_ACTIVE_CONNECTION, "", "",
DBUS_TYPE_G_OBJECT_PATH,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_DEVICE_TYPE,
- g_param_spec_uint (NM_DEVICE_DEVICE_TYPE,
- "DeviceType",
- "DeviceType",
+ g_param_spec_uint (NM_DEVICE_DEVICE_TYPE, "", "",
0, G_MAXUINT32, NM_DEVICE_TYPE_UNKNOWN,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_MANAGED,
- g_param_spec_boolean (NM_DEVICE_MANAGED,
- "Managed",
- "Managed",
+ g_param_spec_boolean (NM_DEVICE_MANAGED, "", "",
FALSE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_AUTOCONNECT,
- g_param_spec_boolean (NM_DEVICE_AUTOCONNECT,
- "Autoconnect",
- "Autoconnect",
+ g_param_spec_boolean (NM_DEVICE_AUTOCONNECT, "", "",
DEFAULT_AUTOCONNECT,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_FIRMWARE_MISSING,
- g_param_spec_boolean (NM_DEVICE_FIRMWARE_MISSING,
- "FirmwareMissing",
- "Firmware missing",
+ g_param_spec_boolean (NM_DEVICE_FIRMWARE_MISSING, "", "",
FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_TYPE_DESC,
- g_param_spec_string (NM_DEVICE_TYPE_DESC,
- "Type Description",
- "Device type description",
+ g_param_spec_string (NM_DEVICE_TYPE_DESC, "", "",
NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
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",
+ g_param_spec_uint (NM_DEVICE_RFKILL_TYPE, "", "",
RFKILL_TYPE_WLAN,
RFKILL_TYPE_MAX,
RFKILL_TYPE_UNKNOWN,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_IFINDEX,
- g_param_spec_int (NM_DEVICE_IFINDEX,
- "Ifindex",
- "Ifindex",
+ g_param_spec_int (NM_DEVICE_IFINDEX, "", "",
0, G_MAXINT, 0,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_AVAILABLE_CONNECTIONS,
- g_param_spec_boxed (NM_DEVICE_AVAILABLE_CONNECTIONS,
- "AvailableConnections",
- "AvailableConnections",
+ g_param_spec_boxed (NM_DEVICE_AVAILABLE_CONNECTIONS, "", "",
DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_PHYSICAL_PORT_ID,
- g_param_spec_string (NM_DEVICE_PHYSICAL_PORT_ID,
- "PhysicalPortId",
- "PhysicalPortId",
+ g_param_spec_string (NM_DEVICE_PHYSICAL_PORT_ID, "", "",
NULL,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_IS_MASTER,
- g_param_spec_boolean (NM_DEVICE_IS_MASTER,
- "IsMaster",
- "IsMaster",
+ g_param_spec_boolean (NM_DEVICE_IS_MASTER, "", "",
FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_MASTER,
- g_param_spec_object (NM_DEVICE_MASTER,
- "Master",
- "Master",
+ g_param_spec_object (NM_DEVICE_MASTER, "", "",
NM_TYPE_DEVICE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_HW_ADDRESS,
- g_param_spec_string (NM_DEVICE_HW_ADDRESS,
- "Hardware Address",
- "Hardware address",
+ g_param_spec_string (NM_DEVICE_HW_ADDRESS, "", "",
NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
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",
+ g_param_spec_boolean (NM_DEVICE_HAS_PENDING_ACTION, "", "",
FALSE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/* Signals */
signals[STATE_CHANGED] =
diff --git a/src/devices/nm-device.h b/src/devices/nm-device.h
index f74486e6f..b3855c744 100644
--- a/src/devices/nm-device.h
+++ b/src/devices/nm-device.h
@@ -19,24 +19,18 @@
* Copyright (C) 2006 - 2008 Novell, Inc.
*/
-#ifndef NM_DEVICE_H
-#define NM_DEVICE_H
+#ifndef __NETWORKMANAGER_DEVICE_H__
+#define __NETWORKMANAGER_DEVICE_H__
#include <glib-object.h>
#include <dbus/dbus-glib.h>
#include <netinet/in.h>
-#include "NetworkManager.h"
+#include "nm-dbus-interface.h"
#include "nm-types.h"
-#include "nm-activation-request.h"
-#include "nm-ip4-config.h"
-#include "nm-ip6-config.h"
-#include "nm-dhcp4-config.h"
-#include "nm-dhcp6-config.h"
#include "nm-connection.h"
#include "nm-rfkill-manager.h"
-#include "nm-connection-provider.h"
-#include "nm-platform.h"
+#include "NetworkManagerUtils.h"
/* Properties */
#define NM_DEVICE_UDI "udi"
@@ -62,12 +56,13 @@
#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_MASTER "master" /* Internal only */
-#define NM_DEVICE_HW_ADDRESS "hw-address" /* Internal only */
+#define NM_DEVICE_HW_ADDRESS "hw-address"
+
+#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_MASTER "master" /* Internal only */
#define NM_DEVICE_HAS_PENDING_ACTION "has-pending-action" /* Internal only */
/* Internal signals */
@@ -90,12 +85,6 @@ G_BEGIN_DECLS
typedef enum NMActStageReturn NMActStageReturn;
-typedef enum {
- NM_DEVICE_ERROR_CONNECTION_ACTIVATING = 0, /*< nick=ConnectionActivating >*/
- NM_DEVICE_ERROR_CONNECTION_INVALID, /*< nick=ConnectionInvalid >*/
- NM_DEVICE_ERROR_NOT_ACTIVE, /*< nick=NotActive >*/
-} NMDeviceError;
-
struct _NMDevice {
GObject parent;
};
@@ -120,10 +109,10 @@ typedef struct {
/* 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);
- guint (* get_hw_address_length) (NMDevice *self, gboolean *out_permanent);
+
+ gboolean (* get_ip_iface_identifier) (NMDevice *self, NMUtilsIPv6IfaceId *out_iid);
guint32 (* get_generic_capabilities) (NMDevice *self);
@@ -183,7 +172,7 @@ 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);
+ void (* ip6_config_pre_commit) (NMDevice *self, NMIP6Config *config);
void (* deactivate) (NMDevice *self);
@@ -192,6 +181,11 @@ typedef struct {
/* Update the connection with currently configured L2 settings */
void (* update_connection) (NMDevice *device, NMConnection *connection);
+ gboolean (*master_update_slave_connection) (NMDevice *self,
+ NMDevice *slave,
+ NMConnection *connection,
+ GError **error);
+
gboolean (* enslave_slave) (NMDevice *self,
NMDevice *slave,
NMConnection *connection,
@@ -207,6 +201,8 @@ typedef struct {
gboolean (* component_added) (NMDevice *self, GObject *component);
gboolean (* owns_iface) (NMDevice *self, const char *iface);
+
+ NMConnection * (* new_default_connection) (NMDevice *self);
} NMDeviceClass;
@@ -220,6 +216,8 @@ GType nm_device_get_type (void);
const char * nm_device_get_path (NMDevice *dev);
void nm_device_dbus_export (NMDevice *device);
+void nm_device_finish_init (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);
@@ -232,11 +230,13 @@ const char * nm_device_get_type_desc (NMDevice *dev);
NMDeviceType nm_device_get_device_type (NMDevice *dev);
int nm_device_get_priority (NMDevice *dev);
+guint32 nm_device_get_ip4_route_metric (NMDevice *dev);
+guint32 nm_device_get_ip6_route_metric (NMDevice *dev);
-const guint8 * nm_device_get_hw_address (NMDevice *dev, guint *out_len);
+const char * nm_device_get_hw_address (NMDevice *dev);
-NMDHCP4Config * nm_device_get_dhcp4_config (NMDevice *dev);
-NMDHCP6Config * nm_device_get_dhcp6_config (NMDevice *dev);
+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);
@@ -255,14 +255,21 @@ NMDevice * nm_device_get_master (NMDevice *dev);
NMActRequest * nm_device_get_act_request (NMDevice *dev);
NMConnection * nm_device_get_connection (NMDevice *dev);
+void nm_device_removed (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_generate_connection (NMDevice *self, NMDevice *master);
-NMConnection * nm_device_get_best_auto_connection (NMDevice *dev,
- GSList *connections,
- char **specific_object);
+gboolean nm_device_master_update_slave_connection (NMDevice *master,
+ NMDevice *slave,
+ NMConnection *connection,
+ GError **error);
+
+gboolean nm_device_can_auto_connect (NMDevice *self,
+ NMConnection *connection,
+ char **specific_object);
gboolean nm_device_complete_connection (NMDevice *device,
NMConnection *connection,
@@ -272,6 +279,8 @@ gboolean nm_device_complete_connection (NMDevice *device,
gboolean nm_device_check_connection_compatible (NMDevice *device, NMConnection *connection);
+gboolean nm_device_uses_assumed_connection (NMDevice *device);
+
gboolean nm_device_can_assume_active_connection (NMDevice *device);
gboolean nm_device_spec_match_list (NMDevice *device, const GSList *specs);
@@ -294,12 +303,16 @@ RfKillType nm_device_get_rfkill_type (NMDevice *device);
* @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)
+ * @NM_UNMANAGED_PARENT: %TRUE when unmanaged due to parent device being unmanaged
+ * @NM_UNMANAGED_EXTERNAL_DOWN: %TRUE when unmanaged because !IFF_UP and not created by NM
*/
typedef enum {
- NM_UNMANAGED_NONE = 0x00,
- NM_UNMANAGED_DEFAULT = 0x01,
- NM_UNMANAGED_INTERNAL = 0x02,
- NM_UNMANAGED_USER = 0x04,
+ NM_UNMANAGED_NONE = 0x00,
+ NM_UNMANAGED_DEFAULT = 0x01,
+ NM_UNMANAGED_INTERNAL = 0x02,
+ NM_UNMANAGED_USER = 0x04,
+ NM_UNMANAGED_PARENT = 0x08,
+ NM_UNMANAGED_EXTERNAL_DOWN = 0x10,
/* Boundary value */
__NM_UNMANAGED_LAST,
@@ -355,6 +368,13 @@ gboolean nm_device_notify_component_added (NMDevice *device, GObject *component)
gboolean nm_device_owns_iface (NMDevice *device, const char *iface);
+NMConnection *nm_device_new_default_connection (NMDevice *self);
+
+const NMPlatformIP4Route *nm_device_get_ip4_default_route (NMDevice *self, gboolean *out_is_assumed);
+const NMPlatformIP6Route *nm_device_get_ip6_default_route (NMDevice *self, gboolean *out_is_assumed);
+
+void nm_device_spawn_iface_helper (NMDevice *self);
+
G_END_DECLS
/* For testing only */
diff --git a/src/devices/team/Makefile.am b/src/devices/team/Makefile.am
new file mode 100644
index 000000000..6fea9b3f9
--- /dev/null
+++ b/src/devices/team/Makefile.am
@@ -0,0 +1,68 @@
+include $(GLIB_MAKEFILE)
+
+@GNOME_CODE_COVERAGE_RULES@
+
+AM_CPPFLAGS = \
+ -I${top_srcdir}/src \
+ -I${top_builddir}/src \
+ -I${top_srcdir}/src/devices \
+ -I${top_srcdir}/src/platform \
+ -I${top_srcdir}/include \
+ -I${top_builddir}/libnm-core \
+ -I${top_srcdir}/libnm-core \
+ -DG_LOG_DOMAIN=\""NetworkManager-team"\" \
+ -DNETWORKMANAGER_COMPILATION \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ $(DBUS_CFLAGS)
+
+if WITH_TEAMDCTL
+AM_CPPFLAGS += ${LIBTEAMDCTL_CFLAGS}
+endif
+
+GLIB_GENERATED = nm-team-enum-types.h nm-team-enum-types.c
+GLIB_MKENUMS_H_FLAGS = --identifier-prefix NM
+GLIB_MKENUMS_C_FLAGS = --identifier-prefix NM
+nm_team_enum_types_sources = $(srcdir)/nm-device-team.h
+
+glue_sources = \
+ nm-device-team-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-team.la
+
+SYMBOL_VIS_FILE=$(srcdir)/exports.ver
+
+libnm_device_plugin_team_la_SOURCES = \
+ nm-device-team.c \
+ nm-device-team.h \
+ nm-team-factory.c \
+ nm-team-factory.h \
+ \
+ $(BUILT_SOURCES)
+
+libnm_device_plugin_team_la_LDFLAGS = \
+ -module -avoid-version \
+ -Wl,--version-script=$(SYMBOL_VIS_FILE)
+
+libnm_device_plugin_team_la_LIBADD = \
+ $(DBUS_LIBS) \
+ $(GUDEV_LIBS)
+
+if WITH_TEAMDCTL
+libnm_device_plugin_team_la_LIBADD += $(LIBTEAMDCTL_LIBS)
+endif
+
+CLEANFILES = $(BUILT_SOURCES)
+EXTRA_DIST = $(SYMBOL_VIS_FILE)
+
+if ENABLE_TESTS
+
+check-local:
+ $(top_srcdir)/tools/check-exports.sh $(builddir)/.libs/libnm-device-plugin-team.so $(SYMBOL_VIS_FILE)
+
+endif
+
diff --git a/cli/src/Makefile.in b/src/devices/team/Makefile.in
index 8f3129c70..4ee30e66b 100644
--- a/cli/src/Makefile.in
+++ b/src/devices/team/Makefile.in
@@ -78,8 +78,9 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-bin_PROGRAMS = nmcli$(EXEEXT)
-subdir = cli/src
+@WITH_TEAMDCTL_TRUE@am__append_1 = ${LIBTEAMDCTL_CFLAGS}
+@WITH_TEAMDCTL_TRUE@am__append_2 = $(LIBTEAMDCTL_LIBS)
+subdir = src/devices/team
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -102,20 +103,54 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-am__installdirs = "$(DESTDIR)$(bindir)"
-PROGRAMS = $(bin_PROGRAMS)
-am_nmcli_OBJECTS = common.$(OBJEXT) connections.$(OBJEXT) \
- devices.$(OBJEXT) network-manager.$(OBJEXT) settings.$(OBJEXT) \
- nmcli.$(OBJEXT) utils.$(OBJEXT)
-nmcli_OBJECTS = $(am_nmcli_OBJECTS)
+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 =
-nmcli_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1) $(top_builddir)/libnm-util/libnm-util.la \
- $(top_builddir)/libnm-glib/libnm-glib.la
+@WITH_TEAMDCTL_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)
+libnm_device_plugin_team_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+am__objects_1 = nm-team-enum-types.lo
+am__objects_2 =
+am__objects_3 = $(am__objects_1) $(am__objects_2)
+am_libnm_device_plugin_team_la_OBJECTS = nm-device-team.lo \
+ nm-team-factory.lo $(am__objects_3)
+libnm_device_plugin_team_la_OBJECTS = \
+ $(am_libnm_device_plugin_team_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_team_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(AM_CFLAGS) $(CFLAGS) $(libnm_device_plugin_team_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 +185,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 = $(nmcli_SOURCES)
-DIST_SOURCES = $(nmcli_SOURCES)
+SOURCES = $(libnm_device_plugin_team_la_SOURCES)
+DIST_SOURCES = $(libnm_device_plugin_team_la_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -186,6 +221,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -309,6 +346,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -328,6 +366,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -354,7 +393,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -433,43 +472,42 @@ 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}/libnm-util \
- -I${top_builddir}/libnm-util \
- -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 = \
- common.c \
- common.h \
- connections.c \
- connections.h \
- devices.c \
- devices.h \
- network-manager.c \
- network-manager.h \
- settings.c \
- settings.h \
- nmcli.c \
- nmcli.h \
- utils.c \
- utils.h
-
-nmcli_LDADD = \
- $(DBUS_LIBS) \
- $(GLIB_LIBS) \
- $(READLINE_LIBS) \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(top_builddir)/libnm-glib/libnm-glib.la
-
-all: all-am
+AM_CPPFLAGS = -I${top_srcdir}/src -I${top_builddir}/src \
+ -I${top_srcdir}/src/devices -I${top_srcdir}/src/platform \
+ -I${top_srcdir}/include -I${top_builddir}/libnm-core \
+ -I${top_srcdir}/libnm-core \
+ -DG_LOG_DOMAIN=\""NetworkManager-team"\" \
+ -DNETWORKMANAGER_COMPILATION \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE $(DBUS_CFLAGS) \
+ $(am__append_1)
+GLIB_GENERATED = nm-team-enum-types.h nm-team-enum-types.c
+GLIB_MKENUMS_H_FLAGS = --identifier-prefix NM
+GLIB_MKENUMS_C_FLAGS = --identifier-prefix NM
+nm_team_enum_types_sources = $(srcdir)/nm-device-team.h
+glue_sources = \
+ nm-device-team-glue.h
+
+BUILT_SOURCES = $(GLIB_GENERATED) $(glue_sources)
+pkglib_LTLIBRARIES = libnm-device-plugin-team.la
+SYMBOL_VIS_FILE = $(srcdir)/exports.ver
+libnm_device_plugin_team_la_SOURCES = \
+ nm-device-team.c \
+ nm-device-team.h \
+ nm-team-factory.c \
+ nm-team-factory.h \
+ \
+ $(BUILT_SOURCES)
+
+libnm_device_plugin_team_la_LDFLAGS = \
+ -module -avoid-version \
+ -Wl,--version-script=$(SYMBOL_VIS_FILE)
+
+libnm_device_plugin_team_la_LIBADD = $(DBUS_LIBS) $(GUDEV_LIBS) \
+ $(am__append_2)
+CLEANFILES = $(BUILT_SOURCES)
+EXTRA_DIST = $(SYMBOL_VIS_FILE)
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
@@ -482,9 +520,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu cli/src/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/devices/team/Makefile'; \
$(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu cli/src/Makefile
+ $(AUTOMAKE) --gnu src/devices/team/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
@@ -503,59 +541,44 @@ $(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):
-install-binPROGRAMS: $(bin_PROGRAMS)
+
+install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES)
@$(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:
+ @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='$(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
-
-nmcli$(EXEEXT): $(nmcli_OBJECTS) $(nmcli_DEPENDENCIES) $(EXTRA_nmcli_DEPENDENCIES)
- @rm -f nmcli$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(nmcli_OBJECTS) $(nmcli_LDADD) $(LIBS)
+ @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`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libnm-device-plugin-team.la: $(libnm_device_plugin_team_la_OBJECTS) $(libnm_device_plugin_team_la_DEPENDENCIES) $(EXTRA_libnm_device_plugin_team_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libnm_device_plugin_team_la_LINK) -rpath $(pkglibdir) $(libnm_device_plugin_team_la_OBJECTS) $(libnm_device_plugin_team_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -563,13 +586,9 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@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@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-device-team.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-team-enum-types.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-team-factory.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -680,14 +699,18 @@ distdir: $(DISTFILES)
|| exit 1; \
fi; \
done
+@ENABLE_TESTS_FALSE@check-local:
check-am: all-am
-check: check-am
-all-am: Makefile $(PROGRAMS)
+ $(MAKE) $(AM_MAKEFLAGS) check-local
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LTLIBRARIES)
installdirs:
- for dir in "$(DESTDIR)$(bindir)"; do \
+ for dir in "$(DESTDIR)$(pkglibdir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
-install: install-am
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
@@ -709,6 +732,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)
@@ -717,9 +741,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)
clean: clean-am
-clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
+clean-am: clean-generic clean-libtool clean-pkglibLTLIBRARIES \
+ mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
@@ -745,7 +771,7 @@ install-dvi: install-dvi-am
install-dvi-am:
-install-exec-am: install-binPROGRAMS
+install-exec-am: install-pkglibLTLIBRARIES
install-html: install-html-am
@@ -785,24 +811,34 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-binPROGRAMS
+uninstall-am: uninstall-pkglibLTLIBRARIES
-.MAKE: install-am install-strip
+.MAKE: all check check-am install install-am install-strip
-.PHONY: CTAGS GTAGS TAGS all all-am check 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 \
+.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-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-binPROGRAMS
+ 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@
+
+%-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-team.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/team/exports.ver b/src/devices/team/exports.ver
new file mode 100644
index 000000000..24cd848ce
--- /dev/null
+++ b/src/devices/team/exports.ver
@@ -0,0 +1,6 @@
+{
+global:
+ nm_device_factory_create;
+local:
+ *;
+};
diff --git a/src/nm-device-team-glue.h b/src/devices/team/nm-device-team-glue.h
index 405975c80..405975c80 100644
--- a/src/nm-device-team-glue.h
+++ b/src/devices/team/nm-device-team-glue.h
diff --git a/src/devices/nm-device-team.c b/src/devices/team/nm-device-team.c
index f3b25e3b1..16f1fcc2a 100644
--- a/src/devices/nm-device-team.c
+++ b/src/devices/team/nm-device-team.c
@@ -27,38 +27,34 @@
#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-team-enum-types.h"
#include "nm-posix-signals.h"
+#include "nm-core-internal.h"
#include "nm-device-team-glue.h"
+#include "nm-device-logging.h"
+_LOG_DECLARE_SELF(NMDeviceTeam);
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);
+static gboolean teamd_start (NMDevice *device, NMSettingTeam *s_team);
typedef struct {
-#if WITH_TEAMDCTL
struct teamdctl *tdc;
-#endif
GPid teamd_pid;
guint teamd_process_watch;
guint teamd_timeout;
@@ -74,28 +70,17 @@ enum {
/******************************************************************/
-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)
+get_generic_capabilities (NMDevice *device)
{
return NM_DEVICE_CAP_CARRIER_DETECT;
}
static gboolean
-is_available (NMDevice *dev)
+is_available (NMDevice *device)
{
- if (NM_DEVICE_GET_CLASS (dev)->is_up)
- return NM_DEVICE_GET_CLASS (dev)->is_up (dev);
+ if (NM_DEVICE_GET_CLASS (device)->is_up)
+ return NM_DEVICE_GET_CLASS (device)->is_up (device);
return FALSE;
}
@@ -124,7 +109,7 @@ check_connection_compatible (NMDevice *device, NMConnection *connection)
return FALSE;
/* Team connections must specify the virtual interface name */
- iface = nm_connection_get_virtual_iface_name (connection);
+ iface = nm_connection_get_interface_name (connection);
if (!iface || strcmp (nm_device_get_iface (device), iface))
return FALSE;
@@ -140,17 +125,14 @@ complete_connection (NMDevice *device,
const GSList *existing_connections,
GError **error)
{
- NMSettingTeam *s_team, *tmp;
- guint32 i = 0;
- char *name;
- const GSList *iter;
- gboolean found;
+ NMSettingTeam *s_team;
nm_utils_complete_generic (connection,
NM_SETTING_TEAM_SETTING_NAME,
existing_connections,
- _("Team connection %d"),
NULL,
+ _("Team connection"),
+ "team",
TRUE);
s_team = nm_connection_get_setting_team (connection);
@@ -159,41 +141,13 @@ complete_connection (NMDevice *device,
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)
+ensure_teamd_connection (NMDevice *device)
{
+ NMDeviceTeam *self = NM_DEVICE_TEAM (device);
NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (self);
int err;
@@ -202,32 +156,28 @@ ensure_teamd_connection (NMDevice *self)
priv->tdc = teamdctl_alloc ();
g_assert (priv->tdc);
- err = teamdctl_connect (priv->tdc, nm_device_get_iface (self), NULL, NULL);
+ err = teamdctl_connect (priv->tdc, nm_device_get_iface (device), NULL, NULL);
if (err != 0) {
- nm_log_err (LOGD_TEAM, "(%s): failed to connect to teamd (err=%d)",
- nm_device_get_iface (self), err);
+ _LOGE (LOGD_TEAM, "failed to connect to teamd (err=%d)", err);
teamdctl_free (priv->tdc);
priv->tdc = NULL;
}
return !!priv->tdc;
}
-#endif
static void
update_connection (NMDevice *device, NMConnection *connection)
{
+ NMDeviceTeam *self = NM_DEVICE_TEAM (device);
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;
@@ -238,51 +188,59 @@ update_connection (NMDevice *device, NMConnection *connection)
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);
+ _LOGE (LOGD_TEAM, "failed to read teamd config (err=%d)", err);
}
-#endif
}
/******************************************************************/
-gboolean
-nm_team_update_slave_connection (NMDevice *slave, NMConnection *connection)
+static gboolean
+master_update_slave_connection (NMDevice *self,
+ NMDevice *slave,
+ NMConnection *connection,
+ GError **error)
{
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);
+ const char *iface = nm_device_get_iface (self);
+ const char *iface_slave = nm_device_get_iface (slave);
tdc = teamdctl_alloc ();
- g_assert (tdc);
- err = teamdctl_connect (tdc, master_iface, NULL, NULL);
+ if (!tdc) {
+ g_set_error (error,
+ NM_DEVICE_ERROR,
+ NM_DEVICE_ERROR_FAILED,
+ "update slave connection for slave '%s' failed to connect to teamd for master %s (out of memory?)",
+ iface_slave, iface);
+ g_return_val_if_reached (FALSE);
+ }
+
+ err = teamdctl_connect (tdc, 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);
+ g_set_error (error,
+ NM_DEVICE_ERROR,
+ NM_DEVICE_ERROR_FAILED,
+ "update slave connection for slave '%s' failed to connect to teamd for master %s (err=%d)",
+ iface_slave, iface, err);
return FALSE;
}
- err = teamdctl_port_config_get_raw_direct (tdc, iface, (char **)&team_port_config);
+
+ err = teamdctl_port_config_get_raw_direct (tdc, iface_slave, (char **)&team_port_config);
port_config = g_strdup (team_port_config);
teamdctl_free (tdc);
- with_teamdctl = TRUE;
-#endif
+ if (err) {
+ g_set_error (error,
+ NM_DEVICE_ERROR,
+ NM_DEVICE_ERROR_FAILED,
+ "update slave connection for slave '%s' failed to get configuration from teamd master %s (err=%d)",
+ iface_slave, iface, err);
+ g_free (port_config);
+ return FALSE;
+ }
s_port = nm_connection_get_setting_team_port (connection);
if (!s_port) {
@@ -293,56 +251,19 @@ nm_team_update_slave_connection (NMDevice *slave, NMConnection *connection)
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;
- }
-
+ g_object_set (nm_connection_get_setting_connection (connection),
+ NM_SETTING_CONNECTION_MASTER, iface,
+ NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_TEAM_SETTING_NAME,
+ NULL);
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)
+teamd_timeout_remove (NMDevice *device)
{
- 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);
+ NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (device);
if (priv->teamd_timeout) {
g_source_remove (priv->teamd_timeout);
@@ -351,9 +272,9 @@ teamd_timeout_remove (NMDevice *dev)
}
static void
-teamd_cleanup (NMDevice *dev, gboolean device_state_failed)
+teamd_cleanup (NMDevice *device, gboolean device_state_failed)
{
- NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (dev);
+ NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (device);
if (priv->teamd_dbus_watch) {
g_bus_unwatch_name (priv->teamd_dbus_watch);
@@ -366,37 +287,36 @@ teamd_cleanup (NMDevice *dev, gboolean device_state_failed)
}
if (priv->teamd_pid > 0) {
- service_kill (priv->teamd_pid);
+ nm_utils_kill_child_async (priv->teamd_pid, SIGTERM, LOGD_TEAM, "teamd", 2000, NULL, NULL);
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);
+ teamd_timeout_remove (device);
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);
+ if (nm_device_is_activating (device) ||
+ (nm_device_get_state (device) == NM_DEVICE_STATE_ACTIVATED))
+ nm_device_state_changed (device, 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);
+ NMDeviceTeam *self = NM_DEVICE_TEAM (user_data);
+ NMDevice *device = NM_DEVICE (self);
+ NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (device);
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);
+ _LOGI (LOGD_TEAM, "teamd timed out.");
+ teamd_cleanup (device, TRUE);
return FALSE;
}
@@ -407,20 +327,24 @@ teamd_dbus_appeared (GDBusConnection *connection,
const gchar *name_owner,
gpointer user_data)
{
- NMDevice *dev = NM_DEVICE (user_data);
- NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (dev);
+ NMDeviceTeam *self = NM_DEVICE_TEAM (user_data);
+ NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (self);
+ NMDevice *device = NM_DEVICE (self);
+ gboolean success;
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);
+ _LOGI (LOGD_TEAM, "teamd appeared on D-Bus");
+ teamd_timeout_remove (device);
+
+ success = ensure_teamd_connection (device);
+ if (nm_device_get_state (device) == NM_DEVICE_STATE_PREPARE) {
+ if (success)
+ nm_device_activate_schedule_stage2_device_config (device);
+ else if (!nm_device_uses_assumed_connection (device))
+ nm_device_state_changed (device, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_TEAMD_CONTROL_FAILED);
return;
}
-#endif
- nm_device_activate_schedule_stage2_device_config (dev);
}
static void
@@ -428,8 +352,9 @@ 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);
+ NMDeviceTeam *self = NM_DEVICE_TEAM (user_data);
+ NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (self);
+ NMDevice *device = NM_DEVICE (self);
g_return_if_fail (priv->teamd_dbus_watch);
@@ -441,26 +366,27 @@ teamd_dbus_vanished (GDBusConnection *connection,
* 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));
+ _LOGD (LOGD_TEAM, "teamd vanished from D-Bus (ignored)");
return;
}
- nm_log_info (LOGD_TEAM, "(%s): teamd vanished from D-Bus", nm_device_get_iface (dev));
- teamd_cleanup (dev, TRUE);
+ _LOGI (LOGD_TEAM, "teamd vanished from D-Bus");
+ teamd_cleanup (device, 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);
+ NMDeviceTeam *self = NM_DEVICE_TEAM (user_data);
+ NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (self);
+ NMDevice *device = NM_DEVICE (self);
g_return_if_fail (priv->teamd_process_watch);
- nm_log_info (LOGD_TEAM, "(%s): teamd died", nm_device_get_iface (dev));
+ _LOGI (LOGD_TEAM, "teamd died with status %d", status);
priv->teamd_process_watch = 0;
priv->teamd_pid = 0;
- teamd_cleanup (dev, TRUE);
+ teamd_cleanup (device, TRUE);
}
static void
@@ -481,18 +407,14 @@ teamd_child_setup (gpointer user_data G_GNUC_UNUSED)
}
static gboolean
-teamd_start (NMDevice *dev, NMSettingTeam *s_team)
+teamd_start (NMDevice *device, NMSettingTeam *s_team)
{
- NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (dev);
- const char *iface = nm_device_get_ip_iface (dev);
- char *tmp_str;
+ NMDeviceTeam *self = NM_DEVICE_TEAM (device);
+ NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (self);
+ const char *iface = nm_device_get_ip_iface (device);
+ char *tmp_str = NULL;
const char *config;
- const char **teamd_binary = NULL;
- static const char *teamd_paths[] = {
- "/usr/bin/teamd",
- "/usr/local/bin/teamd",
- NULL
- };
+ const char *teamd_binary;
GPtrArray *argv;
GError *error = NULL;
gboolean ret;
@@ -501,51 +423,42 @@ teamd_start (NMDevice *dev, NMSettingTeam *s_team)
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);
+ teamd_binary = nm_utils_find_helper ("teamd", NULL, NULL);
+ if (!teamd_binary) {
+ _LOGW (LOGD_TEAM, "Activation: (team) failed to start teamd: teamd binary not found");
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) 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);
+ _LOGD (LOGD_TEAM, "running: %s",
+ (tmp_str = g_strjoinv (" ", (gchar **) argv->pdata)));
+ g_clear_pointer (&tmp_str, g_free);
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) 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) "-N");
g_ptr_array_add (argv, (gpointer) "-t");
g_ptr_array_add (argv, (gpointer) iface);
@@ -559,12 +472,12 @@ teamd_start (NMDevice *dev, NMSettingTeam *s_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);
+ _LOGD (LOGD_TEAM, "running: %s",
+ (tmp_str = g_strjoinv (" ", (gchar **) argv->pdata)));
+ g_clear_pointer (&tmp_str, g_free);
/* Start a timeout for teamd to appear at D-Bus */
- priv->teamd_timeout = g_timeout_add_seconds (5, teamd_timeout_cb, dev);
+ priv->teamd_timeout = g_timeout_add_seconds (5, teamd_timeout_cb, device);
/* Register D-Bus name watcher */
tmp_str = g_strdup_printf ("org.libteam.teamd.%s", iface);
@@ -573,7 +486,7 @@ teamd_start (NMDevice *dev, NMSettingTeam *s_team)
G_BUS_NAME_WATCHER_FLAGS_NONE,
teamd_dbus_appeared,
teamd_dbus_vanished,
- dev,
+ device,
NULL);
g_free (tmp_str);
@@ -581,41 +494,36 @@ teamd_start (NMDevice *dev, NMSettingTeam *s_team)
&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);
+ _LOGW (LOGD_TEAM, "Activation: (team) failed to start teamd: %s", error->message);
g_clear_error (&error);
- teamd_cleanup (dev, FALSE);
+ teamd_cleanup (device, 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);
+ device);
- nm_log_info (LOGD_TEAM,
- "Activation (%s) started teamd...", iface);
+ _LOGI (LOGD_TEAM, "Activation: (team) started teamd...");
return TRUE;
}
static void
-teamd_stop (NMDevice *dev)
+teamd_stop (NMDevice *device)
{
- NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (dev);
+ NMDeviceTeam *self = NM_DEVICE_TEAM (device);
+ NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (self);
- 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);
+ if (priv->teamd_pid > 0)
+ _LOGI (LOGD_TEAM, "Deactivation: stopping teamd...");
+ else
+ _LOGD (LOGD_TEAM, "Deactivation: stopping teamd (not started)...");
+ teamd_cleanup (device, FALSE);
}
static NMActStageReturn
-act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
+act_stage1_prepare (NMDevice *device, NMDeviceStateReason *reason)
{
NMActStageReturn ret = NM_ACT_STAGE_RETURN_SUCCESS;
NMConnection *connection;
@@ -623,13 +531,13 @@ 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_team_parent_class)->act_stage1_prepare (dev, reason);
+ ret = NM_DEVICE_CLASS (nm_device_team_parent_class)->act_stage1_prepare (device, reason);
if (ret == NM_ACT_STAGE_RETURN_SUCCESS) {
- connection = nm_device_get_connection (dev);
+ connection = nm_device_get_connection (device);
g_assert (connection);
s_team = nm_connection_get_setting_team (connection);
g_assert (s_team);
- if (teamd_start (dev, s_team))
+ if (teamd_start (device, s_team))
ret = NM_ACT_STAGE_RETURN_POSTPONE;
else
ret = NM_ACT_STAGE_RETURN_FAILURE;
@@ -638,9 +546,9 @@ act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
}
static void
-deactivate (NMDevice *dev)
+deactivate (NMDevice *device)
{
- teamd_stop (dev);
+ teamd_stop (device);
}
static gboolean
@@ -649,11 +557,9 @@ enslave_slave (NMDevice *device,
NMConnection *connection,
gboolean configure)
{
-#if WITH_TEAMDCTL
+ NMDeviceTeam *self = NM_DEVICE_TEAM (device);
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;
@@ -667,10 +573,9 @@ enslave_slave (NMDevice *device,
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);
+ _LOGW (LOGD_TEAM, "enslaved team port %s config not changed, not connected to teamd",
+ slave_iface);
} else {
int err;
char *sanitized_config;
@@ -679,15 +584,11 @@ enslave_slave (NMDevice *device,
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);
+ _LOGE (LOGD_TEAM, "failed to update config for port %s (err=%d)",
+ 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),
@@ -697,9 +598,9 @@ enslave_slave (NMDevice *device,
if (!success)
return FALSE;
- nm_log_info (LOGD_TEAM, "(%s): enslaved team port %s", iface, slave_iface);
+ _LOGI (LOGD_TEAM, "enslaved team port %s", slave_iface);
} else
- nm_log_info (LOGD_TEAM, "(%s): team port %s was enslaved", iface, slave_iface);
+ _LOGI (LOGD_TEAM, "team port %s was enslaved", slave_iface);
g_object_notify (G_OBJECT (device), NM_DEVICE_TEAM_SLAVES);
@@ -711,26 +612,19 @@ release_slave (NMDevice *device,
NMDevice *slave,
gboolean configure)
{
+ NMDeviceTeam *self = NM_DEVICE_TEAM (device);
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)
+ _LOGI (LOGD_TEAM, "released team port %s", nm_device_get_ip_iface (slave));
+ else
+ _LOGW (LOGD_TEAM, "failed to release team port %s", nm_device_get_ip_iface (slave));
+ } else
+ _LOGI (LOGD_TEAM, "team port %s was released", nm_device_get_ip_iface (slave));
if (success)
g_object_notify (G_OBJECT (device), NM_DEVICE_TEAM_SLAVES);
@@ -740,10 +634,9 @@ release_slave (NMDevice *device,
* 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));
- }
+ if (!nm_device_bring_up (slave, TRUE, &no_firmware))
+ _LOGW (LOGD_TEAM, "released team port %s could not be brought up",
+ nm_device_get_ip_iface (slave));
}
return success;
@@ -766,18 +659,21 @@ nm_device_team_new (NMPlatformLink *platform_device)
}
NMDevice *
-nm_device_team_new_for_connection (NMConnection *connection)
+nm_device_team_new_for_connection (NMConnection *connection, GError **error)
{
const char *iface;
g_return_val_if_fail (connection != NULL, NULL);
- iface = nm_connection_get_virtual_iface_name (connection);
+ iface = nm_connection_get_interface_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",
+ g_set_error (error,
+ NM_DEVICE_ERROR,
+ NM_DEVICE_ERROR_CREATION_FAILED,
+ "failed to create team master interface '%s' for connection '%s': %s",
iface, nm_connection_get_id (connection),
nm_platform_get_error_msg ());
return NULL;
@@ -793,16 +689,6 @@ nm_device_team_new_for_connection (NMConnection *connection)
}
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)
{
}
@@ -860,7 +746,6 @@ nm_device_team_class_init (NMDeviceTeamClass *klass)
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;
@@ -871,6 +756,7 @@ nm_device_team_class_init (NMDeviceTeamClass *klass)
parent_class->check_connection_available = check_connection_available;
parent_class->complete_connection = complete_connection;
parent_class->update_connection = update_connection;
+ parent_class->master_update_slave_connection = master_update_slave_connection;
parent_class->act_stage1_prepare = act_stage1_prepare;
parent_class->deactivate = deactivate;
@@ -880,15 +766,12 @@ nm_device_team_class_init (NMDeviceTeamClass *klass)
/* properties */
g_object_class_install_property
(object_class, PROP_SLAVES,
- g_param_spec_boxed (NM_DEVICE_TEAM_SLAVES,
- "Slaves",
- "Slaves",
+ g_param_spec_boxed (NM_DEVICE_TEAM_SLAVES, "", "",
DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH,
- G_PARAM_READABLE));
+ 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_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/team/nm-device-team.h
index fe1275c6b..26ba57372 100644
--- a/src/devices/nm-device-team.h
+++ b/src/devices/team/nm-device-team.h
@@ -18,8 +18,8 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef NM_DEVICE_TEAM_H
-#define NM_DEVICE_TEAM_H
+#ifndef __NETWORKMANAGER_DEVICE_TEAM_H__
+#define __NETWORKMANAGER_DEVICE_TEAM_H__
#include <glib-object.h>
@@ -34,12 +34,6 @@ G_BEGIN_DECLS
#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 {
@@ -55,9 +49,7 @@ typedef struct {
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);
+NMDevice *nm_device_team_new_for_connection (NMConnection *connection, GError **error);
G_END_DECLS
diff --git a/src/devices/team/nm-team-enum-types.c b/src/devices/team/nm-team-enum-types.c
new file mode 100644
index 000000000..5ac3494d9
--- /dev/null
+++ b/src/devices/team/nm-team-enum-types.c
@@ -0,0 +1,12 @@
+
+
+
+/* Generated by glib-mkenums. Do not edit */
+
+#include "nm-team-enum-types.h"
+
+#include "nm-device-team.h"
+
+
+
+
diff --git a/src/devices/team/nm-team-enum-types.h b/src/devices/team/nm-team-enum-types.h
new file mode 100644
index 000000000..136cadc21
--- /dev/null
+++ b/src/devices/team/nm-team-enum-types.h
@@ -0,0 +1,17 @@
+
+
+
+/* Generated by glib-mkenums. Do not edit */
+
+#ifndef __NM_TEAM_ENUM_TYPES_H__
+#define __NM_TEAM_ENUM_TYPES_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+G_END_DECLS
+
+#endif /* __NM_TEAM_ENUM_TYPES_H__ */
+
+
+
diff --git a/src/devices/team/nm-team-factory.c b/src/devices/team/nm-team-factory.c
new file mode 100644
index 000000000..cb887cac2
--- /dev/null
+++ b/src/devices/team/nm-team-factory.c
@@ -0,0 +1,93 @@
+/* -*- 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 "config.h"
+
+#include <string.h>
+#include <gmodule.h>
+
+#include "nm-device-factory.h"
+#include "nm-team-factory.h"
+#include "nm-device-team.h"
+#include "nm-logging.h"
+#include "nm-platform.h"
+#include "nm-core-internal.h"
+
+static GType nm_team_factory_get_type (void);
+
+static void device_factory_interface_init (NMDeviceFactory *factory_iface);
+
+G_DEFINE_TYPE_EXTENDED (NMTeamFactory, nm_team_factory, G_TYPE_OBJECT, 0,
+ G_IMPLEMENT_INTERFACE (NM_TYPE_DEVICE_FACTORY, device_factory_interface_init))
+
+/************************************************************************/
+
+G_MODULE_EXPORT NMDeviceFactory *
+nm_device_factory_create (GError **error)
+{
+ return (NMDeviceFactory *) g_object_new (NM_TYPE_TEAM_FACTORY, NULL);
+}
+
+/************************************************************************/
+
+static NMDevice *
+new_link (NMDeviceFactory *factory, NMPlatformLink *plink, GError **error)
+{
+ if (plink->type == NM_LINK_TYPE_TEAM)
+ return nm_device_team_new (plink);
+ return NULL;
+}
+
+static NMDevice *
+create_virtual_device_for_connection (NMDeviceFactory *factory,
+ NMConnection *connection,
+ NMDevice *parent,
+ GError **error)
+{
+ if (nm_connection_is_type (connection, NM_SETTING_TEAM_SETTING_NAME))
+ return nm_device_team_new_for_connection (connection, error);
+ return NULL;
+}
+
+static NMDeviceType
+get_device_type (NMDeviceFactory *factory)
+{
+ return NM_DEVICE_TYPE_TEAM;
+}
+
+/************************************************************************/
+
+static void
+nm_team_factory_init (NMTeamFactory *self)
+{
+}
+
+static void
+device_factory_interface_init (NMDeviceFactory *factory_iface)
+{
+ factory_iface->new_link = new_link;
+ factory_iface->create_virtual_device_for_connection = create_virtual_device_for_connection;
+ factory_iface->get_device_type = get_device_type;
+}
+
+static void
+nm_team_factory_class_init (NMTeamFactoryClass *klass)
+{
+}
diff --git a/src/settings/plugins/ifcfg-rh/errors.c b/src/devices/team/nm-team-factory.h
index 25039104a..2f02ac572 100644
--- a/src/settings/plugins/ifcfg-rh/errors.c
+++ b/src/devices/team/nm-team-factory.h
@@ -1,5 +1,5 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* NetworkManager system settings service
+/* 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
@@ -15,21 +15,23 @@
* 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 - 2009 Red Hat, Inc.
+ * Copyright (C) 2014 Red Hat, Inc.
*/
-#include <glib.h>
-#include "common.h"
+#ifndef __NETWORKMANAGER_TEAM_FACTORY_H__
+#define __NETWORKMANAGER_TEAM_FACTORY_H__
-GQuark
-ifcfg_plugin_error_quark (void)
-{
- static GQuark error_quark = 0;
+#include <glib-object.h>
- if (G_UNLIKELY (error_quark == 0))
- error_quark = g_quark_from_static_string ("ifcfg-plugin-error-quark");
+#define NM_TYPE_TEAM_FACTORY (nm_team_factory_get_type ())
+#define NM_TEAM_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_TEAM_FACTORY, NMTeamFactory))
- return error_quark;
-}
+typedef struct {
+ GObject parent;
+} NMTeamFactory;
+typedef struct {
+ GObjectClass parent;
+} NMTeamFactoryClass;
+#endif /* __NETWORKMANAGER_TEAM_FACTORY_H__ */
diff --git a/src/devices/wifi/Makefile.am b/src/devices/wifi/Makefile.am
index 5f3ce286b..230c00acc 100644
--- a/src/devices/wifi/Makefile.am
+++ b/src/devices/wifi/Makefile.am
@@ -7,21 +7,17 @@ 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 \
+ -I${top_builddir}/libnm-core \
+ -I${top_srcdir}/libnm-core \
-DG_LOG_DOMAIN=\""NetworkManager-wifi"\" \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
- $(DBUS_CFLAGS) \
- $(POLKIT_CFLAGS) \
- $(LIBNL_CFLAGS) \
- $(GUDEV_CFLAGS)
+ $(DBUS_CFLAGS)
GLIB_GENERATED = nm-wifi-enum-types.h nm-wifi-enum-types.c
GLIB_MKENUMS_H_FLAGS = --identifier-prefix NM
diff --git a/src/devices/wifi/Makefile.in b/src/devices/wifi/Makefile.in
index cbf6826be..175dd9002 100644
--- a/src/devices/wifi/Makefile.in
+++ b/src/devices/wifi/Makefile.in
@@ -261,6 +261,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -384,6 +386,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -403,6 +406,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -429,7 +433,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -512,21 +516,17 @@ 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 \
+ -I${top_builddir}/libnm-core \
+ -I${top_srcdir}/libnm-core \
-DG_LOG_DOMAIN=\""NetworkManager-wifi"\" \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
- $(DBUS_CFLAGS) \
- $(POLKIT_CFLAGS) \
- $(LIBNL_CFLAGS) \
- $(GUDEV_CFLAGS)
+ $(DBUS_CFLAGS)
GLIB_GENERATED = nm-wifi-enum-types.h nm-wifi-enum-types.c
GLIB_MKENUMS_H_FLAGS = --identifier-prefix NM
diff --git a/src/devices/wifi/exports.ver b/src/devices/wifi/exports.ver
index d2c451244..24cd848ce 100644
--- a/src/devices/wifi/exports.ver
+++ b/src/devices/wifi/exports.ver
@@ -1,7 +1,6 @@
{
global:
nm_device_factory_create;
- nm_device_factory_get_device_type;
local:
*;
};
diff --git a/src/devices/wifi/nm-device-olpc-mesh.c b/src/devices/wifi/nm-device-olpc-mesh.c
index 85214a700..0f5aa1648 100644
--- a/src/devices/wifi/nm-device-olpc-mesh.c
+++ b/src/devices/wifi/nm-device-olpc-mesh.c
@@ -25,18 +25,16 @@
*/
#include "config.h"
+
#include <glib.h>
#include <glib/gi18n.h>
#include <dbus/dbus.h>
#include <netinet/in.h>
#include <string.h>
-#include <net/ethernet.h>
-#include <netinet/ether.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <signal.h>
#include <unistd.h>
-#include <linux/if.h>
#include <sys/ioctl.h>
#include <errno.h>
@@ -53,14 +51,18 @@
#include "nm-manager.h"
#include "nm-enum-types.h"
#include "nm-dbus-manager.h"
+#include "nm-platform.h"
#include "nm-wifi-enum-types.h"
/* This is a bug; but we can't really change API now... */
-#include "NetworkManagerVPN.h"
+#include "nm-vpn-dbus-interface.h"
#include "nm-device-olpc-mesh-glue.h"
+#include "nm-device-logging.h"
+_LOG_DECLARE_SELF(NMDeviceOlpcMesh);
+
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))
@@ -80,19 +82,6 @@ struct _NMDeviceOlpcMeshPrivate {
/*******************************************************************/
-static GQuark
-nm_olpc_mesh_error_quark (void)
-{
- static GQuark quark = 0;
- if (!quark)
- quark = g_quark_from_static_string ("nm-mesh-error");
- return quark;
-}
-
-#define NM_OLPC_MESH_ERROR (nm_olpc_mesh_error_quark ())
-
-/*******************************************************************/
-
static gboolean
check_connection_compatible (NMDevice *device, NMConnection *connection)
{
@@ -149,19 +138,17 @@ complete_connection (NMDevice *device,
}
if (!nm_setting_olpc_mesh_get_dhcp_anycast_address (s_mesh)) {
- const guint8 anycast[ETH_ALEN] = { 0xC0, 0x27, 0xC0, 0x27, 0xC0, 0x27 };
+ const char *anycast = "c0:27:c0:27:c0:27";
- tmp = g_byte_array_sized_new (ETH_ALEN);
- g_byte_array_append (tmp, anycast, sizeof (anycast));
- g_object_set (G_OBJECT (s_mesh), NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS, tmp, NULL);
- g_byte_array_free (tmp, TRUE);
+ g_object_set (G_OBJECT (s_mesh), NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS, anycast, NULL);
}
nm_utils_complete_generic (connection,
NM_SETTING_OLPC_MESH_SETTING_NAME,
existing_connections,
- _("Mesh %d"),
+ NULL,
+ _("Mesh"),
NULL,
FALSE); /* No IPv6 by default */
@@ -171,28 +158,27 @@ complete_connection (NMDevice *device,
/****************************************************************************/
static NMActStageReturn
-act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
+act_stage1_prepare (NMDevice *device, NMDeviceStateReason *reason)
{
- NMDeviceOlpcMeshPrivate *priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (dev);
+ NMDeviceOlpcMesh *self = NM_DEVICE_OLPC_MESH (device);
+ NMDeviceOlpcMeshPrivate *priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (device);
NMActStageReturn ret;
gboolean scanning;
- ret = NM_DEVICE_CLASS (nm_device_olpc_mesh_parent_class)->act_stage1_prepare (dev, reason);
+ ret = NM_DEVICE_CLASS (nm_device_olpc_mesh_parent_class)->act_stage1_prepare (device, 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, "(%s): disconnecting companion device %s",
- nm_device_get_iface (dev),
- nm_device_get_iface (priv->companion));
+ _LOGI (LOGD_OLPC, "disconnecting companion device %s",
+ 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, "(%s): companion %s disconnected",
- nm_device_get_iface (dev),
- nm_device_get_iface (priv->companion));
+ NM_DEVICE_STATE_REASON_USER_REQUESTED);
+ _LOGI (LOGD_OLPC, "companion %s disconnected",
+ nm_device_get_iface (priv->companion));
}
@@ -218,16 +204,16 @@ _mesh_set_channel (NMDeviceOlpcMesh *self, guint32 channel)
}
static NMActStageReturn
-act_stage2_config (NMDevice *dev, NMDeviceStateReason *reason)
+act_stage2_config (NMDevice *device, NMDeviceStateReason *reason)
{
- NMDeviceOlpcMesh *self = NM_DEVICE_OLPC_MESH (dev);
+ NMDeviceOlpcMesh *self = NM_DEVICE_OLPC_MESH (device);
NMConnection *connection;
NMSettingOlpcMesh *s_mesh;
guint32 channel;
- const GByteArray *anycast_addr_array;
- guint8 *anycast_addr = NULL;
+ GBytes *ssid;
+ const char *anycast_addr;
- connection = nm_device_get_connection (dev);
+ connection = nm_device_get_connection (device);
g_assert (connection);
s_mesh = nm_connection_get_setting_olpc_mesh (connection);
@@ -236,25 +222,25 @@ act_stage2_config (NMDevice *dev, NMDeviceStateReason *reason)
channel = nm_setting_olpc_mesh_get_channel (s_mesh);
if (channel != 0)
_mesh_set_channel (self, channel);
- 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)
- anycast_addr = anycast_addr_array->data;
+ ssid = nm_setting_olpc_mesh_get_ssid (s_mesh);
+ nm_platform_mesh_set_ssid (nm_device_get_ifindex (device),
+ g_bytes_get_data (ssid, NULL),
+ g_bytes_get_size (ssid));
+
+ anycast_addr = nm_setting_olpc_mesh_get_dhcp_anycast_address (s_mesh);
+ nm_device_set_dhcp_anycast_address (device, anycast_addr);
- nm_device_set_dhcp_anycast_address (dev, anycast_addr);
return NM_ACT_STAGE_RETURN_SUCCESS;
}
static gboolean
-is_available (NMDevice *dev)
+is_available (NMDevice *device)
{
- NMDeviceOlpcMesh *self = NM_DEVICE_OLPC_MESH (dev);
+ NMDeviceOlpcMesh *self = NM_DEVICE_OLPC_MESH (device);
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));
+ _LOGD (LOGD_WIFI, "not available because companion not found");
return FALSE;
}
@@ -310,12 +296,11 @@ companion_state_changed_cb (NMDeviceWifi *companion,
|| state > NM_DEVICE_STATE_ACTIVATED)
return;
- nm_log_dbg (LOGD_OLPC, "(%s): disconnecting mesh due to companion connectivity",
- nm_device_get_iface (NM_DEVICE (self)));
+ _LOGD (LOGD_OLPC, "disconnecting mesh due to companion connectivity");
/* FIXME: VPN stuff here is a bug; but we can't really change API now... */
nm_device_state_changed (NM_DEVICE (self),
NM_DEVICE_STATE_DISCONNECTED,
- NM_VPN_CONNECTION_STATE_REASON_USER_DISCONNECTED);
+ NM_DEVICE_STATE_REASON_USER_REQUESTED);
}
static gboolean
@@ -343,24 +328,21 @@ static gboolean
check_companion (NMDeviceOlpcMesh *self, NMDevice *other)
{
NMDeviceOlpcMeshPrivate *priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (self);
- const guint8 *my_addr, *their_addr;
- guint their_addr_len;
+ const char *my_addr, *their_addr;
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 (my_addr, their_addr, ETH_ALEN) != 0))
+ my_addr = nm_device_get_hw_address (NM_DEVICE (self));
+ their_addr = nm_device_get_hw_address (other);
+ if (!nm_utils_hwaddr_matches (my_addr, -1, their_addr, -1))
return FALSE;
g_assert (priv->companion == NULL);
priv->companion = g_object_ref (other);
- nm_log_info (LOGD_OLPC, "(%s): found companion WiFi device %s",
- nm_device_get_iface (NM_DEVICE (self)),
- nm_device_get_iface (other));
+ _LOGI (LOGD_OLPC, "found companion WiFi device %s",
+ nm_device_get_iface (other));
g_signal_connect (G_OBJECT (other), "state-changed",
G_CALLBACK (companion_state_changed_cb), self);
@@ -471,13 +453,8 @@ constructor (GType type,
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)));
+ _LOGW (LOGD_HW | LOGD_OLPC, "failed to initialize WiFi driver");
g_object_unref (object);
return NULL;
}
@@ -562,24 +539,20 @@ nm_device_olpc_mesh_class_init (NMDeviceOlpcMeshClass *klass)
/* 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",
+ g_param_spec_boxed (NM_DEVICE_OLPC_MESH_COMPANION, "", "",
DBUS_TYPE_G_OBJECT_PATH,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
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));
+ g_param_spec_uint (NM_DEVICE_OLPC_MESH_ACTIVE_CHANNEL, "", "",
+ 0, G_MAXUINT32, 0,
+ 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_olpc_mesh_object_info);
-
- dbus_g_error_domain_register (NM_OLPC_MESH_ERROR, NULL, NM_TYPE_OLPC_MESH_ERROR);
}
diff --git a/src/devices/wifi/nm-device-olpc-mesh.h b/src/devices/wifi/nm-device-olpc-mesh.h
index c25dd8e53..67d83fb05 100644
--- a/src/devices/wifi/nm-device-olpc-mesh.h
+++ b/src/devices/wifi/nm-device-olpc-mesh.h
@@ -25,11 +25,10 @@
* (C) Copyright 2009 One Laptop per Child
*/
-#ifndef NM_DEVICE_OLPC_MESH_H
-#define NM_DEVICE_OLPC_MESH_H
+#ifndef __NETWORKMANAGER_DEVICE_OLPC_MESH_H__
+#define __NETWORKMANAGER_DEVICE_OLPC_MESH_H__
#include <glib-object.h>
-#include <dbus/dbus.h>
#include "nm-device.h"
@@ -42,13 +41,6 @@ G_BEGIN_DECLS
#define NM_IS_DEVICE_OLPC_MESH_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_OLPC_MESH))
#define NM_DEVICE_OLPC_MESH_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_OLPC_MESH, NMDeviceOlpcMeshClass))
-typedef enum
-{
- NM_OLPC_MESH_ERROR_CONNECTION_NOT_MESH = 0, /*< nick=ConnectionNotMesh >*/
- NM_OLPC_MESH_ERROR_CONNECTION_INVALID, /*< nick=ConnectionInvalid >*/
- NM_OLPC_MESH_ERROR_CONNECTION_INCOMPATIBLE, /*< nick=ConnectionIncompatible >*/
-} NMOlpcMeshError;
-
#define NM_DEVICE_OLPC_MESH_COMPANION "companion"
#define NM_DEVICE_OLPC_MESH_BITRATE "bitrate"
#define NM_DEVICE_OLPC_MESH_ACTIVE_CHANNEL "active-channel"
diff --git a/src/devices/wifi/nm-device-wifi.c b/src/devices/wifi/nm-device-wifi.c
index 95173cf47..dd7754b33 100644
--- a/src/devices/wifi/nm-device-wifi.c
+++ b/src/devices/wifi/nm-device-wifi.c
@@ -19,12 +19,13 @@
* 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 <net/ethernet.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <signal.h>
@@ -32,7 +33,6 @@
#include <linux/sockios.h>
#include <linux/ethtool.h>
#include <sys/ioctl.h>
-#include <netinet/ether.h>
#include <errno.h>
#include "nm-glib-compat.h"
@@ -52,9 +52,10 @@
#include "nm-setting-wireless-security.h"
#include "nm-setting-8021x.h"
#include "nm-setting-ip4-config.h"
+#include "nm-ip4-config.h"
#include "nm-setting-ip6-config.h"
#include "nm-platform.h"
-#include "nm-manager-auth.h"
+#include "nm-auth-utils.h"
#include "nm-settings-connection.h"
#include "nm-enum-types.h"
#include "nm-dbus-glib-types.h"
@@ -76,6 +77,8 @@ static void impl_device_request_scan (NMDeviceWifi *device,
#include "nm-device-wifi-glue.h"
+#include "nm-device-logging.h"
+_LOG_DECLARE_SELF(NMDeviceWifi);
/* All of these are in seconds */
#define SCAN_INTERVAL_MIN 3
@@ -115,8 +118,8 @@ static guint signals[LAST_SIGNAL] = { 0 };
struct _NMDeviceWifiPrivate {
gboolean disposed;
- guint8 perm_hw_addr[ETH_ALEN]; /* Permanent MAC address */
- guint8 initial_hw_addr[ETH_ALEN]; /* Initial MAC address (as seen when NM starts) */
+ char * perm_hw_addr; /* Permanent MAC address */
+ char * initial_hw_addr; /* Initial MAC address (as seen when NM starts) */
gint8 invalid_strength_counter;
@@ -192,19 +195,6 @@ static void remove_supplicant_interface_error_handler (NMDeviceWifi *self);
/*****************************************************************/
-#define NM_WIFI_ERROR (nm_wifi_error_quark ())
-
-static GQuark
-nm_wifi_error_quark (void)
-{
- static GQuark quark = 0;
- if (!quark)
- quark = g_quark_from_static_string ("nm-wifi-error");
- return quark;
-}
-
-/*****************************************************************/
-
static GObject*
constructor (GType type,
guint n_construct_params,
@@ -223,22 +213,15 @@ constructor (GType type,
self = NM_DEVICE_WIFI (object);
priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
- nm_log_dbg (LOGD_HW | LOGD_WIFI, "(%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)),
&priv->capabilities)) {
- nm_log_warn (LOGD_HW | LOGD_WIFI, "(%s): failed to initialize WiFi driver",
- nm_device_get_iface (NM_DEVICE (self)));
+ _LOGW (LOGD_HW | LOGD_WIFI, "failed to initialize WiFi driver");
g_object_unref (object);
return NULL;
}
- if (priv->capabilities & NM_WIFI_DEVICE_CAP_AP) {
- nm_log_info (LOGD_HW | LOGD_WIFI, "(%s): driver supports Access Point (AP) mode",
- nm_device_get_iface (NM_DEVICE (self)));
- }
+ if (priv->capabilities & NM_WIFI_DEVICE_CAP_AP)
+ _LOGI (LOGD_HW | LOGD_WIFI, "driver supports Access Point (AP) mode");
/* Connect to the supplicant manager */
priv->sup_mgr = nm_supplicant_manager_get ();
@@ -260,13 +243,12 @@ supplicant_interface_acquire (NMDeviceWifi *self)
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)));
+ _LOGE (LOGD_WIFI, "Couldn't initialize supplicant interface");
return FALSE;
}
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);
+ nm_device_add_pending_action (NM_DEVICE (self), "waiting for supplicant", FALSE);
g_signal_connect (priv->sup_iface,
NM_SUPPLICANT_INTERFACE_STATE,
@@ -309,9 +291,8 @@ supplicant_interface_release (NMDeviceWifi *self)
/* Reset the scan interval to be pretty frequent when disconnected */
priv->scan_interval = SCAN_INTERVAL_MIN + SCAN_INTERVAL_STEP;
- nm_log_dbg (LOGD_WIFI_SCAN, "(%s): reset scanning interval to %d seconds",
- nm_device_get_iface (NM_DEVICE (self)),
- priv->scan_interval);
+ _LOGD (LOGD_WIFI_SCAN, "reset scanning interval to %d seconds",
+ priv->scan_interval);
if (priv->scanlist_cull_id) {
g_source_remove (priv->scanlist_cull_id);
@@ -370,9 +351,8 @@ find_active_ap (NMDeviceWifi *self,
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;
+ guint8 bssid[ETH_ALEN];
GByteArray *ssid;
GSList *iter;
int i = 0;
@@ -382,22 +362,18 @@ find_active_ap (NMDeviceWifi *self,
NM80211Mode devmode;
guint32 devfreq;
- 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],
- bssid.ether_addr_octet[2], bssid.ether_addr_octet[3],
- bssid.ether_addr_octet[4], bssid.ether_addr_octet[5]);
+ nm_platform_wifi_get_bssid (ifindex, bssid);
+ _LOGD (LOGD_WIFI, "active BSSID: %02x:%02x:%02x:%02x:%02x:%02x",
+ bssid[0], bssid[1], bssid[2], bssid[3], bssid[4], bssid[5]);
- if (!nm_ethernet_address_is_valid (&bssid))
+ if (!nm_ethernet_address_is_valid (bssid, ETH_ALEN))
return NULL;
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 ? "'" : "");
+ _LOGD (LOGD_WIFI, "active SSID: %s%s%s",
+ ssid ? "'" : "",
+ ssid ? nm_utils_escape_ssid (ssid->data, ssid->len) : "(none)",
+ ssid ? "'" : "");
devmode = nm_platform_wifi_get_mode (ifindex);
devfreq = nm_platform_wifi_get_frequency (ifindex);
@@ -407,50 +383,54 @@ find_active_ap (NMDeviceWifi *self,
* and therefore it won't get matched the first time around.
*/
while (i++ < (match_hidden ? 2 : 1)) {
- nm_log_dbg (LOGD_WIFI, " Pass #%d %s", i, i > 1 ? "(ignoring SSID)" : "");
+ _LOGD (LOGD_WIFI, " Pass #%d %s", i, i > 1 ? "(ignoring SSID)" : "");
/* Find this SSID + BSSID in the device's AP list */
for (iter = priv->ap_list; iter; iter = g_slist_next (iter)) {
NMAccessPoint *ap = NM_AP (iter->data);
- const struct ether_addr *ap_bssid = nm_ap_get_address (ap);
+ const char *ap_bssid = nm_ap_get_address (ap);
const GByteArray *ap_ssid = nm_ap_get_ssid (ap);
NM80211Mode apmode;
guint32 apfreq;
- nm_log_dbg (LOGD_WIFI, " AP: %s%s%s %02x:%02x:%02x:%02x:%02x:%02x",
- ap_ssid ? "'" : "",
- ap_ssid ? nm_utils_escape_ssid (ap_ssid->data, ap_ssid->len) : "(none)",
- ap_ssid ? "'" : "",
- ap_bssid->ether_addr_octet[0], ap_bssid->ether_addr_octet[1],
- ap_bssid->ether_addr_octet[2], ap_bssid->ether_addr_octet[3],
- ap_bssid->ether_addr_octet[4], ap_bssid->ether_addr_octet[5]);
+ _LOGD (LOGD_WIFI, " AP: %s%s%s %s",
+ ap_ssid ? "'" : "",
+ ap_ssid ? nm_utils_escape_ssid (ap_ssid->data, ap_ssid->len) : "(none)",
+ ap_ssid ? "'" : "",
+ str_if_set (ap_bssid, "(none)"));
if (ap == ignore_ap) {
- nm_log_dbg (LOGD_WIFI, " ignored");
+ _LOGD (LOGD_WIFI, " ignored");
continue;
}
- if (memcmp (bssid.ether_addr_octet, ap_bssid->ether_addr_octet, ETH_ALEN)) {
- nm_log_dbg (LOGD_WIFI, " BSSID mismatch");
+ if (!nm_utils_hwaddr_matches (bssid, ETH_ALEN, ap_bssid, -1)) {
+ _LOGD (LOGD_WIFI, " BSSID mismatch");
continue;
}
- if ((i == 0) && !nm_utils_same_ssid (ssid, ap_ssid, TRUE)) {
- nm_log_dbg (LOGD_WIFI, " SSID mismatch");
- continue;
+ if (i == 0) {
+ if ( (ssid && !ap_ssid)
+ || (ap_ssid && !ssid)
+ || (ssid && ap_ssid && !nm_utils_same_ssid (ssid->data, ssid->len,
+ ap_ssid->data, ap_ssid->len,
+ TRUE))) {
+ _LOGD (LOGD_WIFI, " SSID mismatch");
+ continue;
+ }
}
apmode = nm_ap_get_mode (ap);
if (devmode != apmode) {
- nm_log_dbg (LOGD_WIFI, " mode mismatch (device %d, ap %d)",
- devmode, apmode);
+ _LOGD (LOGD_WIFI, " mode mismatch (device %d, ap %d)",
+ devmode, apmode);
continue;
}
apfreq = nm_ap_get_freq (ap);
if (devfreq != apfreq) {
- nm_log_dbg (LOGD_WIFI, " frequency mismatch (device %u, ap %u)",
- devfreq, apfreq);
+ _LOGD (LOGD_WIFI, " frequency mismatch (device %u, ap %u)",
+ devfreq, apfreq);
if (match_nofreq == NULL)
match_nofreq = ap;
@@ -463,7 +443,7 @@ find_active_ap (NMDeviceWifi *self,
}
// FIXME: handle security settings here too
- nm_log_dbg (LOGD_WIFI, " matched");
+ _LOGD (LOGD_WIFI, " matched");
active_ap = ap;
goto done;
}
@@ -482,22 +462,19 @@ find_active_ap (NMDeviceWifi *self,
* we can't match the AP based on frequency at all, just give up.
*/
if (match_nofreq && ((found_a_band != found_bg_band) || (devfreq == 0))) {
- const struct ether_addr *ap_bssid = nm_ap_get_address (match_nofreq);
const GByteArray *ap_ssid = nm_ap_get_ssid (match_nofreq);
- nm_log_dbg (LOGD_WIFI, " matched %s%s%s %02x:%02x:%02x:%02x:%02x:%02x",
- ap_ssid ? "'" : "",
- ap_ssid ? nm_utils_escape_ssid (ap_ssid->data, ap_ssid->len) : "(none)",
- ap_ssid ? "'" : "",
- ap_bssid->ether_addr_octet[0], ap_bssid->ether_addr_octet[1],
- ap_bssid->ether_addr_octet[2], ap_bssid->ether_addr_octet[3],
- ap_bssid->ether_addr_octet[4], ap_bssid->ether_addr_octet[5]);
+ _LOGD (LOGD_WIFI, " matched %s%s%s %s",
+ ap_ssid ? "'" : "",
+ ap_ssid ? nm_utils_escape_ssid (ap_ssid->data, ap_ssid->len) : "(none)",
+ ap_ssid ? "'" : "",
+ str_if_set (nm_ap_get_address (match_nofreq), "(none)"));
active_ap = match_nofreq;
goto done;
}
- nm_log_dbg (LOGD_WIFI, " No matching AP found.");
+ _LOGD (LOGD_WIFI, " No matching AP found.");
done:
if (ssid)
@@ -612,15 +589,17 @@ periodic_update (NMDeviceWifi *self, NMAccessPoint *ignore_ap)
* current AP with it, if the current AP is adhoc.
*/
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} };
+ guint8 bssid[ETH_ALEN] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 };
- nm_platform_wifi_get_bssid (ifindex, &bssid);
+ nm_platform_wifi_get_bssid (ifindex, bssid);
/* 0x02 means "locally administered" and should be OR-ed into
* the first byte of IBSS BSSIDs.
*/
- if ( (bssid.ether_addr_octet[0] & 0x02)
- && nm_ethernet_address_is_valid (&bssid))
- nm_ap_set_address (priv->current_ap, &bssid);
+ if ((bssid[0] & 0x02) && nm_ethernet_address_is_valid (bssid, ETH_ALEN)) {
+ char *bssid_str = nm_utils_hwaddr_ntoa (bssid, ETH_ALEN);
+ nm_ap_set_address (priv->current_ap, bssid_str);
+ g_free (bssid_str);
+ }
}
new_ap = find_active_ap (self, ignore_ap, FALSE);
@@ -636,32 +615,26 @@ periodic_update (NMDeviceWifi *self, NMAccessPoint *ignore_ap)
}
if (new_ap != priv->current_ap) {
- const struct ether_addr *new_bssid = NULL;
+ const char *new_bssid = NULL;
const GByteArray *new_ssid = NULL;
- const struct ether_addr *old_bssid = NULL;
+ const char *old_bssid = NULL;
const GByteArray *old_ssid = NULL;
- char *old_addr = NULL, *new_addr = NULL;
if (new_ap) {
new_bssid = nm_ap_get_address (new_ap);
- new_addr = nm_utils_hwaddr_ntoa (new_bssid, ARPHRD_ETHER);
new_ssid = nm_ap_get_ssid (new_ap);
}
if (priv->current_ap) {
old_bssid = nm_ap_get_address (priv->current_ap);
- old_addr = nm_utils_hwaddr_ntoa (old_bssid, ARPHRD_ETHER);
old_ssid = nm_ap_get_ssid (priv->current_ap);
}
- nm_log_info (LOGD_WIFI, "(%s): roamed from BSSID %s (%s) to %s (%s)",
- nm_device_get_iface (NM_DEVICE (self)),
- old_addr ? old_addr : "(none)",
- old_ssid ? nm_utils_escape_ssid (old_ssid->data, old_ssid->len) : "(none)",
- new_addr ? new_addr : "(none)",
- new_ssid ? nm_utils_escape_ssid (new_ssid->data, new_ssid->len) : "(none)");
- g_free (old_addr);
- g_free (new_addr);
+ _LOGI (LOGD_WIFI, "roamed from BSSID %s (%s) to %s (%s)",
+ old_bssid ? old_bssid : "(none)",
+ old_ssid ? nm_utils_escape_ssid (old_ssid->data, old_ssid->len) : "(none)",
+ new_bssid ? new_bssid : "(none)",
+ new_ssid ? nm_utils_escape_ssid (new_ssid->data, new_ssid->len) : "(none)");
set_current_ap (self, new_ap, TRUE, FALSE);
}
@@ -734,15 +707,15 @@ remove_all_aps (NMDeviceWifi *self)
}
static void
-deactivate (NMDevice *dev)
+deactivate (NMDevice *device)
{
- NMDeviceWifi *self = NM_DEVICE_WIFI (dev);
+ NMDeviceWifi *self = NM_DEVICE_WIFI (device);
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
- int ifindex = nm_device_get_ifindex (dev);
+ int ifindex = nm_device_get_ifindex (device);
NMConnection *connection;
NM80211Mode old_mode = priv->mode;
- connection = nm_device_get_connection (dev);
+ connection = nm_device_get_connection (device);
if (connection) {
/* Clear wireless secrets tries when deactivating */
g_object_set_data (G_OBJECT (connection), WIRELESS_SECRETS_TRIES, NULL);
@@ -768,7 +741,8 @@ deactivate (NMDevice *dev)
nm_platform_wifi_indicate_addressing_running (ifindex, FALSE);
/* Reset MAC address back to initial address */
- nm_device_set_hw_addr (dev, priv->initial_hw_addr, "reset", LOGD_WIFI);
+ if (priv->initial_hw_addr)
+ nm_device_set_hw_addr (device, 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.
@@ -828,8 +802,9 @@ check_connection_compatible (NMDevice *device, NMConnection *connection)
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
NMSettingConnection *s_con;
NMSettingWireless *s_wireless;
- const GByteArray *mac;
- const GSList *mac_blacklist, *mac_blacklist_iter;
+ const char *mac;
+ const char * const *mac_blacklist;
+ int i;
const char *mode;
if (!NM_DEVICE_CLASS (nm_device_wifi_parent_class)->check_connection_compatible (device, connection))
@@ -846,21 +821,18 @@ check_connection_compatible (NMDevice *device, NMConnection *connection)
return FALSE;
mac = nm_setting_wireless_get_mac_address (s_wireless);
- if (mac && memcmp (mac->data, &priv->perm_hw_addr, ETH_ALEN))
+ if (mac && !nm_utils_hwaddr_matches (mac, -1, priv->perm_hw_addr, -1))
return FALSE;
/* 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)) {
+ for (i = 0; mac_blacklist[i]; i++) {
+ if (!nm_utils_hwaddr_valid (mac_blacklist[i], ETH_ALEN)) {
g_warn_if_reached ();
- continue;
+ return FALSE;
}
- if (memcmp (&addr, &priv->perm_hw_addr, ETH_ALEN) == 0)
+ if (nm_utils_hwaddr_matches (mac_blacklist[i], -1, priv->perm_hw_addr, -1))
return FALSE;
}
@@ -998,10 +970,12 @@ complete_connection (NMDevice *device,
NMSettingWireless *s_wifi;
NMSettingWirelessSecurity *s_wsec;
NMSetting8021x *s_8021x;
- const GByteArray *setting_mac;
- char *format, *str_ssid = NULL;
+ const char *setting_mac;
+ char *str_ssid = NULL;
NMAccessPoint *ap = NULL;
const GByteArray *ssid = NULL;
+ GByteArray *tmp_ssid = NULL;
+ GBytes *setting_ssid = NULL;
GSList *iter;
gboolean hidden = FALSE;
@@ -1013,17 +987,17 @@ complete_connection (NMDevice *device,
/* If not given a specific object, we need at minimum an SSID */
if (!s_wifi) {
g_set_error_literal (error,
- NM_WIFI_ERROR,
- NM_WIFI_ERROR_CONNECTION_INVALID,
+ NM_DEVICE_ERROR,
+ NM_DEVICE_ERROR_INVALID_CONNECTION,
"A 'wireless' setting is required if no AP path was given.");
return FALSE;
}
- ssid = nm_setting_wireless_get_ssid (s_wifi);
- if (!ssid || !ssid->len) {
+ setting_ssid = nm_setting_wireless_get_ssid (s_wifi);
+ if (!setting_ssid || g_bytes_get_size (setting_ssid) == 0) {
g_set_error_literal (error,
- NM_WIFI_ERROR,
- NM_WIFI_ERROR_CONNECTION_INVALID,
+ NM_DEVICE_ERROR,
+ NM_DEVICE_ERROR_INVALID_CONNECTION,
"A 'wireless' setting with a valid SSID is required if no AP path was given.");
return FALSE;
}
@@ -1041,17 +1015,7 @@ complete_connection (NMDevice *device,
* if the network isn't broadcasting the SSID for example.
*/
if (!ap) {
- GSList *settings = NULL;
- gboolean valid;
-
- settings = g_slist_prepend (settings, s_wifi);
- if (s_wsec)
- settings = g_slist_prepend (settings, s_wsec);
- if (s_8021x)
- settings = g_slist_prepend (settings, s_8021x);
- valid = nm_setting_verify (NM_SETTING (s_wifi), settings, error);
- g_slist_free (settings);
- if (!valid)
+ if (!nm_setting_verify (NM_SETTING (s_wifi), connection, error))
return FALSE;
hidden = TRUE;
@@ -1060,8 +1024,8 @@ complete_connection (NMDevice *device,
ap = get_ap_by_path (self, specific_object);
if (!ap) {
g_set_error (error,
- NM_WIFI_ERROR,
- NM_WIFI_ERROR_ACCESS_POINT_NOT_FOUND,
+ NM_DEVICE_ERROR,
+ NM_DEVICE_ERROR_SPECIFIC_OBJECT_NOT_FOUND,
"The access point %s was not in the scan list.",
specific_object);
return FALSE;
@@ -1074,37 +1038,48 @@ complete_connection (NMDevice *device,
nm_connection_add_setting (connection, NM_SETTING (s_wifi));
}
- if (ap) {
+ if (ap)
ssid = nm_ap_get_ssid (ap);
-
- if (ssid == NULL) {
- /* The AP must be hidden. Connecting to a WiFi AP requires the SSID
- * as part of the initial handshake, so check the connection details
- * for the SSID. The AP object will still be used for encryption
- * settings and such.
- */
- ssid = nm_setting_wireless_get_ssid (s_wifi);
+ if (ssid == NULL) {
+ /* The AP must be hidden. Connecting to a WiFi AP requires the SSID
+ * as part of the initial handshake, so check the connection details
+ * for the SSID. The AP object will still be used for encryption
+ * settings and such.
+ */
+ setting_ssid = nm_setting_wireless_get_ssid (s_wifi);
+ if (setting_ssid) {
+ ssid = tmp_ssid = g_byte_array_new ();
+ g_byte_array_append (tmp_ssid,
+ g_bytes_get_data (setting_ssid, NULL),
+ g_bytes_get_size (setting_ssid));
}
+ }
- if (ssid == NULL) {
- /* If there's no SSID on the AP itself, and no SSID in the
- * connection data, then we cannot connect at all. Return an error.
- */
- g_set_error_literal (error,
- NM_WIFI_ERROR,
- NM_WIFI_ERROR_CONNECTION_INVALID,
- "A 'wireless' setting with a valid SSID is required for hidden access points.");
- return FALSE;
- }
+ if (ssid == NULL) {
+ /* If there's no SSID on the AP itself, and no SSID in the
+ * connection data, then we cannot connect at all. Return an error.
+ */
+ g_set_error_literal (error,
+ NM_DEVICE_ERROR,
+ NM_DEVICE_ERROR_INVALID_CONNECTION,
+ ap
+ ? "A 'wireless' setting with a valid SSID is required for hidden access points."
+ : "Cannot create 'wireless' setting due to missing SSID.");
+ return FALSE;
+ }
+ if (ap) {
/* If the SSID is a well-known SSID, lock the connection to the AP's
* specific BSSID so NM doesn't autoconnect to some random wifi net.
*/
if (!nm_ap_complete_connection (ap,
connection,
is_manf_default_ssid (ssid),
- error))
+ error)) {
+ if (tmp_ssid)
+ g_byte_array_unref (tmp_ssid);
return FALSE;
+ }
}
/* The kernel doesn't support Ad-Hoc WPA connections well at this time,
@@ -1113,24 +1088,27 @@ complete_connection (NMDevice *device,
*/
if (is_adhoc_wpa (connection)) {
g_set_error_literal (error,
- NM_SETTING_WIRELESS_ERROR,
- NM_SETTING_WIRELESS_ERROR_INVALID_PROPERTY,
- "WPA Ad-Hoc disabled due to kernel bugs");
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_SETTING,
+ _("WPA Ad-Hoc disabled due to kernel bugs"));
+ g_prefix_error (error, "%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
+ if (tmp_ssid)
+ g_byte_array_unref (tmp_ssid);
return FALSE;
}
- g_assert (ssid);
- str_ssid = nm_utils_ssid_to_utf8 (ssid);
- format = g_strdup_printf ("%s %%d", str_ssid);
+ str_ssid = nm_utils_ssid_to_utf8 (ssid->data, ssid->len);
nm_utils_complete_generic (connection,
NM_SETTING_WIRELESS_SETTING_NAME,
existing_connections,
- format,
str_ssid,
+ str_ssid,
+ NULL,
TRUE);
g_free (str_ssid);
- g_free (format);
+ if (tmp_ssid)
+ g_byte_array_unref (tmp_ssid);
if (hidden)
g_object_set (s_wifi, NM_SETTING_WIRELESS_HIDDEN, TRUE, NULL);
@@ -1138,26 +1116,26 @@ complete_connection (NMDevice *device,
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 */
- if (memcmp (setting_mac->data, priv->perm_hw_addr, ETH_ALEN)) {
- g_set_error (error,
- NM_SETTING_WIRELESS_ERROR,
- NM_SETTING_WIRELESS_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIRELESS_MAC_ADDRESS);
+ if (!nm_utils_hwaddr_matches (setting_mac, -1, priv->perm_hw_addr, -1)) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("connection does not match device"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SETTING_NAME, NM_SETTING_WIRELESS_MAC_ADDRESS);
return FALSE;
}
} else {
- GByteArray *mac;
- const guint8 null_mac[ETH_ALEN] = { 0, 0, 0, 0, 0, 0 };
+ guint8 perm_hw_addr[ETH_ALEN];
/* Lock the connection to this device by default if it uses a
* permanent MAC address (ie not a 'locally administered' one)
*/
- if ( !(priv->perm_hw_addr[0] & 0x02)
- && memcmp (priv->perm_hw_addr, null_mac, ETH_ALEN)) {
- mac = g_byte_array_sized_new (ETH_ALEN);
- g_byte_array_append (mac, priv->perm_hw_addr, ETH_ALEN);
- g_object_set (G_OBJECT (s_wifi), NM_SETTING_WIRELESS_MAC_ADDRESS, mac, NULL);
- g_byte_array_free (mac, TRUE);
+ nm_utils_hwaddr_aton (priv->perm_hw_addr, perm_hw_addr, ETH_ALEN);
+ if ( !(perm_hw_addr[0] & 0x02)
+ && !nm_utils_hwaddr_matches (perm_hw_addr, ETH_ALEN, NULL, ETH_ALEN)) {
+ g_object_set (G_OBJECT (s_wifi),
+ NM_SETTING_WIRELESS_MAC_ADDRESS, priv->perm_hw_addr,
+ NULL);
}
}
@@ -1165,31 +1143,26 @@ complete_connection (NMDevice *device,
}
static gboolean
-is_available (NMDevice *dev)
+is_available (NMDevice *device)
{
- NMDeviceWifi *self = NM_DEVICE_WIFI (dev);
+ NMDeviceWifi *self = NM_DEVICE_WIFI (device);
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
- NMSupplicantInterface *sup_iface;
guint32 state;
if (!priv->enabled) {
- nm_log_dbg (LOGD_WIFI, "(%s): not available because not enabled",
- nm_device_get_iface (dev));
+ _LOGD (LOGD_WIFI, "not available because not enabled");
return FALSE;
}
- 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));
+ if (!priv->sup_iface) {
+ _LOGD (LOGD_WIFI, "not available because supplicant not running");
return FALSE;
}
- state = nm_supplicant_interface_get_state (sup_iface);
+ state = nm_supplicant_interface_get_state (priv->sup_iface);
if ( state < NM_SUPPLICANT_INTERFACE_STATE_READY
|| state > NM_SUPPLICANT_INTERFACE_STATE_COMPLETED) {
- nm_log_dbg (LOGD_WIFI, "(%s): not available because supplicant interface not ready",
- nm_device_get_iface (dev));
+ _LOGD (LOGD_WIFI, "not available because supplicant interface not ready");
return FALSE;
}
@@ -1197,17 +1170,17 @@ is_available (NMDevice *dev)
}
static gboolean
-can_auto_connect (NMDevice *dev,
+can_auto_connect (NMDevice *device,
NMConnection *connection,
char **specific_object)
{
- NMDeviceWifi *self = NM_DEVICE_WIFI (dev);
+ NMDeviceWifi *self = NM_DEVICE_WIFI (device);
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
GSList *ap_iter;
const char *method = NULL;
guint64 timestamp = 0;
- if (!NM_DEVICE_CLASS (nm_device_wifi_parent_class)->can_auto_connect (dev, connection, specific_object))
+ if (!NM_DEVICE_CLASS (nm_device_wifi_parent_class)->can_auto_connect (device, connection, specific_object))
return FALSE;
/* Don't autoconnect to networks that have been tried at least once
@@ -1246,12 +1219,12 @@ ap_list_dump (NMDeviceWifi *self)
g_return_if_fail (NM_IS_DEVICE_WIFI (self));
- nm_log_dbg (LOGD_WIFI_SCAN, "Current AP list:");
+ _LOGD (LOGD_WIFI_SCAN, "Current AP list:");
for (elt = priv->ap_list; elt; elt = g_slist_next (elt), i++) {
NMAccessPoint * ap = NM_AP (elt->data);
nm_ap_dump (ap, "List AP: ");
}
- nm_log_dbg (LOGD_WIFI_SCAN, "Current AP list: done");
+ _LOGD (LOGD_WIFI_SCAN, "Current AP list: done");
}
static gboolean
@@ -1301,8 +1274,8 @@ request_scan_cb (NMDevice *device,
}
if (!check_scanning_allowed (self)) {
- local = g_error_new_literal (NM_WIFI_ERROR,
- NM_WIFI_ERROR_SCAN_NOT_ALLOWED,
+ local = g_error_new_literal (NM_DEVICE_ERROR,
+ NM_DEVICE_ERROR_NOT_ALLOWED,
"Scanning not allowed at this time");
dbus_g_method_return_error (context, local);
g_error_free (local);
@@ -1328,23 +1301,23 @@ impl_device_request_scan (NMDeviceWifi *self,
|| !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,
- NM_WIFI_ERROR_SCAN_NOT_ALLOWED,
+ error = g_error_new_literal (NM_DEVICE_ERROR,
+ NM_DEVICE_ERROR_NOT_ALLOWED,
"Scanning not allowed while unavailable or activating");
goto error;
}
if (nm_supplicant_interface_get_scanning (priv->sup_iface)) {
- error = g_error_new_literal (NM_WIFI_ERROR,
- NM_WIFI_ERROR_SCAN_NOT_ALLOWED,
+ error = g_error_new_literal (NM_DEVICE_ERROR,
+ NM_DEVICE_ERROR_NOT_ALLOWED,
"Scanning not allowed while already scanning");
goto error;
}
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,
+ error = g_error_new_literal (NM_DEVICE_ERROR,
+ NM_DEVICE_ERROR_NOT_ALLOWED,
"Scanning not allowed immediately following previous scan");
goto error;
}
@@ -1413,7 +1386,6 @@ scanning_allowed (NMDeviceWifi *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 */
ip4_method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP4_CONFIG);
@@ -1427,8 +1399,7 @@ scanning_allowed (NMDeviceWifi *self)
*/
s_wifi = nm_connection_get_setting_wireless (connection);
g_assert (s_wifi);
- bssid = nm_setting_wireless_get_bssid (s_wifi);
- if (bssid && bssid->len == ETH_ALEN)
+ if (nm_setting_wireless_get_bssid (s_wifi))
return FALSE;
}
@@ -1500,20 +1471,25 @@ build_hidden_probe_list (NMDeviceWifi *self)
hidden_filter_func,
NULL);
if (connections && connections->data) {
- ssids = g_ptr_array_sized_new (max_scan_ssids - 1);
- g_ptr_array_add (ssids, nullssid); /* Add wildcard SSID */
+ ssids = g_ptr_array_new_full (max_scan_ssids - 1, (GDestroyNotify) g_byte_array_unref);
+ g_ptr_array_add (ssids, g_byte_array_ref (nullssid)); /* Add wildcard SSID */
}
for (iter = connections; iter; iter = g_slist_next (iter)) {
NMConnection *connection = iter->data;
NMSettingWireless *s_wifi;
- const GByteArray *ssid;
+ GBytes *ssid;
+ GByteArray *ssid_array;
s_wifi = (NMSettingWireless *) nm_connection_get_setting_wireless (connection);
g_assert (s_wifi);
ssid = nm_setting_wireless_get_ssid (s_wifi);
g_assert (ssid);
- g_ptr_array_add (ssids, (gpointer) ssid);
+ ssid_array = g_byte_array_new ();
+ g_byte_array_append (ssid_array,
+ g_bytes_get_data (ssid, NULL),
+ g_bytes_get_size (ssid));
+ g_ptr_array_add (ssids, ssid_array);
}
g_slist_free (connections);
@@ -1534,27 +1510,25 @@ request_wireless_scan (gpointer user_data)
}
if (check_scanning_allowed (self)) {
- nm_log_dbg (LOGD_WIFI_SCAN, "(%s): scanning requested",
- nm_device_get_iface (NM_DEVICE (self)));
+ _LOGD (LOGD_WIFI_SCAN, "scanning requested");
ssids = build_hidden_probe_list (self);
if (nm_logging_enabled (LOGL_DEBUG, LOGD_WIFI_SCAN)) {
if (ssids) {
+ const GByteArray *ssid;
guint i;
char *foo;
for (i = 0; i < ssids->len; i++) {
- foo = nm_utils_ssid_to_utf8 (g_ptr_array_index (ssids, i));
- nm_log_dbg (LOGD_WIFI_SCAN, "(%s): (%d) probe scanning SSID '%s'",
- nm_device_get_iface (NM_DEVICE (self)),
+ ssid = g_ptr_array_index (ssids, i);
+ foo = nm_utils_ssid_to_utf8 (ssid->data, ssid->len);
+ _LOGD (LOGD_WIFI_SCAN, "(%d) probe scanning SSID '%s'",
i, foo ? foo : "<hidden>");
g_free (foo);
}
- } else {
- nm_log_dbg (LOGD_WIFI_SCAN, "(%s): no SSIDs to probe scan",
- nm_device_get_iface (NM_DEVICE (self)));
- }
+ } else
+ _LOGD (LOGD_WIFI_SCAN, "no SSIDs to probe scan");
}
if (nm_supplicant_interface_request_scan (priv->sup_iface, ssids)) {
@@ -1564,14 +1538,10 @@ request_wireless_scan (gpointer user_data)
nm_device_add_pending_action (NM_DEVICE (self), "scan", TRUE);
}
- if (ssids) {
- /* Elements owned by the connections, so we don't free them here */
- g_ptr_array_free (ssids, TRUE);
- }
- } else {
- nm_log_dbg (LOGD_WIFI_SCAN, "(%s): scan requested but not allowed at this time",
- nm_device_get_iface (NM_DEVICE (self)));
- }
+ if (ssids)
+ g_ptr_array_unref (ssids);
+ } else
+ _LOGD (LOGD_WIFI_SCAN, "scan requested but not allowed at this time");
priv->pending_scan_id = 0;
schedule_scan (self, backoff);
@@ -1622,11 +1592,8 @@ schedule_scan (NMDeviceWifi *self, gboolean backoff)
priv->scan_interval = 5;
}
- nm_log_dbg (LOGD_WIFI_SCAN, "(%s): scheduled scan in %d seconds (interval now %d seconds)",
- nm_device_get_iface (NM_DEVICE (self)),
- next_scan,
- priv->scan_interval);
-
+ _LOGD (LOGD_WIFI_SCAN, "scheduled scan in %d seconds (interval now %d seconds)",
+ next_scan, priv->scan_interval);
}
}
@@ -1649,9 +1616,7 @@ supplicant_iface_scan_done_cb (NMSupplicantInterface *iface,
{
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");
+ _LOGD (LOGD_WIFI_SCAN, "scan %s", success ? "successful" : "failed");
schedule_scan (self, success);
@@ -1674,7 +1639,7 @@ supplicant_iface_scan_done_cb (NMSupplicantInterface *iface,
static void
try_fill_ssid_for_hidden_ap (NMAccessPoint *ap)
{
- const struct ether_addr *bssid;
+ const char *bssid;
const GSList *connections, *iter;
g_return_if_fail (nm_ap_get_ssid (ap) == NULL);
@@ -1692,16 +1657,17 @@ try_fill_ssid_for_hidden_ap (NMAccessPoint *ap)
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));
+ GBytes *ssid = nm_setting_wireless_get_ssid (s_wifi);
+
+ nm_ap_set_ssid (ap,
+ g_bytes_get_data (ssid, NULL),
+ g_bytes_get_size (ssid));
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]
-
/*
* merge_scanned_ap
*
@@ -1721,7 +1687,7 @@ merge_scanned_ap (NMDeviceWifi *self,
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
NMAccessPoint *found_ap = NULL;
const GByteArray *ssid;
- const struct ether_addr *bssid;
+ const char *bssid;
gboolean strict_match = TRUE;
/* Let the manager try to fill in the SSID from seen-bssids lists */
@@ -1734,16 +1700,13 @@ merge_scanned_ap (NMDeviceWifi *self,
ssid = nm_ap_get_ssid (merge_ap);
if (ssid && (nm_utils_is_empty_ssid (ssid->data, ssid->len) == FALSE)) {
/* Yay, matched it, no longer treat as hidden */
- nm_log_dbg (LOGD_WIFI_SCAN, "(%s): matched hidden AP " MAC_FMT " => '%s'",
- nm_device_get_iface (NM_DEVICE (self)),
- MAC_ARG (bssid->ether_addr_octet),
- nm_utils_escape_ssid (ssid->data, ssid->len));
+ _LOGD (LOGD_WIFI_SCAN, "matched hidden AP %s => '%s'",
+ str_if_set (bssid, "(none)"), nm_utils_escape_ssid (ssid->data, ssid->len));
nm_ap_set_broadcast (merge_ap, FALSE);
} else {
/* Didn't have an entry for this AP in the database */
- nm_log_dbg (LOGD_WIFI_SCAN, "(%s): failed to match hidden AP " MAC_FMT,
- nm_device_get_iface (NM_DEVICE (self)),
- MAC_ARG (bssid->ether_addr_octet));
+ _LOGD (LOGD_WIFI_SCAN, "failed to match hidden AP %s",
+ str_if_set (bssid, "(none)"));
}
}
@@ -1760,10 +1723,9 @@ merge_scanned_ap (NMDeviceWifi *self,
if (!found_ap)
found_ap = nm_ap_match_in_list (merge_ap, priv->ap_list, strict_match);
if (found_ap) {
- nm_log_dbg (LOGD_WIFI_SCAN, "(%s): merging AP '%s' " MAC_FMT " (%p) with existing (%p)",
- nm_device_get_iface (NM_DEVICE (self)),
+ _LOGD (LOGD_WIFI_SCAN, "merging AP '%s' %s (%p) with existing (%p)",
ssid ? nm_utils_escape_ssid (ssid->data, ssid->len) : "(none)",
- MAC_ARG (bssid->ether_addr_octet),
+ str_if_set (bssid, "(none)"),
merge_ap,
found_ap);
@@ -1783,11 +1745,9 @@ merge_scanned_ap (NMDeviceWifi *self,
nm_ap_set_fake (found_ap, FALSE);
} else {
/* New entry in the list */
- nm_log_dbg (LOGD_WIFI_SCAN, "(%s): adding new AP '%s' " MAC_FMT " (%p)",
- nm_device_get_iface (NM_DEVICE (self)),
- ssid ? nm_utils_escape_ssid (ssid->data, ssid->len) : "(none)",
- MAC_ARG (bssid->ether_addr_octet),
- merge_ap);
+ _LOGD (LOGD_WIFI_SCAN, "adding new AP '%s' %s (%p)",
+ ssid ? nm_utils_escape_ssid (ssid->data, ssid->len) : "(none)",
+ str_if_set (bssid, "(none)"), merge_ap);
g_object_ref (merge_ap);
priv->ap_list = g_slist_prepend (priv->ap_list, merge_ap);
@@ -1809,8 +1769,7 @@ cull_scan_list (NMDeviceWifi *self)
priv->scanlist_cull_id = 0;
- nm_log_dbg (LOGD_WIFI_SCAN, "(%s): checking scan list for outdated APs",
- nm_device_get_iface (NM_DEVICE (self)));
+ _LOGD (LOGD_WIFI_SCAN, "checking scan list for outdated APs");
/* Walk the access point list and remove any access points older than
* three times the inactive scan interval.
@@ -1844,28 +1803,23 @@ cull_scan_list (NMDeviceWifi *self)
/* Remove outdated APs */
for (elt = outdated_list; elt; elt = g_slist_next (elt)) {
NMAccessPoint *outdated_ap = NM_AP (elt->data);
- const struct ether_addr *bssid;
const GByteArray *ssid;
- bssid = nm_ap_get_address (outdated_ap);
ssid = nm_ap_get_ssid (outdated_ap);
- nm_log_dbg (LOGD_WIFI_SCAN,
- " removing %02x:%02x:%02x:%02x:%02x:%02x (%s%s%s)",
- bssid->ether_addr_octet[0], bssid->ether_addr_octet[1],
- bssid->ether_addr_octet[2], bssid->ether_addr_octet[3],
- bssid->ether_addr_octet[4], bssid->ether_addr_octet[5],
- ssid ? "'" : "",
- ssid ? nm_utils_escape_ssid (ssid->data, ssid->len) : "(none)",
- ssid ? "'" : "");
+ _LOGD (LOGD_WIFI_SCAN,
+ " removing %s (%s%s%s)",
+ str_if_set (nm_ap_get_address (outdated_ap), "(none)"),
+ ssid ? "'" : "",
+ ssid ? nm_utils_escape_ssid (ssid->data, ssid->len) : "(none)",
+ ssid ? "'" : "");
remove_access_point (self, outdated_ap);
removed++;
}
g_slist_free (outdated_list);
- nm_log_dbg (LOGD_WIFI_SCAN, "(%s): removed %d APs (of %d)",
- nm_device_get_iface (NM_DEVICE (self)),
- removed, total);
+ _LOGD (LOGD_WIFI_SCAN, "removed %d APs (of %d)",
+ removed, total);
ap_list_dump (self);
@@ -1913,10 +1867,8 @@ supplicant_iface_new_bss_cb (NMSupplicantInterface *iface,
/* Add the AP to the device's AP list */
merge_scanned_ap (self, ap);
g_object_unref (ap);
- } else {
- nm_log_warn (LOGD_WIFI_SCAN, "(%s): invalid AP properties received",
- nm_device_get_iface (NM_DEVICE (self)));
- }
+ } else
+ _LOGW (LOGD_WIFI_SCAN, "invalid AP properties received");
/* Remove outdated access points */
schedule_scanlist_cull (self);
@@ -1998,19 +1950,20 @@ wifi_secrets_cb (NMActRequest *req,
GError *error,
gpointer user_data)
{
- NMDevice *dev = NM_DEVICE (user_data);
+ NMDevice *device = NM_DEVICE (user_data);
+ NMDeviceWifi *self = NM_DEVICE_WIFI (device);
- g_return_if_fail (req == nm_device_get_act_request (dev));
- g_return_if_fail (nm_device_get_state (dev) == NM_DEVICE_STATE_NEED_AUTH);
+ g_return_if_fail (req == nm_device_get_act_request (device));
+ g_return_if_fail (nm_device_get_state (device) == NM_DEVICE_STATE_NEED_AUTH);
g_return_if_fail (nm_act_request_get_connection (req) == connection);
if (error) {
- nm_log_warn (LOGD_WIFI, "%s", error->message);
- nm_device_state_changed (dev,
+ _LOGW (LOGD_WIFI, "%s", error->message);
+ nm_device_state_changed (device,
NM_DEVICE_STATE_FAILED,
NM_DEVICE_STATE_REASON_NO_SECRETS);
} else
- nm_device_activate_schedule_stage1_device_prepare (dev);
+ nm_device_activate_schedule_stage1_device_prepare (device);
}
/*
@@ -2022,11 +1975,11 @@ wifi_secrets_cb (NMActRequest *req,
static gboolean
link_timeout_cb (gpointer user_data)
{
- NMDevice *dev = NM_DEVICE (user_data);
- NMDeviceWifi *self = NM_DEVICE_WIFI (dev);
+ NMDevice *device = NM_DEVICE (user_data);
+ NMDeviceWifi *self = NM_DEVICE_WIFI (device);
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
- nm_log_warn (LOGD_WIFI, "(%s): link timed out.", nm_device_get_iface (dev));
+ _LOGW (LOGD_WIFI, "link timed out.");
priv->link_timeout_id = 0;
@@ -2034,7 +1987,7 @@ link_timeout_cb (gpointer user_data)
* to reassociate within the timeout period, so the connection must
* fail.
*/
- if (nm_device_get_state (dev) != NM_DEVICE_STATE_ACTIVATED)
+ if (nm_device_get_state (device) != NM_DEVICE_STATE_ACTIVATED)
return FALSE;
/* If the access point failed, and wasn't found by the supplicant when it
@@ -2045,7 +1998,7 @@ link_timeout_cb (gpointer user_data)
if (priv->ssid_found == FALSE && priv->current_ap)
set_current_ap (self, NULL, TRUE, TRUE);
- nm_device_state_changed (dev,
+ nm_device_state_changed (device,
NM_DEVICE_STATE_FAILED,
priv->ssid_found ? NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT :
NM_DEVICE_STATE_REASON_SSID_NOT_FOUND);
@@ -2080,10 +2033,11 @@ need_new_8021x_secrets (NMDeviceWifi *self,
s_8021x = nm_connection_get_setting_802_1x (connection);
if (s_8021x) {
- nm_setting_get_secret_flags (NM_SETTING (s_8021x),
- NM_SETTING_802_1X_PASSWORD,
- &secret_flags,
- NULL);
+ if (!nm_setting_get_secret_flags (NM_SETTING (s_8021x),
+ NM_SETTING_802_1X_PASSWORD,
+ &secret_flags,
+ NULL))
+ g_assert_not_reached ();
if (secret_flags & NM_SETTING_SECRET_FLAG_NOT_SAVED)
*setting_name = NM_SETTING_802_1X_SETTING_NAME;
return *setting_name ? TRUE : FALSE;
@@ -2091,10 +2045,11 @@ need_new_8021x_secrets (NMDeviceWifi *self,
s_wsec = nm_connection_get_setting_wireless_security (connection);
if (s_wsec) {
- nm_setting_get_secret_flags (NM_SETTING (s_wsec),
- NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD,
- &secret_flags,
- NULL);
+ if (!nm_setting_get_secret_flags (NM_SETTING (s_wsec),
+ NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD,
+ &secret_flags,
+ NULL))
+ g_assert_not_reached ();
if (secret_flags & NM_SETTING_SECRET_FLAG_NOT_SAVED)
*setting_name = NM_SETTING_WIRELESS_SECURITY_SETTING_NAME;
return *setting_name ? TRUE : FALSE;
@@ -2160,16 +2115,15 @@ handle_8021x_or_psk_auth_fail (NMDeviceWifi *self,
nm_connection_clear_secrets (connection);
- nm_log_info (LOGD_DEVICE | LOGD_WIFI,
- "Activation (%s/wireless): disconnected during association,"
- " asking for new key.", nm_device_get_iface (device));
+ _LOGI (LOGD_DEVICE | LOGD_WIFI,
+ "Activation: (wifi) disconnected during association, asking for new key");
cleanup_association_attempt (self, TRUE);
nm_device_state_changed (device, NM_DEVICE_STATE_NEED_AUTH, NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT);
nm_act_request_get_secrets (req,
setting_name,
- NM_SETTINGS_GET_SECRETS_FLAG_ALLOW_INTERACTION
- | NM_SETTINGS_GET_SECRETS_FLAG_REQUEST_NEW,
+ NM_SECRET_AGENT_GET_SECRETS_FLAG_ALLOW_INTERACTION
+ | NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW,
NULL,
wifi_secrets_cb,
self);
@@ -2195,11 +2149,10 @@ supplicant_iface_state_cb (NMSupplicantInterface *iface,
if (new_state == old_state)
return;
- nm_log_info (LOGD_DEVICE | LOGD_WIFI,
- "(%s): supplicant interface state: %s -> %s",
- nm_device_get_iface (device),
- nm_supplicant_interface_state_to_string (old_state),
- nm_supplicant_interface_state_to_string (new_state));
+ _LOGI (LOGD_DEVICE | LOGD_WIFI,
+ "supplicant interface state: %s -> %s",
+ nm_supplicant_interface_state_to_string (old_state),
+ nm_supplicant_interface_state_to_string (new_state));
devstate = nm_device_get_state (device);
scanning = nm_supplicant_interface_get_scanning (iface);
@@ -2222,9 +2175,7 @@ supplicant_iface_state_cb (NMSupplicantInterface *iface,
NM_DEVICE_STATE_REASON_SUPPLICANT_AVAILABLE);
}
- nm_log_dbg (LOGD_WIFI_SCAN,
- "(%s): supplicant ready, requesting initial scan",
- nm_device_get_iface (device));
+ _LOGD (LOGD_WIFI_SCAN, "supplicant ready, requesting initial scan");
/* Request a scan to get latest results */
cancel_pending_scan (self);
@@ -2243,7 +2194,7 @@ supplicant_iface_state_cb (NMSupplicantInterface *iface,
if (devstate == NM_DEVICE_STATE_CONFIG) {
NMConnection *connection;
NMSettingWireless *s_wifi;
- const GByteArray *ssid;
+ GBytes *ssid;
connection = nm_device_get_connection (NM_DEVICE (self));
g_return_if_fail (connection);
@@ -2254,13 +2205,12 @@ supplicant_iface_state_cb (NMSupplicantInterface *iface,
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) "
- "successful. %s '%s'.",
- nm_device_get_iface (device),
- priv->mode == NM_802_11_MODE_AP ? "Started Wi-Fi Hotspot" :
- "Connected to wireless network",
- ssid ? nm_utils_escape_ssid (ssid->data, ssid->len) : "(none)");
+ _LOGI (LOGD_DEVICE | LOGD_WIFI,
+ "Activation: (wifi) Stage 2 of 5 (Device Configure) successful. %s '%s'.",
+ priv->mode == NM_802_11_MODE_AP ? "Started Wi-Fi Hotspot" :
+ "Connected to wireless network",
+ ssid ? nm_utils_escape_ssid (g_bytes_get_data (ssid, NULL),
+ g_bytes_get_size (ssid)) : "(none)");
nm_device_activate_schedule_stage3_ip_config_start (device);
} else if (devstate == NM_DEVICE_STATE_ACTIVATED)
periodic_update (self, NULL);
@@ -2326,9 +2276,9 @@ supplicant_iface_connection_error_cb (NMSupplicantInterface *iface,
NMDevice *device = NM_DEVICE (self);
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);
+ _LOGW (LOGD_DEVICE | LOGD_WIFI,
+ "Activation: (wifi) supplicant association failed: %s - %s",
+ name, message);
cleanup_association_attempt (self, TRUE);
nm_device_queue_state (device, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED);
@@ -2356,9 +2306,7 @@ supplicant_iface_notify_scanning_cb (NMSupplicantInterface *iface,
gboolean scanning;
scanning = nm_supplicant_interface_get_scanning (iface);
- nm_log_dbg (LOGD_WIFI_SCAN, "(%s): now %s",
- nm_device_get_iface (NM_DEVICE (self)),
- scanning ? "scanning" : "idle");
+ _LOGD (LOGD_WIFI_SCAN, "now %s", scanning ? "scanning" : "idle");
g_object_notify (G_OBJECT (self), "scanning");
@@ -2397,16 +2345,16 @@ handle_auth_or_fail (NMDeviceWifi *self,
nm_connection_clear_secrets (connection);
setting_name = nm_connection_need_secrets (connection, NULL);
if (setting_name) {
- NMSettingsGetSecretsFlags flags = NM_SETTINGS_GET_SECRETS_FLAG_ALLOW_INTERACTION;
+ NMSecretAgentGetSecretsFlags flags = NM_SECRET_AGENT_GET_SECRETS_FLAG_ALLOW_INTERACTION;
if (new_secrets)
- flags |= NM_SETTINGS_GET_SECRETS_FLAG_REQUEST_NEW;
+ flags |= NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW;
nm_act_request_get_secrets (req, setting_name, flags, NULL, wifi_secrets_cb, self);
g_object_set_data (G_OBJECT (connection), WIRELESS_SECRETS_TRIES, GUINT_TO_POINTER (++tries));
ret = NM_ACT_STAGE_RETURN_POSTPONE;
} else
- nm_log_warn (LOGD_DEVICE, "Cleared secrets, but setting didn't need any secrets.");
+ _LOGW (LOGD_DEVICE, "Cleared secrets, but setting didn't need any secrets.");
return ret;
}
@@ -2420,7 +2368,7 @@ handle_auth_or_fail (NMDeviceWifi *self,
static gboolean
supplicant_connection_timeout_cb (gpointer user_data)
{
- NMDevice *dev = NM_DEVICE (user_data);
+ NMDevice *device = NM_DEVICE (user_data);
NMDeviceWifi *self = NM_DEVICE_WIFI (user_data);
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
NMActRequest *req;
@@ -2428,7 +2376,7 @@ supplicant_connection_timeout_cb (gpointer user_data)
cleanup_association_attempt (self, TRUE);
- if (!nm_device_is_activating (dev))
+ if (!nm_device_is_activating (device))
return FALSE;
/* Timed out waiting for a successful connection to the AP; if the AP's
@@ -2437,7 +2385,7 @@ supplicant_connection_timeout_cb (gpointer user_data)
* information (passwords, pin codes, etc) are wrong.
*/
- req = nm_device_get_act_request (dev);
+ req = nm_device_get_act_request (device);
g_assert (req);
connection = nm_act_request_get_connection (req);
@@ -2449,12 +2397,10 @@ supplicant_connection_timeout_cb (gpointer user_data)
* (if any), so supplicant timeouts here are almost certainly the wifi
* driver being really stupid.
*/
- nm_log_warn (LOGD_DEVICE | LOGD_WIFI,
- "Activation (%s/wireless): %s network creation took "
- "too long, failing activation.",
- nm_device_get_iface (dev),
- priv->mode == NM_802_11_MODE_ADHOC ? "Ad-Hoc" : "Hotspot");
- nm_device_state_changed (dev, NM_DEVICE_STATE_FAILED,
+ _LOGW (LOGD_DEVICE | LOGD_WIFI,
+ "Activation: (wifi) %s network creation took too long, failing activation",
+ priv->mode == NM_802_11_MODE_ADHOC ? "Ad-Hoc" : "Hotspot");
+ nm_device_state_changed (device, NM_DEVICE_STATE_FAILED,
NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT);
return FALSE;
}
@@ -2468,9 +2414,8 @@ supplicant_connection_timeout_cb (gpointer user_data)
/* Connection failed; either driver problems, the encryption key is
* wrong, or the passwords or certificates were wrong.
*/
- nm_log_warn (LOGD_DEVICE | LOGD_WIFI,
- "Activation (%s/wireless): association took too long.",
- nm_device_get_iface (dev));
+ _LOGW (LOGD_DEVICE | LOGD_WIFI,
+ "Activation: (wifi) association took too long");
/* Ask for new secrets only if we've never activated this connection
* before. If we've connected before, don't bother the user with
@@ -2480,20 +2425,16 @@ supplicant_connection_timeout_cb (gpointer user_data)
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_warn (LOGD_DEVICE | LOGD_WIFI,
- "Activation (%s/wireless): asking for new secrets",
- nm_device_get_iface (dev));
- } else {
- nm_device_state_changed (dev, NM_DEVICE_STATE_FAILED,
+ if (handle_auth_or_fail (self, req, new_secrets) == NM_ACT_STAGE_RETURN_POSTPONE)
+ _LOGW (LOGD_DEVICE | LOGD_WIFI, "Activation: (wifi) asking for new secrets");
+ else {
+ nm_device_state_changed (device, NM_DEVICE_STATE_FAILED,
NM_DEVICE_STATE_REASON_NO_SECRETS);
}
} else {
- nm_log_warn (LOGD_DEVICE | LOGD_WIFI,
- "Activation (%s/wireless): association took too long, "
- "failing activation.",
- nm_device_get_iface (dev));
- nm_device_state_changed (dev, NM_DEVICE_STATE_FAILED,
+ _LOGW (LOGD_DEVICE | LOGD_WIFI,
+ "Activation: (wifi) association took too long, failing activation");
+ nm_device_state_changed (device, NM_DEVICE_STATE_FAILED,
priv->ssid_found ? NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT :
NM_DEVICE_STATE_REASON_SSID_NOT_FOUND);
}
@@ -2523,13 +2464,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->sup_iface) == AP_SUPPORT_UNKNOWN) {
- nm_log_warn (LOGD_WIFI, "Supplicant may not support AP mode; connection may time out.");
+ _LOGW (LOGD_WIFI, "Supplicant may not support AP mode; connection may time out.");
}
if (!nm_supplicant_config_add_setting_wireless (config,
s_wireless,
fixed_freq)) {
- nm_log_err (LOGD_WIFI, "Couldn't add 802-11-wireless setting to supplicant config.");
+ _LOGE (LOGD_WIFI, "Couldn't add 802-11-wireless setting to supplicant config.");
goto error;
}
@@ -2544,13 +2485,12 @@ build_supplicant_config (NMDeviceWifi *self,
s_wireless_sec,
s_8021x,
con_uuid)) {
- nm_log_err (LOGD_WIFI, "Couldn't add 802-11-wireless-security setting to "
- "supplicant config.");
+ _LOGE (LOGD_WIFI, "Couldn't add 802-11-wireless-security setting to supplicant config.");
goto error;
}
} else {
if (!nm_supplicant_config_add_no_security (config)) {
- nm_log_err (LOGD_WIFI, "Couldn't add unsecured option to supplicant config.");
+ _LOGE (LOGD_WIFI, "Couldn't add unsecured option to supplicant config.");
goto error;
}
}
@@ -2565,23 +2505,25 @@ error:
/****************************************************************************/
static void
-update_permanent_hw_address (NMDevice *dev)
+update_permanent_hw_address (NMDevice *device)
{
- NMDeviceWifi *self = NM_DEVICE_WIFI (dev);
+ NMDeviceWifi *self = NM_DEVICE_WIFI (device);
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
struct ifreq req;
struct ethtool_perm_addr *epaddr = NULL;
- int fd, ret;
+ int fd, ret, errsv;
+
+ g_return_if_fail (priv->perm_hw_addr == NULL);
fd = socket (PF_INET, SOCK_DGRAM, 0);
if (fd < 0) {
- nm_log_err (LOGD_HW, "could not open control socket.");
+ _LOGE (LOGD_HW, "could not open control socket.");
return;
}
/* Get permanent MAC address */
memset (&req, 0, sizeof (struct ifreq));
- strncpy (req.ifr_name, nm_device_get_iface (dev), IFNAMSIZ);
+ strncpy (req.ifr_name, nm_device_get_iface (device), IFNAMSIZ);
epaddr = g_malloc0 (sizeof (struct ethtool_perm_addr) + ETH_ALEN);
epaddr->cmd = ETHTOOL_GPERMADDR;
@@ -2590,56 +2532,50 @@ update_permanent_hw_address (NMDevice *dev)
errno = 0;
ret = ioctl (fd, SIOCETHTOOL, &req);
- if ((ret < 0) || !nm_ethernet_address_is_valid ((struct ether_addr *) epaddr->data)) {
- nm_log_dbg (LOGD_HW | LOGD_ETHER, "(%s): unable to read permanent MAC address (error %d)",
- nm_device_get_iface (dev), errno);
+ errsv = errno;
+ if ((ret < 0) || !nm_ethernet_address_is_valid (epaddr->data, ETH_ALEN)) {
+ _LOGD (LOGD_HW | LOGD_ETHER, "unable to read permanent MAC address (error %d)",
+ errsv);
/* Fall back to current address */
- memcpy (epaddr->data, nm_device_get_hw_address (dev, NULL), ETH_ALEN);
+ nm_utils_hwaddr_aton (nm_device_get_hw_address (device), epaddr->data, ETH_ALEN);
}
- if (memcmp (&priv->perm_hw_addr, epaddr->data, ETH_ALEN)) {
- memcpy (&priv->perm_hw_addr, epaddr->data, ETH_ALEN);
- g_object_notify (G_OBJECT (dev), NM_DEVICE_WIFI_PERMANENT_HW_ADDRESS);
- }
+ priv->perm_hw_addr = nm_utils_hwaddr_ntoa (epaddr->data, ETH_ALEN);
g_free (epaddr);
close (fd);
}
static void
-update_initial_hw_address (NMDevice *dev)
+update_initial_hw_address (NMDevice *device)
{
- NMDeviceWifi *self = NM_DEVICE_WIFI (dev);
+ NMDeviceWifi *self = NM_DEVICE_WIFI (device);
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
- 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.
*/
- memcpy (priv->initial_hw_addr, nm_device_get_hw_address (dev, NULL), ETH_ALEN);
+ priv->initial_hw_addr = g_strdup (nm_device_get_hw_address (device));
- 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);
+ _LOGD (LOGD_DEVICE | LOGD_ETHER, "read initial MAC address %s", priv->initial_hw_addr);
}
static NMActStageReturn
-act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
+act_stage1_prepare (NMDevice *device, NMDeviceStateReason *reason)
{
- NMDeviceWifi *self = NM_DEVICE_WIFI (dev);
+ NMDeviceWifi *self = NM_DEVICE_WIFI (device);
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
NMActStageReturn ret;
NMAccessPoint *ap = NULL;
NMActRequest *req;
NMConnection *connection;
NMSettingWireless *s_wireless;
- const GByteArray *cloned_mac;
+ const char *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);
+ ret = NM_DEVICE_CLASS (nm_device_wifi_parent_class)->act_stage1_prepare (device, reason);
if (ret != NM_ACT_STAGE_RETURN_SUCCESS)
return ret;
@@ -2670,15 +2606,15 @@ act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
* 2.6.30 or so; until that's fixed, disable WPA-protected Ad-Hoc networks.
*/
if (is_adhoc_wpa (connection)) {
- nm_log_warn (LOGD_WIFI, "Ad-Hoc WPA disabled due to kernel bugs");
+ _LOGW (LOGD_WIFI, "Ad-Hoc WPA disabled due to kernel bugs");
*reason = NM_DEVICE_STATE_REASON_SUPPLICANT_CONFIG_FAILED;
return NM_ACT_STAGE_RETURN_FAILURE;
}
/* 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))
- nm_device_set_hw_addr (dev, (const guint8 *) cloned_mac->data, "set", LOGD_WIFI);
+ if (cloned_mac)
+ nm_device_set_hw_addr (device, cloned_mac, "set", LOGD_WIFI);
/* AP mode never uses a specific object or existing scanned AP */
if (priv->mode != NM_802_11_MODE_AP) {
@@ -2716,7 +2652,7 @@ act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
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));
+ nm_ap_set_address (ap, nm_device_get_hw_address (device));
priv->ap_list = g_slist_prepend (priv->ap_list, ap);
nm_ap_export_to_dbus (ap);
@@ -2759,12 +2695,11 @@ ensure_hotspot_frequency (NMDeviceWifi *self,
}
static NMActStageReturn
-act_stage2_config (NMDevice *dev, NMDeviceStateReason *reason)
+act_stage2_config (NMDevice *device, NMDeviceStateReason *reason)
{
- NMDeviceWifi *self = NM_DEVICE_WIFI (dev);
+ NMDeviceWifi *self = NM_DEVICE_WIFI (device);
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
NMActStageReturn ret = NM_ACT_STAGE_RETURN_FAILURE;
- const char *iface = nm_device_get_iface (dev);
NMSupplicantConfig *config = NULL;
NMActRequest *req;
NMAccessPoint *ap;
@@ -2776,7 +2711,7 @@ act_stage2_config (NMDevice *dev, NMDeviceStateReason *reason)
remove_supplicant_timeouts (self);
- req = nm_device_get_act_request (dev);
+ req = nm_device_get_act_request (device);
g_assert (req);
ap = priv->current_ap;
@@ -2794,10 +2729,9 @@ act_stage2_config (NMDevice *dev, NMDeviceStateReason *reason)
/* If we need secrets, get them */
setting_name = nm_connection_need_secrets (connection, NULL);
if (setting_name) {
- nm_log_info (LOGD_DEVICE | LOGD_WIFI,
- "Activation (%s/wireless): access point '%s' has security,"
- " but secrets are required.",
- iface, nm_connection_get_id (connection));
+ _LOGI (LOGD_DEVICE | LOGD_WIFI,
+ "Activation: (wifi) access point '%s' has security, but secrets are required.",
+ nm_connection_get_id (connection));
ret = handle_auth_or_fail (self, req, FALSE);
if (ret == NM_ACT_STAGE_RETURN_FAILURE)
@@ -2807,15 +2741,13 @@ act_stage2_config (NMDevice *dev, NMDeviceStateReason *reason)
/* have secrets, or no secrets required */
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.",
- iface, nm_connection_get_id (connection));
+ _LOGI (LOGD_DEVICE | LOGD_WIFI,
+ "Activation: (wifi) connection '%s' has security, and secrets exist. No new secrets needed.",
+ nm_connection_get_id (connection));
} else {
- nm_log_info (LOGD_DEVICE | LOGD_WIFI,
- "Activation (%s/wireless): connection '%s' requires no "
- "security. No secrets needed.",
- iface, nm_connection_get_id (connection));
+ _LOGI (LOGD_DEVICE | LOGD_WIFI,
+ "Activation: (wifi) connection '%s' requires no security. No secrets needed.",
+ nm_connection_get_id (connection));
}
priv->ssid_found = FALSE;
@@ -2830,9 +2762,8 @@ act_stage2_config (NMDevice *dev, NMDeviceStateReason *reason)
/* Build up the supplicant configuration */
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.",
- iface);
+ _LOGE (LOGD_DEVICE | LOGD_WIFI,
+ "Activation: (wifi) couldn't build wireless configuration.");
*reason = NM_DEVICE_STATE_REASON_SUPPLICANT_CONFIG_FAILED;
goto out;
}
@@ -2844,9 +2775,8 @@ act_stage2_config (NMDevice *dev, NMDeviceStateReason *reason)
self);
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);
+ _LOGE (LOGD_DEVICE | LOGD_WIFI,
+ "Activation: (wifi) couldn't send wireless configuration to the supplicant.");
*reason = NM_DEVICE_STATE_REASON_SUPPLICANT_CONFIG_FAILED;
goto out;
}
@@ -2879,14 +2809,14 @@ act_stage3_ip4_config_start (NMDevice *device,
NMDeviceStateReason *reason)
{
NMConnection *connection;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *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);
+ method = nm_setting_ip_config_get_method (s_ip4);
/* Indicate that a critical protocol is about to start */
if (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0)
@@ -2901,14 +2831,14 @@ act_stage3_ip6_config_start (NMDevice *device,
NMDeviceStateReason *reason)
{
NMConnection *connection;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *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);
+ method = nm_setting_ip_config_get_method (s_ip6);
/* Indicate that a critical protocol is about to start */
if (strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_AUTO) == 0 ||
@@ -2933,7 +2863,7 @@ ip4_config_pre_commit (NMDevice *device, NMIP4Config *config)
/* MTU override */
mtu = nm_setting_wireless_get_mtu (s_wifi);
if (mtu)
- nm_ip4_config_set_mtu (config, mtu);
+ nm_ip4_config_set_mtu (config, mtu, NM_IP_CONFIG_SOURCE_USER);
}
static gboolean
@@ -2984,17 +2914,14 @@ handle_ip_config_timeout (NMDeviceWifi *self,
*/
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 "
- "connection '%s'.",
- nm_device_get_iface (NM_DEVICE (self)),
- nm_connection_get_id (connection));
+ _LOGW (LOGD_DEVICE | LOGD_WIFI,
+ "Activation: (wifi) could not get IP configuration for connection '%s'.",
+ nm_connection_get_id (connection));
ret = handle_auth_or_fail (self, NULL, TRUE);
if (ret == NM_ACT_STAGE_RETURN_POSTPONE) {
- nm_log_info (LOGD_DEVICE | LOGD_WIFI,
- "Activation (%s/wireless): asking for new secrets",
- nm_device_get_iface (NM_DEVICE (self)));
+ _LOGI (LOGD_DEVICE | LOGD_WIFI,
+ "Activation: (wifi) asking for new secrets");
} else {
*reason = NM_DEVICE_STATE_REASON_NO_SECRETS;
}
@@ -3008,60 +2935,60 @@ handle_ip_config_timeout (NMDeviceWifi *self,
static NMActStageReturn
-act_stage4_ip4_config_timeout (NMDevice *dev, NMDeviceStateReason *reason)
+act_stage4_ip4_config_timeout (NMDevice *device, NMDeviceStateReason *reason)
{
NMConnection *connection;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
gboolean may_fail = FALSE, chain_up = FALSE;
NMActStageReturn ret;
- connection = nm_device_get_connection (dev);
+ connection = nm_device_get_connection (device);
g_assert (connection);
s_ip4 = nm_connection_get_setting_ip4_config (connection);
- may_fail = nm_setting_ip4_config_get_may_fail (s_ip4);
+ may_fail = nm_setting_ip_config_get_may_fail (s_ip4);
- ret = handle_ip_config_timeout (NM_DEVICE_WIFI (dev), connection, may_fail, &chain_up, reason);
+ ret = handle_ip_config_timeout (NM_DEVICE_WIFI (device), connection, may_fail, &chain_up, reason);
if (chain_up)
- ret = NM_DEVICE_CLASS (nm_device_wifi_parent_class)->act_stage4_ip4_config_timeout (dev, reason);
+ ret = NM_DEVICE_CLASS (nm_device_wifi_parent_class)->act_stage4_ip4_config_timeout (device, reason);
return ret;
}
static NMActStageReturn
-act_stage4_ip6_config_timeout (NMDevice *dev, NMDeviceStateReason *reason)
+act_stage4_ip6_config_timeout (NMDevice *device, NMDeviceStateReason *reason)
{
NMConnection *connection;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip6;
gboolean may_fail = FALSE, chain_up = FALSE;
NMActStageReturn ret;
- connection = nm_device_get_connection (dev);
+ connection = nm_device_get_connection (device);
g_assert (connection);
s_ip6 = nm_connection_get_setting_ip6_config (connection);
- may_fail = nm_setting_ip6_config_get_may_fail (s_ip6);
+ may_fail = nm_setting_ip_config_get_may_fail (s_ip6);
- ret = handle_ip_config_timeout (NM_DEVICE_WIFI (dev), connection, may_fail, &chain_up, reason);
+ ret = handle_ip_config_timeout (NM_DEVICE_WIFI (device), connection, may_fail, &chain_up, reason);
if (chain_up)
- ret = NM_DEVICE_CLASS (nm_device_wifi_parent_class)->act_stage4_ip6_config_timeout (dev, reason);
+ ret = NM_DEVICE_CLASS (nm_device_wifi_parent_class)->act_stage4_ip6_config_timeout (device, reason);
return ret;
}
static void
-activation_success_handler (NMDevice *dev)
+activation_success_handler (NMDevice *device)
{
- NMDeviceWifi *self = NM_DEVICE_WIFI (dev);
+ NMDeviceWifi *self = NM_DEVICE_WIFI (device);
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
- int ifindex = nm_device_get_ifindex (dev);
+ int ifindex = nm_device_get_ifindex (device);
NMAccessPoint *ap;
- struct ether_addr bssid = { {0x0, 0x0, 0x0, 0x0, 0x0, 0x0} };
+ guint8 bssid[ETH_ALEN] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 };
NMAccessPoint *tmp_ap = NULL;
NMActRequest *req;
NMConnection *connection;
- req = nm_device_get_act_request (dev);
+ req = nm_device_get_act_request (device);
g_assert (req);
connection = nm_act_request_get_connection (req);
@@ -3087,9 +3014,12 @@ activation_success_handler (NMDevice *dev)
* 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.
*/
- nm_platform_wifi_get_bssid (ifindex, &bssid);
- if (!nm_ethernet_address_is_valid (nm_ap_get_address (ap)))
- nm_ap_set_address (ap, &bssid);
+ nm_platform_wifi_get_bssid (ifindex, bssid);
+ if (!nm_ap_get_address (ap)) {
+ char *bssid_str = nm_utils_hwaddr_ntoa (bssid, ETH_ALEN);
+ nm_ap_set_address (ap, bssid_str);
+ g_free (bssid_str);
+ }
if (!nm_ap_get_freq (ap))
nm_ap_set_freq (ap, nm_platform_wifi_get_frequency (ifindex));
if (!nm_ap_get_max_bitrate (ap))
@@ -3103,9 +3033,11 @@ activation_success_handler (NMDevice *dev)
* instead.
*/
- /* If the better match was a hidden AP, update it's SSID */
- if (!ssid || nm_utils_is_empty_ssid (ssid->data, ssid->len))
- nm_ap_set_ssid (tmp_ap, nm_ap_get_ssid (ap));
+ /* If the better match was a hidden AP, update its SSID */
+ if (!ssid || nm_utils_is_empty_ssid (ssid->data, ssid->len)) {
+ ssid = nm_ap_get_ssid (ap);
+ nm_ap_set_ssid (tmp_ap, ssid->data, ssid->len);
+ }
nm_active_connection_set_specific_object (NM_ACTIVE_CONNECTION (req),
nm_ap_get_dbus_path (tmp_ap));
@@ -3130,18 +3062,18 @@ done:
}
static void
-activation_failure_handler (NMDevice *dev)
+activation_failure_handler (NMDevice *device)
{
NMConnection *connection;
- connection = nm_device_get_connection (dev);
+ connection = nm_device_get_connection (device);
g_assert (connection);
/* Clear wireless secrets tries on failure */
g_object_set_data (G_OBJECT (connection), WIRELESS_SECRETS_TRIES, NULL);
/* Clear any critical protocol notification in the wifi stack */
- nm_platform_wifi_indicate_addressing_running (nm_device_get_ifindex (dev), FALSE);
+ nm_platform_wifi_indicate_addressing_running (nm_device_get_ifindex (device), FALSE);
}
static void
@@ -3225,15 +3157,12 @@ set_enabled (NMDevice *device, gboolean enabled)
priv->enabled = enabled;
- nm_log_dbg (LOGD_WIFI, "(%s): device now %s",
- nm_device_get_iface (NM_DEVICE (device)),
- enabled ? "enabled" : "disabled");
+ _LOGD (LOGD_WIFI, "device now %s", enabled ? "enabled" : "disabled");
state = nm_device_get_state (NM_DEVICE (self));
if (state < NM_DEVICE_STATE_UNAVAILABLE) {
- nm_log_dbg (LOGD_WIFI, "(%s): %s blocked by UNMANAGED state",
- enabled ? "enable" : "disable",
- nm_device_get_iface (NM_DEVICE (device)));
+ _LOGD (LOGD_WIFI, "(%s): device blocked by UNMANAGED state",
+ enabled ? "enable" : "disable");
return;
}
@@ -3241,11 +3170,10 @@ set_enabled (NMDevice *device, gboolean enabled)
gboolean no_firmware = FALSE;
if (state != NM_DEVICE_STATE_UNAVAILABLE)
- nm_log_warn (LOGD_CORE, "not in expected unavailable state!");
+ _LOGW (LOGD_CORE, "not in expected unavailable state!");
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)));
+ _LOGD (LOGD_WIFI, "enable blocked by failure to bring device up");
if (no_firmware)
nm_device_set_firmware_missing (NM_DEVICE (device), TRUE);
@@ -3261,8 +3189,7 @@ set_enabled (NMDevice *device, gboolean enabled)
supplicant_interface_release (self);
supplicant_interface_acquire (self);
- nm_log_dbg (LOGD_WIFI, "(%s): enable waiting on supplicant state",
- nm_device_get_iface (NM_DEVICE (device)));
+ _LOGD (LOGD_WIFI, "enable waiting on supplicant state");
} else {
nm_device_state_changed (NM_DEVICE (self),
NM_DEVICE_STATE_UNAVAILABLE,
@@ -3321,6 +3248,18 @@ dispose (GObject *object)
}
static void
+finalize (GObject *object)
+{
+ NMDeviceWifi *self = NM_DEVICE_WIFI (object);
+ NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
+
+ g_free (priv->perm_hw_addr);
+ g_free (priv->initial_hw_addr);
+
+ G_OBJECT_CLASS (nm_device_wifi_parent_class)->finalize (object);
+}
+
+static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
@@ -3331,7 +3270,7 @@ get_property (GObject *object, guint prop_id,
switch (prop_id) {
case PROP_PERM_HW_ADDRESS:
- g_value_take_string (value, nm_utils_hwaddr_ntoa (&priv->perm_hw_addr, ARPHRD_ETHER));
+ g_value_set_string (value, priv->perm_hw_addr);
break;
case PROP_MODE:
g_value_set_uint (value, priv->mode);
@@ -3387,6 +3326,7 @@ nm_device_wifi_class_init (NMDeviceWifiClass *klass)
object_class->get_property = get_property;
object_class->set_property = set_property;
object_class->dispose = dispose;
+ object_class->finalize = finalize;
parent_class->bring_up = bring_up;
parent_class->update_permanent_hw_address = update_permanent_hw_address;
@@ -3413,57 +3353,56 @@ nm_device_wifi_class_init (NMDeviceWifiClass *klass)
klass->scanning_allowed = scanning_allowed;
/* Properties */
- g_object_class_install_property (object_class, PROP_PERM_HW_ADDRESS,
- g_param_spec_string (NM_DEVICE_WIFI_PERMANENT_HW_ADDRESS,
- "Permanent MAC Address",
- "Permanent hardware MAC address",
- NULL,
- G_PARAM_READABLE));
-
- g_object_class_install_property (object_class, PROP_MODE,
- g_param_spec_uint (NM_DEVICE_WIFI_MODE,
- "Mode",
- "Mode",
- NM_802_11_MODE_UNKNOWN,
- NM_802_11_MODE_AP,
- NM_802_11_MODE_INFRA,
- G_PARAM_READABLE));
-
- g_object_class_install_property (object_class, PROP_BITRATE,
- g_param_spec_uint (NM_DEVICE_WIFI_BITRATE,
- "Bitrate",
- "Bitrate",
- 0, G_MAXUINT32, 0,
- G_PARAM_READABLE));
+ g_object_class_install_property
+ (object_class, PROP_PERM_HW_ADDRESS,
+ g_param_spec_string (NM_DEVICE_WIFI_PERMANENT_HW_ADDRESS, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_MODE,
+ g_param_spec_uint (NM_DEVICE_WIFI_MODE, "", "",
+ NM_802_11_MODE_UNKNOWN,
+ NM_802_11_MODE_AP,
+ NM_802_11_MODE_INFRA,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_BITRATE,
+ g_param_spec_uint (NM_DEVICE_WIFI_BITRATE, "", "",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_ACCESS_POINTS,
- g_param_spec_boxed (NM_DEVICE_WIFI_ACCESS_POINTS,
- "Access points",
- "Access points",
+ g_param_spec_boxed (NM_DEVICE_WIFI_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",
- "Currently active access point",
- DBUS_TYPE_G_OBJECT_PATH,
- G_PARAM_READABLE));
-
- g_object_class_install_property (object_class, PROP_CAPABILITIES,
- g_param_spec_uint (NM_DEVICE_WIFI_CAPABILITIES,
- "Wireless Capabilities",
- "Wireless Capabilities",
- 0, G_MAXUINT32, NM_WIFI_DEVICE_CAP_NONE,
- G_PARAM_READABLE));
-
- g_object_class_install_property (object_class, PROP_SCANNING,
- g_param_spec_boolean (NM_DEVICE_WIFI_SCANNING,
- "Scanning",
- "Scanning",
- FALSE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_ACTIVE_ACCESS_POINT,
+ g_param_spec_boxed (NM_DEVICE_WIFI_ACTIVE_ACCESS_POINT, "", "",
+ DBUS_TYPE_G_OBJECT_PATH,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_CAPABILITIES,
+ g_param_spec_uint (NM_DEVICE_WIFI_CAPABILITIES, "", "",
+ 0, G_MAXUINT32, NM_WIFI_DEVICE_CAP_NONE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_SCANNING,
+ g_param_spec_boolean (NM_DEVICE_WIFI_SCANNING, "", "",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/* Signals */
signals[ACCESS_POINT_ADDED] =
@@ -3495,8 +3434,6 @@ nm_device_wifi_class_init (NMDeviceWifiClass *klass)
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/devices/wifi/nm-device-wifi.h b/src/devices/wifi/nm-device-wifi.h
index f0a1beacd..bcba91da2 100644
--- a/src/devices/wifi/nm-device-wifi.h
+++ b/src/devices/wifi/nm-device-wifi.h
@@ -19,12 +19,10 @@
* Copyright (C) 2006 - 2008 Novell, Inc.
*/
-#ifndef NM_DEVICE_WIFI_H
-#define NM_DEVICE_WIFI_H
+#ifndef __NETWORKMANAGER_DEVICE_WIFI_H__
+#define __NETWORKMANAGER_DEVICE_WIFI_H__
#include <glib-object.h>
-#include <dbus/dbus.h>
-#include <net/ethernet.h>
#include "nm-device.h"
#include "nm-wifi-ap.h"
@@ -40,16 +38,6 @@ G_BEGIN_DECLS
#define NM_IS_DEVICE_WIFI_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_WIFI))
#define NM_DEVICE_WIFI_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_WIFI, NMDeviceWifiClass))
-typedef enum {
- NM_WIFI_ERROR_CONNECTION_NOT_WIRELESS = 0, /*< nick=ConnectionNotWireless >*/
- NM_WIFI_ERROR_CONNECTION_INVALID, /*< nick=ConnectionInvalid >*/
- NM_WIFI_ERROR_CONNECTION_INCOMPATIBLE, /*< nick=ConnectionIncompatible >*/
- NM_WIFI_ERROR_ACCESS_POINT_NOT_FOUND, /*< nick=AccessPointNotFound >*/
- NM_WIFI_ERROR_SCAN_NOT_ALLOWED, /*< nick=ScanNotAllowed >*/
- NM_WIFI_ERROR_AP_MODE_UNSUPPORTED, /*< nick=ApModeUnsupported >*/
- NM_WIFI_ERROR_ADHOC_MODE_UNSUPPORTED, /*< nick=AdhocModeUnsupported >*/
-} NMWifiError;
-
#define NM_DEVICE_WIFI_PERMANENT_HW_ADDRESS "perm-hw-address"
#define NM_DEVICE_WIFI_MODE "mode"
#define NM_DEVICE_WIFI_BITRATE "bitrate"
diff --git a/src/devices/wifi/nm-wifi-ap-utils.c b/src/devices/wifi/nm-wifi-ap-utils.c
index 9b03cbd45..9ac7052e9 100644
--- a/src/devices/wifi/nm-wifi-ap-utils.c
+++ b/src/devices/wifi/nm-wifi-ap-utils.c
@@ -1,4 +1,4 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/*-*- 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
@@ -18,11 +18,15 @@
* (C) Copyright 2011 Red Hat, Inc.
*/
-#include <config.h>
+#include "config.h"
+
#include <string.h>
#include <stdlib.h>
+#include <glib/gi18n.h>
+
#include "nm-wifi-ap-utils.h"
+#include "nm-utils.h"
static gboolean
verify_no_wep (NMSettingWirelessSecurity *s_wsec, const char *tag, GError **error)
@@ -35,9 +39,10 @@ verify_no_wep (NMSettingWirelessSecurity *s_wsec, const char *tag, GError **erro
|| nm_setting_wireless_security_get_wep_key_type (s_wsec)) {
/* Dynamic WEP cannot have any WEP keys set */
g_set_error (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- "%s is incompatible with static WEP keys", tag);
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_SETTING,
+ _("%s is incompatible with static WEP keys"), tag);
+ g_prefix_error (error, "%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
return FALSE;
}
@@ -68,17 +73,21 @@ verify_leap (NMSettingWirelessSecurity *s_wsec,
/* LEAP authentication requires at least a LEAP username */
if (!leap_username) {
g_set_error_literal (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME,
- "LEAP requires a LEAP username");
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_MISSING_PROPERTY,
+ _("LEAP authentication requires a LEAP username"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME);
return FALSE;
}
} else if (leap_username) {
/* Leap username requires 'leap' auth */
g_set_error_literal (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- "LEAP requires 'leap' authentication");
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("LEAP username requires 'leap' authentication"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME);
return FALSE;
}
}
@@ -87,9 +96,11 @@ verify_leap (NMSettingWirelessSecurity *s_wsec,
if (key_mgmt && strcmp (key_mgmt, "ieee8021x")) {
/* LEAP requires ieee8021x key management */
g_set_error_literal (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_802_1X,
- "LEAP requires IEEE 802.1x key management");
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("LEAP authentication requires IEEE 802.1x key management"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
return FALSE;
}
}
@@ -105,9 +116,10 @@ verify_leap (NMSettingWirelessSecurity *s_wsec,
if (adhoc) {
g_set_error_literal (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- "LEAP incompatible with Ad-Hoc mode");
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_SETTING,
+ _("LEAP authentication is incompatible with Ad-Hoc mode"));
+ g_prefix_error (error, "%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
return FALSE;
}
@@ -116,9 +128,10 @@ verify_leap (NMSettingWirelessSecurity *s_wsec,
if (s_8021x) {
g_set_error_literal (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME,
- "LEAP incompatible with 802.1x setting");
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_SETTING,
+ _("LEAP authentication is incompatible with 802.1x setting"));
+ g_prefix_error (error, "%s: ", NM_SETTING_802_1X_SETTING_NAME);
return FALSE;
}
}
@@ -137,17 +150,23 @@ verify_no_wpa (NMSettingWirelessSecurity *s_wsec,
key_mgmt = nm_setting_wireless_security_get_key_mgmt (s_wsec);
if (key_mgmt && !strncmp (key_mgmt, "wpa", 3)) {
g_set_error (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- "%s incompatible with any WPA key management", tag);
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("a connection using '%s' authentication cannot use WPA key management"),
+ tag);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
return FALSE;
}
if (nm_setting_wireless_security_get_num_protos (s_wsec)) {
g_set_error (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- "%s incompatible with any 'proto' setting", tag);
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("a connection using '%s' authentication cannot specific WPA protocols"),
+ tag);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NM_SETTING_WIRELESS_SECURITY_PROTO);
return FALSE;
}
@@ -158,9 +177,12 @@ verify_no_wpa (NMSettingWirelessSecurity *s_wsec,
pw = nm_setting_wireless_security_get_pairwise (s_wsec, i);
if (!strcmp (pw, "tkip") || !strcmp (pw, "ccmp")) {
g_set_error (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- "%s is incompatible with WPA pairwise ciphers", tag);
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("a connection using '%s' authentication cannot specific WPA ciphers"),
+ tag);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NM_SETTING_WIRELESS_SECURITY_PAIRWISE);
return FALSE;
}
}
@@ -172,18 +194,24 @@ verify_no_wpa (NMSettingWirelessSecurity *s_wsec,
gr = nm_setting_wireless_security_get_group (s_wsec, i);
if (strcmp (gr, "wep40") && strcmp (gr, "wep104")) {
g_set_error (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- "%s is incompatible with WPA group ciphers", tag);
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("a connection using '%s' authentication cannot specific WPA ciphers"),
+ tag);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NM_SETTING_WIRELESS_SECURITY_GROUP);
return FALSE;
}
}
if (nm_setting_wireless_security_get_psk (s_wsec)) {
g_set_error (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- "%s is incompatible with a WPA Pre-Shared Key", tag);
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("a connection using '%s' authentication cannot specific a WPA password"),
+ tag);
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NM_SETTING_WIRELESS_SECURITY_PSK);
return FALSE;
}
@@ -209,18 +237,21 @@ verify_dynamic_wep (NMSettingWirelessSecurity *s_wsec,
if (!s_8021x) {
/* 802.1x key management requires an 802.1x setting */
g_set_error_literal (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- "Dynamic WEP requires an 802.1x setting");
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_MISSING_SETTING,
+ _("Dynamic WEP requires an 802.1x setting"));
+ g_prefix_error (error, "%s: ", NM_SETTING_802_1X_SETTING_NAME);
return FALSE;
}
if (auth_alg && strcmp (auth_alg, "open")) {
/* 802.1x key management must use "open" authentication */
g_set_error_literal (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- "Dynamic WEP requires 'open' authentication");
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("Dynamic WEP requires 'open' authentication"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NM_SETTING_WIRELESS_SECURITY_AUTH_ALG);
return FALSE;
}
@@ -231,9 +262,11 @@ verify_dynamic_wep (NMSettingWirelessSecurity *s_wsec,
if (s_8021x) {
/* 802.1x setting requires 802.1x key management */
g_set_error_literal (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- "Dynamic WEP requires 'ieee8021x' key management");
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("Dynamic WEP requires 'ieee8021x' key management"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
return FALSE;
}
}
@@ -242,9 +275,11 @@ verify_dynamic_wep (NMSettingWirelessSecurity *s_wsec,
if (auth_alg && strcmp (auth_alg, "open")) {
/* 802.1x key management must use "open" authentication */
g_set_error_literal (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- "Dynamic WEP requires 'open' authentication");
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("Dynamic WEP requires 'open' authentication"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NM_SETTING_WIRELESS_SECURITY_AUTH_ALG);
return FALSE;
}
@@ -274,18 +309,21 @@ verify_wpa_psk (NMSettingWirelessSecurity *s_wsec,
if (!strcmp (key_mgmt, "wpa-psk") || !strcmp (key_mgmt, "wpa-none")) {
if (s_8021x) {
g_set_error_literal (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- "WPA-PSK incompatible with 802.1x");
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_SETTING,
+ _("WPA-PSK authentication is incompatible with 802.1x"));
+ g_prefix_error (error, "%s: ", NM_SETTING_802_1X_SETTING_NAME);
return FALSE;
}
if (auth_alg && strcmp (auth_alg, "open")) {
/* WPA must use "open" authentication */
g_set_error_literal (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- "WPA-PSK requires 'open' authentication");
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("WPA-PSK requires 'open' authentication"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NM_SETTING_WIRELESS_SECURITY_AUTH_ALG);
return FALSE;
}
}
@@ -293,9 +331,11 @@ verify_wpa_psk (NMSettingWirelessSecurity *s_wsec,
if (!strcmp (key_mgmt, "wpa-none")) {
if (!adhoc) {
g_set_error_literal (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- "WPA Ad-Hoc requires an Ad-Hoc mode AP");
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("WPA Ad-Hoc authentication requires an Ad-Hoc mode AP"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SETTING_NAME,
+ NM_SETTING_WIRELESS_MODE);
return FALSE;
}
@@ -304,9 +344,11 @@ verify_wpa_psk (NMSettingWirelessSecurity *s_wsec,
tmp = (n > 0) ? nm_setting_wireless_security_get_proto (s_wsec, 0) : NULL;
if (n > 1 || !tmp || strcmp (tmp, "wpa")) {
g_set_error_literal (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- "WPA Ad-Hoc requires 'wpa' proto");
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("WPA Ad-Hoc authentication requires 'wpa' protocol"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NM_SETTING_WIRELESS_SECURITY_PROTO);
return FALSE;
}
@@ -314,9 +356,11 @@ verify_wpa_psk (NMSettingWirelessSecurity *s_wsec,
tmp = (n > 0) ? nm_setting_wireless_security_get_pairwise (s_wsec, 0) : NULL;
if (n > 1 || g_strcmp0 (tmp, "none")) {
g_set_error_literal (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- "WPA Ad-Hoc requires 'none' pairwise cipher");
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("WPA Ad-Hoc authentication requires 'none' pairwise cipher"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NM_SETTING_WIRELESS_SECURITY_PAIRWISE);
return FALSE;
}
@@ -324,9 +368,11 @@ verify_wpa_psk (NMSettingWirelessSecurity *s_wsec,
tmp = (n > 0) ? nm_setting_wireless_security_get_group (s_wsec, 0) : NULL;
if (n > 1 || !tmp || strcmp (tmp, "tkip")) {
g_set_error_literal (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- "WPA Ad-Hoc requires 'tkip' group cipher");
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("WPA Ad-Hoc requires 'tkip' group cipher"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NM_SETTING_WIRELESS_SECURITY_GROUP);
return FALSE;
}
}
@@ -336,9 +382,11 @@ verify_wpa_psk (NMSettingWirelessSecurity *s_wsec,
if ( !(wpa_flags & NM_802_11_AP_SEC_KEY_MGMT_PSK)
&& !(rsn_flags & NM_802_11_AP_SEC_KEY_MGMT_PSK)) {
g_set_error_literal (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- "AP does not support PSK but setting requires it");
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("Access point does not support PSK but setting requires it"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
return FALSE;
}
}
@@ -364,27 +412,31 @@ verify_wpa_eap (NMSettingWirelessSecurity *s_wsec,
if (!strcmp (key_mgmt, "wpa-eap")) {
if (!s_8021x) {
g_set_error_literal (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- "WPA-EAP requires an 802.1x setting");
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_MISSING_SETTING,
+ _("WPA-EAP authentication requires an 802.1x setting"));
+ g_prefix_error (error, "%s: ", NM_SETTING_802_1X_SETTING_NAME);
return FALSE;
}
if (auth_alg && strcmp (auth_alg, "open")) {
/* WPA must use "open" authentication */
g_set_error_literal (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- "WPA-EAP requires 'open' authentication");
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("WPA-EAP requires 'open' authentication"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NM_SETTING_WIRELESS_SECURITY_AUTH_ALG);
return FALSE;
}
is_wpa_eap = TRUE;
} else if (s_8021x) {
g_set_error_literal (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- "Setting requires 802.1x but does not use 'wpa-eap' key management");
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_SETTING,
+ _("802.1x setting requires 'wpa-eap' key management"));
+ g_prefix_error (error, "%s: ", NM_SETTING_802_1X_SETTING_NAME);
return FALSE;
}
}
@@ -394,9 +446,10 @@ verify_wpa_eap (NMSettingWirelessSecurity *s_wsec,
if ( !(wpa_flags & NM_802_11_AP_SEC_KEY_MGMT_802_1X)
&& !(rsn_flags & NM_802_11_AP_SEC_KEY_MGMT_802_1X)) {
g_set_error_literal (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- "AP does not support 802.1x but setting requires it");
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_SETTING,
+ _("Access point does not support 802.1x but setting requires it"));
+ g_prefix_error (error, "%s: ", NM_SETTING_802_1X_SETTING_NAME);
return FALSE;
}
}
@@ -421,41 +474,50 @@ verify_adhoc (NMSettingWirelessSecurity *s_wsec,
if (adhoc) {
if (key_mgmt && strcmp (key_mgmt, "wpa-none") && strcmp (key_mgmt, "none")) {
g_set_error_literal (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- "AP mode is Ad-Hoc but setting requires Infrastructure security");
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("Access point mode is Ad-Hoc but setting requires Infrastructure security"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
return FALSE;
}
if (s_8021x) {
g_set_error_literal (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- "Ad-Hoc mode incompatible with 802.1x security");
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_SETTING,
+ _("Ad-Hoc mode is incompatible with 802.1x security"));
+ g_prefix_error (error, "%s: ", NM_SETTING_802_1X_SETTING_NAME);
return FALSE;
}
if (leap_username) {
g_set_error_literal (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- "Ad-Hoc mode incompatible with LEAP security");
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("Ad-Hoc mode is incompatible with LEAP security"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NM_SETTING_WIRELESS_SECURITY_AUTH_ALG);
return FALSE;
}
if (auth_alg && strcmp (auth_alg, "open")) {
g_set_error_literal (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- "Ad-Hoc mode requires 'open' authentication");
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("Ad-Hoc mode requires 'open' authentication"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NM_SETTING_WIRELESS_SECURITY_AUTH_ALG);
return FALSE;
}
} else {
if (key_mgmt && !strcmp (key_mgmt, "wpa-none")) {
g_set_error_literal (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- "AP mode is Infrastructure but setting requires Ad-Hoc security");
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("Access point mode is Infrastructure but setting requires Ad-Hoc security"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
return FALSE;
}
}
@@ -465,7 +527,7 @@ verify_adhoc (NMSettingWirelessSecurity *s_wsec,
gboolean
nm_ap_utils_complete_connection (const GByteArray *ap_ssid,
- const guint8 ap_bssid[ETH_ALEN],
+ const char *bssid,
NM80211Mode ap_mode,
guint32 ap_flags,
guint32 ap_wpa_flags,
@@ -477,7 +539,7 @@ nm_ap_utils_complete_connection (const GByteArray *ap_ssid,
NMSettingWireless *s_wifi;
NMSettingWirelessSecurity *s_wsec;
NMSetting8021x *s_8021x;
- const GByteArray *ssid;
+ GBytes *ssid, *ap_ssid_bytes;
const char *mode, *key_mgmt, *auth_alg, *leap_username;
gboolean adhoc = FALSE;
@@ -487,26 +549,23 @@ nm_ap_utils_complete_connection (const GByteArray *ap_ssid,
s_8021x = nm_connection_get_setting_802_1x (connection);
/* Fill in missing SSID */
+ ap_ssid_bytes = g_bytes_new (ap_ssid->data, ap_ssid->len);
ssid = nm_setting_wireless_get_ssid (s_wifi);
if (!ssid)
- g_object_set (G_OBJECT (s_wifi), NM_SETTING_WIRELESS_SSID, ap_ssid, NULL);
- else if ( ssid->len != ap_ssid->len
- || memcmp (ssid->data, ap_ssid->data, ssid->len)) {
+ g_object_set (G_OBJECT (s_wifi), NM_SETTING_WIRELESS_SSID, ap_ssid_bytes, NULL);
+ else if (!g_bytes_equal (ssid, ap_ssid_bytes)) {
g_set_error_literal (error,
- NM_SETTING_WIRELESS_ERROR,
- NM_SETTING_WIRELESS_ERROR_INVALID_PROPERTY,
- "Setting SSID did not match AP SSID");
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("connection does not match access point"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SETTING_NAME, NM_SETTING_WIRELESS_SSID);
+ g_bytes_unref (ap_ssid_bytes);
return FALSE;
}
+ g_bytes_unref (ap_ssid_bytes);
- if (lock_bssid && !nm_setting_wireless_get_bssid (s_wifi)) {
- GByteArray *bssid;
-
- bssid = g_byte_array_sized_new (ETH_ALEN);
- g_byte_array_append (bssid, ap_bssid, ETH_ALEN);
+ if (lock_bssid && !nm_setting_wireless_get_bssid (s_wifi))
g_object_set (G_OBJECT (s_wifi), NM_SETTING_WIRELESS_BSSID, bssid, NULL);
- g_byte_array_free (bssid, TRUE);
- }
/* And mode */
mode = nm_setting_wireless_get_mode (s_wifi);
@@ -526,9 +585,10 @@ nm_ap_utils_complete_connection (const GByteArray *ap_ssid,
if (valid == FALSE) {
g_set_error (error,
- NM_SETTING_WIRELESS_ERROR,
- NM_SETTING_WIRELESS_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIRELESS_MODE);
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("connection does not match access point"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SETTING_NAME, NM_SETTING_WIRELESS_MODE);
return FALSE;
}
} else {
@@ -549,9 +609,13 @@ nm_ap_utils_complete_connection (const GByteArray *ap_ssid,
/* Make sure the connection doesn't specify security */
if (s_wsec || s_8021x) {
g_set_error_literal (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- "AP is unencrypted but setting specifies security");
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_SETTING,
+ _("Access point is unencrypted but setting specifies security"));
+ if (s_wsec)
+ g_prefix_error (error, "%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
+ else
+ g_prefix_error (error, "%s: ", NM_SETTING_802_1X_SETTING_NAME);
return FALSE;
}
return TRUE;
@@ -634,18 +698,20 @@ nm_ap_utils_complete_connection (const GByteArray *ap_ssid,
/* Ensure key management is valid for WPA */
if ((key_mgmt && !strcmp (key_mgmt, "ieee8021x")) || leap_username) {
g_set_error_literal (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- "WPA incompatible with non-EAP (original) LEAP or Dynamic WEP");
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("WPA authentication is incompatible with non-EAP (original) LEAP or Dynamic WEP"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
return FALSE;
}
/* 'shared' auth incompatible with any type of WPA */
if (auth_alg && strcmp (auth_alg, "open")) {
g_set_error_literal (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- "WPA incompatible with Shared Key authentication");
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("WPA authentication is incompatible with Shared Key authentication"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, NM_SETTING_WIRELESS_SECURITY_AUTH_ALG);
return FALSE;
}
@@ -689,9 +755,9 @@ nm_ap_utils_complete_connection (const GByteArray *ap_ssid,
*/
} else {
g_set_error_literal (error,
- NM_SETTING_WIRELESS_SECURITY_ERROR,
- NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY,
- "Failed to determine AP security information");
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_FAILED,
+ _("Failed to determine AP security information"));
return FALSE;
}
diff --git a/src/devices/wifi/nm-wifi-ap-utils.h b/src/devices/wifi/nm-wifi-ap-utils.h
index 992b839d5..31c12cd7b 100644
--- a/src/devices/wifi/nm-wifi-ap-utils.h
+++ b/src/devices/wifi/nm-wifi-ap-utils.h
@@ -18,19 +18,18 @@
* (C) Copyright 2011 Red Hat, Inc.
*/
-#ifndef NM_WIFI_AP_UTILS_H
-#define NM_WIFI_AP_UTILS_H
+#ifndef __NETWORKMANAGER_WIFI_AP_UTILS_H__
+#define __NETWORKMANAGER_WIFI_AP_UTILS_H__
-#include <net/ethernet.h>
-#include <NetworkManager.h>
+#include <nm-dbus-interface.h>
#include <nm-connection.h>
#include <nm-setting-wireless.h>
#include <nm-setting-wireless-security.h>
#include <nm-setting-8021x.h>
gboolean nm_ap_utils_complete_connection (const GByteArray *ssid,
- const guint8 bssid[ETH_ALEN],
+ const char *bssid,
NM80211Mode mode,
guint32 flags,
guint32 wpa_flags,
diff --git a/src/devices/wifi/nm-wifi-ap.c b/src/devices/wifi/nm-wifi-ap.c
index 363be2e32..ee07cf40d 100644
--- a/src/devices/wifi/nm-wifi-ap.c
+++ b/src/devices/wifi/nm-wifi-ap.c
@@ -19,9 +19,10 @@
* Copyright (C) 2006 - 2008 Novell, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include <stdlib.h>
-#include <netinet/ether.h>
#include "nm-wifi-ap.h"
#include "nm-wifi-ap-utils.h"
@@ -45,7 +46,7 @@ typedef struct
/* Scanned or cached values */
GByteArray * ssid;
- struct ether_addr address;
+ char * address;
NM80211Mode mode;
gint8 strength;
guint32 freq; /* Frequency in MHz; ie 2412 (== 2.412 GHz) */
@@ -102,6 +103,7 @@ finalize (GObject *object)
g_free (priv->supplicant_path);
if (priv->ssid)
g_byte_array_free (priv->ssid, TRUE);
+ g_free (priv->address);
G_OBJECT_CLASS (nm_ap_parent_class)->finalize (object);
}
@@ -111,6 +113,7 @@ set_property (GObject *object, guint prop_id,
const GValue *value, GParamSpec *pspec)
{
NMAccessPoint *ap = NM_AP (object);
+ GByteArray *ssid;
switch (prop_id) {
case PROP_FLAGS:
@@ -123,7 +126,11 @@ set_property (GObject *object, guint prop_id,
nm_ap_set_rsn_flags (ap, g_value_get_uint (value));
break;
case PROP_SSID:
- nm_ap_set_ssid (ap, (GByteArray *) g_value_get_boxed (value));
+ ssid = g_value_get_boxed (value);
+ if (ssid)
+ nm_ap_set_ssid (ap, ssid->data, ssid->len);
+ else
+ nm_ap_set_ssid (ap, NULL, 0);
break;
case PROP_FREQUENCY:
nm_ap_set_freq (ap, g_value_get_uint (value));
@@ -176,7 +183,7 @@ get_property (GObject *object, guint prop_id,
g_value_set_uint (value, priv->freq);
break;
case PROP_HW_ADDRESS:
- g_value_take_string (value, nm_utils_hwaddr_ntoa (&priv->address, ARPHRD_ETHER));
+ g_value_set_string (value, priv->address);
break;
case PROP_MODE:
g_value_set_uint (value, priv->mode);
@@ -219,81 +226,72 @@ nm_ap_class_init (NMAccessPointClass *ap_class)
/* properties */
g_object_class_install_property
(object_class, PROP_FLAGS,
- g_param_spec_uint (NM_AP_FLAGS,
- "Flags",
- "Flags",
- NM_802_11_AP_FLAGS_NONE,
- NM_802_11_AP_FLAGS_PRIVACY,
- NM_802_11_AP_FLAGS_NONE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ g_param_spec_uint (NM_AP_FLAGS, "", "",
+ NM_802_11_AP_FLAGS_NONE,
+ NM_802_11_AP_FLAGS_PRIVACY,
+ NM_802_11_AP_FLAGS_NONE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_WPA_FLAGS,
- g_param_spec_uint (NM_AP_WPA_FLAGS,
- "WPA Flags",
- "WPA Flags",
- NM_802_11_AP_SEC_NONE,
- all_sec_flags,
- NM_802_11_AP_SEC_NONE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ g_param_spec_uint (NM_AP_WPA_FLAGS, "", "",
+ NM_802_11_AP_SEC_NONE,
+ all_sec_flags,
+ NM_802_11_AP_SEC_NONE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_RSN_FLAGS,
- g_param_spec_uint (NM_AP_RSN_FLAGS,
- "RSN Flags",
- "RSN Flags",
- NM_802_11_AP_SEC_NONE,
- all_sec_flags,
- NM_802_11_AP_SEC_NONE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ g_param_spec_uint (NM_AP_RSN_FLAGS, "", "",
+ NM_802_11_AP_SEC_NONE,
+ all_sec_flags,
+ NM_802_11_AP_SEC_NONE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_SSID,
- g_param_spec_boxed (NM_AP_SSID,
- "SSID",
- "SSID",
+ g_param_spec_boxed (NM_AP_SSID, "", "",
DBUS_TYPE_G_UCHAR_ARRAY,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_FREQUENCY,
- g_param_spec_uint (NM_AP_FREQUENCY,
- "Frequency",
- "Frequency",
- 0, 10000, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ g_param_spec_uint (NM_AP_FREQUENCY, "", "",
+ 0, 10000, 0,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_HW_ADDRESS,
- g_param_spec_string (NM_AP_HW_ADDRESS,
- "MAC Address",
- "Hardware MAC address",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ g_param_spec_string (NM_AP_HW_ADDRESS, "", "",
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_MODE,
- g_param_spec_uint (NM_AP_MODE,
- "Mode",
- "Mode",
- NM_802_11_MODE_ADHOC, NM_802_11_MODE_INFRA, NM_802_11_MODE_INFRA,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ g_param_spec_uint (NM_AP_MODE, "", "",
+ NM_802_11_MODE_ADHOC, NM_802_11_MODE_INFRA, NM_802_11_MODE_INFRA,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_MAX_BITRATE,
- g_param_spec_uint (NM_AP_MAX_BITRATE,
- "Max Bitrate",
- "Max Bitrate",
- 0, G_MAXUINT16, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ g_param_spec_uint (NM_AP_MAX_BITRATE, "", "",
+ 0, G_MAXUINT16, 0,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_STRENGTH,
- g_param_spec_char (NM_AP_STRENGTH,
- "Strength",
- "Strength",
- G_MININT8, G_MAXINT8, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ g_param_spec_char (NM_AP_STRENGTH, "", "",
+ G_MININT8, G_MAXINT8, 0,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
nm_dbus_manager_register_exported_type (nm_dbus_manager_get (),
G_TYPE_FROM_CLASS (ap_class),
@@ -402,7 +400,6 @@ foreach_property_cb (gpointer key, gpointer value, gpointer user_data)
if (!strcmp (key, "SSID")) {
guint32 len = MIN (32, array->len);
- GByteArray *ssid;
/* Stupid ieee80211 layer uses <hidden> */
if (((len == 8) || (len == 9))
@@ -412,18 +409,15 @@ foreach_property_cb (gpointer key, gpointer value, gpointer user_data)
if (nm_utils_is_empty_ssid ((const guint8 *) array->data, len))
return;
- ssid = g_byte_array_sized_new (len);
- g_byte_array_append (ssid, (const guint8 *) array->data, len);
- nm_ap_set_ssid (ap, ssid);
- g_byte_array_free (ssid, TRUE);
+ nm_ap_set_ssid (ap, (const guint8 *) array->data, len);
} else if (!strcmp (key, "BSSID")) {
- struct ether_addr addr;
+ char *addr;
if (array->len != ETH_ALEN)
return;
- memset (&addr, 0, sizeof (struct ether_addr));
- memcpy (&addr, array->data, ETH_ALEN);
- nm_ap_set_address (ap, &addr);
+ addr = nm_utils_hwaddr_ntoa (array->data, array->len);
+ nm_ap_set_address (ap, addr);
+ g_free (addr);
} else if (!strcmp (key, "Rates")) {
guint32 maxrate = 0;
int i;
@@ -483,7 +477,7 @@ NMAccessPoint *
nm_ap_new_from_properties (const char *supplicant_path, GHashTable *properties)
{
NMAccessPoint *ap;
- const struct ether_addr * addr;
+ const char *addr;
const char bad_bssid1[ETH_ALEN] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
const char bad_bssid2[ETH_ALEN] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
@@ -498,8 +492,8 @@ nm_ap_new_from_properties (const char *supplicant_path, GHashTable *properties)
/* ignore APs with invalid BSSIDs */
addr = nm_ap_get_address (ap);
- if ( !(memcmp (addr->ether_addr_octet, bad_bssid1, ETH_ALEN))
- || !(memcmp (addr->ether_addr_octet, bad_bssid2, ETH_ALEN))) {
+ if ( nm_utils_hwaddr_matches (addr, -1, bad_bssid1, ETH_ALEN)
+ || nm_utils_hwaddr_matches (addr, -1, bad_bssid2, ETH_ALEN)) {
g_object_unref (ap);
return NULL;
}
@@ -597,7 +591,7 @@ nm_ap_new_fake_from_connection (NMConnection *connection)
NMAccessPoint *ap;
NMSettingWireless *s_wireless;
NMSettingWirelessSecurity *s_wireless_sec;
- const GByteArray *ssid;
+ GBytes *ssid;
const char *mode, *band, *key_mgmt;
guint32 channel;
NM80211ApSecurityFlags flags;
@@ -610,11 +604,11 @@ nm_ap_new_fake_from_connection (NMConnection *connection)
ssid = nm_setting_wireless_get_ssid (s_wireless);
g_return_val_if_fail (ssid != NULL, NULL);
- g_return_val_if_fail (ssid->len > 0, NULL);
+ g_return_val_if_fail (g_bytes_get_size (ssid) > 0, NULL);
ap = nm_ap_new ();
nm_ap_set_fake (ap, TRUE);
- nm_ap_set_ssid (ap, ssid);
+ nm_ap_set_ssid (ap, g_bytes_get_data (ssid, NULL), g_bytes_get_size (ssid));
// FIXME: bssid too?
@@ -720,10 +714,6 @@ error:
return NULL;
}
-
-#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]
-
void
nm_ap_dump (NMAccessPoint *ap, const char *prefix)
{
@@ -737,7 +727,7 @@ nm_ap_dump (NMAccessPoint *ap, const char *prefix)
prefix,
priv->ssid ? nm_utils_escape_ssid (priv->ssid->data, priv->ssid->len) : "(none)",
ap);
- nm_log_dbg (LOGD_WIFI_SCAN, " BSSID " MAC_FMT, MAC_ARG (priv->address.ether_addr_octet));
+ nm_log_dbg (LOGD_WIFI_SCAN, " BSSID %s", str_if_set (priv->address, "(none)"));
nm_log_dbg (LOGD_WIFI_SCAN, " mode %d", priv->mode);
nm_log_dbg (LOGD_WIFI_SCAN, " flags 0x%X", priv->flags);
nm_log_dbg (LOGD_WIFI_SCAN, " wpa flags 0x%X", priv->wpa_flags);
@@ -786,20 +776,18 @@ const GByteArray * nm_ap_get_ssid (const NMAccessPoint *ap)
}
void
-nm_ap_set_ssid (NMAccessPoint *ap, const GByteArray * ssid)
+nm_ap_set_ssid (NMAccessPoint *ap, const guint8 *ssid, gsize len)
{
NMAccessPointPrivate *priv;
g_return_if_fail (NM_IS_AP (ap));
+ g_return_if_fail (ssid == NULL || len > 0);
priv = NM_AP_GET_PRIVATE (ap);
- if (ssid == priv->ssid)
- return;
-
/* same SSID */
- if ((ssid && priv->ssid) && (ssid->len == priv->ssid->len)) {
- if (!memcmp (ssid->data, priv->ssid->data, ssid->len))
+ if ((ssid && priv->ssid) && (len == priv->ssid->len)) {
+ if (!memcmp (ssid, priv->ssid->data, len))
return;
}
@@ -809,14 +797,8 @@ nm_ap_set_ssid (NMAccessPoint *ap, const GByteArray * ssid)
}
if (ssid) {
- /* Should never get zero-length SSIDs */
- g_warn_if_fail (ssid->len > 0);
-
- if (ssid->len) {
- priv->ssid = g_byte_array_sized_new (ssid->len);
- priv->ssid->len = ssid->len;
- memcpy (priv->ssid->data, ssid->data, ssid->len);
- }
+ priv->ssid = g_byte_array_new ();
+ g_byte_array_append (priv->ssid, ssid, len);
}
g_object_notify (G_OBJECT (ap), NM_AP_SSID);
@@ -897,24 +879,28 @@ nm_ap_set_rsn_flags (NMAccessPoint *ap, NM80211ApSecurityFlags flags)
* Get/set functions for address
*
*/
-const struct ether_addr * nm_ap_get_address (const NMAccessPoint *ap)
+const char *
+nm_ap_get_address (const NMAccessPoint *ap)
{
g_return_val_if_fail (NM_IS_AP (ap), NULL);
- return &NM_AP_GET_PRIVATE (ap)->address;
+ return NM_AP_GET_PRIVATE (ap)->address;
}
-void nm_ap_set_address (NMAccessPoint *ap, const struct ether_addr * addr)
+void
+nm_ap_set_address (NMAccessPoint *ap, const char *addr)
{
NMAccessPointPrivate *priv;
g_return_if_fail (NM_IS_AP (ap));
g_return_if_fail (addr != NULL);
+ g_return_if_fail (nm_utils_hwaddr_valid (addr, ETH_ALEN));
priv = NM_AP_GET_PRIVATE (ap);
- if (memcmp (addr, &priv->address, sizeof (priv->address))) {
- memcpy (&NM_AP_GET_PRIVATE (ap)->address, addr, sizeof (struct ether_addr));
+ if (!priv->address || !nm_utils_hwaddr_matches (addr, -1, priv->address, -1)) {
+ g_free (priv->address);
+ priv->address = g_strdup (addr);
g_object_notify (G_OBJECT (ap), NM_AP_HW_ADDRESS);
}
}
@@ -1118,9 +1104,10 @@ nm_ap_check_compatible (NMAccessPoint *self,
NMAccessPointPrivate *priv;
NMSettingWireless *s_wireless;
NMSettingWirelessSecurity *s_wireless_sec;
+ GBytes *ssid;
const char *mode;
const char *band;
- const GByteArray *bssid;
+ const char *bssid;
guint32 channel;
g_return_val_if_fail (NM_IS_AP (self), FALSE);
@@ -1132,11 +1119,19 @@ nm_ap_check_compatible (NMAccessPoint *self,
if (s_wireless == NULL)
return FALSE;
- if (!nm_utils_same_ssid (nm_setting_wireless_get_ssid (s_wireless), priv->ssid, TRUE))
+ ssid = nm_setting_wireless_get_ssid (s_wireless);
+ if ( (ssid && !priv->ssid)
+ || (priv->ssid && !ssid))
+ return FALSE;
+
+ if ( ssid && priv->ssid &&
+ !nm_utils_same_ssid (g_bytes_get_data (ssid, NULL), g_bytes_get_size (ssid),
+ priv->ssid->data, priv->ssid->len,
+ TRUE))
return FALSE;
bssid = nm_setting_wireless_get_bssid (s_wireless);
- if (bssid && memcmp (bssid->data, &priv->address, ETH_ALEN))
+ if (bssid && (!priv->address || !nm_utils_hwaddr_matches (bssid, -1, priv->address, -1)))
return FALSE;
mode = nm_setting_wireless_get_mode (s_wireless);
@@ -1190,7 +1185,7 @@ nm_ap_complete_connection (NMAccessPoint *self,
g_return_val_if_fail (connection != NULL, FALSE);
return nm_ap_utils_complete_connection (priv->ssid,
- priv->address.ether_addr_octet,
+ priv->address,
priv->mode,
priv->flags,
priv->wpa_flags,
@@ -1233,27 +1228,29 @@ nm_ap_match_in_list (NMAccessPoint *find_ap,
for (iter = ap_list; iter; iter = g_slist_next (iter)) {
NMAccessPoint * list_ap = NM_AP (iter->data);
const GByteArray * list_ssid = nm_ap_get_ssid (list_ap);
- const struct ether_addr * list_addr = nm_ap_get_address (list_ap);
+ const char * list_addr = nm_ap_get_address (list_ap);
const GByteArray * find_ssid = nm_ap_get_ssid (find_ap);
- const struct ether_addr * find_addr = nm_ap_get_address (find_ap);
+ const char * find_addr = nm_ap_get_address (find_ap);
/* SSID match; if both APs are hiding their SSIDs,
* let matching continue on BSSID and other properties
*/
if ( (!list_ssid && find_ssid)
- || (list_ssid && !find_ssid)
- || !nm_utils_same_ssid (list_ssid, find_ssid, TRUE))
+ || (list_ssid && !find_ssid))
+ continue;
+ if ( list_ssid
+ && find_ssid
+ && !nm_utils_same_ssid (list_ssid->data, list_ssid->len,
+ find_ssid->data, find_ssid->len,
+ TRUE))
continue;
/* BSSID match */
- if ( (strict_match || nm_ethernet_address_is_valid (find_addr))
- && nm_ethernet_address_is_valid (list_addr)
- && memcmp (list_addr->ether_addr_octet,
- find_addr->ether_addr_octet,
- ETH_ALEN) != 0) {
+ if ( (strict_match || nm_ethernet_address_is_valid (find_addr, -1))
+ && nm_ethernet_address_is_valid (list_addr, -1)
+ && !nm_utils_hwaddr_matches (list_addr, -1, find_addr, -1))
continue;
- }
/* mode match */
if (nm_ap_get_mode (list_ap) != nm_ap_get_mode (find_ap))
diff --git a/src/devices/wifi/nm-wifi-ap.h b/src/devices/wifi/nm-wifi-ap.h
index f51fa078e..0abb28fcc 100644
--- a/src/devices/wifi/nm-wifi-ap.h
+++ b/src/devices/wifi/nm-wifi-ap.h
@@ -19,12 +19,12 @@
* Copyright (C) 2006 - 2008 Novell, Inc.
*/
-#ifndef NM_ACCESS_POINT_H
-#define NM_ACCESS_POINT_H
+#ifndef __NETWORKMANAGER_ACCESS_POINT_H__
+#define __NETWORKMANAGER_ACCESS_POINT_H__
#include <glib.h>
#include <glib-object.h>
-#include "NetworkManager.h"
+#include "nm-dbus-interface.h"
#include "nm-connection.h"
#define NM_TYPE_AP (nm_ap_get_type ())
@@ -60,62 +60,62 @@ NMAccessPoint * nm_ap_new_from_properties (const char *supplicant_path,
NMAccessPoint * nm_ap_new_fake_from_connection (NMConnection *connection);
void nm_ap_export_to_dbus (NMAccessPoint *ap);
-const char * nm_ap_get_dbus_path (NMAccessPoint *ap);
+const char *nm_ap_get_dbus_path (NMAccessPoint *ap);
-const char * nm_ap_get_supplicant_path (NMAccessPoint *ap);
-void nm_ap_set_supplicant_path (NMAccessPoint *ap,
- const char *path);
+const char *nm_ap_get_supplicant_path (NMAccessPoint *ap);
+void nm_ap_set_supplicant_path (NMAccessPoint *ap,
+ const char *path);
-const GByteArray * nm_ap_get_ssid (const NMAccessPoint * ap);
-void nm_ap_set_ssid (NMAccessPoint * ap, const GByteArray * ssid);
+const GByteArray *nm_ap_get_ssid (const NMAccessPoint * ap);
+void nm_ap_set_ssid (NMAccessPoint * ap, const guint8 * ssid, gsize len);
-NM80211ApFlags nm_ap_get_flags (NMAccessPoint *ap);
-void nm_ap_set_flags (NMAccessPoint *ap, NM80211ApFlags flags);
+NM80211ApFlags nm_ap_get_flags (NMAccessPoint *ap);
+void nm_ap_set_flags (NMAccessPoint *ap, NM80211ApFlags flags);
NM80211ApSecurityFlags nm_ap_get_wpa_flags (NMAccessPoint *ap);
void nm_ap_set_wpa_flags (NMAccessPoint *ap, NM80211ApSecurityFlags flags);
-NM80211ApSecurityFlags nm_ap_get_rsn_flags (NMAccessPoint *ap);
-void nm_ap_set_rsn_flags (NMAccessPoint *ap, NM80211ApSecurityFlags flags);
+NM80211ApSecurityFlags nm_ap_get_rsn_flags (NMAccessPoint *ap);
+void nm_ap_set_rsn_flags (NMAccessPoint *ap, NM80211ApSecurityFlags flags);
-const struct ether_addr * nm_ap_get_address (const NMAccessPoint *ap);
-void nm_ap_set_address (NMAccessPoint *ap, const struct ether_addr *addr);
+const char *nm_ap_get_address (const NMAccessPoint *ap);
+void nm_ap_set_address (NMAccessPoint *ap, const char *addr);
-NM80211Mode nm_ap_get_mode (NMAccessPoint *ap);
-void nm_ap_set_mode (NMAccessPoint *ap, const NM80211Mode mode);
+NM80211Mode nm_ap_get_mode (NMAccessPoint *ap);
+void nm_ap_set_mode (NMAccessPoint *ap, const NM80211Mode mode);
-gboolean nm_ap_is_hotspot (NMAccessPoint *ap);
+gboolean nm_ap_is_hotspot (NMAccessPoint *ap);
-gint8 nm_ap_get_strength (NMAccessPoint *ap);
-void nm_ap_set_strength (NMAccessPoint *ap, gint8 strength);
+gint8 nm_ap_get_strength (NMAccessPoint *ap);
+void nm_ap_set_strength (NMAccessPoint *ap, gint8 strength);
-guint32 nm_ap_get_freq (NMAccessPoint *ap);
-void nm_ap_set_freq (NMAccessPoint *ap, guint32 freq);
+guint32 nm_ap_get_freq (NMAccessPoint *ap);
+void nm_ap_set_freq (NMAccessPoint *ap, guint32 freq);
-guint32 nm_ap_get_max_bitrate (NMAccessPoint *ap);
-void nm_ap_set_max_bitrate (NMAccessPoint *ap, guint32 bitrate);
+guint32 nm_ap_get_max_bitrate (NMAccessPoint *ap);
+void nm_ap_set_max_bitrate (NMAccessPoint *ap, guint32 bitrate);
-gboolean nm_ap_get_fake (const NMAccessPoint *ap);
-void nm_ap_set_fake (NMAccessPoint *ap, gboolean fake);
+gboolean nm_ap_get_fake (const NMAccessPoint *ap);
+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);
+gboolean nm_ap_get_broadcast (NMAccessPoint *ap);
+void nm_ap_set_broadcast (NMAccessPoint *ap, gboolean broadcast);
-gint32 nm_ap_get_last_seen (const NMAccessPoint *ap);
-void nm_ap_set_last_seen (NMAccessPoint *ap, gint32 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);
+gboolean nm_ap_check_compatible (NMAccessPoint *self,
+ NMConnection *connection);
-gboolean nm_ap_complete_connection (NMAccessPoint *self,
- NMConnection *connection,
- gboolean lock_bssid,
- GError **error);
+gboolean nm_ap_complete_connection (NMAccessPoint *self,
+ NMConnection *connection,
+ gboolean lock_bssid,
+ GError **error);
NMAccessPoint * nm_ap_match_in_list (NMAccessPoint *find_ap,
GSList *ap_list,
gboolean strict_match);
-void nm_ap_dump (NMAccessPoint *ap, const char *prefix);
+void nm_ap_dump (NMAccessPoint *ap, const char *prefix);
-#endif /* NM_ACCESS_POINT_H */
+#endif /* __NETWORKMANAGER_ACCESS_POINT_H__ */
diff --git a/src/devices/wifi/nm-wifi-enum-types.c b/src/devices/wifi/nm-wifi-enum-types.c
index e914cfd68..7cce51cd0 100644
--- a/src/devices/wifi/nm-wifi-enum-types.c
+++ b/src/devices/wifi/nm-wifi-enum-types.c
@@ -9,50 +9,6 @@
#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
index d4dca5bf9..7fc64cd1f 100644
--- a/src/devices/wifi/nm-wifi-enum-types.h
+++ b/src/devices/wifi/nm-wifi-enum-types.h
@@ -9,10 +9,6 @@
#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
index 02ad93f46..4093c6123 100644
--- a/src/devices/wifi/nm-wifi-factory.c
+++ b/src/devices/wifi/nm-wifi-factory.c
@@ -18,12 +18,15 @@
* Copyright (C) 2011 - 2014 Red Hat, Inc.
*/
+#include "config.h"
+
#include <gmodule.h>
#include "nm-device-factory.h"
#include "nm-device-wifi.h"
#include "nm-device-olpc-mesh.h"
#include "nm-settings-connection.h"
+#include "nm-platform.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))
@@ -45,20 +48,12 @@ G_DEFINE_TYPE_EXTENDED (NMWifiFactory, nm_wifi_factory, G_TYPE_OBJECT, 0,
/**************************************************************************/
-#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 *
@@ -71,10 +66,17 @@ new_link (NMDeviceFactory *factory, NMPlatformLink *plink, GError **error)
return NULL;
}
+static NMDeviceType
+get_device_type (NMDeviceFactory *factory)
+{
+ return NM_DEVICE_TYPE_WIFI;
+}
+
static void
device_factory_interface_init (NMDeviceFactory *factory_iface)
{
factory_iface->new_link = new_link;
+ factory_iface->get_device_type = get_device_type;
}
static void
diff --git a/src/devices/wifi/tests/Makefile.am b/src/devices/wifi/tests/Makefile.am
index 2667c5f12..09c6401fe 100644
--- a/src/devices/wifi/tests/Makefile.am
+++ b/src/devices/wifi/tests/Makefile.am
@@ -1,14 +1,13 @@
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)/libnm-core \
+ -I$(top_builddir)/libnm-core \
+ -I${top_srcdir}/src/platform \
-I$(top_srcdir)/src \
-I$(top_srcdir)/src/devices/wifi \
-I$(top_builddir)/src \
-DG_LOG_DOMAIN=\""NetworkManager-wifi"\" \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS)
diff --git a/src/devices/wifi/tests/Makefile.in b/src/devices/wifi/tests/Makefile.in
index c0e75eedf..a8ae2e9d2 100644
--- a/src/devices/wifi/tests/Makefile.in
+++ b/src/devices/wifi/tests/Makefile.in
@@ -205,6 +205,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -328,6 +330,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -347,6 +350,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -373,7 +377,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -454,15 +458,14 @@ with_resolvconf = @with_resolvconf@
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)/libnm-core \
+ -I$(top_builddir)/libnm-core \
+ -I${top_srcdir}/src/platform \
-I$(top_srcdir)/src \
-I$(top_srcdir)/src/devices/wifi \
-I$(top_builddir)/src \
-DG_LOG_DOMAIN=\""NetworkManager-wifi"\" \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS)
diff --git a/src/devices/wifi/tests/test-wifi-ap-utils.c b/src/devices/wifi/tests/test-wifi-ap-utils.c
index 36d58f2a8..fb335b898 100644
--- a/src/devices/wifi/tests/test-wifi-ap-utils.c
+++ b/src/devices/wifi/tests/test-wifi-ap-utils.c
@@ -18,16 +18,15 @@
*
*/
+#include "config.h"
+
#include <glib.h>
#include <string.h>
#include "nm-wifi-ap-utils.h"
#include "nm-dbus-glib-types.h"
-#include "nm-setting-connection.h"
-#include "nm-setting-wireless.h"
-#include "nm-setting-wireless-security.h"
-#include "nm-setting-8021x.h"
+#include "nm-core-internal.h"
#define DEBUG 1
@@ -66,7 +65,7 @@
static gboolean
complete_connection (const char *ssid,
- const guint8 bssid[ETH_ALEN],
+ const char *bssid,
NM80211Mode mode,
guint32 flags,
guint32 wpa_flags,
@@ -113,7 +112,7 @@ set_items (NMSetting *setting, const KeyData *items)
{
const KeyData *item;
GParamSpec *pspec;
- GByteArray *tmp;
+ GBytes *tmp;
for (item = items; item && item->key; item++) {
g_assert (item->key);
@@ -137,12 +136,11 @@ set_items (NMSetting *setting, const KeyData *items)
g_assert (item->str == NULL);
g_object_set (G_OBJECT (setting), item->key, foo, NULL);
- } else if (pspec->value_type == DBUS_TYPE_G_UCHAR_ARRAY) {
+ } else if (pspec->value_type == G_TYPE_BYTES) {
g_assert (item->str);
- tmp = g_byte_array_sized_new (strlen (item->str));
- g_byte_array_append (tmp, (const guint8 *) item->str, strlen (item->str));
+ tmp = g_bytes_new (item->str, strlen (item->str));
g_object_set (G_OBJECT (setting), item->key, tmp, NULL);
- g_byte_array_free (tmp, TRUE);
+ g_bytes_unref (tmp);
} else {
/* Special types, check based on property name */
if (!strcmp (item->key, NM_SETTING_WIRELESS_SECURITY_PROTO))
@@ -217,31 +215,26 @@ fill_8021x (NMConnection *connection, const KeyData items[])
static NMConnection *
create_basic (const char *ssid,
- const guint8 *bssid,
+ const char *bssid,
NM80211Mode mode)
{
NMConnection *connection;
NMSettingWireless *s_wifi = NULL;
- GByteArray *tmp;
+ GBytes *tmp;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
nm_connection_add_setting (connection, NM_SETTING (s_wifi));
/* SSID */
- tmp = g_byte_array_sized_new (strlen (ssid));
- g_byte_array_append (tmp, (const guint8 *) ssid, strlen (ssid));
+ tmp = g_bytes_new (ssid, strlen (ssid));
g_object_set (G_OBJECT (s_wifi), NM_SETTING_WIRELESS_SSID, tmp, NULL);
- g_byte_array_free (tmp, TRUE);
+ g_bytes_unref (tmp);
/* BSSID */
- if (bssid) {
- tmp = g_byte_array_sized_new (ETH_ALEN);
- g_byte_array_append (tmp, bssid, ETH_ALEN);
- g_object_set (G_OBJECT (s_wifi), NM_SETTING_WIRELESS_BSSID, tmp, NULL);
- g_byte_array_free (tmp, TRUE);
- }
+ if (bssid)
+ g_object_set (G_OBJECT (s_wifi), NM_SETTING_WIRELESS_BSSID, bssid, NULL);
if (mode == NM_802_11_MODE_INFRA)
g_object_set (G_OBJECT (s_wifi), NM_SETTING_WIRELESS_MODE, "infrastructure", NULL);
@@ -259,12 +252,12 @@ static void
test_lock_bssid (void)
{
NMConnection *src, *expected;
- const guint8 bssid[ETH_ALEN] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 };
+ const char *bssid = "01:02:03:04:05:06";
const char *ssid = "blahblah";
gboolean success;
GError *error = NULL;
- src = nm_connection_new ();
+ src = nm_simple_connection_new ();
success = complete_connection (ssid, bssid,
NM_802_11_MODE_INFRA, NM_802_11_AP_FLAGS_NONE,
NM_802_11_AP_SEC_NONE, NM_802_11_AP_SEC_NONE,
@@ -283,7 +276,7 @@ static void
test_open_ap_empty_connection (void)
{
NMConnection *src, *expected;
- const guint8 bssid[ETH_ALEN] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 };
+ const char *bssid = "01:02:03:04:05:06";
const char *ssid = "blahblah";
gboolean success;
GError *error = NULL;
@@ -292,7 +285,7 @@ test_open_ap_empty_connection (void)
* SSID and Infra modes of the given AP details.
*/
- src = nm_connection_new ();
+ src = nm_simple_connection_new ();
success = complete_connection (ssid, bssid,
NM_802_11_MODE_INFRA, NM_802_11_AP_FLAGS_NONE,
NM_802_11_AP_SEC_NONE, NM_802_11_AP_SEC_NONE,
@@ -311,7 +304,7 @@ static void
test_open_ap_leap_connection_1 (gconstpointer add_wifi)
{
NMConnection *src;
- const guint8 bssid[ETH_ALEN] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 };
+ const char *bssid = "01:02:03:04:05:06";
const KeyData src_wsec[] = { { NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME, "Bill Smith", 0 }, { NULL } };
gboolean success;
GError *error = NULL;
@@ -321,7 +314,7 @@ test_open_ap_leap_connection_1 (gconstpointer add_wifi)
* the AP to have the Privacy bit set.
*/
- src = nm_connection_new ();
+ src = nm_simple_connection_new ();
if (add_wifi)
fill_wifi_empty (src);
fill_wsec (src, src_wsec);
@@ -332,7 +325,7 @@ test_open_ap_leap_connection_1 (gconstpointer add_wifi)
FALSE,
src, &error);
/* We expect failure */
- COMPARE (src, NULL, success, error, NM_SETTING_WIRELESS_SECURITY_ERROR, NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY);
+ COMPARE (src, NULL, success, error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_SETTING);
g_object_unref (src);
}
@@ -343,7 +336,7 @@ static void
test_open_ap_leap_connection_2 (void)
{
NMConnection *src;
- const guint8 bssid[ETH_ALEN] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 };
+ const char *bssid = "01:02:03:04:05:06";
const KeyData src_wsec[] = { { NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "ieee8021x", 0 }, { NULL } };
gboolean success;
GError *error = NULL;
@@ -352,7 +345,7 @@ test_open_ap_leap_connection_2 (void)
* WEP or LEAP) is rejected when completion is attempted with an open AP.
*/
- src = nm_connection_new ();
+ src = nm_simple_connection_new ();
fill_wifi_empty (src);
fill_wsec (src, src_wsec);
@@ -362,7 +355,7 @@ test_open_ap_leap_connection_2 (void)
FALSE,
src, &error);
/* We expect failure */
- COMPARE (src, NULL, success, error, NM_SETTING_WIRELESS_SECURITY_ERROR, NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY);
+ COMPARE (src, NULL, success, error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_SETTING);
g_object_unref (src);
}
@@ -373,7 +366,7 @@ static void
test_open_ap_wep_connection (gconstpointer add_wifi)
{
NMConnection *src;
- const guint8 bssid[ETH_ALEN] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 };
+ const char *bssid = "01:02:03:04:05:06";
const KeyData src_wsec[] = {
{ NM_SETTING_WIRELESS_SECURITY_WEP_KEY0, "11111111111111111111111111", 0 },
{ NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX, NULL, 0 },
@@ -386,7 +379,7 @@ test_open_ap_wep_connection (gconstpointer add_wifi)
* attempted with an open AP.
*/
- src = nm_connection_new ();
+ src = nm_simple_connection_new ();
if (add_wifi)
fill_wifi_empty (src);
fill_wsec (src, src_wsec);
@@ -396,7 +389,7 @@ test_open_ap_wep_connection (gconstpointer add_wifi)
FALSE,
src, &error);
/* We expect failure */
- COMPARE (src, NULL, success, error, NM_SETTING_WIRELESS_SECURITY_ERROR, NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY);
+ COMPARE (src, NULL, success, error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_SETTING);
g_object_unref (src);
}
@@ -410,11 +403,12 @@ test_ap_wpa_psk_connection_base (const char *key_mgmt,
guint32 wpa_flags,
guint32 rsn_flags,
gboolean add_wifi,
+ guint error_code,
NMConnection *expected)
{
NMConnection *src;
const char *ssid = "blahblah";
- const guint8 bssid[ETH_ALEN] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 };
+ const char *bssid = "01:02:03:04:05:06";
const KeyData exp_wifi[] = {
{ NM_SETTING_WIRELESS_SSID, ssid, 0 },
{ NM_SETTING_WIRELESS_MODE, "infrastructure", 0 },
@@ -427,7 +421,7 @@ test_ap_wpa_psk_connection_base (const char *key_mgmt,
gboolean success;
GError *error = NULL;
- src = nm_connection_new ();
+ src = nm_simple_connection_new ();
if (add_wifi)
fill_wifi_empty (src);
fill_wsec (src, both_wsec);
@@ -438,7 +432,7 @@ test_ap_wpa_psk_connection_base (const char *key_mgmt,
fill_wifi (expected, exp_wifi);
fill_wsec (expected, both_wsec);
}
- COMPARE (src, expected, success, error, NM_SETTING_WIRELESS_SECURITY_ERROR, NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY);
+ COMPARE (src, expected, success, error, NM_CONNECTION_ERROR, error_code);
g_object_unref (src);
}
@@ -454,7 +448,9 @@ test_open_ap_wpa_psk_connection_1 (void)
NM_802_11_AP_FLAGS_NONE,
NM_802_11_AP_SEC_NONE,
NM_802_11_AP_SEC_NONE,
- FALSE, NULL);
+ FALSE,
+ NM_CONNECTION_ERROR_INVALID_SETTING,
+ NULL);
}
static void
@@ -468,7 +464,9 @@ test_open_ap_wpa_psk_connection_2 (void)
NM_802_11_AP_FLAGS_NONE,
NM_802_11_AP_SEC_NONE,
NM_802_11_AP_SEC_NONE,
- TRUE, NULL);
+ TRUE,
+ NM_CONNECTION_ERROR_INVALID_SETTING,
+ NULL);
}
static void
@@ -481,7 +479,9 @@ test_open_ap_wpa_psk_connection_3 (void)
NM_802_11_AP_FLAGS_NONE,
NM_802_11_AP_SEC_NONE,
NM_802_11_AP_SEC_NONE,
- FALSE, NULL);
+ FALSE,
+ NM_CONNECTION_ERROR_INVALID_SETTING,
+ NULL);
}
static void
@@ -495,7 +495,9 @@ test_open_ap_wpa_psk_connection_4 (void)
NM_802_11_AP_FLAGS_NONE,
NM_802_11_AP_SEC_NONE,
NM_802_11_AP_SEC_NONE,
- FALSE, NULL);
+ FALSE,
+ NM_CONNECTION_ERROR_INVALID_SETTING,
+ NULL);
}
static void
@@ -508,7 +510,9 @@ test_open_ap_wpa_psk_connection_5 (void)
NM_802_11_AP_FLAGS_NONE,
NM_802_11_AP_SEC_NONE,
NM_802_11_AP_SEC_NONE,
- FALSE, NULL);
+ FALSE,
+ NM_CONNECTION_ERROR_INVALID_SETTING,
+ NULL);
}
/*******************************************/
@@ -520,11 +524,10 @@ test_ap_wpa_eap_connection_base (const char *key_mgmt,
guint32 wpa_flags,
guint32 rsn_flags,
gboolean add_wifi,
- guint error_domain,
guint error_code)
{
NMConnection *src;
- const guint8 bssid[ETH_ALEN] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 };
+ const char *bssid = "01:02:03:04:05:06";
const KeyData src_empty[] = { { NULL } };
const KeyData src_wsec[] = {
{ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, key_mgmt, 0 },
@@ -533,7 +536,7 @@ test_ap_wpa_eap_connection_base (const char *key_mgmt,
gboolean success;
GError *error = NULL;
- src = nm_connection_new ();
+ src = nm_simple_connection_new ();
if (add_wifi)
fill_wifi_empty (src);
fill_wsec (src, src_wsec);
@@ -542,7 +545,7 @@ test_ap_wpa_eap_connection_base (const char *key_mgmt,
flags, wpa_flags, rsn_flags,
FALSE, src, &error);
/* Failure expected */
- COMPARE (src, NULL, success, error, error_domain, error_code);
+ COMPARE (src, NULL, success, error, NM_CONNECTION_ERROR, error_code);
g_object_unref (src);
}
@@ -619,37 +622,22 @@ rsn_flags_for_idx (guint32 idx)
}
static guint32
-error_domain_for_idx (guint32 idx, guint num)
-{
- if (idx == IDX_OPEN)
- return NM_SETTING_WIRELESS_SECURITY_ERROR;
- else if (idx == IDX_PRIV) {
- if (num <= 3)
- return NM_SETTING_802_1X_ERROR;
- else
- return NM_SETTING_WIRELESS_SECURITY_ERROR;
- } else if (idx == IDX_WPA_PSK_PTKIP_GTKIP || idx == IDX_WPA_PSK_PTKIP_PCCMP_GTKIP
- || idx == IDX_WPA_RSN_PSK_PCCMP_GCCMP || idx == IDX_WPA_RSN_PSK_PTKIP_PCCMP_GTKIP
- || idx == IDX_RSN_PSK_PTKIP_PCCMP_GTKIP || idx == IDX_RSN_PSK_PCCMP_GCCMP)
- return NM_SETTING_WIRELESS_SECURITY_ERROR;
- else
- g_assert_not_reached ();
-}
-
-static guint32
error_code_for_idx (guint32 idx, guint num)
{
if (idx == IDX_OPEN)
- return NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY;
+ return NM_CONNECTION_ERROR_INVALID_SETTING;
else if (idx == IDX_PRIV) {
if (num <= 3)
- return NM_SETTING_802_1X_ERROR_MISSING_PROPERTY;
+ return NM_CONNECTION_ERROR_MISSING_PROPERTY;
else
- return NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY;
- } else if (idx == IDX_WPA_PSK_PTKIP_GTKIP || idx == IDX_WPA_PSK_PTKIP_PCCMP_GTKIP
+ return NM_CONNECTION_ERROR_INVALID_PROPERTY;
+ } else if ( idx == IDX_WPA_PSK_PTKIP_GTKIP || idx == IDX_WPA_PSK_PTKIP_PCCMP_GTKIP
|| idx == IDX_WPA_RSN_PSK_PCCMP_GCCMP || idx == IDX_WPA_RSN_PSK_PTKIP_PCCMP_GTKIP
|| idx == IDX_RSN_PSK_PTKIP_PCCMP_GTKIP || idx == IDX_RSN_PSK_PCCMP_GCCMP)
- return NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY;
+ if (num == 4)
+ return NM_CONNECTION_ERROR_INVALID_PROPERTY;
+ else
+ return NM_CONNECTION_ERROR_INVALID_SETTING;
else
g_assert_not_reached ();
}
@@ -664,7 +652,6 @@ test_ap_wpa_eap_connection_1 (gconstpointer data)
wpa_flags_for_idx (idx),
rsn_flags_for_idx (idx),
FALSE,
- error_domain_for_idx (idx, 1),
error_code_for_idx (idx, 1));
}
@@ -678,7 +665,6 @@ test_ap_wpa_eap_connection_2 (gconstpointer data)
wpa_flags_for_idx (idx),
rsn_flags_for_idx (idx),
TRUE,
- error_domain_for_idx (idx, 2),
error_code_for_idx (idx, 2));
}
@@ -692,7 +678,6 @@ test_ap_wpa_eap_connection_3 (gconstpointer data)
wpa_flags_for_idx (idx),
rsn_flags_for_idx (idx),
FALSE,
- error_domain_for_idx (idx, 3),
error_code_for_idx (idx, 3));
}
@@ -706,7 +691,6 @@ test_ap_wpa_eap_connection_4 (gconstpointer data)
wpa_flags_for_idx (idx),
rsn_flags_for_idx (idx),
FALSE,
- error_domain_for_idx (idx, 4),
error_code_for_idx (idx, 4));
}
@@ -720,7 +704,6 @@ test_ap_wpa_eap_connection_5 (gconstpointer data)
wpa_flags_for_idx (idx),
rsn_flags_for_idx (idx),
FALSE,
- error_domain_for_idx (idx, 5),
error_code_for_idx (idx, 5));
}
@@ -730,7 +713,7 @@ static void
test_priv_ap_empty_connection (void)
{
NMConnection *src, *expected;
- const guint8 bssid[ETH_ALEN] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 };
+ const char *bssid = "01:02:03:04:05:06";
const char *ssid = "blahblah";
const KeyData exp_wsec[] = {
{ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "none", 0 },
@@ -742,7 +725,7 @@ test_priv_ap_empty_connection (void)
* connection when completed with an AP with the Privacy bit set.
*/
- src = nm_connection_new ();
+ src = nm_simple_connection_new ();
success = complete_connection (ssid, bssid,
NM_802_11_MODE_INFRA, NM_802_11_AP_FLAGS_PRIVACY,
NM_802_11_AP_SEC_NONE, NM_802_11_AP_SEC_NONE,
@@ -765,7 +748,7 @@ test_priv_ap_leap_connection_1 (gconstpointer add_wifi)
{
NMConnection *src, *expected;
const char *ssid = "blahblah";
- const guint8 bssid[ETH_ALEN] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 };
+ const char *bssid = "01:02:03:04:05:06";
const char *leap_username = "Bill Smith";
const KeyData src_wsec[] = {
{ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "ieee8021x", 0 },
@@ -784,7 +767,7 @@ test_priv_ap_leap_connection_1 (gconstpointer add_wifi)
* with an AP with the Privacy bit set.
*/
- src = nm_connection_new ();
+ src = nm_simple_connection_new ();
if (add_wifi)
fill_wifi_empty (src);
fill_wsec (src, src_wsec);
@@ -810,7 +793,7 @@ static void
test_priv_ap_leap_connection_2 (void)
{
NMConnection *src;
- const guint8 bssid[ETH_ALEN] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 };
+ const char *bssid = "01:02:03:04:05:06";
const KeyData src_wsec[] = {
{ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "ieee8021x", 0 },
{ NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "leap", 0 },
@@ -823,7 +806,7 @@ test_priv_ap_leap_connection_2 (void)
* with an AP with the Privacy bit set.
*/
- src = nm_connection_new ();
+ src = nm_simple_connection_new ();
fill_wifi_empty (src);
fill_wsec (src, src_wsec);
success = complete_connection ("blahblah", bssid,
@@ -832,7 +815,7 @@ test_priv_ap_leap_connection_2 (void)
FALSE,
src, &error);
/* We expect failure here, we need a LEAP username */
- COMPARE (src, NULL, success, error, NM_SETTING_WIRELESS_SECURITY_ERROR, NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME);
+ COMPARE (src, NULL, success, error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_PROPERTY);
g_object_unref (src);
}
@@ -844,7 +827,7 @@ test_priv_ap_dynamic_wep_1 (void)
{
NMConnection *src, *expected;
const char *ssid = "blahblah";
- const guint8 bssid[ETH_ALEN] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 };
+ const char *bssid = "01:02:03:04:05:06";
const KeyData src_wsec[] = {
{ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "ieee8021x", 0 },
{ NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "open", 0 },
@@ -866,7 +849,7 @@ test_priv_ap_dynamic_wep_1 (void)
* Dynamic WEP connection when completed with an AP with the Privacy bit set.
*/
- src = nm_connection_new ();
+ src = nm_simple_connection_new ();
fill_wifi_empty (src);
fill_wsec (src, src_wsec);
fill_8021x (src, both_8021x);
@@ -892,7 +875,7 @@ test_priv_ap_dynamic_wep_2 (void)
{
NMConnection *src, *expected;
const char *ssid = "blahblah";
- const guint8 bssid[ETH_ALEN] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 };
+ const char *bssid = "01:02:03:04:05:06";
const KeyData src_wsec[] = {
{ NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "open", 0 },
{ NULL } };
@@ -913,7 +896,7 @@ test_priv_ap_dynamic_wep_2 (void)
* WEP connection when completed with an AP with the Privacy bit set.
*/
- src = nm_connection_new ();
+ src = nm_simple_connection_new ();
fill_wifi_empty (src);
fill_wsec (src, src_wsec);
fill_8021x (src, both_8021x);
@@ -938,7 +921,7 @@ static void
test_priv_ap_dynamic_wep_3 (void)
{
NMConnection *src;
- const guint8 bssid[ETH_ALEN] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 };
+ const char *bssid = "01:02:03:04:05:06";
const KeyData src_wsec[] = {
{ NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "shared", 0 },
{ NULL } };
@@ -954,7 +937,7 @@ test_priv_ap_dynamic_wep_3 (void)
* setting is rejected, as 802.1x is incompatible with 'shared' auth.
*/
- src = nm_connection_new ();
+ src = nm_simple_connection_new ();
fill_wifi_empty (src);
fill_wsec (src, src_wsec);
fill_8021x (src, src_8021x);
@@ -964,7 +947,7 @@ test_priv_ap_dynamic_wep_3 (void)
FALSE,
src, &error);
/* Expect failure; shared is not compatible with dynamic WEP */
- COMPARE (src, NULL, success, error, NM_SETTING_WIRELESS_SECURITY_ERROR, NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY);
+ COMPARE (src, NULL, success, error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
g_object_unref (src);
}
@@ -982,7 +965,9 @@ test_priv_ap_wpa_psk_connection_1 (void)
NM_802_11_AP_FLAGS_PRIVACY,
NM_802_11_AP_SEC_NONE,
NM_802_11_AP_SEC_NONE,
- FALSE, NULL);
+ FALSE,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ NULL);
}
static void
@@ -996,7 +981,9 @@ test_priv_ap_wpa_psk_connection_2 (void)
NM_802_11_AP_FLAGS_PRIVACY,
NM_802_11_AP_SEC_NONE,
NM_802_11_AP_SEC_NONE,
- TRUE, NULL);
+ TRUE,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ NULL);
}
static void
@@ -1011,7 +998,9 @@ test_priv_ap_wpa_psk_connection_3 (void)
NM_802_11_AP_FLAGS_PRIVACY,
NM_802_11_AP_SEC_NONE,
NM_802_11_AP_SEC_NONE,
- FALSE, NULL);
+ FALSE,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ NULL);
}
static void
@@ -1026,7 +1015,9 @@ test_priv_ap_wpa_psk_connection_4 (void)
NM_802_11_AP_FLAGS_PRIVACY,
NM_802_11_AP_SEC_NONE,
NM_802_11_AP_SEC_NONE,
- FALSE, NULL);
+ FALSE,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ NULL);
}
static void
@@ -1041,7 +1032,9 @@ test_priv_ap_wpa_psk_connection_5 (void)
NM_802_11_AP_FLAGS_PRIVACY,
NM_802_11_AP_SEC_NONE,
NM_802_11_AP_SEC_NONE,
- FALSE, NULL);
+ FALSE,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ NULL);
}
/*******************************************/
@@ -1051,7 +1044,7 @@ 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 *bssid = "01:02:03:04:05:06";
const char *ssid = "blahblah";
const KeyData exp_wsec[] = {
{ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-psk", 0 },
@@ -1065,7 +1058,7 @@ test_wpa_ap_empty_connection (gconstpointer data)
* or RSN flags.
*/
- src = nm_connection_new ();
+ src = nm_simple_connection_new ();
success = complete_connection (ssid, bssid,
NM_802_11_MODE_INFRA, NM_802_11_AP_FLAGS_PRIVACY,
wpa_flags_for_idx (idx),
@@ -1089,7 +1082,7 @@ 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 };
+ const char *bssid = "01:02:03:04:05:06";
const char *leap_username = "Bill Smith";
const KeyData src_wsec[] = {
{ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "ieee8021x", 0 },
@@ -1102,7 +1095,7 @@ test_wpa_ap_leap_connection_1 (gconstpointer data)
* rejected since WPA APs (usually) do not support LEAP.
*/
- src = nm_connection_new ();
+ src = nm_simple_connection_new ();
fill_wifi_empty (src);
fill_wsec (src, src_wsec);
success = complete_connection (ssid, bssid,
@@ -1112,7 +1105,7 @@ test_wpa_ap_leap_connection_1 (gconstpointer data)
FALSE,
src, &error);
/* Expect failure here; WPA APs don't support old-school LEAP */
- COMPARE (src, NULL, success, error, NM_SETTING_WIRELESS_SECURITY_ERROR, NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY);
+ COMPARE (src, NULL, success, error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
g_object_unref (src);
}
@@ -1124,7 +1117,7 @@ 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 char *bssid = "01:02:03:04:05:06";
const KeyData src_wsec[] = {
{ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "ieee8021x", 0 },
{ NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "leap", 0 },
@@ -1136,7 +1129,7 @@ test_wpa_ap_leap_connection_2 (gconstpointer data)
* rejected since WPA APs (usually) do not support LEAP.
*/
- src = nm_connection_new ();
+ src = nm_simple_connection_new ();
fill_wifi_empty (src);
fill_wsec (src, src_wsec);
success = complete_connection ("blahblah", bssid,
@@ -1146,7 +1139,7 @@ test_wpa_ap_leap_connection_2 (gconstpointer data)
FALSE,
src, &error);
/* We expect failure here, we need a LEAP username */
- COMPARE (src, NULL, success, error, NM_SETTING_WIRELESS_SECURITY_ERROR, NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY);
+ COMPARE (src, NULL, success, error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
g_object_unref (src);
}
@@ -1158,7 +1151,7 @@ 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 char *bssid = "01:02:03:04:05:06";
const KeyData src_wsec[] = {
{ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "ieee8021x", 0 },
{ NULL } };
@@ -1169,7 +1162,7 @@ test_wpa_ap_dynamic_wep_connection (gconstpointer data)
* rejected since WPA APs (usually) do not support Dynamic WEP.
*/
- src = nm_connection_new ();
+ src = nm_simple_connection_new ();
fill_wifi_empty (src);
fill_wsec (src, src_wsec);
success = complete_connection ("blahblah", bssid,
@@ -1179,7 +1172,7 @@ test_wpa_ap_dynamic_wep_connection (gconstpointer data)
FALSE,
src, &error);
/* We expect failure here since Dynamic WEP is incompatible with WPA */
- COMPARE (src, NULL, success, error, NM_SETTING_WIRELESS_SECURITY_ERROR, NM_SETTING_WIRELESS_SECURITY_ERROR_INVALID_PROPERTY);
+ COMPARE (src, NULL, success, error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
g_object_unref (src);
}
@@ -1196,13 +1189,15 @@ test_wpa_ap_wpa_psk_connection_1 (gconstpointer data)
{ NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "open", 0 },
{ NULL } };
- expected = nm_connection_new ();
+ expected = nm_simple_connection_new ();
fill_wsec (expected, exp_wsec);
test_ap_wpa_psk_connection_base (NULL, NULL,
NM_802_11_AP_FLAGS_PRIVACY,
wpa_flags_for_idx (idx),
rsn_flags_for_idx (idx),
- FALSE, expected);
+ FALSE,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ expected);
g_object_unref (expected);
}
@@ -1216,13 +1211,15 @@ test_wpa_ap_wpa_psk_connection_2 (gconstpointer data)
{ NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "open", 0 },
{ NULL } };
- expected = nm_connection_new ();
+ expected = nm_simple_connection_new ();
fill_wsec (expected, exp_wsec);
test_ap_wpa_psk_connection_base (NULL, NULL,
NM_802_11_AP_FLAGS_PRIVACY,
wpa_flags_for_idx (idx),
rsn_flags_for_idx (idx),
- TRUE, expected);
+ TRUE,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ expected);
g_object_unref (expected);
}
@@ -1236,13 +1233,15 @@ test_wpa_ap_wpa_psk_connection_3 (gconstpointer data)
{ NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "open", 0 },
{ NULL } };
- expected = nm_connection_new ();
+ expected = nm_simple_connection_new ();
fill_wsec (expected, exp_wsec);
test_ap_wpa_psk_connection_base (NULL, "open",
NM_802_11_AP_FLAGS_PRIVACY,
wpa_flags_for_idx (idx),
rsn_flags_for_idx (idx),
- FALSE, expected);
+ FALSE,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ expected);
g_object_unref (expected);
}
@@ -1254,7 +1253,9 @@ test_wpa_ap_wpa_psk_connection_4 (gconstpointer data)
NM_802_11_AP_FLAGS_PRIVACY,
wpa_flags_for_idx (idx),
rsn_flags_for_idx (idx),
- FALSE, NULL);
+ FALSE,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ NULL);
}
static void
@@ -1267,13 +1268,15 @@ test_wpa_ap_wpa_psk_connection_5 (gconstpointer data)
{ NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "open", 0 },
{ NULL } };
- expected = nm_connection_new ();
+ expected = nm_simple_connection_new ();
fill_wsec (expected, exp_wsec);
test_ap_wpa_psk_connection_base ("wpa-psk", "open",
NM_802_11_AP_FLAGS_PRIVACY,
wpa_flags_for_idx (idx),
rsn_flags_for_idx (idx),
- FALSE, expected);
+ FALSE,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ expected);
g_object_unref (expected);
}
diff --git a/src/devices/wimax/Makefile.am b/src/devices/wimax/Makefile.am
index def8bf62b..555b5ff2e 100644
--- a/src/devices/wimax/Makefile.am
+++ b/src/devices/wimax/Makefile.am
@@ -1,20 +1,16 @@
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}/libnm-core \
+ -I${top_srcdir}/libnm-core \
-DG_LOG_DOMAIN=\""NetworkManager-wimax"\" \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(DBUS_CFLAGS) \
- $(POLKIT_CFLAGS) \
- $(IWMX_SDK_CFLAGS) \
- $(LIBNL_CFLAGS) \
- $(GUDEV_CFLAGS)
+ $(IWMX_SDK_CFLAGS)
pkglib_LTLIBRARIES = libnm-device-plugin-wimax.la
diff --git a/src/devices/wimax/Makefile.in b/src/devices/wimax/Makefile.in
index ba16d2771..f1ffb09c1 100644
--- a/src/devices/wimax/Makefile.in
+++ b/src/devices/wimax/Makefile.in
@@ -215,6 +215,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -338,6 +340,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -357,6 +360,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -383,7 +387,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -465,20 +469,16 @@ 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}/libnm-core \
+ -I${top_srcdir}/libnm-core \
-DG_LOG_DOMAIN=\""NetworkManager-wimax"\" \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(DBUS_CFLAGS) \
- $(POLKIT_CFLAGS) \
- $(IWMX_SDK_CFLAGS) \
- $(LIBNL_CFLAGS) \
- $(GUDEV_CFLAGS)
+ $(IWMX_SDK_CFLAGS)
pkglib_LTLIBRARIES = libnm-device-plugin-wimax.la
SYMBOL_VIS_FILE = $(srcdir)/exports.ver
diff --git a/src/devices/wimax/exports.ver b/src/devices/wimax/exports.ver
index d2c451244..24cd848ce 100644
--- a/src/devices/wimax/exports.ver
+++ b/src/devices/wimax/exports.ver
@@ -1,7 +1,6 @@
{
global:
nm_device_factory_create;
- nm_device_factory_get_device_type;
local:
*;
};
diff --git a/src/devices/wimax/iwmxsdk.c b/src/devices/wimax/iwmxsdk.c
index d1ef7b683..1c2c68214 100644
--- a/src/devices/wimax/iwmxsdk.c
+++ b/src/devices/wimax/iwmxsdk.c
@@ -19,24 +19,22 @@
*
*/
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
+#include "config.h"
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/socket.h>
-#include <linux/if.h>
#include <glib.h>
-#include <WiMaxType.h>
+#include "nm-wimax-util.h"
+
#include <WiMaxAPI.h>
#include <WiMaxAPIEx.h>
-#include "logging/nm-logging.h"
+#include "nm-logging.h"
#include "iwmxsdk.h"
static WIMAX_API_DEVICE_ID g_api;
diff --git a/src/devices/wimax/iwmxsdk.h b/src/devices/wimax/iwmxsdk.h
index 785ca8c2f..c8e766964 100644
--- a/src/devices/wimax/iwmxsdk.h
+++ b/src/devices/wimax/iwmxsdk.h
@@ -19,10 +19,11 @@
*
*/
-#ifndef IWMXSDK_H
-#define IWMXSDK_H
+#ifndef __IWMXSDK_H__
+#define __IWMXSDK_H__
+
+#include "nm-wimax-util.h"
-#include <wimax/WiMaxType.h>
#include <wimax/WiMaxTypesEx.h>
#include <wimax/WiMaxAPIEx.h>
@@ -108,4 +109,4 @@ int iwmx_sdk_get_networks(struct wmxsdk *wmxsdk);
int iwmx_sdk_api_init(void);
void iwmx_sdk_api_exit(void);
-#endif /* IWMXSDK_H */
+#endif /* __IWMXSDK_H__ */
diff --git a/src/devices/wimax/nm-device-wimax.c b/src/devices/wimax/nm-device-wimax.c
index 1bdda4899..466cd9793 100644
--- a/src/devices/wimax/nm-device-wimax.c
+++ b/src/devices/wimax/nm-device-wimax.c
@@ -19,14 +19,17 @@
* Copyright (C) 2009 Novell, Inc.
*/
+#include "config.h"
+
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/ioctl.h>
-#include <net/ethernet.h>
#include <sys/socket.h>
-#include <linux/if.h>
-#include <netinet/ether.h>
+
+#include <glib/gi18n.h>
+
+#include "nm-wimax-util.h"
#include <WiMaxAPI.h>
#include <WiMaxAPIEx.h>
@@ -36,8 +39,10 @@
#include "nm-logging.h"
#include "nm-device-private.h"
#include "NetworkManagerUtils.h"
+#include "nm-active-connection.h"
#include "nm-dbus-manager.h"
#include "nm-connection.h"
+#include "nm-platform.h"
#include "nm-setting-connection.h"
#include "nm-setting-wimax.h"
#include "nm-utils.h"
@@ -110,19 +115,6 @@ typedef struct {
/***********************************************************/
-#define NM_WIMAX_ERROR (nm_wimax_error_quark ())
-
-static GQuark
-nm_wimax_error_quark (void)
-{
- static GQuark quark = 0;
- if (!quark)
- quark = g_quark_from_static_string ("nm-wimax-error");
- return quark;
-}
-
-/***********************************************************/
-
static gboolean
impl_device_get_nsp_list (NMDeviceWimax *self, GPtrArray **nsps, GError **error)
{
@@ -316,7 +308,7 @@ check_connection_compatible (NMDevice *device, NMConnection *connection)
NMSettingConnection *s_con;
NMSettingWimax *s_wimax;
const char *connection_type;
- const GByteArray *mac;
+ const char *mac;
if (!NM_DEVICE_CLASS (nm_device_wimax_parent_class)->check_connection_compatible (device, connection))
return FALSE;
@@ -333,7 +325,7 @@ check_connection_compatible (NMDevice *device, NMConnection *connection)
return FALSE;
mac = nm_setting_wimax_get_mac_address (s_wimax);
- if (mac && memcmp (mac->data, nm_device_get_hw_address (device, NULL), ETH_ALEN))
+ if (mac && !nm_utils_hwaddr_matches (mac, -1, nm_device_get_hw_address (device), -1))
return FALSE;
return TRUE;
@@ -372,9 +364,8 @@ complete_connection (NMDevice *device,
NMDeviceWimax *self = NM_DEVICE_WIMAX (device);
NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (self);
NMSettingWimax *s_wimax;
- const GByteArray *setting_mac;
- const guint8 *hw_address;
- char *format;
+ const char *setting_mac;
+ const char *hw_address;
const char *nsp_name = NULL;
NMWimaxNsp *nsp = NULL;
GSList *iter;
@@ -385,8 +376,8 @@ complete_connection (NMDevice *device,
/* If not given a specific object, we need at minimum an NSP name */
if (!s_wimax) {
g_set_error_literal (error,
- NM_WIMAX_ERROR,
- NM_WIMAX_ERROR_CONNECTION_INVALID,
+ NM_DEVICE_ERROR,
+ NM_DEVICE_ERROR_INVALID_CONNECTION,
"A 'wimax' setting is required if no NSP path was given.");
return FALSE;
}
@@ -394,8 +385,8 @@ complete_connection (NMDevice *device,
nsp_name = nm_setting_wimax_get_network_name (s_wimax);
if (!nsp_name || !strlen (nsp_name)) {
g_set_error_literal (error,
- NM_WIMAX_ERROR,
- NM_WIMAX_ERROR_CONNECTION_INVALID,
+ NM_DEVICE_ERROR,
+ NM_DEVICE_ERROR_INVALID_CONNECTION,
"A 'wimax' setting with a valid network name is required if no NSP path was given.");
return FALSE;
}
@@ -422,8 +413,8 @@ complete_connection (NMDevice *device,
if (!nsp) {
g_set_error (error,
- NM_WIMAX_ERROR,
- NM_WIMAX_ERROR_NSP_NOT_FOUND,
+ NM_DEVICE_ERROR,
+ NM_DEVICE_ERROR_SPECIFIC_OBJECT_NOT_FOUND,
"The NSP %s was not in the scan list.",
specific_object);
return FALSE;
@@ -439,38 +430,31 @@ complete_connection (NMDevice *device,
}
g_assert (nsp_name);
- format = g_strdup_printf ("%s %%d", nsp_name);
nm_utils_complete_generic (connection,
NM_SETTING_WIMAX_SETTING_NAME,
existing_connections,
- format,
nsp_name,
+ nsp_name,
+ NULL,
TRUE);
- g_free (format);
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);
+ hw_address = nm_device_get_hw_address (device);
if (setting_mac) {
/* Make sure the setting MAC (if any) matches the device's permanent MAC */
- if (memcmp (setting_mac->data, hw_address, ETH_ALEN)) {
- g_set_error (error,
- NM_SETTING_WIMAX_ERROR,
- NM_SETTING_WIMAX_ERROR_INVALID_PROPERTY,
- NM_SETTING_WIMAX_MAC_ADDRESS);
+ if (!nm_utils_hwaddr_matches (setting_mac, -1, hw_address, -1)) {
+ g_set_error_literal (error,
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_INVALID_PROPERTY,
+ _("connection does not match device"));
+ g_prefix_error (error, "%s.%s: ", NM_SETTING_WIMAX_SETTING_NAME, NM_SETTING_WIMAX_MAC_ADDRESS);
return FALSE;
}
} else {
- GByteArray *mac;
- const guint8 null_mac[ETH_ALEN] = { 0, 0, 0, 0, 0, 0 };
-
/* Lock the connection to this device by default */
- if (memcmp (hw_address, null_mac, ETH_ALEN)) {
- mac = g_byte_array_sized_new (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);
- }
+ if (!nm_utils_hwaddr_matches (hw_address, -1, NULL, ETH_ALEN))
+ g_object_set (G_OBJECT (s_wimax), NM_SETTING_WIMAX_MAC_ADDRESS, hw_address, NULL);
}
return TRUE;
@@ -1047,7 +1031,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 = nm_utils_hwaddr_ntoa_len (link_status->bsId, 6);
+ new_bsid = nm_utils_hwaddr_ntoa (link_status->bsId, 6);
}
if (priv->center_freq != center_freq) {
@@ -1363,58 +1347,52 @@ nm_device_wimax_class_init (NMDeviceWimaxClass *klass)
/* Properties */
g_object_class_install_property
(object_class, PROP_NSPS,
- g_param_spec_boxed (NM_DEVICE_WIMAX_NSPS,
- "Network access points",
- "Network access points",
+ g_param_spec_boxed (NM_DEVICE_WIMAX_NSPS, "", "",
DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (object_class, PROP_ACTIVE_NSP,
- g_param_spec_boxed (NM_DEVICE_WIMAX_ACTIVE_NSP,
- "Active NSP",
- "Currently active NSP",
- DBUS_TYPE_G_OBJECT_PATH,
- G_PARAM_READABLE));
+ g_object_class_install_property
+ (object_class, PROP_ACTIVE_NSP,
+ g_param_spec_boxed (NM_DEVICE_WIMAX_ACTIVE_NSP, "", "",
+ DBUS_TYPE_G_OBJECT_PATH,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_CENTER_FREQ,
- g_param_spec_uint (NM_DEVICE_WIMAX_CENTER_FREQUENCY,
- "Center frequency",
- "Center frequency",
+ g_param_spec_uint (NM_DEVICE_WIMAX_CENTER_FREQUENCY, "", "",
0, G_MAXUINT, 0,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_RSSI,
- g_param_spec_int (NM_DEVICE_WIMAX_RSSI,
- "RSSI",
- "RSSI",
+ g_param_spec_int (NM_DEVICE_WIMAX_RSSI, "", "",
G_MININT, G_MAXINT, 0,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_CINR,
- g_param_spec_int (NM_DEVICE_WIMAX_CINR,
- "CINR",
- "CINR",
+ g_param_spec_int (NM_DEVICE_WIMAX_CINR, "", "",
G_MININT, G_MAXINT, 0,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_TX_POWER,
- g_param_spec_int (NM_DEVICE_WIMAX_TX_POWER,
- "TX Power",
- "TX Power",
+ g_param_spec_int (NM_DEVICE_WIMAX_TX_POWER, "", "",
G_MININT, G_MAXINT, 0,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_BSID,
- g_param_spec_string (NM_DEVICE_WIMAX_BSID,
- "BSID",
- "BSID",
+ g_param_spec_string (NM_DEVICE_WIMAX_BSID, "", "",
NULL,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/* Signals */
signals[NSP_ADDED] =
@@ -1440,6 +1418,4 @@ nm_device_wimax_class_init (NMDeviceWimaxClass *klass)
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/devices/wimax/nm-device-wimax.h b/src/devices/wimax/nm-device-wimax.h
index 8b252ee16..30b2481ff 100644
--- a/src/devices/wimax/nm-device-wimax.h
+++ b/src/devices/wimax/nm-device-wimax.h
@@ -19,10 +19,9 @@
* Copyright (C) 2009 Novell, Inc.
*/
-#ifndef NM_DEVICE_WIMAX_H
-#define NM_DEVICE_WIMAX_H
+#ifndef __NETWORKMANAGER_DEVICE_WIMAX_H__
+#define __NETWORKMANAGER_DEVICE_WIMAX_H__
-#include <net/ethernet.h>
#include "nm-device.h"
#include "nm-wimax-nsp.h"
@@ -35,14 +34,6 @@ G_BEGIN_DECLS
#define NM_IS_DEVICE_WIMAX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_WIMAX))
#define NM_DEVICE_WIMAX_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_WIMAX, NMDeviceWimaxClass))
-typedef enum
-{
- NM_WIMAX_ERROR_CONNECTION_NOT_WIMAX = 0, /*< nick=ConnectionNotWimax >*/
- NM_WIMAX_ERROR_CONNECTION_INVALID, /*< nick=ConnectionInvalid >*/
- NM_WIMAX_ERROR_CONNECTION_INCOMPATIBLE, /*< nick=ConnectionIncompatible >*/
- NM_WIMAX_ERROR_NSP_NOT_FOUND, /*< nick=NspNotFound >*/
-} NMWimaxError;
-
#define NM_DEVICE_WIMAX_NSPS "nsps"
#define NM_DEVICE_WIMAX_ACTIVE_NSP "active-nsp"
#define NM_DEVICE_WIMAX_CENTER_FREQUENCY "center-frequency"
diff --git a/src/devices/wimax/nm-wimax-factory.c b/src/devices/wimax/nm-wimax-factory.c
index ca962e686..39e9a2873 100644
--- a/src/devices/wimax/nm-wimax-factory.c
+++ b/src/devices/wimax/nm-wimax-factory.c
@@ -18,10 +18,13 @@
* Copyright (C) 2011 - 2014 Red Hat, Inc.
*/
+#include "config.h"
+
#include <gmodule.h>
#include "nm-device-factory.h"
#include "nm-device-wimax.h"
+#include "nm-platform.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))
@@ -43,20 +46,12 @@ G_DEFINE_TYPE_EXTENDED (NMWimaxFactory, nm_wimax_factory, G_TYPE_OBJECT, 0,
/**************************************************************************/
-#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 *
@@ -71,10 +66,17 @@ new_link (NMDeviceFactory *factory, NMPlatformLink *plink, GError **error)
return (NMDevice *) nm_device_wimax_new (plink);
}
+static NMDeviceType
+get_device_type (NMDeviceFactory *factory)
+{
+ return NM_DEVICE_TYPE_WIMAX;
+}
+
static void
device_factory_interface_init (NMDeviceFactory *factory_iface)
{
factory_iface->new_link = new_link;
+ factory_iface->get_device_type = get_device_type;
}
static void
diff --git a/src/devices/wimax/nm-wimax-nsp.c b/src/devices/wimax/nm-wimax-nsp.c
index efe3b0587..f4db63f02 100644
--- a/src/devices/wimax/nm-wimax-nsp.c
+++ b/src/devices/wimax/nm-wimax-nsp.c
@@ -19,8 +19,10 @@
* Copyright (C) 2009 Novell, Inc.
*/
+#include "config.h"
+
#include "nm-wimax-nsp.h"
-#include "NetworkManager.h"
+#include "nm-dbus-interface.h"
#include "nm-dbus-manager.h"
#include "nm-setting-wimax.h"
#include "nm-wimax-nsp-glue.h"
@@ -210,31 +212,28 @@ nm_wimax_nsp_class_init (NMWimaxNspClass *klass)
g_object_class_install_property
(object_class, PROP_NAME,
- g_param_spec_string (NM_WIMAX_NSP_NAME,
- "Name",
- "Name",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ g_param_spec_string (NM_WIMAX_NSP_NAME, "", "",
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_SIGNAL_QUALITY,
- g_param_spec_uint (NM_WIMAX_NSP_SIGNAL_QUALITY,
- "SignalQuality",
- "SignalQuality",
- 0,
- 100,
- 0,
- G_PARAM_READWRITE));
+ g_param_spec_uint (NM_WIMAX_NSP_SIGNAL_QUALITY, "", "",
+ 0,
+ 100,
+ 0,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_NETWORK_TYPE,
- g_param_spec_uint (NM_WIMAX_NSP_NETWORK_TYPE,
- "NetworkType",
- "NetworkType",
+ g_param_spec_uint (NM_WIMAX_NSP_NETWORK_TYPE, "", "",
NM_WIMAX_NSP_NETWORK_TYPE_UNKNOWN,
NM_WIMAX_NSP_NETWORK_TYPE_ROAMING_PARTNER,
NM_WIMAX_NSP_NETWORK_TYPE_UNKNOWN,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
nm_dbus_manager_register_exported_type (nm_dbus_manager_get (),
G_TYPE_FROM_CLASS (klass),
diff --git a/src/devices/wimax/nm-wimax-nsp.h b/src/devices/wimax/nm-wimax-nsp.h
index a74b68a79..8d0a6a14b 100644
--- a/src/devices/wimax/nm-wimax-nsp.h
+++ b/src/devices/wimax/nm-wimax-nsp.h
@@ -18,8 +18,8 @@
* Copyright (C) 2009 Novell, Inc.
*/
-#ifndef NM_WIMAX_NSP_H
-#define NM_WIMAX_NSP_H
+#ifndef __NETWORKMANAGER_WIMAX_NSP_H__
+#define __NETWORKMANAGER_WIMAX_NSP_H__
#include <glib-object.h>
#include "nm-wimax-types.h"
diff --git a/src/devices/wimax/nm-wimax-types.h b/src/devices/wimax/nm-wimax-types.h
index 8c807fd8a..207d2477a 100644
--- a/src/devices/wimax/nm-wimax-types.h
+++ b/src/devices/wimax/nm-wimax-types.h
@@ -18,8 +18,8 @@
* Copyright (C) 2009 Novell, Inc.
*/
-#ifndef NM_WIMAX_TYPES_H
-#define NM_WIMAX_TYPES_H
+#ifndef __NETWORKMANAGER_WIMAX_TYPES_H__
+#define __NETWORKMANAGER_WIMAX_TYPES_H__
typedef enum {
NM_WIMAX_NSP_NETWORK_TYPE_UNKNOWN,
diff --git a/src/devices/wimax/nm-wimax-util.c b/src/devices/wimax/nm-wimax-util.c
index bca25a1db..0ae285aed 100644
--- a/src/devices/wimax/nm-wimax-util.c
+++ b/src/devices/wimax/nm-wimax-util.c
@@ -18,7 +18,8 @@
* Copyright (C) 2009 Novell, Inc.
*/
-#include <WiMaxAPI.h>
+#include "config.h"
+
#include "nm-wimax-util.h"
#include "nm-utils.h"
#include "iwmxsdk.h"
diff --git a/src/devices/wimax/nm-wimax-util.h b/src/devices/wimax/nm-wimax-util.h
index 71f5aa29d..a1852d553 100644
--- a/src/devices/wimax/nm-wimax-util.h
+++ b/src/devices/wimax/nm-wimax-util.h
@@ -18,12 +18,17 @@
* Copyright (C) 2009 Novell, Inc.
*/
-#ifndef NM_WIMAX_UTIL_H
-#define NM_WIMAX_UTIL_H
+#ifndef __NETWORKMANAGER_WIMAX_UTIL_H__
+#define __NETWORKMANAGER_WIMAX_UTIL_H__
#include <glib.h>
+#include "nm-utils-internal.h"
+
+NM_PRAGMA_WARNING_DISABLE("-Wstrict-prototypes")
#include <WiMaxType.h>
+NM_PRAGMA_WARNING_REENABLE
+
#include <WiMaxError.h>
#include "nm-wimax-types.h"
diff --git a/src/devices/wwan/Makefile.am b/src/devices/wwan/Makefile.am
index 988f46792..7e5b190bf 100644
--- a/src/devices/wwan/Makefile.am
+++ b/src/devices/wwan/Makefile.am
@@ -5,18 +5,16 @@ include $(GLIB_MAKEFILE)
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 \
+ -I${top_builddir}/libnm-core \
+ -I${top_srcdir}/libnm-core \
-DG_LOG_DOMAIN=\""NetworkManager-wwan"\" \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(DBUS_CFLAGS) \
- $(POLKIT_CFLAGS) \
$(MM_GLIB_CFLAGS)
BUILT_SOURCES = $(null)
@@ -33,9 +31,8 @@ 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-broadband.c \
+ nm-modem-broadband.h \
nm-modem-manager.c \
nm-modem-manager.h \
nm-modem.c \
@@ -43,12 +40,6 @@ libnm_wwan_la_SOURCES = \
\
$(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 = \
diff --git a/src/devices/wwan/Makefile.in b/src/devices/wwan/Makefile.in
index ae33d1c87..18cbfdd37 100644
--- a/src/devices/wwan/Makefile.in
+++ b/src/devices/wwan/Makefile.in
@@ -78,13 +78,9 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-@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 README
+ $(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 \
@@ -151,15 +147,9 @@ libnm_device_plugin_wwan_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(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)
+am_libnm_wwan_la_OBJECTS = nm-modem-broadband.lo nm-modem-manager.lo \
+ nm-modem.lo $(am__objects_1)
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) \
@@ -201,7 +191,7 @@ am__v_CCLD_1 =
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)
+ $(libnm_wwan_la_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -236,6 +226,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -359,6 +351,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -378,6 +371,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -404,7 +398,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -486,18 +480,16 @@ 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_builddir}/include \
-I${top_srcdir}/include \
- -I${top_builddir}/libnm-util \
- -I${top_srcdir}/libnm-util \
+ -I${top_builddir}/libnm-core \
+ -I${top_srcdir}/libnm-core \
-DG_LOG_DOMAIN=\""NetworkManager-wwan"\" \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(DBUS_CFLAGS) \
- $(POLKIT_CFLAGS) \
$(MM_GLIB_CFLAGS)
BUILT_SOURCES = $(null) $(GLIB_GENERATED) nm-device-modem-glue.h
@@ -508,9 +500,16 @@ 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)
+libnm_wwan_la_SOURCES = \
+ nm-modem-broadband.c \
+ nm-modem-broadband.h \
+ nm-modem-manager.c \
+ nm-modem-manager.h \
+ nm-modem.c \
+ nm-modem.h \
+ \
+ $(GLIB_GENERATED)
+
WWAN_SYMBOL_VIS_FILE = $(srcdir)/wwan-exports.ver
libnm_wwan_la_LDFLAGS = \
-avoid-version \
@@ -624,7 +623,6 @@ distclean-compile:
@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@
diff --git a/src/devices/wwan/README b/src/devices/wwan/README
deleted file mode 100644
index 4661c0428..000000000
--- a/src/devices/wwan/README
+++ /dev/null
@@ -1,45 +0,0 @@
-
-ModemManager integration is organized as follows:
-
-
-Common source
-********************************************************************************
-
- * nm-modem.[h|c]:
- Defines the basic `NMModem' object. The core NetworkManager implementation
- will use this interface exclusively, regardless of the real final type of
- the modem object.
-
- * nm-modem-manager.[h|c]:
- Defines the `NMModemManager' object, which takes care of listening to
- 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.
-
-
-ModemManager 0.7 integration
-********************************************************************************
-
- * nm-modem-broadband.[h|c]:
- Defines the `NMModemBroadband' object, which is a subclass of `NMModem'.
- This object handles both 3GPP and 3GPP2 modems exposed in the new
- `ModemManager1' interface.
-
-
-ModemManager 0.4/0.5/0.6 integration
-********************************************************************************
-
- * nm-modem-old-types.h:
- Defines helper types to use with the (old) ModemManager DBus API.
-
- * nm-modem-old.[h|c]:
- Defines the `NMModemGeneric' object. All modem objects based on the old
- ModemManager interface are subclasses of this one.
-
- * nm-modem-gsm.[h|c]:
- Defines the `NMModemGsm' object, which is a subclass of `NMModemGeneric'.
- This object handles 3GPP-specific (GSM, UMTS, HSPA, LTE) modems.
-
- * nm-modem-cdma.[h|c]:
- Defines the `NMModemCdma' object, which is a subclass of `NMModemGeneric'.
- This object handles 3GPP2-specific modems (CDMA, EV-DO).
diff --git a/src/devices/wwan/exports.ver b/src/devices/wwan/exports.ver
index d2c451244..24cd848ce 100644
--- a/src/devices/wwan/exports.ver
+++ b/src/devices/wwan/exports.ver
@@ -1,7 +1,6 @@
{
global:
nm_device_factory_create;
- nm_device_factory_get_device_type;
local:
*;
};
diff --git a/src/devices/wwan/nm-device-modem.c b/src/devices/wwan/nm-device-modem.c
index 678f77950..f681e59ca 100644
--- a/src/devices/wwan/nm-device-modem.c
+++ b/src/devices/wwan/nm-device-modem.c
@@ -20,20 +20,22 @@
#include "config.h"
+#include <string.h>
#include <glib.h>
#include "nm-device-modem.h"
#include "nm-modem.h"
-#include "nm-modem-old.h"
#include "nm-device-private.h"
#include "nm-rfkill-manager.h"
#include "nm-logging.h"
#include "nm-dbus-manager.h"
#include "nm-settings-connection.h"
-
-#if WITH_MODEM_MANAGER_1
#include "nm-modem-broadband.h"
-#endif
+#include "NetworkManagerUtils.h"
+#include "nm-core-internal.h"
+
+#include "nm-device-logging.h"
+_LOG_DECLARE_SELF(NMDeviceModem);
G_DEFINE_TYPE (NMDeviceModem, nm_device_modem, NM_TYPE_DEVICE)
@@ -91,7 +93,8 @@ modem_prepare_result (NMModem *modem,
NMDeviceStateReason reason,
gpointer user_data)
{
- NMDevice *device = NM_DEVICE (user_data);
+ NMDeviceModem *self = NM_DEVICE_MODEM (user_data);
+ NMDevice *device = NM_DEVICE (self);
NMDeviceState state;
state = nm_device_get_state (device);
@@ -106,8 +109,7 @@ modem_prepare_result (NMModem *modem,
* 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));
+ _LOGI (LOGD_MB, "disabling autoconnect due to failed SIM PIN");
}
nm_device_state_changed (device, NM_DEVICE_STATE_FAILED, reason);
@@ -147,33 +149,110 @@ modem_auth_result (NMModem *modem, GError *error, gpointer user_data)
}
static void
-modem_ip4_config_result (NMModem *self,
+modem_ip4_config_result (NMModem *modem,
NMIP4Config *config,
GError *error,
gpointer user_data)
{
- NMDevice *device = NM_DEVICE (user_data);
+ NMDeviceModem *self = NM_DEVICE_MODEM (user_data);
+ NMDevice *device = NM_DEVICE (self);
g_return_if_fail (nm_device_activate_ip4_state_in_conf (device) == TRUE);
if (error) {
- nm_log_warn (LOGD_MB | LOGD_IP4, "retrieving IP4 configuration failed: (%d) %s",
- error ? error->code : -1,
- error && error->message ? error->message : "(unknown)");
+ _LOGW (LOGD_MB | LOGD_IP4, "retrieving IPv4 configuration failed: (%d) %s",
+ error->code, error->message ? error->message : "(unknown)");
nm_device_state_changed (device, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE);
- } else
- nm_device_activate_schedule_ip4_config_result (device, config);
+ } else {
+ nm_device_set_wwan_ip4_config (device, config);
+ nm_device_activate_schedule_ip4_config_result (device, NULL);
+ }
+}
+
+static void
+modem_ip6_config_result (NMModem *modem,
+ NMIP6Config *config,
+ gboolean do_slaac,
+ GError *error,
+ gpointer user_data)
+{
+ NMDeviceModem *self = NM_DEVICE_MODEM (user_data);
+ NMDevice *device = NM_DEVICE (self);
+ NMActStageReturn ret;
+ NMDeviceStateReason reason = NM_DEVICE_STATE_REASON_NONE;
+ NMIP6Config *ignored = NULL;
+ gboolean got_config = !!config;
+
+ g_return_if_fail (nm_device_activate_ip6_state_in_conf (device) == TRUE);
+
+ if (error) {
+ _LOGW (LOGD_MB | LOGD_IP6, "retrieving IPv6 configuration failed: (%d) %s",
+ error->code, error->message ? error->message : "(unknown)");
+
+ nm_device_state_changed (device, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE);
+ return;
+ }
+
+ /* Re-enable IPv6 on the interface */
+ nm_device_ipv6_sysctl_set (device, "disable_ipv6", "0");
+
+ if (config)
+ nm_device_set_wwan_ip6_config (device, config);
+
+ if (do_slaac == FALSE) {
+ if (got_config)
+ nm_device_activate_schedule_ip6_config_result (device);
+ else {
+ _LOGW (LOGD_MB | LOGD_IP6, "retrieving IPv6 configuration failed: SLAAC not requested and no addresses");
+ nm_device_state_changed (device, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE);
+ }
+ return;
+ }
+
+ /* Start SLAAC now that we have a link-local address from the modem */
+ ret = NM_DEVICE_CLASS (nm_device_modem_parent_class)->act_stage3_ip6_config_start (device, &ignored, &reason);
+ g_assert (ignored == NULL);
+ switch (ret) {
+ case NM_ACT_STAGE_RETURN_FAILURE:
+ nm_device_state_changed (device, NM_DEVICE_STATE_FAILED, reason);
+ break;
+ case NM_ACT_STAGE_RETURN_STOP:
+ /* all done */
+ nm_device_activate_schedule_ip6_config_result (device);
+ break;
+ case NM_ACT_STAGE_RETURN_POSTPONE:
+ /* let SLAAC run */
+ break;
+ default:
+ /* Should never get here since we've assured that the IPv6 method
+ * will either be "auto" or "ignored" when starting IPv6 configuration.
+ */
+ g_assert_not_reached ();
+ }
}
static void
data_port_changed_cb (NMModem *modem, GParamSpec *pspec, gpointer user_data)
{
NMDevice *self = NM_DEVICE (user_data);
+ const char *old = nm_device_get_ip_iface (self);
+ const char *new = nm_modem_get_data_port (modem);
+ gboolean changed = FALSE;
+
+ if (new && g_strcmp0 (new, old))
+ changed = TRUE;
/* We set the IP iface in the device as soon as we know it, so that we
* properly ifup it if needed */
- nm_device_set_ip_iface (self, nm_modem_get_data_port (modem));
+ nm_device_set_ip_iface (self, new);
+
+ /* Disable IPv6 immediately on the interface since NM handles IPv6
+ * internally, and leaving it enabled could allow the kernel's IPv6
+ * RA handling code to run before NM is ready.
+ */
+ if (changed)
+ nm_device_ipv6_sysctl_set (self, "disable_ipv6", "1");
}
static void
@@ -258,6 +337,7 @@ device_state_changed (NMDevice *device,
NMDeviceState old_state,
NMDeviceStateReason reason)
{
+ NMDeviceModem *self = NM_DEVICE_MODEM (device);
NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (device);
NMConnection *connection = nm_device_get_connection (device);
@@ -266,9 +346,8 @@ device_state_changed (NMDevice *device,
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)));
+ _LOGI (LOGD_MB, "modem state '%s'",
+ nm_modem_state_to_string (nm_modem_get_state (priv->modem)));
}
nm_modem_device_state_changed (priv->modem, new_state, old_state, reason);
@@ -294,10 +373,10 @@ device_state_changed (NMDevice *device,
}
}
-static guint
-get_hw_address_length (NMDevice *device, gboolean *out_permanent)
+static guint32
+get_generic_capabilities (NMDevice *device)
{
- return 0;
+ return NM_DEVICE_CAP_IS_NON_KERNEL;
}
static gboolean
@@ -404,11 +483,24 @@ act_stage3_ip6_config_start (NMDevice *device,
NMDeviceStateReason *reason)
{
return nm_modem_stage3_ip6_config_start (NM_DEVICE_MODEM_GET_PRIVATE (device)->modem,
- device,
- NM_DEVICE_CLASS (nm_device_modem_parent_class),
+ nm_device_get_act_request (device),
reason);
}
+static gboolean
+get_ip_iface_identifier (NMDevice *device, NMUtilsIPv6IfaceId *out_iid)
+{
+ NMDeviceModem *self = NM_DEVICE_MODEM (device);
+ NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (self);
+ gboolean success;
+
+ g_return_val_if_fail (priv->modem, FALSE);
+ success = nm_modem_get_iid (priv->modem, out_iid);
+ if (!success)
+ success = NM_DEVICE_CLASS (nm_device_modem_parent_class)->get_ip_iface_identifier (device, out_iid);
+ return success;
+}
+
/*****************************************************************************/
static gboolean
@@ -444,23 +536,22 @@ set_enabled (NMDevice *device, gboolean enabled)
}
static gboolean
-is_available (NMDevice *dev)
+is_available (NMDevice *device)
{
- NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (dev);
+ NMDeviceModem *self = NM_DEVICE_MODEM (device);
+ NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (device);
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));
+ _LOGD (LOGD_MB, "not available because WWAN airplane mode is on");
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));
+ _LOGD (LOGD_MB, "not available because modem is not ready (%s)",
+ nm_modem_state_to_string (modem_state));
return FALSE;
}
@@ -496,8 +587,10 @@ nm_device_modem_new (NMModem *modem)
/* If the data port is known, set it as the IP interface immediately */
data_port = nm_modem_get_data_port (modem);
- if (data_port)
+ if (data_port) {
nm_device_set_ip_iface (device, data_port);
+ nm_device_ipv6_sysctl_set (device, "disable_ipv6", "1");
+ }
return device;
}
@@ -508,6 +601,18 @@ nm_device_modem_init (NMDeviceModem *self)
}
static void
+constructed (GObject *object)
+{
+ G_OBJECT_CLASS (nm_device_modem_parent_class)->constructed (object);
+
+ /* DHCP is always done by the modem firmware, not by the network, and
+ * by the time we get around to DHCP the firmware should already know
+ * the IP addressing details. So the DHCP timeout can be much shorter.
+ */
+ nm_device_set_dhcp_timeout (NM_DEVICE (object), 15);
+}
+
+static void
set_modem (NMDeviceModem *self, NMModem *modem)
{
NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (self);
@@ -519,6 +624,7 @@ set_modem (NMDeviceModem *self, NMModem *modem)
g_signal_connect (modem, NM_MODEM_PPP_FAILED, G_CALLBACK (ppp_failed), self);
g_signal_connect (modem, NM_MODEM_PREPARE_RESULT, G_CALLBACK (modem_prepare_result), self);
g_signal_connect (modem, NM_MODEM_IP4_CONFIG_RESULT, G_CALLBACK (modem_ip4_config_result), self);
+ g_signal_connect (modem, NM_MODEM_IP6_CONFIG_RESULT, G_CALLBACK (modem_ip6_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);
@@ -599,8 +705,9 @@ nm_device_modem_class_init (NMDeviceModemClass *mclass)
object_class->dispose = dispose;
object_class->get_property = get_property;
object_class->set_property = set_property;
+ object_class->constructed = constructed;
- device_class->get_hw_address_length = get_hw_address_length;
+ device_class->get_generic_capabilities = get_generic_capabilities;
device_class->check_connection_compatible = check_connection_compatible;
device_class->check_connection_available = check_connection_available;
device_class->complete_connection = complete_connection;
@@ -614,31 +721,31 @@ nm_device_modem_class_init (NMDeviceModemClass *mclass)
device_class->set_enabled = set_enabled;
device_class->owns_iface = owns_iface;
device_class->is_available = is_available;
+ device_class->get_ip_iface_identifier = get_ip_iface_identifier;
device_class->state_changed = device_state_changed;
/* Properties */
g_object_class_install_property
(object_class, PROP_MODEM,
- g_param_spec_object (NM_DEVICE_MODEM_MODEM,
- "Modem",
- "Modem",
+ g_param_spec_object (NM_DEVICE_MODEM_MODEM, "", "",
NM_TYPE_MODEM,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-
- g_object_class_install_property (object_class, PROP_CAPABILITIES,
- g_param_spec_uint (NM_DEVICE_MODEM_CAPABILITIES,
- "Modem Capabilities",
- "Modem Capabilities",
- 0, G_MAXUINT32, NM_DEVICE_MODEM_CAPABILITY_NONE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-
- g_object_class_install_property (object_class, PROP_CURRENT_CAPABILITIES,
- g_param_spec_uint (NM_DEVICE_MODEM_CURRENT_CAPABILITIES,
- "Current modem Capabilities",
- "Current modem Capabilities",
- 0, G_MAXUINT32, NM_DEVICE_MODEM_CAPABILITY_NONE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_CAPABILITIES,
+ g_param_spec_uint (NM_DEVICE_MODEM_CAPABILITIES, "", "",
+ 0, G_MAXUINT32, NM_DEVICE_MODEM_CAPABILITY_NONE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_CURRENT_CAPABILITIES,
+ g_param_spec_uint (NM_DEVICE_MODEM_CURRENT_CAPABILITIES, "", "",
+ 0, G_MAXUINT32, NM_DEVICE_MODEM_CAPABILITY_NONE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
nm_dbus_manager_register_exported_type (nm_dbus_manager_get (),
G_TYPE_FROM_CLASS (mclass),
diff --git a/src/devices/wwan/nm-device-modem.h b/src/devices/wwan/nm-device-modem.h
index ee6b2988c..996195c49 100644
--- a/src/devices/wwan/nm-device-modem.h
+++ b/src/devices/wwan/nm-device-modem.h
@@ -18,8 +18,8 @@
* Copyright (C) 2011 Red Hat, Inc.
*/
-#ifndef NM_DEVICE_MODEM_H
-#define NM_DEVICE_MODEM_H
+#ifndef __NETWORKMANAGER_DEVICE_MODEM_H__
+#define __NETWORKMANAGER_DEVICE_MODEM_H__
#include <glib.h>
#include <glib-object.h>
@@ -51,4 +51,4 @@ GType nm_device_modem_get_type (void);
NMDevice *nm_device_modem_new (NMModem *modem);
-#endif /* NM_DEVICE_MODEM_H */
+#endif /* __NETWORKMANAGER_DEVICE_MODEM_H__ */
diff --git a/src/devices/wwan/nm-modem-broadband.c b/src/devices/wwan/nm-modem-broadband.c
index 807b89243..f8239b799 100644
--- a/src/devices/wwan/nm-modem-broadband.c
+++ b/src/devices/wwan/nm-modem-broadband.c
@@ -18,14 +18,19 @@
* Copyright (C) 2012 Aleksander Morgado <aleksander@gnu.org>
*/
+#include "config.h"
+
#include <glib/gi18n.h>
#include <string.h>
+#include <arpa/inet.h>
#include <libmm-glib.h>
+
#include "nm-modem-broadband.h"
-#include "nm-setting-connection.h"
+#include "nm-core-internal.h"
#include "nm-logging.h"
#include "NetworkManagerUtils.h"
#include "nm-device-private.h"
+#include "nm-platform.h"
G_DEFINE_TYPE (NMModemBroadband, nm_modem_broadband, NM_TYPE_MODEM)
@@ -156,13 +161,29 @@ ask_for_pin (NMModemBroadband *self)
NM_SETTING_GSM_PIN);
}
+static NMModemIPMethod
+get_bearer_ip_method (MMBearerIpConfig *config)
+{
+ MMBearerIpMethod mm_method;
+
+ mm_method = mm_bearer_ip_config_get_method (config);
+ if (mm_method == MM_BEARER_IP_METHOD_PPP)
+ return NM_MODEM_IP_METHOD_PPP;
+ else if (mm_method == MM_BEARER_IP_METHOD_STATIC)
+ return NM_MODEM_IP_METHOD_STATIC;
+ else if (mm_method == MM_BEARER_IP_METHOD_DHCP)
+ return NM_MODEM_IP_METHOD_AUTO;
+ return NM_MODEM_IP_METHOD_UNKNOWN;
+}
+
static void
connect_ready (MMModemSimple *simple_iface,
GAsyncResult *res,
NMModemBroadband *self)
{
GError *error = NULL;
- guint ip_method;
+ NMModemIPMethod ip4_method = NM_MODEM_IP_METHOD_UNKNOWN;
+ NMModemIPMethod ip6_method = NM_MODEM_IP_METHOD_UNKNOWN;
g_clear_object (&self->priv->connect_properties);
@@ -195,35 +216,31 @@ connect_ready (MMModemSimple *simple_iface,
/* Grab IP configurations */
self->priv->ipv4_config = mm_bearer_get_ipv4_config (self->priv->bearer);
- self->priv->ipv6_config = mm_bearer_get_ipv6_config (self->priv->bearer);
+ if (self->priv->ipv4_config)
+ ip4_method = get_bearer_ip_method (self->priv->ipv4_config);
- switch (mm_bearer_ip_config_get_method (self->priv->ipv4_config)) {
- case MM_BEARER_IP_METHOD_PPP:
- ip_method = MM_MODEM_IP_METHOD_PPP;
- break;
- case MM_BEARER_IP_METHOD_STATIC:
- ip_method = MM_MODEM_IP_METHOD_STATIC;
- break;
- case MM_BEARER_IP_METHOD_DHCP:
- ip_method = MM_MODEM_IP_METHOD_DHCP;
- break;
- default:
- 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)),
- error->message);
- g_signal_emit_by_name (self, NM_MODEM_PREPARE_RESULT, FALSE, translate_mm_error (error));
+ self->priv->ipv6_config = mm_bearer_get_ipv6_config (self->priv->bearer);
+ if (self->priv->ipv6_config)
+ ip6_method = get_bearer_ip_method (self->priv->ipv6_config);
+
+ if (ip4_method == NM_MODEM_IP_METHOD_UNKNOWN &&
+ ip6_method == NM_MODEM_IP_METHOD_UNKNOWN) {
+ nm_log_warn (LOGD_MB, "(%s) failed to connect modem: invalid bearer IP configuration",
+ nm_modem_get_uid (NM_MODEM (self)));
+
+ error = g_error_new_literal (NM_DEVICE_ERROR,
+ NM_DEVICE_ERROR_INVALID_CONNECTION,
+ "invalid bearer IP configuration");
+ g_signal_emit_by_name (self, NM_MODEM_PREPARE_RESULT, FALSE, error);
g_error_free (error);
g_object_unref (self);
return;
}
- /* IPv4 for now only */
g_object_set (self,
NM_MODEM_DATA_PORT, mm_bearer_get_interface (self->priv->bearer),
- NM_MODEM_IP_METHOD, ip_method,
+ NM_MODEM_IP4_METHOD, ip4_method,
+ NM_MODEM_IP6_METHOD, ip6_method,
NM_MODEM_IP_TIMEOUT, mm_bearer_get_ip_timeout (self->priv->bearer),
NULL);
@@ -249,12 +266,15 @@ create_cdma_connect_properties (NMConnection *connection)
}
static MMSimpleConnectProperties *
-create_gsm_connect_properties (NMConnection *connection)
+create_gsm_connect_properties (NMModem *modem,
+ NMConnection *connection,
+ GError **error)
{
NMSettingGsm *setting;
- NMSettingPPP *s_ppp;
+ NMSettingPpp *s_ppp;
MMSimpleConnectProperties *properties;
const gchar *str;
+ NMModemIPType ip_type;
setting = nm_connection_get_setting_gsm (connection);
properties = mm_simple_connect_properties_new ();
@@ -264,9 +284,9 @@ create_gsm_connect_properties (NMConnection *connection)
if (str)
mm_simple_connect_properties_set_number (properties, str);
+ /* Blank APN ("") means the default subscription APN */
str = nm_setting_gsm_get_apn (setting);
- if (str)
- mm_simple_connect_properties_set_apn (properties, str);
+ mm_simple_connect_properties_set_apn (properties, str ? str : "");
str = nm_setting_gsm_get_network_id (setting);
if (str)
@@ -309,6 +329,22 @@ create_gsm_connect_properties (NMConnection *connection)
mm_simple_connect_properties_set_allowed_auth (properties, allowed_auth);
}
+ /* Determine IP types to use when connecting */
+ ip_type = nm_modem_get_connection_ip_type (modem, connection, error);
+ if (ip_type == NM_MODEM_IP_TYPE_UNKNOWN) {
+ g_object_unref (properties);
+ return NULL;
+ }
+
+ if (ip_type == NM_MODEM_IP_TYPE_IPV4)
+ mm_simple_connect_properties_set_ip_type (properties, MM_BEARER_IP_FAMILY_IPV4);
+ else if (ip_type == NM_MODEM_IP_TYPE_IPV6)
+ mm_simple_connect_properties_set_ip_type (properties, MM_BEARER_IP_FAMILY_IPV6);
+ else if (ip_type == NM_MODEM_IP_TYPE_IPV4V6)
+ mm_simple_connect_properties_set_ip_type (properties, MM_BEARER_IP_FAMILY_IPV4V6);
+ else
+ g_assert_not_reached ();
+
return properties;
}
@@ -319,17 +355,29 @@ act_stage1_prepare (NMModem *_self,
{
NMModemBroadband *self = NM_MODEM_BROADBAND (_self);
MMModemCapability caps;
+ GError *error = NULL;
g_clear_object (&self->priv->connect_properties);
caps = mm_modem_get_current_capabilities (self->priv->modem_iface);
if (MODEM_CAPS_3GPP (caps))
- self->priv->connect_properties = create_gsm_connect_properties (connection);
+ self->priv->connect_properties = create_gsm_connect_properties (_self, connection, &error);
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)));
+ *reason = NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED;
+ return NM_ACT_STAGE_RETURN_FAILURE;
+ }
+
+ if (error) {
+ nm_log_warn (LOGD_MB, "(%s): Failed to connect '%s': %s",
+ nm_modem_get_uid (NM_MODEM (self)),
+ nm_connection_get_id (connection),
+ error->message);
+ g_clear_error (&error);
+ *reason = NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED;
return NM_ACT_STAGE_RETURN_FAILURE;
}
@@ -400,14 +448,14 @@ complete_connection (NMModem *_self,
{
NMModemBroadband *self = NM_MODEM_BROADBAND (_self);
MMModemCapability modem_caps;
- NMSettingPPP *s_ppp;
+ NMSettingPpp *s_ppp;
modem_caps = mm_modem_get_current_capabilities (self->priv->modem_iface);
/* PPP settings common to 3GPP and 3GPP2 */
s_ppp = nm_connection_get_setting_ppp (connection);
if (!s_ppp) {
- s_ppp = (NMSettingPPP *) nm_setting_ppp_new ();
+ 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,
@@ -419,12 +467,13 @@ complete_connection (NMModem *_self,
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 */
+ if (!s_gsm) {
+ /* Need a GSM setting at least */
g_set_error_literal (error,
- NM_SETTING_GSM_ERROR,
- NM_SETTING_GSM_ERROR_MISSING_PROPERTY,
- NM_SETTING_GSM_APN);
+ NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_MISSING_SETTING,
+ _("GSM mobile broadband connection requires a 'gsm' setting"));
+ g_prefix_error (error, "%s: ", NM_SETTING_GSM_SETTING_NAME);
return FALSE;
}
@@ -435,7 +484,8 @@ complete_connection (NMModem *_self,
nm_utils_complete_generic (connection,
NM_SETTING_GSM_SETTING_NAME,
existing_connections,
- _("GSM connection %d"),
+ NULL,
+ _("GSM connection"),
NULL,
FALSE); /* No IPv6 yet by default */
@@ -457,7 +507,8 @@ complete_connection (NMModem *_self,
nm_utils_complete_generic (connection,
NM_SETTING_CDMA_SETTING_NAME,
existing_connections,
- _("CDMA connection %d"),
+ NULL,
+ _("CDMA connection"),
NULL,
FALSE); /* No IPv6 yet by default */
@@ -465,8 +516,8 @@ complete_connection (NMModem *_self,
}
g_set_error (error,
- NM_MODEM_ERROR,
- NM_MODEM_ERROR_CONNECTION_INCOMPATIBLE,
+ NM_DEVICE_ERROR,
+ NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION,
"Device is not a mobile broadband modem");
return FALSE;
}
@@ -590,11 +641,10 @@ set_mm_enabled (NMModem *_self,
}
/*****************************************************************************/
-/* IP method static */
+/* IPv4 method static */
static gboolean
-ip_string_to_network_address (const gchar *str,
- guint32 *out)
+ip4_string_to_num (const gchar *str, guint32 *out)
{
guint32 addr = 0;
gboolean success = FALSE;
@@ -609,7 +659,7 @@ ip_string_to_network_address (const gchar *str,
}
static gboolean
-static_stage3_done (NMModemBroadband *self)
+static_stage3_ip4_done (NMModemBroadband *self)
{
GError *error = NULL;
NMIP4Config *config = NULL;
@@ -628,9 +678,9 @@ 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_ERROR,
- NM_MODEM_ERROR_CONNECTION_INVALID,
+ if (!ip4_string_to_num (address_string, &address_network)) {
+ error = g_error_new (NM_DEVICE_ERROR,
+ NM_DEVICE_ERROR_INVALID_CONNECTION,
"(%s) retrieving IP4 configuration failed: invalid address given '%s'",
nm_modem_get_uid (NM_MODEM (self)),
address_string);
@@ -639,14 +689,14 @@ static_stage3_done (NMModemBroadband *self)
/* 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);
+ ip4_string_to_num (gw_string, &gw);
config = nm_ip4_config_new ();
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;
+ address.source = NM_IP_CONFIG_SOURCE_WWAN;
nm_ip4_config_add_address (config, &address);
nm_log_info (LOGD_MB, " address %s/%d", address_string, address.plen);
@@ -659,7 +709,7 @@ static_stage3_done (NMModemBroadband *self)
/* DNS servers */
dns = mm_bearer_ip_config_get_dns (self->priv->ipv4_config);
for (i = 0; dns[i]; i++) {
- if ( ip_string_to_network_address (dns[i], &address_network)
+ if ( ip4_string_to_num (dns[i], &address_network)
&& address_network > 0) {
nm_ip4_config_add_nameserver (config, address_network);
nm_log_info (LOGD_MB, " DNS %s", dns[i]);
@@ -681,7 +731,110 @@ static_stage3_ip4_config_start (NMModem *_self,
/* We schedule it in an idle just to follow the same logic as in the
* generic modem implementation. */
- g_idle_add ((GSourceFunc)static_stage3_done, self);
+ g_idle_add ((GSourceFunc) static_stage3_ip4_done, self);
+
+ return NM_ACT_STAGE_RETURN_POSTPONE;
+}
+
+/*****************************************************************************/
+/* IPv6 method static */
+
+static gboolean
+stage3_ip6_done (NMModemBroadband *self)
+{
+ GError *error = NULL;
+ NMIP6Config *config = NULL;
+ const gchar *address_string;
+ NMPlatformIP6Address address;
+ NMModemIPMethod ip_method;
+ const gchar **dns;
+ guint i;
+
+ g_assert (self->priv->ipv6_config);
+
+ memset (&address, 0, sizeof (address));
+
+ ip_method = get_bearer_ip_method (self->priv->ipv6_config);
+
+ address_string = mm_bearer_ip_config_get_address (self->priv->ipv6_config);
+ if (!address_string) {
+ /* DHCP/SLAAC is allowed to skip addresses; other methods require it */
+ if (ip_method != NM_MODEM_IP_METHOD_AUTO) {
+ error = g_error_new (NM_DEVICE_ERROR,
+ NM_DEVICE_ERROR_INVALID_CONNECTION,
+ "(%s) retrieving IPv6 configuration failed: no address given",
+ nm_modem_get_uid (NM_MODEM (self)));
+ }
+ goto out;
+ }
+
+ /* Fail if invalid IP address retrieved */
+ if (!inet_pton (AF_INET6, address_string, (void *) &(address.address))) {
+ error = g_error_new (NM_DEVICE_ERROR,
+ NM_DEVICE_ERROR_INVALID_CONNECTION,
+ "(%s) retrieving IPv6 configuration failed: invalid address given '%s'",
+ nm_modem_get_uid (NM_MODEM (self)),
+ address_string);
+ goto out;
+ }
+
+ nm_log_info (LOGD_MB, "(%s): IPv6 base configuration:",
+ nm_modem_get_uid (NM_MODEM (self)));
+
+ config = nm_ip6_config_new ();
+
+ address.plen = mm_bearer_ip_config_get_prefix (self->priv->ipv6_config);
+ nm_ip6_config_add_address (config, &address);
+
+ nm_log_info (LOGD_MB, " address %s/%d", address_string, address.plen);
+
+ address_string = mm_bearer_ip_config_get_gateway (self->priv->ipv6_config);
+ if (address_string) {
+ if (!inet_pton (AF_INET6, address_string, (void *) &(address.address))) {
+ error = g_error_new (NM_DEVICE_ERROR,
+ NM_DEVICE_ERROR_INVALID_CONNECTION,
+ "(%s) retrieving IPv6 configuration failed: invalid gateway given '%s'",
+ nm_modem_get_uid (NM_MODEM (self)),
+ address_string);
+ goto out;
+ }
+ nm_log_info (LOGD_MB, " gateway %s", address_string);
+ nm_ip6_config_set_gateway (config, &address.address);
+ } else if (ip_method == NM_MODEM_IP_METHOD_STATIC) {
+ /* Gateway required for the 'static' method */
+ error = g_error_new (NM_DEVICE_ERROR,
+ NM_DEVICE_ERROR_INVALID_CONNECTION,
+ "(%s) retrieving IPv6 configuration failed: missing gateway",
+ nm_modem_get_uid (NM_MODEM (self)));
+ goto out;
+ }
+
+ /* DNS servers */
+ dns = mm_bearer_ip_config_get_dns (self->priv->ipv6_config);
+ for (i = 0; dns[i]; i++) {
+ struct in6_addr addr;
+
+ if (inet_pton (AF_INET6, dns[i], &addr)) {
+ nm_ip6_config_add_nameserver (config, &addr);
+ nm_log_info (LOGD_MB, " DNS %s", dns[i]);
+ }
+ }
+
+out:
+ nm_modem_emit_ip6_config_result (NM_MODEM (self), config, error);
+ g_clear_object (&config);
+ g_clear_error (&error);
+ return FALSE;
+}
+
+static NMActStageReturn
+stage3_ip6_config_request (NMModem *_self, NMDeviceStateReason *reason)
+{
+ NMModemBroadband *self = NM_MODEM_BROADBAND (_self);
+
+ /* We schedule it in an idle just to follow the same logic as in the
+ * generic modem implementation. */
+ g_idle_add ((GSourceFunc) stage3_ip6_done, self);
return NM_ACT_STAGE_RETURN_POSTPONE;
}
@@ -720,11 +873,15 @@ simple_disconnect_ready (MMModemSimple *modem_iface,
}
static void
-disconnect (NMModem *self,
+disconnect (NMModem *modem,
gboolean warn)
{
+ NMModemBroadband *self = NM_MODEM_BROADBAND (modem);
SimpleDisconnectContext *ctx;
+ if (!self->priv->simple_iface)
+ return;
+
ctx = g_slice_new (SimpleDisconnectContext);
ctx->self = g_object_ref (self);
@@ -806,6 +963,21 @@ modem_state_changed (MMModem *modem,
/*****************************************************************************/
+static NMModemIPType
+mm_ip_family_to_nm (MMBearerIpFamily family)
+{
+ NMModemIPType nm_type = NM_MODEM_IP_TYPE_UNKNOWN;
+
+ if (family & MM_BEARER_IP_FAMILY_IPV4)
+ nm_type |= NM_MODEM_IP_TYPE_IPV4;
+ if (family & MM_BEARER_IP_FAMILY_IPV6)
+ nm_type |= NM_MODEM_IP_TYPE_IPV6;
+ if (family & MM_BEARER_IP_FAMILY_IPV4V6)
+ nm_type |= MM_BEARER_IP_FAMILY_IPV4V6;
+
+ return nm_type;
+}
+
NMModem *
nm_modem_broadband_new (GObject *object, GError **error)
{
@@ -830,6 +1002,7 @@ nm_modem_broadband_new (GObject *object, GError **error)
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_IP_TYPES, mm_ip_family_to_nm (mm_modem_get_supported_ip_families (modem_iface)),
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,
@@ -967,6 +1140,7 @@ nm_modem_broadband_class_init (NMModemBroadbandClass *klass)
modem_class->get_capabilities = get_capabilities;
modem_class->static_stage3_ip4_config_start = static_stage3_ip4_config_start;
+ modem_class->stage3_ip6_config_request = stage3_ip6_config_request;
modem_class->disconnect = disconnect;
modem_class->deactivate = deactivate;
modem_class->set_mm_enabled = set_mm_enabled;
@@ -979,9 +1153,8 @@ nm_modem_broadband_class_init (NMModemBroadbandClass *klass)
/* Properties */
g_object_class_install_property
(object_class, PROP_MODEM,
- g_param_spec_object (NM_MODEM_BROADBAND_MODEM,
- "Modem",
- "Broadband modem object",
+ g_param_spec_object (NM_MODEM_BROADBAND_MODEM, "", "",
MM_GDBUS_TYPE_OBJECT,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
}
diff --git a/src/devices/wwan/nm-modem-broadband.h b/src/devices/wwan/nm-modem-broadband.h
index e12ca68ca..2268bac44 100644
--- a/src/devices/wwan/nm-modem-broadband.h
+++ b/src/devices/wwan/nm-modem-broadband.h
@@ -18,10 +18,9 @@
* Copyright (C) 2012 - Aleksander Morgado <aleksander@gnu.org>
*/
-#ifndef NM_MODEM_BROADBAND_H
-#define NM_MODEM_BROADBAND_H
+#ifndef __NETWORKMANAGER_MODEM_BROADBAND_H__
+#define __NETWORKMANAGER_MODEM_BROADBAND_H__
-#include <dbus/dbus-glib.h>
#include <glib-object.h>
#include "nm-modem.h"
@@ -55,4 +54,4 @@ NMModem *nm_modem_broadband_new (GObject *object, GError **error);
G_END_DECLS
-#endif /* NM_MODEM_BROADBAND_H */
+#endif /* __NETWORKMANAGER_MODEM_BROADBAND_H__ */
diff --git a/src/devices/wwan/nm-modem-enum-types.c b/src/devices/wwan/nm-modem-enum-types.c
index cf59ba2b9..6fbb3b6df 100644
--- a/src/devices/wwan/nm-modem-enum-types.c
+++ b/src/devices/wwan/nm-modem-enum-types.c
@@ -8,22 +8,42 @@
#include "nm-modem.h"
GType
-nm_modem_error_get_type (void)
+nm_modem_ip_method_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" },
+ { NM_MODEM_IP_METHOD_UNKNOWN, "NM_MODEM_IP_METHOD_UNKNOWN", "unknown" },
+ { NM_MODEM_IP_METHOD_PPP, "NM_MODEM_IP_METHOD_PPP", "ppp" },
+ { NM_MODEM_IP_METHOD_STATIC, "NM_MODEM_IP_METHOD_STATIC", "static" },
+ { NM_MODEM_IP_METHOD_AUTO, "NM_MODEM_IP_METHOD_AUTO", "auto" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMModemError"), values);
+ g_enum_register_static (g_intern_static_string ("NMModemIPMethod"), values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+GType
+nm_modem_ip_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_IP_TYPE_UNKNOWN, "NM_MODEM_IP_TYPE_UNKNOWN", "unknown" },
+ { NM_MODEM_IP_TYPE_IPV4, "NM_MODEM_IP_TYPE_IPV4", "ipv4" },
+ { NM_MODEM_IP_TYPE_IPV6, "NM_MODEM_IP_TYPE_IPV6", "ipv6" },
+ { NM_MODEM_IP_TYPE_IPV4V6, "NM_MODEM_IP_TYPE_IPV4V6", "ipv4v6" },
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id =
+ g_enum_register_static (g_intern_static_string ("NMModemIPType"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
diff --git a/src/devices/wwan/nm-modem-enum-types.h b/src/devices/wwan/nm-modem-enum-types.h
index 81ccd8d2f..ccbe6201a 100644
--- a/src/devices/wwan/nm-modem-enum-types.h
+++ b/src/devices/wwan/nm-modem-enum-types.h
@@ -9,8 +9,10 @@
#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_ip_method_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_MODEM_IP_METHOD (nm_modem_ip_method_get_type ())
+GType nm_modem_ip_type_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_MODEM_IP_TYPE (nm_modem_ip_type_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
diff --git a/src/devices/wwan/nm-modem-manager.c b/src/devices/wwan/nm-modem-manager.c
index c48117004..f0e569265 100644
--- a/src/devices/wwan/nm-modem-manager.c
+++ b/src/devices/wwan/nm-modem-manager.c
@@ -20,42 +20,28 @@
* Copyright (C) 2009 Canonical Ltd.
*/
-#include <string.h>
#include "config.h"
+
+#include <string.h>
+
+#include <libmm-glib.h>
+
#include "nm-modem-manager.h"
#include "nm-logging.h"
#include "nm-modem.h"
-#include "nm-modem-old.h"
-#include "nm-dbus-manager.h"
-#include "nm-modem-old-types.h"
-#include "nm-dbus-glib-types.h"
-
-#if WITH_MODEM_MANAGER_1
-#include <libmm-glib.h>
#include "nm-modem-broadband.h"
-#endif
#define MODEM_POKE_INTERVAL 120
G_DEFINE_TYPE (NMModemManager, nm_modem_manager, G_TYPE_OBJECT)
struct _NMModemManagerPrivate {
- /* ModemManager < 0.7 */
- NMDBusManager *dbus_mgr;
- DBusGProxy *proxy;
- guint poke_id;
-
-#if WITH_MODEM_MANAGER_1
- /* ModemManager >= 0.7 */
GDBusConnection *dbus_connection;
- MMManager *modem_manager_1;
- guint modem_manager_1_launch_id;
- gboolean old_modem_manager_found;
- gboolean new_modem_manager_found;
- guint modem_manager_1_name_owner_changed_id;
- guint modem_manager_1_object_added_id;
- guint modem_manager_1_object_removed_id;
-#endif
+ MMManager *modem_manager;
+ guint mm_launch_id;
+ guint mm_name_owner_changed_id;
+ guint mm_object_added_id;
+ guint mm_object_removed_id;
/* Common */
GHashTable *modems;
@@ -85,191 +71,6 @@ handle_new_modem (NMModemManager *self, NMModem *modem)
g_signal_emit (self, signals[MODEM_ADDED], 0, modem);
}
-/************************************************************************/
-/* Support for ModemManager < 0.7 */
-
-static void
-clear_modem_manager_support (NMModemManager *self)
-{
- if (self->priv->poke_id) {
- g_source_remove (self->priv->poke_id);
- self->priv->poke_id = 0;
- }
-
- if (self->priv->proxy) {
- g_object_unref (self->priv->proxy);
- self->priv->proxy = NULL;
- }
-}
-
-static void
-create_modem (NMModemManager *self, const char *path)
-{
- DBusGProxy *proxy;
- GError *error = NULL;
- NMModem *modem = NULL;
- 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;
- }
-
- 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_object_unref (proxy);
- g_clear_error (&error);
-}
-
-static void
-modem_added (DBusGProxy *proxy, const char *path, gpointer user_data)
-{
- create_modem (NM_MODEM_MANAGER (user_data), path);
-}
-
-static void
-modem_removed (DBusGProxy *proxy, const char *path, gpointer user_data)
-{
- NMModemManager *self = NM_MODEM_MANAGER (user_data);
- NMModem *modem;
-
- modem = (NMModem *) g_hash_table_lookup (self->priv->modems, path);
- if (modem) {
- nm_modem_emit_removed (modem);
- g_hash_table_remove (self->priv->modems, path);
- }
-}
-
-static void
-mm_poke_cb (DBusGProxy *proxy, DBusGProxyCall *call, gpointer user_data)
-{
- GPtrArray *modems;
- int i;
-
- if (dbus_g_proxy_end_call (proxy, call, NULL,
- DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH, &modems,
- G_TYPE_INVALID)) {
- /* Don't care about the returned value, just free it */
- for (i = 0; i < modems->len; i++)
- g_free ((char *) g_ptr_array_index (modems, i));
- g_ptr_array_free (modems, TRUE);
- }
- g_object_unref (proxy);
-}
-
-static gboolean
-poke_modem_cb (gpointer user_data)
-{
- NMModemManager *self = NM_MODEM_MANAGER (user_data);
- DBusGConnection *g_connection;
- DBusGProxy *proxy;
-
- 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);
-
- nm_log_dbg (LOGD_MB, "Requesting to (re)launch modem-manager...");
-
- dbus_g_proxy_begin_call_with_timeout (proxy,
- "EnumerateDevices",
- mm_poke_cb,
- NULL,
- NULL,
- 5000,
- G_TYPE_INVALID);
- return TRUE;
-}
-
-static void
-enumerate_devices_done (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer data)
-{
- NMModemManager *manager = NM_MODEM_MANAGER (data);
- GPtrArray *modems;
- GError *error = NULL;
-
- if (!dbus_g_proxy_end_call (proxy, call_id, &error,
- dbus_g_type_get_collection ("GPtrArray", DBUS_TYPE_G_OBJECT_PATH), &modems,
- G_TYPE_INVALID)) {
- nm_log_warn (LOGD_MB, "could not get modem list: %s", error->message);
- g_error_free (error);
- } else {
- int i;
-
- for (i = 0; i < modems->len; i++) {
- char *path = (char *) g_ptr_array_index (modems, i);
-
- create_modem (manager, path);
- g_free (path);
- }
-
- g_ptr_array_free (modems, TRUE);
- }
-}
-
-#if WITH_MODEM_MANAGER_1
-static void clear_modem_manager_1_support (NMModemManager *self);
-#endif
-
-static void
-modem_manager_appeared (NMModemManager *self, gboolean enumerate_devices)
-{
- if (self->priv->poke_id) {
- g_source_remove (self->priv->poke_id);
- self->priv->poke_id = 0;
- }
-
- nm_log_info (LOGD_MB, "modem-manager is now available");
-
-#if WITH_MODEM_MANAGER_1
- self->priv->old_modem_manager_found = TRUE;
- if (self->priv->new_modem_manager_found)
- nm_log_warn (LOGD_MB, "Both the old and the new ModemManager were found");
- else
- clear_modem_manager_1_support (self);
-#endif
-
- self->priv->proxy = dbus_g_proxy_new_for_name (nm_dbus_manager_get_connection (self->priv->dbus_mgr),
- MM_OLD_DBUS_SERVICE, MM_OLD_DBUS_PATH, MM_OLD_DBUS_INTERFACE);
-
- dbus_g_proxy_add_signal (self->priv->proxy, "DeviceAdded", DBUS_TYPE_G_OBJECT_PATH, G_TYPE_INVALID);
- dbus_g_proxy_connect_signal (self->priv->proxy, "DeviceAdded",
- G_CALLBACK (modem_added), self,
- NULL);
-
- dbus_g_proxy_add_signal (self->priv->proxy, "DeviceRemoved", DBUS_TYPE_G_OBJECT_PATH, G_TYPE_INVALID);
- dbus_g_proxy_connect_signal (self->priv->proxy, "DeviceRemoved",
- G_CALLBACK (modem_removed), self,
- NULL);
-
- if (enumerate_devices)
- dbus_g_proxy_begin_call (self->priv->proxy, "EnumerateDevices", enumerate_devices_done, self, NULL, G_TYPE_INVALID);
-}
-
static gboolean
remove_one_modem (gpointer key, gpointer value, gpointer user_data)
{
@@ -278,93 +79,34 @@ remove_one_modem (gpointer key, gpointer value, gpointer user_data)
}
static void
-modem_manager_disappeared (NMModemManager *self)
+modem_manager_clear_signals (NMModemManager *self)
{
- g_hash_table_foreach_remove (self->priv->modems, remove_one_modem, self);
-
- if (self->priv->proxy) {
- g_object_unref (self->priv->proxy);
- self->priv->proxy = NULL;
- }
-
- /* Try to activate the modem-manager */
- nm_log_dbg (LOGD_MB, "trying to start the modem manager...");
- poke_modem_cb (self);
- self->priv->poke_id = g_timeout_add_seconds (MODEM_POKE_INTERVAL, poke_modem_cb, self);
-}
-
-static void
-nm_modem_manager_name_owner_changed (NMDBusManager *dbus_mgr,
- const char *name,
- const char *old_owner,
- const char *new_owner,
- gpointer user_data)
-{
- gboolean old_owner_good;
- gboolean new_owner_good;
-
- /* Can't handle the signal if its not from the modem service */
- if (strcmp (MM_OLD_DBUS_SERVICE, name) != 0)
+ if (!self->priv->modem_manager)
return;
- old_owner_good = (old_owner && strlen (old_owner));
- new_owner_good = (new_owner && strlen (new_owner));
-
- if (!old_owner_good && new_owner_good) {
- modem_manager_appeared (NM_MODEM_MANAGER (user_data), FALSE);
- } else if (old_owner_good && !new_owner_good) {
- nm_log_info (LOGD_MB, "the modem manager disappeared");
- modem_manager_disappeared (NM_MODEM_MANAGER (user_data));
- }
-}
-
-/************************************************************************/
-/* Support for ModemManager >= 0.7 */
-
-#if WITH_MODEM_MANAGER_1
-
-static void
-modem_manager_1_clear_signals (NMModemManager *self)
-{
- if (!self->priv->modem_manager_1)
- return;
-
- if (self->priv->modem_manager_1_name_owner_changed_id) {
- if (g_signal_handler_is_connected (self->priv->modem_manager_1,
- self->priv->modem_manager_1_name_owner_changed_id))
- g_signal_handler_disconnect (self->priv->modem_manager_1,
- self->priv->modem_manager_1_name_owner_changed_id);
- self->priv->modem_manager_1_name_owner_changed_id = 0;
- }
-
- if (self->priv->modem_manager_1_object_added_id) {
- if (g_signal_handler_is_connected (self->priv->modem_manager_1,
- self->priv->modem_manager_1_object_added_id))
- g_signal_handler_disconnect (self->priv->modem_manager_1,
- self->priv->modem_manager_1_object_added_id);
- self->priv->modem_manager_1_object_added_id = 0;
+ if (self->priv->mm_name_owner_changed_id) {
+ if (g_signal_handler_is_connected (self->priv->modem_manager,
+ self->priv->mm_name_owner_changed_id))
+ g_signal_handler_disconnect (self->priv->modem_manager,
+ self->priv->mm_name_owner_changed_id);
+ self->priv->mm_name_owner_changed_id = 0;
}
- if (self->priv->modem_manager_1_object_removed_id) {
- if (g_signal_handler_is_connected (self->priv->modem_manager_1,
- self->priv->modem_manager_1_object_removed_id))
- g_signal_handler_disconnect (self->priv->modem_manager_1,
- self->priv->modem_manager_1_object_removed_id);
- self->priv->modem_manager_1_object_removed_id = 0;
+ if (self->priv->mm_object_added_id) {
+ if (g_signal_handler_is_connected (self->priv->modem_manager,
+ self->priv->mm_object_added_id))
+ g_signal_handler_disconnect (self->priv->modem_manager,
+ self->priv->mm_object_added_id);
+ self->priv->mm_object_added_id = 0;
}
-}
-static void
-clear_modem_manager_1_support (NMModemManager *self)
-{
- if (self->priv->modem_manager_1_launch_id) {
- g_source_remove (self->priv->modem_manager_1_launch_id);
- self->priv->modem_manager_1_launch_id = 0;
+ if (self->priv->mm_object_removed_id) {
+ if (g_signal_handler_is_connected (self->priv->modem_manager,
+ self->priv->mm_object_removed_id))
+ g_signal_handler_disconnect (self->priv->modem_manager,
+ self->priv->mm_object_removed_id);
+ self->priv->mm_object_removed_id = 0;
}
-
- modem_manager_1_clear_signals (self);
- g_clear_object (&self->priv->modem_manager_1);
- g_clear_object (&self->priv->dbus_connection);
}
static void
@@ -426,49 +168,43 @@ modem_object_removed (MMManager *manager,
}
static void
-modem_manager_1_available (NMModemManager *self)
+modem_manager_available (NMModemManager *self)
{
GList *modems, *l;
nm_log_info (LOGD_MB, "ModemManager available in the bus");
- self->priv->new_modem_manager_found = TRUE;
- if (self->priv->old_modem_manager_found)
- nm_log_warn (LOGD_MB, "Both the old and the new ModemManager were found");
- else
- clear_modem_manager_support (self);
-
/* Update initial modems list */
- modems = g_dbus_object_manager_get_objects (G_DBUS_OBJECT_MANAGER (self->priv->modem_manager_1));
- for (l = modems; l; l = g_list_next (l))
- modem_object_added (self->priv->modem_manager_1, MM_OBJECT (l->data), self);
- g_list_free_full (modems, (GDestroyNotify) g_object_unref);
+ modems = g_dbus_object_manager_get_objects (G_DBUS_OBJECT_MANAGER (self->priv->modem_manager));
+ for (l = modems; l; l = g_list_next (l))
+ modem_object_added (self->priv->modem_manager, MM_OBJECT (l->data), self);
+ g_list_free_full (modems, (GDestroyNotify) g_object_unref);
}
-static void schedule_modem_manager_1_relaunch (NMModemManager *self,
- guint n_seconds);
-static void ensure_client (NMModemManager *self);
+static void schedule_modem_manager_relaunch (NMModemManager *self,
+ guint n_seconds);
+static void ensure_client (NMModemManager *self);
static void
-modem_manager_1_name_owner_changed (MMManager *modem_manager_1,
- GParamSpec *pspec,
- NMModemManager *self)
+modem_manager_name_owner_changed (MMManager *modem_manager,
+ GParamSpec *pspec,
+ NMModemManager *self)
{
gchar *name_owner;
/* Quit poking, if any */
- if (self->priv->modem_manager_1_launch_id) {
- g_source_remove (self->priv->modem_manager_1_launch_id);
- self->priv->modem_manager_1_launch_id = 0;
+ if (self->priv->mm_launch_id) {
+ g_source_remove (self->priv->mm_launch_id);
+ self->priv->mm_launch_id = 0;
}
- name_owner = g_dbus_object_manager_client_get_name_owner (G_DBUS_OBJECT_MANAGER_CLIENT (modem_manager_1));
+ name_owner = g_dbus_object_manager_client_get_name_owner (G_DBUS_OBJECT_MANAGER_CLIENT (modem_manager));
if (!name_owner) {
nm_log_info (LOGD_MB, "ModemManager disappeared from bus");
#if !HAVE_SYSTEMD
/* If not managed by systemd, schedule relaunch */
- schedule_modem_manager_1_relaunch (self, 0);
+ schedule_modem_manager_relaunch (self, 0);
#endif
return;
@@ -481,21 +217,21 @@ modem_manager_1_name_owner_changed (MMManager *modem_manager_1,
* nor 'object-removed' if it was created while there was no ModemManager in
* the bus. This hack avoids this issue until we get a GIO with the fix
* included... */
- modem_manager_1_clear_signals (self);
- g_clear_object (&self->priv->modem_manager_1);
+ modem_manager_clear_signals (self);
+ g_clear_object (&self->priv->modem_manager);
ensure_client (self);
/* Whenever GDBusObjectManagerClient is fixed, we can just do the following:
- * modem_manager_1_available (self);
+ * modem_manager_available (self);
*/
}
#if !HAVE_SYSTEMD
static void
-modem_manager_1_poke_cb (GDBusConnection *connection,
- GAsyncResult *res,
- NMModemManager *self)
+modem_manager_poke_cb (GDBusConnection *connection,
+ GAsyncResult *res,
+ NMModemManager *self)
{
GError *error = NULL;
GVariant *result;
@@ -514,7 +250,7 @@ modem_manager_1_poke_cb (GDBusConnection *connection,
g_error_free (error);
/* Setup timeout to relaunch */
- schedule_modem_manager_1_relaunch (self, MODEM_POKE_INTERVAL);
+ schedule_modem_manager_relaunch (self, MODEM_POKE_INTERVAL);
} else
g_variant_unref (result);
@@ -523,7 +259,7 @@ modem_manager_1_poke_cb (GDBusConnection *connection,
}
static void
-modem_manager_1_poke (NMModemManager *self)
+modem_manager_poke (NMModemManager *self)
{
/* If there is no current owner right away, ensure we poke to get one */
g_dbus_connection_call (self->priv->dbus_connection,
@@ -536,28 +272,28 @@ modem_manager_1_poke (NMModemManager *self)
G_DBUS_CALL_FLAGS_NONE,
-1,
NULL, /* cancellable */
- (GAsyncReadyCallback)modem_manager_1_poke_cb, /* callback */
+ (GAsyncReadyCallback)modem_manager_poke_cb, /* callback */
g_object_ref (self)); /* user_data */
}
#endif /* HAVE_SYSTEMD */
static void
-modem_manager_1_check_name_owner (NMModemManager *self)
+modem_manager_check_name_owner (NMModemManager *self)
{
gchar *name_owner;
- name_owner = g_dbus_object_manager_client_get_name_owner (G_DBUS_OBJECT_MANAGER_CLIENT (self->priv->modem_manager_1));
+ name_owner = g_dbus_object_manager_client_get_name_owner (G_DBUS_OBJECT_MANAGER_CLIENT (self->priv->modem_manager));
if (name_owner) {
/* Available! */
- modem_manager_1_available (self);
+ modem_manager_available (self);
g_free (name_owner);
return;
}
#if !HAVE_SYSTEMD
/* If the lifecycle is not managed by systemd, poke */
- modem_manager_1_poke (self);
+ modem_manager_poke (self);
#endif
}
@@ -570,38 +306,35 @@ manager_new_ready (GObject *source,
GError *error = NULL;
- g_assert (!self->priv->modem_manager_1);
- self->priv->modem_manager_1 = mm_manager_new_finish (res, &error);
- if (!self->priv->modem_manager_1) {
+ g_assert (!self->priv->modem_manager);
+ self->priv->modem_manager = mm_manager_new_finish (res, &error);
+ if (!self->priv->modem_manager) {
/* We're not really supposed to get any error here. If we do get one,
* though, just re-schedule the MMManager creation after some time.
* During this period, name-owner changes won't be followed. */
nm_log_warn (LOGD_MB, "error creating ModemManager client: %s", error->message);
g_error_free (error);
/* Setup timeout to relaunch */
- schedule_modem_manager_1_relaunch (self, MODEM_POKE_INTERVAL);
- } else if (self->priv->old_modem_manager_found) {
- /* If we found the old MM, abort */
- clear_modem_manager_1_support (self);
+ schedule_modem_manager_relaunch (self, MODEM_POKE_INTERVAL);
} else {
/* Setup signals in the GDBusObjectManagerClient */
- self->priv->modem_manager_1_name_owner_changed_id =
- g_signal_connect (self->priv->modem_manager_1,
+ self->priv->mm_name_owner_changed_id =
+ g_signal_connect (self->priv->modem_manager,
"notify::name-owner",
- G_CALLBACK (modem_manager_1_name_owner_changed),
+ G_CALLBACK (modem_manager_name_owner_changed),
self);
- self->priv->modem_manager_1_object_added_id =
- g_signal_connect (self->priv->modem_manager_1,
+ self->priv->mm_object_added_id =
+ g_signal_connect (self->priv->modem_manager,
"object-added",
G_CALLBACK (modem_object_added),
self);
- self->priv->modem_manager_1_object_removed_id =
- g_signal_connect (self->priv->modem_manager_1,
+ self->priv->mm_object_removed_id =
+ g_signal_connect (self->priv->modem_manager,
"object-removed",
G_CALLBACK (modem_object_removed),
self);
- modem_manager_1_check_name_owner (self);
+ modem_manager_check_name_owner (self);
}
/* Balance refcount */
@@ -616,7 +349,7 @@ ensure_client (NMModemManager *self)
/* Create the GDBusObjectManagerClient. We do not request to autostart, as
* we don't really want the MMManager creation to fail. We can always poke
* later on if we want to request the autostart */
- if (!self->priv->modem_manager_1) {
+ if (!self->priv->modem_manager) {
mm_manager_new (self->priv->dbus_connection,
G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_DO_NOT_AUTO_START,
NULL,
@@ -626,7 +359,7 @@ ensure_client (NMModemManager *self)
}
/* If already available, recheck name owner! */
- modem_manager_1_check_name_owner (self);
+ modem_manager_check_name_owner (self);
}
static void
@@ -643,10 +376,7 @@ bus_get_ready (GObject *source,
nm_log_warn (LOGD_CORE, "error getting bus connection: %s", error->message);
g_error_free (error);
/* Setup timeout to relaunch */
- schedule_modem_manager_1_relaunch (self, MODEM_POKE_INTERVAL);
- } else if (self->priv->old_modem_manager_found) {
- /* If we found the old MM, abort */
- clear_modem_manager_1_support (self);
+ schedule_modem_manager_relaunch (self, MODEM_POKE_INTERVAL);
} else {
/* Got the bus, ensure client */
ensure_client (self);
@@ -660,7 +390,7 @@ static gboolean
ensure_bus (NMModemManager *self)
{
/* Clear launch ID */
- self->priv->modem_manager_1_launch_id = 0;
+ self->priv->mm_launch_id = 0;
if (!self->priv->dbus_connection)
g_bus_get (G_BUS_TYPE_SYSTEM,
@@ -675,20 +405,18 @@ ensure_bus (NMModemManager *self)
}
static void
-schedule_modem_manager_1_relaunch (NMModemManager *self,
- guint n_seconds)
+schedule_modem_manager_relaunch (NMModemManager *self,
+ guint n_seconds)
{
/* No need to pass an extra reference to self; timeout/idle will be
* cancelled if the object gets disposed. */
if (n_seconds)
- self->priv->modem_manager_1_launch_id = g_timeout_add_seconds (n_seconds, (GSourceFunc)ensure_bus, self);
+ self->priv->mm_launch_id = g_timeout_add_seconds (n_seconds, (GSourceFunc)ensure_bus, self);
else
- self->priv->modem_manager_1_launch_id = g_idle_add ((GSourceFunc)ensure_bus, self);
+ self->priv->mm_launch_id = g_idle_add ((GSourceFunc)ensure_bus, self);
}
-#endif /* WITH_MODEM_MANAGER_1 */
-
/************************************************************************/
static void
@@ -698,20 +426,7 @@ nm_modem_manager_init (NMModemManager *self)
self->priv->modems = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
- /* ModemManager < 0.7 */
- self->priv->dbus_mgr = nm_dbus_manager_get ();
- g_signal_connect (self->priv->dbus_mgr, NM_DBUS_MANAGER_NAME_OWNER_CHANGED,
- G_CALLBACK (nm_modem_manager_name_owner_changed),
- self);
- if (nm_dbus_manager_name_has_owner (self->priv->dbus_mgr, MM_OLD_DBUS_SERVICE))
- modem_manager_appeared (self, TRUE);
- else
- modem_manager_disappeared (self);
-
-#if WITH_MODEM_MANAGER_1
- /* ModemManager >= 0.7 */
- schedule_modem_manager_1_relaunch (self, 0);
-#endif
+ schedule_modem_manager_relaunch (self, 0);
}
static void
@@ -719,21 +434,20 @@ dispose (GObject *object)
{
NMModemManager *self = NM_MODEM_MANAGER (object);
- /* ModemManager < 0.7 */
- clear_modem_manager_support (self);
+ if (self->priv->mm_launch_id) {
+ g_source_remove (self->priv->mm_launch_id);
+ self->priv->mm_launch_id = 0;
+ }
-#if WITH_MODEM_MANAGER_1
- /* ModemManager >= 0.7 */
- clear_modem_manager_1_support (self);
-#endif
+ modem_manager_clear_signals (self);
+ g_clear_object (&self->priv->modem_manager);
+ g_clear_object (&self->priv->dbus_connection);
if (self->priv->modems) {
g_hash_table_foreach_remove (self->priv->modems, remove_one_modem, object);
g_hash_table_destroy (self->priv->modems);
}
- self->priv->dbus_mgr = NULL;
-
/* Chain up to the parent class */
G_OBJECT_CLASS (nm_modem_manager_parent_class)->dispose (object);
}
diff --git a/src/devices/wwan/nm-modem-manager.h b/src/devices/wwan/nm-modem-manager.h
index 3082bdb39..9e0db41e3 100644
--- a/src/devices/wwan/nm-modem-manager.h
+++ b/src/devices/wwan/nm-modem-manager.h
@@ -20,8 +20,8 @@
* Copyright (C) 2009 Canonical Ltd.
*/
-#ifndef NM_MODEM_MANAGER_H
-#define NM_MODEM_MANAGER_H
+#ifndef __NETWORKMANAGER_MODEM_MANAGER_H__
+#define __NETWORKMANAGER_MODEM_MANAGER_H__
#include <glib-object.h>
#include "nm-modem.h"
@@ -46,4 +46,4 @@ typedef struct {
GType nm_modem_manager_get_type (void);
-#endif /* NM_MODEM_MANAGER_H */
+#endif /* __NETWORKMANAGER_MODEM_MANAGER_H__ */
diff --git a/src/devices/wwan/nm-modem-old-types.h b/src/devices/wwan/nm-modem-old-types.h
deleted file mode 100644
index 84065a684..000000000
--- a/src/devices/wwan/nm-modem-old-types.h
+++ /dev/null
@@ -1,70 +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_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
deleted file mode 100644
index ce1a382e1..000000000
--- a/src/devices/wwan/nm-modem-old.c
+++ /dev/null
@@ -1,1139 +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 - 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
deleted file mode 100644
index 65e3db2d1..000000000
--- a/src/devices/wwan/nm-modem-old.h
+++ /dev/null
@@ -1,53 +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_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/devices/wwan/nm-modem.c b/src/devices/wwan/nm-modem.c
index fd3b4a369..ba1db8a4e 100644
--- a/src/devices/wwan/nm-modem.c
+++ b/src/devices/wwan/nm-modem.c
@@ -19,6 +19,8 @@
* Copyright (C) 2009 Novell, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include "nm-modem.h"
#include "nm-platform.h"
@@ -42,11 +44,13 @@ enum {
PROP_PATH,
PROP_UID,
PROP_DRIVER,
- PROP_IP_METHOD,
+ PROP_IP4_METHOD,
+ PROP_IP6_METHOD,
PROP_IP_TIMEOUT,
PROP_STATE,
PROP_DEVICE_ID,
PROP_SIM_ID,
+ PROP_IP_TYPES,
LAST_PROP
};
@@ -58,11 +62,14 @@ typedef struct {
char *control_port;
char *data_port;
char *ppp_iface;
- guint32 ip_method;
+ NMModemIPMethod ip4_method;
+ NMModemIPMethod ip6_method;
+ NMUtilsIPv6IfaceId iid;
NMModemState state;
NMModemState prev_state; /* revert to this state if enable/disable fails */
char *device_id;
char *sim_id;
+ NMModemIPType ip_types;
NMPPPManager *ppp_manager;
@@ -82,6 +89,7 @@ enum {
PPP_FAILED,
PREPARE_RESULT,
IP4_CONFIG_RESULT,
+ IP6_CONFIG_RESULT,
AUTH_REQUESTED,
AUTH_RESULT,
REMOVED,
@@ -94,17 +102,6 @@ static guint signals[LAST_SIGNAL] = { 0 };
/*****************************************************************************/
-
-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[] = {
@@ -126,7 +123,7 @@ static const char *state_table[] = {
const char *
nm_modem_state_to_string (NMModemState state)
{
- if (state >= 0 && state < G_N_ELEMENTS (state_table))
+ if ((gsize) state < G_N_ELEMENTS (state_table))
return state_table[state];
return NULL;
}
@@ -218,6 +215,102 @@ nm_modem_emit_removed (NMModem *self)
g_signal_emit (self, signals[REMOVED], 0);
}
+NMModemIPType
+nm_modem_get_supported_ip_types (NMModem *self)
+{
+ return NM_MODEM_GET_PRIVATE (self)->ip_types;
+}
+
+/**
+ * nm_modem_get_connection_ip_type:
+ * @self: the #NMModem
+ * @connection: the #NMConnection to determine IP type to use
+ *
+ * Given a modem and a connection, determine which NMModemIpType to use
+ * when connecting.
+ *
+ * Returns: a single %NMModemIpType value
+ */
+NMModemIPType
+nm_modem_get_connection_ip_type (NMModem *self,
+ NMConnection *connection,
+ GError **error)
+{
+ NMModemPrivate *priv = NM_MODEM_GET_PRIVATE (self);
+ NMSettingIPConfig *s_ip4, *s_ip6;
+ const char *method;
+ gboolean ip4 = TRUE, ip6 = TRUE;
+ gboolean ip4_may_fail = TRUE, ip6_may_fail = TRUE;
+
+ s_ip4 = nm_connection_get_setting_ip4_config (connection);
+ if (s_ip4) {
+ method = nm_setting_ip_config_get_method (s_ip4);
+ if (g_strcmp0 (method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED) == 0)
+ ip4 = FALSE;
+ ip4_may_fail = nm_setting_ip_config_get_may_fail (s_ip4);
+ }
+
+ s_ip6 = nm_connection_get_setting_ip6_config (connection);
+ if (s_ip6) {
+ method = nm_setting_ip_config_get_method (s_ip6);
+ if (g_strcmp0 (method, NM_SETTING_IP6_CONFIG_METHOD_IGNORE) == 0)
+ ip6 = FALSE;
+ ip6_may_fail = nm_setting_ip_config_get_may_fail (s_ip6);
+ }
+
+ if (ip4 && !ip6) {
+ if (!(priv->ip_types & NM_MODEM_IP_TYPE_IPV4)) {
+ g_set_error_literal (error,
+ NM_DEVICE_ERROR,
+ NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION,
+ "Connection requested IPv4 but IPv4 is "
+ "unsuported by the modem.");
+ return NM_MODEM_IP_TYPE_UNKNOWN;
+ }
+ return NM_MODEM_IP_TYPE_IPV4;
+ }
+
+ if (ip6 && !ip4) {
+ if (!(priv->ip_types & NM_MODEM_IP_TYPE_IPV6)) {
+ g_set_error_literal (error,
+ NM_DEVICE_ERROR,
+ NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION,
+ "Connection requested IPv6 but IPv6 is "
+ "unsuported by the modem.");
+ return NM_MODEM_IP_TYPE_UNKNOWN;
+ }
+ return NM_MODEM_IP_TYPE_IPV6;
+ }
+
+ if (ip4 && ip6) {
+ /* Modem supports dual-stack */
+ if (priv->ip_types & NM_MODEM_IP_TYPE_IPV4V6)
+ return NM_MODEM_IP_TYPE_IPV4V6;
+
+ /* Both IPv4 and IPv6 requested, but modem doesn't support dual-stack;
+ * if one method is marked "may-fail" then use the other.
+ */
+ if (ip6_may_fail)
+ return NM_MODEM_IP_TYPE_IPV4;
+ else if (ip4_may_fail)
+ return NM_MODEM_IP_TYPE_IPV6;
+
+ g_set_error_literal (error,
+ NM_DEVICE_ERROR,
+ NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION,
+ "Connection requested both IPv4 and IPv6 "
+ "but dual-stack addressing is unsupported "
+ "by the modem.");
+ return NM_MODEM_IP_TYPE_UNKNOWN;
+ }
+
+ g_set_error_literal (error,
+ NM_DEVICE_ERROR,
+ NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION,
+ "Connection specified no IP configuration!");
+ return NM_MODEM_IP_TYPE_UNKNOWN;
+}
+
/*****************************************************************************/
/* IP method PPP */
@@ -237,13 +330,24 @@ ppp_state_changed (NMPPPManager *ppp_manager, NMPPPStatus status, gpointer user_
}
static void
+set_data_port (NMModem *self, const char *new_data_port)
+{
+ NMModemPrivate *priv = NM_MODEM_GET_PRIVATE (self);
+
+ if (g_strcmp0 (priv->data_port, new_data_port) != 0) {
+ g_free (priv->data_port);
+ priv->data_port = g_strdup (new_data_port);
+ g_object_notify (G_OBJECT (self), NM_MODEM_DATA_PORT);
+ }
+}
+
+static void
ppp_ip4_config (NMPPPManager *ppp_manager,
const char *iface,
NMIP4Config *config,
gpointer user_data)
{
NMModem *self = NM_MODEM (user_data);
- NMModemPrivate *priv = NM_MODEM_GET_PRIVATE (self);
guint32 i, num;
guint32 bad_dns1 = htonl (0x0A0B0C0D);
guint32 good_dns1 = htonl (0x04020201); /* GTE nameserver */
@@ -252,9 +356,7 @@ ppp_ip4_config (NMPPPManager *ppp_manager,
gboolean dns_workaround = FALSE;
/* Notify about the new data port to use */
- g_free (priv->ppp_iface);
- priv->ppp_iface = g_strdup (iface);
- g_object_notify (G_OBJECT (self), NM_MODEM_DATA_PORT);
+ set_data_port (self, iface);
/* Work around a PPP bug (#1732) which causes many mobile broadband
* providers to return 10.11.12.13 and 10.11.12.14 for the DNS servers.
@@ -296,6 +398,23 @@ ppp_ip4_config (NMPPPManager *ppp_manager,
}
static void
+ppp_ip6_config (NMPPPManager *ppp_manager,
+ const char *iface,
+ const NMUtilsIPv6IfaceId *iid,
+ NMIP6Config *config,
+ gpointer user_data)
+{
+ NMModem *self = NM_MODEM (user_data);
+
+ /* Notify about the new data port to use */
+ set_data_port (self, iface);
+
+ NM_MODEM_GET_PRIVATE (self)->iid = *iid;
+
+ nm_modem_emit_ip6_config_result (self, config, NULL);
+}
+
+static void
ppp_stats (NMPPPManager *ppp_manager,
guint32 in_bytes,
guint32 out_bytes,
@@ -313,20 +432,27 @@ ppp_stats (NMPPPManager *ppp_manager,
}
static NMActStageReturn
-ppp_stage3_ip4_config_start (NMModem *self,
- NMActRequest *req,
- NMDeviceStateReason *reason)
+ppp_stage3_ip_config_start (NMModem *self,
+ NMActRequest *req,
+ NMDeviceStateReason *reason)
{
NMModemPrivate *priv = NM_MODEM_GET_PRIVATE (self);
const char *ppp_name = NULL;
GError *error = NULL;
NMActStageReturn ret;
- guint ip_timeout = 20;
+ guint ip_timeout = 30;
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);
+ /* If we're already running PPP don't restart it; for example, if both
+ * IPv4 and IPv6 are requested, IPv4 gets started first, but we use the
+ * same pppd for both v4 and v6.
+ */
+ if (priv->ppp_manager)
+ return NM_ACT_STAGE_RETURN_POSTPONE;
+
if (NM_MODEM_GET_CLASS (self)->get_user_pass) {
NMConnection *connection = nm_act_request_get_connection (req);
@@ -336,7 +462,7 @@ ppp_stage3_ip4_config_start (NMModem *self,
}
/* Check if ModemManager requested a specific IP timeout to be used. If 0 reported,
- * use the default one (20s) */
+ * use the default one (30s) */
if (priv->mm_ip_timeout > 0) {
nm_log_info (LOGD_PPP, "using modem-specified IP timeout: %u seconds",
priv->mm_ip_timeout);
@@ -351,6 +477,9 @@ ppp_stage3_ip4_config_start (NMModem *self,
g_signal_connect (priv->ppp_manager, "ip4-config",
G_CALLBACK (ppp_ip4_config),
self);
+ g_signal_connect (priv->ppp_manager, "ip6-config",
+ G_CALLBACK (ppp_ip6_config),
+ self);
g_signal_connect (priv->ppp_manager, "stats",
G_CALLBACK (ppp_stats),
self);
@@ -382,6 +511,8 @@ nm_modem_stage3_ip4_config_start (NMModem *self,
{
NMModemPrivate *priv;
NMActRequest *req;
+ NMConnection *connection;
+ const char *method;
NMActStageReturn ret;
g_return_val_if_fail (NM_IS_MODEM (self), NM_ACT_STAGE_RETURN_FAILURE);
@@ -391,21 +522,36 @@ nm_modem_stage3_ip4_config_start (NMModem *self,
req = nm_device_get_act_request (device);
g_assert (req);
+ connection = nm_act_request_get_connection (req);
+ g_assert (connection);
+ method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP4_CONFIG);
+
+ /* Only Disabled and Auto methods make sense for WWAN */
+ if (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED) == 0)
+ return NM_ACT_STAGE_RETURN_STOP;
+
+ if (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_AUTO) != 0) {
+ nm_log_warn (LOGD_MB | LOGD_IP4,
+ "(%s): unhandled WWAN IPv4 method '%s'; will fail",
+ nm_modem_get_uid (self), method);
+ *reason = NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE;
+ return NM_ACT_STAGE_RETURN_FAILURE;
+ }
priv = NM_MODEM_GET_PRIVATE (self);
- switch (priv->ip_method) {
- case MM_MODEM_IP_METHOD_PPP:
- ret = ppp_stage3_ip4_config_start (self, req, reason);
+ switch (priv->ip4_method) {
+ case NM_MODEM_IP_METHOD_PPP:
+ ret = ppp_stage3_ip_config_start (self, req, reason);
break;
- case MM_MODEM_IP_METHOD_STATIC:
+ case NM_MODEM_IP_METHOD_STATIC:
ret = NM_MODEM_GET_CLASS (self)->static_stage3_ip4_config_start (self, req, reason);
break;
- case MM_MODEM_IP_METHOD_DHCP:
+ case NM_MODEM_IP_METHOD_AUTO:
ret = device_class->act_stage3_ip4_config_start (device, NULL, reason);
break;
default:
- nm_log_err (LOGD_MB, "unknown IP method %d", priv->ip_method);
- ret = NM_ACT_STAGE_RETURN_FAILURE;
+ nm_log_info (LOGD_MB, "(%s): IPv4 configuration disabled", nm_modem_get_uid (self));
+ ret = NM_ACT_STAGE_RETURN_STOP;
break;
}
@@ -423,8 +569,8 @@ nm_modem_ip4_pre_commit (NMModem *modem,
* not point-to-point) and IP config has a /32 prefix, then we assume that
* ARP will be pointless and we turn it off.
*/
- if ( priv->ip_method == MM_MODEM_IP_METHOD_STATIC
- || priv->ip_method == MM_MODEM_IP_METHOD_DHCP) {
+ if ( priv->ip4_method == NM_MODEM_IP_METHOD_STATIC
+ || priv->ip4_method == NM_MODEM_IP_METHOD_AUTO) {
const NMPlatformIP4Address *address = nm_ip4_config_get_address (config, 0);
g_assert (address);
@@ -435,15 +581,100 @@ nm_modem_ip4_pre_commit (NMModem *modem,
/*****************************************************************************/
+void
+nm_modem_emit_ip6_config_result (NMModem *self,
+ NMIP6Config *config,
+ GError *error)
+{
+ NMModemPrivate *priv = NM_MODEM_GET_PRIVATE (self);
+ guint i, num;
+ gboolean do_slaac = TRUE;
+
+ if (error) {
+ g_signal_emit (self, signals[IP6_CONFIG_RESULT], 0, NULL, FALSE, error);
+ return;
+ }
+
+ if (config) {
+ /* If the IPv6 configuration only included a Link-Local address, then
+ * we have to run SLAAC to get the full IPv6 configuration.
+ */
+ num = nm_ip6_config_get_num_addresses (config);
+ g_assert (num > 0);
+ for (i = 0; i < num; i++) {
+ const NMPlatformIP6Address * addr = nm_ip6_config_get_address (config, i);
+
+ if (IN6_IS_ADDR_LINKLOCAL (&addr->address)) {
+ if (!priv->iid.id)
+ priv->iid.id = ((guint64 *)(&addr->address.s6_addr))[1];
+ } else
+ do_slaac = FALSE;
+ }
+ }
+ g_assert (config || do_slaac);
+
+ g_signal_emit (self, signals[IP6_CONFIG_RESULT], 0, config, do_slaac, NULL);
+}
+
+static NMActStageReturn
+stage3_ip6_config_request (NMModem *self, NMDeviceStateReason *reason)
+{
+ *reason = NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE;
+ return NM_ACT_STAGE_RETURN_FAILURE;
+}
+
NMActStageReturn
nm_modem_stage3_ip6_config_start (NMModem *self,
- NMDevice *device,
- NMDeviceClass *device_class,
+ NMActRequest *req,
NMDeviceStateReason *reason)
{
- /* FIXME: We don't support IPv6 on modems quite yet... */
- nm_device_activate_schedule_ip6_config_timeout (device);
- return NM_ACT_STAGE_RETURN_POSTPONE;
+ NMModemPrivate *priv;
+ NMActStageReturn ret;
+ NMConnection *connection;
+ const char *method;
+
+ 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);
+
+ connection = nm_act_request_get_connection (req);
+ g_assert (connection);
+ method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP6_CONFIG);
+
+ /* Only Ignore and Auto methods make sense for WWAN */
+ if (strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_IGNORE) == 0)
+ return NM_ACT_STAGE_RETURN_STOP;
+
+ if (strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_AUTO) != 0) {
+ nm_log_warn (LOGD_MB | LOGD_IP6,
+ "(%s): unhandled WWAN IPv6 method '%s'; will fail",
+ nm_modem_get_uid (self), method);
+ *reason = NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE;
+ return NM_ACT_STAGE_RETURN_FAILURE;
+ }
+
+ priv = NM_MODEM_GET_PRIVATE (self);
+ switch (priv->ip6_method) {
+ case NM_MODEM_IP_METHOD_PPP:
+ ret = ppp_stage3_ip_config_start (self, req, reason);
+ break;
+ case NM_MODEM_IP_METHOD_STATIC:
+ case NM_MODEM_IP_METHOD_AUTO:
+ /* Both static and DHCP/Auto retrieve a base IP config from the modem
+ * which in the static case is the full config, and the DHCP/Auto case
+ * is just the IPv6LL address to use for SLAAC.
+ */
+ ret = NM_MODEM_GET_CLASS (self)->stage3_ip6_config_request (self, reason);
+ break;
+ default:
+ nm_log_info (LOGD_MB, "(%s): IPv6 configuration disabled", nm_modem_get_uid (self));
+ ret = NM_ACT_STAGE_RETURN_STOP;
+ break;
+ }
+
+ return ret;
}
/*****************************************************************************/
@@ -486,12 +717,12 @@ nm_modem_get_secrets (NMModem *self,
const char *hint)
{
NMModemPrivate *priv = NM_MODEM_GET_PRIVATE (self);
- NMSettingsGetSecretsFlags flags = NM_SETTINGS_GET_SECRETS_FLAG_ALLOW_INTERACTION;
+ NMSecretAgentGetSecretsFlags flags = NM_SECRET_AGENT_GET_SECRETS_FLAG_ALLOW_INTERACTION;
cancel_get_secrets (self);
if (request_new)
- flags |= NM_SETTINGS_GET_SECRETS_FLAG_REQUEST_NEW;
+ flags |= NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW;
priv->secrets_id = nm_act_request_get_secrets (priv->act_request,
setting_name,
flags,
@@ -524,7 +755,7 @@ nm_modem_act_stage1_prepare (NMModem *self,
NMActStageReturn ret;
GPtrArray *hints = NULL;
const char *setting_name = NULL;
- NMSettingsGetSecretsFlags flags = NM_SETTINGS_GET_SECRETS_FLAG_ALLOW_INTERACTION;
+ NMSecretAgentGetSecretsFlags flags = NM_SECRET_AGENT_GET_SECRETS_FLAG_ALLOW_INTERACTION;
NMConnection *connection;
if (priv->act_request)
@@ -543,7 +774,7 @@ nm_modem_act_stage1_prepare (NMModem *self,
/* Secrets required... */
if (priv->secrets_tries++)
- flags |= NM_SETTINGS_GET_SECRETS_FLAG_REQUEST_NEW;
+ flags |= NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW;
priv->secrets_id = nm_act_request_get_secrets (req,
setting_name,
@@ -633,22 +864,19 @@ deactivate (NMModem *self, NMDevice *device)
priv->ppp_manager = NULL;
}
- switch (priv->ip_method) {
- case MM_MODEM_IP_METHOD_PPP:
- break;
- case MM_MODEM_IP_METHOD_STATIC:
- case MM_MODEM_IP_METHOD_DHCP:
+ if (priv->ip4_method == NM_MODEM_IP_METHOD_STATIC ||
+ priv->ip4_method == NM_MODEM_IP_METHOD_AUTO ||
+ priv->ip6_method == NM_MODEM_IP_METHOD_STATIC ||
+ priv->ip6_method == NM_MODEM_IP_METHOD_AUTO) {
ifindex = nm_device_get_ip_ifindex (device);
if (ifindex > 0) {
nm_platform_route_flush (ifindex);
nm_platform_address_flush (ifindex);
nm_platform_link_set_down (ifindex);
}
- break;
- default:
- nm_log_err (LOGD_MB, "unknown IP method %d", priv->ip_method);
- break;
}
+ priv->ip4_method = NM_MODEM_IP_METHOD_UNKNOWN;
+ priv->ip6_method = NM_MODEM_IP_METHOD_UNKNOWN;
g_free (priv->ppp_iface);
priv->ppp_iface = NULL;
@@ -772,6 +1000,15 @@ nm_modem_owns_port (NMModem *self, const char *iface)
return FALSE;
}
+gboolean
+nm_modem_get_iid (NMModem *self, NMUtilsIPv6IfaceId *out_iid)
+{
+ g_return_val_if_fail (NM_IS_MODEM (self), FALSE);
+
+ *out_iid = NM_MODEM_GET_PRIVATE (self)->iid;
+ return TRUE;
+}
+
/*****************************************************************************/
void
@@ -846,8 +1083,11 @@ get_property (GObject *object, guint prop_id,
case PROP_UID:
g_value_set_string (value, priv->uid);
break;
- case PROP_IP_METHOD:
- g_value_set_uint (value, priv->ip_method);
+ case PROP_IP4_METHOD:
+ g_value_set_uint (value, priv->ip4_method);
+ break;
+ case PROP_IP6_METHOD:
+ g_value_set_uint (value, priv->ip6_method);
break;
case PROP_IP_TIMEOUT:
g_value_set_uint (value, priv->mm_ip_timeout);
@@ -861,6 +1101,9 @@ get_property (GObject *object, guint prop_id,
case PROP_SIM_ID:
g_value_set_string (value, priv->sim_id);
break;
+ case PROP_IP_TYPES:
+ g_value_set_uint (value, priv->ip_types);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -892,8 +1135,11 @@ set_property (GObject *object, guint prop_id,
/* Construct only */
priv->uid = g_value_dup_string (value);
break;
- case PROP_IP_METHOD:
- priv->ip_method = g_value_get_uint (value);
+ case PROP_IP4_METHOD:
+ priv->ip4_method = g_value_get_uint (value);
+ break;
+ case PROP_IP6_METHOD:
+ priv->ip6_method = g_value_get_uint (value);
break;
case PROP_IP_TIMEOUT:
priv->mm_ip_timeout = g_value_get_uint (value);
@@ -909,6 +1155,9 @@ set_property (GObject *object, guint prop_id,
g_free (priv->sim_id);
priv->sim_id = g_value_dup_string (value);
break;
+ case PROP_IP_TYPES:
+ priv->ip_types = g_value_get_uint (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -959,92 +1208,100 @@ nm_modem_class_init (NMModemClass *klass)
object_class->finalize = finalize;
klass->act_stage1_prepare = act_stage1_prepare;
+ klass->stage3_ip6_config_request = stage3_ip6_config_request;
klass->deactivate = deactivate;
/* Properties */
g_object_class_install_property
(object_class, PROP_UID,
- g_param_spec_string (NM_MODEM_UID,
- "UID",
- "Modem unique ID",
+ g_param_spec_string (NM_MODEM_UID, "", "",
NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_PATH,
- g_param_spec_string (NM_MODEM_PATH,
- "DBus path",
- "DBus path",
+ g_param_spec_string (NM_MODEM_PATH, "", "",
NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_DRIVER,
- g_param_spec_string (NM_MODEM_DRIVER,
- "Driver",
- "Driver",
+ g_param_spec_string (NM_MODEM_DRIVER, "", "",
NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_CONTROL_PORT,
- g_param_spec_string (NM_MODEM_CONTROL_PORT,
- "Control port",
- "The port controlling the modem",
+ g_param_spec_string (NM_MODEM_CONTROL_PORT, "", "",
NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_DATA_PORT,
- g_param_spec_string (NM_MODEM_DATA_PORT,
- "Data port",
- "The port to connect to",
+ g_param_spec_string (NM_MODEM_DATA_PORT, "", "",
NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
- (object_class, PROP_IP_METHOD,
- g_param_spec_uint (NM_MODEM_IP_METHOD,
- "IP method",
- "IP method",
- MM_MODEM_IP_METHOD_PPP,
- MM_MODEM_IP_METHOD_DHCP,
- MM_MODEM_IP_METHOD_PPP,
- G_PARAM_READWRITE));
+ (object_class, PROP_IP4_METHOD,
+ g_param_spec_uint (NM_MODEM_IP4_METHOD, "", "",
+ NM_MODEM_IP_METHOD_UNKNOWN,
+ NM_MODEM_IP_METHOD_AUTO,
+ NM_MODEM_IP_METHOD_UNKNOWN,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_IP6_METHOD,
+ g_param_spec_uint (NM_MODEM_IP6_METHOD, "", "",
+ NM_MODEM_IP_METHOD_UNKNOWN,
+ NM_MODEM_IP_METHOD_AUTO,
+ NM_MODEM_IP_METHOD_UNKNOWN,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_IP_TIMEOUT,
- g_param_spec_uint (NM_MODEM_IP_TIMEOUT,
- "IP timeout",
- "IP timeout",
+ g_param_spec_uint (NM_MODEM_IP_TIMEOUT, "", "",
0, 360, 20,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(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_param_spec_enum (NM_MODEM_STATE, "", "",
+ NM_TYPE_MODEM_STATE,
+ NM_MODEM_STATE_UNKNOWN,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_DEVICE_ID,
- g_param_spec_string (NM_MODEM_DEVICE_ID,
- "DeviceId",
- "Device ID",
+ g_param_spec_string (NM_MODEM_DEVICE_ID, "", "",
NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_SIM_ID,
- g_param_spec_string (NM_MODEM_SIM_ID,
- "SimId",
- "Sim ID",
+ g_param_spec_string (NM_MODEM_SIM_ID, "", "",
NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_IP_TYPES,
+ g_param_spec_uint (NM_MODEM_IP_TYPES,
+ "IP Types",
+ "Supported IP types",
+ 0, G_MAXUINT32, NM_MODEM_IP_TYPE_IPV4,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
/* Signals */
@@ -1073,6 +1330,27 @@ nm_modem_class_init (NMModemClass *klass)
NULL, NULL, NULL,
G_TYPE_NONE, 2, G_TYPE_OBJECT, G_TYPE_POINTER);
+ /**
+ * NMModem::ip6-config-result:
+ * @modem: the #NMModem on which the signal is emitted
+ * @config: the #NMIP6Config to apply to the modem's data port
+ * @do_slaac: %TRUE if IPv6 SLAAC should be started
+ * @error: a #GError if any error occurred during IP configuration
+ *
+ * This signal is emitted when IPv6 configuration has completed or failed.
+ * If @error is set the configuration failed. If @config is set, then
+ * the details should be applied to the data port before any further
+ * configuration (like SLAAC) is done. @do_slaac indicates whether SLAAC
+ * should be started after applying @config to the data port.
+ */
+ signals[IP6_CONFIG_RESULT] =
+ g_signal_new (NM_MODEM_IP6_CONFIG_RESULT,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMModemClass, ip6_config_result),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 3, G_TYPE_OBJECT, G_TYPE_BOOLEAN, G_TYPE_POINTER);
+
signals[PREPARE_RESULT] =
g_signal_new (NM_MODEM_PREPARE_RESULT,
G_OBJECT_CLASS_TYPE (object_class),
@@ -1112,8 +1390,4 @@ nm_modem_class_init (NMModemClass *klass)
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/devices/wwan/nm-modem.h b/src/devices/wwan/nm-modem.h
index c992cf721..2a4d91733 100644
--- a/src/devices/wwan/nm-modem.h
+++ b/src/devices/wwan/nm-modem.h
@@ -19,10 +19,9 @@
* Copyright (C) 2009 Novell, Inc.
*/
-#ifndef NM_MODEM_H
-#define NM_MODEM_H
+#ifndef __NETWORKMANAGER_MODEM_H__
+#define __NETWORKMANAGER_MODEM_H__
-#include <dbus/dbus-glib.h>
#include <glib-object.h>
#include "ppp-manager/nm-ppp-manager.h"
#include "nm-device.h"
@@ -42,33 +41,50 @@ G_BEGIN_DECLS
#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_IP4_METHOD "ip4-method"
+#define NM_MODEM_IP6_METHOD "ip6-method"
#define NM_MODEM_IP_TIMEOUT "ip-timeout"
#define NM_MODEM_STATE "state"
#define NM_MODEM_DEVICE_ID "device-id"
#define NM_MODEM_SIM_ID "sim-id"
+#define NM_MODEM_IP_TYPES "ip-types" /* Supported IP types */
/* 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_IP6_CONFIG_RESULT "ip6-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;
+ NM_MODEM_IP_METHOD_UNKNOWN = 0,
+ NM_MODEM_IP_METHOD_PPP,
+ NM_MODEM_IP_METHOD_STATIC,
+ NM_MODEM_IP_METHOD_AUTO, /* DHCP and/or SLAAC */
+} NMModemIPMethod;
+
+/**
+ * NMModemIPType:
+ * @NM_MODEM_IP_TYPE_UNKNOWN: unknown or no IP support
+ * @NM_MODEM_IP_TYPE_IPV4: IPv4-only bearers are supported
+ * @NM_MODEM_IP_TYPE_IPV6: IPv6-only bearers are supported
+ * @NM_MODEM_IP_TYPE_IPV4V6: dual-stack IPv4 + IPv6 bearers are supported
+ *
+ * Indicates what IP protocols the modem supports for an IP bearer. Any
+ * combination of flags is possible. For example, (%NM_MODEM_IP_TYPE_IPV4 |
+ * %NM_MODEM_IP_TYPE_IPV6) indicates that the modem supports IPv4 and IPv6
+ * but not simultaneously on the same bearer.
+ */
+typedef enum {
+ NM_MODEM_IP_TYPE_UNKNOWN = 0x0,
+ NM_MODEM_IP_TYPE_IPV4 = 0x1,
+ NM_MODEM_IP_TYPE_IPV6 = 0x2,
+ NM_MODEM_IP_TYPE_IPV4V6 = 0x4
+} NMModemIPType;
typedef enum { /*< underscore_name=nm_modem_state >*/
NM_MODEM_STATE_UNKNOWN = 0,
@@ -86,9 +102,6 @@ typedef enum { /*< underscore_name=nm_modem_state >*/
NM_MODEM_STATE_CONNECTED = 12,
} NMModemState;
-#define NM_MODEM_ERROR (nm_modem_error_quark ())
-GQuark nm_modem_error_quark (void);
-
typedef struct {
GObject parent;
@@ -122,6 +135,12 @@ typedef struct {
NMActRequest *req,
NMDeviceStateReason *reason);
+ /* Request the IP6 config; when the config returns the modem
+ * subclass should emit the ip6_config_result signal.
+ */
+ NMActStageReturn (*stage3_ip6_config_request) (NMModem *self,
+ NMDeviceStateReason *reason);
+
void (*set_mm_enabled) (NMModem *self, gboolean enabled);
void (*disconnect) (NMModem *self, gboolean warn);
@@ -136,6 +155,10 @@ typedef struct {
void (*prepare_result) (NMModem *self, gboolean success, NMDeviceStateReason reason);
void (*ip4_config_result) (NMModem *self, NMIP4Config *config, GError *error);
+ void (*ip6_config_result) (NMModem *self,
+ NMIP6Config *config,
+ gboolean do_slaac,
+ GError *error);
void (*auth_requested) (NMModem *self);
void (*auth_result) (NMModem *self, GError *error);
@@ -154,6 +177,7 @@ 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);
+gboolean nm_modem_get_iid (NMModem *modem, NMUtilsIPv6IfaceId *out_iid);
gboolean nm_modem_owns_port (NMModem *modem, const char *iface);
@@ -182,8 +206,7 @@ NMActStageReturn nm_modem_stage3_ip4_config_start (NMModem *modem,
NMDeviceStateReason *reason);
NMActStageReturn nm_modem_stage3_ip6_config_start (NMModem *modem,
- NMDevice *device,
- NMDeviceClass *device_class,
+ NMActRequest *req,
NMDeviceStateReason *reason);
void nm_modem_ip4_pre_commit (NMModem *modem, NMDevice *device, NMIP4Config *config);
@@ -209,9 +232,20 @@ void nm_modem_set_state (NMModem *self,
void nm_modem_set_prev_state (NMModem *self, const char *reason);
const char * nm_modem_state_to_string (NMModemState state);
+NMModemIPType nm_modem_get_supported_ip_types (NMModem *self);
+
/* For the modem-manager only */
void nm_modem_emit_removed (NMModem *self);
+NMModemIPType nm_modem_get_connection_ip_type (NMModem *self,
+ NMConnection *connection,
+ GError **error);
+
+/* For subclasses */
+void nm_modem_emit_ip6_config_result (NMModem *self,
+ NMIP6Config *config,
+ GError *error);
+
G_END_DECLS
-#endif /* NM_MODEM_H */
+#endif /* __NETWORKMANAGER_MODEM_H__ */
diff --git a/src/devices/wwan/nm-wwan-factory.c b/src/devices/wwan/nm-wwan-factory.c
index b1e2307e6..2b9c3d4dd 100644
--- a/src/devices/wwan/nm-wwan-factory.c
+++ b/src/devices/wwan/nm-wwan-factory.c
@@ -18,10 +18,11 @@
* Copyright (C) 2014 Red Hat, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include <gmodule.h>
-#include "config.h"
#include "nm-device-factory.h"
#include "nm-wwan-factory.h"
#include "nm-modem-manager.h"
@@ -43,20 +44,12 @@ typedef struct {
/************************************************************************/
-#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
@@ -93,9 +86,17 @@ modem_added_cb (NMModemManager *manager,
g_object_unref (device);
}
+
+static NMDeviceType
+get_device_type (NMDeviceFactory *factory)
+{
+ return NM_DEVICE_TYPE_MODEM;
+}
+
static void
-nm_wwan_factory_init (NMWwanFactory *self)
+start (NMDeviceFactory *factory)
{
+ NMWwanFactory *self = NM_WWAN_FACTORY (factory);
NMWwanFactoryPrivate *priv = NM_WWAN_FACTORY_GET_PRIVATE (self);
priv->mm = g_object_new (NM_TYPE_MODEM_MANAGER, NULL);
@@ -107,8 +108,15 @@ nm_wwan_factory_init (NMWwanFactory *self)
}
static void
+nm_wwan_factory_init (NMWwanFactory *self)
+{
+}
+
+static void
device_factory_interface_init (NMDeviceFactory *factory_iface)
{
+ factory_iface->get_device_type = get_device_type;
+ factory_iface->start = start;
}
static void
diff --git a/src/devices/wwan/nm-wwan-factory.h b/src/devices/wwan/nm-wwan-factory.h
index b7aee01f1..c6c03f1f0 100644
--- a/src/devices/wwan/nm-wwan-factory.h
+++ b/src/devices/wwan/nm-wwan-factory.h
@@ -18,8 +18,8 @@
* Copyright (C) 2014 Red Hat, Inc.
*/
-#ifndef NM_WWAN_FACTORY_H
-#define NM_WWAN_FACTORY_H
+#ifndef __NETWORKMANAGER_WWAN_FACTORY_H__
+#define __NETWORKMANAGER_WWAN_FACTORY_H__
#include <glib-object.h>
@@ -34,4 +34,4 @@ typedef struct {
GObjectClass parent;
} NMWwanFactoryClass;
-#endif /* NM_WWAN_FACTORY_H */
+#endif /* __NETWORKMANAGER_WWAN_FACTORY_H__ */
diff --git a/src/devices/wwan/wwan-exports.ver b/src/devices/wwan/wwan-exports.ver
index dc505d176..c23ab24b7 100644
--- a/src/devices/wwan/wwan-exports.ver
+++ b/src/devices/wwan/wwan-exports.ver
@@ -6,11 +6,11 @@ global:
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_iid;
nm_modem_get_path;
nm_modem_get_secrets;
nm_modem_get_state;
diff --git a/src/dhcp-manager/Makefile.am b/src/dhcp-manager/Makefile.am
index 63eac9d56..27945f55c 100644
--- a/src/dhcp-manager/Makefile.am
+++ b/src/dhcp-manager/Makefile.am
@@ -3,15 +3,15 @@ libexec_PROGRAMS = nm-dhcp-helper
nm_dhcp_helper_SOURCES = nm-dhcp-helper.c
nm_dhcp_helper_CPPFLAGS = \
- $(DBUS_CFLAGS) \
+ $(GLIB_CFLAGS) \
-DG_LOG_DOMAIN=\""nm-dhcp-helper"\" \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
-DNMRUNDIR=\"$(nmrundir)\"
-nm_dhcp_helper_LDADD = $(DBUS_LIBS)
+nm_dhcp_helper_LDADD = $(GLIB_LIBS)
-# FIXME: remove when dbus-glib >= 0.100 is required
+# FIXME: remove when dbus-glib >= 0.100 or GDBus is required
dhcp_helper_conf = nm-dhcp-helper.conf
if !HAVE_DBUS_GLIB_100
diff --git a/src/dhcp-manager/Makefile.in b/src/dhcp-manager/Makefile.in
index 5495b12fd..4dea10859 100644
--- a/src/dhcp-manager/Makefile.in
+++ b/src/dhcp-manager/Makefile.in
@@ -212,6 +212,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -335,6 +337,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -354,6 +357,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -380,7 +384,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -461,14 +465,14 @@ with_resolvconf = @with_resolvconf@
with_valgrind = @with_valgrind@
nm_dhcp_helper_SOURCES = nm-dhcp-helper.c
nm_dhcp_helper_CPPFLAGS = \
- $(DBUS_CFLAGS) \
+ $(GLIB_CFLAGS) \
-DG_LOG_DOMAIN=\""nm-dhcp-helper"\" \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
-DNMRUNDIR=\"$(nmrundir)\"
-nm_dhcp_helper_LDADD = $(DBUS_LIBS)
+nm_dhcp_helper_LDADD = $(GLIB_LIBS)
-# FIXME: remove when dbus-glib >= 0.100 is required
+# FIXME: remove when dbus-glib >= 0.100 or GDBus 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)
diff --git a/src/dhcp-manager/nm-dhcp-client.c b/src/dhcp-manager/nm-dhcp-client.c
index 03c11c74d..47fa53171 100644
--- a/src/dhcp-manager/nm-dhcp-client.c
+++ b/src/dhcp-manager/nm-dhcp-client.c
@@ -17,7 +17,8 @@
*
*/
-#include <config.h>
+#include "config.h"
+
#include <glib.h>
#include <string.h>
#include <sys/types.h>
@@ -33,35 +34,35 @@
#include "nm-logging.h"
#include "nm-dbus-glib-types.h"
#include "nm-dhcp-client.h"
+#include "nm-dhcp-utils.h"
+#include "nm-platform.h"
typedef struct {
char * iface;
+ int ifindex;
GByteArray * hwaddr;
gboolean ipv6;
char * uuid;
- guint priority;
+ guint32 priority;
guint32 timeout;
GByteArray * duid;
+ GBytes * client_id;
+ char * hostname;
- guchar state;
- GPid pid;
- gboolean dead;
+ NMDhcpState state;
+ pid_t pid;
guint timeout_id;
guint watch_id;
- guint32 remove_id;
- GHashTable * options;
gboolean info_only;
-} NMDHCPClientPrivate;
+} NMDhcpClientPrivate;
-#define NM_DHCP_CLIENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DHCP_CLIENT, NMDHCPClientPrivate))
+#define NM_DHCP_CLIENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DHCP_CLIENT, NMDhcpClientPrivate))
-G_DEFINE_TYPE_EXTENDED (NMDHCPClient, nm_dhcp_client, G_TYPE_OBJECT, G_TYPE_FLAG_ABSTRACT, {})
+G_DEFINE_TYPE_EXTENDED (NMDhcpClient, nm_dhcp_client, G_TYPE_OBJECT, G_TYPE_FLAG_ABSTRACT, {})
enum {
SIGNAL_STATE_CHANGED,
- SIGNAL_TIMEOUT,
- SIGNAL_REMOVE,
LAST_SIGNAL
};
@@ -70,6 +71,7 @@ static guint signals[LAST_SIGNAL] = { 0 };
enum {
PROP_0,
PROP_IFACE,
+ PROP_IFINDEX,
PROP_HWADDR,
PROP_IPV6,
PROP_UUID,
@@ -80,8 +82,8 @@ enum {
/********************************************/
-GPid
-nm_dhcp_client_get_pid (NMDHCPClient *self)
+pid_t
+nm_dhcp_client_get_pid (NMDhcpClient *self)
{
g_return_val_if_fail (NM_IS_DHCP_CLIENT (self), -1);
@@ -89,15 +91,23 @@ nm_dhcp_client_get_pid (NMDHCPClient *self)
}
const char *
-nm_dhcp_client_get_iface (NMDHCPClient *self)
+nm_dhcp_client_get_iface (NMDhcpClient *self)
{
g_return_val_if_fail (NM_IS_DHCP_CLIENT (self), NULL);
return NM_DHCP_CLIENT_GET_PRIVATE (self)->iface;
}
+int
+nm_dhcp_client_get_ifindex (NMDhcpClient *self)
+{
+ g_return_val_if_fail (NM_IS_DHCP_CLIENT (self), -1);
+
+ return NM_DHCP_CLIENT_GET_PRIVATE (self)->ifindex;
+}
+
gboolean
-nm_dhcp_client_get_ipv6 (NMDHCPClient *self)
+nm_dhcp_client_get_ipv6 (NMDhcpClient *self)
{
g_return_val_if_fail (NM_IS_DHCP_CLIENT (self), FALSE);
@@ -105,19 +115,120 @@ nm_dhcp_client_get_ipv6 (NMDHCPClient *self)
}
const char *
-nm_dhcp_client_get_uuid (NMDHCPClient *self)
+nm_dhcp_client_get_uuid (NMDhcpClient *self)
{
g_return_val_if_fail (NM_IS_DHCP_CLIENT (self), NULL);
return NM_DHCP_CLIENT_GET_PRIVATE (self)->uuid;
}
+const GByteArray *
+nm_dhcp_client_get_duid (NMDhcpClient *self)
+{
+ g_return_val_if_fail (NM_IS_DHCP_CLIENT (self), NULL);
+
+ return NM_DHCP_CLIENT_GET_PRIVATE (self)->duid;
+}
+
+const GByteArray *
+nm_dhcp_client_get_hw_addr (NMDhcpClient *self)
+{
+ g_return_val_if_fail (NM_IS_DHCP_CLIENT (self), NULL);
+
+ return NM_DHCP_CLIENT_GET_PRIVATE (self)->hwaddr;
+}
+
+guint32
+nm_dhcp_client_get_priority (NMDhcpClient *self)
+{
+ g_return_val_if_fail (NM_IS_DHCP_CLIENT (self), G_MAXUINT32);
+
+ return NM_DHCP_CLIENT_GET_PRIVATE (self)->priority;
+}
+
+GBytes *
+nm_dhcp_client_get_client_id (NMDhcpClient *self)
+{
+ g_return_val_if_fail (NM_IS_DHCP_CLIENT (self), NULL);
+
+ return NM_DHCP_CLIENT_GET_PRIVATE (self)->client_id;
+}
+
+void
+nm_dhcp_client_set_client_id (NMDhcpClient *self, GBytes *client_id)
+{
+ NMDhcpClientPrivate *priv;
+
+ g_return_if_fail (NM_IS_DHCP_CLIENT (self));
+
+ priv = NM_DHCP_CLIENT_GET_PRIVATE (self);
+
+ if (priv->client_id && client_id && g_bytes_equal (priv->client_id, client_id))
+ return;
+ g_clear_pointer (&priv->client_id, g_bytes_unref);
+ priv->client_id = client_id ? g_bytes_ref (client_id) : NULL;
+}
+
+const char *
+nm_dhcp_client_get_hostname (NMDhcpClient *self)
+{
+ g_return_val_if_fail (NM_IS_DHCP_CLIENT (self), NULL);
+
+ return NM_DHCP_CLIENT_GET_PRIVATE (self)->hostname;
+}
+
+/********************************************/
+
+static const char *state_table[NM_DHCP_STATE_MAX + 1] = {
+ [NM_DHCP_STATE_UNKNOWN] = "unknown",
+ [NM_DHCP_STATE_BOUND] = "bound",
+ [NM_DHCP_STATE_TIMEOUT] = "timeout",
+ [NM_DHCP_STATE_EXPIRE] = "expire",
+ [NM_DHCP_STATE_DONE] = "done",
+ [NM_DHCP_STATE_FAIL] = "fail",
+};
+
+static const char *
+state_to_string (NMDhcpState state)
+{
+ if ((gsize) state < G_N_ELEMENTS (state_table))
+ return state_table[state];
+ return NULL;
+}
+
+static NMDhcpState
+reason_to_state (const char *iface, const char *reason)
+{
+ if (g_ascii_strcasecmp (reason, "bound") == 0 ||
+ g_ascii_strcasecmp (reason, "bound6") == 0 ||
+ g_ascii_strcasecmp (reason, "renew") == 0 ||
+ g_ascii_strcasecmp (reason, "renew6") == 0 ||
+ g_ascii_strcasecmp (reason, "reboot") == 0 ||
+ g_ascii_strcasecmp (reason, "rebind") == 0 ||
+ g_ascii_strcasecmp (reason, "rebind6") == 0)
+ return NM_DHCP_STATE_BOUND;
+ else if (g_ascii_strcasecmp (reason, "timeout") == 0)
+ return NM_DHCP_STATE_TIMEOUT;
+ else if (g_ascii_strcasecmp (reason, "nak") == 0 ||
+ g_ascii_strcasecmp (reason, "expire") == 0 ||
+ g_ascii_strcasecmp (reason, "expire6") == 0)
+ return NM_DHCP_STATE_EXPIRE;
+ else if (g_ascii_strcasecmp (reason, "end") == 0)
+ return NM_DHCP_STATE_DONE;
+ else if (g_ascii_strcasecmp (reason, "fail") == 0 ||
+ g_ascii_strcasecmp (reason, "abend") == 0)
+ return NM_DHCP_STATE_FAIL;
+
+ nm_log_dbg (LOGD_DHCP, "(%s): unmapped DHCP state '%s'", iface, reason);
+ return NM_DHCP_STATE_UNKNOWN;
+}
+
/********************************************/
static void
-timeout_cleanup (NMDHCPClient *self)
+timeout_cleanup (NMDhcpClient *self)
{
- NMDHCPClientPrivate *priv = NM_DHCP_CLIENT_GET_PRIVATE (self);
+ NMDhcpClientPrivate *priv = NM_DHCP_CLIENT_GET_PRIVATE (self);
if (priv->timeout_id) {
g_source_remove (priv->timeout_id);
@@ -126,9 +237,9 @@ timeout_cleanup (NMDHCPClient *self)
}
static void
-watch_cleanup (NMDHCPClient *self)
+watch_cleanup (NMDhcpClient *self)
{
- NMDHCPClientPrivate *priv = NM_DHCP_CLIENT_GET_PRIVATE (self);
+ NMDhcpClientPrivate *priv = NM_DHCP_CLIENT_GET_PRIVATE (self);
if (priv->watch_id) {
g_source_remove (priv->watch_id);
@@ -137,171 +248,158 @@ watch_cleanup (NMDHCPClient *self)
}
void
-nm_dhcp_client_stop_pid (GPid pid, const char *iface)
+nm_dhcp_client_stop_pid (pid_t pid, const char *iface)
{
- int i = 5; /* roughly 0.5 seconds */
-
- g_return_if_fail (pid > 0);
-
- /* Tell it to quit; maybe it wants to send out a RELEASE message */
- kill (pid, SIGTERM);
-
- while (i-- > 0) {
- gint child_status;
- int ret;
+ char *name = iface ? g_strdup_printf ("dhcp-client-%s", iface) : NULL;
- ret = waitpid (pid, &child_status, WNOHANG);
- if (ret > 0)
- break;
+ g_return_if_fail (pid > 1);
- if (ret == -1) {
- /* Child already exited */
- if (errno == ECHILD) {
- /* Was it really our child and it exited? */
- if (kill (pid, 0) < 0 && errno == ESRCH)
- break;
- } else {
- /* Took too long; shoot it in the head */
- i = 0;
- break;
- }
- }
- g_usleep (G_USEC_PER_SEC / 10);
- }
-
- if (i <= 0) {
- if (iface) {
- nm_log_warn (LOGD_DHCP, "(%s): DHCP client pid %d didn't exit, will kill it.",
- iface, pid);
- }
- kill (pid, SIGKILL);
-
- nm_log_dbg (LOGD_DHCP, "waiting for DHCP client pid %d to exit", pid);
- waitpid (pid, NULL, 0);
- nm_log_dbg (LOGD_DHCP, "DHCP client pid %d cleaned up", pid);
- }
+ nm_utils_kill_child_sync (pid, SIGTERM, LOGD_DHCP, name ? name : "dhcp-client", NULL,
+ 1000 / 2, 1000 / 20);
+ g_free (name);
}
static void
-stop (NMDHCPClient *self, gboolean release, const GByteArray *duid)
+stop (NMDhcpClient *self, gboolean release, const GByteArray *duid)
{
- NMDHCPClientPrivate *priv;
+ NMDhcpClientPrivate *priv;
g_return_if_fail (NM_IS_DHCP_CLIENT (self));
priv = NM_DHCP_CLIENT_GET_PRIVATE (self);
- g_return_if_fail (priv->pid > 0);
-
- /* Clean up the watch handler since we're explicitly killing the daemon */
- watch_cleanup (self);
-
- nm_dhcp_client_stop_pid (priv->pid, priv->iface);
+ if (priv->pid > 0) {
+ /* Clean up the watch handler since we're explicitly killing the daemon */
+ watch_cleanup (self);
+ nm_dhcp_client_stop_pid (priv->pid, priv->iface);
+ }
+ priv->pid = -1;
priv->info_only = FALSE;
}
-static gboolean
-daemon_timeout (gpointer user_data)
+void
+nm_dhcp_client_set_state (NMDhcpClient *self,
+ NMDhcpState new_state,
+ GObject *ip_config,
+ GHashTable *options)
{
- NMDHCPClient *self = NM_DHCP_CLIENT (user_data);
- NMDHCPClientPrivate *priv = NM_DHCP_CLIENT_GET_PRIVATE (self);
+ NMDhcpClientPrivate *priv = NM_DHCP_CLIENT_GET_PRIVATE (self);
- if (priv->ipv6) {
- nm_log_warn (LOGD_DHCP6, "(%s): DHCPv6 request timed out.", priv->iface);
+ if (new_state >= NM_DHCP_STATE_BOUND)
+ timeout_cleanup (self);
+ if (new_state >= NM_DHCP_STATE_TIMEOUT)
+ watch_cleanup (self);
+
+ if (new_state == NM_DHCP_STATE_BOUND) {
+ g_assert ( (priv->ipv6 && NM_IS_IP6_CONFIG (ip_config))
+ || (!priv->ipv6 && NM_IS_IP4_CONFIG (ip_config)));
+ g_assert (options);
+ g_assert_cmpint (g_hash_table_size (options), >, 0);
} else {
- nm_log_warn (LOGD_DHCP4, "(%s): DHCPv4 request timed out.", priv->iface);
+ g_assert (ip_config == NULL);
+ g_assert (options == NULL);
}
- g_signal_emit (G_OBJECT (self), signals[SIGNAL_TIMEOUT], 0);
- return FALSE;
-}
-static gboolean
-signal_remove (gpointer user_data)
-{
- NMDHCPClient *self = NM_DHCP_CLIENT (user_data);
+ /* The client may send same-state transitions for RENEW/REBIND events and
+ * the lease may have changed, so handle same-state transitions for the
+ * BOUND state. Ignore same-state transitions for other events since
+ * the lease won't have changed and the state was already handled.
+ */
+ if ((priv->state == new_state) && (new_state != NM_DHCP_STATE_BOUND))
+ return;
- NM_DHCP_CLIENT_GET_PRIVATE (self)->remove_id = 0;
- g_signal_emit (G_OBJECT (self), signals[SIGNAL_REMOVE], 0);
- return FALSE;
+ nm_log_info (priv->ipv6 ? LOGD_DHCP6 : LOGD_DHCP4,
+ "(%s): DHCPv%c state changed %s -> %s",
+ priv->iface,
+ priv->ipv6 ? '6' : '4',
+ state_to_string (priv->state),
+ state_to_string (new_state));
+
+ priv->state = new_state;
+ g_signal_emit (G_OBJECT (self),
+ signals[SIGNAL_STATE_CHANGED], 0,
+ new_state,
+ ip_config,
+ options);
}
-static void
-dhcp_client_set_state (NMDHCPClient *self,
- NMDHCPState state,
- gboolean emit_state,
- gboolean remove_now)
+static gboolean
+daemon_timeout (gpointer user_data)
{
- NMDHCPClientPrivate *priv = NM_DHCP_CLIENT_GET_PRIVATE (self);
+ NMDhcpClient *self = NM_DHCP_CLIENT (user_data);
+ NMDhcpClientPrivate *priv = NM_DHCP_CLIENT_GET_PRIVATE (self);
- priv->state = state;
-
- if (emit_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[SIGNAL_REMOVE], 0);
- } else {
- if (!priv->remove_id)
- priv->remove_id = g_timeout_add_seconds (5, signal_remove, self);
- }
- }
+ priv->timeout_id = 0;
+ nm_log_warn (priv->ipv6 ? LOGD_DHCP6 : LOGD_DHCP4,
+ "(%s): DHCPv%c request timed out.",
+ priv->iface,
+ priv->ipv6 ? '6' : '4');
+ nm_dhcp_client_set_state (self, NM_DHCP_STATE_TIMEOUT, NULL, NULL);
+ return G_SOURCE_REMOVE;
}
static void
daemon_watch_cb (GPid pid, gint status, gpointer user_data)
{
- NMDHCPClient *self = NM_DHCP_CLIENT (user_data);
- NMDHCPClientPrivate *priv = NM_DHCP_CLIENT_GET_PRIVATE (self);
- NMDHCPState new_state;
-
- if (priv->ipv6) {
- nm_log_info (LOGD_DHCP6, "(%s): DHCPv6 client pid %d exited with status %d",
- priv->iface, pid,
- WIFEXITED (status) ? WEXITSTATUS (status) : -1);
- } else {
- nm_log_info (LOGD_DHCP4, "(%s): DHCPv4 client pid %d exited with status %d",
- priv->iface, pid,
- WIFEXITED (status) ? WEXITSTATUS (status) : -1);
- }
-
- if (!WIFEXITED (status)) {
- new_state = DHC_ABEND;
+ NMDhcpClient *self = NM_DHCP_CLIENT (user_data);
+ NMDhcpClientPrivate *priv = NM_DHCP_CLIENT_GET_PRIVATE (self);
+ NMDhcpState new_state;
+ guint64 log_domain;
+ guint ip_ver;
+
+ log_domain = priv->ipv6 ? LOGD_DHCP6 : LOGD_DHCP4;
+ ip_ver = priv->ipv6 ? 6 : 4;
+
+ if (WIFEXITED (status))
+ nm_log_info (log_domain, "(%s): DHCPv%d client pid %d exited with status %d",
+ priv->iface, ip_ver, pid, WEXITSTATUS (status));
+ else if (WIFSIGNALED (status))
+ nm_log_info (log_domain, "(%s): DHCPv%d client pid %d killed by signal %d",
+ priv->iface, ip_ver, pid, WTERMSIG (status));
+ else if (WIFSTOPPED(status))
+ nm_log_info (log_domain, "(%s): DHCPv%d client pid %d stopped by signal %d",
+ priv->iface, ip_ver, pid, WSTOPSIG (status));
+ else if (WIFCONTINUED (status))
+ nm_log_info (log_domain, "(%s): DHCPv%d client pid %d resumed (by SIGCONT)",
+ priv->iface, ip_ver, pid);
+ else
nm_log_warn (LOGD_DHCP, "DHCP client died abnormally");
- } else
- new_state = DHC_END;
- watch_cleanup (self);
- timeout_cleanup (self);
- priv->dead = TRUE;
+ if (!WIFEXITED (status))
+ new_state = NM_DHCP_STATE_FAIL;
+ else
+ new_state = NM_DHCP_STATE_DONE;
+
+ priv->pid = -1;
- dhcp_client_set_state (self, new_state, TRUE, FALSE);
+ nm_dhcp_client_set_state (self, new_state, NULL, NULL);
}
-static void
-start_monitor (NMDHCPClient *self)
+void
+nm_dhcp_client_watch_child (NMDhcpClient *self, pid_t pid)
{
- NMDHCPClientPrivate *priv = NM_DHCP_CLIENT_GET_PRIVATE (self);
+ NMDhcpClientPrivate *priv = NM_DHCP_CLIENT_GET_PRIVATE (self);
- g_return_if_fail (priv->pid > 0);
+ g_return_if_fail (priv->pid == -1);
+ priv->pid = pid;
/* Set up a timeout on the transaction to kill it after the timeout */
+ g_assert (priv->timeout_id == 0);
priv->timeout_id = g_timeout_add_seconds (priv->timeout,
daemon_timeout,
self);
- priv->watch_id = g_child_watch_add (priv->pid,
- (GChildWatchFunc) daemon_watch_cb,
- self);
+ g_assert (priv->watch_id == 0);
+ priv->watch_id = g_child_watch_add (pid, daemon_watch_cb, self);
}
gboolean
-nm_dhcp_client_start_ip4 (NMDHCPClient *self,
+nm_dhcp_client_start_ip4 (NMDhcpClient *self,
const char *dhcp_client_id,
- GByteArray *dhcp_anycast_addr,
- const char *hostname)
+ const char *dhcp_anycast_addr,
+ const char *hostname,
+ const char *last_ip4_address)
{
- NMDHCPClientPrivate *priv;
+ NMDhcpClientPrivate *priv;
g_return_val_if_fail (NM_IS_DHCP_CLIENT (self), FALSE);
@@ -313,11 +411,12 @@ 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, dhcp_client_id, dhcp_anycast_addr, hostname);
- if (priv->pid)
- start_monitor (self);
+ nm_dhcp_client_set_client_id (self, dhcp_client_id ? nm_dhcp_utils_client_id_string_to_bytes (dhcp_client_id) : NULL);
- return priv->pid ? TRUE : FALSE;
+ g_clear_pointer (&priv->hostname, g_free);
+ priv->hostname = g_strdup (hostname);
+
+ return NM_DHCP_CLIENT_GET_CLASS (self)->ip4_start (self, dhcp_anycast_addr, last_ip4_address);
}
/* uuid_parse does not work for machine-id, so we use our own converter */
@@ -406,38 +505,21 @@ generate_duid_from_machine_id (void)
return duid;
}
-static char *
-escape_duid (const GByteArray *duid)
-{
- guint32 i = 0;
- GString *s;
-
- g_return_val_if_fail (duid != NULL, NULL);
-
- s = g_string_sized_new (40);
- while (i < duid->len) {
- if (s->len)
- g_string_append_c (s, ':');
- g_string_append_printf (s, "%02x", duid->data[i++]);
- }
- return g_string_free (s, FALSE);
-}
-
static GByteArray *
-get_duid (NMDHCPClient *self)
+get_duid (NMDhcpClient *self)
{
static GByteArray *duid = NULL;
GByteArray *copy = NULL;
- char *escaped;
+ char *str;
if (G_UNLIKELY (duid == NULL)) {
duid = generate_duid_from_machine_id ();
g_assert (duid);
if (nm_logging_enabled (LOGL_DEBUG, LOGD_DHCP6)) {
- escaped = escape_duid (duid);
- nm_log_dbg (LOGD_DHCP6, "Generated DUID %s", escaped);
- g_free (escaped);
+ str = nm_dhcp_utils_duid_to_string (duid);
+ nm_log_dbg (LOGD_DHCP6, "Generated DUID %s", str);
+ g_free (str);
}
}
@@ -450,13 +532,14 @@ get_duid (NMDHCPClient *self)
}
gboolean
-nm_dhcp_client_start_ip6 (NMDHCPClient *self,
- GByteArray *dhcp_anycast_addr,
+nm_dhcp_client_start_ip6 (NMDhcpClient *self,
+ const char *dhcp_anycast_addr,
const char *hostname,
- gboolean info_only)
+ gboolean info_only,
+ NMSettingIP6ConfigPrivacy privacy)
{
- NMDHCPClientPrivate *priv;
- char *escaped;
+ NMDhcpClientPrivate *priv;
+ char *str;
g_return_val_if_fail (NM_IS_DHCP_CLIENT (self), FALSE);
@@ -472,25 +555,24 @@ nm_dhcp_client_start_ip6 (NMDHCPClient *self,
priv->duid = NM_DHCP_CLIENT_GET_CLASS (self)->get_duid (self);
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);
+ str = nm_dhcp_utils_duid_to_string (priv->duid);
+ nm_log_dbg (LOGD_DHCP, "(%s): DHCPv6 DUID is '%s'", priv->iface, str);
+ g_free (str);
}
+ g_clear_pointer (&priv->hostname, g_free);
+ priv->hostname = g_strdup (hostname);
+
priv->info_only = info_only;
nm_log_info (LOGD_DHCP, "Activation (%s) Beginning DHCPv6 transaction (timeout in %d seconds)",
priv->iface, priv->timeout);
- priv->pid = NM_DHCP_CLIENT_GET_CLASS (self)->ip6_start (self,
- dhcp_anycast_addr,
- hostname,
- info_only,
- priv->duid);
- if (priv->pid > 0)
- start_monitor (self);
-
- return priv->pid ? TRUE : FALSE;
+ return NM_DHCP_CLIENT_GET_CLASS (self)->ip6_start (self,
+ dhcp_anycast_addr,
+ info_only,
+ privacy,
+ priv->duid);
}
void
@@ -506,11 +588,14 @@ nm_dhcp_client_stop_existing (const char *pid_file, const char *binary_name)
errno = 0;
tmp = strtol (pid_contents, NULL, 10);
if ((errno == 0) && (tmp > 1)) {
+ guint64 start_time;
const char *exe;
/* Ensure the process is a DHCP client */
+ start_time = nm_utils_get_start_time_for_pid (tmp);
proc_path = g_strdup_printf ("/proc/%ld/cmdline", tmp);
- if (g_file_get_contents (proc_path, &proc_contents, NULL, NULL)) {
+ if ( start_time
+ && g_file_get_contents (proc_path, &proc_contents, NULL, NULL)) {
exe = strrchr (proc_contents, '/');
if (exe)
exe++;
@@ -518,7 +603,8 @@ 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);
+ nm_utils_kill_process_sync (tmp, start_time, SIGTERM, LOGD_DHCP,
+ "dhcp-client", 1000 / 2, 1000 / 20);
}
}
@@ -531,103 +617,30 @@ nm_dhcp_client_stop_existing (const char *pid_file, const char *binary_name)
}
void
-nm_dhcp_client_stop (NMDHCPClient *self, gboolean release)
+nm_dhcp_client_stop (NMDhcpClient *self, gboolean release)
{
- NMDHCPClientPrivate *priv;
+ NMDhcpClientPrivate *priv;
+ pid_t old_pid = 0;
g_return_if_fail (NM_IS_DHCP_CLIENT (self));
priv = NM_DHCP_CLIENT_GET_PRIVATE (self);
/* Kill the DHCP client */
- if (!priv->dead) {
- NM_DHCP_CLIENT_GET_CLASS (self)->stop (self, release, priv->duid);
- priv->dead = TRUE;
-
+ old_pid = priv->pid;
+ NM_DHCP_CLIENT_GET_CLASS (self)->stop (self, release, priv->duid);
+ if (old_pid > 0) {
nm_log_info (LOGD_DHCP, "(%s): canceled DHCP transaction, DHCP client pid %d",
- priv->iface, priv->pid);
- }
-
- /* And clean stuff up */
-
- priv->pid = -1;
- dhcp_client_set_state (self, DHC_END, FALSE, TRUE);
-
- g_hash_table_remove_all (priv->options);
+ priv->iface, old_pid);
+ } else
+ nm_log_info (LOGD_DHCP, "(%s): canceled DHCP transaction", priv->iface);
+ g_assert (priv->pid == -1);
- timeout_cleanup (self);
- watch_cleanup (self);
+ nm_dhcp_client_set_state (self, NM_DHCP_STATE_DONE, NULL, NULL);
}
/********************************************/
-static gboolean
-state_is_bound (guint32 state)
-{
- if ( (state == DHC_BOUND4)
- || (state == DHC_BOUND6)
- || (state == DHC_RENEW4)
- || (state == DHC_RENEW6)
- || (state == DHC_REBOOT)
- || (state == DHC_REBIND4)
- || (state == DHC_REBIND6)
- || (state == DHC_IPV4LL))
- return TRUE;
-
- return FALSE;
-}
-
-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 const char *
-state_to_string (NMDHCPState state)
-{
- if (state >= 0 && state < G_N_ELEMENTS (state_table))
- return state_table[state];
- return NULL;
-}
-
-static NMDHCPState
-string_to_state (const char *name)
-{
- int i;
-
- 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;
-}
-
static char *
garray_to_string (GArray *array, const char *key)
{
@@ -661,848 +674,133 @@ garray_to_string (GArray *array, const char *key)
return converted;
}
+#define OLD_TAG "old_"
+#define NEW_TAG "new_"
+
static void
-copy_option (gpointer key,
- gpointer value,
+copy_option (const char * key,
+ GValue *value,
gpointer user_data)
{
GHashTable *hash = user_data;
- const char *str_key = (const char *) key;
char *str_value = NULL;
+ const char **p;
+ static const char *ignored_keys[] = {
+ "interface",
+ "pid",
+ "reason",
+ "dhcp_message_type",
+ NULL
+ };
- if (G_VALUE_TYPE (value) != DBUS_TYPE_G_UCHAR_ARRAY) {
- nm_log_warn (LOGD_DHCP, "unexpected key %s value type was not "
- "DBUS_TYPE_G_UCHAR_ARRAY",
- str_key);
+ if (!G_VALUE_HOLDS (value, DBUS_TYPE_G_UCHAR_ARRAY)) {
+ nm_log_warn (LOGD_DHCP, "key %s value type was not DBUS_TYPE_G_UCHAR_ARRAY", key);
return;
}
- str_value = garray_to_string ((GArray *) g_value_get_boxed (value), str_key);
- if (str_value)
- g_hash_table_insert (hash, g_strdup (str_key), str_value);
-}
-
-void
-nm_dhcp_client_new_options (NMDHCPClient *self,
- GHashTable *options,
- const char *reason)
-{
- NMDHCPClientPrivate *priv;
- guint32 old_state;
- guint32 new_state;
-
- g_return_if_fail (NM_IS_DHCP_CLIENT (self));
- g_return_if_fail (options != NULL);
- g_return_if_fail (reason != NULL);
+ if (g_str_has_prefix (key, OLD_TAG))
+ return;
- priv = NM_DHCP_CLIENT_GET_PRIVATE (self);
- old_state = priv->state;
- new_state = string_to_state (reason);
-
- /* Clear old and save new DHCP options */
- g_hash_table_remove_all (priv->options);
- g_hash_table_foreach (options, copy_option, priv->options);
-
- if (old_state == new_state) {
- /* dhclient will stay in the same state (or, really, provide the same
- * reason) for operations like RENEW and REBIND. We need to ensure
- * that triggers various DHCP lease change code, so we need to pass
- * along same-state transitions for these states.
- */
- if ( new_state != DHC_BOUND4
- && new_state != DHC_RENEW4
- && new_state != DHC_REBIND4
- && new_state != DHC_BOUND6
- && new_state != DHC_RENEW6
- && new_state != DHC_REBIND6)
+ /* Filter out stuff that's not actually new DHCP options */
+ for (p = ignored_keys; *p; p++) {
+ if (!strcmp (*p, key))
return;
}
- /* Handle changed device state */
- if (state_is_bound (new_state)) {
- /* Cancel the timeout if the DHCP client is now bound */
- timeout_cleanup (self);
- }
-
- if (priv->ipv6) {
- nm_log_info (LOGD_DHCP6, "(%s): DHCPv6 state changed %s -> %s",
- priv->iface,
- state_to_string (old_state),
- state_to_string (new_state));
- } else {
- nm_log_info (LOGD_DHCP4, "(%s): DHCPv4 state changed %s -> %s",
- priv->iface,
- state_to_string (old_state),
- state_to_string (new_state));
- }
+ if (g_str_has_prefix (key, NEW_TAG))
+ key += STRLEN (NEW_TAG);
+ if (!key[0])
+ return;
- dhcp_client_set_state (self, new_state, TRUE, FALSE);
+ str_value = garray_to_string ((GArray *) g_value_get_boxed (value), key);
+ if (str_value)
+ g_hash_table_insert (hash, g_strdup (key), str_value);
}
-#define NEW_TAG "new_"
-#define OLD_TAG "old_"
-
gboolean
-nm_dhcp_client_foreach_option (NMDHCPClient *self,
- GHFunc func,
- gpointer user_data)
-{
- NMDHCPClientPrivate *priv;
- GHashTableIter iter;
- gpointer iterkey, itervalue;
+nm_dhcp_client_handle_event (gpointer unused,
+ const char *iface,
+ gint pid,
+ GHashTable *options,
+ const char *reason,
+ NMDhcpClient *self)
+{
+ NMDhcpClientPrivate *priv;
+ guint32 old_state;
+ guint32 new_state;
+ GHashTable *str_options = NULL;
+ GObject *ip_config = NULL;
g_return_val_if_fail (NM_IS_DHCP_CLIENT (self), FALSE);
- g_return_val_if_fail (func != NULL, FALSE);
-
- priv = NM_DHCP_CLIENT_GET_PRIVATE (self);
-
- if (!state_is_bound (priv->state)) {
- if (priv->ipv6) {
- nm_log_warn (LOGD_DHCP6, "(%s): DHCPv6 client didn't bind to a lease.", priv->iface);
- } else {
- nm_log_warn (LOGD_DHCP4, "(%s): DHCPv4 client didn't bind to a lease.", priv->iface);
- }
- }
-
- g_hash_table_iter_init (&iter, priv->options);
- while (g_hash_table_iter_next (&iter, &iterkey, &itervalue)) {
- const char *key = iterkey, *value = itervalue;
- const char **p;
- static const char *filter_options[] = {
- "interface", "pid", "reason", "dhcp_message_type", NULL
- };
- gboolean ignore = FALSE;
-
- /* Filter out stuff that's not actually new DHCP options */
- for (p = filter_options; *p; p++) {
- if (!strcmp (*p, key) || !strncmp (key, OLD_TAG, strlen (OLD_TAG))) {
- ignore = TRUE;
- break;
- }
- }
-
- if (!ignore) {
- const char *tmp_key = key;
-
- /* Remove the "new_" prefix that dhclient passes back */
- if (!strncmp (key, NEW_TAG, strlen (NEW_TAG)))
- tmp_key = key + strlen (NEW_TAG);
-
- func ((gpointer) tmp_key, (gpointer) value, user_data);
- }
- }
- return TRUE;
-}
-
-/********************************************/
-
-static gboolean
-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;
-
- routes = g_strsplit (str, " ", 0);
- if (g_strv_length (routes) == 0)
- goto out;
-
- if ((g_strv_length (routes) % 2) != 0) {
- nm_log_warn (LOGD_DHCP4, " classless static routes provided, but invalid");
- goto out;
- }
-
- for (r = routes; *r; r += 2) {
- char *slash;
- NMPlatformIP4Route route;
- int rt_cidr = 32;
- guint32 rt_addr, rt_route;
-
- slash = strchr(*r, '/');
- if (slash) {
- *slash = '\0';
- errno = 0;
- rt_cidr = strtol (slash + 1, NULL, 10);
- if ((errno == EINVAL) || (errno == ERANGE)) {
- nm_log_warn (LOGD_DHCP4, "DHCP provided invalid classless static route cidr: '%s'", slash + 1);
- continue;
- }
- }
- if (inet_pton (AF_INET, *r, &rt_addr) <= 0) {
- nm_log_warn (LOGD_DHCP4, "DHCP provided invalid classless static route address: '%s'", *r);
- continue;
- }
- if (inet_pton (AF_INET, *(r + 1), &rt_route) <= 0) {
- nm_log_warn (LOGD_DHCP4, "DHCP provided invalid classless static route gateway: '%s'", *(r + 1));
- continue;
- }
-
- have_routes = TRUE;
- if (rt_cidr == 0 && rt_addr == 0) {
- /* FIXME: how to handle multiple routers? */
- *gwaddr = rt_route;
- } else {
- 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);
- }
- }
-
-out:
- g_strfreev (routes);
- return have_routes;
-}
-
-static const char **
-process_dhclient_rfc3442_route (const char **octets, NMPlatformIP4Route *route, gboolean *success)
-{
- const char **o = octets;
- int addr_len = 0, i = 0;
- long int tmp;
- char *next_hop;
- guint32 tmp_addr;
-
- *success = FALSE;
-
- if (!*o)
- return o; /* no prefix */
-
- tmp = strtol (*o, NULL, 10);
- if (tmp < 0 || tmp > 32) /* 32 == max IP4 prefix length */
- return o;
-
- memset (route, 0, sizeof (*route));
- route->plen = tmp;
- o++;
-
- if (tmp > 0)
- addr_len = ((tmp - 1) / 8) + 1;
-
- /* ensure there's at least the address + next hop left */
- if (g_strv_length ((char **) o) < addr_len + 4)
- goto error;
-
- if (tmp) {
- const char *addr[4] = { "0", "0", "0", "0" };
- char *str_addr;
-
- for (i = 0; i < addr_len; i++)
- addr[i] = *o++;
-
- str_addr = g_strjoin (".", addr[0], addr[1], addr[2], addr[3], NULL);
- if (inet_pton (AF_INET, str_addr, &tmp_addr) <= 0) {
- g_free (str_addr);
- goto error;
- }
- tmp_addr &= nm_utils_ip4_prefix_to_netmask ((guint32) tmp);
- route->network = tmp_addr;
- }
-
- /* Handle next hop */
- next_hop = g_strjoin (".", o[0], o[1], o[2], o[3], NULL);
- if (inet_pton (AF_INET, next_hop, &tmp_addr) <= 0) {
- g_free (next_hop);
- goto error;
- }
- route->gateway = tmp_addr;
- g_free (next_hop);
-
- *success = TRUE;
- return o + 4; /* advance to past the next hop */
-
-error:
- return o;
-}
-
-static gboolean
-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;
- NMPlatformIP4Route route;
- gboolean success;
-
- o = octets = g_strsplit_set (str, " .", 0);
- if (g_strv_length (octets) < 5) {
- nm_log_warn (LOGD_DHCP4, "ignoring invalid classless static routes '%s'", str);
- goto out;
- }
-
- while (*o) {
- 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 (!route.plen) {
- /* gateway passed as classless static route */
- *gwaddr = route.gateway;
- } else {
- char addr[INET_ADDRSTRLEN];
-
- /* normal route */
- route.source = NM_PLATFORM_SOURCE_DHCP;
- route.metric = priv->priority;
- nm_ip4_config_add_route (ip4_config, &route);
-
- nm_log_info (LOGD_DHCP4, " classless static route %s/%d gw %s",
- nm_utils_inet4_ntop (route.network, addr), route.plen,
- nm_utils_inet4_ntop (route.gateway, NULL));
- }
- }
-
-out:
- g_strfreev (octets);
- return have_routes;
-}
-
-static gboolean
-ip4_process_classless_routes (NMDHCPClient *self,
- GHashTable *options,
- NMIP4Config *ip4_config,
- guint32 *gwaddr)
-{
- const char *str, *p;
-
+ g_return_val_if_fail (iface != NULL, FALSE);
+ g_return_val_if_fail (pid > 0, FALSE);
g_return_val_if_fail (options != NULL, FALSE);
- g_return_val_if_fail (ip4_config != NULL, FALSE);
-
- *gwaddr = 0;
-
- /* dhcpd/dhclient in Fedora has support for rfc3442 implemented using a
- * slightly different format:
- *
- * option classless-static-routes = array of (destination-descriptor ip-address);
- *
- * which results in:
- *
- * 0 192.168.0.113 25.129.210.177.132 192.168.0.113 7.2 10.34.255.6
- *
- * dhcpcd supports classless static routes natively and uses this same
- * option identifier with the following format:
- *
- * 192.168.10.0/24 192.168.1.1 10.0.0.0/8 10.17.66.41
- */
- str = g_hash_table_lookup (options, "new_classless_static_routes");
-
- /* dhclient doesn't have actual support for rfc3442 classless static routes
- * upstream. Thus, people resort to defining the option in dhclient.conf
- * and using arbitrary formats like so:
- *
- * option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;
- *
- * See https://lists.isc.org/pipermail/dhcp-users/2008-December/007629.html
- */
- if (!str)
- str = g_hash_table_lookup (options, "new_rfc3442_classless_static_routes");
-
- /* Microsoft version; same as rfc3442 but with a different option # (249) */
- if (!str)
- str = g_hash_table_lookup (options, "new_ms_classless_static_routes");
-
- if (!str || !strlen (str))
- return FALSE;
-
- p = str;
- while (*p) {
- if (!g_ascii_isdigit (*p) && (*p != ' ') && (*p != '.') && (*p != '/')) {
- nm_log_warn (LOGD_DHCP4, "ignoring invalid classless static routes '%s'", str);
- return FALSE;
- }
- p++;
- };
-
- if (strchr (str, '/')) {
- /* dhcpcd format */
- return ip4_process_dhcpcd_rfc3442_routes (self, str, ip4_config, gwaddr);
- }
-
- return ip4_process_dhclient_rfc3442_routes (self, str, ip4_config, gwaddr);
-}
-
-static void
-process_classful_routes (NMDHCPClient *self, GHashTable *options, NMIP4Config *ip4_config)
-{
- NMDHCPClientPrivate *priv = NM_DHCP_CLIENT_GET_PRIVATE (self);
- const char *str;
- char **searches, **s;
-
- str = g_hash_table_lookup (options, "new_static_routes");
- if (!str)
- return;
-
- searches = g_strsplit (str, " ", 0);
- if ((g_strv_length (searches) % 2)) {
- nm_log_info (LOGD_DHCP, " static routes provided, but invalid");
- goto out;
- }
-
- for (s = searches; *s; s += 2) {
- 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);
- continue;
- }
- if (inet_pton (AF_INET, *(s + 1), &rt_route) <= 0) {
- nm_log_warn (LOGD_DHCP, "DHCP provided invalid static route gateway: '%s'", *(s + 1));
- continue;
- }
-
- // 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_add_route (ip4_config, &route);
- nm_log_info (LOGD_DHCP, " static route %s",
- nm_platform_ip4_route_to_string (&route));
- }
-
-out:
- g_strfreev (searches);
-}
-
-static void
-process_domain_search (const char *str, GFunc add_func, gpointer user_data)
-{
- char **searches, **s;
- char *unescaped, *p;
- int i;
-
- g_return_if_fail (str != NULL);
- g_return_if_fail (add_func != NULL);
-
- p = unescaped = g_strdup (str);
- do {
- p = strstr (p, "\\032");
- if (!p)
- break;
-
- /* Clear the escaped space with real spaces */
- for (i = 0; i < 4; i++)
- *p++ = ' ';
- } while (*p++);
-
- if (strchr (unescaped, '\\')) {
- nm_log_warn (LOGD_DHCP, " invalid domain search: '%s'", unescaped);
- goto out;
- }
-
- searches = g_strsplit (unescaped, " ", 0);
- for (s = searches; *s; s++) {
- if (strlen (*s)) {
- nm_log_info (LOGD_DHCP, " domain search '%s'", *s);
- add_func (*s, user_data);
- }
- }
- g_strfreev (searches);
-
-out:
- g_free (unescaped);
-}
-
-static void
-ip4_add_domain_search (gpointer data, gpointer user_data)
-{
- nm_ip4_config_add_search (NM_IP4_CONFIG (user_data), (const char *) data);
-}
-
-/* Given a table of DHCP options from the client, convert into an IP4Config */
-static NMIP4Config *
-ip4_options_to_config (NMDHCPClient *self)
-{
- NMDHCPClientPrivate *priv;
- NMIP4Config *ip4_config = NULL;
- guint32 tmp_addr;
- NMPlatformIP4Address address;
- char *str = NULL;
- guint32 gwaddr = 0, plen = 0;
-
- g_return_val_if_fail (NM_IS_DHCP_CLIENT (self), NULL);
+ g_return_val_if_fail (reason != NULL, FALSE);
priv = NM_DHCP_CLIENT_GET_PRIVATE (self);
- g_return_val_if_fail (priv->options != NULL, NULL);
-
- ip4_config = nm_ip4_config_new ();
- 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)) {
- 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)) {
- 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. */
- plen = nm_utils_ip4_get_default_prefix (address.address);
- nm_log_info (LOGD_DHCP4, " plen %d (default)", plen);
- }
- address.plen = plen;
-
- /* Routes: if the server returns classless static routes, we MUST ignore
- * the 'static_routes' option.
- */
- if (!ip4_process_classless_routes (self, priv->options, ip4_config, &gwaddr))
- process_classful_routes (self, priv->options, ip4_config);
-
- if (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.
- */
- str = g_hash_table_lookup (priv->options, "new_routers");
- if (str) {
- char **routers = g_strsplit (str, " ", 0);
- char **s;
-
- for (s = routers; *s; s++) {
- /* FIXME: how to handle multiple routers? */
- 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
- nm_log_warn (LOGD_DHCP4, "ignoring invalid gateway '%s'", *s);
- }
- g_strfreev (routers);
- }
- }
+ if (g_strcmp0 (priv->iface, iface) != 0)
+ return FALSE;
+ if (priv->pid != pid)
+ return FALSE;
- /*
- * 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));
+ old_state = priv->state;
+ new_state = reason_to_state (priv->iface, reason);
+ nm_log_dbg (LOGD_DHCP, "(%s): DHCP reason '%s' -> state '%s'",
+ iface, reason, state_to_string (new_state));
+
+ if (new_state == NM_DHCP_STATE_BOUND) {
+ /* Copy options */
+ str_options = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ g_hash_table_foreach (options, (GHFunc) copy_option, str_options);
+
+ /* Create the IP config */
+ g_warn_if_fail (g_hash_table_size (str_options));
+ if (g_hash_table_size (str_options)) {
+ if (priv->ipv6) {
+ ip_config = (GObject *) nm_dhcp_utils_ip6_config_from_options (priv->iface,
+ str_options,
+ priv->priority,
+ priv->info_only);
+ } else {
+ ip_config = (GObject *) nm_dhcp_utils_ip4_config_from_options (priv->iface,
+ str_options,
+ priv->priority);
}
+ g_warn_if_fail (ip_config != NULL);
}
- 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)
- nm_log_info (LOGD_DHCP4, " hostname '%s'", str);
-
- str = g_hash_table_lookup (priv->options, "new_domain_name_servers");
- if (str) {
- char **searches = g_strsplit (str, " ", 0);
- char **s;
-
- for (s = searches; *s; s++) {
- if (inet_pton (AF_INET, *s, &tmp_addr) > 0) {
- 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);
- }
- g_strfreev (searches);
- }
-
- str = g_hash_table_lookup (priv->options, "new_domain_name");
- if (str) {
- char **domains = g_strsplit (str, " ", 0);
- char **s;
-
- for (s = domains; *s; s++) {
- nm_log_info (LOGD_DHCP4, " domain name '%s'", *s);
- nm_ip4_config_add_domain (ip4_config, *s);
- }
- g_strfreev (domains);
- }
-
- str = g_hash_table_lookup (priv->options, "new_domain_search");
- if (str)
- process_domain_search (str, ip4_add_domain_search, ip4_config);
-
- str = g_hash_table_lookup (priv->options, "new_netbios_name_servers");
- if (str) {
- char **searches = g_strsplit (str, " ", 0);
- char **s;
-
- for (s = searches; *s; s++) {
- if (inet_pton (AF_INET, *s, &tmp_addr) > 0) {
- 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);
- }
- g_strfreev (searches);
- }
-
- str = g_hash_table_lookup (priv->options, "new_interface_mtu");
- if (str) {
- int int_mtu;
-
- errno = 0;
- int_mtu = strtol (str, NULL, 10);
- if ((errno == EINVAL) || (errno == ERANGE))
- goto error;
-
- if (int_mtu > 576)
- nm_ip4_config_set_mtu (ip4_config, int_mtu);
- }
-
- str = g_hash_table_lookup (priv->options, "new_nis_domain");
- if (str) {
- nm_log_info (LOGD_DHCP4, " NIS domain '%s'", str);
- nm_ip4_config_set_nis_domain (ip4_config, str);
- }
-
- str = g_hash_table_lookup (priv->options, "new_nis_servers");
- if (str) {
- char **searches = g_strsplit (str, " ", 0);
- char **s;
-
- for (s = searches; *s; s++) {
- if (inet_pton (AF_INET, *s, &tmp_addr) > 0) {
- 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);
- }
- g_strfreev (searches);
- }
-
- return ip4_config;
-
-error:
- g_object_unref (ip4_config);
- return NULL;
-}
-
-NMIP4Config *
-nm_dhcp_client_get_ip4_config (NMDHCPClient *self, gboolean test)
-{
- NMDHCPClientPrivate *priv;
-
- g_return_val_if_fail (NM_IS_DHCP_CLIENT (self), NULL);
-
- priv = NM_DHCP_CLIENT_GET_PRIVATE (self);
-
- if (test && !state_is_bound (priv->state)) {
- nm_log_warn (LOGD_DHCP4, "(%s): DHCPv4 client didn't bind to a lease.", priv->iface);
- return NULL;
- }
-
- if (!g_hash_table_size (priv->options)) {
- /* We never got a response from the DHCP client */
- return NULL;
- }
-
- return ip4_options_to_config (self);
-}
-
-/********************************************/
-
-static void
-ip6_add_domain_search (gpointer data, gpointer user_data)
-{
- nm_ip6_config_add_search (NM_IP6_CONFIG (user_data), (const char *) data);
-}
-
-/* Given a table of DHCP options from the client, convert into an IP6Config */
-static NMIP6Config *
-ip6_options_to_config (NMDHCPClient *self)
-{
- NMDHCPClientPrivate *priv;
- NMIP6Config *ip6_config = NULL;
- struct in6_addr tmp_addr;
- NMPlatformIP6Address address;
- char *str = NULL;
- GHashTableIter iter;
- gpointer key, value;
-
- 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);
-
- g_hash_table_iter_init (&iter, priv->options);
- while (g_hash_table_iter_next (&iter, &key, &value)) {
- nm_log_dbg (LOGD_DHCP6, "(%s): option '%s'=>'%s'",
- priv->iface, (const char *) key, (const char *) value);
- }
-
- ip6_config = nm_ip6_config_new ();
-
- 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");
- if (str) {
- if (!inet_pton (AF_INET6, str, &tmp_addr)) {
- nm_log_warn (LOGD_DHCP6, "(%s): DHCP returned invalid address '%s'",
- priv->iface, str);
- goto error;
- }
-
- 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;
- }
-
- str = g_hash_table_lookup (priv->options, "new_host_name");
- if (str)
- nm_log_info (LOGD_DHCP6, " hostname '%s'", str);
-
- str = g_hash_table_lookup (priv->options, "new_dhcp6_name_servers");
- if (str) {
- char **searches = g_strsplit (str, " ", 0);
- char **s;
-
- for (s = searches; *s; s++) {
- if (inet_pton (AF_INET6, *s, &tmp_addr) > 0) {
- nm_ip6_config_add_nameserver (ip6_config, &tmp_addr);
- nm_log_info (LOGD_DHCP6, " nameserver '%s'", *s);
- } else
- nm_log_warn (LOGD_DHCP6, "ignoring invalid nameserver '%s'", *s);
- }
- g_strfreev (searches);
}
- str = g_hash_table_lookup (priv->options, "new_dhcp6_domain_search");
- if (str)
- process_domain_search (str, ip6_add_domain_search, ip6_config);
+ nm_dhcp_client_set_state (self, new_state, ip_config, str_options);
- return ip6_config;
+ if (str_options)
+ g_hash_table_destroy (str_options);
+ g_clear_object (&ip_config);
-error:
- g_object_unref (ip6_config);
- return NULL;
-}
-
-NMIP6Config *
-nm_dhcp_client_get_ip6_config (NMDHCPClient *self, gboolean test)
-{
- NMDHCPClientPrivate *priv;
-
- g_return_val_if_fail (NM_IS_DHCP_CLIENT (self), NULL);
-
- priv = NM_DHCP_CLIENT_GET_PRIVATE (self);
-
- if (test && !state_is_bound (priv->state)) {
- nm_log_warn (LOGD_DHCP6, "(%s): DHCPv6 client didn't bind to a lease.", priv->iface);
- return NULL;
- }
-
- if (!g_hash_table_size (priv->options)) {
- /* We never got a response from the DHCP client */
- return NULL;
- }
-
- return ip6_options_to_config (self);
+ return TRUE;
}
/********************************************/
static void
-nm_dhcp_client_init (NMDHCPClient *self)
+nm_dhcp_client_init (NMDhcpClient *self)
{
- NMDHCPClientPrivate *priv = NM_DHCP_CLIENT_GET_PRIVATE (self);
-
- priv->options = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
- priv->pid = -1;
+ NM_DHCP_CLIENT_GET_PRIVATE (self)->pid = -1;
}
static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
- NMDHCPClientPrivate *priv = NM_DHCP_CLIENT_GET_PRIVATE (object);
+ NMDhcpClientPrivate *priv = NM_DHCP_CLIENT_GET_PRIVATE (object);
switch (prop_id) {
case PROP_IFACE:
g_value_set_string (value, priv->iface);
break;
+ case PROP_IFINDEX:
+ g_value_set_int (value, priv->ifindex);
+ break;
case PROP_HWADDR:
g_value_set_boxed (value, priv->hwaddr);
break;
@@ -1528,13 +826,18 @@ static void
set_property (GObject *object, guint prop_id,
const GValue *value, GParamSpec *pspec)
{
- NMDHCPClientPrivate *priv = NM_DHCP_CLIENT_GET_PRIVATE (object);
+ NMDhcpClientPrivate *priv = NM_DHCP_CLIENT_GET_PRIVATE (object);
switch (prop_id) {
case PROP_IFACE:
/* construct-only */
priv->iface = g_strdup (g_value_get_string (value));
break;
+ case PROP_IFINDEX:
+ /* construct-only */
+ priv->ifindex = g_value_get_int (value);
+ g_warn_if_fail (priv->ifindex > 0);
+ break;
case PROP_HWADDR:
/* construct only */
priv->hwaddr = g_value_dup_boxed (value);
@@ -1563,23 +866,17 @@ set_property (GObject *object, guint prop_id,
static void
dispose (GObject *object)
{
- NMDHCPClient *self = NM_DHCP_CLIENT (object);
- NMDHCPClientPrivate *priv = NM_DHCP_CLIENT_GET_PRIVATE (self);
+ NMDhcpClient *self = NM_DHCP_CLIENT (object);
+ NMDhcpClientPrivate *priv = NM_DHCP_CLIENT_GET_PRIVATE (self);
/* Stopping the client is left up to the controlling device
* explicitly since we may want to quit NetworkManager but not terminate
* the DHCP client.
*/
- if (priv->remove_id) {
- g_source_remove (priv->remove_id);
- priv->remove_id = 0;
- }
+ watch_cleanup (self);
+ timeout_cleanup (self);
- if (priv->options) {
- g_hash_table_destroy (priv->options);
- priv->options = NULL;
- }
g_clear_pointer (&priv->iface, g_free);
if (priv->hwaddr) {
@@ -1596,11 +893,11 @@ dispose (GObject *object)
}
static void
-nm_dhcp_client_class_init (NMDHCPClientClass *client_class)
+nm_dhcp_client_class_init (NMDhcpClientClass *client_class)
{
GObjectClass *object_class = G_OBJECT_CLASS (client_class);
- g_type_class_add_private (client_class, sizeof (NMDHCPClientPrivate));
+ g_type_class_add_private (client_class, sizeof (NMDhcpClientPrivate));
/* virtual methods */
object_class->dispose = dispose;
@@ -1612,78 +909,59 @@ nm_dhcp_client_class_init (NMDHCPClientClass *client_class)
g_object_class_install_property
(object_class, PROP_IFACE,
- g_param_spec_string (NM_DHCP_CLIENT_INTERFACE,
- "iface",
- "Interface",
+ g_param_spec_string (NM_DHCP_CLIENT_INTERFACE, "", "",
NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_IFINDEX,
+ g_param_spec_int (NM_DHCP_CLIENT_IFINDEX, "", "",
+ -1, G_MAXINT, -1,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property
(object_class, PROP_HWADDR,
- g_param_spec_boxed (NM_DHCP_CLIENT_HWADDR,
- "hwaddr",
- "hardware address",
+ g_param_spec_boxed (NM_DHCP_CLIENT_HWADDR, "", "",
G_TYPE_BYTE_ARRAY,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_IPV6,
- g_param_spec_boolean (NM_DHCP_CLIENT_IPV6,
- "ipv6",
- "IPv6",
+ g_param_spec_boolean (NM_DHCP_CLIENT_IPV6, "", "",
FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_UUID,
- g_param_spec_string (NM_DHCP_CLIENT_UUID,
- "uuid",
- "UUID",
+ g_param_spec_string (NM_DHCP_CLIENT_UUID, "", "",
NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
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_param_spec_uint (NM_DHCP_CLIENT_PRIORITY, "", "",
+ 0, G_MAXUINT32, 0,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_TIMEOUT,
- g_param_spec_uint (NM_DHCP_CLIENT_TIMEOUT,
- "timeout",
- "Timeout",
+ g_param_spec_uint (NM_DHCP_CLIENT_TIMEOUT, "", "",
0, G_MAXUINT, 45,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
/* signals */
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),
- NULL, NULL,
- g_cclosure_marshal_VOID__UINT,
- G_TYPE_NONE, 1, G_TYPE_UINT);
-
- 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),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-
- 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),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
+ G_STRUCT_OFFSET (NMDhcpClientClass, state_changed),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 3, G_TYPE_UINT, G_TYPE_OBJECT, G_TYPE_HASH_TABLE);
}
diff --git a/src/dhcp-manager/nm-dhcp-client.h b/src/dhcp-manager/nm-dhcp-client.h
index ad18926af..971c9dc04 100644
--- a/src/dhcp-manager/nm-dhcp-client.h
+++ b/src/dhcp-manager/nm-dhcp-client.h
@@ -16,8 +16,8 @@
* Copyright (C) 2005 - 2010 Red Hat, Inc.
*/
-#ifndef NM_DHCP_CLIENT_H
-#define NM_DHCP_CLIENT_H
+#ifndef __NETWORKMANAGER_DHCP_CLIENT_H__
+#define __NETWORKMANAGER_DHCP_CLIENT_H__
#include <glib.h>
#include <glib-object.h>
@@ -28,130 +28,142 @@
#include <nm-ip6-config.h>
#define NM_TYPE_DHCP_CLIENT (nm_dhcp_client_get_type ())
-#define NM_DHCP_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DHCP_CLIENT, NMDHCPClient))
-#define NM_DHCP_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DHCP_CLIENT, NMDHCPClientClass))
+#define NM_DHCP_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DHCP_CLIENT, NMDhcpClient))
+#define NM_DHCP_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DHCP_CLIENT, NMDhcpClientClass))
#define NM_IS_DHCP_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DHCP_CLIENT))
#define NM_IS_DHCP_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DHCP_CLIENT))
-#define NM_DHCP_CLIENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DHCP_CLIENT, NMDHCPClientClass))
+#define NM_DHCP_CLIENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DHCP_CLIENT, NMDhcpClientClass))
#define NM_DHCP_CLIENT_INTERFACE "iface"
+#define NM_DHCP_CLIENT_IFINDEX "ifindex"
#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 */
- DHC_PREINIT6, /* configuration started */
- DHC_BOUND4, /* IPv4 lease obtained */
- DHC_BOUND6, /* IPv6 lease obtained */
- DHC_IPV4LL, /* IPv4LL address obtained */
- DHC_RENEW4, /* IPv4 lease renewed */
- DHC_RENEW6, /* IPv6 lease renewed */
- DHC_REBOOT, /* have valid lease, but now obtained a different one */
- DHC_REBIND4, /* IPv4 new/different lease */
- DHC_REBIND6, /* IPv6 new/different lease */
- DHC_DEPREF6, /* IPv6 lease depreferred */
- DHC_STOP, /* remove old lease */
- DHC_STOP6, /* remove old lease */
- DHC_MEDIUM, /* media selection begun */
- DHC_TIMEOUT, /* timed out contacting DHCP server */
- DHC_FAIL, /* all attempts to contact server timed out, sleeping */
- DHC_EXPIRE, /* lease has expired, renewing */
- DHC_EXPIRE6, /* lease has expired, renewing */
- DHC_RELEASE, /* releasing lease */
- DHC_RELEASE6, /* releasing lease */
- DHC_START, /* sent when dhclient started OK */
- DHC_ABEND, /* dhclient exited abnormally */
- DHC_END, /* dhclient exited normally */
- DHC_END_OPTIONS, /* last option in subscription sent */
-} NMDHCPState;
+ NM_DHCP_STATE_UNKNOWN = 0,
+ NM_DHCP_STATE_BOUND, /* new lease or lease changed */
+ NM_DHCP_STATE_TIMEOUT, /* timed out contacting server */
+ NM_DHCP_STATE_DONE, /* client quit or stopped */
+ NM_DHCP_STATE_EXPIRE, /* lease expired or NAKed */
+ NM_DHCP_STATE_FAIL, /* failed for some reason */
+ __NM_DHCP_STATE_MAX,
+ NM_DHCP_STATE_MAX = __NM_DHCP_STATE_MAX - 1,
+} NMDhcpState;
typedef struct {
GObject parent;
-} NMDHCPClient;
+} NMDhcpClient;
typedef struct {
GObjectClass parent;
/* Methods */
- GPid (*ip4_start) (NMDHCPClient *self,
- const char *dhcp_client_id,
- GByteArray *anycast_addr,
- const char *hostname);
+ gboolean (*ip4_start) (NMDhcpClient *self,
+ const char *anycast_addr,
+ const char *last_ip4_address);
- GPid (*ip6_start) (NMDHCPClient *self,
- GByteArray *anycast_addr,
- const char *hostname,
- gboolean info_only,
- const GByteArray *duid);
+ gboolean (*ip6_start) (NMDhcpClient *self,
+ const char *anycast_addr,
+ gboolean info_only,
+ NMSettingIP6ConfigPrivacy privacy,
+ const GByteArray *duid);
- void (*stop) (NMDHCPClient *self,
- gboolean release,
- const GByteArray *duid);
+ void (*stop) (NMDhcpClient *self,
+ gboolean release,
+ const GByteArray *duid);
/**
* get_duid:
- * @self: the #NMDHCPClient
+ * @self: the #NMDhcpClient
*
* Attempts to find an existing DHCPv6 DUID for this client in the DHCP
* client's persistent configuration. Returned DUID should be the binary
* representation of the DUID. If no DUID is found, %NULL should be
* returned.
*/
- GByteArray * (*get_duid) (NMDHCPClient *self);
+ GByteArray * (*get_duid) (NMDhcpClient *self);
/* Signals */
- void (*state_changed) (NMDHCPClient *self, NMDHCPState state);
- void (*timeout) (NMDHCPClient *self);
- void (*remove) (NMDHCPClient *self);
-} NMDHCPClientClass;
+ void (*state_changed) (NMDhcpClient *self,
+ NMDhcpState state,
+ GObject *ip_config,
+ GHashTable *options);
+} NMDhcpClientClass;
GType nm_dhcp_client_get_type (void);
-GPid nm_dhcp_client_get_pid (NMDHCPClient *self);
+typedef const char *(*NMDhcpClientGetPathFunc) (void);
-const char *nm_dhcp_client_get_iface (NMDHCPClient *self);
+typedef GSList * (*NMDhcpClientGetLeaseConfigsFunc) (const char *iface,
+ const char *uuid,
+ gboolean ipv6,
+ guint32 default_route_metric);
-gboolean nm_dhcp_client_get_ipv6 (NMDHCPClient *self);
+void _nm_dhcp_client_register (GType gtype,
+ const char *name,
+ NMDhcpClientGetPathFunc get_path_func,
+ NMDhcpClientGetLeaseConfigsFunc get_lease_configs_func);
-const char *nm_dhcp_client_get_uuid (NMDHCPClient *self);
+pid_t nm_dhcp_client_get_pid (NMDhcpClient *self);
-gboolean nm_dhcp_client_start_ip4 (NMDHCPClient *self,
+const char *nm_dhcp_client_get_iface (NMDhcpClient *self);
+
+int nm_dhcp_client_get_ifindex (NMDhcpClient *self);
+
+gboolean nm_dhcp_client_get_ipv6 (NMDhcpClient *self);
+
+const char *nm_dhcp_client_get_uuid (NMDhcpClient *self);
+
+const GByteArray *nm_dhcp_client_get_duid (NMDhcpClient *self);
+
+const GByteArray *nm_dhcp_client_get_hw_addr (NMDhcpClient *self);
+
+guint32 nm_dhcp_client_get_priority (NMDhcpClient *self);
+
+GBytes *nm_dhcp_client_get_client_id (NMDhcpClient *self);
+
+const char *nm_dhcp_client_get_hostname (NMDhcpClient *self);
+
+gboolean nm_dhcp_client_start_ip4 (NMDhcpClient *self,
const char *dhcp_client_id,
- GByteArray *dhcp_anycast_addr,
- const char *hostname);
+ const char *dhcp_anycast_addr,
+ const char *hostname,
+ const char *last_ip4_address);
-gboolean nm_dhcp_client_start_ip6 (NMDHCPClient *self,
- GByteArray *dhcp_anycast_addr,
+gboolean nm_dhcp_client_start_ip6 (NMDhcpClient *self,
+ const char *dhcp_anycast_addr,
const char *hostname,
- gboolean info_only);
+ gboolean info_only,
+ NMSettingIP6ConfigPrivacy privacy);
-void nm_dhcp_client_stop (NMDHCPClient *self, gboolean release);
+void nm_dhcp_client_stop (NMDhcpClient *self, gboolean release);
-void nm_dhcp_client_new_options (NMDHCPClient *self,
- GHashTable *options,
- const char *reason);
+/* Backend helpers for subclasses */
+void nm_dhcp_client_stop_existing (const char *pid_file, const char *binary_name);
-gboolean nm_dhcp_client_foreach_option (NMDHCPClient *self,
- GHFunc func,
- gpointer user_data);
+void nm_dhcp_client_stop_pid (pid_t pid, const char *iface);
-NMIP4Config *nm_dhcp_client_get_ip4_config (NMDHCPClient *self, gboolean test);
+void nm_dhcp_client_watch_child (NMDhcpClient *self, pid_t pid);
-NMIP6Config *nm_dhcp_client_get_ip6_config (NMDHCPClient *self, gboolean test);
+void nm_dhcp_client_set_state (NMDhcpClient *self,
+ NMDhcpState new_state,
+ GObject *ip_config, /* NMIP4Config or NMIP6Config */
+ GHashTable *options); /* str:str hash */
-/* Backend helpers */
-void nm_dhcp_client_stop_existing (const char *pid_file, const char *binary_name);
+gboolean nm_dhcp_client_handle_event (gpointer unused,
+ const char *iface,
+ gint pid,
+ GHashTable *options,
+ const char *reason,
+ NMDhcpClient *self);
-void nm_dhcp_client_stop_pid (GPid pid, const char *iface);
+void nm_dhcp_client_set_client_id (NMDhcpClient *self, GBytes *client_id);
-#endif /* NM_DHCP_CLIENT_H */
+#endif /* __NETWORKMANAGER_DHCP_CLIENT_H__ */
diff --git a/src/dhcp-manager/nm-dhcp-dhclient-utils.c b/src/dhcp-manager/nm-dhcp-dhclient-utils.c
index 8527e6c0f..46e8e0b8d 100644
--- a/src/dhcp-manager/nm-dhcp-dhclient-utils.c
+++ b/src/dhcp-manager/nm-dhcp-dhclient-utils.c
@@ -17,21 +17,24 @@
* Copyright (C) 2011 Red Hat, Inc.
*/
-#include <config.h>
+#include "config.h"
#include <glib.h>
#include <glib/gi18n.h>
#include <string.h>
#include <ctype.h>
+#include <arpa/inet.h>
#include "nm-dhcp-dhclient-utils.h"
+#include "nm-dhcp-utils.h"
#include "nm-ip4-config.h"
#include "nm-utils.h"
+#include "nm-platform.h"
#include "NetworkManagerUtils.h"
+#include "gsystem-local-alloc.h"
+#include "nm-utils-internal.h"
#define CLIENTID_TAG "send dhcp-client-identifier"
-#define CLIENTID_FORMAT CLIENTID_TAG " \"%s\"; # added by NetworkManager"
-#define CLIENTID_FORMAT_OCTETS CLIENTID_TAG " %s; # added by NetworkManager"
#define HOSTNAME4_TAG "send host-name"
#define HOSTNAME4_FORMAT HOSTNAME4_TAG " \"%s\"; # added by NetworkManager"
@@ -71,32 +74,39 @@ add_hostname (GString *str, const char *format, const char *hostname)
}
static void
-add_ip4_config (GString *str, const char *dhcp_client_id, const char *hostname)
+add_ip4_config (GString *str, GBytes *client_id, const char *hostname)
{
- if (dhcp_client_id) {
- gboolean is_octets = TRUE;
- int i = 0;
+ if (client_id) {
+ const char *p;
+ gsize l;
+ guint i;
- while (dhcp_client_id[i]) {
- if ((i % 3) != 2 && !g_ascii_isxdigit (dhcp_client_id[i])) {
- is_octets = FALSE;
- break;
- }
- if ((i % 3) == 2 && dhcp_client_id[i] != ':') {
- is_octets = FALSE;
+ p = g_bytes_get_data (client_id, &l);
+ g_assert (p);
+
+ /* Allow type 0 (non-hardware address) to be represented as a string
+ * as long as all the characters are printable.
+ */
+ for (i = 1; (p[0] == 0) && i < l; i++) {
+ if (!g_ascii_isprint (p[i]))
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);
+ g_string_append (str, CLIENTID_TAG " ");
+ if (i < l) {
+ /* Unprintable; convert to a hex string */
+ for (i = 0; i < l; i++) {
+ if (i > 0)
+ g_string_append_c (str, ':');
+ g_string_append_printf (str, "%02x", (guint8) p[i]);
+ }
+ } else {
+ /* Printable; just add to the line minus the 'type' */
+ g_string_append_c (str, '"');
+ g_string_append_len (str, p + 1, l - 1);
+ g_string_append_c (str, '"');
+ }
+ g_string_append (str, "; # added by NetworkManager\n");
}
add_hostname (str, HOSTNAME4_FORMAT "\n", hostname);
@@ -124,19 +134,74 @@ add_ip6_config (GString *str, const char *hostname)
"send fqdn.server-update on;\n");
}
+static GBytes *
+read_client_id (const char *str)
+{
+ gs_free char *s = NULL;
+ char *p;
+
+ g_assert (!strncmp (str, CLIENTID_TAG, STRLEN (CLIENTID_TAG)));
+
+ str += STRLEN (CLIENTID_TAG);
+ while (g_ascii_isspace (*str))
+ str++;
+
+ if (*str == '"') {
+ s = g_strdup (str + 1);
+ p = strrchr (s, '"');
+ if (p)
+ *p = '\0';
+ else
+ return NULL;
+ } else
+ s = g_strdup (str);
+
+ g_strchomp (s);
+ if (s[strlen (s) - 1] == ';')
+ s[strlen (s) - 1] = '\0';
+
+ return nm_dhcp_utils_client_id_string_to_bytes (s);
+}
+
+GBytes *
+nm_dhcp_dhclient_get_client_id_from_config_file (const char *path)
+{
+ gs_free char *contents = NULL;
+ gs_strfreev char **lines = NULL;
+ char **line;
+
+ g_return_val_if_fail (path != NULL, NULL);
+
+ if (!g_file_test (path, G_FILE_TEST_EXISTS))
+ return NULL;
+
+ if (!g_file_get_contents (path, &contents, NULL, NULL))
+ return NULL;
+
+ lines = g_strsplit_set (contents, "\n\r", 0);
+ for (line = lines; lines && *line; line++) {
+ if (!strncmp (*line, CLIENTID_TAG, STRLEN (CLIENTID_TAG)))
+ return read_client_id (*line);
+ }
+ return NULL;
+}
+
char *
nm_dhcp_dhclient_create_config (const char *interface,
gboolean is_ip6,
- const char *dhcp_client_id,
- GByteArray *anycast_addr,
+ GBytes *client_id,
+ const char *anycast_addr,
const char *hostname,
const char *orig_path,
- const char *orig_contents)
+ const char *orig_contents,
+ GBytes **out_new_client_id)
{
GString *new_contents;
GPtrArray *alsoreq;
int i;
+ g_return_val_if_fail (!anycast_addr || nm_utils_hwaddr_valid (anycast_addr, ETH_ALEN), NULL);
+
new_contents = g_string_new (_("# Created by NetworkManager\n"));
alsoreq = g_ptr_array_sized_new (5);
@@ -153,11 +218,15 @@ nm_dhcp_dhclient_create_config (const char *interface,
if (!strlen (g_strstrip (p)))
continue;
- /* Override config file "dhcp-client-id" and use one from the
- * connection.
- */
- if (dhcp_client_id && !strncmp (p, CLIENTID_TAG, strlen (CLIENTID_TAG)))
- continue;
+ if (!strncmp (p, CLIENTID_TAG, strlen (CLIENTID_TAG))) {
+ /* Override config file "dhcp-client-id" and use one from the connection */
+ if (client_id)
+ continue;
+
+ /* Otherwise capture and return the existing client id */
+ if (out_new_client_id)
+ *out_new_client_id = read_client_id (p);
+ }
/* Override config file hostname and use one from the connection */
if (hostname) {
@@ -225,9 +294,8 @@ nm_dhcp_dhclient_create_config (const char *interface,
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, dhcp_client_id, hostname);
+ add_ip4_config (new_contents, 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");
@@ -246,22 +314,14 @@ nm_dhcp_dhclient_create_config (const char *interface,
g_string_append_c (new_contents, '\n');
- if (anycast_addr && anycast_addr->len == 6) {
- const guint8 *p_anycast_addr = anycast_addr->data;
-
+ if (anycast_addr) {
g_string_append_printf (new_contents, "interface \"%s\" {\n"
" initial-interval 1; \n"
- " anycast-mac ethernet %02x:%02x:%02x:%02x:%02x:%02x;\n"
+ " anycast-mac ethernet %s;\n"
"}\n",
- interface,
- p_anycast_addr[0], p_anycast_addr[1],
- p_anycast_addr[2], p_anycast_addr[3],
- p_anycast_addr[4], p_anycast_addr[5]);
+ interface, anycast_addr);
}
- /* 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);
}
@@ -629,7 +689,7 @@ nm_dhcp_dhclient_read_lease_ip_configs (const char *iface,
address.timestamp = now_monotonic_ts;
address.lifetime = address.preferred = expiry;
- address.source = NM_PLATFORM_SOURCE_DHCP;
+ address.source = NM_IP_CONFIG_SOURCE_DHCP;
ip4 = nm_ip4_config_new ();
nm_ip4_config_add_address (ip4, &address);
diff --git a/src/dhcp-manager/nm-dhcp-dhclient-utils.h b/src/dhcp-manager/nm-dhcp-dhclient-utils.h
index e8d91b314..a1828add4 100644
--- a/src/dhcp-manager/nm-dhcp-dhclient-utils.h
+++ b/src/dhcp-manager/nm-dhcp-dhclient-utils.h
@@ -16,8 +16,8 @@
* Copyright (C) 2010 Red Hat, Inc.
*/
-#ifndef NM_DHCP_DHCLIENT_UTILS_H
-#define NM_DHCP_DHCLIENT_UTILS_H
+#ifndef __NETWORKMANAGER_DHCP_DHCLIENT_UTILS_H__
+#define __NETWORKMANAGER_DHCP_DHCLIENT_UTILS_H__
#include <glib.h>
#include <glib-object.h>
@@ -27,11 +27,12 @@
char *nm_dhcp_dhclient_create_config (const char *interface,
gboolean is_ip6,
- const char *dhcp_client_id,
- GByteArray *anycast_addr,
+ GBytes *client_id,
+ const char *anycast_addr,
const char *hostname,
const char *orig_path,
- const char *orig_contents);
+ const char *orig_contents,
+ GBytes **out_new_client_id);
char *nm_dhcp_dhclient_escape_duid (const GByteArray *duid);
@@ -48,5 +49,7 @@ GSList *nm_dhcp_dhclient_read_lease_ip_configs (const char *iface,
gboolean ipv6,
GDateTime *now);
-#endif /* NM_DHCP_DHCLIENT_UTILS_H */
+GBytes *nm_dhcp_dhclient_get_client_id_from_config_file (const char *path);
+
+#endif /* __NETWORKMANAGER_DHCP_DHCLIENT_UTILS_H__ */
diff --git a/src/dhcp-manager/nm-dhcp-dhclient.c b/src/dhcp-manager/nm-dhcp-dhclient.c
index 4232ee0cc..504e8d5d1 100644
--- a/src/dhcp-manager/nm-dhcp-dhclient.c
+++ b/src/dhcp-manager/nm-dhcp-dhclient.c
@@ -18,6 +18,8 @@
* Copyright (C) 2005 - 2012 Red Hat, Inc.
*/
+#include "config.h"
+
#define _XOPEN_SOURCE
#include <time.h>
#undef _XOPEN_SOURCE
@@ -34,49 +36,35 @@
#include <arpa/inet.h>
#include <ctype.h>
-#include <config.h>
-
#include "nm-dhcp-dhclient.h"
#include "nm-utils.h"
#include "nm-logging.h"
#include "nm-dhcp-dhclient-utils.h"
#include "nm-dhcp-manager.h"
#include "nm-posix-signals.h"
+#include "NetworkManagerUtils.h"
+#include "nm-dhcp-listener.h"
+#include "gsystem-local-alloc.h"
-G_DEFINE_TYPE (NMDHCPDhclient, nm_dhcp_dhclient, NM_TYPE_DHCP_CLIENT)
+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 NM_DHCP_DHCLIENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DHCP_DHCLIENT, NMDhcpDhclientPrivate))
typedef struct {
- const char *path;
char *conf_file;
const char *def_leasefile;
char *lease_file;
char *pid_file;
-} NMDHCPDhclientPrivate;
+} NMDhcpDhclientPrivate;
-const char *
-nm_dhcp_dhclient_get_path (const char *try_first)
+static const char *
+nm_dhcp_dhclient_get_path (void)
{
- static const char *dhclient_paths[] = {
- "/sbin/dhclient",
- "/usr/sbin/dhclient",
- "/usr/pkg/sbin/dhclient",
- "/usr/local/sbin/dhclient",
- NULL
- };
- const char **path = dhclient_paths;
-
- if (strlen (try_first) && g_file_test (try_first, G_FILE_TEST_EXISTS))
- return try_first;
-
- while (*path != NULL) {
- if (g_file_test (*path, G_FILE_TEST_EXISTS))
- break;
- path++;
- }
+ const char *path = NULL;
- return *path;
+ if (WITH_DHCLIENT)
+ path = nm_utils_find_helper ("dhclient", DHCLIENT_PATH, NULL);
+ return path;
}
/**
@@ -136,10 +124,11 @@ get_dhclient_leasefile (const char *iface,
return NULL;
}
-GSList *
+static GSList *
nm_dhcp_dhclient_get_lease_ip_configs (const char *iface,
const char *uuid,
- gboolean ipv6)
+ gboolean ipv6,
+ guint32 default_route_metric)
{
char *contents = NULL;
char *leasefile;
@@ -165,10 +154,11 @@ static gboolean
merge_dhclient_config (const char *iface,
const char *conf_file,
gboolean is_ip6,
- const char *dhcp_client_id,
- GByteArray *anycast_addr,
+ GBytes *client_id,
+ const char *anycast_addr,
const char *hostname,
const char *orig_path,
+ GBytes **out_new_client_id,
GError **error)
{
char *orig = NULL, *new;
@@ -187,7 +177,7 @@ merge_dhclient_config (const char *iface,
}
}
- new = nm_dhcp_dhclient_create_config (iface, is_ip6, dhcp_client_id, anycast_addr, hostname, orig_path, orig);
+ new = nm_dhcp_dhclient_create_config (iface, is_ip6, client_id, anycast_addr, hostname, orig_path, orig, out_new_client_id);
g_assert (new);
success = g_file_set_contents (conf_file, new, -1, error);
g_free (new);
@@ -271,9 +261,10 @@ static char *
create_dhclient_config (const char *iface,
gboolean is_ip6,
const char *uuid,
- const char *dhcp_client_id,
- GByteArray *dhcp_anycast_addr,
- const char *hostname)
+ GBytes *client_id,
+ const char *dhcp_anycast_addr,
+ const char *hostname,
+ GBytes **out_new_client_id)
{
char *orig = NULL, *new = NULL;
GError *error = NULL;
@@ -298,7 +289,7 @@ create_dhclient_config (const char *iface,
}
error = NULL;
- success = merge_dhclient_config (iface, new, is_ip6, dhcp_client_id, dhcp_anycast_addr, hostname, orig, &error);
+ success = merge_dhclient_config (iface, new, is_ip6, client_id, dhcp_anycast_addr, hostname, orig, out_new_client_id, &error);
if (!success) {
nm_log_warn (LOGD_DHCP, "(%s): error creating dhclient%s configuration: %s",
iface, is_ip6 ? "6" : "", error->message);
@@ -324,23 +315,24 @@ dhclient_child_setup (gpointer user_data G_GNUC_UNUSED)
nm_unblock_posix_signals (NULL);
}
-static GPid
-dhclient_start (NMDHCPClient *client,
+static gboolean
+dhclient_start (NMDhcpClient *client,
const char *mode_opt,
const GByteArray *duid,
- gboolean release)
+ gboolean release,
+ pid_t *out_pid)
{
- NMDHCPDhclientPrivate *priv = NM_DHCP_DHCLIENT_GET_PRIVATE (client);
+ NMDhcpDhclientPrivate *priv = NM_DHCP_DHCLIENT_GET_PRIVATE (client);
GPtrArray *argv = NULL;
- GPid pid = -1;
+ pid_t pid;
GError *error = NULL;
- const char *iface, *uuid, *system_bus_address;
+ const char *iface, *uuid, *system_bus_address, *dhclient_path = NULL;
char *binary_name, *cmd_str, *pid_file = NULL, *system_bus_address_env = NULL;
gboolean ipv6, success;
guint log_domain;
char *escaped, *preferred_leasefile_path = NULL;
- g_return_val_if_fail (priv->pid_file == NULL, -1);
+ g_return_val_if_fail (priv->pid_file == NULL, FALSE);
iface = nm_dhcp_client_get_iface (client);
uuid = nm_dhcp_client_get_uuid (client);
@@ -348,9 +340,10 @@ dhclient_start (NMDHCPClient *client,
log_domain = ipv6 ? LOGD_DHCP6 : LOGD_DHCP4;
- if (!g_file_test (priv->path, G_FILE_TEST_EXISTS)) {
- nm_log_warn (log_domain, "%s does not exist.", priv->path);
- return -1;
+ dhclient_path = nm_dhcp_dhclient_get_path ();
+ if (!dhclient_path) {
+ nm_log_warn (log_domain, "dhclient could not be found");
+ return FALSE;
}
pid_file = g_strdup_printf (LOCALSTATEDIR "/run/dhclient%s-%s.pid",
@@ -358,7 +351,7 @@ dhclient_start (NMDHCPClient *client,
iface);
/* Kill any existing dhclient from the pidfile */
- binary_name = g_path_get_basename (priv->path);
+ binary_name = g_path_get_basename (dhclient_path);
nm_dhcp_client_stop_existing (pid_file, binary_name);
g_free (binary_name);
@@ -404,15 +397,21 @@ dhclient_start (NMDHCPClient *client,
iface, priv->lease_file,
error ? error->code : -1,
error && error->message ? error->message : "(unknown)");
- return -1;
+ g_free (pid_file);
+ return FALSE;
}
}
argv = g_ptr_array_new ();
- g_ptr_array_add (argv, (gpointer) priv->path);
+ g_ptr_array_add (argv, (gpointer) dhclient_path);
g_ptr_array_add (argv, (gpointer) "-d");
+ /* Be quiet. dhclient logs to syslog anyway. And we duplicate the syslog
+ * to stderr in case of NM running with --debug.
+ */
+ g_ptr_array_add (argv, (gpointer) "-q");
+
if (release)
g_ptr_array_add (argv, (gpointer) "-r");
@@ -456,68 +455,80 @@ dhclient_start (NMDHCPClient *client,
nm_log_dbg (log_domain, "running: %s", cmd_str);
g_free (cmd_str);
- if (!g_spawn_async (NULL, (char **) argv->pdata, NULL, G_SPAWN_DO_NOT_REAP_CHILD,
- &dhclient_child_setup, NULL, &pid, &error)) {
- nm_log_warn (log_domain, "dhclient failed to start: '%s'", error->message);
- g_error_free (error);
- pid = -1;
- } else {
+ if (g_spawn_async (NULL, (char **) argv->pdata, NULL,
+ G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_STDOUT_TO_DEV_NULL | G_SPAWN_STDERR_TO_DEV_NULL,
+ &dhclient_child_setup, NULL, &pid, &error)) {
+ g_assert (pid > 0);
nm_log_info (log_domain, "dhclient started with pid %d", pid);
+ if (release == FALSE)
+ nm_dhcp_client_watch_child (client, pid);
priv->pid_file = pid_file;
+ } else {
+ nm_log_warn (log_domain, "dhclient failed to start: '%s'", error->message);
+ g_error_free (error);
+ g_free (pid_file);
}
+ if (out_pid)
+ *out_pid = pid;
+
g_ptr_array_free (argv, TRUE);
g_free (system_bus_address_env);
- return pid;
+ return pid > 0 ? TRUE : FALSE;
}
-static GPid
-ip4_start (NMDHCPClient *client,
- const char *dhcp_client_id,
- GByteArray *dhcp_anycast_addr,
- const char *hostname)
+static gboolean
+ip4_start (NMDhcpClient *client, const char *dhcp_anycast_addr, const char *last_ip4_address)
{
- NMDHCPDhclientPrivate *priv = NM_DHCP_DHCLIENT_GET_PRIVATE (client);
- const char *iface, *uuid;
+ NMDhcpDhclientPrivate *priv = NM_DHCP_DHCLIENT_GET_PRIVATE (client);
+ GBytes *client_id;
+ gs_unref_bytes GBytes *new_client_id = NULL;
+ const char *iface, *uuid, *hostname;
+ gboolean success = FALSE;
iface = nm_dhcp_client_get_iface (client);
uuid = nm_dhcp_client_get_uuid (client);
+ client_id = nm_dhcp_client_get_client_id (client);
+ hostname = nm_dhcp_client_get_hostname (client);
- priv->conf_file = create_dhclient_config (iface, FALSE, uuid, dhcp_client_id, dhcp_anycast_addr, hostname);
- if (!priv->conf_file) {
+ priv->conf_file = create_dhclient_config (iface, FALSE, uuid, client_id, dhcp_anycast_addr, hostname, &new_client_id);
+ if (priv->conf_file) {
+ if (new_client_id)
+ nm_dhcp_client_set_client_id (client, new_client_id);
+ success = dhclient_start (client, NULL, NULL, FALSE, NULL);
+ } else
nm_log_warn (LOGD_DHCP4, "(%s): error creating dhclient configuration file.", iface);
- return -1;
- }
- return dhclient_start (client, NULL, NULL, FALSE);
+ return success;
}
-static GPid
-ip6_start (NMDHCPClient *client,
- GByteArray *dhcp_anycast_addr,
- const char *hostname,
+static gboolean
+ip6_start (NMDhcpClient *client,
+ const char *dhcp_anycast_addr,
gboolean info_only,
+ NMSettingIP6ConfigPrivacy privacy,
const GByteArray *duid)
{
- NMDHCPDhclientPrivate *priv = NM_DHCP_DHCLIENT_GET_PRIVATE (client);
- const char *iface, *uuid;
+ NMDhcpDhclientPrivate *priv = NM_DHCP_DHCLIENT_GET_PRIVATE (client);
+ const char *iface, *uuid, *hostname;
iface = nm_dhcp_client_get_iface (client);
uuid = nm_dhcp_client_get_uuid (client);
+ hostname = nm_dhcp_client_get_hostname (client);
- priv->conf_file = create_dhclient_config (iface, TRUE, uuid, NULL, dhcp_anycast_addr, hostname);
+ priv->conf_file = create_dhclient_config (iface, TRUE, uuid, NULL, dhcp_anycast_addr, hostname, NULL);
if (!priv->conf_file) {
nm_log_warn (LOGD_DHCP6, "(%s): error creating dhclient6 configuration file.", iface);
- return -1;
+ return FALSE;
}
- return dhclient_start (client, info_only ? "-S" : "-N", duid, FALSE);
+ return dhclient_start (client, info_only ? "-S" : "-N", duid, FALSE, NULL);
}
static void
-stop (NMDHCPClient *client, gboolean release, const GByteArray *duid)
+stop (NMDhcpClient *client, gboolean release, const GByteArray *duid)
{
- NMDHCPDhclientPrivate *priv = NM_DHCP_DHCLIENT_GET_PRIVATE (client);
+ NMDhcpDhclientPrivate *priv = NM_DHCP_DHCLIENT_GET_PRIVATE (client);
/* Chain up to parent */
NM_DHCP_CLIENT_CLASS (nm_dhcp_dhclient_parent_class)->stop (client, release, duid);
@@ -533,20 +544,37 @@ stop (NMDHCPClient *client, gboolean release, const GByteArray *duid)
}
if (release) {
- GPid rpid;
+ pid_t rpid = -1;
- rpid = dhclient_start (client, NULL, duid, TRUE);
- if (rpid > 0) {
+ if (dhclient_start (client, NULL, duid, TRUE, &rpid)) {
/* Wait a few seconds for the release to happen */
nm_dhcp_client_stop_pid (rpid, nm_dhcp_client_get_iface (client));
}
}
}
+static void
+state_changed (NMDhcpClient *client,
+ NMDhcpState state,
+ GObject *ip_config,
+ GHashTable *options)
+{
+ NMDhcpDhclientPrivate *priv = NM_DHCP_DHCLIENT_GET_PRIVATE (client);
+ gs_unref_bytes GBytes *client_id = NULL;
+
+ if (nm_dhcp_client_get_client_id (client))
+ return;
+ if (state != NM_DHCP_STATE_BOUND)
+ return;
+
+ client_id = nm_dhcp_dhclient_get_client_id_from_config_file (priv->conf_file);
+ nm_dhcp_client_set_client_id (client, client_id);
+}
+
static GByteArray *
-get_duid (NMDHCPClient *client)
+get_duid (NMDhcpClient *client)
{
- NMDHCPDhclientPrivate *priv = NM_DHCP_DHCLIENT_GET_PRIVATE (client);
+ NMDhcpDhclientPrivate *priv = NM_DHCP_DHCLIENT_GET_PRIVATE (client);
GByteArray *duid = NULL;
char *leasefile;
GError *error = NULL;
@@ -595,13 +623,11 @@ static const char *def_leasefiles[] = {
};
static void
-nm_dhcp_dhclient_init (NMDHCPDhclient *self)
+nm_dhcp_dhclient_init (NMDhcpDhclient *self)
{
- NMDHCPDhclientPrivate *priv = NM_DHCP_DHCLIENT_GET_PRIVATE (self);
+ NMDhcpDhclientPrivate *priv = NM_DHCP_DHCLIENT_GET_PRIVATE (self);
const char **iter = &def_leasefiles[0];
- priv->path = nm_dhcp_dhclient_get_path (DHCLIENT_PATH);
-
while (iter && *iter) {
if (g_file_test (*iter, G_FILE_TEST_EXISTS)) {
priv->def_leasefile = *iter;
@@ -613,12 +639,21 @@ nm_dhcp_dhclient_init (NMDHCPDhclient *self)
/* Fallback option */
if (!priv->def_leasefile)
priv->def_leasefile = SYSCONFDIR "/dhclient6.leases";
+
+ g_signal_connect (nm_dhcp_listener_get (),
+ NM_DHCP_LISTENER_EVENT,
+ G_CALLBACK (nm_dhcp_client_handle_event),
+ self);
}
static void
dispose (GObject *object)
{
- NMDHCPDhclientPrivate *priv = NM_DHCP_DHCLIENT_GET_PRIVATE (object);
+ NMDhcpDhclientPrivate *priv = NM_DHCP_DHCLIENT_GET_PRIVATE (object);
+
+ g_signal_handlers_disconnect_by_func (nm_dhcp_listener_get (),
+ G_CALLBACK (nm_dhcp_client_handle_event),
+ NM_DHCP_DHCLIENT (object));
g_free (priv->pid_file);
g_free (priv->conf_file);
@@ -628,12 +663,12 @@ dispose (GObject *object)
}
static void
-nm_dhcp_dhclient_class_init (NMDHCPDhclientClass *dhclient_class)
+nm_dhcp_dhclient_class_init (NMDhcpDhclientClass *dhclient_class)
{
- NMDHCPClientClass *client_class = NM_DHCP_CLIENT_CLASS (dhclient_class);
+ NMDhcpClientClass *client_class = NM_DHCP_CLIENT_CLASS (dhclient_class);
GObjectClass *object_class = G_OBJECT_CLASS (dhclient_class);
- g_type_class_add_private (dhclient_class, sizeof (NMDHCPDhclientPrivate));
+ g_type_class_add_private (dhclient_class, sizeof (NMDhcpDhclientPrivate));
/* virtual methods */
object_class->dispose = dispose;
@@ -642,5 +677,16 @@ nm_dhcp_dhclient_class_init (NMDHCPDhclientClass *dhclient_class)
client_class->ip6_start = ip6_start;
client_class->stop = stop;
client_class->get_duid = get_duid;
+ client_class->state_changed = state_changed;
+}
+
+static void __attribute__((constructor))
+register_dhcp_dhclient (void)
+{
+ g_type_init ();
+ _nm_dhcp_client_register (NM_TYPE_DHCP_DHCLIENT,
+ "dhclient",
+ nm_dhcp_dhclient_get_path,
+ nm_dhcp_dhclient_get_lease_ip_configs);
}
diff --git a/src/dhcp-manager/nm-dhcp-dhclient.h b/src/dhcp-manager/nm-dhcp-dhclient.h
index 20219a63e..5abcc08ee 100644
--- a/src/dhcp-manager/nm-dhcp-dhclient.h
+++ b/src/dhcp-manager/nm-dhcp-dhclient.h
@@ -16,8 +16,8 @@
* Copyright (C) 2005 - 2010 Red Hat, Inc.
*/
-#ifndef NM_DHCP_DHCLIENT_H
-#define NM_DHCP_DHCLIENT_H
+#ifndef __NETWORKMANAGER_DHCP_DHCLIENT_H__
+#define __NETWORKMANAGER_DHCP_DHCLIENT_H__
#include <glib.h>
#include <glib-object.h>
@@ -25,27 +25,21 @@
#include "nm-dhcp-client.h"
#define NM_TYPE_DHCP_DHCLIENT (nm_dhcp_dhclient_get_type ())
-#define NM_DHCP_DHCLIENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DHCP_DHCLIENT, NMDHCPDhclient))
-#define NM_DHCP_DHCLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DHCP_DHCLIENT, NMDHCPDhclientClass))
+#define NM_DHCP_DHCLIENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DHCP_DHCLIENT, NMDhcpDhclient))
+#define NM_DHCP_DHCLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DHCP_DHCLIENT, NMDhcpDhclientClass))
#define NM_IS_DHCP_DHCLIENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DHCP_DHCLIENT))
#define NM_IS_DHCP_DHCLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DHCP_DHCLIENT))
-#define NM_DHCP_DHCLIENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DHCP_DHCLIENT, NMDHCPDhclientClass))
+#define NM_DHCP_DHCLIENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DHCP_DHCLIENT, NMDhcpDhclientClass))
typedef struct {
- NMDHCPClient parent;
-} NMDHCPDhclient;
+ NMDhcpClient parent;
+} NMDhcpDhclient;
typedef struct {
- NMDHCPClientClass parent;
-} NMDHCPDhclientClass;
+ NMDhcpClientClass parent;
+} NMDhcpDhclientClass;
GType nm_dhcp_dhclient_get_type (void);
-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);
-
-#endif /* NM_DHCP_DHCLIENT_H */
+#endif /* __NETWORKMANAGER_DHCP_DHCLIENT_H__ */
diff --git a/src/dhcp-manager/nm-dhcp-dhcpcd.c b/src/dhcp-manager/nm-dhcp-dhcpcd.c
index acfbee269..e5a40c2fb 100644
--- a/src/dhcp-manager/nm-dhcp-dhcpcd.c
+++ b/src/dhcp-manager/nm-dhcp-dhcpcd.c
@@ -21,10 +21,10 @@
*/
-#include <config.h>
+#include "config.h"
+
#include <glib.h>
#include <glib/gi18n.h>
-#include <dbus/dbus.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
@@ -38,38 +38,25 @@
#include "nm-utils.h"
#include "nm-logging.h"
#include "nm-posix-signals.h"
+#include "NetworkManagerUtils.h"
+#include "nm-dhcp-listener.h"
-G_DEFINE_TYPE (NMDHCPDhcpcd, nm_dhcp_dhcpcd, NM_TYPE_DHCP_CLIENT)
+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 NM_DHCP_DHCPCD_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DHCP_DHCPCD, NMDhcpDhcpcdPrivate))
typedef struct {
- const char *path;
char *pid_file;
-} NMDHCPDhcpcdPrivate;
+} NMDhcpDhcpcdPrivate;
-const char *
-nm_dhcp_dhcpcd_get_path (const char *try_first)
+static const char *
+nm_dhcp_dhcpcd_get_path (void)
{
- static const char *dhcpcd_paths[] = {
- "/sbin/dhcpcd",
- "/usr/sbin/dhcpcd",
- "/usr/pkg/sbin/dhcpcd",
- "/usr/local/sbin/dhcpcd",
- NULL
- };
- const char **path = dhcpcd_paths;
-
- if (strlen (try_first) && g_file_test (try_first, G_FILE_TEST_EXISTS))
- return try_first;
-
- while (*path != NULL) {
- if (g_file_test (*path, G_FILE_TEST_EXISTS))
- break;
- path++;
- }
+ const char *path = NULL;
- return *path;
+ if (WITH_DHCPCD)
+ path = nm_utils_find_helper ("dhcpcd", DHCPCD_PATH, NULL);
+ return path;
}
static void
@@ -86,20 +73,17 @@ dhcpcd_child_setup (gpointer user_data G_GNUC_UNUSED)
nm_unblock_posix_signals (NULL);
}
-static GPid
-ip4_start (NMDHCPClient *client,
- const char *dhcp_client_id,
- GByteArray *dhcp_anycast_addr,
- const char *hostname)
+static gboolean
+ip4_start (NMDhcpClient *client, const char *dhcp_anycast_addr, const char *last_ip4_address)
{
- NMDHCPDhcpcdPrivate *priv = NM_DHCP_DHCPCD_GET_PRIVATE (client);
+ NMDhcpDhcpcdPrivate *priv = NM_DHCP_DHCPCD_GET_PRIVATE (client);
GPtrArray *argv = NULL;
- GPid pid = -1;
+ pid_t pid = -1;
GError *error = NULL;
char *pid_contents = NULL, *binary_name, *cmd_str;
- const char *iface;
+ const char *iface, *dhcpcd_path, *hostname;
- g_return_val_if_fail (priv->pid_file == NULL, -1);
+ g_return_val_if_fail (priv->pid_file == NULL, FALSE);
iface = nm_dhcp_client_get_iface (client);
@@ -108,18 +92,19 @@ ip4_start (NMDHCPClient *client,
*/
priv->pid_file = g_strdup_printf (RUNDIR "/dhcpcd-%s.pid", iface);
- if (!g_file_test (priv->path, G_FILE_TEST_EXISTS)) {
- nm_log_warn (LOGD_DHCP4, "%s does not exist.", priv->path);
- return -1;
+ dhcpcd_path = nm_dhcp_dhcpcd_get_path ();
+ if (!dhcpcd_path) {
+ nm_log_warn (LOGD_DHCP4, "dhcpcd could not be found");
+ return FALSE;
}
/* Kill any existing dhcpcd from the pidfile */
- binary_name = g_path_get_basename (priv->path);
+ binary_name = g_path_get_basename (dhcpcd_path);
nm_dhcp_client_stop_existing (priv->pid_file, binary_name);
g_free (binary_name);
argv = g_ptr_array_new ();
- g_ptr_array_add (argv, (gpointer) priv->path);
+ g_ptr_array_add (argv, (gpointer) dhcpcd_path);
g_ptr_array_add (argv, (gpointer) "-B"); /* Don't background on lease (disable fork()) */
@@ -127,6 +112,9 @@ ip4_start (NMDHCPClient *client,
g_ptr_array_add (argv, (gpointer) "-L"); /* Disable built-in IPv4LL since we use avahi-autoipd */
+ /* --noarp. Don't request or claim the address by ARP; this also disables IPv4LL. */
+ g_ptr_array_add (argv, (gpointer) "-A");
+
g_ptr_array_add (argv, (gpointer) "-G"); /* Let NM handle routing */
g_ptr_array_add (argv, (gpointer) "-c"); /* Set script file */
@@ -140,7 +128,8 @@ ip4_start (NMDHCPClient *client,
g_ptr_array_add (argv, (gpointer) "-4");
#endif
- if (hostname && strlen (hostname)) {
+ hostname = nm_dhcp_client_get_hostname (client);
+ if (hostname) {
g_ptr_array_add (argv, (gpointer) "-h"); /* Send hostname to DHCP server */
g_ptr_array_add (argv, (gpointer) hostname );
}
@@ -152,34 +141,37 @@ ip4_start (NMDHCPClient *client,
nm_log_dbg (LOGD_DHCP4, "running: %s", cmd_str);
g_free (cmd_str);
- if (!g_spawn_async (NULL, (char **) argv->pdata, NULL, G_SPAWN_DO_NOT_REAP_CHILD,
- &dhcpcd_child_setup, NULL, &pid, &error)) {
+ if (g_spawn_async (NULL, (char **) argv->pdata, NULL,
+ G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_STDOUT_TO_DEV_NULL | G_SPAWN_STDERR_TO_DEV_NULL,
+ &dhcpcd_child_setup, NULL, &pid, &error)) {
+ g_assert (pid > 0);
+ nm_log_info (LOGD_DHCP4, "dhcpcd started with pid %d", pid);
+ nm_dhcp_client_watch_child (client, pid);
+ } else {
nm_log_warn (LOGD_DHCP4, "dhcpcd failed to start. error: '%s'", error->message);
g_error_free (error);
- pid = -1;
- } else
- nm_log_info (LOGD_DHCP4, "dhcpcd started with pid %d", pid);
+ }
g_free (pid_contents);
g_ptr_array_free (argv, TRUE);
- return pid;
+ return pid > 0 ? TRUE : FALSE;
}
-static GPid
-ip6_start (NMDHCPClient *client,
- GByteArray *dhcp_anycast_addr,
- const char *hostname,
+static gboolean
+ip6_start (NMDhcpClient *client,
+ const char *dhcp_anycast_addr,
gboolean info_only,
+ NMSettingIP6ConfigPrivacy privacy,
const GByteArray *duid)
{
nm_log_warn (LOGD_DHCP6, "the dhcpcd backend does not support IPv6.");
- return -1;
+ return FALSE;
}
static void
-stop (NMDHCPClient *client, gboolean release, const GByteArray *duid)
+stop (NMDhcpClient *client, gboolean release, const GByteArray *duid)
{
- NMDHCPDhcpcdPrivate *priv = NM_DHCP_DHCPCD_GET_PRIVATE (client);
+ NMDhcpDhcpcdPrivate *priv = NM_DHCP_DHCPCD_GET_PRIVATE (client);
/* Chain up to parent */
NM_DHCP_CLIENT_CLASS (nm_dhcp_dhcpcd_parent_class)->stop (client, release, duid);
@@ -195,17 +187,22 @@ stop (NMDHCPClient *client, gboolean release, const GByteArray *duid)
/***************************************************/
static void
-nm_dhcp_dhcpcd_init (NMDHCPDhcpcd *self)
+nm_dhcp_dhcpcd_init (NMDhcpDhcpcd *self)
{
- NMDHCPDhcpcdPrivate *priv = NM_DHCP_DHCPCD_GET_PRIVATE (self);
-
- priv->path = nm_dhcp_dhcpcd_get_path (DHCPCD_PATH);
+ g_signal_connect (nm_dhcp_listener_get (),
+ NM_DHCP_LISTENER_EVENT,
+ G_CALLBACK (nm_dhcp_client_handle_event),
+ self);
}
static void
dispose (GObject *object)
{
- NMDHCPDhcpcdPrivate *priv = NM_DHCP_DHCPCD_GET_PRIVATE (object);
+ NMDhcpDhcpcdPrivate *priv = NM_DHCP_DHCPCD_GET_PRIVATE (object);
+
+ g_signal_handlers_disconnect_by_func (nm_dhcp_listener_get (),
+ G_CALLBACK (nm_dhcp_client_handle_event),
+ NM_DHCP_DHCPCD (object));
g_free (priv->pid_file);
@@ -213,12 +210,12 @@ dispose (GObject *object)
}
static void
-nm_dhcp_dhcpcd_class_init (NMDHCPDhcpcdClass *dhcpcd_class)
+nm_dhcp_dhcpcd_class_init (NMDhcpDhcpcdClass *dhcpcd_class)
{
- NMDHCPClientClass *client_class = NM_DHCP_CLIENT_CLASS (dhcpcd_class);
+ NMDhcpClientClass *client_class = NM_DHCP_CLIENT_CLASS (dhcpcd_class);
GObjectClass *object_class = G_OBJECT_CLASS (dhcpcd_class);
- g_type_class_add_private (dhcpcd_class, sizeof (NMDHCPDhcpcdPrivate));
+ g_type_class_add_private (dhcpcd_class, sizeof (NMDhcpDhcpcdPrivate));
/* virtual methods */
object_class->dispose = dispose;
@@ -228,3 +225,13 @@ nm_dhcp_dhcpcd_class_init (NMDHCPDhcpcdClass *dhcpcd_class)
client_class->stop = stop;
}
+static void __attribute__((constructor))
+register_dhcp_dhclient (void)
+{
+ g_type_init ();
+ _nm_dhcp_client_register (NM_TYPE_DHCP_DHCPCD,
+ "dhcpcd",
+ nm_dhcp_dhcpcd_get_path,
+ NULL);
+}
+
diff --git a/src/dhcp-manager/nm-dhcp-dhcpcd.h b/src/dhcp-manager/nm-dhcp-dhcpcd.h
index fb6b0628f..deed70e0f 100644
--- a/src/dhcp-manager/nm-dhcp-dhcpcd.h
+++ b/src/dhcp-manager/nm-dhcp-dhcpcd.h
@@ -16,8 +16,8 @@
* Copyright (C) 2005 - 2010 Red Hat, Inc.
*/
-#ifndef NM_DHCP_DHCPCD_H
-#define NM_DHCP_DHCPCD_H
+#ifndef __NETWORKMANAGER_DHCP_DHCPCD_H__
+#define __NETWORKMANAGER_DHCP_DHCPCD_H__
#include <glib.h>
#include <glib-object.h>
@@ -25,23 +25,21 @@
#include "nm-dhcp-client.h"
#define NM_TYPE_DHCP_DHCPCD (nm_dhcp_dhcpcd_get_type ())
-#define NM_DHCP_DHCPCD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DHCP_DHCPCD, NMDHCPDhcpcd))
-#define NM_DHCP_DHCPCD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DHCP_DHCPCD, NMDHCPDhcpcdClass))
+#define NM_DHCP_DHCPCD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DHCP_DHCPCD, NMDhcpDhcpcd))
+#define NM_DHCP_DHCPCD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DHCP_DHCPCD, NMDhcpDhcpcdClass))
#define NM_IS_DHCP_DHCPCD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DHCP_DHCPCD))
#define NM_IS_DHCP_DHCPCD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DHCP_DHCPCD))
-#define NM_DHCP_DHCPCD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DHCP_DHCPCD, NMDHCPDhcpcdClass))
+#define NM_DHCP_DHCPCD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DHCP_DHCPCD, NMDhcpDhcpcdClass))
typedef struct {
- NMDHCPClient parent;
-} NMDHCPDhcpcd;
+ NMDhcpClient parent;
+} NMDhcpDhcpcd;
typedef struct {
- NMDHCPClientClass parent;
-} NMDHCPDhcpcdClass;
+ NMDhcpClientClass parent;
+} NMDhcpDhcpcdClass;
GType nm_dhcp_dhcpcd_get_type (void);
-const char *nm_dhcp_dhcpcd_get_path (const char *try_first);
-
-#endif /* NM_DHCP_DHCPCD_H */
+#endif /* __NETWORKMANAGER_DHCP_DHCPCD_H__ */
diff --git a/src/dhcp-manager/nm-dhcp-helper.c b/src/dhcp-manager/nm-dhcp-helper.c
index 4ddfafe17..7855f68c9 100644
--- a/src/dhcp-manager/nm-dhcp-helper.c
+++ b/src/dhcp-manager/nm-dhcp-helper.c
@@ -18,184 +18,37 @@
* Copyright (C) 2007 - 2013 Red Hat, Inc.
*/
-/* for environ */
-#define _GNU_SOURCE
+#include "config.h"
-#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
-#include <config.h>
-
-#include <dbus/dbus.h>
+#include <gio/gio.h>
#define NM_DHCP_CLIENT_DBUS_IFACE "org.freedesktop.nm_dhcp_client"
-/**
- * _dbus_dict_open_write:
- * @iter: A valid dbus message iterator
- * @iter_dict: on return, a dict iterator to pass to further dict functions
- *
- * 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
-_dbus_dict_open_write (DBusMessageIter *iter, DBusMessageIter *iter_dict)
-{
- if (!iter || !iter_dict)
- return FALSE;
-
- 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);
-}
-
-/**
- * _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()
- *
- * 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
-_dbus_dict_close_write (DBusMessageIter *iter, DBusMessageIter *iter_dict)
-{
- if (!iter || !iter_dict)
- return FALSE;
-
- return dbus_message_iter_close_container (iter, iter_dict);
-}
-
-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))
- return FALSE;
-
- if (!dbus_message_iter_append_basic (iter_dict_entry, DBUS_TYPE_STRING, &key))
- return FALSE;
-
- return TRUE;
-}
-
-
-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))
- return FALSE;
- if (!dbus_message_iter_close_container (iter_dict, iter_dict_entry))
- return FALSE;
-
- return TRUE;
-}
-
-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 (!_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))
- return FALSE;
-
- 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])))
- return FALSE;
- }
-
- if (!dbus_message_iter_close_container (&iter_dict_val, &iter_array))
- return FALSE;
-
- 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.
- *
- * Returns: %TRUE on success, %FALSE on failure
- *
- */
-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 _dbus_add_dict_entry_byte_array (iter_dict, key, value, value_len);
-}
-
-
static const char * ignore[] = {"PATH", "SHLVL", "_", "PWD", "dhc_dbus", NULL};
-static dbus_bool_t
-build_message (DBusMessage * message)
+static GVariant *
+build_signal_parameters (void)
{
char **item;
- dbus_bool_t success = FALSE;
- DBusMessageIter iter, iter_dict;
+ GVariantBuilder builder;
- dbus_message_iter_init_append (message, &iter);
- if (!_dbus_dict_open_write (&iter, &iter_dict))
- goto out;
+ g_variant_builder_init (&builder, G_VARIANT_TYPE_VARDICT);
/* List environment and format for dbus dict */
for (item = environ; *item; item++) {
char *name, *val, **p;
/* Split on the = */
- name = strdup (*item);
+ name = g_strdup (*item);
val = strchr (name, '=');
- if (!val)
+ if (!val || val == name)
goto next;
*val++ = '\0';
- if (!strlen (val))
- val = NULL;
/* Ignore non-DCHP-related environment variables */
for (p = (char **) ignore; *p; p++) {
@@ -206,72 +59,82 @@ build_message (DBusMessage * message)
/* Value passed as a byte array rather than a string, because there are
* no character encoding guarantees with DHCP, and D-Bus requires
* strings to be UTF-8.
+ *
+ * Note that we can't use g_variant_new_bytestring() here, because that
+ * includes the trailing '\0'. (??!?)
*/
- if (!_dbus_dict_append_byte_array (&iter_dict,
- name,
- val ? val : "\0",
- val ? strlen (val) : 1)) {
- fprintf (stderr, "Error: failed to add item '%s' to signal\n", name);
- }
+ g_variant_builder_add (&builder, "{sv}",
+ name,
+ g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
+ val, strlen (val), 1));
next:
- free (name);
+ g_free (name);
}
- if (!_dbus_dict_close_write (&iter, &iter_dict))
- goto out;
-
- success = TRUE;
-
-out:
- return success;
+ return g_variant_new ("(a{sv})", &builder);
}
#if !HAVE_DBUS_GLIB_100
-static DBusConnection *
-shared_connection_init (void)
+/* It doesn't matter that nm-dhcp-helper doesn't use dbus-glib itself; the
+ * workaround code is for if the daemon is built with old dbus-glib.
+ */
+
+static gboolean ever_acquired = FALSE;
+
+static void
+on_name_acquired (GDBusConnection *connection,
+ const gchar *name,
+ gpointer user_data)
{
- DBusConnection * connection;
- DBusError error;
- int ret;
+ GMainLoop *loop = user_data;
- dbus_connection_set_change_sigpipe (TRUE);
+ ever_acquired = TRUE;
+ g_main_loop_quit (loop);
+}
- dbus_error_init (&error);
- connection = dbus_bus_get (DBUS_BUS_SYSTEM, &error);
- if (dbus_error_is_set (&error)) {
- fprintf (stderr, "Error: could not get the system bus. Make sure "
- "the message bus daemon is running! Message: (%s) %s\n",
- error.name,
- error.message);
- goto error;
+static void
+on_name_lost (GDBusConnection *connection,
+ const gchar *name,
+ gpointer user_data)
+{
+ if (ever_acquired) {
+ g_print ("Lost D-Bus name: exiting\n");
+ exit (0);
+ } else {
+ g_printerr ("Error: Could not acquire the NM DHCP client service.\n");
+ exit (1);
}
+}
- dbus_error_init (&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",
- error.name,
- error.message);
- goto error;
- }
+static GDBusConnection *
+shared_connection_init (void)
+{
+ GDBusConnection *connection;
+ GError *error = NULL;
+ GMainLoop *loop;
- if (ret != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) {
- fprintf (stderr, "Error: Could not acquire the NM DHCP client service "
- "as it is already taken. Return: %d\n",
- ret);
- goto error;
+ connection = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error);
+ if (!connection) {
+ g_dbus_error_strip_remote_error (error);
+ g_printerr ("Error: could not get the system bus. Make sure "
+ "the message bus daemon is running! Message: %s\n",
+ error->message);
+ g_error_free (error);
+ return NULL;
}
- return connection;
+ loop = g_main_loop_new (NULL, FALSE);
+ g_bus_own_name_on_connection (connection,
+ "org.freedesktop.nm_dhcp_client",
+ 0,
+ on_name_acquired,
+ on_name_lost,
+ loop, NULL);
+ g_main_loop_run (loop);
+ g_main_loop_unref (loop);
-error:
- if (dbus_error_is_set (&error))
- dbus_error_free (&error);
- if (connection)
- dbus_connection_unref (connection);
- return NULL;
+ return connection;
}
#endif
@@ -284,7 +147,7 @@ fatal_error (void)
if (pid_str)
pid = strtol (pid_str, NULL, 10);
if (pid) {
- fprintf (stderr, "Fatal error occured, killing dhclient instance with pid %d.\n", pid);
+ g_printerr ("Fatal error occured, killing dhclient instance with pid %d.\n", pid);
kill (pid, SIGTERM);
}
@@ -294,52 +157,46 @@ fatal_error (void)
int
main (int argc, char *argv[])
{
- DBusConnection *connection;
- DBusMessage *message;
- dbus_bool_t result;
- DBusError error;
-
- dbus_connection_set_change_sigpipe (TRUE);
+ GDBusConnection *connection;
+ GError *error = NULL;
- dbus_error_init (&error);
- connection = dbus_connection_open_private ("unix:path=" NMRUNDIR "/private-dhcp", &error);
+ connection = g_dbus_connection_new_for_address_sync ("unix:path=" NMRUNDIR "/private-dhcp",
+ G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT,
+ NULL, NULL, &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);
+ g_dbus_error_strip_remote_error (error);
+ g_printerr ("Error: could not connect to NetworkManager D-Bus socket: %s\n",
+ error->message);
+ g_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) {
- fprintf (stderr, "Error: Not enough memory to send DHCP Event signal.\n");
+ if (!g_dbus_connection_emit_signal (connection,
+ NULL,
+ "/",
+ NM_DHCP_CLIENT_DBUS_IFACE,
+ "Event",
+ build_signal_parameters (),
+ &error)) {
+ g_dbus_error_strip_remote_error (error);
+ g_printerr ("Error: Could not send DHCP Event signal: %s\n", error->message);
+ g_error_free (error);
fatal_error ();
}
- /* Dump environment variables into the message */
- result = build_message (message);
- if (result == FALSE) {
- fprintf (stderr, "Error: Not enough memory to send DHCP Event signal.\n");
+ if (!g_dbus_connection_flush_sync (connection, NULL, &error)) {
+ g_dbus_error_strip_remote_error (error);
+ g_printerr ("Error: Could not flush D-Bus connection: %s\n", error->message);
+ g_error_free (error);
fatal_error ();
}
- /* queue the message */
- result = dbus_connection_send (connection, message, NULL);
- if (!result) {
- fprintf (stderr, "Error: Could not send send DHCP Event signal.\n");
- fatal_error ();
- }
- dbus_message_unref (message);
-
- /* Send out the message */
- dbus_connection_flush (connection);
-
+ g_object_unref (connection);
return 0;
}
diff --git a/src/dhcp-manager/nm-dhcp-listener.c b/src/dhcp-manager/nm-dhcp-listener.c
new file mode 100644
index 000000000..b995c3485
--- /dev/null
+++ b/src/dhcp-manager/nm-dhcp-listener.c
@@ -0,0 +1,290 @@
+/* -*- 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 2014 Red Hat, Inc.
+ *
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <dbus/dbus.h>
+#include <sys/socket.h>
+#include <sys/wait.h>
+#include <signal.h>
+#include <string.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <unistd.h>
+
+#include "nm-dhcp-listener.h"
+#include "nm-logging.h"
+#include "nm-dbus-manager.h"
+#include "nm-dbus-glib-types.h"
+#include "nm-glib-compat.h"
+#include "NetworkManagerUtils.h"
+
+#define NM_DHCP_CLIENT_DBUS_IFACE "org.freedesktop.nm_dhcp_client"
+#define PRIV_SOCK_PATH NMRUNDIR "/private-dhcp"
+#define PRIV_SOCK_TAG "dhcp"
+
+typedef struct {
+ NMDBusManager * dbus_mgr;
+ guint new_conn_id;
+ guint dis_conn_id;
+ GHashTable * proxies;
+ DBusGProxy * proxy;
+} NMDhcpListenerPrivate;
+
+#define NM_DHCP_LISTENER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DHCP_LISTENER, NMDhcpListenerPrivate))
+
+G_DEFINE_TYPE (NMDhcpListener, nm_dhcp_listener, G_TYPE_OBJECT)
+
+enum {
+ EVENT,
+ LAST_SIGNAL
+};
+static guint signals[LAST_SIGNAL] = { 0 };
+
+/***************************************************/
+
+static char *
+garray_to_string (GArray *array, const char *key)
+{
+ GString *str;
+ int i;
+ unsigned char c;
+ char *converted = NULL;
+
+ g_return_val_if_fail (array != NULL, NULL);
+
+ /* Since the DHCP options come through environment variables, they should
+ * already be UTF-8 safe, but just make sure.
+ */
+ str = g_string_sized_new (array->len);
+ for (i = 0; i < array->len; i++) {
+ c = array->data[i];
+
+ /* Convert NULLs to spaces and non-ASCII characters to ? */
+ if (c == '\0')
+ c = ' ';
+ else if (c > 127)
+ c = '?';
+ str = g_string_append_c (str, c);
+ }
+ str = g_string_append_c (str, '\0');
+
+ converted = str->str;
+ if (!g_utf8_validate (converted, -1, NULL))
+ nm_log_warn (LOGD_DHCP, "DHCP option '%s' couldn't be converted to UTF-8", key);
+ g_string_free (str, FALSE);
+ return converted;
+}
+
+static char *
+get_option (GHashTable *hash, const char *key)
+{
+ GValue *value;
+
+ value = g_hash_table_lookup (hash, key);
+ if (value == NULL)
+ return NULL;
+
+ if (G_VALUE_TYPE (value) != DBUS_TYPE_G_UCHAR_ARRAY) {
+ nm_log_warn (LOGD_DHCP, "unexpected key %s value type was not "
+ "DBUS_TYPE_G_UCHAR_ARRAY",
+ (char *) key);
+ return NULL;
+ }
+
+ return garray_to_string ((GArray *) g_value_get_boxed (value), key);
+}
+
+static void
+handle_event (DBusGProxy *proxy,
+ GHashTable *options,
+ gpointer user_data)
+{
+ NMDhcpListener *self = NM_DHCP_LISTENER (user_data);
+ char *iface = NULL;
+ char *pid_str = NULL;
+ char *reason = NULL;
+ gint pid;
+ gboolean handled = FALSE;
+
+ iface = get_option (options, "interface");
+ if (iface == NULL) {
+ nm_log_warn (LOGD_DHCP, "DHCP event: didn't have associated interface.");
+ goto out;
+ }
+
+ pid_str = get_option (options, "pid");
+ pid = nm_utils_ascii_str_to_int64 (pid_str, 10, 0, G_MAXINT32, -1);
+ if (pid == -1) {
+ nm_log_warn (LOGD_DHCP, "DHCP event: couldn't convert PID '%s' to an integer", pid_str ? pid_str : "(null)");
+ goto out;
+ }
+
+ reason = get_option (options, "reason");
+ if (reason == NULL) {
+ nm_log_warn (LOGD_DHCP, "(pid %d) DHCP event didn't have a reason", pid);
+ goto out;
+ }
+
+ g_signal_emit (self, signals[EVENT], 0, iface, pid, options, reason, &handled);
+ if (!handled) {
+ if (g_ascii_strcasecmp (reason, "RELEASE") == 0) {
+ /* Ignore event when the dhcp client gets killed and we receive its last message */
+ nm_log_dbg (LOGD_DHCP, "(pid %d) unhandled RELEASE DHCP event for interface %s", pid, iface);
+ } else
+ nm_log_warn (LOGD_DHCP, "(pid %d) unhandled DHCP event for interface %s", pid, iface);
+ }
+
+out:
+ g_free (iface);
+ g_free (pid_str);
+ g_free (reason);
+}
+
+#if HAVE_DBUS_GLIB_100
+static void
+new_connection_cb (NMDBusManager *mgr,
+ DBusGConnection *connection,
+ NMDhcpListener *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 (handle_event), self, NULL);
+
+ g_hash_table_insert (NM_DHCP_LISTENER_GET_PRIVATE (self)->proxies, connection, proxy);
+}
+
+static void
+dis_connection_cb (NMDBusManager *mgr,
+ DBusGConnection *connection,
+ NMDhcpListener *self)
+{
+ NMDhcpListenerPrivate *priv = NM_DHCP_LISTENER_GET_PRIVATE (self);
+ DBusGProxy *proxy;
+
+ proxy = g_hash_table_lookup (priv->proxies, connection);
+ if (proxy) {
+ dbus_g_proxy_disconnect_signal (proxy, "Event", G_CALLBACK (handle_event), self);
+ g_hash_table_remove (priv->proxies, connection);
+ }
+}
+#endif
+
+/***************************************************/
+
+NMDhcpListener *
+nm_dhcp_listener_get (void)
+{
+ static NMDhcpListener *singleton = NULL;
+
+ if (G_UNLIKELY (singleton == NULL))
+ singleton = g_object_new (NM_TYPE_DHCP_LISTENER, NULL);
+ g_assert (singleton);
+ return singleton;
+}
+
+static void
+nm_dhcp_listener_init (NMDhcpListener *self)
+{
+ NMDhcpListenerPrivate *priv = NM_DHCP_LISTENER_GET_PRIVATE (self);
+#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);
+
+ 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,
+ G_CALLBACK (new_connection_cb),
+ self);
+ priv->dis_conn_id = g_signal_connect (priv->dbus_mgr,
+ NM_DBUS_MANAGER_PRIVATE_CONNECTION_DISCONNECTED "::" PRIV_SOCK_TAG,
+ G_CALLBACK (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 (handle_event), self, NULL);
+#endif
+}
+
+static void
+dispose (GObject *object)
+{
+ NMDhcpListenerPrivate *priv = NM_DHCP_LISTENER_GET_PRIVATE (object);
+
+ 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;
+ }
+ g_clear_object (&priv->proxy);
+
+ G_OBJECT_CLASS (nm_dhcp_listener_parent_class)->dispose (object);
+}
+
+static void
+nm_dhcp_listener_class_init (NMDhcpListenerClass *listener_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (listener_class);
+
+ g_type_class_add_private (listener_class, sizeof (NMDhcpListenerPrivate));
+
+ /* virtual methods */
+ object_class->dispose = dispose;
+
+ /* signals */
+ signals[EVENT] =
+ g_signal_new (NM_DHCP_LISTENER_EVENT,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST, 0,
+ g_signal_accumulator_true_handled,
+ NULL, NULL,
+ G_TYPE_BOOLEAN, /* listeners return TRUE if handled */
+ 4,
+ G_TYPE_STRING, /* iface */
+ G_TYPE_INT, /* pid */
+ G_TYPE_HASH_TABLE, /* options */
+ G_TYPE_STRING); /* reason */
+}
diff --git a/src/dhcp-manager/nm-dhcp-listener.h b/src/dhcp-manager/nm-dhcp-listener.h
new file mode 100644
index 000000000..15ec05310
--- /dev/null
+++ b/src/dhcp-manager/nm-dhcp-listener.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, 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 2014 Red Hat, Inc.
+ */
+
+#ifndef __NETWORKMANAGER_DHCP_LISTENER_H__
+#define __NETWORKMANAGER_DHCP_LISTENER_H__
+
+#include <glib.h>
+#include <glib-object.h>
+
+#define NM_TYPE_DHCP_LISTENER (nm_dhcp_listener_get_type ())
+#define NM_DHCP_LISTENER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DHCP_LISTENER, NMDhcpListener))
+#define NM_IS_DHCP_LISTENER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DHCP_LISTENER))
+#define NM_DHCP_LISTENER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DHCP_LISTENER, NMDhcpListenerClass))
+
+#define NM_DHCP_LISTENER_EVENT "event"
+
+typedef GObject NMDhcpListener;
+typedef GObjectClass NMDhcpListenerClass;
+
+GType nm_dhcp_listener_get_type (void);
+
+NMDhcpListener *nm_dhcp_listener_get (void);
+
+#endif /* __NETWORKMANAGER_DHCP_LISTENER_H__ */
diff --git a/src/dhcp-manager/nm-dhcp-manager.c b/src/dhcp-manager/nm-dhcp-manager.c
index ab6966cbb..f936f45c5 100644
--- a/src/dhcp-manager/nm-dhcp-manager.c
+++ b/src/dhcp-manager/nm-dhcp-manager.c
@@ -21,9 +21,9 @@
*/
#include "config.h"
+
#include <glib.h>
#include <glib/gi18n.h>
-#include <dbus/dbus.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <signal.h>
@@ -37,31 +37,15 @@
#include "nm-dhcp-manager.h"
#include "nm-dhcp-dhclient.h"
#include "nm-dhcp-dhcpcd.h"
+#include "nm-dhcp-systemd.h"
#include "nm-logging.h"
-#include "nm-dbus-manager.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)
-{
- static GQuark ret = 0;
-
- if (ret == 0)
- ret = g_quark_from_static_string ("nm_dhcp_manager_error");
-
- return ret;
-}
-
-#define NM_DHCP_CLIENT_DBUS_IFACE "org.freedesktop.nm_dhcp_client"
-
#define DHCP_TIMEOUT 45 /* default DHCP timeout, in seconds */
-#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";
@@ -69,336 +53,186 @@ typedef GSList * (*GetLeaseConfigFunc) (const char *iface, const char *uuid, gbo
typedef struct {
GType client_type;
- GetLeaseConfigFunc get_lease_ip_configs_func;
-
- NMDBusManager * dbus_mgr;
- guint new_conn_id;
- guint dis_conn_id;
- GHashTable * proxies;
-
GHashTable * clients;
- DBusGProxy * proxy;
char * default_hostname;
-} NMDHCPManagerPrivate;
+} NMDhcpManagerPrivate;
+
+#define NM_DHCP_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DHCP_MANAGER, NMDhcpManagerPrivate))
+G_DEFINE_TYPE (NMDhcpManager, nm_dhcp_manager, G_TYPE_OBJECT)
-#define NM_DHCP_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DHCP_MANAGER, NMDHCPManagerPrivate))
+/***************************************************/
+
+typedef struct {
+ GType gtype;
+ const char *name;
+ NMDhcpClientGetPathFunc get_path_func;
+ NMDhcpClientGetLeaseConfigsFunc get_lease_configs_func;
+} ClientDesc;
-G_DEFINE_TYPE (NMDHCPManager, nm_dhcp_manager, G_TYPE_OBJECT)
+static GSList *client_descs = NULL;
-static char *
-garray_to_string (GArray *array, const char *key)
+void
+_nm_dhcp_client_register (GType gtype,
+ const char *name,
+ NMDhcpClientGetPathFunc get_path_func,
+ NMDhcpClientGetLeaseConfigsFunc get_lease_configs_func)
{
- GString *str;
- int i;
- unsigned char c;
- char *converted = NULL;
+ ClientDesc *desc;
+ GSList *iter;
- g_return_val_if_fail (array != NULL, NULL);
+ g_return_if_fail (gtype != G_TYPE_INVALID);
+ g_return_if_fail (name != NULL);
- /* Since the DHCP options come through environment variables, they should
- * already be UTF-8 safe, but just make sure.
- */
- str = g_string_sized_new (array->len);
- for (i = 0; i < array->len; i++) {
- c = array->data[i];
-
- /* Convert NULLs to spaces and non-ASCII characters to ? */
- if (c == '\0')
- c = ' ';
- else if (c > 127)
- c = '?';
- str = g_string_append_c (str, c);
+ for (iter = client_descs; iter; iter = iter->next) {
+ desc = iter->data;
+ g_return_if_fail (desc->gtype != gtype);
+ g_return_if_fail (strcmp (desc->name, name) != 0);
}
- str = g_string_append_c (str, '\0');
- converted = str->str;
- if (!g_utf8_validate (converted, -1, NULL))
- nm_log_warn (LOGD_DHCP, "DHCP option '%s' couldn't be converted to UTF-8", key);
- g_string_free (str, FALSE);
- return converted;
+ desc = g_slice_new0 (ClientDesc);
+ desc->gtype = gtype;
+ desc->name = name;
+ desc->get_path_func = get_path_func;
+ desc->get_lease_configs_func = get_lease_configs_func;
+ client_descs = g_slist_prepend (client_descs, desc);
}
-static NMDHCPClient *
-get_client_for_pid (NMDHCPManager *manager, GPid pid)
+static ClientDesc *
+find_client_desc (const char *name, GType gtype)
{
- NMDHCPManagerPrivate *priv;
- GHashTableIter iter;
- gpointer value;
+ GSList *iter;
- g_return_val_if_fail (NM_IS_DHCP_MANAGER (manager), NULL);
-
- priv = NM_DHCP_MANAGER_GET_PRIVATE (manager);
+ g_return_val_if_fail (name || gtype, NULL);
- g_hash_table_iter_init (&iter, priv->clients);
- while (g_hash_table_iter_next (&iter, NULL, &value)) {
- NMDHCPClient *candidate = NM_DHCP_CLIENT (value);
+ for (iter = client_descs; iter; iter = iter->next) {
+ ClientDesc *desc = iter->data;
- if (nm_dhcp_client_get_pid (candidate) == pid)
- return candidate;
+ if (name && strcmp (desc->name, name) != 0)
+ continue;
+ if (gtype && desc->gtype != gtype)
+ continue;
+ return desc;
}
-
return NULL;
}
-static NMDHCPClient *
-get_client_for_iface (NMDHCPManager *manager,
- const char *iface,
- gboolean ip6)
+static GType
+is_client_enabled (const char *name, GError **error)
+{
+ ClientDesc *desc;
+
+ desc = find_client_desc (name, G_TYPE_INVALID);
+ if (desc && (!desc->get_path_func || desc->get_path_func()))
+ return desc->gtype;
+
+ g_set_error (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_FAILED,
+ _("'%s' support not found or not enabled."),
+ name);
+ return G_TYPE_INVALID;
+}
+
+/***************************************************/
+
+static NMDhcpClient *
+get_client_for_ifindex (NMDhcpManager *manager, int ifindex, gboolean ip6)
{
- NMDHCPManagerPrivate *priv;
+ NMDhcpManagerPrivate *priv;
GHashTableIter iter;
gpointer value;
g_return_val_if_fail (NM_IS_DHCP_MANAGER (manager), NULL);
- g_return_val_if_fail (iface, NULL);
+ g_return_val_if_fail (ifindex > 0, NULL);
priv = NM_DHCP_MANAGER_GET_PRIVATE (manager);
g_hash_table_iter_init (&iter, priv->clients);
while (g_hash_table_iter_next (&iter, NULL, &value)) {
- NMDHCPClient *candidate = NM_DHCP_CLIENT (value);
+ NMDhcpClient *candidate = NM_DHCP_CLIENT (value);
- if ( !strcmp (iface, nm_dhcp_client_get_iface (candidate))
- && (nm_dhcp_client_get_ipv6 (candidate) == ip6))
+ if ( nm_dhcp_client_get_ifindex (candidate) == ifindex
+ && nm_dhcp_client_get_ipv6 (candidate) == ip6)
return candidate;
}
return NULL;
}
-static char *
-get_option (GHashTable *hash, const char *key)
-{
- GValue *value;
-
- value = g_hash_table_lookup (hash, key);
- if (value == NULL)
- return NULL;
-
- if (G_VALUE_TYPE (value) != DBUS_TYPE_G_UCHAR_ARRAY) {
- nm_log_warn (LOGD_DHCP, "unexpected key %s value type was not "
- "DBUS_TYPE_G_UCHAR_ARRAY",
- (char *) key);
- return NULL;
- }
-
- return garray_to_string ((GArray *) g_value_get_boxed (value), key);
-}
-
-static void
-nm_dhcp_manager_handle_event (DBusGProxy *proxy,
- GHashTable *options,
- gpointer user_data)
-{
- NMDHCPManager *manager = NM_DHCP_MANAGER (user_data);
- NMDHCPClient *client;
- char *iface = NULL;
- char *pid_str = NULL;
- char *reason = NULL;
- long pid;
-
- iface = get_option (options, "interface");
- if (iface == NULL) {
- nm_log_warn (LOGD_DHCP, "DHCP event: didn't have associated interface.");
- goto out;
- }
-
- pid_str = get_option (options, "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;
- }
-
- reason = get_option (options, "reason");
- client = get_client_for_pid (manager, (GPid) pid);
- if (client == NULL) {
- 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')",
- pid, iface, nm_dhcp_client_get_iface (client));
- goto out;
- }
-
- if (reason == NULL) {
- nm_log_warn (LOGD_DHCP, "(pid %ld) DHCP event didn't have a reason", pid);
- goto out;
- }
-
- nm_dhcp_client_new_options (client, options, reason);
-
-out:
- g_free (iface);
- g_free (pid_str);
- 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)
{
- const char *dhclient_path = NULL;
- const char *dhcpcd_path = NULL;
-
- /* 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);
-
- if (!client) {
- if (dhclient_path)
- return NM_TYPE_DHCP_DHCLIENT;
- else if (dhcpcd_path)
- return NM_TYPE_DHCP_DHCPCD;
- else {
- g_set_error_literal (error,
- NM_DHCP_MANAGER_ERROR, NM_DHCP_MANAGER_ERROR_BAD_CLIENT,
- _("no usable DHCP client could be found."));
- return G_TYPE_INVALID;
- }
- }
-
- if (!strcmp (client, "dhclient")) {
- if (!dhclient_path) {
- g_set_error_literal (error,
- NM_DHCP_MANAGER_ERROR, NM_DHCP_MANAGER_ERROR_BAD_CLIENT,
- _("'dhclient' could be found."));
- return G_TYPE_INVALID;
+ GType client_gtype;
+
+ if (client)
+ client_gtype = is_client_enabled (client, error);
+ else {
+ /* Fallbacks */
+ client_gtype = is_client_enabled ("dhclient", NULL);
+ if (client_gtype == G_TYPE_INVALID)
+ client_gtype = is_client_enabled ("dhcpcd", NULL);
+ if (client_gtype == G_TYPE_INVALID)
+ client_gtype = is_client_enabled ("internal", NULL);
+ if (client_gtype == G_TYPE_INVALID) {
+ g_set_error_literal (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_FAILED,
+ _("no usable DHCP client could be found."));
}
- return NM_TYPE_DHCP_DHCLIENT;
}
-
- if (!strcmp (client, "dhcpcd")) {
- if (!dhcpcd_path) {
- g_set_error_literal (error,
- NM_DHCP_MANAGER_ERROR, NM_DHCP_MANAGER_ERROR_BAD_CLIENT,
- _("'dhcpcd' could be found."));
- return G_TYPE_INVALID;
- }
- return NM_TYPE_DHCP_DHCPCD;
- }
-
- g_set_error (error,
- NM_DHCP_MANAGER_ERROR, NM_DHCP_MANAGER_ERROR_BAD_CLIENT,
- _("unsupported DHCP client '%s'"), client);
- return G_TYPE_INVALID;
+ return client_gtype;
}
-#define REMOVE_ID_TAG "remove-id"
-#define TIMEOUT_ID_TAG "timeout-id"
+static void client_state_changed (NMDhcpClient *client,
+ NMDhcpState state,
+ GObject *ip_config,
+ GHashTable *options,
+ NMDhcpManager *self);
static void
-remove_client (NMDHCPManager *self, NMDHCPClient *client)
+remove_client (NMDhcpManager *self, NMDhcpClient *client)
{
- NMDHCPManagerPrivate *priv = NM_DHCP_MANAGER_GET_PRIVATE (self);
- guint id;
-
- id = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (client), REMOVE_ID_TAG));
- if (id)
- g_signal_handler_disconnect (client, id);
-
- id = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (client), TIMEOUT_ID_TAG));
- if (id)
- g_signal_handler_disconnect (client, id);
+ g_signal_handlers_disconnect_by_func (client, client_state_changed, self);
/* Stopping the client is left up to the controlling device
* explicitly since we may want to quit NetworkManager but not terminate
* the DHCP client.
*/
- g_hash_table_remove (priv->clients, client);
+ g_hash_table_remove (NM_DHCP_MANAGER_GET_PRIVATE (self)->clients, client);
}
static void
-add_client (NMDHCPManager *self, NMDHCPClient *client)
+client_state_changed (NMDhcpClient *client,
+ NMDhcpState state,
+ GObject *ip_config,
+ GHashTable *options,
+ NMDhcpManager *self)
{
- NMDHCPManagerPrivate *priv = NM_DHCP_MANAGER_GET_PRIVATE (self);
- guint id;
-
- 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, 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));
+ if (state >= NM_DHCP_STATE_TIMEOUT)
+ remove_client (self, client);
}
-static NMDHCPClient *
-client_start (NMDHCPManager *self,
+static NMDhcpClient *
+client_start (NMDhcpManager *self,
const char *iface,
+ int ifindex,
const GByteArray *hwaddr,
const char *uuid,
- guint priority,
+ guint32 priority,
gboolean ipv6,
const char *dhcp_client_id,
guint32 timeout,
- GByteArray *dhcp_anycast_addr,
+ const char *dhcp_anycast_addr,
const char *hostname,
- gboolean info_only)
+ gboolean info_only,
+ NMSettingIP6ConfigPrivacy privacy,
+ const char *last_ip4_address)
{
- NMDHCPManagerPrivate *priv;
- NMDHCPClient *client;
+ NMDhcpManagerPrivate *priv;
+ NMDhcpClient *client;
gboolean success = FALSE;
g_return_val_if_fail (self, NULL);
g_return_val_if_fail (NM_IS_DHCP_MANAGER (self), NULL);
- g_return_val_if_fail (iface != NULL, NULL);
+ g_return_val_if_fail (ifindex > 0, NULL);
g_return_val_if_fail (uuid != NULL, NULL);
priv = NM_DHCP_MANAGER_GET_PRIVATE (self);
@@ -407,32 +241,34 @@ client_start (NMDHCPManager *self,
g_return_val_if_fail (priv->client_type != 0, NULL);
/* Kill any old client instance */
- client = get_client_for_iface (self, iface, ipv6);
+ client = get_client_for_ifindex (self, ifindex, ipv6);
if (client) {
- nm_dhcp_client_stop (client, FALSE);
+ g_object_ref (client);
remove_client (self, client);
+ nm_dhcp_client_stop (client, FALSE);
+ g_object_unref (client);
}
/* And make a new one */
client = g_object_new (priv->client_type,
NM_DHCP_CLIENT_INTERFACE, iface,
+ NM_DHCP_CLIENT_IFINDEX, ifindex,
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);
+ g_hash_table_insert (NM_DHCP_MANAGER_GET_PRIVATE (self)->clients, client, g_object_ref (client));
+ g_signal_connect (client, NM_DHCP_CLIENT_SIGNAL_STATE_CHANGED, G_CALLBACK (client_state_changed), self);
if (ipv6)
- success = nm_dhcp_client_start_ip6 (client, dhcp_anycast_addr, hostname, info_only);
+ success = nm_dhcp_client_start_ip6 (client, dhcp_anycast_addr, hostname, info_only, privacy);
else
- success = nm_dhcp_client_start_ip4 (client, dhcp_client_id, dhcp_anycast_addr, hostname);
+ success = nm_dhcp_client_start_ip4 (client, dhcp_client_id, dhcp_anycast_addr, hostname, last_ip4_address);
if (!success) {
remove_client (self, client);
- g_object_unref (client);
client = NULL;
}
@@ -440,134 +276,105 @@ client_start (NMDHCPManager *self,
}
static const char *
-get_send_hostname (NMDHCPManager *self, const char *setting_hostname)
+get_send_hostname (NMDhcpManager *self, const char *setting_hostname)
{
- NMDHCPManagerPrivate *priv = NM_DHCP_MANAGER_GET_PRIVATE (self);
+ 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,
+/* Caller owns a reference to the NMDhcpClient on return */
+NMDhcpClient *
+nm_dhcp_manager_start_ip4 (NMDhcpManager *self,
const char *iface,
+ int ifindex,
const GByteArray *hwaddr,
const char *uuid,
- guint priority,
- NMSettingIP4Config *s_ip4,
+ guint32 priority,
+ gboolean send_hostname,
+ const char *dhcp_hostname,
+ const char *dhcp_client_id,
guint32 timeout,
- GByteArray *dhcp_anycast_addr)
+ const char *dhcp_anycast_addr,
+ const char *last_ip_address)
{
- const char *hostname = NULL, *method;
- gboolean send_hostname;
+ const char *hostname = NULL;
- g_return_val_if_fail (self, NULL);
g_return_val_if_fail (NM_IS_DHCP_MANAGER (self), NULL);
- method = nm_setting_ip4_config_get_method (s_ip4);
- 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 = get_send_hostname (self, nm_setting_ip4_config_get_dhcp_hostname (s_ip4));
-
- 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);
+ hostname = get_send_hostname (self, dhcp_hostname);
+ return client_start (self, iface, ifindex, hwaddr, uuid, priority, FALSE,
+ dhcp_client_id, timeout, dhcp_anycast_addr, hostname,
+ FALSE, 0, last_ip_address);
}
-/* Caller owns a reference to the NMDHCPClient on return */
-NMDHCPClient *
-nm_dhcp_manager_start_ip6 (NMDHCPManager *self,
+/* Caller owns a reference to the NMDhcpClient on return */
+NMDhcpClient *
+nm_dhcp_manager_start_ip6 (NMDhcpManager *self,
const char *iface,
+ int ifindex,
const GByteArray *hwaddr,
const char *uuid,
- guint priority,
- NMSettingIP6Config *s_ip6,
+ guint32 priority,
+ gboolean send_hostname,
+ const char *dhcp_hostname,
guint32 timeout,
- GByteArray *dhcp_anycast_addr,
- gboolean info_only)
+ const char *dhcp_anycast_addr,
+ gboolean info_only,
+ NMSettingIP6ConfigPrivacy privacy)
{
- const char *hostname;
+ const char *hostname = NULL;
g_return_val_if_fail (NM_IS_DHCP_MANAGER (self), NULL);
- hostname = get_send_hostname (self, nm_setting_ip6_config_get_dhcp_hostname (s_ip6));
-
- return client_start (self, iface, hwaddr, uuid, priority, TRUE,
- NULL, timeout, dhcp_anycast_addr, hostname, info_only);
+ if (send_hostname)
+ hostname = get_send_hostname (self, dhcp_hostname);
+ return client_start (self, iface, ifindex, hwaddr, uuid, priority, TRUE,
+ NULL, timeout, dhcp_anycast_addr, hostname, info_only,
+ privacy, NULL);
}
void
-nm_dhcp_manager_set_default_hostname (NMDHCPManager *manager, const char *hostname)
+nm_dhcp_manager_set_default_hostname (NMDhcpManager *manager, const char *hostname)
{
- NMDHCPManagerPrivate *priv = NM_DHCP_MANAGER_GET_PRIVATE (manager);
+ NMDhcpManagerPrivate *priv = NM_DHCP_MANAGER_GET_PRIVATE (manager);
g_clear_pointer (&priv->default_hostname, g_free);
/* Never send 'localhost'-type names to the DHCP server */
- if (g_strcmp0 (hostname, "localhost.localdomain") == 0 ||
- g_strcmp0 (hostname, "localhost6.localdomain6") == 0)
+ if (!nm_utils_is_specific_hostname (hostname))
return;
priv->default_hostname = g_strdup (hostname);
}
GSList *
-nm_dhcp_manager_get_lease_ip_configs (NMDHCPManager *self,
+nm_dhcp_manager_get_lease_ip_configs (NMDhcpManager *self,
const char *iface,
const char *uuid,
- gboolean ipv6)
+ gboolean ipv6,
+ guint32 default_route_metric)
{
- NMDHCPManagerPrivate *priv;
+ ClientDesc *desc;
g_return_val_if_fail (NM_IS_DHCP_MANAGER (self), NULL);
g_return_val_if_fail (iface != NULL, NULL);
g_return_val_if_fail (uuid != NULL, NULL);
- priv = NM_DHCP_MANAGER_GET_PRIVATE (self);
-
- if (priv->get_lease_ip_configs_func)
- return priv->get_lease_ip_configs_func (iface, uuid, ipv6);
+ desc = find_client_desc (NULL, NM_DHCP_MANAGER_GET_PRIVATE (self)->client_type);
+ if (desc && desc->get_lease_configs_func)
+ return desc->get_lease_configs_func (iface, uuid, ipv6, default_route_metric);
return NULL;
}
-NMIP4Config *
-nm_dhcp_manager_test_ip4_options_to_config (const char *dhcp_client,
- const char *iface,
- GHashTable *options,
- const char *reason)
-{
- NMDHCPClient *client;
- NMIP4Config *config;
- GType client_type;
- GError *error = NULL;
-
- client_type = get_client_type (dhcp_client, &error);
- if (!client_type) {
- nm_log_err (LOGD_DHCP4, "error: %s", error ? error->message : "(unknown)");
- g_clear_error (&error);
- return NULL;
- }
-
- client = (NMDHCPClient *) g_object_new (client_type,
- NM_DHCP_CLIENT_INTERFACE, iface,
- NULL);
- g_return_val_if_fail (client != NULL, NULL);
- nm_dhcp_client_new_options (client, options, reason);
- config = nm_dhcp_client_get_ip4_config (client, TRUE);
- g_object_unref (client);
-
- return config;
-}
-
/***************************************************/
-NMDHCPManager *
+NMDhcpManager *
nm_dhcp_manager_get (void)
{
- static NMDHCPManager *singleton = NULL;
+ static NMDhcpManager *singleton = NULL;
if (G_UNLIKELY (singleton == NULL))
singleton = g_object_new (NM_TYPE_DHCP_MANAGER, NULL);
@@ -576,67 +383,48 @@ nm_dhcp_manager_get (void)
}
static void
-nm_dhcp_manager_init (NMDHCPManager *self)
+nm_dhcp_manager_init (NMDhcpManager *self)
{
- NMDHCPManagerPrivate *priv = NM_DHCP_MANAGER_GET_PRIVATE (self);
+ NMDhcpManagerPrivate *priv = NM_DHCP_MANAGER_GET_PRIVATE (self);
+ NMConfig *config = nm_config_get ();
const char *client;
GError *error = NULL;
-#if !HAVE_DBUS_GLIB_100
- DBusGConnection *g_connection;
-#endif
+ GSList *iter;
- /* Maps DBusGConnection :: DBusGProxy */
- priv->proxies = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, g_object_unref);
+ for (iter = client_descs; iter; iter = iter->next) {
+ ClientDesc *desc = iter->data;
+
+ nm_log_dbg (LOGD_DHCP, "Registered DHCP client '%s' (%s)",
+ desc->name, g_type_name (desc->gtype));
+ }
/* Client-specific setup */
- client = nm_config_get_dhcp_client (nm_config_get ());
- priv->client_type = get_client_type (client, &error);
+ client = nm_config_get_dhcp_client (config);
+ if (nm_config_get_configure_and_quit (config)) {
+ if (g_strcmp0 (client, "internal") != 0)
+ nm_log_warn (LOGD_DHCP, "Using internal DHCP client since configure-and-quit is set.");
+ client = "internal";
+ }
- 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) {
+ priv->client_type = get_client_type (client, &error);
+ if (priv->client_type == G_TYPE_INVALID) {
nm_log_warn (LOGD_DHCP, "No usable DHCP client found (%s)! DHCP configurations will fail.",
error->message);
+ } else {
+ nm_log_dbg (LOGD_DHCP, "Using DHCP client '%s'", find_client_desc (NULL, priv->client_type)->name);
+
}
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
dispose (GObject *object)
{
- NMDHCPManagerPrivate *priv = NM_DHCP_MANAGER_GET_PRIVATE (object);
+ NMDhcpManagerPrivate *priv = NM_DHCP_MANAGER_GET_PRIVATE (object);
GList *values, *iter;
if (priv->clients) {
@@ -646,30 +434,13 @@ 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);
}
static void
finalize (GObject *object)
{
- NMDHCPManagerPrivate *priv = NM_DHCP_MANAGER_GET_PRIVATE (object);
+ NMDhcpManagerPrivate *priv = NM_DHCP_MANAGER_GET_PRIVATE (object);
g_free (priv->default_hostname);
@@ -680,11 +451,11 @@ finalize (GObject *object)
}
static void
-nm_dhcp_manager_class_init (NMDHCPManagerClass *manager_class)
+nm_dhcp_manager_class_init (NMDhcpManagerClass *manager_class)
{
GObjectClass *object_class = G_OBJECT_CLASS (manager_class);
- g_type_class_add_private (manager_class, sizeof (NMDHCPManagerPrivate));
+ g_type_class_add_private (manager_class, sizeof (NMDhcpManagerPrivate));
/* virtual methods */
object_class->finalize = finalize;
diff --git a/src/dhcp-manager/nm-dhcp-manager.h b/src/dhcp-manager/nm-dhcp-manager.h
index efdd43788..bf6cc7786 100644
--- a/src/dhcp-manager/nm-dhcp-manager.h
+++ b/src/dhcp-manager/nm-dhcp-manager.h
@@ -19,81 +19,71 @@
* Copyright (C) 2006 - 2008 Novell, Inc.
*/
-#ifndef NM_DHCP_MANAGER_H
-#define NM_DHCP_MANAGER_H
+#ifndef __NETWORKMANAGER_DHCP_MANAGER_H__
+#define __NETWORKMANAGER_DHCP_MANAGER_H__
#include <glib.h>
#include <glib-object.h>
-#include <nm-setting-ip4-config.h>
-#include <nm-setting-ip6-config.h>
-
#include "nm-dhcp-client.h"
#include "nm-ip4-config.h"
#include "nm-dhcp4-config.h"
-typedef enum {
- NM_DHCP_MANAGER_ERROR_BAD_CLIENT = 0, /*< nick=BadClient >*/
- NM_DHCP_MANAGER_ERROR_INTERNAL = 1, /*< nick=InternalError >*/
-} NMDHCPManagerError;
-
-#define NM_DHCP_MANAGER_ERROR (nm_dhcp_manager_error_quark ())
-
-GQuark nm_dhcp_manager_error_quark (void);
-
-
#define NM_TYPE_DHCP_MANAGER (nm_dhcp_manager_get_type ())
-#define NM_DHCP_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DHCP_MANAGER, NMDHCPManager))
-#define NM_DHCP_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DHCP_MANAGER, NMDHCPManagerClass))
+#define NM_DHCP_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DHCP_MANAGER, NMDhcpManager))
+#define NM_DHCP_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DHCP_MANAGER, NMDhcpManagerClass))
#define NM_IS_DHCP_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DHCP_MANAGER))
#define NM_IS_DHCP_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DHCP_MANAGER))
-#define NM_DHCP_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DHCP_MANAGER, NMDHCPManagerClass))
+#define NM_DHCP_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DHCP_MANAGER, NMDhcpManagerClass))
typedef struct {
GObject parent;
-} NMDHCPManager;
+} NMDhcpManager;
typedef struct {
GObjectClass parent;
-} NMDHCPManagerClass;
+} NMDhcpManagerClass;
GType nm_dhcp_manager_get_type (void);
-NMDHCPManager *nm_dhcp_manager_get (void);
+NMDhcpManager *nm_dhcp_manager_get (void);
-void nm_dhcp_manager_set_default_hostname (NMDHCPManager *manager,
+void nm_dhcp_manager_set_default_hostname (NMDhcpManager *manager,
const char *hostname);
-NMDHCPClient * nm_dhcp_manager_start_ip4 (NMDHCPManager *manager,
+NMDhcpClient * nm_dhcp_manager_start_ip4 (NMDhcpManager *manager,
const char *iface,
+ int ifindex,
const GByteArray *hwaddr,
const char *uuid,
- guint priority,
- NMSettingIP4Config *s_ip4,
+ guint32 priority,
+ gboolean send_hostname,
+ const char *dhcp_hostname,
+ const char *dhcp_client_id,
guint32 timeout,
- GByteArray *dhcp_anycast_addr);
+ const char *dhcp_anycast_addr,
+ const char *last_ip_address);
-NMDHCPClient * nm_dhcp_manager_start_ip6 (NMDHCPManager *manager,
+NMDhcpClient * nm_dhcp_manager_start_ip6 (NMDhcpManager *manager,
const char *iface,
+ int ifindex,
const GByteArray *hwaddr,
const char *uuid,
- guint priority,
- NMSettingIP6Config *s_ip6,
+ guint32 priority,
+ gboolean send_hostname,
+ const char *dhcp_hostname,
guint32 timeout,
- GByteArray *dhcp_anycast_addr,
- gboolean info_only);
+ const char *dhcp_anycast_addr,
+ gboolean info_only,
+ NMSettingIP6ConfigPrivacy privacy);
-GSList * nm_dhcp_manager_get_lease_ip_configs (NMDHCPManager *self,
+GSList * nm_dhcp_manager_get_lease_ip_configs (NMDhcpManager *self,
const char *iface,
const char *uuid,
- gboolean ipv6);
+ gboolean ipv6,
+ guint32 default_route_metric);
/* For testing only */
-NMIP4Config *nm_dhcp_manager_test_ip4_options_to_config (const char *dhcp_client,
- const char *iface,
- GHashTable *options,
- const char *reason);
-
extern const char* nm_dhcp_helper_path;
-#endif /* NM_DHCP_MANAGER_H */
+#endif /* __NETWORKMANAGER_DHCP_MANAGER_H__ */
diff --git a/src/dhcp-manager/nm-dhcp-systemd.c b/src/dhcp-manager/nm-dhcp-systemd.c
new file mode 100644
index 000000000..12dc03cc8
--- /dev/null
+++ b/src/dhcp-manager/nm-dhcp-systemd.c
@@ -0,0 +1,849 @@
+/* -*- 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 "config.h"
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gio/gio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <ctype.h>
+#include <net/if_arp.h>
+
+#include "nm-dhcp-systemd.h"
+#include "nm-utils.h"
+#include "nm-logging.h"
+#include "nm-dhcp-utils.h"
+#include "NetworkManagerUtils.h"
+#include "gsystem-local-alloc.h"
+#include "nm-platform.h"
+
+#include "nm-sd-adapt.h"
+
+#include "sd-dhcp-client.h"
+#include "sd-dhcp6-client.h"
+#include "dhcp-protocol.h"
+#include "dhcp-lease-internal.h"
+#include "dhcp6-protocol.h"
+#include "dhcp6-lease-internal.h"
+
+G_DEFINE_TYPE (NMDhcpSystemd, nm_dhcp_systemd, NM_TYPE_DHCP_CLIENT)
+
+#define NM_DHCP_SYSTEMD_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DHCP_SYSTEMD, NMDhcpSystemdPrivate))
+
+typedef struct {
+ struct sd_dhcp_client *client4;
+ struct sd_dhcp6_client *client6;
+ char *lease_file;
+
+ guint timeout_id;
+ guint request_count;
+
+ gboolean privacy;
+} NMDhcpSystemdPrivate;
+
+/************************************************************/
+
+#define DHCP_OPTION_NIS_DOMAIN 40
+#define DHCP_OPTION_NIS_SERVERS 41
+#define DHCP_OPTION_DOMAIN_SEARCH 119
+#define DHCP_OPTION_RFC3442_ROUTES 121
+#define DHCP_OPTION_MS_ROUTES 249
+#define DHCP_OPTION_WPAD 252
+
+/* Internal values */
+#define DHCP_OPTION_IP_ADDRESS 1024
+#define DHCP_OPTION_EXPIRY 1025
+#define DHCP6_OPTION_IP_ADDRESS 1026
+#define DHCP6_OPTION_PREFIXLEN 1027
+#define DHCP6_OPTION_PREFERRED_LIFE 1028
+#define DHCP6_OPTION_MAX_LIFE 1029
+#define DHCP6_OPTION_STARTS 1030
+#define DHCP6_OPTION_LIFE_STARTS 1031
+#define DHCP6_OPTION_RENEW 1032
+#define DHCP6_OPTION_REBIND 1033
+#define DHCP6_OPTION_IAID 1034
+
+typedef struct {
+ guint num;
+ const char *name;
+ gboolean include;
+} ReqOption;
+
+#define REQPREFIX "requested_"
+
+static const ReqOption dhcp4_requests[] = {
+ { DHCP_OPTION_SUBNET_MASK, REQPREFIX "subnet_mask", TRUE },
+ { DHCP_OPTION_TIME_OFFSET, REQPREFIX "time_offset", TRUE },
+ { DHCP_OPTION_ROUTER, REQPREFIX "routers", TRUE },
+ { DHCP_OPTION_DOMAIN_NAME_SERVER, REQPREFIX "domain_name_servers", TRUE },
+ { DHCP_OPTION_HOST_NAME, REQPREFIX "host_name", TRUE },
+ { DHCP_OPTION_DOMAIN_NAME, REQPREFIX "domain_name", TRUE },
+ { DHCP_OPTION_INTERFACE_MTU, REQPREFIX "interface_mtu", TRUE },
+ { DHCP_OPTION_BROADCAST, REQPREFIX "broadcast_address", TRUE },
+ { DHCP_OPTION_STATIC_ROUTE, REQPREFIX "static_routes", TRUE },
+ { DHCP_OPTION_NIS_DOMAIN, REQPREFIX "nis_domain", TRUE },
+ { DHCP_OPTION_NIS_SERVERS, REQPREFIX "nis_servers", TRUE },
+ { DHCP_OPTION_NTP_SERVER, REQPREFIX "ntp_servers", TRUE },
+ { DHCP_OPTION_SERVER_IDENTIFIER, REQPREFIX "dhcp_server_identifier", TRUE },
+ { DHCP_OPTION_DOMAIN_SEARCH, REQPREFIX "domain_search", TRUE },
+ { DHCP_OPTION_CLASSLESS_STATIC_ROUTE, REQPREFIX "rfc3442_classless_static_routes", TRUE },
+ { DHCP_OPTION_MS_ROUTES, REQPREFIX "ms_classless_static_routes", TRUE },
+ { DHCP_OPTION_WPAD, REQPREFIX "wpad", TRUE },
+
+ /* Internal values */
+ { DHCP_OPTION_IP_ADDRESS_LEASE_TIME, REQPREFIX "expiry", FALSE },
+ { DHCP_OPTION_CLIENT_IDENTIFIER, REQPREFIX "dhcp_client_identifier", FALSE },
+ { DHCP_OPTION_IP_ADDRESS, REQPREFIX "ip_address", FALSE },
+ { 0, NULL, FALSE }
+};
+
+static const ReqOption dhcp6_requests[] = {
+ { DHCP6_OPTION_CLIENTID, REQPREFIX "dhcp6_client_id", TRUE },
+
+ /* Don't request server ID by default; some servers don't reply to
+ * Information Requests that request the Server ID.
+ */
+ { DHCP6_OPTION_SERVERID, REQPREFIX "dhcp6_server_id", FALSE },
+
+ { DHCP6_OPTION_DNS_SERVERS, REQPREFIX "dhcp6_name_servers", TRUE },
+ { DHCP6_OPTION_DOMAIN_LIST, REQPREFIX "dhcp6_domain_search", TRUE },
+ { DHCP6_OPTION_SNTP_SERVERS, REQPREFIX "dhcp6_sntp_servers", TRUE },
+
+ /* Internal values */
+ { DHCP6_OPTION_IP_ADDRESS, REQPREFIX "ip6_address", FALSE },
+ { DHCP6_OPTION_PREFIXLEN, REQPREFIX "ip6_prefixlen", FALSE },
+ { DHCP6_OPTION_PREFERRED_LIFE, REQPREFIX "preferred_life", FALSE },
+ { DHCP6_OPTION_MAX_LIFE, REQPREFIX "max_life", FALSE },
+ { DHCP6_OPTION_STARTS, REQPREFIX "starts", FALSE },
+ { DHCP6_OPTION_LIFE_STARTS, REQPREFIX "life_starts", FALSE },
+ { DHCP6_OPTION_RENEW, REQPREFIX "renew", FALSE },
+ { DHCP6_OPTION_REBIND, REQPREFIX "rebind", FALSE },
+ { DHCP6_OPTION_IAID, REQPREFIX "iaid", FALSE },
+ { 0, NULL, FALSE }
+};
+
+static void
+take_option (GHashTable *options,
+ const ReqOption *requests,
+ guint option,
+ char *value)
+{
+ guint i;
+
+ g_return_if_fail (value != NULL);
+
+ for (i = 0; requests[i].name; i++) {
+ if (requests[i].num == option) {
+ g_hash_table_insert (options,
+ (gpointer) (requests[i].name + STRLEN (REQPREFIX)),
+ value);
+ break;
+ }
+ }
+ /* Option should always be found */
+ g_assert (requests[i].name);
+}
+
+static void
+add_option (GHashTable *options, const ReqOption *requests, guint option, const char *value)
+{
+ if (options)
+ take_option (options, requests, option, g_strdup (value));
+}
+
+static void
+add_option_u32 (GHashTable *options, const ReqOption *requests, guint option, guint32 value)
+{
+ if (options)
+ take_option (options, requests, option, g_strdup_printf ("%u", value));
+}
+
+static void
+add_option_u64 (GHashTable *options, const ReqOption *requests, guint option, guint64 value)
+{
+ if (options)
+ take_option (options, requests, option, g_strdup_printf ("%" G_GUINT64_FORMAT, value));
+}
+
+static void
+add_requests_to_options (GHashTable *options, const ReqOption *requests)
+{
+ guint i;
+
+ for (i = 0; options && requests[i].name; i++) {
+ if (requests[i].include)
+ g_hash_table_insert (options, (gpointer) requests[i].name, g_strdup ("1"));
+ }
+}
+
+#define LOG_LEASE(domain, ...) \
+G_STMT_START { \
+ if (log_lease) { \
+ nm_log (LOGL_INFO, (domain), __VA_ARGS__); \
+ } \
+} G_STMT_END
+
+static NMIP4Config *
+lease_to_ip4_config (sd_dhcp_lease *lease,
+ GHashTable *options,
+ guint32 default_priority,
+ gboolean log_lease,
+ GError **error)
+{
+ NMIP4Config *ip4_config = NULL;
+ struct in_addr tmp_addr;
+ const struct in_addr *addr_list;
+ char buf[INET_ADDRSTRLEN];
+ const char *str;
+ guint32 lifetime = 0, i;
+ NMPlatformIP4Address address;
+ GString *l;
+ struct sd_dhcp_route *routes;
+ guint16 mtu;
+ int r, num;
+ guint64 end_time;
+
+ g_return_val_if_fail (lease != NULL, NULL);
+
+ ip4_config = nm_ip4_config_new ();
+
+ /* Address */
+ sd_dhcp_lease_get_address (lease, &tmp_addr);
+ memset (&address, 0, sizeof (address));
+ address.address = tmp_addr.s_addr;
+ str = nm_utils_inet4_ntop (tmp_addr.s_addr, NULL);
+ LOG_LEASE (LOGD_DHCP4, " address %s", str);
+ add_option (options, dhcp4_requests, DHCP_OPTION_IP_ADDRESS, str);
+
+ /* Prefix/netmask */
+ sd_dhcp_lease_get_netmask (lease, &tmp_addr);
+ address.plen = nm_utils_ip4_netmask_to_prefix (tmp_addr.s_addr);
+ LOG_LEASE (LOGD_DHCP4, " plen %d", address.plen);
+ add_option (options,
+ dhcp4_requests,
+ DHCP_OPTION_SUBNET_MASK,
+ nm_utils_inet4_ntop (tmp_addr.s_addr, NULL));
+
+ /* Lease time */
+ sd_dhcp_lease_get_lifetime (lease, &lifetime);
+ address.timestamp = nm_utils_get_monotonic_timestamp_s ();
+ address.lifetime = address.preferred = lifetime;
+ end_time = (guint64) time (NULL) + lifetime;
+ LOG_LEASE (LOGD_DHCP4, " expires in %" G_GUINT32_FORMAT " seconds", lifetime);
+ add_option_u64 (options,
+ dhcp4_requests,
+ DHCP_OPTION_IP_ADDRESS_LEASE_TIME,
+ end_time);
+
+ address.source = NM_IP_CONFIG_SOURCE_DHCP;
+ nm_ip4_config_add_address (ip4_config, &address);
+
+ /* Gateway */
+ r = sd_dhcp_lease_get_router (lease, &tmp_addr);
+ if (r == 0) {
+ nm_ip4_config_set_gateway (ip4_config, tmp_addr.s_addr);
+ str = nm_utils_inet4_ntop (tmp_addr.s_addr, NULL);
+ LOG_LEASE (LOGD_DHCP4, " gateway %s", str);
+ add_option (options, dhcp4_requests, DHCP_OPTION_ROUTER, str);
+ }
+
+ /* DNS Servers */
+ num = sd_dhcp_lease_get_dns (lease, &addr_list);
+ if (num > 0) {
+ l = g_string_sized_new (30);
+ for (i = 0; i < num; i++) {
+ if (addr_list[i].s_addr) {
+ nm_ip4_config_add_nameserver (ip4_config, addr_list[i].s_addr);
+ str = nm_utils_inet4_ntop (addr_list[i].s_addr, NULL);
+ LOG_LEASE (LOGD_DHCP4, " nameserver '%s'", str);
+ g_string_append_printf (l, "%s%s", l->len ? " " : "", str);
+ }
+ }
+ if (l->len)
+ add_option (options, dhcp4_requests, DHCP_OPTION_DOMAIN_NAME_SERVER, l->str);
+ g_string_free (l, TRUE);
+ }
+
+ /* Domain Name */
+ r = sd_dhcp_lease_get_domainname (lease, &str);
+ if (r == 0) {
+ /* Multiple domains sometimes stuffed into the option */
+ char **domains = g_strsplit (str, " ", 0);
+ char **s;
+
+ for (s = domains; *s; s++) {
+ LOG_LEASE (LOGD_DHCP4, " domain name '%s'", *s);
+ nm_ip4_config_add_domain (ip4_config, *s);
+ }
+ g_strfreev (domains);
+ add_option (options, dhcp4_requests, DHCP_OPTION_DOMAIN_NAME, str);
+ }
+
+ /* Hostname */
+ r = sd_dhcp_lease_get_hostname (lease, &str);
+ if (r == 0) {
+ LOG_LEASE (LOGD_DHCP4, " hostname '%s'", str);
+ add_option (options, dhcp4_requests, DHCP_OPTION_HOST_NAME, str);
+ }
+
+ /* Routes */
+ num = sd_dhcp_lease_get_routes (lease, &routes);
+ if (num > 0) {
+ l = g_string_sized_new (30);
+ for (i = 0; i < num; i++) {
+ NMPlatformIP4Route route;
+ const char *gw_str;
+
+ memset (&route, 0, sizeof (route));
+ route.network = routes[i].dst_addr.s_addr;
+ route.plen = routes[i].dst_prefixlen;
+ route.gateway = routes[i].gw_addr.s_addr;
+ route.source = NM_IP_CONFIG_SOURCE_DHCP;
+ route.metric = default_priority;
+ nm_ip4_config_add_route (ip4_config, &route);
+
+ str = nm_utils_inet4_ntop (route.network, buf);
+ gw_str = nm_utils_inet4_ntop (route.gateway, NULL);
+ LOG_LEASE (LOGD_DHCP4, " static route %s/%d gw %s", str, route.plen, gw_str);
+
+ g_string_append_printf (l, "%s%s/%d %s", l->len ? " " : "", str, route.plen, gw_str);
+ }
+ add_option (options, dhcp4_requests, DHCP_OPTION_RFC3442_ROUTES, l->str);
+ g_string_free (l, TRUE);
+ }
+
+ /* MTU */
+ r = sd_dhcp_lease_get_mtu (lease, &mtu);
+ if (r == 0 && mtu) {
+ nm_ip4_config_set_mtu (ip4_config, mtu, NM_IP_CONFIG_SOURCE_DHCP);
+ add_option_u32 (options, dhcp4_requests, DHCP_OPTION_INTERFACE_MTU, mtu);
+ LOG_LEASE (LOGD_DHCP4, " mtu %u", mtu);
+ }
+
+ /* NTP servers */
+ num = sd_dhcp_lease_get_ntp (lease, &addr_list);
+ if (num > 0) {
+ l = g_string_sized_new (30);
+ for (i = 0; i < num; i++) {
+ str = nm_utils_inet4_ntop (addr_list[i].s_addr, buf);
+ LOG_LEASE (LOGD_DHCP4, " ntp server '%s'", str);
+ g_string_append_printf (l, "%s%s", l->len ? " " : "", str);
+ }
+ add_option (options, dhcp4_requests, DHCP_OPTION_NTP_SERVER, l->str);
+ g_string_free (l, TRUE);
+ }
+
+ return ip4_config;
+}
+
+/************************************************************/
+
+static char *
+get_leasefile_path (const char *iface, const char *uuid, gboolean ipv6)
+{
+ return g_strdup_printf (NMSTATEDIR "/internal%s-%s-%s.lease",
+ ipv6 ? "6" : "",
+ uuid,
+ iface);
+}
+
+static GSList *
+nm_dhcp_systemd_get_lease_ip_configs (const char *iface,
+ const char *uuid,
+ gboolean ipv6,
+ guint32 default_route_metric)
+{
+ GSList *leases = NULL;
+ gs_free char *path = NULL;
+ sd_dhcp_lease *lease = NULL;
+ NMIP4Config *ip4_config;
+ int r;
+
+ if (ipv6)
+ return NULL;
+
+ path = get_leasefile_path (iface, uuid, FALSE);
+ r = sd_dhcp_lease_load (&lease, path);
+ if (r == 0 && lease) {
+ ip4_config = lease_to_ip4_config (lease, NULL, default_route_metric, FALSE, NULL);
+ if (ip4_config)
+ leases = g_slist_append (leases, ip4_config);
+ }
+
+ return leases;
+}
+
+/************************************************************/
+
+static void
+_save_client_id (NMDhcpSystemd *self,
+ uint8_t type,
+ const uint8_t *client_id,
+ size_t len)
+{
+ gs_unref_bytes GBytes *b = NULL;
+ gs_free char *buf = NULL;
+
+ g_return_if_fail (self != NULL);
+ g_return_if_fail (client_id != NULL);
+ g_return_if_fail (len > 0);
+
+ if (!nm_dhcp_client_get_client_id (NM_DHCP_CLIENT (self))) {
+ buf = g_malloc (len + 1);
+ buf[0] = type;
+ memcpy (buf + 1, client_id, len);
+ b = g_bytes_new (buf, len + 1);
+ nm_dhcp_client_set_client_id (NM_DHCP_CLIENT (self), b);
+ }
+}
+
+static void
+bound4_handle (NMDhcpSystemd *self)
+{
+ NMDhcpSystemdPrivate *priv = NM_DHCP_SYSTEMD_GET_PRIVATE (self);
+ const char *iface = nm_dhcp_client_get_iface (NM_DHCP_CLIENT (self));
+ sd_dhcp_lease *lease;
+ NMIP4Config *ip4_config;
+ GHashTable *options;
+ GError *error = NULL;
+ int r;
+
+ nm_log_dbg (LOGD_DHCP4, "(%s): lease available", iface);
+
+ r = sd_dhcp_client_get_lease (priv->client4, &lease);
+ if (r < 0 || !lease) {
+ nm_log_warn (LOGD_DHCP4, "(%s): no lease!", iface);
+ nm_dhcp_client_set_state (NM_DHCP_CLIENT (self), NM_DHCP_STATE_FAIL, NULL, NULL);
+ return;
+ }
+
+ options = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_free);
+ ip4_config = lease_to_ip4_config (lease,
+ options,
+ nm_dhcp_client_get_priority (NM_DHCP_CLIENT (self)),
+ TRUE,
+ &error);
+ if (ip4_config) {
+ const uint8_t *client_id = NULL;
+ size_t client_id_len = 0;
+ uint8_t type = 0;
+
+ add_requests_to_options (options, dhcp4_requests);
+ sd_dhcp_lease_save (lease, priv->lease_file);
+
+ sd_dhcp_client_get_client_id(priv->client4, &type, &client_id, &client_id_len);
+ if (client_id)
+ _save_client_id (self, type, client_id, client_id_len);
+
+ nm_dhcp_client_set_state (NM_DHCP_CLIENT (self),
+ NM_DHCP_STATE_BOUND,
+ G_OBJECT (ip4_config),
+ options);
+ } else {
+ nm_log_warn (LOGD_DHCP4, "(%s): %s", iface, error->message);
+ nm_dhcp_client_set_state (NM_DHCP_CLIENT (self), NM_DHCP_STATE_FAIL, NULL, NULL);
+ g_clear_error (&error);
+ }
+
+ sd_dhcp_lease_unref (lease);
+ g_hash_table_destroy (options);
+ g_clear_object (&ip4_config);
+}
+
+static void
+dhcp_event_cb (sd_dhcp_client *client, int event, gpointer user_data)
+{
+ NMDhcpSystemd *self = NM_DHCP_SYSTEMD (user_data);
+ NMDhcpSystemdPrivate *priv = NM_DHCP_SYSTEMD_GET_PRIVATE (self);
+ const char *iface = nm_dhcp_client_get_iface (NM_DHCP_CLIENT (self));
+
+ g_assert (priv->client4 == client);
+
+ nm_log_dbg (LOGD_DHCP4, "(%s): DHCPv4 client event %d", iface, event);
+
+ switch (event) {
+ case DHCP_EVENT_EXPIRED:
+ nm_dhcp_client_set_state (NM_DHCP_CLIENT (user_data), NM_DHCP_STATE_EXPIRE, NULL, NULL);
+ break;
+ case DHCP_EVENT_STOP:
+ nm_dhcp_client_set_state (NM_DHCP_CLIENT (user_data), NM_DHCP_STATE_FAIL, NULL, NULL);
+ break;
+ case DHCP_EVENT_RENEW:
+ case DHCP_EVENT_IP_CHANGE:
+ case DHCP_EVENT_IP_ACQUIRE:
+ bound4_handle (self);
+ break;
+ default:
+ nm_log_warn (LOGD_DHCP4, "(%s): unhandled DHCP event %d", iface, event);
+ break;
+ }
+}
+
+static guint16
+get_arp_type (const GByteArray *hwaddr)
+{
+ if (hwaddr->len == ETH_ALEN)
+ return ARPHRD_ETHER;
+ else if (hwaddr->len == INFINIBAND_ALEN)
+ return ARPHRD_INFINIBAND;
+ else
+ g_assert_not_reached ();
+}
+
+static gboolean
+ip4_start (NMDhcpClient *client, const char *dhcp_anycast_addr, const char *last_ip4_address)
+{
+ NMDhcpSystemdPrivate *priv = NM_DHCP_SYSTEMD_GET_PRIVATE (client);
+ const char *iface = nm_dhcp_client_get_iface (client);
+ const GByteArray *hwaddr;
+ sd_dhcp_lease *lease = NULL;
+ GBytes *override_client_id;
+ const uint8_t *client_id = NULL;
+ size_t client_id_len = 0;
+ struct in_addr last_addr = { 0 };
+ const char *hostname;
+ int r, i;
+
+ g_assert (priv->client4 == NULL);
+ g_assert (priv->client6 == NULL);
+
+ g_free (priv->lease_file);
+ priv->lease_file = get_leasefile_path (iface, nm_dhcp_client_get_uuid (client), FALSE);
+
+ r = sd_dhcp_client_new (&priv->client4);
+ if (r < 0) {
+ nm_log_warn (LOGD_DHCP4, "(%s): failed to create DHCPv4 client (%d)", iface, r);
+ return FALSE;
+ }
+
+ r = sd_dhcp_client_attach_event (priv->client4, NULL, 0);
+ if (r < 0) {
+ nm_log_warn (LOGD_DHCP4, "(%s): failed to attach DHCP event (%d)", iface, r);
+ goto error;
+ }
+
+ hwaddr = nm_dhcp_client_get_hw_addr (client);
+ if (hwaddr) {
+ r = sd_dhcp_client_set_mac (priv->client4,
+ hwaddr->data,
+ hwaddr->len,
+ get_arp_type (hwaddr));
+ if (r < 0) {
+ nm_log_warn (LOGD_DHCP4, "(%s): failed to set DHCP MAC address (%d)", iface, r);
+ goto error;
+ }
+ }
+
+ r = sd_dhcp_client_set_index (priv->client4, nm_dhcp_client_get_ifindex (client));
+ if (r < 0) {
+ nm_log_warn (LOGD_DHCP4, "(%s): failed to set DHCP ifindex (%d)", iface, r);
+ goto error;
+ }
+
+ r = sd_dhcp_client_set_callback (priv->client4, dhcp_event_cb, client);
+ if (r < 0) {
+ nm_log_warn (LOGD_DHCP4, "(%s): failed to set DHCP callback (%d)", iface, r);
+ goto error;
+ }
+
+ r = sd_dhcp_client_set_request_broadcast (priv->client4, true);
+ if (r < 0) {
+ nm_log_warn (LOGD_DHCP4, "(%s): failed to set DHCP broadcast (%d)", iface, r);
+ goto error;
+ }
+
+ sd_dhcp_lease_load (&lease, priv->lease_file);
+
+ if (last_ip4_address)
+ inet_pton (AF_INET, last_ip4_address, &last_addr);
+ else if (lease)
+ sd_dhcp_lease_get_address (lease, &last_addr);
+
+ if (last_addr.s_addr) {
+ r = sd_dhcp_client_set_request_address (priv->client4, &last_addr);
+ if (r < 0) {
+ nm_log_warn (LOGD_DHCP4, "(%s): failed to set last IPv4 address (%d)", iface, r);
+ goto error;
+ }
+ }
+
+ override_client_id = nm_dhcp_client_get_client_id (client);
+ if (override_client_id) {
+ client_id = g_bytes_get_data (override_client_id, &client_id_len);
+ g_assert (client_id && client_id_len);
+ sd_dhcp_client_set_client_id (priv->client4,
+ client_id[0],
+ client_id + 1,
+ client_id_len - 1);
+ } else if (lease) {
+ r = sd_dhcp_lease_get_client_id (lease, &client_id, &client_id_len);
+ if (r == 0 && client_id_len) {
+ sd_dhcp_client_set_client_id (priv->client4,
+ client_id[0],
+ client_id + 1,
+ client_id_len - 1);
+ _save_client_id (NM_DHCP_SYSTEMD (client),
+ client_id[0],
+ client_id + 1,
+ client_id_len - 1);
+ }
+ }
+
+ if (lease)
+ sd_dhcp_lease_unref (lease);
+
+ /* Add requested options */
+ for (i = 0; dhcp4_requests[i].name; i++) {
+ if (dhcp4_requests[i].include)
+ sd_dhcp_client_set_request_option (priv->client4, dhcp4_requests[i].num);
+ }
+
+ hostname = nm_dhcp_client_get_hostname (client);
+ if (hostname) {
+ r = sd_dhcp_client_set_hostname (priv->client4, hostname);
+ if (r < 0) {
+ nm_log_warn (LOGD_DHCP4, "(%s): failed to set DHCP hostname (%d)", iface, r);
+ goto error;
+ }
+ }
+
+ r = sd_dhcp_client_start (priv->client4);
+ if (r < 0) {
+ nm_log_warn (LOGD_DHCP4, "(%s): failed to start DHCP (%d)", iface, r);
+ goto error;
+ }
+
+ return TRUE;
+
+error:
+ sd_dhcp_client_unref (priv->client4);
+ priv->client4 = NULL;
+ return FALSE;
+}
+
+static void
+bound6_handle (NMDhcpSystemd *self)
+{
+ /* not yet supported... */
+ nm_log_warn (LOGD_DHCP6, "(%s): internal DHCP does not yet support DHCPv6",
+ nm_dhcp_client_get_iface (NM_DHCP_CLIENT (self)));
+ nm_dhcp_client_set_state (NM_DHCP_CLIENT (self), NM_DHCP_STATE_FAIL, NULL, NULL);
+}
+
+static void
+dhcp6_event_cb (sd_dhcp6_client *client, int event, gpointer user_data)
+{
+ NMDhcpSystemd *self = NM_DHCP_SYSTEMD (user_data);
+ NMDhcpSystemdPrivate *priv = NM_DHCP_SYSTEMD_GET_PRIVATE (self);
+ const char *iface = nm_dhcp_client_get_iface (NM_DHCP_CLIENT (self));
+
+ g_assert (priv->client6 == client);
+
+ nm_log_dbg (LOGD_DHCP6, "(%s): DHCPv6 client event %d", iface, event);
+
+ switch (event) {
+ case DHCP6_EVENT_RETRANS_MAX:
+ nm_dhcp_client_set_state (NM_DHCP_CLIENT (user_data), NM_DHCP_STATE_TIMEOUT, NULL, NULL);
+ break;
+ case DHCP6_EVENT_RESEND_EXPIRE:
+ case DHCP6_EVENT_STOP:
+ nm_dhcp_client_set_state (NM_DHCP_CLIENT (user_data), NM_DHCP_STATE_FAIL, NULL, NULL);
+ break;
+ case DHCP6_EVENT_IP_ACQUIRE:
+ bound6_handle (self);
+ break;
+ default:
+ nm_log_warn (LOGD_DHCP6, "(%s): unhandled DHCPv6 event %d", iface, event);
+ break;
+ }
+}
+
+static gboolean
+ip6_start (NMDhcpClient *client,
+ const char *dhcp_anycast_addr,
+ gboolean info_only,
+ NMSettingIP6ConfigPrivacy privacy,
+ const GByteArray *duid)
+{
+ NMDhcpSystemdPrivate *priv = NM_DHCP_SYSTEMD_GET_PRIVATE (client);
+ const char *iface = nm_dhcp_client_get_iface (client);
+ const GByteArray *hwaddr;
+ int r, i;
+
+ g_assert (priv->client4 == NULL);
+ g_assert (priv->client6 == NULL);
+ g_return_val_if_fail (duid != NULL, FALSE);
+
+ g_free (priv->lease_file);
+ priv->lease_file = get_leasefile_path (iface, nm_dhcp_client_get_uuid (client), TRUE);
+
+ r = sd_dhcp6_client_new (&priv->client6);
+ if (r < 0) {
+ nm_log_warn (LOGD_DHCP6, "(%s): failed to create DHCPv6 client (%d)", iface, r);
+ return FALSE;
+ }
+
+ /* NM stores the entire DUID which includes the uint16 "type", while systemd
+ * wants the type passed separately from the following data.
+ */
+ r = sd_dhcp6_client_set_duid (priv->client6,
+ ntohs (((const guint16 *) duid->data)[0]),
+ duid->data + 2,
+ duid->len - 2);
+ if (r < 0) {
+ nm_log_warn (LOGD_DHCP6, "(%s): failed to create DHCPv6 client (%d)", iface, r);
+ return FALSE;
+ }
+
+ r = sd_dhcp6_client_attach_event (priv->client6, NULL, 0);
+ if (r < 0) {
+ nm_log_warn (LOGD_DHCP6, "(%s): failed to attach DHCP event (%d)", iface, r);
+ goto error;
+ }
+
+ hwaddr = nm_dhcp_client_get_hw_addr (client);
+ if (hwaddr) {
+ r = sd_dhcp6_client_set_mac (priv->client6,
+ hwaddr->data,
+ hwaddr->len,
+ get_arp_type (hwaddr));
+ if (r < 0) {
+ nm_log_warn (LOGD_DHCP6, "(%s): failed to set DHCP MAC address (%d)", iface, r);
+ goto error;
+ }
+ }
+
+ r = sd_dhcp6_client_set_index (priv->client6, nm_dhcp_client_get_ifindex (client));
+ if (r < 0) {
+ nm_log_warn (LOGD_DHCP6, "(%s): failed to set DHCP ifindex (%d)", iface, r);
+ goto error;
+ }
+
+ r = sd_dhcp6_client_set_ifname (priv->client6, iface);
+ if (r < 0) {
+ nm_log_warn (LOGD_DHCP6, "(%s): failed to set DHCP ifname (%d)", iface, r);
+ goto error;
+ }
+
+ r = sd_dhcp6_client_set_callback (priv->client6, dhcp6_event_cb, client);
+ if (r < 0) {
+ nm_log_warn (LOGD_DHCP6, "(%s): failed to set DHCP callback (%d)", iface, r);
+ goto error;
+ }
+
+ /* Add requested options */
+ for (i = 0; dhcp6_requests[i].name; i++) {
+ if (dhcp6_requests[i].include)
+ sd_dhcp6_client_set_request_option (priv->client6, dhcp6_requests[i].num);
+ }
+
+ r = sd_dhcp6_client_start (priv->client6);
+ if (r < 0) {
+ nm_log_warn (LOGD_DHCP6, "(%s): failed to start DHCP (%d)", iface, r);
+ goto error;
+ }
+
+ return TRUE;
+
+error:
+ sd_dhcp6_client_unref (priv->client6);
+ priv->client6 = NULL;
+ return FALSE;
+}
+
+static void
+stop (NMDhcpClient *client, gboolean release, const GByteArray *duid)
+{
+ NMDhcpSystemdPrivate *priv = NM_DHCP_SYSTEMD_GET_PRIVATE (client);
+ int r = 0;
+
+ if (priv->client4)
+ r = sd_dhcp_client_stop (priv->client4);
+ else if (priv->client6)
+ r = sd_dhcp6_client_stop (priv->client6);
+
+ if (r) {
+ nm_log_warn (priv->client6 ? LOGD_DHCP6 : LOGD_DHCP4,
+ "(%s): failed to stop DHCP client (%d)",
+ nm_dhcp_client_get_iface (client),
+ r);
+ }
+}
+
+/***************************************************/
+
+static void
+nm_dhcp_systemd_init (NMDhcpSystemd *self)
+{
+}
+
+static void
+dispose (GObject *object)
+{
+ NMDhcpSystemdPrivate *priv = NM_DHCP_SYSTEMD_GET_PRIVATE (object);
+
+ g_clear_pointer (&priv->lease_file, g_free);
+
+ if (priv->client4) {
+ sd_dhcp_client_stop (priv->client4);
+ sd_dhcp_client_unref (priv->client4);
+ priv->client4 = NULL;
+ }
+
+ if (priv->client6) {
+ sd_dhcp6_client_stop (priv->client6);
+ sd_dhcp6_client_unref (priv->client6);
+ priv->client6 = NULL;
+ }
+
+ G_OBJECT_CLASS (nm_dhcp_systemd_parent_class)->dispose (object);
+}
+
+static void
+nm_dhcp_systemd_class_init (NMDhcpSystemdClass *sdhcp_class)
+{
+ NMDhcpClientClass *client_class = NM_DHCP_CLIENT_CLASS (sdhcp_class);
+ GObjectClass *object_class = G_OBJECT_CLASS (sdhcp_class);
+
+ g_type_class_add_private (sdhcp_class, sizeof (NMDhcpSystemdPrivate));
+
+ /* virtual methods */
+ object_class->dispose = dispose;
+
+ client_class->ip4_start = ip4_start;
+ client_class->ip6_start = ip6_start;
+ client_class->stop = stop;
+}
+
+static void __attribute__((constructor))
+register_dhcp_dhclient (void)
+{
+ g_type_init ();
+ _nm_dhcp_client_register (NM_TYPE_DHCP_SYSTEMD,
+ "internal",
+ NULL,
+ nm_dhcp_systemd_get_lease_ip_configs);
+}
+
diff --git a/src/dhcp-manager/nm-dhcp-systemd.h b/src/dhcp-manager/nm-dhcp-systemd.h
new file mode 100644
index 000000000..2a7a463eb
--- /dev/null
+++ b/src/dhcp-manager/nm-dhcp-systemd.h
@@ -0,0 +1,45 @@
+/* -*- 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_DHCP_SYSTEMD_H
+#define NM_DHCP_SYSTEMD_H
+
+#include <glib.h>
+#include <glib-object.h>
+
+#include "nm-dhcp-client.h"
+
+#define NM_TYPE_DHCP_SYSTEMD (nm_dhcp_systemd_get_type ())
+#define NM_DHCP_SYSTEMD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DHCP_SYSTEMD, NMDhcpSystemd))
+#define NM_DHCP_SYSTEMD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DHCP_SYSTEMD, NMDhcpSystemdClass))
+#define NM_IS_DHCP_SYSTEMD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DHCP_SYSTEMD))
+#define NM_IS_DHCP_SYSTEMD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DHCP_SYSTEMD))
+#define NM_DHCP_SYSTEMD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DHCP_SYSTEMD, NMDhcpSystemdClass))
+
+typedef struct {
+ NMDhcpClient parent;
+} NMDhcpSystemd;
+
+typedef struct {
+ NMDhcpClientClass parent;
+} NMDhcpSystemdClass;
+
+GType nm_dhcp_systemd_get_type (void);
+
+#endif /* NM_DHCP_SYSTEMD_H */
+
diff --git a/src/dhcp-manager/nm-dhcp-utils.c b/src/dhcp-manager/nm-dhcp-utils.c
new file mode 100644
index 000000000..5aa25ff0c
--- /dev/null
+++ b/src/dhcp-manager/nm-dhcp-utils.c
@@ -0,0 +1,732 @@
+/* -*- 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) 2005 - 2010 Red Hat, Inc.
+ *
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <string.h>
+#include <errno.h>
+#include <unistd.h>
+#include <arpa/inet.h>
+
+#include "nm-logging.h"
+#include "nm-dhcp-utils.h"
+#include "nm-utils.h"
+#include "NetworkManagerUtils.h"
+#include "nm-platform.h"
+
+/********************************************/
+
+static gboolean
+ip4_process_dhcpcd_rfc3442_routes (const char *str,
+ guint32 priority,
+ NMIP4Config *ip4_config,
+ guint32 *gwaddr)
+{
+ char **routes, **r;
+ gboolean have_routes = FALSE;
+
+ routes = g_strsplit (str, " ", 0);
+ if (g_strv_length (routes) == 0)
+ goto out;
+
+ if ((g_strv_length (routes) % 2) != 0) {
+ nm_log_warn (LOGD_DHCP4, " classless static routes provided, but invalid");
+ goto out;
+ }
+
+ for (r = routes; *r; r += 2) {
+ char *slash;
+ NMPlatformIP4Route route;
+ int rt_cidr = 32;
+ guint32 rt_addr, rt_route;
+
+ slash = strchr(*r, '/');
+ if (slash) {
+ *slash = '\0';
+ errno = 0;
+ rt_cidr = strtol (slash + 1, NULL, 10);
+ if ((errno == EINVAL) || (errno == ERANGE)) {
+ nm_log_warn (LOGD_DHCP4, "DHCP provided invalid classless static route cidr: '%s'", slash + 1);
+ continue;
+ }
+ }
+ if (inet_pton (AF_INET, *r, &rt_addr) <= 0) {
+ nm_log_warn (LOGD_DHCP4, "DHCP provided invalid classless static route address: '%s'", *r);
+ continue;
+ }
+ if (inet_pton (AF_INET, *(r + 1), &rt_route) <= 0) {
+ nm_log_warn (LOGD_DHCP4, "DHCP provided invalid classless static route gateway: '%s'", *(r + 1));
+ continue;
+ }
+
+ have_routes = TRUE;
+ if (rt_cidr == 0 && rt_addr == 0) {
+ /* FIXME: how to handle multiple routers? */
+ *gwaddr = rt_route;
+ } else {
+ 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_IP_CONFIG_SOURCE_DHCP;
+ route.metric = priority;
+ nm_ip4_config_add_route (ip4_config, &route);
+ }
+ }
+
+out:
+ g_strfreev (routes);
+ return have_routes;
+}
+
+static const char **
+process_dhclient_rfc3442_route (const char **octets,
+ NMPlatformIP4Route *route,
+ gboolean *success)
+{
+ const char **o = octets;
+ int addr_len = 0, i = 0;
+ long int tmp;
+ char *next_hop;
+ guint32 tmp_addr;
+
+ *success = FALSE;
+
+ if (!*o)
+ return o; /* no prefix */
+
+ tmp = strtol (*o, NULL, 10);
+ if (tmp < 0 || tmp > 32) /* 32 == max IP4 prefix length */
+ return o;
+
+ memset (route, 0, sizeof (*route));
+ route->plen = tmp;
+ o++;
+
+ if (tmp > 0)
+ addr_len = ((tmp - 1) / 8) + 1;
+
+ /* ensure there's at least the address + next hop left */
+ if (g_strv_length ((char **) o) < addr_len + 4)
+ goto error;
+
+ if (tmp) {
+ const char *addr[4] = { "0", "0", "0", "0" };
+ char *str_addr;
+
+ for (i = 0; i < addr_len; i++)
+ addr[i] = *o++;
+
+ str_addr = g_strjoin (".", addr[0], addr[1], addr[2], addr[3], NULL);
+ if (inet_pton (AF_INET, str_addr, &tmp_addr) <= 0) {
+ g_free (str_addr);
+ goto error;
+ }
+ tmp_addr &= nm_utils_ip4_prefix_to_netmask ((guint32) tmp);
+ route->network = tmp_addr;
+ }
+
+ /* Handle next hop */
+ next_hop = g_strjoin (".", o[0], o[1], o[2], o[3], NULL);
+ if (inet_pton (AF_INET, next_hop, &tmp_addr) <= 0) {
+ g_free (next_hop);
+ goto error;
+ }
+ route->gateway = tmp_addr;
+ g_free (next_hop);
+
+ *success = TRUE;
+ return o + 4; /* advance to past the next hop */
+
+error:
+ return o;
+}
+
+static gboolean
+ip4_process_dhclient_rfc3442_routes (const char *str,
+ guint32 priority,
+ NMIP4Config *ip4_config,
+ guint32 *gwaddr)
+{
+ char **octets, **o;
+ gboolean have_routes = FALSE;
+ NMPlatformIP4Route route;
+ gboolean success;
+
+ o = octets = g_strsplit_set (str, " .", 0);
+ if (g_strv_length (octets) < 5) {
+ nm_log_warn (LOGD_DHCP4, "ignoring invalid classless static routes '%s'", str);
+ goto out;
+ }
+
+ while (*o) {
+ 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 (!route.plen) {
+ /* gateway passed as classless static route */
+ *gwaddr = route.gateway;
+ } else {
+ char addr[INET_ADDRSTRLEN];
+
+ /* normal route */
+ route.source = NM_IP_CONFIG_SOURCE_DHCP;
+ route.metric = priority;
+ nm_ip4_config_add_route (ip4_config, &route);
+
+ nm_log_info (LOGD_DHCP4, " classless static route %s/%d gw %s",
+ nm_utils_inet4_ntop (route.network, addr), route.plen,
+ nm_utils_inet4_ntop (route.gateway, NULL));
+ }
+ }
+
+out:
+ g_strfreev (octets);
+ return have_routes;
+}
+
+static gboolean
+ip4_process_classless_routes (GHashTable *options,
+ guint32 priority,
+ NMIP4Config *ip4_config,
+ guint32 *gwaddr)
+{
+ const char *str, *p;
+
+ g_return_val_if_fail (options != NULL, FALSE);
+ g_return_val_if_fail (ip4_config != NULL, FALSE);
+
+ *gwaddr = 0;
+
+ /* dhcpd/dhclient in Fedora has support for rfc3442 implemented using a
+ * slightly different format:
+ *
+ * option classless-static-routes = array of (destination-descriptor ip-address);
+ *
+ * which results in:
+ *
+ * 0 192.168.0.113 25.129.210.177.132 192.168.0.113 7.2 10.34.255.6
+ *
+ * dhcpcd supports classless static routes natively and uses this same
+ * option identifier with the following format:
+ *
+ * 192.168.10.0/24 192.168.1.1 10.0.0.0/8 10.17.66.41
+ */
+ str = g_hash_table_lookup (options, "classless_static_routes");
+
+ /* dhclient doesn't have actual support for rfc3442 classless static routes
+ * upstream. Thus, people resort to defining the option in dhclient.conf
+ * and using arbitrary formats like so:
+ *
+ * option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;
+ *
+ * See https://lists.isc.org/pipermail/dhcp-users/2008-December/007629.html
+ */
+ if (!str)
+ str = g_hash_table_lookup (options, "rfc3442_classless_static_routes");
+
+ /* Microsoft version; same as rfc3442 but with a different option # (249) */
+ if (!str)
+ str = g_hash_table_lookup (options, "ms_classless_static_routes");
+
+ if (!str || !strlen (str))
+ return FALSE;
+
+ p = str;
+ while (*p) {
+ if (!g_ascii_isdigit (*p) && (*p != ' ') && (*p != '.') && (*p != '/')) {
+ nm_log_warn (LOGD_DHCP4, "ignoring invalid classless static routes '%s'", str);
+ return FALSE;
+ }
+ p++;
+ };
+
+ if (strchr (str, '/')) {
+ /* dhcpcd format */
+ return ip4_process_dhcpcd_rfc3442_routes (str, priority, ip4_config, gwaddr);
+ }
+
+ return ip4_process_dhclient_rfc3442_routes (str, priority, ip4_config, gwaddr);
+}
+
+static void
+process_classful_routes (GHashTable *options, guint32 priority, NMIP4Config *ip4_config)
+{
+ const char *str;
+ char **searches, **s;
+
+ str = g_hash_table_lookup (options, "static_routes");
+ if (!str)
+ return;
+
+ searches = g_strsplit (str, " ", 0);
+ if ((g_strv_length (searches) % 2)) {
+ nm_log_info (LOGD_DHCP, " static routes provided, but invalid");
+ goto out;
+ }
+
+ for (s = searches; *s; s += 2) {
+ 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);
+ continue;
+ }
+ if (inet_pton (AF_INET, *(s + 1), &rt_route) <= 0) {
+ nm_log_warn (LOGD_DHCP, "DHCP provided invalid static route gateway: '%s'", *(s + 1));
+ continue;
+ }
+
+ // 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_IP_CONFIG_SOURCE_DHCP;
+ route.metric = priority;
+
+ nm_ip4_config_add_route (ip4_config, &route);
+ nm_log_info (LOGD_DHCP, " static route %s",
+ nm_platform_ip4_route_to_string (&route));
+ }
+
+out:
+ g_strfreev (searches);
+}
+
+static void
+process_domain_search (const char *str, GFunc add_func, gpointer user_data)
+{
+ char **searches, **s;
+ char *unescaped, *p;
+ int i;
+
+ g_return_if_fail (str != NULL);
+ g_return_if_fail (add_func != NULL);
+
+ p = unescaped = g_strdup (str);
+ do {
+ p = strstr (p, "\\032");
+ if (!p)
+ break;
+
+ /* Clear the escaped space with real spaces */
+ for (i = 0; i < 4; i++)
+ *p++ = ' ';
+ } while (*p++);
+
+ if (strchr (unescaped, '\\')) {
+ nm_log_warn (LOGD_DHCP, " invalid domain search: '%s'", unescaped);
+ goto out;
+ }
+
+ searches = g_strsplit (unescaped, " ", 0);
+ for (s = searches; *s; s++) {
+ if (strlen (*s)) {
+ nm_log_info (LOGD_DHCP, " domain search '%s'", *s);
+ add_func (*s, user_data);
+ }
+ }
+ g_strfreev (searches);
+
+out:
+ g_free (unescaped);
+}
+
+static void
+ip4_add_domain_search (gpointer data, gpointer user_data)
+{
+ nm_ip4_config_add_search (NM_IP4_CONFIG (user_data), (const char *) data);
+}
+
+NMIP4Config *
+nm_dhcp_utils_ip4_config_from_options (const char *iface,
+ GHashTable *options,
+ guint32 priority)
+{
+ NMIP4Config *ip4_config = NULL;
+ guint32 tmp_addr;
+ NMPlatformIP4Address address;
+ char *str = NULL;
+ guint32 gwaddr = 0, plen = 0;
+
+ g_return_val_if_fail (options != NULL, NULL);
+
+ ip4_config = nm_ip4_config_new ();
+ memset (&address, 0, sizeof (address));
+ address.timestamp = nm_utils_get_monotonic_timestamp_s ();
+
+ str = g_hash_table_lookup (options, "ip_address");
+ if (str && (inet_pton (AF_INET, str, &tmp_addr) > 0)) {
+ address.address = tmp_addr;
+ nm_log_info (LOGD_DHCP4, " address %s", str);
+ } else
+ goto error;
+
+ str = g_hash_table_lookup (options, "subnet_mask");
+ if (str && (inet_pton (AF_INET, str, &tmp_addr) > 0)) {
+ 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. */
+ plen = nm_utils_ip4_get_default_prefix (address.address);
+ nm_log_info (LOGD_DHCP4, " plen %d (default)", plen);
+ }
+ address.plen = plen;
+
+ /* Routes: if the server returns classless static routes, we MUST ignore
+ * the 'static_routes' option.
+ */
+ if (!ip4_process_classless_routes (options, priority, ip4_config, &gwaddr))
+ process_classful_routes (options, priority, ip4_config);
+
+ if (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.
+ */
+ str = g_hash_table_lookup (options, "routers");
+ if (str) {
+ char **routers = g_strsplit (str, " ", 0);
+ char **s;
+
+ for (s = routers; *s; s++) {
+ /* FIXME: how to handle multiple routers? */
+ 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
+ nm_log_warn (LOGD_DHCP4, "ignoring invalid gateway '%s'", *s);
+ }
+ g_strfreev (routers);
+ }
+ }
+
+ /*
+ * 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 (options, "dhcp_server_identifier");
+ if (str) {
+ if (inet_pton (AF_INET, str, &tmp_addr) > 0) {
+
+ nm_log_info (LOGD_DHCP4, " server identifier %s", str);
+ if ( nm_utils_ip4_address_clear_host_address(tmp_addr, address.plen) != nm_utils_ip4_address_clear_host_address(address.address, address.plen)
+ && !nm_ip4_config_get_direct_route_for_host (ip4_config, tmp_addr)) {
+ /* DHCP server not on assigned subnet and the no direct route was returned. Add route */
+ NMPlatformIP4Route route = { 0 };
+
+ route.network = tmp_addr;
+ route.plen = 32;
+ /* this will be a device route if gwaddr is 0 */
+ route.gateway = gwaddr;
+ route.source = NM_IP_CONFIG_SOURCE_DHCP;
+ route.metric = 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 (options, "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_IP_CONFIG_SOURCE_DHCP;
+ nm_ip4_config_add_address (ip4_config, &address);
+
+ str = g_hash_table_lookup (options, "host_name");
+ if (str)
+ nm_log_info (LOGD_DHCP4, " hostname '%s'", str);
+
+ str = g_hash_table_lookup (options, "domain_name_servers");
+ if (str) {
+ char **dns = g_strsplit (str, " ", 0);
+ char **s;
+
+ for (s = dns; *s; s++) {
+ if (inet_pton (AF_INET, *s, &tmp_addr) > 0) {
+ if (tmp_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);
+ }
+ g_strfreev (dns);
+ }
+
+ str = g_hash_table_lookup (options, "domain_name");
+ if (str) {
+ char **domains = g_strsplit (str, " ", 0);
+ char **s;
+
+ for (s = domains; *s; s++) {
+ nm_log_info (LOGD_DHCP4, " domain name '%s'", *s);
+ nm_ip4_config_add_domain (ip4_config, *s);
+ }
+ g_strfreev (domains);
+ }
+
+ str = g_hash_table_lookup (options, "domain_search");
+ if (str)
+ process_domain_search (str, ip4_add_domain_search, ip4_config);
+
+ str = g_hash_table_lookup (options, "netbios_name_servers");
+ if (str) {
+ char **nbns = g_strsplit (str, " ", 0);
+ char **s;
+
+ for (s = nbns; *s; s++) {
+ if (inet_pton (AF_INET, *s, &tmp_addr) > 0) {
+ if (tmp_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);
+ }
+ g_strfreev (nbns);
+ }
+
+ str = g_hash_table_lookup (options, "interface_mtu");
+ if (str) {
+ int int_mtu;
+
+ errno = 0;
+ int_mtu = strtol (str, NULL, 10);
+ if ((errno == EINVAL) || (errno == ERANGE))
+ goto error;
+
+ if (int_mtu > 576)
+ nm_ip4_config_set_mtu (ip4_config, int_mtu, NM_IP_CONFIG_SOURCE_DHCP);
+ }
+
+ str = g_hash_table_lookup (options, "nis_domain");
+ if (str) {
+ nm_log_info (LOGD_DHCP4, " NIS domain '%s'", str);
+ nm_ip4_config_set_nis_domain (ip4_config, str);
+ }
+
+ str = g_hash_table_lookup (options, "nis_servers");
+ if (str) {
+ char **nis = g_strsplit (str, " ", 0);
+ char **s;
+
+ for (s = nis; *s; s++) {
+ if (inet_pton (AF_INET, *s, &tmp_addr) > 0) {
+ if (tmp_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);
+ }
+ g_strfreev (nis);
+ }
+
+ return ip4_config;
+
+error:
+ g_object_unref (ip4_config);
+ return NULL;
+}
+
+/********************************************/
+
+static void
+ip6_add_domain_search (gpointer data, gpointer user_data)
+{
+ nm_ip6_config_add_search (NM_IP6_CONFIG (user_data), (const char *) data);
+}
+
+NMIP6Config *
+nm_dhcp_utils_ip6_config_from_options (const char *iface,
+ GHashTable *options,
+ guint32 priority,
+ gboolean info_only)
+{
+ NMIP6Config *ip6_config = NULL;
+ struct in6_addr tmp_addr;
+ NMPlatformIP6Address address;
+ char *str = NULL;
+ GHashTableIter iter;
+ gpointer key, value;
+
+ g_return_val_if_fail (options != NULL, NULL);
+
+ memset (&address, 0, sizeof (address));
+ address.plen = 128;
+ address.timestamp = nm_utils_get_monotonic_timestamp_s ();
+
+ g_hash_table_iter_init (&iter, options);
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ nm_log_dbg (LOGD_DHCP6, "(%s): option '%s'=>'%s'",
+ iface, (const char *) key, (const char *) value);
+ }
+
+ ip6_config = nm_ip6_config_new ();
+
+ str = g_hash_table_lookup (options, "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 (options, "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 (options, "ip6_address");
+ if (str) {
+ if (!inet_pton (AF_INET6, str, &tmp_addr)) {
+ nm_log_warn (LOGD_DHCP6, "(%s): DHCP returned invalid address '%s'",
+ iface, str);
+ goto error;
+ }
+
+ address.address = tmp_addr;
+ address.source = NM_IP_CONFIG_SOURCE_DHCP;
+ nm_ip6_config_add_address (ip6_config, &address);
+ nm_log_info (LOGD_DHCP6, " address %s", str);
+ } else if (info_only == FALSE) {
+ /* No address in Managed mode is a hard error */
+ goto error;
+ }
+
+ str = g_hash_table_lookup (options, "host_name");
+ if (str)
+ nm_log_info (LOGD_DHCP6, " hostname '%s'", str);
+
+ str = g_hash_table_lookup (options, "dhcp6_name_servers");
+ if (str) {
+ char **dns = g_strsplit (str, " ", 0);
+ char **s;
+
+ for (s = dns; *s; s++) {
+ if (inet_pton (AF_INET6, *s, &tmp_addr) > 0) {
+ if (!IN6_IS_ADDR_UNSPECIFIED (&tmp_addr)) {
+ nm_ip6_config_add_nameserver (ip6_config, &tmp_addr);
+ nm_log_info (LOGD_DHCP6, " nameserver '%s'", *s);
+ }
+ } else
+ nm_log_warn (LOGD_DHCP6, "ignoring invalid nameserver '%s'", *s);
+ }
+ g_strfreev (dns);
+ }
+
+ str = g_hash_table_lookup (options, "dhcp6_domain_search");
+ if (str)
+ process_domain_search (str, ip6_add_domain_search, ip6_config);
+
+ return ip6_config;
+
+error:
+ g_object_unref (ip6_config);
+ return NULL;
+}
+
+char *
+nm_dhcp_utils_duid_to_string (const GByteArray *duid)
+{
+ guint32 i = 0;
+ GString *s;
+
+ g_return_val_if_fail (duid != NULL, NULL);
+
+ s = g_string_sized_new (MIN (duid->len * 3, 50));
+ while (i < duid->len) {
+ if (s->len)
+ g_string_append_c (s, ':');
+ g_string_append_printf (s, "%02x", duid->data[i++]);
+ }
+ return g_string_free (s, FALSE);
+}
+
+/**
+ * nm_dhcp_utils_client_id_string_to_bytes:
+ * @client_id: the client ID string
+ *
+ * Accepts either a hex string ("aa:bb:cc") representing a binary client ID
+ * (the first byte is assumed to be the 'type' field per RFC 2132 section 9.14),
+ * or a string representing a non-hardware-address client ID, in which case
+ * the 'type' field is set to 0.
+ *
+ * Returns: the binary client ID suitable for sending over the wire
+ * to the DHCP server.
+ */
+GBytes *
+nm_dhcp_utils_client_id_string_to_bytes (const char *client_id)
+{
+ GBytes *bytes = NULL;
+ guint len;
+ char *c;
+
+ g_return_val_if_fail (client_id && client_id[0], NULL);
+
+ /* Try as hex encoded */
+ if (strchr (client_id, ':'))
+ bytes = nm_utils_hexstr2bin (client_id);
+ if (!bytes) {
+ /* Fall back to string */
+ len = strlen (client_id);
+ c = g_malloc (len + 1);
+ c[0] = 0; /* type: non-hardware address per RFC 2132 section 9.14 */
+ memcpy (c + 1, client_id, len);
+ bytes = g_bytes_new_take (c, len + 1);
+ }
+
+ return bytes;
+}
+
diff --git a/src/dhcp-manager/nm-dhcp-utils.h b/src/dhcp-manager/nm-dhcp-utils.h
new file mode 100644
index 000000000..a01cf4c26
--- /dev/null
+++ b/src/dhcp-manager/nm-dhcp-utils.h
@@ -0,0 +1,41 @@
+/* -*- 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 __NETWORKMANAGER_DHCP_UTILS_H__
+#define __NETWORKMANAGER_DHCP_UTILS_H__
+
+#include <stdlib.h>
+#include <glib.h>
+#include <nm-ip4-config.h>
+#include <nm-ip6-config.h>
+
+NMIP4Config *nm_dhcp_utils_ip4_config_from_options (const char *iface,
+ GHashTable *options,
+ guint priority);
+
+NMIP6Config *nm_dhcp_utils_ip6_config_from_options (const char *iface,
+ GHashTable *options,
+ guint priority,
+ gboolean info_only);
+
+char * nm_dhcp_utils_duid_to_string (const GByteArray *duid);
+
+GBytes * nm_dhcp_utils_client_id_string_to_bytes (const char *client_id);
+
+#endif /* __NETWORKMANAGER_DHCP_UTILS_H__ */
+
diff --git a/src/dhcp-manager/systemd-dhcp/nm-sd-adapt.c b/src/dhcp-manager/systemd-dhcp/nm-sd-adapt.c
new file mode 100644
index 000000000..a6d817278
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/nm-sd-adapt.c
@@ -0,0 +1,209 @@
+/* -*- 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 "config.h"
+
+#include <glib.h>
+#include <unistd.h>
+#include <errno.h>
+
+#include "sd-event.h"
+#include "time-util.h"
+
+struct sd_event_source {
+ guint refcount;
+ guint id;
+ gpointer user_data;
+
+ GIOChannel *channel;
+ sd_event_io_handler_t io_cb;
+
+ uint64_t usec;
+ sd_event_time_handler_t time_cb;
+};
+
+int
+sd_event_source_set_priority (sd_event_source *s, int64_t priority)
+{
+ return 0;
+}
+
+sd_event_source*
+sd_event_source_unref (sd_event_source *s)
+{
+
+ if (!s)
+ return NULL;
+
+ g_return_val_if_fail (s->refcount, NULL);
+
+ s->refcount--;
+ if (s->refcount == 0) {
+ if (s->id)
+ g_source_remove (s->id);
+ if (s->channel) {
+ /* Don't shut down the channel since systemd will soon close
+ * the file descriptor itself, which would cause -EBADF.
+ */
+ g_io_channel_unref (s->channel);
+ }
+ g_free (s);
+ }
+ return NULL;
+}
+
+int
+sd_event_source_set_description(sd_event_source *s, const char *description)
+{
+ if (!s)
+ return -EINVAL;
+
+ g_source_set_name_by_id (s->id, description);
+ return 0;
+}
+
+static gboolean
+io_ready (GIOChannel *channel, GIOCondition condition, struct sd_event_source *source)
+{
+ int r, revents = 0;
+
+ if (condition & G_IO_IN)
+ revents |= EPOLLIN;
+ if (condition & G_IO_OUT)
+ revents |= EPOLLOUT;
+ if (condition & G_IO_PRI)
+ revents |= EPOLLPRI;
+ if (condition & G_IO_ERR)
+ revents |= EPOLLERR;
+ if (condition & G_IO_HUP)
+ revents |= EPOLLHUP;
+
+ r = source->io_cb (source, g_io_channel_unix_get_fd (channel), revents, source->user_data);
+ if (r < 0) {
+ source->id = 0;
+ return G_SOURCE_REMOVE;
+ }
+
+ return G_SOURCE_CONTINUE;
+}
+
+int
+sd_event_add_io (sd_event *e, sd_event_source **s, int fd, uint32_t events, sd_event_io_handler_t callback, void *userdata)
+{
+ struct sd_event_source *source;
+ GIOChannel *channel;
+ GIOCondition condition = 0;
+
+ channel = g_io_channel_unix_new (fd);
+ if (!channel)
+ return -EINVAL;
+
+ source = g_new0 (struct sd_event_source, 1);
+ source->refcount = 1;
+ source->io_cb = callback;
+ source->user_data = userdata;
+ source->channel = channel;
+
+ if (events & EPOLLIN)
+ condition |= G_IO_IN;
+ if (events & EPOLLOUT)
+ condition |= G_IO_OUT;
+ if (events & EPOLLPRI)
+ condition |= G_IO_PRI;
+ if (events & EPOLLERR)
+ condition |= G_IO_ERR;
+ if (events & EPOLLHUP)
+ condition |= G_IO_HUP;
+
+ g_io_channel_set_encoding (source->channel, NULL, NULL);
+ g_io_channel_set_buffered (source->channel, FALSE);
+ source->id = g_io_add_watch (source->channel, condition, (GIOFunc) io_ready, source);
+
+ *s = source;
+ return 0;
+}
+
+static gboolean
+time_ready (struct sd_event_source *source)
+{
+ int r;
+
+ r = source->time_cb (source, source->usec, source->user_data);
+ if (r < 0) {
+ source->id = 0;
+ return G_SOURCE_REMOVE;
+ }
+
+ return G_SOURCE_CONTINUE;
+}
+
+int
+sd_event_add_time(sd_event *e, sd_event_source **s, clockid_t clock, uint64_t usec, uint64_t accuracy, sd_event_time_handler_t callback, void *userdata)
+{
+ struct sd_event_source *source;
+ uint64_t n = now (clock);
+
+ source = g_new0 (struct sd_event_source, 1);
+ source->refcount = 1;
+ source->time_cb = callback;
+ source->user_data = userdata;
+ source->usec = usec;
+
+ if (usec > 1000)
+ usec = n < usec - 1000 ? usec - n : 1000;
+ source->id = g_timeout_add (usec / 1000, (GSourceFunc) time_ready, source);
+
+ *s = source;
+ return 0;
+}
+
+/* sd_event is basically a GMainContext; but since we only
+ * ever use the default context, nothing to do here.
+ */
+
+int
+sd_event_default (sd_event **e)
+{
+ *e = GUINT_TO_POINTER (1);
+ return 0;
+}
+
+sd_event*
+sd_event_ref (sd_event *e)
+{
+ return e;
+}
+
+sd_event*
+sd_event_unref (sd_event *e)
+{
+ return NULL;
+}
+
+int
+sd_event_now (sd_event *e, clockid_t clock, uint64_t *usec)
+{
+ *usec = now (clock);
+ return 0;
+}
+
+int asynchronous_close(int fd) {
+ safe_close(fd);
+ return -1;
+}
+
diff --git a/src/dhcp-manager/systemd-dhcp/nm-sd-adapt.h b/src/dhcp-manager/systemd-dhcp/nm-sd-adapt.h
new file mode 100644
index 000000000..ce1716b17
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/nm-sd-adapt.h
@@ -0,0 +1,109 @@
+/* -*- 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_SD_ADAPT_H
+#define NM_SD_ADAPT_H
+
+#include <config.h>
+
+#include <glib.h>
+
+#include <netinet/in.h>
+#include <stdbool.h>
+#include <syslog.h>
+#include <string.h>
+#include <stdio.h>
+#include <errno.h>
+#include <elf.h>
+#ifdef HAVE_SYS_AUXV_H
+#include <sys/auxv.h>
+#endif
+#include <unistd.h>
+#include <sys/syscall.h>
+
+#include "nm-logging.h"
+
+static inline guint32
+_slog_level_to_nm (int slevel)
+{
+ switch (slevel) {
+ case LOG_DEBUG: return LOGL_DEBUG;
+ case LOG_WARNING: return LOGL_WARN;
+ case LOG_ERR: return LOGL_ERR;
+ case LOG_INFO:
+ case LOG_NOTICE:
+ default: return LOGL_INFO;
+ }
+}
+
+#define log_meta(level, file, line, func, format, ...) \
+G_STMT_START { \
+ guint32 _l = _slog_level_to_nm ((level)); \
+ if (nm_logging_enabled (_l, LOGD_DHCP)) { \
+ const char *_location = strrchr (file "", '/'); \
+ \
+ _nm_log (_location ? _location + 1 : file, line, func, _l, LOGD_DHCP, format, ## __VA_ARGS__); \
+ } \
+} G_STMT_END
+
+#define log_debug(...) log_full(LOG_DEBUG, __VA_ARGS__)
+#define log_error(...) log_full(LOG_ERR, __VA_ARGS__)
+#define log_full(level, ...) log_meta((level), __FILE__, __LINE__, __func__, __VA_ARGS__);
+
+#define log_dhcp_client(client, fmt, ...) \
+ log_meta(LOG_DEBUG, __FILE__, __LINE__, __func__, "DHCP CLIENT (0x%x): " fmt, client->xid, ##__VA_ARGS__)
+
+#define log_assert_failed(e, file, line, func) \
+G_STMT_START { \
+ nm_log_err (LOGD_DHCP, #file ":" #line "(" #func "): assertion failed: " # e); \
+ g_assert (FALSE); \
+} G_STMT_END
+
+#define log_assert_failed_unreachable(t, file, line, func) \
+G_STMT_START { \
+ nm_log_err (LOGD_DHCP, #file ":" #line "(" #func "): assert unreachable: " # t); \
+ g_assert_not_reached (); \
+} G_STMT_END
+
+#define log_assert_failed_return(e, file, line, func) \
+ nm_log_err (LOGD_DHCP, #file ":" #line "(" #func "): assert return: " # e); \
+
+#define log_oom nm_log_err(LOGD_CORE, "%s:%s/%s: OOM", __FILE__, __LINE__, __func__)
+
+/* Can't include both net/if.h and linux/if.h; so have to define this here */
+#ifndef IFNAMSIZ
+#define IFNAMSIZ 16
+#endif
+
+#ifndef MAX_HANDLE_SZ
+#define MAX_HANDLE_SZ 128
+#endif
+
+#define noreturn G_GNUC_NORETURN
+
+#include "sd-id128.h"
+#include "sparse-endian.h"
+#include "async.h"
+#include "util.h"
+
+static inline pid_t gettid(void) {
+ return (pid_t) syscall(SYS_gettid);
+}
+
+#endif /* NM_SD_ADAPT_H */
+
diff --git a/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-internal.h b/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-internal.h
new file mode 100644
index 000000000..28c0e6345
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-internal.h
@@ -0,0 +1,76 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#pragma once
+
+/***
+ This file is part of systemd.
+
+ Copyright (C) 2013 Intel Corporation. All rights reserved.
+ Copyright (C) 2014 Tom Gundersen
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include "nm-sd-adapt.h"
+
+#include <stdint.h>
+#include <linux/if_packet.h>
+#include <net/if_arp.h>
+#include <net/ethernet.h>
+
+#include "socket-util.h"
+
+#include "sd-dhcp-client.h"
+#include "dhcp-protocol.h"
+
+int dhcp_network_bind_raw_socket(int index, union sockaddr_union *link,
+ uint32_t xid, const uint8_t *mac_addr,
+ size_t mac_addr_len, uint16_t arp_type);
+int dhcp_network_bind_udp_socket(be32_t address, uint16_t port);
+int dhcp_network_send_raw_socket(int s, const union sockaddr_union *link,
+ const void *packet, size_t len);
+int dhcp_network_send_udp_socket(int s, be32_t address, uint16_t port,
+ const void *packet, size_t len);
+
+int dhcp_option_append(DHCPMessage *message, size_t size, size_t *offset, uint8_t overload,
+ uint8_t code, size_t optlen, const void *optval);
+
+typedef int (*dhcp_option_cb_t)(uint8_t code, uint8_t len,
+ const uint8_t *option, void *user_data);
+
+int dhcp_option_parse(DHCPMessage *message, size_t len,
+ dhcp_option_cb_t cb, void *user_data);
+
+int dhcp_message_init(DHCPMessage *message, uint8_t op, uint32_t xid,
+ uint8_t type, uint16_t arp_type, size_t optlen,
+ size_t *optoffset);
+
+uint16_t dhcp_packet_checksum(uint8_t *buf, size_t len);
+
+void dhcp_packet_append_ip_headers(DHCPPacket *packet, be32_t source_addr,
+ uint16_t source, be32_t destination_addr,
+ uint16_t destination, uint16_t len);
+
+int dhcp_packet_verify_headers(DHCPPacket *packet, size_t len, bool checksum);
+
+DEFINE_TRIVIAL_CLEANUP_FUNC(sd_dhcp_client*, sd_dhcp_client_unref);
+#define _cleanup_dhcp_client_unref_ _cleanup_(sd_dhcp_client_unrefp)
+
+/* If we are invoking callbacks of a dhcp-client, ensure unreffing the
+ * client from the callback doesn't destroy the object we are working
+ * on */
+#define DHCP_CLIENT_DONT_DESTROY(client) \
+ _cleanup_dhcp_client_unref_ _unused_ sd_dhcp_client *_dont_destroy_##client = sd_dhcp_client_ref(client)
+
+#define log_dhcp_client(client, fmt, ...) log_meta(LOG_DEBUG, __FILE__, __LINE__, __func__, "DHCP CLIENT (0x%x): " fmt, client->xid, ##__VA_ARGS__)
diff --git a/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-lease-internal.h b/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-lease-internal.h
new file mode 100644
index 000000000..9e184ac4b
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-lease-internal.h
@@ -0,0 +1,87 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#pragma once
+
+/***
+ This file is part of systemd.
+
+ Copyright (C) 2013 Intel Corporation. All rights reserved.
+ Copyright (C) 2014 Tom Gundersen
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <stdint.h>
+#include <linux/if_packet.h>
+
+#include "refcnt.h"
+#include "util.h"
+
+#include "dhcp-protocol.h"
+
+#include "sd-dhcp-client.h"
+
+struct sd_dhcp_route {
+ struct in_addr dst_addr;
+ struct in_addr gw_addr;
+ unsigned char dst_prefixlen;
+};
+
+struct sd_dhcp_lease {
+ RefCount n_ref;
+
+ int32_t time_offset;
+ uint32_t t1;
+ uint32_t t2;
+ uint32_t lifetime;
+ uint32_t mtu_aging_timeout;
+ be32_t address;
+ be32_t server_address;
+ be32_t subnet_mask;
+ be32_t router;
+ be32_t next_server;
+ be32_t broadcast;
+ struct in_addr *dns;
+ size_t dns_size;
+ struct in_addr *ntp;
+ size_t ntp_size;
+ struct in_addr *policy_filter;
+ size_t policy_filter_size;
+ struct sd_dhcp_route *static_route;
+ size_t static_route_size;
+ size_t static_route_allocated;
+ uint16_t boot_file_size;
+ uint16_t mdr;
+ uint16_t mtu;
+ uint8_t ttl;
+ bool ip_forward;
+ bool ip_forward_non_local;
+ char *domainname;
+ char *hostname;
+ char *root_path;
+ uint8_t *client_id;
+ size_t client_id_len;
+};
+
+int dhcp_lease_new(sd_dhcp_lease **ret);
+int dhcp_lease_parse_options(uint8_t code, uint8_t len, const uint8_t *option,
+ void *user_data);
+
+int dhcp_lease_set_default_subnet_mask(sd_dhcp_lease *lease);
+
+int dhcp_lease_set_client_id(sd_dhcp_lease *lease, const uint8_t *client_id,
+ size_t client_id_len);
+
+DEFINE_TRIVIAL_CLEANUP_FUNC(sd_dhcp_lease*, sd_dhcp_lease_unref);
+#define _cleanup_dhcp_lease_unref_ _cleanup_(sd_dhcp_lease_unrefp)
diff --git a/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-network.c b/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-network.c
new file mode 100644
index 000000000..971b3aa18
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-network.c
@@ -0,0 +1,241 @@
+/***
+ This file is part of systemd.
+
+ Copyright (C) 2013 Intel Corporation. All rights reserved.
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include "config.h"
+
+#include "nm-sd-adapt.h"
+
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <string.h>
+#include <linux/if_packet.h>
+#include <linux/if_infiniband.h>
+#include <net/ethernet.h>
+#include <net/if_arp.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <linux/filter.h>
+
+#include "socket-util.h"
+
+#include "dhcp-internal.h"
+
+static int _bind_raw_socket(int ifindex, union sockaddr_union *link,
+ uint32_t xid, const uint8_t *mac_addr,
+ size_t mac_addr_len,
+ const uint8_t *bcast_addr,
+ const struct ether_addr *eth_mac,
+ uint16_t arp_type, uint8_t dhcp_hlen) {
+ struct sock_filter filter[] = {
+ BPF_STMT(BPF_LD + BPF_W + BPF_LEN, 0), /* A <- packet length */
+ BPF_JUMP(BPF_JMP + BPF_JGE + BPF_K, sizeof(DHCPPacket), 1, 0), /* packet >= DHCPPacket ? */
+ BPF_STMT(BPF_RET + BPF_K, 0), /* ignore */
+ BPF_STMT(BPF_LD + BPF_B + BPF_ABS, offsetof(DHCPPacket, ip.protocol)), /* A <- IP protocol */
+ BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, IPPROTO_UDP, 1, 0), /* IP protocol == UDP ? */
+ BPF_STMT(BPF_RET + BPF_K, 0), /* ignore */
+ BPF_STMT(BPF_LD + BPF_B + BPF_ABS, offsetof(DHCPPacket, ip.frag_off)), /* A <- Flags */
+ BPF_STMT(BPF_ALU + BPF_AND + BPF_K, 0x20), /* A <- A & 0x20 (More Fragments bit) */
+ BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, 0, 1, 0), /* A == 0 ? */
+ BPF_STMT(BPF_RET + BPF_K, 0), /* ignore */
+ BPF_STMT(BPF_LD + BPF_H + BPF_ABS, offsetof(DHCPPacket, ip.frag_off)), /* A <- Flags + Fragment offset */
+ BPF_STMT(BPF_ALU + BPF_AND + BPF_K, 0x1fff), /* A <- A & 0x1fff (Fragment offset) */
+ BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, 0, 1, 0), /* A == 0 ? */
+ BPF_STMT(BPF_RET + BPF_K, 0), /* ignore */
+ BPF_STMT(BPF_LD + BPF_H + BPF_ABS, offsetof(DHCPPacket, udp.dest)), /* A <- UDP destination port */
+ BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, DHCP_PORT_CLIENT, 1, 0), /* UDP destination port == DHCP client port ? */
+ BPF_STMT(BPF_RET + BPF_K, 0), /* ignore */
+ BPF_STMT(BPF_LD + BPF_B + BPF_ABS, offsetof(DHCPPacket, dhcp.op)), /* A <- DHCP op */
+ BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, BOOTREPLY, 1, 0), /* op == BOOTREPLY ? */
+ BPF_STMT(BPF_RET + BPF_K, 0), /* ignore */
+ BPF_STMT(BPF_LD + BPF_B + BPF_ABS, offsetof(DHCPPacket, dhcp.htype)), /* A <- DHCP header type */
+ BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, arp_type, 1, 0), /* header type == arp_type ? */
+ BPF_STMT(BPF_RET + BPF_K, 0), /* ignore */
+ BPF_STMT(BPF_LD + BPF_B + BPF_ABS, offsetof(DHCPPacket, dhcp.hlen)), /* A <- mac address length */
+ BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, dhcp_hlen, 1, 0), /* address length == dhcp_hlen ? */
+ BPF_STMT(BPF_RET + BPF_K, 0), /* ignore */
+ BPF_STMT(BPF_LD + BPF_W + BPF_ABS, offsetof(DHCPPacket, dhcp.xid)), /* A <- client identifier */
+ BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, xid, 1, 0), /* client identifier == xid ? */
+ BPF_STMT(BPF_RET + BPF_K, 0), /* ignore */
+ BPF_STMT(BPF_LD + BPF_IMM, htobe32(*((unsigned int *) eth_mac))), /* A <- 4 bytes of client's MAC */
+ BPF_STMT(BPF_MISC + BPF_TAX, 0), /* X <- A */
+ BPF_STMT(BPF_LD + BPF_W + BPF_ABS, offsetof(DHCPPacket, dhcp.chaddr)), /* A <- 4 bytes of MAC from dhcp.chaddr */
+ BPF_STMT(BPF_ALU + BPF_XOR + BPF_X, 0), /* A xor X */
+ BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, 0, 1, 0), /* A == 0 ? */
+ BPF_STMT(BPF_RET + BPF_K, 0), /* ignore */
+ BPF_STMT(BPF_LD + BPF_IMM, htobe16(*((unsigned short *) (((char *) eth_mac) + 4)))), /* A <- remainder of client's MAC */
+ BPF_STMT(BPF_MISC + BPF_TAX, 0), /* X <- A */
+ BPF_STMT(BPF_LD + BPF_H + BPF_ABS, offsetof(DHCPPacket, dhcp.chaddr) + 4), /* A <- remainder of MAC from dhcp.chaddr */
+ BPF_STMT(BPF_ALU + BPF_XOR + BPF_X, 0), /* A xor X */
+ BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, 0, 1, 0), /* A == 0 ? */
+ BPF_STMT(BPF_RET + BPF_K, 0), /* ignore */
+ BPF_STMT(BPF_LD + BPF_W + BPF_ABS, offsetof(DHCPPacket, dhcp.magic)), /* A <- DHCP magic cookie */
+ BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, DHCP_MAGIC_COOKIE, 1, 0), /* cookie == DHCP magic cookie ? */
+ BPF_STMT(BPF_RET + BPF_K, 0), /* ignore */
+ BPF_STMT(BPF_RET + BPF_K, 65535), /* return all */
+ };
+ struct sock_fprog fprog = {
+ .len = ELEMENTSOF(filter),
+ .filter = filter
+ };
+ _cleanup_close_ int s = -1;
+ int r, on = 1;
+
+ assert(ifindex > 0);
+ assert(link);
+
+ s = socket(AF_PACKET, SOCK_DGRAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0);
+ if (s < 0)
+ return -errno;
+
+ r = setsockopt(s, SOL_PACKET, PACKET_AUXDATA, &on, sizeof(on));
+ if (r < 0)
+ return -errno;
+
+ r = setsockopt(s, SOL_SOCKET, SO_ATTACH_FILTER, &fprog, sizeof(fprog));
+ if (r < 0)
+ return -errno;
+
+ link->ll.sll_family = AF_PACKET;
+ link->ll.sll_protocol = htons(ETH_P_IP);
+ link->ll.sll_ifindex = ifindex;
+ link->ll.sll_hatype = htons(arp_type);
+ link->ll.sll_halen = mac_addr_len;
+ memcpy(link->ll.sll_addr, bcast_addr, mac_addr_len);
+
+ r = bind(s, &link->sa, sizeof(link->ll));
+ if (r < 0)
+ return -errno;
+
+ r = s;
+ s = -1;
+
+ return r;
+}
+
+int dhcp_network_bind_raw_socket(int ifindex, union sockaddr_union *link,
+ uint32_t xid, const uint8_t *mac_addr,
+ size_t mac_addr_len, uint16_t arp_type) {
+ static const uint8_t eth_bcast[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
+ /* Default broadcast address for IPoIB */
+ static const uint8_t ib_bcast[] = {
+ 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x40, 0x1b,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff
+ };
+ struct ether_addr eth_mac = { { 0, 0, 0, 0, 0, 0 } };
+ const uint8_t *bcast_addr = NULL;
+ uint8_t dhcp_hlen = 0;
+
+ assert_return(mac_addr_len > 0, -EINVAL);
+
+ if (arp_type == ARPHRD_ETHER) {
+ assert_return(mac_addr_len == ETH_ALEN, -EINVAL);
+ memcpy(&eth_mac, mac_addr, ETH_ALEN);
+ bcast_addr = eth_bcast;
+ dhcp_hlen = ETH_ALEN;
+ } else if (arp_type == ARPHRD_INFINIBAND) {
+ assert_return(mac_addr_len == INFINIBAND_ALEN, -EINVAL);
+ bcast_addr = ib_bcast;
+ } else
+ return -EINVAL;
+
+ return _bind_raw_socket(ifindex, link, xid, mac_addr, mac_addr_len,
+ bcast_addr, &eth_mac, arp_type, dhcp_hlen);
+}
+
+int dhcp_network_bind_udp_socket(be32_t address, uint16_t port) {
+ union sockaddr_union src = {
+ .in.sin_family = AF_INET,
+ .in.sin_port = htobe16(port),
+ .in.sin_addr.s_addr = address,
+ };
+ _cleanup_close_ int s = -1;
+ int r, on = 1, tos = IPTOS_CLASS_CS6;
+
+ s = socket(AF_INET, SOCK_DGRAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0);
+ if (s < 0)
+ return -errno;
+
+ r = setsockopt(s, IPPROTO_IP, IP_TOS, &tos, sizeof(tos));
+ if (r < 0)
+ return -errno;
+
+ r = setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
+ if (r < 0)
+ return -errno;
+
+ if (address == INADDR_ANY) {
+ r = setsockopt(s, IPPROTO_IP, IP_PKTINFO, &on, sizeof(on));
+ if (r < 0)
+ return -errno;
+
+ r = setsockopt(s, SOL_SOCKET, SO_BROADCAST, &on, sizeof(on));
+ if (r < 0)
+ return -errno;
+ } else {
+ r = setsockopt(s, IPPROTO_IP, IP_FREEBIND, &on, sizeof(on));
+ if (r < 0)
+ return -errno;
+ }
+
+ r = bind(s, &src.sa, sizeof(src.in));
+ if (r < 0)
+ return -errno;
+
+ r = s;
+ s = -1;
+
+ return r;
+}
+
+int dhcp_network_send_raw_socket(int s, const union sockaddr_union *link,
+ const void *packet, size_t len) {
+ int r;
+
+ assert(link);
+ assert(packet);
+ assert(len);
+
+ r = sendto(s, packet, len, 0, &link->sa, sizeof(link->ll));
+ if (r < 0)
+ return -errno;
+
+ return 0;
+}
+
+int dhcp_network_send_udp_socket(int s, be32_t address, uint16_t port,
+ const void *packet, size_t len) {
+ union sockaddr_union dest = {
+ .in.sin_family = AF_INET,
+ .in.sin_port = htobe16(port),
+ .in.sin_addr.s_addr = address,
+ };
+ int r;
+
+ assert(s >= 0);
+ assert(packet);
+ assert(len);
+
+ r = sendto(s, packet, len, 0, &dest.sa, sizeof(dest.in));
+ if (r < 0)
+ return -errno;
+
+ return 0;
+}
diff --git a/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-option.c b/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-option.c
new file mode 100644
index 000000000..9759e575a
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-option.c
@@ -0,0 +1,257 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright (C) 2013 Intel Corporation. All rights reserved.
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include "config.h"
+
+#include "nm-sd-adapt.h"
+
+#include <stdint.h>
+#include <string.h>
+#include <errno.h>
+#include <stdio.h>
+
+#include "dhcp-internal.h"
+
+static int option_append(uint8_t options[], size_t size, size_t *offset,
+ uint8_t code, size_t optlen, const void *optval) {
+ assert(options);
+ assert(offset);
+
+ if (code != DHCP_OPTION_END)
+ /* always make sure there is space for an END option */
+ size --;
+
+ switch (code) {
+
+ case DHCP_OPTION_PAD:
+ case DHCP_OPTION_END:
+ if (size < *offset + 1)
+ return -ENOBUFS;
+
+ options[*offset] = code;
+ *offset += 1;
+ break;
+
+ default:
+ if (size < *offset + optlen + 2)
+ return -ENOBUFS;
+
+ options[*offset] = code;
+ options[*offset + 1] = optlen;
+
+ if (optlen) {
+ assert(optval);
+
+ memcpy(&options[*offset + 2], optval, optlen);
+ }
+
+ *offset += optlen + 2;
+
+ break;
+ }
+
+ return 0;
+}
+
+int dhcp_option_append(DHCPMessage *message, size_t size, size_t *offset,
+ uint8_t overload,
+ uint8_t code, size_t optlen, const void *optval) {
+ size_t file_offset = 0, sname_offset =0;
+ bool file, sname;
+ int r;
+
+ assert(message);
+ assert(offset);
+
+ file = overload & DHCP_OVERLOAD_FILE;
+ sname = overload & DHCP_OVERLOAD_SNAME;
+
+ if (*offset < size) {
+ /* still space in the options array */
+ r = option_append(message->options, size, offset, code, optlen, optval);
+ if (r >= 0)
+ return 0;
+ else if (r == -ENOBUFS && (file || sname)) {
+ /* did not fit, but we have more buffers to try
+ close the options array and move the offset to its end */
+ r = option_append(message->options, size, offset, DHCP_OPTION_END, 0, NULL);
+ if (r < 0)
+ return r;
+
+ *offset = size;
+ } else
+ return r;
+ }
+
+ if (overload & DHCP_OVERLOAD_FILE) {
+ file_offset = *offset - size;
+
+ if (file_offset < sizeof(message->file)) {
+ /* still space in the 'file' array */
+ r = option_append(message->file, sizeof(message->file), &file_offset, code, optlen, optval);
+ if (r >= 0) {
+ *offset = size + file_offset;
+ return 0;
+ } else if (r == -ENOBUFS && sname) {
+ /* did not fit, but we have more buffers to try
+ close the file array and move the offset to its end */
+ r = option_append(message->options, size, offset, DHCP_OPTION_END, 0, NULL);
+ if (r < 0)
+ return r;
+
+ *offset = size + sizeof(message->file);
+ } else
+ return r;
+ }
+ }
+
+ if (overload & DHCP_OVERLOAD_SNAME) {
+ sname_offset = *offset - size - (file ? sizeof(message->file) : 0);
+
+ if (sname_offset < sizeof(message->sname)) {
+ /* still space in the 'sname' array */
+ r = option_append(message->sname, sizeof(message->sname), &sname_offset, code, optlen, optval);
+ if (r >= 0) {
+ *offset = size + (file ? sizeof(message->file) : 0) + sname_offset;
+ return 0;
+ } else {
+ /* no space, or other error, give up */
+ return r;
+ }
+ }
+ }
+
+ return -ENOBUFS;
+}
+
+static int parse_options(const uint8_t options[], size_t buflen, uint8_t *overload,
+ uint8_t *message_type, dhcp_option_cb_t cb,
+ void *user_data) {
+ uint8_t code, len;
+ size_t offset = 0;
+
+ while (offset < buflen) {
+ switch (options[offset]) {
+ case DHCP_OPTION_PAD:
+ offset++;
+
+ break;
+
+ case DHCP_OPTION_END:
+ return 0;
+
+ case DHCP_OPTION_MESSAGE_TYPE:
+ if (buflen < offset + 3)
+ return -ENOBUFS;
+
+ len = options[++offset];
+ if (len != 1)
+ return -EINVAL;
+
+ if (message_type)
+ *message_type = options[++offset];
+ else
+ offset++;
+
+ offset++;
+
+ break;
+
+ case DHCP_OPTION_OVERLOAD:
+ if (buflen < offset + 3)
+ return -ENOBUFS;
+
+ len = options[++offset];
+ if (len != 1)
+ return -EINVAL;
+
+ if (overload)
+ *overload = options[++offset];
+ else
+ offset++;
+
+ offset++;
+
+ break;
+
+ default:
+ if (buflen < offset + 3)
+ return -ENOBUFS;
+
+ code = options[offset];
+ len = options[++offset];
+
+ if (buflen < ++offset + len)
+ return -EINVAL;
+
+ if (cb)
+ cb(code, len, &options[offset], user_data);
+
+ offset += len;
+
+ break;
+ }
+ }
+
+ if (offset < buflen)
+ return -EINVAL;
+
+ return 0;
+}
+
+int dhcp_option_parse(DHCPMessage *message, size_t len,
+ dhcp_option_cb_t cb, void *user_data) {
+ uint8_t overload = 0;
+ uint8_t message_type = 0;
+ int r;
+
+ if (!message)
+ return -EINVAL;
+
+ if (len < sizeof(DHCPMessage))
+ return -EINVAL;
+
+ len -= sizeof(DHCPMessage);
+
+ r = parse_options(message->options, len, &overload, &message_type,
+ cb, user_data);
+ if (r < 0)
+ return r;
+
+ if (overload & DHCP_OVERLOAD_FILE) {
+ r = parse_options(message->file, sizeof(message->file),
+ NULL, &message_type, cb, user_data);
+ if (r < 0)
+ return r;
+ }
+
+ if (overload & DHCP_OVERLOAD_SNAME) {
+ r = parse_options(message->sname, sizeof(message->sname),
+ NULL, &message_type, cb, user_data);
+ if (r < 0)
+ return r;
+ }
+
+ if (message_type)
+ return message_type;
+
+ return -ENOMSG;
+}
diff --git a/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-packet.c b/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-packet.c
new file mode 100644
index 000000000..5bb065ba1
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-packet.c
@@ -0,0 +1,204 @@
+/***
+ This file is part of systemd.
+
+ Copyright (C) 2013 Intel Corporation. All rights reserved.
+ Copyright (C) 2014 Tom Gundersen
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include "config.h"
+
+#include "nm-sd-adapt.h"
+
+#include <stdlib.h>
+#include <errno.h>
+#include <string.h>
+#include <stdio.h>
+#include <net/ethernet.h>
+#include <net/if_arp.h>
+#include <sys/param.h>
+
+#include "util.h"
+#include "list.h"
+
+#include "dhcp-protocol.h"
+#include "dhcp-lease-internal.h"
+#include "dhcp-internal.h"
+#include "sd-dhcp-lease.h"
+#include "sd-dhcp-client.h"
+
+#define DHCP_CLIENT_MIN_OPTIONS_SIZE 312
+
+int dhcp_message_init(DHCPMessage *message, uint8_t op, uint32_t xid,
+ uint8_t type, uint16_t arp_type, size_t optlen,
+ size_t *optoffset) {
+ size_t offset = 0;
+ int r;
+
+ assert(op == BOOTREQUEST || op == BOOTREPLY);
+ assert(arp_type == ARPHRD_ETHER || arp_type == ARPHRD_INFINIBAND);
+
+ message->op = op;
+ message->htype = arp_type;
+ message->hlen = (arp_type == ARPHRD_ETHER) ? ETHER_ADDR_LEN : 0;
+ message->xid = htobe32(xid);
+ message->magic = htobe32(DHCP_MAGIC_COOKIE);
+
+ r = dhcp_option_append(message, optlen, &offset, 0,
+ DHCP_OPTION_MESSAGE_TYPE, 1, &type);
+ if (r < 0)
+ return r;
+
+ *optoffset = offset;
+
+ return 0;
+}
+
+uint16_t dhcp_packet_checksum(uint8_t *buf, size_t len) {
+ uint64_t *buf_64 = (uint64_t*)buf;
+ uint64_t *end_64 = buf_64 + (len / sizeof(uint64_t));
+ uint64_t sum = 0;
+
+ /* See RFC1071 */
+
+ while (buf_64 < end_64) {
+ sum += *buf_64;
+ if (sum < *buf_64)
+ /* wrap around in one's complement */
+ sum++;
+
+ buf_64 ++;
+ }
+
+ if (len % sizeof(uint64_t)) {
+ /* If the buffer is not aligned to 64-bit, we need
+ to zero-pad the last few bytes and add them in */
+ uint64_t buf_tail = 0;
+
+ memcpy(&buf_tail, buf_64, len % sizeof(uint64_t));
+
+ sum += buf_tail;
+ if (sum < buf_tail)
+ /* wrap around */
+ sum++;
+ }
+
+ while (sum >> 16)
+ sum = (sum & 0xffff) + (sum >> 16);
+
+ return ~sum;
+}
+
+void dhcp_packet_append_ip_headers(DHCPPacket *packet, be32_t source_addr,
+ uint16_t source_port, be32_t destination_addr,
+ uint16_t destination_port, uint16_t len) {
+ packet->ip.version = IPVERSION;
+ packet->ip.ihl = DHCP_IP_SIZE / 4;
+ packet->ip.tot_len = htobe16(len);
+
+ packet->ip.tos = IPTOS_CLASS_CS6;
+
+ packet->ip.protocol = IPPROTO_UDP;
+ packet->ip.saddr = source_addr;
+ packet->ip.daddr = destination_addr;
+
+ packet->udp.source = htobe16(source_port);
+ packet->udp.dest = htobe16(destination_port);
+
+ packet->udp.len = htobe16(len - DHCP_IP_SIZE);
+
+ packet->ip.check = packet->udp.len;
+ packet->udp.check = dhcp_packet_checksum((uint8_t*)&packet->ip.ttl, len - 8);
+
+ packet->ip.ttl = IPDEFTTL;
+ packet->ip.check = 0;
+ packet->ip.check = dhcp_packet_checksum((uint8_t*)&packet->ip, DHCP_IP_SIZE);
+}
+
+int dhcp_packet_verify_headers(DHCPPacket *packet, size_t len, bool checksum) {
+ size_t hdrlen;
+
+ assert(packet);
+
+ /* IP */
+
+ if (packet->ip.version != IPVERSION) {
+ log_debug("ignoring packet: not IPv4");
+ return -EINVAL;
+ }
+
+ if (packet->ip.ihl < 5) {
+ log_debug("ignoring packet: IPv4 IHL (%u words) invalid",
+ packet->ip.ihl);
+ return -EINVAL;
+ }
+
+ hdrlen = packet->ip.ihl * 4;
+ if (hdrlen < 20) {
+ log_debug("ignoring packet: IPv4 IHL (%zu bytes) "
+ "smaller than minimum (20 bytes)", hdrlen);
+ return -EINVAL;
+ }
+
+ if (len < hdrlen) {
+ log_debug("ignoring packet: packet (%zu bytes) "
+ "smaller than expected (%zu) by IP header", len,
+ hdrlen);
+ return -EINVAL;
+ }
+
+ /* UDP */
+
+ if (packet->ip.protocol != IPPROTO_UDP) {
+ log_debug("ignoring packet: not UDP");
+ return -EINVAL;
+ }
+
+ if (len < hdrlen + be16toh(packet->udp.len)) {
+ log_debug("ignoring packet: packet (%zu bytes) "
+ "smaller than expected (%zu) by UDP header", len,
+ hdrlen + be16toh(packet->udp.len));
+ return -EINVAL;
+ }
+
+ if (be16toh(packet->udp.dest) != DHCP_PORT_CLIENT) {
+ log_debug("ignoring packet: to port %u, which "
+ "is not the DHCP client port (%u)",
+ be16toh(packet->udp.dest), DHCP_PORT_CLIENT);
+ return -EINVAL;
+ }
+
+ /* checksums - computing these is relatively expensive, so only do it
+ if all the other checks have passed
+ */
+
+ if (dhcp_packet_checksum((uint8_t*)&packet->ip, hdrlen)) {
+ log_debug("ignoring packet: invalid IP checksum");
+ return -EINVAL;
+ }
+
+ if (checksum && packet->udp.check) {
+ packet->ip.check = packet->udp.len;
+ packet->ip.ttl = 0;
+
+ if (dhcp_packet_checksum((uint8_t*)&packet->ip.ttl,
+ be16toh(packet->udp.len) + 12)) {
+ log_debug("ignoring packet: invalid UDP checksum");
+ return -EINVAL;
+ }
+ }
+
+ return 0;
+}
diff --git a/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-protocol.h b/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-protocol.h
new file mode 100644
index 000000000..abca9422c
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-protocol.h
@@ -0,0 +1,141 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#pragma once
+
+/***
+ This file is part of systemd.
+
+ Copyright (C) 2013 Intel Corporation. All rights reserved.
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <netinet/udp.h>
+#include <netinet/ip.h>
+#include <stdint.h>
+
+#include "macro.h"
+#include "sparse-endian.h"
+
+struct DHCPMessage {
+ uint8_t op;
+ uint8_t htype;
+ uint8_t hlen;
+ uint8_t hops;
+ be32_t xid;
+ be16_t secs;
+ be16_t flags;
+ be32_t ciaddr;
+ be32_t yiaddr;
+ be32_t siaddr;
+ be32_t giaddr;
+ uint8_t chaddr[16];
+ uint8_t sname[64];
+ uint8_t file[128];
+ be32_t magic;
+ uint8_t options[0];
+} _packed_;
+
+typedef struct DHCPMessage DHCPMessage;
+
+struct DHCPPacket {
+ struct iphdr ip;
+ struct udphdr udp;
+ DHCPMessage dhcp;
+} _packed_;
+
+typedef struct DHCPPacket DHCPPacket;
+
+#define DHCP_IP_SIZE (int32_t)(sizeof(struct iphdr))
+#define DHCP_IP_UDP_SIZE (int32_t)(sizeof(struct udphdr) + DHCP_IP_SIZE)
+#define DHCP_MESSAGE_SIZE (int32_t)(sizeof(DHCPMessage))
+#define DHCP_DEFAULT_MIN_SIZE 576 /* the minimum internet hosts must be able to receive */
+#define DHCP_MIN_OPTIONS_SIZE DHCP_DEFAULT_MIN_SIZE - DHCP_IP_UDP_SIZE - DHCP_MESSAGE_SIZE
+#define DHCP_MAGIC_COOKIE (uint32_t)(0x63825363)
+
+enum {
+ DHCP_PORT_SERVER = 67,
+ DHCP_PORT_CLIENT = 68,
+};
+
+enum DHCPState {
+ DHCP_STATE_INIT = 0,
+ DHCP_STATE_SELECTING = 1,
+ DHCP_STATE_INIT_REBOOT = 2,
+ DHCP_STATE_REBOOTING = 3,
+ DHCP_STATE_REQUESTING = 4,
+ DHCP_STATE_BOUND = 5,
+ DHCP_STATE_RENEWING = 6,
+ DHCP_STATE_REBINDING = 7,
+ DHCP_STATE_STOPPED = 8,
+};
+
+typedef enum DHCPState DHCPState;
+
+enum {
+ BOOTREQUEST = 1,
+ BOOTREPLY = 2,
+};
+
+enum {
+ DHCP_DISCOVER = 1,
+ DHCP_OFFER = 2,
+ DHCP_REQUEST = 3,
+ DHCP_DECLINE = 4,
+ DHCP_ACK = 5,
+ DHCP_NAK = 6,
+ DHCP_RELEASE = 7,
+ DHCP_INFORM = 8,
+ DHCP_FORCERENEW = 9,
+};
+
+enum {
+ DHCP_OVERLOAD_FILE = 1,
+ DHCP_OVERLOAD_SNAME = 2,
+};
+
+enum {
+ DHCP_OPTION_PAD = 0,
+ DHCP_OPTION_SUBNET_MASK = 1,
+ DHCP_OPTION_TIME_OFFSET = 2,
+ DHCP_OPTION_ROUTER = 3,
+ DHCP_OPTION_DOMAIN_NAME_SERVER = 6,
+ DHCP_OPTION_HOST_NAME = 12,
+ DHCP_OPTION_BOOT_FILE_SIZE = 13,
+ DHCP_OPTION_DOMAIN_NAME = 15,
+ DHCP_OPTION_ROOT_PATH = 17,
+ DHCP_OPTION_ENABLE_IP_FORWARDING = 19,
+ DHCP_OPTION_ENABLE_IP_FORWARDING_NL = 20,
+ DHCP_OPTION_POLICY_FILTER = 21,
+ DHCP_OPTION_INTERFACE_MDR = 22,
+ DHCP_OPTION_INTERFACE_TTL = 23,
+ DHCP_OPTION_INTERFACE_MTU_AGING_TIMEOUT = 24,
+ DHCP_OPTION_INTERFACE_MTU = 26,
+ DHCP_OPTION_BROADCAST = 28,
+ DHCP_OPTION_STATIC_ROUTE = 33,
+ DHCP_OPTION_NTP_SERVER = 42,
+ DHCP_OPTION_REQUESTED_IP_ADDRESS = 50,
+ DHCP_OPTION_IP_ADDRESS_LEASE_TIME = 51,
+ DHCP_OPTION_OVERLOAD = 52,
+ DHCP_OPTION_MESSAGE_TYPE = 53,
+ DHCP_OPTION_SERVER_IDENTIFIER = 54,
+ DHCP_OPTION_PARAMETER_REQUEST_LIST = 55,
+ DHCP_OPTION_MAXIMUM_MESSAGE_SIZE = 57,
+ DHCP_OPTION_RENEWAL_T1_TIME = 58,
+ DHCP_OPTION_REBINDING_T2_TIME = 59,
+ DHCP_OPTION_VENDOR_CLASS_IDENTIFIER = 60,
+ DHCP_OPTION_CLIENT_IDENTIFIER = 61,
+ DHCP_OPTION_CLASSLESS_STATIC_ROUTE = 121,
+ DHCP_OPTION_END = 255,
+};
diff --git a/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-internal.h b/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-internal.h
new file mode 100644
index 000000000..e29e2f0ee
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-internal.h
@@ -0,0 +1,81 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#pragma once
+
+/***
+ This file is part of systemd.
+
+ Copyright (C) 2014 Intel Corporation. All rights reserved.
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include "nm-sd-adapt.h"
+
+#include <net/ethernet.h>
+#include <netinet/in.h>
+
+#include "sparse-endian.h"
+#include "sd-event.h"
+#include "list.h"
+#include "macro.h"
+
+typedef struct DHCP6Address DHCP6Address;
+
+struct DHCP6Address {
+ LIST_FIELDS(DHCP6Address, addresses);
+
+ struct {
+ struct in6_addr address;
+ be32_t lifetime_preferred;
+ be32_t lifetime_valid;
+ } iaaddr _packed_;
+};
+
+struct DHCP6IA {
+ uint16_t type;
+ struct {
+ be32_t id;
+ be32_t lifetime_t1;
+ be32_t lifetime_t2;
+ } _packed_;
+ sd_event_source *timeout_t1;
+ sd_event_source *timeout_t2;
+
+ LIST_HEAD(DHCP6Address, addresses);
+};
+
+typedef struct DHCP6IA DHCP6IA;
+
+#define log_dhcp6_client(p, fmt, ...) log_meta(LOG_DEBUG, __FILE__, __LINE__, __func__, "DHCPv6 CLIENT: " fmt, ##__VA_ARGS__)
+
+int dhcp_network_icmp6_bind_router_solicitation(int index);
+int dhcp_network_icmp6_send_router_solicitation(int s, const struct ether_addr *ether_addr);
+
+int dhcp6_option_append(uint8_t **buf, size_t *buflen, uint16_t code,
+ size_t optlen, const void *optval);
+int dhcp6_option_append_ia(uint8_t **buf, size_t *buflen, DHCP6IA *ia);
+int dhcp6_option_parse(uint8_t **buf, size_t *buflen, uint16_t *optcode,
+ size_t *optlen, uint8_t **optvalue);
+int dhcp6_option_parse_ia(uint8_t **buf, size_t *buflen, uint16_t iatype,
+ DHCP6IA *ia);
+
+int dhcp6_network_bind_udp_socket(int index, struct in6_addr *address);
+int dhcp6_network_send_udp_socket(int s, struct in6_addr *address,
+ const void *packet, size_t len);
+
+const char *dhcp6_message_type_to_string(int s) _const_;
+int dhcp6_message_type_from_string(const char *s) _pure_;
+const char *dhcp6_message_status_to_string(int s) _const_;
+int dhcp6_message_status_from_string(const char *s) _pure_;
diff --git a/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-lease-internal.h b/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-lease-internal.h
new file mode 100644
index 000000000..9f7826c46
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-lease-internal.h
@@ -0,0 +1,64 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#pragma once
+
+/***
+ This file is part of systemd.
+
+ Copyright (C) 2014 Tom Gundersen
+ Copyright (C) 2014 Intel Corporation. All rights reserved.
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include "nm-sd-adapt.h"
+
+#include <stdint.h>
+
+#include "refcnt.h"
+
+#include "sd-dhcp6-lease.h"
+#include "dhcp6-internal.h"
+
+struct sd_dhcp6_lease {
+ RefCount n_ref;
+
+ uint8_t *serverid;
+ size_t serverid_len;
+ uint8_t preference;
+ bool rapid_commit;
+
+ DHCP6IA ia;
+
+ DHCP6Address *addr_iter;
+};
+
+int dhcp6_lease_clear_timers(DHCP6IA *ia);
+int dhcp6_lease_ia_rebind_expire(const DHCP6IA *ia, uint32_t *expire);
+DHCP6IA *dhcp6_lease_free_ia(DHCP6IA *ia);
+
+int dhcp6_lease_set_serverid(sd_dhcp6_lease *lease, const uint8_t *id,
+ size_t len);
+int dhcp6_lease_get_serverid(sd_dhcp6_lease *lease, uint8_t **id, size_t *len);
+int dhcp6_lease_set_preference(sd_dhcp6_lease *lease, uint8_t preference);
+int dhcp6_lease_get_preference(sd_dhcp6_lease *lease, uint8_t *preference);
+int dhcp6_lease_set_rapid_commit(sd_dhcp6_lease *lease);
+int dhcp6_lease_get_rapid_commit(sd_dhcp6_lease *lease, bool *rapid_commit);
+
+int dhcp6_lease_get_iaid(sd_dhcp6_lease *lease, be32_t *iaid);
+
+int dhcp6_lease_new(sd_dhcp6_lease **ret);
+
+DEFINE_TRIVIAL_CLEANUP_FUNC(sd_dhcp6_lease*, sd_dhcp6_lease_unref);
+#define _cleanup_dhcp6_lease_free_ _cleanup_(sd_dhcp6_lease_unrefp)
diff --git a/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-network.c b/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-network.c
new file mode 100644
index 000000000..fbb20ef94
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-network.c
@@ -0,0 +1,198 @@
+/***
+ This file is part of systemd.
+
+ Copyright (C) 2014 Intel Corporation. All rights reserved.
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include "config.h"
+
+#include "nm-sd-adapt.h"
+
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <string.h>
+#include <linux/if_packet.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <netinet/ip6.h>
+#include <netinet/icmp6.h>
+#include <netinet/in.h>
+
+#include "socket-util.h"
+
+#include "dhcp6-internal.h"
+#include "dhcp6-protocol.h"
+
+#define IN6ADDR_ALL_ROUTERS_MULTICAST_INIT \
+ { { { 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 } } }
+
+#define IN6ADDR_ALL_NODES_MULTICAST_INIT \
+ { { { 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 } } }
+
+int dhcp_network_icmp6_bind_router_solicitation(int index)
+{
+ struct icmp6_filter filter = { };
+ struct ipv6_mreq mreq = {
+ .ipv6mr_multiaddr = IN6ADDR_ALL_NODES_MULTICAST_INIT,
+ .ipv6mr_interface = index,
+ };
+ _cleanup_close_ int s = -1;
+ int r, zero = 0, hops = 255;
+
+ s = socket(AF_INET6, SOCK_RAW | SOCK_CLOEXEC | SOCK_NONBLOCK,
+ IPPROTO_ICMPV6);
+ if (s < 0)
+ return -errno;
+
+ ICMP6_FILTER_SETBLOCKALL(&filter);
+ ICMP6_FILTER_SETPASS(ND_ROUTER_ADVERT, &filter);
+ r = setsockopt(s, IPPROTO_ICMPV6, ICMP6_FILTER, &filter,
+ sizeof(filter));
+ if (r < 0)
+ return -errno;
+
+ /* RFC 3315, section 6.7, bullet point 2 may indicate that an
+ IPV6_PKTINFO socket option also applies for ICMPv6 multicast.
+ Empirical experiments indicates otherwise and therefore an
+ IPV6_MULTICAST_IF socket option is used here instead */
+ r = setsockopt(s, IPPROTO_IPV6, IPV6_MULTICAST_IF, &index,
+ sizeof(index));
+ if (r < 0)
+ return -errno;
+
+ r = setsockopt(s, IPPROTO_IPV6, IPV6_MULTICAST_LOOP, &zero,
+ sizeof(zero));
+ if (r < 0)
+ return -errno;
+
+ r = setsockopt(s, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, &hops,
+ sizeof(hops));
+ if (r < 0)
+ return -errno;
+
+ r = setsockopt(s, IPPROTO_IPV6, IPV6_ADD_MEMBERSHIP, &mreq,
+ sizeof(mreq));
+ if (r < 0)
+ return -errno;
+
+ r = s;
+ s = -1;
+ return r;
+}
+
+int dhcp_network_icmp6_send_router_solicitation(int s, const struct ether_addr *ether_addr)
+{
+ struct sockaddr_in6 dst = {
+ .sin6_family = AF_INET6,
+ .sin6_addr = IN6ADDR_ALL_ROUTERS_MULTICAST_INIT,
+ };
+ struct {
+ struct nd_router_solicit rs;
+ struct nd_opt_hdr rs_opt;
+ struct ether_addr rs_opt_mac;
+ } _packed_ rs = {
+ .rs.nd_rs_type = ND_ROUTER_SOLICIT,
+ };
+ struct iovec iov[1] = {
+ { &rs, },
+ };
+ struct msghdr msg = {
+ .msg_name = &dst,
+ .msg_namelen = sizeof(dst),
+ .msg_iov = iov,
+ .msg_iovlen = 1,
+ };
+ int r;
+
+ if (ether_addr) {
+ memcpy(&rs.rs_opt_mac, ether_addr, ETH_ALEN);
+ rs.rs_opt.nd_opt_type = ND_OPT_SOURCE_LINKADDR;
+ rs.rs_opt.nd_opt_len = 1;
+ iov[0].iov_len = sizeof(rs);
+ } else
+ iov[0].iov_len = sizeof(rs.rs);
+
+ r = sendmsg(s, &msg, 0);
+ if (r < 0)
+ return -errno;
+
+ return 0;
+}
+
+int dhcp6_network_bind_udp_socket(int index, struct in6_addr *local_address) {
+ struct in6_pktinfo pktinfo = {
+ .ipi6_ifindex = index,
+ };
+ union sockaddr_union src = {
+ .in6.sin6_family = AF_INET6,
+ .in6.sin6_port = htobe16(DHCP6_PORT_CLIENT),
+ .in6.sin6_addr = IN6ADDR_ANY_INIT,
+ };
+ _cleanup_close_ int s = -1;
+ int r, off = 0, on = 1;
+
+ if (local_address)
+ memcpy(&src.in6.sin6_addr, local_address,
+ sizeof(src.in6.sin6_addr));
+
+ s = socket(AF_INET6, SOCK_DGRAM | SOCK_CLOEXEC | SOCK_NONBLOCK,
+ IPPROTO_UDP);
+ if (s < 0)
+ return -errno;
+
+ r = setsockopt(s, IPPROTO_IPV6, IPV6_PKTINFO, &pktinfo,
+ sizeof(pktinfo));
+ if (r < 0)
+ return -errno;
+
+ r = setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY, &on, sizeof(on));
+ if (r < 0)
+ return -errno;
+
+ r = setsockopt(s, IPPROTO_IPV6, IPV6_MULTICAST_LOOP, &off, sizeof(off));
+ if (r < 0)
+ return -errno;
+
+ r = bind(s, &src.sa, sizeof(src.in6));
+ if (r < 0)
+ return -errno;
+
+ r = s;
+ s = -1;
+ return r;
+}
+
+int dhcp6_network_send_udp_socket(int s, struct in6_addr *server_address,
+ const void *packet, size_t len) {
+ union sockaddr_union dest = {
+ .in6.sin6_family = AF_INET6,
+ .in6.sin6_port = htobe16(DHCP6_PORT_SERVER),
+ };
+ int r;
+
+ assert(server_address);
+
+ memcpy(&dest.in6.sin6_addr, server_address, sizeof(dest.in6.sin6_addr));
+
+ r = sendto(s, packet, len, 0, &dest.sa, sizeof(dest.in6));
+ if (r < 0)
+ return -errno;
+
+ return 0;
+}
diff --git a/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-option.c b/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-option.c
new file mode 100644
index 000000000..3d6e24623
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-option.c
@@ -0,0 +1,323 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright (C) 2014 Intel Corporation. All rights reserved.
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include "config.h"
+
+#include "nm-sd-adapt.h"
+
+#include <netinet/in.h>
+#include <errno.h>
+#include <string.h>
+
+#include "sparse-endian.h"
+#include "unaligned.h"
+#include "util.h"
+
+#include "dhcp6-internal.h"
+#include "dhcp6-protocol.h"
+
+#define DHCP6_OPTION_IA_NA_LEN 12
+#define DHCP6_OPTION_IA_TA_LEN 4
+
+typedef struct DHCP6Option {
+ be16_t code;
+ be16_t len;
+ uint8_t data[];
+} _packed_ DHCP6Option;
+
+static int option_append_hdr(uint8_t **buf, size_t *buflen, uint16_t optcode,
+ size_t optlen) {
+ DHCP6Option *option = (DHCP6Option*) *buf;
+
+ assert_return(buf, -EINVAL);
+ assert_return(*buf, -EINVAL);
+ assert_return(buflen, -EINVAL);
+
+ if (optlen > 0xffff || *buflen < optlen + sizeof(DHCP6Option))
+ return -ENOBUFS;
+
+ option->code = htobe16(optcode);
+ option->len = htobe16(optlen);
+
+ *buf += sizeof(DHCP6Option);
+ *buflen -= sizeof(DHCP6Option);
+
+ return 0;
+}
+
+int dhcp6_option_append(uint8_t **buf, size_t *buflen, uint16_t code,
+ size_t optlen, const void *optval) {
+ int r;
+
+ assert_return(optval || optlen == 0, -EINVAL);
+
+ r = option_append_hdr(buf, buflen, code, optlen);
+ if (r < 0)
+ return r;
+
+ if (optval)
+ memcpy(*buf, optval, optlen);
+
+ *buf += optlen;
+ *buflen -= optlen;
+
+ return 0;
+}
+
+int dhcp6_option_append_ia(uint8_t **buf, size_t *buflen, DHCP6IA *ia) {
+ uint16_t len;
+ uint8_t *ia_hdr;
+ size_t ia_buflen, ia_addrlen = 0;
+ DHCP6Address *addr;
+ int r;
+
+ assert_return(buf && *buf && buflen && ia, -EINVAL);
+
+ switch (ia->type) {
+ case DHCP6_OPTION_IA_NA:
+ len = DHCP6_OPTION_IA_NA_LEN;
+ break;
+
+ case DHCP6_OPTION_IA_TA:
+ len = DHCP6_OPTION_IA_TA_LEN;
+ break;
+
+ default:
+ return -EINVAL;
+ }
+
+ if (*buflen < len)
+ return -ENOBUFS;
+
+ ia_hdr = *buf;
+ ia_buflen = *buflen;
+
+ *buf += sizeof(DHCP6Option);
+ *buflen -= sizeof(DHCP6Option);
+
+ memcpy(*buf, &ia->id, len);
+
+ *buf += len;
+ *buflen -= len;
+
+ LIST_FOREACH(addresses, addr, ia->addresses) {
+ r = option_append_hdr(buf, buflen, DHCP6_OPTION_IAADDR,
+ sizeof(addr->iaaddr));
+ if (r < 0)
+ return r;
+
+ memcpy(*buf, &addr->iaaddr, sizeof(addr->iaaddr));
+
+ *buf += sizeof(addr->iaaddr);
+ *buflen -= sizeof(addr->iaaddr);
+
+ ia_addrlen += sizeof(DHCP6Option) + sizeof(addr->iaaddr);
+ }
+
+ r = option_append_hdr(&ia_hdr, &ia_buflen, ia->type, len + ia_addrlen);
+ if (r < 0)
+ return r;
+
+ return 0;
+}
+
+
+static int option_parse_hdr(uint8_t **buf, size_t *buflen, uint16_t *optcode, size_t *optlen) {
+ DHCP6Option *option = (DHCP6Option*) *buf;
+ uint16_t len;
+
+ assert_return(buf, -EINVAL);
+ assert_return(optcode, -EINVAL);
+ assert_return(optlen, -EINVAL);
+
+ if (*buflen < sizeof(DHCP6Option))
+ return -ENOMSG;
+
+ len = be16toh(option->len);
+
+ if (len > *buflen)
+ return -ENOMSG;
+
+ *optcode = be16toh(option->code);
+ *optlen = len;
+
+ *buf += 4;
+ *buflen -= 4;
+
+ return 0;
+}
+
+int dhcp6_option_parse(uint8_t **buf, size_t *buflen, uint16_t *optcode,
+ size_t *optlen, uint8_t **optvalue) {
+ int r;
+
+ assert_return(buf && buflen && optcode && optlen && optvalue, -EINVAL);
+
+ r = option_parse_hdr(buf, buflen, optcode, optlen);
+ if (r < 0)
+ return r;
+
+ if (*optlen > *buflen)
+ return -ENOBUFS;
+
+ *optvalue = *buf;
+ *buflen -= *optlen;
+ *buf += *optlen;
+
+ return 0;
+}
+
+int dhcp6_option_parse_ia(uint8_t **buf, size_t *buflen, uint16_t iatype,
+ DHCP6IA *ia) {
+ int r;
+ uint16_t opt, status;
+ size_t optlen;
+ size_t iaaddr_offset;
+ DHCP6Address *addr;
+ uint32_t lt_t1, lt_t2, lt_valid, lt_pref, lt_min = ~0;
+
+ assert_return(ia, -EINVAL);
+ assert_return(!ia->addresses, -EINVAL);
+
+ switch (iatype) {
+ case DHCP6_OPTION_IA_NA:
+
+ if (*buflen < DHCP6_OPTION_IA_NA_LEN + sizeof(DHCP6Option) +
+ sizeof(addr->iaaddr)) {
+ r = -ENOBUFS;
+ goto error;
+ }
+
+ iaaddr_offset = DHCP6_OPTION_IA_NA_LEN;
+ memcpy(&ia->id, *buf, iaaddr_offset);
+
+ lt_t1 = be32toh(ia->lifetime_t1);
+ lt_t2 = be32toh(ia->lifetime_t2);
+
+ if (lt_t1 && lt_t2 && lt_t1 > lt_t2) {
+ log_dhcp6_client(client, "IA T1 %ds > T2 %ds",
+ lt_t1, lt_t2);
+ r = -EINVAL;
+ goto error;
+ }
+
+ break;
+
+ case DHCP6_OPTION_IA_TA:
+ if (*buflen < DHCP6_OPTION_IA_TA_LEN + sizeof(DHCP6Option) +
+ sizeof(addr->iaaddr)) {
+ r = -ENOBUFS;
+ goto error;
+ }
+
+ iaaddr_offset = DHCP6_OPTION_IA_TA_LEN;
+ memcpy(&ia->id, *buf, iaaddr_offset);
+
+ ia->lifetime_t1 = 0;
+ ia->lifetime_t2 = 0;
+
+ break;
+
+ default:
+ r = -ENOMSG;
+ goto error;
+ }
+
+ ia->type = iatype;
+
+ *buflen -= iaaddr_offset;
+ *buf += iaaddr_offset;
+
+ while ((r = option_parse_hdr(buf, buflen, &opt, &optlen)) >= 0) {
+
+ switch (opt) {
+ case DHCP6_OPTION_IAADDR:
+
+ addr = new0(DHCP6Address, 1);
+ if (!addr) {
+ r = -ENOMEM;
+ goto error;
+ }
+
+ LIST_INIT(addresses, addr);
+
+ memcpy(&addr->iaaddr, *buf, sizeof(addr->iaaddr));
+
+ lt_valid = be32toh(addr->iaaddr.lifetime_valid);
+ lt_pref = be32toh(addr->iaaddr.lifetime_valid);
+
+ if (!lt_valid || lt_pref > lt_valid) {
+ log_dhcp6_client(client, "IA preferred %ds > valid %ds",
+ lt_pref, lt_valid);
+ free(addr);
+ } else {
+ LIST_PREPEND(addresses, ia->addresses, addr);
+ if (lt_valid < lt_min)
+ lt_min = lt_valid;
+ }
+
+ break;
+
+ case DHCP6_OPTION_STATUS_CODE:
+ if (optlen < sizeof(status))
+ break;
+
+ status = (*buf)[0] << 8 | (*buf)[1];
+ if (status) {
+ log_dhcp6_client(client, "IA status %d",
+ status);
+ r = -EINVAL;
+ goto error;
+ }
+
+ break;
+
+ default:
+ log_dhcp6_client(client, "Unknown IA option %d", opt);
+ break;
+ }
+
+ *buflen -= optlen;
+ *buf += optlen;
+ }
+
+ if (r == -ENOMSG)
+ r = 0;
+
+ if (!ia->lifetime_t1 && !ia->lifetime_t2) {
+ lt_t1 = lt_min / 2;
+ lt_t2 = lt_min / 10 * 8;
+ ia->lifetime_t1 = htobe32(lt_t1);
+ ia->lifetime_t2 = htobe32(lt_t2);
+
+ log_dhcp6_client(client, "Computed IA T1 %ds and T2 %ds as both were zero",
+ lt_t1, lt_t2);
+ }
+
+ if (*buflen)
+ r = -ENOMSG;
+
+error:
+ *buf += *buflen;
+ *buflen = 0;
+
+ return r;
+}
diff --git a/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-protocol.h b/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-protocol.h
new file mode 100644
index 000000000..eaa671711
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-protocol.h
@@ -0,0 +1,141 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#pragma once
+
+/***
+ This file is part of systemd.
+
+ Copyright (C) 2014 Intel Corporation. All rights reserved.
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <netinet/ip6.h>
+#include <netinet/udp.h>
+
+#include "macro.h"
+#include "sparse-endian.h"
+
+struct DHCP6Message {
+ union {
+ struct {
+ uint8_t type;
+ uint8_t _pad[3];
+ } _packed_;
+ be32_t transaction_id;
+ };
+} _packed_;
+
+typedef struct DHCP6Message DHCP6Message;
+
+#define DHCP6_MIN_OPTIONS_SIZE \
+ 1280 - sizeof(struct ip6_hdr) - sizeof(struct udphdr)
+
+#define IN6ADDR_ALL_DHCP6_RELAY_AGENTS_AND_SERVERS_INIT \
+ { { { 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02 } } }
+
+enum {
+ DHCP6_PORT_SERVER = 547,
+ DHCP6_PORT_CLIENT = 546,
+};
+
+#define DHCP6_SOL_MAX_DELAY 1 * USEC_PER_SEC
+#define DHCP6_SOL_TIMEOUT 1 * USEC_PER_SEC
+#define DHCP6_SOL_MAX_RT 120 * USEC_PER_SEC
+#define DHCP6_REQ_TIMEOUT 1 * USEC_PER_SEC
+#define DHCP6_REQ_MAX_RT 120 * USEC_PER_SEC
+#define DHCP6_REQ_MAX_RC 10
+#define DHCP6_REN_TIMEOUT 10 * USEC_PER_SEC
+#define DHCP6_REN_MAX_RT 600 * USEC_PER_SEC
+#define DHCP6_REB_TIMEOUT 10 * USEC_PER_SEC
+#define DHCP6_REB_MAX_RT 600 * USEC_PER_SEC
+
+enum {
+ DHCP6_DUID_LLT = 1,
+ DHCP6_DUID_EN = 2,
+ DHCP6_DUID_LL = 3,
+ DHCP6_DUID_UUID = 4,
+};
+
+enum DHCP6State {
+ DHCP6_STATE_STOPPED = 0,
+ DHCP6_STATE_SOLICITATION = 2,
+ DHCP6_STATE_REQUEST = 3,
+ DHCP6_STATE_BOUND = 4,
+ DHCP6_STATE_RENEW = 5,
+ DHCP6_STATE_REBIND = 6,
+};
+
+enum {
+ DHCP6_SOLICIT = 1,
+ DHCP6_ADVERTISE = 2,
+ DHCP6_REQUEST = 3,
+ DHCP6_CONFIRM = 4,
+ DHCP6_RENEW = 5,
+ DHCP6_REBIND = 6,
+ DHCP6_REPLY = 7,
+ DHCP6_RELEASE = 8,
+ DHCP6_DECLINE = 9,
+ DHCP6_RECONFIGURE = 10,
+ DHCP6_INFORMATION_REQUEST = 11,
+ DHCP6_RELAY_FORW = 12,
+ DHCP6_RELAY_REPL = 13,
+ _DHCP6_MESSAGE_MAX = 14,
+};
+
+enum {
+ DHCP6_OPTION_CLIENTID = 1,
+ DHCP6_OPTION_SERVERID = 2,
+ DHCP6_OPTION_IA_NA = 3,
+ DHCP6_OPTION_IA_TA = 4,
+ DHCP6_OPTION_IAADDR = 5,
+ DHCP6_OPTION_ORO = 6,
+ DHCP6_OPTION_PREFERENCE = 7,
+ DHCP6_OPTION_ELAPSED_TIME = 8,
+ DHCP6_OPTION_RELAY_MSG = 9,
+ /* option code 10 is unassigned */
+ DHCP6_OPTION_AUTH = 11,
+ DHCP6_OPTION_UNICAST = 12,
+ DHCP6_OPTION_STATUS_CODE = 13,
+ DHCP6_OPTION_RAPID_COMMIT = 14,
+ DHCP6_OPTION_USER_CLASS = 15,
+ DHCP6_OPTION_VENDOR_CLASS = 16,
+ DHCP6_OPTION_VENDOR_OPTS = 17,
+ DHCP6_OPTION_INTERFACE_ID = 18,
+ DHCP6_OPTION_RECONF_MSG = 19,
+ DHCP6_OPTION_RECONF_ACCEPT = 20,
+
+ DHCP6_OPTION_DNS_SERVERS = 23, /* RFC 3646 */
+ DHCP6_OPTION_DOMAIN_LIST = 24, /* RFC 3646 */
+
+ DHCP6_OPTION_SNTP_SERVERS = 31, /* RFC 4075 */
+
+ /* option code 35 is unassigned */
+
+ DHCP6_OPTION_NTP_SERVER = 56, /* RFC 5908 */
+
+ /* option codes 89-142 are unassigned */
+ /* option codes 144-65535 are unassigned */
+};
+
+enum {
+ DHCP6_STATUS_SUCCESS = 0,
+ DHCP6_STATUS_UNSPEC_FAIL = 1,
+ DHCP6_STATUS_NO_ADDRS_AVAIL = 2,
+ DHCP6_STATUS_NO_BINDING = 3,
+ DHCP6_STATUS_NOT_ON_LINK = 4,
+ DHCP6_STATUS_USE_MULTICAST = 5,
+ _DHCP6_STATUS_MAX = 6,
+};
diff --git a/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/network-internal.c b/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/network-internal.c
new file mode 100644
index 000000000..b9334bd65
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/network-internal.c
@@ -0,0 +1,484 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright (C) 2013 Tom Gundersen <teg@jklm.no>
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include "config.h"
+
+#include "nm-sd-adapt.h"
+
+#include <netinet/ether.h>
+#include <linux/if.h>
+#include <arpa/inet.h>
+#include <fnmatch.h>
+
+#if 0 /* NM_IGNORED */
+#include "strv.h"
+#include "siphash24.h"
+#include "libudev-private.h"
+#endif
+#include "dhcp-lease-internal.h"
+#if 0 /* NM_IGNORED */
+#include "log.h"
+#include "utf8.h"
+#endif
+#include "util.h"
+#if 0 /* NM_IGNORED */
+#include "conf-parser.h"
+#include "condition.h"
+#endif
+#include "network-internal.h"
+
+#if 0 /* NM_IGNORED */
+const char *net_get_name(struct udev_device *device) {
+ const char *name, *field;
+
+ assert(device);
+
+ /* fetch some persistent data unique (on this machine) to this device */
+ FOREACH_STRING(field, "ID_NET_NAME_ONBOARD", "ID_NET_NAME_SLOT", "ID_NET_NAME_PATH", "ID_NET_NAME_MAC") {
+ name = udev_device_get_property_value(device, field);
+ if (name)
+ return name;
+ }
+
+ return NULL;
+}
+
+#define HASH_KEY SD_ID128_MAKE(d3,1e,48,fa,90,fe,4b,4c,9d,af,d5,d7,a1,b1,2e,8a)
+
+int net_get_unique_predictable_data(struct udev_device *device, uint8_t result[8]) {
+ size_t l, sz = 0;
+ const char *name = NULL;
+ int r;
+ uint8_t *v;
+
+ assert(device);
+
+ name = net_get_name(device);
+ if (!name)
+ return -ENOENT;
+
+ l = strlen(name);
+ sz = sizeof(sd_id128_t) + l;
+ v = alloca(sz);
+
+ /* fetch some persistent data unique to this machine */
+ r = sd_id128_get_machine((sd_id128_t*) v);
+ if (r < 0)
+ return r;
+ memcpy(v + sizeof(sd_id128_t), name, l);
+
+ /* Let's hash the machine ID plus the device name. We
+ * use a fixed, but originally randomly created hash
+ * key here. */
+ siphash24(result, v, sz, HASH_KEY.bytes);
+
+ return 0;
+}
+
+bool net_match_config(const struct ether_addr *match_mac,
+ const char *match_path,
+ const char *match_driver,
+ const char *match_type,
+ const char *match_name,
+ Condition *match_host,
+ Condition *match_virt,
+ Condition *match_kernel,
+ Condition *match_arch,
+ const struct ether_addr *dev_mac,
+ const char *dev_path,
+ const char *dev_parent_driver,
+ const char *dev_driver,
+ const char *dev_type,
+ const char *dev_name) {
+
+ if (match_host && !condition_test(match_host))
+ return 0;
+
+ if (match_virt && !condition_test(match_virt))
+ return 0;
+
+ if (match_kernel && !condition_test(match_kernel))
+ return 0;
+
+ if (match_arch && !condition_test(match_arch))
+ return 0;
+
+ if (match_mac && (!dev_mac || memcmp(match_mac, dev_mac, ETH_ALEN)))
+ return 0;
+
+ if (match_path && (!dev_path || fnmatch(match_path, dev_path, 0)))
+ return 0;
+
+ if (match_driver) {
+ if (dev_parent_driver && !streq(match_driver, dev_parent_driver))
+ return 0;
+ else if (!streq_ptr(match_driver, dev_driver))
+ return 0;
+ }
+
+ if (match_type && !streq_ptr(match_type, dev_type))
+ return 0;
+
+ if (match_name && (!dev_name || fnmatch(match_name, dev_name, 0)))
+ return 0;
+
+ return 1;
+}
+
+int config_parse_net_condition(const char *unit,
+ const char *filename,
+ unsigned line,
+ const char *section,
+ unsigned section_line,
+ const char *lvalue,
+ int ltype,
+ const char *rvalue,
+ void *data,
+ void *userdata) {
+
+ ConditionType cond = ltype;
+ Condition **ret = data;
+ bool negate;
+ Condition *c;
+ _cleanup_free_ char *s = NULL;
+
+ assert(filename);
+ assert(lvalue);
+ assert(rvalue);
+ assert(data);
+
+ negate = rvalue[0] == '!';
+ if (negate)
+ rvalue++;
+
+ s = strdup(rvalue);
+ if (!s)
+ return log_oom();
+
+ c = condition_new(cond, s, false, negate);
+ if (!c)
+ return log_oom();
+
+ if (*ret)
+ condition_free(*ret);
+
+ *ret = c;
+ return 0;
+}
+
+int config_parse_ifname(const char *unit,
+ const char *filename,
+ unsigned line,
+ const char *section,
+ unsigned section_line,
+ const char *lvalue,
+ int ltype,
+ const char *rvalue,
+ void *data,
+ void *userdata) {
+
+ char **s = data;
+ _cleanup_free_ char *n = NULL;
+
+ assert(filename);
+ assert(lvalue);
+ assert(rvalue);
+ assert(data);
+
+ n = strdup(rvalue);
+ if (!n)
+ return log_oom();
+
+ if (!ascii_is_valid(n) || strlen(n) >= IFNAMSIZ) {
+ log_syntax(unit, LOG_ERR, filename, line, EINVAL,
+ "Interface name is not ASCII clean or is too long, ignoring assignment: %s", rvalue);
+ return 0;
+ }
+
+ free(*s);
+ if (*n) {
+ *s = n;
+ n = NULL;
+ } else
+ *s = NULL;
+
+ return 0;
+}
+
+int config_parse_ifalias(const char *unit,
+ const char *filename,
+ unsigned line,
+ const char *section,
+ unsigned section_line,
+ const char *lvalue,
+ int ltype,
+ const char *rvalue,
+ void *data,
+ void *userdata) {
+
+ char **s = data;
+ char *n;
+
+ assert(filename);
+ assert(lvalue);
+ assert(rvalue);
+ assert(data);
+
+ n = strdup(rvalue);
+ if (!n)
+ return log_oom();
+
+ if (!ascii_is_valid(n) || strlen(n) >= IFALIASZ) {
+ log_syntax(unit, LOG_ERR, filename, line, EINVAL,
+ "Interface alias is not ASCII clean or is too long, ignoring assignment: %s", rvalue);
+ free(n);
+ return 0;
+ }
+
+ free(*s);
+ if (*n)
+ *s = n;
+ else {
+ free(n);
+ *s = NULL;
+ }
+
+ return 0;
+}
+
+int config_parse_hwaddr(const char *unit,
+ const char *filename,
+ unsigned line,
+ const char *section,
+ unsigned section_line,
+ const char *lvalue,
+ int ltype,
+ const char *rvalue,
+ void *data,
+ void *userdata) {
+ struct ether_addr **hwaddr = data;
+ struct ether_addr *n;
+ int r;
+
+ assert(filename);
+ assert(lvalue);
+ assert(rvalue);
+ assert(data);
+
+ n = new0(struct ether_addr, 1);
+ if (!n)
+ return log_oom();
+
+ r = sscanf(rvalue, "%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx",
+ &n->ether_addr_octet[0],
+ &n->ether_addr_octet[1],
+ &n->ether_addr_octet[2],
+ &n->ether_addr_octet[3],
+ &n->ether_addr_octet[4],
+ &n->ether_addr_octet[5]);
+ if (r != 6) {
+ log_syntax(unit, LOG_ERR, filename, line, EINVAL,
+ "Not a valid MAC address, ignoring assignment: %s", rvalue);
+ free(n);
+ return 0;
+ }
+
+ free(*hwaddr);
+ *hwaddr = n;
+
+ return 0;
+}
+#endif
+
+void serialize_in_addrs(FILE *f, const struct in_addr *addresses, size_t size) {
+ unsigned i;
+
+ assert(f);
+ assert(addresses);
+ assert(size);
+
+ for (i = 0; i < size; i++)
+ fprintf(f, "%s%s", inet_ntoa(addresses[i]),
+ (i < (size - 1)) ? " ": "");
+}
+
+int deserialize_in_addrs(struct in_addr **ret, const char *string) {
+ _cleanup_free_ struct in_addr *addresses = NULL;
+ int size = 0;
+ const char *word, *state;
+ size_t len;
+
+ assert(ret);
+ assert(string);
+
+ FOREACH_WORD(word, len, string, state) {
+ _cleanup_free_ char *addr_str = NULL;
+ struct in_addr *new_addresses;
+ int r;
+
+ new_addresses = realloc(addresses, (size + 1) * sizeof(struct in_addr));
+ if (!new_addresses)
+ return -ENOMEM;
+ else
+ addresses = new_addresses;
+
+ addr_str = strndup(word, len);
+ if (!addr_str)
+ return -ENOMEM;
+
+ r = inet_pton(AF_INET, addr_str, &(addresses[size]));
+ if (r <= 0)
+ continue;
+
+ size ++;
+ }
+
+ *ret = addresses;
+ addresses = NULL;
+
+ return size;
+}
+
+int deserialize_in6_addrs(struct in6_addr **ret, const char *string) {
+ _cleanup_free_ struct in6_addr *addresses = NULL;
+ int size = 0;
+ const char *word, *state;
+ size_t len;
+
+ assert(ret);
+ assert(string);
+
+ FOREACH_WORD(word, len, string, state) {
+ _cleanup_free_ char *addr_str = NULL;
+ struct in6_addr *new_addresses;
+ int r;
+
+ new_addresses = realloc(addresses, (size + 1) * sizeof(struct in6_addr));
+ if (!new_addresses)
+ return -ENOMEM;
+ else
+ addresses = new_addresses;
+
+ addr_str = strndup(word, len);
+ if (!addr_str)
+ return -ENOMEM;
+
+ r = inet_pton(AF_INET6, addr_str, &(addresses[size]));
+ if (r <= 0)
+ continue;
+
+ size++;
+ }
+
+ *ret = addresses;
+ addresses = NULL;
+
+ return size;
+}
+
+void serialize_dhcp_routes(FILE *f, const char *key, struct sd_dhcp_route *routes, size_t size) {
+ unsigned i;
+
+ assert(f);
+ assert(key);
+ assert(routes);
+ assert(size);
+
+ fprintf(f, "%s=", key);
+
+ for (i = 0; i < size; i++) {
+ fprintf(f, "%s/%" PRIu8, inet_ntoa(routes[i].dst_addr),
+ routes[i].dst_prefixlen);
+ fprintf(f, ",%s%s", inet_ntoa(routes[i].gw_addr),
+ (i < (size - 1)) ? " ": "");
+ }
+
+ fputs("\n", f);
+}
+
+int deserialize_dhcp_routes(struct sd_dhcp_route **ret, size_t *ret_size, size_t *ret_allocated, const char *string) {
+ _cleanup_free_ struct sd_dhcp_route *routes = NULL;
+ size_t size = 0, allocated = 0;
+ const char *word, *state;
+ size_t len;
+
+ assert(ret);
+ assert(ret_size);
+ assert(ret_allocated);
+ assert(string);
+
+ FOREACH_WORD(word, len, string, state) {
+ /* WORD FORMAT: dst_ip/dst_prefixlen,gw_ip */
+ _cleanup_free_ char* entry = NULL;
+ char *tok, *tok_end;
+ unsigned n;
+ int r;
+
+ if (!GREEDY_REALLOC(routes, allocated, size + 1))
+ return -ENOMEM;
+
+ entry = strndup(word, len);
+ if(!entry)
+ return -ENOMEM;
+
+ tok = entry;
+
+ /* get the subnet */
+ tok_end = strchr(tok, '/');
+ if (!tok_end)
+ continue;
+ *tok_end = '\0';
+
+ r = inet_aton(tok, &routes[size].dst_addr);
+ if (r == 0)
+ continue;
+
+ tok = tok_end + 1;
+
+ /* get the prefixlen */
+ tok_end = strchr(tok, ',');
+ if (!tok_end)
+ continue;
+
+ *tok_end = '\0';
+
+ r = safe_atou(tok, &n);
+ if (r < 0 || n > 32)
+ continue;
+
+ routes[size].dst_prefixlen = (uint8_t) n;
+ tok = tok_end + 1;
+
+ /* get the gateway */
+ r = inet_aton(tok, &routes[size].gw_addr);
+ if (r == 0)
+ continue;
+
+ size++;
+ }
+
+ *ret_size = size;
+ *ret_allocated = allocated;
+ *ret = routes;
+ routes = NULL;
+
+ return 0;
+}
diff --git a/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/network-internal.h b/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/network-internal.h
new file mode 100644
index 000000000..f87c863d9
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/network-internal.h
@@ -0,0 +1,78 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#pragma once
+
+/***
+ This file is part of systemd.
+
+ Copyright (C) 2013 Tom Gundersen <teg@jklm.no>
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include "nm-sd-adapt.h"
+
+#include <netinet/ether.h>
+#include <netinet/in.h>
+#include <stdbool.h>
+
+#if 0 /* NM_IGNORED */
+#include "udev.h"
+#include "condition.h"
+
+bool net_match_config(const struct ether_addr *match_mac,
+ const char *match_path,
+ const char *match_driver,
+ const char *match_type,
+ const char *match_name,
+ Condition *match_host,
+ Condition *match_virt,
+ Condition *match_kernel,
+ Condition *match_arch,
+ const struct ether_addr *dev_mac,
+ const char *dev_path,
+ const char *dev_parent_driver,
+ const char *dev_driver,
+ const char *dev_type,
+ const char *dev_name);
+
+int config_parse_net_condition(const char *unit, const char *filename, unsigned line,
+ const char *section, unsigned section_line, const char *lvalue,
+ int ltype, const char *rvalue, void *data, void *userdata);
+
+int config_parse_hwaddr(const char *unit, const char *filename, unsigned line,
+ const char *section, unsigned section_line, const char *lvalue,
+ int ltype, const char *rvalue, void *data, void *userdata);
+
+int config_parse_ifname(const char *unit, const char *filename, unsigned line,
+ const char *section, unsigned section_line, const char *lvalue,
+ int ltype, const char *rvalue, void *data, void *userdata);
+
+int config_parse_ifalias(const char *unit, const char *filename, unsigned line,
+ const char *section, unsigned section_line, const char *lvalue,
+ int ltype, const char *rvalue, void *data, void *userdata);
+
+int net_get_unique_predictable_data(struct udev_device *device, uint8_t result[8]);
+const char *net_get_name(struct udev_device *device);
+#endif
+
+void serialize_in_addrs(FILE *f, const struct in_addr *addresses, size_t size);
+int deserialize_in_addrs(struct in_addr **addresses, const char *string);
+int deserialize_in6_addrs(struct in6_addr **addresses, const char *string);
+
+/* don't include "dhcp-lease-internal.h" as it causes conflicts between netinet/ip.h and linux/ip.h */
+struct sd_dhcp_route;
+
+void serialize_dhcp_routes(FILE *f, const char *key, struct sd_dhcp_route *routes, size_t size);
+int deserialize_dhcp_routes(struct sd_dhcp_route **ret, size_t *ret_size, size_t *ret_allocated, const char *string);
diff --git a/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp-client.c b/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp-client.c
new file mode 100644
index 000000000..3e4cd8d9e
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp-client.c
@@ -0,0 +1,1726 @@
+/***
+ This file is part of systemd.
+
+ Copyright (C) 2013 Intel Corporation. All rights reserved.
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include "config.h"
+
+#include "nm-sd-adapt.h"
+
+#include <stdlib.h>
+#include <errno.h>
+#include <string.h>
+#include <stdio.h>
+#include <net/ethernet.h>
+#include <net/if_arp.h>
+#include <linux/if_infiniband.h>
+#include <netinet/ether.h>
+#include <sys/param.h>
+#include <sys/ioctl.h>
+
+#include "util.h"
+#include "list.h"
+#include "refcnt.h"
+#include "async.h"
+
+#include "dhcp-protocol.h"
+#include "dhcp-internal.h"
+#include "dhcp-lease-internal.h"
+#include "sd-dhcp-client.h"
+
+#define MAX_CLIENT_ID_LEN 64 /* Arbitrary limit */
+#define MAX_MAC_ADDR_LEN INFINIBAND_ALEN
+
+struct sd_dhcp_client {
+ RefCount n_ref;
+
+ DHCPState state;
+ sd_event *event;
+ int event_priority;
+ sd_event_source *timeout_resend;
+ int index;
+ int fd;
+ union sockaddr_union link;
+ sd_event_source *receive_message;
+ bool request_broadcast;
+ uint8_t *req_opts;
+ size_t req_opts_allocated;
+ size_t req_opts_size;
+ be32_t last_addr;
+ uint8_t mac_addr[MAX_MAC_ADDR_LEN];
+ size_t mac_addr_len;
+ uint16_t arp_type;
+ union {
+ struct {
+ uint8_t type; /* 0: Generic (non-LL) (RFC 2132) */
+ uint8_t data[MAX_CLIENT_ID_LEN];
+ } _packed_ gen;
+ struct {
+ uint8_t type; /* 1: Ethernet Link-Layer (RFC 2132) */
+ uint8_t haddr[ETH_ALEN];
+ } _packed_ eth;
+ struct {
+ uint8_t type; /* 2 - 254: ARP/Link-Layer (RFC 2132) */
+ uint8_t haddr[0];
+ } _packed_ ll;
+ struct {
+ uint8_t type; /* 255: Node-specific (RFC 4361) */
+ uint8_t iaid[4];
+ uint8_t duid[MAX_CLIENT_ID_LEN - 4];
+ } _packed_ ns;
+ struct {
+ uint8_t type;
+ uint8_t data[MAX_CLIENT_ID_LEN];
+ } _packed_ raw;
+ } client_id;
+ size_t client_id_len;
+ char *hostname;
+ char *vendor_class_identifier;
+ uint32_t mtu;
+ uint32_t xid;
+ usec_t start_time;
+ unsigned int attempt;
+ usec_t request_sent;
+ sd_event_source *timeout_t1;
+ sd_event_source *timeout_t2;
+ sd_event_source *timeout_expire;
+ sd_dhcp_client_cb_t cb;
+ void *userdata;
+ sd_dhcp_lease *lease;
+};
+
+static const uint8_t default_req_opts[] = {
+ DHCP_OPTION_SUBNET_MASK,
+ DHCP_OPTION_ROUTER,
+ DHCP_OPTION_HOST_NAME,
+ DHCP_OPTION_DOMAIN_NAME,
+ DHCP_OPTION_DOMAIN_NAME_SERVER,
+ DHCP_OPTION_NTP_SERVER,
+};
+
+static int client_receive_message_raw(sd_event_source *s, int fd,
+ uint32_t revents, void *userdata);
+static int client_receive_message_udp(sd_event_source *s, int fd,
+ uint32_t revents, void *userdata);
+static void client_stop(sd_dhcp_client *client, int error);
+
+int sd_dhcp_client_set_callback(sd_dhcp_client *client, sd_dhcp_client_cb_t cb,
+ void *userdata) {
+ assert_return(client, -EINVAL);
+
+ client->cb = cb;
+ client->userdata = userdata;
+
+ return 0;
+}
+
+int sd_dhcp_client_set_request_broadcast(sd_dhcp_client *client, int broadcast) {
+ assert_return(client, -EINVAL);
+
+ client->request_broadcast = !!broadcast;
+
+ return 0;
+}
+
+int sd_dhcp_client_set_request_option(sd_dhcp_client *client, uint8_t option) {
+ size_t i;
+
+ assert_return(client, -EINVAL);
+ assert_return (IN_SET(client->state, DHCP_STATE_INIT,
+ DHCP_STATE_STOPPED), -EBUSY);
+
+ switch(option) {
+ case DHCP_OPTION_PAD:
+ case DHCP_OPTION_OVERLOAD:
+ case DHCP_OPTION_MESSAGE_TYPE:
+ case DHCP_OPTION_PARAMETER_REQUEST_LIST:
+ case DHCP_OPTION_END:
+ return -EINVAL;
+
+ default:
+ break;
+ }
+
+ for (i = 0; i < client->req_opts_size; i++)
+ if (client->req_opts[i] == option)
+ return -EEXIST;
+
+ if (!GREEDY_REALLOC(client->req_opts, client->req_opts_allocated,
+ client->req_opts_size + 1))
+ return -ENOMEM;
+
+ client->req_opts[client->req_opts_size++] = option;
+
+ return 0;
+}
+
+int sd_dhcp_client_set_request_address(sd_dhcp_client *client,
+ const struct in_addr *last_addr) {
+ assert_return(client, -EINVAL);
+ assert_return (IN_SET(client->state, DHCP_STATE_INIT,
+ DHCP_STATE_STOPPED), -EBUSY);
+
+ if (last_addr)
+ client->last_addr = last_addr->s_addr;
+ else
+ client->last_addr = INADDR_ANY;
+
+ return 0;
+}
+
+int sd_dhcp_client_set_index(sd_dhcp_client *client, int interface_index) {
+ assert_return(client, -EINVAL);
+ assert_return (IN_SET(client->state, DHCP_STATE_INIT,
+ DHCP_STATE_STOPPED), -EBUSY);
+ assert_return(interface_index > 0, -EINVAL);
+
+ client->index = interface_index;
+
+ return 0;
+}
+
+int sd_dhcp_client_set_mac(sd_dhcp_client *client, const uint8_t *addr,
+ size_t addr_len, uint16_t arp_type) {
+ DHCP_CLIENT_DONT_DESTROY(client);
+ bool need_restart = false;
+
+ assert_return(client, -EINVAL);
+ assert_return(addr, -EINVAL);
+ assert_return(addr_len > 0 && addr_len <= MAX_MAC_ADDR_LEN, -EINVAL);
+ assert_return(arp_type > 0, -EINVAL);
+
+ if (arp_type == ARPHRD_ETHER)
+ assert_return(addr_len == ETH_ALEN, -EINVAL);
+ else if (arp_type == ARPHRD_INFINIBAND)
+ assert_return(addr_len == INFINIBAND_ALEN, -EINVAL);
+ else
+ return -EINVAL;
+
+ if (client->mac_addr_len == addr_len &&
+ memcmp(&client->mac_addr, addr, addr_len) == 0)
+ return 0;
+
+ if (!IN_SET(client->state, DHCP_STATE_INIT, DHCP_STATE_STOPPED)) {
+ log_dhcp_client(client, "Changing MAC address on running DHCP "
+ "client, restarting");
+ need_restart = true;
+ client_stop(client, DHCP_EVENT_STOP);
+ }
+
+ memcpy(&client->mac_addr, addr, addr_len);
+ client->mac_addr_len = addr_len;
+ client->arp_type = arp_type;
+
+ if (need_restart && client->state != DHCP_STATE_STOPPED)
+ sd_dhcp_client_start(client);
+
+ return 0;
+}
+
+int sd_dhcp_client_get_client_id(sd_dhcp_client *client, uint8_t *type,
+ const uint8_t **data, size_t *data_len) {
+
+ assert_return(client, -EINVAL);
+ assert_return(type, -EINVAL);
+ assert_return(data, -EINVAL);
+ assert_return(data_len, -EINVAL);
+
+ *type = 0;
+ *data = NULL;
+ *data_len = 0;
+ if (client->client_id_len) {
+ *type = client->client_id.raw.type;
+ *data = client->client_id.raw.data;
+ *data_len = client->client_id_len -
+ sizeof (client->client_id.raw.type);
+ }
+
+ return 0;
+}
+
+int sd_dhcp_client_set_client_id(sd_dhcp_client *client, uint8_t type,
+ const uint8_t *data, size_t data_len) {
+ DHCP_CLIENT_DONT_DESTROY(client);
+ bool need_restart = false;
+
+ assert_return(client, -EINVAL);
+ assert_return(data, -EINVAL);
+ assert_return(data_len > 0 && data_len <= MAX_CLIENT_ID_LEN, -EINVAL);
+
+ switch (type) {
+ case ARPHRD_ETHER:
+ if (data_len != ETH_ALEN)
+ return -EINVAL;
+ break;
+ case ARPHRD_INFINIBAND:
+ if (data_len != INFINIBAND_ALEN)
+ return -EINVAL;
+ break;
+ default:
+ break;
+ }
+
+ if (client->client_id_len == data_len + sizeof (client->client_id.raw.type) &&
+ client->client_id.raw.type == type &&
+ memcmp(&client->client_id.raw.data, data, data_len) == 0)
+ return 0;
+
+ if (!IN_SET(client->state, DHCP_STATE_INIT, DHCP_STATE_STOPPED)) {
+ log_dhcp_client(client, "Changing client ID on running DHCP "
+ "client, restarting");
+ need_restart = true;
+ client_stop(client, DHCP_EVENT_STOP);
+ }
+
+ client->client_id.raw.type = type;
+ memcpy(&client->client_id.raw.data, data, data_len);
+ client->client_id_len = data_len + sizeof (client->client_id.raw.type);
+
+ if (need_restart && client->state != DHCP_STATE_STOPPED)
+ sd_dhcp_client_start(client);
+
+ return 0;
+}
+
+int sd_dhcp_client_set_hostname(sd_dhcp_client *client,
+ const char *hostname) {
+ char *new_hostname = NULL;
+
+ assert_return(client, -EINVAL);
+
+ if (streq_ptr(client->hostname, hostname))
+ return 0;
+
+ if (hostname) {
+ new_hostname = strdup(hostname);
+ if (!new_hostname)
+ return -ENOMEM;
+ }
+
+ free(client->hostname);
+ client->hostname = new_hostname;
+
+ return 0;
+}
+
+int sd_dhcp_client_set_vendor_class_identifier(sd_dhcp_client *client,
+ const char *vci) {
+ char *new_vci = NULL;
+
+ assert_return(client, -EINVAL);
+
+ new_vci = strdup(vci);
+ if (!new_vci)
+ return -ENOMEM;
+
+ free(client->vendor_class_identifier);
+
+ client->vendor_class_identifier = new_vci;
+
+ return 0;
+}
+
+int sd_dhcp_client_set_mtu(sd_dhcp_client *client, uint32_t mtu) {
+ assert_return(client, -EINVAL);
+ assert_return(mtu >= DHCP_DEFAULT_MIN_SIZE, -ERANGE);
+
+ client->mtu = mtu;
+
+ return 0;
+}
+
+int sd_dhcp_client_get_lease(sd_dhcp_client *client, sd_dhcp_lease **ret) {
+ assert_return(client, -EINVAL);
+ assert_return(ret, -EINVAL);
+
+ if (client->state != DHCP_STATE_BOUND &&
+ client->state != DHCP_STATE_RENEWING &&
+ client->state != DHCP_STATE_REBINDING)
+ return -EADDRNOTAVAIL;
+
+ *ret = sd_dhcp_lease_ref(client->lease);
+
+ return 0;
+}
+
+static void client_notify(sd_dhcp_client *client, int event) {
+ if (client->cb)
+ client->cb(client, event, client->userdata);
+}
+
+static int client_initialize(sd_dhcp_client *client) {
+ assert_return(client, -EINVAL);
+
+ client->receive_message =
+ sd_event_source_unref(client->receive_message);
+
+ client->fd = asynchronous_close(client->fd);
+
+ client->timeout_resend = sd_event_source_unref(client->timeout_resend);
+
+ client->timeout_t1 = sd_event_source_unref(client->timeout_t1);
+ client->timeout_t2 = sd_event_source_unref(client->timeout_t2);
+ client->timeout_expire = sd_event_source_unref(client->timeout_expire);
+
+ client->attempt = 1;
+
+ client->state = DHCP_STATE_INIT;
+ client->xid = 0;
+
+ if (client->lease)
+ client->lease = sd_dhcp_lease_unref(client->lease);
+
+ return 0;
+}
+
+static void client_stop(sd_dhcp_client *client, int error) {
+ assert(client);
+
+ if (error < 0)
+ log_dhcp_client(client, "STOPPED: %s", strerror(-error));
+ else if (error == DHCP_EVENT_STOP)
+ log_dhcp_client(client, "STOPPED");
+ else
+ log_dhcp_client(client, "STOPPED: Unknown event");
+
+ client_notify(client, error);
+
+ client_initialize(client);
+}
+
+static int client_message_init(sd_dhcp_client *client, DHCPPacket **ret,
+ uint8_t type, size_t *_optlen, size_t *_optoffset) {
+ _cleanup_free_ DHCPPacket *packet = NULL;
+ size_t optlen, optoffset, size;
+ be16_t max_size;
+ usec_t time_now;
+ uint16_t secs;
+ int r;
+
+ assert(client);
+ assert(client->start_time);
+ assert(ret);
+ assert(_optlen);
+ assert(_optoffset);
+ assert(type == DHCP_DISCOVER || type == DHCP_REQUEST);
+
+ /* See RFC2131 section 4.4.1 */
+
+ optlen = DHCP_MIN_OPTIONS_SIZE;
+ size = sizeof(DHCPPacket) + optlen;
+
+ packet = malloc0(size);
+ if (!packet)
+ return -ENOMEM;
+
+ r = dhcp_message_init(&packet->dhcp, BOOTREQUEST, client->xid, type,
+ client->arp_type, optlen, &optoffset);
+ if (r < 0)
+ return r;
+
+ /* Although 'secs' field is a SHOULD in RFC 2131, certain DHCP servers
+ refuse to issue an DHCP lease if 'secs' is set to zero */
+ r = sd_event_now(client->event, clock_boottime_or_monotonic(), &time_now);
+ if (r < 0)
+ return r;
+ assert(time_now >= client->start_time);
+
+ /* seconds between sending first and last DISCOVER
+ * must always be strictly positive to deal with broken servers */
+ secs = ((time_now - client->start_time) / USEC_PER_SEC) ? : 1;
+ packet->dhcp.secs = htobe16(secs);
+
+ /* RFC2132 section 4.1
+ A client that cannot receive unicast IP datagrams until its protocol
+ software has been configured with an IP address SHOULD set the
+ BROADCAST bit in the 'flags' field to 1 in any DHCPDISCOVER or
+ DHCPREQUEST messages that client sends. The BROADCAST bit will
+ provide a hint to the DHCP server and BOOTP relay agent to broadcast
+ any messages to the client on the client's subnet.
+
+ Note: some interfaces needs this to be enabled, but some networks
+ needs this to be disabled as broadcasts are filteretd, so this
+ needs to be configurable */
+ if (client->request_broadcast || client->arp_type != ARPHRD_ETHER)
+ packet->dhcp.flags = htobe16(0x8000);
+
+ /* RFC2132 section 4.1.1:
+ The client MUST include its hardware address in the ’chaddr’ field, if
+ necessary for delivery of DHCP reply messages. Non-Ethernet
+ interfaces will leave 'chaddr' empty and use the client identifier
+ instead (eg, RFC 4390 section 2.1).
+ */
+ if (client->arp_type == ARPHRD_ETHER)
+ memcpy(&packet->dhcp.chaddr, &client->mac_addr, ETH_ALEN);
+
+ /* If no client identifier exists, construct one from an ethernet
+ address if present */
+ if (client->client_id_len == 0 && client->arp_type == ARPHRD_ETHER) {
+ client->client_id.eth.type = ARPHRD_ETHER;
+ memcpy(&client->client_id.eth.haddr, &client->mac_addr, ETH_ALEN);
+ client->client_id_len = sizeof (client->client_id.eth);
+ }
+
+ /* Some DHCP servers will refuse to issue an DHCP lease if the Client
+ Identifier option is not set */
+ if (client->client_id_len) {
+ r = dhcp_option_append(&packet->dhcp, optlen, &optoffset, 0,
+ DHCP_OPTION_CLIENT_IDENTIFIER,
+ client->client_id_len,
+ &client->client_id.raw);
+ if (r < 0)
+ return r;
+ }
+
+ /* RFC2131 section 3.5:
+ in its initial DHCPDISCOVER or DHCPREQUEST message, a
+ client may provide the server with a list of specific
+ parameters the client is interested in. If the client
+ includes a list of parameters in a DHCPDISCOVER message,
+ it MUST include that list in any subsequent DHCPREQUEST
+ messages.
+ */
+ r = dhcp_option_append(&packet->dhcp, optlen, &optoffset, 0,
+ DHCP_OPTION_PARAMETER_REQUEST_LIST,
+ client->req_opts_size, client->req_opts);
+ if (r < 0)
+ return r;
+
+ /* RFC2131 section 3.5:
+ The client SHOULD include the ’maximum DHCP message size’ option to
+ let the server know how large the server may make its DHCP messages.
+
+ Note (from ConnMan): Some DHCP servers will send bigger DHCP packets
+ than the defined default size unless the Maximum Messge Size option
+ is explicitely set
+
+ RFC3442 "Requirements to Avoid Sizing Constraints":
+ Because a full routing table can be quite large, the standard 576
+ octet maximum size for a DHCP message may be too short to contain
+ some legitimate Classless Static Route options. Because of this,
+ clients implementing the Classless Static Route option SHOULD send a
+ Maximum DHCP Message Size [4] option if the DHCP client's TCP/IP
+ stack is capable of receiving larger IP datagrams. In this case, the
+ client SHOULD set the value of this option to at least the MTU of the
+ interface that the client is configuring. The client MAY set the
+ value of this option higher, up to the size of the largest UDP packet
+ it is prepared to accept. (Note that the value specified in the
+ Maximum DHCP Message Size option is the total maximum packet size,
+ including IP and UDP headers.)
+ */
+ max_size = htobe16(size);
+ r = dhcp_option_append(&packet->dhcp, client->mtu, &optoffset, 0,
+ DHCP_OPTION_MAXIMUM_MESSAGE_SIZE,
+ 2, &max_size);
+ if (r < 0)
+ return r;
+
+ *_optlen = optlen;
+ *_optoffset = optoffset;
+ *ret = packet;
+ packet = NULL;
+
+ return 0;
+}
+
+static int dhcp_client_send_raw(sd_dhcp_client *client, DHCPPacket *packet,
+ size_t len) {
+ dhcp_packet_append_ip_headers(packet, INADDR_ANY, DHCP_PORT_CLIENT,
+ INADDR_BROADCAST, DHCP_PORT_SERVER, len);
+
+ return dhcp_network_send_raw_socket(client->fd, &client->link,
+ packet, len);
+}
+
+static int client_send_discover(sd_dhcp_client *client) {
+ _cleanup_free_ DHCPPacket *discover = NULL;
+ size_t optoffset, optlen;
+ int r;
+
+ assert(client);
+ assert(client->state == DHCP_STATE_INIT ||
+ client->state == DHCP_STATE_SELECTING);
+
+ r = client_message_init(client, &discover, DHCP_DISCOVER,
+ &optlen, &optoffset);
+ if (r < 0)
+ return r;
+
+ /* the client may suggest values for the network address
+ and lease time in the DHCPDISCOVER message. The client may include
+ the ’requested IP address’ option to suggest that a particular IP
+ address be assigned, and may include the ’IP address lease time’
+ option to suggest the lease time it would like.
+ */
+ if (client->last_addr != INADDR_ANY) {
+ r = dhcp_option_append(&discover->dhcp, optlen, &optoffset, 0,
+ DHCP_OPTION_REQUESTED_IP_ADDRESS,
+ 4, &client->last_addr);
+ if (r < 0)
+ return r;
+ }
+
+ /* it is unclear from RFC 2131 if client should send hostname in
+ DHCPDISCOVER but dhclient does and so we do as well
+ */
+ if (client->hostname) {
+ r = dhcp_option_append(&discover->dhcp, optlen, &optoffset, 0,
+ DHCP_OPTION_HOST_NAME,
+ strlen(client->hostname), client->hostname);
+ if (r < 0)
+ return r;
+ }
+
+ if (client->vendor_class_identifier) {
+ r = dhcp_option_append(&discover->dhcp, optlen, &optoffset, 0,
+ DHCP_OPTION_VENDOR_CLASS_IDENTIFIER,
+ strlen(client->vendor_class_identifier),
+ client->vendor_class_identifier);
+ if (r < 0)
+ return r;
+ }
+
+ r = dhcp_option_append(&discover->dhcp, optlen, &optoffset, 0,
+ DHCP_OPTION_END, 0, NULL);
+ if (r < 0)
+ return r;
+
+ /* We currently ignore:
+ The client SHOULD wait a random time between one and ten seconds to
+ desynchronize the use of DHCP at startup.
+ */
+ r = dhcp_client_send_raw(client, discover, sizeof(DHCPPacket) + optoffset);
+ if (r < 0)
+ return r;
+
+ log_dhcp_client(client, "DISCOVER");
+
+ return 0;
+}
+
+static int client_send_request(sd_dhcp_client *client) {
+ _cleanup_free_ DHCPPacket *request = NULL;
+ size_t optoffset, optlen;
+ int r;
+
+ r = client_message_init(client, &request, DHCP_REQUEST,
+ &optlen, &optoffset);
+ if (r < 0)
+ return r;
+
+ switch (client->state) {
+ /* See RFC2131 section 4.3.2 (note that there is a typo in the RFC,
+ SELECTING should be REQUESTING)
+ */
+
+ case DHCP_STATE_REQUESTING:
+ /* Client inserts the address of the selected server in ’server
+ identifier’, ’ciaddr’ MUST be zero, ’requested IP address’ MUST be
+ filled in with the yiaddr value from the chosen DHCPOFFER.
+ */
+
+ r = dhcp_option_append(&request->dhcp, optlen, &optoffset, 0,
+ DHCP_OPTION_SERVER_IDENTIFIER,
+ 4, &client->lease->server_address);
+ if (r < 0)
+ return r;
+
+ r = dhcp_option_append(&request->dhcp, optlen, &optoffset, 0,
+ DHCP_OPTION_REQUESTED_IP_ADDRESS,
+ 4, &client->lease->address);
+ if (r < 0)
+ return r;
+
+ break;
+
+ case DHCP_STATE_INIT_REBOOT:
+ /* ’server identifier’ MUST NOT be filled in, ’requested IP address’
+ option MUST be filled in with client’s notion of its previously
+ assigned address. ’ciaddr’ MUST be zero.
+ */
+ r = dhcp_option_append(&request->dhcp, optlen, &optoffset, 0,
+ DHCP_OPTION_REQUESTED_IP_ADDRESS,
+ 4, &client->last_addr);
+ if (r < 0)
+ return r;
+ break;
+
+ case DHCP_STATE_RENEWING:
+ /* ’server identifier’ MUST NOT be filled in, ’requested IP address’
+ option MUST NOT be filled in, ’ciaddr’ MUST be filled in with
+ client’s IP address.
+ */
+
+ /* fall through */
+ case DHCP_STATE_REBINDING:
+ /* ’server identifier’ MUST NOT be filled in, ’requested IP address’
+ option MUST NOT be filled in, ’ciaddr’ MUST be filled in with
+ client’s IP address.
+
+ This message MUST be broadcast to the 0xffffffff IP broadcast address.
+ */
+ request->dhcp.ciaddr = client->lease->address;
+
+ break;
+
+ case DHCP_STATE_INIT:
+ case DHCP_STATE_SELECTING:
+ case DHCP_STATE_REBOOTING:
+ case DHCP_STATE_BOUND:
+ case DHCP_STATE_STOPPED:
+ return -EINVAL;
+ }
+
+ if (client->hostname) {
+ r = dhcp_option_append(&request->dhcp, optlen, &optoffset, 0,
+ DHCP_OPTION_HOST_NAME,
+ strlen(client->hostname), client->hostname);
+ if (r < 0)
+ return r;
+ }
+
+ r = dhcp_option_append(&request->dhcp, optlen, &optoffset, 0,
+ DHCP_OPTION_END, 0, NULL);
+ if (r < 0)
+ return r;
+
+ if (client->state == DHCP_STATE_RENEWING) {
+ r = dhcp_network_send_udp_socket(client->fd,
+ client->lease->server_address,
+ DHCP_PORT_SERVER,
+ &request->dhcp,
+ sizeof(DHCPMessage) + optoffset);
+ } else {
+ r = dhcp_client_send_raw(client, request, sizeof(DHCPPacket) + optoffset);
+ }
+ if (r < 0)
+ return r;
+
+ switch (client->state) {
+ case DHCP_STATE_REQUESTING:
+ log_dhcp_client(client, "REQUEST (requesting)");
+ break;
+ case DHCP_STATE_INIT_REBOOT:
+ log_dhcp_client(client, "REQUEST (init-reboot)");
+ break;
+ case DHCP_STATE_RENEWING:
+ log_dhcp_client(client, "REQUEST (renewing)");
+ break;
+ case DHCP_STATE_REBINDING:
+ log_dhcp_client(client, "REQUEST (rebinding)");
+ break;
+ default:
+ log_dhcp_client(client, "REQUEST (invalid)");
+ break;
+ }
+
+ return 0;
+}
+
+static int client_start(sd_dhcp_client *client);
+
+static int client_timeout_resend(sd_event_source *s, uint64_t usec,
+ void *userdata) {
+ sd_dhcp_client *client = userdata;
+ DHCP_CLIENT_DONT_DESTROY(client);
+ usec_t next_timeout = 0;
+ uint64_t time_now;
+ uint32_t time_left;
+ int r;
+
+ assert(s);
+ assert(client);
+ assert(client->event);
+
+ r = sd_event_now(client->event, clock_boottime_or_monotonic(), &time_now);
+ if (r < 0)
+ goto error;
+
+ switch (client->state) {
+ case DHCP_STATE_RENEWING:
+
+ time_left = (client->lease->t2 - client->lease->t1) / 2;
+ if (time_left < 60)
+ time_left = 60;
+
+ next_timeout = time_now + time_left * USEC_PER_SEC;
+
+ break;
+
+ case DHCP_STATE_REBINDING:
+
+ time_left = (client->lease->lifetime - client->lease->t2) / 2;
+ if (time_left < 60)
+ time_left = 60;
+
+ next_timeout = time_now + time_left * USEC_PER_SEC;
+ break;
+
+ case DHCP_STATE_REBOOTING:
+ /* start over as we did not receive a timely ack or nak */
+ r = client_initialize(client);
+ if (r < 0)
+ goto error;
+
+ r = client_start(client);
+ if (r < 0)
+ goto error;
+ else {
+ log_dhcp_client(client, "REBOOTED");
+ return 0;
+ }
+
+ case DHCP_STATE_INIT:
+ case DHCP_STATE_INIT_REBOOT:
+ case DHCP_STATE_SELECTING:
+ case DHCP_STATE_REQUESTING:
+ case DHCP_STATE_BOUND:
+
+ if (client->attempt < 64)
+ client->attempt *= 2;
+
+ next_timeout = time_now + (client->attempt - 1) * USEC_PER_SEC;
+
+ break;
+
+ case DHCP_STATE_STOPPED:
+ r = -EINVAL;
+ goto error;
+ }
+
+ next_timeout += (random_u32() & 0x1fffff);
+
+ client->timeout_resend = sd_event_source_unref(client->timeout_resend);
+
+ r = sd_event_add_time(client->event,
+ &client->timeout_resend,
+ clock_boottime_or_monotonic(),
+ next_timeout, 10 * USEC_PER_MSEC,
+ client_timeout_resend, client);
+ if (r < 0)
+ goto error;
+
+ r = sd_event_source_set_priority(client->timeout_resend,
+ client->event_priority);
+ if (r < 0)
+ goto error;
+
+ r = sd_event_source_set_description(client->timeout_resend, "dhcp4-resend-timer");
+ if (r < 0)
+ goto error;
+
+ switch (client->state) {
+ case DHCP_STATE_INIT:
+ r = client_send_discover(client);
+ if (r >= 0) {
+ client->state = DHCP_STATE_SELECTING;
+ client->attempt = 1;
+ } else {
+ if (client->attempt >= 64)
+ goto error;
+ }
+
+ break;
+
+ case DHCP_STATE_SELECTING:
+ r = client_send_discover(client);
+ if (r < 0 && client->attempt >= 64)
+ goto error;
+
+ break;
+
+ case DHCP_STATE_INIT_REBOOT:
+ case DHCP_STATE_REQUESTING:
+ case DHCP_STATE_RENEWING:
+ case DHCP_STATE_REBINDING:
+ r = client_send_request(client);
+ if (r < 0 && client->attempt >= 64)
+ goto error;
+
+ if (client->state == DHCP_STATE_INIT_REBOOT)
+ client->state = DHCP_STATE_REBOOTING;
+
+ client->request_sent = time_now;
+
+ break;
+
+ case DHCP_STATE_REBOOTING:
+ case DHCP_STATE_BOUND:
+
+ break;
+
+ case DHCP_STATE_STOPPED:
+ r = -EINVAL;
+ goto error;
+ }
+
+ return 0;
+
+error:
+ client_stop(client, r);
+
+ /* Errors were dealt with when stopping the client, don't spill
+ errors into the event loop handler */
+ return 0;
+}
+
+static int client_initialize_io_events(sd_dhcp_client *client,
+ sd_event_io_handler_t io_callback) {
+ int r;
+
+ assert(client);
+ assert(client->event);
+
+ r = sd_event_add_io(client->event, &client->receive_message,
+ client->fd, EPOLLIN, io_callback,
+ client);
+ if (r < 0)
+ goto error;
+
+ r = sd_event_source_set_priority(client->receive_message,
+ client->event_priority);
+ if (r < 0)
+ goto error;
+
+ r = sd_event_source_set_description(client->receive_message, "dhcp4-receive-message");
+ if (r < 0)
+ goto error;
+
+error:
+ if (r < 0)
+ client_stop(client, r);
+
+ return 0;
+}
+
+static int client_initialize_time_events(sd_dhcp_client *client) {
+ int r;
+
+ assert(client);
+ assert(client->event);
+
+ client->timeout_resend = sd_event_source_unref(client->timeout_resend);
+
+ r = sd_event_add_time(client->event,
+ &client->timeout_resend,
+ clock_boottime_or_monotonic(),
+ 0, 0,
+ client_timeout_resend, client);
+ if (r < 0)
+ goto error;
+
+ r = sd_event_source_set_priority(client->timeout_resend,
+ client->event_priority);
+
+ r = sd_event_source_set_description(client->timeout_resend, "dhcp4-resend-timer");
+ if (r < 0)
+ goto error;
+
+error:
+ if (r < 0)
+ client_stop(client, r);
+
+ return 0;
+
+}
+
+static int client_initialize_events(sd_dhcp_client *client,
+ sd_event_io_handler_t io_callback) {
+ client_initialize_io_events(client, io_callback);
+ client_initialize_time_events(client);
+
+ return 0;
+}
+
+static int client_start(sd_dhcp_client *client) {
+ int r;
+
+ assert_return(client, -EINVAL);
+ assert_return(client->event, -EINVAL);
+ assert_return(client->index > 0, -EINVAL);
+ assert_return(client->fd < 0, -EBUSY);
+ assert_return(client->xid == 0, -EINVAL);
+ assert_return(client->state == DHCP_STATE_INIT ||
+ client->state == DHCP_STATE_INIT_REBOOT, -EBUSY);
+
+ client->xid = random_u32();
+
+ r = dhcp_network_bind_raw_socket(client->index, &client->link,
+ client->xid, client->mac_addr,
+ client->mac_addr_len, client->arp_type);
+ if (r < 0) {
+ client_stop(client, r);
+ return r;
+ }
+ client->fd = r;
+
+ if (client->state == DHCP_STATE_INIT || client->state == DHCP_STATE_INIT_REBOOT)
+ client->start_time = now(clock_boottime_or_monotonic());
+
+ return client_initialize_events(client, client_receive_message_raw);
+}
+
+static int client_timeout_expire(sd_event_source *s, uint64_t usec,
+ void *userdata) {
+ sd_dhcp_client *client = userdata;
+ DHCP_CLIENT_DONT_DESTROY(client);
+
+ log_dhcp_client(client, "EXPIRED");
+
+ client_notify(client, DHCP_EVENT_EXPIRED);
+
+ /* lease was lost, start over if not freed or stopped in callback */
+ if (client->state != DHCP_STATE_STOPPED) {
+ client_initialize(client);
+ client_start(client);
+ }
+
+ return 0;
+}
+
+static int client_timeout_t2(sd_event_source *s, uint64_t usec, void *userdata) {
+ sd_dhcp_client *client = userdata;
+ DHCP_CLIENT_DONT_DESTROY(client);
+ int r;
+
+ client->receive_message = sd_event_source_unref(client->receive_message);
+ client->fd = asynchronous_close(client->fd);
+
+ client->state = DHCP_STATE_REBINDING;
+ client->attempt = 1;
+
+ r = dhcp_network_bind_raw_socket(client->index, &client->link,
+ client->xid, client->mac_addr,
+ client->mac_addr_len, client->arp_type);
+ if (r < 0) {
+ client_stop(client, r);
+ return 0;
+ }
+ client->fd = r;
+
+ return client_initialize_events(client, client_receive_message_raw);
+}
+
+static int client_timeout_t1(sd_event_source *s, uint64_t usec,
+ void *userdata) {
+ sd_dhcp_client *client = userdata;
+ DHCP_CLIENT_DONT_DESTROY(client);
+
+ client->state = DHCP_STATE_RENEWING;
+ client->attempt = 1;
+
+ return client_initialize_time_events(client);
+}
+
+static int client_handle_offer(sd_dhcp_client *client, DHCPMessage *offer,
+ size_t len) {
+ _cleanup_dhcp_lease_unref_ sd_dhcp_lease *lease = NULL;
+ int r;
+
+ r = dhcp_lease_new(&lease);
+ if (r < 0)
+ return r;
+
+ if (client->client_id_len) {
+ r = dhcp_lease_set_client_id(lease,
+ (uint8_t *) &client->client_id.raw,
+ client->client_id_len);
+ if (r < 0)
+ return r;
+ }
+
+ r = dhcp_option_parse(offer, len, dhcp_lease_parse_options, lease);
+ if (r != DHCP_OFFER) {
+ log_dhcp_client(client, "received message was not an OFFER, ignoring");
+ return -ENOMSG;
+ }
+
+ lease->next_server = offer->siaddr;
+
+ lease->address = offer->yiaddr;
+
+ if (lease->address == INADDR_ANY ||
+ lease->server_address == INADDR_ANY ||
+ lease->lifetime == 0) {
+ log_dhcp_client(client, "received lease lacks address, server "
+ "address or lease lifetime, ignoring");
+ return -ENOMSG;
+ }
+
+ if (lease->subnet_mask == INADDR_ANY) {
+ r = dhcp_lease_set_default_subnet_mask(lease);
+ if (r < 0) {
+ log_dhcp_client(client, "received lease lacks subnet "
+ "mask, and a fallback one can not be "
+ "generated, ignoring");
+ return -ENOMSG;
+ }
+ }
+
+ sd_dhcp_lease_unref(client->lease);
+ client->lease = lease;
+ lease = NULL;
+
+ log_dhcp_client(client, "OFFER");
+
+ return 0;
+}
+
+static int client_handle_forcerenew(sd_dhcp_client *client, DHCPMessage *force,
+ size_t len) {
+ int r;
+
+ r = dhcp_option_parse(force, len, NULL, NULL);
+ if (r != DHCP_FORCERENEW)
+ return -ENOMSG;
+
+ log_dhcp_client(client, "FORCERENEW");
+
+ return 0;
+}
+
+static int client_handle_ack(sd_dhcp_client *client, DHCPMessage *ack,
+ size_t len) {
+ _cleanup_dhcp_lease_unref_ sd_dhcp_lease *lease = NULL;
+ int r;
+
+ r = dhcp_lease_new(&lease);
+ if (r < 0)
+ return r;
+
+ if (client->client_id_len) {
+ r = dhcp_lease_set_client_id(lease,
+ (uint8_t *) &client->client_id.raw,
+ client->client_id_len);
+ if (r < 0)
+ return r;
+ }
+
+ r = dhcp_option_parse(ack, len, dhcp_lease_parse_options, lease);
+ if (r == DHCP_NAK) {
+ log_dhcp_client(client, "NAK");
+ return -EADDRNOTAVAIL;
+ }
+
+ if (r != DHCP_ACK) {
+ log_dhcp_client(client, "received message was not an ACK, ignoring");
+ return -ENOMSG;
+ }
+
+ lease->next_server = ack->siaddr;
+
+ lease->address = ack->yiaddr;
+
+ if (lease->address == INADDR_ANY ||
+ lease->server_address == INADDR_ANY ||
+ lease->lifetime == 0) {
+ log_dhcp_client(client, "received lease lacks address, server "
+ "address or lease lifetime, ignoring");
+ return -ENOMSG;
+ }
+
+ if (lease->subnet_mask == INADDR_ANY) {
+ r = dhcp_lease_set_default_subnet_mask(lease);
+ if (r < 0) {
+ log_dhcp_client(client, "received lease lacks subnet "
+ "mask, and a fallback one can not be "
+ "generated, ignoring");
+ return -ENOMSG;
+ }
+ }
+
+ r = DHCP_EVENT_IP_ACQUIRE;
+ if (client->lease) {
+ if (client->lease->address != lease->address ||
+ client->lease->subnet_mask != lease->subnet_mask ||
+ client->lease->router != lease->router) {
+ r = DHCP_EVENT_IP_CHANGE;
+ } else
+ r = DHCP_EVENT_RENEW;
+
+ client->lease = sd_dhcp_lease_unref(client->lease);
+ }
+
+ client->lease = lease;
+ lease = NULL;
+
+ log_dhcp_client(client, "ACK");
+
+ return r;
+}
+
+static uint64_t client_compute_timeout(sd_dhcp_client *client,
+ uint32_t lifetime, double factor) {
+ assert(client);
+ assert(client->request_sent);
+ assert(lifetime);
+
+ return client->request_sent + ((lifetime - 3) * USEC_PER_SEC * factor) +
+ + (random_u32() & 0x1fffff);
+}
+
+static int client_set_lease_timeouts(sd_dhcp_client *client) {
+ usec_t time_now;
+ uint64_t lifetime_timeout;
+ uint64_t t2_timeout;
+ uint64_t t1_timeout;
+ char time_string[FORMAT_TIMESPAN_MAX];
+ int r;
+
+ assert(client);
+ assert(client->event);
+ assert(client->lease);
+ assert(client->lease->lifetime);
+
+ client->timeout_t1 = sd_event_source_unref(client->timeout_t1);
+ client->timeout_t2 = sd_event_source_unref(client->timeout_t2);
+ client->timeout_expire = sd_event_source_unref(client->timeout_expire);
+
+ /* don't set timers for infinite leases */
+ if (client->lease->lifetime == 0xffffffff)
+ return 0;
+
+ r = sd_event_now(client->event, clock_boottime_or_monotonic(), &time_now);
+ if (r < 0)
+ return r;
+ assert(client->request_sent <= time_now);
+
+ /* convert the various timeouts from relative (secs) to absolute (usecs) */
+ lifetime_timeout = client_compute_timeout(client, client->lease->lifetime, 1);
+ if (client->lease->t1 && client->lease->t2) {
+ /* both T1 and T2 are given */
+ if (client->lease->t1 < client->lease->t2 &&
+ client->lease->t2 < client->lease->lifetime) {
+ /* they are both valid */
+ t2_timeout = client_compute_timeout(client, client->lease->t2, 1);
+ t1_timeout = client_compute_timeout(client, client->lease->t1, 1);
+ } else {
+ /* discard both */
+ t2_timeout = client_compute_timeout(client, client->lease->lifetime, 7.0 / 8.0);
+ client->lease->t2 = (client->lease->lifetime * 7) / 8;
+ t1_timeout = client_compute_timeout(client, client->lease->lifetime, 0.5);
+ client->lease->t1 = client->lease->lifetime / 2;
+ }
+ } else if (client->lease->t2 && client->lease->t2 < client->lease->lifetime) {
+ /* only T2 is given, and it is valid */
+ t2_timeout = client_compute_timeout(client, client->lease->t2, 1);
+ t1_timeout = client_compute_timeout(client, client->lease->lifetime, 0.5);
+ client->lease->t1 = client->lease->lifetime / 2;
+ if (t2_timeout <= t1_timeout) {
+ /* the computed T1 would be invalid, so discard T2 */
+ t2_timeout = client_compute_timeout(client, client->lease->lifetime, 7.0 / 8.0);
+ client->lease->t2 = (client->lease->lifetime * 7) / 8;
+ }
+ } else if (client->lease->t1 && client->lease->t1 < client->lease->lifetime) {
+ /* only T1 is given, and it is valid */
+ t1_timeout = client_compute_timeout(client, client->lease->t1, 1);
+ t2_timeout = client_compute_timeout(client, client->lease->lifetime, 7.0 / 8.0);
+ client->lease->t2 = (client->lease->lifetime * 7) / 8;
+ if (t2_timeout <= t1_timeout) {
+ /* the computed T2 would be invalid, so discard T1 */
+ t2_timeout = client_compute_timeout(client, client->lease->lifetime, 0.5);
+ client->lease->t2 = client->lease->lifetime / 2;
+ }
+ } else {
+ /* fall back to the default timeouts */
+ t1_timeout = client_compute_timeout(client, client->lease->lifetime, 0.5);
+ client->lease->t1 = client->lease->lifetime / 2;
+ t2_timeout = client_compute_timeout(client, client->lease->lifetime, 7.0 / 8.0);
+ client->lease->t2 = (client->lease->lifetime * 7) / 8;
+ }
+
+ /* arm lifetime timeout */
+ r = sd_event_add_time(client->event, &client->timeout_expire,
+ clock_boottime_or_monotonic(),
+ lifetime_timeout, 10 * USEC_PER_MSEC,
+ client_timeout_expire, client);
+ if (r < 0)
+ return r;
+
+ r = sd_event_source_set_priority(client->timeout_expire,
+ client->event_priority);
+ if (r < 0)
+ return r;
+
+ r = sd_event_source_set_description(client->timeout_expire, "dhcp4-lifetime");
+ if (r < 0)
+ return r;
+
+ log_dhcp_client(client, "lease expires in %s",
+ format_timespan(time_string, FORMAT_TIMESPAN_MAX,
+ lifetime_timeout - time_now, 0));
+
+ /* don't arm earlier timeouts if this has already expired */
+ if (lifetime_timeout <= time_now)
+ return 0;
+
+ /* arm T2 timeout */
+ r = sd_event_add_time(client->event,
+ &client->timeout_t2,
+ clock_boottime_or_monotonic(),
+ t2_timeout,
+ 10 * USEC_PER_MSEC,
+ client_timeout_t2, client);
+ if (r < 0)
+ return r;
+
+ r = sd_event_source_set_priority(client->timeout_t2,
+ client->event_priority);
+ if (r < 0)
+ return r;
+
+ r = sd_event_source_set_description(client->timeout_t2, "dhcp4-t2-timeout");
+ if (r < 0)
+ return r;
+
+ log_dhcp_client(client, "T2 expires in %s",
+ format_timespan(time_string, FORMAT_TIMESPAN_MAX,
+ t2_timeout - time_now, 0));
+
+ /* don't arm earlier timeout if this has already expired */
+ if (t2_timeout <= time_now)
+ return 0;
+
+ /* arm T1 timeout */
+ r = sd_event_add_time(client->event,
+ &client->timeout_t1,
+ clock_boottime_or_monotonic(),
+ t1_timeout, 10 * USEC_PER_MSEC,
+ client_timeout_t1, client);
+ if (r < 0)
+ return r;
+
+ r = sd_event_source_set_priority(client->timeout_t1,
+ client->event_priority);
+ if (r < 0)
+ return r;
+
+ r = sd_event_source_set_description(client->timeout_t1, "dhcp4-t1-timer");
+ if (r < 0)
+ return r;
+
+ log_dhcp_client(client, "T1 expires in %s",
+ format_timespan(time_string, FORMAT_TIMESPAN_MAX,
+ t1_timeout - time_now, 0));
+
+ return 0;
+}
+
+static int client_handle_message(sd_dhcp_client *client, DHCPMessage *message,
+ int len) {
+ DHCP_CLIENT_DONT_DESTROY(client);
+ int r = 0, notify_event = 0;
+
+ assert(client);
+ assert(client->event);
+ assert(message);
+
+ switch (client->state) {
+ case DHCP_STATE_SELECTING:
+
+ r = client_handle_offer(client, message, len);
+ if (r >= 0) {
+
+ client->timeout_resend =
+ sd_event_source_unref(client->timeout_resend);
+
+ client->state = DHCP_STATE_REQUESTING;
+ client->attempt = 1;
+
+ r = sd_event_add_time(client->event,
+ &client->timeout_resend,
+ clock_boottime_or_monotonic(),
+ 0, 0,
+ client_timeout_resend, client);
+ if (r < 0)
+ goto error;
+
+ r = sd_event_source_set_priority(client->timeout_resend,
+ client->event_priority);
+ if (r < 0)
+ goto error;
+
+ r = sd_event_source_set_description(client->timeout_resend, "dhcp4-resend-timer");
+ if (r < 0)
+ goto error;
+ } else if (r == -ENOMSG)
+ /* invalid message, let's ignore it */
+ return 0;
+
+ break;
+
+ case DHCP_STATE_REBOOTING:
+ case DHCP_STATE_REQUESTING:
+ case DHCP_STATE_RENEWING:
+ case DHCP_STATE_REBINDING:
+
+ r = client_handle_ack(client, message, len);
+ if (r >= 0) {
+ client->timeout_resend =
+ sd_event_source_unref(client->timeout_resend);
+ client->receive_message =
+ sd_event_source_unref(client->receive_message);
+ client->fd = asynchronous_close(client->fd);
+
+ if (IN_SET(client->state, DHCP_STATE_REQUESTING,
+ DHCP_STATE_REBOOTING))
+ notify_event = DHCP_EVENT_IP_ACQUIRE;
+ else if (r != DHCP_EVENT_IP_ACQUIRE)
+ notify_event = r;
+
+ client->state = DHCP_STATE_BOUND;
+ client->attempt = 1;
+
+ client->last_addr = client->lease->address;
+
+ r = client_set_lease_timeouts(client);
+ if (r < 0)
+ goto error;
+
+ r = dhcp_network_bind_udp_socket(client->lease->address,
+ DHCP_PORT_CLIENT);
+ if (r < 0) {
+ log_dhcp_client(client, "could not bind UDP socket");
+ goto error;
+ }
+
+ client->fd = r;
+
+ client_initialize_io_events(client, client_receive_message_udp);
+
+ if (notify_event) {
+ client_notify(client, notify_event);
+ if (client->state == DHCP_STATE_STOPPED)
+ return 0;
+ }
+
+ } else if (r == -EADDRNOTAVAIL) {
+ /* got a NAK, let's restart the client */
+ client->timeout_resend =
+ sd_event_source_unref(client->timeout_resend);
+
+ r = client_initialize(client);
+ if (r < 0)
+ goto error;
+
+ r = client_start(client);
+ if (r < 0)
+ goto error;
+
+ log_dhcp_client(client, "REBOOTED");
+
+ return 0;
+ } else if (r == -ENOMSG)
+ /* invalid message, let's ignore it */
+ return 0;
+
+ break;
+
+ case DHCP_STATE_BOUND:
+ r = client_handle_forcerenew(client, message, len);
+ if (r >= 0) {
+ r = client_timeout_t1(NULL, 0, client);
+ if (r < 0)
+ goto error;
+ } else if (r == -ENOMSG)
+ /* invalid message, let's ignore it */
+ return 0;
+
+ break;
+
+ case DHCP_STATE_INIT:
+ case DHCP_STATE_INIT_REBOOT:
+
+ break;
+
+ case DHCP_STATE_STOPPED:
+ r = -EINVAL;
+ goto error;
+ }
+
+error:
+ if (r < 0)
+ client_stop(client, r);
+
+ return r;
+}
+
+static int client_receive_message_udp(sd_event_source *s, int fd,
+ uint32_t revents, void *userdata) {
+ sd_dhcp_client *client = userdata;
+ _cleanup_free_ DHCPMessage *message = NULL;
+ int buflen = 0, len, r;
+ const struct ether_addr zero_mac = { { 0, 0, 0, 0, 0, 0 } };
+ const struct ether_addr *expected_chaddr = NULL;
+ uint8_t expected_hlen = 0;
+
+ assert(s);
+ assert(client);
+
+ r = ioctl(fd, FIONREAD, &buflen);
+ if (r < 0)
+ return r;
+
+ if (buflen < 0)
+ /* this can't be right */
+ return -EIO;
+
+ message = malloc0(buflen);
+ if (!message)
+ return -ENOMEM;
+
+ len = read(fd, message, buflen);
+ if (len < 0) {
+ log_dhcp_client(client, "could not receive message from UDP "
+ "socket: %m");
+ return 0;
+ } else if ((size_t)len < sizeof(DHCPMessage)) {
+ log_dhcp_client(client, "too small to be a DHCP message: ignoring");
+ return 0;
+ }
+
+ if (be32toh(message->magic) != DHCP_MAGIC_COOKIE) {
+ log_dhcp_client(client, "not a DHCP message: ignoring");
+ return 0;
+ }
+
+ if (message->op != BOOTREPLY) {
+ log_dhcp_client(client, "not a BOOTREPLY message: ignoring");
+ return 0;
+ }
+
+ if (message->htype != client->arp_type) {
+ log_dhcp_client(client, "packet type does not match client type");
+ return 0;
+ }
+
+ if (client->arp_type == ARPHRD_ETHER) {
+ expected_hlen = ETH_ALEN;
+ expected_chaddr = (const struct ether_addr *) &client->mac_addr;
+ } else {
+ /* Non-ethernet links expect zero chaddr */
+ expected_hlen = 0;
+ expected_chaddr = &zero_mac;
+ }
+
+ if (message->hlen != expected_hlen) {
+ log_dhcp_client(client, "unexpected packet hlen %d", message->hlen);
+ return 0;
+ }
+
+ if (memcmp(&message->chaddr[0], expected_chaddr, ETH_ALEN)) {
+ log_dhcp_client(client, "received chaddr does not match "
+ "expected: ignoring");
+ return 0;
+ }
+
+ if (client->state != DHCP_STATE_BOUND &&
+ be32toh(message->xid) != client->xid) {
+ /* in BOUND state, we may receive FORCERENEW with xid set by server,
+ so ignore the xid in this case */
+ log_dhcp_client(client, "received xid (%u) does not match "
+ "expected (%u): ignoring",
+ be32toh(message->xid), client->xid);
+ return 0;
+ }
+
+ return client_handle_message(client, message, len);
+}
+
+static int client_receive_message_raw(sd_event_source *s, int fd,
+ uint32_t revents, void *userdata) {
+ sd_dhcp_client *client = userdata;
+ _cleanup_free_ DHCPPacket *packet = NULL;
+ uint8_t cmsgbuf[CMSG_LEN(sizeof(struct tpacket_auxdata))];
+ struct iovec iov = {};
+ struct msghdr msg = {
+ .msg_iov = &iov,
+ .msg_iovlen = 1,
+ .msg_control = cmsgbuf,
+ .msg_controllen = sizeof(cmsgbuf),
+ };
+ struct cmsghdr *cmsg;
+ bool checksum = true;
+ int buflen = 0, len, r;
+
+ assert(s);
+ assert(client);
+
+ r = ioctl(fd, FIONREAD, &buflen);
+ if (r < 0)
+ return r;
+
+ if (buflen < 0)
+ /* this can't be right */
+ return -EIO;
+
+ packet = malloc0(buflen);
+ if (!packet)
+ return -ENOMEM;
+
+ iov.iov_base = packet;
+ iov.iov_len = buflen;
+
+ len = recvmsg(fd, &msg, 0);
+ if (len < 0) {
+ log_dhcp_client(client, "could not receive message from raw "
+ "socket: %m");
+ return 0;
+ } else if ((size_t)len < sizeof(DHCPPacket))
+ return 0;
+
+ for (cmsg = CMSG_FIRSTHDR(&msg); cmsg; cmsg = CMSG_NXTHDR(&msg, cmsg)) {
+ if (cmsg->cmsg_level == SOL_PACKET &&
+ cmsg->cmsg_type == PACKET_AUXDATA &&
+ cmsg->cmsg_len == CMSG_LEN(sizeof(struct tpacket_auxdata))) {
+ struct tpacket_auxdata *aux = (struct tpacket_auxdata*)CMSG_DATA(cmsg);
+
+ checksum = !(aux->tp_status & TP_STATUS_CSUMNOTREADY);
+ break;
+ }
+ }
+
+ r = dhcp_packet_verify_headers(packet, len, checksum);
+ if (r < 0)
+ return 0;
+
+ len -= DHCP_IP_UDP_SIZE;
+
+ return client_handle_message(client, &packet->dhcp, len);
+}
+
+int sd_dhcp_client_start(sd_dhcp_client *client) {
+ int r;
+
+ assert_return(client, -EINVAL);
+
+ r = client_initialize(client);
+ if (r < 0)
+ return r;
+
+ if (client->last_addr)
+ client->state = DHCP_STATE_INIT_REBOOT;
+
+ r = client_start(client);
+ if (r >= 0)
+ log_dhcp_client(client, "STARTED on ifindex %u", client->index);
+
+ return r;
+}
+
+int sd_dhcp_client_stop(sd_dhcp_client *client) {
+ DHCP_CLIENT_DONT_DESTROY(client);
+
+ assert_return(client, -EINVAL);
+
+ client_stop(client, DHCP_EVENT_STOP);
+ client->state = DHCP_STATE_STOPPED;
+
+ return 0;
+}
+
+int sd_dhcp_client_attach_event(sd_dhcp_client *client, sd_event *event,
+ int priority) {
+ int r;
+
+ assert_return(client, -EINVAL);
+ assert_return(!client->event, -EBUSY);
+
+ if (event)
+ client->event = sd_event_ref(event);
+ else {
+ r = sd_event_default(&client->event);
+ if (r < 0)
+ return 0;
+ }
+
+ client->event_priority = priority;
+
+ return 0;
+}
+
+int sd_dhcp_client_detach_event(sd_dhcp_client *client) {
+ assert_return(client, -EINVAL);
+
+ client->event = sd_event_unref(client->event);
+
+ return 0;
+}
+
+sd_event *sd_dhcp_client_get_event(sd_dhcp_client *client) {
+ if (!client)
+ return NULL;
+
+ return client->event;
+}
+
+sd_dhcp_client *sd_dhcp_client_ref(sd_dhcp_client *client) {
+ if (client)
+ assert_se(REFCNT_INC(client->n_ref) >= 2);
+
+ return client;
+}
+
+sd_dhcp_client *sd_dhcp_client_unref(sd_dhcp_client *client) {
+ if (client && REFCNT_DEC(client->n_ref) <= 0) {
+ log_dhcp_client(client, "FREE");
+
+ client_initialize(client);
+
+ client->receive_message =
+ sd_event_source_unref(client->receive_message);
+
+ sd_dhcp_client_detach_event(client);
+
+ sd_dhcp_lease_unref(client->lease);
+
+ free(client->req_opts);
+ free(client->hostname);
+ free(client->vendor_class_identifier);
+ free(client);
+ }
+
+ return NULL;
+}
+
+int sd_dhcp_client_new(sd_dhcp_client **ret) {
+ _cleanup_dhcp_client_unref_ sd_dhcp_client *client = NULL;
+
+ assert_return(ret, -EINVAL);
+
+ client = new0(sd_dhcp_client, 1);
+ if (!client)
+ return -ENOMEM;
+
+ client->n_ref = REFCNT_INIT;
+ client->state = DHCP_STATE_INIT;
+ client->index = -1;
+ client->fd = -1;
+ client->attempt = 1;
+ client->mtu = DHCP_DEFAULT_MIN_SIZE;
+
+ client->req_opts_size = ELEMENTSOF(default_req_opts);
+
+ client->req_opts = memdup(default_req_opts, client->req_opts_size);
+ if (!client->req_opts)
+ return -ENOMEM;
+
+ *ret = client;
+ client = NULL;
+
+ return 0;
+}
diff --git a/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp-lease.c b/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp-lease.c
new file mode 100644
index 000000000..2d13d503e
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp-lease.c
@@ -0,0 +1,865 @@
+/***
+ This file is part of systemd.
+
+ Copyright (C) 2013 Intel Corporation. All rights reserved.
+ Copyright (C) 2014 Tom Gundersen
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include "config.h"
+
+#include "nm-sd-adapt.h"
+
+#include <stdlib.h>
+#include <errno.h>
+#include <string.h>
+#include <stdio.h>
+#include <net/ethernet.h>
+#include <arpa/inet.h>
+#include <sys/param.h>
+
+#include "util.h"
+#include "list.h"
+#if 0 /* NM_IGNORED */
+#include "mkdir.h"
+#endif
+#include "fileio.h"
+#include "unaligned.h"
+#include "in-addr-util.h"
+
+#include "dhcp-protocol.h"
+#include "dhcp-internal.h"
+#include "dhcp-lease-internal.h"
+#include "sd-dhcp-lease.h"
+#include "sd-dhcp-client.h"
+#include "network-internal.h"
+
+int sd_dhcp_lease_get_address(sd_dhcp_lease *lease, struct in_addr *addr) {
+ assert_return(lease, -EINVAL);
+ assert_return(addr, -EINVAL);
+
+ addr->s_addr = lease->address;
+
+ return 0;
+}
+
+int sd_dhcp_lease_get_lifetime(sd_dhcp_lease *lease, uint32_t *lifetime) {
+ assert_return(lease, -EINVAL);
+ assert_return(lease, -EINVAL);
+
+ *lifetime = lease->lifetime;
+
+ return 0;
+}
+
+int sd_dhcp_lease_get_mtu(sd_dhcp_lease *lease, uint16_t *mtu) {
+ assert_return(lease, -EINVAL);
+ assert_return(mtu, -EINVAL);
+
+ if (lease->mtu)
+ *mtu = lease->mtu;
+ else
+ return -ENOENT;
+
+ return 0;
+}
+
+int sd_dhcp_lease_get_dns(sd_dhcp_lease *lease, const struct in_addr **addr) {
+ assert_return(lease, -EINVAL);
+ assert_return(addr, -EINVAL);
+
+ if (lease->dns_size) {
+ *addr = lease->dns;
+ return lease->dns_size;
+ } else
+ return -ENOENT;
+
+ return 0;
+}
+
+int sd_dhcp_lease_get_ntp(sd_dhcp_lease *lease, const struct in_addr **addr) {
+ assert_return(lease, -EINVAL);
+ assert_return(addr, -EINVAL);
+
+ if (lease->ntp_size) {
+ *addr = lease->ntp;
+ return lease->ntp_size;
+ } else
+ return -ENOENT;
+
+ return 0;
+}
+
+int sd_dhcp_lease_get_domainname(sd_dhcp_lease *lease, const char **domainname) {
+ assert_return(lease, -EINVAL);
+ assert_return(domainname, -EINVAL);
+
+ if (lease->domainname)
+ *domainname = lease->domainname;
+ else
+ return -ENOENT;
+
+ return 0;
+}
+
+int sd_dhcp_lease_get_hostname(sd_dhcp_lease *lease, const char **hostname) {
+ assert_return(lease, -EINVAL);
+ assert_return(hostname, -EINVAL);
+
+ if (lease->hostname)
+ *hostname = lease->hostname;
+ else
+ return -ENOENT;
+
+ return 0;
+}
+
+int sd_dhcp_lease_get_root_path(sd_dhcp_lease *lease, const char **root_path) {
+ assert_return(lease, -EINVAL);
+ assert_return(root_path, -EINVAL);
+
+ if (lease->root_path)
+ *root_path = lease->root_path;
+ else
+ return -ENOENT;
+
+ return 0;
+}
+
+int sd_dhcp_lease_get_router(sd_dhcp_lease *lease, struct in_addr *addr) {
+ assert_return(lease, -EINVAL);
+ assert_return(addr, -EINVAL);
+
+ if (lease->router != INADDR_ANY)
+ addr->s_addr = lease->router;
+ else
+ return -ENOENT;
+
+ return 0;
+}
+
+int sd_dhcp_lease_get_netmask(sd_dhcp_lease *lease, struct in_addr *addr) {
+ assert_return(lease, -EINVAL);
+ assert_return(addr, -EINVAL);
+
+ addr->s_addr = lease->subnet_mask;
+
+ return 0;
+}
+
+int sd_dhcp_lease_get_server_identifier(sd_dhcp_lease *lease, struct in_addr *addr) {
+ assert_return(lease, -EINVAL);
+ assert_return(addr, -EINVAL);
+
+ addr->s_addr = lease->server_address;
+
+ return 0;
+}
+
+int sd_dhcp_lease_get_next_server(sd_dhcp_lease *lease, struct in_addr *addr) {
+ assert_return(lease, -EINVAL);
+ assert_return(addr, -EINVAL);
+
+ addr->s_addr = lease->next_server;
+
+ return 0;
+}
+
+int sd_dhcp_lease_get_routes(sd_dhcp_lease *lease, struct sd_dhcp_route **routes) {
+
+ assert_return(lease, -EINVAL);
+ assert_return(routes, -EINVAL);
+
+ if (lease->static_route_size) {
+ *routes = lease->static_route;
+ return lease->static_route_size;
+ } else
+ return -ENOENT;
+
+ return 0;
+}
+
+sd_dhcp_lease *sd_dhcp_lease_ref(sd_dhcp_lease *lease) {
+ if (lease)
+ assert_se(REFCNT_INC(lease->n_ref) >= 2);
+
+ return lease;
+}
+
+sd_dhcp_lease *sd_dhcp_lease_unref(sd_dhcp_lease *lease) {
+ if (lease && REFCNT_DEC(lease->n_ref) <= 0) {
+ free(lease->hostname);
+ free(lease->domainname);
+ free(lease->dns);
+ free(lease->ntp);
+ free(lease->static_route);
+ free(lease->client_id);
+ free(lease);
+ }
+
+ return NULL;
+}
+
+static void lease_parse_u32(const uint8_t *option, size_t len, uint32_t *ret, uint32_t min) {
+ assert(option);
+ assert(ret);
+
+ if (len == 4) {
+ *ret = unaligned_read_be32((be32_t*) option);
+
+ if (*ret < min)
+ *ret = min;
+ }
+}
+
+static void lease_parse_s32(const uint8_t *option, size_t len, int32_t *ret) {
+ lease_parse_u32(option, len, (uint32_t *)ret, 0);
+}
+
+static void lease_parse_u16(const uint8_t *option, size_t len, uint16_t *ret, uint16_t min) {
+ assert(option);
+ assert(ret);
+
+ if (len == 2) {
+ *ret = unaligned_read_be16((be16_t*) option);
+
+ if (*ret < min)
+ *ret = min;
+ }
+}
+
+static void lease_parse_be32(const uint8_t *option, size_t len, be32_t *ret) {
+ assert(option);
+ assert(ret);
+
+ if (len == 4)
+ memcpy(ret, option, 4);
+}
+
+static void lease_parse_bool(const uint8_t *option, size_t len, bool *ret) {
+ assert(option);
+ assert(ret);
+
+ if (len == 1)
+ *ret = !!(*option);
+}
+
+static void lease_parse_u8(const uint8_t *option, size_t len, uint8_t *ret, uint8_t min) {
+ assert(option);
+ assert(ret);
+
+ if (len == 1) {
+ *ret = *option;
+
+ if (*ret < min)
+ *ret = min;
+ }
+}
+
+static int lease_parse_string(const uint8_t *option, size_t len, char **ret) {
+ assert(option);
+ assert(ret);
+
+ if (len >= 1) {
+ char *string;
+
+ string = strndup((const char *)option, len);
+ if (!string)
+ return -errno;
+
+ free(*ret);
+ *ret = string;
+ }
+
+ return 0;
+}
+
+static int lease_parse_in_addrs_aux(const uint8_t *option, size_t len, struct in_addr **ret, size_t *ret_size, size_t mult) {
+ assert(option);
+ assert(ret);
+ assert(ret_size);
+
+ if (len && !(len % (4 * mult))) {
+ size_t size;
+ struct in_addr *addresses;
+
+ size = len / 4;
+
+ addresses = newdup(struct in_addr, option, size);
+ if (!addresses)
+ return -ENOMEM;
+
+ free(*ret);
+ *ret = addresses;
+ *ret_size = size;
+ }
+
+ return 0;
+}
+
+static int lease_parse_in_addrs(const uint8_t *option, size_t len, struct in_addr **ret, size_t *ret_size) {
+ return lease_parse_in_addrs_aux(option, len, ret, ret_size, 1);
+}
+
+static int lease_parse_in_addrs_pairs(const uint8_t *option, size_t len, struct in_addr **ret, size_t *ret_size) {
+ return lease_parse_in_addrs_aux(option, len, ret, ret_size, 2);
+}
+
+static int lease_parse_routes(const uint8_t *option, size_t len, struct sd_dhcp_route **routes,
+ size_t *routes_size, size_t *routes_allocated) {
+
+ struct in_addr addr;
+
+ assert(option);
+ assert(routes);
+ assert(routes_size);
+ assert(routes_allocated);
+
+ if (!len)
+ return 0;
+
+ if (len % 8 != 0)
+ return -EINVAL;
+
+ if (!GREEDY_REALLOC(*routes, *routes_allocated, *routes_size + (len / 8)))
+ return -ENOMEM;
+
+ while (len >= 8) {
+ struct sd_dhcp_route *route = *routes + *routes_size;
+ int r;
+
+ r = in_addr_default_prefixlen((struct in_addr*) option, &route->dst_prefixlen);
+ if (r < 0) {
+ log_error("Failed to determine destination prefix length from class based IP, ignoring");
+ continue;
+ }
+
+ lease_parse_be32(option, 4, &addr.s_addr);
+ route->dst_addr = inet_makeaddr(inet_netof(addr), 0);
+ option += 4;
+
+ lease_parse_be32(option, 4, &route->gw_addr.s_addr);
+ option += 4;
+
+ len -= 8;
+ (*routes_size)++;
+ }
+
+ return 0;
+}
+
+/* parses RFC3442 Classless Static Route Option */
+static int lease_parse_classless_routes(const uint8_t *option, size_t len, struct sd_dhcp_route **routes,
+ size_t *routes_size, size_t *routes_allocated) {
+
+ assert(option);
+ assert(routes);
+ assert(routes_size);
+ assert(routes_allocated);
+
+ /* option format: (subnet-mask-width significant-subnet-octets gateway-ip)* */
+
+ while (len > 0) {
+ uint8_t dst_octets;
+ struct sd_dhcp_route *route;
+
+ if (!GREEDY_REALLOC(*routes, *routes_allocated, *routes_size + 1))
+ return -ENOMEM;
+
+ route = *routes + *routes_size;
+
+ dst_octets = (*option == 0 ? 0 : ((*option - 1) / 8) + 1);
+ route->dst_prefixlen = *option;
+ option++;
+ len--;
+
+ /* can't have more than 4 octets in IPv4 */
+ if (dst_octets > 4 || len < dst_octets)
+ return -EINVAL;
+
+ route->dst_addr.s_addr = 0;
+ memcpy(&route->dst_addr.s_addr, option, dst_octets);
+ option += dst_octets;
+ len -= dst_octets;
+
+ if (len < 4)
+ return -EINVAL;
+
+ lease_parse_be32(option, 4, &route->gw_addr.s_addr);
+ option += 4;
+ len -= 4;
+
+ (*routes_size)++;
+ }
+
+ return 0;
+}
+
+int dhcp_lease_parse_options(uint8_t code, uint8_t len, const uint8_t *option,
+ void *user_data) {
+ sd_dhcp_lease *lease = user_data;
+ int r;
+
+ assert(lease);
+
+ switch(code) {
+
+ case DHCP_OPTION_TIME_OFFSET:
+ lease_parse_s32(option, len, &lease->time_offset);
+
+ break;
+
+ case DHCP_OPTION_INTERFACE_MTU_AGING_TIMEOUT:
+ lease_parse_u32(option, len, &lease->mtu_aging_timeout, 0);
+
+ break;
+
+ case DHCP_OPTION_IP_ADDRESS_LEASE_TIME:
+ lease_parse_u32(option, len, &lease->lifetime, 1);
+
+ break;
+
+ case DHCP_OPTION_SERVER_IDENTIFIER:
+ lease_parse_be32(option, len, &lease->server_address);
+
+ break;
+
+ case DHCP_OPTION_SUBNET_MASK:
+ lease_parse_be32(option, len, &lease->subnet_mask);
+
+ break;
+
+ case DHCP_OPTION_BROADCAST:
+ lease_parse_be32(option, len, &lease->broadcast);
+
+ break;
+
+ case DHCP_OPTION_ROUTER:
+ lease_parse_be32(option, len, &lease->router);
+
+ break;
+
+ case DHCP_OPTION_DOMAIN_NAME_SERVER:
+ r = lease_parse_in_addrs(option, len, &lease->dns, &lease->dns_size);
+ if (r < 0)
+ return r;
+
+ break;
+
+ case DHCP_OPTION_NTP_SERVER:
+ r = lease_parse_in_addrs(option, len, &lease->ntp, &lease->ntp_size);
+ if (r < 0)
+ return r;
+
+ break;
+
+ case DHCP_OPTION_POLICY_FILTER:
+ r = lease_parse_in_addrs_pairs(option, len, &lease->policy_filter, &lease->policy_filter_size);
+ if (r < 0)
+ return r;
+
+ break;
+
+ case DHCP_OPTION_STATIC_ROUTE:
+ r = lease_parse_routes(option, len, &lease->static_route, &lease->static_route_size,
+ &lease->static_route_allocated);
+ if (r < 0)
+ return r;
+
+ break;
+
+ case DHCP_OPTION_INTERFACE_MTU:
+ lease_parse_u16(option, len, &lease->mtu, 68);
+
+ break;
+
+ case DHCP_OPTION_INTERFACE_MDR:
+ lease_parse_u16(option, len, &lease->mdr, 576);
+
+ break;
+
+ case DHCP_OPTION_INTERFACE_TTL:
+ lease_parse_u8(option, len, &lease->ttl, 1);
+
+ break;
+
+ case DHCP_OPTION_BOOT_FILE_SIZE:
+ lease_parse_u16(option, len, &lease->boot_file_size, 0);
+
+ break;
+
+ case DHCP_OPTION_DOMAIN_NAME:
+ {
+ _cleanup_free_ char *domainname = NULL;
+
+ r = lease_parse_string(option, len, &domainname);
+ if (r < 0)
+ return r;
+
+ if (!hostname_is_valid(domainname) || is_localhost(domainname))
+ break;
+
+ free(lease->domainname);
+ lease->domainname = domainname;
+ domainname = NULL;
+
+ break;
+ }
+ case DHCP_OPTION_HOST_NAME:
+ {
+ _cleanup_free_ char *hostname = NULL;
+
+ r = lease_parse_string(option, len, &hostname);
+ if (r < 0)
+ return r;
+
+ if (!hostname_is_valid(hostname) || is_localhost(hostname))
+ break;
+
+ free(lease->hostname);
+ lease->hostname = hostname;
+ hostname = NULL;
+
+ break;
+ }
+ case DHCP_OPTION_ROOT_PATH:
+ r = lease_parse_string(option, len, &lease->root_path);
+ if (r < 0)
+ return r;
+
+ break;
+
+ case DHCP_OPTION_RENEWAL_T1_TIME:
+ lease_parse_u32(option, len, &lease->t1, 1);
+
+ break;
+
+ case DHCP_OPTION_REBINDING_T2_TIME:
+ lease_parse_u32(option, len, &lease->t2, 1);
+
+ break;
+
+ case DHCP_OPTION_ENABLE_IP_FORWARDING:
+ lease_parse_bool(option, len, &lease->ip_forward);
+
+ break;
+
+ case DHCP_OPTION_ENABLE_IP_FORWARDING_NL:
+ lease_parse_bool(option, len, &lease->ip_forward_non_local);
+
+ break;
+
+ case DHCP_OPTION_CLASSLESS_STATIC_ROUTE:
+ r = lease_parse_classless_routes(option, len, &lease->static_route, &lease->static_route_size,
+ &lease->static_route_allocated);
+ if (r < 0)
+ return r;
+
+ break;
+ }
+
+ return 0;
+}
+
+int dhcp_lease_new(sd_dhcp_lease **ret) {
+ sd_dhcp_lease *lease;
+
+ lease = new0(sd_dhcp_lease, 1);
+ if (!lease)
+ return -ENOMEM;
+
+ lease->router = INADDR_ANY;
+ lease->n_ref = REFCNT_INIT;
+
+ *ret = lease;
+ return 0;
+}
+
+int sd_dhcp_lease_save(sd_dhcp_lease *lease, const char *lease_file) {
+ _cleanup_free_ char *temp_path = NULL;
+ _cleanup_fclose_ FILE *f = NULL;
+ struct in_addr address;
+ const struct in_addr *addresses;
+ const uint8_t *client_id;
+ size_t client_id_len;
+ const char *string;
+ uint16_t mtu;
+ struct sd_dhcp_route *routes;
+ int r;
+
+ assert(lease);
+ assert(lease_file);
+
+ r = fopen_temporary(lease_file, &f, &temp_path);
+ if (r < 0)
+ goto finish;
+
+ fchmod(fileno(f), 0644);
+
+ r = sd_dhcp_lease_get_address(lease, &address);
+ if (r < 0)
+ goto finish;
+
+ fprintf(f,
+ "# This is private data. Do not parse.\n"
+ "ADDRESS=%s\n", inet_ntoa(address));
+
+ r = sd_dhcp_lease_get_netmask(lease, &address);
+ if (r < 0)
+ goto finish;
+
+ fprintf(f, "NETMASK=%s\n", inet_ntoa(address));
+
+ r = sd_dhcp_lease_get_router(lease, &address);
+ if (r >= 0)
+ fprintf(f, "ROUTER=%s\n", inet_ntoa(address));
+
+ r = sd_dhcp_lease_get_server_identifier(lease, &address);
+ if (r >= 0)
+ fprintf(f, "SERVER_ADDRESS=%s\n",
+ inet_ntoa(address));
+
+ r = sd_dhcp_lease_get_next_server(lease, &address);
+ if (r >= 0)
+ fprintf(f, "NEXT_SERVER=%s\n", inet_ntoa(address));
+
+ r = sd_dhcp_lease_get_mtu(lease, &mtu);
+ if (r >= 0)
+ fprintf(f, "MTU=%" PRIu16 "\n", mtu);
+
+ fputs("DNS=", f);
+ r = sd_dhcp_lease_get_dns(lease, &addresses);
+ if (r >= 0)
+ serialize_in_addrs(f, addresses, r);
+ fputs("\n", f);
+
+ fputs("NTP=", f);
+ r = sd_dhcp_lease_get_ntp(lease, &addresses);
+ if (r >= 0)
+ serialize_in_addrs(f, addresses, r);
+ fputs("\n", f);
+
+ r = sd_dhcp_lease_get_domainname(lease, &string);
+ if (r >= 0)
+ fprintf(f, "DOMAINNAME=%s\n", string);
+
+ r = sd_dhcp_lease_get_hostname(lease, &string);
+ if (r >= 0)
+ fprintf(f, "HOSTNAME=%s\n", string);
+
+ r = sd_dhcp_lease_get_root_path(lease, &string);
+ if (r >= 0)
+ fprintf(f, "ROOT_PATH=%s\n", string);
+
+ r = sd_dhcp_lease_get_routes(lease, &routes);
+ if (r >= 0)
+ serialize_dhcp_routes(f, "ROUTES", routes, r);
+
+ r = sd_dhcp_lease_get_client_id(lease, &client_id, &client_id_len);
+ if (r >= 0) {
+ _cleanup_free_ char *client_id_hex = NULL;
+
+ client_id_hex = hexmem (client_id, client_id_len);
+ if (!client_id_hex) {
+ r = -ENOMEM;
+ goto finish;
+ }
+ fprintf(f, "CLIENTID=%s\n", client_id_hex);
+ }
+
+ r = 0;
+
+ fflush(f);
+
+ if (ferror(f) || rename(temp_path, lease_file) < 0) {
+ r = -errno;
+ unlink(lease_file);
+ unlink(temp_path);
+ }
+
+finish:
+ if (r < 0)
+ log_error("Failed to save lease data %s: %s", lease_file, strerror(-r));
+
+ return r;
+}
+
+int sd_dhcp_lease_load(sd_dhcp_lease **ret, const char *lease_file) {
+ _cleanup_dhcp_lease_unref_ sd_dhcp_lease *lease = NULL;
+ _cleanup_free_ char *address = NULL, *router = NULL, *netmask = NULL,
+ *server_address = NULL, *next_server = NULL,
+ *dns = NULL, *ntp = NULL, *mtu = NULL,
+ *routes = NULL, *client_id_hex = NULL;
+ struct in_addr addr;
+ int r;
+
+ assert(lease_file);
+ assert(ret);
+
+ r = dhcp_lease_new(&lease);
+ if (r < 0)
+ return r;
+
+ r = parse_env_file(lease_file, NEWLINE,
+ "ADDRESS", &address,
+ "ROUTER", &router,
+ "NETMASK", &netmask,
+ "SERVER_IDENTIFIER", &server_address,
+ "NEXT_SERVER", &next_server,
+ "DNS", &dns,
+ "NTP", &ntp,
+ "MTU", &mtu,
+ "DOMAINNAME", &lease->domainname,
+ "HOSTNAME", &lease->hostname,
+ "ROOT_PATH", &lease->root_path,
+ "ROUTES", &routes,
+ "CLIENTID", &client_id_hex,
+ NULL);
+ if (r < 0) {
+ if (r == -ENOENT)
+ return 0;
+
+ log_error("Failed to read %s: %s", lease_file, strerror(-r));
+ return r;
+ }
+
+ r = inet_pton(AF_INET, address, &addr);
+ if (r < 0)
+ return r;
+
+ lease->address = addr.s_addr;
+
+ if (router) {
+ r = inet_pton(AF_INET, router, &addr);
+ if (r < 0)
+ return r;
+
+ lease->router = addr.s_addr;
+ }
+
+ r = inet_pton(AF_INET, netmask, &addr);
+ if (r < 0)
+ return r;
+
+ lease->subnet_mask = addr.s_addr;
+
+ if (server_address) {
+ r = inet_pton(AF_INET, server_address, &addr);
+ if (r < 0)
+ return r;
+
+ lease->server_address = addr.s_addr;
+ }
+
+ if (next_server) {
+ r = inet_pton(AF_INET, next_server, &addr);
+ if (r < 0)
+ return r;
+
+ lease->next_server = addr.s_addr;
+ }
+
+ if (dns) {
+ r = deserialize_in_addrs(&lease->dns, dns);
+ if (r < 0)
+ return r;
+
+ lease->dns_size = r;
+ }
+
+ if (ntp) {
+ r = deserialize_in_addrs(&lease->ntp, ntp);
+ if (r < 0)
+ return r;
+
+ lease->ntp_size = r;
+ }
+
+ if (mtu) {
+ uint16_t u;
+ if (sscanf(mtu, "%" SCNu16, &u) > 0)
+ lease->mtu = u;
+ }
+
+ if (routes) {
+ r = deserialize_dhcp_routes(&lease->static_route, &lease->static_route_size,
+ &lease->static_route_allocated, routes);
+ if (r < 0)
+ return r;
+ }
+
+ if (client_id_hex) {
+ if (strlen (client_id_hex) % 2)
+ return -EINVAL;
+
+ lease->client_id = unhexmem (client_id_hex, strlen (client_id_hex));
+ if (!lease->client_id)
+ return -ENOMEM;
+ lease->client_id_len = strlen (client_id_hex) / 2;
+ }
+
+ *ret = lease;
+ lease = NULL;
+
+ return 0;
+}
+
+int dhcp_lease_set_default_subnet_mask(sd_dhcp_lease *lease) {
+ struct in_addr address;
+ struct in_addr mask;
+ int r;
+
+ assert(lease);
+
+ address.s_addr = lease->address;
+
+ /* fall back to the default subnet masks based on address class */
+ r = in_addr_default_subnet_mask(&address, &mask);
+ if (r < 0)
+ return r;
+
+ lease->subnet_mask = mask.s_addr;
+
+ return 0;
+}
+
+int sd_dhcp_lease_get_client_id(sd_dhcp_lease *lease, const uint8_t **client_id,
+ size_t *client_id_len) {
+ assert_return(lease, -EINVAL);
+ assert_return(client_id, -EINVAL);
+ assert_return(client_id_len, -EINVAL);
+
+ *client_id = lease->client_id;
+ *client_id_len = lease->client_id_len;
+ return 0;
+}
+
+int dhcp_lease_set_client_id(sd_dhcp_lease *lease, const uint8_t *client_id,
+ size_t client_id_len) {
+ assert_return(lease, -EINVAL);
+ assert_return((!client_id && !client_id_len) ||
+ (client_id && client_id_len), -EINVAL);
+
+ free (lease->client_id);
+ lease->client_id = NULL;
+ lease->client_id_len = 0;
+
+ if (client_id) {
+ lease->client_id = memdup (client_id, client_id_len);
+ lease->client_id_len = client_id_len;
+ }
+
+ return 0;
+}
diff --git a/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp6-client.c b/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp6-client.c
new file mode 100644
index 000000000..6c5a6ab53
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp6-client.c
@@ -0,0 +1,1242 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright (C) 2014 Intel Corporation. All rights reserved.
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include "config.h"
+
+#include "nm-sd-adapt.h"
+
+#include <errno.h>
+#include <string.h>
+#include <sys/ioctl.h>
+#include <linux/if_infiniband.h>
+
+#if 0 /* NM_IGNORED */
+#include "udev.h"
+#include "udev-util.h"
+#include "virt.h"
+#endif
+#include "siphash24.h"
+#include "util.h"
+#include "refcnt.h"
+
+#include "network-internal.h"
+#include "sd-dhcp6-client.h"
+#include "dhcp6-protocol.h"
+#include "dhcp6-internal.h"
+#include "dhcp6-lease-internal.h"
+
+#define SYSTEMD_PEN 43793
+#define HASH_KEY SD_ID128_MAKE(80,11,8c,c2,fe,4a,03,ee,3e,d6,0c,6f,36,39,14,09)
+
+/* RFC 3315 section 9.1:
+ * A DUID can be no more than 128 octets long (not including the type code).
+ */
+#define MAX_DUID_LEN 128
+
+#define MAX_MAC_ADDR_LEN INFINIBAND_ALEN
+
+struct sd_dhcp6_client {
+ RefCount n_ref;
+
+ enum DHCP6State state;
+ sd_event *event;
+ int event_priority;
+ int index;
+ uint8_t mac_addr[MAX_MAC_ADDR_LEN];
+ size_t mac_addr_len;
+ uint16_t arp_type;
+ char ifname[IFNAMSIZ];
+ DHCP6IA ia_na;
+ be32_t transaction_id;
+ usec_t transaction_start;
+ struct sd_dhcp6_lease *lease;
+ int fd;
+ be16_t *req_opts;
+ size_t req_opts_allocated;
+ size_t req_opts_len;
+ sd_event_source *receive_message;
+ usec_t retransmit_time;
+ uint8_t retransmit_count;
+ sd_event_source *timeout_resend;
+ sd_event_source *timeout_resend_expire;
+ sd_dhcp6_client_cb_t cb;
+ void *userdata;
+ union {
+ struct {
+ uint16_t type; /* DHCP6_DUID_LLT */
+ uint16_t htype;
+ uint32_t time;
+ uint8_t haddr[0];
+ } _packed_ llt;
+ struct {
+ uint16_t type; /* DHCP6_DUID_EN */
+ uint32_t pen;
+ uint8_t id[8];
+ } _packed_ en;
+ struct {
+ uint16_t type; /* DHCP6_DUID_LL */
+ uint16_t htype;
+ uint8_t haddr[0];
+ } _packed_ ll;
+ struct {
+ uint16_t type; /* DHCP6_DUID_UUID */
+ sd_id128_t uuid;
+ } _packed_ uuid;
+ struct {
+ uint16_t type;
+ uint8_t data[MAX_DUID_LEN];
+ } _packed_ raw;
+ } duid;
+ size_t duid_len;
+};
+
+static const uint16_t default_req_opts[] = {
+ DHCP6_OPTION_DNS_SERVERS,
+ DHCP6_OPTION_DOMAIN_LIST,
+ DHCP6_OPTION_NTP_SERVER,
+};
+
+const char * dhcp6_message_type_table[_DHCP6_MESSAGE_MAX] = {
+ [DHCP6_SOLICIT] = "SOLICIT",
+ [DHCP6_ADVERTISE] = "ADVERTISE",
+ [DHCP6_REQUEST] = "REQUEST",
+ [DHCP6_CONFIRM] = "CONFIRM",
+ [DHCP6_RENEW] = "RENEW",
+ [DHCP6_REBIND] = "REBIND",
+ [DHCP6_REPLY] = "REPLY",
+ [DHCP6_RELEASE] = "RELEASE",
+ [DHCP6_DECLINE] = "DECLINE",
+ [DHCP6_RECONFIGURE] = "RECONFIGURE",
+ [DHCP6_INFORMATION_REQUEST] = "INFORMATION-REQUEST",
+ [DHCP6_RELAY_FORW] = "RELAY-FORW",
+ [DHCP6_RELAY_REPL] = "RELAY-REPL",
+};
+
+DEFINE_STRING_TABLE_LOOKUP(dhcp6_message_type, int);
+
+const char * dhcp6_message_status_table[_DHCP6_STATUS_MAX] = {
+ [DHCP6_STATUS_SUCCESS] = "Success",
+ [DHCP6_STATUS_UNSPEC_FAIL] = "Unspecified failure",
+ [DHCP6_STATUS_NO_ADDRS_AVAIL] = "No addresses available",
+ [DHCP6_STATUS_NO_BINDING] = "Binding unavailable",
+ [DHCP6_STATUS_NOT_ON_LINK] = "Not on link",
+ [DHCP6_STATUS_USE_MULTICAST] = "Use multicast",
+};
+
+DEFINE_STRING_TABLE_LOOKUP(dhcp6_message_status, int);
+
+DEFINE_TRIVIAL_CLEANUP_FUNC(sd_dhcp6_client*, sd_dhcp6_client_unref);
+#define _cleanup_dhcp6_client_unref_ _cleanup_(sd_dhcp6_client_unrefp)
+
+#define DHCP6_CLIENT_DONT_DESTROY(client) \
+ _cleanup_dhcp6_client_unref_ _unused_ sd_dhcp6_client *_dont_destroy_##client = sd_dhcp6_client_ref(client)
+
+static int client_start(sd_dhcp6_client *client, enum DHCP6State state);
+
+int sd_dhcp6_client_set_callback(sd_dhcp6_client *client,
+ sd_dhcp6_client_cb_t cb, void *userdata)
+{
+ assert_return(client, -EINVAL);
+
+ client->cb = cb;
+ client->userdata = userdata;
+
+ return 0;
+}
+
+int sd_dhcp6_client_set_index(sd_dhcp6_client *client, int interface_index)
+{
+ assert_return(client, -EINVAL);
+ assert_return(interface_index >= -1, -EINVAL);
+
+ client->index = interface_index;
+
+ return 0;
+}
+
+int sd_dhcp6_client_set_mac(sd_dhcp6_client *client, const uint8_t *addr,
+ size_t addr_len, uint16_t arp_type)
+{
+ assert_return(client, -EINVAL);
+ assert_return(addr, -EINVAL);
+ assert_return(addr_len > 0 && addr_len <= MAX_MAC_ADDR_LEN, -EINVAL);
+ assert_return(arp_type > 0, -EINVAL);
+
+ if (arp_type == ARPHRD_ETHER)
+ assert_return(addr_len == ETH_ALEN, -EINVAL);
+ else if (arp_type == ARPHRD_INFINIBAND)
+ assert_return(addr_len == INFINIBAND_ALEN, -EINVAL);
+ else
+ return -EINVAL;
+
+ if (client->mac_addr_len == addr_len &&
+ memcmp(&client->mac_addr, addr, addr_len) == 0)
+ return 0;
+
+ memcpy(&client->mac_addr, addr, addr_len);
+ client->mac_addr_len = addr_len;
+ client->arp_type = arp_type;
+
+ return 0;
+}
+
+int sd_dhcp6_client_set_duid(sd_dhcp6_client *client, uint16_t type, uint8_t *duid,
+ size_t duid_len)
+{
+ assert_return(client, -EINVAL);
+ assert_return(duid, -EINVAL);
+ assert_return(duid_len > 0 && duid_len <= MAX_DUID_LEN, -EINVAL);
+
+ switch (type) {
+ case DHCP6_DUID_LLT:
+ if (duid_len <= sizeof(client->duid.llt) - 2)
+ return -EINVAL;
+ break;
+ case DHCP6_DUID_EN:
+ if (duid_len != sizeof(client->duid.en) - 2)
+ return -EINVAL;
+ break;
+ case DHCP6_DUID_LL:
+ if (duid_len <= sizeof(client->duid.ll) - 2)
+ return -EINVAL;
+ break;
+ case DHCP6_DUID_UUID:
+ if (duid_len != sizeof(client->duid.uuid) - 2)
+ return -EINVAL;
+ break;
+ default:
+ /* accept unknown type in order to be forward compatible */
+ break;
+ }
+
+ client->duid.raw.type = htobe16(type);
+ memcpy(&client->duid.raw.data, duid, duid_len);
+ client->duid_len = duid_len + 2; /* +2 for sizeof(type) */
+
+ return 0;
+}
+
+int sd_dhcp6_client_set_request_option(sd_dhcp6_client *client,
+ uint16_t option) {
+ size_t t;
+
+ assert_return(client, -EINVAL);
+ assert_return(client->state == DHCP6_STATE_STOPPED, -EBUSY);
+
+ switch(option) {
+ case DHCP6_OPTION_DNS_SERVERS:
+ case DHCP6_OPTION_DOMAIN_LIST:
+ case DHCP6_OPTION_SNTP_SERVERS:
+ case DHCP6_OPTION_NTP_SERVER:
+ break;
+
+ default:
+ return -EINVAL;
+ }
+
+ for (t = 0; t < client->req_opts_len; t++)
+ if (client->req_opts[t] == htobe16(option))
+ return -EEXIST;
+
+ if (!GREEDY_REALLOC(client->req_opts, client->req_opts_allocated,
+ client->req_opts_len + 1))
+ return -ENOMEM;
+
+ client->req_opts[client->req_opts_len++] = htobe16(option);
+
+ return 0;
+}
+
+int sd_dhcp6_client_get_lease(sd_dhcp6_client *client, sd_dhcp6_lease **ret) {
+ assert_return(client, -EINVAL);
+ assert_return(ret, -EINVAL);
+
+ if (!client->lease)
+ return -ENOMSG;
+
+ *ret = sd_dhcp6_lease_ref(client->lease);
+
+ return 0;
+}
+
+static void client_notify(sd_dhcp6_client *client, int event) {
+ if (client->cb)
+ client->cb(client, event, client->userdata);
+}
+
+static int client_reset(sd_dhcp6_client *client) {
+ assert_return(client, -EINVAL);
+
+ client->receive_message =
+ sd_event_source_unref(client->receive_message);
+
+ client->fd = safe_close(client->fd);
+
+ client->transaction_id = 0;
+ client->transaction_start = 0;
+
+ client->ia_na.timeout_t1 =
+ sd_event_source_unref(client->ia_na.timeout_t1);
+ client->ia_na.timeout_t2 =
+ sd_event_source_unref(client->ia_na.timeout_t2);
+
+ client->retransmit_time = 0;
+ client->retransmit_count = 0;
+ client->timeout_resend = sd_event_source_unref(client->timeout_resend);
+ client->timeout_resend_expire =
+ sd_event_source_unref(client->timeout_resend_expire);
+
+ client->state = DHCP6_STATE_STOPPED;
+
+ return 0;
+}
+
+static void client_stop(sd_dhcp6_client *client, int error) {
+ DHCP6_CLIENT_DONT_DESTROY(client);
+
+ assert(client);
+
+ client_notify(client, error);
+
+ client_reset(client);
+}
+
+static int client_send_message(sd_dhcp6_client *client, usec_t time_now) {
+ _cleanup_free_ DHCP6Message *message = NULL;
+ struct in6_addr all_servers =
+ IN6ADDR_ALL_DHCP6_RELAY_AGENTS_AND_SERVERS_INIT;
+ size_t len, optlen = 512;
+ uint8_t *opt;
+ int r;
+ usec_t elapsed_usec;
+ be16_t elapsed_time;
+
+ len = sizeof(DHCP6Message) + optlen;
+
+ message = malloc0(len);
+ if (!message)
+ return -ENOMEM;
+
+ opt = (uint8_t *)(message + 1);
+
+ message->transaction_id = client->transaction_id;
+
+ switch(client->state) {
+ case DHCP6_STATE_SOLICITATION:
+ message->type = DHCP6_SOLICIT;
+
+ r = dhcp6_option_append(&opt, &optlen,
+ DHCP6_OPTION_RAPID_COMMIT, 0, NULL);
+ if (r < 0)
+ return r;
+
+ r = dhcp6_option_append_ia(&opt, &optlen, &client->ia_na);
+ if (r < 0)
+ return r;
+
+ break;
+
+ case DHCP6_STATE_REQUEST:
+ case DHCP6_STATE_RENEW:
+
+ if (client->state == DHCP6_STATE_REQUEST)
+ message->type = DHCP6_REQUEST;
+ else
+ message->type = DHCP6_RENEW;
+
+ r = dhcp6_option_append(&opt, &optlen, DHCP6_OPTION_SERVERID,
+ client->lease->serverid_len,
+ client->lease->serverid);
+ if (r < 0)
+ return r;
+
+ r = dhcp6_option_append_ia(&opt, &optlen, &client->lease->ia);
+ if (r < 0)
+ return r;
+
+ break;
+
+ case DHCP6_STATE_REBIND:
+ message->type = DHCP6_REBIND;
+
+ r = dhcp6_option_append_ia(&opt, &optlen, &client->lease->ia);
+ if (r < 0)
+ return r;
+
+ break;
+
+ case DHCP6_STATE_STOPPED:
+ case DHCP6_STATE_BOUND:
+ return -EINVAL;
+ }
+
+ r = dhcp6_option_append(&opt, &optlen, DHCP6_OPTION_ORO,
+ client->req_opts_len * sizeof(be16_t),
+ client->req_opts);
+ if (r < 0)
+ return r;
+
+ r = dhcp6_option_append(&opt, &optlen, DHCP6_OPTION_CLIENTID,
+ client->duid_len, &client->duid);
+ if (r < 0)
+ return r;
+
+ elapsed_usec = time_now - client->transaction_start;
+ if (elapsed_usec < 0xffff * USEC_PER_MSEC * 10)
+ elapsed_time = htobe16(elapsed_usec / USEC_PER_MSEC / 10);
+ else
+ elapsed_time = 0xffff;
+
+ r = dhcp6_option_append(&opt, &optlen, DHCP6_OPTION_ELAPSED_TIME,
+ sizeof(elapsed_time), &elapsed_time);
+ if (r < 0)
+ return r;
+
+ r = dhcp6_network_send_udp_socket(client->fd, &all_servers, message,
+ len - optlen);
+ if (r < 0)
+ return r;
+
+ log_dhcp6_client(client, "Sent %s",
+ dhcp6_message_type_to_string(message->type));
+
+ return 0;
+}
+
+static int client_timeout_t2(sd_event_source *s, uint64_t usec,
+ void *userdata) {
+ sd_dhcp6_client *client = userdata;
+
+ assert_return(s, -EINVAL);
+ assert_return(client, -EINVAL);
+ assert_return(client->lease, -EINVAL);
+
+ client->lease->ia.timeout_t2 =
+ sd_event_source_unref(client->lease->ia.timeout_t2);
+
+ log_dhcp6_client(client, "Timeout T2");
+
+ client_start(client, DHCP6_STATE_REBIND);
+
+ return 0;
+}
+
+static int client_timeout_t1(sd_event_source *s, uint64_t usec,
+ void *userdata) {
+ sd_dhcp6_client *client = userdata;
+
+ assert_return(s, -EINVAL);
+ assert_return(client, -EINVAL);
+ assert_return(client->lease, -EINVAL);
+
+ client->lease->ia.timeout_t1 =
+ sd_event_source_unref(client->lease->ia.timeout_t1);
+
+ log_dhcp6_client(client, "Timeout T1");
+
+ client_start(client, DHCP6_STATE_RENEW);
+
+ return 0;
+}
+
+static int client_timeout_resend_expire(sd_event_source *s, uint64_t usec,
+ void *userdata) {
+ sd_dhcp6_client *client = userdata;
+ DHCP6_CLIENT_DONT_DESTROY(client);
+ enum DHCP6State state;
+
+ assert(s);
+ assert(client);
+ assert(client->event);
+
+ state = client->state;
+
+ client_stop(client, DHCP6_EVENT_RESEND_EXPIRE);
+
+ /* RFC 3315, section 18.1.4., says that "...the client may choose to
+ use a Solicit message to locate a new DHCP server..." */
+ if (state == DHCP6_STATE_REBIND)
+ client_start(client, DHCP6_STATE_SOLICITATION);
+
+ return 0;
+}
+
+static usec_t client_timeout_compute_random(usec_t val) {
+ return val - val / 10 +
+ (random_u32() % (2 * USEC_PER_SEC)) * val / 10 / USEC_PER_SEC;
+}
+
+static int client_timeout_resend(sd_event_source *s, uint64_t usec,
+ void *userdata) {
+ int r = 0;
+ sd_dhcp6_client *client = userdata;
+ usec_t time_now, init_retransmit_time = 0, max_retransmit_time = 0;
+ usec_t max_retransmit_duration = 0;
+ uint8_t max_retransmit_count = 0;
+ char time_string[FORMAT_TIMESPAN_MAX];
+ uint32_t expire = 0;
+
+ assert(s);
+ assert(client);
+ assert(client->event);
+
+ client->timeout_resend = sd_event_source_unref(client->timeout_resend);
+
+ switch (client->state) {
+ case DHCP6_STATE_SOLICITATION:
+
+ if (client->retransmit_count && client->lease) {
+ client_start(client, DHCP6_STATE_REQUEST);
+ return 0;
+ }
+
+ init_retransmit_time = DHCP6_SOL_TIMEOUT;
+ max_retransmit_time = DHCP6_SOL_MAX_RT;
+
+ break;
+
+ case DHCP6_STATE_REQUEST:
+ init_retransmit_time = DHCP6_REQ_TIMEOUT;
+ max_retransmit_time = DHCP6_REQ_MAX_RT;
+ max_retransmit_count = DHCP6_REQ_MAX_RC;
+
+ break;
+
+ case DHCP6_STATE_RENEW:
+ init_retransmit_time = DHCP6_REN_TIMEOUT;
+ max_retransmit_time = DHCP6_REN_MAX_RT;
+
+ /* RFC 3315, section 18.1.3. says max retransmit duration will
+ be the remaining time until T2. Instead of setting MRD,
+ wait for T2 to trigger with the same end result */
+
+ break;
+
+ case DHCP6_STATE_REBIND:
+ init_retransmit_time = DHCP6_REB_TIMEOUT;
+ max_retransmit_time = DHCP6_REB_MAX_RT;
+
+ if (!client->timeout_resend_expire) {
+ r = dhcp6_lease_ia_rebind_expire(&client->lease->ia,
+ &expire);
+ if (r < 0) {
+ client_stop(client, r);
+ return 0;
+ }
+ max_retransmit_duration = expire * USEC_PER_SEC;
+ }
+
+ break;
+
+ case DHCP6_STATE_STOPPED:
+ case DHCP6_STATE_BOUND:
+ return 0;
+ }
+
+ if (max_retransmit_count &&
+ client->retransmit_count >= max_retransmit_count) {
+ client_stop(client, DHCP6_EVENT_RETRANS_MAX);
+ return 0;
+ }
+
+ r = sd_event_now(client->event, clock_boottime_or_monotonic(), &time_now);
+ if (r < 0)
+ goto error;
+
+ r = client_send_message(client, time_now);
+ if (r >= 0)
+ client->retransmit_count++;
+
+ if (!client->retransmit_time) {
+ client->retransmit_time =
+ client_timeout_compute_random(init_retransmit_time);
+
+ if (client->state == DHCP6_STATE_SOLICITATION)
+ client->retransmit_time += init_retransmit_time / 10;
+
+ } else {
+ if (max_retransmit_time &&
+ client->retransmit_time > max_retransmit_time / 2)
+ client->retransmit_time = client_timeout_compute_random(max_retransmit_time);
+ else
+ client->retransmit_time += client_timeout_compute_random(client->retransmit_time);
+ }
+
+ log_dhcp6_client(client, "Next retransmission in %s",
+ format_timespan(time_string, FORMAT_TIMESPAN_MAX,
+ client->retransmit_time, 0));
+
+ r = sd_event_add_time(client->event, &client->timeout_resend,
+ clock_boottime_or_monotonic(),
+ time_now + client->retransmit_time,
+ 10 * USEC_PER_MSEC, client_timeout_resend,
+ client);
+ if (r < 0)
+ goto error;
+
+ r = sd_event_source_set_priority(client->timeout_resend,
+ client->event_priority);
+ if (r < 0)
+ goto error;
+
+ r = sd_event_source_set_description(client->timeout_resend, "dhcp6-resend-timer");
+ if (r < 0)
+ goto error;
+
+ if (max_retransmit_duration && !client->timeout_resend_expire) {
+
+ log_dhcp6_client(client, "Max retransmission duration %"PRIu64" secs",
+ max_retransmit_duration / USEC_PER_SEC);
+
+ r = sd_event_add_time(client->event,
+ &client->timeout_resend_expire,
+ clock_boottime_or_monotonic(),
+ time_now + max_retransmit_duration,
+ USEC_PER_SEC,
+ client_timeout_resend_expire, client);
+ if (r < 0)
+ goto error;
+
+ r = sd_event_source_set_priority(client->timeout_resend_expire,
+ client->event_priority);
+ if (r < 0)
+ goto error;
+
+ r = sd_event_source_set_description(client->timeout_resend_expire, "dhcp6-resend-expire-timer");
+ if (r < 0)
+ goto error;
+ }
+
+error:
+ if (r < 0)
+ client_stop(client, r);
+
+ return 0;
+}
+
+static int client_ensure_iaid(sd_dhcp6_client *client) {
+ const char *name;
+ uint64_t id;
+
+ assert(client);
+
+ if (client->ia_na.id)
+ return 0;
+
+ name = client->ifname;
+ if (name)
+ siphash24((uint8_t*)&id, name, strlen(name), HASH_KEY.bytes);
+ else
+ /* fall back to mac address if no predictable name available */
+ siphash24((uint8_t*)&id, &client->mac_addr,
+ client->mac_addr_len, HASH_KEY.bytes);
+
+ /* fold into 32 bits */
+ client->ia_na.id = (id & 0xffffffff) ^ (id >> 32);
+
+ return 0;
+}
+
+static int client_parse_message(sd_dhcp6_client *client,
+ DHCP6Message *message, size_t len,
+ sd_dhcp6_lease *lease) {
+ int r;
+ uint8_t *optval, *option, *id = NULL;
+ uint16_t optcode, status;
+ size_t optlen, id_len;
+ bool clientid = false;
+ be32_t iaid_lease;
+
+ option = (uint8_t *)message + sizeof(DHCP6Message);
+ len -= sizeof(DHCP6Message);
+
+ while ((r = dhcp6_option_parse(&option, &len, &optcode, &optlen,
+ &optval)) >= 0) {
+ switch (optcode) {
+ case DHCP6_OPTION_CLIENTID:
+ if (clientid) {
+ log_dhcp6_client(client, "%s contains multiple clientids",
+ dhcp6_message_type_to_string(message->type));
+ return -EINVAL;
+ }
+
+ if (optlen != client->duid_len ||
+ memcmp(&client->duid, optval, optlen) != 0) {
+ log_dhcp6_client(client, "%s DUID does not match",
+ dhcp6_message_type_to_string(message->type));
+
+ return -EINVAL;
+ }
+ clientid = true;
+
+ break;
+
+ case DHCP6_OPTION_SERVERID:
+ r = dhcp6_lease_get_serverid(lease, &id, &id_len);
+ if (r >= 0 && id) {
+ log_dhcp6_client(client, "%s contains multiple serverids",
+ dhcp6_message_type_to_string(message->type));
+ return -EINVAL;
+ }
+
+ r = dhcp6_lease_set_serverid(lease, optval, optlen);
+ if (r < 0)
+ return r;
+
+ break;
+
+ case DHCP6_OPTION_PREFERENCE:
+ if (optlen != 1)
+ return -EINVAL;
+
+ r = dhcp6_lease_set_preference(lease, *optval);
+ if (r < 0)
+ return r;
+
+ break;
+
+ case DHCP6_OPTION_STATUS_CODE:
+ if (optlen < 2)
+ return -EINVAL;
+
+ status = optval[0] << 8 | optval[1];
+ if (status) {
+ log_dhcp6_client(client, "%s Status %s",
+ dhcp6_message_type_to_string(message->type),
+ dhcp6_message_status_to_string(status));
+ return -EINVAL;
+ }
+
+ break;
+
+ case DHCP6_OPTION_IA_NA:
+ r = dhcp6_option_parse_ia(&optval, &optlen, optcode,
+ &lease->ia);
+ if (r < 0 && r != -ENOMSG)
+ return r;
+
+ r = dhcp6_lease_get_iaid(lease, &iaid_lease);
+ if (r < 0)
+ return r;
+
+ if (client->ia_na.id != iaid_lease) {
+ log_dhcp6_client(client, "%s has wrong IAID",
+ dhcp6_message_type_to_string(message->type));
+ return -EINVAL;
+ }
+
+ break;
+
+ case DHCP6_OPTION_RAPID_COMMIT:
+ r = dhcp6_lease_set_rapid_commit(lease);
+ if (r < 0)
+ return r;
+
+ break;
+ }
+ }
+
+ if ((r < 0 && r != -ENOMSG) || !clientid) {
+ log_dhcp6_client(client, "%s has incomplete options",
+ dhcp6_message_type_to_string(message->type));
+ return -EINVAL;
+ }
+
+ r = dhcp6_lease_get_serverid(lease, &id, &id_len);
+ if (r < 0)
+ log_dhcp6_client(client, "%s has no server id",
+ dhcp6_message_type_to_string(message->type));
+
+ return r;
+}
+
+static int client_receive_reply(sd_dhcp6_client *client, DHCP6Message *reply,
+ size_t len)
+{
+ int r;
+ _cleanup_dhcp6_lease_free_ sd_dhcp6_lease *lease = NULL;
+ bool rapid_commit;
+
+ if (reply->type != DHCP6_REPLY)
+ return 0;
+
+ r = dhcp6_lease_new(&lease);
+ if (r < 0)
+ return -ENOMEM;
+
+ r = client_parse_message(client, reply, len, lease);
+ if (r < 0)
+ return r;
+
+ if (client->state == DHCP6_STATE_SOLICITATION) {
+ r = dhcp6_lease_get_rapid_commit(lease, &rapid_commit);
+ if (r < 0)
+ return r;
+
+ if (!rapid_commit)
+ return 0;
+ }
+
+ if (client->lease)
+ dhcp6_lease_clear_timers(&client->lease->ia);
+
+ client->lease = sd_dhcp6_lease_unref(client->lease);
+ client->lease = lease;
+ lease = NULL;
+
+ return DHCP6_STATE_BOUND;
+}
+
+static int client_receive_advertise(sd_dhcp6_client *client,
+ DHCP6Message *advertise, size_t len) {
+ int r;
+ _cleanup_dhcp6_lease_free_ sd_dhcp6_lease *lease = NULL;
+ uint8_t pref_advertise = 0, pref_lease = 0;
+
+ if (advertise->type != DHCP6_ADVERTISE)
+ return 0;
+
+ r = dhcp6_lease_new(&lease);
+ if (r < 0)
+ return r;
+
+ r = client_parse_message(client, advertise, len, lease);
+ if (r < 0)
+ return r;
+
+ r = dhcp6_lease_get_preference(lease, &pref_advertise);
+ if (r < 0)
+ return r;
+
+ r = dhcp6_lease_get_preference(client->lease, &pref_lease);
+ if (!client->lease || r < 0 || pref_advertise > pref_lease) {
+ sd_dhcp6_lease_unref(client->lease);
+ client->lease = lease;
+ lease = NULL;
+ r = 0;
+ }
+
+ if (pref_advertise == 255 || client->retransmit_count > 1)
+ r = DHCP6_STATE_REQUEST;
+
+ return r;
+}
+
+static int client_receive_message(sd_event_source *s, int fd, uint32_t revents,
+ void *userdata) {
+ sd_dhcp6_client *client = userdata;
+ DHCP6_CLIENT_DONT_DESTROY(client);
+ _cleanup_free_ DHCP6Message *message = NULL;
+ int r, buflen, len;
+
+ assert(s);
+ assert(client);
+ assert(client->event);
+
+ r = ioctl(fd, FIONREAD, &buflen);
+ if (r < 0 || buflen <= 0)
+ buflen = DHCP6_MIN_OPTIONS_SIZE;
+
+ message = malloc0(buflen);
+ if (!message)
+ return -ENOMEM;
+
+ len = read(fd, message, buflen);
+ if ((size_t)len < sizeof(DHCP6Message)) {
+ log_dhcp6_client(client, "could not receive message from UDP socket: %m");
+ return 0;
+ }
+
+ switch(message->type) {
+ case DHCP6_SOLICIT:
+ case DHCP6_REQUEST:
+ case DHCP6_CONFIRM:
+ case DHCP6_RENEW:
+ case DHCP6_REBIND:
+ case DHCP6_RELEASE:
+ case DHCP6_DECLINE:
+ case DHCP6_INFORMATION_REQUEST:
+ case DHCP6_RELAY_FORW:
+ case DHCP6_RELAY_REPL:
+ return 0;
+
+ case DHCP6_ADVERTISE:
+ case DHCP6_REPLY:
+ case DHCP6_RECONFIGURE:
+ break;
+
+ default:
+ log_dhcp6_client(client, "unknown message type %d",
+ message->type);
+ return 0;
+ }
+
+ if (client->transaction_id != (message->transaction_id &
+ htobe32(0x00ffffff)))
+ return 0;
+
+ switch (client->state) {
+ case DHCP6_STATE_SOLICITATION:
+ r = client_receive_advertise(client, message, len);
+
+ if (r == DHCP6_STATE_REQUEST) {
+ client_start(client, r);
+
+ break;
+ }
+
+ /* fall through for Soliciation Rapid Commit option check */
+ case DHCP6_STATE_REQUEST:
+ case DHCP6_STATE_RENEW:
+ case DHCP6_STATE_REBIND:
+
+ r = client_receive_reply(client, message, len);
+ if (r < 0)
+ return 0;
+
+ if (r == DHCP6_STATE_BOUND) {
+
+ r = client_start(client, DHCP6_STATE_BOUND);
+ if (r < 0) {
+ client_stop(client, r);
+ return 0;
+ }
+
+ client_notify(client, DHCP6_EVENT_IP_ACQUIRE);
+ }
+
+ break;
+
+ case DHCP6_STATE_BOUND:
+
+ break;
+
+ case DHCP6_STATE_STOPPED:
+ return 0;
+ }
+
+ if (r >= 0) {
+ log_dhcp6_client(client, "Recv %s",
+ dhcp6_message_type_to_string(message->type));
+ }
+
+ return 0;
+}
+
+static int client_start(sd_dhcp6_client *client, enum DHCP6State state)
+{
+ int r;
+ usec_t timeout, time_now;
+ char time_string[FORMAT_TIMESPAN_MAX];
+
+ assert_return(client, -EINVAL);
+ assert_return(client->event, -EINVAL);
+ assert_return(client->index > 0, -EINVAL);
+ assert_return(client->state != state, -EINVAL);
+
+ client->timeout_resend_expire =
+ sd_event_source_unref(client->timeout_resend_expire);
+ client->timeout_resend = sd_event_source_unref(client->timeout_resend);
+ client->retransmit_time = 0;
+ client->retransmit_count = 0;
+
+ if (client->state == DHCP6_STATE_STOPPED) {
+ time_now = now(clock_boottime_or_monotonic());
+ } else {
+ r = sd_event_now(client->event, clock_boottime_or_monotonic(),
+ &time_now);
+ if (r < 0)
+ return r;
+ }
+
+ switch (state) {
+ case DHCP6_STATE_STOPPED:
+ case DHCP6_STATE_SOLICITATION:
+
+ r = client_ensure_iaid(client);
+ if (r < 0)
+ return r;
+
+ r = dhcp6_network_bind_udp_socket(client->index, NULL);
+ if (r < 0)
+ return r;
+
+ client->fd = r;
+
+ r = sd_event_add_io(client->event, &client->receive_message,
+ client->fd, EPOLLIN, client_receive_message,
+ client);
+ if (r < 0)
+ return r;
+
+ r = sd_event_source_set_priority(client->receive_message,
+ client->event_priority);
+ if (r < 0)
+ return r;
+
+ r = sd_event_source_set_description(client->receive_message, "dhcp6-receive-message");
+ if (r < 0)
+ return r;
+
+ client->state = DHCP6_STATE_SOLICITATION;
+
+ break;
+
+ case DHCP6_STATE_REQUEST:
+ case DHCP6_STATE_RENEW:
+ case DHCP6_STATE_REBIND:
+
+ client->state = state;
+
+ break;
+
+ case DHCP6_STATE_BOUND:
+
+ if (client->lease->ia.lifetime_t1 == 0xffffffff ||
+ client->lease->ia.lifetime_t2 == 0xffffffff) {
+
+ log_dhcp6_client(client, "infinite T1 0x%08x or T2 0x%08x",
+ be32toh(client->lease->ia.lifetime_t1),
+ be32toh(client->lease->ia.lifetime_t2));
+
+ return 0;
+ }
+
+ timeout = client_timeout_compute_random(be32toh(client->lease->ia.lifetime_t1) * USEC_PER_SEC);
+
+ log_dhcp6_client(client, "T1 expires in %s",
+ format_timespan(time_string,
+ FORMAT_TIMESPAN_MAX,
+ timeout, 0));
+
+ r = sd_event_add_time(client->event,
+ &client->lease->ia.timeout_t1,
+ clock_boottime_or_monotonic(), time_now + timeout,
+ 10 * USEC_PER_SEC, client_timeout_t1,
+ client);
+ if (r < 0)
+ return r;
+
+ r = sd_event_source_set_priority(client->lease->ia.timeout_t1,
+ client->event_priority);
+ if (r < 0)
+ return r;
+
+ r = sd_event_source_set_description(client->lease->ia.timeout_t1, "dhcp6-t1-timeout");
+ if (r < 0)
+ return r;
+
+ timeout = client_timeout_compute_random(be32toh(client->lease->ia.lifetime_t2) * USEC_PER_SEC);
+
+ log_dhcp6_client(client, "T2 expires in %s",
+ format_timespan(time_string,
+ FORMAT_TIMESPAN_MAX,
+ timeout, 0));
+
+ r = sd_event_add_time(client->event,
+ &client->lease->ia.timeout_t2,
+ clock_boottime_or_monotonic(), time_now + timeout,
+ 10 * USEC_PER_SEC, client_timeout_t2,
+ client);
+ if (r < 0)
+ return r;
+
+ r = sd_event_source_set_priority(client->lease->ia.timeout_t2,
+ client->event_priority);
+ if (r < 0)
+ return r;
+
+ r = sd_event_source_set_description(client->lease->ia.timeout_t2, "dhcp6-t2-timeout");
+ if (r < 0)
+ return r;
+
+ client->state = state;
+
+ return 0;
+ }
+
+ client->transaction_id = random_u32() & htobe32(0x00ffffff);
+ client->transaction_start = time_now;
+
+ r = sd_event_add_time(client->event, &client->timeout_resend,
+ clock_boottime_or_monotonic(), 0, 0, client_timeout_resend,
+ client);
+ if (r < 0)
+ return r;
+
+ r = sd_event_source_set_priority(client->timeout_resend,
+ client->event_priority);
+ if (r < 0)
+ return r;
+
+ r = sd_event_source_set_description(client->timeout_resend, "dhcp6-resend-timeout");
+ if (r < 0)
+ return r;
+
+ return 0;
+}
+
+int sd_dhcp6_client_stop(sd_dhcp6_client *client)
+{
+ client_stop(client, DHCP6_EVENT_STOP);
+
+ return 0;
+}
+
+int sd_dhcp6_client_start(sd_dhcp6_client *client)
+{
+ int r = 0;
+
+ assert_return(client, -EINVAL);
+ assert_return(client->event, -EINVAL);
+ assert_return(client->index > 0, -EINVAL);
+
+ r = client_reset(client);
+ if (r < 0)
+ return r;
+
+ return client_start(client, DHCP6_STATE_SOLICITATION);
+}
+
+int sd_dhcp6_client_attach_event(sd_dhcp6_client *client, sd_event *event,
+ int priority)
+{
+ int r;
+
+ assert_return(client, -EINVAL);
+ assert_return(!client->event, -EBUSY);
+
+ if (event)
+ client->event = sd_event_ref(event);
+ else {
+ r = sd_event_default(&client->event);
+ if (r < 0)
+ return 0;
+ }
+
+ client->event_priority = priority;
+
+ return 0;
+}
+
+int sd_dhcp6_client_detach_event(sd_dhcp6_client *client) {
+ assert_return(client, -EINVAL);
+
+ client->event = sd_event_unref(client->event);
+
+ return 0;
+}
+
+sd_event *sd_dhcp6_client_get_event(sd_dhcp6_client *client) {
+ if (!client)
+ return NULL;
+
+ return client->event;
+}
+
+sd_dhcp6_client *sd_dhcp6_client_ref(sd_dhcp6_client *client) {
+ if (client)
+ assert_se(REFCNT_INC(client->n_ref) >= 2);
+
+ return client;
+}
+
+sd_dhcp6_client *sd_dhcp6_client_unref(sd_dhcp6_client *client) {
+ if (client && REFCNT_DEC(client->n_ref) <= 0) {
+ client_reset(client);
+
+ sd_dhcp6_client_detach_event(client);
+
+ free(client->req_opts);
+ free(client);
+
+ return NULL;
+ }
+
+ return client;
+}
+
+int sd_dhcp6_client_new(sd_dhcp6_client **ret)
+{
+ _cleanup_dhcp6_client_unref_ sd_dhcp6_client *client = NULL;
+#if 0 /* NM_IGNORED */
+ sd_id128_t machine_id;
+ int r;
+#endif
+ size_t t;
+
+ assert_return(ret, -EINVAL);
+
+ client = new0(sd_dhcp6_client, 1);
+ if (!client)
+ return -ENOMEM;
+
+ client->n_ref = REFCNT_INIT;
+
+ client->ia_na.type = DHCP6_OPTION_IA_NA;
+
+ client->index = -1;
+
+ client->fd = -1;
+
+#if 0 /* NM_IGNORED */
+ /* initialize DUID */
+ client->duid.en.type = htobe16(DHCP6_DUID_EN);
+ client->duid.en.pen = htobe32(SYSTEMD_PEN);
+ client->duid_len = sizeof(client->duid.en);
+
+ r = sd_id128_get_machine(&machine_id);
+ if (r < 0)
+ return r;
+
+ /* a bit of snake-oil perhaps, but no need to expose the machine-id
+ directly */
+ siphash24(client->duid.en.id, &machine_id, sizeof(machine_id), HASH_KEY.bytes);
+#endif
+
+ client->req_opts_len = ELEMENTSOF(default_req_opts);
+
+ client->req_opts = new0(be16_t, client->req_opts_len);
+ if (!client->req_opts)
+ return -ENOMEM;
+
+ for (t = 0; t < client->req_opts_len; t++)
+ client->req_opts[t] = htobe16(default_req_opts[t]);
+
+ *ret = client;
+ client = NULL;
+
+ return 0;
+}
+
+/*******************************************/
+/* NetworkManager additions */
+
+int sd_dhcp6_client_set_ifname(sd_dhcp6_client *client, const char *ifname)
+{
+ assert_return(client, -EINVAL);
+ assert_return(ifname, -EINVAL);
+ assert_return(strlen (ifname) < sizeof (client->ifname), -EINVAL);
+
+ strcpy(client->ifname, ifname);
+ return 0;
+}
+
diff --git a/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp6-lease.c b/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp6-lease.c
new file mode 100644
index 000000000..0df6984d6
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp6-lease.c
@@ -0,0 +1,223 @@
+/***
+ This file is part of systemd.
+
+ Copyright (C) 2014 Tom Gundersen
+ Copyright (C) 2014 Intel Corporation. All rights reserved.
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include "config.h"
+
+#include "nm-sd-adapt.h"
+
+#include <errno.h>
+
+#include "util.h"
+
+#include "dhcp6-lease-internal.h"
+
+int dhcp6_lease_clear_timers(DHCP6IA *ia) {
+ assert_return(ia, -EINVAL);
+
+ ia->timeout_t1 = sd_event_source_unref(ia->timeout_t1);
+ ia->timeout_t2 = sd_event_source_unref(ia->timeout_t2);
+
+ return 0;
+}
+
+int dhcp6_lease_ia_rebind_expire(const DHCP6IA *ia, uint32_t *expire) {
+ DHCP6Address *addr;
+ uint32_t valid = 0, t;
+
+ assert_return(ia, -EINVAL);
+ assert_return(expire, -EINVAL);
+
+ LIST_FOREACH(addresses, addr, ia->addresses) {
+ t = be32toh(addr->iaaddr.lifetime_valid);
+ if (valid < t)
+ valid = t;
+ }
+
+ t = be32toh(ia->lifetime_t2);
+ if (t > valid)
+ return -EINVAL;
+
+ *expire = valid - t;
+
+ return 0;
+}
+
+DHCP6IA *dhcp6_lease_free_ia(DHCP6IA *ia) {
+ DHCP6Address *address;
+
+ if (!ia)
+ return NULL;
+
+ dhcp6_lease_clear_timers(ia);
+
+ while (ia->addresses) {
+ address = ia->addresses;
+
+ LIST_REMOVE(addresses, ia->addresses, address);
+
+ free(address);
+ }
+
+ return NULL;
+}
+
+int dhcp6_lease_set_serverid(sd_dhcp6_lease *lease, const uint8_t *id,
+ size_t len) {
+ assert_return(lease, -EINVAL);
+ assert_return(id, -EINVAL);
+
+ free(lease->serverid);
+
+ lease->serverid = memdup(id, len);
+ if (!lease->serverid)
+ return -EINVAL;
+
+ lease->serverid_len = len;
+
+ return 0;
+}
+
+int dhcp6_lease_get_serverid(sd_dhcp6_lease *lease, uint8_t **id, size_t *len) {
+ assert_return(lease, -EINVAL);
+ assert_return(id, -EINVAL);
+ assert_return(len, -EINVAL);
+
+ *id = lease->serverid;
+ *len = lease->serverid_len;
+
+ return 0;
+}
+
+int dhcp6_lease_set_preference(sd_dhcp6_lease *lease, uint8_t preference) {
+ assert_return(lease, -EINVAL);
+
+ lease->preference = preference;
+
+ return 0;
+}
+
+int dhcp6_lease_get_preference(sd_dhcp6_lease *lease, uint8_t *preference) {
+ assert_return(lease, -EINVAL);
+ assert_return(preference, -EINVAL);
+
+ *preference = lease->preference;
+
+ return 0;
+}
+
+int dhcp6_lease_set_rapid_commit(sd_dhcp6_lease *lease) {
+ assert_return(lease, -EINVAL);
+
+ lease->rapid_commit = true;
+
+ return 0;
+}
+
+int dhcp6_lease_get_rapid_commit(sd_dhcp6_lease *lease, bool *rapid_commit) {
+ assert_return(lease, -EINVAL);
+ assert_return(rapid_commit, -EINVAL);
+
+ *rapid_commit = lease->rapid_commit;
+
+ return 0;
+}
+
+int dhcp6_lease_get_iaid(sd_dhcp6_lease *lease, be32_t *iaid) {
+ assert_return(lease, -EINVAL);
+ assert_return(iaid, -EINVAL);
+
+ *iaid = lease->ia.id;
+
+ return 0;
+}
+
+int sd_dhcp6_lease_get_next_address(sd_dhcp6_lease *lease,
+ struct in6_addr *addr,
+ uint32_t *lifetime_preferred,
+ uint32_t *lifetime_valid) {
+ assert_return(lease, -EINVAL);
+ assert_return(addr, -EINVAL);
+ assert_return(lifetime_preferred, -EINVAL);
+ assert_return(lifetime_valid, -EINVAL);
+
+ if (!lease->addr_iter)
+ return -ENOMSG;
+
+ memcpy(addr, &lease->addr_iter->iaaddr.address,
+ sizeof(struct in6_addr));
+ *lifetime_preferred =
+ be32toh(lease->addr_iter->iaaddr.lifetime_preferred);
+ *lifetime_valid = be32toh(lease->addr_iter->iaaddr.lifetime_valid);
+
+ lease->addr_iter = lease->addr_iter->addresses_next;
+
+ return 0;
+}
+
+int sd_dhcp6_lease_get_first_address(sd_dhcp6_lease *lease,
+ struct in6_addr *addr,
+ uint32_t *lifetime_preferred,
+ uint32_t *lifetime_valid) {
+ assert_return(lease, -EINVAL);
+ assert_return(addr, -EINVAL);
+ assert_return(lifetime_preferred, -EINVAL);
+ assert_return(lifetime_valid, -EINVAL);
+
+ if (!lease->ia.addresses)
+ return -ENOMSG;
+
+ lease->addr_iter = lease->ia.addresses;
+
+ return sd_dhcp6_lease_get_next_address(lease, addr, lifetime_preferred,
+ lifetime_valid);
+}
+
+sd_dhcp6_lease *sd_dhcp6_lease_ref(sd_dhcp6_lease *lease) {
+ if (lease)
+ assert_se(REFCNT_INC(lease->n_ref) >= 2);
+
+ return lease;
+}
+
+sd_dhcp6_lease *sd_dhcp6_lease_unref(sd_dhcp6_lease *lease) {
+ if (lease && REFCNT_DEC(lease->n_ref) <= 0) {
+ free(lease->serverid);
+ dhcp6_lease_free_ia(&lease->ia);
+
+ free(lease);
+ }
+
+ return NULL;
+}
+
+int dhcp6_lease_new(sd_dhcp6_lease **ret) {
+ sd_dhcp6_lease *lease;
+
+ lease = new0(sd_dhcp6_lease, 1);
+ if (!lease)
+ return -ENOMEM;
+
+ lease->n_ref = REFCNT_INIT;
+
+ LIST_HEAD_INIT(lease->ia.addresses);
+
+ *ret = lease;
+ return 0;
+}
diff --git a/src/dhcp-manager/systemd-dhcp/src/shared/async.h b/src/dhcp-manager/systemd-dhcp/src/shared/async.h
new file mode 100644
index 000000000..7f1ef7953
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/shared/async.h
@@ -0,0 +1,27 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#pragma once
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Lennart Poettering
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+int asynchronous_job(void* (*func)(void *p), void *arg);
+
+int asynchronous_sync(void);
+int asynchronous_close(int fd);
diff --git a/src/dhcp-manager/systemd-dhcp/src/shared/fileio.c b/src/dhcp-manager/systemd-dhcp/src/shared/fileio.c
new file mode 100644
index 000000000..0757d5d97
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/shared/fileio.c
@@ -0,0 +1,817 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2010 Lennart Poettering
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include "config.h"
+
+#include <unistd.h>
+
+#include "util.h"
+#include "strv.h"
+#include "utf8.h"
+#include "ctype.h"
+#include "fileio.h"
+
+int write_string_stream(FILE *f, const char *line) {
+ assert(f);
+ assert(line);
+
+ errno = 0;
+
+ fputs(line, f);
+ if (!endswith(line, "\n"))
+ fputc('\n', f);
+
+ fflush(f);
+
+ if (ferror(f))
+ return errno ? -errno : -EIO;
+
+ return 0;
+}
+
+int write_string_file(const char *fn, const char *line) {
+ _cleanup_fclose_ FILE *f = NULL;
+
+ assert(fn);
+ assert(line);
+
+ f = fopen(fn, "we");
+ if (!f)
+ return -errno;
+
+ return write_string_stream(f, line);
+}
+
+int write_string_file_no_create(const char *fn, const char *line) {
+ _cleanup_fclose_ FILE *f = NULL;
+ int fd;
+
+ assert(fn);
+ assert(line);
+
+ /* We manually build our own version of fopen(..., "we") that
+ * works without O_CREAT */
+ fd = open(fn, O_WRONLY|O_CLOEXEC|O_NOCTTY);
+ if (fd < 0)
+ return -errno;
+
+ f = fdopen(fd, "we");
+ if (!f) {
+ safe_close(fd);
+ return -errno;
+ }
+
+ return write_string_stream(f, line);
+}
+
+int write_string_file_atomic(const char *fn, const char *line) {
+ _cleanup_fclose_ FILE *f = NULL;
+ _cleanup_free_ char *p = NULL;
+ int r;
+
+ assert(fn);
+ assert(line);
+
+ r = fopen_temporary(fn, &f, &p);
+ if (r < 0)
+ return r;
+
+ fchmod_umask(fileno(f), 0644);
+
+ r = write_string_stream(f, line);
+ if (r >= 0) {
+ if (rename(p, fn) < 0)
+ r = -errno;
+ }
+
+ if (r < 0)
+ unlink(p);
+
+ return r;
+}
+
+int read_one_line_file(const char *fn, char **line) {
+ _cleanup_fclose_ FILE *f = NULL;
+ char t[LINE_MAX], *c;
+
+ assert(fn);
+ assert(line);
+
+ f = fopen(fn, "re");
+ if (!f)
+ return -errno;
+
+ if (!fgets(t, sizeof(t), f)) {
+
+ if (ferror(f))
+ return errno ? -errno : -EIO;
+
+ t[0] = 0;
+ }
+
+ c = strdup(t);
+ if (!c)
+ return -ENOMEM;
+ truncate_nl(c);
+
+ *line = c;
+ return 0;
+}
+
+int read_full_stream(FILE *f, char **contents, size_t *size) {
+ size_t n, l;
+ _cleanup_free_ char *buf = NULL;
+ struct stat st;
+
+ assert(f);
+ assert(contents);
+
+ if (fstat(fileno(f), &st) < 0)
+ return -errno;
+
+ n = LINE_MAX;
+
+ if (S_ISREG(st.st_mode)) {
+
+ /* Safety check */
+ if (st.st_size > 4*1024*1024)
+ return -E2BIG;
+
+ /* Start with the right file size, but be prepared for
+ * files from /proc which generally report a file size
+ * of 0 */
+ if (st.st_size > 0)
+ n = st.st_size;
+ }
+
+ l = 0;
+ for (;;) {
+ char *t;
+ size_t k;
+
+ t = realloc(buf, n+1);
+ if (!t)
+ return -ENOMEM;
+
+ buf = t;
+ k = fread(buf + l, 1, n - l, f);
+
+ if (k <= 0) {
+ if (ferror(f))
+ return -errno;
+
+ break;
+ }
+
+ l += k;
+ n *= 2;
+
+ /* Safety check */
+ if (n > 4*1024*1024)
+ return -E2BIG;
+ }
+
+ buf[l] = 0;
+ *contents = buf;
+ buf = NULL; /* do not free */
+
+ if (size)
+ *size = l;
+
+ return 0;
+}
+
+int read_full_file(const char *fn, char **contents, size_t *size) {
+ _cleanup_fclose_ FILE *f = NULL;
+
+ assert(fn);
+ assert(contents);
+
+ f = fopen(fn, "re");
+ if (!f)
+ return -errno;
+
+ return read_full_stream(f, contents, size);
+}
+
+static int parse_env_file_internal(
+ FILE *f,
+ const char *fname,
+ const char *newline,
+ int (*push) (const char *filename, unsigned line,
+ const char *key, char *value, void *userdata, int *n_pushed),
+ void *userdata,
+ int *n_pushed) {
+
+ _cleanup_free_ char *contents = NULL, *key = NULL;
+ size_t key_alloc = 0, n_key = 0, value_alloc = 0, n_value = 0, last_value_whitespace = (size_t) -1, last_key_whitespace = (size_t) -1;
+ char *p, *value = NULL;
+ int r;
+ unsigned line = 1;
+
+ enum {
+ PRE_KEY,
+ KEY,
+ PRE_VALUE,
+ VALUE,
+ VALUE_ESCAPE,
+ SINGLE_QUOTE_VALUE,
+ SINGLE_QUOTE_VALUE_ESCAPE,
+ DOUBLE_QUOTE_VALUE,
+ DOUBLE_QUOTE_VALUE_ESCAPE,
+ COMMENT,
+ COMMENT_ESCAPE
+ } state = PRE_KEY;
+
+ assert(newline);
+
+ if (f)
+ r = read_full_stream(f, &contents, NULL);
+ else
+ r = read_full_file(fname, &contents, NULL);
+ if (r < 0)
+ return r;
+
+ for (p = contents; *p; p++) {
+ char c = *p;
+
+ switch (state) {
+
+ case PRE_KEY:
+ if (strchr(COMMENTS, c))
+ state = COMMENT;
+ else if (!strchr(WHITESPACE, c)) {
+ state = KEY;
+ last_key_whitespace = (size_t) -1;
+
+ if (!GREEDY_REALLOC(key, key_alloc, n_key+2)) {
+ r = -ENOMEM;
+ goto fail;
+ }
+
+ key[n_key++] = c;
+ }
+ break;
+
+ case KEY:
+ if (strchr(newline, c)) {
+ state = PRE_KEY;
+ line ++;
+ n_key = 0;
+ } else if (c == '=') {
+ state = PRE_VALUE;
+ last_value_whitespace = (size_t) -1;
+ } else {
+ if (!strchr(WHITESPACE, c))
+ last_key_whitespace = (size_t) -1;
+ else if (last_key_whitespace == (size_t) -1)
+ last_key_whitespace = n_key;
+
+ if (!GREEDY_REALLOC(key, key_alloc, n_key+2)) {
+ r = -ENOMEM;
+ goto fail;
+ }
+
+ key[n_key++] = c;
+ }
+
+ break;
+
+ case PRE_VALUE:
+ if (strchr(newline, c)) {
+ state = PRE_KEY;
+ line ++;
+ key[n_key] = 0;
+
+ if (value)
+ value[n_value] = 0;
+
+ /* strip trailing whitespace from key */
+ if (last_key_whitespace != (size_t) -1)
+ key[last_key_whitespace] = 0;
+
+ r = push(fname, line, key, value, userdata, n_pushed);
+ if (r < 0)
+ goto fail;
+
+ n_key = 0;
+ value = NULL;
+ value_alloc = n_value = 0;
+
+ } else if (c == '\'')
+ state = SINGLE_QUOTE_VALUE;
+ else if (c == '\"')
+ state = DOUBLE_QUOTE_VALUE;
+ else if (c == '\\')
+ state = VALUE_ESCAPE;
+ else if (!strchr(WHITESPACE, c)) {
+ state = VALUE;
+
+ if (!GREEDY_REALLOC(value, value_alloc, n_value+2)) {
+ r = -ENOMEM;
+ goto fail;
+ }
+
+ value[n_value++] = c;
+ }
+
+ break;
+
+ case VALUE:
+ if (strchr(newline, c)) {
+ state = PRE_KEY;
+ line ++;
+
+ key[n_key] = 0;
+
+ if (value)
+ value[n_value] = 0;
+
+ /* Chomp off trailing whitespace from value */
+ if (last_value_whitespace != (size_t) -1)
+ value[last_value_whitespace] = 0;
+
+ /* strip trailing whitespace from key */
+ if (last_key_whitespace != (size_t) -1)
+ key[last_key_whitespace] = 0;
+
+ r = push(fname, line, key, value, userdata, n_pushed);
+ if (r < 0)
+ goto fail;
+
+ n_key = 0;
+ value = NULL;
+ value_alloc = n_value = 0;
+
+ } else if (c == '\\') {
+ state = VALUE_ESCAPE;
+ last_value_whitespace = (size_t) -1;
+ } else {
+ if (!strchr(WHITESPACE, c))
+ last_value_whitespace = (size_t) -1;
+ else if (last_value_whitespace == (size_t) -1)
+ last_value_whitespace = n_value;
+
+ if (!GREEDY_REALLOC(value, value_alloc, n_value+2)) {
+ r = -ENOMEM;
+ goto fail;
+ }
+
+ value[n_value++] = c;
+ }
+
+ break;
+
+ case VALUE_ESCAPE:
+ state = VALUE;
+
+ if (!strchr(newline, c)) {
+ /* Escaped newlines we eat up entirely */
+ if (!GREEDY_REALLOC(value, value_alloc, n_value+2)) {
+ r = -ENOMEM;
+ goto fail;
+ }
+
+ value[n_value++] = c;
+ }
+ break;
+
+ case SINGLE_QUOTE_VALUE:
+ if (c == '\'')
+ state = PRE_VALUE;
+ else if (c == '\\')
+ state = SINGLE_QUOTE_VALUE_ESCAPE;
+ else {
+ if (!GREEDY_REALLOC(value, value_alloc, n_value+2)) {
+ r = -ENOMEM;
+ goto fail;
+ }
+
+ value[n_value++] = c;
+ }
+
+ break;
+
+ case SINGLE_QUOTE_VALUE_ESCAPE:
+ state = SINGLE_QUOTE_VALUE;
+
+ if (!strchr(newline, c)) {
+ if (!GREEDY_REALLOC(value, value_alloc, n_value+2)) {
+ r = -ENOMEM;
+ goto fail;
+ }
+
+ value[n_value++] = c;
+ }
+ break;
+
+ case DOUBLE_QUOTE_VALUE:
+ if (c == '\"')
+ state = PRE_VALUE;
+ else if (c == '\\')
+ state = DOUBLE_QUOTE_VALUE_ESCAPE;
+ else {
+ if (!GREEDY_REALLOC(value, value_alloc, n_value+2)) {
+ r = -ENOMEM;
+ goto fail;
+ }
+
+ value[n_value++] = c;
+ }
+
+ break;
+
+ case DOUBLE_QUOTE_VALUE_ESCAPE:
+ state = DOUBLE_QUOTE_VALUE;
+
+ if (!strchr(newline, c)) {
+ if (!GREEDY_REALLOC(value, value_alloc, n_value+2)) {
+ r = -ENOMEM;
+ goto fail;
+ }
+
+ value[n_value++] = c;
+ }
+ break;
+
+ case COMMENT:
+ if (c == '\\')
+ state = COMMENT_ESCAPE;
+ else if (strchr(newline, c)) {
+ state = PRE_KEY;
+ line ++;
+ }
+ break;
+
+ case COMMENT_ESCAPE:
+ state = COMMENT;
+ break;
+ }
+ }
+
+ if (state == PRE_VALUE ||
+ state == VALUE ||
+ state == VALUE_ESCAPE ||
+ state == SINGLE_QUOTE_VALUE ||
+ state == SINGLE_QUOTE_VALUE_ESCAPE ||
+ state == DOUBLE_QUOTE_VALUE ||
+ state == DOUBLE_QUOTE_VALUE_ESCAPE) {
+
+ key[n_key] = 0;
+
+ if (value)
+ value[n_value] = 0;
+
+ if (state == VALUE)
+ if (last_value_whitespace != (size_t) -1)
+ value[last_value_whitespace] = 0;
+
+ /* strip trailing whitespace from key */
+ if (last_key_whitespace != (size_t) -1)
+ key[last_key_whitespace] = 0;
+
+ r = push(fname, line, key, value, userdata, n_pushed);
+ if (r < 0)
+ goto fail;
+ }
+
+ return 0;
+
+fail:
+ free(value);
+ return r;
+}
+
+static int parse_env_file_push(
+ const char *filename, unsigned line,
+ const char *key, char *value,
+ void *userdata,
+ int *n_pushed) {
+
+ const char *k;
+ va_list aq, *ap = userdata;
+
+ if (!utf8_is_valid(key)) {
+ _cleanup_free_ char *p = utf8_escape_invalid(key);
+
+ log_error("%s:%u: invalid UTF-8 in key '%s', ignoring.", strna(filename), line, p);
+ return -EINVAL;
+ }
+
+ if (value && !utf8_is_valid(value)) {
+ _cleanup_free_ char *p = utf8_escape_invalid(value);
+
+ log_error("%s:%u: invalid UTF-8 value for key %s: '%s', ignoring.", strna(filename), line, key, p);
+ return -EINVAL;
+ }
+
+ va_copy(aq, *ap);
+
+ while ((k = va_arg(aq, const char *))) {
+ char **v;
+
+ v = va_arg(aq, char **);
+
+ if (streq(key, k)) {
+ va_end(aq);
+ free(*v);
+ *v = value;
+
+ if (n_pushed)
+ (*n_pushed)++;
+
+ return 1;
+ }
+ }
+
+ va_end(aq);
+ free(value);
+
+ return 0;
+}
+
+int parse_env_file(
+ const char *fname,
+ const char *newline, ...) {
+
+ va_list ap;
+ int r, n_pushed = 0;
+
+ if (!newline)
+ newline = NEWLINE;
+
+ va_start(ap, newline);
+ r = parse_env_file_internal(NULL, fname, newline, parse_env_file_push, &ap, &n_pushed);
+ va_end(ap);
+
+ return r < 0 ? r : n_pushed;
+}
+
+static int load_env_file_push(
+ const char *filename, unsigned line,
+ const char *key, char *value,
+ void *userdata,
+ int *n_pushed) {
+ char ***m = userdata;
+ char *p;
+ int r;
+
+ if (!utf8_is_valid(key)) {
+ _cleanup_free_ char *t = utf8_escape_invalid(key);
+
+ log_error("%s:%u: invalid UTF-8 for key '%s', ignoring.", strna(filename), line, t);
+ return -EINVAL;
+ }
+
+ if (value && !utf8_is_valid(value)) {
+ _cleanup_free_ char *t = utf8_escape_invalid(value);
+
+ log_error("%s:%u: invalid UTF-8 value for key %s: '%s', ignoring.", strna(filename), line, key, t);
+ return -EINVAL;
+ }
+
+ p = strjoin(key, "=", strempty(value), NULL);
+ if (!p)
+ return -ENOMEM;
+
+ r = strv_consume(m, p);
+ if (r < 0)
+ return r;
+
+ if (n_pushed)
+ (*n_pushed)++;
+
+ free(value);
+ return 0;
+}
+
+int load_env_file(FILE *f, const char *fname, const char *newline, char ***rl) {
+ char **m = NULL;
+ int r;
+
+ if (!newline)
+ newline = NEWLINE;
+
+ r = parse_env_file_internal(f, fname, newline, load_env_file_push, &m, NULL);
+ if (r < 0) {
+ strv_free(m);
+ return r;
+ }
+
+ *rl = m;
+ return 0;
+}
+
+static int load_env_file_push_pairs(
+ const char *filename, unsigned line,
+ const char *key, char *value,
+ void *userdata,
+ int *n_pushed) {
+ char ***m = userdata;
+ int r;
+
+ if (!utf8_is_valid(key)) {
+ _cleanup_free_ char *t = utf8_escape_invalid(key);
+
+ log_error("%s:%u: invalid UTF-8 for key '%s', ignoring.", strna(filename), line, t);
+ return -EINVAL;
+ }
+
+ if (value && !utf8_is_valid(value)) {
+ _cleanup_free_ char *t = utf8_escape_invalid(value);
+
+ log_error("%s:%u: invalid UTF-8 value for key %s: '%s', ignoring.", strna(filename), line, key, t);
+ return -EINVAL;
+ }
+
+ r = strv_extend(m, key);
+ if (r < 0)
+ return -ENOMEM;
+
+ if (!value) {
+ r = strv_extend(m, "");
+ if (r < 0)
+ return -ENOMEM;
+ } else {
+ r = strv_push(m, value);
+ if (r < 0)
+ return r;
+ }
+
+ if (n_pushed)
+ (*n_pushed)++;
+
+ return 0;
+}
+
+int load_env_file_pairs(FILE *f, const char *fname, const char *newline, char ***rl) {
+ char **m = NULL;
+ int r;
+
+ if (!newline)
+ newline = NEWLINE;
+
+ r = parse_env_file_internal(f, fname, newline, load_env_file_push_pairs, &m, NULL);
+ if (r < 0) {
+ strv_free(m);
+ return r;
+ }
+
+ *rl = m;
+ return 0;
+}
+
+static void write_env_var(FILE *f, const char *v) {
+ const char *p;
+
+ p = strchr(v, '=');
+ if (!p) {
+ /* Fallback */
+ fputs(v, f);
+ fputc('\n', f);
+ return;
+ }
+
+ p++;
+ fwrite(v, 1, p-v, f);
+
+ if (string_has_cc(p, NULL) || chars_intersect(p, WHITESPACE SHELL_NEED_QUOTES)) {
+ fputc('\"', f);
+
+ for (; *p; p++) {
+ if (strchr(SHELL_NEED_ESCAPE, *p))
+ fputc('\\', f);
+
+ fputc(*p, f);
+ }
+
+ fputc('\"', f);
+ } else
+ fputs(p, f);
+
+ fputc('\n', f);
+}
+
+int write_env_file(const char *fname, char **l) {
+ _cleanup_fclose_ FILE *f = NULL;
+ _cleanup_free_ char *p = NULL;
+ char **i;
+ int r;
+
+ assert(fname);
+
+ r = fopen_temporary(fname, &f, &p);
+ if (r < 0)
+ return r;
+
+ fchmod_umask(fileno(f), 0644);
+
+ STRV_FOREACH(i, l)
+ write_env_var(f, *i);
+
+ r = fflush_and_check(f);
+ if (r >= 0) {
+ if (rename(p, fname) >= 0)
+ return 0;
+
+ r = -errno;
+ }
+
+ unlink(p);
+ return r;
+}
+
+int executable_is_script(const char *path, char **interpreter) {
+ int r;
+ _cleanup_free_ char *line = NULL;
+ int len;
+ char *ans;
+
+ assert(path);
+
+ r = read_one_line_file(path, &line);
+ if (r < 0)
+ return r;
+
+ if (!startswith(line, "#!"))
+ return 0;
+
+ ans = strstrip(line + 2);
+ len = strcspn(ans, " \t");
+
+ if (len == 0)
+ return 0;
+
+ ans = strndup(ans, len);
+ if (!ans)
+ return -ENOMEM;
+
+ *interpreter = ans;
+ return 1;
+}
+
+/**
+ * Retrieve one field from a file like /proc/self/status. pattern
+ * should start with '\n' and end with a ':'. Whitespace and zeros
+ * after the ':' will be skipped. field must be freed afterwards.
+ */
+int get_status_field(const char *filename, const char *pattern, char **field) {
+ _cleanup_free_ char *status = NULL;
+ char *t;
+ size_t len;
+ int r;
+
+ assert(filename);
+ assert(pattern);
+ assert(field);
+
+ r = read_full_file(filename, &status, NULL);
+ if (r < 0)
+ return r;
+
+ t = strstr(status, pattern);
+ if (!t)
+ return -ENOENT;
+
+ t += strlen(pattern);
+ if (*t) {
+ t += strspn(t, " \t");
+
+ /* Also skip zeros, because when this is used for
+ * capabilities, we don't want the zeros. This way the
+ * same capability set always maps to the same string,
+ * irrespective of the total capability set size. For
+ * other numbers it shouldn't matter. */
+ t += strspn(t, "0");
+ /* Back off one char if there's nothing but whitespace
+ and zeros */
+ if (!*t || isspace(*t))
+ t --;
+ }
+
+ len = strcspn(t, WHITESPACE);
+
+ *field = strndup(t, len);
+ if (!*field)
+ return -ENOMEM;
+
+ return 0;
+}
diff --git a/src/dhcp-manager/systemd-dhcp/src/shared/fileio.h b/src/dhcp-manager/systemd-dhcp/src/shared/fileio.h
new file mode 100644
index 000000000..5ae51c1e2
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/shared/fileio.h
@@ -0,0 +1,45 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#pragma once
+
+/***
+ This file is part of systemd.
+
+ Copyright 2010 Lennart Poettering
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+#include <stddef.h>
+#include <stdio.h>
+
+#include "macro.h"
+
+int write_string_stream(FILE *f, const char *line);
+int write_string_file(const char *fn, const char *line);
+int write_string_file_no_create(const char *fn, const char *line);
+int write_string_file_atomic(const char *fn, const char *line);
+
+int read_one_line_file(const char *fn, char **line);
+int read_full_file(const char *fn, char **contents, size_t *size);
+int read_full_stream(FILE *f, char **contents, size_t *size);
+
+int parse_env_file(const char *fname, const char *separator, ...) _sentinel_;
+int load_env_file(FILE *f, const char *fname, const char *separator, char ***l);
+int load_env_file_pairs(FILE *f, const char *fname, const char *separator, char ***l);
+
+int write_env_file(const char *fname, char **l);
+
+int executable_is_script(const char *path, char **interpreter);
+
+int get_status_field(const char *filename, const char *pattern, char **field);
diff --git a/src/dhcp-manager/systemd-dhcp/src/shared/in-addr-util.c b/src/dhcp-manager/systemd-dhcp/src/shared/in-addr-util.c
new file mode 100644
index 000000000..27edeb8d9
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/shared/in-addr-util.c
@@ -0,0 +1,294 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2014 Lennart Poettering
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include "config.h"
+
+#include <arpa/inet.h>
+
+#include "in-addr-util.h"
+
+int in_addr_is_null(int family, const union in_addr_union *u) {
+ assert(u);
+
+ if (family == AF_INET)
+ return u->in.s_addr == 0;
+
+ if (family == AF_INET6)
+ return
+ u->in6.s6_addr32[0] == 0 &&
+ u->in6.s6_addr32[1] == 0 &&
+ u->in6.s6_addr32[2] == 0 &&
+ u->in6.s6_addr32[3] == 0;
+
+ return -EAFNOSUPPORT;
+}
+
+int in_addr_is_link_local(int family, const union in_addr_union *u) {
+ assert(u);
+
+ if (family == AF_INET)
+ return (be32toh(u->in.s_addr) & 0xFFFF0000) == (169U << 24 | 254U << 16);
+
+ if (family == AF_INET6)
+ return IN6_IS_ADDR_LINKLOCAL(&u->in6);
+
+ return -EAFNOSUPPORT;
+}
+
+int in_addr_equal(int family, const union in_addr_union *a, const union in_addr_union *b) {
+ assert(a);
+ assert(b);
+
+ if (family == AF_INET)
+ return a->in.s_addr == b->in.s_addr;
+
+ if (family == AF_INET6)
+ return
+ a->in6.s6_addr32[0] == b->in6.s6_addr32[0] &&
+ a->in6.s6_addr32[1] == b->in6.s6_addr32[1] &&
+ a->in6.s6_addr32[2] == b->in6.s6_addr32[2] &&
+ a->in6.s6_addr32[3] == b->in6.s6_addr32[3];
+
+ return -EAFNOSUPPORT;
+}
+
+int in_addr_prefix_intersect(
+ int family,
+ const union in_addr_union *a,
+ unsigned aprefixlen,
+ const union in_addr_union *b,
+ unsigned bprefixlen) {
+
+ unsigned m;
+
+ assert(a);
+ assert(b);
+
+ /* Checks whether there are any addresses that are in both
+ * networks */
+
+ m = MIN(aprefixlen, bprefixlen);
+
+ if (family == AF_INET) {
+ uint32_t x, nm;
+
+ x = be32toh(a->in.s_addr ^ b->in.s_addr);
+ nm = (m == 0) ? 0 : 0xFFFFFFFFUL << (32 - m);
+
+ return (x & nm) == 0;
+ }
+
+ if (family == AF_INET6) {
+ unsigned i;
+
+ if (m > 128)
+ m = 128;
+
+ for (i = 0; i < 16; i++) {
+ uint8_t x, nm;
+
+ x = a->in6.s6_addr[i] ^ b->in6.s6_addr[i];
+
+ if (m < 8)
+ nm = 0xFF << (8 - m);
+ else
+ nm = 0xFF;
+
+ if ((x & nm) != 0)
+ return 0;
+
+ if (m > 8)
+ m -= 8;
+ else
+ m = 0;
+ }
+
+ return 1;
+ }
+
+ return -EAFNOSUPPORT;
+}
+
+int in_addr_prefix_next(int family, union in_addr_union *u, unsigned prefixlen) {
+ assert(u);
+
+ /* Increases the network part of an address by one. Returns
+ * positive it that succeeds, or 0 if this overflows. */
+
+ if (prefixlen <= 0)
+ return 0;
+
+ if (family == AF_INET) {
+ uint32_t c, n;
+
+ if (prefixlen > 32)
+ prefixlen = 32;
+
+ c = be32toh(u->in.s_addr);
+ n = c + (1UL << (32 - prefixlen));
+ if (n < c)
+ return 0;
+ n &= 0xFFFFFFFFUL << (32 - prefixlen);
+
+ u->in.s_addr = htobe32(n);
+ return 1;
+ }
+
+ if (family == AF_INET6) {
+ struct in6_addr add = {}, result;
+ uint8_t overflow = 0;
+ unsigned i;
+
+ if (prefixlen > 128)
+ prefixlen = 128;
+
+ /* First calculate what we have to add */
+ add.s6_addr[(prefixlen-1) / 8] = 1 << (7 - (prefixlen-1) % 8);
+
+ for (i = 16; i > 0; i--) {
+ unsigned j = i - 1;
+
+ result.s6_addr[j] = u->in6.s6_addr[j] + add.s6_addr[j] + overflow;
+ overflow = (result.s6_addr[j] < u->in6.s6_addr[j]);
+ }
+
+ if (overflow)
+ return 0;
+
+ u->in6 = result;
+ return 1;
+ }
+
+ return -EAFNOSUPPORT;
+}
+
+int in_addr_to_string(int family, const union in_addr_union *u, char **ret) {
+ char *x;
+ size_t l;
+
+ assert(u);
+ assert(ret);
+
+ if (family == AF_INET)
+ l = INET_ADDRSTRLEN;
+ else if (family == AF_INET6)
+ l = INET6_ADDRSTRLEN;
+ else
+ return -EAFNOSUPPORT;
+
+ x = new(char, l);
+ if (!x)
+ return -ENOMEM;
+
+ errno = 0;
+ if (!inet_ntop(family, u, x, l)) {
+ free(x);
+ return errno ? -errno : -EINVAL;
+ }
+
+ *ret = x;
+ return 0;
+}
+
+int in_addr_from_string(int family, const char *s, union in_addr_union *ret) {
+
+ assert(s);
+ assert(ret);
+
+ if (!IN_SET(family, AF_INET, AF_INET6))
+ return -EAFNOSUPPORT;
+
+ errno = 0;
+ if (inet_pton(family, s, ret) <= 0)
+ return errno ? -errno : -EINVAL;
+
+ return 0;
+}
+
+int in_addr_from_string_auto(const char *s, int *family, union in_addr_union *ret) {
+ int r;
+
+ assert(s);
+ assert(family);
+ assert(ret);
+
+ r = in_addr_from_string(AF_INET, s, ret);
+ if (r >= 0) {
+ *family = AF_INET;
+ return 0;
+ }
+
+ r = in_addr_from_string(AF_INET6, s, ret);
+ if (r >= 0) {
+ *family = AF_INET6;
+ return 0;
+ }
+
+ return -EINVAL;
+}
+
+unsigned in_addr_netmask_to_prefixlen(const struct in_addr *addr) {
+ assert(addr);
+
+ return 32 - u32ctz(be32toh(addr->s_addr));
+}
+
+int in_addr_default_prefixlen(const struct in_addr *addr, unsigned char *prefixlen) {
+ uint8_t msb_octet = *(uint8_t*) addr;
+
+ /* addr may not be aligned, so make sure we only access it byte-wise */
+
+ assert(addr);
+ assert(prefixlen);
+
+ if (msb_octet < 128)
+ /* class A, leading bits: 0 */
+ *prefixlen = 8;
+ else if (msb_octet < 192)
+ /* class B, leading bits 10 */
+ *prefixlen = 16;
+ else if (msb_octet < 224)
+ /* class C, leading bits 110 */
+ *prefixlen = 24;
+ else
+ /* class D or E, no default prefixlen */
+ return -ERANGE;
+
+ return 0;
+}
+
+int in_addr_default_subnet_mask(const struct in_addr *addr, struct in_addr *mask) {
+ unsigned char prefixlen;
+ int r;
+
+ assert(addr);
+ assert(mask);
+
+ r = in_addr_default_prefixlen(addr, &prefixlen);
+ if (r < 0)
+ return r;
+
+ assert(prefixlen > 0 && prefixlen < 32);
+
+ mask->s_addr = htobe32((0xffffffff << (32 - prefixlen)) & 0xffffffff);
+
+ return 0;
+}
diff --git a/src/dhcp-manager/systemd-dhcp/src/shared/in-addr-util.h b/src/dhcp-manager/systemd-dhcp/src/shared/in-addr-util.h
new file mode 100644
index 000000000..8da030ceb
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/shared/in-addr-util.h
@@ -0,0 +1,49 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#pragma once
+
+/***
+ This file is part of systemd.
+
+ Copyright 2014 Lennart Poettering
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <netinet/in.h>
+
+#include "macro.h"
+#include "util.h"
+
+union in_addr_union {
+ struct in_addr in;
+ struct in6_addr in6;
+};
+
+int in_addr_is_null(int family, const union in_addr_union *u);
+int in_addr_is_link_local(int family, const union in_addr_union *u);
+int in_addr_equal(int family, const union in_addr_union *a, const union in_addr_union *b);
+int in_addr_prefix_intersect(int family, const union in_addr_union *a, unsigned aprefixlen, const union in_addr_union *b, unsigned bprefixlen);
+int in_addr_prefix_next(int family, union in_addr_union *u, unsigned prefixlen);
+int in_addr_to_string(int family, const union in_addr_union *u, char **ret);
+int in_addr_from_string(int family, const char *s, union in_addr_union *ret);
+int in_addr_from_string_auto(const char *s, int *family, union in_addr_union *ret);
+unsigned in_addr_netmask_to_prefixlen(const struct in_addr *addr);
+int in_addr_default_prefixlen(const struct in_addr *addr, unsigned char *prefixlen);
+int in_addr_default_subnet_mask(const struct in_addr *addr, struct in_addr *mask);
+
+static inline size_t FAMILY_ADDRESS_SIZE(int family) {
+ assert(family == AF_INET || family == AF_INET6);
+ return family == AF_INET6 ? 16 : 4;
+}
diff --git a/src/dhcp-manager/systemd-dhcp/src/shared/list.h b/src/dhcp-manager/systemd-dhcp/src/shared/list.h
new file mode 100644
index 000000000..c020f7e93
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/shared/list.h
@@ -0,0 +1,138 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#pragma once
+
+/***
+ This file is part of systemd.
+
+ Copyright 2010 Lennart Poettering
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+/* The head of the linked list. Use this in the structure that shall
+ * contain the head of the linked list */
+#define LIST_HEAD(t,name) \
+ t *name
+
+/* The pointers in the linked list's items. Use this in the item structure */
+#define LIST_FIELDS(t,name) \
+ t *name##_next, *name##_prev
+
+/* Initialize the list's head */
+#define LIST_HEAD_INIT(head) \
+ do { \
+ (head) = NULL; } \
+ while(false)
+
+/* Initialize a list item */
+#define LIST_INIT(name,item) \
+ do { \
+ typeof(*(item)) *_item = (item); \
+ assert(_item); \
+ _item->name##_prev = _item->name##_next = NULL; \
+ } while(false)
+
+/* Prepend an item to the list */
+#define LIST_PREPEND(name,head,item) \
+ do { \
+ typeof(*(head)) **_head = &(head), *_item = (item); \
+ assert(_item); \
+ if ((_item->name##_next = *_head)) \
+ _item->name##_next->name##_prev = _item; \
+ _item->name##_prev = NULL; \
+ *_head = _item; \
+ } while(false)
+
+/* Remove an item from the list */
+#define LIST_REMOVE(name,head,item) \
+ do { \
+ typeof(*(head)) **_head = &(head), *_item = (item); \
+ assert(_item); \
+ if (_item->name##_next) \
+ _item->name##_next->name##_prev = _item->name##_prev; \
+ if (_item->name##_prev) \
+ _item->name##_prev->name##_next = _item->name##_next; \
+ else { \
+ assert(*_head == _item); \
+ *_head = _item->name##_next; \
+ } \
+ _item->name##_next = _item->name##_prev = NULL; \
+ } while(false)
+
+/* Find the head of the list */
+#define LIST_FIND_HEAD(name,item,head) \
+ do { \
+ typeof(*(item)) *_item = (item); \
+ if (!_item) \
+ (head) = NULL; \
+ else { \
+ while (_item->name##_prev) \
+ _item = _item->name##_prev; \
+ (head) = _item; \
+ } \
+ } while (false)
+
+/* Find the tail of the list */
+#define LIST_FIND_TAIL(name,item,tail) \
+ do { \
+ typeof(*(item)) *_item = (item); \
+ if (!_item) \
+ (tail) = NULL; \
+ else { \
+ while (_item->name##_next) \
+ _item = _item->name##_next; \
+ (tail) = _item; \
+ } \
+ } while (false)
+
+/* Insert an item after another one (a = where, b = what) */
+#define LIST_INSERT_AFTER(name,head,a,b) \
+ do { \
+ typeof(*(head)) **_head = &(head), *_a = (a), *_b = (b); \
+ assert(_b); \
+ if (!_a) { \
+ if ((_b->name##_next = *_head)) \
+ _b->name##_next->name##_prev = _b; \
+ _b->name##_prev = NULL; \
+ *_head = _b; \
+ } else { \
+ if ((_b->name##_next = _a->name##_next)) \
+ _b->name##_next->name##_prev = _b; \
+ _b->name##_prev = _a; \
+ _a->name##_next = _b; \
+ } \
+ } while(false)
+
+#define LIST_JUST_US(name,item) \
+ (!(item)->name##_prev && !(item)->name##_next) \
+
+#define LIST_FOREACH(name,i,head) \
+ for ((i) = (head); (i); (i) = (i)->name##_next)
+
+#define LIST_FOREACH_SAFE(name,i,n,head) \
+ for ((i) = (head); (i) && (((n) = (i)->name##_next), 1); (i) = (n))
+
+#define LIST_FOREACH_BEFORE(name,i,p) \
+ for ((i) = (p)->name##_prev; (i); (i) = (i)->name##_prev)
+
+#define LIST_FOREACH_AFTER(name,i,p) \
+ for ((i) = (p)->name##_next; (i); (i) = (i)->name##_next)
+
+/* Loop starting from p->next until p->prev.
+ p can be adjusted meanwhile. */
+#define LIST_LOOP_BUT_ONE(name,i,head,p) \
+ for ((i) = (p)->name##_next ? (p)->name##_next : (head); \
+ (i) != (p); \
+ (i) = (i)->name##_next ? (i)->name##_next : (head))
diff --git a/src/dhcp-manager/systemd-dhcp/src/shared/macro.h b/src/dhcp-manager/systemd-dhcp/src/shared/macro.h
new file mode 100644
index 000000000..e6cf6eecd
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/shared/macro.h
@@ -0,0 +1,413 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#pragma once
+
+/***
+ This file is part of systemd.
+
+ Copyright 2010 Lennart Poettering
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <assert.h>
+#include <sys/param.h>
+#include <sys/types.h>
+#include <sys/uio.h>
+#include <inttypes.h>
+
+#define _printf_(a,b) __attribute__ ((format (printf, a, b)))
+#define _alloc_(...) __attribute__ ((alloc_size(__VA_ARGS__)))
+#define _sentinel_ __attribute__ ((sentinel))
+#define _unused_ __attribute__ ((unused))
+#define _destructor_ __attribute__ ((destructor))
+#define _pure_ __attribute__ ((pure))
+#define _const_ __attribute__ ((const))
+#define _deprecated_ __attribute__ ((deprecated))
+#define _packed_ __attribute__ ((packed))
+#define _malloc_ __attribute__ ((malloc))
+#define _weak_ __attribute__ ((weak))
+#define _likely_(x) (__builtin_expect(!!(x),1))
+#define _unlikely_(x) (__builtin_expect(!!(x),0))
+#define _public_ __attribute__ ((visibility("default")))
+#define _hidden_ __attribute__ ((visibility("hidden")))
+#define _weakref_(x) __attribute__((weakref(#x)))
+#define _alignas_(x) __attribute__((aligned(__alignof(x))))
+#define _cleanup_(x) __attribute__((cleanup(x)))
+
+/* Temporarily disable some warnings */
+#define DISABLE_WARNING_DECLARATION_AFTER_STATEMENT \
+ _Pragma("GCC diagnostic push"); \
+ _Pragma("GCC diagnostic ignored \"-Wdeclaration-after-statement\"")
+
+#define DISABLE_WARNING_FORMAT_NONLITERAL \
+ _Pragma("GCC diagnostic push"); \
+ _Pragma("GCC diagnostic ignored \"-Wformat-nonliteral\"")
+
+#define DISABLE_WARNING_MISSING_PROTOTYPES \
+ _Pragma("GCC diagnostic push"); \
+ _Pragma("GCC diagnostic ignored \"-Wmissing-prototypes\"")
+
+#define DISABLE_WARNING_NONNULL \
+ _Pragma("GCC diagnostic push"); \
+ _Pragma("GCC diagnostic ignored \"-Wnonnull\"")
+
+#define DISABLE_WARNING_SHADOW \
+ _Pragma("GCC diagnostic push"); \
+ _Pragma("GCC diagnostic ignored \"-Wshadow\"")
+
+#define REENABLE_WARNING \
+ _Pragma("GCC diagnostic pop")
+
+/* automake test harness */
+#define EXIT_TEST_SKIP 77
+
+#define XSTRINGIFY(x) #x
+#define STRINGIFY(x) XSTRINGIFY(x)
+
+#define XCONCATENATE(x, y) x ## y
+#define CONCATENATE(x, y) XCONCATENATE(x, y)
+
+#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
+#define UNIQ __COUNTER__
+
+/* Rounds up */
+
+#define ALIGN4(l) (((l) + 3) & ~3)
+#define ALIGN8(l) (((l) + 7) & ~7)
+
+#if __SIZEOF_POINTER__ == 8
+#define ALIGN(l) ALIGN8(l)
+#elif __SIZEOF_POINTER__ == 4
+#define ALIGN(l) ALIGN4(l)
+#else
+#error "Wut? Pointers are neither 4 nor 8 bytes long?"
+#endif
+
+#define ALIGN_PTR(p) ((void*) ALIGN((unsigned long) p))
+#define ALIGN4_PTR(p) ((void*) ALIGN4((unsigned long) p))
+#define ALIGN8_PTR(p) ((void*) ALIGN8((unsigned long) p))
+
+static inline size_t ALIGN_TO(size_t l, size_t ali) {
+ return ((l + ali - 1) & ~(ali - 1));
+}
+
+#define ALIGN_TO_PTR(p, ali) ((void*) ALIGN_TO((unsigned long) p, ali))
+
+/* align to next higher power-of-2 (except for: 0 => 0, overflow => 0) */
+static inline unsigned long ALIGN_POWER2(unsigned long u) {
+ /* clz(0) is undefined */
+ if (u == 1)
+ return 1;
+
+ /* left-shift overflow is undefined */
+ if (__builtin_clzl(u - 1UL) < 1)
+ return 0;
+
+ return 1UL << (sizeof(u) * 8 - __builtin_clzl(u - 1UL));
+}
+
+#define ELEMENTSOF(x) (sizeof(x)/sizeof((x)[0]))
+
+/*
+ * container_of - cast a member of a structure out to the containing structure
+ * @ptr: the pointer to the member.
+ * @type: the type of the container struct this is embedded in.
+ * @member: the name of the member within the struct.
+ */
+#define container_of(ptr, type, member) __container_of(UNIQ, (ptr), type, member)
+#define __container_of(uniq, ptr, type, member) \
+ __extension__ ({ \
+ const typeof( ((type*)0)->member ) *UNIQ_T(A, uniq) = (ptr); \
+ (type*)( (char *)UNIQ_T(A, uniq) - offsetof(type,member) ); \
+ })
+
+#undef MAX
+#define MAX(a, b) __MAX(UNIQ, (a), UNIQ, (b))
+#define __MAX(aq, a, bq, b) \
+ __extension__ ({ \
+ const typeof(a) UNIQ_T(A, aq) = (a); \
+ const typeof(b) UNIQ_T(B, bq) = (b); \
+ UNIQ_T(A,aq) > UNIQ_T(B,bq) ? UNIQ_T(A,aq) : UNIQ_T(B,bq); \
+ })
+
+/* evaluates to (void) if _A or _B are not constant or of different types */
+#define CONST_MAX(_A, _B) \
+ __extension__ (__builtin_choose_expr( \
+ __builtin_constant_p(_A) && \
+ __builtin_constant_p(_B) && \
+ __builtin_types_compatible_p(typeof(_A), typeof(_B)), \
+ ((_A) > (_B)) ? (_A) : (_B), \
+ (void)0))
+
+/* takes two types and returns the size of the larger one */
+#define MAXSIZE(A, B) (sizeof(union _packed_ { typeof(A) a; typeof(B) b; }))
+
+#define MAX3(x,y,z) \
+ __extension__ ({ \
+ const typeof(x) _c = MAX(x,y); \
+ MAX(_c, z); \
+ })
+
+#undef MIN
+#define MIN(a, b) __MIN(UNIQ, (a), UNIQ, (b))
+#define __MIN(aq, a, bq, b) \
+ __extension__ ({ \
+ const typeof(a) UNIQ_T(A, aq) = (a); \
+ const typeof(b) UNIQ_T(B, bq) = (b); \
+ UNIQ_T(A,aq) < UNIQ_T(B,bq) ? UNIQ_T(A,aq) : UNIQ_T(B,bq); \
+ })
+
+#define MIN3(x,y,z) \
+ __extension__ ({ \
+ const typeof(x) _c = MIN(x,y); \
+ MIN(_c, z); \
+ })
+
+#define LESS_BY(a, b) __LESS_BY(UNIQ, (a), UNIQ, (b))
+#define __LESS_BY(aq, a, bq, b) \
+ __extension__ ({ \
+ const typeof(a) UNIQ_T(A, aq) = (a); \
+ const typeof(b) UNIQ_T(B, bq) = (b); \
+ UNIQ_T(A,aq) > UNIQ_T(B,bq) ? UNIQ_T(A,aq) - UNIQ_T(B,bq) : 0; \
+ })
+
+#undef CLAMP
+#define CLAMP(x, low, high) __CLAMP(UNIQ, (x), UNIQ, (low), UNIQ, (high))
+#define __CLAMP(xq, x, lowq, low, highq, high) \
+ __extension__ ({ \
+ const typeof(x) UNIQ_T(X,xq) = (x); \
+ const typeof(low) UNIQ_T(LOW,lowq) = (low); \
+ const typeof(high) UNIQ_T(HIGH,highq) = (high); \
+ UNIQ_T(X,xq) > UNIQ_T(HIGH,highq) ? \
+ UNIQ_T(HIGH,highq) : \
+ UNIQ_T(X,xq) < UNIQ_T(LOW,lowq) ? \
+ UNIQ_T(LOW,lowq) : \
+ UNIQ_T(X,xq); \
+ })
+
+#define assert_se(expr) \
+ do { \
+ if (_unlikely_(!(expr))) \
+ log_assert_failed(#expr, __FILE__, __LINE__, __PRETTY_FUNCTION__); \
+ } while (false) \
+
+/* We override the glibc assert() here. */
+#undef assert
+#ifdef NDEBUG
+#define assert(expr) do {} while(false)
+#else
+#define assert(expr) assert_se(expr)
+#endif
+
+#define assert_not_reached(t) \
+ do { \
+ log_assert_failed_unreachable(t, __FILE__, __LINE__, __PRETTY_FUNCTION__); \
+ } while (false)
+
+#if defined(static_assert)
+/* static_assert() is sometimes defined in a way that trips up
+ * -Wdeclaration-after-statement, hence let's temporarily turn off
+ * this warning around it. */
+#define assert_cc(expr) \
+ DISABLE_WARNING_DECLARATION_AFTER_STATEMENT; \
+ static_assert(expr, #expr); \
+ REENABLE_WARNING
+#else
+#define assert_cc(expr) \
+ DISABLE_WARNING_DECLARATION_AFTER_STATEMENT; \
+ struct CONCATENATE(_assert_struct_, __LINE__) { \
+ char x[(expr) ? 0 : -1]; \
+ }; \
+ REENABLE_WARNING
+#endif
+
+#define assert_return(expr, r) \
+ do { \
+ if (_unlikely_(!(expr))) { \
+ log_assert_failed_return(#expr, __FILE__, __LINE__, __PRETTY_FUNCTION__); \
+ return (r); \
+ } \
+ } while (false)
+
+#define PTR_TO_INT(p) ((int) ((intptr_t) (p)))
+#define INT_TO_PTR(u) ((void *) ((intptr_t) (u)))
+#define PTR_TO_UINT(p) ((unsigned int) ((uintptr_t) (p)))
+#define UINT_TO_PTR(u) ((void *) ((uintptr_t) (u)))
+
+#define PTR_TO_LONG(p) ((long) ((intptr_t) (p)))
+#define LONG_TO_PTR(u) ((void *) ((intptr_t) (u)))
+#define PTR_TO_ULONG(p) ((unsigned long) ((uintptr_t) (p)))
+#define ULONG_TO_PTR(u) ((void *) ((uintptr_t) (u)))
+
+#define PTR_TO_INT32(p) ((int32_t) ((intptr_t) (p)))
+#define INT32_TO_PTR(u) ((void *) ((intptr_t) (u)))
+#define PTR_TO_UINT32(p) ((uint32_t) ((uintptr_t) (p)))
+#define UINT32_TO_PTR(u) ((void *) ((uintptr_t) (u)))
+
+#define PTR_TO_INT64(p) ((int64_t) ((intptr_t) (p)))
+#define INT64_TO_PTR(u) ((void *) ((intptr_t) (u)))
+#define PTR_TO_UINT64(p) ((uint64_t) ((uintptr_t) (p)))
+#define UINT64_TO_PTR(u) ((void *) ((uintptr_t) (u)))
+
+#define PTR_TO_SIZE(p) ((size_t) ((uintptr_t) (p)))
+#define SIZE_TO_PTR(u) ((void *) ((uintptr_t) (u)))
+
+#define memzero(x,l) (memset((x), 0, (l)))
+#define zero(x) (memzero(&(x), sizeof(x)))
+
+#define CHAR_TO_STR(x) ((char[2]) { x, 0 })
+
+#define char_array_0(x) x[sizeof(x)-1] = 0;
+
+#define IOVEC_SET_STRING(i, s) \
+ do { \
+ struct iovec *_i = &(i); \
+ char *_s = (char *)(s); \
+ _i->iov_base = _s; \
+ _i->iov_len = strlen(_s); \
+ } while(false)
+
+static inline size_t IOVEC_TOTAL_SIZE(const struct iovec *i, unsigned n) {
+ unsigned j;
+ size_t r = 0;
+
+ for (j = 0; j < n; j++)
+ r += i[j].iov_len;
+
+ return r;
+}
+
+static inline size_t IOVEC_INCREMENT(struct iovec *i, unsigned n, size_t k) {
+ unsigned j;
+
+ for (j = 0; j < n; j++) {
+ size_t sub;
+
+ if (_unlikely_(k <= 0))
+ break;
+
+ sub = MIN(i[j].iov_len, k);
+ i[j].iov_len -= sub;
+ i[j].iov_base = (uint8_t*) i[j].iov_base + sub;
+ k -= sub;
+ }
+
+ return k;
+}
+
+#define VA_FORMAT_ADVANCE(format, ap) \
+do { \
+ int _argtypes[128]; \
+ size_t _i, _k; \
+ _k = parse_printf_format((format), ELEMENTSOF(_argtypes), _argtypes); \
+ assert(_k < ELEMENTSOF(_argtypes)); \
+ for (_i = 0; _i < _k; _i++) { \
+ if (_argtypes[_i] & PA_FLAG_PTR) { \
+ (void) va_arg(ap, void*); \
+ continue; \
+ } \
+ \
+ switch (_argtypes[_i]) { \
+ case PA_INT: \
+ case PA_INT|PA_FLAG_SHORT: \
+ case PA_CHAR: \
+ (void) va_arg(ap, int); \
+ break; \
+ case PA_INT|PA_FLAG_LONG: \
+ (void) va_arg(ap, long int); \
+ break; \
+ case PA_INT|PA_FLAG_LONG_LONG: \
+ (void) va_arg(ap, long long int); \
+ break; \
+ case PA_WCHAR: \
+ (void) va_arg(ap, wchar_t); \
+ break; \
+ case PA_WSTRING: \
+ case PA_STRING: \
+ case PA_POINTER: \
+ (void) va_arg(ap, void*); \
+ break; \
+ case PA_FLOAT: \
+ case PA_DOUBLE: \
+ (void) va_arg(ap, double); \
+ break; \
+ case PA_DOUBLE|PA_FLAG_LONG_DOUBLE: \
+ (void) va_arg(ap, long double); \
+ break; \
+ default: \
+ assert_not_reached("Unknown format string argument."); \
+ } \
+ } \
+} while(false)
+
+ /* Because statfs.t_type can be int on some architectures, we have to cast
+ * the const magic to the type, otherwise the compiler warns about
+ * signed/unsigned comparison, because the magic can be 32 bit unsigned.
+ */
+#define F_TYPE_EQUAL(a, b) (a == (typeof(a)) b)
+
+/* Returns the number of chars needed to format variables of the
+ * specified type as a decimal string. Adds in extra space for a
+ * negative '-' prefix. */
+#define DECIMAL_STR_MAX(type) \
+ (2+(sizeof(type) <= 1 ? 3 : \
+ sizeof(type) <= 2 ? 5 : \
+ sizeof(type) <= 4 ? 10 : \
+ sizeof(type) <= 8 ? 20 : sizeof(int[-2*(sizeof(type) > 8)])))
+
+#define SET_FLAG(v, flag, b) \
+ (v) = (b) ? ((v) | (flag)) : ((v) & ~(flag))
+
+#define IN_SET(x, y, ...) \
+ ({ \
+ const typeof(y) _y = (y); \
+ typeof(_y) _x = (x); \
+ unsigned _i; \
+ bool _found = false; \
+ for (_i = 0; _i < 1 + sizeof((typeof(_x)[]) { __VA_ARGS__ })/sizeof(typeof(_x)); _i++) \
+ if (((typeof(_x)[]) { _y, __VA_ARGS__ })[_i] == _x) { \
+ _found = true; \
+ break; \
+ } \
+ _found; \
+ })
+
+#if 0 /* NM_IGNORED */
+/* Define C11 thread_local attribute even on older gcc compiler
+ * version */
+#ifndef thread_local
+/*
+ * Don't break on glibc < 2.16 that doesn't define __STDC_NO_THREADS__
+ * see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53769
+ */
+#if __STDC_VERSION__ >= 201112L && !(defined(__STDC_NO_THREADS__) || (defined(__GNU_LIBRARY__) && __GLIBC__ == 2 && __GLIBC_MINOR__ < 16))
+#define thread_local _Thread_local
+#else
+#define thread_local __thread
+#endif
+#endif
+
+/* Define C11 noreturn without <stdnoreturn.h> and even on older gcc
+ * compiler versions */
+#ifndef noreturn
+#if __STDC_VERSION__ >= 201112L
+#define noreturn _Noreturn
+#else
+#define noreturn __attribute__((noreturn))
+#endif
+#endif
+
+#include "log.h"
+#endif
diff --git a/src/dhcp-manager/systemd-dhcp/src/shared/refcnt.h b/src/dhcp-manager/systemd-dhcp/src/shared/refcnt.h
new file mode 100644
index 000000000..0502c20a2
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/shared/refcnt.h
@@ -0,0 +1,34 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#pragma once
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Lennart Poettering
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+/* A type-safe atomic refcounter */
+
+typedef struct {
+ volatile unsigned _value;
+} RefCount;
+
+#define REFCNT_GET(r) ((r)._value)
+#define REFCNT_INC(r) (__sync_add_and_fetch(&(r)._value, 1))
+#define REFCNT_DEC(r) (__sync_sub_and_fetch(&(r)._value, 1))
+
+#define REFCNT_INIT ((RefCount) { ._value = 1 })
diff --git a/src/dhcp-manager/systemd-dhcp/src/shared/siphash24.c b/src/dhcp-manager/systemd-dhcp/src/shared/siphash24.c
new file mode 100644
index 000000000..f9e59c6f5
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/shared/siphash24.c
@@ -0,0 +1,137 @@
+/*
+ SipHash reference C implementation
+
+ Written in 2012 by
+ Jean-Philippe Aumasson <jeanphilippe.aumasson@gmail.com>
+ Daniel J. Bernstein <djb@cr.yp.to>
+
+ To the extent possible under law, the author(s) have dedicated all copyright
+ and related and neighboring rights to this software to the public domain
+ worldwide. This software is distributed without any warranty.
+
+ You should have received a copy of the CC0 Public Domain Dedication along with
+ this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
+
+ (Minimal changes made by Lennart Poettering, to make clean for inclusion in systemd)
+*/
+#include "config.h"
+
+#include <stdint.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "siphash24.h"
+
+typedef uint64_t u64;
+typedef uint32_t u32;
+typedef uint8_t u8;
+
+#define ROTL(x,b) (u64)( ((x) << (b)) | ( (x) >> (64 - (b))) )
+
+#define U32TO8_LE(p, v) \
+ (p)[0] = (u8)((v) ); (p)[1] = (u8)((v) >> 8); \
+ (p)[2] = (u8)((v) >> 16); (p)[3] = (u8)((v) >> 24);
+
+#define U64TO8_LE(p, v) \
+ U32TO8_LE((p), (u32)((v) )); \
+ U32TO8_LE((p) + 4, (u32)((v) >> 32));
+
+#define U8TO64_LE(p) \
+ (((u64)((p)[0]) ) | \
+ ((u64)((p)[1]) << 8) | \
+ ((u64)((p)[2]) << 16) | \
+ ((u64)((p)[3]) << 24) | \
+ ((u64)((p)[4]) << 32) | \
+ ((u64)((p)[5]) << 40) | \
+ ((u64)((p)[6]) << 48) | \
+ ((u64)((p)[7]) << 56))
+
+#define SIPROUND \
+ do { \
+ v0 += v1; v1=ROTL(v1,13); v1 ^= v0; v0=ROTL(v0,32); \
+ v2 += v3; v3=ROTL(v3,16); v3 ^= v2; \
+ v0 += v3; v3=ROTL(v3,21); v3 ^= v0; \
+ v2 += v1; v1=ROTL(v1,17); v1 ^= v2; v2=ROTL(v2,32); \
+ } while(0)
+
+/* SipHash-2-4 */
+void siphash24(uint8_t out[8], const void *_in, size_t inlen, const uint8_t k[16])
+{
+ /* "somepseudorandomlygeneratedbytes" */
+ u64 v0 = 0x736f6d6570736575ULL;
+ u64 v1 = 0x646f72616e646f6dULL;
+ u64 v2 = 0x6c7967656e657261ULL;
+ u64 v3 = 0x7465646279746573ULL;
+ u64 b;
+ u64 k0 = U8TO64_LE( k );
+ u64 k1 = U8TO64_LE( k + 8 );
+ u64 m;
+ const u8 *in = _in;
+ const u8 *end = in + inlen - ( inlen % sizeof( u64 ) );
+ const int left = inlen & 7;
+ b = ( ( u64 )inlen ) << 56;
+ v3 ^= k1;
+ v2 ^= k0;
+ v1 ^= k1;
+ v0 ^= k0;
+
+ for ( ; in != end; in += 8 )
+ {
+ m = U8TO64_LE( in );
+#ifdef DEBUG
+ printf( "(%3d) v0 %08x %08x\n", ( int )inlen, ( u32 )( v0 >> 32 ), ( u32 )v0 );
+ printf( "(%3d) v1 %08x %08x\n", ( int )inlen, ( u32 )( v1 >> 32 ), ( u32 )v1 );
+ printf( "(%3d) v2 %08x %08x\n", ( int )inlen, ( u32 )( v2 >> 32 ), ( u32 )v2 );
+ printf( "(%3d) v3 %08x %08x\n", ( int )inlen, ( u32 )( v3 >> 32 ), ( u32 )v3 );
+ printf( "(%3d) compress %08x %08x\n", ( int )inlen, ( u32 )( m >> 32 ), ( u32 )m );
+#endif
+ v3 ^= m;
+ SIPROUND;
+ SIPROUND;
+ v0 ^= m;
+ }
+
+ switch( left )
+ {
+ case 7: b |= ( ( u64 )in[ 6] ) << 48;
+
+ case 6: b |= ( ( u64 )in[ 5] ) << 40;
+
+ case 5: b |= ( ( u64 )in[ 4] ) << 32;
+
+ case 4: b |= ( ( u64 )in[ 3] ) << 24;
+
+ case 3: b |= ( ( u64 )in[ 2] ) << 16;
+
+ case 2: b |= ( ( u64 )in[ 1] ) << 8;
+
+ case 1: b |= ( ( u64 )in[ 0] ); break;
+
+ case 0: break;
+ }
+
+#ifdef DEBUG
+ printf( "(%3d) v0 %08x %08x\n", ( int )inlen, ( u32 )( v0 >> 32 ), ( u32 )v0 );
+ printf( "(%3d) v1 %08x %08x\n", ( int )inlen, ( u32 )( v1 >> 32 ), ( u32 )v1 );
+ printf( "(%3d) v2 %08x %08x\n", ( int )inlen, ( u32 )( v2 >> 32 ), ( u32 )v2 );
+ printf( "(%3d) v3 %08x %08x\n", ( int )inlen, ( u32 )( v3 >> 32 ), ( u32 )v3 );
+ printf( "(%3d) padding %08x %08x\n", ( int )inlen, ( u32 )( b >> 32 ), ( u32 )b );
+#endif
+ v3 ^= b;
+ SIPROUND;
+ SIPROUND;
+ v0 ^= b;
+#ifdef DEBUG
+ printf( "(%3d) v0 %08x %08x\n", ( int )inlen, ( u32 )( v0 >> 32 ), ( u32 )v0 );
+ printf( "(%3d) v1 %08x %08x\n", ( int )inlen, ( u32 )( v1 >> 32 ), ( u32 )v1 );
+ printf( "(%3d) v2 %08x %08x\n", ( int )inlen, ( u32 )( v2 >> 32 ), ( u32 )v2 );
+ printf( "(%3d) v3 %08x %08x\n", ( int )inlen, ( u32 )( v3 >> 32 ), ( u32 )v3 );
+#endif
+ v2 ^= 0xff;
+ SIPROUND;
+ SIPROUND;
+ SIPROUND;
+ SIPROUND;
+ b = v0 ^ v1 ^ v2 ^ v3;
+ U64TO8_LE( out, b );
+}
diff --git a/src/dhcp-manager/systemd-dhcp/src/shared/siphash24.h b/src/dhcp-manager/systemd-dhcp/src/shared/siphash24.h
new file mode 100644
index 000000000..62e1168a7
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/shared/siphash24.h
@@ -0,0 +1,6 @@
+#pragma once
+
+#include <inttypes.h>
+#include <sys/types.h>
+
+void siphash24(uint8_t out[8], const void *in, size_t inlen, const uint8_t k[16]);
diff --git a/src/dhcp-manager/systemd-dhcp/src/shared/socket-util.h b/src/dhcp-manager/systemd-dhcp/src/shared/socket-util.h
new file mode 100644
index 000000000..07d0aff72
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/shared/socket-util.h
@@ -0,0 +1,118 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#pragma once
+
+/***
+ This file is part of systemd.
+
+ Copyright 2010 Lennart Poettering
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <netinet/ether.h>
+#include <sys/un.h>
+#include <asm/types.h>
+#include <linux/netlink.h>
+#include <linux/if_packet.h>
+
+#include "macro.h"
+#include "util.h"
+
+union sockaddr_union {
+ struct sockaddr sa;
+ struct sockaddr_in in;
+ struct sockaddr_in6 in6;
+ struct sockaddr_un un;
+ struct sockaddr_nl nl;
+ struct sockaddr_storage storage;
+ struct sockaddr_ll ll;
+};
+
+typedef struct SocketAddress {
+ union sockaddr_union sockaddr;
+
+ /* We store the size here explicitly due to the weird
+ * sockaddr_un semantics for abstract sockets */
+ socklen_t size;
+
+ /* Socket type, i.e. SOCK_STREAM, SOCK_DGRAM, ... */
+ int type;
+
+ /* Socket protocol, IPPROTO_xxx, usually 0, except for netlink */
+ int protocol;
+} SocketAddress;
+
+typedef enum SocketAddressBindIPv6Only {
+ SOCKET_ADDRESS_DEFAULT,
+ SOCKET_ADDRESS_BOTH,
+ SOCKET_ADDRESS_IPV6_ONLY,
+ _SOCKET_ADDRESS_BIND_IPV6_ONLY_MAX,
+ _SOCKET_ADDRESS_BIND_IPV6_ONLY_INVALID = -1
+} SocketAddressBindIPv6Only;
+
+#define socket_address_family(a) ((a)->sockaddr.sa.sa_family)
+
+int socket_address_parse(SocketAddress *a, const char *s);
+int socket_address_parse_netlink(SocketAddress *a, const char *s);
+int socket_address_print(const SocketAddress *a, char **p);
+int socket_address_verify(const SocketAddress *a) _pure_;
+int socket_address_unlink(SocketAddress *a);
+
+bool socket_address_can_accept(const SocketAddress *a) _pure_;
+
+int socket_address_listen(
+ const SocketAddress *a,
+ int flags,
+ int backlog,
+ SocketAddressBindIPv6Only only,
+ const char *bind_to_device,
+ bool free_bind,
+ bool transparent,
+ mode_t directory_mode,
+ mode_t socket_mode,
+ const char *label);
+int make_socket_fd(int log_level, const char* address, int flags);
+
+bool socket_address_is(const SocketAddress *a, const char *s, int type);
+bool socket_address_is_netlink(const SocketAddress *a, const char *s);
+
+bool socket_address_matches_fd(const SocketAddress *a, int fd);
+
+bool socket_address_equal(const SocketAddress *a, const SocketAddress *b) _pure_;
+
+const char* socket_address_get_path(const SocketAddress *a);
+
+bool socket_ipv6_is_supported(void);
+
+int sockaddr_pretty(const struct sockaddr *_sa, socklen_t salen, bool translate_ipv6, char **ret);
+int getpeername_pretty(int fd, char **ret);
+int getsockname_pretty(int fd, char **ret);
+
+int socknameinfo_pretty(union sockaddr_union *sa, socklen_t salen, char **_ret);
+int getnameinfo_pretty(int fd, char **ret);
+
+const char* socket_address_bind_ipv6_only_to_string(SocketAddressBindIPv6Only b) _const_;
+SocketAddressBindIPv6Only socket_address_bind_ipv6_only_from_string(const char *s) _pure_;
+
+int netlink_family_to_string_alloc(int b, char **s);
+int netlink_family_from_string(const char *s) _pure_;
+
+bool sockaddr_equal(const union sockaddr_union *a, const union sockaddr_union *b);
+
+#define ETHER_ADDR_TO_STRING_MAX (3*6)
+
+char* ether_addr_to_string(const struct ether_addr *addr, char buffer[ETHER_ADDR_TO_STRING_MAX]);
diff --git a/src/dhcp-manager/systemd-dhcp/src/shared/sparse-endian.h b/src/dhcp-manager/systemd-dhcp/src/shared/sparse-endian.h
new file mode 100644
index 000000000..c913fda8c
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/shared/sparse-endian.h
@@ -0,0 +1,88 @@
+/* Copyright (c) 2012 Josh Triplett <josh@joshtriplett.org>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+#ifndef SPARSE_ENDIAN_H
+#define SPARSE_ENDIAN_H
+
+#include <byteswap.h>
+#include <endian.h>
+#include <stdint.h>
+
+#ifdef __CHECKER__
+#define __bitwise __attribute__((bitwise))
+#define __force __attribute__((force))
+#else
+#define __bitwise
+#define __force
+#endif
+
+typedef uint16_t __bitwise le16_t;
+typedef uint16_t __bitwise be16_t;
+typedef uint32_t __bitwise le32_t;
+typedef uint32_t __bitwise be32_t;
+typedef uint64_t __bitwise le64_t;
+typedef uint64_t __bitwise be64_t;
+
+#undef htobe16
+#undef htole16
+#undef be16toh
+#undef le16toh
+#undef htobe32
+#undef htole32
+#undef be32toh
+#undef le32toh
+#undef htobe64
+#undef htole64
+#undef be64toh
+#undef le64toh
+
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+#define bswap_16_on_le(x) __bswap_16(x)
+#define bswap_32_on_le(x) __bswap_32(x)
+#define bswap_64_on_le(x) __bswap_64(x)
+#define bswap_16_on_be(x) (x)
+#define bswap_32_on_be(x) (x)
+#define bswap_64_on_be(x) (x)
+#elif __BYTE_ORDER == __BIG_ENDIAN
+#define bswap_16_on_le(x) (x)
+#define bswap_32_on_le(x) (x)
+#define bswap_64_on_le(x) (x)
+#define bswap_16_on_be(x) __bswap_16(x)
+#define bswap_32_on_be(x) __bswap_32(x)
+#define bswap_64_on_be(x) __bswap_64(x)
+#endif
+
+static inline le16_t htole16(uint16_t value) { return (le16_t __force) bswap_16_on_be(value); }
+static inline le32_t htole32(uint32_t value) { return (le32_t __force) bswap_32_on_be(value); }
+static inline le64_t htole64(uint64_t value) { return (le64_t __force) bswap_64_on_be(value); }
+
+static inline be16_t htobe16(uint16_t value) { return (be16_t __force) bswap_16_on_le(value); }
+static inline be32_t htobe32(uint32_t value) { return (be32_t __force) bswap_32_on_le(value); }
+static inline be64_t htobe64(uint64_t value) { return (be64_t __force) bswap_64_on_le(value); }
+
+static inline uint16_t le16toh(le16_t value) { return bswap_16_on_be((uint16_t __force)value); }
+static inline uint32_t le32toh(le32_t value) { return bswap_32_on_be((uint32_t __force)value); }
+static inline uint64_t le64toh(le64_t value) { return bswap_64_on_be((uint64_t __force)value); }
+
+static inline uint16_t be16toh(be16_t value) { return bswap_16_on_le((uint16_t __force)value); }
+static inline uint32_t be32toh(be32_t value) { return bswap_32_on_le((uint32_t __force)value); }
+static inline uint64_t be64toh(be64_t value) { return bswap_64_on_le((uint64_t __force)value); }
+
+#endif /* SPARSE_ENDIAN_H */
diff --git a/src/dhcp-manager/systemd-dhcp/src/shared/strv.c b/src/dhcp-manager/systemd-dhcp/src/shared/strv.c
new file mode 100644
index 000000000..be2bd5110
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/shared/strv.c
@@ -0,0 +1,616 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2010 Lennart Poettering
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include "config.h"
+
+#include "nm-sd-adapt.h"
+
+#include <assert.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <errno.h>
+
+#include "util.h"
+#include "strv.h"
+
+char *strv_find(char **l, const char *name) {
+ char **i;
+
+ assert(name);
+
+ STRV_FOREACH(i, l)
+ if (streq(*i, name))
+ return *i;
+
+ return NULL;
+}
+
+char *strv_find_prefix(char **l, const char *name) {
+ char **i;
+
+ assert(name);
+
+ STRV_FOREACH(i, l)
+ if (startswith(*i, name))
+ return *i;
+
+ return NULL;
+}
+
+char *strv_find_startswith(char **l, const char *name) {
+ char **i, *e;
+
+ assert(name);
+
+ /* Like strv_find_prefix, but actually returns only the
+ * suffix, not the whole item */
+
+ STRV_FOREACH(i, l) {
+ e = startswith(*i, name);
+ if (e)
+ return e;
+ }
+
+ return NULL;
+}
+
+void strv_free(char **l) {
+ char **k;
+
+ if (!l)
+ return;
+
+ for (k = l; *k; k++)
+ free(*k);
+
+ free(l);
+}
+
+char **strv_copy(char * const *l) {
+ char **r, **k;
+
+ k = r = new(char*, strv_length(l) + 1);
+ if (!r)
+ return NULL;
+
+ if (l)
+ for (; *l; k++, l++) {
+ *k = strdup(*l);
+ if (!*k) {
+ strv_free(r);
+ return NULL;
+ }
+ }
+
+ *k = NULL;
+ return r;
+}
+
+unsigned strv_length(char * const *l) {
+ unsigned n = 0;
+
+ if (!l)
+ return 0;
+
+ for (; *l; l++)
+ n++;
+
+ return n;
+}
+
+char **strv_new_ap(const char *x, va_list ap) {
+ const char *s;
+ char **a;
+ unsigned n = 0, i = 0;
+ va_list aq;
+
+ /* As a special trick we ignore all listed strings that equal
+ * (const char*) -1. This is supposed to be used with the
+ * STRV_IFNOTNULL() macro to include possibly NULL strings in
+ * the string list. */
+
+ if (x) {
+ n = x == (const char*) -1 ? 0 : 1;
+
+ va_copy(aq, ap);
+ while ((s = va_arg(aq, const char*))) {
+ if (s == (const char*) -1)
+ continue;
+
+ n++;
+ }
+
+ va_end(aq);
+ }
+
+ a = new(char*, n+1);
+ if (!a)
+ return NULL;
+
+ if (x) {
+ if (x != (const char*) -1) {
+ a[i] = strdup(x);
+ if (!a[i])
+ goto fail;
+ i++;
+ }
+
+ while ((s = va_arg(ap, const char*))) {
+
+ if (s == (const char*) -1)
+ continue;
+
+ a[i] = strdup(s);
+ if (!a[i])
+ goto fail;
+
+ i++;
+ }
+ }
+
+ a[i] = NULL;
+
+ return a;
+
+fail:
+ strv_free(a);
+ return NULL;
+}
+
+char **strv_new(const char *x, ...) {
+ char **r;
+ va_list ap;
+
+ va_start(ap, x);
+ r = strv_new_ap(x, ap);
+ va_end(ap);
+
+ return r;
+}
+
+int strv_extend_strv(char ***a, char **b) {
+ int r;
+ char **s;
+
+ STRV_FOREACH(s, b) {
+ r = strv_extend(a, *s);
+ if (r < 0)
+ return r;
+ }
+
+ return 0;
+}
+
+int strv_extend_strv_concat(char ***a, char **b, const char *suffix) {
+ int r;
+ char **s;
+
+ STRV_FOREACH(s, b) {
+ char *v;
+
+ v = strappend(*s, suffix);
+ if (!v)
+ return -ENOMEM;
+
+ r = strv_push(a, v);
+ if (r < 0) {
+ free(v);
+ return r;
+ }
+ }
+
+ return 0;
+}
+
+char **strv_split(const char *s, const char *separator) {
+ const char *word, *state;
+ size_t l;
+ unsigned n, i;
+ char **r;
+
+ assert(s);
+
+ n = 0;
+ FOREACH_WORD_SEPARATOR(word, l, s, separator, state)
+ n++;
+
+ r = new(char*, n+1);
+ if (!r)
+ return NULL;
+
+ i = 0;
+ FOREACH_WORD_SEPARATOR(word, l, s, separator, state) {
+ r[i] = strndup(word, l);
+ if (!r[i]) {
+ strv_free(r);
+ return NULL;
+ }
+
+ i++;
+ }
+
+ r[i] = NULL;
+ return r;
+}
+
+char **strv_split_newlines(const char *s) {
+ char **l;
+ unsigned n;
+
+ assert(s);
+
+ /* Special version of strv_split() that splits on newlines and
+ * suppresses an empty string at the end */
+
+ l = strv_split(s, NEWLINE);
+ if (!l)
+ return NULL;
+
+ n = strv_length(l);
+ if (n <= 0)
+ return l;
+
+ if (isempty(l[n-1])) {
+ free(l[n-1]);
+ l[n-1] = NULL;
+ }
+
+ return l;
+}
+
+#if 0 /* NM_IGNORED */
+int strv_split_quoted(char ***t, const char *s, bool relax) {
+ size_t n = 0, allocated = 0;
+ _cleanup_strv_free_ char **l = NULL;
+ int r;
+
+ assert(t);
+ assert(s);
+
+ for (;;) {
+ _cleanup_free_ char *word = NULL;
+
+ r = unquote_first_word(&s, &word, relax);
+ if (r < 0)
+ return r;
+ if (r == 0)
+ break;
+
+ if (!GREEDY_REALLOC(l, allocated, n + 2))
+ return -ENOMEM;
+
+ l[n++] = word;
+ word = NULL;
+
+ l[n] = NULL;
+ }
+
+ if (!l)
+ l = new0(char*, 1);
+
+ *t = l;
+ l = NULL;
+
+ return 0;
+}
+#endif
+
+char *strv_join(char **l, const char *separator) {
+ char *r, *e;
+ char **s;
+ size_t n, k;
+
+ if (!separator)
+ separator = " ";
+
+ k = strlen(separator);
+
+ n = 0;
+ STRV_FOREACH(s, l) {
+ if (n != 0)
+ n += k;
+ n += strlen(*s);
+ }
+
+ r = new(char, n+1);
+ if (!r)
+ return NULL;
+
+ e = r;
+ STRV_FOREACH(s, l) {
+ if (e != r)
+ e = stpcpy(e, separator);
+
+ e = stpcpy(e, *s);
+ }
+
+ *e = 0;
+
+ return r;
+}
+
+char *strv_join_quoted(char **l) {
+ char *buf = NULL;
+ char **s;
+ size_t allocated = 0, len = 0;
+
+ STRV_FOREACH(s, l) {
+ /* assuming here that escaped string cannot be more
+ * than twice as long, and reserving space for the
+ * separator and quotes.
+ */
+ _cleanup_free_ char *esc = NULL;
+ size_t needed;
+
+ if (!GREEDY_REALLOC(buf, allocated,
+ len + strlen(*s) * 2 + 3))
+ goto oom;
+
+ esc = cescape(*s);
+ if (!esc)
+ goto oom;
+
+ needed = snprintf(buf + len, allocated - len, "%s\"%s\"",
+ len > 0 ? " " : "", esc);
+ assert(needed < allocated - len);
+ len += needed;
+ }
+
+ if (!buf)
+ buf = malloc0(1);
+
+ return buf;
+
+ oom:
+ free(buf);
+ return NULL;
+}
+
+int strv_push(char ***l, char *value) {
+ char **c;
+ unsigned n, m;
+
+ if (!value)
+ return 0;
+
+ n = strv_length(*l);
+
+ /* increase and check for overflow */
+ m = n + 2;
+ if (m < n)
+ return -ENOMEM;
+
+ c = realloc_multiply(*l, sizeof(char*), m);
+ if (!c)
+ return -ENOMEM;
+
+ c[n] = value;
+ c[n+1] = NULL;
+
+ *l = c;
+ return 0;
+}
+
+int strv_push_prepend(char ***l, char *value) {
+ char **c;
+ unsigned n, m, i;
+
+ if (!value)
+ return 0;
+
+ n = strv_length(*l);
+
+ /* increase and check for overflow */
+ m = n + 2;
+ if (m < n)
+ return -ENOMEM;
+
+ c = new(char*, m);
+ if (!c)
+ return -ENOMEM;
+
+ for (i = 0; i < n; i++)
+ c[i+1] = (*l)[i];
+
+ c[0] = value;
+ c[n+1] = NULL;
+
+ free(*l);
+ *l = c;
+
+ return 0;
+}
+
+int strv_consume(char ***l, char *value) {
+ int r;
+
+ r = strv_push(l, value);
+ if (r < 0)
+ free(value);
+
+ return r;
+}
+
+int strv_consume_prepend(char ***l, char *value) {
+ int r;
+
+ r = strv_push_prepend(l, value);
+ if (r < 0)
+ free(value);
+
+ return r;
+}
+
+int strv_extend(char ***l, const char *value) {
+ char *v;
+
+ if (!value)
+ return 0;
+
+ v = strdup(value);
+ if (!v)
+ return -ENOMEM;
+
+ return strv_consume(l, v);
+}
+
+char **strv_uniq(char **l) {
+ char **i;
+
+ /* Drops duplicate entries. The first identical string will be
+ * kept, the others dropped */
+
+ STRV_FOREACH(i, l)
+ strv_remove(i+1, *i);
+
+ return l;
+}
+
+char **strv_remove(char **l, const char *s) {
+ char **f, **t;
+
+ if (!l)
+ return NULL;
+
+ assert(s);
+
+ /* Drops every occurrence of s in the string list, edits
+ * in-place. */
+
+ for (f = t = l; *f; f++)
+ if (streq(*f, s))
+ free(*f);
+ else
+ *(t++) = *f;
+
+ *t = NULL;
+ return l;
+}
+
+char **strv_parse_nulstr(const char *s, size_t l) {
+ const char *p;
+ unsigned c = 0, i = 0;
+ char **v;
+
+ assert(s || l <= 0);
+
+ if (l <= 0)
+ return new0(char*, 1);
+
+ for (p = s; p < s + l; p++)
+ if (*p == 0)
+ c++;
+
+ if (s[l-1] != 0)
+ c++;
+
+ v = new0(char*, c+1);
+ if (!v)
+ return NULL;
+
+ p = s;
+ while (p < s + l) {
+ const char *e;
+
+ e = memchr(p, 0, s + l - p);
+
+ v[i] = strndup(p, e ? e - p : s + l - p);
+ if (!v[i]) {
+ strv_free(v);
+ return NULL;
+ }
+
+ i++;
+
+ if (!e)
+ break;
+
+ p = e + 1;
+ }
+
+ assert(i == c);
+
+ return v;
+}
+
+char **strv_split_nulstr(const char *s) {
+ const char *i;
+ char **r = NULL;
+
+ NULSTR_FOREACH(i, s)
+ if (strv_extend(&r, i) < 0) {
+ strv_free(r);
+ return NULL;
+ }
+
+ if (!r)
+ return strv_new(NULL, NULL);
+
+ return r;
+}
+
+bool strv_overlap(char **a, char **b) {
+ char **i;
+
+ STRV_FOREACH(i, a)
+ if (strv_contains(b, *i))
+ return true;
+
+ return false;
+}
+
+static int str_compare(const void *_a, const void *_b) {
+ const char **a = (const char**) _a, **b = (const char**) _b;
+
+ return strcmp(*a, *b);
+}
+
+char **strv_sort(char **l) {
+
+ if (strv_isempty(l))
+ return l;
+
+ qsort(l, strv_length(l), sizeof(char*), str_compare);
+ return l;
+}
+
+void strv_print(char **l) {
+ char **s;
+
+ STRV_FOREACH(s, l)
+ puts(*s);
+}
+
+int strv_extendf(char ***l, const char *format, ...) {
+ va_list ap;
+ char *x;
+ int r;
+
+ va_start(ap, format);
+ r = vasprintf(&x, format, ap);
+ va_end(ap);
+
+ if (r < 0)
+ return -ENOMEM;
+
+ return strv_consume(l, x);
+}
diff --git a/src/dhcp-manager/systemd-dhcp/src/shared/strv.h b/src/dhcp-manager/systemd-dhcp/src/shared/strv.h
new file mode 100644
index 000000000..47618bd26
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/shared/strv.h
@@ -0,0 +1,137 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#pragma once
+
+/***
+ This file is part of systemd.
+
+ Copyright 2010 Lennart Poettering
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <stdarg.h>
+#include <stdbool.h>
+
+#include "util.h"
+
+char *strv_find(char **l, const char *name) _pure_;
+char *strv_find_prefix(char **l, const char *name) _pure_;
+char *strv_find_startswith(char **l, const char *name) _pure_;
+
+void strv_free(char **l);
+DEFINE_TRIVIAL_CLEANUP_FUNC(char**, strv_free);
+#define _cleanup_strv_free_ _cleanup_(strv_freep)
+
+char **strv_copy(char * const *l);
+unsigned strv_length(char * const *l) _pure_;
+
+int strv_extend_strv(char ***a, char **b);
+int strv_extend_strv_concat(char ***a, char **b, const char *suffix);
+int strv_extend(char ***l, const char *value);
+int strv_extendf(char ***l, const char *format, ...) _printf_(2,0);
+int strv_push(char ***l, char *value);
+int strv_push_prepend(char ***l, char *value);
+int strv_consume(char ***l, char *value);
+int strv_consume_prepend(char ***l, char *value);
+
+char **strv_remove(char **l, const char *s);
+char **strv_uniq(char **l);
+
+#define strv_contains(l, s) (!!strv_find((l), (s)))
+
+char **strv_new(const char *x, ...) _sentinel_;
+char **strv_new_ap(const char *x, va_list ap);
+
+static inline const char* STRV_IFNOTNULL(const char *x) {
+ return x ? x : (const char *) -1;
+}
+
+static inline bool strv_isempty(char * const *l) {
+ return !l || !*l;
+}
+
+char **strv_split(const char *s, const char *separator);
+char **strv_split_newlines(const char *s);
+
+int strv_split_quoted(char ***t, const char *s, bool relax);
+
+char *strv_join(char **l, const char *separator);
+char *strv_join_quoted(char **l);
+
+char **strv_parse_nulstr(const char *s, size_t l);
+char **strv_split_nulstr(const char *s);
+
+bool strv_overlap(char **a, char **b) _pure_;
+
+#define STRV_FOREACH(s, l) \
+ for ((s) = (l); (s) && *(s); (s)++)
+
+#define STRV_FOREACH_BACKWARDS(s, l) \
+ STRV_FOREACH(s, l) \
+ ; \
+ for ((s)--; (l) && ((s) >= (l)); (s)--)
+
+#define STRV_FOREACH_PAIR(x, y, l) \
+ for ((x) = (l), (y) = (x+1); (x) && *(x) && *(y); (x) += 2, (y) = (x + 1))
+
+char **strv_sort(char **l);
+void strv_print(char **l);
+
+#define STRV_MAKE(...) ((char**) ((const char*[]) { __VA_ARGS__, NULL }))
+
+#define STRV_MAKE_EMPTY ((char*[1]) { NULL })
+
+#define strv_from_stdarg_alloca(first) \
+ ({ \
+ char **_l; \
+ \
+ if (!first) \
+ _l = (char**) &first; \
+ else { \
+ unsigned _n; \
+ va_list _ap; \
+ \
+ _n = 1; \
+ va_start(_ap, first); \
+ while (va_arg(_ap, char*)) \
+ _n++; \
+ va_end(_ap); \
+ \
+ _l = newa(char*, _n+1); \
+ _l[_n = 0] = (char*) first; \
+ va_start(_ap, first); \
+ for (;;) { \
+ _l[++_n] = va_arg(_ap, char*); \
+ if (!_l[_n]) \
+ break; \
+ } \
+ va_end(_ap); \
+ } \
+ _l; \
+ })
+
+#define STR_IN_SET(x, ...) strv_contains(STRV_MAKE(__VA_ARGS__), x)
+
+#define FOREACH_STRING(x, ...) \
+ for (char **_l = ({ \
+ char **_ll = STRV_MAKE(__VA_ARGS__); \
+ x = _ll ? _ll[0] : NULL; \
+ _ll; \
+ }); \
+ _l && *_l; \
+ x = ({ \
+ _l ++; \
+ _l[0]; \
+ }))
diff --git a/src/dhcp-manager/systemd-dhcp/src/shared/time-util.c b/src/dhcp-manager/systemd-dhcp/src/shared/time-util.c
new file mode 100644
index 000000000..c8fa1acba
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/shared/time-util.c
@@ -0,0 +1,1003 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2010 Lennart Poettering
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include "config.h"
+
+#include "nm-sd-adapt.h"
+
+#include <time.h>
+#include <string.h>
+#include <sys/timex.h>
+#include <sys/timerfd.h>
+
+#include "util.h"
+#include "time-util.h"
+#if 0 /* NM_IGNORED */
+#include "strv.h"
+#endif
+
+usec_t now(clockid_t clock_id) {
+ struct timespec ts;
+
+ assert_se(clock_gettime(clock_id, &ts) == 0);
+
+ return timespec_load(&ts);
+}
+
+dual_timestamp* dual_timestamp_get(dual_timestamp *ts) {
+ assert(ts);
+
+ ts->realtime = now(CLOCK_REALTIME);
+ ts->monotonic = now(CLOCK_MONOTONIC);
+
+ return ts;
+}
+
+dual_timestamp* dual_timestamp_from_realtime(dual_timestamp *ts, usec_t u) {
+ int64_t delta;
+ assert(ts);
+
+ if (u == USEC_INFINITY || u <= 0) {
+ ts->realtime = ts->monotonic = u;
+ return ts;
+ }
+
+ ts->realtime = u;
+
+ delta = (int64_t) now(CLOCK_REALTIME) - (int64_t) u;
+ ts->monotonic = now(CLOCK_MONOTONIC);
+
+ if ((int64_t) ts->monotonic > delta)
+ ts->monotonic -= delta;
+ else
+ ts->monotonic = 0;
+
+ return ts;
+}
+
+dual_timestamp* dual_timestamp_from_monotonic(dual_timestamp *ts, usec_t u) {
+ int64_t delta;
+ assert(ts);
+
+ if (u == USEC_INFINITY) {
+ ts->realtime = ts->monotonic = USEC_INFINITY;
+ return ts;
+ }
+
+ ts->monotonic = u;
+ delta = (int64_t) now(CLOCK_MONOTONIC) - (int64_t) u;
+
+ ts->realtime = now(CLOCK_REALTIME);
+ if ((int64_t) ts->realtime > delta)
+ ts->realtime -= delta;
+ else
+ ts->realtime = 0;
+
+ return ts;
+}
+
+usec_t timespec_load(const struct timespec *ts) {
+ assert(ts);
+
+ if (ts->tv_sec == (time_t) -1 &&
+ ts->tv_nsec == (long) -1)
+ return USEC_INFINITY;
+
+ if ((usec_t) ts->tv_sec > (UINT64_MAX - (ts->tv_nsec / NSEC_PER_USEC)) / USEC_PER_SEC)
+ return USEC_INFINITY;
+
+ return
+ (usec_t) ts->tv_sec * USEC_PER_SEC +
+ (usec_t) ts->tv_nsec / NSEC_PER_USEC;
+}
+
+struct timespec *timespec_store(struct timespec *ts, usec_t u) {
+ assert(ts);
+
+ if (u == USEC_INFINITY) {
+ ts->tv_sec = (time_t) -1;
+ ts->tv_nsec = (long) -1;
+ return ts;
+ }
+
+ ts->tv_sec = (time_t) (u / USEC_PER_SEC);
+ ts->tv_nsec = (long int) ((u % USEC_PER_SEC) * NSEC_PER_USEC);
+
+ return ts;
+}
+
+#if 0 /* NM_IGNORED */
+usec_t timeval_load(const struct timeval *tv) {
+ assert(tv);
+
+ if (tv->tv_sec == (time_t) -1 &&
+ tv->tv_usec == (suseconds_t) -1)
+ return USEC_INFINITY;
+
+ if ((usec_t) tv->tv_sec > (UINT64_MAX - tv->tv_usec) / USEC_PER_SEC)
+ return USEC_INFINITY;
+
+ return
+ (usec_t) tv->tv_sec * USEC_PER_SEC +
+ (usec_t) tv->tv_usec;
+}
+
+struct timeval *timeval_store(struct timeval *tv, usec_t u) {
+ assert(tv);
+
+ if (u == USEC_INFINITY) {
+ tv->tv_sec = (time_t) -1;
+ tv->tv_usec = (suseconds_t) -1;
+ } else {
+ tv->tv_sec = (time_t) (u / USEC_PER_SEC);
+ tv->tv_usec = (suseconds_t) (u % USEC_PER_SEC);
+ }
+
+ return tv;
+}
+
+static char *format_timestamp_internal(char *buf, size_t l, usec_t t, bool utc) {
+ struct tm tm;
+ time_t sec;
+
+ assert(buf);
+ assert(l > 0);
+
+ if (t <= 0 || t == USEC_INFINITY)
+ return NULL;
+
+ sec = (time_t) (t / USEC_PER_SEC);
+
+ if (utc)
+ gmtime_r(&sec, &tm);
+ else
+ localtime_r(&sec, &tm);
+ if (strftime(buf, l, "%a %Y-%m-%d %H:%M:%S %Z", &tm) <= 0)
+ return NULL;
+
+ return buf;
+}
+
+char *format_timestamp(char *buf, size_t l, usec_t t) {
+ return format_timestamp_internal(buf, l, t, false);
+}
+
+char *format_timestamp_utc(char *buf, size_t l, usec_t t) {
+ return format_timestamp_internal(buf, l, t, true);
+}
+
+static char *format_timestamp_internal_us(char *buf, size_t l, usec_t t, bool utc) {
+ struct tm tm;
+ time_t sec;
+
+ assert(buf);
+ assert(l > 0);
+
+ if (t <= 0 || t == USEC_INFINITY)
+ return NULL;
+
+ sec = (time_t) (t / USEC_PER_SEC);
+ if (utc)
+ gmtime_r(&sec, &tm);
+ else
+ localtime_r(&sec, &tm);
+
+ if (strftime(buf, l, "%a %Y-%m-%d %H:%M:%S", &tm) <= 0)
+ return NULL;
+ snprintf(buf + strlen(buf), l - strlen(buf), ".%06llu", (unsigned long long) (t % USEC_PER_SEC));
+ if (strftime(buf + strlen(buf), l - strlen(buf), " %Z", &tm) <= 0)
+ return NULL;
+
+ return buf;
+}
+
+char *format_timestamp_us(char *buf, size_t l, usec_t t) {
+ return format_timestamp_internal_us(buf, l, t, false);
+}
+
+char *format_timestamp_us_utc(char *buf, size_t l, usec_t t) {
+ return format_timestamp_internal_us(buf, l, t, true);
+}
+
+char *format_timestamp_relative(char *buf, size_t l, usec_t t) {
+ const char *s;
+ usec_t n, d;
+
+ if (t <= 0 || t == USEC_INFINITY)
+ return NULL;
+
+ n = now(CLOCK_REALTIME);
+ if (n > t) {
+ d = n - t;
+ s = "ago";
+ } else {
+ d = t - n;
+ s = "left";
+ }
+
+ if (d >= USEC_PER_YEAR)
+ snprintf(buf, l, USEC_FMT " years " USEC_FMT " months %s",
+ d / USEC_PER_YEAR,
+ (d % USEC_PER_YEAR) / USEC_PER_MONTH, s);
+ else if (d >= USEC_PER_MONTH)
+ snprintf(buf, l, USEC_FMT " months " USEC_FMT " days %s",
+ d / USEC_PER_MONTH,
+ (d % USEC_PER_MONTH) / USEC_PER_DAY, s);
+ else if (d >= USEC_PER_WEEK)
+ snprintf(buf, l, USEC_FMT " weeks " USEC_FMT " days %s",
+ d / USEC_PER_WEEK,
+ (d % USEC_PER_WEEK) / USEC_PER_DAY, s);
+ else if (d >= 2*USEC_PER_DAY)
+ snprintf(buf, l, USEC_FMT " days %s", d / USEC_PER_DAY, s);
+ else if (d >= 25*USEC_PER_HOUR)
+ snprintf(buf, l, "1 day " USEC_FMT "h %s",
+ (d - USEC_PER_DAY) / USEC_PER_HOUR, s);
+ else if (d >= 6*USEC_PER_HOUR)
+ snprintf(buf, l, USEC_FMT "h %s",
+ d / USEC_PER_HOUR, s);
+ else if (d >= USEC_PER_HOUR)
+ snprintf(buf, l, USEC_FMT "h " USEC_FMT "min %s",
+ d / USEC_PER_HOUR,
+ (d % USEC_PER_HOUR) / USEC_PER_MINUTE, s);
+ else if (d >= 5*USEC_PER_MINUTE)
+ snprintf(buf, l, USEC_FMT "min %s",
+ d / USEC_PER_MINUTE, s);
+ else if (d >= USEC_PER_MINUTE)
+ snprintf(buf, l, USEC_FMT "min " USEC_FMT "s %s",
+ d / USEC_PER_MINUTE,
+ (d % USEC_PER_MINUTE) / USEC_PER_SEC, s);
+ else if (d >= USEC_PER_SEC)
+ snprintf(buf, l, USEC_FMT "s %s",
+ d / USEC_PER_SEC, s);
+ else if (d >= USEC_PER_MSEC)
+ snprintf(buf, l, USEC_FMT "ms %s",
+ d / USEC_PER_MSEC, s);
+ else if (d > 0)
+ snprintf(buf, l, USEC_FMT"us %s",
+ d, s);
+ else
+ snprintf(buf, l, "now");
+
+ buf[l-1] = 0;
+ return buf;
+}
+#endif
+
+char *format_timespan(char *buf, size_t l, usec_t t, usec_t accuracy) {
+ static const struct {
+ const char *suffix;
+ usec_t usec;
+ } table[] = {
+ { "y", USEC_PER_YEAR },
+ { "month", USEC_PER_MONTH },
+ { "w", USEC_PER_WEEK },
+ { "d", USEC_PER_DAY },
+ { "h", USEC_PER_HOUR },
+ { "min", USEC_PER_MINUTE },
+ { "s", USEC_PER_SEC },
+ { "ms", USEC_PER_MSEC },
+ { "us", 1 },
+ };
+
+ unsigned i;
+ char *p = buf;
+ bool something = false;
+
+ assert(buf);
+ assert(l > 0);
+
+ if (t == USEC_INFINITY) {
+ strncpy(p, "infinity", l-1);
+ p[l-1] = 0;
+ return p;
+ }
+
+ if (t <= 0) {
+ strncpy(p, "0", l-1);
+ p[l-1] = 0;
+ return p;
+ }
+
+ /* The result of this function can be parsed with parse_sec */
+
+ for (i = 0; i < ELEMENTSOF(table); i++) {
+ int k = 0;
+ size_t n;
+ bool done = false;
+ usec_t a, b;
+
+ if (t <= 0)
+ break;
+
+ if (t < accuracy && something)
+ break;
+
+ if (t < table[i].usec)
+ continue;
+
+ if (l <= 1)
+ break;
+
+ a = t / table[i].usec;
+ b = t % table[i].usec;
+
+ /* Let's see if we should shows this in dot notation */
+ if (t < USEC_PER_MINUTE && b > 0) {
+ usec_t cc;
+ int j;
+
+ j = 0;
+ for (cc = table[i].usec; cc > 1; cc /= 10)
+ j++;
+
+ for (cc = accuracy; cc > 1; cc /= 10) {
+ b /= 10;
+ j--;
+ }
+
+ if (j > 0) {
+ k = snprintf(p, l,
+ "%s"USEC_FMT".%0*llu%s",
+ p > buf ? " " : "",
+ a,
+ j,
+ (unsigned long long) b,
+ table[i].suffix);
+
+ t = 0;
+ done = true;
+ }
+ }
+
+ /* No? Then let's show it normally */
+ if (!done) {
+ k = snprintf(p, l,
+ "%s"USEC_FMT"%s",
+ p > buf ? " " : "",
+ a,
+ table[i].suffix);
+
+ t = b;
+ }
+
+ n = MIN((size_t) k, l);
+
+ l -= n;
+ p += n;
+
+ something = true;
+ }
+
+ *p = 0;
+
+ return buf;
+}
+
+#if 0 /* NM_IGNORED */
+void dual_timestamp_serialize(FILE *f, const char *name, dual_timestamp *t) {
+
+ assert(f);
+ assert(name);
+ assert(t);
+
+ if (!dual_timestamp_is_set(t))
+ return;
+
+ fprintf(f, "%s="USEC_FMT" "USEC_FMT"\n",
+ name,
+ t->realtime,
+ t->monotonic);
+}
+
+void dual_timestamp_deserialize(const char *value, dual_timestamp *t) {
+ unsigned long long a, b;
+
+ assert(value);
+ assert(t);
+
+ if (sscanf(value, "%llu %llu", &a, &b) != 2)
+ log_debug("Failed to parse finish timestamp value %s", value);
+ else {
+ t->realtime = a;
+ t->monotonic = b;
+ }
+}
+
+int parse_timestamp(const char *t, usec_t *usec) {
+ static const struct {
+ const char *name;
+ const int nr;
+ } day_nr[] = {
+ { "Sunday", 0 },
+ { "Sun", 0 },
+ { "Monday", 1 },
+ { "Mon", 1 },
+ { "Tuesday", 2 },
+ { "Tue", 2 },
+ { "Wednesday", 3 },
+ { "Wed", 3 },
+ { "Thursday", 4 },
+ { "Thu", 4 },
+ { "Friday", 5 },
+ { "Fri", 5 },
+ { "Saturday", 6 },
+ { "Sat", 6 },
+ };
+
+ const char *k;
+ struct tm tm, copy;
+ time_t x;
+ usec_t plus = 0, minus = 0, ret;
+ int r, weekday = -1;
+ unsigned i;
+
+ /*
+ * Allowed syntaxes:
+ *
+ * 2012-09-22 16:34:22
+ * 2012-09-22 16:34 (seconds will be set to 0)
+ * 2012-09-22 (time will be set to 00:00:00)
+ * 16:34:22 (date will be set to today)
+ * 16:34 (date will be set to today, seconds to 0)
+ * now
+ * yesterday (time is set to 00:00:00)
+ * today (time is set to 00:00:00)
+ * tomorrow (time is set to 00:00:00)
+ * +5min
+ * -5days
+ * @2147483647 (seconds since epoch)
+ *
+ */
+
+ assert(t);
+ assert(usec);
+
+ x = time(NULL);
+ assert_se(localtime_r(&x, &tm));
+ tm.tm_isdst = -1;
+
+ if (streq(t, "now"))
+ goto finish;
+
+ else if (streq(t, "today")) {
+ tm.tm_sec = tm.tm_min = tm.tm_hour = 0;
+ goto finish;
+
+ } else if (streq(t, "yesterday")) {
+ tm.tm_mday --;
+ tm.tm_sec = tm.tm_min = tm.tm_hour = 0;
+ goto finish;
+
+ } else if (streq(t, "tomorrow")) {
+ tm.tm_mday ++;
+ tm.tm_sec = tm.tm_min = tm.tm_hour = 0;
+ goto finish;
+
+ } else if (t[0] == '+') {
+ r = parse_sec(t+1, &plus);
+ if (r < 0)
+ return r;
+
+ goto finish;
+
+ } else if (t[0] == '-') {
+ r = parse_sec(t+1, &minus);
+ if (r < 0)
+ return r;
+
+ goto finish;
+
+ } else if (t[0] == '@')
+ return parse_sec(t + 1, usec);
+
+ else if (endswith(t, " ago")) {
+ _cleanup_free_ char *z = strndup(t, strlen(t) - 4);
+
+ if (!z)
+ return -ENOMEM;
+
+ r = parse_sec(z, &minus);
+ if (r < 0)
+ return r;
+
+ goto finish;
+ } else if (endswith(t, " left")) {
+ _cleanup_free_ char *z = strndup(t, strlen(t) - 4);
+
+ if (!z)
+ return -ENOMEM;
+
+ r = parse_sec(z, &plus);
+ if (r < 0)
+ return r;
+
+ goto finish;
+ }
+
+ for (i = 0; i < ELEMENTSOF(day_nr); i++) {
+ size_t skip;
+
+ if (!startswith_no_case(t, day_nr[i].name))
+ continue;
+
+ skip = strlen(day_nr[i].name);
+ if (t[skip] != ' ')
+ continue;
+
+ weekday = day_nr[i].nr;
+ t += skip + 1;
+ break;
+ }
+
+ copy = tm;
+ k = strptime(t, "%y-%m-%d %H:%M:%S", &tm);
+ if (k && *k == 0)
+ goto finish;
+
+ tm = copy;
+ k = strptime(t, "%Y-%m-%d %H:%M:%S", &tm);
+ if (k && *k == 0)
+ goto finish;
+
+ tm = copy;
+ k = strptime(t, "%y-%m-%d %H:%M", &tm);
+ if (k && *k == 0) {
+ tm.tm_sec = 0;
+ goto finish;
+ }
+
+ tm = copy;
+ k = strptime(t, "%Y-%m-%d %H:%M", &tm);
+ if (k && *k == 0) {
+ tm.tm_sec = 0;
+ goto finish;
+ }
+
+ tm = copy;
+ k = strptime(t, "%y-%m-%d", &tm);
+ if (k && *k == 0) {
+ tm.tm_sec = tm.tm_min = tm.tm_hour = 0;
+ goto finish;
+ }
+
+ tm = copy;
+ k = strptime(t, "%Y-%m-%d", &tm);
+ if (k && *k == 0) {
+ tm.tm_sec = tm.tm_min = tm.tm_hour = 0;
+ goto finish;
+ }
+
+ tm = copy;
+ k = strptime(t, "%H:%M:%S", &tm);
+ if (k && *k == 0)
+ goto finish;
+
+ tm = copy;
+ k = strptime(t, "%H:%M", &tm);
+ if (k && *k == 0) {
+ tm.tm_sec = 0;
+ goto finish;
+ }
+
+ return -EINVAL;
+
+finish:
+ x = mktime(&tm);
+ if (x == (time_t) -1)
+ return -EINVAL;
+
+ if (weekday >= 0 && tm.tm_wday != weekday)
+ return -EINVAL;
+
+ ret = (usec_t) x * USEC_PER_SEC;
+
+ ret += plus;
+ if (ret > minus)
+ ret -= minus;
+ else
+ ret = 0;
+
+ *usec = ret;
+
+ return 0;
+}
+
+int parse_sec(const char *t, usec_t *usec) {
+ static const struct {
+ const char *suffix;
+ usec_t usec;
+ } table[] = {
+ { "seconds", USEC_PER_SEC },
+ { "second", USEC_PER_SEC },
+ { "sec", USEC_PER_SEC },
+ { "s", USEC_PER_SEC },
+ { "minutes", USEC_PER_MINUTE },
+ { "minute", USEC_PER_MINUTE },
+ { "min", USEC_PER_MINUTE },
+ { "months", USEC_PER_MONTH },
+ { "month", USEC_PER_MONTH },
+ { "msec", USEC_PER_MSEC },
+ { "ms", USEC_PER_MSEC },
+ { "m", USEC_PER_MINUTE },
+ { "hours", USEC_PER_HOUR },
+ { "hour", USEC_PER_HOUR },
+ { "hr", USEC_PER_HOUR },
+ { "h", USEC_PER_HOUR },
+ { "days", USEC_PER_DAY },
+ { "day", USEC_PER_DAY },
+ { "d", USEC_PER_DAY },
+ { "weeks", USEC_PER_WEEK },
+ { "week", USEC_PER_WEEK },
+ { "w", USEC_PER_WEEK },
+ { "years", USEC_PER_YEAR },
+ { "year", USEC_PER_YEAR },
+ { "y", USEC_PER_YEAR },
+ { "usec", 1ULL },
+ { "us", 1ULL },
+ { "", USEC_PER_SEC }, /* default is sec */
+ };
+
+ const char *p, *s;
+ usec_t r = 0;
+ bool something = false;
+
+ assert(t);
+ assert(usec);
+
+ p = t;
+
+ p += strspn(p, WHITESPACE);
+ s = startswith(p, "infinity");
+ if (s) {
+ s += strspn(s, WHITESPACE);
+ if (*s != 0)
+ return -EINVAL;
+
+ *usec = USEC_INFINITY;
+ return 0;
+ }
+
+ for (;;) {
+ long long l, z = 0;
+ char *e;
+ unsigned i, n = 0;
+
+ p += strspn(p, WHITESPACE);
+
+ if (*p == 0) {
+ if (!something)
+ return -EINVAL;
+
+ break;
+ }
+
+ errno = 0;
+ l = strtoll(p, &e, 10);
+
+ if (errno > 0)
+ return -errno;
+
+ if (l < 0)
+ return -ERANGE;
+
+ if (*e == '.') {
+ char *b = e + 1;
+
+ errno = 0;
+ z = strtoll(b, &e, 10);
+ if (errno > 0)
+ return -errno;
+
+ if (z < 0)
+ return -ERANGE;
+
+ if (e == b)
+ return -EINVAL;
+
+ n = e - b;
+
+ } else if (e == p)
+ return -EINVAL;
+
+ e += strspn(e, WHITESPACE);
+
+ for (i = 0; i < ELEMENTSOF(table); i++)
+ if (startswith(e, table[i].suffix)) {
+ usec_t k = (usec_t) z * table[i].usec;
+
+ for (; n > 0; n--)
+ k /= 10;
+
+ r += (usec_t) l * table[i].usec + k;
+ p = e + strlen(table[i].suffix);
+
+ something = true;
+ break;
+ }
+
+ if (i >= ELEMENTSOF(table))
+ return -EINVAL;
+
+ }
+
+ *usec = r;
+
+ return 0;
+}
+
+int parse_nsec(const char *t, nsec_t *nsec) {
+ static const struct {
+ const char *suffix;
+ nsec_t nsec;
+ } table[] = {
+ { "seconds", NSEC_PER_SEC },
+ { "second", NSEC_PER_SEC },
+ { "sec", NSEC_PER_SEC },
+ { "s", NSEC_PER_SEC },
+ { "minutes", NSEC_PER_MINUTE },
+ { "minute", NSEC_PER_MINUTE },
+ { "min", NSEC_PER_MINUTE },
+ { "months", NSEC_PER_MONTH },
+ { "month", NSEC_PER_MONTH },
+ { "msec", NSEC_PER_MSEC },
+ { "ms", NSEC_PER_MSEC },
+ { "m", NSEC_PER_MINUTE },
+ { "hours", NSEC_PER_HOUR },
+ { "hour", NSEC_PER_HOUR },
+ { "hr", NSEC_PER_HOUR },
+ { "h", NSEC_PER_HOUR },
+ { "days", NSEC_PER_DAY },
+ { "day", NSEC_PER_DAY },
+ { "d", NSEC_PER_DAY },
+ { "weeks", NSEC_PER_WEEK },
+ { "week", NSEC_PER_WEEK },
+ { "w", NSEC_PER_WEEK },
+ { "years", NSEC_PER_YEAR },
+ { "year", NSEC_PER_YEAR },
+ { "y", NSEC_PER_YEAR },
+ { "usec", NSEC_PER_USEC },
+ { "us", NSEC_PER_USEC },
+ { "nsec", 1ULL },
+ { "ns", 1ULL },
+ { "", 1ULL }, /* default is nsec */
+ };
+
+ const char *p, *s;
+ nsec_t r = 0;
+ bool something = false;
+
+ assert(t);
+ assert(nsec);
+
+ p = t;
+
+ p += strspn(p, WHITESPACE);
+ s = startswith(p, "infinity");
+ if (s) {
+ s += strspn(s, WHITESPACE);
+ if (!*s != 0)
+ return -EINVAL;
+
+ *nsec = NSEC_INFINITY;
+ return 0;
+ }
+
+ for (;;) {
+ long long l, z = 0;
+ char *e;
+ unsigned i, n = 0;
+
+ p += strspn(p, WHITESPACE);
+
+ if (*p == 0) {
+ if (!something)
+ return -EINVAL;
+
+ break;
+ }
+
+ errno = 0;
+ l = strtoll(p, &e, 10);
+
+ if (errno > 0)
+ return -errno;
+
+ if (l < 0)
+ return -ERANGE;
+
+ if (*e == '.') {
+ char *b = e + 1;
+
+ errno = 0;
+ z = strtoll(b, &e, 10);
+ if (errno > 0)
+ return -errno;
+
+ if (z < 0)
+ return -ERANGE;
+
+ if (e == b)
+ return -EINVAL;
+
+ n = e - b;
+
+ } else if (e == p)
+ return -EINVAL;
+
+ e += strspn(e, WHITESPACE);
+
+ for (i = 0; i < ELEMENTSOF(table); i++)
+ if (startswith(e, table[i].suffix)) {
+ nsec_t k = (nsec_t) z * table[i].nsec;
+
+ for (; n > 0; n--)
+ k /= 10;
+
+ r += (nsec_t) l * table[i].nsec + k;
+ p = e + strlen(table[i].suffix);
+
+ something = true;
+ break;
+ }
+
+ if (i >= ELEMENTSOF(table))
+ return -EINVAL;
+
+ }
+
+ *nsec = r;
+
+ return 0;
+}
+
+bool ntp_synced(void) {
+ struct timex txc = {};
+
+ if (adjtimex(&txc) < 0)
+ return false;
+
+ if (txc.status & STA_UNSYNC)
+ return false;
+
+ return true;
+}
+
+int get_timezones(char ***ret) {
+ _cleanup_fclose_ FILE *f = NULL;
+ _cleanup_strv_free_ char **zones = NULL;
+ size_t n_zones = 0, n_allocated = 0;
+
+ assert(ret);
+
+ zones = strv_new("UTC", NULL);
+ if (!zones)
+ return -ENOMEM;
+
+ n_allocated = 2;
+ n_zones = 1;
+
+ f = fopen("/usr/share/zoneinfo/zone.tab", "re");
+ if (f) {
+ char l[LINE_MAX];
+
+ FOREACH_LINE(l, f, return -errno) {
+ char *p, *w;
+ size_t k;
+
+ p = strstrip(l);
+
+ if (isempty(p) || *p == '#')
+ continue;
+
+ /* Skip over country code */
+ p += strcspn(p, WHITESPACE);
+ p += strspn(p, WHITESPACE);
+
+ /* Skip over coordinates */
+ p += strcspn(p, WHITESPACE);
+ p += strspn(p, WHITESPACE);
+
+ /* Found timezone name */
+ k = strcspn(p, WHITESPACE);
+ if (k <= 0)
+ continue;
+
+ w = strndup(p, k);
+ if (!w)
+ return -ENOMEM;
+
+ if (!GREEDY_REALLOC(zones, n_allocated, n_zones + 2)) {
+ free(w);
+ return -ENOMEM;
+ }
+
+ zones[n_zones++] = w;
+ zones[n_zones] = NULL;
+ }
+
+ strv_sort(zones);
+
+ } else if (errno != ENOENT)
+ return -errno;
+
+ *ret = zones;
+ zones = NULL;
+
+ return 0;
+}
+
+bool timezone_is_valid(const char *name) {
+ bool slash = false;
+ const char *p, *t;
+ struct stat st;
+
+ if (!name || *name == 0 || *name == '/')
+ return false;
+
+ for (p = name; *p; p++) {
+ if (!(*p >= '0' && *p <= '9') &&
+ !(*p >= 'a' && *p <= 'z') &&
+ !(*p >= 'A' && *p <= 'Z') &&
+ !(*p == '-' || *p == '_' || *p == '+' || *p == '/'))
+ return false;
+
+ if (*p == '/') {
+
+ if (slash)
+ return false;
+
+ slash = true;
+ } else
+ slash = false;
+ }
+
+ if (slash)
+ return false;
+
+ t = strappenda("/usr/share/zoneinfo/", name);
+ if (stat(t, &st) < 0)
+ return false;
+
+ if (!S_ISREG(st.st_mode))
+ return false;
+
+ return true;
+}
+#endif
+
+clockid_t clock_boottime_or_monotonic(void) {
+ static clockid_t clock = -1;
+ int fd;
+
+ if (clock != -1)
+ return clock;
+
+ fd = timerfd_create(CLOCK_BOOTTIME, TFD_NONBLOCK|TFD_CLOEXEC);
+ if (fd < 0)
+ clock = CLOCK_MONOTONIC;
+ else {
+ safe_close(fd);
+ clock = CLOCK_BOOTTIME;
+ }
+
+ return clock;
+}
+
diff --git a/src/dhcp-manager/systemd-dhcp/src/shared/time-util.h b/src/dhcp-manager/systemd-dhcp/src/shared/time-util.h
new file mode 100644
index 000000000..578a0c1ca
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/shared/time-util.h
@@ -0,0 +1,111 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#pragma once
+
+/***
+ This file is part of systemd.
+
+ Copyright 2010 Lennart Poettering
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <stdio.h>
+#include <inttypes.h>
+
+typedef uint64_t usec_t;
+typedef uint64_t nsec_t;
+
+#include "nm-sd-adapt.h"
+
+#define NSEC_FMT "%" PRIu64
+#define USEC_FMT "%" PRIu64
+
+#include "macro.h"
+
+typedef struct dual_timestamp {
+ usec_t realtime;
+ usec_t monotonic;
+} dual_timestamp;
+
+#define USEC_INFINITY ((usec_t) -1)
+#define NSEC_INFINITY ((nsec_t) -1)
+
+#define MSEC_PER_SEC 1000ULL
+#define USEC_PER_SEC ((usec_t) 1000000ULL)
+#define USEC_PER_MSEC ((usec_t) 1000ULL)
+#define NSEC_PER_SEC ((nsec_t) 1000000000ULL)
+#define NSEC_PER_MSEC ((nsec_t) 1000000ULL)
+#define NSEC_PER_USEC ((nsec_t) 1000ULL)
+
+#define USEC_PER_MINUTE ((usec_t) (60ULL*USEC_PER_SEC))
+#define NSEC_PER_MINUTE ((nsec_t) (60ULL*NSEC_PER_SEC))
+#define USEC_PER_HOUR ((usec_t) (60ULL*USEC_PER_MINUTE))
+#define NSEC_PER_HOUR ((nsec_t) (60ULL*NSEC_PER_MINUTE))
+#define USEC_PER_DAY ((usec_t) (24ULL*USEC_PER_HOUR))
+#define NSEC_PER_DAY ((nsec_t) (24ULL*NSEC_PER_HOUR))
+#define USEC_PER_WEEK ((usec_t) (7ULL*USEC_PER_DAY))
+#define NSEC_PER_WEEK ((nsec_t) (7ULL*NSEC_PER_DAY))
+#define USEC_PER_MONTH ((usec_t) (2629800ULL*USEC_PER_SEC))
+#define NSEC_PER_MONTH ((nsec_t) (2629800ULL*NSEC_PER_SEC))
+#define USEC_PER_YEAR ((usec_t) (31557600ULL*USEC_PER_SEC))
+#define NSEC_PER_YEAR ((nsec_t) (31557600ULL*NSEC_PER_SEC))
+
+#define FORMAT_TIMESTAMP_MAX ((4*4+1)+11+9+4+1) /* weekdays can be unicode */
+#define FORMAT_TIMESTAMP_WIDTH 28 /* when outputting, assume this width */
+#define FORMAT_TIMESTAMP_RELATIVE_MAX 256
+#define FORMAT_TIMESPAN_MAX 64
+
+#define TIME_T_MAX (time_t)((1UL << ((sizeof(time_t) << 3) - 1)) - 1)
+
+#define DUAL_TIMESTAMP_NULL ((struct dual_timestamp) { 0, 0 })
+
+usec_t now(clockid_t clock);
+
+dual_timestamp* dual_timestamp_get(dual_timestamp *ts);
+dual_timestamp* dual_timestamp_from_realtime(dual_timestamp *ts, usec_t u);
+dual_timestamp* dual_timestamp_from_monotonic(dual_timestamp *ts, usec_t u);
+
+static inline bool dual_timestamp_is_set(dual_timestamp *ts) {
+ return ((ts->realtime > 0 && ts->realtime != USEC_INFINITY) ||
+ (ts->monotonic > 0 && ts->monotonic != USEC_INFINITY));
+}
+
+usec_t timespec_load(const struct timespec *ts) _pure_;
+struct timespec *timespec_store(struct timespec *ts, usec_t u);
+
+usec_t timeval_load(const struct timeval *tv) _pure_;
+struct timeval *timeval_store(struct timeval *tv, usec_t u);
+
+char *format_timestamp(char *buf, size_t l, usec_t t);
+char *format_timestamp_utc(char *buf, size_t l, usec_t t);
+char *format_timestamp_us(char *buf, size_t l, usec_t t);
+char *format_timestamp_us_utc(char *buf, size_t l, usec_t t);
+char *format_timestamp_relative(char *buf, size_t l, usec_t t);
+char *format_timespan(char *buf, size_t l, usec_t t, usec_t accuracy);
+
+void dual_timestamp_serialize(FILE *f, const char *name, dual_timestamp *t);
+void dual_timestamp_deserialize(const char *value, dual_timestamp *t);
+
+int parse_timestamp(const char *t, usec_t *usec);
+
+int parse_sec(const char *t, usec_t *usec);
+int parse_nsec(const char *t, nsec_t *nsec);
+
+bool ntp_synced(void);
+
+int get_timezones(char ***l);
+bool timezone_is_valid(const char *name);
+
+clockid_t clock_boottime_or_monotonic(void);
diff --git a/src/dhcp-manager/systemd-dhcp/src/shared/unaligned.h b/src/dhcp-manager/systemd-dhcp/src/shared/unaligned.h
new file mode 100644
index 000000000..d6181dd9a
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/shared/unaligned.h
@@ -0,0 +1,66 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#pragma once
+
+/***
+ This file is part of systemd.
+
+ Copyright 2014 Tom Gundersen
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <stdint.h>
+
+static inline uint16_t unaligned_read_be16(const void *_u) {
+ const uint8_t *u = _u;
+
+ return (((uint16_t) u[0]) << 8) |
+ ((uint16_t) u[1]);
+}
+
+static inline uint32_t unaligned_read_be32(const void *_u) {
+ const uint8_t *u = _u;
+
+ return (((uint32_t) unaligned_read_be16(u)) << 16) |
+ ((uint32_t) unaligned_read_be16(u + 2));
+}
+
+static inline uint64_t unaligned_read_be64(const void *_u) {
+ const uint8_t *u = _u;
+
+ return (((uint64_t) unaligned_read_be32(u)) << 32) |
+ ((uint64_t) unaligned_read_be32(u + 4));
+}
+
+static inline void unaligned_write_be16(void *_u, uint16_t a) {
+ uint8_t *u = _u;
+
+ u[0] = (uint8_t) (a >> 8);
+ u[1] = (uint8_t) a;
+}
+
+static inline void unaligned_write_be32(void *_u, uint32_t a) {
+ uint8_t *u = _u;
+
+ unaligned_write_be16(u, (uint16_t) (a >> 16));
+ unaligned_write_be16(u + 2, (uint16_t) a);
+}
+
+static inline void unaligned_write_be64(void *_u, uint64_t a) {
+ uint8_t *u = _u;
+
+ unaligned_write_be32(u, (uint32_t) (a >> 32));
+ unaligned_write_be32(u + 4, (uint32_t) a);
+}
diff --git a/src/dhcp-manager/systemd-dhcp/src/shared/utf8.c b/src/dhcp-manager/systemd-dhcp/src/shared/utf8.c
new file mode 100644
index 000000000..cfedbfcb9
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/shared/utf8.c
@@ -0,0 +1,314 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2008-2011 Kay Sievers
+ Copyright 2012 Lennart Poettering
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+/* Parts of this file are based on the GLIB utf8 validation functions. The
+ * original license text follows. */
+
+/* gutf8.c - Operations on UTF-8 strings.
+ *
+ * Copyright (C) 1999 Tom Tromey
+ * Copyright (C) 2000 Red Hat, Inc.
+ *
+ * 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
+ */
+
+#include "config.h"
+
+#include "nm-sd-adapt.h"
+
+#include <errno.h>
+#include <stdlib.h>
+#include <inttypes.h>
+#include <string.h>
+#include <stdbool.h>
+
+#include "utf8.h"
+#include "util.h"
+
+static inline bool is_unicode_valid(uint32_t ch) {
+
+ if (ch >= 0x110000) /* End of unicode space */
+ return false;
+ if ((ch & 0xFFFFF800) == 0xD800) /* Reserved area for UTF-16 */
+ return false;
+ if ((ch >= 0xFDD0) && (ch <= 0xFDEF)) /* Reserved */
+ return false;
+ if ((ch & 0xFFFE) == 0xFFFE) /* BOM (Byte Order Mark) */
+ return false;
+
+ return true;
+}
+
+static bool is_unicode_control(uint32_t ch) {
+
+ /*
+ 0 to ' '-1 is the C0 range.
+ DEL=0x7F, and DEL+1 to 0x9F is C1 range.
+ '\t' is in C0 range, but more or less harmless and commonly used.
+ */
+
+ return (ch < ' ' && ch != '\t' && ch != '\n') ||
+ (0x7F <= ch && ch <= 0x9F);
+}
+
+/* count of characters used to encode one unicode char */
+static int utf8_encoded_expected_len(const char *str) {
+ unsigned char c;
+
+ assert(str);
+
+ c = (unsigned char) str[0];
+ if (c < 0x80)
+ return 1;
+ if ((c & 0xe0) == 0xc0)
+ return 2;
+ if ((c & 0xf0) == 0xe0)
+ return 3;
+ if ((c & 0xf8) == 0xf0)
+ return 4;
+ if ((c & 0xfc) == 0xf8)
+ return 5;
+ if ((c & 0xfe) == 0xfc)
+ return 6;
+
+ return 0;
+}
+
+/* decode one unicode char */
+int utf8_encoded_to_unichar(const char *str) {
+ int unichar, len, i;
+
+ assert(str);
+
+ len = utf8_encoded_expected_len(str);
+
+ switch (len) {
+ case 1:
+ return (int)str[0];
+ case 2:
+ unichar = str[0] & 0x1f;
+ break;
+ case 3:
+ unichar = (int)str[0] & 0x0f;
+ break;
+ case 4:
+ unichar = (int)str[0] & 0x07;
+ break;
+ case 5:
+ unichar = (int)str[0] & 0x03;
+ break;
+ case 6:
+ unichar = (int)str[0] & 0x01;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ for (i = 1; i < len; i++) {
+ if (((int)str[i] & 0xc0) != 0x80)
+ return -EINVAL;
+ unichar <<= 6;
+ unichar |= (int)str[i] & 0x3f;
+ }
+
+ return unichar;
+}
+
+bool utf8_is_printable_newline(const char* str, size_t length, bool newline) {
+ const uint8_t *p;
+
+ assert(str);
+
+ for (p = (const uint8_t*) str; length;) {
+ int encoded_len, val;
+
+ encoded_len = utf8_encoded_valid_unichar((const char *) p);
+ if (encoded_len < 0 ||
+ (size_t) encoded_len > length)
+ return false;
+
+ val = utf8_encoded_to_unichar((const char*) p);
+ if (val < 0 ||
+ is_unicode_control(val) ||
+ (!newline && val == '\n'))
+ return false;
+
+ length -= encoded_len;
+ p += encoded_len;
+ }
+
+ return true;
+}
+
+const char *utf8_is_valid(const char *str) {
+ const uint8_t *p;
+
+ assert(str);
+
+ for (p = (const uint8_t*) str; *p; ) {
+ int len;
+
+ len = utf8_encoded_valid_unichar((const char *)p);
+ if (len < 0)
+ return NULL;
+
+ p += len;
+ }
+
+ return str;
+}
+
+char *utf8_escape_invalid(const char *str) {
+ char *p, *s;
+
+ assert(str);
+
+ p = s = malloc(strlen(str) * 4 + 1);
+ if (!p)
+ return NULL;
+
+ while (*str) {
+ int len;
+
+ len = utf8_encoded_valid_unichar(str);
+ if (len > 0) {
+ s = mempcpy(s, str, len);
+ str += len;
+ } else {
+ s = mempcpy(s, UTF8_REPLACEMENT_CHARACTER, strlen(UTF8_REPLACEMENT_CHARACTER));
+ str += 1;
+ }
+ }
+
+ *s = '\0';
+
+ return p;
+}
+
+char *ascii_is_valid(const char *str) {
+ const char *p;
+
+ assert(str);
+
+ for (p = str; *p; p++)
+ if ((unsigned char) *p >= 128)
+ return NULL;
+
+ return (char*) str;
+}
+
+char *utf16_to_utf8(const void *s, size_t length) {
+ char *r;
+ const uint8_t *f;
+ uint8_t *t;
+
+ r = new(char, (length*3+1)/2 + 1);
+ if (!r)
+ return NULL;
+
+ t = (uint8_t*) r;
+
+ for (f = s; f < (const uint8_t*) s + length; f += 2) {
+ uint16_t c;
+
+ c = (f[1] << 8) | f[0];
+
+ if (c == 0) {
+ *t = 0;
+ return r;
+ } else if (c < 0x80) {
+ *(t++) = (uint8_t) c;
+ } else if (c < 0x800) {
+ *(t++) = (uint8_t) (0xc0 | (c >> 6));
+ *(t++) = (uint8_t) (0x80 | (c & 0x3f));
+ } else {
+ *(t++) = (uint8_t) (0xe0 | (c >> 12));
+ *(t++) = (uint8_t) (0x80 | ((c >> 6) & 0x3f));
+ *(t++) = (uint8_t) (0x80 | (c & 0x3f));
+ }
+ }
+
+ *t = 0;
+
+ return r;
+}
+
+/* expected size used to encode one unicode char */
+static int utf8_unichar_to_encoded_len(int unichar) {
+
+ if (unichar < 0x80)
+ return 1;
+ if (unichar < 0x800)
+ return 2;
+ if (unichar < 0x10000)
+ return 3;
+ if (unichar < 0x200000)
+ return 4;
+ if (unichar < 0x4000000)
+ return 5;
+
+ return 6;
+}
+
+/* validate one encoded unicode char and return its length */
+int utf8_encoded_valid_unichar(const char *str) {
+ int len, unichar, i;
+
+ assert(str);
+
+ len = utf8_encoded_expected_len(str);
+ if (len == 0)
+ return -EINVAL;
+
+ /* ascii is valid */
+ if (len == 1)
+ return 1;
+
+ /* check if expected encoded chars are available */
+ for (i = 0; i < len; i++)
+ if ((str[i] & 0x80) != 0x80)
+ return -EINVAL;
+
+ unichar = utf8_encoded_to_unichar(str);
+
+ /* check if encoded length matches encoded value */
+ if (utf8_unichar_to_encoded_len(unichar) != len)
+ return -EINVAL;
+
+ /* check if value has valid range */
+ if (!is_unicode_valid(unichar))
+ return -EINVAL;
+
+ return len;
+}
diff --git a/src/dhcp-manager/systemd-dhcp/src/shared/utf8.h b/src/dhcp-manager/systemd-dhcp/src/shared/utf8.h
new file mode 100644
index 000000000..c08799593
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/shared/utf8.h
@@ -0,0 +1,42 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#pragma once
+
+/***
+ This file is part of systemd.
+
+ Copyright 2012 Lennart Poettering
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <stdbool.h>
+
+#include "macro.h"
+
+#define UTF8_REPLACEMENT_CHARACTER "\xef\xbf\xbd"
+
+const char *utf8_is_valid(const char *s) _pure_;
+char *ascii_is_valid(const char *s) _pure_;
+char *utf8_escape_invalid(const char *s);
+
+bool utf8_is_printable_newline(const char* str, size_t length, bool newline) _pure_;
+_pure_ static inline bool utf8_is_printable(const char* str, size_t length) {
+ return utf8_is_printable_newline(str, length, true);
+}
+
+char *utf16_to_utf8(const void *s, size_t length);
+
+int utf8_encoded_valid_unichar(const char *str);
+int utf8_encoded_to_unichar(const char *str);
diff --git a/src/dhcp-manager/systemd-dhcp/src/shared/util.c b/src/dhcp-manager/systemd-dhcp/src/shared/util.c
new file mode 100644
index 000000000..05d4eb757
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/shared/util.c
@@ -0,0 +1,7350 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2010 Lennart Poettering
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include "config.h"
+
+#include "nm-sd-adapt.h"
+
+#include <assert.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <signal.h>
+#include <stdio.h>
+#include <syslog.h>
+#include <sched.h>
+#include <sys/resource.h>
+#include <linux/sched.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <sys/ioctl.h>
+#include <linux/vt.h>
+#include <linux/tiocl.h>
+#include <termios.h>
+#include <stdarg.h>
+#include <sys/inotify.h>
+#include <sys/poll.h>
+#include <ctype.h>
+#include <sys/prctl.h>
+#include <sys/utsname.h>
+#include <pwd.h>
+#include <netinet/ip.h>
+#include <linux/kd.h>
+#include <dlfcn.h>
+#include <sys/wait.h>
+#include <sys/time.h>
+#include <glob.h>
+#include <grp.h>
+#include <sys/mman.h>
+#include <sys/vfs.h>
+#include <sys/mount.h>
+#include <linux/magic.h>
+#include <limits.h>
+#include <langinfo.h>
+#include <locale.h>
+#include <sys/personality.h>
+#include <libgen.h>
+#undef basename
+
+#ifdef HAVE_SYS_AUXV_H
+#include <sys/auxv.h>
+#endif
+
+#include "macro.h"
+#include "util.h"
+#if 0 /* NM_IGNORED */
+#include "ioprio.h"
+#include "missing.h"
+#include "log.h"
+#include "strv.h"
+#include "label.h"
+#include "mkdir.h"
+#include "path-util.h"
+#include "exit-status.h"
+#include "hashmap.h"
+#include "env-util.h"
+#include "fileio.h"
+#include "device-nodes.h"
+#include "utf8.h"
+#include "gunicode.h"
+#include "virt.h"
+#include "def.h"
+#endif
+
+#if 0 /* NM_IGNORED */
+int saved_argc = 0;
+char **saved_argv = NULL;
+
+static volatile unsigned cached_columns = 0;
+static volatile unsigned cached_lines = 0;
+
+size_t page_size(void) {
+ static thread_local size_t pgsz = 0;
+ long r;
+
+ if (_likely_(pgsz > 0))
+ return pgsz;
+
+ r = sysconf(_SC_PAGESIZE);
+ assert(r > 0);
+
+ pgsz = (size_t) r;
+ return pgsz;
+}
+#endif
+
+bool streq_ptr(const char *a, const char *b) {
+
+ /* Like streq(), but tries to make sense of NULL pointers */
+
+ if (a && b)
+ return streq(a, b);
+
+ if (!a && !b)
+ return true;
+
+ return false;
+}
+
+char* endswith(const char *s, const char *postfix) {
+ size_t sl, pl;
+
+ assert(s);
+ assert(postfix);
+
+ sl = strlen(s);
+ pl = strlen(postfix);
+
+ if (pl == 0)
+ return (char*) s + sl;
+
+ if (sl < pl)
+ return NULL;
+
+ if (memcmp(s + sl - pl, postfix, pl) != 0)
+ return NULL;
+
+ return (char*) s + sl - pl;
+}
+
+char* first_word(const char *s, const char *word) {
+ size_t sl, wl;
+ const char *p;
+
+ assert(s);
+ assert(word);
+
+ /* Checks if the string starts with the specified word, either
+ * followed by NUL or by whitespace. Returns a pointer to the
+ * NUL or the first character after the whitespace. */
+
+ sl = strlen(s);
+ wl = strlen(word);
+
+ if (sl < wl)
+ return NULL;
+
+ if (wl == 0)
+ return (char*) s;
+
+ if (memcmp(s, word, wl) != 0)
+ return NULL;
+
+ p = s + wl;
+ if (*p == 0)
+ return (char*) p;
+
+ if (!strchr(WHITESPACE, *p))
+ return NULL;
+
+ p += strspn(p, WHITESPACE);
+ return (char*) p;
+}
+
+int close_nointr(int fd) {
+ assert(fd >= 0);
+
+ if (close(fd) >= 0)
+ return 0;
+
+ /*
+ * Just ignore EINTR; a retry loop is the wrong thing to do on
+ * Linux.
+ *
+ * http://lkml.indiana.edu/hypermail/linux/kernel/0509.1/0877.html
+ * https://bugzilla.gnome.org/show_bug.cgi?id=682819
+ * http://utcc.utoronto.ca/~cks/space/blog/unix/CloseEINTR
+ * https://sites.google.com/site/michaelsafyan/software-engineering/checkforeintrwheninvokingclosethinkagain
+ */
+ if (errno == EINTR)
+ return 0;
+
+ return -errno;
+}
+
+int safe_close(int fd) {
+
+ /*
+ * Like close_nointr() but cannot fail. Guarantees errno is
+ * unchanged. Is a NOP with negative fds passed, and returns
+ * -1, so that it can be used in this syntax:
+ *
+ * fd = safe_close(fd);
+ */
+
+ if (fd >= 0) {
+ PROTECT_ERRNO;
+
+ /* The kernel might return pretty much any error code
+ * via close(), but the fd will be closed anyway. The
+ * only condition we want to check for here is whether
+ * the fd was invalid at all... */
+
+ assert_se(close_nointr(fd) != -EBADF);
+ }
+
+ return -1;
+}
+
+#if 0 /* NM_IGNORED */
+void close_many(const int fds[], unsigned n_fd) {
+ unsigned i;
+
+ assert(fds || n_fd <= 0);
+
+ for (i = 0; i < n_fd; i++)
+ safe_close(fds[i]);
+}
+
+int unlink_noerrno(const char *path) {
+ PROTECT_ERRNO;
+ int r;
+
+ r = unlink(path);
+ if (r < 0)
+ return -errno;
+
+ return 0;
+}
+
+int parse_boolean(const char *v) {
+ assert(v);
+
+ if (streq(v, "1") || strcaseeq(v, "yes") || strcaseeq(v, "y") || strcaseeq(v, "true") || strcaseeq(v, "t") || strcaseeq(v, "on"))
+ return 1;
+ else if (streq(v, "0") || strcaseeq(v, "no") || strcaseeq(v, "n") || strcaseeq(v, "false") || strcaseeq(v, "f") || strcaseeq(v, "off"))
+ return 0;
+
+ return -EINVAL;
+}
+
+int parse_pid(const char *s, pid_t* ret_pid) {
+ unsigned long ul = 0;
+ pid_t pid;
+ int r;
+
+ assert(s);
+ assert(ret_pid);
+
+ r = safe_atolu(s, &ul);
+ if (r < 0)
+ return r;
+
+ pid = (pid_t) ul;
+
+ if ((unsigned long) pid != ul)
+ return -ERANGE;
+
+ if (pid <= 0)
+ return -ERANGE;
+
+ *ret_pid = pid;
+ return 0;
+}
+
+int parse_uid(const char *s, uid_t* ret_uid) {
+ unsigned long ul = 0;
+ uid_t uid;
+ int r;
+
+ assert(s);
+ assert(ret_uid);
+
+ r = safe_atolu(s, &ul);
+ if (r < 0)
+ return r;
+
+ uid = (uid_t) ul;
+
+ if ((unsigned long) uid != ul)
+ return -ERANGE;
+
+ /* Some libc APIs use (uid_t) -1 as special placeholder */
+ if (uid == (uid_t) 0xFFFFFFFF)
+ return -ENXIO;
+
+ /* A long time ago UIDs where 16bit, hence explicitly avoid the 16bit -1 too */
+ if (uid == (uid_t) 0xFFFF)
+ return -ENXIO;
+
+ *ret_uid = uid;
+ return 0;
+}
+#endif
+
+int safe_atou(const char *s, unsigned *ret_u) {
+ char *x = NULL;
+ unsigned long l;
+
+ assert(s);
+ assert(ret_u);
+
+ errno = 0;
+ l = strtoul(s, &x, 0);
+
+ if (!x || x == s || *x || errno)
+ return errno > 0 ? -errno : -EINVAL;
+
+ if ((unsigned long) (unsigned) l != l)
+ return -ERANGE;
+
+ *ret_u = (unsigned) l;
+ return 0;
+}
+
+#if 0 /* NM_IGNORED */
+int safe_atoi(const char *s, int *ret_i) {
+ char *x = NULL;
+ long l;
+
+ assert(s);
+ assert(ret_i);
+
+ errno = 0;
+ l = strtol(s, &x, 0);
+
+ if (!x || x == s || *x || errno)
+ return errno > 0 ? -errno : -EINVAL;
+
+ if ((long) (int) l != l)
+ return -ERANGE;
+
+ *ret_i = (int) l;
+ return 0;
+}
+
+int safe_atou8(const char *s, uint8_t *ret) {
+ char *x = NULL;
+ unsigned long l;
+
+ assert(s);
+ assert(ret);
+
+ errno = 0;
+ l = strtoul(s, &x, 0);
+
+ if (!x || x == s || *x || errno)
+ return errno > 0 ? -errno : -EINVAL;
+
+ if ((unsigned long) (uint8_t) l != l)
+ return -ERANGE;
+
+ *ret = (uint8_t) l;
+ return 0;
+}
+
+int safe_atou16(const char *s, uint16_t *ret) {
+ char *x = NULL;
+ unsigned long l;
+
+ assert(s);
+ assert(ret);
+
+ errno = 0;
+ l = strtoul(s, &x, 0);
+
+ if (!x || x == s || *x || errno)
+ return errno > 0 ? -errno : -EINVAL;
+
+ if ((unsigned long) (uint16_t) l != l)
+ return -ERANGE;
+
+ *ret = (uint16_t) l;
+ return 0;
+}
+
+int safe_atoi16(const char *s, int16_t *ret) {
+ char *x = NULL;
+ long l;
+
+ assert(s);
+ assert(ret);
+
+ errno = 0;
+ l = strtol(s, &x, 0);
+
+ if (!x || x == s || *x || errno)
+ return errno > 0 ? -errno : -EINVAL;
+
+ if ((long) (int16_t) l != l)
+ return -ERANGE;
+
+ *ret = (int16_t) l;
+ return 0;
+}
+
+int safe_atollu(const char *s, long long unsigned *ret_llu) {
+ char *x = NULL;
+ unsigned long long l;
+
+ assert(s);
+ assert(ret_llu);
+
+ errno = 0;
+ l = strtoull(s, &x, 0);
+
+ if (!x || x == s || *x || errno)
+ return errno ? -errno : -EINVAL;
+
+ *ret_llu = l;
+ return 0;
+}
+
+int safe_atolli(const char *s, long long int *ret_lli) {
+ char *x = NULL;
+ long long l;
+
+ assert(s);
+ assert(ret_lli);
+
+ errno = 0;
+ l = strtoll(s, &x, 0);
+
+ if (!x || x == s || *x || errno)
+ return errno ? -errno : -EINVAL;
+
+ *ret_lli = l;
+ return 0;
+}
+
+int safe_atod(const char *s, double *ret_d) {
+ char *x = NULL;
+ double d = 0;
+
+ assert(s);
+ assert(ret_d);
+
+ RUN_WITH_LOCALE(LC_NUMERIC_MASK, "C") {
+ errno = 0;
+ d = strtod(s, &x);
+ }
+
+ if (!x || x == s || *x || errno)
+ return errno ? -errno : -EINVAL;
+
+ *ret_d = (double) d;
+ return 0;
+}
+#endif
+
+static size_t strcspn_escaped(const char *s, const char *reject) {
+ bool escaped = false;
+ size_t n;
+
+ for (n=0; s[n]; n++) {
+ if (escaped)
+ escaped = false;
+ else if (s[n] == '\\')
+ escaped = true;
+ else if (strchr(reject, s[n]))
+ break;
+ }
+ /* if s ends in \, return index of previous char */
+ return n - escaped;
+}
+
+/* Split a string into words. */
+const char* split(const char **state, size_t *l, const char *separator, bool quoted) {
+ const char *current;
+
+ current = *state;
+
+ if (!*current) {
+ assert(**state == '\0');
+ return NULL;
+ }
+
+ current += strspn(current, separator);
+ if (!*current) {
+ *state = current;
+ return NULL;
+ }
+
+ if (quoted && strchr("\'\"", *current)) {
+ char quotechars[2] = {*current, '\0'};
+
+ *l = strcspn_escaped(current + 1, quotechars);
+ if (current[*l + 1] == '\0' ||
+ (current[*l + 2] && !strchr(separator, current[*l + 2]))) {
+ /* right quote missing or garbage at the end*/
+ *state = current;
+ return NULL;
+ }
+ assert(current[*l + 1] == quotechars[0]);
+ *state = current++ + *l + 2;
+ } else if (quoted) {
+ *l = strcspn_escaped(current, separator);
+ *state = current + *l;
+ } else {
+ *l = strcspn(current, separator);
+ *state = current + *l;
+ }
+
+ return current;
+}
+
+#if 0 /* NM_IGNORED */
+int get_parent_of_pid(pid_t pid, pid_t *_ppid) {
+ int r;
+ _cleanup_free_ char *line = NULL;
+ long unsigned ppid;
+ const char *p;
+
+ assert(pid >= 0);
+ assert(_ppid);
+
+ if (pid == 0) {
+ *_ppid = getppid();
+ return 0;
+ }
+
+ p = procfs_file_alloca(pid, "stat");
+ r = read_one_line_file(p, &line);
+ if (r < 0)
+ return r;
+
+ /* Let's skip the pid and comm fields. The latter is enclosed
+ * in () but does not escape any () in its value, so let's
+ * skip over it manually */
+
+ p = strrchr(line, ')');
+ if (!p)
+ return -EIO;
+
+ p++;
+
+ if (sscanf(p, " "
+ "%*c " /* state */
+ "%lu ", /* ppid */
+ &ppid) != 1)
+ return -EIO;
+
+ if ((long unsigned) (pid_t) ppid != ppid)
+ return -ERANGE;
+
+ *_ppid = (pid_t) ppid;
+
+ return 0;
+}
+
+int get_starttime_of_pid(pid_t pid, unsigned long long *st) {
+ int r;
+ _cleanup_free_ char *line = NULL;
+ const char *p;
+
+ assert(pid >= 0);
+ assert(st);
+
+ p = procfs_file_alloca(pid, "stat");
+ r = read_one_line_file(p, &line);
+ if (r < 0)
+ return r;
+
+ /* Let's skip the pid and comm fields. The latter is enclosed
+ * in () but does not escape any () in its value, so let's
+ * skip over it manually */
+
+ p = strrchr(line, ')');
+ if (!p)
+ return -EIO;
+
+ p++;
+
+ if (sscanf(p, " "
+ "%*c " /* state */
+ "%*d " /* ppid */
+ "%*d " /* pgrp */
+ "%*d " /* session */
+ "%*d " /* tty_nr */
+ "%*d " /* tpgid */
+ "%*u " /* flags */
+ "%*u " /* minflt */
+ "%*u " /* cminflt */
+ "%*u " /* majflt */
+ "%*u " /* cmajflt */
+ "%*u " /* utime */
+ "%*u " /* stime */
+ "%*d " /* cutime */
+ "%*d " /* cstime */
+ "%*d " /* priority */
+ "%*d " /* nice */
+ "%*d " /* num_threads */
+ "%*d " /* itrealvalue */
+ "%llu " /* starttime */,
+ st) != 1)
+ return -EIO;
+
+ return 0;
+}
+#endif
+
+int fchmod_umask(int fd, mode_t m) {
+ mode_t u;
+ int r;
+
+ u = umask(0777);
+ r = fchmod(fd, m & (~u)) < 0 ? -errno : 0;
+ umask(u);
+
+ return r;
+}
+
+char *truncate_nl(char *s) {
+ assert(s);
+
+ s[strcspn(s, NEWLINE)] = 0;
+ return s;
+}
+
+#if 0 /* NM_IGNORED */
+int get_process_state(pid_t pid) {
+ const char *p;
+ char state;
+ int r;
+ _cleanup_free_ char *line = NULL;
+
+ assert(pid >= 0);
+
+ p = procfs_file_alloca(pid, "stat");
+ r = read_one_line_file(p, &line);
+ if (r < 0)
+ return r;
+
+ p = strrchr(line, ')');
+ if (!p)
+ return -EIO;
+
+ p++;
+
+ if (sscanf(p, " %c", &state) != 1)
+ return -EIO;
+
+ return (unsigned char) state;
+}
+
+int get_process_comm(pid_t pid, char **name) {
+ const char *p;
+ int r;
+
+ assert(name);
+ assert(pid >= 0);
+
+ p = procfs_file_alloca(pid, "comm");
+
+ r = read_one_line_file(p, name);
+ if (r == -ENOENT)
+ return -ESRCH;
+
+ return r;
+}
+
+int get_process_cmdline(pid_t pid, size_t max_length, bool comm_fallback, char **line) {
+ _cleanup_fclose_ FILE *f = NULL;
+ char *r = NULL, *k;
+ const char *p;
+ int c;
+
+ assert(line);
+ assert(pid >= 0);
+
+ p = procfs_file_alloca(pid, "cmdline");
+
+ f = fopen(p, "re");
+ if (!f)
+ return -errno;
+
+ if (max_length == 0) {
+ size_t len = 0, allocated = 0;
+
+ while ((c = getc(f)) != EOF) {
+
+ if (!GREEDY_REALLOC(r, allocated, len+2)) {
+ free(r);
+ return -ENOMEM;
+ }
+
+ r[len++] = isprint(c) ? c : ' ';
+ }
+
+ if (len > 0)
+ r[len-1] = 0;
+
+ } else {
+ bool space = false;
+ size_t left;
+
+ r = new(char, max_length);
+ if (!r)
+ return -ENOMEM;
+
+ k = r;
+ left = max_length;
+ while ((c = getc(f)) != EOF) {
+
+ if (isprint(c)) {
+ if (space) {
+ if (left <= 4)
+ break;
+
+ *(k++) = ' ';
+ left--;
+ space = false;
+ }
+
+ if (left <= 4)
+ break;
+
+ *(k++) = (char) c;
+ left--;
+ } else
+ space = true;
+ }
+
+ if (left <= 4) {
+ size_t n = MIN(left-1, 3U);
+ memcpy(k, "...", n);
+ k[n] = 0;
+ } else
+ *k = 0;
+ }
+
+ /* Kernel threads have no argv[] */
+ if (isempty(r)) {
+ _cleanup_free_ char *t = NULL;
+ int h;
+
+ free(r);
+
+ if (!comm_fallback)
+ return -ENOENT;
+
+ h = get_process_comm(pid, &t);
+ if (h < 0)
+ return h;
+
+ r = strjoin("[", t, "]", NULL);
+ if (!r)
+ return -ENOMEM;
+ }
+
+ *line = r;
+ return 0;
+}
+
+int is_kernel_thread(pid_t pid) {
+ const char *p;
+ size_t count;
+ char c;
+ bool eof;
+ FILE *f;
+
+ if (pid == 0)
+ return 0;
+
+ assert(pid > 0);
+
+ p = procfs_file_alloca(pid, "cmdline");
+ f = fopen(p, "re");
+ if (!f)
+ return -errno;
+
+ count = fread(&c, 1, 1, f);
+ eof = feof(f);
+ fclose(f);
+
+ /* Kernel threads have an empty cmdline */
+
+ if (count <= 0)
+ return eof ? 1 : -errno;
+
+ return 0;
+}
+
+int get_process_capeff(pid_t pid, char **capeff) {
+ const char *p;
+
+ assert(capeff);
+ assert(pid >= 0);
+
+ p = procfs_file_alloca(pid, "status");
+
+ return get_status_field(p, "\nCapEff:", capeff);
+}
+
+int get_process_exe(pid_t pid, char **name) {
+ const char *p;
+ char *d;
+ int r;
+
+ assert(pid >= 0);
+ assert(name);
+
+ p = procfs_file_alloca(pid, "exe");
+
+ r = readlink_malloc(p, name);
+ if (r < 0)
+ return r == -ENOENT ? -ESRCH : r;
+
+ d = endswith(*name, " (deleted)");
+ if (d)
+ *d = '\0';
+
+ return 0;
+}
+
+static int get_process_id(pid_t pid, const char *field, uid_t *uid) {
+ _cleanup_fclose_ FILE *f = NULL;
+ char line[LINE_MAX];
+ const char *p;
+
+ assert(field);
+ assert(uid);
+
+ if (pid == 0)
+ return getuid();
+
+ p = procfs_file_alloca(pid, "status");
+ f = fopen(p, "re");
+ if (!f)
+ return -errno;
+
+ FOREACH_LINE(line, f, return -errno) {
+ char *l;
+
+ l = strstrip(line);
+
+ if (startswith(l, field)) {
+ l += strlen(field);
+ l += strspn(l, WHITESPACE);
+
+ l[strcspn(l, WHITESPACE)] = 0;
+
+ return parse_uid(l, uid);
+ }
+ }
+
+ return -EIO;
+}
+
+int get_process_uid(pid_t pid, uid_t *uid) {
+ return get_process_id(pid, "Uid:", uid);
+}
+
+int get_process_gid(pid_t pid, gid_t *gid) {
+ assert_cc(sizeof(uid_t) == sizeof(gid_t));
+ return get_process_id(pid, "Gid:", gid);
+}
+#endif
+
+char *strnappend(const char *s, const char *suffix, size_t b) {
+ size_t a;
+ char *r;
+
+ if (!s && !suffix)
+ return strdup("");
+
+ if (!s)
+ return strndup(suffix, b);
+
+ if (!suffix)
+ return strdup(s);
+
+ assert(s);
+ assert(suffix);
+
+ a = strlen(s);
+ if (b > ((size_t) -1) - a)
+ return NULL;
+
+ r = new(char, a+b+1);
+ if (!r)
+ return NULL;
+
+ memcpy(r, s, a);
+ memcpy(r+a, suffix, b);
+ r[a+b] = 0;
+
+ return r;
+}
+
+char *strappend(const char *s, const char *suffix) {
+ return strnappend(s, suffix, suffix ? strlen(suffix) : 0);
+}
+
+#if 0 /* NM_IGNORED */
+int readlinkat_malloc(int fd, const char *p, char **ret) {
+ size_t l = 100;
+ int r;
+
+ assert(p);
+ assert(ret);
+
+ for (;;) {
+ char *c;
+ ssize_t n;
+
+ c = new(char, l);
+ if (!c)
+ return -ENOMEM;
+
+ n = readlinkat(fd, p, c, l-1);
+ if (n < 0) {
+ r = -errno;
+ free(c);
+ return r;
+ }
+
+ if ((size_t) n < l-1) {
+ c[n] = 0;
+ *ret = c;
+ return 0;
+ }
+
+ free(c);
+ l *= 2;
+ }
+}
+
+int readlink_malloc(const char *p, char **ret) {
+ return readlinkat_malloc(AT_FDCWD, p, ret);
+}
+
+int readlink_value(const char *p, char **ret) {
+ _cleanup_free_ char *link = NULL;
+ char *value;
+ int r;
+
+ r = readlink_malloc(p, &link);
+ if (r < 0)
+ return r;
+
+ value = basename(link);
+ if (!value)
+ return -ENOENT;
+
+ value = strdup(value);
+ if (!value)
+ return -ENOMEM;
+
+ *ret = value;
+
+ return 0;
+}
+
+int readlink_and_make_absolute(const char *p, char **r) {
+ _cleanup_free_ char *target = NULL;
+ char *k;
+ int j;
+
+ assert(p);
+ assert(r);
+
+ j = readlink_malloc(p, &target);
+ if (j < 0)
+ return j;
+
+ k = file_in_same_dir(p, target);
+ if (!k)
+ return -ENOMEM;
+
+ *r = k;
+ return 0;
+}
+
+int readlink_and_canonicalize(const char *p, char **r) {
+ char *t, *s;
+ int j;
+
+ assert(p);
+ assert(r);
+
+ j = readlink_and_make_absolute(p, &t);
+ if (j < 0)
+ return j;
+
+ s = canonicalize_file_name(t);
+ if (s) {
+ free(t);
+ *r = s;
+ } else
+ *r = t;
+
+ path_kill_slashes(*r);
+
+ return 0;
+}
+
+int reset_all_signal_handlers(void) {
+ int sig, r = 0;
+
+ for (sig = 1; sig < _NSIG; sig++) {
+ struct sigaction sa = {
+ .sa_handler = SIG_DFL,
+ .sa_flags = SA_RESTART,
+ };
+
+ /* These two cannot be caught... */
+ if (sig == SIGKILL || sig == SIGSTOP)
+ continue;
+
+ /* On Linux the first two RT signals are reserved by
+ * glibc, and sigaction() will return EINVAL for them. */
+ if ((sigaction(sig, &sa, NULL) < 0))
+ if (errno != EINVAL && r == 0)
+ r = -errno;
+ }
+
+ return r;
+}
+
+int reset_signal_mask(void) {
+ sigset_t ss;
+
+ if (sigemptyset(&ss) < 0)
+ return -errno;
+
+ if (sigprocmask(SIG_SETMASK, &ss, NULL) < 0)
+ return -errno;
+
+ return 0;
+}
+#endif
+
+char *strstrip(char *s) {
+ char *e;
+
+ /* Drops trailing whitespace. Modifies the string in
+ * place. Returns pointer to first non-space character */
+
+ s += strspn(s, WHITESPACE);
+
+ for (e = strchr(s, 0); e > s; e --)
+ if (!strchr(WHITESPACE, e[-1]))
+ break;
+
+ *e = 0;
+
+ return s;
+}
+
+#if 0 /* NM_IGNORED */
+char *delete_chars(char *s, const char *bad) {
+ char *f, *t;
+
+ /* Drops all whitespace, regardless where in the string */
+
+ for (f = s, t = s; *f; f++) {
+ if (strchr(bad, *f))
+ continue;
+
+ *(t++) = *f;
+ }
+
+ *t = 0;
+
+ return s;
+}
+
+char *file_in_same_dir(const char *path, const char *filename) {
+ char *e, *r;
+ size_t k;
+
+ assert(path);
+ assert(filename);
+
+ /* This removes the last component of path and appends
+ * filename, unless the latter is absolute anyway or the
+ * former isn't */
+
+ if (path_is_absolute(filename))
+ return strdup(filename);
+
+ if (!(e = strrchr(path, '/')))
+ return strdup(filename);
+
+ k = strlen(filename);
+ if (!(r = new(char, e-path+1+k+1)))
+ return NULL;
+
+ memcpy(r, path, e-path+1);
+ memcpy(r+(e-path)+1, filename, k+1);
+
+ return r;
+}
+
+int rmdir_parents(const char *path, const char *stop) {
+ size_t l;
+ int r = 0;
+
+ assert(path);
+ assert(stop);
+
+ l = strlen(path);
+
+ /* Skip trailing slashes */
+ while (l > 0 && path[l-1] == '/')
+ l--;
+
+ while (l > 0) {
+ char *t;
+
+ /* Skip last component */
+ while (l > 0 && path[l-1] != '/')
+ l--;
+
+ /* Skip trailing slashes */
+ while (l > 0 && path[l-1] == '/')
+ l--;
+
+ if (l <= 0)
+ break;
+
+ if (!(t = strndup(path, l)))
+ return -ENOMEM;
+
+ if (path_startswith(stop, t)) {
+ free(t);
+ return 0;
+ }
+
+ r = rmdir(t);
+ free(t);
+
+ if (r < 0)
+ if (errno != ENOENT)
+ return -errno;
+ }
+
+ return 0;
+}
+#endif
+
+char hexchar(int x) {
+ static const char table[16] = "0123456789abcdef";
+
+ return table[x & 15];
+}
+
+int unhexchar(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 -EINVAL;
+}
+
+char *hexmem(const void *p, size_t l) {
+ char *r, *z;
+ const uint8_t *x;
+
+ z = r = malloc(l * 2 + 1);
+ if (!r)
+ return NULL;
+
+ for (x = p; x < (const uint8_t*) p + l; x++) {
+ *(z++) = hexchar(*x >> 4);
+ *(z++) = hexchar(*x & 15);
+ }
+
+ *z = 0;
+ return r;
+}
+
+void *unhexmem(const char *p, size_t l) {
+ uint8_t *r, *z;
+ const char *x;
+
+ assert(p);
+
+ z = r = malloc((l + 1) / 2 + 1);
+ if (!r)
+ return NULL;
+
+ for (x = p; x < p + l; x += 2) {
+ int a, b;
+
+ a = unhexchar(x[0]);
+ if (x+1 < p + l)
+ b = unhexchar(x[1]);
+ else
+ b = 0;
+
+ *(z++) = (uint8_t) a << 4 | (uint8_t) b;
+ }
+
+ *z = 0;
+ return r;
+}
+
+char octchar(int x) {
+ return '0' + (x & 7);
+}
+
+int unoctchar(char c) {
+
+ if (c >= '0' && c <= '7')
+ return c - '0';
+
+ return -EINVAL;
+}
+
+char decchar(int x) {
+ return '0' + (x % 10);
+}
+
+int undecchar(char c) {
+
+ if (c >= '0' && c <= '9')
+ return c - '0';
+
+ return -EINVAL;
+}
+
+char *cescape(const char *s) {
+ char *r, *t;
+ const char *f;
+
+ assert(s);
+
+ /* Does C style string escaping. */
+
+ r = new(char, strlen(s)*4 + 1);
+ if (!r)
+ return NULL;
+
+ for (f = s, t = r; *f; f++)
+
+ switch (*f) {
+
+ case '\a':
+ *(t++) = '\\';
+ *(t++) = 'a';
+ break;
+ case '\b':
+ *(t++) = '\\';
+ *(t++) = 'b';
+ break;
+ case '\f':
+ *(t++) = '\\';
+ *(t++) = 'f';
+ break;
+ case '\n':
+ *(t++) = '\\';
+ *(t++) = 'n';
+ break;
+ case '\r':
+ *(t++) = '\\';
+ *(t++) = 'r';
+ break;
+ case '\t':
+ *(t++) = '\\';
+ *(t++) = 't';
+ break;
+ case '\v':
+ *(t++) = '\\';
+ *(t++) = 'v';
+ break;
+ case '\\':
+ *(t++) = '\\';
+ *(t++) = '\\';
+ break;
+ case '"':
+ *(t++) = '\\';
+ *(t++) = '"';
+ break;
+ case '\'':
+ *(t++) = '\\';
+ *(t++) = '\'';
+ break;
+
+ default:
+ /* For special chars we prefer octal over
+ * hexadecimal encoding, simply because glib's
+ * g_strescape() does the same */
+ if ((*f < ' ') || (*f >= 127)) {
+ *(t++) = '\\';
+ *(t++) = octchar((unsigned char) *f >> 6);
+ *(t++) = octchar((unsigned char) *f >> 3);
+ *(t++) = octchar((unsigned char) *f);
+ } else
+ *(t++) = *f;
+ break;
+ }
+
+ *t = 0;
+
+ return r;
+}
+
+char *cunescape_length_with_prefix(const char *s, size_t length, const char *prefix) {
+ char *r, *t;
+ const char *f;
+ size_t pl;
+
+ assert(s);
+
+ /* Undoes C style string escaping, and optionally prefixes it. */
+
+ pl = prefix ? strlen(prefix) : 0;
+
+ r = new(char, pl+length+1);
+ if (!r)
+ return NULL;
+
+ if (prefix)
+ memcpy(r, prefix, pl);
+
+ for (f = s, t = r + pl; f < s + length; f++) {
+
+ if (*f != '\\') {
+ *(t++) = *f;
+ continue;
+ }
+
+ f++;
+
+ switch (*f) {
+
+ case 'a':
+ *(t++) = '\a';
+ break;
+ case 'b':
+ *(t++) = '\b';
+ break;
+ case 'f':
+ *(t++) = '\f';
+ break;
+ case 'n':
+ *(t++) = '\n';
+ break;
+ case 'r':
+ *(t++) = '\r';
+ break;
+ case 't':
+ *(t++) = '\t';
+ break;
+ case 'v':
+ *(t++) = '\v';
+ break;
+ case '\\':
+ *(t++) = '\\';
+ break;
+ case '"':
+ *(t++) = '"';
+ break;
+ case '\'':
+ *(t++) = '\'';
+ break;
+
+ case 's':
+ /* This is an extension of the XDG syntax files */
+ *(t++) = ' ';
+ break;
+
+ case 'x': {
+ /* hexadecimal encoding */
+ int a, b;
+
+ a = unhexchar(f[1]);
+ b = unhexchar(f[2]);
+
+ if (a < 0 || b < 0 || (a == 0 && b == 0)) {
+ /* Invalid escape code, let's take it literal then */
+ *(t++) = '\\';
+ *(t++) = 'x';
+ } else {
+ *(t++) = (char) ((a << 4) | b);
+ f += 2;
+ }
+
+ break;
+ }
+
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7': {
+ /* octal encoding */
+ int a, b, c;
+
+ a = unoctchar(f[0]);
+ b = unoctchar(f[1]);
+ c = unoctchar(f[2]);
+
+ if (a < 0 || b < 0 || c < 0 || (a == 0 && b == 0 && c == 0)) {
+ /* Invalid escape code, let's take it literal then */
+ *(t++) = '\\';
+ *(t++) = f[0];
+ } else {
+ *(t++) = (char) ((a << 6) | (b << 3) | c);
+ f += 2;
+ }
+
+ break;
+ }
+
+ case 0:
+ /* premature end of string.*/
+ *(t++) = '\\';
+ goto finish;
+
+ default:
+ /* Invalid escape code, let's take it literal then */
+ *(t++) = '\\';
+ *(t++) = *f;
+ break;
+ }
+ }
+
+finish:
+ *t = 0;
+ return r;
+}
+
+char *cunescape_length(const char *s, size_t length) {
+ return cunescape_length_with_prefix(s, length, NULL);
+}
+
+#if 0 /* NM_IGNORED */
+char *cunescape(const char *s) {
+ assert(s);
+
+ return cunescape_length(s, strlen(s));
+}
+
+char *xescape(const char *s, const char *bad) {
+ char *r, *t;
+ const char *f;
+
+ /* Escapes all chars in bad, in addition to \ and all special
+ * chars, in \xFF style escaping. May be reversed with
+ * cunescape. */
+
+ r = new(char, strlen(s) * 4 + 1);
+ if (!r)
+ return NULL;
+
+ for (f = s, t = r; *f; f++) {
+
+ if ((*f < ' ') || (*f >= 127) ||
+ (*f == '\\') || strchr(bad, *f)) {
+ *(t++) = '\\';
+ *(t++) = 'x';
+ *(t++) = hexchar(*f >> 4);
+ *(t++) = hexchar(*f);
+ } else
+ *(t++) = *f;
+ }
+
+ *t = 0;
+
+ return r;
+}
+
+char *ascii_strlower(char *t) {
+ char *p;
+
+ assert(t);
+
+ for (p = t; *p; p++)
+ if (*p >= 'A' && *p <= 'Z')
+ *p = *p - 'A' + 'a';
+
+ return t;
+}
+
+_pure_ static bool ignore_file_allow_backup(const char *filename) {
+ assert(filename);
+
+ return
+ filename[0] == '.' ||
+ streq(filename, "lost+found") ||
+ streq(filename, "aquota.user") ||
+ streq(filename, "aquota.group") ||
+ endswith(filename, ".rpmnew") ||
+ endswith(filename, ".rpmsave") ||
+ endswith(filename, ".rpmorig") ||
+ endswith(filename, ".dpkg-old") ||
+ endswith(filename, ".dpkg-new") ||
+ endswith(filename, ".dpkg-tmp") ||
+ endswith(filename, ".swp");
+}
+
+bool ignore_file(const char *filename) {
+ assert(filename);
+
+ if (endswith(filename, "~"))
+ return true;
+
+ return ignore_file_allow_backup(filename);
+}
+
+int fd_nonblock(int fd, bool nonblock) {
+ int flags, nflags;
+
+ assert(fd >= 0);
+
+ flags = fcntl(fd, F_GETFL, 0);
+ if (flags < 0)
+ return -errno;
+
+ if (nonblock)
+ nflags = flags | O_NONBLOCK;
+ else
+ nflags = flags & ~O_NONBLOCK;
+
+ if (nflags == flags)
+ return 0;
+
+ if (fcntl(fd, F_SETFL, nflags) < 0)
+ return -errno;
+
+ return 0;
+}
+
+int fd_cloexec(int fd, bool cloexec) {
+ int flags, nflags;
+
+ assert(fd >= 0);
+
+ flags = fcntl(fd, F_GETFD, 0);
+ if (flags < 0)
+ return -errno;
+
+ if (cloexec)
+ nflags = flags | FD_CLOEXEC;
+ else
+ nflags = flags & ~FD_CLOEXEC;
+
+ if (nflags == flags)
+ return 0;
+
+ if (fcntl(fd, F_SETFD, nflags) < 0)
+ return -errno;
+
+ return 0;
+}
+
+_pure_ static bool fd_in_set(int fd, const int fdset[], unsigned n_fdset) {
+ unsigned i;
+
+ assert(n_fdset == 0 || fdset);
+
+ for (i = 0; i < n_fdset; i++)
+ if (fdset[i] == fd)
+ return true;
+
+ return false;
+}
+
+int close_all_fds(const int except[], unsigned n_except) {
+ _cleanup_closedir_ DIR *d = NULL;
+ struct dirent *de;
+ int r = 0;
+
+ assert(n_except == 0 || except);
+
+ d = opendir("/proc/self/fd");
+ if (!d) {
+ int fd;
+ struct rlimit rl;
+
+ /* When /proc isn't available (for example in chroots)
+ * the fallback is brute forcing through the fd
+ * table */
+
+ assert_se(getrlimit(RLIMIT_NOFILE, &rl) >= 0);
+ for (fd = 3; fd < (int) rl.rlim_max; fd ++) {
+
+ if (fd_in_set(fd, except, n_except))
+ continue;
+
+ if (close_nointr(fd) < 0)
+ if (errno != EBADF && r == 0)
+ r = -errno;
+ }
+
+ return r;
+ }
+
+ while ((de = readdir(d))) {
+ int fd = -1;
+
+ if (ignore_file(de->d_name))
+ continue;
+
+ if (safe_atoi(de->d_name, &fd) < 0)
+ /* Let's better ignore this, just in case */
+ continue;
+
+ if (fd < 3)
+ continue;
+
+ if (fd == dirfd(d))
+ continue;
+
+ if (fd_in_set(fd, except, n_except))
+ continue;
+
+ if (close_nointr(fd) < 0) {
+ /* Valgrind has its own FD and doesn't want to have it closed */
+ if (errno != EBADF && r == 0)
+ r = -errno;
+ }
+ }
+
+ return r;
+}
+#endif
+
+bool chars_intersect(const char *a, const char *b) {
+ const char *p;
+
+ /* Returns true if any of the chars in a are in b. */
+ for (p = a; *p; p++)
+ if (strchr(b, *p))
+ return true;
+
+ return false;
+}
+
+#if 0 /* NM_IGNORED */
+bool fstype_is_network(const char *fstype) {
+ static const char table[] =
+ "cifs\0"
+ "smbfs\0"
+ "sshfs\0"
+ "ncpfs\0"
+ "ncp\0"
+ "nfs\0"
+ "nfs4\0"
+ "gfs\0"
+ "gfs2\0"
+ "glusterfs\0";
+
+ const char *x;
+
+ x = startswith(fstype, "fuse.");
+ if (x)
+ fstype = x;
+
+ return nulstr_contains(table, fstype);
+}
+
+int chvt(int vt) {
+ _cleanup_close_ int fd = -1;
+
+ fd = open_terminal("/dev/tty0", O_RDWR|O_NOCTTY|O_CLOEXEC);
+ if (fd < 0)
+ return -errno;
+
+ if (vt < 0) {
+ int tiocl[2] = {
+ TIOCL_GETKMSGREDIRECT,
+ 0
+ };
+
+ if (ioctl(fd, TIOCLINUX, tiocl) < 0)
+ return -errno;
+
+ vt = tiocl[0] <= 0 ? 1 : tiocl[0];
+ }
+
+ if (ioctl(fd, VT_ACTIVATE, vt) < 0)
+ return -errno;
+
+ return 0;
+}
+
+int read_one_char(FILE *f, char *ret, usec_t t, bool *need_nl) {
+ struct termios old_termios, new_termios;
+ char c, line[LINE_MAX];
+
+ assert(f);
+ assert(ret);
+
+ if (tcgetattr(fileno(f), &old_termios) >= 0) {
+ new_termios = old_termios;
+
+ new_termios.c_lflag &= ~ICANON;
+ new_termios.c_cc[VMIN] = 1;
+ new_termios.c_cc[VTIME] = 0;
+
+ if (tcsetattr(fileno(f), TCSADRAIN, &new_termios) >= 0) {
+ size_t k;
+
+ if (t != USEC_INFINITY) {
+ if (fd_wait_for_event(fileno(f), POLLIN, t) <= 0) {
+ tcsetattr(fileno(f), TCSADRAIN, &old_termios);
+ return -ETIMEDOUT;
+ }
+ }
+
+ k = fread(&c, 1, 1, f);
+
+ tcsetattr(fileno(f), TCSADRAIN, &old_termios);
+
+ if (k <= 0)
+ return -EIO;
+
+ if (need_nl)
+ *need_nl = c != '\n';
+
+ *ret = c;
+ return 0;
+ }
+ }
+
+ if (t != USEC_INFINITY) {
+ if (fd_wait_for_event(fileno(f), POLLIN, t) <= 0)
+ return -ETIMEDOUT;
+ }
+
+ errno = 0;
+ if (!fgets(line, sizeof(line), f))
+ return errno ? -errno : -EIO;
+
+ truncate_nl(line);
+
+ if (strlen(line) != 1)
+ return -EBADMSG;
+
+ if (need_nl)
+ *need_nl = false;
+
+ *ret = line[0];
+ return 0;
+}
+
+int ask_char(char *ret, const char *replies, const char *text, ...) {
+ int r;
+
+ assert(ret);
+ assert(replies);
+ assert(text);
+
+ for (;;) {
+ va_list ap;
+ char c;
+ bool need_nl = true;
+
+ if (on_tty())
+ fputs(ANSI_HIGHLIGHT_ON, stdout);
+
+ va_start(ap, text);
+ vprintf(text, ap);
+ va_end(ap);
+
+ if (on_tty())
+ fputs(ANSI_HIGHLIGHT_OFF, stdout);
+
+ fflush(stdout);
+
+ r = read_one_char(stdin, &c, USEC_INFINITY, &need_nl);
+ if (r < 0) {
+
+ if (r == -EBADMSG) {
+ puts("Bad input, please try again.");
+ continue;
+ }
+
+ putchar('\n');
+ return r;
+ }
+
+ if (need_nl)
+ putchar('\n');
+
+ if (strchr(replies, c)) {
+ *ret = c;
+ return 0;
+ }
+
+ puts("Read unexpected character, please try again.");
+ }
+}
+
+int ask_string(char **ret, const char *text, ...) {
+ assert(ret);
+ assert(text);
+
+ for (;;) {
+ char line[LINE_MAX];
+ va_list ap;
+
+ if (on_tty())
+ fputs(ANSI_HIGHLIGHT_ON, stdout);
+
+ va_start(ap, text);
+ vprintf(text, ap);
+ va_end(ap);
+
+ if (on_tty())
+ fputs(ANSI_HIGHLIGHT_OFF, stdout);
+
+ fflush(stdout);
+
+ errno = 0;
+ if (!fgets(line, sizeof(line), stdin))
+ return errno ? -errno : -EIO;
+
+ if (!endswith(line, "\n"))
+ putchar('\n');
+ else {
+ char *s;
+
+ if (isempty(line))
+ continue;
+
+ truncate_nl(line);
+ s = strdup(line);
+ if (!s)
+ return -ENOMEM;
+
+ *ret = s;
+ return 0;
+ }
+ }
+}
+
+int reset_terminal_fd(int fd, bool switch_to_text) {
+ struct termios termios;
+ int r = 0;
+
+ /* Set terminal to some sane defaults */
+
+ assert(fd >= 0);
+
+ /* We leave locked terminal attributes untouched, so that
+ * Plymouth may set whatever it wants to set, and we don't
+ * interfere with that. */
+
+ /* Disable exclusive mode, just in case */
+ ioctl(fd, TIOCNXCL);
+
+ /* Switch to text mode */
+ if (switch_to_text)
+ ioctl(fd, KDSETMODE, KD_TEXT);
+
+ /* Enable console unicode mode */
+ ioctl(fd, KDSKBMODE, K_UNICODE);
+
+ if (tcgetattr(fd, &termios) < 0) {
+ r = -errno;
+ goto finish;
+ }
+
+ /* We only reset the stuff that matters to the software. How
+ * hardware is set up we don't touch assuming that somebody
+ * else will do that for us */
+
+ termios.c_iflag &= ~(IGNBRK | BRKINT | ISTRIP | INLCR | IGNCR | IUCLC);
+ termios.c_iflag |= ICRNL | IMAXBEL | IUTF8;
+ termios.c_oflag |= ONLCR;
+ termios.c_cflag |= CREAD;
+ termios.c_lflag = ISIG | ICANON | IEXTEN | ECHO | ECHOE | ECHOK | ECHOCTL | ECHOPRT | ECHOKE;
+
+ termios.c_cc[VINTR] = 03; /* ^C */
+ termios.c_cc[VQUIT] = 034; /* ^\ */
+ termios.c_cc[VERASE] = 0177;
+ termios.c_cc[VKILL] = 025; /* ^X */
+ termios.c_cc[VEOF] = 04; /* ^D */
+ termios.c_cc[VSTART] = 021; /* ^Q */
+ termios.c_cc[VSTOP] = 023; /* ^S */
+ termios.c_cc[VSUSP] = 032; /* ^Z */
+ termios.c_cc[VLNEXT] = 026; /* ^V */
+ termios.c_cc[VWERASE] = 027; /* ^W */
+ termios.c_cc[VREPRINT] = 022; /* ^R */
+ termios.c_cc[VEOL] = 0;
+ termios.c_cc[VEOL2] = 0;
+
+ termios.c_cc[VTIME] = 0;
+ termios.c_cc[VMIN] = 1;
+
+ if (tcsetattr(fd, TCSANOW, &termios) < 0)
+ r = -errno;
+
+finish:
+ /* Just in case, flush all crap out */
+ tcflush(fd, TCIOFLUSH);
+
+ return r;
+}
+
+int reset_terminal(const char *name) {
+ _cleanup_close_ int fd = -1;
+
+ fd = open_terminal(name, O_RDWR|O_NOCTTY|O_CLOEXEC);
+ if (fd < 0)
+ return fd;
+
+ return reset_terminal_fd(fd, true);
+}
+
+int open_terminal(const char *name, int mode) {
+ int fd, r;
+ unsigned c = 0;
+
+ /*
+ * If a TTY is in the process of being closed opening it might
+ * cause EIO. This is horribly awful, but unlikely to be
+ * changed in the kernel. Hence we work around this problem by
+ * retrying a couple of times.
+ *
+ * https://bugs.launchpad.net/ubuntu/+source/linux/+bug/554172/comments/245
+ */
+
+ assert(!(mode & O_CREAT));
+
+ for (;;) {
+ fd = open(name, mode, 0);
+ if (fd >= 0)
+ break;
+
+ if (errno != EIO)
+ return -errno;
+
+ /* Max 1s in total */
+ if (c >= 20)
+ return -errno;
+
+ usleep(50 * USEC_PER_MSEC);
+ c++;
+ }
+
+ r = isatty(fd);
+ if (r < 0) {
+ safe_close(fd);
+ return -errno;
+ }
+
+ if (!r) {
+ safe_close(fd);
+ return -ENOTTY;
+ }
+
+ return fd;
+}
+
+int flush_fd(int fd) {
+ struct pollfd pollfd = {
+ .fd = fd,
+ .events = POLLIN,
+ };
+
+ for (;;) {
+ char buf[LINE_MAX];
+ ssize_t l;
+ int r;
+
+ r = poll(&pollfd, 1, 0);
+ if (r < 0) {
+ if (errno == EINTR)
+ continue;
+
+ return -errno;
+
+ } else if (r == 0)
+ return 0;
+
+ l = read(fd, buf, sizeof(buf));
+ if (l < 0) {
+
+ if (errno == EINTR)
+ continue;
+
+ if (errno == EAGAIN)
+ return 0;
+
+ return -errno;
+ } else if (l == 0)
+ return 0;
+ }
+}
+
+int acquire_terminal(
+ const char *name,
+ bool fail,
+ bool force,
+ bool ignore_tiocstty_eperm,
+ usec_t timeout) {
+
+ int fd = -1, notify = -1, r = 0, wd = -1;
+ usec_t ts = 0;
+
+ assert(name);
+
+ /* We use inotify to be notified when the tty is closed. We
+ * create the watch before checking if we can actually acquire
+ * it, so that we don't lose any event.
+ *
+ * Note: strictly speaking this actually watches for the
+ * device being closed, it does *not* really watch whether a
+ * tty loses its controlling process. However, unless some
+ * rogue process uses TIOCNOTTY on /dev/tty *after* closing
+ * its tty otherwise this will not become a problem. As long
+ * as the administrator makes sure not configure any service
+ * on the same tty as an untrusted user this should not be a
+ * problem. (Which he probably should not do anyway.) */
+
+ if (timeout != USEC_INFINITY)
+ ts = now(CLOCK_MONOTONIC);
+
+ if (!fail && !force) {
+ notify = inotify_init1(IN_CLOEXEC | (timeout != USEC_INFINITY ? IN_NONBLOCK : 0));
+ if (notify < 0) {
+ r = -errno;
+ goto fail;
+ }
+
+ wd = inotify_add_watch(notify, name, IN_CLOSE);
+ if (wd < 0) {
+ r = -errno;
+ goto fail;
+ }
+ }
+
+ for (;;) {
+ struct sigaction sa_old, sa_new = {
+ .sa_handler = SIG_IGN,
+ .sa_flags = SA_RESTART,
+ };
+
+ if (notify >= 0) {
+ r = flush_fd(notify);
+ if (r < 0)
+ goto fail;
+ }
+
+ /* We pass here O_NOCTTY only so that we can check the return
+ * value TIOCSCTTY and have a reliable way to figure out if we
+ * successfully became the controlling process of the tty */
+ fd = open_terminal(name, O_RDWR|O_NOCTTY|O_CLOEXEC);
+ if (fd < 0)
+ return fd;
+
+ /* Temporarily ignore SIGHUP, so that we don't get SIGHUP'ed
+ * if we already own the tty. */
+ assert_se(sigaction(SIGHUP, &sa_new, &sa_old) == 0);
+
+ /* First, try to get the tty */
+ if (ioctl(fd, TIOCSCTTY, force) < 0)
+ r = -errno;
+
+ assert_se(sigaction(SIGHUP, &sa_old, NULL) == 0);
+
+ /* Sometimes it makes sense to ignore TIOCSCTTY
+ * returning EPERM, i.e. when very likely we already
+ * are have this controlling terminal. */
+ if (r < 0 && r == -EPERM && ignore_tiocstty_eperm)
+ r = 0;
+
+ if (r < 0 && (force || fail || r != -EPERM)) {
+ goto fail;
+ }
+
+ if (r >= 0)
+ break;
+
+ assert(!fail);
+ assert(!force);
+ assert(notify >= 0);
+
+ for (;;) {
+ uint8_t inotify_buffer[sizeof(struct inotify_event) + FILENAME_MAX];
+ ssize_t l;
+ struct inotify_event *e;
+
+ if (timeout != USEC_INFINITY) {
+ usec_t n;
+
+ n = now(CLOCK_MONOTONIC);
+ if (ts + timeout < n) {
+ r = -ETIMEDOUT;
+ goto fail;
+ }
+
+ r = fd_wait_for_event(fd, POLLIN, ts + timeout - n);
+ if (r < 0)
+ goto fail;
+
+ if (r == 0) {
+ r = -ETIMEDOUT;
+ goto fail;
+ }
+ }
+
+ l = read(notify, inotify_buffer, sizeof(inotify_buffer));
+ if (l < 0) {
+
+ if (errno == EINTR || errno == EAGAIN)
+ continue;
+
+ r = -errno;
+ goto fail;
+ }
+
+ e = (struct inotify_event*) inotify_buffer;
+
+ while (l > 0) {
+ size_t step;
+
+ if (e->wd != wd || !(e->mask & IN_CLOSE)) {
+ r = -EIO;
+ goto fail;
+ }
+
+ step = sizeof(struct inotify_event) + e->len;
+ assert(step <= (size_t) l);
+
+ e = (struct inotify_event*) ((uint8_t*) e + step);
+ l -= step;
+ }
+
+ break;
+ }
+
+ /* We close the tty fd here since if the old session
+ * ended our handle will be dead. It's important that
+ * we do this after sleeping, so that we don't enter
+ * an endless loop. */
+ fd = safe_close(fd);
+ }
+
+ safe_close(notify);
+
+ r = reset_terminal_fd(fd, true);
+ if (r < 0)
+ log_warning("Failed to reset terminal: %s", strerror(-r));
+
+ return fd;
+
+fail:
+ safe_close(fd);
+ safe_close(notify);
+
+ return r;
+}
+
+int release_terminal(void) {
+ static const struct sigaction sa_new = {
+ .sa_handler = SIG_IGN,
+ .sa_flags = SA_RESTART,
+ };
+
+ _cleanup_close_ int fd = -1;
+ struct sigaction sa_old;
+ int r = 0;
+
+ fd = open("/dev/tty", O_RDWR|O_NOCTTY|O_NDELAY|O_CLOEXEC);
+ if (fd < 0)
+ return -errno;
+
+ /* Temporarily ignore SIGHUP, so that we don't get SIGHUP'ed
+ * by our own TIOCNOTTY */
+ assert_se(sigaction(SIGHUP, &sa_new, &sa_old) == 0);
+
+ if (ioctl(fd, TIOCNOTTY) < 0)
+ r = -errno;
+
+ assert_se(sigaction(SIGHUP, &sa_old, NULL) == 0);
+
+ return r;
+}
+
+int sigaction_many(const struct sigaction *sa, ...) {
+ va_list ap;
+ int r = 0, sig;
+
+ va_start(ap, sa);
+ while ((sig = va_arg(ap, int)) > 0)
+ if (sigaction(sig, sa, NULL) < 0)
+ r = -errno;
+ va_end(ap);
+
+ return r;
+}
+
+int ignore_signals(int sig, ...) {
+ struct sigaction sa = {
+ .sa_handler = SIG_IGN,
+ .sa_flags = SA_RESTART,
+ };
+ va_list ap;
+ int r = 0;
+
+ if (sigaction(sig, &sa, NULL) < 0)
+ r = -errno;
+
+ va_start(ap, sig);
+ while ((sig = va_arg(ap, int)) > 0)
+ if (sigaction(sig, &sa, NULL) < 0)
+ r = -errno;
+ va_end(ap);
+
+ return r;
+}
+
+int default_signals(int sig, ...) {
+ struct sigaction sa = {
+ .sa_handler = SIG_DFL,
+ .sa_flags = SA_RESTART,
+ };
+ va_list ap;
+ int r = 0;
+
+ if (sigaction(sig, &sa, NULL) < 0)
+ r = -errno;
+
+ va_start(ap, sig);
+ while ((sig = va_arg(ap, int)) > 0)
+ if (sigaction(sig, &sa, NULL) < 0)
+ r = -errno;
+ va_end(ap);
+
+ return r;
+}
+
+void safe_close_pair(int p[]) {
+ assert(p);
+
+ if (p[0] == p[1]) {
+ /* Special case pairs which use the same fd in both
+ * directions... */
+ p[0] = p[1] = safe_close(p[0]);
+ return;
+ }
+
+ p[0] = safe_close(p[0]);
+ p[1] = safe_close(p[1]);
+}
+#endif
+
+ssize_t loop_read(int fd, void *buf, size_t nbytes, bool do_poll) {
+ uint8_t *p = buf;
+ ssize_t n = 0;
+
+ assert(fd >= 0);
+ assert(buf);
+
+ while (nbytes > 0) {
+ ssize_t k;
+
+ k = read(fd, p, nbytes);
+ if (k < 0 && errno == EINTR)
+ continue;
+
+ if (k < 0 && errno == EAGAIN && do_poll) {
+
+ /* We knowingly ignore any return value here,
+ * and expect that any error/EOF is reported
+ * via read() */
+
+ fd_wait_for_event(fd, POLLIN, USEC_INFINITY);
+ continue;
+ }
+
+ if (k <= 0)
+ return n > 0 ? n : (k < 0 ? -errno : 0);
+
+ p += k;
+ nbytes -= k;
+ n += k;
+ }
+
+ return n;
+}
+
+#if 0 /* NM_IGNORED */
+ssize_t loop_write(int fd, const void *buf, size_t nbytes, bool do_poll) {
+ const uint8_t *p = buf;
+ ssize_t n = 0;
+
+ assert(fd >= 0);
+ assert(buf);
+
+ while (nbytes > 0) {
+ ssize_t k;
+
+ k = write(fd, p, nbytes);
+ if (k < 0 && errno == EINTR)
+ continue;
+
+ if (k < 0 && errno == EAGAIN && do_poll) {
+
+ /* We knowingly ignore any return value here,
+ * and expect that any error/EOF is reported
+ * via write() */
+
+ fd_wait_for_event(fd, POLLOUT, USEC_INFINITY);
+ continue;
+ }
+
+ if (k <= 0)
+ return n > 0 ? n : (k < 0 ? -errno : 0);
+
+ p += k;
+ nbytes -= k;
+ n += k;
+ }
+
+ return n;
+}
+
+int parse_size(const char *t, off_t base, off_t *size) {
+
+ /* Soo, sometimes we want to parse IEC binary suffxies, and
+ * sometimes SI decimal suffixes. This function can parse
+ * both. Which one is the right way depends on the
+ * context. Wikipedia suggests that SI is customary for
+ * hardrware metrics and network speeds, while IEC is
+ * customary for most data sizes used by software and volatile
+ * (RAM) memory. Hence be careful which one you pick!
+ *
+ * In either case we use just K, M, G as suffix, and not Ki,
+ * Mi, Gi or so (as IEC would suggest). That's because that's
+ * frickin' ugly. But this means you really need to make sure
+ * to document which base you are parsing when you use this
+ * call. */
+
+ struct table {
+ const char *suffix;
+ unsigned long long factor;
+ };
+
+ static const struct table iec[] = {
+ { "E", 1024ULL*1024ULL*1024ULL*1024ULL*1024ULL*1024ULL },
+ { "P", 1024ULL*1024ULL*1024ULL*1024ULL*1024ULL },
+ { "T", 1024ULL*1024ULL*1024ULL*1024ULL },
+ { "G", 1024ULL*1024ULL*1024ULL },
+ { "M", 1024ULL*1024ULL },
+ { "K", 1024ULL },
+ { "B", 1 },
+ { "", 1 },
+ };
+
+ static const struct table si[] = {
+ { "E", 1000ULL*1000ULL*1000ULL*1000ULL*1000ULL*1000ULL },
+ { "P", 1000ULL*1000ULL*1000ULL*1000ULL*1000ULL },
+ { "T", 1000ULL*1000ULL*1000ULL*1000ULL },
+ { "G", 1000ULL*1000ULL*1000ULL },
+ { "M", 1000ULL*1000ULL },
+ { "K", 1000ULL },
+ { "B", 1 },
+ { "", 1 },
+ };
+
+ const struct table *table;
+ const char *p;
+ unsigned long long r = 0;
+ unsigned n_entries, start_pos = 0;
+
+ assert(t);
+ assert(base == 1000 || base == 1024);
+ assert(size);
+
+ if (base == 1000) {
+ table = si;
+ n_entries = ELEMENTSOF(si);
+ } else {
+ table = iec;
+ n_entries = ELEMENTSOF(iec);
+ }
+
+ p = t;
+ do {
+ long long l;
+ unsigned long long l2;
+ double frac = 0;
+ char *e;
+ unsigned i;
+
+ errno = 0;
+ l = strtoll(p, &e, 10);
+
+ if (errno > 0)
+ return -errno;
+
+ if (l < 0)
+ return -ERANGE;
+
+ if (e == p)
+ return -EINVAL;
+
+ if (*e == '.') {
+ e++;
+ if (*e >= '0' && *e <= '9') {
+ char *e2;
+
+ /* strotoull itself would accept space/+/- */
+ l2 = strtoull(e, &e2, 10);
+
+ if (errno == ERANGE)
+ return -errno;
+
+ /* Ignore failure. E.g. 10.M is valid */
+ frac = l2;
+ for (; e < e2; e++)
+ frac /= 10;
+ }
+ }
+
+ e += strspn(e, WHITESPACE);
+
+ for (i = start_pos; i < n_entries; i++)
+ if (startswith(e, table[i].suffix)) {
+ unsigned long long tmp;
+ if ((unsigned long long) l + (frac > 0) > ULLONG_MAX / table[i].factor)
+ return -ERANGE;
+ tmp = l * table[i].factor + (unsigned long long) (frac * table[i].factor);
+ if (tmp > ULLONG_MAX - r)
+ return -ERANGE;
+
+ r += tmp;
+ if ((unsigned long long) (off_t) r != r)
+ return -ERANGE;
+
+ p = e + strlen(table[i].suffix);
+
+ start_pos = i + 1;
+ break;
+ }
+
+ if (i >= n_entries)
+ return -EINVAL;
+
+ } while (*p);
+
+ *size = r;
+
+ return 0;
+}
+
+int make_stdio(int fd) {
+ int r, s, t;
+
+ assert(fd >= 0);
+
+ r = dup3(fd, STDIN_FILENO, 0);
+ s = dup3(fd, STDOUT_FILENO, 0);
+ t = dup3(fd, STDERR_FILENO, 0);
+
+ if (fd >= 3)
+ safe_close(fd);
+
+ if (r < 0 || s < 0 || t < 0)
+ return -errno;
+
+ /* We rely here that the new fd has O_CLOEXEC not set */
+
+ return 0;
+}
+
+int make_null_stdio(void) {
+ int null_fd;
+
+ null_fd = open("/dev/null", O_RDWR|O_NOCTTY);
+ if (null_fd < 0)
+ return -errno;
+
+ return make_stdio(null_fd);
+}
+
+bool is_device_path(const char *path) {
+
+ /* Returns true on paths that refer to a device, either in
+ * sysfs or in /dev */
+
+ return
+ path_startswith(path, "/dev/") ||
+ path_startswith(path, "/sys/");
+}
+
+int dir_is_empty(const char *path) {
+ _cleanup_closedir_ DIR *d;
+
+ d = opendir(path);
+ if (!d)
+ return -errno;
+
+ for (;;) {
+ struct dirent *de;
+
+ errno = 0;
+ de = readdir(d);
+ if (!de && errno != 0)
+ return -errno;
+
+ if (!de)
+ return 1;
+
+ if (!ignore_file(de->d_name))
+ return 0;
+ }
+}
+
+char* dirname_malloc(const char *path) {
+ char *d, *dir, *dir2;
+
+ d = strdup(path);
+ if (!d)
+ return NULL;
+ dir = dirname(d);
+ assert(dir);
+
+ if (dir != d) {
+ dir2 = strdup(dir);
+ free(d);
+ return dir2;
+ }
+
+ return dir;
+}
+#endif
+
+int dev_urandom(void *p, size_t n) {
+#if 0 /* NM_IGNORED */
+ static int have_syscall = -1;
+ int r, fd;
+ ssize_t k;
+
+ /* Gathers some randomness from the kernel. This call will
+ * never block, and will always return some data from the
+ * kernel, regardless if the random pool is fully initialized
+ * or not. It thus makes no guarantee for the quality of the
+ * returned entropy, but is good enough for or usual usecases
+ * of seeding the hash functions for hashtable */
+
+ /* Use the getrandom() syscall unless we know we don't have
+ * it, or when the requested size is too large for it. */
+ if (have_syscall != 0 || (size_t) (int) n != n) {
+ r = getrandom(p, n, GRND_NONBLOCK);
+ if (r == (int) n) {
+ have_syscall = true;
+ return 0;
+ }
+
+ if (r < 0) {
+ if (errno == ENOSYS)
+ /* we lack the syscall, continue with
+ * reading from /dev/urandom */
+ have_syscall = false;
+ else if (errno == EAGAIN)
+ /* not enough entropy for now. Let's
+ * remember to use the syscall the
+ * next time, again, but also read
+ * from /dev/urandom for now, which
+ * doesn't care about the current
+ * amount of entropy. */
+ have_syscall = true;
+ else
+ return -errno;
+ } else
+ /* too short read? */
+ return -EIO;
+ }
+#else /* NM IGNORED */
+ int fd;
+ ssize_t k;
+#endif
+
+ fd = open("/dev/urandom", O_RDONLY|O_CLOEXEC|O_NOCTTY);
+ if (fd < 0)
+ return errno == ENOENT ? -ENOSYS : -errno;
+
+ k = loop_read(fd, p, n, true);
+ safe_close(fd);
+
+ if (k < 0)
+ return (int) k;
+ if ((size_t) k != n)
+ return -EIO;
+
+ return 0;
+}
+
+void initialize_srand(void) {
+ static bool srand_called = false;
+ unsigned x;
+#ifdef HAVE_SYS_AUXV_H
+ void *auxv;
+#endif
+
+ if (srand_called)
+ return;
+
+ x = 0;
+
+#ifdef HAVE_SYS_AUXV_H
+ /* The kernel provides us with a bit of entropy in auxv, so
+ * let's try to make use of that to seed the pseudo-random
+ * generator. It's better than nothing... */
+
+ auxv = (void*) getauxval(AT_RANDOM);
+ if (auxv)
+ x ^= *(unsigned*) auxv;
+#endif
+
+ x ^= (unsigned) now(CLOCK_REALTIME);
+ x ^= (unsigned) gettid();
+
+ srand(x);
+ srand_called = true;
+}
+
+void random_bytes(void *p, size_t n) {
+ uint8_t *q;
+ int r;
+
+ r = dev_urandom(p, n);
+ if (r >= 0)
+ return;
+
+ /* If some idiot made /dev/urandom unavailable to us, he'll
+ * get a PRNG instead. */
+
+ initialize_srand();
+
+ for (q = p; q < (uint8_t*) p + n; q ++)
+ *q = rand();
+}
+
+#if 0 /* NM_IGNORED */
+void rename_process(const char name[8]) {
+ assert(name);
+
+ /* This is a like a poor man's setproctitle(). It changes the
+ * comm field, argv[0], and also the glibc's internally used
+ * name of the process. For the first one a limit of 16 chars
+ * applies, to the second one usually one of 10 (i.e. length
+ * of "/sbin/init"), to the third one one of 7 (i.e. length of
+ * "systemd"). If you pass a longer string it will be
+ * truncated */
+
+ prctl(PR_SET_NAME, name);
+
+ if (program_invocation_name)
+ strncpy(program_invocation_name, name, strlen(program_invocation_name));
+
+ if (saved_argc > 0) {
+ int i;
+
+ if (saved_argv[0])
+ strncpy(saved_argv[0], name, strlen(saved_argv[0]));
+
+ for (i = 1; i < saved_argc; i++) {
+ if (!saved_argv[i])
+ break;
+
+ memzero(saved_argv[i], strlen(saved_argv[i]));
+ }
+ }
+}
+
+void sigset_add_many(sigset_t *ss, ...) {
+ va_list ap;
+ int sig;
+
+ assert(ss);
+
+ va_start(ap, ss);
+ while ((sig = va_arg(ap, int)) > 0)
+ assert_se(sigaddset(ss, sig) == 0);
+ va_end(ap);
+}
+
+int sigprocmask_many(int how, ...) {
+ va_list ap;
+ sigset_t ss;
+ int sig;
+
+ assert_se(sigemptyset(&ss) == 0);
+
+ va_start(ap, how);
+ while ((sig = va_arg(ap, int)) > 0)
+ assert_se(sigaddset(&ss, sig) == 0);
+ va_end(ap);
+
+ if (sigprocmask(how, &ss, NULL) < 0)
+ return -errno;
+
+ return 0;
+}
+
+char* gethostname_malloc(void) {
+ struct utsname u;
+
+ assert_se(uname(&u) >= 0);
+
+ if (!isempty(u.nodename) && !streq(u.nodename, "(none)"))
+ return strdup(u.nodename);
+
+ return strdup(u.sysname);
+}
+
+bool hostname_is_set(void) {
+ struct utsname u;
+
+ assert_se(uname(&u) >= 0);
+
+ return !isempty(u.nodename) && !streq(u.nodename, "(none)");
+}
+
+char *lookup_uid(uid_t uid) {
+ long bufsize;
+ char *name;
+ _cleanup_free_ char *buf = NULL;
+ struct passwd pwbuf, *pw = NULL;
+
+ /* Shortcut things to avoid NSS lookups */
+ if (uid == 0)
+ return strdup("root");
+
+ bufsize = sysconf(_SC_GETPW_R_SIZE_MAX);
+ if (bufsize <= 0)
+ bufsize = 4096;
+
+ buf = malloc(bufsize);
+ if (!buf)
+ return NULL;
+
+ if (getpwuid_r(uid, &pwbuf, buf, bufsize, &pw) == 0 && pw)
+ return strdup(pw->pw_name);
+
+ if (asprintf(&name, UID_FMT, uid) < 0)
+ return NULL;
+
+ return name;
+}
+
+char* getlogname_malloc(void) {
+ uid_t uid;
+ struct stat st;
+
+ if (isatty(STDIN_FILENO) && fstat(STDIN_FILENO, &st) >= 0)
+ uid = st.st_uid;
+ else
+ uid = getuid();
+
+ return lookup_uid(uid);
+}
+
+char *getusername_malloc(void) {
+ const char *e;
+
+ e = getenv("USER");
+ if (e)
+ return strdup(e);
+
+ return lookup_uid(getuid());
+}
+
+int getttyname_malloc(int fd, char **r) {
+ char path[PATH_MAX], *c;
+ int k;
+
+ assert(r);
+
+ k = ttyname_r(fd, path, sizeof(path));
+ if (k > 0)
+ return -k;
+
+ char_array_0(path);
+
+ c = strdup(startswith(path, "/dev/") ? path + 5 : path);
+ if (!c)
+ return -ENOMEM;
+
+ *r = c;
+ return 0;
+}
+
+int getttyname_harder(int fd, char **r) {
+ int k;
+ char *s;
+
+ k = getttyname_malloc(fd, &s);
+ if (k < 0)
+ return k;
+
+ if (streq(s, "tty")) {
+ free(s);
+ return get_ctty(0, NULL, r);
+ }
+
+ *r = s;
+ return 0;
+}
+
+int get_ctty_devnr(pid_t pid, dev_t *d) {
+ int r;
+ _cleanup_free_ char *line = NULL;
+ const char *p;
+ unsigned long ttynr;
+
+ assert(pid >= 0);
+
+ p = procfs_file_alloca(pid, "stat");
+ r = read_one_line_file(p, &line);
+ if (r < 0)
+ return r;
+
+ p = strrchr(line, ')');
+ if (!p)
+ return -EIO;
+
+ p++;
+
+ if (sscanf(p, " "
+ "%*c " /* state */
+ "%*d " /* ppid */
+ "%*d " /* pgrp */
+ "%*d " /* session */
+ "%lu ", /* ttynr */
+ &ttynr) != 1)
+ return -EIO;
+
+ if (major(ttynr) == 0 && minor(ttynr) == 0)
+ return -ENOENT;
+
+ if (d)
+ *d = (dev_t) ttynr;
+
+ return 0;
+}
+
+int get_ctty(pid_t pid, dev_t *_devnr, char **r) {
+ char fn[sizeof("/dev/char/")-1 + 2*DECIMAL_STR_MAX(unsigned) + 1 + 1], *b = NULL;
+ _cleanup_free_ char *s = NULL;
+ const char *p;
+ dev_t devnr;
+ int k;
+
+ assert(r);
+
+ k = get_ctty_devnr(pid, &devnr);
+ if (k < 0)
+ return k;
+
+ sprintf(fn, "/dev/char/%u:%u", major(devnr), minor(devnr));
+
+ k = readlink_malloc(fn, &s);
+ if (k < 0) {
+
+ if (k != -ENOENT)
+ return k;
+
+ /* This is an ugly hack */
+ if (major(devnr) == 136) {
+ asprintf(&b, "pts/%u", minor(devnr));
+ goto finish;
+ }
+
+ /* Probably something like the ptys which have no
+ * symlink in /dev/char. Let's return something
+ * vaguely useful. */
+
+ b = strdup(fn + 5);
+ goto finish;
+ }
+
+ if (startswith(s, "/dev/"))
+ p = s + 5;
+ else if (startswith(s, "../"))
+ p = s + 3;
+ else
+ p = s;
+
+ b = strdup(p);
+
+finish:
+ if (!b)
+ return -ENOMEM;
+
+ *r = b;
+ if (_devnr)
+ *_devnr = devnr;
+
+ return 0;
+}
+
+int rm_rf_children_dangerous(int fd, bool only_dirs, bool honour_sticky, struct stat *root_dev) {
+ _cleanup_closedir_ DIR *d = NULL;
+ int ret = 0;
+
+ assert(fd >= 0);
+
+ /* This returns the first error we run into, but nevertheless
+ * tries to go on. This closes the passed fd. */
+
+ d = fdopendir(fd);
+ if (!d) {
+ safe_close(fd);
+
+ return errno == ENOENT ? 0 : -errno;
+ }
+
+ for (;;) {
+ struct dirent *de;
+ bool is_dir, keep_around;
+ struct stat st;
+ int r;
+
+ errno = 0;
+ de = readdir(d);
+ if (!de) {
+ if (errno != 0 && ret == 0)
+ ret = -errno;
+ return ret;
+ }
+
+ if (streq(de->d_name, ".") || streq(de->d_name, ".."))
+ continue;
+
+ if (de->d_type == DT_UNKNOWN ||
+ honour_sticky ||
+ (de->d_type == DT_DIR && root_dev)) {
+ if (fstatat(fd, de->d_name, &st, AT_SYMLINK_NOFOLLOW) < 0) {
+ if (ret == 0 && errno != ENOENT)
+ ret = -errno;
+ continue;
+ }
+
+ is_dir = S_ISDIR(st.st_mode);
+ keep_around =
+ honour_sticky &&
+ (st.st_uid == 0 || st.st_uid == getuid()) &&
+ (st.st_mode & S_ISVTX);
+ } else {
+ is_dir = de->d_type == DT_DIR;
+ keep_around = false;
+ }
+
+ if (is_dir) {
+ int subdir_fd;
+
+ /* if root_dev is set, remove subdirectories only, if device is same as dir */
+ if (root_dev && st.st_dev != root_dev->st_dev)
+ continue;
+
+ subdir_fd = openat(fd, de->d_name,
+ O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC|O_NOFOLLOW|O_NOATIME);
+ if (subdir_fd < 0) {
+ if (ret == 0 && errno != ENOENT)
+ ret = -errno;
+ continue;
+ }
+
+ r = rm_rf_children_dangerous(subdir_fd, only_dirs, honour_sticky, root_dev);
+ if (r < 0 && ret == 0)
+ ret = r;
+
+ if (!keep_around)
+ if (unlinkat(fd, de->d_name, AT_REMOVEDIR) < 0) {
+ if (ret == 0 && errno != ENOENT)
+ ret = -errno;
+ }
+
+ } else if (!only_dirs && !keep_around) {
+
+ if (unlinkat(fd, de->d_name, 0) < 0) {
+ if (ret == 0 && errno != ENOENT)
+ ret = -errno;
+ }
+ }
+ }
+}
+
+_pure_ static int is_temporary_fs(struct statfs *s) {
+ assert(s);
+
+ return F_TYPE_EQUAL(s->f_type, TMPFS_MAGIC) ||
+ F_TYPE_EQUAL(s->f_type, RAMFS_MAGIC);
+}
+
+int rm_rf_children(int fd, bool only_dirs, bool honour_sticky, struct stat *root_dev) {
+ struct statfs s;
+
+ assert(fd >= 0);
+
+ if (fstatfs(fd, &s) < 0) {
+ safe_close(fd);
+ return -errno;
+ }
+
+ /* We refuse to clean disk file systems with this call. This
+ * is extra paranoia just to be sure we never ever remove
+ * non-state data */
+ if (!is_temporary_fs(&s)) {
+ log_error("Attempted to remove disk file system, and we can't allow that.");
+ safe_close(fd);
+ return -EPERM;
+ }
+
+ return rm_rf_children_dangerous(fd, only_dirs, honour_sticky, root_dev);
+}
+
+static int file_is_priv_sticky(const char *p) {
+ struct stat st;
+
+ assert(p);
+
+ if (lstat(p, &st) < 0)
+ return -errno;
+
+ return
+ (st.st_uid == 0 || st.st_uid == getuid()) &&
+ (st.st_mode & S_ISVTX);
+}
+
+static int rm_rf_internal(const char *path, bool only_dirs, bool delete_root, bool honour_sticky, bool dangerous) {
+ int fd, r;
+ struct statfs s;
+
+ assert(path);
+
+ /* We refuse to clean the root file system with this
+ * call. This is extra paranoia to never cause a really
+ * seriously broken system. */
+ if (path_equal(path, "/")) {
+ log_error("Attempted to remove entire root file system, and we can't allow that.");
+ return -EPERM;
+ }
+
+ fd = open(path, O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC|O_NOFOLLOW|O_NOATIME);
+ if (fd < 0) {
+
+ if (errno != ENOTDIR)
+ return -errno;
+
+ if (!dangerous) {
+ if (statfs(path, &s) < 0)
+ return -errno;
+
+ if (!is_temporary_fs(&s)) {
+ log_error("Attempted to remove disk file system, and we can't allow that.");
+ return -EPERM;
+ }
+ }
+
+ if (delete_root && !only_dirs)
+ if (unlink(path) < 0 && errno != ENOENT)
+ return -errno;
+
+ return 0;
+ }
+
+ if (!dangerous) {
+ if (fstatfs(fd, &s) < 0) {
+ safe_close(fd);
+ return -errno;
+ }
+
+ if (!is_temporary_fs(&s)) {
+ log_error("Attempted to remove disk file system, and we can't allow that.");
+ safe_close(fd);
+ return -EPERM;
+ }
+ }
+
+ r = rm_rf_children_dangerous(fd, only_dirs, honour_sticky, NULL);
+ if (delete_root) {
+
+ if (honour_sticky && file_is_priv_sticky(path) > 0)
+ return r;
+
+ if (rmdir(path) < 0 && errno != ENOENT) {
+ if (r == 0)
+ r = -errno;
+ }
+ }
+
+ return r;
+}
+
+int rm_rf(const char *path, bool only_dirs, bool delete_root, bool honour_sticky) {
+ return rm_rf_internal(path, only_dirs, delete_root, honour_sticky, false);
+}
+
+int rm_rf_dangerous(const char *path, bool only_dirs, bool delete_root, bool honour_sticky) {
+ return rm_rf_internal(path, only_dirs, delete_root, honour_sticky, true);
+}
+
+int chmod_and_chown(const char *path, mode_t mode, uid_t uid, gid_t gid) {
+ assert(path);
+
+ /* Under the assumption that we are running privileged we
+ * first change the access mode and only then hand out
+ * ownership to avoid a window where access is too open. */
+
+ if (mode != (mode_t) -1)
+ if (chmod(path, mode) < 0)
+ return -errno;
+
+ if (uid != (uid_t) -1 || gid != (gid_t) -1)
+ if (chown(path, uid, gid) < 0)
+ return -errno;
+
+ return 0;
+}
+
+int fchmod_and_fchown(int fd, mode_t mode, uid_t uid, gid_t gid) {
+ assert(fd >= 0);
+
+ /* Under the assumption that we are running privileged we
+ * first change the access mode and only then hand out
+ * ownership to avoid a window where access is too open. */
+
+ if (mode != (mode_t) -1)
+ if (fchmod(fd, mode) < 0)
+ return -errno;
+
+ if (uid != (uid_t) -1 || gid != (gid_t) -1)
+ if (fchown(fd, uid, gid) < 0)
+ return -errno;
+
+ return 0;
+}
+
+cpu_set_t* cpu_set_malloc(unsigned *ncpus) {
+ cpu_set_t *r;
+ unsigned n = 1024;
+
+ /* Allocates the cpuset in the right size */
+
+ for (;;) {
+ if (!(r = CPU_ALLOC(n)))
+ return NULL;
+
+ if (sched_getaffinity(0, CPU_ALLOC_SIZE(n), r) >= 0) {
+ CPU_ZERO_S(CPU_ALLOC_SIZE(n), r);
+
+ if (ncpus)
+ *ncpus = n;
+
+ return r;
+ }
+
+ CPU_FREE(r);
+
+ if (errno != EINVAL)
+ return NULL;
+
+ n *= 2;
+ }
+}
+
+int status_vprintf(const char *status, bool ellipse, bool ephemeral, const char *format, va_list ap) {
+ static const char status_indent[] = " "; /* "[" STATUS "] " */
+ _cleanup_free_ char *s = NULL;
+ _cleanup_close_ int fd = -1;
+ struct iovec iovec[6] = {};
+ int n = 0;
+ static bool prev_ephemeral;
+
+ assert(format);
+
+ /* This is independent of logging, as status messages are
+ * optional and go exclusively to the console. */
+
+ if (vasprintf(&s, format, ap) < 0)
+ return log_oom();
+
+ fd = open_terminal("/dev/console", O_WRONLY|O_NOCTTY|O_CLOEXEC);
+ if (fd < 0)
+ return fd;
+
+ if (ellipse) {
+ char *e;
+ size_t emax, sl;
+ int c;
+
+ c = fd_columns(fd);
+ if (c <= 0)
+ c = 80;
+
+ sl = status ? sizeof(status_indent)-1 : 0;
+
+ emax = c - sl - 1;
+ if (emax < 3)
+ emax = 3;
+
+ e = ellipsize(s, emax, 50);
+ if (e) {
+ free(s);
+ s = e;
+ }
+ }
+
+ if (prev_ephemeral)
+ IOVEC_SET_STRING(iovec[n++], "\r" ANSI_ERASE_TO_END_OF_LINE);
+ prev_ephemeral = ephemeral;
+
+ if (status) {
+ if (!isempty(status)) {
+ IOVEC_SET_STRING(iovec[n++], "[");
+ IOVEC_SET_STRING(iovec[n++], status);
+ IOVEC_SET_STRING(iovec[n++], "] ");
+ } else
+ IOVEC_SET_STRING(iovec[n++], status_indent);
+ }
+
+ IOVEC_SET_STRING(iovec[n++], s);
+ if (!ephemeral)
+ IOVEC_SET_STRING(iovec[n++], "\n");
+
+ if (writev(fd, iovec, n) < 0)
+ return -errno;
+
+ return 0;
+}
+
+int status_printf(const char *status, bool ellipse, bool ephemeral, const char *format, ...) {
+ va_list ap;
+ int r;
+
+ assert(format);
+
+ va_start(ap, format);
+ r = status_vprintf(status, ellipse, ephemeral, format, ap);
+ va_end(ap);
+
+ return r;
+}
+
+char *replace_env(const char *format, char **env) {
+ enum {
+ WORD,
+ CURLY,
+ VARIABLE
+ } state = WORD;
+
+ const char *e, *word = format;
+ char *r = NULL, *k;
+
+ assert(format);
+
+ for (e = format; *e; e ++) {
+
+ switch (state) {
+
+ case WORD:
+ if (*e == '$')
+ state = CURLY;
+ break;
+
+ case CURLY:
+ if (*e == '{') {
+ k = strnappend(r, word, e-word-1);
+ if (!k)
+ goto fail;
+
+ free(r);
+ r = k;
+
+ word = e-1;
+ state = VARIABLE;
+
+ } else if (*e == '$') {
+ k = strnappend(r, word, e-word);
+ if (!k)
+ goto fail;
+
+ free(r);
+ r = k;
+
+ word = e+1;
+ state = WORD;
+ } else
+ state = WORD;
+ break;
+
+ case VARIABLE:
+ if (*e == '}') {
+ const char *t;
+
+ t = strempty(strv_env_get_n(env, word+2, e-word-2));
+
+ k = strappend(r, t);
+ if (!k)
+ goto fail;
+
+ free(r);
+ r = k;
+
+ word = e+1;
+ state = WORD;
+ }
+ break;
+ }
+ }
+
+ k = strnappend(r, word, e-word);
+ if (!k)
+ goto fail;
+
+ free(r);
+ return k;
+
+fail:
+ free(r);
+ return NULL;
+}
+
+#if 0 /* NM_IGNORED */
+char **replace_env_argv(char **argv, char **env) {
+ char **ret, **i;
+ unsigned k = 0, l = 0;
+
+ l = strv_length(argv);
+
+ ret = new(char*, l+1);
+ if (!ret)
+ return NULL;
+
+ STRV_FOREACH(i, argv) {
+
+ /* If $FOO appears as single word, replace it by the split up variable */
+ if ((*i)[0] == '$' && (*i)[1] != '{') {
+ char *e;
+ char **w, **m;
+ unsigned q;
+
+ e = strv_env_get(env, *i+1);
+ if (e) {
+ int r;
+
+ r = strv_split_quoted(&m, e, true);
+ if (r < 0) {
+ ret[k] = NULL;
+ strv_free(ret);
+ return NULL;
+ }
+ } else
+ m = NULL;
+
+ q = strv_length(m);
+ l = l + q - 1;
+
+ w = realloc(ret, sizeof(char*) * (l+1));
+ if (!w) {
+ ret[k] = NULL;
+ strv_free(ret);
+ strv_free(m);
+ return NULL;
+ }
+
+ ret = w;
+ if (m) {
+ memcpy(ret + k, m, q * sizeof(char*));
+ free(m);
+ }
+
+ k += q;
+ continue;
+ }
+
+ /* If ${FOO} appears as part of a word, replace it by the variable as-is */
+ ret[k] = replace_env(*i, env);
+ if (!ret[k]) {
+ strv_free(ret);
+ return NULL;
+ }
+ k++;
+ }
+
+ ret[k] = NULL;
+ return ret;
+}
+#endif
+
+int fd_columns(int fd) {
+ struct winsize ws = {};
+
+ if (ioctl(fd, TIOCGWINSZ, &ws) < 0)
+ return -errno;
+
+ if (ws.ws_col <= 0)
+ return -EIO;
+
+ return ws.ws_col;
+}
+
+unsigned columns(void) {
+ const char *e;
+ int c;
+
+ if (_likely_(cached_columns > 0))
+ return cached_columns;
+
+ c = 0;
+ e = getenv("COLUMNS");
+ if (e)
+ (void) safe_atoi(e, &c);
+
+ if (c <= 0)
+ c = fd_columns(STDOUT_FILENO);
+
+ if (c <= 0)
+ c = 80;
+
+ cached_columns = c;
+ return c;
+}
+
+int fd_lines(int fd) {
+ struct winsize ws = {};
+
+ if (ioctl(fd, TIOCGWINSZ, &ws) < 0)
+ return -errno;
+
+ if (ws.ws_row <= 0)
+ return -EIO;
+
+ return ws.ws_row;
+}
+
+unsigned lines(void) {
+ const char *e;
+ unsigned l;
+
+ if (_likely_(cached_lines > 0))
+ return cached_lines;
+
+ l = 0;
+ e = getenv("LINES");
+ if (e)
+ (void) safe_atou(e, &l);
+
+ if (l <= 0)
+ l = fd_lines(STDOUT_FILENO);
+
+ if (l <= 0)
+ l = 24;
+
+ cached_lines = l;
+ return cached_lines;
+}
+
+/* intended to be used as a SIGWINCH sighandler */
+void columns_lines_cache_reset(int signum) {
+ cached_columns = 0;
+ cached_lines = 0;
+}
+
+bool on_tty(void) {
+ static int cached_on_tty = -1;
+
+ if (_unlikely_(cached_on_tty < 0))
+ cached_on_tty = isatty(STDOUT_FILENO) > 0;
+
+ return cached_on_tty;
+}
+
+int files_same(const char *filea, const char *fileb) {
+ struct stat a, b;
+
+ if (stat(filea, &a) < 0)
+ return -errno;
+
+ if (stat(fileb, &b) < 0)
+ return -errno;
+
+ return a.st_dev == b.st_dev &&
+ a.st_ino == b.st_ino;
+}
+
+int running_in_chroot(void) {
+ int ret;
+
+ ret = files_same("/proc/1/root", "/");
+ if (ret < 0)
+ return ret;
+
+ return ret == 0;
+}
+
+static char *ascii_ellipsize_mem(const char *s, size_t old_length, size_t new_length, unsigned percent) {
+ size_t x;
+ char *r;
+
+ assert(s);
+ assert(percent <= 100);
+ assert(new_length >= 3);
+
+ if (old_length <= 3 || old_length <= new_length)
+ return strndup(s, old_length);
+
+ r = new0(char, new_length+1);
+ if (!r)
+ return NULL;
+
+ x = (new_length * percent) / 100;
+
+ if (x > new_length - 3)
+ x = new_length - 3;
+
+ memcpy(r, s, x);
+ r[x] = '.';
+ r[x+1] = '.';
+ r[x+2] = '.';
+ memcpy(r + x + 3,
+ s + old_length - (new_length - x - 3),
+ new_length - x - 3);
+
+ return r;
+}
+
+char *ellipsize_mem(const char *s, size_t old_length, size_t new_length, unsigned percent) {
+ size_t x;
+ char *e;
+ const char *i, *j;
+ unsigned k, len, len2;
+
+ assert(s);
+ assert(percent <= 100);
+ assert(new_length >= 3);
+
+ /* if no multibyte characters use ascii_ellipsize_mem for speed */
+ if (ascii_is_valid(s))
+ return ascii_ellipsize_mem(s, old_length, new_length, percent);
+
+ if (old_length <= 3 || old_length <= new_length)
+ return strndup(s, old_length);
+
+ x = (new_length * percent) / 100;
+
+ if (x > new_length - 3)
+ x = new_length - 3;
+
+ k = 0;
+ for (i = s; k < x && i < s + old_length; i = utf8_next_char(i)) {
+ int c;
+
+ c = utf8_encoded_to_unichar(i);
+ if (c < 0)
+ return NULL;
+ k += unichar_iswide(c) ? 2 : 1;
+ }
+
+ if (k > x) /* last character was wide and went over quota */
+ x ++;
+
+ for (j = s + old_length; k < new_length && j > i; ) {
+ int c;
+
+ j = utf8_prev_char(j);
+ c = utf8_encoded_to_unichar(j);
+ if (c < 0)
+ return NULL;
+ k += unichar_iswide(c) ? 2 : 1;
+ }
+ assert(i <= j);
+
+ /* we don't actually need to ellipsize */
+ if (i == j)
+ return memdup(s, old_length + 1);
+
+ /* make space for ellipsis */
+ j = utf8_next_char(j);
+
+ len = i - s;
+ len2 = s + old_length - j;
+ e = new(char, len + 3 + len2 + 1);
+ if (!e)
+ return NULL;
+
+ /*
+ printf("old_length=%zu new_length=%zu x=%zu len=%u len2=%u k=%u\n",
+ old_length, new_length, x, len, len2, k);
+ */
+
+ memcpy(e, s, len);
+ e[len] = 0xe2; /* tri-dot ellipsis: … */
+ e[len + 1] = 0x80;
+ e[len + 2] = 0xa6;
+
+ memcpy(e + len + 3, j, len2 + 1);
+
+ return e;
+}
+
+char *ellipsize(const char *s, size_t length, unsigned percent) {
+ return ellipsize_mem(s, strlen(s), length, percent);
+}
+
+int touch_file(const char *path, bool parents, usec_t stamp, uid_t uid, gid_t gid, mode_t mode) {
+ _cleanup_close_ int fd = -1;
+ int r;
+
+ assert(path);
+
+ if (parents)
+ mkdir_parents(path, 0755);
+
+ fd = open(path, O_WRONLY|O_CREAT|O_CLOEXEC|O_NOCTTY, mode > 0 ? mode : 0644);
+ if (fd < 0)
+ return -errno;
+
+ if (mode > 0) {
+ r = fchmod(fd, mode);
+ if (r < 0)
+ return -errno;
+ }
+
+ if (uid != (uid_t) -1 || gid != (gid_t) -1) {
+ r = fchown(fd, uid, gid);
+ if (r < 0)
+ return -errno;
+ }
+
+ if (stamp != USEC_INFINITY) {
+ struct timespec ts[2];
+
+ timespec_store(&ts[0], stamp);
+ ts[1] = ts[0];
+ r = futimens(fd, ts);
+ } else
+ r = futimens(fd, NULL);
+ if (r < 0)
+ return -errno;
+
+ return 0;
+}
+
+int touch(const char *path) {
+ return touch_file(path, false, USEC_INFINITY, (uid_t) -1, (gid_t) -1, 0);
+}
+
+char *unquote(const char *s, const char* quotes) {
+ size_t l;
+ assert(s);
+
+ /* This is rather stupid, simply removes the heading and
+ * trailing quotes if there is one. Doesn't care about
+ * escaping or anything. We should make this smarter one
+ * day...*/
+
+ l = strlen(s);
+ if (l < 2)
+ return strdup(s);
+
+ if (strchr(quotes, s[0]) && s[l-1] == s[0])
+ return strndup(s+1, l-2);
+
+ return strdup(s);
+}
+
+char *normalize_env_assignment(const char *s) {
+ _cleanup_free_ char *value = NULL;
+ const char *eq;
+ char *p, *name;
+
+ eq = strchr(s, '=');
+ if (!eq) {
+ char *r, *t;
+
+ r = strdup(s);
+ if (!r)
+ return NULL;
+
+ t = strstrip(r);
+ if (t != r)
+ memmove(r, t, strlen(t) + 1);
+
+ return r;
+ }
+
+ name = strndupa(s, eq - s);
+ p = strdupa(eq + 1);
+
+ value = unquote(strstrip(p), QUOTES);
+ if (!value)
+ return NULL;
+
+ return strjoin(strstrip(name), "=", value, NULL);
+}
+
+int wait_for_terminate(pid_t pid, siginfo_t *status) {
+ siginfo_t dummy;
+
+ assert(pid >= 1);
+
+ if (!status)
+ status = &dummy;
+
+ for (;;) {
+ zero(*status);
+
+ if (waitid(P_PID, pid, status, WEXITED) < 0) {
+
+ if (errno == EINTR)
+ continue;
+
+ return -errno;
+ }
+
+ return 0;
+ }
+}
+
+/*
+ * Return values:
+ * < 0 : wait_for_terminate() failed to get the state of the
+ * process, the process was terminated by a signal, or
+ * failed for an unknown reason.
+ * >=0 : The process terminated normally, and its exit code is
+ * returned.
+ *
+ * That is, success is indicated by a return value of zero, and an
+ * error is indicated by a non-zero value.
+ */
+int wait_for_terminate_and_warn(const char *name, pid_t pid) {
+ int r;
+ siginfo_t status;
+
+ assert(name);
+ assert(pid > 1);
+
+ r = wait_for_terminate(pid, &status);
+ if (r < 0) {
+ log_warning("Failed to wait for %s: %s", name, strerror(-r));
+ return r;
+ }
+
+ if (status.si_code == CLD_EXITED) {
+ if (status.si_status != 0) {
+ log_warning("%s failed with error code %i.", name, status.si_status);
+ return status.si_status;
+ }
+
+ log_debug("%s succeeded.", name);
+ return 0;
+
+ } else if (status.si_code == CLD_KILLED ||
+ status.si_code == CLD_DUMPED) {
+
+ log_warning("%s terminated by signal %s.", name, signal_to_string(status.si_status));
+ return -EPROTO;
+ }
+
+ log_warning("%s failed due to unknown reason.", name);
+ return -EPROTO;
+}
+
+noreturn void freeze(void) {
+
+ /* Make sure nobody waits for us on a socket anymore */
+ close_all_fds(NULL, 0);
+
+ sync();
+
+ for (;;)
+ pause();
+}
+
+bool null_or_empty(struct stat *st) {
+ assert(st);
+
+ if (S_ISREG(st->st_mode) && st->st_size <= 0)
+ return true;
+
+ if (S_ISCHR(st->st_mode) || S_ISBLK(st->st_mode))
+ return true;
+
+ return false;
+}
+
+int null_or_empty_path(const char *fn) {
+ struct stat st;
+
+ assert(fn);
+
+ if (stat(fn, &st) < 0)
+ return -errno;
+
+ return null_or_empty(&st);
+}
+
+int null_or_empty_fd(int fd) {
+ struct stat st;
+
+ assert(fd >= 0);
+
+ if (fstat(fd, &st) < 0)
+ return -errno;
+
+ return null_or_empty(&st);
+}
+
+DIR *xopendirat(int fd, const char *name, int flags) {
+ int nfd;
+ DIR *d;
+
+ assert(!(flags & O_CREAT));
+
+ nfd = openat(fd, name, O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC|flags, 0);
+ if (nfd < 0)
+ return NULL;
+
+ d = fdopendir(nfd);
+ if (!d) {
+ safe_close(nfd);
+ return NULL;
+ }
+
+ return d;
+}
+
+int signal_from_string_try_harder(const char *s) {
+ int signo;
+ assert(s);
+
+ signo = signal_from_string(s);
+ if (signo <= 0)
+ if (startswith(s, "SIG"))
+ return signal_from_string(s+3);
+
+ return signo;
+}
+
+static char *tag_to_udev_node(const char *tagvalue, const char *by) {
+ _cleanup_free_ char *t = NULL, *u = NULL;
+ size_t enc_len;
+
+ u = unquote(tagvalue, "\"\'");
+ if (!u)
+ return NULL;
+
+ enc_len = strlen(u) * 4 + 1;
+ t = new(char, enc_len);
+ if (!t)
+ return NULL;
+
+ if (encode_devnode_name(u, t, enc_len) < 0)
+ return NULL;
+
+ return strjoin("/dev/disk/by-", by, "/", t, NULL);
+}
+
+char *fstab_node_to_udev_node(const char *p) {
+ assert(p);
+
+ if (startswith(p, "LABEL="))
+ return tag_to_udev_node(p+6, "label");
+
+ if (startswith(p, "UUID="))
+ return tag_to_udev_node(p+5, "uuid");
+
+ if (startswith(p, "PARTUUID="))
+ return tag_to_udev_node(p+9, "partuuid");
+
+ if (startswith(p, "PARTLABEL="))
+ return tag_to_udev_node(p+10, "partlabel");
+
+ return strdup(p);
+}
+
+bool tty_is_vc(const char *tty) {
+ assert(tty);
+
+ return vtnr_from_tty(tty) >= 0;
+}
+
+bool tty_is_console(const char *tty) {
+ assert(tty);
+
+ if (startswith(tty, "/dev/"))
+ tty += 5;
+
+ return streq(tty, "console");
+}
+
+int vtnr_from_tty(const char *tty) {
+ int i, r;
+
+ assert(tty);
+
+ if (startswith(tty, "/dev/"))
+ tty += 5;
+
+ if (!startswith(tty, "tty") )
+ return -EINVAL;
+
+ if (tty[3] < '0' || tty[3] > '9')
+ return -EINVAL;
+
+ r = safe_atoi(tty+3, &i);
+ if (r < 0)
+ return r;
+
+ if (i < 0 || i > 63)
+ return -EINVAL;
+
+ return i;
+}
+
+char *resolve_dev_console(char **active) {
+ char *tty;
+
+ /* Resolve where /dev/console is pointing to, if /sys is actually ours
+ * (i.e. not read-only-mounted which is a sign for container setups) */
+
+ if (path_is_read_only_fs("/sys") > 0)
+ return NULL;
+
+ if (read_one_line_file("/sys/class/tty/console/active", active) < 0)
+ return NULL;
+
+ /* If multiple log outputs are configured the last one is what
+ * /dev/console points to */
+ tty = strrchr(*active, ' ');
+ if (tty)
+ tty++;
+ else
+ tty = *active;
+
+ if (streq(tty, "tty0")) {
+ char *tmp;
+
+ /* Get the active VC (e.g. tty1) */
+ if (read_one_line_file("/sys/class/tty/tty0/active", &tmp) >= 0) {
+ free(*active);
+ tty = *active = tmp;
+ }
+ }
+
+ return tty;
+}
+
+bool tty_is_vc_resolve(const char *tty) {
+ _cleanup_free_ char *active = NULL;
+
+ assert(tty);
+
+ if (startswith(tty, "/dev/"))
+ tty += 5;
+
+ if (streq(tty, "console")) {
+ tty = resolve_dev_console(&active);
+ if (!tty)
+ return false;
+ }
+
+ return tty_is_vc(tty);
+}
+
+const char *default_term_for_tty(const char *tty) {
+ assert(tty);
+
+ return tty_is_vc_resolve(tty) ? "TERM=linux" : "TERM=vt102";
+}
+
+bool dirent_is_file(const struct dirent *de) {
+ assert(de);
+
+ if (ignore_file(de->d_name))
+ return false;
+
+ if (de->d_type != DT_REG &&
+ de->d_type != DT_LNK &&
+ de->d_type != DT_UNKNOWN)
+ return false;
+
+ return true;
+}
+
+bool dirent_is_file_with_suffix(const struct dirent *de, const char *suffix) {
+ assert(de);
+
+ if (de->d_type != DT_REG &&
+ de->d_type != DT_LNK &&
+ de->d_type != DT_UNKNOWN)
+ return false;
+
+ if (ignore_file_allow_backup(de->d_name))
+ return false;
+
+ return endswith(de->d_name, suffix);
+}
+
+void execute_directory(const char *directory, DIR *d, usec_t timeout, char *argv[]) {
+ pid_t executor_pid;
+ int r;
+
+ assert(directory);
+
+ /* Executes all binaries in a directory in parallel and waits
+ * for them to finish. Optionally a timeout is applied. */
+
+ executor_pid = fork();
+ if (executor_pid < 0) {
+ log_error("Failed to fork: %m");
+ return;
+
+ } else if (executor_pid == 0) {
+ _cleanup_hashmap_free_free_ Hashmap *pids = NULL;
+ _cleanup_closedir_ DIR *_d = NULL;
+ struct dirent *de;
+
+ /* We fork this all off from a child process so that
+ * we can somewhat cleanly make use of SIGALRM to set
+ * a time limit */
+
+ reset_all_signal_handlers();
+ reset_signal_mask();
+
+ assert_se(prctl(PR_SET_PDEATHSIG, SIGTERM) == 0);
+
+ if (!d) {
+ d = _d = opendir(directory);
+ if (!d) {
+ if (errno == ENOENT)
+ _exit(EXIT_SUCCESS);
+
+ log_error("Failed to enumerate directory %s: %m", directory);
+ _exit(EXIT_FAILURE);
+ }
+ }
+
+ pids = hashmap_new(NULL);
+ if (!pids) {
+ log_oom();
+ _exit(EXIT_FAILURE);
+ }
+
+ FOREACH_DIRENT(de, d, break) {
+ _cleanup_free_ char *path = NULL;
+ pid_t pid;
+
+ if (!dirent_is_file(de))
+ continue;
+
+ path = strjoin(directory, "/", de->d_name, NULL);
+ if (!path) {
+ log_oom();
+ _exit(EXIT_FAILURE);
+ }
+
+ pid = fork();
+ if (pid < 0) {
+ log_error("Failed to fork: %m");
+ continue;
+ } else if (pid == 0) {
+ char *_argv[2];
+
+ assert_se(prctl(PR_SET_PDEATHSIG, SIGTERM) == 0);
+
+ if (!argv) {
+ _argv[0] = path;
+ _argv[1] = NULL;
+ argv = _argv;
+ } else
+ argv[0] = path;
+
+ execv(path, argv);
+ log_error("Failed to execute %s: %m", path);
+ _exit(EXIT_FAILURE);
+ }
+
+ log_debug("Spawned %s as " PID_FMT ".", path, pid);
+
+ r = hashmap_put(pids, UINT_TO_PTR(pid), path);
+ if (r < 0) {
+ log_oom();
+ _exit(EXIT_FAILURE);
+ }
+
+ path = NULL;
+ }
+
+ /* Abort execution of this process after the
+ * timout. We simply rely on SIGALRM as default action
+ * terminating the process, and turn on alarm(). */
+
+ if (timeout != USEC_INFINITY)
+ alarm((timeout + USEC_PER_SEC - 1) / USEC_PER_SEC);
+
+ while (!hashmap_isempty(pids)) {
+ _cleanup_free_ char *path = NULL;
+ pid_t pid;
+
+ pid = PTR_TO_UINT(hashmap_first_key(pids));
+ assert(pid > 0);
+
+ path = hashmap_remove(pids, UINT_TO_PTR(pid));
+ assert(path);
+
+ wait_for_terminate_and_warn(path, pid);
+ }
+
+ _exit(EXIT_SUCCESS);
+ }
+
+ wait_for_terminate_and_warn(directory, executor_pid);
+}
+
+int kill_and_sigcont(pid_t pid, int sig) {
+ int r;
+
+ r = kill(pid, sig) < 0 ? -errno : 0;
+
+ if (r >= 0)
+ kill(pid, SIGCONT);
+
+ return r;
+}
+
+bool nulstr_contains(const char*nulstr, const char *needle) {
+ const char *i;
+
+ if (!nulstr)
+ return false;
+
+ NULSTR_FOREACH(i, nulstr)
+ if (streq(i, needle))
+ return true;
+
+ return false;
+}
+
+bool plymouth_running(void) {
+ return access("/run/plymouth/pid", F_OK) >= 0;
+}
+
+char* strshorten(char *s, size_t l) {
+ assert(s);
+
+ if (l < strlen(s))
+ s[l] = 0;
+
+ return s;
+}
+#endif
+
+static bool hostname_valid_char(char c) {
+ return
+ (c >= 'a' && c <= 'z') ||
+ (c >= 'A' && c <= 'Z') ||
+ (c >= '0' && c <= '9') ||
+ c == '-' ||
+ c == '_' ||
+ c == '.';
+}
+
+bool hostname_is_valid(const char *s) {
+ const char *p;
+ bool dot;
+
+ if (isempty(s))
+ return false;
+
+ for (p = s, dot = true; *p; p++) {
+ if (*p == '.') {
+ if (dot)
+ return false;
+
+ dot = true;
+ } else {
+ if (!hostname_valid_char(*p))
+ return false;
+
+ dot = false;
+ }
+ }
+
+ if (dot)
+ return false;
+
+ if (p-s > HOST_NAME_MAX)
+ return false;
+
+ return true;
+}
+
+#if 0 /* NM_IGNORED */
+char* hostname_cleanup(char *s, bool lowercase) {
+ char *p, *d;
+ bool dot;
+
+ for (p = s, d = s, dot = true; *p; p++) {
+ if (*p == '.') {
+ if (dot)
+ continue;
+
+ *(d++) = '.';
+ dot = true;
+ } else if (hostname_valid_char(*p)) {
+ *(d++) = lowercase ? tolower(*p) : *p;
+ dot = false;
+ }
+
+ }
+
+ if (dot && d > s)
+ d[-1] = 0;
+ else
+ *d = 0;
+
+ strshorten(s, HOST_NAME_MAX);
+
+ return s;
+}
+
+bool machine_name_is_valid(const char *s) {
+
+ if (!hostname_is_valid(s))
+ return false;
+
+ /* Machine names should be useful hostnames, but also be
+ * useful in unit names, hence we enforce a stricter length
+ * limitation. */
+
+ if (strlen(s) > 64)
+ return false;
+
+ return true;
+}
+
+int pipe_eof(int fd) {
+ struct pollfd pollfd = {
+ .fd = fd,
+ .events = POLLIN|POLLHUP,
+ };
+
+ int r;
+
+ r = poll(&pollfd, 1, 0);
+ if (r < 0)
+ return -errno;
+
+ if (r == 0)
+ return 0;
+
+ return pollfd.revents & POLLHUP;
+}
+#endif
+
+int fd_wait_for_event(int fd, int event, usec_t t) {
+
+ struct pollfd pollfd = {
+ .fd = fd,
+ .events = event,
+ };
+
+ struct timespec ts;
+ int r;
+
+ r = ppoll(&pollfd, 1, t == USEC_INFINITY ? NULL : timespec_store(&ts, t), NULL);
+ if (r < 0)
+ return -errno;
+
+ if (r == 0)
+ return 0;
+
+ return pollfd.revents;
+}
+
+int fopen_temporary(const char *path, FILE **_f, char **_temp_path) {
+ FILE *f;
+ char *t;
+ int fd;
+
+ assert(path);
+ assert(_f);
+ assert(_temp_path);
+
+ t = tempfn_xxxxxx(path);
+ if (!t)
+ return -ENOMEM;
+
+ fd = mkostemp_safe(t, O_WRONLY|O_CLOEXEC);
+ if (fd < 0) {
+ free(t);
+ return -errno;
+ }
+
+ f = fdopen(fd, "we");
+ if (!f) {
+ unlink(t);
+ free(t);
+ return -errno;
+ }
+
+ *_f = f;
+ *_temp_path = t;
+
+ return 0;
+}
+
+#if 0 /* NM_IGNORED */
+int terminal_vhangup_fd(int fd) {
+ assert(fd >= 0);
+
+ if (ioctl(fd, TIOCVHANGUP) < 0)
+ return -errno;
+
+ return 0;
+}
+
+int terminal_vhangup(const char *name) {
+ _cleanup_close_ int fd = -1;
+
+ fd = open_terminal(name, O_RDWR|O_NOCTTY|O_CLOEXEC);
+ if (fd < 0)
+ return fd;
+
+ return terminal_vhangup_fd(fd);
+}
+
+int vt_disallocate(const char *name) {
+ int fd, r;
+ unsigned u;
+
+ /* Deallocate the VT if possible. If not possible
+ * (i.e. because it is the active one), at least clear it
+ * entirely (including the scrollback buffer) */
+
+ if (!startswith(name, "/dev/"))
+ return -EINVAL;
+
+ if (!tty_is_vc(name)) {
+ /* So this is not a VT. I guess we cannot deallocate
+ * it then. But let's at least clear the screen */
+
+ fd = open_terminal(name, O_RDWR|O_NOCTTY|O_CLOEXEC);
+ if (fd < 0)
+ return fd;
+
+ loop_write(fd,
+ "\033[r" /* clear scrolling region */
+ "\033[H" /* move home */
+ "\033[2J", /* clear screen */
+ 10, false);
+ safe_close(fd);
+
+ return 0;
+ }
+
+ if (!startswith(name, "/dev/tty"))
+ return -EINVAL;
+
+ r = safe_atou(name+8, &u);
+ if (r < 0)
+ return r;
+
+ if (u <= 0)
+ return -EINVAL;
+
+ /* Try to deallocate */
+ fd = open_terminal("/dev/tty0", O_RDWR|O_NOCTTY|O_CLOEXEC);
+ if (fd < 0)
+ return fd;
+
+ r = ioctl(fd, VT_DISALLOCATE, u);
+ safe_close(fd);
+
+ if (r >= 0)
+ return 0;
+
+ if (errno != EBUSY)
+ return -errno;
+
+ /* Couldn't deallocate, so let's clear it fully with
+ * scrollback */
+ fd = open_terminal(name, O_RDWR|O_NOCTTY|O_CLOEXEC);
+ if (fd < 0)
+ return fd;
+
+ loop_write(fd,
+ "\033[r" /* clear scrolling region */
+ "\033[H" /* move home */
+ "\033[3J", /* clear screen including scrollback, requires Linux 2.6.40 */
+ 10, false);
+ safe_close(fd);
+
+ return 0;
+}
+
+int symlink_atomic(const char *from, const char *to) {
+ _cleanup_free_ char *t = NULL;
+
+ assert(from);
+ assert(to);
+
+ t = tempfn_random(to);
+ if (!t)
+ return -ENOMEM;
+
+ if (symlink(from, t) < 0)
+ return -errno;
+
+ if (rename(t, to) < 0) {
+ unlink_noerrno(t);
+ return -errno;
+ }
+
+ return 0;
+}
+
+int mknod_atomic(const char *path, mode_t mode, dev_t dev) {
+ _cleanup_free_ char *t = NULL;
+
+ assert(path);
+
+ t = tempfn_random(path);
+ if (!t)
+ return -ENOMEM;
+
+ if (mknod(t, mode, dev) < 0)
+ return -errno;
+
+ if (rename(t, path) < 0) {
+ unlink_noerrno(t);
+ return -errno;
+ }
+
+ return 0;
+}
+
+int mkfifo_atomic(const char *path, mode_t mode) {
+ _cleanup_free_ char *t = NULL;
+
+ assert(path);
+
+ t = tempfn_random(path);
+ if (!t)
+ return -ENOMEM;
+
+ if (mkfifo(t, mode) < 0)
+ return -errno;
+
+ if (rename(t, path) < 0) {
+ unlink_noerrno(t);
+ return -errno;
+ }
+
+ return 0;
+}
+
+bool display_is_local(const char *display) {
+ assert(display);
+
+ return
+ display[0] == ':' &&
+ display[1] >= '0' &&
+ display[1] <= '9';
+}
+
+int socket_from_display(const char *display, char **path) {
+ size_t k;
+ char *f, *c;
+
+ assert(display);
+ assert(path);
+
+ if (!display_is_local(display))
+ return -EINVAL;
+
+ k = strspn(display+1, "0123456789");
+
+ f = new(char, strlen("/tmp/.X11-unix/X") + k + 1);
+ if (!f)
+ return -ENOMEM;
+
+ c = stpcpy(f, "/tmp/.X11-unix/X");
+ memcpy(c, display+1, k);
+ c[k] = 0;
+
+ *path = f;
+
+ return 0;
+}
+
+int get_user_creds(
+ const char **username,
+ uid_t *uid, gid_t *gid,
+ const char **home,
+ const char **shell) {
+
+ struct passwd *p;
+ uid_t u;
+
+ assert(username);
+ assert(*username);
+
+ /* We enforce some special rules for uid=0: in order to avoid
+ * NSS lookups for root we hardcode its data. */
+
+ if (streq(*username, "root") || streq(*username, "0")) {
+ *username = "root";
+
+ if (uid)
+ *uid = 0;
+
+ if (gid)
+ *gid = 0;
+
+ if (home)
+ *home = "/root";
+
+ if (shell)
+ *shell = "/bin/sh";
+
+ return 0;
+ }
+
+ if (parse_uid(*username, &u) >= 0) {
+ errno = 0;
+ p = getpwuid(u);
+
+ /* If there are multiple users with the same id, make
+ * sure to leave $USER to the configured value instead
+ * of the first occurrence in the database. However if
+ * the uid was configured by a numeric uid, then let's
+ * pick the real username from /etc/passwd. */
+ if (p)
+ *username = p->pw_name;
+ } else {
+ errno = 0;
+ p = getpwnam(*username);
+ }
+
+ if (!p)
+ return errno > 0 ? -errno : -ESRCH;
+
+ if (uid)
+ *uid = p->pw_uid;
+
+ if (gid)
+ *gid = p->pw_gid;
+
+ if (home)
+ *home = p->pw_dir;
+
+ if (shell)
+ *shell = p->pw_shell;
+
+ return 0;
+}
+
+char* uid_to_name(uid_t uid) {
+ struct passwd *p;
+ char *r;
+
+ if (uid == 0)
+ return strdup("root");
+
+ p = getpwuid(uid);
+ if (p)
+ return strdup(p->pw_name);
+
+ if (asprintf(&r, UID_FMT, uid) < 0)
+ return NULL;
+
+ return r;
+}
+
+char* gid_to_name(gid_t gid) {
+ struct group *p;
+ char *r;
+
+ if (gid == 0)
+ return strdup("root");
+
+ p = getgrgid(gid);
+ if (p)
+ return strdup(p->gr_name);
+
+ if (asprintf(&r, GID_FMT, gid) < 0)
+ return NULL;
+
+ return r;
+}
+
+int get_group_creds(const char **groupname, gid_t *gid) {
+ struct group *g;
+ gid_t id;
+
+ assert(groupname);
+
+ /* We enforce some special rules for gid=0: in order to avoid
+ * NSS lookups for root we hardcode its data. */
+
+ if (streq(*groupname, "root") || streq(*groupname, "0")) {
+ *groupname = "root";
+
+ if (gid)
+ *gid = 0;
+
+ return 0;
+ }
+
+ if (parse_gid(*groupname, &id) >= 0) {
+ errno = 0;
+ g = getgrgid(id);
+
+ if (g)
+ *groupname = g->gr_name;
+ } else {
+ errno = 0;
+ g = getgrnam(*groupname);
+ }
+
+ if (!g)
+ return errno > 0 ? -errno : -ESRCH;
+
+ if (gid)
+ *gid = g->gr_gid;
+
+ return 0;
+}
+
+int in_gid(gid_t gid) {
+ gid_t *gids;
+ int ngroups_max, r, i;
+
+ if (getgid() == gid)
+ return 1;
+
+ if (getegid() == gid)
+ return 1;
+
+ ngroups_max = sysconf(_SC_NGROUPS_MAX);
+ assert(ngroups_max > 0);
+
+ gids = alloca(sizeof(gid_t) * ngroups_max);
+
+ r = getgroups(ngroups_max, gids);
+ if (r < 0)
+ return -errno;
+
+ for (i = 0; i < r; i++)
+ if (gids[i] == gid)
+ return 1;
+
+ return 0;
+}
+
+int in_group(const char *name) {
+ int r;
+ gid_t gid;
+
+ r = get_group_creds(&name, &gid);
+ if (r < 0)
+ return r;
+
+ return in_gid(gid);
+}
+
+int glob_exists(const char *path) {
+ _cleanup_globfree_ glob_t g = {};
+ int k;
+
+ assert(path);
+
+ errno = 0;
+ k = glob(path, GLOB_NOSORT|GLOB_BRACE, NULL, &g);
+
+ if (k == GLOB_NOMATCH)
+ return 0;
+ else if (k == GLOB_NOSPACE)
+ return -ENOMEM;
+ else if (k == 0)
+ return !strv_isempty(g.gl_pathv);
+ else
+ return errno ? -errno : -EIO;
+}
+
+int glob_extend(char ***strv, const char *path) {
+ _cleanup_globfree_ glob_t g = {};
+ int k;
+ char **p;
+
+ errno = 0;
+ k = glob(path, GLOB_NOSORT|GLOB_BRACE, NULL, &g);
+
+ if (k == GLOB_NOMATCH)
+ return -ENOENT;
+ else if (k == GLOB_NOSPACE)
+ return -ENOMEM;
+ else if (k != 0 || strv_isempty(g.gl_pathv))
+ return errno ? -errno : -EIO;
+
+ STRV_FOREACH(p, g.gl_pathv) {
+ k = strv_extend(strv, *p);
+ if (k < 0)
+ break;
+ }
+
+ return k;
+}
+
+int dirent_ensure_type(DIR *d, struct dirent *de) {
+ struct stat st;
+
+ assert(d);
+ assert(de);
+
+ if (de->d_type != DT_UNKNOWN)
+ return 0;
+
+ if (fstatat(dirfd(d), de->d_name, &st, AT_SYMLINK_NOFOLLOW) < 0)
+ return -errno;
+
+ de->d_type =
+ S_ISREG(st.st_mode) ? DT_REG :
+ S_ISDIR(st.st_mode) ? DT_DIR :
+ S_ISLNK(st.st_mode) ? DT_LNK :
+ S_ISFIFO(st.st_mode) ? DT_FIFO :
+ S_ISSOCK(st.st_mode) ? DT_SOCK :
+ S_ISCHR(st.st_mode) ? DT_CHR :
+ S_ISBLK(st.st_mode) ? DT_BLK :
+ DT_UNKNOWN;
+
+ return 0;
+}
+
+int get_files_in_directory(const char *path, char ***list) {
+ _cleanup_closedir_ DIR *d = NULL;
+ size_t bufsize = 0, n = 0;
+ _cleanup_strv_free_ char **l = NULL;
+
+ assert(path);
+
+ /* Returns all files in a directory in *list, and the number
+ * of files as return value. If list is NULL returns only the
+ * number. */
+
+ d = opendir(path);
+ if (!d)
+ return -errno;
+
+ for (;;) {
+ struct dirent *de;
+
+ errno = 0;
+ de = readdir(d);
+ if (!de && errno != 0)
+ return -errno;
+ if (!de)
+ break;
+
+ dirent_ensure_type(d, de);
+
+ if (!dirent_is_file(de))
+ continue;
+
+ if (list) {
+ /* one extra slot is needed for the terminating NULL */
+ if (!GREEDY_REALLOC(l, bufsize, n + 2))
+ return -ENOMEM;
+
+ l[n] = strdup(de->d_name);
+ if (!l[n])
+ return -ENOMEM;
+
+ l[++n] = NULL;
+ } else
+ n++;
+ }
+
+ if (list) {
+ *list = l;
+ l = NULL; /* avoid freeing */
+ }
+
+ return n;
+}
+#endif
+
+char *strjoin(const char *x, ...) {
+ va_list ap;
+ size_t l;
+ char *r, *p;
+
+ va_start(ap, x);
+
+ if (x) {
+ l = strlen(x);
+
+ for (;;) {
+ const char *t;
+ size_t n;
+
+ t = va_arg(ap, const char *);
+ if (!t)
+ break;
+
+ n = strlen(t);
+ if (n > ((size_t) -1) - l) {
+ va_end(ap);
+ return NULL;
+ }
+
+ l += n;
+ }
+ } else
+ l = 0;
+
+ va_end(ap);
+
+ r = new(char, l+1);
+ if (!r)
+ return NULL;
+
+ if (x) {
+ p = stpcpy(r, x);
+
+ va_start(ap, x);
+
+ for (;;) {
+ const char *t;
+
+ t = va_arg(ap, const char *);
+ if (!t)
+ break;
+
+ p = stpcpy(p, t);
+ }
+
+ va_end(ap);
+ } else
+ r[0] = 0;
+
+ return r;
+}
+
+#if 0 /* NM_IGNORED */
+bool is_main_thread(void) {
+ static thread_local int cached = 0;
+
+ if (_unlikely_(cached == 0))
+ cached = getpid() == gettid() ? 1 : -1;
+
+ return cached > 0;
+}
+
+int block_get_whole_disk(dev_t d, dev_t *ret) {
+ char *p, *s;
+ int r;
+ unsigned n, m;
+
+ assert(ret);
+
+ /* If it has a queue this is good enough for us */
+ if (asprintf(&p, "/sys/dev/block/%u:%u/queue", major(d), minor(d)) < 0)
+ return -ENOMEM;
+
+ r = access(p, F_OK);
+ free(p);
+
+ if (r >= 0) {
+ *ret = d;
+ return 0;
+ }
+
+ /* If it is a partition find the originating device */
+ if (asprintf(&p, "/sys/dev/block/%u:%u/partition", major(d), minor(d)) < 0)
+ return -ENOMEM;
+
+ r = access(p, F_OK);
+ free(p);
+
+ if (r < 0)
+ return -ENOENT;
+
+ /* Get parent dev_t */
+ if (asprintf(&p, "/sys/dev/block/%u:%u/../dev", major(d), minor(d)) < 0)
+ return -ENOMEM;
+
+ r = read_one_line_file(p, &s);
+ free(p);
+
+ if (r < 0)
+ return r;
+
+ r = sscanf(s, "%u:%u", &m, &n);
+ free(s);
+
+ if (r != 2)
+ return -EINVAL;
+
+ /* Only return this if it is really good enough for us. */
+ if (asprintf(&p, "/sys/dev/block/%u:%u/queue", m, n) < 0)
+ return -ENOMEM;
+
+ r = access(p, F_OK);
+ free(p);
+
+ if (r >= 0) {
+ *ret = makedev(m, n);
+ return 0;
+ }
+
+ return -ENOENT;
+}
+
+static const char *const ioprio_class_table[] = {
+ [IOPRIO_CLASS_NONE] = "none",
+ [IOPRIO_CLASS_RT] = "realtime",
+ [IOPRIO_CLASS_BE] = "best-effort",
+ [IOPRIO_CLASS_IDLE] = "idle"
+};
+
+DEFINE_STRING_TABLE_LOOKUP_WITH_FALLBACK(ioprio_class, int, INT_MAX);
+
+static const char *const sigchld_code_table[] = {
+ [CLD_EXITED] = "exited",
+ [CLD_KILLED] = "killed",
+ [CLD_DUMPED] = "dumped",
+ [CLD_TRAPPED] = "trapped",
+ [CLD_STOPPED] = "stopped",
+ [CLD_CONTINUED] = "continued",
+};
+
+DEFINE_STRING_TABLE_LOOKUP(sigchld_code, int);
+
+static const char *const log_facility_unshifted_table[LOG_NFACILITIES] = {
+ [LOG_FAC(LOG_KERN)] = "kern",
+ [LOG_FAC(LOG_USER)] = "user",
+ [LOG_FAC(LOG_MAIL)] = "mail",
+ [LOG_FAC(LOG_DAEMON)] = "daemon",
+ [LOG_FAC(LOG_AUTH)] = "auth",
+ [LOG_FAC(LOG_SYSLOG)] = "syslog",
+ [LOG_FAC(LOG_LPR)] = "lpr",
+ [LOG_FAC(LOG_NEWS)] = "news",
+ [LOG_FAC(LOG_UUCP)] = "uucp",
+ [LOG_FAC(LOG_CRON)] = "cron",
+ [LOG_FAC(LOG_AUTHPRIV)] = "authpriv",
+ [LOG_FAC(LOG_FTP)] = "ftp",
+ [LOG_FAC(LOG_LOCAL0)] = "local0",
+ [LOG_FAC(LOG_LOCAL1)] = "local1",
+ [LOG_FAC(LOG_LOCAL2)] = "local2",
+ [LOG_FAC(LOG_LOCAL3)] = "local3",
+ [LOG_FAC(LOG_LOCAL4)] = "local4",
+ [LOG_FAC(LOG_LOCAL5)] = "local5",
+ [LOG_FAC(LOG_LOCAL6)] = "local6",
+ [LOG_FAC(LOG_LOCAL7)] = "local7"
+};
+
+DEFINE_STRING_TABLE_LOOKUP_WITH_FALLBACK(log_facility_unshifted, int, LOG_FAC(~0));
+
+static const char *const log_level_table[] = {
+ [LOG_EMERG] = "emerg",
+ [LOG_ALERT] = "alert",
+ [LOG_CRIT] = "crit",
+ [LOG_ERR] = "err",
+ [LOG_WARNING] = "warning",
+ [LOG_NOTICE] = "notice",
+ [LOG_INFO] = "info",
+ [LOG_DEBUG] = "debug"
+};
+
+DEFINE_STRING_TABLE_LOOKUP_WITH_FALLBACK(log_level, int, LOG_DEBUG);
+
+static const char* const sched_policy_table[] = {
+ [SCHED_OTHER] = "other",
+ [SCHED_BATCH] = "batch",
+ [SCHED_IDLE] = "idle",
+ [SCHED_FIFO] = "fifo",
+ [SCHED_RR] = "rr"
+};
+
+DEFINE_STRING_TABLE_LOOKUP_WITH_FALLBACK(sched_policy, int, INT_MAX);
+
+static const char* const rlimit_table[_RLIMIT_MAX] = {
+ [RLIMIT_CPU] = "LimitCPU",
+ [RLIMIT_FSIZE] = "LimitFSIZE",
+ [RLIMIT_DATA] = "LimitDATA",
+ [RLIMIT_STACK] = "LimitSTACK",
+ [RLIMIT_CORE] = "LimitCORE",
+ [RLIMIT_RSS] = "LimitRSS",
+ [RLIMIT_NOFILE] = "LimitNOFILE",
+ [RLIMIT_AS] = "LimitAS",
+ [RLIMIT_NPROC] = "LimitNPROC",
+ [RLIMIT_MEMLOCK] = "LimitMEMLOCK",
+ [RLIMIT_LOCKS] = "LimitLOCKS",
+ [RLIMIT_SIGPENDING] = "LimitSIGPENDING",
+ [RLIMIT_MSGQUEUE] = "LimitMSGQUEUE",
+ [RLIMIT_NICE] = "LimitNICE",
+ [RLIMIT_RTPRIO] = "LimitRTPRIO",
+ [RLIMIT_RTTIME] = "LimitRTTIME"
+};
+
+DEFINE_STRING_TABLE_LOOKUP(rlimit, int);
+
+static const char* const ip_tos_table[] = {
+ [IPTOS_LOWDELAY] = "low-delay",
+ [IPTOS_THROUGHPUT] = "throughput",
+ [IPTOS_RELIABILITY] = "reliability",
+ [IPTOS_LOWCOST] = "low-cost",
+};
+
+DEFINE_STRING_TABLE_LOOKUP_WITH_FALLBACK(ip_tos, int, 0xff);
+
+static const char *const __signal_table[] = {
+ [SIGHUP] = "HUP",
+ [SIGINT] = "INT",
+ [SIGQUIT] = "QUIT",
+ [SIGILL] = "ILL",
+ [SIGTRAP] = "TRAP",
+ [SIGABRT] = "ABRT",
+ [SIGBUS] = "BUS",
+ [SIGFPE] = "FPE",
+ [SIGKILL] = "KILL",
+ [SIGUSR1] = "USR1",
+ [SIGSEGV] = "SEGV",
+ [SIGUSR2] = "USR2",
+ [SIGPIPE] = "PIPE",
+ [SIGALRM] = "ALRM",
+ [SIGTERM] = "TERM",
+#ifdef SIGSTKFLT
+ [SIGSTKFLT] = "STKFLT", /* Linux on SPARC doesn't know SIGSTKFLT */
+#endif
+ [SIGCHLD] = "CHLD",
+ [SIGCONT] = "CONT",
+ [SIGSTOP] = "STOP",
+ [SIGTSTP] = "TSTP",
+ [SIGTTIN] = "TTIN",
+ [SIGTTOU] = "TTOU",
+ [SIGURG] = "URG",
+ [SIGXCPU] = "XCPU",
+ [SIGXFSZ] = "XFSZ",
+ [SIGVTALRM] = "VTALRM",
+ [SIGPROF] = "PROF",
+ [SIGWINCH] = "WINCH",
+ [SIGIO] = "IO",
+ [SIGPWR] = "PWR",
+ [SIGSYS] = "SYS"
+};
+
+DEFINE_PRIVATE_STRING_TABLE_LOOKUP(__signal, int);
+
+const char *signal_to_string(int signo) {
+ static thread_local char buf[sizeof("RTMIN+")-1 + DECIMAL_STR_MAX(int) + 1];
+ const char *name;
+
+ name = __signal_to_string(signo);
+ if (name)
+ return name;
+
+ if (signo >= SIGRTMIN && signo <= SIGRTMAX)
+ snprintf(buf, sizeof(buf), "RTMIN+%d", signo - SIGRTMIN);
+ else
+ snprintf(buf, sizeof(buf), "%d", signo);
+
+ return buf;
+}
+
+int signal_from_string(const char *s) {
+ int signo;
+ int offset = 0;
+ unsigned u;
+
+ signo = __signal_from_string(s);
+ if (signo > 0)
+ return signo;
+
+ if (startswith(s, "RTMIN+")) {
+ s += 6;
+ offset = SIGRTMIN;
+ }
+ if (safe_atou(s, &u) >= 0) {
+ signo = (int) u + offset;
+ if (signo > 0 && signo < _NSIG)
+ return signo;
+ }
+ return -EINVAL;
+}
+
+bool kexec_loaded(void) {
+ bool loaded = false;
+ char *s;
+
+ if (read_one_line_file("/sys/kernel/kexec_loaded", &s) >= 0) {
+ if (s[0] == '1')
+ loaded = true;
+ free(s);
+ }
+ return loaded;
+}
+
+int prot_from_flags(int flags) {
+
+ switch (flags & O_ACCMODE) {
+
+ case O_RDONLY:
+ return PROT_READ;
+
+ case O_WRONLY:
+ return PROT_WRITE;
+
+ case O_RDWR:
+ return PROT_READ|PROT_WRITE;
+
+ default:
+ return -EINVAL;
+ }
+}
+
+char *format_bytes(char *buf, size_t l, off_t t) {
+ unsigned i;
+
+ static const struct {
+ const char *suffix;
+ off_t factor;
+ } table[] = {
+ { "E", 1024ULL*1024ULL*1024ULL*1024ULL*1024ULL*1024ULL },
+ { "P", 1024ULL*1024ULL*1024ULL*1024ULL*1024ULL },
+ { "T", 1024ULL*1024ULL*1024ULL*1024ULL },
+ { "G", 1024ULL*1024ULL*1024ULL },
+ { "M", 1024ULL*1024ULL },
+ { "K", 1024ULL },
+ };
+
+ for (i = 0; i < ELEMENTSOF(table); i++) {
+
+ if (t >= table[i].factor) {
+ snprintf(buf, l,
+ "%llu.%llu%s",
+ (unsigned long long) (t / table[i].factor),
+ (unsigned long long) (((t*10ULL) / table[i].factor) % 10ULL),
+ table[i].suffix);
+
+ goto finish;
+ }
+ }
+
+ snprintf(buf, l, "%lluB", (unsigned long long) t);
+
+finish:
+ buf[l-1] = 0;
+ return buf;
+
+}
+#endif
+
+void* memdup(const void *p, size_t l) {
+ void *r;
+
+ assert(p);
+
+ r = malloc(l);
+ if (!r)
+ return NULL;
+
+ memcpy(r, p, l);
+ return r;
+}
+
+#if 0 /* NM_IGNORED */
+int fd_inc_sndbuf(int fd, size_t n) {
+ int r, value;
+ socklen_t l = sizeof(value);
+
+ r = getsockopt(fd, SOL_SOCKET, SO_SNDBUF, &value, &l);
+ if (r >= 0 && l == sizeof(value) && (size_t) value >= n*2)
+ return 0;
+
+ /* If we have the privileges we will ignore the kernel limit. */
+
+ value = (int) n;
+ if (setsockopt(fd, SOL_SOCKET, SO_SNDBUFFORCE, &value, sizeof(value)) < 0)
+ if (setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &value, sizeof(value)) < 0)
+ return -errno;
+
+ return 1;
+}
+
+int fd_inc_rcvbuf(int fd, size_t n) {
+ int r, value;
+ socklen_t l = sizeof(value);
+
+ r = getsockopt(fd, SOL_SOCKET, SO_RCVBUF, &value, &l);
+ if (r >= 0 && l == sizeof(value) && (size_t) value >= n*2)
+ return 0;
+
+ /* If we have the privileges we will ignore the kernel limit. */
+
+ value = (int) n;
+ if (setsockopt(fd, SOL_SOCKET, SO_RCVBUFFORCE, &value, sizeof(value)) < 0)
+ if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &value, sizeof(value)) < 0)
+ return -errno;
+ return 1;
+}
+
+int fork_agent(pid_t *pid, const int except[], unsigned n_except, const char *path, ...) {
+ bool stdout_is_tty, stderr_is_tty;
+ pid_t parent_pid, agent_pid;
+ sigset_t ss, saved_ss;
+ unsigned n, i;
+ va_list ap;
+ char **l;
+
+ assert(pid);
+ assert(path);
+
+ /* Spawns a temporary TTY agent, making sure it goes away when
+ * we go away */
+
+ parent_pid = getpid();
+
+ /* First we temporarily block all signals, so that the new
+ * child has them blocked initially. This way, we can be sure
+ * that SIGTERMs are not lost we might send to the agent. */
+ assert_se(sigfillset(&ss) >= 0);
+ assert_se(sigprocmask(SIG_SETMASK, &ss, &saved_ss) >= 0);
+
+ agent_pid = fork();
+ if (agent_pid < 0) {
+ assert_se(sigprocmask(SIG_SETMASK, &saved_ss, NULL) >= 0);
+ return -errno;
+ }
+
+ if (agent_pid != 0) {
+ assert_se(sigprocmask(SIG_SETMASK, &saved_ss, NULL) >= 0);
+ *pid = agent_pid;
+ return 0;
+ }
+
+ /* In the child:
+ *
+ * Make sure the agent goes away when the parent dies */
+ if (prctl(PR_SET_PDEATHSIG, SIGTERM) < 0)
+ _exit(EXIT_FAILURE);
+
+ /* Make sure we actually can kill the agent, if we need to, in
+ * case somebody invoked us from a shell script that trapped
+ * SIGTERM or so... */
+ reset_all_signal_handlers();
+ reset_signal_mask();
+
+ /* Check whether our parent died before we were able
+ * to set the death signal and unblock the signals */
+ if (getppid() != parent_pid)
+ _exit(EXIT_SUCCESS);
+
+ /* Don't leak fds to the agent */
+ close_all_fds(except, n_except);
+
+ stdout_is_tty = isatty(STDOUT_FILENO);
+ stderr_is_tty = isatty(STDERR_FILENO);
+
+ if (!stdout_is_tty || !stderr_is_tty) {
+ int fd;
+
+ /* Detach from stdout/stderr. and reopen
+ * /dev/tty for them. This is important to
+ * ensure that when systemctl is started via
+ * popen() or a similar call that expects to
+ * read EOF we actually do generate EOF and
+ * not delay this indefinitely by because we
+ * keep an unused copy of stdin around. */
+ fd = open("/dev/tty", O_WRONLY);
+ if (fd < 0) {
+ log_error("Failed to open /dev/tty: %m");
+ _exit(EXIT_FAILURE);
+ }
+
+ if (!stdout_is_tty)
+ dup2(fd, STDOUT_FILENO);
+
+ if (!stderr_is_tty)
+ dup2(fd, STDERR_FILENO);
+
+ if (fd > 2)
+ close(fd);
+ }
+
+ /* Count arguments */
+ va_start(ap, path);
+ for (n = 0; va_arg(ap, char*); n++)
+ ;
+ va_end(ap);
+
+ /* Allocate strv */
+ l = alloca(sizeof(char *) * (n + 1));
+
+ /* Fill in arguments */
+ va_start(ap, path);
+ for (i = 0; i <= n; i++)
+ l[i] = va_arg(ap, char*);
+ va_end(ap);
+
+ execv(path, l);
+ _exit(EXIT_FAILURE);
+}
+
+int setrlimit_closest(int resource, const struct rlimit *rlim) {
+ struct rlimit highest, fixed;
+
+ assert(rlim);
+
+ if (setrlimit(resource, rlim) >= 0)
+ return 0;
+
+ if (errno != EPERM)
+ return -errno;
+
+ /* So we failed to set the desired setrlimit, then let's try
+ * to get as close as we can */
+ assert_se(getrlimit(resource, &highest) == 0);
+
+ fixed.rlim_cur = MIN(rlim->rlim_cur, highest.rlim_max);
+ fixed.rlim_max = MIN(rlim->rlim_max, highest.rlim_max);
+
+ if (setrlimit(resource, &fixed) < 0)
+ return -errno;
+
+ return 0;
+}
+
+int getenv_for_pid(pid_t pid, const char *field, char **_value) {
+ _cleanup_fclose_ FILE *f = NULL;
+ char *value = NULL;
+ int r;
+ bool done = false;
+ size_t l;
+ const char *path;
+
+ assert(pid >= 0);
+ assert(field);
+ assert(_value);
+
+ path = procfs_file_alloca(pid, "environ");
+
+ f = fopen(path, "re");
+ if (!f)
+ return -errno;
+
+ l = strlen(field);
+ r = 0;
+
+ do {
+ char line[LINE_MAX];
+ unsigned i;
+
+ for (i = 0; i < sizeof(line)-1; i++) {
+ int c;
+
+ c = getc(f);
+ if (_unlikely_(c == EOF)) {
+ done = true;
+ break;
+ } else if (c == 0)
+ break;
+
+ line[i] = c;
+ }
+ line[i] = 0;
+
+ if (memcmp(line, field, l) == 0 && line[l] == '=') {
+ value = strdup(line + l + 1);
+ if (!value)
+ return -ENOMEM;
+
+ r = 1;
+ break;
+ }
+
+ } while (!done);
+
+ *_value = value;
+ return r;
+}
+
+bool is_valid_documentation_url(const char *url) {
+ assert(url);
+
+ if (startswith(url, "http://") && url[7])
+ return true;
+
+ if (startswith(url, "https://") && url[8])
+ return true;
+
+ if (startswith(url, "file:") && url[5])
+ return true;
+
+ if (startswith(url, "info:") && url[5])
+ return true;
+
+ if (startswith(url, "man:") && url[4])
+ return true;
+
+ return false;
+}
+
+bool in_initrd(void) {
+ static int saved = -1;
+ struct statfs s;
+
+ if (saved >= 0)
+ return saved;
+
+ /* We make two checks here:
+ *
+ * 1. the flag file /etc/initrd-release must exist
+ * 2. the root file system must be a memory file system
+ *
+ * The second check is extra paranoia, since misdetecting an
+ * initrd can have bad bad consequences due the initrd
+ * emptying when transititioning to the main systemd.
+ */
+
+ saved = access("/etc/initrd-release", F_OK) >= 0 &&
+ statfs("/", &s) >= 0 &&
+ is_temporary_fs(&s);
+
+ return saved;
+}
+
+void warn_melody(void) {
+ _cleanup_close_ int fd = -1;
+
+ fd = open("/dev/console", O_WRONLY|O_CLOEXEC|O_NOCTTY);
+ if (fd < 0)
+ return;
+
+ /* Yeah, this is synchronous. Kinda sucks. But well... */
+
+ ioctl(fd, KIOCSOUND, (int)(1193180/440));
+ usleep(125*USEC_PER_MSEC);
+
+ ioctl(fd, KIOCSOUND, (int)(1193180/220));
+ usleep(125*USEC_PER_MSEC);
+
+ ioctl(fd, KIOCSOUND, (int)(1193180/220));
+ usleep(125*USEC_PER_MSEC);
+
+ ioctl(fd, KIOCSOUND, 0);
+}
+
+int make_console_stdio(void) {
+ int fd, r;
+
+ /* Make /dev/console the controlling terminal and stdin/stdout/stderr */
+
+ fd = acquire_terminal("/dev/console", false, true, true, USEC_INFINITY);
+ if (fd < 0) {
+ log_error("Failed to acquire terminal: %s", strerror(-fd));
+ return fd;
+ }
+
+ r = make_stdio(fd);
+ if (r < 0) {
+ log_error("Failed to duplicate terminal fd: %s", strerror(-r));
+ return r;
+ }
+
+ return 0;
+}
+
+int get_home_dir(char **_h) {
+ struct passwd *p;
+ const char *e;
+ char *h;
+ uid_t u;
+
+ assert(_h);
+
+ /* Take the user specified one */
+ e = secure_getenv("HOME");
+ if (e && path_is_absolute(e)) {
+ h = strdup(e);
+ if (!h)
+ return -ENOMEM;
+
+ *_h = h;
+ return 0;
+ }
+
+ /* Hardcode home directory for root to avoid NSS */
+ u = getuid();
+ if (u == 0) {
+ h = strdup("/root");
+ if (!h)
+ return -ENOMEM;
+
+ *_h = h;
+ return 0;
+ }
+
+ /* Check the database... */
+ errno = 0;
+ p = getpwuid(u);
+ if (!p)
+ return errno > 0 ? -errno : -ESRCH;
+
+ if (!path_is_absolute(p->pw_dir))
+ return -EINVAL;
+
+ h = strdup(p->pw_dir);
+ if (!h)
+ return -ENOMEM;
+
+ *_h = h;
+ return 0;
+}
+
+int get_shell(char **_s) {
+ struct passwd *p;
+ const char *e;
+ char *s;
+ uid_t u;
+
+ assert(_s);
+
+ /* Take the user specified one */
+ e = getenv("SHELL");
+ if (e) {
+ s = strdup(e);
+ if (!s)
+ return -ENOMEM;
+
+ *_s = s;
+ return 0;
+ }
+
+ /* Hardcode home directory for root to avoid NSS */
+ u = getuid();
+ if (u == 0) {
+ s = strdup("/bin/sh");
+ if (!s)
+ return -ENOMEM;
+
+ *_s = s;
+ return 0;
+ }
+
+ /* Check the database... */
+ errno = 0;
+ p = getpwuid(u);
+ if (!p)
+ return errno > 0 ? -errno : -ESRCH;
+
+ if (!path_is_absolute(p->pw_shell))
+ return -EINVAL;
+
+ s = strdup(p->pw_shell);
+ if (!s)
+ return -ENOMEM;
+
+ *_s = s;
+ return 0;
+}
+
+bool filename_is_safe(const char *p) {
+
+ if (isempty(p))
+ return false;
+
+ if (strchr(p, '/'))
+ return false;
+
+ if (streq(p, "."))
+ return false;
+
+ if (streq(p, ".."))
+ return false;
+
+ if (strlen(p) > FILENAME_MAX)
+ return false;
+
+ return true;
+}
+
+bool string_is_safe(const char *p) {
+ const char *t;
+
+ if (!p)
+ return false;
+
+ for (t = p; *t; t++) {
+ if (*t > 0 && *t < ' ')
+ return false;
+
+ if (strchr("\\\"\'\0x7f", *t))
+ return false;
+ }
+
+ return true;
+}
+#endif
+
+/**
+ * Check if a string contains control characters. If 'ok' is non-NULL
+ * it may be a string containing additional CCs to be considered OK.
+ */
+bool string_has_cc(const char *p, const char *ok) {
+ const char *t;
+
+ assert(p);
+
+ for (t = p; *t; t++) {
+ if (ok && strchr(ok, *t))
+ continue;
+
+ if (*t > 0 && *t < ' ')
+ return true;
+
+ if (*t == 127)
+ return true;
+ }
+
+ return false;
+}
+
+#if 0 /* NM_IGNORED */
+bool path_is_safe(const char *p) {
+
+ if (isempty(p))
+ return false;
+
+ if (streq(p, "..") || startswith(p, "../") || endswith(p, "/..") || strstr(p, "/../"))
+ return false;
+
+ if (strlen(p) > PATH_MAX)
+ return false;
+
+ /* The following two checks are not really dangerous, but hey, they still are confusing */
+ if (streq(p, ".") || startswith(p, "./") || endswith(p, "/.") || strstr(p, "/./"))
+ return false;
+
+ if (strstr(p, "//"))
+ return false;
+
+ return true;
+}
+
+/* hey glibc, APIs with callbacks without a user pointer are so useless */
+void *xbsearch_r(const void *key, const void *base, size_t nmemb, size_t size,
+ int (*compar) (const void *, const void *, void *), void *arg) {
+ size_t l, u, idx;
+ const void *p;
+ int comparison;
+
+ l = 0;
+ u = nmemb;
+ while (l < u) {
+ idx = (l + u) / 2;
+ p = (void *)(((const char *) base) + (idx * size));
+ comparison = compar(key, p, arg);
+ if (comparison < 0)
+ u = idx;
+ else if (comparison > 0)
+ l = idx + 1;
+ else
+ return (void *)p;
+ }
+ return NULL;
+}
+
+bool is_locale_utf8(void) {
+ const char *set;
+ static int cached_answer = -1;
+
+ if (cached_answer >= 0)
+ goto out;
+
+ if (!setlocale(LC_ALL, "")) {
+ cached_answer = true;
+ goto out;
+ }
+
+ set = nl_langinfo(CODESET);
+ if (!set) {
+ cached_answer = true;
+ goto out;
+ }
+
+ if (streq(set, "UTF-8")) {
+ cached_answer = true;
+ goto out;
+ }
+
+ /* For LC_CTYPE=="C" return true, because CTYPE is effectly
+ * unset and everything can do to UTF-8 nowadays. */
+ set = setlocale(LC_CTYPE, NULL);
+ if (!set) {
+ cached_answer = true;
+ goto out;
+ }
+
+ /* Check result, but ignore the result if C was set
+ * explicitly. */
+ cached_answer =
+ streq(set, "C") &&
+ !getenv("LC_ALL") &&
+ !getenv("LC_CTYPE") &&
+ !getenv("LANG");
+
+out:
+ return (bool) cached_answer;
+}
+
+const char *draw_special_char(DrawSpecialChar ch) {
+ static const char *draw_table[2][_DRAW_SPECIAL_CHAR_MAX] = {
+
+ /* UTF-8 */ {
+ [DRAW_TREE_VERTICAL] = "\342\224\202 ", /* │ */
+ [DRAW_TREE_BRANCH] = "\342\224\234\342\224\200", /* ├─ */
+ [DRAW_TREE_RIGHT] = "\342\224\224\342\224\200", /* └─ */
+ [DRAW_TREE_SPACE] = " ", /* */
+ [DRAW_TRIANGULAR_BULLET] = "\342\200\243", /* ‣ */
+ [DRAW_BLACK_CIRCLE] = "\342\227\217", /* â— */
+ [DRAW_ARROW] = "\342\206\222", /* → */
+ [DRAW_DASH] = "\342\200\223", /* – */
+ },
+
+ /* ASCII fallback */ {
+ [DRAW_TREE_VERTICAL] = "| ",
+ [DRAW_TREE_BRANCH] = "|-",
+ [DRAW_TREE_RIGHT] = "`-",
+ [DRAW_TREE_SPACE] = " ",
+ [DRAW_TRIANGULAR_BULLET] = ">",
+ [DRAW_BLACK_CIRCLE] = "*",
+ [DRAW_ARROW] = "->",
+ [DRAW_DASH] = "-",
+ }
+ };
+
+ return draw_table[!is_locale_utf8()][ch];
+}
+
+char *strreplace(const char *text, const char *old_string, const char *new_string) {
+ const char *f;
+ char *t, *r;
+ size_t l, old_len, new_len;
+
+ assert(text);
+ assert(old_string);
+ assert(new_string);
+
+ old_len = strlen(old_string);
+ new_len = strlen(new_string);
+
+ l = strlen(text);
+ r = new(char, l+1);
+ if (!r)
+ return NULL;
+
+ f = text;
+ t = r;
+ while (*f) {
+ char *a;
+ size_t d, nl;
+
+ if (!startswith(f, old_string)) {
+ *(t++) = *(f++);
+ continue;
+ }
+
+ d = t - r;
+ nl = l - old_len + new_len;
+ a = realloc(r, nl + 1);
+ if (!a)
+ goto oom;
+
+ l = nl;
+ r = a;
+ t = r + d;
+
+ t = stpcpy(t, new_string);
+ f += old_len;
+ }
+
+ *t = 0;
+ return r;
+
+oom:
+ free(r);
+ return NULL;
+}
+
+char *strip_tab_ansi(char **ibuf, size_t *_isz) {
+ const char *i, *begin = NULL;
+ enum {
+ STATE_OTHER,
+ STATE_ESCAPE,
+ STATE_BRACKET
+ } state = STATE_OTHER;
+ char *obuf = NULL;
+ size_t osz = 0, isz;
+ FILE *f;
+
+ assert(ibuf);
+ assert(*ibuf);
+
+ /* Strips ANSI color and replaces TABs by 8 spaces */
+
+ isz = _isz ? *_isz : strlen(*ibuf);
+
+ f = open_memstream(&obuf, &osz);
+ if (!f)
+ return NULL;
+
+ for (i = *ibuf; i < *ibuf + isz + 1; i++) {
+
+ switch (state) {
+
+ case STATE_OTHER:
+ if (i >= *ibuf + isz) /* EOT */
+ break;
+ else if (*i == '\x1B')
+ state = STATE_ESCAPE;
+ else if (*i == '\t')
+ fputs(" ", f);
+ else
+ fputc(*i, f);
+ break;
+
+ case STATE_ESCAPE:
+ if (i >= *ibuf + isz) { /* EOT */
+ fputc('\x1B', f);
+ break;
+ } else if (*i == '[') {
+ state = STATE_BRACKET;
+ begin = i + 1;
+ } else {
+ fputc('\x1B', f);
+ fputc(*i, f);
+ state = STATE_OTHER;
+ }
+
+ break;
+
+ case STATE_BRACKET:
+
+ if (i >= *ibuf + isz || /* EOT */
+ (!(*i >= '0' && *i <= '9') && *i != ';' && *i != 'm')) {
+ fputc('\x1B', f);
+ fputc('[', f);
+ state = STATE_OTHER;
+ i = begin-1;
+ } else if (*i == 'm')
+ state = STATE_OTHER;
+ break;
+ }
+ }
+
+ if (ferror(f)) {
+ fclose(f);
+ free(obuf);
+ return NULL;
+ }
+
+ fclose(f);
+
+ free(*ibuf);
+ *ibuf = obuf;
+
+ if (_isz)
+ *_isz = osz;
+
+ return obuf;
+}
+
+int on_ac_power(void) {
+ bool found_offline = false, found_online = false;
+ _cleanup_closedir_ DIR *d = NULL;
+
+ d = opendir("/sys/class/power_supply");
+ if (!d)
+ return -errno;
+
+ for (;;) {
+ struct dirent *de;
+ _cleanup_close_ int fd = -1, device = -1;
+ char contents[6];
+ ssize_t n;
+
+ errno = 0;
+ de = readdir(d);
+ if (!de && errno != 0)
+ return -errno;
+
+ if (!de)
+ break;
+
+ if (ignore_file(de->d_name))
+ continue;
+
+ device = openat(dirfd(d), de->d_name, O_DIRECTORY|O_RDONLY|O_CLOEXEC|O_NOCTTY);
+ if (device < 0) {
+ if (errno == ENOENT || errno == ENOTDIR)
+ continue;
+
+ return -errno;
+ }
+
+ fd = openat(device, "type", O_RDONLY|O_CLOEXEC|O_NOCTTY);
+ if (fd < 0) {
+ if (errno == ENOENT)
+ continue;
+
+ return -errno;
+ }
+
+ n = read(fd, contents, sizeof(contents));
+ if (n < 0)
+ return -errno;
+
+ if (n != 6 || memcmp(contents, "Mains\n", 6))
+ continue;
+
+ safe_close(fd);
+ fd = openat(device, "online", O_RDONLY|O_CLOEXEC|O_NOCTTY);
+ if (fd < 0) {
+ if (errno == ENOENT)
+ continue;
+
+ return -errno;
+ }
+
+ n = read(fd, contents, sizeof(contents));
+ if (n < 0)
+ return -errno;
+
+ if (n != 2 || contents[1] != '\n')
+ return -EIO;
+
+ if (contents[0] == '1') {
+ found_online = true;
+ break;
+ } else if (contents[0] == '0')
+ found_offline = true;
+ else
+ return -EIO;
+ }
+
+ return found_online || !found_offline;
+}
+
+static int search_and_fopen_internal(const char *path, const char *mode, const char *root, char **search, FILE **_f) {
+ char **i;
+
+ assert(path);
+ assert(mode);
+ assert(_f);
+
+ if (!path_strv_resolve_uniq(search, root))
+ return -ENOMEM;
+
+ STRV_FOREACH(i, search) {
+ _cleanup_free_ char *p = NULL;
+ FILE *f;
+
+ if (root)
+ p = strjoin(root, *i, "/", path, NULL);
+ else
+ p = strjoin(*i, "/", path, NULL);
+ if (!p)
+ return -ENOMEM;
+
+ f = fopen(p, mode);
+ if (f) {
+ *_f = f;
+ return 0;
+ }
+
+ if (errno != ENOENT)
+ return -errno;
+ }
+
+ return -ENOENT;
+}
+
+int search_and_fopen(const char *path, const char *mode, const char *root, const char **search, FILE **_f) {
+ _cleanup_strv_free_ char **copy = NULL;
+
+ assert(path);
+ assert(mode);
+ assert(_f);
+
+ if (path_is_absolute(path)) {
+ FILE *f;
+
+ f = fopen(path, mode);
+ if (f) {
+ *_f = f;
+ return 0;
+ }
+
+ return -errno;
+ }
+
+ copy = strv_copy((char**) search);
+ if (!copy)
+ return -ENOMEM;
+
+ return search_and_fopen_internal(path, mode, root, copy, _f);
+}
+
+int search_and_fopen_nulstr(const char *path, const char *mode, const char *root, const char *search, FILE **_f) {
+ _cleanup_strv_free_ char **s = NULL;
+
+ if (path_is_absolute(path)) {
+ FILE *f;
+
+ f = fopen(path, mode);
+ if (f) {
+ *_f = f;
+ return 0;
+ }
+
+ return -errno;
+ }
+
+ s = strv_split_nulstr(search);
+ if (!s)
+ return -ENOMEM;
+
+ return search_and_fopen_internal(path, mode, root, s, _f);
+}
+
+char *strextend(char **x, ...) {
+ va_list ap;
+ size_t f, l;
+ char *r, *p;
+
+ assert(x);
+
+ l = f = *x ? strlen(*x) : 0;
+
+ va_start(ap, x);
+ for (;;) {
+ const char *t;
+ size_t n;
+
+ t = va_arg(ap, const char *);
+ if (!t)
+ break;
+
+ n = strlen(t);
+ if (n > ((size_t) -1) - l) {
+ va_end(ap);
+ return NULL;
+ }
+
+ l += n;
+ }
+ va_end(ap);
+
+ r = realloc(*x, l+1);
+ if (!r)
+ return NULL;
+
+ p = r + f;
+
+ va_start(ap, x);
+ for (;;) {
+ const char *t;
+
+ t = va_arg(ap, const char *);
+ if (!t)
+ break;
+
+ p = stpcpy(p, t);
+ }
+ va_end(ap);
+
+ *p = 0;
+ *x = r;
+
+ return r + l;
+}
+
+char *strrep(const char *s, unsigned n) {
+ size_t l;
+ char *r, *p;
+ unsigned i;
+
+ assert(s);
+
+ l = strlen(s);
+ p = r = malloc(l * n + 1);
+ if (!r)
+ return NULL;
+
+ for (i = 0; i < n; i++)
+ p = stpcpy(p, s);
+
+ *p = 0;
+ return r;
+}
+#endif
+
+void* greedy_realloc(void **p, size_t *allocated, size_t need, size_t size) {
+ size_t a, newalloc;
+ void *q;
+
+ assert(p);
+ assert(allocated);
+
+ if (*allocated >= need)
+ return *p;
+
+ newalloc = MAX(need * 2, 64u / size);
+ a = newalloc * size;
+
+ /* check for overflows */
+ if (a < size * need)
+ return NULL;
+
+ q = realloc(*p, a);
+ if (!q)
+ return NULL;
+
+ *p = q;
+ *allocated = newalloc;
+ return q;
+}
+
+#if 0 /* NM_IGNORED */
+void* greedy_realloc0(void **p, size_t *allocated, size_t need, size_t size) {
+ size_t prev;
+ uint8_t *q;
+
+ assert(p);
+ assert(allocated);
+
+ prev = *allocated;
+
+ q = greedy_realloc(p, allocated, need, size);
+ if (!q)
+ return NULL;
+
+ if (*allocated > prev)
+ memzero(q + prev * size, (*allocated - prev) * size);
+
+ return q;
+}
+
+bool id128_is_valid(const char *s) {
+ size_t i, l;
+
+ l = strlen(s);
+ if (l == 32) {
+
+ /* Simple formatted 128bit hex string */
+
+ for (i = 0; i < l; i++) {
+ char c = s[i];
+
+ if (!(c >= '0' && c <= '9') &&
+ !(c >= 'a' && c <= 'z') &&
+ !(c >= 'A' && c <= 'Z'))
+ return false;
+ }
+
+ } else if (l == 36) {
+
+ /* Formatted UUID */
+
+ for (i = 0; i < l; i++) {
+ char c = s[i];
+
+ if ((i == 8 || i == 13 || i == 18 || i == 23)) {
+ if (c != '-')
+ return false;
+ } else {
+ if (!(c >= '0' && c <= '9') &&
+ !(c >= 'a' && c <= 'z') &&
+ !(c >= 'A' && c <= 'Z'))
+ return false;
+ }
+ }
+
+ } else
+ return false;
+
+ return true;
+}
+
+int split_pair(const char *s, const char *sep, char **l, char **r) {
+ char *x, *a, *b;
+
+ assert(s);
+ assert(sep);
+ assert(l);
+ assert(r);
+
+ if (isempty(sep))
+ return -EINVAL;
+
+ x = strstr(s, sep);
+ if (!x)
+ return -EINVAL;
+
+ a = strndup(s, x - s);
+ if (!a)
+ return -ENOMEM;
+
+ b = strdup(x + strlen(sep));
+ if (!b) {
+ free(a);
+ return -ENOMEM;
+ }
+
+ *l = a;
+ *r = b;
+
+ return 0;
+}
+
+int shall_restore_state(void) {
+ _cleanup_free_ char *line = NULL;
+ const char *p;
+ int r;
+
+ r = proc_cmdline(&line);
+ if (r < 0)
+ return r;
+
+ r = 1;
+ p = line;
+
+ for (;;) {
+ _cleanup_free_ char *word = NULL;
+ const char *e;
+ int k;
+
+ k = unquote_first_word(&p, &word, true);
+ if (k < 0)
+ return k;
+ if (k == 0)
+ break;
+
+ e = startswith(word, "systemd.restore_state=");
+ if (!e)
+ continue;
+
+ k = parse_boolean(e);
+ if (k >= 0)
+ r = k;
+ }
+
+ return r;
+}
+
+int proc_cmdline(char **ret) {
+ assert(ret);
+
+ if (detect_container(NULL) > 0)
+ return get_process_cmdline(1, 0, false, ret);
+ else
+ return read_one_line_file("/proc/cmdline", ret);
+}
+
+int parse_proc_cmdline(int (*parse_item)(const char *key, const char *value)) {
+ _cleanup_free_ char *line = NULL;
+ const char *p;
+ int r;
+
+ assert(parse_item);
+
+ r = proc_cmdline(&line);
+ if (r < 0)
+ return r;
+
+ p = line;
+ for (;;) {
+ _cleanup_free_ char *word = NULL;
+ char *value = NULL;
+
+ r = unquote_first_word(&p, &word, true);
+ if (r < 0)
+ return r;
+ if (r == 0)
+ break;
+
+ /* Filter out arguments that are intended only for the
+ * initrd */
+ if (!in_initrd() && startswith(word, "rd."))
+ continue;
+
+ value = strchr(word, '=');
+ if (value)
+ *(value++) = 0;
+
+ r = parse_item(word, value);
+ if (r < 0)
+ return r;
+ }
+
+ return 0;
+}
+
+int container_get_leader(const char *machine, pid_t *pid) {
+ _cleanup_free_ char *s = NULL, *class = NULL;
+ const char *p;
+ pid_t leader;
+ int r;
+
+ assert(machine);
+ assert(pid);
+
+ p = strappenda("/run/systemd/machines/", machine);
+ r = parse_env_file(p, NEWLINE, "LEADER", &s, "CLASS", &class, NULL);
+ if (r == -ENOENT)
+ return -EHOSTDOWN;
+ if (r < 0)
+ return r;
+ if (!s)
+ return -EIO;
+
+ if (!streq_ptr(class, "container"))
+ return -EIO;
+
+ r = parse_pid(s, &leader);
+ if (r < 0)
+ return r;
+ if (leader <= 1)
+ return -EIO;
+
+ *pid = leader;
+ return 0;
+}
+
+int namespace_open(pid_t pid, int *pidns_fd, int *mntns_fd, int *netns_fd, int *root_fd) {
+ _cleanup_close_ int pidnsfd = -1, mntnsfd = -1, netnsfd = -1;
+ int rfd = -1;
+
+ assert(pid >= 0);
+
+ if (mntns_fd) {
+ const char *mntns;
+
+ mntns = procfs_file_alloca(pid, "ns/mnt");
+ mntnsfd = open(mntns, O_RDONLY|O_NOCTTY|O_CLOEXEC);
+ if (mntnsfd < 0)
+ return -errno;
+ }
+
+ if (pidns_fd) {
+ const char *pidns;
+
+ pidns = procfs_file_alloca(pid, "ns/pid");
+ pidnsfd = open(pidns, O_RDONLY|O_NOCTTY|O_CLOEXEC);
+ if (pidnsfd < 0)
+ return -errno;
+ }
+
+ if (netns_fd) {
+ const char *netns;
+
+ netns = procfs_file_alloca(pid, "ns/net");
+ netnsfd = open(netns, O_RDONLY|O_NOCTTY|O_CLOEXEC);
+ if (netnsfd < 0)
+ return -errno;
+ }
+
+ if (root_fd) {
+ const char *root;
+
+ root = procfs_file_alloca(pid, "root");
+ rfd = open(root, O_RDONLY|O_NOCTTY|O_CLOEXEC|O_DIRECTORY);
+ if (rfd < 0)
+ return -errno;
+ }
+
+ if (pidns_fd)
+ *pidns_fd = pidnsfd;
+
+ if (mntns_fd)
+ *mntns_fd = mntnsfd;
+
+ if (netns_fd)
+ *netns_fd = netnsfd;
+
+ if (root_fd)
+ *root_fd = rfd;
+
+ pidnsfd = mntnsfd = netnsfd = -1;
+
+ return 0;
+}
+
+int namespace_enter(int pidns_fd, int mntns_fd, int netns_fd, int root_fd) {
+
+ if (pidns_fd >= 0)
+ if (setns(pidns_fd, CLONE_NEWPID) < 0)
+ return -errno;
+
+ if (mntns_fd >= 0)
+ if (setns(mntns_fd, CLONE_NEWNS) < 0)
+ return -errno;
+
+ if (netns_fd >= 0)
+ if (setns(netns_fd, CLONE_NEWNET) < 0)
+ return -errno;
+
+ if (root_fd >= 0) {
+ if (fchdir(root_fd) < 0)
+ return -errno;
+
+ if (chroot(".") < 0)
+ return -errno;
+ }
+
+ if (setresgid(0, 0, 0) < 0)
+ return -errno;
+
+ if (setgroups(0, NULL) < 0)
+ return -errno;
+
+ if (setresuid(0, 0, 0) < 0)
+ return -errno;
+
+ return 0;
+}
+
+bool pid_is_unwaited(pid_t pid) {
+ /* Checks whether a PID is still valid at all, including a zombie */
+
+ if (pid <= 0)
+ return false;
+
+ if (kill(pid, 0) >= 0)
+ return true;
+
+ return errno != ESRCH;
+}
+
+bool pid_is_alive(pid_t pid) {
+ int r;
+
+ /* Checks whether a PID is still valid and not a zombie */
+
+ if (pid <= 0)
+ return false;
+
+ r = get_process_state(pid);
+ if (r == -ENOENT || r == 'Z')
+ return false;
+
+ return true;
+}
+
+int getpeercred(int fd, struct ucred *ucred) {
+ socklen_t n = sizeof(struct ucred);
+ struct ucred u;
+ int r;
+
+ assert(fd >= 0);
+ assert(ucred);
+
+ r = getsockopt(fd, SOL_SOCKET, SO_PEERCRED, &u, &n);
+ if (r < 0)
+ return -errno;
+
+ if (n != sizeof(struct ucred))
+ return -EIO;
+
+ /* Check if the data is actually useful and not suppressed due
+ * to namespacing issues */
+ if (u.pid <= 0)
+ return -ENODATA;
+
+ *ucred = u;
+ return 0;
+}
+
+int getpeersec(int fd, char **ret) {
+ socklen_t n = 64;
+ char *s;
+ int r;
+
+ assert(fd >= 0);
+ assert(ret);
+
+ s = new0(char, n);
+ if (!s)
+ return -ENOMEM;
+
+ r = getsockopt(fd, SOL_SOCKET, SO_PEERSEC, s, &n);
+ if (r < 0) {
+ free(s);
+
+ if (errno != ERANGE)
+ return -errno;
+
+ s = new0(char, n);
+ if (!s)
+ return -ENOMEM;
+
+ r = getsockopt(fd, SOL_SOCKET, SO_PEERSEC, s, &n);
+ if (r < 0) {
+ free(s);
+ return -errno;
+ }
+ }
+
+ if (isempty(s)) {
+ free(s);
+ return -ENOTSUP;
+ }
+
+ *ret = s;
+ return 0;
+}
+#endif
+
+/* This is much like like mkostemp() but is subject to umask(). */
+int mkostemp_safe(char *pattern, int flags) {
+ _cleanup_umask_ mode_t u;
+ int fd;
+
+ assert(pattern);
+
+ u = umask(077);
+
+ fd = mkostemp(pattern, flags);
+ if (fd < 0)
+ return -errno;
+
+ return fd;
+}
+
+#if 0 /* NM_IGNORED */
+int open_tmpfile(const char *path, int flags) {
+ char *p;
+ int fd;
+
+ assert(path);
+
+#ifdef O_TMPFILE
+ /* Try O_TMPFILE first, if it is supported */
+ fd = open(path, flags|O_TMPFILE, S_IRUSR|S_IWUSR);
+ if (fd >= 0)
+ return fd;
+#endif
+
+ /* Fall back to unguessable name + unlinking */
+ p = strappenda(path, "/systemd-tmp-XXXXXX");
+
+ fd = mkostemp_safe(p, flags);
+ if (fd < 0)
+ return fd;
+
+ unlink(p);
+ return fd;
+}
+
+int fd_warn_permissions(const char *path, int fd) {
+ struct stat st;
+
+ if (fstat(fd, &st) < 0)
+ return -errno;
+
+ if (st.st_mode & 0111)
+ log_warning("Configuration file %s is marked executable. Please remove executable permission bits. Proceeding anyway.", path);
+
+ if (st.st_mode & 0002)
+ log_warning("Configuration file %s is marked world-writable. Please remove world writability permission bits. Proceeding anyway.", path);
+
+ if (getpid() == 1 && (st.st_mode & 0044) != 0044)
+ log_warning("Configuration file %s is marked world-inaccessible. This has no effect as configuration data is accessible via APIs without restrictions. Proceeding anyway.", path);
+
+ return 0;
+}
+
+unsigned long personality_from_string(const char *p) {
+
+ /* Parse a personality specifier. We introduce our own
+ * identifiers that indicate specific ABIs, rather than just
+ * hints regarding the register size, since we want to keep
+ * things open for multiple locally supported ABIs for the
+ * same register size. We try to reuse the ABI identifiers
+ * used by libseccomp. */
+
+#if defined(__x86_64__)
+
+ if (streq(p, "x86"))
+ return PER_LINUX32;
+
+ if (streq(p, "x86-64"))
+ return PER_LINUX;
+
+#elif defined(__i386__)
+
+ if (streq(p, "x86"))
+ return PER_LINUX;
+#endif
+
+ /* personality(7) documents that 0xffffffffUL is used for
+ * querying the current personality, hence let's use that here
+ * as error indicator. */
+ return 0xffffffffUL;
+}
+
+const char* personality_to_string(unsigned long p) {
+
+#if defined(__x86_64__)
+
+ if (p == PER_LINUX32)
+ return "x86";
+
+ if (p == PER_LINUX)
+ return "x86-64";
+
+#elif defined(__i386__)
+
+ if (p == PER_LINUX)
+ return "x86";
+#endif
+
+ return NULL;
+}
+
+uint64_t physical_memory(void) {
+ long mem;
+
+ /* We return this as uint64_t in case we are running as 32bit
+ * process on a 64bit kernel with huge amounts of memory */
+
+ mem = sysconf(_SC_PHYS_PAGES);
+ assert(mem > 0);
+
+ return (uint64_t) mem * (uint64_t) page_size();
+}
+
+char* mount_test_option(const char *haystack, const char *needle) {
+
+ struct mntent me = {
+ .mnt_opts = (char*) haystack
+ };
+
+ assert(needle);
+
+ /* Like glibc's hasmntopt(), but works on a string, not a
+ * struct mntent */
+
+ if (!haystack)
+ return NULL;
+
+ return hasmntopt(&me, needle);
+}
+
+void hexdump(FILE *f, const void *p, size_t s) {
+ const uint8_t *b = p;
+ unsigned n = 0;
+
+ assert(s == 0 || b);
+
+ while (s > 0) {
+ size_t i;
+
+ fprintf(f, "%04x ", n);
+
+ for (i = 0; i < 16; i++) {
+
+ if (i >= s)
+ fputs(" ", f);
+ else
+ fprintf(f, "%02x ", b[i]);
+
+ if (i == 7)
+ fputc(' ', f);
+ }
+
+ fputc(' ', f);
+
+ for (i = 0; i < 16; i++) {
+
+ if (i >= s)
+ fputc(' ', f);
+ else
+ fputc(isprint(b[i]) ? (char) b[i] : '.', f);
+ }
+
+ fputc('\n', f);
+
+ if (s < 16)
+ break;
+
+ n += 16;
+ b += 16;
+ s -= 16;
+ }
+}
+
+int update_reboot_param_file(const char *param) {
+ int r = 0;
+
+ if (param) {
+
+ r = write_string_file(REBOOT_PARAM_FILE, param);
+ if (r < 0)
+ log_error("Failed to write reboot param to "
+ REBOOT_PARAM_FILE": %s", strerror(-r));
+ } else
+ unlink(REBOOT_PARAM_FILE);
+
+ return r;
+}
+
+int umount_recursive(const char *prefix, int flags) {
+ bool again;
+ int n = 0, r;
+
+ /* Try to umount everything recursively below a
+ * directory. Also, take care of stacked mounts, and keep
+ * unmounting them until they are gone. */
+
+ do {
+ _cleanup_fclose_ FILE *proc_self_mountinfo = NULL;
+
+ again = false;
+ r = 0;
+
+ proc_self_mountinfo = fopen("/proc/self/mountinfo", "re");
+ if (!proc_self_mountinfo)
+ return -errno;
+
+ for (;;) {
+ _cleanup_free_ char *path = NULL, *p = NULL;
+ int k;
+
+ k = fscanf(proc_self_mountinfo,
+ "%*s " /* (1) mount id */
+ "%*s " /* (2) parent id */
+ "%*s " /* (3) major:minor */
+ "%*s " /* (4) root */
+ "%ms " /* (5) mount point */
+ "%*s" /* (6) mount options */
+ "%*[^-]" /* (7) optional fields */
+ "- " /* (8) separator */
+ "%*s " /* (9) file system type */
+ "%*s" /* (10) mount source */
+ "%*s" /* (11) mount options 2 */
+ "%*[^\n]", /* some rubbish at the end */
+ &path);
+ if (k != 1) {
+ if (k == EOF)
+ break;
+
+ continue;
+ }
+
+ p = cunescape(path);
+ if (!p)
+ return -ENOMEM;
+
+ if (!path_startswith(p, prefix))
+ continue;
+
+ if (umount2(p, flags) < 0) {
+ r = -errno;
+ continue;
+ }
+
+ again = true;
+ n++;
+
+ break;
+ }
+
+ } while (again);
+
+ return r ? r : n;
+}
+
+int bind_remount_recursive(const char *prefix, bool ro) {
+ _cleanup_set_free_free_ Set *done = NULL;
+ _cleanup_free_ char *cleaned = NULL;
+ int r;
+
+ /* Recursively remount a directory (and all its submounts)
+ * read-only or read-write. If the directory is already
+ * mounted, we reuse the mount and simply mark it
+ * MS_BIND|MS_RDONLY (or remove the MS_RDONLY for read-write
+ * operation). If it isn't we first make it one. Afterwards we
+ * apply MS_BIND|MS_RDONLY (or remove MS_RDONLY) to all
+ * submounts we can access, too. When mounts are stacked on
+ * the same mount point we only care for each individual
+ * "top-level" mount on each point, as we cannot
+ * influence/access the underlying mounts anyway. We do not
+ * have any effect on future submounts that might get
+ * propagated, they migt be writable. This includes future
+ * submounts that have been triggered via autofs. */
+
+ cleaned = strdup(prefix);
+ if (!cleaned)
+ return -ENOMEM;
+
+ path_kill_slashes(cleaned);
+
+ done = set_new(&string_hash_ops);
+ if (!done)
+ return -ENOMEM;
+
+ for (;;) {
+ _cleanup_fclose_ FILE *proc_self_mountinfo = NULL;
+ _cleanup_set_free_free_ Set *todo = NULL;
+ bool top_autofs = false;
+ char *x;
+
+ todo = set_new(&string_hash_ops);
+ if (!todo)
+ return -ENOMEM;
+
+ proc_self_mountinfo = fopen("/proc/self/mountinfo", "re");
+ if (!proc_self_mountinfo)
+ return -errno;
+
+ for (;;) {
+ _cleanup_free_ char *path = NULL, *p = NULL, *type = NULL;
+ int k;
+
+ k = fscanf(proc_self_mountinfo,
+ "%*s " /* (1) mount id */
+ "%*s " /* (2) parent id */
+ "%*s " /* (3) major:minor */
+ "%*s " /* (4) root */
+ "%ms " /* (5) mount point */
+ "%*s" /* (6) mount options (superblock) */
+ "%*[^-]" /* (7) optional fields */
+ "- " /* (8) separator */
+ "%ms " /* (9) file system type */
+ "%*s" /* (10) mount source */
+ "%*s" /* (11) mount options (bind mount) */
+ "%*[^\n]", /* some rubbish at the end */
+ &path,
+ &type);
+ if (k != 2) {
+ if (k == EOF)
+ break;
+
+ continue;
+ }
+
+ p = cunescape(path);
+ if (!p)
+ return -ENOMEM;
+
+ /* Let's ignore autofs mounts. If they aren't
+ * triggered yet, we want to avoid triggering
+ * them, as we don't make any guarantees for
+ * future submounts anyway. If they are
+ * already triggered, then we will find
+ * another entry for this. */
+ if (streq(type, "autofs")) {
+ top_autofs = top_autofs || path_equal(cleaned, p);
+ continue;
+ }
+
+ if (path_startswith(p, cleaned) &&
+ !set_contains(done, p)) {
+
+ r = set_consume(todo, p);
+ p = NULL;
+
+ if (r == -EEXIST)
+ continue;
+ if (r < 0)
+ return r;
+ }
+ }
+
+ /* If we have no submounts to process anymore and if
+ * the root is either already done, or an autofs, we
+ * are done */
+ if (set_isempty(todo) &&
+ (top_autofs || set_contains(done, cleaned)))
+ return 0;
+
+ if (!set_contains(done, cleaned) &&
+ !set_contains(todo, cleaned)) {
+ /* The prefix directory itself is not yet a
+ * mount, make it one. */
+ if (mount(cleaned, cleaned, NULL, MS_BIND|MS_REC, NULL) < 0)
+ return -errno;
+
+ if (mount(NULL, prefix, NULL, MS_BIND|MS_REMOUNT|(ro ? MS_RDONLY : 0), NULL) < 0)
+ return -errno;
+
+ x = strdup(cleaned);
+ if (!x)
+ return -ENOMEM;
+
+ r = set_consume(done, x);
+ if (r < 0)
+ return r;
+ }
+
+ while ((x = set_steal_first(todo))) {
+
+ r = set_consume(done, x);
+ if (r == -EEXIST)
+ continue;
+ if (r < 0)
+ return r;
+
+ if (mount(NULL, x, NULL, MS_BIND|MS_REMOUNT|(ro ? MS_RDONLY : 0), NULL) < 0) {
+
+ /* Deal with mount points that are
+ * obstructed by a later mount */
+
+ if (errno != ENOENT)
+ return -errno;
+ }
+
+ }
+ }
+}
+#endif
+
+int fflush_and_check(FILE *f) {
+ assert(f);
+
+ errno = 0;
+ fflush(f);
+
+ if (ferror(f))
+ return errno ? -errno : -EIO;
+
+ return 0;
+}
+
+char *tempfn_xxxxxx(const char *p) {
+ const char *fn;
+ char *t;
+ size_t k;
+
+ assert(p);
+
+ t = new(char, strlen(p) + 1 + 6 + 1);
+ if (!t)
+ return NULL;
+
+ fn = basename(p);
+ k = fn - p;
+
+ strcpy(stpcpy(stpcpy(mempcpy(t, p, k), "."), fn), "XXXXXX");
+
+ return t;
+}
+
+#if 0 /* NM_IGNORED */
+char *tempfn_random(const char *p) {
+ const char *fn;
+ char *t, *x;
+ uint64_t u;
+ size_t k;
+ unsigned i;
+
+ assert(p);
+
+ t = new(char, strlen(p) + 1 + 16 + 1);
+ if (!t)
+ return NULL;
+
+ fn = basename(p);
+ k = fn - p;
+
+ x = stpcpy(stpcpy(mempcpy(t, p, k), "."), fn);
+
+ u = random_u64();
+ for (i = 0; i < 16; i++) {
+ *(x++) = hexchar(u & 0xF);
+ u >>= 4;
+ }
+
+ *x = 0;
+
+ return t;
+}
+#endif
+
+/* make sure the hostname is not "localhost" */
+bool is_localhost(const char *hostname) {
+ assert(hostname);
+
+ /* This tries to identify local host and domain names
+ * described in RFC6761 plus the redhatism of .localdomain */
+
+ return streq(hostname, "localhost") ||
+ streq(hostname, "localhost.") ||
+ streq(hostname, "localdomain.") ||
+ streq(hostname, "localdomain") ||
+ endswith(hostname, ".localhost") ||
+ endswith(hostname, ".localhost.") ||
+ endswith(hostname, ".localdomain") ||
+ endswith(hostname, ".localdomain.");
+}
+
+#if 0 /* NM_IGNORED */
+int take_password_lock(const char *root) {
+
+ struct flock flock = {
+ .l_type = F_WRLCK,
+ .l_whence = SEEK_SET,
+ .l_start = 0,
+ .l_len = 0,
+ };
+
+ const char *path;
+ int fd, r;
+
+ /* This is roughly the same as lckpwdf(), but not as awful. We
+ * don't want to use alarm() and signals, hence we implement
+ * our own trivial version of this.
+ *
+ * Note that shadow-utils also takes per-database locks in
+ * addition to lckpwdf(). However, we don't given that they
+ * are redundant as they they invoke lckpwdf() first and keep
+ * it during everything they do. The per-database locks are
+ * awfully racy, and thus we just won't do them. */
+
+ if (root)
+ path = strappenda(root, "/etc/.pwd.lock");
+ else
+ path = "/etc/.pwd.lock";
+
+ fd = open(path, O_WRONLY|O_CREAT|O_CLOEXEC|O_NOCTTY|O_NOFOLLOW, 0600);
+ if (fd < 0)
+ return -errno;
+
+ r = fcntl(fd, F_SETLKW, &flock);
+ if (r < 0) {
+ safe_close(fd);
+ return -errno;
+ }
+
+ return fd;
+}
+
+int is_symlink(const char *path) {
+ struct stat info;
+
+ if (lstat(path, &info) < 0)
+ return -errno;
+
+ return !!S_ISLNK(info.st_mode);
+}
+
+int is_dir(const char* path, bool follow) {
+ struct stat st;
+ int r;
+
+ if (follow)
+ r = stat(path, &st);
+ else
+ r = lstat(path, &st);
+ if (r < 0)
+ return -errno;
+
+ return !!S_ISDIR(st.st_mode);
+}
+
+int unquote_first_word(const char **p, char **ret, bool relax) {
+ _cleanup_free_ char *s = NULL;
+ size_t allocated = 0, sz = 0;
+
+ enum {
+ START,
+ VALUE,
+ VALUE_ESCAPE,
+ SINGLE_QUOTE,
+ SINGLE_QUOTE_ESCAPE,
+ DOUBLE_QUOTE,
+ DOUBLE_QUOTE_ESCAPE,
+ SPACE,
+ } state = START;
+
+ assert(p);
+ assert(*p);
+ assert(ret);
+
+ /* Parses the first word of a string, and returns it in
+ * *ret. Removes all quotes in the process. When parsing fails
+ * (because of an uneven number of quotes or similar), leaves
+ * the pointer *p at the first invalid character. */
+
+ for (;;) {
+ char c = **p;
+
+ switch (state) {
+
+ case START:
+ if (c == 0)
+ goto finish;
+ else if (strchr(WHITESPACE, c))
+ break;
+
+ state = VALUE;
+ /* fallthrough */
+
+ case VALUE:
+ if (c == 0)
+ goto finish;
+ else if (c == '\'')
+ state = SINGLE_QUOTE;
+ else if (c == '\\')
+ state = VALUE_ESCAPE;
+ else if (c == '\"')
+ state = DOUBLE_QUOTE;
+ else if (strchr(WHITESPACE, c))
+ state = SPACE;
+ else {
+ if (!GREEDY_REALLOC(s, allocated, sz+2))
+ return -ENOMEM;
+
+ s[sz++] = c;
+ }
+
+ break;
+
+ case VALUE_ESCAPE:
+ if (c == 0) {
+ if (relax)
+ goto finish;
+ return -EINVAL;
+ }
+
+ if (!GREEDY_REALLOC(s, allocated, sz+2))
+ return -ENOMEM;
+
+ s[sz++] = c;
+ state = VALUE;
+
+ break;
+
+ case SINGLE_QUOTE:
+ if (c == 0) {
+ if (relax)
+ goto finish;
+ return -EINVAL;
+ } else if (c == '\'')
+ state = VALUE;
+ else if (c == '\\')
+ state = SINGLE_QUOTE_ESCAPE;
+ else {
+ if (!GREEDY_REALLOC(s, allocated, sz+2))
+ return -ENOMEM;
+
+ s[sz++] = c;
+ }
+
+ break;
+
+ case SINGLE_QUOTE_ESCAPE:
+ if (c == 0) {
+ if (relax)
+ goto finish;
+ return -EINVAL;
+ }
+
+ if (!GREEDY_REALLOC(s, allocated, sz+2))
+ return -ENOMEM;
+
+ s[sz++] = c;
+ state = SINGLE_QUOTE;
+ break;
+
+ case DOUBLE_QUOTE:
+ if (c == 0)
+ return -EINVAL;
+ else if (c == '\"')
+ state = VALUE;
+ else if (c == '\\')
+ state = DOUBLE_QUOTE_ESCAPE;
+ else {
+ if (!GREEDY_REALLOC(s, allocated, sz+2))
+ return -ENOMEM;
+
+ s[sz++] = c;
+ }
+
+ break;
+
+ case DOUBLE_QUOTE_ESCAPE:
+ if (c == 0) {
+ if (relax)
+ goto finish;
+ return -EINVAL;
+ }
+
+ if (!GREEDY_REALLOC(s, allocated, sz+2))
+ return -ENOMEM;
+
+ s[sz++] = c;
+ state = DOUBLE_QUOTE;
+ break;
+
+ case SPACE:
+ if (c == 0)
+ goto finish;
+ if (!strchr(WHITESPACE, c))
+ goto finish;
+
+ break;
+ }
+
+ (*p) ++;
+ }
+
+finish:
+ if (!s) {
+ *ret = NULL;
+ return 0;
+ }
+
+ s[sz] = 0;
+ *ret = s;
+ s = NULL;
+
+ return 1;
+}
+
+int unquote_many_words(const char **p, ...) {
+ va_list ap;
+ char **l;
+ int n = 0, i, c, r;
+
+ /* Parses a number of words from a string, stripping any
+ * quotes if necessary. */
+
+ assert(p);
+
+ /* Count how many words are expected */
+ va_start(ap, p);
+ for (;;) {
+ if (!va_arg(ap, char **))
+ break;
+ n++;
+ }
+ va_end(ap);
+
+ if (n <= 0)
+ return 0;
+
+ /* Read all words into a temporary array */
+ l = newa0(char*, n);
+ for (c = 0; c < n; c++) {
+
+ r = unquote_first_word(p, &l[c], false);
+ if (r < 0) {
+ int j;
+
+ for (j = 0; j < c; j++)
+ free(l[j]);
+
+ return r;
+ }
+
+ if (r == 0)
+ break;
+ }
+
+ /* If we managed to parse all words, return them in the passed
+ * in parameters */
+ va_start(ap, p);
+ for (i = 0; i < n; i++) {
+ char **v;
+
+ v = va_arg(ap, char **);
+ assert(v);
+
+ *v = l[i];
+ }
+ va_end(ap);
+
+ return c;
+}
+
+int free_and_strdup(char **p, const char *s) {
+ char *t;
+
+ assert(p);
+
+ /* Replaces a string pointer with an strdup()ed new string,
+ * possibly freeing the old one. */
+
+ if (s) {
+ t = strdup(s);
+ if (!t)
+ return -ENOMEM;
+ } else
+ t = NULL;
+
+ free(*p);
+ *p = t;
+
+ return 0;
+}
+
+int sethostname_idempotent(const char *s) {
+ int r;
+ char buf[HOST_NAME_MAX + 1] = {};
+
+ assert(s);
+
+ r = gethostname(buf, sizeof(buf));
+ if (r < 0)
+ return -errno;
+
+ if (streq(buf, s))
+ return 0;
+
+ r = sethostname(s, strlen(s));
+ if (r < 0)
+ return -errno;
+
+ return 1;
+}
+#endif
+
diff --git a/src/dhcp-manager/systemd-dhcp/src/shared/util.h b/src/dhcp-manager/systemd-dhcp/src/shared/util.h
new file mode 100644
index 000000000..a7690655e
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/shared/util.h
@@ -0,0 +1,1038 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#pragma once
+
+/***
+ This file is part of systemd.
+
+ Copyright 2010 Lennart Poettering
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include "nm-sd-adapt.h"
+
+#include <alloca.h>
+#include <fcntl.h>
+#include <inttypes.h>
+#include <time.h>
+#include <sys/time.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <signal.h>
+#include <sched.h>
+#include <limits.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <dirent.h>
+#include <sys/resource.h>
+#include <stddef.h>
+#include <unistd.h>
+#include <locale.h>
+#include <mntent.h>
+#include <sys/socket.h>
+
+#if 0 /* NM_IGNORED */
+#if SIZEOF_PID_T == 4
+# define PID_FMT "%" PRIu32
+#elif SIZEOF_PID_T == 2
+# define PID_FMT "%" PRIu16
+#else
+# error Unknown pid_t size
+#endif
+
+#if SIZEOF_UID_T == 4
+# define UID_FMT "%" PRIu32
+#elif SIZEOF_UID_T == 2
+# define UID_FMT "%" PRIu16
+#else
+# error Unknown uid_t size
+#endif
+
+#if SIZEOF_GID_T == 4
+# define GID_FMT "%" PRIu32
+#elif SIZEOF_GID_T == 2
+# define GID_FMT "%" PRIu16
+#else
+# error Unknown gid_t size
+#endif
+
+#if SIZEOF_TIME_T == 8
+# define PRI_TIME PRIu64
+#elif SIZEOF_TIME_T == 4
+# define PRI_TIME PRIu32
+#else
+# error Unknown time_t size
+#endif
+
+#if SIZEOF_RLIM_T == 8
+# define RLIM_FMT "%" PRIu64
+#elif SIZEOF_RLIM_T == 4
+# define RLIM_FMT "%" PRIu32
+#else
+# error Unknown rlim_t size
+#endif
+#endif
+
+#include "macro.h"
+#if 0 /* NM_IGNORED */
+#include "missing.h"
+#endif
+#include "time-util.h"
+
+/* What is interpreted as whitespace? */
+#define WHITESPACE " \t\n\r"
+#define NEWLINE "\n\r"
+#define QUOTES "\"\'"
+#define COMMENTS "#;"
+#define GLOB_CHARS "*?["
+
+/* What characters are special in the shell? */
+/* must be escaped outside and inside double-quotes */
+#define SHELL_NEED_ESCAPE "\"\\`$"
+/* can be escaped or double-quoted */
+#define SHELL_NEED_QUOTES SHELL_NEED_ESCAPE GLOB_CHARS "'()<>|&;"
+
+#define FORMAT_BYTES_MAX 8
+
+#define ANSI_HIGHLIGHT_ON "\x1B[1;39m"
+#define ANSI_RED_ON "\x1B[31m"
+#define ANSI_HIGHLIGHT_RED_ON "\x1B[1;31m"
+#define ANSI_GREEN_ON "\x1B[32m"
+#define ANSI_HIGHLIGHT_GREEN_ON "\x1B[1;32m"
+#define ANSI_HIGHLIGHT_YELLOW_ON "\x1B[1;33m"
+#define ANSI_HIGHLIGHT_BLUE_ON "\x1B[1;34m"
+#define ANSI_HIGHLIGHT_OFF "\x1B[0m"
+#define ANSI_ERASE_TO_END_OF_LINE "\x1B[K"
+
+size_t page_size(void);
+#define PAGE_ALIGN(l) ALIGN_TO((l), page_size())
+
+#define streq(a,b) (strcmp((a),(b)) == 0)
+#define strneq(a, b, n) (strncmp((a), (b), (n)) == 0)
+#define strcaseeq(a,b) (strcasecmp((a),(b)) == 0)
+#define strncaseeq(a, b, n) (strncasecmp((a), (b), (n)) == 0)
+
+bool streq_ptr(const char *a, const char *b) _pure_;
+
+#define new(t, n) ((t*) malloc_multiply(sizeof(t), (n)))
+
+#define new0(t, n) ((t*) calloc((n), sizeof(t)))
+
+#define newa(t, n) ((t*) alloca(sizeof(t)*(n)))
+
+#define newa0(t, n) ((t*) alloca0(sizeof(t)*(n)))
+
+#define newdup(t, p, n) ((t*) memdup_multiply(p, sizeof(t), (n)))
+
+#define malloc0(n) (calloc((n), 1))
+
+static inline const char* yes_no(bool b) {
+ return b ? "yes" : "no";
+}
+
+static inline const char* true_false(bool b) {
+ return b ? "true" : "false";
+}
+
+static inline const char* strempty(const char *s) {
+ return s ? s : "";
+}
+
+static inline const char* strnull(const char *s) {
+ return s ? s : "(null)";
+}
+
+static inline const char *strna(const char *s) {
+ return s ? s : "n/a";
+}
+
+static inline bool isempty(const char *p) {
+ return !p || !p[0];
+}
+
+static inline char *startswith(const char *s, const char *prefix) {
+ size_t l;
+
+ l = strlen(prefix);
+ if (strncmp(s, prefix, l) == 0)
+ return (char*) s + l;
+
+ return NULL;
+}
+
+static inline char *startswith_no_case(const char *s, const char *prefix) {
+ size_t l;
+
+ l = strlen(prefix);
+ if (strncasecmp(s, prefix, l) == 0)
+ return (char*) s + l;
+
+ return NULL;
+}
+
+char *endswith(const char *s, const char *postfix) _pure_;
+
+char *first_word(const char *s, const char *word) _pure_;
+
+int close_nointr(int fd);
+int safe_close(int fd);
+void safe_close_pair(int p[]);
+
+void close_many(const int fds[], unsigned n_fd);
+
+int parse_size(const char *t, off_t base, off_t *size);
+
+int parse_boolean(const char *v) _pure_;
+int parse_pid(const char *s, pid_t* ret_pid);
+int parse_uid(const char *s, uid_t* ret_uid);
+#define parse_gid(s, ret_uid) parse_uid(s, ret_uid)
+
+int safe_atou(const char *s, unsigned *ret_u);
+int safe_atoi(const char *s, int *ret_i);
+
+int safe_atollu(const char *s, unsigned long long *ret_u);
+int safe_atolli(const char *s, long long int *ret_i);
+
+int safe_atod(const char *s, double *ret_d);
+
+int safe_atou8(const char *s, uint8_t *ret);
+
+#if LONG_MAX == INT_MAX
+static inline int safe_atolu(const char *s, unsigned long *ret_u) {
+ assert_cc(sizeof(unsigned long) == sizeof(unsigned));
+ return safe_atou(s, (unsigned*) ret_u);
+}
+static inline int safe_atoli(const char *s, long int *ret_u) {
+ assert_cc(sizeof(long int) == sizeof(int));
+ return safe_atoi(s, (int*) ret_u);
+}
+#else
+static inline int safe_atolu(const char *s, unsigned long *ret_u) {
+ assert_cc(sizeof(unsigned long) == sizeof(unsigned long long));
+ return safe_atollu(s, (unsigned long long*) ret_u);
+}
+static inline int safe_atoli(const char *s, long int *ret_u) {
+ assert_cc(sizeof(long int) == sizeof(long long int));
+ return safe_atolli(s, (long long int*) ret_u);
+}
+#endif
+
+static inline int safe_atou32(const char *s, uint32_t *ret_u) {
+ assert_cc(sizeof(uint32_t) == sizeof(unsigned));
+ return safe_atou(s, (unsigned*) ret_u);
+}
+
+static inline int safe_atoi32(const char *s, int32_t *ret_i) {
+ assert_cc(sizeof(int32_t) == sizeof(int));
+ return safe_atoi(s, (int*) ret_i);
+}
+
+static inline int safe_atou64(const char *s, uint64_t *ret_u) {
+ assert_cc(sizeof(uint64_t) == sizeof(unsigned long long));
+ return safe_atollu(s, (unsigned long long*) ret_u);
+}
+
+static inline int safe_atoi64(const char *s, int64_t *ret_i) {
+ assert_cc(sizeof(int64_t) == sizeof(long long int));
+ return safe_atolli(s, (long long int*) ret_i);
+}
+
+int safe_atou16(const char *s, uint16_t *ret);
+int safe_atoi16(const char *s, int16_t *ret);
+
+const char* split(const char **state, size_t *l, const char *separator, bool quoted);
+
+#define FOREACH_WORD(word, length, s, state) \
+ _FOREACH_WORD(word, length, s, WHITESPACE, false, state)
+
+#define FOREACH_WORD_SEPARATOR(word, length, s, separator, state) \
+ _FOREACH_WORD(word, length, s, separator, false, state)
+
+#define FOREACH_WORD_QUOTED(word, length, s, state) \
+ _FOREACH_WORD(word, length, s, WHITESPACE, true, state)
+
+#define _FOREACH_WORD(word, length, s, separator, quoted, state) \
+ for ((state) = (s), (word) = split(&(state), &(length), (separator), (quoted)); (word); (word) = split(&(state), &(length), (separator), (quoted)))
+
+pid_t get_parent_of_pid(pid_t pid, pid_t *ppid);
+int get_starttime_of_pid(pid_t pid, unsigned long long *st);
+
+char *strappend(const char *s, const char *suffix);
+char *strnappend(const char *s, const char *suffix, size_t length);
+
+char *replace_env(const char *format, char **env);
+char **replace_env_argv(char **argv, char **env);
+
+int readlinkat_malloc(int fd, const char *p, char **ret);
+int readlink_malloc(const char *p, char **r);
+int readlink_value(const char *p, char **ret);
+int readlink_and_make_absolute(const char *p, char **r);
+int readlink_and_canonicalize(const char *p, char **r);
+
+int reset_all_signal_handlers(void);
+int reset_signal_mask(void);
+
+char *strstrip(char *s);
+char *delete_chars(char *s, const char *bad);
+char *truncate_nl(char *s);
+
+char *file_in_same_dir(const char *path, const char *filename);
+
+int rmdir_parents(const char *path, const char *stop);
+
+int get_process_state(pid_t pid);
+int get_process_comm(pid_t pid, char **name);
+int get_process_cmdline(pid_t pid, size_t max_length, bool comm_fallback, char **line);
+int get_process_exe(pid_t pid, char **name);
+int get_process_uid(pid_t pid, uid_t *uid);
+int get_process_gid(pid_t pid, gid_t *gid);
+int get_process_capeff(pid_t pid, char **capeff);
+
+char hexchar(int x) _const_;
+int unhexchar(char c) _const_;
+char octchar(int x) _const_;
+int unoctchar(char c) _const_;
+char decchar(int x) _const_;
+int undecchar(char c) _const_;
+
+char *cescape(const char *s);
+char *cunescape(const char *s);
+char *cunescape_length(const char *s, size_t length);
+char *cunescape_length_with_prefix(const char *s, size_t length, const char *prefix);
+
+char *xescape(const char *s, const char *bad);
+
+char *ascii_strlower(char *path);
+
+bool dirent_is_file(const struct dirent *de) _pure_;
+bool dirent_is_file_with_suffix(const struct dirent *de, const char *suffix) _pure_;
+
+bool ignore_file(const char *filename) _pure_;
+
+bool chars_intersect(const char *a, const char *b) _pure_;
+
+int make_stdio(int fd);
+int make_null_stdio(void);
+int make_console_stdio(void);
+
+int dev_urandom(void *p, size_t n);
+void random_bytes(void *p, size_t n);
+void initialize_srand(void);
+
+static inline uint64_t random_u64(void) {
+ uint64_t u;
+ random_bytes(&u, sizeof(u));
+ return u;
+}
+
+static inline uint32_t random_u32(void) {
+ uint32_t u;
+ random_bytes(&u, sizeof(u));
+ return u;
+}
+
+/* For basic lookup tables with strictly enumerated entries */
+#define __DEFINE_STRING_TABLE_LOOKUP(name,type,scope) \
+ scope const char *name##_to_string(type i) { \
+ if (i < 0 || i >= (type) ELEMENTSOF(name##_table)) \
+ return NULL; \
+ return name##_table[i]; \
+ } \
+ scope type name##_from_string(const char *s) { \
+ type i; \
+ if (!s) \
+ return (type) -1; \
+ for (i = 0; i < (type)ELEMENTSOF(name##_table); i++) \
+ if (name##_table[i] && \
+ streq(name##_table[i], s)) \
+ return i; \
+ return (type) -1; \
+ } \
+ struct __useless_struct_to_allow_trailing_semicolon__
+
+#define DEFINE_STRING_TABLE_LOOKUP(name,type) __DEFINE_STRING_TABLE_LOOKUP(name,type,)
+#define DEFINE_PRIVATE_STRING_TABLE_LOOKUP(name,type) __DEFINE_STRING_TABLE_LOOKUP(name,type,static)
+
+/* For string conversions where numbers are also acceptable */
+#define DEFINE_STRING_TABLE_LOOKUP_WITH_FALLBACK(name,type,max) \
+ int name##_to_string_alloc(type i, char **str) { \
+ char *s; \
+ int r; \
+ if (i < 0 || i > max) \
+ return -ERANGE; \
+ if (i < (type) ELEMENTSOF(name##_table)) { \
+ s = strdup(name##_table[i]); \
+ if (!s) \
+ return log_oom(); \
+ } else { \
+ r = asprintf(&s, "%u", i); \
+ if (r < 0) \
+ return log_oom(); \
+ } \
+ *str = s; \
+ return 0; \
+ } \
+ type name##_from_string(const char *s) { \
+ type i; \
+ unsigned u = 0; \
+ assert(s); \
+ for (i = 0; i < (type)ELEMENTSOF(name##_table); i++) \
+ if (name##_table[i] && \
+ streq(name##_table[i], s)) \
+ return i; \
+ if (safe_atou(s, &u) >= 0 && u <= max) \
+ return (type) u; \
+ return (type) -1; \
+ } \
+ struct __useless_struct_to_allow_trailing_semicolon__
+
+int fd_nonblock(int fd, bool nonblock);
+int fd_cloexec(int fd, bool cloexec);
+
+int close_all_fds(const int except[], unsigned n_except);
+
+bool fstype_is_network(const char *fstype);
+
+int chvt(int vt);
+
+int read_one_char(FILE *f, char *ret, usec_t timeout, bool *need_nl);
+int ask_char(char *ret, const char *replies, const char *text, ...) _printf_(3, 4);
+int ask_string(char **ret, const char *text, ...) _printf_(2, 3);
+
+int reset_terminal_fd(int fd, bool switch_to_text);
+int reset_terminal(const char *name);
+
+int open_terminal(const char *name, int mode);
+int acquire_terminal(const char *name, bool fail, bool force, bool ignore_tiocstty_eperm, usec_t timeout);
+int release_terminal(void);
+
+int flush_fd(int fd);
+
+int ignore_signals(int sig, ...);
+int default_signals(int sig, ...);
+int sigaction_many(const struct sigaction *sa, ...);
+
+int fopen_temporary(const char *path, FILE **_f, char **_temp_path);
+
+ssize_t loop_read(int fd, void *buf, size_t nbytes, bool do_poll);
+ssize_t loop_write(int fd, const void *buf, size_t nbytes, bool do_poll);
+
+bool is_device_path(const char *path);
+
+int dir_is_empty(const char *path);
+char* dirname_malloc(const char *path);
+
+void rename_process(const char name[8]);
+
+void sigset_add_many(sigset_t *ss, ...);
+int sigprocmask_many(int how, ...);
+
+bool hostname_is_set(void);
+
+char* lookup_uid(uid_t uid);
+char* gethostname_malloc(void);
+char* getlogname_malloc(void);
+char* getusername_malloc(void);
+
+int getttyname_malloc(int fd, char **r);
+int getttyname_harder(int fd, char **r);
+
+int get_ctty_devnr(pid_t pid, dev_t *d);
+int get_ctty(pid_t, dev_t *_devnr, char **r);
+
+int chmod_and_chown(const char *path, mode_t mode, uid_t uid, gid_t gid);
+int fchmod_and_fchown(int fd, mode_t mode, uid_t uid, gid_t gid);
+
+int rm_rf_children(int fd, bool only_dirs, bool honour_sticky, struct stat *root_dev);
+int rm_rf_children_dangerous(int fd, bool only_dirs, bool honour_sticky, struct stat *root_dev);
+int rm_rf(const char *path, bool only_dirs, bool delete_root, bool honour_sticky);
+int rm_rf_dangerous(const char *path, bool only_dirs, bool delete_root, bool honour_sticky);
+
+int pipe_eof(int fd);
+
+cpu_set_t* cpu_set_malloc(unsigned *ncpus);
+
+int status_vprintf(const char *status, bool ellipse, bool ephemeral, const char *format, va_list ap) _printf_(4,0);
+int status_printf(const char *status, bool ellipse, bool ephemeral, const char *format, ...) _printf_(4,5);
+
+int fd_columns(int fd);
+unsigned columns(void);
+int fd_lines(int fd);
+unsigned lines(void);
+void columns_lines_cache_reset(int _unused_ signum);
+
+bool on_tty(void);
+
+static inline const char *ansi_highlight(void) {
+ return on_tty() ? ANSI_HIGHLIGHT_ON : "";
+}
+
+static inline const char *ansi_highlight_red(void) {
+ return on_tty() ? ANSI_HIGHLIGHT_RED_ON : "";
+}
+
+static inline const char *ansi_highlight_green(void) {
+ return on_tty() ? ANSI_HIGHLIGHT_GREEN_ON : "";
+}
+
+static inline const char *ansi_highlight_yellow(void) {
+ return on_tty() ? ANSI_HIGHLIGHT_YELLOW_ON : "";
+}
+
+static inline const char *ansi_highlight_blue(void) {
+ return on_tty() ? ANSI_HIGHLIGHT_BLUE_ON : "";
+}
+
+static inline const char *ansi_highlight_off(void) {
+ return on_tty() ? ANSI_HIGHLIGHT_OFF : "";
+}
+
+int files_same(const char *filea, const char *fileb);
+
+int running_in_chroot(void);
+
+char *ellipsize(const char *s, size_t length, unsigned percent);
+ /* bytes columns */
+char *ellipsize_mem(const char *s, size_t old_length, size_t new_length, unsigned percent);
+
+int touch_file(const char *path, bool parents, usec_t stamp, uid_t uid, gid_t gid, mode_t mode);
+int touch(const char *path);
+
+char *unquote(const char *s, const char *quotes);
+char *normalize_env_assignment(const char *s);
+
+int wait_for_terminate(pid_t pid, siginfo_t *status);
+int wait_for_terminate_and_warn(const char *name, pid_t pid);
+
+noreturn void freeze(void);
+
+bool null_or_empty(struct stat *st) _pure_;
+int null_or_empty_path(const char *fn);
+int null_or_empty_fd(int fd);
+
+DIR *xopendirat(int dirfd, const char *name, int flags);
+
+char *fstab_node_to_udev_node(const char *p);
+
+char *resolve_dev_console(char **active);
+bool tty_is_vc(const char *tty);
+bool tty_is_vc_resolve(const char *tty);
+bool tty_is_console(const char *tty) _pure_;
+int vtnr_from_tty(const char *tty);
+const char *default_term_for_tty(const char *tty);
+
+void execute_directory(const char *directory, DIR *_d, usec_t timeout, char *argv[]);
+
+int kill_and_sigcont(pid_t pid, int sig);
+
+bool nulstr_contains(const char*nulstr, const char *needle);
+
+bool plymouth_running(void);
+
+bool hostname_is_valid(const char *s) _pure_;
+char* hostname_cleanup(char *s, bool lowercase);
+
+bool machine_name_is_valid(const char *s) _pure_;
+
+char* strshorten(char *s, size_t l);
+
+int terminal_vhangup_fd(int fd);
+int terminal_vhangup(const char *name);
+
+int vt_disallocate(const char *name);
+
+int symlink_atomic(const char *from, const char *to);
+int mknod_atomic(const char *path, mode_t mode, dev_t dev);
+int mkfifo_atomic(const char *path, mode_t mode);
+
+int fchmod_umask(int fd, mode_t mode);
+
+bool display_is_local(const char *display) _pure_;
+int socket_from_display(const char *display, char **path);
+
+int get_user_creds(const char **username, uid_t *uid, gid_t *gid, const char **home, const char **shell);
+int get_group_creds(const char **groupname, gid_t *gid);
+
+int in_gid(gid_t gid);
+int in_group(const char *name);
+
+char* uid_to_name(uid_t uid);
+char* gid_to_name(gid_t gid);
+
+int glob_exists(const char *path);
+int glob_extend(char ***strv, const char *path);
+
+int dirent_ensure_type(DIR *d, struct dirent *de);
+
+int get_files_in_directory(const char *path, char ***list);
+
+char *strjoin(const char *x, ...) _sentinel_;
+
+bool is_main_thread(void);
+
+static inline bool _pure_ in_charset(const char *s, const char* charset) {
+ assert(s);
+ assert(charset);
+ return s[strspn(s, charset)] == '\0';
+}
+
+int block_get_whole_disk(dev_t d, dev_t *ret);
+
+#define NULSTR_FOREACH(i, l) \
+ for ((i) = (l); (i) && *(i); (i) = strchr((i), 0)+1)
+
+#define NULSTR_FOREACH_PAIR(i, j, l) \
+ for ((i) = (l), (j) = strchr((i), 0)+1; (i) && *(i); (i) = strchr((j), 0)+1, (j) = *(i) ? strchr((i), 0)+1 : (i))
+
+int ioprio_class_to_string_alloc(int i, char **s);
+int ioprio_class_from_string(const char *s);
+
+const char *sigchld_code_to_string(int i) _const_;
+int sigchld_code_from_string(const char *s) _pure_;
+
+int log_facility_unshifted_to_string_alloc(int i, char **s);
+int log_facility_unshifted_from_string(const char *s);
+
+int log_level_to_string_alloc(int i, char **s);
+int log_level_from_string(const char *s);
+
+int sched_policy_to_string_alloc(int i, char **s);
+int sched_policy_from_string(const char *s);
+
+const char *rlimit_to_string(int i) _const_;
+int rlimit_from_string(const char *s) _pure_;
+
+int ip_tos_to_string_alloc(int i, char **s);
+int ip_tos_from_string(const char *s);
+
+const char *signal_to_string(int i) _const_;
+int signal_from_string(const char *s) _pure_;
+
+int signal_from_string_try_harder(const char *s);
+
+extern int saved_argc;
+extern char **saved_argv;
+
+bool kexec_loaded(void);
+
+int prot_from_flags(int flags) _const_;
+
+char *format_bytes(char *buf, size_t l, off_t t);
+
+int fd_wait_for_event(int fd, int event, usec_t timeout);
+
+void* memdup(const void *p, size_t l) _alloc_(2);
+
+int is_kernel_thread(pid_t pid);
+
+int fd_inc_sndbuf(int fd, size_t n);
+int fd_inc_rcvbuf(int fd, size_t n);
+
+int fork_agent(pid_t *pid, const int except[], unsigned n_except, const char *path, ...);
+
+int setrlimit_closest(int resource, const struct rlimit *rlim);
+
+int getenv_for_pid(pid_t pid, const char *field, char **_value);
+
+bool is_valid_documentation_url(const char *url) _pure_;
+
+bool in_initrd(void);
+
+void warn_melody(void);
+
+int get_home_dir(char **ret);
+int get_shell(char **_ret);
+
+static inline void freep(void *p) {
+ free(*(void**) p);
+}
+
+#define DEFINE_TRIVIAL_CLEANUP_FUNC(type, func) \
+ static inline void func##p(type *p) { \
+ if (*p) \
+ func(*p); \
+ } \
+ struct __useless_struct_to_allow_trailing_semicolon__
+
+static inline void closep(int *fd) {
+ safe_close(*fd);
+}
+
+static inline void umaskp(mode_t *u) {
+ umask(*u);
+}
+
+static inline void close_pairp(int (*p)[2]) {
+ safe_close_pair(*p);
+}
+
+DEFINE_TRIVIAL_CLEANUP_FUNC(FILE*, fclose);
+DEFINE_TRIVIAL_CLEANUP_FUNC(FILE*, pclose);
+DEFINE_TRIVIAL_CLEANUP_FUNC(DIR*, closedir);
+DEFINE_TRIVIAL_CLEANUP_FUNC(FILE*, endmntent);
+
+#define _cleanup_free_ _cleanup_(freep)
+#define _cleanup_close_ _cleanup_(closep)
+#define _cleanup_umask_ _cleanup_(umaskp)
+#define _cleanup_globfree_ _cleanup_(globfree)
+#define _cleanup_fclose_ _cleanup_(fclosep)
+#define _cleanup_pclose_ _cleanup_(pclosep)
+#define _cleanup_closedir_ _cleanup_(closedirp)
+#define _cleanup_endmntent_ _cleanup_(endmntentp)
+#define _cleanup_close_pair_ _cleanup_(close_pairp)
+
+_malloc_ _alloc_(1, 2) static inline void *malloc_multiply(size_t a, size_t b) {
+ if (_unlikely_(b != 0 && a > ((size_t) -1) / b))
+ return NULL;
+
+ return malloc(a * b);
+}
+
+_alloc_(2, 3) static inline void *realloc_multiply(void *p, size_t a, size_t b) {
+ if (_unlikely_(b != 0 && a > ((size_t) -1) / b))
+ return NULL;
+
+ return realloc(p, a * b);
+}
+
+_alloc_(2, 3) static inline void *memdup_multiply(const void *p, size_t a, size_t b) {
+ if (_unlikely_(b != 0 && a > ((size_t) -1) / b))
+ return NULL;
+
+ return memdup(p, a * b);
+}
+
+bool filename_is_safe(const char *p) _pure_;
+bool path_is_safe(const char *p) _pure_;
+bool string_is_safe(const char *p) _pure_;
+bool string_has_cc(const char *p, const char *ok) _pure_;
+
+/**
+ * Check if a string contains any glob patterns.
+ */
+_pure_ static inline bool string_is_glob(const char *p) {
+ return !!strpbrk(p, GLOB_CHARS);
+}
+
+void *xbsearch_r(const void *key, const void *base, size_t nmemb, size_t size,
+ int (*compar) (const void *, const void *, void *),
+ void *arg);
+
+bool is_locale_utf8(void);
+
+typedef enum DrawSpecialChar {
+ DRAW_TREE_VERTICAL,
+ DRAW_TREE_BRANCH,
+ DRAW_TREE_RIGHT,
+ DRAW_TREE_SPACE,
+ DRAW_TRIANGULAR_BULLET,
+ DRAW_BLACK_CIRCLE,
+ DRAW_ARROW,
+ DRAW_DASH,
+ _DRAW_SPECIAL_CHAR_MAX
+} DrawSpecialChar;
+
+const char *draw_special_char(DrawSpecialChar ch);
+
+char *strreplace(const char *text, const char *old_string, const char *new_string);
+
+char *strip_tab_ansi(char **p, size_t *l);
+
+int on_ac_power(void);
+
+int search_and_fopen(const char *path, const char *mode, const char *root, const char **search, FILE **_f);
+int search_and_fopen_nulstr(const char *path, const char *mode, const char *root, const char *search, FILE **_f);
+
+#define FOREACH_LINE(line, f, on_error) \
+ for (;;) \
+ if (!fgets(line, sizeof(line), f)) { \
+ if (ferror(f)) { \
+ on_error; \
+ } \
+ break; \
+ } else
+
+#define FOREACH_DIRENT(de, d, on_error) \
+ for (errno = 0, de = readdir(d);; errno = 0, de = readdir(d)) \
+ if (!de) { \
+ if (errno > 0) { \
+ on_error; \
+ } \
+ break; \
+ } else if (ignore_file((de)->d_name)) \
+ continue; \
+ else
+
+static inline void *mempset(void *s, int c, size_t n) {
+ memset(s, c, n);
+ return (uint8_t*)s + n;
+}
+
+char *hexmem(const void *p, size_t l);
+void *unhexmem(const char *p, size_t l);
+
+char *strextend(char **x, ...) _sentinel_;
+char *strrep(const char *s, unsigned n);
+
+void* greedy_realloc(void **p, size_t *allocated, size_t need, size_t size);
+void* greedy_realloc0(void **p, size_t *allocated, size_t need, size_t size);
+#define GREEDY_REALLOC(array, allocated, need) \
+ greedy_realloc((void**) &(array), &(allocated), (need), sizeof((array)[0]))
+
+#define GREEDY_REALLOC0(array, allocated, need) \
+ greedy_realloc0((void**) &(array), &(allocated), (need), sizeof((array)[0]))
+
+static inline void _reset_errno_(int *saved_errno) {
+ errno = *saved_errno;
+}
+
+#define PROTECT_ERRNO _cleanup_(_reset_errno_) __attribute__((unused)) int _saved_errno_ = errno
+
+static inline int negative_errno(void) {
+ /* This helper should be used to shut up gcc if you know 'errno' is
+ * negative. Instead of "return -errno;", use "return negative_errno();"
+ * It will suppress bogus gcc warnings in case it assumes 'errno' might
+ * be 0 and thus the caller's error-handling might not be triggered. */
+ assert_return(errno > 0, -EINVAL);
+ return -errno;
+}
+
+struct _umask_struct_ {
+ mode_t mask;
+ bool quit;
+};
+
+static inline void _reset_umask_(struct _umask_struct_ *s) {
+ umask(s->mask);
+};
+
+#define RUN_WITH_UMASK(mask) \
+ for (_cleanup_(_reset_umask_) struct _umask_struct_ _saved_umask_ = { umask(mask), false }; \
+ !_saved_umask_.quit ; \
+ _saved_umask_.quit = true)
+
+static inline unsigned u64log2(uint64_t n) {
+#if __SIZEOF_LONG_LONG__ == 8
+ return (n > 1) ? (unsigned) __builtin_clzll(n) ^ 63U : 0;
+#else
+#error "Wut?"
+#endif
+}
+
+static inline unsigned u32ctz(uint32_t n) {
+#if __SIZEOF_INT__ == 4
+ return __builtin_ctz(n);
+#else
+#error "Wut?"
+#endif
+}
+
+static inline int log2i(int x) {
+ assert(x > 0);
+
+ return __SIZEOF_INT__ * 8 - __builtin_clz(x) - 1;
+}
+
+static inline unsigned log2u(unsigned x) {
+ assert(x > 0);
+
+ return sizeof(unsigned) * 8 - __builtin_clz(x) - 1;
+}
+
+static inline unsigned log2u_round_up(unsigned x) {
+ assert(x > 0);
+
+ if (x == 1)
+ return 0;
+
+ return log2u(x - 1) + 1;
+}
+
+static inline bool logind_running(void) {
+ return access("/run/systemd/seats/", F_OK) >= 0;
+}
+
+#define DECIMAL_STR_WIDTH(x) \
+ ({ \
+ typeof(x) _x_ = (x); \
+ unsigned ans = 1; \
+ while (_x_ /= 10) \
+ ans++; \
+ ans; \
+ })
+
+int unlink_noerrno(const char *path);
+
+#define alloca0(n) \
+ ({ \
+ char *_new_; \
+ size_t _len_ = n; \
+ _new_ = alloca(_len_); \
+ (void *) memset(_new_, 0, _len_); \
+ })
+
+#define alloca_align(size, align) \
+ ({ \
+ void *_ptr_; \
+ size_t _mask_ = (align) - 1; \
+ _ptr_ = alloca((size) + _mask_); \
+ (void*)(((uintptr_t)_ptr_ + _mask_) & ~_mask_); \
+ })
+
+#define alloca0_align(size, align) \
+ ({ \
+ void *_new_; \
+ size_t _size_ = (size); \
+ _new_ = alloca_align(_size_, (align)); \
+ (void*)memset(_new_, 0, _size_); \
+ })
+
+#define strappenda(a, ...) \
+ ({ \
+ int _len = strlen(a); \
+ unsigned _i; \
+ char *_d_, *_p_; \
+ const char *_appendees_[] = { __VA_ARGS__ }; \
+ for (_i = 0; _i < ELEMENTSOF(_appendees_); _i++) \
+ _len += strlen(_appendees_[_i]); \
+ _d_ = alloca(_len + 1); \
+ _p_ = stpcpy(_d_, a); \
+ for (_i = 0; _i < ELEMENTSOF(_appendees_); _i++) \
+ _p_ = stpcpy(_p_, _appendees_[_i]); \
+ _d_; \
+ })
+
+#define procfs_file_alloca(pid, field) \
+ ({ \
+ pid_t _pid_ = (pid); \
+ const char *_r_; \
+ if (_pid_ == 0) { \
+ _r_ = ("/proc/self/" field); \
+ } else { \
+ _r_ = alloca(strlen("/proc/") + DECIMAL_STR_MAX(pid_t) + 1 + sizeof(field)); \
+ sprintf((char*) _r_, "/proc/"PID_FMT"/" field, _pid_); \
+ } \
+ _r_; \
+ })
+
+struct _locale_struct_ {
+ locale_t saved_locale;
+ locale_t new_locale;
+ bool quit;
+};
+
+static inline void _reset_locale_(struct _locale_struct_ *s) {
+ PROTECT_ERRNO;
+ if (s->saved_locale != (locale_t) 0)
+ uselocale(s->saved_locale);
+ if (s->new_locale != (locale_t) 0)
+ freelocale(s->new_locale);
+}
+
+#define RUN_WITH_LOCALE(mask, loc) \
+ for (_cleanup_(_reset_locale_) struct _locale_struct_ _saved_locale_ = { (locale_t) 0, (locale_t) 0, false }; \
+ ({ \
+ if (!_saved_locale_.quit) { \
+ PROTECT_ERRNO; \
+ _saved_locale_.new_locale = newlocale((mask), (loc), (locale_t) 0); \
+ if (_saved_locale_.new_locale != (locale_t) 0) \
+ _saved_locale_.saved_locale = uselocale(_saved_locale_.new_locale); \
+ } \
+ !_saved_locale_.quit; }) ; \
+ _saved_locale_.quit = true)
+
+bool id128_is_valid(const char *s) _pure_;
+
+int split_pair(const char *s, const char *sep, char **l, char **r);
+
+int shall_restore_state(void);
+
+/**
+ * Normal qsort requires base to be nonnull. Here were require
+ * that only if nmemb > 0.
+ */
+static inline void qsort_safe(void *base, size_t nmemb, size_t size,
+ int (*compar)(const void *, const void *)) {
+ if (nmemb) {
+ assert(base);
+ qsort(base, nmemb, size, compar);
+ }
+}
+
+int proc_cmdline(char **ret);
+int parse_proc_cmdline(int (*parse_word)(const char *key, const char *value));
+
+int container_get_leader(const char *machine, pid_t *pid);
+
+int namespace_open(pid_t pid, int *pidns_fd, int *mntns_fd, int *netns_fd, int *root_fd);
+int namespace_enter(int pidns_fd, int mntns_fd, int netns_fd, int root_fd);
+
+bool pid_is_alive(pid_t pid);
+bool pid_is_unwaited(pid_t pid);
+
+#if 0 /* NM_IGNORED */
+int getpeercred(int fd, struct ucred *ucred);
+int getpeersec(int fd, char **ret);
+#endif
+
+int writev_safe(int fd, const struct iovec *w, int j);
+
+int mkostemp_safe(char *pattern, int flags);
+int open_tmpfile(const char *path, int flags);
+
+int fd_warn_permissions(const char *path, int fd);
+
+unsigned long personality_from_string(const char *p);
+const char *personality_to_string(unsigned long);
+
+uint64_t physical_memory(void);
+
+char* mount_test_option(const char *haystack, const char *needle);
+
+void hexdump(FILE *f, const void *p, size_t s);
+
+#if 0 /* NM_IGNORED */
+union file_handle_union {
+ struct file_handle handle;
+ char padding[sizeof(struct file_handle) + MAX_HANDLE_SZ];
+};
+#endif
+
+int update_reboot_param_file(const char *param);
+
+int umount_recursive(const char *target, int flags);
+
+int bind_remount_recursive(const char *prefix, bool ro);
+
+int fflush_and_check(FILE *f);
+
+char *tempfn_xxxxxx(const char *p);
+char *tempfn_random(const char *p);
+
+bool is_localhost(const char *hostname);
+
+int take_password_lock(const char *root);
+
+int is_symlink(const char *path);
+int is_dir(const char *path, bool follow);
+
+int unquote_first_word(const char **p, char **ret, bool relax);
+int unquote_many_words(const char **p, ...) _sentinel_;
+
+int free_and_strdup(char **p, const char *s);
+
+int sethostname_idempotent(const char *s);
diff --git a/src/dhcp-manager/systemd-dhcp/src/systemd/_sd-common.h b/src/dhcp-manager/systemd-dhcp/src/systemd/_sd-common.h
new file mode 100644
index 000000000..896a027eb
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/systemd/_sd-common.h
@@ -0,0 +1,78 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#ifndef foosdcommonhfoo
+#define foosdcommonhfoo
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Lennart Poettering
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+/* This is a private header; never even think of including this directly! */
+
+#if __INCLUDE_LEVEL__ <= 1
+#error "Do not include _sd-common.h directly; it is a private header."
+#endif
+
+#ifndef _sd_printf_
+# if __GNUC__ >= 4
+# define _sd_printf_(a,b) __attribute__ ((format (printf, a, b)))
+# else
+# define _sd_printf_(a,b)
+# endif
+#endif
+
+#ifndef _sd_sentinel_
+# define _sd_sentinel_ __attribute__((sentinel))
+#endif
+
+#ifndef _sd_packed_
+# define _sd_packed_ __attribute__((packed))
+#endif
+
+#ifndef _sd_pure_
+# define _sd_pure_ __attribute__((pure))
+#endif
+
+#ifndef _SD_STRINGIFY
+# define _SD_XSTRINGIFY(x) #x
+# define _SD_STRINGIFY(x) _SD_XSTRINGIFY(x)
+#endif
+
+#ifndef _SD_BEGIN_DECLARATIONS
+# ifdef __cplusplus
+# define _SD_BEGIN_DECLARATIONS \
+ extern "C" { \
+ struct __useless_struct_to_allow_trailing_semicolon__
+# else
+# define _SD_BEGIN_DECLARATIONS \
+ struct __useless_struct_to_allow_trailing_semicolon__
+# endif
+#endif
+
+#ifndef _SD_END_DECLARATIONS
+# ifdef __cplusplus
+# define _SD_END_DECLARATIONS \
+ } \
+ struct __useless_struct_to_allow_trailing_semicolon__
+# else
+# define _SD_END_DECLARATIONS \
+ struct __useless_struct_to_allow_trailing_semicolon__
+# endif
+#endif
+
+#endif
diff --git a/src/dhcp-manager/systemd-dhcp/src/systemd/sd-dhcp-client.h b/src/dhcp-manager/systemd-dhcp/src/systemd/sd-dhcp-client.h
new file mode 100644
index 000000000..951662e56
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/systemd/sd-dhcp-client.h
@@ -0,0 +1,75 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#ifndef foosddhcpclienthfoo
+#define foosddhcpclienthfoo
+
+/***
+ This file is part of systemd.
+
+ Copyright (C) 2013 Intel Corporation. All rights reserved.
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <netinet/in.h>
+#include <net/ethernet.h>
+
+#include "sd-event.h"
+#include "sd-dhcp-lease.h"
+
+enum {
+ DHCP_EVENT_STOP = 0,
+ DHCP_EVENT_IP_ACQUIRE = 1,
+ DHCP_EVENT_IP_CHANGE = 2,
+ DHCP_EVENT_EXPIRED = 3,
+ DHCP_EVENT_RENEW = 4,
+};
+
+typedef struct sd_dhcp_client sd_dhcp_client;
+
+typedef void (*sd_dhcp_client_cb_t)(sd_dhcp_client *client, int event,
+ void *userdata);
+int sd_dhcp_client_set_callback(sd_dhcp_client *client, sd_dhcp_client_cb_t cb,
+ void *userdata);
+
+
+int sd_dhcp_client_set_request_option(sd_dhcp_client *client, uint8_t option);
+int sd_dhcp_client_set_request_address(sd_dhcp_client *client,
+ const struct in_addr *last_address);
+int sd_dhcp_client_set_request_broadcast(sd_dhcp_client *client, int broadcast);
+int sd_dhcp_client_set_index(sd_dhcp_client *client, int interface_index);
+int sd_dhcp_client_set_mac(sd_dhcp_client *client, const uint8_t *addr,
+ size_t addr_len, uint16_t arp_type);
+int sd_dhcp_client_set_client_id(sd_dhcp_client *client, uint8_t type,
+ const uint8_t *data, size_t data_len);
+int sd_dhcp_client_get_client_id(sd_dhcp_client *client, uint8_t *type,
+ const uint8_t **data, size_t *data_len);
+int sd_dhcp_client_set_mtu(sd_dhcp_client *client, uint32_t mtu);
+int sd_dhcp_client_set_hostname(sd_dhcp_client *client, const char *hostname);
+int sd_dhcp_client_set_vendor_class_identifier(sd_dhcp_client *client, const char *vci);
+int sd_dhcp_client_get_lease(sd_dhcp_client *client, sd_dhcp_lease **ret);
+
+int sd_dhcp_client_stop(sd_dhcp_client *client);
+int sd_dhcp_client_start(sd_dhcp_client *client);
+
+sd_dhcp_client *sd_dhcp_client_ref(sd_dhcp_client *client);
+sd_dhcp_client *sd_dhcp_client_unref(sd_dhcp_client *client);
+
+int sd_dhcp_client_new(sd_dhcp_client **ret);
+
+int sd_dhcp_client_attach_event(sd_dhcp_client *client, sd_event *event, int priority);
+int sd_dhcp_client_detach_event(sd_dhcp_client *client);
+sd_event *sd_dhcp_client_get_event(sd_dhcp_client *client);
+
+#endif
diff --git a/src/dhcp-manager/systemd-dhcp/src/systemd/sd-dhcp-lease.h b/src/dhcp-manager/systemd-dhcp/src/systemd/sd-dhcp-lease.h
new file mode 100644
index 000000000..4296b91d8
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/systemd/sd-dhcp-lease.h
@@ -0,0 +1,54 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#ifndef foosddhcpleasehfoo
+#define foosddhcpleasehfoo
+
+/***
+ This file is part of systemd.
+
+ Copyright (C) 2013 Intel Corporation. All rights reserved.
+ Copyright (C) 2014 Tom Gundersen
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <netinet/in.h>
+#include <net/ethernet.h>
+
+typedef struct sd_dhcp_lease sd_dhcp_lease;
+struct sd_dhcp_route;
+
+sd_dhcp_lease *sd_dhcp_lease_ref(sd_dhcp_lease *lease);
+sd_dhcp_lease *sd_dhcp_lease_unref(sd_dhcp_lease *lease);
+
+int sd_dhcp_lease_get_address(sd_dhcp_lease *lease, struct in_addr *addr);
+int sd_dhcp_lease_get_lifetime(sd_dhcp_lease *lease, uint32_t *lifetime);
+int sd_dhcp_lease_get_netmask(sd_dhcp_lease *lease, struct in_addr *addr);
+int sd_dhcp_lease_get_router(sd_dhcp_lease *lease, struct in_addr *addr);
+int sd_dhcp_lease_get_next_server(sd_dhcp_lease *lease, struct in_addr *addr);
+int sd_dhcp_lease_get_server_identifier(sd_dhcp_lease *lease, struct in_addr *addr);
+int sd_dhcp_lease_get_dns(sd_dhcp_lease *lease, const struct in_addr **addr);
+int sd_dhcp_lease_get_ntp(sd_dhcp_lease *lease, const struct in_addr **addr);
+int sd_dhcp_lease_get_mtu(sd_dhcp_lease *lease, uint16_t *mtu);
+int sd_dhcp_lease_get_domainname(sd_dhcp_lease *lease, const char **domainname);
+int sd_dhcp_lease_get_hostname(sd_dhcp_lease *lease, const char **hostname);
+int sd_dhcp_lease_get_root_path(sd_dhcp_lease *lease, const char **root_path);
+int sd_dhcp_lease_get_routes(sd_dhcp_lease *lease, struct sd_dhcp_route **routesgn);
+int sd_dhcp_lease_get_client_id(sd_dhcp_lease *lease, const uint8_t **client_id,
+ size_t *client_id_len);
+
+int sd_dhcp_lease_save(sd_dhcp_lease *lease, const char *lease_file);
+int sd_dhcp_lease_load(sd_dhcp_lease **ret, const char *lease_file);
+
+#endif
diff --git a/src/dhcp-manager/systemd-dhcp/src/systemd/sd-dhcp6-client.h b/src/dhcp-manager/systemd-dhcp/src/systemd/sd-dhcp6-client.h
new file mode 100644
index 000000000..38c1c3fb1
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/systemd/sd-dhcp6-client.h
@@ -0,0 +1,66 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#ifndef foosddhcp6clienthfoo
+#define foosddhcp6clienthfoo
+
+/***
+ This file is part of systemd.
+
+ Copyright (C) 2014 Intel Corporation. All rights reserved.
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <net/ethernet.h>
+
+#include "sd-event.h"
+
+#include "sd-dhcp6-lease.h"
+
+enum {
+ DHCP6_EVENT_STOP = 0,
+ DHCP6_EVENT_RESEND_EXPIRE = 10,
+ DHCP6_EVENT_RETRANS_MAX = 11,
+ DHCP6_EVENT_IP_ACQUIRE = 12,
+};
+
+typedef struct sd_dhcp6_client sd_dhcp6_client;
+
+typedef void (*sd_dhcp6_client_cb_t)(sd_dhcp6_client *client, int event,
+ void *userdata);
+int sd_dhcp6_client_set_callback(sd_dhcp6_client *client,
+ sd_dhcp6_client_cb_t cb, void *userdata);
+
+int sd_dhcp6_client_set_index(sd_dhcp6_client *client, int interface_index);
+int sd_dhcp6_client_set_mac(sd_dhcp6_client *client, const uint8_t *addr,
+ size_t addr_len, uint16_t arp_type);
+int sd_dhcp6_client_set_duid(sd_dhcp6_client *client, uint16_t type, uint8_t *duid,
+ size_t duid_len);
+int sd_dhcp6_client_set_ifname(sd_dhcp6_client *client, const char *ifname);
+int sd_dhcp6_client_set_request_option(sd_dhcp6_client *client,
+ uint16_t option);
+
+int sd_dhcp6_client_get_lease(sd_dhcp6_client *client, sd_dhcp6_lease **ret);
+
+int sd_dhcp6_client_stop(sd_dhcp6_client *client);
+int sd_dhcp6_client_start(sd_dhcp6_client *client);
+int sd_dhcp6_client_attach_event(sd_dhcp6_client *client, sd_event *event,
+ int priority);
+int sd_dhcp6_client_detach_event(sd_dhcp6_client *client);
+sd_event *sd_dhcp6_client_get_event(sd_dhcp6_client *client);
+sd_dhcp6_client *sd_dhcp6_client_ref(sd_dhcp6_client *client);
+sd_dhcp6_client *sd_dhcp6_client_unref(sd_dhcp6_client *client);
+int sd_dhcp6_client_new(sd_dhcp6_client **ret);
+
+#endif
diff --git a/src/dhcp-manager/systemd-dhcp/src/systemd/sd-dhcp6-lease.h b/src/dhcp-manager/systemd-dhcp/src/systemd/sd-dhcp6-lease.h
new file mode 100644
index 000000000..1126f1ac2
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/systemd/sd-dhcp6-lease.h
@@ -0,0 +1,42 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#ifndef foosddhcp6leasehfoo
+#define foosddhcp6leasehfoo
+
+/***
+ This file is part of systemd.
+
+ Copyright (C) 2014 Tom Gundersen
+ Copyright (C) 2014 Intel Corporation. All rights reserved.
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <netinet/in.h>
+
+typedef struct sd_dhcp6_lease sd_dhcp6_lease;
+
+int sd_dhcp6_lease_get_first_address(sd_dhcp6_lease *lease,
+ struct in6_addr *addr,
+ uint32_t *lifetime_preferred,
+ uint32_t *lifetime_valid);
+int sd_dhcp6_lease_get_next_address(sd_dhcp6_lease *lease,
+ struct in6_addr *addr,
+ uint32_t *lifetime_preferred,
+ uint32_t *lifetime_valid);
+
+sd_dhcp6_lease *sd_dhcp6_lease_ref(sd_dhcp6_lease *lease);
+sd_dhcp6_lease *sd_dhcp6_lease_unref(sd_dhcp6_lease *lease);
+
+#endif
diff --git a/src/dhcp-manager/systemd-dhcp/src/systemd/sd-event.h b/src/dhcp-manager/systemd-dhcp/src/systemd/sd-event.h
new file mode 100644
index 000000000..25a10f99a
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/systemd/sd-event.h
@@ -0,0 +1,135 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#ifndef foosdeventhfoo
+#define foosdeventhfoo
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Lennart Poettering
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <sys/types.h>
+#include <sys/signalfd.h>
+#include <sys/epoll.h>
+#include <inttypes.h>
+#include <signal.h>
+
+#include "_sd-common.h"
+
+/*
+ Why is this better than pure epoll?
+
+ - Supports event source prioritization
+ - Scales better with a large number of time events because it does not require one timerfd each
+ - Automatically tries to coalesce timer events system-wide
+ - Handles signals and child PIDs
+*/
+
+_SD_BEGIN_DECLARATIONS;
+
+typedef struct sd_event sd_event;
+typedef struct sd_event_source sd_event_source;
+
+enum {
+ SD_EVENT_OFF = 0,
+ SD_EVENT_ON = 1,
+ SD_EVENT_ONESHOT = -1
+};
+
+enum {
+ SD_EVENT_PASSIVE,
+ SD_EVENT_PREPARED,
+ SD_EVENT_PENDING,
+ SD_EVENT_RUNNING,
+ SD_EVENT_EXITING,
+ SD_EVENT_FINISHED
+};
+
+enum {
+ /* And everything in-between and outside is good too */
+ SD_EVENT_PRIORITY_IMPORTANT = -100,
+ SD_EVENT_PRIORITY_NORMAL = 0,
+ SD_EVENT_PRIORITY_IDLE = 100
+};
+
+typedef int (*sd_event_handler_t)(sd_event_source *s, void *userdata);
+typedef int (*sd_event_io_handler_t)(sd_event_source *s, int fd, uint32_t revents, void *userdata);
+typedef int (*sd_event_time_handler_t)(sd_event_source *s, uint64_t usec, void *userdata);
+typedef int (*sd_event_signal_handler_t)(sd_event_source *s, const struct signalfd_siginfo *si, void *userdata);
+typedef int (*sd_event_child_handler_t)(sd_event_source *s, const siginfo_t *si, void *userdata);
+
+int sd_event_default(sd_event **e);
+
+int sd_event_new(sd_event **e);
+sd_event* sd_event_ref(sd_event *e);
+sd_event* sd_event_unref(sd_event *e);
+
+int sd_event_add_io(sd_event *e, sd_event_source **s, int fd, uint32_t events, sd_event_io_handler_t callback, void *userdata);
+int sd_event_add_time(sd_event *e, sd_event_source **s, clockid_t clock, uint64_t usec, uint64_t accuracy, sd_event_time_handler_t callback, void *userdata);
+int sd_event_add_signal(sd_event *e, sd_event_source **s, int sig, sd_event_signal_handler_t callback, void *userdata);
+int sd_event_add_child(sd_event *e, sd_event_source **s, pid_t pid, int options, sd_event_child_handler_t callback, void *userdata);
+int sd_event_add_defer(sd_event *e, sd_event_source **s, sd_event_handler_t callback, void *userdata);
+int sd_event_add_post(sd_event *e, sd_event_source **s, sd_event_handler_t callback, void *userdata);
+int sd_event_add_exit(sd_event *e, sd_event_source **s, sd_event_handler_t callback, void *userdata);
+
+int sd_event_prepare(sd_event *e);
+int sd_event_wait(sd_event *e, uint64_t timeout);
+int sd_event_dispatch(sd_event *e);
+int sd_event_run(sd_event *e, uint64_t timeout);
+int sd_event_loop(sd_event *e);
+int sd_event_exit(sd_event *e, int code);
+
+int sd_event_now(sd_event *e, clockid_t clock, uint64_t *usec);
+
+int sd_event_get_fd(sd_event *e);
+int sd_event_get_state(sd_event *e);
+int sd_event_get_tid(sd_event *e, pid_t *tid);
+int sd_event_get_exit_code(sd_event *e, int *code);
+int sd_event_set_watchdog(sd_event *e, int b);
+int sd_event_get_watchdog(sd_event *e);
+
+sd_event_source* sd_event_source_ref(sd_event_source *s);
+sd_event_source* sd_event_source_unref(sd_event_source *s);
+
+sd_event *sd_event_source_get_event(sd_event_source *s);
+void* sd_event_source_get_userdata(sd_event_source *s);
+void* sd_event_source_set_userdata(sd_event_source *s, void *userdata);
+
+int sd_event_source_set_description(sd_event_source *s, const char *description);
+int sd_event_source_get_description(sd_event_source *s, const char **description);
+int sd_event_source_set_prepare(sd_event_source *s, sd_event_handler_t callback);
+int sd_event_source_get_pending(sd_event_source *s);
+int sd_event_source_get_priority(sd_event_source *s, int64_t *priority);
+int sd_event_source_set_priority(sd_event_source *s, int64_t priority);
+int sd_event_source_get_enabled(sd_event_source *s, int *enabled);
+int sd_event_source_set_enabled(sd_event_source *s, int enabled);
+int sd_event_source_get_io_fd(sd_event_source *s);
+int sd_event_source_set_io_fd(sd_event_source *s, int fd);
+int sd_event_source_get_io_events(sd_event_source *s, uint32_t* events);
+int sd_event_source_set_io_events(sd_event_source *s, uint32_t events);
+int sd_event_source_get_io_revents(sd_event_source *s, uint32_t* revents);
+int sd_event_source_get_time(sd_event_source *s, uint64_t *usec);
+int sd_event_source_set_time(sd_event_source *s, uint64_t usec);
+int sd_event_source_get_time_accuracy(sd_event_source *s, uint64_t *usec);
+int sd_event_source_set_time_accuracy(sd_event_source *s, uint64_t usec);
+int sd_event_source_get_time_clock(sd_event_source *s, clockid_t *clock);
+int sd_event_source_get_signal(sd_event_source *s);
+int sd_event_source_get_child_pid(sd_event_source *s, pid_t *pid);
+
+_SD_END_DECLARATIONS;
+
+#endif
diff --git a/src/dhcp-manager/systemd-dhcp/src/systemd/sd-id128.h b/src/dhcp-manager/systemd-dhcp/src/systemd/sd-id128.h
new file mode 100644
index 000000000..4fdbf3ab4
--- /dev/null
+++ b/src/dhcp-manager/systemd-dhcp/src/systemd/sd-id128.h
@@ -0,0 +1,113 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#ifndef foosdid128hfoo
+#define foosdid128hfoo
+
+/***
+ This file is part of systemd.
+
+ Copyright 2011 Lennart Poettering
+
+ systemd 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.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <inttypes.h>
+#include <string.h>
+
+#include "_sd-common.h"
+
+_SD_BEGIN_DECLARATIONS;
+
+/* 128-bit ID APIs. See sd-id128(3) for more information. */
+
+typedef union sd_id128 sd_id128_t;
+
+union sd_id128 {
+ uint8_t bytes[16];
+ uint64_t qwords[2];
+};
+
+#define SD_ID128_STRING_MAX 33
+
+char *sd_id128_to_string(sd_id128_t id, char s[SD_ID128_STRING_MAX]);
+
+int sd_id128_from_string(const char *s, sd_id128_t *ret);
+
+int sd_id128_randomize(sd_id128_t *ret);
+
+int sd_id128_get_machine(sd_id128_t *ret);
+
+int sd_id128_get_boot(sd_id128_t *ret);
+
+#define SD_ID128_MAKE(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) \
+ ((const sd_id128_t) { .bytes = { 0x##v0, 0x##v1, 0x##v2, 0x##v3, 0x##v4, 0x##v5, 0x##v6, 0x##v7, \
+ 0x##v8, 0x##v9, 0x##v10, 0x##v11, 0x##v12, 0x##v13, 0x##v14, 0x##v15 }})
+
+#define SD_ID128_ARRAY(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) \
+ { .bytes = { 0x##v0, 0x##v1, 0x##v2, 0x##v3, 0x##v4, 0x##v5, 0x##v6, 0x##v7, \
+ 0x##v8, 0x##v9, 0x##v10, 0x##v11, 0x##v12, 0x##v13, 0x##v14, 0x##v15 }}
+
+/* Note that SD_ID128_FORMAT_VAL will evaluate the passed argument 16
+ * times. It is hence not a good idea to call this macro with an
+ * expensive function as paramater or an expression with side
+ * effects */
+
+#define SD_ID128_FORMAT_STR "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x"
+#define SD_ID128_FORMAT_VAL(x) (x).bytes[0], (x).bytes[1], (x).bytes[2], (x).bytes[3], (x).bytes[4], (x).bytes[5], (x).bytes[6], (x).bytes[7], (x).bytes[8], (x).bytes[9], (x).bytes[10], (x).bytes[11], (x).bytes[12], (x).bytes[13], (x).bytes[14], (x).bytes[15]
+
+#define SD_ID128_CONST_STR(x) \
+ ((const char[SD_ID128_STRING_MAX]) { \
+ ((x).bytes[0] >> 4) >= 10 ? 'a' + ((x).bytes[0] >> 4) - 10 : '0' + ((x).bytes[0] >> 4), \
+ ((x).bytes[0] & 15) >= 10 ? 'a' + ((x).bytes[0] & 15) - 10 : '0' + ((x).bytes[0] & 15), \
+ ((x).bytes[1] >> 4) >= 10 ? 'a' + ((x).bytes[1] >> 4) - 10 : '0' + ((x).bytes[1] >> 4), \
+ ((x).bytes[1] & 15) >= 10 ? 'a' + ((x).bytes[1] & 15) - 10 : '0' + ((x).bytes[1] & 15), \
+ ((x).bytes[2] >> 4) >= 10 ? 'a' + ((x).bytes[2] >> 4) - 10 : '0' + ((x).bytes[2] >> 4), \
+ ((x).bytes[2] & 15) >= 10 ? 'a' + ((x).bytes[2] & 15) - 10 : '0' + ((x).bytes[2] & 15), \
+ ((x).bytes[3] >> 4) >= 10 ? 'a' + ((x).bytes[3] >> 4) - 10 : '0' + ((x).bytes[3] >> 4), \
+ ((x).bytes[3] & 15) >= 10 ? 'a' + ((x).bytes[3] & 15) - 10 : '0' + ((x).bytes[3] & 15), \
+ ((x).bytes[4] >> 4) >= 10 ? 'a' + ((x).bytes[4] >> 4) - 10 : '0' + ((x).bytes[4] >> 4), \
+ ((x).bytes[4] & 15) >= 10 ? 'a' + ((x).bytes[4] & 15) - 10 : '0' + ((x).bytes[4] & 15), \
+ ((x).bytes[5] >> 4) >= 10 ? 'a' + ((x).bytes[5] >> 4) - 10 : '0' + ((x).bytes[5] >> 4), \
+ ((x).bytes[5] & 15) >= 10 ? 'a' + ((x).bytes[5] & 15) - 10 : '0' + ((x).bytes[5] & 15), \
+ ((x).bytes[6] >> 4) >= 10 ? 'a' + ((x).bytes[6] >> 4) - 10 : '0' + ((x).bytes[6] >> 4), \
+ ((x).bytes[6] & 15) >= 10 ? 'a' + ((x).bytes[6] & 15) - 10 : '0' + ((x).bytes[6] & 15), \
+ ((x).bytes[7] >> 4) >= 10 ? 'a' + ((x).bytes[7] >> 4) - 10 : '0' + ((x).bytes[7] >> 4), \
+ ((x).bytes[7] & 15) >= 10 ? 'a' + ((x).bytes[7] & 15) - 10 : '0' + ((x).bytes[7] & 15), \
+ ((x).bytes[8] >> 4) >= 10 ? 'a' + ((x).bytes[8] >> 4) - 10 : '0' + ((x).bytes[8] >> 4), \
+ ((x).bytes[8] & 15) >= 10 ? 'a' + ((x).bytes[8] & 15) - 10 : '0' + ((x).bytes[8] & 15), \
+ ((x).bytes[9] >> 4) >= 10 ? 'a' + ((x).bytes[9] >> 4) - 10 : '0' + ((x).bytes[9] >> 4), \
+ ((x).bytes[9] & 15) >= 10 ? 'a' + ((x).bytes[9] & 15) - 10 : '0' + ((x).bytes[9] & 15), \
+ ((x).bytes[10] >> 4) >= 10 ? 'a' + ((x).bytes[10] >> 4) - 10 : '0' + ((x).bytes[10] >> 4), \
+ ((x).bytes[10] & 15) >= 10 ? 'a' + ((x).bytes[10] & 15) - 10 : '0' + ((x).bytes[10] & 15), \
+ ((x).bytes[11] >> 4) >= 10 ? 'a' + ((x).bytes[11] >> 4) - 10 : '0' + ((x).bytes[11] >> 4), \
+ ((x).bytes[11] & 15) >= 10 ? 'a' + ((x).bytes[11] & 15) - 10 : '0' + ((x).bytes[11] & 15), \
+ ((x).bytes[12] >> 4) >= 10 ? 'a' + ((x).bytes[12] >> 4) - 10 : '0' + ((x).bytes[12] >> 4), \
+ ((x).bytes[12] & 15) >= 10 ? 'a' + ((x).bytes[12] & 15) - 10 : '0' + ((x).bytes[12] & 15), \
+ ((x).bytes[13] >> 4) >= 10 ? 'a' + ((x).bytes[13] >> 4) - 10 : '0' + ((x).bytes[13] >> 4), \
+ ((x).bytes[13] & 15) >= 10 ? 'a' + ((x).bytes[13] & 15) - 10 : '0' + ((x).bytes[13] & 15), \
+ ((x).bytes[14] >> 4) >= 10 ? 'a' + ((x).bytes[14] >> 4) - 10 : '0' + ((x).bytes[14] >> 4), \
+ ((x).bytes[14] & 15) >= 10 ? 'a' + ((x).bytes[14] & 15) - 10 : '0' + ((x).bytes[14] & 15), \
+ ((x).bytes[15] >> 4) >= 10 ? 'a' + ((x).bytes[15] >> 4) - 10 : '0' + ((x).bytes[15] >> 4), \
+ ((x).bytes[15] & 15) >= 10 ? 'a' + ((x).bytes[15] & 15) - 10 : '0' + ((x).bytes[15] & 15), \
+ 0 })
+
+_sd_pure_ static inline int sd_id128_equal(sd_id128_t a, sd_id128_t b) {
+ return memcmp(&a, &b, 16) == 0;
+}
+
+#define SD_ID128_NULL ((const sd_id128_t) { .qwords = { 0, 0 }})
+
+_SD_END_DECLARATIONS;
+
+#endif
diff --git a/src/dhcp-manager/tests/Makefile.am b/src/dhcp-manager/tests/Makefile.am
index 6ef828d57..9dc5dcb13 100644
--- a/src/dhcp-manager/tests/Makefile.am
+++ b/src/dhcp-manager/tests/Makefile.am
@@ -1,27 +1,43 @@
AM_CPPFLAGS = \
-I$(top_srcdir)/include \
- -I$(top_builddir)/include \
- -I${top_srcdir}/libnm-util \
- -I${top_builddir}/libnm-util \
+ -I${top_srcdir}/libnm-core \
+ -I${top_builddir}/libnm-core \
-I$(top_srcdir)/src/dhcp-manager \
-I$(top_srcdir)/src \
-I$(top_srcdir)/src/platform \
-DG_LOG_DOMAIN=\""NetworkManager"\" \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
-DTESTDIR="\"$(abs_srcdir)\""
-noinst_PROGRAMS = test-dhcp-dhclient
+noinst_PROGRAMS = \
+ test-dhcp-dhclient \
+ test-dhcp-utils
-####### policy /etc/hosts test #######
+####### dhclient leases test #######
test_dhcp_dhclient_SOURCES = \
+ $(top_srcdir)/src/dhcp-manager/nm-dhcp-dhclient-utils.h \
+ $(top_srcdir)/src/dhcp-manager/nm-dhcp-dhclient-utils.c \
+ $(top_srcdir)/src/dhcp-manager/nm-dhcp-utils.h \
+ $(top_srcdir)/src/dhcp-manager/nm-dhcp-utils.c \
test-dhcp-dhclient.c
test_dhcp_dhclient_LDADD = \
$(top_builddir)/src/libNetworkManager.la
-TESTS = test-dhcp-dhclient
+####### DHCP utils test #######
+
+test_dhcp_utils_SOURCES = \
+ test-dhcp-utils.c
+
+test_dhcp_utils_LDADD = \
+ $(top_builddir)/src/libNetworkManager.la
+
+#################################
+
+TESTS = test-dhcp-dhclient test-dhcp-utils
EXTRA_DIST = \
test-dhclient-duid.leases \
diff --git a/src/dhcp-manager/tests/Makefile.in b/src/dhcp-manager/tests/Makefile.in
index d445838f0..c0324e302 100644
--- a/src/dhcp-manager/tests/Makefile.in
+++ b/src/dhcp-manager/tests/Makefile.in
@@ -78,8 +78,8 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-noinst_PROGRAMS = test-dhcp-dhclient$(EXEEXT)
-TESTS = test-dhcp-dhclient$(EXEEXT)
+noinst_PROGRAMS = test-dhcp-dhclient$(EXEEXT) test-dhcp-utils$(EXEEXT)
+TESTS = test-dhcp-dhclient$(EXEEXT) test-dhcp-utils$(EXEEXT)
subdir = src/dhcp-manager/tests
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
@@ -104,7 +104,8 @@ CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
PROGRAMS = $(noinst_PROGRAMS)
-am_test_dhcp_dhclient_OBJECTS = test-dhcp-dhclient.$(OBJEXT)
+am_test_dhcp_dhclient_OBJECTS = nm-dhcp-dhclient-utils.$(OBJEXT) \
+ nm-dhcp-utils.$(OBJEXT) test-dhcp-dhclient.$(OBJEXT)
test_dhcp_dhclient_OBJECTS = $(am_test_dhcp_dhclient_OBJECTS)
test_dhcp_dhclient_DEPENDENCIES = \
$(top_builddir)/src/libNetworkManager.la
@@ -112,6 +113,10 @@ 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_dhcp_utils_OBJECTS = test-dhcp-utils.$(OBJEXT)
+test_dhcp_utils_OBJECTS = $(am_test_dhcp_utils_OBJECTS)
+test_dhcp_utils_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
@@ -146,8 +151,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 = $(test_dhcp_dhclient_SOURCES)
-DIST_SOURCES = $(test_dhcp_dhclient_SOURCES)
+SOURCES = $(test_dhcp_dhclient_SOURCES) $(test_dhcp_utils_SOURCES)
+DIST_SOURCES = $(test_dhcp_dhclient_SOURCES) \
+ $(test_dhcp_utils_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -204,6 +210,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -327,6 +335,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -346,6 +355,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -372,7 +382,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -453,25 +463,37 @@ with_resolvconf = @with_resolvconf@
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}/libnm-core \
+ -I${top_builddir}/libnm-core \
-I$(top_srcdir)/src/dhcp-manager \
-I$(top_srcdir)/src \
-I$(top_srcdir)/src/platform \
-DG_LOG_DOMAIN=\""NetworkManager"\" \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
-DTESTDIR="\"$(abs_srcdir)\""
-####### policy /etc/hosts test #######
+####### dhclient leases test #######
test_dhcp_dhclient_SOURCES = \
+ $(top_srcdir)/src/dhcp-manager/nm-dhcp-dhclient-utils.h \
+ $(top_srcdir)/src/dhcp-manager/nm-dhcp-dhclient-utils.c \
+ $(top_srcdir)/src/dhcp-manager/nm-dhcp-utils.h \
+ $(top_srcdir)/src/dhcp-manager/nm-dhcp-utils.c \
test-dhcp-dhclient.c
test_dhcp_dhclient_LDADD = \
$(top_builddir)/src/libNetworkManager.la
+
+####### DHCP utils test #######
+test_dhcp_utils_SOURCES = \
+ test-dhcp-utils.c
+
+test_dhcp_utils_LDADD = \
+ $(top_builddir)/src/libNetworkManager.la
+
EXTRA_DIST = \
test-dhclient-duid.leases \
test-dhclient-commented-duid.leases \
@@ -528,13 +550,20 @@ test-dhcp-dhclient$(EXEEXT): $(test_dhcp_dhclient_OBJECTS) $(test_dhcp_dhclient_
@rm -f test-dhcp-dhclient$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_dhcp_dhclient_OBJECTS) $(test_dhcp_dhclient_LDADD) $(LIBS)
+test-dhcp-utils$(EXEEXT): $(test_dhcp_utils_OBJECTS) $(test_dhcp_utils_DEPENDENCIES) $(EXTRA_test_dhcp_utils_DEPENDENCIES)
+ @rm -f test-dhcp-utils$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_dhcp_utils_OBJECTS) $(test_dhcp_utils_LDADD) $(LIBS)
+
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-dhcp-dhclient-utils.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-dhcp-utils.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-dhcp-dhclient.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-dhcp-utils.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -557,6 +586,34 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+nm-dhcp-dhclient-utils.o: $(top_srcdir)/src/dhcp-manager/nm-dhcp-dhclient-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-dhcp-dhclient-utils.o -MD -MP -MF $(DEPDIR)/nm-dhcp-dhclient-utils.Tpo -c -o nm-dhcp-dhclient-utils.o `test -f '$(top_srcdir)/src/dhcp-manager/nm-dhcp-dhclient-utils.c' || echo '$(srcdir)/'`$(top_srcdir)/src/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.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(top_srcdir)/src/dhcp-manager/nm-dhcp-dhclient-utils.c' object='nm-dhcp-dhclient-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 nm-dhcp-dhclient-utils.o `test -f '$(top_srcdir)/src/dhcp-manager/nm-dhcp-dhclient-utils.c' || echo '$(srcdir)/'`$(top_srcdir)/src/dhcp-manager/nm-dhcp-dhclient-utils.c
+
+nm-dhcp-dhclient-utils.obj: $(top_srcdir)/src/dhcp-manager/nm-dhcp-dhclient-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-dhcp-dhclient-utils.obj -MD -MP -MF $(DEPDIR)/nm-dhcp-dhclient-utils.Tpo -c -o nm-dhcp-dhclient-utils.obj `if test -f '$(top_srcdir)/src/dhcp-manager/nm-dhcp-dhclient-utils.c'; then $(CYGPATH_W) '$(top_srcdir)/src/dhcp-manager/nm-dhcp-dhclient-utils.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/src/dhcp-manager/nm-dhcp-dhclient-utils.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-dhcp-dhclient-utils.Tpo $(DEPDIR)/nm-dhcp-dhclient-utils.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(top_srcdir)/src/dhcp-manager/nm-dhcp-dhclient-utils.c' object='nm-dhcp-dhclient-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 nm-dhcp-dhclient-utils.obj `if test -f '$(top_srcdir)/src/dhcp-manager/nm-dhcp-dhclient-utils.c'; then $(CYGPATH_W) '$(top_srcdir)/src/dhcp-manager/nm-dhcp-dhclient-utils.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/src/dhcp-manager/nm-dhcp-dhclient-utils.c'; fi`
+
+nm-dhcp-utils.o: $(top_srcdir)/src/dhcp-manager/nm-dhcp-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-dhcp-utils.o -MD -MP -MF $(DEPDIR)/nm-dhcp-utils.Tpo -c -o nm-dhcp-utils.o `test -f '$(top_srcdir)/src/dhcp-manager/nm-dhcp-utils.c' || echo '$(srcdir)/'`$(top_srcdir)/src/dhcp-manager/nm-dhcp-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-dhcp-utils.Tpo $(DEPDIR)/nm-dhcp-utils.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(top_srcdir)/src/dhcp-manager/nm-dhcp-utils.c' object='nm-dhcp-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 nm-dhcp-utils.o `test -f '$(top_srcdir)/src/dhcp-manager/nm-dhcp-utils.c' || echo '$(srcdir)/'`$(top_srcdir)/src/dhcp-manager/nm-dhcp-utils.c
+
+nm-dhcp-utils.obj: $(top_srcdir)/src/dhcp-manager/nm-dhcp-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-dhcp-utils.obj -MD -MP -MF $(DEPDIR)/nm-dhcp-utils.Tpo -c -o nm-dhcp-utils.obj `if test -f '$(top_srcdir)/src/dhcp-manager/nm-dhcp-utils.c'; then $(CYGPATH_W) '$(top_srcdir)/src/dhcp-manager/nm-dhcp-utils.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/src/dhcp-manager/nm-dhcp-utils.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-dhcp-utils.Tpo $(DEPDIR)/nm-dhcp-utils.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(top_srcdir)/src/dhcp-manager/nm-dhcp-utils.c' object='nm-dhcp-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 nm-dhcp-utils.obj `if test -f '$(top_srcdir)/src/dhcp-manager/nm-dhcp-utils.c'; then $(CYGPATH_W) '$(top_srcdir)/src/dhcp-manager/nm-dhcp-utils.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/src/dhcp-manager/nm-dhcp-utils.c'; fi`
+
mostlyclean-libtool:
-rm -f *.lo
diff --git a/src/dhcp-manager/tests/test-dhcp-dhclient.c b/src/dhcp-manager/tests/test-dhcp-dhclient.c
index 1ab182a7c..4f7e96afd 100644
--- a/src/dhcp-manager/tests/test-dhcp-dhclient.c
+++ b/src/dhcp-manager/tests/test-dhcp-dhclient.c
@@ -18,33 +18,50 @@
*
*/
+#include "config.h"
+
#include <glib.h>
#include <string.h>
#include <unistd.h>
+#include <arpa/inet.h>
+#include "gsystem-local-alloc.h"
+#include "NetworkManagerUtils.h"
#include "nm-dhcp-dhclient-utils.h"
+#include "nm-dhcp-utils.h"
#include "nm-utils.h"
#include "nm-ip4-config.h"
+#include "nm-platform.h"
+#include "nm-utils-internal.h"
-#define DEBUG 0
+#define DEBUG 1
static void
test_config (const char *orig,
const char *expected,
const char *hostname,
const char *dhcp_client_id,
+ GBytes *expected_new_client_id,
const char *iface,
- GByteArray *anycast_addr)
+ const char *anycast_addr)
{
- char *new;
+ gs_free char *new = NULL;
+ gs_unref_bytes GBytes *client_id = NULL;
+ gs_unref_bytes GBytes *new_client_id = NULL;
+
+ if (dhcp_client_id) {
+ client_id = nm_dhcp_utils_client_id_string_to_bytes (dhcp_client_id);
+ g_assert (client_id);
+ }
new = nm_dhcp_dhclient_create_config (iface,
FALSE,
- dhcp_client_id,
+ client_id,
anycast_addr,
hostname,
"/path/to/dhclient.conf",
- orig);
+ orig,
+ &new_client_id);
g_assert (new != NULL);
#if DEBUG
@@ -58,9 +75,13 @@ test_config (const char *orig,
new, expected);
}
#endif
- g_assert (strlen (new) == strlen (expected));
- g_assert (strcmp (new, expected) == 0);
- g_free (new);
+ g_assert_cmpstr (new, ==, expected);
+
+ if (expected_new_client_id) {
+ g_assert (new_client_id);
+ g_assert (g_bytes_equal (new_client_id, expected_new_client_id));
+ } else
+ g_assert (new_client_id == NULL);
}
/*******************************************/
@@ -82,11 +103,7 @@ static const char *orig_missing_expected = \
static void
test_orig_missing (void)
{
- test_config (NULL, orig_missing_expected,
- NULL,
- NULL,
- "eth0",
- NULL);
+ test_config (NULL, orig_missing_expected, NULL, NULL, NULL, "eth0", NULL);
}
/*******************************************/
@@ -117,6 +134,7 @@ test_override_client_id (void)
test_config (override_client_id_orig, override_client_id_expected,
NULL,
"11:22:33:44:55:66",
+ NULL,
"eth0",
NULL);
}
@@ -145,6 +163,7 @@ test_quote_client_id (void)
test_config (NULL, quote_client_id_expected,
NULL,
"1234",
+ NULL,
"eth0",
NULL);
}
@@ -173,6 +192,113 @@ test_ascii_client_id (void)
test_config (NULL, ascii_client_id_expected,
NULL,
"qb:cd:ef:12:34:56",
+ NULL,
+ "eth0",
+ NULL);
+}
+
+/*******************************************/
+
+static const char *hex_single_client_id_expected = \
+ "# Created by NetworkManager\n"
+ "\n"
+ "send dhcp-client-identifier ab:cd:0e: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_hex_single_client_id (void)
+{
+ test_config (NULL, hex_single_client_id_expected,
+ NULL,
+ "ab:cd:e:12:34:56",
+ NULL,
+ "eth0",
+ NULL);
+}
+
+/*******************************************/
+
+static const char *existing_hex_client_id_orig = \
+ "send dhcp-client-identifier 00:30:04:20:7A:08;\n";
+
+static const char *existing_hex_client_id_expected = \
+ "# Created by NetworkManager\n"
+ "# Merged from /path/to/dhclient.conf\n"
+ "\n"
+ "send dhcp-client-identifier 00:30:04:20:7A:08;\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_existing_hex_client_id (void)
+{
+ gs_unref_bytes GBytes *new_client_id = NULL;
+ const guint8 bytes[] = { 0x00, 0x30, 0x04,0x20, 0x7A, 0x08 };
+
+ new_client_id = g_bytes_new (bytes, sizeof (bytes));
+ test_config (existing_hex_client_id_orig, existing_hex_client_id_expected,
+ NULL,
+ NULL,
+ new_client_id,
+ "eth0",
+ NULL);
+}
+
+/*******************************************/
+
+#define EACID "qb:cd:ef:12:34:56"
+
+static const char *existing_ascii_client_id_orig = \
+ "send dhcp-client-identifier \"" EACID "\";\n";
+
+static const char *existing_ascii_client_id_expected = \
+ "# Created by NetworkManager\n"
+ "# Merged from /path/to/dhclient.conf\n"
+ "\n"
+ "send dhcp-client-identifier \"" EACID "\";\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_existing_ascii_client_id (void)
+{
+ gs_unref_bytes GBytes *new_client_id = NULL;
+ char buf[STRLEN (EACID) + 1] = { 0 };
+
+ memcpy (buf + 1, EACID, STRLEN (EACID));
+ new_client_id = g_bytes_new (buf, sizeof (buf));
+ test_config (existing_ascii_client_id_orig, existing_ascii_client_id_expected,
+ NULL,
+ NULL,
+ new_client_id,
"eth0",
NULL);
}
@@ -205,6 +331,7 @@ test_override_hostname (void)
test_config (override_hostname_orig, override_hostname_expected,
"blahblah",
NULL,
+ NULL,
"eth0",
NULL);
}
@@ -239,6 +366,7 @@ test_existing_alsoreq (void)
test_config (existing_alsoreq_orig, existing_alsoreq_expected,
NULL,
NULL,
+ NULL,
"eth0",
NULL);
}
@@ -277,6 +405,7 @@ test_existing_multiline_alsoreq (void)
test_config (existing_multiline_alsoreq_orig, existing_multiline_alsoreq_expected,
NULL,
NULL,
+ NULL,
"eth0",
NULL);
}
@@ -585,6 +714,9 @@ main (int argc, char **argv)
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/hex_single_client_id", test_hex_single_client_id);
+ g_test_add_func ("/dhcp/dhclient/existing-hex-client-id", test_existing_hex_client_id);
+ g_test_add_func ("/dhcp/dhclient/existing-ascii-client-id", test_existing_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);
diff --git a/src/dhcp-manager/tests/test-dhcp-utils.c b/src/dhcp-manager/tests/test-dhcp-utils.c
new file mode 100644
index 000000000..4ff8caad7
--- /dev/null
+++ b/src/dhcp-manager/tests/test-dhcp-utils.c
@@ -0,0 +1,723 @@
+/* -*- 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) 2008 - 2014 Red Hat, Inc.
+ *
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <string.h>
+
+#include <nm-utils.h>
+
+#include "nm-dhcp-utils.h"
+#include "nm-logging.h"
+#include "nm-platform.h"
+
+#include "nm-test-utils.h"
+
+typedef struct {
+ const char *name;
+ const char *value;
+} Option;
+
+static GHashTable *
+fill_table (const Option *test_options, GHashTable *table)
+{
+ const Option *opt;
+
+ if (!table)
+ table = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, NULL);
+ for (opt = test_options; opt->name; opt++)
+ g_hash_table_insert (table, (gpointer) opt->name, (gpointer) opt->value);
+ return table;
+}
+
+static const Option generic_options[] = {
+ { "subnet_mask", "255.255.255.0" },
+ { "ip_address", "192.168.1.106" },
+ { "network_number", "192.168.1.0" },
+ { "expiry", "1232324877" },
+ { "dhcp_lease_time", "3600" },
+ { "dhcp_server_identifier", "192.168.1.1" },
+ { "routers", "192.168.1.1" },
+ { "domain_name_servers", "216.254.95.2 216.231.41.2" },
+ { "dhcp_message_type", "5" },
+ { "broadcast_address", "192.168.1.255" },
+ { "domain_search", "foobar.com blah.foobar.com" },
+ { "host_name", "nmreallywhipsthe" },
+ { "domain_name", "lamasass.com" },
+ { "interface_mtu", "987" },
+ { "static_routes", "10.1.1.5 10.1.1.1 100.99.88.56 10.1.1.1" },
+ { NULL, NULL }
+};
+
+static void
+test_generic_options (void)
+{
+ GHashTable *options;
+ NMIP4Config *ip4_config;
+ 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";
+ const char *expected_dns2 = "216.231.41.2";
+ const char *expected_search1 = "foobar.com";
+ const char *expected_search2 = "blah.foobar.com";
+ const char *expected_route1_dest = "10.1.1.5";
+ const char *expected_route1_gw = "10.1.1.1";
+ const char *expected_route2_dest = "100.99.88.56";
+ const char *expected_route2_gw = "10.1.1.1";
+
+ options = fill_table (generic_options, NULL);
+ ip4_config = nm_dhcp_utils_ip4_config_from_options ("eth0", options, 0);
+ g_assert (ip4_config);
+
+ /* IP4 address */
+ g_assert_cmpint (nm_ip4_config_get_num_addresses (ip4_config), ==, 1);
+ address = nm_ip4_config_get_address (ip4_config, 0);
+ g_assert (inet_pton (AF_INET, expected_addr, &tmp) > 0);
+ g_assert (address->address == tmp);
+ g_assert (address->peer_address == 0);
+ g_assert_cmpint (address->plen, ==, 24);
+
+ /* Gateway */
+ g_assert (inet_pton (AF_INET, expected_gw, &tmp) > 0);
+ g_assert (nm_ip4_config_get_gateway (ip4_config) == tmp);
+
+ g_assert_cmpint (nm_ip4_config_get_num_wins (ip4_config), ==, 0);
+
+ g_assert_cmpint (nm_ip4_config_get_mtu (ip4_config), ==, 987);
+
+ /* Domain searches */
+ g_assert_cmpint (nm_ip4_config_get_num_searches (ip4_config), ==, 2);
+ g_assert_cmpstr (nm_ip4_config_get_search (ip4_config, 0), ==, expected_search1);
+ g_assert_cmpstr (nm_ip4_config_get_search (ip4_config, 1), ==, expected_search2);
+
+ /* DNS servers */
+ g_assert_cmpint (nm_ip4_config_get_num_nameservers (ip4_config), ==, 2);
+ g_assert (inet_pton (AF_INET, expected_dns1, &tmp) > 0);
+ g_assert (nm_ip4_config_get_nameserver (ip4_config, 0) == tmp);
+ g_assert (inet_pton (AF_INET, expected_dns2, &tmp) > 0);
+ g_assert (nm_ip4_config_get_nameserver (ip4_config, 1) == tmp);
+
+ /* Routes */
+ g_assert_cmpint (nm_ip4_config_get_num_routes (ip4_config), ==, 2);
+
+ /* Route #1 */
+ route = nm_ip4_config_get_route (ip4_config, 0);
+ g_assert (inet_pton (AF_INET, expected_route1_dest, &tmp) > 0);
+ g_assert (route->network == tmp);
+ g_assert (inet_pton (AF_INET, expected_route1_gw, &tmp) > 0);
+ g_assert (route->gateway == tmp);
+ g_assert_cmpint (route->plen, ==, 32);
+ g_assert_cmpint (route->metric, ==, 0);
+
+ /* Route #2 */
+ route = nm_ip4_config_get_route (ip4_config, 1);
+ g_assert (inet_pton (AF_INET, expected_route2_dest, &tmp) > 0);
+ g_assert (route->network == tmp);
+ g_assert (inet_pton (AF_INET, expected_route2_gw, &tmp) > 0);
+ g_assert (route->gateway == tmp);
+ g_assert_cmpint (route->plen, ==, 32);
+ g_assert_cmpint (route->metric, ==, 0);
+
+ g_hash_table_destroy (options);
+}
+
+static void
+test_wins_options (void)
+{
+ GHashTable *options;
+ NMIP4Config *ip4_config;
+ const NMPlatformIP4Address *address;
+ guint32 tmp;
+ const char *expected_wins1 = "63.12.199.5";
+ const char *expected_wins2 = "150.4.88.120";
+ static const Option data[] = {
+ { "netbios_name_servers", "63.12.199.5 150.4.88.120" },
+ { NULL, NULL }
+ };
+
+ options = fill_table (generic_options, NULL);
+ options = fill_table (data, options);
+ ip4_config = nm_dhcp_utils_ip4_config_from_options ("eth0", options, 0);
+ g_assert (ip4_config);
+
+ /* IP4 address */
+ g_assert_cmpint (nm_ip4_config_get_num_addresses (ip4_config), ==, 1);
+ address = nm_ip4_config_get_address (ip4_config, 0);
+ g_assert (address);
+ g_assert_cmpint (nm_ip4_config_get_num_wins (ip4_config), ==, 2);
+ g_assert (inet_pton (AF_INET, expected_wins1, &tmp) > 0);
+ g_assert (nm_ip4_config_get_wins (ip4_config, 0) == tmp);
+ g_assert (inet_pton (AF_INET, expected_wins2, &tmp) > 0);
+ g_assert (nm_ip4_config_get_wins (ip4_config, 1) == tmp);
+
+ g_hash_table_destroy (options);
+}
+
+static void
+ip4_test_route (NMIP4Config *ip4_config,
+ guint route_num,
+ const char *expected_dest,
+ const char *expected_gw,
+ guint expected_prefix)
+{
+ const NMPlatformIP4Route *route;
+ guint32 tmp;
+
+ route = nm_ip4_config_get_route (ip4_config, route_num);
+ g_assert (inet_pton (AF_INET, expected_dest, &tmp) > 0);
+ g_assert (route->network == tmp);
+ g_assert (inet_pton (AF_INET, expected_gw, &tmp) > 0);
+ g_assert (route->gateway == tmp);
+ g_assert_cmpint (route->plen, ==, expected_prefix);
+ g_assert_cmpint (route->metric, ==, 0);
+}
+
+static void
+ip4_test_gateway (NMIP4Config *ip4_config, const char *expected_gw)
+{
+ guint32 tmp;
+
+ g_assert_cmpint (nm_ip4_config_get_num_addresses (ip4_config), ==, 1);
+ g_assert (inet_pton (AF_INET, expected_gw, &tmp) > 0);
+ g_assert (nm_ip4_config_get_gateway (ip4_config) == tmp);
+}
+
+static void
+test_classless_static_routes_1 (void)
+{
+ GHashTable *options;
+ NMIP4Config *ip4_config;
+ const char *expected_route1_dest = "192.168.10.0";
+ const char *expected_route1_gw = "192.168.1.1";
+ const char *expected_route2_dest = "10.0.0.0";
+ const char *expected_route2_gw = "10.17.66.41";
+ static const Option data[] = {
+ /* dhclient custom format */
+ { "rfc3442_classless_static_routes", "24 192 168 10 192 168 1 1 8 10 10 17 66 41" },
+ { NULL, NULL }
+ };
+
+ options = fill_table (generic_options, NULL);
+ options = fill_table (data, options);
+ ip4_config = nm_dhcp_utils_ip4_config_from_options ("eth0", options, 0);
+ g_assert (ip4_config);
+
+ /* IP4 routes */
+ g_assert_cmpint (nm_ip4_config_get_num_routes (ip4_config), ==, 2);
+ ip4_test_route (ip4_config, 0, expected_route1_dest, expected_route1_gw, 24);
+ ip4_test_route (ip4_config, 1, expected_route2_dest, expected_route2_gw, 8);
+
+ g_hash_table_destroy (options);
+}
+
+static void
+test_classless_static_routes_2 (void)
+{
+ GHashTable *options;
+ NMIP4Config *ip4_config;
+ const char *expected_route1_dest = "192.168.10.0";
+ const char *expected_route1_gw = "192.168.1.1";
+ const char *expected_route2_dest = "10.0.0.0";
+ const char *expected_route2_gw = "10.17.66.41";
+ static const Option data[] = {
+ /* dhcpcd format */
+ { "classless_static_routes", "192.168.10.0/24 192.168.1.1 10.0.0.0/8 10.17.66.41" },
+ { NULL, NULL }
+ };
+
+ options = fill_table (generic_options, NULL);
+ options = fill_table (data, options);
+ ip4_config = nm_dhcp_utils_ip4_config_from_options ("eth0", options, 0);
+ g_assert (ip4_config);
+
+ /* IP4 routes */
+ g_assert_cmpint (nm_ip4_config_get_num_routes (ip4_config), ==, 2);
+ ip4_test_route (ip4_config, 0, expected_route1_dest, expected_route1_gw, 24);
+ ip4_test_route (ip4_config, 1, expected_route2_dest, expected_route2_gw, 8);
+
+ g_hash_table_destroy (options);
+}
+
+static void
+test_fedora_dhclient_classless_static_routes (void)
+{
+ GHashTable *options;
+ NMIP4Config *ip4_config;
+ const char *expected_route1_dest = "129.210.177.128";
+ const char *expected_route1_gw = "192.168.0.113";
+ const char *expected_route2_dest = "2.0.0.0";
+ const char *expected_route2_gw = "10.34.255.6";
+ const char *expected_gateway = "192.168.0.113";
+ static const Option data[] = {
+ /* Fedora dhclient format */
+ { "classless_static_routes", "0 192.168.0.113 25.129.210.177.132 192.168.0.113 7.2 10.34.255.6" },
+ { NULL, NULL }
+ };
+
+ options = fill_table (generic_options, NULL);
+ options = fill_table (data, options);
+ ip4_config = nm_dhcp_utils_ip4_config_from_options ("eth0", options, 0);
+ g_assert (ip4_config);
+
+ /* IP4 routes */
+ g_assert_cmpint (nm_ip4_config_get_num_routes (ip4_config), ==, 2);
+ ip4_test_route (ip4_config, 0, expected_route1_dest, expected_route1_gw, 25);
+ ip4_test_route (ip4_config, 1, expected_route2_dest, expected_route2_gw, 7);
+
+ /* Gateway */
+ ip4_test_gateway (ip4_config, expected_gateway);
+
+ g_hash_table_destroy (options);
+}
+
+static void
+test_dhclient_invalid_classless_routes_1 (void)
+{
+ GHashTable *options;
+ NMIP4Config *ip4_config;
+ const char *expected_route1_dest = "192.168.10.0";
+ const char *expected_route1_gw = "192.168.1.1";
+ static const Option data[] = {
+ /* dhclient format */
+ { "rfc3442_classless_static_routes", "24 192 168 10 192 168 1 1 45 10 17 66 41" },
+ { NULL, NULL }
+ };
+
+ 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_utils_ip4_config_from_options ("eth0", options, 0);
+ g_assert (ip4_config);
+ g_test_assert_expected_messages ();
+
+ /* IP4 routes */
+ g_assert_cmpint (nm_ip4_config_get_num_routes (ip4_config), ==, 1);
+ ip4_test_route (ip4_config, 0, expected_route1_dest, expected_route1_gw, 24);
+
+ g_hash_table_destroy (options);
+}
+
+static void
+test_dhcpcd_invalid_classless_routes_1 (void)
+{
+ GHashTable *options;
+ NMIP4Config *ip4_config;
+ const char *expected_route1_dest = "10.1.1.5";
+ const char *expected_route1_gw = "10.1.1.1";
+ const char *expected_route2_dest = "100.99.88.56";
+ const char *expected_route2_gw = "10.1.1.1";
+ static const Option data[] = {
+ /* dhcpcd format */
+ { "classless_static_routes", "192.168.10.0/24 192.168.1.1 10.0.adfadf/44 10.17.66.41" },
+ { NULL, NULL }
+ };
+
+ 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_utils_ip4_config_from_options ("eth0", options, 0);
+ g_assert (ip4_config);
+ g_test_assert_expected_messages ();
+
+ /* Test falling back to old-style static routes if the classless static
+ * routes are invalid.
+ */
+ g_assert_cmpint (nm_ip4_config_get_num_routes (ip4_config), ==, 2);
+ ip4_test_route (ip4_config, 0, expected_route1_dest, expected_route1_gw, 32);
+ ip4_test_route (ip4_config, 1, expected_route2_dest, expected_route2_gw, 32);
+
+ g_hash_table_destroy (options);
+}
+
+static void
+test_dhclient_invalid_classless_routes_2 (void)
+{
+ GHashTable *options;
+ NMIP4Config *ip4_config;
+ const char *expected_route1_dest = "10.1.1.5";
+ const char *expected_route1_gw = "10.1.1.1";
+ const char *expected_route2_dest = "100.99.88.56";
+ const char *expected_route2_gw = "10.1.1.1";
+ static const Option data[] = {
+ { "rfc3442_classless_static_routes", "45 10 17 66 41 24 192 168 10 192 168 1 1" },
+ { NULL, NULL }
+ };
+
+ 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_utils_ip4_config_from_options ("eth0", options, 0);
+ g_assert (ip4_config);
+ g_test_assert_expected_messages ();
+
+ /* Test falling back to old-style static routes if the classless static
+ * routes are invalid.
+ */
+ g_assert_cmpint (nm_ip4_config_get_num_routes (ip4_config), ==, 2);
+ ip4_test_route (ip4_config, 0, expected_route1_dest, expected_route1_gw, 32);
+ ip4_test_route (ip4_config, 1, expected_route2_dest, expected_route2_gw, 32);
+
+ g_hash_table_destroy (options);
+}
+
+static void
+test_dhcpcd_invalid_classless_routes_2 (void)
+{
+ GHashTable *options;
+ NMIP4Config *ip4_config;
+ const char *expected_route1_dest = "10.1.1.5";
+ const char *expected_route1_gw = "10.1.1.1";
+ const char *expected_route2_dest = "100.99.88.56";
+ const char *expected_route2_gw = "10.1.1.1";
+ static const Option data[] = {
+ { "classless_static_routes", "10.0.adfadf/44 10.17.66.41 192.168.10.0/24 192.168.1.1" },
+ { NULL, NULL }
+ };
+
+ 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_utils_ip4_config_from_options ("eth0", options, 0);
+ g_assert (ip4_config);
+ g_test_assert_expected_messages ();
+
+ /* Test falling back to old-style static routes if the classless static
+ * routes are invalid.
+ */
+
+ /* Routes */
+ g_assert_cmpint (nm_ip4_config_get_num_routes (ip4_config), ==, 2);
+ ip4_test_route (ip4_config, 0, expected_route1_dest, expected_route1_gw, 32);
+ ip4_test_route (ip4_config, 1, expected_route2_dest, expected_route2_gw, 32);
+
+ g_hash_table_destroy (options);
+}
+
+static void
+test_dhclient_invalid_classless_routes_3 (void)
+{
+ GHashTable *options;
+ NMIP4Config *ip4_config;
+ const char *expected_route1_dest = "192.168.10.0";
+ const char *expected_route1_gw = "192.168.1.1";
+ static const Option data[] = {
+ { "rfc3442_classless_static_routes", "24 192 168 10 192 168 1 1 32 128 10 17 66 41" },
+ { NULL, NULL }
+ };
+
+ 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_utils_ip4_config_from_options ("eth0", options, 0);
+ g_assert (ip4_config);
+ g_test_assert_expected_messages ();
+
+ /* IP4 routes */
+ g_assert_cmpint (nm_ip4_config_get_num_routes (ip4_config), ==, 1);
+ ip4_test_route (ip4_config, 0, expected_route1_dest, expected_route1_gw, 24);
+
+ g_hash_table_destroy (options);
+}
+
+static void
+test_dhcpcd_invalid_classless_routes_3 (void)
+{
+ GHashTable *options;
+ NMIP4Config *ip4_config;
+ const char *expected_route1_dest = "192.168.10.0";
+ const char *expected_route1_gw = "192.168.1.1";
+ static Option data[] = {
+ { "classless_static_routes", "192.168.10.0/24 192.168.1.1 128/32 10.17.66.41" },
+ { NULL, NULL }
+ };
+
+ 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_utils_ip4_config_from_options ("eth0", options, 0);
+ g_assert (ip4_config);
+ g_test_assert_expected_messages ();
+
+ /* IP4 routes */
+ g_assert_cmpint (nm_ip4_config_get_num_routes (ip4_config), ==, 1);
+ ip4_test_route (ip4_config, 0, expected_route1_dest, expected_route1_gw, 24);
+
+ g_hash_table_destroy (options);
+}
+
+static void
+test_dhclient_gw_in_classless_routes (void)
+{
+ GHashTable *options;
+ NMIP4Config *ip4_config;
+ const char *expected_route1_dest = "192.168.10.0";
+ const char *expected_route1_gw = "192.168.1.1";
+ const char *expected_gateway = "192.2.3.4";
+ static Option data[] = {
+ { "rfc3442_classless_static_routes", "24 192 168 10 192 168 1 1 0 192 2 3 4" },
+ { NULL, NULL }
+ };
+
+ options = fill_table (generic_options, NULL);
+ options = fill_table (data, options);
+ ip4_config = nm_dhcp_utils_ip4_config_from_options ("eth0", options, 0);
+ g_assert (ip4_config);
+
+ /* IP4 routes */
+ g_assert_cmpint (nm_ip4_config_get_num_routes (ip4_config), ==, 1);
+ ip4_test_route (ip4_config, 0, expected_route1_dest, expected_route1_gw, 24);
+
+ /* Gateway */
+ ip4_test_gateway (ip4_config, expected_gateway);
+
+ g_hash_table_destroy (options);
+}
+
+static void
+test_dhcpcd_gw_in_classless_routes (void)
+{
+ GHashTable *options;
+ NMIP4Config *ip4_config;
+ const char *expected_route1_dest = "192.168.10.0";
+ const char *expected_route1_gw = "192.168.1.1";
+ const char *expected_gateway = "192.2.3.4";
+ static Option data[] = {
+ { "classless_static_routes", "192.168.10.0/24 192.168.1.1 0.0.0.0/0 192.2.3.4" },
+ { NULL, NULL }
+ };
+
+ options = fill_table (generic_options, NULL);
+ options = fill_table (data, options);
+ ip4_config = nm_dhcp_utils_ip4_config_from_options ("eth0", options, 0);
+ g_assert (ip4_config);
+
+ /* IP4 routes */
+ g_assert_cmpint (nm_ip4_config_get_num_routes (ip4_config), ==, 1);
+ ip4_test_route (ip4_config, 0, expected_route1_dest, expected_route1_gw, 24);
+
+ /* Gateway */
+ ip4_test_gateway (ip4_config, expected_gateway);
+
+ g_hash_table_destroy (options);
+}
+
+static void
+test_escaped_domain_searches (void)
+{
+ GHashTable *options;
+ NMIP4Config *ip4_config;
+ const char *expected_search0 = "host1";
+ const char *expected_search1 = "host2";
+ const char *expected_search2 = "host3";
+ static const Option data[] = {
+ { "domain_search", "host1\\032host2\\032host3" },
+ { NULL, NULL }
+ };
+
+ options = fill_table (generic_options, NULL);
+ options = fill_table (data, options);
+ ip4_config = nm_dhcp_utils_ip4_config_from_options ("eth0", options, 0);
+ g_assert (ip4_config);
+
+ /* domain searches */
+ g_assert_cmpint (nm_ip4_config_get_num_searches (ip4_config), ==, 3);
+ g_assert_cmpstr (nm_ip4_config_get_search (ip4_config, 0), ==, expected_search0);
+ g_assert_cmpstr (nm_ip4_config_get_search (ip4_config, 1), ==, expected_search1);
+ g_assert_cmpstr (nm_ip4_config_get_search (ip4_config, 2), ==, expected_search2);
+
+ g_hash_table_destroy (options);
+}
+
+static void
+test_invalid_escaped_domain_searches (void)
+{
+ GHashTable *options;
+ NMIP4Config *ip4_config;
+ static const Option data[] = {
+ { "domain_search", "host1\\aahost2\\032host3" },
+ { NULL, NULL }
+ };
+
+ options = fill_table (generic_options, NULL);
+ options = fill_table (data, options);
+
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*invalid domain search*");
+ ip4_config = nm_dhcp_utils_ip4_config_from_options ("eth0", options, 0);
+ g_assert (ip4_config);
+ g_test_assert_expected_messages ();
+
+ /* domain searches */
+ g_assert_cmpint (nm_ip4_config_get_num_searches (ip4_config), ==, 0);
+
+ g_hash_table_destroy (options);
+}
+
+static void
+test_ip4_missing_prefix (const char *ip, guint32 expected_prefix)
+{
+ GHashTable *options;
+ NMIP4Config *ip4_config;
+ const NMPlatformIP4Address *address;
+
+ options = fill_table (generic_options, NULL);
+ g_hash_table_insert (options, "ip_address", (gpointer) ip);
+ g_hash_table_remove (options, "subnet_mask");
+
+ ip4_config = nm_dhcp_utils_ip4_config_from_options ("eth0", options, 0);
+ g_assert (ip4_config);
+
+ g_assert_cmpint (nm_ip4_config_get_num_addresses (ip4_config), ==, 1);
+ address = nm_ip4_config_get_address (ip4_config, 0);
+ g_assert (address);
+ g_assert_cmpint (address->plen, ==, expected_prefix);
+
+ g_hash_table_destroy (options);
+}
+
+static void
+test_ip4_missing_prefix_24 (void)
+{
+ test_ip4_missing_prefix ("192.168.1.10", 24);
+}
+
+static void
+test_ip4_missing_prefix_16 (void)
+{
+ test_ip4_missing_prefix ("172.16.54.50", 16);
+}
+
+static void
+test_ip4_missing_prefix_8 (void)
+{
+ test_ip4_missing_prefix ("10.1.2.3", 8);
+}
+
+static void
+test_ip4_prefix_classless (void)
+{
+ GHashTable *options;
+ NMIP4Config *ip4_config;
+ 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
+ * doesn't send the subnet mask.
+ */
+
+ options = fill_table (generic_options, NULL);
+ g_hash_table_insert (options, "ip_address", "172.16.54.22");
+ g_hash_table_insert (options, "subnet_mask", "255.255.252.0");
+
+ ip4_config = nm_dhcp_utils_ip4_config_from_options ("eth0", options, 0);
+ g_assert (ip4_config);
+
+ g_assert_cmpint (nm_ip4_config_get_num_addresses (ip4_config), ==, 1);
+ address = nm_ip4_config_get_address (ip4_config, 0);
+ g_assert (address);
+ g_assert_cmpint (address->plen, ==, 22);
+
+ g_hash_table_destroy (options);
+}
+
+#define COMPARE_ID(src, is_str, expected, expected_len) \
+G_STMT_START { \
+ gs_unref_bytes GBytes *b = NULL; \
+ const char *p; \
+ gsize l; \
+ \
+ b = nm_dhcp_utils_client_id_string_to_bytes (src); \
+ g_assert (b); \
+ p = g_bytes_get_data (b, &l); \
+ if (is_str) { \
+ g_assert_cmpint (l, ==, expected_len + 1); \
+ g_assert_cmpint (((const char *) p)[0], ==, 0); \
+ g_assert (memcmp (p + 1, expected, expected_len) == 0); \
+ } else { \
+ g_assert_cmpint (l, ==, expected_len); \
+ g_assert (memcmp (p, expected, expected_len) == 0); \
+ } \
+} G_STMT_END
+
+static void
+test_client_id_from_string (void)
+{
+ const char *nothex = "asdfasdfasdfasdfasdfasdfasdf";
+ const char *allhex = "00:11:22:33:4:55:66:77:88";
+ const guint8 allhex_bin[] = { 0x00, 0x11, 0x22, 0x33, 0x04, 0x55, 0x66, 0x77, 0x88 };
+ const char *somehex = "00:11:22:33:44:55:asdfasdfasdf:99:10";
+ const char *nocolons = "0011223344559910";
+ const char *endcolon = "00:11:22:33:44:55:";
+
+ COMPARE_ID (nothex, TRUE, nothex, strlen (nothex));
+ COMPARE_ID (allhex, FALSE, allhex_bin, sizeof (allhex_bin));
+ COMPARE_ID (somehex, TRUE, somehex, strlen (somehex));
+ COMPARE_ID (nocolons, TRUE, nocolons, strlen (nocolons));
+ COMPARE_ID (endcolon, TRUE, endcolon, strlen (endcolon));
+}
+
+NMTST_DEFINE ();
+
+int main (int argc, char **argv)
+{
+ nmtst_init_assert_logging (&argc, &argv);
+ nm_logging_setup ("WARN", "DEFAULT", NULL, NULL);
+
+ g_test_add_func ("/dhcp/generic-options", test_generic_options);
+ g_test_add_func ("/dhcp/wins-options", test_wins_options);
+ g_test_add_func ("/dhcp/classless-static-routes-1", test_classless_static_routes_1);
+ g_test_add_func ("/dhcp/classless-static-routes-2", test_classless_static_routes_2);
+ g_test_add_func ("/dhcp/fedora-dhclient-classless-static-routes", test_fedora_dhclient_classless_static_routes);
+ g_test_add_func ("/dhcp/dhclient-invalid-classless-routes-1", test_dhclient_invalid_classless_routes_1);
+ g_test_add_func ("/dhcp/dhcpcd-invalid-classless-routes-1", test_dhcpcd_invalid_classless_routes_1);
+ g_test_add_func ("/dhcp/dhclient-invalid-classless-routes-2", test_dhclient_invalid_classless_routes_2);
+ g_test_add_func ("/dhcp/dhcpcd-invalid-classless-routes-2", test_dhcpcd_invalid_classless_routes_2);
+ g_test_add_func ("/dhcp/dhclient-invalid-classless-routes-3", test_dhclient_invalid_classless_routes_3);
+ g_test_add_func ("/dhcp/dhcpcd-invalid-classless-routes-3", test_dhcpcd_invalid_classless_routes_3);
+ g_test_add_func ("/dhcp/dhclient-gw-in-classless-routes", test_dhclient_gw_in_classless_routes);
+ g_test_add_func ("/dhcp/dhcpcd-gw-in-classless-routes", test_dhcpcd_gw_in_classless_routes);
+ g_test_add_func ("/dhcp/escaped-domain-searches", test_escaped_domain_searches);
+ g_test_add_func ("/dhcp/invalid-escaped-domain-searches", test_invalid_escaped_domain_searches);
+ g_test_add_func ("/dhcp/ip4-missing-prefix-24", test_ip4_missing_prefix_24);
+ g_test_add_func ("/dhcp/ip4-missing-prefix-16", test_ip4_missing_prefix_16);
+ g_test_add_func ("/dhcp/ip4-missing-prefix-8", test_ip4_missing_prefix_8);
+ g_test_add_func ("/dhcp/ip4-prefix-classless", test_ip4_prefix_classless);
+ g_test_add_func ("/dhcp/client-id-from-string", test_client_id_from_string);
+
+ return g_test_run ();
+}
+
diff --git a/src/dns-manager/nm-dns-dnsmasq.c b/src/dns-manager/nm-dns-dnsmasq.c
index 8367693da..f26ccfaa3 100644
--- a/src/dns-manager/nm-dns-dnsmasq.c
+++ b/src/dns-manager/nm-dns-dnsmasq.c
@@ -18,7 +18,8 @@
*
*/
-#include <config.h>
+#include "config.h"
+
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
@@ -35,6 +36,7 @@
#include "nm-ip4-config.h"
#include "nm-ip6-config.h"
#include "nm-dns-utils.h"
+#include "NetworkManagerUtils.h"
G_DEFINE_TYPE (NMDnsDnsmasq, nm_dns_dnsmasq, NM_TYPE_DNS_PLUGIN)
@@ -50,26 +52,6 @@ typedef struct {
/*******************************************/
-static inline const char *
-find_dnsmasq (void)
-{
- static const char *paths[] = {
- DNSMASQ_PATH,
- "/usr/local/sbin/dnsmasq",
- "/usr/sbin/dnsmasq",
- "/sbin/dnsmasq",
- NULL
- };
- const char **binary = paths;
-
- while (*binary != NULL) {
- if (**binary && g_file_test (*binary, G_FILE_TEST_EXISTS))
- return *binary;
- binary++;
- }
- return NULL;
-}
-
static gboolean
add_ip4_config (GString *str, NMIP4Config *ip4, gboolean split)
{
@@ -225,6 +207,7 @@ update (NMDnsPlugin *plugin,
const char *hostname)
{
NMDnsDnsmasq *self = NM_DNS_DNSMASQ (plugin);
+ const char *dm_binary;
GString *conf;
GSList *iter;
const char *argv[15];
@@ -240,6 +223,12 @@ update (NMDnsPlugin *plugin,
*/
nm_dns_plugin_child_kill (plugin);
+ dm_binary = nm_utils_find_helper ("dnsmasq", DNSMASQ_PATH, NULL);
+ if (!dm_binary) {
+ nm_log_warn (LOGD_DNS, "Could not find dnsmasq binary");
+ return FALSE;
+ }
+
/* Build up the new dnsmasq config file */
conf = g_string_sized_new (150);
@@ -281,7 +270,7 @@ update (NMDnsPlugin *plugin,
nm_log_dbg (LOGD_DNS, "dnsmasq local caching DNS configuration:");
nm_log_dbg (LOGD_DNS, "%s", conf->str);
- argv[idx++] = find_dnsmasq ();
+ argv[idx++] = dm_binary;
argv[idx++] = "--no-resolv"; /* Use only commandline */
argv[idx++] = "--keep-in-foreground";
argv[idx++] = "--no-hosts"; /* don't use /etc/hosts to resolve */
diff --git a/src/dns-manager/nm-dns-dnsmasq.h b/src/dns-manager/nm-dns-dnsmasq.h
index 70933c0f1..fc80f0794 100644
--- a/src/dns-manager/nm-dns-dnsmasq.h
+++ b/src/dns-manager/nm-dns-dnsmasq.h
@@ -16,8 +16,8 @@
* Copyright (C) 2010 Red Hat, Inc.
*/
-#ifndef NM_DNS_DNSMASQ_H
-#define NM_DNS_DNSMASQ_H
+#ifndef __NETWORKMANAGER_DNS_DNSMASQ_H__
+#define __NETWORKMANAGER_DNS_DNSMASQ_H__
#include <glib.h>
#include <glib-object.h>
@@ -43,5 +43,5 @@ GType nm_dns_dnsmasq_get_type (void);
NMDnsPlugin *nm_dns_dnsmasq_new (void);
-#endif /* NM_DNS_DNSMASQ_H */
+#endif /* __NETWORKMANAGER_DNS_DNSMASQ_H__ */
diff --git a/src/dns-manager/nm-dns-manager.c b/src/dns-manager/nm-dns-manager.c
index 466aa9a84..0d93d8bb4 100644
--- a/src/dns-manager/nm-dns-manager.c
+++ b/src/dns-manager/nm-dns-manager.c
@@ -35,6 +35,7 @@
#include <glib.h>
#include <glib/gi18n.h>
+#include "nm-utils.h"
#include "nm-dns-manager.h"
#include "nm-ip4-config.h"
#include "nm-ip6-config.h"
@@ -47,7 +48,7 @@
#include "nm-dns-dnsmasq.h"
#include "nm-dns-unbound.h"
-#if HAVE_LIBSOUP
+#if WITH_LIBSOUP
#include <libsoup/soup.h>
#ifdef SOUP_CHECK_VERSION
@@ -130,12 +131,8 @@ merge_one_ip4_config (NMResolvConfData *rc, NMIP4Config *src)
num = nm_ip4_config_get_num_nameservers (src);
for (i = 0; i < num; i++) {
- guint32 addr;
- char buf[INET_ADDRSTRLEN];
-
- addr = nm_ip4_config_get_nameserver (src, i);
- if (inet_ntop (AF_INET, &addr, buf, INET_ADDRSTRLEN) > 0)
- add_string_item (rc->nameservers, buf);
+ add_string_item (rc->nameservers,
+ nm_utils_inet4_ntop (nm_ip4_config_get_nameserver (src, i), NULL));
}
num = nm_ip4_config_get_num_domains (src);
@@ -161,12 +158,8 @@ merge_one_ip4_config (NMResolvConfData *rc, NMIP4Config *src)
/* NIS stuff */
num = nm_ip4_config_get_num_nis_servers (src);
for (i = 0; i < num; i++) {
- guint32 addr;
- char buf[INET_ADDRSTRLEN];
-
- 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);
+ add_string_item (rc->nis_servers,
+ nm_utils_inet4_ntop (nm_ip4_config_get_nis_server (src, i), NULL));
}
if (nm_ip4_config_get_nis_domain (src)) {
@@ -187,25 +180,21 @@ merge_one_ip6_config (NMResolvConfData *rc, NMIP6Config *src)
num = nm_ip6_config_get_num_nameservers (src);
for (i = 0; i < num; i++) {
const struct in6_addr *addr;
- char buf[INET6_ADDRSTRLEN];
- char *tmp;
+ char buf[NM_UTILS_INET_ADDRSTRLEN + 50];
addr = nm_ip6_config_get_nameserver (src, i);
/* 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, INET_ADDRSTRLEN) > 0)
- add_string_item (rc->nameservers, buf);
- } else {
- if (inet_ntop (AF_INET6, addr, buf, INET6_ADDRSTRLEN) > 0) {
- if (iface && IN6_IS_ADDR_LINKLOCAL (addr)) {
- tmp = g_strdup_printf ("%s%%%s", buf, iface);
- add_string_item (rc->nameservers, tmp);
- g_free (tmp);
- } else
- add_string_item (rc->nameservers, buf);
+ if (IN6_IS_ADDR_V4MAPPED (addr))
+ nm_utils_inet4_ntop (addr->s6_addr32[3], buf);
+ else {
+ nm_utils_inet6_ntop (addr, buf);
+ if (iface && IN6_IS_ADDR_LINKLOCAL (addr)) {
+ g_strlcat (buf, "%", sizeof (buf));
+ g_strlcat (buf, iface, sizeof (buf));
}
}
+ add_string_item (rc->nameservers, buf);
}
num = nm_ip6_config_get_num_domains (src);
@@ -359,8 +348,8 @@ write_resolv_conf (FILE *f,
if (fprintf (f, "%s","# Generated by NetworkManager\n") < 0) {
g_set_error (error,
- NM_DNS_MANAGER_ERROR,
- NM_DNS_MANAGER_ERROR_SYSTEM,
+ NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_FAILED,
"Could not write " _PATH_RESCONF ": %s\n",
g_strerror (errno));
return FALSE;
@@ -425,8 +414,8 @@ dispatch_resolvconf (char **searches,
nm_log_info (LOGD_DNS, "Writing DNS information to %s", RESOLVCONF_PATH);
if ((f = popen (cmd, "w")) == NULL)
g_set_error (error,
- NM_DNS_MANAGER_ERROR,
- NM_DNS_MANAGER_ERROR_SYSTEM,
+ NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_FAILED,
"Could not write to %s: %s\n",
RESOLVCONF_PATH,
g_strerror (errno));
@@ -481,8 +470,8 @@ update_resolv_conf (char **searches,
old_errno = errno;
if ((f = fopen (_PATH_RESCONF, "w")) == NULL) {
g_set_error (error,
- NM_DNS_MANAGER_ERROR,
- NM_DNS_MANAGER_ERROR_SYSTEM,
+ NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_FAILED,
"Could not open %s: %s\nCould not open %s: %s\n",
tmp_resolv_conf_realpath,
g_strerror (old_errno),
@@ -504,8 +493,8 @@ update_resolv_conf (char **searches,
* since its error is more important.
*/
g_set_error (error,
- NM_DNS_MANAGER_ERROR,
- NM_DNS_MANAGER_ERROR_SYSTEM,
+ NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_FAILED,
"Could not close %s: %s\n",
tmp_resolv_conf_realpath,
g_strerror (errno));
@@ -518,8 +507,8 @@ update_resolv_conf (char **searches,
if (*error == NULL && do_rename) {
if (rename (tmp_resolv_conf_realpath, resolv_conf_realpath) < 0) {
g_set_error (error,
- NM_DNS_MANAGER_ERROR,
- NM_DNS_MANAGER_ERROR_SYSTEM,
+ NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_FAILED,
"Could not replace " _PATH_RESCONF ": %s\n",
g_strerror (errno));
}
@@ -972,8 +961,7 @@ nm_dns_manager_set_hostname (NMDnsManager *mgr,
/* Certain hostnames we don't want to include in resolv.conf 'searches' */
if ( hostname
- && strcmp (hostname, "localhost.localdomain")
- && strcmp (hostname, "localhost6.localdomain6")
+ && nm_utils_is_specific_hostname (hostname)
&& !strstr (hostname, ".in-addr.arpa")
&& strchr (hostname, '.')) {
filtered = hostname;
@@ -1067,16 +1055,6 @@ nm_dns_manager_get (void)
return singleton;
}
-GQuark
-nm_dns_manager_error_quark (void)
-{
- static GQuark quark = 0;
- if (!quark)
- quark = g_quark_from_static_string ("nm_dns_manager_error");
-
- return quark;
-}
-
static void
init_resolv_conf_mode (NMDnsManager *self)
{
diff --git a/src/dns-manager/nm-dns-manager.h b/src/dns-manager/nm-dns-manager.h
index b2bf2467c..bc374fcf5 100644
--- a/src/dns-manager/nm-dns-manager.h
+++ b/src/dns-manager/nm-dns-manager.h
@@ -21,30 +21,19 @@
* and others
*/
-#ifndef NM_DNS_MANAGER_H
-#define NM_DNS_MANAGER_H
+#ifndef __NETWORKMANAGER_DNS_MANAGER_H__
+#define __NETWORKMANAGER_DNS_MANAGER_H__
#include <glib-object.h>
-#include <dbus/dbus.h>
#include "nm-ip4-config.h"
#include "nm-ip6-config.h"
typedef enum {
- NM_DNS_MANAGER_ERROR_SYSTEM,
- NM_DNS_MANAGER_ERROR_INVALID_NAMESERVER,
- NM_DNS_MANAGER_ERROR_INVALID_HOST,
- NM_DNS_MANAGER_ERROR_INVALID_ID
-} NMDnsManagerError;
-
-typedef enum {
NM_DNS_IP_CONFIG_TYPE_DEFAULT = 0,
NM_DNS_IP_CONFIG_TYPE_BEST_DEVICE,
NM_DNS_IP_CONFIG_TYPE_VPN
} NMDnsIPConfigType;
-#define NM_DNS_MANAGER_ERROR nm_dns_manager_error_quark ()
-GQuark nm_dns_manager_error_quark (void);
-
G_BEGIN_DECLS
#define NM_TYPE_DNS_MANAGER (nm_dns_manager_get_type ())
@@ -114,4 +103,4 @@ NMDnsManagerResolvConfMode nm_dns_manager_get_resolv_conf_mode (NMDnsManager *mg
G_END_DECLS
-#endif /* NM_DNS_MANAGER_H */
+#endif /* __NETWORKMANAGER_DNS_MANAGER_H__ */
diff --git a/src/dns-manager/nm-dns-plugin.c b/src/dns-manager/nm-dns-plugin.c
index e85b2a097..b083b1058 100644
--- a/src/dns-manager/nm-dns-plugin.c
+++ b/src/dns-manager/nm-dns-plugin.c
@@ -17,7 +17,8 @@
*
*/
-#include <config.h>
+#include "config.h"
+
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
@@ -28,6 +29,7 @@
#include "nm-dns-plugin.h"
#include "nm-logging.h"
#include "nm-posix-signals.h"
+#include "NetworkManagerUtils.h"
typedef struct {
gboolean disposed;
@@ -196,29 +198,6 @@ nm_dns_plugin_child_spawn (NMDnsPlugin *self,
return priv->pid;
}
-typedef struct {
- int pid;
- char *progname;
-} KillInfo;
-
-static gboolean
-ensure_killed (gpointer data)
-{
- KillInfo *info = data;
-
- if (kill (info->pid, 0) == 0)
- kill (info->pid, SIGKILL);
-
- /* ensure the child is reaped */
- nm_log_dbg (LOGD_DNS, "waiting for %s pid %d to exit", info->progname, info->pid);
- waitpid (info->pid, NULL, 0);
- nm_log_dbg (LOGD_DNS, "dnsmasq pid %d cleaned up", info->pid);
-
- g_free (info->progname);
- g_free (info);
- return FALSE;
-}
-
gboolean nm_dns_plugin_child_kill (NMDnsPlugin *self)
{
NMDnsPluginPrivate *priv = NM_DNS_PLUGIN_GET_PRIVATE (self);
@@ -229,21 +208,7 @@ gboolean nm_dns_plugin_child_kill (NMDnsPlugin *self)
}
if (priv->pid) {
- KillInfo *info;
-
- if (kill (priv->pid, SIGTERM) == 0) {
- info = g_malloc0 (sizeof (KillInfo));
- info->pid = priv->pid;
- info->progname = g_strdup (priv->progname);
- g_timeout_add_seconds (2, ensure_killed, info);
- } else {
- kill (priv->pid, SIGKILL);
-
- /* ensure the child is reaped */
- nm_log_dbg (LOGD_DNS, "waiting for %s pid %d to exit", priv->progname, priv->pid);
- waitpid (priv->pid, NULL, 0);
- nm_log_dbg (LOGD_DNS, "%s pid %d cleaned up", priv->progname, priv->pid);
- }
+ nm_utils_kill_child_async (priv->pid, SIGTERM, LOGD_DNS, priv->progname, 2000, NULL, NULL);
priv->pid = 0;
g_free (priv->progname);
priv->progname = NULL;
diff --git a/src/dns-manager/nm-dns-plugin.h b/src/dns-manager/nm-dns-plugin.h
index 41a12a58e..ee735a5ab 100644
--- a/src/dns-manager/nm-dns-plugin.h
+++ b/src/dns-manager/nm-dns-plugin.h
@@ -16,8 +16,8 @@
* Copyright (C) 2010 Red Hat, Inc.
*/
-#ifndef NM_DNS_PLUGIN_H
-#define NM_DNS_PLUGIN_H
+#ifndef __NETWORKMANAGER_DNS_PLUGIN_H__
+#define __NETWORKMANAGER_DNS_PLUGIN_H__
#include <glib.h>
#include <glib-object.h>
@@ -109,5 +109,5 @@ GPid nm_dns_plugin_child_spawn (NMDnsPlugin *self,
gboolean nm_dns_plugin_child_kill (NMDnsPlugin *self);
-#endif /* NM_DNS_PLUGIN_H */
+#endif /* __NETWORKMANAGER_DNS_PLUGIN_H__ */
diff --git a/src/dns-manager/nm-dns-unbound.c b/src/dns-manager/nm-dns-unbound.c
index 137fd20b0..533290c11 100644
--- a/src/dns-manager/nm-dns-unbound.c
+++ b/src/dns-manager/nm-dns-unbound.c
@@ -17,6 +17,8 @@
* Copyright (C) 2014 Red Hat, Inc.
* Author: Pavel Å imerda <psimerda@redhat.com>
*/
+#include "config.h"
+
#include "nm-dns-unbound.h"
#include "NetworkManagerUtils.h"
diff --git a/src/dns-manager/nm-dns-unbound.h b/src/dns-manager/nm-dns-unbound.h
index 2aaae7dd4..261326b2d 100644
--- a/src/dns-manager/nm-dns-unbound.h
+++ b/src/dns-manager/nm-dns-unbound.h
@@ -15,8 +15,8 @@
*
* Copyright (C) 2014 Red Hat, Inc.
*/
-#ifndef NM_DNS_UNBOUND_H
-#define NM_DNS_UNBOUND_H
+#ifndef __NETWORKMANAGER_DNS_UNBOUND_H__
+#define __NETWORKMANAGER_DNS_UNBOUND_H__
#include <glib-object.h>
@@ -41,4 +41,4 @@ GType nm_dns_unbound_get_type (void);
NMDnsPlugin *nm_dns_unbound_new (void);
-#endif /* NM_DNS_UNBOUND_H */
+#endif /* __NETWORKMANAGER_DNS_UNBOUND_H__ */
diff --git a/src/dns-manager/nm-dns-utils.c b/src/dns-manager/nm-dns-utils.c
index 3e564ace3..4a5255a42 100644
--- a/src/dns-manager/nm-dns-utils.c
+++ b/src/dns-manager/nm-dns-utils.c
@@ -17,10 +17,13 @@
*
*/
+#include "config.h"
+
#include <arpa/inet.h>
#include <string.h>
#include "nm-dns-utils.h"
+#include "nm-platform.h"
#include "nm-utils.h"
static void
diff --git a/src/dns-manager/nm-dns-utils.h b/src/dns-manager/nm-dns-utils.h
index daa6711cc..75c6b0608 100644
--- a/src/dns-manager/nm-dns-utils.h
+++ b/src/dns-manager/nm-dns-utils.h
@@ -17,8 +17,8 @@
*
*/
-#ifndef NM_DNS_UTILS_H
-#define NM_DNS_UTILS_H
+#ifndef __NETWORKMANAGER_DNS_UTILS_H__
+#define __NETWORKMANAGER_DNS_UTILS_H__
#include "nm-ip4-config.h"
diff --git a/src/dnsmasq-manager/nm-dnsmasq-manager.c b/src/dnsmasq-manager/nm-dnsmasq-manager.c
index 21bbd23a5..2f38ea710 100644
--- a/src/dnsmasq-manager/nm-dnsmasq-manager.c
+++ b/src/dnsmasq-manager/nm-dnsmasq-manager.c
@@ -18,7 +18,8 @@
* Copyright (C) 2008 - 2012 Red Hat, Inc.
*/
-#include <config.h>
+#include "config.h"
+
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
@@ -33,6 +34,7 @@
#include "nm-glib-compat.h"
#include "nm-posix-signals.h"
#include "nm-utils.h"
+#include "NetworkManagerUtils.h"
typedef struct {
char *iface;
@@ -53,22 +55,6 @@ enum {
static guint signals[LAST_SIGNAL] = { 0 };
-typedef enum {
- NM_DNSMASQ_MANAGER_ERROR_NOT_FOUND,
- NM_DNSMASQ_MANAGER_ERROR_INVALID_IP_RANGE,
-} NMDnsMasqManagerError;
-
-GQuark
-nm_dnsmasq_manager_error_quark (void)
-{
- static GQuark quark;
-
- if (!quark)
- quark = g_quark_from_static_string ("nm_dnsmasq_manager_error");
-
- return quark;
-}
-
static void
nm_dnsmasq_manager_init (NMDnsMasqManager *manager)
{
@@ -168,27 +154,6 @@ nm_cmd_line_add_string (NMCmdLine *cmd, const char *str)
/*******************************************/
-static inline const char *
-nm_find_dnsmasq (void)
-{
- static const char *dnsmasq_binary_paths[] = {
- DNSMASQ_PATH,
- "/usr/local/sbin/dnsmasq",
- "/usr/sbin/dnsmasq",
- "/sbin/dnsmasq",
- NULL
- };
- const char **dnsmasq_binary = dnsmasq_binary_paths;
-
- while (*dnsmasq_binary != NULL) {
- if (**dnsmasq_binary && g_file_test (*dnsmasq_binary, G_FILE_TEST_EXISTS))
- break;
- dnsmasq_binary++;
- }
-
- return *dnsmasq_binary;
-}
-
static void
dm_exit_code (guint dm_exit_status)
{
@@ -249,7 +214,6 @@ create_dm_cmd_line (const char *iface,
const char *pidfile,
GError **error)
{
- const char *dm_binary;
NMCmdLine *cmd;
GString *s;
const NMPlatformIP4Address *tmp;
@@ -257,16 +221,11 @@ create_dm_cmd_line (const char *iface,
char last[INET_ADDRSTRLEN];
char localaddr[INET_ADDRSTRLEN];
char *error_desc = NULL;
+ const char *dm_binary;
- dm_binary = nm_find_dnsmasq ();
- if (!dm_binary) {
- g_set_error_literal (error, NM_DNSMASQ_MANAGER_ERROR, NM_DNSMASQ_MANAGER_ERROR_NOT_FOUND,
- "Could not find dnsmasq binary.");
+ dm_binary = nm_utils_find_helper ("dnsmasq", DNSMASQ_PATH, error);
+ if (!dm_binary)
return NULL;
- }
-
- /* Find the IP4 address to use */
- tmp = nm_ip4_config_get_address (ip4_config, 0);
/* Create dnsmasq command line */
cmd = nm_cmd_line_new ();
@@ -297,6 +256,9 @@ create_dm_cmd_line (const char *iface,
*/
nm_cmd_line_add_string (cmd, "--strict-order");
+ /* Find the IP4 address to use */
+ tmp = nm_ip4_config_get_address (ip4_config, 0);
+
s = g_string_new ("--listen-address=");
nm_utils_inet4_ntop (tmp->address, localaddr);
g_string_append (s, localaddr);
@@ -305,12 +267,13 @@ create_dm_cmd_line (const char *iface,
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,
+ NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_FAILED,
error_desc);
nm_log_warn (LOGD_SHARING, "Failed to find DHCP address ranges: %s", error_desc);
g_free (error_desc);
- goto error;
+ nm_cmd_line_destroy (cmd);
+ return NULL;
}
s = g_string_new ("--dhcp-range=");
@@ -331,10 +294,6 @@ create_dm_cmd_line (const char *iface,
g_string_free (s, TRUE);
return cmd;
-
-error:
- nm_cmd_line_destroy (cmd);
- return NULL;
}
static void
@@ -432,22 +391,6 @@ nm_dnsmasq_manager_start (NMDnsMasqManager *manager,
return priv->pid > 0;
}
-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_SHARING, "waiting for dnsmasq pid %d to exit", pid);
- waitpid (pid, NULL, 0);
- nm_log_dbg (LOGD_SHARING, "dnsmasq pid %d cleaned up", pid);
-
- return FALSE;
-}
-
void
nm_dnsmasq_manager_stop (NMDnsMasqManager *manager)
{
@@ -463,17 +406,7 @@ nm_dnsmasq_manager_stop (NMDnsMasqManager *manager)
}
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_SHARING, "waiting for dnsmasq pid %d to exit", priv->pid);
- waitpid (priv->pid, NULL, 0);
- nm_log_dbg (LOGD_SHARING, "dnsmasq pid %d cleaned up", priv->pid);
- }
-
+ nm_utils_kill_child_async (priv->pid, SIGTERM, LOGD_SHARING, "dnsmasq", 2000, NULL, NULL);
priv->pid = 0;
}
diff --git a/src/dnsmasq-manager/nm-dnsmasq-manager.h b/src/dnsmasq-manager/nm-dnsmasq-manager.h
index e98a6adb5..257cc7559 100644
--- a/src/dnsmasq-manager/nm-dnsmasq-manager.h
+++ b/src/dnsmasq-manager/nm-dnsmasq-manager.h
@@ -18,8 +18,8 @@
* Copyright (C) 2008 Red Hat, Inc.
*/
-#ifndef NM_DNSMASQ_MANAGER_H
-#define NM_DNSMASQ_MANAGER_H
+#ifndef __NETWORKMANAGER_DNSMASQ_MANAGER_H__
+#define __NETWORKMANAGER_DNSMASQ_MANAGER_H__
#include <glib.h>
#include <glib-object.h>
@@ -61,9 +61,4 @@ gboolean nm_dnsmasq_manager_start (NMDnsMasqManager *manager,
void nm_dnsmasq_manager_stop (NMDnsMasqManager *manager);
-#define NM_DNSMASQ_MANAGER_ERROR nm_dnsmasq_manager_error_quark()
-#define NM_TYPE_DNSMASQ_MANAGER_ERROR (nm_dnsmasq_manager_error_get_type ())
-
-GQuark nm_dnsmasq_manager_error_quark (void);
-
-#endif /* NM_DNSMASQ_MANAGER_H */
+#endif /* __NETWORKMANAGER_DNSMASQ_MANAGER_H__ */
diff --git a/src/dnsmasq-manager/nm-dnsmasq-utils.c b/src/dnsmasq-manager/nm-dnsmasq-utils.c
index 7036b4093..4394ae7b5 100644
--- a/src/dnsmasq-manager/nm-dnsmasq-utils.c
+++ b/src/dnsmasq-manager/nm-dnsmasq-utils.c
@@ -18,7 +18,8 @@
* Copyright (C) 2013 Red Hat, Inc.
*/
-#include <config.h>
+#include "config.h"
+
#include <string.h>
#include <arpa/inet.h>
diff --git a/src/dnsmasq-manager/nm-dnsmasq-utils.h b/src/dnsmasq-manager/nm-dnsmasq-utils.h
index 4534c6ef2..bb468c824 100644
--- a/src/dnsmasq-manager/nm-dnsmasq-utils.h
+++ b/src/dnsmasq-manager/nm-dnsmasq-utils.h
@@ -18,8 +18,8 @@
* Copyright (C) 2013 Red Hat, Inc.
*/
-#ifndef NM_DNSMASQ_UTILS_H
-#define NM_DNSMASQ_UTILS_H
+#ifndef __NETWORKMANAGER_DNSMASQ_UTILS_H__
+#define __NETWORKMANAGER_DNSMASQ_UTILS_H__
#include <glib.h>
#include "nm-platform.h"
@@ -29,4 +29,4 @@ gboolean nm_dnsmasq_utils_get_range (const NMPlatformIP4Address *addr,
char *out_last,
char **out_error_desc);
-#endif /* NM_DNSMASQ_UTILS_H */
+#endif /* __NETWORKMANAGER_DNSMASQ_UTILS_H__ */
diff --git a/src/dnsmasq-manager/tests/Makefile.am b/src/dnsmasq-manager/tests/Makefile.am
index 9c7f4ab5c..c6ce1cdaf 100644
--- a/src/dnsmasq-manager/tests/Makefile.am
+++ b/src/dnsmasq-manager/tests/Makefile.am
@@ -1,12 +1,12 @@
AM_CPPFLAGS = \
-I$(top_srcdir)/include \
- -I$(top_builddir)/include \
- -I${top_srcdir}/libnm-util \
- -I${top_builddir}/libnm-util \
+ -I${top_srcdir}/libnm-core \
+ -I${top_builddir}/libnm-core \
-I$(top_srcdir)/src/dnsmasq-manager \
-I$(top_srcdir)/src \
-I$(top_srcdir)/src/platform \
-DG_LOG_DOMAIN=\""NetworkManager"\" \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
-DTESTDIR="\"$(abs_srcdir)\""
diff --git a/src/dnsmasq-manager/tests/Makefile.in b/src/dnsmasq-manager/tests/Makefile.in
index 52301e3d9..d5f924163 100644
--- a/src/dnsmasq-manager/tests/Makefile.in
+++ b/src/dnsmasq-manager/tests/Makefile.in
@@ -204,6 +204,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -327,6 +329,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -346,6 +349,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -372,7 +376,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -453,13 +457,13 @@ with_resolvconf = @with_resolvconf@
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}/libnm-core \
+ -I${top_builddir}/libnm-core \
-I$(top_srcdir)/src/dnsmasq-manager \
-I$(top_srcdir)/src \
-I$(top_srcdir)/src/platform \
-DG_LOG_DOMAIN=\""NetworkManager"\" \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
-DTESTDIR="\"$(abs_srcdir)\""
diff --git a/src/dnsmasq-manager/tests/test-dnsmasq-utils.c b/src/dnsmasq-manager/tests/test-dnsmasq-utils.c
index 07dbc0f72..f8120ffec 100644
--- a/src/dnsmasq-manager/tests/test-dnsmasq-utils.c
+++ b/src/dnsmasq-manager/tests/test-dnsmasq-utils.c
@@ -18,6 +18,8 @@
*
*/
+#include "config.h"
+
#include <glib.h>
#include <arpa/inet.h>
diff --git a/src/logging/nm-logging.h b/src/logging/nm-logging.h
deleted file mode 100644
index a53f93a55..000000000
--- a/src/logging/nm-logging.h
+++ /dev/null
@@ -1,142 +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) 2006 - 2012 Red Hat, Inc.
- * Copyright (C) 2006 - 2008 Novell, Inc.
- */
-
-#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 = 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)
-#define LOGD_IP (LOGD_IP4 | LOGD_IP6)
-#define LOGD_HW LOGD_PLATFORM
-
-/* Log levels */
-enum {
- LOGL_DEBUG,
- LOGL_INFO,
- LOGL_WARN,
- LOGL_ERR,
-
- LOGL_MAX
-};
-
-typedef enum {
- NM_LOGGING_ERROR_UNKNOWN_LEVEL = 0, /*< nick=UnknownLevel >*/
- NM_LOGGING_ERROR_UNKNOWN_DOMAIN = 1, /*< nick=UnknownDomain >*/
-} NMLoggingError;
-
-#define NM_LOGGING_ERROR (nm_logging_error_quark ())
-GQuark nm_logging_error_quark (void);
-
-
-#define nm_log_err(domain, ...) \
- _nm_log (G_STRLOC, G_STRFUNC, domain, LOGL_ERR, ## __VA_ARGS__ )
-
-#define nm_log_warn(domain, ...) \
- _nm_log (G_STRLOC, G_STRFUNC, domain, LOGL_WARN, ## __VA_ARGS__ )
-
-#define nm_log_info(domain, ...) \
- _nm_log (G_STRLOC, G_STRFUNC, domain, LOGL_INFO, ## __VA_ARGS__ )
-
-#define nm_log_dbg(domain, ...) \
- _nm_log (G_STRLOC, G_STRFUNC, domain, LOGL_DEBUG, ## __VA_ARGS__ )
-
-#define nm_log(domain, level, ...) \
- _nm_log (G_STRLOC, G_STRFUNC, domain, level, ## __VA_ARGS__ )
-
-void _nm_log (const char *loc,
- const char *func,
- guint64 domain,
- guint32 level,
- const char *fmt,
- ...) __attribute__((__format__ (__printf__, 5, 6)));
-
-char *nm_logging_level_to_string (void);
-char *nm_logging_domains_to_string (void);
-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
-#undef nm_info
-#undef nm_info_str
-#undef nm_debug
-#undef nm_debug_str
-#undef nm_warning
-#undef nm_warning_str
-#undef nm_error
-#undef nm_error_str
-
-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-utils.c b/src/main-utils.c
new file mode 100644
index 000000000..0fa3644f3
--- /dev/null
+++ b/src/main-utils.c
@@ -0,0 +1,279 @@
+/* -*- 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.
+ */
+
+#include "config.h"
+
+#include <stdio.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <locale.h>
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gmodule.h>
+
+#include "main-utils.h"
+#include "nm-posix-signals.h"
+#include "nm-logging.h"
+
+static sigset_t signal_set;
+static gboolean *quit_early = NULL;
+
+/*
+ * 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.
+ */
+static void *
+signal_handling_thread (void *arg)
+{
+ GMainLoop *main_loop = arg;
+ int signo;
+
+ while (1) {
+ sigwait (&signal_set, &signo);
+
+ switch (signo) {
+ case SIGINT:
+ case SIGTERM:
+ nm_log_info (LOGD_CORE, "caught signal %d, shutting down normally.", signo);
+ *quit_early = TRUE; /* for quitting before entering the main loop */
+ g_main_loop_quit (main_loop);
+ break;
+ case SIGHUP:
+ /* Reread config stuff like system config files, VPN service files, etc */
+ nm_log_info (LOGD_CORE, "caught signal %d, not supported yet.", signo);
+ break;
+ case SIGPIPE:
+ /* silently ignore signal */
+ break;
+ default:
+ nm_log_err (LOGD_CORE, "caught unexpected signal %d", signo);
+ break;
+ }
+ }
+ return NULL;
+}
+
+/**
+ * nm_main_utils_setup_signals:
+ * @main_loop: the #GMainLoop to quit when SIGINT or SIGTERM is received
+ * @quit_early: location of a variable that will be set to TRUE when
+ * SIGINT or SIGTERM is received
+ *
+ * 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.
+ *
+ * Returns: %TRUE on success
+ */
+gboolean
+nm_main_utils_setup_signals (GMainLoop *main_loop, gboolean *quit_early_ptr)
+{
+ pthread_t signal_thread_id;
+ sigset_t old_sig_mask;
+ int status;
+
+ g_return_val_if_fail (main_loop != NULL, FALSE);
+ g_return_val_if_fail (quit_early_ptr != NULL, FALSE);
+
+ quit_early = quit_early_ptr;
+
+ sigemptyset (&signal_set);
+ sigaddset (&signal_set, SIGHUP);
+ sigaddset (&signal_set, SIGINT);
+ sigaddset (&signal_set, SIGTERM);
+ sigaddset (&signal_set, SIGPIPE);
+
+ /* Block all signals of interest. */
+ status = pthread_sigmask (SIG_BLOCK, &signal_set, &old_sig_mask);
+ if (status != 0) {
+ fprintf (stderr, _("Failed to set signal mask: %d"), status);
+ return FALSE;
+ }
+ /* Save original mask so that we could use it for child processes. */
+ nm_save_original_signal_mask (old_sig_mask);
+
+ /* Create the signal handling thread. */
+ status = pthread_create (&signal_thread_id, NULL, signal_handling_thread, main_loop);
+ if (status != 0) {
+ fprintf (stderr, _("Failed to create signal handling thread: %d"), status);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+gboolean
+nm_main_utils_write_pidfile (const char *pidfile)
+{
+ char pid[16];
+ int fd;
+ gboolean success = FALSE;
+
+ if ((fd = open (pidfile, O_CREAT|O_WRONLY|O_TRUNC, 00644)) < 0) {
+ fprintf (stderr, _("Opening %s failed: %s\n"), pidfile, strerror (errno));
+ return FALSE;
+ }
+
+ 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
+ success = TRUE;
+
+ if (close (fd))
+ fprintf (stderr, _("Closing %s failed: %s\n"), pidfile, strerror (errno));
+
+ return success;
+}
+
+/**
+ * nm_main_utils_check_pidfile:
+ * @pidfile: the pid file
+ * @name: the process name
+ *
+ * Checks whether the pidfile already exists and contains PID of a running
+ * process.
+ *
+ * Returns: %TRUE if the specified pidfile already exists and contains the PID
+ * of a running process named @name, or %FALSE if not
+ */
+gboolean
+nm_main_utils_check_pidfile (const char *pidfile, const char *name)
+{
+ char *contents = NULL;
+ gsize len = 0;
+ glong pid;
+ char *proc_cmdline = NULL;
+ gboolean nm_running = FALSE;
+ const char *process_name;
+
+ /* Setup runtime directory */
+ if (g_mkdir_with_parents (NMRUNDIR, 0755) != 0) {
+ nm_log_err (LOGD_CORE, "Cannot create '%s': %s", NMRUNDIR, strerror (errno));
+ exit (1);
+ }
+
+ if (!g_file_get_contents (pidfile, &contents, &len, NULL))
+ return FALSE;
+
+ if (len <= 0)
+ goto done;
+
+ errno = 0;
+ pid = strtol (contents, NULL, 10);
+ if (pid <= 0 || pid > 65536 || errno)
+ goto done;
+
+ g_free (contents);
+ proc_cmdline = g_strdup_printf ("/proc/%ld/cmdline", pid);
+ if (!g_file_get_contents (proc_cmdline, &contents, &len, NULL))
+ goto done;
+
+ process_name = strrchr (contents, '/');
+ if (process_name)
+ process_name++;
+ else
+ process_name = contents;
+ if (strcmp (process_name, name) == 0) {
+ /* Check that the process exists */
+ if (kill (pid, 0) == 0) {
+ fprintf (stderr, _("%s is already running (pid %ld)\n"), name, pid);
+ nm_running = TRUE;
+ }
+ }
+
+done:
+ g_free (proc_cmdline);
+ g_free (contents);
+ return nm_running;
+}
+
+gboolean
+nm_main_utils_early_setup (const char *progname,
+ char **argv[],
+ int *argc,
+ GOptionEntry *options,
+ GOptionEntry *more_options,
+ const char *summary)
+{
+ GOptionContext *opt_ctx = NULL;
+ GError *error = NULL;
+ gboolean success = FALSE;
+ int i;
+
+ /* Make GIO ignore the remote VFS service; otherwise it tries to use the
+ * session bus to contact the remote service, and NM shouldn't ever be
+ * talking on the session bus. See rh #588745
+ */
+ setenv ("GIO_USE_VFS", "local", 1);
+
+ /*
+ * Set the umask to 0022, which results in 0666 & ~0022 = 0644.
+ * Otherwise, if root (or an su'ing user) has a wacky umask, we could
+ * write out an unreadable resolv.conf.
+ */
+ umask (022);
+
+ /* Ensure gettext() gets the right environment (bgo #666516) */
+ setlocale (LC_ALL, "");
+ textdomain (GETTEXT_PACKAGE);
+
+ if (getuid () != 0) {
+ fprintf (stderr, _("You must be root to run %s!\n"), progname);
+ 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);
+ if (more_options)
+ g_option_context_add_main_entries (opt_ctx, more_options, NULL);
+ g_option_context_set_summary (opt_ctx, summary);
+
+ success = g_option_context_parse (opt_ctx, argc, argv, &error);
+ if (!success) {
+ fprintf (stderr, _("%s. Please use --help to see a list of valid options.\n"),
+ error->message);
+ g_clear_error (&error);
+ }
+ g_option_context_free (opt_ctx);
+
+ return success;
+}
+
diff --git a/include/nm-settings-flags.h b/src/main-utils.h
index 57f38ea59..472fa5e70 100644
--- a/include/nm-settings-flags.h
+++ b/src/main-utils.h
@@ -15,25 +15,25 @@
* 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) 2014 Red Hat, Inc.
*/
-#ifndef NM_SETTINGS_FLAGS_H
-#define NM_SETTINGS_FLAGS_H
+#ifndef __MAIN_UTILS_H__
+#define __MAIN_UTILS_H__
-/* NOTE: these values should match the NM_SECRET_AGENT_GET_SECRETS_FLAGS in
- * the nm-secret-agent.xml introspection file; except ONLY_SYSTEM which is
- * internal to NM.
- */
-typedef enum {
- NM_SETTINGS_GET_SECRETS_FLAG_NONE = 0x0,
- NM_SETTINGS_GET_SECRETS_FLAG_ALLOW_INTERACTION = 0x1,
- NM_SETTINGS_GET_SECRETS_FLAG_REQUEST_NEW = 0x2,
- NM_SETTINGS_GET_SECRETS_FLAG_USER_REQUESTED = 0x4,
+#include <glib.h>
+
+gboolean nm_main_utils_setup_signals (GMainLoop *main_loop, gboolean *quit_early_ptr);
+
+gboolean nm_main_utils_write_pidfile (const char *pidfile);
- /* Internal only to NM */
- NM_SETTINGS_GET_SECRETS_FLAG_ONLY_SYSTEM = 0x80000000
-} NMSettingsGetSecretsFlags;
+gboolean nm_main_utils_check_pidfile (const char *pidfile, const char *name);
-#endif /* NM_SETTINGS_FLAGS_H */
+gboolean nm_main_utils_early_setup (const char *progname,
+ char **argv[],
+ int *argc,
+ GOptionEntry *options,
+ GOptionEntry *more_options,
+ const char *summary);
+#endif /* __MAIN_UTILS_H__ */
diff --git a/src/main.c b/src/main.c
index 0ba65b0b8..b3206fb44 100644
--- a/src/main.c
+++ b/src/main.c
@@ -19,7 +19,8 @@
* Copyright (C) 2005 - 2008 Novell, Inc.
*/
-#include <config.h>
+#include "config.h"
+
#include <glib.h>
#include <dbus/dbus.h>
#include <dbus/dbus-glib-lowlevel.h>
@@ -39,9 +40,10 @@
#include <string.h>
#include <sys/resource.h>
-#include "libgsystem.h"
-#include "NetworkManager.h"
+#include "gsystem-local-alloc.h"
+#include "nm-dbus-interface.h"
#include "NetworkManagerUtils.h"
+#include "main-utils.h"
#include "nm-manager.h"
#include "nm-linux-platform.h"
#include "nm-dns-manager.h"
@@ -55,6 +57,9 @@
#include "nm-posix-signals.h"
#include "nm-session-monitor.h"
#include "nm-dispatcher.h"
+#include "nm-settings.h"
+#include "nm-auth-manager.h"
+#include "nm-core-internal.h"
#if !defined(NM_DIST_VERSION)
# define NM_DIST_VERSION VERSION
@@ -63,157 +68,7 @@
#define NM_DEFAULT_PID_FILE NMRUNDIR "/NetworkManager.pid"
#define NM_DEFAULT_SYSTEM_STATE_FILE NMSTATEDIR "/NetworkManager.state"
-/*
- * Globals
- */
static GMainLoop *main_loop = NULL;
-static gboolean quit_early = FALSE;
-static sigset_t signal_set;
-
-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 SIGTERM:
- nm_log_info (LOGD_CORE, "caught signal %d, shutting down normally.", signo);
- quit_early = TRUE; /* for quitting before entering the main loop */
- g_main_loop_quit (main_loop);
- break;
- case SIGHUP:
- /* Reread config stuff like system config files, VPN service files, etc */
- nm_log_info (LOGD_CORE, "caught signal %d, not supported yet.", signo);
- break;
- default:
- nm_log_err (LOGD_CORE, "caught unexpected signal %d", signo);
- break;
- }
- }
- return NULL;
-}
-
-/*
- * 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)
-{
- pthread_t signal_thread_id;
- sigset_t old_sig_mask;
- int status;
-
- sigemptyset (&signal_set);
- sigaddset (&signal_set, SIGHUP);
- sigaddset (&signal_set, SIGINT);
- sigaddset (&signal_set, SIGTERM);
-
- /* Block all signals of interest. */
- status = pthread_sigmask (SIG_BLOCK, &signal_set, &old_sig_mask);
- if (status != 0) {
- fprintf (stderr, _("Failed to set signal mask: %d"), status);
- return FALSE;
- }
- /* Save original mask so that we could use it for child processes. */
- nm_save_original_signal_mask (old_sig_mask);
-
- /* 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 gboolean
-write_pidfile (const char *pidfile)
-{
- char pid[16];
- int fd;
- gboolean success = FALSE;
-
- if ((fd = open (pidfile, O_CREAT|O_WRONLY|O_TRUNC, 00644)) < 0) {
- fprintf (stderr, _("Opening %s failed: %s\n"), pidfile, strerror (errno));
- return FALSE;
- }
-
- 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
- success = TRUE;
-
- if (close (fd))
- fprintf (stderr, _("Closing %s failed: %s\n"), pidfile, strerror (errno));
-
- return success;
-}
-
-/* Check whether the pidfile already exists and contains PID of a running NetworkManager
- * Returns: FALSE - specified pidfile doesn't exist or doesn't contain PID of a running NM process
- * TRUE - specified pidfile already exists and contains PID of a running NM process
- */
-static gboolean
-check_pidfile (const char *pidfile)
-{
- char *contents = NULL;
- gsize len = 0;
- glong pid;
- char *proc_cmdline = NULL;
- gboolean nm_running = FALSE;
- const char *process_name;
-
- if (!g_file_get_contents (pidfile, &contents, &len, NULL))
- return FALSE;
-
- if (len <= 0)
- goto done;
-
- errno = 0;
- pid = strtol (contents, NULL, 10);
- if (pid <= 0 || pid > 65536 || errno)
- goto done;
-
- g_free (contents);
- proc_cmdline = g_strdup_printf ("/proc/%ld/cmdline", pid);
- if (!g_file_get_contents (proc_cmdline, &contents, &len, NULL))
- goto done;
-
- process_name = strrchr (contents, '/');
- if (process_name)
- process_name++;
- else
- process_name = contents;
- if (strcmp (process_name, "NetworkManager") == 0) {
- /* Check that the process exists */
- if (kill (pid, 0) == 0) {
- fprintf (stderr, _("NetworkManager is already running (pid %ld)\n"), pid);
- nm_running = TRUE;
- }
- }
-
-done:
- g_free (proc_cmdline);
- g_free (contents);
- return nm_running;
-}
static gboolean
parse_state_file (const char *filename,
@@ -324,6 +179,13 @@ _init_nm_debug (const char *debug)
}
}
+static void
+manager_configure_quit (NMManager *manager, gpointer user_data)
+{
+ nm_log_info (LOGD_CORE, "quitting now that startup is complete");
+ g_main_loop_quit (main_loop);
+}
+
/*
* main
*
@@ -331,7 +193,6 @@ _init_nm_debug (const char *debug)
int
main (int argc, char *argv[])
{
- GOptionContext *opt_ctx = NULL;
char *opt_log_level = NULL;
char *opt_log_domains = NULL;
gboolean become_daemon = TRUE, run_from_build_dir = FALSE;
@@ -341,13 +202,12 @@ main (int argc, char *argv[])
gs_free char *state_file = NULL;
gboolean wifi_enabled = TRUE, net_enabled = TRUE, wwan_enabled = TRUE, wimax_enabled = TRUE;
gboolean success, show_version = FALSE;
- int i;
NMManager *manager = NULL;
- gs_unref_object NMVPNManager *vpn_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 NMDhcpManager *dhcp_mgr = NULL;
gs_unref_object NMFirewallManager *fw_mgr = NULL;
gs_unref_object NMSettings *settings = NULL;
gs_unref_object NMConfig *config = NULL;
@@ -355,6 +215,7 @@ main (int argc, char *argv[])
GError *error = NULL;
gboolean wrote_pidfile = FALSE;
char *bad_domains = NULL;
+ gboolean quit_early = FALSE;
GOptionEntry options[] = {
{ "version", 'V', 0, G_OPTION_ARG_NONE, &show_version, N_("Print NetworkManager version and exit"), NULL },
@@ -371,66 +232,17 @@ main (int argc, char *argv[])
{NULL}
};
- /* Make GIO ignore the remote VFS service; otherwise it tries to use the
- * session bus to contact the remote service, and NM shouldn't ever be
- * talking on the session bus. See rh #588745
- */
- setenv ("GIO_USE_VFS", "local", 1);
-
- /*
- * Set the umask to 0022, which results in 0666 & ~0022 = 0644.
- * Otherwise, if root (or an su'ing user) has a wacky umask, we could
- * write out an unreadable resolv.conf.
- */
- umask (022);
-
- /* Set locale to be able to use environment variables */
- setlocale (LC_ALL, "");
-
- bindtextdomain (GETTEXT_PACKAGE, NMLOCALEDIR);
- bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
- textdomain (GETTEXT_PACKAGE);
+ _nm_utils_is_manager_process = TRUE;
- 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."));
-
- success = g_option_context_parse (opt_ctx, &argc, &argv, &error);
- g_option_context_free (opt_ctx);
+ main_loop = g_main_loop_new (NULL, FALSE);
- if (!success) {
- fprintf (stderr, _("%s. Please use --help to see a list of valid options.\n"),
- error->message);
- g_clear_error (&error);
+ if (!nm_main_utils_early_setup ("NetworkManager",
+ &argv,
+ &argc,
+ options,
+ nm_config_get_options (),
+ _("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.")))
exit (1);
- }
if (show_version) {
fprintf (stdout, NM_DIST_VERSION "\n");
@@ -476,12 +288,6 @@ main (int argc, char *argv[])
g_free (path);
}
- /* Setup runtime directory */
- if (g_mkdir_with_parents (NMRUNDIR, 0755) != 0) {
- nm_log_err (LOGD_CORE, "Cannot create '%s': %s", NMRUNDIR, strerror (errno));
- exit (1);
- }
-
/* Ensure state directory exists */
if (g_mkdir_with_parents (NMSTATEDIR, 0755) != 0) {
nm_log_err (LOGD_CORE, "Cannot create '%s': %s", NMSTATEDIR, strerror (errno));
@@ -492,7 +298,7 @@ main (int argc, char *argv[])
state_file = state_file ? state_file : g_strdup (NM_DEFAULT_SYSTEM_STATE_FILE);
/* check pid file */
- if (check_pidfile (pidfile))
+ if (nm_main_utils_check_pidfile (pidfile, "NetworkManager"))
exit (1);
/* Read the config file and CLI overrides */
@@ -543,14 +349,13 @@ main (int argc, char *argv[])
saved_errno);
exit (1);
}
- if (write_pidfile (pidfile))
- wrote_pidfile = TRUE;
+ wrote_pidfile = nm_main_utils_write_pidfile (pidfile);
}
_init_nm_debug (nm_config_get_debug (config));
/* Set up unix signal handling - before creating threads, but after daemonizing! */
- if (!setup_signals ())
+ if (!nm_main_utils_setup_signals (main_loop, &quit_early))
exit (1);
if (g_fatal_warnings) {
@@ -586,11 +391,11 @@ main (int argc, char *argv[])
#endif
);
- main_loop = g_main_loop_new (NULL, FALSE);
-
/* Set up platform interaction layer */
nm_linux_platform_setup ();
+ nm_auth_manager_setup (nm_config_get_auth_polkit (config));
+
/* Initialize our DBus service & connection */
dbus_mgr = nm_dbus_manager_get ();
g_assert (dbus_mgr != NULL);
@@ -654,6 +459,8 @@ main (int argc, char *argv[])
}
}
+ g_signal_connect (manager, NM_MANAGER_CONFIGURE_QUIT, G_CALLBACK (manager_configure_quit), config);
+
nm_manager_start (manager);
/* Make sure the loopback interface is up. If interface is down, we bring
@@ -672,10 +479,10 @@ main (int argc, char *argv[])
success = TRUE;
/* Told to quit before getting to the mainloop by the signal handler */
- if (quit_early == TRUE)
- goto done;
+ if (!quit_early)
+ g_main_loop_run (main_loop);
- g_main_loop_run (main_loop);
+ nm_manager_stop (manager);
done:
g_clear_object (&manager);
diff --git a/src/nm-activation-request.c b/src/nm-activation-request.c
index 9f9ee0f94..30ce75152 100644
--- a/src/nm-activation-request.c
+++ b/src/nm-activation-request.c
@@ -25,9 +25,8 @@
#include <stdlib.h>
#include <sys/wait.h>
#include <unistd.h>
-#include <dbus/dbus-glib.h>
-#include "libgsystem.h"
+#include "gsystem-local-alloc.h"
#include "nm-activation-request.h"
#include "nm-logging.h"
@@ -37,7 +36,7 @@
#include "nm-active-connection.h"
#include "nm-settings-connection.h"
#include "nm-posix-signals.h"
-
+#include "nm-auth-subject.h"
G_DEFINE_TYPE (NMActRequest, nm_act_request, NM_TYPE_ACTIVE_CONNECTION)
@@ -106,7 +105,7 @@ get_secrets_cb (NMSettingsConnection *connection,
guint32
nm_act_request_get_secrets (NMActRequest *self,
const char *setting_name,
- NMSettingsGetSecretsFlags flags,
+ NMSecretAgentGetSecretsFlags flags,
const char *hint,
NMActRequestSecretsFunc callback,
gpointer callback_data)
@@ -128,7 +127,7 @@ nm_act_request_get_secrets (NMActRequest *self,
info->callback_data = callback_data;
if (nm_active_connection_get_user_requested (NM_ACTIVE_CONNECTION (self)))
- flags |= NM_SETTINGS_GET_SECRETS_FLAG_USER_REQUESTED;
+ flags |= NM_SECRET_AGENT_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),
diff --git a/src/nm-activation-request.h b/src/nm-activation-request.h
index 87ea41f91..69756069a 100644
--- a/src/nm-activation-request.h
+++ b/src/nm-activation-request.h
@@ -18,15 +18,15 @@
* (C) Copyright 2005 - 2012 Red Hat, Inc.
*/
-#ifndef NM_ACTIVATION_REQUEST_H
-#define NM_ACTIVATION_REQUEST_H
+#ifndef __NETWORKMANAGER_ACTIVATION_REQUEST_H__
+#define __NETWORKMANAGER_ACTIVATION_REQUEST_H__
#include <glib.h>
#include <glib-object.h>
+
#include "nm-types.h"
#include "nm-connection.h"
#include "nm-active-connection.h"
-#include "nm-settings-flags.h"
#define NM_TYPE_ACT_REQUEST (nm_act_request_get_type ())
#define NM_ACT_REQUEST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_ACT_REQUEST, NMActRequest))
@@ -35,9 +35,9 @@
#define NM_IS_ACT_REQUEST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_ACT_REQUEST))
#define NM_ACT_REQUEST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_ACT_REQUEST, NMActRequestClass))
-typedef struct {
+struct _NMActRequest {
NMActiveConnection parent;
-} NMActRequest;
+};
typedef struct {
NMActiveConnectionClass parent;
@@ -71,12 +71,12 @@ typedef void (*NMActRequestSecretsFunc) (NMActRequest *req,
guint32 nm_act_request_get_secrets (NMActRequest *req,
const char *setting_name,
- NMSettingsGetSecretsFlags flags,
+ NMSecretAgentGetSecretsFlags flags,
const char *hint,
NMActRequestSecretsFunc callback,
gpointer callback_data);
void nm_act_request_cancel_secrets (NMActRequest *req, guint32 call_id);
-#endif /* NM_ACTIVATION_REQUEST_H */
+#endif /* __NETWORKMANAGER_ACTIVATION_REQUEST_H__ */
diff --git a/src/nm-active-connection.c b/src/nm-active-connection.c
index 172aa6141..d0b5b8753 100644
--- a/src/nm-active-connection.c
+++ b/src/nm-active-connection.c
@@ -18,19 +18,24 @@
* Copyright (C) 2008 - 2014 Red Hat, Inc.
*/
+#include "config.h"
+
#include <glib.h>
+
#include "nm-types.h"
#include "nm-active-connection.h"
-#include "NetworkManager.h"
+#include "nm-dbus-interface.h"
#include "nm-logging.h"
#include "nm-dbus-glib-types.h"
#include "nm-dbus-manager.h"
#include "nm-device.h"
#include "nm-settings-connection.h"
-#include "nm-manager-auth.h"
+#include "nm-auth-utils.h"
+#include "nm-auth-subject.h"
#include "NetworkManagerUtils.h"
-
+#include "gsystem-local-alloc.h"
#include "nm-active-connection-glue.h"
+#include "nm-glib-compat.h"
/* Base class for anything implementing the Connection.Active D-Bus interface */
G_DEFINE_ABSTRACT_TYPE (NMActiveConnection, nm_active_connection, G_TYPE_OBJECT)
@@ -50,6 +55,7 @@ typedef struct {
gboolean is_default;
gboolean is_default6;
NMActiveConnectionState state;
+ gboolean state_set;
gboolean vpn;
NMAuthSubject *subject;
@@ -92,6 +98,12 @@ enum {
LAST_PROP
};
+enum {
+ DEVICE_CHANGED,
+ LAST_SIGNAL
+};
+static guint signals[LAST_SIGNAL] = { 0 };
+
static void check_master_ready (NMActiveConnection *self);
static void _device_cleanup (NMActiveConnection *self);
@@ -137,6 +149,7 @@ nm_active_connection_set_state (NMActiveConnection *self,
old_state = priv->state;
priv->state = new_state;
+ priv->state_set = TRUE;
g_object_notify (G_OBJECT (self), NM_ACTIVE_CONNECTION_STATE);
check_master_ready (self);
@@ -197,6 +210,17 @@ nm_active_connection_get_connection (NMActiveConnection *self)
return NM_ACTIVE_CONNECTION_GET_PRIVATE (self)->connection;
}
+const char *
+nm_active_connection_get_connection_type (NMActiveConnection *self)
+{
+ NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self);
+
+ if (priv->connection == NULL)
+ return NULL;
+
+ return nm_connection_get_connection_type (priv->connection);
+}
+
void
nm_active_connection_set_connection (NMActiveConnection *self,
NMConnection *connection)
@@ -250,6 +274,8 @@ nm_active_connection_set_default (NMActiveConnection *self, gboolean is_default)
g_return_if_fail (NM_IS_ACTIVE_CONNECTION (self));
+ is_default = !!is_default;
+
priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self);
if (priv->is_default == is_default)
return;
@@ -273,6 +299,8 @@ nm_active_connection_set_default6 (NMActiveConnection *self, gboolean is_default
g_return_if_fail (NM_IS_ACTIVE_CONNECTION (self));
+ is_default6 = !!is_default6;
+
priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self);
if (priv->is_default6 == is_default6)
return;
@@ -314,7 +342,7 @@ nm_active_connection_get_user_requested (NMActiveConnection *self)
{
g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (self), FALSE);
- return !nm_auth_subject_get_internal (NM_ACTIVE_CONNECTION_GET_PRIVATE (self)->subject);
+ return nm_auth_subject_is_unix_process (NM_ACTIVE_CONNECTION_GET_PRIVATE (self)->subject);
}
NMDevice *
@@ -360,11 +388,11 @@ device_master_changed (GObject *object,
return;
if (!nm_device_get_master (device))
return;
+ if (!nm_active_connection_get_master (self))
+ 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 */
@@ -377,20 +405,23 @@ gboolean
nm_active_connection_set_device (NMActiveConnection *self, NMDevice *device)
{
NMActiveConnectionPrivate *priv;
+ gs_unref_object NMDevice *old_device = NULL;
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 == priv->device)
+ return TRUE;
- if (device) {
- g_return_val_if_fail (priv->device == NULL, FALSE);
+ old_device = priv->device ? g_object_ref (priv->device) : NULL;
+ _device_cleanup (self);
+ if (device) {
/* 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);
@@ -401,7 +432,14 @@ nm_active_connection_set_device (NMActiveConnection *self, NMDevice *device)
priv->pending_activation_id = g_strdup_printf ("activation::%p", (void *)self);
nm_device_add_pending_action (device, priv->pending_activation_id, TRUE);
}
- }
+ } else
+ priv->device = NULL;
+ g_object_notify (G_OBJECT (self), NM_ACTIVE_CONNECTION_INT_DEVICE);
+
+ g_signal_emit (self, signals[DEVICE_CHANGED], 0, priv->device, old_device);
+
+ g_object_notify (G_OBJECT (self), NM_ACTIVE_CONNECTION_DEVICES);
+
return TRUE;
}
@@ -696,10 +734,10 @@ set_property (GObject *object, guint prop_id,
priv->specific_object = g_value_dup_boxed (value);
break;
case PROP_DEFAULT:
- priv->is_default = g_value_get_boolean (value);
+ priv->is_default = !!g_value_get_boolean (value);
break;
case PROP_DEFAULT6:
- priv->is_default6 = g_value_get_boolean (value);
+ priv->is_default6 = !!g_value_get_boolean (value);
break;
case PROP_VPN:
priv->vpn = g_value_get_boolean (value);
@@ -743,7 +781,14 @@ get_property (GObject *object, guint prop_id,
g_value_take_boxed (value, devices);
break;
case PROP_STATE:
- g_value_set_uint (value, priv->state);
+ if (priv->state_set)
+ g_value_set_uint (value, priv->state);
+ else {
+ /* When the AC has just been created, its externally-visible state should
+ * be "ACTIVATING", even though internally it is "UNKNOWN".
+ */
+ g_value_set_uint (value, NM_ACTIVE_CONNECTION_STATE_ACTIVATING);
+ }
break;
case PROP_DEFAULT:
g_value_set_boolean (value, priv->is_default);
@@ -847,147 +892,155 @@ nm_active_connection_class_init (NMActiveConnectionClass *ac_class)
object_class->dispose = dispose;
/* D-Bus exported properties */
- g_object_class_install_property (object_class, PROP_CONNECTION,
- g_param_spec_boxed (NM_ACTIVE_CONNECTION_CONNECTION,
- "Connection",
- "Connection",
- 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",
- "Connection UUID",
- 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",
- "Specific object",
- DBUS_TYPE_G_OBJECT_PATH,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-
- g_object_class_install_property (object_class, PROP_DEVICES,
- g_param_spec_boxed (NM_ACTIVE_CONNECTION_DEVICES,
- "Devices",
- "Devices",
- DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH,
- G_PARAM_READABLE));
-
- g_object_class_install_property (object_class, PROP_STATE,
- g_param_spec_uint (NM_ACTIVE_CONNECTION_STATE,
- "State",
- "State",
- NM_ACTIVE_CONNECTION_STATE_UNKNOWN,
- NM_ACTIVE_CONNECTION_STATE_DEACTIVATING,
- NM_ACTIVE_CONNECTION_STATE_UNKNOWN,
- G_PARAM_READABLE));
-
- g_object_class_install_property (object_class, PROP_DEFAULT,
- g_param_spec_boolean (NM_ACTIVE_CONNECTION_DEFAULT,
- "Default",
- "Is the default IPv4 active connection",
- 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",
+ g_object_class_install_property
+ (object_class, PROP_CONNECTION,
+ g_param_spec_boxed (NM_ACTIVE_CONNECTION_CONNECTION, "", "",
DBUS_TYPE_G_OBJECT_PATH,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_ID,
+ g_param_spec_string (NM_ACTIVE_CONNECTION_ID, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_UUID,
+ g_param_spec_string (NM_ACTIVE_CONNECTION_UUID, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_TYPE,
+ g_param_spec_string (NM_ACTIVE_CONNECTION_TYPE, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_SPECIFIC_OBJECT,
+ g_param_spec_boxed (NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT, "", "",
+ DBUS_TYPE_G_OBJECT_PATH,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_DEVICES,
+ g_param_spec_boxed (NM_ACTIVE_CONNECTION_DEVICES, "", "",
+ DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_STATE,
+ g_param_spec_uint (NM_ACTIVE_CONNECTION_STATE, "", "",
+ NM_ACTIVE_CONNECTION_STATE_UNKNOWN,
+ NM_ACTIVE_CONNECTION_STATE_DEACTIVATING,
+ NM_ACTIVE_CONNECTION_STATE_UNKNOWN,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_DEFAULT,
+ g_param_spec_boolean (NM_ACTIVE_CONNECTION_DEFAULT, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_IP4_CONFIG,
+ g_param_spec_boxed (NM_ACTIVE_CONNECTION_IP4_CONFIG, "", "",
+ DBUS_TYPE_G_OBJECT_PATH,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (object_class, PROP_DHCP4_CONFIG,
- g_param_spec_boxed (NM_ACTIVE_CONNECTION_DHCP4_CONFIG,
- "DHCP4 Config",
- "DHCP4 Config",
+ g_object_class_install_property
+ (object_class, PROP_DHCP4_CONFIG,
+ g_param_spec_boxed (NM_ACTIVE_CONNECTION_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",
- "Is the default IPv6 active connection",
- 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",
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_DEFAULT6,
+ g_param_spec_boolean (NM_ACTIVE_CONNECTION_DEFAULT6, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_IP6_CONFIG,
+ g_param_spec_boxed (NM_ACTIVE_CONNECTION_IP6_CONFIG, "", "",
DBUS_TYPE_G_OBJECT_PATH,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (object_class, PROP_DHCP6_CONFIG,
- g_param_spec_boxed (NM_ACTIVE_CONNECTION_DHCP6_CONFIG,
- "DHCP6 Config",
- "DHCP6 Config",
+ g_object_class_install_property
+ (object_class, PROP_DHCP6_CONFIG,
+ g_param_spec_boxed (NM_ACTIVE_CONNECTION_DHCP6_CONFIG, "", "",
+ DBUS_TYPE_G_OBJECT_PATH,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_VPN,
+ g_param_spec_boolean (NM_ACTIVE_CONNECTION_VPN, "", "",
+ FALSE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_MASTER,
+ g_param_spec_boxed (NM_ACTIVE_CONNECTION_MASTER, "", "",
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",
- "Is a VPN connection",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-
- g_object_class_install_property (object_class, PROP_MASTER,
- g_param_spec_boxed (NM_ACTIVE_CONNECTION_MASTER,
- "Master",
- "Path of master device",
- DBUS_TYPE_G_OBJECT_PATH,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/* Internal properties */
- g_object_class_install_property (object_class, PROP_INT_CONNECTION,
- g_param_spec_object (NM_ACTIVE_CONNECTION_INT_CONNECTION,
- "Internal Connection",
- "Internal connection",
- NM_TYPE_CONNECTION,
- 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_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 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));
+ g_object_class_install_property
+ (object_class, PROP_INT_CONNECTION,
+ g_param_spec_object (NM_ACTIVE_CONNECTION_INT_CONNECTION, "", "",
+ NM_TYPE_CONNECTION,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_INT_DEVICE,
+ g_param_spec_object (NM_ACTIVE_CONNECTION_INT_DEVICE, "", "",
+ NM_TYPE_DEVICE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_INT_SUBJECT,
+ g_param_spec_object (NM_ACTIVE_CONNECTION_INT_SUBJECT, "", "",
+ NM_TYPE_AUTH_SUBJECT,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_INT_MASTER,
+ g_param_spec_object (NM_ACTIVE_CONNECTION_INT_MASTER, "", "",
+ NM_TYPE_ACTIVE_CONNECTION,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_INT_MASTER_READY,
+ g_param_spec_boolean (NM_ACTIVE_CONNECTION_INT_MASTER_READY, "", "",
+ FALSE, G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ signals[DEVICE_CHANGED] =
+ g_signal_new (NM_ACTIVE_CONNECTION_DEVICE_CHANGED,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMActiveConnectionClass, device_changed),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 2, NM_TYPE_DEVICE, NM_TYPE_DEVICE);
nm_dbus_manager_register_exported_type (nm_dbus_manager_get (),
G_TYPE_FROM_CLASS (ac_class),
diff --git a/src/nm-active-connection.h b/src/nm-active-connection.h
index 0d96c8723..710cfeed9 100644
--- a/src/nm-active-connection.h
+++ b/src/nm-active-connection.h
@@ -18,13 +18,12 @@
* Copyright (C) 2008 - 2012 Red Hat, Inc.
*/
-#ifndef NM_ACTIVE_CONNECTION_H
-#define NM_ACTIVE_CONNECTION_H
+#ifndef __NETWORKMANAGER_ACTIVE_CONNECTION_H__
+#define __NETWORKMANAGER_ACTIVE_CONNECTION_H__
#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))
@@ -57,9 +56,12 @@
#define NM_ACTIVE_CONNECTION_INT_MASTER "int-master"
#define NM_ACTIVE_CONNECTION_INT_MASTER_READY "int-master-ready"
-typedef struct {
+/* Internal signals*/
+#define NM_ACTIVE_CONNECTION_DEVICE_CHANGED "device-changed"
+
+struct _NMActiveConnection {
GObject parent;
-} NMActiveConnection;
+};
typedef struct {
GObjectClass parent;
@@ -72,6 +74,10 @@ typedef struct {
NMDeviceState new_state,
NMDeviceState old_state);
void (*master_failed) (NMActiveConnection *connection);
+
+ void (*device_changed) (NMActiveConnection *connection,
+ NMDevice *new_device,
+ NMDevice *old_device);
} NMActiveConnectionClass;
GType nm_active_connection_get_type (void);
@@ -142,4 +148,4 @@ void nm_active_connection_set_assumed (NMActiveConnection *self,
gboolean nm_active_connection_get_assumed (NMActiveConnection *self);
-#endif /* NM_ACTIVE_CONNECTION_H */
+#endif /* __NETWORKMANAGER_ACTIVE_CONNECTION_H__ */
diff --git a/src/nm-auth-manager.c b/src/nm-auth-manager.c
new file mode 100644
index 000000000..fc8f8cda1
--- /dev/null
+++ b/src/nm-auth-manager.c
@@ -0,0 +1,657 @@
+/* -*- 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 "config.h"
+
+#include "nm-auth-manager.h"
+
+#include "nm-logging.h"
+#include "nm-errors.h"
+
+#define POLKIT_SERVICE "org.freedesktop.PolicyKit1"
+#define POLKIT_OBJECT_PATH "/org/freedesktop/PolicyKit1/Authority"
+#define POLKIT_INTERFACE "org.freedesktop.PolicyKit1.Authority"
+
+
+#define _LOG_DEFAULT_DOMAIN LOGD_CORE
+
+#define _LOG(level, domain, ...) \
+ G_STMT_START { \
+ if (nm_logging_enabled ((level), (domain))) { \
+ char __prefix[30] = "auth"; \
+ \
+ if ((self) != _instance) \
+ g_snprintf (__prefix, sizeof (__prefix), "auth[%p]", (self)); \
+ nm_log ((level), (domain), \
+ "%s: " _NM_UTILS_MACRO_FIRST(__VA_ARGS__), \
+ __prefix _NM_UTILS_MACRO_REST(__VA_ARGS__)); \
+ } \
+ } G_STMT_END
+
+#define _LOGD(...) _LOG (LOGL_DEBUG, _LOG_DEFAULT_DOMAIN, __VA_ARGS__)
+#define _LOGI(...) _LOG (LOGL_INFO, _LOG_DEFAULT_DOMAIN, __VA_ARGS__)
+#define _LOGW(...) _LOG (LOGL_WARN, _LOG_DEFAULT_DOMAIN, __VA_ARGS__)
+#define _LOGE(...) _LOG (LOGL_ERR, _LOG_DEFAULT_DOMAIN, __VA_ARGS__)
+
+
+enum {
+ PROP_0,
+ PROP_POLKIT_ENABLED,
+
+ LAST_PROP
+};
+
+enum {
+ CHANGED_SIGNAL,
+
+ LAST_SIGNAL,
+};
+
+static guint signals[LAST_SIGNAL] = {0};
+
+typedef struct {
+ gboolean polkit_enabled;
+#if WITH_POLKIT
+ guint call_id_counter;
+ GCancellable *new_proxy_cancellable;
+ GSList *queued_calls;
+ GDBusProxy *proxy;
+#endif
+} NMAuthManagerPrivate;
+
+static NMAuthManager *_instance = NULL;
+
+G_DEFINE_TYPE (NMAuthManager, nm_auth_manager, G_TYPE_OBJECT)
+
+#define NM_AUTH_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_AUTH_MANAGER, NMAuthManagerPrivate))
+
+/*****************************************************************************/
+
+gboolean
+nm_auth_manager_get_polkit_enabled (NMAuthManager *self)
+{
+ g_return_val_if_fail (NM_IS_AUTH_MANAGER (self), FALSE);
+
+ return NM_AUTH_MANAGER_GET_PRIVATE (self)->polkit_enabled;
+}
+
+/*****************************************************************************/
+
+#if WITH_POLKIT
+
+typedef enum {
+ POLKIT_CHECK_AUTHORIZATION_FLAGS_NONE = 0,
+ POLKIT_CHECK_AUTHORIZATION_FLAGS_ALLOW_USER_INTERACTION = (1<<0),
+} PolkitCheckAuthorizationFlags;
+
+typedef struct {
+ guint call_id;
+ NMAuthManager *self;
+ GSimpleAsyncResult *simple;
+ gchar *cancellation_id;
+ GVariant *dbus_parameters;
+ GCancellable *cancellable;
+} CheckAuthData;
+
+static void
+_check_auth_data_free (CheckAuthData *data)
+{
+ if (data->dbus_parameters)
+ g_variant_unref (data->dbus_parameters);
+ g_object_unref (data->self);
+ g_object_unref (data->simple);
+ g_clear_object (&data->cancellable);
+ g_free (data->cancellation_id);
+ g_free (data);
+}
+
+static void
+_call_check_authorization_complete_with_error (CheckAuthData *data,
+ const char *error_message)
+{
+ NMAuthManager *self = data->self;
+
+ _LOGD ("call[%u]: CheckAuthorization failed due to internal error: %s", data->call_id, error_message);
+ g_simple_async_result_set_error (data->simple,
+ NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_FAILED,
+ "Authorization check failed: %s",
+ error_message);
+
+ g_simple_async_result_complete_in_idle (data->simple);
+
+ _check_auth_data_free (data);
+}
+
+static void
+cancel_check_authorization_cb (GDBusProxy *proxy,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ NMAuthManager *self = user_data;
+ GVariant *value;
+ GError *error= NULL;
+
+ value = g_dbus_proxy_call_finish (proxy, res, &error);
+ if (value == NULL) {
+ _LOGD ("Error cancelling authorization check: %s", error->message);
+ g_error_free (error);
+ } else
+ g_variant_unref (value);
+
+ g_object_unref (self);
+}
+
+typedef struct {
+ gboolean is_authorized;
+ gboolean is_challenge;
+} CheckAuthorizationResult;
+
+static void
+check_authorization_cb (GDBusProxy *proxy,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ CheckAuthData *data = user_data;
+ NMAuthManager *self = data->self;
+ NMAuthManagerPrivate *priv = NM_AUTH_MANAGER_GET_PRIVATE (self);
+ GVariant *value;
+ GError *error = NULL;
+
+ value = g_dbus_proxy_call_finish (proxy, res, &error);
+ if (value == NULL) {
+ if (data->cancellation_id != NULL &&
+ (!g_dbus_error_is_remote_error (error) &&
+ error->domain == G_IO_ERROR &&
+ error->code == G_IO_ERROR_CANCELLED)) {
+ _LOGD ("call[%u]: CheckAuthorization cancelled", data->call_id);
+ g_dbus_proxy_call (priv->proxy,
+ "CancelCheckAuthorization",
+ g_variant_new ("(s)", data->cancellation_id),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ NULL, /* GCancellable */
+ (GAsyncReadyCallback) cancel_check_authorization_cb,
+ g_object_ref (self));
+ } else
+ _LOGD ("call[%u]: CheckAuthorization failed: %s", data->call_id, error->message);
+ g_simple_async_result_set_error (data->simple,
+ NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_FAILED,
+ "Authorization check failed: %s",
+ error->message);
+ g_error_free (error);
+ } else {
+ GVariant *result_value;
+ CheckAuthorizationResult *result;
+
+ result = g_new0 (CheckAuthorizationResult, 1);
+
+ result_value = g_variant_get_child_value (value, 0);
+ g_variant_get (result_value,
+ "(bb@a{ss})",
+ &result->is_authorized,
+ &result->is_challenge,
+ NULL);
+ g_variant_unref (result_value);
+ g_variant_unref (value);
+
+ _LOGD ("call[%u]: CheckAuthorization succeeded: (is_authorized=%d, is_challenge=%d)", data->call_id, result->is_authorized, result->is_challenge);
+ g_simple_async_result_set_op_res_gpointer (data->simple, result, g_free);
+ }
+
+ g_simple_async_result_complete (data->simple);
+
+ _check_auth_data_free (data);
+}
+
+static void
+_call_check_authorization (CheckAuthData *data)
+{
+ NMAuthManagerPrivate *priv = NM_AUTH_MANAGER_GET_PRIVATE (data->self);
+
+ g_dbus_proxy_call (priv->proxy,
+ "CheckAuthorization",
+ data->dbus_parameters,
+ G_DBUS_CALL_FLAGS_NONE,
+ G_MAXINT, /* no timeout */
+ data->cancellable,
+ (GAsyncReadyCallback) check_authorization_cb,
+ data);
+ g_clear_object (&data->cancellable);
+ data->dbus_parameters = NULL;
+}
+
+void
+nm_auth_manager_polkit_authority_check_authorization (NMAuthManager *self,
+ NMAuthSubject *subject,
+ const char *action_id,
+ gboolean allow_user_interaction,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ NMAuthManagerPrivate *priv;
+ char subject_buf[64];
+ GVariantBuilder builder;
+ PolkitCheckAuthorizationFlags flags;
+ GVariant *subject_value;
+ GVariant *details_value;
+ CheckAuthData *data;
+
+ g_return_if_fail (NM_IS_AUTH_MANAGER (self));
+ g_return_if_fail (NM_IS_AUTH_SUBJECT (subject));
+ g_return_if_fail (nm_auth_subject_is_unix_process (subject));
+ g_return_if_fail (action_id != NULL);
+ g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
+
+ priv = NM_AUTH_MANAGER_GET_PRIVATE (self);
+
+ g_return_if_fail (priv->polkit_enabled);
+
+ flags = allow_user_interaction
+ ? POLKIT_CHECK_AUTHORIZATION_FLAGS_ALLOW_USER_INTERACTION
+ : POLKIT_CHECK_AUTHORIZATION_FLAGS_NONE;
+
+ subject_value = nm_auth_subject_unix_process_to_polkit_gvariant (subject);
+ g_assert (g_variant_is_floating (subject_value));
+
+ /* ((PolkitDetails *)NULL) */
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{ss}"));
+ details_value = g_variant_builder_end (&builder);
+
+ data = g_new0 (CheckAuthData, 1);
+ data->call_id = ++priv->call_id_counter;
+ data->self = g_object_ref (self);
+ data->simple = g_simple_async_result_new (G_OBJECT (self),
+ callback,
+ user_data,
+ nm_auth_manager_polkit_authority_check_authorization);
+ if (cancellable != NULL) {
+ data->cancellation_id = g_strdup_printf ("cancellation-id-%u", data->call_id);
+ data->cancellable = g_object_ref (cancellable);
+ }
+
+ data->dbus_parameters = g_variant_new ("(@(sa{sv})s@a{ss}us)",
+ subject_value,
+ action_id,
+ details_value,
+ (guint32) flags,
+ data->cancellation_id != NULL ? data->cancellation_id : "");
+
+ if (priv->new_proxy_cancellable) {
+ _LOGD ("call[%u]: CheckAuthorization(%s), subject=%s (wait for proxy)", data->call_id, action_id, nm_auth_subject_to_string (subject, subject_buf, sizeof (subject_buf)));
+
+ priv->queued_calls = g_slist_prepend (priv->queued_calls, data);
+ } else if (!priv->proxy) {
+ _LOGD ("call[%u]: CheckAuthorization(%s), subject=%s (fails due to invalid DBUS proxy)", data->call_id, action_id, nm_auth_subject_to_string (subject, subject_buf, sizeof (subject_buf)));
+
+ _call_check_authorization_complete_with_error (data, "invalid DBUS proxy");
+ } else {
+ _LOGD ("call[%u]: CheckAuthorization(%s), subject=%s", data->call_id, action_id, nm_auth_subject_to_string (subject, subject_buf, sizeof (subject_buf)));
+
+ _call_check_authorization (data);
+ }
+}
+
+gboolean
+nm_auth_manager_polkit_authority_check_authorization_finish (NMAuthManager *self,
+ GAsyncResult *res,
+ gboolean *out_is_authorized,
+ gboolean *out_is_challenge,
+ GError **error)
+{
+ gboolean success = FALSE;
+ gboolean is_authorized = FALSE;
+ gboolean is_challenge = FALSE;
+
+ g_return_val_if_fail (NM_IS_AUTH_MANAGER (self), FALSE);
+ g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (res), FALSE);
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ if (!g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error)) {
+ CheckAuthorizationResult *result;
+
+ result = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (res));
+ is_authorized = !!result->is_authorized;
+ is_challenge = !!result->is_challenge;
+ success = TRUE;
+ }
+ g_assert ((success && !error) || (!success || error));
+
+ if (out_is_authorized)
+ *out_is_authorized = is_authorized;
+ if (out_is_challenge)
+ *out_is_challenge = is_challenge;
+ return success;
+}
+
+/*****************************************************************************/
+
+static void
+_emit_changed_signal (NMAuthManager *self)
+{
+ _LOGD ("emit changed signal");
+ g_signal_emit_by_name (self, NM_AUTH_MANAGER_SIGNAL_CHANGED);
+}
+
+static void
+_log_name_owner (NMAuthManager *self, char **out_name_owner)
+{
+ NMAuthManagerPrivate *priv = NM_AUTH_MANAGER_GET_PRIVATE (self);
+ char *name_owner;
+
+ name_owner = g_dbus_proxy_get_name_owner (priv->proxy);
+ if (name_owner)
+ _LOGD ("dbus name owner: '%s'", name_owner);
+ else
+ _LOGD ("dbus name owner: none");
+
+ if (out_name_owner)
+ *out_name_owner = name_owner;
+ else
+ g_free (name_owner);
+}
+
+static void
+_dbus_on_name_owner_notify_cb (GObject *object,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ NMAuthManager *self = user_data;
+ NMAuthManagerPrivate *priv = NM_AUTH_MANAGER_GET_PRIVATE (self);
+ char *name_owner;
+
+ g_return_if_fail (priv->proxy == (void *) object);
+
+ _log_name_owner (self, &name_owner);
+
+ if (!name_owner) {
+ /* when the name disappears, we also want to raise a emit signal.
+ * When it appears, we raise one already. */
+ _emit_changed_signal (self);
+ }
+
+ g_free (name_owner);
+}
+
+static void
+_dbus_on_g_signal_cb (GDBusProxy *proxy,
+ const gchar *sender_name,
+ const gchar *signal_name,
+ GVariant *parameters,
+ gpointer user_data)
+{
+ NMAuthManager *self = user_data;
+ NMAuthManagerPrivate *priv = NM_AUTH_MANAGER_GET_PRIVATE (self);
+
+ g_return_if_fail (priv->proxy == proxy);
+
+ _LOGD ("dbus signal: \"%s\"", signal_name ? signal_name : "(null)");
+
+ if (g_strcmp0 (signal_name, "Changed") == 0)
+ _emit_changed_signal (self);
+}
+
+static void
+_dbus_new_proxy_cb (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ NMAuthManager **p_self = user_data;
+ NMAuthManager *self = NULL;
+ NMAuthManagerPrivate *priv;
+ GError *error = NULL;
+ GDBusProxy *proxy;
+ CheckAuthData *data;
+
+ proxy = g_dbus_proxy_new_for_bus_finish (res, &error);
+
+ if (!*p_self) {
+ _LOGD ("_dbus_new_proxy_cb(): manager destroyed before callback finished. Abort");
+ g_clear_object (&proxy);
+ g_clear_error (&error);
+ g_free (p_self);
+ return;
+ }
+ self = *p_self;
+ g_object_remove_weak_pointer (G_OBJECT (self), (void **)p_self);
+ g_free (p_self);
+
+ priv = NM_AUTH_MANAGER_GET_PRIVATE (self);
+
+ g_return_if_fail (priv->new_proxy_cancellable);
+ g_return_if_fail (!priv->proxy);
+
+ g_clear_object (&priv->new_proxy_cancellable);
+
+ priv->queued_calls = g_slist_reverse (priv->queued_calls);
+
+ priv->proxy = proxy;
+ if (!priv->proxy) {
+ _LOGE ("could not get polkit proxy: %s", error->message);
+ g_clear_error (&error);
+
+ while (priv->queued_calls) {
+ data = priv->queued_calls->data;
+ priv->queued_calls = g_slist_remove (priv->queued_calls, data);
+
+ _call_check_authorization_complete_with_error (data, "error creating DBUS proxy");
+ }
+ return;
+ }
+
+ g_signal_connect (priv->proxy,
+ "notify::g-name-owner",
+ G_CALLBACK (_dbus_on_name_owner_notify_cb),
+ self);
+ g_signal_connect (priv->proxy,
+ "g-signal",
+ G_CALLBACK (_dbus_on_g_signal_cb),
+ self);
+
+ _log_name_owner (self, NULL);
+
+ while (priv->queued_calls) {
+ data = priv->queued_calls->data;
+ priv->queued_calls = g_slist_remove (priv->queued_calls, data);
+ _LOGD ("call[%u]: CheckAuthorization invoke now", data->call_id);
+ _call_check_authorization (data);
+ }
+ _emit_changed_signal (self);
+}
+
+#endif
+
+/*****************************************************************************/
+
+NMAuthManager *
+nm_auth_manager_get ()
+{
+ g_return_val_if_fail (_instance, NULL);
+
+ return _instance;
+}
+
+NMAuthManager *
+nm_auth_manager_setup (gboolean polkit_enabled)
+{
+ NMAuthManager *self;
+
+ g_return_val_if_fail (!_instance, _instance);
+
+ self = g_object_new (NM_TYPE_AUTH_MANAGER,
+ NM_AUTH_MANAGER_POLKIT_ENABLED, polkit_enabled,
+ NULL);
+ _LOGD ("set instance");
+
+ return (_instance = self);
+}
+
+/*****************************************************************************/
+
+static void
+get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
+{
+ NMAuthManagerPrivate *priv = NM_AUTH_MANAGER_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_POLKIT_ENABLED:
+ g_value_set_boolean (value, priv->polkit_enabled);
+ 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)
+{
+ NMAuthManagerPrivate *priv = NM_AUTH_MANAGER_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_POLKIT_ENABLED:
+ /* construct only */
+ priv->polkit_enabled = !!g_value_get_boolean (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+nm_auth_manager_init (NMAuthManager *self)
+{
+}
+
+static void
+constructed (GObject *object)
+{
+ NMAuthManager *self = NM_AUTH_MANAGER (object);
+ NMAuthManagerPrivate *priv = NM_AUTH_MANAGER_GET_PRIVATE (self);
+
+ G_OBJECT_CLASS (nm_auth_manager_parent_class)->constructed (object);
+
+#if WITH_POLKIT
+ _LOGD ("create auth-manager: polkit %s", priv->polkit_enabled ? "enabled" : "disabled");
+
+ if (priv->polkit_enabled) {
+ NMAuthManager **p_self;
+
+ priv->new_proxy_cancellable = g_cancellable_new ();
+ p_self = g_new (NMAuthManager *, 1);
+ *p_self = self;
+ g_object_add_weak_pointer (G_OBJECT (self), (void **) p_self);
+ g_dbus_proxy_new_for_bus (G_BUS_TYPE_SYSTEM,
+ G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES,
+ NULL,
+ POLKIT_SERVICE,
+ POLKIT_OBJECT_PATH,
+ POLKIT_INTERFACE,
+ priv->new_proxy_cancellable,
+ _dbus_new_proxy_cb,
+ p_self);
+ }
+#else
+ if (priv->polkit_enabled)
+ _LOGW ("create auth-manager: polkit disabled at compile time. All authentication requests will fail");
+ else
+ _LOGD ("create auth-manager: polkit disabled at compile time");
+#endif
+}
+
+
+static void
+dispose (GObject *object)
+{
+ NMAuthManager* self = NM_AUTH_MANAGER (object);
+#if WITH_POLKIT
+ NMAuthManagerPrivate *priv = NM_AUTH_MANAGER_GET_PRIVATE (self);
+#endif
+
+ _LOGD ("dispose");
+
+#if WITH_POLKIT
+ /* since we take a reference for each queued call, we don't expect to have any queued calls in dispose() */
+ g_assert (!priv->queued_calls);
+
+ if (priv->new_proxy_cancellable) {
+ g_cancellable_cancel (priv->new_proxy_cancellable);
+ g_clear_object (&priv->new_proxy_cancellable);
+ }
+
+ if (priv->proxy) {
+ g_signal_handlers_disconnect_by_func (priv->proxy, _dbus_on_name_owner_notify_cb, self);
+ g_signal_handlers_disconnect_by_func (priv->proxy, _dbus_on_g_signal_cb, self);
+ g_clear_object (&priv->proxy);
+ }
+#endif
+
+ G_OBJECT_CLASS (nm_auth_manager_parent_class)->dispose (object);
+}
+
+static void
+finalize (GObject *object)
+{
+ NMAuthManager* self = NM_AUTH_MANAGER (object);
+
+ G_OBJECT_CLASS (nm_auth_manager_parent_class)->finalize (object);
+
+ if (self == _instance) {
+ _instance = NULL;
+ _LOGD ("unset instance");
+ }
+}
+
+static void
+nm_auth_manager_class_init (NMAuthManagerClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ g_type_class_add_private (klass, sizeof (NMAuthManagerPrivate));
+
+ object_class->get_property = get_property;
+ object_class->set_property = set_property;
+ object_class->constructed = constructed;
+ object_class->dispose = dispose;
+ object_class->finalize = finalize;
+
+ g_object_class_install_property
+ (object_class, PROP_POLKIT_ENABLED,
+ g_param_spec_boolean (NM_AUTH_MANAGER_POLKIT_ENABLED, "", "",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+
+ signals[CHANGED_SIGNAL] = g_signal_new (NM_AUTH_MANAGER_SIGNAL_CHANGED,
+ NM_TYPE_AUTH_MANAGER,
+ G_SIGNAL_RUN_LAST,
+ 0, /* class offset */
+ NULL, /* accumulator */
+ NULL, /* accumulator data */
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE,
+ 0);
+
+}
+
diff --git a/src/nm-auth-manager.h b/src/nm-auth-manager.h
new file mode 100644
index 000000000..cc3b5d3c7
--- /dev/null
+++ b/src/nm-auth-manager.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) 2014 Red Hat, Inc.
+ */
+
+#ifndef NM_AUTH_MANAGER_H
+#define NM_AUTH_MANAGER_H
+
+#include <gio/gio.h>
+
+#include "nm-auth-subject.h"
+
+G_BEGIN_DECLS
+
+
+#define NM_TYPE_AUTH_MANAGER (nm_auth_manager_get_type ())
+#define NM_AUTH_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_AUTH_MANAGER, NMAuthManager))
+#define NM_AUTH_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_AUTH_MANAGER, NMAuthManagerClass))
+#define NM_IS_AUTH_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_AUTH_MANAGER))
+#define NM_IS_AUTH_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_AUTH_MANAGER))
+#define NM_AUTH_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_AUTH_MANAGER, NMAuthManagerClass))
+
+
+#define NM_AUTH_MANAGER_POLKIT_ENABLED "polkit-enabled"
+
+#define NM_AUTH_MANAGER_SIGNAL_CHANGED "changed"
+
+typedef struct {
+ GObject parent;
+} NMAuthManager;
+
+typedef struct {
+ GObjectClass parent;
+} NMAuthManagerClass;
+
+GType nm_auth_manager_get_type (void);
+
+NMAuthManager *nm_auth_manager_setup (gboolean polkit_enabled);
+NMAuthManager *nm_auth_manager_get (void);
+
+gboolean nm_auth_manager_get_polkit_enabled (NMAuthManager *self);
+
+#if WITH_POLKIT
+
+void nm_auth_manager_polkit_authority_check_authorization (NMAuthManager *self,
+ NMAuthSubject *subject,
+ const char *action_id,
+ gboolean allow_user_interaction,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+gboolean nm_auth_manager_polkit_authority_check_authorization_finish (NMAuthManager *self,
+ GAsyncResult *res,
+ gboolean *out_is_authorized,
+ gboolean *out_is_challenge,
+ GError **error);
+
+#endif
+
+G_END_DECLS
+
+#endif /* NM_AUTH_MANAGER_H */
+
diff --git a/src/nm-auth-subject.c b/src/nm-auth-subject.c
index e770af49e..209f98e17 100644
--- a/src/nm-auth-subject.c
+++ b/src/nm-auth-subject.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) 2013 Red Hat, Inc.
+ * Copyright (C) 2013 - 2014 Red Hat, Inc.
*/
/**
@@ -26,108 +26,212 @@
* 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 "config.h"
#include "nm-auth-subject.h"
+
+#include <string.h>
+#include <stdlib.h>
+#include <gio/gio.h>
+
#include "nm-dbus-manager.h"
+#include "nm-enum-types.h"
+#include "nm-glib-compat.h"
+#include "NetworkManagerUtils.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))
+enum {
+ PROP_0,
+ PROP_SUBJECT_TYPE,
+ PROP_UNIX_PROCESS_DBUS_SENDER,
+ PROP_UNIX_PROCESS_PID,
+ PROP_UNIX_PROCESS_UID,
+
+ PROP_LAST,
+};
+
typedef struct {
- gulong pid;
- gulong uid;
- char *dbus_sender;
+ NMAuthSubjectType subject_type;
+ struct {
+ gulong pid;
+ gulong uid;
+ guint64 start_time;
+ char *dbus_sender;
+ } unix_process;
+} NMAuthSubjectPrivate;
+
+/**************************************************************/
+
+#define CHECK_SUBJECT(self, error_value) \
+ NMAuthSubjectPrivate *priv; \
+ g_return_val_if_fail (NM_IS_AUTH_SUBJECT (self), error_value); \
+ priv = NM_AUTH_SUBJECT_GET_PRIVATE (self); \
+
+#define CHECK_SUBJECT_TYPED(self, expected_subject_type, error_value) \
+ CHECK_SUBJECT (self, error_value); \
+ g_return_val_if_fail (priv->subject_type == (expected_subject_type), error_value);
+
+const char *
+nm_auth_subject_to_string (NMAuthSubject *self, char *buf, gsize buf_len)
+{
+ CHECK_SUBJECT (self, NULL);
+
+ switch (priv->subject_type) {
+ case NM_AUTH_SUBJECT_TYPE_UNIX_PROCESS:
+ g_snprintf (buf, buf_len, "unix-process[pid=%lu, uid=%lu, start=%llu]",
+ (long unsigned) priv->unix_process.pid,
+ (long unsigned) priv->unix_process.uid,
+ (long long unsigned) priv->unix_process.start_time);
+ break;
+ case NM_AUTH_SUBJECT_TYPE_INTERNAL:
+ g_strlcat (buf, "internal", buf_len);
+ break;
+ default:
+ g_strlcat (buf, "invalid", buf_len);
+ break;
+ }
+ return buf;
+}
#if WITH_POLKIT
- PolkitSubject *pk_subject;
+
+/* returns a floating variant */
+GVariant *
+nm_auth_subject_unix_process_to_polkit_gvariant (NMAuthSubject *self)
+{
+ GVariantBuilder builder;
+ GVariant *dict;
+ GVariant *ret;
+ CHECK_SUBJECT_TYPED (self, NM_AUTH_SUBJECT_TYPE_UNIX_PROCESS, NULL);
+
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
+ g_variant_builder_add (&builder, "{sv}", "pid",
+ g_variant_new_uint32 (priv->unix_process.pid));
+ g_variant_builder_add (&builder, "{sv}", "start-time",
+ g_variant_new_uint64 (priv->unix_process.start_time));
+ g_variant_builder_add (&builder, "{sv}", "uid",
+ g_variant_new_int32 (priv->unix_process.uid));
+ dict = g_variant_builder_end (&builder);
+ ret = g_variant_new ("(s@a{sv})", "unix-process", dict);
+ return ret;
+}
+
#endif
-} NMAuthSubjectPrivate;
-static NMAuthSubject *
-_new_common (DBusGMethodInvocation *context,
- DBusConnection *connection,
- DBusMessage *message,
- gboolean internal)
-{
- NMAuthSubject *subject;
- NMAuthSubjectPrivate *priv;
- NMDBusManager *dbus_mgr;
- gboolean success = FALSE;
+NMAuthSubjectType
+nm_auth_subject_get_subject_type (NMAuthSubject *subject)
+{
+ CHECK_SUBJECT (subject, NM_AUTH_SUBJECT_TYPE_INVALID);
+
+ return priv->subject_type;
+}
+
+gboolean
+nm_auth_subject_is_internal (NMAuthSubject *subject)
+{
+ return nm_auth_subject_get_subject_type (subject) == NM_AUTH_SUBJECT_TYPE_INTERNAL;
+}
+
+gboolean
+nm_auth_subject_is_unix_process (NMAuthSubject *subject)
+{
+ return nm_auth_subject_get_subject_type (subject) == NM_AUTH_SUBJECT_TYPE_UNIX_PROCESS;
+}
- g_return_val_if_fail (context || (connection && message) || internal, NULL);
- if (internal)
- g_return_val_if_fail (context == NULL && connection == NULL && message == NULL, NULL);
+gulong
+nm_auth_subject_get_unix_process_pid (NMAuthSubject *subject)
+{
+ CHECK_SUBJECT_TYPED (subject, NM_AUTH_SUBJECT_TYPE_UNIX_PROCESS, G_MAXULONG);
- subject = NM_AUTH_SUBJECT (g_object_new (NM_TYPE_AUTH_SUBJECT, NULL));
- priv = NM_AUTH_SUBJECT_GET_PRIVATE (subject);
+ return priv->unix_process.pid;
+}
- dbus_mgr = nm_dbus_manager_get ();
+gulong
+nm_auth_subject_get_unix_process_uid (NMAuthSubject *subject)
+{
+ CHECK_SUBJECT_TYPED (subject, NM_AUTH_SUBJECT_TYPE_UNIX_PROCESS, G_MAXULONG);
- if (internal) {
- priv->uid = 0;
- priv->pid = 0;
- return subject;
- }
+ return priv->unix_process.uid;
+}
+
+const char *
+nm_auth_subject_get_unix_process_dbus_sender (NMAuthSubject *subject)
+{
+ CHECK_SUBJECT_TYPED (subject, NM_AUTH_SUBJECT_TYPE_UNIX_PROCESS, NULL);
+
+ return priv->unix_process.dbus_sender;
+}
+
+/**************************************************************/
+
+static NMAuthSubject *
+_new_unix_process (DBusGMethodInvocation *context,
+ DBusConnection *connection,
+ DBusMessage *message)
+{
+ NMAuthSubject *self;
+ gboolean success = FALSE;
+ gulong pid = 0, uid = 0;
+ char *dbus_sender = NULL;
+
+ g_return_val_if_fail (context || (connection && message), NULL);
if (context) {
- success = nm_dbus_manager_get_caller_info (dbus_mgr,
+ success = nm_dbus_manager_get_caller_info (nm_dbus_manager_get (),
context,
- &priv->dbus_sender,
- &priv->uid,
- &priv->pid);
+ &dbus_sender,
+ &uid,
+ &pid);
} else if (message) {
- success = nm_dbus_manager_get_caller_info_from_message (dbus_mgr,
+ success = nm_dbus_manager_get_caller_info_from_message (nm_dbus_manager_get (),
connection,
message,
- &priv->dbus_sender,
- &priv->uid,
- &priv->pid);
+ &dbus_sender,
+ &uid,
+ &pid);
} else
g_assert_not_reached ();
- if (!success) {
- g_object_unref (subject);
+ if (!success)
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;
+ g_return_val_if_fail (dbus_sender && *dbus_sender, NULL);
+ /* polkit glib library stores uid and pid as gint. There might be some
+ * pitfalls if the id ever happens to be larger then that. Just assert against
+ * it here. */
+ g_return_val_if_fail (uid <= MIN (G_MAXINT, G_MAXINT32), NULL);
+ g_return_val_if_fail (pid > 0 && pid <= MIN (G_MAXINT, G_MAXINT32), NULL);
+
+ self = NM_AUTH_SUBJECT (g_object_new (NM_TYPE_AUTH_SUBJECT,
+ NM_AUTH_SUBJECT_SUBJECT_TYPE, NM_AUTH_SUBJECT_TYPE_UNIX_PROCESS,
+ NM_AUTH_SUBJECT_UNIX_PROCESS_DBUS_SENDER, dbus_sender,
+ NM_AUTH_SUBJECT_UNIX_PROCESS_PID, (gulong) pid,
+ NM_AUTH_SUBJECT_UNIX_PROCESS_UID, (gulong) uid,
+ NULL));
+
+ if (NM_AUTH_SUBJECT_GET_PRIVATE (self)->subject_type != NM_AUTH_SUBJECT_TYPE_UNIX_PROCESS) {
+ /* this most likely happened because the process is gone (start_time==0).
+ * Either that is not assert-worthy, or constructed() already asserted.
+ * Just return NULL. */
+ g_clear_object (&self);
+ }
+ return self;
}
-
NMAuthSubject *
-nm_auth_subject_new_from_context (DBusGMethodInvocation *context)
+nm_auth_subject_new_unix_process_from_context (DBusGMethodInvocation *context)
{
- return _new_common (context, NULL, NULL, FALSE);
+ return _new_unix_process (context, NULL, NULL);
}
NMAuthSubject *
-nm_auth_subject_new_from_message (DBusConnection *connection,
- DBusMessage *message)
+nm_auth_subject_new_unix_process_from_message (DBusConnection *connection,
+ DBusMessage *message)
{
- return _new_common (NULL, connection, message, FALSE);
+ return _new_unix_process (NULL, connection, message);
}
/**
@@ -140,53 +244,135 @@ nm_auth_subject_new_from_message (DBusConnection *connection,
NMAuthSubject *
nm_auth_subject_new_internal (void)
{
- return _new_common (NULL, NULL, NULL, TRUE);
+ return NM_AUTH_SUBJECT (g_object_new (NM_TYPE_AUTH_SUBJECT,
+ NM_AUTH_SUBJECT_SUBJECT_TYPE, NM_AUTH_SUBJECT_TYPE_INTERNAL,
+ NULL));
}
/**************************************************************/
-gulong
-nm_auth_subject_get_uid (NMAuthSubject *subject)
+static void
+get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
{
- return NM_AUTH_SUBJECT_GET_PRIVATE (subject)->uid;
-}
+ NMAuthSubjectPrivate *priv = NM_AUTH_SUBJECT_GET_PRIVATE (object);
-gulong
-nm_auth_subject_get_pid (NMAuthSubject *subject)
-{
- return NM_AUTH_SUBJECT_GET_PRIVATE (subject)->pid;
+ switch (prop_id) {
+ case PROP_SUBJECT_TYPE:
+ g_value_set_enum (value, priv->subject_type);
+ break;
+ case PROP_UNIX_PROCESS_DBUS_SENDER:
+ g_value_set_string (value, priv->unix_process.dbus_sender);
+ break;
+ case PROP_UNIX_PROCESS_PID:
+ g_value_set_ulong (value, priv->unix_process.pid);
+ break;
+ case PROP_UNIX_PROCESS_UID:
+ g_value_set_ulong (value, priv->unix_process.uid);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
}
-const char *
-nm_auth_subject_get_dbus_sender (NMAuthSubject *subject)
+static void
+set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
{
- return NM_AUTH_SUBJECT_GET_PRIVATE (subject)->dbus_sender;
+ NMAuthSubjectPrivate *priv = NM_AUTH_SUBJECT_GET_PRIVATE (object);
+ NMAuthSubjectType subject_type;
+ const char *str;
+ gulong id;
+
+ /* all properties are construct-only */
+ switch (prop_id) {
+ case PROP_SUBJECT_TYPE:
+ subject_type = g_value_get_enum (value);
+ g_return_if_fail (subject_type != NM_AUTH_SUBJECT_TYPE_INVALID);
+ priv->subject_type |= subject_type;
+ g_return_if_fail (priv->subject_type == subject_type);
+ break;
+ case PROP_UNIX_PROCESS_DBUS_SENDER:
+ if ((str = g_value_get_string (value))) {
+ priv->subject_type |= NM_AUTH_SUBJECT_TYPE_UNIX_PROCESS;
+ g_return_if_fail (priv->subject_type == NM_AUTH_SUBJECT_TYPE_UNIX_PROCESS);
+ priv->unix_process.dbus_sender = g_strdup (str);
+ }
+ break;
+ case PROP_UNIX_PROCESS_PID:
+ if ((id = g_value_get_ulong (value)) != G_MAXULONG) {
+ priv->subject_type |= NM_AUTH_SUBJECT_TYPE_UNIX_PROCESS;
+ g_return_if_fail (priv->subject_type == NM_AUTH_SUBJECT_TYPE_UNIX_PROCESS);
+ priv->unix_process.pid = id;
+ }
+ break;
+ case PROP_UNIX_PROCESS_UID:
+ if ((id = g_value_get_ulong (value)) != G_MAXULONG) {
+ priv->subject_type |= NM_AUTH_SUBJECT_TYPE_UNIX_PROCESS;
+ g_return_if_fail (priv->subject_type == NM_AUTH_SUBJECT_TYPE_UNIX_PROCESS);
+ priv->unix_process.uid = id;
+ }
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
}
-gboolean
-nm_auth_subject_get_internal (NMAuthSubject *subject)
+static void
+_clear_private (NMAuthSubjectPrivate *priv)
{
- /* internal requests will have no dbus sender */
- return NM_AUTH_SUBJECT_GET_PRIVATE (subject)->dbus_sender ? FALSE : TRUE;
+ priv->subject_type = NM_AUTH_SUBJECT_TYPE_INVALID;
+ priv->unix_process.pid = G_MAXULONG;
+ priv->unix_process.uid = G_MAXULONG;
+ g_clear_pointer (&priv->unix_process.dbus_sender, g_free);
}
-#if WITH_POLKIT
-PolkitSubject *
-nm_auth_subject_get_polkit_subject (NMAuthSubject *subject)
+static void
+nm_auth_subject_init (NMAuthSubject *self)
{
- return NM_AUTH_SUBJECT_GET_PRIVATE (subject)->pk_subject;
+ _clear_private (NM_AUTH_SUBJECT_GET_PRIVATE (self));
}
-#endif
-
-/******************************************************************/
static void
-nm_auth_subject_init (NMAuthSubject *self)
+constructed (GObject *object)
{
+ NMAuthSubject *self = NM_AUTH_SUBJECT (object);
NMAuthSubjectPrivate *priv = NM_AUTH_SUBJECT_GET_PRIVATE (self);
- priv->pid = G_MAXULONG;
- priv->uid = G_MAXULONG;
+ /* validate that the created instance. */
+
+ switch (priv->subject_type) {
+ case NM_AUTH_SUBJECT_TYPE_INTERNAL:
+ priv->unix_process.pid = G_MAXULONG;
+ priv->unix_process.uid = 0; /* internal uses 'root' user */
+ return;
+ case NM_AUTH_SUBJECT_TYPE_UNIX_PROCESS:
+ /* Ensure pid and uid to be representable as int32.
+ * DBUS treats them as uint32, polkit library as gint. */
+ if (priv->unix_process.pid > MIN (G_MAXINT, G_MAXINT32))
+ break;
+ if (priv->unix_process.uid > MIN (G_MAXINT, G_MAXINT32)) {
+ /* for uid==-1, libpolkit-gobject-1 detects the user based on the process id.
+ * Don't bother and require the user id as parameter. */
+ break;
+ }
+ if (!priv->unix_process.dbus_sender || !*priv->unix_process.dbus_sender)
+ break;
+
+ priv->unix_process.start_time = nm_utils_get_start_time_for_pid (priv->unix_process.pid);
+
+ if (!priv->unix_process.start_time) {
+ /* could not detect the process start time. The subject is invalid, but don't
+ * assert against it. */
+ _clear_private (priv);
+ }
+ return;
+ default:
+ break;
+ }
+
+ _clear_private (priv);
+ g_return_if_reached ();
}
static void
@@ -194,12 +380,7 @@ 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
+ _clear_private (priv);
G_OBJECT_CLASS (nm_auth_subject_parent_class)->finalize (object);
}
@@ -212,5 +393,42 @@ nm_auth_subject_class_init (NMAuthSubjectClass *config_class)
g_type_class_add_private (config_class, sizeof (NMAuthSubjectPrivate));
/* virtual methods */
+ object_class->get_property = get_property;
+ object_class->set_property = set_property;
+ object_class->constructed = constructed;
object_class->finalize = finalize;
+
+ g_object_class_install_property
+ (object_class, PROP_SUBJECT_TYPE,
+ g_param_spec_enum (NM_AUTH_SUBJECT_SUBJECT_TYPE, "", "",
+ NM_TYPE_AUTH_SUBJECT_TYPE,
+ NM_AUTH_SUBJECT_TYPE_INVALID,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_UNIX_PROCESS_DBUS_SENDER,
+ g_param_spec_string (NM_AUTH_SUBJECT_UNIX_PROCESS_DBUS_SENDER, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_UNIX_PROCESS_PID,
+ g_param_spec_ulong (NM_AUTH_SUBJECT_UNIX_PROCESS_PID, "", "",
+ 0, G_MAXULONG, G_MAXULONG,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_UNIX_PROCESS_UID,
+ g_param_spec_ulong (NM_AUTH_SUBJECT_UNIX_PROCESS_UID, "", "",
+ 0, G_MAXULONG, G_MAXULONG,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+
}
diff --git a/src/nm-auth-subject.h b/src/nm-auth-subject.h
index 063598902..cc004fa90 100644
--- a/src/nm-auth-subject.h
+++ b/src/nm-auth-subject.h
@@ -18,8 +18,8 @@
* Copyright (C) 2013 Red Hat, Inc.
*/
-#ifndef NM_AUTH_SUBJECT_H
-#define NM_AUTH_SUBJECT_H
+#ifndef __NETWORKMANAGER_AUTH_SUBJECT_H__
+#define __NETWORKMANAGER_AUTH_SUBJECT_H__
#include <config.h>
#include <glib.h>
@@ -27,9 +27,7 @@
#include <dbus/dbus.h>
#include <dbus/dbus-glib.h>
-#if WITH_POLKIT
-#include <polkit/polkit.h>
-#endif
+#include "nm-types.h"
#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))
@@ -38,33 +36,56 @@
#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 {
+typedef enum {
+ NM_AUTH_SUBJECT_TYPE_INVALID = 0,
+ NM_AUTH_SUBJECT_TYPE_INTERNAL = 1,
+ NM_AUTH_SUBJECT_TYPE_UNIX_PROCESS = 2,
+} NMAuthSubjectType;
+
+#define NM_AUTH_SUBJECT_SUBJECT_TYPE "subject-type"
+#define NM_AUTH_SUBJECT_UNIX_PROCESS_DBUS_SENDER "unix-process-dbus-sender"
+#define NM_AUTH_SUBJECT_UNIX_PROCESS_PID "unix-process-pid"
+#define NM_AUTH_SUBJECT_UNIX_PROCESS_UID "unix-process-uid"
+
+struct _NMAuthSubject {
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_internal (void);
+
+NMAuthSubject *nm_auth_subject_new_unix_process_from_context (DBusGMethodInvocation *context);
-NMAuthSubject *nm_auth_subject_new_from_message (DBusConnection *connection, DBusMessage *message);
+NMAuthSubject *nm_auth_subject_new_unix_process_from_message (DBusConnection *connection, DBusMessage *message);
-NMAuthSubject *nm_auth_subject_new_internal (void);
-gulong nm_auth_subject_get_uid (NMAuthSubject *subject);
+NMAuthSubjectType nm_auth_subject_get_subject_type (NMAuthSubject *subject);
-gulong nm_auth_subject_get_pid (NMAuthSubject *subject);
-const char *nm_auth_subject_get_dbus_sender (NMAuthSubject *subject);
+gboolean nm_auth_subject_is_internal (NMAuthSubject *subject);
-gboolean nm_auth_subject_get_internal (NMAuthSubject *subject);
+
+gboolean nm_auth_subject_is_unix_process (NMAuthSubject *subject);
+
+gulong nm_auth_subject_get_unix_process_pid (NMAuthSubject *subject);
+
+const char *nm_auth_subject_get_unix_process_dbus_sender (NMAuthSubject *subject);
+
+
+gulong nm_auth_subject_get_unix_process_uid (NMAuthSubject *subject);
+
+
+const char *nm_auth_subject_to_string (NMAuthSubject *self, char *buf, gsize buf_len);
#if WITH_POLKIT
-PolkitSubject *nm_auth_subject_get_polkit_subject (NMAuthSubject *subject);
+
+GVariant * nm_auth_subject_unix_process_to_polkit_gvariant (NMAuthSubject *self);
+
#endif
-#endif /* NM_AUTH_SUBJECT_H */
+#endif /* __NETWORKMANAGER_AUTH_SUBJECT_H__ */
diff --git a/src/nm-manager-auth.c b/src/nm-auth-utils.c
index 7f8b31309..9ace16292 100644
--- a/src/nm-manager-auth.c
+++ b/src/nm-auth-utils.c
@@ -18,32 +18,26 @@
* Copyright (C) 2010 Red Hat, Inc.
*/
-#include <config.h>
+#include "config.h"
+
#include <string.h>
-#include <dbus/dbus-glib-lowlevel.h>
#include <gio/gio.h>
-#if WITH_POLKIT
-#include <polkit/polkit.h>
-#endif
-
+#include "gsystem-local-alloc.h"
#include "nm-setting-connection.h"
-#include "nm-manager-auth.h"
+#include "nm-auth-utils.h"
#include "nm-logging.h"
#include "nm-dbus-manager.h"
#include "nm-auth-subject.h"
+#include "nm-auth-manager.h"
+#include "nm-session-monitor.h"
struct NMAuthChain {
guint32 refcount;
-#if WITH_POLKIT
- PolkitAuthority *authority;
-#endif
GSList *calls;
GHashTable *data;
DBusGMethodInvocation *context;
- char *owner;
- gulong user_uid;
NMAuthSubject *subject;
GError *error;
@@ -90,69 +84,6 @@ auth_chain_finish (gpointer user_data)
return FALSE;
}
-#if WITH_POLKIT
-static PolkitAuthority *
-pk_authority_get (GError **error)
-{
- static PolkitAuthority *authority = NULL;
-
- if (authority == NULL)
- authority = polkit_authority_get_sync (NULL, error);
-
- /* Yes, ref every time; we want to keep the object alive */
- g_warn_if_fail (authority);
- return authority ? g_object_ref (authority) : NULL;
-}
-#endif
-
-static NMAuthChain *
-_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 (subject || user_uid == 0 || dbus_sender, NULL);
-
- self = g_malloc0 (sizeof (NMAuthChain));
- self->refcount = 1;
-#if WITH_POLKIT
- 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 (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 (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_dbus_sender (const char *dbus_sender,
- gulong user_uid,
- NMAuthChainResultFunc done_func,
- gpointer 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_context (DBusGMethodInvocation *context,
@@ -164,7 +95,7 @@ nm_auth_chain_new_context (DBusGMethodInvocation *context,
g_return_val_if_fail (context != NULL, NULL);
- subject = nm_auth_subject_new_from_context (context);
+ subject = nm_auth_subject_new_unix_process_from_context (context);
if (!subject)
return NULL;
@@ -183,16 +114,20 @@ nm_auth_chain_new_subject (NMAuthSubject *subject,
NMAuthChainResultFunc done_func,
gpointer user_data)
{
- NMAuthChain *chain;
+ NMAuthChain *self;
g_return_val_if_fail (NM_IS_AUTH_SUBJECT (subject), NULL);
- chain = _auth_chain_new (subject, NULL, G_MAXULONG, context, done_func, user_data);
+ g_return_val_if_fail (nm_auth_subject_is_unix_process (subject) || nm_auth_subject_is_internal (subject), NULL);
- /* Chains creation from a valid NMAuthSubject cannot fail since the
- * subject already has all the necessary auth info.
- */
- g_assert (chain);
- return chain;
+ self = g_malloc0 (sizeof (NMAuthChain));
+ self->refcount = 1;
+ 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;
+ self->subject = g_object_ref (subject);
+
+ return self;
}
gpointer
@@ -369,123 +304,92 @@ static void
pk_call_cb (GObject *object, GAsyncResult *result, gpointer user_data)
{
AuthCall *call = user_data;
- PolkitAuthorizationResult *pk_result;
GError *error = NULL;
+ gboolean is_authorized, is_challenge;
- pk_result = polkit_authority_check_authorization_finish ((PolkitAuthority *) object, result, &error);
+ nm_auth_manager_polkit_authority_check_authorization_finish (NM_AUTH_MANAGER (object),
+ result,
+ &is_authorized,
+ &is_challenge,
+ &error);
/* If the call is already canceled do nothing */
if (!call->cancellable) {
+ nm_log_dbg (LOGD_CORE, "callback already cancelled");
g_clear_error (&error);
- g_clear_object (&pk_result);
auth_call_free (call);
return;
}
if (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->code, error->message);
- g_clear_error (&error);
+
+ if (!call->chain->error) {
+ call->chain->error = error;
+ error = NULL;
+ } else
+ g_clear_error (&error);
} else {
guint call_result = NM_AUTH_CALL_RESULT_UNKNOWN;
- if (polkit_authorization_result_get_is_authorized (pk_result)) {
+ if (is_authorized) {
/* Caller has the permission */
call_result = NM_AUTH_CALL_RESULT_YES;
- } else if (polkit_authorization_result_get_is_challenge (pk_result)) {
+ } else if (is_challenge) {
/* Caller could authenticate to get the permission */
call_result = NM_AUTH_CALL_RESULT_AUTH;
} else
call_result = NM_AUTH_CALL_RESULT_NO;
nm_auth_chain_set_data (call->chain, call->permission, GUINT_TO_POINTER (call_result), NULL);
- g_object_unref (pk_result);
}
auth_call_complete (call);
}
-
-static void
-auth_call_schedule_complete_with_error (AuthCall *call, const char *msg)
-{
- 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);
-}
-
-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 || self->subject, FALSE);
- g_return_val_if_fail (permission != NULL, FALSE);
-
- call = auth_call_new (self, permission);
-
- if (self->authority == NULL) {
- /* No polkit, no authorization */
- 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,
- NULL,
- flags,
- call->cancellable,
- pk_call_cb,
- call);
- g_object_unref (subject);
- return TRUE;
-}
#endif
-gboolean
+void
nm_auth_chain_add_call (NMAuthChain *self,
const char *permission,
gboolean allow_interaction)
{
AuthCall *call;
+ NMAuthManager *auth_manager = nm_auth_manager_get ();
+
+ g_return_if_fail (self != NULL);
+ g_return_if_fail (permission && *permission);
+ g_return_if_fail (self->subject);
+ g_return_if_fail (nm_auth_subject_is_unix_process (self->subject) || nm_auth_subject_is_internal (self->subject));
- g_return_val_if_fail (self != NULL, FALSE);
+ call = auth_call_new (self, permission);
+ if ( nm_auth_subject_is_internal (self->subject)
+ || nm_auth_subject_get_unix_process_uid (self->subject) == 0
+ || !nm_auth_manager_get_polkit_enabled (auth_manager)) {
+ /* Root user or non-polkit always gets the 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);
+ } else {
+ /* Non-root always gets authenticated when using polkit */
#if WITH_POLKIT
- /* Non-root always gets authenticated when using polkit */
- if (self->user_uid > 0)
- return _add_call_polkit (self, permission, allow_interaction);
+ call->cancellable = g_cancellable_new ();
+ nm_auth_manager_polkit_authority_check_authorization (auth_manager,
+ self->subject,
+ permission,
+ allow_interaction,
+ call->cancellable,
+ pk_call_cb,
+ call);
+#else
+ if (!call->chain->error) {
+ call->chain->error = g_error_new_literal (DBUS_GERROR,
+ DBUS_GERROR_FAILED,
+ "Polkit support is disabled at compile time");
+ }
+ call->call_idle_id = g_idle_add ((GSourceFunc) auth_call_complete, call);
#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
@@ -500,11 +404,6 @@ nm_auth_chain_unref (NMAuthChain *self)
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);
g_slist_free_full (self->calls, auth_call_cancel);
@@ -519,17 +418,25 @@ nm_auth_chain_unref (NMAuthChain *self)
/************ utils **************/
gboolean
-nm_auth_uid_in_acl (NMConnection *connection,
- NMSessionMonitor *smon,
- gulong uid,
- char **out_error_desc)
+nm_auth_is_subject_in_acl (NMConnection *connection,
+ NMSessionMonitor *smon,
+ NMAuthSubject *subject,
+ char **out_error_desc)
{
NMSettingConnection *s_con;
const char *user = NULL;
GError *local = NULL;
+ gulong uid;
g_return_val_if_fail (connection != NULL, FALSE);
g_return_val_if_fail (smon != NULL, FALSE);
+ g_return_val_if_fail (NM_IS_AUTH_SUBJECT (subject), FALSE);
+ g_return_val_if_fail (nm_auth_subject_is_internal (subject) || nm_auth_subject_is_unix_process (subject), FALSE);
+
+ if (nm_auth_subject_is_internal (subject))
+ return TRUE;
+
+ uid = nm_auth_subject_get_unix_process_uid (subject);
/* Root gets a free pass */
if (0 == uid)
@@ -570,87 +477,4 @@ nm_auth_uid_in_acl (NMConnection *connection,
return TRUE;
}
-typedef struct {
- GDestroyNotify changed_callback;
- gpointer changed_data;
-} PkChangedInfo;
-
-static GSList *funcs = NULL;
-
-#if WITH_POLKIT
-static void
-pk_authority_changed_cb (GObject *object, gpointer unused)
-{
- GSList *iter;
-
- for (iter = funcs; iter; iter = g_slist_next (iter)) {
- PkChangedInfo *info = iter->data;
-
- info->changed_callback (info->changed_data);
- }
-}
-#endif
-
-void
-nm_auth_changed_func_register (GDestroyNotify callback, gpointer callback_data)
-{
-#if WITH_POLKIT
- PolkitAuthority *authority;
- static guint32 changed_id = 0;
-#endif
- PkChangedInfo *info;
- GSList *iter;
- gboolean found = FALSE;
-
-#if WITH_POLKIT
- authority = pk_authority_get (NULL);
- if (!authority)
- return;
-
- /* Hook up the changed signal the first time a callback is registered */
- if (changed_id == 0) {
- changed_id = g_signal_connect (authority,
- "changed",
- G_CALLBACK (pk_authority_changed_cb),
- &funcs);
- }
-#endif
-
- /* No duplicates */
- for (iter = funcs; iter; iter = g_slist_next (iter)) {
- info = iter->data;
- if ((callback == info->changed_callback) && (callback_data == info->changed_data)) {
- found = TRUE;
- break;
- }
- }
-
- g_warn_if_fail (found == FALSE);
- if (found == FALSE) {
- info = g_malloc0 (sizeof (*info));
- info->changed_callback = callback;
- info->changed_data = callback_data;
- funcs = g_slist_append (funcs, info);
- }
-
-#if WITH_POLKIT
- g_object_unref (authority);
-#endif
-}
-
-void
-nm_auth_changed_func_unregister (GDestroyNotify callback, gpointer callback_data)
-{
- GSList *iter;
-
- for (iter = funcs; iter; iter = g_slist_next (iter)) {
- PkChangedInfo *info = iter->data;
-
- if ((callback == info->changed_callback) && (callback_data == info->changed_data)) {
- g_free (info);
- funcs = g_slist_delete_link (funcs, iter);
- break;
- }
- }
-}
diff --git a/src/nm-manager-auth.h b/src/nm-auth-utils.h
index 43dd63987..2ab026d01 100644
--- a/src/nm-manager-auth.h
+++ b/src/nm-auth-utils.h
@@ -18,16 +18,14 @@
* Copyright (C) 2010 Red Hat, Inc.
*/
-#ifndef NM_MANAGER_AUTH_H
-#define NM_MANAGER_AUTH_H
+#ifndef __NETWORKMANAGER_MANAGER_AUTH_H__
+#define __NETWORKMANAGER_MANAGER_AUTH_H__
#include <glib.h>
#include <dbus/dbus-glib.h>
#include <nm-connection.h>
-#include "nm-dbus-manager.h"
-#include "nm-session-monitor.h"
-#include "nm-auth-subject.h"
+#include "nm-types.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"
@@ -56,11 +54,6 @@ typedef void (*NMAuthChainResultFunc) (NMAuthChain *chain,
DBusGMethodInvocation *context,
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);
@@ -88,21 +81,17 @@ gulong nm_auth_chain_get_data_ulong (NMAuthChain *chain, const char *tag);
NMAuthCallResult nm_auth_chain_get_result (NMAuthChain *chain,
const char *permission);
-gboolean nm_auth_chain_add_call (NMAuthChain *chain,
- const char *permission,
- gboolean allow_interaction);
+void nm_auth_chain_add_call (NMAuthChain *chain,
+ const char *permission,
+ gboolean allow_interaction);
void nm_auth_chain_unref (NMAuthChain *chain);
/* Caller must free returned error description */
-gboolean nm_auth_uid_in_acl (NMConnection *connection,
- NMSessionMonitor *smon,
- gulong uid,
- char **out_error_desc);
-
-void nm_auth_changed_func_register (GDestroyNotify callback, gpointer callback_data);
-
-void nm_auth_changed_func_unregister (GDestroyNotify callback, gpointer callback_data);
+gboolean nm_auth_is_subject_in_acl (NMConnection *connection,
+ NMSessionMonitor *smon,
+ NMAuthSubject *subect,
+ char **out_error_desc);
-#endif /* NM_MANAGER_AUTH_H */
+#endif /* __NETWORKMANAGER_MANAGER_AUTH_H__ */
diff --git a/src/config/nm-config.c b/src/nm-config.c
index f6688b75d..e8cb08649 100644
--- a/src/config/nm-config.c
+++ b/src/nm-config.c
@@ -19,7 +19,8 @@
* Copyright (C) 2013 Thomas Bechtold <thomasbechtold@jpberlin.de>
*/
-#include <config.h>
+#include "config.h"
+
#include <string.h>
#include <stdio.h>
@@ -27,6 +28,7 @@
#include "nm-logging.h"
#include "nm-utils.h"
#include "nm-glib-compat.h"
+#include "nm-device.h"
#include <gio/gio.h>
#include <glib/gi18n.h>
@@ -45,6 +47,7 @@ typedef struct {
char **plugins;
gboolean monitor_connection_files;
+ gboolean auth_polkit;
char *dhcp_client;
char *dns_mode;
@@ -59,6 +62,8 @@ typedef struct {
char **no_auto_default;
char **ignore_carrier;
+
+ gboolean configure_and_quit;
} NMConfigPrivate;
static NMConfig *singleton = NULL;
@@ -69,6 +74,41 @@ G_DEFINE_TYPE (NMConfig, nm_config, G_TYPE_OBJECT)
/************************************************************************/
+static gboolean
+_get_bool_value (GKeyFile *keyfile,
+ const char *section,
+ const char *key,
+ gboolean default_value)
+{
+ gboolean value = default_value;
+ char *str;
+
+ g_return_val_if_fail (keyfile != NULL, default_value);
+ g_return_val_if_fail (section != NULL, default_value);
+ g_return_val_if_fail (key != NULL, default_value);
+
+ str = g_key_file_get_value (keyfile, section, key, NULL);
+ if (!str)
+ return default_value;
+
+ g_strstrip (str);
+ if (str[0]) {
+ if (!g_ascii_strcasecmp (str, "true") || !g_ascii_strcasecmp (str, "yes") || !g_ascii_strcasecmp (str, "on") || !g_ascii_strcasecmp (str, "1"))
+ value = TRUE;
+ else if (!g_ascii_strcasecmp (str, "false") || !g_ascii_strcasecmp (str, "no") || !g_ascii_strcasecmp (str, "off") || !g_ascii_strcasecmp (str, "0"))
+ value = FALSE;
+ else {
+ nm_log_warn (LOGD_CORE, "Unrecognized value for %s.%s: '%s'. Assuming '%s'",
+ section, key, str, default_value ? "true" : "false");
+ }
+ }
+
+ g_free (str);
+ return value;
+}
+
+/************************************************************************/
+
const char *
nm_config_get_path (NMConfig *config)
{
@@ -101,6 +141,14 @@ nm_config_get_monitor_connection_files (NMConfig *config)
return NM_CONFIG_GET_PRIVATE (config)->monitor_connection_files;
}
+gboolean
+nm_config_get_auth_polkit (NMConfig *config)
+{
+ g_return_val_if_fail (NM_IS_CONFIG (config), NM_CONFIG_DEFAULT_AUTH_POLKIT);
+
+ return NM_CONFIG_GET_PRIVATE (config)->auth_polkit;
+}
+
const char *
nm_config_get_dhcp_client (NMConfig *config)
{
@@ -149,7 +197,7 @@ nm_config_get_connectivity_uri (NMConfig *config)
return NM_CONFIG_GET_PRIVATE (config)->connectivity_uri;
}
-const guint
+guint
nm_config_get_connectivity_interval (NMConfig *config)
{
g_return_val_if_fail (config != NULL, 0);
@@ -168,6 +216,12 @@ nm_config_get_connectivity_response (NMConfig *config)
return NM_CONFIG_GET_PRIVATE (config)->connectivity_response;
}
+gboolean
+nm_config_get_configure_and_quit (NMConfig *config)
+{
+ return NM_CONFIG_GET_PRIVATE (config)->configure_and_quit;
+}
+
char *
nm_config_get_value (NMConfig *config, const char *group, const char *key, GError **error)
{
@@ -177,11 +231,23 @@ nm_config_get_value (NMConfig *config, const char *group, const char *key, GErro
}
gboolean
-nm_config_get_ignore_carrier (NMConfig *config, NMConfigDevice *device)
+nm_config_get_ignore_carrier (NMConfig *config, NMDevice *device)
{
NMConfigPrivate *priv = NM_CONFIG_GET_PRIVATE (config);
+ GSList *specs = NULL;
+ int i;
+ gboolean match;
- return nm_config_device_spec_match_list (device, (const char **) priv->ignore_carrier);
+ if (!priv->ignore_carrier)
+ return FALSE;
+
+ for (i = 0; priv->ignore_carrier[i]; i++)
+ specs = g_slist_prepend (specs, priv->ignore_carrier[i]);
+
+ match = nm_device_spec_match_list (device, specs);
+
+ g_slist_free (specs);
+ return match;
}
/************************************************************************/
@@ -227,15 +293,24 @@ merge_no_auto_default_state (NMConfig *config)
}
gboolean
-nm_config_get_ethernet_can_auto_default (NMConfig *config, NMConfigDevice *device)
+nm_config_get_ethernet_can_auto_default (NMConfig *config, NMDevice *device)
{
NMConfigPrivate *priv = NM_CONFIG_GET_PRIVATE (config);
+ GSList *specs = NULL;
+ int i;
+ gboolean match;
- return !nm_config_device_spec_match_list (device, (const char **) priv->no_auto_default);
+ for (i = 0; priv->no_auto_default[i]; i++)
+ specs = g_slist_prepend (specs, priv->no_auto_default[i]);
+
+ match = nm_device_spec_match_list (device, specs);
+
+ g_slist_free (specs);
+ return !match;
}
void
-nm_config_set_ethernet_no_auto_default (NMConfig *config, NMConfigDevice *device)
+nm_config_set_ethernet_no_auto_default (NMConfig *config, NMDevice *device)
{
NMConfigPrivate *priv = NM_CONFIG_GET_PRIVATE (config);
char *current;
@@ -253,7 +328,7 @@ nm_config_set_ethernet_no_auto_default (NMConfig *config, NMConfigDevice *device
g_string_append_c (updated, '\n');
}
- g_string_append (updated, nm_config_device_get_hwaddr (device));
+ g_string_append (updated, nm_device_get_hw_address (device));
g_string_append_c (updated, '\n');
if (!g_file_set_contents (priv->no_auto_default_file, updated->str, updated->len, &error)) {
@@ -384,9 +459,9 @@ find_base_config (NMConfig *config, GError **error)
}
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);
+ nm_log_warn (LOGD_CORE, "Old default config file %s invalid: %s\n",
+ NM_OLD_SYSTEM_CONF_FILE,
+ my_error->message);
}
g_clear_error (&my_error);
@@ -397,19 +472,20 @@ find_base_config (NMConfig *config, GError **error)
}
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);
+ nm_log_warn (LOGD_CORE, "Default config file %s invalid: %s\n",
+ NM_DEFAULT_SYSTEM_CONF_FILE,
+ my_error->message);
g_propagate_error (error, my_error);
return FALSE;
}
+ g_clear_error (&my_error);
/* 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);
+ nm_log_info (LOGD_CORE, "No config file found or given; using %s\n",
+ NM_DEFAULT_SYSTEM_CONF_FILE);
return TRUE;
}
@@ -441,7 +517,6 @@ nm_config_new (GError **error)
GFileInfo *info;
GPtrArray *confs;
const char *name;
- char *value;
int i;
GString *config_description;
@@ -508,20 +583,12 @@ nm_config_new (GError **error)
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);
+ if (!priv->plugins && STRLEN (CONFIG_PLUGINS_DEFAULT) > 0)
+ priv->plugins = g_strsplit (CONFIG_PLUGINS_DEFAULT, ",", -1);
- 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->monitor_connection_files = _get_bool_value (priv->keyfile, "main", "monitor-connection-files", FALSE);
+
+ priv->auth_polkit = _get_bool_value (priv->keyfile, "main", "auth-polkit", NM_CONFIG_DEFAULT_AUTH_POLKIT);
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);
@@ -545,6 +612,8 @@ nm_config_new (GError **error)
priv->ignore_carrier = g_key_file_get_string_list (priv->keyfile, "main", "ignore-carrier", NULL, NULL);
+ priv->configure_and_quit = _get_bool_value (priv->keyfile, "main", "configure-and-quit", FALSE);
+
return singleton;
}
@@ -553,6 +622,8 @@ nm_config_init (NMConfig *config)
{
NMConfigPrivate *priv = NM_CONFIG_GET_PRIVATE (config);
+ priv->auth_polkit = NM_CONFIG_DEFAULT_AUTH_POLKIT;
+
priv->keyfile = g_key_file_new ();
g_key_file_set_list_separator (priv->keyfile, ',');
diff --git a/src/config/nm-config.h b/src/nm-config.h
index 2e335c716..56f75fb5f 100644
--- a/src/config/nm-config.h
+++ b/src/nm-config.h
@@ -19,13 +19,13 @@
* Copyright (C) 2013 Thomas Bechtold <thomasbechtold@jpberlin.de>
*/
-#ifndef NM_CONFIG_H
-#define NM_CONFIG_H
+#ifndef __NETWORKMANAGER_CONFIG_H__
+#define __NETWORKMANAGER_CONFIG_H__
#include <glib.h>
#include <glib-object.h>
-#include "nm-config-device.h"
+#include "nm-types.h"
G_BEGIN_DECLS
@@ -52,19 +52,21 @@ 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);
+gboolean nm_config_get_auth_polkit (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);
+guint nm_config_get_connectivity_interval (NMConfig *config);
const char *nm_config_get_connectivity_response (NMConfig *config);
+gboolean nm_config_get_configure_and_quit (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_ethernet_can_auto_default (NMConfig *config, NMDevice *device);
+void nm_config_set_ethernet_no_auto_default (NMConfig *config, NMDevice *device);
-gboolean nm_config_get_ignore_carrier (NMConfig *config, NMConfigDevice *device);
+gboolean nm_config_get_ignore_carrier (NMConfig *config, NMDevice *device);
char *nm_config_get_value (NMConfig *config, const char *group, const char *key, GError **error);
@@ -74,5 +76,5 @@ NMConfig *nm_config_new (GError **error);
G_END_DECLS
-#endif /* NM_CONFIG_H */
+#endif /* __NETWORKMANAGER_CONFIG_H__ */
diff --git a/src/nm-connection-provider.c b/src/nm-connection-provider.c
index f6ee7454d..51caf400f 100644
--- a/src/nm-connection-provider.c
+++ b/src/nm-connection-provider.c
@@ -13,6 +13,8 @@
* Copyright (C) 2012 Red Hat, Inc.
*/
+#include "config.h"
+
#include "nm-connection-provider.h"
#include "nm-utils.h"
diff --git a/src/nm-connection-provider.h b/src/nm-connection-provider.h
index 5093d0553..8d5f7a696 100644
--- a/src/nm-connection-provider.h
+++ b/src/nm-connection-provider.h
@@ -13,19 +13,19 @@
* Copyright (C) 2012 Red Hat, Inc.
*/
-#ifndef NM_CONNECTION_PROVIDER_H
-#define NM_CONNECTION_PROVIDER_H
+#ifndef __NETWORKMANAGER_CONNECTION_PROVIDER_H__
+#define __NETWORKMANAGER_CONNECTION_PROVIDER_H__
#include <glib-object.h>
#include <nm-connection.h>
+#include "nm-types.h"
+
#define NM_TYPE_CONNECTION_PROVIDER (nm_connection_provider_get_type ())
#define NM_CONNECTION_PROVIDER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_CONNECTION_PROVIDER, NMConnectionProvider))
#define NM_IS_CONNECTION_PROVIDER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_CONNECTION_PROVIDER))
#define NM_CONNECTION_PROVIDER_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), NM_TYPE_CONNECTION_PROVIDER, NMConnectionProvider))
-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"
@@ -133,4 +133,4 @@ NMConnection *nm_connection_provider_add_connection (NMConnectionProvider *self,
NMConnection *nm_connection_provider_get_connection_by_uuid (NMConnectionProvider *self,
const char *uuid);
-#endif /* NM_CONNECTION_PROVIDER_H */
+#endif /* __NETWORKMANAGER_CONNECTION_PROVIDER_H__ */
diff --git a/src/nm-connectivity.c b/src/nm-connectivity.c
index 5c6a43f63..8a324a5c1 100644
--- a/src/nm-connectivity.c
+++ b/src/nm-connectivity.c
@@ -19,7 +19,7 @@
* Copyright (C) 2011 Dan Williams <dcbw@redhat.com>
*/
-#include <config.h>
+#include "config.h"
#include <string.h>
#if WITH_CONCHECK
@@ -382,34 +382,30 @@ nm_connectivity_class_init (NMConnectivityClass *klass)
/* properties */
g_object_class_install_property
(object_class, PROP_URI,
- g_param_spec_string (NM_CONNECTIVITY_URI,
- "URI",
- "Connectivity check URI",
+ g_param_spec_string (NM_CONNECTIVITY_URI, "", "",
NULL,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_INTERVAL,
- g_param_spec_uint (NM_CONNECTIVITY_INTERVAL,
- "Interval",
- "Connectivity check interval in seconds",
+ g_param_spec_uint (NM_CONNECTIVITY_INTERVAL, "", "",
0, G_MAXUINT, 300,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_RESPONSE,
- g_param_spec_string (NM_CONNECTIVITY_RESPONSE,
- "Response",
- "Expected connectivity check reponse",
+ g_param_spec_string (NM_CONNECTIVITY_RESPONSE, "", "",
DEFAULT_RESPONSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_STATE,
- g_param_spec_uint (NM_CONNECTIVITY_STATE,
- "State",
- "Connectivity state",
+ g_param_spec_uint (NM_CONNECTIVITY_STATE, "", "",
NM_CONNECTIVITY_UNKNOWN, NM_CONNECTIVITY_FULL, NM_CONNECTIVITY_UNKNOWN,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
}
diff --git a/src/nm-connectivity.h b/src/nm-connectivity.h
index 04d0f2a30..771abdc23 100644
--- a/src/nm-connectivity.h
+++ b/src/nm-connectivity.h
@@ -18,14 +18,15 @@
* Copyright (C) 2011 Thomas Bechtold <thomasbechtold@jpberlin.de>
*/
-#ifndef NM_CONNECTIVITY_H
-#define NM_CONNECTIVITY_H
+#ifndef __NETWORKMANAGER_CONNECTIVITY_H__
+#define __NETWORKMANAGER_CONNECTIVITY_H__
#include <glib.h>
#include <glib-object.h>
#include <gio/gio.h>
-#include "NetworkManager.h"
+#include "nm-dbus-interface.h"
+#include "nm-types.h"
#define NM_TYPE_CONNECTIVITY (nm_connectivity_get_type ())
#define NM_CONNECTIVITY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_CONNECTIVITY, NMConnectivity))
@@ -40,9 +41,9 @@
#define NM_CONNECTIVITY_RESPONSE "response"
#define NM_CONNECTIVITY_STATE "state"
-typedef struct {
+struct _NMConnectivity {
GObject parent;
-} NMConnectivity;
+};
typedef struct {
GObjectClass parent;
@@ -64,4 +65,4 @@ NMConnectivityState nm_connectivity_check_finish (NMConnectivity *self,
GAsyncResult *result,
GError **error);
-#endif /* NM_CONNECTIVITY_H */
+#endif /* __NETWORKMANAGER_CONNECTIVITY_H__ */
diff --git a/src/nm-dbus-manager.c b/src/nm-dbus-manager.c
index f9269b615..1cceb9b51 100644
--- a/src/nm-dbus-manager.c
+++ b/src/nm-dbus-manager.c
@@ -20,12 +20,13 @@
*/
#include "config.h"
+
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <errno.h>
-#include "NetworkManager.h"
+#include "nm-dbus-interface.h"
#include "nm-dbus-manager.h"
#include "nm-glib-compat.h"
#include "nm-properties-changed-signal.h"
@@ -96,7 +97,7 @@ nm_dbus_manager_get (void)
/**************************************************************/
struct _PrivateServer {
- char *tag;
+ const char *tag;
GQuark detail;
char *address;
DBusServer *server;
@@ -110,11 +111,12 @@ private_server_message_filter (DBusConnection *conn,
void *data)
{
PrivateServer *s = data;
+ int fd;
/* 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);
+ nm_log_dbg (LOGD_CORE, "(%s) closed connection %p on private socket (fd %d).",
+ s->tag, conn, dbus_connection_get_unix_fd (conn, &fd) ? fd : -1);
/* Emit this for the manager */
g_signal_emit (s->manager,
@@ -145,6 +147,7 @@ private_server_new_connection (DBusServer *server,
PrivateServer *s = user_data;
static guint32 counter = 0;
char *sender;
+ int fd;
if (!dbus_connection_add_filter (conn, private_server_message_filter, s, NULL)) {
dbus_connection_close (conn);
@@ -157,7 +160,8 @@ private_server_new_connection (DBusServer *server,
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);
+ nm_log_dbg (LOGD_CORE, "(%s) accepted connection %p on private socket (fd %d).",
+ s->tag, conn, dbus_connection_get_unix_fd (conn, &fd) ? fd : -1);
/* Emit this for the manager */
g_signal_emit (s->manager,
@@ -208,8 +212,8 @@ private_server_new (const char *path,
(GDestroyNotify) private_server_dbus_connection_destroy,
g_free);
s->manager = manager;
- s->tag = g_strdup (tag);
- s->detail = g_quark_from_string (s->tag);
+ s->detail = g_quark_from_string (tag);
+ s->tag = g_quark_to_string (s->detail);
return s;
}
@@ -221,7 +225,6 @@ private_server_free (gpointer 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));
@@ -448,8 +451,8 @@ private_connection_new (NMDBusManager *self, DBusGConnection *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);
+ nm_log_trace (LOGD_CORE, "(%s) registered %p (%s) at '%s' on private socket.",
+ PRIV_SOCK_TAG, object, G_OBJECT_TYPE_NAME (object), path);
}
}
diff --git a/src/nm-dbus-manager.h b/src/nm-dbus-manager.h
index 7895a2037..cc7f3210f 100644
--- a/src/nm-dbus-manager.h
+++ b/src/nm-dbus-manager.h
@@ -27,6 +27,8 @@
#include <dbus/dbus.h>
#include <dbus/dbus-glib.h>
+#include "nm-types.h"
+
G_BEGIN_DECLS
typedef gboolean (* NMDBusSignalHandlerFunc) (DBusConnection * connection,
@@ -45,9 +47,9 @@ typedef gboolean (* NMDBusSignalHandlerFunc) (DBusConnection * connection,
#define NM_DBUS_MANAGER_PRIVATE_CONNECTION_NEW "private-connection-new"
#define NM_DBUS_MANAGER_PRIVATE_CONNECTION_DISCONNECTED "private-connection-disconnected"
-typedef struct {
+struct _NMDBusManager {
GObject parent;
-} NMDBusManager;
+};
typedef struct {
GObjectClass parent;
diff --git a/src/nm-dcb.c b/src/nm-dcb.c
index 3bdbf7d5e..6faec5c53 100644
--- a/src/nm-dcb.c
+++ b/src/nm-dcb.c
@@ -18,7 +18,8 @@
* Copyright (C) 2013 Red Hat, Inc.
*/
-#include <config.h>
+#include "config.h"
+
#include <sys/wait.h>
#include <string.h>
@@ -29,16 +30,6 @@
#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
@@ -63,7 +54,7 @@ do_helper (const char *iface,
split = g_strsplit_set (cmdline, " ", 0);
if (!split) {
- g_set_error (error, NM_DCB_ERROR, NM_DCB_ERROR_INTERNAL,
+ g_set_error (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_FAILED,
"failure parsing %s command line", helper_names[which]);
goto out;
}
@@ -296,47 +287,20 @@ _fcoe_cleanup (const char *iface,
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 };
+ const char *helper_path;
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;
- }
- }
+ helper_path = nm_utils_find_helper ((which == DCBTOOL) ? "dcbtool" : "fcoeadm", NULL, error);
+ if (!helper_path)
+ return FALSE;
- argv[0] = (char *) helper_path[which];
+ argv[0] = (char *) helper_path;
cmdline = g_strjoinv (" ", argv);
nm_log_dbg (LOGD_DCB, "%s", cmdline);
@@ -354,14 +318,14 @@ run_helper (char **argv, guint which, gpointer user_data, GError **error)
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,
+ g_set_error (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_FAILED,
"Failed to run '%s'", cmdline);
success = FALSE;
}
}
+
g_free (outmsg);
g_free (errmsg);
-
g_free (cmdline);
return success;
}
diff --git a/src/nm-dcb.h b/src/nm-dcb.h
index bfe5cedff..e409dd483 100644
--- a/src/nm-dcb.h
+++ b/src/nm-dcb.h
@@ -18,36 +18,12 @@
* Copyright (C) 2013 Red Hat, Inc.
*/
-#ifndef NM_DCB_H
-#define NM_DCB_H
+#ifndef __NETWORKMANAGER_DCB_H__
+#define __NETWORKMANAGER_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);
@@ -97,4 +73,4 @@ gboolean _fcoe_cleanup (const char *iface,
gpointer user_data,
GError **error);
-#endif /* NM_DCB_H */
+#endif /* __NETWORKMANAGER_DCB_H__ */
diff --git a/src/nm-default-route-manager.c b/src/nm-default-route-manager.c
new file mode 100644
index 000000000..5cc1bcd2b
--- /dev/null
+++ b/src/nm-default-route-manager.c
@@ -0,0 +1,1365 @@
+/* -*- 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 "config.h"
+
+#include "nm-default-route-manager.h"
+
+#include "string.h"
+
+#include "nm-logging.h"
+#include "nm-device.h"
+#include "nm-vpn-connection.h"
+#include "nm-platform.h"
+#include "nm-manager.h"
+#include "nm-ip4-config.h"
+#include "nm-ip6-config.h"
+#include "nm-activation-request.h"
+
+typedef struct {
+ GPtrArray *entries_ip4;
+ GPtrArray *entries_ip6;
+ struct {
+ guint guard;
+ guint backoff_wait_time_ms;
+ guint idle_handle;
+ gboolean has_v4_changes;
+ gboolean has_v6_changes;
+ } resync;
+} NMDefaultRouteManagerPrivate;
+
+#define NM_DEFAULT_ROUTE_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEFAULT_ROUTE_MANAGER, NMDefaultRouteManagerPrivate))
+
+G_DEFINE_TYPE (NMDefaultRouteManager, nm_default_route_manager, G_TYPE_OBJECT)
+
+static NMDefaultRouteManager *_instance;
+
+#define _LOG(level, addr_family, ...) \
+ G_STMT_START { \
+ int __addr_family = (addr_family); \
+ guint64 __domain = __addr_family == AF_INET ? LOGD_IP4 : LOGD_IP6; \
+ \
+ if (nm_logging_enabled ((level), (__domain))) { \
+ char __ch = __addr_family == AF_INET ? '4' : (__addr_family == AF_INET6 ? '6' : '-'); \
+ char __prefix[30] = "default-route"; \
+ \
+ if ((self) != _instance) \
+ g_snprintf (__prefix, sizeof (__prefix), "default-route%c[%p]", __ch, (self)); \
+ else \
+ __prefix[STRLEN ("default-route")] = __ch; \
+ nm_log ((level), (__domain), \
+ "%s: " _NM_UTILS_MACRO_FIRST(__VA_ARGS__), \
+ __prefix _NM_UTILS_MACRO_REST(__VA_ARGS__)); \
+ } \
+ } G_STMT_END
+
+#define _LOGD(addr_family, ...) _LOG (LOGL_DEBUG, addr_family, __VA_ARGS__)
+#define _LOGI(addr_family, ...) _LOG (LOGL_INFO , addr_family, __VA_ARGS__)
+#define _LOGW(addr_family, ...) _LOG (LOGL_WARN , addr_family, __VA_ARGS__)
+#define _LOGE(addr_family, ...) _LOG (LOGL_ERR , addr_family, __VA_ARGS__)
+
+#define LOG_ENTRY_FMT "entry[%u/%s:%p:%s:%c%c]"
+#define LOG_ENTRY_ARGS(entry_idx, entry) \
+ (entry_idx), \
+ NM_IS_DEVICE ((entry)->source.pointer) ? "dev" : "vpn", \
+ (entry)->source.pointer, \
+ NM_IS_DEVICE ((entry)->source.pointer) ? nm_device_get_iface ((entry)->source.device) : nm_vpn_connection_get_connection_id ((entry)->source.vpn), \
+ ((entry)->never_default ? 'N' : 'n'), \
+ ((entry)->synced ? 'S' : 's')
+
+/***********************************************************************************/
+
+static void _resync_idle_cancel (NMDefaultRouteManager *self);
+
+/***********************************************************************************/
+
+typedef struct {
+ union {
+ void *pointer;
+ GObject *object;
+ NMDevice *device;
+ NMVpnConnection *vpn;
+ } source;
+ NMPlatformIPXRoute route;
+
+ /* Whether the route is synced to platform and has a default route.
+ *
+ * ( synced && !never_default): the interface gets a default route that
+ * is enforced and managed by NMDefaultRouteManager.
+ *
+ * (!synced && !never_default): the interface has this route, but it is assumed.
+ * Assumed interfaces are those that have no tracked entry or that only have
+ * (!synced && !never_default) entries. NMDefaultRouteManager will not touch
+ * default routes on these interfaces.
+ * This combination makes only sense for device sources.
+ * They are tracked so that assumed devices can also be the best device.
+ *
+ * ( synced && never_default): entries of this kind are a placeholder
+ * to indicate that the ifindex is managed but has no default-route.
+ * Missing entries also indicate that a certain ifindex has no default-route.
+ * The difference is that missing entries are considered assumed while on
+ * (synced && never_default) entires the absence of the default route
+ * is enforced. NMDefaultRouteManager will actively remove any default
+ * route on such ifindexes.
+ * Also, for VPN sources in addition we track them so that a never-default
+ * VPN connection can be choosen by get_best_config() to receive the DNS configuration.
+ *
+ * (!synced && never_default): this combination makes no sense.
+ */
+ gboolean synced;
+ gboolean never_default;
+
+ guint32 effective_metric;
+} Entry;
+
+typedef struct {
+ int addr_family;
+ GPtrArray *(*get_entries) (NMDefaultRouteManagerPrivate *priv);
+ const char *(*platform_route_to_string) (const NMPlatformIPRoute *route);
+ GArray *(*platform_route_get_all) (int ifindex, NMPlatformGetRouteMode mode);
+ gboolean (*platform_route_delete_default) (int ifindex, guint32 metric);
+ guint32 (*route_metric_normalize) (guint32 metric);
+} VTableIP;
+
+static const VTableIP vtable_ip4, vtable_ip6;
+
+#define VTABLE_IS_IP4 (vtable->addr_family == AF_INET)
+
+static NMPlatformIPRoute *
+_vt_route_index (const VTableIP *vtable, GArray *routes, guint index)
+{
+ if (VTABLE_IS_IP4)
+ return (NMPlatformIPRoute *) &g_array_index (routes, NMPlatformIP4Route, index);
+ else
+ return (NMPlatformIPRoute *) &g_array_index (routes, NMPlatformIP6Route, index);
+}
+
+static gboolean
+_vt_routes_has_entry (const VTableIP *vtable, GArray *routes, const Entry *entry)
+{
+ guint i;
+ NMPlatformIPXRoute route = entry->route;
+
+ route.rx.metric = entry->effective_metric;
+
+ if (VTABLE_IS_IP4) {
+ for (i = 0; i < routes->len; i++) {
+ NMPlatformIP4Route *r = &g_array_index (routes, NMPlatformIP4Route, i);
+
+ route.rx.source = r->source;
+ if (nm_platform_ip4_route_cmp (r, &route.r4) == 0)
+ return TRUE;
+ }
+ } else {
+ for (i = 0; i < routes->len; i++) {
+ NMPlatformIP6Route *r = &g_array_index (routes, NMPlatformIP6Route, i);
+
+ route.rx.source = r->source;
+ if (nm_platform_ip6_route_cmp (r, &route.r6) == 0)
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+static void
+_entry_free (Entry *entry)
+{
+ if (entry) {
+ g_object_unref (entry->source.object);
+ g_slice_free (Entry, entry);
+ }
+}
+
+static Entry *
+_entry_find_by_source (GPtrArray *entries, gpointer source, guint *out_idx)
+{
+ guint i;
+
+ for (i = 0; i < entries->len; i++) {
+ Entry *e = g_ptr_array_index (entries, i);
+
+ if (e->source.pointer == source) {
+ if (out_idx)
+ *out_idx = i;
+ return e;
+ }
+ }
+
+ if (out_idx)
+ *out_idx = G_MAXUINT;
+ return NULL;
+}
+
+static gboolean
+_platform_route_sync_add (const VTableIP *vtable, NMDefaultRouteManager *self, guint32 metric)
+{
+ NMDefaultRouteManagerPrivate *priv = NM_DEFAULT_ROUTE_MANAGER_GET_PRIVATE (self);
+ GPtrArray *entries = vtable->get_entries (priv);
+ guint i;
+ Entry *entry_unsynced = NULL;
+ Entry *entry = NULL;
+ gboolean success;
+
+ /* Find the entries for the given metric.
+ * The effective metric for synced entries is choosen in a way that it
+ * is unique (except for G_MAXUINT32, where a clash is not solvable). */
+ for (i = 0; i < entries->len; i++) {
+ Entry *e = g_ptr_array_index (entries, i);
+
+ if (e->never_default)
+ continue;
+
+ if (e->effective_metric != metric)
+ continue;
+
+ if (e->synced) {
+ g_assert (!entry || metric == G_MAXUINT32);
+ if (!entry)
+ entry = e;
+ } else
+ entry_unsynced = e;
+ }
+
+ /* We don't expect to have an unsynced *and* a synced entry for the same metric.
+ * Unless, (a) their metric is G_MAXUINT32, in which case we could not find an unused effective metric,
+ * or (b) if we have an unsynced and a synced entry for the same ifindex.
+ * The latter case happens for example when activating an openvpn connection (synced) and
+ * assuming the corresponding tun0 interface (unsynced). */
+ g_assert (!entry || !entry_unsynced || (entry->route.rx.ifindex == entry_unsynced->route.rx.ifindex) || metric == G_MAXUINT32);
+
+ /* we only add the route, if we have an (to be synced) entry for it. */
+ if (!entry)
+ return FALSE;
+
+ if (VTABLE_IS_IP4) {
+ success = nm_platform_ip4_route_add (entry->route.rx.ifindex,
+ entry->route.rx.source,
+ 0,
+ 0,
+ entry->route.r4.gateway,
+ 0,
+ entry->effective_metric,
+ entry->route.rx.mss);
+ } else {
+ success = nm_platform_ip6_route_add (entry->route.rx.ifindex,
+ entry->route.rx.source,
+ in6addr_any,
+ 0,
+ entry->route.r6.gateway,
+ entry->effective_metric,
+ entry->route.rx.mss);
+ }
+ if (!success) {
+ _LOGW (vtable->addr_family, "failed to add default route %s with effective metric %u",
+ vtable->platform_route_to_string (&entry->route.rx), (guint) entry->effective_metric);
+ }
+ return TRUE;
+}
+
+static gboolean
+_platform_route_sync_flush (const VTableIP *vtable, NMDefaultRouteManager *self, int ifindex_to_flush)
+{
+ NMDefaultRouteManagerPrivate *priv = NM_DEFAULT_ROUTE_MANAGER_GET_PRIVATE (self);
+ GPtrArray *entries = vtable->get_entries (priv);
+ GArray *routes;
+ guint i, j;
+ gboolean changed = FALSE;
+
+ /* prune all other default routes from this device. */
+ routes = vtable->platform_route_get_all (0, NM_PLATFORM_GET_ROUTE_MODE_ONLY_DEFAULT);
+
+ for (i = 0; i < routes->len; i++) {
+ const NMPlatformIPRoute *route;
+ gboolean has_ifindex_synced = FALSE;
+ Entry *entry = NULL;
+
+ route = _vt_route_index (vtable, routes, i);
+
+ /* look at all entires and see if the route for this ifindex pair is
+ * a known entry. */
+ for (j = 0; j < entries->len; j++) {
+ Entry *e = g_ptr_array_index (entries, j);
+
+ if ( e->route.rx.ifindex == route->ifindex
+ && e->synced) {
+ has_ifindex_synced = TRUE;
+ if ( !e->never_default
+ && e->effective_metric == route->metric)
+ entry = e;
+ }
+ }
+
+ /* we only delete the route if we don't have a matching entry,
+ * and there is at least one entry that references this ifindex
+ * (indicating that the ifindex is managed by us -- not assumed).
+ *
+ * Otherwise, don't delete the route because it's configured
+ * externally (and will be assumed -- or already is assumed).
+ */
+ if ( !entry
+ && (has_ifindex_synced || ifindex_to_flush == route->ifindex)) {
+ vtable->platform_route_delete_default (route->ifindex, route->metric);
+ changed = TRUE;
+ }
+ }
+ g_array_free (routes, TRUE);
+ return changed;
+}
+
+static int
+_sort_entries_cmp (gconstpointer a, gconstpointer b, gpointer user_data)
+{
+ guint32 m_a, m_b;
+ const Entry *e_a = *((const Entry **) a);
+ const Entry *e_b = *((const Entry **) b);
+
+ /* when comparing routes, we consider the (original) metric. */
+ m_a = e_a->route.rx.metric;
+ m_b = e_b->route.rx.metric;
+
+ /* we normalize route.metric already in _ipx_update_default_route().
+ * so we can just compare the metrics numerically */
+
+ if (m_a != m_b)
+ return (m_a < m_b) ? -1 : 1;
+
+ /* If the metrics are equal, we prefer the one that is !never_default */
+ if (!!e_a->never_default != !!e_b->never_default)
+ return e_a->never_default ? 1 : -1;
+
+ /* If the metrics are equal, we prefer the one that is assumed (!synced).
+ * Entries that we sync, can be modified so that only the best
+ * entry has a (deterministically) lowest metric.
+ * With assumed devices we cannot increase/change the metric.
+ * For example: two devices, both metric 0. One is assumed the other is
+ * synced.
+ * If we would choose the synced entry as best, we cannot
+ * increase the metric of the assumed one and we would have non-determinism.
+ * If we instead prefer the assumed device, we can increase the metric
+ * of the synced device and the assumed device is (deterministically)
+ * prefered.
+ * If both devices are assumed, we also have non-determinism, but also
+ * we don't reorder either.
+ */
+ if (!!e_a->synced != !!e_b->synced)
+ return e_a->synced ? 1 : -1;
+
+ /* otherwise, do not reorder */
+ return 0;
+}
+
+static GHashTable *
+_get_assumed_interface_metrics (const VTableIP *vtable, NMDefaultRouteManager *self, GArray *routes)
+{
+ NMDefaultRouteManagerPrivate *priv = NM_DEFAULT_ROUTE_MANAGER_GET_PRIVATE (self);
+ GPtrArray *entries;
+ guint i, j;
+ GHashTable *result;
+
+ /* create a list of all metrics that are currently assigned on an interface
+ * that is *not* already covered by one of our synced entries.
+ * IOW, returns the metrics that are in use by assumed interfaces
+ * that we want to preserve. */
+
+ entries = vtable->get_entries (priv);
+
+ result = g_hash_table_new (NULL, NULL);
+
+ for (i = 0; i < routes->len; i++) {
+ gboolean ifindex_has_synced_entry = FALSE;
+ const NMPlatformIPRoute *route;
+
+ route = _vt_route_index (vtable, routes, i);
+
+ for (j = 0; j < entries->len; j++) {
+ Entry *e = g_ptr_array_index (entries, j);
+
+ if ( e->synced
+ && e->route.rx.ifindex == route->ifindex) {
+ ifindex_has_synced_entry = TRUE;
+ break;
+ }
+ }
+
+ if (!ifindex_has_synced_entry)
+ g_hash_table_add (result, GUINT_TO_POINTER (vtable->route_metric_normalize (route->metric)));
+ }
+
+ return result;
+}
+
+static int
+_sort_metrics_ascending_fcn (gconstpointer a, gconstpointer b)
+{
+ guint32 m_a = *((guint32 *) a);
+ guint32 m_b = *((guint32 *) b);
+
+ if (m_a < m_b)
+ return -1;
+ return m_a == m_b ? 0 : 1;
+}
+
+static gboolean
+_resync_all (const VTableIP *vtable, NMDefaultRouteManager *self, const Entry *changed_entry, const Entry *old_entry, gboolean external_change)
+{
+ NMDefaultRouteManagerPrivate *priv = NM_DEFAULT_ROUTE_MANAGER_GET_PRIVATE (self);
+ Entry *entry;
+ guint i, j;
+ gint64 last_metric = -1;
+ guint32 expected_metric;
+ GPtrArray *entries;
+ GArray *changed_metrics = g_array_new (FALSE, FALSE, sizeof (guint32));
+ GHashTable *assumed_metrics;
+ GArray *routes;
+ gboolean changed = FALSE;
+ int ifindex_to_flush = 0;
+
+ g_assert (priv->resync.guard == 0);
+ priv->resync.guard++;
+
+ if (!external_change) {
+ if (VTABLE_IS_IP4)
+ priv->resync.has_v4_changes = FALSE;
+ else
+ priv->resync.has_v6_changes = FALSE;
+ if (!priv->resync.has_v4_changes && !priv->resync.has_v6_changes)
+ _resync_idle_cancel (self);
+ }
+
+ entries = vtable->get_entries (priv);
+
+ routes = vtable->platform_route_get_all (0, NM_PLATFORM_GET_ROUTE_MODE_ONLY_DEFAULT);
+
+ assumed_metrics = _get_assumed_interface_metrics (vtable, self, routes);
+
+ if (old_entry && old_entry->synced && !old_entry->never_default) {
+ /* The old version obviously changed. */
+ g_array_append_val (changed_metrics, old_entry->effective_metric);
+ }
+
+ /* first iterate over all entries and adjust the effective metrics. */
+ for (i = 0; i < entries->len; i++) {
+ entry = g_ptr_array_index (entries, i);
+
+ g_assert (entry != old_entry);
+
+ if (entry->never_default)
+ continue;
+
+ if (!entry->synced) {
+ gboolean has_synced_entry = FALSE;
+
+ /* A non synced entry is completely ignored, if we have
+ * a synced entry for the same if index.
+ * Otherwise the metric of the entry is still remembered as
+ * last_metric to avoid reusing it. */
+ for (j = 0; j < entries->len; j++) {
+ const Entry *e = g_ptr_array_index (entries, j);
+
+ if ( e->synced
+ && e->route.rx.ifindex == entry->route.rx.ifindex) {
+ has_synced_entry = TRUE;
+ break;
+ }
+ }
+ if (!has_synced_entry)
+ last_metric = MAX (last_metric, (gint64) entry->effective_metric);
+ continue;
+ }
+
+ expected_metric = entry->route.rx.metric;
+ if ((gint64) expected_metric <= last_metric)
+ expected_metric = last_metric == G_MAXUINT32 ? G_MAXUINT32 : last_metric + 1;
+
+ while ( expected_metric < G_MAXUINT32
+ && g_hash_table_contains (assumed_metrics, GUINT_TO_POINTER (expected_metric))) {
+ gboolean has_metric_for_ifindex = FALSE;
+
+ /* Check if there are assumed devices that have default routes with this metric.
+ * If there are any, we have to pick another effective_metric. */
+
+ /* However, if there is a matching route (ifindex+metric) for our current entry, we are done. */
+ for (j = 0; j < routes->len; j++) {
+ const NMPlatformIPRoute *r = _vt_route_index (vtable, routes, i);
+
+ if ( r->metric == expected_metric
+ && r->ifindex == entry->route.rx.ifindex) {
+ has_metric_for_ifindex = TRUE;
+ break;
+ }
+ }
+ if (has_metric_for_ifindex)
+ break;
+ expected_metric++;
+ }
+
+ if (changed_entry == entry) {
+ /* for the changed entry, the previous metric was either old_entry->effective_metric,
+ * or none. Hence, we only have to remember what is going to change. */
+ g_array_append_val (changed_metrics, expected_metric);
+ if (old_entry) {
+ _LOGD (vtable->addr_family, LOG_ENTRY_FMT": update %s (%u -> %u)", LOG_ENTRY_ARGS (i, entry),
+ vtable->platform_route_to_string (&entry->route.rx), (guint) old_entry->effective_metric,
+ (guint) expected_metric);
+ } else {
+ _LOGD (vtable->addr_family, LOG_ENTRY_FMT": add %s (%u)", LOG_ENTRY_ARGS (i, entry),
+ vtable->platform_route_to_string (&entry->route.rx), (guint) expected_metric);
+ }
+ } else if (entry->effective_metric != expected_metric) {
+ g_array_append_val (changed_metrics, entry->effective_metric);
+ g_array_append_val (changed_metrics, expected_metric);
+ _LOGD (vtable->addr_family, LOG_ENTRY_FMT": resync metric %s (%u -> %u)", LOG_ENTRY_ARGS (i, entry),
+ vtable->platform_route_to_string (&entry->route.rx), (guint) entry->effective_metric,
+ (guint) expected_metric);
+ } else {
+ if (!_vt_routes_has_entry (vtable, routes, entry)) {
+ g_array_append_val (changed_metrics, entry->effective_metric);
+ _LOGD (vtable->addr_family, LOG_ENTRY_FMT": readd route %s (%u -> %u)", LOG_ENTRY_ARGS (i, entry),
+ vtable->platform_route_to_string (&entry->route.rx), (guint) entry->effective_metric,
+ (guint) entry->effective_metric);
+ }
+ }
+
+ if (entry->effective_metric != expected_metric) {
+ entry->effective_metric = expected_metric;
+ changed = TRUE;
+ }
+ last_metric = expected_metric;
+ }
+
+ g_array_free (routes, TRUE);
+
+ g_array_sort (changed_metrics, _sort_metrics_ascending_fcn);
+ last_metric = -1;
+ for (j = 0; j < changed_metrics->len; j++) {
+ expected_metric = g_array_index (changed_metrics, guint32, j);
+
+ if (last_metric == (gint64) expected_metric) {
+ /* skip duplicates. */
+ continue;
+ }
+ changed |= _platform_route_sync_add (vtable, self, expected_metric);
+ last_metric = expected_metric;
+ }
+
+ if ( old_entry
+ && !changed_entry
+ && old_entry->synced
+ && !old_entry->never_default) {
+ /* If we entriely remove an entry that was synced before, we must make
+ * sure to flush routes for this ifindex too. Otherwise they linger
+ * around as "assumed" routes */
+ ifindex_to_flush = old_entry->route.rx.ifindex;
+ }
+
+ changed |= _platform_route_sync_flush (vtable, self, ifindex_to_flush);
+
+ g_array_free (changed_metrics, TRUE);
+ g_hash_table_unref (assumed_metrics);
+
+ priv->resync.guard--;
+ return changed;
+}
+
+static void
+_entry_at_idx_update (const VTableIP *vtable, NMDefaultRouteManager *self, guint entry_idx, const Entry *old_entry)
+{
+ NMDefaultRouteManagerPrivate *priv = NM_DEFAULT_ROUTE_MANAGER_GET_PRIVATE (self);
+ Entry *entry;
+ GPtrArray *entries;
+
+ entries = vtable->get_entries (priv);
+ g_assert (entry_idx < entries->len);
+
+ entry = g_ptr_array_index (entries, entry_idx);
+
+ g_assert ( !old_entry
+ || (entry->source.pointer == old_entry->source.pointer && entry->route.rx.ifindex == old_entry->route.rx.ifindex));
+
+ if (!entry->synced && !entry->never_default)
+ entry->effective_metric = entry->route.rx.metric;
+
+ _LOGD (vtable->addr_family, LOG_ENTRY_FMT": %s %s",
+ LOG_ENTRY_ARGS (entry_idx, entry),
+ old_entry ? "update" : "add",
+ vtable->platform_route_to_string (&entry->route.rx));
+
+ g_ptr_array_sort_with_data (entries, _sort_entries_cmp, NULL);
+
+ _resync_all (vtable, self, entry, old_entry, FALSE);
+}
+
+static void
+_entry_at_idx_remove (const VTableIP *vtable, NMDefaultRouteManager *self, guint entry_idx)
+{
+ NMDefaultRouteManagerPrivate *priv = NM_DEFAULT_ROUTE_MANAGER_GET_PRIVATE (self);
+ Entry *entry;
+ GPtrArray *entries;
+
+ entries = vtable->get_entries (priv);
+
+ g_assert (entry_idx < entries->len);
+
+ entry = g_ptr_array_index (entries, entry_idx);
+
+ _LOGD (vtable->addr_family, LOG_ENTRY_FMT": remove %s (%u)", LOG_ENTRY_ARGS (entry_idx, entry),
+ vtable->platform_route_to_string (&entry->route.rx), (guint) entry->effective_metric);
+
+ /* Remove the entry from the list (but don't free it yet) */
+ g_ptr_array_index (entries, entry_idx) = NULL;
+ g_ptr_array_remove_index (entries, entry_idx);
+
+ _resync_all (vtable, self, NULL, entry, FALSE);
+
+ _entry_free (entry);
+}
+
+/***********************************************************************************/
+
+static void
+_ipx_update_default_route (const VTableIP *vtable, NMDefaultRouteManager *self, gpointer source)
+{
+ NMDefaultRouteManagerPrivate *priv;
+ Entry *entry;
+ guint entry_idx;
+ const NMPlatformIPRoute *default_route = NULL;
+ NMPlatformIPXRoute rt;
+ int ip_ifindex;
+ GPtrArray *entries;
+ NMDevice *device = NULL;
+ NMVpnConnection *vpn = NULL;
+ gboolean never_default = FALSE;
+ gboolean synced = FALSE;
+
+ g_return_if_fail (NM_IS_DEFAULT_ROUTE_MANAGER (self));
+ if (NM_IS_DEVICE (source))
+ device = source;
+ else if (NM_IS_VPN_CONNECTION (source))
+ vpn = source;
+ else
+ g_return_if_reached ();
+
+ if (device)
+ ip_ifindex = nm_device_get_ip_ifindex (device);
+ else {
+ ip_ifindex = nm_vpn_connection_get_ip_ifindex (vpn);
+
+ if (ip_ifindex <= 0) {
+ NMDevice *parent = nm_active_connection_get_device (NM_ACTIVE_CONNECTION (vpn));
+
+ if (parent)
+ ip_ifindex = nm_device_get_ip_ifindex (parent);
+ }
+ }
+
+ priv = NM_DEFAULT_ROUTE_MANAGER_GET_PRIVATE (self);
+
+ entries = vtable->get_entries (priv);
+ entry = _entry_find_by_source (entries, source, &entry_idx);
+
+ if ( entry
+ && entry->route.rx.ifindex != ip_ifindex) {
+ /* Strange... the ifindex changed... Remove the device and start again. */
+ _LOGD (vtable->addr_family, "ifindex of "LOG_ENTRY_FMT" changed: %d -> %d",
+ LOG_ENTRY_ARGS (entry_idx, entry),
+ entry->route.rx.ifindex, ip_ifindex);
+
+ g_object_freeze_notify (G_OBJECT (self));
+ _entry_at_idx_remove (vtable, self, entry_idx);
+ g_assert (!_entry_find_by_source (entries, source, NULL));
+ _ipx_update_default_route (vtable, self, source);
+ g_object_thaw_notify (G_OBJECT (self));
+ return;
+ }
+
+ /* get the @default_route from the device. */
+ if (ip_ifindex > 0) {
+ if (device) {
+ gboolean is_assumed;
+
+ if (VTABLE_IS_IP4)
+ default_route = (const NMPlatformIPRoute *) nm_device_get_ip4_default_route (device, &is_assumed);
+ else
+ default_route = (const NMPlatformIPRoute *) nm_device_get_ip6_default_route (device, &is_assumed);
+ if (!default_route && !is_assumed) {
+ /* the device has no default route, but it is not assumed. That means, NMDefaultRouteManager
+ * enforces that the device has no default route.
+ *
+ * Hence we have to keep track of this entry, otherwise a missing entry tells us
+ * that the interface is assumed and NM would not remove the default routes on
+ * the device. */
+ memset (&rt, 0, sizeof (rt));
+ rt.rx.ifindex = ip_ifindex;
+ rt.rx.source = NM_IP_CONFIG_SOURCE_UNKNOWN;
+ rt.rx.metric = G_MAXUINT32;
+ default_route = &rt.rx;
+
+ never_default = TRUE;
+ synced = TRUE;
+ } else
+ synced = default_route && !is_assumed;
+ } else {
+ NMConnection *connection = nm_active_connection_get_connection ((NMActiveConnection *) vpn);
+
+ if ( connection
+ && nm_vpn_connection_get_vpn_state (vpn) == NM_VPN_CONNECTION_STATE_ACTIVATED) {
+
+ memset (&rt, 0, sizeof (rt));
+ if (VTABLE_IS_IP4) {
+ NMIP4Config *vpn_config;
+
+ vpn_config = nm_vpn_connection_get_ip4_config (vpn);
+ if (vpn_config) {
+ never_default = nm_ip4_config_get_never_default (vpn_config);
+ rt.r4.ifindex = ip_ifindex;
+ rt.r4.source = NM_IP_CONFIG_SOURCE_VPN;
+ rt.r4.gateway = nm_vpn_connection_get_ip4_internal_gateway (vpn);
+ rt.r4.metric = nm_vpn_connection_get_ip4_route_metric (vpn);
+ rt.r4.mss = nm_ip4_config_get_mss (vpn_config);
+ default_route = &rt.rx;
+ }
+ } else {
+ NMIP6Config *vpn_config;
+
+ vpn_config = nm_vpn_connection_get_ip6_config (vpn);
+ if (vpn_config) {
+ const struct in6_addr *int_gw = nm_vpn_connection_get_ip6_internal_gateway (vpn);
+
+ never_default = nm_ip6_config_get_never_default (vpn_config);
+ rt.r6.ifindex = ip_ifindex;
+ rt.r6.source = NM_IP_CONFIG_SOURCE_VPN;
+ rt.r6.gateway = int_gw ? *int_gw : in6addr_any;
+ rt.r6.metric = nm_vpn_connection_get_ip6_route_metric (vpn);
+ rt.r6.mss = nm_ip6_config_get_mss (vpn_config);
+ default_route = &rt.rx;
+ }
+ }
+ }
+ synced = TRUE;
+ }
+ }
+ g_assert (!default_route || default_route->plen == 0);
+
+ if (!entry && !default_route)
+ /* nothing to do */;
+ else if (!entry) {
+ /* add */
+ entry = g_slice_new0 (Entry);
+ entry->source.object = g_object_ref (source);
+
+ if (VTABLE_IS_IP4)
+ entry->route.r4 = *((const NMPlatformIP4Route *) default_route);
+ else
+ entry->route.r6 = *((const NMPlatformIP6Route *) default_route);
+
+ /* only use normalized metrics */
+ entry->route.rx.metric = vtable->route_metric_normalize (entry->route.rx.metric);
+ entry->route.rx.ifindex = ip_ifindex;
+ entry->never_default = never_default;
+ entry->effective_metric = entry->route.rx.metric;
+ entry->synced = synced;
+
+ g_ptr_array_add (entries, entry);
+ _entry_at_idx_update (vtable, self, entries->len - 1, NULL);
+ } else if (default_route) {
+ /* update */
+ Entry old_entry, new_entry;
+
+ new_entry = *entry;
+ if (VTABLE_IS_IP4)
+ new_entry.route.r4 = *((const NMPlatformIP4Route *) default_route);
+ else
+ new_entry.route.r6 = *((const NMPlatformIP6Route *) default_route);
+ /* only use normalized metrics */
+ new_entry.route.rx.metric = vtable->route_metric_normalize (new_entry.route.rx.metric);
+ new_entry.route.rx.ifindex = ip_ifindex;
+ new_entry.never_default = never_default;
+ new_entry.synced = synced;
+
+ if (memcmp (entry, &new_entry, sizeof (new_entry)) == 0)
+ return;
+
+ old_entry = *entry;
+ *entry = new_entry;
+ _entry_at_idx_update (vtable, self, entry_idx, &old_entry);
+ } else {
+ /* delete */
+ _entry_at_idx_remove (vtable, self, entry_idx);
+ }
+}
+
+void
+nm_default_route_manager_ip4_update_default_route (NMDefaultRouteManager *self, gpointer source)
+{
+ _ipx_update_default_route (&vtable_ip4, self, source);
+}
+
+void
+nm_default_route_manager_ip6_update_default_route (NMDefaultRouteManager *self, gpointer source)
+{
+ _ipx_update_default_route (&vtable_ip6, self, source);
+}
+
+/***********************************************************************************/
+
+static gboolean
+_ipx_connection_has_default_route (const VTableIP *vtable, NMDefaultRouteManager *self, NMConnection *connection)
+{
+ const char *method;
+ NMSettingIPConfig *s_ip;
+
+ g_return_val_if_fail (NM_IS_DEFAULT_ROUTE_MANAGER (self), FALSE);
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE);
+
+ if (VTABLE_IS_IP4)
+ s_ip = nm_connection_get_setting_ip4_config (connection);
+ else
+ s_ip = nm_connection_get_setting_ip6_config (connection);
+ if (!s_ip || nm_setting_ip_config_get_never_default (s_ip))
+ return FALSE;
+
+ if (VTABLE_IS_IP4) {
+ method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP4_CONFIG);
+ if ( !method
+ || !strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED)
+ || !strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL))
+ return FALSE;
+ } else {
+ method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP6_CONFIG);
+ if ( !method
+ || !strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_IGNORE)
+ || !strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL))
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+gboolean
+nm_default_route_manager_ip4_connection_has_default_route (NMDefaultRouteManager *self, NMConnection *connection)
+{
+ return _ipx_connection_has_default_route (&vtable_ip4, self, connection);
+}
+
+gboolean
+nm_default_route_manager_ip6_connection_has_default_route (NMDefaultRouteManager *self, NMConnection *connection)
+{
+ return _ipx_connection_has_default_route (&vtable_ip6, self, connection);
+}
+
+/***********************************************************************************/
+
+static NMDevice *
+_ipx_get_best_device (const VTableIP *vtable, NMDefaultRouteManager *self, const GSList *devices)
+{
+ NMDefaultRouteManagerPrivate *priv;
+ GPtrArray *entries;
+ guint i;
+
+ g_return_val_if_fail (NM_IS_DEFAULT_ROUTE_MANAGER (self), NULL);
+
+ if (!devices)
+ return NULL;
+
+ priv = NM_DEFAULT_ROUTE_MANAGER_GET_PRIVATE (self);
+ entries = vtable->get_entries (priv);
+
+ for (i = 0; i < entries->len; i++) {
+ Entry *entry = g_ptr_array_index (entries, i);
+
+ if (!NM_IS_DEVICE (entry->source.pointer))
+ continue;
+
+ if (entry->never_default)
+ continue;
+
+ if (g_slist_find ((GSList *) devices, entry->source.device))
+ return entry->source.pointer;
+ }
+ return NULL;
+}
+
+/** _ipx_get_best_activating_device:
+ * @vtable: the virtual table
+ * @self: #NMDefaultRouteManager
+ * @devices: list of devices to be searched. Only devices from this list will be considered
+ * @fully_activated: if #TRUE, only search for devices that are fully activated. Otherwise,
+ * search if there is a best device going to be activated. In the latter case, this will
+ * return NULL if the best device is already activated.
+ * @preferred_device: if not-NULL, this device is preferred if there are more devices with
+ * the same priority.
+ **/
+static NMDevice *
+_ipx_get_best_activating_device (const VTableIP *vtable, NMDefaultRouteManager *self, const GSList *devices, NMDevice *preferred_device)
+{
+ NMDefaultRouteManagerPrivate *priv;
+ const GSList *iter;
+ NMDevice *best_device = NULL;
+ guint32 best_prio = G_MAXUINT32;
+ NMDevice *best_activated_device;
+
+ g_return_val_if_fail (NM_IS_DEFAULT_ROUTE_MANAGER (self), NULL);
+
+ priv = NM_DEFAULT_ROUTE_MANAGER_GET_PRIVATE (self);
+
+ best_activated_device = _ipx_get_best_device (vtable, self, devices);
+
+ for (iter = devices; iter; iter = g_slist_next (iter)) {
+ NMDevice *device = NM_DEVICE (iter->data);
+ guint32 prio;
+ Entry *entry;
+
+ entry = _entry_find_by_source (vtable->get_entries (priv), device, NULL);
+
+ if (entry) {
+ /* of all the device that have an entry, we already know that best_activated_device
+ * is the best. entry cannot be better. */
+ if (entry->source.device != best_activated_device)
+ continue;
+ prio = entry->effective_metric;
+ } else {
+ NMDeviceState state = nm_device_get_state (device);
+
+ if ( state <= NM_DEVICE_STATE_DISCONNECTED
+ || state >= NM_DEVICE_STATE_DEACTIVATING)
+ continue;
+
+ if (!_ipx_connection_has_default_route (vtable, self, nm_device_get_connection (device)))
+ continue;
+
+ prio = nm_device_get_ip4_route_metric (device);
+ }
+ prio = vtable->route_metric_normalize (prio);
+
+ if ( !best_device
+ || prio < best_prio
+ || (prio == best_prio && preferred_device == device)) {
+ best_device = device;
+ best_prio = prio;
+ }
+ }
+
+ /* There's only a best activating device if the best device
+ * among all activating and already-activated devices is a
+ * still-activating one.
+ */
+ if (best_device && nm_device_get_state (best_device) >= NM_DEVICE_STATE_SECONDARIES)
+ return NULL;
+ return best_device;
+}
+
+NMDevice *
+nm_default_route_manager_ip4_get_best_device (NMDefaultRouteManager *self, const GSList *devices, gboolean fully_activated, NMDevice *preferred_device)
+{
+ if (fully_activated)
+ return _ipx_get_best_device (&vtable_ip4, self, devices);
+ else
+ return _ipx_get_best_activating_device (&vtable_ip4, self, devices, preferred_device);
+}
+
+NMDevice *
+nm_default_route_manager_ip6_get_best_device (NMDefaultRouteManager *self, const GSList *devices, gboolean fully_activated, NMDevice *preferred_device)
+{
+ if (fully_activated)
+ return _ipx_get_best_device (&vtable_ip6, self, devices);
+ else
+ return _ipx_get_best_activating_device (&vtable_ip6, self, devices, preferred_device);
+}
+
+/***********************************************************************************/
+
+static gpointer
+_ipx_get_best_config (const VTableIP *vtable,
+ NMDefaultRouteManager *self,
+ gboolean ignore_never_default,
+ const char **out_ip_iface,
+ NMActiveConnection **out_ac,
+ NMDevice **out_device,
+ NMVpnConnection **out_vpn)
+{
+ NMDefaultRouteManagerPrivate *priv;
+ GPtrArray *entries;
+ guint i;
+ gpointer config_result = NULL;
+
+ g_return_val_if_fail (NM_IS_DEFAULT_ROUTE_MANAGER (self), NULL);
+
+ if (out_ip_iface)
+ *out_ip_iface = NULL;
+ if (out_ac)
+ *out_ac = NULL;
+ if (out_device)
+ *out_device = NULL;
+ if (out_vpn)
+ *out_vpn = NULL;
+
+ priv = NM_DEFAULT_ROUTE_MANAGER_GET_PRIVATE (self);
+
+ g_return_val_if_fail (NM_IS_DEFAULT_ROUTE_MANAGER (self), NULL);
+
+ priv = NM_DEFAULT_ROUTE_MANAGER_GET_PRIVATE (self);
+ entries = vtable->get_entries (priv);
+
+ for (i = 0; i < entries->len; i++) {
+ Entry *entry = g_ptr_array_index (entries, i);
+
+ if (!NM_IS_DEVICE (entry->source.pointer)) {
+ NMVpnConnection *vpn = NM_VPN_CONNECTION (entry->source.vpn);
+
+ if (entry->never_default && !ignore_never_default)
+ continue;
+
+ if (VTABLE_IS_IP4)
+ config_result = nm_vpn_connection_get_ip4_config (vpn);
+ else
+ config_result = nm_vpn_connection_get_ip6_config (vpn);
+ g_assert (config_result);
+
+ if (out_vpn)
+ *out_vpn = vpn;
+ if (out_ac)
+ *out_ac = NM_ACTIVE_CONNECTION (vpn);
+ if (out_ip_iface)
+ *out_ip_iface = nm_vpn_connection_get_ip_iface (vpn);
+ } else {
+ NMDevice *device = entry->source.device;
+ NMActRequest *req;
+
+ if (entry->never_default)
+ continue;
+
+ if (VTABLE_IS_IP4)
+ config_result = nm_device_get_ip4_config (device);
+ else
+ config_result = nm_device_get_ip6_config (device);
+ g_assert (config_result);
+ req = nm_device_get_act_request (device);
+ g_assert (req);
+
+ if (out_device)
+ *out_device = device;
+ if (out_ac)
+ *out_ac = NM_ACTIVE_CONNECTION (req);
+ if (out_ip_iface)
+ *out_ip_iface = nm_device_get_ip_iface (device);
+ }
+ break;
+ }
+
+ return config_result;
+}
+
+NMIP4Config *
+nm_default_route_manager_ip4_get_best_config (NMDefaultRouteManager *self,
+ gboolean ignore_never_default,
+ const char **out_ip_iface,
+ NMActiveConnection **out_ac,
+ NMDevice **out_device,
+ NMVpnConnection **out_vpn)
+{
+ return _ipx_get_best_config (&vtable_ip4,
+ self,
+ ignore_never_default,
+ out_ip_iface,
+ out_ac,
+ out_device,
+ out_vpn);
+}
+
+NMIP6Config *
+nm_default_route_manager_ip6_get_best_config (NMDefaultRouteManager *self,
+ gboolean ignore_never_default,
+ const char **out_ip_iface,
+ NMActiveConnection **out_ac,
+ NMDevice **out_device,
+ NMVpnConnection **out_vpn)
+{
+ return _ipx_get_best_config (&vtable_ip6,
+ self,
+ ignore_never_default,
+ out_ip_iface,
+ out_ac,
+ out_device,
+ out_vpn);
+}
+
+/***********************************************************************************/
+
+static GPtrArray *
+_v4_get_entries (NMDefaultRouteManagerPrivate *priv)
+{
+ return priv->entries_ip4;
+}
+
+static GPtrArray *
+_v6_get_entries (NMDefaultRouteManagerPrivate *priv)
+{
+ return priv->entries_ip6;
+}
+
+static gboolean
+_v4_platform_route_delete_default (int ifindex, guint32 metric)
+{
+ return nm_platform_ip4_route_delete (ifindex, 0, 0, metric);
+}
+
+static gboolean
+_v6_platform_route_delete_default (int ifindex, guint32 metric)
+{
+ return nm_platform_ip6_route_delete (ifindex, in6addr_any, 0, metric);
+}
+
+static guint32
+_v4_route_metric_normalize (guint32 metric)
+{
+ return metric;
+}
+
+static const VTableIP vtable_ip4 = {
+ .addr_family = AF_INET,
+ .get_entries = _v4_get_entries,
+ .platform_route_to_string = (const char *(*)(const NMPlatformIPRoute *)) nm_platform_ip4_route_to_string,
+ .platform_route_get_all = nm_platform_ip4_route_get_all,
+ .platform_route_delete_default = _v4_platform_route_delete_default,
+ .route_metric_normalize = _v4_route_metric_normalize,
+};
+
+static const VTableIP vtable_ip6 = {
+ .addr_family = AF_INET6,
+ .get_entries = _v6_get_entries,
+ .platform_route_to_string = (const char *(*)(const NMPlatformIPRoute *)) nm_platform_ip6_route_to_string,
+ .platform_route_get_all = nm_platform_ip6_route_get_all,
+ .platform_route_delete_default = _v6_platform_route_delete_default,
+ .route_metric_normalize = nm_utils_ip6_route_metric_normalize,
+};
+
+/***********************************************************************************/
+
+NMDefaultRouteManager *
+nm_default_route_manager_get ()
+{
+ if (G_UNLIKELY (!_instance)) {
+ _instance = NM_DEFAULT_ROUTE_MANAGER (g_object_new (NM_TYPE_DEFAULT_ROUTE_MANAGER, NULL));
+ g_object_add_weak_pointer (G_OBJECT (_instance), (gpointer *) &_instance);
+ }
+ return _instance;
+}
+
+/***********************************************************************************/
+
+static gboolean
+_resync_idle_now (NMDefaultRouteManager *self)
+{
+ gboolean has_v4_changes, has_v6_changes;
+ gboolean changed = FALSE;
+
+ NMDefaultRouteManagerPrivate *priv = NM_DEFAULT_ROUTE_MANAGER_GET_PRIVATE (self);
+
+ has_v4_changes = priv->resync.has_v4_changes;
+ has_v6_changes = priv->resync.has_v6_changes;
+
+ _LOGD (0, "resync: sync now (%u) (IPv4 changes: %s, IPv6 changes: %s)", priv->resync.idle_handle,
+ has_v4_changes ? "yes" : "no", has_v6_changes ? "yes" : "no");
+
+ priv->resync.has_v4_changes = FALSE;
+ priv->resync.has_v6_changes = FALSE;
+ priv->resync.idle_handle = 0;
+ priv->resync.backoff_wait_time_ms =
+ priv->resync.backoff_wait_time_ms == 0
+ ? 100
+ : priv->resync.backoff_wait_time_ms * 2;
+
+ if (has_v4_changes)
+ changed |= _resync_all (&vtable_ip4, self, NULL, NULL, TRUE);
+
+ if (has_v6_changes)
+ changed |= _resync_all (&vtable_ip6, self, NULL, NULL, TRUE);
+
+ if (!changed) {
+ /* Nothing changed: reset the backoff wait time */
+ _resync_idle_cancel (self);
+ }
+
+ return G_SOURCE_REMOVE;
+}
+
+static void
+_resync_idle_cancel (NMDefaultRouteManager *self)
+{
+ NMDefaultRouteManagerPrivate *priv = NM_DEFAULT_ROUTE_MANAGER_GET_PRIVATE (self);
+
+ if (priv->resync.idle_handle) {
+ _LOGD (0, "resync: cancelled (%u)", priv->resync.idle_handle);
+ g_source_remove (priv->resync.idle_handle);
+ priv->resync.idle_handle = 0;
+ }
+ priv->resync.backoff_wait_time_ms = 0;
+ priv->resync.has_v4_changes = FALSE;
+ priv->resync.has_v6_changes = FALSE;
+}
+
+static void
+_resync_idle_reschedule (NMDefaultRouteManager *self)
+{
+ NMDefaultRouteManagerPrivate *priv = NM_DEFAULT_ROUTE_MANAGER_GET_PRIVATE (self);
+
+ /* since we react on external changes and readd/remove default routes for
+ * the interfaces we manage, there could be the erronous situation where two applications
+ * fight over a certain default route.
+ * Avoid this, by increasingly wait longer to touch the system (backoff wait time). */
+
+ if (priv->resync.backoff_wait_time_ms == 0) {
+ /* for scheduling idle, always reschedule (to process all other events first) */
+ if (priv->resync.idle_handle)
+ g_source_remove (priv->resync.idle_handle);
+ else
+ _LOGD (0, "resync: schedule on idle");
+ priv->resync.idle_handle = g_idle_add ((GSourceFunc) _resync_idle_now, self);
+ } else if (!priv->resync.idle_handle) {
+ priv->resync.idle_handle = g_timeout_add (priv->resync.backoff_wait_time_ms, (GSourceFunc) _resync_idle_now, self);
+ _LOGD (0, "resync: schedule in %u.%03u seconds (%u)", priv->resync.backoff_wait_time_ms/1000,
+ priv->resync.backoff_wait_time_ms%1000, priv->resync.idle_handle);
+ }
+}
+
+static void
+_platform_ipx_route_changed_cb (const VTableIP *vtable,
+ NMDefaultRouteManager *self,
+ const NMPlatformIPRoute *route)
+{
+ NMDefaultRouteManagerPrivate *priv;
+
+ if (route && !NM_PLATFORM_IP_ROUTE_IS_DEFAULT (route)) {
+ /* we only care about address changes or changes of default route. */
+ return;
+ }
+
+ priv = NM_DEFAULT_ROUTE_MANAGER_GET_PRIVATE (self);
+
+ if (priv->resync.guard) {
+ /* callbacks while executing _resync_all() are ignored. */
+ return;
+ }
+
+ if (VTABLE_IS_IP4)
+ priv->resync.has_v4_changes = TRUE;
+ else
+ priv->resync.has_v6_changes = TRUE;
+
+ _resync_idle_reschedule (self);
+}
+
+static void
+_platform_ip4_address_changed_cb (NMPlatform *platform,
+ int ifindex,
+ gpointer platform_object,
+ NMPlatformSignalChangeType change_type,
+ NMPlatformReason reason,
+ NMDefaultRouteManager *self)
+{
+ _platform_ipx_route_changed_cb (&vtable_ip4, self, NULL);
+}
+
+static void
+_platform_ip6_address_changed_cb (NMPlatform *platform,
+ int ifindex,
+ gpointer platform_object,
+ NMPlatformSignalChangeType change_type,
+ NMPlatformReason reason,
+ NMDefaultRouteManager *self)
+{
+ _platform_ipx_route_changed_cb (&vtable_ip6, self, NULL);
+}
+
+static void
+_platform_ip4_route_changed_cb (NMPlatform *platform,
+ int ifindex,
+ gpointer platform_object,
+ NMPlatformSignalChangeType change_type,
+ NMPlatformReason reason,
+ NMDefaultRouteManager *self)
+{
+ _platform_ipx_route_changed_cb (&vtable_ip4, self, platform_object);
+}
+
+static void
+_platform_ip6_route_changed_cb (NMPlatform *platform,
+ int ifindex,
+ gpointer platform_object,
+ NMPlatformSignalChangeType change_type,
+ NMPlatformReason reason,
+ NMDefaultRouteManager *self)
+{
+ _platform_ipx_route_changed_cb (&vtable_ip6, self, platform_object);
+}
+
+/***********************************************************************************/
+
+static void
+nm_default_route_manager_init (NMDefaultRouteManager *self)
+{
+ NMDefaultRouteManagerPrivate *priv = NM_DEFAULT_ROUTE_MANAGER_GET_PRIVATE (self);
+ NMPlatform *platform;
+
+ priv->entries_ip4 = g_ptr_array_new_full (0, (GDestroyNotify) _entry_free);
+ priv->entries_ip6 = g_ptr_array_new_full (0, (GDestroyNotify) _entry_free);
+
+ platform = nm_platform_get ();
+ g_signal_connect (platform, NM_PLATFORM_SIGNAL_IP4_ADDRESS_CHANGED, G_CALLBACK (_platform_ip4_address_changed_cb), self);
+ g_signal_connect (platform, NM_PLATFORM_SIGNAL_IP6_ADDRESS_CHANGED, G_CALLBACK (_platform_ip6_address_changed_cb), self);
+ g_signal_connect (platform, NM_PLATFORM_SIGNAL_IP4_ROUTE_CHANGED, G_CALLBACK (_platform_ip4_route_changed_cb), self);
+ g_signal_connect (platform, NM_PLATFORM_SIGNAL_IP6_ROUTE_CHANGED, G_CALLBACK (_platform_ip6_route_changed_cb), self);
+}
+
+static void
+dispose (GObject *object)
+{
+ NMDefaultRouteManager *self = NM_DEFAULT_ROUTE_MANAGER (object);
+ NMDefaultRouteManagerPrivate *priv = NM_DEFAULT_ROUTE_MANAGER_GET_PRIVATE (self);
+
+ if (priv->entries_ip4) {
+ g_ptr_array_free (priv->entries_ip4, TRUE);
+ priv->entries_ip4 = NULL;
+ }
+ if (priv->entries_ip6) {
+ g_ptr_array_free (priv->entries_ip6, TRUE);
+ priv->entries_ip6 = NULL;
+ }
+
+ _resync_idle_cancel (self);
+
+ g_signal_handlers_disconnect_by_data (nm_platform_get (), self);
+
+ G_OBJECT_CLASS (nm_default_route_manager_parent_class)->dispose (object);
+}
+
+static void
+nm_default_route_manager_class_init (NMDefaultRouteManagerClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ g_type_class_add_private (klass, sizeof (NMDefaultRouteManagerPrivate));
+
+ /* virtual methods */
+ object_class->dispose = dispose;
+}
+
diff --git a/src/nm-default-route-manager.h b/src/nm-default-route-manager.h
new file mode 100644
index 000000000..d8e422735
--- /dev/null
+++ b/src/nm-default-route-manager.h
@@ -0,0 +1,74 @@
+/* -*- 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 <glib-object.h>
+
+#include "nm-connection.h"
+#include "nm-types.h"
+
+#ifndef __NETWORKMANAGER_DEFAULT_ROUTE_MANAGER_H__
+#define __NETWORKMANAGER_DEFAULT_ROUTE_MANAGER_H__
+
+
+#define NM_TYPE_DEFAULT_ROUTE_MANAGER (nm_default_route_manager_get_type ())
+#define NM_DEFAULT_ROUTE_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEFAULT_ROUTE_MANAGER, NMDefaultRouteManager))
+#define NM_DEFAULT_ROUTE_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DEFAULT_ROUTE_MANAGER, NMDefaultRouteManagerClass))
+#define NM_IS_DEFAULT_ROUTE_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEFAULT_ROUTE_MANAGER))
+#define NM_IS_DEFAULT_ROUTE_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEFAULT_ROUTE_MANAGER))
+#define NM_DEFAULT_ROUTE_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEFAULT_ROUTE_MANAGER, NMDefaultRouteManagerClass))
+
+
+
+struct _NMDefaultRouteManager {
+ GObject parent;
+};
+
+typedef struct {
+ GObjectClass parent;
+} NMDefaultRouteManagerClass;
+
+GType nm_default_route_manager_get_type (void);
+
+NMDefaultRouteManager *nm_default_route_manager_get (void);
+
+void nm_default_route_manager_ip4_update_default_route (NMDefaultRouteManager *manager, gpointer source);
+void nm_default_route_manager_ip6_update_default_route (NMDefaultRouteManager *manager, gpointer source);
+
+gboolean nm_default_route_manager_ip4_connection_has_default_route (NMDefaultRouteManager *manager, NMConnection *connection);
+gboolean nm_default_route_manager_ip6_connection_has_default_route (NMDefaultRouteManager *manager, NMConnection *connection);
+
+NMDevice *nm_default_route_manager_ip4_get_best_device (NMDefaultRouteManager *manager, const GSList *devices, gboolean fully_activated, NMDevice *preferred_device);
+NMDevice *nm_default_route_manager_ip6_get_best_device (NMDefaultRouteManager *manager, const GSList *devices, gboolean fully_activated, NMDevice *preferred_device);
+
+NMIP4Config *nm_default_route_manager_ip4_get_best_config (NMDefaultRouteManager *manager,
+ gboolean ignore_never_default,
+ const char **out_ip_iface,
+ NMActiveConnection **out_ac,
+ NMDevice **out_device,
+ NMVpnConnection **out_vpn);
+NMIP6Config *nm_default_route_manager_ip6_get_best_config (NMDefaultRouteManager *manager,
+ gboolean ignore_never_default,
+ const char **out_ip_iface,
+ NMActiveConnection **out_ac,
+ NMDevice **out_device,
+ NMVpnConnection **out_vpn);
+
+#endif /* NM_DEFAULT_ROUTE_MANAGER_H */
+
diff --git a/src/nm-device-glue.h b/src/nm-device-glue.h
index 55b7c5585..a740b7a77 100644
--- a/src/nm-device-glue.h
+++ b/src/nm-device-glue.h
@@ -66,12 +66,13 @@ G_END_DECLS
#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 },
+ { (GCallback) impl_device_delete, dbus_glib_marshal_nm_device_NONE__POINTER, 52 },
};
const DBusGObjectInfo dbus_glib_nm_device_object_info = { 1,
dbus_glib_nm_device_methods,
- 1,
-"org.freedesktop.NetworkManager.Device\0Disconnect\0A\0\0\0",
+ 2,
+"org.freedesktop.NetworkManager.Device\0Disconnect\0A\0\0org.freedesktop.NetworkManager.Device\0Delete\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-vlan-glue.h b/src/nm-device-vlan-glue.h
index c9e51d542..cd1f55800 100644
--- a/src/nm-device-vlan-glue.h
+++ b/src/nm-device-vlan-glue.h
@@ -68,6 +68,6 @@ const DBusGObjectInfo dbus_glib_nm_device_vlan_object_info = { 1,
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"
+"org.freedesktop.NetworkManager.Device.Vlan\0HwAddress\0hw_address\0read\0org.freedesktop.NetworkManager.Device.Vlan\0Carrier\0carrier\0read\0org.freedesktop.NetworkManager.Device.Vlan\0Parent\0parent\0read\0org.freedesktop.NetworkManager.Device.Vlan\0VlanId\0vlan_id\0read\0\0"
};
diff --git a/src/nm-dhcp4-config.c b/src/nm-dhcp4-config.c
index a405aa870..096cf16d9 100644
--- a/src/nm-dhcp4-config.c
+++ b/src/nm-dhcp4-config.c
@@ -18,10 +18,12 @@
* Copyright (C) 2008 Red Hat, Inc.
*/
+#include "config.h"
+
#include <glib.h>
#include <string.h>
-#include "NetworkManager.h"
+#include "nm-dbus-interface.h"
#include "nm-dbus-manager.h"
#include "nm-dhcp4-config.h"
#include "nm-dhcp4-config-glue.h"
@@ -29,14 +31,14 @@
#include "nm-utils.h"
-G_DEFINE_TYPE (NMDHCP4Config, nm_dhcp4_config, G_TYPE_OBJECT)
+G_DEFINE_TYPE (NMDhcp4Config, nm_dhcp4_config, G_TYPE_OBJECT)
-#define NM_DHCP4_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DHCP4_CONFIG, NMDHCP4ConfigPrivate))
+#define NM_DHCP4_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DHCP4_CONFIG, NMDhcp4ConfigPrivate))
typedef struct {
char *dbus_path;
GHashTable *options;
-} NMDHCP4ConfigPrivate;
+} NMDhcp4ConfigPrivate;
enum {
@@ -47,14 +49,14 @@ enum {
};
-NMDHCP4Config *
+NMDhcp4Config *
nm_dhcp4_config_new (void)
{
return NM_DHCP4_CONFIG (g_object_new (NM_TYPE_DHCP4_CONFIG, NULL));
}
void
-nm_dhcp4_config_add_option (NMDHCP4Config *self,
+nm_dhcp4_config_add_option (NMDhcp4Config *self,
const char *key,
const char *option)
{
@@ -72,7 +74,7 @@ nm_dhcp4_config_add_option (NMDHCP4Config *self,
}
void
-nm_dhcp4_config_reset (NMDHCP4Config *self)
+nm_dhcp4_config_reset (NMDhcp4Config *self)
{
g_return_if_fail (NM_IS_DHCP4_CONFIG (self));
@@ -81,7 +83,7 @@ nm_dhcp4_config_reset (NMDHCP4Config *self)
}
const char *
-nm_dhcp4_config_get_option (NMDHCP4Config *self, const char *key)
+nm_dhcp4_config_get_option (NMDhcp4Config *self, const char *key)
{
GValue *value;
@@ -94,7 +96,7 @@ nm_dhcp4_config_get_option (NMDHCP4Config *self, const char *key)
/* Caller owns the list, but not the values in the list */
GSList *
-nm_dhcp4_config_list_options (NMDHCP4Config *self)
+nm_dhcp4_config_list_options (NMDhcp4Config *self)
{
GHashTableIter iter;
const char *option = NULL;
@@ -110,7 +112,7 @@ nm_dhcp4_config_list_options (NMDHCP4Config *self)
}
const char *
-nm_dhcp4_config_get_dbus_path (NMDHCP4Config *self)
+nm_dhcp4_config_get_dbus_path (NMDhcp4Config *self)
{
g_return_val_if_fail (NM_IS_DHCP4_CONFIG (self), NULL);
@@ -127,9 +129,9 @@ nm_gvalue_destroy (gpointer data)
}
static void
-nm_dhcp4_config_init (NMDHCP4Config *self)
+nm_dhcp4_config_init (NMDhcp4Config *self)
{
- NMDHCP4ConfigPrivate *priv = NM_DHCP4_CONFIG_GET_PRIVATE (self);
+ NMDhcp4ConfigPrivate *priv = NM_DHCP4_CONFIG_GET_PRIVATE (self);
static guint32 counter = 0;
priv->dbus_path = g_strdup_printf (NM_DBUS_PATH "/DHCP4Config/%d", counter++);
@@ -141,7 +143,7 @@ nm_dhcp4_config_init (NMDHCP4Config *self)
static void
finalize (GObject *object)
{
- NMDHCP4ConfigPrivate *priv = NM_DHCP4_CONFIG_GET_PRIVATE (object);
+ NMDhcp4ConfigPrivate *priv = NM_DHCP4_CONFIG_GET_PRIVATE (object);
g_free (priv->dbus_path);
g_hash_table_destroy (priv->options);
@@ -153,7 +155,7 @@ static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
- NMDHCP4ConfigPrivate *priv = NM_DHCP4_CONFIG_GET_PRIVATE (object);
+ NMDhcp4ConfigPrivate *priv = NM_DHCP4_CONFIG_GET_PRIVATE (object);
switch (prop_id) {
case PROP_OPTIONS:
@@ -166,11 +168,11 @@ get_property (GObject *object, guint prop_id,
}
static void
-nm_dhcp4_config_class_init (NMDHCP4ConfigClass *config_class)
+nm_dhcp4_config_class_init (NMDhcp4ConfigClass *config_class)
{
GObjectClass *object_class = G_OBJECT_CLASS (config_class);
- g_type_class_add_private (config_class, sizeof (NMDHCP4ConfigPrivate));
+ g_type_class_add_private (config_class, sizeof (NMDhcp4ConfigPrivate));
/* virtual methods */
object_class->get_property = get_property;
@@ -179,11 +181,10 @@ nm_dhcp4_config_class_init (NMDHCP4ConfigClass *config_class)
/* properties */
g_object_class_install_property
(object_class, PROP_OPTIONS,
- g_param_spec_boxed (NM_DHCP4_CONFIG_OPTIONS,
- "Options",
- "DHCP configuration options returned by the server",
+ g_param_spec_boxed (NM_DHCP4_CONFIG_OPTIONS, "", "",
DBUS_TYPE_G_MAP_OF_VARIANT,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
nm_dbus_manager_register_exported_type (nm_dbus_manager_get (),
G_TYPE_FROM_CLASS (config_class),
diff --git a/src/nm-dhcp4-config.h b/src/nm-dhcp4-config.h
index 6eb9ee575..227d44817 100644
--- a/src/nm-dhcp4-config.h
+++ b/src/nm-dhcp4-config.h
@@ -18,44 +18,46 @@
* Copyright (C) 2008 Red Hat, Inc.
*/
-#ifndef NM_DHCP4_CONFIG_H
-#define NM_DHCP4_CONFIG_H
+#ifndef __NETWORKMANAGER_DHCP4_CONFIG_H__
+#define __NETWORKMANAGER_DHCP4_CONFIG_H__
#include <glib.h>
#include <glib-object.h>
+#include "nm-types.h"
+
#define NM_TYPE_DHCP4_CONFIG (nm_dhcp4_config_get_type ())
-#define NM_DHCP4_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DHCP4_CONFIG, NMDHCP4Config))
-#define NM_DHCP4_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DHCP4_CONFIG, NMDHCP4ConfigClass))
+#define NM_DHCP4_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DHCP4_CONFIG, NMDhcp4Config))
+#define NM_DHCP4_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DHCP4_CONFIG, NMDhcp4ConfigClass))
#define NM_IS_DHCP4_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DHCP4_CONFIG))
#define NM_IS_DHCP4_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DHCP4_CONFIG))
-#define NM_DHCP4_CONFIG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DHCP4_CONFIG, NMDHCP4ConfigClass))
+#define NM_DHCP4_CONFIG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DHCP4_CONFIG, NMDhcp4ConfigClass))
-typedef struct {
+struct _NMDhcp4Config {
GObject parent;
-} NMDHCP4Config;
+};
typedef struct {
GObjectClass parent;
-} NMDHCP4ConfigClass;
+} NMDhcp4ConfigClass;
#define NM_DHCP4_CONFIG_OPTIONS "options"
GType nm_dhcp4_config_get_type (void);
-NMDHCP4Config *nm_dhcp4_config_new (void);
+NMDhcp4Config *nm_dhcp4_config_new (void);
-const char *nm_dhcp4_config_get_dbus_path (NMDHCP4Config *config);
+const char *nm_dhcp4_config_get_dbus_path (NMDhcp4Config *config);
-void nm_dhcp4_config_add_option (NMDHCP4Config *config,
+void nm_dhcp4_config_add_option (NMDhcp4Config *config,
const char *key,
const char *option);
-void nm_dhcp4_config_reset (NMDHCP4Config *config);
+void nm_dhcp4_config_reset (NMDhcp4Config *config);
-const char *nm_dhcp4_config_get_option (NMDHCP4Config *config, const char *option);
+const char *nm_dhcp4_config_get_option (NMDhcp4Config *config, const char *option);
-GSList *nm_dhcp4_config_list_options (NMDHCP4Config *config);
+GSList *nm_dhcp4_config_list_options (NMDhcp4Config *config);
-#endif /* NM_DHCP4_CONFIG_H */
+#endif /* __NETWORKMANAGER_DHCP4_CONFIG_H__ */
diff --git a/src/nm-dhcp6-config.c b/src/nm-dhcp6-config.c
index c50b8fdde..f93e9644c 100644
--- a/src/nm-dhcp6-config.c
+++ b/src/nm-dhcp6-config.c
@@ -18,10 +18,12 @@
* Copyright (C) 2008 Red Hat, Inc.
*/
+#include "config.h"
+
#include <glib.h>
#include <string.h>
-#include "NetworkManager.h"
+#include "nm-dbus-interface.h"
#include "nm-dbus-manager.h"
#include "nm-dhcp6-config.h"
#include "nm-dhcp6-config-glue.h"
@@ -29,14 +31,14 @@
#include "nm-utils.h"
-G_DEFINE_TYPE (NMDHCP6Config, nm_dhcp6_config, G_TYPE_OBJECT)
+G_DEFINE_TYPE (NMDhcp6Config, nm_dhcp6_config, G_TYPE_OBJECT)
-#define NM_DHCP6_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DHCP6_CONFIG, NMDHCP6ConfigPrivate))
+#define NM_DHCP6_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DHCP6_CONFIG, NMDhcp6ConfigPrivate))
typedef struct {
char *dbus_path;
GHashTable *options;
-} NMDHCP6ConfigPrivate;
+} NMDhcp6ConfigPrivate;
enum {
@@ -47,14 +49,14 @@ enum {
};
-NMDHCP6Config *
+NMDhcp6Config *
nm_dhcp6_config_new (void)
{
return NM_DHCP6_CONFIG (g_object_new (NM_TYPE_DHCP6_CONFIG, NULL));
}
void
-nm_dhcp6_config_add_option (NMDHCP6Config *self,
+nm_dhcp6_config_add_option (NMDhcp6Config *self,
const char *key,
const char *option)
{
@@ -72,7 +74,7 @@ nm_dhcp6_config_add_option (NMDHCP6Config *self,
}
void
-nm_dhcp6_config_reset (NMDHCP6Config *self)
+nm_dhcp6_config_reset (NMDhcp6Config *self)
{
g_return_if_fail (NM_IS_DHCP6_CONFIG (self));
@@ -81,7 +83,7 @@ nm_dhcp6_config_reset (NMDHCP6Config *self)
}
const char *
-nm_dhcp6_config_get_option (NMDHCP6Config *self, const char *key)
+nm_dhcp6_config_get_option (NMDhcp6Config *self, const char *key)
{
GValue *value;
@@ -94,7 +96,7 @@ nm_dhcp6_config_get_option (NMDHCP6Config *self, const char *key)
/* Caller owns the list, but not the values in the list */
GSList *
-nm_dhcp6_config_list_options (NMDHCP6Config *self)
+nm_dhcp6_config_list_options (NMDhcp6Config *self)
{
GHashTableIter iter;
const char *option = NULL;
@@ -110,7 +112,7 @@ nm_dhcp6_config_list_options (NMDHCP6Config *self)
}
const char *
-nm_dhcp6_config_get_dbus_path (NMDHCP6Config *self)
+nm_dhcp6_config_get_dbus_path (NMDhcp6Config *self)
{
g_return_val_if_fail (NM_IS_DHCP6_CONFIG (self), NULL);
@@ -127,9 +129,9 @@ nm_gvalue_destroy (gpointer data)
}
static void
-nm_dhcp6_config_init (NMDHCP6Config *self)
+nm_dhcp6_config_init (NMDhcp6Config *self)
{
- NMDHCP6ConfigPrivate *priv = NM_DHCP6_CONFIG_GET_PRIVATE (self);
+ NMDhcp6ConfigPrivate *priv = NM_DHCP6_CONFIG_GET_PRIVATE (self);
static guint32 counter = 0;
priv->dbus_path = g_strdup_printf (NM_DBUS_PATH "/DHCP6Config/%d", counter++);
@@ -141,7 +143,7 @@ nm_dhcp6_config_init (NMDHCP6Config *self)
static void
finalize (GObject *object)
{
- NMDHCP6ConfigPrivate *priv = NM_DHCP6_CONFIG_GET_PRIVATE (object);
+ NMDhcp6ConfigPrivate *priv = NM_DHCP6_CONFIG_GET_PRIVATE (object);
g_free (priv->dbus_path);
g_hash_table_destroy (priv->options);
@@ -153,7 +155,7 @@ static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
- NMDHCP6ConfigPrivate *priv = NM_DHCP6_CONFIG_GET_PRIVATE (object);
+ NMDhcp6ConfigPrivate *priv = NM_DHCP6_CONFIG_GET_PRIVATE (object);
switch (prop_id) {
case PROP_OPTIONS:
@@ -166,11 +168,11 @@ get_property (GObject *object, guint prop_id,
}
static void
-nm_dhcp6_config_class_init (NMDHCP6ConfigClass *config_class)
+nm_dhcp6_config_class_init (NMDhcp6ConfigClass *config_class)
{
GObjectClass *object_class = G_OBJECT_CLASS (config_class);
- g_type_class_add_private (config_class, sizeof (NMDHCP6ConfigPrivate));
+ g_type_class_add_private (config_class, sizeof (NMDhcp6ConfigPrivate));
/* virtual methods */
object_class->get_property = get_property;
@@ -179,11 +181,10 @@ nm_dhcp6_config_class_init (NMDHCP6ConfigClass *config_class)
/* properties */
g_object_class_install_property
(object_class, PROP_OPTIONS,
- g_param_spec_boxed (NM_DHCP6_CONFIG_OPTIONS,
- "Options",
- "DHCP configuration options returned by the server",
+ g_param_spec_boxed (NM_DHCP6_CONFIG_OPTIONS, "", "",
DBUS_TYPE_G_MAP_OF_VARIANT,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
nm_dbus_manager_register_exported_type (nm_dbus_manager_get (),
G_TYPE_FROM_CLASS (config_class),
diff --git a/src/nm-dhcp6-config.h b/src/nm-dhcp6-config.h
index 2af656078..eaca61b1c 100644
--- a/src/nm-dhcp6-config.h
+++ b/src/nm-dhcp6-config.h
@@ -18,44 +18,46 @@
* Copyright (C) 2008 Red Hat, Inc.
*/
-#ifndef NM_DHCP6_CONFIG_H
-#define NM_DHCP6_CONFIG_H
+#ifndef __NETWORKMANAGER_DHCP6_CONFIG_H__
+#define __NETWORKMANAGER_DHCP6_CONFIG_H__
#include <glib.h>
#include <glib-object.h>
+#include "nm-types.h"
+
#define NM_TYPE_DHCP6_CONFIG (nm_dhcp6_config_get_type ())
-#define NM_DHCP6_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DHCP6_CONFIG, NMDHCP6Config))
-#define NM_DHCP6_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DHCP6_CONFIG, NMDHCP6ConfigClass))
+#define NM_DHCP6_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DHCP6_CONFIG, NMDhcp6Config))
+#define NM_DHCP6_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DHCP6_CONFIG, NMDhcp6ConfigClass))
#define NM_IS_DHCP6_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DHCP6_CONFIG))
#define NM_IS_DHCP6_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DHCP6_CONFIG))
-#define NM_DHCP6_CONFIG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DHCP6_CONFIG, NMDHCP6ConfigClass))
+#define NM_DHCP6_CONFIG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DHCP6_CONFIG, NMDhcp6ConfigClass))
-typedef struct {
+struct _NMDhcp6Config {
GObject parent;
-} NMDHCP6Config;
+};
typedef struct {
GObjectClass parent;
-} NMDHCP6ConfigClass;
+} NMDhcp6ConfigClass;
#define NM_DHCP6_CONFIG_OPTIONS "options"
GType nm_dhcp6_config_get_type (void);
-NMDHCP6Config *nm_dhcp6_config_new (void);
+NMDhcp6Config *nm_dhcp6_config_new (void);
-const char *nm_dhcp6_config_get_dbus_path (NMDHCP6Config *config);
+const char *nm_dhcp6_config_get_dbus_path (NMDhcp6Config *config);
-void nm_dhcp6_config_add_option (NMDHCP6Config *config,
+void nm_dhcp6_config_add_option (NMDhcp6Config *config,
const char *key,
const char *option);
-void nm_dhcp6_config_reset (NMDHCP6Config *config);
+void nm_dhcp6_config_reset (NMDhcp6Config *config);
-const char *nm_dhcp6_config_get_option (NMDHCP6Config *config, const char *option);
+const char *nm_dhcp6_config_get_option (NMDhcp6Config *config, const char *option);
-GSList *nm_dhcp6_config_list_options (NMDHCP6Config *self);
+GSList *nm_dhcp6_config_list_options (NMDhcp6Config *self);
-#endif /* NM_DHCP6_CONFIG_H */
+#endif /* __NETWORKMANAGER_DHCP6_CONFIG_H__ */
diff --git a/src/nm-dispatcher.c b/src/nm-dispatcher.c
index f955822b4..ae451768d 100644
--- a/src/nm-dispatcher.c
+++ b/src/nm-dispatcher.c
@@ -19,6 +19,8 @@
* Copyright (C) 2005 - 2008 Novell, Inc.
*/
+#include "config.h"
+
#include <glib.h>
#include <gio/gio.h>
#include <string.h>
@@ -30,6 +32,9 @@
#include "nm-utils.h"
#include "nm-logging.h"
#include "nm-dbus-manager.h"
+#include "nm-device.h"
+#include "nm-dhcp4-config.h"
+#include "nm-dhcp6-config.h"
#include "nm-dbus-glib-types.h"
#include "nm-glib-compat.h"
@@ -91,7 +96,7 @@ dump_object_to_props (GObject *object, GHashTable *hash)
}
static void
-dump_dhcp4_to_props (NMDHCP4Config *config, GHashTable *hash)
+dump_dhcp4_to_props (NMDhcp4Config *config, GHashTable *hash)
{
GSList *options, *iter;
@@ -107,7 +112,7 @@ dump_dhcp4_to_props (NMDHCP4Config *config, GHashTable *hash)
}
static void
-dump_dhcp6_to_props (NMDHCP6Config *config, GHashTable *hash)
+dump_dhcp6_to_props (NMDhcp6Config *config, GHashTable *hash)
{
GSList *options, *iter;
@@ -132,8 +137,8 @@ fill_device_props (NMDevice *device,
{
NMIP4Config *ip4_config;
NMIP6Config *ip6_config;
- NMDHCP4Config *dhcp4_config;
- NMDHCP6Config *dhcp6_config;
+ NMDhcp4Config *dhcp4_config;
+ NMDhcp6Config *dhcp6_config;
/* If the action is for a VPN, send the VPN's IP interface instead of the device's */
value_hash_add_str (dev_hash, NMD_DEVICE_PROPS_IP_INTERFACE, nm_device_get_ip_iface (device));
@@ -461,14 +466,18 @@ _dispatcher_call (DispatcherAction action,
proxy = dbus_g_proxy_new_for_name (g_connection,
NM_DISPATCHER_DBUS_SERVICE,
NM_DISPATCHER_DBUS_PATH,
- NM_DISPATCHER_DBUS_IFACE);
+ NM_DISPATCHER_DBUS_INTERFACE);
if (!proxy) {
nm_log_err (LOGD_DISPATCH, "(%u) could not get dispatcher proxy!", reqid);
return FALSE;
}
if (connection) {
- connection_hash = nm_connection_to_hash (connection, NM_SETTING_HASH_FLAG_NO_SECRETS);
+ GVariant *connection_dict;
+
+ connection_dict = nm_connection_to_dbus (connection, NM_CONNECTION_SERIALIZE_NO_SECRETS);
+ connection_hash = nm_utils_connection_dict_to_hash (connection_dict);
+ g_variant_unref (connection_dict);
connection_props = value_hash_create ();
value_hash_add_object_path (connection_props,
diff --git a/src/nm-dispatcher.h b/src/nm-dispatcher.h
index 464f6310c..e93816b6b 100644
--- a/src/nm-dispatcher.h
+++ b/src/nm-dispatcher.h
@@ -19,15 +19,13 @@
* Copyright (C) 2005 - 2008 Novell, Inc.
*/
-#ifndef NM_DISPATCHER_H
-#define NM_DISPATCHER_H
+#ifndef __NETWORKMANAGER_DISPATCHER_H__
+#define __NETWORKMANAGER_DISPATCHER_H__
#include <glib.h>
#include <stdio.h>
-#include "nm-device.h"
-#include "nm-ip4-config.h"
-#include "nm-ip6-config.h"
+#include "nm-types.h"
#include "nm-connection.h"
typedef enum {
@@ -78,4 +76,4 @@ void nm_dispatcher_call_cancel (guint call_id);
void nm_dispatcher_init (void);
-#endif /* NM_DISPATCHER_H */
+#endif /* __NETWORKMANAGER_DISPATCHER_H__ */
diff --git a/src/nm-enum-types.c b/src/nm-enum-types.c
index 95d64a8b6..ee1df59fb 100644
--- a/src/nm-enum-types.c
+++ b/src/nm-enum-types.c
@@ -5,27 +5,29 @@
#include "nm-enum-types.h"
-#include "nm-config.h"
-#include "nm-config-device.h"
-#include "nm-device.h"
#include "nm-device-bond.h"
#include "nm-device-bridge.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-device-team.h"
#include "nm-device-tun.h"
#include "nm-device-veth.h"
#include "nm-device-vlan.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-systemd.h"
+#include "nm-device.h"
+#include "nm-device-ethernet-utils.h"
+#include "nm-device-factory.h"
+#include "nm-device-generic.h"
+#include "nm-device-logging.h"
+#include "nm-device-private.h"
+#include "nm-dhcp-client.h"
+#include "nm-dhcp-utils.h"
+#include "nm-dhcp-listener.h"
#include "nm-dhcp-manager.h"
#include "nm-dns-dnsmasq.h"
#include "nm-dns-unbound.h"
@@ -34,8 +36,6 @@
#include "nm-dns-utils.h"
#include "nm-dnsmasq-manager.h"
#include "nm-dnsmasq-utils.h"
-#include "nm-firewall-manager.h"
-#include "nm-logging.h"
#include "nm-fake-platform.h"
#include "nm-linux-platform.h"
#include "nm-platform.h"
@@ -45,15 +45,12 @@
#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-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"
@@ -73,19 +70,25 @@
#include "nm-vpn-service.h"
#include "nm-activation-request.h"
#include "nm-active-connection.h"
+#include "nm-config.h"
#include "nm-connection-provider.h"
#include "nm-connectivity.h"
#include "nm-dbus-manager.h"
#include "nm-dcb.h"
+#include "nm-default-route-manager.h"
#include "nm-dhcp4-config.h"
#include "nm-dhcp6-config.h"
#include "nm-dispatcher.h"
+#include "nm-firewall-manager.h"
#include "nm-ip4-config.h"
#include "nm-ip6-config.h"
-#include "nm-manager-auth.h"
+#include "nm-logging.h"
+#include "nm-auth-manager.h"
#include "nm-auth-subject.h"
+#include "nm-auth-utils.h"
#include "nm-manager.h"
#include "nm-policy.h"
+#include "nm-posix-signals.h"
#include "nm-properties-changed-signal.h"
#include "nm-rfkill-manager.h"
#include "nm-session-monitor.h"
@@ -97,20 +100,20 @@
#include "nm-device-wimax.h"
GType
-nm_device_error_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[] = {
- { 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_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 ("NMDeviceError"), values);
+ g_enum_register_static (g_intern_static_string ("NMVlanError"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
@@ -128,6 +131,8 @@ nm_unmanaged_flags_get_type (void)
{ 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_PARENT, "NM_UNMANAGED_PARENT", "nm-unmanaged-parent" },
+ { NM_UNMANAGED_EXTERNAL_DOWN, "NM_UNMANAGED_EXTERNAL_DOWN", "nm-unmanaged-external-down" },
{ __NM_UNMANAGED_LAST, "__NM_UNMANAGED_LAST", "--nm-unmanaged-last" },
{ NM_UNMANAGED_LAST, "NM_UNMANAGED_LAST", "nm-unmanaged-last" },
{ 0, NULL, NULL }
@@ -140,146 +145,6 @@ nm_unmanaged_flags_get_type (void)
return g_define_type_id__volatile;
}
GType
-nm_bond_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_BOND_ERROR_CONNECTION_NOT_BOND, "NM_BOND_ERROR_CONNECTION_NOT_BOND", "ConnectionNotBond" },
- { NM_BOND_ERROR_CONNECTION_INVALID, "NM_BOND_ERROR_CONNECTION_INVALID", "ConnectionInvalid" },
- { NM_BOND_ERROR_CONNECTION_INCOMPATIBLE, "NM_BOND_ERROR_CONNECTION_INCOMPATIBLE", "ConnectionIncompatible" },
- { 0, NULL, NULL }
- };
- GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMBondError"), 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)
-{
- 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" },
- { 0, NULL, NULL }
- };
- GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMBridgeError"), values);
- g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
- }
-
- return g_define_type_id__volatile;
-}
-GType
-nm_ethernet_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_ETHERNET_ERROR_CONNECTION_NOT_WIRED, "NM_ETHERNET_ERROR_CONNECTION_NOT_WIRED", "ConnectionNotWired" },
- { NM_ETHERNET_ERROR_CONNECTION_INVALID, "NM_ETHERNET_ERROR_CONNECTION_INVALID", "ConnectionInvalid" },
- { NM_ETHERNET_ERROR_CONNECTION_INCOMPATIBLE, "NM_ETHERNET_ERROR_CONNECTION_INCOMPATIBLE", "ConnectionIncompatible" },
- { 0, NULL, NULL }
- };
- GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMEthernetError"), values);
- g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
- }
-
- 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_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 ("NMDeviceGenericError"), 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)
-{
- 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" },
- { 0, NULL, NULL }
- };
- GType g_define_type_id =
- 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_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_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 ("NMTeamError"), 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)
-{
- 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" },
- { 0, NULL, NULL }
- };
- GType g_define_type_id =
- 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_dhcp_state_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
@@ -287,75 +152,18 @@ nm_dhcp_state_get_type (void)
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" },
- { 0, NULL, NULL }
- };
- GType g_define_type_id =
- 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_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_DHCP_MANAGER_ERROR_BAD_CLIENT, "NM_DHCP_MANAGER_ERROR_BAD_CLIENT", "BadClient" },
- { NM_DHCP_MANAGER_ERROR_INTERNAL, "NM_DHCP_MANAGER_ERROR_INTERNAL", "InternalError" },
+ { NM_DHCP_STATE_UNKNOWN, "NM_DHCP_STATE_UNKNOWN", "nm-dhcp-state-unknown" },
+ { NM_DHCP_STATE_BOUND, "NM_DHCP_STATE_BOUND", "nm-dhcp-state-bound" },
+ { NM_DHCP_STATE_TIMEOUT, "NM_DHCP_STATE_TIMEOUT", "nm-dhcp-state-timeout" },
+ { NM_DHCP_STATE_DONE, "NM_DHCP_STATE_DONE", "nm-dhcp-state-done" },
+ { NM_DHCP_STATE_EXPIRE, "NM_DHCP_STATE_EXPIRE", "nm-dhcp-state-expire" },
+ { NM_DHCP_STATE_FAIL, "NM_DHCP_STATE_FAIL", "nm-dhcp-state-fail" },
+ { __NM_DHCP_STATE_MAX, "__NM_DHCP_STATE_MAX", "--nm-dhcp-state-max" },
+ { NM_DHCP_STATE_MAX, "NM_DHCP_STATE_MAX", "nm-dhcp-state-max" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- 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_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_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 ("NMDnsManagerError"), values);
+ g_enum_register_static (g_intern_static_string ("NMDhcpState"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
@@ -422,25 +230,6 @@ nm_dns_masq_status_get_type (void)
return g_define_type_id__volatile;
}
GType
-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_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 ("NMLoggingError"), values);
- g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
- }
-
- return g_define_type_id__volatile;
-}
-GType
nm_platform_error_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
@@ -485,47 +274,6 @@ nm_platform_reason_get_type (void)
return g_define_type_id__volatile;
}
GType
-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_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 ("NMLinkType"), values);
- g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
- }
-
- return g_define_type_id__volatile;
-}
-GType
nm_platform_signal_change_type_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
@@ -546,27 +294,20 @@ nm_platform_signal_change_type_get_type (void)
return g_define_type_id__volatile;
}
GType
-nm_platform_source_get_type (void)
+nm_platform_get_route_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_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" },
+ { NM_PLATFORM_GET_ROUTE_MODE_ALL, "NM_PLATFORM_GET_ROUTE_MODE_ALL", "all" },
+ { NM_PLATFORM_GET_ROUTE_MODE_NO_DEFAULT, "NM_PLATFORM_GET_ROUTE_MODE_NO_DEFAULT", "no-default" },
+ { NM_PLATFORM_GET_ROUTE_MODE_ONLY_DEFAULT, "NM_PLATFORM_GET_ROUTE_MODE_ONLY_DEFAULT", "only-default" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMPlatformSource"), values);
+ g_enum_register_static (g_intern_static_string ("NMPlatformGetRouteMode"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
@@ -629,6 +370,7 @@ nm_rdisc_config_map_get_type (void)
{ 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" },
+ { NM_RDISC_CONFIG_MTU, "NM_RDISC_CONFIG_MTU", "mtu" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
@@ -670,77 +412,23 @@ nm_ppp_status_get_type (void)
return g_define_type_id__volatile;
}
GType
-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[] = {
- { 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 ("NMAgentManagerError"), values);
- g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
- }
-
- return g_define_type_id__volatile;
-}
-GType
-nm_secret_agent_capabilities_get_type (void)
+nm_settings_connection_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_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 ("NMSecretAgentCapabilities"), 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)
-{
- 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_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" },
+ static const GFlagsValue values[] = {
+ { NM_SETTINGS_CONNECTION_FLAGS_NONE, "NM_SETTINGS_CONNECTION_FLAGS_NONE", "nm-settings-connection-flags-none" },
+ { NM_SETTINGS_CONNECTION_FLAGS_UNSAVED, "NM_SETTINGS_CONNECTION_FLAGS_UNSAVED", "nm-settings-connection-flags-unsaved" },
+ { NM_SETTINGS_CONNECTION_FLAGS_NM_GENERATED, "NM_SETTINGS_CONNECTION_FLAGS_NM_GENERATED", "nm-settings-connection-flags-nm-generated" },
+ { NM_SETTINGS_CONNECTION_FLAGS_NM_GENERATED_ASSUMED, "NM_SETTINGS_CONNECTION_FLAGS_NM_GENERATED_ASSUMED", "nm-settings-connection-flags-nm-generated-assumed" },
+ { __NM_SETTINGS_CONNECTION_FLAGS_LAST, "__NM_SETTINGS_CONNECTION_FLAGS_LAST", "--nm-settings-connection-flags-last" },
+ { NM_SETTINGS_CONNECTION_FLAGS_ALL, "NM_SETTINGS_CONNECTION_FLAGS_ALL", "nm-settings-connection-flags-all" },
{ 0, NULL, NULL }
};
GType g_define_type_id =
- g_enum_register_static (g_intern_static_string ("NMSettingsError"), values);
+ g_flags_register_static (g_intern_static_string ("NMSettingsConnectionFlags"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
@@ -832,49 +520,6 @@ nm_opt_type_get_type (void)
return g_define_type_id__volatile;
}
GType
-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_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 ("NMVPNManagerError"), values);
- g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
- }
-
- return g_define_type_id__volatile;
-}
-GType
-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_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 ("NMDcbError"), 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)
{
static volatile gsize g_define_type_id__volatile = 0;
@@ -903,51 +548,41 @@ nm_dispatcher_action_get_type (void)
return g_define_type_id__volatile;
}
GType
-nm_auth_call_result_get_type (void)
+nm_auth_subject_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_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_AUTH_SUBJECT_TYPE_INVALID, "NM_AUTH_SUBJECT_TYPE_INVALID", "invalid" },
+ { NM_AUTH_SUBJECT_TYPE_INTERNAL, "NM_AUTH_SUBJECT_TYPE_INTERNAL", "internal" },
+ { NM_AUTH_SUBJECT_TYPE_UNIX_PROCESS, "NM_AUTH_SUBJECT_TYPE_UNIX_PROCESS", "unix-process" },
{ 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 ("NMAuthSubjectType"), 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_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_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" },
+ { 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 ("NMManagerError"), values);
+ g_enum_register_static (g_intern_static_string ("NMAuthCallResult"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
@@ -996,42 +631,68 @@ nm_rf_kill_type_get_type (void)
return g_define_type_id__volatile;
}
GType
-nm_session_monitor_error_get_type (void)
+nm_ip_config_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_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_IP_CONFIG_SOURCE_UNKNOWN, "NM_IP_CONFIG_SOURCE_UNKNOWN", "unknown" },
+ { NM_IP_CONFIG_SOURCE_KERNEL, "NM_IP_CONFIG_SOURCE_KERNEL", "kernel" },
+ { NM_IP_CONFIG_SOURCE_SHARED, "NM_IP_CONFIG_SOURCE_SHARED", "shared" },
+ { NM_IP_CONFIG_SOURCE_IP4LL, "NM_IP_CONFIG_SOURCE_IP4LL", "ip4ll" },
+ { NM_IP_CONFIG_SOURCE_PPP, "NM_IP_CONFIG_SOURCE_PPP", "ppp" },
+ { NM_IP_CONFIG_SOURCE_WWAN, "NM_IP_CONFIG_SOURCE_WWAN", "wwan" },
+ { NM_IP_CONFIG_SOURCE_VPN, "NM_IP_CONFIG_SOURCE_VPN", "vpn" },
+ { NM_IP_CONFIG_SOURCE_DHCP, "NM_IP_CONFIG_SOURCE_DHCP", "dhcp" },
+ { NM_IP_CONFIG_SOURCE_RDISC, "NM_IP_CONFIG_SOURCE_RDISC", "rdisc" },
+ { NM_IP_CONFIG_SOURCE_USER, "NM_IP_CONFIG_SOURCE_USER", "user" },
{ 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 ("NMIPConfigSource"), 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_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_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_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 ("NMWimaxError"), values);
+ g_enum_register_static (g_intern_static_string ("NMLinkType"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
diff --git a/src/nm-enum-types.h b/src/nm-enum-types.h
index 2bf6c7346..01d7bb442 100644
--- a/src/nm-enum-types.h
+++ b/src/nm-enum-types.h
@@ -6,51 +6,30 @@
#ifndef __NM_ENUM_TYPES_H__
#define __NM_ENUM_TYPES_H__
+#include <nm-core-enum-types.h>
#include <glib-object.h>
G_BEGIN_DECLS
-GType nm_device_error_get_type (void) G_GNUC_CONST;
-#define NM_TYPE_DEVICE_ERROR (nm_device_error_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_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_unmanaged_flags_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_UNMANAGED_FLAGS (nm_unmanaged_flags_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_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_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_platform_get_route_mode_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_PLATFORM_GET_ROUTE_MODE (nm_platform_get_route_mode_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;
@@ -59,12 +38,8 @@ 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_settings_connection_flags_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_SETTINGS_CONNECTION_FLAGS (nm_settings_connection_flags_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;
@@ -73,24 +48,20 @@ 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_subject_type_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_AUTH_SUBJECT_TYPE (nm_auth_subject_type_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_ip_config_source_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_IP_CONFIG_SOURCE (nm_ip_config_source_get_type ())
+GType nm_link_type_get_type (void) G_GNUC_CONST;
+#define NM_TYPE_LINK_TYPE (nm_link_type_get_type ())
G_END_DECLS
#endif /* __NM_ENUM_TYPES_H__ */
diff --git a/src/firewall-manager/nm-firewall-manager.c b/src/nm-firewall-manager.c
index c99372a1d..59520b3b4 100644
--- a/src/firewall-manager/nm-firewall-manager.c
+++ b/src/nm-firewall-manager.c
@@ -18,8 +18,11 @@
* Copyright (C) 2011 Red Hat, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include <glib.h>
+#include <gio/gio.h>
#include <dbus/dbus.h>
#include "nm-firewall-manager.h"
@@ -44,6 +47,8 @@ typedef struct {
guint name_owner_id;
DBusGProxy * proxy;
gboolean running;
+
+ GSList *pending_calls;
} NMFirewallManagerPrivate;
enum {
@@ -56,44 +61,89 @@ static guint signals[LAST_SIGNAL] = { 0 };
/********************************************************************/
+#define PENDING_CALL_DUMMY ((NMFirewallPendingCall) GUINT_TO_POINTER(1))
+#define PENDING_CALL_FROM_INFO(info) ((NMFirewallPendingCall) info)
+
typedef struct {
+ NMFirewallManager *self;
char *iface;
FwAddToZoneFunc callback;
gpointer user_data;
guint id;
gboolean completed;
+
+ guint idle_id;
+ DBusGProxyCall *dbus_call;
} CBInfo;
static void
-cb_info_free (CBInfo *info)
+_cb_info_free (CBInfo *info)
{
+ NMFirewallManagerPrivate *priv;
+
g_return_if_fail (info != NULL);
- if (!info->completed)
+ if (!info->completed) {
nm_log_dbg (LOGD_FIREWALL, "(%s) firewall zone call cancelled [%u]", info->iface, info->id);
+ if (info->callback) {
+ GError *error;
+ error = g_error_new_literal (G_IO_ERROR, G_IO_ERROR_CANCELLED,
+ "Operation was cancelled");
+ info->callback (error, info->user_data);
+ g_error_free (error);
+ }
+ }
g_free (info->iface);
- g_free (info);
+
+ priv = NM_FIREWALL_MANAGER_GET_PRIVATE (info->self);
+ priv->pending_calls = g_slist_remove (priv->pending_calls, info);
+ g_object_unref (info->self);
+
+ g_slice_free (CBInfo, info);
}
static CBInfo *
-_cb_info_create (const char *iface, FwAddToZoneFunc callback, gpointer user_data)
+_cb_info_create (NMFirewallManager *self, const char *iface, FwAddToZoneFunc callback, gpointer user_data)
{
+ NMFirewallManagerPrivate *priv = NM_FIREWALL_MANAGER_GET_PRIVATE (self);
static guint id;
CBInfo *info;
- info = g_malloc (sizeof (CBInfo));
+ info = g_slice_new0 (CBInfo);
if (++id == 0)
++id;
+ info->self = g_object_ref (self);
info->id = id;
info->iface = g_strdup (iface);
info->completed = FALSE;
info->callback = callback;
info->user_data = user_data;
+ priv->pending_calls = g_slist_prepend (priv->pending_calls, info);
return info;
}
+static gboolean
+add_or_change_idle_cb (gpointer user_data)
+{
+ CBInfo *info = user_data;
+
+ if (info->idle_id == 0) {
+ /* operation was cancelled. _cb_info_free will invoke callback. */
+ } else {
+ nm_log_dbg (LOGD_FIREWALL, "(%s) firewall zone call pretends success [%u]",
+ info->iface, info->id);
+ if (info->callback)
+ info->callback (NULL, info->user_data);
+ info->completed = TRUE;
+ info->idle_id = 0;
+ }
+
+ _cb_info_free (info);
+ return G_SOURCE_REMOVE;
+}
+
static void
add_or_change_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
{
@@ -117,14 +167,15 @@ add_or_change_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data
info->iface, info->id);
}
- info->callback (error, info->user_data);
+ if (info->callback)
+ info->callback (error, info->user_data);
info->completed = TRUE;
g_free (zone);
g_clear_error (&error);
}
-gpointer
+NMFirewallPendingCall
nm_firewall_manager_add_or_change_zone (NMFirewallManager *self,
const char *iface,
const char *zone,
@@ -136,24 +187,32 @@ nm_firewall_manager_add_or_change_zone (NMFirewallManager *self,
CBInfo *info;
if (priv->running == FALSE) {
- nm_log_dbg (LOGD_FIREWALL, "(%s) firewall zone add/change skipped (not running)", iface);
- callback (NULL, user_data);
- return NULL;
+ if (callback) {
+ info = _cb_info_create (self, iface, callback, user_data);
+ info->idle_id = g_idle_add (add_or_change_idle_cb, info);
+ nm_log_dbg (LOGD_FIREWALL, "(%s) firewall zone %s -> %s%s%s [%u] (not running, simulate success)", iface, add ? "add" : "change",
+ zone?"\"":"", zone ? zone : "default", zone?"\"":"", info->id);
+ return PENDING_CALL_FROM_INFO (info);
+ } else {
+ nm_log_dbg (LOGD_FIREWALL, "(%s) firewall zone add/change skipped (not running)", iface);
+ return PENDING_CALL_DUMMY;
+ }
}
- info = _cb_info_create (iface, callback, user_data);
+ info = _cb_info_create (self, iface, callback, user_data);
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,
- info,
- (GDestroyNotify) cb_info_free,
- 10000, /* timeout */
- G_TYPE_STRING, zone ? zone : "",
- G_TYPE_STRING, iface,
- G_TYPE_INVALID);
+ info->dbus_call = dbus_g_proxy_begin_call_with_timeout (priv->proxy,
+ add ? "addInterface" : "changeZone",
+ add_or_change_cb,
+ info,
+ (GDestroyNotify) _cb_info_free,
+ 10000, /* timeout */
+ G_TYPE_STRING, zone ? zone : "",
+ G_TYPE_STRING, iface,
+ G_TYPE_INVALID);
+ return PENDING_CALL_FROM_INFO (info);
}
static void
@@ -185,7 +244,7 @@ remove_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
g_clear_error (&error);
}
-gpointer
+NMFirewallPendingCall
nm_firewall_manager_remove_from_zone (NMFirewallManager *self,
const char *iface,
const char *zone)
@@ -195,29 +254,49 @@ nm_firewall_manager_remove_from_zone (NMFirewallManager *self,
if (priv->running == FALSE) {
nm_log_dbg (LOGD_FIREWALL, "(%s) firewall zone remove skipped (not running)", iface);
- return NULL;
+ return PENDING_CALL_DUMMY;
}
- info = _cb_info_create (iface, NULL, NULL);
+ info = _cb_info_create (self, iface, NULL, NULL);
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,
- info,
- (GDestroyNotify) cb_info_free,
- 10000, /* timeout */
- G_TYPE_STRING, zone ? zone : "",
- G_TYPE_STRING, iface,
- G_TYPE_INVALID);
+ info->dbus_call = dbus_g_proxy_begin_call_with_timeout (priv->proxy,
+ "removeInterface",
+ remove_cb,
+ info,
+ (GDestroyNotify) _cb_info_free,
+ 10000, /* timeout */
+ G_TYPE_STRING, zone ? zone : "",
+ G_TYPE_STRING, iface,
+ G_TYPE_INVALID);
+ return PENDING_CALL_FROM_INFO (info);
}
-void nm_firewall_manager_cancel_call (NMFirewallManager *self, gpointer call)
+void nm_firewall_manager_cancel_call (NMFirewallManager *self, NMFirewallPendingCall call)
{
+ NMFirewallManagerPrivate *priv = NM_FIREWALL_MANAGER_GET_PRIVATE (self);
+ GSList *pending;
+ CBInfo *info;
+
g_return_if_fail (NM_IS_FIREWALL_MANAGER (self));
- dbus_g_proxy_cancel_call (NM_FIREWALL_MANAGER_GET_PRIVATE (self)->proxy,
- (DBusGProxyCall *) call);
+
+ if (call == PENDING_CALL_DUMMY)
+ return;
+
+ pending = g_slist_find (priv->pending_calls, call);
+
+ if (!pending)
+ return;
+ priv->pending_calls = g_slist_remove_link (priv->pending_calls, pending);
+
+ info = (CBInfo *) call;
+ if (info->idle_id)
+ info->idle_id = 0;
+ else {
+ dbus_g_proxy_cancel_call (NM_FIREWALL_MANAGER_GET_PRIVATE (self)->proxy,
+ info->dbus_call);
+ }
}
static void
@@ -263,12 +342,11 @@ nm_firewall_manager_get (void)
{
static NMFirewallManager *singleton = NULL;
- if (!singleton)
+ if (G_UNLIKELY (!singleton)) {
singleton = NM_FIREWALL_MANAGER (g_object_new (NM_TYPE_FIREWALL_MANAGER, NULL));
- else
- g_object_ref (singleton);
+ g_assert (singleton);
+ }
- g_assert (singleton);
return singleton;
}
@@ -317,6 +395,8 @@ dispose (GObject *object)
{
NMFirewallManagerPrivate *priv = NM_FIREWALL_MANAGER_GET_PRIVATE (object);
+ g_assert (priv->pending_calls == NULL);
+
if (priv->dbus_mgr) {
g_signal_handler_disconnect (priv->dbus_mgr, priv->name_owner_id);
priv->name_owner_id = 0;
@@ -340,12 +420,12 @@ nm_firewall_manager_class_init (NMFirewallManagerClass *klass)
object_class->set_property = set_property;
object_class->dispose = dispose;
- g_object_class_install_property (object_class, PROP_AVAILABLE,
- g_param_spec_boolean (NM_FIREWALL_MANAGER_AVAILABLE,
- "Available",
- "Available",
- FALSE,
- G_PARAM_READABLE));
+ g_object_class_install_property
+ (object_class, PROP_AVAILABLE,
+ g_param_spec_boolean (NM_FIREWALL_MANAGER_AVAILABLE, "", "",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
signals[STARTED] =
g_signal_new ("started",
diff --git a/src/firewall-manager/nm-firewall-manager.h b/src/nm-firewall-manager.h
index a77984e37..84cb5498a 100644
--- a/src/firewall-manager/nm-firewall-manager.h
+++ b/src/nm-firewall-manager.h
@@ -18,11 +18,10 @@
* Copyright (C) 2011 Red Hat, Inc.
*/
-#ifndef NM_FIREWALL_MANAGER_H
-#define NM_FIREWALL_MANAGER_H
+#ifndef __NETWORKMANAGER_FIREWALL_MANAGER_H__
+#define __NETWORKMANAGER_FIREWALL_MANAGER_H__
#include <glib-object.h>
-#include <dbus/dbus-glib.h>
#define FIREWALL_DBUS_SERVICE "org.fedoraproject.FirewallD1"
#define FIREWALL_DBUS_PATH "/org/fedoraproject/FirewallD1"
@@ -41,6 +40,9 @@ G_BEGIN_DECLS
#define NM_FIREWALL_MANAGER_AVAILABLE "available"
+struct _NMFirewallPendingCall;
+typedef struct _NMFirewallPendingCall *NMFirewallPendingCall;
+
typedef struct {
GObject parent;
} NMFirewallManager;
@@ -58,16 +60,16 @@ NMFirewallManager *nm_firewall_manager_get (void);
typedef void (*FwAddToZoneFunc) (GError *error, gpointer user_data);
-gpointer nm_firewall_manager_add_or_change_zone (NMFirewallManager *mgr,
- const char *iface,
- const char *zone,
- gboolean add,
- FwAddToZoneFunc callback,
- gpointer user_data);
-gpointer nm_firewall_manager_remove_from_zone (NMFirewallManager *mgr,
- const char *iface,
- const char *zone);
+NMFirewallPendingCall nm_firewall_manager_add_or_change_zone (NMFirewallManager *mgr,
+ const char *iface,
+ const char *zone,
+ gboolean add,
+ FwAddToZoneFunc callback,
+ gpointer user_data);
+NMFirewallPendingCall nm_firewall_manager_remove_from_zone (NMFirewallManager *mgr,
+ const char *iface,
+ const char *zone);
-void nm_firewall_manager_cancel_call (NMFirewallManager *mgr, gpointer fw_call);
+void nm_firewall_manager_cancel_call (NMFirewallManager *mgr, NMFirewallPendingCall fw_call);
-#endif /* NM_FIREWALL_MANAGER_H */
+#endif /* __NETWORKMANAGER_FIREWALL_MANAGER_H__ */
diff --git a/src/nm-iface-helper.c b/src/nm-iface-helper.c
new file mode 100644
index 000000000..9d5cdc05c
--- /dev/null
+++ b/src/nm-iface-helper.c
@@ -0,0 +1,538 @@
+/* -*- 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 "config.h"
+
+#include <glib.h>
+#include <glib-unix.h>
+#include <getopt.h>
+#include <locale.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <glib/gi18n.h>
+#include <string.h>
+#include <sys/resource.h>
+#include <sys/stat.h>
+#include <signal.h>
+
+#include "gsystem-local-alloc.h"
+#include "NetworkManagerUtils.h"
+#include "nm-linux-platform.h"
+#include "nm-dhcp-manager.h"
+#include "nm-logging.h"
+#include "main-utils.h"
+#include "nm-rdisc.h"
+#include "nm-lndp-rdisc.h"
+#include "nm-utils.h"
+
+#if !defined(NM_DIST_VERSION)
+# define NM_DIST_VERSION VERSION
+#endif
+
+#define NMIH_PID_FILE_FMT NMRUNDIR "/nm-iface-helper-%d.pid"
+
+static GMainLoop *main_loop = NULL;
+static char *ifname = NULL;
+static int ifindex = -1;
+static gboolean slaac_required = FALSE;
+static gboolean dhcp4_required = FALSE;
+static int tempaddr = NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN;
+static guint32 priority_v4 = NM_PLATFORM_ROUTE_METRIC_DEFAULT_IP4;
+static guint32 priority_v6 = NM_PLATFORM_ROUTE_METRIC_DEFAULT_IP6;
+
+static void
+dhcp4_state_changed (NMDhcpClient *client,
+ NMDhcpState state,
+ NMIP4Config *ip4_config,
+ GHashTable *options,
+ gpointer user_data)
+{
+ static NMIP4Config *last_config = NULL;
+ NMIP4Config *existing;
+
+ g_return_if_fail (!ip4_config || NM_IS_IP4_CONFIG (ip4_config));
+
+ nm_log_dbg (LOGD_DHCP4, "(%s): new DHCPv4 client state %d", ifname, state);
+
+ switch (state) {
+ case NM_DHCP_STATE_BOUND:
+ g_assert (ip4_config);
+ existing = nm_ip4_config_capture (ifindex, FALSE);
+ if (last_config)
+ nm_ip4_config_subtract (existing, last_config);
+
+ nm_ip4_config_merge (existing, ip4_config);
+ if (!nm_ip4_config_commit (existing, ifindex, priority_v4))
+ nm_log_warn (LOGD_DHCP4, "(%s): failed to apply DHCPv4 config", ifname);
+
+ if (last_config) {
+ g_object_unref (last_config);
+ last_config = nm_ip4_config_new ();
+ nm_ip4_config_replace (last_config, ip4_config, NULL);
+ }
+ break;
+ case NM_DHCP_STATE_TIMEOUT:
+ case NM_DHCP_STATE_DONE:
+ case NM_DHCP_STATE_FAIL:
+ if (dhcp4_required) {
+ nm_log_warn (LOGD_DHCP4, "(%s): DHCPv4 timed out or failed, quitting...", ifname);
+ g_main_loop_quit (main_loop);
+ } else
+ nm_log_warn (LOGD_DHCP4, "(%s): DHCPv4 timed out or failed", ifname);
+ break;
+ default:
+ break;
+ }
+}
+
+static void
+rdisc_config_changed (NMRDisc *rdisc, NMRDiscConfigMap changed, gpointer user_data)
+{
+ static NMIP6Config *last_config = NULL;
+ NMIP6Config *existing;
+ NMIP6Config *ip6_config;
+ static int system_support = -1;
+ guint ifa_flags = 0x00;
+ int i;
+
+ 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 (tempaddr == NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR
+ || 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;
+ }
+
+ 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 (ip6_config, &gateway->address);
+ } else
+ nm_ip6_config_set_gateway (ip6_config, NULL);
+ }
+
+ if (changed & NM_RDISC_CONFIG_ADDRESSES) {
+ /* Rebuild address list from router discovery cache. */
+ nm_ip6_config_reset_addresses (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_IP_CONFIG_SOURCE_RDISC;
+ address.flags = ifa_flags;
+
+ nm_ip6_config_add_address (ip6_config, &address);
+ }
+ }
+
+ if (changed & NM_RDISC_CONFIG_ROUTES) {
+ /* Rebuild route list from router discovery cache. */
+ nm_ip6_config_reset_routes (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_IP_CONFIG_SOURCE_RDISC;
+ route.metric = priority_v6;
+
+ nm_ip6_config_add_route (ip6_config, &route);
+ }
+ }
+ }
+
+ if (changed & NM_RDISC_CONFIG_DHCP_LEVEL) {
+ /* Unsupported until systemd DHCPv6 is ready */
+ }
+
+ /* hop_limit == 0 is a special value "unspecified", so do not touch
+ * in this case */
+ if (changed & NM_RDISC_CONFIG_HOP_LIMIT && rdisc->hop_limit > 0) {
+ char val[16];
+
+ g_snprintf (val, sizeof (val), "%d", rdisc->hop_limit);
+ nm_platform_sysctl_set (nm_utils_ip6_property_path (ifname, "hop_limit"), val);
+ }
+
+ if (changed & NM_RDISC_CONFIG_MTU) {
+ char val[16];
+
+ g_snprintf (val, sizeof (val), "%d", rdisc->mtu);
+ nm_platform_sysctl_set (nm_utils_ip6_property_path (ifname, "mtu"), val);
+ }
+
+ existing = nm_ip6_config_capture (ifindex, FALSE, tempaddr);
+ if (last_config)
+ nm_ip6_config_subtract (existing, last_config);
+
+ nm_ip6_config_merge (existing, ip6_config);
+ if (!nm_ip6_config_commit (existing, ifindex))
+ nm_log_warn (LOGD_IP6, "(%s): failed to apply IPv6 config", ifname);
+
+ if (last_config) {
+ g_object_unref (last_config);
+ last_config = nm_ip6_config_new ();
+ nm_ip6_config_replace (last_config, ip6_config, NULL);
+ }
+}
+
+static void
+rdisc_ra_timeout (NMRDisc *rdisc, gpointer user_data)
+{
+ if (slaac_required) {
+ nm_log_warn (LOGD_IP6, "(%s): IPv6 timed out or failed, quitting...", ifname);
+ g_main_loop_quit (main_loop);
+ } else
+ nm_log_warn (LOGD_IP6, "(%s): IPv6 timed out or failed", ifname);
+}
+
+static gboolean
+quit_handler (gpointer user_data)
+{
+ gboolean *quit_early_ptr = user_data;
+
+ *quit_early_ptr = TRUE;
+ g_main_loop_quit (main_loop);
+ return G_SOURCE_CONTINUE;
+}
+
+static void
+setup_signals (gboolean *quit_early_ptr)
+{
+ sigset_t sigmask;
+
+ sigemptyset (&sigmask);
+ pthread_sigmask (SIG_SETMASK, &sigmask, NULL);
+
+ signal (SIGPIPE, SIG_IGN);
+ g_unix_signal_add (SIGINT, quit_handler, quit_early_ptr);
+ g_unix_signal_add (SIGTERM, quit_handler, quit_early_ptr);
+}
+
+int
+main (int argc, char *argv[])
+{
+ char *opt_log_level = NULL;
+ char *opt_log_domains = NULL;
+ gboolean debug = FALSE, g_fatal_warnings = FALSE, become_daemon = FALSE;
+ gboolean show_version = FALSE, slaac = FALSE;
+ char *bad_domains = NULL, *dhcp4_hostname = NULL, *uuid = NULL;
+ char *iid_str = NULL, *dhcp4_clientid = NULL, *dhcp4_address = NULL;
+ gs_unref_object NMDhcpManager *dhcp_mgr = NULL;
+ GError *error = NULL;
+ gboolean wrote_pidfile = FALSE;
+ gs_free char *pidfile = NULL;
+ gboolean quit_early = FALSE;
+ gs_unref_object NMDhcpClient *dhcp4_client = NULL;
+ gs_unref_object NMRDisc *rdisc = NULL;
+ GByteArray *hwaddr = NULL;
+ size_t hwaddr_len = 0;
+ gconstpointer tmp;
+ gs_free NMUtilsIPv6IfaceId *iid = NULL;
+ gint64 priority64_v4 = -1;
+ gint64 priority64_v6 = -1;
+
+ GOptionEntry options[] = {
+ /* Interface/IP config */
+ { "ifname", 'i', 0, G_OPTION_ARG_STRING, &ifname, N_("The interface to manage"), N_("eth0") },
+ { "uuid", 'u', 0, G_OPTION_ARG_STRING, &uuid, N_("Connection UUID"), N_("661e8cd0-b618-46b8-9dc9-31a52baaa16b") },
+ { "slaac", 's', 0, G_OPTION_ARG_NONE, &slaac, N_("Whether to manage IPv6 SLAAC"), NULL },
+ { "slaac-required", '6', 0, G_OPTION_ARG_NONE, &slaac_required, N_("Whether SLAAC must be successful"), NULL },
+ { "slaac-tempaddr", 't', 0, G_OPTION_ARG_INT, &tempaddr, N_("Use an IPv6 temporary privacy address"), NULL },
+ { "dhcp4", 'd', 0, G_OPTION_ARG_STRING, &dhcp4_address, N_("Current DHCPv4 address"), NULL },
+ { "dhcp4-required", '4', 0, G_OPTION_ARG_NONE, &dhcp4_required, N_("Whether DHCPv4 must be successful"), NULL },
+ { "dhcp4-clientid", 'c', 0, G_OPTION_ARG_STRING, &dhcp4_clientid, N_("Hex-encoded DHCPv4 client ID"), NULL },
+ { "dhcp4-hostname", 'h', 0, G_OPTION_ARG_STRING, &dhcp4_hostname, N_("Hostname to send to DHCP server"), N_("barbar") },
+ { "priority4", '\0', 0, G_OPTION_ARG_INT64, &priority64_v4, N_("Route priority for IPv4"), N_("0") },
+ { "priority6", '\0', 0, G_OPTION_ARG_INT64, &priority64_v6, N_("Route priority for IPv6"), N_("1024") },
+ { "iid", 'e', 0, G_OPTION_ARG_STRING, &iid_str, N_("Hex-encoded Interface Identifier"), N_("") },
+
+ /* Logging/debugging */
+ { "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", 'b', 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 },
+ {NULL}
+ };
+
+ setpgid (getpid (), getpid ());
+
+ if (!nm_main_utils_early_setup ("nm-iface-helper",
+ &argv,
+ &argc,
+ options,
+ NULL,
+ _("nm-iface-helper is a small, standalone process that manages a single network interface.")))
+ exit (1);
+
+ if (show_version) {
+ fprintf (stdout, NM_DIST_VERSION "\n");
+ exit (0);
+ }
+
+ if (!ifname || !uuid) {
+ fprintf (stderr, _("An interface name and UUID are required\n"));
+ exit (1);
+ }
+
+ 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);
+ }
+
+ pidfile = g_strdup_printf (NMIH_PID_FILE_FMT, ifindex);
+ g_assert (pidfile);
+
+ /* check pid file */
+ if (nm_main_utils_check_pidfile (pidfile, "nm-iface-helper"))
+ exit (1);
+
+ if (become_daemon && !debug) {
+ if (daemon (0, 0) < 0) {
+ int saved_errno;
+
+ saved_errno = errno;
+ fprintf (stderr, _("Could not daemonize: %s [error %u]\n"),
+ g_strerror (saved_errno),
+ saved_errno);
+ exit (1);
+ }
+ if (nm_main_utils_write_pidfile (pidfile))
+ wrote_pidfile = TRUE;
+ }
+
+ /* Set up unix signal handling - before creating threads, but after daemonizing! */
+ main_loop = g_main_loop_new (NULL, FALSE);
+ setup_signals (&quit_early);
+
+ if (g_fatal_warnings) {
+ GLogLevelFlags fatal_mask;
+
+ fatal_mask = g_log_set_always_fatal (G_LOG_FATAL_MASK);
+ fatal_mask |= G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL;
+ g_log_set_always_fatal (fatal_mask);
+ }
+
+ nm_logging_syslog_openlog (debug);
+
+#if !GLIB_CHECK_VERSION (2, 35, 0)
+ g_type_init ();
+#endif
+
+ nm_log_info (LOGD_CORE, "nm-iface-helper (version " NM_DIST_VERSION ") is starting...");
+
+ /* Set up platform interaction layer */
+ nm_linux_platform_setup ();
+
+ ifindex = nm_platform_link_get_ifindex (ifname);
+ if (ifindex <= 0) {
+ fprintf (stderr, _("Failed to find interface index for %s\n"), ifname);
+ exit (1);
+ }
+
+ tmp = nm_platform_link_get_address (ifindex, &hwaddr_len);
+ if (tmp) {
+ hwaddr = g_byte_array_sized_new (hwaddr_len);
+ g_byte_array_append (hwaddr, tmp, hwaddr_len);
+ }
+
+ if (iid_str) {
+ GBytes *bytes;
+ gsize ignored = 0;
+
+ bytes = nm_utils_hexstr2bin (iid_str);
+ if (!bytes || g_bytes_get_size (bytes) != sizeof (*iid)) {
+ fprintf (stderr, _("(%s): Invalid IID %s\n"), ifname, iid_str);
+ exit (1);
+ }
+ iid = g_bytes_unref_to_data (bytes, &ignored);
+ }
+
+ if (priority64_v4 >= 0 && priority64_v4 <= G_MAXUINT32)
+ priority_v4 = (guint32) priority64_v4;
+
+ if (priority64_v6 >= 0 && priority64_v6 <= G_MAXUINT32)
+ priority_v6 = (guint32) priority64_v6;
+
+ if (dhcp4_address) {
+ nm_platform_sysctl_set (nm_utils_ip4_property_path (ifname, "promote_secondaries"), "1");
+
+ /* Initialize DHCP manager */
+ dhcp_mgr = nm_dhcp_manager_get ();
+ g_assert (dhcp_mgr != NULL);
+
+ dhcp4_client = nm_dhcp_manager_start_ip4 (dhcp_mgr,
+ ifname,
+ ifindex,
+ hwaddr,
+ uuid,
+ priority_v4,
+ !!dhcp4_hostname,
+ dhcp4_hostname,
+ dhcp4_clientid,
+ 45,
+ NULL,
+ dhcp4_address);
+ g_assert (dhcp4_client);
+ g_signal_connect (dhcp4_client,
+ NM_DHCP_CLIENT_SIGNAL_STATE_CHANGED,
+ G_CALLBACK (dhcp4_state_changed),
+ NULL);
+ }
+
+ if (slaac) {
+ nm_platform_link_set_user_ipv6ll_enabled (ifindex, TRUE);
+
+ rdisc = nm_lndp_rdisc_new (ifindex, ifname);
+ g_assert (rdisc);
+
+ if (iid)
+ nm_rdisc_set_iid (rdisc, *iid);
+
+ nm_platform_sysctl_set (nm_utils_ip6_property_path (ifname, "accept_ra"), "1");
+ nm_platform_sysctl_set (nm_utils_ip6_property_path (ifname, "accept_ra_defrtr"), "0");
+ nm_platform_sysctl_set (nm_utils_ip6_property_path (ifname, "accept_ra_pinfo"), "0");
+ nm_platform_sysctl_set (nm_utils_ip6_property_path (ifname, "accept_ra_rtr_pref"), "0");
+
+ g_signal_connect (rdisc,
+ NM_RDISC_CONFIG_CHANGED,
+ G_CALLBACK (rdisc_config_changed),
+ NULL);
+ g_signal_connect (rdisc,
+ NM_RDISC_RA_TIMEOUT,
+ G_CALLBACK (rdisc_ra_timeout),
+ NULL);
+ nm_rdisc_start (rdisc);
+ }
+
+ if (!quit_early)
+ g_main_loop_run (main_loop);
+
+ g_clear_pointer (&hwaddr, g_byte_array_unref);
+
+ nm_logging_syslog_closelog ();
+
+ if (pidfile && wrote_pidfile)
+ unlink (pidfile);
+
+ nm_log_info (LOGD_CORE, "exiting");
+ exit (0);
+}
+
+/*******************************************************/
+/* Stub functions */
+
+gconstpointer nm_config_get (void);
+const char *nm_config_get_dhcp_client (gpointer unused);
+gboolean nm_config_get_configure_and_quit (gpointer unused);
+gconstpointer nm_dbus_manager_get (void);
+void nm_dbus_manager_register_exported_type (gpointer unused, GType gtype, gconstpointer unused2);
+void nm_dbus_manager_register_object (gpointer unused, const char *path, gpointer object);
+
+gconstpointer
+nm_config_get (void)
+{
+ return GUINT_TO_POINTER (1);
+}
+
+const char *
+nm_config_get_dhcp_client (gpointer unused)
+{
+ return "internal";
+}
+
+gboolean
+nm_config_get_configure_and_quit (gpointer unused)
+{
+ return TRUE;
+}
+
+gconstpointer
+nm_dbus_manager_get (void)
+{
+ return GUINT_TO_POINTER (1);
+}
+
+void
+nm_dbus_manager_register_exported_type (gpointer unused, GType gtype, gconstpointer unused2)
+{
+}
+
+void
+nm_dbus_manager_register_object (gpointer unused, const char *path, gpointer object)
+{
+}
+
diff --git a/src/nm-ip4-config-glue.h b/src/nm-ip4-config-glue.h
index 738dff922..9488be9b0 100644
--- a/src/nm-ip4-config-glue.h
+++ b/src/nm-ip4-config-glue.h
@@ -68,6 +68,6 @@ const DBusGObjectInfo dbus_glib_nm_ip4_config_object_info = { 1,
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"
+"org.freedesktop.NetworkManager.IP4Config\0Addresses\0addresses\0read\0org.freedesktop.NetworkManager.IP4Config\0AddressData\0address_data\0read\0org.freedesktop.NetworkManager.IP4Config\0Gateway\0gateway\0read\0org.freedesktop.NetworkManager.IP4Config\0Routes\0routes\0read\0org.freedesktop.NetworkManager.IP4Config\0RouteData\0route_data\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 e27c0436f..fd4667802 100644
--- a/src/nm-ip4-config.c
+++ b/src/nm-ip4-config.c
@@ -19,18 +19,20 @@
* Copyright (C) 2006 - 2008 Novell, Inc.
*/
+#include "config.h"
+
#include <string.h>
+#include <arpa/inet.h>
#include "nm-ip4-config.h"
-#include "libgsystem.h"
-#include "nm-platform.h"
#include "nm-utils.h"
+#include "nm-platform.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"
+#include "nm-core-internal.h"
G_DEFINE_TYPE (NMIP4Config, nm_ip4_config, G_TYPE_OBJECT)
@@ -51,6 +53,7 @@ typedef struct {
char *nis_domain;
GArray *wins;
guint32 mtu;
+ NMIPConfigSource mtu_source;
} NMIP4ConfigPrivate;
/* internal guint32 are assigned to gobject properties of type uint. Ensure, that uint is large enough */
@@ -59,9 +62,11 @@ G_STATIC_ASSERT (G_MAXUINT >= 0xFFFFFFFF);
enum {
PROP_0,
- PROP_GATEWAY,
+ PROP_ADDRESS_DATA,
PROP_ADDRESSES,
+ PROP_ROUTE_DATA,
PROP_ROUTES,
+ PROP_GATEWAY,
PROP_NAMESERVERS,
PROP_DOMAINS,
PROP_SEARCHES,
@@ -176,7 +181,7 @@ nm_ip4_config_capture (int ifindex, gboolean capture_resolv_conf)
NMIP4Config *config;
NMIP4ConfigPrivate *priv;
guint i;
- guint lowest_metric = G_MAXUINT;
+ guint32 lowest_metric = G_MAXUINT32;
guint32 old_gateway = 0;
gboolean has_gateway = FALSE;
@@ -191,14 +196,14 @@ nm_ip4_config_capture (int ifindex, gboolean capture_resolv_conf)
g_array_unref (priv->routes);
priv->addresses = nm_platform_ip4_address_get_all (ifindex);
- priv->routes = nm_platform_ip4_route_get_all (ifindex, TRUE);
+ priv->routes = nm_platform_ip4_route_get_all (ifindex, NM_PLATFORM_GET_ROUTE_MODE_ALL);
/* 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 (NM_PLATFORM_IP_ROUTE_IS_DEFAULT (route)) {
if (route->metric < lowest_metric) {
priv->gateway = route->gateway;
lowest_metric = route->metric;
@@ -235,6 +240,8 @@ nm_ip4_config_capture (int ifindex, gboolean capture_resolv_conf)
}
/* actually, nobody should be connected to the signal, just to be sure, notify */
+ _NOTIFY (config, PROP_ADDRESS_DATA);
+ _NOTIFY (config, PROP_ROUTE_DATA);
_NOTIFY (config, PROP_ADDRESSES);
_NOTIFY (config, PROP_ROUTES);
if (priv->gateway != old_gateway)
@@ -244,42 +251,36 @@ nm_ip4_config_capture (int ifindex, gboolean capture_resolv_conf)
}
gboolean
-nm_ip4_config_commit (const NMIP4Config *config, int ifindex)
+nm_ip4_config_commit (const NMIP4Config *config, int ifindex, guint32 default_route_metric)
{
NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- int mtu = nm_ip4_config_get_mtu (config);
+ guint32 mtu = nm_ip4_config_get_mtu (config);
int i;
g_return_val_if_fail (ifindex > 0, FALSE);
g_return_val_if_fail (config != NULL, FALSE);
/* Addresses */
- nm_platform_ip4_address_sync (ifindex, priv->addresses);
+ nm_platform_ip4_address_sync (ifindex, priv->addresses, default_route_metric);
/* Routes */
{
int count = nm_ip4_config_get_num_routes (config);
GArray *routes = g_array_sized_new (FALSE, FALSE, sizeof (NMPlatformIP4Route), count);
- NMPlatformIP4Route route;
+ const NMPlatformIP4Route *route;
gboolean success;
for (i = 0; i < count; i++) {
- memcpy (&route, nm_ip4_config_get_route (config, i), sizeof (route));
+ route = nm_ip4_config_get_route (config, i);
/* 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))
+ 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);
+ g_array_append_vals (routes, route, 1);
}
success = nm_platform_ip4_route_sync (ifindex, routes);
@@ -296,7 +297,7 @@ nm_ip4_config_commit (const NMIP4Config *config, int ifindex)
}
void
-nm_ip4_config_merge_setting (NMIP4Config *config, NMSettingIP4Config *setting, int default_route_metric)
+nm_ip4_config_merge_setting (NMIP4Config *config, NMSettingIPConfig *setting, guint32 default_route_metric)
{
guint naddresses, nroutes, nnameservers, nsearches;
int i;
@@ -304,74 +305,83 @@ nm_ip4_config_merge_setting (NMIP4Config *config, NMSettingIP4Config *setting, i
if (!setting)
return;
+ g_return_if_fail (NM_IS_SETTING_IP4_CONFIG (setting));
+
g_object_freeze_notify (G_OBJECT (config));
- 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);
+ naddresses = nm_setting_ip_config_get_num_addresses (setting);
+ nroutes = nm_setting_ip_config_get_num_routes (setting);
+ nnameservers = nm_setting_ip_config_get_num_dns (setting);
+ nsearches = nm_setting_ip_config_get_num_dns_searches (setting);
/* Gateway */
- if (nm_setting_ip4_config_get_never_default (setting))
+ if (nm_setting_ip_config_get_never_default (setting))
nm_ip4_config_set_never_default (config, TRUE);
- else if (nm_setting_ip4_config_get_ignore_auto_routes (setting))
+ else if (nm_setting_ip_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));
+ if (nm_setting_ip_config_get_gateway (setting)) {
+ guint32 gateway;
- if (gateway) {
- nm_ip4_config_set_gateway (config, gateway);
- break;
- }
+ inet_pton (AF_INET, nm_setting_ip_config_get_gateway (setting), &gateway);
+ nm_ip4_config_set_gateway (config, gateway);
}
/* 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));
+ NMIPAddress *s_addr = nm_setting_ip_config_get_address (setting, i);
+ GVariant *label;
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);
+ nm_ip_address_get_address_binary (s_addr, &address.address);
+ address.plen = nm_ip_address_get_prefix (s_addr);
address.lifetime = NM_PLATFORM_LIFETIME_PERMANENT;
address.preferred = NM_PLATFORM_LIFETIME_PERMANENT;
- address.source = NM_PLATFORM_SOURCE_USER;
+ address.source = NM_IP_CONFIG_SOURCE_USER;
+
+ label = nm_ip_address_get_attribute (s_addr, "label");
if (label)
- g_strlcpy (address.label, label, sizeof (address.label));
+ g_strlcpy (address.label, g_variant_get_string (label, NULL), sizeof (address.label));
nm_ip4_config_add_address (config, &address);
}
/* Routes */
- if (nm_setting_ip4_config_get_ignore_auto_routes (setting))
+ if (nm_setting_ip_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);
+ NMIPRoute *s_route = nm_setting_ip_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)
+ nm_ip_route_get_dest_binary (s_route, &route.network);
+ route.plen = nm_ip_route_get_prefix (s_route);
+ nm_ip_route_get_next_hop_binary (s_route, &route.gateway);
+ if (nm_ip_route_get_metric (s_route) == -1)
route.metric = default_route_metric;
- route.source = NM_PLATFORM_SOURCE_USER;
+ else
+ route.metric = nm_ip_route_get_metric (s_route);
+ route.source = NM_IP_CONFIG_SOURCE_USER;
+
+ g_assert (route.plen > 0);
nm_ip4_config_add_route (config, &route);
}
/* DNS */
- if (nm_setting_ip4_config_get_ignore_auto_dns (setting)) {
+ if (nm_setting_ip_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 < nnameservers; i++) {
+ guint32 ip;
+
+ if (inet_pton (AF_INET, nm_setting_ip_config_get_dns (setting, i), &ip) == 1)
+ nm_ip4_config_add_nameserver (config, ip);
+ }
for (i = 0; i < nsearches; i++)
- nm_ip4_config_add_search (config, nm_setting_ip4_config_get_dns_search (setting, i));
+ nm_ip4_config_add_search (config, nm_setting_ip_config_get_dns_search (setting, i));
g_object_thaw_notify (G_OBJECT (config));
}
@@ -379,17 +389,17 @@ nm_ip4_config_merge_setting (NMIP4Config *config, NMSettingIP4Config *setting, i
NMSetting *
nm_ip4_config_create_setting (const NMIP4Config *config)
{
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
guint32 gateway;
guint naddresses, nroutes, nnameservers, nsearches;
const char *method = NULL;
int i;
- s_ip4 = NM_SETTING_IP4_CONFIG (nm_setting_ip4_config_new ());
+ s_ip4 = NM_SETTING_IP_CONFIG (nm_setting_ip4_config_new ());
if (!config) {
g_object_set (s_ip4,
- NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_DISABLED,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_DISABLED,
NULL);
return NM_SETTING (s_ip4);
}
@@ -403,7 +413,7 @@ nm_ip4_config_create_setting (const NMIP4Config *config)
/* Addresses */
for (i = 0; i < naddresses; i++) {
const NMPlatformIP4Address *address = nm_ip4_config_get_address (config, i);
- NMIP4Address *s_addr;
+ NMIPAddress *s_addr;
/* Detect dynamic address */
if (address->lifetime != NM_PLATFORM_LIFETIME_PERMANENT) {
@@ -415,61 +425,58 @@ nm_ip4_config_create_setting (const NMIP4Config *config)
if (!method)
method = NM_SETTING_IP4_CONFIG_METHOD_MANUAL;
- s_addr = nm_ip4_address_new ();
+ s_addr = nm_ip_address_new_binary (AF_INET, &address->address, address->plen, NULL);
+ if (*address->label)
+ nm_ip_address_set_attribute (s_addr, "label", g_variant_new_string (address->label));
- 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);
+ nm_setting_ip_config_add_address (s_ip4, s_addr);
+ nm_ip_address_unref (s_addr);
+ }
- 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);
+ /* Gateway */
+ if ( gateway
+ && nm_setting_ip_config_get_num_addresses (s_ip4) > 0) {
+ g_object_set (s_ip4,
+ NM_SETTING_IP_CONFIG_GATEWAY, nm_utils_inet4_ntop (gateway, NULL),
+ NULL);
}
/* 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);
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_METHOD, method, NULL);
/* Routes */
for (i = 0; i < nroutes; i++) {
const NMPlatformIP4Route *route = nm_ip4_config_get_route (config, i);
- NMIP4Route *s_route;
+ NMIPRoute *s_route;
/* Ignore default route. */
if (!route->plen)
continue;
/* Ignore routes provided by external sources */
- if (route->source != NM_PLATFORM_SOURCE_USER)
+ if (route->source != NM_IP_CONFIG_SOURCE_USER)
continue;
- 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);
-
- nm_setting_ip4_config_add_route (s_ip4, s_route);
- nm_ip4_route_unref (s_route);
+ s_route = nm_ip_route_new_binary (AF_INET,
+ &route->network, route->plen,
+ &route->gateway, route->metric,
+ NULL);
+ nm_setting_ip_config_add_route (s_ip4, s_route);
+ nm_ip_route_unref (s_route);
}
/* DNS */
for (i = 0; i < nnameservers; i++) {
guint32 nameserver = nm_ip4_config_get_nameserver (config, i);
- nm_setting_ip4_config_add_dns (s_ip4, nameserver);
+ nm_setting_ip_config_add_dns (s_ip4, nm_utils_inet4_ntop (nameserver, NULL));
}
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);
+ nm_setting_ip_config_add_dns_search (s_ip4, search);
}
return NM_SETTING (s_ip4);
@@ -517,7 +524,8 @@ nm_ip4_config_merge (NMIP4Config *dst, const NMIP4Config *src)
/* MTU */
if (!nm_ip4_config_get_mtu (dst))
- nm_ip4_config_set_mtu (dst, nm_ip4_config_get_mtu (src));
+ nm_ip4_config_set_mtu (dst, nm_ip4_config_get_mtu (src),
+ nm_ip4_config_get_mtu_source (src));
/* NIS */
for (i = 0; i < nm_ip4_config_get_num_nis_servers (src); i++)
@@ -583,6 +591,9 @@ nm_ip4_config_subtract (NMIP4Config *dst, const NMIP4Config *src)
if (nm_ip4_config_get_gateway (src) == nm_ip4_config_get_gateway (dst))
nm_ip4_config_set_gateway (dst, 0);
+ if (!nm_ip4_config_get_num_addresses (dst))
+ nm_ip4_config_set_gateway (dst, 0);
+
/* routes */
for (i = 0; i < nm_ip4_config_get_num_routes (src); i++) {
const NMPlatformIP4Route *src_route = nm_ip4_config_get_route (src, i);
@@ -631,7 +642,7 @@ nm_ip4_config_subtract (NMIP4Config *dst, const NMIP4Config *src)
/* MTU */
if (nm_ip4_config_get_mtu (src) == nm_ip4_config_get_mtu (dst))
- nm_ip4_config_set_mtu (dst, 0);
+ nm_ip4_config_set_mtu (dst, 0, NM_IP_CONFIG_SOURCE_UNKNOWN);
/* NIS */
for (i = 0; i < nm_ip4_config_get_num_nis_servers (src); i++) {
@@ -871,7 +882,7 @@ nm_ip4_config_replace (NMIP4Config *dst, const NMIP4Config *src, gboolean *relev
/* mtu */
if (src_priv->mtu != dst_priv->mtu) {
- nm_ip4_config_set_mtu (dst, src_priv->mtu);
+ nm_ip4_config_set_mtu (dst, src_priv->mtu, src_priv->mtu_source);
has_minor_changes = TRUE;
}
@@ -927,8 +938,8 @@ nm_ip4_config_dump (const NMIP4Config *config, const char *detail)
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));
+ g_message (" mss: %"G_GUINT32_FORMAT, nm_ip4_config_get_mss (config));
+ g_message (" mtu: %"G_GUINT32_FORMAT, nm_ip4_config_get_mtu (config));
/* NIS */
for (i = 0; i < nm_ip4_config_get_num_nis_servers (config); i++) {
@@ -936,7 +947,7 @@ nm_ip4_config_dump (const NMIP4Config *config, const char *detail)
g_message (" nis: %s", nm_utils_inet4_ntop (tmp, NULL));
}
- g_message (" nisdmn: %s", nm_ip4_config_get_nis_domain (config));
+ g_message (" nisdmn: %s", str_if_set (nm_ip4_config_get_nis_domain (config), "(none)"));
/* WINS */
for (i = 0; i < nm_ip4_config_get_num_wins (config); i++) {
@@ -1009,6 +1020,7 @@ nm_ip4_config_reset_addresses (NMIP4Config *config)
if (priv->addresses->len != 0) {
g_array_set_size (priv->addresses, 0);
+ _NOTIFY (config, PROP_ADDRESS_DATA);
_NOTIFY (config, PROP_ADDRESSES);
}
}
@@ -1052,7 +1064,7 @@ nm_ip4_config_add_address (NMIP4Config *config, const NMPlatformIP4Address *new)
* 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)
+ if ( (new->source == NM_IP_CONFIG_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;
@@ -1066,6 +1078,7 @@ nm_ip4_config_add_address (NMIP4Config *config, const NMPlatformIP4Address *new)
g_array_append_val (priv->addresses, *new);
NOTIFY:
+ _NOTIFY (config, PROP_ADDRESS_DATA);
_NOTIFY (config, PROP_ADDRESSES);
}
@@ -1077,6 +1090,7 @@ nm_ip4_config_del_address (NMIP4Config *config, guint i)
g_return_if_fail (i < priv->addresses->len);
g_array_remove_index (priv->addresses, i);
+ _NOTIFY (config, PROP_ADDRESS_DATA);
_NOTIFY (config, PROP_ADDRESSES);
}
@@ -1121,6 +1135,7 @@ nm_ip4_config_reset_routes (NMIP4Config *config)
if (priv->routes->len != 0) {
g_array_set_size (priv->routes, 0);
+ _NOTIFY (config, PROP_ROUTE_DATA);
_NOTIFY (config, PROP_ROUTES);
}
}
@@ -1139,10 +1154,11 @@ void
nm_ip4_config_add_route (NMIP4Config *config, const NMPlatformIP4Route *new)
{
NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- NMPlatformSource old_source;
+ NMIPConfigSource old_source;
int i;
g_return_if_fail (new != NULL);
+ g_return_if_fail (new->plen > 0);
for (i = 0; i < priv->routes->len; i++ ) {
NMPlatformIP4Route *item = &g_array_index (priv->routes, NMPlatformIP4Route, i);
@@ -1160,6 +1176,7 @@ nm_ip4_config_add_route (NMIP4Config *config, const NMPlatformIP4Route *new)
g_array_append_val (priv->routes, *new);
NOTIFY:
+ _NOTIFY (config, PROP_ROUTE_DATA);
_NOTIFY (config, PROP_ROUTES);
}
@@ -1171,6 +1188,7 @@ nm_ip4_config_del_route (NMIP4Config *config, guint i)
g_return_if_fail (i < priv->routes->len);
g_array_remove_index (priv->routes, i);
+ _NOTIFY (config, PROP_ROUTE_DATA);
_NOTIFY (config, PROP_ROUTES);
}
@@ -1190,6 +1208,58 @@ nm_ip4_config_get_route (const NMIP4Config *config, guint i)
return &g_array_index (priv->routes, NMPlatformIP4Route, i);
}
+const NMPlatformIP4Route *
+nm_ip4_config_get_direct_route_for_host (const NMIP4Config *config, guint32 host)
+{
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
+ guint i;
+ NMPlatformIP4Route *best_route = NULL;
+
+ g_return_val_if_fail (host, NULL);
+
+ for (i = 0; i < priv->routes->len; i++) {
+ NMPlatformIP4Route *item = &g_array_index (priv->routes, NMPlatformIP4Route, i);
+
+ if (item->gateway != 0)
+ continue;
+
+ if (best_route && best_route->plen > item->plen)
+ continue;
+
+ if (nm_utils_ip4_address_clear_host_address (host, item->plen) != nm_utils_ip4_address_clear_host_address (item->network, item->plen))
+ continue;
+
+ if (best_route && best_route->metric <= item->metric)
+ continue;
+
+ best_route = item;
+ }
+
+ return best_route;
+}
+
+const NMPlatformIP4Address *
+nm_ip4_config_get_subnet_for_host (const NMIP4Config *config, guint32 host)
+{
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
+ guint i;
+ NMPlatformIP4Address *subnet = NULL;
+
+ g_return_val_if_fail (host, NULL);
+
+ for (i = 0; i < priv->addresses->len; i++) {
+ NMPlatformIP4Address *item = &g_array_index (priv->addresses, NMPlatformIP4Address, i);
+
+ if (subnet && subnet->plen >= item->plen)
+ continue;
+ if (nm_utils_ip4_address_clear_host_address (host, item->plen) != nm_utils_ip4_address_clear_host_address (item->address, item->plen))
+ continue;
+ subnet = item;
+ }
+
+ return subnet;
+}
+
/******************************************************************/
void
@@ -1503,11 +1573,15 @@ nm_ip4_config_get_wins (const NMIP4Config *config, guint i)
/******************************************************************/
void
-nm_ip4_config_set_mtu (NMIP4Config *config, guint32 mtu)
+nm_ip4_config_set_mtu (NMIP4Config *config, guint32 mtu, NMIPConfigSource source)
{
NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
- priv->mtu = mtu;
+ if (source > priv->mtu_source) {
+ priv->mtu = mtu;
+ priv->mtu_source = source;
+ } else if (source == priv->mtu_source && (!priv->mtu || priv->mtu > mtu))
+ priv->mtu = mtu;
}
guint32
@@ -1518,6 +1592,14 @@ nm_ip4_config_get_mtu (const NMIP4Config *config)
return priv->mtu;
}
+NMIPConfigSource
+nm_ip4_config_get_mtu_source (const NMIP4Config *config)
+{
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
+
+ return priv->mtu_source;
+}
+
/******************************************************************/
static inline void
@@ -1652,6 +1734,15 @@ finalize (GObject *object)
}
static void
+gvalue_destroy (gpointer data)
+{
+ GValue *value = (GValue *) data;
+
+ g_value_unset (value);
+ g_slice_free (GValue, value);
+}
+
+static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
@@ -1659,11 +1750,41 @@ get_property (GObject *object, guint prop_id,
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);
+ case PROP_ADDRESS_DATA:
+ {
+ 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);
+ GHashTable *addr_hash;
+ GValue *val;
+
+ addr_hash = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, gvalue_destroy);
+
+ val = g_slice_new0 (GValue);
+ g_value_init (val, G_TYPE_STRING);
+ g_value_set_string (val, nm_utils_inet4_ntop (address->address, NULL));
+ g_hash_table_insert (addr_hash, "address", val);
+
+ val = g_slice_new0 (GValue);
+ g_value_init (val, G_TYPE_UINT);
+ g_value_set_uint (val, address->plen);
+ g_hash_table_insert (addr_hash, "prefix", val);
+
+ if (*address->label) {
+ val = g_slice_new0 (GValue);
+ g_value_init (val, G_TYPE_STRING);
+ g_value_set_string (val, address->label);
+ g_hash_table_insert (addr_hash, "label", val);
+ }
+
+ g_ptr_array_add (addresses, addr_hash);
+ }
+
+ g_value_take_boxed (value, addresses);
+ }
break;
case PROP_ADDRESSES:
{
@@ -1674,10 +1795,11 @@ get_property (GObject *object, guint prop_id,
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);
+ guint32 gateway = i == 0 ? priv->gateway : 0;
g_array_append_val (array, address->address);
g_array_append_val (array, address->plen);
- g_array_append_val (array, priv->gateway);
+ g_array_append_val (array, gateway);
g_ptr_array_add (addresses, array);
}
@@ -1685,6 +1807,47 @@ get_property (GObject *object, guint prop_id,
g_value_take_boxed (value, addresses);
}
break;
+ case PROP_ROUTE_DATA:
+ {
+ 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);
+ GHashTable *route_hash;
+ GValue *val;
+
+ route_hash = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, gvalue_destroy);
+
+ val = g_slice_new0 (GValue);
+ g_value_init (val, G_TYPE_STRING);
+ g_value_set_string (val, nm_utils_inet4_ntop (route->network, NULL));
+ g_hash_table_insert (route_hash, "dest", val);
+
+ val = g_slice_new0 (GValue);
+ g_value_init (val, G_TYPE_UINT);
+ g_value_set_uint (val, route->plen);
+ g_hash_table_insert (route_hash, "prefix", val);
+
+ if (route->gateway) {
+ val = g_slice_new0 (GValue);
+ g_value_init (val, G_TYPE_STRING);
+ g_value_set_string (val, nm_utils_inet4_ntop (route->gateway, NULL));
+ g_hash_table_insert (route_hash, "next-hop", val);
+ }
+
+ val = g_slice_new0 (GValue);
+ g_value_init (val, G_TYPE_UINT);
+ g_value_set_uint (val, route->metric);
+ g_hash_table_insert (route_hash, "metric", val);
+
+ g_ptr_array_add (routes, route_hash);
+ }
+
+ g_value_take_boxed (value, routes);
+ }
+ break;
case PROP_ROUTES:
{
GPtrArray *routes = g_ptr_array_new ();
@@ -1693,8 +1856,14 @@ get_property (GObject *object, guint prop_id,
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);
+ GArray *array;
+
+ /* legacy versions of nm_ip4_route_set_prefix() in libnm-util assert that the
+ * plen is positive. Skip the default routes not to break older clients. */
+ if (NM_PLATFORM_IP_ROUTE_IS_DEFAULT (route))
+ continue;
+ 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);
@@ -1706,6 +1875,12 @@ get_property (GObject *object, guint prop_id,
g_value_take_boxed (value, routes);
}
break;
+ 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_NAMESERVERS:
g_value_set_boxed (value, priv->nameservers);
break;
@@ -1734,48 +1909,51 @@ nm_ip4_config_class_init (NMIP4ConfigClass *config_class)
object_class->get_property = get_property;
object_class->finalize = finalize;
- obj_properties[PROP_GATEWAY] =
- g_param_spec_string (NM_IP4_CONFIG_GATEWAY,
- "Gateway",
- "IP4 gateway",
- NULL,
- G_PARAM_READABLE);
+ obj_properties[PROP_ADDRESS_DATA] =
+ g_param_spec_boxed (NM_IP4_CONFIG_ADDRESS_DATA, "", "",
+ DBUS_TYPE_NM_IP_ADDRESSES,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS);
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_param_spec_boxed (NM_IP4_CONFIG_ADDRESSES, "", "",
+ DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UINT,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS);
+ obj_properties[PROP_ROUTE_DATA] =
+ g_param_spec_boxed (NM_IP4_CONFIG_ROUTE_DATA, "", "",
+ DBUS_TYPE_NM_IP_ROUTES,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS);
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);
+ g_param_spec_boxed (NM_IP4_CONFIG_ROUTES, "", "",
+ DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UINT,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS);
+ obj_properties[PROP_GATEWAY] =
+ g_param_spec_string (NM_IP4_CONFIG_GATEWAY, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS);
obj_properties[PROP_NAMESERVERS] =
- g_param_spec_boxed (NM_IP4_CONFIG_NAMESERVERS,
- "Nameservers",
- "DNS list",
+ g_param_spec_boxed (NM_IP4_CONFIG_NAMESERVERS, "", "",
DBUS_TYPE_G_UINT_ARRAY,
- G_PARAM_READABLE);
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS);
obj_properties[PROP_DOMAINS] =
- g_param_spec_boxed (NM_IP4_CONFIG_DOMAINS,
- "Domains",
- "Domains",
+ g_param_spec_boxed (NM_IP4_CONFIG_DOMAINS, "", "",
DBUS_TYPE_G_ARRAY_OF_STRING,
- G_PARAM_READABLE);
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS);
obj_properties[PROP_SEARCHES] =
- g_param_spec_boxed (NM_IP4_CONFIG_SEARCHES,
- "Searches",
- "Searches",
+ g_param_spec_boxed (NM_IP4_CONFIG_SEARCHES, "", "",
DBUS_TYPE_G_ARRAY_OF_STRING,
- G_PARAM_READABLE);
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS);
obj_properties[PROP_WINS_SERVERS] =
- g_param_spec_boxed (NM_IP4_CONFIG_WINS_SERVERS,
- "WinsServers",
- "WINS server list",
+ g_param_spec_boxed (NM_IP4_CONFIG_WINS_SERVERS, "", "",
DBUS_TYPE_G_UINT_ARRAY,
- G_PARAM_READABLE);
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, LAST_PROP, obj_properties);
diff --git a/src/nm-ip4-config.h b/src/nm-ip4-config.h
index c9096bb38..5ac455d84 100644
--- a/src/nm-ip4-config.h
+++ b/src/nm-ip4-config.h
@@ -18,12 +18,12 @@
* Copyright (C) 2008–2013 Red Hat, Inc.
*/
-#ifndef NM_IP4_CONFIG_H
-#define NM_IP4_CONFIG_H
+#ifndef __NETWORKMANAGER_IP4_CONFIG_H__
+#define __NETWORKMANAGER_IP4_CONFIG_H__
#include <glib-object.h>
-#include "nm-platform.h"
+#include "nm-types.h"
#include "nm-setting-ip4-config.h"
#define NM_TYPE_IP4_CONFIG (nm_ip4_config_get_type ())
@@ -33,22 +33,26 @@
#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))
-typedef struct {
+struct _NMIP4Config {
GObject parent;
-} NMIP4Config;
+};
typedef struct {
GObjectClass parent;
} NMIP4ConfigClass;
+#define NM_IP4_CONFIG_ADDRESS_DATA "address-data"
+#define NM_IP4_CONFIG_ROUTE_DATA "route-data"
#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_SEARCHES "searches"
#define NM_IP4_CONFIG_WINS_SERVERS "wins-servers"
+/* deprecated */
+#define NM_IP4_CONFIG_ADDRESSES "addresses"
+#define NM_IP4_CONFIG_ROUTES "routes"
+
GType nm_ip4_config_get_type (void);
@@ -60,8 +64,8 @@ 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);
+gboolean nm_ip4_config_commit (const NMIP4Config *config, int ifindex, guint32 default_route_metric);
+void nm_ip4_config_merge_setting (NMIP4Config *config, NMSettingIPConfig *setting, guint32 default_route_metric);
NMSetting *nm_ip4_config_create_setting (const NMIP4Config *config);
/* Utility functions */
@@ -92,6 +96,9 @@ 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);
+const NMPlatformIP4Route *nm_ip4_config_get_direct_route_for_host (const NMIP4Config *config, guint32 host);
+const NMPlatformIP4Address *nm_ip4_config_get_subnet_for_host (const NMIP4Config *config, guint32 host);
+
/* Nameservers */
void nm_ip4_config_reset_nameservers (NMIP4Config *config);
void nm_ip4_config_add_nameserver (NMIP4Config *config, guint32 nameserver);
@@ -134,8 +141,9 @@ 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);
+void nm_ip4_config_set_mtu (NMIP4Config *config, guint32 mtu, NMIPConfigSource source);
guint32 nm_ip4_config_get_mtu (const NMIP4Config *config);
+NMIPConfigSource nm_ip4_config_get_mtu_source (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);
@@ -146,4 +154,4 @@ gboolean nm_ip4_config_equal (const NMIP4Config *a, const NMIP4Config *b);
gboolean nm_ip4_config_capture_resolv_conf (GArray *nameservers,
const char *rc_contents);
-#endif /* NM_IP4_CONFIG_H */
+#endif /* __NETWORKMANAGER_IP4_CONFIG_H__ */
diff --git a/src/nm-ip6-config-glue.h b/src/nm-ip6-config-glue.h
index 62fbe1c56..87836ebb6 100644
--- a/src/nm-ip6-config-glue.h
+++ b/src/nm-ip6-config-glue.h
@@ -68,6 +68,6 @@ const DBusGObjectInfo dbus_glib_nm_ip6_config_object_info = { 1,
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"
+"org.freedesktop.NetworkManager.IP6Config\0Addresses\0addresses\0read\0org.freedesktop.NetworkManager.IP6Config\0AddressData\0address_data\0read\0org.freedesktop.NetworkManager.IP6Config\0Gateway\0gateway\0read\0org.freedesktop.NetworkManager.IP6Config\0Routes\0routes\0read\0org.freedesktop.NetworkManager.IP6Config\0RouteData\0route_data\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 aaf5e7016..db64e7261 100644
--- a/src/nm-ip6-config.c
+++ b/src/nm-ip6-config.c
@@ -19,14 +19,16 @@
* Copyright (C) 2006 - 2008 Novell, Inc.
*/
+#include "config.h"
+
#include <string.h>
+#include <arpa/inet.h>
#include "nm-ip6-config.h"
#include "nm-glib-compat.h"
-#include "libgsystem.h"
-#include "nm-platform.h"
#include "nm-utils.h"
+#include "nm-platform.h"
#include "nm-dbus-manager.h"
#include "nm-dbus-glib-types.h"
#include "nm-ip6-config-glue.h"
@@ -52,9 +54,11 @@ typedef struct {
enum {
PROP_0,
- PROP_GATEWAY,
+ PROP_ADDRESS_DATA,
PROP_ADDRESSES,
+ PROP_ROUTE_DATA,
PROP_ROUTES,
+ PROP_GATEWAY,
PROP_NAMESERVERS,
PROP_DOMAINS,
PROP_SEARCHES,
@@ -169,7 +173,9 @@ static gboolean
routes_are_duplicate (const NMPlatformIP6Route *a, const NMPlatformIP6Route *b, gboolean consider_gateway_and_metric)
{
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));
+ ( !consider_gateway_and_metric
+ || ( IN6_ARE_ADDR_EQUAL (&a->gateway, &b->gateway)
+ && nm_utils_ip6_route_metric_normalize (a->metric) == nm_utils_ip6_route_metric_normalize (b->metric)));
}
static gint
@@ -272,6 +278,7 @@ nm_ip6_config_addresses_sort (NMIP6Config *self, NMSettingIP6ConfigPrivacy use_t
g_free (data_pre);
if (changed) {
+ _NOTIFY (self, PROP_ADDRESS_DATA);
_NOTIFY (self, PROP_ADDRESSES);
return TRUE;
}
@@ -285,7 +292,7 @@ nm_ip6_config_capture (int ifindex, gboolean capture_resolv_conf, NMSettingIP6Co
NMIP6Config *config;
NMIP6ConfigPrivate *priv;
guint i;
- guint lowest_metric = G_MAXUINT;
+ guint32 lowest_metric = G_MAXUINT32;
struct in6_addr old_gateway = IN6ADDR_ANY_INIT;
gboolean has_gateway = FALSE;
gboolean notify_nameservers = FALSE;
@@ -301,14 +308,14 @@ nm_ip6_config_capture (int ifindex, gboolean capture_resolv_conf, NMSettingIP6Co
g_array_unref (priv->routes);
priv->addresses = nm_platform_ip6_address_get_all (ifindex);
- priv->routes = nm_platform_ip6_route_get_all (ifindex, TRUE);
+ priv->routes = nm_platform_ip6_route_get_all (ifindex, NM_PLATFORM_GET_ROUTE_MODE_ALL);
/* 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 (NM_PLATFORM_IP_ROUTE_IS_DEFAULT (route)) {
if (route->metric < lowest_metric) {
priv->gateway = route->gateway;
lowest_metric = route->metric;
@@ -347,7 +354,9 @@ nm_ip6_config_capture (int ifindex, gboolean capture_resolv_conf, NMSettingIP6Co
/* actually, nobody should be connected to the signal, just to be sure, notify */
if (notify_nameservers)
_NOTIFY (config, PROP_NAMESERVERS);
+ _NOTIFY (config, PROP_ADDRESS_DATA);
_NOTIFY (config, PROP_ADDRESSES);
+ _NOTIFY (config, PROP_ROUTE_DATA);
_NOTIFY (config, PROP_ROUTES);
if (!IN6_ARE_ADDR_EQUAL (&priv->gateway, &old_gateway))
_NOTIFY (config, PROP_GATEWAY);
@@ -372,25 +381,19 @@ nm_ip6_config_commit (const NMIP6Config *config, int ifindex)
{
int count = nm_ip6_config_get_num_routes (config);
GArray *routes = g_array_sized_new (FALSE, FALSE, sizeof (NMPlatformIP6Route), count);
- NMPlatformIP6Route route;
+ const NMPlatformIP6Route *route;
for (i = 0; i < count; i++) {
- memcpy (&route, nm_ip6_config_get_route (config, i), sizeof (route));
+ route = nm_ip6_config_get_route (config, i);
/* 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))
+ 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);
+ g_array_append_vals (routes, route, 1);
}
success = nm_platform_ip6_route_sync (ifindex, routes);
@@ -401,79 +404,88 @@ nm_ip6_config_commit (const NMIP6Config *config, int ifindex)
}
void
-nm_ip6_config_merge_setting (NMIP6Config *config, NMSettingIP6Config *setting, int default_route_metric)
+nm_ip6_config_merge_setting (NMIP6Config *config, NMSettingIPConfig *setting, guint32 default_route_metric)
{
guint naddresses, nroutes, nnameservers, nsearches;
+ const char *gateway_str;
int i;
if (!setting)
return;
- 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_return_if_fail (NM_IS_SETTING_IP6_CONFIG (setting));
+
+ naddresses = nm_setting_ip_config_get_num_addresses (setting);
+ nroutes = nm_setting_ip_config_get_num_routes (setting);
+ nnameservers = nm_setting_ip_config_get_num_dns (setting);
+ nsearches = nm_setting_ip_config_get_num_dns_searches (setting);
g_object_freeze_notify (G_OBJECT (config));
/* Gateway */
- if (nm_setting_ip6_config_get_never_default (setting))
+ if (nm_setting_ip_config_get_never_default (setting))
nm_ip6_config_set_never_default (config, TRUE);
- else if (nm_setting_ip6_config_get_ignore_auto_routes (setting))
+ else if (nm_setting_ip_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));
+ gateway_str = nm_setting_ip_config_get_gateway (setting);
+ if (gateway_str) {
+ struct in6_addr gateway;
- if (gateway && !IN6_IS_ADDR_UNSPECIFIED (gateway)) {
- nm_ip6_config_set_gateway (config, gateway);
- break;
- }
+ inet_pton (AF_INET6, gateway_str, &gateway);
+ nm_ip6_config_set_gateway (config, &gateway);
}
/* Addresses */
for (i = 0; i < naddresses; i++) {
- NMIP6Address *s_addr = nm_setting_ip6_config_get_address (setting, i);
+ NMIPAddress *s_addr = nm_setting_ip_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);
+ nm_ip_address_get_address_binary (s_addr, &address.address);
+ address.plen = nm_ip_address_get_prefix (s_addr);
address.lifetime = NM_PLATFORM_LIFETIME_PERMANENT;
address.preferred = NM_PLATFORM_LIFETIME_PERMANENT;
- address.source = NM_PLATFORM_SOURCE_USER;
+ address.source = NM_IP_CONFIG_SOURCE_USER;
nm_ip6_config_add_address (config, &address);
}
/* Routes */
- if (nm_setting_ip6_config_get_ignore_auto_routes (setting))
+ if (nm_setting_ip_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);
+ NMIPRoute *s_route = nm_setting_ip_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)
+ nm_ip_route_get_dest_binary (s_route, &route.network);
+ route.plen = nm_ip_route_get_prefix (s_route);
+ nm_ip_route_get_next_hop_binary (s_route, &route.gateway);
+ if (nm_ip_route_get_metric (s_route) == -1)
route.metric = default_route_metric;
- route.source = NM_PLATFORM_SOURCE_USER;
+ else
+ route.metric = nm_ip_route_get_metric (s_route);
+ route.source = NM_IP_CONFIG_SOURCE_USER;
+
+ g_assert (route.plen > 0);
nm_ip6_config_add_route (config, &route);
}
/* DNS */
- if (nm_setting_ip6_config_get_ignore_auto_dns (setting)) {
+ if (nm_setting_ip_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 < nnameservers; i++) {
+ struct in6_addr ip;
+
+ if (inet_pton (AF_INET6, nm_setting_ip_config_get_dns (setting, i), &ip) == 1)
+ nm_ip6_config_add_nameserver (config, &ip);
+ }
for (i = 0; i < nsearches; i++)
- nm_ip6_config_add_search (config, nm_setting_ip6_config_get_dns_search (setting, i));
+ nm_ip6_config_add_search (config, nm_setting_ip_config_get_dns_search (setting, i));
g_object_thaw_notify (G_OBJECT (config));
}
@@ -481,17 +493,17 @@ nm_ip6_config_merge_setting (NMIP6Config *config, NMSettingIP6Config *setting, i
NMSetting *
nm_ip6_config_create_setting (const NMIP6Config *config)
{
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip6;
const struct in6_addr *gateway;
guint naddresses, nroutes, nnameservers, nsearches;
const char *method = NULL;
int i;
- s_ip6 = NM_SETTING_IP6_CONFIG (nm_setting_ip6_config_new ());
+ s_ip6 = NM_SETTING_IP_CONFIG (nm_setting_ip6_config_new ());
if (!config) {
g_object_set (s_ip6,
- NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
NULL);
return NM_SETTING (s_ip6);
}
@@ -505,7 +517,7 @@ nm_ip6_config_create_setting (const NMIP6Config *config)
/* Addresses */
for (i = 0; i < naddresses; i++) {
const NMPlatformIP6Address *address = nm_ip6_config_get_address (config, i);
- NMIP6Address *s_addr;
+ NMIPAddress *s_addr;
/* Ignore link-local address. */
if (IN6_IS_ADDR_LINKLOCAL (&address->address)) {
@@ -524,26 +536,28 @@ nm_ip6_config_create_setting (const NMIP6Config *config)
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);
+ s_addr = nm_ip_address_new_binary (AF_INET6, &address->address, address->plen, NULL);
+ nm_setting_ip_config_add_address (s_ip6, s_addr);
+ nm_ip_address_unref (s_addr);
+ }
- nm_setting_ip6_config_add_address (s_ip6, s_addr);
- nm_ip6_address_unref (s_addr);
+ /* Gateway */
+ if ( gateway
+ && nm_setting_ip_config_get_num_addresses (s_ip6) > 0) {
+ g_object_set (s_ip6,
+ NM_SETTING_IP_CONFIG_GATEWAY, nm_utils_inet6_ntop (gateway, NULL),
+ NULL);
}
/* 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);
+ g_object_set (s_ip6, NM_SETTING_IP_CONFIG_METHOD, method, NULL);
/* Routes */
for (i = 0; i < nroutes; i++) {
const NMPlatformIP6Route *route = nm_ip6_config_get_route (config, i);
- NMIP6Route *s_route;
+ NMIPRoute *s_route;
/* Ignore link-local route. */
if (IN6_IS_ADDR_LINKLOCAL (&route->network))
@@ -554,30 +568,27 @@ nm_ip6_config_create_setting (const NMIP6Config *config)
continue;
/* Ignore routes provided by external sources */
- if (route->source != NM_PLATFORM_SOURCE_USER)
+ if (route->source != NM_IP_CONFIG_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);
+ s_route = nm_ip_route_new_binary (AF_INET6,
+ &route->network, route->plen,
+ &route->gateway, route->metric,
+ NULL);
+ nm_setting_ip_config_add_route (s_ip6, s_route);
+ nm_ip_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);
+ nm_setting_ip_config_add_dns (s_ip6, nm_utils_inet6_ntop (nameserver, NULL));
}
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);
+ nm_setting_ip_config_add_dns_search (s_ip6, search);
}
return NM_SETTING (s_ip6);
@@ -694,6 +705,9 @@ nm_ip6_config_subtract (NMIP6Config *dst, const NMIP6Config *src)
if (src_tmp && dst_tmp && IN6_ARE_ADDR_EQUAL (src_tmp, dst_tmp))
nm_ip6_config_set_gateway (dst, NULL);
+ if (!nm_ip6_config_get_num_addresses (dst))
+ 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);
@@ -956,7 +970,7 @@ nm_ip6_config_dump (const NMIP6Config *config, const char *detail)
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 (" mss: %"G_GUINT32_FORMAT, nm_ip6_config_get_mss (config));
g_message (" n-dflt: %d", nm_ip6_config_get_never_default (config));
}
@@ -1012,6 +1026,7 @@ nm_ip6_config_reset_addresses (NMIP6Config *config)
if (priv->addresses->len != 0) {
g_array_set_size (priv->addresses, 0);
+ _NOTIFY (config, PROP_ADDRESS_DATA);
_NOTIFY (config, PROP_ADDRESSES);
}
}
@@ -1055,7 +1070,7 @@ nm_ip6_config_add_address (NMIP6Config *config, const NMPlatformIP6Address *new)
* 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)
+ if ( (new->source == NM_IP_CONFIG_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;
@@ -1069,6 +1084,7 @@ nm_ip6_config_add_address (NMIP6Config *config, const NMPlatformIP6Address *new)
g_array_append_val (priv->addresses, *new);
NOTIFY:
+ _NOTIFY (config, PROP_ADDRESS_DATA);
_NOTIFY (config, PROP_ADDRESSES);
}
@@ -1080,6 +1096,7 @@ nm_ip6_config_del_address (NMIP6Config *config, guint i)
g_return_if_fail (i < priv->addresses->len);
g_array_remove_index (priv->addresses, i);
+ _NOTIFY (config, PROP_ADDRESS_DATA);
_NOTIFY (config, PROP_ADDRESSES);
}
@@ -1125,6 +1142,7 @@ nm_ip6_config_reset_routes (NMIP6Config *config)
if (priv->routes->len != 0) {
g_array_set_size (priv->routes, 0);
+ _NOTIFY (config, PROP_ROUTE_DATA);
_NOTIFY (config, PROP_ROUTES);
}
}
@@ -1143,10 +1161,11 @@ void
nm_ip6_config_add_route (NMIP6Config *config, const NMPlatformIP6Route *new)
{
NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
- NMPlatformSource old_source;
+ NMIPConfigSource old_source;
int i;
g_return_if_fail (new != NULL);
+ g_return_if_fail (new->plen > 0);
for (i = 0; i < priv->routes->len; i++ ) {
NMPlatformIP6Route *item = &g_array_index (priv->routes, NMPlatformIP6Route, i);
@@ -1164,6 +1183,7 @@ nm_ip6_config_add_route (NMIP6Config *config, const NMPlatformIP6Route *new)
g_array_append_val (priv->routes, *new);
NOTIFY:
+ _NOTIFY (config, PROP_ROUTE_DATA);
_NOTIFY (config, PROP_ROUTES);
}
@@ -1175,6 +1195,7 @@ nm_ip6_config_del_route (NMIP6Config *config, guint i)
g_return_if_fail (i < priv->routes->len);
g_array_remove_index (priv->routes, i);
+ _NOTIFY (config, PROP_ROUTE_DATA);
_NOTIFY (config, PROP_ROUTES);
}
@@ -1194,6 +1215,68 @@ nm_ip6_config_get_route (const NMIP6Config *config, guint i)
return &g_array_index (priv->routes, NMPlatformIP6Route, i);
}
+const NMPlatformIP6Route *
+nm_ip6_config_get_direct_route_for_host (const NMIP6Config *config, const struct in6_addr *host)
+{
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
+ guint i;
+ struct in6_addr network2, host2;
+ NMPlatformIP6Route *best_route = NULL;
+
+ g_return_val_if_fail (host && !IN6_IS_ADDR_UNSPECIFIED (host), NULL);
+
+ for (i = 0; i < priv->routes->len; i++) {
+ NMPlatformIP6Route *item = &g_array_index (priv->routes, NMPlatformIP6Route, i);
+
+ if (!IN6_IS_ADDR_UNSPECIFIED (&item->gateway))
+ continue;
+
+ if (best_route && best_route->plen > item->plen)
+ continue;
+
+ nm_utils_ip6_address_clear_host_address (&host2, host, item->plen);
+ nm_utils_ip6_address_clear_host_address (&network2, &item->network, item->plen);
+
+ if (!IN6_ARE_ADDR_EQUAL (&network2, &host2))
+ continue;
+
+ if (best_route &&
+ nm_utils_ip6_route_metric_normalize (best_route->metric) <= nm_utils_ip6_route_metric_normalize (item->metric))
+ continue;
+
+ best_route = item;
+ }
+
+ return best_route;
+}
+
+const NMPlatformIP6Address *
+nm_ip6_config_get_subnet_for_host (const NMIP6Config *config, const struct in6_addr *host)
+{
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
+ guint i;
+ NMPlatformIP6Address *subnet = NULL;
+ struct in6_addr subnet2, host2;
+
+ g_return_val_if_fail (host && !IN6_IS_ADDR_UNSPECIFIED (host), NULL);
+
+ for (i = 0; i < priv->addresses->len; i++) {
+ NMPlatformIP6Address *item = &g_array_index (priv->addresses, NMPlatformIP6Address, i);
+
+ if (subnet && subnet->plen >= item->plen)
+ continue;
+
+ nm_utils_ip6_address_clear_host_address (&host2, host, item->plen);
+ nm_utils_ip6_address_clear_host_address (&subnet2, &item->address, item->plen);
+
+ if (IN6_ARE_ADDR_EQUAL (&subnet2, &host2))
+ subnet = item;
+ }
+
+ return subnet;
+}
+
+
/******************************************************************/
void
@@ -1532,6 +1615,15 @@ nameservers_to_gvalue (GArray *array, GValue *value)
}
static void
+gvalue_destroy (gpointer data)
+{
+ GValue *value = (GValue *) data;
+
+ g_value_unset (value);
+ g_slice_free (GValue, value);
+}
+
+static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
@@ -1539,11 +1631,34 @@ get_property (GObject *object, guint prop_id,
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);
+ case PROP_ADDRESS_DATA:
+ {
+ GPtrArray *addresses = g_ptr_array_new ();
+ 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);
+ GHashTable *addr_hash;
+ GValue *val;
+
+ addr_hash = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, gvalue_destroy);
+
+ val = g_slice_new0 (GValue);
+ g_value_init (val, G_TYPE_STRING);
+ g_value_set_string (val, nm_utils_inet6_ntop (&address->address, NULL));
+ g_hash_table_insert (addr_hash, "address", val);
+
+ val = g_slice_new0 (GValue);
+ g_value_init (val, G_TYPE_UINT);
+ g_value_set_uint (val, address->plen);
+ g_hash_table_insert (addr_hash, "prefix", val);
+
+ g_ptr_array_add (addresses, addr_hash);
+ }
+
+ g_value_take_boxed (value, addresses);
+ }
break;
case PROP_ADDRESSES:
{
@@ -1576,7 +1691,7 @@ get_property (GObject *object, guint prop_id,
/* 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_byte_array_append (ba, (guint8 *) (i == 0 && gateway ? gateway : &in6addr_any), sizeof (*gateway));
g_value_take_boxed (&element, ba);
g_value_array_append (array, &element);
g_value_unset (&element);
@@ -1587,6 +1702,47 @@ get_property (GObject *object, guint prop_id,
g_value_take_boxed (value, addresses);
}
break;
+ case PROP_ROUTE_DATA:
+ {
+ GPtrArray *routes = g_ptr_array_new ();
+ guint 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);
+ GHashTable *route_hash;
+ GValue *val;
+
+ route_hash = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, gvalue_destroy);
+
+ val = g_slice_new0 (GValue);
+ g_value_init (val, G_TYPE_STRING);
+ g_value_set_string (val, nm_utils_inet6_ntop (&route->network, NULL));
+ g_hash_table_insert (route_hash, "dest", val);
+
+ val = g_slice_new0 (GValue);
+ g_value_init (val, G_TYPE_UINT);
+ g_value_set_uint (val, route->plen);
+ g_hash_table_insert (route_hash, "prefix", val);
+
+ if (!IN6_IS_ADDR_UNSPECIFIED (&route->gateway)) {
+ val = g_slice_new0 (GValue);
+ g_value_init (val, G_TYPE_STRING);
+ g_value_set_string (val, nm_utils_inet6_ntop (&route->gateway, NULL));
+ g_hash_table_insert (route_hash, "next-hop", val);
+ }
+
+ val = g_slice_new0 (GValue);
+ g_value_init (val, G_TYPE_UINT);
+ g_value_set_uint (val, route->metric);
+ g_hash_table_insert (route_hash, "metric", val);
+
+ g_ptr_array_add (routes, route_hash);
+ }
+
+ g_value_take_boxed (value, routes);
+ }
+ break;
case PROP_ROUTES:
{
GPtrArray *routes = g_ptr_array_new ();
@@ -1594,12 +1750,18 @@ get_property (GObject *object, guint prop_id,
int i;
for (i = 0; i < nroutes; i++) {
+ GValueArray *array;
const NMPlatformIP6Route *route = nm_ip6_config_get_route (config, i);
-
- GValueArray *array = g_value_array_new (4);
GByteArray *ba;
GValue element = G_VALUE_INIT;
+ /* legacy versions of nm_ip6_route_set_prefix() in libnm-util assert that the
+ * plen is positive. Skip the default routes not to break older clients. */
+ if (NM_PLATFORM_IP_ROUTE_IS_DEFAULT (route))
+ continue;
+
+ array = g_value_array_new (4);
+
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));
@@ -1630,6 +1792,12 @@ get_property (GObject *object, guint prop_id,
g_value_take_boxed (value, routes);
}
break;
+ 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_NAMESERVERS:
nameservers_to_gvalue (priv->nameservers, value);
break;
@@ -1657,42 +1825,46 @@ nm_ip6_config_class_init (NMIP6ConfigClass *config_class)
object_class->finalize = finalize;
/* properties */
- obj_properties[PROP_GATEWAY] =
- g_param_spec_string (NM_IP6_CONFIG_GATEWAY,
- "Gateway",
- "IP6 Gateway",
- NULL,
- G_PARAM_READABLE);
+ obj_properties[PROP_ADDRESS_DATA] =
+ g_param_spec_boxed (NM_IP6_CONFIG_ADDRESS_DATA, "", "",
+ DBUS_TYPE_NM_IP_ADDRESSES,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS);
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);
+ g_param_spec_boxed (NM_IP6_CONFIG_ADDRESSES, "", "",
+ DBUS_TYPE_G_ARRAY_OF_IP6_ADDRESS,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS);
+ obj_properties[PROP_ROUTE_DATA] =
+ g_param_spec_boxed (NM_IP6_CONFIG_ROUTE_DATA, "", "",
+ DBUS_TYPE_NM_IP_ROUTES,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS);
obj_properties[PROP_ROUTES] =
- g_param_spec_boxed (NM_IP6_CONFIG_ROUTES,
- "Routes",
- "Routes",
+ g_param_spec_boxed (NM_IP6_CONFIG_ROUTES, "", "",
DBUS_TYPE_G_ARRAY_OF_IP6_ROUTE,
- G_PARAM_READABLE);
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS);
+ obj_properties[PROP_GATEWAY] =
+ g_param_spec_string (NM_IP6_CONFIG_GATEWAY, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS);
obj_properties[PROP_NAMESERVERS] =
- g_param_spec_boxed (NM_IP6_CONFIG_NAMESERVERS,
- "Nameservers",
- "DNS list",
+ g_param_spec_boxed (NM_IP6_CONFIG_NAMESERVERS, "", "",
DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UCHAR,
- G_PARAM_READABLE);
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS);
obj_properties[PROP_DOMAINS] =
- g_param_spec_boxed (NM_IP6_CONFIG_DOMAINS,
- "Domains",
- "Domains",
+ g_param_spec_boxed (NM_IP6_CONFIG_DOMAINS, "", "",
DBUS_TYPE_G_ARRAY_OF_STRING,
- G_PARAM_READABLE);
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS);
obj_properties[PROP_SEARCHES] =
- g_param_spec_boxed (NM_IP6_CONFIG_SEARCHES,
- "Searches",
- "Searches",
+ g_param_spec_boxed (NM_IP6_CONFIG_SEARCHES, "", "",
DBUS_TYPE_G_ARRAY_OF_STRING,
- G_PARAM_READABLE);
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, LAST_PROP, obj_properties);
diff --git a/src/nm-ip6-config.h b/src/nm-ip6-config.h
index b7b9d83ec..f1d2dc8dd 100644
--- a/src/nm-ip6-config.h
+++ b/src/nm-ip6-config.h
@@ -18,12 +18,13 @@
* Copyright (C) 2008–2013 Red Hat, Inc.
*/
-#ifndef NM_IP6_CONFIG_H
-#define NM_IP6_CONFIG_H
+#ifndef __NETWORKMANAGER_IP6_CONFIG_H__
+#define __NETWORKMANAGER_IP6_CONFIG_H__
#include <glib-object.h>
+#include <netinet/in.h>
-#include "nm-platform.h"
+#include "nm-types.h"
#include "nm-setting-ip6-config.h"
#define NM_TYPE_IP6_CONFIG (nm_ip6_config_get_type ())
@@ -33,21 +34,25 @@
#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))
-typedef struct {
+struct _NMIP6Config {
GObject parent;
-} NMIP6Config;
+};
typedef struct {
GObjectClass parent;
} NMIP6ConfigClass;
+#define NM_IP6_CONFIG_ADDRESS_DATA "address-data"
+#define NM_IP6_CONFIG_ROUTE_DATA "route-data"
#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_SEARCHES "searches"
+/* deprecated */
+#define NM_IP6_CONFIG_ADDRESSES "addresses"
+#define NM_IP6_CONFIG_ROUTES "routes"
+
GType nm_ip6_config_get_type (void);
@@ -60,7 +65,7 @@ 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);
+void nm_ip6_config_merge_setting (NMIP6Config *config, NMSettingIPConfig *setting, guint32 default_route_metric);
NMSetting *nm_ip6_config_create_setting (const NMIP6Config *config);
/* Utility functions */
@@ -93,6 +98,9 @@ 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);
+const NMPlatformIP6Route *nm_ip6_config_get_direct_route_for_host (const NMIP6Config *config, const struct in6_addr *host);
+const NMPlatformIP6Address *nm_ip6_config_get_subnet_for_host (const NMIP6Config *config, const struct in6_addr *host);
+
/* Nameservers */
void nm_ip6_config_reset_nameservers (NMIP6Config *config);
void nm_ip6_config_add_nameserver (NMIP6Config *config, const struct in6_addr *nameserver);
@@ -127,4 +135,4 @@ gboolean nm_ip6_config_equal (const NMIP6Config *a, const NMIP6Config *b);
gboolean nm_ip6_config_capture_resolv_conf (GArray *nameservers,
const char *rc_contents);
-#endif /* NM_IP6_CONFIG_H */
+#endif /* __NETWORKMANAGER_IP6_CONFIG_H__ */
diff --git a/src/logging/nm-logging.c b/src/nm-logging.c
index 1577f6ec7..f1291fa73 100644
--- a/src/logging/nm-logging.c
+++ b/src/nm-logging.c
@@ -34,7 +34,9 @@
#include <glib/gi18n.h>
+#include "nm-glib-compat.h"
#include "nm-logging.h"
+#include "nm-errors.h"
static void
nm_log_handler (const gchar *log_domain,
@@ -42,30 +44,20 @@ nm_log_handler (const gchar *log_domain,
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 | LOGD_WIMAX | \
- LOGD_INFINIBAND | LOGD_FIREWALL | LOGD_ADSL | LOGD_BOND | \
- LOGD_VLAN | LOGD_BRIDGE | LOGD_DBUS_PROPS | LOGD_TEAM | LOGD_CONCHECK | \
- LOGD_DCB | LOGD_DISPATCH)
-
-#define LOGD_DEFAULT (LOGD_ALL & ~(LOGD_WIFI_SCAN | LOGD_DBUS_PROPS))
-
-static guint32 log_level = LOGL_INFO;
+static NMLogLevel log_level = LOGL_INFO;
static char *log_domains;
-static guint64 logging[LOGL_MAX];
+static NMLogDomain logging[LOGL_MAX];
static gboolean logging_set_up;
static gboolean syslog_opened;
+static char *logging_domains_to_string;
typedef struct {
- guint64 num;
+ NMLogDomain num;
const char *name;
} LogDesc;
static const char *level_names[LOGL_MAX] = {
+ [LOGL_TRACE] = "TRACE",
[LOGL_DEBUG] = "DEBUG",
[LOGL_INFO] = "INFO",
[LOGL_WARN] = "WARN",
@@ -120,21 +112,16 @@ static const LogDesc domain_descs[] = {
/************************************************************************/
-GQuark
-nm_logging_error_quark (void)
+static void
+_ensure_initialized (void)
{
- static GQuark ret = 0;
-
- if (ret == 0)
- ret = g_quark_from_static_string ("nm_logging_error");
- return ret;
+ if (G_UNLIKELY (!logging_set_up))
+ nm_logging_setup ("INFO", "DEFAULT", NULL, NULL);
}
-/************************************************************************/
-
static gboolean
match_log_level (const char *level,
- guint32 *out_level,
+ NMLogLevel *out_level,
GError **error)
{
int i;
@@ -146,7 +133,7 @@ match_log_level (const char *level,
}
}
- g_set_error (error, NM_LOGGING_ERROR, NM_LOGGING_ERROR_UNKNOWN_LEVEL,
+ g_set_error (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_UNKNOWN_LOG_LEVEL,
_("Unknown log level '%s'"), level);
return FALSE;
}
@@ -158,11 +145,14 @@ nm_logging_setup (const char *level,
GError **error)
{
GString *unrecognized = NULL;
- guint64 new_logging[LOGL_MAX];
- guint32 new_log_level = log_level;
+ NMLogDomain new_logging[LOGL_MAX];
+ NMLogLevel new_log_level = log_level;
char **tmp, **iter;
int i;
+ g_return_val_if_fail (!bad_domains || !*bad_domains, FALSE);
+ g_return_val_if_fail (!error || !*error, FALSE);
+
logging_set_up = TRUE;
for (i = 0; i < LOGL_MAX; i++)
@@ -181,8 +171,8 @@ nm_logging_setup (const char *level,
tmp = g_strsplit_set (domains, ", ", 0);
for (iter = tmp; iter && *iter; iter++) {
const LogDesc *diter;
- guint32 domain_log_level;
- guint64 bits;
+ NMLogLevel domain_log_level;
+ NMLogDomain bits;
char *p;
if (!strlen (*iter))
@@ -225,7 +215,7 @@ nm_logging_setup (const char *level,
if (!bits) {
if (!bad_domains) {
- g_set_error (error, NM_LOGGING_ERROR, NM_LOGGING_ERROR_UNKNOWN_DOMAIN,
+ g_set_error (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_UNKNOWN_LOG_DOMAIN,
_("Unknown log domain '%s'"), *iter);
return FALSE;
}
@@ -250,6 +240,8 @@ nm_logging_setup (const char *level,
log_domains = g_strdup (domains);
}
+ g_clear_pointer (&logging_domains_to_string, g_free);
+
log_level = new_log_level;
for (i = 0; i < LOGL_MAX; i++)
logging[i] = new_logging[i];
@@ -260,10 +252,10 @@ nm_logging_setup (const char *level,
return TRUE;
}
-char *
+const char *
nm_logging_level_to_string (void)
{
- return g_strdup (level_names[log_level]);
+ return level_names[log_level];
}
const char *
@@ -285,45 +277,50 @@ nm_logging_all_levels_to_string (void)
return str->str;
}
-char *
+const char *
nm_logging_domains_to_string (void)
{
- const LogDesc *diter;
- GString *str;
- int i;
+ _ensure_initialized ();
- /* We don't just return g_strdup (log_domains) because we want to expand
- * "DEFAULT" and "ALL".
- */
+ if (G_UNLIKELY (!logging_domains_to_string)) {
+ const LogDesc *diter;
+ GString *str;
+ int i;
- str = g_string_sized_new (75);
- for (diter = &domain_descs[0]; diter->name; diter++) {
- /* If it's set for any lower level, it will also be set for LOGL_ERR */
- if (!(diter->num & logging[LOGL_ERR]))
- continue;
+ /* We don't just return g_strdup (log_domains) because we want to expand
+ * "DEFAULT" and "ALL".
+ */
- if (str->len)
- g_string_append_c (str, ',');
- g_string_append (str, diter->name);
+ str = g_string_sized_new (75);
+ for (diter = &domain_descs[0]; diter->name; diter++) {
+ /* If it's set for any lower level, it will also be set for LOGL_ERR */
+ if (!(diter->num & logging[LOGL_ERR]))
+ continue;
- /* 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 (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;
+ }
+ }
+ }
}
+ logging_domains_to_string = g_string_free (str, FALSE);
}
- return g_string_free (str, FALSE);
+ return logging_domains_to_string;
}
const char *
@@ -350,18 +347,21 @@ nm_logging_all_domains_to_string (void)
}
gboolean
-nm_logging_enabled (guint32 level, guint64 domain)
+nm_logging_enabled (NMLogLevel level, NMLogDomain domain)
{
g_return_val_if_fail (level < LOGL_MAX, FALSE);
+ _ensure_initialized ();
+
return !!(logging[level] & domain);
}
void
-_nm_log (const char *loc,
+_nm_log (const char *file,
+ guint line,
const char *func,
- guint64 domain,
- guint32 level,
+ NMLogLevel level,
+ NMLogDomain domain,
const char *fmt,
...)
{
@@ -374,8 +374,7 @@ _nm_log (const char *loc,
g_return_if_fail (level < LOGL_MAX);
- if (G_UNLIKELY (!logging_set_up))
- nm_logging_setup ("INFO", "DEFAULT", NULL, NULL);
+ _ensure_initialized ();
if (!(logging[level] & domain))
return;
@@ -385,28 +384,34 @@ _nm_log (const char *loc,
va_end (args);
switch (level) {
+ case LOGL_TRACE:
+ g_get_current_time (&tv);
+ syslog_level = LOG_DEBUG;
+ g_log_level = G_LOG_LEVEL_DEBUG;
+ fullmsg = g_strdup_printf ("<trace> [%ld.%06ld] [%s:%u] %s(): %s", tv.tv_sec, tv.tv_usec, file, line, func, msg);
+ break;
case LOGL_DEBUG:
g_get_current_time (&tv);
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);
+ fullmsg = g_strdup_printf ("<debug> [%ld.%06ld] [%s:%u] %s(): %s", tv.tv_sec, tv.tv_usec, file, line, func, msg);
break;
case LOGL_INFO:
syslog_level = LOG_INFO;
g_log_level = G_LOG_LEVEL_MESSAGE;
- fullmsg = g_strconcat ("<info> ", msg, NULL);
+ 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);
+ 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);
- fullmsg = g_strdup_printf ("<error> [%ld.%06ld] [%s] %s(): %s", tv.tv_sec, tv.tv_usec, loc, func, msg);
+ fullmsg = g_strdup_printf ("<error> [%ld.%06ld] [%s:%u] %s(): %s", tv.tv_sec, tv.tv_usec, file, line, func, msg);
break;
default:
g_assert_not_reached ();
diff --git a/src/nm-logging.h b/src/nm-logging.h
new file mode 100644
index 000000000..4ab2db3ad
--- /dev/null
+++ b/src/nm-logging.h
@@ -0,0 +1,159 @@
+/* -*- 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) 2006 - 2012 Red Hat, Inc.
+ * Copyright (C) 2006 - 2008 Novell, Inc.
+ */
+
+#ifndef __NETWORKMANAGER_LOGGING_H__
+#define __NETWORKMANAGER_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>
+
+#include "nm-utils-internal.h"
+
+/* Log domains */
+typedef enum { /*< skip >*/
+ LOGD_NONE = 0LL,
+ LOGD_PLATFORM = (1LL << 0), /* Platform services */
+ LOGD_RFKILL = (1LL << 1),
+ LOGD_ETHER = (1LL << 2),
+ LOGD_WIFI = (1LL << 3),
+ LOGD_BT = (1LL << 4),
+ LOGD_MB = (1LL << 5), /* mobile broadband */
+ LOGD_DHCP4 = (1LL << 6),
+ LOGD_DHCP6 = (1LL << 7),
+ LOGD_PPP = (1LL << 8),
+ LOGD_WIFI_SCAN = (1LL << 9),
+ LOGD_IP4 = (1LL << 10),
+ LOGD_IP6 = (1LL << 11),
+ LOGD_AUTOIP4 = (1LL << 12),
+ LOGD_DNS = (1LL << 13),
+ LOGD_VPN = (1LL << 14),
+ LOGD_SHARING = (1LL << 15), /* Connection sharing/dnsmasq */
+ LOGD_SUPPLICANT = (1LL << 16), /* WiFi and 802.1x */
+ LOGD_AGENTS = (1LL << 17), /* Secret agents */
+ LOGD_SETTINGS = (1LL << 18), /* Settings */
+ LOGD_SUSPEND = (1LL << 19), /* Suspend/Resume */
+ LOGD_CORE = (1LL << 20), /* Core daemon and policy stuff */
+ LOGD_DEVICE = (1LL << 21), /* Device state and activation */
+ LOGD_OLPC = (1LL << 22),
+ LOGD_WIMAX = (1LL << 23),
+ LOGD_INFINIBAND = (1LL << 24),
+ LOGD_FIREWALL = (1LL << 25),
+ LOGD_ADSL = (1LL << 26),
+ LOGD_BOND = (1LL << 27),
+ LOGD_VLAN = (1LL << 28),
+ LOGD_BRIDGE = (1LL << 29),
+ LOGD_DBUS_PROPS = (1LL << 30),
+ LOGD_TEAM = (1LL << 31),
+ LOGD_CONCHECK = (1LL << 32),
+ LOGD_DCB = (1LL << 33), /* Data Center Bridging */
+ LOGD_DISPATCH = (1LL << 34),
+
+ __LOGD_MAX,
+ LOGD_ALL = ((__LOGD_MAX - 1LL) << 1) - 1LL,
+ LOGD_DEFAULT = LOGD_ALL & ~(
+ LOGD_DBUS_PROPS |
+ LOGD_WIFI_SCAN |
+ 0),
+
+ /* aliases: */
+ LOGD_DHCP = LOGD_DHCP4 | LOGD_DHCP6,
+ LOGD_IP = LOGD_IP4 | LOGD_IP6,
+ LOGD_HW = LOGD_PLATFORM,
+} NMLogDomain;
+
+/* Log levels */
+typedef enum { /*< skip >*/
+ LOGL_TRACE,
+ LOGL_DEBUG,
+ LOGL_INFO,
+ LOGL_WARN,
+ LOGL_ERR,
+
+ LOGL_MAX
+} NMLogLevel;
+
+#define nm_log_err(domain, ...) nm_log (LOGL_ERR, (domain), __VA_ARGS__)
+#define nm_log_warn(domain, ...) nm_log (LOGL_WARN, (domain), __VA_ARGS__)
+#define nm_log_info(domain, ...) nm_log (LOGL_INFO, (domain), __VA_ARGS__)
+#define nm_log_dbg(domain, ...) nm_log (LOGL_DEBUG, (domain), __VA_ARGS__)
+#define nm_log_trace(domain, ...) nm_log (LOGL_TRACE, (domain), __VA_ARGS__)
+
+/* nm_log() only evaluates it's argument list after checking
+ * whether logging for the given level/domain is enabled. */
+#define nm_log(level, domain, ...) \
+ G_STMT_START { \
+ if (nm_logging_enabled ((level), (domain))) { \
+ _nm_log (__FILE__, __LINE__, G_STRFUNC, (level), (domain), __VA_ARGS__); \
+ } \
+ } G_STMT_END
+
+
+#define _nm_log_ptr(level, domain, self, ...) \
+ nm_log ((level), (domain), "[%p] " _NM_UTILS_MACRO_FIRST(__VA_ARGS__), self _NM_UTILS_MACRO_REST(__VA_ARGS__))
+
+/* log a message for an object (with providing a generic @self pointer) */
+#define nm_log_ptr(level, domain, self, ...) \
+ G_STMT_START { \
+ if ((level) <= LOGL_DEBUG) { \
+ _nm_log_ptr ((level), (domain), (self), __VA_ARGS__); \
+ } else { \
+ nm_log ((level), (domain), __VA_ARGS__); \
+ } \
+ } G_STMT_END
+
+
+#define _nm_log_obj(level, domain, self, ...) \
+ _nm_log_ptr ((level), (domain), (self), __VA_ARGS__)
+
+/* log a message for an object (with providing a @self pointer to a GObject).
+ * Contrary to nm_log_ptr(), @self must be a GObject type (or %NULL).
+ * As of now, nm_log_obj() is identical to nm_log_ptr(), but we might change that */
+#define nm_log_obj(level, domain, self, ...) \
+ nm_log_ptr ((level), (domain), (self), __VA_ARGS__)
+
+
+void _nm_log (const char *file,
+ guint line,
+ const char *func,
+ NMLogLevel level,
+ NMLogDomain domain,
+ const char *fmt,
+ ...) __attribute__((__format__ (__printf__, 6, 7)));
+
+const char *nm_logging_level_to_string (void);
+const char *nm_logging_domains_to_string (void);
+gboolean nm_logging_enabled (NMLogLevel level, NMLogDomain domain);
+
+const char *nm_logging_all_levels_to_string (void);
+const char *nm_logging_all_domains_to_string (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 /* __NETWORKMANAGER_LOGGING_H__ */
diff --git a/src/nm-manager-glue.h b/src/nm-manager-glue.h
index 1f365b0e7..d907f4d24 100644
--- a/src/nm-manager-glue.h
+++ b/src/nm-manager-glue.h
@@ -411,6 +411,6 @@ const DBusGObjectInfo dbus_glib_nm_manager_object_info = { 1,
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"
+"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\0PrimaryConnectionType\0primary_connection_type\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 09a1985a7..7e81afa50 100644
--- a/src/nm-manager.c
+++ b/src/nm-manager.c
@@ -19,10 +19,9 @@
* Copyright (C) 2007 - 2012 Red Hat, Inc.
*/
-#include <config.h>
+#include "config.h"
#include <stdlib.h>
-#include <netinet/ether.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h>
@@ -34,42 +33,33 @@
#include <gio/gio.h>
#include <glib/gi18n.h>
+#include "gsystem-local-alloc.h"
#include "nm-glib-compat.h"
#include "nm-manager.h"
#include "nm-logging.h"
#include "nm-dbus-manager.h"
#include "nm-vpn-manager.h"
#include "nm-device.h"
-#include "nm-device-ethernet.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-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-dbus-glib-types.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 "nm-auth-utils.h"
+#include "nm-auth-manager.h"
#include "NetworkManagerUtils.h"
-#include "nm-utils.h"
#include "nm-device-factory.h"
#include "nm-enum-types.h"
#include "nm-sleep-monitor.h"
#include "nm-connectivity.h"
#include "nm-policy.h"
-
+#include "nm-connection-provider.h"
+#include "nm-session-monitor.h"
+#include "nm-activation-request.h"
+#include "nm-core-internal.h"
+#include "nm-config.h"
#define NM_AUTOIP_DBUS_SERVICE "org.freedesktop.nm_avahi_autoipd"
#define NM_AUTOIP_DBUS_IFACE "org.freedesktop.nm_avahi_autoipd"
@@ -128,8 +118,7 @@ static void impl_manager_check_connectivity (NMManager *manager,
#include "nm-manager-glue.h"
-static void add_device (NMManager *self, NMDevice *device, gboolean generate_con);
-static void remove_device (NMManager *self, NMDevice *device, gboolean quitting);
+static void add_device (NMManager *self, NMDevice *device, gboolean try_assume);
static NMActiveConnection *_new_active_connection (NMManager *self,
NMConnection *connection,
@@ -198,7 +187,7 @@ typedef struct {
gboolean sleeping;
gboolean net_enabled;
- NMVPNManager *vpn_manager;
+ NMVpnManager *vpn_manager;
DBusGProxy *aipd_proxy;
NMSleepMonitor *sleep_monitor;
@@ -226,6 +215,7 @@ enum {
USER_PERMISSIONS_CHANGED,
ACTIVE_CONNECTION_ADDED,
ACTIVE_CONNECTION_REMOVED,
+ CONFIGURE_QUIT,
LAST_SIGNAL
};
@@ -247,6 +237,7 @@ enum {
PROP_ACTIVE_CONNECTIONS,
PROP_CONNECTIVITY,
PROP_PRIMARY_CONNECTION,
+ PROP_PRIMARY_CONNECTION_TYPE,
PROP_ACTIVATING_CONNECTION,
PROP_DEVICES,
@@ -260,19 +251,6 @@ enum {
/************************************************************************/
-#define NM_MANAGER_ERROR (nm_manager_error_quark ())
-
-static GQuark
-nm_manager_error_quark (void)
-{
- static GQuark quark = 0;
- if (!quark)
- quark = g_quark_from_static_string ("nm-manager-error");
- return quark;
-}
-
-/************************************************************************/
-
static void active_connection_state_changed (NMActiveConnection *active,
GParamSpec *pspec,
NMManager *self);
@@ -291,11 +269,28 @@ active_connection_remove (NMManager *self, NMActiveConnection *active)
/* FIXME: switch to a GList for faster removal */
found = g_slist_find (priv->active_connections, active);
if (found) {
+ NMConnection *connection;
+
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);
+
+ if ( nm_active_connection_get_assumed (active)
+ && (connection = nm_active_connection_get_connection (active))
+ && nm_settings_connection_get_nm_generated_assumed (NM_SETTINGS_CONNECTION (connection)))
+ g_object_ref (connection);
+ else
+ connection = NULL;
+
g_object_unref (active);
+
+ if (connection) {
+ nm_log_dbg (LOGD_DEVICE, "Assumed connection disconnected. Deleting generated connection '%s' (%s)",
+ nm_connection_get_id (connection), nm_connection_get_uuid (connection));
+ nm_settings_connection_delete (NM_SETTINGS_CONNECTION (connection), NULL, NULL);
+ g_object_unref (connection);
+ }
}
return found && notify;
@@ -497,24 +492,6 @@ nm_manager_get_device_by_path (NMManager *manager, const char *path)
}
NMDevice *
-nm_manager_get_device_by_master (NMManager *manager, const char *master, const char *driver)
-{
- GSList *iter;
-
- g_return_val_if_fail (master != NULL, NULL);
-
- for (iter = NM_MANAGER_GET_PRIVATE (manager)->devices; iter; iter = iter->next) {
- NMDevice *device = NM_DEVICE (iter->data);
-
- if (!strcmp (nm_device_get_iface (device), master) &&
- (!driver || !strcmp (nm_device_get_driver (device), driver)))
- return device;
- }
-
- return NULL;
-}
-
-NMDevice *
nm_manager_get_device_by_ifindex (NMManager *manager, int ifindex)
{
GSList *iter;
@@ -731,6 +708,9 @@ check_if_startup_complete (NMManager *self)
g_signal_handlers_disconnect_by_func (dev, G_CALLBACK (device_has_pending_action_changed), self);
}
+
+ if (nm_config_get_configure_and_quit (nm_config_get ()))
+ g_signal_emit (self, signals[CONFIGURE_QUIT], 0);
}
static void
@@ -742,11 +722,17 @@ device_has_pending_action_changed (NMDevice *device,
}
static void
-remove_device (NMManager *manager, NMDevice *device, gboolean quitting)
+remove_device (NMManager *manager,
+ NMDevice *device,
+ gboolean quitting,
+ gboolean allow_unmanage)
{
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
- if (nm_device_get_managed (device)) {
+ nm_log_dbg (LOGD_DEVICE, "(%s): removing device (allow_unmanage %d, managed %d)",
+ nm_device_get_iface (device), allow_unmanage, nm_device_get_managed (device));
+
+ if (allow_unmanage && nm_device_get_managed (device)) {
NMActRequest *req = nm_device_get_act_request (device);
gboolean unmanage = FALSE;
@@ -767,6 +753,8 @@ remove_device (NMManager *manager, NMDevice *device, gboolean quitting)
nm_device_set_unmanaged_quitting (device);
else
nm_device_set_unmanaged (device, NM_UNMANAGED_INTERNAL, TRUE, NM_DEVICE_STATE_REASON_REMOVED);
+ } else if (quitting && nm_config_get_configure_and_quit (nm_config_get ())) {
+ nm_device_spawn_iface_helper (device);
}
}
@@ -777,6 +765,7 @@ remove_device (NMManager *manager, NMDevice *device, gboolean quitting)
g_signal_emit (manager, signals[DEVICE_REMOVED], 0, device);
g_object_notify (G_OBJECT (manager), NM_MANAGER_DEVICES);
+ nm_device_removed (device);
nm_dbus_manager_unregister_object (priv->dbus_mgr, device);
g_object_unref (device);
@@ -787,7 +776,7 @@ remove_device (NMManager *manager, NMDevice *device, gboolean quitting)
static void
device_removed_cb (NMDevice *device, gpointer user_data)
{
- remove_device (NM_MANAGER (user_data), device, FALSE);
+ remove_device (NM_MANAGER (user_data), device, FALSE, TRUE);
}
static void
@@ -842,11 +831,10 @@ nm_manager_get_state (NMManager *manager)
/*******************************************************************/
static NMDevice *
-get_device_from_hwaddr (NMManager *self, const GByteArray *setting_mac)
+get_device_from_hwaddr (NMManager *self, const char *setting_mac)
{
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
- const guint8 *device_mac;
- guint device_mac_len;
+ const char *device_mac;
GSList *iter;
if (!setting_mac)
@@ -855,9 +843,10 @@ get_device_from_hwaddr (NMManager *self, const GByteArray *setting_mac)
for (iter = priv->devices; iter; iter = g_slist_next (iter)) {
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)
+ device_mac = nm_device_get_hw_address (iter->data);
+ if (!device_mac)
+ continue;
+ if (nm_utils_hwaddr_matches (setting_mac, -1, device_mac, -1))
return device;
}
return NULL;
@@ -873,7 +862,7 @@ find_vlan_parent (NMManager *self,
NMConnection *parent_connection;
const char *parent_iface;
NMDevice *parent = NULL;
- const GByteArray *setting_mac;
+ const char *setting_mac;
GSList *iter;
/* The 'parent' property could be given by an interface name, a
@@ -926,7 +915,7 @@ find_infiniband_parent (NMManager *self,
NMSettingInfiniband *s_infiniband;
const char *parent_iface;
NMDevice *parent = NULL;
- const GByteArray *setting_mac;
+ const char *setting_mac;
s_infiniband = nm_connection_get_setting_infiniband (connection);
g_return_val_if_fail (s_infiniband != NULL, NULL);
@@ -961,101 +950,68 @@ get_virtual_iface_name (NMManager *self,
NMDevice **out_parent)
{
NMDevice *parent = NULL;
+ const char *ifname;
if (out_parent)
*out_parent = NULL;
- 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_virtual (connection))
+ return NULL;
- if (nm_connection_is_type (connection, NM_SETTING_BRIDGE_SETTING_NAME))
- return g_strdup (nm_connection_get_virtual_iface_name (connection));
+ ifname = nm_connection_get_interface_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);
- if (parent) {
- ifname = nm_connection_get_virtual_iface_name (connection);
-
- if (!nm_device_supports_vlans (parent)) {
- nm_log_warn (LOGD_DEVICE, "(%s): No support for VLANs on interface %s of type %s",
- ifname ? ifname : nm_connection_get_id (connection),
- nm_device_get_ip_iface (parent),
- nm_device_get_type_desc (parent));
- return NULL;
- }
+ if (!parent)
+ return NULL;
- /* If the connection doesn't specify the interface name for the VLAN
- * device, we create one for it using the VLAN ID and the parent
- * interface's name.
- */
- if (ifname)
- vname = g_strdup (ifname);
- else {
- vname = nm_utils_new_vlan_name (nm_device_get_ip_iface (parent),
- nm_setting_vlan_get_id (s_vlan));
- }
- if (out_parent)
- *out_parent = parent;
- return vname;
+ if (!nm_device_supports_vlans (parent)) {
+ nm_log_warn (LOGD_DEVICE, "(%s): No support for VLANs on interface %s of type %s",
+ ifname ? ifname : nm_connection_get_id (connection),
+ nm_device_get_ip_iface (parent),
+ nm_device_get_type_desc (parent));
+ return NULL;
}
- }
-
- 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;
+ /* If the connection doesn't specify the interface name for the VLAN
+ * device, we create one for it using the VLAN ID and the parent
+ * interface's name.
+ */
+ if (ifname)
+ vname = g_strdup (ifname);
+ else {
+ vname = nm_utils_new_vlan_name (nm_device_get_ip_iface (parent),
+ nm_setting_vlan_get_id (s_vlan));
}
+ if (out_parent)
+ *out_parent = parent;
+ return vname;
}
- 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;
-
if (nm_connection_is_type (connection, NM_SETTING_INFINIBAND_SETTING_NAME)) {
NMSettingInfiniband *s_infiniband;
+ parent = find_infiniband_parent (self, connection);
+ if (!parent)
+ return NULL;
+
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 (out_parent)
+ *out_parent = parent;
+ return g_strdup (nm_setting_infiniband_get_virtual_interface_name (s_infiniband));
}
- return FALSE;
+ /* For any other virtual connection, NMSettingConnection:interface-name is
+ * the virtual device name.
+ */
+ g_return_val_if_fail (ifname != NULL, NULL);
+ return g_strdup (ifname);
}
/***************************/
@@ -1074,9 +1030,11 @@ static NMDevice *
system_create_virtual_device (NMManager *self, NMConnection *connection)
{
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ GError *error = NULL;
GSList *iter;
char *iface = NULL;
NMDevice *device = NULL, *parent = NULL;
+ gboolean nm_owned = FALSE;
iface = get_virtual_iface_name (self, connection, &parent);
if (!iface) {
@@ -1100,21 +1058,34 @@ system_create_virtual_device (NMManager *self, NMConnection *connection)
*/
priv->ignore_link_added_cb++;
- 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)) {
- device = nm_device_bridge_new_for_connection (connection);
- } else if (nm_connection_is_type (connection, NM_SETTING_VLAN_SETTING_NAME)) {
- 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);
+ nm_owned = !nm_platform_link_exists (iface);
+
+ for (iter = priv->factories; iter; iter = iter->next) {
+ device = nm_device_factory_create_virtual_device_for_connection (NM_DEVICE_FACTORY (iter->data),
+ connection,
+ parent,
+ &error);
+ if (device || error) {
+ if (device)
+ g_assert_no_error (error);
+ else {
+ nm_log_err (LOGD_DEVICE, "(%s) failed to create virtual device: %s",
+ nm_connection_get_id (connection), error ? error->message : "(unknown error)");
+ g_clear_error (&error);
+ }
+ break;
+ }
}
if (device) {
- nm_device_set_nm_owned (device);
- add_device (self, device, FALSE);
+ if (nm_owned)
+ nm_device_set_nm_owned (device);
+
+ /* If it was created by NM there's no connection to assume, but if it
+ * previously existed there might be one.
+ */
+ add_device (self, device, !nm_owned);
+
g_object_unref (device);
}
@@ -1138,7 +1109,7 @@ system_create_virtual_devices (NMManager *self)
NMConnection *connection = iter->data;
/* We only create a virtual interface if the connection can autoconnect */
- if ( connection_needs_virtual_device (connection)
+ if ( nm_connection_is_virtual (connection)
&& nm_settings_connection_can_autoconnect (NM_SETTINGS_CONNECTION (connection)))
system_create_virtual_device (self, connection);
}
@@ -1152,7 +1123,7 @@ connection_added (NMSettings *settings,
{
NMConnection *connection = NM_CONNECTION (settings_connection);
- if (connection_needs_virtual_device (connection)) {
+ if (nm_connection_is_virtual (connection)) {
NMSettingConnection *s_con = nm_connection_get_setting_connection (connection);
g_assert (s_con);
@@ -1481,7 +1452,7 @@ device_auth_request_cb (NMDevice *device,
NMAuthChain *chain;
/* Validate the caller */
- subject = nm_auth_subject_new_from_context (context);
+ subject = nm_auth_subject_new_unix_process_from_context (context);
if (!subject) {
error = g_error_new_literal (NM_MANAGER_ERROR,
NM_MANAGER_ERROR_PERMISSION_DENIED,
@@ -1490,10 +1461,10 @@ device_auth_request_cb (NMDevice *device,
}
/* Ensure the subject has permissions for this connection */
- if (connection && !nm_auth_uid_in_acl (connection,
- nm_session_monitor_get (),
- nm_auth_subject_get_uid (subject),
- &error_desc)) {
+ if (connection && !nm_auth_is_subject_in_acl (connection,
+ nm_session_monitor_get (),
+ subject,
+ &error_desc)) {
error = g_error_new_literal (NM_MANAGER_ERROR,
NM_MANAGER_ERROR_PERMISSION_DENIED,
error_desc);
@@ -1524,17 +1495,6 @@ done:
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)
{
@@ -1545,28 +1505,52 @@ match_connection_filter (NMConnection *connection, gpointer user_data)
* get_existing_connection:
* @manager: #NMManager instance
* @device: #NMDevice instance
+ * @out_generated: (allow-none): return TRUE, if the connection was generated.
*
* 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)
+get_existing_connection (NMManager *manager, NMDevice *device, gboolean *out_generated)
{
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
- free_slist GSList *connections = nm_manager_get_activatable_connections (manager);
+ gs_free_slist GSList *connections = nm_manager_get_activatable_connections (manager);
NMConnection *connection = NULL, *matched;
NMSettingsConnection *added = NULL;
GError *error = NULL;
+ NMDevice *master = NULL;
+ int ifindex = nm_device_get_ifindex (device);
+
+ if (out_generated)
+ *out_generated = FALSE;
nm_device_capture_initial_config (device);
+ if (ifindex) {
+ int master_ifindex = nm_platform_link_get_master (ifindex);
+
+ if (master_ifindex) {
+ master = nm_manager_get_device_by_ifindex (manager, master_ifindex);
+ if (!master) {
+ nm_log_dbg (LOGD_DEVICE, "(%s): cannot generate connection for slave before its master (%s/%d)",
+ nm_device_get_iface (device), nm_platform_link_get_name (master_ifindex), master_ifindex);
+ return NULL;
+ }
+ if (!nm_device_get_act_request (master)) {
+ nm_log_dbg (LOGD_DEVICE, "(%s): cannot generate connection for slave before master %s activates",
+ nm_device_get_iface (device), nm_device_get_iface (master));
+ return NULL;
+ }
+ }
+ }
+
/* 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);
+ connection = nm_device_generate_connection (device, master);
if (!connection)
return NULL;
@@ -1598,9 +1582,14 @@ get_existing_connection (NMManager *manager, NMDevice *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 {
+ if (added) {
+ nm_settings_connection_set_flags (NM_SETTINGS_CONNECTION (added),
+ NM_SETTINGS_CONNECTION_FLAGS_NM_GENERATED |
+ NM_SETTINGS_CONNECTION_FLAGS_NM_GENERATED_ASSUMED,
+ TRUE);
+ if (out_generated)
+ *out_generated = TRUE;
+ } else {
nm_log_warn (LOGD_SETTINGS, "(%s) Couldn't save generated connection '%s': %s",
nm_device_get_iface (device),
nm_connection_get_id (connection),
@@ -1657,40 +1646,86 @@ assume_connection (NMManager *self, NMDevice *device, NMConnection *connection)
return TRUE;
}
-static void
+static gboolean
recheck_assume_connection (NMDevice *device, gpointer user_data)
{
- NMManager *self = user_data;
+ NMManager *self = NM_MANAGER (user_data);
NMConnection *connection;
- gboolean was_unmanaged = FALSE;
+ gboolean was_unmanaged = FALSE, success, generated;
+ NMDeviceState state;
if (manager_sleeping (self))
- return;
- if (nm_device_get_unmanaged_flag (device, NM_UNMANAGED_USER))
- return;
+ return FALSE;
+ if (nm_device_get_unmanaged_flag (device, NM_UNMANAGED_USER) ||
+ nm_device_get_unmanaged_flag (device, NM_UNMANAGED_INTERNAL) ||
+ nm_device_get_unmanaged_flag (device, NM_UNMANAGED_EXTERNAL_DOWN) ||
+ nm_device_get_unmanaged_flag (device, NM_UNMANAGED_PARENT))
+ return FALSE;
- connection = get_existing_connection (self, device);
+ state = nm_device_get_state (device);
+ if (state > NM_DEVICE_STATE_DISCONNECTED)
+ return FALSE;
+
+ connection = get_existing_connection (self, device, &generated);
if (!connection) {
nm_log_dbg (LOGD_DEVICE, "(%s): can't assume; no connection",
nm_device_get_iface (device));
- return;
+ return FALSE;
}
- if (nm_device_get_state (device) == NM_DEVICE_STATE_UNMANAGED) {
+ if (state == NM_DEVICE_STATE_UNMANAGED) {
was_unmanaged = TRUE;
nm_device_state_changed (device,
NM_DEVICE_STATE_UNAVAILABLE,
NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED);
}
- if (!assume_connection (self, device, connection)) {
+ success = assume_connection (self, device, connection);
+ if (!success) {
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);
+
+ /* Return default-unmanaged devices to their original state */
+ if (nm_device_get_unmanaged_flag (device, NM_UNMANAGED_DEFAULT)) {
+ nm_device_state_changed (device,
+ NM_DEVICE_STATE_UNMANAGED,
+ NM_DEVICE_STATE_REASON_CONFIG_FAILED);
+ }
+ }
+
+ if (generated) {
+ nm_log_dbg (LOGD_DEVICE, "(%s): connection assumption failed. Deleting generated connection",
+ nm_device_get_iface (device));
+
+ nm_settings_connection_delete (NM_SETTINGS_CONNECTION (connection), NULL, NULL);
+ }
+ }
+
+ return success;
+}
+
+static void
+device_ip_iface_changed (NMDevice *device,
+ GParamSpec *pspec,
+ NMManager *self)
+{
+ const char *ip_iface = nm_device_get_ip_iface (device);
+ GSList *iter;
+
+ /* Remove NMDevice objects that are actually child devices of others,
+ * when the other device finally knows its IP interface name. For example,
+ * remove the PPP interface that's a child of a WWAN device, since it's
+ * not really a standalone NMDevice.
+ */
+ for (iter = NM_MANAGER_GET_PRIVATE (self)->devices; iter; iter = iter->next) {
+ NMDevice *candidate = NM_DEVICE (iter->data);
+
+ if ( candidate != device
+ && g_strcmp0 (nm_device_get_iface (candidate), ip_iface) == 0) {
+ remove_device (self, candidate, FALSE, FALSE);
+ break;
}
}
}
@@ -1699,22 +1734,22 @@ recheck_assume_connection (NMDevice *device, gpointer user_data)
* add_device:
* @self: the #NMManager
* @device: the #NMDevice to add
- * @generate_con: %TRUE if existing connection (if any) should be assumed
+ * @try_assume: %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, gboolean generate_con)
+add_device (NMManager *self, NMDevice *device, gboolean try_assume)
{
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
const char *iface, *driver, *type_desc;
const GSList *unmanaged_specs;
gboolean user_unmanaged, sleeping;
- NMConnection *connection = NULL;
gboolean enabled = FALSE;
RfKillType rtype;
GSList *iter, *remove = NULL;
+ gboolean connection_assumed = FALSE;
/* No duplicates */
if (nm_manager_get_device_by_udi (self, nm_device_get_udi (device)))
@@ -1733,7 +1768,7 @@ add_device (NMManager *self, NMDevice *device, gboolean generate_con)
remove = g_slist_prepend (remove, iter->data);
}
for (iter = remove; iter; iter = iter->next)
- remove_device (self, NM_DEVICE (iter->data), FALSE);
+ remove_device (self, NM_DEVICE (iter->data), FALSE, FALSE);
g_slist_free (remove);
priv->devices = g_slist_append (priv->devices, g_object_ref (device));
@@ -1750,6 +1785,10 @@ add_device (NMManager *self, NMDevice *device, gboolean generate_con)
G_CALLBACK (device_removed_cb),
self);
+ g_signal_connect (device, "notify::" NM_DEVICE_IP_IFACE,
+ G_CALLBACK (device_ip_iface_changed),
+ self);
+
if (priv->startup) {
g_signal_connect (device, "notify::" NM_DEVICE_HAS_PENDING_ACTION,
G_CALLBACK (device_has_pending_action_changed),
@@ -1786,20 +1825,18 @@ add_device (NMManager *self, NMDevice *device, gboolean generate_con)
nm_device_set_initial_unmanaged_flag (device, NM_UNMANAGED_INTERNAL, sleeping);
nm_device_dbus_export (device);
+ nm_device_finish_init (device);
- /* 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);
+ if (try_assume) {
+ connection_assumed = recheck_assume_connection (device, self);
+ g_signal_connect (device, NM_DEVICE_RECHECK_ASSUME,
+ G_CALLBACK (recheck_assume_connection), self);
+ }
- /* 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) {
+ if (!connection_assumed && nm_device_get_managed (device)) {
nm_device_state_changed (device,
NM_DEVICE_STATE_UNAVAILABLE,
- connection ? NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED :
- NM_DEVICE_STATE_REASON_NOW_MANAGED);
+ NM_DEVICE_STATE_REASON_NOW_MANAGED);
}
nm_settings_device_added (priv->settings, device);
@@ -1810,16 +1847,6 @@ add_device (NMManager *self, NMDevice *device, gboolean generate_con)
* 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 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);
- }
}
static NMDevice *
@@ -1837,27 +1864,14 @@ find_device_by_ip_iface (NMManager *self, const gchar *iface)
return NULL;
}
-static NMDevice *
-find_device_by_ifindex (NMManager *self, guint32 ifindex)
-{
- NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
- GSList *iter;
-
- for (iter = priv->devices; iter; iter = g_slist_next (iter)) {
- NMDevice *candidate = NM_DEVICE (iter->data);
-
- if (ifindex == nm_device_get_ifindex (candidate))
- return candidate;
- }
- return NULL;
-}
+/*******************************************************************/
static void
factory_device_added_cb (NMDeviceFactory *factory,
NMDevice *device,
gpointer user_data)
{
- add_device (NM_MANAGER (user_data), device, FALSE);
+ add_device (NM_MANAGER (user_data), device, TRUE);
}
static gboolean
@@ -1877,71 +1891,175 @@ factory_component_added_cb (NMDeviceFactory *factory,
#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)
+struct read_device_factory_paths_data {
+ char *path;
+ struct stat st;
+};
+
+static gint
+read_device_factory_paths_sort_fcn (gconstpointer a, gconstpointer b)
+{
+ const struct read_device_factory_paths_data *da = a;
+ const struct read_device_factory_paths_data *db = b;
+ time_t ta, tb;
+
+ ta = MAX (da->st.st_mtime, da->st.st_ctime);
+ tb = MAX (db->st.st_mtime, db->st.st_ctime);
+
+ if (ta < tb)
+ return 1;
+ if (ta > tb)
+ return -1;
+ return 0;
+}
+
+static char**
+read_device_factory_paths (void)
{
- NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
GDir *dir;
GError *error = NULL;
const char *item;
- char *path;
- GSList *iter;
+ GArray *paths;
+ char **result;
+ guint i;
dir = g_dir_open (NMPLUGINDIR, 0, &error);
if (!dir) {
- nm_log_warn (LOGD_HW, "Failed to open plugin directory %s: %s",
+ nm_log_warn (LOGD_HW, "device plugin: failed to open directory %s: %s",
NMPLUGINDIR,
(error && error->message) ? error->message : "(unknown)");
g_clear_error (&error);
- return;
+ return NULL;
}
+ paths = g_array_new (FALSE, FALSE, sizeof (struct read_device_factory_paths_data));
+
while ((item = g_dir_read_name (dir))) {
- GModule *plugin;
- NMDeviceFactory *factory;
- NMDeviceFactoryCreateFunc create_func;
- NMDeviceFactoryDeviceTypeFunc type_func;
- NMDeviceType dev_type;
- const char *found = NULL;
+ int errsv;
+ struct read_device_factory_paths_data data;
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);
- plugin = g_module_open (path, G_MODULE_BIND_LOCAL);
- g_free (path);
+ data.path = g_build_filename (NMPLUGINDIR, item, NULL);
- if (!plugin) {
- nm_log_warn (LOGD_HW, "(%s): failed to load plugin: %s", item, g_module_error ());
- continue;
+ if (stat (data.path, &data.st) != 0) {
+ errsv = errno;
+ nm_log_warn (LOGD_HW, "device plugin: skip invalid file %s (error during stat: %s)", data.path, strerror (errsv));
+ goto NEXT;
}
-
- 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;
+ if (!S_ISREG (data.st.st_mode))
+ goto NEXT;
+ if (data.st.st_uid != 0) {
+ nm_log_warn (LOGD_HW, "device plugin: skip invalid file %s (file must be owned by root)", data.path);
+ goto NEXT;
+ }
+ if (data.st.st_mode & (S_IWGRP | S_IWOTH | S_ISUID)) {
+ nm_log_warn (LOGD_HW, "device plugin: skip invalid file %s (invalid file permissions)", data.path);
+ goto NEXT;
}
- /* Make sure we don't double-load plugins */
- dev_type = type_func ();
- for (iter = priv->factories; iter; iter = iter->next) {
- NMDeviceFactoryDeviceTypeFunc loaded_type_func;
+ g_array_append_val (paths, data);
+ continue;
+NEXT:
+ g_free (data.path);
+ }
+ g_dir_close (dir);
+
+ /* sort filenames by modification time. */
+ g_array_sort (paths, read_device_factory_paths_sort_fcn);
+
+ result = g_new (char *, paths->len + 1);
+ for (i = 0; i < paths->len; i++)
+ result[i] = g_array_index (paths, struct read_device_factory_paths_data, i).path;
+ result[i] = NULL;
- 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;
+ g_array_free (paths, TRUE);
+ return result;
+}
+
+static gboolean
+_register_device_factory (NMManager *self,
+ NMDeviceFactory *factory,
+ gboolean duplicate_check,
+ const char *path,
+ GError **error)
+{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ NMDeviceType ftype;
+ GSList *iter;
+
+ if (duplicate_check) {
+ /* Make sure we don't double-register factories */
+ ftype = nm_device_factory_get_device_type (factory);
+ for (iter = priv->factories; iter; iter = iter->next) {
+ if (ftype == nm_device_factory_get_device_type (iter->data)) {
+ g_set_error (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_FAILED,
+ "multiple plugins for same type (using '%s' instead of '%s')",
+ (char *) g_object_get_data (G_OBJECT (iter->data), PLUGIN_PATH_TAG),
+ path);
+ return FALSE;
}
}
- 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);
+ }
+
+ priv->factories = g_slist_append (priv->factories, factory);
+
+ 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 (path), g_free);
+ return TRUE;
+}
+
+static void
+load_device_factories (NMManager *self)
+{
+ NMDeviceFactory *factory;
+ const GSList *iter;
+ GError *error = NULL;
+ char **path, **paths;
+
+ /* Register internal factories first */
+ for (iter = nm_device_factory_get_internal_factory_types (); iter; iter = iter->next) {
+ GType ftype = (GType) GPOINTER_TO_SIZE (iter->data);
+
+ factory = (NMDeviceFactory *) g_object_new (ftype, NULL);
+ g_assert (factory);
+ if (_register_device_factory (self, factory, FALSE, "internal", &error)) {
+ nm_log_dbg (LOGD_HW, "Loaded device plugin: %s", g_type_name (ftype));
+ } else {
+ nm_log_warn (LOGD_HW, "Loading device plugin failed: %s", error->message);
+ g_object_unref (factory);
+ g_clear_error (&error);
+ }
+ }
+
+ paths = read_device_factory_paths ();
+ if (!paths)
+ return;
+
+ for (path = paths; *path; path++) {
+ GModule *plugin;
+ NMDeviceFactoryCreateFunc create_func;
+ const char *item;
+
+ item = strrchr (*path, '/');
+ g_assert (item);
+
+ plugin = g_module_open (*path, G_MODULE_BIND_LOCAL);
+
+ if (!plugin) {
+ nm_log_warn (LOGD_HW, "(%s): failed to load plugin: %s", item, g_module_error ());
continue;
}
@@ -1961,28 +2079,21 @@ load_device_factories (NMManager *self)
}
g_clear_error (&error);
- g_module_make_resident (plugin);
- priv->factories = g_slist_prepend (priv->factories, factory);
-
- 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);
-
- priv->factories = g_slist_reverse (priv->factories);
+ if (_register_device_factory (self, factory, TRUE, g_module_name (plugin), &error)) {
+ nm_log_info (LOGD_HW, "Loaded device plugin: %s", g_module_name (plugin));
+ g_module_make_resident (plugin);
+ } else {
+ nm_log_warn (LOGD_HW, "Loading device plugin failed: %s", error->message);
+ g_object_unref (factory);
+ g_module_close (plugin);
+ g_clear_error (&error);
+ }
+ }
+ g_strfreev (paths);
}
+/*******************************************************************/
+
static void
platform_link_added (NMManager *self,
int ifindex,
@@ -1999,7 +2110,7 @@ platform_link_added (NMManager *self,
if (priv->ignore_link_added_cb > 0)
return;
- if (find_device_by_ifindex (self, ifindex))
+ if (nm_manager_get_device_by_ifindex (self, ifindex))
return;
/* Try registered device factories */
@@ -2029,60 +2140,7 @@ platform_link_added (NMManager *self,
return;
if (device == NULL) {
- 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_platform_vlan_get_info (ifindex, &parent_ifindex, NULL)) {
- parent = find_device_by_ifindex (self, parent_ifindex);
- if (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", plink->name);
- }
- } else
- 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
@@ -2091,6 +2149,7 @@ platform_link_added (NMManager *self,
break;
case NM_LINK_TYPE_OLPC_MESH:
+ case NM_LINK_TYPE_TEAM:
case NM_LINK_TYPE_WIFI:
case NM_LINK_TYPE_WIMAX:
nm_log_info (LOGD_HW, "(%s): '%s' plugin not available; creating generic device",
@@ -2124,9 +2183,9 @@ platform_link_cb (NMPlatform *platform,
NMManager *self = NM_MANAGER (user_data);
NMDevice *device;
- device = find_device_by_ifindex (self, ifindex);
+ device = nm_manager_get_device_by_ifindex (self, ifindex);
if (device)
- remove_device (self, device, FALSE);
+ remove_device (self, device, FALSE, TRUE);
break;
}
default:
@@ -2314,7 +2373,7 @@ find_master (NMManager *self,
NMConnection *candidate = iter->data;
char *vname;
- if (connection_needs_virtual_device (candidate)) {
+ if (nm_connection_is_virtual (candidate)) {
vname = get_virtual_iface_name (self, candidate, NULL);
if ( g_strcmp0 (master, vname) == 0
&& is_compatible_with_slave (candidate, connection))
@@ -2458,7 +2517,7 @@ ensure_master_active_connection (NMManager *self,
/* Otherwise, the device is unmanaged, unavailable, or disconnecting */
g_set_error (error,
NM_MANAGER_ERROR,
- NM_MANAGER_ERROR_UNMANAGED_DEVICE,
+ NM_MANAGER_ERROR_DEPENDENCY_FAILED,
"Master device %s unmanaged or not available for activation",
nm_device_get_iface (master_device));
} else if (master_connection) {
@@ -2495,7 +2554,7 @@ ensure_master_active_connection (NMManager *self,
/* Device described by master_connection may be a virtual one that's
* not created yet.
*/
- if (!found_device && connection_needs_virtual_device (master_connection)) {
+ if (!found_device && nm_connection_is_virtual (master_connection)) {
master_ac = nm_manager_activate_connection (self,
master_connection,
NULL,
@@ -2554,7 +2613,7 @@ _internal_activate_device (NMManager *self, NMActiveConnection *active, GError *
device = nm_active_connection_get_device (active);
if (!device) {
- if (!connection_needs_virtual_device (connection)) {
+ if (!nm_connection_is_virtual (connection)) {
NMSettingConnection *s_con = nm_connection_get_setting_connection (connection);
g_assert (s_con);
@@ -2606,10 +2665,10 @@ _internal_activate_device (NMManager *self, NMActiveConnection *active, GError *
existing_connection = nm_device_get_connection (device);
subject = nm_active_connection_get_subject (active);
if (existing_connection &&
- !nm_auth_uid_in_acl (existing_connection,
- nm_session_monitor_get (),
- nm_auth_subject_get_uid (subject),
- &error_desc)) {
+ !nm_auth_is_subject_in_acl (existing_connection,
+ nm_session_monitor_get (),
+ subject,
+ &error_desc)) {
g_set_error (error,
NM_MANAGER_ERROR,
NM_MANAGER_ERROR_PERMISSION_DENIED,
@@ -2633,7 +2692,7 @@ _internal_activate_device (NMManager *self, NMActiveConnection *active, GError *
*/
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,
+ g_set_error (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_CONNECTION_NOT_AVAILABLE,
"%s does not allow automatic connections at this time",
nm_device_get_iface (device));
return FALSE;
@@ -2898,10 +2957,10 @@ nm_manager_activate_connection (NMManager *self,
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)) {
+ if (!nm_auth_is_subject_in_acl (connection,
+ nm_session_monitor_get (),
+ subject,
+ &error_desc)) {
g_set_error_literal (error,
NM_MANAGER_ERROR,
NM_MANAGER_ERROR_PERMISSION_DENIED,
@@ -2942,7 +3001,7 @@ validate_activation_request (NMManager *self,
g_assert (out_vpn);
/* Validate the caller */
- subject = nm_auth_subject_new_from_context (context);
+ subject = nm_auth_subject_new_unix_process_from_context (context);
if (!subject) {
g_set_error_literal (error,
NM_MANAGER_ERROR,
@@ -2952,10 +3011,10 @@ validate_activation_request (NMManager *self,
}
/* 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)) {
+ if (!nm_auth_is_subject_in_acl (connection,
+ nm_session_monitor_get (),
+ subject,
+ &error_desc)) {
g_set_error_literal (error,
NM_MANAGER_ERROR,
NM_MANAGER_ERROR_PERMISSION_DENIED,
@@ -2984,7 +3043,7 @@ validate_activation_request (NMManager *self,
goto error;
}
} else {
- gboolean is_software = connection_needs_virtual_device (connection);
+ gboolean is_software = nm_connection_is_virtual (connection);
/* VPN and software-device connections don't need a device yet */
if (!vpn && !is_software) {
@@ -3272,9 +3331,13 @@ impl_manager_add_and_activate_connection (NMManager *self,
* specific data being in the connection till then (especially in
* validate_activation_request()).
*/
- connection = nm_connection_new ();
- if (settings && g_hash_table_size (settings))
- nm_connection_replace_settings (connection, settings, NULL);
+ connection = nm_simple_connection_new ();
+ if (settings && g_hash_table_size (settings)) {
+ GVariant *settings_dict = nm_utils_connection_hash_to_dict (settings);
+
+ nm_connection_replace_settings (connection, settings_dict, NULL);
+ g_variant_unref (settings_dict);
+ }
subject = validate_activation_request (self,
context,
@@ -3298,16 +3361,18 @@ impl_manager_add_and_activate_connection (NMManager *self,
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,
+ error = g_error_new_literal (NM_CONNECTION_ERROR,
+ NM_CONNECTION_ERROR_MISSING_SETTING,
"VPN connections require a 'vpn' setting");
+ g_prefix_error (&error, "%s: ", NM_SETTING_VPN_SETTING_NAME);
goto error;
}
nm_utils_complete_generic (connection,
NM_SETTING_VPN_SETTING_NAME,
all_connections,
- _("VPN connection %d"),
+ NULL,
+ _("VPN connection"),
NULL,
FALSE); /* No IPv6 by default for now */
} else {
@@ -3368,7 +3433,7 @@ nm_manager_deactivate_connection (NMManager *manager,
}
if (NM_IS_VPN_CONNECTION (active)) {
- NMVPNConnectionStateReason vpn_reason = NM_VPN_CONNECTION_STATE_REASON_USER_DISCONNECTED;
+ NMVpnConnectionStateReason vpn_reason = NM_VPN_CONNECTION_STATE_REASON_USER_DISCONNECTED;
if (reason == NM_DEVICE_STATE_REASON_CONNECTION_REMOVED)
vpn_reason = NM_VPN_CONNECTION_STATE_REASON_CONNECTION_REMOVED;
@@ -3467,7 +3532,7 @@ impl_manager_deactivate_connection (NMManager *self,
}
/* Validate the caller */
- subject = nm_auth_subject_new_from_context (context);
+ subject = nm_auth_subject_new_unix_process_from_context (context);
if (!subject) {
error = g_error_new_literal (NM_MANAGER_ERROR,
NM_MANAGER_ERROR_PERMISSION_DENIED,
@@ -3476,10 +3541,10 @@ impl_manager_deactivate_connection (NMManager *self,
}
/* 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)) {
+ if (!nm_auth_is_subject_in_acl (connection,
+ nm_session_monitor_get (),
+ subject,
+ &error_desc)) {
error = g_error_new_literal (NM_MANAGER_ERROR,
NM_MANAGER_ERROR_PERMISSION_DENIED,
error_desc);
@@ -3965,13 +4030,8 @@ impl_manager_set_logging (NMManager *manager,
}
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'",
- new_level, new_domains);
- g_free (new_level);
- g_free (new_domains);
+ nm_logging_level_to_string (), nm_logging_domains_to_string ());
}
done:
@@ -3987,8 +4047,8 @@ impl_manager_get_logging (NMManager *manager,
char **level,
char **domains)
{
- *level = nm_logging_level_to_string ();
- *domains = nm_logging_domains_to_string ();
+ *level = g_strdup (nm_logging_level_to_string ());
+ *domains = g_strdup (nm_logging_domains_to_string ());
}
static void
@@ -4075,6 +4135,7 @@ void
nm_manager_start (NMManager *self)
{
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+ GSList *iter;
guint i;
/* Set initial radio enabled/disabled state */
@@ -4105,6 +4166,10 @@ nm_manager_start (NMManager *self)
system_unmanaged_devices_changed_cb (priv->settings, NULL, self);
system_hostname_changed_cb (priv->settings, NULL, self);
+ /* Start device factories */
+ for (iter = priv->factories; iter; iter = iter->next)
+ nm_device_factory_start (iter->data);
+
nm_platform_query_devices ();
/*
@@ -4116,6 +4181,16 @@ nm_manager_start (NMManager *self)
check_if_startup_complete (self);
}
+void
+nm_manager_stop (NMManager *self)
+{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
+
+ /* Remove all devices */
+ while (priv->devices)
+ remove_device (self, NM_DEVICE (priv->devices->data), TRUE, TRUE);
+}
+
static gboolean
handle_firmware_changed (gpointer user_data)
{
@@ -4218,6 +4293,7 @@ policy_default_device_changed (GObject *object, GParamSpec *pspec, gpointer user
priv->primary_connection = ac ? g_object_ref (ac) : NULL;
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);
+ g_object_notify (G_OBJECT (self), NM_MANAGER_PRIMARY_CONNECTION_TYPE);
}
}
@@ -4373,7 +4449,7 @@ prop_filter (DBusConnection *connection,
goto out;
}
- subject = nm_auth_subject_new_from_message (connection, message);
+ subject = nm_auth_subject_new_unix_process_from_message (connection, message);
if (!subject) {
reply = dbus_message_new_error (message, NM_PERM_DENIED_ERROR,
"Could not determine request UID.");
@@ -4408,7 +4484,7 @@ out:
}
static void
-authority_changed_cb (gpointer user_data)
+authority_changed_cb (NMAuthManager *auth_manager, gpointer user_data)
{
/* Let clients know they should re-check their authorization */
g_signal_emit (NM_MANAGER (user_data), signals[CHECK_PERMISSIONS], 0);
@@ -4613,7 +4689,7 @@ nm_manager_new (NMSettings *settings,
bus = nm_dbus_manager_get_connection (priv->dbus_mgr);
if (!bus) {
- g_set_error_literal (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_INTERNAL,
+ g_set_error_literal (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_FAILED,
"Failed to initialize D-Bus connection");
g_object_unref (singleton);
return NULL;
@@ -4637,7 +4713,7 @@ nm_manager_new (NMSettings *settings,
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,
+ g_set_error_literal (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_FAILED,
"Failed to register DBus connection filter");
g_object_unref (singleton);
return NULL;
@@ -4773,7 +4849,11 @@ nm_manager_init (NMManager *manager)
G_CALLBACK (resuming_cb), manager);
/* Listen for authorization changes */
- nm_auth_changed_func_register (authority_changed_cb, manager);
+ g_signal_connect (nm_auth_manager_get (),
+ NM_AUTH_MANAGER_SIGNAL_CHANGED,
+ G_CALLBACK (authority_changed_cb),
+ manager);
+
/* Monitor the firmware directory */
if (strlen (KERNEL_FIRMWARE_DIR)) {
@@ -4806,6 +4886,7 @@ get_property (GObject *object, guint prop_id,
GSList *iter;
GPtrArray *array;
const char *path;
+ const char *type;
switch (prop_id) {
case PROP_VERSION:
@@ -4855,6 +4936,10 @@ get_property (GObject *object, guint prop_id,
path = priv->primary_connection ? nm_active_connection_get_path (priv->primary_connection) : NULL;
g_value_set_boxed (value, path ? path : "/");
break;
+ case PROP_PRIMARY_CONNECTION_TYPE:
+ type = priv->primary_connection ? nm_active_connection_get_connection_type (priv->primary_connection) : NULL;
+ g_value_set_string (value, type ? type : "");
+ 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 : "/");
@@ -4925,11 +5010,11 @@ dispose (GObject *object)
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);
+ g_signal_handlers_disconnect_by_func (nm_auth_manager_get (),
+ G_CALLBACK (authority_changed_cb),
+ manager);
- /* Remove all devices */
- while (priv->devices)
- remove_device (manager, NM_DEVICE (priv->devices->data), TRUE);
+ g_assert (priv->devices == NULL);
if (priv->ac_cleanup_id) {
g_source_remove (priv->ac_cleanup_id);
@@ -5015,141 +5100,132 @@ nm_manager_class_init (NMManagerClass *manager_class)
/* properties */
g_object_class_install_property
(object_class, PROP_VERSION,
- g_param_spec_string (NM_MANAGER_VERSION,
- "Version",
- "NetworkManager version",
+ g_param_spec_string (NM_MANAGER_VERSION, "", "",
NULL,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_STATE,
- g_param_spec_uint (NM_MANAGER_STATE,
- "State",
- "Current state",
+ g_param_spec_uint (NM_MANAGER_STATE, "", "",
0, NM_STATE_DISCONNECTED, 0,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_STARTUP,
- g_param_spec_boolean (NM_MANAGER_STARTUP,
- "Startup",
- "Is NetworkManager still starting up",
+ g_param_spec_boolean (NM_MANAGER_STARTUP, "", "",
TRUE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_NETWORKING_ENABLED,
- g_param_spec_boolean (NM_MANAGER_NETWORKING_ENABLED,
- "NetworkingEnabled",
- "Is networking enabled",
+ g_param_spec_boolean (NM_MANAGER_NETWORKING_ENABLED, "", "",
TRUE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_WIRELESS_ENABLED,
- g_param_spec_boolean (NM_MANAGER_WIRELESS_ENABLED,
- "WirelessEnabled",
- "Is wireless enabled",
+ g_param_spec_boolean (NM_MANAGER_WIRELESS_ENABLED, "", "",
TRUE,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_WIRELESS_HARDWARE_ENABLED,
- g_param_spec_boolean (NM_MANAGER_WIRELESS_HARDWARE_ENABLED,
- "WirelessHardwareEnabled",
- "RF kill state",
+ g_param_spec_boolean (NM_MANAGER_WIRELESS_HARDWARE_ENABLED, "", "",
TRUE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_WWAN_ENABLED,
- g_param_spec_boolean (NM_MANAGER_WWAN_ENABLED,
- "WwanEnabled",
- "Is mobile broadband enabled",
+ g_param_spec_boolean (NM_MANAGER_WWAN_ENABLED, "", "",
TRUE,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_WWAN_HARDWARE_ENABLED,
- g_param_spec_boolean (NM_MANAGER_WWAN_HARDWARE_ENABLED,
- "WwanHardwareEnabled",
- "Whether WWAN is disabled by a hardware switch or not",
+ g_param_spec_boolean (NM_MANAGER_WWAN_HARDWARE_ENABLED, "", "",
TRUE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_WIMAX_ENABLED,
- g_param_spec_boolean (NM_MANAGER_WIMAX_ENABLED,
- "WimaxEnabled",
- "Is WiMAX enabled",
+ g_param_spec_boolean (NM_MANAGER_WIMAX_ENABLED, "", "",
TRUE,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_WIMAX_HARDWARE_ENABLED,
- g_param_spec_boolean (NM_MANAGER_WIMAX_HARDWARE_ENABLED,
- "WimaxHardwareEnabled",
- "Whether WiMAX is disabled by a hardware switch or not",
+ g_param_spec_boolean (NM_MANAGER_WIMAX_HARDWARE_ENABLED, "", "",
TRUE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_ACTIVE_CONNECTIONS,
- g_param_spec_boxed (NM_MANAGER_ACTIVE_CONNECTIONS,
- "Active connections",
- "Active connections",
+ g_param_spec_boxed (NM_MANAGER_ACTIVE_CONNECTIONS, "", "",
DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_CONNECTIVITY,
- g_param_spec_uint (NM_MANAGER_CONNECTIVITY,
- "Connectivity",
- "Connectivity state",
+ g_param_spec_uint (NM_MANAGER_CONNECTIVITY, "", "",
NM_CONNECTIVITY_UNKNOWN, NM_CONNECTIVITY_FULL, NM_CONNECTIVITY_UNKNOWN,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_PRIMARY_CONNECTION,
- g_param_spec_boxed (NM_MANAGER_PRIMARY_CONNECTION,
- "Primary connection",
- "Primary connection",
+ g_param_spec_boxed (NM_MANAGER_PRIMARY_CONNECTION, "", "",
DBUS_TYPE_G_OBJECT_PATH,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_PRIMARY_CONNECTION_TYPE,
+ g_param_spec_string (NM_MANAGER_PRIMARY_CONNECTION_TYPE, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
g_object_class_install_property
(object_class, PROP_ACTIVATING_CONNECTION,
- g_param_spec_boxed (NM_MANAGER_ACTIVATING_CONNECTION,
- "Activating connection",
- "Activating connection",
+ g_param_spec_boxed (NM_MANAGER_ACTIVATING_CONNECTION, "", "",
DBUS_TYPE_G_OBJECT_PATH,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/* Hostname is not exported over D-Bus */
g_object_class_install_property
(object_class, PROP_HOSTNAME,
- g_param_spec_string (NM_MANAGER_HOSTNAME,
- "Hostname",
- "Hostname",
+ g_param_spec_string (NM_MANAGER_HOSTNAME, "", "",
NULL,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/* Sleeping is not exported over D-Bus */
g_object_class_install_property
(object_class, PROP_SLEEPING,
- g_param_spec_boolean (NM_MANAGER_SLEEPING,
- "Sleeping",
- "Sleeping",
+ g_param_spec_boolean (NM_MANAGER_SLEEPING, "", "",
FALSE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_DEVICES,
- g_param_spec_boxed (NM_MANAGER_DEVICES,
- "Devices",
- "Devices",
+ g_param_spec_boxed (NM_MANAGER_DEVICES, "", "",
DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/* signals */
signals[DEVICE_ADDED] =
@@ -5204,11 +5280,17 @@ nm_manager_class_init (NMManagerClass *manager_class)
0, NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_OBJECT);
+ signals[CONFIGURE_QUIT] =
+ g_signal_new (NM_MANAGER_CONFIGURE_QUIT,
+ 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 (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);
+ dbus_g_error_domain_register (NM_MANAGER_ERROR, NM_DBUS_INTERFACE, NM_TYPE_MANAGER_ERROR);
}
diff --git a/src/nm-manager.h b/src/nm-manager.h
index 81eefc7b0..3b00e8053 100644
--- a/src/nm-manager.h
+++ b/src/nm-manager.h
@@ -19,15 +19,14 @@
* Copyright (C) 2007 - 2010 Red Hat, Inc.
*/
-#ifndef NM_MANAGER_H
-#define NM_MANAGER_H
+#ifndef __NETWORKMANAGER_MANAGER_H__
+#define __NETWORKMANAGER_MANAGER_H__
#include <glib.h>
#include <glib-object.h>
-#include <dbus/dbus-glib.h>
-#include "nm-device.h"
-#include "nm-settings.h"
-#include "nm-auth-subject.h"
+
+#include "nm-types.h"
+#include "nm-connection.h"
#define NM_TYPE_MANAGER (nm_manager_get_type ())
#define NM_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_MANAGER, NMManager))
@@ -36,22 +35,6 @@
#define NM_IS_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_MANAGER))
#define NM_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_MANAGER, NMManagerClass))
-typedef enum {
- NM_MANAGER_ERROR_UNKNOWN_CONNECTION = 0, /*< nick=UnknownConnection >*/
- NM_MANAGER_ERROR_UNKNOWN_DEVICE, /*< nick=UnknownDevice >*/
- NM_MANAGER_ERROR_UNMANAGED_DEVICE, /*< nick=UnmanagedDevice >*/
- NM_MANAGER_ERROR_SYSTEM_CONNECTION, /*< nick=SystemConnection >*/
- NM_MANAGER_ERROR_PERMISSION_DENIED, /*< nick=PermissionDenied >*/
- NM_MANAGER_ERROR_CONNECTION_NOT_ACTIVE, /*< nick=ConnectionNotActive >*/
- NM_MANAGER_ERROR_ALREADY_ASLEEP_OR_AWAKE, /*< nick=AlreadyAsleepOrAwake >*/
- NM_MANAGER_ERROR_ALREADY_ENABLED_OR_DISABLED, /*< nick=AlreadyEnabledOrDisabled >*/
- 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"
@@ -65,6 +48,7 @@ typedef enum {
#define NM_MANAGER_ACTIVE_CONNECTIONS "active-connections"
#define NM_MANAGER_CONNECTIVITY "connectivity"
#define NM_MANAGER_PRIMARY_CONNECTION "primary-connection"
+#define NM_MANAGER_PRIMARY_CONNECTION_TYPE "primary-connection-type"
#define NM_MANAGER_ACTIVATING_CONNECTION "activating-connection"
#define NM_MANAGER_DEVICES "devices"
@@ -75,11 +59,12 @@ typedef enum {
/* Internal signals */
#define NM_MANAGER_ACTIVE_CONNECTION_ADDED "active-connection-added"
#define NM_MANAGER_ACTIVE_CONNECTION_REMOVED "active-connection-removed"
+#define NM_MANAGER_CONFIGURE_QUIT "configure-quit"
-typedef struct {
+struct _NMManager {
GObject parent;
-} NMManager;
+};
typedef struct {
GObjectClass parent;
@@ -93,45 +78,39 @@ typedef struct {
GType nm_manager_get_type (void);
/* nm_manager_new() should only be used by main.c */
-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);
-
-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);
+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);
+
+NMManager * nm_manager_get (void);
+
+void nm_manager_start (NMManager *manager);
+void nm_manager_stop (NMManager *manager);
+NMState nm_manager_get_state (NMManager *manager);
+const GSList *nm_manager_get_active_connections (NMManager *manager);
+GSList * nm_manager_get_activatable_connections (NMManager *manager);
/* Device handling */
-const GSList *nm_manager_get_devices (NMManager *manager);
-
-NMDevice *nm_manager_get_device_by_master (NMManager *manager,
- 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,
- NMDevice *device,
- NMAuthSubject *subject,
- GError **error);
+const GSList * nm_manager_get_devices (NMManager *manager);
-gboolean nm_manager_deactivate_connection (NMManager *manager,
- const char *connection_path,
- NMDeviceStateReason reason,
- GError **error);
+NMDevice * nm_manager_get_device_by_ifindex (NMManager *manager,
+ int ifindex);
-/* State handling */
+NMActiveConnection *nm_manager_activate_connection (NMManager *manager,
+ NMConnection *connection,
+ const char *specific_object,
+ NMDevice *device,
+ NMAuthSubject *subject,
+ GError **error);
-NMState nm_manager_get_state (NMManager *manager);
+gboolean nm_manager_deactivate_connection (NMManager *manager,
+ const char *connection_path,
+ NMDeviceStateReason reason,
+ GError **error);
-#endif /* NM_MANAGER_H */
+#endif /* __NETWORKMANAGER_MANAGER_H__ */
diff --git a/src/nm-policy.c b/src/nm-policy.c
index d46aca04e..87fcdcc92 100644
--- a/src/nm-policy.c
+++ b/src/nm-policy.c
@@ -19,7 +19,8 @@
* Copyright (C) 2007 - 2008 Novell, Inc.
*/
-#include <config.h>
+#include "config.h"
+
#include <string.h>
#include <unistd.h>
#include <errno.h>
@@ -32,17 +33,24 @@
#include "nm-activation-request.h"
#include "nm-logging.h"
#include "nm-device.h"
+#include "nm-default-route-manager.h"
#include "nm-dbus-manager.h"
#include "nm-setting-ip4-config.h"
#include "nm-setting-connection.h"
#include "nm-platform.h"
#include "nm-dns-manager.h"
#include "nm-vpn-manager.h"
-#include "nm-manager-auth.h"
+#include "nm-auth-utils.h"
#include "nm-firewall-manager.h"
#include "nm-dispatcher.h"
#include "nm-utils.h"
+#include "nm-core-internal.h"
#include "nm-glib-compat.h"
+#include "nm-manager.h"
+#include "nm-settings.h"
+#include "nm-settings-connection.h"
+#include "nm-dhcp4-config.h"
+#include "nm-dhcp6-config.h"
typedef struct {
NMManager *manager;
@@ -54,7 +62,6 @@ typedef struct {
GSList *pending_secondaries;
- NMFirewallManager *fw_manager;
gulong fw_started_id;
NMSettings *settings;
@@ -95,164 +102,22 @@ static NMDevice *
get_best_ip4_device (NMPolicy *self, gboolean fully_activated)
{
NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (self);
- const GSList *iter;
- NMDevice *best = NULL;
- int best_prio = G_MAXINT;
-
- 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;
- NMSettingIP4Config *s_ip4;
- int prio;
- const char *method = NULL;
-
- if ( state <= NM_DEVICE_STATE_DISCONNECTED
- || state >= NM_DEVICE_STATE_DEACTIVATING)
- continue;
-
- if (fully_activated && state < NM_DEVICE_STATE_SECONDARIES)
- continue;
-
- if (fully_activated) {
- NMIP4Config *ip4_config;
-
- ip4_config = nm_device_get_ip4_config (dev);
- if (!ip4_config)
- continue;
-
- /* 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;
- }
-
- req = nm_device_get_act_request (dev);
- g_assert (req);
- connection = nm_act_request_get_connection (req);
- g_assert (connection);
- 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 */
- 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
- || (priv->default_device4 == dev && prio == best_prio)
- || !best) {
- best = dev;
- best_prio = prio;
- }
- }
-
- if (!best)
- return NULL;
-
- if (!fully_activated) {
- NMDeviceState state = nm_device_get_state (best);
-
- /* There's only a best activating device if the best device
- * among all activating and already-activated devices is a
- * still-activating one.
- */
- if (state >= NM_DEVICE_STATE_SECONDARIES)
- return NULL;
- }
-
- return best;
+ return nm_default_route_manager_ip4_get_best_device (nm_default_route_manager_get (),
+ nm_manager_get_devices (priv->manager),
+ fully_activated,
+ priv->default_device4);
}
static NMDevice *
get_best_ip6_device (NMPolicy *self, gboolean fully_activated)
{
NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (self);
- const GSList *iter;
- NMDevice *best = NULL;
- int best_prio = G_MAXINT;
-
- 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;
- NMSettingIP6Config *s_ip6;
- int prio;
- const char *method = NULL;
-
- if ( state <= NM_DEVICE_STATE_DISCONNECTED
- || state >= NM_DEVICE_STATE_DEACTIVATING)
- continue;
- if (fully_activated && state < NM_DEVICE_STATE_SECONDARIES)
- continue;
-
- if (fully_activated) {
- NMIP6Config *ip6_config;
-
- ip6_config = nm_device_get_ip6_config (dev);
- if (!ip6_config)
- continue;
-
- if (!nm_ip6_config_get_gateway (ip6_config) && (devtype != NM_DEVICE_TYPE_MODEM))
- continue;
-
- if (nm_ip6_config_get_never_default (ip6_config))
- continue;
- }
-
- req = nm_device_get_act_request (dev);
- g_assert (req);
- connection = nm_act_request_get_connection (req);
- g_assert (connection);
-
- 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;
-
- 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
- || (priv->default_device6 == dev && prio == best_prio)
- || !best) {
- best = dev;
- best_prio = prio;
- }
- }
-
- if (!best)
- return NULL;
-
- if (!fully_activated) {
- NMDeviceState state = nm_device_get_state (best);
-
- /* There's only a best activating device if the best device
- * among all activating and already-activated devices is an
- * activating one.
- */
- if (state >= NM_DEVICE_STATE_SECONDARIES)
- return NULL;
- }
-
- return best;
+ return nm_default_route_manager_ip6_get_best_device (nm_default_route_manager_get (),
+ nm_manager_get_devices (priv->manager),
+ fully_activated,
+ priv->default_device6);
}
#define FALLBACK_HOSTNAME4 "localhost.localdomain"
@@ -389,11 +254,12 @@ update_system_hostname (NMPolicy *policy, NMDevice *best4, NMDevice *best6)
/* Try a persistent hostname first */
g_object_get (G_OBJECT (priv->manager), NM_MANAGER_HOSTNAME, &configured_hostname, NULL);
- if (configured_hostname) {
+ if (configured_hostname && nm_utils_is_specific_hostname (configured_hostname)) {
_set_hostname (policy, configured_hostname, "from system configuration");
g_free (configured_hostname);
return;
}
+ g_free (configured_hostname);
/* Try automatically determined hostname from the best device's IP config */
if (!best4)
@@ -410,7 +276,7 @@ update_system_hostname (NMPolicy *policy, NMDevice *best4, NMDevice *best6)
}
if (best4) {
- NMDHCP4Config *dhcp4_config;
+ NMDhcp4Config *dhcp4_config;
/* Grab a hostname out of the device's DHCP4 config */
dhcp4_config = nm_device_get_dhcp4_config (best4);
@@ -429,7 +295,7 @@ update_system_hostname (NMPolicy *policy, NMDevice *best4, NMDevice *best6)
}
}
} else if (best6) {
- NMDHCP6Config *dhcp6_config;
+ NMDhcp6Config *dhcp6_config;
/* Grab a hostname out of the device's DHCP6 config */
dhcp6_config = nm_device_get_dhcp6_config (best6);
@@ -467,12 +333,14 @@ update_system_hostname (NMPolicy *policy, NMDevice *best4, NMDevice *best6)
const NMPlatformIP4Address *addr4;
addr4 = nm_ip4_config_get_address (ip4_config, 0);
+ g_clear_object (&priv->lookup_addr);
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_clear_object (&priv->lookup_addr);
priv->lookup_addr = g_inet_address_new_from_bytes ((guint8 *) &addr6->address,
G_SOCKET_FAMILY_IPV6);
} else {
@@ -512,90 +380,19 @@ update_default_ac (NMPolicy *policy,
}
static NMIP4Config *
-get_best_ip4_config (NMPolicy *policy,
+get_best_ip4_config (NMPolicy *self,
gboolean ignore_never_default,
const char **out_ip_iface,
- int *out_ip_ifindex,
NMActiveConnection **out_ac,
NMDevice **out_device,
- NMVPNConnection **out_vpn)
+ NMVpnConnection **out_vpn)
{
- NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
- const GSList *connections, *iter;
- NMDevice *device;
- NMActRequest *req = NULL;
- NMIP4Config *ip4_config = NULL;
-
- /* If a VPN connection is active, it is preferred */
- connections = nm_manager_get_active_connections (priv->manager);
- for (iter = connections; iter; iter = g_slist_next (iter)) {
- NMActiveConnection *active = NM_ACTIVE_CONNECTION (iter->data);
- NMVPNConnection *candidate;
- NMIP4Config *vpn_ip4;
- NMConnection *tmp;
- NMSettingIP4Config *s_ip4;
- NMVPNConnectionState vpn_state;
-
- if (!NM_IS_VPN_CONNECTION (active))
- continue;
-
- candidate = NM_VPN_CONNECTION (active);
-
- tmp = nm_active_connection_get_connection (active);
- g_assert (tmp);
-
- vpn_state = nm_vpn_connection_get_vpn_state (candidate);
- if (vpn_state != NM_VPN_CONNECTION_STATE_ACTIVATED)
- continue;
-
- vpn_ip4 = nm_vpn_connection_get_ip4_config (candidate);
- if (!vpn_ip4)
- continue;
-
- if (ignore_never_default == FALSE) {
- /* Check for a VPN-provided config never-default */
- if (nm_ip4_config_get_never_default (vpn_ip4))
- continue;
-
- /* Check the user's preference from the NMConnection */
- s_ip4 = nm_connection_get_setting_ip4_config (tmp);
- if (nm_setting_ip4_config_get_never_default (s_ip4))
- continue;
- }
-
- ip4_config = vpn_ip4;
- if (out_vpn)
- *out_vpn = candidate;
- if (out_ac)
- *out_ac = active;
- if (out_ip_iface)
- *out_ip_iface = nm_vpn_connection_get_ip_iface (candidate);
- if (out_ip_ifindex)
- *out_ip_ifindex = nm_vpn_connection_get_ip_ifindex (candidate);
- break;
- }
-
- /* If no VPN connections, we use the best device instead */
- if (!ip4_config) {
- device = get_best_ip4_device (policy, TRUE);
- if (device) {
- ip4_config = nm_device_get_ip4_config (device);
- g_assert (ip4_config);
- req = nm_device_get_act_request (device);
- g_assert (req);
-
- if (out_device)
- *out_device = device;
- if (out_ac)
- *out_ac = NM_ACTIVE_CONNECTION (req);
- if (out_ip_iface)
- *out_ip_iface = nm_device_get_ip_iface (device);
- if (out_ip_ifindex)
- *out_ip_ifindex = nm_device_get_ip_ifindex (device);
- }
- }
-
- return ip4_config;
+ return nm_default_route_manager_ip4_get_best_config (nm_default_route_manager_get (),
+ ignore_never_default,
+ out_ip_iface,
+ out_ac,
+ out_device,
+ out_vpn);
}
static void
@@ -603,10 +400,10 @@ update_ip4_dns (NMPolicy *policy, NMDnsManager *dns_mgr)
{
NMIP4Config *ip4_config;
const char *ip_iface = NULL;
- NMVPNConnection *vpn = NULL;
+ NMVpnConnection *vpn = NULL;
NMDnsIPConfigType dns_type = NM_DNS_IP_CONFIG_TYPE_BEST_DEVICE;
- ip4_config = get_best_ip4_config (policy, TRUE, &ip_iface, NULL, NULL, NULL, &vpn);
+ ip4_config = get_best_ip4_config (policy, TRUE, &ip_iface, NULL, NULL, &vpn);
if (ip4_config) {
if (vpn)
dns_type = NM_DNS_IP_CONFIG_TYPE_VPN;
@@ -624,18 +421,14 @@ update_ip4_routing (NMPolicy *policy, gboolean force_update)
NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
NMDevice *best = NULL, *default_device;
NMConnection *connection = NULL;
- NMVPNConnection *vpn = NULL;
+ NMVpnConnection *vpn = NULL;
NMActiveConnection *best_ac = NULL;
- NMIP4Config *ip4_config = NULL;
const char *ip_iface = NULL;
- int ip_ifindex = -1;
- 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).
*/
- ip4_config = get_best_ip4_config (policy, FALSE, &ip_iface, &ip_ifindex, &best_ac, &best, &vpn);
- if (!ip4_config) {
+ if (!get_best_ip4_config (policy, FALSE, &ip_iface, &best_ac, &best, &vpn)) {
gboolean changed;
changed = (priv->default_device4 != NULL);
@@ -650,52 +443,24 @@ update_ip4_routing (NMPolicy *policy, gboolean force_update)
if (!force_update && best && (best == priv->default_device4))
return;
- gw_addr = nm_ip4_config_get_gateway (ip4_config);
-
- 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 (best) {
+ const GSList *connections, *iter;
- default_device = nm_active_connection_get_device (NM_ACTIVE_CONNECTION (vpn));
- } else {
- 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.");
- }
+ connections = nm_manager_get_active_connections (priv->manager);
+ for (iter = connections; iter; iter = g_slist_next (iter)) {
+ NMActiveConnection *active = iter->data;
+
+ if ( NM_IS_VPN_CONNECTION (active)
+ && nm_vpn_connection_get_ip4_config (NM_VPN_CONNECTION (active))
+ && !nm_active_connection_get_device (active))
+ nm_active_connection_set_device (active, best);
}
+ }
+ if (vpn)
+ default_device = nm_active_connection_get_device (NM_ACTIVE_CONNECTION (vpn));
+ else
default_device = best;
- }
update_default_ac (policy, best_ac, nm_active_connection_set_default);
@@ -710,90 +475,19 @@ update_ip4_routing (NMPolicy *policy, gboolean force_update)
}
static NMIP6Config *
-get_best_ip6_config (NMPolicy *policy,
+get_best_ip6_config (NMPolicy *self,
gboolean ignore_never_default,
const char **out_ip_iface,
- int *out_ip_ifindex,
NMActiveConnection **out_ac,
NMDevice **out_device,
- NMVPNConnection **out_vpn)
+ NMVpnConnection **out_vpn)
{
- NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
- const GSList *connections, *iter;
- NMDevice *device;
- NMActRequest *req = NULL;
- NMIP6Config *ip6_config = NULL;
-
- /* If a VPN connection is active, it is preferred */
- connections = nm_manager_get_active_connections (priv->manager);
- for (iter = connections; iter; iter = g_slist_next (iter)) {
- NMActiveConnection *active = NM_ACTIVE_CONNECTION (iter->data);
- NMVPNConnection *candidate;
- NMIP6Config *vpn_ip6;
- NMConnection *tmp;
- NMSettingIP6Config *s_ip6;
- NMVPNConnectionState vpn_state;
-
- if (!NM_IS_VPN_CONNECTION (active))
- continue;
-
- candidate = NM_VPN_CONNECTION (active);
-
- tmp = nm_active_connection_get_connection (active);
- g_assert (tmp);
-
- vpn_state = nm_vpn_connection_get_vpn_state (candidate);
- if (vpn_state != NM_VPN_CONNECTION_STATE_ACTIVATED)
- continue;
-
- vpn_ip6 = nm_vpn_connection_get_ip6_config (candidate);
- if (!vpn_ip6)
- continue;
-
- if (ignore_never_default == FALSE) {
- /* Check for a VPN-provided config never-default */
- if (nm_ip6_config_get_never_default (vpn_ip6))
- continue;
-
- /* Check the user's preference from the NMConnection */
- s_ip6 = nm_connection_get_setting_ip6_config (tmp);
- if (nm_setting_ip6_config_get_never_default (s_ip6))
- continue;
- }
-
- ip6_config = vpn_ip6;
- if (out_vpn)
- *out_vpn = candidate;
- if (out_ac)
- *out_ac = NM_ACTIVE_CONNECTION (candidate);
- if (out_ip_iface)
- *out_ip_iface = nm_vpn_connection_get_ip_iface (candidate);
- if (out_ip_ifindex)
- *out_ip_ifindex = nm_vpn_connection_get_ip_ifindex (candidate);
- break;
- }
-
- /* If no VPN connections, we use the best device instead */
- if (!ip6_config) {
- device = get_best_ip6_device (policy, TRUE);
- if (device) {
- req = nm_device_get_act_request (device);
- g_assert (req);
- ip6_config = nm_device_get_ip6_config (device);
- g_assert (ip6_config);
-
- if (out_device)
- *out_device = device;
- if (out_ac)
- *out_ac = NM_ACTIVE_CONNECTION (req);
- if (out_ip_iface)
- *out_ip_iface = nm_device_get_ip_iface (device);
- if (out_ip_ifindex)
- *out_ip_ifindex = nm_device_get_ip_ifindex (device);
- }
- }
-
- return ip6_config;
+ return nm_default_route_manager_ip6_get_best_config (nm_default_route_manager_get (),
+ ignore_never_default,
+ out_ip_iface,
+ out_ac,
+ out_device,
+ out_vpn);
}
static void
@@ -801,10 +495,10 @@ update_ip6_dns (NMPolicy *policy, NMDnsManager *dns_mgr)
{
NMIP6Config *ip6_config;
const char *ip_iface = NULL;
- NMVPNConnection *vpn = NULL;
+ NMVpnConnection *vpn = NULL;
NMDnsIPConfigType dns_type = NM_DNS_IP_CONFIG_TYPE_BEST_DEVICE;
- ip6_config = get_best_ip6_config (policy, TRUE, &ip_iface, NULL, NULL, NULL, &vpn);
+ ip6_config = get_best_ip6_config (policy, TRUE, &ip_iface, NULL, NULL, &vpn);
if (ip6_config) {
if (vpn)
dns_type = NM_DNS_IP_CONFIG_TYPE_VPN;
@@ -822,18 +516,14 @@ update_ip6_routing (NMPolicy *policy, gboolean force_update)
NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
NMDevice *best = NULL, *default_device6;
NMConnection *connection = NULL;
- NMVPNConnection *vpn = NULL;
+ NMVpnConnection *vpn = NULL;
NMActiveConnection *best_ac = NULL;
- NMIP6Config *ip6_config = NULL;
const char *ip_iface = NULL;
- int ip_ifindex = -1;
- const struct in6_addr *gw_addr;
/* Note that we might have an IPv6 VPN tunneled over an IPv4-only device,
* so we can get (vpn != NULL && best == NULL).
*/
- ip6_config = get_best_ip6_config (policy, FALSE, &ip_iface, &ip_ifindex, &best_ac, &best, &vpn);
- if (!ip6_config) {
+ if (!get_best_ip6_config (policy, FALSE, &ip_iface, &best_ac, &best, &vpn)) {
gboolean changed;
changed = (priv->default_device6 != NULL);
@@ -848,59 +538,24 @@ update_ip6_routing (NMPolicy *policy, gboolean force_update)
if (!force_update && best && (best == priv->default_device6))
return;
- /* If no better gateway is found, use ::; not all configurations will
- * have a gateway, especially WWAN/Point-to-Point connections.
- */
- gw_addr = nm_ip6_config_get_gateway (ip6_config);
- if (!gw_addr)
- gw_addr = &in6addr_any;
-
- 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 (best) {
+ const GSList *connections, *iter;
- default_device6 = nm_active_connection_get_device (NM_ACTIVE_CONNECTION (vpn));
- } else {
- 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.");
+ connections = nm_manager_get_active_connections (priv->manager);
+ for (iter = connections; iter; iter = g_slist_next (iter)) {
+ NMActiveConnection *active = iter->data;
+
+ if ( NM_IS_VPN_CONNECTION (active)
+ && nm_vpn_connection_get_ip6_config (NM_VPN_CONNECTION (active))
+ && !nm_active_connection_get_device (active))
+ nm_active_connection_set_device (active, best);
}
+ }
+ if (vpn)
+ default_device6 = nm_active_connection_get_device (NM_ACTIVE_CONNECTION (vpn));
+ else
default_device6 = best;
- }
update_default_ac (policy, best_ac, nm_active_connection_set_default6);
@@ -985,7 +640,9 @@ auto_activate_device (gpointer user_data)
NMPolicyPrivate *priv;
NMConnection *best_connection;
char *specific_object = NULL;
- GSList *connections, *iter;
+ GPtrArray *connections;
+ GSList *connection_list;
+ guint i;
g_assert (data);
policy = data->policy;
@@ -1000,20 +657,31 @@ auto_activate_device (gpointer user_data)
if (nm_device_get_act_request (data->device))
goto out;
- iter = connections = nm_manager_get_activatable_connections (priv->manager);
+ connection_list = nm_manager_get_activatable_connections (priv->manager);
+ if (!connection_list)
+ goto out;
+
+ connections = _nm_utils_copy_slist_to_array (connection_list, NULL, NULL);
+ g_slist_free (connection_list);
- /* Remove connections that shouldn't be auto-activated */
- while (iter) {
- NMSettingsConnection *candidate = NM_SETTINGS_CONNECTION (iter->data);
+ /* sort is stable (which is important at this point) so that connections
+ * with same priority are still sorted by last-connected-timestamp. */
+ g_ptr_array_sort (connections, (GCompareFunc) nm_utils_cmp_connection_by_autoconnect_priority);
- /* Grab next item before we possibly delete the current item */
- iter = g_slist_next (iter);
+ /* Find the first connection that should be auto-activated */
+ best_connection = NULL;
+ for (i = 0; i < connections->len; i++) {
+ NMSettingsConnection *candidate = NM_SETTINGS_CONNECTION (connections->pdata[i]);
if (!nm_settings_connection_can_autoconnect (candidate))
- connections = g_slist_remove (connections, candidate);
+ continue;
+ if (nm_device_can_auto_connect (data->device, (NMConnection *) candidate, &specific_object)) {
+ best_connection = (NMConnection *) candidate;
+ break;
+ }
}
+ g_ptr_array_free (connections, TRUE);
- best_connection = nm_device_get_best_auto_connection (data->device, connections, &specific_object);
if (best_connection) {
GError *error = NULL;
NMAuthSubject *subject;
@@ -1036,8 +704,6 @@ auto_activate_device (gpointer user_data)
g_object_unref (subject);
}
- g_slist_free (connections);
-
out:
activate_data_free (data);
return G_SOURCE_REMOVE;
@@ -1641,7 +1307,7 @@ device_autoconnect_changed (NMDevice *device,
GParamSpec *pspec,
gpointer user_data)
{
- if (nm_device_get_autoconnect (device))
+ if (nm_device_autoconnect_allowed (device))
schedule_activate_check ((NMPolicy *) user_data, device);
}
@@ -1721,7 +1387,7 @@ device_removed (NMManager *manager, NMDevice *device, gpointer user_data)
/**************************************************************************/
static void
-vpn_connection_activated (NMPolicy *policy, NMVPNConnection *vpn)
+vpn_connection_activated (NMPolicy *policy, NMVpnConnection *vpn)
{
NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
NMIP4Config *ip4_config;
@@ -1748,7 +1414,7 @@ vpn_connection_activated (NMPolicy *policy, NMVPNConnection *vpn)
}
static void
-vpn_connection_deactivated (NMPolicy *policy, NMVPNConnection *vpn)
+vpn_connection_deactivated (NMPolicy *policy, NMVpnConnection *vpn)
{
NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
NMIP4Config *ip4_config;
@@ -1774,10 +1440,10 @@ vpn_connection_deactivated (NMPolicy *policy, NMVPNConnection *vpn)
}
static void
-vpn_connection_state_changed (NMVPNConnection *vpn,
- NMVPNConnectionState new_state,
- NMVPNConnectionState old_state,
- NMVPNConnectionStateReason reason,
+vpn_connection_state_changed (NMVpnConnection *vpn,
+ NMVpnConnectionState new_state,
+ NMVpnConnectionState old_state,
+ NMVpnConnectionStateReason reason,
NMPolicy *policy)
{
if (new_state == NM_VPN_CONNECTION_STATE_ACTIVATED)
@@ -1791,6 +1457,28 @@ vpn_connection_state_changed (NMVPNConnection *vpn,
}
static void
+vpn_connection_retry_after_failure (NMVpnConnection *vpn, NMPolicy *policy)
+{
+ NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
+ NMActiveConnection *ac = NM_ACTIVE_CONNECTION (vpn);
+ NMConnection *connection = nm_active_connection_get_connection (ac);
+ GError *error = NULL;
+
+ /* Attempt to reconnect VPN connections that failed after being connected */
+ if (!nm_manager_activate_connection (priv->manager,
+ connection,
+ NULL,
+ NULL,
+ nm_active_connection_get_subject (ac),
+ &error)) {
+ nm_log_warn (LOGD_DEVICE, "VPN '%s' reconnect failed: %s",
+ nm_connection_get_id (connection),
+ error->message ? error->message : "unknown");
+ g_clear_error (&error);
+ }
+}
+
+static void
active_connection_state_changed (NMActiveConnection *active,
GParamSpec *pspec,
NMPolicy *policy)
@@ -1814,6 +1502,9 @@ active_connection_added (NMManager *manager,
g_signal_connect (active, NM_VPN_CONNECTION_INTERNAL_STATE_CHANGED,
G_CALLBACK (vpn_connection_state_changed),
policy);
+ g_signal_connect (active, NM_VPN_CONNECTION_INTERNAL_RETRY_AFTER_FAILURE,
+ G_CALLBACK (vpn_connection_retry_after_failure),
+ policy);
}
g_signal_connect (active, "notify::" NM_ACTIVE_CONNECTION_STATE,
@@ -1832,6 +1523,9 @@ active_connection_removed (NMManager *manager,
vpn_connection_state_changed,
policy);
g_signal_handlers_disconnect_by_func (active,
+ vpn_connection_retry_after_failure,
+ policy);
+ g_signal_handlers_disconnect_by_func (active,
active_connection_state_changed,
policy);
}
@@ -1882,8 +1576,9 @@ firewall_update_zone (NMPolicy *policy, NMConnection *connection)
NMDevice *dev = NM_DEVICE (iter->data);
if ( (nm_device_get_connection (dev) == connection)
- && (nm_device_get_state (dev) == NM_DEVICE_STATE_ACTIVATED)) {
- nm_firewall_manager_add_or_change_zone (priv->fw_manager,
+ && (nm_device_get_state (dev) == NM_DEVICE_STATE_ACTIVATED)
+ && !nm_device_uses_assumed_connection (dev)) {
+ nm_firewall_manager_add_or_change_zone (nm_firewall_manager_get (),
nm_device_get_ip_iface (dev),
nm_setting_connection_get_zone (s_con),
FALSE, /* change zone */
@@ -1912,8 +1607,9 @@ firewall_started (NMFirewallManager *manager,
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,
+ if ( nm_device_get_state (dev) == NM_DEVICE_STATE_ACTIVATED
+ && !nm_device_uses_assumed_connection (dev)) {
+ nm_firewall_manager_add_or_change_zone (nm_firewall_manager_get (),
nm_device_get_ip_iface (dev),
nm_setting_connection_get_zone (s_con),
FALSE, /* still change zone */
@@ -1942,9 +1638,10 @@ dns_config_changed (NMDnsManager *dns_manager, gpointer user_data)
/* Re-start the hostname lookup thread if we don't have hostname yet. */
if (priv->lookup_addr) {
- char *str = g_inet_address_to_string (priv->lookup_addr);
+ char *str = NULL;
- nm_log_dbg (LOGD_DNS, "restarting reverse-lookup thread for address %s", str);
+ nm_log_dbg (LOGD_DNS, "restarting reverse-lookup thread for address %s",
+ (str = g_inet_address_to_string (priv->lookup_addr)));
g_free (str);
priv->lookup_cancellable = g_cancellable_new ();
@@ -2069,7 +1766,6 @@ nm_policy_new (NMManager *manager, NMSettings *settings)
NMPolicy *policy;
NMPolicyPrivate *priv;
static gboolean initialized = FALSE;
- gulong id;
char hostname[HOST_NAME_MAX + 2];
g_return_val_if_fail (NM_IS_MANAGER (manager), NULL);
@@ -2085,17 +1781,12 @@ nm_policy_new (NMManager *manager, NMSettings *settings)
memset (hostname, 0, sizeof (hostname));
if (gethostname (&hostname[0], HOST_NAME_MAX) == 0) {
/* only cache it if it's a valid hostname */
- if ( strlen (hostname)
- && strcmp (hostname, "localhost")
- && strcmp (hostname, "localhost.localdomain")
- && strcmp (hostname, "(none)"))
+ if (*hostname && nm_utils_is_specific_hostname (hostname))
priv->orig_hostname = g_strdup (hostname);
}
- priv->fw_manager = nm_firewall_manager_get();
- id = g_signal_connect (priv->fw_manager, "started",
- G_CALLBACK (firewall_started), policy);
- priv->fw_started_id = id;
+ priv->fw_started_id = g_signal_connect (nm_firewall_manager_get (), "started",
+ G_CALLBACK (firewall_started), policy);
priv->dns_manager = nm_dns_manager_get ();
nm_dns_manager_set_initial_hostname (priv->dns_manager, priv->orig_hostname);
@@ -2201,10 +1892,9 @@ dispose (GObject *object)
g_slist_free_full (priv->pending_secondaries, (GDestroyNotify) pending_secondary_data_free);
priv->pending_secondaries = NULL;
- if (priv->fw_manager) {
- g_signal_handler_disconnect (priv->fw_manager, priv->fw_started_id);
- g_object_unref (priv->fw_manager);
- priv->fw_manager = NULL;
+ if (priv->fw_started_id) {
+ g_signal_handler_disconnect (nm_firewall_manager_get (), priv->fw_started_id);
+ priv->fw_started_id = 0;
}
if (priv->dns_manager) {
@@ -2260,30 +1950,26 @@ nm_policy_class_init (NMPolicyClass *policy_class)
g_object_class_install_property
(object_class, PROP_DEFAULT_IP4_DEVICE,
- g_param_spec_object (NM_POLICY_DEFAULT_IP4_DEVICE,
- "Default IP4 device",
- "Default IP4 device",
+ g_param_spec_object (NM_POLICY_DEFAULT_IP4_DEVICE, "", "",
NM_TYPE_DEVICE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_DEFAULT_IP6_DEVICE,
- g_param_spec_object (NM_POLICY_DEFAULT_IP6_DEVICE,
- "Default IP6 device",
- "Default IP6 device",
+ g_param_spec_object (NM_POLICY_DEFAULT_IP6_DEVICE, "", "",
NM_TYPE_DEVICE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_ACTIVATING_IP4_DEVICE,
- g_param_spec_object (NM_POLICY_ACTIVATING_IP4_DEVICE,
- "Activating default IP4 device",
- "Activating default IP4 device",
+ g_param_spec_object (NM_POLICY_ACTIVATING_IP4_DEVICE, "", "",
NM_TYPE_DEVICE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_ACTIVATING_IP6_DEVICE,
- g_param_spec_object (NM_POLICY_ACTIVATING_IP6_DEVICE,
- "Activating default IP6 device",
- "Activating default IP6 device",
+ g_param_spec_object (NM_POLICY_ACTIVATING_IP6_DEVICE, "", "",
NM_TYPE_DEVICE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
}
diff --git a/src/nm-policy.h b/src/nm-policy.h
index 6e83182a9..76653529e 100644
--- a/src/nm-policy.h
+++ b/src/nm-policy.h
@@ -19,11 +19,10 @@
* Copyright (C) 2007 - 2008 Novell, Inc.
*/
-#ifndef NM_POLICY_H
-#define NM_POLICY_H
+#ifndef __NETWORKMANAGER_POLICY_H__
+#define __NETWORKMANAGER_POLICY_H__
-#include "nm-manager.h"
-#include "nm-settings.h"
+#include "nm-types.h"
#define NM_TYPE_POLICY (nm_policy_get_type ())
#define NM_POLICY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_POLICY, NMPolicy))
@@ -37,9 +36,9 @@
#define NM_POLICY_ACTIVATING_IP4_DEVICE "activating-ip4-device"
#define NM_POLICY_ACTIVATING_IP6_DEVICE "activating-ip6-device"
-typedef struct {
+struct _NMPolicy {
GObject parent;
-} NMPolicy;
+};
typedef struct {
GObjectClass parent;
@@ -55,4 +54,4 @@ NMDevice *nm_policy_get_default_ip6_device (NMPolicy *policy);
NMDevice *nm_policy_get_activating_ip4_device (NMPolicy *policy);
NMDevice *nm_policy_get_activating_ip6_device (NMPolicy *policy);
-#endif /* NM_POLICY_H */
+#endif /* __NETWORKMANAGER_POLICY_H__ */
diff --git a/src/posix-signals/nm-posix-signals.c b/src/nm-posix-signals.c
index 22fed8310..22fed8310 100644
--- a/src/posix-signals/nm-posix-signals.c
+++ b/src/nm-posix-signals.c
diff --git a/src/posix-signals/nm-posix-signals.h b/src/nm-posix-signals.h
index 81be5e1c4..e2af559ba 100644
--- a/src/posix-signals/nm-posix-signals.h
+++ b/src/nm-posix-signals.h
@@ -18,8 +18,8 @@
* Copyright (C) 2012 Red Hat, Inc.
*/
-#ifndef NM_POSIX_SIGNALS_H
-#define NM_POSIX_SIGNALS_H
+#ifndef __NETWORKMANAGER_POSIX_SIGNALS_H__
+#define __NETWORKMANAGER_POSIX_SIGNALS_H__
#include <glib.h>
#include <signal.h>
@@ -33,4 +33,4 @@ void nm_unblock_posix_signals (gpointer user_data);
void nm_save_original_signal_mask (sigset_t sig_mask);
const sigset_t *nm_get_original_signal_mask (void);
-#endif /* NM_POSIX_SIGNALS_H */
+#endif /* __NETWORKMANAGER_POSIX_SIGNALS_H__ */
diff --git a/src/nm-ppp-manager-glue.h b/src/nm-ppp-manager-glue.h
index 4b215165e..c3ba2ee45 100644
--- a/src/nm-ppp-manager-glue.h
+++ b/src/nm-ppp-manager-glue.h
@@ -161,13 +161,14 @@ G_END_DECLS
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 },
+ { (GCallback) impl_ppp_manager_set_ip6_config, dbus_glib_marshal_nm_ppp_manager_BOOLEAN__BOXED_POINTER, 150 },
+ { (GCallback) impl_ppp_manager_set_state, dbus_glib_marshal_nm_ppp_manager_BOOLEAN__UINT_POINTER, 216 },
};
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",
+ 4,
+"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\0SetIp6Config\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 6e07c2570..7ba62aa2d 100644
--- a/src/nm-properties-changed-signal.c
+++ b/src/nm-properties-changed-signal.c
@@ -19,6 +19,8 @@
* Copyright (C) 2008 - 2012 Red Hat, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include <stdio.h>
diff --git a/src/nm-rfkill-manager.c b/src/nm-rfkill-manager.c
index b02f85f54..27f3ca012 100644
--- a/src/nm-rfkill-manager.c
+++ b/src/nm-rfkill-manager.c
@@ -18,7 +18,7 @@
* Copyright (C) 2009 - 2013 Red Hat, Inc.
*/
-#include <config.h>
+#include "config.h"
#include <string.h>
#include <gudev/gudev.h>
diff --git a/src/nm-rfkill-manager.h b/src/nm-rfkill-manager.h
index b26261b83..220f3c2c6 100644
--- a/src/nm-rfkill-manager.h
+++ b/src/nm-rfkill-manager.h
@@ -21,8 +21,10 @@
#include <glib-object.h>
-#ifndef NM_RFKILL_MANAGER_H
-#define NM_RFKILL_MANAGER_H
+#include "nm-types.h"
+
+#ifndef __NETWORKMANAGER_RFKILL_MANAGER_H__
+#define __NETWORKMANAGER_RFKILL_MANAGER_H__
typedef enum {
RFKILL_UNBLOCKED = 0,
@@ -51,9 +53,9 @@ typedef enum {
#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 {
+struct _NMRfkillManager {
GObject parent;
-} NMRfkillManager;
+};
typedef struct {
GObjectClass parent;
diff --git a/src/nm-session-monitor-ck.c b/src/nm-session-monitor-ck.c
index 75e1c9272..964874bf8 100644
--- a/src/nm-session-monitor-ck.c
+++ b/src/nm-session-monitor-ck.c
@@ -19,6 +19,7 @@
*/
#include "config.h"
+
#include <errno.h>
#include <string.h>
#include <sys/stat.h>
@@ -27,6 +28,7 @@
#include "nm-session-utils.h"
#include "nm-session-monitor.h"
+#include "nm-errors.h"
/* <internal>
* SECTION:nm-session-monitor
@@ -86,8 +88,8 @@ check_key (GKeyFile *keyfile, const char *group, const char *key, GError **error
if (!error) {
g_set_error (error,
- NM_SESSION_MONITOR_ERROR,
- NM_SESSION_MONITOR_ERROR_MALFORMED_DATABASE,
+ NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_FAILED,
"ConsoleKit database " CKDB_PATH " group '%s' had no '%s' key",
group, key);
}
@@ -175,8 +177,8 @@ reload_database (NMSessionMonitor *self, GError **error)
errno = 0;
if (stat (CKDB_PATH, &statbuf) != 0) {
g_set_error (error,
- NM_SESSION_MONITOR_ERROR,
- errno == ENOENT ? NM_SESSION_MONITOR_ERROR_NO_DATABASE : NM_SESSION_MONITOR_ERROR_IO_ERROR,
+ NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_FAILED,
"Error statting file " CKDB_PATH ": %s",
strerror (errno));
goto error;
@@ -190,8 +192,8 @@ reload_database (NMSessionMonitor *self, GError **error)
groups = g_key_file_get_groups (self->database, &len);
if (!groups) {
g_set_error_literal (error,
- NM_SESSION_MONITOR_ERROR,
- NM_SESSION_MONITOR_ERROR_IO_ERROR,
+ NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_FAILED,
"Could not load groups from " CKDB_PATH "");
goto error;
}
@@ -238,8 +240,8 @@ ensure_database (NMSessionMonitor *self, GError **error)
errno = 0;
if (stat (CKDB_PATH, &statbuf) != 0) {
g_set_error (error,
- NM_SESSION_MONITOR_ERROR,
- errno == ENOENT ? NM_SESSION_MONITOR_ERROR_NO_DATABASE : NM_SESSION_MONITOR_ERROR_IO_ERROR,
+ NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_FAILED,
"Error statting file " CKDB_PATH " to check timestamp: %s",
strerror (errno));
goto out;
@@ -284,18 +286,14 @@ nm_session_monitor_init (NMSessionMonitor *self)
self->sessions_by_uid = g_hash_table_new (g_direct_hash, g_direct_equal);
- error = NULL;
if (!ensure_database (self, &error)) {
- /* Ignore the first error if the CK database isn't found yet */
- if (g_error_matches (error,
- NM_SESSION_MONITOR_ERROR,
- NM_SESSION_MONITOR_ERROR_NO_DATABASE) == FALSE) {
- nm_log_err (LOGD_CORE, "Error loading " CKDB_PATH ": %s", error->message);
- }
+ nm_log_dbg (LOGD_CORE, "Error loading " CKDB_PATH ": %s", error->message);
+
+ /* Ignore the first error, the CK database might not exist yet */
g_error_free (error);
+ error = NULL;
}
- error = NULL;
file = g_file_new_for_path (CKDB_PATH);
self->database_monitor = g_file_monitor_file (file, G_FILE_MONITOR_NONE, NULL, &error);
g_object_unref (file);
@@ -386,8 +384,8 @@ nm_session_monitor_user_has_session (NMSessionMonitor *monitor,
s = g_hash_table_lookup (monitor->sessions_by_user, (gpointer) username);
if (!s) {
g_set_error (error,
- NM_SESSION_MONITOR_ERROR,
- NM_SESSION_MONITOR_ERROR_UNKNOWN_USER,
+ NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_FAILED,
"No session found for user '%s'",
username);
return FALSE;
@@ -423,8 +421,8 @@ nm_session_monitor_uid_has_session (NMSessionMonitor *monitor,
s = g_hash_table_lookup (monitor->sessions_by_uid, GUINT_TO_POINTER (uid));
if (!s) {
g_set_error (error,
- NM_SESSION_MONITOR_ERROR,
- NM_SESSION_MONITOR_ERROR_UNKNOWN_USER,
+ NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_FAILED,
"No session found for uid %d",
uid);
return FALSE;
@@ -459,8 +457,8 @@ nm_session_monitor_user_active (NMSessionMonitor *monitor,
s = g_hash_table_lookup (monitor->sessions_by_user, (gpointer) username);
if (!s) {
g_set_error (error,
- NM_SESSION_MONITOR_ERROR,
- NM_SESSION_MONITOR_ERROR_UNKNOWN_USER,
+ NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_FAILED,
"No session found for user '%s'",
username);
return FALSE;
@@ -493,8 +491,8 @@ nm_session_monitor_uid_active (NMSessionMonitor *monitor,
s = g_hash_table_lookup (monitor->sessions_by_uid, GUINT_TO_POINTER (uid));
if (!s) {
g_set_error (error,
- NM_SESSION_MONITOR_ERROR,
- NM_SESSION_MONITOR_ERROR_UNKNOWN_USER,
+ NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_FAILED,
"No session found for uid '%d'",
uid);
return FALSE;
diff --git a/src/nm-session-monitor-null.c b/src/nm-session-monitor-null.c
index 5d8ecaaf1..bffb75d35 100644
--- a/src/nm-session-monitor-null.c
+++ b/src/nm-session-monitor-null.c
@@ -19,6 +19,7 @@
*/
#include "config.h"
+
#include <string.h>
#include "nm-logging.h"
diff --git a/src/nm-session-monitor-systemd.c b/src/nm-session-monitor-systemd.c
index f195c1e77..dcb0004dc 100644
--- a/src/nm-session-monitor-systemd.c
+++ b/src/nm-session-monitor-systemd.c
@@ -21,6 +21,7 @@
*/
#include "config.h"
+
#include <errno.h>
#include <pwd.h>
#include <grp.h>
diff --git a/src/nm-session-monitor.h b/src/nm-session-monitor.h
index 77ea9a036..3efe6eca6 100644
--- a/src/nm-session-monitor.h
+++ b/src/nm-session-monitor.h
@@ -18,11 +18,13 @@
* Author: Dan Williams <dcbw@redhat.com>
*/
-#ifndef NM_SESSION_MONITOR_H
-#define NM_SESSION_MONITOR_H
+#ifndef __NETWORKMANAGER_SESSION_MONITOR_H__
+#define __NETWORKMANAGER_SESSION_MONITOR_H__
#include <glib-object.h>
+#include "nm-types.h"
+
G_BEGIN_DECLS
#define NM_TYPE_SESSION_MONITOR (nm_session_monitor_get_type ())
@@ -34,7 +36,6 @@ G_BEGIN_DECLS
#define NM_SESSION_MONITOR_CHANGED "changed"
-typedef struct _NMSessionMonitor NMSessionMonitor;
typedef struct _NMSessionMonitorClass NMSessionMonitorClass;
GType nm_session_monitor_get_type (void) G_GNUC_CONST;
@@ -60,5 +61,5 @@ gboolean nm_session_monitor_uid_active (NMSessionMonitor *monitor
G_END_DECLS
-#endif /* NM_SESSION_MONITOR_H */
+#endif /* __NETWORKMANAGER_SESSION_MONITOR_H__ */
diff --git a/src/nm-session-utils.c b/src/nm-session-utils.c
index 269e2f81c..eb156fad0 100644
--- a/src/nm-session-utils.c
+++ b/src/nm-session-utils.c
@@ -17,22 +17,13 @@
* Author: Dan Williams <dcbw@redhat.com>
*/
+#include "config.h"
+
#include <pwd.h>
#include <sys/types.h>
#include "nm-session-utils.h"
-
-/********************************************************************/
-
-GQuark
-nm_session_monitor_error_quark (void)
-{
- static GQuark ret = 0;
-
- if (G_UNLIKELY (ret == 0))
- ret = g_quark_from_static_string ("nm-session-monitor-error");
- return ret;
-}
+#include "nm-errors.h"
/********************************************************************/
@@ -44,8 +35,8 @@ nm_session_uid_to_user (uid_t uid, const char **out_user, GError **error)
pw = getpwuid (uid);
if (!pw) {
g_set_error (error,
- NM_SESSION_MONITOR_ERROR,
- NM_SESSION_MONITOR_ERROR_UNKNOWN_USER,
+ NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_FAILED,
"Could not get username for UID %d",
uid);
return FALSE;
@@ -64,8 +55,8 @@ nm_session_user_to_uid (const char *user, uid_t *out_uid, GError **error)
pw = getpwnam (user);
if (!pw) {
g_set_error (error,
- NM_SESSION_MONITOR_ERROR,
- NM_SESSION_MONITOR_ERROR_UNKNOWN_USER,
+ NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_FAILED,
"Could not get UID for username '%s'",
user);
return FALSE;
diff --git a/src/nm-session-utils.h b/src/nm-session-utils.h
index 54b6d4c43..e626f52ae 100644
--- a/src/nm-session-utils.h
+++ b/src/nm-session-utils.h
@@ -17,23 +17,12 @@
* Author: Dan Williams <dcbw@redhat.com>
*/
-#ifndef NM_SESSION_UTILS_H
-#define NM_SESSION_UTILS_H
+#ifndef __NETWORKMANAGER_SESSION_UTILS_H__
+#define __NETWORKMANAGER_SESSION_UTILS_H__
#include <glib.h>
#include <glib-object.h>
-#define NM_SESSION_MONITOR_ERROR (nm_session_monitor_error_quark ())
-GQuark nm_session_monitor_error_quark (void) G_GNUC_CONST;
-GType nm_session_monitor_error_get_type (void) G_GNUC_CONST;
-
-typedef enum {
- NM_SESSION_MONITOR_ERROR_IO_ERROR = 0, /*< nick=IOError >*/
- NM_SESSION_MONITOR_ERROR_MALFORMED_DATABASE, /*< nick=MalformedDatabase >*/
- NM_SESSION_MONITOR_ERROR_UNKNOWN_USER, /*< nick=UnknownUser >*/
- NM_SESSION_MONITOR_ERROR_NO_DATABASE, /*< nick=NoDatabase >*/
-} NMSessionMonitorError;
-
gboolean nm_session_uid_to_user (uid_t uid, const char **out_user, GError **error);
gboolean nm_session_user_to_uid (const char *user, uid_t *out_uid, GError **error);
diff --git a/src/nm-settings-connection-glue.h b/src/nm-settings-connection-glue.h
index 8cace5130..23797562d 100644
--- a/src/nm-settings-connection-glue.h
+++ b/src/nm-settings-connection-glue.h
@@ -158,13 +158,14 @@ static const DBusGMethodInfo dbus_glib_nm_settings_connection_methods[] = {
{ (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 },
+ { (GCallback) impl_settings_connection_clear_secrets, dbus_glib_marshal_nm_settings_connection_NONE__POINTER, 433 },
+ { (GCallback) impl_settings_connection_save, dbus_glib_marshal_nm_settings_connection_NONE__POINTER, 500 },
};
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",
+ 7,
+"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\0ClearSecrets\0A\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-sleep-monitor-systemd.c b/src/nm-sleep-monitor-systemd.c
index 55134c486..c0bc65e4a 100644
--- a/src/nm-sleep-monitor-systemd.c
+++ b/src/nm-sleep-monitor-systemd.c
@@ -18,11 +18,10 @@
*/
#include "config.h"
+
#include <errno.h>
#include <string.h>
#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>
@@ -149,24 +148,59 @@ signal_cb (GDBusProxy *proxy,
}
static void
-sleep_setup (NMSleepMonitor *self)
+name_owner_cb (GObject *object,
+ GParamSpec *pspec,
+ gpointer user_data)
{
- GDBusConnection *bus;
+ GDBusProxy *proxy = G_DBUS_PROXY (object);
+ NMSleepMonitor *self = NM_SLEEP_MONITOR (user_data);
+ char *owner;
+
+ g_assert (proxy == self->sd_proxy);
+
+ owner = g_dbus_proxy_get_name_owner (proxy);
+ if (owner)
+ take_inhibitor (self);
+ else
+ drop_inhibitor (self);
+ g_free (owner);
+}
- bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
- self->sd_proxy = g_dbus_proxy_new_sync (bus, 0, NULL,
- SD_NAME, SD_PATH, SD_INTERFACE,
- NULL, NULL);
- g_object_unref (bus);
+static void
+on_proxy_acquired (GObject *object,
+ GAsyncResult *res,
+ NMSleepMonitor *self)
+{
+ GError *error = NULL;
+ char *owner;
+
+ self->sd_proxy = g_dbus_proxy_new_for_bus_finish (res, &error);
+ if (!self->sd_proxy) {
+ nm_log_warn (LOGD_SUSPEND, "Failed to acquire logind proxy: %s", error->message);
+ g_clear_error (&error);
+ return;
+ }
+
+ g_signal_connect (self->sd_proxy, "notify::g-name-owner", G_CALLBACK (name_owner_cb), self);
g_signal_connect (self->sd_proxy, "g-signal", G_CALLBACK (signal_cb), self);
+
+ owner = g_dbus_proxy_get_name_owner (self->sd_proxy);
+ if (owner)
+ take_inhibitor (self);
+ g_free (owner);
}
static void
nm_sleep_monitor_init (NMSleepMonitor *self)
{
self->inhibit_fd = -1;
- sleep_setup (self);
- take_inhibitor (self);
+ g_dbus_proxy_new_for_bus (G_BUS_TYPE_SYSTEM,
+ G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START |
+ G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES,
+ NULL,
+ SD_NAME, SD_PATH, SD_INTERFACE,
+ NULL,
+ (GAsyncReadyCallback) on_proxy_acquired, self);
}
static void
diff --git a/src/nm-sleep-monitor-upower.c b/src/nm-sleep-monitor-upower.c
index 58402abd4..39cce5958 100644
--- a/src/nm-sleep-monitor-upower.c
+++ b/src/nm-sleep-monitor-upower.c
@@ -18,6 +18,7 @@
*/
#include "config.h"
+
#include <errno.h>
#include <string.h>
#include <sys/stat.h>
diff --git a/src/nm-sleep-monitor.h b/src/nm-sleep-monitor.h
index 173e6a136..84623771a 100644
--- a/src/nm-sleep-monitor.h
+++ b/src/nm-sleep-monitor.h
@@ -17,11 +17,13 @@
* Author: Matthias Clasen <mclasen@redhat.com>
*/
-#ifndef NM_SLEEP_MONITOR_H
-#define NM_SLEEP_MONITOR_H
+#ifndef __NETWORKMANAGER_SLEEP_MONITOR_H__
+#define __NETWORKMANAGER_SLEEP_MONITOR_H__
#include <glib-object.h>
+#include "nm-types.h"
+
G_BEGIN_DECLS
#define NM_TYPE_SLEEP_MONITOR (nm_sleep_monitor_get_type ())
@@ -34,7 +36,6 @@ G_BEGIN_DECLS
#define NM_SLEEP_MONITOR_SLEEPING "sleeping"
#define NM_SLEEP_MONITOR_RESUMING "resuming"
-typedef struct _NMSleepMonitor NMSleepMonitor;
typedef struct _NMSleepMonitorClass NMSleepMonitorClass;
GType nm_sleep_monitor_get_type (void) G_GNUC_CONST;
@@ -42,5 +43,5 @@ NMSleepMonitor *nm_sleep_monitor_get (void);
G_END_DECLS
-#endif /* NM_SLEEP_MONITOR_H */
+#endif /* __NETWORKMANAGER_SLEEP_MONITOR_H__ */
diff --git a/src/nm-types.h b/src/nm-types.h
index c558d7ba5..4a93567e1 100644
--- a/src/nm-types.h
+++ b/src/nm-types.h
@@ -18,9 +18,97 @@
* Copyright (C) 2012 Red Hat, Inc.
*/
-#ifndef NM_TYPES_H
-#define NM_TYPES_H
+#ifndef __NETWORKMANAGER_TYPES_H__
+#define __NETWORKMANAGER_TYPES_H__
-typedef struct _NMDevice NMDevice;
+/* core */
+typedef struct _NMActiveConnection NMActiveConnection;
+typedef struct _NMVpnConnection NMVpnConnection;
+typedef struct _NMActRequest NMActRequest;
+typedef struct _NMAuthSubject NMAuthSubject;
+typedef struct _NMConnectionProvider NMConnectionProvider;
+typedef struct _NMConnectivity NMConnectivity;
+typedef struct _NMDBusManager NMDBusManager;
+typedef struct _NMDefaultRouteManager NMDefaultRouteManager;
+typedef struct _NMDevice NMDevice;
+typedef struct _NMDhcp4Config NMDhcp4Config;
+typedef struct _NMDhcp6Config NMDhcp6Config;
+typedef struct _NMIP4Config NMIP4Config;
+typedef struct _NMIP6Config NMIP6Config;
+typedef struct _NMManager NMManager;
+typedef struct _NMPolicy NMPolicy;
+typedef struct _NMRfkillManager NMRfkillManager;
+typedef struct _NMSessionMonitor NMSessionMonitor;
+typedef struct _NMSleepMonitor NMSleepMonitor;
+
+typedef enum {
+ /* In priority order; higher number == higher priority */
+ NM_IP_CONFIG_SOURCE_UNKNOWN,
+ NM_IP_CONFIG_SOURCE_KERNEL,
+ NM_IP_CONFIG_SOURCE_SHARED,
+ NM_IP_CONFIG_SOURCE_IP4LL,
+ NM_IP_CONFIG_SOURCE_PPP,
+ NM_IP_CONFIG_SOURCE_WWAN,
+ NM_IP_CONFIG_SOURCE_VPN,
+ NM_IP_CONFIG_SOURCE_DHCP,
+ NM_IP_CONFIG_SOURCE_RDISC,
+ NM_IP_CONFIG_SOURCE_USER,
+} NMIPConfigSource;
+
+/* platform */
+typedef struct _NMPlatformIP4Address NMPlatformIP4Address;
+typedef struct _NMPlatformIP4Route NMPlatformIP4Route;
+typedef struct _NMPlatformIP6Address NMPlatformIP6Address;
+typedef struct _NMPlatformIP6Route NMPlatformIP6Route;
+typedef struct _NMPlatformLink NMPlatformLink;
+
+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;
+
+/* settings */
+typedef struct _NMAgentManager NMAgentManager;
+typedef struct _NMSecretAgent NMSecretAgent;
+typedef struct _NMSettings NMSettings;
+typedef struct _NMSettingsConnection NMSettingsConnection;
#endif /* NM_TYPES_H */
diff --git a/src/platform/Makefile.in b/src/platform/Makefile.in
index 9358879f3..d4c8ade7f 100644
--- a/src/platform/Makefile.in
+++ b/src/platform/Makefile.in
@@ -189,6 +189,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -312,6 +314,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -331,6 +334,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -357,7 +361,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
diff --git a/src/platform/nm-fake-platform.c b/src/platform/nm-fake-platform.c
index 46272217d..a5eb7d4ed 100644
--- a/src/platform/nm-fake-platform.c
+++ b/src/platform/nm-fake-platform.c
@@ -18,11 +18,14 @@
* Copyright (C) 2012–2013 Red Hat, Inc.
*/
+#include "config.h"
+
#include <errno.h>
#include <unistd.h>
#include <netinet/icmp6.h>
#include <netinet/in.h>
+#include "gsystem-local-alloc.h"
#include "NetworkManagerUtils.h"
#include "nm-fake-platform.h"
#include "nm-logging.h"
@@ -162,12 +165,12 @@ link_get_all (NMPlatform *platform)
}
static gboolean
-_nm_platform_link_get (NMPlatform *platform, int ifindex, NMPlatformLink *link)
+_nm_platform_link_get (NMPlatform *platform, int ifindex, NMPlatformLink *l)
{
NMFakePlatformLink *device = link_get (platform, ifindex);
if (device)
- *link = device->link;
+ *l = device->link;
return !!device;
}
@@ -543,7 +546,7 @@ link_get_master (NMPlatform *platform, int slave)
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);
+ gs_free char *path = g_strdup_printf ("master:%d:%s", master, option);
return sysctl_set (platform, path, value);
}
@@ -551,7 +554,7 @@ master_set_option (NMPlatform *platform, int master, const char *option, const c
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);
+ gs_free char *path = g_strdup_printf ("master:%d:%s", master, option);
return sysctl_get (platform, path);
}
@@ -559,7 +562,7 @@ master_get_option (NMPlatform *platform, int master, const char *option)
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);
+ gs_free char *path = g_strdup_printf ("slave:%d:%s", slave, option);
return sysctl_set (platform, path, value);
}
@@ -567,7 +570,7 @@ slave_set_option (NMPlatform *platform, int slave, const char *option, const cha
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);
+ gs_free char *path = g_strdup_printf ("slave:%d:%s", slave, option);
return sysctl_get (platform, path);
}
@@ -688,7 +691,7 @@ wifi_get_capabilities (NMPlatform *platform, int ifindex, NMDeviceWifiCapabiliti
}
static gboolean
-wifi_get_bssid (NMPlatform *platform, int ifindex, struct ether_addr *bssid)
+wifi_get_bssid (NMPlatform *platform, int ifindex, guint8 *bssid)
{
return FALSE;
}
@@ -754,7 +757,7 @@ mesh_set_channel (NMPlatform *platform, int ifindex, guint32 channel)
}
static gboolean
-mesh_set_ssid (NMPlatform *platform, int ifindex, const GByteArray *ssid)
+mesh_set_ssid (NMPlatform *platform, int ifindex, const guint8 *ssid, gsize len)
{
return FALSE;
}
@@ -827,7 +830,7 @@ ip4_address_add (NMPlatform *platform, int ifindex,
int i;
memset (&address, 0, sizeof (address));
- address.source = NM_PLATFORM_SOURCE_KERNEL;
+ address.source = NM_IP_CONFIG_SOURCE_KERNEL;
address.ifindex = ifindex;
address.address = addr;
address.peer_address = peer_addr;
@@ -869,7 +872,7 @@ ip6_address_add (NMPlatform *platform, int ifindex,
int i;
memset (&address, 0, sizeof (address));
- address.source = NM_PLATFORM_SOURCE_KERNEL;
+ address.source = NM_IP_CONFIG_SOURCE_KERNEL;
address.ifindex = ifindex;
address.address = addr;
address.peer_address = peer_addr;
@@ -901,7 +904,7 @@ ip6_address_add (NMPlatform *platform, int ifindex,
}
static gboolean
-ip4_address_delete (NMPlatform *platform, int ifindex, in_addr_t addr, int plen)
+ip4_address_delete (NMPlatform *platform, int ifindex, in_addr_t addr, int plen, in_addr_t peer_address)
{
NMFakePlatformPrivate *priv = NM_FAKE_PLATFORM_GET_PRIVATE (platform);
int i;
@@ -909,7 +912,8 @@ ip4_address_delete (NMPlatform *platform, int ifindex, in_addr_t addr, int plen)
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) {
+ if (address->ifindex == ifindex && address->plen == plen && address->address == addr &&
+ (!peer_address || address->peer_address == peer_address)) {
NMPlatformIP4Address deleted_address;
memcpy (&deleted_address, address, sizeof (deleted_address));
@@ -978,31 +982,37 @@ ip6_address_exists (NMPlatform *platform, int ifindex, struct in6_addr addr, int
return FALSE;
}
+static gboolean
+ip4_check_reinstall_device_route (NMPlatform *platform, int ifindex, const NMPlatformIP4Address *address, guint32 device_route_metric)
+{
+ return FALSE;
+}
+
/******************************************************************/
static GArray *
-ip4_route_get_all (NMPlatform *platform, int ifindex, gboolean include_default)
+ip4_route_get_all (NMPlatform *platform, int ifindex, NMPlatformGetRouteMode mode)
{
NMFakePlatformPrivate *priv = NM_FAKE_PLATFORM_GET_PRIVATE (platform);
GArray *routes;
NMPlatformIP4Route *route;
- int count = 0, i;
+ guint 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++;
- }
+ g_return_val_if_fail (NM_IN_SET (mode, NM_PLATFORM_GET_ROUTE_MODE_ALL, NM_PLATFORM_GET_ROUTE_MODE_NO_DEFAULT, NM_PLATFORM_GET_ROUTE_MODE_ONLY_DEFAULT), NULL);
- routes = g_array_sized_new (TRUE, TRUE, sizeof (NMPlatformIP4Route), count);
+ routes = g_array_new (TRUE, TRUE, sizeof (NMPlatformIP4Route));
/* 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);
+ if (route && (!ifindex || route->ifindex == ifindex)) {
+ if (NM_PLATFORM_IP_ROUTE_IS_DEFAULT (route)) {
+ if (mode != NM_PLATFORM_GET_ROUTE_MODE_NO_DEFAULT)
+ g_array_append_val (routes, *route);
+ } else {
+ if (mode != NM_PLATFORM_GET_ROUTE_MODE_ONLY_DEFAULT)
+ g_array_append_val (routes, *route);
+ }
}
}
@@ -1010,28 +1020,28 @@ ip4_route_get_all (NMPlatform *platform, int ifindex, gboolean include_default)
}
static GArray *
-ip6_route_get_all (NMPlatform *platform, int ifindex, gboolean include_default)
+ip6_route_get_all (NMPlatform *platform, int ifindex, NMPlatformGetRouteMode mode)
{
NMFakePlatformPrivate *priv = NM_FAKE_PLATFORM_GET_PRIVATE (platform);
GArray *routes;
NMPlatformIP6Route *route;
- int count = 0, i;
+ guint 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++;
- }
+ g_return_val_if_fail (NM_IN_SET (mode, NM_PLATFORM_GET_ROUTE_MODE_ALL, NM_PLATFORM_GET_ROUTE_MODE_NO_DEFAULT, NM_PLATFORM_GET_ROUTE_MODE_ONLY_DEFAULT), NULL);
- routes = g_array_sized_new (TRUE, TRUE, sizeof (NMPlatformIP6Route), count);
+ routes = g_array_new (TRUE, TRUE, sizeof (NMPlatformIP6Route));
/* 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);
+ if (route && (!ifindex || route->ifindex == ifindex)) {
+ if (NM_PLATFORM_IP_ROUTE_IS_DEFAULT (route)) {
+ if (mode != NM_PLATFORM_GET_ROUTE_MODE_NO_DEFAULT)
+ g_array_append_val (routes, *route);
+ } else {
+ if (mode != NM_PLATFORM_GET_ROUTE_MODE_ONLY_DEFAULT)
+ g_array_append_val (routes, *route);
+ }
}
}
@@ -1039,16 +1049,16 @@ ip6_route_get_all (NMPlatform *platform, int ifindex, gboolean include_default)
}
static gboolean
-ip4_route_add (NMPlatform *platform, int ifindex, NMPlatformSource source,
+ip4_route_add (NMPlatform *platform, int ifindex, NMIPConfigSource source,
in_addr_t network, int plen, in_addr_t gateway,
- int metric, int mss)
+ guint32 pref_src, guint32 metric, guint32 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.source = NM_IP_CONFIG_SOURCE_KERNEL;
route.ifindex = ifindex;
route.source = source;
route.network = network;
@@ -1079,16 +1089,16 @@ ip4_route_add (NMPlatform *platform, int ifindex, NMPlatformSource source,
}
static gboolean
-ip6_route_add (NMPlatform *platform, int ifindex, NMPlatformSource source,
+ip6_route_add (NMPlatform *platform, int ifindex, NMIPConfigSource source,
struct in6_addr network, int plen, struct in6_addr gateway,
- int metric, int mss)
+ guint32 metric, guint32 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.source = NM_IP_CONFIG_SOURCE_KERNEL;
route.ifindex = ifindex;
route.source = source;
route.network = network;
@@ -1119,7 +1129,7 @@ ip6_route_add (NMPlatform *platform, int ifindex, NMPlatformSource source,
}
static NMPlatformIP4Route *
-ip4_route_get (NMPlatform *platform, int ifindex, in_addr_t network, int plen, int metric)
+ip4_route_get (NMPlatform *platform, int ifindex, in_addr_t network, int plen, guint32 metric)
{
NMFakePlatformPrivate *priv = NM_FAKE_PLATFORM_GET_PRIVATE (platform);
int i;
@@ -1138,7 +1148,7 @@ ip4_route_get (NMPlatform *platform, int ifindex, in_addr_t network, int plen, i
}
static NMPlatformIP6Route *
-ip6_route_get (NMPlatform *platform, int ifindex, struct in6_addr network, int plen, int metric)
+ip6_route_get (NMPlatform *platform, int ifindex, struct in6_addr network, int plen, guint32 metric)
{
NMFakePlatformPrivate *priv = NM_FAKE_PLATFORM_GET_PRIVATE (platform);
int i;
@@ -1157,7 +1167,7 @@ ip6_route_get (NMPlatform *platform, int ifindex, struct in6_addr network, int p
}
static gboolean
-ip4_route_delete (NMPlatform *platform, int ifindex, in_addr_t network, int plen, int metric)
+ip4_route_delete (NMPlatform *platform, int ifindex, in_addr_t network, int plen, guint32 metric)
{
NMPlatformIP4Route *route = ip4_route_get (platform, ifindex, network, plen, metric);
NMPlatformIP4Route deleted_route;
@@ -1172,7 +1182,7 @@ ip4_route_delete (NMPlatform *platform, int ifindex, in_addr_t network, int plen
}
static gboolean
-ip6_route_delete (NMPlatform *platform, int ifindex, struct in6_addr network, int plen, int metric)
+ip6_route_delete (NMPlatform *platform, int ifindex, struct in6_addr network, int plen, guint32 metric)
{
NMPlatformIP6Route *route = ip6_route_get (platform, ifindex, network, plen, metric);
NMPlatformIP6Route deleted_route;
@@ -1187,13 +1197,13 @@ ip6_route_delete (NMPlatform *platform, int ifindex, struct in6_addr network, in
}
static gboolean
-ip4_route_exists (NMPlatform *platform, int ifindex, in_addr_t network, int plen, int metric)
+ip4_route_exists (NMPlatform *platform, int ifindex, in_addr_t network, int plen, guint32 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)
+ip6_route_exists (NMPlatform *platform, int ifindex, struct in6_addr network, int plen, guint32 metric)
{
return !!ip6_route_get (platform, ifindex, network, plen, metric);
}
@@ -1341,6 +1351,8 @@ nm_fake_platform_class_init (NMFakePlatformClass *klass)
platform_class->ip4_address_exists = ip4_address_exists;
platform_class->ip6_address_exists = ip6_address_exists;
+ platform_class->ip4_check_reinstall_device_route = ip4_check_reinstall_device_route;
+
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;
diff --git a/src/platform/nm-fake-platform.h b/src/platform/nm-fake-platform.h
index c9fa42eb6..53a2ff1a6 100644
--- a/src/platform/nm-fake-platform.h
+++ b/src/platform/nm-fake-platform.h
@@ -18,8 +18,8 @@
* Copyright (C) 2012 Red Hat, Inc.
*/
-#ifndef NM_FAKE_PLATFORM_H
-#define NM_FAKE_PLATFORM_H
+#ifndef __NETWORKMANAGER_FAKE_PLATFORM_H__
+#define __NETWORKMANAGER_FAKE_PLATFORM_H__
#include "nm-platform.h"
@@ -46,4 +46,4 @@ GType nm_fake_platform_get_type (void);
void nm_fake_platform_setup (void);
-#endif /* NM_FAKE_PLATFORM_H */
+#endif /* __NETWORKMANAGER_FAKE_PLATFORM_H__ */
diff --git a/src/platform/nm-linux-platform.c b/src/platform/nm-linux-platform.c
index f73ff3207..5d1522ce9 100644
--- a/src/platform/nm-linux-platform.c
+++ b/src/platform/nm-linux-platform.c
@@ -17,7 +17,7 @@
*
* Copyright (C) 2012-2013 Red Hat, Inc.
*/
-#include <config.h>
+#include "config.h"
#include <errno.h>
#include <unistd.h>
@@ -44,6 +44,17 @@
#include <netlink/route/route.h>
#include <gudev/gudev.h>
+#if HAVE_LIBNL_INET6_ADDR_GEN_MODE
+#include <netlink/route/link/inet6.h>
+#if HAVE_KERNEL_INET6_ADDR_GEN_MODE
+#include <linux/if_link.h>
+#else
+#define IN6_ADDR_GEN_MODE_EUI64 0
+#define IN6_ADDR_GEN_MODE_NONE 1
+#endif
+#endif
+
+#include "gsystem-local-alloc.h"
#include "NetworkManagerUtils.h"
#include "nm-linux-platform.h"
#include "NetworkManagerUtils.h"
@@ -83,6 +94,7 @@ typedef struct {
GHashTable *wifi_data;
int support_kernel_extended_ifa_flags;
+ int support_user_ipv6ll;
} NMLinuxPlatformPrivate;
#define NM_LINUX_PLATFORM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_LINUX_PLATFORM, NMLinuxPlatformPrivate))
@@ -90,6 +102,8 @@ typedef struct {
G_DEFINE_TYPE (NMLinuxPlatform, nm_linux_platform, NM_TYPE_PLATFORM)
static const char *to_string_object (NMPlatform *platform, struct nl_object *obj);
+static gboolean _address_match (struct rtnl_addr *addr, int family, int ifindex);
+static gboolean _route_match (struct rtnl_route *rtnlroute, int family, int ifindex, gboolean include_proto_kernel);
void
nm_linux_platform_setup (void)
@@ -106,7 +120,7 @@ _nl_f_nl_has_capability (int capability)
}
static struct libnl_vtable *
-_nl_get_vtable ()
+_nl_get_vtable (void)
{
static struct libnl_vtable vtable;
@@ -268,7 +282,7 @@ _nm_rtnl_addr_alloc (int ifindex)
}
static struct rtnl_route *
-_nm_rtnl_route_alloc ()
+_nm_rtnl_route_alloc (void)
{
struct rtnl_route *rtnlroute = rtnl_route_alloc ();
@@ -278,7 +292,7 @@ _nm_rtnl_route_alloc ()
}
static struct rtnl_nexthop *
-_nm_rtnl_route_nh_alloc ()
+_nm_rtnl_route_nh_alloc (void)
{
struct rtnl_nexthop *nexthop;
@@ -596,8 +610,8 @@ ethtool_get (const char *name, gpointer edata)
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;
+ gs_free struct ethtool_sset_info *info = NULL;
+ gs_free struct ethtool_gstrings *strings = NULL;
guint32 len, i;
info = g_malloc0 (sizeof (*info) + sizeof (guint32));
@@ -667,6 +681,23 @@ check_support_kernel_extended_ifa_flags (NMPlatform *platform)
return priv->support_kernel_extended_ifa_flags > 0;
}
+static gboolean
+check_support_user_ipv6ll (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_user_ipv6ll == 0) {
+ nm_log_warn (LOGD_PLATFORM, "Unable to detect kernel support for IFLA_INET6_ADDR_GEN_MODE. Assume no kernel support.");
+ priv->support_user_ipv6ll = -1;
+ }
+
+ return priv->support_user_ipv6ll > 0;
+}
+
/* Object type specific utilities */
@@ -735,7 +766,7 @@ link_type_from_udev (NMPlatform *platform, int ifindex, const char *ifname, int
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))
+ if (wifi_utils_is_wifi (ifname, sysfs_path, prop))
return_type (NM_LINK_TYPE_WIFI, "wifi");
else if (g_strcmp0 (prop, "wwan") == 0)
return_type (NM_LINK_TYPE_WWAN_ETHERNET, "wwan");
@@ -1176,7 +1207,7 @@ init_ip4_address (NMPlatformIP4Address *address, struct rtnl_addr *rtnladdr)
memset (address, 0, sizeof (*address));
- address->source = NM_PLATFORM_SOURCE_KERNEL;
+ address->source = NM_IP_CONFIG_SOURCE_KERNEL;
address->ifindex = rtnl_addr_get_ifindex (rtnladdr);
address->plen = rtnl_addr_get_prefixlen (rtnladdr);
_init_ip_address_lifetime ((NMPlatformIPAddress *) address, rtnladdr);
@@ -1208,7 +1239,7 @@ init_ip6_address (NMPlatformIP6Address *address, struct rtnl_addr *rtnladdr)
memset (address, 0, sizeof (*address));
- address->source = NM_PLATFORM_SOURCE_KERNEL;
+ address->source = NM_IP_CONFIG_SOURCE_KERNEL;
address->ifindex = rtnl_addr_get_ifindex (rtnladdr);
address->plen = rtnl_addr_get_prefixlen (rtnladdr);
_init_ip_address_lifetime ((NMPlatformIPAddress *) address, rtnladdr);
@@ -1230,16 +1261,16 @@ init_ip6_address (NMPlatformIP6Address *address, struct rtnl_addr *rtnladdr)
}
static guint
-source_to_rtprot (NMPlatformSource source)
+source_to_rtprot (NMIPConfigSource source)
{
switch (source) {
- case NM_PLATFORM_SOURCE_UNKNOWN:
+ case NM_IP_CONFIG_SOURCE_UNKNOWN:
return RTPROT_UNSPEC;
- case NM_PLATFORM_SOURCE_KERNEL:
+ case NM_IP_CONFIG_SOURCE_KERNEL:
return RTPROT_KERNEL;
- case NM_PLATFORM_SOURCE_DHCP:
+ case NM_IP_CONFIG_SOURCE_DHCP:
return RTPROT_DHCP;
- case NM_PLATFORM_SOURCE_RDISC:
+ case NM_IP_CONFIG_SOURCE_RDISC:
return RTPROT_RA;
default:
@@ -1247,26 +1278,36 @@ source_to_rtprot (NMPlatformSource source)
}
}
-static NMPlatformSource
+static NMIPConfigSource
rtprot_to_source (guint rtprot)
{
switch (rtprot) {
case RTPROT_UNSPEC:
- return NM_PLATFORM_SOURCE_UNKNOWN;
+ return NM_IP_CONFIG_SOURCE_UNKNOWN;
case RTPROT_REDIRECT:
case RTPROT_KERNEL:
- return NM_PLATFORM_SOURCE_KERNEL;
+ return NM_IP_CONFIG_SOURCE_KERNEL;
case RTPROT_RA:
- return NM_PLATFORM_SOURCE_RDISC;
+ return NM_IP_CONFIG_SOURCE_RDISC;
case RTPROT_DHCP:
- return NM_PLATFORM_SOURCE_DHCP;
+ return NM_IP_CONFIG_SOURCE_DHCP;
default:
- return NM_PLATFORM_SOURCE_USER;
+ return NM_IP_CONFIG_SOURCE_USER;
}
}
static gboolean
+_rtnl_route_is_default (const struct rtnl_route *rtnlroute)
+{
+ struct nl_addr *dst;
+
+ return rtnlroute
+ && (dst = rtnl_route_get_dst ((struct rtnl_route *) rtnlroute))
+ && nl_addr_get_prefixlen (dst) == 0;
+}
+
+static gboolean
init_ip4_route (NMPlatformIP4Route *route, struct rtnl_route *rtnlroute)
{
struct nl_addr *dst, *gw;
@@ -1527,8 +1568,20 @@ announce_object (NMPlatform *platform, const struct nl_object *object, NMPlatfor
switch (object_type) {
case OBJECT_TYPE_LINK:
{
- NMPlatformLink device;
struct rtnl_link *rtnl_link = (struct rtnl_link *) object;
+ NMPlatformLink device;
+
+#if HAVE_LIBNL_INET6_ADDR_GEN_MODE
+ /* If we ever see a link with valid IPv6 link-local address
+ * generation modes, the kernel supports it.
+ */
+ if (priv->support_user_ipv6ll == 0) {
+ uint8_t mode;
+
+ if (rtnl_link_inet6_get_addr_gen_mode (rtnl_link, &mode) == 0)
+ priv->support_user_ipv6ll = 1;
+ }
+#endif
if (!init_link (platform, &device, rtnl_link))
return;
@@ -1576,20 +1629,25 @@ announce_object (NMPlatform *platform, const struct nl_object *object, NMPlatfor
{
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);
+ check_cache_items (platform,
+ priv->route_cache,
+ rtnl_addr_get_ifindex ((struct rtnl_addr *) object));
break;
default:
break;
}
+ if (!_address_match ((struct rtnl_addr *) object, AF_INET, 0)) {
+ nm_log_dbg (LOGD_PLATFORM, "skip announce unmatching IP4 address %s", to_string_ip4_address ((struct rtnl_addr *) object));
+ return;
+ }
+ if (!init_ip4_address (&address, (struct rtnl_addr *) object))
+ return;
g_signal_emit_by_name (platform, sig, address.ifindex, &address, change_type, reason);
}
return;
@@ -1597,6 +1655,10 @@ announce_object (NMPlatform *platform, const struct nl_object *object, NMPlatfor
{
NMPlatformIP6Address address;
+ if (!_address_match ((struct rtnl_addr *) object, AF_INET6, 0)) {
+ nm_log_dbg (LOGD_PLATFORM, "skip announce unmatching IP6 address %s", to_string_ip6_address ((struct rtnl_addr *) object));
+ return;
+ }
if (!init_ip6_address (&address, (struct rtnl_addr *) object))
return;
g_signal_emit_by_name (platform, sig, address.ifindex, &address, change_type, reason);
@@ -1606,6 +1668,10 @@ announce_object (NMPlatform *platform, const struct nl_object *object, NMPlatfor
{
NMPlatformIP4Route route;
+ if (!_route_match ((struct rtnl_route *) object, AF_INET, 0, FALSE)) {
+ nm_log_dbg (LOGD_PLATFORM, "skip announce unmatching IP4 route %s", to_string_ip4_route ((struct rtnl_route *) object));
+ return;
+ }
if (init_ip4_route (&route, (struct rtnl_route *) object))
g_signal_emit_by_name (platform, sig, route.ifindex, &route, change_type, reason);
}
@@ -1614,6 +1680,10 @@ announce_object (NMPlatform *platform, const struct nl_object *object, NMPlatfor
{
NMPlatformIP6Route route;
+ if (!_route_match ((struct rtnl_route *) object, AF_INET6, 0, FALSE)) {
+ nm_log_dbg (LOGD_PLATFORM, "skip announce unmatching IP6 route %s", to_string_ip6_route ((struct rtnl_route *) object));
+ return;
+ }
if (init_ip6_route (&route, (struct rtnl_route *) object))
g_signal_emit_by_name (platform, sig, route.ifindex, &route, change_type, reason);
}
@@ -1721,15 +1791,14 @@ add_object (NMPlatform *platform, struct nl_object *obj)
/* Decreases the reference count if @obj for convenience */
static gboolean
-delete_object (NMPlatform *platform, struct nl_object *obj, gboolean do_refresh_object)
+delete_object (NMPlatform *platform, struct nl_object *object, 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;
+ gboolean result = FALSE;
- object_type = object_type_from_nl_object (obj);
+ object_type = object_type_from_nl_object (object);
g_return_val_if_fail (object_type != OBJECT_TYPE_UNKNOWN, FALSE);
switch (object_type) {
@@ -1772,14 +1841,18 @@ delete_object (NMPlatform *platform, struct nl_object *obj, gboolean do_refresh_
goto DEFAULT;
DEFAULT:
default:
- error ("Netlink error deleting %s: %s (%d)", to_string_object (platform, obj), nl_geterror (nle), nle);
- return FALSE;
+ error ("Netlink error deleting %s: %s (%d)", to_string_object (platform, object), nl_geterror (nle), nle);
+ goto out;
}
if (do_refresh_object)
refresh_object (platform, object, TRUE, NM_PLATFORM_REASON_INTERNAL);
- return TRUE;
+ result = TRUE;
+
+out:
+ nl_object_put (object);
+ return result;
}
static void
@@ -1807,6 +1880,33 @@ _rtnl_addr_timestamps_equal_fuzzy (guint32 ts1, guint32 ts2)
return diff <= 2;
}
+static gboolean
+nm_nl_object_diff (ObjectType type, struct nl_object *_a, struct nl_object *_b)
+{
+ if (nl_object_diff (_a, _b)) {
+ /* libnl thinks objects are different*/
+ return TRUE;
+ }
+
+ if (type == OBJECT_TYPE_IP4_ADDRESS || type == OBJECT_TYPE_IP6_ADDRESS) {
+ struct rtnl_addr *a = (struct rtnl_addr *) _a;
+ struct rtnl_addr *b = (struct rtnl_addr *) _b;
+
+ /* 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 (a),
+ rtnl_addr_get_preferred_lifetime (b))
+ || !_rtnl_addr_timestamps_equal_fuzzy (rtnl_addr_get_valid_lifetime (a),
+ rtnl_addr_get_valid_lifetime (b)))
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
/* 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
@@ -1912,24 +2012,9 @@ event_notification (struct nl_msg *msg, gpointer user_data)
* 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;
- }
+ if (!nm_nl_object_diff (type, kernel_object, cached_object))
+ return NL_OK;
+
/* Handle external change */
nl_cache_remove (cached_object);
nle = nl_cache_add (cache, kernel_object);
@@ -2133,7 +2218,7 @@ link_get_all (NMPlatform *platform)
}
static gboolean
-_nm_platform_link_get (NMPlatform *platform, int ifindex, NMPlatformLink *link)
+_nm_platform_link_get (NMPlatform *platform, int ifindex, NMPlatformLink *l)
{
NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
auto_nl_object struct rtnl_link *rtnllink = NULL;
@@ -2141,7 +2226,7 @@ _nm_platform_link_get (NMPlatform *platform, int ifindex, NMPlatformLink *link)
rtnllink = rtnl_link_get (priv->link_cache, ifindex);
if (rtnllink) {
if (link_is_announceable (platform, rtnllink)) {
- if (init_link (platform, link, rtnllink))
+ if (init_link (platform, l, rtnllink))
return TRUE;
}
}
@@ -2166,7 +2251,7 @@ static gboolean
link_add (NMPlatform *platform, const char *name, NMLinkType type, const void *address, size_t address_len)
{
int r;
- struct nl_object *link;
+ struct nl_object *l;
if (type == NM_LINK_TYPE_BOND) {
/* When the kernel loads the bond module, either via explicit modprobe
@@ -2184,15 +2269,15 @@ link_add (NMPlatform *platform, const char *name, NMLinkType type, const void *a
debug ("link: add link '%s' of type '%s' (%d)",
name, type_to_string (type), (int) type);
- link = build_rtnl_link (0, name, type);
+ l = 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);
+ rtnl_link_set_addr ((struct rtnl_link *) l, nladdr);
}
- return add_object (platform, link);
+ return add_object (platform, l);
}
static struct rtnl_link *
@@ -2384,6 +2469,46 @@ link_set_noarp (NMPlatform *platform, int ifindex)
}
static gboolean
+link_get_user_ipv6ll_enabled (NMPlatform *platform, int ifindex)
+{
+#if HAVE_LIBNL_INET6_ADDR_GEN_MODE
+ NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
+
+ if (priv->support_user_ipv6ll > 0) {
+ auto_nl_object struct rtnl_link *rtnllink = link_get (platform, ifindex);
+ uint8_t mode = 0;
+
+ if (rtnllink) {
+ if (rtnl_link_inet6_get_addr_gen_mode (rtnllink, &mode) != 0) {
+ /* Default to "disabled" on error */
+ return FALSE;
+ }
+ return mode == IN6_ADDR_GEN_MODE_NONE;
+ }
+ }
+#endif
+ return FALSE;
+}
+
+static gboolean
+link_set_user_ipv6ll_enabled (NMPlatform *platform, int ifindex, gboolean enabled)
+{
+#if HAVE_LIBNL_INET6_ADDR_GEN_MODE
+ if (check_support_user_ipv6ll (platform)) {
+ auto_nl_object struct rtnl_link *change = _nm_rtnl_link_alloc (ifindex, NULL);
+ guint8 mode = enabled ? IN6_ADDR_GEN_MODE_NONE : IN6_ADDR_GEN_MODE_EUI64;
+ char buf[32];
+
+ rtnl_link_inet6_set_addr_gen_mode (change, mode);
+ debug ("link: change %d: set IPv6 address generation mode to %s",
+ ifindex, rtnl_link_inet6_addrgenmode2str (mode, buf, sizeof (buf)));
+ return link_change (platform, ifindex, change);
+ }
+#endif
+ return FALSE;
+}
+
+static gboolean
supports_ethtool_carrier_detect (const char *ifname)
{
struct ethtool_cmd edata = { .cmd = ETHTOOL_GLINK };
@@ -2455,7 +2580,7 @@ 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;
+ gs_free struct ethtool_gfeatures *features = NULL;
int idx, block, bit, size;
/* Only ARPHRD_ETHER links can possibly support VLANs. */
@@ -2494,7 +2619,7 @@ link_set_address (NMPlatform *platform, int ifindex, gconstpointer address, size
rtnl_link_set_addr (change, nladdr);
if (nm_logging_enabled (LOGL_DEBUG, LOGD_PLATFORM)) {
- char *mac = nm_utils_hwaddr_ntoa_len (address, length);
+ char *mac = nm_utils_hwaddr_ntoa (address, length);
debug ("link: change %d: address %s (%lu bytes)", ifindex, mac, (unsigned long) length);
g_free (mac);
@@ -2508,13 +2633,23 @@ 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;
+ size_t l = 0;
+ gconstpointer a = NULL;
+
+ if (rtnllink &&
+ (nladdr = rtnl_link_get_addr (rtnllink))) {
+ l = nl_addr_get_len (nladdr);
+ if (l > NM_UTILS_HWADDR_LEN_MAX) {
+ if (length)
+ *length = 0;
+ g_return_val_if_reached (NULL);
+ } else if (l > 0)
+ a = nl_addr_get_binary_addr (nladdr);
+ }
if (length)
- *length = nladdr ? nl_addr_get_len (nladdr) : 0;
-
- return nladdr ? nl_addr_get_binary_addr (nladdr) : NULL;
+ *length = l;
+ return a;
}
static gboolean
@@ -2667,7 +2802,7 @@ link_option_path (int master, const char *category, const char *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);
+ gs_free char *path = link_option_path (master, category, option);
return path && nm_platform_sysctl_set (path, value);
}
@@ -2675,7 +2810,7 @@ link_set_option (int master, const char *category, const char *option, const cha
static char *
link_get_option (int master, const char *category, const char *option)
{
- auto_g_free char *path = link_option_path (master, category, option);
+ gs_free char *path = link_option_path (master, category, option);
return path ? nm_platform_sysctl_get (path) : NULL;
}
@@ -2754,7 +2889,7 @@ infiniband_partition_add (NMPlatform *platform, int parent, int p_key)
g_free (path);
if (success) {
- auto_g_free char *ifname = g_strdup_printf ("%s.%04x", parent_name, p_key);
+ gs_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);
@@ -2767,7 +2902,7 @@ static gboolean
veth_get_properties (NMPlatform *platform, int ifindex, NMPlatformVethProperties *props)
{
const char *ifname;
- auto_g_free struct ethtool_stats *stats = NULL;
+ gs_free struct ethtool_stats *stats = NULL;
int peer_ifindex_stat;
ifname = nm_platform_link_get_name (ifindex);
@@ -2841,7 +2976,7 @@ tun_get_properties (NMPlatform *platform, int ifindex, NMPlatformTunProperties *
#ifndef IFF_MULTI_QUEUE
const int IFF_MULTI_QUEUE = 0x0100;
#endif
- props->mode = ((flags & TUN_TYPE_MASK) == TUN_TUN_DEV) ? "tun" : "tap";
+ props->mode = ((flags & (IFF_TUN | IFF_TAP)) == IFF_TUN) ? "tun" : "tap";
props->no_pi = !!(flags & IFF_NO_PI);
props->vnet_hdr = !!(flags & IFF_VNET_HDR);
props->multi_queue = !!(flags & IFF_MULTI_QUEUE);
@@ -2947,6 +3082,13 @@ macvlan_get_properties (NMPlatform *platform, int ifindex, NMPlatformMacvlanProp
#undef IFLA_VXLAN_MAX
#define IFLA_VXLAN_MAX IFLA_VXLAN_LOCAL6
+/* older kernel header might not contain 'struct ifla_vxlan_port_range'.
+ * Redefine it. */
+struct nm_ifla_vxlan_port_range {
+ guint16 low;
+ guint16 high;
+};
+
static const struct nla_policy vxlan_info_policy[IFLA_VXLAN_MAX + 1] = {
[IFLA_VXLAN_ID] = { .type = NLA_U32 },
[IFLA_VXLAN_GROUP] = { .type = NLA_U32 },
@@ -2962,7 +3104,7 @@ static const struct nla_policy vxlan_info_policy[IFLA_VXLAN_MAX + 1] = {
[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) },
+ .minlen = sizeof (struct nm_ifla_vxlan_port_range) },
[IFLA_VXLAN_PROXY] = { .type = NLA_U8 },
[IFLA_VXLAN_RSC] = { .type = NLA_U8 },
[IFLA_VXLAN_L2MISS] = { .type = NLA_U8 },
@@ -2975,7 +3117,7 @@ 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;
+ struct nm_ifla_vxlan_port_range *range;
int err;
err = nla_parse_nested (tb, IFLA_VXLAN_MAX, info_data,
@@ -2985,8 +3127,10 @@ vxlan_info_data_parser (struct nlattr *info_data, gpointer parser_data)
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_LINK])
+ props->parent_ifindex = nla_get_u32 (tb[IFLA_VXLAN_LINK]);
+ if (tb[IFLA_VXLAN_ID])
+ 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])
@@ -2996,21 +3140,34 @@ vxlan_info_data_parser (struct nlattr *info_data, gpointer parser_data)
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;
+ if (tb[IFLA_VXLAN_AGEING])
+ props->ageing = nla_get_u32 (tb[IFLA_VXLAN_AGEING]);
+ if (tb[IFLA_VXLAN_LIMIT])
+ props->limit = nla_get_u32 (tb[IFLA_VXLAN_LIMIT]);
+ if (tb[IFLA_VXLAN_TOS])
+ props->tos = nla_get_u8 (tb[IFLA_VXLAN_TOS]);
+ if (tb[IFLA_VXLAN_TTL])
+ props->ttl = nla_get_u8 (tb[IFLA_VXLAN_TTL]);
+
+ if (tb[IFLA_VXLAN_PORT])
+ props->dst_port = nla_get_u16 (tb[IFLA_VXLAN_PORT]);
+
+ if (tb[IFLA_VXLAN_PORT_RANGE]) {
+ 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]);
+ if (tb[IFLA_VXLAN_LEARNING])
+ props->learning = !!nla_get_u8 (tb[IFLA_VXLAN_LEARNING]);
+ if (tb[IFLA_VXLAN_PROXY])
+ props->proxy = !!nla_get_u8 (tb[IFLA_VXLAN_PROXY]);
+ if (tb[IFLA_VXLAN_RSC])
+ props->rsc = !!nla_get_u8 (tb[IFLA_VXLAN_RSC]);
+ if (tb[IFLA_VXLAN_L2MISS])
+ props->l2miss = !!nla_get_u8 (tb[IFLA_VXLAN_L2MISS]);
+ if (tb[IFLA_VXLAN_L3MISS])
+ props->l3miss = !!nla_get_u8 (tb[IFLA_VXLAN_L3MISS]);
return 0;
}
@@ -3131,7 +3288,7 @@ wifi_get_capabilities (NMPlatform *platform, int ifindex, NMDeviceWifiCapabiliti
}
static gboolean
-wifi_get_bssid (NMPlatform *platform, int ifindex, struct ether_addr *bssid)
+wifi_get_bssid (NMPlatform *platform, int ifindex, guint8 *bssid)
{
WifiData *wifi_data = wifi_get_wifi_data (platform, ifindex);
@@ -3244,14 +3401,14 @@ mesh_set_channel (NMPlatform *platform, int ifindex, guint32 channel)
}
static gboolean
-mesh_set_ssid (NMPlatform *platform, int ifindex, const GByteArray *ssid)
+mesh_set_ssid (NMPlatform *platform, int ifindex, const guint8 *ssid, gsize len)
{
WifiData *wifi_data = wifi_get_wifi_data (platform, ifindex);
if (!wifi_data)
return FALSE;
- return wifi_utils_set_mesh_ssid (wifi_data, ssid);
+ return wifi_utils_set_mesh_ssid (wifi_data, ssid, len);
}
static gboolean
@@ -3287,7 +3444,7 @@ _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;
+ (ifindex == 0 || rtnl_addr_get_ifindex (addr) == ifindex);
}
static GArray *
@@ -3455,9 +3612,9 @@ ip6_address_add (NMPlatform *platform,
}
static gboolean
-ip4_address_delete (NMPlatform *platform, int ifindex, in_addr_t addr, int plen)
+ip4_address_delete (NMPlatform *platform, int ifindex, in_addr_t addr, int plen, in_addr_t peer_address)
{
- return delete_object (platform, build_rtnl_addr (AF_INET, ifindex, &addr, NULL, plen, 0, 0, 0, NULL), TRUE);
+ return delete_object (platform, build_rtnl_addr (AF_INET, ifindex, &addr, peer_address ? &peer_address : NULL, plen, 0, 0, 0, NULL), TRUE);
}
static gboolean
@@ -3487,10 +3644,53 @@ ip6_address_exists (NMPlatform *platform, int ifindex, struct in6_addr addr, int
return ip_address_exists (platform, AF_INET6, ifindex, &addr, plen);
}
+static gboolean
+ip4_check_reinstall_device_route (NMPlatform *platform, int ifindex, const NMPlatformIP4Address *address, guint32 device_route_metric)
+{
+ NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
+ NMPlatformIP4Address addr_candidate;
+ NMPlatformIP4Route route_candidate;
+ struct nl_object *object;
+ guint32 device_network;
+
+ 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, 0)) {
+ if (init_ip4_address (&addr_candidate, (struct rtnl_addr *) object))
+ if ( addr_candidate.plen == address->plen
+ && addr_candidate.address == address->address) {
+ /* If we already have the same address installed on any interface,
+ * we back off.
+ * Perform this check first, as we expect to have significantly less
+ * addresses to search. */
+ return FALSE;
+ }
+ }
+ }
+
+ device_network = nm_utils_ip4_address_clear_host_address (address->address, address->plen);
+
+ 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, 0, TRUE)) {
+ if (init_ip4_route (&route_candidate, (struct rtnl_route *) object)) {
+ if ( route_candidate.network == device_network
+ && route_candidate.plen == address->plen
+ && ( route_candidate.metric == 0
+ || route_candidate.metric == device_route_metric)) {
+ /* There is already any route with metric 0 or the metric we want to install
+ * for the same subnet. */
+ return FALSE;
+ }
+ }
+ }
+ }
+
+ return TRUE;
+}
+
/******************************************************************/
static gboolean
-_route_match (struct rtnl_route *rtnlroute, int family, int ifindex)
+_route_match (struct rtnl_route *rtnlroute, int family, int ifindex, gboolean include_proto_kernel)
{
struct rtnl_nexthop *nexthop;
@@ -3498,31 +3698,42 @@ _route_match (struct rtnl_route *rtnlroute, int family, int ifindex)
if (rtnl_route_get_type (rtnlroute) != RTN_UNICAST ||
rtnl_route_get_table (rtnlroute) != RT_TABLE_MAIN ||
- rtnl_route_get_protocol (rtnlroute) == RTPROT_KERNEL ||
+ (!include_proto_kernel && rtnl_route_get_protocol (rtnlroute) == RTPROT_KERNEL) ||
rtnl_route_get_family (rtnlroute) != family ||
- rtnl_route_get_nnexthops (rtnlroute) != 1)
+ rtnl_route_get_nnexthops (rtnlroute) != 1 ||
+ rtnl_route_get_flags (rtnlroute) & RTM_F_CLONED)
return FALSE;
+ if (ifindex == 0)
+ return TRUE;
+
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)
+ip4_route_get_all (NMPlatform *platform, int ifindex, NMPlatformGetRouteMode mode)
{
NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
GArray *routes;
NMPlatformIP4Route route;
struct nl_object *object;
+ g_return_val_if_fail (NM_IN_SET (mode, NM_PLATFORM_GET_ROUTE_MODE_ALL, NM_PLATFORM_GET_ROUTE_MODE_NO_DEFAULT, NM_PLATFORM_GET_ROUTE_MODE_ONLY_DEFAULT), NULL);
+
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);
+ if (_route_match ((struct rtnl_route *) object, AF_INET, ifindex, FALSE)) {
+ if (_rtnl_route_is_default ((struct rtnl_route *) object)) {
+ if (mode == NM_PLATFORM_GET_ROUTE_MODE_NO_DEFAULT)
+ continue;
+ } else {
+ if (mode == NM_PLATFORM_GET_ROUTE_MODE_ONLY_DEFAULT)
+ continue;
}
+ if (init_ip4_route (&route, (struct rtnl_route *) object))
+ g_array_append_val (routes, route);
}
}
@@ -3530,21 +3741,28 @@ ip4_route_get_all (NMPlatform *platform, int ifindex, gboolean include_default)
}
static GArray *
-ip6_route_get_all (NMPlatform *platform, int ifindex, gboolean include_default)
+ip6_route_get_all (NMPlatform *platform, int ifindex, NMPlatformGetRouteMode mode)
{
NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
GArray *routes;
NMPlatformIP6Route route;
struct nl_object *object;
+ g_return_val_if_fail (NM_IN_SET (mode, NM_PLATFORM_GET_ROUTE_MODE_ALL, NM_PLATFORM_GET_ROUTE_MODE_NO_DEFAULT, NM_PLATFORM_GET_ROUTE_MODE_ONLY_DEFAULT), NULL);
+
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);
+ if (_route_match ((struct rtnl_route *) object, AF_INET6, ifindex, FALSE)) {
+ if (_rtnl_route_is_default ((struct rtnl_route *) object)) {
+ if (mode == NM_PLATFORM_GET_ROUTE_MODE_NO_DEFAULT)
+ continue;
+ } else {
+ if (mode == NM_PLATFORM_GET_ROUTE_MODE_ONLY_DEFAULT)
+ continue;
}
+ if (init_ip6_route (&route, (struct rtnl_route *) object))
+ g_array_append_val (routes, route);
}
}
@@ -3570,9 +3788,10 @@ clear_host_address (int family, const void *network, int plen, void *dst)
}
static struct nl_object *
-build_rtnl_route (int family, int ifindex, NMPlatformSource source,
+build_rtnl_route (int family, int ifindex, NMIPConfigSource source,
gconstpointer network, int plen, gconstpointer gateway,
- int metric, int mss)
+ gconstpointer pref_src,
+ guint32 metric, guint32 mss)
{
guint32 network_clean[4];
struct rtnl_route *rtnlroute;
@@ -3581,6 +3800,7 @@ build_rtnl_route (int family, int ifindex, NMPlatformSource source,
/* 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;
+ auto_nl_addr struct nl_addr *pref_src_nl = pref_src ? _nm_nl_addr_build (family, pref_src, addrlen) : NULL;
/* There seem to be problems adding a route with non-zero host identifier.
* Adding IPv6 routes is simply ignored, without error message.
@@ -3602,6 +3822,8 @@ build_rtnl_route (int family, int ifindex, NMPlatformSource source,
rtnl_route_nh_set_ifindex (nexthop, ifindex);
if (gw && !nl_addr_iszero (gw))
rtnl_route_nh_set_gateway (nexthop, gw);
+ if (pref_src_nl)
+ rtnl_route_set_pref_src (rtnlroute, pref_src_nl);
rtnl_route_add_nexthop (rtnlroute, nexthop);
if (mss > 0)
@@ -3611,23 +3833,23 @@ build_rtnl_route (int family, int ifindex, NMPlatformSource source,
}
static gboolean
-ip4_route_add (NMPlatform *platform, int ifindex, NMPlatformSource source,
+ip4_route_add (NMPlatform *platform, int ifindex, NMIPConfigSource source,
in_addr_t network, int plen, in_addr_t gateway,
- int metric, int mss)
+ guint32 pref_src, guint32 metric, guint32 mss)
{
- return add_object (platform, build_rtnl_route (AF_INET, ifindex, source, &network, plen, &gateway, metric, mss));
+ return add_object (platform, build_rtnl_route (AF_INET, ifindex, source, &network, plen, &gateway, pref_src ? &pref_src : NULL, metric, mss));
}
static gboolean
-ip6_route_add (NMPlatform *platform, int ifindex, NMPlatformSource source,
+ip6_route_add (NMPlatform *platform, int ifindex, NMIPConfigSource source,
struct in6_addr network, int plen, struct in6_addr gateway,
- int metric, int mss)
+ guint32 metric, guint32 mss)
{
- return add_object (platform, build_rtnl_route (AF_INET6, ifindex, source, &network, plen, &gateway, metric, mss));
+ return add_object (platform, build_rtnl_route (AF_INET6, ifindex, source, &network, plen, &gateway, NULL, metric, mss));
}
static struct rtnl_route *
-route_search_cache (struct nl_cache *cache, int family, int ifindex, const void *network, int plen, int metric)
+route_search_cache (struct nl_cache *cache, int family, int ifindex, const void *network, int plen, guint32 metric)
{
guint32 network_clean[4], dst_clean[4];
struct nl_object *object;
@@ -3638,7 +3860,7 @@ route_search_cache (struct nl_cache *cache, int family, int ifindex, const void
struct nl_addr *dst;
struct rtnl_route *rtnlroute = (struct rtnl_route *) object;
- if (!_route_match (rtnlroute, family, ifindex))
+ if (!_route_match (rtnlroute, family, ifindex, FALSE))
continue;
if (metric && metric != rtnl_route_get_priority (rtnlroute))
@@ -3676,11 +3898,11 @@ refresh_route (NMPlatform *platform, int family, int ifindex, const void *networ
}
static gboolean
-ip4_route_delete (NMPlatform *platform, int ifindex, in_addr_t network, int plen, int metric)
+ip4_route_delete (NMPlatform *platform, int ifindex, in_addr_t network, int plen, guint32 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);
+ struct nl_object *route = build_rtnl_route (AF_INET, ifindex, NM_IP_CONFIG_SOURCE_UNKNOWN, &network, plen, &gateway, NULL, metric, 0);
uint8_t scope = RT_SCOPE_NOWHERE;
struct nl_cache *cache;
@@ -3736,20 +3958,20 @@ ip4_route_delete (NMPlatform *platform, int ifindex, in_addr_t network, int plen
}
static gboolean
-ip6_route_delete (NMPlatform *platform, int ifindex, struct in6_addr network, int plen, int metric)
+ip6_route_delete (NMPlatform *platform, int ifindex, struct in6_addr network, int plen, guint32 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) &&
+ return delete_object (platform, build_rtnl_route (AF_INET6, ifindex, NM_IP_CONFIG_SOURCE_UNKNOWN ,&network, plen, &gateway, NULL, 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)
+ip_route_exists (NMPlatform *platform, int family, int ifindex, gpointer network, int plen, guint32 metric)
{
auto_nl_object struct nl_object *object = build_rtnl_route (family, ifindex,
- NM_PLATFORM_SOURCE_UNKNOWN,
- network, plen, NULL, metric, 0);
+ NM_IP_CONFIG_SOURCE_UNKNOWN,
+ network, plen, NULL, NULL, metric, 0);
struct nl_cache *cache = choose_cache (platform, object);
auto_nl_object struct nl_object *cached_object = nl_cache_search (cache, object);
@@ -3759,19 +3981,119 @@ ip_route_exists (NMPlatform *platform, int family, int ifindex, gpointer network
}
static gboolean
-ip4_route_exists (NMPlatform *platform, int ifindex, in_addr_t network, int plen, int metric)
+ip4_route_exists (NMPlatform *platform, int ifindex, in_addr_t network, int plen, guint32 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)
+ip6_route_exists (NMPlatform *platform, int ifindex, struct in6_addr network, int plen, guint32 metric)
{
return ip_route_exists (platform, AF_INET6, ifindex, &network, plen, metric);
}
/******************************************************************/
+/* Initialize the link cache while ensuring all links are of AF_UNSPEC,
+ * family (even though the kernel might set AF_BRIDGE for bridges).
+ * See also: _nl_link_family_unset() */
+static void
+init_link_cache (NMPlatform *platform)
+{
+ NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
+ struct nl_object *object = NULL;
+
+ rtnl_link_alloc_cache (priv->nlh, AF_UNSPEC, &priv->link_cache);
+
+ do {
+ for (object = nl_cache_get_first (priv->link_cache); object; object = nl_cache_get_next (object)) {
+ if (rtnl_link_get_family ((struct rtnl_link *)object) != AF_UNSPEC)
+ break;
+ }
+
+ if (object) {
+ /* A non-AF_UNSPEC object encoutnered */
+ struct nl_object *existing;
+
+ nl_object_get (object);
+ nl_cache_remove (object);
+ rtnl_link_set_family ((struct rtnl_link *)object, AF_UNSPEC);
+ existing = nl_cache_search (priv->link_cache, object);
+ if (existing)
+ nl_object_put (existing);
+ else
+ nl_cache_add (priv->link_cache, object);
+ nl_object_put (object);
+ }
+ } while (object);
+}
+
+/* Calls announce_object with appropriate arguments for all objects
+ * which are not coherent between old and new caches and deallocates
+ * the old cache. */
+static void
+cache_announce_changes (NMPlatform *platform, struct nl_cache *new, struct nl_cache *old)
+{
+ struct nl_object *object;
+
+ if (!old)
+ return;
+
+ for (object = nl_cache_get_first (new); object; object = nl_cache_get_next (object)) {
+ struct nl_object *cached_object = nm_nl_cache_search (old, object);
+
+ if (cached_object) {
+ ObjectType type = object_type_from_nl_object (object);
+ if (nm_nl_object_diff (type, object, cached_object))
+ announce_object (platform, object, NM_PLATFORM_SIGNAL_CHANGED, NM_PLATFORM_REASON_EXTERNAL);
+ nl_object_put (cached_object);
+ } else
+ announce_object (platform, object, NM_PLATFORM_SIGNAL_ADDED, NM_PLATFORM_REASON_EXTERNAL);
+ }
+ for (object = nl_cache_get_first (old); object; object = nl_cache_get_next (object)) {
+ struct nl_object *cached_object = nm_nl_cache_search (new, object);
+ if (cached_object)
+ nl_object_put (cached_object);
+ else
+ announce_object (platform, object, NM_PLATFORM_SIGNAL_REMOVED, NM_PLATFORM_REASON_EXTERNAL);
+ }
+
+ nl_cache_free (old);
+}
+
+/* Creates and populates the netlink object caches. Called upon platform init and
+ * when we run out of sync (out of buffer space, netlink congestion control). In case
+ * the caches already exist, it finds changed, added and removed objects, announces
+ * them and destroys the old caches. */
+static void
+cache_repopulate_all (NMPlatform *platform)
+{
+ NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
+ struct nl_cache *old_link_cache = priv->link_cache;
+ struct nl_cache *old_address_cache = priv->address_cache;
+ struct nl_cache *old_route_cache = priv->route_cache;
+ struct nl_object *object;
+
+ debug ("platform: %spopulate platform cache", old_link_cache ? "re" : "");
+
+ /* Allocate new netlink caches */
+ init_link_cache (platform);
+ 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);
+ }
+
+ /* Make sure all changes we've missed are announced. */
+ cache_announce_changes (platform, priv->link_cache, old_link_cache);
+ cache_announce_changes (platform, priv->address_cache, old_address_cache);
+ cache_announce_changes (platform, priv->route_cache, old_route_cache);
+}
+
+/******************************************************************/
+
#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))
@@ -3798,7 +4120,8 @@ event_handler (GIOChannel *channel,
GIOCondition io_condition,
gpointer user_data)
{
- NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (user_data);
+ NMPlatform *platform = NM_PLATFORM (user_data);
+ NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
int nle;
nle = nl_recvmsgs_default (priv->nlh_event);
@@ -3810,6 +4133,17 @@ event_handler (GIOChannel *channel,
* and can happen easily. */
debug ("Uncritical failure to retrieve incoming events: %s (%d)", nl_geterror (nle), nle);
break;
+ case -NLE_NOMEM:
+ warning ("Too many netlink events. Need to resynchronize platform cache");
+ /* Drain the event queue, we've lost events and are out of sync anyway and we'd
+ * like to free up some space. We'll read in the status synchronously. */
+ nl_socket_modify_cb (priv->nlh_event, NL_CB_VALID, NL_CB_DEFAULT, NULL, NULL);
+ do {
+ nle = nl_recvmsgs_default (priv->nlh_event);
+ } while (nle != -NLE_AGAIN);
+ nl_socket_modify_cb (priv->nlh_event, NL_CB_VALID, NL_CB_CUSTOM, event_notification, user_data);
+ cache_repopulate_all (platform);
+ break;
default:
error ("Failed to retrieve incoming events: %s (%d)", nl_geterror (nle), nle);
break;
@@ -3841,6 +4175,12 @@ setup_socket (gboolean event, gpointer user_data)
nle = nl_socket_set_passcred (sock, 1);
g_assert (!nle);
+ /* No blocking for event socket, so that we can drain it safely. */
+ if (event) {
+ nle = nl_socket_set_nonblocking (sock);
+ g_assert (!nle);
+ }
+
return sock;
}
@@ -3979,7 +4319,9 @@ setup (NMPlatform *platform)
int channel_flags;
gboolean status;
int nle;
+#if HAVE_LIBNL_INET6_ADDR_GEN_MODE
struct nl_object *object;
+#endif
/* Initialize netlink socket for requests */
priv->nlh = setup_socket (FALSE, platform);
@@ -4015,14 +4357,25 @@ setup (NMPlatform *platform)
(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);
+ cache_repopulate_all (platform);
- 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);
+#if HAVE_LIBNL_INET6_ADDR_GEN_MODE
+ /* Initial check for user IPv6LL support once the link cache is allocated
+ * and filled. If there are no links in the cache yet then we'll check
+ * when a new link shows up in announce_object().
+ */
+ object = nl_cache_get_first (priv->link_cache);
+ if (object) {
+ uint8_t mode;
+
+ if (rtnl_link_inet6_get_addr_gen_mode ((struct rtnl_link *) object, &mode) == 0)
+ priv->support_user_ipv6ll = 1;
+ else
+ priv->support_user_ipv6ll = -1;
+ }
+#else
+ priv->support_user_ipv6ll = -1;
+#endif
/* Set up udev monitoring */
priv->udev_client = g_udev_client_new (udev_subsys);
@@ -4111,6 +4464,9 @@ nm_linux_platform_class_init (NMLinuxPlatformClass *klass)
platform_class->link_is_connected = link_is_connected;
platform_class->link_uses_arp = link_uses_arp;
+ platform_class->link_get_user_ipv6ll_enabled = link_get_user_ipv6ll_enabled;
+ platform_class->link_set_user_ipv6ll_enabled = link_set_user_ipv6ll_enabled;
+
platform_class->link_get_address = link_get_address;
platform_class->link_set_address = link_set_address;
platform_class->link_get_mtu = link_get_mtu;
@@ -4167,6 +4523,8 @@ nm_linux_platform_class_init (NMLinuxPlatformClass *klass)
platform_class->ip4_address_exists = ip4_address_exists;
platform_class->ip6_address_exists = ip6_address_exists;
+ platform_class->ip4_check_reinstall_device_route = ip4_check_reinstall_device_route;
+
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;
@@ -4177,4 +4535,5 @@ nm_linux_platform_class_init (NMLinuxPlatformClass *klass)
platform_class->ip6_route_exists = ip6_route_exists;
platform_class->check_support_kernel_extended_ifa_flags = check_support_kernel_extended_ifa_flags;
+ platform_class->check_support_user_ipv6ll = check_support_user_ipv6ll;
}
diff --git a/src/platform/nm-linux-platform.h b/src/platform/nm-linux-platform.h
index 53ea75e69..6f2c19939 100644
--- a/src/platform/nm-linux-platform.h
+++ b/src/platform/nm-linux-platform.h
@@ -18,8 +18,8 @@
* Copyright (C) 2012 Red Hat, Inc.
*/
-#ifndef NM_LINUX_PLATFORM_H
-#define NM_LINUX_PLATFORM_H
+#ifndef __NETWORKMANAGER_LINUX_PLATFORM_H__
+#define __NETWORKMANAGER_LINUX_PLATFORM_H__
#include "nm-platform.h"
@@ -46,4 +46,4 @@ GType nm_linux_platform_get_type (void);
void nm_linux_platform_setup (void);
-#endif /* NM_LINUX_PLATFORM_H */
+#endif /* __NETWORKMANAGER_LINUX_PLATFORM_H__ */
diff --git a/src/platform/nm-platform.c b/src/platform/nm-platform.c
index 542b0faab..14fc44c5f 100644
--- a/src/platform/nm-platform.c
+++ b/src/platform/nm-platform.c
@@ -18,6 +18,8 @@
* Copyright (C) 2012 Red Hat, Inc.
*/
+#include "config.h"
+
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
@@ -26,6 +28,7 @@
#include <string.h>
#include <netlink/route/addr.h>
+#include "gsystem-local-alloc.h"
#include "NetworkManagerUtils.h"
#include "nm-utils.h"
#include "nm-platform.h"
@@ -215,6 +218,21 @@ nm_platform_check_support_kernel_extended_ifa_flags ()
return klass->check_support_kernel_extended_ifa_flags (platform);
}
+gboolean
+nm_platform_check_support_user_ipv6ll (void)
+{
+ static int supported = -1;
+
+ g_return_val_if_fail (NM_IS_PLATFORM (platform), FALSE);
+
+ if (!klass->check_support_user_ipv6ll)
+ return FALSE;
+
+ if (supported < 0)
+ supported = klass->check_support_user_ipv6ll (platform) ? 1 : 0;
+ return !!supported;
+}
+
/******************************************************************/
/**
@@ -730,6 +748,52 @@ nm_platform_link_uses_arp (int ifindex)
}
/**
+ * nm_platform_link_get_user_ip6vll_enabled:
+ * @ifindex: Interface index
+ *
+ * Check whether NM handles IPv6LL address creation for the link. If the
+ * platform or OS doesn't support changing the IPv6LL address mode, this call
+ * will fail and return %FALSE.
+ *
+ * Returns: %TRUE if NM handles the IPv6LL address for @ifindex
+ */
+gboolean
+nm_platform_link_get_user_ipv6ll_enabled (int ifindex)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex >= 0, FALSE);
+ g_return_val_if_fail (klass->check_support_user_ipv6ll, FALSE);
+
+ if (klass->link_get_user_ipv6ll_enabled)
+ return klass->link_get_user_ipv6ll_enabled (platform, ifindex);
+ return FALSE;
+}
+
+/**
+ * nm_platform_link_set_user_ip6vll_enabled:
+ * @ifindex: Interface index
+ *
+ * Set whether NM handles IPv6LL address creation for the link. If the
+ * platform or OS doesn't support changing the IPv6LL address mode, this call
+ * will fail and return %FALSE.
+ *
+ * Returns: %TRUE if the operation was successful, %FALSE if it failed.
+ */
+gboolean
+nm_platform_link_set_user_ipv6ll_enabled (int ifindex, gboolean enabled)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex >= 0, FALSE);
+ g_return_val_if_fail (klass->check_support_user_ipv6ll, FALSE);
+
+ if (klass->link_set_user_ipv6ll_enabled)
+ return klass->link_set_user_ipv6ll_enabled (platform, ifindex, enabled);
+ return FALSE;
+}
+
+/**
* nm_platform_link_set_address:
* @ifindex: Interface index
* @address: The new MAC address
@@ -877,7 +941,7 @@ nm_platform_link_set_mtu (int ifindex, guint32 mtu)
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);
+ debug ("link: setting '%s' (%d) mtu %"G_GUINT32_FORMAT, nm_platform_link_get_name (ifindex), ifindex, mtu);
return klass->link_set_mtu (platform, ifindex, mtu);
}
@@ -1051,7 +1115,7 @@ nm_platform_team_add (const char *name)
* nm_platform_vlan_add:
* @name: New interface name
* @vlanid: VLAN identifier
- * @vlanflags: VLAN flags from libnm-util
+ * @vlanflags: VLAN flags from libnm
*
* Create a software VLAN device.
*/
@@ -1266,7 +1330,7 @@ nm_platform_wifi_get_capabilities (int ifindex, NMDeviceWifiCapabilities *caps)
}
gboolean
-nm_platform_wifi_get_bssid (int ifindex, struct ether_addr *bssid)
+nm_platform_wifi_get_bssid (int ifindex, guint8 *bssid)
{
reset_error ();
@@ -1377,14 +1441,38 @@ nm_platform_mesh_set_channel (int ifindex, guint32 channel)
}
gboolean
-nm_platform_mesh_set_ssid (int ifindex, const GByteArray *ssid)
+nm_platform_mesh_set_ssid (int ifindex, const guint8 *ssid, gsize len)
{
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);
+ return klass->mesh_set_ssid (platform, ifindex, ssid, len);
+}
+
+#define TO_STRING_DEV_BUF_SIZE (5+15+1)
+static const char *
+_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;
+ char *buf2;
+
+ strcpy (buf, " dev ");
+ buf2 = buf + 5;
+ size -= 5;
+
+ if (name)
+ g_strlcpy (buf2, name, size);
+ else
+ g_snprintf (buf2, size, "%d", ifindex);
+ } else
+ buf[0] = 0;
+
+ return buf;
}
/******************************************************************/
@@ -1482,28 +1570,41 @@ nm_platform_ip6_address_add (int ifindex,
}
gboolean
-nm_platform_ip4_address_delete (int ifindex, in_addr_t address, int plen)
+nm_platform_ip4_address_delete (int ifindex, in_addr_t address, int plen, in_addr_t peer_address)
{
+ char str_dev[TO_STRING_DEV_BUF_SIZE];
+ char str_peer[NM_UTILS_INET_ADDRSTRLEN];
+
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);
+ debug ("address: deleting IPv4 address %s/%d, %s%s%sifindex %d%s",
+ nm_utils_inet4_ntop (address, NULL), plen,
+ peer_address ? "peer " : "",
+ peer_address ? nm_utils_inet4_ntop (peer_address, str_peer) : "",
+ peer_address ? ", " : "",
+ ifindex,
+ _to_string_dev (ifindex, str_dev, sizeof (str_dev)));
+ return klass->ip4_address_delete (platform, ifindex, address, plen, peer_address);
}
gboolean
nm_platform_ip6_address_delete (int ifindex, struct in6_addr address, int plen)
{
+ char str_dev[TO_STRING_DEV_BUF_SIZE];
+
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);
+ debug ("address: deleting IPv6 address %s/%d, ifindex %d%s",
+ nm_utils_inet6_ntop (&address, NULL), plen, ifindex,
+ _to_string_dev (ifindex, str_dev, sizeof (str_dev)));
return klass->ip6_address_delete (platform, ifindex, address, plen);
}
@@ -1600,11 +1701,16 @@ _rebase_relative_time_on_now (guint32 timestamp, guint32 duration, guint32 now,
static gboolean
_address_get_lifetime (const NMPlatformIPAddress *address, guint32 now, guint32 padding, guint32 *out_lifetime, guint32 *out_preferred)
{
- gint32 lifetime, preferred;
+ guint32 lifetime, preferred;
if (address->lifetime == 0) {
*out_lifetime = NM_PLATFORM_LIFETIME_PERMANENT;
*out_preferred = NM_PLATFORM_LIFETIME_PERMANENT;
+
+ /* We treat lifetime==0 as permanent addresses to allow easy creation of such addresses
+ * (without requiring to set the lifetime fields to NM_PLATFORM_LIFETIME_PERMANENT).
+ * In that case we also expect that the other fields (timestamp and preferred) are left unset. */
+ g_return_val_if_fail (address->timestamp == 0 && address->preferred == 0, TRUE);
} else {
lifetime = _rebase_relative_time_on_now (address->timestamp, address->lifetime, now, padding);
if (!lifetime)
@@ -1626,10 +1732,31 @@ _address_get_lifetime (const NMPlatformIPAddress *address, guint32 now, guint32
return TRUE;
}
+gboolean
+nm_platform_ip4_check_reinstall_device_route (int ifindex, const NMPlatformIP4Address *address, guint32 device_route_metric)
+{
+ g_return_val_if_fail (address, FALSE);
+
+ if ( ifindex <= 0
+ || address->plen <= 0
+ || address->plen >= 32)
+ return FALSE;
+
+ if (device_route_metric == NM_PLATFORM_ROUTE_METRIC_IP4_DEVICE_ROUTE) {
+ /* The automatically added route would be already our desired priority.
+ * Nothing to do. */
+ return FALSE;
+ }
+
+ return klass->ip4_check_reinstall_device_route (platform, ifindex, address, device_route_metric);
+}
+
/**
* nm_platform_ip4_address_sync:
* @ifindex: Interface index
* @known_addresses: List of addresses
+ * @device_route_metric: the route metric for adding subnet routes (replaces
+ * the kernel added routes).
*
* A convenience function to synchronize addresses for a specific interface
* with the least possible disturbance. It simply removes addresses that are
@@ -1638,7 +1765,7 @@ _address_get_lifetime (const NMPlatformIPAddress *address, guint32 now, guint32
* Returns: %TRUE on success.
*/
gboolean
-nm_platform_ip4_address_sync (int ifindex, const GArray *known_addresses)
+nm_platform_ip4_address_sync (int ifindex, const GArray *known_addresses, guint32 device_route_metric)
{
GArray *addresses;
NMPlatformIP4Address *address;
@@ -1651,7 +1778,7 @@ nm_platform_ip4_address_sync (int ifindex, const GArray *known_addresses)
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);
+ nm_platform_ip4_address_delete (ifindex, address->address, address->plen, address->peer_address);
}
g_array_free (addresses, TRUE);
@@ -1662,13 +1789,34 @@ nm_platform_ip4_address_sync (int ifindex, const GArray *known_addresses)
for (i = 0; i < known_addresses->len; i++) {
const NMPlatformIP4Address *known_address = &g_array_index (known_addresses, NMPlatformIP4Address, i);
guint32 lifetime, preferred;
+ guint32 network;
+ gboolean reinstall_device_route = FALSE;
/* 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_check_reinstall_device_route (ifindex, known_address, device_route_metric))
+ reinstall_device_route = TRUE;
+
if (!nm_platform_ip4_address_add (ifindex, known_address->address, known_address->peer_address, known_address->plen, lifetime, preferred, known_address->label))
return FALSE;
+
+ if (reinstall_device_route) {
+ /* Kernel automatically adds a device route for us with metric 0. That is not what we want.
+ * Remove it, and re-add it.
+ *
+ * In face of having the same subnets on two different interfaces with the same metric,
+ * this is a problem. Surprisingly, kernel is able to add two routes for the same subnet/prefix,metric
+ * to different interfaces. We cannot. Adding one, would replace the other. This is avoided
+ * by the above nm_platform_ip4_check_reinstall_device_route() check.
+ */
+ network = nm_utils_ip4_address_clear_host_address (known_address->address, known_address->plen);
+ (void) nm_platform_ip4_route_add (ifindex, NM_IP_CONFIG_SOURCE_KERNEL, network, known_address->plen,
+ 0, known_address->address, device_route_metric, 0);
+ (void) nm_platform_ip4_route_delete (ifindex, network, known_address->plen,
+ NM_PLATFORM_ROUTE_METRIC_IP4_DEVICE_ROUTE);
+ }
}
return TRUE;
@@ -1731,49 +1879,49 @@ nm_platform_ip6_address_sync (int ifindex, const GArray *known_addresses)
gboolean
nm_platform_address_flush (int ifindex)
{
- return nm_platform_ip4_address_sync (ifindex, NULL)
+ return nm_platform_ip4_address_sync (ifindex, NULL, 0)
&& nm_platform_ip6_address_sync (ifindex, NULL);
}
/******************************************************************/
GArray *
-nm_platform_ip4_route_get_all (int ifindex, gboolean include_default)
+nm_platform_ip4_route_get_all (int ifindex, NMPlatformGetRouteMode mode)
{
reset_error ();
- g_return_val_if_fail (ifindex > 0, NULL);
+ 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);
+ return klass->ip4_route_get_all (platform, ifindex, mode);
}
GArray *
-nm_platform_ip6_route_get_all (int ifindex, gboolean include_default)
+nm_platform_ip6_route_get_all (int ifindex, NMPlatformGetRouteMode mode)
{
reset_error ();
- g_return_val_if_fail (ifindex > 0, NULL);
+ 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);
+ return klass->ip6_route_get_all (platform, ifindex, mode);
}
gboolean
-nm_platform_ip4_route_add (int ifindex, NMPlatformSource source,
+nm_platform_ip4_route_add (int ifindex, NMIPConfigSource source,
in_addr_t network, int plen,
- in_addr_t gateway, int metric, int mss)
+ in_addr_t gateway, guint32 pref_src,
+ guint32 metric, guint32 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 };
+ char pref_src_buf[NM_UTILS_INET_ADDRSTRLEN];
route.ifindex = ifindex;
route.source = source;
@@ -1783,20 +1931,21 @@ nm_platform_ip4_route_add (int ifindex, NMPlatformSource source,
route.metric = metric;
route.mss = mss;
- debug ("route: adding or updating IPv4 route: %s", nm_platform_ip4_route_to_string (&route));
+ debug ("route: adding or updating IPv4 route: %s%s%s%s", nm_platform_ip4_route_to_string (&route),
+ pref_src ? " (src: " : "",
+ pref_src ? nm_utils_inet4_ntop (pref_src, pref_src_buf) : "",
+ pref_src ? ")" : "");
}
- return klass->ip4_route_add (platform, ifindex, source, network, plen, gateway, metric, mss);
+ return klass->ip4_route_add (platform, ifindex, source, network, plen, gateway, pref_src, metric, mss);
}
gboolean
-nm_platform_ip6_route_add (int ifindex, NMPlatformSource source,
+nm_platform_ip6_route_add (int ifindex, NMIPConfigSource source,
struct in6_addr network, int plen, struct in6_addr gateway,
- int metric, int mss)
+ guint32 metric, guint32 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)) {
@@ -1816,31 +1965,39 @@ nm_platform_ip6_route_add (int ifindex, NMPlatformSource source,
}
gboolean
-nm_platform_ip4_route_delete (int ifindex, in_addr_t network, int plen, int metric)
+nm_platform_ip4_route_delete (int ifindex, in_addr_t network, int plen, guint32 metric)
{
+ char str_dev[TO_STRING_DEV_BUF_SIZE];
+
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);
+ debug ("route: deleting IPv4 route %s/%d, metric=%"G_GUINT32_FORMAT", ifindex %d%s",
+ nm_utils_inet4_ntop (network, NULL), plen, metric, ifindex,
+ _to_string_dev (ifindex, str_dev, sizeof (str_dev)));
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)
+nm_platform_ip6_route_delete (int ifindex, struct in6_addr network, int plen, guint32 metric)
{
+ char str_dev[TO_STRING_DEV_BUF_SIZE];
+
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);
+ debug ("route: deleting IPv6 route %s/%d, metric=%"G_GUINT32_FORMAT", ifindex %d%s",
+ nm_utils_inet6_ntop (&network, NULL), plen, metric, ifindex,
+ _to_string_dev (ifindex, str_dev, sizeof (str_dev)));
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)
+nm_platform_ip4_route_exists (int ifindex, in_addr_t network, int plen, guint32 metric)
{
reset_error ();
@@ -1851,7 +2008,7 @@ nm_platform_ip4_route_exists (int ifindex, in_addr_t network, int plen, int metr
}
gboolean
-nm_platform_ip6_route_exists (int ifindex, struct in6_addr network, int plen, int metric)
+nm_platform_ip6_route_exists (int ifindex, struct in6_addr network, int plen, guint32 metric)
{
reset_error ();
@@ -1907,6 +2064,8 @@ array_contains_ip6_route (const GArray *routes, const NMPlatformIP6Route *route)
* 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.
+ * Default routes are ignored (both in @known_routes and those already
+ * configured on the device).
*
* Returns: %TRUE on success.
*/
@@ -1920,12 +2079,12 @@ nm_platform_ip4_route_sync (int ifindex, const GArray *known_routes)
int i, i_type;
/* Delete unknown routes */
- routes = nm_platform_ip4_route_get_all (ifindex, FALSE);
+ routes = nm_platform_ip4_route_get_all (ifindex, NM_PLATFORM_GET_ROUTE_MODE_NO_DEFAULT);
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);
+ (void) nm_platform_ip4_route_delete (ifindex, route->network, route->plen, route->metric);
}
if (!known_routes) {
@@ -1938,6 +2097,9 @@ nm_platform_ip4_route_sync (int ifindex, const GArray *known_routes)
for (i = 0; i < known_routes->len && success; i++) {
known_route = &g_array_index (known_routes, NMPlatformIP4Route, i);
+ if (NM_PLATFORM_IP_ROUTE_IS_DEFAULT (known_route))
+ continue;
+
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). */
@@ -1951,9 +2113,10 @@ nm_platform_ip4_route_sync (int ifindex, const GArray *known_routes)
known_route->network,
known_route->plen,
known_route->gateway,
+ 0,
known_route->metric,
known_route->mss);
- if (!success && known_route->source < NM_PLATFORM_SOURCE_USER) {
+ if (!success && known_route->source < NM_IP_CONFIG_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;
@@ -1974,6 +2137,8 @@ nm_platform_ip4_route_sync (int ifindex, const GArray *known_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.
+ * Default routes are ignored (both in @known_routes and those already
+ * configured on the device).
*
* Returns: %TRUE on success.
*/
@@ -1987,7 +2152,7 @@ nm_platform_ip6_route_sync (int ifindex, const GArray *known_routes)
int i, i_type;
/* Delete unknown routes */
- routes = nm_platform_ip6_route_get_all (ifindex, FALSE);
+ routes = nm_platform_ip6_route_get_all (ifindex, NM_PLATFORM_GET_ROUTE_MODE_NO_DEFAULT);
for (i = 0; i < routes->len; i++) {
route = &g_array_index (routes, NMPlatformIP6Route, i);
route->ifindex = 0;
@@ -2006,6 +2171,9 @@ nm_platform_ip6_route_sync (int ifindex, const GArray *known_routes)
for (i = 0; i < known_routes->len && success; i++) {
known_route = &g_array_index (known_routes, NMPlatformIP6Route, i);
+ if (NM_PLATFORM_IP_ROUTE_IS_DEFAULT (known_route))
+ continue;
+
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). */
@@ -2021,7 +2189,7 @@ nm_platform_ip6_route_sync (int ifindex, const GArray *known_routes)
known_route->gateway,
known_route->metric,
known_route->mss);
- if (!success && known_route->source < NM_PLATFORM_SOURCE_USER) {
+ if (!success && known_route->source < NM_IP_CONFIG_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;
@@ -2044,26 +2212,26 @@ nm_platform_route_flush (int ifindex)
/******************************************************************/
static const char *
-source_to_string (NMPlatformSource source)
+source_to_string (NMIPConfigSource source)
{
switch (source) {
- case NM_PLATFORM_SOURCE_KERNEL:
+ case NM_IP_CONFIG_SOURCE_KERNEL:
return "kernel";
- case NM_PLATFORM_SOURCE_SHARED:
+ case NM_IP_CONFIG_SOURCE_SHARED:
return "shared";
- case NM_PLATFORM_SOURCE_IP4LL:
+ case NM_IP_CONFIG_SOURCE_IP4LL:
return "ipv4ll";
- case NM_PLATFORM_SOURCE_PPP:
+ case NM_IP_CONFIG_SOURCE_PPP:
return "ppp";
- case NM_PLATFORM_SOURCE_WWAN:
+ case NM_IP_CONFIG_SOURCE_WWAN:
return "wwan";
- case NM_PLATFORM_SOURCE_VPN:
+ case NM_IP_CONFIG_SOURCE_VPN:
return "vpn";
- case NM_PLATFORM_SOURCE_DHCP:
+ case NM_IP_CONFIG_SOURCE_DHCP:
return "dhcp";
- case NM_PLATFORM_SOURCE_RDISC:
+ case NM_IP_CONFIG_SOURCE_RDISC:
return "rdisc";
- case NM_PLATFORM_SOURCE_USER:
+ case NM_IP_CONFIG_SOURCE_USER:
return "user";
default:
break;
@@ -2071,27 +2239,6 @@ source_to_string (NMPlatformSource source)
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)
{
@@ -2330,7 +2477,7 @@ nm_platform_ip4_route_to_string (const NMPlatformIP4Route *route)
_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",
+ g_snprintf (to_string_buffer, sizeof (to_string_buffer), "%s/%d via %s%s metric %"G_GUINT32_FORMAT" mss %"G_GUINT32_FORMAT" src %s",
s_network, route->plen, s_gateway,
str_dev,
route->metric, route->mss,
@@ -2363,7 +2510,7 @@ nm_platform_ip6_route_to_string (const NMPlatformIP6Route *route)
_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",
+ g_snprintf (to_string_buffer, sizeof (to_string_buffer), "%s/%d via %s%s metric %"G_GUINT32_FORMAT" mss %"G_GUINT32_FORMAT" src %s",
s_network, route->plen, s_gateway,
str_dev,
route->metric, route->mss,
diff --git a/src/platform/nm-platform.h b/src/platform/nm-platform.h
index 96b6cfabb..848f78e42 100644
--- a/src/platform/nm-platform.h
+++ b/src/platform/nm-platform.h
@@ -18,17 +18,17 @@
* Copyright (C) 2009 - 2010 Red Hat, Inc.
*/
-#ifndef NM_PLATFORM_H
-#define NM_PLATFORM_H
+#ifndef __NETWORKMANAGER_PLATFORM_H__
+#define __NETWORKMANAGER_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>
+#include <nm-dbus-interface.h>
+#include "nm-types.h"
#define NM_TYPE_PLATFORM (nm_platform_get_type ())
#define NM_PLATFORM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_PLATFORM, NMPlatform))
@@ -72,54 +72,11 @@ typedef enum {
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 {
+struct _NMPlatformLink {
__NMPlatformObject_COMMON;
char name[IFNAMSIZ];
NMLinkType type;
@@ -132,7 +89,7 @@ typedef struct {
gboolean connected;
gboolean arp;
guint mtu;
-} NMPlatformLink;
+};
typedef enum {
NM_PLATFORM_SIGNAL_ADDED,
@@ -143,19 +100,10 @@ typedef enum {
#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;
-
+ NM_PLATFORM_GET_ROUTE_MODE_ALL,
+ NM_PLATFORM_GET_ROUTE_MODE_NO_DEFAULT,
+ NM_PLATFORM_GET_ROUTE_MODE_ONLY_DEFAULT,
+} NMPlatformGetRouteMode;
typedef struct {
__NMPlatformObject_COMMON;
@@ -164,7 +112,7 @@ typedef struct {
#define __NMPlatformIPAddress_COMMON \
__NMPlatformObject_COMMON; \
- NMPlatformSource source; \
+ NMIPConfigSource source; \
\
/* Timestamp in seconds in the reference system of nm_utils_get_monotonic_timestamp_*().
*
@@ -207,37 +155,55 @@ typedef struct {
* NMPlatformIP4Address:
* @timestamp: timestamp as returned by nm_utils_get_monotonic_timestamp_s()
**/
-typedef struct {
+struct _NMPlatformIP4Address {
__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 {
+struct _NMPlatformIP6Address {
__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));
+typedef union {
+ NMPlatformIPAddress ax;
+ NMPlatformIP4Address a4;
+ NMPlatformIP6Address a6;
+} NMPlatformIPXAddress;
+
#undef __NMPlatformIPAddress_COMMON
-#define NM_PLATFORM_ROUTE_METRIC_DEFAULT 1024
+/* Default value for adding an IPv4 route. This is also what iproute2 does.
+ * Note that contrary to IPv6, you can add routes with metric 0 and it is even
+ * the default.
+ */
+#define NM_PLATFORM_ROUTE_METRIC_DEFAULT_IP4 0
+
+/* Default value for adding an IPv6 route. This is also what iproute2 does.
+ * Adding an IPv6 route with metric 0, kernel translates to IP6_RT_PRIO_USER (1024). */
+#define NM_PLATFORM_ROUTE_METRIC_DEFAULT_IP6 1024
+
+/* For IPv4, kernel adds a device route (subnet routes) with metric 0 when user
+ * configures addresses. */
+#define NM_PLATFORM_ROUTE_METRIC_IP4_DEVICE_ROUTE 0
#define __NMPlatformIPRoute_COMMON \
__NMPlatformObject_COMMON; \
- NMPlatformSource source; \
+ NMIPConfigSource source; \
int plen; \
- guint metric; \
- guint mss; \
+ guint32 metric; \
+ guint32 mss; \
;
typedef struct {
@@ -248,20 +214,29 @@ typedef struct {
};
} NMPlatformIPRoute;
-typedef struct {
+#define NM_PLATFORM_IP_ROUTE_IS_DEFAULT(route) \
+ ( ((const NMPlatformIPRoute *) (route))->plen <= 0 )
+
+struct _NMPlatformIP4Route {
__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 {
+struct _NMPlatformIP6Route {
__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));
+typedef union {
+ NMPlatformIPRoute rx;
+ NMPlatformIP4Route r4;
+ NMPlatformIP6Route r6;
+} NMPlatformIPXRoute;
+
#undef __NMPlatformIPRoute_COMMON
@@ -384,6 +359,9 @@ typedef struct {
gboolean (*link_is_connected) (NMPlatform *, int ifindex);
gboolean (*link_uses_arp) (NMPlatform *, int ifindex);
+ gboolean (*link_get_user_ipv6ll_enabled) (NMPlatform *, int ifindex);
+ gboolean (*link_set_user_ipv6ll_enabled) (NMPlatform *, int ifindex, gboolean enabled);
+
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);
@@ -417,7 +395,7 @@ typedef struct {
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);
+ gboolean (*wifi_get_bssid) (NMPlatform *, int ifindex, guint8 *bssid);
GByteArray *(*wifi_get_ssid) (NMPlatform *, int ifindex);
guint32 (*wifi_get_frequency) (NMPlatform *, int ifindex);
int (*wifi_get_quality) (NMPlatform *, int ifindex);
@@ -429,7 +407,7 @@ typedef struct {
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);
+ gboolean (*mesh_set_ssid) (NMPlatform *, int ifindex, const guint8 *ssid, gsize len);
GArray * (*ip4_address_get_all) (NMPlatform *, int ifindex);
GArray * (*ip6_address_get_all) (NMPlatform *, int ifindex);
@@ -440,25 +418,28 @@ typedef struct {
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 (*ip4_address_delete) (NMPlatform *, int ifindex, in_addr_t address, int plen, in_addr_t peer_address);
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,
+ gboolean (*ip4_check_reinstall_device_route) (NMPlatform *, int ifindex, const NMPlatformIP4Address *address, guint32 device_route_metric);
+
+ GArray * (*ip4_route_get_all) (NMPlatform *, int ifindex, NMPlatformGetRouteMode mode);
+ GArray * (*ip6_route_get_all) (NMPlatform *, int ifindex, NMPlatformGetRouteMode mode);
+ gboolean (*ip4_route_add) (NMPlatform *, int ifindex, NMIPConfigSource source,
in_addr_t network, int plen, in_addr_t gateway,
- int prio, int mss);
- gboolean (*ip6_route_add) (NMPlatform *, int ifindex, NMPlatformSource source,
+ guint32 pref_src, guint32 metric, guint32 mss);
+ gboolean (*ip6_route_add) (NMPlatform *, int ifindex, NMIPConfigSource 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);
+ guint32 metric, guint32 mss);
+ gboolean (*ip4_route_delete) (NMPlatform *, int ifindex, in_addr_t network, int plen, guint32 metric);
+ gboolean (*ip6_route_delete) (NMPlatform *, int ifindex, struct in6_addr network, int plen, guint32 metric);
+ gboolean (*ip4_route_exists) (NMPlatform *, int ifindex, in_addr_t network, int plen, guint32 metric);
+ gboolean (*ip6_route_exists) (NMPlatform *, int ifindex, struct in6_addr network, int plen, guint32 metric);
gboolean (*check_support_kernel_extended_ifa_flags) (NMPlatform *);
+ gboolean (*check_support_user_ipv6ll) (NMPlatform *);
} NMPlatformClass;
/* NMPlatform signals
@@ -524,6 +505,9 @@ gboolean nm_platform_link_is_up (int ifindex);
gboolean nm_platform_link_is_connected (int ifindex);
gboolean nm_platform_link_uses_arp (int ifindex);
+gboolean nm_platform_link_get_user_ipv6ll_enabled (int ifindex);
+gboolean nm_platform_link_set_user_ipv6ll_enabled (int ifindex, gboolean enabled);
+
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);
@@ -557,7 +541,7 @@ gboolean nm_platform_vxlan_get_properties (int ifindex, NMPlatformVxlanPropertie
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);
+gboolean nm_platform_wifi_get_bssid (int ifindex, guint8 *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);
@@ -569,7 +553,7 @@ void nm_platform_wifi_indicate_addressing_running (int ifindex, gboolean
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);
+gboolean nm_platform_mesh_set_ssid (int ifindex, const guint8 *ssid, gsize len);
GArray *nm_platform_ip4_address_get_all (int ifindex);
GArray *nm_platform_ip6_address_get_all (int ifindex);
@@ -580,27 +564,28 @@ gboolean nm_platform_ip4_address_add (int ifindex,
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_ip4_address_delete (int ifindex, in_addr_t address, int plen, in_addr_t peer_address);
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_ip4_address_sync (int ifindex, const GArray *known_addresses, guint32 device_route_metric);
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,
+gboolean nm_platform_ip4_check_reinstall_device_route (int ifindex, const NMPlatformIP4Address *address, guint32 device_route_metric);
+
+GArray *nm_platform_ip4_route_get_all (int ifindex, NMPlatformGetRouteMode mode);
+GArray *nm_platform_ip6_route_get_all (int ifindex, NMPlatformGetRouteMode mode);
+gboolean nm_platform_ip4_route_add (int ifindex, NMIPConfigSource 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,
+ guint32 pref_src, guint32 metric, guint32 mss);
+gboolean nm_platform_ip6_route_add (int ifindex, NMIPConfigSource 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);
+ guint32 metric, guint32 mss);
+gboolean nm_platform_ip4_route_delete (int ifindex, in_addr_t network, int plen, guint32 metric);
+gboolean nm_platform_ip6_route_delete (int ifindex, struct in6_addr network, int plen, guint32 metric);
+gboolean nm_platform_ip4_route_exists (int ifindex, in_addr_t network, int plen, guint32 metric);
+gboolean nm_platform_ip6_route_exists (int ifindex, struct in6_addr network, int plen, guint32 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);
@@ -619,16 +604,10 @@ int nm_platform_ip6_route_cmp (const NMPlatformIP6Route *a, const NMPlatformIP6R
gboolean nm_platform_check_support_libnl_extended_ifa_flags (void);
gboolean nm_platform_check_support_kernel_extended_ifa_flags (void);
+gboolean nm_platform_check_support_user_ipv6ll (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 */
+#endif /* __NETWORKMANAGER_PLATFORM_H__ */
diff --git a/src/platform/tests/Makefile.am b/src/platform/tests/Makefile.am
index 9b10ea7b2..b06e25e0c 100644
--- a/src/platform/tests/Makefile.am
+++ b/src/platform/tests/Makefile.am
@@ -1,14 +1,13 @@
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${top_srcdir}/libnm-core \
+ -I${top_builddir}/libnm-core \
-I${srcdir}/.. \
-DG_LOG_DOMAIN=\""NetworkManager"\" \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
$(GUDEV_CFLAGS) \
@@ -111,6 +110,6 @@ test_cleanup_linux_CPPFLAGS = \
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
+TESTS = test-link-fake test-address-fake test-route-fake test-cleanup-fake test-address-linux test-route-linux test-cleanup-linux
diff --git a/src/platform/tests/Makefile.in b/src/platform/tests/Makefile.in
index 6b03e315a..052636abe 100644
--- a/src/platform/tests/Makefile.in
+++ b/src/platform/tests/Makefile.in
@@ -86,8 +86,8 @@ noinst_PROGRAMS = dump$(EXEEXT) monitor$(EXEEXT) platform$(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)
+ 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
@@ -299,6 +299,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -422,6 +424,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -441,6 +444,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -467,7 +471,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -547,10 +551,10 @@ 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${top_srcdir}/src -I${top_builddir}/src \
+ -I${top_srcdir}/libnm-core -I${top_builddir}/libnm-core \
-I${srcdir}/.. -DG_LOG_DOMAIN=\""NetworkManager"\" \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE $(GLIB_CFLAGS) \
$(GUDEV_CFLAGS) $(LIBNL_CFLAGS) $(am__append_1)
PLATFORM_SOURCES = \
diff --git a/src/platform/tests/dump.c b/src/platform/tests/dump.c
index e97ef138c..3bb61da41 100644
--- a/src/platform/tests/dump.c
+++ b/src/platform/tests/dump.c
@@ -1,3 +1,5 @@
+#include "config.h"
+
#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
@@ -83,8 +85,8 @@ dump_interface (NMPlatformLink *link)
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);
+ ip4_routes = nm_platform_ip4_route_get_all (link->ifindex, NM_PLATFORM_GET_ROUTE_MODE_ALL);
+ ip6_routes = nm_platform_ip6_route_get_all (link->ifindex, NM_PLATFORM_GET_ROUTE_MODE_ALL);
g_assert (ip4_routes);
g_assert (ip6_routes);
diff --git a/src/platform/tests/monitor.c b/src/platform/tests/monitor.c
index d56cc2bf8..9aff10476 100644
--- a/src/platform/tests/monitor.c
+++ b/src/platform/tests/monitor.c
@@ -1,3 +1,5 @@
+#include "config.h"
+
#include <stdlib.h>
#include <syslog.h>
diff --git a/src/platform/tests/platform.c b/src/platform/tests/platform.c
index ea8bd0e3b..eea6610d3 100644
--- a/src/platform/tests/platform.c
+++ b/src/platform/tests/platform.c
@@ -18,12 +18,15 @@
* Copyright (C) 2013 Red Hat, Inc.
*/
+#include "config.h"
+
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>
#include <netlink/route/addr.h>
+#include "gsystem-local-alloc.h"
#include "nm-platform.h"
#include "nm-linux-platform.h"
#include "nm-fake-platform.h"
@@ -47,7 +50,7 @@ do_sysctl_set (char **argv)
static gboolean
do_sysctl_get (char **argv)
{
- auto_g_free char *value = nm_platform_sysctl_get (argv[0]);
+ gs_free char *value = nm_platform_sysctl_get (argv[0]);
printf ("%s\n", value);
@@ -281,7 +284,7 @@ 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);
+ gs_free char *value = nm_platform_master_get_option (ifindex, option);
printf ("%s\n", value);
@@ -303,7 +306,7 @@ 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);
+ gs_free char *value = nm_platform_slave_get_option (ifindex, option);
printf ("%s\n", value);
@@ -532,6 +535,9 @@ parse_ip_address (int family, char *str, gpointer address, int *plen)
{
char *endptr;
+ if (plen)
+ *plen = 0;
+
if (plen) {
char *ptr = strchr (str, '/');
if (ptr) {
@@ -594,7 +600,7 @@ do_ip6_address_add (char **argv)
return FALSE;
}
-#define ADDR_CMD_FULL(v, cmdname, print) \
+#define ADDR_CMD_FULL(v, cmdname, print, ...) \
static gboolean \
do_##v##_address_##cmdname (char **argv) \
{ \
@@ -602,7 +608,7 @@ do_ip6_address_add (char **argv)
v##_t address; \
int plen; \
if (ifindex && parse_##v##_address (*argv++, &address, &plen)) { \
- gboolean value = nm_platform_##v##_address_##cmdname (ifindex, address, plen); \
+ gboolean value = nm_platform_##v##_address_##cmdname (ifindex, address, plen, ##__VA_ARGS__); \
if (print) { \
print_boolean (value); \
return TRUE; \
@@ -611,7 +617,7 @@ do_ip6_address_add (char **argv)
} else \
return FALSE; \
}
-#define ADDR_CMD(cmdname) ADDR_CMD_FULL (ip4, cmdname, FALSE) ADDR_CMD_FULL (ip6, cmdname, FALSE)
+#define ADDR_CMD(cmdname) ADDR_CMD_FULL (ip4, cmdname, FALSE, 0) 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)
@@ -627,7 +633,7 @@ do_ip4_route_get_all (char **argv)
int i;
if (ifindex) {
- routes = nm_platform_ip4_route_get_all (ifindex, TRUE);
+ routes = nm_platform_ip4_route_get_all (ifindex, NM_PLATFORM_GET_ROUTE_MODE_ALL);
for (i = 0; i < routes->len; i++) {
route = &g_array_index (routes, NMPlatformIP4Route, i);
inet_ntop (AF_INET, &route->network, networkstr, sizeof (networkstr));
@@ -651,7 +657,7 @@ do_ip6_route_get_all (char **argv)
int i;
if (ifindex) {
- routes = nm_platform_ip6_route_get_all (ifindex, TRUE);
+ routes = nm_platform_ip6_route_get_all (ifindex, NM_PLATFORM_GET_ROUTE_MODE_ALL);
for (i = 0; i < routes->len; i++) {
route = &g_array_index (routes, NMPlatformIP6Route, i);
inet_ntop (AF_INET6, &route->network, networkstr, sizeof (networkstr));
@@ -677,8 +683,8 @@ do_ip4_route_add (char **argv)
metric = strtol (*argv++, NULL, 10);
mss = strtol (*argv++, NULL, 10);
- return nm_platform_ip4_route_add (ifindex, NM_PLATFORM_SOURCE_USER,
- network, plen, gateway,
+ return nm_platform_ip4_route_add (ifindex, NM_IP_CONFIG_SOURCE_USER,
+ network, plen, gateway, 0,
metric, mss);
}
@@ -693,7 +699,7 @@ do_ip6_route_add (char **argv)
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,
+ return nm_platform_ip6_route_add (ifindex, NM_IP_CONFIG_SOURCE_USER,
network, plen, gateway,
metric, mss);
}
diff --git a/src/platform/tests/test-address.c b/src/platform/tests/test-address.c
index 3fef53752..3ef13b8ec 100644
--- a/src/platform/tests/test-address.c
+++ b/src/platform/tests/test-address.c
@@ -1,3 +1,5 @@
+#include "config.h"
+
#include "test-common.h"
#define DEVICE_NAME "nm-test-device"
@@ -91,13 +93,13 @@ test_ip4_address (void)
g_array_unref (addresses);
/* Remove address */
- g_assert (nm_platform_ip4_address_delete (ifindex, addr, IP4_PLEN));
+ g_assert (nm_platform_ip4_address_delete (ifindex, addr, IP4_PLEN, 0));
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));
+ g_assert (nm_platform_ip4_address_delete (ifindex, addr, IP4_PLEN, 0));
no_error ();
free_signal (address_added);
@@ -196,7 +198,7 @@ test_ip4_address_external (void)
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));
+ g_assert (nm_platform_ip4_address_delete (ifindex, addr, IP4_PLEN, 0));
no_error ();
g_assert (!nm_platform_ip4_address_exists (ifindex, addr, IP4_PLEN));
accept_signal (address_removed);*/
diff --git a/src/platform/tests/test-cleanup.c b/src/platform/tests/test-cleanup.c
index e60d82f0e..afbb438cc 100644
--- a/src/platform/tests/test-cleanup.c
+++ b/src/platform/tests/test-cleanup.c
@@ -1,9 +1,11 @@
+#include "config.h"
+
#include "test-common.h"
#define DEVICE_NAME "nm-test-device"
static void
-test_cleanup_internal ()
+test_cleanup_internal (void)
{
SignalData *link_added = add_signal_ifname (NM_PLATFORM_SIGNAL_LINK_CHANGED, NM_PLATFORM_SIGNAL_ADDED, link_callback, DEVICE_NAME);
int ifindex;
@@ -43,17 +45,17 @@ test_cleanup_internal ()
/* 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));
+ g_assert (nm_platform_ip4_route_add (ifindex, NM_IP_CONFIG_SOURCE_USER, gateway4, 32, INADDR_ANY, 0, metric, mss));
+ g_assert (nm_platform_ip4_route_add (ifindex, NM_IP_CONFIG_SOURCE_USER, network4, plen4, gateway4, 0, metric, mss));
+ g_assert (nm_platform_ip4_route_add (ifindex, NM_IP_CONFIG_SOURCE_USER, 0, 0, gateway4, 0, metric, mss));
+ g_assert (nm_platform_ip6_route_add (ifindex, NM_IP_CONFIG_SOURCE_USER, gateway6, 128, in6addr_any, metric, mss));
+ g_assert (nm_platform_ip6_route_add (ifindex, NM_IP_CONFIG_SOURCE_USER, network6, plen6, gateway6, metric, mss));
+ g_assert (nm_platform_ip6_route_add (ifindex, NM_IP_CONFIG_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);
+ routes4 = nm_platform_ip4_route_get_all (ifindex, NM_PLATFORM_GET_ROUTE_MODE_ALL);
+ routes6 = nm_platform_ip6_route_get_all (ifindex, NM_PLATFORM_GET_ROUTE_MODE_ALL);
g_assert_cmpint (addresses4->len, ==, 1);
g_assert_cmpint (addresses6->len, ==, 1);
@@ -70,8 +72,8 @@ test_cleanup_internal ()
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);
+ routes4 = nm_platform_ip4_route_get_all (ifindex, NM_PLATFORM_GET_ROUTE_MODE_ALL);
+ routes6 = nm_platform_ip6_route_get_all (ifindex, NM_PLATFORM_GET_ROUTE_MODE_ALL);
g_assert_cmpint (addresses4->len, ==, 0);
g_assert_cmpint (addresses6->len, ==, 0);
diff --git a/src/platform/tests/test-common.c b/src/platform/tests/test-common.c
index 59a770c63..ab40f6524 100644
--- a/src/platform/tests/test-common.c
+++ b/src/platform/tests/test-common.c
@@ -1,3 +1,5 @@
+#include "config.h"
+
#include "test-common.h"
#include "nm-test-utils.h"
diff --git a/src/platform/tests/test-link.c b/src/platform/tests/test-link.c
index a3f757c2e..8bd2ef44d 100644
--- a/src/platform/tests/test-link.c
+++ b/src/platform/tests/test-link.c
@@ -1,3 +1,5 @@
+#include "config.h"
+
#include "test-common.h"
#include "nm-test-utils.h"
@@ -130,6 +132,7 @@ software_add (NMLinkType link_type, const char *name)
default:
g_error ("Link type %d unhandled.", link_type);
}
+ g_assert_not_reached ();
}
static void
@@ -188,12 +191,12 @@ test_slave (int master, int type, SignalData *master_changed)
/* 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;
+ char *stdout_str = NULL;
- nmtst_spawn_sync (NULL, &stdout, NULL, 0, "/sbin/ip", "link", "show", "dev", nm_platform_link_get_name (master));
+ nmtst_spawn_sync (NULL, &stdout_str, NULL, 0, "/sbin/ip", "link", "show", "dev", nm_platform_link_get_name (master));
- g_assert (strstr (stdout, "LOWER_UP"));
- g_free (stdout);
+ g_assert (strstr (stdout_str, "LOWER_UP"));
+ g_free (stdout_str);
} else
g_assert_not_reached ();
}
@@ -379,7 +382,7 @@ test_team (void)
}
static void
-test_vlan ()
+test_vlan (void)
{
test_software (NM_LINK_TYPE_VLAN, "vlan");
}
diff --git a/src/platform/tests/test-route.c b/src/platform/tests/test-route.c
index d45730ac5..2c70b412b 100644
--- a/src/platform/tests/test-route.c
+++ b/src/platform/tests/test-route.c
@@ -1,3 +1,5 @@
+#include "config.h"
+
#include "test-common.h"
#include "nm-test-utils.h"
@@ -48,7 +50,7 @@ ip6_route_callback (NMPlatform *platform, int ifindex, NMPlatformIP6Route *recei
}
static void
-test_ip4_route ()
+test_ip4_route (void)
{
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);
@@ -59,63 +61,64 @@ test_ip4_route ()
in_addr_t network;
int plen = 24;
in_addr_t gateway;
- int metric = 20;
+ /* Choose a high metric so that we hopefully don't conflict. */
+ int metric = 22986;
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));
+ g_assert (nm_platform_ip4_route_add (ifindex, NM_IP_CONFIG_SOURCE_USER, gateway, 32, INADDR_ANY, 0, 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));
+ g_assert (nm_platform_ip4_route_add (ifindex, NM_IP_CONFIG_SOURCE_USER, network, plen, gateway, 0, 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));
+ g_assert (nm_platform_ip4_route_add (ifindex, NM_IP_CONFIG_SOURCE_USER, network, plen, gateway, 0, 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));
+ g_assert (nm_platform_ip4_route_add (ifindex, NM_IP_CONFIG_SOURCE_USER, 0, 0, gateway, 0, 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));
+ g_assert (nm_platform_ip4_route_add (ifindex, NM_IP_CONFIG_SOURCE_USER, 0, 0, gateway, 0, metric, mss));
no_error ();
accept_signal (route_changed);
/* Test route listing */
- routes = nm_platform_ip4_route_get_all (ifindex, TRUE);
+ routes = nm_platform_ip4_route_get_all (ifindex, NM_PLATFORM_GET_ROUTE_MODE_ALL);
memset (rts, 0, sizeof (rts));
- rts[0].source = NM_PLATFORM_SOURCE_USER;
+ rts[0].source = NM_IP_CONFIG_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].source = NM_IP_CONFIG_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].source = NM_IP_CONFIG_SOURCE_USER;
rts[2].network = 0;
rts[2].plen = 0;
rts[2].ifindex = ifindex;
@@ -143,7 +146,7 @@ test_ip4_route ()
}
static void
-test_ip6_route ()
+test_ip6_route (void)
{
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);
@@ -154,63 +157,64 @@ test_ip6_route ()
struct in6_addr network;
int plen = 64;
struct in6_addr gateway;
- int metric = 20;
+ /* Choose a high metric so that we hopefully don't conflict. */
+ int metric = 22987;
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));
+ g_assert (nm_platform_ip6_route_add (ifindex, NM_IP_CONFIG_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));
+ g_assert (nm_platform_ip6_route_add (ifindex, NM_IP_CONFIG_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));
+ g_assert (nm_platform_ip6_route_add (ifindex, NM_IP_CONFIG_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));
+ g_assert (nm_platform_ip6_route_add (ifindex, NM_IP_CONFIG_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));
+ g_assert (nm_platform_ip6_route_add (ifindex, NM_IP_CONFIG_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);
+ routes = nm_platform_ip6_route_get_all (ifindex, NM_PLATFORM_GET_ROUTE_MODE_ALL);
memset (rts, 0, sizeof (rts));
- rts[0].source = NM_PLATFORM_SOURCE_USER;
+ rts[0].source = NM_IP_CONFIG_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].source = NM_IP_CONFIG_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].source = NM_IP_CONFIG_SOURCE_USER;
rts[2].network = in6addr_any;
rts[2].plen = 0;
rts[2].ifindex = ifindex;
diff --git a/src/platform/wifi/wifi-utils-nl80211.c b/src/platform/wifi/wifi-utils-nl80211.c
index 25ebd1b3c..752da926a 100644
--- a/src/platform/wifi/wifi-utils-nl80211.c
+++ b/src/platform/wifi/wifi-utils-nl80211.c
@@ -20,7 +20,8 @@
* Copyright (C) 2011 Intel Corporation. All rights reserved.
*/
-#include <config.h>
+#include "config.h"
+
#include <errno.h>
#include <string.h>
#include <sys/ioctl.h>
@@ -442,7 +443,7 @@ wifi_nl80211_get_ssid (WifiData *data)
}
static gboolean
-wifi_nl80211_get_bssid (WifiData *data, struct ether_addr *out_bssid)
+wifi_nl80211_get_bssid (WifiData *data, guint8 *out_bssid)
{
WifiDataNl80211 *nl80211 = (WifiDataNl80211 *) data;
struct nl80211_bss_info bss_info;
@@ -679,11 +680,20 @@ static int nl80211_wiphy_info_handler (struct nl_msg *msg, void *arg)
static struct nla_policy freq_policy[NL80211_FREQUENCY_ATTR_MAX + 1] = {
[NL80211_FREQUENCY_ATTR_FREQ] = { .type = NLA_U32 },
[NL80211_FREQUENCY_ATTR_DISABLED] = { .type = NLA_FLAG },
+#ifdef NL80211_FREQUENCY_ATTR_NO_IR
+ [NL80211_FREQUENCY_ATTR_NO_IR] = { .type = NLA_FLAG },
+#else
[NL80211_FREQUENCY_ATTR_PASSIVE_SCAN] = { .type = NLA_FLAG },
[NL80211_FREQUENCY_ATTR_NO_IBSS] = { .type = NLA_FLAG },
+#endif
[NL80211_FREQUENCY_ATTR_RADAR] = { .type = NLA_FLAG },
[NL80211_FREQUENCY_ATTR_MAX_TX_POWER] = { .type = NLA_U32 },
};
+#ifdef NL80211_FREQUENCY_ATTR_NO_IR
+ G_STATIC_ASSERT (NL80211_FREQUENCY_ATTR_PASSIVE_SCAN == NL80211_FREQUENCY_ATTR_NO_IR && NL80211_FREQUENCY_ATTR_NO_IBSS == NL80211_FREQUENCY_ATTR_NO_IR);
+#else
+ G_STATIC_ASSERT (NL80211_FREQUENCY_ATTR_PASSIVE_SCAN != NL80211_FREQUENCY_ATTR_NO_IBSS);
+#endif
if (nla_parse (tb, NL80211_ATTR_MAX, genlmsg_attrdata(gnlh, 0),
genlmsg_attrlen (gnlh, 0), NULL) < 0)
@@ -924,48 +934,3 @@ error:
return NULL;
}
-gboolean
-wifi_nl80211_is_wifi (const char *iface)
-{
- struct nl_sock *nl_sock;
- struct nl_cb *nl_cb = NULL;
- struct nl_msg *msg = NULL;
- int id, ifindex;
- struct nl80211_iface_info iface_info = {
- .mode = NM_802_11_MODE_UNKNOWN,
- };
- gboolean is_wifi = FALSE;
-
- nl_sock = nl_socket_alloc ();
- if (nl_sock == NULL)
- return FALSE;
-
- if (genl_connect (nl_sock))
- goto error;
-
- ifindex = nm_platform_link_get_ifindex (iface);
- if (ifindex < 0)
- goto error;
-
- id = genl_ctrl_resolve (nl_sock, "nl80211");
- if (id < 0)
- goto error;
-
- nl_cb = nl_cb_alloc (NL_CB_DEFAULT);
- if (nl_cb) {
- msg = _nl80211_alloc_msg (id, ifindex, -1, NL80211_CMD_GET_INTERFACE, 0);
- if (_nl80211_send_and_recv (nl_sock,
- nl_cb,
- msg,
- nl80211_iface_info_handler,
- &iface_info) >= 0)
- is_wifi = (iface_info.mode != NM_802_11_MODE_UNKNOWN);
- }
-
- error:
- if (nl_cb)
- nl_cb_put (nl_cb);
- nl_socket_free (nl_sock);
- return is_wifi;
-}
-
diff --git a/src/platform/wifi/wifi-utils-nl80211.h b/src/platform/wifi/wifi-utils-nl80211.h
index 2a7fe874a..b3e8c8976 100644
--- a/src/platform/wifi/wifi-utils-nl80211.h
+++ b/src/platform/wifi/wifi-utils-nl80211.h
@@ -18,13 +18,11 @@
* Copyright (C) 2011 Intel Corporation. All rights reserved.
*/
-#ifndef WIFI_UTILS_NL80211_H
-#define WIFI_UTILS_NL80211_H
+#ifndef __WIFI_UTILS_NL80211_H__
+#define __WIFI_UTILS_NL80211_H__
#include "wifi-utils.h"
WifiData *wifi_nl80211_init (const char *iface, int ifindex);
-gboolean wifi_nl80211_is_wifi (const char *iface);
-
-#endif /* WIFI_UTILS_NL80211_H */
+#endif /* __WIFI_UTILS_NL80211_H__ */
diff --git a/src/platform/wifi/wifi-utils-private.h b/src/platform/wifi/wifi-utils-private.h
index e7601752d..aaedd5b7a 100644
--- a/src/platform/wifi/wifi-utils-private.h
+++ b/src/platform/wifi/wifi-utils-private.h
@@ -18,12 +18,12 @@
* Copyright (C) 2011 Red Hat, Inc.
*/
-#ifndef WIFI_UTILS_PRIVATE_H
-#define WIFI_UTILS_PRIVATE_H
+#ifndef __WIFI_UTILS_PRIVATE_H__
+#define __WIFI_UTILS_PRIVATE_H__
#include <glib.h>
-#include "NetworkManager.h"
+#include "nm-dbus-interface.h"
#include "wifi-utils.h"
struct WifiData {
@@ -47,7 +47,7 @@ struct WifiData {
/* Return current bitrate in Kbps */
guint32 (*get_rate) (WifiData *data);
- gboolean (*get_bssid) (WifiData *data, struct ether_addr *out_bssid);
+ gboolean (*get_bssid) (WifiData *data, guint8 *out_bssid);
/* Return a signal strength percentage 0 - 100% for the current BSSID;
* return -1 on errors or if not associated.
@@ -66,7 +66,7 @@ struct WifiData {
gboolean (*set_mesh_channel) (WifiData *data, guint32 channel);
/* ssid == NULL means "auto SSID" */
- gboolean (*set_mesh_ssid) (WifiData *data, const GByteArray *ssid);
+ gboolean (*set_mesh_ssid) (WifiData *data, const guint8 *ssid, gsize len);
gboolean (*indicate_addressing_running) (WifiData *data, gboolean running);
};
@@ -74,4 +74,4 @@ struct WifiData {
gpointer wifi_data_new (const char *iface, int ifindex, gsize len);
void wifi_data_free (WifiData *data);
-#endif /* WIFI_UTILS_PRIVATE_H */
+#endif /* __WIFI_UTILS_PRIVATE_H__ */
diff --git a/src/platform/wifi/wifi-utils-wext.c b/src/platform/wifi/wifi-utils-wext.c
index cc94b69a3..e0331de7c 100644
--- a/src/platform/wifi/wifi-utils-wext.c
+++ b/src/platform/wifi/wifi-utils-wext.c
@@ -19,7 +19,8 @@
* Copyright (C) 2006 - 2008 Novell, Inc.
*/
-#include <config.h>
+#include "config.h"
+
#include <errno.h>
#include <string.h>
#include <sys/ioctl.h>
@@ -41,7 +42,6 @@
#include <sys/types.h>
#include <linux/types.h>
#include <sys/socket.h>
-#include <linux/if.h>
#include <linux/wireless.h>
@@ -230,7 +230,7 @@ wifi_wext_get_ssid (WifiData *data)
}
static gboolean
-wifi_wext_get_bssid (WifiData *data, struct ether_addr *out_bssid)
+wifi_wext_get_bssid (WifiData *data, guint8 *out_bssid)
{
WifiDataWext *wext = (WifiDataWext *) data;
struct iwreq wrq;
@@ -243,7 +243,7 @@ wifi_wext_get_bssid (WifiData *data, struct ether_addr *out_bssid)
wext->parent.iface, strerror (errno));
return FALSE;
}
- memcpy (out_bssid->ether_addr_octet, &(wrq.u.ap_addr.sa_data), ETH_ALEN);
+ memcpy (out_bssid, &(wrq.u.ap_addr.sa_data), ETH_ALEN);
return TRUE;
}
@@ -421,18 +421,15 @@ wifi_wext_set_mesh_channel (WifiData *data, guint32 channel)
}
static gboolean
-wifi_wext_set_mesh_ssid (WifiData *data, const GByteArray *ssid)
+wifi_wext_set_mesh_ssid (WifiData *data, const guint8 *ssid, gsize len)
{
WifiDataWext *wext = (WifiDataWext *) data;
struct iwreq wrq;
- guint32 len = 0;
char buf[IW_ESSID_MAX_SIZE + 1];
memset (buf, 0, sizeof (buf));
- if (ssid) {
- len = ssid->len;
- memcpy (buf, ssid->data, MIN (sizeof (buf) - 1, len));
- }
+ memcpy (buf, ssid, MIN (sizeof (buf) - 1, len));
+
wrq.u.essid.pointer = (caddr_t) buf;
wrq.u.essid.length = len;
wrq.u.essid.flags = (len > 0) ? 1 : 0; /* 1=enable SSID, 0=disable/any */
@@ -445,7 +442,7 @@ wifi_wext_set_mesh_ssid (WifiData *data, const GByteArray *ssid)
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)",
+ ssid ? nm_utils_escape_ssid (ssid, len) : "(null)",
strerror (errno));
}
diff --git a/src/platform/wifi/wifi-utils-wext.h b/src/platform/wifi/wifi-utils-wext.h
index 96ad74eb4..e168fe28a 100644
--- a/src/platform/wifi/wifi-utils-wext.h
+++ b/src/platform/wifi/wifi-utils-wext.h
@@ -18,8 +18,8 @@
* Copyright (C) 2011 Red Hat, Inc.
*/
-#ifndef WIFI_UTILS_WEXT_H
-#define WIFI_UTILS_WEXT_H
+#ifndef __WIFI_UTILS_WEXT_H__
+#define __WIFI_UTILS_WEXT_H__
#include "wifi-utils.h"
@@ -27,4 +27,4 @@ WifiData *wifi_wext_init (const char *iface, int ifindex, gboolean check_scan);
gboolean wifi_wext_is_wifi (const char *iface);
-#endif /* WIFI_UTILS_WEXT_H */
+#endif /* __WIFI_UTILS_WEXT_H__ */
diff --git a/src/platform/wifi/wifi-utils.c b/src/platform/wifi/wifi-utils.c
index ff4802752..daef881bf 100644
--- a/src/platform/wifi/wifi-utils.c
+++ b/src/platform/wifi/wifi-utils.c
@@ -19,7 +19,8 @@
* Copyright (C) 2006 - 2008 Novell, Inc.
*/
-#include <config.h>
+#include "config.h"
+
#include <sys/stat.h>
#include <stdio.h>
#include <string.h>
@@ -120,12 +121,12 @@ wifi_utils_get_ssid (WifiData *data)
}
gboolean
-wifi_utils_get_bssid (WifiData *data, struct ether_addr *out_bssid)
+wifi_utils_get_bssid (WifiData *data, guint8 *out_bssid)
{
g_return_val_if_fail (data != NULL, FALSE);
g_return_val_if_fail (out_bssid != NULL, FALSE);
- memset (out_bssid, 0, sizeof (*out_bssid));
+ memset (out_bssid, 0, ETH_ALEN);
return data->get_bssid (data, out_bssid);
}
@@ -161,13 +162,20 @@ wifi_utils_deinit (WifiData *data)
}
gboolean
-wifi_utils_is_wifi (const char *iface, const char *sysfs_path)
+wifi_utils_is_wifi (const char *iface, const char *sysfs_path, const char *devtype)
{
char phy80211_path[255];
struct stat s;
g_return_val_if_fail (iface != NULL, FALSE);
+ if (g_strcmp0 (devtype, "wlan") == 0) {
+ /* All Wi-Fi drivers should set DEVTYPE=wlan. Since the kernel's
+ * cfg80211/nl80211 stack does, this check should match any nl80211
+ * capable driver (including mac82011-based ones). */
+ return TRUE;
+ }
+
if (sysfs_path) {
/* Check for nl80211 sysfs paths */
g_snprintf (phy80211_path, sizeof (phy80211_path), "%s/phy80211", sysfs_path);
@@ -175,9 +183,6 @@ wifi_utils_is_wifi (const char *iface, const char *sysfs_path)
return TRUE;
}
- if (wifi_nl80211_is_wifi (iface))
- return TRUE;
-
#if HAVE_WEXT
if (wifi_wext_is_wifi (iface))
return TRUE;
@@ -207,11 +212,11 @@ wifi_utils_set_mesh_channel (WifiData *data, guint32 channel)
}
gboolean
-wifi_utils_set_mesh_ssid (WifiData *data, const GByteArray *ssid)
+wifi_utils_set_mesh_ssid (WifiData *data, const guint8 *ssid, gsize len)
{
g_return_val_if_fail (data != NULL, FALSE);
g_return_val_if_fail (data->set_mesh_ssid != NULL, FALSE);
- return data->set_mesh_ssid (data, ssid);
+ return data->set_mesh_ssid (data, ssid, len);
}
gboolean
diff --git a/src/platform/wifi/wifi-utils.h b/src/platform/wifi/wifi-utils.h
index 455e075f5..f1b57aced 100644
--- a/src/platform/wifi/wifi-utils.h
+++ b/src/platform/wifi/wifi-utils.h
@@ -19,17 +19,17 @@
* Copyright (C) 2006 - 2008 Novell, Inc.
*/
-#ifndef WIFI_UTILS_H
-#define WIFI_UTILS_H
+#ifndef __WIFI_UTILS_H__
+#define __WIFI_UTILS_H__
#include <net/ethernet.h>
#include <glib.h>
-#include "NetworkManager.h"
+#include "nm-dbus-interface.h"
typedef struct WifiData WifiData;
-gboolean wifi_utils_is_wifi (const char *iface, const char *sysfs_path);
+gboolean wifi_utils_is_wifi (const char *iface, const char *sysfs_path, const char *devtype);
WifiData *wifi_utils_init (const char *iface, int ifindex, gboolean check_scan);
@@ -50,8 +50,8 @@ guint32 wifi_utils_find_freq (WifiData *data, const guint32 *freqs);
/* Caller must free returned byte array */
GByteArray *wifi_utils_get_ssid (WifiData *data);
-/* Caller must free returned byte array */
-gboolean wifi_utils_get_bssid (WifiData *data, struct ether_addr *out_bssid);
+/* out_bssid must be ETH_ALEN bytes */
+gboolean wifi_utils_get_bssid (WifiData *data, guint8 *out_bssid);
/* Returns current bitrate in Kbps */
guint32 wifi_utils_get_rate (WifiData *data);
@@ -71,6 +71,6 @@ guint32 wifi_utils_get_mesh_channel (WifiData *data);
gboolean wifi_utils_set_mesh_channel (WifiData *data, guint32 channel);
-gboolean wifi_utils_set_mesh_ssid (WifiData *data, const GByteArray *ssid);
+gboolean wifi_utils_set_mesh_ssid (WifiData *data, const guint8 *ssid, gsize len);
-#endif /* WIFI_UTILS_H */
+#endif /* __WIFI_UTILS_H__ */
diff --git a/src/ppp-manager/Makefile.am b/src/ppp-manager/Makefile.am
index 46fc91388..fd2fe76bd 100644
--- a/src/ppp-manager/Makefile.am
+++ b/src/ppp-manager/Makefile.am
@@ -1,11 +1,12 @@
if WITH_PPP
AM_CPPFLAGS = \
- -I${top_builddir}/include \
-I${top_srcdir}/include \
+ -I${top_srcdir}/libnm-core \
+ -I${top_builddir}/libnm-core \
-DG_LOG_DOMAIN=\""nm-pppd-plugin"\" \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
- $(DBUS_CFLAGS) \
$(GLIB_CFLAGS)
pppd_plugindir = $(PPPD_PLUGIN_DIR)
@@ -19,8 +20,7 @@ nm_pppd_plugin_la_SOURCES = \
nm_pppd_plugin_la_LDFLAGS = -module -avoid-version
nm_pppd_plugin_la_LIBADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(DBUS_LIBS) \
- $(GLIB_LIBS)
+ $(GLIB_LIBS) \
+ -ldl
endif
diff --git a/src/ppp-manager/Makefile.in b/src/ppp-manager/Makefile.in
index 731a94592..775e4b5a9 100644
--- a/src/ppp-manager/Makefile.in
+++ b/src/ppp-manager/Makefile.in
@@ -131,9 +131,7 @@ am__uninstall_files_from_dir = { \
am__installdirs = "$(DESTDIR)$(pppd_plugindir)"
LTLIBRARIES = $(pppd_plugin_LTLIBRARIES)
am__DEPENDENCIES_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)
+@WITH_PPP_TRUE@nm_pppd_plugin_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
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
@@ -217,6 +215,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -340,6 +340,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -359,6 +360,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -385,7 +387,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -465,11 +467,12 @@ with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
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@ -I${top_srcdir}/libnm-core \
+@WITH_PPP_TRUE@ -I${top_builddir}/libnm-core \
@WITH_PPP_TRUE@ -DG_LOG_DOMAIN=\""nm-pppd-plugin"\" \
+@WITH_PPP_TRUE@ -DNETWORKMANAGER_COMPILATION \
@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)
@@ -481,9 +484,8 @@ with_valgrind = @with_valgrind@
@WITH_PPP_TRUE@nm_pppd_plugin_la_LDFLAGS = -module -avoid-version
@WITH_PPP_TRUE@nm_pppd_plugin_la_LIBADD = \
-@WITH_PPP_TRUE@ $(top_builddir)/libnm-util/libnm-util.la \
-@WITH_PPP_TRUE@ $(DBUS_LIBS) \
-@WITH_PPP_TRUE@ $(GLIB_LIBS)
+@WITH_PPP_TRUE@ $(GLIB_LIBS) \
+@WITH_PPP_TRUE@ -ldl
all: all-am
diff --git a/src/ppp-manager/nm-ppp-manager.c b/src/ppp-manager/nm-ppp-manager.c
index e856fc195..4fac96dcd 100644
--- a/src/ppp-manager/nm-ppp-manager.c
+++ b/src/ppp-manager/nm-ppp-manager.c
@@ -19,7 +19,8 @@
* Copyright (C) 2008 - 2012 Red Hat, Inc.
*/
-#include <config.h>
+#include "config.h"
+
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
@@ -32,7 +33,6 @@
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <asm/types.h>
-#include <linux/if.h>
#include <sys/stat.h>
#include <linux/ppp_defs.h>
@@ -41,18 +41,14 @@
#endif
#include <linux/if_ppp.h>
-#include "NetworkManager.h"
+#include "NetworkManagerUtils.h"
#include "nm-glib-compat.h"
#include "nm-ppp-manager.h"
-#include "nm-setting-connection.h"
-#include "nm-setting-ppp.h"
-#include "nm-setting-pppoe.h"
-#include "nm-setting-adsl.h"
-#include "nm-setting-gsm.h"
-#include "nm-setting-cdma.h"
#include "nm-dbus-manager.h"
#include "nm-logging.h"
#include "nm-posix-signals.h"
+#include "nm-platform.h"
+#include "nm-core-internal.h"
static void impl_ppp_manager_need_secrets (NMPPPManager *manager,
DBusGMethodInvocation *context);
@@ -65,6 +61,10 @@ static gboolean impl_ppp_manager_set_ip4_config (NMPPPManager *manager,
GHashTable *config,
GError **err);
+static gboolean impl_ppp_manager_set_ip6_config (NMPPPManager *manager,
+ GHashTable *config,
+ GError **err);
+
#include "nm-ppp-manager-glue.h"
static void _ppp_cleanup (NMPPPManager *manager);
@@ -99,6 +99,7 @@ G_DEFINE_TYPE (NMPPPManager, nm_ppp_manager, G_TYPE_OBJECT)
enum {
STATE_CHANGED,
IP4_CONFIG,
+ IP6_CONFIG,
STATS,
LAST_SIGNAL
@@ -112,24 +113,10 @@ enum {
LAST_PROP
};
-typedef enum {
- NM_PPP_MANAGER_ERROR_UNKOWN
-} NMPPPManagerError;
-
-GQuark
-nm_ppp_manager_error_quark (void)
-{
- static GQuark quark;
-
- if (!quark)
- quark = g_quark_from_static_string ("nm_ppp_manager_error");
-
- return quark;
-}
-
static void
nm_ppp_manager_init (NMPPPManager *manager)
{
+ NM_PPP_MANAGER_GET_PRIVATE (manager)->monitor_fd = -1;
}
static void
@@ -218,11 +205,10 @@ nm_ppp_manager_class_init (NMPPPManagerClass *manager_class)
/* Properties */
g_object_class_install_property
(object_class, PROP_PARENT_IFACE,
- g_param_spec_string (NM_PPP_MANAGER_PARENT_IFACE,
- "ParentIface",
- "Parent interface",
+ g_param_spec_string (NM_PPP_MANAGER_PARENT_IFACE, "", "",
NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
/* signals */
signals[STATE_CHANGED] =
@@ -244,6 +230,14 @@ nm_ppp_manager_class_init (NMPPPManagerClass *manager_class)
G_TYPE_STRING,
G_TYPE_OBJECT);
+ signals[IP6_CONFIG] =
+ g_signal_new ("ip6-config",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMPPPManagerClass, ip6_config),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 3, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_OBJECT);
+
signals[STATS] =
g_signal_new ("stats",
G_OBJECT_CLASS_TYPE (object_class),
@@ -299,8 +293,12 @@ monitor_stats (NMPPPManager *manager)
{
NMPPPManagerPrivate *priv = NM_PPP_MANAGER_GET_PRIVATE (manager);
+ /* already monitoring */
+ if (priv->monitor_fd >= 0)
+ return;
+
priv->monitor_fd = socket (AF_INET, SOCK_DGRAM, 0);
- if (priv->monitor_fd > 0) {
+ if (priv->monitor_fd >= 0) {
g_warn_if_fail (priv->monitor_id == 0);
if (priv->monitor_id)
g_source_remove (priv->monitor_id);
@@ -370,7 +368,8 @@ extract_details_from_connection (NMConnection *connection,
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,
+ /* This shouldn't ever happen */
+ g_set_error_literal (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_FAILED,
"Missing type-specific setting; no secrets could be found.");
return FALSE;
}
@@ -425,7 +424,7 @@ ppp_secrets_cb (NMActRequest *req,
/* This is sort of a hack but...
* pppd plugin only ever needs username and password. Passing the full
* connection there would mean some bloat: the plugin would need to link
- * against libnm-util just to parse this. So instead, let's just send what
+ * against libnm just to parse this. So instead, let's just send what
* it needs.
*/
dbus_g_method_return (priv->pending_secrets_context, username, password);
@@ -447,7 +446,7 @@ impl_ppp_manager_need_secrets (NMPPPManager *manager,
guint32 tries;
GPtrArray *hints = NULL;
GError *error = NULL;
- NMSettingsGetSecretsFlags flags = NM_SETTINGS_GET_SECRETS_FLAG_ALLOW_INTERACTION;
+ NMSecretAgentGetSecretsFlags flags = NM_SECRET_AGENT_GET_SECRETS_FLAG_ALLOW_INTERACTION;
connection = nm_act_request_get_connection (priv->act_req);
@@ -473,7 +472,7 @@ impl_ppp_manager_need_secrets (NMPPPManager *manager,
*/
tries = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (connection), PPP_MANAGER_SECRET_TRIES));
if (tries > 1)
- flags |= NM_SETTINGS_GET_SECRETS_FLAG_REQUEST_NEW;
+ flags |= NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW;
priv->secrets_id = nm_act_request_get_secrets (priv->act_req,
priv->secrets_setting_name,
@@ -498,19 +497,51 @@ static gboolean impl_ppp_manager_set_state (NMPPPManager *manager,
}
static gboolean
+set_ip_config_common (NMPPPManager *self,
+ GHashTable *hash,
+ const char *iface_prop,
+ guint32 *out_mtu)
+{
+ NMPPPManagerPrivate *priv = NM_PPP_MANAGER_GET_PRIVATE (self);
+ NMConnection *connection;
+ NMSettingPpp *s_ppp;
+ GValue *val;
+
+ val = g_hash_table_lookup (hash, iface_prop);
+ if (!val || !G_VALUE_HOLDS_STRING (val)) {
+ nm_log_err (LOGD_PPP, "no interface received!");
+ return FALSE;
+ }
+ if (priv->ip_iface == NULL)
+ priv->ip_iface = g_value_dup_string (val);
+
+ /* Got successful IP config; obviously the secrets worked */
+ connection = nm_act_request_get_connection (priv->act_req);
+ g_assert (connection);
+ g_object_set_data (G_OBJECT (connection), PPP_MANAGER_SECRET_TRIES, NULL);
+
+ /* Get any custom MTU */
+ s_ppp = nm_connection_get_setting_ppp (connection);
+ if (s_ppp && out_mtu)
+ *out_mtu = nm_setting_ppp_get_mtu (s_ppp);
+
+ monitor_stats (self);
+ return TRUE;
+}
+
+static gboolean
impl_ppp_manager_set_ip4_config (NMPPPManager *manager,
GHashTable *config_hash,
GError **err)
{
NMPPPManagerPrivate *priv = NM_PPP_MANAGER_GET_PRIVATE (manager);
- NMConnection *connection;
- NMSettingPPP *s_ppp;
NMIP4Config *config;
NMPlatformIP4Address address;
GValue *val;
int i;
+ guint32 mtu = 0;
- nm_log_info (LOGD_PPP, "PPP manager(IP Config Get) reply received.");
+ nm_log_info (LOGD_PPP, "PPP manager (IPv4 Config Get) reply received.");
remove_timeout_handler (manager);
@@ -533,7 +564,7 @@ impl_ppp_manager_set_ip4_config (NMPPPManager *manager,
address.plen = g_value_get_uint (val);
if (address.address && address.plen) {
- address.source = NM_PLATFORM_SOURCE_PPP;
+ address.source = NM_IP_CONFIG_SOURCE_PPP;
nm_ip4_config_add_address (config, &address);
} else {
nm_log_err (LOGD_PPP, "invalid IPv4 address received!");
@@ -556,35 +587,89 @@ impl_ppp_manager_set_ip4_config (NMPPPManager *manager,
nm_ip4_config_add_wins (config, g_array_index (wins, guint, i));
}
- val = (GValue *) g_hash_table_lookup (config_hash, NM_PPP_IP4_CONFIG_INTERFACE);
- if (!val || !G_VALUE_HOLDS_STRING (val)) {
- nm_log_err (LOGD_PPP, "no interface received!");
+ if (!set_ip_config_common (manager, config_hash, NM_PPP_IP4_CONFIG_INTERFACE, &mtu))
goto out;
+
+ if (mtu)
+ nm_ip4_config_set_mtu (config, mtu, NM_IP_CONFIG_SOURCE_PPP);
+
+ /* Push the IP4 config up to the device */
+ g_signal_emit (manager, signals[IP4_CONFIG], 0, priv->ip_iface, config);
+
+out:
+ g_object_unref (config);
+ return TRUE;
+}
+
+/* Converts the named Interface Identifier item to an IPv6 LL address and
+ * returns the IID.
+ */
+static gboolean
+iid_value_to_ll6_addr (GHashTable *hash,
+ const char *prop,
+ struct in6_addr *out_addr,
+ NMUtilsIPv6IfaceId *out_iid)
+{
+ GValue *val;
+ guint64 iid;
+
+ val = g_hash_table_lookup (hash, prop);
+ if (!val || !G_VALUE_HOLDS (val, G_TYPE_UINT64)) {
+ nm_log_dbg (LOGD_PPP, "pppd plugin property '%s' missing or not a uint64", prop);
+ return FALSE;
}
- priv->ip_iface = g_value_dup_string (val);
- /* Got successful IP4 config; obviously the secrets worked */
- connection = nm_act_request_get_connection (priv->act_req);
- g_assert (connection);
- g_object_set_data (G_OBJECT (connection), PPP_MANAGER_SECRET_TRIES, NULL);
+ iid = g_value_get_uint64 (val);
+ g_return_val_if_fail (iid != 0, FALSE);
- /* Merge in custom MTU */
- s_ppp = nm_connection_get_setting_ppp (connection);
- if (s_ppp) {
- guint32 mtu = nm_setting_ppp_get_mtu (s_ppp);
+ /* Construct an IPv6 LL address from the interface identifier. See
+ * http://tools.ietf.org/html/rfc4291#section-2.5.1 (IPv6) and
+ * http://tools.ietf.org/html/rfc5072#section-4.1 (IPv6 over PPP).
+ */
+ memset (out_addr->s6_addr, 0, sizeof (out_addr->s6_addr));
+ out_addr->s6_addr16[0] = htons (0xfe80);
+ memcpy (out_addr->s6_addr + 8, &iid, sizeof (iid));
+ if (out_iid)
+ nm_utils_ipv6_interface_identfier_get_from_addr (out_iid, out_addr);
+ return TRUE;
+}
- if (mtu)
- nm_ip4_config_set_mtu (config, mtu);
+static gboolean
+impl_ppp_manager_set_ip6_config (NMPPPManager *manager,
+ GHashTable *hash,
+ GError **err)
+{
+ NMPPPManagerPrivate *priv = NM_PPP_MANAGER_GET_PRIVATE (manager);
+ NMIP6Config *config;
+ NMPlatformIP6Address addr;
+ struct in6_addr a;
+ NMUtilsIPv6IfaceId iid = NM_UTILS_IPV6_IFACE_ID_INIT;
+
+ nm_log_info (LOGD_PPP, "PPP manager (IPv6 Config Get) reply received.");
+
+ remove_timeout_handler (manager);
+
+ config = nm_ip6_config_new ();
+
+ memset (&addr, 0, sizeof (addr));
+ addr.plen = 64;
+
+ if (iid_value_to_ll6_addr (hash, NM_PPP_IP6_CONFIG_PEER_IID, &a, NULL)) {
+ nm_ip6_config_set_gateway (config, &a);
+ addr.peer_address = a;
}
- /* Push the IP4 config up to the device */
- g_signal_emit (manager, signals[IP4_CONFIG], 0, priv->ip_iface, config);
+ if (iid_value_to_ll6_addr (hash, NM_PPP_IP6_CONFIG_OUR_IID, &addr.address, &iid)) {
+ nm_ip6_config_add_address (config, &addr);
- monitor_stats (manager);
+ if (set_ip_config_common (manager, hash, NM_PPP_IP6_CONFIG_INTERFACE, NULL)) {
+ /* Push the IPv6 config and interface identifier up to the device */
+ g_signal_emit (manager, signals[IP6_CONFIG], 0, priv->ip_iface, &iid, config);
+ }
+ } else
+ nm_log_err (LOGD_PPP, "invalid IPv6 address received!");
- out:
g_object_unref (config);
-
return TRUE;
}
@@ -647,36 +732,6 @@ 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_binary (const char *paths[])
-{
- const char **binary = paths;
-
- while (*binary != NULL) {
- if (**binary && g_file_test (*binary, G_FILE_TEST_EXISTS))
- break;
- binary++;
- }
-
- return *binary;
-}
-
static void
ppp_exit_code (guint pppd_exit_status, GPid pid)
{
@@ -789,34 +844,28 @@ pppd_timed_out (gpointer data)
static NMCmdLine *
create_pppd_cmd_line (NMPPPManager *self,
- NMSettingPPP *setting,
- NMSettingPPPOE *pppoe,
+ NMSettingPpp *setting,
+ NMSettingPppoe *pppoe,
NMSettingAdsl *adsl,
const char *ppp_name,
GError **err)
{
NMPPPManagerPrivate *priv = NM_PPP_MANAGER_GET_PRIVATE (self);
- const char *pppd_binary, *pppoe_binary = NULL;
+ const char *pppd_binary = NULL, *pppoe_binary = NULL;
NMCmdLine *cmd;
gboolean ppp_debug;
g_return_val_if_fail (setting != NULL, NULL);
- 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 pppd binary.");
+ pppd_binary = nm_utils_find_helper ("pppd", NULL, err);
+ if (!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.");
+ pppoe_binary = nm_utils_find_helper ("pppoe", NULL, err);
+ if (!pppoe_binary)
return NULL;
- }
}
/* Create pppd command line */
@@ -888,7 +937,7 @@ create_pppd_cmd_line (NMPPPManager *self,
if (g_strcmp0 (encaps, NM_SETTING_ADSL_ENCAPSULATION_LLC) == 0)
nm_cmd_line_add_string (cmd, "llc-encaps");
- else if (g_strcmp0 (encaps, NM_SETTING_ADSL_ENCAPSULATION_VCMUX) == 0)
+ else /*if (g_strcmp0 (encaps, NM_SETTING_ADSL_ENCAPSULATION_VCMUX) == 0)*/
nm_cmd_line_add_string (cmd, "vc-encaps");
} else if (!strcmp (protocol, NM_SETTING_ADSL_PROTOCOL_PPPOE)) {
@@ -992,7 +1041,7 @@ pppd_child_setup (gpointer user_data G_GNUC_UNUSED)
}
static void
-pppoe_fill_defaults (NMSettingPPP *setting)
+pppoe_fill_defaults (NMSettingPpp *setting)
{
if (!nm_setting_ppp_get_mtu (setting))
g_object_set (setting, NM_SETTING_PPP_MTU, (guint32) 1492, NULL);
@@ -1005,7 +1054,7 @@ pppoe_fill_defaults (NMSettingPPP *setting)
NM_SETTING_PPP_NODEFLATE, TRUE,
NULL);
- /* FIXME: These commented settings should be set as well, update NMSettingPPP first. */
+ /* FIXME: These commented settings should be set as well, update NMSettingPpp first. */
#if 0
setting->noipdefault = TRUE;
setting->default_asyncmap = TRUE;
@@ -1027,9 +1076,9 @@ nm_ppp_manager_start (NMPPPManager *manager,
{
NMPPPManagerPrivate *priv;
NMConnection *connection;
- NMSettingPPP *s_ppp;
+ NMSettingPpp *s_ppp;
gboolean s_ppp_created = FALSE;
- NMSettingPPPOE *pppoe_setting;
+ NMSettingPppoe *pppoe_setting;
NMSettingAdsl *adsl_setting;
NMCmdLine *ppp_cmd;
char *cmd_str;
@@ -1044,8 +1093,8 @@ nm_ppp_manager_start (NMPPPManager *manager,
#if !WITH_PPP
/* PPP support disabled */
g_set_error_literal (err,
- NM_PPP_MANAGER_ERROR,
- NM_PPP_MANAGER_ERROR_UNKOWN,
+ NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_FAILED,
"PPP support is not enabled.");
return FALSE;
#endif
@@ -1110,22 +1159,6 @@ out:
return priv->pid > 0;
}
-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_PPP, "waiting for pppd pid %d to exit", pid);
- waitpid (pid, NULL, 0);
- nm_log_dbg (LOGD_PPP, "pppd pid %d cleaned up", pid);
-
- return FALSE;
-}
-
static void
_ppp_cleanup (NMPPPManager *manager)
{
@@ -1142,11 +1175,11 @@ _ppp_cleanup (NMPPPManager *manager)
priv->monitor_id = 0;
}
- if (priv->monitor_fd) {
+ if (priv->monitor_fd >= 0) {
/* Get the stats one last time */
monitor_cb (manager);
close (priv->monitor_fd);
- priv->monitor_fd = 0;
+ priv->monitor_fd = -1;
}
if (priv->ppp_timeout_handler) {
@@ -1160,17 +1193,7 @@ _ppp_cleanup (NMPPPManager *manager)
}
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_PPP, "waiting for pppd pid %d to exit", priv->pid);
- waitpid (priv->pid, NULL, 0);
- nm_log_dbg (LOGD_PPP, "pppd pid %d cleaned up", priv->pid);
- }
-
+ nm_utils_kill_child_async (priv->pid, SIGTERM, LOGD_PPP, "pppd", 2000, NULL, NULL);
priv->pid = 0;
}
}
diff --git a/src/ppp-manager/nm-ppp-manager.h b/src/ppp-manager/nm-ppp-manager.h
index 1b4bc1886..84be76d04 100644
--- a/src/ppp-manager/nm-ppp-manager.h
+++ b/src/ppp-manager/nm-ppp-manager.h
@@ -19,8 +19,8 @@
* Copyright (C) 2008 - 2010 Red Hat, Inc.
*/
-#ifndef NM_PPP_MANAGER_H
-#define NM_PPP_MANAGER_H
+#ifndef __NETWORKMANAGER_PPP_MANAGER_H__
+#define __NETWORKMANAGER_PPP_MANAGER_H__
#include <glib.h>
#include <glib-object.h>
@@ -29,7 +29,9 @@
#include "nm-activation-request.h"
#include "nm-connection.h"
#include "nm-ip4-config.h"
+#include "nm-ip6-config.h"
#include "nm-pppd-plugin.h"
+#include "NetworkManagerUtils.h"
#define NM_TYPE_PPP_MANAGER (nm_ppp_manager_get_type ())
#define NM_PPP_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_PPP_MANAGER, NMPPPManager))
@@ -50,6 +52,10 @@ typedef struct {
/* Signals */
void (*state_changed) (NMPPPManager *manager, NMPPPStatus status);
void (*ip4_config) (NMPPPManager *manager, const char *iface, NMIP4Config *config);
+ void (*ip6_config) (NMPPPManager *manager,
+ const char *iface,
+ const NMUtilsIPv6IfaceId *iid,
+ NMIP6Config *config);
void (*stats) (NMPPPManager *manager, guint32 in_bytes, guint32 out_bytes);
} NMPPPManagerClass;
@@ -64,9 +70,4 @@ gboolean nm_ppp_manager_start (NMPPPManager *manager,
GError **err);
-#define NM_PPP_MANAGER_ERROR nm_ppp_manager_error_quark()
-#define NM_TYPE_PPP_MANAGER_ERROR (nm_ppp_manager_error_get_type ())
-
-GQuark nm_ppp_manager_error_quark (void);
-
-#endif /* NM_PPP_MANAGER_H */
+#endif /* __NETWORKMANAGER_PPP_MANAGER_H__ */
diff --git a/src/ppp-manager/nm-ppp-status.h b/src/ppp-manager/nm-ppp-status.h
index cfc7c393b..391b5aa98 100644
--- a/src/ppp-manager/nm-ppp-status.h
+++ b/src/ppp-manager/nm-ppp-status.h
@@ -19,8 +19,8 @@
* Copyright (C) 2008 Red Hat, Inc.
*/
-#ifndef NM_PPP_STATUS_H
-#define NM_PPP_STATUS_H
+#ifndef __NETWORKMANAGER_PPP_STATUS_H__
+#define __NETWORKMANAGER_PPP_STATUS_H__
typedef enum {
NM_PPP_STATUS_UNKNOWN,
@@ -40,4 +40,4 @@ typedef enum {
NM_PPP_STATUS_MASTER
} NMPPPStatus;
-#endif /* NM_PPP_STATUS_H */
+#endif /* __NETWORKMANAGER_PPP_STATUS_H__ */
diff --git a/src/ppp-manager/nm-pppd-plugin.c b/src/ppp-manager/nm-pppd-plugin.c
index e6ee86f7a..d5e8d7072 100644
--- a/src/ppp-manager/nm-pppd-plugin.c
+++ b/src/ppp-manager/nm-pppd-plugin.c
@@ -19,6 +19,8 @@
* Copyright (C) 2008 Red Hat, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include <pppd/pppd.h>
#include <pppd/fsm.h>
@@ -26,20 +28,22 @@
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
-#include <glib.h>
-#include <glib-object.h>
-#include <dbus/dbus-glib.h>
+#include <dlfcn.h>
+#include <gio/gio.h>
+
+#define INET6
+#include <pppd/eui64.h>
+#include <pppd/ipv6cp.h>
-#include "NetworkManager.h"
+#include "nm-dbus-interface.h"
#include "nm-pppd-plugin.h"
#include "nm-ppp-status.h"
-#include "nm-dbus-glib-types.h"
int plugin_init (void);
char pppd_version[] = VERSION;
-static DBusGProxy *proxy = NULL;
+static GDBusProxy *proxy = NULL;
static void
nm_phasechange (void *data, int arg)
@@ -47,7 +51,7 @@ nm_phasechange (void *data, int arg)
NMPPPStatus ppp_status = NM_PPP_STATUS_UNKNOWN;
char *ppp_phase;
- g_return_if_fail (DBUS_IS_G_PROXY (proxy));
+ g_return_if_fail (G_IS_DBUS_PROXY (proxy));
switch (arg) {
case PHASE_DEAD:
@@ -114,56 +118,24 @@ nm_phasechange (void *data, int arg)
ppp_phase);
if (ppp_status != NM_PPP_STATUS_UNKNOWN) {
- dbus_g_proxy_call_no_reply (proxy, "SetState",
- G_TYPE_UINT, ppp_status, G_TYPE_INVALID,
- G_TYPE_INVALID);
+ g_dbus_proxy_call (proxy,
+ "SetState",
+ g_variant_new ("(u)", ppp_status),
+ G_DBUS_CALL_FLAGS_NONE, -1,
+ NULL,
+ NULL, NULL);
}
}
-static GValue *
-str_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 GValue *
-uint_to_gvalue (guint32 i)
-{
- GValue *val;
-
- val = g_slice_new0 (GValue);
- g_value_init (val, G_TYPE_UINT);
- g_value_set_uint (val, i);
-
- return val;
-}
-
-static void
-value_destroy (gpointer data)
-{
- GValue *val = (GValue *) data;
-
- g_value_unset (val);
- g_slice_free (GValue, val);
-}
-
static void
nm_ip_up (void *data, int arg)
{
ipcp_options opts = ipcp_gotoptions[0];
ipcp_options peer_opts = ipcp_hisoptions[0];
- GHashTable *hash;
- GArray *array;
- GValue *val;
+ GVariantBuilder builder;
guint32 pppd_made_up_address = htonl (0x0a404040 + ifunit);
- g_return_if_fail (DBUS_IS_G_PROXY (proxy));
+ g_return_if_fail (G_IS_DBUS_PROXY (proxy));
g_message ("nm-ppp-plugin: (%s): ip-up event", __func__);
@@ -173,70 +145,122 @@ nm_ip_up (void *data, int arg)
return;
}
- hash = g_hash_table_new_full (g_str_hash, g_str_equal,
- NULL, value_destroy);
+ g_variant_builder_init (&builder, G_VARIANT_TYPE_VARDICT);
- g_hash_table_insert (hash, NM_PPP_IP4_CONFIG_INTERFACE,
- str_to_gvalue (ifname));
+ g_variant_builder_add (&builder, "{sv}",
+ NM_PPP_IP4_CONFIG_INTERFACE,
+ g_variant_new_string (ifname));
- g_hash_table_insert (hash, NM_PPP_IP4_CONFIG_ADDRESS,
- uint_to_gvalue (opts.ouraddr));
+ g_variant_builder_add (&builder, "{sv}",
+ NM_PPP_IP4_CONFIG_ADDRESS,
+ g_variant_new_uint32 (opts.ouraddr));
/* Prefer the peer options remote address first, _unless_ pppd made the
* address up, at which point prefer the local options remote address,
* and if that's not right, use the made-up address as a last resort.
*/
if (peer_opts.hisaddr && (peer_opts.hisaddr != pppd_made_up_address)) {
- g_hash_table_insert (hash, NM_PPP_IP4_CONFIG_GATEWAY,
- uint_to_gvalue (peer_opts.hisaddr));
+ g_variant_builder_add (&builder, "{sv}",
+ NM_PPP_IP4_CONFIG_GATEWAY,
+ g_variant_new_uint32 (peer_opts.hisaddr));
} else if (opts.hisaddr) {
- g_hash_table_insert (hash, NM_PPP_IP4_CONFIG_GATEWAY,
- uint_to_gvalue (opts.hisaddr));
+ g_variant_builder_add (&builder, "{sv}",
+ NM_PPP_IP4_CONFIG_GATEWAY,
+ g_variant_new_uint32 (opts.hisaddr));
} else if (peer_opts.hisaddr == pppd_made_up_address) {
/* As a last resort, use the made-up address */
- g_hash_table_insert (hash, NM_PPP_IP4_CONFIG_GATEWAY,
- uint_to_gvalue (peer_opts.hisaddr));
+ g_variant_builder_add (&builder, "{sv}",
+ NM_PPP_IP4_CONFIG_GATEWAY,
+ g_variant_new_uint32 (peer_opts.ouraddr));
}
- g_hash_table_insert (hash, NM_PPP_IP4_CONFIG_PREFIX, uint_to_gvalue (32));
+ g_variant_builder_add (&builder, "{sv}",
+ NM_PPP_IP4_CONFIG_PREFIX,
+ g_variant_new_uint32 (32));
if (opts.dnsaddr[0] || opts.dnsaddr[1]) {
- array = g_array_new (FALSE, FALSE, sizeof (guint32));
+ guint32 dns[2];
+ int len = 0;
if (opts.dnsaddr[0])
- g_array_append_val (array, opts.dnsaddr[0]);
+ dns[len++] = opts.dnsaddr[0];
if (opts.dnsaddr[1])
- g_array_append_val (array, opts.dnsaddr[1]);
+ dns[len++] = opts.dnsaddr[1];
- val = g_slice_new0 (GValue);
- g_value_init (val, DBUS_TYPE_G_UINT_ARRAY);
- g_value_set_boxed (val, array);
-
- g_hash_table_insert (hash, NM_PPP_IP4_CONFIG_DNS, val);
+ g_variant_builder_add (&builder, "{sv}",
+ NM_PPP_IP4_CONFIG_DNS,
+ g_variant_new_fixed_array (G_VARIANT_TYPE_UINT32,
+ dns, len, sizeof (guint32)));
}
if (opts.winsaddr[0] || opts.winsaddr[1]) {
- array = g_array_new (FALSE, FALSE, sizeof (guint32));
+ guint32 wins[2];
+ int len = 0;
if (opts.winsaddr[0])
- g_array_append_val (array, opts.winsaddr[0]);
+ wins[len++] = opts.winsaddr[0];
if (opts.winsaddr[1])
- g_array_append_val (array, opts.winsaddr[1]);
-
- val = g_slice_new0 (GValue);
- g_value_init (val, DBUS_TYPE_G_UINT_ARRAY);
- g_value_set_boxed (val, array);
+ wins[len++] = opts.winsaddr[1];
- g_hash_table_insert (hash, NM_PPP_IP4_CONFIG_WINS, val);
+ g_variant_builder_add (&builder, "{sv}",
+ NM_PPP_IP4_CONFIG_WINS,
+ g_variant_new_fixed_array (G_VARIANT_TYPE_UINT32,
+ wins, len, sizeof (guint32)));
}
- g_message ("nm-ppp-plugin: (%s): sending Ip4Config to NetworkManager...", __func__);
+ g_message ("nm-ppp-plugin: (%s): sending IPv4 config to NetworkManager...", __func__);
+
+ g_dbus_proxy_call (proxy,
+ "SetIp4Config",
+ g_variant_new ("(a{sv})", &builder),
+ G_DBUS_CALL_FLAGS_NONE, -1,
+ NULL,
+ NULL, NULL);
+}
+
+static GVariant *
+eui64_to_variant (eui64_t eui)
+{
+ guint64 iid;
+
+ G_STATIC_ASSERT (sizeof (iid) == sizeof (eui));
- dbus_g_proxy_call_no_reply (proxy, "SetIp4Config",
- DBUS_TYPE_G_MAP_OF_VARIANT, hash, G_TYPE_INVALID,
- G_TYPE_INVALID);
+ memcpy (&iid, &eui, sizeof (eui));
+ return g_variant_new_uint64 (iid);
+}
- g_hash_table_destroy (hash);
+static void
+nm_ip6_up (void *data, int arg)
+{
+ ipv6cp_options *ho = &ipv6cp_hisoptions[0];
+ ipv6cp_options *go = &ipv6cp_gotoptions[0];
+ GVariantBuilder builder;
+
+ g_return_if_fail (G_IS_DBUS_PROXY (proxy));
+
+ g_message ("nm-ppp-plugin: (%s): ip6-up event", __func__);
+
+ g_variant_builder_init (&builder, G_VARIANT_TYPE_VARDICT);
+ g_variant_builder_add (&builder, "{sv}",
+ NM_PPP_IP6_CONFIG_INTERFACE,
+ g_variant_new_string (ifname));
+ g_variant_builder_add (&builder, "{sv}",
+ NM_PPP_IP6_CONFIG_OUR_IID,
+ eui64_to_variant (go->ourid));
+ g_variant_builder_add (&builder, "{sv}",
+ NM_PPP_IP6_CONFIG_PEER_IID,
+ eui64_to_variant (ho->hisid));
+
+ /* DNS is done via DHCPv6 or router advertisements */
+
+ g_message ("nm-ppp-plugin: (%s): sending IPv6 config to NetworkManager...", __func__);
+
+ g_dbus_proxy_call (proxy,
+ "SetIp6Config",
+ g_variant_new ("(a{sv})", &builder),
+ G_DBUS_CALL_FLAGS_NONE, -1,
+ NULL,
+ NULL, NULL);
}
static int
@@ -254,9 +278,10 @@ get_pap_check (void)
static int
get_credentials (char *username, char *password)
{
- char *my_username = NULL;
- char *my_password = NULL;
+ const char *my_username = NULL;
+ const char *my_password = NULL;
size_t len;
+ GVariant *ret;
GError *err = NULL;
if (!password) {
@@ -266,15 +291,16 @@ get_credentials (char *username, char *password)
}
g_return_val_if_fail (username, -1);
- g_return_val_if_fail (DBUS_IS_G_PROXY (proxy), -1);
+ g_return_val_if_fail (G_IS_DBUS_PROXY (proxy), -1);
g_message ("nm-ppp-plugin: (%s): passwd-hook, requesting credentials...", __func__);
- if (!dbus_g_proxy_call (proxy, "NeedSecrets", &err,
- G_TYPE_INVALID,
- G_TYPE_STRING, &my_username,
- G_TYPE_STRING, &my_password,
- G_TYPE_INVALID)) {
+ ret = g_dbus_proxy_call_sync (proxy,
+ "NeedSecrets",
+ NULL,
+ G_DBUS_CALL_FLAGS_NONE, -1,
+ NULL, &err);
+ if (!ret) {
g_warning ("nm-ppp-plugin: (%s): could not get secrets: (%d) %s",
__func__,
err ? err->code : -1,
@@ -285,14 +311,14 @@ get_credentials (char *username, char *password)
g_message ("nm-ppp-plugin: (%s): got credentials from NetworkManager", __func__);
+ g_variant_get (ret, "(&s&s)", &my_username, &my_password);
+
if (my_username) {
len = strlen (my_username) + 1;
len = len < MAXNAMELEN ? len : MAXNAMELEN;
strncpy (username, my_username, len);
username[len - 1] = '\0';
-
- g_free (my_username);
}
if (my_password) {
@@ -301,17 +327,17 @@ get_credentials (char *username, char *password)
strncpy (password, my_password, len);
password[len - 1] = '\0';
-
- g_free (my_password);
}
+ g_variant_unref (ret);
+
return 1;
}
static void
nm_exit_notify (void *data, int arg)
{
- g_return_if_fail (DBUS_IS_G_PROXY (proxy));
+ g_return_if_fail (G_IS_DBUS_PROXY (proxy));
g_message ("nm-ppp-plugin: (%s): cleaning up", __func__);
@@ -319,10 +345,31 @@ nm_exit_notify (void *data, int arg)
proxy = NULL;
}
+static void
+add_ip6_notifier (void)
+{
+ static struct notifier **notifier = NULL;
+ static gsize load_once = 0;
+
+ if (g_once_init_enter (&load_once)) {
+ void *handle = dlopen(NULL, RTLD_NOW | RTLD_GLOBAL);
+
+ if (handle) {
+ notifier = dlsym (handle, "ipv6_up_notifier");
+ dlclose (handle);
+ }
+ g_once_init_leave (&load_once, 1);
+ }
+ if (notifier)
+ add_notifier (notifier, nm_ip6_up, NULL);
+ else
+ g_message ("nm-ppp-plugin: no IPV6CP notifier support; IPv6 not available");
+}
+
int
plugin_init (void)
{
- DBusGConnection *bus;
+ GDBusConnection *bus;
GError *err = NULL;
#if !GLIB_CHECK_VERSION (2, 35, 0)
@@ -331,12 +378,10 @@ plugin_init (void)
g_message ("nm-ppp-plugin: (%s): initializing", __func__);
- bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &err);
+ bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &err);
if (!bus) {
- g_warning ("nm-pppd-plugin: (%s): couldn't connect to system bus: (%d) %s",
- __func__,
- err ? err->code : -1,
- err && err->message ? err->message : "(unknown)");
+ g_warning ("nm-pppd-plugin: (%s): couldn't connect to system bus: %s",
+ __func__, err->message);
g_error_free (err);
return -1;
}
@@ -344,9 +389,21 @@ plugin_init (void)
/* NM passes in the object path of the corresponding PPPManager
* object as the 'ipparam' argument to pppd.
*/
- proxy = dbus_g_proxy_new_for_name (bus, NM_DBUS_SERVICE, ipparam, NM_DBUS_INTERFACE_PPP);
-
- dbus_g_connection_unref (bus);
+ proxy = g_dbus_proxy_new_sync (bus,
+ G_DBUS_PROXY_FLAGS_NONE,
+ NULL,
+ NM_DBUS_SERVICE,
+ ipparam,
+ NM_DBUS_INTERFACE_PPP,
+ NULL, &err);
+ g_object_unref (bus);
+
+ if (!proxy) {
+ g_warning ("nm-pppd-plugin: (%s): couldn't create D-Bus proxy: %s",
+ __func__, err->message);
+ g_error_free (err);
+ return -1;
+ }
chap_passwd_hook = get_credentials;
chap_check_hook = get_chap_check;
@@ -356,6 +413,7 @@ plugin_init (void)
add_notifier (&phasechange, nm_phasechange, NULL);
add_notifier (&ip_up_notifier, nm_ip_up, NULL);
add_notifier (&exitnotify, nm_exit_notify, proxy);
+ add_ip6_notifier ();
return 0;
}
diff --git a/src/ppp-manager/nm-pppd-plugin.h b/src/ppp-manager/nm-pppd-plugin.h
index 95a2a1829..2c3073e4e 100644
--- a/src/ppp-manager/nm-pppd-plugin.h
+++ b/src/ppp-manager/nm-pppd-plugin.h
@@ -16,14 +16,21 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Copyright (C) 2008 Novell, Inc.
- * Copyright (C) 2008 Red Hat, Inc.
+ * Copyright (C) 2008 - 2014 Red Hat, Inc.
*/
#define NM_DBUS_INTERFACE_PPP "org.freedesktop.NetworkManager.PPP"
#define NM_PPP_IP4_CONFIG_INTERFACE "interface"
-#define NM_PPP_IP4_CONFIG_ADDRESS "address"
-#define NM_PPP_IP4_CONFIG_PREFIX "prefix"
-#define NM_PPP_IP4_CONFIG_GATEWAY "gateway"
-#define NM_PPP_IP4_CONFIG_DNS "dns"
-#define NM_PPP_IP4_CONFIG_WINS "wins"
+#define NM_PPP_IP4_CONFIG_ADDRESS "address"
+#define NM_PPP_IP4_CONFIG_PREFIX "prefix"
+#define NM_PPP_IP4_CONFIG_GATEWAY "gateway"
+#define NM_PPP_IP4_CONFIG_DNS "dns"
+#define NM_PPP_IP4_CONFIG_WINS "wins"
+
+#define NM_PPP_IP6_CONFIG_INTERFACE "interface"
+#define NM_PPP_IP6_CONFIG_OUR_IID "our-iid"
+#define NM_PPP_IP6_CONFIG_PEER_IID "peer-iid"
+
+#define DBUS_TYPE_EUI64 (dbus_g_type_get_collection ("GByteArray", G_TYPE_UINT8))
+
diff --git a/src/rdisc/Makefile.in b/src/rdisc/Makefile.in
index bee23500b..47a719310 100644
--- a/src/rdisc/Makefile.in
+++ b/src/rdisc/Makefile.in
@@ -189,6 +189,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -312,6 +314,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -331,6 +334,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -357,7 +361,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
diff --git a/src/rdisc/nm-fake-rdisc.c b/src/rdisc/nm-fake-rdisc.c
index bdd207ca4..e631f28d6 100644
--- a/src/rdisc/nm-fake-rdisc.c
+++ b/src/rdisc/nm-fake-rdisc.c
@@ -18,6 +18,8 @@
* Copyright (C) 2013 Red Hat, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include <arpa/inet.h>
diff --git a/src/rdisc/nm-fake-rdisc.h b/src/rdisc/nm-fake-rdisc.h
index 248283b22..b4eff7ecf 100644
--- a/src/rdisc/nm-fake-rdisc.h
+++ b/src/rdisc/nm-fake-rdisc.h
@@ -18,8 +18,8 @@
* Copyright (C) 2013 Red Hat, Inc.
*/
-#ifndef NM_FAKE_RDISC_H
-#define NM_FAKE_RDISC_H
+#ifndef __NETWORKMANAGER_FAKE_RDISC_H__
+#define __NETWORKMANAGER_FAKE_RDISC_H__
#include "nm-rdisc.h"
@@ -46,4 +46,4 @@ GType nm_fake_rdisc_get_type (void);
NMRDisc *nm_fake_rdisc_new (int ifindex, const char *ifname);
-#endif /* NM_FAKE_RDISC_H */
+#endif /* __NETWORKMANAGER_FAKE_RDISC_H__ */
diff --git a/src/rdisc/nm-lndp-rdisc.c b/src/rdisc/nm-lndp-rdisc.c
index cf0267d1c..ff1bd33de 100644
--- a/src/rdisc/nm-lndp-rdisc.c
+++ b/src/rdisc/nm-lndp-rdisc.c
@@ -18,6 +18,8 @@
* Copyright (C) 2013 Red Hat, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include <arpa/inet.h>
/* stdarg.h included because of a bug in ndp.h */
@@ -28,6 +30,7 @@
#include "NetworkManagerUtils.h"
#include "nm-logging.h"
+#include "nm-platform.h"
#define debug(...) nm_log_dbg (LOGD_IP6, __VA_ARGS__)
#define warning(...) nm_log_warn (LOGD_IP6, __VA_ARGS__)
@@ -39,7 +42,8 @@ typedef struct {
guint send_rs_id;
GIOChannel *event_channel;
guint event_id;
- guint timeout_id;
+ guint timeout_id; /* prefix/dns/etc lifetime timeout */
+ guint ra_timeout_id; /* first RA timeout */
int solicitations_left;
} NMLNDPRDiscPrivate;
@@ -174,8 +178,15 @@ add_dns_server (NMRDisc *rdisc, const NMRDiscDNSServer *new)
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;
+ gboolean changed;
+
+ if (new->lifetime == 0) {
+ g_array_remove_index (rdisc->dns_servers, i);
+ return TRUE;
+ }
+
+ changed = (item->timestamp != new->timestamp ||
+ item->lifetime != new->lifetime);
if (changed) {
item->timestamp = new->timestamp;
item->lifetime = new->lifetime;
@@ -184,10 +195,6 @@ add_dns_server (NMRDisc *rdisc, const NMRDiscDNSServer *new)
}
}
- /* DNS server should no longer be used */
- if (new->lifetime == 0)
- return FALSE;
-
g_array_insert_val (rdisc->dns_servers, i, *new);
return TRUE;
}
@@ -203,8 +210,15 @@ add_dns_domain (NMRDisc *rdisc, const NMRDiscDNSDomain *new)
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;
+ gboolean changed;
+
+ if (new->lifetime == 0) {
+ g_array_remove_index (rdisc->dns_domains, i);
+ return TRUE;
+ }
+
+ changed = (item->timestamp != new->timestamp ||
+ item->lifetime != new->lifetime);
if (changed) {
item->timestamp = new->timestamp;
item->lifetime = new->lifetime;
@@ -213,10 +227,6 @@ add_dns_domain (NMRDisc *rdisc, const NMRDiscDNSDomain *new)
}
}
- /* 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);
@@ -433,42 +443,38 @@ translate_preference (enum ndp_route_preference preference)
}
static void
-fill_address_from_mac (struct in6_addr *address, const char *mac)
+clear_rs_timeout (NMLNDPRDisc *rdisc)
{
- unsigned char *identifier = address->s6_addr + 8;
+ NMLNDPRDiscPrivate *priv = NM_LNDP_RDISC_GET_PRIVATE (rdisc);
- if (!mac)
- return;
+ if (priv->send_rs_id) {
+ g_source_remove (priv->send_rs_id);
+ priv->send_rs_id = 0;
+ }
+}
- /* 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 void
+clear_ra_timeout (NMLNDPRDisc *rdisc)
+{
+ NMLNDPRDiscPrivate *priv = NM_LNDP_RDISC_GET_PRIVATE (rdisc);
+
+ if (priv->ra_timeout_id) {
+ g_source_remove (priv->ra_timeout_id);
+ priv->ra_timeout_id = 0;
+ }
}
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
@@ -482,10 +488,8 @@ receive_ra (struct ndp *ndp, struct ndp_msg *msg, gpointer user_data)
*/
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;
- }
+ clear_ra_timeout (NM_LNDP_RDISC (rdisc));
+ clear_rs_timeout (NM_LNDP_RDISC (rdisc));
/* DHCP level:
*
@@ -541,7 +545,7 @@ receive_ra (struct ndp *ndp, struct ndp_msg *msg, gpointer user_data)
/* Address */
if (ndp_msg_opt_prefix_flag_auto_addr_conf (msg, offset)) {
- if (route.plen == 64 && lladdrlen == 6) {
+ if (route.plen == 64 && rdisc->iid.id) {
memset (&address, 0, sizeof (address));
address.address = route.network;
address.timestamp = now;
@@ -550,7 +554,8 @@ receive_ra (struct ndp *ndp, struct ndp_msg *msg, gpointer user_data)
if (address.preferred > address.lifetime)
address.preferred = address.lifetime;
- fill_address_from_mac (&address.address, lladdr);
+ /* Add the Interface Identifier to the lower 64 bits */
+ nm_utils_ipv6_addr_set_interface_identfier (&address.address, rdisc->iid);
if (add_address (rdisc, &address))
changed |= NM_RDISC_CONFIG_ADDRESSES;
@@ -624,26 +629,45 @@ receive_ra (struct ndp *ndp, struct ndp_msg *msg, gpointer user_data)
changed |= NM_RDISC_CONFIG_HOP_LIMIT;
}
+ /* MTU */
+ ndp_msg_opt_for_each_offset(offset, msg, NDP_MSG_OPT_MTU) {
+ guint32 mtu = ndp_msg_opt_mtu(msg, offset);
+ if (mtu >= 1280) {
+ rdisc->mtu = mtu;
+ changed |= NM_RDISC_CONFIG_MTU;
+ } else {
+ /* All sorts of bad things would happen if we accepted this.
+ * Kernel would set it, but would flush out all IPv6 addresses away
+ * from the link, even the link-local, and we wouldn't be able to
+ * listen for further RAs that could fix the MTU. */
+ warning ("(%s): MTU too small for IPv6 ignored: %d", rdisc->ifname, mtu);
+ }
+ }
+
check_timestamps (rdisc, now, changed);
return 0;
}
-static void
-process_events (NMRDisc *rdisc)
+static gboolean
+event_ready (GIOChannel *source, GIOCondition condition, NMRDisc *rdisc)
{
NMLNDPRDiscPrivate *priv = NM_LNDP_RDISC_GET_PRIVATE (rdisc);
debug ("(%s): processing libndp events.", rdisc->ifname);
ndp_callall_eventfd_handler (priv->ndp);
+ return G_SOURCE_CONTINUE;
}
static gboolean
-event_ready (GIOChannel *source, GIOCondition condition, NMRDisc *rdisc)
+rdisc_ra_timeout_cb (gpointer user_data)
{
- process_events (rdisc);
+ NMLNDPRDisc *rdisc = NM_LNDP_RDISC (user_data);
+ NMLNDPRDiscPrivate *priv = NM_LNDP_RDISC_GET_PRIVATE (rdisc);
- return TRUE;
+ priv->ra_timeout_id = 0;
+ g_signal_emit_by_name (rdisc, NM_RDISC_RA_TIMEOUT);
+ return G_SOURCE_REMOVE;
}
static void
@@ -651,14 +675,20 @@ start (NMRDisc *rdisc)
{
NMLNDPRDiscPrivate *priv = NM_LNDP_RDISC_GET_PRIVATE (rdisc);
int fd = ndp_get_eventfd (priv->ndp);
+ guint ra_wait_secs;
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);
+ clear_ra_timeout (NM_LNDP_RDISC (rdisc));
+ ra_wait_secs = CLAMP (rdisc->rtr_solicitations * rdisc->rtr_solicitation_interval, 30, 120);
+ priv->ra_timeout_id = g_timeout_add_seconds (ra_wait_secs, rdisc_ra_timeout_cb, rdisc);
+ debug ("(%s): scheduling RA timeout in %d seconds", rdisc->ifname, ra_wait_secs);
+
/* Flush any pending messages to avoid using obsolete information */
- process_events (rdisc);
+ event_ready (priv->event_channel, 0, rdisc);
- ndp_msgrcv_handler_register (priv->ndp, &receive_ra, NDP_MSG_RA, rdisc->ifindex, rdisc);
+ ndp_msgrcv_handler_register (priv->ndp, receive_ra, NDP_MSG_RA, rdisc->ifindex, rdisc);
solicit (rdisc);
}
@@ -670,21 +700,29 @@ nm_lndp_rdisc_init (NMLNDPRDisc *lndp_rdisc)
}
static void
-nm_lndp_rdisc_finalize (GObject *object)
+dispose (GObject *object)
{
- NMLNDPRDiscPrivate *priv = NM_LNDP_RDISC_GET_PRIVATE (object);
+ NMLNDPRDisc *rdisc = NM_LNDP_RDISC (object);
+ NMLNDPRDiscPrivate *priv = NM_LNDP_RDISC_GET_PRIVATE (rdisc);
- if (priv->send_rs_id)
- g_source_remove (priv->send_rs_id);
- if (priv->timeout_id)
+ clear_rs_timeout (rdisc);
+ clear_ra_timeout (rdisc);
+
+ 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)
+ priv->timeout_id = 0;
+ }
+
+ if (priv->event_id) {
g_source_remove (priv->event_id);
+ priv->event_id = 0;
+ }
+ g_clear_pointer (&priv->event_channel, g_io_channel_unref);
- if (priv->ndp)
+ if (priv->ndp) {
ndp_close (priv->ndp);
+ priv->ndp = NULL;
+ }
}
static void
@@ -695,6 +733,6 @@ nm_lndp_rdisc_class_init (NMLNDPRDiscClass *klass)
g_type_class_add_private (klass, sizeof (NMLNDPRDiscPrivate));
- object_class->finalize = nm_lndp_rdisc_finalize;
+ object_class->dispose = dispose;
rdisc_class->start = start;
}
diff --git a/src/rdisc/nm-lndp-rdisc.h b/src/rdisc/nm-lndp-rdisc.h
index eb6a1df6d..407e1f925 100644
--- a/src/rdisc/nm-lndp-rdisc.h
+++ b/src/rdisc/nm-lndp-rdisc.h
@@ -18,8 +18,8 @@
* Copyright (C) 2013 Red Hat, Inc.
*/
-#ifndef NM_LNDP_RDISC_H
-#define NM_LNDP_RDISC_H
+#ifndef __NETWORKMANAGER_LNDP_RDISC_H__
+#define __NETWORKMANAGER_LNDP_RDISC_H__
#include "nm-rdisc.h"
@@ -46,4 +46,4 @@ GType nm_lndp_rdisc_get_type (void);
NMRDisc *nm_lndp_rdisc_new (int ifindex, const char *ifname);
-#endif /* NM_LNDP_RDISC_H */
+#endif /* __NETWORKMANAGER_LNDP_RDISC_H__ */
diff --git a/src/rdisc/nm-rdisc.c b/src/rdisc/nm-rdisc.c
index 1682924c2..8729fa63d 100644
--- a/src/rdisc/nm-rdisc.c
+++ b/src/rdisc/nm-rdisc.c
@@ -18,6 +18,8 @@
* Copyright (C) 2013 Red Hat, Inc.
*/
+#include "config.h"
+
#include <stdlib.h>
#include <arpa/inet.h>
@@ -32,6 +34,7 @@ G_DEFINE_TYPE (NMRDisc, nm_rdisc, G_TYPE_OBJECT)
enum {
CONFIG_CHANGED,
+ RA_TIMEOUT,
LAST_SIGNAL
};
@@ -40,11 +43,11 @@ static guint signals[LAST_SIGNAL] = { 0 };
/******************************************************************/
void
-nm_rdisc_set_lladdr (NMRDisc *rdisc, const char *addr, size_t addrlen)
+nm_rdisc_set_iid (NMRDisc *rdisc, const NMUtilsIPv6IfaceId iid)
{
- if (rdisc->lladdr)
- g_bytes_unref (rdisc->lladdr);
- rdisc->lladdr = addr ? g_bytes_new (addr, addrlen) : NULL;
+ g_return_if_fail (NM_IS_RDISC (rdisc));
+
+ rdisc->iid = iid;
}
void
@@ -152,7 +155,6 @@ nm_rdisc_init (NMRDisc *rdisc)
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;
}
@@ -167,9 +169,6 @@ nm_rdisc_finalize (GObject *object)
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
@@ -188,4 +187,12 @@ nm_rdisc_class_init (NMRDiscClass *klass)
G_STRUCT_OFFSET (NMRDiscClass, config_changed),
NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_INT);
+
+ signals[RA_TIMEOUT] = g_signal_new (
+ NM_RDISC_RA_TIMEOUT,
+ G_OBJECT_CLASS_TYPE (klass),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMRDiscClass, ra_timeout),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 0);
}
diff --git a/src/rdisc/nm-rdisc.h b/src/rdisc/nm-rdisc.h
index fba06bc21..2d83f0f02 100644
--- a/src/rdisc/nm-rdisc.h
+++ b/src/rdisc/nm-rdisc.h
@@ -18,14 +18,16 @@
* Copyright (C) 2013 Red Hat, Inc.
*/
-#ifndef NM_RDISC_H
-#define NM_RDISC_H
+#ifndef __NETWORKMANAGER_RDISC_H__
+#define __NETWORKMANAGER_RDISC_H__
#include <glib-object.h>
#include <stdlib.h>
#include <netinet/in.h>
+#include "NetworkManagerUtils.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))
@@ -34,6 +36,7 @@
#define NM_RDISC_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_RDISC, NMRDiscClass))
#define NM_RDISC_CONFIG_CHANGED "config-changed"
+#define NM_RDISC_RA_TIMEOUT "ra-timeout"
typedef enum {
NM_RDISC_DHCP_LEVEL_UNKNOWN,
@@ -92,6 +95,7 @@ typedef enum {
NM_RDISC_CONFIG_DNS_SERVERS = 1 << 4,
NM_RDISC_CONFIG_DNS_DOMAINS = 1 << 5,
NM_RDISC_CONFIG_HOP_LIMIT = 1 << 6,
+ NM_RDISC_CONFIG_MTU = 1 << 7,
} NMRDiscConfigMap;
#define NM_RDISC_MAX_ADDRESSES_DEFAULT 16
@@ -110,7 +114,7 @@ typedef struct {
int ifindex;
char *ifname;
- GBytes *lladdr;
+ NMUtilsIPv6IfaceId iid;
gint32 max_addresses;
gint32 rtr_solicitations;
gint32 rtr_solicitation_interval;
@@ -122,6 +126,7 @@ typedef struct {
GArray *dns_servers;
GArray *dns_domains;
int hop_limit;
+ guint32 mtu;
} NMRDisc;
typedef struct {
@@ -129,11 +134,12 @@ typedef struct {
void (*start) (NMRDisc *rdisc);
void (*config_changed) (NMRDisc *rdisc, NMRDiscConfigMap changed);
+ void (*ra_timeout) (NMRDisc *rdisc);
} NMRDiscClass;
GType nm_rdisc_get_type (void);
-void nm_rdisc_set_lladdr (NMRDisc *rdisc, const char *addr, size_t addrlen);
+void nm_rdisc_set_iid (NMRDisc *rdisc, const NMUtilsIPv6IfaceId iid);
void nm_rdisc_start (NMRDisc *rdisc);
-#endif /* NM_RDISC_H */
+#endif /* __NETWORKMANAGER_RDISC_H__ */
diff --git a/src/rdisc/tests/Makefile.am b/src/rdisc/tests/Makefile.am
index cf351d619..e6fe13696 100644
--- a/src/rdisc/tests/Makefile.am
+++ b/src/rdisc/tests/Makefile.am
@@ -1,20 +1,15 @@
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${top_srcdir}/libnm-core \
+ -I${top_builddir}/libnm-core \
-I${srcdir}/.. \
-DG_LOG_DOMAIN=\""NetworkManager"\" \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
- $(DBUS_CFLAGS) \
- $(POLKIT_CFLAGS) \
- $(LIBNL_CFLAGS) \
$(LIBNDP_CFLAGS)
AM_CFLAGS = $(CODE_COVERAGE_CFLAGS)
@@ -31,6 +26,5 @@ noinst_PROGRAMS = \
rdisc_SOURCES = \
rdisc.c
rdisc_LDADD = \
- $(top_builddir)/src/libNetworkManager.la \
- $(LIBNDP_LIBS)
+ $(top_builddir)/src/libNetworkManager.la
diff --git a/src/rdisc/tests/Makefile.in b/src/rdisc/tests/Makefile.in
index 97ade88f1..b2ea3c748 100644
--- a/src/rdisc/tests/Makefile.in
+++ b/src/rdisc/tests/Makefile.in
@@ -105,9 +105,7 @@ CONFIG_CLEAN_VPATH_FILES =
PROGRAMS = $(noinst_PROGRAMS)
am_rdisc_OBJECTS = rdisc.$(OBJEXT)
rdisc_OBJECTS = $(am_rdisc_OBJECTS)
-am__DEPENDENCIES_1 =
-rdisc_DEPENDENCIES = $(top_builddir)/src/libNetworkManager.la \
- $(am__DEPENDENCIES_1)
+rdisc_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
@@ -182,6 +180,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -305,6 +305,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -324,6 +325,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -350,7 +352,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -432,20 +434,15 @@ 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${top_srcdir}/libnm-core \
+ -I${top_builddir}/libnm-core \
-I${srcdir}/.. \
-DG_LOG_DOMAIN=\""NetworkManager"\" \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
- $(DBUS_CFLAGS) \
- $(POLKIT_CFLAGS) \
- $(LIBNL_CFLAGS) \
$(LIBNDP_CFLAGS)
AM_CFLAGS = $(CODE_COVERAGE_CFLAGS)
@@ -458,8 +455,7 @@ rdisc_SOURCES = \
rdisc.c
rdisc_LDADD = \
- $(top_builddir)/src/libNetworkManager.la \
- $(LIBNDP_LIBS)
+ $(top_builddir)/src/libNetworkManager.la
all: all-am
diff --git a/src/rdisc/tests/rdisc.c b/src/rdisc/tests/rdisc.c
index 1fdf5b67a..d577a63ae 100644
--- a/src/rdisc/tests/rdisc.c
+++ b/src/rdisc/tests/rdisc.c
@@ -18,6 +18,8 @@
* Copyright (C) 2013 Red Hat, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include <syslog.h>
@@ -37,7 +39,6 @@ main (int argc, char **argv)
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 ();
@@ -69,8 +70,6 @@ main (int argc, char **argv)
if (!rdisc)
return EXIT_FAILURE;
- nm_rdisc_set_lladdr (rdisc, mac, 6);
-
nm_rdisc_start (rdisc);
g_main_loop_run (loop);
diff --git a/src/settings/nm-agent-manager.c b/src/settings/nm-agent-manager.c
index ae9306929..cc4b1943c 100644
--- a/src/settings/nm-agent-manager.c
+++ b/src/settings/nm-agent-manager.c
@@ -18,7 +18,8 @@
* Copyright (C) 2010 - 2013 Red Hat, Inc.
*/
-#include <config.h>
+#include "config.h"
+
#include <string.h>
#include <pwd.h>
@@ -26,16 +27,21 @@
#include <dbus/dbus-glib.h>
#include <dbus/dbus-glib-lowlevel.h>
-#include "NetworkManager.h"
+#include "nm-dbus-interface.h"
#include "nm-logging.h"
#include "nm-agent-manager.h"
#include "nm-secret-agent.h"
-#include "nm-manager-auth.h"
+#include "nm-auth-utils.h"
#include "nm-dbus-glib-types.h"
-#include "nm-manager-auth.h"
+#include "nm-auth-utils.h"
#include "nm-setting-vpn.h"
#include "nm-setting-connection.h"
#include "nm-enum-types.h"
+#include "nm-auth-manager.h"
+#include "nm-dbus-manager.h"
+#include "nm-session-monitor.h"
+#include "nm-simple-connection.h"
+#include "NetworkManagerUtils.h"
G_DEFINE_TYPE (NMAgentManager, nm_agent_manager, G_TYPE_OBJECT)
@@ -89,20 +95,6 @@ static void impl_agent_manager_unregister (NMAgentManager *self,
#include "nm-agent-manager-glue.h"
-/********************************************************************/
-
-#define NM_AGENT_MANAGER_ERROR (nm_agent_manager_error_quark ())
-
-static GQuark
-nm_agent_manager_error_quark (void)
-{
- static GQuark ret = 0;
-
- if (G_UNLIKELY (ret == 0))
- ret = g_quark_from_static_string ("nm-agent-manager-error");
- return ret;
-}
-
/*************************************************************/
static gboolean
@@ -285,14 +277,14 @@ impl_agent_manager_register_with_capabilities (NMAgentManager *self,
NMSecretAgent *agent;
NMAuthChain *chain;
- subject = nm_auth_subject_new_from_context (context);
+ subject = nm_auth_subject_new_unix_process_from_context (context);
if (!subject) {
error = g_error_new_literal (NM_AGENT_MANAGER_ERROR,
- NM_AGENT_MANAGER_ERROR_SENDER_UNKNOWN,
+ NM_AGENT_MANAGER_ERROR_PERMISSION_DENIED,
"Unable to determine request sender and UID.");
goto done;
}
- sender_uid = nm_auth_subject_get_uid (subject);
+ sender_uid = nm_auth_subject_get_unix_process_uid (subject);
if ( 0 != sender_uid
&& !nm_session_monitor_uid_has_session (nm_session_monitor_get (),
@@ -300,7 +292,7 @@ impl_agent_manager_register_with_capabilities (NMAgentManager *self,
NULL,
&local)) {
error = g_error_new_literal (NM_AGENT_MANAGER_ERROR,
- NM_AGENT_MANAGER_ERROR_SESSION_NOT_FOUND,
+ NM_AGENT_MANAGER_ERROR_PERMISSION_DENIED,
local && local->message ? local->message : "Session not found");
goto done;
}
@@ -321,7 +313,7 @@ impl_agent_manager_register_with_capabilities (NMAgentManager *self,
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,
+ NM_AGENT_MANAGER_ERROR_FAILED,
"Failed to initialize the agent");
goto done;
}
@@ -339,7 +331,7 @@ impl_agent_manager_register_with_capabilities (NMAgentManager *self,
priv->chains = g_slist_append (priv->chains, chain);
} else {
error = g_error_new_literal (NM_AGENT_MANAGER_ERROR,
- NM_AGENT_MANAGER_ERROR_SENDER_UNKNOWN,
+ NM_AGENT_MANAGER_ERROR_FAILED,
"Unable to start agent authentication.");
}
@@ -373,7 +365,7 @@ impl_agent_manager_unregister (NMAgentManager *self,
NULL,
NULL)) {
error = g_error_new_literal (NM_AGENT_MANAGER_ERROR,
- NM_AGENT_MANAGER_ERROR_SENDER_UNKNOWN,
+ NM_AGENT_MANAGER_ERROR_PERMISSION_DENIED,
"Unable to determine request sender.");
goto done;
}
@@ -524,8 +516,8 @@ agent_compare_func (gconstpointer aa, gconstpointer bb, gpointer user_data)
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) {
+ if (nm_auth_subject_is_unix_process (req->subject)) {
+ requester = nm_auth_subject_get_unix_process_pid (req->subject);
a_pid = nm_secret_agent_get_pid (a);
b_pid = nm_secret_agent_get_pid (b);
@@ -567,11 +559,11 @@ request_add_agent (Request *req, NMSecretAgent *agent)
return;
/* If the request should filter agents by UID, do that now */
- if (!nm_auth_subject_get_internal (req->subject)) {
+ if (nm_auth_subject_is_unix_process (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);
+ subject_uid = nm_auth_subject_get_unix_process_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)",
@@ -670,7 +662,7 @@ request_start (gpointer user_data)
typedef struct {
Request parent;
- NMSettingsGetSecretsFlags flags;
+ NMSecretAgentGetSecretsFlags flags;
NMConnection *connection;
char *setting_name;
char **hints;
@@ -708,12 +700,12 @@ 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);
+ NMAuthSubject *subject = nm_secret_agent_get_subject(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)) {
+ if (!nm_auth_is_subject_in_acl (req->connection, nm_session_monitor_get (), subject, 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);
@@ -730,7 +722,7 @@ connection_request_new_get (NMConnection *connection,
GHashTable *existing_secrets,
const char *setting_name,
const char *verb,
- NMSettingsGetSecretsFlags flags,
+ NMSecretAgentGetSecretsFlags flags,
const char **hints,
NMAgentSecretsResultFunc callback,
gpointer callback_data,
@@ -883,8 +875,7 @@ set_secrets_not_required (NMConnection *connection, GHashTable *hash)
* "secrets" property is actually a hash table of secrets.
*/
if ( strcmp (setting_name, NM_SETTING_VPN_SETTING_NAME) == 0
- && strcmp (key_name, NM_SETTING_VPN_SECRETS) == 0
- && G_VALUE_HOLDS (val, DBUS_TYPE_G_MAP_OF_STRING)) {
+ && strcmp (key_name, NM_SETTING_VPN_SECRETS) == 0) {
GHashTableIter vpn_secret_iter;
const char *secret_name;
@@ -904,11 +895,16 @@ get_agent_request_secrets (ConnectionRequest *req, gboolean include_system_secre
Request *parent = (Request *) req;
NMConnection *tmp;
- tmp = nm_connection_duplicate (req->connection);
+ tmp = nm_simple_connection_new_clone (req->connection);
nm_connection_clear_secrets (tmp);
if (include_system_secrets) {
- if (req->existing_secrets)
- (void) nm_connection_update_secrets (tmp, req->setting_name, req->existing_secrets, NULL);
+ if (req->existing_secrets) {
+ GVariant *secrets_dict;
+
+ secrets_dict = nm_utils_connection_hash_to_dict (req->existing_secrets);
+ (void) nm_connection_update_secrets (tmp, req->setting_name, secrets_dict, NULL);
+ g_variant_unref (secrets_dict);
+ }
} else {
/* Update secret flags in the temporary connection to indicate that
* the system secrets we're not sending to the agent aren't required,
@@ -1001,7 +997,8 @@ check_system_secrets_cb (NMSetting *setting,
*has_system = TRUE;
}
} else {
- nm_setting_get_secret_flags (setting, key, &secret_flags, NULL);
+ if (!nm_setting_get_secret_flags (setting, key, &secret_flags, NULL))
+ g_return_if_reached ();
if (secret_flags == NM_SETTING_SECRET_FLAG_NONE)
*has_system = TRUE;
}
@@ -1033,7 +1030,7 @@ get_next_cb (Request *parent)
* secrets to the agent. We shouldn't leak system-owned secrets to
* unprivileged users.
*/
- if ( (req->flags != NM_SETTINGS_GET_SECRETS_FLAG_NONE)
+ if ( (req->flags != NM_SECRET_AGENT_GET_SECRETS_FLAG_NONE)
&& (req->existing_secrets || has_system_secrets (req->connection))) {
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);
@@ -1081,22 +1078,24 @@ get_start (gpointer user_data)
if (setting_secrets && g_hash_table_size (setting_secrets)) {
NMConnection *tmp;
GError *error = NULL;
- gboolean new_secrets = (req->flags & NM_SETTINGS_GET_SECRETS_FLAG_REQUEST_NEW);
+ gboolean new_secrets = (req->flags & NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW);
+ GVariant *secrets_dict;
/* The connection already had secrets; check if any more are required.
* If no more are required, we're done. If secrets are still needed,
* ask a secret agent for more. This allows admins to provide generic
* secrets but allow additional user-specific ones as well.
*/
- tmp = nm_connection_duplicate (req->connection);
+ tmp = nm_simple_connection_new_clone (req->connection);
g_assert (tmp);
- if (!nm_connection_update_secrets (tmp, req->setting_name, req->existing_secrets, &error)) {
+ secrets_dict = nm_utils_connection_hash_to_dict (req->existing_secrets);
+ if (!nm_connection_update_secrets (tmp, req->setting_name, secrets_dict, &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)
+ if ( (req->flags & NM_SECRET_AGENT_GET_SECRETS_FLAG_ONLY_SYSTEM)
|| ((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);
@@ -1108,9 +1107,16 @@ get_start (gpointer user_data)
req, parent->detail, req->setting_name);
/* We don't, so ask some agents for additional secrets */
- request_next_agent (parent);
+ if ( req->flags & NM_SECRET_AGENT_GET_SECRETS_FLAG_NO_ERRORS
+ && !parent->pending) {
+ /* The request initiated from GetSecrets() via DBus,
+ * don't error out if any secrets are missing. */
+ req_complete_success (parent, req->existing_secrets, NULL, NULL);
+ } else
+ request_next_agent (parent);
}
}
+ g_variant_unref (secrets_dict);
g_object_unref (tmp);
} else {
/* Couldn't get secrets from system settings, so now we ask the
@@ -1168,7 +1174,7 @@ nm_agent_manager_get_secrets (NMAgentManager *self,
NMAuthSubject *subject,
GHashTable *existing_secrets,
const char *setting_name,
- NMSettingsGetSecretsFlags flags,
+ NMSecretAgentGetSecretsFlags flags,
const char **hints,
NMAgentSecretsResultFunc callback,
gpointer callback_data,
@@ -1191,7 +1197,7 @@ nm_agent_manager_get_secrets (NMAgentManager *self,
/* NOTE: a few things in the Request handling depend on existing_secrets
* being NULL if there aren't any system-owned secrets for this connection.
- * This in turn depends on nm_connection_to_hash() and nm_setting_to_hash()
+ * This in turn depends on nm_connection_to_dbus() and nm_setting_to_hash()
* both returning NULL if they didn't hash anything.
*/
@@ -1214,7 +1220,7 @@ nm_agent_manager_get_secrets (NMAgentManager *self,
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))
+ if (!(req->flags & NM_SECRET_AGENT_GET_SECRETS_FLAG_ONLY_SYSTEM))
request_add_agents (self, parent);
parent->idle_id = g_idle_add (get_start, req);
return parent->reqid;
@@ -1442,11 +1448,13 @@ nm_agent_manager_all_agents_have_capability (NMAgentManager *manager,
NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (manager);
GHashTableIter iter;
NMSecretAgent *agent;
+ gboolean subject_is_unix_process = nm_auth_subject_is_unix_process (subject);
+ gulong subject_uid = subject_is_unix_process ? nm_auth_subject_get_unix_process_uid (subject) : 0;
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))
+ if ( subject_is_unix_process
+ && nm_secret_agent_get_owner_uid (agent) != subject_uid)
continue;
if (!(nm_secret_agent_get_capabilities (agent) & capability))
@@ -1507,9 +1515,8 @@ agent_permissions_changed_done (NMAuthChain *chain,
}
static void
-authority_changed_cb (gpointer user_data)
+authority_changed_cb (NMAuthManager *auth_manager, NMAgentManager *self)
{
- NMAgentManager *self = NM_AGENT_MANAGER (user_data);
NMAgentManagerPrivate *priv = NM_AGENT_MANAGER_GET_PRIVATE (self);
GHashTableIter iter;
NMSecretAgent *agent;
@@ -1560,7 +1567,10 @@ nm_agent_manager_get (void)
G_CALLBACK (name_owner_changed_cb),
singleton);
- nm_auth_changed_func_register (authority_changed_cb, singleton);
+ g_signal_connect (nm_auth_manager_get (),
+ NM_AUTH_MANAGER_SIGNAL_CHANGED,
+ G_CALLBACK (authority_changed_cb),
+ singleton);
return singleton;
}
@@ -1585,7 +1595,9 @@ dispose (GObject *object)
if (!priv->disposed) {
priv->disposed = TRUE;
- nm_auth_changed_func_unregister (authority_changed_cb, NM_AGENT_MANAGER (object));
+ g_signal_handlers_disconnect_by_func (nm_auth_manager_get (),
+ G_CALLBACK (authority_changed_cb),
+ object);
g_slist_free_full (priv->chains, (GDestroyNotify) nm_auth_chain_unref);
diff --git a/src/settings/nm-agent-manager.h b/src/settings/nm-agent-manager.h
index 5fdd66ef6..ac29df229 100644
--- a/src/settings/nm-agent-manager.h
+++ b/src/settings/nm-agent-manager.h
@@ -18,14 +18,14 @@
* Copyright (C) 2010 - 2011 Red Hat, Inc.
*/
-#ifndef NM_AGENT_MANAGER_H
-#define NM_AGENT_MANAGER_H
+#ifndef __NETWORKMANAGER_AGENT_MANAGER_H__
+#define __NETWORKMANAGER_AGENT_MANAGER_H__
#include <glib.h>
#include <glib-object.h>
#include <nm-connection.h>
-#include "nm-settings-flags.h"
#include "nm-secret-agent.h"
+#include "nm-types.h"
#define NM_TYPE_AGENT_MANAGER (nm_agent_manager_get_type ())
#define NM_AGENT_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_AGENT_MANAGER, NMAgentManager))
@@ -34,20 +34,9 @@
#define NM_IS_AGENT_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_AGENT_MANAGER))
#define NM_AGENT_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_AGENT_MANAGER, NMAgentManagerClass))
-typedef enum {
- NM_AGENT_MANAGER_ERROR_SENDER_UNKNOWN = 0, /*< nick=SenderUnknown >*/
- NM_AGENT_MANAGER_ERROR_PERMISSION_DENIED, /*< nick=PermissionDenied >*/
- NM_AGENT_MANAGER_ERROR_SESSION_NOT_FOUND, /*< nick=SessionNotFound >*/
- 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_USER_CANCELED /*< nick=UserCanceled >*/
-} NMAgentManagerError;
-
-typedef struct {
+struct _NMAgentManager {
GObject parent;
-} NMAgentManager;
+};
typedef struct {
GObjectClass parent;
@@ -67,7 +56,7 @@ typedef void (*NMAgentSecretsResultFunc) (NMAgentManager *manager,
const char *agent_uname,
gboolean agent_has_modify,
const char *setting_name,
- NMSettingsGetSecretsFlags flags,
+ NMSecretAgentGetSecretsFlags flags,
GHashTable *secrets,
GError *error,
gpointer user_data,
@@ -79,7 +68,7 @@ guint32 nm_agent_manager_get_secrets (NMAgentManager *manager,
NMAuthSubject *subject,
GHashTable *existing_secrets,
const char *setting_name,
- NMSettingsGetSecretsFlags flags,
+ NMSecretAgentGetSecretsFlags flags,
const char **hints,
NMAgentSecretsResultFunc callback,
gpointer callback_data,
@@ -103,4 +92,4 @@ gboolean nm_agent_manager_all_agents_have_capability (NMAgentManager *manager,
NMAuthSubject *subject,
NMSecretAgentCapabilities capability);
-#endif /* NM_AGENT_MANAGER_H */
+#endif /* __NETWORKMANAGER_AGENT_MANAGER_H__ */
diff --git a/src/settings/nm-inotify-helper.c b/src/settings/nm-inotify-helper.c
index 7231b57ec..85b3c4000 100644
--- a/src/settings/nm-inotify-helper.c
+++ b/src/settings/nm-inotify-helper.c
@@ -18,6 +18,8 @@
* (C) Copyright 2008 Red Hat, Inc.
*/
+#include "config.h"
+
#include <unistd.h>
#include <string.h>
#include <sys/inotify.h>
diff --git a/src/settings/nm-secret-agent.c b/src/settings/nm-secret-agent.c
index bf0bba129..69a5cea22 100644
--- a/src/settings/nm-secret-agent.c
+++ b/src/settings/nm-secret-agent.c
@@ -18,7 +18,7 @@
* Copyright (C) 2010 - 2011 Red Hat, Inc.
*/
-#include <config.h>
+#include "config.h"
#include <sys/types.h>
#include <pwd.h>
@@ -27,12 +27,15 @@
#include <dbus/dbus-glib.h>
#include <dbus/dbus-glib-lowlevel.h>
-#include "NetworkManager.h"
+#include "nm-dbus-interface.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"
+#include "nm-auth-subject.h"
+#include "nm-simple-connection.h"
+#include "NetworkManagerUtils.h"
G_DEFINE_TYPE (NMSecretAgent, nm_secret_agent, G_TYPE_OBJECT)
@@ -105,9 +108,9 @@ nm_secret_agent_get_description (NMSecretAgent *agent)
priv = NM_SECRET_AGENT_GET_PRIVATE (agent);
if (!priv->description) {
priv->description = g_strdup_printf ("%s/%s/%lu",
- nm_auth_subject_get_dbus_sender (priv->subject),
+ nm_auth_subject_get_unix_process_dbus_sender (priv->subject),
priv->identifier,
- nm_auth_subject_get_uid (priv->subject));
+ nm_auth_subject_get_unix_process_uid (priv->subject));
}
return priv->description;
@@ -118,7 +121,7 @@ nm_secret_agent_get_dbus_owner (NMSecretAgent *agent)
{
g_return_val_if_fail (NM_IS_SECRET_AGENT (agent), NULL);
- return nm_auth_subject_get_dbus_sender (NM_SECRET_AGENT_GET_PRIVATE (agent)->subject);
+ return nm_auth_subject_get_unix_process_dbus_sender (NM_SECRET_AGENT_GET_PRIVATE (agent)->subject);
}
const char *
@@ -134,7 +137,7 @@ nm_secret_agent_get_owner_uid (NMSecretAgent *agent)
{
g_return_val_if_fail (NM_IS_SECRET_AGENT (agent), G_MAXULONG);
- return nm_auth_subject_get_uid (NM_SECRET_AGENT_GET_PRIVATE (agent)->subject);
+ return nm_auth_subject_get_unix_process_uid (NM_SECRET_AGENT_GET_PRIVATE (agent)->subject);
}
const char *
@@ -150,7 +153,7 @@ 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);
+ return nm_auth_subject_get_unix_process_pid (NM_SECRET_AGENT_GET_PRIVATE (agent)->subject);
}
NMSecretAgentCapabilities
@@ -276,11 +279,12 @@ nm_secret_agent_get_secrets (NMSecretAgent *self,
NMConnection *connection,
const char *setting_name,
const char **hints,
- NMSettingsGetSecretsFlags flags,
+ NMSecretAgentGetSecretsFlags flags,
NMSecretAgentCallback callback,
gpointer callback_data)
{
NMSecretAgentPrivate *priv;
+ GVariant *dict;
GHashTable *hash;
Request *r;
@@ -291,10 +295,13 @@ nm_secret_agent_get_secrets (NMSecretAgent *self,
priv = NM_SECRET_AGENT_GET_PRIVATE (self);
g_return_val_if_fail (priv->proxy != NULL, NULL);
- hash = nm_connection_to_hash (connection, NM_SETTING_HASH_FLAG_ALL);
+ dict = nm_connection_to_dbus (connection, NM_CONNECTION_SERIALIZE_ALL);
+ hash = nm_utils_connection_dict_to_hash (dict);
+ g_variant_unref (dict);
- /* Mask off the private ONLY_SYSTEM flag if present */
- flags &= ~NM_SETTINGS_GET_SECRETS_FLAG_ONLY_SYSTEM;
+ /* Mask off the private flags if present */
+ flags &= ~NM_SECRET_AGENT_GET_SECRETS_FLAG_ONLY_SYSTEM;
+ flags &= ~NM_SECRET_AGENT_GET_SECRETS_FLAG_NO_ERRORS;
r = request_new (self, nm_connection_get_path (connection), setting_name, callback, callback_data);
r->call = dbus_g_proxy_begin_call_with_timeout (priv->proxy,
@@ -377,17 +384,20 @@ agent_save_delete_cb (DBusGProxy *proxy,
static gpointer
agent_new_save_delete (NMSecretAgent *self,
NMConnection *connection,
- NMSettingHashFlags hash_flags,
+ NMConnectionSerializationFlags flags,
const char *method,
NMSecretAgentCallback callback,
gpointer callback_data)
{
NMSecretAgentPrivate *priv = NM_SECRET_AGENT_GET_PRIVATE (self);
+ GVariant *dict;
GHashTable *hash;
Request *r;
const char *cpath = nm_connection_get_path (connection);
- hash = nm_connection_to_hash (connection, hash_flags);
+ dict = nm_connection_to_dbus (connection, flags);
+ hash = nm_utils_connection_dict_to_hash (dict);
+ g_variant_unref (dict);
r = request_new (self, cpath, NULL, callback, callback_data);
r->call = dbus_g_proxy_begin_call_with_timeout (priv->proxy,
@@ -417,7 +427,7 @@ nm_secret_agent_save_secrets (NMSecretAgent *self,
/* Caller should have ensured that only agent-owned secrets exist in 'connection' */
return agent_new_save_delete (self,
connection,
- NM_SETTING_HASH_FLAG_ALL,
+ NM_CONNECTION_SERIALIZE_ALL,
"SaveSecrets",
callback,
callback_data);
@@ -435,7 +445,7 @@ nm_secret_agent_delete_secrets (NMSecretAgent *self,
/* No secrets sent; agents must be smart enough to track secrets using the UUID or something */
return agent_new_save_delete (self,
connection,
- NM_SETTING_HASH_FLAG_NO_SECRETS,
+ NM_CONNECTION_SERIALIZE_NO_SECRETS,
"DeleteSecrets",
callback,
callback_data);
@@ -468,9 +478,10 @@ nm_secret_agent_new (DBusGMethodInvocation *context,
g_return_val_if_fail (context != NULL, NULL);
g_return_val_if_fail (NM_IS_AUTH_SUBJECT (subject), NULL);
+ g_return_val_if_fail (nm_auth_subject_is_unix_process (subject), NULL);
g_return_val_if_fail (identifier != NULL, NULL);
- pw = getpwuid (nm_auth_subject_get_uid (subject));
+ pw = getpwuid (nm_auth_subject_get_unix_process_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);
@@ -483,13 +494,13 @@ nm_secret_agent_new (DBusGMethodInvocation *context,
priv->capabilities = capabilities;
priv->subject = g_object_ref (subject);
- hash_str = g_strdup_printf ("%16lu%s", nm_auth_subject_get_uid (subject), identifier);
+ hash_str = g_strdup_printf ("%16lu%s", nm_auth_subject_get_unix_process_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_auth_subject_get_unix_process_dbus_sender (subject),
NM_DBUS_PATH_SECRET_AGENT,
NM_DBUS_INTERFACE_SECRET_AGENT);
g_assert (priv->proxy);
diff --git a/src/settings/nm-secret-agent.h b/src/settings/nm-secret-agent.h
index 69699af1a..f3f4ff89c 100644
--- a/src/settings/nm-secret-agent.h
+++ b/src/settings/nm-secret-agent.h
@@ -18,26 +18,14 @@
* Copyright (C) 2010 - 2011 Red Hat, Inc.
*/
-#ifndef NM_SECRET_AGENT_H
-#define NM_SECRET_AGENT_H
+#ifndef __NETWORKMANAGER_SECRET_AGENT_H__
+#define __NETWORKMANAGER_SECRET_AGENT_H__
#include <glib.h>
#include <glib-object.h>
-#include <dbus/dbus-glib.h>
-#include <dbus/dbus-glib-lowlevel.h>
#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;
+#include "nm-types.h"
#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))
@@ -46,9 +34,9 @@ typedef enum {
#define NM_IS_SECRET_AGENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_SECRET_AGENT))
#define NM_SECRET_AGENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SECRET_AGENT, NMSecretAgentClass))
-typedef struct {
+struct _NMSecretAgent {
GObject parent;
-} NMSecretAgent;
+};
typedef struct {
GObjectClass parent;
@@ -96,7 +84,7 @@ gconstpointer nm_secret_agent_get_secrets (NMSecretAgent *agent,
NMConnection *connection,
const char *setting_name,
const char **hints,
- NMSettingsGetSecretsFlags flags,
+ NMSecretAgentGetSecretsFlags flags,
NMSecretAgentCallback callback,
gpointer callback_data);
@@ -113,4 +101,4 @@ gconstpointer nm_secret_agent_delete_secrets (NMSecretAgent *agent,
NMSecretAgentCallback callback,
gpointer callback_data);
-#endif /* NM_SECRET_AGENT_H */
+#endif /* __NETWORKMANAGER_SECRET_AGENT_H__ */
diff --git a/src/settings/nm-settings-connection.c b/src/settings/nm-settings-connection.c
index d20dbc984..529f4d8f4 100644
--- a/src/settings/nm-settings-connection.c
+++ b/src/settings/nm-settings-connection.c
@@ -15,32 +15,29 @@
* 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 2008 - 2013 Red Hat, Inc.
+ * Copyright 2008 Novell, Inc.
+ * Copyright 2008 - 2014 Red Hat, Inc.
*/
#include "config.h"
#include <string.h>
-#include <netinet/ether.h>
-#include <NetworkManager.h>
+#include <nm-dbus-interface.h>
#include <dbus/dbus-glib-lowlevel.h>
-#include <nm-setting-connection.h>
-#include <nm-setting-vpn.h>
-#include <nm-setting-wireless.h>
-#include <nm-utils.h>
#include "nm-settings-connection.h"
#include "nm-session-monitor.h"
#include "nm-dbus-manager.h"
-#include "nm-settings-error.h"
#include "nm-dbus-glib-types.h"
#include "nm-logging.h"
-#include "nm-manager-auth.h"
+#include "nm-auth-utils.h"
+#include "nm-auth-subject.h"
#include "nm-agent-manager.h"
#include "NetworkManagerUtils.h"
#include "nm-properties-changed-signal.h"
+#include "nm-core-internal.h"
+#include "nm-glib-compat.h"
#define SETTINGS_TIMESTAMPS_FILE NMSTATEDIR "/timestamps"
#define SETTINGS_SEEN_BSSIDS_FILE NMSTATEDIR "/seen-bssids"
@@ -66,9 +63,16 @@ static void impl_settings_connection_get_secrets (NMSettingsConnection *connecti
const gchar *setting_name,
DBusGMethodInvocation *context);
+static void impl_settings_connection_clear_secrets (NMSettingsConnection *connection,
+ DBusGMethodInvocation *context);
+
#include "nm-settings-connection-glue.h"
-G_DEFINE_TYPE (NMSettingsConnection, nm_settings_connection, NM_TYPE_CONNECTION)
+static void nm_settings_connection_connection_interface_init (NMConnectionInterface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (NMSettingsConnection, nm_settings_connection, G_TYPE_OBJECT,
+ G_IMPLEMENT_INTERFACE (NM_TYPE_CONNECTION, nm_settings_connection_connection_interface_init)
+ )
#define NM_SETTINGS_CONNECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
NM_TYPE_SETTINGS_CONNECTION, \
@@ -78,6 +82,7 @@ enum {
PROP_0 = 0,
PROP_VISIBLE,
PROP_UNSAVED,
+ PROP_FLAGS,
};
enum {
@@ -89,21 +94,11 @@ enum {
static guint signals[LAST_SIGNAL] = { 0 };
typedef struct {
- gboolean disposed;
-
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;
+ NMSettingsConnectionFlags flags;
guint updated_idle_id;
@@ -146,6 +141,7 @@ typedef gboolean (*ForEachSecretFunc) (GHashTableIter *iter,
static void
for_each_secret (NMConnection *connection,
GHashTable *secrets,
+ gboolean remove_non_secrets,
ForEachSecretFunc callback,
gpointer callback_data)
{
@@ -169,6 +165,8 @@ for_each_secret (NMConnection *connection,
* each time.
*/
+ g_return_if_fail (callback);
+
/* Walk through the list of setting hashes */
g_hash_table_iter_init (&iter, secrets);
while (g_hash_table_iter_next (&iter, (gpointer) &setting_name, (gpointer) &setting_hash)) {
@@ -177,6 +175,9 @@ for_each_secret (NMConnection *connection,
const char *secret_name;
GValue *val;
+ if (g_hash_table_size (setting_hash) == 0)
+ continue;
+
/* Get the actual NMSetting from the connection so we can get secret flags
* from the connection data, since flags aren't secrets. What we're
* iterating here is just the secrets, not a whole connection.
@@ -205,7 +206,11 @@ for_each_secret (NMConnection *connection,
return;
}
} else {
- nm_setting_get_secret_flags (setting, secret_name, &secret_flags, NULL);
+ if (!nm_setting_get_secret_flags (setting, secret_name, &secret_flags, NULL)) {
+ if (remove_non_secrets)
+ g_hash_table_iter_remove (&secret_iter);
+ continue;
+ }
if (callback (&secret_iter, secret_flags, callback_data) == FALSE)
return;
}
@@ -355,7 +360,7 @@ update_system_secrets_cache (NMSettingsConnection *self)
if (priv->system_secrets)
g_object_unref (priv->system_secrets);
- priv->system_secrets = nm_connection_duplicate (NM_CONNECTION (self));
+ priv->system_secrets = nm_simple_connection_new_clone (NM_CONNECTION (self));
/* Clear out non-system-owned and not-saved secrets */
nm_connection_clear_secrets_with_flags (priv->system_secrets,
@@ -371,7 +376,7 @@ update_agent_secrets_cache (NMSettingsConnection *self, NMConnection *new)
if (priv->agent_secrets)
g_object_unref (priv->agent_secrets);
- priv->agent_secrets = nm_connection_duplicate (new ? new : NM_CONNECTION (self));
+ priv->agent_secrets = nm_simple_connection_new_clone (new ? new : NM_CONNECTION (self));
/* Clear out non-system-owned secrets */
nm_connection_clear_secrets_with_flags (priv->agent_secrets,
@@ -403,14 +408,17 @@ emit_updated (NMSettingsConnection *self)
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;
+ NMSettingsConnectionFlags flags = nm_settings_connection_get_flags (self);
- g_object_notify (G_OBJECT (self), NM_SETTINGS_CONNECTION_UNSAVED);
+ if (NM_FLAGS_HAS (flags, NM_SETTINGS_CONNECTION_FLAGS_UNSAVED) != !!now_unsaved) {
+ if (now_unsaved)
+ flags |= NM_SETTINGS_CONNECTION_FLAGS_UNSAVED;
+ else {
+ flags &= ~(NM_SETTINGS_CONNECTION_FLAGS_UNSAVED |
+ NM_SETTINGS_CONNECTION_FLAGS_NM_GENERATED |
+ NM_SETTINGS_CONNECTION_FLAGS_NM_GENERATED_ASSUMED);
+ }
+ nm_settings_connection_set_flags_all (self, flags);
}
}
@@ -437,7 +445,6 @@ nm_settings_connection_replace_settings (NMSettingsConnection *self,
GError **error)
{
NMSettingsConnectionPrivate *priv;
- GHashTable *hash = NULL;
gboolean success = FALSE;
g_return_val_if_fail (NM_IS_SETTINGS_CONNECTION (self), FALSE);
@@ -445,8 +452,7 @@ nm_settings_connection_replace_settings (NMSettingsConnection *self,
priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self);
- nm_utils_normalize_connection (new_connection, TRUE);
- if (!nm_connection_verify (new_connection, error))
+ if (!nm_connection_normalize (new_connection, NULL, NULL, error))
return FALSE;
/* Do nothing if there's nothing to update */
@@ -461,37 +467,40 @@ nm_settings_connection_replace_settings (NMSettingsConnection *self,
*/
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;
+ nm_utils_log_connection_diff (new_connection, NM_CONNECTION (self), LOGL_DEBUG, LOGD_CORE, "update connection", "++ ");
- /* Cache the just-updated system secrets in case something calls
- * nm_connection_clear_secrets() and clears them.
- */
- update_system_secrets_cache (self);
- success = TRUE;
+ nm_connection_replace_settings_from_connection (NM_CONNECTION (self), new_connection);
+ nm_settings_connection_set_flags (self,
+ NM_SETTINGS_CONNECTION_FLAGS_NM_GENERATED | NM_SETTINGS_CONNECTION_FLAGS_NM_GENERATED_ASSUMED,
+ FALSE);
- /* Add agent and always-ask secrets back; they won't necessarily be
- * in the replacement connection data if it was eg reread from disk.
- */
- if (priv->agent_secrets) {
- hash = nm_connection_to_hash (priv->agent_secrets, NM_SETTING_HASH_FLAG_ONLY_SECRETS);
- if (hash) {
- (void) nm_connection_update_secrets (NM_CONNECTION (self), NULL, hash, NULL);
- g_hash_table_destroy (hash);
- }
+ /* Cache the just-updated system secrets in case something calls
+ * nm_connection_clear_secrets() and clears them.
+ */
+ update_system_secrets_cache (self);
+ success = TRUE;
+
+ /* Add agent and always-ask secrets back; they won't necessarily be
+ * in the replacement connection data if it was eg reread from disk.
+ */
+ if (priv->agent_secrets) {
+ GVariant *dict;
+
+ dict = nm_connection_to_dbus (priv->agent_secrets, NM_CONNECTION_SERIALIZE_ONLY_SECRETS);
+ if (dict) {
+ (void) nm_connection_update_secrets (NM_CONNECTION (self), NULL, dict, NULL);
+ g_variant_unref (dict);
}
+ }
- nm_settings_connection_recheck_visibility (self);
+ 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));
+ /* 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_signal_emit (self, signals[UPDATED_BY_USER], 0);
g_signal_handlers_unblock_by_func (self, G_CALLBACK (changed_cb), GUINT_TO_POINTER (TRUE));
@@ -558,7 +567,7 @@ nm_settings_connection_commit_changes (NMSettingsConnection *connection,
user_data);
} else {
GError *error = g_error_new (NM_SETTINGS_ERROR,
- NM_SETTINGS_ERROR_INTERNAL_ERROR,
+ NM_SETTINGS_ERROR_FAILED,
"%s: %s:%d commit_changes() unimplemented", __func__, __FILE__, __LINE__);
if (callback)
callback (connection, error, user_data);
@@ -579,7 +588,7 @@ nm_settings_connection_delete (NMSettingsConnection *connection,
user_data);
} else {
GError *error = g_error_new (NM_SETTINGS_ERROR,
- NM_SETTINGS_ERROR_INTERNAL_ERROR,
+ NM_SETTINGS_ERROR_FAILED,
"%s: %s:%d delete() unimplemented", __func__, __FILE__, __LINE__);
if (callback)
callback (connection, error, user_data);
@@ -635,7 +644,7 @@ do_delete (NMSettingsConnection *connection,
set_visible (connection, FALSE);
/* Tell agents to remove secrets for this connection */
- for_agents = nm_connection_duplicate (NM_CONNECTION (connection));
+ for_agents = nm_simple_connection_new_clone (NM_CONNECTION (connection));
nm_connection_clear_secrets (for_agents);
nm_agent_manager_delete_secrets (priv->agent_mgr, for_agents);
g_object_unref (for_agents);
@@ -714,7 +723,7 @@ agent_secrets_done_cb (NMAgentManager *manager,
const char *agent_username,
gboolean agent_has_modify,
const char *setting_name,
- NMSettingsGetSecretsFlags flags,
+ NMSecretAgentGetSecretsFlags flags,
GHashTable *secrets,
GError *error,
gpointer user_data,
@@ -726,7 +735,7 @@ agent_secrets_done_cb (NMAgentManager *manager,
NMSettingsConnectionSecretsFunc callback = other_data2;
gpointer callback_data = other_data3;
GError *local = NULL;
- GHashTable *hash;
+ GVariant *dict;
gboolean agent_had_system = FALSE;
if (error) {
@@ -742,7 +751,7 @@ agent_secrets_done_cb (NMAgentManager *manager,
}
if (!nm_connection_get_setting_by_name (NM_CONNECTION (self), setting_name)) {
- local = g_error_new (NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_SETTING,
+ local = g_error_new (NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_SETTING_NOT_FOUND,
"%s.%d - Connection didn't have requested setting '%s'.",
__FILE__, __LINE__, setting_name);
callback (self, call_id, NULL, setting_name, local, callback_data);
@@ -764,9 +773,9 @@ agent_secrets_done_cb (NMAgentManager *manager,
* save those system-owned secrets. If not, discard them and use the
* existing secrets, or fail the connection.
*/
- for_each_secret (NM_CONNECTION (self), secrets, has_system_owned_secrets, &agent_had_system);
+ for_each_secret (NM_CONNECTION (self), secrets, TRUE, has_system_owned_secrets, &agent_had_system);
if (agent_had_system) {
- if (flags == NM_SETTINGS_GET_SECRETS_FLAG_NONE) {
+ if (flags == NM_SECRET_AGENT_GET_SECRETS_FLAG_NONE) {
/* No user interaction was allowed when requesting secrets; the
* agent is being bad. Remove system-owned secrets.
*/
@@ -776,7 +785,7 @@ agent_secrets_done_cb (NMAgentManager *manager,
call_id,
agent_dbus_owner);
- for_each_secret (NM_CONNECTION (self), secrets, clear_nonagent_secrets, NULL);
+ for_each_secret (NM_CONNECTION (self), secrets, FALSE, clear_nonagent_secrets, NULL);
} else if (agent_has_modify == FALSE) {
/* Agent didn't successfully authenticate; clear system-owned secrets
* from the secrets the agent returned.
@@ -786,7 +795,7 @@ agent_secrets_done_cb (NMAgentManager *manager,
setting_name,
call_id);
- for_each_secret (NM_CONNECTION (self), secrets, clear_nonagent_secrets, NULL);
+ for_each_secret (NM_CONNECTION (self), secrets, FALSE, clear_nonagent_secrets, NULL);
}
}
} else {
@@ -804,19 +813,22 @@ agent_secrets_done_cb (NMAgentManager *manager,
/* If no user interaction was allowed, make sure that no "unsaved" secrets
* came back. Unsaved secrets by definition require user interaction.
*/
- if (flags == NM_SETTINGS_GET_SECRETS_FLAG_NONE)
- for_each_secret (NM_CONNECTION (self), secrets, clear_unsaved_secrets, NULL);
+ if (flags == NM_SECRET_AGENT_GET_SECRETS_FLAG_NONE)
+ for_each_secret (NM_CONNECTION (self), secrets, TRUE, clear_unsaved_secrets, NULL);
/* Update the connection with our existing secrets from backing storage */
nm_connection_clear_secrets (NM_CONNECTION (self));
- hash = nm_connection_to_hash (priv->system_secrets, NM_SETTING_HASH_FLAG_ONLY_SECRETS);
- if (!hash || nm_connection_update_secrets (NM_CONNECTION (self), setting_name, hash, &local)) {
+ dict = nm_connection_to_dbus (priv->system_secrets, NM_CONNECTION_SERIALIZE_ONLY_SECRETS);
+ if (!dict || nm_connection_update_secrets (NM_CONNECTION (self), setting_name, dict, &local)) {
+ GVariant *secrets_dict;
+
/* Update the connection with the agent's secrets; by this point if any
* system-owned secrets exist in 'secrets' the agent that provided them
* will have been authenticated, so those secrets can replace the existing
* system secrets.
*/
- if (nm_connection_update_secrets (NM_CONNECTION (self), setting_name, secrets, &local)) {
+ secrets_dict = nm_utils_connection_hash_to_dict (secrets);
+ if (nm_connection_update_secrets (NM_CONNECTION (self), setting_name, secrets_dict, &local)) {
/* Now that all secrets are updated, copy and cache new secrets,
* then save them to backing storage.
*/
@@ -849,6 +861,7 @@ agent_secrets_done_cb (NMAgentManager *manager,
local ? local->code : -1,
(local && local->message) ? local->message : "(unknown)");
}
+ g_variant_unref (secrets_dict);
} else {
nm_log_dbg (LOGD_SETTINGS, "(%s/%s:%u) failed to update with existing secrets: (%d) %s",
nm_connection_get_uuid (NM_CONNECTION (self)),
@@ -860,8 +873,8 @@ agent_secrets_done_cb (NMAgentManager *manager,
callback (self, call_id, agent_username, setting_name, local, callback_data);
g_clear_error (&local);
- if (hash)
- g_hash_table_destroy (hash);
+ if (dict)
+ g_variant_unref (dict);
}
/**
@@ -884,14 +897,15 @@ guint32
nm_settings_connection_get_secrets (NMSettingsConnection *self,
NMAuthSubject *subject,
const char *setting_name,
- NMSettingsGetSecretsFlags flags,
+ NMSecretAgentGetSecretsFlags flags,
const char **hints,
NMSettingsConnectionSecretsFunc callback,
gpointer callback_data,
GError **error)
{
NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self);
- GHashTable *existing_secrets;
+ GVariant *existing_secrets;
+ GHashTable *existing_secrets_hash;
guint32 call_id = 0;
char *joined_hints = NULL;
@@ -899,7 +913,7 @@ nm_settings_connection_get_secrets (NMSettingsConnection *self,
* will clear secrets on this object's settings.
*/
if (!priv->system_secrets) {
- g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"%s.%d - Internal error; secrets cache invalid.",
__FILE__, __LINE__);
return 0;
@@ -907,17 +921,18 @@ nm_settings_connection_get_secrets (NMSettingsConnection *self,
/* Make sure the request actually requests something we can return */
if (!nm_connection_get_setting_by_name (NM_CONNECTION (self), setting_name)) {
- g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_SETTING,
+ g_set_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_SETTING_NOT_FOUND,
"%s.%d - Connection didn't have requested setting '%s'.",
__FILE__, __LINE__, setting_name);
return 0;
}
- existing_secrets = nm_connection_to_hash (priv->system_secrets, NM_SETTING_HASH_FLAG_ONLY_SECRETS);
+ existing_secrets = nm_connection_to_dbus (priv->system_secrets, NM_CONNECTION_SERIALIZE_ONLY_SECRETS);
+ existing_secrets_hash = nm_utils_connection_dict_to_hash (existing_secrets);
call_id = nm_agent_manager_get_secrets (priv->agent_mgr,
NM_CONNECTION (self),
subject,
- existing_secrets,
+ existing_secrets_hash,
setting_name,
flags,
hints,
@@ -925,8 +940,10 @@ nm_settings_connection_get_secrets (NMSettingsConnection *self,
self,
callback,
callback_data);
+ if (existing_secrets_hash)
+ g_hash_table_unref (existing_secrets_hash);
if (existing_secrets)
- g_hash_table_unref (existing_secrets);
+ g_variant_unref (existing_secrets);
if (nm_logging_enabled (LOGL_DEBUG, LOGD_SETTINGS)) {
if (hints)
@@ -989,7 +1006,7 @@ pk_auth_cb (NMAuthChain *chain,
/* If our NMSettingsConnection is already gone, do nothing */
if (chain_error) {
error = g_error_new (NM_SETTINGS_ERROR,
- NM_SETTINGS_ERROR_GENERAL,
+ NM_SETTINGS_ERROR_FAILED,
"Error checking authorization: %s",
chain_error->message ? chain_error->message : "(unknown)");
} else if (result != NM_AUTH_CALL_RESULT_YES) {
@@ -1021,7 +1038,7 @@ _new_auth_subject (DBusGMethodInvocation *context, GError **error)
{
NMAuthSubject *subject;
- subject = nm_auth_subject_new_from_context (context);
+ subject = nm_auth_subject_new_unix_process_from_context (context);
if (!subject) {
g_set_error_literal (error,
NM_SETTINGS_ERROR,
@@ -1049,10 +1066,10 @@ auth_start (NMSettingsConnection *self,
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)) {
+ if (!nm_auth_is_subject_in_acl (NM_CONNECTION (self),
+ priv->session_monitor,
+ subject,
+ &error_desc)) {
error = g_error_new_literal (NM_SETTINGS_ERROR,
NM_SETTINGS_ERROR_PERMISSION_DENIED,
error_desc);
@@ -1131,14 +1148,15 @@ get_settings_auth_cb (NMSettingsConnection *self,
if (error)
dbus_g_method_return_error (context, error);
else {
- GHashTable *settings;
+ GVariant *settings;
+ GHashTable *settings_hash;
NMConnection *dupl_con;
NMSettingConnection *s_con;
NMSettingWireless *s_wifi;
guint64 timestamp = 0;
- GSList *bssid_list;
+ char **bssids;
- dupl_con = nm_connection_duplicate (NM_CONNECTION (self));
+ dupl_con = nm_simple_connection_new_clone (NM_CONNECTION (self));
g_assert (dupl_con);
/* Timestamp is not updated in connection's 'timestamp' property,
@@ -1157,33 +1175,22 @@ get_settings_auth_cb (NMSettingsConnection *self,
* from the same reason as timestamp. Thus we put it here to GetSettings()
* return settings too.
*/
- bssid_list = nm_settings_connection_get_seen_bssids (self);
+ bssids = nm_settings_connection_get_seen_bssids (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);
- 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);
- }
+ if (bssids && bssids[0] && s_wifi)
+ g_object_set (s_wifi, NM_SETTING_WIRELESS_SEEN_BSSIDS, bssids, NULL);
+ g_free (bssids);
/* Secrets should *never* be returned by the GetSettings method, they
* get returned by the GetSecrets method which can be better
* protected against leakage of secrets to unprivileged callers.
*/
- settings = nm_connection_to_hash (NM_CONNECTION (dupl_con), NM_SETTING_HASH_FLAG_NO_SECRETS);
+ settings = nm_connection_to_dbus (NM_CONNECTION (dupl_con), NM_CONNECTION_SERIALIZE_NO_SECRETS);
g_assert (settings);
- dbus_g_method_return (context, settings);
- g_hash_table_destroy (settings);
+ settings_hash = nm_utils_connection_dict_to_hash (settings);
+ dbus_g_method_return (context, settings_hash);
+ g_hash_table_destroy (settings_hash);
+ g_variant_unref (settings);
g_object_unref (dupl_con);
}
}
@@ -1214,6 +1221,60 @@ typedef struct {
} UpdateInfo;
static void
+has_some_secrets_cb (NMSetting *setting,
+ const char *key,
+ const GValue *value,
+ GParamFlags flags,
+ gpointer user_data)
+{
+ GParamSpec *pspec;
+
+ if (NM_IS_SETTING_VPN (setting)) {
+ if (nm_setting_vpn_get_num_secrets (NM_SETTING_VPN(setting)))
+ *((gboolean *) user_data) = TRUE;
+ return;
+ }
+
+ pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (G_OBJECT (setting)), key);
+ if (pspec) {
+ if ( (flags & NM_SETTING_PARAM_SECRET)
+ && !g_param_value_defaults (pspec, (GValue *)value))
+ *((gboolean *) user_data) = TRUE;
+ }
+}
+
+static gboolean
+any_secrets_present (NMConnection *connection)
+{
+ gboolean has_secrets = FALSE;
+
+ nm_connection_for_each_setting_value (connection, has_some_secrets_cb, &has_secrets);
+ return has_secrets;
+}
+
+static void
+cached_secrets_to_connection (NMSettingsConnection *self, NMConnection *connection)
+{
+ NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self);
+ GVariant *secrets_dict;
+
+ if (priv->agent_secrets) {
+ secrets_dict = nm_connection_to_dbus (priv->agent_secrets, NM_CONNECTION_SERIALIZE_ONLY_SECRETS);
+ if (secrets_dict) {
+ (void) nm_connection_update_secrets (connection, NULL, secrets_dict, NULL);
+ g_variant_unref (secrets_dict);
+ }
+ }
+ if (priv->system_secrets) {
+ secrets_dict = nm_connection_to_dbus (priv->system_secrets, NM_CONNECTION_SERIALIZE_ONLY_SECRETS);
+ if (secrets_dict) {
+ (void) nm_connection_update_secrets (connection, NULL, secrets_dict, NULL);
+ g_variant_unref (secrets_dict);
+ }
+ }
+}
+
+static void
update_complete (NMSettingsConnection *self,
UpdateInfo *info,
GError *error)
@@ -1243,7 +1304,7 @@ con_update_cb (NMSettingsConnection *self,
* 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.
*/
- for_agent = nm_connection_duplicate (NM_CONNECTION (self));
+ for_agent = nm_simple_connection_new_clone (NM_CONNECTION (self));
nm_connection_clear_secrets_with_flags (for_agent,
secrets_filter_cb,
GUINT_TO_POINTER (NM_SETTING_SECRET_FLAG_AGENT_OWNED));
@@ -1269,11 +1330,19 @@ update_auth_cb (NMSettingsConnection *self,
return;
}
- /* 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 (!any_secrets_present (info->new_settings)) {
+ /* If the new connection has no secrets, we do not want to remove all
+ * secrets, rather we keep all the existing ones. Do that by merging
+ * them in to the new connection.
+ */
+ cached_secrets_to_connection (self, info->new_settings);
+ } else {
+ /* 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,
@@ -1342,7 +1411,10 @@ impl_settings_connection_update_helper (NMSettingsConnection *self,
/* Check if the settings are valid first */
if (new_settings) {
- tmp = nm_connection_new_from_hash (new_settings, &error);
+ GVariant *new_settings_dict = nm_utils_connection_hash_to_dict (new_settings);
+
+ tmp = nm_simple_connection_new_from_dbus (new_settings_dict, &error);
+ g_variant_unref (new_settings_dict);
if (!tmp) {
g_assert (error);
goto error;
@@ -1357,10 +1429,10 @@ impl_settings_connection_update_helper (NMSettingsConnection *self,
* that's sending the update request. You can't make a connection
* invisible to yourself.
*/
- if (!nm_auth_uid_in_acl (tmp ? tmp : NM_CONNECTION (self),
- priv->session_monitor,
- nm_auth_subject_get_uid (subject),
- &error_desc)) {
+ if (!nm_auth_is_subject_in_acl (tmp ? tmp : NM_CONNECTION (self),
+ priv->session_monitor,
+ subject,
+ &error_desc)) {
error = g_error_new_literal (NM_SETTINGS_ERROR,
NM_SETTINGS_ERROR_PERMISSION_DENIED,
error_desc);
@@ -1411,7 +1483,7 @@ 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)
+ if (nm_settings_connection_get_unsaved (self))
impl_settings_connection_update_helper (self, NULL, context, TRUE);
else
dbus_g_method_return (context);
@@ -1497,6 +1569,7 @@ dbus_get_agent_secrets_cb (NMSettingsConnection *self,
{
NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self);
DBusGMethodInvocation *context = user_data;
+ GVariant *dict;
GHashTable *hash;
priv->reqs = g_slist_remove (priv->reqs, GUINT_TO_POINTER (call_id));
@@ -1509,20 +1582,24 @@ dbus_get_agent_secrets_cb (NMSettingsConnection *self,
* secrets from backing storage and those returned from the agent
* by the time we get here.
*/
- hash = nm_connection_to_hash (NM_CONNECTION (self), NM_SETTING_HASH_FLAG_ONLY_SECRETS);
- if (!hash)
+ dict = nm_connection_to_dbus (NM_CONNECTION (self), NM_CONNECTION_SERIALIZE_ONLY_SECRETS);
+ if (dict)
+ hash = nm_utils_connection_dict_to_hash (dict);
+ else
hash = g_hash_table_new (NULL, NULL);
dbus_g_method_return (context, hash);
g_hash_table_destroy (hash);
+ if (dict)
+ g_variant_unref (dict);
}
}
static void
-dbus_secrets_auth_cb (NMSettingsConnection *self,
- DBusGMethodInvocation *context,
- NMAuthSubject *subject,
- GError *error,
- gpointer user_data)
+dbus_get_secrets_auth_cb (NMSettingsConnection *self,
+ DBusGMethodInvocation *context,
+ NMAuthSubject *subject,
+ GError *error,
+ gpointer user_data)
{
NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self);
char *setting_name = user_data;
@@ -1533,7 +1610,8 @@ dbus_secrets_auth_cb (NMSettingsConnection *self,
call_id = nm_settings_connection_get_secrets (self,
subject,
setting_name,
- NM_SETTINGS_GET_SECRETS_FLAG_USER_REQUESTED,
+ NM_SECRET_AGENT_GET_SECRETS_FLAG_USER_REQUESTED
+ | NM_SECRET_AGENT_GET_SECRETS_FLAG_NO_ERRORS,
NULL,
dbus_get_agent_secrets_cb,
context,
@@ -1566,7 +1644,7 @@ impl_settings_connection_get_secrets (NMSettingsConnection *self,
context,
subject,
get_modify_permission_basic (self),
- dbus_secrets_auth_cb,
+ dbus_get_secrets_auth_cb,
g_strdup (setting_name));
g_object_unref (subject);
} else {
@@ -1575,6 +1653,67 @@ impl_settings_connection_get_secrets (NMSettingsConnection *self,
}
}
+static void
+clear_secrets_cb (NMSettingsConnection *self,
+ GError *error,
+ gpointer user_data)
+{
+ DBusGMethodInvocation *context = (DBusGMethodInvocation *) user_data;
+
+ if (error)
+ dbus_g_method_return_error (context, error);
+ else
+ dbus_g_method_return (context);
+}
+
+static void
+dbus_clear_secrets_auth_cb (NMSettingsConnection *self,
+ DBusGMethodInvocation *context,
+ NMAuthSubject *subject,
+ GError *error,
+ gpointer user_data)
+{
+ NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self);
+
+ if (error)
+ dbus_g_method_return_error (context, error);
+ else {
+ /* Clear secrets in connection and caches */
+ nm_connection_clear_secrets (NM_CONNECTION (self));
+ if (priv->system_secrets)
+ nm_connection_clear_secrets (priv->system_secrets);
+ if (priv->agent_secrets)
+ nm_connection_clear_secrets (priv->agent_secrets);
+
+ /* Tell agents to remove secrets for this connection */
+ nm_agent_manager_delete_secrets (priv->agent_mgr, NM_CONNECTION (self));
+
+ nm_settings_connection_commit_changes (self, clear_secrets_cb, context);
+ }
+}
+
+static void
+impl_settings_connection_clear_secrets (NMSettingsConnection *self,
+ DBusGMethodInvocation *context)
+{
+ NMAuthSubject *subject;
+ GError *error = NULL;
+
+ subject = _new_auth_subject (context, &error);
+ if (subject) {
+ auth_start (self,
+ context,
+ subject,
+ get_modify_permission_basic (self),
+ dbus_clear_secrets_auth_cb,
+ NULL);
+ g_object_unref (subject);
+ } else {
+ dbus_g_method_return_error (context, error);
+ g_error_free (error);
+ }
+}
+
/**************************************************************/
void
@@ -1592,11 +1731,57 @@ nm_settings_connection_signal_remove (NMSettingsConnection *self)
gboolean
nm_settings_connection_get_unsaved (NMSettingsConnection *self)
{
- return NM_SETTINGS_CONNECTION_GET_PRIVATE (self)->unsaved;
+ return NM_FLAGS_HAS (nm_settings_connection_get_flags (self), NM_SETTINGS_CONNECTION_FLAGS_UNSAVED);
}
/**************************************************************/
+NMSettingsConnectionFlags
+nm_settings_connection_get_flags (NMSettingsConnection *self)
+{
+ g_return_val_if_fail (NM_IS_SETTINGS_CONNECTION (self), NM_SETTINGS_CONNECTION_FLAGS_NONE);
+
+ return NM_SETTINGS_CONNECTION_GET_PRIVATE (self)->flags;
+}
+
+NMSettingsConnectionFlags
+nm_settings_connection_set_flags (NMSettingsConnection *self, NMSettingsConnectionFlags flags, gboolean set)
+{
+ NMSettingsConnectionFlags new_flags;
+
+ g_return_val_if_fail (NM_IS_SETTINGS_CONNECTION (self), NM_SETTINGS_CONNECTION_FLAGS_NONE);
+ g_return_val_if_fail ((flags & ~NM_SETTINGS_CONNECTION_FLAGS_ALL) == 0, NM_SETTINGS_CONNECTION_FLAGS_NONE);
+
+ new_flags = NM_SETTINGS_CONNECTION_GET_PRIVATE (self)->flags;
+ if (set)
+ new_flags |= flags;
+ else
+ new_flags &= ~flags;
+ return nm_settings_connection_set_flags_all (self, new_flags);
+}
+
+NMSettingsConnectionFlags
+nm_settings_connection_set_flags_all (NMSettingsConnection *self, NMSettingsConnectionFlags flags)
+{
+ NMSettingsConnectionPrivate *priv;
+ NMSettingsConnectionFlags old_flags;
+
+ g_return_val_if_fail (NM_IS_SETTINGS_CONNECTION (self), NM_SETTINGS_CONNECTION_FLAGS_NONE);
+ g_return_val_if_fail ((flags & ~NM_SETTINGS_CONNECTION_FLAGS_ALL) == 0, NM_SETTINGS_CONNECTION_FLAGS_NONE);
+ priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self);
+
+ old_flags = priv->flags;
+ if (old_flags != flags) {
+ priv->flags = flags;
+ g_object_notify (G_OBJECT (self), NM_SETTINGS_CONNECTION_FLAGS);
+ if (NM_FLAGS_HAS (old_flags, NM_SETTINGS_CONNECTION_FLAGS_UNSAVED) != NM_FLAGS_HAS (flags, NM_SETTINGS_CONNECTION_FLAGS_UNSAVED))
+ g_object_notify (G_OBJECT (self), NM_SETTINGS_CONNECTION_UNSAVED);
+ }
+ return old_flags;
+}
+
+/*************************************************************/
+
/**
* nm_settings_connection_get_timestamp:
* @connection: the #NMSettingsConnection
@@ -1714,59 +1899,34 @@ nm_settings_connection_read_and_fill_timestamp (NMSettingsConnection *connection
g_key_file_free (timestamps_file);
}
-static guint
-mac_hash (gconstpointer v)
-{
- const guint8 *p = v;
- guint32 i, h = 5381;
-
- for (i = 0; i < ETH_ALEN; i++)
- h = (h << 5) + h + p[i];
- return h;
-}
-
-static gboolean
-mac_equal (gconstpointer a, gconstpointer b)
-{
- return memcmp (a, b, ETH_ALEN) == 0;
-}
-
-static guint8 *
-mac_dup (const struct ether_addr *old)
-{
- guint8 *new;
-
- g_return_val_if_fail (old != NULL, NULL);
-
- new = g_malloc0 (ETH_ALEN);
- memcpy (new, old, ETH_ALEN);
- return new;
-}
-
/**
* nm_settings_connection_get_seen_bssids:
* @connection: the #NMSettingsConnection
*
* Returns current list of seen BSSIDs for the connection.
*
- * Returns: (transfer full) list of seen BSSIDs (in the standard hex-digits-and-colons notation).
- * The caller is responsible for freeing the list.
+ * Returns: (transfer container) list of seen BSSIDs (in the standard hex-digits-and-colons notation).
+ * The caller is responsible for freeing the list, but not the content.
**/
-GSList *
+char **
nm_settings_connection_get_seen_bssids (NMSettingsConnection *connection)
{
NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (connection);
GHashTableIter iter;
- char *bssid_str;
- GSList *bssid_list = NULL;
+ char **bssids, *bssid;
+ int i;
g_return_val_if_fail (NM_IS_SETTINGS_CONNECTION (connection), NULL);
+ bssids = g_new (char *, g_hash_table_size (priv->seen_bssids) + 1);
+
+ i = 0;
g_hash_table_iter_init (&iter, priv->seen_bssids);
- while (g_hash_table_iter_next (&iter, NULL, (gpointer) &bssid_str))
- bssid_list = g_slist_prepend (bssid_list, g_strdup (bssid_str));
+ while (g_hash_table_iter_next (&iter, NULL, (gpointer) &bssid))
+ bssids[i++] = bssid;
+ bssids[i] = NULL;
- return bssid_list;
+ return bssids;
}
/**
@@ -1778,7 +1938,7 @@ nm_settings_connection_get_seen_bssids (NMSettingsConnection *connection)
**/
gboolean
nm_settings_connection_has_seen_bssid (NMSettingsConnection *connection,
- const struct ether_addr *bssid)
+ const char *bssid)
{
g_return_val_if_fail (NM_IS_SETTINGS_CONNECTION (connection), FALSE);
g_return_val_if_fail (bssid != NULL, FALSE);
@@ -1796,7 +1956,7 @@ nm_settings_connection_has_seen_bssid (NMSettingsConnection *connection,
**/
void
nm_settings_connection_add_seen_bssid (NMSettingsConnection *connection,
- const struct ether_addr *seen_bssid)
+ const char *seen_bssid)
{
NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (connection);
const char *connection_uuid;
@@ -1814,8 +1974,8 @@ nm_settings_connection_add_seen_bssid (NMSettingsConnection *connection,
return; /* Already in the list */
/* 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_hash_table_insert (priv->seen_bssids, mac_dup (seen_bssid), bssid_str);
+ bssid_str = g_strdup (seen_bssid);
+ g_hash_table_insert (priv->seen_bssids, bssid_str, bssid_str);
/* Build up a list of all the BSSIDs in string form */
n = 0;
@@ -1853,19 +2013,6 @@ nm_settings_connection_add_seen_bssid (NMSettingsConnection *connection,
}
}
-static void
-add_seen_bssid_string (NMSettingsConnection *self, const char *bssid)
-{
- struct ether_addr mac;
-
- g_return_if_fail (bssid != NULL);
- if (ether_aton_r (bssid, &mac)) {
- g_hash_table_insert (NM_SETTINGS_CONNECTION_GET_PRIVATE (self)->seen_bssids,
- mac_dup (&mac),
- g_strdup (bssid));
- }
-}
-
/**
* nm_settings_connection_read_and_fill_seen_bssids:
* @connection: the #NMSettingsConnection
@@ -1896,8 +2043,8 @@ nm_settings_connection_read_and_fill_seen_bssids (NMSettingsConnection *connecti
if (tmp_strv) {
g_hash_table_remove_all (priv->seen_bssids);
for (i = 0; i < len; i++)
- add_seen_bssid_string (connection, tmp_strv[i]);
- g_strfreev (tmp_strv);
+ g_hash_table_insert (priv->seen_bssids, tmp_strv[i], tmp_strv[i]);
+ g_free (tmp_strv);
} else {
/* If this connection didn't have an entry in the seen-bssids database,
* maybe this is the first time we've read it in, so populate the
@@ -1907,8 +2054,11 @@ nm_settings_connection_read_and_fill_seen_bssids (NMSettingsConnection *connecti
s_wifi = nm_connection_get_setting_wireless (NM_CONNECTION (connection));
if (s_wifi) {
len = nm_setting_wireless_get_num_seen_bssids (s_wifi);
- for (i = 0; i < len; i++)
- add_seen_bssid_string (connection, nm_setting_wireless_get_seen_bssid (s_wifi, i));
+ for (i = 0; i < len; i++) {
+ char *bssid_dup = g_strdup (nm_setting_wireless_get_seen_bssid (s_wifi, i));
+
+ g_hash_table_insert (priv->seen_bssids, bssid_dup, bssid_dup);
+ }
}
}
}
@@ -1992,30 +2142,28 @@ nm_settings_connection_can_autoconnect (NMSettingsConnection *connection)
* 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.
+ * nm_device_generate_connection() and has not been modified or
+ * saved by the user since then.
*/
gboolean
nm_settings_connection_get_nm_generated (NMSettingsConnection *connection)
{
- return NM_SETTINGS_CONNECTION_GET_PRIVATE (connection)->nm_generated;
+ return NM_FLAGS_HAS (nm_settings_connection_get_flags (connection), NM_SETTINGS_CONNECTION_FLAGS_NM_GENERATED);
}
/**
- * nm_settings_connection_set_nm_generated:
+ * nm_settings_connection_get_nm_generated_assumed:
* @connection: an #NMSettingsConnection
*
- * Sets the "nm-generated" flag on @connection; see
- * nm_settings_connection_get_nm_generated().
+ * Gets the "nm-generated-assumed" flag on @connection.
+ *
+ * The connection is a generated connection especially
+ * generated for connection assumption.
*/
-void
-nm_settings_connection_set_nm_generated (NMSettingsConnection *connection)
+gboolean
+nm_settings_connection_get_nm_generated_assumed (NMSettingsConnection *connection)
{
- NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (connection);
-
- priv->nm_generated = TRUE;
+ return NM_FLAGS_HAS (nm_settings_connection_get_flags (connection), NM_SETTINGS_CONNECTION_FLAGS_NM_GENERATED_ASSUMED);
}
/**************************************************************/
@@ -2035,7 +2183,7 @@ nm_settings_connection_init (NMSettingsConnection *self)
priv->agent_mgr = nm_agent_manager_get ();
- priv->seen_bssids = g_hash_table_new_full (mac_hash, mac_equal, g_free, g_free);
+ priv->seen_bssids = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
priv->autoconnect_retries = AUTOCONNECT_RETRIES_DEFAULT;
priv->autoconnect_blocked_reason = NM_DEVICE_STATE_REASON_NONE;
@@ -2051,40 +2199,42 @@ dispose (GObject *object)
NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self);
GSList *iter;
- if (priv->disposed)
- 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)
- g_object_unref (priv->agent_secrets);
+ /* Disconnect handlers.
+ * changed_cb() has to be disconnected *before* nm_connection_clear_secrets(),
+ * because nm_connection_clear_secrets() emits NM_CONNECTION_CHANGED signal.
+ */
+ g_signal_handlers_disconnect_by_func (self, G_CALLBACK (secrets_cleared_cb), NULL);
+ g_signal_handlers_disconnect_by_func (self, G_CALLBACK (changed_cb), GUINT_TO_POINTER (TRUE));
+
+ nm_connection_clear_secrets (NM_CONNECTION (self));
+ g_clear_object (&priv->system_secrets);
+ g_clear_object (&priv->agent_secrets);
/* Cancel PolicyKit requests */
- for (iter = priv->pending_auths; iter; iter = g_slist_next (iter))
- nm_auth_chain_unref ((NMAuthChain *) iter->data);
- g_slist_free (priv->pending_auths);
+ g_slist_free_full (priv->pending_auths, (GDestroyNotify) nm_auth_chain_unref);
priv->pending_auths = NULL;
/* Cancel in-progress secrets requests */
for (iter = priv->reqs; iter; iter = g_slist_next (iter))
nm_agent_manager_cancel_secrets (priv->agent_mgr, GPOINTER_TO_UINT (iter->data));
g_slist_free (priv->reqs);
+ priv->reqs = NULL;
- g_hash_table_destroy (priv->seen_bssids);
+ g_clear_pointer (&priv->seen_bssids, (GDestroyNotify) g_hash_table_destroy);
set_visible (self, FALSE);
- if (priv->session_changed_id)
+ if (priv->session_changed_id) {
g_signal_handler_disconnect (priv->session_monitor, priv->session_changed_id);
- g_object_unref (priv->agent_mgr);
+ priv->session_changed_id = 0;
+ }
+ g_clear_object (&priv->agent_mgr);
-out:
G_OBJECT_CLASS (nm_settings_connection_parent_class)->dispose (object);
}
@@ -2092,14 +2242,18 @@ static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
- NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (object);
+ NMSettingsConnection *self = NM_SETTINGS_CONNECTION (object);
+ NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self);
switch (prop_id) {
case PROP_VISIBLE:
g_value_set_boolean (value, priv->visible);
break;
case PROP_UNSAVED:
- g_value_set_boolean (value, priv->unsaved);
+ g_value_set_boolean (value, nm_settings_connection_get_unsaved (self));
+ break;
+ case PROP_FLAGS:
+ g_value_set_uint (value, nm_settings_connection_get_flags (self));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -2111,7 +2265,16 @@ static void
set_property (GObject *object, guint prop_id,
const GValue *value, GParamSpec *pspec)
{
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ NMSettingsConnection *self = NM_SETTINGS_CONNECTION (object);
+
+ switch (prop_id) {
+ case PROP_FLAGS:
+ nm_settings_connection_set_flags_all (self, g_value_get_uint (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
}
static void
@@ -2133,21 +2296,26 @@ nm_settings_connection_class_init (NMSettingsConnectionClass *class)
/* Properties */
g_object_class_install_property
(object_class, PROP_VISIBLE,
- g_param_spec_boolean (NM_SETTINGS_CONNECTION_VISIBLE,
- "Visible",
- "Visible",
+ g_param_spec_boolean (NM_SETTINGS_CONNECTION_VISIBLE, "", "",
FALSE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
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.",
+ g_param_spec_boolean (NM_SETTINGS_CONNECTION_UNSAVED, "", "",
FALSE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_FLAGS,
+ g_param_spec_uint (NM_SETTINGS_CONNECTION_FLAGS, "", "",
+ NM_SETTINGS_CONNECTION_FLAGS_NONE,
+ NM_SETTINGS_CONNECTION_FLAGS_ALL,
+ NM_SETTINGS_CONNECTION_FLAGS_NONE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/* Signals */
@@ -2183,3 +2351,9 @@ nm_settings_connection_class_init (NMSettingsConnectionClass *class)
G_TYPE_FROM_CLASS (class),
&dbus_glib_nm_settings_connection_object_info);
}
+
+static void
+nm_settings_connection_connection_interface_init (NMConnectionInterface *iface)
+{
+}
+
diff --git a/src/settings/nm-settings-connection.h b/src/settings/nm-settings-connection.h
index 0c2ca849b..254e927bf 100644
--- a/src/settings/nm-settings-connection.h
+++ b/src/settings/nm-settings-connection.h
@@ -19,14 +19,14 @@
* (C) Copyright 2008 - 2013 Red Hat, Inc.
*/
-#ifndef NM_SETTINGS_CONNECTION_H
-#define NM_SETTINGS_CONNECTION_H
+#ifndef __NETWORKMANAGER_SETTINGS_CONNECTION_H__
+#define __NETWORKMANAGER_SETTINGS_CONNECTION_H__
-#include <nm-connection.h>
-#include "nm-settings-flags.h"
-#include "nm-auth-subject.h"
#include <net/ethernet.h>
+#include <nm-connection.h>
+#include "nm-types.h"
+
G_BEGIN_DECLS
#define NM_TYPE_SETTINGS_CONNECTION (nm_settings_connection_get_type ())
@@ -48,8 +48,35 @@ G_BEGIN_DECLS
/* Properties */
#define NM_SETTINGS_CONNECTION_VISIBLE "visible"
#define NM_SETTINGS_CONNECTION_UNSAVED "unsaved"
+#define NM_SETTINGS_CONNECTION_FLAGS "flags"
+
+
+/**
+ * NMSettingsConnectionFlags:
+ * @NM_SETTINGS_CONNECTION_FLAGS_NONE: no flag set
+ * @NM_SETTINGS_CONNECTION_FLAGS_UNSAVED: the connection is not saved to disk
+ * @NM_SETTINGS_CONNECTION_FLAGS_NM_GENERATED: A connection is "nm-generated" if
+ * it was generated by NetworkManger. If the connection gets modified or saved
+ * by the user, the flag gets cleared. A nm-generated is implicitly unsaved.
+ * @NM_SETTINGS_CONNECTION_FLAGS_NM_GENERATED_ASSUMED: A special kind of "nm-generated"
+ * connection that was specifically created for connection assumption. "nm-generated-assumed"
+ * implies "nm-generated".
+ * @NM_SETTINGS_CONNECTION_FLAGS_ALL: special mask, for all known flags
+ *
+ * #NMSettingsConnection flags.
+ **/
+typedef enum
+{
+ NM_SETTINGS_CONNECTION_FLAGS_NONE = 0x00,
+ NM_SETTINGS_CONNECTION_FLAGS_UNSAVED = 0x01,
+ NM_SETTINGS_CONNECTION_FLAGS_NM_GENERATED = 0x02,
+ NM_SETTINGS_CONNECTION_FLAGS_NM_GENERATED_ASSUMED = 0x04,
+
+ __NM_SETTINGS_CONNECTION_FLAGS_LAST,
+ NM_SETTINGS_CONNECTION_FLAGS_ALL = ((__NM_SETTINGS_CONNECTION_FLAGS_LAST - 1) << 1) - 1,
+} NMSettingsConnectionFlags;
+
-typedef struct _NMSettingsConnection NMSettingsConnection;
typedef struct _NMSettingsConnectionClass NMSettingsConnectionClass;
typedef void (*NMSettingsConnectionCommitFunc) (NMSettingsConnection *connection,
@@ -61,11 +88,11 @@ typedef void (*NMSettingsConnectionDeleteFunc) (NMSettingsConnection *connection
gpointer user_data);
struct _NMSettingsConnection {
- NMConnection parent;
+ GObject parent;
};
struct _NMSettingsConnectionClass {
- NMConnectionClass parent;
+ GObjectClass parent;
/* virtual methods */
void (*commit_changes) (NMSettingsConnection *connection,
@@ -110,7 +137,7 @@ typedef void (*NMSettingsConnectionSecretsFunc) (NMSettingsConnection *connectio
guint32 nm_settings_connection_get_secrets (NMSettingsConnection *connection,
NMAuthSubject *subject,
const char *setting_name,
- NMSettingsGetSecretsFlags flags,
+ NMSecretAgentGetSecretsFlags flags,
const char **hints,
NMSettingsConnectionSecretsFunc callback,
gpointer callback_data,
@@ -130,6 +157,10 @@ void nm_settings_connection_signal_remove (NMSettingsConnection *self);
gboolean nm_settings_connection_get_unsaved (NMSettingsConnection *self);
+NMSettingsConnectionFlags nm_settings_connection_get_flags (NMSettingsConnection *connection);
+NMSettingsConnectionFlags nm_settings_connection_set_flags (NMSettingsConnection *connection, NMSettingsConnectionFlags flags, gboolean set);
+NMSettingsConnectionFlags nm_settings_connection_set_flags_all (NMSettingsConnection *connection, NMSettingsConnectionFlags flags);
+
gboolean nm_settings_connection_get_timestamp (NMSettingsConnection *connection,
guint64 *out_timestamp);
@@ -139,13 +170,13 @@ void nm_settings_connection_update_timestamp (NMSettingsConnection *connection,
void nm_settings_connection_read_and_fill_timestamp (NMSettingsConnection *connection);
-GSList *nm_settings_connection_get_seen_bssids (NMSettingsConnection *connection);
+char **nm_settings_connection_get_seen_bssids (NMSettingsConnection *connection);
gboolean nm_settings_connection_has_seen_bssid (NMSettingsConnection *connection,
- const struct ether_addr *bssid);
+ const char *bssid);
void nm_settings_connection_add_seen_bssid (NMSettingsConnection *connection,
- const struct ether_addr *seen_bssid);
+ const char *seen_bssid);
void nm_settings_connection_read_and_fill_seen_bssids (NMSettingsConnection *connection);
@@ -162,9 +193,9 @@ void nm_settings_connection_set_autoconnect_blocked_reason (NMSettingsConnection
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);
+gboolean nm_settings_connection_get_nm_generated_assumed (NMSettingsConnection *connection);
G_END_DECLS
-#endif /* NM_SETTINGS_CONNECTION_H */
+#endif /* __NETWORKMANAGER_SETTINGS_CONNECTION_H__ */
diff --git a/src/settings/nm-settings-error.h b/src/settings/nm-settings-error.h
deleted file mode 100644
index a2b4cd466..000000000
--- a/src/settings/nm-settings-error.h
+++ /dev/null
@@ -1,53 +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.
- *
- * Copyright (C) 2008 Novell, Inc.
- * Copyright (C) 2008 - 2011 Red Hat, Inc.
- */
-
-#ifndef NM_SETTINGS_ERROR_H
-#define NM_SETTINGS_ERROR_H
-
-#include <glib.h>
-#include <glib-object.h>
-
-typedef enum {
- NM_SETTINGS_ERROR_GENERAL = 0, /*< nick=GeneralError >*/
- NM_SETTINGS_ERROR_INVALID_CONNECTION, /*< nick=InvalidConnection >*/
- NM_SETTINGS_ERROR_READ_ONLY_CONNECTION, /*< nick=ReadOnlyConnection >*/
- NM_SETTINGS_ERROR_INTERNAL_ERROR, /*< nick=InternalError >*/
- NM_SETTINGS_ERROR_SECRETS_UNAVAILABLE, /*< nick=SecretsUnavailable >*/
- 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_ADD_NOT_SUPPORTED, /*< nick=AddNotSupported >*/
- NM_SETTINGS_ERROR_UPDATE_NOT_SUPPORTED, /*< nick=UpdateNotSupported >*/
- NM_SETTINGS_ERROR_DELETE_NOT_SUPPORTED, /*< nick=DeleteNotSupported >*/
- NM_SETTINGS_ERROR_ADD_FAILED, /*< nick=AddFailed >*/
- NM_SETTINGS_ERROR_SAVE_HOSTNAME_NOT_SUPPORTED, /*< nick=SaveHostnameNotSupported >*/
- NM_SETTINGS_ERROR_SAVE_HOSTNAME_FAILED, /*< nick=SaveHostnameFailed >*/
- NM_SETTINGS_ERROR_HOSTNAME_INVALID, /*< nick=HostnameInvalid >*/
- NM_SETTINGS_ERROR_UUID_EXISTS, /*< nick=UuidExists >*/
-} NMSettingsError;
-
-#define NM_SETTINGS_ERROR (nm_settings_error_quark ())
-GQuark nm_settings_error_quark (void);
-
-#define NM_TYPE_SETTINGS_ERROR (nm_settings_error_get_type ())
-GType nm_settings_error_get_type (void);
-
-#endif /* NM_SETTINGS_ERROR_H */
diff --git a/src/settings/nm-settings.c b/src/settings/nm-settings.c
index e90776abe..9ed03f69b 100644
--- a/src/settings/nm-settings.c
+++ b/src/settings/nm-settings.c
@@ -26,13 +26,16 @@
#include "config.h"
#include <unistd.h>
+#include <sys/stat.h>
+#include <errno.h>
#include <string.h>
#include <gmodule.h>
#include <pwd.h>
#include <dbus/dbus.h>
#include <dbus/dbus-glib-lowlevel.h>
-#include <NetworkManager.h>
+#include "gsystem-local-alloc.h"
+#include <nm-dbus-interface.h>
#include <nm-connection.h>
#include <nm-setting-8021x.h>
#include <nm-setting-bluetooth.h>
@@ -52,23 +55,31 @@
#include <nm-setting-wireless-security.h>
#include <nm-setting-bond.h>
#include <nm-utils.h>
+#include "nm-core-internal.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-system-config-interface.h"
#include "nm-logging.h"
#include "nm-dbus-manager.h"
-#include "nm-manager-auth.h"
+#include "nm-auth-utils.h"
+#include "nm-auth-subject.h"
#include "nm-session-monitor.h"
#include "plugins/keyfile/plugin.h"
#include "nm-agent-manager.h"
-#include "nm-settings-utils.h"
#include "nm-connection-provider.h"
#include "nm-config.h"
#include "NetworkManagerUtils.h"
+#define LOG(level, ...) \
+ G_STMT_START { \
+ nm_log ((level), LOGD_CORE, \
+ "settings: " _NM_UTILS_MACRO_FIRST(__VA_ARGS__) \
+ _NM_UTILS_MACRO_REST(__VA_ARGS__)); \
+ } G_STMT_END
+
/* LINKER CRACKROCK */
#define EXPORT(sym) void * __export_##sym = &sym;
@@ -286,7 +297,7 @@ impl_settings_get_connection_by_uuid (NMSettings *self,
goto error;
}
- subject = nm_auth_subject_new_from_context (context);
+ subject = nm_auth_subject_new_unix_process_from_context (context);
if (!subject) {
error = g_error_new_literal (NM_SETTINGS_ERROR,
NM_SETTINGS_ERROR_PERMISSION_DENIED,
@@ -294,10 +305,10 @@ impl_settings_get_connection_by_uuid (NMSettings *self,
goto error;
}
- if (!nm_auth_uid_in_acl (NM_CONNECTION (connection),
- nm_session_monitor_get (),
- nm_auth_subject_get_uid (subject),
- &error_desc)) {
+ if (!nm_auth_is_subject_in_acl (NM_CONNECTION (connection),
+ nm_session_monitor_get (),
+ subject,
+ &error_desc)) {
error = g_error_new_literal (NM_SETTINGS_ERROR,
NM_SETTINGS_ERROR_PERMISSION_DENIED,
error_desc);
@@ -324,17 +335,17 @@ connection_sort (gconstpointer pa, gconstpointer pb)
NMConnection *b = NM_CONNECTION (pb);
NMSettingConnection *con_b;
guint64 ts_a = 0, ts_b = 0;
+ gboolean can_ac_a, can_ac_b;
con_a = nm_connection_get_setting_connection (a);
g_assert (con_a);
con_b = nm_connection_get_setting_connection (b);
g_assert (con_b);
- if (nm_setting_connection_get_autoconnect (con_a) != nm_setting_connection_get_autoconnect (con_b)) {
- if (nm_setting_connection_get_autoconnect (con_a))
- return -1;
- return 1;
- }
+ can_ac_a = !!nm_setting_connection_get_autoconnect (con_a);
+ can_ac_b = !!nm_setting_connection_get_autoconnect (con_b);
+ if (can_ac_a != can_ac_b)
+ return can_ac_a ? -1 : 1;
nm_settings_connection_get_timestamp (NM_SETTINGS_CONNECTION (pa), &ts_a);
nm_settings_connection_get_timestamp (NM_SETTINGS_CONNECTION (pb), &ts_b);
@@ -618,18 +629,24 @@ load_plugins (NMSettings *self, const char **plugins, GError **error)
for (iter = plugins; iter && *iter; iter++) {
GModule *plugin;
- char *full_name, *path;
- const char *pname = *iter;
+ gs_free char *full_name = NULL;
+ gs_free char *path = NULL;
+ gs_free char *pname = NULL;
GObject *obj;
GObject * (*factory_func) (void);
+ struct stat st;
+ int errsv;
+
+ pname = g_strdup (*iter);
+ g_strstrip (pname);
- /* strip leading spaces */
- while (g_ascii_isspace (*pname))
- pname++;
+ if (!*pname)
+ continue;
- /* ifcfg-fedora was renamed ifcfg-rh; handle old configs here */
- if (!strcmp (pname, "ifcfg-fedora"))
- pname = "ifcfg-rh";
+ if (!*pname || strchr (pname, '/')) {
+ LOG (LOGL_WARN, "ignore invalid plugin \"%s\"", pname);
+ continue;
+ }
obj = find_plugin (list, pname);
if (obj)
@@ -647,22 +664,35 @@ load_plugins (NMSettings *self, const char **plugins, GError **error)
full_name = g_strdup_printf ("nm-settings-plugin-%s", pname);
path = g_module_build_path (NMPLUGINDIR, full_name);
+ if (stat (path, &st) != 0) {
+ errsv = errno;
+ LOG (LOGL_WARN, "Could not load plugin '%s' from file '%s': %s", pname, path, strerror (errsv));
+ continue;
+ }
+ if (!S_ISREG (st.st_mode)) {
+ LOG (LOGL_WARN, "Could not load plugin '%s' from file '%s': not a file", pname, path);
+ continue;
+ }
+ if (st.st_uid != 0) {
+ LOG (LOGL_WARN, "Could not load plugin '%s' from file '%s': file must be owned by root", pname, path);
+ continue;
+ }
+ if (st.st_mode & (S_IWGRP | S_IWOTH | S_ISUID)) {
+ LOG (LOGL_WARN, "Could not load plugin '%s' from file '%s': invalid file permissions", pname, path);
+ continue;
+ }
+
plugin = g_module_open (path, G_MODULE_BIND_LOCAL);
if (!plugin) {
- g_set_error (error, 0, 0,
- "Could not load plugin '%s': %s",
- pname, g_module_error ());
- g_free (full_name);
- g_free (path);
- success = FALSE;
- break;
+ LOG (LOGL_WARN, "Could not load plugin '%s' from file '%s': %s",
+ pname, full_name, g_module_error ());
+ continue;
}
- g_free (full_name);
- g_free (path);
+ /* errors after this point are fatal, because we loaded the shared library already. */
if (!g_module_symbol (plugin, "nm_system_config_factory", (gpointer) (&factory_func))) {
- g_set_error (error, 0, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"Could not find plugin '%s' factory function.",
pname);
success = FALSE;
@@ -671,7 +701,7 @@ load_plugins (NMSettings *self, const char **plugins, GError **error)
obj = (*factory_func) ();
if (!obj || !NM_IS_SYSTEM_CONFIG_INTERFACE (obj)) {
- g_set_error (error, 0, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"Plugin '%s' returned invalid system config object.",
pname);
success = FALSE;
@@ -781,7 +811,7 @@ secret_agent_registered (NMAgentManager *agent_mgr,
static void
openconnect_migrate_hack (NMConnection *connection)
{
- NMSettingVPN *s_vpn;
+ NMSettingVpn *s_vpn;
NMSettingSecretFlags flags = NM_SETTING_SECRET_FLAG_NOT_SAVED;
/* Huge hack. There were some openconnect changes that needed to happen
@@ -831,12 +861,9 @@ 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)),
- error->message, error->code);
+ if (!nm_connection_normalize (NM_CONNECTION (connection), NULL, NULL, &error)) {
+ nm_log_warn (LOGD_SETTINGS, "plugin provided invalid connection: %s",
+ error->message);
g_error_free (error);
return;
}
@@ -874,6 +901,8 @@ claim_connection (NMSettings *self,
(gpointer) nm_connection_get_path (NM_CONNECTION (connection)),
g_object_ref (connection));
+ nm_utils_log_connection_diff (NM_CONNECTION (connection), NULL, LOGL_DEBUG, LOGD_CORE, "new connection", "++ ");
+
/* Only emit the individual connection-added signal after connections
* have been initially loaded.
*/
@@ -951,7 +980,7 @@ nm_settings_add_connection (NMSettings *self,
g_clear_error (&add_error);
}
- g_set_error_literal (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_ADD_FAILED,
+ g_set_error_literal (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"No plugin supported adding this connection");
return NULL;
}
@@ -997,7 +1026,7 @@ send_agent_owned_secrets (NMSettings *self,
* as agent-owned secrets are the only ones we send back to be saved.
* Only send secrets to agents of the same UID that called update too.
*/
- for_agent = nm_connection_duplicate (NM_CONNECTION (connection));
+ for_agent = nm_simple_connection_new_clone (NM_CONNECTION (connection));
nm_connection_clear_secrets_with_flags (for_agent,
secrets_filter_cb,
GUINT_TO_POINTER (NM_SETTING_SECRET_FLAG_AGENT_OWNED));
@@ -1033,7 +1062,7 @@ pk_add_cb (NMAuthChain *chain,
if (chain_error) {
error = g_error_new (NM_SETTINGS_ERROR,
- NM_SETTINGS_ERROR_GENERAL,
+ NM_SETTINGS_ERROR_FAILED,
"Error checking authorization: %s",
chain_error->message ? chain_error->message : "(unknown)");
} else if (result != NM_AUTH_CALL_RESULT_YES) {
@@ -1137,12 +1166,12 @@ nm_settings_add_connection_dbus (NMSettings *self,
/* Do any of the plugins support adding? */
if (!get_plugin (self, NM_SYSTEM_CONFIG_INTERFACE_CAP_MODIFY_CONNECTIONS)) {
error = g_error_new_literal (NM_SETTINGS_ERROR,
- NM_SETTINGS_ERROR_ADD_NOT_SUPPORTED,
+ NM_SETTINGS_ERROR_NOT_SUPPORTED,
"None of the registered plugins support add.");
goto done;
}
- subject = nm_auth_subject_new_from_context (context);
+ subject = nm_auth_subject_new_unix_process_from_context (context);
if (!subject) {
error = g_error_new_literal (NM_SETTINGS_ERROR,
NM_SETTINGS_ERROR_PERMISSION_DENIED,
@@ -1153,10 +1182,10 @@ nm_settings_add_connection_dbus (NMSettings *self,
/* 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,
- nm_session_monitor_get (),
- nm_auth_subject_get_uid (subject),
- &error_desc)) {
+ if (!nm_auth_is_subject_in_acl (connection,
+ nm_session_monitor_get (),
+ subject,
+ &error_desc)) {
error = g_error_new_literal (NM_SETTINGS_ERROR,
NM_SETTINGS_ERROR_PERMISSION_DENIED,
error_desc);
@@ -1221,16 +1250,19 @@ impl_settings_add_connection_helper (NMSettings *self,
DBusGMethodInvocation *context)
{
NMConnection *connection;
+ GVariant *dict;
GError *error = NULL;
- connection = nm_connection_new_from_hash (settings, &error);
+ dict = nm_utils_connection_hash_to_dict (settings);
+ connection = nm_simple_connection_new_from_dbus (dict, &error);
+ g_variant_unref (dict);
if (connection) {
nm_settings_add_connection_dbus (self,
- connection,
- save_to_disk,
- context,
- impl_settings_add_connection_add_cb,
- NULL);
+ connection,
+ save_to_disk,
+ context,
+ impl_settings_add_connection_add_cb,
+ NULL);
g_object_unref (connection);
} else {
g_assert (error);
@@ -1358,7 +1390,7 @@ pk_hostname_cb (NMAuthChain *chain,
/* If our NMSettingsConnection is already gone, do nothing */
if (chain_error) {
error = g_error_new (NM_SETTINGS_ERROR,
- NM_SETTINGS_ERROR_GENERAL,
+ NM_SETTINGS_ERROR_FAILED,
"Error checking authorization: %s",
chain_error->message ? chain_error->message : "(unknown)");
} else if (result != NM_AUTH_CALL_RESULT_YES) {
@@ -1373,7 +1405,7 @@ pk_hostname_cb (NMAuthChain *chain,
/* 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,
+ NM_SETTINGS_ERROR_FAILED,
"Saving the hostname failed.");
g_object_get (G_OBJECT (iter->data), NM_SYSTEM_CONFIG_INTERFACE_CAPABILITIES, &caps, NULL);
@@ -1432,7 +1464,7 @@ impl_settings_save_hostname (NMSettings *self,
/* Minimal validation of the hostname */
if (!validate_hostname (hostname)) {
error = g_error_new_literal (NM_SETTINGS_ERROR,
- NM_SETTINGS_ERROR_HOSTNAME_INVALID,
+ NM_SETTINGS_ERROR_INVALID_HOSTNAME,
"The hostname was too long or contained invalid characters.");
goto done;
}
@@ -1440,7 +1472,7 @@ impl_settings_save_hostname (NMSettings *self,
/* Do any of the plugins support setting the hostname? */
if (!get_plugin (self, NM_SYSTEM_CONFIG_INTERFACE_CAP_MODIFY_HOSTNAME)) {
error = g_error_new_literal (NM_SETTINGS_ERROR,
- NM_SETTINGS_ERROR_SAVE_HOSTNAME_NOT_SUPPORTED,
+ NM_SETTINGS_ERROR_NOT_SUPPORTED,
"None of the registered plugins support setting the hostname.");
goto done;
}
@@ -1471,13 +1503,12 @@ have_connection_for_device (NMSettings *self, NMDevice *device)
gpointer data;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
- const GByteArray *setting_mac;
- const guint8 *hwaddr;
- guint hwaddr_len = 0;
+ const char *setting_hwaddr;
+ const char *device_hwaddr;
g_return_val_if_fail (NM_IS_SETTINGS (self), FALSE);
- hwaddr = nm_device_get_hw_address (device, &hwaddr_len);
+ device_hwaddr = nm_device_get_hw_address (device);
/* Find a wired connection locked to the given MAC address, if any */
g_hash_table_iter_init (&iter, priv->connections);
@@ -1505,11 +1536,11 @@ have_connection_for_device (NMSettings *self, NMDevice *device)
g_assert (s_wired != NULL);
- setting_mac = nm_setting_wired_get_mac_address (s_wired);
- if (setting_mac) {
+ setting_hwaddr = nm_setting_wired_get_mac_address (s_wired);
+ if (setting_hwaddr) {
/* A connection mac-locked to this device */
- if (hwaddr_len == setting_mac->len &&
- !memcmp (setting_mac->data, hwaddr, hwaddr_len))
+ if ( device_hwaddr
+ && nm_utils_hwaddr_matches (setting_hwaddr, -1, device_hwaddr, -1))
return TRUE;
} else {
/* A connection that applies to any wired device */
@@ -1580,65 +1611,28 @@ default_wired_clear_tag (NMSettings *self,
g_signal_handlers_disconnect_by_func (connection, G_CALLBACK (default_wired_connection_updated_by_user_cb), self);
if (add_to_no_auto_default)
- nm_config_set_ethernet_no_auto_default (NM_SETTINGS_GET_PRIVATE (self)->config, NM_CONFIG_DEVICE (device));
+ nm_config_set_ethernet_no_auto_default (NM_SETTINGS_GET_PRIVATE (self)->config, device);
}
void
nm_settings_device_added (NMSettings *self, NMDevice *device)
{
- NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (self);
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_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_CONNECTION_TAG)
- || have_connection_for_device (self, device)
- || !nm_config_get_ethernet_can_auto_default (priv->config, NM_CONFIG_DEVICE (device)))
+ || have_connection_for_device (self, device))
return;
- hw_address = nm_device_get_hw_address (device, &len);
- if (!hw_address)
+ connection = nm_device_new_default_connection (device);
+ if (!connection)
return;
- 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);
- 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);
-
- /* 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);
@@ -1769,13 +1763,8 @@ get_connections (NMConnectionProvider *provider)
GSList *list = NULL;
NMSettings *self = NM_SETTINGS (provider);
NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (self);
- GHashTableIter iter;
- NMSettingsConnection *connection;
- g_hash_table_iter_init (&iter, priv->connections);
- while (g_hash_table_iter_next (&iter, NULL, (gpointer) &connection))
- list = g_slist_prepend (list, connection);
- list = g_slist_reverse (list);
+ list = _nm_utils_hash_values_to_slist (priv->connections);
/* Cache the list every call so we can keep it 'const' for callers */
g_slist_free (priv->get_connections_cache);
@@ -1934,35 +1923,31 @@ nm_settings_class_init (NMSettingsClass *class)
g_object_class_install_property
(object_class, PROP_UNMANAGED_SPECS,
- g_param_spec_boxed (NM_SETTINGS_UNMANAGED_SPECS,
- "Unamanged device specs",
- "Unmanaged device specs",
- DBUS_TYPE_G_LIST_OF_STRING,
- G_PARAM_READABLE));
+ g_param_spec_boxed (NM_SETTINGS_UNMANAGED_SPECS, "", "",
+ DBUS_TYPE_G_LIST_OF_STRING,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_HOSTNAME,
- g_param_spec_string (NM_SETTINGS_HOSTNAME,
- "Hostname",
- "Persistent hostname",
+ g_param_spec_string (NM_SETTINGS_HOSTNAME, "", "",
NULL,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_CAN_MODIFY,
- g_param_spec_boolean (NM_SETTINGS_CAN_MODIFY,
- "CanModify",
- "Can modify anything (hostname, connections, etc)",
+ g_param_spec_boolean (NM_SETTINGS_CAN_MODIFY, "", "",
FALSE,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_CONNECTIONS,
- g_param_spec_boxed (NM_SETTINGS_CONNECTIONS,
- "Connections",
- "Connections",
+ g_param_spec_boxed (NM_SETTINGS_CONNECTIONS, "", "",
DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH,
- G_PARAM_READABLE));
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/* signals */
signals[PROPERTIES_CHANGED] =
@@ -2036,28 +2021,11 @@ nm_settings_class_init (NMSettingsClass *class)
G_TYPE_NONE, 1, G_TYPE_OBJECT);
dbus_g_error_domain_register (NM_SETTINGS_ERROR,
- NM_DBUS_IFACE_SETTINGS,
+ NM_DBUS_INTERFACE_SETTINGS,
NM_TYPE_SETTINGS_ERROR);
-
- /* And register all the settings errors with D-Bus */
- dbus_g_error_domain_register (NM_CONNECTION_ERROR, NULL, NM_TYPE_CONNECTION_ERROR);
- dbus_g_error_domain_register (NM_SETTING_802_1X_ERROR, NULL, NM_TYPE_SETTING_802_1X_ERROR);
- dbus_g_error_domain_register (NM_SETTING_BLUETOOTH_ERROR, NULL, NM_TYPE_SETTING_BLUETOOTH_ERROR);
- dbus_g_error_domain_register (NM_SETTING_CDMA_ERROR, NULL, NM_TYPE_SETTING_CDMA_ERROR);
- dbus_g_error_domain_register (NM_SETTING_CONNECTION_ERROR, NULL, NM_TYPE_SETTING_CONNECTION_ERROR);
- dbus_g_error_domain_register (NM_SETTING_GSM_ERROR, NULL, NM_TYPE_SETTING_GSM_ERROR);
- dbus_g_error_domain_register (NM_SETTING_IP4_CONFIG_ERROR, NULL, NM_TYPE_SETTING_IP4_CONFIG_ERROR);
- dbus_g_error_domain_register (NM_SETTING_IP6_CONFIG_ERROR, NULL, NM_TYPE_SETTING_IP6_CONFIG_ERROR);
- dbus_g_error_domain_register (NM_SETTING_OLPC_MESH_ERROR, NULL, NM_TYPE_SETTING_OLPC_MESH_ERROR);
- dbus_g_error_domain_register (NM_SETTING_PPP_ERROR, NULL, NM_TYPE_SETTING_PPP_ERROR);
- dbus_g_error_domain_register (NM_SETTING_PPPOE_ERROR, NULL, NM_TYPE_SETTING_PPPOE_ERROR);
- dbus_g_error_domain_register (NM_SETTING_SERIAL_ERROR, NULL, NM_TYPE_SETTING_SERIAL_ERROR);
- dbus_g_error_domain_register (NM_SETTING_ADSL_ERROR, NULL, NM_TYPE_SETTING_ADSL_ERROR);
- dbus_g_error_domain_register (NM_SETTING_VPN_ERROR, NULL, NM_TYPE_SETTING_VPN_ERROR);
- dbus_g_error_domain_register (NM_SETTING_WIRED_ERROR, NULL, NM_TYPE_SETTING_WIRED_ERROR);
- dbus_g_error_domain_register (NM_SETTING_WIRELESS_SECURITY_ERROR, NULL, NM_TYPE_SETTING_WIRELESS_SECURITY_ERROR);
- dbus_g_error_domain_register (NM_SETTING_WIRELESS_ERROR, NULL, NM_TYPE_SETTING_WIRELESS_ERROR);
- dbus_g_error_domain_register (NM_SETTING_ERROR, NULL, NM_TYPE_SETTING_ERROR);
+ dbus_g_error_domain_register (NM_CONNECTION_ERROR,
+ NM_DBUS_INTERFACE_SETTINGS_CONNECTION,
+ NM_TYPE_CONNECTION_ERROR);
dbus_g_object_type_install_info (NM_TYPE_SETTINGS, &dbus_glib_nm_settings_object_info);
diff --git a/src/settings/nm-settings.h b/src/settings/nm-settings.h
index 67b7d0f69..520c4ec34 100644
--- a/src/settings/nm-settings.h
+++ b/src/settings/nm-settings.h
@@ -28,10 +28,7 @@
#include <nm-connection.h>
-#include "nm-settings-connection.h"
-#include "nm-system-config-interface.h"
-#include "nm-device.h"
-#include "nm-secret-agent.h"
+#include "nm-types.h"
#define NM_TYPE_SETTINGS (nm_settings_get_type ())
#define NM_SETTINGS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SETTINGS, NMSettings))
@@ -52,9 +49,9 @@
#define NM_SETTINGS_SIGNAL_CONNECTION_VISIBILITY_CHANGED "connection-visibility-changed"
#define NM_SETTINGS_SIGNAL_AGENT_REGISTERED "agent-registered"
-typedef struct {
+struct _NMSettings {
GObject parent_instance;
-} NMSettings;
+};
typedef struct {
GObjectClass parent_class;
diff --git a/src/settings/nm-system-config-interface.c b/src/settings/nm-system-config-interface.c
index 2249efeba..637c301e3 100644
--- a/src/settings/nm-system-config-interface.c
+++ b/src/settings/nm-system-config-interface.c
@@ -19,7 +19,10 @@
* Copyright (C) 2008 Novell, Inc.
*/
+#include "config.h"
+
#include "nm-system-config-interface.h"
+#include "nm-settings-connection.h"
static void
interface_init (gpointer g_iface)
@@ -33,38 +36,34 @@ interface_init (gpointer g_iface)
/* Properties */
g_object_interface_install_property
(g_iface,
- g_param_spec_string (NM_SYSTEM_CONFIG_INTERFACE_NAME,
- "Name",
- "Plugin name",
- NULL,
- G_PARAM_READABLE));
+ g_param_spec_string (NM_SYSTEM_CONFIG_INTERFACE_NAME, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_interface_install_property
(g_iface,
- g_param_spec_string (NM_SYSTEM_CONFIG_INTERFACE_INFO,
- "Info",
- "Plugin information",
- NULL,
- G_PARAM_READABLE));
+ g_param_spec_string (NM_SYSTEM_CONFIG_INTERFACE_INFO, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_interface_install_property
(g_iface,
- g_param_spec_uint (NM_SYSTEM_CONFIG_INTERFACE_CAPABILITIES,
- "Capabilities",
- "Plugin capabilties",
- NM_SYSTEM_CONFIG_INTERFACE_CAP_NONE,
- ( NM_SYSTEM_CONFIG_INTERFACE_CAP_MODIFY_CONNECTIONS
- | NM_SYSTEM_CONFIG_INTERFACE_CAP_MODIFY_HOSTNAME),
- NM_SYSTEM_CONFIG_INTERFACE_CAP_NONE,
- G_PARAM_READABLE));
+ g_param_spec_uint (NM_SYSTEM_CONFIG_INTERFACE_CAPABILITIES, "", "",
+ NM_SYSTEM_CONFIG_INTERFACE_CAP_NONE,
+ ( NM_SYSTEM_CONFIG_INTERFACE_CAP_MODIFY_CONNECTIONS
+ | NM_SYSTEM_CONFIG_INTERFACE_CAP_MODIFY_HOSTNAME),
+ NM_SYSTEM_CONFIG_INTERFACE_CAP_NONE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_interface_install_property
(g_iface,
- g_param_spec_string (NM_SYSTEM_CONFIG_INTERFACE_HOSTNAME,
- "Hostname",
- "Configured hostname",
- NULL,
- G_PARAM_READWRITE));
+ g_param_spec_string (NM_SYSTEM_CONFIG_INTERFACE_HOSTNAME, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
/* Signals */
g_signal_new (NM_SYSTEM_CONFIG_INTERFACE_CONNECTION_ADDED,
diff --git a/src/settings/nm-system-config-interface.h b/src/settings/nm-system-config-interface.h
index c04fae2de..144aadbf7 100644
--- a/src/settings/nm-system-config-interface.h
+++ b/src/settings/nm-system-config-interface.h
@@ -19,13 +19,13 @@
* Copyright (C) 2008 Novell, Inc.
*/
-#ifndef NM_SYSTEM_CONFIG_INTERFACE_H
-#define NM_SYSTEM_CONFIG_INTERFACE_H
+#ifndef __NETWORKMANAGER_SYSTEM_CONFIG_INTERFACE_H__
+#define __NETWORKMANAGER_SYSTEM_CONFIG_INTERFACE_H__
#include <glib.h>
#include <glib-object.h>
#include <nm-connection.h>
-#include <nm-settings-connection.h>
+#include "nm-types.h"
G_BEGIN_DECLS
diff --git a/src/settings/plugins/Makefile.am b/src/settings/plugins/Makefile.am
index 41694e7e4..568da7f6a 100644
--- a/src/settings/plugins/Makefile.am
+++ b/src/settings/plugins/Makefile.am
@@ -2,6 +2,10 @@ SUBDIRS=keyfile example
@GNOME_CODE_COVERAGE_RULES@
+if CONFIG_PLUGIN_IBFT
+SUBDIRS+=ibft
+endif
+
if CONFIG_PLUGIN_IFCFG_RH
SUBDIRS+=ifcfg-rh
endif
diff --git a/src/settings/plugins/Makefile.in b/src/settings/plugins/Makefile.in
index 8c7c0bb8d..1e9b0fdde 100644
--- a/src/settings/plugins/Makefile.in
+++ b/src/settings/plugins/Makefile.in
@@ -77,10 +77,11 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-@CONFIG_PLUGIN_IFCFG_RH_TRUE@am__append_1 = ifcfg-rh
-@CONFIG_PLUGIN_IFCFG_SUSE_TRUE@am__append_2 = ifcfg-suse
-@CONFIG_PLUGIN_IFUPDOWN_TRUE@am__append_3 = ifupdown
-@CONFIG_PLUGIN_IFNET_TRUE@am__append_4 = ifnet
+@CONFIG_PLUGIN_IBFT_TRUE@am__append_1 = ibft
+@CONFIG_PLUGIN_IFCFG_RH_TRUE@am__append_2 = ifcfg-rh
+@CONFIG_PLUGIN_IFCFG_SUSE_TRUE@am__append_3 = ifcfg-suse
+@CONFIG_PLUGIN_IFUPDOWN_TRUE@am__append_4 = ifupdown
+@CONFIG_PLUGIN_IFNET_TRUE@am__append_5 = ifnet
subdir = src/settings/plugins
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -157,7 +158,7 @@ am__define_uniq_tagged_files = \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
-DIST_SUBDIRS = keyfile example ifcfg-rh ifcfg-suse ifupdown ifnet
+DIST_SUBDIRS = keyfile example ibft ifcfg-rh ifcfg-suse ifupdown ifnet
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
dir0=`pwd`; \
@@ -193,6 +194,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -316,6 +319,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -335,6 +339,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -361,7 +366,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -441,7 +446,7 @@ 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)
+ $(am__append_3) $(am__append_4) $(am__append_5)
all: all-recursive
.SUFFIXES:
diff --git a/src/settings/plugins/example/Makefile.am b/src/settings/plugins/example/Makefile.am
index 8233a71fd..b98f66ef4 100644
--- a/src/settings/plugins/example/Makefile.am
+++ b/src/settings/plugins/example/Makefile.am
@@ -1,17 +1,14 @@
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 \
+ -I$(top_srcdir)/libnm-core \
+ -I$(top_builddir)/libnm-core \
-DG_LOG_DOMAIN=\""NetworkManager-example"\" \
+ -DNETWORKMANAGER_COMPILATION \
-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
@@ -27,15 +24,9 @@ libnm_settings_plugin_example_la_SOURCES = \
nm-example-connection.h \
plugin.c \
plugin.h \
- errors.c \
common.h \
reader.c \
writer.c
-libnm_settings_plugin_example_la_LIBADD = \
- $(top_builddir)/src/libNetworkManager.la \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(GLIB_LIBS)
-
libnm_settings_plugin_example_la_LDFLAGS = -module -avoid-version
diff --git a/src/settings/plugins/example/Makefile.in b/src/settings/plugins/example/Makefile.in
index 26aa0a603..baa5c6985 100644
--- a/src/settings/plugins/example/Makefile.in
+++ b/src/settings/plugins/example/Makefile.in
@@ -102,13 +102,9 @@ CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
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)
+libnm_settings_plugin_example_la_LIBADD =
am_libnm_settings_plugin_example_la_OBJECTS = \
- nm-example-connection.lo plugin.lo errors.lo reader.lo \
- writer.lo
+ nm-example-connection.lo plugin.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@)
@@ -189,6 +185,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -312,6 +310,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -331,6 +330,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -357,7 +357,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -438,18 +438,15 @@ with_resolvconf = @with_resolvconf@
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 \
+ -I$(top_srcdir)/libnm-core \
+ -I$(top_builddir)/libnm-core \
-DG_LOG_DOMAIN=\""NetworkManager-example"\" \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS) \
- $(POLKIT_CFLAGS) \
-DNMCONFDIR=\"$(nmconfdir)\"
@@ -465,16 +462,10 @@ libnm_settings_plugin_example_la_SOURCES = \
nm-example-connection.h \
plugin.c \
plugin.h \
- errors.c \
common.h \
reader.c \
writer.c
-libnm_settings_plugin_example_la_LIBADD = \
- $(top_builddir)/src/libNetworkManager.la \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(GLIB_LIBS)
-
libnm_settings_plugin_example_la_LDFLAGS = -module -avoid-version
all: all-am
@@ -531,7 +522,6 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@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@
diff --git a/src/settings/plugins/example/common.h b/src/settings/plugins/example/common.h
index ed0be9a7f..cf209fe0a 100644
--- a/src/settings/plugins/example/common.h
+++ b/src/settings/plugins/example/common.h
@@ -33,17 +33,6 @@
#define EXAMPLE_DIR NMCONFDIR "/example-plugin"
-/* Boilerplate stuff for the plugin's error domain. Bits of the code that
- * create new errors in the plugin's domain will create errors of
- * type EXAMPLE_PLUGIN_ERROR like so:
- *
- * error = g_error_new_literal (EXAMPLE_PLUGIN_ERROR,
- * <specific error number>,
- * "This is a really bad error.");
- */
-#define EXAMPLE_PLUGIN_ERROR (example_plugin_error_quark ())
-GQuark example_plugin_error_quark (void);
-
/* Prototypes for the reader/writer functions */
NMConnection *connection_from_file (const char *filename, GError **error);
diff --git a/src/settings/plugins/example/errors.c b/src/settings/plugins/example/errors.c
deleted file mode 100644
index 8181f8a3a..000000000
--- a/src/settings/plugins/example/errors.c
+++ /dev/null
@@ -1,40 +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 2012 Red Hat, Inc.
- */
-
-#include <glib.h>
-#include "common.h"
-
-/* This is boilerplate code for defining the error domain that the plugin may
- * return to NetworkManager for various operations. It just registers a
- * GObject "quark" (a UUID really) for the error which allows glib to keep
- * track of all the different error domains.
- */
-GQuark
-example_plugin_error_quark (void)
-{
- static GQuark error_quark = 0;
-
- if (G_UNLIKELY (error_quark == 0))
- error_quark = g_quark_from_static_string ("example-plugin-error-quark");
-
- return error_quark;
-}
-
-
diff --git a/src/settings/plugins/example/nm-example-connection.c b/src/settings/plugins/example/nm-example-connection.c
index e22268297..2f0b20a08 100644
--- a/src/settings/plugins/example/nm-example-connection.c
+++ b/src/settings/plugins/example/nm-example-connection.c
@@ -18,9 +18,11 @@
* Copyright (C) 2012 Red Hat, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include <glib/gstdio.h>
-#include <NetworkManager.h>
+#include <nm-dbus-interface.h>
#include <nm-setting-connection.h>
#include <nm-utils.h>
@@ -89,7 +91,7 @@ nm_example_connection_new (const char *full_path,
/* Make sure we have a UUID; just a sanity check */
uuid = nm_connection_get_uuid (NM_CONNECTION (object));
if (!uuid) {
- g_set_error (error, EXAMPLE_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Connection in file %s had no UUID", full_path);
g_object_unref (object);
object = NULL;
@@ -165,12 +167,7 @@ nm_example_connection_init (NMExampleConnection *connection)
static void
finalize (GObject *object)
{
- NMExampleConnectionPrivate *priv = NM_EXAMPLE_CONNECTION_GET_PRIVATE (object);
-
- /* Zero out any secrets so we don't leave them in memory */
- nm_connection_clear_secrets (NM_CONNECTION (object));
-
- g_free (priv->path);
+ g_free (NM_EXAMPLE_CONNECTION_GET_PRIVATE (object)->path);
G_OBJECT_CLASS (nm_example_connection_parent_class)->finalize (object);
}
diff --git a/src/settings/plugins/example/nm-example-connection.h b/src/settings/plugins/example/nm-example-connection.h
index 6d57a1ad2..ddbd7ac2d 100644
--- a/src/settings/plugins/example/nm-example-connection.h
+++ b/src/settings/plugins/example/nm-example-connection.h
@@ -18,8 +18,8 @@
* Copyright (C) 2012 Red Hat, Inc.
*/
-#ifndef NM_EXAMPLE_CONNECTION_H
-#define NM_EXAMPLE_CONNECTION_H
+#ifndef __NETWORKMANAGER_EXAMPLE_CONNECTION_H__
+#define __NETWORKMANAGER_EXAMPLE_CONNECTION_H__
#include <nm-settings-connection.h>
@@ -52,4 +52,4 @@ const char *nm_example_connection_get_path (NMExampleConnection *self);
G_END_DECLS
-#endif /* NM_EXAMPLE_CONNECTION_H */
+#endif /* __NETWORKMANAGER_EXAMPLE_CONNECTION_H__ */
diff --git a/src/settings/plugins/example/plugin.c b/src/settings/plugins/example/plugin.c
index eea949460..9945e13b5 100644
--- a/src/settings/plugins/example/plugin.c
+++ b/src/settings/plugins/example/plugin.c
@@ -18,11 +18,11 @@
* Copyright (C) 2012 Red Hat, Inc.
*/
-#include <config.h>
+#include "config.h"
+
#include <sys/stat.h>
#include <unistd.h>
#include <sys/types.h>
-#include <netinet/ether.h>
#include <string.h>
#include <gmodule.h>
@@ -198,11 +198,8 @@ update_connection_settings_commit_cb (NMSettingsConnection *orig, GError *error,
* an error here.
*/
if (error) {
- 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);
+ nm_log_warn (LOGD_SETTINGS, "%s: connection invalid: %s",
+ __func__, error->message);
g_clear_error (&error);
nm_settings_connection_signal_remove (orig);
@@ -560,7 +557,7 @@ get_unmanaged_specs (NMSystemConfigInterface *config)
ids = g_strsplit (str, ";", -1);
for (i = 0; ids[i] != NULL; i++) {
/* Verify unmanaged specification and add it to the list */
- if (!strncmp (ids[i], "mac:", 4) && nm_utils_hwaddr_valid (ids[i] + 4)) {
+ if (!strncmp (ids[i], "mac:", 4) && nm_utils_hwaddr_valid (ids[i] + 4, -1)) {
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]);
diff --git a/src/settings/plugins/example/reader.c b/src/settings/plugins/example/reader.c
index 9a4cecaa1..ee45440a5 100644
--- a/src/settings/plugins/example/reader.c
+++ b/src/settings/plugins/example/reader.c
@@ -18,11 +18,12 @@
* Copyright (C) 2012 Red Hat, Inc.
*/
-#include <config.h>
+#include "config.h"
+
#include <glib.h>
#include <nm-connection.h>
-#include <NetworkManager.h>
+#include <nm-dbus-interface.h>
#include "common.h"
diff --git a/src/settings/plugins/example/writer.c b/src/settings/plugins/example/writer.c
index f0a9ea210..41e5c498d 100644
--- a/src/settings/plugins/example/writer.c
+++ b/src/settings/plugins/example/writer.c
@@ -18,7 +18,8 @@
* Copyright (C) 2012 Red Hat, Inc.
*/
-#include <config.h>
+#include "config.h"
+
#include <glib.h>
#include <nm-connection.h>
diff --git a/src/settings/plugins/ibft/Makefile.am b/src/settings/plugins/ibft/Makefile.am
new file mode 100644
index 000000000..00a5d175f
--- /dev/null
+++ b/src/settings/plugins/ibft/Makefile.am
@@ -0,0 +1,38 @@
+SUBDIRS = . tests
+
+@GNOME_CODE_COVERAGE_RULES@
+
+pkglib_LTLIBRARIES = libnm-settings-plugin-ibft.la
+
+noinst_LTLIBRARIES = libibft-io.la
+
+libibft_io_la_SOURCES = \
+ reader.c \
+ reader.h
+
+AM_CPPFLAGS = \
+ -I$(top_srcdir)/src/ \
+ -I$(top_srcdir)/src/platform \
+ -I$(top_srcdir)/src/settings \
+ -I$(top_srcdir)/include \
+ -I$(top_srcdir)/libnm-core \
+ -I$(top_builddir)/libnm-core \
+ -DNETWORKMANAGER_COMPILATION \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ $(GLIB_CFLAGS) \
+ $(DBUS_CFLAGS) \
+ -DG_LOG_DOMAIN=\""NetworkManager-ibft"\" \
+ -DSYSCONFDIR=\"$(sysconfdir)\" \
+ -DSBINDIR=\"$(sbindir)\"
+
+libnm_settings_plugin_ibft_la_SOURCES = \
+ plugin.c \
+ plugin.h \
+ nm-ibft-connection.c \
+ nm-ibft-connection.h
+
+libnm_settings_plugin_ibft_la_LDFLAGS = -module -avoid-version
+libnm_settings_plugin_ibft_la_LIBADD = libibft-io.la
+
+CLEANFILES = $(BUILT_SOURCES)
+
diff --git a/cli/Makefile.in b/src/settings/plugins/ibft/Makefile.in
index 11a64d425..415961dfc 100644
--- a/cli/Makefile.in
+++ b/src/settings/plugins/ibft/Makefile.in
@@ -13,6 +13,7 @@
# PARTICULAR PURPOSE.
@SET_MAKE@
+
VPATH = @srcdir@
am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
am__make_running_with_option = \
@@ -77,8 +78,9 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-subdir = cli
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
+subdir = src/settings/plugins/ibft
+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 \
@@ -99,6 +101,51 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
+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 = $(noinst_LTLIBRARIES) $(pkglib_LTLIBRARIES)
+libibft_io_la_LIBADD =
+am_libibft_io_la_OBJECTS = reader.lo
+libibft_io_la_OBJECTS = $(am_libibft_io_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_settings_plugin_ibft_la_DEPENDENCIES = libibft-io.la
+am_libnm_settings_plugin_ibft_la_OBJECTS = plugin.lo \
+ nm-ibft-connection.lo
+libnm_settings_plugin_ibft_la_OBJECTS = \
+ $(am_libnm_settings_plugin_ibft_la_OBJECTS)
+libnm_settings_plugin_ibft_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(AM_CFLAGS) $(CFLAGS) \
+ $(libnm_settings_plugin_ibft_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
@@ -111,8 +158,32 @@ 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@ -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 = $(libibft_io_la_SOURCES) \
+ $(libnm_settings_plugin_ibft_la_SOURCES)
+DIST_SOURCES = $(libibft_io_la_SOURCES) \
+ $(libnm_settings_plugin_ibft_la_SOURCES)
RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
ctags-recursive dvi-recursive html-recursive info-recursive \
install-data-recursive install-dvi-recursive \
@@ -189,6 +260,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -312,6 +385,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -331,6 +405,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -357,7 +432,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -436,10 +511,41 @@ with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
with_valgrind = @with_valgrind@
-SUBDIRS = src completion
+SUBDIRS = . tests
+pkglib_LTLIBRARIES = libnm-settings-plugin-ibft.la
+noinst_LTLIBRARIES = libibft-io.la
+libibft_io_la_SOURCES = \
+ reader.c \
+ reader.h
+
+AM_CPPFLAGS = \
+ -I$(top_srcdir)/src/ \
+ -I$(top_srcdir)/src/platform \
+ -I$(top_srcdir)/src/settings \
+ -I$(top_srcdir)/include \
+ -I$(top_srcdir)/libnm-core \
+ -I$(top_builddir)/libnm-core \
+ -DNETWORKMANAGER_COMPILATION \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ $(GLIB_CFLAGS) \
+ $(DBUS_CFLAGS) \
+ -DG_LOG_DOMAIN=\""NetworkManager-ibft"\" \
+ -DSYSCONFDIR=\"$(sysconfdir)\" \
+ -DSBINDIR=\"$(sbindir)\"
+
+libnm_settings_plugin_ibft_la_SOURCES = \
+ plugin.c \
+ plugin.h \
+ nm-ibft-connection.c \
+ nm-ibft-connection.h
+
+libnm_settings_plugin_ibft_la_LDFLAGS = -module -avoid-version
+libnm_settings_plugin_ibft_la_LIBADD = libibft-io.la
+CLEANFILES = $(BUILT_SOURCES)
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 \
@@ -449,9 +555,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu cli/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/settings/plugins/ibft/Makefile'; \
$(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu cli/Makefile
+ $(AUTOMAKE) --gnu src/settings/plugins/ibft/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
@@ -471,6 +577,89 @@ $(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-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`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libibft-io.la: $(libibft_io_la_OBJECTS) $(libibft_io_la_DEPENDENCIES) $(EXTRA_libibft_io_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libibft_io_la_OBJECTS) $(libibft_io_la_LIBADD) $(LIBS)
+
+libnm-settings-plugin-ibft.la: $(libnm_settings_plugin_ibft_la_OBJECTS) $(libnm_settings_plugin_ibft_la_DEPENDENCIES) $(EXTRA_libnm_settings_plugin_ibft_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libnm_settings_plugin_ibft_la_LINK) -rpath $(pkglibdir) $(libnm_settings_plugin_ibft_la_OBJECTS) $(libnm_settings_plugin_ibft_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-ibft-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@
+
+.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 $@ $<
+
mostlyclean-libtool:
-rm -f *.lo
@@ -633,9 +822,12 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-recursive
-all-am: Makefile
+all-am: Makefile $(LTLIBRARIES)
installdirs: installdirs-recursive
installdirs-am:
+ for dir in "$(DESTDIR)$(pkglibdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
@@ -658,6 +850,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)
@@ -668,11 +861,14 @@ 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 \
+ clean-pkglibLTLIBRARIES mostlyclean-am
distclean: distclean-recursive
+ -rm -rf ./$(DEPDIR)
-rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-tags
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
dvi: dvi-recursive
@@ -692,7 +888,7 @@ install-dvi: install-dvi-recursive
install-dvi-am:
-install-exec-am:
+install-exec-am: install-pkglibLTLIBRARIES
install-html: install-html-recursive
@@ -715,12 +911,14 @@ install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-recursive
+ -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
@@ -730,23 +928,28 @@ ps: ps-recursive
ps-am:
-uninstall-am:
+uninstall-am: uninstall-pkglibLTLIBRARIES
.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 \
+ check-am clean clean-generic clean-libtool \
+ clean-noinstLTLIBRARIES 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 \
installdirs-am maintainer-clean maintainer-clean-generic \
- mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
- ps ps-am tags tags-am uninstall uninstall-am
+ mostlyclean mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+ 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.
diff --git a/src/settings/plugins/ibft/nm-ibft-connection.c b/src/settings/plugins/ibft/nm-ibft-connection.c
new file mode 100644
index 000000000..5459a7050
--- /dev/null
+++ b/src/settings/plugins/ibft/nm-ibft-connection.c
@@ -0,0 +1,66 @@
+/* -*- 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.
+ *
+ * Copyright 2014 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <net/ethernet.h>
+#include <netinet/ether.h>
+
+#include <glib/gstdio.h>
+
+#include "nm-ibft-connection.h"
+#include "reader.h"
+
+G_DEFINE_TYPE (NMIbftConnection, nm_ibft_connection, NM_TYPE_SETTINGS_CONNECTION)
+
+NMIbftConnection *
+nm_ibft_connection_new (const GPtrArray *block, GError **error)
+{
+ NMConnection *source;
+ GObject *object;
+
+ source = connection_from_block (block, error);
+ if (!source)
+ return NULL;
+
+ object = g_object_new (NM_TYPE_IBFT_CONNECTION, NULL);
+ /* Update settings with what was read from iscsiadm */
+ if (!nm_settings_connection_replace_settings (NM_SETTINGS_CONNECTION (object),
+ source,
+ FALSE,
+ error))
+ g_clear_object (&object);
+
+ return (NMIbftConnection *) object;
+}
+
+/* GObject */
+
+static void
+nm_ibft_connection_init (NMIbftConnection *connection)
+{
+}
+
+static void
+nm_ibft_connection_class_init (NMIbftConnectionClass *ibft_connection_class)
+{
+}
+
diff --git a/src/settings/plugins/ibft/nm-ibft-connection.h b/src/settings/plugins/ibft/nm-ibft-connection.h
new file mode 100644
index 000000000..4ccebc3ce
--- /dev/null
+++ b/src/settings/plugins/ibft/nm-ibft-connection.h
@@ -0,0 +1,50 @@
+/* -*- 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.
+ *
+ * Copyright 2014 Red Hat, Inc.
+ */
+
+#ifndef NM_IBFT_CONNECTION_H
+#define NM_IBFT_CONNECTION_H
+
+G_BEGIN_DECLS
+
+#include <nm-settings-connection.h>
+
+#define NM_TYPE_IBFT_CONNECTION (nm_ibft_connection_get_type ())
+#define NM_IBFT_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_IBFT_CONNECTION, NMIbftConnection))
+#define NM_IBFT_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_IBFT_CONNECTION, NMIbftConnectionClass))
+#define NM_IS_IBFT_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_IBFT_CONNECTION))
+#define NM_IS_IBFT_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_IBFT_CONNECTION))
+#define NM_IBFT_CONNECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_IBFT_CONNECTION, NMIbftConnectionClass))
+
+typedef struct {
+ NMSettingsConnection parent;
+} NMIbftConnection;
+
+typedef struct {
+ NMSettingsConnectionClass parent;
+} NMIbftConnectionClass;
+
+GType nm_ibft_connection_get_type (void);
+
+NMIbftConnection *nm_ibft_connection_new (const GPtrArray *block,
+ GError **error);
+
+G_END_DECLS
+
+#endif /* NM_IBFT_CONNECTION_H */
diff --git a/src/settings/plugins/ibft/plugin.c b/src/settings/plugins/ibft/plugin.c
new file mode 100644
index 000000000..303971e05
--- /dev/null
+++ b/src/settings/plugins/ibft/plugin.c
@@ -0,0 +1,210 @@
+/* -*- 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.
+ *
+ * Copyright 2014 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+
+#include <gmodule.h>
+#include <glib-object.h>
+#include <glib/gi18n.h>
+#include <gio/gio.h>
+
+#include <nm-setting-connection.h>
+
+#include "nm-dbus-glib-types.h"
+#include "nm-system-config-interface.h"
+#include "nm-logging.h"
+#include "NetworkManagerUtils.h"
+
+#include "plugin.h"
+#include "reader.h"
+#include "nm-ibft-connection.h"
+
+static void system_config_interface_init (NMSystemConfigInterface *system_config_interface_class);
+
+G_DEFINE_TYPE_EXTENDED (SCPluginIbft, sc_plugin_ibft, G_TYPE_OBJECT, 0,
+ G_IMPLEMENT_INTERFACE (NM_TYPE_SYSTEM_CONFIG_INTERFACE,
+ system_config_interface_init))
+
+#define SC_PLUGIN_IBFT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), SC_TYPE_PLUGIN_IBFT, SCPluginIbftPrivate))
+
+
+typedef struct {
+ GHashTable *connections; /* uuid::connection */
+ gboolean initialized;
+} SCPluginIbftPrivate;
+
+static void
+read_connections (SCPluginIbft *self)
+{
+ SCPluginIbftPrivate *priv = SC_PLUGIN_IBFT_GET_PRIVATE (self);
+ GSList *blocks = NULL, *iter;
+ GError *error = NULL;
+ NMIbftConnection *connection;
+
+ if (!read_ibft_blocks ("/sbin/iscsiadm", &blocks, &error)) {
+ nm_log_dbg (LOGD_SETTINGS, _("ibft: failed to read iscsiadm records: %s"), error->message);
+ g_error_free (error);
+ return;
+ }
+
+ for (iter = blocks; iter; iter = iter->next) {
+ connection = nm_ibft_connection_new (iter->data, &error);
+ if (connection) {
+ nm_log_info (LOGD_SETTINGS, _("ibft: read connection '%s'"),
+ nm_connection_get_id (NM_CONNECTION (connection)));
+ g_hash_table_insert (priv->connections,
+ g_strdup (nm_connection_get_uuid (NM_CONNECTION (connection))),
+ connection);
+ } else {
+ nm_log_warn (LOGD_SETTINGS, _("ibft: failed to read iscsiadm record: %s"), error->message);
+ g_clear_error (&error);
+ }
+ }
+
+ g_slist_free_full (blocks, (GDestroyNotify) g_ptr_array_unref);
+}
+
+static GSList *
+get_connections (NMSystemConfigInterface *config)
+{
+ SCPluginIbft *self = SC_PLUGIN_IBFT (config);
+ SCPluginIbftPrivate *priv = SC_PLUGIN_IBFT_GET_PRIVATE (self);
+ GSList *list = NULL;
+ GHashTableIter iter;
+ NMIbftConnection *connection;
+
+ if (!priv->initialized) {
+ read_connections (self);
+ priv->initialized = TRUE;
+ }
+
+ 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 list;
+}
+
+static void
+init (NMSystemConfigInterface *config)
+{
+}
+
+static void
+sc_plugin_ibft_init (SCPluginIbft *self)
+{
+ SCPluginIbftPrivate *priv = SC_PLUGIN_IBFT_GET_PRIVATE (self);
+
+ priv->connections = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
+}
+
+static void
+dispose (GObject *object)
+{
+ SCPluginIbft *self = SC_PLUGIN_IBFT (object);
+ SCPluginIbftPrivate *priv = SC_PLUGIN_IBFT_GET_PRIVATE (self);
+
+ if (priv->connections) {
+ g_hash_table_destroy (priv->connections);
+ priv->connections = NULL;
+ }
+
+ G_OBJECT_CLASS (sc_plugin_ibft_parent_class)->dispose (object);
+}
+
+static void
+get_property (GObject *object, guint prop_id,
+ GValue *value, GParamSpec *pspec)
+{
+ switch (prop_id) {
+ case NM_SYSTEM_CONFIG_INTERFACE_PROP_NAME:
+ g_value_set_string (value, "iBFT");
+ break;
+ case NM_SYSTEM_CONFIG_INTERFACE_PROP_INFO:
+ g_value_set_string (value, "(c) 2014 Red Hat, Inc. To report bugs please use the NetworkManager mailing list.");
+ break;
+ case NM_SYSTEM_CONFIG_INTERFACE_PROP_CAPABILITIES:
+ g_value_set_uint (value, NM_SYSTEM_CONFIG_INTERFACE_CAP_NONE);
+ 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)
+{
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+}
+
+static void
+sc_plugin_ibft_class_init (SCPluginIbftClass *req_class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (req_class);
+
+ g_type_class_add_private (req_class, sizeof (SCPluginIbftPrivate));
+
+ object_class->dispose = dispose;
+ object_class->get_property = get_property;
+ object_class->set_property = set_property;
+
+ g_object_class_override_property (object_class,
+ NM_SYSTEM_CONFIG_INTERFACE_PROP_NAME,
+ NM_SYSTEM_CONFIG_INTERFACE_NAME);
+
+ g_object_class_override_property (object_class,
+ NM_SYSTEM_CONFIG_INTERFACE_PROP_INFO,
+ NM_SYSTEM_CONFIG_INTERFACE_INFO);
+
+ g_object_class_override_property (object_class,
+ NM_SYSTEM_CONFIG_INTERFACE_PROP_CAPABILITIES,
+ NM_SYSTEM_CONFIG_INTERFACE_CAPABILITIES);
+
+ g_object_class_override_property (object_class,
+ NM_SYSTEM_CONFIG_INTERFACE_PROP_HOSTNAME,
+ NM_SYSTEM_CONFIG_INTERFACE_HOSTNAME);
+}
+
+static void
+system_config_interface_init (NMSystemConfigInterface *system_config_interface_class)
+{
+ /* interface implementation */
+ system_config_interface_class->get_connections = get_connections;
+ system_config_interface_class->init = init;
+}
+
+G_MODULE_EXPORT GObject *
+nm_system_config_factory (void)
+{
+ static SCPluginIbft *singleton = NULL;
+
+ if (!singleton)
+ singleton = SC_PLUGIN_IBFT (g_object_new (SC_TYPE_PLUGIN_IBFT, NULL));
+ else
+ g_object_ref (singleton);
+
+ return G_OBJECT (singleton);
+}
diff --git a/src/settings/plugins/ibft/plugin.h b/src/settings/plugins/ibft/plugin.h
new file mode 100644
index 000000000..2c811359e
--- /dev/null
+++ b/src/settings/plugins/ibft/plugin.h
@@ -0,0 +1,47 @@
+/* -*- 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.
+ *
+ * Copyright 2014 Red Hat, Inc.
+ */
+
+#ifndef _PLUGIN_H_
+#define _PLUGIN_H_
+
+#include <glib-object.h>
+
+#define SC_TYPE_PLUGIN_IBFT (sc_plugin_ibft_get_type ())
+#define SC_PLUGIN_IBFT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SC_TYPE_PLUGIN_IBFT, SCPluginIbft))
+#define SC_PLUGIN_IBFT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SC_TYPE_PLUGIN_IBFT, SCPluginIbftClass))
+#define SC_IS_PLUGIN_IBFT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SC_TYPE_PLUGIN_IBFT))
+#define SC_IS_PLUGIN_IBFT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SC_TYPE_PLUGIN_IBFT))
+#define SC_PLUGIN_IBFT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SC_TYPE_PLUGIN_IBFT, SCPluginIbftClass))
+
+typedef struct _SCPluginIbft SCPluginIbft;
+typedef struct _SCPluginIbftClass SCPluginIbftClass;
+
+struct _SCPluginIbft {
+ GObject parent;
+};
+
+struct _SCPluginIbftClass {
+ GObjectClass parent;
+};
+
+GType sc_plugin_ibft_get_type (void);
+
+#endif /* _PLUGIN_H_ */
+
diff --git a/src/settings/plugins/ibft/reader.c b/src/settings/plugins/ibft/reader.c
new file mode 100644
index 000000000..066a79f25
--- /dev/null
+++ b/src/settings/plugins/ibft/reader.c
@@ -0,0 +1,558 @@
+/* -*- 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.
+ *
+ * Copyright 2014 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <arpa/inet.h>
+#include <sys/wait.h>
+#include <sys/inotify.h>
+#include <errno.h>
+#include <sys/ioctl.h>
+#include <unistd.h>
+
+#include <glib.h>
+#include <glib/gi18n.h>
+
+#include "nm-core-internal.h"
+#include "nm-platform.h"
+#include "nm-posix-signals.h"
+#include "NetworkManagerUtils.h"
+#include "nm-logging.h"
+
+#include "reader.h"
+
+#define PARSE_WARNING(msg...) nm_log_warn (LOGD_SETTINGS, " " msg)
+
+static void
+iscsiadm_child_setup (gpointer user_data G_GNUC_UNUSED)
+{
+ /* We are in the child process here; set a different process group to
+ * ensure signal isolation between child and parent.
+ */
+ pid_t pid = getpid ();
+ setpgid (pid, pid);
+
+ /*
+ * We blocked signals in main(). We need to restore original signal
+ * mask for iscsiadm here so that it can receive signals.
+ */
+ nm_unblock_posix_signals (NULL);
+}
+
+/* Removes trailing whitespace and whitespace before and immediately after the '=' */
+static char *
+remove_most_whitespace (const char *src)
+{
+ char *s_new, *s2;
+ const char *svalue;
+
+ while (*src && g_ascii_isspace (*src))
+ src++;
+
+ svalue = strchr (src, '=');
+ if (!svalue || svalue == src)
+ return NULL;
+
+ s_new = g_new (char, strlen (src) + 1);
+
+ memcpy (s_new, src, svalue - src);
+ s_new[svalue - src] = '\0';
+ g_strchomp (s_new);
+
+ svalue++;
+ while (*svalue && g_ascii_isspace (*svalue))
+ svalue++;
+
+ s2 = strchr (s_new, '\0');
+ s2[0] = '=';
+ strcpy (++s2, svalue);
+ g_strchomp (s2);
+
+ return s_new;
+}
+
+#define TAG_BEGIN "# BEGIN RECORD"
+#define TAG_END "# END RECORD"
+
+/**
+ * read_ibft_blocks:
+ * @iscsiadm_path: path to iscsiadm program
+ * @out_blocks: on return if successful, a #GSList of #GPtrArray, or %NULL on
+ * failure
+ * @error: location for an error on failure
+ *
+ * Parses iscsiadm output and returns a #GSList of #GPtrArray in the @out_blocks
+ * argument on success, otherwise @out_blocks is set to %NULL. Each #GPtrArray
+ * in @out_blocks contains the lines from an iscsiadm interface block.
+ *
+ * Returns: %TRUE on success, %FALSE on errors
+ */
+gboolean
+read_ibft_blocks (const char *iscsiadm_path,
+ GSList **out_blocks,
+ GError **error)
+{
+ const char *argv[4] = { iscsiadm_path, "-m", "fw", NULL };
+ const char *envp[1] = { NULL };
+ GSList *blocks = NULL;
+ char *out = NULL, *err = NULL;
+ gint status = 0;
+ char **lines = NULL, **iter;
+ GPtrArray *block_lines = NULL;
+ gboolean success = FALSE;
+
+ g_return_val_if_fail (iscsiadm_path != NULL, FALSE);
+ g_return_val_if_fail (out_blocks != NULL && *out_blocks == NULL, FALSE);
+
+ if (!g_spawn_sync ("/", (char **) argv, (char **) envp, 0,
+ iscsiadm_child_setup, NULL, &out, &err, &status, error))
+ goto done;
+
+ if (!WIFEXITED (status)) {
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
+ "iBFT: %s exited abnormally.", iscsiadm_path);
+ goto done;
+ }
+
+ if (WEXITSTATUS (status) != 0) {
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
+ "iBFT: %s exited with error %d. Message: '%s'",
+ iscsiadm_path, WEXITSTATUS (status), err ? err : "(none)");
+ goto done;
+ }
+
+ nm_log_dbg (LOGD_SETTINGS, "iBFT records:\n%s", out);
+
+ lines = g_strsplit_set (out, "\n\r", -1);
+ for (iter = lines; iter && *iter; iter++) {
+ if (!*iter[0])
+ continue;
+
+ if (!g_ascii_strncasecmp (*iter, TAG_BEGIN, STRLEN (TAG_BEGIN))) {
+ if (block_lines) {
+ PARSE_WARNING ("malformed iscsiadm record: missing END RECORD.");
+ g_ptr_array_unref (block_lines);
+ }
+ /* Start new record */
+ block_lines = g_ptr_array_new_full (15, g_free);
+ } else if (!g_ascii_strncasecmp (*iter, TAG_END, STRLEN (TAG_END))) {
+ if (block_lines) {
+ if (block_lines->len)
+ blocks = g_slist_prepend (blocks, block_lines);
+ else
+ g_ptr_array_unref (block_lines);
+ block_lines = NULL;
+ }
+ } else if (block_lines) {
+ char *s = remove_most_whitespace (*iter);
+
+ if (s)
+ g_ptr_array_add (block_lines, s);
+ else {
+ PARSE_WARNING ("malformed iscsiadm record: no = in '%s'.", *iter);
+ g_clear_pointer (&block_lines, g_ptr_array_unref);
+ }
+ }
+ }
+
+ if (block_lines) {
+ PARSE_WARNING ("malformed iscsiadm record: missing # END RECORD.");
+ g_clear_pointer (&block_lines, g_ptr_array_unref);
+ }
+ success = TRUE;
+
+done:
+ if (lines)
+ g_strfreev (lines);
+ g_free (out);
+ if (success)
+ *out_blocks = blocks;
+ else
+ g_slist_free_full (blocks, (GDestroyNotify) g_ptr_array_unref);
+ return success;
+}
+
+#define ISCSI_HWADDR_TAG "iface.hwaddress"
+#define ISCSI_BOOTPROTO_TAG "iface.bootproto"
+#define ISCSI_IPADDR_TAG "iface.ipaddress"
+#define ISCSI_SUBNET_TAG "iface.subnet_mask"
+#define ISCSI_GATEWAY_TAG "iface.gateway"
+#define ISCSI_DNS1_TAG "iface.primary_dns"
+#define ISCSI_DNS2_TAG "iface.secondary_dns"
+#define ISCSI_VLAN_ID_TAG "iface.vlan_id"
+#define ISCSI_IFACE_TAG "iface.net_ifacename"
+
+static const char *
+match_iscsiadm_tag (const char *line, const char *tag)
+{
+ gsize taglen = strlen (tag);
+
+ if (g_ascii_strncasecmp (line, tag, taglen) != 0)
+ return NULL;
+ if (line[taglen] != '=')
+ return NULL;
+ return line + taglen + 1;
+}
+
+/**
+ * parse_ibft_config:
+ * @data: an array of iscsiadm interface block lines
+ * @error: return location for errors
+ * @...: pairs of key (const char *) : location (const char **) indicating the
+ * key to look for and the location to store the retrieved value in
+ *
+ * Parses an iscsiadm interface block into variables requested by the caller.
+ * Callers should verify the returned data is complete and valid. Returned
+ * strings are owned by @data and should not be used after @data is freed.
+ *
+ * Returns: %TRUE if at least , %FALSE on failure
+ */
+gboolean
+parse_ibft_config (const GPtrArray *data, GError **error, ...)
+{
+ gboolean success = FALSE;
+ const char **out_value, *p;
+ va_list ap;
+ const char *key;
+ guint i;
+
+ g_return_val_if_fail (data != NULL, FALSE);
+ g_return_val_if_fail (data->len > 0, FALSE);
+
+ /* Find requested keys and populate return values */
+ va_start (ap, error);
+ while ((key = va_arg (ap, const char *))) {
+ out_value = va_arg (ap, const char **);
+ *out_value = NULL;
+ for (i = 0; i < data->len; i++) {
+ p = match_iscsiadm_tag (g_ptr_array_index (data, i), key);
+ if (p) {
+ *out_value = p;
+ success = TRUE;
+ break;
+ }
+ }
+ }
+ va_end (ap);
+
+ if (!success) {
+ g_set_error_literal (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "iBFT: failed to match at least one iscsiadm block field");
+ }
+ return success;
+}
+
+static gboolean
+ip4_setting_add_from_block (const GPtrArray *block,
+ NMConnection *connection,
+ GError **error)
+{
+ NMSettingIPConfig *s_ip4 = NULL;
+ NMIPAddress *addr;
+ const char *s_method = NULL;
+ const char *s_ipaddr = NULL;
+ const char *s_gateway = NULL;
+ const char *s_dns1 = NULL;
+ const char *s_dns2 = NULL;
+ const char *s_netmask = NULL;
+ guint32 netmask = 0;
+ guint32 prefix;
+
+ g_assert (block);
+
+ if (!parse_ibft_config (block, error,
+ ISCSI_BOOTPROTO_TAG, &s_method,
+ ISCSI_IPADDR_TAG, &s_ipaddr,
+ ISCSI_SUBNET_TAG, &s_netmask,
+ ISCSI_GATEWAY_TAG, &s_gateway,
+ ISCSI_DNS1_TAG, &s_dns1,
+ ISCSI_DNS2_TAG, &s_dns2,
+ NULL))
+ goto error;
+
+ if (!s_method) {
+ g_set_error_literal (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "iBFT: malformed iscsiadm record: missing " ISCSI_BOOTPROTO_TAG);
+ goto error;
+ }
+
+ s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new ();
+
+ if (!g_ascii_strcasecmp (s_method, "dhcp")) {
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
+ goto success;
+ } else if (g_ascii_strcasecmp (s_method, "static") != 0) {
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "iBFT: malformed iscsiadm record: unknown " ISCSI_BOOTPROTO_TAG " '%s'.",
+ s_method);
+ goto error;
+ }
+
+ /* Static configuration stuff */
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL, NULL);
+
+ /* IP address */
+ if (!s_ipaddr || !nm_utils_ipaddr_valid (AF_INET, s_ipaddr)) {
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "iBFT: malformed iscsiadm record: invalid IP address '%s'.",
+ s_ipaddr);
+ goto error;
+ }
+
+ /* Subnet/prefix */
+ if (!s_netmask || inet_pton (AF_INET, s_netmask, &netmask) != 1) {
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "iBFT: malformed iscsiadm record: invalid subnet mask '%s'.",
+ s_netmask);
+ goto error;
+ }
+ prefix = nm_utils_ip4_netmask_to_prefix (netmask);
+
+ if (s_gateway && !nm_utils_ipaddr_valid (AF_INET, s_gateway)) {
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "iBFT: malformed iscsiadm record: invalid IP gateway '%s'.",
+ s_gateway);
+ goto error;
+ }
+
+ if (s_dns1 && !nm_utils_ipaddr_valid (AF_INET, s_dns1)) {
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "iBFT: malformed iscsiadm record: invalid DNS1 address '%s'.",
+ s_dns1);
+ goto error;
+ }
+
+ if (s_dns2 && !nm_utils_ipaddr_valid (AF_INET, s_dns2)) {
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "iBFT: malformed iscsiadm record: invalid DNS2 address '%s'.",
+ s_dns2);
+ goto error;
+ }
+
+ addr = nm_ip_address_new (AF_INET, s_ipaddr, prefix, error);
+ if (!addr) {
+ g_prefix_error (error, "iBFT: malformed iscsiadm record: ");
+ goto error;
+ }
+
+ nm_setting_ip_config_add_address (s_ip4, addr);
+ nm_ip_address_unref (addr);
+
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_GATEWAY, s_gateway, NULL);
+
+ if (s_dns1)
+ nm_setting_ip_config_add_dns (s_ip4, s_dns1);
+ if (s_dns2)
+ nm_setting_ip_config_add_dns (s_ip4, s_dns2);
+
+success:
+ nm_connection_add_setting (connection, NM_SETTING (s_ip4));
+ return TRUE;
+
+error:
+ g_clear_object (&s_ip4);
+ return FALSE;
+}
+
+static gboolean
+connection_setting_add (const GPtrArray *block,
+ NMConnection *connection,
+ const char *type,
+ const char *prefix,
+ const char *iface,
+ GError **error)
+{
+ NMSetting *s_con;
+ char *id, *uuid;
+ const char *s_hwaddr = NULL, *s_ip4addr = NULL, *s_vlanid;
+
+ if (!parse_ibft_config (block, error,
+ ISCSI_VLAN_ID_TAG, &s_vlanid,
+ ISCSI_HWADDR_TAG, &s_hwaddr,
+ ISCSI_IPADDR_TAG, &s_ip4addr,
+ NULL))
+ return FALSE;
+ if (!s_hwaddr) {
+ g_set_error_literal (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "iBFT: malformed iscsiadm record: missing " ISCSI_HWADDR_TAG);
+ return FALSE;
+ }
+
+ id = g_strdup_printf ("iBFT%s%s %s",
+ prefix ? " " : "",
+ prefix ? prefix : "",
+ iface);
+
+ uuid = nm_utils_uuid_generate_from_strings ("ibft",
+ s_hwaddr,
+ s_vlanid ? "V" : "v",
+ s_vlanid ? s_vlanid : "",
+ s_ip4addr ? "A" : "DHCP",
+ s_ip4addr ? s_ip4addr : "",
+ NULL);
+
+ s_con = nm_setting_connection_new ();
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_TYPE, type,
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NM_SETTING_CONNECTION_ID, id,
+ NM_SETTING_CONNECTION_READ_ONLY, TRUE,
+ NULL);
+
+ g_free (uuid);
+ g_free (id);
+
+ nm_connection_add_setting (connection, NM_SETTING (s_con));
+ return TRUE;
+}
+
+static gboolean
+is_ibft_vlan_device (const GPtrArray *block)
+{
+ char *s_vlan_id = NULL;
+
+ if (parse_ibft_config (block, NULL, ISCSI_VLAN_ID_TAG, &s_vlan_id, NULL)) {
+ g_assert (s_vlan_id);
+
+ /* VLAN 0 is normally a valid VLAN ID, but in the iBFT case it
+ * means "no VLAN".
+ */
+ if (nm_utils_ascii_str_to_int64 (s_vlan_id, 10, 1, 4095, -1) != -1)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static gboolean
+vlan_setting_add_from_block (const GPtrArray *block,
+ NMConnection *connection,
+ GError **error)
+{
+ NMSetting *s_vlan = NULL;
+ const char *vlan_id_str = NULL;
+ gint64 vlan_id = -1;
+ gboolean success;
+
+ g_assert (block);
+ g_assert (connection);
+
+ /* This won't fail since this function shouldn't be called unless the
+ * iBFT VLAN ID exists and is > 0.
+ */
+ success = parse_ibft_config (block, NULL, ISCSI_VLAN_ID_TAG, &vlan_id_str, NULL);
+ g_assert (success);
+ g_assert (vlan_id_str);
+
+ /* VLAN 0 is normally a valid VLAN ID, but in the iBFT case it means "no VLAN" */
+ vlan_id = nm_utils_ascii_str_to_int64 (vlan_id_str, 10, 1, 4095, -1);
+ if (vlan_id == -1) {
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "Invalid VLAN_ID '%s'", vlan_id_str);
+ return FALSE;
+ }
+
+ s_vlan = nm_setting_vlan_new ();
+ g_object_set (s_vlan, NM_SETTING_VLAN_ID, (guint32) vlan_id, NULL);
+ nm_connection_add_setting (connection, NM_SETTING (s_vlan));
+
+ return TRUE;
+}
+
+static gboolean
+wired_setting_add_from_block (const GPtrArray *block,
+ NMConnection *connection,
+ GError **error)
+{
+ NMSetting *s_wired = NULL;
+ const char *hwaddr = NULL;
+
+ g_assert (block);
+ g_assert (connection);
+
+ if (!parse_ibft_config (block, NULL, ISCSI_HWADDR_TAG, &hwaddr, NULL)) {
+ g_set_error_literal (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "iBFT: malformed iscsiadm record: missing " ISCSI_HWADDR_TAG);
+ return FALSE;
+ }
+
+ if (!nm_utils_hwaddr_valid (hwaddr, ETH_ALEN)) {
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "iBFT: malformed iscsiadm record: invalid " ISCSI_HWADDR_TAG " '%s'.",
+ hwaddr);
+ return FALSE;
+ }
+
+ s_wired = nm_setting_wired_new ();
+ g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, hwaddr, NULL);
+
+ nm_connection_add_setting (connection, s_wired);
+ return TRUE;
+}
+
+NMConnection *
+connection_from_block (const GPtrArray *block, GError **error)
+{
+ NMConnection *connection = NULL;
+ gboolean is_vlan = FALSE;
+ const char *iface = NULL;
+
+ g_assert (block);
+
+ if (!parse_ibft_config (block, error, ISCSI_IFACE_TAG, &iface, NULL)) {
+ g_set_error_literal (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "iBFT: malformed iscsiadm record: missing " ISCSI_IFACE_TAG);
+ return NULL;
+ }
+
+ connection = nm_simple_connection_new ();
+
+ is_vlan = is_ibft_vlan_device (block);
+ if (is_vlan && !vlan_setting_add_from_block (block, connection, error))
+ goto error;
+
+ /* Always have a wired setting; for VLAN it defines the parent */
+ if (!wired_setting_add_from_block (block, connection, error))
+ goto error;
+
+ if (!ip4_setting_add_from_block (block, connection, error))
+ goto error;
+
+ if (!connection_setting_add (block,
+ connection,
+ is_vlan ? NM_SETTING_VLAN_SETTING_NAME : NM_SETTING_WIRED_SETTING_NAME,
+ is_vlan ? "VLAN" : NULL,
+ iface,
+ error))
+ goto error;
+
+ if (!nm_connection_normalize (connection, NULL, NULL, error))
+ goto error;
+
+ return connection;
+
+error:
+ g_object_unref (connection);
+ return NULL;
+}
+
diff --git a/src/settings/plugins/keyfile/errors.c b/src/settings/plugins/ibft/reader.h
index e2e97690f..0b2f22b65 100644
--- a/src/settings/plugins/keyfile/errors.c
+++ b/src/settings/plugins/ibft/reader.h
@@ -15,21 +15,22 @@
* 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.
+ * Copyright 2014 Red Hat, Inc.
*/
-#include <glib.h>
-#include "common.h"
+#ifndef __READER_H__
+#define __READER_H__
-GQuark
-keyfile_plugin_error_quark (void)
-{
- static GQuark error_quark = 0;
+#include <glib.h>
+#include <nm-connection.h>
- if (G_UNLIKELY (error_quark == 0))
- error_quark = g_quark_from_static_string ("keyfile-plugin-error-quark");
+gboolean read_ibft_blocks (const char *iscsiadm_path,
+ GSList **out_blocks,
+ GError **error);
- return error_quark;
-}
+NMConnection *connection_from_block (const GPtrArray *block, GError **error);
+/* For testcases */
+gboolean parse_ibft_config (const GPtrArray *data, GError **error, ...) G_GNUC_NULL_TERMINATED;
+#endif /* __READER_H__ */
diff --git a/src/settings/plugins/ibft/tests/Makefile.am b/src/settings/plugins/ibft/tests/Makefile.am
new file mode 100644
index 000000000..dd72220a7
--- /dev/null
+++ b/src/settings/plugins/ibft/tests/Makefile.am
@@ -0,0 +1,49 @@
+if ENABLE_TESTS
+
+@GNOME_CODE_COVERAGE_RULES@
+
+AM_CPPFLAGS = \
+ $(GLIB_CFLAGS) \
+ $(CODE_COVERAGE_CFLAGS) \
+ -I$(top_srcdir)/include \
+ -I$(top_srcdir)/libnm-core \
+ -I$(top_builddir)/libnm-core \
+ -I$(top_srcdir)/src/ \
+ -I$(top_srcdir)/src/platform \
+ -I$(top_srcdir)/src/settings \
+ -I$(srcdir)/../ \
+ -DG_LOG_DOMAIN=\""NetworkManager-ibft"\" \
+ -DNETWORKMANAGER_COMPILATION \
+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+ -DTEST_IBFT_DIR=\"$(abs_srcdir)\" \
+ -DTEST_SCRATCH_DIR=\"$(abs_builddir)/\"
+
+AM_LDFLAGS = \
+ $(GLIB_LIBS) \
+ $(DBUS_LIBS) \
+ $(CODE_COVERAGE_LDFLAGS)
+
+noinst_PROGRAMS = test-ibft
+
+test_ibft_SOURCES = \
+ test-ibft.c \
+ ../reader.c
+
+test_ibft_LDADD = \
+ $(top_builddir)/src/libNetworkManager.la
+
+TESTS = test-ibft
+
+endif
+
+EXTRA_DIST = \
+ iscsiadm-test-dhcp \
+ iscsiadm-test-static \
+ iscsiadm-test-bad-ipaddr \
+ iscsiadm-test-bad-gateway \
+ iscsiadm-test-bad-dns1 \
+ iscsiadm-test-bad-dns2 \
+ iscsiadm-test-bad-entry \
+ iscsiadm-test-bad-record \
+ iscsiadm-test-vlan
+
diff --git a/src/settings/tests/Makefile.in b/src/settings/plugins/ibft/tests/Makefile.in
index 7016c27fd..e2f061694 100644
--- a/src/settings/tests/Makefile.in
+++ b/src/settings/plugins/ibft/tests/Makefile.in
@@ -78,9 +78,9 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-noinst_PROGRAMS = test-wired-defname$(EXEEXT)
-TESTS = test-wired-defname$(EXEEXT)
-subdir = src/settings/tests
+@ENABLE_TESTS_TRUE@noinst_PROGRAMS = test-ibft$(EXEEXT)
+@ENABLE_TESTS_TRUE@TESTS = test-ibft$(EXEEXT)
+subdir = src/settings/plugins/ibft/tests
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -104,10 +104,12 @@ CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
PROGRAMS = $(noinst_PROGRAMS)
-am_test_wired_defname_OBJECTS = test-wired-defname.$(OBJEXT)
-test_wired_defname_OBJECTS = $(am_test_wired_defname_OBJECTS)
-test_wired_defname_DEPENDENCIES = \
- $(top_builddir)/src/libNetworkManager.la
+am__test_ibft_SOURCES_DIST = test-ibft.c ../reader.c
+@ENABLE_TESTS_TRUE@am_test_ibft_OBJECTS = test-ibft.$(OBJEXT) \
+@ENABLE_TESTS_TRUE@ reader.$(OBJEXT)
+test_ibft_OBJECTS = $(am_test_ibft_OBJECTS)
+@ENABLE_TESTS_TRUE@test_ibft_DEPENDENCIES = \
+@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
@@ -146,8 +148,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 = $(test_wired_defname_SOURCES)
-DIST_SOURCES = $(test_wired_defname_SOURCES)
+SOURCES = $(test_ibft_SOURCES)
+DIST_SOURCES = $(am__test_ibft_SOURCES_DIST)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -204,6 +206,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -327,6 +331,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -346,6 +351,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -372,7 +378,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -451,22 +457,44 @@ 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 \
- -I$(top_srcdir)/libnm-util \
- -I$(top_srcdir)/src/settings \
- -DG_LOG_DOMAIN=\""NetworkManager"\" \
- $(GLIB_CFLAGS) \
- $(DBUS_CFLAGS)
-
-
-####### wired defname test #######
-test_wired_defname_SOURCES = \
- test-wired-defname.c
-
-test_wired_defname_LDADD = \
- $(top_builddir)/src/libNetworkManager.la
+@ENABLE_TESTS_TRUE@AM_CPPFLAGS = \
+@ENABLE_TESTS_TRUE@ $(GLIB_CFLAGS) \
+@ENABLE_TESTS_TRUE@ $(CODE_COVERAGE_CFLAGS) \
+@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/include \
+@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/libnm-core \
+@ENABLE_TESTS_TRUE@ -I$(top_builddir)/libnm-core \
+@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/src/ \
+@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/src/platform \
+@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/src/settings \
+@ENABLE_TESTS_TRUE@ -I$(srcdir)/../ \
+@ENABLE_TESTS_TRUE@ -DG_LOG_DOMAIN=\""NetworkManager-ibft"\" \
+@ENABLE_TESTS_TRUE@ -DNETWORKMANAGER_COMPILATION \
+@ENABLE_TESTS_TRUE@ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
+@ENABLE_TESTS_TRUE@ -DTEST_IBFT_DIR=\"$(abs_srcdir)\" \
+@ENABLE_TESTS_TRUE@ -DTEST_SCRATCH_DIR=\"$(abs_builddir)/\"
+
+@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_ibft_SOURCES = \
+@ENABLE_TESTS_TRUE@ test-ibft.c \
+@ENABLE_TESTS_TRUE@ ../reader.c
+
+@ENABLE_TESTS_TRUE@test_ibft_LDADD = \
+@ENABLE_TESTS_TRUE@ $(top_builddir)/src/libNetworkManager.la
+
+EXTRA_DIST = \
+ iscsiadm-test-dhcp \
+ iscsiadm-test-static \
+ iscsiadm-test-bad-ipaddr \
+ iscsiadm-test-bad-gateway \
+ iscsiadm-test-bad-dns1 \
+ iscsiadm-test-bad-dns2 \
+ iscsiadm-test-bad-entry \
+ iscsiadm-test-bad-record \
+ iscsiadm-test-vlan
all: all-am
@@ -481,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/settings/tests/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/settings/plugins/ibft/tests/Makefile'; \
$(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu src/settings/tests/Makefile
+ $(AUTOMAKE) --gnu src/settings/plugins/ibft/tests/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
@@ -512,9 +540,9 @@ clean-noinstPROGRAMS:
echo " rm -f" $$list; \
rm -f $$list
-test-wired-defname$(EXEEXT): $(test_wired_defname_OBJECTS) $(test_wired_defname_DEPENDENCIES) $(EXTRA_test_wired_defname_DEPENDENCIES)
- @rm -f test-wired-defname$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(test_wired_defname_OBJECTS) $(test_wired_defname_LDADD) $(LIBS)
+test-ibft$(EXEEXT): $(test_ibft_OBJECTS) $(test_ibft_DEPENDENCIES) $(EXTRA_test_ibft_DEPENDENCIES)
+ @rm -f test-ibft$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_ibft_OBJECTS) $(test_ibft_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -522,7 +550,8 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-wired-defname.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reader.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-ibft.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -545,6 +574,20 @@ 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`
+
mostlyclean-libtool:
-rm -f *.lo
@@ -849,6 +892,8 @@ uninstall-am:
tags tags-am uninstall uninstall-am
+@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.
.NOEXPORT:
diff --git a/src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-bad-dns1 b/src/settings/plugins/ibft/tests/iscsiadm-test-bad-dns1
index 4a6a93822..54f02da63 100755
--- a/src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-bad-dns1
+++ b/src/settings/plugins/ibft/tests/iscsiadm-test-bad-dns1
@@ -10,7 +10,7 @@ iface.subnet_mask = 255.255.252.0
iface.gateway = 192.168.35.254
iface.primary_dns = 10000.500.250.1
iface.secondary_dns = 10.16.255.3
-iface.vlan = 0
+iface.vlan_id = 0
iface.net_ifacename = eth0
node.name = iqn.0.2008-11.com.blahblah:iscsi0
node.conn[0].address = 10.16.52.16
diff --git a/src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-bad-dns2 b/src/settings/plugins/ibft/tests/iscsiadm-test-bad-dns2
index 9bd5839bd..ebd7a9caa 100755
--- a/src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-bad-dns2
+++ b/src/settings/plugins/ibft/tests/iscsiadm-test-bad-dns2
@@ -10,7 +10,7 @@ iface.subnet_mask = 255.255.252.0
iface.gateway = 192.168.35.254
iface.primary_dns = 10.16.255.2
iface.secondary_dns = blah.foo.bar.baz
-iface.vlan = 0
+iface.vlan_id = 0
iface.net_ifacename = eth0
node.name = iqn.0.2008-11.com.blahblah:iscsi0
node.conn[0].address = 10.16.52.16
diff --git a/src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-bad-entry b/src/settings/plugins/ibft/tests/iscsiadm-test-bad-entry
index eba0ec673..4e326048e 100755
--- a/src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-bad-entry
+++ b/src/settings/plugins/ibft/tests/iscsiadm-test-bad-entry
@@ -10,26 +10,11 @@ iface.subnet_mask = 255.255.252.0
iface.gateway = 192.168.35.254
iface.primary_dns = 10.16.255.2
iface.secondary_dns = 10.16.255.3
-iface.vlan = 0
+iface.vlan_id = 0
iface.net_ifacename = eth0
node.name = iqn.0.2008-11.com.blahblah:iscsi0
node.conn[0].address = 10.16.52.16
node.conn[0].port = 3260
node.boot_lun = 00000000
# END RECORD
-# BEGIN RECORD
-iface.initiatorname = iqn.pjones6
-iface.hwaddress = 00:33:21:98:b9:f1
-iface.bootproto = DHCP
-iface.gateway = 10.16.52.254
-iface.primary_dns = 10.16.255.2
-iface.secondary_dns = 10.16.255.3
-iface.vlan = 0
-iface.net_ifacename = eth1
-node.name = iqn.1.2008-11.com.blahblah:iscsi1
-node.conn[0].address = 10.16.52.16
-node.conn[0].port = 3260
-node.boot_lun = 00000000
-# END RECORD
-EOF
diff --git a/src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-bad-gateway b/src/settings/plugins/ibft/tests/iscsiadm-test-bad-gateway
index b3dc74478..5390a6c3d 100755
--- a/src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-bad-gateway
+++ b/src/settings/plugins/ibft/tests/iscsiadm-test-bad-gateway
@@ -5,12 +5,12 @@ cat << EOF
iface.initiatorname = iqn.pjones6
iface.hwaddress = 00:33:21:98:b9:f0
iface.bootproto = STATIC
-iface.ipaddress = aa.bb.cc.dd
+iface.ipaddress = 192.168.32.72
iface.subnet_mask = 255.255.252.0
-iface.gateway = 192.168.35.254
+iface.gateway = bb.cc.dd.ee
iface.primary_dns = 10.16.255.2
iface.secondary_dns = 10.16.255.3
-iface.vlan = 0
+iface.vlan_id = 0
iface.net_ifacename = eth0
node.name = iqn.0.2008-11.com.blahblah:iscsi0
node.conn[0].address = 10.16.52.16
diff --git a/src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-bad-ipaddr b/src/settings/plugins/ibft/tests/iscsiadm-test-bad-ipaddr
index 92f44777b..b41cd1f16 100755
--- a/src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-bad-ipaddr
+++ b/src/settings/plugins/ibft/tests/iscsiadm-test-bad-ipaddr
@@ -5,12 +5,12 @@ cat << EOF
iface.initiatorname = iqn.pjones6
iface.hwaddress = 00:33:21:98:b9:f0
iface.bootproto = STATIC
-iface.ipaddress = 192.168.32.72
+iface.ipaddress = aa.bb.cc.dd
iface.subnet_mask = 255.255.252.0
-iface.gateway = bb.cc.dd.ee
+iface.gateway = 192.168.35.254
iface.primary_dns = 10.16.255.2
iface.secondary_dns = 10.16.255.3
-iface.vlan = 0
+iface.vlan_id = 0
iface.net_ifacename = eth0
node.name = iqn.0.2008-11.com.blahblah:iscsi0
node.conn[0].address = 10.16.52.16
diff --git a/src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-bad-record b/src/settings/plugins/ibft/tests/iscsiadm-test-bad-record
index a2d215fe2..22b34e6f5 100755
--- a/src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-bad-record
+++ b/src/settings/plugins/ibft/tests/iscsiadm-test-bad-record
@@ -8,7 +8,7 @@ iface.bootproto = DHCP
iface.gateway = 10.16.52.254
iface.primary_dns = 10.16.255.2
iface.secondary_dns = 10.16.255.3
-iface.vlan = 0
+iface.vlan_id = 0
iface.net_ifacename = eth0
node.name = iqn.0.2008-11.com.blahblah:iscsi0
node.conn[0].address = 10.16.52.16
diff --git a/src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-dhcp b/src/settings/plugins/ibft/tests/iscsiadm-test-dhcp
index 6de0637cb..556b0586e 100755
--- a/src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-dhcp
+++ b/src/settings/plugins/ibft/tests/iscsiadm-test-dhcp
@@ -8,7 +8,7 @@ iface.bootproto = DHCP
iface.gateway = 10.16.52.254
iface.primary_dns = 10.16.255.2
iface.secondary_dns = 10.16.255.3
-iface.vlan = 0
+iface.vlan_id = 0
iface.net_ifacename = eth0
node.name = iqn.0.2008-11.com.blahblah:iscsi0
node.conn[0].address = 10.16.52.16
@@ -22,7 +22,7 @@ iface.bootproto = DHCP
iface.gateway = 10.16.52.254
iface.primary_dns = 10.16.255.2
iface.secondary_dns = 10.16.255.3
-iface.vlan = 0
+iface.vlan_id = 0
iface.net_ifacename = eth1
node.name = iqn.1.2008-11.com.blahblah:iscsi1
node.conn[0].address = 10.16.52.16
diff --git a/src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-static b/src/settings/plugins/ibft/tests/iscsiadm-test-static
index 99a6e7c17..51711480e 100755
--- a/src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-static
+++ b/src/settings/plugins/ibft/tests/iscsiadm-test-static
@@ -10,7 +10,7 @@ iface.subnet_mask = 255.255.252.0
iface.gateway = 192.168.35.254
iface.primary_dns = 10.16.255.2
iface.secondary_dns = 10.16.255.3
-iface.vlan = 0
+iface.vlan_id = 0
iface.net_ifacename = eth0
node.name = iqn.0.2008-11.com.blahblah:iscsi0
node.conn[0].address = 10.16.52.16
@@ -24,7 +24,7 @@ iface.bootproto = DHCP
iface.gateway = 10.16.52.254
iface.primary_dns = 10.16.255.2
iface.secondary_dns = 10.16.255.3
-iface.vlan = 0
+iface.vlan_id = 0
iface.net_ifacename = eth1
node.name = iqn.1.2008-11.com.blahblah:iscsi1
node.conn[0].address = 10.16.52.16
diff --git a/src/settings/plugins/ibft/tests/iscsiadm-test-vlan b/src/settings/plugins/ibft/tests/iscsiadm-test-vlan
new file mode 100755
index 000000000..59b80bd03
--- /dev/null
+++ b/src/settings/plugins/ibft/tests/iscsiadm-test-vlan
@@ -0,0 +1,19 @@
+#!/bin/bash
+
+cat << EOF
+# BEGIN RECORD 6.2.0.873-21
+iface.initiatorname = iqn.2010-04.org.ipxe:d05faa97-c4be-44f6-a723-efde9aa399a0
+iface.transport_name = tcp
+iface.hwaddress = 00:33:21:98:b9:f0
+iface.bootproto = STATIC
+iface.ipaddress = 192.168.6.200
+iface.subnet_mask = 255.255.255.0
+iface.vlan_id = 123
+iface.net_ifacename = eth0
+node.name = iqn.2003-01.org.x:disk1
+node.conn[0].address = 192.168.6.32
+node.conn[0].port = 3260
+node.boot_lun = 01000000
+# END RECORD
+EOF
+
diff --git a/src/settings/plugins/ibft/tests/test-ibft.c b/src/settings/plugins/ibft/tests/test-ibft.c
new file mode 100644
index 000000000..2ff249af3
--- /dev/null
+++ b/src/settings/plugins/ibft/tests/test-ibft.c
@@ -0,0 +1,292 @@
+/* -*- 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.
+ *
+ * Copyright 2014 Red Hat, Inc.
+ */
+
+#include "config.h"
+
+#include <stdio.h>
+#include <stdarg.h>
+#include <unistd.h>
+#include <string.h>
+#include <netinet/ether.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <sys/socket.h>
+
+#include "nm-core-internal.h"
+#include "NetworkManagerUtils.h"
+
+#include "reader.h"
+#include "nm-logging.h"
+
+#include "nm-test-utils.h"
+
+static GPtrArray *
+read_block (const char *iscsiadm_path, const char *expected_mac)
+{
+ GSList *blocks = NULL, *iter;
+ GPtrArray *block = NULL;
+ GError *error = NULL;
+ gboolean success;
+
+ success = read_ibft_blocks (iscsiadm_path, &blocks, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+ g_assert (blocks);
+
+ for (iter = blocks; iter; iter = iter->next) {
+ const char *s_hwaddr = NULL;
+
+ if (!parse_ibft_config (iter->data, NULL, "iface.hwaddress", &s_hwaddr, NULL))
+ continue;
+ g_assert (s_hwaddr);
+ if (nm_utils_hwaddr_matches (s_hwaddr, -1, expected_mac, -1)) {
+ block = g_ptr_array_ref (iter->data);
+ break;
+ }
+ }
+ g_assert (block);
+
+ g_slist_foreach (blocks, (GFunc) g_ptr_array_unref, NULL);
+ return block;
+}
+
+static void
+test_read_ibft_dhcp (void)
+{
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+ NMSettingWired *s_wired;
+ NMSettingIPConfig *s_ip4;
+ GError *error = NULL;
+ const char *mac_address;
+ const char *expected_mac_address = "00:33:21:98:b9:f1";
+ GPtrArray *block;
+
+ block = read_block (TEST_IBFT_DIR "/iscsiadm-test-dhcp", expected_mac_address);
+
+ connection = connection_from_block (block, &error);
+ g_assert_no_error (error);
+ nmtst_assert_connection_verifies_without_normalization (connection);
+
+ g_assert (!nm_connection_get_setting_vlan (connection));
+
+ /* ===== CONNECTION SETTING ===== */
+ 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_id (s_con), ==, "iBFT eth1");
+ g_assert_cmpint (nm_setting_connection_get_timestamp (s_con), ==, 0);
+ g_assert (nm_setting_connection_get_autoconnect (s_con));
+ g_assert (nm_setting_connection_get_read_only (s_con));
+
+ /* ===== WIRED SETTING ===== */
+ s_wired = nm_connection_get_setting_wired (connection);
+ g_assert (s_wired);
+ mac_address = nm_setting_wired_get_mac_address (s_wired);
+ g_assert (mac_address);
+ g_assert (nm_utils_hwaddr_matches (mac_address, -1, expected_mac_address, -1));
+ g_assert_cmpint (nm_setting_wired_get_mtu (s_wired), ==, 0);
+
+ /* ===== IPv4 SETTING ===== */
+ s_ip4 = nm_connection_get_setting_ip4_config (connection);
+ g_assert (s_ip4);
+ g_assert_cmpstr (nm_setting_ip_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_AUTO);
+
+ g_object_unref (connection);
+}
+
+static void
+test_read_ibft_static (void)
+{
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+ NMSettingWired *s_wired;
+ NMSettingIPConfig *s_ip4;
+ GError *error = NULL;
+ const char *mac_address;
+ const char *expected_mac_address = "00:33:21:98:b9:f0";
+ NMIPAddress *ip4_addr;
+ GPtrArray *block;
+
+ block = read_block (TEST_IBFT_DIR "/iscsiadm-test-static", expected_mac_address);
+
+ connection = connection_from_block (block, &error);
+ g_assert_no_error (error);
+ nmtst_assert_connection_verifies_without_normalization (connection);
+
+ g_assert (!nm_connection_get_setting_vlan (connection));
+
+ /* ===== CONNECTION SETTING ===== */
+ 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_id (s_con), ==, "iBFT eth0");
+ g_assert_cmpint (nm_setting_connection_get_timestamp (s_con), ==, 0);
+ g_assert (nm_setting_connection_get_autoconnect (s_con));
+ g_assert (nm_setting_connection_get_read_only (s_con));
+
+ /* ===== WIRED SETTING ===== */
+ s_wired = nm_connection_get_setting_wired (connection);
+ g_assert (s_wired);
+ mac_address = nm_setting_wired_get_mac_address (s_wired);
+ g_assert (mac_address);
+ g_assert (nm_utils_hwaddr_matches (mac_address, -1, expected_mac_address, -1));
+ g_assert_cmpint (nm_setting_wired_get_mtu (s_wired), ==, 0);
+
+ /* ===== IPv4 SETTING ===== */
+ s_ip4 = nm_connection_get_setting_ip4_config (connection);
+ g_assert (s_ip4);
+ g_assert_cmpstr (nm_setting_ip_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_MANUAL);
+
+ g_assert_cmpint (nm_setting_ip_config_get_num_dns (s_ip4), ==, 2);
+ g_assert_cmpstr (nm_setting_ip_config_get_dns (s_ip4, 0), ==, "10.16.255.2");
+ g_assert_cmpstr (nm_setting_ip_config_get_dns (s_ip4, 1), ==, "10.16.255.3");
+
+ g_assert_cmpint (nm_setting_ip_config_get_num_addresses (s_ip4), ==, 1);
+ ip4_addr = nm_setting_ip_config_get_address (s_ip4, 0);
+ g_assert (ip4_addr);
+ g_assert_cmpstr (nm_ip_address_get_address (ip4_addr), ==, "192.168.32.72");
+ g_assert_cmpint (nm_ip_address_get_prefix (ip4_addr), ==, 22);
+
+ g_assert_cmpstr (nm_setting_ip_config_get_gateway (s_ip4), ==, "192.168.35.254");
+
+ g_object_unref (connection);
+ g_ptr_array_unref (block);
+}
+
+static void
+test_read_ibft_malformed (gconstpointer user_data)
+{
+ const char *iscsiadm_path = user_data;
+ GSList *blocks = NULL;
+ GError *error = NULL;
+ gboolean success;
+
+ g_assert (g_file_test (iscsiadm_path, G_FILE_TEST_EXISTS));
+
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING, "*malformed iscsiadm record*");
+
+ success = read_ibft_blocks (iscsiadm_path, &blocks, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+ g_assert (blocks == NULL);
+
+ g_test_assert_expected_messages ();
+}
+
+static void
+test_read_ibft_bad_address (gconstpointer user_data)
+{
+ const char *iscsiadm_path = user_data;
+ NMConnection *connection;
+ const char *expected_mac_address = "00:33:21:98:b9:f0";
+ GPtrArray *block;
+ GError *error = NULL;
+
+ g_assert (g_file_test (iscsiadm_path, G_FILE_TEST_EXISTS));
+
+ block = read_block (iscsiadm_path, expected_mac_address);
+
+ connection = connection_from_block (block, &error);
+ g_assert_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION);
+ g_assert (strstr (error->message, "iBFT: malformed iscsiadm record: invalid"));
+ g_clear_error (&error);
+ g_assert (connection == NULL);
+
+ g_ptr_array_unref (block);
+}
+
+static void
+test_read_ibft_vlan (void)
+{
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+ NMSettingWired *s_wired;
+ NMSettingVlan *s_vlan;
+ NMSettingIPConfig *s_ip4;
+ const char *mac_address;
+ const char *expected_mac_address = "00:33:21:98:b9:f0";
+ NMIPAddress *ip4_addr;
+ GError *error = NULL;
+ GPtrArray *block;
+
+ block = read_block (TEST_IBFT_DIR "/iscsiadm-test-vlan", expected_mac_address);
+
+ connection = connection_from_block (block, &error);
+ g_assert_no_error (error);
+ nmtst_assert_connection_verifies_without_normalization (connection);
+
+ 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_VLAN_SETTING_NAME);
+
+ /* ===== WIRED SETTING ===== */
+ s_wired = nm_connection_get_setting_wired (connection);
+ g_assert (s_wired);
+ mac_address = nm_setting_wired_get_mac_address (s_wired);
+ g_assert (mac_address);
+ g_assert (nm_utils_hwaddr_matches (mac_address, -1, expected_mac_address, -1));
+
+ /* ===== VLAN SETTING ===== */
+ s_vlan = nm_connection_get_setting_vlan (connection);
+ g_assert (s_vlan);
+ g_assert_cmpint (nm_setting_vlan_get_id (s_vlan), ==, 123);
+ g_assert_cmpstr (nm_setting_vlan_get_parent (s_vlan), ==, NULL);
+
+ /* ===== IPv4 SETTING ===== */
+ s_ip4 = nm_connection_get_setting_ip4_config (connection);
+ g_assert (s_ip4);
+ g_assert_cmpstr (nm_setting_ip_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_MANUAL);
+
+ g_assert_cmpint (nm_setting_ip_config_get_num_dns (s_ip4), ==, 0);
+
+ g_assert_cmpint (nm_setting_ip_config_get_num_addresses (s_ip4), ==, 1);
+ ip4_addr = nm_setting_ip_config_get_address (s_ip4, 0);
+ g_assert (ip4_addr);
+ g_assert_cmpstr (nm_ip_address_get_address (ip4_addr), ==, "192.168.6.200");
+ g_assert_cmpint (nm_ip_address_get_prefix (ip4_addr), ==, 24);
+
+ g_assert_cmpstr (nm_setting_ip_config_get_gateway (s_ip4), ==, NULL);
+
+ g_object_unref (connection);
+ g_ptr_array_ref (block);
+}
+
+NMTST_DEFINE ();
+
+#define TPATH "/settings/plugins/ibft/"
+
+int main (int argc, char **argv)
+{
+ nmtst_init_assert_logging (&argc, &argv);
+
+ g_test_add_func (TPATH "ibft/dhcp", test_read_ibft_dhcp);
+ g_test_add_func (TPATH "ibft/static", test_read_ibft_static);
+ g_test_add_func (TPATH "ibft/vlan", test_read_ibft_vlan);
+ g_test_add_data_func (TPATH "ibft/bad-record-read", TEST_IBFT_DIR "/iscsiadm-test-bad-record", test_read_ibft_malformed);
+ g_test_add_data_func (TPATH "ibft/bad-entry-read", TEST_IBFT_DIR "/iscsiadm-test-bad-entry", test_read_ibft_malformed);
+ g_test_add_data_func (TPATH "ibft/bad-ipaddr-read", TEST_IBFT_DIR "/iscsiadm-test-bad-ipaddr", test_read_ibft_bad_address);
+ g_test_add_data_func (TPATH "ibft/bad-gateway-read", TEST_IBFT_DIR "/iscsiadm-test-bad-gateway", test_read_ibft_bad_address);
+ g_test_add_data_func (TPATH "ibft/bad-dns1-read", TEST_IBFT_DIR "/iscsiadm-test-bad-dns1", test_read_ibft_bad_address);
+ g_test_add_data_func (TPATH "ibft/bad-dns2-read", TEST_IBFT_DIR "/iscsiadm-test-bad-dns2", test_read_ibft_bad_address);
+
+ return g_test_run ();
+}
+
diff --git a/src/settings/plugins/ifcfg-rh/Makefile.am b/src/settings/plugins/ifcfg-rh/Makefile.am
index c5e458af5..4989f4ba7 100644
--- a/src/settings/plugins/ifcfg-rh/Makefile.am
+++ b/src/settings/plugins/ifcfg-rh/Makefile.am
@@ -19,27 +19,21 @@ libifcfg_rh_io_la_SOURCES = \
reader.h \
writer.c \
writer.h \
- errors.c \
common.h \
utils.c \
utils.h
AM_CPPFLAGS = \
-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 \
+ -I$(top_srcdir)/libnm-core \
+ -I$(top_builddir)/libnm-core \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS) \
- $(POLKIT_CFLAGS) \
$(NSS_CFLAGS) \
-DG_LOG_DOMAIN=\""NetworkManager-ifcfg-rh"\" \
-DSYSCONFDIR=\"$(sysconfdir)\" \
@@ -52,11 +46,7 @@ libnm_settings_plugin_ifcfg_rh_la_SOURCES = \
nm-ifcfg-connection.h
libnm_settings_plugin_ifcfg_rh_la_LDFLAGS = -module -avoid-version
-libnm_settings_plugin_ifcfg_rh_la_LIBADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(top_builddir)/libnm-glib/libnm-glib.la \
- libifcfg-rh-io.la \
- $(GLIB_LIBS)
+libnm_settings_plugin_ifcfg_rh_la_LIBADD = libifcfg-rh-io.la
dbusservicedir = $(DBUS_SYS_DIR)
dbusservice_DATA = nm-ifcfg-rh.conf
diff --git a/src/settings/plugins/ifcfg-rh/Makefile.in b/src/settings/plugins/ifcfg-rh/Makefile.in
index 7b1a7ddaf..5d396273c 100644
--- a/src/settings/plugins/ifcfg-rh/Makefile.in
+++ b/src/settings/plugins/ifcfg-rh/Makefile.in
@@ -133,18 +133,13 @@ am__installdirs = "$(DESTDIR)$(pkglibdir)" \
"$(DESTDIR)$(dbusservicedir)"
LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkglib_LTLIBRARIES)
libifcfg_rh_io_la_LIBADD =
-am_libifcfg_rh_io_la_OBJECTS = shvar.lo reader.lo writer.lo errors.lo \
- utils.lo
+am_libifcfg_rh_io_la_OBJECTS = shvar.lo reader.lo writer.lo utils.lo
libifcfg_rh_io_la_OBJECTS = $(am_libifcfg_rh_io_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__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 \
- $(am__DEPENDENCIES_1)
+libnm_settings_plugin_ifcfg_rh_la_DEPENDENCIES = libifcfg-rh-io.la
am_libnm_settings_plugin_ifcfg_rh_la_OBJECTS = plugin.lo \
nm-ifcfg-connection.lo
libnm_settings_plugin_ifcfg_rh_la_OBJECTS = \
@@ -268,6 +263,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -391,6 +388,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -410,6 +408,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -436,7 +435,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -528,27 +527,21 @@ libifcfg_rh_io_la_SOURCES = \
reader.h \
writer.c \
writer.h \
- errors.c \
common.h \
utils.c \
utils.h
AM_CPPFLAGS = \
-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 \
+ -I$(top_srcdir)/libnm-core \
+ -I$(top_builddir)/libnm-core \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS) \
- $(POLKIT_CFLAGS) \
$(NSS_CFLAGS) \
-DG_LOG_DOMAIN=\""NetworkManager-ifcfg-rh"\" \
-DSYSCONFDIR=\"$(sysconfdir)\" \
@@ -561,12 +554,7 @@ libnm_settings_plugin_ifcfg_rh_la_SOURCES = \
nm-ifcfg-connection.h
libnm_settings_plugin_ifcfg_rh_la_LDFLAGS = -module -avoid-version
-libnm_settings_plugin_ifcfg_rh_la_LIBADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(top_builddir)/libnm-glib/libnm-glib.la \
- libifcfg-rh-io.la \
- $(GLIB_LIBS)
-
+libnm_settings_plugin_ifcfg_rh_la_LIBADD = libifcfg-rh-io.la
dbusservicedir = $(DBUS_SYS_DIR)
dbusservice_DATA = nm-ifcfg-rh.conf
EXTRA_DIST = \
@@ -668,7 +656,6 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/errors.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-ifcfg-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@
diff --git a/src/settings/plugins/ifcfg-rh/common.h b/src/settings/plugins/ifcfg-rh/common.h
index d9627bdde..d78f37525 100644
--- a/src/settings/plugins/ifcfg-rh/common.h
+++ b/src/settings/plugins/ifcfg-rh/common.h
@@ -78,9 +78,5 @@
#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);
-
-
#endif /* __COMMON_H__ */
diff --git a/src/settings/plugins/ifcfg-rh/nm-ifcfg-connection.c b/src/settings/plugins/ifcfg-rh/nm-ifcfg-connection.c
index 3db06f17d..7596cbd5f 100644
--- a/src/settings/plugins/ifcfg-rh/nm-ifcfg-connection.c
+++ b/src/settings/plugins/ifcfg-rh/nm-ifcfg-connection.c
@@ -18,13 +18,13 @@
* Copyright (C) 2008 - 2011 Red Hat, Inc.
*/
+#include "config.h"
+
#include <string.h>
-#include <net/ethernet.h>
-#include <netinet/ether.h>
#include <glib/gstdio.h>
-#include <NetworkManager.h>
+#include <nm-dbus-interface.h>
#include <nm-setting-connection.h>
#include <nm-setting-wired.h>
#include <nm-setting-wireless.h>
@@ -119,7 +119,7 @@ nm_ifcfg_connection_new (NMConnection *source,
else {
char *keyfile = NULL, *routefile = NULL, *route6file = NULL;
- tmp = connection_from_file (full_path, NULL, NULL, NULL,
+ tmp = connection_from_file (full_path, NULL, NULL,
&unhandled_spec,
&keyfile,
&routefile,
@@ -145,20 +145,16 @@ nm_ifcfg_connection_new (NMConnection *source,
NM_IFCFG_CONNECTION_UNMANAGED_SPEC, unmanaged_spec,
NM_IFCFG_CONNECTION_UNRECOGNIZED_SPEC, unrecognized_spec,
NULL);
- 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;
- }
- }
+ /* 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_clear_object (&object);
g_object_unref (tmp);
g_free (unhandled_spec);
@@ -271,7 +267,7 @@ commit_changes (NMSettingsConnection *connection,
* it if it's really changed.
*/
if (priv->path) {
- reread = connection_from_file (priv->path, NULL, NULL, NULL,
+ reread = connection_from_file (priv->path, NULL, NULL,
NULL, NULL, NULL, NULL,
&error, NULL);
g_clear_error (&error);
@@ -345,17 +341,6 @@ nm_ifcfg_connection_init (NMIfcfgConnection *connection)
}
static void
-finalize (GObject *object)
-{
- nm_connection_clear_secrets (NM_CONNECTION (object));
-
- 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);
-}
-
-static void
set_property (GObject *object, guint prop_id,
const GValue *value, GParamSpec *pspec)
{
@@ -394,6 +379,22 @@ get_property (GObject *object, guint prop_id,
}
static void
+dispose (GObject *object)
+{
+ path_watch_stop (NM_IFCFG_CONNECTION (object));
+
+ G_OBJECT_CLASS (nm_ifcfg_connection_parent_class)->dispose (object);
+}
+
+static void
+finalize (GObject *object)
+{
+ g_free (NM_IFCFG_CONNECTION_GET_PRIVATE (object)->path);
+
+ G_OBJECT_CLASS (nm_ifcfg_connection_parent_class)->finalize (object);
+}
+
+static void
nm_ifcfg_connection_class_init (NMIfcfgConnectionClass *ifcfg_connection_class)
{
GObjectClass *object_class = G_OBJECT_CLASS (ifcfg_connection_class);
@@ -404,6 +405,7 @@ nm_ifcfg_connection_class_init (NMIfcfgConnectionClass *ifcfg_connection_class)
/* Virtual methods */
object_class->set_property = set_property;
object_class->get_property = get_property;
+ object_class->dispose = dispose;
object_class->finalize = finalize;
settings_class->delete = do_delete;
settings_class->commit_changes = commit_changes;
@@ -411,18 +413,16 @@ nm_ifcfg_connection_class_init (NMIfcfgConnectionClass *ifcfg_connection_class)
/* Properties */
g_object_class_install_property
(object_class, PROP_UNMANAGED_SPEC,
- g_param_spec_string (NM_IFCFG_CONNECTION_UNMANAGED_SPEC,
- "Unmanaged spec",
- "Unmanaged spec",
- NULL,
- G_PARAM_READWRITE));
+ g_param_spec_string (NM_IFCFG_CONNECTION_UNMANAGED_SPEC, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class, PROP_UNRECOGNIZED_SPEC,
- g_param_spec_string (NM_IFCFG_CONNECTION_UNRECOGNIZED_SPEC,
- "Unrecognized spec",
- "Unrecognized spec",
+ g_param_spec_string (NM_IFCFG_CONNECTION_UNRECOGNIZED_SPEC, "", "",
NULL,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
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 47422b5db..37eacaf0d 100644
--- a/src/settings/plugins/ifcfg-rh/nm-ifcfg-connection.h
+++ b/src/settings/plugins/ifcfg-rh/nm-ifcfg-connection.h
@@ -18,12 +18,12 @@
* Copyright (C) 2008 - 2011 Red Hat, Inc.
*/
-#ifndef NM_IFCFG_CONNECTION_H
-#define NM_IFCFG_CONNECTION_H
+#ifndef __NETWORKMANAGER_IFCFG_CONNECTION_H__
+#define __NETWORKMANAGER_IFCFG_CONNECTION_H__
G_BEGIN_DECLS
-#include <NetworkManager.h>
+#include <nm-dbus-interface.h>
#include <nm-settings-connection.h>
#define NM_TYPE_IFCFG_CONNECTION (nm_ifcfg_connection_get_type ())
@@ -65,4 +65,4 @@ gboolean nm_ifcfg_connection_update (NMIfcfgConnection *self,
G_END_DECLS
-#endif /* NM_IFCFG_CONNECTION_H */
+#endif /* __NETWORKMANAGER_IFCFG_CONNECTION_H__ */
diff --git a/src/settings/plugins/ifcfg-rh/plugin.c b/src/settings/plugins/ifcfg-rh/plugin.c
index 8a3f328c8..2dced56b4 100644
--- a/src/settings/plugins/ifcfg-rh/plugin.c
+++ b/src/settings/plugins/ifcfg-rh/plugin.c
@@ -21,12 +21,11 @@
* Copyright (C) 2007 - 2011 Red Hat, Inc.
*/
-#include <config.h>
+#include "config.h"
+
#include <string.h>
#include <unistd.h>
#include <errno.h>
-#include <net/ethernet.h>
-#include <netinet/ether.h>
#include <sys/types.h>
#include <sys/stat.h>
@@ -49,9 +48,9 @@
#include "nm-dbus-glib-types.h"
#include "plugin.h"
#include "nm-system-config-interface.h"
-#include "nm-settings-error.h"
#include "nm-config.h"
#include "nm-logging.h"
+#include "NetworkManagerUtils.h"
#include "nm-ifcfg-connection.h"
#include "nm-inotify-helper.h"
@@ -143,7 +142,8 @@ _internal_new_connection (SCPluginIfcfg *self,
if (local)
g_propagate_error (error, local);
else
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0, "(unknown)");
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "(unknown)");
return NULL;
}
@@ -648,10 +648,10 @@ plugin_get_hostname (SCPluginIfcfg *plugin)
hostname = svGetValue (network, "HOSTNAME", FALSE);
ignore_localhost = svTrueValue (network, "NM_IGNORE_HOSTNAME_LOCALHOST", FALSE);
if (ignore_localhost) {
- /* Ignore a hostname of 'localhost' or 'localhost.localdomain' to preserve
- * 'network' service behavior.
+ /* Ignore a default hostname ('localhost[6]' or 'localhost[6].localdomain[6]')
+ * to preserve 'network' service behavior.
*/
- if (hostname && (!strcmp (hostname, "localhost") || !strcmp (hostname, "localhost.localdomain"))) {
+ if (hostname && !nm_utils_is_specific_hostname (hostname)) {
g_free (hostname);
hostname = NULL;
}
@@ -669,12 +669,14 @@ plugin_set_hostname (SCPluginIfcfg *plugin, const char *hostname)
char *hostname_eol;
gboolean ret;
#if HAVE_SELINUX
- security_context_t se_ctx_prev, se_ctx = NULL;
+ security_context_t se_ctx_prev = NULL, se_ctx = NULL;
struct stat file_stat = { .st_mode = 0 };
+ mode_t 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);
+ if (stat (HOSTNAME_FILE, &file_stat) == 0)
+ st_mode = file_stat.st_mode;
+ matchpathcon (HOSTNAME_FILE, st_mode, &se_ctx);
matchpathcon_fini ();
getfscreatecon (&se_ctx_prev);
setfscreatecon (se_ctx);
@@ -790,7 +792,7 @@ impl_ifcfgrh_get_ifcfg_details (SCPluginIfcfg *plugin,
if (!s_con) {
g_set_error (error,
NM_SETTINGS_ERROR,
- NM_SETTINGS_ERROR_INTERNAL_ERROR,
+ NM_SETTINGS_ERROR_FAILED,
"unable to retrieve the connection setting");
return FALSE;
}
@@ -799,7 +801,7 @@ impl_ifcfgrh_get_ifcfg_details (SCPluginIfcfg *plugin,
if (!uuid) {
g_set_error (error,
NM_SETTINGS_ERROR,
- NM_SETTINGS_ERROR_INTERNAL_ERROR,
+ NM_SETTINGS_ERROR_FAILED,
"unable to get the UUID");
return FALSE;
}
@@ -808,7 +810,7 @@ impl_ifcfgrh_get_ifcfg_details (SCPluginIfcfg *plugin,
if (!path) {
g_set_error (error,
NM_SETTINGS_ERROR,
- NM_SETTINGS_ERROR_INTERNAL_ERROR,
+ NM_SETTINGS_ERROR_FAILED,
"unable to get the connection D-Bus path");
return FALSE;
}
diff --git a/src/settings/plugins/ifcfg-rh/reader.c b/src/settings/plugins/ifcfg-rh/reader.c
index 7a616707e..145a0a391 100644
--- a/src/settings/plugins/ifcfg-rh/reader.c
+++ b/src/settings/plugins/ifcfg-rh/reader.c
@@ -15,10 +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) 2008 - 2013 Red Hat, Inc.
+ * Copyright 2008 - 2014 Red Hat, Inc.
*/
-#include <config.h>
+#include "config.h"
+
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
@@ -29,13 +30,11 @@
#include <errno.h>
#include <sys/ioctl.h>
#include <unistd.h>
-#include <netinet/ether.h>
-#include <linux/if.h>
#include <glib.h>
#include <glib/gi18n.h>
#include <nm-connection.h>
-#include <NetworkManager.h>
+#include <nm-dbus-interface.h>
#include <nm-setting-connection.h>
#include <nm-setting-ip4-config.h>
#include <nm-setting-vlan.h>
@@ -50,7 +49,7 @@
#include <nm-setting-bridge-port.h>
#include <nm-setting-dcb.h>
#include <nm-setting-generic.h>
-#include <nm-utils-private.h>
+#include "nm-core-internal.h"
#include <nm-utils.h>
#include "nm-platform.h"
@@ -149,7 +148,7 @@ make_connection_setting (const char *file,
uuid = svGetValue (ifcfg, "UUID", FALSE);
if (!uuid || !strlen (uuid)) {
g_free (uuid);
- uuid = nm_utils_uuid_generate_from_string (ifcfg->fileName);
+ uuid = nm_utils_uuid_generate_from_string (ifcfg->fileName, -1, NM_UTILS_UUID_TYPE_LEGACY, NULL);
}
g_object_set (s_con,
@@ -170,8 +169,14 @@ make_connection_setting (const char *file,
}
/* Missing ONBOOT is treated as "ONBOOT=true" by the old network service */
- g_object_set (s_con, NM_SETTING_CONNECTION_AUTOCONNECT,
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_AUTOCONNECT,
svTrueValue (ifcfg, "ONBOOT", TRUE),
+ NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY,
+ (gint) svGetValueInt64 (ifcfg, "AUTOCONNECT_PRIORITY", 10,
+ NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_MIN,
+ NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_MAX,
+ NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_DEFAULT),
NULL);
value = svGetValue (ifcfg, "USERS", FALSE);
@@ -246,292 +251,14 @@ make_connection_setting (const char *file,
return NM_SETTING (s_con);
}
-static gboolean
-read_mac_address (shvarFile *ifcfg, const char *key, int type,
- GByteArray **array, GError **error)
-{
- char *value = NULL;
-
- g_return_val_if_fail (ifcfg != NULL, FALSE);
- g_return_val_if_fail (array != NULL, FALSE);
- g_return_val_if_fail (*array == NULL, FALSE);
- if (error)
- g_return_val_if_fail (*error == NULL, FALSE);
-
- value = svGetValue (ifcfg, key, FALSE);
- if (!value || !strlen (value)) {
- g_free (value);
- return TRUE;
- }
-
- *array = nm_utils_hwaddr_atoba (value, type);
- if (!*array) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
- "%s: the MAC address '%s' was invalid.", key, value);
- g_free (value);
- return FALSE;
- }
-
- g_free (value);
- return TRUE;
-}
-
-static void
-iscsiadm_child_setup (gpointer user_data G_GNUC_UNUSED)
-{
- /* We are in the child process here; set a different process group to
- * ensure signal isolation between child and parent.
- */
- pid_t pid = getpid ();
- setpgid (pid, pid);
-
- /*
- * We blocked signals in main(). We need to restore original signal
- * mask for iscsiadm here so that it can receive signals.
- */
- nm_unblock_posix_signals (NULL);
-}
-
-static char *
-match_iscsiadm_tag (const char *line, const char *tag, gboolean *skip)
-{
- char *p;
-
- if (g_ascii_strncasecmp (line, tag, strlen (tag)))
- return NULL;
-
- p = strchr (line, '=');
- if (!p) {
- PARSE_WARNING ("malformed iscsiadm record: no = in '%s'.", line);
- *skip = TRUE;
- return NULL;
- }
-
- p++; /* advance past = */
- return g_strstrip (p);
-}
-
-#define ISCSI_HWADDR_TAG "iface.hwaddress"
-#define ISCSI_BOOTPROTO_TAG "iface.bootproto"
-#define ISCSI_IPADDR_TAG "iface.ipaddress"
-#define ISCSI_SUBNET_TAG "iface.subnet_mask"
-#define ISCSI_GATEWAY_TAG "iface.gateway"
-#define ISCSI_DNS1_TAG "iface.primary_dns"
-#define ISCSI_DNS2_TAG "iface.secondary_dns"
-
-static gboolean
-fill_ip4_setting_from_ibft (shvarFile *ifcfg,
- NMSettingIP4Config *s_ip4,
- const char *iscsiadm_path,
- GError **error)
-{
- const char *argv[4] = { iscsiadm_path, "-m", "fw", NULL };
- const char *envp[1] = { NULL };
- gboolean success = FALSE, in_record = FALSE, hwaddr_matched = FALSE, skip = FALSE;
- char *out = NULL, *err = NULL;
- gint status = 0;
- GByteArray *ifcfg_mac = NULL;
- char **lines = NULL, **iter;
- const char *method = NULL;
- guint32 ipaddr;
- guint32 gateway;
- guint32 dns1;
- guint32 dns2;
- guint32 prefix = 0;
-
- g_return_val_if_fail (s_ip4 != NULL, FALSE);
- g_return_val_if_fail (iscsiadm_path != NULL, FALSE);
-
- if (!g_spawn_sync ("/", (char **) argv, (char **) envp, 0,
- iscsiadm_child_setup, NULL, &out, &err, &status, error))
- return FALSE;
-
- if (!WIFEXITED (status)) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
- "%s exited abnormally.", iscsiadm_path);
- goto done;
- }
-
- if (WEXITSTATUS (status) != 0) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
- "%s exited with error %d. Message: '%s'",
- iscsiadm_path, WEXITSTATUS (status), err ? err : "(none)");
- goto done;
- }
-
- if (!read_mac_address (ifcfg, "HWADDR", ARPHRD_ETHER, &ifcfg_mac, error))
- goto done;
- /* Ensure we got a MAC */
- if (!ifcfg_mac) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
- "Missing device MAC address (no HWADDR tag present).");
- goto done;
- }
-
- memset (&ipaddr, 0, sizeof (ipaddr));
- memset (&gateway, 0, sizeof (gateway));
- memset (&dns1, 0, sizeof (dns1));
- memset (&dns2, 0, sizeof (dns2));
-
- /* Success, lets parse the output */
- lines = g_strsplit_set (out, "\n\r", -1);
- for (iter = lines; iter && *iter; iter++) {
- char *p;
-
- if (!g_ascii_strcasecmp (*iter, "# BEGIN RECORD")) {
- if (in_record) {
- 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) {
- PARSE_WARNING ("malformed iscsiadm record: missing BOOTPROTO.");
- goto done;
- }
-
- g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, method, NULL);
-
- if (!strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_MANUAL)) {
- NMIP4Address *addr;
-
- 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);
- nm_ip4_address_set_prefix (addr, prefix);
- nm_ip4_address_set_gateway (addr, gateway);
- nm_setting_ip4_config_add_address (s_ip4, addr);
- nm_ip4_address_unref (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?
- }
- success = TRUE;
- goto done;
- }
- skip = FALSE;
- hwaddr_matched = FALSE;
- memset (&ipaddr, 0, sizeof (ipaddr));
- memset (&gateway, 0, sizeof (gateway));
- memset (&dns1, 0, sizeof (dns1));
- memset (&dns2, 0, sizeof (dns2));
- prefix = 0;
- method = NULL;
- }
-
- if (skip)
- continue;
-
- /* HWADDR */
- if (!skip && (p = match_iscsiadm_tag (*iter, ISCSI_HWADDR_TAG, &skip))) {
- struct ether_addr *ibft_mac;
-
- ibft_mac = ether_aton (p);
- if (!ibft_mac) {
- PARSE_WARNING ("malformed iscsiadm record: invalid hwaddress.");
- skip = TRUE;
- continue;
- }
-
- if (memcmp (ifcfg_mac->data, (guint8 *) ibft_mac->ether_addr_octet, ETH_ALEN)) {
- /* This record isn't for the current device, ignore it */
- skip = TRUE;
- continue;
- }
-
- /* Success, this record is for this device */
- hwaddr_matched = TRUE;
- }
-
- /* BOOTPROTO */
- if (!skip && (p = match_iscsiadm_tag (*iter, ISCSI_BOOTPROTO_TAG, &skip))) {
- if (!g_ascii_strcasecmp (p, "dhcp"))
- method = NM_SETTING_IP4_CONFIG_METHOD_AUTO;
- else if (!g_ascii_strcasecmp (p, "static"))
- method = NM_SETTING_IP4_CONFIG_METHOD_MANUAL;
- else {
- PARSE_WARNING ("malformed iscsiadm record: unknown BOOTPROTO '%s'.", p);
- skip = TRUE;
- continue;
- }
- }
-
- if (!skip && (p = match_iscsiadm_tag (*iter, ISCSI_IPADDR_TAG, &skip))) {
- if (inet_pton (AF_INET, p, &ipaddr) < 1) {
- PARSE_WARNING ("malformed iscsiadm record: invalid IP address '%s'.", p);
- skip = TRUE;
- continue;
- }
- }
-
- if (!skip && (p = match_iscsiadm_tag (*iter, ISCSI_SUBNET_TAG, &skip))) {
- guint32 mask;
-
- if (inet_pton (AF_INET, p, &mask) < 1) {
- PARSE_WARNING ("malformed iscsiadm record: invalid subnet mask '%s'.", p);
- skip = TRUE;
- continue;
- }
-
- 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) {
- PARSE_WARNING ("malformed iscsiadm record: invalid IP gateway '%s'.", p);
- skip = TRUE;
- continue;
- }
- }
-
- if (!skip && (p = match_iscsiadm_tag (*iter, ISCSI_DNS1_TAG, &skip))) {
- if (inet_pton (AF_INET, p, &dns1) < 1) {
- PARSE_WARNING ("malformed iscsiadm record: invalid DNS1 address '%s'.", p);
- skip = TRUE;
- continue;
- }
- }
-
- if (!skip && (p = match_iscsiadm_tag (*iter, ISCSI_DNS2_TAG, &skip))) {
- if (inet_pton (AF_INET, p, &dns2) < 1) {
- PARSE_WARNING ("malformed iscsiadm record: invalid DNS2 address '%s'.", p);
- skip = TRUE;
- continue;
- }
- }
- }
-
- success = TRUE;
-
-done:
- if (ifcfg_mac)
- g_byte_array_free (ifcfg_mac, TRUE);
- g_strfreev (lines);
- g_free (out);
- g_free (err);
- return success;
-}
-
/* Returns TRUE on missing address or valid address */
static gboolean
read_ip4_address (shvarFile *ifcfg,
const char *tag,
- guint32 *out_addr,
+ char **out_addr,
GError **error)
{
char *value = NULL;
- guint32 ip4_addr;
- gboolean success = FALSE;
g_return_val_if_fail (ifcfg != NULL, FALSE);
g_return_val_if_fail (tag != NULL, FALSE);
@@ -539,45 +266,21 @@ read_ip4_address (shvarFile *ifcfg,
if (error)
g_return_val_if_fail (*error == NULL, FALSE);
- *out_addr = 0;
+ *out_addr = NULL;
value = svGetValue (ifcfg, tag, FALSE);
if (!value)
return TRUE;
- if (inet_pton (AF_INET, value, &ip4_addr) > 0) {
- *out_addr = ip4_addr;
- success = TRUE;
+ if (nm_utils_ipaddr_valid (AF_INET, value)) {
+ *out_addr = value;
+ return TRUE;
} else {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Invalid %s IP4 address '%s'", tag, value);
- }
- g_free (value);
- 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 ip6_addr;
-
- g_return_val_if_fail (value != NULL, FALSE);
- g_return_val_if_fail (out_addr != 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) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
- "Invalid IP6 address '%s'", value);
+ g_free (value);
return FALSE;
}
-
- *out_addr = ip6_addr;
- return TRUE;
}
static char *
@@ -629,19 +332,23 @@ static gboolean
read_full_ip4_address (shvarFile *ifcfg,
const char *network_file,
gint32 which,
- NMIP4Address *addr,
+ NMIPAddress *base_addr,
+ NMIPAddress **out_address,
+ char **out_gateway,
GError **error)
{
char *ip_tag, *prefix_tag, *netmask_tag, *gw_tag;
- guint32 tmp;
+ char *ip = NULL;
+ long prefix = 0;
gboolean success = FALSE;
- shvarFile *network_ifcfg;
char *value;
+ guint32 tmp;
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);
+ 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);
@@ -651,82 +358,73 @@ read_full_ip4_address (shvarFile *ifcfg,
gw_tag = get_numbered_tag ("GATEWAY", which);
/* IP address */
- if (!read_ip4_address (ifcfg, ip_tag, &tmp, error))
- goto done;
- if (tmp)
- nm_ip4_address_set_address (addr, tmp);
- else if (!nm_ip4_address_get_address (addr)) {
- success = TRUE;
+ if (!read_ip4_address (ifcfg, ip_tag, &ip, error))
goto done;
+ if (!ip) {
+ if (base_addr)
+ ip = g_strdup (nm_ip_address_get_address (base_addr));
+ else {
+ success = TRUE;
+ goto done;
+ }
}
/* Gateway */
- if (!read_ip4_address (ifcfg, gw_tag, &tmp, 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 = svOpenFile (network_file, NULL);
- if (network_ifcfg) {
- read_success = read_ip4_address (network_ifcfg, "GATEWAY", &tmp, error);
- svCloseFile (network_ifcfg);
- if (!read_success)
- goto done;
- nm_ip4_address_set_gateway (addr, tmp);
- }
+ if (out_gateway && !*out_gateway) {
+ if (!read_ip4_address (ifcfg, gw_tag, out_gateway, error))
+ goto done;
}
/* Prefix */
value = svGetValue (ifcfg, prefix_tag, FALSE);
if (value) {
- long int prefix;
-
errno = 0;
prefix = strtol (value, NULL, 10);
- if (errno || prefix <= 0 || prefix > 32) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ if (errno || prefix < 0) {
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Invalid IP4 prefix '%s'", value);
g_free (value);
goto done;
}
- nm_ip4_address_set_prefix (addr, (guint32) prefix);
g_free (value);
}
/* 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))
+ if (prefix == 0) {
+ if (!read_ip4_address (ifcfg, netmask_tag, &value, error))
goto done;
- if (tmp)
- nm_ip4_address_set_prefix (addr, nm_utils_ip4_netmask_to_prefix (tmp));
+ if (value) {
+ inet_pton (AF_INET, value, &tmp);
+ prefix = nm_utils_ip4_netmask_to_prefix (tmp);
+ g_free (value);
+ }
}
- /* Try to autodetermine the prefix for the address' class */
- if (!nm_ip4_address_get_prefix (addr)) {
- guint32 prefix = 0;
+ if (prefix == 0 && base_addr)
+ prefix = nm_ip_address_get_prefix (base_addr);
- prefix = nm_utils_ip4_get_default_prefix (nm_ip4_address_get_address (addr));
- nm_ip4_address_set_prefix (addr, prefix);
+ /* Try to autodetermine the prefix for the address' class */
+ if (prefix == 0) {
+ if (inet_pton (AF_INET, ip, &tmp) == 1) {
+ prefix = nm_utils_ip4_get_default_prefix (tmp);
- value = svGetValue (ifcfg, ip_tag, FALSE);
- PARSE_WARNING ("missing %s, assuming %s/%u", prefix_tag, value, prefix);
- g_free (value);
+ PARSE_WARNING ("missing %s, assuming %s/%ld", prefix_tag, ip, prefix);
+ }
}
/* Validate the prefix */
- if (nm_ip4_address_get_prefix (addr) > 32) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
- "Missing or invalid IP4 prefix '%d'",
- nm_ip4_address_get_prefix (addr));
+ if (prefix == 0) {
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "Missing IP4 prefix");
goto done;
}
- success = TRUE;
+ *out_address = nm_ip_address_new (AF_INET, ip, prefix, error);
+ if (*out_address)
+ success = TRUE;
done:
+ g_free (ip);
g_free (ip_tag);
g_free (prefix_tag);
g_free (netmask_tag);
@@ -740,12 +438,12 @@ static gboolean
read_one_ip4_route (shvarFile *ifcfg,
const char *network_file,
guint32 which,
- NMIP4Route **out_route,
+ NMIPRoute **out_route,
GError **error)
{
- NMIP4Route *route;
char *ip_tag, *netmask_tag, *gw_tag, *metric_tag, *value;
- guint32 tmp;
+ char *dest = NULL, *next_hop = NULL;
+ gint64 prefix, metric;
gboolean success = FALSE;
g_return_val_if_fail (ifcfg != NULL, FALSE);
@@ -755,75 +453,72 @@ read_one_ip4_route (shvarFile *ifcfg,
if (error)
g_return_val_if_fail (*error == NULL, FALSE);
- route = nm_ip4_route_new ();
-
ip_tag = g_strdup_printf ("ADDRESS%u", which);
netmask_tag = g_strdup_printf ("NETMASK%u", which);
gw_tag = g_strdup_printf ("GATEWAY%u", which);
metric_tag = g_strdup_printf ("METRIC%u", which);
/* Destination */
- if (!read_ip4_address (ifcfg, ip_tag, &tmp, error))
+ if (!read_ip4_address (ifcfg, ip_tag, &dest, error))
goto out;
- if (!tmp) {
+ if (!dest) {
/* Check whether IP is missing or 0.0.0.0 */
char *val;
val = svGetValue (ifcfg, ip_tag, FALSE);
if (!val) {
- nm_ip4_route_unref (route);
- route = NULL;
+ *out_route = NULL;
success = TRUE; /* missing route = success */
goto out;
}
g_free (val);
}
- nm_ip4_route_set_dest (route, tmp);
/* Next hop */
- if (!read_ip4_address (ifcfg, gw_tag, &tmp, error))
+ if (!read_ip4_address (ifcfg, gw_tag, &next_hop, error))
goto out;
- /* No need to check tmp, because we don't make distinction between missing GATEWAY IP and 0.0.0.0 */
- nm_ip4_route_set_next_hop (route, tmp);
+ /* We don't make distinction between missing GATEWAY IP and 0.0.0.0 */
/* Prefix */
- if (!read_ip4_address (ifcfg, netmask_tag, &tmp, error))
+ if (!read_ip4_address (ifcfg, netmask_tag, &value, error))
goto out;
- if (tmp)
- nm_ip4_route_set_prefix (route, nm_utils_ip4_netmask_to_prefix (tmp));
+ if (value) {
+ guint32 netmask;
- /* Validate the prefix */
- if ( !nm_ip4_route_get_prefix (route)
- || nm_ip4_route_get_prefix (route) > 32) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
- "Missing or invalid IP4 prefix '%d'",
- nm_ip4_route_get_prefix (route));
+ inet_pton (AF_INET, value, &netmask);
+ prefix = nm_utils_ip4_netmask_to_prefix (netmask);
+ g_free (value);
+ if (prefix == 0 || netmask != nm_utils_ip4_prefix_to_netmask (prefix)) {
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "Invalid IP4 netmask '%s' \"%s\"", netmask_tag, nm_utils_inet4_ntop (netmask, NULL));
+ goto out;
+ }
+ } else {
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "Missing IP4 route element '%s'", netmask_tag);
goto out;
}
/* Metric */
value = svGetValue (ifcfg, metric_tag, FALSE);
if (value) {
- long int metric;
-
- errno = 0;
- metric = strtol (value, NULL, 10);
- if (errno || metric < 0) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ metric = nm_utils_ascii_str_to_int64 (value, 10, 0, G_MAXUINT32, -1);
+ if (metric < 0) {
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Invalid IP4 route metric '%s'", value);
g_free (value);
goto out;
}
- nm_ip4_route_set_metric (route, (guint32) metric);
g_free (value);
- }
+ } else
+ metric = -1;
- *out_route = route;
- success = TRUE;
+ *out_route = nm_ip_route_new (AF_INET, dest, prefix, next_hop, metric, error);
+ if (*out_route)
+ success = TRUE;
out:
- if (!success && route)
- nm_ip4_route_unref (route);
-
+ g_free (dest);
+ g_free (next_hop);
g_free (ip_tag);
g_free (netmask_tag);
g_free (gw_tag);
@@ -832,17 +527,16 @@ out:
}
static gboolean
-read_route_file_legacy (const char *filename, NMSettingIP4Config *s_ip4, GError **error)
+read_route_file_legacy (const char *filename, NMSettingIPConfig *s_ip4, GError **error)
{
char *contents = NULL;
gsize len = 0;
char **lines = NULL, **iter;
GRegex *regex_to1, *regex_to2, *regex_via, *regex_metric;
GMatchInfo *match_info;
- NMIP4Route *route;
- guint32 ip4_addr;
- char *dest = NULL, *prefix = NULL, *metric = NULL;
- long int prefix_int, metric_int;
+ NMIPRoute *route = NULL;
+ char *dest = NULL, *prefix = NULL, *next_hop = NULL, *metric = NULL;
+ gint64 prefix_int, metric_int;
gboolean success = FALSE;
const char *pattern_empty = "^\\s*(\\#.*)?$";
@@ -870,9 +564,6 @@ read_route_file_legacy (const char *filename, NMSettingIP4Config *s_ip4, GError
regex_via = g_regex_new (pattern_via, 0, 0, NULL);
regex_metric = g_regex_new (pattern_metric, 0, 0, NULL);
- /* New NMIP4Route structure */
- route = nm_ip4_route_new ();
-
/* Iterate through file lines */
lines = g_strsplit_set (contents, "\n\r", -1);
for (iter = lines; iter && *iter; iter++) {
@@ -888,22 +579,21 @@ read_route_file_legacy (const char *filename, NMSettingIP4Config *s_ip4, GError
g_regex_match (regex_to2, *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 destination address in record: '%s'", *iter);
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "Missing IP4 route destination address in record: '%s'", *iter);
goto error;
}
}
dest = g_match_info_fetch (match_info, 1);
if (!strcmp (dest, "default"))
strcpy (dest, "0.0.0.0");
- if (inet_pton (AF_INET, dest, &ip4_addr) != 1) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
- "Invalid IP4 route destination address '%s'", dest);
+ if (!nm_utils_ipaddr_valid (AF_INET, dest)) {
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "Invalid IP4 route destination address '%s'", dest);
g_free (dest);
+ g_match_info_free (match_info);
goto error;
}
- nm_ip4_route_set_dest (route, ip4_addr);
- g_free (dest);
/* Prefix - is optional; 32 if missing */
prefix = g_match_info_fetch (match_info, 2);
@@ -913,58 +603,62 @@ read_route_file_legacy (const char *filename, NMSettingIP4Config *s_ip4, GError
errno = 0;
prefix_int = strtol (prefix, NULL, 10);
if (errno || prefix_int <= 0 || prefix_int > 32) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
- "Invalid IP4 route destination prefix '%s'", prefix);
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "Invalid IP4 route destination prefix '%s'", prefix);
+ g_free (dest);
g_free (prefix);
goto error;
}
}
- nm_ip4_route_set_prefix (route, (guint32) prefix_int);
g_free (prefix);
/* Next hop */
g_regex_match (regex_via, *iter, 0, &match_info);
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,
+ next_hop = g_match_info_fetch (match_info, 1);
+ if (!nm_utils_ipaddr_valid (AF_INET, next_hop)) {
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Invalid IP4 route gateway address '%s'",
next_hop);
g_match_info_free (match_info);
+ g_free (dest);
g_free (next_hop);
goto error;
}
- g_free (next_hop);
} else {
/* we don't make distinction between missing GATEWAY IP and 0.0.0.0 */
- ip4_addr = 0;
+ next_hop = NULL;
}
- 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);
- metric_int = 0;
+ metric_int = -1;
if (g_match_info_matches (match_info)) {
metric = g_match_info_fetch (match_info, 1);
errno = 0;
metric_int = strtol (metric, NULL, 10);
if (errno || metric_int < 0) {
g_match_info_free (match_info);
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Invalid IP4 route metric '%s'", metric);
+ g_free (dest);
+ g_free (next_hop);
g_free (metric);
goto error;
}
g_free (metric);
}
-
- nm_ip4_route_set_metric (route, (guint32) metric_int);
g_match_info_free (match_info);
- if (!nm_setting_ip4_config_add_route (s_ip4, route))
+ route = nm_ip_route_new (AF_INET, dest, prefix_int, next_hop, metric_int, error);
+ if (!route) {
+ g_free (dest);
+ g_free (next_hop);
+ goto error;
+ }
+ if (!nm_setting_ip_config_add_route (s_ip4, route))
PARSE_WARNING ("duplicate IP4 route");
-
}
success = TRUE;
@@ -972,7 +666,8 @@ read_route_file_legacy (const char *filename, NMSettingIP4Config *s_ip4, GError
error:
g_free (contents);
g_strfreev (lines);
- nm_ip4_route_unref (route);
+ if (route)
+ nm_ip_route_unref (route);
g_regex_unref (regex_to1);
g_regex_unref (regex_to2);
g_regex_unref (regex_via);
@@ -986,15 +681,12 @@ parse_full_ip6_address (shvarFile *ifcfg,
const char *network_file,
const char *addr_str,
int i,
- NMIP6Address **out_address,
+ NMIPAddress **out_address,
GError **error)
{
- NMIP6Address *addr = NULL;
char **list;
char *ip_val, *prefix_val;
- shvarFile *network_ifcfg;
- char *value = NULL;
- struct in6_addr tmp = IN6ADDR_ANY_INIT;
+ long prefix;
gboolean success = FALSE;
g_return_val_if_fail (addr_str != NULL, FALSE);
@@ -1006,77 +698,33 @@ parse_full_ip6_address (shvarFile *ifcfg,
/* 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,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Invalid IP6 address '%s'", addr_str);
goto error;
}
ip_val = list[0];
- prefix_val = list[1];
- addr = nm_ip6_address_new ();
- /* IP address */
- 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);
-
- /* Prefix */
+ prefix_val = list[1];
if (prefix_val) {
- long int prefix;
-
errno = 0;
prefix = strtol (prefix_val, NULL, 10);
if (errno || prefix <= 0 || prefix > 128) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Invalid IP6 prefix '%s'", prefix_val);
goto error;
}
- nm_ip6_address_set_prefix (addr, (guint32) prefix);
} else {
/* Missing prefix is treated as prefix of 64 */
- nm_ip6_address_set_prefix (addr, 64);
+ prefix = 64;
}
- /* Gateway */
- tmp = in6addr_any;
- value = svGetValue (ifcfg, "IPV6_DEFAULTGW", FALSE);
- if (i != 0) {
- /* We don't support gateways for IPV6ADDR_SECONDARIES yet */
- g_free (value);
- value = NULL;
- }
- if (!value) {
- /* If no gateway in the ifcfg, try global /etc/sysconfig/network instead */
- network_ifcfg = svOpenFile (network_file, NULL);
- if (network_ifcfg) {
- value = svGetValue (network_ifcfg, "IPV6_DEFAULTGW", FALSE);
- svCloseFile (network_ifcfg);
- }
- }
- if (value) {
- char *ptr;
-
- if ((ptr = strchr (value, '%')) != NULL)
- *ptr = '\0'; /* remove %interface prefix if present */
- if (!parse_ip6_address (value, &tmp, error))
- goto error;
- nm_ip6_address_set_gateway (addr, &tmp);
- }
-
- *out_address = addr;
- success = TRUE;
+ *out_address = nm_ip_address_new (AF_INET6, ip_val, prefix, error);
+ if (*out_address)
+ success = TRUE;
error:
- if (!success && addr)
- nm_ip6_address_unref (addr);
-
g_strfreev (list);
- g_free (value);
return success;
}
@@ -1088,17 +736,16 @@ error:
#define IPV6_ADDR_REGEX "[0-9A-Fa-f:.]+"
static gboolean
-read_route6_file (const char *filename, NMSettingIP6Config *s_ip6, GError **error)
+read_route6_file (const char *filename, NMSettingIPConfig *s_ip6, GError **error)
{
char *contents = NULL;
gsize len = 0;
char **lines = NULL, **iter;
GRegex *regex_to1, *regex_to2, *regex_via, *regex_metric;
GMatchInfo *match_info;
- NMIP6Route *route;
- struct in6_addr ip6_addr;
- char *dest = NULL, *prefix = NULL, *metric = NULL;
- long int prefix_int, metric_int;
+ NMIPRoute *route = NULL;
+ char *dest = NULL, *prefix = NULL, *next_hop = NULL, *metric = NULL;
+ gint64 prefix_int, metric_int;
gboolean success = FALSE;
const char *pattern_empty = "^\\s*(\\#.*)?$";
@@ -1126,9 +773,6 @@ read_route6_file (const char *filename, NMSettingIP6Config *s_ip6, GError **erro
regex_via = g_regex_new (pattern_via, 0, 0, NULL);
regex_metric = g_regex_new (pattern_metric, 0, 0, NULL);
- /* New NMIP6Route structure */
- route = nm_ip6_route_new ();
-
/* Iterate through file lines */
lines = g_strsplit_set (contents, "\n\r", -1);
for (iter = lines; iter && *iter; iter++) {
@@ -1144,27 +788,19 @@ read_route6_file (const char *filename, NMSettingIP6Config *s_ip6, GError **erro
g_regex_match (regex_to2, *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 destination address in record: '%s'", *iter);
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "Missing IP6 route destination address in record: '%s'", *iter);
goto error;
}
}
dest = g_match_info_fetch (match_info, 1);
if (!g_strcmp0 (dest, "default")) {
/* Ignore default route - NM handles it internally */
- g_free (dest);
+ g_clear_pointer (&dest, g_free);
g_match_info_free (match_info);
PARSE_WARNING ("ignoring manual default route: '%s' (%s)", *iter, filename);
continue;
}
- if (inet_pton (AF_INET6, dest, &ip6_addr) != 1) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
- "Invalid IP6 route destination address '%s'", dest);
- g_free (dest);
- goto error;
- }
- nm_ip6_route_set_dest (route, &ip6_addr);
- g_free (dest);
/* Prefix - is optional; 128 if missing */
prefix = g_match_info_fetch (match_info, 2);
@@ -1174,56 +810,60 @@ read_route6_file (const char *filename, NMSettingIP6Config *s_ip6, GError **erro
errno = 0;
prefix_int = strtol (prefix, NULL, 10);
if (errno || prefix_int <= 0 || prefix_int > 128) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
- "Invalid IP6 route destination prefix '%s'", prefix);
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "Invalid IP6 route destination prefix '%s'", prefix);
+ g_free (dest);
g_free (prefix);
goto error;
}
}
- nm_ip6_route_set_prefix (route, (guint32) prefix_int);
g_free (prefix);
/* Next hop */
g_regex_match (regex_via, *iter, 0, &match_info);
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,
+ next_hop = g_match_info_fetch (match_info, 1);
+ if (!nm_utils_ipaddr_valid (AF_INET6, next_hop)) {
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Invalid IPv6 route nexthop address '%s'",
next_hop);
g_match_info_free (match_info);
+ g_free (dest);
g_free (next_hop);
goto error;
}
- g_free (next_hop);
} else {
/* Missing "via" is taken as :: */
- ip6_addr = in6addr_any;
+ next_hop = NULL;
}
- nm_ip6_route_set_next_hop (route, &ip6_addr);
g_match_info_free (match_info);
/* Metric */
g_regex_match (regex_metric, *iter, 0, &match_info);
- metric_int = 0;
+ metric_int = -1;
if (g_match_info_matches (match_info)) {
metric = g_match_info_fetch (match_info, 1);
errno = 0;
metric_int = strtol (metric, NULL, 10);
if (errno || metric_int < 0 || metric_int > G_MAXUINT32) {
g_match_info_free (match_info);
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Invalid IP6 route metric '%s'", metric);
+ g_free (dest);
+ g_free (next_hop);
g_free (metric);
goto error;
}
g_free (metric);
}
-
- nm_ip6_route_set_metric (route, (guint32) metric_int);
g_match_info_free (match_info);
- if (!nm_setting_ip6_config_add_route (s_ip6, route))
+ route = nm_ip_route_new (AF_INET6, dest, prefix_int, next_hop, metric_int, error);
+ g_free (dest);
+ g_free (next_hop);
+ if (!route)
+ goto error;
+ if (!nm_setting_ip_config_add_route (s_ip6, route))
PARSE_WARNING ("duplicate IP6 route");
}
@@ -1232,7 +872,8 @@ read_route6_file (const char *filename, NMSettingIP6Config *s_ip6, GError **erro
error:
g_free (contents);
g_strfreev (lines);
- nm_ip6_route_unref (route);
+ if (route)
+ nm_ip_route_unref (route);
g_regex_unref (regex_to1);
g_regex_unref (regex_to2);
g_regex_unref (regex_via);
@@ -1245,19 +886,19 @@ error:
static NMSetting *
make_ip4_setting (shvarFile *ifcfg,
const char *network_file,
- const char *iscsiadm_path,
GError **error)
{
- NMSettingIP4Config *s_ip4 = NULL;
+ NMSettingIPConfig *s_ip4 = NULL;
char *value = NULL;
char *route_path = NULL;
char *method;
+ char *gateway = NULL;
gint32 i;
shvarFile *network_ifcfg;
shvarFile *route_ifcfg;
gboolean never_default = FALSE;
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new ();
/* First check if DEFROUTE is set for this device; DEFROUTE has the
* opposite meaning from never-default. The default if DEFROUTE is not
@@ -1297,32 +938,22 @@ make_ip4_setting (shvarFile *ifcfg,
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);
- 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,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL,
+ NM_SETTING_IP_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,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_SHARED,
+ NM_SETTING_IP_CONFIG_NEVER_DEFAULT, never_default,
NULL);
return NM_SETTING (s_ip4);
} else {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Unknown BOOTPROTO '%s'", value);
g_free (value);
goto done;
@@ -1330,11 +961,11 @@ make_ip4_setting (shvarFile *ifcfg,
g_free (value);
g_object_set (s_ip4,
- NM_SETTING_IP4_CONFIG_METHOD, method,
- NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS, !svTrueValue (ifcfg, "PEERDNS", TRUE),
- NM_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES, !svTrueValue (ifcfg, "PEERROUTES", TRUE),
- NM_SETTING_IP4_CONFIG_NEVER_DEFAULT, never_default,
- NM_SETTING_IP4_CONFIG_MAY_FAIL, !svTrueValue (ifcfg, "IPV4_FAILURE_FATAL", FALSE),
+ NM_SETTING_IP_CONFIG_METHOD, method,
+ NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS, !svTrueValue (ifcfg, "PEERDNS", TRUE),
+ NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES, !svTrueValue (ifcfg, "PEERROUTES", TRUE),
+ NM_SETTING_IP_CONFIG_NEVER_DEFAULT, never_default,
+ NM_SETTING_IP_CONFIG_MAY_FAIL, !svTrueValue (ifcfg, "IPV4_FAILURE_FATAL", FALSE),
NULL);
if (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED) == 0)
@@ -1344,11 +975,11 @@ make_ip4_setting (shvarFile *ifcfg,
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);
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_DHCP_HOSTNAME, value, NULL);
g_free (value);
g_object_set (s_ip4,
- NM_SETTING_IP4_CONFIG_DHCP_SEND_HOSTNAME,
+ NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME,
svTrueValue (ifcfg, "DHCP_SEND_HOSTNAME", TRUE),
NULL);
@@ -1364,16 +995,12 @@ make_ip4_setting (shvarFile *ifcfg,
* the legacy 'network' service (ifup-eth).
*/
for (i = -1; i < 256; i++) {
- NMIP4Address *addr = NULL;
+ NMIPAddress *addr = NULL;
- addr = nm_ip4_address_new ();
- if (!read_full_ip4_address (ifcfg, network_file, i, addr, error)) {
- nm_ip4_address_unref (addr);
+ if (!read_full_ip4_address (ifcfg, network_file, i, NULL, &addr, &gateway, error))
goto done;
- }
- if (!nm_ip4_address_get_address (addr)) {
- nm_ip4_address_unref (addr);
+ if (!addr) {
/* The first mandatory variable is 2-indexed (IPADDR2)
* Variables IPADDR, IPADDR0 and IPADDR1 are optional */
if (i > 1)
@@ -1381,39 +1008,49 @@ make_ip4_setting (shvarFile *ifcfg,
continue;
}
- if (!nm_setting_ip4_config_add_address (s_ip4, addr))
+ if (!nm_setting_ip_config_add_address (s_ip4, addr))
PARSE_WARNING ("duplicate IP4 address");
- nm_ip4_address_unref (addr);
+ nm_ip_address_unref (addr);
}
+ /* Gateway */
+ if (!gateway) {
+ network_ifcfg = svOpenFile (network_file, NULL);
+ if (network_ifcfg) {
+ gboolean read_success;
+
+ read_success = read_ip4_address (network_ifcfg, "GATEWAY", &gateway, error);
+ svCloseFile (network_ifcfg);
+ if (!read_success)
+ goto done;
+ }
+ }
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_GATEWAY, gateway, NULL);
+
/* DNS servers
* Pick up just IPv4 addresses (IPv6 addresses are taken by make_ip6_setting())
*/
for (i = 1; i <= 10; i++) {
char *tag;
- guint32 dns;
- struct in6_addr ip6_dns;
tag = g_strdup_printf ("DNS%u", i);
- if (!read_ip4_address (ifcfg, tag, &dns, error)) {
- gboolean valid = TRUE;
-
- /* Ignore IPv6 addresses */
- dns = 0;
- value = svGetValue (ifcfg, tag, FALSE);
- if (value)
- valid = parse_ip6_address (value, &ip6_dns, NULL);
- g_free (value);
-
- if (!valid) {
+ value = svGetValue (ifcfg, tag, FALSE);
+ if (value) {
+ if (nm_utils_ipaddr_valid (AF_INET, value)) {
+ if (!nm_setting_ip_config_add_dns (s_ip4, value))
+ PARSE_WARNING ("duplicate DNS server %s", tag);
+ } else if (nm_utils_ipaddr_valid (AF_INET6, value)) {
+ /* Ignore IPv6 addresses */
+ } else {
+ PARSE_WARNING ("invalid DNS server address %s", value);
g_free (tag);
+ g_free (value);
goto done;
}
- g_clear_error (error);
+
+ g_free (value);
}
- if (dns && !nm_setting_ip4_config_add_dns (s_ip4, dns))
- PARSE_WARNING ("duplicate DNS server %s", tag);
g_free (tag);
}
@@ -1427,7 +1064,7 @@ make_ip4_setting (shvarFile *ifcfg,
char **item;
for (item = searches; *item; item++) {
if (strlen (*item)) {
- if (!nm_setting_ip4_config_add_dns_search (s_ip4, *item))
+ if (!nm_setting_ip_config_add_dns_search (s_ip4, *item))
PARSE_WARNING ("duplicate DNS domain '%s'", *item);
}
}
@@ -1439,7 +1076,7 @@ make_ip4_setting (shvarFile *ifcfg,
/* Static routes - route-<name> file */
route_path = utils_get_route_path (ifcfg->fileName);
if (!route_path) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Could not get route file path for '%s'", ifcfg->fileName);
goto done;
}
@@ -1450,7 +1087,7 @@ make_ip4_setting (shvarFile *ifcfg,
route_ifcfg = utils_get_route_ifcfg (ifcfg->fileName, FALSE);
if (route_ifcfg) {
for (i = 0; i < 256; i++) {
- NMIP4Route *route = NULL;
+ NMIPRoute *route = NULL;
if (!read_one_ip4_route (route_ifcfg, network_file, i, &route, error)) {
svCloseFile (route_ifcfg);
@@ -1460,9 +1097,9 @@ make_ip4_setting (shvarFile *ifcfg,
if (!route)
break;
- if (!nm_setting_ip4_config_add_route (s_ip4, route))
+ if (!nm_setting_ip_config_add_route (s_ip4, route))
PARSE_WARNING ("duplicate IP4 route");
- nm_ip4_route_unref (route);
+ nm_ip_route_unref (route);
}
svCloseFile (route_ifcfg);
}
@@ -1472,7 +1109,7 @@ make_ip4_setting (shvarFile *ifcfg,
}
/* Legacy value NM used for a while but is incorrect (rh #459370) */
- if (!nm_setting_ip4_config_get_num_dns_searches (s_ip4)) {
+ if (!nm_setting_ip_config_get_num_dns_searches (s_ip4)) {
value = svGetValue (ifcfg, "SEARCH", FALSE);
if (value) {
char **searches = NULL;
@@ -1482,7 +1119,7 @@ make_ip4_setting (shvarFile *ifcfg,
char **item;
for (item = searches; *item; item++) {
if (strlen (*item)) {
- if (!nm_setting_ip4_config_add_dns_search (s_ip4, *item))
+ if (!nm_setting_ip_config_add_dns_search (s_ip4, *item))
PARSE_WARNING ("duplicate DNS search '%s'", *item);
}
}
@@ -1495,27 +1132,29 @@ make_ip4_setting (shvarFile *ifcfg,
return NM_SETTING (s_ip4);
done:
+ g_free (gateway);
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)
+read_aliases (NMSettingIPConfig *s_ip4, const char *filename, const char *network_file)
{
GDir *dir;
char *dirname, *base;
shvarFile *parsed;
- NMIP4Address *base_addr;
+ NMIPAddress *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)
+ if (nm_setting_ip_config_get_num_addresses (s_ip4) == 0)
return;
+ base_addr = nm_setting_ip_config_get_address (s_ip4, 0);
+
dirname = g_path_get_dirname (filename);
g_return_if_fail (dirname != NULL);
base = g_path_get_basename (filename);
@@ -1524,7 +1163,7 @@ read_aliases (NMSettingIP4Config *s_ip4, const char *filename, const char *netwo
dir = g_dir_open (dirname, 0, &err);
if (dir) {
const char *item;
- NMIP4Address *addr;
+ NMIPAddress *addr;
gboolean ok;
while ((item = g_dir_read_name (dir))) {
@@ -1573,18 +1212,19 @@ read_aliases (NMSettingIP4Config *s_ip4, const char *filename, const char *netwo
continue;
}
- addr = nm_ip4_address_dup (base_addr);
- ok = read_full_ip4_address (parsed, network_file, -1, addr, &err);
+ addr = NULL;
+ ok = read_full_ip4_address (parsed, network_file, -1, base_addr, &addr, NULL, &err);
svCloseFile (parsed);
if (ok) {
- if (!NM_UTILS_PRIVATE_CALL (nm_setting_ip4_config_add_address_with_label (s_ip4, addr, device)))
+ nm_ip_address_set_attribute (addr, "label", g_variant_new_string (device));
+ if (!nm_setting_ip_config_add_address (s_ip4, addr))
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);
+ nm_ip_address_unref (addr);
g_free (device);
g_free (full_path);
@@ -1603,10 +1243,9 @@ read_aliases (NMSettingIP4Config *s_ip4, const char *filename, const char *netwo
static NMSetting *
make_ip6_setting (shvarFile *ifcfg,
const char *network_file,
- const char *iscsiadm_path,
GError **error)
{
- NMSettingIP6Config *s_ip6 = NULL;
+ NMSettingIPConfig *s_ip6 = NULL;
char *value = NULL;
char *str_value;
char *route6_path = NULL;
@@ -1621,7 +1260,7 @@ make_ip6_setting (shvarFile *ifcfg,
char *ip6_privacy_str;
NMSettingIP6ConfigPrivacy ip6_privacy_val;
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new ();
/* 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
@@ -1718,11 +1357,11 @@ make_ip6_setting (shvarFile *ifcfg,
g_free (ip6_privacy_str);
g_object_set (s_ip6,
- NM_SETTING_IP6_CONFIG_METHOD, method,
- NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS, !svTrueValue (ifcfg, "IPV6_PEERDNS", TRUE),
- NM_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES, !svTrueValue (ifcfg, "IPV6_PEERROUTES", TRUE),
- NM_SETTING_IP6_CONFIG_NEVER_DEFAULT, never_default,
- NM_SETTING_IP6_CONFIG_MAY_FAIL, !svTrueValue (ifcfg, "IPV6_FAILURE_FATAL", FALSE),
+ NM_SETTING_IP_CONFIG_METHOD, method,
+ NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS, !svTrueValue (ifcfg, "IPV6_PEERDNS", TRUE),
+ NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES, !svTrueValue (ifcfg, "IPV6_PEERROUTES", TRUE),
+ NM_SETTING_IP_CONFIG_NEVER_DEFAULT, never_default,
+ NM_SETTING_IP_CONFIG_MAY_FAIL, !svTrueValue (ifcfg, "IPV6_FAILURE_FATAL", FALSE),
NM_SETTING_IP6_CONFIG_IP6_PRIVACY, ip6_privacy_val,
NULL);
@@ -1735,7 +1374,7 @@ make_ip6_setting (shvarFile *ifcfg,
/* METHOD_AUTO may trigger DHCPv6, so save the hostname to send to DHCP */
value = svGetValue (ifcfg, "DHCP_HOSTNAME", FALSE);
if (value && value[0])
- g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_DHCP_HOSTNAME, value, NULL);
+ g_object_set (s_ip6, NM_SETTING_IP_CONFIG_DHCP_HOSTNAME, value, NULL);
g_free (value);
}
@@ -1757,26 +1396,51 @@ make_ip6_setting (shvarFile *ifcfg,
list = g_strsplit_set (value, " ", 0);
g_free (value);
for (iter = list, i = 0; iter && *iter; iter++, i++) {
- NMIP6Address *addr = NULL;
+ NMIPAddress *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))
+ if (!nm_setting_ip_config_add_address (s_ip6, addr))
PARSE_WARNING ("duplicate IP6 address");
- nm_ip6_address_unref (addr);
+ nm_ip_address_unref (addr);
}
g_strfreev (list);
+ /* Gateway */
+ if (nm_setting_ip_config_get_num_addresses (s_ip6)) {
+ value = svGetValue (ifcfg, "IPV6_DEFAULTGW", FALSE);
+ if (!value) {
+ /* If no gateway in the ifcfg, try global /etc/sysconfig/network instead */
+ network_ifcfg = svOpenFile (network_file, NULL);
+ if (network_ifcfg) {
+ value = svGetValue (network_ifcfg, "IPV6_DEFAULTGW", FALSE);
+ svCloseFile (network_ifcfg);
+ }
+ }
+ if (value) {
+ char *ptr;
+ if ((ptr = strchr (value, '%')) != NULL)
+ *ptr = '\0'; /* remove %interface prefix if present */
+ if (!nm_utils_ipaddr_valid (AF_INET6, value)) {
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "Invalid IP6 address '%s'", value);
+ g_free (value);
+ goto error;
+ }
+
+ g_object_set (s_ip6, NM_SETTING_IP_CONFIG_GATEWAY, value, NULL);
+ g_free (value);
+ }
+ }
+
/* DNS servers
* Pick up just IPv6 addresses (IPv4 addresses are taken by make_ip4_setting())
*/
for (i = 1; i <= 10; i++) {
char *tag;
- struct in6_addr ip6_dns;
- guint32 ip4_addr;
tag = g_strdup_printf ("DNS%u", i);
value = svGetValue (ifcfg, tag, FALSE);
@@ -1785,30 +1449,28 @@ make_ip6_setting (shvarFile *ifcfg,
break; /* all done */
}
- 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))
+ if (nm_utils_ipaddr_valid (AF_INET6, value)) {
+ if (!nm_setting_ip_config_add_dns (s_ip6, value))
PARSE_WARNING ("duplicate DNS server %s", tag);
+ } else if (nm_utils_ipaddr_valid (AF_INET, value)) {
+ /* Ignore IPv4 addresses */
} 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;
- }
+ PARSE_WARNING ("invalid DNS server address %s", value);
+ g_free (tag);
+ g_free (value);
+ goto error;
}
g_free (tag);
g_free (value);
}
- /* DNS searches ('DOMAIN' key) are read by make_ip4_setting() and included in NMSettingIP4Config */
+ /* DNS searches ('DOMAIN' key) are read by make_ip4_setting() and included in NMSettingIPConfig */
/* Read static routes from route6-<interface> file */
route6_path = utils_get_route6_path (ifcfg->fileName);
if (!route6_path) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Could not get route6 file path for '%s'", ifcfg->fileName);
goto error;
}
@@ -1929,7 +1591,7 @@ read_dcb_app (shvarFile *ifcfg,
if (success)
success = (priority >= 0 && priority <= 7);
if (!success) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Invalid %s value '%s' (expected 0 - 7)",
tmp, val);
}
@@ -1978,7 +1640,8 @@ read_dcb_bool_array (shvarFile *ifcfg,
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");
+ g_set_error_literal (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "boolean array must be 8 characters");
goto out;
}
@@ -1986,7 +1649,8 @@ read_dcb_bool_array (shvarFile *ifcfg,
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");
+ g_set_error_literal (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "invalid boolean digit");
goto out;
}
set_func (s_dcb, i, (val[i] == '1'));
@@ -2027,7 +1691,8 @@ read_dcb_uint_array (shvarFile *ifcfg,
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");
+ g_set_error_literal (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "uint array must be 8 characters");
goto out;
}
@@ -2040,7 +1705,8 @@ read_dcb_uint_array (shvarFile *ifcfg,
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");
+ g_set_error_literal (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "invalid uint digit");
goto out;
}
}
@@ -2081,14 +1747,16 @@ read_dcb_percent_array (shvarFile *ifcfg,
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");
+ g_set_error_literal (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "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");
+ g_set_error_literal (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "invalid percent element");
goto out;
}
set_func (s_dcb, i, (guint) tmp);
@@ -2097,7 +1765,8 @@ read_dcb_percent_array (shvarFile *ifcfg,
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");
+ g_set_error_literal (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "invalid percentage sum");
goto out;
}
@@ -2146,7 +1815,8 @@ make_dcb_setting (shvarFile *ifcfg,
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_set_error_literal (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "invalid FCoE mode");
g_free (val);
g_object_unref (s_dcb);
return FALSE;
@@ -2297,7 +1967,7 @@ add_one_wep_key (shvarFile *ifcfg,
while (*p) {
if (!g_ascii_isxdigit (*p)) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Invalid hexadecimal WEP key.");
goto out;
}
@@ -2311,7 +1981,7 @@ add_one_wep_key (shvarFile *ifcfg,
while (*p) {
if (!g_ascii_isprint ((int) (*p))) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Invalid ASCII WEP key.");
goto out;
}
@@ -2333,7 +2003,8 @@ add_one_wep_key (shvarFile *ifcfg,
g_free (key);
success = TRUE;
} else
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0, "Invalid WEP key length.");
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "Invalid WEP key length.");
out:
g_free (value);
@@ -2418,7 +2089,7 @@ make_wep_setting (shvarFile *ifcfg,
default_key_idx--; /* convert to [0...3] */
g_object_set (s_wsec, NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX, default_key_idx, NULL);
} else {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Invalid default WEP key '%s'", value);
g_free (value);
goto error;
@@ -2459,7 +2130,7 @@ make_wep_setting (shvarFile *ifcfg,
} else if (!strcmp (lcase, "restricted")) {
g_object_set (s_wsec, NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "shared", NULL);
} else {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Invalid WEP authentication algorithm '%s'",
lcase);
g_free (lcase);
@@ -2481,7 +2152,7 @@ make_wep_setting (shvarFile *ifcfg,
auth_alg = nm_setting_wireless_security_get_auth_alg (s_wsec);
if (auth_alg && !strcmp (auth_alg, "shared")) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"WEP Shared Key authentication is invalid for "
"unencrypted connections.");
goto error;
@@ -2570,7 +2241,7 @@ fill_wpa_ciphers (shvarFile *ifcfg,
static char *
parse_wpa_psk (shvarFile *ifcfg,
const char *file,
- const GByteArray *ssid,
+ GBytes *ssid,
GError **error)
{
shvarFile *keys_ifcfg;
@@ -2609,7 +2280,7 @@ parse_wpa_psk (shvarFile *ifcfg,
/* Verify the hex PSK; 64 digits */
while (*p) {
if (!g_ascii_isxdigit (*p++)) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Invalid WPA_PSK (contains non-hexadecimal characters)");
goto out;
}
@@ -2627,7 +2298,7 @@ parse_wpa_psk (shvarFile *ifcfg,
/* Length check */
if (strlen (hashed) < 8 || strlen (hashed) > 63) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Invalid WPA_PSK (passphrases must be between "
"8 and 63 characters long (inclusive))");
g_free (hashed);
@@ -2637,7 +2308,7 @@ parse_wpa_psk (shvarFile *ifcfg,
}
if (!hashed) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Invalid WPA_PSK (doesn't look like a passphrase or hex key)");
goto out;
}
@@ -2660,7 +2331,7 @@ eap_simple_reader (const char *eap_method,
value = svGetValue (ifcfg, "IEEE_8021X_IDENTITY", FALSE);
if (!value) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Missing IEEE_8021X_IDENTITY for EAP method '%s'.",
eap_method);
return FALSE;
@@ -2680,7 +2351,7 @@ eap_simple_reader (const char *eap_method,
}
if (!value) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Missing IEEE_8021X_PASSWORD for EAP method '%s'.",
eap_method);
return FALSE;
@@ -2741,7 +2412,7 @@ eap_tls_reader (const char *eap_method,
value = svGetValue (ifcfg, "IEEE_8021X_IDENTITY", FALSE);
if (!value) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Missing IEEE_8021X_IDENTITY for EAP method '%s'.",
eap_method);
return FALSE;
@@ -2788,7 +2459,7 @@ eap_tls_reader (const char *eap_method,
}
if (!privkey_password) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Missing %s for EAP method '%s'.",
pk_pw_key,
eap_method);
@@ -2799,7 +2470,7 @@ eap_tls_reader (const char *eap_method,
/* The private key itself */
privkey = svGetValue (ifcfg, pk_key, FALSE);
if (!privkey) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Missing %s for EAP method '%s'.",
pk_key,
eap_method);
@@ -2836,7 +2507,7 @@ eap_tls_reader (const char *eap_method,
|| privkey_format == NM_SETTING_802_1X_CK_FORMAT_X509) {
client_cert = svGetValue (ifcfg, cli_cert_key, FALSE);
if (!client_cert) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Missing %s for EAP method '%s'.",
cli_cert_key,
eap_method);
@@ -2912,7 +2583,7 @@ eap_peap_reader (const char *eap_method,
else if (!strcmp (peapver, "1"))
g_object_set (s_8021x, NM_SETTING_802_1X_PHASE1_PEAPVER, "1", NULL);
else {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Unknown IEEE_8021X_PEAP_VERSION value '%s'",
peapver);
goto done;
@@ -2928,7 +2599,7 @@ eap_peap_reader (const char *eap_method,
inner_auth = svGetValue (ifcfg, "IEEE_8021X_INNER_AUTH_METHODS", FALSE);
if (!inner_auth) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Missing IEEE_8021X_INNER_AUTH_METHODS.");
goto done;
}
@@ -2948,7 +2619,7 @@ eap_peap_reader (const char *eap_method,
if (!eap_tls_reader (*iter, ifcfg, keys, s_8021x, TRUE, error))
goto done;
} else {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Unknown IEEE_8021X_INNER_AUTH_METHOD '%s'.",
*iter);
goto done;
@@ -2961,7 +2632,7 @@ eap_peap_reader (const char *eap_method,
}
if (!nm_setting_802_1x_get_phase2_auth (s_8021x)) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"No valid IEEE_8021X_INNER_AUTH_METHODS found.");
goto done;
}
@@ -3015,7 +2686,7 @@ eap_ttls_reader (const char *eap_method,
tmp = svGetValue (ifcfg, "IEEE_8021X_INNER_AUTH_METHODS", FALSE);
if (!tmp) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Missing IEEE_8021X_INNER_AUTH_METHODS.");
goto done;
}
@@ -3047,7 +2718,7 @@ eap_ttls_reader (const char *eap_method,
goto done;
g_object_set (s_8021x, NM_SETTING_802_1X_PHASE2_AUTHEAP, (*iter + STRLEN ("eap-")), NULL);
} else {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Unknown IEEE_8021X_INNER_AUTH_METHOD '%s'.",
*iter);
goto done;
@@ -3115,7 +2786,7 @@ eap_fast_reader (const char *eap_method,
g_object_set (s_8021x, NM_SETTING_802_1X_PHASE1_FAST_PROVISIONING, pac_prov_str, NULL);
if (!pac_file && !(allow_unauth || allow_auth)) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"IEEE_8021X_PAC_FILE not provided and EAP-FAST automatic PAC provisioning disabled.");
goto done;
}
@@ -3126,7 +2797,7 @@ eap_fast_reader (const char *eap_method,
inner_auth = svGetValue (ifcfg, "IEEE_8021X_INNER_AUTH_METHODS", FALSE);
if (!inner_auth) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Missing IEEE_8021X_INNER_AUTH_METHODS.");
goto done;
}
@@ -3142,7 +2813,7 @@ eap_fast_reader (const char *eap_method,
if (!eap_simple_reader (*iter, ifcfg, keys, s_8021x, TRUE, error))
goto done;
} else {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Unknown IEEE_8021X_INNER_AUTH_METHOD '%s'.",
*iter);
goto done;
@@ -3155,7 +2826,7 @@ eap_fast_reader (const char *eap_method,
}
if (!nm_setting_802_1x_get_phase2_auth (s_8021x)) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"No valid IEEE_8021X_INNER_AUTH_METHODS found.");
goto done;
}
@@ -3205,8 +2876,7 @@ read_8021x_list_value (shvarFile *ifcfg,
const char *prop_name)
{
char *value;
- char **strv, **iter;
- GSList *gslist = NULL;
+ char **strv;
g_return_if_fail (ifcfg != NULL);
g_return_if_fail (ifcfg_var_name != NULL);
@@ -3217,16 +2887,8 @@ read_8021x_list_value (shvarFile *ifcfg,
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);
- }
+ if (strv && strv[0])
+ g_object_set (setting, prop_name, strv, NULL);
g_strfreev (strv);
g_free (value);
}
@@ -3245,7 +2907,7 @@ fill_8021x (shvarFile *ifcfg,
value = svGetValue (ifcfg, "IEEE_8021X_EAP_METHODS", FALSE);
if (!value) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Missing IEEE_8021X_EAP_METHODS for key management '%s'",
key_mgmt);
return NULL;
@@ -3266,7 +2928,7 @@ fill_8021x (shvarFile *ifcfg,
char *lower = NULL;
lower = g_ascii_strdown (*iter, -1);
- while (eap->method && !found) {
+ while (eap->method) {
if (strcmp (eap->method, lower))
goto next;
@@ -3287,6 +2949,7 @@ fill_8021x (shvarFile *ifcfg,
}
nm_setting_802_1x_add_eap_method (s_8021x, lower);
found = TRUE;
+ break;
next:
eap++;
@@ -3298,7 +2961,7 @@ fill_8021x (shvarFile *ifcfg,
}
if (nm_setting_802_1x_get_num_eap_methods (s_8021x) == 0) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"No valid EAP methods found in IEEE_8021X_EAP_METHODS.");
goto error;
}
@@ -3334,7 +2997,7 @@ error:
static NMSetting *
make_wpa_setting (shvarFile *ifcfg,
const char *file,
- const GByteArray *ssid,
+ GBytes *ssid,
gboolean adhoc,
NMSetting8021x **s_8021x,
GError **error)
@@ -3408,7 +3071,7 @@ make_wpa_setting (shvarFile *ifcfg,
} else if (!strcmp (value, "WPA-EAP") || !strcmp (value, "IEEE8021X")) {
/* Adhoc mode is mutually exclusive with any 802.1x-based authentication */
if (adhoc) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Ad-Hoc mode cannot be used with KEY_MGMT type '%s'", value);
goto error;
}
@@ -3421,7 +3084,7 @@ make_wpa_setting (shvarFile *ifcfg,
g_object_set (wsec, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, lower, NULL);
g_free (lower);
} else {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Unknown wireless KEY_MGMT type '%s'", value);
goto error;
}
@@ -3480,7 +3143,7 @@ make_leap_setting (shvarFile *ifcfg,
value = svGetValue (ifcfg, "IEEE_8021X_IDENTITY", FALSE);
if (!value || !strlen (value)) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Missing LEAP identity");
goto error;
}
@@ -3504,7 +3167,7 @@ error:
static NMSetting *
make_wireless_security_setting (shvarFile *ifcfg,
const char *file,
- const GByteArray *ssid,
+ GBytes *ssid,
gboolean adhoc,
NMSetting8021x **s_8021x,
GError **error)
@@ -3534,118 +3197,110 @@ make_wireless_security_setting (shvarFile *ifcfg,
return NULL; /* unencrypted */
}
+static char **
+transform_hwaddr_blacklist (const char *blacklist)
+{
+ char **strv, **iter;
+ int shift = 0;
+
+ strv = _nm_utils_strsplit_set (blacklist, " \t", 0);
+ for (iter = strv; iter && *iter; iter++) {
+ if (shift) {
+ *(iter - shift) = *iter;
+ *iter = NULL;
+ }
+ if (!nm_utils_hwaddr_valid (*(iter - shift), ETH_ALEN)) {
+ PARSE_WARNING ("invalid MAC in HWADDR_BLACKLIST '%s'", *(iter - shift));
+ g_free (*(iter - shift));
+ *(iter - shift) = NULL;
+ shift++;
+ }
+ }
+ return strv;
+}
+
static NMSetting *
make_wireless_setting (shvarFile *ifcfg,
GError **error)
{
NMSettingWireless *s_wireless;
- GByteArray *array = NULL;
- GSList *macaddr_blacklist = NULL;
- char *value;
+ char *value = NULL;
+ gint64 chan = 0;
s_wireless = NM_SETTING_WIRELESS (nm_setting_wireless_new ());
- if (read_mac_address (ifcfg, "HWADDR", ARPHRD_ETHER, &array, error)) {
- if (array) {
- g_object_set (s_wireless, NM_SETTING_WIRELESS_MAC_ADDRESS, array, NULL);
- g_byte_array_free (array, TRUE);
- }
- } else {
- g_object_unref (s_wireless);
- return NULL;
+ value = svGetValue (ifcfg, "HWADDR", FALSE);
+ if (value) {
+ value = g_strstrip (value);
+ g_object_set (s_wireless, NM_SETTING_WIRELESS_MAC_ADDRESS, value, NULL);
+ g_free (value);
}
- array = NULL;
- if (read_mac_address (ifcfg, "MACADDR", ARPHRD_ETHER, &array, error)) {
- if (array) {
- g_object_set (s_wireless, NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, array, NULL);
- g_byte_array_free (array, TRUE);
- }
- } else {
- PARSE_WARNING ("%s", (*error)->message);
- g_clear_error (error);
+ value = svGetValue (ifcfg, "MACADDR", FALSE);
+ if (value) {
+ value = g_strstrip (value);
+ g_object_set (s_wireless, NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, value, NULL);
+ g_free (value);
}
value = svGetValue (ifcfg, "HWADDR_BLACKLIST", FALSE);
if (value) {
- char **list = NULL, **iter;
- struct ether_addr addr;
+ char **strv;
- list = g_strsplit_set (value, " \t", 0);
- for (iter = list; iter && *iter; iter++) {
- if (**iter == '\0')
- continue;
- if (!ether_aton_r (*iter, &addr)) {
- PARSE_WARNING ("invalid MAC in HWADDR_BLACKLIST '%s'", *iter);
- continue;
- }
- macaddr_blacklist = g_slist_prepend (macaddr_blacklist, *iter);
- }
- if (macaddr_blacklist) {
- macaddr_blacklist = g_slist_reverse (macaddr_blacklist);
- g_object_set (s_wireless, NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST, macaddr_blacklist, NULL);
- g_slist_free (macaddr_blacklist);
- }
+ strv = transform_hwaddr_blacklist (value);
+ g_object_set (s_wireless, NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST, strv, NULL);
+ g_strfreev (strv);
g_free (value);
- g_strfreev (list);
}
value = svGetValue (ifcfg, "ESSID", TRUE);
if (value) {
- gsize ssid_len = 0, value_len = strlen (value);
- char *p = value, *tmp;
- char buf[33];
+ GBytes *bytes = NULL;
+ gsize ssid_len = 0;
+ gsize value_len = strlen (value);
- ssid_len = value_len;
if ( (value_len >= 2)
&& (value[0] == '"')
&& (value[value_len - 1] == '"')) {
/* Strip the quotes and unescape */
- p = value + 1;
+ char *p = value + 1;
+
value[value_len - 1] = '\0';
svUnescape (p);
- ssid_len = strlen (p);
+ bytes = g_bytes_new (p, strlen (p));
} else if ((value_len > 2) && (strncmp (value, "0x", 2) == 0)) {
/* Hex representation */
if (value_len % 2) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Invalid SSID '%s' size (looks like hex but length not multiple of 2)",
value);
g_free (value);
goto error;
}
- p = value + 2;
- while (*p) {
- if (!g_ascii_isxdigit (*p)) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
- "Invalid SSID '%s' character (looks like hex SSID but '%c' isn't a hex digit)",
- value, *p);
- g_free (value);
- goto error;
- }
- p++;
+ bytes = nm_utils_hexstr2bin (value);
+ if (!bytes) {
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "Invalid SSID '%s' (looks like hex SSID but isn't)",
+ value);
+ g_free (value);
+ goto error;
}
+ } else
+ bytes = g_bytes_new (value, value_len);
- tmp = nm_utils_hexstr2bin (value + 2, value_len - 2);
- ssid_len = (value_len - 2) / 2;
- memcpy (buf, tmp, ssid_len);
- p = &buf[0];
- g_free (tmp);
- }
-
+ ssid_len = g_bytes_get_size (bytes);
if (ssid_len > 32 || ssid_len == 0) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Invalid SSID '%s' (size %zu not between 1 and 32 inclusive)",
value, ssid_len);
+ g_bytes_unref (bytes);
g_free (value);
goto error;
}
- array = g_byte_array_sized_new (ssid_len);
- g_byte_array_append (array, (const guint8 *) p, ssid_len);
- g_object_set (s_wireless, NM_SETTING_WIRELESS_SSID, array, NULL);
- g_byte_array_free (array, TRUE);
+ g_object_set (s_wireless, NM_SETTING_WIRELESS_SSID, bytes, NULL);
+ g_bytes_unref (bytes);
g_free (value);
}
@@ -3659,11 +3314,13 @@ make_wireless_setting (shvarFile *ifcfg,
if (!strcmp (lcase, "ad-hoc")) {
mode = "adhoc";
+ } else if (!strcmp (lcase, "ap")) {
+ mode = "ap";
} else if (!strcmp (lcase, "managed") || !strcmp (lcase, "auto")) {
mode = "infrastructure";
} else {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
- "Invalid mode '%s' (not 'Ad-Hoc', 'Managed', or 'Auto')",
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "Invalid mode '%s' (not 'Ad-Hoc', 'Ap', 'Managed', or 'Auto')",
lcase);
g_free (lcase);
goto error;
@@ -3675,39 +3332,54 @@ make_wireless_setting (shvarFile *ifcfg,
value = svGetValue (ifcfg, "BSSID", FALSE);
if (value) {
- GByteArray *bssid;
-
- bssid = nm_utils_hwaddr_atoba (value, ARPHRD_ETHER);
- if (!bssid) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
- "Invalid BSSID '%s'", value);
- g_free (value);
- goto error;
- }
-
- g_object_set (s_wireless, NM_SETTING_WIRELESS_BSSID, bssid, NULL);
- g_byte_array_free (bssid, TRUE);
+ value = g_strstrip (value);
+ g_object_set (s_wireless, NM_SETTING_WIRELESS_BSSID, value, NULL);
g_free (value);
}
value = svGetValue (ifcfg, "CHANNEL", FALSE);
if (value) {
- long int chan;
-
errno = 0;
- chan = strtol (value, NULL, 10);
- if (errno || chan <= 0 || chan > 196) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ chan = nm_utils_ascii_str_to_int64 (value, 10, 1, 196, 0);
+ if (errno || (chan == 0)) {
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Invalid wireless channel '%s'", value);
g_free (value);
goto error;
}
g_object_set (s_wireless, NM_SETTING_WIRELESS_CHANNEL, (guint32) chan, NULL);
+ g_free (value);
+ }
+
+ value = svGetValue (ifcfg, "BAND", FALSE);
+ if (value) {
+ if (!strcmp (value, "a")) {
+ if (chan && chan <= 14) {
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "Band '%s' invalid for channel %u", value, (guint32) chan);
+ g_free (value);
+ goto error;
+ }
+ } else if (!strcmp (value, "bg")) {
+ if (chan && chan > 14) {
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "Band '%s' invalid for channel %u", value, (guint32) chan);
+ g_free (value);
+ goto error;
+ }
+ } else {
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "Invalid wireless band '%s'", value);
+ g_free (value);
+ goto error;
+ }
+ g_object_set (s_wireless, NM_SETTING_WIRELESS_BAND, value, NULL);
+ g_free (value);
+ } else if (chan > 0) {
if (chan > 14)
g_object_set (s_wireless, NM_SETTING_WIRELESS_BAND, "a", NULL);
else
g_object_set (s_wireless, NM_SETTING_WIRELESS_BAND, "bg", NULL);
- g_free (value);
}
value = svGetValue (ifcfg, "MTU", FALSE);
@@ -3717,7 +3389,7 @@ make_wireless_setting (shvarFile *ifcfg,
errno = 0;
mtu = strtol (value, NULL, 10);
if (errno || mtu < 0 || mtu > 50000) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Invalid wireless MTU '%s'", value);
g_free (value);
goto error;
@@ -3748,7 +3420,7 @@ wireless_connection_from_ifcfg (const char *file,
NMSetting *con_setting = NULL;
NMSetting *wireless_setting = NULL;
NMSetting8021x *s_8021x = NULL;
- const GByteArray *ssid;
+ GBytes *ssid;
NMSetting *security_setting = NULL;
char *printable_ssid = NULL;
const char *mode;
@@ -3759,7 +3431,7 @@ wireless_connection_from_ifcfg (const char *file,
g_return_val_if_fail (error != NULL, NULL);
g_return_val_if_fail (*error == NULL, NULL);
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Wireless */
wireless_setting = make_wireless_setting (ifcfg, error);
@@ -3770,9 +3442,10 @@ wireless_connection_from_ifcfg (const char *file,
nm_connection_add_setting (connection, wireless_setting);
ssid = nm_setting_wireless_get_ssid (NM_SETTING_WIRELESS (wireless_setting));
- if (ssid)
- printable_ssid = nm_utils_ssid_to_utf8 (ssid);
- else
+ if (ssid) {
+ printable_ssid = nm_utils_ssid_to_utf8 (g_bytes_get_data (ssid, NULL),
+ g_bytes_get_size (ssid));
+ } else
printable_ssid = g_strdup_printf ("unmanaged");
mode = nm_setting_wireless_get_mode (NM_SETTING_WIRELESS (wireless_setting));
@@ -3798,18 +3471,13 @@ wireless_connection_from_ifcfg (const char *file,
printable_ssid, NULL);
g_free (printable_ssid);
if (!con_setting) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Failed to create connection setting.");
g_object_unref (connection);
return NULL;
}
nm_connection_add_setting (connection, con_setting);
- if (!nm_connection_verify (connection, error)) {
- g_object_unref (connection);
- return NULL;
- }
-
return connection;
}
@@ -3822,8 +3490,6 @@ make_wired_setting (shvarFile *ifcfg,
NMSettingWired *s_wired;
char *value = NULL;
int mtu;
- GByteArray *mac = NULL;
- GSList *macaddr_blacklist = NULL;
char *nettype;
s_wired = NM_SETTING_WIRED (nm_setting_wired_new ());
@@ -3840,14 +3506,11 @@ make_wired_setting (shvarFile *ifcfg,
g_free (value);
}
- if (read_mac_address (ifcfg, "HWADDR", ARPHRD_ETHER, &mac, error)) {
- if (mac) {
- g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, mac, NULL);
- g_byte_array_free (mac, TRUE);
- }
- } else {
- g_object_unref (s_wired);
- return NULL;
+ value = svGetValue (ifcfg, "HWADDR", FALSE);
+ if (value) {
+ value = g_strstrip (value);
+ g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, value, NULL);
+ g_free (value);
}
value = svGetValue (ifcfg, "SUBCHANNELS", FALSE);
@@ -3874,17 +3537,8 @@ make_wired_setting (shvarFile *ifcfg,
if (num_chans < 2 || num_chans > 3) {
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);
-
- g_ptr_array_add (array, chans[0]);
- g_ptr_array_add (array, chans[1]);
- if (num_chans == 3)
- g_ptr_array_add (array, chans[2]);
-
- g_object_set (s_wired, NM_SETTING_WIRED_S390_SUBCHANNELS, array, NULL);
- g_ptr_array_free (array, TRUE);
- }
+ } else
+ g_object_set (s_wired, NM_SETTING_WIRED_S390_SUBCHANNELS, chans, NULL);
g_strfreev (chans);
}
g_free (value);
@@ -3931,39 +3585,21 @@ make_wired_setting (shvarFile *ifcfg,
}
g_free (value);
- mac = NULL;
- if (read_mac_address (ifcfg, "MACADDR", ARPHRD_ETHER, &mac, error)) {
- if (mac) {
- g_object_set (s_wired, NM_SETTING_WIRED_CLONED_MAC_ADDRESS, mac, NULL);
- g_byte_array_free (mac, TRUE);
- }
- } else {
- PARSE_WARNING ("%s", (*error)->message);
- g_clear_error (error);
+ value = svGetValue (ifcfg, "MACADDR", FALSE);
+ if (value) {
+ value = g_strstrip (value);
+ g_object_set (s_wired, NM_SETTING_WIRED_CLONED_MAC_ADDRESS, value, NULL);
+ g_free (value);
}
value = svGetValue (ifcfg, "HWADDR_BLACKLIST", FALSE);
if (value) {
- char **list = NULL, **iter;
- struct ether_addr addr;
+ char **strv;
- list = g_strsplit_set (value, " \t", 0);
- for (iter = list; iter && *iter; iter++) {
- if (**iter == '\0')
- continue;
- if (!ether_aton_r (*iter, &addr)) {
- PARSE_WARNING ("invalid MAC in HWADDR_BLACKLIST '%s'", *iter);
- continue;
- }
- macaddr_blacklist = g_slist_prepend (macaddr_blacklist, *iter);
- }
- if (macaddr_blacklist) {
- macaddr_blacklist = g_slist_reverse (macaddr_blacklist);
- g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST, macaddr_blacklist, NULL);
- g_slist_free (macaddr_blacklist);
- }
+ strv = transform_hwaddr_blacklist (value);
+ g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST, strv, NULL);
+ g_strfreev (strv);
g_free (value);
- g_strfreev (list);
}
value = svGetValue (ifcfg, "KEY_MGMT", FALSE);
@@ -3973,7 +3609,7 @@ make_wired_setting (shvarFile *ifcfg,
if (!*s_8021x)
goto error;
} else {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Unknown wired KEY_MGMT type '%s'", value);
goto error;
}
@@ -4001,11 +3637,11 @@ wired_connection_from_ifcfg (const char *file,
g_return_val_if_fail (file != NULL, NULL);
g_return_val_if_fail (ifcfg != NULL, NULL);
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
con_setting = make_connection_setting (file, ifcfg, NM_SETTING_WIRED_SETTING_NAME, NULL, NULL);
if (!con_setting) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Failed to create connection setting.");
g_object_unref (connection);
return NULL;
@@ -4024,11 +3660,6 @@ wired_connection_from_ifcfg (const char *file,
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;
}
@@ -4091,7 +3722,7 @@ parse_infiniband_p_key (shvarFile *ifcfg,
g_free (ifname);
if (!ret) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Failed to create InfiniBand setting.");
}
return ret;
@@ -4105,7 +3736,6 @@ make_infiniband_setting (shvarFile *ifcfg,
{
NMSettingInfiniband *s_infiniband;
char *value = NULL;
- GByteArray *mac = NULL;
int mtu;
s_infiniband = NM_SETTING_INFINIBAND (nm_setting_infiniband_new ());
@@ -4122,14 +3752,11 @@ make_infiniband_setting (shvarFile *ifcfg,
g_free (value);
}
- if (read_mac_address (ifcfg, "HWADDR", ARPHRD_INFINIBAND, &mac, error)) {
- if (mac) {
- g_object_set (s_infiniband, NM_SETTING_INFINIBAND_MAC_ADDRESS, mac, NULL);
- g_byte_array_free (mac, TRUE);
- }
- } else {
- g_object_unref (s_infiniband);
- return NULL;
+ value = svGetValue (ifcfg, "HWADDR", FALSE);
+ if (value) {
+ value = g_strstrip (value);
+ g_object_set (s_infiniband, NM_SETTING_INFINIBAND_MAC_ADDRESS, value, NULL);
+ g_free (value);
}
if (svTrueValue (ifcfg, "CONNECTED_MODE", FALSE))
@@ -4167,11 +3794,11 @@ infiniband_connection_from_ifcfg (const char *file,
g_return_val_if_fail (file != NULL, NULL);
g_return_val_if_fail (ifcfg != NULL, NULL);
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
con_setting = make_connection_setting (file, ifcfg, NM_SETTING_INFINIBAND_SETTING_NAME, NULL, NULL);
if (!con_setting) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Failed to create connection setting.");
g_object_unref (connection);
return NULL;
@@ -4187,11 +3814,6 @@ infiniband_connection_from_ifcfg (const char *file,
}
nm_connection_add_setting (connection, infiniband_setting);
- if (!nm_connection_verify (connection, error)) {
- g_object_unref (connection);
- return NULL;
- }
-
return connection;
}
@@ -4232,11 +3854,10 @@ make_bond_setting (shvarFile *ifcfg,
value = svGetValue (ifcfg, "DEVICE", FALSE);
if (!value || !strlen (value)) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0, "mandatory DEVICE keyword missing");
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "mandatory DEVICE keyword missing");
goto error;
}
-
- g_object_set (s_bond, NM_SETTING_BOND_INTERFACE_NAME, value, NULL);
g_free (value);
value = svGetValue (ifcfg, "BONDING_OPTS", FALSE);
@@ -4284,11 +3905,11 @@ bond_connection_from_ifcfg (const char *file,
g_return_val_if_fail (file != NULL, NULL);
g_return_val_if_fail (ifcfg != NULL, NULL);
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
con_setting = make_connection_setting (file, ifcfg, NM_SETTING_BOND_SETTING_NAME, NULL, _("Bond"));
if (!con_setting) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Failed to create connection setting.");
g_object_unref (connection);
return NULL;
@@ -4312,11 +3933,6 @@ bond_connection_from_ifcfg (const char *file,
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;
}
@@ -4338,7 +3954,8 @@ read_team_config (shvarFile *ifcfg, const char *key, GError **error)
*/
l = strlen (value);
if (l > 20000) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0, "%s too long (size %zd)", key, l);
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "%s too long (size %zd)", key, l);
g_free (value);
return NULL;
}
@@ -4359,11 +3976,10 @@ make_team_setting (shvarFile *ifcfg,
value = svGetValue (ifcfg, "DEVICE", FALSE);
if (!value || !strlen (value)) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0, "mandatory DEVICE keyword missing");
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "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);
@@ -4395,11 +4011,11 @@ team_connection_from_ifcfg (const char *file,
g_return_val_if_fail (file != NULL, NULL);
g_return_val_if_fail (ifcfg != NULL, NULL);
- connection = nm_connection_new ();
+ connection = nm_simple_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,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Failed to create connection setting.");
g_object_unref (connection);
return NULL;
@@ -4423,11 +4039,6 @@ team_connection_from_ifcfg (const char *file,
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;
}
@@ -4511,27 +4122,22 @@ 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 ());
value = svGetValue (ifcfg, "DEVICE", FALSE);
if (!value || !strlen (value)) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0, "mandatory DEVICE keyword missing");
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "mandatory DEVICE keyword missing");
goto error;
}
-
- 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, "MACADDR", FALSE);
+ if (value) {
+ value = g_strstrip (value);
+ g_object_set (s_bridge, NM_SETTING_BRIDGE_MAC_ADDRESS, value, NULL);
+ g_free (value);
}
value = svGetValue (ifcfg, "STP", FALSE);
@@ -4590,11 +4196,11 @@ bridge_connection_from_ifcfg (const char *file,
g_return_val_if_fail (file != NULL, NULL);
g_return_val_if_fail (ifcfg != NULL, NULL);
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
con_setting = make_connection_setting (file, ifcfg, NM_SETTING_BRIDGE_SETTING_NAME, NULL, _("Bridge"));
if (!con_setting) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Failed to create connection setting.");
g_object_unref (connection);
return NULL;
@@ -4608,11 +4214,6 @@ bridge_connection_from_ifcfg (const char *file,
}
nm_connection_add_setting (connection, bridge_setting);
- if (!nm_connection_verify (connection, error)) {
- g_object_unref (connection);
- return NULL;
- }
-
return connection;
}
@@ -4757,8 +4358,6 @@ parse_prio_map_list (NMSettingVlan *s_vlan,
static NMSetting *
make_vlan_setting (shvarFile *ifcfg,
const char *file,
- char **out_master,
- NMSetting8021x **s_8021x,
GError **error)
{
NMSettingVlan *s_vlan = NULL;
@@ -4775,7 +4374,8 @@ make_vlan_setting (shvarFile *ifcfg,
errno = 0;
vlan_id = (gint) g_ascii_strtoll (value, NULL, 10);
if (vlan_id < 0 || vlan_id > 4096 || errno) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0, "Invalid VLAN_ID '%s'", value);
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "Invalid VLAN_ID '%s'", value);
g_free (value);
return NULL;
}
@@ -4785,7 +4385,7 @@ make_vlan_setting (shvarFile *ifcfg,
/* Need DEVICE if we don't have a separate VLAN_ID property */
iface_name = svGetValue (ifcfg, "DEVICE", FALSE);
if (!iface_name && vlan_id < 0) {
- g_set_error_literal (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error_literal (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Missing DEVICE property; cannot determine VLAN ID.");
return NULL;
}
@@ -4796,8 +4396,6 @@ make_vlan_setting (shvarFile *ifcfg,
parent = svGetValue (ifcfg, "PHYSDEV", FALSE);
if (iface_name) {
- g_object_set (s_vlan, NM_SETTING_VLAN_INTERFACE_NAME, iface_name, NULL);
-
p = strchr (iface_name, '.');
if (p) {
/* eth0.43; PHYSDEV is assumed from it if unknown */
@@ -4813,7 +4411,7 @@ make_vlan_setting (shvarFile *ifcfg,
}
p++;
} else {
- /* format like vlan43; PHYSDEV or MASTER must be set */
+ /* format like vlan43; PHYSDEV must be set */
if (g_str_has_prefix (iface_name, "vlan"))
p = iface_name + 4;
}
@@ -4824,7 +4422,7 @@ make_vlan_setting (shvarFile *ifcfg,
*/
vlan_id = (gint) g_ascii_strtoll (p, &end, 10);
if (vlan_id < 0 || vlan_id > 4095 || end == p || *end) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Failed to determine VLAN ID from DEVICE '%s'",
iface_name);
goto error;
@@ -4833,14 +4431,14 @@ make_vlan_setting (shvarFile *ifcfg,
}
if (vlan_id < 0) {
- g_set_error_literal (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error_literal (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Failed to determine VLAN ID from DEVICE or VLAN_ID.");
goto error;
}
g_object_set (s_vlan, NM_SETTING_VLAN_ID, vlan_id, NULL);
if (parent == NULL) {
- g_set_error_literal (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error_literal (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Failed to determine VLAN parent from DEVICE or PHYSDEV");
goto error;
}
@@ -4863,8 +4461,6 @@ make_vlan_setting (shvarFile *ifcfg,
parse_prio_map_list (s_vlan, ifcfg, "VLAN_INGRESS_PRIORITY_MAP", NM_VLAN_INGRESS_MAP);
parse_prio_map_list (s_vlan, ifcfg, "VLAN_EGRESS_PRIORITY_MAP", NM_VLAN_EGRESS_MAP);
- if (out_master)
- *out_master = svGetValue (ifcfg, "MASTER", FALSE);
return (NMSetting *) s_vlan;
error:
@@ -4884,38 +4480,30 @@ vlan_connection_from_ifcfg (const char *file,
NMSetting *wired_setting = NULL;
NMSetting *vlan_setting = NULL;
NMSetting8021x *s_8021x = NULL;
- char *master = NULL;
g_return_val_if_fail (file != NULL, NULL);
g_return_val_if_fail (ifcfg != NULL, NULL);
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
con_setting = make_connection_setting (file, ifcfg, NM_SETTING_VLAN_SETTING_NAME, NULL, "Vlan");
if (!con_setting) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
- "Failed to create connection setting.");
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "Failed to create connection setting.");
g_object_unref (connection);
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);
- vlan_setting = make_vlan_setting (ifcfg, file, &master, &s_8021x, error);
+ vlan_setting = make_vlan_setting (ifcfg, file, error);
if (!vlan_setting) {
g_object_unref (connection);
return NULL;
}
nm_connection_add_setting (connection, vlan_setting);
- /* Handle master interface or connection */
- if (master) {
- g_object_set (con_setting, NM_SETTING_CONNECTION_MASTER, master, NULL);
- g_object_set (con_setting,
- NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_VLAN_SETTING_NAME,
- NULL);
- g_free (master);
- }
-
wired_setting = make_wired_setting (ifcfg, file, &s_8021x, error);
if (!wired_setting) {
g_object_unref (connection);
@@ -4925,10 +4513,6 @@ vlan_connection_from_ifcfg (const char *file,
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;
}
@@ -4943,7 +4527,7 @@ create_unhandled_connection (const char *filename, shvarFile *ifcfg,
g_assert (out_spec != NULL);
- connection = nm_connection_new ();
+ connection = nm_simple_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
@@ -5004,7 +4588,7 @@ uuid_from_file (const char *filename)
uuid = svGetValue (ifcfg, "UUID", FALSE);
if (!uuid || !strlen (uuid)) {
g_free (uuid);
- uuid = nm_utils_uuid_generate_from_string (ifcfg->fileName);
+ uuid = nm_utils_uuid_generate_from_string (ifcfg->fileName, -1, NM_UTILS_UUID_TYPE_LEGACY, NULL);
}
svCloseFile (ifcfg);
@@ -5020,7 +4604,7 @@ check_dns_search_domains (shvarFile *ifcfg, NMSetting *s_ip4, NMSetting *s_ip6)
/* 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) {
+ if (!s_ip4 || nm_setting_ip_config_get_num_dns_searches (NM_SETTING_IP_CONFIG (s_ip4)) == 0) {
/* DNS searches */
char *value = svGetValue (ifcfg, "DOMAIN", FALSE);
if (value) {
@@ -5029,7 +4613,7 @@ check_dns_search_domains (shvarFile *ifcfg, NMSetting *s_ip4, NMSetting *s_ip6)
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))
+ if (!nm_setting_ip_config_add_dns_search (NM_SETTING_IP_CONFIG (s_ip6), *item))
PARSE_WARNING ("duplicate DNS domain '%s'", *item);
}
}
@@ -5044,7 +4628,6 @@ 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 **out_unhandled,
char **out_keyfile,
char **out_routefile,
@@ -5072,12 +4655,9 @@ connection_from_file (const char *filename,
if (!network_file)
network_file = SYSCONFDIR "/sysconfig/network";
- if (!iscsiadm_path)
- iscsiadm_path = "/sbin/iscsiadm";
-
ifcfg_name = utils_get_ifcfg_name (filename, TRUE);
if (!ifcfg_name) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Ignoring connection '%s' because it's not an ifcfg file.", filename);
return NULL;
}
@@ -5095,6 +4675,17 @@ connection_from_file (const char *filename,
goto done;
}
+ /* iBFT is handled by the iBFT settings plugin */
+ bootproto = svGetValue (parsed, "BOOTPROTO", FALSE);
+ if (bootproto && !g_ascii_strcasecmp (bootproto, "ibft")) {
+ if (out_ignore_error)
+ *out_ignore_error = TRUE;
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "Ignoring iBFT configuration");
+ g_free (bootproto);
+ goto done;
+ }
+
type = NULL;
devtype = svGetValue (parsed, "DEVICETYPE", FALSE);
@@ -5114,7 +4705,7 @@ connection_from_file (const char *filename,
device = svGetValue (parsed, "DEVICE", FALSE);
if (!device) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"File '%s' had neither TYPE nor DEVICE keys.", filename);
goto done;
}
@@ -5122,7 +4713,7 @@ connection_from_file (const char *filename,
if (!strcmp (device, "lo")) {
if (out_ignore_error)
*out_ignore_error = TRUE;
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Ignoring loopback device config.");
g_free (device);
goto done;
@@ -5156,7 +4747,7 @@ connection_from_file (const char *filename,
if (svTrueValue (parsed, "BONDING_MASTER", FALSE) &&
strcasecmp (type, TYPE_BOND)) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"BONDING_MASTER=yes key only allowed in TYPE=bond connections");
goto done;
}
@@ -5189,7 +4780,7 @@ connection_from_file (const char *filename,
if (!connection)
goto done;
- s_ip6 = make_ip6_setting (parsed, network_file, iscsiadm_path, error);
+ s_ip6 = make_ip6_setting (parsed, network_file, error);
if (!s_ip6) {
g_object_unref (connection);
connection = NULL;
@@ -5197,13 +4788,13 @@ connection_from_file (const char *filename,
} else
nm_connection_add_setting (connection, s_ip6);
- s_ip4 = make_ip4_setting (parsed, network_file, iscsiadm_path, error);
+ s_ip4 = make_ip4_setting (parsed, network_file, error);
if (!s_ip4) {
g_object_unref (connection);
connection = NULL;
goto done;
} else {
- read_aliases (NM_SETTING_IP4_CONFIG (s_ip4), filename, network_file);
+ read_aliases (NM_SETTING_IP_CONFIG (s_ip4), filename, network_file);
nm_connection_add_setting (connection, s_ip4);
}
@@ -5231,25 +4822,7 @@ connection_from_file (const char *filename,
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.
- */
- bootproto = svGetValue (parsed, "BOOTPROTO", FALSE);
- if ( bootproto
- && connection
- && !g_ascii_strcasecmp (bootproto, "ibft")) {
- NMSettingConnection *s_con;
-
- s_con = nm_connection_get_setting_connection (connection);
- g_assert (s_con);
-
- g_object_set (G_OBJECT (s_con), NM_SETTING_CONNECTION_READ_ONLY, TRUE, NULL);
- }
- g_free (bootproto);
-
- nm_utils_normalize_connection (connection, TRUE);
-
- if (!nm_connection_verify (connection, error)) {
+ if (!nm_connection_normalize (connection, NULL, NULL, error)) {
g_object_unref (connection);
connection = NULL;
}
diff --git a/src/settings/plugins/ifcfg-rh/reader.h b/src/settings/plugins/ifcfg-rh/reader.h
index 371f4504f..c23e5870e 100644
--- a/src/settings/plugins/ifcfg-rh/reader.h
+++ b/src/settings/plugins/ifcfg-rh/reader.h
@@ -29,7 +29,6 @@
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 **out_unhandled,
char **out_keyfile,
char **out_routefile,
diff --git a/src/settings/plugins/ifcfg-rh/shvar.c b/src/settings/plugins/ifcfg-rh/shvar.c
index 4e8e29ce5..6c9769b2c 100644
--- a/src/settings/plugins/ifcfg-rh/shvar.c
+++ b/src/settings/plugins/ifcfg-rh/shvar.c
@@ -23,6 +23,8 @@
*
*/
+#include "config.h"
+
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
@@ -34,6 +36,11 @@
#include "shvar.h"
+#include "NetworkManagerUtils.h"
+#include "nm-logging.h"
+
+#define PARSE_WARNING(msg...) nm_log_warn (LOGD_SETTINGS, " " msg)
+
/* 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.
@@ -233,8 +240,7 @@ svEscape (const char *s)
new[j++] = s[i];
}
new[j++] = '"';
- new[j++] = '\0'
-;
+ new[j++] = '\0';
g_assert (j == slen + mangle - newline + 3);
return new;
@@ -261,7 +267,8 @@ svGetValue (shvarFile *s, const char *key, gboolean verbatim)
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);
+ /* Strip trailing spaces before unescaping to preserve spaces quoted whitespace */
+ value = g_strchomp (g_strdup (line + len));
if (!verbatim)
svUnescape (value);
break;
@@ -306,6 +313,38 @@ svTrueValue (shvarFile *s, const char *key, gboolean def)
return returnValue;
}
+/* svGetValueInt64:
+ * @s: fhe file
+ * @key: the name of the key to read
+ * @base: the numeric base (usually 10). Setting to 0 means "auto". Usually you want 10.
+ * @min: the minimum for range-check
+ * @max: the maximum for range-check
+ * @fallback: the fallback value in any error case
+ *
+ * Reads a value @key and converts it to an integer using nm_utils_ascii_str_to_int64().
+ * In case of error, @errno will be set and @fallback returned. */
+gint64
+svGetValueInt64 (shvarFile *s, const char *key, guint base, gint64 min, gint64 max, gint64 fallback)
+{
+ char *tmp;
+ gint64 result;
+ int errsv;
+
+ tmp = svGetValue (s, key, FALSE);
+ if (!tmp) {
+ errno = 0;
+ return fallback;
+ }
+
+ result = nm_utils_ascii_str_to_int64 (tmp, base, min, max, fallback);
+ errsv = errno;
+ if (errsv != 0)
+ PARSE_WARNING ("Error reading '%s' value '%s' as integer (%d)", key, tmp, errsv);
+
+ g_free (tmp);
+
+ return result;
+}
/* Set the variable <key> equal to the value <value>.
* If <key> does not exist, and the <current> pointer is set, append
diff --git a/src/settings/plugins/ifcfg-rh/shvar.h b/src/settings/plugins/ifcfg-rh/shvar.h
index 4cbf1a31a..b2a2f2636 100644
--- a/src/settings/plugins/ifcfg-rh/shvar.h
+++ b/src/settings/plugins/ifcfg-rh/shvar.h
@@ -63,6 +63,8 @@ char *svGetValue (shvarFile *s, const char *key, gboolean verbatim);
*/
gboolean svTrueValue (shvarFile *s, const char *key, gboolean def);
+gint64 svGetValueInt64 (shvarFile *s, const char *key, guint base, gint64 min, gint64 max, gint64 fallback);
+
/* 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
diff --git a/src/settings/plugins/ifcfg-rh/tests/Makefile.am b/src/settings/plugins/ifcfg-rh/tests/Makefile.am
index e758776da..5a17ed9bb 100644
--- a/src/settings/plugins/ifcfg-rh/tests/Makefile.am
+++ b/src/settings/plugins/ifcfg-rh/tests/Makefile.am
@@ -6,20 +6,16 @@ SUBDIRS=network-scripts
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)/libnm-core \
+ -I$(top_builddir)/libnm-core \
-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)/../ \
-DG_LOG_DOMAIN=\""NetworkManager-ifcfg-rh"\" \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
-DTEST_IFCFG_DIR=\"$(abs_srcdir)\" \
-DTEST_SCRATCH_DIR=\"$(abs_builddir)/\" \
@@ -31,15 +27,10 @@ AM_LDFLAGS = \
$(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 \
- ../errors.c \
../reader.c \
../shvar.c \
../utils.c \
@@ -54,19 +45,9 @@ test_ifcfg_rh_utils_SOURCES = \
../shvar.c
test_ifcfg_rh_utils_LDADD = \
- $(AM_LDADD)
+ $(top_builddir)/src/libNetworkManager.la
TESTS = test-ifcfg-rh-utils test-ifcfg-rh
-EXTRA_DIST = \
- iscsiadm-test-dhcp \
- iscsiadm-test-static \
- iscsiadm-test-bad-ipaddr \
- iscsiadm-test-bad-gateway \
- iscsiadm-test-bad-dns1 \
- iscsiadm-test-bad-dns2 \
- iscsiadm-test-bad-entry \
- iscsiadm-test-bad-record
-
endif
diff --git a/src/settings/plugins/ifcfg-rh/tests/Makefile.in b/src/settings/plugins/ifcfg-rh/tests/Makefile.in
index 2018134aa..f34e759da 100644
--- a/src/settings/plugins/ifcfg-rh/tests/Makefile.in
+++ b/src/settings/plugins/ifcfg-rh/tests/Makefile.in
@@ -106,12 +106,11 @@ 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 ../errors.c \
- ../reader.c ../shvar.c ../utils.c ../writer.c
+am__test_ifcfg_rh_SOURCES_DIST = test-ifcfg-rh.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)
+@ENABLE_TESTS_TRUE@ reader.$(OBJEXT) shvar.$(OBJEXT) \
+@ENABLE_TESTS_TRUE@ utils.$(OBJEXT) writer.$(OBJEXT)
test_ifcfg_rh_OBJECTS = $(am_test_ifcfg_rh_OBJECTS)
@ENABLE_TESTS_TRUE@test_ifcfg_rh_DEPENDENCIES = \
@ENABLE_TESTS_TRUE@ $(top_builddir)/src/libNetworkManager.la
@@ -125,7 +124,8 @@ am__test_ifcfg_rh_utils_SOURCES_DIST = test-ifcfg-rh-utils.c \
@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 = $(AM_LDADD)
+@ENABLE_TESTS_TRUE@test_ifcfg_rh_utils_DEPENDENCIES = \
+@ENABLE_TESTS_TRUE@ $(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
@@ -261,6 +261,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -384,6 +386,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -403,6 +406,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -429,7 +433,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -511,20 +515,16 @@ 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)/libnm-core \
+@ENABLE_TESTS_TRUE@ -I$(top_builddir)/libnm-core \
@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@ -DG_LOG_DOMAIN=\""NetworkManager-ifcfg-rh"\" \
+@ENABLE_TESTS_TRUE@ -DNETWORKMANAGER_COMPILATION \
@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)/\" \
@@ -536,13 +536,8 @@ with_valgrind = @with_valgrind@
@ENABLE_TESTS_TRUE@ $(DBUS_LIBS) \
@ENABLE_TESTS_TRUE@ $(CODE_COVERAGE_LDFLAGS)
-@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 \
@@ -557,17 +552,7 @@ with_valgrind = @with_valgrind@
@ENABLE_TESTS_TRUE@ ../shvar.c
@ENABLE_TESTS_TRUE@test_ifcfg_rh_utils_LDADD = \
-@ENABLE_TESTS_TRUE@ $(AM_LDADD)
-
-@ENABLE_TESTS_TRUE@EXTRA_DIST = \
-@ENABLE_TESTS_TRUE@ iscsiadm-test-dhcp \
-@ENABLE_TESTS_TRUE@ iscsiadm-test-static \
-@ENABLE_TESTS_TRUE@ iscsiadm-test-bad-ipaddr \
-@ENABLE_TESTS_TRUE@ iscsiadm-test-bad-gateway \
-@ENABLE_TESTS_TRUE@ iscsiadm-test-bad-dns1 \
-@ENABLE_TESTS_TRUE@ iscsiadm-test-bad-dns2 \
-@ENABLE_TESTS_TRUE@ iscsiadm-test-bad-entry \
-@ENABLE_TESTS_TRUE@ iscsiadm-test-bad-record
+@ENABLE_TESTS_TRUE@ $(top_builddir)/src/libNetworkManager.la
all: all-recursive
@@ -627,7 +612,6 @@ 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@
@@ -656,20 +640,6 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-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
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 1701aeeb3..8941da3a6 100644
--- a/src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.am
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.am
@@ -1,5 +1,6 @@
EXTRA_DIST = \
ifcfg-test-minimal \
+ ifcfg-test-misc-variables \
ifcfg-test-variables-corner-cases-1 \
ifcfg-test-nm-controlled \
ifcfg-test-nm-controlled-unrecognized \
@@ -59,10 +60,12 @@ EXTRA_DIST = \
ifcfg-test-wifi-wpa-eap-ttls-tls \
keys-test-wifi-wpa-eap-ttls-tls \
ifcfg-test-wifi-hidden \
+ ifcfg-test-wifi-band-a \
+ ifcfg-test-wifi-band-a-channel-mismatch \
+ ifcfg-test-wifi-band-bg-channel-mismatch \
test_ca_cert.pem \
test1_key_and_cert.pem \
- ifcfg-test-ibft-dhcp \
- ifcfg-test-ibft-static \
+ ifcfg-test-ibft \
ifcfg-test-static-routes-legacy \
route-test-static-routes-legacy \
ifcfg-test-wired-static-routes \
@@ -116,7 +119,8 @@ EXTRA_DIST = \
ifcfg-test-fcoe-vn2vn \
ifcfg-test-team-master \
ifcfg-test-team-port \
- ifcfg-test-team-port-empty-config
+ ifcfg-test-team-port-empty-config \
+ ifcfg-test-vlan-trailing-spaces
# 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
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 eff763e8a..aac646f8b 100644
--- a/src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.in
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.in
@@ -129,6 +129,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -252,6 +254,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -271,6 +274,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -297,7 +301,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -378,6 +382,7 @@ with_resolvconf = @with_resolvconf@
with_valgrind = @with_valgrind@
EXTRA_DIST = \
ifcfg-test-minimal \
+ ifcfg-test-misc-variables \
ifcfg-test-variables-corner-cases-1 \
ifcfg-test-nm-controlled \
ifcfg-test-nm-controlled-unrecognized \
@@ -437,10 +442,12 @@ EXTRA_DIST = \
ifcfg-test-wifi-wpa-eap-ttls-tls \
keys-test-wifi-wpa-eap-ttls-tls \
ifcfg-test-wifi-hidden \
+ ifcfg-test-wifi-band-a \
+ ifcfg-test-wifi-band-a-channel-mismatch \
+ ifcfg-test-wifi-band-bg-channel-mismatch \
test_ca_cert.pem \
test1_key_and_cert.pem \
- ifcfg-test-ibft-dhcp \
- ifcfg-test-ibft-static \
+ ifcfg-test-ibft \
ifcfg-test-static-routes-legacy \
route-test-static-routes-legacy \
ifcfg-test-wired-static-routes \
@@ -494,7 +501,8 @@ EXTRA_DIST = \
ifcfg-test-fcoe-vn2vn \
ifcfg-test-team-master \
ifcfg-test-team-port \
- ifcfg-test-team-port-empty-config
+ ifcfg-test-team-port-empty-config \
+ ifcfg-test-vlan-trailing-spaces
# make target dependencies can't have colons in their names, which ends up
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-ibft b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-ibft
new file mode 100644
index 000000000..d3e4edca1
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-ibft
@@ -0,0 +1,10 @@
+# Generated by dracut initrd
+DEVICE="ibft0"
+ONBOOT=yes
+NETBOOT=yes
+UUID="2aa8c19d-9744-4ca4-b74f-c37e73f2918e"
+BOOTPROTO=ibft
+HWADDR="00:33:21:98:b9:f0"
+TYPE=Ethernet
+NAME="ibft0"
+
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-ibft-dhcp b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-ibft-dhcp
deleted file mode 100644
index abfcd6e4c..000000000
--- a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-ibft-dhcp
+++ /dev/null
@@ -1,4 +0,0 @@
-# Intel Corporation 82540EP Gigabit Ethernet Controller (Mobile)
-DEVICE=eth0
-HWADDR=00:33:21:98:b9:f1
-BOOTPROTO=ibft
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-ibft-static b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-ibft-static
deleted file mode 100644
index 99b02e42b..000000000
--- a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-ibft-static
+++ /dev/null
@@ -1,4 +0,0 @@
-# Intel Corporation 82540EP Gigabit Ethernet Controller (Mobile)
-DEVICE=eth0
-HWADDR=00:33:21:98:b9:f0
-BOOTPROTO=ibft
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-misc-variables b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-misc-variables
new file mode 100644
index 000000000..c7892a219
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-misc-variables
@@ -0,0 +1,3 @@
+DEVICE=eth0
+HWADDR_BLACKLIST="00:16:41:11:22:88 00:16:41:11:22:99 XX:aa:invalid 6A:5D:5A:FA:DD:F0"
+
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-vlan-trailing-spaces b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-vlan-trailing-spaces
new file mode 100644
index 000000000..4a31e475a
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-vlan-trailing-spaces
@@ -0,0 +1,11 @@
+DEVICE="vlan201"
+ONBOOT=yes
+NETBOOT=yes
+BOOTPROTO=none
+IPADDR="10.130.70.7"
+NETMASK="255.255.0.0"
+TYPE=Vlan
+NAME="vlan201"
+VLAN=yes
+PHYSDEV="enccw0.0.fb00"
+
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wifi-band-a b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wifi-band-a
new file mode 100644
index 000000000..432861110
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wifi-band-a
@@ -0,0 +1,13 @@
+TYPE=Wireless
+DEVICE=eth2
+HWADDR=00:16:41:11:22:33
+NM_CONTROLLED=yes
+BOOTPROTO=dhcp
+ESSID=blahblah
+BAND=a
+MODE=Managed
+RATE=auto
+ONBOOT=yes
+USERCTL=yes
+PEERDNS=yes
+IPV6INIT=no
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wifi-band-a-channel-mismatch b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wifi-band-a-channel-mismatch
new file mode 100644
index 000000000..8905ba0b3
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wifi-band-a-channel-mismatch
@@ -0,0 +1,9 @@
+TYPE=Wireless
+DEVICE=eth2
+HWADDR=00:16:41:11:22:33
+BOOTPROTO=dhcp
+ESSID=blahblah
+CHANNEL=9
+BAND=a
+MODE=Managed
+
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wifi-band-bg-channel-mismatch b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wifi-band-bg-channel-mismatch
new file mode 100644
index 000000000..e02e21ad2
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wifi-band-bg-channel-mismatch
@@ -0,0 +1,9 @@
+TYPE=Wireless
+DEVICE=eth2
+HWADDR=00:16:41:11:22:33
+BOOTPROTO=dhcp
+ESSID=blahblah
+CHANNEL=183
+BAND=bg
+MODE=Managed
+
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wifi-open b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wifi-open
index d4bb8f75b..48db45b25 100644
--- a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wifi-open
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wifi-open
@@ -3,6 +3,7 @@ DEVICE=eth2
HWADDR=00:16:41:11:22:33
NM_CONTROLLED=yes
BOOTPROTO=dhcp
+AUTOCONNECT_PRIORITY=-1
ESSID=blahblah
CHANNEL=1
MODE=Managed
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 39c81027f..d82a32703 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
@@ -18,6 +18,8 @@
* Copyright (C) 2008 - 2011 Red Hat, Inc.
*/
+#include "config.h"
+
#include <stdio.h>
#include <stdarg.h>
#include <unistd.h>
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 c1b14f125..4a6940d0d 100644
--- a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
+++ b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
@@ -18,12 +18,12 @@
* Copyright (C) 2008 - 2011 Red Hat, Inc.
*/
+#include "config.h"
+
#include <stdio.h>
#include <stdarg.h>
#include <unistd.h>
#include <string.h>
-#include <netinet/ether.h>
-#include <linux/if_infiniband.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/socket.h>
@@ -46,7 +46,7 @@
#include <nm-setting-serial.h>
#include <nm-setting-vlan.h>
#include <nm-setting-dcb.h>
-#include <nm-utils-private.h>
+#include "nm-core-internal.h"
#include "NetworkManagerUtils.h"
@@ -185,17 +185,17 @@ test_read_basic (void)
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
GError *error = NULL;
- const GByteArray *array;
+ const char *mac;
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_DIR "/network-scripts/ifcfg-test-minimal",
- NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, NULL, &error, NULL);
+ NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL);
g_assert_no_error (error);
g_assert (connection);
success = nm_connection_verify (connection, &error);
@@ -220,22 +220,71 @@ test_read_basic (void)
g_assert_cmpint (nm_setting_wired_get_mtu (s_wired), ==, 0);
/* 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_address[0], ETH_ALEN) == 0);
+ mac = nm_setting_wired_get_mac_address (s_wired);
+ g_assert (mac);
+ g_assert (nm_utils_hwaddr_matches (mac, -1, expected_mac_address, ETH_ALEN));
/* ===== 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_DISABLED);
- g_assert (nm_setting_ip4_config_get_never_default (s_ip4) == FALSE);
+ g_assert_cmpstr (nm_setting_ip_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_DISABLED);
+ g_assert (nm_setting_ip_config_get_never_default (s_ip4) == FALSE);
/* ===== 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_assert_cmpstr (nm_setting_ip_config_get_method (s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_IGNORE);
+ g_assert (nm_setting_ip_config_get_never_default (s_ip6) == FALSE);
+
+ g_object_unref (connection);
+}
+
+static void
+test_read_miscellaneous_variables (void)
+{
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+ NMSettingWired *s_wired;
+ NMSettingIPConfig *s_ip4;
+ GError *error = NULL;
+ char *expected_mac_blacklist[3] = { "00:16:41:11:22:88", "00:16:41:11:22:99", "6a:5d:5a:fa:dd:f0" };
+ int mac_blacklist_num, i;
+ guint64 expected_timestamp = 0;
+ gboolean success;
+
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*invalid MAC in HWADDR_BLACKLIST 'XX:aa:invalid'*");
+ connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-misc-variables",
+ NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL);
+ g_test_assert_expected_messages ();
+ 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);
+ g_assert (s_con);
+ 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);
+ g_assert (s_wired);
+ g_assert_cmpint (nm_setting_wired_get_mtu (s_wired), ==, 0);
+
+ /* MAC blacklist */
+ mac_blacklist_num = nm_setting_wired_get_num_mac_blacklist_items (s_wired);
+ g_assert_cmpint (mac_blacklist_num, ==, 3);
+ for (i = 0; i < mac_blacklist_num; i++)
+ g_assert (nm_utils_hwaddr_matches (nm_setting_wired_get_mac_blacklist_item (s_wired, i), -1, expected_mac_blacklist[i], -1));
+
+ /* ===== IPv4 SETTING ===== */
+ s_ip4 = nm_connection_get_setting_ip4_config (connection);
+ g_assert (s_ip4);
+ g_assert_cmpstr (nm_setting_ip_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_DISABLED);
+ g_assert (nm_setting_ip_config_get_never_default (s_ip4) == FALSE);
g_object_unref (connection);
}
@@ -246,9 +295,9 @@ test_read_variables_corner_cases (void)
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
GError *error = NULL;
- const GByteArray *array;
+ const char *mac;
char expected_mac_address[ETH_ALEN] = { 0x00, 0x16, 0x41, 0x11, 0x22, 0x33 };
const char *expected_zone = "'";
const char *expected_id = "\"";
@@ -256,7 +305,7 @@ test_read_variables_corner_cases (void)
gboolean success;
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);
+ NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL);
g_assert_no_error (error);
g_assert (connection);
success = nm_connection_verify (connection, &error);
@@ -277,16 +326,15 @@ test_read_variables_corner_cases (void)
g_assert_cmpint (nm_setting_wired_get_mtu (s_wired), ==, 0);
/* 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_address[0], ETH_ALEN) == 0);
+ mac = nm_setting_wired_get_mac_address (s_wired);
+ g_assert (mac);
+ g_assert (nm_utils_hwaddr_matches (mac, -1, expected_mac_address, ETH_ALEN));
/* ===== 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_DISABLED);
- g_assert (nm_setting_ip4_config_get_never_default (s_ip4) == FALSE);
+ g_assert_cmpstr (nm_setting_ip_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_DISABLED);
+ g_assert (nm_setting_ip_config_get_never_default (s_ip4) == FALSE);
g_object_unref (connection);
}
@@ -303,7 +351,7 @@ test_read_unmanaged (void)
gboolean success;
connection = connection_from_file (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-nm-controlled",
- NULL, TYPE_ETHERNET, NULL,
+ NULL, TYPE_ETHERNET,
&unhandled_spec,
NULL, NULL, NULL, &error, NULL);
g_assert_no_error (error);
@@ -336,7 +384,7 @@ test_read_unmanaged_unrecognized (void)
gboolean success;
connection = connection_from_file (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-nm-controlled-unrecognized",
- NULL, NULL, NULL,
+ NULL, NULL,
&unhandled_spec,
NULL, NULL, NULL, &error, NULL);
g_assert_no_error (error);
@@ -367,7 +415,7 @@ test_read_unrecognized (void)
gboolean success;
connection = connection_from_file (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-unrecognized",
- NULL, NULL, NULL,
+ NULL, NULL,
&unhandled_spec,
NULL, NULL, NULL, &error, NULL);
g_assert_no_error (error);
@@ -394,27 +442,17 @@ test_read_wired_static (const char *file,
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *unmanaged = NULL;
GError *error = NULL;
- const GByteArray *array;
+ const char *mac;
char expected_mac_address[ETH_ALEN] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0xee };
- const char *expected_dns1 = "4.2.2.1";
- const char *expected_dns2 = "4.2.2.2";
- guint32 addr;
- struct in6_addr addr6;
- const char *expected_address1 = "192.168.1.5";
- const char *expected_address1_gw = "192.168.1.1";
- const char *expected6_address1 = "dead:beaf::1";
- const char *expected6_address2 = "dead:beaf::2";
- const char *expected6_dns1 = "1:2:3:4::a";
- const char *expected6_dns2 = "1:2:3:4::b";
- NMIP4Address *ip4_addr;
- NMIP6Address *ip6_addr;
+ NMIPAddress *ip4_addr;
+ NMIPAddress *ip6_addr;
gboolean success;
- connection = connection_from_file (file, NULL, TYPE_ETHERNET, NULL,
+ connection = connection_from_file (file, NULL, TYPE_ETHERNET,
&unmanaged, NULL, NULL, NULL, &error, NULL);
g_assert_no_error (error);
g_assert (connection);
@@ -436,64 +474,57 @@ test_read_wired_static (const char *file,
g_assert_cmpint (nm_setting_wired_get_mtu (s_wired), ==, 1492);
/* 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_address[0], ETH_ALEN) == 0);
+ mac = nm_setting_wired_get_mac_address (s_wired);
+ g_assert (mac);
+ g_assert (nm_utils_hwaddr_matches (mac, -1, expected_mac_address, ETH_ALEN));
/* ===== 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_MANUAL);
- g_assert (nm_setting_ip4_config_get_may_fail (s_ip4));
+ g_assert_cmpstr (nm_setting_ip_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_MANUAL);
+ g_assert (nm_setting_ip_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, 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);
+ g_assert_cmpint (nm_setting_ip_config_get_num_dns (s_ip4), ==, 2);
+ g_assert_cmpstr (nm_setting_ip_config_get_dns (s_ip4, 0), ==, "4.2.2.1");
+ g_assert_cmpstr (nm_setting_ip_config_get_dns (s_ip4, 1), ==, "4.2.2.2");
/* 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);
+ g_assert_cmpint (nm_setting_ip_config_get_num_addresses (s_ip4), ==, 1);
+ ip4_addr = nm_setting_ip_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, 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);
+ g_assert_cmpint (nm_ip_address_get_prefix (ip4_addr), ==, 24);
+ g_assert_cmpstr (nm_ip_address_get_address (ip4_addr), ==, "192.168.1.5");
+
+ /* Gateway */
+ g_assert_cmpstr (nm_setting_ip_config_get_gateway (s_ip4), ==, "192.168.1.1");
/* ===== 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));
+ g_assert_cmpstr (nm_setting_ip_config_get_method (s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_MANUAL);
+ g_assert (nm_setting_ip_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, 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));
+ g_assert_cmpint (nm_setting_ip_config_get_num_dns (s_ip6), ==, 2);
+ g_assert_cmpstr (nm_setting_ip_config_get_dns (s_ip6, 0), ==, "1:2:3:4::a");
+ g_assert_cmpstr (nm_setting_ip_config_get_dns (s_ip6, 1), ==, "1:2:3:4::b");
/* IP addresses */
- g_assert_cmpint (nm_setting_ip6_config_get_num_addresses (s_ip6), ==, 2);
+ g_assert_cmpint (nm_setting_ip_config_get_num_addresses (s_ip6), ==, 2);
- ip6_addr = nm_setting_ip6_config_get_address (s_ip6, 0);
+ ip6_addr = nm_setting_ip_config_get_address (s_ip6, 0);
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));
+ g_assert_cmpint (nm_ip_address_get_prefix (ip6_addr), ==, 64);
+ g_assert_cmpstr (nm_ip_address_get_address (ip6_addr), ==, "dead:beaf::1");
- ip6_addr = nm_setting_ip6_config_get_address (s_ip6, 1);
+ ip6_addr = nm_setting_ip_config_get_address (s_ip6, 1);
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));
+ g_assert_cmpint (nm_ip_address_get_prefix (ip6_addr), ==, 56);
+ g_assert_cmpstr (nm_ip_address_get_address (ip6_addr), ==, "dead:beaf::2");
} else {
- g_assert_cmpstr (nm_setting_ip6_config_get_method (s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_IGNORE);
+ g_assert_cmpstr (nm_setting_ip_config_get_method (s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_IGNORE);
}
g_free (unmanaged);
@@ -506,9 +537,9 @@ 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;
+ NMSettingIPConfig *s_ip4;
GError *error = NULL;
- NMIP4Address *ip4_addr;
+ NMIPAddress *ip4_addr;
char *file, *expected_id;
file = g_strdup_printf (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-wired-static-no-prefix-%u", expected_prefix);
@@ -516,7 +547,7 @@ test_read_wired_static_no_prefix (gconstpointer user_data)
g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
"*missing PREFIX, assuming*");
- connection = connection_from_file (file, NULL, TYPE_ETHERNET, NULL, NULL,
+ connection = connection_from_file (file, NULL, TYPE_ETHERNET, NULL,
NULL, NULL, NULL, &error, NULL);
g_test_assert_expected_messages ();
g_assert_no_error (error);
@@ -531,12 +562,12 @@ test_read_wired_static_no_prefix (gconstpointer user_data)
/* ===== 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_MANUAL);
+ g_assert_cmpstr (nm_setting_ip_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_MANUAL);
- g_assert_cmpint (nm_setting_ip4_config_get_num_addresses (s_ip4), ==, 1);
- ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 0);
+ g_assert_cmpint (nm_setting_ip_config_get_num_addresses (s_ip4), ==, 1);
+ ip4_addr = nm_setting_ip_config_get_address (s_ip4, 0);
g_assert (ip4_addr);
- g_assert_cmpint (nm_ip4_address_get_prefix (ip4_addr), ==, expected_prefix);
+ g_assert_cmpint (nm_ip_address_get_prefix (ip4_addr), ==, expected_prefix);
g_free (file);
g_free (expected_id);
@@ -551,26 +582,22 @@ test_read_wired_dhcp (void)
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
char *unmanaged = NULL;
char *keyfile = NULL;
char *routefile = NULL;
char *route6file = NULL;
gboolean ignore_error = FALSE;
GError *error = NULL;
- const GByteArray *array;
+ const char *mac;
char expected_mac_address[ETH_ALEN] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0xee };
const char *tmp;
const char *expected_id = "System test-wired-dhcp";
- const char *expected_dns1 = "4.2.2.1";
- const char *expected_dns2 = "4.2.2.2";
- guint32 addr;
const char *expected_dhcp_hostname = "foobar";
connection = connection_from_file (TEST_IFCFG_WIRED_DHCP,
NULL,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -630,18 +657,13 @@ test_read_wired_dhcp (void)
NM_SETTING_WIRED_SETTING_NAME);
/* MAC address */
- array = nm_setting_wired_get_mac_address (s_wired);
- ASSERT (array != NULL,
+ mac = nm_setting_wired_get_mac_address (s_wired);
+ ASSERT (mac != NULL,
"wired-dhcp-verify-wired", "failed to verify %s: missing %s / %s key",
TEST_IFCFG_WIRED_DHCP,
NM_SETTING_WIRED_SETTING_NAME,
NM_SETTING_WIRED_MAC_ADDRESS);
- ASSERT (array->len == ETH_ALEN,
- "wired-dhcp-verify-wired", "failed to verify %s: unexpected %s / %s key value length",
- TEST_IFCFG_WIRED_DHCP,
- NM_SETTING_WIRED_SETTING_NAME,
- NM_SETTING_WIRED_MAC_ADDRESS);
- ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0,
+ ASSERT (nm_utils_hwaddr_matches (mac, -1, expected_mac_address, sizeof (expected_mac_address)),
"wired-dhcp-verify-wired", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIRED_DHCP,
NM_SETTING_WIRED_SETTING_NAME,
@@ -656,59 +678,49 @@ test_read_wired_dhcp (void)
NM_SETTING_IP4_CONFIG_SETTING_NAME);
/* Method */
- tmp = nm_setting_ip4_config_get_method (s_ip4);
+ tmp = nm_setting_ip_config_get_method (s_ip4);
ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
"wired-dhcp-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIRED_DHCP,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_METHOD);
+ NM_SETTING_IP_CONFIG_METHOD);
- tmp = nm_setting_ip4_config_get_dhcp_hostname (s_ip4);
+ tmp = nm_setting_ip_config_get_dhcp_hostname (s_ip4);
ASSERT (tmp != NULL,
"wired-dhcp-verify-ip4", "failed to verify %s: missing %s / %s key",
TEST_IFCFG_WIRED_DHCP,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME);
+ NM_SETTING_IP_CONFIG_DHCP_HOSTNAME);
ASSERT (strcmp (tmp, expected_dhcp_hostname) == 0,
"wired-dhcp-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIRED_DHCP,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME);
+ NM_SETTING_IP_CONFIG_DHCP_HOSTNAME);
- ASSERT (nm_setting_ip4_config_get_ignore_auto_dns (s_ip4) == TRUE,
+ ASSERT (nm_setting_ip_config_get_ignore_auto_dns (s_ip4) == TRUE,
"wired-dhcp-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIRED_DHCP,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS);
+ NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS);
/* DNS Addresses */
- ASSERT (nm_setting_ip4_config_get_num_dns (s_ip4) == 2,
+ ASSERT (nm_setting_ip_config_get_num_dns (s_ip4) == 2,
"wired-dhcp-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIRED_DHCP,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS);
+ NM_SETTING_IP_CONFIG_DNS);
- ASSERT (inet_pton (AF_INET, expected_dns1, &addr) > 0,
- "wired-dhcp-verify-ip4", "failed to verify %s: couldn't convert DNS IP address #1",
- 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,
+ ASSERT (strcmp (nm_setting_ip_config_get_dns (s_ip4, 0), "4.2.2.1") == 0,
"wired-dhcp-verify-ip4", "failed to verify %s: unexpected %s / %s key value #1",
TEST_IFCFG_WIRED_DHCP,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS);
+ NM_SETTING_IP_CONFIG_DNS);
- ASSERT (inet_pton (AF_INET, expected_dns2, &addr) > 0,
- "wired-dhcp-verify-ip4", "failed to verify %s: couldn't convert DNS IP address #2",
- 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,
+ ASSERT (strcmp (nm_setting_ip_config_get_dns (s_ip4, 1), "4.2.2.2") == 0,
"wired-dhcp-verify-ip4", "failed to verify %s: unexpected %s / %s key value #2",
TEST_IFCFG_WIRED_DHCP,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS);
+ NM_SETTING_IP_CONFIG_DNS);
g_free (unmanaged);
g_free (keyfile);
@@ -721,17 +733,15 @@ static void
test_read_wired_dhcp_plus_ip (void)
{
NMConnection *connection;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
GError *error = NULL;
- guint32 addr4;
- struct in6_addr addr6;
- NMIP4Address *ip4_addr;
- NMIP6Address *ip6_addr;
+ NMIPAddress *ip4_addr;
+ NMIPAddress *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, TYPE_ETHERNET, NULL,
NULL, NULL, NULL, &error, NULL);
g_assert_no_error (error);
g_assert (connection);
@@ -742,321 +752,132 @@ test_read_wired_dhcp_plus_ip (void)
/* ===== 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));
+ g_assert_cmpstr (nm_setting_ip_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_AUTO);
+ g_assert (nm_setting_ip_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);
+ g_assert_cmpint (nm_setting_ip_config_get_num_dns (s_ip4), ==, 2);
+ g_assert_cmpstr (nm_setting_ip_config_get_dns (s_ip4, 0), ==, "4.2.2.1");
+ g_assert_cmpstr (nm_setting_ip_config_get_dns (s_ip4, 1), ==, "4.2.2.2");
/* 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_cmpint (nm_setting_ip_config_get_num_addresses (s_ip4), ==, 2);
+ ip4_addr = nm_setting_ip_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);
+ g_assert_cmpint (nm_ip_address_get_prefix (ip4_addr), ==, 24);
+ g_assert_cmpstr (nm_ip_address_get_address (ip4_addr), ==, "1.2.3.4");
+
+ /* Gateway */
+ g_assert_cmpstr (nm_setting_ip_config_get_gateway (s_ip4), ==, "1.1.1.1");
- ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 1);
+ ip4_addr = nm_setting_ip_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);
+ g_assert_cmpint (nm_ip_address_get_prefix (ip4_addr), ==, 16);
+ g_assert_cmpstr (nm_ip_address_get_address (ip4_addr), ==, "9.8.7.6");
/* ===== 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));
+ g_assert_cmpstr (nm_setting_ip_config_get_method (s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_AUTO);
+ g_assert (nm_setting_ip_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));
+ g_assert_cmpint (nm_setting_ip_config_get_num_dns (s_ip6), ==, 2);
+ g_assert_cmpstr (nm_setting_ip_config_get_dns (s_ip6, 0), ==, "1:2:3:4::a");
+ g_assert_cmpstr (nm_setting_ip_config_get_dns (s_ip6, 1), ==, "1:2:3:4::b");
/* 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_cmpint (nm_setting_ip_config_get_num_addresses (s_ip6), ==, 3);
+ ip6_addr = nm_setting_ip_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));
+ g_assert_cmpint (nm_ip_address_get_prefix (ip6_addr), ==, 56);
+ g_assert_cmpstr (nm_ip_address_get_address (ip6_addr), ==, "1001:abba::1234");
- ip6_addr = nm_setting_ip6_config_get_address (s_ip6, 1);
+ ip6_addr = nm_setting_ip_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));
+ g_assert_cmpint (nm_ip_address_get_prefix (ip6_addr), ==, 64);
+ g_assert_cmpstr (nm_ip_address_get_address (ip6_addr), ==, "2001:abba::2234");
- ip6_addr = nm_setting_ip6_config_get_address (s_ip6, 2);
+ ip6_addr = nm_setting_ip_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_assert_cmpint (nm_ip_address_get_prefix (ip6_addr), ==, 96);
+ g_assert_cmpstr (nm_ip_address_get_address (ip6_addr), ==, "3001:abba::3234");
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"
-
static void
test_read_wired_global_gateway (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;
+ NMSettingIPConfig *s_ip4;
GError *error = NULL;
- const char *tmp;
- const char *expected_id = "System test-wired-global-gateway";
- guint32 addr;
- const char *expected_address1 = "192.168.1.5";
- const char *expected_address1_gw = "192.168.1.2";
- NMIP4Address *ip4_addr;
-
- connection = connection_from_file (TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
- TEST_NETWORK_WIRED_GLOBAL_GATEWAY,
- TYPE_ETHERNET,
- NULL,
- &unmanaged,
- &keyfile,
- &routefile,
- &route6file,
- &error,
- &ignore_error);
- ASSERT (connection != NULL,
- "wired-global-gateway-read", "failed to read %s: %s", TEST_IFCFG_WIRED_GLOBAL_GATEWAY, error->message);
-
- ASSERT (nm_connection_verify (connection, &error),
- "wired-global-gateway-verify", "failed to verify %s: %s", TEST_IFCFG_WIRED_GLOBAL_GATEWAY, error->message);
+ NMIPAddress *ip4_addr;
+ char *unmanaged = NULL;
- ASSERT (unmanaged == NULL,
- "wired-global-gateway-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIRED_GLOBAL_GATEWAY);
+ connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-global-gateway",
+ TEST_IFCFG_DIR"/network-scripts/network-test-wired-global-gateway",
+ TYPE_ETHERNET, &unmanaged, NULL, NULL, NULL, &error, NULL);
+ nmtst_assert_connection_verifies_without_normalization (connection);
+ g_assert (unmanaged == NULL);
/* ===== CONNECTION SETTING ===== */
-
s_con = nm_connection_get_setting_connection (connection);
- ASSERT (s_con != NULL,
- "wired-global-gateway-verify-connection", "failed to verify %s: missing %s setting",
- TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
- NM_SETTING_CONNECTION_SETTING_NAME);
-
- /* ID */
- tmp = nm_setting_connection_get_id (s_con);
- ASSERT (tmp != NULL,
- "wired-global-gateway-verify-connection", "failed to verify %s: missing %s / %s key",
- TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
- NM_SETTING_CONNECTION_SETTING_NAME,
- NM_SETTING_CONNECTION_ID);
- ASSERT (strcmp (tmp, expected_id) == 0,
- "wired-global-gateway-verify-connection", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
- NM_SETTING_CONNECTION_SETTING_NAME,
- NM_SETTING_CONNECTION_ID);
+ g_assert (s_con);
+ g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, "System test-wired-global-gateway");
/* ===== WIRED SETTING ===== */
-
s_wired = nm_connection_get_setting_wired (connection);
- ASSERT (s_wired != NULL,
- "wired-global-gateway-verify-wired", "failed to verify %s: missing %s setting",
- TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
- NM_SETTING_WIRED_SETTING_NAME);
+ g_assert (s_wired);
/* ===== IPv4 SETTING ===== */
-
s_ip4 = nm_connection_get_setting_ip4_config (connection);
- ASSERT (s_ip4 != NULL,
- "wired-global-gateway-verify-ip4", "failed to verify %s: missing %s setting",
- TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
- 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-global-gateway-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_METHOD);
+ g_assert (s_ip4);
+ g_assert_cmpstr (nm_setting_ip_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_MANUAL);
/* Address #1 */
- ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 0);
- ASSERT (ip4_addr,
- "wired-global-gateway-verify-ip4", "failed to verify %s: missing IP4 address #1",
- TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_ADDRESSES);
-
- ASSERT (nm_ip4_address_get_prefix (ip4_addr) == 24,
- "wired-global-gateway-verify-ip4", "failed to verify %s: unexpected IP4 address #1 prefix",
- TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_ADDRESSES);
-
- ASSERT (inet_pton (AF_INET, expected_address1, &addr) > 0,
- "wired-global-gateway-verify-ip4", "failed to verify %s: couldn't convert IP address #1",
- 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,
- "wired-global-gateway-verify-ip4", "failed to verify %s: unexpected IP4 address #1",
- TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_ADDRESSES);
+ ip4_addr = nm_setting_ip_config_get_address (s_ip4, 0);
+ g_assert (ip4_addr);
+ g_assert_cmpint (nm_ip_address_get_prefix (ip4_addr), ==, 24);
+ g_assert_cmpstr (nm_ip_address_get_address (ip4_addr), ==, "192.168.1.5");
- ASSERT (inet_pton (AF_INET, expected_address1_gw, &addr) > 0,
- "wired-global-gateway-verify-ip4", "failed to verify %s: couldn't convert IP address #1 gateway",
- 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,
- "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,
- NM_SETTING_IP4_CONFIG_ADDRESSES);
+ /* Gateway */
+ g_assert_cmpstr (nm_setting_ip_config_get_gateway (s_ip4), ==, "192.168.1.2");
- g_free (unmanaged);
- g_free (keyfile);
- g_free (routefile);
- g_free (route6file);
g_object_unref (connection);
}
-#define TEST_IFCFG_WIRED_NEVER_DEFAULT TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-never-default"
-#define TEST_NETWORK_WIRED_NEVER_DEFAULT TEST_IFCFG_DIR"/network-scripts/network-test-wired-never-default"
-
static void
test_read_wired_never_default (void)
{
NMConnection *connection;
- NMSettingConnection *s_con;
- NMSettingWired *s_wired;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
- char *unmanaged = NULL;
- char *keyfile = NULL;
- char *routefile = NULL;
- char *route6file = NULL;
- gboolean ignore_error = FALSE;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
GError *error = NULL;
- const char *tmp;
- const char *expected_id = "System test-wired-never-default";
-
- connection = connection_from_file (TEST_IFCFG_WIRED_NEVER_DEFAULT,
- TEST_NETWORK_WIRED_NEVER_DEFAULT,
- TYPE_ETHERNET,
- NULL,
- &unmanaged,
- &keyfile,
- &routefile,
- &route6file,
- &error,
- &ignore_error);
- ASSERT (connection != NULL,
- "wired-never-default-read", "failed to read %s: %s", TEST_IFCFG_WIRED_NEVER_DEFAULT, error->message);
-
- ASSERT (nm_connection_verify (connection, &error),
- "wired-never-default-verify", "failed to verify %s: %s", TEST_IFCFG_WIRED_NEVER_DEFAULT, error->message);
-
- ASSERT (unmanaged == NULL,
- "wired-never-default-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIRED_NEVER_DEFAULT);
- /* ===== CONNECTION SETTING ===== */
-
- s_con = nm_connection_get_setting_connection (connection);
- ASSERT (s_con != NULL,
- "wired-never-default-verify-connection", "failed to verify %s: missing %s setting",
- TEST_IFCFG_WIRED_NEVER_DEFAULT,
- NM_SETTING_CONNECTION_SETTING_NAME);
-
- /* ID */
- tmp = nm_setting_connection_get_id (s_con);
- ASSERT (tmp != NULL,
- "wired-never-default-verify-connection", "failed to verify %s: missing %s / %s key",
- TEST_IFCFG_WIRED_NEVER_DEFAULT,
- NM_SETTING_CONNECTION_SETTING_NAME,
- NM_SETTING_CONNECTION_ID);
- ASSERT (strcmp (tmp, expected_id) == 0,
- "wired-never-default-verify-connection", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_WIRED_NEVER_DEFAULT,
- NM_SETTING_CONNECTION_SETTING_NAME,
- NM_SETTING_CONNECTION_ID);
+ connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-never-default",
+ TEST_IFCFG_DIR"/network-scripts/network-test-wired-never-default",
+ TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL);
+ nmtst_assert_connection_verifies_without_normalization (connection);
/* ===== WIRED SETTING ===== */
-
- s_wired = nm_connection_get_setting_wired (connection);
- ASSERT (s_wired != NULL,
- "wired-never-default-verify-wired", "failed to verify %s: missing %s setting",
- TEST_IFCFG_WIRED_NEVER_DEFAULT,
- NM_SETTING_WIRED_SETTING_NAME);
+ g_assert (nm_connection_get_setting_wired (connection));
/* ===== IPv4 SETTING ===== */
-
s_ip4 = nm_connection_get_setting_ip4_config (connection);
- ASSERT (s_ip4 != NULL,
- "wired-never-default-verify-ip4", "failed to verify %s: missing %s setting",
- TEST_IFCFG_WIRED_NEVER_DEFAULT,
- 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,
- "wired-never-default-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_WIRED_NEVER_DEFAULT,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_METHOD);
-
- ASSERT (nm_setting_ip4_config_get_never_default (s_ip4) == TRUE,
- "wired-never-default-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_WIRED_NEVER_DEFAULT,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_NEVER_DEFAULT);
-
- /* DNS Addresses */
- ASSERT (nm_setting_ip4_config_get_num_dns (s_ip4) == 0,
- "wired-never-default-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_WIRED_NEVER_DEFAULT,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS);
+ g_assert (s_ip4);
+ g_assert_cmpstr (nm_setting_ip_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_AUTO);
+ g_assert (nm_setting_ip_config_get_never_default (s_ip4));
+ g_assert_cmpint (nm_setting_ip_config_get_num_dns (s_ip4), ==, 0);
/* ===== IPv6 SETTING ===== */
-
s_ip6 = nm_connection_get_setting_ip6_config (connection);
- ASSERT (s_ip6 != NULL,
- "wired-never-default-verify-ip6", "failed to verify %s: missing %s setting",
- TEST_IFCFG_WIRED_NEVER_DEFAULT,
- NM_SETTING_IP6_CONFIG_SETTING_NAME);
-
- /* Method */
- tmp = nm_setting_ip6_config_get_method (s_ip6);
- ASSERT (strcmp (tmp, NM_SETTING_IP6_CONFIG_METHOD_AUTO) == 0,
- "wired-never-default-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_WIRED_NEVER_DEFAULT,
- NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_METHOD);
-
- ASSERT (nm_setting_ip6_config_get_never_default (s_ip6) == TRUE,
- "wired-never-default-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_WIRED_NEVER_DEFAULT,
- NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_NEVER_DEFAULT);
+ g_assert (s_ip6);
+ g_assert_cmpstr (nm_setting_ip_config_get_method (s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_AUTO);
+ g_assert (nm_setting_ip_config_get_never_default (s_ip6));
- g_free (unmanaged);
- g_free (keyfile);
- g_free (routefile);
- g_free (route6file);
g_object_unref (connection);
}
@@ -1068,8 +889,8 @@ test_read_wired_defroute_no (void)
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *unmanaged = NULL;
char *keyfile = NULL;
char *routefile = NULL;
@@ -1082,7 +903,6 @@ test_read_wired_defroute_no (void)
connection = connection_from_file (TEST_IFCFG_WIRED_DEFROUTE_NO,
NULL,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -1136,18 +956,18 @@ test_read_wired_defroute_no (void)
NM_SETTING_IP4_CONFIG_SETTING_NAME);
/* Method */
- tmp = nm_setting_ip4_config_get_method (s_ip4);
+ tmp = nm_setting_ip_config_get_method (s_ip4);
ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
"wired-defroute-no-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIRED_DEFROUTE_NO,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_METHOD);
+ NM_SETTING_IP_CONFIG_METHOD);
- ASSERT (nm_setting_ip4_config_get_never_default (s_ip4) == TRUE,
+ ASSERT (nm_setting_ip_config_get_never_default (s_ip4) == TRUE,
"wired-defroute-no-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIRED_DEFROUTE_NO,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_NEVER_DEFAULT);
+ NM_SETTING_IP_CONFIG_NEVER_DEFAULT);
/* ===== IPv6 SETTING ===== */
@@ -1158,18 +978,18 @@ test_read_wired_defroute_no (void)
NM_SETTING_IP6_CONFIG_SETTING_NAME);
/* Method */
- tmp = nm_setting_ip6_config_get_method (s_ip6);
+ tmp = nm_setting_ip_config_get_method (s_ip6);
ASSERT (strcmp (tmp, NM_SETTING_IP6_CONFIG_METHOD_AUTO) == 0,
"wired-defroute-no-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIRED_DEFROUTE_NO,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_METHOD);
+ NM_SETTING_IP_CONFIG_METHOD);
- ASSERT (nm_setting_ip6_config_get_never_default (s_ip6) == TRUE,
+ ASSERT (nm_setting_ip_config_get_never_default (s_ip6) == TRUE,
"wired-defroute-no-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIRED_DEFROUTE_NO,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_NEVER_DEFAULT);
+ NM_SETTING_IP_CONFIG_NEVER_DEFAULT);
g_free (unmanaged);
g_free (keyfile);
@@ -1187,8 +1007,8 @@ test_read_wired_defroute_no_gatewaydev_yes (void)
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *unmanaged = NULL;
char *keyfile = NULL;
char *routefile = NULL;
@@ -1201,7 +1021,6 @@ test_read_wired_defroute_no_gatewaydev_yes (void)
connection = connection_from_file (TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
TEST_NETWORK_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -1263,18 +1082,18 @@ test_read_wired_defroute_no_gatewaydev_yes (void)
NM_SETTING_IP4_CONFIG_SETTING_NAME);
/* Method */
- tmp = nm_setting_ip4_config_get_method (s_ip4);
+ tmp = nm_setting_ip_config_get_method (s_ip4);
ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
"wired-defroute-no-gatewaydev-yes-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_METHOD);
+ NM_SETTING_IP_CONFIG_METHOD);
- ASSERT (nm_setting_ip4_config_get_never_default (s_ip4) == FALSE,
+ ASSERT (nm_setting_ip_config_get_never_default (s_ip4) == FALSE,
"wired-defroute-no-gatewaydev-yes-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_NEVER_DEFAULT);
+ NM_SETTING_IP_CONFIG_NEVER_DEFAULT);
/* ===== IPv6 SETTING ===== */
@@ -1285,18 +1104,18 @@ test_read_wired_defroute_no_gatewaydev_yes (void)
NM_SETTING_IP6_CONFIG_SETTING_NAME);
/* Method */
- tmp = nm_setting_ip6_config_get_method (s_ip6);
- ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
- "wired-defroute-no-gatewaydev-yes-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
+ tmp = nm_setting_ip_config_get_method (s_ip6);
+ ASSERT (strcmp (tmp, NM_SETTING_IP6_CONFIG_METHOD_AUTO) == 0,
+ "wired-defroute-no-gatewaydev-yes-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_METHOD);
+ NM_SETTING_IP_CONFIG_METHOD);
- ASSERT (nm_setting_ip6_config_get_never_default (s_ip6) == FALSE,
- "wired-defroute-no-gatewaydev-yes-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
+ ASSERT (nm_setting_ip_config_get_never_default (s_ip6) == FALSE,
+ "wired-defroute-no-gatewaydev-yes-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_NEVER_DEFAULT);
+ NM_SETTING_IP_CONFIG_NEVER_DEFAULT);
g_free (unmanaged);
g_free (keyfile);
@@ -1305,168 +1124,51 @@ test_read_wired_defroute_no_gatewaydev_yes (void)
g_object_unref (connection);
}
-#define TEST_IFCFG_WIRED_STATIC_ROUTES TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-static-routes"
-
static void
test_read_wired_static_routes (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;
+ NMSettingIPConfig *s_ip4;
GError *error = NULL;
- const char *tmp;
- NMIP4Route *ip4_route;
- 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";
- const char *expected_gw1 = "192.168.1.5";
- const char *expected_gw2 = "192.168.1.7";
-
- connection = connection_from_file (TEST_IFCFG_WIRED_STATIC_ROUTES,
- NULL,
- TYPE_ETHERNET,
- NULL,
- &unmanaged,
- &keyfile,
- &routefile,
- &route6file,
- &error,
- &ignore_error);
-
- ASSERT (connection != NULL,
- "wired-static-routes-read",
- "failed to read %s: %s",
- TEST_IFCFG_WIRED_STATIC_ROUTES, error->message);
+ NMIPRoute *ip4_route;
- ASSERT (nm_connection_verify (connection, &error),
- "wired-static-routes-verify", "failed to verify %s: %s",
- TEST_IFCFG_WIRED_STATIC_ROUTES, error->message);
-
- ASSERT (unmanaged == NULL,
- "wired-static-routes-verify",
- "failed to verify %s: unexpected unmanaged value",
- TEST_IFCFG_WIRED_STATIC_ROUTES);
+ connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-static-routes",
+ NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL);
+ nmtst_assert_connection_verifies_without_normalization (connection);
/* ===== CONNECTION SETTING ===== */
-
s_con = nm_connection_get_setting_connection (connection);
- ASSERT (s_con != NULL,
- "wired-static-routes-verify-connection", "failed to verify %s: missing %s setting",
- TEST_IFCFG_WIRED_STATIC_ROUTES,
- NM_SETTING_CONNECTION_SETTING_NAME);
-
- /* ID */
- tmp = nm_setting_connection_get_id (s_con);
- ASSERT (tmp != NULL,
- "wired-static-routes-verify-connection", "failed to verify %s: missing %s / %s key",
- TEST_IFCFG_WIRED_STATIC_ROUTES,
- NM_SETTING_CONNECTION_SETTING_NAME,
- NM_SETTING_CONNECTION_ID);
- ASSERT (strcmp (tmp, expected_id) == 0,
- "wired-static-routes-verify-connection", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_WIRED_STATIC_ROUTES,
- NM_SETTING_CONNECTION_SETTING_NAME,
- NM_SETTING_CONNECTION_ID);
+ g_assert (s_con);
+ g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, "System test-wired-static-routes");
/* ===== WIRED SETTING ===== */
-
s_wired = nm_connection_get_setting_wired (connection);
- ASSERT (s_wired != NULL,
- "wired-static-routes-verify-wired", "failed to verify %s: missing %s setting",
- TEST_IFCFG_WIRED_STATIC_ROUTES,
- NM_SETTING_WIRED_SETTING_NAME);
+ g_assert (s_wired);
/* ===== IPv4 SETTING ===== */
-
s_ip4 = nm_connection_get_setting_ip4_config (connection);
- ASSERT (s_ip4 != NULL,
- "wired-static-routes-verify-ip4", "failed to verify %s: missing %s setting",
- TEST_IFCFG_WIRED_STATIC_ROUTES,
- 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-routes-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_WIRED_STATIC_ROUTES,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_METHOD);
+ g_assert (s_ip4);
+ g_assert_cmpstr (nm_setting_ip_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_MANUAL);
/* Routes */
- ASSERT (nm_setting_ip4_config_get_num_routes (s_ip4) == 2,
- "wired-static-routes-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_WIRED_STATIC_ROUTES,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_ROUTES);
-
- ip4_route = nm_setting_ip4_config_get_route (s_ip4, 0);
- ASSERT (ip4_route,
- "wired-static-routes-verify-ip4", "failed to verify %s: missing IP4 route #1",
- TEST_IFCFG_WIRED_STATIC_ROUTES);
-
- 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,
- "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,
- NM_SETTING_IP4_CONFIG_ROUTES);
-
- ASSERT (nm_ip4_route_get_prefix (ip4_route) == 24,
- "wired-static-routes-verify-ip4", "failed to verify %s: unexpected destination route #1 prefix",
- TEST_IFCFG_WIRED_STATIC_ROUTES);
-
- 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,
- "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,
- NM_SETTING_IP4_CONFIG_ROUTES);
-
- ip4_route = nm_setting_ip4_config_get_route (s_ip4, 1);
- ASSERT (ip4_route,
- "wired-static-routes-verify-ip4", "failed to verify %s: missing IP4 route #2",
- TEST_IFCFG_WIRED_STATIC_ROUTES);
-
- 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,
- "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,
- NM_SETTING_IP4_CONFIG_ROUTES);
-
- ASSERT (nm_ip4_route_get_prefix (ip4_route) == 32,
- "wired-static-routes-verify-ip4", "failed to verify %s: unexpected destination route #2 prefix",
- TEST_IFCFG_WIRED_STATIC_ROUTES);
-
- 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,
- "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,
- NM_SETTING_IP4_CONFIG_ROUTES);
- ASSERT (nm_ip4_route_get_metric (ip4_route) == 3,
- "wired-static-routes-verify-ip4", "failed to verify %s: unexpected route metric #2",
- TEST_IFCFG_WIRED_STATIC_ROUTES);
+ g_assert_cmpint (nm_setting_ip_config_get_num_routes (s_ip4), ==, 2);
+
+ ip4_route = nm_setting_ip_config_get_route (s_ip4, 0);
+ g_assert (ip4_route);
+ g_assert_cmpstr (nm_ip_route_get_dest (ip4_route), ==, "11.22.33.0");
+ g_assert_cmpint (nm_ip_route_get_prefix (ip4_route), ==, 24);
+ g_assert_cmpstr (nm_ip_route_get_next_hop (ip4_route), ==, "192.168.1.5");
+ g_assert_cmpint (nm_ip_route_get_metric (ip4_route), ==, -1);
+
+ ip4_route = nm_setting_ip_config_get_route (s_ip4, 1);
+ g_assert (ip4_route);
+ g_assert_cmpstr (nm_ip_route_get_dest (ip4_route), ==, "44.55.66.77");
+ g_assert_cmpint (nm_ip_route_get_prefix (ip4_route), ==, 32);
+ g_assert_cmpstr (nm_ip_route_get_next_hop (ip4_route), ==, "192.168.1.7");
+ g_assert_cmpint (nm_ip_route_get_metric (ip4_route), ==, 3);
- g_free (unmanaged);
- g_free (keyfile);
- g_free (routefile);
- g_free (route6file);
g_object_unref (connection);
}
@@ -1478,7 +1180,7 @@ test_read_wired_static_routes_legacy (void)
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
char *unmanaged = NULL;
char *keyfile = NULL;
char *routefile = NULL;
@@ -1486,20 +1188,12 @@ test_read_wired_static_routes_legacy (void)
gboolean ignore_error = FALSE;
GError *error = NULL;
const char *tmp;
- NMIP4Route *ip4_route;
- guint32 addr;
+ NMIPRoute *ip4_route;
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";
- const char *expected_dst3 = "43.53.0.0";
- const char *expected_gw1 = "9.9.9.9";
- const char *expected_gw2 = "8.8.8.8";
- const char *expected_gw3 = "7.7.7.7";
connection = connection_from_file (TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
NULL,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -1559,115 +1253,43 @@ test_read_wired_static_routes_legacy (void)
NM_SETTING_IP4_CONFIG_SETTING_NAME);
/* Method */
- tmp = nm_setting_ip4_config_get_method (s_ip4);
+ tmp = nm_setting_ip_config_get_method (s_ip4);
ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_MANUAL) == 0,
"wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_METHOD);
+ NM_SETTING_IP_CONFIG_METHOD);
/* Routes */
- ASSERT (nm_setting_ip4_config_get_num_routes (s_ip4) == 3,
+ ASSERT (nm_setting_ip_config_get_num_routes (s_ip4) == 3,
"wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_ROUTES);
+ NM_SETTING_IP_CONFIG_ROUTES);
/* Route #1 */
- ip4_route = nm_setting_ip4_config_get_route (s_ip4, 0);
- ASSERT (ip4_route,
- "wired-static-routes-legacy-verify-ip4", "failed to verify %s: missing IP4 route #1",
- TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
-
- 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,
- "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,
- NM_SETTING_IP4_CONFIG_ROUTES);
-
- ASSERT (nm_ip4_route_get_prefix (ip4_route) == 24,
- "wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected destination route #1 prefix",
- TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
-
- 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,
- "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,
- NM_SETTING_IP4_CONFIG_ROUTES);
-
- ASSERT (nm_ip4_route_get_metric (ip4_route) == 1,
- "wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected destination route #1 metric",
- TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
+ ip4_route = nm_setting_ip_config_get_route (s_ip4, 0);
+ g_assert (ip4_route != NULL);
+ g_assert_cmpstr (nm_ip_route_get_dest (ip4_route), ==, "21.31.41.0");
+ g_assert_cmpint (nm_ip_route_get_prefix (ip4_route), ==, 24);
+ g_assert_cmpstr (nm_ip_route_get_next_hop (ip4_route), ==, "9.9.9.9");
+ g_assert_cmpint (nm_ip_route_get_metric (ip4_route), ==, 1);
/* Route #2 */
- ip4_route = nm_setting_ip4_config_get_route (s_ip4, 1);
- ASSERT (ip4_route,
- "wired-static-routes-legacy-verify-ip4", "failed to verify %s: missing IP4 route #2",
- TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
-
- 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,
- "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,
- NM_SETTING_IP4_CONFIG_ROUTES);
-
- ASSERT (nm_ip4_route_get_prefix (ip4_route) == 32,
- "wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected destination route #2 prefix",
- TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
-
- 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,
- "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,
- NM_SETTING_IP4_CONFIG_ROUTES);
-
- ASSERT (nm_ip4_route_get_metric (ip4_route) == 0,
- "wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected destination route #2 metric",
- TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
+ ip4_route = nm_setting_ip_config_get_route (s_ip4, 1);
+ g_assert (ip4_route != NULL);
+ g_assert_cmpstr (nm_ip_route_get_dest (ip4_route), ==, "32.42.52.62");
+ g_assert_cmpint (nm_ip_route_get_prefix (ip4_route), ==, 32);
+ g_assert_cmpstr (nm_ip_route_get_next_hop (ip4_route), ==, "8.8.8.8");
+ g_assert_cmpint (nm_ip_route_get_metric (ip4_route), ==, -1);
/* Route #3 */
- ip4_route = nm_setting_ip4_config_get_route (s_ip4, 2);
- ASSERT (ip4_route,
- "wired-static-routes-legacy-verify-ip4", "failed to verify %s: missing IP4 route #3",
- TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
-
- 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,
- "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,
- NM_SETTING_IP4_CONFIG_ROUTES);
-
- ASSERT (nm_ip4_route_get_prefix (ip4_route) == 16,
- "wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected destination route #3 prefix",
- TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
-
- 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,
- "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,
- NM_SETTING_IP4_CONFIG_ROUTES);
-
- ASSERT (nm_ip4_route_get_metric (ip4_route) == 3,
- "wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected destination route #3 metric",
- TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
+ ip4_route = nm_setting_ip_config_get_route (s_ip4, 2);
+ g_assert (ip4_route != NULL);
+ g_assert_cmpstr (nm_ip_route_get_dest (ip4_route), ==, "43.53.0.0");
+ g_assert_cmpint (nm_ip_route_get_prefix (ip4_route), ==, 16);
+ g_assert_cmpstr (nm_ip_route_get_next_hop (ip4_route), ==, "7.7.7.7");
+ g_assert_cmpint (nm_ip_route_get_metric (ip4_route), ==, 3);
g_free (unmanaged);
g_free (keyfile);
@@ -1682,7 +1304,7 @@ test_read_wired_ipv4_manual (const char *file, const char *expected_id)
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
char *unmanaged = NULL;
char *keyfile = NULL;
char *routefile = NULL;
@@ -1690,19 +1312,11 @@ test_read_wired_ipv4_manual (const char *file, const char *expected_id)
gboolean ignore_error = FALSE;
GError *error = NULL;
const char *tmp;
- const char *expected_address1 = "1.2.3.4";
- const char *expected_address2 = "9.8.7.6";
- const char *expected_address3 = "3.3.3.3";
- guint32 expected_prefix1 = 24;
- guint32 expected_prefix2 = 16;
- guint32 expected_prefix3 = 8;
- NMIP4Address *ip4_addr;
- guint32 addr;
+ NMIPAddress *ip4_addr;
connection = connection_from_file (file,
NULL,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -1756,70 +1370,37 @@ test_read_wired_ipv4_manual (const char *file, const char *expected_id)
NM_SETTING_IP4_CONFIG_SETTING_NAME);
/* Method */
- tmp = nm_setting_ip4_config_get_method (s_ip4);
+ tmp = nm_setting_ip_config_get_method (s_ip4);
ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_MANUAL) == 0,
"wired-ipv4-manual-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
file,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_METHOD);
+ NM_SETTING_IP_CONFIG_METHOD);
/* IP addresses */
- ASSERT (nm_setting_ip4_config_get_num_addresses (s_ip4) == 3,
+ ASSERT (nm_setting_ip_config_get_num_addresses (s_ip4) == 3,
"wired-ipv4-manual-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
file,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_ADDRESSES);
+ NM_SETTING_IP_CONFIG_ADDRESSES);
/* Address #1 */
- ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 0);
- ASSERT (ip4_addr,
- "wired-ipv4-manual-verify-ip4", "failed to verify %s: missing IP4 address #1",
- file);
-
- ASSERT (nm_ip4_address_get_prefix (ip4_addr) == expected_prefix1,
- "wired-ipv4-manual-verify-ip4", "failed to verify %s: unexpected IP4 address #1 prefix",
- file);
-
- 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,
- "wired-ipv4-manual-verify-ip4", "failed to verify %s: unexpected IP4 address #1",
- file);
+ ip4_addr = nm_setting_ip_config_get_address (s_ip4, 0);
+ g_assert (ip4_addr != NULL);
+ g_assert_cmpstr (nm_ip_address_get_address (ip4_addr), ==, "1.2.3.4");
+ g_assert_cmpint (nm_ip_address_get_prefix (ip4_addr), ==, 24);
/* Address #2 */
- ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 1);
- ASSERT (ip4_addr,
- "wired-ipv4-manual-verify-ip4", "failed to verify %s: missing IP4 address #2",
- file);
-
- ASSERT (nm_ip4_address_get_prefix (ip4_addr) == expected_prefix2,
- "wired-ipv4-manual-verify-ip4", "failed to verify %s: unexpected IP4 address #2 prefix",
- file);
-
- 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,
- "wired-ipv4-manual-verify-ip4", "failed to verify %s: unexpected IP4 address #2",
- file);
+ ip4_addr = nm_setting_ip_config_get_address (s_ip4, 1);
+ g_assert (ip4_addr != NULL);
+ g_assert_cmpstr (nm_ip_address_get_address (ip4_addr), ==, "9.8.7.6");
+ g_assert_cmpint (nm_ip_address_get_prefix (ip4_addr), ==, 16);
/* Address #3 */
- ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 2);
- ASSERT (ip4_addr,
- "wired-ipv4-manual-verify-ip4", "failed to verify %s: missing IP4 address #3",
- file);
-
- ASSERT (nm_ip4_address_get_prefix (ip4_addr) == expected_prefix3,
- "wired-ipv4-manual-verify-ip4", "failed to verify %s: unexpected IP4 address #3 prefix",
- file);
-
- 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,
- "wired-ipv4-manual-verify-ip4", "failed to verify %s: unexpected IP4 address #3",
- file);
+ ip4_addr = nm_setting_ip_config_get_address (s_ip4, 2);
+ g_assert (ip4_addr != NULL);
+ g_assert_cmpstr (nm_ip_address_get_address (ip4_addr), ==, "3.3.3.3");
+ g_assert_cmpint (nm_ip_address_get_prefix (ip4_addr), ==, 8);
g_free (unmanaged);
g_free (keyfile);
@@ -1836,8 +1417,8 @@ test_read_wired_ipv6_manual (void)
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *unmanaged = NULL;
char *keyfile = NULL;
char *routefile = NULL;
@@ -1846,24 +1427,14 @@ test_read_wired_ipv6_manual (void)
GError *error = NULL;
const char *tmp;
const char *expected_id = "System test-wired-ipv6-manual";
- const char *expected_address1 = "1001:abba::1234";
- const char *expected_address2 = "2001:abba::2234";
- const char *expected_address3 = "3001:abba::3234";
- guint32 expected_prefix1 = 56;
- guint32 expected_prefix2 = 64;
- guint32 expected_prefix3 = 96;
- 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;
+ NMIPAddress *ip6_addr;
+ NMIPRoute *ip6_route;
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,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -1919,54 +1490,54 @@ test_read_wired_ipv6_manual (void)
NM_SETTING_IP4_CONFIG_SETTING_NAME);
/* DNS Addresses */
- ASSERT (nm_setting_ip4_config_get_num_dns (s_ip4) == 2,
+ ASSERT (nm_setting_ip_config_get_num_dns (s_ip4) == 2,
"wired-ipv6-manual-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIRED_IPV6_MANUAL,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS);
+ NM_SETTING_IP_CONFIG_DNS);
/* DNS search domains */
- ASSERT (nm_setting_ip4_config_get_num_dns_searches (s_ip4) == 3,
+ ASSERT (nm_setting_ip_config_get_num_dns_searches (s_ip4) == 3,
"wired-ipv6-manual-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIRED_IPV6_MANUAL,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS);
+ NM_SETTING_IP_CONFIG_DNS);
- tmp = nm_setting_ip4_config_get_dns_search (s_ip4, 0);
+ tmp = nm_setting_ip_config_get_dns_search (s_ip4, 0);
ASSERT (tmp != NULL,
"wired-ipv6-manual-verify-ip4", "failed to verify %s: missing %s / %s key",
TEST_IFCFG_WIRED_IPV6_MANUAL,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS_SEARCH);
+ NM_SETTING_IP_CONFIG_DNS_SEARCH);
ASSERT (strcmp (tmp, "lorem.com") == 0,
"wired-ipv6-manual-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIRED_IPV6_MANUAL,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS_SEARCH);
+ NM_SETTING_IP_CONFIG_DNS_SEARCH);
- tmp = nm_setting_ip4_config_get_dns_search (s_ip4, 1);
+ tmp = nm_setting_ip_config_get_dns_search (s_ip4, 1);
ASSERT (tmp != NULL,
"wired-ipv6-manual-verify-ip4", "failed to verify %s: missing %s / %s key",
TEST_IFCFG_WIRED_IPV6_MANUAL,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS_SEARCH);
+ NM_SETTING_IP_CONFIG_DNS_SEARCH);
ASSERT (strcmp (tmp, "ipsum.org") == 0,
"wired-ipv6-manual-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIRED_IPV6_MANUAL,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS_SEARCH);
+ NM_SETTING_IP_CONFIG_DNS_SEARCH);
- tmp = nm_setting_ip4_config_get_dns_search (s_ip4, 2);
+ tmp = nm_setting_ip_config_get_dns_search (s_ip4, 2);
ASSERT (tmp != NULL,
"wired-ipv6-manual-verify-ip4", "failed to verify %s: missing %s / %s key",
TEST_IFCFG_WIRED_IPV6_MANUAL,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS_SEARCH);
+ NM_SETTING_IP_CONFIG_DNS_SEARCH);
ASSERT (strcmp (tmp, "dolor.edu") == 0,
"wired-ipv6-manual-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIRED_IPV6_MANUAL,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS_SEARCH);
+ NM_SETTING_IP_CONFIG_DNS_SEARCH);
/* ===== IPv6 SETTING ===== */
@@ -1977,135 +1548,92 @@ test_read_wired_ipv6_manual (void)
NM_SETTING_IP6_CONFIG_SETTING_NAME);
/* Method */
- tmp = nm_setting_ip6_config_get_method (s_ip6);
+ tmp = nm_setting_ip_config_get_method (s_ip6);
ASSERT (strcmp (tmp, NM_SETTING_IP6_CONFIG_METHOD_MANUAL) == 0,
"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_METHOD);
+ NM_SETTING_IP_CONFIG_METHOD);
- ASSERT (nm_setting_ip6_config_get_never_default (s_ip6) == FALSE,
+ ASSERT (nm_setting_ip_config_get_never_default (s_ip6) == FALSE,
"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_NEVER_DEFAULT);
+ NM_SETTING_IP_CONFIG_NEVER_DEFAULT);
- ASSERT (nm_setting_ip6_config_get_may_fail (s_ip6) == TRUE,
+ ASSERT (nm_setting_ip_config_get_may_fail (s_ip6) == TRUE,
"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_MAY_FAIL);
+ NM_SETTING_IP_CONFIG_MAY_FAIL);
/* IP addresses */
- ASSERT (nm_setting_ip6_config_get_num_addresses (s_ip6) == 3,
+ ASSERT (nm_setting_ip_config_get_num_addresses (s_ip6) == 3,
"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_ADDRESSES);
+ NM_SETTING_IP_CONFIG_ADDRESSES);
/* Address #1 */
- ip6_addr = nm_setting_ip6_config_get_address (s_ip6, 0);
- ASSERT (ip6_addr,
- "wired-ipv6-manual-verify-ip6", "failed to verify %s: missing IP6 address #1",
- TEST_IFCFG_WIRED_IPV6_MANUAL);
-
- ASSERT (nm_ip6_address_get_prefix (ip6_addr) == expected_prefix1,
- "wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected IP6 address #1 prefix",
- TEST_IFCFG_WIRED_IPV6_MANUAL);
-
- ASSERT (inet_pton (AF_INET6, expected_address1, &addr) > 0,
- "wired-ipv6-manual-verify-ip6", "failed to verify %s: couldn't convert IP address #1",
- TEST_IFCFG_WIRED_IPV6_MANUAL);
- ASSERT (IN6_ARE_ADDR_EQUAL (nm_ip6_address_get_address (ip6_addr), &addr),
- "wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected IP6 address #1",
- TEST_IFCFG_WIRED_IPV6_MANUAL);
+ ip6_addr = nm_setting_ip_config_get_address (s_ip6, 0);
+ g_assert (ip6_addr != NULL);
+ g_assert_cmpstr (nm_ip_address_get_address (ip6_addr), ==, "1001:abba::1234");
+ g_assert_cmpint (nm_ip_address_get_prefix (ip6_addr), ==, 56);
/* Address #2 */
- ip6_addr = nm_setting_ip6_config_get_address (s_ip6, 1);
- ASSERT (ip6_addr,
- "wired-ipv6-manual-verify-ip6", "failed to verify %s: missing IP6 address #2",
- TEST_IFCFG_WIRED_IPV6_MANUAL);
-
- ASSERT (nm_ip6_address_get_prefix (ip6_addr) == expected_prefix2,
- "wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected IP6 address #2 prefix",
- TEST_IFCFG_WIRED_IPV6_MANUAL);
-
- ASSERT (inet_pton (AF_INET6, expected_address2, &addr) > 0,
- "wired-ipv6-manual-verify-ip6", "failed to verify %s: couldn't convert IP address #2",
- TEST_IFCFG_WIRED_IPV6_MANUAL);
- ASSERT (IN6_ARE_ADDR_EQUAL (nm_ip6_address_get_address (ip6_addr), &addr),
- "wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected IP6 address #2",
- TEST_IFCFG_WIRED_IPV6_MANUAL);
+ ip6_addr = nm_setting_ip_config_get_address (s_ip6, 1);
+ g_assert (ip6_addr != NULL);
+ g_assert_cmpstr (nm_ip_address_get_address (ip6_addr), ==, "2001:abba::2234");
+ g_assert_cmpint (nm_ip_address_get_prefix (ip6_addr), ==, 64);
/* Address #3 */
- ip6_addr = nm_setting_ip6_config_get_address (s_ip6, 2);
- ASSERT (ip6_addr,
- "wired-ipv6-manual-verify-ip6", "failed to verify %s: missing IP6 address #3",
- TEST_IFCFG_WIRED_IPV6_MANUAL);
-
- ASSERT (nm_ip6_address_get_prefix (ip6_addr) == expected_prefix3,
- "wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected IP6 address #3 prefix",
- TEST_IFCFG_WIRED_IPV6_MANUAL);
-
- ASSERT (inet_pton (AF_INET6, expected_address3, &addr) > 0,
- "wired-ipv6-manual-verify-ip6", "failed to verify %s: couldn't convert IP address #3",
- TEST_IFCFG_WIRED_IPV6_MANUAL);
- ASSERT (IN6_ARE_ADDR_EQUAL (nm_ip6_address_get_address (ip6_addr), &addr),
- "wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected IP6 address #3",
- TEST_IFCFG_WIRED_IPV6_MANUAL);
+ ip6_addr = nm_setting_ip_config_get_address (s_ip6, 2);
+ g_assert (ip6_addr != NULL);
+ g_assert_cmpstr (nm_ip_address_get_address (ip6_addr), ==, "3001:abba::3234");
+ g_assert_cmpint (nm_ip_address_get_prefix (ip6_addr), ==, 96);
/* Routes */
- g_assert_cmpint (nm_setting_ip6_config_get_num_routes (s_ip6), ==, 2);
+ g_assert_cmpint (nm_setting_ip_config_get_num_routes (s_ip6), ==, 2);
/* Route #1 */
- ip6_route = nm_setting_ip6_config_get_route (s_ip6, 0);
+ ip6_route = nm_setting_ip_config_get_route (s_ip6, 0);
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);
+ g_assert_cmpstr (nm_ip_route_get_dest (ip6_route), ==, "9876::1234");
+ g_assert_cmpint (nm_ip_route_get_prefix (ip6_route), ==, 96);
+ g_assert_cmpstr (nm_ip_route_get_next_hop (ip6_route), ==, "9876::7777");
+ g_assert_cmpint (nm_ip_route_get_metric (ip6_route), ==, 2);
/* Route #2 */
- ip6_route = nm_setting_ip6_config_get_route (s_ip6, 1);
+ ip6_route = nm_setting_ip_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);
+ g_assert_cmpstr (nm_ip_route_get_dest (ip6_route), ==, "abbe::cafe");
+ g_assert_cmpint (nm_ip_route_get_prefix (ip6_route), ==, 64);
+ g_assert_cmpstr (nm_ip_route_get_next_hop (ip6_route), ==, NULL);
+ g_assert_cmpint (nm_ip_route_get_metric (ip6_route), ==, 777);
/* DNS Addresses */
- ASSERT (nm_setting_ip6_config_get_num_dns (s_ip6) == 2,
+ ASSERT (nm_setting_ip_config_get_num_dns (s_ip6) == 2,
"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_IP_CONFIG_DNS);
- ASSERT (inet_pton (AF_INET6, expected_dns1, &addr) > 0,
- "wired-ipv6-manual-verify-ip6", "failed to verify %s: couldn't convert DNS IP address #1",
- TEST_IFCFG_WIRED_IPV6_MANUAL);
- ASSERT (IN6_ARE_ADDR_EQUAL (nm_setting_ip6_config_get_dns (s_ip6, 0), &addr),
+ ASSERT (strcmp (nm_setting_ip_config_get_dns (s_ip6, 0), "1:2:3:4::a") == 0,
"wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected %s / %s key value #1",
TEST_IFCFG_WIRED_IPV6_MANUAL,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_DNS);
+ NM_SETTING_IP_CONFIG_DNS);
- ASSERT (inet_pton (AF_INET6, expected_dns2, &addr) > 0,
- "wired-ipv6-manual-verify-ip6", "failed to verify %s: couldn't convert DNS IP address #2",
- TEST_IFCFG_WIRED_IPV6_MANUAL);
- ASSERT (IN6_ARE_ADDR_EQUAL (nm_setting_ip6_config_get_dns (s_ip6, 1), &addr),
+ ASSERT (strcmp (nm_setting_ip_config_get_dns (s_ip6, 1), "1:2:3:4::b") == 0,
"wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected %s / %s key value #2",
TEST_IFCFG_WIRED_IPV6_MANUAL,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_DNS);
+ NM_SETTING_IP_CONFIG_DNS);
/* DNS domains - none as domains are stuffed to 'ipv4' setting */
- ASSERT (nm_setting_ip6_config_get_num_dns_searches (s_ip6) == 0,
+ ASSERT (nm_setting_ip_config_get_num_dns_searches (s_ip6) == 0,
"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_SEARCH);
+ NM_SETTING_IP_CONFIG_DNS_SEARCH);
g_free (unmanaged);
g_free (keyfile);
@@ -2122,8 +1650,8 @@ test_read_wired_ipv6_only (void)
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *unmanaged = NULL;
char *keyfile = NULL;
char *routefile = NULL;
@@ -2132,17 +1660,12 @@ test_read_wired_ipv6_only (void)
GError *error = NULL;
const char *tmp;
const char *expected_id = "System test-wired-ipv6-only";
- const char *expected_address1 = "1001:abba::1234";
- guint32 expected_prefix1 = 56;
- const char *expected_dns1 = "1:2:3:4::a";
- NMIP6Address *ip6_addr;
- struct in6_addr addr;
+ NMIPAddress *ip6_addr;
const char *method;
connection = connection_from_file (TEST_IFCFG_WIRED_IPV6_ONLY,
NULL,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -2195,12 +1718,12 @@ test_read_wired_ipv6_only (void)
TEST_IFCFG_WIRED_IPV6_MANUAL,
NM_SETTING_IP4_CONFIG_SETTING_NAME);
- method = nm_setting_ip4_config_get_method (s_ip4);
+ method = nm_setting_ip_config_get_method (s_ip4);
ASSERT (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED) == 0,
"wired-ipv6-only-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIRED_IPV6_MANUAL,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_METHOD);
+ NM_SETTING_IP_CONFIG_METHOD);
/* ===== IPv6 SETTING ===== */
@@ -2211,58 +1734,44 @@ test_read_wired_ipv6_only (void)
NM_SETTING_IP6_CONFIG_SETTING_NAME);
/* Method */
- tmp = nm_setting_ip6_config_get_method (s_ip6);
+ tmp = nm_setting_ip_config_get_method (s_ip6);
ASSERT (strcmp (tmp, NM_SETTING_IP6_CONFIG_METHOD_MANUAL) == 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_METHOD);
+ NM_SETTING_IP_CONFIG_METHOD);
/* IP addresses */
- ASSERT (nm_setting_ip6_config_get_num_addresses (s_ip6) == 1,
+ ASSERT (nm_setting_ip_config_get_num_addresses (s_ip6) == 1,
"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_ADDRESSES);
+ NM_SETTING_IP_CONFIG_ADDRESSES);
/* Address #1 */
- ip6_addr = nm_setting_ip6_config_get_address (s_ip6, 0);
- ASSERT (ip6_addr,
- "wired-ipv6-only-verify-ip6", "failed to verify %s: missing IP6 address #1",
- TEST_IFCFG_WIRED_IPV6_MANUAL);
-
- ASSERT (nm_ip6_address_get_prefix (ip6_addr) == expected_prefix1,
- "wired-ipv6-only-verify-ip6", "failed to verify %s: unexpected IP6 address #1 prefix",
- TEST_IFCFG_WIRED_IPV6_MANUAL);
-
- ASSERT (inet_pton (AF_INET6, expected_address1, &addr) > 0,
- "wired-ipv6-only-verify-ip6", "failed to verify %s: couldn't convert IP address #1",
- TEST_IFCFG_WIRED_IPV6_MANUAL);
- ASSERT (IN6_ARE_ADDR_EQUAL (nm_ip6_address_get_address (ip6_addr), &addr),
- "wired-ipv6-only-verify-ip6", "failed to verify %s: unexpected IP6 address #1",
- TEST_IFCFG_WIRED_IPV6_MANUAL);
+ ip6_addr = nm_setting_ip_config_get_address (s_ip6, 0);
+ g_assert (ip6_addr != NULL);
+ g_assert_cmpstr (nm_ip_address_get_address (ip6_addr), ==, "1001:abba::1234");
+ g_assert_cmpint (nm_ip_address_get_prefix (ip6_addr), ==, 56);
/* DNS Addresses */
- ASSERT (nm_setting_ip6_config_get_num_dns (s_ip6) == 1,
+ ASSERT (nm_setting_ip_config_get_num_dns (s_ip6) == 1,
"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);
+ NM_SETTING_IP_CONFIG_DNS);
- ASSERT (inet_pton (AF_INET6, expected_dns1, &addr) > 0,
- "wired-ipv6-only-verify-ip6", "failed to verify %s: couldn't convert DNS IP address #1",
- TEST_IFCFG_WIRED_IPV6_MANUAL);
- ASSERT (IN6_ARE_ADDR_EQUAL (nm_setting_ip6_config_get_dns (s_ip6, 0), &addr),
+ ASSERT (strcmp (nm_setting_ip_config_get_dns (s_ip6, 0), "1:2:3:4::a") == 0,
"wired-ipv6-only-verify-ip6", "failed to verify %s: unexpected %s / %s key value #1",
TEST_IFCFG_WIRED_IPV6_MANUAL,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_DNS);
+ NM_SETTING_IP_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_assert_cmpint (nm_setting_ip_config_get_num_dns_searches (s_ip6), ==, 3);
+ g_assert_cmpstr (nm_setting_ip_config_get_dns_search (s_ip6, 0), ==, "lorem.com");
+ g_assert_cmpstr (nm_setting_ip_config_get_dns_search (s_ip6, 1), ==, "ipsum.org");
+ g_assert_cmpstr (nm_setting_ip_config_get_dns_search (s_ip6, 2), ==, "dolor.edu");
g_free (unmanaged);
g_free (keyfile);
@@ -2279,8 +1788,8 @@ test_read_wired_dhcp6_only (void)
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *unmanaged = NULL;
char *keyfile = NULL;
char *routefile = NULL;
@@ -2294,7 +1803,6 @@ test_read_wired_dhcp6_only (void)
connection = connection_from_file (TEST_IFCFG_WIRED_DHCP6_ONLY,
NULL,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -2347,12 +1855,12 @@ test_read_wired_dhcp6_only (void)
TEST_IFCFG_WIRED_DHCP6_ONLY,
NM_SETTING_IP4_CONFIG_SETTING_NAME);
- method = nm_setting_ip4_config_get_method (s_ip4);
+ method = nm_setting_ip_config_get_method (s_ip4);
ASSERT (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED) == 0,
"wired-dhcp6-only-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIRED_DHCP6_ONLY,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_METHOD);
+ NM_SETTING_IP_CONFIG_METHOD);
/* ===== IPv6 SETTING ===== */
@@ -2363,12 +1871,12 @@ test_read_wired_dhcp6_only (void)
NM_SETTING_IP6_CONFIG_SETTING_NAME);
/* Method */
- tmp = nm_setting_ip6_config_get_method (s_ip6);
+ tmp = nm_setting_ip_config_get_method (s_ip6);
ASSERT (strcmp (tmp, NM_SETTING_IP6_CONFIG_METHOD_DHCP) == 0,
"wired-dhcp6-only-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIRED_DHCP6_ONLY,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_METHOD);
+ NM_SETTING_IP_CONFIG_METHOD);
g_free (unmanaged);
g_free (keyfile);
@@ -2394,7 +1902,6 @@ test_read_onboot_no (void)
connection = connection_from_file (TEST_IFCFG_ONBOOT_NO,
NULL,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -2438,8 +1945,8 @@ static void
test_read_noip (void)
{
NMConnection *connection;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *unmanaged = NULL;
char *keyfile = NULL;
char *routefile = NULL;
@@ -2450,7 +1957,6 @@ test_read_noip (void)
connection = connection_from_file (TEST_IFCFG_NOIP,
NULL,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -2463,13 +1969,13 @@ test_read_noip (void)
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);
+ g_assert_cmpstr (nm_setting_ip_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_DISABLED);
+ g_assert (nm_setting_ip_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_assert_cmpstr (nm_setting_ip_config_get_method (s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_IGNORE);
+ g_assert (nm_setting_ip_config_get_never_default (s_ip6) == FALSE);
g_free (unmanaged);
g_free (keyfile);
@@ -2486,7 +1992,7 @@ test_read_wired_8021x_peap_mschapv2 (void)
{
NMConnection *connection;
NMSettingWired *s_wired;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
NMSetting8021x *s_8021x;
NMSetting8021x *tmp_8021x;
char *unmanaged = NULL;
@@ -2506,7 +2012,6 @@ test_read_wired_8021x_peap_mschapv2 (void)
connection = connection_from_file (TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
NULL,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -2539,12 +2044,12 @@ test_read_wired_8021x_peap_mschapv2 (void)
NM_SETTING_IP4_CONFIG_SETTING_NAME);
/* Method */
- tmp = nm_setting_ip4_config_get_method (s_ip4);
+ tmp = nm_setting_ip_config_get_method (s_ip4);
ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
"wired-8021x-peap-mschapv2-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_METHOD);
+ NM_SETTING_IP_CONFIG_METHOD);
/* ===== 802.1x SETTING ===== */
s_8021x = nm_connection_get_setting_802_1x (connection);
@@ -2700,7 +2205,6 @@ test_read_wired_8021x_tls_secret_flags (const char *ifcfg, NMSettingSecretFlags
connection = connection_from_file (ifcfg,
NULL,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -2757,7 +2261,7 @@ test_read_write_802_1X_subj_matches (void)
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, TYPE_ETHERNET, NULL,
NULL, NULL, NULL, &error, NULL);
g_test_assert_expected_messages ();
g_assert_no_error (error);
@@ -2786,12 +2290,12 @@ test_read_write_802_1X_subj_matches (void)
g_assert (success);
/* reread will be normalized, so we must normalize connection too. */
- nm_utils_normalize_connection (connection, TRUE);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* 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,
+ reread = connection_from_file (written, NULL, TYPE_ETHERNET, NULL,
NULL, NULL, NULL, &error, NULL);
g_test_assert_expected_messages ();
unlink (written);
@@ -2840,7 +2344,7 @@ test_read_802_1x_ttls_eapgtc (void)
*/
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);
+ NULL, TYPE_WIRELESS, NULL, NULL, NULL, NULL, &error, NULL);
g_assert_no_error (error);
g_assert (connection);
success = nm_connection_verify (connection, &error);
@@ -2869,7 +2373,7 @@ test_read_wired_aliases_good (void)
{
NMConnection *connection;
NMSettingConnection *s_con;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
char *unmanaged = NULL;
char *keyfile = NULL;
char *routefile = NULL;
@@ -2878,16 +2382,15 @@ test_read_wired_aliases_good (void)
GError *error = NULL;
const char *tmp;
const char *expected_id = "System aliasem0";
- int expected_num_addresses = 4, expected_prefix = 24;
+ int expected_num_addresses = 4;
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" };
+ const char *expected_gateway = "192.168.1.1";
int i, j;
connection = connection_from_file (TEST_IFCFG_ALIASES_GOOD,
NULL,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -2930,74 +2433,51 @@ test_read_wired_aliases_good (void)
NM_SETTING_IP4_CONFIG_SETTING_NAME);
/* Method */
- tmp = nm_setting_ip4_config_get_method (s_ip4);
+ tmp = nm_setting_ip_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);
+ NM_SETTING_IP_CONFIG_METHOD);
- ASSERT (nm_setting_ip4_config_get_num_addresses (s_ip4) == expected_num_addresses,
+ ASSERT (nm_setting_ip_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);
+ NM_SETTING_IP_CONFIG_ADDRESSES);
/* Addresses */
for (i = 0; i < expected_num_addresses; i++) {
- NMIP4Address *ip4_addr;
- char buf[INET_ADDRSTRLEN];
- struct in_addr addr;
+ NMIPAddress *ip4_addr;
+ const char *addr;
+ GVariant *label;
- 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);
+ ip4_addr = nm_setting_ip_config_get_address (s_ip4, i);
+ g_assert (ip4_addr != NULL);
- 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);
+ addr = nm_ip_address_get_address (ip4_addr);
+ g_assert (nm_utils_ipaddr_valid (AF_INET, addr));
for (j = 0; j < expected_num_addresses; j++) {
- if (!g_strcmp0 (buf, expected_address[j]))
+ if (!g_strcmp0 (addr, expected_address[j]))
break;
}
+ g_assert (j < expected_num_addresses);
- 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);
+ g_assert_cmpint (nm_ip_address_get_prefix (ip4_addr), ==, 24);
+ label = nm_ip_address_get_attribute (ip4_addr, "label");
+ if (expected_label[j])
+ g_assert_cmpstr (g_variant_get_string (label, NULL), ==, expected_label[j]);
+ else
+ g_assert (label == NULL);
expected_address[j] = NULL;
- expected_gateway[j] = NULL;
expected_label[j] = NULL;
}
+ /* Gateway */
+ g_assert_cmpstr (nm_setting_ip_config_get_gateway (s_ip4), ==, expected_gateway);
+
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",
@@ -3016,7 +2496,7 @@ test_read_wired_aliases_bad (const char *base, const char *expected_id)
{
NMConnection *connection;
NMSettingConnection *s_con;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
char *unmanaged = NULL;
char *keyfile = NULL;
char *routefile = NULL;
@@ -3024,17 +2504,11 @@ test_read_wired_aliases_bad (const char *base, const char *expected_id)
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;
+ NMIPAddress *ip4_addr;
connection = connection_from_file (base,
NULL,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -3078,46 +2552,28 @@ test_read_wired_aliases_bad (const char *base, const char *expected_id)
NM_SETTING_IP4_CONFIG_SETTING_NAME);
/* Method */
- tmp = nm_setting_ip4_config_get_method (s_ip4);
+ tmp = nm_setting_ip_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);
+ NM_SETTING_IP_CONFIG_METHOD);
- ASSERT (nm_setting_ip4_config_get_num_addresses (s_ip4) == expected_num_addresses,
+ ASSERT (nm_setting_ip_config_get_num_addresses (s_ip4) == 1,
"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);
+ NM_SETTING_IP_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);
+ ip4_addr = nm_setting_ip_config_get_address (s_ip4, 0);
+ g_assert (ip4_addr != NULL);
+ g_assert_cmpstr (nm_ip_address_get_address (ip4_addr), ==, "192.168.1.5");
+ g_assert_cmpint (nm_ip_address_get_prefix (ip4_addr), ==, 24);
+ g_assert (nm_ip_address_get_attribute (ip4_addr, "label") == NULL);
+
+ /* Gateway */
+ g_assert_cmpstr (nm_setting_ip_config_get_gateway (s_ip4), ==, "192.168.1.1");
g_free (keyfile);
g_free (routefile);
@@ -3154,7 +2610,7 @@ test_read_wifi_open (void)
NMSettingConnection *s_con;
NMSettingWireless *s_wireless;
NMSettingWirelessSecurity *s_wsec;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
char *unmanaged = NULL;
char *keyfile = NULL;
char *routefile = NULL;
@@ -3162,7 +2618,8 @@ test_read_wifi_open (void)
gboolean ignore_error = FALSE;
GError *error = NULL;
const char *tmp;
- const GByteArray *array;
+ GBytes *ssid;
+ const char *mac;
char expected_mac_address[ETH_ALEN] = { 0x00, 0x16, 0x41, 0x11, 0x22, 0x33 };
const char *expected_id = "System blahblah (test-wifi-open)";
guint64 expected_timestamp = 0;
@@ -3173,7 +2630,6 @@ test_read_wifi_open (void)
connection = connection_from_file (TEST_IFCFG_WIFI_OPEN,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -3226,6 +2682,8 @@ test_read_wifi_open (void)
NM_SETTING_CONNECTION_SETTING_NAME,
NM_SETTING_CONNECTION_AUTOCONNECT);
+ g_assert_cmpint (nm_setting_connection_get_autoconnect_priority (s_con), ==, -1);
+
/* ===== WIRELESS SETTING ===== */
s_wireless = nm_connection_get_setting_wireless (connection);
@@ -3235,18 +2693,13 @@ test_read_wifi_open (void)
NM_SETTING_WIRELESS_SETTING_NAME);
/* MAC address */
- array = nm_setting_wireless_get_mac_address (s_wireless);
- ASSERT (array != NULL,
+ mac = nm_setting_wireless_get_mac_address (s_wireless);
+ ASSERT (mac != NULL,
"wifi-open-verify-wireless", "failed to verify %s: missing %s / %s key",
TEST_IFCFG_WIFI_OPEN,
NM_SETTING_WIRELESS_SETTING_NAME,
NM_SETTING_WIRELESS_MAC_ADDRESS);
- ASSERT (array->len == ETH_ALEN,
- "wifi-open-verify-wireless", "failed to verify %s: unexpected %s / %s key value length",
- TEST_IFCFG_WIFI_OPEN,
- NM_SETTING_WIRELESS_SETTING_NAME,
- NM_SETTING_WIRELESS_MAC_ADDRESS);
- ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0,
+ ASSERT (nm_utils_hwaddr_matches (mac, -1, expected_mac_address, sizeof (expected_mac_address)),
"wifi-open-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIFI_OPEN,
NM_SETTING_WIRELESS_SETTING_NAME,
@@ -3258,18 +2711,18 @@ test_read_wifi_open (void)
NM_SETTING_WIRELESS_SETTING_NAME,
NM_SETTING_WIRELESS_MTU);
- array = nm_setting_wireless_get_ssid (s_wireless);
- ASSERT (array != NULL,
+ ssid = nm_setting_wireless_get_ssid (s_wireless);
+ ASSERT (ssid != NULL,
"wifi-open-verify-wireless", "failed to verify %s: missing %s / %s key",
TEST_IFCFG_WIFI_OPEN,
NM_SETTING_WIRELESS_SETTING_NAME,
NM_SETTING_WIRELESS_SSID);
- ASSERT (array->len == strlen (expected_ssid),
+ ASSERT (g_bytes_get_size (ssid) == strlen (expected_ssid),
"wifi-open-verify-wireless", "failed to verify %s: unexpected %s / %s key value length",
TEST_IFCFG_WIFI_OPEN,
NM_SETTING_WIRELESS_SETTING_NAME,
NM_SETTING_WIRELESS_SSID);
- ASSERT (memcmp (array->data, expected_ssid, strlen (expected_ssid)) == 0,
+ ASSERT (memcmp (g_bytes_get_data (ssid, NULL), expected_ssid, strlen (expected_ssid)) == 0,
"wifi-open-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIFI_OPEN,
NM_SETTING_WIRELESS_SETTING_NAME,
@@ -3312,12 +2765,12 @@ test_read_wifi_open (void)
NM_SETTING_IP4_CONFIG_SETTING_NAME);
/* Method */
- tmp = nm_setting_ip4_config_get_method (s_ip4);
+ tmp = nm_setting_ip_config_get_method (s_ip4);
ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
"wifi-open-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIFI_OPEN,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_METHOD);
+ NM_SETTING_IP_CONFIG_METHOD);
g_free (unmanaged);
g_free (keyfile);
@@ -3347,7 +2800,6 @@ test_read_wifi_open_auto (void)
connection = connection_from_file (TEST_IFCFG_WIFI_OPEN_AUTO,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -3423,14 +2875,13 @@ test_read_wifi_open_ssid_hex (void)
gboolean ignore_error = FALSE;
GError *error = NULL;
const char *tmp;
- const GByteArray *array;
+ GBytes *ssid;
const char *expected_id = "System blahblah (test-wifi-open-ssid-hex)";
const char *expected_ssid = "blahblah";
connection = connection_from_file (TEST_IFCFG_WIFI_OPEN_SSID_HEX,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -3473,18 +2924,18 @@ test_read_wifi_open_ssid_hex (void)
NM_SETTING_WIRELESS_SETTING_NAME);
/* SSID */
- array = nm_setting_wireless_get_ssid (s_wireless);
- ASSERT (array != NULL,
+ ssid = nm_setting_wireless_get_ssid (s_wireless);
+ ASSERT (ssid != NULL,
"wifi-open-ssid-hex-verify-wireless", "failed to verify %s: missing %s / %s key",
TEST_IFCFG_WIFI_OPEN_SSID_HEX,
NM_SETTING_WIRELESS_SETTING_NAME,
NM_SETTING_WIRELESS_SSID);
- ASSERT (array->len == strlen (expected_ssid),
+ ASSERT (g_bytes_get_size (ssid) == strlen (expected_ssid),
"wifi-open-ssid-hex-verify-wireless", "failed to verify %s: unexpected %s / %s key value length",
TEST_IFCFG_WIFI_OPEN_SSID_HEX,
NM_SETTING_WIRELESS_SETTING_NAME,
NM_SETTING_WIRELESS_SSID);
- ASSERT (memcmp (array->data, expected_ssid, strlen (expected_ssid)) == 0,
+ ASSERT (memcmp (g_bytes_get_data (ssid, NULL), expected_ssid, strlen (expected_ssid)) == 0,
"wifi-open-ssid-hex-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIFI_OPEN_SSID_HEX,
NM_SETTING_WIRELESS_SETTING_NAME,
@@ -3511,7 +2962,6 @@ test_read_wifi_open_ssid_bad (const char *file, const char *test)
connection = connection_from_file (file,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -3542,14 +2992,13 @@ test_read_wifi_open_ssid_quoted (void)
gboolean ignore_error = FALSE;
GError *error = NULL;
const char *tmp;
- const GByteArray *array;
+ GBytes *ssid;
const char *expected_id = "System foo\"bar\\ (test-wifi-open-ssid-quoted)";
const char *expected_ssid = "foo\"bar\\";
connection = connection_from_file (TEST_IFCFG_WIFI_OPEN_SSID_QUOTED,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -3592,18 +3041,18 @@ test_read_wifi_open_ssid_quoted (void)
NM_SETTING_WIRELESS_SETTING_NAME);
/* SSID */
- array = nm_setting_wireless_get_ssid (s_wireless);
- ASSERT (array != NULL,
+ ssid = nm_setting_wireless_get_ssid (s_wireless);
+ ASSERT (ssid != NULL,
"wifi-open-ssid-quoted-verify-wireless", "failed to verify %s: missing %s / %s key",
TEST_IFCFG_WIFI_OPEN_SSID_QUOTED,
NM_SETTING_WIRELESS_SETTING_NAME,
NM_SETTING_WIRELESS_SSID);
- ASSERT (array->len == strlen (expected_ssid),
+ ASSERT (g_bytes_get_size (ssid) == strlen (expected_ssid),
"wifi-open-ssid-quoted-verify-wireless", "failed to verify %s: unexpected %s / %s key value length",
TEST_IFCFG_WIFI_OPEN_SSID_QUOTED,
NM_SETTING_WIRELESS_SETTING_NAME,
NM_SETTING_WIRELESS_SSID);
- ASSERT (memcmp (array->data, expected_ssid, strlen (expected_ssid)) == 0,
+ ASSERT (memcmp (g_bytes_get_data (ssid, NULL), expected_ssid, strlen (expected_ssid)) == 0,
"wifi-open-ssid-quoted-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIFI_OPEN_SSID_QUOTED,
NM_SETTING_WIRELESS_SETTING_NAME,
@@ -3625,7 +3074,7 @@ test_read_wifi_wep (void)
NMSettingConnection *s_con;
NMSettingWireless *s_wireless;
NMSettingWirelessSecurity *s_wsec;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
char *unmanaged = NULL;
char *keyfile = NULL;
char *routefile = NULL;
@@ -3633,7 +3082,8 @@ test_read_wifi_wep (void)
gboolean ignore_error = FALSE;
GError *error = NULL;
const char *tmp;
- const GByteArray *array;
+ GBytes *ssid;
+ const char *mac;
char expected_mac_address[ETH_ALEN] = { 0x00, 0x16, 0x41, 0x11, 0x22, 0x33 };
const char *expected_id = "System blahblah (test-wifi-wep)";
guint64 expected_timestamp = 0;
@@ -3646,7 +3096,6 @@ test_read_wifi_wep (void)
connection = connection_from_file (TEST_IFCFG_WIFI_WEP,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -3708,18 +3157,13 @@ test_read_wifi_wep (void)
NM_SETTING_WIRELESS_SETTING_NAME);
/* MAC address */
- array = nm_setting_wireless_get_mac_address (s_wireless);
- ASSERT (array != NULL,
+ mac = nm_setting_wireless_get_mac_address (s_wireless);
+ ASSERT (mac != 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_MAC_ADDRESS);
- ASSERT (array->len == ETH_ALEN,
- "wifi-wep-verify-wireless", "failed to verify %s: unexpected %s / %s key value length",
- TEST_IFCFG_WIFI_WEP,
- NM_SETTING_WIRELESS_SETTING_NAME,
- NM_SETTING_WIRELESS_MAC_ADDRESS);
- ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0,
+ ASSERT (nm_utils_hwaddr_matches (mac, -1, expected_mac_address, sizeof (expected_mac_address)),
"wifi-wep-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIFI_WEP,
NM_SETTING_WIRELESS_SETTING_NAME,
@@ -3733,18 +3177,18 @@ test_read_wifi_wep (void)
NM_SETTING_WIRELESS_MTU);
/* SSID */
- array = nm_setting_wireless_get_ssid (s_wireless);
- ASSERT (array != NULL,
+ ssid = nm_setting_wireless_get_ssid (s_wireless);
+ ASSERT (ssid != 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_SSID);
- ASSERT (array->len == strlen (expected_ssid),
+ ASSERT (g_bytes_get_size (ssid) == strlen (expected_ssid),
"wifi-wep-verify-wireless", "failed to verify %s: unexpected %s / %s key value length",
TEST_IFCFG_WIFI_WEP,
NM_SETTING_WIRELESS_SETTING_NAME,
NM_SETTING_WIRELESS_SSID);
- ASSERT (memcmp (array->data, expected_ssid, strlen (expected_ssid)) == 0,
+ ASSERT (memcmp (g_bytes_get_data (ssid, NULL), expected_ssid, strlen (expected_ssid)) == 0,
"wifi-wep-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIFI_WEP,
NM_SETTING_WIRELESS_SETTING_NAME,
@@ -3865,12 +3309,12 @@ test_read_wifi_wep (void)
NM_SETTING_IP4_CONFIG_SETTING_NAME);
/* Method */
- tmp = nm_setting_ip4_config_get_method (s_ip4);
+ tmp = nm_setting_ip_config_get_method (s_ip4);
ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
"wifi-wep-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIFI_WEP,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_METHOD);
+ NM_SETTING_IP_CONFIG_METHOD);
g_free (unmanaged);
g_free (keyfile);
@@ -3888,7 +3332,7 @@ test_read_wifi_wep_adhoc (void)
NMSettingConnection *s_con;
NMSettingWireless *s_wireless;
NMSettingWirelessSecurity *s_wsec;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
char *unmanaged = NULL;
char *keyfile = NULL;
char *routefile = NULL;
@@ -3896,19 +3340,15 @@ test_read_wifi_wep_adhoc (void)
gboolean ignore_error = FALSE;
GError *error = NULL;
const char *tmp;
- const GByteArray *array;
+ GBytes *ssid;
const char *expected_id = "System blahblah (test-wifi-wep-adhoc)";
const char *expected_ssid = "blahblah";
const char *expected_mode = "adhoc";
const char *expected_wep_key0 = "0123456789abcdef0123456789";
- guint32 addr;
- const char *expected_dns1 = "4.2.2.1";
- const char *expected_dns2 = "4.2.2.2";
connection = connection_from_file (TEST_IFCFG_WIFI_WEP_ADHOC,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -3963,18 +3403,18 @@ test_read_wifi_wep_adhoc (void)
NM_SETTING_WIRELESS_SETTING_NAME);
/* SSID */
- array = nm_setting_wireless_get_ssid (s_wireless);
- ASSERT (array != NULL,
+ ssid = nm_setting_wireless_get_ssid (s_wireless);
+ ASSERT (ssid != 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_SSID);
- ASSERT (array->len == strlen (expected_ssid),
+ ASSERT (g_bytes_get_size (ssid) == strlen (expected_ssid),
"wifi-wep-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key value length",
TEST_IFCFG_WIFI_WEP_ADHOC,
NM_SETTING_WIRELESS_SETTING_NAME,
NM_SETTING_WIRELESS_SSID);
- ASSERT (memcmp (array->data, expected_ssid, strlen (expected_ssid)) == 0,
+ ASSERT (memcmp (g_bytes_get_data (ssid, NULL), expected_ssid, strlen (expected_ssid)) == 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,
@@ -4083,48 +3523,38 @@ test_read_wifi_wep_adhoc (void)
NM_SETTING_IP4_CONFIG_SETTING_NAME);
/* Method */
- tmp = nm_setting_ip4_config_get_method (s_ip4);
+ tmp = nm_setting_ip_config_get_method (s_ip4);
ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
"wifi-wep-adhoc-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIFI_WEP_ADHOC,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_METHOD);
+ NM_SETTING_IP_CONFIG_METHOD);
/* Ignore auto DNS */
- ASSERT (nm_setting_ip4_config_get_ignore_auto_dns (s_ip4) == TRUE,
+ ASSERT (nm_setting_ip_config_get_ignore_auto_dns (s_ip4) == TRUE,
"wifi-wep-adhoc-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIFI_WEP_ADHOC,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS);
+ NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS);
/* DNS Addresses */
- ASSERT (nm_setting_ip4_config_get_num_dns (s_ip4) == 2,
+ ASSERT (nm_setting_ip_config_get_num_dns (s_ip4) == 2,
"wifi-wep-adhoc-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIFI_WEP_ADHOC,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS);
+ NM_SETTING_IP_CONFIG_DNS);
- ASSERT (inet_pton (AF_INET, expected_dns1, &addr) > 0,
- "wifi-wep-adhoc-verify-ip4", "failed to verify %s: couldn't convert DNS IP address #1",
- 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,
+ ASSERT (strcmp (nm_setting_ip_config_get_dns (s_ip4, 0), "4.2.2.1") == 0,
"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,
- NM_SETTING_IP4_CONFIG_DNS);
+ NM_SETTING_IP_CONFIG_DNS);
- ASSERT (inet_pton (AF_INET, expected_dns2, &addr) > 0,
- "wifi-wep-adhoc-verify-ip4", "failed to verify %s: couldn't convert DNS IP address #2",
- 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,
+ ASSERT (strcmp (nm_setting_ip_config_get_dns (s_ip4, 1), "4.2.2.2") == 0,
"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,
- NM_SETTING_IP4_CONFIG_DNS);
+ NM_SETTING_IP_CONFIG_DNS);
g_free (unmanaged);
g_free (keyfile);
@@ -4155,7 +3585,6 @@ test_read_wifi_wep_passphrase (void)
connection = connection_from_file (TEST_IFCFG_WIFI_WEP_PASSPHRASE,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -4281,7 +3710,6 @@ test_read_wifi_wep_40_ascii (void)
connection = connection_from_file (TEST_IFCFG_WIFI_WEP_40_ASCII,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -4405,7 +3833,6 @@ test_read_wifi_wep_104_ascii (void)
connection = connection_from_file (TEST_IFCFG_WIFI_WEP_104_ASCII,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -4530,7 +3957,6 @@ test_read_wifi_leap (void)
connection = connection_from_file (TEST_IFCFG_WIFI_LEAP,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -4654,7 +4080,6 @@ test_read_wifi_leap_secret_flags (const char *file, NMSettingSecretFlags expecte
connection = connection_from_file (file,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -4699,7 +4124,7 @@ test_read_wifi_wpa_psk (void)
NMSettingConnection *s_con;
NMSettingWireless *s_wireless;
NMSettingWirelessSecurity *s_wsec;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
char *unmanaged = NULL;
char *keyfile = NULL;
char *routefile = NULL;
@@ -4707,7 +4132,8 @@ test_read_wifi_wpa_psk (void)
gboolean ignore_error = FALSE;
GError *error = NULL;
const char *tmp;
- const GByteArray *array;
+ GBytes *ssid;
+ const char *mac;
char expected_mac_address[ETH_ALEN] = { 0x00, 0x16, 0x41, 0x11, 0x22, 0x33 };
const char *expected_id = "System blahblah (test-wifi-wpa-psk)";
guint64 expected_timestamp = 0;
@@ -4729,7 +4155,6 @@ test_read_wifi_wpa_psk (void)
connection = connection_from_file (TEST_IFCFG_WIFI_WPA_PSK,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -4791,18 +4216,13 @@ test_read_wifi_wpa_psk (void)
NM_SETTING_WIRELESS_SETTING_NAME);
/* MAC address */
- array = nm_setting_wireless_get_mac_address (s_wireless);
- ASSERT (array != NULL,
+ mac = nm_setting_wireless_get_mac_address (s_wireless);
+ ASSERT (mac != 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_MAC_ADDRESS);
- ASSERT (array->len == ETH_ALEN,
- "wifi-wpa-psk-verify-wireless", "failed to verify %s: unexpected %s / %s key value length",
- TEST_IFCFG_WIFI_WPA_PSK,
- NM_SETTING_WIRELESS_SETTING_NAME,
- NM_SETTING_WIRELESS_MAC_ADDRESS);
- ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0,
+ ASSERT (nm_utils_hwaddr_matches (mac, -1, expected_mac_address, sizeof (expected_mac_address)),
"wifi-wpa-psk-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIFI_WPA_PSK,
NM_SETTING_WIRELESS_SETTING_NAME,
@@ -4816,18 +4236,18 @@ test_read_wifi_wpa_psk (void)
NM_SETTING_WIRELESS_MTU);
/* SSID */
- array = nm_setting_wireless_get_ssid (s_wireless);
- ASSERT (array != NULL,
+ ssid = nm_setting_wireless_get_ssid (s_wireless);
+ ASSERT (ssid != 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_SSID);
- ASSERT (array->len == strlen (expected_ssid),
+ ASSERT (g_bytes_get_size (ssid) == strlen (expected_ssid),
"wifi-wpa-psk-verify-wireless", "failed to verify %s: unexpected %s / %s key value length",
TEST_IFCFG_WIFI_WPA_PSK,
NM_SETTING_WIRELESS_SETTING_NAME,
NM_SETTING_WIRELESS_SSID);
- ASSERT (memcmp (array->data, expected_ssid, strlen (expected_ssid)) == 0,
+ ASSERT (memcmp (g_bytes_get_data (ssid, NULL), expected_ssid, strlen (expected_ssid)) == 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,
@@ -4982,12 +4402,12 @@ test_read_wifi_wpa_psk (void)
NM_SETTING_IP4_CONFIG_SETTING_NAME);
/* Method */
- tmp = nm_setting_ip4_config_get_method (s_ip4);
+ tmp = nm_setting_ip_config_get_method (s_ip4);
ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
"wifi-wpa-psk-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIFI_WPA_PSK,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_METHOD);
+ NM_SETTING_IP_CONFIG_METHOD);
g_free (unmanaged);
g_free (keyfile);
@@ -5018,7 +4438,6 @@ test_read_wifi_wpa_psk_2 (void)
connection = connection_from_file (TEST_IFCFG_WIFI_WPA_PSK_2,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -5110,7 +4529,6 @@ test_read_wifi_wpa_psk_unquoted (void)
connection = connection_from_file (TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -5200,7 +4618,6 @@ test_read_wifi_wpa_psk_unquoted2 (void)
connection = connection_from_file (TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED2,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -5226,7 +4643,7 @@ test_read_wifi_wpa_psk_adhoc (void)
NMSettingConnection *s_con;
NMSettingWireless *s_wireless;
NMSettingWirelessSecurity *s_wsec;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
char *unmanaged = NULL;
char *keyfile = NULL;
char *routefile = NULL;
@@ -5244,7 +4661,6 @@ test_read_wifi_wpa_psk_adhoc (void)
connection = connection_from_file (TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -5382,12 +4798,12 @@ test_read_wifi_wpa_psk_adhoc (void)
NM_SETTING_IP4_CONFIG_SETTING_NAME);
/* Method */
- tmp = nm_setting_ip4_config_get_method (s_ip4);
+ tmp = nm_setting_ip_config_get_method (s_ip4);
ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
"wifi-wpa-psk-adhoc-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_METHOD);
+ NM_SETTING_IP_CONFIG_METHOD);
g_free (unmanaged);
g_free (keyfile);
@@ -5405,7 +4821,7 @@ test_read_wifi_wpa_psk_hex (void)
NMSettingConnection *s_con;
NMSettingWireless *s_wireless;
NMSettingWirelessSecurity *s_wsec;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
char *unmanaged = NULL;
char *keyfile = NULL;
char *routefile = NULL;
@@ -5413,7 +4829,7 @@ test_read_wifi_wpa_psk_hex (void)
gboolean ignore_error = FALSE;
GError *error = NULL;
const char *tmp;
- const GByteArray *array;
+ GBytes *ssid;
const char *expected_id = "System blahblah (test-wifi-wpa-psk-hex)";
const char *expected_ssid = "blahblah";
const char *expected_key_mgmt = "wpa-psk";
@@ -5422,7 +4838,6 @@ test_read_wifi_wpa_psk_hex (void)
connection = connection_from_file (TEST_IFCFG_WIFI_WPA_PSK_HEX,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -5465,18 +4880,18 @@ test_read_wifi_wpa_psk_hex (void)
NM_SETTING_WIRELESS_SETTING_NAME);
/* SSID */
- array = nm_setting_wireless_get_ssid (s_wireless);
- ASSERT (array != NULL,
+ ssid = nm_setting_wireless_get_ssid (s_wireless);
+ ASSERT (ssid != 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_SSID);
- ASSERT (array->len == strlen (expected_ssid),
+ ASSERT (g_bytes_get_size (ssid) == strlen (expected_ssid),
"wifi-wpa-psk-hex-verify-wireless", "failed to verify %s: unexpected %s / %s key value length",
TEST_IFCFG_WIFI_WPA_PSK_HEX,
NM_SETTING_WIRELESS_SETTING_NAME,
NM_SETTING_WIRELESS_SSID);
- ASSERT (memcmp (array->data, expected_ssid, strlen (expected_ssid)) == 0,
+ ASSERT (memcmp (g_bytes_get_data (ssid, NULL), expected_ssid, strlen (expected_ssid)) == 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,
@@ -5525,12 +4940,12 @@ test_read_wifi_wpa_psk_hex (void)
NM_SETTING_IP4_CONFIG_SETTING_NAME);
/* Method */
- tmp = nm_setting_ip4_config_get_method (s_ip4);
+ tmp = nm_setting_ip_config_get_method (s_ip4);
ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
"wifi-wpa-psk-hex-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIFI_WPA_PSK_HEX,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_METHOD);
+ NM_SETTING_IP_CONFIG_METHOD);
g_free (unmanaged);
g_free (keyfile);
@@ -5549,7 +4964,7 @@ test_read_wifi_wpa_eap_tls (void)
{
NMConnection *connection;
NMSettingWireless *s_wireless;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
NMSetting8021x *s_8021x;
char *unmanaged = NULL;
char *keyfile = NULL;
@@ -5564,7 +4979,6 @@ test_read_wifi_wpa_eap_tls (void)
connection = connection_from_file (TEST_IFCFG_WIFI_WPA_EAP_TLS,
NULL,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -5597,12 +5011,12 @@ test_read_wifi_wpa_eap_tls (void)
NM_SETTING_IP4_CONFIG_SETTING_NAME);
/* Method */
- tmp = nm_setting_ip4_config_get_method (s_ip4);
+ tmp = nm_setting_ip_config_get_method (s_ip4);
ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
"wifi-wpa-eap-tls-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIFI_WPA_EAP_TLS,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_METHOD);
+ NM_SETTING_IP_CONFIG_METHOD);
/* ===== 802.1x SETTING ===== */
s_8021x = nm_connection_get_setting_802_1x (connection);
@@ -5690,7 +5104,7 @@ test_read_wifi_wpa_eap_ttls_tls (void)
{
NMConnection *connection;
NMSettingWireless *s_wireless;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
NMSetting8021x *s_8021x;
char *unmanaged = NULL;
char *keyfile = NULL;
@@ -5705,7 +5119,6 @@ test_read_wifi_wpa_eap_ttls_tls (void)
connection = connection_from_file (TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -5738,12 +5151,12 @@ test_read_wifi_wpa_eap_ttls_tls (void)
NM_SETTING_IP4_CONFIG_SETTING_NAME);
/* Method */
- tmp = nm_setting_ip4_config_get_method (s_ip4);
+ tmp = nm_setting_ip_config_get_method (s_ip4);
ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
"wifi-wpa-eap-ttls-tls-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_METHOD);
+ NM_SETTING_IP_CONFIG_METHOD);
/* ===== 802.1x SETTING ===== */
s_8021x = nm_connection_get_setting_802_1x (connection);
@@ -5860,7 +5273,6 @@ test_read_wifi_dynamic_wep_leap (void)
connection = connection_from_file (TEST_IFCFG_WIFI_DYNAMIC_WEP_LEAP,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -5923,7 +5335,7 @@ test_read_wifi_wep_eap_ttls_chap (void)
NMConnection *connection;
NMSettingWireless *s_wireless;
NMSettingWirelessSecurity *s_wsec;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
NMSetting8021x *s_8021x;
char *unmanaged = NULL;
char *keyfile = NULL;
@@ -5939,7 +5351,6 @@ test_read_wifi_wep_eap_ttls_chap (void)
connection = connection_from_file (TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -5972,12 +5383,12 @@ test_read_wifi_wep_eap_ttls_chap (void)
NM_SETTING_IP4_CONFIG_SETTING_NAME);
/* Method */
- tmp = nm_setting_ip4_config_get_method (s_ip4);
+ tmp = nm_setting_ip_config_get_method (s_ip4);
ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
"wifi-wep-eap-ttls-chap-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_METHOD);
+ NM_SETTING_IP_CONFIG_METHOD);
/* ===== 802.1x SETTING ===== */
s_wsec = nm_connection_get_setting_wireless_security (connection);
@@ -6086,7 +5497,7 @@ test_read_wifi_hidden (void)
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);
+ NULL, TYPE_WIRELESS, NULL, NULL, NULL, NULL, &error, NULL);
g_assert_no_error (error);
g_assert (connection);
@@ -6115,10 +5526,10 @@ test_write_wifi_hidden (void)
gboolean success;
GError *error = NULL;
shvarFile *f;
- GByteArray *ssid;
+ GBytes *ssid;
const unsigned char ssid_data[] = { 0x54, 0x65, 0x73, 0x74, 0x20, 0x53, 0x53, 0x49, 0x44 };
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -6136,8 +5547,7 @@ test_write_wifi_hidden (void)
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));
+ ssid = g_bytes_new (ssid_data, sizeof (ssid_data));
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
@@ -6145,7 +5555,7 @@ test_write_wifi_hidden (void)
NM_SETTING_WIRELESS_HIDDEN, TRUE,
NULL);
- g_byte_array_free (ssid, TRUE);
+ g_bytes_unref (ssid);
success = nm_connection_verify (connection, &error);
g_assert_no_error (error);
@@ -6171,10 +5581,124 @@ test_write_wifi_hidden (void)
svCloseFile (f);
/* reread will be normalized, so we must normalize connection too. */
- nm_utils_normalize_connection (connection, TRUE);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
+
+ /* re-read the connection for comparison */
+ reread = connection_from_file (testfile, NULL, TYPE_WIRELESS,
+ 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_wifi_band_a (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-band-a",
+ NULL, TYPE_WIRELESS, 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_cmpstr (nm_setting_wireless_get_band (s_wifi), ==, "a");
+
+ g_object_unref (connection);
+}
+
+static void
+test_write_wifi_band_a (void)
+{
+ NMConnection *connection, *reread;
+ NMSettingConnection *s_con;
+ NMSettingWireless *s_wifi;
+ char *uuid, *testfile = NULL, *val;
+ gboolean success;
+ GError *error = NULL;
+ shvarFile *f;
+ GBytes *ssid;
+ const unsigned char ssid_data[] = { 0x54, 0x65, 0x73, 0x74, 0x20, 0x53, 0x53, 0x49, 0x44 };
+
+ connection = nm_simple_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 Band A",
+ 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_bytes_new (ssid_data, sizeof (ssid_data));
+
+ g_object_set (s_wifi,
+ NM_SETTING_WIRELESS_SSID, ssid,
+ NM_SETTING_WIRELESS_MODE, "infrastructure",
+ NM_SETTING_WIRELESS_BAND, "a",
+ NULL);
+
+ g_bytes_unref (ssid);
+
+ 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, "BAND", FALSE);
+ g_assert (val);
+ g_assert_cmpstr (val, ==, "a");
+ g_free (val);
+ svCloseFile (f);
+
+ /* reread will be normalized, so we must normalize connection too. */
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
- reread = connection_from_file (testfile, NULL, TYPE_WIRELESS, NULL,
+ reread = connection_from_file (testfile, NULL, TYPE_WIRELESS,
NULL, NULL, NULL, NULL, &error, NULL);
unlink (testfile);
g_assert_no_error (error);
@@ -6191,6 +5715,30 @@ test_write_wifi_hidden (void)
g_object_unref (reread);
}
+static void
+test_read_wifi_band_a_channel_mismatch (void)
+{
+ NMConnection *connection;
+ GError *error = NULL;
+
+ connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-band-a-channel-mismatch",
+ NULL, TYPE_WIRELESS, NULL, NULL, NULL, NULL, &error, NULL);
+ g_assert (connection == NULL);
+ g_assert_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION);
+}
+
+static void
+test_read_wifi_band_bg_channel_mismatch (void)
+{
+ NMConnection *connection;
+ GError *error = NULL;
+
+ connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-band-bg-channel-mismatch",
+ NULL, TYPE_WIRELESS, NULL, NULL, NULL, NULL, &error, NULL);
+ g_assert (connection == NULL);
+ g_assert_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION);
+}
+
#define TEST_IFCFG_WIRED_QETH_STATIC TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-qeth-static"
static void
@@ -6199,7 +5747,7 @@ test_read_wired_qeth_static (void)
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
char *unmanaged = NULL;
char *keyfile = NULL;
char *routefile = NULL;
@@ -6208,16 +5756,15 @@ test_read_wired_qeth_static (void)
GError *error = NULL;
const char *tmp;
const char *expected_id = "System test-wired-qeth-static";
- const GByteArray *array;
+ const char *mac;
const char *expected_channel0 = "0.0.0600";
const char *expected_channel1 = "0.0.0601";
const char *expected_channel2 = "0.0.0602";
- const GPtrArray *subchannels;
+ const char * const *subchannels;
connection = connection_from_file (TEST_IFCFG_WIRED_QETH_STATIC,
NULL,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -6263,8 +5810,8 @@ test_read_wired_qeth_static (void)
NM_SETTING_WIRED_SETTING_NAME);
/* MAC address */
- array = nm_setting_wired_get_mac_address (s_wired);
- ASSERT (array == NULL,
+ mac = nm_setting_wired_get_mac_address (s_wired);
+ ASSERT (mac == NULL,
"wired-qeth-static-verify-wired", "failed to verify %s: unexpected %s / %s key",
TEST_IFCFG_WIRED_QETH_STATIC,
NM_SETTING_WIRED_SETTING_NAME,
@@ -6277,24 +5824,19 @@ test_read_wired_qeth_static (void)
TEST_IFCFG_WIRED_QETH_STATIC,
NM_SETTING_WIRED_SETTING_NAME,
NM_SETTING_WIRED_S390_SUBCHANNELS);
- ASSERT (subchannels->len == 3,
+ ASSERT (subchannels[0] && subchannels[1] && subchannels[2] && !subchannels[3],
"wired-qeth-static-verify-wired", "failed to verify %s: invalid %s / %s key (not 3 elements)",
TEST_IFCFG_WIRED_QETH_STATIC,
NM_SETTING_WIRED_SETTING_NAME,
NM_SETTING_WIRED_S390_SUBCHANNELS);
- tmp = (const char *) g_ptr_array_index (subchannels, 0);
- ASSERT (strcmp (tmp, expected_channel0) == 0,
+ ASSERT (strcmp (subchannels[0], expected_channel0) == 0,
"wired-qeth-static-verify-wired", "failed to verify %s: unexpected subchannel #0",
TEST_IFCFG_WIRED_QETH_STATIC);
-
- tmp = (const char *) g_ptr_array_index (subchannels, 1);
- ASSERT (strcmp (tmp, expected_channel1) == 0,
+ ASSERT (strcmp (subchannels[1], expected_channel1) == 0,
"wired-qeth-static-verify-wired", "failed to verify %s: unexpected subchannel #1",
TEST_IFCFG_WIRED_QETH_STATIC);
-
- tmp = (const char *) g_ptr_array_index (subchannels, 2);
- ASSERT (strcmp (tmp, expected_channel2) == 0,
+ ASSERT (strcmp (subchannels[2], expected_channel2) == 0,
"wired-qeth-static-verify-wired", "failed to verify %s: unexpected subchannel #2",
TEST_IFCFG_WIRED_QETH_STATIC);
@@ -6353,12 +5895,12 @@ test_read_wired_qeth_static (void)
NM_SETTING_IP4_CONFIG_SETTING_NAME);
/* Method */
- tmp = nm_setting_ip4_config_get_method (s_ip4);
+ tmp = nm_setting_ip_config_get_method (s_ip4);
ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_MANUAL) == 0,
"wired-qeth-static-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_WIRED_QETH_STATIC,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_METHOD);
+ NM_SETTING_IP_CONFIG_METHOD);
g_free (unmanaged);
g_free (keyfile);
@@ -6385,13 +5927,12 @@ test_read_wired_ctc_static (void)
const char *expected_id = "System test-wired-ctc-static";
const char *expected_channel0 = "0.0.1b00";
const char *expected_channel1 = "0.0.1b01";
- const GPtrArray *subchannels;
+ const char * const *subchannels;
gboolean success;
connection = connection_from_file (TEST_IFCFG_WIRED_CTC_STATIC,
NULL,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -6420,10 +5961,10 @@ test_read_wired_ctc_static (void)
/* Subchannels */
subchannels = nm_setting_wired_get_s390_subchannels (s_wired);
g_assert (subchannels != NULL);
- g_assert_cmpint (subchannels->len, ==, 2);
+ g_assert (subchannels[0] && subchannels[1] && !subchannels[2]);
- g_assert_cmpstr (g_ptr_array_index (subchannels, 0), ==, expected_channel0);
- g_assert_cmpstr (g_ptr_array_index (subchannels, 1), ==, expected_channel1);
+ g_assert_cmpstr (subchannels[0], ==, expected_channel0);
+ g_assert_cmpstr (subchannels[1], ==, expected_channel1);
/* Nettype */
g_assert_cmpstr (nm_setting_wired_get_s390_nettype (s_wired), ==, "ctc");
@@ -6462,7 +6003,6 @@ test_read_wifi_wep_no_keys (void)
connection = connection_from_file (TEST_IFCFG_WIFI_WEP_NO_KEYS,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -6572,7 +6112,6 @@ test_read_permissions (void)
connection = connection_from_file (TEST_IFCFG_PERMISSIONS,
NULL,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -6648,7 +6187,6 @@ test_read_wifi_wep_agent_keys (void)
connection = connection_from_file (TEST_IFCFG_WIFI_WEP_AGENT_KEYS,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -6699,30 +6237,22 @@ test_write_wired_static (void)
NMConnection *reread;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
- NMSettingIP4Config *s_ip4, *reread_s_ip4;
- NMSettingIP6Config *s_ip6, *reread_s_ip6;
- static unsigned char tmpmac[] = { 0x31, 0x33, 0x33, 0x37, 0xbe, 0xcd };
- GByteArray *mac;
+ NMSettingIPConfig *s_ip4, *reread_s_ip4;
+ NMSettingIPConfig *s_ip6, *reread_s_ip6;
+ static const char *mac = "31:33:33:37:be:cd";
guint32 mtu = 1492;
char *uuid;
- const guint32 ip1 = htonl (0x01010103);
- const guint32 ip2 = htonl (0x01010105);
- const guint32 gw = htonl (0x01010101);
- const guint32 dns1 = htonl (0x04020201);
- const guint32 dns2 = htonl (0x04020202);
- const guint32 prefix = 24;
+ const char *dns1 = "4.2.2.1";
+ const char *dns2 = "4.2.2.2";
const char *dns_search1 = "foobar.com";
const char *dns_search2 = "lab.foobar.com";
const char *dns_search3 = "foobar6.com";
const char *dns_search4 = "lab6.foobar.com";
- struct in6_addr ip6, ip6_1, ip6_2;
- struct in6_addr route1_dest, route2_dest, route1_nexthop, route2_nexthop;
- struct in6_addr dns6_1, dns6_2;
- const guint32 route1_prefix = 64, route2_prefix = 128;
- const guint32 route1_metric = 99, route2_metric = 1;
- NMIP4Address *addr;
- NMIP6Address *addr6;
- NMIP6Route *route6;
+ const char *dns6_1 = "fade:0102:0103::face";
+ const char *dns6_2 = "cafe:ffff:eeee:dddd:cccc:bbbb:aaaa:feed";
+ NMIPAddress *addr;
+ NMIPAddress *addr6;
+ NMIPRoute *route6;
gboolean success;
GError *error = NULL;
char *testfile = NULL;
@@ -6732,17 +6262,7 @@ test_write_wired_static (void)
char *route6file = NULL;
gboolean ignore_error = FALSE;
- inet_pton (AF_INET6, "1003:1234:abcd::1", &ip6);
- inet_pton (AF_INET6, "2003:1234:abcd::2", &ip6_1);
- inet_pton (AF_INET6, "3003:1234:abcd::3", &ip6_2);
- inet_pton (AF_INET6, "2222:aaaa:bbbb:cccc::", &route1_dest);
- inet_pton (AF_INET6, "2222:aaaa:bbbb:cccc:dddd:eeee:5555:6666", &route1_nexthop);
- inet_pton (AF_INET6, "::", &route2_dest);
- inet_pton (AF_INET6, "2222:aaaa::9999", &route2_nexthop);
- inet_pton (AF_INET6, "fade:0102:0103::face", &dns6_1);
- inet_pton (AF_INET6, "cafe:ffff:eeee:dddd:cccc:bbbb:aaaa:feed", &dns6_2);
-
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -6761,96 +6281,82 @@ test_write_wired_static (void)
s_wired = (NMSettingWired *) nm_setting_wired_new ();
nm_connection_add_setting (connection, NM_SETTING (s_wired));
- mac = g_byte_array_sized_new (sizeof (tmpmac));
- g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac));
-
g_object_set (s_wired,
NM_SETTING_WIRED_MAC_ADDRESS, mac,
NM_SETTING_WIRED_MTU, mtu,
NULL);
- g_byte_array_free (mac, TRUE);
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) 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,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
+ NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
+ NM_SETTING_IP_CONFIG_GATEWAY, "1.1.1.1",
NULL);
- addr = nm_ip4_address_new ();
- nm_ip4_address_set_address (addr, ip1);
- nm_ip4_address_set_prefix (addr, prefix);
- nm_ip4_address_set_gateway (addr, gw);
- nm_setting_ip4_config_add_address (s_ip4, addr);
- nm_ip4_address_unref (addr);
+ addr = nm_ip_address_new (AF_INET, "1.1.1.3", 24, &error);
+ g_assert_no_error (error);
+ nm_setting_ip_config_add_address (s_ip4, addr);
+ nm_ip_address_unref (addr);
- addr = nm_ip4_address_new ();
- nm_ip4_address_set_address (addr, ip2);
- nm_ip4_address_set_prefix (addr, prefix);
- nm_ip4_address_set_gateway (addr, gw);
- nm_setting_ip4_config_add_address (s_ip4, addr);
- nm_ip4_address_unref (addr);
+ addr = nm_ip_address_new (AF_INET, "1.1.1.5", 24, &error);
+ g_assert_no_error (error);
+ nm_setting_ip_config_add_address (s_ip4, addr);
+ nm_ip_address_unref (addr);
- nm_setting_ip4_config_add_dns (s_ip4, dns1);
- nm_setting_ip4_config_add_dns (s_ip4, dns2);
+ nm_setting_ip_config_add_dns (s_ip4, dns1);
+ nm_setting_ip_config_add_dns (s_ip4, dns2);
- nm_setting_ip4_config_add_dns_search (s_ip4, dns_search1);
- nm_setting_ip4_config_add_dns_search (s_ip4, dns_search2);
+ nm_setting_ip_config_add_dns_search (s_ip4, dns_search1);
+ nm_setting_ip_config_add_dns_search (s_ip4, dns_search2);
/* IP6 setting */
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) 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,
- NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_MANUAL,
+ NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
NULL);
/* Add addresses */
- addr6 = nm_ip6_address_new ();
- nm_ip6_address_set_address (addr6, &ip6);
- nm_ip6_address_set_prefix (addr6, 11);
- nm_setting_ip6_config_add_address (s_ip6, addr6);
- nm_ip6_address_unref (addr6);
-
- addr6 = nm_ip6_address_new ();
- nm_ip6_address_set_address (addr6, &ip6_1);
- nm_ip6_address_set_prefix (addr6, 22);
- nm_setting_ip6_config_add_address (s_ip6, addr6);
- nm_ip6_address_unref (addr6);
-
- addr6 = nm_ip6_address_new ();
- nm_ip6_address_set_address (addr6, &ip6_2);
- nm_ip6_address_set_prefix (addr6, 33);
- nm_setting_ip6_config_add_address (s_ip6, addr6);
- nm_ip6_address_unref (addr6);
+ addr6 = nm_ip_address_new (AF_INET6, "1003:1234:abcd::1", 11, &error);
+ g_assert_no_error (error);
+ nm_setting_ip_config_add_address (s_ip6, addr6);
+ nm_ip_address_unref (addr6);
+
+ addr6 = nm_ip_address_new (AF_INET6, "2003:1234:abcd::2", 22, &error);
+ g_assert_no_error (error);
+ nm_setting_ip_config_add_address (s_ip6, addr6);
+ nm_ip_address_unref (addr6);
+
+ addr6 = nm_ip_address_new (AF_INET6, "3003:1234:abcd::3", 33, &error);
+ g_assert_no_error (error);
+ nm_setting_ip_config_add_address (s_ip6, addr6);
+ nm_ip_address_unref (addr6);
/* Add routes */
- route6 = nm_ip6_route_new ();
- nm_ip6_route_set_dest (route6, &route1_dest);
- nm_ip6_route_set_prefix (route6, route1_prefix);
- nm_ip6_route_set_next_hop (route6, &route1_nexthop);
- nm_ip6_route_set_metric (route6, route1_metric);
- nm_setting_ip6_config_add_route (s_ip6, route6);
- nm_ip6_route_unref (route6);
-
- route6 = nm_ip6_route_new ();
- nm_ip6_route_set_dest (route6, &route2_dest);
- nm_ip6_route_set_prefix (route6, route2_prefix);
- nm_ip6_route_set_next_hop (route6, &route2_nexthop);
- nm_ip6_route_set_metric (route6, route2_metric);
- nm_setting_ip6_config_add_route (s_ip6, route6);
- nm_ip6_route_unref (route6);
+ route6 = nm_ip_route_new (AF_INET6,
+ "2222:aaaa:bbbb:cccc::", 64,
+ "2222:aaaa:bbbb:cccc:dddd:eeee:5555:6666", 99, &error);
+ g_assert_no_error (error);
+ nm_setting_ip_config_add_route (s_ip6, route6);
+ nm_ip_route_unref (route6);
+
+ route6 = nm_ip_route_new (AF_INET6, "::", 128, "2222:aaaa::9999", 1, &error);
+ g_assert_no_error (error);
+ nm_setting_ip_config_add_route (s_ip6, route6);
+ nm_ip_route_unref (route6);
/* DNS servers */
- nm_setting_ip6_config_add_dns (s_ip6, &dns6_1);
- nm_setting_ip6_config_add_dns (s_ip6, &dns6_2);
+ nm_setting_ip_config_add_dns (s_ip6, dns6_1);
+ nm_setting_ip_config_add_dns (s_ip6, dns6_2);
/* DNS domains */
- nm_setting_ip6_config_add_dns_search (s_ip6, dns_search3);
- nm_setting_ip6_config_add_dns_search (s_ip6, dns_search4);
+ nm_setting_ip_config_add_dns_search (s_ip6, dns_search3);
+ nm_setting_ip_config_add_dns_search (s_ip6, dns_search4);
ASSERT (nm_connection_verify (connection, &error) == TRUE,
"wired-static-write", "failed to verify connection: %s",
@@ -6869,13 +6375,12 @@ test_write_wired_static (void)
"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);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -6896,10 +6401,10 @@ test_write_wired_static (void)
*/
reread_s_ip4 = nm_connection_get_setting_ip4_config (reread);
reread_s_ip6 = nm_connection_get_setting_ip6_config (reread);
- nm_setting_ip6_config_add_dns_search (reread_s_ip6, nm_setting_ip4_config_get_dns_search (reread_s_ip4, 2));
- nm_setting_ip6_config_add_dns_search (reread_s_ip6, nm_setting_ip4_config_get_dns_search (reread_s_ip4, 3));
- nm_setting_ip4_config_remove_dns_search (reread_s_ip4, 3);
- nm_setting_ip4_config_remove_dns_search (reread_s_ip4, 2);
+ nm_setting_ip_config_add_dns_search (reread_s_ip6, nm_setting_ip_config_get_dns_search (reread_s_ip4, 2));
+ nm_setting_ip_config_add_dns_search (reread_s_ip6, nm_setting_ip_config_get_dns_search (reread_s_ip4, 3));
+ nm_setting_ip_config_remove_dns_search (reread_s_ip4, 3);
+ nm_setting_ip_config_remove_dns_search (reread_s_ip4, 2);
ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
"wired-static-write", "written and re-read connection weren't the same.");
@@ -6923,8 +6428,8 @@ test_write_wired_dhcp (void)
NMConnection *reread;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *uuid;
gboolean success;
GError *error = NULL;
@@ -6935,7 +6440,7 @@ test_write_wired_dhcp (void)
char *route6file = NULL;
gboolean ignore_error = FALSE;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -6955,15 +6460,15 @@ test_write_wired_dhcp (void)
nm_connection_add_setting (connection, NM_SETTING (s_wired));
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) 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_AUTO,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID, "random-client-id-00:22:33",
- NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME, "awesome-hostname",
- NM_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES, TRUE,
- NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS, TRUE,
+ NM_SETTING_IP_CONFIG_DHCP_HOSTNAME, "awesome-hostname",
+ NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES, TRUE,
+ NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS, TRUE,
NULL);
ASSERT (nm_connection_verify (connection, &error) == TRUE,
@@ -6971,12 +6476,12 @@ test_write_wired_dhcp (void)
(error && error->message) ? error->message : "(unknown)");
/* IP6 setting */
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) 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_IGNORE,
- NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+ NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
NULL);
/* Save the ifcfg */
@@ -6992,13 +6497,12 @@ test_write_wired_dhcp (void)
"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);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -7034,7 +6538,7 @@ test_write_wired_dhcp_plus_ip (void)
gboolean success = FALSE;
connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-dhcp-plus-ip",
- NULL, TYPE_ETHERNET, NULL, NULL,
+ NULL, TYPE_ETHERNET, NULL,
NULL, NULL, NULL, &error, NULL);
g_assert_no_error (error);
g_assert (connection != NULL);
@@ -7046,10 +6550,10 @@ test_write_wired_dhcp_plus_ip (void)
g_assert (success);
/* reread will be normalized, so we must normalize connection too. */
- nm_utils_normalize_connection (connection, TRUE);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
- reread = connection_from_file (written, NULL, TYPE_ETHERNET, NULL, NULL,
+ reread = connection_from_file (written, NULL, TYPE_ETHERNET, NULL,
NULL, NULL, NULL, &error, NULL);
unlink (written);
g_free (written);
@@ -7072,15 +6576,15 @@ static void
test_read_write_wired_dhcp_send_hostname (void)
{
NMConnection *connection, *reread;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *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, TYPE_ETHERNET, NULL,
NULL, NULL, NULL, &error, NULL);
g_assert_no_error (error);
g_assert (connection != NULL);
@@ -7090,14 +6594,14 @@ test_read_write_wired_dhcp_send_hostname (void)
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");
+ g_assert (nm_setting_ip_config_get_dhcp_send_hostname (s_ip4) == TRUE);
+ g_assert_cmpstr (nm_setting_ip_config_get_dhcp_hostname (s_ip4), ==, "svata-pulec");
+ g_assert_cmpstr (nm_setting_ip_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);
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME, FALSE, NULL);
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_DHCP_HOSTNAME, dhcp_hostname, NULL);
+ g_object_set (s_ip6, NM_SETTING_IP_CONFIG_DHCP_HOSTNAME, dhcp_hostname, NULL);
success = writer_new_connection (connection,
TEST_SCRATCH_DIR "/network-scripts/",
@@ -7106,10 +6610,10 @@ test_read_write_wired_dhcp_send_hostname (void)
g_assert (success);
/* reread will be normalized, so we must normalize connection too. */
- nm_utils_normalize_connection (connection, TRUE);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
- reread = connection_from_file (written, NULL, TYPE_ETHERNET, NULL, NULL,
+ reread = connection_from_file (written, NULL, TYPE_ETHERNET, NULL,
NULL, NULL, NULL, &error, NULL);
unlink (written);
g_free (written);
@@ -7129,9 +6633,9 @@ test_read_write_wired_dhcp_send_hostname (void)
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_assert (nm_setting_ip_config_get_dhcp_send_hostname (s_ip4) == FALSE);
+ g_assert_cmpstr (nm_setting_ip_config_get_dhcp_hostname (s_ip4), ==, dhcp_hostname);
+ g_assert_cmpstr (nm_setting_ip_config_get_dhcp_hostname (s_ip6), ==, dhcp_hostname);
g_object_unref (connection);
g_object_unref (reread);
@@ -7144,14 +6648,12 @@ test_write_wired_static_ip6_only (void)
NMConnection *reread;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
- static unsigned char tmpmac[] = { 0x31, 0x33, 0x33, 0x37, 0xbe, 0xcd };
- GByteArray *mac;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
+ static const char *mac = "31:33:33:37:be:cd";
char *uuid;
- struct in6_addr ip6;
- struct in6_addr dns6;
- NMIP6Address *addr6;
+ const char *dns6 = "fade:0102:0103::face";
+ NMIPAddress *addr6;
gboolean success;
GError *error = NULL;
char *testfile = NULL;
@@ -7161,10 +6663,7 @@ test_write_wired_static_ip6_only (void)
char *route6file = NULL;
gboolean ignore_error = FALSE;
- inet_pton (AF_INET6, "1003:1234:abcd::1", &ip6);
- inet_pton (AF_INET6, "fade:0102:0103::face", &dns6);
-
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -7183,36 +6682,32 @@ test_write_wired_static_ip6_only (void)
s_wired = (NMSettingWired *) nm_setting_wired_new ();
nm_connection_add_setting (connection, NM_SETTING (s_wired));
- mac = g_byte_array_sized_new (sizeof (tmpmac));
- g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac));
g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, mac, NULL);
- g_byte_array_free (mac, TRUE);
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) 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_DISABLED,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_DISABLED,
NULL);
/* IP6 setting */
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) 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,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_MANUAL,
NULL);
/* Add addresses */
- addr6 = nm_ip6_address_new ();
- nm_ip6_address_set_address (addr6, &ip6);
- nm_ip6_address_set_prefix (addr6, 11);
- nm_setting_ip6_config_add_address (s_ip6, addr6);
- nm_ip6_address_unref (addr6);
+ addr6 = nm_ip_address_new (AF_INET6, "1003:1234:abcd::1", 11, &error);
+ g_assert_no_error (error);
+ nm_setting_ip_config_add_address (s_ip6, addr6);
+ nm_ip_address_unref (addr6);
/* DNS server */
- nm_setting_ip6_config_add_dns (s_ip6, &dns6);
+ nm_setting_ip_config_add_dns (s_ip6, dns6);
ASSERT (nm_connection_verify (connection, &error) == TRUE,
"wired-static-ip6-only-write", "failed to verify connection: %s",
@@ -7231,13 +6726,12 @@ test_write_wired_static_ip6_only (void)
"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);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -7282,44 +6776,28 @@ test_write_wired_static_ip6_only_gw (gconstpointer user_data)
NMConnection *reread;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
- static unsigned char tmpmac[] = { 0x31, 0x33, 0x33, 0x37, 0xbe, 0xcd };
- GByteArray *mac;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
+ static const char *mac = "31:33:33:37:be:cd";
char *uuid;
- struct in6_addr ip6;
- struct in6_addr dns6;
- NMIP6Address *addr6;
+ const char *dns6 = "fade:0102:0103::face";
+ NMIPAddress *addr6;
gboolean success;
GError *error = NULL;
char *testfile = NULL;
char *id = NULL;
gboolean ignore_error = FALSE;
char *written_ifcfg_gateway;
- char s_gateway6[INET6_ADDRSTRLEN] = { 0 };
- struct in6_addr gateway6_autovar;
- const struct in6_addr *gateway6 = 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 (user_data) {
- g_assert_cmpint (inet_pton (AF_INET6, user_data, &gateway6_autovar), ==, 1);
- gateway6 = &gateway6_autovar;
- }
-
- inet_pton (AF_INET6, "1003:1234:abcd::1", &ip6);
- inet_pton (AF_INET6, "fade:0102:0103::face", &dns6);
- if (gateway6)
- inet_ntop (AF_INET6, gateway6, s_gateway6, sizeof (s_gateway6));
+ const char *gateway6 = user_data;
- connection = nm_connection_new ();
+ connection = nm_simple_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 ();
- id = g_strdup_printf ("Test Write Wired Static IP6 Only With Gateway %s", gateway6 ? s_gateway6 : "NULL");
+ id = g_strdup_printf ("Test Write Wired Static IP6 Only With Gateway %s", gateway6 ? gateway6 : "NULL");
g_object_set (s_con,
NM_SETTING_CONNECTION_ID, id,
NM_SETTING_CONNECTION_UUID, uuid,
@@ -7333,38 +6811,33 @@ test_write_wired_static_ip6_only_gw (gconstpointer user_data)
s_wired = (NMSettingWired *) nm_setting_wired_new ();
nm_connection_add_setting (connection, NM_SETTING (s_wired));
- mac = g_byte_array_sized_new (sizeof (tmpmac));
- g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac));
g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, mac, NULL);
- g_byte_array_free (mac, TRUE);
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) 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_DISABLED,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_DISABLED,
NULL);
/* IP6 setting */
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) 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,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_MANUAL,
+ NM_SETTING_IP_CONFIG_GATEWAY, gateway6,
NULL);
/* Add addresses */
- addr6 = nm_ip6_address_new ();
- nm_ip6_address_set_address (addr6, &ip6);
- nm_ip6_address_set_prefix (addr6, 11);
- if (gateway6)
- nm_ip6_address_set_gateway (addr6, gateway6);
- nm_setting_ip6_config_add_address (s_ip6, addr6);
- nm_ip6_address_unref (addr6);
+ addr6 = nm_ip_address_new (AF_INET6, "1003:1234:abcd::1", 11, &error);
+ g_assert_no_error (error);
+ nm_setting_ip_config_add_address (s_ip6, addr6);
+ nm_ip_address_unref (addr6);
/* DNS server */
- nm_setting_ip6_config_add_dns (s_ip6, &dns6);
+ nm_setting_ip_config_add_dns (s_ip6, dns6);
g_assert (nm_connection_verify (connection, &error));
@@ -7378,13 +6851,13 @@ test_write_wired_static_ip6_only_gw (gconstpointer user_data)
g_assert (testfile);
/* reread will be normalized, so we must normalize connection too. */
- nm_utils_normalize_connection (connection, TRUE);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_ETHERNET,
- NULL, NULL, NULL,
+ NULL, NULL,
NULL, NULL,
&error,
&ignore_error);
@@ -7407,18 +6880,18 @@ test_write_wired_static_ip6_only_gw (gconstpointer user_data)
/* 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);
- addr6 = nm_setting_ip6_config_get_address (s_ip6, 0);
+ g_assert (s_ip6 && nm_setting_ip_config_get_num_addresses (s_ip6)==1);
+ addr6 = nm_setting_ip_config_get_address (s_ip6, 0);
g_assert (addr6);
/* assert that the gateway was written and reloaded as expected */
- if (!gateway6 || IN6_IS_ADDR_UNSPECIFIED (gateway6)) {
- g_assert (IN6_IS_ADDR_UNSPECIFIED (nm_ip6_address_get_gateway (addr6)));
- g_assert (written_ifcfg_gateway==NULL);
+ if (!gateway6 || !strcmp (gateway6, "::")) {
+ g_assert (nm_setting_ip_config_get_gateway (s_ip6) == NULL);
+ g_assert (written_ifcfg_gateway == NULL);
} else {
- g_assert (!IN6_IS_ADDR_UNSPECIFIED (nm_ip6_address_get_gateway (addr6)));
- g_assert_cmpint (memcmp (nm_ip6_address_get_gateway (addr6), gateway6, sizeof (struct in6_addr)), ==, 0);
- g_assert_cmpstr (written_ifcfg_gateway, ==, s_gateway6);
+ g_assert (nm_setting_ip_config_get_gateway (s_ip6) != NULL);
+ g_assert_cmpstr (nm_setting_ip_config_get_gateway (s_ip6), ==, gateway6);
+ g_assert_cmpstr (written_ifcfg_gateway, ==, gateway6);
}
g_free (testfile);
@@ -7435,7 +6908,7 @@ test_read_write_static_routes_legacy (void)
NMConnection *connection, *reread;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
char *unmanaged = NULL;
char *testfile = NULL;
char *keyfile = NULL;
@@ -7452,7 +6925,6 @@ test_read_write_static_routes_legacy (void)
connection = connection_from_file (TEST_IFCFG_READ_WRITE_STATIC_ROUTES_LEGACY,
NULL,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -7507,18 +6979,18 @@ test_read_write_static_routes_legacy (void)
NM_SETTING_IP4_CONFIG_SETTING_NAME);
/* Method */
- tmp = nm_setting_ip4_config_get_method (s_ip4);
+ tmp = nm_setting_ip_config_get_method (s_ip4);
ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
"read-write-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_READ_WRITE_STATIC_ROUTES_LEGACY,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_METHOD);
+ NM_SETTING_IP_CONFIG_METHOD);
- ASSERT (nm_setting_ip4_config_get_never_default (s_ip4) == FALSE,
+ ASSERT (nm_setting_ip_config_get_never_default (s_ip4) == FALSE,
"read-write-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_READ_WRITE_STATIC_ROUTES_LEGACY,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_NEVER_DEFAULT);
+ NM_SETTING_IP_CONFIG_NEVER_DEFAULT);
/* Save the ifcfg; use a special different scratch dir to ensure that
* we can clean up after the written connection in both the original
@@ -7536,13 +7008,12 @@ test_read_write_static_routes_legacy (void)
"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);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile2,
&routefile2,
@@ -7584,26 +7055,17 @@ test_write_wired_static_routes (void)
NMConnection *reread;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
- static unsigned char tmpmac[] = { 0x31, 0x33, 0x33, 0x37, 0xbe, 0xcd };
- GByteArray *mac;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
+ static const char *mac = "31:33:33:37:be:cd";
guint32 mtu = 1492;
char *uuid;
- const guint32 ip1 = htonl (0x01010103);
- const guint32 ip2 = htonl (0x01010105);
- const guint32 gw = htonl (0x01010101);
- const guint32 dns1 = htonl (0x04020201);
- const guint32 dns2 = htonl (0x04020202);
- const guint32 route_dst1 = htonl (0x01020300);
- const guint32 route_dst2= htonl (0x03020100);
- const guint32 route_gw1 = htonl (0xdeadbeef);
- const guint32 route_gw2 = htonl (0xcafeabbe);
- const guint32 prefix = 24;
+ const char *dns1 = "4.2.2.1";
+ const char *dns2 = "4.2.2.2";
const char *dns_search1 = "foobar.com";
const char *dns_search2 = "lab.foobar.com";
- NMIP4Address *addr;
- NMIP4Route *route;
+ NMIPAddress *addr;
+ NMIPRoute *route;
gboolean success;
GError *error = NULL;
char *testfile = NULL;
@@ -7613,7 +7075,7 @@ test_write_wired_static_routes (void)
char *route6file = NULL;
gboolean ignore_error = FALSE;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -7632,66 +7094,54 @@ test_write_wired_static_routes (void)
s_wired = (NMSettingWired *) nm_setting_wired_new ();
nm_connection_add_setting (connection, NM_SETTING (s_wired));
- mac = g_byte_array_sized_new (sizeof (tmpmac));
- g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac));
-
g_object_set (s_wired,
NM_SETTING_WIRED_MAC_ADDRESS, mac,
NM_SETTING_WIRED_MTU, mtu,
NULL);
- g_byte_array_free (mac, TRUE);
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) 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_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
+ NM_SETTING_IP_CONFIG_GATEWAY, "1.1.1.1",
NULL);
- addr = nm_ip4_address_new ();
- nm_ip4_address_set_address (addr, ip1);
- nm_ip4_address_set_prefix (addr, prefix);
- nm_ip4_address_set_gateway (addr, gw);
- nm_setting_ip4_config_add_address (s_ip4, addr);
- nm_ip4_address_unref (addr);
+ addr = nm_ip_address_new (AF_INET, "1.1.1.3", 24, &error);
+ g_assert_no_error (error);
+ nm_setting_ip_config_add_address (s_ip4, addr);
+ nm_ip_address_unref (addr);
- addr = nm_ip4_address_new ();
- nm_ip4_address_set_address (addr, ip2);
- nm_ip4_address_set_prefix (addr, prefix);
- nm_ip4_address_set_gateway (addr, gw);
- nm_setting_ip4_config_add_address (s_ip4, addr);
- nm_ip4_address_unref (addr);
+ addr = nm_ip_address_new (AF_INET, "1.1.1.5", 24, &error);
+ g_assert_no_error (error);
+ nm_setting_ip_config_add_address (s_ip4, addr);
+ nm_ip_address_unref (addr);
/* Write out routes */
- route = nm_ip4_route_new ();
- nm_ip4_route_set_dest (route, route_dst1);
- nm_ip4_route_set_prefix (route, prefix);
- nm_ip4_route_set_next_hop (route, route_gw1);
- nm_setting_ip4_config_add_route (s_ip4, route);
- nm_ip4_route_unref (route);
-
- route = nm_ip4_route_new ();
- nm_ip4_route_set_dest (route, route_dst2);
- nm_ip4_route_set_prefix (route, prefix);
- nm_ip4_route_set_next_hop (route, route_gw2);
- nm_ip4_route_set_metric (route, 77);
- nm_setting_ip4_config_add_route (s_ip4, route);
- nm_ip4_route_unref (route);
-
- nm_setting_ip4_config_add_dns (s_ip4, dns1);
- nm_setting_ip4_config_add_dns (s_ip4, dns2);
-
- nm_setting_ip4_config_add_dns_search (s_ip4, dns_search1);
- nm_setting_ip4_config_add_dns_search (s_ip4, dns_search2);
+ route = nm_ip_route_new (AF_INET, "1.2.3.0", 24, "222.173.190.239", 0, &error);
+ g_assert_no_error (error);
+ nm_setting_ip_config_add_route (s_ip4, route);
+ nm_ip_route_unref (route);
+
+ route = nm_ip_route_new (AF_INET, "3.2.1.0", 24, "202.254.186.190", 77, &error);
+ g_assert_no_error (error);
+ nm_setting_ip_config_add_route (s_ip4, route);
+ nm_ip_route_unref (route);
+
+ nm_setting_ip_config_add_dns (s_ip4, dns1);
+ nm_setting_ip_config_add_dns (s_ip4, dns2);
+
+ nm_setting_ip_config_add_dns_search (s_ip4, dns_search1);
+ nm_setting_ip_config_add_dns_search (s_ip4, dns_search2);
/* IP6 setting */
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) 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_IGNORE,
- NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+ NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
NULL);
ASSERT (nm_connection_verify (connection, &error) == TRUE,
@@ -7711,13 +7161,12 @@ test_write_wired_static_routes (void)
"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);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -7755,8 +7204,8 @@ test_write_wired_dhcp_8021x_peap_mschapv2 (void)
NMConnection *reread;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
NMSetting8021x *s_8021x;
char *uuid;
gboolean success;
@@ -7768,7 +7217,7 @@ test_write_wired_dhcp_8021x_peap_mschapv2 (void)
char *route6file = NULL;
gboolean ignore_error = FALSE;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -7788,18 +7237,18 @@ test_write_wired_dhcp_8021x_peap_mschapv2 (void)
nm_connection_add_setting (connection, NM_SETTING (s_wired));
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) 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_AUTO, NULL);
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
/* IP6 setting */
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) 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_IGNORE,
- NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+ NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
NULL);
/* 802.1x setting */
@@ -7843,13 +7292,12 @@ test_write_wired_dhcp_8021x_peap_mschapv2 (void)
"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);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -7910,8 +7358,8 @@ test_write_wired_8021x_tls (NMSetting8021xCKScheme scheme,
NMConnection *reread;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
NMSetting8021x *s_8021x;
char *uuid;
gboolean success;
@@ -7926,7 +7374,7 @@ test_write_wired_8021x_tls (NMSetting8021xCKScheme scheme,
const char *pw;
char *tmp;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
g_assert (connection != NULL);
/* Connection setting */
@@ -7949,17 +7397,17 @@ test_write_wired_8021x_tls (NMSetting8021xCKScheme scheme,
nm_connection_add_setting (connection, NM_SETTING (s_wired));
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new ();
g_assert (s_ip4);
- g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
/* IP6 setting */
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new ();
g_assert (s_ip6);
g_object_set (s_ip6,
- NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
- NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+ NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
NULL);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
@@ -8028,13 +7476,12 @@ test_write_wired_8021x_tls (NMSetting8021xCKScheme scheme,
g_assert (testfile != NULL);
/* reread will be normalized, so we must normalize connection too. */
- nm_utils_normalize_connection (connection, TRUE);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -8125,14 +7572,12 @@ test_write_wired_aliases (void)
NMConnection *reread;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
char *uuid;
int num_addresses = 4;
- guint32 ip[] = { 0x01010101, 0x01010102, 0x01010103, 0x01010104 };
+ const char *ip[] = { "1.1.1.1", "1.1.1.2", "1.1.1.3", "1.1.1.4" };
const char *label[] = { NULL, "alias0:2", NULL, "alias0:3" };
- const guint32 gw = htonl (0x01010101);
- const guint32 prefix = 24;
- NMIP4Address *addr;
+ NMIPAddress *addr;
gboolean success;
GError *error = NULL;
char *testfile = NULL;
@@ -8144,7 +7589,7 @@ test_write_wired_aliases (void)
shvarFile *ifcfg;
int i, j;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
ASSERT (connection != NULL,
"wired-aliases-write", "failed to allocate new connection");
@@ -8171,24 +7616,25 @@ test_write_wired_aliases (void)
nm_connection_add_setting (connection, NM_SETTING (s_wired));
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) 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,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
+ NM_SETTING_IP_CONFIG_GATEWAY, "1.1.1.1",
+ NM_SETTING_IP_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);
+ addr = nm_ip_address_new (AF_INET, ip[i], 24, &error);
+ g_assert_no_error (error);
+ if (label[i])
+ nm_ip_address_set_attribute (addr, "label", g_variant_new_string (label[i]));
+ nm_setting_ip_config_add_address (s_ip4, addr);
+ nm_ip_address_unref (addr);
}
ASSERT (nm_connection_verify (connection, &error) == TRUE,
@@ -8236,7 +7682,6 @@ test_write_wired_aliases (void)
reread = connection_from_file (testfile,
NULL,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -8258,49 +7703,33 @@ test_write_wired_aliases (void)
* 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,
+ ASSERT (nm_setting_ip_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);
+ NM_SETTING_IP_CONFIG_ADDRESSES);
/* Addresses */
for (i = 0; i < num_addresses; i++) {
- guint32 addrbytes;
+ const char *addrstr;
- 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);
+ addr = nm_setting_ip_config_get_address (s_ip4, i);
+ g_assert (addr != NULL);
- addrbytes = nm_ip4_address_get_address (addr);
+ addrstr = nm_ip_address_get_address (addr);
for (j = 0; j < num_addresses; j++) {
- if (addrbytes == ip[j])
+ if (!g_strcmp0 (addrstr, ip[j]))
break;
}
+ g_assert (j < num_addresses);
- 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);
+ g_assert_cmpint (nm_ip_address_get_prefix (addr), ==, 24);
+ if (label[j])
+ g_assert_cmpstr (g_variant_get_string (nm_ip_address_get_attribute (addr, "label"), NULL), ==, label[j]);
+ else
+ g_assert (nm_ip_address_get_attribute (addr, "label") == NULL);
- ip[j] = 0;
+ ip[j] = NULL;
}
for (i = 0; i < num_addresses; i++) {
@@ -8310,6 +7739,9 @@ test_write_wired_aliases (void)
ip[i]);
}
+ /* Gateway */
+ g_assert_cmpstr (nm_setting_ip_config_get_gateway (s_ip4), ==, "1.1.1.1");
+
g_free (testfile);
g_free (keyfile);
g_free (routefile);
@@ -8324,20 +7756,14 @@ test_write_gateway (void)
NMConnection *connection, *reread;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *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;
+ NMIPAddress *addr;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -8356,32 +7782,24 @@ test_write_gateway (void)
nm_connection_add_setting (connection, NM_SETTING (s_wired));
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) 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,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
+ NM_SETTING_IP_CONFIG_GATEWAY, "1.1.1.254",
+ NM_SETTING_IP_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_ip_address_new (AF_INET, "1.1.1.3", 24, &error);
+ g_assert_no_error (error);
+ nm_setting_ip_config_add_address (s_ip4, addr);
+ nm_ip_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);
+ addr = nm_ip_address_new (AF_INET, "2.2.2.5", 24, &error);
+ g_assert_no_error (error);
+ nm_setting_ip_config_add_address (s_ip4, addr);
+ nm_ip_address_unref (addr);
success = nm_connection_verify (connection, &error);
g_assert_no_error (error);
@@ -8402,12 +7820,12 @@ test_write_gateway (void)
/* 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_assert_cmpstr (val, ==, "1.1.1.3");
g_free (val);
val = svGetValue (f, "IPADDR1", FALSE);
g_assert (val);
- g_assert_cmpstr (val, ==, ip2_str);
+ g_assert_cmpstr (val, ==, "2.2.2.5");
g_free (val);
val = svGetValue (f, "IPADDR0", FALSE);
@@ -8428,25 +7846,22 @@ test_write_gateway (void)
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_assert_cmpstr (val, ==, "1.1.1.254");
g_free (val);
val = svGetValue (f, "GATEWAY0", FALSE);
g_assert (val == NULL);
+ val = svGetValue (f, "GATEWAY1", FALSE);
+ g_assert (val == NULL);
svCloseFile (f);
/* reread will be normalized, so we must normalize connection too. */
- nm_utils_normalize_connection (connection, TRUE);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
- reread = connection_from_file (testfile, NULL, TYPE_WIRELESS, NULL,
+ reread = connection_from_file (testfile, NULL, TYPE_WIRELESS,
NULL, NULL, NULL, NULL, &error, NULL);
unlink (testfile);
g_assert_no_error (error);
@@ -8471,8 +7886,8 @@ test_write_wifi_open (void)
NMConnection *reread;
NMSettingConnection *s_con;
NMSettingWireless *s_wifi;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *uuid;
gboolean success;
GError *error = NULL;
@@ -8482,17 +7897,15 @@ test_write_wifi_open (void)
char *routefile = NULL;
char *route6file = NULL;
gboolean ignore_error = FALSE;
- GByteArray *ssid;
+ GBytes *ssid;
const unsigned char ssid_data[] = { 0x54, 0x65, 0x73, 0x74, 0x20, 0x53, 0x53, 0x49, 0x44 };
- GByteArray *bssid;
- const unsigned char bssid_data[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 };
+ const char *bssid = "11:22:33:44:55:66";
guint32 channel = 9, mtu = 1345;
- GByteArray *mac;
- const unsigned char mac_data[] = { 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff };
+ const char *mac = "aa:bb:cc:dd:ee:ff";
shvarFile *ifcfg;
char *tmp;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -8511,12 +7924,7 @@ test_write_wifi_open (void)
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));
- bssid = g_byte_array_sized_new (sizeof (bssid_data));
- g_byte_array_append (bssid, bssid_data, sizeof (bssid_data));
- mac = g_byte_array_sized_new (sizeof (mac_data));
- g_byte_array_append (mac, mac_data, sizeof (mac_data));
+ ssid = g_bytes_new (ssid_data, sizeof (ssid_data));
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
@@ -8528,23 +7936,21 @@ test_write_wifi_open (void)
NM_SETTING_WIRELESS_MTU, mtu,
NULL);
- g_byte_array_free (ssid, TRUE);
- g_byte_array_free (bssid, TRUE);
- g_byte_array_free (mac, TRUE);
+ g_bytes_unref (ssid);
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) 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_AUTO, NULL);
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
/* IP6 setting */
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) 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_IGNORE,
- NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+ NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
NULL);
ASSERT (nm_connection_verify (connection, &error) == TRUE,
@@ -8564,13 +7970,12 @@ test_write_wifi_open (void)
"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);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -8621,8 +8026,8 @@ test_write_wifi_open_hex_ssid (void)
NMConnection *reread;
NMSettingConnection *s_con;
NMSettingWireless *s_wifi;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *uuid;
gboolean success;
GError *error = NULL;
@@ -8632,10 +8037,10 @@ test_write_wifi_open_hex_ssid (void)
char *routefile = NULL;
char *route6file = NULL;
gboolean ignore_error = FALSE;
- GByteArray *ssid;
+ GBytes *ssid;
const unsigned char ssid_data[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd };
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -8654,29 +8059,28 @@ test_write_wifi_open_hex_ssid (void)
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));
+ ssid = g_bytes_new (ssid_data, sizeof (ssid_data));
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
NM_SETTING_WIRELESS_MODE, "infrastructure",
NULL);
- g_byte_array_free (ssid, TRUE);
+ g_bytes_unref (ssid);
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) 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_AUTO, NULL);
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
/* IP6 setting */
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) 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_IGNORE,
- NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+ NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
NULL);
ASSERT (nm_connection_verify (connection, &error) == TRUE,
@@ -8696,13 +8100,12 @@ test_write_wifi_open_hex_ssid (void)
"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);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -8737,8 +8140,8 @@ test_write_wifi_wep (void)
NMSettingConnection *s_con;
NMSettingWireless *s_wifi;
NMSettingWirelessSecurity *s_wsec;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *uuid;
gboolean success;
GError *error = NULL;
@@ -8748,11 +8151,11 @@ test_write_wifi_wep (void)
char *routefile = NULL;
char *route6file = NULL;
gboolean ignore_error = FALSE;
- GByteArray *ssid;
- const unsigned char ssid_data[] = "blahblah";
+ GBytes *ssid;
+ const char *ssid_data = "blahblah";
struct stat statbuf;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -8771,15 +8174,14 @@ test_write_wifi_wep (void)
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));
+ ssid = g_bytes_new (ssid_data, strlen (ssid_data));
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
NM_SETTING_WIRELESS_MODE, "infrastructure",
NULL);
- g_byte_array_free (ssid, TRUE);
+ g_bytes_unref (ssid);
/* Wireless security setting */
s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
@@ -8796,18 +8198,18 @@ test_write_wifi_wep (void)
nm_setting_wireless_security_set_wep_key (s_wsec, 3, "BBBBBBBBBBBBBBBBBBBBBBBBBB");
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) 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_AUTO, NULL);
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
/* IP6 setting */
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) 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_IGNORE,
- NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+ NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
NULL);
ASSERT (nm_connection_verify (connection, &error) == TRUE,
@@ -8827,13 +8229,12 @@ test_write_wifi_wep (void)
"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);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -8880,8 +8281,8 @@ test_write_wifi_wep_adhoc (void)
NMSettingConnection *s_con;
NMSettingWireless *s_wifi;
NMSettingWirelessSecurity *s_wsec;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *uuid;
gboolean success;
GError *error = NULL;
@@ -8891,16 +8292,13 @@ test_write_wifi_wep_adhoc (void)
char *routefile = NULL;
char *route6file = NULL;
gboolean ignore_error = FALSE;
- GByteArray *ssid;
- const unsigned char ssid_data[] = "blahblah";
+ GBytes *ssid;
+ const char *ssid_data = "blahblah";
struct stat statbuf;
- NMIP4Address *addr;
- const guint32 ip1 = htonl (0x01010103);
- const guint32 gw = htonl (0x01010101);
- const guint32 dns1 = htonl (0x04020201);
- const guint32 prefix = 24;
+ NMIPAddress *addr;
+ const char *dns1 = "4.2.2.1";
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -8919,15 +8317,14 @@ test_write_wifi_wep_adhoc (void)
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));
+ ssid = g_bytes_new (ssid_data, strlen (ssid_data));
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
NM_SETTING_WIRELESS_MODE, "adhoc",
NULL);
- g_byte_array_free (ssid, TRUE);
+ g_bytes_unref (ssid);
/* Wireless security setting */
s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
@@ -8937,28 +8334,29 @@ test_write_wifi_wep_adhoc (void)
nm_setting_wireless_security_set_wep_key (s_wsec, 0, "0123456789abcdef0123456789");
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) 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);
+ g_object_set (s_ip4,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
+ NM_SETTING_IP_CONFIG_GATEWAY, "1.1.1.1",
+ NULL);
/* IP Address */
- addr = nm_ip4_address_new ();
- nm_ip4_address_set_address (addr, ip1);
- nm_ip4_address_set_prefix (addr, prefix);
- nm_ip4_address_set_gateway (addr, gw);
- nm_setting_ip4_config_add_address (s_ip4, addr);
- nm_ip4_address_unref (addr);
+ addr = nm_ip_address_new (AF_INET, "1.1.1.3", 24, &error);
+ g_assert_no_error (error);
+ nm_setting_ip_config_add_address (s_ip4, addr);
+ nm_ip_address_unref (addr);
- nm_setting_ip4_config_add_dns (s_ip4, dns1);
+ nm_setting_ip_config_add_dns (s_ip4, dns1);
/* IP6 setting */
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) 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_IGNORE,
- NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+ NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
NULL);
ASSERT (nm_connection_verify (connection, &error) == TRUE,
@@ -8978,13 +8376,12 @@ test_write_wifi_wep_adhoc (void)
"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);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -9031,8 +8428,8 @@ test_write_wifi_wep_passphrase (void)
NMSettingConnection *s_con;
NMSettingWireless *s_wifi;
NMSettingWirelessSecurity *s_wsec;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *uuid;
gboolean success;
GError *error = NULL;
@@ -9042,11 +8439,11 @@ test_write_wifi_wep_passphrase (void)
char *routefile = NULL;
char *route6file = NULL;
gboolean ignore_error = FALSE;
- GByteArray *ssid;
- const unsigned char ssid_data[] = "blahblah";
+ GBytes *ssid;
+ const char *ssid_data = "blahblah";
struct stat statbuf;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -9065,15 +8462,14 @@ test_write_wifi_wep_passphrase (void)
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));
+ ssid = g_bytes_new (ssid_data, strlen (ssid_data));
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
NM_SETTING_WIRELESS_MODE, "infrastructure",
NULL);
- g_byte_array_free (ssid, TRUE);
+ g_bytes_unref (ssid);
/* Wireless security setting */
s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
@@ -9088,18 +8484,18 @@ test_write_wifi_wep_passphrase (void)
nm_setting_wireless_security_set_wep_key (s_wsec, 0, "asdfdjaslfjasd;flasjdfl;aksdf");
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) 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_AUTO, NULL);
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
/* IP6 setting */
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) 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_IGNORE,
- NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+ NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
NULL);
ASSERT (nm_connection_verify (connection, &error) == TRUE,
@@ -9119,13 +8515,12 @@ test_write_wifi_wep_passphrase (void)
"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);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -9172,8 +8567,8 @@ test_write_wifi_wep_40_ascii (void)
NMSettingConnection *s_con;
NMSettingWireless *s_wifi;
NMSettingWirelessSecurity *s_wsec;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *uuid;
gboolean success;
GError *error = NULL;
@@ -9183,11 +8578,11 @@ test_write_wifi_wep_40_ascii (void)
char *routefile = NULL;
char *route6file = NULL;
gboolean ignore_error = FALSE;
- GByteArray *ssid;
- const unsigned char ssid_data[] = "blahblah40";
+ GBytes *ssid;
+ const char *ssid_data = "blahblah40";
struct stat statbuf;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -9206,15 +8601,14 @@ test_write_wifi_wep_40_ascii (void)
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));
+ ssid = g_bytes_new (ssid_data, strlen (ssid_data));
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
NM_SETTING_WIRELESS_MODE, "infrastructure",
NULL);
- g_byte_array_free (ssid, TRUE);
+ g_bytes_unref (ssid);
/* Wireless security setting */
s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
@@ -9231,18 +8625,18 @@ test_write_wifi_wep_40_ascii (void)
nm_setting_wireless_security_set_wep_key (s_wsec, 3, "donec");
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) 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_AUTO, NULL);
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
/* IP6 setting */
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) 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_IGNORE,
- NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+ NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
NULL);
ASSERT (nm_connection_verify (connection, &error) == TRUE,
@@ -9262,13 +8656,12 @@ test_write_wifi_wep_40_ascii (void)
"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);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -9315,8 +8708,8 @@ test_write_wifi_wep_104_ascii (void)
NMSettingConnection *s_con;
NMSettingWireless *s_wifi;
NMSettingWirelessSecurity *s_wsec;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *uuid;
gboolean success;
GError *error = NULL;
@@ -9326,11 +8719,11 @@ test_write_wifi_wep_104_ascii (void)
char *routefile = NULL;
char *route6file = NULL;
gboolean ignore_error = FALSE;
- GByteArray *ssid;
- const unsigned char ssid_data[] = "blahblah104";
+ GBytes *ssid;
+ const char *ssid_data = "blahblah104";
struct stat statbuf;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -9349,15 +8742,14 @@ test_write_wifi_wep_104_ascii (void)
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));
+ ssid = g_bytes_new (ssid_data, strlen (ssid_data));
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
NM_SETTING_WIRELESS_MODE, "infrastructure",
NULL);
- g_byte_array_free (ssid, TRUE);
+ g_bytes_unref (ssid);
/* Wireless security setting */
s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
@@ -9374,18 +8766,18 @@ test_write_wifi_wep_104_ascii (void)
nm_setting_wireless_security_set_wep_key (s_wsec, 3, "thisismyascii");
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) 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_AUTO, NULL);
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
/* IP6 setting */
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) 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_IGNORE,
- NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+ NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
NULL);
ASSERT (nm_connection_verify (connection, &error) == TRUE,
@@ -9405,13 +8797,12 @@ test_write_wifi_wep_104_ascii (void)
"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);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -9458,8 +8849,8 @@ test_write_wifi_leap (void)
NMSettingConnection *s_con;
NMSettingWireless *s_wifi;
NMSettingWirelessSecurity *s_wsec;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *uuid;
gboolean success;
GError *error = NULL;
@@ -9469,11 +8860,11 @@ test_write_wifi_leap (void)
char *routefile = NULL;
char *route6file = NULL;
gboolean ignore_error = FALSE;
- GByteArray *ssid;
- const unsigned char ssid_data[] = "blahblah";
+ GBytes *ssid;
+ const char *ssid_data = "blahblah";
struct stat statbuf;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -9492,15 +8883,14 @@ test_write_wifi_leap (void)
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));
+ ssid = g_bytes_new (ssid_data, strlen (ssid_data));
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
NM_SETTING_WIRELESS_MODE, "infrastructure",
NULL);
- g_byte_array_free (ssid, TRUE);
+ g_bytes_unref (ssid);
/* Wireless security setting */
s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
@@ -9514,18 +8904,18 @@ test_write_wifi_leap (void)
NULL);
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) 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_AUTO, NULL);
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
/* IP6 setting */
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) 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_IGNORE,
- NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+ NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
NULL);
ASSERT (nm_connection_verify (connection, &error) == TRUE,
@@ -9545,13 +8935,12 @@ test_write_wifi_leap (void)
"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);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -9598,8 +8987,8 @@ test_write_wifi_leap_secret_flags (NMSettingSecretFlags flags)
NMSettingConnection *s_con;
NMSettingWireless *s_wifi;
NMSettingWirelessSecurity *s_wsec;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *uuid;
gboolean success;
GError *error = NULL;
@@ -9609,10 +8998,10 @@ test_write_wifi_leap_secret_flags (NMSettingSecretFlags flags)
char *routefile = NULL;
char *route6file = NULL;
gboolean ignore_error = FALSE;
- GByteArray *ssid;
- const unsigned char ssid_data[] = "blahblah";
+ GBytes *ssid;
+ const char *ssid_data = "blahblah";
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
g_assert (connection);
/* Connection setting */
@@ -9633,13 +9022,12 @@ test_write_wifi_leap_secret_flags (NMSettingSecretFlags flags)
g_assert (s_wifi);
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));
+ ssid = g_bytes_new (ssid_data, strlen (ssid_data));
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
NM_SETTING_WIRELESS_MODE, "infrastructure",
NULL);
- g_byte_array_free (ssid, TRUE);
+ g_bytes_unref (ssid);
/* Wireless security setting */
s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
@@ -9655,19 +9043,19 @@ test_write_wifi_leap_secret_flags (NMSettingSecretFlags flags)
NULL);
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new ();
g_assert (s_ip4);
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);
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
/* IP6 setting */
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new ();
g_assert (s_ip6);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
- NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
- NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+ NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
NULL);
success = nm_connection_verify (connection, &error);
@@ -9684,13 +9072,12 @@ test_write_wifi_leap_secret_flags (NMSettingSecretFlags flags)
g_assert (testfile);
/* reread will be normalized, so we must normalize connection too. */
- nm_utils_normalize_connection (connection, TRUE);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -9739,8 +9126,8 @@ test_write_wifi_wpa_psk (const char *name,
NMSettingConnection *s_con;
NMSettingWireless *s_wifi;
NMSettingWirelessSecurity *s_wsec;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *uuid, *tmp;
gboolean success;
GError *error = NULL;
@@ -9750,12 +9137,12 @@ test_write_wifi_wpa_psk (const char *name,
char *routefile = NULL;
char *route6file = NULL;
gboolean ignore_error = FALSE;
- GByteArray *ssid;
- const unsigned char ssid_data[] = "blahblah";
+ GBytes *ssid;
+ const char *ssid_data = "blahblah";
g_return_if_fail (psk != NULL);
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -9774,15 +9161,14 @@ test_write_wifi_wpa_psk (const char *name,
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));
+ ssid = g_bytes_new (ssid_data, strlen (ssid_data));
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
NM_SETTING_WIRELESS_MODE, "infrastructure",
NULL);
- g_byte_array_free (ssid, TRUE);
+ g_bytes_unref (ssid);
/* Wireless security setting */
s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
@@ -9809,18 +9195,18 @@ test_write_wifi_wpa_psk (const char *name,
}
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) 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_AUTO, NULL);
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
/* IP6 setting */
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) 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_IGNORE,
- NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+ NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
NULL);
ASSERT (nm_connection_verify (connection, &error) == TRUE,
@@ -9840,13 +9226,12 @@ test_write_wifi_wpa_psk (const char *name,
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);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -9887,8 +9272,8 @@ test_write_wifi_wpa_psk_adhoc (void)
NMSettingConnection *s_con;
NMSettingWireless *s_wifi;
NMSettingWirelessSecurity *s_wsec;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *uuid;
gboolean success;
GError *error = NULL;
@@ -9898,15 +9283,12 @@ test_write_wifi_wpa_psk_adhoc (void)
char *routefile = NULL;
char *route6file = NULL;
gboolean ignore_error = FALSE;
- GByteArray *ssid;
- const unsigned char ssid_data[] = "blahblah";
- NMIP4Address *addr;
- const guint32 ip1 = htonl (0x01010103);
- const guint32 gw = htonl (0x01010101);
- const guint32 dns1 = htonl (0x04020201);
- const guint32 prefix = 24;
+ GBytes *ssid;
+ const char *ssid_data = "blahblah";
+ NMIPAddress *addr;
+ const char *dns1 = "4.2.2.1";
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -9925,8 +9307,7 @@ test_write_wifi_wpa_psk_adhoc (void)
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));
+ ssid = g_bytes_new (ssid_data, strlen (ssid_data));
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
@@ -9935,7 +9316,7 @@ test_write_wifi_wpa_psk_adhoc (void)
NM_SETTING_WIRELESS_BAND, "bg",
NULL);
- g_byte_array_free (ssid, TRUE);
+ g_bytes_unref (ssid);
/* Wireless security setting */
s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
@@ -9950,28 +9331,29 @@ test_write_wifi_wpa_psk_adhoc (void)
nm_setting_wireless_security_add_group (s_wsec, "tkip");
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) 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);
+ g_object_set (s_ip4,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
+ NM_SETTING_IP_CONFIG_GATEWAY, "1.1.1.1",
+ NULL);
/* IP Address */
- addr = nm_ip4_address_new ();
- nm_ip4_address_set_address (addr, ip1);
- nm_ip4_address_set_prefix (addr, prefix);
- nm_ip4_address_set_gateway (addr, gw);
- nm_setting_ip4_config_add_address (s_ip4, addr);
- nm_ip4_address_unref (addr);
+ addr = nm_ip_address_new (AF_INET, "1.1.1.3", 25, &error);
+ g_assert_no_error (error);
+ nm_setting_ip_config_add_address (s_ip4, addr);
+ nm_ip_address_unref (addr);
- nm_setting_ip4_config_add_dns (s_ip4, dns1);
+ nm_setting_ip_config_add_dns (s_ip4, dns1);
/* IP6 setting */
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) 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_IGNORE,
- NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+ NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
NULL);
ASSERT (nm_connection_verify (connection, &error) == TRUE,
@@ -9991,13 +9373,12 @@ test_write_wifi_wpa_psk_adhoc (void)
"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);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -10037,8 +9418,8 @@ test_write_wifi_wpa_eap_tls (void)
NMSettingWireless *s_wifi;
NMSettingWirelessSecurity *s_wsec;
NMSetting8021x *s_8021x;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *uuid;
gboolean success;
GError *error = NULL;
@@ -10048,10 +9429,10 @@ test_write_wifi_wpa_eap_tls (void)
char *routefile = NULL;
char *route6file = NULL;
gboolean ignore_error = FALSE;
- GByteArray *ssid;
+ GBytes *ssid;
const char *ssid_data = "blahblah";
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -10070,15 +9451,14 @@ test_write_wifi_wpa_eap_tls (void)
s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
nm_connection_add_setting (connection, NM_SETTING (s_wifi));
- ssid = g_byte_array_sized_new (strlen (ssid_data));
- g_byte_array_append (ssid, (const unsigned char *) ssid_data, strlen (ssid_data));
+ ssid = g_bytes_new (ssid_data, strlen (ssid_data));
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
NM_SETTING_WIRELESS_MODE, "infrastructure",
NULL);
- g_byte_array_free (ssid, TRUE);
+ g_bytes_unref (ssid);
/* Wireless security setting */
s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
@@ -10126,18 +9506,18 @@ test_write_wifi_wpa_eap_tls (void)
TEST_IFCFG_WIFI_WPA_EAP_TLS_PRIVATE_KEY, error->message);
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) 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_AUTO, NULL);
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
/* IP6 setting */
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) 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_IGNORE,
- NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+ NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
NULL);
ASSERT (nm_connection_verify (connection, &error) == TRUE,
@@ -10157,13 +9537,12 @@ test_write_wifi_wpa_eap_tls (void)
"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);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -10203,8 +9582,8 @@ test_write_wifi_wpa_eap_ttls_tls (void)
NMSettingWireless *s_wifi;
NMSettingWirelessSecurity *s_wsec;
NMSetting8021x *s_8021x;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *uuid;
gboolean success;
GError *error = NULL;
@@ -10214,10 +9593,10 @@ test_write_wifi_wpa_eap_ttls_tls (void)
char *routefile = NULL;
char *route6file = NULL;
gboolean ignore_error = FALSE;
- GByteArray *ssid;
+ GBytes *ssid;
const char *ssid_data = "blahblah";
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -10236,15 +9615,14 @@ test_write_wifi_wpa_eap_ttls_tls (void)
s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
nm_connection_add_setting (connection, NM_SETTING (s_wifi));
- ssid = g_byte_array_sized_new (strlen (ssid_data));
- g_byte_array_append (ssid, (const unsigned char *) ssid_data, strlen (ssid_data));
+ ssid = g_bytes_new (ssid_data, strlen (ssid_data));
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
NM_SETTING_WIRELESS_MODE, "infrastructure",
NULL);
- g_byte_array_free (ssid, TRUE);
+ g_bytes_unref (ssid);
/* Wireless security setting */
s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
@@ -10310,18 +9688,18 @@ test_write_wifi_wpa_eap_ttls_tls (void)
TEST_IFCFG_WIFI_WPA_EAP_TLS_PRIVATE_KEY, error->message);
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) 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_AUTO, NULL);
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
/* IP6 setting */
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) 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_IGNORE,
- NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+ NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
NULL);
ASSERT (nm_connection_verify (connection, &error) == TRUE,
@@ -10341,13 +9719,12 @@ test_write_wifi_wpa_eap_ttls_tls (void)
"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);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -10387,8 +9764,8 @@ test_write_wifi_wpa_eap_ttls_mschapv2 (void)
NMSettingWireless *s_wifi;
NMSettingWirelessSecurity *s_wsec;
NMSetting8021x *s_8021x;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *uuid;
gboolean success;
GError *error = NULL;
@@ -10398,10 +9775,10 @@ test_write_wifi_wpa_eap_ttls_mschapv2 (void)
char *routefile = NULL;
char *route6file = NULL;
gboolean ignore_error = FALSE;
- GByteArray *ssid;
+ GBytes *ssid;
const char *ssid_data = "blahblah";
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -10420,15 +9797,14 @@ test_write_wifi_wpa_eap_ttls_mschapv2 (void)
s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
nm_connection_add_setting (connection, NM_SETTING (s_wifi));
- ssid = g_byte_array_sized_new (strlen (ssid_data));
- g_byte_array_append (ssid, (const unsigned char *) ssid_data, strlen (ssid_data));
+ ssid = g_bytes_new (ssid_data, strlen (ssid_data));
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
NM_SETTING_WIRELESS_MODE, "infrastructure",
NULL);
- g_byte_array_free (ssid, TRUE);
+ g_bytes_unref (ssid);
/* Wireless security setting */
s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
@@ -10466,18 +9842,18 @@ test_write_wifi_wpa_eap_ttls_mschapv2 (void)
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) 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_AUTO, NULL);
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
/* IP6 setting */
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) 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_IGNORE,
- NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+ NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
NULL);
ASSERT (nm_connection_verify (connection, &error) == TRUE,
@@ -10497,13 +9873,12 @@ test_write_wifi_wpa_eap_ttls_mschapv2 (void)
"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);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -10542,8 +9917,8 @@ test_write_wifi_wpa_then_open (void)
NMSettingConnection *s_con;
NMSettingWireless *s_wifi;
NMSettingWirelessSecurity *s_wsec;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *uuid;
gboolean success;
GError *error = NULL;
@@ -10553,14 +9928,14 @@ test_write_wifi_wpa_then_open (void)
char *routefile = NULL;
char *route6file = NULL;
gboolean ignore_error = FALSE;
- GByteArray *ssid;
- const unsigned char ssid_data[] = "blahblah";
+ GBytes *ssid;
+ const char *ssid_data = "blahblah";
/* Test that writing out a WPA config then changing that to an open
* config doesn't leave various WPA-related keys lying around in the ifcfg.
*/
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
g_assert (connection);
/* Connection setting */
@@ -10582,15 +9957,14 @@ test_write_wifi_wpa_then_open (void)
g_assert (s_wifi);
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));
+ ssid = g_bytes_new (ssid_data, strlen (ssid_data));
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
NM_SETTING_WIRELESS_MODE, "infrastructure",
NULL);
- g_byte_array_free (ssid, TRUE);
+ g_bytes_unref (ssid);
/* Wireless security setting */
s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
@@ -10611,20 +9985,20 @@ test_write_wifi_wpa_then_open (void)
nm_setting_wireless_security_add_group (s_wsec, "ccmp");
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new ();
g_assert (s_ip4);
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);
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
/* IP6 setting */
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new ();
g_assert (s_ip6);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
- NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
- NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+ NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
NULL);
success = nm_connection_verify (connection, &error);
@@ -10641,13 +10015,12 @@ test_write_wifi_wpa_then_open (void)
g_assert (testfile);
/* reread will be normalized, so we must normalize connection too. */
- nm_utils_normalize_connection (connection, TRUE);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -10688,13 +10061,12 @@ test_write_wifi_wpa_then_open (void)
keyfile = NULL;
/* reread will be normalized, so we must normalize connection too. */
- nm_utils_normalize_connection (connection, TRUE);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read it for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -10735,8 +10107,8 @@ test_write_wifi_wpa_then_wep_with_perms (void)
NMSettingConnection *s_con;
NMSettingWireless *s_wifi;
NMSettingWirelessSecurity *s_wsec;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *uuid;
gboolean success;
GError *error = NULL;
@@ -10746,15 +10118,15 @@ test_write_wifi_wpa_then_wep_with_perms (void)
char *routefile = NULL;
char *route6file = NULL;
gboolean ignore_error = FALSE;
- GByteArray *ssid;
- GSList *perm_list = NULL;
- const unsigned char ssid_data[] = "SomeSSID";
+ GBytes *ssid;
+ char **perms;
+ const char *ssid_data = "SomeSSID";
/* Test that writing out a WPA config then changing that to a WEP
* config works and doesn't cause infinite loop or other issues.
*/
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
g_assert (connection);
/* Connection setting */
@@ -10763,16 +10135,16 @@ test_write_wifi_wpa_then_wep_with_perms (void)
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
- perm_list = g_slist_append (perm_list, "user:superman:");
+ perms = g_strsplit ("user:superman:", ",", -1);
g_object_set (s_con,
NM_SETTING_CONNECTION_ID, "random wifi connection 2",
NM_SETTING_CONNECTION_UUID, uuid,
NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
- NM_SETTING_CONNECTION_PERMISSIONS, perm_list,
+ NM_SETTING_CONNECTION_PERMISSIONS, perms,
NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
NULL);
g_free (uuid);
- g_slist_free (perm_list);
+ g_strfreev (perms);
ASSERT (nm_setting_connection_get_num_permissions (s_con) == 1,
"test_write_wifi_wpa_then_wep_with_perms", "unexpected failure adding valid user permisson");
@@ -10781,15 +10153,14 @@ test_write_wifi_wpa_then_wep_with_perms (void)
g_assert (s_wifi);
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));
+ ssid = g_bytes_new (ssid_data, strlen (ssid_data));
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
NM_SETTING_WIRELESS_MODE, "infrastructure",
NULL);
- g_byte_array_free (ssid, TRUE);
+ g_bytes_unref (ssid);
/* Wireless security setting */
s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
@@ -10810,20 +10181,20 @@ test_write_wifi_wpa_then_wep_with_perms (void)
nm_setting_wireless_security_add_group (s_wsec, "ccmp");
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new ();
g_assert (s_ip4);
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);
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
/* IP6 setting */
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new ();
g_assert (s_ip6);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
- NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
- NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+ NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
NULL);
success = nm_connection_verify (connection, &error);
@@ -10840,13 +10211,12 @@ test_write_wifi_wpa_then_wep_with_perms (void)
g_assert (testfile);
/* reread will be normalized, so we must normalize connection too. */
- nm_utils_normalize_connection (connection, TRUE);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -10893,13 +10263,12 @@ test_write_wifi_wpa_then_wep_with_perms (void)
keyfile = NULL;
/* reread will be normalized, so we must normalize connection too. */
- nm_utils_normalize_connection (connection, TRUE);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read it for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -10942,8 +10311,8 @@ test_write_wifi_dynamic_wep_leap (void)
NMSettingWireless *s_wifi;
NMSettingWirelessSecurity *s_wsec;
NMSetting8021x *s_8021x;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *uuid;
gboolean success;
GError *error = NULL;
@@ -10953,12 +10322,12 @@ test_write_wifi_dynamic_wep_leap (void)
char *routefile = NULL;
char *route6file = NULL;
gboolean ignore_error = FALSE;
- GByteArray *ssid;
+ GBytes *ssid;
const char *ssid_data = "blahblah";
shvarFile *ifcfg;
char *tmp;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
g_assert (connection);
/* Connection setting */
@@ -10979,15 +10348,14 @@ test_write_wifi_dynamic_wep_leap (void)
g_assert (s_wifi);
nm_connection_add_setting (connection, NM_SETTING (s_wifi));
- ssid = g_byte_array_sized_new (strlen (ssid_data));
- g_byte_array_append (ssid, (const unsigned char *) ssid_data, strlen (ssid_data));
+ ssid = g_bytes_new (ssid_data, strlen (ssid_data));
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
NM_SETTING_WIRELESS_MODE, "infrastructure",
NULL);
- g_byte_array_free (ssid, TRUE);
+ g_bytes_unref (ssid);
/* Wireless security setting */
s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
@@ -11009,19 +10377,19 @@ test_write_wifi_dynamic_wep_leap (void)
NULL);
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new ();
g_assert (s_ip4);
- g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
/* IP6 setting */
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new ();
g_assert (s_ip6);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
- NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
- NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+ NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
NULL);
success = nm_connection_verify (connection, &error);
@@ -11038,13 +10406,12 @@ test_write_wifi_dynamic_wep_leap (void)
g_assert (testfile);
/* reread will be normalized, so we must normalize connection too. */
- nm_utils_normalize_connection (connection, TRUE);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -11090,399 +10457,6 @@ test_write_wifi_dynamic_wep_leap (void)
g_object_unref (reread);
}
-#define TEST_IFCFG_IBFT_DHCP TEST_IFCFG_DIR"/network-scripts/ifcfg-test-ibft-dhcp"
-
-static void
-test_read_ibft_dhcp (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, 0x33, 0x21, 0x98, 0xb9, 0xf1 };
- const char *expected_id = "System test-ibft-dhcp";
- guint64 expected_timestamp = 0;
-
- connection = connection_from_file (TEST_IFCFG_IBFT_DHCP,
- NULL,
- TYPE_ETHERNET,
- TEST_IFCFG_DIR "/iscsiadm-test-dhcp",
- &unmanaged,
- &keyfile,
- &routefile,
- &route6file,
- &error,
- &ignore_error);
- ASSERT (connection != NULL,
- "ibft-dhcp-read", "failed to read %s: %s", TEST_IFCFG_IBFT_DHCP, error->message);
-
- ASSERT (nm_connection_verify (connection, &error),
- "ibft-dhcp-verify", "failed to verify %s: %s", TEST_IFCFG_IBFT_DHCP, error->message);
-
- /* ===== CONNECTION SETTING ===== */
-
- s_con = nm_connection_get_setting_connection (connection);
- ASSERT (s_con != NULL,
- "ibft-dhcp-verify-connection", "failed to verify %s: missing %s setting",
- TEST_IFCFG_IBFT_DHCP,
- NM_SETTING_CONNECTION_SETTING_NAME);
-
- /* ID */
- tmp = nm_setting_connection_get_id (s_con);
- ASSERT (tmp != NULL,
- "ibft-dhcp-verify-connection", "failed to verify %s: missing %s / %s key",
- TEST_IFCFG_IBFT_DHCP,
- NM_SETTING_CONNECTION_SETTING_NAME,
- NM_SETTING_CONNECTION_ID);
- ASSERT (strcmp (tmp, expected_id) == 0,
- "ibft-dhcp-verify-connection", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_IBFT_DHCP,
- NM_SETTING_CONNECTION_SETTING_NAME,
- NM_SETTING_CONNECTION_ID);
-
- /* 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,
- "ibft-dhcp-verify-connection", "failed to verify %s: unexpected %s /%s key value",
- TEST_IFCFG_IBFT_DHCP,
- NM_SETTING_CONNECTION_SETTING_NAME,
- NM_SETTING_CONNECTION_TIMESTAMP);
-
- /* Autoconnect */
- ASSERT (nm_setting_connection_get_autoconnect (s_con) == TRUE,
- "ibft-dhcp-verify-connection", "failed to verify %s: unexpected %s /%s key value",
- TEST_IFCFG_IBFT_DHCP,
- NM_SETTING_CONNECTION_SETTING_NAME,
- NM_SETTING_CONNECTION_AUTOCONNECT);
-
- /* Read-only */
- ASSERT (nm_setting_connection_get_read_only (s_con) == TRUE,
- "ibft-dhcp-verify-connection", "failed to verify %s: unexpected %s /%s key value",
- TEST_IFCFG_IBFT_DHCP,
- NM_SETTING_CONNECTION_SETTING_NAME,
- NM_SETTING_CONNECTION_READ_ONLY);
-
- /* ===== WIRED SETTING ===== */
-
- s_wired = nm_connection_get_setting_wired (connection);
- ASSERT (s_wired != NULL,
- "ibft-dhcp-verify-wired", "failed to verify %s: missing %s setting",
- TEST_IFCFG_IBFT_DHCP,
- NM_SETTING_WIRED_SETTING_NAME);
-
- /* MAC address */
- array = nm_setting_wired_get_mac_address (s_wired);
- ASSERT (array != NULL,
- "ibft-dhcp-verify-wired", "failed to verify %s: missing %s / %s key",
- TEST_IFCFG_IBFT_DHCP,
- NM_SETTING_WIRED_SETTING_NAME,
- NM_SETTING_WIRED_MAC_ADDRESS);
- ASSERT (array->len == ETH_ALEN,
- "ibft-dhcp-verify-wired", "failed to verify %s: unexpected %s / %s key value length",
- TEST_IFCFG_IBFT_DHCP,
- NM_SETTING_WIRED_SETTING_NAME,
- NM_SETTING_WIRED_MAC_ADDRESS);
- ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0,
- "ibft-dhcp-verify-wired", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_IBFT_DHCP,
- NM_SETTING_WIRED_SETTING_NAME,
- NM_SETTING_WIRED_MAC_ADDRESS);
-
- ASSERT (nm_setting_wired_get_mtu (s_wired) == 0,
- "ibft-dhcp-verify-wired", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_IBFT_DHCP,
- NM_SETTING_WIRED_SETTING_NAME,
- NM_SETTING_WIRED_MTU);
-
- /* ===== IPv4 SETTING ===== */
-
- s_ip4 = nm_connection_get_setting_ip4_config (connection);
- ASSERT (s_ip4 != NULL,
- "ibft-dhcp-verify-ip4", "failed to verify %s: missing %s setting",
- TEST_IFCFG_IBFT_DHCP,
- 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,
- "ibft-dhcp-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_IBFT_DHCP,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_METHOD);
-
- g_free (unmanaged);
- g_free (keyfile);
- g_free (routefile);
- g_free (route6file);
- g_object_unref (connection);
-}
-
-#define TEST_IFCFG_IBFT_STATIC TEST_IFCFG_DIR"/network-scripts/ifcfg-test-ibft-static"
-
-static void
-test_read_ibft_static (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, 0x33, 0x21, 0x98, 0xb9, 0xf0 };
- const char *expected_id = "System test-ibft-static";
- guint64 expected_timestamp = 0;
- const char *expected_dns1 = "10.16.255.2";
- const char *expected_dns2 = "10.16.255.3";
- guint32 addr;
- const char *expected_address1 = "192.168.32.72";
- const char *expected_address1_gw = "192.168.35.254";
- NMIP4Address *ip4_addr;
-
- connection = connection_from_file (TEST_IFCFG_IBFT_STATIC,
- NULL,
- TYPE_ETHERNET,
- TEST_IFCFG_DIR "/iscsiadm-test-static",
- &unmanaged,
- &keyfile,
- &routefile,
- &route6file,
- &error,
- &ignore_error);
- ASSERT (connection != NULL,
- "ibft-static-read", "failed to read %s: %s", TEST_IFCFG_IBFT_STATIC, error->message);
-
- ASSERT (nm_connection_verify (connection, &error),
- "ibft-static-verify", "failed to verify %s: %s", TEST_IFCFG_IBFT_STATIC, error->message);
-
- /* ===== CONNECTION SETTING ===== */
-
- s_con = nm_connection_get_setting_connection (connection);
- ASSERT (s_con != NULL,
- "ibft-static-verify-connection", "failed to verify %s: missing %s setting",
- TEST_IFCFG_IBFT_STATIC,
- NM_SETTING_CONNECTION_SETTING_NAME);
-
- /* ID */
- tmp = nm_setting_connection_get_id (s_con);
- ASSERT (tmp != NULL,
- "ibft-static-verify-connection", "failed to verify %s: missing %s / %s key",
- TEST_IFCFG_IBFT_STATIC,
- NM_SETTING_CONNECTION_SETTING_NAME,
- NM_SETTING_CONNECTION_ID);
- ASSERT (strcmp (tmp, expected_id) == 0,
- "ibft-static-verify-connection", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_IBFT_STATIC,
- NM_SETTING_CONNECTION_SETTING_NAME,
- NM_SETTING_CONNECTION_ID);
-
- /* 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,
- "ibft-static-verify-connection", "failed to verify %s: unexpected %s /%s key value",
- TEST_IFCFG_IBFT_STATIC,
- NM_SETTING_CONNECTION_SETTING_NAME,
- NM_SETTING_CONNECTION_TIMESTAMP);
-
- /* Autoconnect */
- ASSERT (nm_setting_connection_get_autoconnect (s_con) == TRUE,
- "ibft-static-verify-connection", "failed to verify %s: unexpected %s /%s key value",
- TEST_IFCFG_IBFT_STATIC,
- NM_SETTING_CONNECTION_SETTING_NAME,
- NM_SETTING_CONNECTION_AUTOCONNECT);
-
- /* Read-only */
- ASSERT (nm_setting_connection_get_read_only (s_con) == TRUE,
- "ibft-static-verify-connection", "failed to verify %s: unexpected %s /%s key value",
- TEST_IFCFG_IBFT_STATIC,
- NM_SETTING_CONNECTION_SETTING_NAME,
- NM_SETTING_CONNECTION_READ_ONLY);
-
- /* ===== WIRED SETTING ===== */
-
- s_wired = nm_connection_get_setting_wired (connection);
- ASSERT (s_wired != NULL,
- "ibft-static-verify-wired", "failed to verify %s: missing %s setting",
- TEST_IFCFG_IBFT_STATIC,
- NM_SETTING_WIRED_SETTING_NAME);
-
- /* MAC address */
- array = nm_setting_wired_get_mac_address (s_wired);
- ASSERT (array != NULL,
- "ibft-static-verify-wired", "failed to verify %s: missing %s / %s key",
- TEST_IFCFG_IBFT_STATIC,
- NM_SETTING_WIRED_SETTING_NAME,
- NM_SETTING_WIRED_MAC_ADDRESS);
- ASSERT (array->len == ETH_ALEN,
- "ibft-static-verify-wired", "failed to verify %s: unexpected %s / %s key value length",
- TEST_IFCFG_IBFT_STATIC,
- NM_SETTING_WIRED_SETTING_NAME,
- NM_SETTING_WIRED_MAC_ADDRESS);
- ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0,
- "ibft-static-verify-wired", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_IBFT_STATIC,
- NM_SETTING_WIRED_SETTING_NAME,
- NM_SETTING_WIRED_MAC_ADDRESS);
-
- ASSERT (nm_setting_wired_get_mtu (s_wired) == 0,
- "ibft-static-verify-wired", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_IBFT_STATIC,
- NM_SETTING_WIRED_SETTING_NAME,
- NM_SETTING_WIRED_MTU);
-
- /* ===== IPv4 SETTING ===== */
-
- s_ip4 = nm_connection_get_setting_ip4_config (connection);
- ASSERT (s_ip4 != NULL,
- "ibft-static-verify-ip4", "failed to verify %s: missing %s setting",
- TEST_IFCFG_IBFT_STATIC,
- 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,
- "ibft-static-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_IBFT_STATIC,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_METHOD);
-
- /* DNS Addresses */
- ASSERT (nm_setting_ip4_config_get_num_dns (s_ip4) == 2,
- "ibft-static-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_IBFT_STATIC,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS);
-
- ASSERT (inet_pton (AF_INET, expected_dns1, &addr) > 0,
- "ibft-static-verify-ip4", "failed to verify %s: couldn't convert DNS IP address #1",
- 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,
- "ibft-static-verify-ip4", "failed to verify %s: unexpected %s / %s key value #1",
- TEST_IFCFG_IBFT_STATIC,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS);
-
- ASSERT (inet_pton (AF_INET, expected_dns2, &addr) > 0,
- "ibft-static-verify-ip4", "failed to verify %s: couldn't convert DNS IP address #2",
- 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,
- "ibft-static-verify-ip4", "failed to verify %s: unexpected %s / %s key value #2",
- TEST_IFCFG_IBFT_STATIC,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS);
-
- ASSERT (nm_setting_ip4_config_get_num_addresses (s_ip4) == 1,
- "ibft-static-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
- TEST_IFCFG_IBFT_STATIC,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS);
-
- /* Address #1 */
- ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 0);
- ASSERT (ip4_addr,
- "ibft-static-verify-ip4", "failed to verify %s: missing IP4 address #1",
- TEST_IFCFG_IBFT_STATIC,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_ADDRESSES);
-
- ASSERT (nm_ip4_address_get_prefix (ip4_addr) == 22,
- "ibft-static-verify-ip4", "failed to verify %s: unexpected IP4 address #1 prefix",
- TEST_IFCFG_IBFT_STATIC,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_ADDRESSES);
-
- ASSERT (inet_pton (AF_INET, expected_address1, &addr) > 0,
- "ibft-static-verify-ip4", "failed to verify %s: couldn't convert IP address #1",
- TEST_IFCFG_IBFT_STATIC,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS);
- 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,
- NM_SETTING_IP4_CONFIG_ADDRESSES);
-
- ASSERT (inet_pton (AF_INET, expected_address1_gw, &addr) > 0,
- "ibft-static-verify-ip4", "failed to verify %s: couldn't convert IP address #1 gateway",
- TEST_IFCFG_IBFT_STATIC,
- NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_ADDRESSES);
- 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,
- NM_SETTING_IP4_CONFIG_ADDRESSES);
-
- g_free (unmanaged);
- g_free (keyfile);
- g_free (routefile);
- g_free (route6file);
- g_object_unref (connection);
-}
-
-static void
-test_read_ibft_malformed (const char *name, const char *iscsiadm_path, gboolean expect_warning)
-{
- NMConnection *connection;
- char *unmanaged = NULL;
- char *keyfile = NULL;
- char *routefile = NULL;
- char *route6file = NULL;
- gboolean ignore_error = FALSE;
- GError *error = NULL;
-
- 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,
- iscsiadm_path,
- &unmanaged,
- &keyfile,
- &routefile,
- &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);
-
- g_free (unmanaged);
- g_free (keyfile);
- g_free (routefile);
- g_free (route6file);
-}
-
static void
test_write_wired_qeth_dhcp (void)
{
@@ -11490,10 +10464,10 @@ test_write_wired_qeth_dhcp (void)
NMConnection *reread;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *uuid;
- GPtrArray *subchans;
+ char **subchans;
gboolean success;
GError *error = NULL;
char *testfile = NULL;
@@ -11503,7 +10477,7 @@ test_write_wired_qeth_dhcp (void)
char *route6file = NULL;
gboolean ignore_error = FALSE;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -11522,15 +10496,12 @@ test_write_wired_qeth_dhcp (void)
s_wired = (NMSettingWired *) nm_setting_wired_new ();
nm_connection_add_setting (connection, NM_SETTING (s_wired));
- subchans = g_ptr_array_sized_new (3);
- g_ptr_array_add (subchans, "0.0.600");
- g_ptr_array_add (subchans, "0.0.601");
- g_ptr_array_add (subchans, "0.0.602");
+ subchans = g_strsplit ("0.0.600,0.0.601,0.0.602", ",", -1);
g_object_set (s_wired,
NM_SETTING_WIRED_S390_SUBCHANNELS, subchans,
NM_SETTING_WIRED_S390_NETTYPE, "qeth",
NULL);
- g_ptr_array_free (subchans, TRUE);
+ g_strfreev (subchans);
nm_setting_wired_add_s390_option (s_wired, "portname", "FOOBAR");
nm_setting_wired_add_s390_option (s_wired, "portno", "1");
@@ -11538,20 +10509,20 @@ test_write_wired_qeth_dhcp (void)
nm_setting_wired_add_s390_option (s_wired, "protocol", "blahbalh");
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) 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_AUTO,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
NULL);
/* IP6 setting */
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) 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_IGNORE,
- NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+ NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
NULL);
/* Verify */
@@ -11572,13 +10543,12 @@ test_write_wired_qeth_dhcp (void)
"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);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -11615,10 +10585,10 @@ test_write_wired_ctc_dhcp (void)
NMConnection *reread;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *uuid;
- GPtrArray *subchans;
+ char **subchans;
gboolean success;
GError *error = NULL;
char *testfile = NULL;
@@ -11630,7 +10600,7 @@ test_write_wired_ctc_dhcp (void)
shvarFile *ifcfg;
char *tmp;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
g_assert (connection);
/* Connection setting */
@@ -11651,30 +10621,28 @@ test_write_wired_ctc_dhcp (void)
g_assert (s_wired);
nm_connection_add_setting (connection, NM_SETTING (s_wired));
- subchans = g_ptr_array_sized_new (2);
- g_ptr_array_add (subchans, "0.0.600");
- g_ptr_array_add (subchans, "0.0.601");
+ subchans = g_strsplit ("0.0.600,0.0.601", ",", -1);
g_object_set (s_wired,
NM_SETTING_WIRED_S390_SUBCHANNELS, subchans,
NM_SETTING_WIRED_S390_NETTYPE, "ctc",
NULL);
- g_ptr_array_free (subchans, TRUE);
+ g_strfreev (subchans);
nm_setting_wired_add_s390_option (s_wired, "ctcprot", "0");
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new ();
g_assert (s_ip4);
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);
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
/* IP6 setting */
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new ();
g_assert (s_ip6);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
- NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
- NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+ NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
NULL);
/* Verify */
@@ -11709,13 +10677,12 @@ test_write_wired_ctc_dhcp (void)
svCloseFile (ifcfg);
/* reread will be normalized, so we must normalize connection too. */
- nm_utils_normalize_connection (connection, TRUE);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -11751,8 +10718,8 @@ test_write_permissions (void)
NMConnection *reread;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *uuid;
gboolean success;
GError *error = NULL;
@@ -11763,7 +10730,7 @@ test_write_permissions (void)
char *route6file = NULL;
gboolean ignore_error = FALSE;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -11787,20 +10754,20 @@ test_write_permissions (void)
nm_connection_add_setting (connection, NM_SETTING (s_wired));
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) 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_AUTO,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
NULL);
/* IP6 setting */
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) 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_IGNORE,
- NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+ NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
NULL);
/* Verify */
@@ -11821,13 +10788,12 @@ test_write_permissions (void)
"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);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -11865,11 +10831,11 @@ test_write_wifi_wep_agent_keys (void)
NMSettingConnection *s_con;
NMSettingWireless *s_wifi;
NMSettingWirelessSecurity *s_wsec;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *uuid;
const char *str_ssid = "foobarbaz";
- GByteArray *ssid;
+ GBytes *ssid;
gboolean success;
GError *error = NULL;
char *testfile = NULL;
@@ -11879,7 +10845,7 @@ test_write_wifi_wep_agent_keys (void)
char *route6file = NULL;
gboolean ignore_error = FALSE;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
g_assert (connection != NULL);
/* Connection setting */
@@ -11896,19 +10862,19 @@ test_write_wifi_wep_agent_keys (void)
g_free (uuid);
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new ();
g_assert (s_ip4);
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);
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
/* IP6 setting */
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new ();
g_assert (s_ip6);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
- NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
- NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+ NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
NULL);
/* Wifi setting */
@@ -11916,13 +10882,12 @@ test_write_wifi_wep_agent_keys (void)
g_assert (s_wifi);
nm_connection_add_setting (connection, NM_SETTING (s_wifi));
- ssid = g_byte_array_sized_new (strlen (str_ssid));
- g_byte_array_append (ssid, (guint8 *) str_ssid, strlen (str_ssid));
+ ssid = g_bytes_new (str_ssid, strlen (str_ssid));
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
NM_SETTING_WIRELESS_MODE, "infrastructure",
NULL);
- g_byte_array_free (ssid, TRUE);
+ g_bytes_unref (ssid);
/* Wifi security setting */
s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
@@ -11951,13 +10916,12 @@ test_write_wifi_wep_agent_keys (void)
g_assert (testfile != NULL);
/* reread will be normalized, so we must normalize connection too. */
- nm_utils_normalize_connection (connection, TRUE);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_WIRELESS,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -12005,15 +10969,15 @@ test_write_wired_pppoe (void)
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
- NMSettingIP4Config *s_ip4;
- NMSettingPPPOE *s_pppoe;
- NMSettingPPP *s_ppp;
+ NMSettingIPConfig *s_ip4;
+ NMSettingPppoe *s_pppoe;
+ NMSettingPpp *s_ppp;
char *uuid;
gboolean success;
GError *error = NULL;
char *testfile = NULL;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -12033,15 +10997,15 @@ test_write_wired_pppoe (void)
nm_connection_add_setting (connection, NM_SETTING (s_wired));
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) 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_AUTO,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
NULL);
/* PPPoE setting */
- s_pppoe = (NMSettingPPPOE *) nm_setting_pppoe_new ();
+ s_pppoe = (NMSettingPppoe *) nm_setting_pppoe_new ();
nm_connection_add_setting (connection, NM_SETTING (s_pppoe));
g_object_set (G_OBJECT (s_pppoe),
@@ -12051,7 +11015,7 @@ test_write_wired_pppoe (void)
NULL);
/* PPP setting */
- s_ppp = (NMSettingPPP *) nm_setting_ppp_new ();
+ s_ppp = (NMSettingPpp *) nm_setting_ppp_new ();
nm_connection_add_setting (connection, NM_SETTING (s_ppp));
ASSERT (nm_connection_verify (connection, &error) == TRUE,
@@ -12074,14 +11038,14 @@ test_write_vpn (void)
{
NMConnection *connection;
NMSettingConnection *s_con;
- NMSettingIP4Config *s_ip4;
- NMSettingVPN *s_vpn;
+ NMSettingIPConfig *s_ip4;
+ NMSettingVpn *s_vpn;
char *uuid;
gboolean success;
GError *error = NULL;
char *testfile = NULL;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -12097,7 +11061,7 @@ test_write_vpn (void)
g_free (uuid);
/* VPN setting */
- s_vpn = (NMSettingVPN *) nm_setting_vpn_new ();
+ s_vpn = (NMSettingVpn *) nm_setting_vpn_new ();
nm_connection_add_setting (connection, NM_SETTING (s_vpn));
g_object_set (s_vpn,
@@ -12109,11 +11073,11 @@ test_write_vpn (void)
nm_setting_vpn_add_secret (s_vpn, "password", "sup3rs3cr3t");
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) 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_AUTO,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
NULL);
ASSERT (nm_connection_verify (connection, &error) == TRUE,
@@ -12136,17 +11100,17 @@ test_write_mobile_broadband (gboolean gsm)
{
NMConnection *connection;
NMSettingConnection *s_con;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
NMSettingGsm *s_gsm;
NMSettingCdma *s_cdma;
- NMSettingPPP *s_ppp;
+ NMSettingPpp *s_ppp;
NMSettingSerial *s_serial;
char *uuid;
gboolean success;
GError *error = NULL;
char *testfile = NULL;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -12182,20 +11146,20 @@ test_write_mobile_broadband (gboolean gsm)
g_object_set (s_serial,
NM_SETTING_SERIAL_BAUD, 115200,
NM_SETTING_SERIAL_BITS, 8,
- NM_SETTING_SERIAL_PARITY, 'n',
+ NM_SETTING_SERIAL_PARITY, NM_SETTING_SERIAL_PARITY_NONE,
NM_SETTING_SERIAL_STOPBITS, 1,
NULL);
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) 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_AUTO,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
NULL);
/* PPP setting */
- s_ppp = (NMSettingPPP *) nm_setting_ppp_new ();
+ s_ppp = (NMSettingPpp *) nm_setting_ppp_new ();
nm_connection_add_setting (connection, NM_SETTING (s_ppp));
ASSERT (nm_connection_verify (connection, &error) == TRUE,
@@ -12220,7 +11184,7 @@ test_read_bridge_main (void)
{
NMConnection *connection;
NMSettingBridge *s_bridge;
- const GByteArray *array;
+ const char *mac;
char expected_mac_address[ETH_ALEN] = { 0x00, 0x16, 0x41, 0x11, 0x22, 0x33 };
char *unmanaged = NULL;
char *keyfile = NULL;
@@ -12232,7 +11196,6 @@ test_read_bridge_main (void)
connection = connection_from_file (TEST_IFCFG_BRIDGE_MAIN,
NULL,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -12243,22 +11206,23 @@ test_read_bridge_main (void)
g_assert (nm_connection_verify (connection, &error));
g_assert_no_error (error);
+ g_assert_cmpstr (nm_connection_get_interface_name (connection), ==, "br0");
+
/* ===== Bridging SETTING ===== */
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_forward_delay (s_bridge), ==, 0);
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);
+ mac = nm_setting_bridge_get_mac_address (s_bridge);
+ g_assert (mac);
+ g_assert (nm_utils_hwaddr_matches (mac, -1, expected_mac_address, ETH_ALEN));
g_free (unmanaged);
g_free (keyfile);
@@ -12274,15 +11238,11 @@ test_write_bridge_main (void)
NMConnection *reread;
NMSettingConnection *s_con;
NMSettingBridge *s_bridge;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *uuid;
- const guint32 ip1 = htonl (0x01010103);
- 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;
+ NMIPAddress *addr;
+ static const char *mac = "31:33:33:37:be:cd";
gboolean success;
GError *error = NULL;
char *testfile = NULL;
@@ -12292,7 +11252,7 @@ test_write_bridge_main (void)
char *route6file = NULL;
gboolean ignore_error = FALSE;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
g_assert (connection);
/* Connection setting */
@@ -12305,6 +11265,7 @@ test_write_bridge_main (void)
NM_SETTING_CONNECTION_ID, "Test Write Bridge Main",
NM_SETTING_CONNECTION_UUID, uuid,
NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
+ NM_SETTING_CONNECTION_INTERFACE_NAME, "br0",
NM_SETTING_CONNECTION_TYPE, NM_SETTING_BRIDGE_SETTING_NAME,
NULL);
g_free (uuid);
@@ -12314,42 +11275,36 @@ 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,
+ NM_SETTING_BRIDGE_MAC_ADDRESS, mac,
NULL);
- g_byte_array_free (mac_array, TRUE);
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new ();
g_assert (s_ip4);
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,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
+ NM_SETTING_IP_CONFIG_GATEWAY, "1.1.1.1",
+ NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
NULL);
- addr = nm_ip4_address_new ();
- nm_ip4_address_set_address (addr, ip1);
- nm_ip4_address_set_prefix (addr, prefix);
- nm_ip4_address_set_gateway (addr, gw);
- nm_setting_ip4_config_add_address (s_ip4, addr);
- nm_ip4_address_unref (addr);
+ addr = nm_ip_address_new (AF_INET, "1.1.1.3", 24, &error);
+ g_assert_no_error (error);
+ nm_setting_ip_config_add_address (s_ip4, addr);
+ nm_ip_address_unref (addr);
/* IP6 setting */
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new ();
g_assert (s_ip6);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
- NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
NULL);
- g_assert (nm_connection_verify (connection, &error));
- g_assert_no_error (error);
+ nmtst_assert_connection_verifies_without_normalization (connection);
/* Save the ifcfg */
success = writer_new_connection (connection,
@@ -12360,13 +11315,12 @@ test_write_bridge_main (void)
g_assert_cmpstr (testfile, !=, NULL);
/* reread will be normalized, so we must normalize connection too. */
- nm_utils_normalize_connection (connection, TRUE);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_BRIDGE,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -12408,7 +11362,6 @@ test_read_bridge_component (void)
connection = connection_from_file (TEST_IFCFG_BRIDGE_COMPONENT,
NULL,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -12447,8 +11400,7 @@ test_write_bridge_component (void)
NMSettingConnection *s_con;
NMSettingWired *s_wired;
NMSetting *s_port;
- static unsigned char tmpmac[] = { 0x31, 0x33, 0x33, 0x37, 0xbe, 0xcd };
- GByteArray *mac;
+ static const char *mac = "31:33:33:37:be:cd";
guint32 mtu = 1492;
char *uuid;
gboolean success;
@@ -12460,7 +11412,7 @@ test_write_bridge_component (void)
char *route6file = NULL;
gboolean ignore_error = FALSE;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
g_assert (connection);
/* Connection setting */
@@ -12484,14 +11436,10 @@ test_write_bridge_component (void)
g_assert (s_wired);
nm_connection_add_setting (connection, NM_SETTING (s_wired));
- mac = g_byte_array_sized_new (sizeof (tmpmac));
- g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac));
-
g_object_set (s_wired,
NM_SETTING_WIRED_MAC_ADDRESS, mac,
NM_SETTING_WIRED_MTU, mtu,
NULL);
- g_byte_array_free (mac, TRUE);
/* Bridge port */
s_port = nm_setting_bridge_port_new ();
@@ -12515,13 +11463,12 @@ test_write_bridge_component (void)
g_assert (testfile);
/* reread will be normalized, so we must normalize connection too. */
- nm_utils_normalize_connection (connection, TRUE);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -12564,7 +11511,6 @@ test_read_bridge_missing_stp (void)
connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-bridge-missing-stp",
NULL,
TYPE_BRIDGE,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -12575,11 +11521,12 @@ test_read_bridge_missing_stp (void)
g_assert (nm_connection_verify (connection, &error));
g_assert_no_error (error);
+ g_assert_cmpstr (nm_connection_get_interface_name (connection), ==, "br0");
+
/* ===== Bridging SETTING ===== */
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 (nm_setting_bridge_get_stp (s_bridge) == FALSE);
g_free (unmanaged);
@@ -12607,7 +11554,6 @@ test_read_vlan_interface (void)
connection = connection_from_file (TEST_IFCFG_VLAN_INTERFACE,
NULL,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -12622,10 +11568,11 @@ test_read_vlan_interface (void)
g_free (routefile);
g_free (route6file);
+ g_assert_cmpstr (nm_connection_get_interface_name (connection), ==, "vlan43");
+
s_vlan = nm_connection_get_setting_vlan (connection);
g_assert (s_vlan);
- g_assert_cmpstr (nm_setting_vlan_get_interface_name (s_vlan), ==, "vlan43");
g_assert_cmpstr (nm_setting_vlan_get_parent (s_vlan), ==, "eth9");
g_assert_cmpint (nm_setting_vlan_get_id (s_vlan), ==, 43);
g_assert_cmpint (nm_setting_vlan_get_flags (s_vlan), ==,
@@ -12677,7 +11624,6 @@ test_read_vlan_only_vlan_id (void)
connection = connection_from_file (TEST_IFCFG_VLAN_ONLY_VLANID,
NULL,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -12692,10 +11638,11 @@ test_read_vlan_only_vlan_id (void)
g_free (routefile);
g_free (route6file);
+ g_assert (nm_connection_get_interface_name (connection) == NULL);
+
s_vlan = nm_connection_get_setting_vlan (connection);
g_assert (s_vlan);
- g_assert (nm_setting_vlan_get_interface_name (s_vlan) == NULL);
g_assert_cmpstr (nm_setting_vlan_get_parent (s_vlan), ==, "eth9");
g_assert_cmpint (nm_setting_vlan_get_id (s_vlan), ==, 43);
@@ -12719,7 +11666,6 @@ test_read_vlan_only_device (void)
connection = connection_from_file (TEST_IFCFG_VLAN_ONLY_DEVICE,
NULL,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -12734,10 +11680,11 @@ test_read_vlan_only_device (void)
g_free (routefile);
g_free (route6file);
+ g_assert_cmpstr (nm_connection_get_interface_name (connection), ==, "eth0.9");
+
s_vlan = nm_connection_get_setting_vlan (connection);
g_assert (s_vlan);
- g_assert_cmpstr (nm_setting_vlan_get_interface_name (s_vlan), ==, "eth0.9");
g_assert_cmpstr (nm_setting_vlan_get_parent (s_vlan), ==, "eth0");
g_assert_cmpint (nm_setting_vlan_get_id (s_vlan), ==, 9);
@@ -12752,16 +11699,17 @@ test_read_vlan_physdev (void)
NMSettingVlan *s_vlan;
connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-vlan-physdev",
- NULL, TYPE_ETHERNET, NULL, NULL,
+ NULL, TYPE_ETHERNET, NULL,
NULL, NULL, NULL, &error, NULL);
g_assert_no_error (error);
g_assert (connection);
g_assert (nm_connection_verify (connection, &error));
+ g_assert_cmpstr (nm_connection_get_interface_name (connection), ==, "vlan0.3");
+
s_vlan = nm_connection_get_setting_vlan (connection);
g_assert (s_vlan);
- g_assert_cmpstr (nm_setting_vlan_get_interface_name (s_vlan), ==, "vlan0.3");
g_assert_cmpstr (nm_setting_vlan_get_parent (s_vlan), ==, "eth0");
g_assert_cmpint (nm_setting_vlan_get_id (s_vlan), ==, 3);
@@ -12784,7 +11732,6 @@ test_write_vlan (void)
connection = connection_from_file (TEST_IFCFG_VLAN_INTERFACE,
NULL,
TYPE_VLAN,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -12824,7 +11771,6 @@ test_write_vlan_only_vlanid (void)
connection = connection_from_file (TEST_IFCFG_VLAN_ONLY_VLANID,
NULL,
TYPE_VLAN,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -12850,13 +11796,12 @@ test_write_vlan_only_vlanid (void)
g_assert (success);
/* reread will be normalized, so we must normalize connection too. */
- nm_utils_normalize_connection (connection, TRUE);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file (written,
NULL,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -12891,8 +11836,8 @@ test_write_ethernet_missing_ipv6 (void)
NMConnection *reread;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *uuid;
gboolean success;
GError *error = NULL;
@@ -12903,7 +11848,7 @@ test_write_ethernet_missing_ipv6 (void)
char *route6file = NULL;
gboolean ignore_error = FALSE;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
g_assert (connection);
/* Connection setting */
@@ -12926,14 +11871,14 @@ test_write_ethernet_missing_ipv6 (void)
nm_connection_add_setting (connection, NM_SETTING (s_wired));
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new ();
g_assert (s_ip4);
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,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID, "random-client-id-00:22:33",
- NM_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES, TRUE,
- NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS, TRUE,
+ NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES, TRUE,
+ NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS, TRUE,
NULL);
/* IP6 setting */
@@ -12959,13 +11904,12 @@ test_write_ethernet_missing_ipv6 (void)
"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);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -12985,12 +11929,12 @@ test_write_ethernet_missing_ipv6 (void)
* the comparison can succeed. Missing IPv6 setting should have been
* written out (and re-read) as Automatic IPv6.
*/
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new ();
g_assert (s_ip6);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
- NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO,
- NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO,
+ NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
NULL);
ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
@@ -13005,6 +11949,19 @@ test_write_ethernet_missing_ipv6 (void)
g_object_unref (reread);
}
+static void
+test_read_ibft_ignored (void)
+{
+ NMConnection *connection;
+ GError *error = NULL;
+
+ connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-ibft",
+ NULL, TYPE_ETHERNET,
+ NULL, NULL, NULL, NULL, &error, NULL);
+ g_assert_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION);
+ g_assert (connection == NULL);
+}
+
#define TEST_IFCFG_BOND_MAIN TEST_IFCFG_DIR"/network-scripts/ifcfg-test-bond-main"
static void
@@ -13022,7 +11979,6 @@ test_read_bond_main (void)
connection = connection_from_file (TEST_IFCFG_BOND_MAIN,
NULL,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -13035,6 +11991,10 @@ test_read_bond_main (void)
ASSERT (nm_connection_verify (connection, &error),
"bond-main-read", "failed to verify %s: %s", TEST_IFCFG_BOND_MAIN, error->message);
+ ASSERT (g_strcmp0 (nm_connection_get_interface_name (connection), "bond0") == 0,
+ "bond-main", "failed to verify %s: DEVICE=%s does not match bond0",
+ TEST_IFCFG_BOND_MAIN, nm_connection_get_interface_name (connection));
+
/* ===== Bonding SETTING ===== */
s_bond = nm_connection_get_setting_bond (connection);
@@ -13043,10 +12003,6 @@ test_read_bond_main (void)
TEST_IFCFG_BOND_MAIN,
NM_SETTING_BOND_SETTING_NAME);
- ASSERT (g_strcmp0 (nm_setting_bond_get_interface_name (s_bond), "bond0") == 0,
- "bond-main", "failed to verify %s: DEVICE=%s does not match bond0",
- TEST_IFCFG_BOND_MAIN, nm_setting_bond_get_interface_name (s_bond));
-
ASSERT (g_strcmp0 (nm_setting_bond_get_option_by_name (s_bond, NM_SETTING_BOND_OPTION_MIIMON), "100") == 0,
"bond-main", "failed to verify %s: miimon=%s does not match 100",
TEST_IFCFG_BOND_MAIN, nm_setting_bond_get_option_by_name (s_bond, NM_SETTING_BOND_OPTION_MIIMON));
@@ -13065,14 +12021,11 @@ test_write_bond_main (void)
NMConnection *reread;
NMSettingConnection *s_con;
NMSettingBond *s_bond;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
NMSettingWired *s_wired;
char *uuid;
- const guint32 ip1 = htonl (0x01010103);
- const guint32 gw = htonl (0x01010101);
- const guint32 prefix = 24;
- NMIP4Address *addr;
+ NMIPAddress *addr;
gboolean success;
GError *error = NULL;
char *testfile = NULL;
@@ -13082,7 +12035,7 @@ test_write_bond_main (void)
char *route6file = NULL;
gboolean ignore_error = FALSE;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -13093,6 +12046,7 @@ test_write_bond_main (void)
NM_SETTING_CONNECTION_ID, "Test Write Bond Main",
NM_SETTING_CONNECTION_UUID, uuid,
NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
+ NM_SETTING_CONNECTION_INTERFACE_NAME, "bond0",
NM_SETTING_CONNECTION_TYPE, NM_SETTING_BOND_SETTING_NAME,
NULL);
g_free (uuid);
@@ -13105,37 +12059,30 @@ test_write_bond_main (void)
s_bond = (NMSettingBond *) nm_setting_bond_new ();
nm_connection_add_setting (connection, NM_SETTING (s_bond));
- g_object_set (s_bond,
- NM_SETTING_BOND_INTERFACE_NAME, "bond0",
- NULL);
-
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) 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,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
+ NM_SETTING_IP_CONFIG_GATEWAY, "1.1.1.1",
+ NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
NULL);
- addr = nm_ip4_address_new ();
- nm_ip4_address_set_address (addr, ip1);
- nm_ip4_address_set_prefix (addr, prefix);
- nm_ip4_address_set_gateway (addr, gw);
- nm_setting_ip4_config_add_address (s_ip4, addr);
- nm_ip4_address_unref (addr);
+ addr = nm_ip_address_new (AF_INET, "1.1.1.3", 24, &error);
+ g_assert_no_error (error);
+ nm_setting_ip_config_add_address (s_ip4, addr);
+ nm_ip_address_unref (addr);
/* IP6 setting */
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) 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_IGNORE,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
NULL);
- ASSERT (nm_connection_verify (connection, &error) == TRUE,
- "bond-main-write", "failed to verify connection: %s",
- (error && error->message) ? error->message : "(unknown)");
+ nmtst_assert_connection_verifies_without_normalization (connection);
/* Save the ifcfg */
success = writer_new_connection (connection,
@@ -13150,13 +12097,12 @@ test_write_bond_main (void)
"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);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_BOND,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -13197,12 +12143,9 @@ 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,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -13244,8 +12187,7 @@ test_write_bond_slave (void)
NMConnection *reread;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
- static unsigned char tmpmac[] = { 0x31, 0x33, 0x33, 0x37, 0xbe, 0xcd };
- GByteArray *mac;
+ static const char *mac = "31:33:33:37:be:cd";
guint32 mtu = 1492;
char *uuid;
gboolean success;
@@ -13257,7 +12199,7 @@ test_write_bond_slave (void)
char *route6file = NULL;
gboolean ignore_error = FALSE;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -13278,14 +12220,10 @@ test_write_bond_slave (void)
s_wired = (NMSettingWired *) nm_setting_wired_new ();
nm_connection_add_setting (connection, NM_SETTING (s_wired));
- mac = g_byte_array_sized_new (sizeof (tmpmac));
- g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac));
-
g_object_set (s_wired,
NM_SETTING_WIRED_MAC_ADDRESS, mac,
NM_SETTING_WIRED_MTU, mtu,
NULL);
- g_byte_array_free (mac, TRUE);
ASSERT (nm_connection_verify (connection, &error) == TRUE,
"bond-slave-write", "failed to verify connection: %s",
@@ -13304,13 +12242,12 @@ test_write_bond_slave (void)
"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);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_ETHERNET,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -13353,14 +12290,13 @@ test_read_infiniband (void)
char *route6file = NULL;
gboolean ignore_error = FALSE;
GError *error = NULL;
- const GByteArray *array;
+ const char *mac;
char expected_mac_address[INFINIBAND_ALEN] = { 0x80, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x00, 0x11, 0x22 };
const char *transport_mode;
connection = connection_from_file (TEST_IFCFG_INFINIBAND,
NULL,
TYPE_INFINIBAND,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -13385,18 +12321,13 @@ test_read_infiniband (void)
NM_SETTING_INFINIBAND_SETTING_NAME);
/* MAC address */
- array = nm_setting_infiniband_get_mac_address (s_infiniband);
- ASSERT (array != NULL,
+ mac = nm_setting_infiniband_get_mac_address (s_infiniband);
+ ASSERT (mac != NULL,
"infiniband-verify-infiniband", "failed to verify %s: missing %s / %s key",
TEST_IFCFG_INFINIBAND,
NM_SETTING_INFINIBAND_SETTING_NAME,
NM_SETTING_INFINIBAND_MAC_ADDRESS);
- ASSERT (array->len == INFINIBAND_ALEN,
- "infiniband-verify-infiniband", "failed to verify %s: unexpected %s / %s key value length",
- TEST_IFCFG_INFINIBAND,
- NM_SETTING_INFINIBAND_SETTING_NAME,
- NM_SETTING_INFINIBAND_MAC_ADDRESS);
- ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0,
+ ASSERT (nm_utils_hwaddr_matches (mac, -1, expected_mac_address, sizeof (expected_mac_address)),
"infiniband-verify-infiniband", "failed to verify %s: unexpected %s / %s key value",
TEST_IFCFG_INFINIBAND,
NM_SETTING_INFINIBAND_SETTING_NAME,
@@ -13429,16 +12360,12 @@ test_write_infiniband (void)
NMConnection *reread;
NMSettingConnection *s_con;
NMSettingInfiniband *s_infiniband;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
- unsigned char tmpmac[INFINIBAND_ALEN] = { 0x80, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x00, 0x11, 0x22 };
- GByteArray *mac;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
+ const char *mac = "80:00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:00:11:22";
guint32 mtu = 65520;
char *uuid;
- const guint32 ip1 = htonl (0x01010103);
- const guint32 gw = htonl (0x01010101);
- const guint32 prefix = 24;
- NMIP4Address *addr;
+ NMIPAddress *addr;
gboolean success;
GError *error = NULL;
char *testfile = NULL;
@@ -13448,7 +12375,7 @@ test_write_infiniband (void)
char *route6file = NULL;
gboolean ignore_error = FALSE;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -13467,38 +12394,33 @@ test_write_infiniband (void)
s_infiniband = (NMSettingInfiniband *) nm_setting_infiniband_new ();
nm_connection_add_setting (connection, NM_SETTING (s_infiniband));
- mac = g_byte_array_sized_new (sizeof (tmpmac));
- g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac));
-
g_object_set (s_infiniband,
NM_SETTING_INFINIBAND_MAC_ADDRESS, mac,
NM_SETTING_INFINIBAND_MTU, mtu,
NM_SETTING_INFINIBAND_TRANSPORT_MODE, "connected",
NULL);
- g_byte_array_free (mac, TRUE);
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) 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,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
+ NM_SETTING_IP_CONFIG_GATEWAY, "1.1.1.1",
+ NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
NULL);
- addr = nm_ip4_address_new ();
- nm_ip4_address_set_address (addr, ip1);
- nm_ip4_address_set_prefix (addr, prefix);
- nm_ip4_address_set_gateway (addr, gw);
- nm_setting_ip4_config_add_address (s_ip4, addr);
- nm_ip4_address_unref (addr);
+ addr = nm_ip_address_new (AF_INET, "1.1.1.3", 24, &error);
+ g_assert_no_error (error);
+ nm_setting_ip_config_add_address (s_ip4, addr);
+ nm_ip_address_unref (addr);
/* IP6 setting */
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) 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_IGNORE,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
NULL);
ASSERT (nm_connection_verify (connection, &error) == TRUE,
@@ -13518,13 +12440,12 @@ test_write_infiniband (void)
"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);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
TYPE_INFINIBAND,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -13565,12 +12486,9 @@ 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,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -13612,11 +12530,7 @@ test_write_bond_slave_ib (void)
NMConnection *reread;
NMSettingConnection *s_con;
NMSettingInfiniband *s_infiniband;
- static unsigned char tmpmac[] = {
- 0x80, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88,
- 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x00, 0x11, 0x22
- };
- GByteArray *mac;
+ static const char *mac = "80:00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:00:11:22";
char *uuid;
gboolean success;
GError *error = NULL;
@@ -13627,7 +12541,7 @@ test_write_bond_slave_ib (void)
char *route6file = NULL;
gboolean ignore_error = FALSE;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -13648,15 +12562,11 @@ test_write_bond_slave_ib (void)
s_infiniband = (NMSettingInfiniband *) nm_setting_infiniband_new ();
nm_connection_add_setting (connection, NM_SETTING (s_infiniband));
- mac = g_byte_array_sized_new (sizeof (tmpmac));
- g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac));
-
g_object_set (s_infiniband,
NM_SETTING_INFINIBAND_MAC_ADDRESS, mac,
NM_SETTING_INFINIBAND_MTU, 2044,
NM_SETTING_INFINIBAND_TRANSPORT_MODE, "datagram",
NULL);
- g_byte_array_free (mac, TRUE);
ASSERT (nm_connection_verify (connection, &error) == TRUE,
"bond-slave-write-ib", "failed to verify connection: %s",
@@ -13675,13 +12585,12 @@ test_write_bond_slave_ib (void)
"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);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file (testfile,
NULL,
NULL,
- NULL,
&unmanaged,
&keyfile,
&routefile,
@@ -13731,7 +12640,7 @@ test_read_dcb_basic (void)
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);
+ NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL);
g_assert_no_error (error);
g_assert (connection);
success = nm_connection_verify (connection, &error);
@@ -13787,8 +12696,8 @@ test_write_dcb_basic (void)
NMSettingConnection *s_con;
NMSettingWired *s_wired;
NMSettingDcb *s_dcb;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
gboolean success, ignore_error;
guint i;
char *uuid, *testfile;
@@ -13799,7 +12708,7 @@ test_write_dcb_basic (void)
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 ();
+ connection = nm_simple_connection_new ();
s_con = (NMSettingConnection *) nm_setting_connection_new ();
nm_connection_add_setting (connection, NM_SETTING (s_con));
@@ -13817,12 +12726,12 @@ test_write_dcb_basic (void)
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);
+ s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new ();
+ g_object_set (G_OBJECT (s_ip4), NM_SETTING_IP_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);
+ s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new ();
+ g_object_set (G_OBJECT (s_ip6), NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO, NULL);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
/* DCB */
@@ -13864,7 +12773,7 @@ test_write_dcb_basic (void)
reread = connection_from_file (testfile,
NULL,
TYPE_ETHERNET,
- NULL, NULL, NULL,
+ NULL, NULL,
NULL, NULL,
&error,
&ignore_error);
@@ -13889,7 +12798,7 @@ test_read_dcb_default_app_priorities (void)
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);
+ NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL);
g_assert_no_error (error);
g_assert (connection);
success = nm_connection_verify (connection, &error);
@@ -13920,10 +12829,10 @@ test_read_dcb_bad_booleans (void)
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);
+ NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL);
g_test_assert_expected_messages ();
- g_assert_error (error, IFCFG_PLUGIN_ERROR, 0);
+ g_assert_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION);
g_assert (strstr (error->message, "invalid boolean digit"));
g_assert (connection == NULL);
}
@@ -13937,10 +12846,10 @@ test_read_dcb_short_booleans (void)
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);
+ NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL);
g_test_assert_expected_messages ();
- g_assert_error (error, IFCFG_PLUGIN_ERROR, 0);
+ g_assert_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION);
g_assert (strstr (error->message, "boolean array must be 8 characters"));
g_assert (connection == NULL);
}
@@ -13954,10 +12863,10 @@ test_read_dcb_bad_uints (void)
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);
+ NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL);
g_test_assert_expected_messages ();
- g_assert_error (error, IFCFG_PLUGIN_ERROR, 0);
+ g_assert_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION);
g_assert (strstr (error->message, "invalid uint digit"));
g_assert (connection == NULL);
}
@@ -13971,10 +12880,10 @@ test_read_dcb_short_uints (void)
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);
+ NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL);
g_test_assert_expected_messages ();
- g_assert_error (error, IFCFG_PLUGIN_ERROR, 0);
+ g_assert_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION);
g_assert (strstr (error->message, "uint array must be 8 characters"));
g_assert (connection == NULL);
}
@@ -13988,10 +12897,10 @@ test_read_dcb_bad_percent (void)
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);
+ NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL);
g_test_assert_expected_messages ();
- g_assert_error (error, IFCFG_PLUGIN_ERROR, 0);
+ g_assert_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION);
g_assert (strstr (error->message, "invalid percent element"));
g_assert (connection == NULL);
}
@@ -14005,10 +12914,10 @@ test_read_dcb_short_percent (void)
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);
+ NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL);
g_test_assert_expected_messages ();
- g_assert_error (error, IFCFG_PLUGIN_ERROR, 0);
+ g_assert_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION);
g_assert (strstr (error->message, "percent array must be 8 elements"));
g_assert (connection == NULL);
}
@@ -14022,10 +12931,10 @@ test_read_dcb_pgpct_not_100 (void)
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);
+ NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL);
g_test_assert_expected_messages ();
- g_assert_error (error, IFCFG_PLUGIN_ERROR, 0);
+ g_assert_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION);
g_assert (strstr (error->message, "invalid percentage sum"));
g_assert (connection == NULL);
}
@@ -14041,7 +12950,7 @@ test_read_fcoe_mode (gconstpointer user_data)
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);
+ connection = connection_from_file (file, NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL);
g_free (file);
g_assert_no_error (error);
g_assert (connection);
@@ -14067,12 +12976,12 @@ test_write_fcoe_mode (gconstpointer user_data)
NMSettingConnection *s_con;
NMSettingWired *s_wired;
NMSettingDcb *s_dcb;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
gboolean success, ignore_error;
char *uuid, *testfile;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
s_con = (NMSettingConnection *) nm_setting_connection_new ();
nm_connection_add_setting (connection, NM_SETTING (s_con));
@@ -14090,12 +12999,12 @@ test_write_fcoe_mode (gconstpointer user_data)
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);
+ s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new ();
+ g_object_set (G_OBJECT (s_ip4), NM_SETTING_IP_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);
+ s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new ();
+ g_object_set (G_OBJECT (s_ip6), NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO, NULL);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
/* DCB */
@@ -14134,7 +13043,7 @@ test_write_fcoe_mode (gconstpointer user_data)
reread = connection_from_file (testfile,
NULL,
TYPE_ETHERNET,
- NULL, NULL, NULL,
+ NULL, NULL,
NULL, NULL,
&error,
&ignore_error);
@@ -14161,7 +13070,7 @@ test_read_team_master (void)
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);
+ NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL);
g_assert_no_error (error);
g_assert (connection);
@@ -14169,13 +13078,14 @@ test_read_team_master (void)
g_assert_no_error (error);
g_assert (success);
+ g_assert_cmpstr (nm_connection_get_interface_name (connection), ==, "team0");
+
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);
@@ -14188,6 +13098,8 @@ test_write_team_master (void)
NMSettingConnection *s_con;
NMSettingTeam *s_team;
NMSettingWired *s_wired;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *uuid, *testfile = NULL, *val;
gboolean success;
GError *error = NULL;
@@ -14195,7 +13107,7 @@ test_write_team_master (void)
const char *escaped_expected_config = "\"{ \\\"device\\\": \\\"team0\\\", \\\"link_watch\\\": { \\\"name\\\": \\\"ethtool\\\" } }\"";
shvarFile *f;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -14205,6 +13117,7 @@ test_write_team_master (void)
g_object_set (s_con,
NM_SETTING_CONNECTION_ID, "Test Write Team Master",
NM_SETTING_CONNECTION_UUID, uuid,
+ NM_SETTING_CONNECTION_INTERFACE_NAME, "team0",
NM_SETTING_CONNECTION_TYPE, NM_SETTING_TEAM_SETTING_NAME,
NULL);
g_free (uuid);
@@ -14214,7 +13127,6 @@ test_write_team_master (void)
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);
@@ -14222,9 +13134,25 @@ test_write_team_master (void)
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);
+ /* IP4 setting */
+ s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new ();
+ g_assert (s_ip4);
+ nm_connection_add_setting (connection, NM_SETTING (s_ip4));
+
+ g_object_set (s_ip4,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
+ NULL);
+
+ /* IP6 setting */
+ s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new ();
+ g_assert (s_ip6);
+ nm_connection_add_setting (connection, NM_SETTING (s_ip6));
+
+ g_object_set (s_ip6,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO,
+ NULL);
+
+ nmtst_assert_connection_verifies_without_normalization (connection);
/* Save the ifcfg */
success = writer_new_connection (connection,
@@ -14250,10 +13178,10 @@ test_write_team_master (void)
svCloseFile (f);
/* reread will be normalized, so we must normalize connection too. */
- nm_utils_normalize_connection (connection, TRUE);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
- reread = connection_from_file (testfile, NULL, TYPE_ETHERNET, NULL,
+ reread = connection_from_file (testfile, NULL, TYPE_ETHERNET,
NULL, NULL, NULL, NULL, &error, NULL);
unlink (testfile);
g_assert_no_error (error);
@@ -14281,7 +13209,7 @@ test_read_team_port (void)
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);
+ NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL);
g_assert_no_error (error);
g_assert (connection);
@@ -14315,7 +13243,7 @@ test_write_team_port (void)
const char *escaped_expected_config = "\"{ \\\"p4p1\\\": { \\\"prio\\\": -10, \\\"sticky\\\": true } }\"";
shvarFile *f;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -14373,10 +13301,10 @@ test_write_team_port (void)
svCloseFile (f);
/* reread will be normalized, so we must normalize connection too. */
- nm_utils_normalize_connection (connection, TRUE);
+ nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
- reread = connection_from_file (testfile, NULL, TYPE_ETHERNET, NULL,
+ reread = connection_from_file (testfile, NULL, TYPE_ETHERNET,
NULL, NULL, NULL, NULL, &error, NULL);
unlink (testfile);
g_assert_no_error (error);
@@ -14402,7 +13330,7 @@ test_read_team_port_empty_config (void)
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);
+ NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL);
g_assert_no_error (error);
g_assert (connection);
@@ -14415,8 +13343,11 @@ test_read_team_port_empty_config (void)
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);
+ /* Normalization adds a team-port setting */
+ g_assert (nm_connection_get_setting_team_port (connection));
+
+ /* empty/missing config */
+ g_assert (!nm_setting_team_port_get_config (nm_connection_get_setting_team_port (connection)));
g_object_unref (connection);
}
@@ -14468,13 +13399,13 @@ test_svUnescape_assert (const char *str)
}
static void
-test_svUnescape ()
+test_svUnescape (void)
{
int len, repeat, i, k;
- GRand *rand = g_rand_new ();
+ GRand *r = g_rand_new ();
guint32 seed = g_random_int ();
- g_rand_set_seed (rand, seed);
+ g_rand_set_seed (r, seed);
test_svUnescape_assert ("");
test_svUnescape_assert ("'");
@@ -14495,16 +13426,16 @@ test_svUnescape ()
/* fill the entire string with random. */
for (i = 0; i < len; i++)
- s[i] = g_rand_int (rand);
+ s[i] = g_rand_int (r);
/* randomly place escape characters into the string */
- k = g_rand_int (rand) % (len);
+ k = g_rand_int (r) % (len);
while (k-- > 0)
- s[g_rand_int (rand) % len] = '\\';
+ s[g_rand_int (r) % len] = '\\';
if (len > 1) {
/* quote the string. */
- k = g_rand_int (rand) % (10);
+ k = g_rand_int (r) % (10);
if (k < 4) {
char quote = k < 2 ? '"' : '\'';
@@ -14520,7 +13451,44 @@ test_svUnescape ()
g_free (s);
}
- g_rand_free (rand);
+ g_rand_free (r);
+}
+
+static void
+test_read_vlan_trailing_spaces (void)
+{
+ const char *testfile = TEST_IFCFG_DIR"/network-scripts/ifcfg-test-vlan-trailing-spaces";
+ NMConnection *connection;
+ gboolean success;
+ GError *error = NULL;
+ NMSettingVlan *s_vlan;
+ char *contents = NULL;
+
+ /* Ensure there is whitespace at the end of the VLAN interface name,
+ * to prevent the whitespace getting stripped off and committed mistakenly
+ * by something in the future.
+ */
+ success = g_file_get_contents (testfile, &contents, NULL, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+ g_assert (contents && contents[0]);
+ g_assert (strstr (contents, "DEVICE=\"vlan201\" \n"));
+ g_free (contents);
+
+ connection = connection_from_file (testfile, NULL, TYPE_ETHERNET, NULL,
+ NULL, NULL, NULL, &error, NULL);
+ g_assert_no_error (error);
+ g_assert (connection != NULL);
+
+ s_vlan = nm_connection_get_setting_vlan (connection);
+ g_assert (s_vlan);
+
+ g_assert_cmpstr (nm_connection_get_interface_name (connection), ==, "vlan201");
+ g_assert_cmpstr (nm_setting_vlan_get_parent (s_vlan), ==, "enccw0.0.fb00");
+ g_assert_cmpint (nm_setting_vlan_get_id (s_vlan), ==, 201);
+ g_assert_cmpint (nm_setting_vlan_get_flags (s_vlan), ==, 0);
+
+ g_object_unref (connection);
}
@@ -14548,11 +13516,13 @@ int main (int argc, char **argv)
nmtst_init_assert_logging (&argc, &argv);
g_test_add_func (TPATH "svUnescape", test_svUnescape);
+ g_test_add_func (TPATH "vlan-trailing-spaces", test_read_vlan_trailing_spaces);
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 "miscellaneous-variables", test_read_miscellaneous_variables);
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);
@@ -14560,18 +13530,18 @@ int main (int argc, char **argv)
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);
+ g_test_add_data_func (TPATH "static-ip6-only-gw/::ffff:255.255.255.255", "::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 ();
+ g_test_add_func (TPATH "global-gateway", test_read_wired_global_gateway);
+ g_test_add_func (TPATH "never-default", test_read_wired_never_default);
test_read_wired_defroute_no ();
test_read_wired_defroute_no_gatewaydev_yes ();
- test_read_wired_static_routes ();
+ g_test_add_func (TPATH "routes/read-static", test_read_wired_static_routes);
test_read_wired_static_routes_legacy ();
test_read_wired_ipv4_manual (TEST_IFCFG_WIRED_IPV4_MANUAL_1, "System test-wired-ipv4-manual-1");
test_read_wired_ipv4_manual (TEST_IFCFG_WIRED_IPV4_MANUAL_2, "System test-wired-ipv4-manual-2");
@@ -14617,6 +13587,9 @@ 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-band-a", test_read_wifi_band_a);
+ g_test_add_func (TPATH "wifi/read-band-a-channel-mismatch", test_read_wifi_band_a_channel_mismatch);
+ g_test_add_func (TPATH "wifi/read-band-bg-channel-mismatch", test_read_wifi_band_bg_channel_mismatch);
g_test_add_func (TPATH "wifi/read-hidden", test_read_wifi_hidden);
test_read_wired_qeth_static ();
test_read_wired_ctc_static ();
@@ -14697,6 +13670,7 @@ int main (int argc, char **argv)
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);
+ g_test_add_func (TPATH "wifi/write-band-a", test_write_wifi_band_a);
test_write_wired_qeth_dhcp ();
test_write_wired_ctc_dhcp ();
test_write_permissions ();
@@ -14707,14 +13681,9 @@ int main (int argc, char **argv)
test_write_ethernet_missing_ipv6 ();
/* 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", 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 "ibft/ignored", test_read_ibft_ignored);
+
+ /* Data Center Bridging (DCB) */
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);
diff --git a/src/settings/plugins/ifcfg-rh/utils.c b/src/settings/plugins/ifcfg-rh/utils.c
index 8318a65da..5b9e9d796 100644
--- a/src/settings/plugins/ifcfg-rh/utils.c
+++ b/src/settings/plugins/ifcfg-rh/utils.c
@@ -18,9 +18,14 @@
* (C) Copyright 2008 - 2012 Red Hat, Inc.
*/
+#include "config.h"
+
#include <glib.h>
#include <stdlib.h>
#include <string.h>
+
+#include "nm-core-internal.h"
+
#include "utils.h"
#include "shvar.h"
@@ -37,7 +42,7 @@
char *
utils_single_quote_string (const char *str)
{
- static const char const drop_chars[] = "\r\n"; /* drop CR and LF */
+ static const char *drop_chars = "\r\n"; /* drop CR and LF */
static const char escape_char = '\\'; /* escape char is backslash */
static const char quote_char = '\''; /* quote char is single quote */
size_t i, slen, j = 0;
diff --git a/src/settings/plugins/ifcfg-rh/writer.c b/src/settings/plugins/ifcfg-rh/writer.c
index 60af599bf..f4ffffd6a 100644
--- a/src/settings/plugins/ifcfg-rh/writer.c
+++ b/src/settings/plugins/ifcfg-rh/writer.c
@@ -15,9 +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) 2009 - 2013 Red Hat, Inc.
+ * Copyright 2009 - 2014 Red Hat, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
@@ -27,7 +29,6 @@
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
-#include <netinet/ether.h>
#include <nm-setting-connection.h>
#include <nm-setting-wired.h>
@@ -39,7 +40,7 @@
#include <nm-setting-vlan.h>
#include <nm-setting-team.h>
#include <nm-setting-team-port.h>
-#include <nm-utils-private.h>
+#include "nm-core-internal.h"
#include <nm-utils.h>
#include "nm-logging.h"
@@ -52,13 +53,6 @@
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,
const char *key,
NMSettingSecretFlags flags)
@@ -156,7 +150,7 @@ write_secret_file (const char *path,
errno = 0;
fd = mkstemp (tmppath);
if (fd < 0) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"Could not create temporary file for '%s': %d",
path, errno);
goto out;
@@ -167,7 +161,7 @@ write_secret_file (const char *path,
if (fchmod (fd, S_IRUSR | S_IWUSR)) {
close (fd);
unlink (tmppath);
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"Could not set permissions for temporary file '%s': %d",
path, errno);
goto out;
@@ -178,7 +172,7 @@ write_secret_file (const char *path,
if (written != len) {
close (fd);
unlink (tmppath);
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"Could not write temporary file for '%s': %d",
path, errno);
goto out;
@@ -189,7 +183,7 @@ write_secret_file (const char *path,
errno = 0;
if (rename (tmppath, path)) {
unlink (tmppath);
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"Could not rename temporary file to '%s': %d",
path, errno);
goto out;
@@ -205,7 +199,7 @@ typedef struct ObjectType {
const char *setting_key;
NMSetting8021xCKScheme (*scheme_func)(NMSetting8021x *setting);
const char * (*path_func) (NMSetting8021x *setting);
- const GByteArray * (*blob_func) (NMSetting8021x *setting);
+ GBytes * (*blob_func) (NMSetting8021x *setting);
const char *ifcfg_key;
const char *suffix;
} ObjectType;
@@ -290,7 +284,7 @@ write_object (NMSetting8021x *s_8021x,
{
NMSetting8021xCKScheme scheme;
const char *path = NULL;
- const GByteArray *blob = NULL;
+ GBytes *blob = NULL;
g_return_val_if_fail (ifcfg != NULL, FALSE);
g_return_val_if_fail (objtype != NULL, FALSE);
@@ -345,7 +339,7 @@ write_object (NMSetting8021x *s_8021x,
new_file = utils_cert_path (ifcfg->fileName, objtype->suffix);
if (!new_file) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"Could not create file path for %s / %s",
NM_SETTING_802_1X_SETTING_NAME, objtype->setting_key);
return FALSE;
@@ -355,13 +349,16 @@ write_object (NMSetting8021x *s_8021x,
* can use paths from now on instead of pushing around the certificate
* data itself.
*/
- success = write_secret_file (new_file, (const char *) blob->data, blob->len, &write_error);
+ success = write_secret_file (new_file,
+ (const char *) g_bytes_get_data (blob, NULL),
+ g_bytes_get_size (blob),
+ &write_error);
if (success) {
svSetValue (ifcfg, objtype->ifcfg_key, new_file, FALSE);
g_free (new_file);
return TRUE;
} else {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"Could not write certificate/key for %s / %s: %s",
NM_SETTING_802_1X_SETTING_NAME, objtype->setting_key,
(write_error && write_error->message) ? write_error->message : "(unknown)");
@@ -614,7 +611,7 @@ write_wireless_security_setting (NMConnection *connection,
s_wsec = nm_connection_get_setting_wireless_security (connection);
if (!s_wsec) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"Missing '%s' setting", NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
return FALSE;
}
@@ -808,49 +805,37 @@ write_wireless_setting (NMConnection *connection,
{
NMSettingWireless *s_wireless;
char *tmp, *tmp2;
- const GByteArray *ssid, *device_mac, *cloned_mac, *bssid;
- const char *mode;
+ GBytes *ssid;
+ const guint8 *ssid_data;
+ gsize ssid_len;
+ const char *mode, *bssid;
+ const char *device_mac, *cloned_mac;
char buf[33];
guint32 mtu, chan, i;
gboolean adhoc = FALSE, hex_ssid = FALSE;
- const GSList *macaddr_blacklist;
+ const char * const *macaddr_blacklist;
s_wireless = nm_connection_get_setting_wireless (connection);
if (!s_wireless) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"Missing '%s' setting", NM_SETTING_WIRELESS_SETTING_NAME);
return FALSE;
}
- svSetValue (ifcfg, "HWADDR", NULL, FALSE);
device_mac = nm_setting_wireless_get_mac_address (s_wireless);
- if (device_mac) {
- svSetValue_free (ifcfg, "HWADDR",
- nm_utils_hwaddr_ntoa_len (device_mac->data, device_mac->len), FALSE);
- }
+ svSetValue (ifcfg, "HWADDR", device_mac, FALSE);
- svSetValue (ifcfg, "MACADDR", NULL, FALSE);
cloned_mac = nm_setting_wireless_get_cloned_mac_address (s_wireless);
- if (cloned_mac) {
- svSetValue_free (ifcfg, "MACADDR",
- nm_utils_hwaddr_ntoa_len (cloned_mac->data, cloned_mac->len), FALSE);
- }
+ svSetValue (ifcfg, "MACADDR", cloned_mac, FALSE);
svSetValue (ifcfg, "HWADDR_BLACKLIST", NULL, FALSE);
macaddr_blacklist = nm_setting_wireless_get_mac_address_blacklist (s_wireless);
- if (macaddr_blacklist) {
- const GSList *iter;
- GString *blacklist_str = g_string_new (NULL);
+ if (macaddr_blacklist[0]) {
+ char *blacklist_str;
- for (iter = macaddr_blacklist; iter; iter = g_slist_next (iter)) {
- g_string_append (blacklist_str, iter->data);
- g_string_append_c (blacklist_str, ' ');
-
- }
- if (blacklist_str->len > 0)
- g_string_truncate (blacklist_str, blacklist_str->len - 1);
- svSetValue (ifcfg, "HWADDR_BLACKLIST", blacklist_str->str, FALSE);
- g_string_free (blacklist_str, TRUE);
+ blacklist_str = g_strjoinv (" ", (char **) macaddr_blacklist);
+ svSetValue (ifcfg, "HWADDR_BLACKLIST", blacklist_str, FALSE);
+ g_free (blacklist_str);
}
svSetValue (ifcfg, "MTU", NULL, FALSE);
@@ -863,12 +848,13 @@ write_wireless_setting (NMConnection *connection,
ssid = nm_setting_wireless_get_ssid (s_wireless);
if (!ssid) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"Missing SSID in '%s' setting", NM_SETTING_WIRELESS_SETTING_NAME);
return FALSE;
}
- if (!ssid->len || ssid->len > 32) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ ssid_data = g_bytes_get_data (ssid, &ssid_len);
+ if (!ssid_len || ssid_len > 32) {
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"Invalid SSID in '%s' setting", NM_SETTING_WIRELESS_SETTING_NAME);
return FALSE;
}
@@ -876,8 +862,8 @@ write_wireless_setting (NMConnection *connection,
/* If the SSID contains any non-printable characters, we need to use the
* hex notation of the SSID instead.
*/
- for (i = 0; i < ssid->len; i++) {
- if (!g_ascii_isprint (ssid->data[i])) {
+ for (i = 0; i < ssid_len; i++) {
+ if (!g_ascii_isprint (ssid_data[i])) {
hex_ssid = TRUE;
break;
}
@@ -887,16 +873,16 @@ write_wireless_setting (NMConnection *connection,
GString *str;
/* Hex SSIDs don't get quoted */
- str = g_string_sized_new (ssid->len * 2 + 3);
+ str = g_string_sized_new (ssid_len * 2 + 3);
g_string_append (str, "0x");
- for (i = 0; i < ssid->len; i++)
- g_string_append_printf (str, "%02X", ssid->data[i]);
+ for (i = 0; i < ssid_len; i++)
+ g_string_append_printf (str, "%02X", ssid_data[i]);
svSetValue (ifcfg, "ESSID", str->str, TRUE);
g_string_free (str, TRUE);
} else {
/* Printable SSIDs always get quoted */
memset (buf, 0, sizeof (buf));
- memcpy (buf, ssid->data, ssid->len);
+ memcpy (buf, ssid_data, ssid_len);
tmp = svEscape (buf);
/* svEscape will usually quote the string, but just for consistency,
@@ -917,27 +903,29 @@ write_wireless_setting (NMConnection *connection,
} else if (!strcmp (mode, "adhoc")) {
svSetValue (ifcfg, "MODE", "Ad-Hoc", FALSE);
adhoc = TRUE;
+ } else if (!strcmp (mode, "ap")) {
+ svSetValue (ifcfg, "MODE", "Ap", FALSE);
} else {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"Invalid mode '%s' in '%s' setting",
mode, NM_SETTING_WIRELESS_SETTING_NAME);
return FALSE;
}
svSetValue (ifcfg, "CHANNEL", NULL, FALSE);
+ svSetValue (ifcfg, "BAND", NULL, FALSE);
chan = nm_setting_wireless_get_channel (s_wireless);
if (chan) {
tmp = g_strdup_printf ("%u", chan);
svSetValue (ifcfg, "CHANNEL", tmp, FALSE);
g_free (tmp);
+ } else {
+ /* Band only set if channel is not, since channel implies band */
+ svSetValue (ifcfg, "BAND", nm_setting_wireless_get_band (s_wireless), FALSE);
}
- svSetValue (ifcfg, "BSSID", NULL, FALSE);
bssid = nm_setting_wireless_get_bssid (s_wireless);
- if (bssid) {
- svSetValue_free (ifcfg, "BSSID",
- nm_utils_hwaddr_ntoa_len (bssid->data, bssid->len), FALSE);
- }
+ svSetValue (ifcfg, "BSSID", bssid, FALSE);
/* Ensure DEFAULTKEY and SECURITYMODE are cleared unless there's security;
* otherwise there's no way to detect WEP vs. open when WEP keys aren't
@@ -994,26 +982,20 @@ static gboolean
write_infiniband_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
{
NMSettingInfiniband *s_infiniband;
- const GByteArray *mac;
char *tmp;
- const char *transport_mode, *parent;
+ const char *mac, *transport_mode, *parent;
guint32 mtu;
int p_key;
s_infiniband = nm_connection_get_setting_infiniband (connection);
if (!s_infiniband) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"Missing '%s' setting", NM_SETTING_INFINIBAND_SETTING_NAME);
return FALSE;
}
- svSetValue (ifcfg, "HWADDR", NULL, FALSE);
mac = nm_setting_infiniband_get_mac_address (s_infiniband);
- if (mac) {
- tmp = nm_utils_hwaddr_ntoa (mac->data, ARPHRD_INFINIBAND);
- svSetValue (ifcfg, "HWADDR", tmp, FALSE);
- g_free (tmp);
- }
+ svSetValue (ifcfg, "HWADDR", mac, FALSE);
svSetValue (ifcfg, "MTU", NULL, FALSE);
mtu = nm_setting_infiniband_get_mtu (s_infiniband);
@@ -1049,50 +1031,35 @@ static gboolean
write_wired_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
{
NMSettingWired *s_wired;
- const GByteArray *device_mac, *cloned_mac;
+ const char *device_mac, *cloned_mac;
char *tmp;
const char *nettype, *portname, *ctcprot, *s390_key, *s390_val;
guint32 mtu, num_opts, i;
- const GPtrArray *s390_subchannels;
+ const char *const *s390_subchannels;
GString *str;
- const GSList *macaddr_blacklist;
+ const char * const *macaddr_blacklist;
s_wired = nm_connection_get_setting_wired (connection);
if (!s_wired) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"Missing '%s' setting", NM_SETTING_WIRED_SETTING_NAME);
return FALSE;
}
- svSetValue (ifcfg, "HWADDR", NULL, FALSE);
device_mac = nm_setting_wired_get_mac_address (s_wired);
- if (device_mac) {
- svSetValue_free (ifcfg, "HWADDR",
- nm_utils_hwaddr_ntoa_len (device_mac->data, device_mac->len), FALSE);
- }
+ svSetValue (ifcfg, "HWADDR", device_mac, FALSE);
- svSetValue (ifcfg, "MACADDR", NULL, FALSE);
cloned_mac = nm_setting_wired_get_cloned_mac_address (s_wired);
- if (cloned_mac) {
- svSetValue_free (ifcfg, "MACADDR",
- nm_utils_hwaddr_ntoa_len (cloned_mac->data, cloned_mac->len), FALSE);
- }
+ svSetValue (ifcfg, "MACADDR", cloned_mac, FALSE);
svSetValue (ifcfg, "HWADDR_BLACKLIST", NULL, FALSE);
macaddr_blacklist = nm_setting_wired_get_mac_address_blacklist (s_wired);
- if (macaddr_blacklist) {
- const GSList *iter;
- GString *blacklist_str = g_string_new (NULL);
-
- for (iter = macaddr_blacklist; iter; iter = g_slist_next (iter)) {
- g_string_append (blacklist_str, iter->data);
- g_string_append_c (blacklist_str, ' ');
+ if (macaddr_blacklist[0]) {
+ char *blacklist_str;
- }
- if (blacklist_str->len > 0)
- g_string_truncate (blacklist_str, blacklist_str->len - 1);
- svSetValue (ifcfg, "HWADDR_BLACKLIST", blacklist_str->str, FALSE);
- g_string_free (blacklist_str, TRUE);
+ blacklist_str = g_strjoinv (" ", (char **) macaddr_blacklist);
+ svSetValue (ifcfg, "HWADDR_BLACKLIST", blacklist_str, FALSE);
+ g_free (blacklist_str);
}
svSetValue (ifcfg, "MTU", NULL, FALSE);
@@ -1106,16 +1073,14 @@ write_wired_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
svSetValue (ifcfg, "SUBCHANNELS", NULL, FALSE);
s390_subchannels = nm_setting_wired_get_s390_subchannels (s_wired);
if (s390_subchannels) {
+ int len = g_strv_length ((char **)s390_subchannels);
+
tmp = NULL;
- if (s390_subchannels->len == 2) {
- tmp = g_strdup_printf ("%s,%s",
- (const char *) g_ptr_array_index (s390_subchannels, 0),
- (const char *) g_ptr_array_index (s390_subchannels, 1));
- } else if (s390_subchannels->len == 3) {
- tmp = g_strdup_printf ("%s,%s,%s",
- (const char *) g_ptr_array_index (s390_subchannels, 0),
- (const char *) g_ptr_array_index (s390_subchannels, 1),
- (const char *) g_ptr_array_index (s390_subchannels, 2));
+ if (len == 2) {
+ tmp = g_strdup_printf ("%s,%s", s390_subchannels[0], s390_subchannels[1]);
+ } else if (len == 3) {
+ tmp = g_strdup_printf ("%s,%s,%s", s390_subchannels[0], s390_subchannels[1],
+ s390_subchannels[2]);
}
svSetValue (ifcfg, "SUBCHANNELS", tmp, FALSE);
g_free (tmp);
@@ -1161,11 +1126,11 @@ write_wired_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
return TRUE;
}
-static GString *
+static char *
vlan_priority_maplist_to_stringlist (NMSettingVlan *s_vlan, NMVlanPriorityMap map)
{
- GSList *strlist = NULL, *iter;
- GString *value = NULL;
+ char **strlist;
+ char *value;
if (map == NM_VLAN_INGRESS_MAP)
g_object_get (G_OBJECT (s_vlan), NM_SETTING_VLAN_INGRESS_PRIORITY_MAP, &strlist, NULL);
@@ -1174,11 +1139,11 @@ vlan_priority_maplist_to_stringlist (NMSettingVlan *s_vlan, NMVlanPriorityMap ma
else
return NULL;
- value = g_string_new ("");
- for (iter = strlist; iter; iter = g_slist_next (iter))
- g_string_append_printf (value, "%s%s", value->len ? "," : "", (const char *) iter->data);
-
- g_slist_free_full (strlist, g_free);
+ if (strlist[0])
+ value = g_strjoinv (",", strlist);
+ else
+ value = NULL;
+ g_strfreev (strlist);
return value;
}
@@ -1191,25 +1156,25 @@ write_vlan_setting (NMConnection *connection, shvarFile *ifcfg, gboolean *wired,
NMSettingWired *s_wired;
char *tmp;
guint32 vlan_flags = 0;
- GString *text = NULL;
s_con = nm_connection_get_setting_connection (connection);
if (!s_con) {
- g_set_error_literal (error, IFCFG_PLUGIN_ERROR, 0, "Missing connection setting");
+ g_set_error_literal (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
+ "Missing connection setting");
return FALSE;
}
s_vlan = nm_connection_get_setting_vlan (connection);
if (!s_vlan) {
- g_set_error_literal (error, IFCFG_PLUGIN_ERROR, 0, "Missing VLAN setting");
+ g_set_error_literal (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
+ "Missing VLAN setting");
return FALSE;
}
svSetValue (ifcfg, "VLAN", "yes", FALSE);
svSetValue (ifcfg, "TYPE", TYPE_VLAN, FALSE);
- svSetValue (ifcfg, "DEVICE", nm_setting_vlan_get_interface_name (s_vlan), FALSE);
+ svSetValue (ifcfg, "DEVICE", nm_setting_connection_get_interface_name (s_con), FALSE);
svSetValue (ifcfg, "PHYSDEV", nm_setting_vlan_get_parent (s_vlan), FALSE);
- svSetValue (ifcfg, "MASTER", nm_setting_connection_get_master (s_con), FALSE);
tmp = g_strdup_printf ("%d", nm_setting_vlan_get_id (s_vlan));
svSetValue (ifcfg, "VLAN_ID", tmp, FALSE);
@@ -1230,15 +1195,13 @@ write_vlan_setting (NMConnection *connection, shvarFile *ifcfg, gboolean *wired,
} else if (vlan_flags & NM_VLAN_FLAG_LOOSE_BINDING)
svSetValue (ifcfg, "VLAN_FLAGS", "LOOSE_BINDING", FALSE);
- text = vlan_priority_maplist_to_stringlist (s_vlan, NM_VLAN_INGRESS_MAP);
- svSetValue (ifcfg, "VLAN_INGRESS_PRIORITY_MAP", text ? text->str : NULL, FALSE);
- if (text)
- g_string_free (text, TRUE);
+ tmp = vlan_priority_maplist_to_stringlist (s_vlan, NM_VLAN_INGRESS_MAP);
+ svSetValue (ifcfg, "VLAN_INGRESS_PRIORITY_MAP", tmp, FALSE);
+ g_free (tmp);
- text = vlan_priority_maplist_to_stringlist (s_vlan, NM_VLAN_EGRESS_MAP);
- svSetValue (ifcfg, "VLAN_EGRESS_PRIORITY_MAP", text ? text->str : NULL, FALSE);
- if (text)
- g_string_free (text, TRUE);
+ tmp = vlan_priority_maplist_to_stringlist (s_vlan, NM_VLAN_EGRESS_MAP);
+ svSetValue (ifcfg, "VLAN_EGRESS_PRIORITY_MAP", tmp, FALSE);
+ g_free (tmp);
svSetValue (ifcfg, "HWADDR", NULL, FALSE);
svSetValue (ifcfg, "MACADDR", NULL, FALSE);
@@ -1246,24 +1209,18 @@ write_vlan_setting (NMConnection *connection, shvarFile *ifcfg, gboolean *wired,
s_wired = nm_connection_get_setting_wired (connection);
if (s_wired) {
- const GByteArray *device_mac, *cloned_mac;
+ const char *device_mac, *cloned_mac;
guint32 mtu;
*wired = TRUE;
device_mac = nm_setting_wired_get_mac_address (s_wired);
- if (device_mac) {
- tmp = nm_utils_hwaddr_ntoa (device_mac->data, ARPHRD_ETHER);
- svSetValue (ifcfg, "HWADDR", tmp, FALSE);
- g_free (tmp);
- }
+ if (device_mac)
+ svSetValue (ifcfg, "HWADDR", device_mac, FALSE);
cloned_mac = nm_setting_wired_get_cloned_mac_address (s_wired);
- if (cloned_mac) {
- tmp = nm_utils_hwaddr_ntoa (cloned_mac->data, ARPHRD_ETHER);
- svSetValue (ifcfg, "MACADDR", tmp, FALSE);
- g_free (tmp);
- }
+ if (cloned_mac)
+ svSetValue (ifcfg, "MACADDR", cloned_mac, FALSE);
mtu = nm_setting_wired_get_mtu (s_wired);
if (mtu) {
@@ -1285,14 +1242,15 @@ write_bonding_setting (NMConnection *connection, shvarFile *ifcfg, GError **erro
s_bond = nm_connection_get_setting_bond (connection);
if (!s_bond) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"Missing '%s' setting", NM_SETTING_BOND_SETTING_NAME);
return FALSE;
}
- iface = nm_setting_bond_get_interface_name (s_bond);
+ iface = nm_connection_get_interface_name (connection);
if (!iface) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0, "Missing interface name");
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
+ "Missing interface name");
return FALSE;
}
@@ -1336,14 +1294,15 @@ write_team_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
s_team = nm_connection_get_setting_team (connection);
if (!s_team) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"Missing '%s' setting", NM_SETTING_TEAM_SETTING_NAME);
return FALSE;
}
- iface = nm_setting_team_get_interface_name (s_team);
+ iface = nm_connection_get_interface_name (connection);
if (!iface) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0, "Missing interface name");
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
+ "Missing interface name");
return FALSE;
}
@@ -1379,19 +1338,20 @@ write_bridge_setting (NMConnection *connection, shvarFile *ifcfg, GError **error
const char *iface;
guint32 i;
GString *opts;
- const GByteArray *mac;
+ const char *mac;
char *s;
s_bridge = nm_connection_get_setting_bridge (connection);
if (!s_bridge) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"Missing '%s' setting", NM_SETTING_BRIDGE_SETTING_NAME);
return FALSE;
}
- iface = nm_setting_bridge_get_interface_name (s_bridge);
+ iface = nm_connection_get_interface_name (connection);
if (!iface) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0, "Missing interface name");
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
+ "Missing interface name");
return FALSE;
}
@@ -1399,11 +1359,9 @@ 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);
+ svSetValue (ifcfg, "MACADDR", mac, FALSE);
/* Bridge options */
opts = g_string_sized_new (32);
@@ -1701,6 +1659,7 @@ write_connection_setting (NMSettingConnection *s_con, shvarFile *ifcfg)
GString *str;
const char *master;
char *tmp;
+ gint i_int;
svSetValue (ifcfg, "NAME", nm_setting_connection_get_id (s_con), FALSE);
svSetValue (ifcfg, "UUID", nm_setting_connection_get_uuid (s_con), FALSE);
@@ -1709,6 +1668,12 @@ write_connection_setting (NMSettingConnection *s_con, shvarFile *ifcfg)
nm_setting_connection_get_autoconnect (s_con) ? "yes" : "no",
FALSE);
+ i_int = nm_setting_connection_get_autoconnect_priority (s_con);
+ tmp = i_int != NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY_DEFAULT
+ ? g_strdup_printf ("%d", i_int) : NULL;
+ svSetValue (ifcfg, "AUTOCONNECT_PRIORITY", tmp, FALSE);
+ g_free (tmp);
+
/* Permissions */
svSetValue (ifcfg, "USERS", NULL, FALSE);
n = nm_setting_connection_get_num_permissions (s_con);
@@ -1778,14 +1743,14 @@ write_connection_setting (NMSettingConnection *s_con, shvarFile *ifcfg)
}
static gboolean
-write_route_file_legacy (const char *filename, NMSettingIP4Config *s_ip4, GError **error)
+write_route_file_legacy (const char *filename, NMSettingIPConfig *s_ip4, GError **error)
{
- char dest[INET_ADDRSTRLEN];
- char next_hop[INET_ADDRSTRLEN];
+ const char *dest, *next_hop;
char **route_items;
char *route_contents;
- NMIP4Route *route;
- guint32 ip, prefix, metric;
+ NMIPRoute *route;
+ guint32 prefix;
+ gint64 metric;
guint32 i, num;
gboolean success = FALSE;
@@ -1794,7 +1759,7 @@ write_route_file_legacy (const char *filename, NMSettingIP4Config *s_ip4, GError
g_return_val_if_fail (error != NULL, FALSE);
g_return_val_if_fail (*error == NULL, FALSE);
- num = nm_setting_ip4_config_get_num_routes (s_ip4);
+ num = nm_setting_ip_config_get_num_routes (s_ip4);
if (num == 0) {
unlink (filename);
return TRUE;
@@ -1802,28 +1767,24 @@ write_route_file_legacy (const char *filename, NMSettingIP4Config *s_ip4, GError
route_items = g_malloc0 (sizeof (char*) * (num + 1));
for (i = 0; i < num; i++) {
- route = nm_setting_ip4_config_get_route (s_ip4, i);
-
- memset (dest, 0, sizeof (dest));
- ip = nm_ip4_route_get_dest (route);
- inet_ntop (AF_INET, (const void *) &ip, &dest[0], sizeof (dest));
-
- prefix = nm_ip4_route_get_prefix (route);
+ route = nm_setting_ip_config_get_route (s_ip4, i);
- memset (next_hop, 0, sizeof (next_hop));
- ip = nm_ip4_route_get_next_hop (route);
- inet_ntop (AF_INET, (const void *) &ip, &next_hop[0], sizeof (next_hop));
+ dest = nm_ip_route_get_dest (route);
+ prefix = nm_ip_route_get_prefix (route);
+ next_hop = nm_ip_route_get_next_hop (route);
+ metric = nm_ip_route_get_metric (route);
- metric = nm_ip4_route_get_metric (route);
-
- route_items[i] = g_strdup_printf ("%s/%u via %s metric %u\n", dest, prefix, next_hop, metric);
+ if (metric == -1)
+ route_items[i] = g_strdup_printf ("%s/%u via %s\n", dest, prefix, next_hop);
+ else
+ route_items[i] = g_strdup_printf ("%s/%u via %s metric %u\n", dest, prefix, next_hop, (guint32) metric);
}
route_items[num] = NULL;
route_contents = g_strjoinv (NULL, route_items);
g_strfreev (route_items);
if (!g_file_set_contents (filename, route_contents, -1, NULL)) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"Writing route file '%s' failed", filename);
goto error;
}
@@ -1839,7 +1800,7 @@ error:
static gboolean
write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
{
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
const char *value;
char *addr_key, *prefix_key, *netmask_key, *gw_key, *metric_key, *tmp;
char *route_path = NULL;
@@ -1852,7 +1813,7 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
s_ip4 = nm_connection_get_setting_ip4_config (connection);
if (s_ip4)
- method = nm_setting_ip4_config_get_method (s_ip4);
+ method = nm_setting_ip_config_get_method (s_ip4);
/* Missing IP4 setting is assumed to be DHCP */
if (!method)
@@ -1895,7 +1856,7 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
/* Temporarily create fake IP4 setting if missing; method set to DHCP above */
if (!s_ip4) {
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new ();
fake_ip4 = TRUE;
}
@@ -1922,14 +1883,19 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
/* 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);
+ num = nm_setting_ip_config_get_num_addresses (s_ip4);
for (i = n = 0; i < num; i++) {
- char buf[INET_ADDRSTRLEN];
- NMIP4Address *addr;
- guint32 ip;
+ NMIPAddress *addr;
- if (i > 0 && NM_UTILS_PRIVATE_CALL (nm_setting_ip4_config_get_address_label (s_ip4, i)))
- continue;
+ addr = nm_setting_ip_config_get_address (s_ip4, i);
+
+ if (i > 0) {
+ GVariant *label;
+
+ label = nm_ip_address_get_attribute (addr, "label");
+ if (label)
+ continue;
+ }
if (n == 0) {
/* Instead of index 0 use un-numbered variables.
@@ -1948,26 +1914,14 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
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);
+ svSetValue (ifcfg, addr_key, nm_ip_address_get_address (addr), FALSE);
- tmp = g_strdup_printf ("%u", nm_ip4_address_get_prefix (addr));
+ tmp = g_strdup_printf ("%u", nm_ip_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_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);
+ svSetValue (ifcfg, gw_key, NULL, FALSE);
g_free (addr_key);
g_free (prefix_key);
@@ -1994,32 +1948,30 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
g_free (gw_key);
}
- num = nm_setting_ip4_config_get_num_dns (s_ip4);
+ svSetValue (ifcfg, "GATEWAY", nm_setting_ip_config_get_gateway (s_ip4), FALSE);
+
+ num = nm_setting_ip_config_get_num_dns (s_ip4);
for (i = 0; i < 254; i++) {
- char buf[INET_ADDRSTRLEN + 1];
- guint32 ip;
+ const char *dns;
addr_key = g_strdup_printf ("DNS%d", i + 1);
if (i >= num)
svSetValue (ifcfg, addr_key, NULL, FALSE);
else {
- ip = nm_setting_ip4_config_get_dns (s_ip4, i);
-
- memset (buf, 0, sizeof (buf));
- inet_ntop (AF_INET, (const void *) &ip, &buf[0], sizeof (buf));
- svSetValue (ifcfg, addr_key, &buf[0], FALSE);
+ dns = nm_setting_ip_config_get_dns (s_ip4, i);
+ svSetValue (ifcfg, addr_key, dns, FALSE);
}
g_free (addr_key);
}
- num = nm_setting_ip4_config_get_num_dns_searches (s_ip4);
+ num = nm_setting_ip_config_get_num_dns_searches (s_ip4);
if (num > 0) {
searches = g_string_new (NULL);
for (i = 0; i < num; i++) {
if (i > 0)
g_string_append_c (searches, ' ');
- g_string_append (searches, nm_setting_ip4_config_get_dns_search (s_ip4, i));
+ g_string_append (searches, nm_setting_ip_config_get_dns_search (s_ip4, i));
}
svSetValue (ifcfg, "DOMAIN", searches->str, FALSE);
g_string_free (searches, TRUE);
@@ -2028,7 +1980,7 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
/* DEFROUTE; remember that it has the opposite meaning from never-default */
svSetValue (ifcfg, "DEFROUTE",
- nm_setting_ip4_config_get_never_default (s_ip4) ? "no" : "yes",
+ nm_setting_ip_config_get_never_default (s_ip4) ? "no" : "yes",
FALSE);
svSetValue (ifcfg, "PEERDNS", NULL, FALSE);
@@ -2036,14 +1988,14 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
svSetValue (ifcfg, "DHCP_CLIENT_ID", NULL, FALSE);
if (!strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_AUTO)) {
svSetValue (ifcfg, "PEERDNS",
- nm_setting_ip4_config_get_ignore_auto_dns (s_ip4) ? "no" : "yes",
+ nm_setting_ip_config_get_ignore_auto_dns (s_ip4) ? "no" : "yes",
FALSE);
svSetValue (ifcfg, "PEERROUTES",
- nm_setting_ip4_config_get_ignore_auto_routes (s_ip4) ? "no" : "yes",
+ nm_setting_ip_config_get_ignore_auto_routes (s_ip4) ? "no" : "yes",
FALSE);
- value = nm_setting_ip4_config_get_dhcp_hostname (s_ip4);
+ value = nm_setting_ip_config_get_dhcp_hostname (s_ip4);
if (value)
svSetValue (ifcfg, "DHCP_HOSTNAME", value, FALSE);
@@ -2051,22 +2003,22 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
* 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",
+ nm_setting_ip_config_get_dhcp_send_hostname (s_ip4) ? NULL : "no",
FALSE);
- value = nm_setting_ip4_config_get_dhcp_client_id (s_ip4);
+ value = nm_setting_ip4_config_get_dhcp_client_id (NM_SETTING_IP4_CONFIG (s_ip4));
if (value)
svSetValue (ifcfg, "DHCP_CLIENT_ID", value, FALSE);
}
svSetValue (ifcfg, "IPV4_FAILURE_FATAL",
- nm_setting_ip4_config_get_may_fail (s_ip4) ? "no" : "yes",
+ nm_setting_ip_config_get_may_fail (s_ip4) ? "no" : "yes",
FALSE);
/* Static routes - route-<name> file */
route_path = utils_get_route_path (ifcfg->fileName);
if (!route_path) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"Could not get route file path for '%s'", ifcfg->fileName);
goto out;
}
@@ -2076,18 +2028,19 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
routefile = utils_get_route_ifcfg (ifcfg->fileName, TRUE);
if (!routefile) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"Could not create route file '%s'", route_path);
g_free (route_path);
goto out;
}
g_free (route_path);
- num = nm_setting_ip4_config_get_num_routes (s_ip4);
+ num = nm_setting_ip_config_get_num_routes (s_ip4);
for (i = 0; i < 256; i++) {
char buf[INET_ADDRSTRLEN];
- NMIP4Route *route;
- guint32 ip, metric;
+ NMIPRoute *route;
+ guint32 netmask;
+ gint64 metric;
addr_key = g_strdup_printf ("ADDRESS%d", i);
netmask_key = g_strdup_printf ("NETMASK%d", i);
@@ -2100,29 +2053,23 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
svSetValue (routefile, gw_key, NULL, FALSE);
svSetValue (routefile, metric_key, NULL, FALSE);
} else {
- route = nm_setting_ip4_config_get_route (s_ip4, i);
+ route = nm_setting_ip_config_get_route (s_ip4, i);
- memset (buf, 0, sizeof (buf));
- ip = nm_ip4_route_get_dest (route);
- inet_ntop (AF_INET, (const void *) &ip, &buf[0], sizeof (buf));
- svSetValue (routefile, addr_key, &buf[0], FALSE);
+ svSetValue (routefile, addr_key, nm_ip_route_get_dest (route), FALSE);
memset (buf, 0, sizeof (buf));
- ip = nm_utils_ip4_prefix_to_netmask (nm_ip4_route_get_prefix (route));
- inet_ntop (AF_INET, (const void *) &ip, &buf[0], sizeof (buf));
+ netmask = nm_utils_ip4_prefix_to_netmask (nm_ip_route_get_prefix (route));
+ inet_ntop (AF_INET, (const void *) &netmask, &buf[0], sizeof (buf));
svSetValue (routefile, netmask_key, &buf[0], FALSE);
- memset (buf, 0, sizeof (buf));
- ip = nm_ip4_route_get_next_hop (route);
- inet_ntop (AF_INET, (const void *) &ip, &buf[0], sizeof (buf));
- svSetValue (routefile, gw_key, &buf[0], FALSE);
+ svSetValue (routefile, gw_key, nm_ip_route_get_next_hop (route), FALSE);
memset (buf, 0, sizeof (buf));
- metric = nm_ip4_route_get_metric (route);
- if (metric == 0)
+ metric = nm_ip_route_get_metric (route);
+ if (metric == -1)
svSetValue (routefile, metric_key, NULL, FALSE);
else {
- tmp = g_strdup_printf ("%u", metric);
+ tmp = g_strdup_printf ("%u", (guint32) metric);
svSetValue (routefile, metric_key, tmp, FALSE);
g_free (tmp);
}
@@ -2157,7 +2104,7 @@ out:
static void
write_ip4_aliases (NMConnection *connection, char *base_ifcfg_path)
{
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
char *base_ifcfg_dir, *base_ifcfg_name, *base_name;
int i, num, base_ifcfg_name_len, base_name_len;
GDir *dir;
@@ -2195,17 +2142,20 @@ write_ip4_aliases (NMConnection *connection, char *base_ifcfg_path)
if (!s_ip4)
return;
- num = nm_setting_ip4_config_get_num_addresses (s_ip4);
+ num = nm_setting_ip_config_get_num_addresses (s_ip4);
for (i = 0; i < num; i++) {
+ GVariant *label_var;
const char *label, *p;
- char buf[INET_ADDRSTRLEN], *path, *tmp;
- NMIP4Address *addr;
- guint32 ip;
+ char *path, *tmp;
+ NMIPAddress *addr;
shvarFile *ifcfg;
- label = NM_UTILS_PRIVATE_CALL (nm_setting_ip4_config_get_address_label (s_ip4, i));
- if (!label)
+ addr = nm_setting_ip_config_get_address (s_ip4, i);
+
+ label_var = nm_ip_address_get_attribute (addr, "label");
+ if (!label_var)
continue;
+ label = g_variant_get_string (label_var, NULL);
if ( strncmp (label, base_name, base_name_len) != 0
|| label[base_name_len] != ':')
continue;
@@ -2223,24 +2173,13 @@ write_ip4_aliases (NMConnection *connection, char *base_ifcfg_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);
+ addr = nm_setting_ip_config_get_address (s_ip4, i);
+ svSetValue (ifcfg, "IPADDR", nm_ip_address_get_address (addr), FALSE);
- tmp = g_strdup_printf ("%u", nm_ip4_address_get_prefix (addr));
+ tmp = g_strdup_printf ("%u", nm_ip_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);
}
@@ -2250,15 +2189,11 @@ write_ip4_aliases (NMConnection *connection, char *base_ifcfg_path)
}
static gboolean
-write_route6_file (const char *filename, NMSettingIP6Config *s_ip6, GError **error)
+write_route6_file (const char *filename, NMSettingIPConfig *s_ip6, GError **error)
{
- char dest[INET6_ADDRSTRLEN];
- char next_hop[INET6_ADDRSTRLEN];
char **route_items;
char *route_contents;
- NMIP6Route *route;
- const struct in6_addr *ip;
- guint32 prefix, metric;
+ NMIPRoute *route;
guint32 i, num;
gboolean success = FALSE;
@@ -2267,7 +2202,7 @@ write_route6_file (const char *filename, NMSettingIP6Config *s_ip6, GError **err
g_return_val_if_fail (error != NULL, FALSE);
g_return_val_if_fail (*error == NULL, FALSE);
- num = nm_setting_ip6_config_get_num_routes (s_ip6);
+ num = nm_setting_ip_config_get_num_routes (s_ip6);
if (num == 0) {
unlink (filename);
return TRUE;
@@ -2275,28 +2210,27 @@ write_route6_file (const char *filename, NMSettingIP6Config *s_ip6, GError **err
route_items = g_malloc0 (sizeof (char*) * (num + 1));
for (i = 0; i < num; i++) {
- route = nm_setting_ip6_config_get_route (s_ip6, i);
-
- memset (dest, 0, sizeof (dest));
- ip = nm_ip6_route_get_dest (route);
- inet_ntop (AF_INET6, (const void *) ip, &dest[0], sizeof (dest));
-
- prefix = nm_ip6_route_get_prefix (route);
+ route = nm_setting_ip_config_get_route (s_ip6, i);
- memset (next_hop, 0, sizeof (next_hop));
- ip = nm_ip6_route_get_next_hop (route);
- inet_ntop (AF_INET6, (const void *) ip, &next_hop[0], sizeof (next_hop));
-
- metric = nm_ip6_route_get_metric (route);
-
- route_items[i] = g_strdup_printf ("%s/%u via %s metric %u\n", dest, prefix, next_hop, metric);
+ if (nm_ip_route_get_metric (route) == -1) {
+ route_items[i] = g_strdup_printf ("%s/%u via %s\n",
+ nm_ip_route_get_dest (route),
+ nm_ip_route_get_prefix (route),
+ nm_ip_route_get_next_hop (route));
+ } else {
+ route_items[i] = g_strdup_printf ("%s/%u via %s metric %u\n",
+ nm_ip_route_get_dest (route),
+ nm_ip_route_get_prefix (route),
+ nm_ip_route_get_next_hop (route),
+ (guint32) nm_ip_route_get_metric (route));
+ }
}
route_items[num] = NULL;
route_contents = g_strjoinv (NULL, route_items);
g_strfreev (route_items);
if (!g_file_set_contents (filename, route_contents, -1, NULL)) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"Writing route6 file '%s' failed", filename);
goto error;
}
@@ -2311,16 +2245,14 @@ error:
static gboolean
write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
{
- NMSettingIP6Config *s_ip6;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip6;
+ NMSettingIPConfig *s_ip4;
const char *value;
- char *addr_key, *prefix;
+ char *addr_key;
guint32 i, num, num4;
GString *searches;
- char buf[INET6_ADDRSTRLEN];
- char ipv6_defaultgw[INET6_ADDRSTRLEN];
- NMIP6Address *addr;
- const struct in6_addr *ip;
+ NMIPAddress *addr;
+ const char *dns;
GString *ip_str1, *ip_str2, *ip_ptr;
char *route6_path;
@@ -2337,7 +2269,7 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
return TRUE;
}
- value = nm_setting_ip6_config_get_method (s_ip6);
+ value = nm_setting_ip_config_get_method (s_ip6);
g_assert (value);
if (!strcmp (value, NM_SETTING_IP6_CONFIG_METHOD_IGNORE)) {
svSetValue (ifcfg, "IPV6INIT", "no", FALSE);
@@ -2352,7 +2284,7 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
svSetValue (ifcfg, "IPV6INIT", "yes", FALSE);
svSetValue (ifcfg, "IPV6_AUTOCONF", "no", FALSE);
svSetValue (ifcfg, "DHCPV6C", "yes", FALSE);
- hostname = nm_setting_ip6_config_get_dhcp_hostname (s_ip6);
+ hostname = nm_setting_ip_config_get_dhcp_hostname (s_ip6);
if (hostname)
svSetValue (ifcfg, "DHCP_HOSTNAME", hostname, FALSE);
} else if (!strcmp (value, NM_SETTING_IP6_CONFIG_METHOD_MANUAL)) {
@@ -2370,62 +2302,47 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
}
/* Write out IP addresses */
- num = nm_setting_ip6_config_get_num_addresses (s_ip6);
+ num = nm_setting_ip_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;
- 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));
+ addr = nm_setting_ip_config_get_address (s_ip6, i);
+
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));
- }
+ g_string_append_printf (ip_ptr, "%s/%u",
+ nm_ip_address_get_address (addr),
+ nm_ip_address_get_prefix (addr));
}
svSetValue (ifcfg, "IPV6ADDR", ip_str1->str, FALSE);
svSetValue (ifcfg, "IPV6ADDR_SECONDARIES", ip_str2->str, FALSE);
- svSetValue (ifcfg, "IPV6_DEFAULTGW", ipv6_defaultgw, FALSE);
+ svSetValue (ifcfg, "IPV6_DEFAULTGW", nm_setting_ip_config_get_gateway (s_ip6), 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);
- num4 = s_ip4 ? nm_setting_ip4_config_get_num_dns (s_ip4) : 0; /* from where to start with IPv6 entries */
- num = nm_setting_ip6_config_get_num_dns (s_ip6);
+ num4 = s_ip4 ? nm_setting_ip_config_get_num_dns (s_ip4) : 0; /* from where to start with IPv6 entries */
+ num = nm_setting_ip_config_get_num_dns (s_ip6);
for (i = 0; i < 254; i++) {
addr_key = g_strdup_printf ("DNS%d", i + num4 + 1);
if (i >= num)
svSetValue (ifcfg, addr_key, NULL, FALSE);
else {
- 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));
- svSetValue (ifcfg, addr_key, buf, FALSE);
+ dns = nm_setting_ip_config_get_dns (s_ip6, i);
+ svSetValue (ifcfg, addr_key, dns, FALSE);
}
g_free (addr_key);
}
/* Write out DNS domains - 'DOMAIN' key is shared for both IPv4 and IPv6 domains */
- num = nm_setting_ip6_config_get_num_dns_searches (s_ip6);
+ num = nm_setting_ip_config_get_num_dns_searches (s_ip6);
if (num > 0) {
char *ip4_domains;
ip4_domains = svGetValue (ifcfg, "DOMAIN", FALSE);
@@ -2433,7 +2350,7 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
for (i = 0; i < num; i++) {
if (searches->len > 0)
g_string_append_c (searches, ' ');
- g_string_append (searches, nm_setting_ip6_config_get_dns_search (s_ip6, i));
+ g_string_append (searches, nm_setting_ip_config_get_dns_search (s_ip6, i));
}
svSetValue (ifcfg, "DOMAIN", searches->str, FALSE);
g_string_free (searches, TRUE);
@@ -2442,7 +2359,7 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
/* handle IPV6_DEFROUTE */
/* IPV6_DEFROUTE has the opposite meaning from 'never-default' */
- if (nm_setting_ip6_config_get_never_default(s_ip6))
+ if (nm_setting_ip_config_get_never_default(s_ip6))
svSetValue (ifcfg, "IPV6_DEFROUTE", "no", FALSE);
else
svSetValue (ifcfg, "IPV6_DEFROUTE", "yes", FALSE);
@@ -2451,22 +2368,22 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
svSetValue (ifcfg, "IPV6_PEERROUTES", NULL, FALSE);
if (!strcmp (value, NM_SETTING_IP6_CONFIG_METHOD_AUTO)) {
svSetValue (ifcfg, "IPV6_PEERDNS",
- nm_setting_ip6_config_get_ignore_auto_dns (s_ip6) ? "no" : "yes",
+ nm_setting_ip_config_get_ignore_auto_dns (s_ip6) ? "no" : "yes",
FALSE);
svSetValue (ifcfg, "IPV6_PEERROUTES",
- nm_setting_ip6_config_get_ignore_auto_routes (s_ip6) ? "no" : "yes",
+ nm_setting_ip_config_get_ignore_auto_routes (s_ip6) ? "no" : "yes",
FALSE);
}
svSetValue (ifcfg, "IPV6_FAILURE_FATAL",
- nm_setting_ip6_config_get_may_fail (s_ip6) ? "no" : "yes",
+ nm_setting_ip_config_get_may_fail (s_ip6) ? "no" : "yes",
FALSE);
/* IPv6 Privacy Extensions */
svSetValue (ifcfg, "IPV6_PRIVACY", NULL, FALSE);
svSetValue (ifcfg, "IPV6_PRIVACY_PREFER_PUBLIC_IP", NULL, FALSE);
- switch (nm_setting_ip6_config_get_ip6_privacy (s_ip6)){
+ switch (nm_setting_ip6_config_get_ip6_privacy (NM_SETTING_IP6_CONFIG (s_ip6))){
case NM_SETTING_IP6_CONFIG_PRIVACY_DISABLED:
svSetValue (ifcfg, "IPV6_PRIVACY", "no", FALSE);
break;
@@ -2484,7 +2401,7 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
/* Static routes go to route6-<dev> file */
route6_path = utils_get_route6_path (ifcfg->fileName);
if (!route6_path) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"Could not get route6 file path for '%s'", ifcfg->fileName);
goto error;
}
@@ -2502,7 +2419,6 @@ error:
static char *
escape_id (const char *id)
{
- static const char const as_dash[] = "\\][|/=()!";
char *escaped = g_strdup (id);
char *p = escaped;
@@ -2510,7 +2426,7 @@ escape_id (const char *id)
while (*p) {
if (*p == ' ')
*p = '_';
- else if (strchr (as_dash, *p))
+ else if (strchr ("\\][|/=()!", *p))
*p = '-';
p++;
}
@@ -2573,7 +2489,7 @@ write_connection (NMConnection *connection,
g_free (escaped);
if (ifcfg_name == NULL) {
- g_set_error_literal (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error_literal (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"Failed to find usable ifcfg file name");
return FALSE;
}
@@ -2583,7 +2499,7 @@ write_connection (NMConnection *connection,
type = nm_setting_connection_get_connection_type (s_con);
if (!type) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"Missing connection type!");
goto out;
}
@@ -2591,7 +2507,7 @@ write_connection (NMConnection *connection,
if (!strcmp (type, NM_SETTING_WIRED_SETTING_NAME)) {
// FIXME: can't write PPPoE at this time
if (nm_connection_get_setting_pppoe (connection)) {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"Can't write connection type '%s'",
NM_SETTING_PPPOE_SETTING_NAME);
goto out;
@@ -2619,7 +2535,7 @@ write_connection (NMConnection *connection,
if (!write_bridge_setting (connection, ifcfg, error))
goto out;
} else {
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"Can't write connection type '%s'", type);
goto out;
}
@@ -2684,7 +2600,7 @@ writer_can_write_connection (NMConnection *connection, GError **error)
s_con = nm_connection_get_setting_connection (connection);
g_assert (s_con);
- g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"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),
diff --git a/src/settings/plugins/ifcfg-suse/Makefile.am b/src/settings/plugins/ifcfg-suse/Makefile.am
index d4f1cf74d..46204d7da 100644
--- a/src/settings/plugins/ifcfg-suse/Makefile.am
+++ b/src/settings/plugins/ifcfg-suse/Makefile.am
@@ -1,14 +1,12 @@
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 \
+ -I$(top_srcdir)/libnm-core \
+ -I$(top_builddir)/libnm-core \
-DG_LOG_DOMAIN=\""NetworkManager-ifcfg-suse"\" \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
-DSYSCONFDIR=\"$(sysconfdir)\"
@@ -19,8 +17,3 @@ libnm_settings_plugin_ifcfg_suse_la_SOURCES = \
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 \
- $(top_builddir)/libnm-glib/libnm-glib.la \
- $(GLIB_LIBS)
-
diff --git a/src/settings/plugins/ifcfg-suse/Makefile.in b/src/settings/plugins/ifcfg-suse/Makefile.in
index 5ff5bfb2c..149faa3e2 100644
--- a/src/settings/plugins/ifcfg-suse/Makefile.in
+++ b/src/settings/plugins/ifcfg-suse/Makefile.in
@@ -130,10 +130,7 @@ am__uninstall_files_from_dir = { \
}
am__installdirs = "$(DESTDIR)$(pkglibdir)"
LTLIBRARIES = $(pkglib_LTLIBRARIES)
-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)
+libnm_settings_plugin_ifcfg_suse_la_LIBADD =
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)
@@ -216,6 +213,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -339,6 +338,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -358,6 +358,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -384,7 +385,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -465,15 +466,13 @@ with_resolvconf = @with_resolvconf@
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 \
+ -I$(top_srcdir)/libnm-core \
+ -I$(top_builddir)/libnm-core \
-DG_LOG_DOMAIN=\""NetworkManager-ifcfg-suse"\" \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
-DSYSCONFDIR=\"$(sysconfdir)\"
@@ -483,11 +482,6 @@ libnm_settings_plugin_ifcfg_suse_la_SOURCES = \
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 \
- $(top_builddir)/libnm-glib/libnm-glib.la \
- $(GLIB_LIBS)
-
all: all-am
.SUFFIXES:
diff --git a/src/settings/plugins/ifcfg-suse/plugin.c b/src/settings/plugins/ifcfg-suse/plugin.c
index d6aa79fb5..a1667f645 100644
--- a/src/settings/plugins/ifcfg-suse/plugin.c
+++ b/src/settings/plugins/ifcfg-suse/plugin.c
@@ -22,7 +22,8 @@
* (C) Copyright 2007 - 2008 Novell, Inc.
*/
-#include <config.h>
+#include "config.h"
+
#include <string.h>
#include <gmodule.h>
@@ -55,17 +56,6 @@ typedef struct {
char *hostname;
} SCPluginIfcfgPrivate;
-GQuark
-ifcfg_plugin_error_quark (void)
-{
- static GQuark error_quark = 0;
-
- if (G_UNLIKELY (error_quark == 0))
- error_quark = g_quark_from_static_string ("ifcfg-plugin-error-quark");
-
- return error_quark;
-}
-
typedef void (*FileChangedFn) (gpointer user_data);
typedef struct {
@@ -148,7 +138,7 @@ hostname_is_dynamic (void)
}
static char *
-hostname_read ()
+hostname_read (void)
{
GIOChannel *channel;
char *hostname = NULL;
diff --git a/src/settings/plugins/ifcfg-suse/plugin.h b/src/settings/plugins/ifcfg-suse/plugin.h
index 4090a11e1..24dbff953 100644
--- a/src/settings/plugins/ifcfg-suse/plugin.h
+++ b/src/settings/plugins/ifcfg-suse/plugin.h
@@ -46,7 +46,5 @@ struct _SCPluginIfcfgClass {
GType sc_plugin_ifcfg_get_type (void);
-GQuark ifcfg_plugin_error_quark (void);
-
#endif /* _PLUGIN_H_ */
diff --git a/src/settings/plugins/ifnet/Makefile.am b/src/settings/plugins/ifnet/Makefile.am
index a22ea557a..b0cfd9a11 100644
--- a/src/settings/plugins/ifnet/Makefile.am
+++ b/src/settings/plugins/ifnet/Makefile.am
@@ -4,21 +4,15 @@ SUBDIRS = . tests
AM_CPPFLAGS = \
-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 \
+ -I$(top_srcdir)/libnm-core \
+ -I$(top_builddir)/libnm-core \
-DG_LOG_DOMAIN=\""NetworkManager-ifnet"\" \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
- $(DBUS_CFLAGS) \
- $(POLKIT_CFLAGS) \
- $(GUDEV_CFLAGS) \
-DSYSCONFDIR=\"$(sysconfdir)\"
-DSBINDIR=\"$(sbindir)\"
@@ -34,12 +28,7 @@ libnm_settings_plugin_ifnet_la_SOURCES = \
libnm_settings_plugin_ifnet_la_LDFLAGS = -module -avoid-version
-libnm_settings_plugin_ifnet_la_LIBADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(top_builddir)/libnm-glib/libnm-glib.la \
- lib-ifnet-io.la\
- $(GLIB_LIBS) \
- $(GUDEV_LIBS)
+libnm_settings_plugin_ifnet_la_LIBADD = lib-ifnet-io.la
lib_ifnet_io_la_SOURCES = \
net_parser.c\
@@ -49,10 +38,4 @@ lib_ifnet_io_la_SOURCES = \
net_utils.h\
net_utils.c\
wpa_parser.h\
- wpa_parser.c \
- errors.h \
- errors.c
-
-lib_ifnet_io_la_LIBADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(GLIB_LIBS)
+ wpa_parser.c
diff --git a/src/settings/plugins/ifnet/Makefile.in b/src/settings/plugins/ifnet/Makefile.in
index 6a6581896..11e9297f3 100644
--- a/src/settings/plugins/ifnet/Makefile.in
+++ b/src/settings/plugins/ifnet/Makefile.in
@@ -130,20 +130,15 @@ am__uninstall_files_from_dir = { \
}
am__installdirs = "$(DESTDIR)$(pkglibdir)"
LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkglib_LTLIBRARIES)
-am__DEPENDENCIES_1 =
-lib_ifnet_io_la_DEPENDENCIES = \
- $(top_builddir)/libnm-util/libnm-util.la $(am__DEPENDENCIES_1)
+lib_ifnet_io_la_LIBADD =
am_lib_ifnet_io_la_OBJECTS = net_parser.lo connection_parser.lo \
- net_utils.lo wpa_parser.lo errors.lo
+ net_utils.lo wpa_parser.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@)
am__v_lt_0 = --silent
am__v_lt_1 =
-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)
+libnm_settings_plugin_ifnet_la_DEPENDENCIES = lib-ifnet-io.la
am_libnm_settings_plugin_ifnet_la_OBJECTS = nm-ifnet-connection.lo \
plugin.lo
libnm_settings_plugin_ifnet_la_OBJECTS = \
@@ -266,6 +261,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -389,6 +386,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -408,6 +406,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -434,7 +433,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -516,21 +515,15 @@ 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/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 \
+ -I$(top_srcdir)/libnm-core \
+ -I$(top_builddir)/libnm-core \
-DG_LOG_DOMAIN=\""NetworkManager-ifnet"\" \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
- $(DBUS_CFLAGS) \
- $(POLKIT_CFLAGS) \
- $(GUDEV_CFLAGS) \
-DSYSCONFDIR=\"$(sysconfdir)\"
pkglib_LTLIBRARIES = libnm-settings-plugin-ifnet.la
@@ -542,13 +535,7 @@ libnm_settings_plugin_ifnet_la_SOURCES = \
plugin.h
libnm_settings_plugin_ifnet_la_LDFLAGS = -module -avoid-version
-libnm_settings_plugin_ifnet_la_LIBADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(top_builddir)/libnm-glib/libnm-glib.la \
- lib-ifnet-io.la\
- $(GLIB_LIBS) \
- $(GUDEV_LIBS)
-
+libnm_settings_plugin_ifnet_la_LIBADD = lib-ifnet-io.la
lib_ifnet_io_la_SOURCES = \
net_parser.c\
net_parser.h\
@@ -557,13 +544,7 @@ lib_ifnet_io_la_SOURCES = \
net_utils.h\
net_utils.c\
wpa_parser.h\
- wpa_parser.c \
- errors.h \
- errors.c
-
-lib_ifnet_io_la_LIBADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(GLIB_LIBS)
+ wpa_parser.c
all: all-recursive
@@ -659,7 +640,6 @@ 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)/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@
diff --git a/src/settings/plugins/ifnet/connection_parser.c b/src/settings/plugins/ifnet/connection_parser.c
index 85873d5f7..41baf3150 100644
--- a/src/settings/plugins/ifnet/connection_parser.c
+++ b/src/settings/plugins/ifnet/connection_parser.c
@@ -24,27 +24,18 @@
#include <string.h>
#include <arpa/inet.h>
#include <stdlib.h>
-#include <netinet/ether.h>
#include <errno.h>
#include <glib/gi18n.h>
-#include <nm-setting-connection.h>
-#include <nm-setting-ip4-config.h>
-#include <nm-setting-ip6-config.h>
-#include <nm-setting-ppp.h>
-#include <nm-setting-pppoe.h>
-#include <nm-setting-wired.h>
-#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 "nm-system-config-interface.h"
+#include "nm-logging.h"
+#include "nm-core-internal.h"
+#include "NetworkManagerUtils.h"
#include "net_utils.h"
#include "wpa_parser.h"
#include "connection_parser.h"
#include "nm-ifnet-connection.h"
-#include "errors.h"
static char *
connection_id_from_ifnet_name (const char *conn_name)
@@ -52,8 +43,16 @@ connection_id_from_ifnet_name (const char *conn_name)
int name_len = strlen (conn_name);
/* 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);
+ if ((name_len > 2) && (g_str_has_prefix (conn_name, "0x"))) {
+ GBytes *bytes = nm_utils_hexstr2bin (conn_name);
+ char *buf;
+
+ if (bytes) {
+ buf = g_strndup (g_bytes_get_data (bytes, NULL), g_bytes_get_size (bytes));
+ g_bytes_unref (bytes);
+ return buf;
+ }
+ }
return g_strdup (conn_name);
}
@@ -125,7 +124,7 @@ eap_simple_reader (const char *eap_method,
/* identity */
value = wpa_get_value (ssid, "identity");
if (!value) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Missing IEEE_8021X_IDENTITY for EAP method '%s'.",
eap_method);
return FALSE;
@@ -135,7 +134,7 @@ eap_simple_reader (const char *eap_method,
/* password */
value = wpa_get_value (ssid, "password");
if (!value) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Missing IEEE_8021X_PASSWORD for EAP method '%s'.",
eap_method);
return FALSE;
@@ -177,7 +176,7 @@ eap_tls_reader (const char *eap_method,
/* identity */
value = wpa_get_value (ssid, "identity");
if (!value) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Missing IEEE_8021X_IDENTITY for EAP method '%s'.",
eap_method);
return FALSE;
@@ -208,11 +207,11 @@ eap_tls_reader (const char *eap_method,
/* Private key password */
privkey_password = wpa_get_value (ssid,
- phase2 ? "private_key_passwd2" :
+ phase2 ? "private_key2_passwd" :
"private_key_passwd");
if (!privkey_password) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Missing %s for EAP method '%s'.",
phase2 ? "IEEE_8021X_INNER_PRIVATE_KEY_PASSWORD" :
"IEEE_8021X_PRIVATE_KEY_PASSWORD", eap_method);
@@ -222,7 +221,7 @@ eap_tls_reader (const char *eap_method,
/* The private key itself */
privkey = get_cert (ssid, phase2 ? "private_key2" : "private_key", basepath);
if (!privkey) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Missing %s for EAP method '%s'.",
phase2 ? "IEEE_8021X_INNER_PRIVATE_KEY" :
"IEEE_8021X_PRIVATE_KEY", eap_method);
@@ -255,7 +254,7 @@ eap_tls_reader (const char *eap_method,
|| privkey_format == NM_SETTING_802_1X_CK_FORMAT_X509) {
client_cert = get_cert (ssid, phase2 ? "client_cert2" : "client_cert", basepath);
if (!client_cert) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Missing %s for EAP method '%s'.",
phase2 ? "IEEE_8021X_INNER_CLIENT_CERT" :
"IEEE_8021X_CLIENT_CERT", eap_method);
@@ -323,7 +322,7 @@ eap_peap_reader (const char *eap_method,
g_object_set (s_8021x, NM_SETTING_802_1X_PHASE1_PEAPVER,
"1", NULL);
else {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Unknown IEEE_8021X_PEAP_VERSION value '%s'",
peapver);
goto done;
@@ -337,7 +336,7 @@ eap_peap_reader (const char *eap_method,
inner_auth = wpa_get_value (ssid, "phase2");
if (!inner_auth) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Missing IEEE_8021X_INNER_AUTH_METHODS.");
goto done;
}
@@ -358,7 +357,7 @@ eap_peap_reader (const char *eap_method,
if (!eap_tls_reader (pos, ssid, s_8021x, TRUE, basepath, error))
goto done;
} else {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Unknown IEEE_8021X_INNER_AUTH_METHOD '%s'.",
*iter);
goto done;
@@ -374,7 +373,7 @@ eap_peap_reader (const char *eap_method,
}
if (!nm_setting_802_1x_get_phase2_auth (s_8021x)) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"No valid IEEE_8021X_INNER_AUTH_METHODS found.");
goto done;
}
@@ -423,7 +422,7 @@ eap_ttls_reader (const char *eap_method,
tmp = wpa_get_value (ssid, "phase2");
if (!tmp) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Missing IEEE_8021X_INNER_AUTH_METHODS.");
goto done;
}
@@ -458,7 +457,7 @@ eap_ttls_reader (const char *eap_method,
g_object_set (s_8021x, NM_SETTING_802_1X_PHASE2_AUTHEAP,
pos, NULL);
} else {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Unknown IEEE_8021X_INNER_AUTH_METHOD '%s'.",
*iter);
goto done;
@@ -499,20 +498,20 @@ guess_connection_type (const char *conn_name)
/* Reading mac address for setting connection option.
* Unmanaged device mac address is required by NetworkManager*/
static gboolean
-read_mac_address (const char *conn_name, GByteArray **array, GError **error)
+read_mac_address (const char *conn_name, const char **mac, GError **error)
{
const char *value = ifnet_get_data (conn_name, "mac");
if (!value || !strlen (value))
return TRUE;
- *array = nm_utils_hwaddr_atoba (value, ARPHRD_ETHER);
- if (!*array) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
- "The MAC address '%s' was invalid.", value);
+ if (!nm_utils_hwaddr_valid (value, ETH_ALEN)) {
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "The MAC address '%s' was invalid.", value);
return FALSE;
}
+ *mac = value;
return TRUE;
}
@@ -521,7 +520,7 @@ make_wired_connection_setting (NMConnection *connection,
const char *conn_name,
GError **error)
{
- GByteArray *mac = NULL;
+ const char *mac = NULL;
NMSettingWired *s_wired = NULL;
const char *value = NULL;
@@ -545,7 +544,6 @@ make_wired_connection_setting (NMConnection *connection,
if (mac) {
g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS,
mac, NULL);
- g_byte_array_free (mac, TRUE);
}
} else {
g_object_unref (s_wired);
@@ -555,56 +553,56 @@ make_wired_connection_setting (NMConnection *connection,
nm_connection_add_setting (connection, NM_SETTING (s_wired));
}
-/* add NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME,
- * NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID in future*/
+/* add NM_SETTING_IP_CONFIG_DHCP_HOSTNAME,
+ * NM_SETTING_IP_CONFIG_DHCP_CLIENT_ID in future*/
static void
make_ip4_setting (NMConnection *connection,
const char *conn_name,
GError **error)
{
- NMSettingIP4Config *ip4_setting =
- NM_SETTING_IP4_CONFIG (nm_setting_ip4_config_new ());
+ NMSettingIPConfig *ip4_setting =
+ NM_SETTING_IP_CONFIG (nm_setting_ip4_config_new ());
const char *value, *method = NULL;
gboolean is_static_block = is_static_ip4 (conn_name);
ip_block *iblock = NULL;
/* set dhcp options (dhcp_xxx) */
value = ifnet_get_data (conn_name, "dhcp");
- g_object_set (ip4_setting, NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS, value
+ g_object_set (ip4_setting, NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS, value
&& strstr (value, "nodns") ? TRUE : FALSE,
- NM_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES, value
+ NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES, value
&& strstr (value, "nogateway") ? TRUE : FALSE, NULL);
if (!is_static_block) {
method = ifnet_get_data (conn_name, "config");
if (!method){
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Unknown config for %s", conn_name);
g_object_unref (ip4_setting);
return;
}
if (strstr (method, "dhcp"))
g_object_set (ip4_setting,
- NM_SETTING_IP4_CONFIG_METHOD,
+ NM_SETTING_IP_CONFIG_METHOD,
NM_SETTING_IP4_CONFIG_METHOD_AUTO,
- NM_SETTING_IP4_CONFIG_NEVER_DEFAULT, FALSE, NULL);
+ NM_SETTING_IP_CONFIG_NEVER_DEFAULT, FALSE, NULL);
else if (strstr (method, "autoip")) {
g_object_set (ip4_setting,
- NM_SETTING_IP4_CONFIG_METHOD,
+ NM_SETTING_IP_CONFIG_METHOD,
NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL,
- NM_SETTING_IP4_CONFIG_NEVER_DEFAULT, FALSE, NULL);
+ NM_SETTING_IP_CONFIG_NEVER_DEFAULT, FALSE, NULL);
nm_connection_add_setting (connection, NM_SETTING (ip4_setting));
return;
} else if (strstr (method, "shared")) {
g_object_set (ip4_setting,
- NM_SETTING_IP4_CONFIG_METHOD,
+ NM_SETTING_IP_CONFIG_METHOD,
NM_SETTING_IP4_CONFIG_METHOD_SHARED,
- NM_SETTING_IP4_CONFIG_NEVER_DEFAULT, FALSE, NULL);
+ NM_SETTING_IP_CONFIG_NEVER_DEFAULT, FALSE, NULL);
nm_connection_add_setting (connection, NM_SETTING (ip4_setting));
return;
} else {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Unknown config for %s", conn_name);
g_object_unref (ip4_setting);
return;
@@ -613,7 +611,7 @@ make_ip4_setting (NMConnection *connection,
}else {
iblock = convert_ip4_config_block (conn_name);
if (!iblock) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Ifnet plugin: can't aquire ip configuration for %s",
conn_name);
g_object_unref (ip4_setting);
@@ -622,29 +620,32 @@ make_ip4_setting (NMConnection *connection,
/************** add all ip settings to the connection**********/
while (iblock) {
ip_block *current_iblock;
- NMIP4Address *ip4_addr = nm_ip4_address_new ();
-
- nm_ip4_address_set_address (ip4_addr, iblock->ip);
- nm_ip4_address_set_prefix (ip4_addr,
- nm_utils_ip4_netmask_to_prefix
- (iblock->netmask));
- /* currently all the IPs has the same gateway */
- nm_ip4_address_set_gateway (ip4_addr, iblock->gateway);
- if (iblock->gateway)
+ NMIPAddress *ip4_addr;
+ GError *local = NULL;
+
+ ip4_addr = nm_ip_address_new (AF_INET, iblock->ip, iblock->prefix, &local);
+ if (iblock->next_hop)
g_object_set (ip4_setting,
- NM_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES,
+ NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES,
TRUE, NULL);
- if (!nm_setting_ip4_config_add_address (ip4_setting, ip4_addr))
- nm_log_warn (LOGD_SETTINGS, "ignoring duplicate IP4 address");
- nm_ip4_address_unref (ip4_addr);
+
+ if (ip4_addr) {
+ if (!nm_setting_ip_config_add_address (ip4_setting, ip4_addr))
+ nm_log_warn (LOGD_SETTINGS, "ignoring duplicate IP4 address");
+ nm_ip_address_unref (ip4_addr);
+ } else {
+ nm_log_warn (LOGD_SETTINGS, " ignoring invalid address entry: %s", local->message);
+ g_clear_error (&local);
+ }
+
current_iblock = iblock;
iblock = iblock->next;
destroy_ip_block (current_iblock);
}
g_object_set (ip4_setting,
- NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
- NM_SETTING_IP4_CONFIG_NEVER_DEFAULT, !has_default_ip4_route (conn_name),
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
+ NM_SETTING_IP_CONFIG_NEVER_DEFAULT, !has_default_ip4_route (conn_name),
NULL);
}
@@ -655,7 +656,7 @@ make_ip4_setting (NMConnection *connection,
get_dhcp_hostname_and_client_id (&dhcp_hostname, &client_id);
if (dhcp_hostname) {
g_object_set (ip4_setting,
- NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME,
+ NM_SETTING_IP_CONFIG_DHCP_HOSTNAME,
dhcp_hostname, NULL);
nm_log_info (LOGD_SETTINGS, "DHCP hostname: %s", dhcp_hostname);
g_free (dhcp_hostname);
@@ -686,7 +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))
+ if (!nm_setting_ip_config_add_dns_search (ip4_setting, *item))
nm_log_warn (LOGD_SETTINGS, " duplicate DNS domain '%s'", *item);
}
}
@@ -700,34 +701,34 @@ make_ip4_setting (NMConnection *connection,
ip_block *current_iblock = iblock;
const char *metric_str;
char *stripped;
- long int metric;
- NMIP4Route *route = nm_ip4_route_new ();
-
- nm_ip4_route_set_dest (route, iblock->ip);
- nm_ip4_route_set_next_hop (route, iblock->gateway);
- nm_ip4_route_set_prefix (route,
- nm_utils_ip4_netmask_to_prefix
- (iblock->netmask));
+ gint64 metric;
+ NMIPRoute *route;
+ GError *local = NULL;
+
if ((metric_str = ifnet_get_data (conn_name, "metric")) != NULL) {
- metric = strtol (metric_str, NULL, 10);
- nm_ip4_route_set_metric (route, (guint32) metric);
+ metric = nm_utils_ascii_str_to_int64 (metric_str, 10, 0, G_MAXUINT32, -1);
} else {
metric_str = ifnet_get_global_data ("metric");
if (metric_str) {
stripped = g_strdup (metric_str);
strip_string (stripped, '"');
- metric = strtol (metric_str, NULL, 10);
- nm_ip4_route_set_metric (route,
- (guint32) metric);
+ metric = nm_utils_ascii_str_to_int64 (metric_str, 10, 0, G_MAXUINT32, -1);
g_free (stripped);
- }
+ } else
+ metric = -1;
}
- if (!nm_setting_ip4_config_add_route (ip4_setting, route))
- 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);
+ route = nm_ip_route_new (AF_INET, iblock->ip, iblock->prefix, iblock->next_hop, metric, &local);
+ if (route) {
+ if (nm_setting_ip_config_add_route (ip4_setting, route))
+ nm_log_info (LOGD_SETTINGS, "new IP4 route:%s\n", iblock->ip);
+ else
+ nm_log_warn (LOGD_SETTINGS, "duplicate IP4 route");
+ nm_ip_route_unref (route);
+ } else {
+ nm_log_warn (LOGD_SETTINGS, " ignoring invalid route entry: %s", local->message);
+ g_clear_error (&local);
+ }
current_iblock = iblock;
iblock = iblock->next;
@@ -743,17 +744,17 @@ make_ip6_setting (NMConnection *connection,
const char *conn_name,
GError **error)
{
- NMSettingIP6Config *s_ip6 = NULL;
+ NMSettingIPConfig *s_ip6 = NULL;
gboolean is_static_block = is_static_ip6 (conn_name);
// used to disable IPv6
gboolean ipv6_enabled = FALSE;
gchar *method = NM_SETTING_IP6_CONFIG_METHOD_MANUAL;
const char *value;
- ip6_block *iblock;
+ ip_block *iblock;
gboolean never_default = !has_default_ip6_route (conn_name);
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new ();
value = ifnet_get_data (conn_name, "enable_ipv6");
if (value && is_true (value))
@@ -763,7 +764,7 @@ make_ip6_setting (NMConnection *connection,
// Currently only Manual and DHCP are supported
if (!ipv6_enabled) {
g_object_set (s_ip6,
- NM_SETTING_IP6_CONFIG_METHOD,
+ NM_SETTING_IP_CONFIG_METHOD,
NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL);
goto done;
} else if (!is_static_block) {
@@ -780,91 +781,98 @@ make_ip6_setting (NMConnection *connection,
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,
- NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS, FALSE,
- NM_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES, FALSE,
- NM_SETTING_IP6_CONFIG_NEVER_DEFAULT, never_default, NULL);
+ NM_SETTING_IP_CONFIG_METHOD, method,
+ NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS, FALSE,
+ NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES, FALSE,
+ NM_SETTING_IP_CONFIG_NEVER_DEFAULT, never_default, NULL);
/* Make manual settings */
if (!strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_MANUAL)) {
- ip6_block *current_iblock;
+ ip_block *current_iblock;
iblock = convert_ip6_config_block (conn_name);
if (!iblock) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Ifnet plugin: can't aquire ip6 configuration for %s",
conn_name);
goto error;
}
/* add all IPv6 addresses */
while (iblock) {
- NMIP6Address *ip6_addr = nm_ip6_address_new ();
-
- 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)) {
- nm_log_info (LOGD_SETTINGS, "ipv6 addresses count: %d",
- nm_setting_ip6_config_get_num_addresses (s_ip6));
+ NMIPAddress *ip6_addr;
+ GError *local = NULL;
+
+ ip6_addr = nm_ip_address_new (AF_INET6, iblock->ip, iblock->prefix, &local);
+ if (ip6_addr) {
+ if (nm_setting_ip_config_add_address (s_ip6, ip6_addr)) {
+ nm_log_info (LOGD_SETTINGS, "ipv6 addresses count: %d",
+ nm_setting_ip_config_get_num_addresses (s_ip6));
+ } else {
+ nm_log_warn (LOGD_SETTINGS, "ignoring duplicate IP6 address");
+ }
+ nm_ip_address_unref (ip6_addr);
} else {
- nm_log_warn (LOGD_SETTINGS, "ignoring duplicate IP4 address");
+ nm_log_warn (LOGD_SETTINGS, " ignoring invalid address entry: %s", local->message);
+ g_clear_error (&local);
}
- nm_ip6_address_unref (ip6_addr);
+
current_iblock = iblock;
iblock = iblock->next;
- destroy_ip6_block (current_iblock);
+ destroy_ip_block (current_iblock);
}
} else if (!strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_AUTO)) {
/* - autoconf or DHCPv6 stuff goes here */
}
- // DNS Servers, set NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS TRUE here
+ // DNS Servers, set NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS TRUE here
set_ip6_dns_servers (s_ip6, conn_name);
- /* DNS searches ('DOMAIN' key) are read by make_ip4_setting() and included in NMSettingIP4Config */
+ /* DNS searches ('DOMAIN' key) are read by make_ip4_setting() and included in NMSettingIPConfig */
// Add routes
iblock = convert_ip6_routes_block (conn_name);
if (iblock)
- g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES,
+ g_object_set (s_ip6, NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES,
TRUE, NULL);
/* Add all IPv6 routes */
while (iblock) {
- ip6_block *current_iblock = iblock;
+ ip_block *current_iblock = iblock;
const char *metric_str;
char *stripped;
- long int metric = 1;
- NMIP6Route *route = nm_ip6_route_new ();
+ gint64 metric;
+ NMIPRoute *route;
+ GError *local = NULL;
- nm_ip6_route_set_dest (route, iblock->ip);
- nm_ip6_route_set_next_hop (route, iblock->next_hop);
- nm_ip6_route_set_prefix (route, iblock->prefix);
/* metric is not per routes configuration right now
* global metric is also supported (metric="x") */
- if ((metric_str = ifnet_get_data (conn_name, "metric")) != NULL) {
- metric = strtol (metric_str, NULL, 10);
- nm_ip6_route_set_metric (route, (guint32) metric);
- } else {
+ if ((metric_str = ifnet_get_data (conn_name, "metric")) != NULL)
+ metric = nm_utils_ascii_str_to_int64 (metric_str, 10, 0, G_MAXUINT32, -1);
+ else {
metric_str = ifnet_get_global_data ("metric");
if (metric_str) {
stripped = g_strdup (metric_str);
strip_string (stripped, '"');
- metric = strtol (metric_str, NULL, 10);
- nm_ip6_route_set_metric (route,
- (guint32) metric);
+ metric = nm_utils_ascii_str_to_int64 (metric_str, 10, 0, G_MAXUINT32, -1);
g_free (stripped);
} else
- nm_ip6_route_set_metric (route, (guint32) 1);
+ metric = 1;
}
- 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);
+ route = nm_ip_route_new (AF_INET6, iblock->ip, iblock->prefix, iblock->next_hop, metric, &local);
+ if (route) {
+ if (nm_setting_ip_config_add_route (s_ip6, route))
+ nm_log_info (LOGD_SETTINGS, " new IP6 route");
+ else
+ nm_log_warn (LOGD_SETTINGS, " duplicate IP6 route");
+ nm_ip_route_unref (route);
+ } else {
+ nm_log_warn (LOGD_SETTINGS, " ignoring invalid route entry: %s", local->message);
+ g_clear_error (&local);
+ }
current_iblock = iblock;
iblock = iblock->next;
- destroy_ip6_block (current_iblock);
+ destroy_ip_block (current_iblock);
}
done:
@@ -882,7 +890,7 @@ make_wireless_connection_setting (const char *conn_name,
NMSetting8021x **s_8021x,
GError **error)
{
- GByteArray *array, *mac = NULL;
+ const char *mac = NULL;
NMSettingWireless *wireless_setting = NULL;
gboolean adhoc = FALSE;
const char *value;
@@ -904,8 +912,6 @@ make_wireless_connection_setting (const char *conn_name,
g_object_set (wireless_setting,
NM_SETTING_WIRELESS_MAC_ADDRESS, mac,
NULL);
- g_byte_array_free (mac, TRUE);
-
}
} else {
g_object_unref (wireless_setting);
@@ -914,51 +920,41 @@ make_wireless_connection_setting (const char *conn_name,
/* handle ssid (hex and ascii) */
if (conn_name) {
+ GBytes *bytes;
gsize ssid_len = 0, value_len = strlen (conn_name);
- const char *p;
- char *tmp, *converted = NULL;
ssid_len = value_len;
if ((value_len > 2) && (g_str_has_prefix (conn_name, "0x"))) {
/* Hex representation */
if (value_len % 2) {
- g_set_error (error, ifnet_plugin_error_quark (),
- 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Invalid SSID '%s' size (looks like hex but length not multiple of 2)",
conn_name);
goto error;
}
- // ignore "0x"
- p = conn_name + 2;
- if (!is_hex (p)) {
- g_set_error (error,
- ifnet_plugin_error_quark (),
- 0,
- "Invalid SSID '%s' character (looks like hex SSID but '%c' isn't a hex digit)",
- conn_name, *p);
- goto error;
+ bytes = nm_utils_hexstr2bin (conn_name);
+ if (!bytes) {
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "Invalid SSID '%s' (looks like hex SSID but isn't)",
+ conn_name);
+ goto error;
}
- 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);
- g_free (tmp);
- }
+ } else
+ bytes = g_bytes_new (conn_name, value_len);
+ ssid_len = g_bytes_get_size (bytes);
if (ssid_len > 32 || ssid_len == 0) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Invalid SSID '%s' (size %zu not between 1 and 32 inclusive)",
conn_name, ssid_len);
goto error;
}
- array = g_byte_array_sized_new (ssid_len);
- g_byte_array_append (array, (const guint8 *) (converted ? converted : conn_name), ssid_len);
- g_object_set (wireless_setting, NM_SETTING_WIRELESS_SSID, array, NULL);
- g_byte_array_free (array, TRUE);
- g_free (converted);
+
+ g_object_set (wireless_setting, NM_SETTING_WIRELESS_SSID, bytes, NULL);
+ g_bytes_unref (bytes);
} else {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Missing SSID");
goto error;
}
@@ -980,18 +976,14 @@ make_wireless_connection_setting (const char *conn_name,
/* BSSID setting */
value = wpa_get_value (conn_name, "bssid");
if (value) {
- GByteArray *bssid;
-
- bssid = nm_utils_hwaddr_atoba (value, ARPHRD_ETHER);
- if (!bssid) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ if (!nm_utils_hwaddr_valid (value, ETH_ALEN)) {
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Invalid BSSID '%s'", value);
goto error;
}
g_object_set (wireless_setting, NM_SETTING_WIRELESS_BSSID,
- bssid, NULL);
- g_byte_array_free (bssid, TRUE);
+ value, NULL);
}
@@ -1043,7 +1035,7 @@ make_leap_setting (const char *ssid, GError **error)
value = wpa_get_value (ssid, "identity");
if (!value || !strlen (value)) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Missing LEAP identity");
goto error;
}
@@ -1085,8 +1077,8 @@ add_one_wep_key (const char *ssid,
if (strlen (value) == 10 || strlen (value) == 26) {
/* Hexadecimal WEP key */
if (!is_hex (value)) {
- g_set_error (error, ifnet_plugin_error_quark (),
- 0, "Invalid hexadecimal WEP key.");
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "Invalid hexadecimal WEP key.");
goto out;
}
converted = g_strdup (value);
@@ -1097,17 +1089,17 @@ add_one_wep_key (const char *ssid,
char *p = strip_string (tmp, '"');
if (!is_ascii (p)) {
- g_set_error (error, ifnet_plugin_error_quark (),
- 0, "Invalid ASCII WEP passphrase.");
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "Invalid ASCII WEP passphrase.");
g_free (tmp);
goto out;
}
- converted = nm_utils_bin2hexstr (tmp, strlen (tmp), strlen (tmp) * 2);
+ converted = nm_utils_bin2hexstr (tmp, strlen (tmp), -1);
g_free (tmp);
} else {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Invalid WEP key length. Key: %s", value);
goto out;
}
@@ -1161,7 +1153,7 @@ make_wep_setting (const char *ssid, GError **error)
default_key_idx, NULL);
nm_log_info (LOGD_SETTINGS, "Default key index: %d", default_key_idx);
} else {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Invalid default WEP key '%s'", value);
goto error;
}
@@ -1173,19 +1165,19 @@ make_wep_setting (const char *ssid, GError **error)
/* If there's a default key, ensure that key exists */
if ((default_key_idx == 1)
&& !nm_setting_wireless_security_get_wep_key (s_wireless_sec, 1)) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Default WEP key index was 2, but no valid KEY2 exists.");
goto error;
} else if ((default_key_idx == 2)
&& !nm_setting_wireless_security_get_wep_key (s_wireless_sec,
2)) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Default WEP key index was 3, but no valid KEY3 exists.");
goto error;
} else if ((default_key_idx == 3)
&& !nm_setting_wireless_security_get_wep_key (s_wireless_sec,
3)) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Default WEP key index was 4, but no valid KEY4 exists.");
goto error;
}
@@ -1204,7 +1196,7 @@ make_wep_setting (const char *ssid, GError **error)
"shared", NULL);
nm_log_info (LOGD_SETTINGS, "WEP: Use shared system authentication");
} else {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Invalid WEP authentication algorithm '%s'",
auth_alg);
goto error;
@@ -1218,7 +1210,7 @@ make_wep_setting (const char *ssid, GError **error)
&& !nm_setting_wireless_security_get_wep_key (s_wireless_sec, 3)
&& !nm_setting_wireless_security_get_wep_tx_keyidx (s_wireless_sec)) {
if (auth_alg && !strcmp (auth_alg, "shared")) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"WEP Shared Key authentication is invalid for "
"unencrypted connections.");
goto error;
@@ -1242,7 +1234,7 @@ parse_wpa_psk (const char *psk, GError **error)
gboolean quoted = FALSE;
if (!psk) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Missing WPA_PSK for WPA-PSK key management");
return NULL;
}
@@ -1258,9 +1250,8 @@ parse_wpa_psk (const char *psk, GError **error)
if (!quoted && (strlen (psk) == 64)) {
/* Verify the hex PSK; 64 digits */
if (!is_hex (psk)) {
- g_set_error (error, ifnet_plugin_error_quark (),
- 0,
- "Invalid WPA_PSK (contains non-hexadecimal characters)");
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "Invalid WPA_PSK (contains non-hexadecimal characters)");
goto out;
}
hashed = g_strdup (psk);
@@ -1271,7 +1262,7 @@ parse_wpa_psk (const char *psk, GError **error)
/* Length check */
if (strlen (stripped) < 8 || strlen (stripped) > 63) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Invalid WPA_PSK (passphrases must be between "
"8 and 63 characters long (inclusive))");
g_free (stripped);
@@ -1283,7 +1274,7 @@ parse_wpa_psk (const char *psk, GError **error)
}
if (!hashed) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Invalid WPA_PSK (doesn't look like a passphrase or hex key)");
goto out;
}
@@ -1367,7 +1358,7 @@ fill_8021x (const char *ssid,
value = wpa_get_value (ssid, "eap");
if (!value) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Missing IEEE_8021X_EAP_METHODS for key management '%s'",
key_mgmt);
return NULL;
@@ -1383,7 +1374,7 @@ fill_8021x (const char *ssid,
char *lower = NULL;
lower = g_ascii_strdown (*iter, -1);
- while (eap->method && !found) {
+ while (eap->method) {
if (strcmp (eap->method, lower))
goto next;
@@ -1404,6 +1395,7 @@ fill_8021x (const char *ssid,
}
nm_setting_802_1x_add_eap_method (s_8021x, lower);
found = TRUE;
+ break;
next:
eap++;
@@ -1417,7 +1409,7 @@ fill_8021x (const char *ssid,
g_strfreev (list);
if (nm_setting_802_1x_get_num_eap_methods (s_8021x) == 0) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"No valid EAP methods found in IEEE_8021X_EAP_METHODS.");
goto error;
}
@@ -1441,7 +1433,7 @@ make_wpa_setting (const char *ssid,
gboolean adhoc = FALSE;
if (!exist_ssid (ssid)) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"No security info found for ssid: %s", ssid);
return NULL;
}
@@ -1493,7 +1485,7 @@ make_wpa_setting (const char *ssid,
"wpa-psk", NULL);
} else if (!strcmp (value, "WPA-EAP") || !strcmp (value, "IEEE8021X")) {
if (adhoc) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Ad-Hoc mode cannot be used with KEY_MGMT type '%s'",
value);
goto error;
@@ -1507,7 +1499,7 @@ make_wpa_setting (const char *ssid,
lower, NULL);
g_free (lower);
} else {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Unknown wireless KEY_MGMT type '%s'", value);
goto error;
}
@@ -1558,7 +1550,7 @@ make_wireless_security_setting (const char *conn_name,
}
if (!wsec) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Can't handle security information for ssid: %s",
conn_name);
}
@@ -1574,8 +1566,8 @@ make_pppoe_connection_setting (NMConnection *connection,
const char *conn_name,
GError **error)
{
- NMSettingPPPOE *s_pppoe;
- NMSettingPPP *s_ppp;
+ NMSettingPppoe *s_pppoe;
+ NMSettingPpp *s_ppp;
const char *value;
s_pppoe = NM_SETTING_PPPOE (nm_setting_pppoe_new ());
@@ -1583,7 +1575,7 @@ make_pppoe_connection_setting (NMConnection *connection,
/* username */
value = ifnet_get_data (conn_name, "username");
if (!value) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"ppp requires at lease a username");
return;
}
@@ -1599,7 +1591,7 @@ make_pppoe_connection_setting (NMConnection *connection,
nm_connection_add_setting (connection, NM_SETTING (s_pppoe));
/* PPP setting */
- s_ppp = (NMSettingPPP *) nm_setting_ppp_new ();
+ s_ppp = (NMSettingPpp *) nm_setting_ppp_new ();
nm_connection_add_setting (connection, NM_SETTING (s_ppp));
}
@@ -1618,7 +1610,7 @@ ifnet_update_connection_from_config_block (const char *conn_name,
gchar *id, *uuid;
gboolean success = FALSE;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
setting = nm_connection_get_setting_connection (connection);
if (!setting) {
setting = NM_SETTING_CONNECTION (nm_setting_connection_new ());
@@ -1637,7 +1629,7 @@ ifnet_update_connection_from_config_block (const char *conn_name,
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);
+ uuid = nm_utils_uuid_generate_from_string (id, -1, NM_UTILS_UUID_TYPE_LEGACY, NULL);
g_object_set (setting,
NM_SETTING_CONNECTION_TYPE, type,
@@ -1727,7 +1719,7 @@ error:
typedef NMSetting8021xCKScheme (*SchemeFunc) (NMSetting8021x * setting);
typedef const char *(*PathFunc) (NMSetting8021x * setting);
-typedef const GByteArray *(*BlobFunc) (NMSetting8021x * setting);
+typedef GBytes *(*BlobFunc) (NMSetting8021x * setting);
typedef struct ObjectType {
const char *setting_key;
@@ -1813,13 +1805,13 @@ static const ObjectType phase2_p12_type = {
static gboolean
write_object (NMSetting8021x *s_8021x,
const char *conn_name,
- const GByteArray *override_data,
+ GBytes *override_data,
const ObjectType *objtype,
GError **error)
{
NMSetting8021xCKScheme scheme;
const char *path = NULL;
- const GByteArray *blob = NULL;
+ GBytes *blob = NULL;
g_return_val_if_fail (conn_name != NULL, FALSE);
g_return_val_if_fail (objtype != NULL, FALSE);
@@ -1867,8 +1859,8 @@ write_8021x_certs (NMSetting8021x *s_8021x,
char *password = NULL;
const ObjectType *otype = NULL;
gboolean is_pkcs12 = FALSE, success = FALSE;
- const GByteArray *blob = NULL;
- GByteArray *enc_key = NULL;
+ GBytes *blob = NULL;
+ GBytes *enc_key = NULL;
gchar *generated_pw = NULL;
/* CA certificate */
@@ -1915,13 +1907,17 @@ write_8021x_certs (NMSetting8021x *s_8021x,
* private key file, it'll be encrypted, so we don't need to re-encrypt.
*/
if (blob && !is_pkcs12) {
+ GByteArray *tmp_enc_key;
+
/* Encrypt the unencrypted private key with the fake password */
- enc_key =
- nm_utils_rsa_key_encrypt (blob, password, &generated_pw,
- error);
- if (!enc_key)
+ tmp_enc_key =
+ nm_utils_rsa_key_encrypt (g_bytes_get_data (blob, NULL), g_bytes_get_size (blob),
+ password, &generated_pw, error);
+ if (!tmp_enc_key)
goto out;
+ enc_key = g_byte_array_free_to_bytes (tmp_enc_key);
+
if (generated_pw)
password = generated_pw;
}
@@ -1932,7 +1928,7 @@ write_8021x_certs (NMSetting8021x *s_8021x,
goto out;
if (phase2)
- wpa_set_data (conn_name, "private_key_passwd2", password);
+ wpa_set_data (conn_name, "private_key2_passwd", password);
else
wpa_set_data (conn_name, "private_key_passwd", password);
@@ -1958,8 +1954,8 @@ out:
g_free (generated_pw);
}
if (enc_key) {
- memset (enc_key->data, 0, enc_key->len);
- g_byte_array_free (enc_key, TRUE);
+ memset ((gpointer) g_bytes_get_data (enc_key, NULL), 0, g_bytes_get_size (enc_key));
+ g_bytes_unref (enc_key);
}
return success;
}
@@ -2073,7 +2069,7 @@ write_wireless_security_setting (NMConnection * connection,
s_wsec = nm_connection_get_setting_wireless_security (connection);
if (!s_wsec) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Missing '%s' setting",
NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
return FALSE;
@@ -2230,8 +2226,10 @@ write_wireless_setting (NMConnection *connection,
GError **error)
{
NMSettingWireless *s_wireless;
- const GByteArray *ssid, *mac, *bssid;
- const char *mode;
+ GBytes *ssid;
+ const guint8 *ssid_data;
+ gsize ssid_len;
+ const char *mac, *bssid, *mode;
char buf[33];
guint32 mtu, i;
gboolean adhoc = FALSE, hex_ssid = FALSE;
@@ -2239,7 +2237,7 @@ write_wireless_setting (NMConnection *connection,
s_wireless = nm_connection_get_setting_wireless (connection);
if (!s_wireless) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Missing '%s' setting",
NM_SETTING_WIRELESS_SETTING_NAME);
return FALSE;
@@ -2247,13 +2245,14 @@ write_wireless_setting (NMConnection *connection,
ssid = nm_setting_wireless_get_ssid (s_wireless);
if (!ssid) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Missing SSID in '%s' setting",
NM_SETTING_WIRELESS_SETTING_NAME);
return FALSE;
}
- if (!ssid->len || ssid->len > 32) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ ssid_data = g_bytes_get_data (ssid, &ssid_len);
+ if (!ssid_len || ssid_len > 32) {
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Invalid SSID in '%s' setting",
NM_SETTING_WIRELESS_SETTING_NAME);
return FALSE;
@@ -2263,8 +2262,8 @@ write_wireless_setting (NMConnection *connection,
* the hex notation of the SSID instead. (Because openrc doesn't
* support these characters, see bug #356337)
*/
- for (i = 0; i < ssid->len; i++) {
- if (!g_ascii_isalnum (ssid->data[i])) {
+ for (i = 0; i < ssid_len; i++) {
+ if (!g_ascii_isalnum (ssid_data[i])) {
hex_ssid = TRUE;
break;
}
@@ -2274,16 +2273,16 @@ write_wireless_setting (NMConnection *connection,
GString *str;
/* Hex SSIDs don't get quoted */
- str = g_string_sized_new (ssid->len * 2 + 3);
+ str = g_string_sized_new (ssid_len * 2 + 3);
g_string_append (str, "0x");
- for (i = 0; i < ssid->len; i++)
- g_string_append_printf (str, "%02X", ssid->data[i]);
+ for (i = 0; i < ssid_len; i++)
+ g_string_append_printf (str, "%02X", ssid_data[i]);
update_wireless_ssid (connection, conn_name, str->str, hex_ssid);
ssid_str = g_string_free (str, FALSE);
} else {
/* Printable SSIDs get quoted */
memset (buf, 0, sizeof (buf));
- memcpy (buf, ssid->data, ssid->len);
+ memcpy (buf, ssid_data, ssid_len);
g_strstrip (buf);
update_wireless_ssid (connection, conn_name, buf, hex_ssid);
ssid_str = g_strdup (buf);
@@ -2291,11 +2290,8 @@ write_wireless_setting (NMConnection *connection,
ifnet_set_data (ssid_str, "mac", NULL);
mac = nm_setting_wireless_get_mac_address (s_wireless);
- if (mac) {
- tmp = nm_utils_hwaddr_ntoa_len (mac->data, mac->len);
- ifnet_set_data (ssid_str, "mac", tmp);
- g_free (tmp);
- }
+ if (mac)
+ ifnet_set_data (ssid_str, "mac", mac);
ifnet_set_data (ssid_str, "mtu", NULL);
mtu = nm_setting_wireless_get_mtu (s_wireless);
@@ -2320,11 +2316,8 @@ write_wireless_setting (NMConnection *connection,
wpa_set_data (ssid_str, "bssid", NULL);
bssid = nm_setting_wireless_get_bssid (s_wireless);
- if (bssid) {
- tmp = nm_utils_hwaddr_ntoa_len (bssid->data, bssid->len);
- wpa_set_data (ssid_str, "bssid", tmp);
- g_free (tmp);
- }
+ if (bssid)
+ wpa_set_data (ssid_str, "bssid", bssid);
if (nm_connection_get_setting_wireless_security (connection)) {
if (!write_wireless_security_setting
@@ -2345,13 +2338,13 @@ write_wired_setting (NMConnection *connection,
GError **error)
{
NMSettingWired *s_wired;
- const GByteArray *mac;
+ const char *mac;
char *tmp;
guint32 mtu;
s_wired = nm_connection_get_setting_wired (connection);
if (!s_wired) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Missing '%s' setting",
NM_SETTING_WIRED_SETTING_NAME);
return FALSE;
@@ -2359,11 +2352,8 @@ write_wired_setting (NMConnection *connection,
ifnet_set_data (conn_name, "mac", NULL);
mac = nm_setting_wired_get_mac_address (s_wired);
- if (mac) {
- tmp = nm_utils_hwaddr_ntoa_len (mac->data, mac->len);
- ifnet_set_data (conn_name, "mac", tmp);
- g_free (tmp);
- }
+ if (mac)
+ ifnet_set_data (conn_name, "mac", mac);
ifnet_set_data (conn_name, "mtu", NULL);
mtu = nm_setting_wired_get_mtu (s_wired);
@@ -2381,62 +2371,45 @@ write_wired_setting (NMConnection *connection,
static gboolean
write_ip4_setting (NMConnection *connection, const char *conn_name, GError **error)
{
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
const char *value;
- char *tmp;
guint32 i, num;
GString *searches;
GString *ips;
GString *routes;
GString *dns;
- gboolean has_def_route = FALSE;
gboolean success = FALSE;
s_ip4 = nm_connection_get_setting_ip4_config (connection);
if (!s_ip4) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Missing '%s' setting",
NM_SETTING_IP4_CONFIG_SETTING_NAME);
return FALSE;
}
routes = g_string_new (NULL);
- value = nm_setting_ip4_config_get_method (s_ip4);
+ value = nm_setting_ip_config_get_method (s_ip4);
g_assert (value);
if (!strcmp (value, NM_SETTING_IP4_CONFIG_METHOD_MANUAL)) {
- num = nm_setting_ip4_config_get_num_addresses (s_ip4);
+ num = nm_setting_ip_config_get_num_addresses (s_ip4);
ips = g_string_new (NULL);
/* IPv4 addresses */
for (i = 0; i < num; i++) {
- char buf[INET_ADDRSTRLEN + 1];
- NMIP4Address *addr;
- guint32 ip;
-
- 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));
- g_string_append_printf (ips, "\"%s", &buf[0]);
-
- tmp =
- g_strdup_printf ("%u",
- nm_ip4_address_get_prefix (addr));
- g_string_append_printf (ips, "/%s\" ", tmp);
- g_free (tmp);
+ NMIPAddress *addr;
+
+ addr = nm_setting_ip_config_get_address (s_ip4, i);
+
+ g_string_append_printf (ips, "\"%s/%u",
+ nm_ip_address_get_address (addr),
+ nm_ip_address_get_prefix (addr));
/* only the first gateway will be written */
- if (!has_def_route && 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));
+ if (i == 0 && nm_setting_ip_config_get_gateway (s_ip4)) {
g_string_append_printf (routes,
- "\"default via %s\" ",
- &buf[0]);
- has_def_route = TRUE;
+ "\"default via %s\" ",
+ nm_setting_ip_config_get_gateway (s_ip4));
}
}
ifnet_set_data (conn_name, "config", ips->str);
@@ -2449,19 +2422,14 @@ write_ip4_setting (NMConnection *connection, const char *conn_name, GError **err
ifnet_set_data (conn_name, "config", "dhcp");
/* DNS Servers */
- num = nm_setting_ip4_config_get_num_dns (s_ip4);
+ num = nm_setting_ip_config_get_num_dns (s_ip4);
if (num > 0) {
dns = g_string_new (NULL);
for (i = 0; i < num; i++) {
- char buf[INET_ADDRSTRLEN + 1];
- guint32 ip;
-
- ip = nm_setting_ip4_config_get_dns (s_ip4, i);
+ const char *ip;
- memset (buf, 0, sizeof (buf));
- inet_ntop (AF_INET, (const void *) &ip, &buf[0],
- sizeof (buf));
- g_string_append_printf (dns, " %s", buf);
+ ip = nm_setting_ip_config_get_dns (s_ip4, i);
+ g_string_append_printf (dns, " %s", ip);
}
ifnet_set_data (conn_name, "dns_servers", dns->str);
g_string_free (dns, TRUE);
@@ -2469,14 +2437,14 @@ write_ip4_setting (NMConnection *connection, const char *conn_name, GError **err
ifnet_set_data (conn_name, "dns_servers", NULL);
/* DNS Searches */
- num = nm_setting_ip4_config_get_num_dns_searches (s_ip4);
+ num = nm_setting_ip_config_get_num_dns_searches (s_ip4);
if (num > 0) {
searches = g_string_new (NULL);
for (i = 0; i < num; i++) {
if (i > 0)
g_string_append_c (searches, ' ');
g_string_append (searches,
- nm_setting_ip4_config_get_dns_search
+ nm_setting_ip_config_get_dns_search
(s_ip4, i));
}
ifnet_set_data (conn_name, "dns_search", searches->str);
@@ -2485,12 +2453,12 @@ write_ip4_setting (NMConnection *connection, const char *conn_name, GError **err
ifnet_set_data (conn_name, "dns_search", NULL);
/* FIXME Will be implemented when configuration supports it
if (!strcmp(value, NM_SETTING_IP4_CONFIG_METHOD_AUTO)) {
- value = nm_setting_ip4_config_get_dhcp_hostname(s_ip4);
+ value = nm_setting_ip_config_get_dhcp_hostname(s_ip4);
if (value)
ifnet_set_data(conn_name, "DHCP_HOSTNAME", value,
FALSE);
- value = nm_setting_ip4_config_get_dhcp_client_id(s_ip4);
+ value = nm_setting_ip_config_get_dhcp_client_id(s_ip4);
if (value)
ifnet_set_data(conn_name, "DHCP_CLIENT_ID", value,
FALSE);
@@ -2498,32 +2466,22 @@ write_ip4_setting (NMConnection *connection, const char *conn_name, GError **err
*/
/* Static routes */
- num = nm_setting_ip4_config_get_num_routes (s_ip4);
+ num = nm_setting_ip_config_get_num_routes (s_ip4);
if (num > 0) {
for (i = 0; i < num; i++) {
- char buf[INET_ADDRSTRLEN + 1];
- NMIP4Route *route;
- guint32 ip;
-
- route = nm_setting_ip4_config_get_route (s_ip4, i);
-
- memset (buf, 0, sizeof (buf));
- ip = nm_ip4_route_get_dest (route);
- inet_ntop (AF_INET, (const void *) &ip, &buf[0],
- sizeof (buf));
- g_string_append_printf (routes, "\"%s", buf);
-
- tmp =
- g_strdup_printf ("%u",
- nm_ip4_route_get_prefix (route));
- g_string_append_printf (routes, "/%s via ", tmp);
- g_free (tmp);
+ NMIPRoute *route;
+ const char *next_hop;
+
+ route = nm_setting_ip_config_get_route (s_ip4, i);
+
+ next_hop = nm_ip_route_get_next_hop (route);
+ if (!next_hop)
+ next_hop = "0.0.0.0";
- memset (buf, 0, sizeof (buf));
- ip = nm_ip4_route_get_next_hop (route);
- inet_ntop (AF_INET, (const void *) &ip, &buf[0],
- sizeof (buf));
- g_string_append_printf (routes, "%s\" ", buf);
+ g_string_append_printf (routes, "\"%s/%u via %s\" ",
+ nm_ip_route_get_dest (route),
+ nm_ip_route_get_prefix (route),
+ next_hop);
}
}
if (routes->len > 0)
@@ -2538,19 +2496,16 @@ write_ip4_setting (NMConnection *connection, const char *conn_name, GError **err
}
static gboolean
-write_route6_file (NMSettingIP6Config *s_ip6, const char *conn_name, GError **error)
+write_route6_file (NMSettingIPConfig *s_ip6, const char *conn_name, GError **error)
{
- char dest[INET6_ADDRSTRLEN + 1];
- char next_hop[INET6_ADDRSTRLEN + 1];
- NMIP6Route *route;
- const struct in6_addr *ip;
- guint32 prefix;
+ NMIPRoute *route;
+ const char *next_hop;
guint32 i, num;
GString *routes_string;
const char *old_routes;
g_return_val_if_fail (s_ip6 != NULL, FALSE);
- num = nm_setting_ip6_config_get_num_routes (s_ip6);
+ num = nm_setting_ip_config_get_num_routes (s_ip6);
if (num == 0) {
return TRUE;
}
@@ -2560,22 +2515,16 @@ write_route6_file (NMSettingIP6Config *s_ip6, const char *conn_name, GError **er
if (old_routes)
g_string_append (routes_string, "\" ");
for (i = 0; i < num; i++) {
- route = nm_setting_ip6_config_get_route (s_ip6, i);
+ route = nm_setting_ip_config_get_route (s_ip6, i);
- memset (dest, 0, sizeof (dest));
- ip = nm_ip6_route_get_dest (route);
- inet_ntop (AF_INET6, (const void *) ip, &dest[0],
- sizeof (dest));
-
- prefix = nm_ip6_route_get_prefix (route);
-
- memset (next_hop, 0, sizeof (next_hop));
- ip = nm_ip6_route_get_next_hop (route);
- inet_ntop (AF_INET6, (const void *) ip, &next_hop[0],
- sizeof (next_hop));
+ next_hop = nm_ip_route_get_next_hop (route);
+ if (!next_hop)
+ next_hop = "::";
g_string_append_printf (routes_string, "\"%s/%u via %s\" ",
- dest, prefix, next_hop);
+ nm_ip_route_get_dest (route),
+ nm_ip_route_get_prefix (route),
+ next_hop);
}
if (num > 0)
ifnet_set_data (conn_name, "routes", routes_string->str);
@@ -2587,24 +2536,21 @@ write_route6_file (NMSettingIP6Config *s_ip6, const char *conn_name, GError **er
static gboolean
write_ip6_setting (NMConnection *connection, const char *conn_name, GError **error)
{
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip6;
const char *value;
- char *prefix;
guint32 i, num;
GString *searches;
- char buf[INET6_ADDRSTRLEN + 1];
- NMIP6Address *addr;
- const struct in6_addr *ip;
+ NMIPAddress *addr;
s_ip6 = nm_connection_get_setting_ip6_config (connection);
if (!s_ip6) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Missing '%s' setting",
NM_SETTING_IP6_CONFIG_SETTING_NAME);
return FALSE;
}
- value = nm_setting_ip6_config_get_method (s_ip6);
+ value = nm_setting_ip_config_get_method (s_ip6);
g_assert (value);
if (!strcmp (value, NM_SETTING_IP6_CONFIG_METHOD_IGNORE)) {
ifnet_set_data (conn_name, "enable_ipv6", "false");
@@ -2638,22 +2584,16 @@ write_ip6_setting (NMConnection *connection, const char *conn_name, GError **err
if (!config)
config = "";
- num = nm_setting_ip6_config_get_num_addresses (s_ip6);
+ num = nm_setting_ip_config_get_num_addresses (s_ip6);
/* IPv6 addresses */
ip_str = g_string_new (NULL);
for (i = 0; i < num; i++) {
- 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));
- g_string_append_printf (ip_str, "\"%s/", buf);
- g_string_append_printf (ip_str, "%s\" ", prefix);
- g_free (prefix);
+ addr = nm_setting_ip_config_get_address (s_ip6, i);
+
+ g_string_append_printf (ip_str, "\"%s/%u\"",
+ nm_ip_address_get_address (addr),
+ nm_ip_address_get_prefix (addr));
}
tmp = g_strdup_printf ("%s\" %s", config, ip_str->str);
ifnet_set_data (conn_name, "config", tmp);
@@ -2662,22 +2602,20 @@ write_ip6_setting (NMConnection *connection, const char *conn_name, GError **err
}
/* DNS Servers */
- num = nm_setting_ip6_config_get_num_dns (s_ip6);
+ num = nm_setting_ip_config_get_num_dns (s_ip6);
if (num > 0) {
const char *dns_servers = ifnet_get_data (conn_name, "dns_servers");
gchar *tmp;
GString *dns_string = g_string_new (NULL);
+ const char *dns;
if (!dns_servers)
dns_servers = "";
for (i = 0; i < num; i++) {
- ip = nm_setting_ip6_config_get_dns (s_ip6, i);
+ dns = nm_setting_ip_config_get_dns (s_ip6, i);
- memset (buf, 0, sizeof (buf));
- inet_ntop (AF_INET6, (const void *) ip, buf,
- sizeof (buf));
- if (!strstr (dns_servers, buf))
- g_string_append_printf (dns_string, "%s ", buf);
+ if (!strstr (dns_servers, dns))
+ g_string_append_printf (dns_string, "%s ", dns);
}
tmp = g_strdup_printf ("%s %s", dns_servers, dns_string->str);
ifnet_set_data (conn_name, "dns_servers", tmp);
@@ -2686,7 +2624,7 @@ write_ip6_setting (NMConnection *connection, const char *conn_name, GError **err
} else
/* DNS Searches */
- num = nm_setting_ip6_config_get_num_dns_searches (s_ip6);
+ num = nm_setting_ip_config_get_num_dns_searches (s_ip6);
if (num > 0) {
const char *ip4_domains;
@@ -2698,7 +2636,7 @@ write_ip6_setting (NMConnection *connection, const char *conn_name, GError **err
const gchar *search = NULL;
search =
- nm_setting_ip6_config_get_dns_search (s_ip6, i);
+ nm_setting_ip_config_get_dns_search (s_ip6, i);
if (search && !strstr (searches->str, search)) {
if (searches->len > 0)
g_string_append_c (searches, ' ');
@@ -2716,7 +2654,7 @@ write_ip6_setting (NMConnection *connection, const char *conn_name, GError **err
}
static gboolean
-write_pppoe_setting (const char *conn_name, NMSettingPPPOE * s_pppoe)
+write_pppoe_setting (const char *conn_name, NMSettingPppoe * s_pppoe)
{
const gchar *value;
@@ -2744,7 +2682,7 @@ ifnet_update_parsers_by_connection (NMConnection *connection,
GError **error)
{
NMSettingConnection *s_con;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip6;
gboolean success = FALSE;
const char *type;
gboolean no_8021x = FALSE;
@@ -2759,7 +2697,7 @@ ifnet_update_parsers_by_connection (NMConnection *connection,
type = nm_setting_connection_get_connection_type (s_con);
if (!type) {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Missing connection type!");
goto out;
}
@@ -2775,7 +2713,7 @@ ifnet_update_parsers_by_connection (NMConnection *connection,
if (!write_wireless_setting (connection, conn_name, &no_8021x, &new_name, error))
goto out;
} else if (!strcmp (type, NM_SETTING_PPPOE_SETTING_NAME)) {
- NMSettingPPPOE *s_pppoe;
+ NMSettingPppoe *s_pppoe;
/* Writing pppoe setting */
s_pppoe = nm_connection_get_setting_pppoe (connection);
@@ -2785,7 +2723,7 @@ ifnet_update_parsers_by_connection (NMConnection *connection,
wired = TRUE;
no_8021x = TRUE;
} else {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_NOT_SUPPORTED,
"Can't write connection type '%s'", type);
goto out;
}
@@ -2862,7 +2800,8 @@ check_unsupported_secrets (NMSetting *setting,
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 (!nm_setting_get_secret_flags (setting, key, &secret_flags, NULL))
+ g_return_if_reached ();
if (secret_flags != NM_SETTING_SECRET_FLAG_NONE)
*unsupported_secret = TRUE;
}
@@ -2880,39 +2819,39 @@ ifnet_can_write_connection (NMConnection *connection, GError **error)
/* 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,
+ g_set_error_literal (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_NOT_SUPPORTED,
"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,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_NOT_SUPPORTED,
"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;
}
+ /* 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, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_NOT_SUPPORTED,
+ "The ifnet plugin only supports persistent system secrets.");
+ return FALSE;
+ }
+
return TRUE;
}
/* get the available wired name(eth*). */
static gchar *
-get_wired_name ()
+get_wired_name (void)
{
int i = 0;
@@ -2929,7 +2868,7 @@ get_wired_name ()
/* get the available pppoe name(ppp*). */
static gchar *
-get_ppp_name ()
+get_ppp_name (void)
{
int i = 0;
@@ -2949,7 +2888,9 @@ static gchar *
get_wireless_name (NMConnection * connection)
{
NMSettingWireless *s_wireless;
- const GByteArray *ssid;
+ GBytes *ssid;
+ const guint8 *ssid_data;
+ gsize ssid_len;
gboolean hex_ssid = FALSE;
gchar *result = NULL;
char buf[33];
@@ -2960,12 +2901,13 @@ get_wireless_name (NMConnection * connection)
return NULL;
ssid = nm_setting_wireless_get_ssid (s_wireless);
- if (!ssid->len || ssid->len > 32) {
+ ssid_data = g_bytes_get_data (ssid, &ssid_len);
+ if (!ssid_len || ssid_len > 32) {
return NULL;
}
- for (i = 0; i < ssid->len; i++) {
- if (!g_ascii_isprint (ssid->data[i])) {
+ for (i = 0; i < ssid_len; i++) {
+ if (!g_ascii_isprint (ssid_data[i])) {
hex_ssid = TRUE;
break;
}
@@ -2974,15 +2916,15 @@ get_wireless_name (NMConnection * connection)
if (hex_ssid) {
GString *str;
- str = g_string_sized_new (ssid->len * 2 + 3);
+ str = g_string_sized_new (ssid_len * 2 + 3);
g_string_append (str, "0x");
- for (i = 0; i < ssid->len; i++)
- g_string_append_printf (str, "%02X", ssid->data[i]);
+ for (i = 0; i < ssid_len; i++)
+ g_string_append_printf (str, "%02X", ssid_data[i]);
result = g_strdup (str->str);
g_string_free (str, TRUE);
} else {
memset (buf, 0, sizeof (buf));
- memcpy (buf, ssid->data, ssid->len);
+ memcpy (buf, ssid_data, ssid_len);
result = g_strdup_printf ("%s", buf);
g_strstrip (result);
}
@@ -3031,7 +2973,7 @@ ifnet_add_new_connection (NMConnection *connection,
goto out;
new_type = "ppp";
} else {
- g_set_error (error, ifnet_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_NOT_SUPPORTED,
"Can't write connection type '%s'", type);
goto out;
}
diff --git a/src/settings/plugins/ifnet/net_parser.c b/src/settings/plugins/ifnet/net_parser.c
index 95add14fc..1cf46fbf9 100644
--- a/src/settings/plugins/ifnet/net_parser.c
+++ b/src/settings/plugins/ifnet/net_parser.c
@@ -19,6 +19,8 @@
* Copyright (C) 1999-2010 Gentoo Foundation, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include <stdio.h>
#include <sys/ioctl.h>
diff --git a/src/settings/plugins/ifnet/net_utils.c b/src/settings/plugins/ifnet/net_utils.c
index 86ab8537d..adb23c43f 100644
--- a/src/settings/plugins/ifnet/net_utils.c
+++ b/src/settings/plugins/ifnet/net_utils.c
@@ -19,11 +19,14 @@
* Copyright (C) 1999-2010 Gentoo Foundation, Inc.
*/
+#include "config.h"
+
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <nm-utils.h>
+#include <NetworkManagerUtils.h>
#include <nm-system-config-interface.h>
#include <nm-logging.h>
#include <nm-config.h>
@@ -365,23 +368,21 @@ create_ip4_block (gchar * ip)
ip_mask = g_strsplit (ip, "/", 0);
length = g_strv_length (ip_mask);
- if (!inet_pton (AF_INET, ip_mask[0], &tmp_ip4_addr))
+ if (!nm_utils_ipaddr_valid (AF_INET, ip_mask[0]))
goto error;
- iblock->ip = tmp_ip4_addr;
+ iblock->ip = g_strdup (ip_mask[0]);
prefix = ip_mask[1];
i = 0;
while (i < length && g_ascii_isdigit (prefix[i]))
i++;
prefix[i] = '\0';
- iblock->netmask = nm_utils_ip4_prefix_to_netmask ((guint32)
- atoi (ip_mask
- [1]));
+ iblock->prefix = (guint32) atoi (ip_mask[1]);
} else if (strstr (ip, "netmask")) {
ip_mask = g_strsplit (ip, " ", 0);
length = g_strv_length (ip_mask);
- if (!inet_pton (AF_INET, ip_mask[0], &tmp_ip4_addr))
+ if (!nm_utils_ipaddr_valid (AF_INET, ip_mask[0]))
goto error;
- iblock->ip = tmp_ip4_addr;
+ iblock->ip = g_strdup (ip_mask[0]);
i = 0;
while (i < length && !strstr (ip_mask[++i], "netmask")) ;
while (i < length && ip_mask[++i][0] == '\0') ;
@@ -389,39 +390,42 @@ 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;
+ iblock->prefix = nm_utils_ip4_netmask_to_prefix (tmp_ip4_addr);
} else {
g_slice_free (ip_block, iblock);
if (!is_ip6_address (ip) && !strstr (ip, "dhcp"))
nm_log_warn (LOGD_SETTINGS, "Can't handle ipv4 address: %s, missing netmask or prefix", ip);
return NULL;
}
+ if (iblock->prefix == 0 || iblock->prefix > 32) {
+ nm_log_warn (LOGD_SETTINGS, "Can't handle ipv4 address: %s, invalid prefix", ip);
+ goto error;
+ }
g_strfreev (ip_mask);
return iblock;
error:
if (!is_ip6_address (ip))
nm_log_warn (LOGD_SETTINGS, "Can't handle IPv4 address: %s", ip);
g_strfreev (ip_mask);
+ g_free (iblock->ip);
g_slice_free (ip_block, iblock);
return NULL;
}
-static ip6_block *
-create_ip6_block (gchar * ip)
+static ip_block *
+create_ip_block (gchar * ip)
{
- ip6_block *iblock = g_slice_new0 (ip6_block);
+ ip_block *iblock = g_slice_new0 (ip_block);
gchar *dup_ip = g_strdup (ip);
- struct in6_addr *tmp_ip6_addr = g_slice_new0 (struct in6_addr);
gchar *prefix = NULL;
if ((prefix = strstr (dup_ip, "/")) != NULL) {
*prefix = '\0';
prefix++;
}
- if (!inet_pton (AF_INET6, dup_ip, tmp_ip6_addr)) {
+ if (!nm_utils_ipaddr_valid (AF_INET6, dup_ip))
goto error;
- }
- iblock->ip = tmp_ip6_addr;
+ iblock->ip = dup_ip;
if (prefix) {
errno = 0;
iblock->prefix = strtol (prefix, NULL, 10);
@@ -430,30 +434,26 @@ create_ip6_block (gchar * ip)
}
} else
iblock->prefix = 64;
- g_free (dup_ip);
return iblock;
error:
if (!is_ip4_address (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);
-
+ g_slice_free (ip_block, iblock);
g_free (dup_ip);
return NULL;
}
-static guint32
+static char *
get_ip4_gateway (gchar * gateway)
{
gchar *tmp, *split;
- guint32 tmp_ip4_addr;
if (!gateway)
- return 0;
+ return NULL;
tmp = find_gateway_str (gateway);
if (!tmp) {
nm_log_warn (LOGD_SETTINGS, "Couldn't obtain gateway in \"%s\"", gateway);
- return 0;
+ return NULL;
}
tmp = g_strdup (tmp);
strip_string (tmp, ' ');
@@ -463,43 +463,39 @@ get_ip4_gateway (gchar * gateway)
if ((split = strstr (tmp, "\"")) != NULL)
*split = '\0';
- if (!inet_pton (AF_INET, tmp, &tmp_ip4_addr))
+ if (!nm_utils_ipaddr_valid (AF_INET, tmp))
goto error;
- g_free (tmp);
- return tmp_ip4_addr;
+ return tmp;
error:
if (!is_ip6_address (tmp))
nm_log_warn (LOGD_SETTINGS, "Can't handle IPv4 gateway: %s", tmp);
g_free (tmp);
- return 0;
+ return NULL;
}
-static struct in6_addr *
+static char *
get_ip6_next_hop (gchar * next_hop)
{
gchar *tmp;
- struct in6_addr *tmp_ip6_addr = g_slice_new0 (struct in6_addr);
if (!next_hop)
- return 0;
+ return NULL;
tmp = find_gateway_str (next_hop);
if (!tmp) {
nm_log_warn (LOGD_SETTINGS, "Couldn't obtain next_hop in \"%s\"", next_hop);
- return 0;
+ return NULL;
}
tmp = g_strdup (tmp);
strip_string (tmp, ' ');
strip_string (tmp, '"');
g_strstrip (tmp);
- if (!inet_pton (AF_INET6, tmp, tmp_ip6_addr))
+ if (!nm_utils_ipaddr_valid (AF_INET6, tmp))
goto error;
- g_free (tmp);
- return tmp_ip6_addr;
+ return tmp;
error:
if (!is_ip4_address (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);
return NULL;
}
@@ -511,7 +507,7 @@ convert_ip4_config_block (const char *conn_name)
guint length;
guint i;
gchar *ip;
- guint32 def_gateway = 0;
+ char *def_gateway = NULL;
const char *routes;
ip_block *start = NULL, *current = NULL, *iblock = NULL;
@@ -530,8 +526,8 @@ convert_ip4_config_block (const char *conn_name)
iblock = create_ip4_block (ip);
if (iblock == NULL)
continue;
- if (!iblock->gateway && def_gateway != 0)
- iblock->gateway = def_gateway;
+ if (!iblock->next_hop && def_gateway != NULL)
+ iblock->next_hop = g_strdup (def_gateway);
if (start == NULL)
start = current = iblock;
else {
@@ -540,17 +536,18 @@ convert_ip4_config_block (const char *conn_name)
}
}
g_strfreev (ipset);
+ g_free (def_gateway);
return start;
}
-ip6_block *
+ip_block *
convert_ip6_config_block (const char *conn_name)
{
gchar **ipset;
guint length;
guint i;
gchar *ip;
- ip6_block *start = NULL, *current = NULL, *iblock = NULL;
+ ip_block *start = NULL, *current = NULL, *iblock = NULL;
g_return_val_if_fail (conn_name != NULL, NULL);
ipset = split_addresses (ifnet_get_data (conn_name, "config"));
@@ -558,7 +555,7 @@ convert_ip6_config_block (const char *conn_name)
for (i = 0; i < length; i++) {
ip = ipset[i];
ip = strip_string (ip, '"');
- iblock = create_ip6_block (ip);
+ iblock = create_ip_block (ip);
if (iblock == NULL)
continue;
if (start == NULL)
@@ -594,7 +591,7 @@ convert_ip4_routes_block (const char *conn_name)
iblock = create_ip4_block (ip);
if (iblock == NULL)
continue;
- iblock->gateway = get_ip4_gateway (ip);
+ iblock->next_hop = get_ip4_gateway (ip);
if (start == NULL)
start = current = iblock;
else {
@@ -606,15 +603,14 @@ convert_ip4_routes_block (const char *conn_name)
return start;
}
-ip6_block *
+ip_block *
convert_ip6_routes_block (const char *conn_name)
{
gchar **ipset;
guint length;
guint i;
gchar *ip, *tmp_addr;
- ip6_block *start = NULL, *current = NULL, *iblock = NULL;
- struct in6_addr *tmp_ip6_addr;
+ ip_block *start = NULL, *current = NULL, *iblock = NULL;
g_return_val_if_fail (conn_name != NULL, NULL);
ipset = split_routes (ifnet_get_data (conn_name, "routes"));
@@ -628,25 +624,17 @@ convert_ip6_routes_block (const char *conn_name)
if (!is_ip6_address (tmp_addr))
continue;
else {
- tmp_ip6_addr = g_slice_new0 (struct in6_addr);
-
- if (inet_pton (AF_INET6, "::", tmp_ip6_addr)) {
- iblock = g_slice_new0 (ip6_block);
- iblock->ip = tmp_ip6_addr;
- iblock->prefix = 128;
- } else {
- g_slice_free (struct in6_addr,
- tmp_ip6_addr);
- continue;
- }
+ iblock = g_slice_new0 (ip_block);
+ iblock->ip = g_strdup ("::");
+ iblock->prefix = 128;
}
} else
- iblock = create_ip6_block (ip);
+ iblock = create_ip_block (ip);
if (iblock == NULL)
continue;
iblock->next_hop = get_ip6_next_hop (ip);
if (iblock->next_hop == NULL) {
- destroy_ip6_block (iblock);
+ destroy_ip_block (iblock);
continue;
}
if (start == NULL)
@@ -663,26 +651,18 @@ convert_ip6_routes_block (const char *conn_name)
void
destroy_ip_block (ip_block * iblock)
{
+ g_free (iblock->ip);
+ g_free (iblock->next_hop);
g_slice_free (ip_block, iblock);
}
void
-destroy_ip6_block (ip6_block * iblock)
-{
- g_slice_free (struct in6_addr, iblock->ip);
- g_slice_free (struct in6_addr, iblock->next_hop);
-
- g_slice_free (ip6_block, iblock);
-}
-
-void
-set_ip4_dns_servers (NMSettingIP4Config *s_ip4, const char *conn_name)
+set_ip4_dns_servers (NMSettingIPConfig *s_ip4, const char *conn_name)
{
const char *dns_servers;
gchar **server_list, *stripped;
guint length, i;
guint32 tmp_ip4_addr;
- guint32 new_dns;
dns_servers = ifnet_get_data (conn_name, "dns_servers");
if (!dns_servers)
@@ -694,7 +674,7 @@ set_ip4_dns_servers (NMSettingIP4Config *s_ip4, const char *conn_name)
length = g_strv_length (server_list);
if (length)
- g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS,
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS,
TRUE, NULL);
for (i = 0; i < length; i++) {
g_strstrip (server_list[i]);
@@ -705,15 +685,14 @@ set_ip4_dns_servers (NMSettingIP4Config *s_ip4, const char *conn_name)
nm_log_warn (LOGD_SETTINGS, "ignored dns: %s\n", server_list[i]);
continue;
}
- new_dns = tmp_ip4_addr;
- if (new_dns && !nm_setting_ip4_config_add_dns (s_ip4, new_dns))
+ if (!nm_setting_ip_config_add_dns (s_ip4, server_list[i]))
nm_log_warn (LOGD_SETTINGS, "warning: duplicate DNS server %s", server_list[i]);
}
g_strfreev (server_list);
}
void
-set_ip6_dns_servers (NMSettingIP6Config *s_ip6, const char *conn_name)
+set_ip6_dns_servers (NMSettingIPConfig *s_ip6, const char *conn_name)
{
const char *dns_servers;
gchar **server_list, *stripped;
@@ -731,7 +710,7 @@ set_ip6_dns_servers (NMSettingIP6Config *s_ip6, const char *conn_name)
length = g_strv_length (server_list);
if (length)
- g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS,
+ g_object_set (s_ip6, NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS,
TRUE, NULL);
for (i = 0; i < length; i++) {
g_strstrip (server_list[i]);
@@ -742,8 +721,7 @@ set_ip6_dns_servers (NMSettingIP6Config *s_ip6, const char *conn_name)
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))
+ if (!nm_setting_ip_config_add_dns (s_ip6, server_list[i]))
nm_log_warn (LOGD_SETTINGS, "warning: duplicate DNS server %s", server_list[i]);
}
g_strfreev (server_list);
@@ -763,30 +741,49 @@ is_managed (const char *conn_name)
return TRUE;
}
+static char *
+_has_prefix_impl (char *str, const char *prefix, gsize prefix_len)
+{
+ if (!g_str_has_prefix (str, prefix))
+ return NULL;
+ str += prefix_len;
+ if (!g_ascii_isspace (str[0]))
+ return NULL;
+ do {
+ str++;
+ } while (g_ascii_isspace (str[0]));
+ return str;
+}
+#define _has_prefix(STR, PREFIX) _has_prefix_impl (STR, PREFIX, STRLEN (PREFIX))
+
void
get_dhcp_hostname_and_client_id (char **hostname, char **client_id)
{
const char *dhcp_client;
const gchar *dhcpcd_conf = SYSCONFDIR "/dhcpcd.conf";
const gchar *dhclient_conf = SYSCONFDIR "/dhcp/dhclient.conf";
- gchar *line = NULL, *tmp = NULL, *contents = NULL;
+ gchar *line = NULL, *tmp = NULL, *contents = NULL, *tmp1;
gchar **all_lines;
guint line_num, i;
+ gboolean use_dhclient = FALSE;
*hostname = NULL;
*client_id = NULL;
dhcp_client = nm_config_get_dhcp_client (nm_config_get ());
if (dhcp_client) {
- if (!strcmp (dhcp_client, "dhclient"))
+ if (!strcmp (dhcp_client, "dhclient")) {
g_file_get_contents (dhclient_conf, &contents, NULL,
NULL);
- else if (!strcmp (dhcp_client, "dhcpcd"))
+ use_dhclient = TRUE;
+ } else if (!strcmp (dhcp_client, "dhcpcd"))
g_file_get_contents (dhcpcd_conf, &contents, NULL,
NULL);
} else {
- if (g_file_test (dhclient_conf, G_FILE_TEST_IS_REGULAR))
+ if (g_file_test (dhclient_conf, G_FILE_TEST_IS_REGULAR)) {
g_file_get_contents (dhclient_conf, &contents, NULL,
NULL);
+ use_dhclient = TRUE;
+ }
else if (g_file_test (dhcpcd_conf, G_FILE_TEST_IS_REGULAR))
g_file_get_contents (dhcpcd_conf, &contents, NULL,
NULL);
@@ -797,42 +794,44 @@ get_dhcp_hostname_and_client_id (char **hostname, char **client_id)
line_num = g_strv_length (all_lines);
for (i = 0; i < line_num; i++) {
line = all_lines[i];
- // dhcpcd.conf
g_strstrip (line);
- if (g_str_has_prefix (line, "hostname")) {
- tmp = line + strlen ("hostname");
- g_strstrip (tmp);
- if (tmp[0] != '\0')
- *hostname = g_strdup (tmp);
- else
- 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
- nm_log_info (LOGD_SETTINGS, "dhcpcd clientid not defined, ignoring");
- }
- // dhclient.conf
- else if ((tmp = strstr (line, "send host-name")) != NULL) {
- tmp += strlen ("send host-name");
- g_strstrip (tmp);
- strip_string (tmp, ';');
- strip_string (tmp, '"');
- if (tmp[0] != '\0')
- *hostname = g_strdup (tmp);
- else
- 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");
- g_strstrip (tmp);
- strip_string (tmp, ';');
- if (tmp[0] != '\0')
- *client_id = g_strdup (tmp);
- else
- nm_log_info (LOGD_SETTINGS, "dhclient clientid not defined, ignoring");
+ if (line[0] == '#' || line[0] == '\0')
+ continue;
+ if (!use_dhclient) {
+ // dhcpcd.conf
+ if ((tmp = _has_prefix (line, "hostname"))) {
+ if (tmp[0] != '\0') {
+ g_free (*hostname);
+ *hostname = g_strdup (tmp);
+ } else
+ nm_log_info (LOGD_SETTINGS, "dhcpcd hostname not defined, ignoring");
+ } else if ((tmp = _has_prefix (line, "clientid"))) {
+ if (tmp[0] != '\0') {
+ g_free (*client_id);
+ *client_id = g_strdup (tmp);
+ } else
+ nm_log_info (LOGD_SETTINGS, "dhcpcd clientid not defined, ignoring");
+ }
+ } else {
+ // dhclient.conf
+ if ((tmp1 = _has_prefix (line, "send"))) {
+ if ((tmp = _has_prefix (tmp1, "host-name"))) {
+ strip_string (tmp, ';');
+ strip_string (tmp, '"');
+ if (tmp[0] != '\0') {
+ g_free (*hostname);
+ *hostname = g_strdup (tmp);
+ } else
+ nm_log_info (LOGD_SETTINGS, "dhclient hostname not defined, ignoring");
+ } else if ((tmp = _has_prefix (tmp1, "dhcp-client-identifier"))) {
+ strip_string (tmp, ';');
+ if (tmp[0] != '\0') {
+ g_free (*client_id);
+ *client_id = g_strdup (tmp);
+ } else
+ nm_log_info (LOGD_SETTINGS, "dhclient clientid not defined, ignoring");
+ }
+ }
}
}
g_strfreev (all_lines);
diff --git a/src/settings/plugins/ifnet/net_utils.h b/src/settings/plugins/ifnet/net_utils.h
index cee71d57e..d58e7ec61 100644
--- a/src/settings/plugins/ifnet/net_utils.h
+++ b/src/settings/plugins/ifnet/net_utils.h
@@ -31,19 +31,12 @@
#define has_default_ip6_route(conn_name) has_default_route((conn_name), &is_ip6_address)
typedef struct _ip_block {
- guint32 ip;
- guint32 netmask;
- guint32 gateway;
+ char *ip;
+ guint32 prefix;
+ char *next_hop;
struct _ip_block *next;
} ip_block;
-typedef struct _ip6_block {
- struct in6_addr *ip;
- long int prefix;
- struct in6_addr *next_hop;
- struct _ip6_block *next;
-} ip6_block;
-
gchar *read_hostname (const char *path);
gboolean write_hostname (const char *path, const char *hostname);
gboolean is_static_ip4 (const char *conn_name);
@@ -55,14 +48,13 @@ gboolean has_default_route (const char *conn_name, gboolean (*check_fn) (const c
gboolean reload_parsers (void);
ip_block *convert_ip4_config_block (const char *conn_name);
-ip6_block *convert_ip6_config_block (const char *conn_name);
+ip_block *convert_ip6_config_block (const char *conn_name);
ip_block *convert_ip4_routes_block (const char *conn_name);
-ip6_block *convert_ip6_routes_block (const char *conn_name);
+ip_block *convert_ip6_routes_block (const char *conn_name);
void destroy_ip_block (ip_block * iblock);
-void destroy_ip6_block (ip6_block * iblock);
-void set_ip4_dns_servers (NMSettingIP4Config * s_ip4, const char *conn_name);
-void set_ip6_dns_servers (NMSettingIP6Config * s_ip6, const char *conn_name);
+void set_ip4_dns_servers (NMSettingIPConfig * s_ip4, const char *conn_name);
+void set_ip6_dns_servers (NMSettingIPConfig * s_ip6, const char *conn_name);
gchar *strip_string (gchar *str, gchar t);
gboolean is_managed (const char *conn_name);
diff --git a/src/settings/plugins/ifnet/nm-ifnet-connection.c b/src/settings/plugins/ifnet/nm-ifnet-connection.c
index 478d6e32e..c84ad5ed9 100644
--- a/src/settings/plugins/ifnet/nm-ifnet-connection.c
+++ b/src/settings/plugins/ifnet/nm-ifnet-connection.c
@@ -19,15 +19,16 @@
* Copyright (C) 1999-2010 Gentoo Foundation, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include <glib/gstdio.h>
-#include <NetworkManager.h>
+#include <nm-dbus-interface.h>
#include <nm-utils.h>
#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"
#include "net_parser.h"
diff --git a/src/settings/plugins/ifnet/nm-ifnet-connection.h b/src/settings/plugins/ifnet/nm-ifnet-connection.h
index 1cb67c341..baa4c07ed 100644
--- a/src/settings/plugins/ifnet/nm-ifnet-connection.h
+++ b/src/settings/plugins/ifnet/nm-ifnet-connection.h
@@ -19,8 +19,8 @@
* Copyright (C) 1999-2010 Gentoo Foundation, Inc.
*/
-#ifndef NM_IFNET_CONNECTION_H
-#define NM_IFNET_CONNECTION_H
+#ifndef __NETWORKMANAGER_IFNET_CONNECTION_H__
+#define __NETWORKMANAGER_IFNET_CONNECTION_H__
#include <nm-settings-connection.h>
#include "net_parser.h"
diff --git a/src/settings/plugins/ifnet/plugin.c b/src/settings/plugins/ifnet/plugin.c
index ab07b8d62..3eb1ed52f 100644
--- a/src/settings/plugins/ifnet/plugin.c
+++ b/src/settings/plugins/ifnet/plugin.c
@@ -20,6 +20,8 @@
* Copyright (C) 1999-2010 Gentoo Foundation, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include <gmodule.h>
@@ -29,7 +31,7 @@
#include <nm-utils.h>
#include <nm-setting-connection.h>
-#include "NetworkManager.h"
+#include "nm-dbus-interface.h"
#include "nm-system-config-interface.h"
#include "nm-logging.h"
#include "nm-ifnet-connection.h"
diff --git a/src/settings/plugins/ifnet/tests/Makefile.am b/src/settings/plugins/ifnet/tests/Makefile.am
index f66a6a3dd..66409a549 100644
--- a/src/settings/plugins/ifnet/tests/Makefile.am
+++ b/src/settings/plugins/ifnet/tests/Makefile.am
@@ -4,22 +4,17 @@ if ENABLE_TESTS
AM_CPPFLAGS= \
-I$(srcdir)/../ \
- -I$(top_srcdir)/libnm-glib \
- -I$(top_srcdir)/libnm-util \
- -I$(top_builddir)/libnm-util \
-I$(top_srcdir)/include \
- -I$(top_builddir)/include \
+ -I$(top_srcdir)/libnm-core \
+ -I$(top_builddir)/libnm-core \
-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"\" \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(CHECK_CFLAGS) \
$(GLIB_CFLAGS) \
- $(DBUS_CFLAGS) \
- $(POLKIT_CFLAGS) \
$(CODE_COVERAGE_CFLAGS) \
-DTEST_WPA_SUPPLICANT_CONF='"$(srcdir)/wpa_supplicant.conf"' \
-DSYSCONFDIR=\"nonexistent\"
@@ -30,8 +25,7 @@ check_ifnet_SOURCES = \
../connection_parser.c \
../net_parser.c \
../net_utils.c \
- ../wpa_parser.c \
- ../errors.c
+ ../wpa_parser.c
check_ifnet_LDFLAGS = \
$(CODE_COVERAGE_LDFLAGS)
@@ -41,6 +35,8 @@ check_ifnet_LDADD = $(top_builddir)/src/libNetworkManager.la
check-local: check_ifnet
$(abs_builddir)/check_ifnet $(abs_srcdir) $(abs_builddir)
+endif
+
EXTRA_DIST = \
hostname \
net \
@@ -48,5 +44,3 @@ EXTRA_DIST = \
nm-system-settings.conf \
wpa_supplicant.conf \
test_ca_cert.pem
-
-endif
diff --git a/src/settings/plugins/ifnet/tests/Makefile.in b/src/settings/plugins/ifnet/tests/Makefile.in
index cd6042377..8293c8695 100644
--- a/src/settings/plugins/ifnet/tests/Makefile.in
+++ b/src/settings/plugins/ifnet/tests/Makefile.in
@@ -104,11 +104,11 @@ CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
PROGRAMS = $(noinst_PROGRAMS)
am__check_ifnet_SOURCES_DIST = test_all.c ../connection_parser.c \
- ../net_parser.c ../net_utils.c ../wpa_parser.c ../errors.c
+ ../net_parser.c ../net_utils.c ../wpa_parser.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)
+@ENABLE_TESTS_TRUE@ wpa_parser.$(OBJEXT)
check_ifnet_OBJECTS = $(am_check_ifnet_OBJECTS)
@ENABLE_TESTS_TRUE@check_ifnet_DEPENDENCIES = \
@ENABLE_TESTS_TRUE@ $(top_builddir)/src/libNetworkManager.la
@@ -189,6 +189,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -312,6 +314,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -331,6 +334,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -357,7 +361,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -438,22 +442,17 @@ 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 \
-@ENABLE_TESTS_TRUE@ -I$(top_srcdir)/libnm-util \
-@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)/libnm-core \
+@ENABLE_TESTS_TRUE@ -I$(top_builddir)/libnm-core \
@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@ -DNETWORKMANAGER_COMPILATION \
@ENABLE_TESTS_TRUE@ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
@ENABLE_TESTS_TRUE@ $(CHECK_CFLAGS) \
@ENABLE_TESTS_TRUE@ $(GLIB_CFLAGS) \
-@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\"
@@ -463,20 +462,19 @@ with_valgrind = @with_valgrind@
@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@ ../wpa_parser.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 \
-@ENABLE_TESTS_TRUE@ net.all \
-@ENABLE_TESTS_TRUE@ nm-system-settings.conf \
-@ENABLE_TESTS_TRUE@ wpa_supplicant.conf \
-@ENABLE_TESTS_TRUE@ test_ca_cert.pem
+EXTRA_DIST = \
+ hostname \
+ net \
+ net.all \
+ nm-system-settings.conf \
+ wpa_supplicant.conf \
+ test_ca_cert.pem
all: all-am
@@ -533,7 +531,6 @@ 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@
@@ -616,20 +613,6 @@ wpa_parser.obj: ../wpa_parser.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) $(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
diff --git a/src/settings/plugins/ifnet/tests/test_all.c b/src/settings/plugins/ifnet/tests/test_all.c
index c320ed5f8..9c3991287 100644
--- a/src/settings/plugins/ifnet/tests/test_all.c
+++ b/src/settings/plugins/ifnet/tests/test_all.c
@@ -20,6 +20,8 @@
* Copyright (C) 1999-2010 Gentoo Foundation, Inc.
*/
+#include "config.h"
+
#include <stdio.h>
#include <string.h>
#include <glib.h>
@@ -55,7 +57,7 @@ nm_config_get_dhcp_client (NMConfig *config)
}
static void
-test_getdata ()
+test_getdata (void)
{
ASSERT (ifnet_get_data ("eth1", "config")
&& strcmp (ifnet_get_data ("eth1", "config"), "( \"dhcp\" )") == 0,
@@ -103,7 +105,7 @@ test_write_hostname (const char *temp_path)
}
static void
-test_is_static ()
+test_is_static (void)
{
ASSERT (is_static_ip4 ("eth1") == FALSE, "is static",
"a dhcp interface is recognized as static");
@@ -114,7 +116,7 @@ test_is_static ()
}
static void
-test_has_default_route ()
+test_has_default_route (void)
{
ASSERT (has_default_ip4_route ("eth0"),
"has default route", "eth0 should have a default ipv4 route");
@@ -126,7 +128,7 @@ test_has_default_route ()
}
static void
-test_has_ip6_address ()
+test_has_ip6_address (void)
{
ASSERT (has_ip6_address ("eth2"), "has ip6 address",
"eth2 should have a ipv6 address");
@@ -136,7 +138,7 @@ test_has_ip6_address ()
}
static void
-test_is_ip4_address ()
+test_is_ip4_address (void)
{
gchar *address1 = "192.168.4.232/24";
gchar *address2 = "192.168.100.{1..254}/24";
@@ -151,7 +153,7 @@ test_is_ip4_address ()
}
static void
-test_is_ip6_address ()
+test_is_ip6_address (void)
{
gchar *address1 = "4321:0:1:2:3:4:567:89ac/24";
@@ -160,43 +162,30 @@ test_is_ip6_address ()
}
static void
-check_ip_block (ip_block * iblock, gchar * ip, gchar * netmask, gchar * gateway)
+check_ip_block (ip_block * iblock, gchar * ip, guint32 prefix, gchar * gateway)
{
- char *str;
- guint32 tmp_ip4_addr;
-
- str = malloc (INET_ADDRSTRLEN);
- 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 = 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 = 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);
- free (str);
+ ASSERT (strcmp (ip, iblock->ip) == 0, "check ip",
+ "ip expected:%s, find:%s", ip, iblock->ip);
+ ASSERT (prefix == iblock->prefix, "check netmask",
+ "prefix expected:%d, find:%d", prefix, iblock->prefix);
+ ASSERT (g_strcmp0 (gateway, iblock->next_hop) == 0, "check gateway",
+ "gateway expected:%s, find:%s", gateway, iblock->next_hop);
}
static void
-test_convert_ipv4_config_block ()
+test_convert_ipv4_config_block (void)
{
ip_block *iblock = convert_ip4_config_block ("eth0");
ip_block *tmp = iblock;
ASSERT (iblock != NULL, "convert ipv4 block",
"block eth0 should not be NULL");
- check_ip_block (iblock, "202.117.16.121", "255.255.255.0",
- "202.117.16.1");
+ check_ip_block (iblock, "202.117.16.121", 24, "202.117.16.1");
iblock = iblock->next;
destroy_ip_block (tmp);
ASSERT (iblock != NULL, "convert ipv4 block",
"block eth0 should have a second IP address");
- check_ip_block (iblock, "192.168.4.121", "255.255.255.0",
- "202.117.16.1");
+ check_ip_block (iblock, "192.168.4.121", 24, "202.117.16.1");
destroy_ip_block (iblock);
g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
@@ -206,7 +195,7 @@ test_convert_ipv4_config_block ()
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");
+ check_ip_block (iblock, "192.168.4.121", 24, NULL);
destroy_ip_block (iblock);
g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
@@ -214,17 +203,16 @@ test_convert_ipv4_config_block ()
iblock = convert_ip4_config_block ("eth3");
ASSERT (iblock == NULL, "convert config_block",
"convert error configuration");
- destroy_ip_block (iblock);
}
static void
-test_convert_ipv4_routes_block ()
+test_convert_ipv4_routes_block (void)
{
ip_block *iblock = convert_ip4_routes_block ("eth0");
ip_block *tmp = iblock;
ASSERT (iblock != NULL, "convert ip4 routes", "should get one route");
- check_ip_block (iblock, "192.168.4.0", "255.255.255.0", "192.168.4.1");
+ check_ip_block (iblock, "192.168.4.0", 24, "192.168.4.1");
iblock = iblock->next;
destroy_ip_block (tmp);
ASSERT (iblock == NULL, "convert ip4 routes",
@@ -234,7 +222,7 @@ test_convert_ipv4_routes_block ()
tmp = iblock;
ASSERT (iblock != NULL, "convert ip4 routes", "should get one route");
- check_ip_block (iblock, "10.0.0.0", "255.0.0.0", "192.168.0.1");
+ check_ip_block (iblock, "10.0.0.0", 8, "192.168.0.1");
iblock = iblock->next;
destroy_ip_block (tmp);
ASSERT (iblock == NULL, "convert ip4 routes",
@@ -242,7 +230,7 @@ test_convert_ipv4_routes_block ()
}
static void
-test_wpa_parser ()
+test_wpa_parser (void)
{
const char *value;
@@ -261,7 +249,7 @@ test_wpa_parser ()
}
static void
-test_strip_string ()
+test_strip_string (void)
{
gchar *str = "( \"default via 202.117.16.1\" )";
gchar *result = g_strdup (str);
@@ -277,7 +265,7 @@ test_strip_string ()
}
static void
-test_is_unmanaged ()
+test_is_unmanaged (void)
{
ASSERT (is_managed ("eth0"), "test_is_unmanaged",
"eth0 should be managed");
@@ -286,7 +274,7 @@ test_is_unmanaged ()
}
static void
-test_new_connection ()
+test_new_connection (void)
{
GError *error = NULL;
NMConnection *connection;
@@ -409,7 +397,7 @@ test_add_connection (const char *basepath)
}
static void
-test_delete_connection ()
+test_delete_connection (void)
{
GError *error = NULL;
NMConnection *connection;
@@ -438,7 +426,7 @@ test_delete_connection ()
}
static void
-test_missing_config ()
+test_missing_config (void)
{
GError *error = NULL;
NMConnection *connection;
diff --git a/src/settings/plugins/ifnet/wpa_parser.c b/src/settings/plugins/ifnet/wpa_parser.c
index 748eb351d..3f912da87 100644
--- a/src/settings/plugins/ifnet/wpa_parser.c
+++ b/src/settings/plugins/ifnet/wpa_parser.c
@@ -19,6 +19,8 @@
* Copyright (C) 1999-2010 Gentoo Foundation, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include <stdlib.h>
#include <nm-system-config-interface.h>
@@ -166,7 +168,7 @@ add_one_wep_key (GHashTable * table, int key_num, gchar * one_wep_key)
/* Reading wep security information from /etc/conf.d/net.
* This should not be used in future, use wpa_supplicant instead. */
static void
-add_keys_from_net ()
+add_keys_from_net (void)
{
GList *names = ifnet_get_connection_names ();
GList *iter = names;
diff --git a/src/settings/plugins/ifupdown/Makefile.am b/src/settings/plugins/ifupdown/Makefile.am
index fd98f8fe5..0ca543e34 100644
--- a/src/settings/plugins/ifupdown/Makefile.am
+++ b/src/settings/plugins/ifupdown/Makefile.am
@@ -4,19 +4,14 @@ 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 \
+ -I$(top_srcdir)/libnm-core \
+ -I$(top_builddir)/libnm-core \
-DG_LOG_DOMAIN=\""NetworkManager-ifupdown"\" \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
- $(DBUS_CFLAGS) \
- $(POLKIT_CFLAGS) \
$(GUDEV_CFLAGS) \
-DSYSCONFDIR=\"$(sysconfdir)\"
@@ -28,10 +23,6 @@ libifupdown_io_la_SOURCES = \
parser.c \
parser.h
-libifupdown_io_la_LIBADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(GLIB_LIBS)
-
pkglib_LTLIBRARIES = libnm-settings-plugin-ifupdown.la
libnm_settings_plugin_ifupdown_la_SOURCES = \
@@ -41,9 +32,5 @@ libnm_settings_plugin_ifupdown_la_SOURCES = \
plugin.h
libnm_settings_plugin_ifupdown_la_LDFLAGS = -module -avoid-version
-libnm_settings_plugin_ifupdown_la_LIBADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- libifupdown-io.la \
- $(GLIB_LIBS) \
- $(GUDEV_LIBS)
+libnm_settings_plugin_ifupdown_la_LIBADD = libifupdown-io.la
diff --git a/src/settings/plugins/ifupdown/Makefile.in b/src/settings/plugins/ifupdown/Makefile.in
index 50d4ca089..44596e488 100644
--- a/src/settings/plugins/ifupdown/Makefile.in
+++ b/src/settings/plugins/ifupdown/Makefile.in
@@ -130,18 +130,14 @@ am__uninstall_files_from_dir = { \
}
am__installdirs = "$(DESTDIR)$(pkglibdir)"
LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkglib_LTLIBRARIES)
-am__DEPENDENCIES_1 =
-libifupdown_io_la_DEPENDENCIES = \
- $(top_builddir)/libnm-util/libnm-util.la $(am__DEPENDENCIES_1)
+libifupdown_io_la_LIBADD =
am_libifupdown_io_la_OBJECTS = interface_parser.lo parser.lo
libifupdown_io_la_OBJECTS = $(am_libifupdown_io_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_settings_plugin_ifupdown_la_DEPENDENCIES = \
- $(top_builddir)/libnm-util/libnm-util.la libifupdown-io.la \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+libnm_settings_plugin_ifupdown_la_DEPENDENCIES = libifupdown-io.la
am_libnm_settings_plugin_ifupdown_la_OBJECTS = \
nm-ifupdown-connection.lo plugin.lo
libnm_settings_plugin_ifupdown_la_OBJECTS = \
@@ -264,6 +260,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -387,6 +385,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -406,6 +405,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -432,7 +432,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -514,19 +514,14 @@ 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 \
+ -I$(top_srcdir)/libnm-core \
+ -I$(top_builddir)/libnm-core \
-DG_LOG_DOMAIN=\""NetworkManager-ifupdown"\" \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
- $(DBUS_CFLAGS) \
- $(POLKIT_CFLAGS) \
$(GUDEV_CFLAGS) \
-DSYSCONFDIR=\"$(sysconfdir)\"
@@ -537,10 +532,6 @@ libifupdown_io_la_SOURCES = \
parser.c \
parser.h
-libifupdown_io_la_LIBADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(GLIB_LIBS)
-
pkglib_LTLIBRARIES = libnm-settings-plugin-ifupdown.la
libnm_settings_plugin_ifupdown_la_SOURCES = \
nm-ifupdown-connection.c \
@@ -549,12 +540,7 @@ libnm_settings_plugin_ifupdown_la_SOURCES = \
plugin.h
libnm_settings_plugin_ifupdown_la_LDFLAGS = -module -avoid-version
-libnm_settings_plugin_ifupdown_la_LIBADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- libifupdown-io.la \
- $(GLIB_LIBS) \
- $(GUDEV_LIBS)
-
+libnm_settings_plugin_ifupdown_la_LIBADD = libifupdown-io.la
all: all-recursive
.SUFFIXES:
diff --git a/src/settings/plugins/ifupdown/interface_parser.c b/src/settings/plugins/ifupdown/interface_parser.c
index ee233c93a..32d27c57b 100644
--- a/src/settings/plugins/ifupdown/interface_parser.c
+++ b/src/settings/plugins/ifupdown/interface_parser.c
@@ -21,6 +21,7 @@
*/
#include "config.h"
+
#include "interface_parser.h"
#include <stdio.h>
#include <stdlib.h>
diff --git a/src/settings/plugins/ifupdown/nm-ifupdown-connection.c b/src/settings/plugins/ifupdown/nm-ifupdown-connection.c
index 4e13a2b83..c6073bd7e 100644
--- a/src/settings/plugins/ifupdown/nm-ifupdown-connection.c
+++ b/src/settings/plugins/ifupdown/nm-ifupdown-connection.c
@@ -21,14 +21,15 @@
* (C) Copyright 2007,2008 Canonical Ltd.
*/
+#include "config.h"
+
#include <string.h>
#include <glib/gstdio.h>
-#include <NetworkManager.h>
+#include <nm-dbus-interface.h>
#include <nm-utils.h>
#include <nm-setting-wireless-security.h>
#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"
@@ -161,9 +162,8 @@ nm_ifupdown_connection_class_init (NMIfupdownConnectionClass *ifupdown_connectio
/* Properties */
g_object_class_install_property
(object_class, PROP_IFBLOCK,
- g_param_spec_pointer (NM_IFUPDOWN_CONNECTION_IFBLOCK,
- "ifblock",
- "",
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ g_param_spec_pointer (NM_IFUPDOWN_CONNECTION_IFBLOCK, "", "",
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
}
diff --git a/src/settings/plugins/ifupdown/nm-ifupdown-connection.h b/src/settings/plugins/ifupdown/nm-ifupdown-connection.h
index 447af78a9..be2ebc0a3 100644
--- a/src/settings/plugins/ifupdown/nm-ifupdown-connection.h
+++ b/src/settings/plugins/ifupdown/nm-ifupdown-connection.h
@@ -21,8 +21,8 @@
* (C) Copyright 2008 Canonical Ltd.
*/
-#ifndef NM_IFUPDOWN_CONNECTION_H
-#define NM_IFUPDOWN_CONNECTION_H
+#ifndef __NETWORKMANAGER_IFUPDOWN_CONNECTION_H__
+#define __NETWORKMANAGER_IFUPDOWN_CONNECTION_H__
#include <nm-settings-connection.h>
#include "interface_parser.h"
@@ -52,4 +52,4 @@ NMIfupdownConnection *nm_ifupdown_connection_new (if_block *block);
G_END_DECLS
-#endif /* NM_IFUPDOWN_CONNECTION_H */
+#endif /* __NETWORKMANAGER_IFUPDOWN_CONNECTION_H__ */
diff --git a/src/settings/plugins/ifupdown/parser.c b/src/settings/plugins/ifupdown/parser.c
index 91ed3e21b..15081a4c5 100644
--- a/src/settings/plugins/ifupdown/parser.c
+++ b/src/settings/plugins/ifupdown/parser.c
@@ -21,24 +21,18 @@
* (C) Copyright 2008 Canonical Ltd.
*/
+#include "config.h"
+
#include <string.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <errno.h>
-
-#include <nm-connection.h>
-#include <NetworkManager.h>
-#include <nm-setting-connection.h>
-#include <nm-setting-ip4-config.h>
-#include <nm-setting-ppp.h>
-#include <nm-setting-wired.h>
-#include <nm-setting-wireless.h>
-#include <nm-setting-8021x.h>
-#include <nm-system-config-interface.h>
-#include <nm-utils.h>
-#include <nm-logging.h>
#include <ctype.h>
+#include "nm-core-internal.h"
+#include "nm-system-config-interface.h"
+#include "nm-logging.h"
+
#include "parser.h"
#include "plugin.h"
@@ -417,19 +411,8 @@ update_wired_setting_from_if_block(NMConnection *connection,
nm_connection_add_setting(connection, NM_SETTING(s_wired));
}
-static GQuark
-eni_plugin_error_quark() {
- static GQuark error_quark = 0;
-
- if(!error_quark) {
- error_quark = g_quark_from_static_string ("eni-plugin-error-quark");
- }
-
- return error_quark;
-}
-
static void
-ifupdown_ip4_add_dns (NMSettingIP4Config *s_ip4, const char *dns)
+ifupdown_ip4_add_dns (NMSettingIPConfig *s_ip4, const char *dns)
{
guint32 addr;
char **list, **iter;
@@ -447,7 +430,7 @@ ifupdown_ip4_add_dns (NMSettingIP4Config *s_ip4, const char *dns)
continue;
}
- if (!nm_setting_ip4_config_add_dns (s_ip4, addr))
+ if (!nm_setting_ip_config_add_dns (s_ip4, *iter))
nm_log_warn (LOGD_SETTINGS, " duplicate DNS domain '%s'", *iter);
}
g_strfreev (list);
@@ -459,15 +442,15 @@ update_ip4_setting_from_if_block(NMConnection *connection,
GError **error)
{
- NMSettingIP4Config *s_ip4 = NM_SETTING_IP4_CONFIG (nm_setting_ip4_config_new());
+ NMSettingIPConfig *s_ip4 = NM_SETTING_IP_CONFIG (nm_setting_ip4_config_new());
const char *type = ifparser_getkey(block, "inet");
gboolean is_static = type && !strcmp("static", type);
if (!is_static) {
- g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
} else {
- guint32 tmp_addr, tmp_mask, tmp_gw;
- NMIP4Address *addr;
+ guint32 tmp_mask;
+ NMIPAddress *addr;
const char *address_v;
const char *netmask_v;
const char *gateway_v;
@@ -479,10 +462,9 @@ update_ip4_setting_from_if_block(NMConnection *connection,
/* Address */
address_v = ifparser_getkey (block, "address");
- if (!address_v || !inet_pton (AF_INET, address_v, &tmp_addr)) {
- g_set_error (error, eni_plugin_error_quark (), 0,
- "Missing IPv4 address '%s'",
- address_v ? address_v : "(none)");
+ if (!address_v) {
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "Missing IPv4 address");
goto error;
}
@@ -491,13 +473,8 @@ update_ip4_setting_from_if_block(NMConnection *connection,
if (netmask_v) {
if (strlen (netmask_v) < 7) {
netmask_int = atoi (netmask_v);
- if (netmask_int > 32) {
- g_set_error (error, eni_plugin_error_quark (), 0,
- "Invalid IPv4 netmask '%s'", netmask_v);
- goto error;
- }
} else if (!inet_pton (AF_INET, netmask_v, &tmp_mask)) {
- g_set_error (error, eni_plugin_error_quark (), 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Invalid IPv4 netmask '%s'", netmask_v);
goto error;
} else {
@@ -505,29 +482,30 @@ update_ip4_setting_from_if_block(NMConnection *connection,
}
}
- /* gateway */
- gateway_v = ifparser_getkey (block, "gateway");
- if (!gateway_v)
- gateway_v = address_v; /* dcbw: whaaa?? */
- if (!inet_pton (AF_INET, gateway_v, &tmp_gw)) {
- g_set_error (error, eni_plugin_error_quark (), 0,
- "Invalid IPv4 gateway '%s'", gateway_v);
- goto error;
- }
-
/* Add the new address to the setting */
- addr = nm_ip4_address_new ();
- nm_ip4_address_set_address (addr, tmp_addr);
- nm_ip4_address_set_prefix (addr, netmask_int);
- nm_ip4_address_set_gateway (addr, tmp_gw);
+ addr = nm_ip_address_new (AF_INET, address_v, netmask_int, error);
+ if (!addr)
+ goto error;
- if (nm_setting_ip4_config_add_address (s_ip4, addr)) {
+ if (nm_setting_ip_config_add_address (s_ip4, addr)) {
nm_log_info (LOGD_SETTINGS, "addresses count: %d",
- nm_setting_ip4_config_get_num_addresses (s_ip4));
+ nm_setting_ip_config_get_num_addresses (s_ip4));
} else {
nm_log_info (LOGD_SETTINGS, "ignoring duplicate IP4 address");
}
- nm_ip4_address_unref (addr);
+ nm_ip_address_unref (addr);
+
+ /* gateway */
+ gateway_v = ifparser_getkey (block, "gateway");
+ if (gateway_v) {
+ if (!nm_utils_ipaddr_valid (AF_INET, gateway_v)) {
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "Invalid IPv4 gateway '%s'", gateway_v);
+ goto error;
+ }
+ if (!nm_setting_ip_config_get_gateway (s_ip4))
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_GATEWAY, gateway_v, NULL);
+ }
nameserver_v = ifparser_getkey (block, "dns-nameserver");
ifupdown_ip4_add_dns (s_ip4, nameserver_v);
@@ -535,7 +513,7 @@ update_ip4_setting_from_if_block(NMConnection *connection,
nameservers_v = ifparser_getkey (block, "dns-nameservers");
ifupdown_ip4_add_dns (s_ip4, nameservers_v);
- if (!nm_setting_ip4_config_get_num_dns (s_ip4))
+ if (!nm_setting_ip_config_get_num_dns (s_ip4))
nm_log_info (LOGD_SETTINGS, "No dns-nameserver configured in /etc/network/interfaces");
/* DNS searches */
@@ -546,13 +524,13 @@ 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))
+ if (!nm_setting_ip_config_add_dns_search (s_ip4, *iter))
nm_log_warn (LOGD_SETTINGS, " duplicate DNS domain '%s'", *iter);
}
g_strfreev (list);
}
- g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL, NULL);
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL, NULL);
}
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
@@ -564,7 +542,7 @@ error:
}
static void
-ifupdown_ip6_add_dns (NMSettingIP6Config *s_ip6, const char *dns)
+ifupdown_ip6_add_dns (NMSettingIPConfig *s_ip6, const char *dns)
{
struct in6_addr addr;
char **list, **iter;
@@ -582,7 +560,7 @@ ifupdown_ip6_add_dns (NMSettingIP6Config *s_ip6, const char *dns)
continue;
}
- if (!nm_setting_ip6_config_add_dns (s_ip6, &addr))
+ if (!nm_setting_ip_config_add_dns (s_ip6, *iter))
nm_log_warn (LOGD_SETTINGS, " duplicate DNS domain '%s'", *iter);
}
g_strfreev (list);
@@ -593,16 +571,15 @@ update_ip6_setting_from_if_block(NMConnection *connection,
if_block *block,
GError **error)
{
- NMSettingIP6Config *s_ip6 = NM_SETTING_IP6_CONFIG (nm_setting_ip6_config_new());
+ NMSettingIPConfig *s_ip6 = NM_SETTING_IP_CONFIG (nm_setting_ip6_config_new());
const char *type = ifparser_getkey(block, "inet6");
gboolean is_static = type && (!strcmp("static", type) ||
!strcmp("v4tunnel", type));
if (!is_static) {
- g_object_set(s_ip6, NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO, NULL);
+ g_object_set(s_ip6, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO, NULL);
} else {
- struct in6_addr tmp_addr, tmp_gw;
- NMIP6Address *addr;
+ NMIPAddress *addr;
const char *address_v;
const char *prefix_v;
const char *gateway_v;
@@ -614,10 +591,9 @@ update_ip6_setting_from_if_block(NMConnection *connection,
/* Address */
address_v = ifparser_getkey(block, "address");
- if (!address_v || !inet_pton (AF_INET6, address_v, &tmp_addr)) {
- g_set_error (error, eni_plugin_error_quark (), 0,
- "Missing IPv6 address '%s'",
- address_v ? address_v : "(none)");
+ if (!address_v) {
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "Missing IPv6 address");
goto error;
}
@@ -626,29 +602,30 @@ update_ip6_setting_from_if_block(NMConnection *connection,
if (prefix_v)
prefix_int = g_ascii_strtoll (prefix_v, NULL, 10);
- /* Gateway */
- gateway_v = ifparser_getkey (block, "gateway");
- if (!gateway_v)
- gateway_v = address_v; /* dcbw: whaaa?? */
- if (!inet_pton (AF_INET6, gateway_v, &tmp_gw)) {
- g_set_error (error, eni_plugin_error_quark (), 0,
- "Invalid IPv6 gateway '%s'", gateway_v);
- goto error;
- }
-
/* Add the new address to the setting */
- addr = nm_ip6_address_new ();
- nm_ip6_address_set_address (addr, &tmp_addr);
- nm_ip6_address_set_prefix (addr, prefix_int);
- nm_ip6_address_set_gateway (addr, &tmp_gw);
+ addr = nm_ip_address_new (AF_INET6, address_v, prefix_int, error);
+ if (!addr)
+ goto error;
- if (nm_setting_ip6_config_add_address (s_ip6, addr)) {
+ if (nm_setting_ip_config_add_address (s_ip6, addr)) {
nm_log_info (LOGD_SETTINGS, "addresses count: %d",
- nm_setting_ip6_config_get_num_addresses (s_ip6));
+ nm_setting_ip_config_get_num_addresses (s_ip6));
} else {
nm_log_info (LOGD_SETTINGS, "ignoring duplicate IP6 address");
}
- nm_ip6_address_unref (addr);
+ nm_ip_address_unref (addr);
+
+ /* gateway */
+ gateway_v = ifparser_getkey (block, "gateway");
+ if (gateway_v) {
+ if (!nm_utils_ipaddr_valid (AF_INET6, gateway_v)) {
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "Invalid IPv6 gateway '%s'", gateway_v);
+ goto error;
+ }
+ if (!nm_setting_ip_config_get_gateway (s_ip6))
+ g_object_set (s_ip6, NM_SETTING_IP_CONFIG_GATEWAY, gateway_v, NULL);
+ }
nameserver_v = ifparser_getkey(block, "dns-nameserver");
ifupdown_ip6_add_dns (s_ip6, nameserver_v);
@@ -656,7 +633,7 @@ update_ip6_setting_from_if_block(NMConnection *connection,
nameservers_v = ifparser_getkey(block, "dns-nameservers");
ifupdown_ip6_add_dns (s_ip6, nameservers_v);
- if (!nm_setting_ip6_config_get_num_dns (s_ip6))
+ if (!nm_setting_ip_config_get_num_dns (s_ip6))
nm_log_info (LOGD_SETTINGS, "No dns-nameserver configured in /etc/network/interfaces");
/* DNS searches */
@@ -667,14 +644,14 @@ 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))
+ if (!nm_setting_ip_config_add_dns_search (s_ip6, *iter))
nm_log_warn (LOGD_SETTINGS, " duplicate DNS domain '%s'", *iter);
}
g_strfreev (list);
}
g_object_set (s_ip6,
- NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_MANUAL,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_MANUAL,
NULL);
}
@@ -709,7 +686,7 @@ ifupdown_update_connection_from_if_block (NMConnection *connection,
idstr = g_strconcat ("Ifupdown (", block->name, ")", NULL);
uuid_base = idstr;
- uuid = nm_utils_uuid_generate_from_string (uuid_base);
+ uuid = nm_utils_uuid_generate_from_string (uuid_base, -1, NM_UTILS_UUID_TYPE_LEGACY, NULL);
g_object_set (s_con,
NM_SETTING_CONNECTION_TYPE, type,
NM_SETTING_CONNECTION_INTERFACE_NAME, block->name,
diff --git a/src/settings/plugins/ifupdown/plugin.c b/src/settings/plugins/ifupdown/plugin.c
index dcae211c4..1b5642afb 100644
--- a/src/settings/plugins/ifupdown/plugin.c
+++ b/src/settings/plugins/ifupdown/plugin.c
@@ -22,11 +22,11 @@
* (C) Copyright 2009 - 2011 Red Hat, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include <sys/inotify.h>
-#include <net/ethernet.h>
-#include <netinet/ether.h>
#include <gmodule.h>
#include <glib-object.h>
@@ -36,13 +36,14 @@
#include "interface_parser.h"
-#include "NetworkManager.h"
+#include "nm-dbus-interface.h"
#include "nm-system-config-interface.h"
#include "nm-setting-ip4-config.h"
#include "nm-setting-wireless.h"
#include "nm-setting-wired.h"
#include "nm-setting-ppp.h"
#include "nm-utils.h"
+#include "nm-core-internal.h"
#include "nm-ifupdown-connection.h"
#include "plugin.h"
@@ -186,7 +187,6 @@ bind_device_to_connection (SCPluginIfupdown *self,
GUdevDevice *device,
NMIfupdownConnection *exported)
{
- GByteArray *mac_address;
NMSettingWired *s_wired;
NMSettingWireless *s_wifi;
const char *iface, *address;
@@ -203,8 +203,7 @@ bind_device_to_connection (SCPluginIfupdown *self,
return;
}
- mac_address = nm_utils_hwaddr_atoba (address, ARPHRD_ETHER);
- if (!mac_address) {
+ if (!nm_utils_hwaddr_valid (address, ETH_ALEN)) {
nm_log_warn (LOGD_SETTINGS, "failed to parse MAC address '%s' for %s",
address, iface);
return;
@@ -214,12 +213,11 @@ bind_device_to_connection (SCPluginIfupdown *self,
s_wifi = nm_connection_get_setting_wireless (NM_CONNECTION (exported));
if (s_wired) {
nm_log_info (LOGD_SETTINGS, "locking wired connection setting");
- g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, mac_address, NULL);
+ g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, address, NULL);
} else if (s_wifi) {
nm_log_info (LOGD_SETTINGS, "locking wireless connection setting");
- g_object_set (s_wifi, NM_SETTING_WIRELESS_MAC_ADDRESS, mac_address, NULL);
+ g_object_set (s_wifi, NM_SETTING_WIRELESS_MAC_ADDRESS, address, NULL);
}
- g_byte_array_free (mac_address, TRUE);
nm_settings_connection_commit_changes (NM_SETTINGS_CONNECTION (exported), NULL, NULL);
}
@@ -507,9 +505,7 @@ static GSList*
SCPluginIfupdown_get_connections (NMSystemConfigInterface *config)
{
SCPluginIfupdownPrivate *priv = SC_PLUGIN_IFUPDOWN_GET_PRIVATE (config);
- GSList *connections = NULL;
- GHashTableIter iter;
- gpointer value;
+ GSList *connections;
nm_log_info (LOGD_SETTINGS, "(%d) ... get_connections.", GPOINTER_TO_UINT(config));
@@ -518,9 +514,7 @@ SCPluginIfupdown_get_connections (NMSystemConfigInterface *config)
return NULL;
}
- g_hash_table_iter_init (&iter, priv->connections);
- while (g_hash_table_iter_next (&iter, NULL, &value))
- connections = g_slist_prepend (connections, value);
+ connections = _nm_utils_hash_values_to_slist (priv->connections);
nm_log_info (LOGD_SETTINGS, "(%d) connections count: %d", GPOINTER_TO_UINT(config), g_slist_length(connections));
return connections;
diff --git a/src/settings/plugins/ifupdown/plugin.h b/src/settings/plugins/ifupdown/plugin.h
index ed7732b88..943b8b9f6 100644
--- a/src/settings/plugins/ifupdown/plugin.h
+++ b/src/settings/plugins/ifupdown/plugin.h
@@ -48,6 +48,4 @@ struct _SCPluginIfupdownClass {
GType sc_plugin_ifupdown_get_type (void);
-GQuark ifupdown_plugin_error_quark (void);
-
#endif /* _PLUGIN_H_ */
diff --git a/src/settings/plugins/ifupdown/tests/Makefile.am b/src/settings/plugins/ifupdown/tests/Makefile.am
index 160b33272..24cdd9550 100644
--- a/src/settings/plugins/ifupdown/tests/Makefile.am
+++ b/src/settings/plugins/ifupdown/tests/Makefile.am
@@ -2,19 +2,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)/libnm-glib \
+ -I$(top_srcdir)/libnm-core \
+ -I$(top_builddir)/libnm-core \
-I$(top_srcdir)/src \
- -I$(top_srcdir)/src/logging \
-I$(top_srcdir)/src/settings \
-I$(srcdir)/../ \
-DG_LOG_DOMAIN=\""NetworkManager-ifupdown"\" \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
- $(DBUS_CFLAGS) \
- $(POLKIT_CFLAGS) \
-DTEST_ENI_DIR=\"$(abs_srcdir)\"
noinst_PROGRAMS = test-ifupdown
@@ -25,17 +21,14 @@ test_ifupdown_SOURCES = \
../parser.c
test_ifupdown_LDADD = \
- $(top_builddir)/src/libNetworkManager.la \
- $(top_builddir)/libnm-glib/libnm-glib.la \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(DBUS_LIBS)
+ $(top_builddir)/src/libNetworkManager.la
TESTS = test-ifupdown
+endif
+
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 \
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 86afefe66..6dedec008 100644
--- a/src/settings/plugins/ifupdown/tests/Makefile.in
+++ b/src/settings/plugins/ifupdown/tests/Makefile.in
@@ -109,12 +109,8 @@ am__test_ifupdown_SOURCES_DIST = test-ifupdown.c ../interface_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@ $(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
@@ -211,6 +207,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -334,6 +332,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -353,6 +352,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -379,7 +379,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -460,19 +460,15 @@ 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-core \
+@ENABLE_TESTS_TRUE@ -I$(top_builddir)/libnm-core \
@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@ -DNETWORKMANAGER_COMPILATION \
@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 = \
@@ -481,16 +477,13 @@ with_valgrind = @with_valgrind@
@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@ $(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@ test20-source-stanza test20-source-stanza.eth0 test20-source-stanza.eth1
+@ENABLE_TESTS_TRUE@ $(top_builddir)/src/libNetworkManager.la
+
+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 \
+ test20-source-stanza test20-source-stanza.eth0 test20-source-stanza.eth1
all: all-am
diff --git a/src/settings/plugins/ifupdown/tests/test-ifupdown.c b/src/settings/plugins/ifupdown/tests/test-ifupdown.c
index 838642870..1c100ac2e 100644
--- a/src/settings/plugins/ifupdown/tests/test-ifupdown.c
+++ b/src/settings/plugins/ifupdown/tests/test-ifupdown.c
@@ -18,11 +18,12 @@
*
*/
+#include "config.h"
+
#include <glib.h>
#include <string.h>
-#include <nm-utils.h>
-
+#include "nm-core-internal.h"
#include "nm-logging.h"
#include "interface_parser.h"
#include "parser.h"
@@ -460,20 +461,15 @@ test17_read_static_ipv4 (const char *path)
{
NMConnection *connection;
NMSettingConnection *s_con;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
NMSettingWired *s_wired;
char *unmanaged = NULL;
GError *error = NULL;
const char* tmp;
- const char *expected_address = "10.0.0.3";
const char *expected_id = "Ifupdown (eth0)";
- const char *expected_dns1 = "10.0.0.1";
- const char *expected_dns2 = "10.0.0.2";
const char *expected_search1 = "example.com";
const char *expected_search2 = "foo.example.com";
- guint32 expected_prefix = 8;
- NMIP4Address *ip4_addr;
- guint32 addr;
+ NMIPAddress *ip4_addr;
#define TEST17_NAME "wired-static-verify-ip4"
if_block *block = NULL;
@@ -481,7 +477,7 @@ test17_read_static_ipv4 (const char *path)
init_ifparser_with_file (path, file);
block = ifparser_getfirst ();
- connection = nm_connection_new();
+ connection = nm_simple_connection_new();
ifupdown_update_connection_from_if_block(connection, block, &error);
ASSERT (connection != NULL,
@@ -524,10 +520,6 @@ test17_read_static_ipv4 (const char *path)
/* ===== IPv4 SETTING ===== */
- ASSERT (inet_pton (AF_INET, expected_address, &addr) > 0,
- TEST17_NAME, "failed to verify %s: couldn't convert IP address #1",
- file);
-
s_ip4 = nm_connection_get_setting_ip4_config (connection);
ASSERT (s_ip4 != NULL,
TEST17_NAME, "failed to verify %s: missing %s setting",
@@ -535,101 +527,81 @@ test17_read_static_ipv4 (const char *path)
NM_SETTING_IP4_CONFIG_SETTING_NAME);
/* Method */
- tmp = nm_setting_ip4_config_get_method (s_ip4);
+ tmp = nm_setting_ip_config_get_method (s_ip4);
ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_MANUAL) == 0,
TEST17_NAME, "failed to verify %s: unexpected %s / %s key value",
file,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_METHOD);
+ NM_SETTING_IP_CONFIG_METHOD);
/* IP addresses */
- ASSERT (nm_setting_ip4_config_get_num_addresses (s_ip4) == 1,
+ ASSERT (nm_setting_ip_config_get_num_addresses (s_ip4) == 1,
TEST17_NAME, "failed to verify %s: unexpected %s / %s key value",
file,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_ADDRESSES);
-
- ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 0);
- ASSERT (ip4_addr,
- TEST17_NAME, "failed to verify %s: missing IP4 address #1",
- file);
-
- ASSERT (nm_ip4_address_get_prefix (ip4_addr) == expected_prefix,
- TEST17_NAME, "failed to verify %s: unexpected IP4 address prefix",
- file);
+ NM_SETTING_IP_CONFIG_ADDRESSES);
- ASSERT (nm_ip4_address_get_address (ip4_addr) == addr,
- TEST17_NAME, "failed to verify %s: unexpected IP4 address: %s",
- file, addr);
+ ip4_addr = nm_setting_ip_config_get_address (s_ip4, 0);
+ g_assert (ip4_addr != NULL);
+ g_assert_cmpstr (nm_ip_address_get_address (ip4_addr), ==, "10.0.0.3");
+ g_assert_cmpint (nm_ip_address_get_prefix (ip4_addr), ==, 8);
/* DNS Addresses */
- ASSERT (nm_setting_ip4_config_get_num_dns (s_ip4) == 2,
+ ASSERT (nm_setting_ip_config_get_num_dns (s_ip4) == 2,
TEST17_NAME, "failed to verify %s: unexpected %s / %s key value",
file,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS);
+ NM_SETTING_IP_CONFIG_DNS);
- ASSERT (inet_pton (AF_INET, expected_dns1, &addr) > 0,
- TEST17_NAME, "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,
+ ASSERT (!strcmp (nm_setting_ip_config_get_dns (s_ip4, 0), "10.0.0.1"),
TEST17_NAME, "failed to verify %s: unexpected %s / %s key value #1",
file,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS);
+ NM_SETTING_IP_CONFIG_DNS);
- ASSERT (inet_pton (AF_INET, expected_dns2, &addr) > 0,
- TEST17_NAME, "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,
+ ASSERT (!strcmp (nm_setting_ip_config_get_dns (s_ip4, 1), "10.0.0.2"),
TEST17_NAME, "failed to verify %s: unexpected %s / %s key value #2",
file,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS);
+ NM_SETTING_IP_CONFIG_DNS);
- ASSERT (nm_setting_ip4_config_get_num_addresses (s_ip4) == 1,
+ ASSERT (nm_setting_ip_config_get_num_addresses (s_ip4) == 1,
TEST17_NAME, "failed to verify %s: unexpected %s / %s key value",
file,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS);
+ NM_SETTING_IP_CONFIG_DNS);
/* DNS search domains */
- ASSERT (nm_setting_ip4_config_get_num_dns_searches (s_ip4) == 2,
+ ASSERT (nm_setting_ip_config_get_num_dns_searches (s_ip4) == 2,
TEST17_NAME, "failed to verify %s: unexpected %s / %s key value",
file,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS);
+ NM_SETTING_IP_CONFIG_DNS);
- tmp = nm_setting_ip4_config_get_dns_search (s_ip4, 0);
+ tmp = nm_setting_ip_config_get_dns_search (s_ip4, 0);
ASSERT (tmp != NULL,
TEST17_NAME, "failed to verify %s: missing %s / %s key",
file,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS_SEARCH);
+ NM_SETTING_IP_CONFIG_DNS_SEARCH);
ASSERT (strcmp (tmp, expected_search1) == 0,
TEST17_NAME, "failed to verify %s: unexpected %s / %s key value",
file,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS_SEARCH);
+ NM_SETTING_IP_CONFIG_DNS_SEARCH);
- tmp = nm_setting_ip4_config_get_dns_search (s_ip4, 1);
+ tmp = nm_setting_ip_config_get_dns_search (s_ip4, 1);
ASSERT (tmp != NULL,
TEST17_NAME, "failed to verify %s: missing %s / %s key",
file,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS_SEARCH);
+ NM_SETTING_IP_CONFIG_DNS_SEARCH);
ASSERT (strcmp (tmp, expected_search2) == 0,
TEST17_NAME, "failed to verify %s: unexpected %s / %s key value",
file,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS_SEARCH);
+ NM_SETTING_IP_CONFIG_DNS_SEARCH);
g_object_unref (connection);
}
@@ -639,27 +611,22 @@ test18_read_static_ipv6 (const char *path)
{
NMConnection *connection;
NMSettingConnection *s_con;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip6;
NMSettingWired *s_wired;
char *unmanaged = NULL;
GError *error = NULL;
const char* tmp;
- const char *expected_address = "fc00::1";
const char *expected_id = "Ifupdown (myip6tunnel)";
- const char *expected_dns1 = "fc00::2";
- const char *expected_dns2 = "fc00::3";
const char *expected_search1 = "example.com";
const char *expected_search2 = "foo.example.com";
- guint32 expected_prefix = 64;
- NMIP6Address *ip6_addr;
- struct in6_addr addr;
+ NMIPAddress *ip6_addr;
if_block *block = NULL;
#define TEST18_NAME "wired-static-verify-ip6"
const char* file = "test18-" TEST18_NAME;
init_ifparser_with_file (path, file);
block = ifparser_getfirst ();
- connection = nm_connection_new();
+ connection = nm_simple_connection_new();
ifupdown_update_connection_from_if_block(connection, block, &error);
ASSERT (connection != NULL,
@@ -708,11 +675,6 @@ test18_read_static_ipv6 (const char *path)
/* ===== IPv6 SETTING ===== */
- ASSERT (inet_pton (AF_INET6, expected_address, &addr) > 0,
- TEST18_NAME,
- "failed to verify %s: couldn't convert IP address #1",
- file);
-
s_ip6 = nm_connection_get_setting_ip6_config (connection);
ASSERT (s_ip6 != NULL,
TEST18_NAME,
@@ -721,115 +683,85 @@ test18_read_static_ipv6 (const char *path)
NM_SETTING_IP6_CONFIG_SETTING_NAME);
/* Method */
- tmp = nm_setting_ip6_config_get_method (s_ip6);
+ tmp = nm_setting_ip_config_get_method (s_ip6);
ASSERT (strcmp (tmp, NM_SETTING_IP6_CONFIG_METHOD_MANUAL) == 0,
TEST18_NAME,
"failed to verify %s: unexpected %s / %s key value",
file,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_METHOD);
+ NM_SETTING_IP_CONFIG_METHOD);
/* IP addresses */
- ASSERT (nm_setting_ip6_config_get_num_addresses (s_ip6) == 1,
+ ASSERT (nm_setting_ip_config_get_num_addresses (s_ip6) == 1,
TEST18_NAME,
"failed to verify %s: unexpected number of %s / %s",
file,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_ADDRESSES);
-
- ip6_addr = nm_setting_ip6_config_get_address (s_ip6, 0);
- ASSERT (ip6_addr,
- TEST18_NAME,
- "failed to verify %s: missing %s / %s #1",
- file,
- NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_ADDRESSES);
+ NM_SETTING_IP_CONFIG_ADDRESSES);
- ASSERT (nm_ip6_address_get_prefix (ip6_addr) == expected_prefix,
- TEST18_NAME
- "failed to verify %s: unexpected %s / %s prefix",
- file,
- NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_ADDRESSES);
-
- ASSERT (IN6_ARE_ADDR_EQUAL (nm_ip6_address_get_address (ip6_addr),
- &addr),
- TEST18_NAME,
- "failed to verify %s: unexpected %s / %s",
- file,
- NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_ADDRESSES);
+ ip6_addr = nm_setting_ip_config_get_address (s_ip6, 0);
+ g_assert (ip6_addr != NULL);
+ g_assert_cmpstr (nm_ip_address_get_address (ip6_addr), ==, "fc00::1");
+ g_assert_cmpint (nm_ip_address_get_prefix (ip6_addr), ==, 64);
/* DNS Addresses */
- ASSERT (nm_setting_ip6_config_get_num_dns (s_ip6) == 2,
+ ASSERT (nm_setting_ip_config_get_num_dns (s_ip6) == 2,
TEST18_NAME,
"failed to verify %s: unexpected number of %s / %s values",
file,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_DNS);
+ NM_SETTING_IP_CONFIG_DNS);
- ASSERT (inet_pton (AF_INET6, expected_dns1, &addr) > 0,
- TEST18_NAME,
- "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),
- &addr),
+ ASSERT (!strcmp (nm_setting_ip_config_get_dns (s_ip6, 0), "fc00::2"),
TEST18_NAME,
"failed to verify %s: unexpected %s / %s #1",
file,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_DNS);
-
- ASSERT (inet_pton (AF_INET6, expected_dns2, &addr) > 0,
- TEST18_NAME,
- "failed to verify %s: couldn't convert DNS IP address #2",
- file);
+ NM_SETTING_IP_CONFIG_DNS);
- ASSERT (IN6_ARE_ADDR_EQUAL (nm_setting_ip6_config_get_dns (s_ip6, 1),
- &addr),
+ ASSERT (!strcmp (nm_setting_ip_config_get_dns (s_ip6, 1), "fc00::3"),
TEST18_NAME, "failed to verify %s: unexpected %s / %s #2",
file,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_DNS);
+ NM_SETTING_IP_CONFIG_DNS);
/* DNS search domains */
- ASSERT (nm_setting_ip6_config_get_num_dns_searches (s_ip6) == 2,
+ ASSERT (nm_setting_ip_config_get_num_dns_searches (s_ip6) == 2,
TEST18_NAME,
"failed to verify %s: unexpected number of %s / %s values",
file,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_DNS_SEARCH);
+ NM_SETTING_IP_CONFIG_DNS_SEARCH);
- tmp = nm_setting_ip6_config_get_dns_search (s_ip6, 0);
+ tmp = nm_setting_ip_config_get_dns_search (s_ip6, 0);
ASSERT (tmp != NULL,
"wired-ipv6-manual-verify-ip6",
"failed to verify %s: missing %s / %s #1",
file,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_DNS_SEARCH);
+ NM_SETTING_IP_CONFIG_DNS_SEARCH);
ASSERT (strcmp (tmp, expected_search1) == 0,
"wired-ipv6-manual-verify-ip6",
"failed to verify %s: unexpected %s / %s #1",
file,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_DNS_SEARCH);
+ NM_SETTING_IP_CONFIG_DNS_SEARCH);
- tmp = nm_setting_ip6_config_get_dns_search (s_ip6, 1);
+ tmp = nm_setting_ip_config_get_dns_search (s_ip6, 1);
ASSERT (tmp != NULL,
TEST18_NAME,
"failed to verify %s: missing %s / %s #2",
file,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_DNS_SEARCH);
+ NM_SETTING_IP_CONFIG_DNS_SEARCH);
ASSERT (strcmp (tmp, expected_search2) == 0,
TEST18_NAME,
"failed to verify %s: unexpected %s / %s #2",
file,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_DNS_SEARCH);
+ NM_SETTING_IP_CONFIG_DNS_SEARCH);
g_free (unmanaged);
g_object_unref (connection);
@@ -839,13 +771,10 @@ static void
test19_read_static_ipv4_plen (const char *path)
{
NMConnection *connection;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
char *unmanaged = NULL;
GError *error = NULL;
- const char *expected_address = "10.0.0.3";
- guint32 expected_prefix = 8;
- NMIP4Address *ip4_addr;
- guint32 addr;
+ NMIPAddress *ip4_addr;
#define TEST19_NAME "wired-static-verify-ip4-plen"
if_block *block = NULL;
@@ -853,7 +782,7 @@ test19_read_static_ipv4_plen (const char *path)
init_ifparser_with_file (path, file);
block = ifparser_getfirst ();
- connection = nm_connection_new();
+ connection = nm_simple_connection_new();
ifupdown_update_connection_from_if_block(connection, block, &error);
ASSERT (connection != NULL,
@@ -867,10 +796,6 @@ test19_read_static_ipv4_plen (const char *path)
/* ===== IPv4 SETTING ===== */
- ASSERT (inet_pton (AF_INET, expected_address, &addr) > 0,
- TEST19_NAME, "failed to verify %s: couldn't convert IP address #1",
- file);
-
s_ip4 = nm_connection_get_setting_ip4_config (connection);
ASSERT (s_ip4 != NULL,
TEST19_NAME, "failed to verify %s: missing %s setting",
@@ -878,24 +803,16 @@ test19_read_static_ipv4_plen (const char *path)
NM_SETTING_IP4_CONFIG_SETTING_NAME);
/* IP addresses */
- ASSERT (nm_setting_ip4_config_get_num_addresses (s_ip4) == 1,
+ ASSERT (nm_setting_ip_config_get_num_addresses (s_ip4) == 1,
TEST19_NAME, "failed to verify %s: unexpected %s / %s key value",
file,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_ADDRESSES);
+ NM_SETTING_IP_CONFIG_ADDRESSES);
- ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 0);
- ASSERT (ip4_addr,
- TEST19_NAME, "failed to verify %s: missing IP4 address #1",
- file);
-
- ASSERT (nm_ip4_address_get_prefix (ip4_addr) == expected_prefix,
- TEST19_NAME, "failed to verify %s: unexpected IP4 address prefix",
- file);
-
- ASSERT (nm_ip4_address_get_address (ip4_addr) == addr,
- TEST19_NAME, "failed to verify %s: unexpected IP4 address: %s",
- file, addr);
+ ip4_addr = nm_setting_ip_config_get_address (s_ip4, 0);
+ g_assert (ip4_addr != NULL);
+ g_assert_cmpstr (nm_ip_address_get_address (ip4_addr), ==, "10.0.0.3");
+ g_assert_cmpint (nm_ip_address_get_prefix (ip4_addr), ==, 8);
g_object_unref (connection);
}
@@ -930,14 +847,10 @@ test20_source_stanza (const char *path)
int
main (int argc, char **argv)
{
- 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);
diff --git a/src/settings/plugins/keyfile/Makefile.am b/src/settings/plugins/keyfile/Makefile.am
index cac97e7fb..079c45c39 100644
--- a/src/settings/plugins/keyfile/Makefile.am
+++ b/src/settings/plugins/keyfile/Makefile.am
@@ -4,18 +4,15 @@ 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 \
+ -I$(top_srcdir)/libnm-core \
+ -I$(top_builddir)/libnm-core \
-DG_LOG_DOMAIN=\""NetworkManager-keyfile"\" \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS) \
- $(POLKIT_CFLAGS) \
-DNMCONFDIR=\"$(nmconfdir)\"
noinst_LTLIBRARIES = \
@@ -29,7 +26,6 @@ libkeyfile_io_la_SOURCES = \
reader.h \
writer.c \
writer.h \
- errors.c \
utils.c \
utils.h \
common.h
@@ -45,12 +41,7 @@ libnm_settings_plugin_keyfile_la_SOURCES = \
plugin.h
libnm_settings_plugin_keyfile_la_LIBADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- libkeyfile-io.la \
- $(GLIB_LIBS) \
- $(DBUS_LIBS)
-
-libnm_settings_plugin_keyfile_la_LDFLAGS = -rdynamic
+ libkeyfile-io.la
keyfiledir=$(sysconfdir)/NetworkManager/system-connections
diff --git a/src/settings/plugins/keyfile/Makefile.in b/src/settings/plugins/keyfile/Makefile.in
index 8c4d6101b..8c0d11aff 100644
--- a/src/settings/plugins/keyfile/Makefile.in
+++ b/src/settings/plugins/keyfile/Makefile.in
@@ -104,23 +104,17 @@ CONFIG_CLEAN_VPATH_FILES =
LTLIBRARIES = $(noinst_LTLIBRARIES)
am__DEPENDENCIES_1 =
libkeyfile_io_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am_libkeyfile_io_la_OBJECTS = reader.lo writer.lo errors.lo utils.lo
+am_libkeyfile_io_la_OBJECTS = reader.lo writer.lo utils.lo
libkeyfile_io_la_OBJECTS = $(am_libkeyfile_io_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_settings_plugin_keyfile_la_DEPENDENCIES = \
- $(top_builddir)/libnm-util/libnm-util.la libkeyfile-io.la \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+libnm_settings_plugin_keyfile_la_DEPENDENCIES = libkeyfile-io.la
am_libnm_settings_plugin_keyfile_la_OBJECTS = \
nm-keyfile-connection.lo plugin.lo
libnm_settings_plugin_keyfile_la_OBJECTS = \
$(am_libnm_settings_plugin_keyfile_la_OBJECTS)
-libnm_settings_plugin_keyfile_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
- $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
- $(AM_CFLAGS) $(CFLAGS) \
- $(libnm_settings_plugin_keyfile_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
@@ -235,6 +229,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -358,6 +354,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -377,6 +374,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -403,7 +401,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -485,18 +483,15 @@ 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 \
+ -I$(top_srcdir)/libnm-core \
+ -I$(top_builddir)/libnm-core \
-DG_LOG_DOMAIN=\""NetworkManager-keyfile"\" \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS) \
- $(POLKIT_CFLAGS) \
-DNMCONFDIR=\"$(nmconfdir)\"
noinst_LTLIBRARIES = \
@@ -510,7 +505,6 @@ libkeyfile_io_la_SOURCES = \
reader.h \
writer.c \
writer.h \
- errors.c \
utils.c \
utils.h \
common.h
@@ -525,12 +519,8 @@ libnm_settings_plugin_keyfile_la_SOURCES = \
plugin.h
libnm_settings_plugin_keyfile_la_LIBADD = \
- $(top_builddir)/libnm-util/libnm-util.la \
- libkeyfile-io.la \
- $(GLIB_LIBS) \
- $(DBUS_LIBS)
+ libkeyfile-io.la
-libnm_settings_plugin_keyfile_la_LDFLAGS = -rdynamic
keyfiledir = $(sysconfdir)/NetworkManager/system-connections
all: all-recursive
@@ -582,7 +572,7 @@ libkeyfile-io.la: $(libkeyfile_io_la_OBJECTS) $(libkeyfile_io_la_DEPENDENCIES) $
$(AM_V_CCLD)$(LINK) $(libkeyfile_io_la_OBJECTS) $(libkeyfile_io_la_LIBADD) $(LIBS)
libnm-settings-plugin-keyfile.la: $(libnm_settings_plugin_keyfile_la_OBJECTS) $(libnm_settings_plugin_keyfile_la_DEPENDENCIES) $(EXTRA_libnm_settings_plugin_keyfile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(libnm_settings_plugin_keyfile_la_LINK) $(libnm_settings_plugin_keyfile_la_OBJECTS) $(libnm_settings_plugin_keyfile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(libnm_settings_plugin_keyfile_la_OBJECTS) $(libnm_settings_plugin_keyfile_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -590,7 +580,6 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/errors.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-keyfile-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@
diff --git a/src/settings/plugins/keyfile/common.h b/src/settings/plugins/keyfile/common.h
index 4faa5a848..db6569e54 100644
--- a/src/settings/plugins/keyfile/common.h
+++ b/src/settings/plugins/keyfile/common.h
@@ -30,8 +30,5 @@
#define VPN_SECRETS_GROUP "vpn-secrets"
-#define KEYFILE_PLUGIN_ERROR (keyfile_plugin_error_quark ())
-GQuark keyfile_plugin_error_quark (void);
-
#endif /* __COMMON_H__ */
diff --git a/src/settings/plugins/keyfile/nm-keyfile-connection.c b/src/settings/plugins/keyfile/nm-keyfile-connection.c
index 4ef761c6f..c852f0280 100644
--- a/src/settings/plugins/keyfile/nm-keyfile-connection.c
+++ b/src/settings/plugins/keyfile/nm-keyfile-connection.c
@@ -19,9 +19,11 @@
* Copyright (C) 2008 - 2012 Red Hat, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include <glib/gstdio.h>
-#include <NetworkManager.h>
+#include <nm-dbus-interface.h>
#include <nm-setting-connection.h>
#include <nm-utils.h>
@@ -63,7 +65,7 @@ nm_keyfile_connection_new (NMConnection *source,
uuid = nm_connection_get_uuid (NM_CONNECTION (tmp));
if (!uuid) {
- g_set_error (error, KEYFILE_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"Connection in file %s had no UUID", full_path);
g_object_unref (tmp);
return NULL;
@@ -166,11 +168,7 @@ nm_keyfile_connection_init (NMKeyfileConnection *connection)
static void
finalize (GObject *object)
{
- NMKeyfileConnectionPrivate *priv = NM_KEYFILE_CONNECTION_GET_PRIVATE (object);
-
- nm_connection_clear_secrets (NM_CONNECTION (object));
-
- g_free (priv->path);
+ g_free (NM_KEYFILE_CONNECTION_GET_PRIVATE (object)->path);
G_OBJECT_CLASS (nm_keyfile_connection_parent_class)->finalize (object);
}
@@ -184,7 +182,7 @@ nm_keyfile_connection_class_init (NMKeyfileConnectionClass *keyfile_connection_c
g_type_class_add_private (keyfile_connection_class, sizeof (NMKeyfileConnectionPrivate));
/* Virtual methods */
- object_class->finalize = finalize;
+ object_class->finalize = finalize;
settings_class->commit_changes = commit_changes;
settings_class->delete = do_delete;
}
diff --git a/src/settings/plugins/keyfile/nm-keyfile-connection.h b/src/settings/plugins/keyfile/nm-keyfile-connection.h
index 07dcafcb2..135bb49f7 100644
--- a/src/settings/plugins/keyfile/nm-keyfile-connection.h
+++ b/src/settings/plugins/keyfile/nm-keyfile-connection.h
@@ -19,8 +19,8 @@
* Copyright (C) 2008 - 2012 Red Hat, Inc.
*/
-#ifndef NM_KEYFILE_CONNECTION_H
-#define NM_KEYFILE_CONNECTION_H
+#ifndef __NETWORKMANAGER_KEYFILE_CONNECTION_H__
+#define __NETWORKMANAGER_KEYFILE_CONNECTION_H__
#include <nm-settings-connection.h>
@@ -52,4 +52,4 @@ void nm_keyfile_connection_set_path (NMKeyfileConnection *self, const cha
G_END_DECLS
-#endif /* NM_KEYFILE_CONNECTION_H */
+#endif /* __NETWORKMANAGER_KEYFILE_CONNECTION_H__ */
diff --git a/src/settings/plugins/keyfile/plugin.c b/src/settings/plugins/keyfile/plugin.c
index 10c839718..371fa47a7 100644
--- a/src/settings/plugins/keyfile/plugin.c
+++ b/src/settings/plugins/keyfile/plugin.c
@@ -19,11 +19,11 @@
* Copyright (C) 2008 - 2013 Red Hat, Inc.
*/
-#include <config.h>
+#include "config.h"
+
#include <sys/stat.h>
#include <unistd.h>
#include <sys/types.h>
-#include <netinet/ether.h>
#include <string.h>
#include <gmodule.h>
@@ -37,6 +37,7 @@
#include <nm-utils.h>
#include <nm-config.h>
#include <nm-logging.h>
+#include "nm-core-internal.h"
#include "plugin.h"
#include "nm-system-config-interface.h"
@@ -373,20 +374,13 @@ static GSList *
get_connections (NMSystemConfigInterface *config)
{
SCPluginKeyfilePrivate *priv = SC_PLUGIN_KEYFILE_GET_PRIVATE (config);
- GHashTableIter iter;
- gpointer data = NULL;
- GSList *list = NULL;
if (!priv->initialized) {
setup_monitoring (config);
read_connections (config);
priv->initialized = TRUE;
}
-
- 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;
+ return _nm_utils_hash_values_to_slist (priv->connections);
}
static gboolean
@@ -496,12 +490,12 @@ get_unmanaged_specs (NMSystemConfigInterface *config)
char **udis;
int i;
- udis = g_strsplit (str, ";", -1);
+ udis = g_strsplit_set (str, ";,", -1);
g_free (str);
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)) {
+ if (!strncmp (udis[i], "mac:", 4) && nm_utils_hwaddr_valid (udis[i] + 4, -1)) {
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]);
diff --git a/src/settings/plugins/keyfile/plugin.h b/src/settings/plugins/keyfile/plugin.h
index 5f4373905..48579785d 100644
--- a/src/settings/plugins/keyfile/plugin.h
+++ b/src/settings/plugins/keyfile/plugin.h
@@ -41,8 +41,6 @@ typedef struct {
GType sc_plugin_keyfile_get_type (void);
-GQuark keyfile_plugin_error_quark (void);
-
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 735f8c288..1d2ecdad9 100644
--- a/src/settings/plugins/keyfile/reader.c
+++ b/src/settings/plugins/keyfile/reader.c
@@ -19,27 +19,17 @@
* Copyright (C) 2008 - 2011 Red Hat, Inc.
*/
+#include "config.h"
+
#include <errno.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/types.h>
-#include <dbus/dbus-glib.h>
-#include <nm-setting.h>
-#include <nm-setting-ip4-config.h>
-#include <nm-setting-ip6-config.h>
-#include <nm-setting-vpn.h>
-#include <nm-setting-connection.h>
-#include <nm-setting-wired.h>
-#include <nm-setting-wireless.h>
-#include <nm-setting-bluetooth.h>
-#include <nm-setting-8021x.h>
-#include <nm-utils.h>
#include <arpa/inet.h>
-#include <netinet/ether.h>
-#include <linux/if_infiniband.h>
#include <string.h>
+#include "nm-core-internal.h"
#include "nm-dbus-glib-types.h"
#include "nm-glib-compat.h"
#include "nm-system-config-interface.h"
@@ -47,6 +37,8 @@
#include "reader.h"
#include "common.h"
#include "utils.h"
+#include "nm-core-internal.h"
+#include "NetworkManagerUtils.h"
/* Some setting properties also contain setting names, such as
* NMSettingConnection's 'type' property (which specifies the base type of the
@@ -119,135 +111,77 @@ get_one_int (const char *str, guint32 max_val, const char *key_name, guint32 *ou
}
static gpointer
-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)
+build_address (int family, const char *address_str, guint32 plen)
{
- GArray *result;
- guint32 addr;
- guint32 address = 0;
- guint32 gateway = 0;
- guint32 metric = 0;
- int err;
+ NMIPAddress *addr;
+ GError *error = NULL;
g_return_val_if_fail (address_str, NULL);
- /* Address */
- err = inet_pton (AF_INET, address_str, &addr);
- if (err <= 0) {
- nm_log_warn (LOGD_SETTINGS, "%s: ignoring invalid IPv4 address '%s'", __func__, address_str);
- return NULL;
- }
- address = addr;
-
- /* Gateway */
- if (gateway_str && gateway_str[0]) {
- err = inet_pton (AF_INET, gateway_str, &addr);
- if (err <= 0) {
- nm_log_warn (LOGD_SETTINGS, "%s: ignoring invalid IPv4 gateway '%s'", __func__, gateway_str);
- return NULL;
- }
- gateway = addr;
- }
- else
- gateway = 0;
-
- /* parse metric, default to 0 */
- if (metric_str) {
- if (!get_one_int (metric_str, G_MAXUINT32, key_name, &metric))
- return NULL;
+ addr = nm_ip_address_new (family, address_str, plen, &error);
+ if (!addr) {
+ nm_log_warn (LOGD_SETTINGS, "%s: ignoring invalid %s address: %s", __func__,
+ family == AF_INET ? "IPv4" : "IPv6",
+ error->message);
+ g_error_free (error);
}
- 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);
- if (route)
- g_array_append_val (result, metric);
-
- return result;
+ return addr;
}
static gpointer
-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)
+build_route (int family,
+ const char *dest_str, guint32 plen,
+ const char *gateway_str, const char *metric_str,
+ const char *key_name)
{
- GValueArray *result;
- struct in6_addr addr;
- GByteArray *address;
- GByteArray *gateway;
+ NMIPRoute *route;
guint32 metric = 0;
- GValue value = G_VALUE_INIT;
- int err;
-
- g_return_val_if_fail (address_str, NULL);
+ GError *error = NULL;
- result = g_value_array_new (3);
+ g_return_val_if_fail (plen, NULL);
+ g_return_val_if_fail (dest_str, NULL);
- /* add address */
- err = inet_pton (AF_INET6, address_str, &addr);
- if (err <= 0) {
- 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);
- g_value_init (&value, DBUS_TYPE_G_UCHAR_ARRAY);
- g_value_take_boxed (&value, address);
- g_value_array_append (result, &value);
- g_value_unset (&value);
-
- /* add prefix length */
- g_value_init (&value, G_TYPE_UINT);
- g_value_set_uint (&value, plen);
- g_value_array_append (result, &value);
- g_value_unset (&value);
-
- /* add gateway */
+ /* Next hop */
if (gateway_str && gateway_str[0]) {
- err = inet_pton (AF_INET6, gateway_str, &addr);
- if (err <= 0) {
+ if (!nm_utils_ipaddr_valid (family, gateway_str)) {
/* 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
+ * Try workaround by interpreting 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;
+ if ( family == AF_INET6
+ && !metric_str
+ && get_one_int (gateway_str, G_MAXUINT32, NULL, &metric))
+ gateway_str = NULL;
else {
- nm_log_warn (LOGD_SETTINGS, "%s: ignoring invalid IPv6 gateway '%s'", __func__, gateway_str);
- goto error_out;
+ nm_log_warn (LOGD_SETTINGS, "%s: ignoring invalid gateway '%s'", __func__, gateway_str);
+ return NULL;
}
}
} else
- addr = in6addr_any;
+ gateway_str = NULL;
/* parse metric, default to 0 */
if (metric_str) {
if (!get_one_int (metric_str, G_MAXUINT32, key_name, &metric))
- goto error_out;
+ return NULL;
}
- gateway = g_byte_array_new ();
- g_byte_array_append (gateway, (guint8 *) addr.s6_addr, 16);
- g_value_init (&value, DBUS_TYPE_G_UCHAR_ARRAY);
- g_value_take_boxed (&value, gateway);
- g_value_array_append (result, &value);
- g_value_unset (&value);
-
- /* add metric (for routing) */
- if (route) {
- g_value_init (&value, G_TYPE_UINT);
- g_value_set_uint (&value, metric);
- g_value_array_append (result, &value);
- g_value_unset (&value);
+ route = nm_ip_route_new (family, dest_str, plen, gateway_str,
+ metric ? (gint64) metric : -1,
+ &error);
+ if (!route) {
+ nm_log_warn (LOGD_SETTINGS, "%s: ignoring invalid %s route: %s", __func__,
+ family == AF_INET ? "IPv4" : "IPv6",
+ error->message);
+ g_error_free (error);
}
- return result;
-
-error_out:
- g_value_array_free (result);
- return NULL;
+ return route;
}
/* On success, returns pointer to the zero-terminated field (original @current).
@@ -334,17 +268,16 @@ read_field (char **current, char **error, const char *characters, const char *de
* changed. The default for IPv4 is now 24, which is the closest
* IPv4 equivalent. These defaults may just as well be changed to
* match the iproute2 defaults (32 for IPv4 and 128 for IPv6).
- *
- * The returned result is GArray for IPv4 and GValueArray for IPv6.
*/
static gpointer
read_one_ip_address_or_route (GKeyFile *file,
- const char *setting_name,
- const char *key_name,
- gboolean ipv6,
- gboolean route)
+ const char *setting_name,
+ const char *key_name,
+ gboolean ipv6,
+ gboolean route,
+ char **out_gateway)
{
- guint32 plen;
+ guint32 plen = G_MAXUINT32;
gpointer result;
char *address_str, *plen_str, *gateway_str, *metric_str, *value, *current, *error;
@@ -394,22 +327,33 @@ read_one_ip_address_or_route (GKeyFile *file,
}
}
+#define DEFAULT_PREFIX(for_route, for_ipv6) ( (for_route) ? ( (for_ipv6) ? 128 : 24 ) : ( (for_ipv6) ? 64 : 24 ) )
+
/* parse plen, fallback to defaults */
- if (plen_str)
- g_return_val_if_fail (get_one_int (plen_str, ipv6 ? 128 : 32,
- key_name, &plen), NULL);
- else {
- if (route)
- plen = ipv6 ? 128 : 24;
- else
- plen = ipv6 ? 64 : 24;
+ if (plen_str) {
+ if (!get_one_int (plen_str, ipv6 ? 128 : 32, key_name, &plen)
+ || (route && plen == 0)) {
+ plen = DEFAULT_PREFIX (route, ipv6);
+ nm_log_warn (LOGD_SETTINGS, "keyfile: invalid prefix length '%s' in '%s.%s', defaulting to %d",
+ plen_str, setting_name, key_name, plen);
+ }
+ } else {
+ plen = DEFAULT_PREFIX (route, ipv6);
nm_log_warn (LOGD_SETTINGS, "keyfile: Missing prefix length in '%s.%s', defaulting to %d",
setting_name, key_name, plen);
}
/* build the appropriate data structure for NetworkManager settings */
- result = (ipv6 ? build_ip6_address_or_route : build_ip4_address_or_route) (
- key_name, address_str, plen, gateway_str, metric_str, route);
+ if (route) {
+ result = build_route (ipv6 ? AF_INET6 : AF_INET,
+ address_str, plen, gateway_str, metric_str,
+ key_name);
+ } else {
+ result = build_address (ipv6 ? AF_INET6 : AF_INET,
+ address_str, plen);
+ if (out_gateway && gateway_str)
+ *out_gateway = g_strdup (gateway_str);
+ }
g_free (value);
return result;
@@ -427,13 +371,16 @@ ip_address_or_route_parser (NMSetting *setting, const char *key, GKeyFile *keyfi
static const char *key_names_routes[] = { "route", "routes", NULL };
static const char *key_names_addresses[] = { "address", "addresses", NULL };
const char **key_names = routes ? key_names_routes : key_names_addresses;
+ char *gateway = NULL;
GPtrArray *list;
+ GDestroyNotify free_func;
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;
+ if (routes)
+ free_func = (GDestroyNotify) nm_ip_route_unref;
+ else
+ free_func = (GDestroyNotify) nm_ip_address_unref;
+ list = g_ptr_array_new_with_free_func (free_func);
for (i = -1; i < 1000; i++) {
const char **key_basename;
@@ -448,8 +395,8 @@ ip_address_or_route_parser (NMSetting *setting, const char *key, GKeyFile *keyfi
else
key_name = g_strdup (*key_basename);
- item = read_one_ip_address_or_route (keyfile, setting_name, key_name, ipv6, routes);
-
+ item = read_one_ip_address_or_route (keyfile, setting_name, key_name, ipv6, routes,
+ gateway ? NULL : &gateway);
if (item)
g_ptr_array_add (list, item);
@@ -460,6 +407,11 @@ ip_address_or_route_parser (NMSetting *setting, const char *key, GKeyFile *keyfi
if (list->len >= 1)
g_object_set (setting, key, list, NULL);
+ if (gateway) {
+ g_object_set (setting, "gateway", gateway, NULL);
+ g_free (gateway);
+ }
+
g_ptr_array_unref (list);
}
@@ -467,7 +419,7 @@ static void
ip4_dns_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, const char *keyfile_path)
{
const char *setting_name = nm_setting_get_name (setting);
- GArray *array = NULL;
+ GPtrArray *array;
gsize length;
char **list, **iter;
int ret;
@@ -476,7 +428,7 @@ ip4_dns_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, const ch
if (!list || !g_strv_length (list))
return;
- array = g_array_sized_new (FALSE, FALSE, sizeof (guint32), length);
+ array = g_ptr_array_sized_new (length + 1);
for (iter = list; *iter; iter++) {
guint32 addr;
@@ -486,14 +438,13 @@ ip4_dns_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, const ch
continue;
}
- g_array_append_val (array, addr);
+ g_ptr_array_add (array, *iter);
}
- g_strfreev (list);
+ g_ptr_array_add (array, NULL);
- if (array) {
- g_object_set (setting, key, array, NULL);
- g_array_unref (array);
- }
+ g_object_set (setting, key, array->pdata, NULL);
+ g_ptr_array_unref (array);
+ g_strfreev (list);
}
static void
@@ -509,10 +460,9 @@ ip6_dns_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, const ch
if (!list || !g_strv_length (list))
return;
- array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_byte_array_unref);
+ array = g_ptr_array_sized_new (length + 1);
for (iter = list; *iter; iter++) {
- GByteArray *byte_array;
struct in6_addr addr;
ret = inet_pton (AF_INET6, *iter, &addr);
@@ -520,24 +470,21 @@ ip6_dns_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, const ch
nm_log_warn (LOGD_SETTINGS, "%s: ignoring invalid DNS server IPv6 address '%s'", __func__, *iter);
continue;
}
- byte_array = g_byte_array_new ();
- g_byte_array_append (byte_array, (guint8 *) addr.s6_addr, 16);
- g_ptr_array_add (array, byte_array);
+ g_ptr_array_add (array, *iter);
}
- g_strfreev (list);
+ g_ptr_array_add (array, NULL);
- if (array) {
- g_object_set (setting, key, array, NULL);
- g_ptr_array_unref (array);
- }
+ g_object_set (setting, key, array->pdata, NULL);
+ g_ptr_array_unref (array);
+ g_strfreev (list);
}
static void
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;
+ char *tmp_string = NULL, *p, *mac_str;
gint *tmp_list;
GByteArray *array = NULL;
gsize length;
@@ -557,7 +504,7 @@ mac_address_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, cons
/* 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)) {
+ if (!nm_utils_hwaddr_aton (tmp_string, array->data, array->len)) {
g_byte_array_unref (array);
array = NULL;
}
@@ -590,13 +537,16 @@ mac_address_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, cons
g_free (tmp_list);
}
- if (array) {
- g_object_set (setting, key, array, NULL);
- g_byte_array_free (array, TRUE);
- } else {
+ if (!array) {
nm_log_warn (LOGD_SETTINGS, "%s: ignoring invalid MAC address for %s / %s",
__func__, setting_name, key);
+ return;
}
+
+ mac_str = nm_utils_hwaddr_ntoa (array->data, array->len);
+ g_object_set (setting, key, mac_str, NULL);
+ g_free (mac_str);
+ g_byte_array_free (array, TRUE);
}
static void
@@ -628,11 +578,12 @@ read_hash_of_string (GKeyFile *file, NMSetting *setting, const char *key)
continue;
if (NM_IS_SETTING_VPN (setting)) {
- if (strcmp (*iter, NM_SETTING_VPN_SERVICE_TYPE) && strcmp (*iter, NM_SETTING_VPN_USER_NAME))
+ /* Add any item that's not a class property to the data hash */
+ if (!g_object_class_find_property (G_OBJECT_GET_CLASS (setting), *iter))
nm_setting_vpn_add_data_item (NM_SETTING_VPN (setting), *iter, value);
}
if (NM_IS_SETTING_BOND (setting)) {
- if (strcmp (*iter, NM_SETTING_BOND_INTERFACE_NAME))
+ if (strcmp (*iter, "interface-name"))
nm_setting_bond_add_option (NM_SETTING_BOND (setting), *iter, value);
}
g_free (value);
@@ -655,12 +606,12 @@ unescape_semicolons (char *str)
}
}
-static GByteArray *
-get_uchar_array (GKeyFile *keyfile,
- const char *setting_name,
- const char *key,
- gboolean zero_terminate,
- gboolean unescape_semicolon)
+static GBytes *
+get_bytes (GKeyFile *keyfile,
+ const char *setting_name,
+ const char *key,
+ gboolean zero_terminate,
+ gboolean unescape_semicolon)
{
GByteArray *array = NULL;
char *tmp_string;
@@ -714,21 +665,21 @@ get_uchar_array (GKeyFile *keyfile,
if (array->len == 0) {
g_byte_array_free (array, TRUE);
- array = NULL;
- }
- return array;
+ return NULL;
+ } else
+ return g_byte_array_free_to_bytes (array);
}
static void
ssid_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, const char *keyfile_path)
{
const char *setting_name = nm_setting_get_name (setting);
- GByteArray *array;
+ GBytes *bytes;
- array = get_uchar_array (keyfile, setting_name, key, FALSE, TRUE);
- if (array) {
- g_object_set (setting, key, array, NULL);
- g_byte_array_free (array, TRUE);
+ bytes = get_bytes (keyfile, setting_name, key, FALSE, TRUE);
+ if (bytes) {
+ g_object_set (setting, key, bytes, NULL);
+ g_bytes_unref (bytes);
} else {
nm_log_warn (LOGD_SETTINGS, "%s: ignoring invalid SSID for %s / %s",
__func__, setting_name, key);
@@ -739,12 +690,12 @@ static void
password_raw_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, const char *keyfile_path)
{
const char *setting_name = nm_setting_get_name (setting);
- GByteArray *array;
+ GBytes *bytes;
- array = get_uchar_array (keyfile, setting_name, key, FALSE, TRUE);
- if (array) {
- g_object_set (setting, key, array, NULL);
- g_byte_array_free (array, TRUE);
+ bytes = get_bytes (keyfile, setting_name, key, FALSE, TRUE);
+ if (bytes) {
+ g_object_set (setting, key, bytes, NULL);
+ g_bytes_unref (bytes);
} else {
nm_log_warn (LOGD_SETTINGS, "%s: ignoring invalid raw password for %s / %s",
__func__, setting_name, key);
@@ -752,7 +703,7 @@ password_raw_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, con
}
static char *
-get_cert_path (const char *keyfile_path, GByteArray *cert_path)
+get_cert_path (const char *keyfile_path, const guint8 *cert_path, gsize cert_path_len)
{
const char *base;
char *p = NULL, *path, *dirname, *tmp;
@@ -760,8 +711,8 @@ get_cert_path (const char *keyfile_path, GByteArray *cert_path)
g_return_val_if_fail (keyfile_path != NULL, NULL);
g_return_val_if_fail (cert_path != NULL, NULL);
- base = path = g_malloc0 (cert_path->len + 1);
- memcpy (path, cert_path->data, cert_path->len);
+ base = path = g_malloc0 (cert_path_len + 1);
+ memcpy (path, cert_path, cert_path_len);
if (path[0] == '/')
return path;
@@ -794,37 +745,46 @@ has_cert_ext (const char *path)
}
static gboolean
-handle_as_scheme (GByteArray *array, NMSetting *setting, const char *key)
+handle_as_scheme (GBytes *bytes, NMSetting *setting, const char *key)
{
+ const guint8 *data;
+ gsize data_len;
+
+ data = g_bytes_get_data (bytes, &data_len);
+
/* It's the PATH scheme, can just set plain data */
- if ( (array->len > strlen (SCHEME_PATH))
- && g_str_has_prefix ((const char *) array->data, SCHEME_PATH)
- && (array->data[array->len - 1] == '\0')) {
- g_object_set (setting, key, array, NULL);
+ if ( (data_len > strlen (SCHEME_PATH))
+ && g_str_has_prefix ((const char *) data, SCHEME_PATH)
+ && (data[data_len - 1] == '\0')) {
+ g_object_set (setting, key, bytes, NULL);
return TRUE;
}
return FALSE;
}
static gboolean
-handle_as_path (GByteArray *array,
+handle_as_path (GBytes *bytes,
NMSetting *setting,
const char *key,
const char *keyfile_path)
{
- gsize validate_len = array->len;
- GByteArray *val;
+ const guint8 *data;
+ gsize data_len;
+ gsize validate_len;
char *path;
gboolean exists, success = FALSE;
- if (array->len > 500 || array->len < 1)
+ data = g_bytes_get_data (bytes, &data_len);
+ if (data_len > 500 || data_len < 1)
return FALSE;
/* If there's a trailing NULL tell g_utf8_validate() to to until the NULL */
- if (array->data[array->len - 1] == '\0')
+ if (data[data_len - 1] == '\0')
validate_len = -1;
+ else
+ validate_len = data_len;
- if (g_utf8_validate ((const char *) array->data, validate_len, NULL) == FALSE)
+ if (g_utf8_validate ((const char *) data, validate_len, NULL) == FALSE)
return FALSE;
/* Might be a bare path without the file:// prefix; in that case
@@ -832,18 +792,22 @@ handle_as_path (GByteArray *array,
* relative path to the current directory.
*/
- path = get_cert_path (keyfile_path, array);
+ path = get_cert_path (keyfile_path, data, data_len);
exists = g_file_test (path, G_FILE_TEST_EXISTS);
if ( exists
- || memchr (array->data, '/', array->len)
+ || memchr (data, '/', data_len)
|| has_cert_ext (path)) {
+ GByteArray *tmp;
+ GBytes *val;
+
/* Construct the proper value as required for the PATH scheme */
- val = g_byte_array_sized_new (strlen (SCHEME_PATH) + strlen (path) + 1);
- g_byte_array_append (val, (const guint8 *) SCHEME_PATH, strlen (SCHEME_PATH));
- g_byte_array_append (val, (const guint8 *) path, strlen (path));
- g_byte_array_append (val, (const guint8 *) "\0", 1);
+ tmp = g_byte_array_sized_new (strlen (SCHEME_PATH) + strlen (path) + 1);
+ g_byte_array_append (tmp, (const guint8 *) SCHEME_PATH, strlen (SCHEME_PATH));
+ g_byte_array_append (tmp, (const guint8 *) path, strlen (path));
+ g_byte_array_append (tmp, (const guint8 *) "\0", 1);
+ val = g_byte_array_free_to_bytes (tmp);
g_object_set (setting, key, val, NULL);
- g_byte_array_free (val, TRUE);
+ g_bytes_unref (val);
success = TRUE;
/* Warn if the certificate didn't exist */
@@ -859,28 +823,78 @@ static void
cert_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, const char *keyfile_path)
{
const char *setting_name = nm_setting_get_name (setting);
- GByteArray *array;
+ GBytes *bytes;
gboolean success = FALSE;
- array = get_uchar_array (keyfile, setting_name, key, TRUE, FALSE);
- if (array && array->len > 0) {
+ bytes = get_bytes (keyfile, setting_name, key, TRUE, FALSE);
+ if (bytes) {
/* Try as a path + scheme (ie, starts with "file://") */
- success = handle_as_scheme (array, setting, key);
+ success = handle_as_scheme (bytes, setting, key);
/* If not, it might be a plain path */
if (success == FALSE)
- success = handle_as_path (array, setting, key, keyfile_path);
+ success = handle_as_path (bytes, setting, key, keyfile_path);
/* If neither of those two, assume blob with certificate data */
if (success == FALSE)
- g_object_set (setting, key, array, NULL);
+ g_object_set (setting, key, bytes, NULL);
} else {
nm_log_warn (LOGD_SETTINGS, "%s: ignoring invalid key/cert value for %s / %s",
__func__, setting_name, key);
}
- if (array)
- g_byte_array_free (array, TRUE);
+ if (bytes)
+ g_bytes_unref (bytes);
+}
+
+static void
+parity_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, const char *keyfile_path)
+{
+ const char *setting_name = nm_setting_get_name (setting);
+ NMSettingSerialParity parity;
+ int int_val;
+ char *str_val;
+
+ /* Keyfile traditionally stored this as the ASCII value for 'E', 'o', or 'n'.
+ * We now accept either that or the (case-insensitive) character itself (but
+ * still always write it the old way, for backward compatibility).
+ */
+ int_val = nm_keyfile_plugin_kf_get_integer (keyfile, setting_name, key, NULL);
+ if (!int_val) {
+ str_val = nm_keyfile_plugin_kf_get_string (keyfile, setting_name, key, NULL);
+ if (str_val) {
+ if (str_val[0] && !str_val[1])
+ int_val = str_val[0];
+ else {
+ /* This will hit the warning below */
+ int_val = 'X';
+ }
+ }
+ }
+
+ if (!int_val)
+ return;
+
+ switch (int_val) {
+ case 'E':
+ case 'e':
+ parity = NM_SETTING_SERIAL_PARITY_EVEN;
+ break;
+ case 'O':
+ case 'o':
+ parity = NM_SETTING_SERIAL_PARITY_ODD;
+ break;
+ case 'N':
+ case 'n':
+ parity = NM_SETTING_SERIAL_PARITY_NONE;
+ break;
+ default:
+ nm_log_warn (LOGD_SETTINGS, "%s: ignoring invalid value for %s / %s",
+ __func__, setting_name, key);
+ return;
+ }
+
+ g_object_set (setting, key, parity, NULL);
}
typedef struct {
@@ -906,27 +920,27 @@ static KeyParser key_parsers[] = {
TRUE,
mac_address_parser_ETHER },
{ NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_ADDRESSES,
+ NM_SETTING_IP_CONFIG_ADDRESSES,
FALSE,
ip_address_or_route_parser },
{ NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_ADDRESSES,
+ NM_SETTING_IP_CONFIG_ADDRESSES,
FALSE,
ip_address_or_route_parser },
{ NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_ROUTES,
+ NM_SETTING_IP_CONFIG_ROUTES,
FALSE,
ip_address_or_route_parser },
{ NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_ROUTES,
+ NM_SETTING_IP_CONFIG_ROUTES,
FALSE,
ip_address_or_route_parser },
{ NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS,
+ NM_SETTING_IP_CONFIG_DNS,
FALSE,
ip4_dns_parser },
{ NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_DNS,
+ NM_SETTING_IP_CONFIG_DNS,
FALSE,
ip6_dns_parser },
{ NM_SETTING_WIRED_SETTING_NAME,
@@ -993,6 +1007,10 @@ static KeyParser key_parsers[] = {
NM_SETTING_802_1X_PHASE2_PRIVATE_KEY,
TRUE,
cert_parser },
+ { NM_SETTING_SERIAL_SETTING_NAME,
+ NM_SETTING_SERIAL_PARITY,
+ TRUE,
+ parity_parser },
{ NULL, NULL, FALSE }
};
@@ -1010,6 +1028,7 @@ read_one_setting_value (NMSetting *setting,
{
ReadInfo *info = user_data;
const char *setting_name;
+ int errsv;
GType type;
GError *err = NULL;
gboolean check_for_key = TRUE;
@@ -1110,9 +1129,22 @@ read_one_setting_value (NMSetting *setting,
uint_val = g_ascii_strtoull (tmp_str, NULL, 10);
g_free (tmp_str);
g_object_set (setting, key, uint_val, NULL);
- } else if (type == DBUS_TYPE_G_UCHAR_ARRAY) {
+ } else if (type == G_TYPE_INT64) {
+ char *tmp_str;
+ gint64 int_val;
+
+ tmp_str = nm_keyfile_plugin_kf_get_value (info->keyfile, setting_name, key, NULL);
+ int_val = nm_utils_ascii_str_to_int64 (tmp_str, 10, G_MININT64, G_MAXINT64, 0);
+ errsv = errno;
+ if (errsv)
+ nm_log_warn (LOGD_SETTINGS, "Invalid int64 value (%s)", tmp_str);
+ else
+ g_object_set (setting, key, int_val, NULL);
+ g_free (tmp_str);
+ } else if (type == G_TYPE_BYTES) {
gint *tmp;
GByteArray *array;
+ GBytes *bytes;
gsize length;
int i;
@@ -1131,31 +1163,45 @@ read_one_setting_value (NMSetting *setting,
g_byte_array_append (array, (const unsigned char *) &v, sizeof (v));
}
- g_object_set (setting, key, array, NULL);
- g_byte_array_free (array, TRUE);
+ bytes = g_byte_array_free_to_bytes (array);
+ g_object_set (setting, key, bytes, NULL);
+ g_bytes_unref (bytes);
g_free (tmp);
- } else if (type == DBUS_TYPE_G_LIST_OF_STRING) {
+ } else if (type == G_TYPE_STRV) {
gchar **sa;
gsize length;
- int i;
- GSList *list = 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]);
-
- list = g_slist_reverse (list);
- g_object_set (setting, key, list, NULL);
-
- g_slist_free (list);
+ g_object_set (setting, key, sa, NULL);
g_strfreev (sa);
- } else if (type == DBUS_TYPE_G_MAP_OF_STRING) {
+ } else if (type == G_TYPE_HASH_TABLE) {
read_hash_of_string (info->keyfile, setting, key);
- } else if (type == DBUS_TYPE_G_UINT_ARRAY) {
+ } else if (type == G_TYPE_ARRAY) {
if (!read_array_of_uint (info->keyfile, setting, key)) {
nm_log_warn (LOGD_SETTINGS, "Unhandled setting property type (read): '%s/%s' : '%s'",
setting_name, key, G_VALUE_TYPE_NAME (value));
}
+ } else if (G_VALUE_HOLDS_FLAGS (value)) {
+ guint64 uint_val;
+
+ /* Flags are guint but GKeyFile has no uint reader, just uint64 */
+ uint_val = nm_keyfile_plugin_kf_get_uint64 (info->keyfile, setting_name, key, &err);
+ if (!err) {
+ if (uint_val <= G_MAXUINT)
+ g_object_set (setting, key, (guint) uint_val, NULL);
+ else {
+ nm_log_warn (LOGD_SETTINGS, "Too large FLAGS property (read): '%s/%s' : '%s'",
+ setting_name, key, G_VALUE_TYPE_NAME (value));
+ }
+ }
+ g_clear_error (&err);
+ } else if (G_VALUE_HOLDS_ENUM (value)) {
+ gint int_val;
+
+ int_val = nm_keyfile_plugin_kf_get_integer (info->keyfile, setting_name, key, &err);
+ if (!err)
+ g_object_set (setting, key, (gint) int_val, NULL);
+ g_clear_error (&err);
} else {
nm_log_warn (LOGD_SETTINGS, "Unhandled setting property type (read): '%s/%s' : '%s'",
setting_name, key, G_VALUE_TYPE_NAME (value));
@@ -1165,22 +1211,27 @@ read_one_setting_value (NMSetting *setting,
static NMSetting *
read_setting (GKeyFile *file, const char *keyfile_path, const char *group)
{
- NMSetting *setting;
+ NMSetting *setting = NULL;
ReadInfo info = { file, keyfile_path };
const char *alias;
+ GType type;
alias = nm_keyfile_plugin_get_setting_name_for_alias (group);
- setting = nm_connection_create_setting (alias ? alias : group);
- if (setting)
+ if (alias)
+ group = alias;
+
+ type = nm_setting_lookup_type (group);
+ if (type) {
+ setting = g_object_new (type, NULL);
nm_setting_enumerate_values (setting, read_one_setting_value, &info);
- else
+ } else
nm_log_warn (LOGD_SETTINGS, "Invalid setting name '%s'", group);
return setting;
}
static void
-read_vpn_secrets (GKeyFile *file, NMSettingVPN *s_vpn)
+read_vpn_secrets (GKeyFile *file, NMSettingVpn *s_vpn)
{
char **keys, **iter;
@@ -1197,30 +1248,6 @@ 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)
{
@@ -1234,11 +1261,10 @@ nm_keyfile_plugin_connection_from_file (const char *filename, GError **error)
gsize length;
int i;
gboolean vpn_secrets = FALSE;
- const char *ctype;
GError *verify_error = NULL;
if (stat (filename, &statbuf) != 0 || !S_ISREG (statbuf.st_mode)) {
- g_set_error_literal (error, KEYFILE_PLUGIN_ERROR, 0,
+ g_set_error_literal (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"File did not exist or was not a regular file");
return NULL;
}
@@ -1246,7 +1272,7 @@ nm_keyfile_plugin_connection_from_file (const char *filename, GError **error)
bad_permissions = statbuf.st_mode & 0077;
if (bad_permissions) {
- g_set_error (error, KEYFILE_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
"File permissions (%o) were insecure",
statbuf.st_mode);
return NULL;
@@ -1256,7 +1282,7 @@ nm_keyfile_plugin_connection_from_file (const char *filename, GError **error)
if (!g_key_file_load_from_file (key_file, filename, G_KEY_FILE_NONE, error))
goto out;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
groups = g_key_file_get_groups (key_file, &length);
for (i = 0; i < length; i++) {
@@ -1271,36 +1297,50 @@ 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 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);
- 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);
- }
- }
- }
+ if (!s_con) {
+ s_con = NM_SETTING_CONNECTION (nm_setting_connection_new ());
+ nm_connection_add_setting (connection, NM_SETTING (s_con));
+ }
+
+ /* Make sure that we have 'id' even if not explictly specified in the keyfile */
+ if (!nm_setting_connection_get_id (s_con)) {
+ char *base_name;
- ensure_slave_setting (connection);
+ base_name = g_path_get_basename (filename);
+ g_object_set (s_con, NM_SETTING_CONNECTION_ID, base_name, NULL);
+ g_free (base_name);
+ }
+
+ /* Make sure that we have 'uuid' even if not explictly specified in the keyfile */
+ if (!nm_setting_connection_get_uuid (s_con)) {
+ char *hashed_uuid;
+
+ hashed_uuid = nm_utils_uuid_generate_from_strings ("keyfile", filename, NULL);
+ g_object_set (s_con, NM_SETTING_CONNECTION_UUID, hashed_uuid, NULL);
+ g_free (hashed_uuid);
+ }
+
+ /* Make sure that we have 'interface-name' even if it was specified in the
+ * "wrong" (ie, deprecated) group.
+ */
+ if ( !nm_setting_connection_get_interface_name (s_con)
+ && nm_setting_connection_get_connection_type (s_con)) {
+ char *interface_name;
+
+ interface_name = g_key_file_get_string (key_file,
+ nm_setting_connection_get_connection_type (s_con),
+ "interface-name",
+ NULL);
+ if (interface_name) {
+ g_object_set (s_con, NM_SETTING_CONNECTION_INTERFACE_NAME, interface_name, NULL);
+ g_free (interface_name);
+ }
}
/* Handle vpn secrets after the 'vpn' setting was read */
if (vpn_secrets) {
- NMSettingVPN *s_vpn;
+ NMSettingVpn *s_vpn;
s_vpn = nm_connection_get_setting_vpn (connection);
if (s_vpn)
@@ -1309,12 +1349,11 @@ nm_keyfile_plugin_connection_from_file (const char *filename, GError **error)
g_strfreev (groups);
- /* Verify the connection */
- if (!nm_connection_verify (connection, &verify_error)) {
- g_set_error (error, KEYFILE_PLUGIN_ERROR, 0,
- "invalid or missing connection property '%s/%s'",
- verify_error ? g_type_name (nm_connection_lookup_setting_type_by_quark (verify_error->domain)) : "(unknown)",
- (verify_error && verify_error->message) ? verify_error->message : "(unknown)");
+ /* Normalize and verify the connection */
+ if (!nm_connection_normalize (connection, NULL, NULL, &verify_error)) {
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
+ "invalid connection: %s",
+ verify_error->message);
g_clear_error (&verify_error);
g_object_unref (connection);
connection = NULL;
diff --git a/src/settings/plugins/keyfile/tests/Makefile.am b/src/settings/plugins/keyfile/tests/Makefile.am
index fae6e4eaf..20b9820c9 100644
--- a/src/settings/plugins/keyfile/tests/Makefile.am
+++ b/src/settings/plugins/keyfile/tests/Makefile.am
@@ -6,19 +6,16 @@ SUBDIRS=keyfiles
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)/libnm-core \
+ -I$(top_builddir)/libnm-core \
-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"\" \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
-DTEST_KEYFILES_DIR=\"$(abs_srcdir)/keyfiles\" \
-DTEST_SCRATCH_DIR=\"$(abs_builddir)/keyfiles\" \
@@ -30,13 +27,10 @@ test_keyfile_SOURCES = \
test-keyfile.c \
../reader.c \
../writer.c \
- ../errors.c \
../utils.c
test_keyfile_LDADD = \
$(top_builddir)/src/libNetworkManager.la \
- $(top_builddir)/libnm-glib/libnm-glib.la \
- $(top_builddir)/libnm-util/libnm-util.la \
$(DBUS_LIBS) \
$(CODE_COVERAGE_LDFLAGS)
diff --git a/src/settings/plugins/keyfile/tests/Makefile.in b/src/settings/plugins/keyfile/tests/Makefile.in
index f7b4b62a2..8530bf8c0 100644
--- a/src/settings/plugins/keyfile/tests/Makefile.in
+++ b/src/settings/plugins/keyfile/tests/Makefile.in
@@ -105,16 +105,14 @@ CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
PROGRAMS = $(noinst_PROGRAMS)
am__test_keyfile_SOURCES_DIST = test-keyfile.c ../reader.c ../writer.c \
- ../errors.c ../utils.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)
+@ENABLE_TESTS_TRUE@ utils.$(OBJEXT)
test_keyfile_OBJECTS = $(am_test_keyfile_OBJECTS)
am__DEPENDENCIES_1 =
@ENABLE_TESTS_TRUE@test_keyfile_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@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -254,6 +252,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -377,6 +377,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -396,6 +397,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -422,7 +424,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -504,19 +506,16 @@ with_valgrind = @with_valgrind@
@ENABLE_TESTS_TRUE@SUBDIRS = keyfiles
@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-core \
+@ENABLE_TESTS_TRUE@ -I$(top_builddir)/libnm-core \
@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@ -DNETWORKMANAGER_COMPILATION \
@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\" \
@@ -526,13 +525,10 @@ with_valgrind = @with_valgrind@
@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@ $(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@ $(CODE_COVERAGE_LDFLAGS)
@@ -590,7 +586,6 @@ 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@
@@ -645,20 +640,6 @@ writer.obj: ../writer.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) $(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
diff --git a/src/settings/plugins/keyfile/tests/keyfiles/ATT_Data_Connect_BT b/src/settings/plugins/keyfile/tests/keyfiles/ATT_Data_Connect_BT
index cc8a9ee39..162bf72e5 100644
--- a/src/settings/plugins/keyfile/tests/keyfiles/ATT_Data_Connect_BT
+++ b/src/settings/plugins/keyfile/tests/keyfiles/ATT_Data_Connect_BT
@@ -16,6 +16,7 @@ apn=ISP.CINGULAR
[serial]
baud=115200
+parity=o
[bluetooth]
bdaddr=00:11:22:33:44:55
diff --git a/src/settings/plugins/keyfile/tests/keyfiles/ATT_Data_Connect_Plain b/src/settings/plugins/keyfile/tests/keyfiles/ATT_Data_Connect_Plain
index 236cca0ed..902b84279 100644
--- a/src/settings/plugins/keyfile/tests/keyfiles/ATT_Data_Connect_Plain
+++ b/src/settings/plugins/keyfile/tests/keyfiles/ATT_Data_Connect_Plain
@@ -18,3 +18,4 @@ pin=2345
[serial]
baud=115200
+parity=111
diff --git a/src/settings/plugins/keyfile/tests/keyfiles/Makefile.am b/src/settings/plugins/keyfile/tests/keyfiles/Makefile.am
index 576164d27..4ca4c3faa 100644
--- a/src/settings/plugins/keyfile/tests/keyfiles/Makefile.am
+++ b/src/settings/plugins/keyfile/tests/keyfiles/Makefile.am
@@ -21,7 +21,16 @@ KEYFILES = \
Test_Bridge_Component \
Test_New_Wired_Group_Name \
Test_New_Wireless_Group_Names \
- Test_Missing_Vlan_Setting
+ Test_minimal_1 \
+ Test_minimal_2 \
+ Test_minimal_slave_1 \
+ Test_minimal_slave_2 \
+ Test_minimal_slave_3 \
+ Test_minimal_slave_4 \
+ Test_Missing_Vlan_Setting \
+ Test_Missing_ID_UUID \
+ Test_Enum_Property \
+ Test_Flags_Property
CERTS = \
test-ca-cert.pem \
diff --git a/src/settings/plugins/keyfile/tests/keyfiles/Makefile.in b/src/settings/plugins/keyfile/tests/keyfiles/Makefile.in
index 05660e3e5..bc522b1b2 100644
--- a/src/settings/plugins/keyfile/tests/keyfiles/Makefile.in
+++ b/src/settings/plugins/keyfile/tests/keyfiles/Makefile.in
@@ -129,6 +129,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -252,6 +254,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -271,6 +274,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -297,7 +301,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -399,7 +403,16 @@ KEYFILES = \
Test_Bridge_Component \
Test_New_Wired_Group_Name \
Test_New_Wireless_Group_Names \
- Test_Missing_Vlan_Setting
+ Test_minimal_1 \
+ Test_minimal_2 \
+ Test_minimal_slave_1 \
+ Test_minimal_slave_2 \
+ Test_minimal_slave_3 \
+ Test_minimal_slave_4 \
+ Test_Missing_Vlan_Setting \
+ Test_Missing_ID_UUID \
+ Test_Enum_Property \
+ Test_Flags_Property
CERTS = \
test-ca-cert.pem \
diff --git a/src/settings/plugins/keyfile/tests/keyfiles/Test_Enum_Property b/src/settings/plugins/keyfile/tests/keyfiles/Test_Enum_Property
new file mode 100644
index 000000000..52b395b3a
--- /dev/null
+++ b/src/settings/plugins/keyfile/tests/keyfiles/Test_Enum_Property
@@ -0,0 +1,8 @@
+[connection]
+id=Test Wired Connection IP6
+uuid=4e80a56d-c99f-4aad-a6dd-b449bc398c57
+type=802-3-ethernet
+
+[ipv6]
+method=auto
+ip6-privacy=2
diff --git a/src/settings/plugins/keyfile/tests/keyfiles/Test_Flags_Property b/src/settings/plugins/keyfile/tests/keyfiles/Test_Flags_Property
new file mode 100644
index 000000000..3a46611d4
--- /dev/null
+++ b/src/settings/plugins/keyfile/tests/keyfiles/Test_Flags_Property
@@ -0,0 +1,11 @@
+[connection]
+id=Test Flags Property
+uuid=05a5ec81-fa72-4b7c-9f85-4a0dfd36c84f
+type=gsm
+
+[gsm]
+number=*99#
+username=username
+password-flags=5
+apn=my.apn
+
diff --git a/src/settings/plugins/keyfile/tests/keyfiles/Test_Missing_ID_UUID b/src/settings/plugins/keyfile/tests/keyfiles/Test_Missing_ID_UUID
new file mode 100644
index 000000000..138380d08
--- /dev/null
+++ b/src/settings/plugins/keyfile/tests/keyfiles/Test_Missing_ID_UUID
@@ -0,0 +1,9 @@
+# id and uuid keys are missing
+# They will be auto-genetrated by NetworkManager
+
+[connection]
+type=ethernet
+autoconnect=true
+
+[802-3-ethernet]
+mac-address=00:11:22:33:44:55
diff --git a/src/settings/plugins/keyfile/tests/keyfiles/Test_minimal_1 b/src/settings/plugins/keyfile/tests/keyfiles/Test_minimal_1
new file mode 100644
index 000000000..cac135ad1
--- /dev/null
+++ b/src/settings/plugins/keyfile/tests/keyfiles/Test_minimal_1
@@ -0,0 +1,2 @@
+[connection]
+type=802-3-ethernet
diff --git a/src/settings/plugins/keyfile/tests/keyfiles/Test_minimal_2 b/src/settings/plugins/keyfile/tests/keyfiles/Test_minimal_2
new file mode 100644
index 000000000..bbf2d8d63
--- /dev/null
+++ b/src/settings/plugins/keyfile/tests/keyfiles/Test_minimal_2
@@ -0,0 +1 @@
+[802-3-ethernet]
diff --git a/src/settings/plugins/keyfile/tests/keyfiles/Test_minimal_slave_1 b/src/settings/plugins/keyfile/tests/keyfiles/Test_minimal_slave_1
new file mode 100644
index 000000000..d3122d539
--- /dev/null
+++ b/src/settings/plugins/keyfile/tests/keyfiles/Test_minimal_slave_1
@@ -0,0 +1,4 @@
+[connection]
+type=802-3-ethernet
+master=br0
+slave-type=bridge
diff --git a/src/settings/plugins/keyfile/tests/keyfiles/Test_minimal_slave_2 b/src/settings/plugins/keyfile/tests/keyfiles/Test_minimal_slave_2
new file mode 100644
index 000000000..eb1cdaceb
--- /dev/null
+++ b/src/settings/plugins/keyfile/tests/keyfiles/Test_minimal_slave_2
@@ -0,0 +1,7 @@
+[connection]
+master=br0
+
+[802-3-ethernet]
+
+[bridge-port]
+
diff --git a/src/settings/plugins/keyfile/tests/keyfiles/Test_minimal_slave_3 b/src/settings/plugins/keyfile/tests/keyfiles/Test_minimal_slave_3
new file mode 100644
index 000000000..7419e97dd
--- /dev/null
+++ b/src/settings/plugins/keyfile/tests/keyfiles/Test_minimal_slave_3
@@ -0,0 +1,4 @@
+[connection]
+master=br0
+slave-type=bridge
+[802-3-ethernet]
diff --git a/src/settings/plugins/keyfile/tests/keyfiles/Test_minimal_slave_4 b/src/settings/plugins/keyfile/tests/keyfiles/Test_minimal_slave_4
new file mode 100644
index 000000000..626b6f684
--- /dev/null
+++ b/src/settings/plugins/keyfile/tests/keyfiles/Test_minimal_slave_4
@@ -0,0 +1,4 @@
+[connection]
+type=802-3-ethernet
+master=br0
+[bridge-port]
diff --git a/src/settings/plugins/keyfile/tests/test-keyfile.c b/src/settings/plugins/keyfile/tests/test-keyfile.c
index cc57c1c39..33e3863c3 100644
--- a/src/settings/plugins/keyfile/tests/test-keyfile.c
+++ b/src/settings/plugins/keyfile/tests/test-keyfile.c
@@ -18,29 +18,18 @@
* Copyright (C) 2008 - 2014 Red Hat, Inc.
*/
+#include "config.h"
+
#include <stdio.h>
#include <stdarg.h>
#include <unistd.h>
#include <string.h>
-#include <netinet/ether.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/socket.h>
-#include <linux/if_infiniband.h>
-
-#include <nm-utils.h>
-#include <nm-setting-connection.h>
-#include <nm-setting-wired.h>
-#include <nm-setting-wireless.h>
-#include <nm-setting-ip4-config.h>
-#include <nm-setting-ip6-config.h>
-#include <nm-setting-bluetooth.h>
-#include <nm-setting-serial.h>
-#include <nm-setting-ppp.h>
-#include <nm-setting-gsm.h>
-#include <nm-setting-8021x.h>
-#include <nm-setting-infiniband.h>
-#include <nm-logging.h>
+
+#include "nm-core-internal.h"
+#include "nm-logging.h"
#include "reader.h"
#include "writer.h"
@@ -51,69 +40,42 @@
#define TEST_WIRELESS_FILE TEST_KEYFILES_DIR"/Test_Wireless_Connection"
static void
-check_ip4_address (NMSettingIP4Config *config, int idx, const char *address_str, int plen, const char *gateway_str)
+check_ip_address (NMSettingIPConfig *config, int idx, const char *address, int plen)
{
- NMIP4Address *ip4 = nm_setting_ip4_config_get_address (config, idx);
- guint32 address, gateway;
-
- g_assert (inet_pton (AF_INET, address_str, &address) == 1);
- g_assert (inet_pton (AF_INET, gateway_str, &gateway) == 1);
+ NMIPAddress *ip4 = nm_setting_ip_config_get_address (config, idx);
g_assert (ip4);
- 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);
+ g_assert_cmpstr (nm_ip_address_get_address (ip4), ==, address);
+ g_assert_cmpint (nm_ip_address_get_prefix (ip4), ==, plen);
}
static void
-check_ip6_address (NMSettingIP6Config *config, int idx, const char *address_str, int plen, const char *gateway_str)
+check_ip_route (NMSettingIPConfig *config, int idx, const char *destination, int plen,
+ const char *next_hop, gint64 metric)
{
- NMIP6Address *ip6 = nm_setting_ip6_config_get_address (config, idx);
- struct in6_addr address;
- struct in6_addr gateway;
+ NMIPRoute *route = nm_setting_ip_config_get_route (config, idx);
- g_assert (inet_pton (AF_INET6, address_str, &address) == 1);
- g_assert (inet_pton (AF_INET6, gateway_str, &gateway) == 1);
-
- g_assert (ip6);
- g_assert (!memcmp (nm_ip6_address_get_address (ip6), &address, sizeof(address)));
- g_assert (nm_ip6_address_get_prefix (ip6) == plen);
- g_assert (!memcmp (nm_ip6_address_get_gateway (ip6), &gateway, sizeof(gateway)));
+ g_assert (route);
+ g_assert_cmpstr (nm_ip_route_get_dest (route), ==, destination);
+ g_assert_cmpint (nm_ip_route_get_prefix (route), ==, plen);
+ g_assert_cmpstr (nm_ip_route_get_next_hop (route), ==, next_hop);
+ g_assert_cmpint (nm_ip_route_get_metric (route), ==, metric);
}
-static void
-check_ip4_route (NMSettingIP4Config *config, int idx, const char *destination_str, int plen,
- const char *nexthop_str, int metric)
+static NMConnection *
+keyfile_read_connection_from_file (const char *filename)
{
- NMIP4Route *route = nm_setting_ip4_config_get_route (config, idx);
- guint32 destination, nexthop;
+ GError *error = NULL;
+ NMConnection *connection;
- g_assert (inet_pton (AF_INET, destination_str, &destination) == 1);
- g_assert (inet_pton (AF_INET, nexthop_str, &nexthop) == 1);
+ g_assert (filename);
- g_assert (route);
- 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);
- g_assert (nm_ip4_route_get_metric (route) == metric);
-}
-
-static void
-check_ip6_route (NMSettingIP6Config *config, int idx, const char *destination_str, int plen,
- const char *next_hop_str, int metric)
-{
- NMIP6Route *route = nm_setting_ip6_config_get_route (config, idx);
- struct in6_addr destination;
- struct in6_addr next_hop;
+ connection = nm_keyfile_plugin_connection_from_file (filename, &error);
+ g_assert_no_error (error);
- g_assert (inet_pton (AF_INET6, destination_str, &destination) == 1);
- g_assert (inet_pton (AF_INET6, next_hop_str, &next_hop) == 1);
+ nmtst_assert_connection_verifies_without_normalization (connection);
- g_assert (route);
- g_assert (!memcmp (nm_ip6_route_get_dest (route), &destination, sizeof(destination)));
- g_assert (nm_ip6_route_get_prefix (route) == plen);
- g_assert (!memcmp (nm_ip6_route_get_next_hop (route), &next_hop, sizeof(next_hop)));
- g_assert (nm_ip6_route_get_metric (route) == metric);
+ return connection;
}
static void
@@ -122,22 +84,16 @@ test_read_valid_wired_connection (void)
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
GError *error = NULL;
- const GByteArray *array;
+ const char *mac;
char expected_mac_address[ETH_ALEN] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55 };
const char *tmp;
const char *expected_id = "Test Wired Connection";
const char *expected_uuid = "4e80a56d-c99f-4aad-a6dd-b449bc398c57";
const guint64 expected_timestamp = 6654332;
guint64 timestamp;
- const char *expected_dns1 = "4.2.2.1";
- const char *expected_dns2 = "4.2.2.2";
- guint32 addr;
- struct in6_addr addr6;
- const char *expected6_dns1 = "1111:dddd::aaaa";
- const char *expected6_dns2 = "1::cafe";
const char *expected6_dnssearch1 = "super-domain.com";
const char *expected6_dnssearch2 = "redhat.com";
const char *expected6_dnssearch3 = "gnu.org";
@@ -236,18 +192,13 @@ test_read_valid_wired_connection (void)
NM_SETTING_WIRED_SETTING_NAME);
/* MAC address */
- array = nm_setting_wired_get_mac_address (s_wired);
- ASSERT (array != NULL,
+ mac = nm_setting_wired_get_mac_address (s_wired);
+ ASSERT (mac != NULL,
"connection-verify-wired", "failed to verify %s: missing %s / %s key",
TEST_WIRED_FILE,
NM_SETTING_WIRED_SETTING_NAME,
NM_SETTING_WIRED_MAC_ADDRESS);
- ASSERT (array->len == ETH_ALEN,
- "connection-verify-wired", "failed to verify %s: unexpected %s / %s key value length",
- TEST_WIRED_FILE,
- NM_SETTING_WIRED_SETTING_NAME,
- NM_SETTING_WIRED_MAC_ADDRESS);
- ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0,
+ ASSERT (nm_utils_hwaddr_matches (mac, -1, expected_mac_address, sizeof (expected_mac_address)),
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value",
TEST_WIRED_FILE,
NM_SETTING_WIRED_SETTING_NAME,
@@ -268,65 +219,62 @@ test_read_valid_wired_connection (void)
NM_SETTING_IP4_CONFIG_SETTING_NAME);
/* Method */
- tmp = nm_setting_ip4_config_get_method (s_ip4);
+ tmp = nm_setting_ip_config_get_method (s_ip4);
ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_MANUAL) == 0,
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value",
TEST_WIRED_FILE,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_METHOD);
+ NM_SETTING_IP_CONFIG_METHOD);
/* DNS Addresses */
- ASSERT (nm_setting_ip4_config_get_num_dns (s_ip4) == 2,
+ ASSERT (nm_setting_ip_config_get_num_dns (s_ip4) == 2,
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value",
TEST_WIRED_FILE,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS);
+ NM_SETTING_IP_CONFIG_DNS);
- ASSERT (inet_pton (AF_INET, expected_dns1, &addr) > 0,
- "connection-verify-wired", "failed to verify %s: couldn't convert DNS IP address #1",
- 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,
+ ASSERT (strcmp (nm_setting_ip_config_get_dns (s_ip4, 0), "4.2.2.1") == 0,
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value #1",
TEST_WIRED_FILE,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS);
+ NM_SETTING_IP_CONFIG_DNS);
- ASSERT (inet_pton (AF_INET, expected_dns2, &addr) > 0,
- "connection-verify-wired", "failed to verify %s: couldn't convert DNS IP address #2",
- 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,
+ ASSERT (strcmp (nm_setting_ip_config_get_dns (s_ip4, 1), "4.2.2.2") == 0,
"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);
+ NM_SETTING_IP_CONFIG_DNS);
/* IPv4 addresses */
- 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");
+ g_assert (nm_setting_ip_config_get_num_addresses (s_ip4) == 6);
+ check_ip_address (s_ip4, 0, "2.3.4.5", 24);
+ check_ip_address (s_ip4, 1, "192.168.0.5", 24);
+ check_ip_address (s_ip4, 2, "1.2.3.4", 16);
+ check_ip_address (s_ip4, 3, "3.4.5.6", 16);
+ check_ip_address (s_ip4, 4, "4.5.6.7", 24);
+ check_ip_address (s_ip4, 5, "5.6.7.8", 24);
+
+ /* IPv4 gateway */
+ ASSERT (strcmp (nm_setting_ip_config_get_gateway (s_ip4), "2.3.4.6") == 0,
+ "connection-verify-wired", "failed to verify %s: unexpected %s / %s key value",
+ TEST_WIRED_FILE,
+ NM_SETTING_IP4_CONFIG_SETTING_NAME,
+ NM_SETTING_IP_CONFIG_GATEWAY);
/* IPv4 routes */
- 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);
+ g_assert (nm_setting_ip_config_get_num_routes (s_ip4) == 12);
+ check_ip_route (s_ip4, 0, "5.6.7.8", 32, NULL, -1);
+ check_ip_route (s_ip4, 1, "1.2.3.0", 24, "2.3.4.8", 99);
+ check_ip_route (s_ip4, 2, "1.1.1.2", 12, NULL, -1);
+ check_ip_route (s_ip4, 3, "1.1.1.3", 13, NULL, -1);
+ check_ip_route (s_ip4, 4, "1.1.1.4", 14, "2.2.2.4", -1);
+ check_ip_route (s_ip4, 5, "1.1.1.5", 15, "2.2.2.5", -1);
+ check_ip_route (s_ip4, 6, "1.1.1.6", 16, "2.2.2.6", -1);
+ check_ip_route (s_ip4, 7, "1.1.1.7", 17, NULL, -1);
+ check_ip_route (s_ip4, 8, "1.1.1.8", 18, NULL, -1);
+ check_ip_route (s_ip4, 9, "1.1.1.9", 19, NULL, -1);
+ check_ip_route (s_ip4, 10, "1.1.1.10", 20, NULL, -1);
+ check_ip_route (s_ip4, 11, "1.1.1.11", 21, NULL, 21);
/* ===== IPv6 SETTING ===== */
@@ -337,182 +285,118 @@ test_read_valid_wired_connection (void)
NM_SETTING_IP6_CONFIG_SETTING_NAME);
/* Method */
- tmp = nm_setting_ip6_config_get_method (s_ip6);
+ tmp = nm_setting_ip_config_get_method (s_ip6);
ASSERT (strcmp (tmp, NM_SETTING_IP6_CONFIG_METHOD_MANUAL) == 0,
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value",
TEST_WIRED_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_METHOD);
+ NM_SETTING_IP_CONFIG_METHOD);
/* DNS Addresses */
- ASSERT (nm_setting_ip6_config_get_num_dns (s_ip6) == 2,
+ ASSERT (nm_setting_ip_config_get_num_dns (s_ip6) == 2,
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value",
TEST_WIRED_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_DNS);
+ NM_SETTING_IP_CONFIG_DNS);
- ASSERT (inet_pton (AF_INET6, expected6_dns1, &addr6) > 0,
- "connection-verify-wired", "failed to verify %s: couldn't convert DNS IP6 address #1",
- TEST_WIRED_FILE,
- NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_DNS);
- ASSERT (IN6_ARE_ADDR_EQUAL (nm_setting_ip6_config_get_dns (s_ip6, 0), &addr6),
+ ASSERT (strcmp (nm_setting_ip_config_get_dns (s_ip6, 0), "1111:dddd::aaaa") == 0,
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value #1",
TEST_WIRED_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_DNS);
+ NM_SETTING_IP_CONFIG_DNS);
- ASSERT (inet_pton (AF_INET6, expected6_dns2, &addr6) > 0,
- "connection-verify-wired", "failed to verify %s: couldn't convert DNS IP address #2",
- TEST_WIRED_FILE,
- NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_DNS);
- ASSERT (IN6_ARE_ADDR_EQUAL (nm_setting_ip6_config_get_dns (s_ip6, 1), &addr6),
+ ASSERT (strcmp (nm_setting_ip_config_get_dns (s_ip6, 1), "1::cafe") == 0,
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value #2",
TEST_WIRED_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_DNS);
+ NM_SETTING_IP_CONFIG_DNS);
/* DNS Searches */
- ASSERT (nm_setting_ip6_config_get_num_dns_searches (s_ip6) == 3,
+ ASSERT (nm_setting_ip_config_get_num_dns_searches (s_ip6) == 3,
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value",
TEST_WIRED_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_DNS_SEARCH);
+ NM_SETTING_IP_CONFIG_DNS_SEARCH);
- ASSERT (!strcmp (nm_setting_ip6_config_get_dns_search (s_ip6, 0), expected6_dnssearch1),
+ ASSERT (!strcmp (nm_setting_ip_config_get_dns_search (s_ip6, 0), expected6_dnssearch1),
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value #1",
TEST_WIRED_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_DNS_SEARCH);
- ASSERT (!strcmp (nm_setting_ip6_config_get_dns_search (s_ip6, 1), expected6_dnssearch2),
+ NM_SETTING_IP_CONFIG_DNS_SEARCH);
+ ASSERT (!strcmp (nm_setting_ip_config_get_dns_search (s_ip6, 1), expected6_dnssearch2),
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value #2",
TEST_WIRED_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_DNS_SEARCH);
- ASSERT (!strcmp (nm_setting_ip6_config_get_dns_search (s_ip6, 2), expected6_dnssearch3),
+ NM_SETTING_IP_CONFIG_DNS_SEARCH);
+ ASSERT (!strcmp (nm_setting_ip_config_get_dns_search (s_ip6, 2), expected6_dnssearch3),
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value #3",
TEST_WIRED_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_DNS_SEARCH);
+ NM_SETTING_IP_CONFIG_DNS_SEARCH);
/* IPv6 addresses */
- 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");
+ g_assert (nm_setting_ip_config_get_num_addresses (s_ip6) == 10);
+ check_ip_address (s_ip6, 0, "2:3:4:5:6:7:8:9", 64);
+ check_ip_address (s_ip6, 1, "abcd:1234:ffff::cdde", 64);
+ check_ip_address (s_ip6, 2, "1:2:3:4:5:6:7:8", 96);
+ check_ip_address (s_ip6, 3, "3:4:5:6:7:8:9:0", 128);
+ check_ip_address (s_ip6, 4, "3:4:5:6:7:8:9:14", 64);
+ check_ip_address (s_ip6, 5, "3:4:5:6:7:8:9:15", 64);
+ check_ip_address (s_ip6, 6, "3:4:5:6:7:8:9:16", 66);
+ check_ip_address (s_ip6, 7, "3:4:5:6:7:8:9:17", 67);
+ check_ip_address (s_ip6, 8, "3:4:5:6:7:8:9:18", 68);
+ check_ip_address (s_ip6, 9, "3:4:5:6:7:8:9:19", 69);
+
+ /* IPv6 gateway */
+ ASSERT (strcmp (nm_setting_ip_config_get_gateway (s_ip6), "2:3:4:5:1:2:3:4") == 0,
+ "connection-verify-wired", "failed to verify %s: unexpected %s / %s key value",
+ TEST_WIRED_FILE,
+ NM_SETTING_IP6_CONFIG_SETTING_NAME,
+ NM_SETTING_IP_CONFIG_GATEWAY);
/* Route #1 */
- 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_assert (nm_setting_ip_config_get_num_routes (s_ip6) == 7);
+ check_ip_route (s_ip6, 0, "d:e:f:0:1:2:3:4", 64, "f:e:d:c:1:2:3:4", -1);
+ check_ip_route (s_ip6, 1, "a:b:c:d::", 64, "f:e:d:c:1:2:3:4", 99);
+ check_ip_route (s_ip6, 2, "8:7:6:5:4:3:2:1", 128, NULL, -1);
+ check_ip_route (s_ip6, 3, "6:7:8:9:0:1:2:3", 126, NULL, 1);
+ check_ip_route (s_ip6, 4, "7:8:9:0:1:2:3:4", 125, NULL, 5);
+ check_ip_route (s_ip6, 5, "8:9:0:1:2:3:4:5", 124, NULL, 6);
+ check_ip_route (s_ip6, 6, "8:9:0:1:2:3:4:6", 123, NULL, -1);
g_object_unref (connection);
}
static void
-add_one_ip4_address (NMSettingIP4Config *s_ip4,
- const char *addr,
- const char *gw,
- guint32 prefix)
+add_one_ip_address (NMSettingIPConfig *s_ip,
+ const char *addr,
+ guint32 prefix)
{
- 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);
-
- inet_pton (AF_INET, gw, &tmp);
- nm_ip4_address_set_gateway (ip4_addr, tmp);
-
- nm_setting_ip4_config_add_address (s_ip4, ip4_addr);
- nm_ip4_address_unref (ip4_addr);
-}
-
-static void
-add_one_ip4_route (NMSettingIP4Config *s_ip4,
- const char *dest,
- const char *nh,
- guint32 prefix,
- guint32 metric)
-{
- guint32 addr;
- NMIP4Route *route;
-
- route = nm_ip4_route_new ();
- nm_ip4_route_set_prefix (route, prefix);
- nm_ip4_route_set_metric (route, metric);
-
- inet_pton (AF_INET, dest, &addr);
- nm_ip4_route_set_dest (route, addr);
-
- inet_pton (AF_INET, nh, &addr);
- nm_ip4_route_set_next_hop (route, addr);
-
- nm_setting_ip4_config_add_route (s_ip4, route);
- nm_ip4_route_unref (route);
-}
-
-static void
-add_one_ip6_address (NMSettingIP6Config *s_ip6,
- const char *addr,
- guint32 prefix,
- const char *gw)
-{
- struct in6_addr tmp;
- NMIP6Address *ip6_addr;
-
- ip6_addr = nm_ip6_address_new ();
- nm_ip6_address_set_prefix (ip6_addr, prefix);
-
- inet_pton (AF_INET6, addr, &tmp);
- nm_ip6_address_set_address (ip6_addr, &tmp);
-
- if (gw) {
- inet_pton (AF_INET6, gw, &tmp);
- nm_ip6_address_set_gateway (ip6_addr, &tmp);
- }
+ NMIPAddress *ip_addr;
+ GError *error = NULL;
- nm_setting_ip6_config_add_address (s_ip6, ip6_addr);
- nm_ip6_address_unref (ip6_addr);
+ ip_addr = nm_ip_address_new (NM_IS_SETTING_IP4_CONFIG (s_ip) ? AF_INET : AF_INET6,
+ addr, prefix, &error);
+ g_assert_no_error (error);
+ nm_setting_ip_config_add_address (s_ip, ip_addr);
+ nm_ip_address_unref (ip_addr);
}
static void
-add_one_ip6_route (NMSettingIP6Config *s_ip6,
- const char *dest,
- const char *nh,
- guint32 prefix,
- guint32 metric)
+add_one_ip_route (NMSettingIPConfig *s_ip,
+ const char *dest,
+ const char *nh,
+ guint32 prefix,
+ gint64 metric)
{
- struct in6_addr addr;
- NMIP6Route *route;
-
- route = nm_ip6_route_new ();
- nm_ip6_route_set_prefix (route, prefix);
- nm_ip6_route_set_metric (route, metric);
-
- inet_pton (AF_INET6, dest, &addr);
- nm_ip6_route_set_dest (route, &addr);
-
- inet_pton (AF_INET6, nh, &addr);
- nm_ip6_route_set_next_hop (route, &addr);
+ NMIPRoute *route;
+ GError *error = NULL;
- nm_setting_ip6_config_add_route (s_ip6, route);
- nm_ip6_route_unref (route);
+ g_assert (prefix > 0);
+ route = nm_ip_route_new (NM_IS_SETTING_IP4_CONFIG (s_ip) ? AF_INET : AF_INET6,
+ dest, prefix, nh, metric, &error);
+ g_assert_no_error (error);
+ nm_setting_ip_config_add_route (s_ip, route);
+ nm_ip_route_unref (route);
}
@@ -522,33 +406,29 @@ test_write_wired_connection (void)
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *uuid;
- GByteArray *mac;
- unsigned char tmpmac[] = { 0x99, 0x88, 0x77, 0x66, 0x55, 0x44 };
+ const char *mac = "99:88:77:66:55:44";
gboolean success;
NMConnection *reread;
char *testfile = NULL;
GError *error = NULL;
pid_t owner_grp;
uid_t owner_uid;
- guint32 addr;
- struct in6_addr addr6;
const char *dns1 = "4.2.2.1";
const char *dns2 = "4.2.2.2";
const char *address1 = "192.168.0.5";
- const char *address1_gw = "192.168.0.1";
const char *address2 = "1.2.3.4";
- const char *address2_gw = "1.2.1.1";
+ const char *gw = "192.168.0.1";
const char *route1 = "10.10.10.2";
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 *route3_nh = NULL;
const char *route4 = "3.3.3.3";
- const char *route4_nh = "0.0.0.0";
+ const char *route4_nh = NULL;
const char *dns6_1 = "1::cafe";
const char *dns6_2 = "2::cafe";
const char *address6_1 = "abcd::beef";
@@ -563,7 +443,7 @@ test_write_wired_connection (void)
const char *route6_4_nh = "::";
guint64 timestamp = 0x12345678L;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
@@ -585,66 +465,60 @@ test_write_wired_connection (void)
s_wired = NM_SETTING_WIRED (nm_setting_wired_new ());
nm_connection_add_setting (connection, NM_SETTING (s_wired));
- mac = g_byte_array_sized_new (ETH_ALEN);
- g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac));
g_object_set (s_wired,
NM_SETTING_WIRED_MAC_ADDRESS, mac,
NM_SETTING_WIRED_MTU, 900,
NULL);
- g_byte_array_free (mac, TRUE);
/* IP4 setting */
- s_ip4 = NM_SETTING_IP4_CONFIG (nm_setting_ip4_config_new ());
+ s_ip4 = NM_SETTING_IP_CONFIG (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_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
+ NM_SETTING_IP_CONFIG_GATEWAY, gw,
NULL);
/* Addresses */
- add_one_ip4_address (s_ip4, address1, address1_gw, 24);
- add_one_ip4_address (s_ip4, address2, address2_gw, 8);
+ add_one_ip_address (s_ip4, address1, 24);
+ add_one_ip_address (s_ip4, address2, 8);
/* 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);
+ add_one_ip_route (s_ip4, route1, route1_nh, 24, 3);
+ add_one_ip_route (s_ip4, route2, route2_nh, 8, 1);
+ add_one_ip_route (s_ip4, route3, route3_nh, 7, -1);
+ add_one_ip_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);
- inet_pton (AF_INET, dns2, &addr);
- nm_setting_ip4_config_add_dns (s_ip4, addr);
+ nm_setting_ip_config_add_dns (s_ip4, dns1);
+ nm_setting_ip_config_add_dns (s_ip4, dns2);
/* IP6 setting */
- s_ip6 = NM_SETTING_IP6_CONFIG (nm_setting_ip6_config_new ());
+ s_ip6 = NM_SETTING_IP_CONFIG (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,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_MANUAL,
NULL);
/* Addresses */
- add_one_ip6_address (s_ip6, address6_1, 64, NULL);
- add_one_ip6_address (s_ip6, address6_2, 56, NULL);
+ add_one_ip_address (s_ip6, address6_1, 64);
+ add_one_ip_address (s_ip6, address6_2, 56);
/* 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);
+ add_one_ip_route (s_ip6, route6_1, route6_1_nh, 64, 3);
+ add_one_ip_route (s_ip6, route6_2, route6_2_nh, 56, 1);
+ add_one_ip_route (s_ip6, route6_3, route6_3_nh, 63, 5);
+ add_one_ip_route (s_ip6, route6_4, route6_4_nh, 62, -1);
/* DNS servers */
- inet_pton (AF_INET6, dns6_1, &addr6);
- nm_setting_ip6_config_add_dns (s_ip6, &addr6);
- inet_pton (AF_INET6, dns6_2, &addr6);
- nm_setting_ip6_config_add_dns (s_ip6, &addr6);
+ nm_setting_ip_config_add_dns (s_ip6, dns6_1);
+ nm_setting_ip_config_add_dns (s_ip6, dns6_2);
/* DNS searches */
- nm_setting_ip6_config_add_dns_search (s_ip6, "wallaceandgromit.com");
+ nm_setting_ip_config_add_dns_search (s_ip6, "wallaceandgromit.com");
/* Write out the connection */
owner_uid = geteuid ();
@@ -680,8 +554,8 @@ test_read_ip6_wired_connection (void)
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
GError *error = NULL;
const char *tmp;
const char *expected_id = "Test Wired Connection IP6";
@@ -745,18 +619,18 @@ test_read_ip6_wired_connection (void)
NM_SETTING_IP4_CONFIG_SETTING_NAME);
/* Method */
- tmp = nm_setting_ip4_config_get_method (s_ip4);
+ tmp = nm_setting_ip_config_get_method (s_ip4);
ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_DISABLED) == 0,
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value",
TEST_WIRED_IP6_FILE,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_METHOD);
+ NM_SETTING_IP_CONFIG_METHOD);
- ASSERT (nm_setting_ip4_config_get_num_addresses (s_ip4) == 0,
+ ASSERT (nm_setting_ip_config_get_num_addresses (s_ip4) == 0,
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value",
TEST_WIRED_IP6_FILE,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS);
+ NM_SETTING_IP_CONFIG_DNS);
/* ===== IPv6 SETTING ===== */
@@ -767,16 +641,23 @@ test_read_ip6_wired_connection (void)
NM_SETTING_IP6_CONFIG_SETTING_NAME);
/* Method */
- tmp = nm_setting_ip6_config_get_method (s_ip6);
+ tmp = nm_setting_ip_config_get_method (s_ip6);
ASSERT (strcmp (tmp, NM_SETTING_IP6_CONFIG_METHOD_MANUAL) == 0,
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value",
TEST_WIRED_IP6_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_METHOD);
+ NM_SETTING_IP_CONFIG_METHOD);
/* IPv6 address */
- g_assert (nm_setting_ip6_config_get_num_addresses (s_ip6) == 1);
- check_ip6_address (s_ip6, 0, "abcd:1234:ffff::cdde", 64, "abcd:1234:ffff::cdd1");
+ g_assert (nm_setting_ip_config_get_num_addresses (s_ip6) == 1);
+ check_ip_address (s_ip6, 0, "abcd:1234:ffff::cdde", 64);
+
+ /* IPv6 gateway */
+ ASSERT (strcmp (nm_setting_ip_config_get_gateway (s_ip6), "abcd:1234:ffff::cdd1") == 0,
+ "connection-verify-wired", "failed to verify %s: unexpected %s / %s key value",
+ TEST_WIRED_IP6_FILE,
+ NM_SETTING_IP6_CONFIG_SETTING_NAME,
+ NM_SETTING_IP_CONFIG_GATEWAY);
g_object_unref (connection);
}
@@ -787,8 +668,8 @@ test_write_ip6_wired_connection (void)
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *uuid;
gboolean success;
NMConnection *reread;
@@ -796,12 +677,11 @@ test_write_ip6_wired_connection (void)
GError *error = NULL;
pid_t owner_grp;
uid_t owner_uid;
- struct in6_addr addr6;
const char *dns = "1::cafe";
const char *address = "abcd::beef";
const char *gw = "dcba::beef";
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
@@ -824,31 +704,31 @@ test_write_ip6_wired_connection (void)
/* IP4 setting */
- s_ip4 = NM_SETTING_IP4_CONFIG (nm_setting_ip4_config_new ());
+ s_ip4 = NM_SETTING_IP_CONFIG (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_DISABLED,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_DISABLED,
NULL);
/* IP6 setting */
- s_ip6 = NM_SETTING_IP6_CONFIG (nm_setting_ip6_config_new ());
+ s_ip6 = NM_SETTING_IP_CONFIG (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,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_MANUAL,
+ NM_SETTING_IP_CONFIG_GATEWAY, gw,
NULL);
/* Addresses */
- add_one_ip6_address (s_ip6, address, 64, gw);
+ add_one_ip_address (s_ip6, address, 64);
/* DNS servers */
- inet_pton (AF_INET6, dns, &addr6);
- nm_setting_ip6_config_add_dns (s_ip6, &addr6);
+ nm_setting_ip_config_add_dns (s_ip6, dns);
/* DNS searches */
- nm_setting_ip6_config_add_dns_search (s_ip6, "wallaceandgromit.com");
+ nm_setting_ip_config_add_dns_search (s_ip6, "wallaceandgromit.com");
/* Write out the connection */
owner_uid = geteuid ();
@@ -885,7 +765,7 @@ test_read_wired_mac_case (void)
NMSettingConnection *s_con;
NMSettingWired *s_wired;
GError *error = NULL;
- const GByteArray *array;
+ const char *mac;
char expected_mac_address[ETH_ALEN] = { 0x00, 0x11, 0xaa, 0xbb, 0xcc, 0x55 };
const char *tmp;
const char *expected_id = "Test Wired Connection MAC Case";
@@ -948,18 +828,13 @@ test_read_wired_mac_case (void)
NM_SETTING_WIRED_SETTING_NAME);
/* MAC address */
- array = nm_setting_wired_get_mac_address (s_wired);
- ASSERT (array != NULL,
+ mac = nm_setting_wired_get_mac_address (s_wired);
+ ASSERT (mac != NULL,
"connection-verify-wired", "failed to verify %s: missing %s / %s key",
TEST_WIRED_MAC_CASE_FILE,
NM_SETTING_WIRED_SETTING_NAME,
NM_SETTING_WIRED_MAC_ADDRESS);
- ASSERT (array->len == ETH_ALEN,
- "connection-verify-wired", "failed to verify %s: unexpected %s / %s key value length",
- TEST_WIRED_MAC_CASE_FILE,
- NM_SETTING_WIRED_SETTING_NAME,
- NM_SETTING_WIRED_MAC_ADDRESS);
- ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0,
+ ASSERT (nm_utils_hwaddr_matches (mac, -1, expected_mac_address, sizeof (expected_mac_address)),
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value",
TEST_WIRED_MAC_CASE_FILE,
NM_SETTING_WIRED_SETTING_NAME,
@@ -977,7 +852,7 @@ test_read_mac_old_format (void)
NMSettingWired *s_wired;
GError *error = NULL;
gboolean success;
- const GByteArray *array;
+ const char *mac;
char expected_mac[ETH_ALEN] = { 0x00, 0x11, 0xaa, 0xbb, 0xcc, 0x55 };
char expected_cloned_mac[ETH_ALEN] = { 0x00, 0x16, 0xaa, 0xbb, 0xcc, 0xfe };
@@ -993,16 +868,14 @@ test_read_mac_old_format (void)
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);
+ mac = nm_setting_wired_get_mac_address (s_wired);
+ g_assert (mac);
+ g_assert (nm_utils_hwaddr_matches (mac, -1, expected_mac, ETH_ALEN));
/* 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);
+ mac = nm_setting_wired_get_cloned_mac_address (s_wired);
+ g_assert (mac);
+ g_assert (nm_utils_hwaddr_matches (mac, -1, expected_cloned_mac, ETH_ALEN));
g_object_unref (connection);
}
@@ -1016,7 +889,7 @@ test_read_mac_ib_old_format (void)
NMSettingInfiniband *s_ib;
GError *error = NULL;
gboolean success;
- const GByteArray *array;
+ const char *mac;
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 };
@@ -1033,10 +906,9 @@ test_read_mac_ib_old_format (void)
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);
+ mac = nm_setting_infiniband_get_mac_address (s_ib);
+ g_assert (mac);
+ g_assert (nm_utils_hwaddr_matches (mac, -1, expected_mac, sizeof (expected_mac)));
g_object_unref (connection);
}
@@ -1047,10 +919,10 @@ test_read_valid_wireless_connection (void)
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWireless *s_wireless;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
GError *error = NULL;
- const GByteArray *array;
- char expected_bssid[ETH_ALEN] = { 0x00, 0x1a, 0x33, 0x44, 0x99, 0x82 };
+ const char *bssid;
+ const guint8 expected_bssid[ETH_ALEN] = { 0x00, 0x1a, 0x33, 0x44, 0x99, 0x82 };
const char *tmp;
const char *expected_id = "Test Wireless Connection";
const char *expected_uuid = "2f962388-e5f3-45af-a62c-ac220b8f7baa";
@@ -1122,18 +994,13 @@ test_read_valid_wireless_connection (void)
NM_SETTING_WIRED_SETTING_NAME);
/* BSSID */
- array = nm_setting_wireless_get_bssid (s_wireless);
- ASSERT (array != NULL,
+ bssid = nm_setting_wireless_get_bssid (s_wireless);
+ ASSERT (bssid != NULL,
"connection-verify-wireless", "failed to verify %s: missing %s / %s key",
TEST_WIRELESS_FILE,
NM_SETTING_WIRELESS_SETTING_NAME,
NM_SETTING_WIRELESS_BSSID);
- ASSERT (array->len == ETH_ALEN,
- "connection-verify-wireless", "failed to verify %s: unexpected %s / %s key value length",
- TEST_WIRELESS_FILE,
- NM_SETTING_WIRELESS_SETTING_NAME,
- NM_SETTING_WIRELESS_BSSID);
- ASSERT (memcmp (array->data, &expected_bssid[0], sizeof (expected_bssid)) == 0,
+ ASSERT (nm_utils_hwaddr_matches (bssid, -1, expected_bssid, sizeof (expected_bssid)),
"connection-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
TEST_WIRELESS_FILE,
NM_SETTING_WIRELESS_SETTING_NAME,
@@ -1148,12 +1015,12 @@ test_read_valid_wireless_connection (void)
NM_SETTING_IP4_CONFIG_SETTING_NAME);
/* Method */
- tmp = nm_setting_ip4_config_get_method (s_ip4);
+ tmp = nm_setting_ip_config_get_method (s_ip4);
ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
"connection-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
TEST_WIRELESS_FILE,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_METHOD);
+ NM_SETTING_IP_CONFIG_METHOD);
g_object_unref (connection);
}
@@ -1164,12 +1031,11 @@ test_write_wireless_connection (void)
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWireless *s_wireless;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *uuid;
- GByteArray *bssid;
- unsigned char tmpbssid[] = { 0xaa, 0xb9, 0xa1, 0x74, 0x55, 0x44 };
- GByteArray *ssid;
+ const char *bssid = "aa:b9:a1:74:55:44";
+ GBytes *ssid;
unsigned char tmpssid[] = { 0x31, 0x33, 0x33, 0x37 };
gboolean success;
NMConnection *reread;
@@ -1179,7 +1045,7 @@ test_write_wireless_connection (void)
uid_t owner_uid;
guint64 timestamp = 0x12344433L;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
@@ -1201,11 +1067,7 @@ test_write_wireless_connection (void)
s_wireless = NM_SETTING_WIRELESS (nm_setting_wireless_new ());
nm_connection_add_setting (connection, NM_SETTING (s_wireless));
- bssid = g_byte_array_sized_new (ETH_ALEN);
- g_byte_array_append (bssid, &tmpbssid[0], sizeof (tmpbssid));
-
- ssid = g_byte_array_sized_new (sizeof (tmpssid));
- g_byte_array_append (ssid, &tmpssid[0], sizeof (tmpssid));
+ ssid = g_bytes_new (tmpssid, sizeof (tmpssid));
g_object_set (s_wireless,
NM_SETTING_WIRELESS_BSSID, bssid,
@@ -1213,25 +1075,24 @@ test_write_wireless_connection (void)
NM_SETTING_WIRED_MTU, 1000,
NULL);
- g_byte_array_free (bssid, TRUE);
- g_byte_array_free (ssid, TRUE);
+ g_bytes_unref (ssid);
/* IP4 setting */
- s_ip4 = NM_SETTING_IP4_CONFIG (nm_setting_ip4_config_new ());
+ s_ip4 = NM_SETTING_IP_CONFIG (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_AUTO,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
NULL);
/* IP6 setting */
- s_ip6 = NM_SETTING_IP6_CONFIG (nm_setting_ip6_config_new ());
+ s_ip6 = NM_SETTING_IP_CONFIG (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_AUTO,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO,
NULL);
/* Write out the connection */
@@ -1268,7 +1129,9 @@ test_read_string_ssid (void)
NMConnection *connection;
NMSettingWireless *s_wireless;
GError *error = NULL;
- const GByteArray *array;
+ GBytes *ssid;
+ const guint8 *ssid_data;
+ gsize ssid_len;
const char *expected_ssid = "blah blah ssid 1234";
connection = nm_keyfile_plugin_connection_from_file (TEST_STRING_SSID_FILE, NULL);
@@ -1287,14 +1150,15 @@ test_read_string_ssid (void)
NM_SETTING_WIRELESS_SETTING_NAME);
/* SSID */
- array = nm_setting_wireless_get_ssid (s_wireless);
- ASSERT (array != NULL,
+ ssid = nm_setting_wireless_get_ssid (s_wireless);
+ ASSERT (ssid != NULL,
"connection-verify-wireless", "failed to verify %s: missing %s / %s key",
TEST_STRING_SSID_FILE,
NM_SETTING_WIRELESS_SETTING_NAME,
NM_SETTING_WIRELESS_SSID);
- g_assert_cmpint (array->len, ==, strlen (expected_ssid));
- g_assert (memcmp (array->data, expected_ssid, array->len) == 0);
+ ssid_data = g_bytes_get_data (ssid, &ssid_len);
+ g_assert_cmpint (ssid_len, ==, strlen (expected_ssid));
+ g_assert (memcmp (ssid_data, expected_ssid, ssid_len) == 0);
g_object_unref (connection);
}
@@ -1305,9 +1169,9 @@ test_write_string_ssid (void)
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWireless *s_wireless;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
char *uuid, *testfile = NULL, *tmp;
- GByteArray *ssid;
+ GBytes *ssid;
unsigned char tmpssid[] = { 65, 49, 50, 51, 32, 46, 92, 46, 36, 37, 126, 93 };
gboolean success;
NMConnection *reread;
@@ -1316,7 +1180,7 @@ test_write_string_ssid (void)
uid_t owner_uid;
GKeyFile *keyfile;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
@@ -1336,18 +1200,17 @@ test_write_string_ssid (void)
s_wireless = NM_SETTING_WIRELESS (nm_setting_wireless_new ());
nm_connection_add_setting (connection, NM_SETTING (s_wireless));
- ssid = g_byte_array_sized_new (sizeof (tmpssid));
- g_byte_array_append (ssid, &tmpssid[0], sizeof (tmpssid));
+ ssid = g_bytes_new (tmpssid, sizeof (tmpssid));
g_object_set (s_wireless, NM_SETTING_WIRELESS_SSID, ssid, NULL);
- g_byte_array_free (ssid, TRUE);
+ g_bytes_unref (ssid);
/* IP4 setting */
- s_ip4 = NM_SETTING_IP4_CONFIG (nm_setting_ip4_config_new ());
+ s_ip4 = NM_SETTING_IP_CONFIG (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_AUTO,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
NULL);
/* Write out the connection */
@@ -1378,8 +1241,7 @@ test_write_string_ssid (void)
reread = nm_keyfile_plugin_connection_from_file (testfile, NULL);
ASSERT (reread != NULL, "connection-write", "failed to re-read test connection");
- ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
- "connection-write", "written and re-read connection weren't the same");
+ nmtst_assert_connection_equals (connection, TRUE, reread, FALSE);
g_clear_error (&error);
unlink (testfile);
@@ -1398,7 +1260,9 @@ test_read_intlist_ssid (void)
NMSettingWireless *s_wifi;
GError *error = NULL;
gboolean success;
- const GByteArray *array;
+ GBytes *ssid;
+ const guint8 *ssid_data;
+ gsize ssid_len;
const char *expected_ssid = "blah1234";
connection = nm_keyfile_plugin_connection_from_file (TEST_INTLIST_SSID_FILE, &error);
@@ -1413,10 +1277,11 @@ test_read_intlist_ssid (void)
s_wifi = nm_connection_get_setting_wireless (connection);
g_assert (s_wifi);
- array = nm_setting_wireless_get_ssid (s_wifi);
- g_assert (array != NULL);
- g_assert_cmpint (array->len, ==, strlen (expected_ssid));
- g_assert_cmpint (memcmp (array->data, expected_ssid, strlen (expected_ssid)), ==, 0);
+ ssid = nm_setting_wireless_get_ssid (s_wifi);
+ g_assert (ssid != NULL);
+ ssid_data = g_bytes_get_data (ssid, &ssid_len);
+ g_assert_cmpint (ssid_len, ==, strlen (expected_ssid));
+ g_assert_cmpint (memcmp (ssid_data, expected_ssid, strlen (expected_ssid)), ==, 0);
g_object_unref (connection);
}
@@ -1427,9 +1292,9 @@ test_write_intlist_ssid (void)
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWireless *s_wifi;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
char *uuid, *testfile = NULL;
- GByteArray *ssid;
+ GBytes *ssid;
unsigned char tmpssid[] = { 65, 49, 50, 51, 0, 50, 50 };
gboolean success;
NMConnection *reread;
@@ -1440,7 +1305,7 @@ test_write_intlist_ssid (void)
gint *intlist;
gsize len = 0, i;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
g_assert (connection);
/* Connection setting */
@@ -1462,16 +1327,15 @@ test_write_intlist_ssid (void)
g_assert (s_wifi);
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));
+ ssid = g_bytes_new (tmpssid, sizeof (tmpssid));
g_object_set (s_wifi, NM_SETTING_WIRELESS_SSID, ssid, NULL);
- g_byte_array_free (ssid, TRUE);
+ g_bytes_unref (ssid);
/* IP4 setting */
- s_ip4 = NM_SETTING_IP4_CONFIG (nm_setting_ip4_config_new ());
+ s_ip4 = NM_SETTING_IP_CONFIG (nm_setting_ip4_config_new ());
g_assert (s_ip4);
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);
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
/* Write out the connection */
owner_uid = geteuid ();
@@ -1503,8 +1367,7 @@ test_write_intlist_ssid (void)
g_assert_no_error (error);
g_assert (reread);
- success = nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT);
- g_assert (success);
+ nmtst_assert_connection_equals (connection, TRUE, reread, FALSE);
g_clear_error (&error);
unlink (testfile);
@@ -1523,7 +1386,9 @@ test_read_intlike_ssid (void)
NMSettingWireless *s_wifi;
GError *error = NULL;
gboolean success;
- const GByteArray *array;
+ GBytes *ssid;
+ const guint8 *ssid_data;
+ gsize ssid_len;
const char *expected_ssid = "101";
connection = nm_keyfile_plugin_connection_from_file (TEST_INTLIKE_SSID_FILE, &error);
@@ -1538,10 +1403,11 @@ test_read_intlike_ssid (void)
s_wifi = nm_connection_get_setting_wireless (connection);
g_assert (s_wifi);
- array = nm_setting_wireless_get_ssid (s_wifi);
- g_assert (array != NULL);
- g_assert_cmpint (array->len, ==, strlen (expected_ssid));
- g_assert_cmpint (memcmp (array->data, expected_ssid, strlen (expected_ssid)), ==, 0);
+ ssid = nm_setting_wireless_get_ssid (s_wifi);
+ g_assert (ssid != NULL);
+ ssid_data = g_bytes_get_data (ssid, &ssid_len);
+ g_assert_cmpint (ssid_len, ==, strlen (expected_ssid));
+ g_assert_cmpint (memcmp (ssid_data, expected_ssid, strlen (expected_ssid)), ==, 0);
g_object_unref (connection);
}
@@ -1555,7 +1421,9 @@ test_read_intlike_ssid_2 (void)
NMSettingWireless *s_wifi;
GError *error = NULL;
gboolean success;
- const GByteArray *array;
+ GBytes *ssid;
+ const guint8 *ssid_data;
+ gsize ssid_len;
const char *expected_ssid = "11;12;13;";
connection = nm_keyfile_plugin_connection_from_file (TEST_INTLIKE_SSID_2_FILE, &error);
@@ -1570,10 +1438,11 @@ test_read_intlike_ssid_2 (void)
s_wifi = nm_connection_get_setting_wireless (connection);
g_assert (s_wifi);
- array = nm_setting_wireless_get_ssid (s_wifi);
- g_assert (array != NULL);
- g_assert_cmpint (array->len, ==, strlen (expected_ssid));
- g_assert_cmpint (memcmp (array->data, expected_ssid, strlen (expected_ssid)), ==, 0);
+ ssid = nm_setting_wireless_get_ssid (s_wifi);
+ g_assert (ssid != NULL);
+ ssid_data = g_bytes_get_data (ssid, &ssid_len);
+ g_assert_cmpint (ssid_len, ==, strlen (expected_ssid));
+ g_assert_cmpint (memcmp (ssid_data, expected_ssid, strlen (expected_ssid)), ==, 0);
g_object_unref (connection);
}
@@ -1584,9 +1453,9 @@ test_write_intlike_ssid (void)
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWireless *s_wifi;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
char *uuid, *testfile = NULL;
- GByteArray *ssid;
+ GBytes *ssid;
unsigned char tmpssid[] = { 49, 48, 49 };
gboolean success;
NMConnection *reread;
@@ -1596,7 +1465,7 @@ test_write_intlike_ssid (void)
GKeyFile *keyfile;
char *tmp;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
g_assert (connection);
/* Connection setting */
@@ -1618,16 +1487,15 @@ test_write_intlike_ssid (void)
g_assert (s_wifi);
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));
+ ssid = g_bytes_new (tmpssid, sizeof (tmpssid));
g_object_set (s_wifi, NM_SETTING_WIRELESS_SSID, ssid, NULL);
- g_byte_array_free (ssid, TRUE);
+ g_bytes_unref (ssid);
/* IP4 setting */
- s_ip4 = NM_SETTING_IP4_CONFIG (nm_setting_ip4_config_new ());
+ s_ip4 = NM_SETTING_IP_CONFIG (nm_setting_ip4_config_new ());
g_assert (s_ip4);
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);
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
/* Write out the connection */
owner_uid = geteuid ();
@@ -1655,8 +1523,7 @@ test_write_intlike_ssid (void)
g_assert_no_error (error);
g_assert (reread);
- success = nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT);
- g_assert (success);
+ nmtst_assert_connection_equals (connection, TRUE, reread, FALSE);
g_clear_error (&error);
unlink (testfile);
@@ -1672,9 +1539,9 @@ test_write_intlike_ssid_2 (void)
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWireless *s_wifi;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
char *uuid, *testfile = NULL;
- GByteArray *ssid;
+ GBytes *ssid;
unsigned char tmpssid[] = { 49, 49, 59, 49, 50, 59, 49, 51, 59};
gboolean success;
NMConnection *reread;
@@ -1684,7 +1551,7 @@ test_write_intlike_ssid_2 (void)
GKeyFile *keyfile;
char *tmp;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
g_assert (connection);
/* Connection setting */
@@ -1706,16 +1573,15 @@ test_write_intlike_ssid_2 (void)
g_assert (s_wifi);
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));
+ ssid = g_bytes_new (tmpssid, sizeof (tmpssid));
g_object_set (s_wifi, NM_SETTING_WIRELESS_SSID, ssid, NULL);
- g_byte_array_free (ssid, TRUE);
+ g_bytes_unref (ssid);
/* IP4 setting */
- s_ip4 = NM_SETTING_IP4_CONFIG (nm_setting_ip4_config_new ());
+ s_ip4 = NM_SETTING_IP_CONFIG (nm_setting_ip4_config_new ());
g_assert (s_ip4);
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);
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
/* Write out the connection */
owner_uid = geteuid ();
@@ -1743,8 +1609,7 @@ test_write_intlike_ssid_2 (void)
g_assert_no_error (error);
g_assert (reread);
- success = nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT);
- g_assert (success);
+ nmtst_assert_connection_equals (connection, TRUE, reread, FALSE);
g_clear_error (&error);
unlink (testfile);
@@ -1765,9 +1630,10 @@ test_read_bt_dun_connection (void)
NMSettingSerial *s_serial;
NMSettingGsm *s_gsm;
GError *error = NULL;
- const GByteArray *array;
- char expected_bdaddr[ETH_ALEN] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55 };
+ const char *bdaddr;
+ const guint8 expected_bdaddr[ETH_ALEN] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55 };
const char *tmp;
+ NMSettingSerialParity parity;
const char *expected_id = "AT&T Data Connect BT";
const char *expected_uuid = "089130ab-ce28-46e4-ad77-d44869b03d19";
const char *expected_apn = "ISP.CINGULAR";
@@ -1824,18 +1690,13 @@ test_read_bt_dun_connection (void)
NM_SETTING_WIRED_SETTING_NAME);
/* BDADDR */
- array = nm_setting_bluetooth_get_bdaddr (s_bluetooth);
- ASSERT (array != NULL,
+ bdaddr = nm_setting_bluetooth_get_bdaddr (s_bluetooth);
+ ASSERT (bdaddr != NULL,
"connection-verify-bt", "failed to verify %s: missing %s / %s key",
TEST_BT_DUN_FILE,
NM_SETTING_BLUETOOTH_SETTING_NAME,
NM_SETTING_BLUETOOTH_BDADDR);
- ASSERT (array->len == ETH_ALEN,
- "connection-verify-bt", "failed to verify %s: unexpected %s / %s key value length",
- TEST_BT_DUN_FILE,
- NM_SETTING_BLUETOOTH_SETTING_NAME,
- NM_SETTING_BLUETOOTH_BDADDR);
- ASSERT (memcmp (array->data, &expected_bdaddr[0], sizeof (expected_bdaddr)) == 0,
+ ASSERT (nm_utils_hwaddr_matches (bdaddr, -1, expected_bdaddr, sizeof (expected_bdaddr)),
"connection-verify-bt", "failed to verify %s: unexpected %s / %s key value",
TEST_BT_DUN_FILE,
NM_SETTING_BLUETOOTH_SETTING_NAME,
@@ -1909,6 +1770,13 @@ test_read_bt_dun_connection (void)
TEST_BT_DUN_FILE,
NM_SETTING_SERIAL_SETTING_NAME);
+ parity = nm_setting_serial_get_parity (s_serial);
+ ASSERT (parity == NM_SETTING_SERIAL_PARITY_ODD,
+ "connection-verify-serial", "failed to verify %s: unexpected %s / %s key value",
+ TEST_BT_DUN_FILE,
+ NM_SETTING_SERIAL_SETTING_NAME,
+ NM_SETTING_SERIAL_PARITY);
+
g_object_unref (connection);
}
@@ -1918,11 +1786,10 @@ test_write_bt_dun_connection (void)
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingBluetooth *s_bt;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
NMSettingGsm *s_gsm;
char *uuid;
- GByteArray *bdaddr;
- unsigned char tmpbdaddr[] = { 0xaa, 0xb9, 0xa1, 0x74, 0x55, 0x44 };
+ const char *bdaddr = "aa:b9:a1:74:55:44";
gboolean success;
NMConnection *reread;
char *testfile = NULL;
@@ -1931,7 +1798,7 @@ test_write_bt_dun_connection (void)
uid_t owner_uid;
guint64 timestamp = 0x12344433L;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
@@ -1953,23 +1820,18 @@ test_write_bt_dun_connection (void)
s_bt = NM_SETTING_BLUETOOTH (nm_setting_bluetooth_new ());
nm_connection_add_setting (connection, NM_SETTING (s_bt));
- bdaddr = g_byte_array_sized_new (ETH_ALEN);
- g_byte_array_append (bdaddr, &tmpbdaddr[0], sizeof (tmpbdaddr));
-
g_object_set (s_bt,
NM_SETTING_BLUETOOTH_BDADDR, bdaddr,
NM_SETTING_BLUETOOTH_TYPE, NM_SETTING_BLUETOOTH_TYPE_DUN,
NULL);
- g_byte_array_free (bdaddr, TRUE);
-
/* IP4 setting */
- s_ip4 = NM_SETTING_IP4_CONFIG (nm_setting_ip4_config_new ());
+ s_ip4 = NM_SETTING_IP_CONFIG (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_AUTO,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
NULL);
/* GSM setting */
@@ -1998,8 +1860,7 @@ test_write_bt_dun_connection (void)
reread = nm_keyfile_plugin_connection_from_file (testfile, NULL);
ASSERT (reread != NULL, "connection-write", "failed to re-read test connection");
- ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
- "connection-write", "written and re-read connection weren't the same");
+ nmtst_assert_connection_equals (connection, TRUE, reread, FALSE);
g_clear_error (&error);
unlink (testfile);
@@ -2021,6 +1882,7 @@ test_read_gsm_connection (void)
NMSettingBluetooth *s_bluetooth;
GError *error = NULL;
const char *tmp;
+ NMSettingSerialParity parity;
const char *expected_id = "AT&T Data Connect";
const char *expected_apn = "ISP.CINGULAR";
const char *expected_username = "ISP@CINGULARGPRS.COM";
@@ -2158,6 +2020,13 @@ test_read_gsm_connection (void)
TEST_GSM_FILE,
NM_SETTING_SERIAL_SETTING_NAME);
+ parity = nm_setting_serial_get_parity (s_serial);
+ ASSERT (parity == NM_SETTING_SERIAL_PARITY_ODD,
+ "connection-verify-serial", "failed to verify %s: unexpected %s / %s key value",
+ TEST_GSM_FILE,
+ NM_SETTING_SERIAL_SETTING_NAME,
+ NM_SETTING_SERIAL_PARITY);
+
g_object_unref (connection);
}
@@ -2166,7 +2035,7 @@ test_write_gsm_connection (void)
{
NMConnection *connection;
NMSettingConnection *s_con;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
NMSettingGsm *s_gsm;
char *uuid;
gboolean success;
@@ -2177,7 +2046,7 @@ test_write_gsm_connection (void)
uid_t owner_uid;
guint64 timestamp = 0x12344433L;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
@@ -2196,11 +2065,11 @@ test_write_gsm_connection (void)
/* IP4 setting */
- s_ip4 = NM_SETTING_IP4_CONFIG (nm_setting_ip4_config_new ());
+ s_ip4 = NM_SETTING_IP_CONFIG (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_AUTO,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
NULL);
/* GSM setting */
@@ -2215,7 +2084,6 @@ test_write_gsm_connection (void)
NM_SETTING_GSM_PIN, "123456",
NM_SETTING_GSM_NETWORK_ID, "254098",
NM_SETTING_GSM_HOME_ONLY, TRUE,
- NM_SETTING_GSM_NETWORK_TYPE, NM_SETTING_GSM_NETWORK_TYPE_PREFER_UMTS_HSPA,
NULL);
/* Write out the connection */
@@ -2233,8 +2101,7 @@ test_write_gsm_connection (void)
reread = nm_keyfile_plugin_connection_from_file (testfile, NULL);
ASSERT (reread != NULL, "connection-write", "failed to re-read test connection");
- ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
- "connection-write", "written and re-read connection weren't the same");
+ nmtst_assert_connection_equals (connection, TRUE, reread, FALSE);
g_clear_error (&error);
unlink (testfile);
@@ -2255,7 +2122,7 @@ test_read_wired_8021x_tls_blob_connection (void)
GError *error = NULL;
const char *tmp;
gboolean success;
- const GByteArray *array;
+ GBytes *blob;
connection = nm_keyfile_plugin_connection_from_file (TEST_WIRED_TLS_BLOB_FILE, &error);
if (connection == NULL) {
@@ -2292,16 +2159,16 @@ 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,
+ g_test_expect_message ("libnm", 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 */
- array = nm_setting_802_1x_get_ca_cert_blob (s_8021x);
- g_assert (array != NULL);
- g_assert_cmpint (array->len, ==, 568);
+ blob = nm_setting_802_1x_get_ca_cert_blob (s_8021x);
+ g_assert (blob != NULL);
+ g_assert_cmpint (g_bytes_get_size (blob), ==, 568);
tmp = nm_setting_802_1x_get_client_cert_path (s_8021x);
g_assert_cmpstr (tmp, ==, "/home/dcbw/Desktop/certinfra/client.pem");
@@ -2504,14 +2371,14 @@ create_wired_tls_connection (NMSetting8021xCKScheme scheme)
{
NMConnection *connection;
NMSettingConnection *s_con;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
NMSetting *s_wired;
NMSetting8021x *s_8021x;
char *uuid;
gboolean success;
GError *error = NULL;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
g_assert (connection != NULL);
/* Connection setting */
@@ -2528,9 +2395,9 @@ create_wired_tls_connection (NMSetting8021xCKScheme scheme)
g_free (uuid);
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new ();
g_assert (s_ip4);
- g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
/* Wired setting */
@@ -2769,7 +2636,7 @@ test_read_infiniband_connection (void)
NMSettingConnection *s_con;
NMSettingInfiniband *s_ib;
GError *error = NULL;
- const GByteArray *array;
+ const char *mac;
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 };
@@ -2794,10 +2661,9 @@ test_read_infiniband_connection (void)
s_ib = nm_connection_get_setting_infiniband (connection);
g_assert (s_ib);
- 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);
+ mac = nm_setting_infiniband_get_mac_address (s_ib);
+ g_assert (mac);
+ g_assert (nm_utils_hwaddr_matches (mac, -1, expected_mac, sizeof (expected_mac)));
g_object_unref (connection);
}
@@ -2808,13 +2674,10 @@ test_write_infiniband_connection (void)
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingInfiniband *s_ib;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *uuid;
- GByteArray *mac;
- guint8 tmpmac[] = { 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0xab, 0xbc,
- 0xcd, 0xde, 0xef, 0xf0, 0x0a, 0x1b, 0x2c, 0x3d, 0x4e, 0x5f, 0x6f, 0xba
- };
+ const char *mac = "99:88:77:66:55:44:ab:bc:cd:de:ef:f0:0a:1b:2c:3d:4e:5f:6f:ba";
gboolean success;
NMConnection *reread;
char *testfile = NULL;
@@ -2822,7 +2685,7 @@ test_write_infiniband_connection (void)
pid_t owner_grp;
uid_t owner_uid;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
g_assert (connection);
/* Connection setting */
@@ -2845,26 +2708,23 @@ test_write_infiniband_connection (void)
g_assert (s_ib);
nm_connection_add_setting (connection, NM_SETTING (s_ib));
- mac = g_byte_array_sized_new (sizeof (tmpmac));
- g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac));
g_object_set (s_ib,
NM_SETTING_INFINIBAND_MAC_ADDRESS, mac,
NM_SETTING_INFINIBAND_MTU, 900,
NM_SETTING_INFINIBAND_TRANSPORT_MODE, "datagram",
NULL);
- g_byte_array_free (mac, TRUE);
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new ();
g_assert (s_ip4);
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);
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
/* IP6 setting */
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new ();
g_assert (s_ip6);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
- g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO, NULL);
+ g_object_set (s_ip6, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO, NULL);
/* Write out the connection */
owner_uid = geteuid ();
@@ -2895,7 +2755,7 @@ test_read_bridge_main (void)
{
NMConnection *connection;
NMSettingConnection *s_con;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
NMSettingBridge *s_bridge;
GError *error = NULL;
const char *expected_id = "Test Bridge Main";
@@ -2914,16 +2774,16 @@ test_read_bridge_main (void)
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), ==, expected_uuid);
+ g_assert_cmpstr (nm_setting_connection_get_interface_name (s_con), ==, "br0");
/* 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_cmpstr (nm_setting_ip_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_AUTO);
/* Bridge setting */
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_forward_delay (s_bridge), ==, 0);
g_assert_cmpuint (nm_setting_bridge_get_stp (s_bridge), ==, TRUE);
g_assert_cmpuint (nm_setting_bridge_get_priority (s_bridge), ==, 32744);
@@ -2940,8 +2800,8 @@ test_write_bridge_main (void)
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingBridge *s_bridge;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *uuid;
gboolean success;
NMConnection *reread;
@@ -2950,7 +2810,7 @@ test_write_bridge_main (void)
pid_t owner_grp;
uid_t owner_uid;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
g_assert (connection);
/* Connection setting */
@@ -2973,26 +2833,23 @@ test_write_bridge_main (void)
g_assert (s_bridge);
nm_connection_add_setting (connection, NM_SETTING (s_bridge));
- g_object_set (s_bridge,
- NM_SETTING_BRIDGE_INTERFACE_NAME, "br0",
- NULL);
-
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new ();
g_assert (s_ip4);
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,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
+ NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
+ NM_SETTING_IP_CONFIG_GATEWAY, "1.1.1.1",
NULL);
- add_one_ip4_address (s_ip4, "1.2.3.4", "1.1.1.1", 24);
+ add_one_ip_address (s_ip4, "1.2.3.4", 24);
/* IP6 setting */
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new ();
g_assert (s_ip6);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
- g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO, NULL);
+ g_object_set (s_ip6, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO, NULL);
/* Write out the connection */
owner_uid = geteuid ();
@@ -3025,7 +2882,7 @@ test_read_bridge_component (void)
NMSettingConnection *s_con;
NMSettingBridgePort *s_port;
NMSettingWired *s_wired;
- const GByteArray *array;
+ const char *mac;
guint8 expected_mac[ETH_ALEN] = { 0x00, 0x22, 0x15, 0x59, 0x62, 0x97 };
GError *error = NULL;
const char *expected_id = "Test Bridge Component";
@@ -3050,10 +2907,9 @@ test_read_bridge_component (void)
/* Wired setting */
s_wired = nm_connection_get_setting_wired (connection);
g_assert (s_wired);
- 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);
+ mac = nm_setting_wired_get_mac_address (s_wired);
+ g_assert (mac);
+ g_assert (nm_utils_hwaddr_matches (mac, -1, expected_mac, sizeof (expected_mac)));
/* BridgePort setting */
s_port = nm_connection_get_setting_bridge_port (connection);
@@ -3073,8 +2929,7 @@ test_write_bridge_component (void)
NMSettingBridgePort *s_port;
NMSettingWired *s_wired;
char *uuid;
- GByteArray *mac;
- guint8 tmpmac[] = { 0x99, 0x88, 0x77, 0x66, 0x55, 0x44 };
+ const char *mac = "99:88:77:66:55:44";
gboolean success;
NMConnection *reread;
char *testfile = NULL;
@@ -3082,7 +2937,7 @@ test_write_bridge_component (void)
pid_t owner_grp;
uid_t owner_uid;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
g_assert (connection);
/* Connection setting */
@@ -3106,13 +2961,10 @@ test_write_bridge_component (void)
g_assert (s_wired);
nm_connection_add_setting (connection, NM_SETTING (s_wired));
- mac = g_byte_array_sized_new (ETH_ALEN);
- g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac));
g_object_set (s_wired,
NM_SETTING_WIRED_MAC_ADDRESS, mac,
NM_SETTING_WIRED_MTU, 1300,
NULL);
- g_byte_array_free (mac, TRUE);
/* BridgePort setting */
s_port = (NMSettingBridgePort *) nm_setting_bridge_port_new ();
@@ -3151,7 +3003,7 @@ test_read_new_wired_group_name (void)
{
NMConnection *connection;
NMSettingWired *s_wired;
- const GByteArray *array;
+ const char *mac;
guint8 expected_mac[ETH_ALEN] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55 };
GError *error = NULL;
gboolean success;
@@ -3168,10 +3020,9 @@ test_read_new_wired_group_name (void)
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);
+ mac = nm_setting_wired_get_mac_address (s_wired);
+ g_assert (mac);
+ g_assert (nm_utils_hwaddr_matches (mac, -1, expected_mac, sizeof (expected_mac)));
g_object_unref (connection);
}
@@ -3193,7 +3044,7 @@ test_write_new_wired_group_name (void)
char *s;
gint mtu;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
g_assert (connection);
/* Connection setting */
@@ -3227,7 +3078,7 @@ test_write_new_wired_group_name (void)
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));
+ nmtst_assert_connection_equals (connection, TRUE, reread, FALSE);
/* Look at the keyfile itself to ensure we wrote out the new group names and type */
kf = g_key_file_new ();
@@ -3257,7 +3108,9 @@ test_read_new_wireless_group_names (void)
NMConnection *connection;
NMSettingWireless *s_wifi;
NMSettingWirelessSecurity *s_wsec;
- const GByteArray *array;
+ GBytes *ssid;
+ const guint8 *ssid_data;
+ gsize ssid_len;
const char *expected_ssid = "foobar";
GError *error = NULL;
gboolean success;
@@ -3273,10 +3126,11 @@ test_read_new_wireless_group_names (void)
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);
+ ssid = nm_setting_wireless_get_ssid (s_wifi);
+ g_assert (ssid);
+ ssid_data = g_bytes_get_data (ssid, &ssid_len);
+ g_assert_cmpint (ssid_len, ==, strlen (expected_ssid));
+ g_assert_cmpint (memcmp (ssid_data, expected_ssid, ssid_len), ==, 0);
g_assert_cmpstr (nm_setting_wireless_get_mode (s_wifi), ==, NM_SETTING_WIRELESS_MODE_INFRA);
@@ -3297,7 +3151,7 @@ test_write_new_wireless_group_names (void)
NMSettingWireless *s_wifi;
NMSettingWirelessSecurity *s_wsec;
char *uuid;
- GByteArray *ssid;
+ GBytes *ssid;
unsigned char tmpssid[] = { 0x31, 0x33, 0x33, 0x37 };
const char *expected_psk = "asdfasdfasdfa12315";
gboolean success;
@@ -3309,7 +3163,7 @@ test_write_new_wireless_group_names (void)
GKeyFile *kf;
char *s;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
@@ -3328,13 +3182,12 @@ test_write_new_wireless_group_names (void)
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));
+ ssid = g_bytes_new (tmpssid, 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);
+ g_bytes_unref (ssid);
/* WiFi security setting */
s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
@@ -3357,7 +3210,7 @@ test_write_new_wireless_group_names (void)
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));
+ nmtst_assert_connection_equals (connection, TRUE, reread, FALSE);
/* Look at the keyfile itself to ensure we wrote out the new group names and type */
kf = g_key_file_new ();
@@ -3410,72 +3263,357 @@ test_read_missing_vlan_setting (void)
g_object_unref (connection);
}
+static void
+test_read_missing_id_uuid (void)
+{
+ NMConnection *connection;
+ GError *error = NULL;
+ gboolean success;
+
+ connection = nm_keyfile_plugin_connection_from_file (TEST_KEYFILES_DIR"/Test_Missing_ID_UUID", &error);
+ g_assert_no_error (error);
+ g_assert (connection);
+ success = nm_connection_verify (connection, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ /* Ensure the ID and UUID properties are there */
+ g_assert_cmpstr (nm_connection_get_id (connection), ==, "Test_Missing_ID_UUID");
+ g_assert (nm_connection_get_uuid (connection));
+
+ g_object_unref (connection);
+}
+
+static void
+test_read_minimal (void)
+{
+ NMConnection *connection = NULL;
+ gs_unref_object NMConnection *con_archetype = NULL;
+ NMSettingConnection *s_con;
+
+ con_archetype = nmtst_create_minimal_connection ("Test_minimal_x",
+ "a15bd68f-c32b-40b8-8d27-49e472a85919",
+ NM_SETTING_WIRED_SETTING_NAME,
+ &s_con);
+ nmtst_connection_normalize (con_archetype);
+
+
+ connection = keyfile_read_connection_from_file (TEST_KEYFILES_DIR"/Test_minimal_1");
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_ID, nm_connection_get_id (connection),
+ NM_SETTING_CONNECTION_UUID, nm_connection_get_uuid (connection),
+ NULL);
+ nmtst_assert_connection_equals (con_archetype, FALSE, connection, FALSE);
+ g_clear_object (&connection);
+
+
+ connection = keyfile_read_connection_from_file (TEST_KEYFILES_DIR"/Test_minimal_2");
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_ID, nm_connection_get_id (connection),
+ NM_SETTING_CONNECTION_UUID, nm_connection_get_uuid (connection),
+ NULL);
+ nmtst_assert_connection_equals (con_archetype, FALSE, connection, FALSE);
+ g_clear_object (&connection);
+}
+
+static void
+test_read_minimal_slave (void)
+{
+ NMConnection *connection = NULL;
+ gs_unref_object NMConnection *con_archetype = NULL;
+ NMSettingConnection *s_con;
+
+ con_archetype = nmtst_create_minimal_connection ("Test_minimal_slave_x",
+ "a56b4ca5-7075-43d4-82c7-5d0cb15f7654",
+ NM_SETTING_WIRED_SETTING_NAME,
+ &s_con);
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_MASTER, "br0",
+ NM_SETTING_CONNECTION_SLAVE_TYPE, "bridge",
+ NULL);
+ nmtst_connection_normalize (con_archetype);
+
+
+ connection = keyfile_read_connection_from_file (TEST_KEYFILES_DIR"/Test_minimal_slave_1");
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_ID, nm_connection_get_id (connection),
+ NM_SETTING_CONNECTION_UUID, nm_connection_get_uuid (connection),
+ NULL);
+ nmtst_assert_connection_equals (con_archetype, FALSE, connection, FALSE);
+ g_clear_object (&connection);
+
+
+ connection = keyfile_read_connection_from_file (TEST_KEYFILES_DIR"/Test_minimal_slave_2");
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_ID, nm_connection_get_id (connection),
+ NM_SETTING_CONNECTION_UUID, nm_connection_get_uuid (connection),
+ NULL);
+ nmtst_assert_connection_equals (con_archetype, FALSE, connection, FALSE);
+ g_clear_object (&connection);
+
+ connection = keyfile_read_connection_from_file (TEST_KEYFILES_DIR"/Test_minimal_slave_3");
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_ID, nm_connection_get_id (connection),
+ NM_SETTING_CONNECTION_UUID, nm_connection_get_uuid (connection),
+ NULL);
+ nmtst_assert_connection_equals (con_archetype, FALSE, connection, FALSE);
+ g_clear_object (&connection);
+
+ connection = keyfile_read_connection_from_file (TEST_KEYFILES_DIR"/Test_minimal_slave_4");
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_ID, nm_connection_get_id (connection),
+ NM_SETTING_CONNECTION_UUID, nm_connection_get_uuid (connection),
+ NULL);
+ nmtst_assert_connection_equals (con_archetype, FALSE, connection, FALSE);
+ g_clear_object (&connection);
+}
+
+static void
+test_read_enum_property (void)
+{
+ NMConnection *connection;
+ NMSettingIPConfig *s_ip6;
+ GError *error = NULL;
+ gboolean success;
+
+ connection = nm_keyfile_plugin_connection_from_file (TEST_KEYFILES_DIR"/Test_Enum_Property", &error);
+ g_assert_no_error (error);
+ g_assert (connection);
+ success = nm_connection_verify (connection, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ /* IPv6 setting */
+ s_ip6 = nm_connection_get_setting_ip6_config (connection);
+ g_assert (s_ip6);
+ g_assert_cmpint (nm_setting_ip6_config_get_ip6_privacy (NM_SETTING_IP6_CONFIG (s_ip6)), ==, NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR);
+
+ g_object_unref (connection);
+}
+
+static void
+test_write_enum_property (void)
+{
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+ NMSettingWired *s_wired;
+ NMSettingIPConfig *s_ip6;
+ char *uuid;
+ gboolean success;
+ NMConnection *reread;
+ char *testfile = NULL;
+ GError *error = NULL;
+ pid_t owner_grp;
+ uid_t owner_uid;
+
+ connection = nm_simple_connection_new ();
+
+ /* Connection setting */
+
+ s_con = NM_SETTING_CONNECTION (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 Enum Property",
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
+ NULL);
+ g_free (uuid);
+
+ /* Wired setting */
+ s_wired = NM_SETTING_WIRED (nm_setting_wired_new ());
+ nm_connection_add_setting (connection, NM_SETTING (s_wired));
+
+ /* IP6 setting */
+ s_ip6 = NM_SETTING_IP_CONFIG (nm_setting_ip6_config_new ());
+ nm_connection_add_setting (connection, NM_SETTING (s_ip6));
+ g_object_set (s_ip6,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO,
+ NM_SETTING_IP6_CONFIG_IP6_PRIVACY, NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR,
+ NULL);
+
+ nmtst_connection_normalize (connection);
+
+ /* 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);
+
+ nmtst_assert_connection_equals (reread, FALSE, connection, FALSE);
+
+ unlink (testfile);
+ g_free (testfile);
+
+ g_object_unref (reread);
+ g_object_unref (connection);
+}
+
+static void
+test_read_flags_property (void)
+{
+ NMConnection *connection;
+ NMSettingGsm *s_gsm;
+ GError *error = NULL;
+ gboolean success;
+
+ connection = nm_keyfile_plugin_connection_from_file (TEST_KEYFILES_DIR"/Test_Flags_Property", &error);
+ g_assert_no_error (error);
+ g_assert (connection);
+ success = nm_connection_verify (connection, &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ /* GSM setting */
+ s_gsm = nm_connection_get_setting_gsm (connection);
+ g_assert (s_gsm);
+ g_assert_cmpint (nm_setting_gsm_get_password_flags (s_gsm), ==,
+ NM_SETTING_SECRET_FLAG_AGENT_OWNED | NM_SETTING_SECRET_FLAG_NOT_REQUIRED);
+
+ g_object_unref (connection);
+}
+
+static void
+test_write_flags_property (void)
+{
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+ NMSetting *s_gsm;
+ char *uuid;
+ gboolean success;
+ NMConnection *reread;
+ char *testfile = NULL;
+ GError *error = NULL;
+ pid_t owner_grp;
+ uid_t owner_uid;
+
+ connection = nm_simple_connection_new ();
+
+ /* Connection setting */
+
+ s_con = NM_SETTING_CONNECTION (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 Flags Property",
+ NM_SETTING_CONNECTION_UUID, uuid,
+ NM_SETTING_CONNECTION_TYPE, NM_SETTING_GSM_SETTING_NAME,
+ NULL);
+ g_free (uuid);
+
+ /* GSM setting */
+ s_gsm = nm_setting_gsm_new ();
+ nm_connection_add_setting (connection, s_gsm);
+ g_object_set (s_gsm,
+ NM_SETTING_GSM_NUMBER, "#99*",
+ NM_SETTING_GSM_APN, "myapn",
+ NM_SETTING_GSM_USERNAME, "adfasdfasdf",
+ NM_SETTING_GSM_PASSWORD_FLAGS, NM_SETTING_SECRET_FLAG_NOT_SAVED | NM_SETTING_SECRET_FLAG_NOT_REQUIRED,
+ NULL);
+
+ nmtst_connection_normalize (connection);
+
+ /* 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);
+
+ nmtst_assert_connection_equals (reread, FALSE, connection, FALSE);
+
+ unlink (testfile);
+ g_free (testfile);
+
+ g_object_unref (reread);
+ g_object_unref (connection);
+}
+
NMTST_DEFINE ();
int main (int argc, char **argv)
{
- char *base;
-
nmtst_init_assert_logging (&argc, &argv);
/* The tests */
- test_read_valid_wired_connection ();
- test_write_wired_connection ();
+ g_test_add_func ("/keyfile/test_read_valid_wired_connection ", test_read_valid_wired_connection);
+ g_test_add_func ("/keyfile/test_write_wired_connection ", test_write_wired_connection);
+
+ g_test_add_func ("/keyfile/test_read_ip6_wired_connection ", test_read_ip6_wired_connection);
+ g_test_add_func ("/keyfile/test_write_ip6_wired_connection ", test_write_ip6_wired_connection);
+
+ g_test_add_func ("/keyfile/test_read_wired_mac_case ", test_read_wired_mac_case);
+ g_test_add_func ("/keyfile/test_read_mac_old_format ", test_read_mac_old_format);
+ g_test_add_func ("/keyfile/test_read_mac_ib_old_format ", test_read_mac_ib_old_format);
- test_read_ip6_wired_connection ();
- test_write_ip6_wired_connection ();
+ g_test_add_func ("/keyfile/test_read_valid_wireless_connection ", test_read_valid_wireless_connection);
+ g_test_add_func ("/keyfile/test_write_wireless_connection ", test_write_wireless_connection);
- test_read_wired_mac_case ();
- test_read_mac_old_format ();
- test_read_mac_ib_old_format ();
+ g_test_add_func ("/keyfile/test_read_string_ssid ", test_read_string_ssid);
+ g_test_add_func ("/keyfile/test_write_string_ssid ", test_write_string_ssid);
- test_read_valid_wireless_connection ();
- test_write_wireless_connection ();
+ g_test_add_func ("/keyfile/test_read_intlist_ssid ", test_read_intlist_ssid);
+ g_test_add_func ("/keyfile/test_write_intlist_ssid ", test_write_intlist_ssid);
- test_read_string_ssid ();
- test_write_string_ssid ();
+ g_test_add_func ("/keyfile/test_read_intlike_ssid ", test_read_intlike_ssid);
+ g_test_add_func ("/keyfile/test_write_intlike_ssid ", test_write_intlike_ssid);
- test_read_intlist_ssid ();
- test_write_intlist_ssid ();
+ g_test_add_func ("/keyfile/test_read_intlike_ssid_2 ", test_read_intlike_ssid_2);
+ g_test_add_func ("/keyfile/test_write_intlike_ssid_2 ", test_write_intlike_ssid_2);
- test_read_intlike_ssid ();
- test_write_intlike_ssid ();
+ g_test_add_func ("/keyfile/test_read_bt_dun_connection ", test_read_bt_dun_connection);
+ g_test_add_func ("/keyfile/test_write_bt_dun_connection ", test_write_bt_dun_connection);
- test_read_intlike_ssid_2 ();
- test_write_intlike_ssid_2 ();
+ g_test_add_func ("/keyfile/test_read_gsm_connection ", test_read_gsm_connection);
+ g_test_add_func ("/keyfile/test_write_gsm_connection ", test_write_gsm_connection);
- test_read_bt_dun_connection ();
- test_write_bt_dun_connection ();
+ g_test_add_func ("/keyfile/test_read_wired_8021x_tls_blob_connection ", test_read_wired_8021x_tls_blob_connection);
+ g_test_add_func ("/keyfile/test_read_wired_8021x_tls_bad_path_connection ", test_read_wired_8021x_tls_bad_path_connection);
- test_read_gsm_connection ();
- test_write_gsm_connection ();
+ g_test_add_func ("/keyfile/test_read_wired_8021x_tls_old_connection ", test_read_wired_8021x_tls_old_connection);
+ g_test_add_func ("/keyfile/test_read_wired_8021x_tls_new_connection ", test_read_wired_8021x_tls_new_connection);
+ g_test_add_func ("/keyfile/test_write_wired_8021x_tls_connection_path ", test_write_wired_8021x_tls_connection_path);
+ g_test_add_func ("/keyfile/test_write_wired_8021x_tls_connection_blob ", test_write_wired_8021x_tls_connection_blob);
- test_read_wired_8021x_tls_blob_connection ();
- test_read_wired_8021x_tls_bad_path_connection ();
+ g_test_add_func ("/keyfile/test_read_infiniband_connection ", test_read_infiniband_connection);
+ g_test_add_func ("/keyfile/test_write_infiniband_connection ", test_write_infiniband_connection);
- test_read_wired_8021x_tls_old_connection ();
- test_read_wired_8021x_tls_new_connection ();
- test_write_wired_8021x_tls_connection_path ();
- test_write_wired_8021x_tls_connection_blob ();
+ g_test_add_func ("/keyfile/test_read_bridge_main ", test_read_bridge_main);
+ g_test_add_func ("/keyfile/test_write_bridge_main ", test_write_bridge_main);
+ g_test_add_func ("/keyfile/test_read_bridge_component ", test_read_bridge_component);
+ g_test_add_func ("/keyfile/test_write_bridge_component ", test_write_bridge_component);
- test_read_infiniband_connection ();
- test_write_infiniband_connection ();
+ g_test_add_func ("/keyfile/test_read_new_wired_group_name ", test_read_new_wired_group_name);
+ g_test_add_func ("/keyfile/test_write_new_wired_group_name ", test_write_new_wired_group_name);
+ g_test_add_func ("/keyfile/test_read_new_wireless_group_names ", test_read_new_wireless_group_names);
+ g_test_add_func ("/keyfile/test_write_new_wireless_group_names ", test_write_new_wireless_group_names);
- test_read_bridge_main ();
- test_write_bridge_main ();
- test_read_bridge_component ();
- test_write_bridge_component ();
+ g_test_add_func ("/keyfile/test_read_missing_vlan_setting ", test_read_missing_vlan_setting);
+ g_test_add_func ("/keyfile/test_read_missing_id_uuid ", test_read_missing_id_uuid);
- test_read_new_wired_group_name ();
- test_write_new_wired_group_name ();
- test_read_new_wireless_group_names ();
- test_write_new_wireless_group_names ();
+ g_test_add_func ("/keyfile/test_read_minimal", test_read_minimal);
+ g_test_add_func ("/keyfile/test_read_minimal_slave", test_read_minimal_slave);
- test_read_missing_vlan_setting ();
+ g_test_add_func ("/keyfile/test_read_enum_property ", test_read_enum_property);
+ g_test_add_func ("/keyfile/test_write_enum_property ", test_write_enum_property);
+ g_test_add_func ("/keyfile/test_read_flags_property ", test_read_flags_property);
+ g_test_add_func ("/keyfile/test_write_flags_property ", test_write_flags_property);
- 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/keyfile/utils.c b/src/settings/plugins/keyfile/utils.c
index e2bfc38c1..3361d5544 100644
--- a/src/settings/plugins/keyfile/utils.c
+++ b/src/settings/plugins/keyfile/utils.c
@@ -18,6 +18,8 @@
* (C) Copyright 2010 Red Hat, Inc.
*/
+#include "config.h"
+
#include <glib.h>
#include <stdlib.h>
#include <string.h>
@@ -229,6 +231,7 @@ nm_keyfile_plugin_kf_set_##stype (GKeyFile *kf, \
DEFINE_KF_WRAPPER(string, gchar*, const gchar*);
DEFINE_KF_WRAPPER(integer, gint, gint);
+DEFINE_KF_WRAPPER(uint64, guint64, guint64);
DEFINE_KF_WRAPPER(boolean, gboolean, gboolean);
DEFINE_KF_WRAPPER(value, gchar*, const gchar*);
diff --git a/src/settings/plugins/keyfile/utils.h b/src/settings/plugins/keyfile/utils.h
index 9a2e485bc..1a7c2502b 100644
--- a/src/settings/plugins/keyfile/utils.h
+++ b/src/settings/plugins/keyfile/utils.h
@@ -61,6 +61,7 @@ void nm_keyfile_plugin_kf_set_##stype (GKeyFile *kf, \
set_ctype value);
DEFINE_KF_WRAPPER_PROTO(string, gchar*, const gchar*)
DEFINE_KF_WRAPPER_PROTO(integer, gint, gint)
+DEFINE_KF_WRAPPER_PROTO(uint64, guint64, guint64)
DEFINE_KF_WRAPPER_PROTO(boolean, gboolean, gboolean)
DEFINE_KF_WRAPPER_PROTO(value, gchar*, const gchar*)
diff --git a/src/settings/plugins/keyfile/writer.c b/src/settings/plugins/keyfile/writer.c
index 5f3ebe25f..d342e3f7e 100644
--- a/src/settings/plugins/keyfile/writer.c
+++ b/src/settings/plugins/keyfile/writer.c
@@ -19,7 +19,8 @@
* Copyright (C) 2008 - 2012 Red Hat, Inc.
*/
-#include <config.h>
+#include "config.h"
+
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
@@ -40,7 +41,6 @@
#include <nm-utils.h>
#include <string.h>
#include <arpa/inet.h>
-#include <netinet/ether.h>
#include "nm-dbus-glib-types.h"
#include "nm-glib-compat.h"
@@ -98,75 +98,77 @@ write_array_of_uint (GKeyFile *file,
}
static void
-ip4_dns_writer (GKeyFile *file,
- const char *keyfile_dir,
- const char *uuid,
- NMSetting *setting,
- const char *key,
- const GValue *value)
+dns_writer (GKeyFile *file,
+ const char *keyfile_dir,
+ const char *uuid,
+ NMSetting *setting,
+ const char *key,
+ const GValue *value)
{
- GArray *array;
char **list;
- int i, num = 0;
- g_return_if_fail (G_VALUE_HOLDS (value, DBUS_TYPE_G_UINT_ARRAY));
-
- array = (GArray *) g_value_get_boxed (value);
- if (!array || !array->len)
- return;
-
- list = g_new0 (char *, array->len + 1);
-
- for (i = 0; i < array->len; i++) {
- 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;
+ list = g_value_get_boxed (value);
+ if (list && list[0]) {
+ nm_keyfile_plugin_kf_set_string_list (file, nm_setting_get_name (setting), key,
+ (const char **) list, g_strv_length (list));
}
-
- 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,
- GPtrArray *array,
- gboolean is_route)
+write_ip_values (GKeyFile *file,
+ const char *setting_name,
+ GPtrArray *array,
+ const char *gateway,
+ gboolean is_route)
{
GString *output;
- int i;
- guint32 addr, gw, plen, metric;
+ int family, i;
+ const char *addr, *gw;
+ guint32 plen, metric;
char key_name[30], *key_name_idx;
if (!array->len)
return;
+ family = !strcmp (setting_name, NM_SETTING_IP4_CONFIG_SETTING_NAME) ? AF_INET : AF_INET6;
+
strcpy (key_name, is_route ? "route" : "address");
key_name_idx = key_name + strlen (key_name);
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 (is_route) {
+ NMIPRoute *route = array->pdata[i];
+
+ addr = nm_ip_route_get_dest (route);
+ plen = nm_ip_route_get_prefix (route);
+ gw = nm_ip_route_get_next_hop (route);
+ metric = MAX (0, nm_ip_route_get_metric (route));
+ } else {
+ NMIPAddress *address = array->pdata[i];
- 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;
+ addr = nm_ip_address_get_address (address);
+ plen = nm_ip_address_get_prefix (address);
+ gw = i == 0 ? gateway : NULL;
+ metric = 0;
+ }
g_string_set_size (output, 0);
- g_string_append_printf (output, "%s/%u",
- nm_utils_inet4_ntop (addr, NULL),
- (unsigned) plen);
+ g_string_append_printf (output, "%s/%u", addr, 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));
+ * gateway, even if there isn't one.
+ * The current version supports reading of the above form.
+ */
+ if (!gw) {
+ if (family == AF_INET)
+ gw = "0.0.0.0";
+ else
+ gw = "::";
+ }
+
+ g_string_append_printf (output, ",%s", gw);
if (metric)
g_string_append_printf (output, ",%lu", (unsigned long) metric);
}
@@ -178,21 +180,20 @@ write_ip4_values (GKeyFile *file,
}
static void
-ip4_addr_writer (GKeyFile *file,
- const char *keyfile_dir,
- const char *uuid,
- NMSetting *setting,
- const char *key,
- const GValue *value)
+addr_writer (GKeyFile *file,
+ const char *keyfile_dir,
+ const char *uuid,
+ NMSetting *setting,
+ const char *key,
+ const GValue *value)
{
GPtrArray *array;
const char *setting_name = nm_setting_get_name (setting);
-
- g_return_if_fail (G_VALUE_HOLDS (value, DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UINT));
+ const char *gateway = nm_setting_ip_config_get_gateway (NM_SETTING_IP_CONFIG (setting));
array = (GPtrArray *) g_value_get_boxed (value);
if (array && array->len)
- write_ip4_values (file, setting_name, array, FALSE);
+ write_ip_values (file, setting_name, array, gateway, FALSE);
}
static void
@@ -207,223 +208,30 @@ ip4_addr_label_writer (GKeyFile *file,
}
static void
-ip4_route_writer (GKeyFile *file,
- const char *keyfile_dir,
- const char *uuid,
- NMSetting *setting,
- const char *key,
- const GValue *value)
-{
- GPtrArray *array;
- const char *setting_name = nm_setting_get_name (setting);
-
- g_return_if_fail (G_VALUE_HOLDS (value, DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UINT));
-
- array = (GPtrArray *) g_value_get_boxed (value);
- if (array && array->len)
- write_ip4_values (file, setting_name, array, TRUE);
-}
-
-static void
-ip6_dns_writer (GKeyFile *file,
+gateway_writer (GKeyFile *file,
const char *keyfile_dir,
const char *uuid,
NMSetting *setting,
const char *key,
const GValue *value)
{
- GPtrArray *array;
- GByteArray *byte_array;
- char **list;
- int i, num = 0;
-
- g_return_if_fail (G_VALUE_HOLDS (value, DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UCHAR));
-
- array = (GPtrArray *) g_value_get_boxed (value);
- if (!array || !array->len)
- return;
-
- list = g_new0 (char *, array->len + 1);
-
- for (i = 0; i < array->len; i++) {
- char *buf = g_new (char, INET6_ADDRSTRLEN);
-
- byte_array = g_ptr_array_index (array, i);
- nm_utils_inet6_ntop ((const struct in6_addr *) byte_array->data, buf);
- list[num++] = buf;
- }
-
- nm_keyfile_plugin_kf_set_string_list (file, nm_setting_get_name (setting), key, (const char **) list, num);
- g_strfreev (list);
-}
-
-static void
-ip6_array_to_addr (GValueArray *values,
- guint32 idx,
- char *buf,
- struct in6_addr *out_addr)
-{
- GByteArray *byte_array;
- GValue *addr_val;
- const struct in6_addr *addr;
-
- addr_val = g_value_array_get_nth (values, idx);
- byte_array = g_value_get_boxed (addr_val);
- addr = (const struct in6_addr *) byte_array->data;
-
- nm_utils_inet6_ntop (addr, buf);
-
- if (out_addr)
- *out_addr = *addr;
-}
-
-static char *
-ip6_array_to_addr_prefix (GValueArray *values, gboolean force_write_gateway)
-{
- GValue *prefix_val;
- char *ret = NULL;
- GString *ip6_str;
- char buf[INET6_ADDRSTRLEN];
- struct in6_addr addr;
-
- /* address */
- ip6_array_to_addr (values, 0, 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));
-
- 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;
-}
-
-static void
-ip6_addr_writer (GKeyFile *file,
- const char *keyfile_dir,
- const char *uuid,
- NMSetting *setting,
- const char *key,
- const GValue *value)
-{
- GPtrArray *array;
- const char *setting_name = nm_setting_get_name (setting);
- int i, j;
-
- g_return_if_fail (G_VALUE_HOLDS (value, DBUS_TYPE_G_ARRAY_OF_IP6_ADDRESS));
-
- array = (GPtrArray *) g_value_get_boxed (value);
- if (!array || !array->len)
- return;
-
- for (i = 0, j = 1; i < array->len; i++) {
- GValueArray *values = g_ptr_array_index (array, i);
- char *key_name, *ip6_addr;
-
- if (values->n_values != 3) {
- nm_log_warn (LOGD_SETTINGS, "%s: error writing IP6 address %d (address array "
- "length %d is not 3)", __func__, i, values->n_values);
- continue;
- }
-
- /* 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);
- }
+ /* skip */
}
static void
-ip6_route_writer (GKeyFile *file,
- const char *keyfile_dir,
- const char *uuid,
- NMSetting *setting,
- const char *key,
- const GValue *value)
+route_writer (GKeyFile *file,
+ const char *keyfile_dir,
+ const char *uuid,
+ NMSetting *setting,
+ const char *key,
+ const GValue *value)
{
GPtrArray *array;
const char *setting_name = nm_setting_get_name (setting);
- GString *output;
- int i, j;
-
- g_return_if_fail (G_VALUE_HOLDS (value, DBUS_TYPE_G_ARRAY_OF_IP6_ROUTE));
array = (GPtrArray *) g_value_get_boxed (value);
- if (!array || !array->len)
- return;
-
- for (i = 0, j = 1; i < array->len; i++) {
- GValueArray *values = g_ptr_array_index (array, i);
- char *key_name;
- char *addr_str;
- guint metric;
-
- output = g_string_new ("");
-
- /* Metric */
- value = g_value_array_get_nth (values, 3);
- 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++);
- nm_keyfile_plugin_kf_set_string (file, setting_name, key_name, output->str);
- g_free (key_name);
-
- g_string_free (output, TRUE);
- }
-}
-
-
-static void
-mac_address_writer (GKeyFile *file,
- const char *keyfile_dir,
- const char *uuid,
- NMSetting *setting,
- const char *key,
- const GValue *value)
-{
- GByteArray *array;
- const char *setting_name = nm_setting_get_name (setting);
- char *mac;
-
- g_return_if_fail (G_VALUE_HOLDS (value, DBUS_TYPE_G_UCHAR_ARRAY));
-
- array = (GByteArray *) g_value_get_boxed (value);
- if (!array || !array->len)
- return;
-
- mac = nm_utils_hwaddr_ntoa_len (array->data, array->len);
- nm_keyfile_plugin_kf_set_string (file, setting_name, key, mac);
- g_free (mac);
+ if (array && array->len)
+ write_ip_values (file, setting_name, array, NULL, TRUE);
}
static void
@@ -472,24 +280,29 @@ ssid_writer (GKeyFile *file,
const char *key,
const GValue *value)
{
- GByteArray *array;
+ GBytes *bytes;
+ const guint8 *ssid_data;
+ gsize ssid_len;
const char *setting_name = nm_setting_get_name (setting);
gboolean new_format = TRUE;
unsigned int semicolons = 0;
int i, *tmp_array;
char *ssid;
- g_return_if_fail (G_VALUE_HOLDS (value, DBUS_TYPE_G_UCHAR_ARRAY));
+ g_return_if_fail (G_VALUE_HOLDS (value, G_TYPE_BYTES));
- array = (GByteArray *) g_value_get_boxed (value);
- if (!array || !array->len)
+ bytes = g_value_get_boxed (value);
+ if (!bytes)
+ return;
+ ssid_data = g_bytes_get_data (bytes, &ssid_len);
+ if (ssid_len == 0)
return;
/* Check whether each byte is printable. If not, we have to use an
* integer list, otherwise we can just use a string.
*/
- for (i = 0; i < array->len; i++) {
- char c = array->data[i] & 0xFF;
+ for (i = 0; i < ssid_len; i++) {
+ char c = ssid_data[i] & 0xFF;
if (!g_ascii_isprint (c)) {
new_format = FALSE;
break;
@@ -499,26 +312,26 @@ ssid_writer (GKeyFile *file,
}
if (new_format) {
- ssid = g_malloc0 (array->len + semicolons + 1);
+ ssid = g_malloc0 (ssid_len + semicolons + 1);
if (semicolons == 0)
- memcpy (ssid, array->data, array->len);
+ memcpy (ssid, ssid_data, ssid_len);
else {
/* Escape semicolons with backslashes to make strings
* containing ';', such as '16;17;' unambiguous */
int j = 0;
- for (i = 0; i < array->len; i++) {
- if (array->data[i] == ';')
+ for (i = 0; i < ssid_len; i++) {
+ if (ssid_data[i] == ';')
ssid[j++] = '\\';
- ssid[j++] = array->data[i];
+ ssid[j++] = ssid_data[i];
}
}
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];
- nm_keyfile_plugin_kf_set_integer_list (file, setting_name, key, tmp_array, array->len);
+ tmp_array = g_new (gint, ssid_len);
+ for (i = 0; i < ssid_len; i++)
+ tmp_array[i] = (int) ssid_data[i];
+ nm_keyfile_plugin_kf_set_integer_list (file, setting_name, key, tmp_array, ssid_len);
g_free (tmp_array);
}
}
@@ -555,7 +368,7 @@ typedef struct ObjectType {
NMSetting8021xCKScheme (*scheme_func) (NMSetting8021x *setting);
NMSetting8021xCKFormat (*format_func) (NMSetting8021x *setting);
const char * (*path_func) (NMSetting8021x *setting);
- const GByteArray * (*blob_func) (NMSetting8021x *setting);
+ GBytes * (*blob_func) (NMSetting8021x *setting);
} ObjectType;
static const ObjectType objtypes[10] = {
@@ -612,7 +425,8 @@ static const ObjectType objtypes[10] = {
static gboolean
write_cert_key_file (const char *path,
- const GByteArray *data,
+ const guint8 *data,
+ gsize data_len,
GError **error)
{
char *tmppath;
@@ -627,7 +441,7 @@ write_cert_key_file (const char *path,
errno = 0;
fd = mkstemp (tmppath);
if (fd < 0) {
- g_set_error (error, KEYFILE_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"Could not create temporary file for '%s': %d",
path, errno);
goto out;
@@ -638,18 +452,18 @@ write_cert_key_file (const char *path,
if (fchmod (fd, S_IRUSR | S_IWUSR) != 0) {
close (fd);
unlink (tmppath);
- g_set_error (error, KEYFILE_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"Could not set permissions for temporary file '%s': %d",
path, errno);
goto out;
}
errno = 0;
- written = write (fd, data->data, data->len);
- if (written != data->len) {
+ written = write (fd, data, data_len);
+ if (written != data_len) {
close (fd);
unlink (tmppath);
- g_set_error (error, KEYFILE_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"Could not write temporary file for '%s': %d",
path, errno);
goto out;
@@ -662,7 +476,7 @@ write_cert_key_file (const char *path,
success = TRUE;
else {
unlink (tmppath);
- g_set_error (error, KEYFILE_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"Could not rename temporary file to '%s': %d",
path, errno);
}
@@ -714,13 +528,16 @@ cert_writer (GKeyFile *file,
nm_keyfile_plugin_kf_set_string (file, setting_name, key, path);
} else if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) {
- const GByteArray *blob;
+ GBytes *blob;
+ const guint8 *blob_data;
+ gsize blob_len;
gboolean success;
GError *error = NULL;
char *new_path;
blob = objtype->blob_func (NM_SETTING_802_1X (setting));
g_assert (blob);
+ blob_data = g_bytes_get_data (blob, &blob_len);
if (objtype->format_func) {
/* Get the extension for a private key */
@@ -729,7 +546,7 @@ cert_writer (GKeyFile *file,
ext = "p12";
} else {
/* DER or PEM format certificate? */
- if (blob->len > 2 && blob->data[0] == 0x30 && blob->data[1] == 0x82)
+ if (blob_len > 2 && blob_data[0] == 0x30 && blob_data[1] == 0x82)
ext = "der";
}
@@ -739,7 +556,7 @@ cert_writer (GKeyFile *file,
new_path = g_strdup_printf ("%s/%s-%s.%s", keyfile_dir, uuid, objtype->suffix, ext);
g_assert (new_path);
- success = write_cert_key_file (new_path, blob, &error);
+ success = write_cert_key_file (new_path, blob_data, blob_len, &error);
if (success) {
/* Write the path value to the keyfile */
nm_keyfile_plugin_kf_set_string (file, setting_name, key, new_path);
@@ -774,54 +591,33 @@ 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_IP_CONFIG_ADDRESSES,
+ 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 },
+ NM_SETTING_IP_CONFIG_ADDRESSES,
+ addr_writer },
{ NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_ROUTES,
- ip4_route_writer },
+ NM_SETTING_IP_CONFIG_GATEWAY,
+ gateway_writer },
{ NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_ROUTES,
- ip6_route_writer },
+ NM_SETTING_IP_CONFIG_GATEWAY,
+ gateway_writer },
{ NM_SETTING_IP4_CONFIG_SETTING_NAME,
- NM_SETTING_IP4_CONFIG_DNS,
- ip4_dns_writer },
+ NM_SETTING_IP_CONFIG_ROUTES,
+ route_writer },
{ NM_SETTING_IP6_CONFIG_SETTING_NAME,
- NM_SETTING_IP6_CONFIG_DNS,
- ip6_dns_writer },
- { NM_SETTING_WIRED_SETTING_NAME,
- NM_SETTING_WIRED_MAC_ADDRESS,
- mac_address_writer },
- { NM_SETTING_WIRED_SETTING_NAME,
- NM_SETTING_WIRED_CLONED_MAC_ADDRESS,
- mac_address_writer },
- { NM_SETTING_WIRELESS_SETTING_NAME,
- NM_SETTING_WIRELESS_MAC_ADDRESS,
- mac_address_writer },
- { NM_SETTING_WIRELESS_SETTING_NAME,
- NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS,
- mac_address_writer },
- { NM_SETTING_WIRELESS_SETTING_NAME,
- NM_SETTING_WIRELESS_BSSID,
- mac_address_writer },
- { NM_SETTING_BLUETOOTH_SETTING_NAME,
- NM_SETTING_BLUETOOTH_BDADDR,
- mac_address_writer },
- { NM_SETTING_INFINIBAND_SETTING_NAME,
- NM_SETTING_INFINIBAND_MAC_ADDRESS,
- mac_address_writer },
- { NM_SETTING_WIMAX_SETTING_NAME,
- NM_SETTING_WIMAX_MAC_ADDRESS,
- mac_address_writer },
+ NM_SETTING_IP_CONFIG_ROUTES,
+ route_writer },
+ { NM_SETTING_IP4_CONFIG_SETTING_NAME,
+ NM_SETTING_IP_CONFIG_DNS,
+ dns_writer },
+ { NM_SETTING_IP6_CONFIG_SETTING_NAME,
+ NM_SETTING_IP_CONFIG_DNS,
+ dns_writer },
{ NM_SETTING_WIRELESS_SETTING_NAME,
NM_SETTING_WIRELESS_SSID,
ssid_writer },
@@ -896,7 +692,8 @@ write_setting_value (NMSetting *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);
+ if (!nm_setting_get_secret_flags (setting, key, &secret_flags, NULL))
+ g_assert_not_reached ();
if (secret_flags != NM_SETTING_SECRET_FLAG_NONE)
return;
}
@@ -926,49 +723,53 @@ write_setting_value (NMSetting *setting,
numstr = g_strdup_printf ("%" G_GUINT64_FORMAT, g_value_get_uint64 (value));
nm_keyfile_plugin_kf_set_value (info->keyfile, setting_name, key, numstr);
g_free (numstr);
+ } else if (type == G_TYPE_INT64) {
+ char *numstr;
+
+ numstr = g_strdup_printf ("%" G_GINT64_FORMAT, g_value_get_int64 (value));
+ nm_keyfile_plugin_kf_set_value (info->keyfile, setting_name, key, numstr);
+ g_free (numstr);
} else if (type == G_TYPE_BOOLEAN) {
nm_keyfile_plugin_kf_set_boolean (info->keyfile, setting_name, key, g_value_get_boolean (value));
} else if (type == G_TYPE_CHAR) {
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;
+ } else if (type == G_TYPE_BYTES) {
+ GBytes *bytes;
+ const guint8 *data;
+ gsize len = 0;
- array = (GByteArray *) g_value_get_boxed (value);
- if (array && array->len > 0) {
+ bytes = g_value_get_boxed (value);
+ data = bytes ? g_bytes_get_data (bytes, &len) : NULL;
+
+ if (data != NULL && len > 0) {
int *tmp_array;
int i;
- tmp_array = g_new (gint, array->len);
- for (i = 0; i < array->len; i++)
- tmp_array[i] = (int) array->data[i];
+ tmp_array = g_new (gint, len);
+ for (i = 0; i < len; i++)
+ tmp_array[i] = (int) data[i];
- nm_keyfile_plugin_kf_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, len);
g_free (tmp_array);
}
- } else if (type == DBUS_TYPE_G_LIST_OF_STRING) {
- GSList *list;
- GSList *iter;
-
- list = (GSList *) g_value_get_boxed (value);
- if (list) {
- char **array;
- int i = 0;
+ } else if (type == G_TYPE_STRV) {
+ char **array;
- array = g_new (char *, g_slist_length (list));
- for (iter = list; iter; iter = iter->next)
- array[i++] = iter->data;
-
- 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) {
+ array = (char **) g_value_get_boxed (value);
+ nm_keyfile_plugin_kf_set_string_list (info->keyfile, setting_name, key, (const gchar **const) array, g_strv_length (array));
+ } else if (type == G_TYPE_HASH_TABLE) {
write_hash_of_string (info->keyfile, setting, key, value);
- } else if (type == DBUS_TYPE_G_UINT_ARRAY) {
+ } else if (type == G_TYPE_ARRAY) {
if (!write_array_of_uint (info->keyfile, setting, key, value)) {
nm_log_warn (LOGD_SETTINGS, "Unhandled setting property type (write) '%s/%s' : '%s'",
setting_name, key, g_type_name (type));
}
- } else {
+ } else if (G_VALUE_HOLDS_FLAGS (value)) {
+ /* Flags are guint but GKeyFile has no uint reader, just uint64 */
+ nm_keyfile_plugin_kf_set_uint64 (info->keyfile, setting_name, key, (guint64) g_value_get_flags (value));
+ } else if (G_VALUE_HOLDS_ENUM (value))
+ nm_keyfile_plugin_kf_set_integer (info->keyfile, setting_name, key, (gint) g_value_get_enum (value));
+ else {
nm_log_warn (LOGD_SETTINGS, "Unhandled setting property type (write) '%s/%s' : '%s'",
setting_name, key, g_type_name (type));
}
@@ -1021,11 +822,7 @@ _internal_write_connection (NMConnection *connection,
}
id = nm_connection_get_id (connection);
- if (!id) {
- g_set_error (error, KEYFILE_PLUGIN_ERROR, 0,
- "%s.%d: connection had no ID", __FILE__, __LINE__);
- return FALSE;
- }
+ g_assert (id && *id);
info.keyfile = key_file = g_key_file_new ();
info.keyfile_dir = keyfile_dir;
@@ -1065,7 +862,7 @@ _internal_write_connection (NMConnection *connection,
* is edited to contain the same ID as the other one.
* Give up.
*/
- g_set_error (error, KEYFILE_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"%s.%d: could not find suitable keyfile file name (%s already used)",
__FILE__, __LINE__, path);
g_free (path);
@@ -1082,7 +879,7 @@ _internal_write_connection (NMConnection *connection,
g_file_set_contents (path, data, len, &local_err);
if (local_err) {
- g_set_error (error, KEYFILE_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"%s.%d: error writing to file '%s': %s", __FILE__, __LINE__,
path, local_err->message);
g_error_free (local_err);
@@ -1091,13 +888,13 @@ _internal_write_connection (NMConnection *connection,
}
if (chown (path, owner_uid, owner_grp) < 0) {
- g_set_error (error, KEYFILE_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"%s.%d: error chowning '%s': %d", __FILE__, __LINE__,
path, errno);
unlink (path);
} else {
if (chmod (path, S_IRUSR | S_IWUSR) < 0) {
- g_set_error (error, KEYFILE_PLUGIN_ERROR, 0,
+ g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
"%s.%d: error setting permissions on '%s': %d", __FILE__,
__LINE__, path, errno);
unlink (path);
diff --git a/src/settings/tests/Makefile.am b/src/settings/tests/Makefile.am
deleted file mode 100644
index 4115d4bad..000000000
--- a/src/settings/tests/Makefile.am
+++ /dev/null
@@ -1,23 +0,0 @@
-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)
-
-noinst_PROGRAMS = \
- test-wired-defname
-
-####### wired defname test #######
-
-test_wired_defname_SOURCES = \
- test-wired-defname.c
-
-test_wired_defname_LDADD = \
- $(top_builddir)/src/libNetworkManager.la
-
-###########################################
-
-TESTS = test-wired-defname
diff --git a/src/supplicant-manager/nm-call-store.c b/src/supplicant-manager/nm-call-store.c
index 4b427549d..6e910a96b 100644
--- a/src/supplicant-manager/nm-call-store.c
+++ b/src/supplicant-manager/nm-call-store.c
@@ -19,6 +19,8 @@
* Copyright (C) 2010 Red Hat, Inc.
*/
+#include "config.h"
+
#include "nm-call-store.h"
#include "nm-logging.h"
@@ -44,7 +46,13 @@ nm_call_store_add (NMCallStore *store,
g_return_if_fail (store != NULL);
g_return_if_fail (proxy != NULL);
- g_return_if_fail (call != NULL);
+
+ if (!call) {
+ /* Allow calling nm_call_store_add() with NULL @call for convenience.
+ * This way you can pass the result of dbus_g_proxy_begin_call() directly
+ * to nm_call_store_add() without checking for NULL. */
+ return;
+ }
calls = g_hash_table_lookup (store, proxy);
if (!calls) {
diff --git a/src/supplicant-manager/nm-call-store.h b/src/supplicant-manager/nm-call-store.h
index b24c97a46..bcee54cfb 100644
--- a/src/supplicant-manager/nm-call-store.h
+++ b/src/supplicant-manager/nm-call-store.h
@@ -18,8 +18,8 @@
* (C) Copyright 2007 Novell, Inc.
*/
-#ifndef NM_CALLBACK_STORE_H
-#define NM_CALLBACK_STORE_H
+#ifndef __NETWORKMANAGER_CALLBACK_STORE_H__
+#define __NETWORKMANAGER_CALLBACK_STORE_H__
#include <glib-object.h>
#include <dbus/dbus-glib.h>
@@ -38,4 +38,4 @@ void nm_call_store_remove (NMCallStore *store,
void nm_call_store_clear (NMCallStore *store);
void nm_call_store_destroy (NMCallStore *store);
-#endif /* NM_CALLBACK_STORE_H */
+#endif /* __NETWORKMANAGER_CALLBACK_STORE_H__ */
diff --git a/src/supplicant-manager/nm-supplicant-config.c b/src/supplicant-manager/nm-supplicant-config.c
index 438b436eb..9ae870955 100644
--- a/src/supplicant-manager/nm-supplicant-config.c
+++ b/src/supplicant-manager/nm-supplicant-config.c
@@ -19,14 +19,11 @@
* Copyright (C) 2007 - 2008 Novell, Inc.
*/
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
+#include "config.h"
#include <string.h>
#include <stdlib.h>
#include <glib.h>
-#include <netinet/ether.h>
#include <dbus/dbus-glib.h>
#include "nm-supplicant-config.h"
@@ -166,7 +163,7 @@ nm_supplicant_config_add_option (NMSupplicantConfig *self,
static gboolean
nm_supplicant_config_add_blob (NMSupplicantConfig *self,
const char *key,
- const GByteArray *value,
+ GBytes *value,
const char *blobid)
{
NMSupplicantConfigPrivate *priv;
@@ -174,16 +171,20 @@ nm_supplicant_config_add_blob (NMSupplicantConfig *self,
ConfigOption *opt;
OptType type;
GByteArray *blob;
+ const guint8 *data;
+ gsize data_len;
g_return_val_if_fail (NM_IS_SUPPLICANT_CONFIG (self), FALSE);
g_return_val_if_fail (key != NULL, FALSE);
g_return_val_if_fail (value != NULL, FALSE);
- g_return_val_if_fail (value->len > 0, FALSE);
g_return_val_if_fail (blobid != NULL, FALSE);
+ data = g_bytes_get_data (value, &data_len);
+ g_return_val_if_fail (data_len > 0, FALSE);
+
priv = NM_SUPPLICANT_CONFIG_GET_PRIVATE (self);
- type = nm_supplicant_settings_verify_setting (key, (const char *) value->data, value->len);
+ type = nm_supplicant_settings_verify_setting (key, (const char *) data, data_len);
if (type == TYPE_INVALID) {
nm_log_warn (LOGD_SUPPLICANT, "Key '%s' and/or it's contained value is invalid.", key);
return FALSE;
@@ -195,8 +196,8 @@ nm_supplicant_config_add_blob (NMSupplicantConfig *self,
return FALSE;
}
- blob = g_byte_array_sized_new (value->len);
- g_byte_array_append (blob, value->data, value->len);
+ blob = g_byte_array_sized_new (data_len);
+ g_byte_array_append (blob, data, data_len);
opt = g_slice_new0 (ConfigOption);
opt->value = g_strdup_printf ("blob://%s", blobid);
@@ -328,9 +329,6 @@ nm_supplicant_config_get_blobs (NMSupplicantConfig * self)
return NM_SUPPLICANT_CONFIG_GET_PRIVATE (self)->blobs;
}
-#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," \
@@ -346,7 +344,8 @@ nm_supplicant_config_add_setting_wireless (NMSupplicantConfig * self,
NMSupplicantConfigPrivate *priv;
gboolean is_adhoc, is_ap;
const char *mode, *band;
- const GByteArray *id;
+ GBytes *ssid;
+ const char *bssid;
g_return_val_if_fail (NM_IS_SUPPLICANT_CONFIG (self), FALSE);
g_return_val_if_fail (setting != NULL, FALSE);
@@ -361,8 +360,11 @@ nm_supplicant_config_add_setting_wireless (NMSupplicantConfig * self,
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)) {
+ ssid = nm_setting_wireless_get_ssid (setting);
+ if (!nm_supplicant_config_add_option (self, "ssid",
+ (char *) g_bytes_get_data (ssid, NULL),
+ g_bytes_get_size (ssid),
+ FALSE)) {
nm_log_warn (LOGD_SUPPLICANT, "Error adding SSID to supplicant config.");
return FALSE;
}
@@ -401,19 +403,14 @@ nm_supplicant_config_add_setting_wireless (NMSupplicantConfig * self,
return FALSE;
}
- id = nm_setting_wireless_get_bssid (setting);
- if (id && id->len) {
- char *str_bssid;
-
- str_bssid = g_strdup_printf (MAC_FMT, MAC_ARG (id->data));
+ bssid = nm_setting_wireless_get_bssid (setting);
+ if (bssid) {
if (!nm_supplicant_config_add_option (self, "bssid",
- str_bssid, strlen (str_bssid),
+ bssid, strlen (bssid),
FALSE)) {
- g_free (str_bssid);
nm_log_warn (LOGD_SUPPLICANT, "Error adding BSSID to supplicant config.");
return FALSE;
}
- g_free (str_bssid);
}
band = nm_setting_wireless_get_band (setting);
@@ -496,7 +493,7 @@ get_blob_id (const char *name, const char *seed_uid)
}
#define ADD_BLOB_VAL(field, name, con_uid) \
- if (field && field->len) { \
+ if (field && g_bytes_get_size (field)) { \
char *uid = get_blob_id (name, con_uid); \
success = nm_supplicant_config_add_blob (self, name, field, uid); \
g_free (uid); \
@@ -543,8 +540,8 @@ add_wep_key (NMSupplicantConfig *self,
const char *name,
NMWepKeyType wep_type)
{
- char *value;
- gboolean success;
+ GBytes *bytes;
+ gboolean success = FALSE;
size_t key_len = key ? strlen (key) : 0;
if (!key || !key_len)
@@ -553,9 +550,15 @@ 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 = nm_utils_hexstr2bin (key, strlen (key));
- success = nm_supplicant_config_add_option (self, name, value, key_len / 2, TRUE);
- g_free (value);
+ bytes = nm_utils_hexstr2bin (key);
+ if (bytes) {
+ success = nm_supplicant_config_add_option (self,
+ name,
+ g_bytes_get_data (bytes, NULL),
+ g_bytes_get_size (bytes),
+ TRUE);
+ g_bytes_unref (bytes);
+ }
if (!success) {
nm_log_warn (LOGD_SUPPLICANT, "Error adding %s to supplicant config.", name);
return FALSE;
@@ -591,8 +594,7 @@ nm_supplicant_config_add_setting_wireless_security (NMSupplicantConfig *self,
NMSetting8021x *setting_8021x,
const char *con_uuid)
{
- char *value;
- gboolean success;
+ gboolean success = FALSE;
const char *key_mgmt, *auth_alg;
const char *psk;
@@ -613,10 +615,18 @@ nm_supplicant_config_add_setting_wireless_security (NMSupplicantConfig *self,
size_t psk_len = strlen (psk);
if (psk_len == 64) {
+ GBytes *bytes;
+
/* Hex PSK */
- value = nm_utils_hexstr2bin (psk, psk_len);
- success = nm_supplicant_config_add_option (self, "psk", value, psk_len / 2, TRUE);
- g_free (value);
+ bytes = nm_utils_hexstr2bin (psk);
+ if (bytes) {
+ success = nm_supplicant_config_add_option (self,
+ "psk",
+ g_bytes_get_data (bytes, NULL),
+ g_bytes_get_size (bytes),
+ TRUE);
+ g_bytes_unref (bytes);
+ }
if (!success) {
nm_log_warn (LOGD_SUPPLICANT, "Error adding 'psk' to supplicant config.");
return FALSE;
@@ -654,6 +664,7 @@ nm_supplicant_config_add_setting_wireless_security (NMSupplicantConfig *self,
const char *wep1 = nm_setting_wireless_security_get_wep_key (setting, 1);
const char *wep2 = nm_setting_wireless_security_get_wep_key (setting, 2);
const char *wep3 = nm_setting_wireless_security_get_wep_key (setting, 3);
+ char *value;
if (!add_wep_key (self, wep0, "wep_key0", wep_type))
return FALSE;
@@ -732,7 +743,7 @@ nm_supplicant_config_add_setting_8021x (NMSupplicantConfig *self,
const char *peapver, *value, *path;
gboolean success, added;
GString *phase1, *phase2;
- const GByteArray *array;
+ GBytes *bytes;
gboolean fast = FALSE;
guint32 i, num_eap;
gboolean fast_provisoning_allowed = FALSE;
@@ -748,12 +759,12 @@ nm_supplicant_config_add_setting_8021x (NMSupplicantConfig *self,
if (!add_string_val (self, value, "password", FALSE, TRUE))
return FALSE;
} else {
- array = nm_setting_802_1x_get_password_raw (setting);
- if (array) {
+ bytes = nm_setting_802_1x_get_password_raw (setting);
+ if (bytes) {
success = nm_supplicant_config_add_option (self,
"password",
- (const char *)array->data,
- array->len,
+ (const char *) g_bytes_get_data (bytes, NULL),
+ g_bytes_get_size (bytes),
TRUE);
if (!success) {
nm_log_warn (LOGD_SUPPLICANT, "Error adding password-raw to supplicant config.");
@@ -894,8 +905,8 @@ nm_supplicant_config_add_setting_8021x (NMSupplicantConfig *self,
/* CA certificate */
switch (nm_setting_802_1x_get_ca_cert_scheme (setting)) {
case NM_SETTING_802_1X_CK_SCHEME_BLOB:
- array = nm_setting_802_1x_get_ca_cert_blob (setting);
- ADD_BLOB_VAL (array, "ca_cert", con_uuid);
+ bytes = nm_setting_802_1x_get_ca_cert_blob (setting);
+ ADD_BLOB_VAL (bytes, "ca_cert", con_uuid);
break;
case NM_SETTING_802_1X_CK_SCHEME_PATH:
path = nm_setting_802_1x_get_ca_cert_path (setting);
@@ -909,8 +920,8 @@ nm_supplicant_config_add_setting_8021x (NMSupplicantConfig *self,
/* Phase 2 CA certificate */
switch (nm_setting_802_1x_get_phase2_ca_cert_scheme (setting)) {
case NM_SETTING_802_1X_CK_SCHEME_BLOB:
- array = nm_setting_802_1x_get_phase2_ca_cert_blob (setting);
- ADD_BLOB_VAL (array, "ca_cert2", con_uuid);
+ bytes = nm_setting_802_1x_get_phase2_ca_cert_blob (setting);
+ ADD_BLOB_VAL (bytes, "ca_cert2", con_uuid);
break;
case NM_SETTING_802_1X_CK_SCHEME_PATH:
path = nm_setting_802_1x_get_phase2_ca_cert_path (setting);
@@ -937,8 +948,8 @@ nm_supplicant_config_add_setting_8021x (NMSupplicantConfig *self,
added = FALSE;
switch (nm_setting_802_1x_get_private_key_scheme (setting)) {
case NM_SETTING_802_1X_CK_SCHEME_BLOB:
- array = nm_setting_802_1x_get_private_key_blob (setting);
- ADD_BLOB_VAL (array, "private_key", con_uuid);
+ bytes = nm_setting_802_1x_get_private_key_blob (setting);
+ ADD_BLOB_VAL (bytes, "private_key", con_uuid);
added = TRUE;
break;
case NM_SETTING_802_1X_CK_SCHEME_PATH:
@@ -975,8 +986,8 @@ nm_supplicant_config_add_setting_8021x (NMSupplicantConfig *self,
*/
switch (nm_setting_802_1x_get_client_cert_scheme (setting)) {
case NM_SETTING_802_1X_CK_SCHEME_BLOB:
- array = nm_setting_802_1x_get_client_cert_blob (setting);
- ADD_BLOB_VAL (array, "client_cert", con_uuid);
+ bytes = nm_setting_802_1x_get_client_cert_blob (setting);
+ ADD_BLOB_VAL (bytes, "client_cert", con_uuid);
break;
case NM_SETTING_802_1X_CK_SCHEME_PATH:
path = nm_setting_802_1x_get_client_cert_path (setting);
@@ -993,8 +1004,8 @@ nm_supplicant_config_add_setting_8021x (NMSupplicantConfig *self,
added = FALSE;
switch (nm_setting_802_1x_get_phase2_private_key_scheme (setting)) {
case NM_SETTING_802_1X_CK_SCHEME_BLOB:
- array = nm_setting_802_1x_get_phase2_private_key_blob (setting);
- ADD_BLOB_VAL (array, "private_key2", con_uuid);
+ bytes = nm_setting_802_1x_get_phase2_private_key_blob (setting);
+ ADD_BLOB_VAL (bytes, "private_key2", con_uuid);
added = TRUE;
break;
case NM_SETTING_802_1X_CK_SCHEME_PATH:
@@ -1021,7 +1032,7 @@ nm_supplicant_config_add_setting_8021x (NMSupplicantConfig *self,
* isn't decrypted at all.
*/
value = nm_setting_802_1x_get_phase2_private_key_password (setting);
- if (!add_string_val (self, value, "private_key_passwd2", FALSE, TRUE))
+ if (!add_string_val (self, value, "private_key2_passwd", FALSE, TRUE))
return FALSE;
}
@@ -1031,8 +1042,8 @@ nm_supplicant_config_add_setting_8021x (NMSupplicantConfig *self,
*/
switch (nm_setting_802_1x_get_phase2_client_cert_scheme (setting)) {
case NM_SETTING_802_1X_CK_SCHEME_BLOB:
- array = nm_setting_802_1x_get_phase2_client_cert_blob (setting);
- ADD_BLOB_VAL (array, "client_cert2", con_uuid);
+ bytes = nm_setting_802_1x_get_phase2_client_cert_blob (setting);
+ ADD_BLOB_VAL (bytes, "client_cert2", con_uuid);
break;
case NM_SETTING_802_1X_CK_SCHEME_PATH:
path = nm_setting_802_1x_get_phase2_client_cert_path (setting);
diff --git a/src/supplicant-manager/nm-supplicant-config.h b/src/supplicant-manager/nm-supplicant-config.h
index 75d6b779f..482e3545b 100644
--- a/src/supplicant-manager/nm-supplicant-config.h
+++ b/src/supplicant-manager/nm-supplicant-config.h
@@ -19,8 +19,8 @@
* Copyright (C) 2007 - 2008 Novell, Inc.
*/
-#ifndef NM_SUPPLICANT_CONFIG_H
-#define NM_SUPPLICANT_CONFIG_H
+#ifndef __NETWORKMANAGER_SUPPLICANT_CONFIG_H__
+#define __NETWORKMANAGER_SUPPLICANT_CONFIG_H__
#include <glib-object.h>
#include <nm-setting-wireless.h>
diff --git a/src/supplicant-manager/nm-supplicant-interface.c b/src/supplicant-manager/nm-supplicant-interface.c
index 15138dc81..02b82b7ee 100644
--- a/src/supplicant-manager/nm-supplicant-interface.c
+++ b/src/supplicant-manager/nm-supplicant-interface.c
@@ -19,7 +19,8 @@
* Copyright (C) 2006 - 2008 Novell, Inc.
*/
-#include <config.h>
+#include "config.h"
+
#include <stdio.h>
#include <string.h>
#include <glib.h>
@@ -1033,12 +1034,11 @@ add_blob_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
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)) {
+ if (!dbus_g_proxy_end_call (proxy, call_id, &err, G_TYPE_INVALID)) {
nm_log_warn (LOGD_SUPPLICANT, "Couldn't set network certificates: %s.", err->message);
emit_error_helper (self, err);
g_error_free (err);
@@ -1080,7 +1080,7 @@ add_network_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
add_blob_cb,
self,
NULL,
- DBUS_TYPE_STRING, name,
+ G_TYPE_STRING, name,
DBUS_TYPE_G_UCHAR_ARRAY, data,
G_TYPE_INVALID);
nm_call_store_add (priv->assoc_pcalls, priv->iface_proxy, call);
@@ -1472,12 +1472,12 @@ nm_supplicant_interface_class_init (NMSupplicantInterfaceClass *klass)
object_class->get_property = get_property;
/* Properties */
- g_object_class_install_property (object_class, PROP_SCANNING,
- g_param_spec_boolean ("scanning",
- "Scanning",
- "Scanning",
- FALSE,
- G_PARAM_READABLE));
+ g_object_class_install_property
+ (object_class, PROP_SCANNING,
+ g_param_spec_boolean ("scanning", "", "",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
/* Signals */
signals[STATE] =
diff --git a/src/supplicant-manager/nm-supplicant-interface.h b/src/supplicant-manager/nm-supplicant-interface.h
index 633c16cc5..0112e40ea 100644
--- a/src/supplicant-manager/nm-supplicant-interface.h
+++ b/src/supplicant-manager/nm-supplicant-interface.h
@@ -19,11 +19,10 @@
* Copyright (C) 2007 - 2008 Novell, Inc.
*/
-#ifndef NM_SUPPLICANT_INTERFACE_H
-#define NM_SUPPLICANT_INTERFACE_H
+#ifndef __NETWORKMANAGER_SUPPLICANT_INTERFACE_H__
+#define __NETWORKMANAGER_SUPPLICANT_INTERFACE_H__
#include <glib-object.h>
-#include <dbus/dbus.h>
#include "nm-supplicant-types.h"
/*
diff --git a/src/supplicant-manager/nm-supplicant-manager.c b/src/supplicant-manager/nm-supplicant-manager.c
index f146b2398..01e35929d 100644
--- a/src/supplicant-manager/nm-supplicant-manager.c
+++ b/src/supplicant-manager/nm-supplicant-manager.c
@@ -19,6 +19,8 @@
* Copyright (C) 2007 - 2008 Novell, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include <glib.h>
#include <dbus/dbus.h>
@@ -405,11 +407,11 @@ nm_supplicant_manager_class_init (NMSupplicantManagerClass *klass)
object_class->set_property = set_property;
object_class->dispose = dispose;
- g_object_class_install_property (object_class, PROP_AVAILABLE,
- g_param_spec_boolean (NM_SUPPLICANT_MANAGER_AVAILABLE,
- "Available",
- "Available",
- FALSE,
- G_PARAM_READABLE));
+ g_object_class_install_property
+ (object_class, PROP_AVAILABLE,
+ g_param_spec_boolean (NM_SUPPLICANT_MANAGER_AVAILABLE, "", "",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
}
diff --git a/src/supplicant-manager/nm-supplicant-manager.h b/src/supplicant-manager/nm-supplicant-manager.h
index 9e2f3b21b..5e7f1eb59 100644
--- a/src/supplicant-manager/nm-supplicant-manager.h
+++ b/src/supplicant-manager/nm-supplicant-manager.h
@@ -19,8 +19,8 @@
* Copyright (C) 2007 - 2008 Novell, Inc.
*/
-#ifndef NM_SUPPLICANT_MANAGER_H
-#define NM_SUPPLICANT_MANAGER_H
+#ifndef __NETWORKMANAGER_SUPPLICANT_MANAGER_H__
+#define __NETWORKMANAGER_SUPPLICANT_MANAGER_H__
#include <glib-object.h>
#include "nm-supplicant-types.h"
@@ -65,4 +65,4 @@ void nm_supplicant_manager_iface_release (NMSupplicantManager *mgr,
gboolean nm_supplicant_manager_available (NMSupplicantManager *mgr);
-#endif /* NM_SUPPLICANT_MANAGER_H */
+#endif /* __NETWORKMANAGER_SUPPLICANT_MANAGER_H__ */
diff --git a/src/supplicant-manager/nm-supplicant-settings-verify.c b/src/supplicant-manager/nm-supplicant-settings-verify.c
index f7d4ca58c..1328fd511 100644
--- a/src/supplicant-manager/nm-supplicant-settings-verify.c
+++ b/src/supplicant-manager/nm-supplicant-settings-verify.c
@@ -18,6 +18,8 @@
* Copyright (C) 2006 - 2012 Red Hat, Inc.
*/
+#include "config.h"
+
#include <glib.h>
#include <stdio.h>
#include <stdlib.h>
@@ -137,7 +139,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 },
+ { "freq_list", TYPE_KEYWORD, 0, 0, FALSE, NULL },
};
diff --git a/src/supplicant-manager/nm-supplicant-settings-verify.h b/src/supplicant-manager/nm-supplicant-settings-verify.h
index eb213e0e8..920343bac 100644
--- a/src/supplicant-manager/nm-supplicant-settings-verify.h
+++ b/src/supplicant-manager/nm-supplicant-settings-verify.h
@@ -18,8 +18,8 @@
* Copyright (C) 2006 - 2008 Red Hat, Inc.
*/
-#ifndef NM_SUPPLICANT_SETTINGS_VERIFY_H
-#define NM_SUPPLICANT_SETTINGS_VERIFY_H
+#ifndef __NETWORKMANAGER_SUPPLICANT_SETTINGS_VERIFY_H__
+#define __NETWORKMANAGER_SUPPLICANT_SETTINGS_VERIFY_H__
typedef enum {
TYPE_INVALID = 0,
@@ -35,4 +35,4 @@ OptType nm_supplicant_settings_verify_setting (const char * key,
const guint32 len);
-#endif /* NM_SUPPLICANT_SETTINGS_VERIFY_H */
+#endif /* __NETWORKMANAGER_SUPPLICANT_SETTINGS_VERIFY_H__ */
diff --git a/src/supplicant-manager/nm-supplicant-types.h b/src/supplicant-manager/nm-supplicant-types.h
index 16e4a6ba4..619f0c3e9 100644
--- a/src/supplicant-manager/nm-supplicant-types.h
+++ b/src/supplicant-manager/nm-supplicant-types.h
@@ -18,8 +18,8 @@
* Copyright (C) 2006 - 2008 Red Hat, Inc.
*/
-#ifndef NM_SUPPLICANT_TYPES_H
-#define NM_SUPPLICANT_TYPES_H
+#ifndef __NETWORKMANAGER_SUPPLICANT_TYPES_H__
+#define __NETWORKMANAGER_SUPPLICANT_TYPES_H__
typedef struct _NMSupplicantManager NMSupplicantManager;
typedef struct _NMSupplicantInterface NMSupplicantInterface;
diff --git a/src/supplicant-manager/tests/Makefile.am b/src/supplicant-manager/tests/Makefile.am
index 9defe66b1..452ccdc1f 100644
--- a/src/supplicant-manager/tests/Makefile.am
+++ b/src/supplicant-manager/tests/Makefile.am
@@ -1,11 +1,11 @@
AM_CPPFLAGS = \
-I$(top_srcdir)/include \
- -I$(top_builddir)/include \
- -I$(top_srcdir)/libnm-util \
- -I$(top_builddir)/libnm-util \
+ -I$(top_srcdir)/libnm-core \
+ -I$(top_builddir)/libnm-core \
-I$(top_srcdir)/src \
-I$(top_srcdir)/src/supplicant-manager \
-DG_LOG_DOMAIN=\""NetworkManager"\" \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS)
diff --git a/src/supplicant-manager/tests/Makefile.in b/src/supplicant-manager/tests/Makefile.in
index 42a7f6ff8..567b6c770 100644
--- a/src/supplicant-manager/tests/Makefile.in
+++ b/src/supplicant-manager/tests/Makefile.in
@@ -204,6 +204,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -327,6 +329,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -346,6 +349,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -372,7 +376,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -453,12 +457,12 @@ with_resolvconf = @with_resolvconf@
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)/libnm-core \
+ -I$(top_builddir)/libnm-core \
-I$(top_srcdir)/src \
-I$(top_srcdir)/src/supplicant-manager \
-DG_LOG_DOMAIN=\""NetworkManager"\" \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS)
diff --git a/src/supplicant-manager/tests/test-supplicant-config.c b/src/supplicant-manager/tests/test-supplicant-config.c
index ce884a8dd..5aa3fa2db 100644
--- a/src/supplicant-manager/tests/test-supplicant-config.c
+++ b/src/supplicant-manager/tests/test-supplicant-config.c
@@ -18,11 +18,12 @@
* Copyright (C) 2008 - 2011 Red Hat, Inc.
*/
+#include "config.h"
+
#include <stdio.h>
#include <stdarg.h>
#include <unistd.h>
#include <string.h>
-#include <netinet/ether.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/socket.h>
@@ -31,13 +32,7 @@
#include <dbus/dbus-glib.h>
-#include <nm-utils.h>
-#include <nm-setting-connection.h>
-#include <nm-setting-wired.h>
-#include <nm-setting-wireless.h>
-#include <nm-setting-wireless-security.h>
-#include <nm-setting-ip4-config.h>
-#include <nm-setting-8021x.h>
+#include "nm-core-internal.h"
#include "nm-supplicant-config.h"
#include "nm-supplicant-settings-verify.h"
@@ -115,19 +110,17 @@ test_wifi_open (void)
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWireless *s_wifi;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
NMSupplicantConfig *config;
GHashTable *hash;
char *uuid;
gboolean success;
GError *error = NULL;
- GByteArray *ssid;
+ GBytes *ssid;
const unsigned char ssid_data[] = { 0x54, 0x65, 0x73, 0x74, 0x20, 0x53, 0x53, 0x49, 0x44 };
- GByteArray *bssid;
- const unsigned char bssid_data[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 };
const char *bssid_str = "11:22:33:44:55:66";
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -146,26 +139,22 @@ test_wifi_open (void)
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));
- bssid = g_byte_array_sized_new (sizeof (bssid_data));
- g_byte_array_append (bssid, bssid_data, sizeof (bssid_data));
+ ssid = g_bytes_new (ssid_data, sizeof (ssid_data));
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
- NM_SETTING_WIRELESS_BSSID, bssid,
+ NM_SETTING_WIRELESS_BSSID, bssid_str,
NM_SETTING_WIRELESS_MODE, "infrastructure",
NM_SETTING_WIRELESS_BAND, "bg",
NULL);
- g_byte_array_free (ssid, TRUE);
- g_byte_array_free (bssid, TRUE);
+ g_bytes_unref (ssid);
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) 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_AUTO, NULL);
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
ASSERT (nm_connection_verify (connection, &error) == TRUE,
"wifi-open", "failed to verify connection: %s",
@@ -216,19 +205,17 @@ test_wifi_wep_key (const char *detail,
NMSettingConnection *s_con;
NMSettingWireless *s_wifi;
NMSettingWirelessSecurity *s_wsec;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
NMSupplicantConfig *config;
GHashTable *hash;
char *uuid;
gboolean success;
GError *error = NULL;
- GByteArray *ssid;
+ GBytes *ssid;
const unsigned char ssid_data[] = { 0x54, 0x65, 0x73, 0x74, 0x20, 0x53, 0x53, 0x49, 0x44 };
- GByteArray *bssid;
- const unsigned char bssid_data[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 };
const char *bssid_str = "11:22:33:44:55:66";
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -247,20 +234,16 @@ test_wifi_wep_key (const char *detail,
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));
- bssid = g_byte_array_sized_new (sizeof (bssid_data));
- g_byte_array_append (bssid, bssid_data, sizeof (bssid_data));
+ ssid = g_bytes_new (ssid_data, sizeof (ssid_data));
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
- NM_SETTING_WIRELESS_BSSID, bssid,
+ NM_SETTING_WIRELESS_BSSID, bssid_str,
NM_SETTING_WIRELESS_MODE, "infrastructure",
NM_SETTING_WIRELESS_BAND, "bg",
NULL);
- g_byte_array_free (ssid, TRUE);
- g_byte_array_free (bssid, TRUE);
+ g_bytes_unref (ssid);
/* Wifi Security setting */
s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
@@ -273,10 +256,10 @@ test_wifi_wep_key (const char *detail,
nm_setting_wireless_security_set_wep_key (s_wsec, 0, key_data);
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) 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_AUTO, NULL);
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
ASSERT (nm_connection_verify (connection, &error) == TRUE,
detail, "failed to verify connection: %s",
@@ -359,19 +342,17 @@ test_wifi_wpa_psk (const char *detail,
NMSettingConnection *s_con;
NMSettingWireless *s_wifi;
NMSettingWirelessSecurity *s_wsec;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
NMSupplicantConfig *config;
GHashTable *hash;
char *uuid;
gboolean success;
GError *error = NULL;
- GByteArray *ssid;
+ GBytes *ssid;
const unsigned char ssid_data[] = { 0x54, 0x65, 0x73, 0x74, 0x20, 0x53, 0x53, 0x49, 0x44 };
- GByteArray *bssid;
- const unsigned char bssid_data[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 };
const char *bssid_str = "11:22:33:44:55:66";
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
@@ -390,20 +371,16 @@ test_wifi_wpa_psk (const char *detail,
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));
- bssid = g_byte_array_sized_new (sizeof (bssid_data));
- g_byte_array_append (bssid, bssid_data, sizeof (bssid_data));
+ ssid = g_bytes_new (ssid_data, sizeof (ssid_data));
g_object_set (s_wifi,
NM_SETTING_WIRELESS_SSID, ssid,
- NM_SETTING_WIRELESS_BSSID, bssid,
+ NM_SETTING_WIRELESS_BSSID, bssid_str,
NM_SETTING_WIRELESS_MODE, "infrastructure",
NM_SETTING_WIRELESS_BAND, "bg",
NULL);
- g_byte_array_free (ssid, TRUE);
- g_byte_array_free (bssid, TRUE);
+ g_bytes_unref (ssid);
/* Wifi Security setting */
s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
@@ -422,10 +399,10 @@ test_wifi_wpa_psk (const char *detail,
nm_setting_wireless_security_add_group (s_wsec, "ccmp");
/* IP4 setting */
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) 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_AUTO, NULL);
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
ASSERT (nm_connection_verify (connection, &error) == TRUE,
detail, "failed to verify connection: %s",
diff --git a/src/tests/Makefile.am b/src/tests/Makefile.am
index ee5be17d7..65bc2199c 100644
--- a/src/tests/Makefile.am
+++ b/src/tests/Makefile.am
@@ -1,38 +1,28 @@
+SUBDIRS = config
+
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)/libnm-core \
+ -I$(top_builddir)/libnm-core \
-I$(top_srcdir)/src/platform \
-I$(top_srcdir)/src/dhcp-manager \
+ -I$(top_srcdir)/src/devices \
-I$(top_srcdir)/src \
-I$(top_builddir)/src \
-DG_LOG_DOMAIN=\""NetworkManager"\" \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS)
noinst_PROGRAMS = \
- test-dhcp-options \
test-general \
+ test-general-with-expect \
test-ip4-config \
test-ip6-config \
test-dcb \
- test-resolvconf-capture
-
-####### DHCP options test #######
-
-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
+ test-resolvconf-capture \
+ test-wired-defname
####### ip4 config test #######
@@ -74,11 +64,50 @@ test_general_SOURCES = \
test_general_LDADD = \
$(top_builddir)/src/libNetworkManager.la
+####### general-with-expect test #######
+
+test_general_with_expect_SOURCES = \
+ test-general-with-expect.c
+
+test_general_with_expect_LDADD = \
+ $(top_builddir)/src/libNetworkManager.la
+
+####### wired defname test #######
+
+test_wired_defname_SOURCES = \
+ test-wired-defname.c
+
+test_wired_defname_LDADD = \
+ $(top_builddir)/src/libNetworkManager.la
+
####### secret agent interface test #######
EXTRA_DIST = test-secret-agent.py
###########################################
-TESTS = test-dhcp-options test-ip4-config test-ip6-config test-dcb test-resolvconf-capture test-general
+TESTS = \
+ test-ip4-config \
+ test-ip6-config \
+ test-dcb \
+ test-resolvconf-capture \
+ test-general \
+ test-general-with-expect \
+ test-wired-defname
+
+
+if ENABLE_TESTS
+
+check-local:
+ @for t in bond bridge ethernet gre infiniband macvlan tun veth vlan vxlan; do \
+ # Ensure the device subclass factory registration constructors exist \
+ # which could inadvertently break if src/Makefile.am gets changed \
+ if ! LC_ALL=C nm $(top_builddir)/src/NetworkManager | LC_ALL=C grep -q "register_device_factory_internal_$$t" ; then \
+ echo "Testing device factory symbols... FAILED" ; \
+ exit 1 ; \
+ fi \
+ done
+ @echo "Testing device factory symbols... PASSED"
+
+endif
diff --git a/src/tests/Makefile.in b/src/tests/Makefile.in
index b9af7c317..a5d5b3a83 100644
--- a/src/tests/Makefile.in
+++ b/src/tests/Makefile.in
@@ -78,12 +78,14 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-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) \
+noinst_PROGRAMS = test-general$(EXEEXT) \
+ test-general-with-expect$(EXEEXT) test-ip4-config$(EXEEXT) \
test-ip6-config$(EXEEXT) test-dcb$(EXEEXT) \
- test-resolvconf-capture$(EXEEXT) test-general$(EXEEXT)
+ test-resolvconf-capture$(EXEEXT) test-wired-defname$(EXEEXT)
+TESTS = test-ip4-config$(EXEEXT) test-ip6-config$(EXEEXT) \
+ test-dcb$(EXEEXT) test-resolvconf-capture$(EXEEXT) \
+ test-general$(EXEEXT) test-general-with-expect$(EXEEXT) \
+ test-wired-defname$(EXEEXT)
subdir = src/tests
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
@@ -115,14 +117,15 @@ 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_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_general_with_expect_OBJECTS = \
+ test-general-with-expect.$(OBJEXT)
+test_general_with_expect_OBJECTS = \
+ $(am_test_general_with_expect_OBJECTS)
+test_general_with_expect_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 = \
@@ -137,6 +140,10 @@ test_resolvconf_capture_OBJECTS = \
$(am_test_resolvconf_capture_OBJECTS)
test_resolvconf_capture_DEPENDENCIES = \
$(top_builddir)/src/libNetworkManager.la
+am_test_wired_defname_OBJECTS = test-wired-defname.$(OBJEXT)
+test_wired_defname_OBJECTS = $(am_test_wired_defname_OBJECTS)
+test_wired_defname_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
@@ -171,17 +178,35 @@ 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_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)
+SOURCES = $(test_dcb_SOURCES) $(test_general_SOURCES) \
+ $(test_general_with_expect_SOURCES) $(test_ip4_config_SOURCES) \
+ $(test_ip6_config_SOURCES) $(test_resolvconf_capture_SOURCES) \
+ $(test_wired_defname_SOURCES)
+DIST_SOURCES = $(test_dcb_SOURCES) $(test_general_SOURCES) \
+ $(test_general_with_expect_SOURCES) $(test_ip4_config_SOURCES) \
+ $(test_ip6_config_SOURCES) $(test_resolvconf_capture_SOURCES) \
+ $(test_wired_defname_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
@@ -223,7 +248,33 @@ am__tty_colors = { \
std=''; \
fi; \
}
+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@
@@ -233,6 +284,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -356,6 +409,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -375,6 +429,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -401,7 +456,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -480,35 +535,23 @@ with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
with_valgrind = @with_valgrind@
+SUBDIRS = config
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)/libnm-core \
+ -I$(top_builddir)/libnm-core \
-I$(top_srcdir)/src/platform \
-I$(top_srcdir)/src/dhcp-manager \
+ -I$(top_srcdir)/src/devices \
-I$(top_srcdir)/src \
-I$(top_builddir)/src \
-DG_LOG_DOMAIN=\""NetworkManager"\" \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS)
-####### DHCP options test #######
-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
@@ -549,9 +592,25 @@ test_general_LDADD = \
$(top_builddir)/src/libNetworkManager.la
+####### general-with-expect test #######
+test_general_with_expect_SOURCES = \
+ test-general-with-expect.c
+
+test_general_with_expect_LDADD = \
+ $(top_builddir)/src/libNetworkManager.la
+
+
+####### wired defname test #######
+test_wired_defname_SOURCES = \
+ test-wired-defname.c
+
+test_wired_defname_LDADD = \
+ $(top_builddir)/src/libNetworkManager.la
+
+
####### secret agent interface test #######
EXTRA_DIST = test-secret-agent.py
-all: all-am
+all: all-recursive
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
@@ -599,14 +658,14 @@ test-dcb$(EXEEXT): $(test_dcb_OBJECTS) $(test_dcb_DEPENDENCIES) $(EXTRA_test_dcb
@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-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-general-with-expect$(EXEEXT): $(test_general_with_expect_OBJECTS) $(test_general_with_expect_DEPENDENCIES) $(EXTRA_test_general_with_expect_DEPENDENCIES)
+ @rm -f test-general-with-expect$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_general_with_expect_OBJECTS) $(test_general_with_expect_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)
@@ -619,6 +678,10 @@ test-resolvconf-capture$(EXEEXT): $(test_resolvconf_capture_OBJECTS) $(test_reso
@rm -f test-resolvconf-capture$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_resolvconf_capture_OBJECTS) $(test_resolvconf_capture_LDADD) $(LIBS)
+test-wired-defname$(EXEEXT): $(test_wired_defname_OBJECTS) $(test_wired_defname_DEPENDENCIES) $(EXTRA_test_wired_defname_DEPENDENCIES)
+ @rm -f test-wired-defname$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_wired_defname_OBJECTS) $(test_wired_defname_LDADD) $(LIBS)
+
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -626,11 +689,12 @@ distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-dcb.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-general-with-expect.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@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-wired-defname.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -653,34 +717,67 @@ 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_options-test-dhcp-options.o: test-dhcp-options.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_dhcp_options_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_dhcp_options-test-dhcp-options.o -MD -MP -MF $(DEPDIR)/test_dhcp_options-test-dhcp-options.Tpo -c -o test_dhcp_options-test-dhcp-options.o `test -f 'test-dhcp-options.c' || echo '$(srcdir)/'`test-dhcp-options.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_dhcp_options-test-dhcp-options.Tpo $(DEPDIR)/test_dhcp_options-test-dhcp-options.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-dhcp-options.c' object='test_dhcp_options-test-dhcp-options.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_options_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_dhcp_options-test-dhcp-options.o `test -f 'test-dhcp-options.c' || echo '$(srcdir)/'`test-dhcp-options.c
-
-test_dhcp_options-test-dhcp-options.obj: test-dhcp-options.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_dhcp_options_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_dhcp_options-test-dhcp-options.obj -MD -MP -MF $(DEPDIR)/test_dhcp_options-test-dhcp-options.Tpo -c -o test_dhcp_options-test-dhcp-options.obj `if test -f 'test-dhcp-options.c'; then $(CYGPATH_W) 'test-dhcp-options.c'; else $(CYGPATH_W) '$(srcdir)/test-dhcp-options.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_dhcp_options-test-dhcp-options.Tpo $(DEPDIR)/test_dhcp_options-test-dhcp-options.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-dhcp-options.c' object='test_dhcp_options-test-dhcp-options.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_options_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_dhcp_options-test-dhcp-options.obj `if test -f 'test-dhcp-options.c'; then $(CYGPATH_W) 'test-dhcp-options.c'; else $(CYGPATH_W) '$(srcdir)/test-dhcp-options.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'; \
+ 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 \
@@ -693,7 +790,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)
@@ -706,7 +803,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)'; \
@@ -848,20 +945,47 @@ 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
+@ENABLE_TESTS_FALSE@check-local:
check-am: all-am
- $(MAKE) $(AM_MAKEFLAGS) check-TESTS
-check: check-am
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS check-local
+check: check-recursive
all-am: Makefile $(PROGRAMS)
-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)" \
@@ -883,94 +1007,106 @@ 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-noinstPROGRAMS \
mostlyclean-am
-distclean: distclean-am
+distclean: distclean-recursive
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile 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 -rf ./$(DEPDIR)
-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
-pdf: pdf-am
+pdf: pdf-recursive
pdf-am:
-ps: ps-am
+ps: ps-recursive
ps-am:
uninstall-am:
-.MAKE: check-am install-am install-strip
+.MAKE: $(am__recursive_targets) 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 \
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+ 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 maintainer-clean \
+ 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:
+@ENABLE_TESTS_TRUE@ @for t in bond bridge ethernet gre infiniband macvlan tun veth vlan vxlan; do \
+@ENABLE_TESTS_TRUE@ # Ensure the device subclass factory registration constructors exist \
+@ENABLE_TESTS_TRUE@ # which could inadvertently break if src/Makefile.am gets changed \
+@ENABLE_TESTS_TRUE@ if ! LC_ALL=C nm $(top_builddir)/src/NetworkManager | LC_ALL=C grep -q "register_device_factory_internal_$$t" ; then \
+@ENABLE_TESTS_TRUE@ echo "Testing device factory symbols... FAILED" ; \
+@ENABLE_TESTS_TRUE@ exit 1 ; \
+@ENABLE_TESTS_TRUE@ fi \
+@ENABLE_TESTS_TRUE@ done
+@ENABLE_TESTS_TRUE@ @echo "Testing device factory symbols... PASSED"
+
# 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/config/tests/Makefile.am b/src/tests/config/Makefile.am
index 6e64812b4..66009c877 100644
--- a/src/config/tests/Makefile.am
+++ b/src/tests/config/Makefile.am
@@ -1,12 +1,15 @@
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 \
+ -I$(top_srcdir)/libnm-core \
+ -I$(top_builddir)/libnm-core \
+ -I$(top_srcdir)/src/ \
+ -I$(top_srcdir)/src/devices \
+ -I${top_srcdir}/src/platform \
-DG_LOG_DOMAIN=\""NetworkManager"\" \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
+ $(DBUS_CFLAGS) \
-DSRCDIR=\""$(srcdir)"\"
noinst_PROGRAMS = \
diff --git a/src/config/tests/Makefile.in b/src/tests/config/Makefile.in
index 4ac0ce153..81fb08855 100644
--- a/src/config/tests/Makefile.in
+++ b/src/tests/config/Makefile.in
@@ -80,7 +80,7 @@ build_triplet = @build@
host_triplet = @host@
noinst_PROGRAMS = test-config$(EXEEXT)
TESTS = test-config$(EXEEXT)
-subdir = src/config/tests
+subdir = src/tests/config
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/build-aux/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -204,6 +204,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -327,6 +329,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -346,6 +349,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -372,7 +376,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -453,13 +457,16 @@ with_resolvconf = @with_resolvconf@
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 \
+ -I$(top_srcdir)/libnm-core \
+ -I$(top_builddir)/libnm-core \
+ -I$(top_srcdir)/src/ \
+ -I$(top_srcdir)/src/devices \
+ -I${top_srcdir}/src/platform \
-DG_LOG_DOMAIN=\""NetworkManager"\" \
+ -DNETWORKMANAGER_COMPILATION \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(GLIB_CFLAGS) \
+ $(DBUS_CFLAGS) \
-DSRCDIR=\""$(srcdir)"\"
test_config_SOURCES = \
@@ -490,9 +497,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/config/tests/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/tests/config/Makefile'; \
$(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu src/config/tests/Makefile
+ $(AUTOMAKE) --gnu src/tests/config/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
diff --git a/src/config/tests/NetworkManager.conf b/src/tests/config/NetworkManager.conf
index 401ba48a7..401ba48a7 100644
--- a/src/config/tests/NetworkManager.conf
+++ b/src/tests/config/NetworkManager.conf
diff --git a/src/config/tests/bad.conf b/src/tests/config/bad.conf
index 20d6a67a1..20d6a67a1 100644
--- a/src/config/tests/bad.conf
+++ b/src/tests/config/bad.conf
diff --git a/src/config/tests/conf.d/00-overrides.conf b/src/tests/config/conf.d/00-overrides.conf
index 0aa19d484..0aa19d484 100644
--- a/src/config/tests/conf.d/00-overrides.conf
+++ b/src/tests/config/conf.d/00-overrides.conf
diff --git a/src/config/tests/conf.d/10-more.conf b/src/tests/config/conf.d/10-more.conf
index b1424a4bc..b1424a4bc 100644
--- a/src/config/tests/conf.d/10-more.conf
+++ b/src/tests/config/conf.d/10-more.conf
diff --git a/src/config/tests/conf.d/90-last.conf b/src/tests/config/conf.d/90-last.conf
index dc1de394f..dc1de394f 100644
--- a/src/config/tests/conf.d/90-last.conf
+++ b/src/tests/config/conf.d/90-last.conf
diff --git a/src/tests/config/nm-test-device.c b/src/tests/config/nm-test-device.c
new file mode 100644
index 000000000..63067b25f
--- /dev/null
+++ b/src/tests/config/nm-test-device.c
@@ -0,0 +1,99 @@
+/* -*- 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-test-device.h"
+#include "nm-device-private.h"
+#include "nm-utils.h"
+
+static GObjectClass *g_object_class;
+
+G_DEFINE_TYPE (NMTestDevice, nm_test_device, NM_TYPE_DEVICE)
+
+static void
+nm_test_device_init (NMTestDevice *self)
+{
+}
+
+/* We jump over NMDevice's construct/destruct methods, which require NMPlatform
+ * and NMConnectionProvider to be initialized.
+ */
+
+static GObject*
+constructor (GType type,
+ guint n_construct_params,
+ GObjectConstructParam *construct_params)
+{
+ return g_object_class->constructor (type,
+ n_construct_params,
+ construct_params);
+}
+
+static void
+constructed (GObject *object)
+{
+ g_object_class->constructed (object);
+}
+
+static void
+dispose (GObject *object)
+{
+ g_object_class->dispose (object);
+}
+
+static void
+finalize (GObject *object)
+{
+ g_object_class->finalize (object);
+}
+
+static guint32
+get_generic_capabilities (NMDevice *device)
+{
+ return NM_DEVICE_CAP_IS_NON_KERNEL;
+}
+
+static void
+nm_test_device_class_init (NMTestDeviceClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ NMDeviceClass *device_class = NM_DEVICE_CLASS (klass);
+
+ g_object_class = g_type_class_peek (G_TYPE_OBJECT);
+
+ object_class->constructor = constructor;
+ object_class->constructed = constructed;
+ object_class->dispose = dispose;
+ object_class->finalize = finalize;
+
+ device_class->get_generic_capabilities = get_generic_capabilities;
+}
+
+NMDevice *
+nm_test_device_new (const char *hwaddr)
+{
+ return g_object_new (NM_TYPE_TEST_DEVICE,
+ NM_DEVICE_IFACE, "dummy",
+ NM_DEVICE_HW_ADDRESS, hwaddr,
+ NULL);
+}
diff --git a/src/config/tests/nm-test-device.h b/src/tests/config/nm-test-device.h
index ad63bf5fd..00b21c426 100644
--- a/src/config/tests/nm-test-device.h
+++ b/src/tests/config/nm-test-device.h
@@ -18,10 +18,10 @@
* Copyright 2013 Red Hat, Inc.
*/
-#ifndef NM_TEST_DEVICE_H
-#define NM_TEST_DEVICE_H
+#ifndef __NETWORKMANAGER_TEST_DEVICE_H__
+#define __NETWORKMANAGER_TEST_DEVICE_H__
-#include <glib-object.h>
+#include <nm-device.h>
G_BEGIN_DECLS
@@ -33,19 +33,17 @@ G_BEGIN_DECLS
#define NM_TEST_DEVICE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_TEST_DEVICE, NMTestDeviceClass))
typedef struct {
- GObject parent;
+ NMDevice parent;
- char *hwaddr;
- guint8 *hwaddr_bytes;
} NMTestDevice;
typedef struct {
- GObjectClass parent;
+ NMDeviceClass parent;
} NMTestDeviceClass;
GType nm_test_device_get_type (void);
-NMTestDevice *nm_test_device_new (const char *hwaddr);
+NMDevice *nm_test_device_new (const char *hwaddr);
G_END_DECLS
diff --git a/src/config/tests/test-config.c b/src/tests/config/test-config.c
index fb6baacca..808fc670b 100644
--- a/src/config/tests/test-config.c
+++ b/src/tests/config/test-config.c
@@ -26,6 +26,7 @@
#include <nm-config.h>
#include "nm-test-device.h"
+#include "nm-fake-platform.h"
static void
setup_config (const char *config_file, const char *config_dir, ...)
@@ -163,7 +164,7 @@ test_config_no_auto_default (void)
GError *error = NULL;
int fd, nwrote;
char *state_file;
- NMTestDevice *dev1, *dev2, *dev3, *dev4;
+ NMDevice *dev1, *dev2, *dev3, *dev4;
fd = g_file_open_tmp (NULL, &state_file, &error);
g_assert_no_error (error);
@@ -185,13 +186,13 @@ test_config_no_auto_default (void)
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)));
+ g_assert (!nm_config_get_ethernet_can_auto_default (config, dev1));
+ g_assert (!nm_config_get_ethernet_can_auto_default (config, dev2));
+ g_assert (nm_config_get_ethernet_can_auto_default (config, dev3));
+ g_assert (!nm_config_get_ethernet_can_auto_default (config, 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)));
+ nm_config_set_ethernet_no_auto_default (config, dev3);
+ g_assert (!nm_config_get_ethernet_can_auto_default (config, dev3));
g_object_unref (config);
@@ -201,10 +202,10 @@ test_config_no_auto_default (void)
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_assert (!nm_config_get_ethernet_can_auto_default (config, dev1));
+ g_assert (!nm_config_get_ethernet_can_auto_default (config, dev2));
+ g_assert (!nm_config_get_ethernet_can_auto_default (config, dev3));
+ g_assert (!nm_config_get_ethernet_can_auto_default (config, dev4));
g_object_unref (config);
@@ -287,6 +288,8 @@ main (int argc, char **argv)
g_test_init (&argc, &argv, NULL);
+ nm_fake_platform_setup ();
+
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);
diff --git a/src/tests/test-dcb.c b/src/tests/test-dcb.c
index c28f05b92..dacb1f521 100644
--- a/src/tests/test-dcb.c
+++ b/src/tests/test-dcb.c
@@ -18,6 +18,8 @@
*
*/
+#include "config.h"
+
#include <glib.h>
#include <string.h>
diff --git a/src/tests/test-dhcp-options.c b/src/tests/test-dhcp-options.c
deleted file mode 100644
index 5df17e587..000000000
--- a/src/tests/test-dhcp-options.c
+++ /dev/null
@@ -1,937 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/* nm-dhcp-manager.c - Handle the DHCP daemon 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) 2008 - 2011 Red Hat, Inc.
- *
- */
-
-#include <glib.h>
-#include <dbus/dbus-glib.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <string.h>
-
-#include <nm-utils.h>
-
-#include "nm-dhcp-manager.h"
-#include "nm-logging.h"
-
-#include "nm-test-utils.h"
-
-typedef struct {
- const char *name;
- const char *value;
-} Option;
-
-static void
-destroy_gvalue (gpointer data)
-{
- GValue *value = (GValue *) data;
-
- g_value_unset (value);
- g_slice_free (GValue, value);
-}
-
-static GValue *
-string_to_byte_array_gvalue (const char *str)
-{
- GByteArray *array;
- GValue *val;
-
- array = g_byte_array_sized_new (strlen (str));
- g_byte_array_append (array, (const guint8 *) str, strlen (str));
-
- val = g_slice_new0 (GValue);
- g_value_init (val, DBUS_TYPE_G_UCHAR_ARRAY);
- g_value_take_boxed (val, array);
-
- return val;
-}
-
-static GHashTable *
-fill_table (Option *test_options, GHashTable *table)
-{
- Option *opt;
-
- if (!table)
- table = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, destroy_gvalue);
- for (opt = test_options; opt->name; opt++) {
- g_hash_table_insert (table,
- (gpointer) opt->name,
- string_to_byte_array_gvalue (opt->value));
- }
- return table;
-}
-
-static Option generic_options[] = {
- { "new_subnet_mask", "255.255.255.0" },
- { "new_ip_address", "192.168.1.106" },
- { "new_network_number", "192.168.1.0" },
- { "interface", "eth0" },
- { "reason", "BOUND" },
- { "new_expiry", "1232324877" },
- { "new_dhcp_lease_time", "3600" },
- { "new_dhcp_server_identifier", "192.168.1.1" },
- { "new_routers", "192.168.1.1" },
- { "new_domain_name_servers", "216.254.95.2 216.231.41.2" },
- { "new_dhcp_message_type", "5" },
- { "new_broadcast_address", "192.168.1.255" },
- { "new_domain_search", "foobar.com blah.foobar.com" },
- { "new_host_name", "nmreallywhipsthe" },
- { "new_domain_name", "lamasass.com" },
- { "new_interface_mtu", "987" },
- { "new_static_routes", "10.1.1.5 10.1.1.1 100.99.88.56 10.1.1.1" },
- { NULL, NULL }
-};
-
-static void
-test_generic_options (gconstpointer test_data)
-{
- const char *client = test_data;
- GHashTable *options;
- NMIP4Config *ip4_config;
- 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";
- const char *expected_dns2 = "216.231.41.2";
- const char *expected_search1 = "foobar.com";
- const char *expected_search2 = "blah.foobar.com";
- const char *expected_route1_dest = "10.1.1.5";
- const char *expected_route1_gw = "10.1.1.1";
- const char *expected_route2_dest = "100.99.88.56";
- const char *expected_route2_gw = "10.1.1.1";
-
- options = fill_table (generic_options, NULL);
- ip4_config = nm_dhcp_manager_test_ip4_options_to_config (client, "eth0", options, "rebind");
- ASSERT (ip4_config != NULL,
- "dhcp-generic", "failed to parse DHCP4 options");
-
- /* IP4 address */
- ASSERT (nm_ip4_config_get_num_addresses (ip4_config) == 1,
- "dhcp-generic", "unexpected number of IP addresses");
- 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 (address->address == tmp,
- "dhcp-generic", "unexpected IP address");
- ASSERT (address->peer_address == 0,
- "dhcp-generic", "unexpected PTP address");
-
- 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_config_get_gateway (ip4_config) == tmp,
- "dhcp-generic", "unexpected IP gateway");
-
- ASSERT (nm_ip4_config_get_num_wins (ip4_config) == 0,
- "dhcp-generic", "unexpected number of WINS servers");
-
- ASSERT (nm_ip4_config_get_mtu (ip4_config) == 987,
- "dhcp-generic", "unexpected MTU");
-
- /* Domain searches */
- ASSERT (nm_ip4_config_get_num_searches (ip4_config) == 2,
- "dhcp-generic", "unexpected number of domain searches");
- ASSERT (strcmp (nm_ip4_config_get_search (ip4_config, 0), expected_search1) == 0,
- "dhcp-generic", "unexpected domain search #1");
- ASSERT (strcmp (nm_ip4_config_get_search (ip4_config, 1), expected_search2) == 0,
- "dhcp-generic", "unexpected domain search #2");
-
- /* DNS servers */
- ASSERT (nm_ip4_config_get_num_nameservers (ip4_config) == 2,
- "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,
- "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,
- "dhcp-generic", "unexpected domain name server #2");
-
- /* Routes */
- ASSERT (nm_ip4_config_get_num_routes (ip4_config) == 2,
- "dhcp-generic", "unexpected number of routes");
-
- /* Route #1 */
- 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 (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 (route->gateway == tmp,
- "dhcp-generic", "unexpected route #1 next hop");
-
- ASSERT (route->plen == 32,
- "dhcp-generic", "unexpected route #1 prefix");
- 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 (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 (route->gateway == tmp,
- "dhcp-generic", "unexpected route #2 next hop");
-
- ASSERT (route->plen == 32,
- "dhcp-generic", "unexpected route #2 prefix");
- ASSERT (route->metric == 0,
- "dhcp-generic", "unexpected route #2 metric");
-
- g_hash_table_destroy (options);
-}
-
-static Option wins_options[] = {
- { "new_netbios_name_servers", "63.12.199.5 150.4.88.120" },
- { NULL, NULL }
-};
-
-static void
-test_wins_options (gconstpointer test_data)
-{
- const char *client = test_data;
- GHashTable *options;
- NMIP4Config *ip4_config;
- const NMPlatformIP4Address *address;
- guint32 tmp;
- const char *expected_wins1 = "63.12.199.5";
- const char *expected_wins2 = "150.4.88.120";
-
- options = fill_table (generic_options, NULL);
- options = fill_table (wins_options, options);
-
- ip4_config = nm_dhcp_manager_test_ip4_options_to_config (client, "eth0", options, "rebind");
- ASSERT (ip4_config != NULL,
- "dhcp-wins", "failed to parse DHCP4 options");
-
- /* IP4 address */
- ASSERT (nm_ip4_config_get_num_addresses (ip4_config) == 1,
- "dhcp-wins", "unexpected number of IP addresses");
- 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,
- "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,
- "dhcp-wins", "unexpected WINS server #1");
-
- g_hash_table_destroy (options);
-}
-
-static void
-ip4_test_route (const char *test,
- NMIP4Config *ip4_config,
- guint route_num,
- const char *expected_dest,
- const char *expected_gw,
- guint expected_prefix)
-{
- 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 (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 (route->gateway == tmp,
- test, "unexpected route %d next hop", route_num + 1);
-
- ASSERT (route->plen == expected_prefix,
- test, "unexpected route %d prefix", route_num + 1);
- ASSERT (route->metric == 0,
- test, "unexpected route %d metric", route_num + 1);
-}
-
-static void
-ip4_test_gateway (const char *test,
- NMIP4Config *ip4_config,
- const char *expected_gw)
-{
- guint32 tmp;
-
- ASSERT (nm_ip4_config_get_num_addresses (ip4_config) == 1,
- test, "unexpected number of IP addresses");
- ASSERT (inet_pton (AF_INET, expected_gw, &tmp) > 0,
- test, "couldn't convert expected IP gateway");
- ASSERT (nm_ip4_config_get_gateway (ip4_config) == tmp,
- test, "unexpected IP gateway");
-}
-
-static void
-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";
- const char *expected_route1_gw = "192.168.1.1";
- const char *expected_route2_dest = "10.0.0.0";
- const char *expected_route2_gw = "10.17.66.41";
- static Option data[] = {
- /* dhclient custom format */
- { "new_rfc3442_classless_static_routes", "24 192 168 10 192 168 1 1 8 10 10 17 66 41" },
- { NULL, NULL }
- };
-
- options = fill_table (generic_options, NULL);
- options = fill_table (data, options);
-
- ip4_config = nm_dhcp_manager_test_ip4_options_to_config (client, "eth0", options, "rebind");
- ASSERT (ip4_config != NULL,
- "dhcp-classless-1", "failed to parse DHCP4 options");
-
- /* IP4 routes */
- ASSERT (nm_ip4_config_get_num_routes (ip4_config) == 2,
- "dhcp-classless-1", "unexpected number of IP routes");
- ip4_test_route ("dhcp-classless-1", ip4_config, 0,
- expected_route1_dest, expected_route1_gw, 24);
- ip4_test_route ("dhcp-classless-1", ip4_config, 1,
- expected_route2_dest, expected_route2_gw, 8);
-
- g_hash_table_destroy (options);
-}
-
-static void
-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";
- const char *expected_route1_gw = "192.168.1.1";
- const char *expected_route2_dest = "10.0.0.0";
- const char *expected_route2_gw = "10.17.66.41";
- static Option data[] = {
- /* dhcpcd format */
- { "new_classless_static_routes", "192.168.10.0/24 192.168.1.1 10.0.0.0/8 10.17.66.41" },
- { NULL, NULL }
- };
-
- options = fill_table (generic_options, NULL);
- options = fill_table (data, options);
-
- ip4_config = nm_dhcp_manager_test_ip4_options_to_config (client, "eth0", options, "rebind");
- ASSERT (ip4_config != NULL,
- "dhcp-classless-2", "failed to parse DHCP4 options");
-
- /* IP4 routes */
- ASSERT (nm_ip4_config_get_num_routes (ip4_config) == 2,
- "dhcp-classless-2", "unexpected number of IP routes");
- ip4_test_route ("dhcp-classless-2", ip4_config, 0,
- expected_route1_dest, expected_route1_gw, 24);
- ip4_test_route ("dhcp-classless-2", ip4_config, 1,
- expected_route2_dest, expected_route2_gw, 8);
-
- g_hash_table_destroy (options);
-}
-
-static void
-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";
- const char *expected_route1_gw = "192.168.0.113";
- const char *expected_route2_dest = "2.0.0.0";
- const char *expected_route2_gw = "10.34.255.6";
- const char *expected_gateway = "192.168.0.113";
- static Option data[] = {
- /* Fedora dhclient format */
- { "new_classless_static_routes", "0 192.168.0.113 25.129.210.177.132 192.168.0.113 7.2 10.34.255.6" },
- { NULL, NULL }
- };
-
- options = fill_table (generic_options, NULL);
- options = fill_table (data, options);
-
- ip4_config = nm_dhcp_manager_test_ip4_options_to_config (client, "eth0", options, "rebind");
- ASSERT (ip4_config != NULL,
- "dhcp-fedora-dhclient-classless", "failed to parse DHCP4 options");
-
- /* IP4 routes */
- ASSERT (nm_ip4_config_get_num_routes (ip4_config) == 2,
- "dhcp-fedora-dhclient-classless", "unexpected number of IP routes");
- ip4_test_route ("dhcp-fedora-dhclient-classless", ip4_config, 0,
- expected_route1_dest, expected_route1_gw, 25);
- ip4_test_route ("dhcp-fedora-dhclient-classless", ip4_config, 1,
- expected_route2_dest, expected_route2_gw, 7);
-
- /* Gateway */
- ip4_test_gateway ("dhcp-fedora-dhclient-classless", ip4_config, expected_gateway);
-
- g_hash_table_destroy (options);
-}
-
-static void
-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";
- const char *expected_route1_gw = "192.168.1.1";
- static Option data[] = {
- /* dhclient format */
- { "new_rfc3442_classless_static_routes", "24 192 168 10 192 168 1 1 45 10 17 66 41" },
- { NULL, NULL }
- };
-
- 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,
- "dhcp-dhclient-classless-invalid-1", "unexpected number of IP routes");
-
- ip4_test_route ("dhcp-dhclient-classless-invalid-1", ip4_config, 0,
- expected_route1_dest, expected_route1_gw, 24);
-
- g_hash_table_destroy (options);
-}
-
-static void
-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";
- const char *expected_route1_gw = "10.1.1.1";
- const char *expected_route2_dest = "100.99.88.56";
- const char *expected_route2_gw = "10.1.1.1";
- static Option data[] = {
- /* dhcpcd format */
- { "new_classless_static_routes", "192.168.10.0/24 192.168.1.1 10.0.adfadf/44 10.17.66.41" },
- { NULL, NULL }
- };
-
- 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.
- */
- ASSERT (nm_ip4_config_get_num_routes (ip4_config) == 2,
- "dhcp-dhcpcdp-classless-invalid-1", "unexpected number of routes");
- ip4_test_route ("dhcp-dhcpcdp-classless-invalid-1", ip4_config, 0,
- expected_route1_dest, expected_route1_gw, 32);
- ip4_test_route ("dhcp-dhcpcdp-classless-invalid-1", ip4_config, 1,
- expected_route2_dest, expected_route2_gw, 32);
-
- g_hash_table_destroy (options);
-}
-
-static void
-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";
- const char *expected_route1_gw = "10.1.1.1";
- const char *expected_route2_dest = "100.99.88.56";
- const char *expected_route2_gw = "10.1.1.1";
- static Option data[] = {
- { "new_rfc3442_classless_static_routes", "45 10 17 66 41 24 192 168 10 192 168 1 1" },
- { NULL, NULL }
- };
-
- 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.
- */
- ASSERT (nm_ip4_config_get_num_routes (ip4_config) == 2,
- "dhcp-dhclient-classless-invalid-2", "unexpected number of routes");
- ip4_test_route ("dhcp-dhclient-classless-invalid-2", ip4_config, 0,
- expected_route1_dest, expected_route1_gw, 32);
- ip4_test_route ("dhcp-dhclient-classless-invalid-2", ip4_config, 1,
- expected_route2_dest, expected_route2_gw, 32);
-
- g_hash_table_destroy (options);
-}
-
-static void
-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";
- const char *expected_route1_gw = "10.1.1.1";
- const char *expected_route2_dest = "100.99.88.56";
- const char *expected_route2_gw = "10.1.1.1";
- static Option data[] = {
- { "new_classless_static_routes", "10.0.adfadf/44 10.17.66.41 192.168.10.0/24 192.168.1.1" },
- { NULL, NULL }
- };
-
- 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.
- */
-
- /* Routes */
- ASSERT (nm_ip4_config_get_num_routes (ip4_config) == 2,
- "dhcp-dhcpcd-classless-invalid-2", "unexpected number of routes");
- ip4_test_route ("dhcp-dhcpcd-classless-invalid-2", ip4_config, 0,
- expected_route1_dest, expected_route1_gw, 32);
- ip4_test_route ("dhcp-dhcpcd-classless-invalid-2", ip4_config, 1,
- expected_route2_dest, expected_route2_gw, 32);
-
- g_hash_table_destroy (options);
-}
-
-static void
-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";
- const char *expected_route1_gw = "192.168.1.1";
- static Option data[] = {
- { "new_rfc3442_classless_static_routes", "24 192 168 10 192 168 1 1 32 128 10 17 66 41" },
- { NULL, NULL }
- };
-
- 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,
- "dhcp-dhclient-classless-invalid-3", "unexpected number of IP routes");
- ip4_test_route ("dhcp-dhclient-classless-invalid-3", ip4_config, 0,
- expected_route1_dest, expected_route1_gw, 24);
-
- g_hash_table_destroy (options);
-}
-
-static void
-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";
- const char *expected_route1_gw = "192.168.1.1";
- static Option data[] = {
- { "new_classless_static_routes", "192.168.10.0/24 192.168.1.1 128/32 10.17.66.41" },
- { NULL, NULL }
- };
-
- 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,
- "dhcp-dhcpcd-classless-invalid-3", "unexpected number of IP routes");
- ip4_test_route ("dhcp-dhcpcd-classless-invalid-3", ip4_config, 0,
- expected_route1_dest, expected_route1_gw, 24);
-
- g_hash_table_destroy (options);
-}
-
-static void
-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";
- const char *expected_route1_gw = "192.168.1.1";
- const char *expected_gateway = "192.2.3.4";
- static Option data[] = {
- { "new_rfc3442_classless_static_routes", "24 192 168 10 192 168 1 1 0 192 2 3 4" },
- { NULL, NULL }
- };
-
- options = fill_table (generic_options, NULL);
- options = fill_table (data, options);
-
- ip4_config = nm_dhcp_manager_test_ip4_options_to_config (client, "eth0", options, "rebind");
- ASSERT (ip4_config != NULL,
- "dhcp-dhclient-classless-gateway", "failed to parse DHCP4 options");
-
- /* IP4 routes */
- ASSERT (nm_ip4_config_get_num_routes (ip4_config) == 1,
- "dhcp-dhclient-classless-gateway", "unexpected number of IP routes");
- ip4_test_route ("dhcp-dhclient-classless-gateway", ip4_config, 0,
- expected_route1_dest, expected_route1_gw, 24);
-
- /* Gateway */
- ip4_test_gateway ("dhcp-dhclient-classless-gateway", ip4_config, expected_gateway);
-
- g_hash_table_destroy (options);
-}
-
-static void
-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";
- const char *expected_route1_gw = "192.168.1.1";
- const char *expected_gateway = "192.2.3.4";
- static Option data[] = {
- { "new_classless_static_routes", "192.168.10.0/24 192.168.1.1 0.0.0.0/0 192.2.3.4" },
- { NULL, NULL }
- };
-
- options = fill_table (generic_options, NULL);
- options = fill_table (data, options);
-
- ip4_config = nm_dhcp_manager_test_ip4_options_to_config (client, "eth0", options, "rebind");
- ASSERT (ip4_config != NULL,
- "dhcp-dhcpcd-classless-gateway", "failed to parse DHCP4 options");
-
- /* IP4 routes */
- ASSERT (nm_ip4_config_get_num_routes (ip4_config) == 1,
- "dhcp-dhcpcd-classless-gateway", "unexpected number of IP routes");
- ip4_test_route ("dhcp-dhcpcd-classless-gateway", ip4_config, 0,
- expected_route1_dest, expected_route1_gw, 24);
-
- /* Gateway */
- ip4_test_gateway ("dhcp-dhcpcd-classless-gateway", ip4_config, expected_gateway);
-
- g_hash_table_destroy (options);
-}
-
-static Option escaped_searches_options[] = {
- { "new_domain_search", "host1\\032host2\\032host3" },
- { NULL, NULL }
-};
-
-static void
-test_escaped_domain_searches (gconstpointer test_data)
-{
- const char *client = test_data;
- GHashTable *options;
- NMIP4Config *ip4_config;
- const char *expected_search0 = "host1";
- const char *expected_search1 = "host2";
- const char *expected_search2 = "host3";
-
- options = fill_table (generic_options, NULL);
- options = fill_table (escaped_searches_options, options);
-
- ip4_config = nm_dhcp_manager_test_ip4_options_to_config (client, "eth0", options, "rebind");
- ASSERT (ip4_config != NULL,
- "dhcp-escaped-domain-searches", "failed to parse DHCP4 options");
-
- /* domain searches */
- ASSERT (nm_ip4_config_get_num_searches (ip4_config) == 3,
- "dhcp-escaped-domain-searches", "unexpected number of searches");
- ASSERT (!strcmp (nm_ip4_config_get_search (ip4_config, 0), expected_search0),
- "dhcp-escaped-domain-searches", "unexpected domain search #1");
- ASSERT (!strcmp (nm_ip4_config_get_search (ip4_config, 1), expected_search1),
- "dhcp-escaped-domain-searches", "unexpected domain search #1");
- ASSERT (!strcmp (nm_ip4_config_get_search (ip4_config, 2), expected_search2),
- "dhcp-escaped-domain-searches", "unexpected domain search #1");
-
- g_hash_table_destroy (options);
-}
-
-static Option invalid_escaped_searches_options[] = {
- { "new_domain_search", "host1\\aahost2\\032host3" },
- { NULL, NULL }
-};
-
-static void
-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,
- "dhcp-invalid-escaped-domain-searches", "unexpected domain searches");
-
- g_hash_table_destroy (options);
-}
-
-static void
-test_ip4_missing_prefix (const char *client, const char *ip, guint32 expected_prefix)
-{
- GHashTable *options;
- NMIP4Config *ip4_config;
- const NMPlatformIP4Address *address;
-
- options = fill_table (generic_options, NULL);
- g_hash_table_insert (options, "new_ip_address", string_to_byte_array_gvalue (ip));
- g_hash_table_remove (options, "new_subnet_mask");
-
- ip4_config = nm_dhcp_manager_test_ip4_options_to_config (client, "eth0", options, "rebind");
- ASSERT (ip4_config != NULL,
- "dhcp-ip4-missing-prefix", "failed to parse DHCP4 options");
-
- ASSERT (nm_ip4_config_get_num_addresses (ip4_config) == 1,
- "dhcp-ip4-missing-prefix", "unexpected number of IP4 addresses (not 1)");
-
- address = nm_ip4_config_get_address (ip4_config, 0);
- ASSERT (address,
- "dhcp-ip4-missing-prefix", "missing IP4 address #1");
-
- ASSERT (address->plen == expected_prefix,
- "dhcp-ip4-missing-prefix", "unexpected IP4 address prefix %d (expected %d)",
- address->plen, expected_prefix);
-
- g_hash_table_destroy (options);
-}
-
-static void
-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;
- 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
- * doesn't send the subnet mask.
- */
-
- options = fill_table (generic_options, NULL);
- g_hash_table_insert (options, "new_ip_address", string_to_byte_array_gvalue ("172.16.54.22"));
- g_hash_table_insert (options, "new_subnet_mask", string_to_byte_array_gvalue ("255.255.252.0"));
-
- ip4_config = nm_dhcp_manager_test_ip4_options_to_config (client, "eth0", options, "rebind");
- ASSERT (ip4_config != NULL,
- "dhcp-ip4-prefix-classless", "failed to parse DHCP4 options");
-
- ASSERT (nm_ip4_config_get_num_addresses (ip4_config) == 1,
- "dhcp-ip4-prefix-classless", "unexpected number of IP4 addresses (not 1)");
-
- address = nm_ip4_config_get_address (ip4_config, 0);
- ASSERT (address,
- "dhcp-ip4-prefix-classless", "missing IP4 address #1");
-
- ASSERT (address->plen == 22,
- "dhcp-ip4-prefix-classless", "unexpected IP4 address prefix %d (expected 22)",
- address->plen);
-
- g_hash_table_destroy (options);
-}
-
-NMTST_DEFINE ();
-
-int main (int argc, char **argv)
-{
- char *path;
- const char *clients[2][2] = { {DHCLIENT_PATH, "dhclient"}, {DHCPCD_PATH, "dhcpcd"} };
- guint32 i;
-
- nmtst_init_assert_logging (&argc, &argv);
- nm_logging_setup ("WARN", "DEFAULT", NULL, NULL);
-
- for (i = 0; i < 2; i++) {
- const char *client_path = clients[i][0];
- const char *client = clients[i][1];
-
- if (!client_path || !strlen (client_path))
- continue;
-
- 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);
- }
-
- return g_test_run ();
-}
-
diff --git a/src/tests/test-general-with-expect.c b/src/tests/test-general-with-expect.c
new file mode 100644
index 000000000..f5010dae4
--- /dev/null
+++ b/src/tests/test-general-with-expect.c
@@ -0,0 +1,349 @@
+/* -*- 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 "config.h"
+
+#include <glib.h>
+#include <string.h>
+#include <errno.h>
+#include <netinet/ether.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+
+#include "NetworkManagerUtils.h"
+#include "nm-logging.h"
+
+#include "nm-test-utils.h"
+
+/*******************************************/
+
+struct test_nm_utils_kill_child_async_data
+{
+ GMainLoop *loop;
+ pid_t pid;
+ gboolean called;
+ gboolean expected_success;
+ const int *expected_child_status;
+};
+
+static void
+test_nm_utils_kill_child_async_cb (pid_t pid, gboolean success, int child_status, void *user_data)
+{
+ struct test_nm_utils_kill_child_async_data *data = user_data;
+
+ g_assert (success == !!data->expected_success);
+ g_assert (pid == data->pid);
+ if (data->expected_child_status)
+ g_assert_cmpint (*data->expected_child_status, ==, child_status);
+ if (!success)
+ g_assert_cmpint (child_status, ==, -1);
+
+ data->called = TRUE;
+
+ g_assert (data->loop);
+ g_main_loop_quit (data->loop);
+}
+
+static gboolean
+test_nm_utils_kill_child_async_fail_cb (void *user_data)
+{
+ g_assert_not_reached ();
+}
+
+static void
+test_nm_utils_kill_child_async_do (const char *name, pid_t pid, int sig, guint32 wait_before_kill_msec, gboolean expected_success, const int *expected_child_status)
+{
+ gboolean success;
+ struct test_nm_utils_kill_child_async_data data = { };
+ int timeout_id;
+
+ data.pid = pid;
+ data.expected_success = expected_success;
+ data.expected_child_status = expected_child_status;
+
+ nm_utils_kill_child_async (pid, sig, LOGD_CORE, name, wait_before_kill_msec, test_nm_utils_kill_child_async_cb, &data);
+ g_assert (!data.called);
+
+ timeout_id = g_timeout_add_seconds (5, test_nm_utils_kill_child_async_fail_cb, &data);
+
+ data.loop = g_main_loop_new (NULL, FALSE);
+ g_main_run (data.loop);
+
+ g_assert (data.called);
+ success = g_source_remove (timeout_id);
+ g_assert (success);
+
+ g_main_destroy (data.loop);
+}
+
+static void
+test_nm_utils_kill_child_sync_do (const char *name, pid_t pid, int sig, guint32 wait_before_kill_msec, gboolean expected_success, const int *expected_child_status)
+{
+ gboolean success;
+ int child_status = -1;
+
+ success = nm_utils_kill_child_sync (pid, sig, LOGD_CORE, name, &child_status, wait_before_kill_msec, 0);
+ g_assert (success == !!expected_success);
+ if (expected_child_status)
+ g_assert_cmpint (*expected_child_status, ==, child_status);
+
+ g_test_assert_expected_messages ();
+}
+
+static pid_t
+test_nm_utils_kill_child_spawn (char **argv, gboolean do_not_reap_child)
+{
+ GError *error = NULL;
+ int success;
+ GPid child_pid;
+
+ success = g_spawn_async (NULL,
+ argv,
+ NULL,
+ G_SPAWN_SEARCH_PATH | (do_not_reap_child ? G_SPAWN_DO_NOT_REAP_CHILD : 0),
+ NULL,
+ NULL,
+ &child_pid,
+ &error);
+ g_assert (success && !error);
+ return child_pid;
+}
+
+static pid_t
+test_nm_utils_kill_child_create_and_join_pgroup (void)
+{
+ int err, tmp = 0;
+ int pipefd[2];
+ pid_t pgid;
+
+ err = pipe (pipefd);
+ g_assert (err == 0);
+
+ pgid = fork();
+ if (pgid < 0) {
+ g_assert_not_reached ();
+ return pgid;
+ }
+
+ if (pgid == 0) {
+ /* child process... */
+ close (pipefd[0]);
+
+ err = setpgid (0, 0);
+ g_assert (err == 0);
+
+ err = write (pipefd[1], &tmp, sizeof (tmp));
+ g_assert (err == sizeof (tmp));
+
+ close (pipefd[1]);
+ exit (0);
+ }
+
+ close (pipefd[1]);
+
+ err = read (pipefd[0], &tmp, sizeof (tmp));
+ g_assert (err == sizeof (tmp));
+
+ close (pipefd[0]);
+
+ err = setpgid (0, pgid);
+ g_assert (err == 0);
+
+
+ do {
+ err = waitpid (pgid, &tmp, 0);
+ } while (err == -1 && errno == EINTR);
+ g_assert (err == pgid);
+ g_assert (WIFEXITED (tmp) && WEXITSTATUS(tmp) == 0);
+
+ return pgid;
+}
+
+#define TEST_TOKEN "nm_test_kill_child_process"
+
+static void
+test_nm_utils_kill_child (void)
+{
+ int err;
+ GLogLevelFlags fatal_mask;
+ char *argv_watchdog[] = {
+ "sh",
+ "-c",
+ "sleep 4; "
+ "kill -KILL 0; #watchdog for #" TEST_TOKEN,
+ NULL,
+ };
+ char *argv1[] = {
+ "sh",
+ "-c",
+ "trap \"sleep 0.3; exit 10\" EXIT; "
+ "sleep 100000; exit $? #" TEST_TOKEN,
+ NULL,
+ };
+ char *argv2[] = {
+ "sh",
+ "-c",
+ "exit 47; #" TEST_TOKEN,
+ NULL,
+ };
+ char *argv3[] = {
+ "sh",
+ "-c",
+ "trap \"exit 47\" TERM; while true; do :; done; #" TEST_TOKEN,
+ NULL,
+ };
+ char *argv4[] = {
+ "sh",
+ "-c",
+ "trap \"while true; do :; done\" TERM; while true; do :; done; #" TEST_TOKEN,
+ NULL,
+ };
+ pid_t gpid;
+ pid_t pid1a_1, pid1a_2, pid1a_3, pid2a, pid3a, pid4a;
+ pid_t pid1s_1, pid1s_2, pid1s_3, pid2s, pid3s, pid4s;
+
+ const int expected_exit_47 = 12032; /* exit with status 47 */
+ const int expected_signal_TERM = SIGTERM;
+ const int expected_signal_KILL = SIGKILL;
+
+ gpid = test_nm_utils_kill_child_create_and_join_pgroup ();
+
+ test_nm_utils_kill_child_spawn (argv_watchdog, FALSE);
+
+ pid1s_1 = test_nm_utils_kill_child_spawn (argv1, TRUE);
+ pid1s_2 = test_nm_utils_kill_child_spawn (argv1, TRUE);
+ pid1s_3 = test_nm_utils_kill_child_spawn (argv1, TRUE);
+ pid2s = test_nm_utils_kill_child_spawn (argv2, TRUE);
+ pid3s = test_nm_utils_kill_child_spawn (argv3, TRUE);
+ pid4s = test_nm_utils_kill_child_spawn (argv4, TRUE);
+
+ pid1a_1 = test_nm_utils_kill_child_spawn (argv1, TRUE);
+ pid1a_2 = test_nm_utils_kill_child_spawn (argv1, TRUE);
+ pid1a_3 = test_nm_utils_kill_child_spawn (argv1, TRUE);
+ pid2a = test_nm_utils_kill_child_spawn (argv2, TRUE);
+ pid3a = test_nm_utils_kill_child_spawn (argv3, TRUE);
+ pid4a = test_nm_utils_kill_child_spawn (argv4, TRUE);
+
+ /* give processes time to start (and potentially block signals) ... */
+ g_usleep (G_USEC_PER_SEC / 10);
+
+
+ fatal_mask = g_log_set_always_fatal (G_LOG_FATAL_MASK);
+
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_DEBUG, "*kill child process 'test-s-1-1' (*): waiting up to 500 milliseconds for process to terminate normally after sending SIGTERM (15)...");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_DEBUG, "*kill child process 'test-s-1-1' (*): after sending SIGTERM (15), process * exited by signal 15 (* usec elapsed)");
+ test_nm_utils_kill_child_sync_do ("test-s-1-1", pid1s_1, SIGTERM, 1000 / 2, TRUE, &expected_signal_TERM);
+
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_DEBUG, "*kill child process 'test-s-1-2' (*): waiting for process to terminate after sending SIGKILL (9)...");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_DEBUG, "*kill child process 'test-s-1-2' (*): after sending SIGKILL (9), process * exited by signal 9 (* usec elapsed)");
+ test_nm_utils_kill_child_sync_do ("test-s-1-2", pid1s_2, SIGKILL, 1000 / 2, TRUE, &expected_signal_KILL);
+
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_DEBUG, "*kill child process 'test-s-1-3' (*): waiting up to 1 milliseconds for process to terminate normally after sending no signal (0)...");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_DEBUG, "*kill child process 'test-s-1-3' (*): sending SIGKILL...");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_DEBUG, "*kill child process 'test-s-1-3' (*): after sending no signal (0) and SIGKILL, process * exited by signal 9 (* usec elapsed)");
+ test_nm_utils_kill_child_sync_do ("test-s-1-3", pid1s_3, 0, 1, TRUE, &expected_signal_KILL);
+
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_DEBUG, "*kill child process 'test-s-2' (*): process * already terminated normally with status 47");
+ test_nm_utils_kill_child_sync_do ("test-s-2", pid2s, SIGTERM, 1000 / 2, TRUE, &expected_exit_47);
+
+ /* send invalid signal. */
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING, "*kill child process 'test-s-3-0' (*): failed to send Unexpected signal: Invalid argument (22)");
+ test_nm_utils_kill_child_sync_do ("test-s-3-0", pid3s, -1, 0, FALSE, NULL);
+
+ /* really kill pid3s */
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_DEBUG, "*kill child process 'test-s-3-1' (*): waiting up to 500 milliseconds for process to terminate normally after sending SIGTERM (15)...");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_DEBUG, "*kill child process 'test-s-3-1' (*): after sending SIGTERM (15), process * exited normally with status 47 (* usec elapsed)");
+ test_nm_utils_kill_child_sync_do ("test-s-3-1", pid3s, SIGTERM, 1000 / 2, TRUE, &expected_exit_47);
+
+ /* pid3s should not be a valid process, hence the call should fail. Note, that there
+ * is a race here. */
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING, "*kill child process 'test-s-3-2' (*): failed due to unexpected return value -1 by waitpid (No child processes, 10) after sending no signal (0)");
+ test_nm_utils_kill_child_sync_do ("test-s-3-2", pid3s, 0, 0, FALSE, NULL);
+
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_DEBUG, "*kill child process 'test-s-4' (*): waiting up to 1 milliseconds for process to terminate normally after sending SIGTERM (15)...");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_DEBUG, "*kill child process 'test-s-4' (*): sending SIGKILL...");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_DEBUG, "*kill child process 'test-s-4' (*): after sending SIGTERM (15) and SIGKILL, process * exited by signal 9 (* usec elapsed)");
+ test_nm_utils_kill_child_sync_do ("test-s-4", pid4s, SIGTERM, 1, TRUE, &expected_signal_KILL);
+
+
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_DEBUG, "*kill child process 'test-a-1-1' (*): wait for process to terminate after sending SIGTERM (15) (send SIGKILL in 500 milliseconds)...");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_DEBUG, "*kill child process 'test-a-1-1' (*): terminated by signal 15 (* usec elapsed)");
+ test_nm_utils_kill_child_async_do ("test-a-1-1", pid1a_1, SIGTERM, 1000 / 2, TRUE, &expected_signal_TERM);
+
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_DEBUG, "*kill child process 'test-a-1-2' (*): wait for process to terminate after sending SIGKILL (9)...");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_DEBUG, "*kill child process 'test-a-1-2' (*): terminated by signal 9 (* usec elapsed)");
+ test_nm_utils_kill_child_async_do ("test-a-1-2", pid1a_2, SIGKILL, 1000 / 2, TRUE, &expected_signal_KILL);
+
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_DEBUG, "*kill child process 'test-a-1-3' (*): wait for process to terminate after sending no signal (0) (send SIGKILL in 1 milliseconds)...");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_DEBUG, "*kill child process 'test-a-1-3' (*): process not terminated after * usec. Sending SIGKILL signal");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_DEBUG, "*kill child process 'test-a-1-3' (*): terminated by signal 9 (* usec elapsed)");
+ test_nm_utils_kill_child_async_do ("test-a-1-3", pid1a_3, 0, 1, TRUE, &expected_signal_KILL);
+
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_DEBUG, "*kill child process 'test-a-2' (*): process * already terminated normally with status 47");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_DEBUG, "*kill child process 'test-a-2' (*): invoke callback: terminated normally with status 47");
+ test_nm_utils_kill_child_async_do ("test-a-2", pid2a, SIGTERM, 1000 / 2, TRUE, &expected_exit_47);
+
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING, "*kill child process 'test-a-3-0' (*): unexpected error sending Unexpected signal: Invalid argument (22)");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_DEBUG, "*kill child process 'test-a-3-0' (*): invoke callback: killing child failed");
+ /* coverity[negative_returns] */
+ test_nm_utils_kill_child_async_do ("test-a-3-0", pid3a, -1, 1000 / 2, FALSE, NULL);
+
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_DEBUG, "*kill child process 'test-a-3-1' (*): wait for process to terminate after sending SIGTERM (15) (send SIGKILL in 500 milliseconds)...");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_DEBUG, "*kill child process 'test-a-3-1' (*): terminated normally with status 47 (* usec elapsed)");
+ test_nm_utils_kill_child_async_do ("test-a-3-1", pid3a, SIGTERM, 1000 / 2, TRUE, &expected_exit_47);
+
+ /* pid3a should not be a valid process, hence the call should fail. Note, that there
+ * is a race here. */
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING, "*kill child process 'test-a-3-2' (*): failed due to unexpected return value -1 by waitpid (No child processes, 10) after sending no signal (0)");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_DEBUG, "*kill child process 'test-a-3-2' (*): invoke callback: killing child failed");
+ test_nm_utils_kill_child_async_do ("test-a-3-2", pid3a, 0, 0, FALSE, NULL);
+
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_DEBUG, "*kill child process 'test-a-4' (*): wait for process to terminate after sending SIGTERM (15) (send SIGKILL in 1 milliseconds)...");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_DEBUG, "*kill child process 'test-a-4' (*): process not terminated after * usec. Sending SIGKILL signal");
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_DEBUG, "*kill child process 'test-a-4' (*): terminated by signal 9 (* usec elapsed)");
+ test_nm_utils_kill_child_async_do ("test-a-4", pid4a, SIGTERM, 1, TRUE, &expected_signal_KILL);
+
+ err = setpgid (0, 0);
+ g_assert (err == 0);
+
+ kill (-gpid, SIGKILL);
+
+ g_log_set_always_fatal (fatal_mask);
+
+ g_test_assert_expected_messages ();
+}
+
+
+/*******************************************/
+
+NMTST_DEFINE ();
+
+int
+main (int argc, char **argv)
+{
+ nmtst_init_assert_logging (&argc, &argv);
+
+ nm_logging_setup ("DEBUG", "DEFAULT", NULL, NULL);
+
+ g_test_add_func ("/general/nm_utils_kill_child", test_nm_utils_kill_child);
+
+ return g_test_run ();
+}
+
diff --git a/src/tests/test-general.c b/src/tests/test-general.c
index 11c03f0db..f118156b3 100644
--- a/src/tests/test-general.c
+++ b/src/tests/test-general.c
@@ -18,14 +18,17 @@
*
*/
+#include "config.h"
+
#include <glib.h>
#include <string.h>
#include <errno.h>
-#include <netinet/ether.h>
#include "NetworkManagerUtils.h"
-#include "nm-utils.h"
+#include "nm-logging.h"
+#include "nm-core-internal.h"
+#include "nm-test-utils.h"
static void
test_nm_utils_ascii_str_to_int64_check (const char *str, guint base, gint64 min,
@@ -66,7 +69,7 @@ test_nm_utils_ascii_str_to_int64_do (const char *str, guint base, gint64 min,
NULL,
};
const char **ws_pre, **ws_post, **null;
- int i;
+ guint i;
if (str == NULL || exp_errno != 0) {
test_nm_utils_ascii_str_to_int64_check (str, base, min, max, fallback, exp_errno, exp_val);
@@ -179,51 +182,104 @@ ip6_address_clear_host_address_reference (struct in6_addr *dst, struct in6_addr
}
static void
-_randomize_in6_addr (struct in6_addr *addr, GRand *rand)
+_randomize_in6_addr (struct in6_addr *addr, GRand *r)
{
int i;
for (i=0; i < 4; i++)
- ((guint32 *)addr)[i] = g_rand_int (rand);
+ ((guint32 *)addr)[i] = g_rand_int (r);
}
static void
test_nm_utils_ip6_address_clear_host_address (void)
{
- GRand *rand = g_rand_new ();
+ GRand *r = g_rand_new ();
int plen, i;
- g_rand_set_seed (rand, 0);
+ g_rand_set_seed (r, 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);
+ _randomize_in6_addr (&addr_src, r);
+ _randomize_in6_addr (&addr_ref, r);
+ _randomize_in6_addr (&addr1, r);
+ _randomize_in6_addr (&addr2, r);
addr1 = addr_src;
ip6_address_clear_host_address_reference (&addr_ref, &addr1, plen);
- _randomize_in6_addr (&addr1, rand);
- _randomize_in6_addr (&addr2, rand);
+ _randomize_in6_addr (&addr1, r);
+ _randomize_in6_addr (&addr2, r);
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);
+ _randomize_in6_addr (&addr1, r);
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);
+ g_rand_free (r);
+}
+
+
+static void
+test_nm_utils_log_connection_diff (void)
+{
+ NMConnection *connection;
+ NMConnection *connection2;
+
+ /* if logging is disabled (the default), nm_utils_log_connection_diff() returns
+ * early without doing anything. Hence, in the normal testing, this test does nothing.
+ * It only gets interesting, when run verbosely with NMTST_DEBUG=debug ... */
+
+ nm_log (LOGL_DEBUG, LOGD_CORE, "START TEST test_nm_utils_log_connection_diff...");
+
+ connection = nm_simple_connection_new ();
+ nm_connection_add_setting (connection, nm_setting_connection_new ());
+ nm_utils_log_connection_diff (connection, NULL, LOGL_DEBUG, LOGD_CORE, "test1", ">>> ");
+
+ nm_connection_add_setting (connection, nm_setting_wired_new ());
+ nm_utils_log_connection_diff (connection, NULL, LOGL_DEBUG, LOGD_CORE, "test2", ">>> ");
+
+ connection2 = nm_simple_connection_new_clone (connection);
+ nm_utils_log_connection_diff (connection, connection2, LOGL_DEBUG, LOGD_CORE, "test3", ">>> ");
+
+ g_object_set (nm_connection_get_setting_connection (connection),
+ NM_SETTING_CONNECTION_ID, "id",
+ NM_SETTING_CONNECTION_UUID, "uuid",
+ NULL);
+ g_object_set (nm_connection_get_setting_connection (connection2),
+ NM_SETTING_CONNECTION_ID, "id2",
+ NM_SETTING_CONNECTION_MASTER, "master2",
+ NULL);
+ nm_utils_log_connection_diff (connection, connection2, LOGL_DEBUG, LOGD_CORE, "test4", ">>> ");
+
+ nm_connection_add_setting (connection, nm_setting_802_1x_new ());
+ nm_utils_log_connection_diff (connection, connection2, LOGL_DEBUG, LOGD_CORE, "test5", ">>> ");
+
+ g_object_set (nm_connection_get_setting_802_1x (connection),
+ NM_SETTING_802_1X_PASSWORD, "id2",
+ NM_SETTING_802_1X_PASSWORD_FLAGS, NM_SETTING_SECRET_FLAG_NOT_SAVED,
+ NULL);
+ nm_utils_log_connection_diff (connection, NULL, LOGL_DEBUG, LOGD_CORE, "test6", ">>> ");
+ nm_utils_log_connection_diff (connection, connection2, LOGL_DEBUG, LOGD_CORE, "test7", ">>> ");
+ nm_utils_log_connection_diff (connection2, connection, LOGL_DEBUG, LOGD_CORE, "test8", ">>> ");
+
+ g_clear_object (&connection);
+ g_clear_object (&connection2);
+
+ connection = nmtst_create_minimal_connection ("id-vpn-1", NULL, NM_SETTING_VPN_SETTING_NAME, NULL);
+ nm_utils_log_connection_diff (connection, NULL, LOGL_DEBUG, LOGD_CORE, "test-vpn-1", ">>> ");
+
+ g_clear_object (&connection);
}
/*******************************************/
@@ -234,11 +290,10 @@ _match_connection_new (void)
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
- NMSettingIP4Config *s_ip4;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip4, *s_ip6;
char *uuid;
- connection = nm_connection_new ();
+ connection = nm_simple_connection_new ();
s_con = (NMSettingConnection *) nm_setting_connection_new ();
nm_connection_add_setting (connection, (NMSetting *) s_con);
@@ -254,16 +309,16 @@ _match_connection_new (void)
s_wired = (NMSettingWired *) nm_setting_wired_new ();
nm_connection_add_setting (connection, (NMSetting *) s_wired);
- s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
+ s_ip4 = (NMSettingIPConfig *) 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,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
NULL);
- s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
+ s_ip6 = (NMSettingIPConfig *) 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,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO,
NULL);
return connection;
@@ -274,10 +329,10 @@ test_connection_match_basic (void)
{
NMConnection *orig, *copy, *matched;
GSList *connections = NULL;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
orig = _match_connection_new ();
- copy = nm_connection_duplicate (orig);
+ copy = nm_simple_connection_new_clone (orig);
connections = g_slist_append (connections, copy);
matched = nm_utils_match_connection (connections, orig, TRUE, NULL, NULL);
@@ -287,7 +342,7 @@ test_connection_match_basic (void)
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,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL,
NULL);
matched = nm_utils_match_connection (connections, orig, TRUE, NULL, NULL);
g_assert (matched == NULL);
@@ -302,10 +357,10 @@ test_connection_match_ip6_method (void)
{
NMConnection *orig, *copy, *matched;
GSList *connections = NULL;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip6;
orig = _match_connection_new ();
- copy = nm_connection_duplicate (orig);
+ copy = nm_simple_connection_new_clone (orig);
connections = g_slist_append (connections, copy);
/* Check that if the generated connection is IPv6 method=link-local, and the
@@ -315,14 +370,14 @@ test_connection_match_ip6_method (void)
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,
+ NM_SETTING_IP_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,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO,
+ NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
NULL);
matched = nm_utils_match_connection (connections, orig, TRUE, NULL, NULL);
@@ -338,10 +393,10 @@ test_connection_match_ip6_method_ignore (void)
{
NMConnection *orig, *copy, *matched;
GSList *connections = NULL;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip6;
orig = _match_connection_new ();
- copy = nm_connection_duplicate (orig);
+ copy = nm_simple_connection_new_clone (orig);
connections = g_slist_append (connections, copy);
/* Check that if the generated connection is IPv6 method=link-local, and the
@@ -350,13 +405,13 @@ test_connection_match_ip6_method_ignore (void)
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,
+ NM_SETTING_IP_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,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
NULL);
matched = nm_utils_match_connection (connections, orig, TRUE, NULL, NULL);
@@ -372,10 +427,10 @@ test_connection_match_ip6_method_ignore_auto (void)
{
NMConnection *orig, *copy, *matched;
GSList *connections = NULL;
- NMSettingIP6Config *s_ip6;
+ NMSettingIPConfig *s_ip6;
orig = _match_connection_new ();
- copy = nm_connection_duplicate (orig);
+ copy = nm_simple_connection_new_clone (orig);
connections = g_slist_append (connections, copy);
/* Check that if the generated connection is IPv6 method=auto, and the
@@ -384,13 +439,13 @@ test_connection_match_ip6_method_ignore_auto (void)
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,
+ NM_SETTING_IP_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,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
NULL);
matched = nm_utils_match_connection (connections, orig, TRUE, NULL, NULL);
@@ -407,10 +462,10 @@ test_connection_match_ip4_method (void)
{
NMConnection *orig, *copy, *matched;
GSList *connections = NULL;
- NMSettingIP4Config *s_ip4;
+ NMSettingIPConfig *s_ip4;
orig = _match_connection_new ();
- copy = nm_connection_duplicate (orig);
+ copy = nm_simple_connection_new_clone (orig);
connections = g_slist_append (connections, copy);
/* Check that if the generated connection is IPv4 method=disabled, and the
@@ -420,14 +475,14 @@ test_connection_match_ip4_method (void)
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,
+ NM_SETTING_IP_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,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
+ NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
NULL);
matched = nm_utils_match_connection (connections, orig, FALSE, NULL, NULL);
@@ -450,7 +505,7 @@ test_connection_match_interface_name (void)
NMSettingConnection *s_con;
orig = _match_connection_new ();
- copy = nm_connection_duplicate (orig);
+ copy = nm_simple_connection_new_clone (orig);
connections = g_slist_append (connections, copy);
/* Check that if the generated connection has an interface name and the
@@ -482,18 +537,13 @@ 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");
+ char *subchan_arr[] = { "0.0.8000", "0.0.8001", "0.0.8002", NULL };
+ const char *mac = "52:54:00:ab:db:23";
orig = _match_connection_new ();
- copy = nm_connection_duplicate (orig);
+ copy = nm_simple_connection_new_clone (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),
@@ -502,7 +552,6 @@ test_connection_match_wired (void)
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);
@@ -515,7 +564,6 @@ test_connection_match_wired (void)
g_assert (matched == copy);
g_slist_free (connections);
- g_ptr_array_free (subchan_arr, TRUE);
g_object_unref (orig);
g_object_unref (copy);
}
@@ -525,13 +573,12 @@ 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;
+ NMSettingIPConfig *s_ip4, *s_ip6;
+ NMIPAddress *nm_addr;
+ GError *error = NULL;
orig = _match_connection_new ();
- copy = nm_connection_duplicate (orig);
+ copy = nm_simple_connection_new_clone (orig);
connections = g_slist_append (connections, copy);
/* Check that if we have two differences, ipv6.method (exception we allow) and
@@ -540,43 +587,37 @@ test_connection_no_match_ip4_addr (void)
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,
+ NM_SETTING_IP_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,
+ NM_SETTING_IP_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,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
+ NM_SETTING_IP_CONFIG_GATEWAY, "1.1.1.254",
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);
+ nm_addr = nm_ip_address_new (AF_INET, "1.1.1.4", 24, &error);
+ g_assert_no_error (error);
+ nm_setting_ip_config_add_address (s_ip4, nm_addr);
+ nm_ip_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,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
+ NM_SETTING_IP_CONFIG_GATEWAY, "2.2.2.254",
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);
+ nm_addr = nm_ip_address_new (AF_INET, "2.2.2.4", 24, &error);
+ g_assert_no_error (error);
+ nm_setting_ip_config_add_address (s_ip4, nm_addr);
+ nm_ip_address_unref (nm_addr);
matched = nm_utils_match_connection (connections, orig, TRUE, NULL, NULL);
g_assert (matched != copy);
@@ -586,19 +627,163 @@ test_connection_no_match_ip4_addr (void)
g_object_unref (copy);
}
+static NMConnection *
+_create_connection_autoconnect (const char *id, gboolean autoconnect, int autoconnect_priority)
+{
+ NMConnection *c;
+ NMSettingConnection *s_con;
+
+ c = nmtst_create_minimal_connection (id, NULL, NM_SETTING_WIRED_SETTING_NAME, &s_con);
+ g_object_set (s_con,
+ NM_SETTING_CONNECTION_AUTOCONNECT, autoconnect,
+ NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY, autoconnect_priority,
+ NULL);
+ nmtst_connection_normalize (c);
+ return c;
+}
+
+static void
+_test_connection_sort_autoconnect_priority_one (NMConnection **list, gboolean shuffle)
+{
+ int i, j;
+ int count = 0;
+ gs_unref_ptrarray GPtrArray *connections = g_ptr_array_new ();
+
+ while (list[count])
+ count++;
+ g_assert (count > 1);
+
+ /* copy the list of connections over to @connections and shuffle. */
+ for (i = 0; i < count; i++)
+ g_ptr_array_add (connections, list[i]);
+ if (shuffle) {
+ for (i = count - 1; i > 0; i--) {
+ j = g_rand_int (nmtst_get_rand ()) % (i + 1);
+ NMTST_SWAP (connections->pdata[i], connections->pdata[j]);
+ }
+ }
+
+ /* sort it... */
+ g_ptr_array_sort (connections, (GCompareFunc) nm_utils_cmp_connection_by_autoconnect_priority);
+
+ for (i = 0; i < count; i++) {
+ if (list[i] == connections->pdata[i])
+ continue;
+ if (shuffle && nm_utils_cmp_connection_by_autoconnect_priority (&list[i], (NMConnection **) &connections->pdata[i]) == 0)
+ continue;
+ g_message ("After sorting, the order of connections is not as expected!! Offending index: %d", i);
+ for (j = 0; j < count; j++)
+ g_message (" %3d: %p/%-20s - %p/%-20s", j, list[j], nm_connection_get_id (list[j]), connections->pdata[j], nm_connection_get_id (connections->pdata[j]));
+ g_assert_not_reached ();
+ }
+}
+
+static void
+_test_connection_sort_autoconnect_priority_free (NMConnection **list)
+{
+ while (*list) {
+ g_object_unref (*list);
+ *list = NULL;
+ }
+}
+
+static void
+test_connection_sort_autoconnect_priority (void)
+{
+ NMConnection *c1[] = {
+ _create_connection_autoconnect ("AC/100", TRUE, 100),
+ _create_connection_autoconnect ("AC/100", TRUE, 100),
+ _create_connection_autoconnect ("AC/99", TRUE, 99),
+ _create_connection_autoconnect ("AC/0", TRUE, 0),
+ _create_connection_autoconnect ("AC/0", TRUE, 0),
+ _create_connection_autoconnect ("AC/-1", TRUE, -1),
+ _create_connection_autoconnect ("AC/-3", TRUE, -3),
+ _create_connection_autoconnect ("ac/0", FALSE, 0),
+ _create_connection_autoconnect ("ac/0", FALSE, 0),
+ _create_connection_autoconnect ("ac/1", FALSE, 1),
+ _create_connection_autoconnect ("ac/-1", FALSE, -1),
+ _create_connection_autoconnect ("ac/1", FALSE, 1),
+ _create_connection_autoconnect ("ac/0", FALSE, 0),
+ NULL,
+ };
+ NMConnection *c2[] = {
+ _create_connection_autoconnect ("AC/100", TRUE, 100),
+ _create_connection_autoconnect ("AC/99", TRUE, 99),
+ _create_connection_autoconnect ("AC/0", TRUE, 0),
+ _create_connection_autoconnect ("AC/-1", TRUE, -1),
+ _create_connection_autoconnect ("AC/-3", TRUE, -3),
+ _create_connection_autoconnect ("ac/0", FALSE, 0),
+ NULL,
+ };
+
+ _test_connection_sort_autoconnect_priority_one (c1, FALSE);
+ _test_connection_sort_autoconnect_priority_one (c2, FALSE);
+ _test_connection_sort_autoconnect_priority_one (c1, TRUE);
+ _test_connection_sort_autoconnect_priority_one (c2, TRUE);
+
+ _test_connection_sort_autoconnect_priority_free (c1);
+ _test_connection_sort_autoconnect_priority_free (c2);
+}
+
/*******************************************/
+static void
+__test_uuid (const char *expected_uuid, const char *str, gssize slen, char *uuid_test)
+{
+ g_assert (uuid_test);
+ g_assert (nm_utils_is_uuid (uuid_test));
+
+ if (strcmp (uuid_test, expected_uuid)) {
+ g_error ("UUID test failed (1): text=%s, len=%lld, expected=%s, uuid_test=%s",
+ str, (long long) slen, expected_uuid, uuid_test);
+ }
+ g_free (uuid_test);
+
+ uuid_test = nm_utils_uuid_generate_from_string (str, slen, NM_UTILS_UUID_TYPE_VARIANT3, NM_UTILS_UUID_NS);
+
+ g_assert (uuid_test);
+ g_assert (nm_utils_is_uuid (uuid_test));
+
+ if (strcmp (uuid_test, expected_uuid)) {
+ g_error ("UUID test failed (2): text=%s; len=%lld, expected=%s, uuid2=%s",
+ str, (long long) slen, expected_uuid, uuid_test);
+ }
+ g_free (uuid_test);
+}
+
+#define _test_uuid(expected_uuid, str, strlen, ...) __test_uuid (expected_uuid, str, strlen, nm_utils_uuid_generate_from_strings(__VA_ARGS__, NULL))
+
+static void
+test_nm_utils_uuid_generate_from_strings (void)
+{
+ _test_uuid ("b07c334a-399b-32de-8d50-58e4e08f98e3", "", 0, NULL);
+ _test_uuid ("b8a426cb-bcb5-30a3-bd8f-6786fea72df9", "\0", 1, "");
+ _test_uuid ("12a4a982-7aae-39e1-951e-41aeb1250959", "a\0", 2, "a");
+ _test_uuid ("69e22c7e-f89f-3a43-b239-1cb52ed8db69", "aa\0", 3, "aa");
+ _test_uuid ("59829fd3-5ad5-3d90-a7b0-4911747e4088", "\0\0", 2, "", "");
+ _test_uuid ("01ad0e06-6c50-3384-8d86-ddab81421425", "a\0\0", 3, "a", "");
+ _test_uuid ("e1ed8647-9ed3-3ec8-8c6d-e8204524d71d", "aa\0\0", 4, "aa", "");
+ _test_uuid ("fb1c7cd6-275c-3489-9382-83b900da8af0", "\0a\0", 3, "", "a");
+ _test_uuid ("5d79494e-c4ba-31a6-80a2-d6016ccd7e17", "a\0a\0", 4, "a", "a");
+ _test_uuid ("fd698d86-1b60-3ebe-855f-7aada9950a8d", "aa\0a\0", 5, "aa", "a");
+ _test_uuid ("8c573b48-0f01-30ba-bb94-c5f59f4fe517", "\0aa\0", 4, "", "aa");
+ _test_uuid ("2bdd3d46-eb83-3c53-a41b-a724d04b5544", "a\0aa\0", 5, "a", "aa");
+ _test_uuid ("13d4b780-07c1-3ba7-b449-81c4844ef039", "aa\0aa\0", 6, "aa", "aa");
+ _test_uuid ("dd265bf7-c05a-3037-9939-b9629858a477", "a\0b\0", 4, "a", "b");
+}
+
+/*******************************************/
+
+NMTST_DEFINE ();
+
int
main (int argc, char **argv)
{
- g_test_init (&argc, &argv, NULL);
-
-#if !GLIB_CHECK_VERSION (2, 35, 0)
- g_type_init ();
-#endif
+ nmtst_init_with_logging (&argc, &argv, NULL, "ALL");
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/nm_utils_log_connection_diff", test_nm_utils_log_connection_diff);
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);
@@ -609,6 +794,10 @@ main (int argc, char **argv)
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);
+ g_test_add_func ("/general/connection-sort/autoconnect-priority", test_connection_sort_autoconnect_priority);
+
+ g_test_add_func ("/general/nm_utils_uuid_generate_from_strings", test_nm_utils_uuid_generate_from_strings);
+
return g_test_run ();
}
diff --git a/src/tests/test-ip4-config.c b/src/tests/test-ip4-config.c
index 3eee5f136..657f7e05b 100644
--- a/src/tests/test-ip4-config.c
+++ b/src/tests/test-ip4-config.c
@@ -18,11 +18,14 @@
*
*/
+#include "config.h"
+
#include <glib.h>
#include <string.h>
#include <arpa/inet.h>
#include "nm-ip4-config.h"
+#include "nm-platform.h"
static void
addr_init (NMPlatformIP4Address *a, const char *addr, const char *peer, guint plen)
@@ -138,7 +141,7 @@ test_subtract (void)
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_set_mtu (dst, expected_mtu, NM_IP_CONFIG_SOURCE_UNKNOWN);
nm_ip4_config_subtract (dst, src);
@@ -193,18 +196,18 @@ test_compare_with_source (void)
/* Address */
addr_init (&addr, "1.2.3.4", NULL, 24);
- addr.source = NM_PLATFORM_SOURCE_USER;
+ addr.source = NM_IP_CONFIG_SOURCE_USER;
nm_ip4_config_add_address (a, &addr);
- addr.source = NM_PLATFORM_SOURCE_VPN;
+ addr.source = NM_IP_CONFIG_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;
+ route.source = NM_IP_CONFIG_SOURCE_USER;
nm_ip4_config_add_route (a, &route);
- route.source = NM_PLATFORM_SOURCE_VPN;
+ route.source = NM_IP_CONFIG_SOURCE_VPN;
nm_ip4_config_add_route (b, &route);
/* Assert that the configs are basically the same, eg that the source is ignored */
@@ -225,31 +228,31 @@ test_add_address_with_source (void)
/* Test that a higher priority source is not overwritten */
addr_init (&addr, "1.2.3.4", NULL, 24);
- addr.source = NM_PLATFORM_SOURCE_USER;
+ addr.source = NM_IP_CONFIG_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_assert_cmpint (test_addr->source, ==, NM_IP_CONFIG_SOURCE_USER);
- addr.source = NM_PLATFORM_SOURCE_VPN;
+ addr.source = NM_IP_CONFIG_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);
+ g_assert_cmpint (test_addr->source, ==, NM_IP_CONFIG_SOURCE_USER);
/* Test that a lower priority address source is overwritten */
nm_ip4_config_del_address (a, 0);
- addr.source = NM_PLATFORM_SOURCE_KERNEL;
+ addr.source = NM_IP_CONFIG_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);
+ g_assert_cmpint (test_addr->source, ==, NM_IP_CONFIG_SOURCE_KERNEL);
- addr.source = NM_PLATFORM_SOURCE_USER;
+ addr.source = NM_IP_CONFIG_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_assert_cmpint (test_addr->source, ==, NM_IP_CONFIG_SOURCE_USER);
g_object_unref (a);
}
@@ -265,31 +268,31 @@ test_add_route_with_source (void)
/* 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;
+ route.source = NM_IP_CONFIG_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_assert_cmpint (test_route->source, ==, NM_IP_CONFIG_SOURCE_USER);
- route.source = NM_PLATFORM_SOURCE_VPN;
+ route.source = NM_IP_CONFIG_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);
+ g_assert_cmpint (test_route->source, ==, NM_IP_CONFIG_SOURCE_USER);
/* Test that a lower priority address source is overwritten */
nm_ip4_config_del_route (a, 0);
- route.source = NM_PLATFORM_SOURCE_KERNEL;
+ route.source = NM_IP_CONFIG_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);
+ g_assert_cmpint (test_route->source, ==, NM_IP_CONFIG_SOURCE_KERNEL);
- route.source = NM_PLATFORM_SOURCE_USER;
+ route.source = NM_IP_CONFIG_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_assert_cmpint (test_route->source, ==, NM_IP_CONFIG_SOURCE_USER);
g_object_unref (a);
}
@@ -309,9 +312,9 @@ test_merge_subtract_mss_mtu (void)
/* 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_mtu (cfg2, expected_mtu2, NM_IP_CONFIG_SOURCE_UNKNOWN);
nm_ip4_config_set_mss (cfg3, expected_mss3);
- nm_ip4_config_set_mtu (cfg3, expected_mtu3);
+ nm_ip4_config_set_mtu (cfg3, expected_mtu3, NM_IP_CONFIG_SOURCE_UNKNOWN);
nm_ip4_config_merge (cfg1, cfg2);
/* ensure MSS and MTU are in cfg1 */
diff --git a/src/tests/test-ip6-config.c b/src/tests/test-ip6-config.c
index 75fe28eef..9e1d5651d 100644
--- a/src/tests/test-ip6-config.c
+++ b/src/tests/test-ip6-config.c
@@ -18,6 +18,8 @@
*
*/
+#include "config.h"
+
#include <glib.h>
#include <string.h>
#include <arpa/inet.h>
@@ -25,6 +27,7 @@
#include "nm-ip6-config.h"
#include "nm-logging.h"
+#include "nm-platform.h"
#include "nm-test-utils.h"
static NMIP6Config *
@@ -131,18 +134,18 @@ test_compare_with_source (void)
/* Address */
addr = *nmtst_platform_ip6_address ("1122:3344:5566::7788", NULL, 64);
- addr.source = NM_PLATFORM_SOURCE_USER;
+ addr.source = NM_IP_CONFIG_SOURCE_USER;
nm_ip6_config_add_address (a, &addr);
- addr.source = NM_PLATFORM_SOURCE_VPN;
+ addr.source = NM_IP_CONFIG_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;
+ route.source = NM_IP_CONFIG_SOURCE_USER;
nm_ip6_config_add_route (a, &route);
- route.source = NM_PLATFORM_SOURCE_VPN;
+ route.source = NM_IP_CONFIG_SOURCE_VPN;
nm_ip6_config_add_route (b, &route);
/* Assert that the configs are basically the same, eg that the source is ignored */
@@ -163,31 +166,31 @@ test_add_address_with_source (void)
/* 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;
+ addr.source = NM_IP_CONFIG_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_assert_cmpint (test_addr->source, ==, NM_IP_CONFIG_SOURCE_USER);
- addr.source = NM_PLATFORM_SOURCE_VPN;
+ addr.source = NM_IP_CONFIG_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);
+ g_assert_cmpint (test_addr->source, ==, NM_IP_CONFIG_SOURCE_USER);
/* Test that a lower priority address source is overwritten */
nm_ip6_config_del_address (a, 0);
- addr.source = NM_PLATFORM_SOURCE_KERNEL;
+ addr.source = NM_IP_CONFIG_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);
+ g_assert_cmpint (test_addr->source, ==, NM_IP_CONFIG_SOURCE_KERNEL);
- addr.source = NM_PLATFORM_SOURCE_USER;
+ addr.source = NM_IP_CONFIG_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_assert_cmpint (test_addr->source, ==, NM_IP_CONFIG_SOURCE_USER);
g_object_unref (a);
}
@@ -203,31 +206,31 @@ test_add_route_with_source (void)
/* 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;
+ route.source = NM_IP_CONFIG_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_assert_cmpint (test_route->source, ==, NM_IP_CONFIG_SOURCE_USER);
- route.source = NM_PLATFORM_SOURCE_VPN;
+ route.source = NM_IP_CONFIG_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);
+ g_assert_cmpint (test_route->source, ==, NM_IP_CONFIG_SOURCE_USER);
/* Test that a lower priority address source is overwritten */
nm_ip6_config_del_route (a, 0);
- route.source = NM_PLATFORM_SOURCE_KERNEL;
+ route.source = NM_IP_CONFIG_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);
+ g_assert_cmpint (test_route->source, ==, NM_IP_CONFIG_SOURCE_KERNEL);
- route.source = NM_PLATFORM_SOURCE_USER;
+ route.source = NM_IP_CONFIG_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_assert_cmpint (test_route->source, ==, NM_IP_CONFIG_SOURCE_USER);
g_object_unref (a);
}
@@ -285,33 +288,33 @@ test_nm_ip6_config_addresses_sort (void)
#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);
+ ADDR_ADD("2607:f0d0:1002:51::4", NULL, 64, 0, NM_IP_CONFIG_SOURCE_USER, 0, 0, 0, 0);
+ ADDR_ADD("2607:f0d0:1002:51::5", NULL, 64, 0, NM_IP_CONFIG_SOURCE_USER, 0, 0, 0, 0);
+ ADDR_ADD("2607:f0d0:1002:51::6", NULL, 64, 0, NM_IP_CONFIG_SOURCE_RDISC, 0, 0, 0, IFA_F_MANAGETEMPADDR);
+ ADDR_ADD("2607:f0d0:1002:51::3", NULL, 64, 0, NM_IP_CONFIG_SOURCE_USER, 0, 0, 0, IFA_F_SECONDARY);
+ ADDR_ADD("2607:f0d0:1002:51::8", NULL, 64, 0, NM_IP_CONFIG_SOURCE_USER, 0, 0, 0, IFA_F_SECONDARY);
+ ADDR_ADD("2607:f0d0:1002:51::0", NULL, 64, 0, NM_IP_CONFIG_SOURCE_KERNEL, 0, 0, 0, IFA_F_SECONDARY);
+ ADDR_ADD("fec0::1", NULL, 128, 0, NM_IP_CONFIG_SOURCE_KERNEL, 0, 0, 0, 0);
+ ADDR_ADD("fe80::208:74ff:feda:625c", NULL, 128, 0, NM_IP_CONFIG_SOURCE_KERNEL, 0, 0, 0, 0);
+ ADDR_ADD("fe80::208:74ff:feda:625d", NULL, 128, 0, NM_IP_CONFIG_SOURCE_KERNEL, 0, 0, 0, 0);
+ ADDR_ADD("::1", NULL, 128, 0, NM_IP_CONFIG_SOURCE_USER, 0, 0, 0, 0);
+ ADDR_ADD("2607:f0d0:1002:51::2", NULL, 64, 0, NM_IP_CONFIG_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);
+ ADDR_ADD("2607:f0d0:1002:51::3", NULL, 64, 0, NM_IP_CONFIG_SOURCE_USER, 0, 0, 0, IFA_F_SECONDARY);
+ ADDR_ADD("2607:f0d0:1002:51::4", NULL, 64, 0, NM_IP_CONFIG_SOURCE_USER, 0, 0, 0, 0);
+ ADDR_ADD("2607:f0d0:1002:51::5", NULL, 64, 0, NM_IP_CONFIG_SOURCE_USER, 0, 0, 0, 0);
+ ADDR_ADD("2607:f0d0:1002:51::8", NULL, 64, 0, NM_IP_CONFIG_SOURCE_USER, 0, 0, 0, IFA_F_SECONDARY);
+ ADDR_ADD("2607:f0d0:1002:51::0", NULL, 64, 0, NM_IP_CONFIG_SOURCE_KERNEL, 0, 0, 0, IFA_F_SECONDARY);
+ ADDR_ADD("2607:f0d0:1002:51::6", NULL, 64, 0, NM_IP_CONFIG_SOURCE_RDISC, 0, 0, 0, IFA_F_MANAGETEMPADDR);
+ ADDR_ADD("fec0::1", NULL, 128, 0, NM_IP_CONFIG_SOURCE_KERNEL, 0, 0, 0, 0);
+ ADDR_ADD("fe80::208:74ff:feda:625c", NULL, 128, 0, NM_IP_CONFIG_SOURCE_KERNEL, 0, 0, 0, 0);
+ ADDR_ADD("fe80::208:74ff:feda:625d", NULL, 128, 0, NM_IP_CONFIG_SOURCE_KERNEL, 0, 0, 0, 0);
+ ADDR_ADD("::1", NULL, 128, 0, NM_IP_CONFIG_SOURCE_USER, 0, 0, 0, 0);
+ ADDR_ADD("2607:f0d0:1002:51::2", NULL, 64, 0, NM_IP_CONFIG_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
diff --git a/src/tests/test-resolvconf-capture.c b/src/tests/test-resolvconf-capture.c
index cde4bbe5b..f5cb298b9 100644
--- a/src/tests/test-resolvconf-capture.c
+++ b/src/tests/test-resolvconf-capture.c
@@ -18,10 +18,15 @@
*
*/
+#include "config.h"
+
#include <glib.h>
#include <string.h>
+#include <arpa/inet.h>
#include "NetworkManagerUtils.h"
+#include "nm-ip4-config.h"
+#include "nm-ip6-config.h"
#include "nm-platform.h"
static void
diff --git a/src/settings/tests/test-wired-defname.c b/src/tests/test-wired-defname.c
index 2d88dd775..a05588b8a 100644
--- a/src/settings/tests/test-wired-defname.c
+++ b/src/tests/test-wired-defname.c
@@ -18,12 +18,14 @@
*
*/
+#include "config.h"
+
#include <glib.h>
#include <glib-object.h>
-#include <nm-connection.h>
+#include <nm-simple-connection.h>
#include <nm-setting-connection.h>
-#include "nm-settings-utils.h"
+#include "nm-device-ethernet-utils.h"
static NMConnection *
_new_connection (const char *id)
@@ -31,7 +33,7 @@ _new_connection (const char *id)
NMConnection *a;
NMSetting *setting;
- a = nm_connection_new ();
+ a = nm_simple_connection_new ();
setting = nm_setting_connection_new ();
g_object_set (setting, NM_SETTING_CONNECTION_ID, id, NULL);
nm_connection_add_setting (a, setting);
@@ -43,15 +45,10 @@ _new_connection (const char *id)
static void
test_defname_no_connections (void)
{
- GHashTable *hash;
char *name;
- hash = g_hash_table_new (g_direct_hash, g_direct_equal);
-
- name = nm_settings_utils_get_default_wired_name (hash);
+ name = nm_device_ethernet_utils_get_default_wired_name (NULL);
g_assert_cmpstr (name, ==, "Wired connection 1");
-
- g_hash_table_destroy (hash);
}
/*******************************************/
@@ -59,19 +56,17 @@ test_defname_no_connections (void)
static void
test_defname_no_conflict (void)
{
- GHashTable *hash;
+ GSList *list = NULL;
char *name;
- hash = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) g_object_unref);
+ list = g_slist_append (list, _new_connection ("asdfasdfasdfadf"));
+ list = g_slist_append (list, _new_connection ("work wifi"));
+ list = g_slist_append (list, _new_connection ("random gsm connection"));
- g_hash_table_insert (hash, "a", _new_connection ("asdfasdfasdfadf"));
- g_hash_table_insert (hash, "b", _new_connection ("work wifi"));
- g_hash_table_insert (hash, "c", _new_connection ("random gsm connection"));
-
- name = nm_settings_utils_get_default_wired_name (hash);
+ name = nm_device_ethernet_utils_get_default_wired_name (list);
g_assert_cmpstr (name, ==, "Wired connection 1");
- g_hash_table_destroy (hash);
+ g_slist_free_full (list, g_object_unref);
}
/*******************************************/
@@ -79,19 +74,17 @@ test_defname_no_conflict (void)
static void
test_defname_conflict (void)
{
- GHashTable *hash;
+ GSList *list = NULL;
char *name;
- hash = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) g_object_unref);
-
- g_hash_table_insert (hash, "a", _new_connection ("asdfasdfasdfadf"));
- g_hash_table_insert (hash, "b", _new_connection ("Wired connection 1"));
- g_hash_table_insert (hash, "c", _new_connection ("random gsm connection"));
+ list = g_slist_append (list, _new_connection ("asdfasdfasdfadf"));
+ list = g_slist_append (list, _new_connection ("Wired connection 1"));
+ list = g_slist_append (list, _new_connection ("random gsm connection"));
- name = nm_settings_utils_get_default_wired_name (hash);
+ name = nm_device_ethernet_utils_get_default_wired_name (list);
g_assert_cmpstr (name, ==, "Wired connection 2");
- g_hash_table_destroy (hash);
+ g_slist_free_full (list, g_object_unref);
}
/*******************************************/
@@ -99,23 +92,21 @@ test_defname_conflict (void)
static void
test_defname_multiple_conflicts (void)
{
- GHashTable *hash;
+ GSList *list = NULL;
char *name;
- hash = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) g_object_unref);
-
- g_hash_table_insert (hash, "a", _new_connection ("random gsm connection"));
- g_hash_table_insert (hash, "b", _new_connection ("home wifi"));
- g_hash_table_insert (hash, "c", _new_connection ("Wired connection 1"));
- g_hash_table_insert (hash, "d", _new_connection ("Wired connection 2"));
- g_hash_table_insert (hash, "e", _new_connection ("Wired connection 3"));
- g_hash_table_insert (hash, "f", _new_connection ("work wifi"));
- g_hash_table_insert (hash, "g", _new_connection ("a vpn"));
+ list = g_slist_append (list, _new_connection ("random gsm connection"));
+ list = g_slist_append (list, _new_connection ("home wifi"));
+ list = g_slist_append (list, _new_connection ("Wired connection 1"));
+ list = g_slist_append (list, _new_connection ("Wired connection 2"));
+ list = g_slist_append (list, _new_connection ("Wired connection 3"));
+ list = g_slist_append (list, _new_connection ("work wifi"));
+ list = g_slist_append (list, _new_connection ("a vpn"));
- name = nm_settings_utils_get_default_wired_name (hash);
+ name = nm_device_ethernet_utils_get_default_wired_name (list);
g_assert_cmpstr (name, ==, "Wired connection 4");
- g_hash_table_destroy (hash);
+ g_slist_free_full (list, g_object_unref);
}
/*******************************************/
diff --git a/src/vpn-manager/nm-vpn-connection.c b/src/vpn-manager/nm-vpn-connection.c
index d66dcfdb7..cb07c7f9a 100644
--- a/src/vpn-manager/nm-vpn-connection.c
+++ b/src/vpn-manager/nm-vpn-connection.c
@@ -19,6 +19,8 @@
* Copyright (C) 2006 - 2008 Novell, Inc.
*/
+#include "config.h"
+
#include <glib.h>
#include <string.h>
#include <sys/socket.h>
@@ -27,16 +29,12 @@
#include <errno.h>
#include <stdlib.h>
-#include "NetworkManager.h"
-#include "NetworkManagerVPN.h"
#include "nm-vpn-connection.h"
-#include "nm-setting-connection.h"
-#include "nm-setting-vpn.h"
-#include "nm-setting-ip4-config.h"
+#include "nm-ip4-config.h"
+#include "nm-ip6-config.h"
#include "nm-dbus-manager.h"
#include "nm-platform.h"
#include "nm-logging.h"
-#include "nm-utils.h"
#include "nm-active-connection.h"
#include "nm-dbus-glib-types.h"
#include "NetworkManagerUtils.h"
@@ -44,10 +42,12 @@
#include "settings/nm-settings-connection.h"
#include "nm-dispatcher.h"
#include "nm-agent-manager.h"
+#include "nm-core-internal.h"
+#include "nm-default-route-manager.h"
#include "nm-vpn-connection-glue.h"
-G_DEFINE_TYPE (NMVPNConnection, nm_vpn_connection, NM_TYPE_ACTIVE_CONNECTION)
+G_DEFINE_TYPE (NMVpnConnection, nm_vpn_connection, NM_TYPE_ACTIVE_CONNECTION)
typedef enum {
/* Only system secrets */
@@ -62,7 +62,7 @@ typedef enum {
SECRETS_REQ_LAST
} SecretsReq;
-/* Internal VPN states, private to NMVPNConnection */
+/* Internal VPN states, private to NMVpnConnection */
typedef enum {
STATE_UNKNOWN = 0,
STATE_WAITING,
@@ -79,6 +79,8 @@ typedef enum {
typedef struct {
NMConnection *connection;
+ gboolean service_can_persist;
+ gboolean connection_can_persist;
guint32 secrets_id;
SecretsReq secrets_idx;
@@ -86,7 +88,9 @@ typedef struct {
VpnState vpn_state;
guint dispatcher_id;
- NMVPNConnectionStateReason failure_reason;
+ NMVpnConnectionStateReason failure_reason;
+
+ NMVpnServiceState service_state;
DBusGProxy *proxy;
GHashTable *connect_hash;
@@ -103,13 +107,14 @@ typedef struct {
int ip_ifindex;
char *banner;
guint32 mtu;
-} NMVPNConnectionPrivate;
+} NMVpnConnectionPrivate;
-#define NM_VPN_CONNECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_VPN_CONNECTION, NMVPNConnectionPrivate))
+#define NM_VPN_CONNECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_VPN_CONNECTION, NMVpnConnectionPrivate))
enum {
VPN_STATE_CHANGED,
INTERNAL_STATE_CHANGED,
+ INTERNAL_RETRY_AFTER_FAILURE,
LAST_SIGNAL
};
@@ -127,7 +132,7 @@ enum {
LAST_PROP
};
-static void get_secrets (NMVPNConnection *self,
+static void get_secrets (NMVpnConnection *self,
SecretsReq secrets_idx,
const char **hints);
@@ -136,14 +141,14 @@ static void plugin_interactive_secrets_required (DBusGProxy *proxy,
const char **secrets,
gpointer user_data);
-static void _set_vpn_state (NMVPNConnection *connection,
+static void _set_vpn_state (NMVpnConnection *connection,
VpnState vpn_state,
- NMVPNConnectionStateReason reason,
+ NMVpnConnectionStateReason reason,
gboolean quitting);
/*********************************************************************/
-static NMVPNConnectionState
+static NMVpnConnectionState
_state_to_nm_vpn_state (VpnState state)
{
switch (state) {
@@ -173,7 +178,7 @@ _state_to_nm_vpn_state (VpnState state)
case STATE_FAILED:
return NM_VPN_CONNECTION_STATE_FAILED;
default:
- return STATE_UNKNOWN;
+ return NM_VPN_CONNECTION_STATE_UNKNOWN;
}
}
@@ -203,9 +208,9 @@ _state_to_ac_state (VpnState vpn_state)
}
static void
-call_plugin_disconnect (NMVPNConnection *self)
+call_plugin_disconnect (NMVpnConnection *self)
{
- NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (self);
+ NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (self);
GError *error = NULL;
if (priv->proxy) {
@@ -222,9 +227,9 @@ call_plugin_disconnect (NMVPNConnection *self)
}
static void
-vpn_cleanup (NMVPNConnection *connection, NMDevice *parent_dev)
+vpn_cleanup (NMVpnConnection *connection, NMDevice *parent_dev)
{
- NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
+ NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
if (priv->ip_ifindex) {
nm_platform_link_set_down (priv->ip_ifindex);
@@ -252,8 +257,8 @@ vpn_cleanup (NMVPNConnection *connection, NMDevice *parent_dev)
static void
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);
+ 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);
@@ -262,17 +267,17 @@ dispatcher_pre_down_done (guint call_id, gpointer user_data)
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);
+ 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)
+dispatcher_cleanup (NMVpnConnection *self)
{
- NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (self);
+ NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (self);
if (priv->dispatcher_id) {
nm_dispatcher_call_cancel (priv->dispatcher_id);
@@ -281,14 +286,14 @@ dispatcher_cleanup (NMVPNConnection *self)
}
static void
-_set_vpn_state (NMVPNConnection *connection,
+_set_vpn_state (NMVpnConnection *connection,
VpnState vpn_state,
- NMVPNConnectionStateReason reason,
+ NMVpnConnectionStateReason reason,
gboolean quitting)
{
- NMVPNConnectionPrivate *priv;
+ NMVpnConnectionPrivate *priv;
VpnState old_vpn_state;
- NMVPNConnectionState new_external_state, old_external_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));
@@ -319,6 +324,9 @@ _set_vpn_state (NMVPNConnection *connection,
dispatcher_cleanup (connection);
+ nm_default_route_manager_ip4_update_default_route (nm_default_route_manager_get (), connection);
+ nm_default_route_manager_ip6_update_default_route (nm_default_route_manager_get (), 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
* to send out signals and handle the dispatcher. So ref it.
@@ -434,12 +442,34 @@ _set_vpn_state (NMVPNConnection *connection,
g_object_unref (parent_dev);
}
+static gboolean
+_service_and_connection_can_persist (NMVpnConnection *self)
+{
+ return NM_VPN_CONNECTION_GET_PRIVATE (self)->connection_can_persist &&
+ NM_VPN_CONNECTION_GET_PRIVATE (self)->service_can_persist;
+}
+
+static gboolean
+_connection_only_can_persist (NMVpnConnection *self)
+{
+ return NM_VPN_CONNECTION_GET_PRIVATE (self)->connection_can_persist &&
+ !NM_VPN_CONNECTION_GET_PRIVATE (self)->service_can_persist;
+}
+
static void
device_state_changed (NMActiveConnection *active,
NMDevice *device,
NMDeviceState new_state,
NMDeviceState old_state)
{
+ if (_service_and_connection_can_persist (NM_VPN_CONNECTION (active))) {
+ if (new_state <= NM_DEVICE_STATE_DISCONNECTED ||
+ new_state == NM_DEVICE_STATE_FAILED) {
+ nm_active_connection_set_device (active, NULL);
+ }
+ return;
+ }
+
if (new_state <= NM_DEVICE_STATE_DISCONNECTED) {
_set_vpn_state (NM_VPN_CONNECTION (active),
STATE_DISCONNECTED,
@@ -463,6 +493,7 @@ add_ip4_vpn_gateway_route (NMIP4Config *config, NMDevice *parent_device, guint32
NMIP4Config *parent_config;
guint32 parent_gw;
NMPlatformIP4Route route;
+ guint32 route_metric;
g_return_if_fail (NM_IS_IP4_CONFIG (config));
g_return_if_fail (NM_IS_DEVICE (parent_device));
@@ -478,6 +509,8 @@ add_ip4_vpn_gateway_route (NMIP4Config *config, NMDevice *parent_device, guint32
if (!parent_gw)
return;
+ route_metric = nm_device_get_ip4_route_metric (parent_device);
+
memset (&route, 0, sizeof (route));
route.network = vpn_gw;
route.plen = 32;
@@ -490,8 +523,8 @@ add_ip4_vpn_gateway_route (NMIP4Config *config, NMDevice *parent_device, guint32
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);
+ route.source = NM_IP_CONFIG_SOURCE_VPN;
+ route.metric = route_metric;
nm_ip4_config_add_route (config, &route);
/* Ensure there's a route to the parent device's gateway through the
@@ -502,8 +535,8 @@ add_ip4_vpn_gateway_route (NMIP4Config *config, NMDevice *parent_device, guint32
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);
+ route.source = NM_IP_CONFIG_SOURCE_VPN;
+ route.metric = route_metric;
nm_ip4_config_add_route (config, &route);
}
@@ -516,6 +549,7 @@ add_ip6_vpn_gateway_route (NMIP6Config *config,
NMIP6Config *parent_config;
const struct in6_addr *parent_gw;
NMPlatformIP6Route route;
+ guint32 route_metric;
g_return_if_fail (NM_IS_IP6_CONFIG (config));
g_return_if_fail (NM_IS_DEVICE (parent_device));
@@ -527,6 +561,8 @@ add_ip6_vpn_gateway_route (NMIP6Config *config,
if (!parent_gw)
return;
+ route_metric = nm_device_get_ip6_route_metric (parent_device);
+
memset (&route, 0, sizeof (route));
route.network = *vpn_gw;
route.plen = 128;
@@ -539,8 +575,8 @@ add_ip6_vpn_gateway_route (NMIP6Config *config,
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);
+ route.source = NM_IP_CONFIG_SOURCE_VPN;
+ route.metric = route_metric;
nm_ip6_config_add_route (config, &route);
/* Ensure there's a route to the parent device's gateway through the
@@ -551,13 +587,13 @@ add_ip6_vpn_gateway_route (NMIP6Config *config,
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);
+ route.source = NM_IP_CONFIG_SOURCE_VPN;
+ route.metric = route_metric;
nm_ip6_config_add_route (config, &route);
}
-NMVPNConnection *
+NMVpnConnection *
nm_vpn_connection_new (NMConnection *connection,
NMDevice *parent_device,
const char *specific_object,
@@ -566,7 +602,7 @@ nm_vpn_connection_new (NMConnection *connection,
g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
g_return_val_if_fail (NM_IS_DEVICE (parent_device), NULL);
- return (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,
@@ -576,17 +612,17 @@ nm_vpn_connection_new (NMConnection *connection,
}
static const char *
-nm_vpn_connection_get_service (NMVPNConnection *connection)
+nm_vpn_connection_get_service (NMVpnConnection *connection)
{
- NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
- NMSettingVPN *s_vpn;
+ NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
+ NMSettingVpn *s_vpn;
s_vpn = nm_connection_get_setting_vpn (priv->connection);
return nm_setting_vpn_get_service_type (s_vpn);
}
static const char *
-vpn_plugin_failure_to_string (NMVPNPluginFailure failure)
+vpn_plugin_failure_to_string (NMVpnPluginFailure failure)
{
switch (failure) {
case NM_VPN_PLUGIN_FAILURE_LOGIN_FAILED:
@@ -603,10 +639,10 @@ vpn_plugin_failure_to_string (NMVPNPluginFailure failure)
static void
plugin_failed (DBusGProxy *proxy,
- NMVPNPluginFailure plugin_failure,
+ NMVpnPluginFailure plugin_failure,
gpointer user_data)
{
- NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (user_data);
+ NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (user_data);
nm_log_warn (LOGD_VPN, "VPN plugin failed: %s (%d)",
vpn_plugin_failure_to_string (plugin_failure), plugin_failure);
@@ -620,11 +656,12 @@ plugin_failed (DBusGProxy *proxy,
break;
default:
priv->failure_reason = NM_VPN_CONNECTION_STATE_REASON_UNKNOWN;
+ break;
}
}
static const char *
-vpn_service_state_to_string (NMVPNServiceState state)
+vpn_service_state_to_string (NMVpnServiceState state)
{
switch (state) {
case NM_VPN_SERVICE_STATE_INIT:
@@ -662,13 +699,13 @@ static const char *state_table[] = {
static const char *
vpn_state_to_string (VpnState state)
{
- if (state >= 0 && state < G_N_ELEMENTS (state_table))
+ if ((gsize) state < G_N_ELEMENTS (state_table))
return state_table[state];
return "unknown";
}
static const char *
-vpn_reason_to_string (NMVPNConnectionStateReason reason)
+vpn_reason_to_string (NMVpnConnectionStateReason reason)
{
switch (reason) {
case NM_VPN_CONNECTION_STATE_REASON_NONE:
@@ -701,36 +738,52 @@ vpn_reason_to_string (NMVPNConnectionStateReason reason)
static void
plugin_state_changed (DBusGProxy *proxy,
- NMVPNServiceState state,
+ NMVpnServiceState new_service_state,
gpointer user_data)
{
- NMVPNConnection *connection = NM_VPN_CONNECTION (user_data);
- NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
+ NMVpnConnection *connection = NM_VPN_CONNECTION (user_data);
+ NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
+ NMVpnServiceState old_service_state = priv->service_state;
nm_log_info (LOGD_VPN, "VPN plugin state changed: %s (%d)",
- vpn_service_state_to_string (state), state);
+ vpn_service_state_to_string (new_service_state), new_service_state);
+ priv->service_state = new_service_state;
- if (state == NM_VPN_SERVICE_STATE_STOPPED) {
+ if (new_service_state == NM_VPN_SERVICE_STATE_STOPPED) {
/* Clear connection secrets to ensure secrets get requested each time the
* connection is activated.
*/
nm_connection_clear_secrets (priv->connection);
if ((priv->vpn_state >= STATE_WAITING) && (priv->vpn_state <= STATE_ACTIVATED)) {
+ VpnState old_state = priv->vpn_state;
+
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;
+
+ /* If the connection failed, the service cannot persist, but the
+ * connection can persist, ask listeners to re-activate the connection.
+ */
+ if ( old_state == STATE_ACTIVATED
+ && priv->vpn_state == STATE_FAILED
+ && _connection_only_can_persist (connection))
+ g_signal_emit (connection, signals[INTERNAL_RETRY_AFTER_FAILURE], 0);
}
+ } else if (new_service_state == NM_VPN_SERVICE_STATE_STARTING &&
+ old_service_state == NM_VPN_SERVICE_STATE_STARTED) {
+ /* The VPN service got disconnected and is attempting to reconnect */
+ _set_vpn_state (connection, STATE_CONNECT, NM_VPN_CONNECTION_STATE_REASON_CONNECT_TIMEOUT, FALSE);
}
}
static void
-print_vpn_config (NMVPNConnection *connection)
+print_vpn_config (NMVpnConnection *connection)
{
- NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
+ NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
const NMPlatformIP4Address *address4;
const NMPlatformIP6Address *address6;
char *dns_domain = NULL;
@@ -831,41 +884,29 @@ print_vpn_config (NMVPNConnection *connection)
}
}
-static gboolean
-nm_vpn_connection_apply_config (NMVPNConnection *connection)
+static void
+apply_parent_device_config (NMVpnConnection *connection)
{
- NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (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;
- if (priv->ip_ifindex > 0) {
- nm_platform_link_set_up (priv->ip_ifindex);
+ if (priv->ip4_config)
+ vpn4_parent_config = nm_ip4_config_new ();
+ if (priv->ip6_config)
+ vpn6_parent_config = nm_ip6_config_new ();
- 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 (priv->ip_ifindex <= 0) {
/* 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 (vpn4_parent_config)
+ nm_ip4_config_merge (vpn4_parent_config, priv->ip4_config);
+ if (vpn6_parent_config)
+ nm_ip6_config_merge (vpn6_parent_config, priv->ip6_config);
}
if (vpn4_parent_config) {
@@ -884,6 +925,32 @@ nm_vpn_connection_apply_config (NMVPNConnection *connection)
nm_device_set_vpn6_config (parent_dev, vpn6_parent_config);
g_object_unref (vpn6_parent_config);
}
+}
+
+static gboolean
+nm_vpn_connection_apply_config (NMVpnConnection *connection)
+{
+ NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
+
+ if (priv->ip_ifindex > 0) {
+ nm_platform_link_set_up (priv->ip_ifindex);
+
+ if (priv->ip4_config) {
+ if (!nm_ip4_config_commit (priv->ip4_config, priv->ip_ifindex,
+ nm_vpn_connection_get_ip4_route_metric (connection)))
+ return FALSE;
+ }
+
+ if (priv->ip6_config) {
+ if (!nm_ip6_config_commit (priv->ip6_config, priv->ip_ifindex))
+ return FALSE;
+ }
+ }
+
+ apply_parent_device_config (connection);
+
+ nm_default_route_manager_ip4_update_default_route (nm_default_route_manager_get (), connection);
+ nm_default_route_manager_ip6_update_default_route (nm_default_route_manager_get (), connection);
nm_log_info (LOGD_VPN, "VPN connection '%s' (IP Config Get) complete.",
nm_connection_get_id (priv->connection));
@@ -892,17 +959,13 @@ nm_vpn_connection_apply_config (NMVPNConnection *connection)
}
static void
-nm_vpn_connection_config_maybe_complete (NMVPNConnection *connection,
+nm_vpn_connection_config_maybe_complete (NMVpnConnection *connection,
gboolean success)
{
- NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
+ NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
- if (priv->connect_timeout == 0) {
- /* config_complete() was already called with an error;
- * ignore further calls.
- */
+ if (priv->vpn_state < STATE_IP_CONFIG_GET || priv->vpn_state > STATE_ACTIVATED)
return;
- }
if (success) {
if ( (priv->has_ip4 && !priv->ip4_config)
@@ -912,8 +975,10 @@ nm_vpn_connection_config_maybe_complete (NMVPNConnection *connection,
}
}
- g_source_remove (priv->connect_timeout);
- priv->connect_timeout = 0;
+ if (priv->connect_timeout) {
+ g_source_remove (priv->connect_timeout);
+ priv->connect_timeout = 0;
+ }
if (success) {
print_vpn_config (connection);
@@ -935,12 +1000,18 @@ nm_vpn_connection_config_maybe_complete (NMVPNConnection *connection,
nm_connection_get_id (priv->connection), property)
static gboolean
-process_generic_config (NMVPNConnection *connection,
+process_generic_config (NMVpnConnection *connection,
GHashTable *config_hash)
{
- NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
+ NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
GValue *val;
+ val = (GValue *) g_hash_table_lookup (config_hash, NM_VPN_PLUGIN_CAN_PERSIST);
+ if (val && G_VALUE_HOLDS_BOOLEAN (val) && g_value_get_boolean (val)) {
+ /* Defaults to FALSE, so only let service indicate TRUE */
+ priv->service_can_persist = TRUE;
+ }
+
g_clear_pointer (&priv->ip_iface, g_free);
val = (GValue *) g_hash_table_lookup (config_hash, NM_VPN_PLUGIN_CONFIG_TUNDEV);
if (val) {
@@ -1014,8 +1085,8 @@ nm_vpn_connection_config_get (DBusGProxy *proxy,
GHashTable *config_hash,
gpointer user_data)
{
- NMVPNConnection *connection = NM_VPN_CONNECTION (user_data);
- NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
+ NMVpnConnection *connection = NM_VPN_CONNECTION (user_data);
+ NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
GValue *val;
nm_log_info (LOGD_VPN, "VPN connection '%s' (IP Config Get) reply received.",
@@ -1049,18 +1120,34 @@ nm_vpn_connection_config_get (DBusGProxy *proxy,
g_clear_object (&priv->ip6_config);
}
-static guint
-vpn_routing_metric (NMVPNConnection *connection)
+guint32
+nm_vpn_connection_get_ip4_route_metric (NMVpnConnection *connection)
{
- NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (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));
+ if (priv->connection) {
+ gint64 route_metric = nm_setting_ip_config_get_route_metric (nm_connection_get_setting_ip4_config (priv->connection));
- return nm_device_get_priority (parent_dev);
+ if (route_metric >= 0)
+ return route_metric;
}
+
+ return NM_VPN_ROUTE_METRIC_DEFAULT;
+}
+
+guint32
+nm_vpn_connection_get_ip6_route_metric (NMVpnConnection *connection)
+{
+ NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
+
+ if (priv->connection) {
+ gint64 route_metric = nm_setting_ip_config_get_route_metric (nm_connection_get_setting_ip6_config (priv->connection));
+
+ if (route_metric >= 0)
+ return route_metric;
+ }
+
+ return NM_VPN_ROUTE_METRIC_DEFAULT;
}
static void
@@ -1068,12 +1155,13 @@ nm_vpn_connection_ip4_config_get (DBusGProxy *proxy,
GHashTable *config_hash,
gpointer user_data)
{
- NMVPNConnection *connection = NM_VPN_CONNECTION (user_data);
- NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
+ NMVpnConnection *connection = NM_VPN_CONNECTION (user_data);
+ NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
NMPlatformIP4Address address;
NMIP4Config *config;
GValue *val;
int i;
+ guint32 route_metric;
if (priv->vpn_state == STATE_CONNECT)
_set_vpn_state (connection, STATE_IP_CONFIG_GET, NM_VPN_CONNECTION_STATE_REASON_NONE, FALSE);
@@ -1126,7 +1214,7 @@ nm_vpn_connection_ip4_config_get (DBusGProxy *proxy,
address.plen = g_value_get_uint (val);
if (address.address && address.plen) {
- address.source = NM_PLATFORM_SOURCE_VPN;
+ address.source = NM_IP_CONFIG_SOURCE_VPN;
nm_ip4_config_add_address (config, &address);
} else {
nm_log_err (LOGD_VPN, "invalid IP4 config received!");
@@ -1156,7 +1244,7 @@ nm_vpn_connection_ip4_config_get (DBusGProxy *proxy,
nm_ip4_config_set_mss (config, g_value_get_uint (val));
if (priv->mtu)
- nm_ip4_config_set_mtu (config, priv->mtu);
+ nm_ip4_config_set_mtu (config, priv->mtu, NM_IP_CONFIG_SOURCE_VPN);
val = (GValue *) g_hash_table_lookup (config_hash, NM_VPN_PLUGIN_IP4_CONFIG_DOMAIN);
if (val)
@@ -1171,6 +1259,8 @@ nm_vpn_connection_ip4_config_get (DBusGProxy *proxy,
nm_ip4_config_add_domain (config, *domain);
}
+ route_metric = nm_vpn_connection_get_ip4_route_metric (connection);
+
val = (GValue *) g_hash_table_lookup (config_hash, NM_VPN_PLUGIN_IP4_CONFIG_ROUTES);
if (val) {
GSList *routes;
@@ -1178,15 +1268,15 @@ nm_vpn_connection_ip4_config_get (DBusGProxy *proxy,
routes = nm_utils_ip4_routes_from_gvalue (val);
for (iter = routes; iter; iter = iter->next) {
- NMIP4Route *item = iter->data;
+ NMIPRoute *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);
+ nm_ip_route_get_dest_binary (item, &route.network);
+ route.plen = nm_ip_route_get_prefix (item);
+ nm_ip_route_get_next_hop_binary (item, &route.gateway);
+ route.source = NM_IP_CONFIG_SOURCE_VPN;
+ route.metric = route_metric;
/* Ignore host routes to the VPN gateway since NM adds one itself
* below. Since NM knows more about the routing situation than
@@ -1200,7 +1290,7 @@ nm_vpn_connection_ip4_config_get (DBusGProxy *proxy,
nm_ip4_config_add_route (config, &route);
}
- g_slist_free_full (routes, (GDestroyNotify) nm_ip4_route_unref);
+ g_slist_free_full (routes, (GDestroyNotify) nm_ip_route_unref);
}
val = (GValue *) g_hash_table_lookup (config_hash, NM_VPN_PLUGIN_IP4_CONFIG_NEVER_DEFAULT);
@@ -1210,8 +1300,9 @@ nm_vpn_connection_ip4_config_get (DBusGProxy *proxy,
/* Merge in user overrides from the NMConnection's IPv4 setting */
nm_ip4_config_merge_setting (config,
nm_connection_get_setting_ip4_config (priv->connection),
- vpn_routing_metric (connection));
+ route_metric);
+ g_clear_object (&priv->ip4_config);
priv->ip4_config = config;
nm_ip4_config_export (config);
g_object_notify (G_OBJECT (connection), NM_ACTIVE_CONNECTION_IP4_CONFIG);
@@ -1223,12 +1314,13 @@ nm_vpn_connection_ip6_config_get (DBusGProxy *proxy,
GHashTable *config_hash,
gpointer user_data)
{
- NMVPNConnection *connection = NM_VPN_CONNECTION (user_data);
- NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
+ NMVpnConnection *connection = NM_VPN_CONNECTION (user_data);
+ NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
NMPlatformIP6Address address;
NMIP6Config *config;
GValue *val;
int i;
+ guint32 route_metric;
nm_log_info (LOGD_VPN, "VPN connection '%s' (IP6 Config Get) reply received.",
nm_connection_get_id (priv->connection));
@@ -1280,7 +1372,7 @@ nm_vpn_connection_ip6_config_get (DBusGProxy *proxy,
address.plen = g_value_get_uint (val);
if (!IN6_IS_ADDR_UNSPECIFIED (&address.address) && address.plen) {
- address.source = NM_PLATFORM_SOURCE_VPN;
+ address.source = NM_IP_CONFIG_SOURCE_VPN;
nm_ip6_config_add_address (config, &address);
} else {
nm_log_err (LOGD_VPN, "invalid IP6 config received!");
@@ -1317,6 +1409,8 @@ nm_vpn_connection_ip6_config_get (DBusGProxy *proxy,
nm_ip6_config_add_domain (config, *domain);
}
+ route_metric = nm_vpn_connection_get_ip6_route_metric (connection);
+
val = (GValue *) g_hash_table_lookup (config_hash, NM_VPN_PLUGIN_IP6_CONFIG_ROUTES);
if (val) {
GSList *routes;
@@ -1324,15 +1418,15 @@ nm_vpn_connection_ip6_config_get (DBusGProxy *proxy,
routes = nm_utils_ip6_routes_from_gvalue (val);
for (iter = routes; iter; iter = iter->next) {
- NMIP6Route *item = iter->data;
+ NMIPRoute *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);
+ nm_ip_route_get_dest_binary (item, &route.network);
+ route.plen = nm_ip_route_get_prefix (item);
+ nm_ip_route_get_next_hop_binary (item, &route.gateway);
+ route.source = NM_IP_CONFIG_SOURCE_VPN;
+ route.metric = route_metric;
/* Ignore host routes to the VPN gateway since NM adds one itself
* below. Since NM knows more about the routing situation than
@@ -1346,7 +1440,7 @@ nm_vpn_connection_ip6_config_get (DBusGProxy *proxy,
nm_ip6_config_add_route (config, &route);
}
- g_slist_free_full (routes, (GDestroyNotify) nm_ip6_route_unref);
+ g_slist_free_full (routes, (GDestroyNotify) nm_ip_route_unref);
}
val = (GValue *) g_hash_table_lookup (config_hash, NM_VPN_PLUGIN_IP6_CONFIG_NEVER_DEFAULT);
@@ -1356,8 +1450,9 @@ nm_vpn_connection_ip6_config_get (DBusGProxy *proxy,
/* Merge in user overrides from the NMConnection's IPv6 setting */
nm_ip6_config_merge_setting (config,
nm_connection_get_setting_ip6_config (priv->connection),
- vpn_routing_metric (connection));
+ route_metric);
+ g_clear_object (&priv->ip6_config);
priv->ip6_config = config;
nm_ip6_config_export (config);
g_object_notify (G_OBJECT (connection), NM_ACTIVE_CONNECTION_IP6_CONFIG);
@@ -1367,8 +1462,8 @@ nm_vpn_connection_ip6_config_get (DBusGProxy *proxy,
static gboolean
connect_timeout_cb (gpointer user_data)
{
- NMVPNConnection *connection = NM_VPN_CONNECTION (user_data);
- NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
+ NMVpnConnection *connection = NM_VPN_CONNECTION (user_data);
+ NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
priv->connect_timeout = 0;
@@ -1384,9 +1479,9 @@ connect_timeout_cb (gpointer user_data)
}
static void
-connect_success (NMVPNConnection *connection)
+connect_success (NMVpnConnection *connection)
{
- NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
+ 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);
@@ -1398,8 +1493,8 @@ connect_success (NMVPNConnection *connection)
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);
+ 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.",
@@ -1420,8 +1515,8 @@ connect_cb (DBusGProxy *proxy, DBusGProxyCall *call, void *user_data)
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);
+ 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.",
@@ -1452,8 +1547,9 @@ static GHashTable *
_hash_with_username (NMConnection *connection, const char *username)
{
NMConnection *dup;
- NMSettingVPN *s_vpn;
+ NMSettingVpn *s_vpn;
GHashTable *hash;
+ GVariant *dict;
const char *existing;
/* Shortcut if we weren't given a username or if there already was one in
@@ -1462,23 +1558,30 @@ _hash_with_username (NMConnection *connection, const char *username)
s_vpn = nm_connection_get_setting_vpn (connection);
g_assert (s_vpn);
existing = nm_setting_vpn_get_user_name (s_vpn);
- if (username == NULL || existing)
- return nm_connection_to_hash (connection, NM_SETTING_HASH_FLAG_ALL);
+ if (username == NULL || existing) {
+ dict = nm_connection_to_dbus (connection, NM_CONNECTION_SERIALIZE_ALL);
+ hash = nm_utils_connection_dict_to_hash (dict);
+ g_variant_unref (dict);
+ return hash;
+ }
- dup = nm_connection_duplicate (connection);
+ dup = nm_simple_connection_new_clone (connection);
g_assert (dup);
s_vpn = nm_connection_get_setting_vpn (dup);
g_assert (s_vpn);
g_object_set (s_vpn, NM_SETTING_VPN_USER_NAME, username, NULL);
- hash = nm_connection_to_hash (dup, NM_SETTING_HASH_FLAG_ALL);
+ dict = nm_connection_to_dbus (dup, NM_CONNECTION_SERIALIZE_ALL);
g_object_unref (dup);
+
+ hash = nm_utils_connection_dict_to_hash (dict);
+ g_variant_unref (dict);
return hash;
}
static void
-really_activate (NMVPNConnection *connection, const char *username)
+really_activate (NMVpnConnection *connection, const char *username)
{
- NMVPNConnectionPrivate *priv;
+ NMVpnConnectionPrivate *priv;
NMAgentManager *agent_mgr;
GHashTable *details;
@@ -1542,15 +1645,20 @@ really_activate (NMVPNConnection *connection, const char *username)
}
void
-nm_vpn_connection_activate (NMVPNConnection *connection)
+nm_vpn_connection_activate (NMVpnConnection *connection)
{
- NMVPNConnectionPrivate *priv;
+ NMVpnConnectionPrivate *priv;
+ NMSettingVpn *s_vpn;
DBusGConnection *bus;
g_return_if_fail (NM_IS_VPN_CONNECTION (connection));
priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
+ s_vpn = nm_connection_get_setting_vpn (priv->connection);
+ g_assert (s_vpn);
+ priv->connection_can_persist = nm_setting_vpn_get_persistent (s_vpn);
+
_set_vpn_state (connection, STATE_PREPARE, NM_VPN_CONNECTION_STATE_REASON_NONE, FALSE);
bus = nm_dbus_manager_get_connection (nm_dbus_manager_get ());
@@ -1588,15 +1696,26 @@ nm_vpn_connection_activate (NMVPNConnection *connection)
}
NMConnection *
-nm_vpn_connection_get_connection (NMVPNConnection *connection)
+nm_vpn_connection_get_connection (NMVpnConnection *connection)
{
g_return_val_if_fail (NM_IS_VPN_CONNECTION (connection), NULL);
return NM_VPN_CONNECTION_GET_PRIVATE (connection)->connection;
}
-NMVPNConnectionState
-nm_vpn_connection_get_vpn_state (NMVPNConnection *connection)
+const char*
+nm_vpn_connection_get_connection_id (NMVpnConnection *connection)
+{
+ NMConnection *c;
+
+ g_return_val_if_fail (NM_IS_VPN_CONNECTION (connection), NULL);
+
+ c = NM_VPN_CONNECTION_GET_PRIVATE (connection)->connection;
+ return c ? nm_connection_get_id (c) : NULL;
+}
+
+NMVpnConnectionState
+nm_vpn_connection_get_vpn_state (NMVpnConnection *connection)
{
g_return_val_if_fail (NM_IS_VPN_CONNECTION (connection), NM_VPN_CONNECTION_STATE_UNKNOWN);
@@ -1604,7 +1723,7 @@ nm_vpn_connection_get_vpn_state (NMVPNConnection *connection)
}
const char *
-nm_vpn_connection_get_banner (NMVPNConnection *connection)
+nm_vpn_connection_get_banner (NMVpnConnection *connection)
{
g_return_val_if_fail (NM_IS_VPN_CONNECTION (connection), NULL);
@@ -1612,7 +1731,7 @@ nm_vpn_connection_get_banner (NMVPNConnection *connection)
}
NMIP4Config *
-nm_vpn_connection_get_ip4_config (NMVPNConnection *connection)
+nm_vpn_connection_get_ip4_config (NMVpnConnection *connection)
{
g_return_val_if_fail (NM_IS_VPN_CONNECTION (connection), NULL);
@@ -1620,7 +1739,7 @@ nm_vpn_connection_get_ip4_config (NMVPNConnection *connection)
}
NMIP6Config *
-nm_vpn_connection_get_ip6_config (NMVPNConnection *connection)
+nm_vpn_connection_get_ip6_config (NMVpnConnection *connection)
{
g_return_val_if_fail (NM_IS_VPN_CONNECTION (connection), NULL);
@@ -1628,7 +1747,7 @@ nm_vpn_connection_get_ip6_config (NMVPNConnection *connection)
}
const char *
-nm_vpn_connection_get_ip_iface (NMVPNConnection *connection)
+nm_vpn_connection_get_ip_iface (NMVpnConnection *connection)
{
g_return_val_if_fail (NM_IS_VPN_CONNECTION (connection), NULL);
@@ -1636,7 +1755,7 @@ nm_vpn_connection_get_ip_iface (NMVPNConnection *connection)
}
int
-nm_vpn_connection_get_ip_ifindex (NMVPNConnection *connection)
+nm_vpn_connection_get_ip_ifindex (NMVpnConnection *connection)
{
g_return_val_if_fail (NM_IS_VPN_CONNECTION (connection), -1);
@@ -1644,7 +1763,7 @@ nm_vpn_connection_get_ip_ifindex (NMVPNConnection *connection)
}
guint32
-nm_vpn_connection_get_ip4_internal_gateway (NMVPNConnection *connection)
+nm_vpn_connection_get_ip4_internal_gateway (NMVpnConnection *connection)
{
g_return_val_if_fail (NM_IS_VPN_CONNECTION (connection), 0);
@@ -1652,7 +1771,7 @@ nm_vpn_connection_get_ip4_internal_gateway (NMVPNConnection *connection)
}
struct in6_addr *
-nm_vpn_connection_get_ip6_internal_gateway (NMVPNConnection *connection)
+nm_vpn_connection_get_ip6_internal_gateway (NMVpnConnection *connection)
{
g_return_val_if_fail (NM_IS_VPN_CONNECTION (connection), 0);
@@ -1660,8 +1779,8 @@ nm_vpn_connection_get_ip6_internal_gateway (NMVPNConnection *connection)
}
void
-nm_vpn_connection_disconnect (NMVPNConnection *connection,
- NMVPNConnectionStateReason reason,
+nm_vpn_connection_disconnect (NMVpnConnection *connection,
+ NMVpnConnectionStateReason reason,
gboolean quitting)
{
g_return_if_fail (NM_IS_VPN_CONNECTION (connection));
@@ -1670,11 +1789,11 @@ nm_vpn_connection_disconnect (NMVPNConnection *connection,
}
gboolean
-nm_vpn_connection_deactivate (NMVPNConnection *connection,
- NMVPNConnectionStateReason reason,
+nm_vpn_connection_deactivate (NMVpnConnection *connection,
+ NMVpnConnectionStateReason reason,
gboolean quitting)
{
- NMVPNConnectionPrivate *priv;
+ NMVpnConnectionPrivate *priv;
gboolean success = FALSE;
g_return_val_if_fail (NM_IS_VPN_CONNECTION (connection), FALSE);
@@ -1692,8 +1811,8 @@ nm_vpn_connection_deactivate (NMVPNConnection *connection,
static void
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);
+ NMVpnConnection *self = NM_VPN_CONNECTION (user_data);
+ NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (self);
GError *error = NULL;
char *setting_name;
@@ -1741,11 +1860,13 @@ plugin_need_secrets_cb (DBusGProxy *proxy, DBusGProxyCall *call, void *user_dat
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);
+ 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)) {
+ if (dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID)) {
+ _set_vpn_state (self, STATE_CONNECT, NM_VPN_CONNECTION_STATE_REASON_NONE, FALSE);
+ } else {
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),
@@ -1764,8 +1885,8 @@ get_secrets_cb (NMSettingsConnection *connection,
GError *error,
gpointer user_data)
{
- NMVPNConnection *self = NM_VPN_CONNECTION (user_data);
- NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (self);
+ NMVpnConnection *self = NM_VPN_CONNECTION (user_data);
+ NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (self);
GHashTable *hash;
g_return_if_fail (NM_CONNECTION (connection) == priv->connection);
@@ -1813,12 +1934,12 @@ get_secrets_cb (NMSettingsConnection *connection,
}
static void
-get_secrets (NMVPNConnection *self,
+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;
+ NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (self);
+ NMSecretAgentGetSecretsFlags flags = NM_SECRET_AGENT_GET_SECRETS_FLAG_NONE;
GError *error = NULL;
g_return_if_fail (secrets_idx < SECRETS_REQ_LAST);
@@ -1831,21 +1952,21 @@ get_secrets (NMVPNConnection *self,
switch (priv->secrets_idx) {
case SECRETS_REQ_SYSTEM:
- flags = NM_SETTINGS_GET_SECRETS_FLAG_ONLY_SYSTEM;
+ flags = NM_SECRET_AGENT_GET_SECRETS_FLAG_ONLY_SYSTEM;
break;
case SECRETS_REQ_EXISTING:
- flags = NM_SETTINGS_GET_SECRETS_FLAG_NONE;
+ flags = NM_SECRET_AGENT_GET_SECRETS_FLAG_NONE;
break;
case SECRETS_REQ_NEW:
case SECRETS_REQ_INTERACTIVE:
- flags = NM_SETTINGS_GET_SECRETS_FLAG_ALLOW_INTERACTION;
+ flags = NM_SECRET_AGENT_GET_SECRETS_FLAG_ALLOW_INTERACTION;
break;
default:
g_assert_not_reached ();
}
if (nm_active_connection_get_user_requested (NM_ACTIVE_CONNECTION (self)))
- flags |= NM_SETTINGS_GET_SECRETS_FLAG_USER_REQUESTED;
+ flags |= NM_SECRET_AGENT_GET_SECRETS_FLAG_USER_REQUESTED;
priv->secrets_id = nm_settings_connection_get_secrets (NM_SETTINGS_CONNECTION (priv->connection),
nm_active_connection_get_subject (NM_ACTIVE_CONNECTION (self)),
@@ -1871,8 +1992,8 @@ plugin_interactive_secrets_required (DBusGProxy *proxy,
const char **secrets,
gpointer user_data)
{
- NMVPNConnection *connection = NM_VPN_CONNECTION (user_data);
- NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
+ 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;
@@ -1900,9 +2021,42 @@ plugin_interactive_secrets_required (DBusGProxy *proxy,
/******************************************************************************/
static void
-nm_vpn_connection_init (NMVPNConnection *self)
+device_changed (NMActiveConnection *active,
+ NMDevice *new_device,
+ NMDevice *old_device)
{
- NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (self);
+ NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (active);
+
+ if (!_service_and_connection_can_persist (NM_VPN_CONNECTION (active)))
+ return;
+ if (priv->vpn_state < STATE_CONNECT || priv->vpn_state > STATE_ACTIVATED)
+ return;
+
+ /* Route-based VPNs must update their routing and send a new IP config
+ * since all their routes need to be adjusted for new_device.
+ */
+ if (priv->ip_ifindex <= 0)
+ return;
+
+ /* Device changed underneath the VPN connection. Let the plugin figure
+ * out that connectivity is down and start its reconnect attempt if it
+ * needs to.
+ */
+ if (old_device) {
+ nm_device_set_vpn4_config (old_device, NULL);
+ nm_device_set_vpn6_config (old_device, NULL);
+ }
+
+ if (new_device)
+ apply_parent_device_config (NM_VPN_CONNECTION (active));
+}
+
+/******************************************************************************/
+
+static void
+nm_vpn_connection_init (NMVpnConnection *self)
+{
+ NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (self);
priv->vpn_state = STATE_WAITING;
priv->secrets_idx = SECRETS_REQ_SYSTEM;
@@ -1922,7 +2076,7 @@ constructed (GObject *object)
static void
dispose (GObject *object)
{
- NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (object);
+ NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (object);
if (priv->connect_hash) {
g_hash_table_destroy (priv->connect_hash);
@@ -1953,7 +2107,7 @@ dispose (GObject *object)
static void
finalize (GObject *object)
{
- NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (object);
+ NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (object);
g_free (priv->banner);
g_free (priv->ip_iface);
@@ -1974,7 +2128,7 @@ static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
- NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (object);
+ NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (object);
NMDevice *parent_dev;
switch (prop_id) {
@@ -2007,12 +2161,12 @@ get_property (GObject *object, guint prop_id,
}
static void
-nm_vpn_connection_class_init (NMVPNConnectionClass *connection_class)
+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));
+ g_type_class_add_private (connection_class, sizeof (NMVpnConnectionPrivate));
/* virtual methods */
object_class->get_property = get_property;
@@ -2020,25 +2174,26 @@ nm_vpn_connection_class_init (NMVPNConnectionClass *connection_class)
object_class->dispose = dispose;
object_class->finalize = finalize;
active_class->device_state_changed = device_state_changed;
+ active_class->device_changed = device_changed;
g_object_class_override_property (object_class, PROP_MASTER, NM_ACTIVE_CONNECTION_MASTER);
/* properties */
- g_object_class_install_property (object_class, PROP_VPN_STATE,
- g_param_spec_uint (NM_VPN_CONNECTION_VPN_STATE,
- "VpnState",
- "Current VPN state",
- NM_VPN_CONNECTION_STATE_UNKNOWN,
- NM_VPN_CONNECTION_STATE_DISCONNECTED,
- NM_VPN_CONNECTION_STATE_UNKNOWN,
- G_PARAM_READABLE));
-
- g_object_class_install_property (object_class, PROP_BANNER,
- g_param_spec_string (NM_VPN_CONNECTION_BANNER,
- "Banner",
- "Login Banner",
- NULL,
- G_PARAM_READABLE));
+ g_object_class_install_property
+ (object_class, PROP_VPN_STATE,
+ g_param_spec_uint (NM_VPN_CONNECTION_VPN_STATE, "", "",
+ NM_VPN_CONNECTION_STATE_UNKNOWN,
+ NM_VPN_CONNECTION_STATE_DISCONNECTED,
+ NM_VPN_CONNECTION_STATE_UNKNOWN,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_BANNER,
+ g_param_spec_string (NM_VPN_CONNECTION_BANNER, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_class_override_property (object_class, PROP_IP4_CONFIG,
NM_ACTIVE_CONNECTION_IP4_CONFIG);
@@ -2060,6 +2215,13 @@ nm_vpn_connection_class_init (NMVPNConnectionClass *connection_class)
0, NULL, NULL, NULL,
G_TYPE_NONE, 3, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT);
+ signals[INTERNAL_RETRY_AFTER_FAILURE] =
+ g_signal_new (NM_VPN_CONNECTION_INTERNAL_RETRY_AFTER_FAILURE,
+ 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 (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 c9c88cda1..0e63caac3 100644
--- a/src/vpn-manager/nm-vpn-connection.h
+++ b/src/vpn-manager/nm-vpn-connection.h
@@ -19,21 +19,22 @@
* Copyright (C) 2006 - 2008 Novell, Inc.
*/
-#ifndef NM_VPN_CONNECTION_H
-#define NM_VPN_CONNECTION_H
+#ifndef __NETWORKMANAGER_VPN_CONNECTION_H__
+#define __NETWORKMANAGER_VPN_CONNECTION_H__
#include <glib.h>
#include <glib-object.h>
-#include "NetworkManagerVPN.h"
+#include "nm-vpn-dbus-interface.h"
#include "nm-device.h"
#include "nm-auth-subject.h"
+#include "nm-active-connection.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))
-#define NM_VPN_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_VPN_CONNECTION, NMVPNConnectionClass))
+#define NM_VPN_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_VPN_CONNECTION, NMVpnConnection))
+#define NM_VPN_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_VPN_CONNECTION, NMVpnConnectionClass))
#define NM_IS_VPN_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_VPN_CONNECTION))
#define NM_IS_VPN_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_VPN_CONNECTION))
-#define NM_VPN_CONNECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_VPN_CONNECTION, NMVPNConnectionClass))
+#define NM_VPN_CONNECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_VPN_CONNECTION, NMVpnConnectionClass))
/* Properties */
#define NM_VPN_CONNECTION_VPN_STATE "vpn-state"
@@ -41,52 +42,62 @@
/* Signals */
/* not exported: includes old reason code */
-#define NM_VPN_CONNECTION_INTERNAL_STATE_CHANGED "internal-state-changed"
+#define NM_VPN_CONNECTION_INTERNAL_STATE_CHANGED "internal-state-changed"
+#define NM_VPN_CONNECTION_INTERNAL_RETRY_AFTER_FAILURE "internal-retry-after-failure"
-typedef struct {
+#define NM_VPN_ROUTE_METRIC_DEFAULT 50
+
+
+struct _NMVpnConnection {
NMActiveConnection parent;
-} NMVPNConnection;
+};
typedef struct {
NMActiveConnectionClass parent;
/* Signals */
- void (*vpn_state_changed) (NMVPNConnection *connection,
- NMVPNConnectionState new_state,
- NMVPNConnectionStateReason reason);
+ void (*vpn_state_changed) (NMVpnConnection *connection,
+ NMVpnConnectionState new_state,
+ NMVpnConnectionStateReason reason);
/* not exported over D-Bus */
- void (*internal_state_changed) (NMVPNConnection *connection,
- NMVPNConnectionState new_state,
- NMVPNConnectionState old_state,
- NMVPNConnectionStateReason reason);
-} NMVPNConnectionClass;
+ void (*internal_state_changed) (NMVpnConnection *connection,
+ NMVpnConnectionState new_state,
+ NMVpnConnectionState old_state,
+ NMVpnConnectionStateReason reason);
+
+ void (*internal_failed_retry) (NMVpnConnection *connection);
+} NMVpnConnectionClass;
GType nm_vpn_connection_get_type (void);
-NMVPNConnection * nm_vpn_connection_new (NMConnection *connection,
+NMVpnConnection * nm_vpn_connection_new (NMConnection *connection,
NMDevice *parent_device,
const char *specific_object,
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_activate (NMVpnConnection *connection);
+NMConnection * nm_vpn_connection_get_connection (NMVpnConnection *connection);
+const char* nm_vpn_connection_get_connection_id (NMVpnConnection *connection);
+NMVpnConnectionState nm_vpn_connection_get_vpn_state (NMVpnConnection *connection);
+const char * nm_vpn_connection_get_banner (NMVpnConnection *connection);
-gboolean nm_vpn_connection_deactivate (NMVPNConnection *connection,
- NMVPNConnectionStateReason reason,
+gboolean nm_vpn_connection_deactivate (NMVpnConnection *connection,
+ NMVpnConnectionStateReason reason,
gboolean quitting);
-void nm_vpn_connection_disconnect (NMVPNConnection *connection,
- NMVPNConnectionStateReason reason,
+void nm_vpn_connection_disconnect (NMVpnConnection *connection,
+ 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);
-guint32 nm_vpn_connection_get_ip4_internal_gateway (NMVPNConnection *connection);
-struct in6_addr * nm_vpn_connection_get_ip6_internal_gateway (NMVPNConnection *connection);
+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);
+guint32 nm_vpn_connection_get_ip4_internal_gateway (NMVpnConnection *connection);
+struct in6_addr * nm_vpn_connection_get_ip6_internal_gateway (NMVpnConnection *connection);
+
+guint32 nm_vpn_connection_get_ip4_route_metric (NMVpnConnection *connection);
+guint32 nm_vpn_connection_get_ip6_route_metric (NMVpnConnection *connection);
-#endif /* NM_VPN_CONNECTION_H */
+#endif /* __NETWORKMANAGER_VPN_CONNECTION_H__ */
diff --git a/src/vpn-manager/nm-vpn-manager.c b/src/vpn-manager/nm-vpn-manager.c
index 5550d4d6c..1f3798c7f 100644
--- a/src/vpn-manager/nm-vpn-manager.c
+++ b/src/vpn-manager/nm-vpn-manager.c
@@ -19,6 +19,8 @@
* Copyright (C) 2006 - 2008 Novell, Inc.
*/
+#include "config.h"
+
#include <string.h>
#include <gio/gio.h>
@@ -27,36 +29,27 @@
#include "nm-vpn-connection.h"
#include "nm-setting-vpn.h"
#include "nm-dbus-manager.h"
-#include "NetworkManagerVPN.h"
+#include "nm-vpn-dbus-interface.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)
+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))
+#define NM_VPN_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_VPN_MANAGER, NMVpnManagerPrivate))
typedef struct {
GHashTable *services;
GFileMonitor *monitor;
guint monitor_id;
-} NMVPNManagerPrivate;
+} NMVpnManagerPrivate;
-GQuark
-nm_vpn_manager_error_quark (void)
-{
- static GQuark quark = 0;
- if (!quark)
- quark = g_quark_from_static_string ("nm-vpn-manager-error");
- return quark;
-}
-
-static NMVPNService *
-get_service_by_namefile (NMVPNManager *self, const char *namefile)
+static NMVpnService *
+get_service_by_namefile (NMVpnManager *self, const char *namefile)
{
- NMVPNManagerPrivate *priv = NM_VPN_MANAGER_GET_PRIVATE (self);
+ NMVpnManagerPrivate *priv = NM_VPN_MANAGER_GET_PRIVATE (self);
GHashTableIter iter;
gpointer data;
@@ -65,7 +58,7 @@ get_service_by_namefile (NMVPNManager *self, const char *namefile)
g_hash_table_iter_init (&iter, priv->services);
while (g_hash_table_iter_next (&iter, NULL, &data)) {
- NMVPNService *candidate = NM_VPN_SERVICE (data);
+ NMVpnService *candidate = NM_VPN_SERVICE (data);
const char *service_namefile;
service_namefile = nm_vpn_service_get_name_file (candidate);
@@ -76,13 +69,13 @@ get_service_by_namefile (NMVPNManager *self, const char *namefile)
}
gboolean
-nm_vpn_manager_activate_connection (NMVPNManager *manager,
- NMVPNConnection *vpn,
+nm_vpn_manager_activate_connection (NMVpnManager *manager,
+ NMVpnConnection *vpn,
GError **error)
{
NMConnection *connection;
- NMSettingVPN *s_vpn;
- NMVPNService *service;
+ NMSettingVpn *s_vpn;
+ NMVpnService *service;
const char *service_name;
NMDevice *device;
@@ -95,7 +88,7 @@ nm_vpn_manager_activate_connection (NMVPNManager *manager,
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_literal (error, NM_VPN_MANAGER_ERROR, NM_VPN_MANAGER_ERROR_DEVICE_NOT_ACTIVE,
+ g_set_error_literal (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_DEPENDENCY_FAILED,
"The base device for the VPN connection was not active.");
return FALSE;
}
@@ -109,7 +102,7 @@ nm_vpn_manager_activate_connection (NMVPNManager *manager,
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_MANAGER_ERROR, NM_MANAGER_ERROR_CONNECTION_NOT_AVAILABLE,
"The VPN service '%s' was not installed.",
service_name);
return FALSE;
@@ -119,18 +112,18 @@ nm_vpn_manager_activate_connection (NMVPNManager *manager,
}
gboolean
-nm_vpn_manager_deactivate_connection (NMVPNManager *self,
- NMVPNConnection *connection,
- NMVPNConnectionStateReason reason)
+nm_vpn_manager_deactivate_connection (NMVpnManager *self,
+ NMVpnConnection *connection,
+ NMVpnConnectionStateReason reason)
{
return nm_vpn_connection_deactivate (connection, reason, FALSE);
}
static void
-try_add_service (NMVPNManager *self, const char *namefile)
+try_add_service (NMVpnManager *self, const char *namefile)
{
- NMVPNManagerPrivate *priv = NM_VPN_MANAGER_GET_PRIVATE (self);
- NMVPNService *service = NULL;
+ NMVpnManagerPrivate *priv = NM_VPN_MANAGER_GET_PRIVATE (self);
+ NMVpnService *service = NULL;
GHashTableIter iter;
GError *error = NULL;
const char *service_name;
@@ -166,9 +159,9 @@ vpn_dir_changed (GFileMonitor *monitor,
GFileMonitorEvent event_type,
gpointer user_data)
{
- NMVPNManager *self = NM_VPN_MANAGER (user_data);
- NMVPNManagerPrivate *priv = NM_VPN_MANAGER_GET_PRIVATE (self);
- NMVPNService *service;
+ NMVpnManager *self = NM_VPN_MANAGER (user_data);
+ NMVpnManagerPrivate *priv = NM_VPN_MANAGER_GET_PRIVATE (self);
+ NMVpnService *service;
char *path;
path = g_file_get_path (file);
@@ -207,10 +200,10 @@ vpn_dir_changed (GFileMonitor *monitor,
/******************************************************************************/
-NMVPNManager *
+NMVpnManager *
nm_vpn_manager_get (void)
{
- static NMVPNManager *singleton = NULL;
+ static NMVpnManager *singleton = NULL;
if (!singleton)
singleton = NM_VPN_MANAGER (g_object_new (NM_TYPE_VPN_MANAGER, NULL));
@@ -222,9 +215,9 @@ nm_vpn_manager_get (void)
}
static void
-nm_vpn_manager_init (NMVPNManager *self)
+nm_vpn_manager_init (NMVpnManager *self)
{
- NMVPNManagerPrivate *priv = NM_VPN_MANAGER_GET_PRIVATE (self);
+ NMVpnManagerPrivate *priv = NM_VPN_MANAGER_GET_PRIVATE (self);
GFile *file;
GDir *dir;
const char *fn;
@@ -258,11 +251,11 @@ nm_vpn_manager_init (NMVPNManager *self)
}
static void
-stop_all_services (NMVPNManager *self)
+stop_all_services (NMVpnManager *self)
{
- NMVPNManagerPrivate *priv = NM_VPN_MANAGER_GET_PRIVATE (self);
+ NMVpnManagerPrivate *priv = NM_VPN_MANAGER_GET_PRIVATE (self);
GHashTableIter iter;
- NMVPNService *service;
+ NMVpnService *service;
g_hash_table_iter_init (&iter, priv->services);
while (g_hash_table_iter_next (&iter, NULL, (gpointer) &service)) {
@@ -275,7 +268,7 @@ stop_all_services (NMVPNManager *self)
static void
dispose (GObject *object)
{
- NMVPNManagerPrivate *priv = NM_VPN_MANAGER_GET_PRIVATE (object);
+ NMVpnManagerPrivate *priv = NM_VPN_MANAGER_GET_PRIVATE (object);
if (priv->monitor) {
if (priv->monitor_id)
@@ -294,15 +287,13 @@ dispose (GObject *object)
}
static void
-nm_vpn_manager_class_init (NMVPNManagerClass *manager_class)
+nm_vpn_manager_class_init (NMVpnManagerClass *manager_class)
{
GObjectClass *object_class = G_OBJECT_CLASS (manager_class);
- g_type_class_add_private (manager_class, sizeof (NMVPNManagerPrivate));
+ g_type_class_add_private (manager_class, sizeof (NMVpnManagerPrivate));
/* virtual methods */
object_class->dispose = dispose;
-
- dbus_g_error_domain_register (NM_VPN_MANAGER_ERROR, NULL, NM_TYPE_VPN_MANAGER_ERROR);
}
diff --git a/src/vpn-manager/nm-vpn-manager.h b/src/vpn-manager/nm-vpn-manager.h
index 57f947b0e..b75a61795 100644
--- a/src/vpn-manager/nm-vpn-manager.h
+++ b/src/vpn-manager/nm-vpn-manager.h
@@ -19,52 +19,38 @@
* Copyright (C) 2006 - 2008 Novell, Inc.
*/
-#ifndef NM_VPN_MANAGER_H
-#define NM_VPN_MANAGER_H
+#ifndef __NETWORKMANAGER_VPN_MANAGER_H__
+#define __NETWORKMANAGER_VPN_MANAGER_H__
#include <glib.h>
#include <glib-object.h>
#include "nm-vpn-connection.h"
#define NM_TYPE_VPN_MANAGER (nm_vpn_manager_get_type ())
-#define NM_VPN_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_VPN_MANAGER, NMVPNManager))
-#define NM_VPN_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_VPN_MANAGER, NMVPNManagerClass))
+#define NM_VPN_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_VPN_MANAGER, NMVpnManager))
+#define NM_VPN_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_VPN_MANAGER, NMVpnManagerClass))
#define NM_IS_VPN_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_VPN_MANAGER))
#define NM_IS_VPN_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_VPN_MANAGER))
-#define NM_VPN_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_VPN_MANAGER, NMVPNManagerClass))
-
-typedef enum
-{
- NM_VPN_MANAGER_ERROR_DEVICE_NOT_ACTIVE = 0, /*< nick=BaseDeviceNotActive >*/
- NM_VPN_MANAGER_ERROR_CONNECTION_INVALID, /*< nick=ConnectionInvalid >*/
- NM_VPN_MANAGER_ERROR_SERVICE_INVALID, /*< nick=ServiceInvalid >*/
- NM_VPN_MANAGER_ERROR_SERVICE_START_FAILED, /*< nick=ServiceStartFailed >*/
-} NMVPNManagerError;
-
-#define NM_VPN_MANAGER_ERROR (nm_vpn_manager_error_quark ())
-
-GQuark nm_vpn_manager_error_quark (void);
-GType nm_vpn_manager_error_get_type (void);
-
+#define NM_VPN_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_VPN_MANAGER, NMVpnManagerClass))
typedef struct {
GObject parent;
-} NMVPNManager;
+} NMVpnManager;
typedef struct {
GObjectClass parent;
-} NMVPNManagerClass;
+} NMVpnManagerClass;
GType nm_vpn_manager_get_type (void);
-NMVPNManager *nm_vpn_manager_get (void);
+NMVpnManager *nm_vpn_manager_get (void);
-gboolean nm_vpn_manager_activate_connection (NMVPNManager *manager,
- NMVPNConnection *vpn,
+gboolean nm_vpn_manager_activate_connection (NMVpnManager *manager,
+ NMVpnConnection *vpn,
GError **error);
-gboolean nm_vpn_manager_deactivate_connection (NMVPNManager *manager,
- NMVPNConnection *connection,
- NMVPNConnectionStateReason reason);
+gboolean nm_vpn_manager_deactivate_connection (NMVpnManager *manager,
+ NMVpnConnection *connection,
+ NMVpnConnectionStateReason reason);
-#endif /* NM_VPN_MANAGER_H */
+#endif /* __NETWORKMANAGER_VPN_MANAGER_H__ */
diff --git a/src/vpn-manager/nm-vpn-service.c b/src/vpn-manager/nm-vpn-service.c
index 824543fa4..b46d13ecf 100644
--- a/src/vpn-manager/nm-vpn-service.c
+++ b/src/vpn-manager/nm-vpn-service.c
@@ -19,10 +19,10 @@
* Copyright (C) 2005 - 2008 Novell, Inc.
*/
-#include <config.h>
+#include "config.h"
+
#include <glib.h>
#include <string.h>
-#include <dbus/dbus.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
@@ -35,7 +35,7 @@
#include "nm-vpn-manager.h"
#include "nm-glib-compat.h"
-G_DEFINE_TYPE (NMVPNService, nm_vpn_service, G_TYPE_OBJECT)
+G_DEFINE_TYPE (NMVpnService, nm_vpn_service, G_TYPE_OBJECT)
typedef struct {
char *name;
@@ -43,24 +43,24 @@ typedef struct {
char *program;
char *namefile;
- NMVPNConnection *active;
+ NMVpnConnection *active;
GSList *pending;
guint start_timeout;
gboolean service_running;
-} NMVPNServicePrivate;
+} NMVpnServicePrivate;
-#define NM_VPN_SERVICE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_VPN_SERVICE, 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);
+static gboolean start_pending_vpn (NMVpnService *self, GError **error);
-NMVPNService *
+NMVpnService *
nm_vpn_service_new (const char *namefile, GError **error)
{
- NMVPNService *self;
- NMVPNServicePrivate *priv;
+ NMVpnService *self;
+ NMVpnServicePrivate *priv;
GKeyFile *kf;
g_return_val_if_fail (namefile != NULL, NULL);
@@ -72,7 +72,7 @@ nm_vpn_service_new (const char *namefile, GError **error)
return NULL;
}
- self = (NMVPNService *) g_object_new (NM_TYPE_VPN_SERVICE, NULL);
+ self = (NMVpnService *) g_object_new (NM_TYPE_VPN_SERVICE, NULL);
priv = NM_VPN_SERVICE_GET_PRIVATE (self);
priv->namefile = g_strdup (namefile);
@@ -100,7 +100,7 @@ error:
}
const char *
-nm_vpn_service_get_dbus_service (NMVPNService *service)
+nm_vpn_service_get_dbus_service (NMVpnService *service)
{
g_return_val_if_fail (NM_IS_VPN_SERVICE (service), NULL);
@@ -108,7 +108,7 @@ nm_vpn_service_get_dbus_service (NMVPNService *service)
}
const char *
-nm_vpn_service_get_name_file (NMVPNService *service)
+nm_vpn_service_get_name_file (NMVpnService *service)
{
g_return_val_if_fail (NM_IS_VPN_SERVICE (service), NULL);
@@ -116,21 +116,21 @@ nm_vpn_service_get_name_file (NMVPNService *service)
}
static void
-connection_vpn_state_changed (NMVPNConnection *connection,
- NMVPNConnectionState new_state,
- NMVPNConnectionState old_state,
- NMVPNConnectionStateReason reason,
+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);
+ 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);
+ start_pending_vpn (self, NULL);
} else
priv->pending = g_slist_remove (priv->pending, connection);
g_object_unref (connection);
@@ -138,11 +138,11 @@ connection_vpn_state_changed (NMVPNConnection *connection,
}
void
-nm_vpn_service_stop_connections (NMVPNService *service,
+nm_vpn_service_stop_connections (NMVpnService *service,
gboolean quitting,
- NMVPNConnectionStateReason reason)
+ NMVpnConnectionStateReason reason)
{
- NMVPNServicePrivate *priv = NM_VPN_SERVICE_GET_PRIVATE (service);
+ NMVpnServicePrivate *priv = NM_VPN_SERVICE_GET_PRIVATE (service);
GSList *iter;
/* Just add priv->active to the beginning of priv->pending,
@@ -154,7 +154,7 @@ nm_vpn_service_stop_connections (NMVPNService *service,
}
for (iter = priv->pending; iter; iter = iter->next) {
- NMVPNConnection *vpn = NM_VPN_CONNECTION (iter->data);
+ NMVpnConnection *vpn = NM_VPN_CONNECTION (iter->data);
g_signal_handlers_disconnect_by_func (vpn, G_CALLBACK (connection_vpn_state_changed), service);
if (quitting) {
@@ -184,8 +184,8 @@ _daemon_setup (gpointer user_data G_GNUC_UNUSED)
static gboolean
_daemon_exec_timeout (gpointer data)
{
- NMVPNService *self = NM_VPN_SERVICE (data);
- NMVPNServicePrivate *priv = NM_VPN_SERVICE_GET_PRIVATE (self);
+ 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;
@@ -194,9 +194,9 @@ _daemon_exec_timeout (gpointer data)
}
static gboolean
-nm_vpn_service_daemon_exec (NMVPNService *service, GError **error)
+nm_vpn_service_daemon_exec (NMVpnService *service, GError **error)
{
- NMVPNServicePrivate *priv = NM_VPN_SERVICE_GET_PRIVATE (service);
+ NMVpnServicePrivate *priv = NM_VPN_SERVICE_GET_PRIVATE (service);
GPid pid;
char *vpn_argv[2];
gboolean success = FALSE;
@@ -219,7 +219,7 @@ nm_vpn_service_daemon_exec (NMVPNService *service, GError **error)
spawn_error && spawn_error->message ? spawn_error->message : "(unknown)");
g_set_error (error,
- NM_VPN_MANAGER_ERROR, NM_VPN_MANAGER_ERROR_SERVICE_START_FAILED,
+ NM_MANAGER_ERROR, NM_MANAGER_ERROR_FAILED,
"%s", spawn_error ? spawn_error->message : "unknown g_spawn_async() error");
nm_vpn_service_stop_connections (service, FALSE, NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_FAILED);
@@ -231,9 +231,9 @@ nm_vpn_service_daemon_exec (NMVPNService *service, GError **error)
}
static gboolean
-start_active_vpn (NMVPNService *self, GError **error)
+start_active_vpn (NMVpnService *self, GError **error)
{
- NMVPNServicePrivate *priv = NM_VPN_SERVICE_GET_PRIVATE (self);
+ NMVpnServicePrivate *priv = NM_VPN_SERVICE_GET_PRIVATE (self);
if (!priv->active)
return TRUE;
@@ -253,9 +253,9 @@ start_active_vpn (NMVPNService *self, GError **error)
}
static gboolean
-start_pending_vpn (NMVPNService *self)
+start_pending_vpn (NMVpnService *self, GError **error)
{
- NMVPNServicePrivate *priv = NM_VPN_SERVICE_GET_PRIVATE (self);
+ NMVpnServicePrivate *priv = NM_VPN_SERVICE_GET_PRIVATE (self);
g_assert (priv->active == NULL);
@@ -266,15 +266,15 @@ start_pending_vpn (NMVPNService *self)
priv->active = g_slist_nth_data (priv->pending, 0);
priv->pending = g_slist_remove (priv->pending, priv->active);
- return start_active_vpn (self, NULL);
+ return start_active_vpn (self, error);
}
gboolean
-nm_vpn_service_activate (NMVPNService *service,
- NMVPNConnection *vpn,
+nm_vpn_service_activate (NMVpnService *service,
+ NMVpnConnection *vpn,
GError **error)
{
- NMVPNServicePrivate *priv;
+ NMVpnServicePrivate *priv;
g_return_val_if_fail (NM_IS_VPN_SERVICE (service), FALSE);
g_return_val_if_fail (NM_IS_VPN_CONNECTION (vpn), FALSE);
@@ -300,7 +300,7 @@ nm_vpn_service_activate (NMVPNService *service,
}
/* Otherwise start the next VPN */
- return start_pending_vpn (service);
+ return start_pending_vpn (service, error);
}
static void
@@ -310,8 +310,8 @@ _name_owner_changed (NMDBusManager *mgr,
const char *new,
gpointer user_data)
{
- NMVPNService *service = NM_VPN_SERVICE (user_data);
- NMVPNServicePrivate *priv = NM_VPN_SERVICE_GET_PRIVATE (service);
+ NMVpnService *service = NM_VPN_SERVICE (user_data);
+ NMVpnServicePrivate *priv = NM_VPN_SERVICE_GET_PRIVATE (service);
gboolean old_owner_good, new_owner_good, success;
if (strcmp (name, priv->dbus_service))
@@ -344,7 +344,7 @@ _name_owner_changed (NMDBusManager *mgr,
/******************************************************************************/
static void
-nm_vpn_service_init (NMVPNService *self)
+nm_vpn_service_init (NMVpnService *self)
{
g_signal_connect (nm_dbus_manager_get (),
NM_DBUS_MANAGER_NAME_OWNER_CHANGED,
@@ -355,8 +355,8 @@ nm_vpn_service_init (NMVPNService *self)
static void
dispose (GObject *object)
{
- NMVPNService *self = NM_VPN_SERVICE (object);
- NMVPNServicePrivate *priv = NM_VPN_SERVICE_GET_PRIVATE (self);
+ NMVpnService *self = NM_VPN_SERVICE (object);
+ NMVpnServicePrivate *priv = NM_VPN_SERVICE_GET_PRIVATE (self);
if (priv->start_timeout) {
g_source_remove (priv->start_timeout);
@@ -377,7 +377,7 @@ dispose (GObject *object)
static void
finalize (GObject *object)
{
- NMVPNServicePrivate *priv = NM_VPN_SERVICE_GET_PRIVATE (object);
+ NMVpnServicePrivate *priv = NM_VPN_SERVICE_GET_PRIVATE (object);
g_free (priv->name);
g_free (priv->dbus_service);
@@ -388,11 +388,11 @@ finalize (GObject *object)
}
static void
-nm_vpn_service_class_init (NMVPNServiceClass *service_class)
+nm_vpn_service_class_init (NMVpnServiceClass *service_class)
{
GObjectClass *object_class = G_OBJECT_CLASS (service_class);
- g_type_class_add_private (service_class, sizeof (NMVPNServicePrivate));
+ g_type_class_add_private (service_class, sizeof (NMVpnServicePrivate));
/* virtual methods */
object_class->dispose = dispose;
diff --git a/src/vpn-manager/nm-vpn-service.h b/src/vpn-manager/nm-vpn-service.h
index 4545d1f07..cafa6904a 100644
--- a/src/vpn-manager/nm-vpn-service.h
+++ b/src/vpn-manager/nm-vpn-service.h
@@ -19,8 +19,8 @@
* Copyright (C) 2005 - 2008 Novell, Inc.
*/
-#ifndef NM_VPN_SERVICE_H
-#define NM_VPN_SERVICE_H
+#ifndef __NETWORKMANAGER_VPN_SERVICE_H__
+#define __NETWORKMANAGER_VPN_SERVICE_H__
#include <glib.h>
#include <glib-object.h>
@@ -28,36 +28,36 @@
#include "nm-vpn-connection.h"
#define NM_TYPE_VPN_SERVICE (nm_vpn_service_get_type ())
-#define NM_VPN_SERVICE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_VPN_SERVICE, NMVPNService))
-#define NM_VPN_SERVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_VPN_SERVICE, NMVPNServiceClass))
+#define NM_VPN_SERVICE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_VPN_SERVICE, NMVpnService))
+#define NM_VPN_SERVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_VPN_SERVICE, NMVpnServiceClass))
#define NM_IS_VPN_SERVICE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_VPN_SERVICE))
#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 NM_VPN_SERVICE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_VPN_SERVICE, NMVpnServiceClass))
typedef struct {
GObject parent;
-} NMVPNService;
+} NMVpnService;
typedef struct {
GObjectClass parent;
-} NMVPNServiceClass;
+} NMVpnServiceClass;
GType nm_vpn_service_get_type (void);
-NMVPNService * nm_vpn_service_new (const char *namefile, GError **error);
+NMVpnService * nm_vpn_service_new (const char *namefile, GError **error);
/* Returns the VPN service's D-Bus service name */
-const char *nm_vpn_service_get_dbus_service (NMVPNService *service);
+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);
+const char *nm_vpn_service_get_name_file (NMVpnService *service);
-gboolean nm_vpn_service_activate (NMVPNService *service,
- NMVPNConnection *vpn,
+gboolean nm_vpn_service_activate (NMVpnService *service,
+ NMVpnConnection *vpn,
GError **error);
-void nm_vpn_service_stop_connections (NMVPNService *service,
+void nm_vpn_service_stop_connections (NMVpnService *service,
gboolean quitting,
- NMVPNConnectionStateReason reason);
+ NMVpnConnectionStateReason reason);
#endif /* NM_VPN_VPN_SERVICE_H */
diff --git a/test/Makefile.am b/test/Makefile.am
deleted file mode 100644
index 830019ba4..000000000
--- a/test/Makefile.am
+++ /dev/null
@@ -1,39 +0,0 @@
-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_builddir}/include \
- $(DBUS_CFLAGS) \
- $(GLIB_CFLAGS) \
- -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
- -DBINDIR=\"$(bindir)\" \
- -DDATADIR=\"$(datadir)\" \
- -DNMLOCALEDIR=\"$(datadir)/locale\"
-
-bin_PROGRAMS = nm-online
-
-noinst_PROGRAMS = libnm-glib-test
-
-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)
-
-libnm_glib_test_SOURCES = libnm-glib-test.c
-libnm_glib_test_CFLAGS = \
- -Wno-deprecated-declarations \
- -Wno-deprecated
-libnm_glib_test_LDADD = \
- $(top_builddir)/libnm-glib/libnm-glib.la \
- $(top_builddir)/libnm-util/libnm-util.la \
- $(DBUS_LIBS) \
- $(GLIB_LIBS)
-
diff --git a/test/libnm-glib-test.c b/test/libnm-glib-test.c
deleted file mode 100644
index 9ad1dc0a7..000000000
--- a/test/libnm-glib-test.c
+++ /dev/null
@@ -1,113 +0,0 @@
-/* libnm_glib_test - test app for libnm_glib
- *
- * 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 Red Hat, Inc.
- */
-
-#include <glib.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <signal.h>
-
-#include "libnm_glib.h"
-
-
-static void status_printer (libnm_glib_ctx *ctx, gpointer user_data)
-{
- libnm_glib_state state;
-
- g_return_if_fail (ctx != NULL);
-
- state = libnm_glib_get_network_state (ctx);
- switch (state)
- {
- case LIBNM_NO_DBUS:
- fprintf (stderr, "Status: No DBUS\n");
- break;
- case LIBNM_NO_NETWORKMANAGER:
- fprintf (stderr, "Status: No NetworkManager\n");
- break;
- case LIBNM_NO_NETWORK_CONNECTION:
- fprintf (stderr, "Status: No Connection\n");
- break;
- case LIBNM_ACTIVE_NETWORK_CONNECTION:
- fprintf (stderr, "Status: Active Connection\n");
- break;
- case LIBNM_INVALID_CONTEXT:
- fprintf (stderr, "Status: Error\n");
- break;
- default:
- fprintf (stderr, "Status: unknown\n");
- break;
- }
-}
-
-static GMainLoop *loop = NULL;
-
-static void
-signal_handler (int signo)
-{
- if (signo == SIGINT || signo == SIGTERM) {
- g_message ("Caught signal %d, shutting down...", signo);
- g_main_loop_quit (loop);
- }
-}
-
-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);
-}
-
-int main( int argc, char *argv[] )
-{
- libnm_glib_ctx *ctx;
- guint id;
-
- ctx = libnm_glib_init ();
- if (!ctx)
- {
- fprintf (stderr, "Could not initialize libnm.\n");
- exit (1);
- }
-
- id = libnm_glib_register_callback (ctx, status_printer, ctx, NULL);
- fprintf (stderr, "Registered Callback with ID %d\n", id);
- libnm_glib_unregister_callback (ctx, id);
- fprintf (stderr, "Unregistered Callback with ID %d\n", id);
-
- id = libnm_glib_register_callback (ctx, status_printer, ctx, NULL);
- fprintf (stderr, "Registered Callback with ID %d\n", id);
-
- loop = g_main_loop_new (NULL, FALSE);
- setup_signals ();
- g_main_loop_run (loop);
-
- libnm_glib_shutdown (ctx);
-
- exit (0);
-}
diff --git a/tools/Makefile.am b/tools/Makefile.am
index 2fea947bb..f008956d9 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -1,26 +1,7 @@
-GENERATE_SETTINGS_SPEC_SOURCE = generate-settings-spec.c
-
-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) \
- $(DBUS_LIBS)
-
EXTRA_DIST = \
- doc-generator.xsl \
check-exports.sh \
- $(GENERATE_SETTINGS_SPEC_SOURCE)
+ debug-helper.py \
+ doc-generator.xsl \
+ run-test-valgrind.sh \
+ test-networkmanager-service.py \
+ test-sudo-wrapper.sh
diff --git a/tools/Makefile.in b/tools/Makefile.in
index e2102094e..cab823822 100644
--- a/tools/Makefile.in
+++ b/tools/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,10 +77,8 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-noinst_PROGRAMS = generate-settings-spec$(EXEEXT)
subdir = tools
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
- $(top_srcdir)/build-aux/depcomp
+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 \
@@ -102,18 +99,6 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-PROGRAMS = $(noinst_PROGRAMS)
-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 =
-generate_settings_spec_DEPENDENCIES = \
- $(top_builddir)/libnm-util/libnm-util.la $(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 =
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -126,54 +111,14 @@ 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 = $(generate_settings_spec_SOURCES)
-DIST_SOURCES = $(generate_settings_spec_SOURCES)
+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)
-# 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@
@@ -184,6 +129,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -307,6 +254,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -326,6 +274,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -352,7 +301,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -431,33 +380,17 @@ with_dhcpcd = @with_dhcpcd@
with_netconfig = @with_netconfig@
with_resolvconf = @with_resolvconf@
with_valgrind = @with_valgrind@
-GENERATE_SETTINGS_SPEC_SOURCE = generate-settings-spec.c
-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) \
- $(DBUS_LIBS)
-
EXTRA_DIST = \
- doc-generator.xsl \
check-exports.sh \
- $(GENERATE_SETTINGS_SPEC_SOURCE)
+ debug-helper.py \
+ doc-generator.xsl \
+ run-test-valgrind.sh \
+ test-networkmanager-service.py \
+ test-sudo-wrapper.sh
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 \
@@ -489,105 +422,17 @@ $(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
-
-generate-settings-spec$(EXEEXT): $(generate_settings_spec_OBJECTS) $(generate_settings_spec_DEPENDENCIES) $(EXTRA_generate_settings_spec_DEPENDENCIES)
- @rm -f generate-settings-spec$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(generate_settings_spec_OBJECTS) $(generate_settings_spec_LDADD) $(LIBS)
-
-mostlyclean-compile:
- -rm -f *.$(OBJEXT)
-
-distclean-compile:
- -rm -f *.tab.c
-
-@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 $@ $<
-@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 $@ $<
-
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
+tags TAGS:
-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
+ctags CTAGS:
+
+cscope cscopelist:
-distclean-tags:
- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -621,7 +466,7 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-am
-all-am: Makefile $(PROGRAMS)
+all-am: Makefile
installdirs:
install: install-am
install-exec: install-exec-am
@@ -655,14 +500,11 @@ maintainer-clean-generic:
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
-clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
- mostlyclean-am
+clean-am: clean-generic clean-libtool mostlyclean-am
distclean: distclean-am
- -rm -rf ./$(DEPDIR)
-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
- distclean-tags
+distclean-am: clean-am distclean-generic
dvi: dvi-am
@@ -705,14 +547,12 @@ 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
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
pdf: pdf-am
@@ -726,19 +566,17 @@ uninstall-am:
.MAKE: install-am install-strip
-.PHONY: CTAGS GTAGS TAGS all all-am check 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 \
+.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 tags-am uninstall uninstall-am
+ tags-am uninstall uninstall-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
diff --git a/tools/check-exports.sh b/tools/check-exports.sh
index b5a9e952b..dfd882c15 100755
--- a/tools/check-exports.sh
+++ b/tools/check-exports.sh
@@ -4,22 +4,53 @@ LC_ALL=C
export LC_ALL
stat=0
-so=$1
-def=$2
+so="$1"
+def="$2"
+PATTERN="_ANCHOR_"
-# Have to prefix with a tab and suffix with a ';' to match .ver file format
-get_syms='nm "$so" | grep "^[[:xdigit:]]\+ T " | sed "s/^[[:xdigit:]]\+ T //" | sed "s/^/\t/" | sed "s/$/;/"'
+TMPFILE="$(mktemp .nm-check-exports.XXXXXX)"
-echo $so: checking exported symbols against $def
-{
- echo "{"
- echo "global:"
- eval $get_syms | sort -u
- echo "local:"
- echo " *;"
- echo "};"
-} | diff -u "$def" - >&2 || stat=1
+get_syms() {
+ nm "$1" |
+ sed -n 's/^[[:xdigit:]]\+ [DT] //p' |
+ sort
+}
+get_syms_from_def() {
+ # be strict and only parse entries that start with one \t and end with a ';'
+ sed -n 's/^\t\([_a-zA-Z0-9]\+\);$/\1/p' "$1" |
+ grep '^\*$' -v |
+ sort
+}
+
+anchor() {
+ sed "s/.*/$PATTERN\0$PATTERN/"
+}
+
+unanchor() {
+ sed "s/^$PATTERN\(.*\)$PATTERN\$/\1/"
+}
+
+
+get_syms "$so" | anchor > "$TMPFILE"
+WRONG="$(get_syms_from_def "$def" | anchor | grep -F -f - "$TMPFILE" -v)"
+RESULT=$?
+if [ $RESULT -eq 0 ]; then
+ stat=1
+ echo ">>library \"$so\" exports symbols that are not in linker script \"$def\":"
+ echo "$WRONG" | unanchor | nl
+fi
+
+get_syms_from_def "$def" | anchor > "$TMPFILE"
+WRONG="$(get_syms "$so" | anchor | grep -F -f - "$TMPFILE" -v)"
+RESULT=$?
+if [ $RESULT -eq 0 ]; then
+ stat=1
+ echo ">>linker script \"$def\" contains symbols that are not exported by library \"$so\":"
+ echo "$WRONG" | unanchor | nl
+fi
+
+rm -rf "$TMPFILE"
exit $stat
diff --git a/tools/debug-helper.py b/tools/debug-helper.py
new file mode 100755
index 000000000..07338242d
--- /dev/null
+++ b/tools/debug-helper.py
@@ -0,0 +1,61 @@
+#!/usr/bin/python
+# Copyright (C) 2011 Mathieu Trudel-Lapierre <mathieu.tl@gmail.com>
+
+import dbus
+import argparse
+
+bus = dbus.SystemBus()
+
+parser = argparse.ArgumentParser(description='Interface to easily control logging levels for NetworkManager, ModemManager, and wpasupplicant.')
+
+# NM options
+parser.add_argument('--nm', dest='do_set_nm_logging', action='store',
+ help='modify log level for NetworkManager (debug, info, etc.)')
+parser.add_argument('--domains', dest='log_domains', action='store',
+ default=[], nargs='+',
+ help='log "domains" to use with NetworkManager (HW, CORE, etc.)')
+
+# MM options
+parser.add_argument('--mm', dest='do_set_mm_logging', action='store',
+ help='modify log level for ModemManager (debug, info, etc.)')
+
+# wpasupplicant options
+parser.add_argument('--wpa', dest='do_set_wpa_logging', action='store',
+ help='modify log level for wpasupplicant (debug, msgdump, info, etc.)')
+
+args = parser.parse_args()
+
+if args.do_set_nm_logging:
+ #print args.log_domains
+ dom_msg = ""
+ if args.log_domains:
+ dom_msg = " for domains: " + ','.join(args.log_domains)
+ print "Setting NetworkManager log level to '" + args.do_set_nm_logging + "'" + dom_msg
+
+ nm_bus = bus.get_object('org.freedesktop.NetworkManager', '/org/freedesktop/NetworkManager')
+ nm = dbus.Interface(nm_bus, dbus_interface='org.freedesktop.NetworkManager')
+ nm.SetLogging(args.do_set_nm_logging, ','.join(args.log_domains))
+
+if args.do_set_mm_logging:
+ print "Setting ModemManager log level to '" + args.do_set_mm_logging + "'"
+
+ mm_bus = bus.get_object('org.freedesktop.ModemManager', '/org/freedesktop/ModemManager')
+ mm = dbus.Interface(mm_bus, dbus_interface='org.freedesktop.ModemManager')
+ mm.SetLogging(args.do_set_mm_logging)
+
+if args.do_set_wpa_logging:
+ print "Setting wpa_supplicant log level to '" + args.do_set_wpa_logging + "'"
+
+ if 'debug' in args.do_set_wpa_logging or 'msgdump' in args.do_set_wpa_logging:
+ print "Enabling timestamps for wpasupplicant debugging logs"
+ use_timestamps = dbus.Boolean(True, variant_level=1)
+ else:
+ print "Disabling timestamps for wpasupplicant debugging logs"
+ use_timestamps = dbus.Boolean(False, variant_level=1)
+
+ wpa_bus = bus.get_object('fi.w1.wpa_supplicant1', '/fi/w1/wpa_supplicant1')
+ wpa_properties = dbus.Interface(wpa_bus, dbus_interface='org.freedesktop.DBus.Properties')
+ wpa_properties.Set('fi.w1.wpa_supplicant1', 'DebugTimestamp', use_timestamps)
+ wpa_properties.Set('fi.w1.wpa_supplicant1', 'DebugLevel',
+ dbus.String(args.do_set_wpa_logging, variant_level=1))
+
diff --git a/tools/generate-settings-spec.c b/tools/generate-settings-spec.c
deleted file mode 100644
index f53fdba16..000000000
--- a/tools/generate-settings-spec.c
+++ /dev/null
@@ -1,457 +0,0 @@
-/* -*- 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 2009 - 2013 Red Hat, Inc.
- */
-
-#include <stdio.h>
-#include <errno.h>
-#include <unistd.h>
-#include <string.h>
-#include <time.h>
-
-#include <glib.h>
-#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-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-utils.h>
-
-typedef NMSetting* (*SettingNewFunc) (void);
-
-static SettingNewFunc funcs[] = {
- nm_setting_802_1x_new,
- nm_setting_adsl_new,
- nm_setting_bluetooth_new,
- nm_setting_bond_new,
- nm_setting_bridge_new,
- 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,
- nm_setting_ip6_config_new,
- nm_setting_olpc_mesh_new,
- 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,
- nm_setting_wired_new,
- nm_setting_wireless_new,
- nm_setting_wireless_security_new,
- NULL
-};
-
-typedef struct {
- const char *gvalue_name;
- const char *new_name;
-} TypeNameElement;
-
-static TypeNameElement name_map[] = {
- { "gchararray", "string" },
- { "GSList_gchararray_", "array of string" },
- { "GArray_guchar_", "byte array" },
- { "gboolean", "boolean" },
- { "guint64", "uint64" },
- { "gint", "int32" },
- { "guint", "uint32" },
- { "GArray_guint_", "array of uint32" },
- { "GPtrArray_GArray_guint__", "array of array of uint32" },
- { "GPtrArray_GArray_guchar__", "array of byte array" },
- { "GPtrArray_gchararray_", "array of string" },
- { "GHashTable_gchararray+gchararray_", "dict of (string::string)" },
- { "GPtrArray_GValueArray_GArray_guchar_+guint+GArray_guchar___", "array of (byte array, uint32, byte array)" },
- { "GPtrArray_GValueArray_GArray_guchar_+guint+GArray_guchar_+guint__", "array of (byte array, uint32, byte array, uint32)" },
- { NULL, NULL }
-};
-
-static void
-write_one_setting (FILE *f, gboolean book, SettingNewFunc func)
-{
- NMSetting *s;
- GParamSpec **props, **iter;
- guint num;
- const char *row_fmt_str;
-
- s = func ();
-
- /* write out section header */
- (void) fprintf (f,
- "<table>\n"
- " <title>%s setting</title>\n"
- " <tgroup cols=\"4\">\n"
- " <thead>\n"
- " <row>\n"
- " <entry>Key Name</entry>\n"
- " <entry>Value Type</entry>\n"
- " <entry>Default Value</entry>\n"
- " <entry>Value Description</entry>\n"
- " </row>\n"
- " </thead>\n"
- " <tbody>\n",
- nm_setting_get_name (s));
-
- props = g_object_class_list_properties (G_OBJECT_GET_CLASS (G_OBJECT (s)), &num);
- for (iter = props; iter && *iter; iter++) {
- const char *key_name, *value_type, *value_desc;
- char *default_value;
- TypeNameElement *name_iter;
- GValue value = G_VALUE_INIT;
- char *flags_str = NULL;
-
- value_type = g_type_name (G_PARAM_SPEC_VALUE_TYPE (*iter));
- for (name_iter = &name_map[0]; name_iter && name_iter->gvalue_name; name_iter++) {
- if (!strcmp (value_type, name_iter->gvalue_name)) {
- value_type = name_iter->new_name;
- break;
- }
- }
-
- key_name = g_param_spec_get_name (*iter);
- value_desc = g_param_spec_get_blurb (*iter);
-
- g_value_init (&value, G_PARAM_SPEC_VALUE_TYPE (*iter));
- g_param_value_set_default (*iter, &value);
- default_value = g_strdup_value_contents (&value);
- if (default_value && !strcmp (default_value, "NULL")) {
- g_free (default_value);
- default_value = NULL;
- }
-
- if (!strcmp (key_name, NM_SETTING_NAME)) {
- g_free (default_value);
- default_value = NULL;
- g_object_get (G_OBJECT (s), NM_SETTING_NAME, &default_value, NULL);
- }
-
- if (g_str_has_suffix (key_name, "-flags"))
- flags_str = g_strdup_printf (" (see <xref linkend=\"secrets-flags\"/> for flag values)");
-
- if (book)
- row_fmt_str =
- " <row>\n"
- " <entry><screen>%s</screen></entry>\n"
- " <entry><screen>%s</screen></entry>\n"
- " <entry><screen>%s</screen></entry>\n"
- " <entry>%s%s</entry>\n"
- " </row>\n";
- else
- row_fmt_str =
- " <row>\n"
- " <entry align=\"left\">%s</entry>\n"
- " <entry align=\"left\">%s</entry>\n"
- " <entry align=\"left\">%s</entry>\n"
- " <entry>%s%s</entry>\n"
- " </row>\n";
-
- (void) fprintf (f, row_fmt_str,
- key_name,
- value_type,
- default_value ? default_value : "",
- value_desc,
- flags_str ? flags_str : "");
-
- g_free (flags_str);
- g_free (default_value);
- }
-
- (void) fprintf (f,
- " </tbody>\n"
- " </tgroup>\n"
- "</table>\n");
-
- g_object_unref (s);
-}
-
-static void
-writer_header_docbook_section (FILE *f)
-{
- (void) fprintf (f,
- "<?xml version=\"1.0\"?>\n"
- "<!DOCTYPE section PUBLIC \"-//OASIS//DTD DocBook XML V4.3//EN\"\n"
- " \"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd\" [\n"
- "<!ENTITY %% local.common.attrib \"xmlns:xi CDATA #FIXED 'http://www.w3.org/2003/XInclude'\">"
- "]>"
- "<section>\n"
- " <title>Configuration Settings</title>\n"
- " <para>\n");
-}
-
-static void
-writer_footer_docbook_section (FILE *f)
-{
- (void) fprintf (f,
- " </para>\n"
- "</section>\n");
-}
-
-static void
-writer_header_docbook_manpage (FILE *f)
-{
- char time_str[64];
- time_t t;
-
- t = time (NULL);
- strftime (time_str, sizeof (time_str), "%d %B %Y", localtime (&t));
-
- (void) fprintf (f,
- "<?xml version=\"1.0\"?>\n"
- "<!DOCTYPE refentry PUBLIC \"-//OASIS//DTD DocBook XML V4.3//EN\"\n"
- " \"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd\" [\n"
- "<!ENTITY %% local.common.attrib \"xmlns:xi CDATA #FIXED 'http://www.w3.org/2003/XInclude'\">"
- "]>"
- "<refentry id=\"nm-settings\">\n"
- " <refentryinfo>\n"
- " <date>%s</date>\n"
- " </refentryinfo>\n"
- " <refmeta>\n"
- " <refentrytitle>nm-settings</refentrytitle>\n"
- " <manvolnum>5</manvolnum>\n"
- " <refmiscinfo class=\"source\">NetworkManager</refmiscinfo>\n"
- " <refmiscinfo class=\"manual\">Configuration</refmiscinfo>\n"
- " <refmiscinfo class=\"version\">%s</refmiscinfo>\n"
- " </refmeta>\n"
- " <refnamediv>\n"
- " <refname>nm-settings</refname>\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 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 (profile)</term>\n"
- " <listitem>\n"
- " <para>\n"
- " A specific, encapsulated, independent group of settings describing\n"
- " all the configuration required to connect to a specific network.\n"
- " It is referred to by a unique identifier called the UUID. A connection\n"
- " is tied to a one specific device type, but not necessarily a specific\n"
- " hardware device. It is composed of one or more <emphasis>Settings</emphasis>\n"
- " objects.\n"
- " </para>\n"
- " </listitem>\n"
- " </varlistentry>\n"
- " </variablelist>\n"
- " <variablelist>\n"
- " <varlistentry>\n"
- " <term>Setting</term>\n"
- " <listitem>\n"
- " <para>\n"
- " A group of related key/value pairs describing a specific piece of a\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"
- " </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);
-}
-
-static void
-writer_footer_docbook_manpage (FILE *f)
-{
- (void) fprintf (f,
- " </para>\n"
- " <refsect2 id=\"secrets-flags\">\n"
- " <title>Secret flag types:</title>\n"
- " <para>\n"
- " Each secret property in a setting has an associated <emphasis>flags</emphasis> property\n"
- " that describes how to handle that secret. The <emphasis>flags</emphasis> property is a bitfield\n"
- " that contains zero or more of the following values logically OR-ed together.\n"
- " </para>\n"
- " <itemizedlist>\n"
- " <listitem>\n"
- " <para>0x0 (none) - the system is responsible for providing and storing this secret.</para>\n"
- " </listitem>\n"
- " <listitem>\n"
- " <para>0x1 (agent-owned) - a user-session secret agent is responsible for providing and storing\n"
- " this secret; when it is required, agents will be asked to provide it.</para>\n"
- " </listitem>\n"
- " <listitem>\n"
- " <para>0x2 (not-saved) - this secret should not be saved but should be requested from the user\n"
- " each time it is required. This flag should be used for One-Time-Pad secrets, PIN codes from hardware tokens,\n"
- " or if the user simply does not want to save the secret.</para>\n"
- " </listitem>\n"
- " <listitem>\n"
- " <para>0x4 (not-required) - in some situations it cannot be automatically determined that a secret\n"
- " is required or not. This flag hints that the secret is not required and should not be requested from the user.</para>\n"
- " </listitem>\n"
- " </itemizedlist>\n"
- " </refsect2>\n"
- " </refsect1>\n"
- " <refsect1>\n"
- " <title>AUTHOR</title>\n"
- " <para>\n"
- " <author>\n"
- " <firstname>NetworkManager developers</firstname>\n"
- " </author>\n"
- " </para>\n"
- " </refsect1>\n"
- " <refsect1>\n"
- " <title>FILES</title>\n"
- " <para>/etc/NetworkManager/system-connections</para>\n"
- " <para>or distro plugin-specific location</para>\n"
- " </refsect1>\n"
- " <refsect1>\n"
- " <title>SEE ALSO</title>\n"
- " <para>https://live.gnome.org/NetworkManagerConfiguration</para>\n"
- " <para>NetworkManager(8), nmcli(1), nmcli-examples(5), NetworkManager.conf(5)</para>\n"
- " </refsect1>\n"
- "</refentry>\n");
-}
-
-static void
-usage (const char *str)
-{
- fprintf (stderr, "Usage: %s <type> <output file> [<type> <output file>]\n"
- "<type> := book|refentry\n",
- str);
- _exit (1);
-}
-
-int
-main (int argc, char *argv[])
-{
- GError *error = NULL;
- FILE *f1 = NULL, *f2 = NULL;
- SettingNewFunc *fptr;
- const char *book_file = NULL, *refentry_file = NULL;;
-
- if (argc != 3 && argc != 5)
- usage (argv[0]);
-
- if (strcmp (argv[1], "book") == 0)
- book_file = argv[2];
- else if (strcmp (argv[1], "refentry") == 0)
- refentry_file = argv[2];
- else
- usage (argv[0]);
-
- if (argc == 5) {
- if (strcmp (argv[3], "book") == 0 && !book_file)
- book_file = argv[4];
- else if (strcmp (argv[3], "refentry") == 0 && !refentry_file)
- refentry_file = argv[4];
- else
- 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);
- _exit (2);
- }
-
- if (book_file) {
- f1 = fopen (book_file, "w");
- if (!f1) {
- fprintf (stderr, "ERR: could not create %s: %d\n", book_file, errno);
- _exit (3);
- }
- }
- if (refentry_file) {
- f2 = fopen (refentry_file, "w");
- if (!f2) {
- fprintf (stderr, "ERR: could not create %s: %d\n", refentry_file, errno);
- _exit (3);
- }
- }
-
- /* Write out docbook 'book' xml - for html generation */
- if (f1) {
- writer_header_docbook_section (f1);
- for (fptr = funcs; fptr && *fptr; fptr++)
- write_one_setting (f1, TRUE, *fptr);
- writer_footer_docbook_section (f1);
- }
-
- /* Write out docbook 'refentry' xml - for man page generation */
- if (f2) {
- writer_header_docbook_manpage (f2);
- for (fptr = funcs; fptr && *fptr; fptr++)
- write_one_setting (f2, FALSE, *fptr);
- writer_footer_docbook_manpage (f2);
- }
-
- if (f1)
- fclose (f1);
- if (f2)
- fclose (f2);
- _exit (0);
-}
-
diff --git a/tools/run-test-valgrind.sh b/tools/run-test-valgrind.sh
new file mode 100755
index 000000000..506fff75c
--- /dev/null
+++ b/tools/run-test-valgrind.sh
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+LIBTOOL="$1"; shift
+VALGRIND="$1"; shift
+SUPPRESSIONS="$1"; shift
+TEST="$1"; shift
+
+LOGFILE="valgrind-`echo "$TEST" | tr -cd '[:alpha:]-'`.log"
+
+export G_SLICE=always-malloc
+export G_DEBUG=gc-friendly
+$LIBTOOL --mode=execute "$VALGRIND" \
+ --quiet \
+ --error-exitcode=1 \
+ --leak-check=full \
+ --gen-suppressions=all \
+ --suppressions="$SUPPRESSIONS" \
+ --log-file="$LOGFILE" \
+ "$TEST"
+RESULT=$?
+
+if [ $RESULT -ne 0 ]; then
+ echo "Don't forget to check the valgrind log at '`realpath $LOGFILE`'." >&2
+fi
+
+exit $RESULT
diff --git a/libnm-glib/tests/test-fake-nm.py b/tools/test-networkmanager-service.py
index 46ca3ff0e..564533895 100755
--- a/libnm-glib/tests/test-fake-nm.py
+++ b/tools/test-networkmanager-service.py
@@ -3,15 +3,14 @@
from __future__ import print_function
-from gi.repository import GLib, GObject
+from gi.repository import GLib
import sys
import dbus
import dbus.service
import dbus.mainloop.glib
import random
-mainloop = GObject.MainLoop()
-quit_id = 0
+mainloop = GLib.MainLoop()
# NM State
NM_STATE_UNKNOWN = 0
@@ -38,6 +37,7 @@ NM_DEVICE_STATE_ACTIVATED = 100
NM_DEVICE_STATE_DEACTIVATING = 110
NM_DEVICE_STATE_FAILED = 120
+# Device type
NM_DEVICE_TYPE_UNKNOWN = 0
NM_DEVICE_TYPE_ETHERNET = 1
NM_DEVICE_TYPE_WIFI = 2
@@ -55,6 +55,13 @@ NM_DEVICE_TYPE_BRIDGE = 13
NM_DEVICE_TYPE_GENERIC = 14
NM_DEVICE_TYPE_TEAM = 15
+# AC state
+NM_ACTIVE_CONNECTION_STATE_UNKNOWN = 0
+NM_ACTIVE_CONNECTION_STATE_ACTIVATING = 1
+NM_ACTIVE_CONNECTION_STATE_ACTIVATED = 2
+NM_ACTIVE_CONNECTION_STATE_DEACTIVATING = 3
+NM_ACTIVE_CONNECTION_STATE_DEACTIVATED = 4
+
#########################################################
IFACE_DBUS = 'org.freedesktop.DBus'
@@ -106,6 +113,9 @@ class ExportedObj(dbus.service.Object):
###################################################################
IFACE_DEVICE = 'org.freedesktop.NetworkManager.Device'
+class NotSoftwareException(dbus.DBusException):
+ _dbus_error_name = IFACE_DEVICE + '.NotSoftware'
+
PD_UDI = "Udi"
PD_IFACE = "Interface"
PD_DRIVER = "Driver"
@@ -163,6 +173,12 @@ class Device(ExportedObj):
def Disconnect(self):
pass
+ @dbus.service.method(dbus_interface=IFACE_DEVICE, in_signature='', out_signature='')
+ def Delete(self):
+ # We don't currently support any software device types, so...
+ raise NotSoftwareException()
+ pass
+
def __notify(self, propname):
props = self._get_dbus_properties(IFACE_DEVICE)
changed = { propname: props[propname] }
@@ -172,6 +188,9 @@ class Device(ExportedObj):
def PropertiesChanged(self, changed):
pass
+ def set_active_connection(self, ac):
+ self.active_connection = ac
+ self.__notify(PD_ACTIVE_CONNECTION)
###################################################################
@@ -216,6 +235,34 @@ class WiredDevice(Device):
pass
###################################################################
+IFACE_VLAN = 'org.freedesktop.NetworkManager.Device.Vlan'
+
+PV_HW_ADDRESS = "HwAddress"
+PV_CARRIER = "Carrier"
+PV_VLAN_ID = "VlanId"
+
+class VlanDevice(Device):
+ def __init__(self, bus, iface):
+ Device.__init__(self, bus, iface, NM_DEVICE_TYPE_VLAN)
+ self.add_dbus_interface(IFACE_VLAN, self.__get_props)
+
+ self.mac = random_mac()
+ self.carrier = False
+ self.vlan_id = 1
+
+ # Properties interface
+ def __get_props(self):
+ props = {}
+ props[PV_HW_ADDRESS] = self.mac
+ props[PV_CARRIER] = self.carrier
+ props[PV_VLAN_ID] = self.vlan_id
+ return props
+
+ @dbus.service.signal(IFACE_VLAN, signature='a{sv}')
+ def PropertiesChanged(self, changed):
+ pass
+
+###################################################################
IFACE_WIFI_AP = 'org.freedesktop.NetworkManager.AccessPoint'
PP_FLAGS = "Flags"
@@ -509,6 +556,73 @@ class WimaxDevice(Device):
raise NspNotFoundException("NSP %s not found" % path)
###################################################################
+IFACE_ACTIVE_CONNECTION = 'org.freedesktop.NetworkManager.Connection.Active'
+
+PAC_CONNECTION = "Connection"
+PAC_SPECIFIC_OBJECT = "SpecificObject"
+PAC_ID = "Id"
+PAC_UUID = "Uuid"
+PAC_TYPE = "Type"
+PAC_DEVICES = "Devices"
+PAC_STATE = "State"
+PAC_DEFAULT = "Default"
+PAC_IP4CONFIG = "Ip4Config"
+PAC_DHCP4CONFIG = "Dhcp4Config"
+PAC_DEFAULT6 = "Default6"
+PAC_IP6CONFIG = "Ip6Config"
+PAC_DHCP6CONFIG = "Dhcp6Config"
+PAC_VPN = "Vpn"
+PAC_MASTER = "Master"
+
+class ActiveConnection(ExportedObj):
+ counter = 1
+
+ def __init__(self, bus, device, connection, specific_object):
+ object_path = "/org/freedesktop/NetworkManager/ActiveConnection/%d" % ActiveConnection.counter
+ ActiveConnection.counter = ActiveConnection.counter + 1
+ ExportedObj.__init__(self, bus, object_path)
+ self.add_dbus_interface(IFACE_ACTIVE_CONNECTION, self.__get_props)
+
+ self.device = device
+ self.conn = connection
+ self.specific_object = specific_object
+ self.state = NM_ACTIVE_CONNECTION_STATE_UNKNOWN
+ self.default = False
+ self.ip4config = None
+ self.dhcp4config = None
+ self.default6 = False
+ self.ip6config = None
+ self.dhcp6config = None
+ self.vpn = False
+ self.master = None
+
+ # Properties interface
+ def __get_props(self):
+ props = {}
+ props[PAC_CONNECTION] = to_path(self.conn)
+ props[PAC_SPECIFIC_OBJECT] = to_path(self.specific_object)
+ conn_settings = self.conn.GetSettings()
+ s_con = conn_settings['connection']
+ props[PAC_ID] = s_con['id']
+ props[PAC_UUID] = s_con['uuid']
+ props[PAC_TYPE] = s_con['type']
+ props[PAC_DEVICES] = to_path_array([self.device])
+ props[PAC_STATE] = dbus.UInt32(self.state)
+ props[PAC_DEFAULT] = self.default
+ props[PAC_IP4CONFIG] = to_path(self.ip4config)
+ props[PAC_DHCP4CONFIG] = to_path(self.dhcp4config)
+ props[PAC_DEFAULT6] = self.default6
+ props[PAC_IP6CONFIG] = to_path(self.ip6config)
+ props[PAC_DHCP6CONFIG] = to_path(self.dhcp6config)
+ props[PAC_VPN] = self.vpn
+ props[PAC_MASTER] = to_path(self.master)
+ return props
+
+ @dbus.service.signal(IFACE_ACTIVE_CONNECTION, signature='a{sv}')
+ def PropertiesChanged(self, changed):
+ pass
+
+###################################################################
IFACE_TEST = 'org.freedesktop.NetworkManager.LibnmGlibTest'
IFACE_NM = 'org.freedesktop.NetworkManager'
@@ -518,6 +632,9 @@ class PermissionDeniedException(dbus.DBusException):
class UnknownDeviceException(dbus.DBusException):
_dbus_error_name = IFACE_NM + '.UnknownDevice'
+class UnknownConnectionException(dbus.DBusException):
+ _dbus_error_name = IFACE_NM + '.UnknownConnection'
+
PM_DEVICES = 'Devices'
PM_NETWORKING_ENABLED = 'NetworkingEnabled'
PM_WWAN_ENABLED = 'WwanEnabled'
@@ -534,11 +651,15 @@ PM_STATE = 'State'
PM_VERSION = 'Version'
PM_CONNECTIVITY = 'Connectivity'
+def set_device_ac_cb(device, ac):
+ device.set_active_connection(ac)
+
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._bus = bus;
self.devices = []
self.active_connections = []
self.primary_connection = None
@@ -569,14 +690,50 @@ class NetworkManager(ExportedObj):
@dbus.service.method(dbus_interface=IFACE_NM, in_signature='ooo', out_signature='o')
def ActivateConnection(self, conpath, devpath, specific_object):
+ try:
+ connection = settings.get_connection(conpath)
+ except Exception as e:
+ raise UnknownConnectionException("Connection not found")
+
+ hash = connection.GetSettings()
+ s_con = hash['connection']
+
device = None
for d in self.devices:
if d.path == devpath:
device = d
break
+ if not device and s_con['type'] == 'vlan':
+ ifname = s_con['interface-name']
+ device = VlanDevice(self._bus, ifname)
+ self.add_device(device)
if not device:
raise UnknownDeviceException("No device found for the requested iface.")
- raise PermissionDeniedException("Not yet implemented")
+
+ # See if we need secrets. For the moment, we only support WPA
+ if '802-11-wireless-security' in hash:
+ s_wsec = hash['802-11-wireless-security']
+ if (s_wsec['key-mgmt'] == 'wpa-psk' and 'psk' not in s_wsec):
+ secrets = agent_manager.get_secrets(hash, conpath, '802-11-wireless-security')
+ if secrets is None:
+ raise NoSecretsException("No secret agent available")
+ if '802-11-wireless-security' not in secrets:
+ raise NoSecretsException("No secrets provided")
+ s_wsec = secrets['802-11-wireless-security']
+ if 'psk' not in s_wsec:
+ raise NoSecretsException("No secrets provided")
+
+ ac = ActiveConnection(self._bus, device, connection, None)
+ self.active_connections.append(ac)
+ self.__notify(PM_ACTIVE_CONNECTIONS)
+
+ if s_con['id'] == 'object-creation-failed-test':
+ self.active_connections.remove(ac)
+ ac.remove_from_connection()
+ else:
+ GLib.timeout_add(50, set_device_ac_cb, device, ac)
+
+ return to_path(ac)
@dbus.service.method(dbus_interface=IFACE_NM, in_signature='a{sa{sv}}oo', out_signature='oo')
def AddAndActivateConnection(self, connection, devpath, specific_object):
@@ -587,7 +744,9 @@ class NetworkManager(ExportedObj):
break
if not device:
raise UnknownDeviceException("No device found for the requested iface.")
- raise PermissionDeniedException("Not yet implemented")
+
+ conpath = settings.AddConnection(connection)
+ return (conpath, self.ActivateConnection(conpath, devpath, specific_object))
@dbus.service.method(dbus_interface=IFACE_NM, in_signature='o', out_signature='')
def DeactivateConnection(self, active_connection):
@@ -687,7 +846,7 @@ class NetworkManager(ExportedObj):
def AddWiredDevice(self, ifname):
for d in self.devices:
if d.iface == ifname:
- raise PermissionDeniedError("Device already added")
+ raise PermissionDeniedException("Device already added")
dev = WiredDevice(self._bus, ifname)
self.add_device(dev)
return dbus.ObjectPath(dev.path)
@@ -696,7 +855,7 @@ class NetworkManager(ExportedObj):
def AddWifiDevice(self, ifname):
for d in self.devices:
if d.iface == ifname:
- raise PermissionDeniedError("Device already added")
+ raise PermissionDeniedException("Device already added")
dev = WifiDevice(self._bus, ifname)
self.add_device(dev)
return dbus.ObjectPath(dev.path)
@@ -705,7 +864,7 @@ class NetworkManager(ExportedObj):
def AddWimaxDevice(self, ifname):
for d in self.devices:
if d.iface == ifname:
- raise PermissionDeniedError("Device already added")
+ raise PermissionDeniedException("Device already added")
dev = WimaxDevice(self._bus, ifname)
self.add_device(dev)
return dbus.ObjectPath(dev.path)
@@ -748,6 +907,232 @@ class NetworkManager(ExportedObj):
return
raise UnknownDeviceException("Device not found")
+ @dbus.service.method(IFACE_TEST, in_signature='', out_signature='')
+ def AutoRemoveNextConnection(self):
+ settings.auto_remove_next_connection()
+
+###################################################################
+IFACE_CONNECTION = 'org.freedesktop.NetworkManager.Settings.Connection'
+
+class InvalidPropertyException(dbus.DBusException):
+ _dbus_error_name = IFACE_CONNECTION + '.InvalidProperty'
+
+class MissingPropertyException(dbus.DBusException):
+ _dbus_error_name = IFACE_CONNECTION + '.MissingProperty'
+
+class InvalidSettingException(dbus.DBusException):
+ _dbus_error_name = IFACE_CONNECTION + '.InvalidSetting'
+
+class MissingSettingException(dbus.DBusException):
+ _dbus_error_name = IFACE_CONNECTION + '.MissingSetting'
+
+class Connection(dbus.service.Object):
+ def __init__(self, bus, object_path, settings, remove_func):
+ dbus.service.Object.__init__(self, bus, object_path)
+
+ if 'connection' not in settings:
+ raise MissingSettingException('connection: setting is required')
+ s_con = settings['connection']
+ if 'type' not in s_con:
+ raise MissingPropertyException('connection.type: property is required')
+ type = s_con['type']
+ if not type in ['802-3-ethernet', '802-11-wireless', 'vlan', 'wimax']:
+ raise InvalidPropertyException('connection.type: unsupported connection type')
+
+ self.path = object_path
+ 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:
+ raise PermissionDeniedException()
+ return self.settings
+
+ @dbus.service.method(dbus_interface=IFACE_CONNECTION, in_signature='b', out_signature='')
+ def SetVisible(self, vis):
+ self.visible = vis
+ self.Updated()
+
+ @dbus.service.method(dbus_interface=IFACE_CONNECTION, in_signature='', out_signature='')
+ def Delete(self):
+ self.remove_func(self)
+ self.Removed()
+ self.remove_from_connection()
+
+ @dbus.service.signal(IFACE_CONNECTION, signature='')
+ def Removed(self):
+ pass
+
+ @dbus.service.signal(IFACE_CONNECTION, signature='')
+ def Updated(self):
+ pass
+
+###################################################################
+IFACE_SETTINGS = 'org.freedesktop.NetworkManager.Settings'
+
+class InvalidHostnameException(dbus.DBusException):
+ _dbus_error_name = IFACE_SETTINGS + '.InvalidHostname'
+
+class Settings(dbus.service.Object):
+ def __init__(self, bus, object_path):
+ dbus.service.Object.__init__(self, bus, object_path)
+ self.connections = {}
+ self.bus = bus
+ self.counter = 1
+ self.remove_next_connection = False
+ self.props = {}
+ self.props['Hostname'] = "foobar.baz"
+ self.props['CanModify'] = True
+ self.props['Connections'] = dbus.Array([], 'o')
+
+ def auto_remove_next_connection(self):
+ self.remove_next_connection = True;
+
+ def get_connection(self, path):
+ return self.connections[path]
+
+ @dbus.service.method(dbus_interface=IFACE_SETTINGS, in_signature='', out_signature='ao')
+ def ListConnections(self):
+ return self.connections.keys()
+
+ @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/{0}".format(self.counter)
+ self.counter = self.counter + 1
+ self.connections[path] = Connection(self.bus, path, settings, self.delete_connection)
+ self.props['Connections'] = dbus.Array(self.connections.keys(), 'o')
+ self.NewConnection(path)
+ self.PropertiesChanged({ 'connections': self.props['Connections'] })
+
+ if self.remove_next_connection:
+ self.remove_next_connection = False
+ self.connections[path].Delete()
+
+ return path
+
+ def delete_connection(self, connection):
+ del self.connections[connection.path]
+ self.props['Connections'] = dbus.Array(self.connections.keys(), 'o')
+ self.PropertiesChanged({ 'connections': self.props['Connections'] })
+
+ @dbus.service.method(dbus_interface=IFACE_SETTINGS, in_signature='s', out_signature='')
+ def SaveHostname(self, hostname):
+ # Arbitrary requirement to test error handling
+ if hostname.find('.') == -1:
+ raise InvalidHostnameException()
+ self.props['Hostname'] = hostname
+ self.PropertiesChanged({ 'hostname': hostname })
+
+ @dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE, in_signature='s', out_signature='a{sv}')
+ def GetAll(self, iface):
+ if iface != IFACE_SETTINGS:
+ 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_SETTINGS:
+ raise UnknownInterfaceException()
+ if not name in self.props.keys():
+ raise UnknownPropertyException()
+ return self.props[name]
+
+ @dbus.service.signal(IFACE_SETTINGS, signature='o')
+ def NewConnection(self, path):
+ pass
+
+ @dbus.service.signal(IFACE_SETTINGS, signature='a{sv}')
+ def PropertiesChanged(self, path):
+ pass
+
+ @dbus.service.method(IFACE_SETTINGS, in_signature='', out_signature='')
+ def Quit(self):
+ mainloop.quit()
+
+###################################################################
+IFACE_AGENT_MANAGER = 'org.freedesktop.NetworkManager.AgentManager'
+IFACE_AGENT = 'org.freedesktop.NetworkManager.SecretAgent'
+
+PATH_SECRET_AGENT = '/org/freedesktop/NetworkManager/SecretAgent'
+
+FLAG_ALLOW_INTERACTION = 0x1
+FLAG_REQUEST_NEW = 0x2
+FLAG_USER_REQUESTED = 0x4
+
+class NoSecretsException(dbus.DBusException):
+ _dbus_error_name = IFACE_AGENT_MANAGER + '.NoSecrets'
+
+class UserCanceledException(dbus.DBusException):
+ _dbus_error_name = IFACE_AGENT_MANAGER + '.UserCanceled'
+
+class AgentManager(dbus.service.Object):
+ def __init__(self, bus, object_path):
+ dbus.service.Object.__init__(self, bus, object_path)
+ self.agents = {}
+ self.bus = bus
+
+ @dbus.service.method(dbus_interface=IFACE_AGENT_MANAGER,
+ in_signature='s', out_signature='',
+ sender_keyword='sender')
+ def Register(self, name, sender=None):
+ self.RegisterWithCapabilities(name, 0, sender)
+
+ @dbus.service.method(dbus_interface=IFACE_AGENT_MANAGER,
+ in_signature='su', out_signature='',
+ sender_keyword='sender')
+ def RegisterWithCapabilities(self, name, caps, sender=None):
+ self.agents[sender] = self.bus.get_object(sender, PATH_SECRET_AGENT)
+
+ @dbus.service.method(dbus_interface=IFACE_AGENT_MANAGER,
+ in_signature='', out_signature='',
+ sender_keyword='sender')
+ def Unregister(self, sender=None):
+ del self.agents[sender]
+
+ def get_secrets(self, connection, path, setting_name):
+ if len(self.agents) == 0:
+ return None
+
+ secrets = {}
+ for sender in self.agents:
+ agent = self.agents[sender]
+ try:
+ secrets = agent.GetSecrets(connection, path, setting_name,
+ dbus.Array([], 's'),
+ FLAG_ALLOW_INTERACTION | FLAG_USER_REQUESTED,
+ dbus_interface=IFACE_AGENT)
+ break
+ except dbus.DBusException as e:
+ if e.get_dbus_name() == IFACE_AGENT + '.UserCanceled':
+ raise UserCanceledException('User canceled')
+ continue
+ return secrets
+
+###################################################################
+
+def stdin_cb(io, condition):
+ mainloop.quit()
+
def quit_cb(user_data):
mainloop.quit()
@@ -757,12 +1142,21 @@ def main():
random.seed()
bus = dbus.SessionBus()
- nm = NetworkManager(bus, "/org/freedesktop/NetworkManager")
+
+ global manager, settings, agent_manager
+ manager = NetworkManager(bus, "/org/freedesktop/NetworkManager")
+ settings = Settings(bus, "/org/freedesktop/NetworkManager/Settings")
+ agent_manager = AgentManager(bus, "/org/freedesktop/NetworkManager/AgentManager")
+
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)
+ # Watch stdin; if it closes, assume our parent has crashed, and exit
+ io = GLib.IOChannel.unix_new(0)
+ io.add_watch(GLib.IOCondition.HUP, stdin_cb)
+
+ # also quit after inactivity to ensure we don't stick around if the above fails somehow
+ GLib.timeout_add_seconds(20, quit_cb, None)
try:
mainloop.run()
diff --git a/tools/test-sudo-wrapper.sh b/tools/test-sudo-wrapper.sh
new file mode 100755
index 000000000..b375368e5
--- /dev/null
+++ b/tools/test-sudo-wrapper.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+CMD="$1"
+shift;
+
+# convert the libtool internal path
+resolve_cmd() {
+ local C="$1"
+
+ local C2="$(echo "$C" | sed 's#^\(.*/\)\.libs/lt-\([^/]\+\)$#\1\2#')"
+ if [[ "$C2" != "$C" && ! -x "$C2" ]]; then
+ # such a file does not exist... back to $C
+ C2="$C"
+ fi
+ echo "$C2"
+}
+
+if [[ $UID == 0 ]]; then
+ # we are already root. Execute directly.
+ exec "$(resolve_cmd "$CMD")" "$@"
+elif [[ "$NMTST_SUDO_NO_CALL_SELF" != "" ]]; then
+ # when setting $NMTST_SUDO_NO_CALL_SELF, pass the (resolved) command
+ # directly to sudo.
+ exec sudo "$(resolve_cmd "$CMD")" "$@"
+else
+ # by default, call self again with sudo.
+ exec sudo -E "$0" "$CMD" "$@"
+fi
+
diff --git a/tui/nm-editor-bindings.c b/tui/nm-editor-bindings.c
deleted file mode 100644
index 5be13588e..000000000
--- a/tui/nm-editor-bindings.c
+++ /dev/null
@@ -1,1676 +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 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/nmt-editor.c b/tui/nmt-editor.c
deleted file mode 100644
index b204a5c86..000000000
--- a/tui/nmt-editor.c
+++ /dev/null
@@ -1,330 +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 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-page-device.c b/tui/nmt-page-device.c
deleted file mode 100644
index 8ab0747e5..000000000
--- a/tui/nmt-page-device.c
+++ /dev/null
@@ -1,151 +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 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
deleted file mode 100644
index 8c90a67a0..000000000
--- a/tui/nmt-page-device.h
+++ /dev/null
@@ -1,51 +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 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-main.c b/tui/nmt-page-main.c
deleted file mode 100644
index f49b155b3..000000000
--- a/tui/nmt-page-main.c
+++ /dev/null
@@ -1,327 +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 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
deleted file mode 100644
index 20de14f36..000000000
--- a/tui/nmt-page-main.h
+++ /dev/null
@@ -1,51 +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 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-secret-agent.c b/tui/nmt-secret-agent.c
deleted file mode 100644
index 7939a8437..000000000
--- a/tui/nmt-secret-agent.c
+++ /dev/null
@@ -1,646 +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 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
deleted file mode 100644
index 04b158194..000000000
--- a/tui/nmt-secret-agent.h
+++ /dev/null
@@ -1,57 +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 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/vapi/Makefile.in b/vapi/Makefile.in
index 8274cda1f..99e5d0237 100644
--- a/vapi/Makefile.in
+++ b/vapi/Makefile.in
@@ -198,6 +198,8 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -321,6 +323,7 @@ NEWT_CFLAGS = @NEWT_CFLAGS@
NEWT_LIBS = @NEWT_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
+NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
NM_MICRO_VERSION = @NM_MICRO_VERSION@
NM_MINOR_VERSION = @NM_MINOR_VERSION@
@@ -340,6 +343,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -366,7 +370,7 @@ 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@
+UDEV_DIR = @UDEV_DIR@
USE_NLS = @USE_NLS@
UUID_CFLAGS = @UUID_CFLAGS@
UUID_LIBS = @UUID_LIBS@
@@ -690,7 +694,9 @@ uninstall-am: uninstall-vapiDATA
@ENABLE_VAPIGEN_TRUE@define vapigen
@ENABLE_VAPIGEN_TRUE@$(1): $$($(_vapi_name)_GIR)
-@ENABLE_VAPIGEN_TRUE@ $(_vapigen_silent_prefix) $(VAPIGEN) $(_vapigen_silent_opts) \
+@ENABLE_VAPIGEN_TRUE@ $(_vapigen_silent_prefix) \
+@ENABLE_VAPIGEN_TRUE@ G_DEBUG='' \
+@ENABLE_VAPIGEN_TRUE@ $(VAPIGEN) $(_vapigen_silent_opts) \
@ENABLE_VAPIGEN_TRUE@ --library $(1:.vapi=) \
@ENABLE_VAPIGEN_TRUE@ $(foreach _vapi_metadatadir_name,$(if $($(_vapi_name)_METADATADIRS),$($(_vapi_name)_METADATADIRS),$(VAPIGEN_METADATADIRS)),--metadatadir $(_vapi_metadatadir_name)) \
@ENABLE_VAPIGEN_TRUE@ $(foreach _vapi_dir_name,$(if $($(_vapi_name)_VAPIDIRS),$($(_vapi_name)_VAPIDIRS),$(VAPIGEN_VAPIDIRS)),--vapidir $(_vapi_dir_name)) \
diff --git a/vapi/Makefile.vapigen b/vapi/Makefile.vapigen
index feb563342..5163af13d 100644
--- a/vapi/Makefile.vapigen
+++ b/vapi/Makefile.vapigen
@@ -49,7 +49,9 @@ _vapi_name = $(subst /,_,$(subst -,_,$(subst .,_,$(1))))
define vapigen
$(1): $$($(_vapi_name)_GIR)
- $(_vapigen_silent_prefix) $(VAPIGEN) $(_vapigen_silent_opts) \
+ $(_vapigen_silent_prefix) \
+ G_DEBUG='' \
+ $(VAPIGEN) $(_vapigen_silent_opts) \
--library $(1:.vapi=) \
$(foreach _vapi_metadatadir_name,$(if $($(_vapi_name)_METADATADIRS),$($(_vapi_name)_METADATADIRS),$(VAPIGEN_METADATADIRS)),--metadatadir $(_vapi_metadatadir_name)) \
$(foreach _vapi_dir_name,$(if $($(_vapi_name)_VAPIDIRS),$($(_vapi_name)_VAPIDIRS),$(VAPIGEN_VAPIDIRS)),--vapidir $(_vapi_dir_name)) \
diff --git a/vapi/NMClient-1.0.metadata b/vapi/NMClient-1.0.metadata
index 12f146991..2d894d8eb 100644
--- a/vapi/NMClient-1.0.metadata
+++ b/vapi/NMClient-1.0.metadata
@@ -1,6 +1,6 @@
-RemoteSettings.new_async skip
+RemoteSettings.new_finish symbol_type="function"
RemoteConnection.updated#virtual_method skip
-Client.new_async skip
+Client.new_finish symbol_type="function"
ACTIVE_CONNECTION_* cheader_filename="nm-active-connection.h" name="ACTIVE_CONNECTION_(.+)" parent="NM.ActiveConnection"
CLIENT_* cheader_filename="nm-client.h" name="CLIENT_(.+)" parent="NM.Client"